{"version":3,"mappings":"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,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,uBACN,KAAM,uBACN,WAAY,UACZ,aAAc,GACd,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,uBACN,KAAM,uBACN,WAAY,UACZ,WAAY,GACZ,aAAc,CAAC,KAAK,CACxB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,YACN,KAAM,YACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,iBACN,KAAM,iBACN,WAAY,SAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,aACN,KAAM,aACN,WAAY,QACZ,WAAY,GACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,8BACN,KAAM,8BACN,WAAY,UACZ,WAAY,GACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,sBACN,KAAM,sBACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,YACN,KAAM,YACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,aACN,KAAM,aACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,kCACN,KAAM,kCACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,eACN,KAAM,eACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,aACN,KAAM,aACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,yBACN,UAAW,mBACX,KAAM,yBACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,mBACN,KAAM,mBACN,WAAY,SAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,SAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,gBACN,KAAM,gBACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,2BACN,KAAM,2BACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,gBACN,KAAM,gBACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,cACN,KAAM,cACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,gBACN,KAAM,eACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,+BACN,UAAW,WACX,KAAM,+BACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,eACN,KAAM,eACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,aACN,KAAM,aACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,aACN,KAAM,aACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,OACN,KAAM,OACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,mBACN,KAAM,mBACN,WAAY,SAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,iBACN,KAAM,iBACN,WAAY,SAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,GACZ,aAAc,CAAC,gBAAgB,CACnC,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,qBACN,KAAM,qBACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,SACN,KAAM,cACN,KAAM,YACN,WAAY,YACZ,UAAW,KACX,UAAW,KACX,QAAS,mPA2DT,CACJ,EACA,CACI,KAAM,UACN,KAAM,oBACN,KAAM,kBACN,WAAY,YACZ,UAAW,KACX,UAAW,KACX,QAAS,mOAuDT,CACJ,EACA,CACI,KAAM,SACN,KAAM,WACN,KAAM,SACN,WAAY,YACZ,UAAW,KACX,UAAW,KACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,SACN,KAAM,cACN,KAAM,YACN,WAAY,YACZ,UAAW,KACX,UAAW,KACX,QAAS,4NAoDT,CACJ,EACA,CACI,KAAM,SACN,KAAM,mBACN,KAAM,iBACN,WAAY,YACZ,UAAW,KACX,UAAW,KACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,SACN,KAAM,qBACN,KAAM,mBACN,WAAY,YACZ,UAAW,KACX,UAAW,KACX,QAAS,CAAC,MAAO,MAAO,KAAK,CACjC,EACA,CACI,KAAM,SACN,KAAM,iCACN,KAAM,+BACN,WAAY,YACZ,UAAW,KACX,UAAW,KACX,QAAS,mNAmDT,CACJ,EACA,CACI,KAAM,YACN,KAAM,iBACN,KAAM,eACN,WAAY,YACZ,UAAW,QACX,UAAW,QACX,QAAS,+OA0DT,CACJ,EACA,CACI,KAAM,aACN,KAAM,eACN,KAAM,aACN,WAAY,YACZ,UAAW,QACX,UAAW,QACX,QAAS,uJAoCT,CACJ,EACA,CACI,KAAM,YACN,KAAM,iBACN,KAAM,eACN,WAAY,YACZ,UAAW,QACX,UAAW,QACX,QAAS,gMA6CT,CACJ,EACA,CACI,KAAM,YACN,KAAM,sCACN,KAAM,oCACN,WAAY,YACZ,UAAW,QACX,UAAW,QACX,QAAS,mMA+CT,CACJ,EACA,CACI,KAAM,YACN,KAAM,sBACN,KAAM,oBACN,WAAY,YACZ,UAAW,QACX,UAAW,QACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,YACN,KAAM,wBACN,KAAM,sBACN,WAAY,YACZ,UAAW,QACX,UAAW,QACX,QAAS,CAAC,MAAO,MAAO,KAAK,CACjC,EACA,CACI,KAAM,YACN,KAAM,kBACN,KAAM,gBACN,WAAY,YACZ,UAAW,QACX,UAAW,QACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,iBACN,KAAM,iBACN,WAAY,UACZ,WAAY,GACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,UACN,KAAM,eACN,KAAM,aACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,6QA+DT,CACJ,EACA,CACI,KAAM,UACN,KAAM,iBACN,KAAM,eACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,mPA2DT,CACJ,EACA,CACI,KAAM,UACN,KAAM,kCACN,KAAM,gCACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,CACtD,EACA,CACI,KAAM,UACN,KAAM,aACN,KAAM,WACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,yOAsDT,CACJ,EACA,CACI,KAAM,UACN,KAAM,wBACN,KAAM,sBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,CACpE,EACA,CACI,KAAM,UACN,KAAM,kBACN,KAAM,gBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,+HA8BT,CACJ,EACA,CACI,KAAM,UACN,KAAM,qBACN,KAAM,mBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,KAAK,CAC/C,EACA,CACI,KAAM,UACN,KAAM,uCACN,KAAM,qCACN,WAAY,YACZ,UAAW,UACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,uBACN,KAAM,qBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,WACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,qBACN,KAAM,mBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,CACpE,EACA,CACI,KAAM,UACN,KAAM,uBACN,KAAM,qBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,WACA,WACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,WACN,KAAM,4CACN,KAAM,0CACN,WAAY,YACZ,UAAW,UACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,eACN,KAAM,aACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,2PAwDT,CACJ,EACA,CACI,KAAM,UACN,KAAM,wCACN,KAAM,sCACN,WAAY,YACZ,UAAW,UACX,UAAW,MACX,QAAS,+NAsDT,CACJ,EACA,CACI,KAAM,UACN,KAAM,sBACN,KAAM,oBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,kBACN,KAAM,gBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,KAAK,CAC/C,EACA,CACI,KAAM,UACN,KAAM,mBACN,KAAM,iBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,CACpE,EACA,CACI,KAAM,UACN,KAAM,oCACN,KAAM,kCACN,WAAY,YACZ,UAAW,UACX,UAAW,MACX,QAAS,+QA6DT,CACJ,EACA,CACI,KAAM,UACN,KAAM,wBACN,KAAM,sBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,WAAY,MAAO,KAAK,CACzE,EACA,CACI,KAAM,UACN,KAAM,yBACN,KAAM,uBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,KAAK,CAC/C,EACA,CACI,KAAM,UACN,KAAM,wBACN,KAAM,sBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,gBACN,KAAM,cACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,+HA8BT,CACJ,EACA,CACI,KAAM,UACN,KAAM,oDACN,KAAM,kDACN,WAAY,YACZ,UAAW,UACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,kBACN,KAAM,gBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,wBACN,KAAM,sBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,KAAK,CAC/C,EACA,CACI,KAAM,UACN,KAAM,sBACN,KAAM,oBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,sBACN,KAAM,oBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,2BACN,KAAM,yBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,wBACN,KAAM,sBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,WACA,WACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,2BACN,KAAM,yBACN,WAAY,YACZ,UAAW,UACX,UAAW,MACX,QAAS,wOAuDT,CACJ,EACA,CACI,KAAM,UACN,KAAM,uBACN,KAAM,qBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,WACN,KAAM,yCACN,KAAM,uCACN,WAAY,YACZ,UAAW,UACX,UAAW,MACX,QAAS,0IA6BT,CACJ,EACA,CACI,KAAM,UACN,KAAM,qBACN,KAAM,mBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,WACA,WACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,uBACN,KAAM,qBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,OACN,KAAM,OACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,mBACN,KAAM,mBACN,WAAY,SAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,gBACN,KAAM,gBACN,WAAY,SAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,uBACN,KAAM,qBACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,iBACN,KAAM,iBACN,WAAY,UACZ,WAAY,GACZ,aAAc,CAAC,IAAI,CACvB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,YACN,KAAM,YACN,WAAY,SAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,aACN,KAAM,aACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,gBACN,KAAM,gBACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,oBACN,KAAM,oBACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,YACN,KAAM,YACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,YACN,KAAM,YACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,gBACN,KAAM,gBACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,OACN,KAAM,OACN,WAAY,SAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,YACN,KAAM,YACN,WAAY,SAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,oCACN,KAAM,oCACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,YACN,KAAM,YACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,UACN,KAAM,eACN,KAAM,aACN,WAAY,YACZ,UAAW,MACX,UAAW,MACX,QAAS,mOAuDT,CACJ,EACA,CACI,KAAM,UACN,KAAM,qBACN,KAAM,mBACN,WAAY,YACZ,UAAW,MACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,kCACN,KAAM,gCACN,WAAY,YACZ,UAAW,MACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,eACN,KAAM,aACN,WAAY,YACZ,UAAW,MACX,UAAW,MACX,QAAS,4LA4CT,CACJ,EACA,CACI,KAAM,eACN,KAAM,gBACN,KAAM,cACN,WAAY,YACZ,UAAW,MACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,oBACN,KAAM,kBACN,WAAY,YACZ,UAAW,MACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,sBACN,KAAM,oBACN,WAAY,YACZ,UAAW,MACX,UAAW,MACX,QAAS,CAAC,MAAO,MAAO,KAAK,CACjC,EACA,CACI,KAAM,WACN,KAAM,kCACN,KAAM,gCACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,CAAC,MAAO,MAAO,KAAK,CACjC,EACA,CACI,KAAM,WACN,KAAM,yBACN,KAAM,uBACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,CAAC,MAAO,KAAK,CAC1B,EACA,CACI,KAAM,WACN,KAAM,uBACN,KAAM,qBACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,WACN,KAAM,0BACN,KAAM,wBACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,aACN,KAAM,8DACN,KAAM,0DACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,+HA8BT,CACJ,EACA,CACI,KAAM,WACN,KAAM,4BACN,KAAM,0BACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,WACN,KAAM,mCACN,KAAM,iCACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,YACN,KAAM,wCACN,KAAM,sCACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,CACtD,EACA,CACI,KAAM,WACN,KAAM,uBACN,KAAM,qBACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,CAAC,MAAO,MAAO,KAAK,CACjC,EACA,CACI,KAAM,WACN,KAAM,4BACN,KAAM,0BACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,CAC7D,EACA,CACI,KAAM,YACN,KAAM,wCACN,KAAM,sCACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,yBACN,KAAM,uBACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,2JAqCT,CACJ,EACA,CACI,KAAM,YACN,KAAM,sCACN,KAAM,oCACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,CAAC,MAAO,MAAO,MAAO,KAAK,CACxC,EACA,CACI,KAAM,YACN,KAAM,uCACN,KAAM,qCACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,CAAC,MAAO,MAAO,KAAK,CACjC,EACA,CACI,KAAM,WACN,KAAM,yCACN,KAAM,uCACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,+IAkCT,CACJ,EACA,CACI,KAAM,aACN,KAAM,0CACN,KAAM,wCACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,WACN,KAAM,qBACN,KAAM,mBACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,WACN,KAAM,wBACN,KAAM,sBACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,KAAK,CAC/C,EACA,CACI,KAAM,WACN,KAAM,4BACN,KAAM,0BACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,cACN,KAAM,oDACN,KAAM,gDACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,mJAmCT,CACJ,EACA,CACI,KAAM,WACN,KAAM,oCACN,KAAM,kCACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,CAAC,MAAO,MAAO,KAAK,CACjC,EACA,CACI,KAAM,WACN,KAAM,gCACN,KAAM,8BACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,mMA+CT,CACJ,EACA,CACI,KAAM,YACN,KAAM,yCACN,KAAM,uCACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,CACtD,EACA,CACI,KAAM,WACN,KAAM,oCACN,KAAM,kCACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,CAAC,MAAO,KAAK,CAC1B,EACA,CACI,KAAM,WACN,KAAM,4BACN,KAAM,0BACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,YACN,KAAM,wCACN,KAAM,sCACN,WAAY,YACZ,UAAW,aACX,UAAW,WACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,eACN,KAAM,aACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,+OA0DT,CACJ,EACA,CACI,KAAM,UACN,KAAM,iBACN,KAAM,eACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,2NAqDT,CACJ,EACA,CACI,KAAM,UACN,KAAM,oBACN,KAAM,kBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,6BACN,KAAM,2BACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,2NAqDT,CACJ,EACA,CACI,KAAM,UACN,KAAM,iCACN,KAAM,+BACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,qBACN,KAAM,mBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,CACpE,EACA,CACI,KAAM,UACN,KAAM,gCACN,KAAM,8BACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,gQA6DT,CACJ,EACA,CACI,KAAM,UACN,KAAM,uBACN,KAAM,qBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,wCACN,KAAM,sCACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,uMAgDT,CACJ,EACA,CACI,KAAM,UACN,KAAM,wBACN,KAAM,sBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,CAC7D,EACA,CACI,KAAM,UACN,KAAM,yBACN,KAAM,uBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,KAAK,CAC/C,EACA,CACI,KAAM,WACN,KAAM,8CACN,KAAM,2CACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,4KAwCT,CACJ,EACA,CACI,KAAM,UACN,KAAM,sBACN,KAAM,oBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,WACN,KAAM,2CACN,KAAM,yCACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,uJAoCT,CACJ,EACA,CACI,KAAM,UACN,KAAM,2BACN,KAAM,yBACN,WAAY,YACZ,UAAW,QACX,UAAW,MACX,QAAS,mNAmDT,CACJ,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,cACN,KAAM,cACN,WAAY,SAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,iCACN,KAAM,iCACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,OACN,KAAM,OACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,OACN,KAAM,OACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,SAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,aACN,KAAM,aACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,aACN,KAAM,aACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,wBACN,KAAM,wBACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,cACN,KAAM,cACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,OACN,KAAM,OACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,cACN,KAAM,cACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,gBACN,KAAM,gBACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,YACN,KAAM,YACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,YACN,KAAM,YACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,aACN,KAAM,aACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,SAChB,EACA,CACI,KAAM,cACN,KAAM,uBACN,KAAM,qBACN,WAAY,YACZ,UAAW,WACX,UAAW,WACX,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,CACtD,EACA,CACI,KAAM,cACN,KAAM,4BACN,KAAM,0BACN,WAAY,YACZ,UAAW,WACX,UAAW,WACX,QAAS,0JAiCT,CACJ,EACA,CACI,KAAM,cACN,KAAM,2BACN,KAAM,yBACN,WAAY,YACZ,UAAW,WACX,UAAW,WACX,QAAS,mHA2BT,CACJ,EACA,CACI,KAAM,gBACN,KAAM,0CACN,KAAM,wCACN,WAAY,YACZ,UAAW,WACX,UAAW,WACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,eACN,KAAM,gCACN,KAAM,8BACN,WAAY,YACZ,UAAW,WACX,UAAW,WACX,QAAS,wMA+CT,CACJ,EACA,CACI,KAAM,gBACN,KAAM,uCACN,KAAM,qCACN,WAAY,YACZ,UAAW,WACX,UAAW,WACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,cACN,KAAM,4BACN,KAAM,0BACN,WAAY,YACZ,UAAW,WACX,UAAW,WACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,cACN,KAAM,+BACN,KAAM,6BACN,WAAY,YACZ,UAAW,WACX,UAAW,WACX,QAAS,CAAC,MAAO,MAAO,MAAO,KAAK,CACxC,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,6BACN,KAAM,2BACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,aACN,KAAM,aACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,mBACN,KAAM,mBACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,kBACN,KAAM,kBACN,WAAY,UACZ,WAAY,GACZ,aAAc,CAAC,WAAW,CAC9B,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,OACN,KAAM,OACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,aACN,KAAM,aACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,2BACN,KAAM,2BACN,WAAY,SAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,aACN,KAAM,aACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,aACN,KAAM,aACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,aACN,KAAM,aACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,aACN,KAAM,aACN,WAAY,SAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,YACN,KAAM,YACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,SAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,gBACN,KAAM,gBACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,iBACN,KAAM,iBACN,WAAY,SAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,YACN,KAAM,YACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,OACN,KAAM,OACN,WAAY,SAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,cACN,KAAM,cACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,cACN,KAAM,cACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,OACN,KAAM,OACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,WACN,KAAM,WACN,KAAM,WACN,WAAY,OAChB,EACA,CACI,KAAM,WACN,KAAM,SACN,KAAM,SACN,WAAY,YACZ,iBAAkB,CAAC,KAAK,EACxB,QAAS,gSAgET,CACJ,EACA,CACI,KAAM,WACN,KAAM,wBACN,KAAM,wBACN,WAAY,OAChB,EACA,CACI,KAAM,WACN,KAAM,OACN,KAAM,OACN,WAAY,YACZ,iBAAkB,CAAC,KAAK,EACxB,QAAS,yTAgET,CACJ,EACA,CACI,KAAM,WACN,KAAM,kBACN,KAAM,kBACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,uBACN,KAAM,uBACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,qBACN,KAAM,qBACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,kBACN,KAAM,kBACN,WAAY,YACZ,QAAS,CAAC,MAAO,KAAK,CAC1B,EACA,CACI,KAAM,WACN,KAAM,kBACN,KAAM,kBACN,WAAY,OAChB,EACA,CACI,KAAM,WACN,KAAM,iBACN,KAAM,iBACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,iCACN,KAAM,iCACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,8BACN,KAAM,8BACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,oBACN,KAAM,kBACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,YACN,KAAM,sBACN,KAAM,oBACN,WAAY,YACZ,QAAS,uHA4BT,CACJ,EACA,CACI,KAAM,WACN,KAAM,SACN,KAAM,SACN,WAAY,YACZ,iBAAkB,CAAC,KAAK,EACxB,QAAS,+YAyET,CACJ,EACA,CACI,KAAM,WACN,KAAM,oBACN,KAAM,kBACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,iBACN,KAAM,iBACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,eACN,KAAM,eACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,eACN,KAAM,eACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,wBACN,KAAM,wBACN,WAAY,eACZ,QAAS,oXA0FT,CACJ,EACA,CACI,KAAM,WACN,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,WACN,KAAM,iBACN,KAAM,eACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,uBACN,KAAM,uBACN,WAAY,eACZ,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,WACN,KAAM,gCACN,KAAM,gCACN,WAAY,eACZ,QAAS,uMAgDT,CACJ,EACA,CACI,KAAM,WACN,KAAM,YACN,KAAM,YACN,WAAY,YACZ,iBAAkB,CAAC,KAAK,EACxB,QAAS,CAAC,MAAO,MAAO,MAAO,KAAK,CACxC,EACA,CACI,KAAM,WACN,KAAM,6BACN,KAAM,6BACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,mBACN,KAAM,mBACN,WAAY,OAChB,EACA,CACI,KAAM,WACN,KAAM,gBACN,KAAM,gBACN,WAAY,YACZ,iBAAkB,CAAC,KAAK,EACxB,QAAS,4LA4CT,CACJ,EACA,CACI,KAAM,UACN,KAAM,sBACN,KAAM,sBACN,WAAY,YACZ,QAAS,i/BAwNT,CACJ,EACA,CACI,KAAM,WACN,KAAM,UACN,KAAM,UACN,WAAY,YACZ,iBAAkB,CAAC,KAAK,EACxB,QAAS,mHA2BT,CACJ,EACA,CACI,KAAM,WACN,KAAM,oBACN,KAAM,oBACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,8BACN,KAAM,8BACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,YACN,KAAM,YACN,WAAY,YACZ,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,WACN,KAAM,sCACN,KAAM,sCACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,sBACN,KAAM,sBACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,gBACN,KAAM,gBACN,WAAY,YACZ,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,WACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,WACN,KAAM,sBACN,KAAM,sBACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,oBACN,KAAM,oBACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,iBACN,KAAM,eACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,0BACN,KAAM,0BACN,WAAY,OAChB,EACA,CACI,KAAM,UACN,KAAM,sBACN,KAAM,sBACN,WAAY,YACZ,QAAS,oQA8DT,CACJ,EACA,CACI,KAAM,WACN,KAAM,aACN,KAAM,aACN,WAAY,OAChB,EACA,CACI,KAAM,WACN,KAAM,gBACN,KAAM,gBACN,WAAY,OAChB,EACA,CACI,KAAM,WACN,KAAM,wBACN,KAAM,wBACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,eACN,KAAM,eACN,WAAY,OAChB,EACA,CACI,KAAM,WACN,KAAM,yBACN,KAAM,yBACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,gCACN,KAAM,gCACN,WAAY,eACZ,QAAS,4PA4DT,CACJ,EACA,CACI,KAAM,WACN,KAAM,OACN,KAAM,OACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,QACN,KAAM,QACN,WAAY,YACZ,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,WACA,WACA,WACA,WACA,WACA,UACJ,CACJ,EACA,CACI,KAAM,WACN,KAAM,yBACN,KAAM,yBACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,sBACN,KAAM,sBACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,aACN,KAAM,aACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,0BACN,KAAM,yBACN,WAAY,UACZ,aAAc,EAClB,EACA,CACI,KAAM,WACN,KAAM,WACN,KAAM,WACN,WAAY,OAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,SAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,OACN,KAAM,OACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,UACN,KAAM,qBACN,KAAM,mBACN,WAAY,YACZ,UAAW,MACX,UAAW,MACX,QAAS,uPA4DT,CACJ,EACA,CACI,KAAM,UACN,KAAM,eACN,KAAM,aACN,WAAY,YACZ,UAAW,MACX,UAAW,MACX,QAAS,mNAmDT,CACJ,EACA,CACI,KAAM,UACN,KAAM,gCACN,KAAM,8BACN,WAAY,YACZ,UAAW,MACX,UAAW,MACX,QAAS,2MAiDT,CACJ,EACA,CACI,KAAM,WACN,KAAM,iCACN,KAAM,+BACN,WAAY,YACZ,UAAW,MACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,sBACN,KAAM,oBACN,WAAY,YACZ,UAAW,MACX,UAAW,MACX,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,KAAK,CAC/C,EACA,CACI,KAAM,UACN,KAAM,2BACN,KAAM,yBACN,WAAY,YACZ,UAAW,MACX,UAAW,MACX,QAAS,uNAoDT,CACJ,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,cACN,KAAM,cACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,mBACN,KAAM,mBACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,cACN,KAAM,cACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,cACN,KAAM,cACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,YACN,KAAM,YACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,SACN,UAAW,SACX,KAAM,aACN,KAAM,aACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,mBACN,KAAM,mBACN,WAAY,SAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,SAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,eACN,KAAM,eACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,YACN,KAAM,YACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,+CACN,KAAM,+CACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,eACN,KAAM,eACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,yBACN,KAAM,yBACN,WAAY,QACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,kBACN,KAAM,kBACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,eACN,KAAM,eACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,cACN,KAAM,cACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,aACN,KAAM,aACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,4BACN,KAAM,4BACN,WAAY,SAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,cACN,KAAM,cACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,wBACN,KAAM,wBACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,GACZ,aAAc,CAAC,WAAW,CAC9B,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,4BACN,KAAM,0BACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,aACN,KAAM,aACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,2BACN,UAAW,mBACX,KAAM,2BACN,WAAY,SAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,OACN,KAAM,OACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,OACN,KAAM,OACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,aACN,KAAM,aACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,SAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,eACN,KAAM,eACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,aACN,KAAM,aACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,sBACN,KAAM,sBACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,WACN,KAAM,gBACN,KAAM,cACN,WAAY,YACZ,UAAW,OACX,UAAW,OACX,QAAS,wOAuDT,CACJ,EACA,CACI,KAAM,WACN,KAAM,kBACN,KAAM,gBACN,WAAY,YACZ,UAAW,OACX,UAAW,OACX,QAAS,u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,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,YACN,KAAM,yBACN,KAAM,uBACN,WAAY,YACZ,UAAW,WACX,UAAW,SACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,YACN,KAAM,8BACN,KAAM,4BACN,WAAY,YACZ,UAAW,WACX,UAAW,SACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,YACN,KAAM,2BACN,KAAM,yBACN,WAAY,YACZ,UAAW,WACX,UAAW,SACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,YACN,KAAM,8BACN,KAAM,4BACN,WAAY,YACZ,UAAW,WACX,UAAW,SACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,+NAsDT,CACJ,EACA,CACI,KAAM,YACN,KAAM,0BACN,KAAM,wBACN,WAAY,YACZ,UAAW,WACX,UAAW,SACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,YACN,KAAM,wBACN,KAAM,sBACN,WAAY,YACZ,UAAW,WACX,UAAW,SACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,YACN,KAAM,0BACN,KAAM,wBACN,WAAY,YACZ,UAAW,WACX,UAAW,SACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,YACN,KAAM,qCACN,KAAM,mCACN,WAAY,YACZ,UAAW,QACX,UAAW,SACX,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,CACtD,EACA,CACI,KAAM,YACN,KAAM,qCACN,KAAM,mCACN,WAAY,YACZ,UAAW,QACX,UAAW,SACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,YACN,KAAM,uCACN,KAAM,qCACN,WAAY,YACZ,UAAW,QACX,UAAW,SACX,QAAS,2OAyDT,CACJ,EACA,CACI,KAAM,aACN,KAAM,0CACN,KAAM,wCACN,WAAY,YACZ,UAAW,QACX,UAAW,SACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,YACN,KAAM,2CACN,KAAM,yCACN,WAAY,YACZ,UAAW,QACX,UAAW,SACX,QAAS,2NAqDT,CACJ,EACA,CACI,KAAM,aACN,KAAM,4CACN,KAAM,0CACN,WAAY,YACZ,UAAW,QACX,UAAW,SACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,WACN,KAAM,mBACN,KAAM,iBACN,WAAY,YACZ,UAAW,QACX,UAAW,SACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,YACN,KAAM,8BACN,KAAM,4BACN,WAAY,YACZ,UAAW,QACX,UAAW,SACX,QAAS,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CZ,UAAW,MACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,SACN,KAAM,sBACN,KAAM,oBACN,WAAY,YACZ,UAAW,MACX,UAAW,MACX,QAAS,CAAC,MAAO,MAAO,MAAO,KAAK,CACxC,EACA,CACI,KAAM,SACN,KAAM,gBACN,KAAM,cACN,WAAY,YACZ,UAAW,MACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,gCACN,KAAM,8BACN,WAAY,YACZ,UAAW,MACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,UACN,KAAM,2BACN,KAAM,yBACN,WAAY,YACZ,UAAW,MACX,UAAW,MACX,QAAS,+MAkDT,CACJ,EACA,CACI,KAAM,WACN,KAAM,kCACN,KAAM,gCACN,WAAY,YACZ,UAAW,MACX,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,CACJ,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,oBACN,KAAM,oBACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,eACN,KAAM,eACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAChB,EACA,CACI,KAAM,MAC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,IAA0D,EAC3DL,GAAWM,MAAO,CAEf,CACI,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACLj4K,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL0H,EAAG,GACH8kC,EAAG,GACHrnC,EAAG,GACHonC,EAAG,GACHP,EAAG,GACHxpC,EAAG,GACH01K,EAAG,GACHrrI,EAAG,GACHof,EAAG,GACHksH,EAAG,GACHrrI,EAAG,GACHT,EAAG,GACHsf,EAAG,GACHO,EAAG,GACHn0D,EAAG,GACHhE,EAAG,GACH24C,EAAG,GACHqnH,EAAG,GACH3zJ,EAAG,GACHqrD,EAAG,GACHa,EAAG,GACH/7D,EAAG,GACHo8C,EAAG,IACHyrI,EAAG,GACHtgD,EAAG,GACHugD,EAAG,GACH,IAAK,GACL,KAAM,GACN,IAAK,GACL,IAAK,GACLpsI,EAAG,GACH,IAAK,GACLvxB,EAAG,GACHC,EAAG,GACH+H,EAAG,GACH4pB,EAAG,GACHP,EAAG,GACHgB,EAAG,GACHwe,EAAG,GACH3e,EAAG,GACH1vC,EAAG,GACH04H,EAAG,GACHt1H,EAAG,GACH8rC,EAAG,GACHK,EAAG,GACHnxC,EAAG,GACH4wC,EAAG,GACHtxB,EAAG,GACHuxC,EAAG,GACHd,EAAG,GACHlf,EAAG,GACHif,EAAG,GACHI,EAAG,GACHz1C,EAAG,GACHi2C,EAAG,GACHzwD,EAAG,GACHmwD,EAAG,GACHwrE,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACLohD,EAAG,GACH,IAAK,GACLC,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,IACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,IACL,IAAK,GACL,IAAK,EACT,EAEA,CACI,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACLv4K,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL0H,EAAG,GACH8kC,EAAG,GACHrnC,EAAG,GACHonC,EAAG,GACHP,EAAG,GACHxpC,EAAG,GACH01K,EAAG,GACHrrI,EAAG,GACHof,EAAG,GACHksH,EAAG,GACHrrI,EAAG,GACHT,EAAG,GACHsf,EAAG,GACHO,EAAG,GACHn0D,EAAG,GACHhE,EAAG,GACH24C,EAAG,GACHqnH,EAAG,GACH3zJ,EAAG,GACHqrD,EAAG,GACHa,EAAG,GACH/7D,EAAG,GACHo8C,EAAG,IACHyrI,EAAG,GACHtgD,EAAG,GACHugD,EAAG,GACH,IAAK,GACL,KAAM,GACN,IAAK,GACL,IAAK,GACLpsI,EAAG,GACH,IAAK,GACLvxB,EAAG,GACHC,EAAG,GACH+H,EAAG,GACH4pB,EAAG,GACHP,EAAG,GACHgB,EAAG,GACHwe,EAAG,GACH3e,EAAG,GACH1vC,EAAG,GACH04H,EAAG,GACHt1H,EAAG,GACH8rC,EAAG,GACHK,EAAG,GACHnxC,EAAG,GACH4wC,EAAG,GACHtxB,EAAG,GACHuxC,EAAG,GACHd,EAAG,GACHlf,EAAG,GACHif,EAAG,GACHI,EAAG,GACHz1C,EAAG,GACHi2C,EAAG,GACHzwD,EAAG,GACHmwD,EAAG,GACHwrE,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACLohD,EAAG,GACH,IAAK,GACLC,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,IACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,IACL,IAAK,GACL,IAAK,EACT,EAEA,CACI,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACLv4K,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL0H,EAAG,GACH8kC,EAAG,GACHrnC,EAAG,GACHonC,EAAG,GACHP,EAAG,GACHxpC,EAAG,GACH01K,EAAG,GACHrrI,EAAG,GACHof,EAAG,GACHksH,EAAG,GACHrrI,EAAG,GACHT,EAAG,GACHsf,EAAG,GACHO,EAAG,GACHn0D,EAAG,GACHhE,EAAG,GACH24C,EAAG,GACHqnH,EAAG,GACH3zJ,EAAG,GACHqrD,EAAG,GACHa,EAAG,GACH/7D,EAAG,GACHo8C,EAAG,GACHyrI,EAAG,GACHtgD,EAAG,GACHugD,EAAG,GACH,IAAK,GACL,KAAM,GACN,IAAK,GACL,IAAK,GACLpsI,EAAG,GACH,IAAK,GACLvxB,EAAG,GACHC,EAAG,GACH+H,EAAG,GACH4pB,EAAG,GACHP,EAAG,GACHgB,EAAG,GACHwe,EAAG,GACH3e,EAAG,GACH1vC,EAAG,GACH04H,EAAG,GACHt1H,EAAG,GACH8rC,EAAG,GACHK,EAAG,GACHnxC,EAAG,GACH4wC,EAAG,GACHtxB,EAAG,GACHuxC,EAAG,GACHd,EAAG,GACHlf,EAAG,GACHif,EAAG,GACHI,EAAG,GACHz1C,EAAG,GACHi2C,EAAG,GACHzwD,EAAG,GACHmwD,EAAG,GACHwrE,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACLohD,EAAG,GACH,IAAK,GACLC,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,IACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,IACL,IAAK,GACL,IAAK,EACT,EAEA,CACI,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACLv4K,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL0H,EAAG,GACH8kC,EAAG,GACHrnC,EAAG,GACHonC,EAAG,GACHP,EAAG,GACHxpC,EAAG,GACH01K,EAAG,GACHrrI,EAAG,GACHof,EAAG,GACHksH,EAAG,GACHrrI,EAAG,GACHT,EAAG,GACHsf,EAAG,GACHO,EAAG,GACHn0D,EAAG,GACHhE,EAAG,GACH24C,EAAG,GACHqnH,EAAG,GACH3zJ,EAAG,GACHqrD,EAAG,GACHa,EAAG,GACH/7D,EAAG,GACHo8C,EAAG,GACHyrI,EAAG,GACHtgD,EAAG,GACHugD,EAAG,GACH,IAAK,GACL,KAAM,GACN,IAAK,GACL,IAAK,GACLpsI,EAAG,GACH,IAAK,GACLvxB,EAAG,GACHC,EAAG,GACH+H,EAAG,GACH4pB,EAAG,GACHP,EAAG,GACHgB,EAAG,GACHwe,EAAG,GACH3e,EAAG,GACH1vC,EAAG,GACH04H,EAAG,GACHt1H,EAAG,GACH8rC,EAAG,GACHK,EAAG,GACHnxC,EAAG,GACH4wC,EAAG,GACHtxB,EAAG,GACHuxC,EAAG,GACHd,EAAG,GACHlf,EAAG,GACHif,EAAG,GACHI,EAAG,GACHz1C,EAAG,GACHi2C,EAAG,GACHzwD,EAAG,GACHmwD,EAAG,GACHwrE,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACLohD,EAAG,GACH,IAAK,GACLC,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,IACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,IACL,IAAK,GACL,IAAK,EACT,CACJ,GACCZ,GAAWa,iBAAkB,CAE1B,CACI,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACLx4K,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL0H,EAAG,GACH8kC,EAAG,GACHrnC,EAAG,GACHonC,EAAG,GACHP,EAAG,GACHxpC,EAAG,GACH01K,EAAG,GACHrrI,EAAG,GACHof,EAAG,GACHksH,EAAG,GACHrrI,EAAG,GACHT,EAAG,GACHsf,EAAG,GACHO,EAAG,GACHn0D,EAAG,GACHhE,EAAG,GACH24C,EAAG,GACHqnH,EAAG,GACH3zJ,EAAG,GACHqrD,EAAG,GACHa,EAAG,GACH/7D,EAAG,GACHo8C,EAAG,GACHyrI,EAAG,GACHtgD,EAAG,GACHugD,EAAG,GACH,IAAK,GACL,KAAM,GACN,IAAK,GACL,IAAK,GACLpsI,EAAG,GACH,IAAK,GACLvxB,EAAG,GACHC,EAAG,GACH+H,EAAG,GACH4pB,EAAG,GACHP,EAAG,GACHgB,EAAG,GACHwe,EAAG,GACH3e,EAAG,GACH1vC,EAAG,GACH04H,EAAG,GACHt1H,EAAG,GACH8rC,EAAG,GACHK,EAAG,GACHnxC,EAAG,GACH4wC,EAAG,GACHtxB,EAAG,GACHuxC,EAAG,GACHd,EAAG,GACHlf,EAAG,GACHif,EAAG,GACHI,EAAG,GACHz1C,EAAG,GACHi2C,EAAG,GACHzwD,EAAG,GACHmwD,EAAG,GACHwrE,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACLohD,EAAG,GACH,IAAK,GACLC,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,IACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,EACT,EAEA,CACI,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACLv4K,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL0H,EAAG,GACH8kC,EAAG,GACHrnC,EAAG,GACHonC,EAAG,GACHP,EAAG,GACHxpC,EAAG,GACH01K,EAAG,GACHrrI,EAAG,GACHof,EAAG,GACHksH,EAAG,GACHrrI,EAAG,GACHT,EAAG,GACHsf,EAAG,GACHO,EAAG,GACHn0D,EAAG,GACHhE,EAAG,GACH24C,EAAG,GACHqnH,EAAG,GACH3zJ,EAAG,GACHqrD,EAAG,GACHa,EAAG,GACH/7D,EAAG,GACHo8C,EAAG,GACHyrI,EAAG,GACHtgD,EAAG,GACHugD,EAAG,GACH,IAAK,GACL,KAAM,GACN,IAAK,GACL,IAAK,GACLpsI,EAAG,GACH,IAAK,GACLvxB,EAAG,GACHC,EAAG,GACH+H,EAAG,GACH4pB,EAAG,GACHP,EAAG,GACHgB,EAAG,GACHwe,EAAG,GACH3e,EAAG,GACH1vC,EAAG,GACH04H,EAAG,GACHt1H,EAAG,GACH8rC,EAAG,GACHK,EAAG,GACHnxC,EAAG,GACH4wC,EAAG,GACHtxB,EAAG,GACHuxC,EAAG,GACHd,EAAG,GACHlf,EAAG,GACHif,EAAG,GACHI,EAAG,GACHz1C,EAAG,GACHi2C,EAAG,GACHzwD,EAAG,GACHmwD,EAAG,GACHwrE,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACLohD,EAAG,GACH,IAAK,GACLC,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,IACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,EACT,EAEA,CACI,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACLv4K,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL0H,EAAG,GACH8kC,EAAG,GACHrnC,EAAG,GACHonC,EAAG,GACHP,EAAG,GACHxpC,EAAG,GACH01K,EAAG,GACHrrI,EAAG,GACHof,EAAG,GACHksH,EAAG,GACHrrI,EAAG,GACHT,EAAG,GACHsf,EAAG,GACHO,EAAG,GACHn0D,EAAG,GACHhE,EAAG,GACH24C,EAAG,GACHqnH,EAAG,GACH3zJ,EAAG,GACHqrD,EAAG,GACHa,EAAG,GACH/7D,EAAG,GACHo8C,EAAG,GACHyrI,EAAG,GACHtgD,EAAG,GACHugD,EAAG,GACH,IAAK,GACL,KAAM,GACN,IAAK,GACL,IAAK,GACLpsI,EAAG,GACH,IAAK,GACLvxB,EAAG,GACHC,EAAG,GACH+H,EAAG,GACH4pB,EAAG,GACHP,EAAG,GACHgB,EAAG,GACHwe,EAAG,GACH3e,EAAG,GACH1vC,EAAG,GACH04H,EAAG,GACHt1H,EAAG,GACH8rC,EAAG,GACHK,EAAG,GACHnxC,EAAG,GACH4wC,EAAG,GACHtxB,EAAG,GACHuxC,EAAG,GACHd,EAAG,GACHlf,EAAG,GACHif,EAAG,GACHI,EAAG,GACHz1C,EAAG,GACHi2C,EAAG,GACHzwD,EAAG,GACHmwD,EAAG,GACHwrE,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACLohD,EAAG,GACH,IAAK,GACLC,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,IACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,IACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,EACT,EAEA,CACI,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACLv4K,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL0H,EAAG,GACH8kC,EAAG,GACHrnC,EAAG,GACHonC,EAAG,GACHP,EAAG,GACHxpC,EAAG,GACH01K,EAAG,GACHrrI,EAAG,GACHof,EAAG,GACHksH,EAAG,GACHrrI,EAAG,GACHT,EAAG,GACHsf,EAAG,GACHO,EAAG,GACHn0D,EAAG,GACHhE,EAAG,GACH24C,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9B,GACEG,EACA79B,EACAqsB,GACA,CAACgQ,EACH,EACA,MAAM,EACR,IAAK,GACH,GAAsC,KACtC,MACF,IAAK,GACL,IAAK,GACH,MACF,QACE,MAAM,MAAMlpD,EAAuB,GAAG,CAAC,CAC3C,CACA,IACG6sB,EAAQ,YAAcA,IACrB,EAAa68B,GAA+B,IAAM7rN,GAAI,EACxD,GAAK+sN,GACL,CAOA,GANAL,GACEG,EACA79B,EACAqsB,GACA,CAACgQ,EACH,EACUp8B,GAAa49B,EAAiB,EAAG,CAAC,CAAC,IAAzC,EAA4C,MAAM,EACtD,GAAsB79B,EACtB,EAAgB,cAAgBq+B,GAC9BC,GAAsB,KACpB,KACAT,EACAC,EACA5oB,GACA6nB,GACAH,GACA58B,EACAqsB,GACAoQ,GACAE,GACAN,GACA6B,EACA,YACA,GACA,CACF,EACAH,CACF,EACA,MAAM,CACR,CACAO,GACET,EACAC,EACA5oB,GACA6nB,GACAH,GACA58B,EACAqsB,GACAoQ,GACAE,GACAN,GACA6B,EACA,KACA,GACA,CACF,CACF,CAEF,KAtFE,CAuFJ,OAAS,GACTP,GAAsBjF,CAAa,CACrC,CACA,SAAS4F,GACP,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACA,EAAK,cAAgB,GACrB,IAAI5O,EAAeY,EAAa,aAC9B4F,GAA4Bl2B,EAAQ,aAAeA,EACrD,EAAwB,MAEtBk2B,GACAxG,EAAe,OACDA,EAAe,WAA7B,YAGI,EAAwB,CACxB,YAAa,KACb,MAAO,EACP,SAAU,EACV,SAAU,EACV,gBAAiB,CAAC,EAClB,iBAAkB,CAAC,EACnB,yBAA0B,CAAC,EAC3B,UAAWloB,EACb,EACC,GAA2B,KAC5B0zB,GACE5K,EACAtwB,EACAu+B,CACF,EACArI,IACI,EAAeqI,EAChB,EAA2BpuJ,EAAK,cAChC,GACO+lJ,EAAyB,WAA/B,EACIA,EACAA,EAAyB,eAC7B,sBACMA,GAAR,OACG,EAAa,QACb,EAAa,yBAA2B,CAAC,EACzC,EAAesI,GAAY,KAAK9O,CAAY,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AiB,IAAI,IACrBC,GAAwB,IAAI,IAC5BC,GAAiC,CAAC,EAClCT,GACE,sPAAsP,MACpP,GACF,EACJ,SAASF,GAAuB,EAAc,EAAa,CACzD,OAAQ1nC,EAAR,CACE,IAAK,UACL,IAAK,WACH,GAAc,KACd,MACF,IAAK,YACL,IAAK,YACH,GAAa,KACb,MACF,IAAK,YACL,IAAK,WACH,GAAc,KACd,MACF,IAAK,cACL,IAAK,aACHmoC,GAAe,OAAOpsC,EAAY,SAAS,EAC3C,MACF,IAAK,oBACL,IAAK,qBACHqsC,GAAsB,OAAOrsC,EAAY,SAAS,CACtD,CACF,CACA,SAASusC,GACP,EACA,EACA,EACA,EACA,EACA,EACA,CAuBA,OArBWC,IAAT,MACAA,EAAoB,cAAgBxsC,GAGjC,EAAsB,CACV,YACG,eACI,mBACL,cACb,iBAAkB,CAACm+B,CAAe,CACpC,EACSqN,IAAT,OACI,EAAYlvC,GAAoBkvC,CAAS,EAClCA,IAAT,MAAsBF,GAA2BE,CAAS,GAC5DgB,IAEJ,EAAoB,kBAAoBrP,EACxC,EAAYqP,EAAoB,iBACvBrO,IAAT,MACSqN,EAAU,QAAQrN,CAAe,IAAxC,IACAqN,EAAU,KAAKrN,CAAe,EACzBqO,EACT,CACA,SAASZ,GACP,EACA,EACA,EACA,EACA,EACA,CACA,OAAQ3nC,EAAR,CACE,IAAK,UACH,MACG,IAAcsoC,GACbN,GACAT,EACAvnC,EACAk5B,EACAgB,EACAn+B,CACF,EACA,CAAC,EAEL,IAAK,YACH,MACG,IAAausC,GACZL,GACAV,EACAvnC,EACAk5B,EACAgB,EACAn+B,CACF,EACA,CAAC,EAEL,IAAK,YACH,MACG,IAAcusC,GACbJ,GACAX,EACAvnC,EACAk5B,EACAgB,EACAn+B,CACF,EACA,CAAC,EAEL,IAAK,cACH,IAAIysC,EAAYzsC,EAAY,UAY5B,OAXAosC,GAAe,IACbK,EACAF,GACEH,GAAe,IAAIK,CAAS,GAAK,KACjCjB,EACAvnC,EACAk5B,EACAgB,EACAn+B,CACF,CACF,EACO,CAAC,EACV,IAAK,oBACH,MACG,GAAYA,EAAY,U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CtkB,IAAIqxN,IAAK,CACL,QAAS,CACP,IAAK,MACL,IAAK,MACL,OAAQ,MACR,IAAK,MACL,IAAK,KACP,EACA,QAAS,CACP,IAAK,MACL,IAAK,OACL,IAAK,OACL,IAAK,MACP,EACA,MAAO,CACL,IAAK,OACL,IAAK,OACL,IAAK,OACL,IAAK,MACP,EACA,gBAAiB,CACf,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,OACP,EACA,KAAM,CACJ,IAAK,OACP,EACA,aAAc,CACZ,IAAK,QACP,EACA,WAAY,CACV,IAAK,QACP,EACA,iBAAkB,CAChB,IAAK,SACP,EACA,OAAQ,CACN,IAAK,MACP,EACA,OAAQ,CACN,IAAK,MACP,EACA,MAAO,CACL,IAAK,MACP,EACA,WAAY,CACV,IAAK,OACP,EACA,WAAY,CACV,IAAK,MACP,EACA,OAAQ,CACN,IAAK,MACP,EACA,aAAc,CACZ,IAAK,OACP,EACA,KAAM,CACJ,IAAK,MACP,EACA,SAAU,CACR,IAAK,MACP,EACA,OAAQ,CACN,IAAK,MACP,EACA,MAAO,CACL,IAAK,MACP,EACA,aAAc,CACZ,IAAK,OACP,EACA,YAAa,CACX,IAAK,OACP,EACA,QAAS,CACP,IAAK,OACP,EACA,cAAe,CACb,IAAK,QACP,EACA,eAAgB,CACd,IAAK,QACP,CACF,EACEC,IAAK,CACL,sBAAuB,CACrB,IAAK,MACL,IAAK,KACP,EACA,qBAAsB,CACpB,IAAK,MACL,IAAK,MACL,OAAQ,MACR,IAAK,MACL,IAAK,KACP,EACA,wBAAyB,CACvB,IAAK,MACL,OAAQ,KACV,EACA,yBAA0B,CACxB,IAAK,MACL,IAAK,OACL,OAAQ,OACR,IAAK,OACL,IAAK,MACP,EACA,uBAAwB,CACtB,IAAK,OACL,IAAK,OACL,OAAQ,OACR,IAAK,OACL,IAAK,MACP,EACA,+BAAgC,CAC9B,IAAK,QACL,IAAK,QACL,OAAQ,QACR,IAAK,QACL,IAAK,OACP,EACA,uBAAwB,CACtB,IAAK,OACL,OAAQ,MACV,EACA,4BAA6B,CAC3B,IAAK,QACL,OAAQ,OACV,EACA,2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ACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,IAAK,CACD,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,MACN,MAAO,MACP,IAAK,KACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,MACN,MAAO,OACP,IAAK,KACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,IAAK,CACD,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,IACN,MAAO,IACP,IAAK,GACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,OACP,IAAK,MACT,EACA,GAAI,CACA,KAAM,KACN,MAAO,IACP,IAAK,GACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,IAAK,CACD,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,OACP,IAAK,OACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,IAAK,CACD,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,UAAW,CACP,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,IAAK,CACD,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACT,EACA,QAAS,CACL,KAAM,IACN,MAAO,IACP,IAAK,GACT,EACA,QAAS,CACL,KAAM,IACN,MAAO,IACP,IAAK,GACT,CACJ,EAAG,IAAI,EACP,SAASC,IAA0C,EAAO,EAAO,EAAQ,CAKrE,OAHIryS,IAAU,OAASA,IAAU,YAAoB/zI,EACjD+zI,IAAU,QAAUA,IAAU,SAAWA,IAAU,MAAcmyS,IAAmC,mBAAmBnyS,EAAOnN,CAAM,EAEjI,IACX,CCjZA,IAAMy/S,GAAN,MAAMA,CAA0C,CAC5C,YAAY,EAAU,EAAW,EAAU,CAcvC,GAbA,KAAK,IAAM7H,GAAW,KAAO,KAC7B,KAAK,SAAWpqC,EAChB,KAAK,KAAOoqC,GAAW,MAAQ,KAC/B,KAAK,MAAQA,GAAW,OAAS,KACjC,KAAK,IAAMA,GAAW,KAAO,KAC7B,KAAK,KAAOA,GAAW,MAAQ,KAC/B,KAAK,UAAY8H,EACjB,KAAK,UAAY,KACjB,KAAK,OAAS9H,GAAW,QAAU,KACnC,KAAK,OAASA,GAAW,QAAU,KACnC,KAAK,YAAcA,GAAW,aAAe,KAC7C,KAAK,OAAS,WAAaA,GAAa,CAAC,GAAKA,EAAU,OAAS,KAE7D,KAAK,MAAQ,KAAM,CACnB,GAAI,CAAC+H,EAAW1zC,GAAQ2zC,GAAkC,KAAK,KAAMF,CAAS,EAC9E,KAAK,UAAYC,EACjB,KAAK,KAAO1zC,CAChB,CACJ,CACA,MAAO,CACH,IAAIl+W,EAAM,IAAI0xZ,EAA0C,KAAK,SAAU,KAAK,SAAS,EAWrF,MAVA,GAAI,IAAM,KAAK,IACf,EAAI,KAAO,KAAK,KAChB,EAAI,MAAQ,KAAK,MACjB,EAAI,IAAM,KAAK,IACf,EAAI,KAAO,KAAK,KAChB,EAAI,UAAY,KAAK,UACrB,EAAI,OAAS,KAAK,OAClB,EAAI,OAAS,KAAK,OAClB,EAAI,YAAc,KAAK,YACvB,EAAI,OAAS,KAAK,OACX1xZ,CACX,CAC+D,WAAW,EAAU,CAChF,OAAO8tS,EAAS,MAAO,GAAU,KAAKjyS,IAAY,IAAI,CAC1D,CAC0F,SAAS,EAAI,EAAU,CAC7G,OAAOiyS,EAAS,MAAO,GAAU,CAC7B,IAAKjyS,IAAY,QAAUA,IAAY,cAAgB,SAAUi2Z,EAAI,CACjE,GAAI,CAACF,EAAW1zC,GAAQ2zC,GAAkCC,EAAG,KAAM,KAAK,SAAS,EACjF,OAAO,KAAK,YAAcF,GAAa,KAAK,OAAS1zC,CACzD,CACA,OAAO,KAAKriX,KAAai2Z,EAAGj2Z,EAChC,CAAC,CACL,CAC2E,UAAU,EAAU,CAC3F,OAAOiyS,EAAS,MAAO,GAAU,KAAKjyS,KAAa,IAAI,CAC3D,CAC6B,IAAI,EAAO,EAAO,EAAa,CACxD,IAAIruB,EAAS,KAAK,KAAK,EAMvB,MALA,GAAO4xI,GAAS/zI,EACZ+zI,IAAU,QAAU5xI,EAAO,WAAa,MAAQ,SAAUukb,IAAa,EAAO,UAAYF,GAAkCE,EAAY,KAAM,KAAK,SAAS,CAAC,CAAC,IAC9J3yS,IAAU,QAAU5xI,EAAO,KAAO,OAAM,EAAO,IAAMukb,EAAY,KAEjE3yS,IAAU,UAAYA,IAAU,WAAaA,IAAU,iBAAgB,EAAO,OAAS,MACpF5xI,CACX,CACqC,MAAM,EAAO,CAC9C,IAAIA,EAAS,KAAK,KAAK,EAMvB,MAJA,GAAO4xI,GAAS,KACZA,IAAU,SAAQ,EAAO,IAAM,MAEnC,EAAO,OAAS,KACT5xI,CACX,CAIE,MAAM,EAAO,EAAQ,EAAa,EAAiB,CACjD,IAAIwyB,EAAM,KAAK,KAAK,EAEpB,GAAIA,EAAIo/G,IAAU,MAAQA,IAAU,aAAeA,IAAU,MAAO,CAChE,GAAIA,IAAU,QAAU,SAAU2yS,EAAa,CAC3C,GAAI,CAACH,EAAW1zC,GAAQ2zC,GAAkCE,EAAY,KAAM,KAAK,SAAS,EAC1F,EAAI,UAAYH,EAChB,EAAI,KAAO1zC,CACf,KAAO,GAAI9+P,GAAS2yS,EAAY3yS,GAEhC,OADIA,IAAU,QAAUp/G,EAAI,KAAO,OAAM,EAAI,IAAM+xZ,EAAY,KACxD/xZ,CACX,CACA,OAAOo/G,EAAP,CACI,IAAK,MACD,CACI,IAAIqiQ,EAAO,KAAK,SAAS,QAAQ,EAC7B5uY,EAAQ4uY,EAAK,QAAQzhX,EAAI,GAAG,EAChC,EAAQgyZ,GAAiCn/a,EAAOg+K,EAAQ,EAAG4wN,EAAK,OAAS,CAAC,EAC1E,EAAI,IAAMA,EAAK5uY,GACf,KACJ,CACJ,IAAK,OACD,CAEI,IAAI+oJ,EAAO,IAAQq2R,GAAqB,KAAK,SAAU,KAAK,KAAOF,EAAY,IAAK,KAAK,MAAQA,EAAY,KAAM,KAAK,OAAS,EAAG,KAAK,KAAO,CAAC,EACjJ,EAAOn2R,EAAK,MAAMxc,EAAOyxC,EAAQ,CAC7B,MAAOzxC,IAAU,MACrB,CAAC,EACD,EAAI,IAAMwc,EAAK,IACf,EAAI,KAAOA,EAAK,KAChB,KACJ,CACJ,IAAK,QACD,EAAI,MAAQo2R,GAAiChyZ,EAAI,OAAS,EAAG6wJ,EAAQ,EAAG,KAAK,SAAS,uBAAuB,CAAC,EAC9G,MACJ,IAAK,MAED,EAAI,IAAMmhQ,GAAiChyZ,EAAI,KAAO,EAAG6wJ,EAAQ,EAAG,KAAK,SAAS,sBAAsB,CAAC,EACzG,MACJ,IAAK,OACD,CAGI,IAAIqhQ,EAAmBC,EAAgB,KAAM,GAAI,CACzC,OACA,QACA,KACJ,CAAC,CAAC,SAASnvY,CAAC,CAAC,EACjB,GAAI,aAAc+uY,IAAgB,CAACG,GAAoBlyZ,EAAI,MAAQ,MAAQA,EAAI,OAAS,MAAQA,EAAI,KAAO,MAAO,CAC9G,IAAI47H,EAAO,KAAK,QAAQm2R,CAAW,EACnC,EAAOn2R,EAAK,MAAM,OAAQi1B,EAAQ,CAC9B,UAAW,KAAK,YAAc,MAAQ,GAAK,GAC3C,MAAO,EACX,CAAC,EACD,GAAI,CAAC+gQ,EAAWQ,GAAgBP,GAAkCj2R,EAAK,KAAM,KAAK,SAAS,EAC3F,EAAI,KAAOw2R,EACX,EAAI,UAAYR,EAChB,EAAI,OAASh2R,EAAK,MACtB,KAAO,CACH,IAAIimP,EAAQ7hX,EAAI,MAAQ,EACpButB,EAAS,KAAK,iBAAiB,MAAM,EACzC,EAAI,KAAOykY,GAAiCnwC,EAAOhxN,EAAQtjI,EAAO,SAAUA,EAAO,QAAQ,EACvFvtB,EAAI,WAAa,MAAQ,SAAU+xZ,IAAa,EAAI,UAAYF,GAAkCE,EAAY,KAAM,KAAK,SAAS,CAAC,CAAC,GAC5I,CACA,KACJ,CACJ,IAAK,YACD,EAAI,UAAYC,GAAiChyZ,EAAI,WAAa,EAAG6wJ,EAAQ,EAAG,CAAC,EACjF,MACJ,IAAK,SACD,EAAI,OAASmhQ,GAAiChyZ,EAAI,QAAU,EAAG6wJ,EAAQ,EAAG,GAAI,EAAI,EAClF,MACJ,IAAK,SACD,EAAI,OAASmhQ,GAAiChyZ,EAAI,QAAU,EAAG6wJ,EAAQ,EAAG,GAAI,EAAI,CAE1F,CACA,OAAO7wJ,CACX,CAIE,QAAQ,EAAO,CACb,GAAI,SAAU30B,EAAO,CACjB,IAAI6yY,EAAO,KAAK,KACZA,GAAQ,MACH,KAAK,YAAc,OAAS,KAAK,YAAc,SAAO,EAAO,KAAK,YAAc,EAAI,GAAK,GADhF,EAAOm0C,IAAoCn0C,EAAM,KAAK,WAAa,EAAG,KAAK,SAAS,EAEtG,IAAIl+W,EAAM30B,EAAM,IAAI,CAChB,IAAK,KAAK,KAAOA,EAAM,IACvB,KAAM,KAAK,MAAQA,EAAM,KACzB,MAAO,KAAK,OAASA,EAAM,MAC3B,IAAK,KAAK,KAAOA,EAAM,IACvB,KAAM6yY,GAAQ7yY,EAAM,KACpB,OAAQ,KAAK,QAAUA,EAAM,OAC7B,OAAQ,KAAK,QAAUA,EAAM,OAC7B,YAAa,KAAK,aAAeA,EAAM,WAC3C,CAAC,EAID,MAHI,WAAY20B,GAAO,KAAK,QAAU,MAAQA,EAAI,SAAW,KAAK,SAAQ,EAAMA,EAAI,IAAI,CACpF,aAAcA,EAAI,OAAS,KAAK,MACpC,CAAC,GACMA,CACX,CAAO,OAAO30B,EAAM,IAAI,CACpB,IAAK,KAAK,KAAOA,EAAM,IACvB,KAAM,KAAK,MAAQA,EAAM,KACzB,MAAO,KAAK,OAASA,EAAM,MAC3B,IAAK,KAAK,KAAOA,EAAM,GAC3B,CAAC,CACL,CACA,iBAAiB,EAAM,CACnB,OAAO4nB,EAAP,CACI,IAAK,MACD,CACI,IAAIwuX,EAAO,KAAK,SAAS,QAAQ,EACjC,MAAO,CACH,MAAO,KAAK,KAAO,KAAgCA,EAAK,OAAS,EAAvCA,EAAK,QAAQ,KAAK,GAAG,EAC/C,SAAU,EACV,SAAUA,EAAK,OAAS,CAC5B,CACJ,CACJ,IAAK,OACD,MAAO,CACH,MAAO,KAAK,KACZ,SAAU,EACV,SAAU,IACd,EACJ,IAAK,QACD,MAAO,CACH,MAAO,KAAK,MACZ,SAAU,EACV,SAAU,KAAK,SAAS,uBAAuB,CACnD,EACJ,IAAK,MACD,MAAO,CACH,MAAO,KAAK,IACZ,SAAU,EACV,SAAU,KAAK,SAAS,sBAAsB,CAClD,EACJ,IAAK,YACD,MAAO,CACH,MAAO,KAAK,UACZ,SAAU,EACV,SAAU,CACd,EACJ,IAAK,OACD,CACI,IAAIt2O,EAAW,EACXC,EAAW,GAQf,OAPI,KAAK,YAAc,OACnB,EAAW,EACX,EAAW,IACJ,KAAK,YAAc,QAC1B,EAAW,EACX,EAAW,IAER,CACH,MAAO,KAAK,KACF,WACA,UACd,CACJ,CACJ,IAAK,SACD,MAAO,CACH,MAAO,KAAK,OACZ,SAAU,EACV,SAAU,EACd,EACJ,IAAK,SACD,MAAO,CACH,MAAO,KAAK,OACZ,SAAU,EACV,SAAU,EACd,CACR,CACJ,CACJ,EACA,SAAS4mR,GAAiC,EAAO,EAAQ,EAAK,EAAK,EAAQ,GAAO,CAC9E,GAAI3oT,EAAO,CACP,GAAS,KAAK,KAAKwnD,CAAM,EACrBxlL,EAAQsH,IAAK,EAAQD,GACzB,IAAImzM,EAAM,KAAK,IAAIh1B,CAAM,EACzB,CACKxlL,CADDwlL,EAAS,EAAW,KAAK,KAAKxlL,EAAQw6M,CAAG,EAAIA,EACpC,KAAK,MAAMx6M,EAAQw6M,CAAG,EAAIA,EACnCx6M,EAAQqH,IAAK,EAAQC,EAC7B,KACI,IAASk+K,EACLxlL,EAAQsH,EAAK,EAAQD,GAAOC,EAAMtH,EAAQ,GACrCA,EAAQqH,IAAK,EAAQC,GAAOtH,EAAQqH,EAAM,IAEvD,OAAOrH,CACX,CACA,SAASwmb,GAAkC,EAAM,EAAW,CACxD,IAAID,EAAY,KAAQ,IACxB,OAAOD,EAAP,CACI,IAAK,MAEGzzC,GAAQ,KAAI,GAAQ,IACxB,MACJ,IAAK,MAEGA,IAAS,EAAG,EAAO,GACdA,EAAO,KAAI,GAAQ,IAC5B,MACJ,IAAK,MAED,EAAY,KACZ,MACJ,IAAK,MAED,GAAQ,EACR,EAAY,IACpB,CACA,MAAO,CACH0zC,EACA1zC,CACJ,CACJ,CACA,SAASm0C,IAAoC,EAAM,EAAW,EAAW,CACrE,OAAOV,EAAP,CACI,IAAK,MACGC,IAAc,IAAG,GAAQ,IAC7B,MACJ,IAAK,MACG1zC,IAAS,KAAI,EAAO,GACpB0zC,IAAc,IAAG,GAAQ,IAC7B,MACJ,IAAK,MACD,GAER,CACA,OAAO1zC,CACX,CC9RA,IAAMo0C,GAA0C,CAC5C,KAAM,GACN,MAAO,GACP,IAAK,GACL,KAAM,GACN,OAAQ,GACR,OAAQ,GACR,UAAW,GACX,IAAK,EACT,EACMC,IAAkC,CACpC,KAAM,EACN,MAAO,EACP,IAAK,EACL,KAAM,EACN,OAAQ,GACR,OAAQ,EACZ,EACMC,IAAqC,CAEvC,UAAW,YAEX,YAAa,OACb,SAAU,UACV,QAAS,SACb,EACA,SAASC,IAA0C,EAAO,CACtD,GAAI,CAAU,SAAwB,iBAA8B,eAA0B,aAAa,GAAmB,aAAa,GAAmB,aAAa,GAAiB,WAAoB,WAA6B,qBAAsBl7a,EAC/PqV,EAAIrV,EAAM,OAASA,EAAM,cAAgBA,EAAM,kBAAoB,KACnE,CAACg5a,EAAaY,GAAuBD,IAA2Ctka,EAAGrV,EAAM,WAAW,EACpGgmY,EAAW4zC,GAAmB,MAElC,GAAIvka,GAAK,EAAE2ja,KAAe3ja,GAAI,MAAU,MAAM,uBAAyB2ja,EAAc,cAAgB3ja,EAAE,SAAS,CAAC,EAEjH,GAAI,CAAC6yX,EAAUkyC,IAAA,EAAiBe,eAAoB,CAMhD,IAAI51W,EAAO,IALa61W,GAAsB1gT,EAAQ,CAClD,UAAW,QACX,UAAW,QACX,OAAQ16H,EAAM,WAAa,KAAgC,OAAzBA,EAAM,YAAc,EAC1D,CACmB,CAAC,CAAC,gBAAgB,EAErC,MAAO,CADQq7a,EAAe91W,EAAK,QAExB,EACPA,EAAK,SACT,CACJ,EAAG,CACCm1D,EACA16H,EAAM,UACNq7a,CACJ,CAAC,EACG,CAACvnb,EAAOwnb,GAAe7vD,GAA2CzrX,EAAM,MAAOA,EAAM,cAAgB,KAAMA,EAAM,QAAQ,EACzH,CAACozG,IAAA,EAAoBmoU,YAAiBznb,CAAK,EAC3C0nb,GAAA,EAAoBL,eAAwBhC,IAA2Crlb,EAAOo0Y,CAAQ,GAAK,KAAM,CACjHp0Y,EACAo0Y,CACJ,CAAC,EACG,CAACuzC,EAAcC,IAAA,EAAuBH,gBAAqB,IAAQpB,GAA2CjyC,EAAUkyC,EAAWoB,CAAa,CAAC,EACjJG,EAAUzzC,EAAS,aAAe,WAAauzC,EAAa,MAAQ,KACpEG,GAAA,EAAiBT,gBAAqB,CACrB,cACb,eAAgBn7a,EAAM,gBAAkB,OACxC,SAAU45a,EACI,eACd,UAAW55a,EAAM,UACR,UACT,wBAAyBA,EAAM,uBACnC,GAAI,CACJA,EAAM,eACNg5a,EACAh5a,EAAM,UACNA,EAAM,wBACN45a,EACAiC,EACAF,CACJ,CAAC,EACGp2W,GAAA,EAAW41W,eAAwBvC,GAA2C,CAAC,EAAGgD,CAAU,EAAG,CAC/FA,CACJ,CAAC,EACGlD,GAAA,EAAoByC,eAAoB,IAAQC,GAAsB1gT,EAAQn1D,CAAI,EAAG,CACrFm1D,EACAn1D,CACJ,CAAC,EACGy6I,GAAA,EAAsBm7N,eAAoBzC,EAAc,gBAAgB,EAAG,CAC3EA,CACJ,CAAC,EACG8B,GAAA,EAAkBW,eAAwB9B,IAA2Cr5a,EAAM,iBAAkBg5a,EAAa9wC,EAAU0xC,CAAe,EAAG,CACtJ55a,EAAM,iBACNg5a,EACA9wC,EACA0xC,CACJ,CAAC,EACGgB,GAAA,EAAsBO,eAAoB,CAC1C,IAAIW,EAAgB1B,IAAc,OAASA,IAAc,MACrD7jH,EAAW,CACX,MACA,OACA,QACA,MACA,OACA,GAAGulH,EAAgB,CACf,WACJ,EAAI,CAAC,EACL,SACA,QACJ,EACIC,EAAWxlH,EAAS,QAAQv2T,EAAM,gBAAkB,KAAK,EACzDg8a,EAAWzlH,EAAS,QAAQyiH,IAAgB,QAAU8C,EAAgB,YAAc9C,CAAW,EACnG,OAAOziH,EAAS,MAAMwlH,EAAUC,EAAW,CAAC,CAChD,EAAG,CACCh8a,EAAM,eACNg5a,EACAoB,CACJ,CAAC,EACG,CAAC1vM,EAAWovM,IAAA,EAAoByB,YAAiBC,CAAa,EAC9D,CAACS,EAAcC,IAAA,EAAuBX,YAAiBrzC,CAAQ,EAC/D,CAACi0C,EAAeC,IAAA,EAAwBb,YAAiBnB,CAAS,GAClEoB,IAAkB9wM,GAAa0vM,IAAc+B,GAAiB,CAAKE,IAAwBn0C,EAAU+zC,CAAY,KACjH,EAAe,IAAQ9B,GAA2CjyC,EAAUkyC,EAAWoB,CAAa,EACpG1B,EAAa0B,CAAa,EAC1BU,EAAgBh0C,CAAQ,EACxBk0C,EAAiBhC,CAAS,EAC1BsB,EAAgBD,CAAY,GAEhC,IAAIjlE,GAAY,GAAW,CACvB,GAAI,IAAM,YAAcx2W,EAAM,YAC9B,IAAIkjF,GAAY,MAAQA,aAAwBi3V,IAA8Cj3V,EAAS,UAAU03V,CAAe,EAC5Hc,EAAgB,IAAQvB,GAA2CjyC,EAAUkyC,EAAWoB,CAAa,CAAC,EACtGF,EAAQ,IAAI,OACT,GAAI,EAAEp4V,aAAwBi3V,IAGjC,EAAemC,GAAmBp5V,EAAU7tE,GAAG,UAAY,IAAQkna,EAA2B,EAC9Fb,EAAgB,IAAQvB,GAA2CjyC,EAAUkyC,EAAWoB,CAAa,CAAC,EACtGF,EAAQp4V,CAAQ,MACb,CAIH,GAAIA,EAAS,WAAW03V,CAAe,EAAG,CACtC,IAAItI,EAAYpvV,EAAS,QAAQs4V,GAAiBhB,CAAW,EAC7D,GAAIt3V,EAAS,SAASovV,EAAWsI,CAAe,EAAG,CAC/C,IAAI4B,EAAmBF,GAAmBhK,EAAWj9Z,GAAG,UAAY,IAAQkna,EAA2B,EACvG,GAAI,CAACzob,GAAS0ob,EAAa,QAAQ1ob,CAAK,IAAM,EAAG,CAC7C4nb,EAAgB,IAAQvB,GAA2CjyC,EAAUkyC,EAAWoB,CAAa,CAAC,EACtGF,EAAQkB,CAAY,EACpB,MACJ,CACJ,CACJ,CAEAd,EAAgBx4V,CAAQ,CAC5B,EACJ,EACIovV,IAAA,EAAgB6I,eACRM,EAAa,QAAQD,GAAiBhB,CACvC,CAAC,CAAC,OAAOx0C,CAAQ,EACzB,CACCy1C,EACAz1C,EACAw1C,EACAhB,CACJ,CAAC,EACGjkH,IAAA,EAAe4kH,eAAoBsB,IAAsCnK,GAAWmJ,EAAc/C,EAAe14N,EAAiBkoL,EAAUxtQ,EAAQs+S,CAAW,EAAG,CAClK1G,GACAoG,EACA14N,EACAy7N,EACAvzC,EACAxtQ,EACAs+S,CACJ,CAAC,EACG0D,IAAiB,EAAM,IAAS,CAChClmE,GAASilE,EAAa,MAAM//Z,EAAM49J,EAAQkhQ,EAAaI,CAAe,CAAC,CAC3E,EACIljC,IAAA,EAAwByjC,eAAwB/C,IAA2Ctkb,EAAO8/J,EAAUC,EAAU2kR,EAAmBoD,CAAU,EAAG,CACtJ9nb,EACA8/J,EACAC,EACA2kR,EACAoD,CACJ,CAAC,EACGe,GAAiB3lC,GAA2C,CAC5D,GAAGh3Y,EACI,QACY,oBACvB,CAAC,EACG48a,GAAiBD,GAAW,kBAAkB,UAC9CxlC,GAAkBn3Y,EAAM,kBAAoB48a,GAAiB,UAAY,MAC7E,MAAO,CACH,GAAGD,GACH,MAAOnB,EACP,aAAcx7a,EAAM,cAAgBozG,EACzB,aACD,WACA,YACA,YACK,gBACE,mBACjB,UAAWwpU,GACE,cACb,eAAgB58a,EAAM,gBAAkB,OAC5B,aACA,aACA,aACZ,UAAW,EAAM,CACb08a,GAAc7oW,EAAM,CAAC,CACzB,EACA,UAAW,EAAM,CACb6oW,GAAc7oW,EAAM,EAAE,CAC1B,EACA,cAAe,EAAM,CACjB6oW,GAAc7oW,EAAMmnW,IAAgCnnW,IAAS,CAAC,CAClE,EACA,cAAe,EAAM,CACjB6oW,GAAc7oW,EAAM,EAAEmnW,IAAgCnnW,IAAS,EAAE,CACrE,EACA,eAAgB,EAAM,CAClB,IAAIggF,EAAWhgF,IAAS,QAAUumW,IAAc,MAAQ,GAAKqB,EAAa,iBAAiB5nW,CAAI,CAAC,CAAC,SACjG2iS,GAASilE,EAAa,IAAI5nW,EAAMggF,EAAU2mR,CAAW,CAAC,CAC1D,EACA,eAAgB,EAAM,CAClB,IAAI5mR,EAAW//E,IAAS,QAAUumW,IAAc,MAAQ,GAAKqB,EAAa,iBAAiB5nW,CAAI,CAAC,CAAC,SACjG2iS,GAASilE,EAAa,IAAI5nW,EAAM+/E,EAAU4mR,CAAW,CAAC,CAC1D,EACA,WAAY,EAAM,EAAG,CACjBhkE,GAASilE,EAAa,IAAI5nW,EAAMx+D,EAAGmla,CAAW,CAAC,CACnD,EACA,oBAAsB,CAClB,GAAI,IAAM,YAAcx6a,EAAM,aAE1By7a,EAAa,WAAWb,CAAe,EAAG,CAE1C,IAAI4B,EAAmBF,GADPb,EAAa,QAAQD,GAAiBhB,CACZ,EAAWnla,GAAG,UAAY,IAAQkna,EAA2B,GACnG,CAACzob,GAAS0ob,EAAa,QAAQ1ob,CAAK,IAAM,IAAGwnb,EAAQkB,CAAY,EACrEd,EAAgB,IAAQvB,GAA2CjyC,EAAUkyC,EAAWoB,CAAa,CAAC,CAC1G,CACJ,EACA,aAAc,EAAM,CAChB,IAAI1nb,EAAQ2nb,EACR5nW,IAAS,gBAAkBA,IAAS,YAAW,EAAQ4nW,EAAa,MAAM5nW,CAAI,GAClF2iS,GAAS1iX,CAAK,CAClB,EACA,YAAa,EAAc,CACvB,GAAI,CAAC0nb,EAAe,MAAO,GAC3B,IAAIqB,EAAoBjE,GAA2CG,EAAc6C,CAAU,EAE3F,OAAO,IADiBR,GAAsB1gT,EAAQmiT,CACvC,CAAC,CAAC,OAAOvK,EAAS,CACrC,EACA,iBAAkB,EAAQ,EAAe,CAMrC,OAAO,IAAQ8I,GAAsB1gT,EADVk+S,GAA2C,CAAC,EAAG,CAHtE,GAAGgD,EACH,GAAGiB,CAEmE,CAC7B,CAAgB,CACjE,CACJ,CACJ,CACA,SAASJ,IAAsC,EAAW,EAAc,EAAe,EAAiB,EAAU,EAAQ,EAAa,CACnI,IAAIK,EAAY,CACZ,OACA,SACA,QACJ,EACIvmH,EAAWmiH,EAAc,cAAcpG,CAAS,EAIhDhzC,EAAkB,IAAQy9C,GAAwBriT,EAAQ,CAC1D,YAAa,EACjB,CAAC,EACGsiT,EAAoB,IAAQD,GAAwBriT,EAAQ,CAC5D,YAAa,GACb,qBAAsB,CAC1B,CAAC,EACD,IAAK,IAAIp2G,KAAWiyS,EAAS,GAAIjyS,EAAQ,OAAS,QAAUA,EAAQ,OAAS,SAAWA,EAAQ,OAAS,OAASA,EAAQ,OAAS,OAAQ,CACvI,IAAIxwB,EAAQ2nb,EAAan3Z,EAAQ,OAAS,EAC1C,CACKA,CAAQ,MADT07L,EAAgB17L,EAAQ,QAAU,UAA2B04Z,EAAkB,OAAOlpb,CAAK,EAC1EwrY,EAAgB,OAAOxrY,CAAK,CACrD,CACA,IAAImpb,EAAoB,CAAC,EACzB,IAAK,IAAI34Z,KAAWiyS,EAAS,CACzB,IAAI76S,EAAOu/Z,IAAmC32Z,EAAQ,OAASA,EAAQ,KACnE4gW,EAAa61D,GAAwCr/Z,GACrDA,IAAS,OAASwsX,EAAS,QAAQ,CAAC,CAAC,SAAW,IAAG,EAAa,IACpE,IAAIg1C,EAAgBnC,GAAwCr/Z,IAAS+/Z,EAAan3Z,EAAQ,OAAS,KAC/Fk2Z,EAAcO,GAAwCr/Z,GAAYw+Z,IAA2Cx+Z,EAAM4I,EAAQ,MAAOo2G,CAAM,EAAI,KAC5IyiT,EAAc,CACR,OACN,KAAMD,EAAgB1C,EAAcl2Z,EAAQ,MAC5C,GAAGm3Z,EAAa,iBAAiB//Z,CAAI,EACtB,gBACF,cACD,YAChB,EAIIA,IAAS,QAETuha,EAAkB,KAAK,CACnB,KAAM,UACN,KAAM,IACN,cAAe,GACf,YAAa,GACb,WAAY,EAChB,CAAC,EACDA,EAAkB,KAAKE,CAAW,EAE9Bzha,IAASs9Z,GAAaiE,EAAkB,KAAK,CAC7C,KAAM,UACN,KAAM,IACN,cAAe,GACf,YAAa,GACb,WAAY,EAChB,CAAC,GACMH,EAAU,SAASpha,CAAI,GAAKA,IAASs9Z,GAC5CiE,EAAkB,KAAKE,CAAW,EAElCF,EAAkB,KAAK,CACnB,KAAM,UACN,KAAM,IACN,cAAe,GACf,YAAa,GACb,WAAY,EAChB,CAAC,GAELA,EAAkB,KAAKE,CAAW,CACtC,CACA,OAAOF,CACX,CCnTA,IAAMG,KAA0D,EAAIC,iBAAsB,IAAI,EAExFC,IAA0D,EAAID,iBAAsB,IAAI,EACxFE,IAA0D,EAAIF,iBAAsB,IAAI,EACxFG,KAA0D,EAAIC,cAAmB,SAAmB,EAAO,EAAK,CAClH,CAACz9a,EAAOuuB,GAAWwrV,GAA2C/5W,EAAOuuB,EAAK6uZ,GAAyC,EACnH,GAAI,CAAE,mBAAoBM,GAA+B/jE,GAA+Co/B,EAA0C,GAAK,CAAC,EACpJD,EAAqB94Y,EAAM,oBAAsB09a,GAA0B,SAC3E,CAAU,UAAeC,GAAkB,EAC3Crkb,EAAYskb,IAA0B,CACtC,GAAG59a,EACK,SACR,eAAgB69a,IACI,oBACxB,CAAC,EACGC,GAAA,EAAeC,UAAe,IAAI,EAClC,CAACC,EAAU53Q,GAAaq0M,GAA2C,CAACz6W,EAAM,eAAiB,CAACA,EAAM,kBAAkB,EACpH6pX,GAAA,EAAek0D,UAAe,IAAI,EAClC,CAAc,aAAwB,aAAwB,aAA8B,mBAAqC,oBAAmB,GAAGpB,GAAmBsB,IAAqB,CAC/L,GAAOljE,GAA2C/6W,CAAK,EAChD,QACG,WACU,oBACxB,EAAG1G,EAAOwkb,CAAQ,EACdtjE,EAAkBpB,GAAyC,CAC3D,GAAO2B,GAA2C/6W,CAAK,EACvD,OAAQ,CACG,QACP,UAAW1G,EAAM,UACjB,WAAYA,EAAM,WAClB,WAAYA,EAAM,WAClB,WAAY0G,EAAM,YAAc,EACpC,EACA,iBAAkB,sBACtB,CAAC,EACGujY,EAAe26C,GAAuBl+a,EAAO,CAC7C,OAAQ,EACZ,CAAC,EAED,OADA,OAAOujY,EAAS,GACK3vR,EAAkB,cAAkBulQ,GAA4C,CACjG,OAAQ,CACJ,CACImkE,GACAhkb,CACJ,EACA,CACQ0hZ,GACJ,CACI,GAAGnc,EACH,IAAKi/C,EACL,UAAWxkb,EAAM,UACjB,WAAYA,EAAM,UACtB,CACJ,EACA,CACQiiZ,GACJ,CACI,GAAGjwB,EACH,IAAKzB,CACT,CACJ,EACA,CACQuU,GACJ,CACI,GAAGI,EACH,IAAKw/C,EACL,YAAa,MACjB,CACJ,EACA,CACQj6C,GACJ,CACI,MAAO,CACH,YAAakyB,EACb,aAAckoB,CAClB,CACJ,CACJ,EACA,CACQ3nC,GACJmmC,CACJ,CACJ,CACJ,EAAiB/oU,EAAkB,cAAkB2nQ,GAA2C,IAAK,CACjG,GAAGgoB,EACH,GAAG/oB,EACE,MACL,KAAMx6W,EAAM,MAAQ,OACpB,eAAgB1G,EAAM,WAAa,OACnC,gBAAiBA,EAAM,YAAc,OACrC,gBAAiBA,EAAM,YAAc,OACrC,gBAAiB0G,EAAM,YAAc,MACzC,CAAC,EAAiB4zG,EAAkB,cAAkBo/T,IAA4C,CAC9F,aAAchza,EAAM,aACpB,KAAMA,EAAM,KACZ,WAAYA,EAAM,WACX,OACX,CAAC,CAAC,CACN,CAAC,EA0FKo+a,KAA0D,EAAIX,cAAmB,SAAmB,EAAO,EAAK,CAGlH,IAAIY,GAAA,EAAqBC,cAAmBhB,EAAyC,EACjFiB,GAAA,EAAqBD,cAAmBf,EAAyC,EACrF,OAAOc,GAAkBE,EAA+B3qU,EAAkB,cAAc4qU,IAAsC,CAC1H,GAAGx+a,EACE,KACT,CAAC,EAAkB4zG,EAAkB,cAAc6qU,IAA2C,CAC1F,GAAGz+a,EACE,KACT,CAAC,CACL,CAAC,EACKy+a,KAA0D,EAAIhB,eAAoB,EAAO,IAAM,CACjG,GAAI,CAACiB,EAAgBZ,GAAgB/jE,GAA2C,CAC5E,KAAM/5W,EAAM,IAChB,EAAGuuB,EAAK6uZ,GAAyC,EAC7C,CAAU,UAAeO,GAAkB,EAC3Crkb,EAAYskb,IAA0B,CACtC,GAAGc,EACK,SACR,eAAgBb,GACpB,CAAC,EACGh0D,GAAA,EAAek0D,UAAe,IAAI,EAClC,CAAc,aAAwB,cAAmBE,IAAqB,CAC9E,GAAGS,EACO,UACd,EAAGplb,EAAOwkb,CAAQ,EAClB,OAAqBlqU,EAAkB,cAAkBulQ,GAA4C,CACjG,OAAQ,CACJ,CACImkE,GACAhkb,CACJ,EACA,CACQiiZ,GACJ,CACI,GAAGjwB,EACH,IAAKzB,CACT,CACJ,EACA,CACQmxB,GACJ,CACI,GAAGnc,EACH,IAAKi/C,EACL,UAAWxkb,EAAM,UACjB,WAAYA,EAAM,UACtB,CACJ,CACJ,CACJ,EAAiBs6G,EAAkB,cAAc4qU,IAAsCx+a,CAAK,CAAC,CACjG,CAAC,EACKw+a,KAAqD,EAAIf,eAAoB,EAAO,IAAM,CAC5F,GAAI,CAAa,YAAqB,YAAaz9a,EAC/Cq+a,GAAA,EAAqBC,cAAmBhB,EAAyC,EACjFiB,GAAA,EAAqBD,cAAmBf,EAAyC,EACjFjkb,EAAQ+kb,GAAkBE,EAC9B,OAAqB3qU,EAAkB,cAAAA,EAAgC,SAAU,KAAoBA,EAAkB,cAAkBsnS,IAA4C,CACjL,GAAGl7Y,EACE,MACL,KAAMA,EAAM,MAAQ,OACpB,UAAW+c,GAAa,uBACxB,WAAYzjB,EAAM,WAClB,UAAWA,EAAM,UACjB,WAAYA,EAAM,UACtB,EAAGA,EAAM,SAAS,KAAK,EAAS,KAAkB,EAAIqlb,gBAAqBztU,EAAS5sF,CAAO,EAAG,CACtF,IAAK9nB,CACT,CAAC,CAAC,CAAC,EAAiBo3G,EAAkB,cAAkB8nS,IAA4C,CACpG,UAAW,EACf,CAAC,CAAC,CACN,CAAC,EACKkjC,KAA0D,EAAInB,cAAmB,SAAqB,CAAW,UAAS,GAAG3wM,GAAc,EAAK,CAClJ,IAAIuxM,GAAA,EAAqBC,cAAmBhB,EAAyC,EACjFiB,GAAA,EAAqBD,cAAmBf,EAAyC,EACjFjkb,EAAQ+kb,GAAkBE,EAC1BvrD,EAAa6rD,GAAqBtwZ,CAAG,EACrC,CAAgB,gBAAqBuwZ,IAAuBx6Z,EAAShrB,EAAO05X,CAAM,EAClF,CAAc,aAAuB,YAA2B,kBAAuB+rD,GAAqB,EAC5G,CAAc,aAAuB,aAAkBC,GAAiB,CACxE,GAAGlyM,EACH,WAAYxzO,EAAM,YAAcgrB,EAAQ,OAAS,SACrD,CAAC,EACGk2V,EAAkBpB,GAAyC,CAC3D,GAAGtsI,EACH,OAAQ,CACJ,GAAGxoN,EACH,WAAYhrB,EAAM,WAClB,UAAWA,EAAM,UACjB,WAAYA,EAAM,WACP,YACA,YACK,gBACpB,EACA,gBAAiBgrB,EAAQ,KACzB,iBAAkB,wBACtB,CAAC,EACD,OAAqBsvF,EAAkB,cAAkB2nQ,GAA2C,KAAM,CACtG,GAAO0jE,GAAuBf,GAAuBpxM,EAAY,CAC7D,OAAQ,EACZ,CAAC,EAAGoyM,EAAcpsD,EAAYqL,CAAU,EACxC,GAAG3jB,EACH,MAAO0kE,EAAa,MACpB,IAAKlsD,EACL,mBAAoB1uW,EAAQ,eAAiB,OAC7C,eAAgBhrB,EAAM,WAAa,OACnC,gBAAiBA,EAAM,YAAc,OACrC,gBAAiBA,EAAM,YAAc,OACrC,YAAagrB,EAAQ,KACrB,eAAgBk5W,GAAa,OAC7B,eAAgBf,GAAa,OAC7B,qBAAsBO,GAAkB,MAC5C,CAAC,CACL,CAAC,ECzUD,SAASmiD,IAA0C,EAAO,EAAO,EAAK,CAClE,GAAI,CAAc,cAAen/a,EAC7Bo/a,EAAgBjoE,GAA2C,EAC3DkoE,EAAcloE,GAA2C,EACzDuP,EAAY1Q,GAA2C,EACvDwJ,GAAA,EAAU8/D,UAAe,IAAI,EAejC55D,GAA+Cn3V,EAAK,eAdhD,EAAwBgxZ,mBAAwB,CAEhD,EAAI,QAAU,0BAA0B,CAChChxZ,EAAI,SAASA,EAAI,QAAQ,aAAa,SAAU,aAAa,CACrE,CAAC,GAED,EAAIixZ,kBAAsB,CACtBlmb,EAAM,OAAO,CACjB,CAAC,CACL,EAAG,CACCi1B,EACAj1B,CACJ,CAEmE,CAAiB,EACpF,IAAImmb,GAAA,EAAoBH,UAAe,IAAI,EAqD3C,OApDAtqE,OAAmD,CAG/C,GADIwK,EAAI,SAAS,qBAAqBA,EAAI,OAAO,EAC7CjxV,EAAI,SAAW,CAACm4V,EAAO,CACvB,IAAIg5D,EAAQnxZ,EAAI,QACZkxZ,EAAc,SAAW,MAAQ,OAAOC,EAAM,eAAkB,WAE5Dpmb,EAAM,YACNomb,EAAM,gBAAgB,QAAQ,EAC9BA,EAAM,MAAM,YAAY,2BAA4B,MAAM,EAC1DA,EAAM,MAAM,YAAY,4BAA6B,MAAM,IAE3DA,EAAM,aAAa,SAAU,aAAa,EAC1CA,EAAM,MAAM,YAAY,2BAA4B,KAAK,EACzDA,EAAM,MAAM,YAAY,4BAA6B,KAAK,GAEvDpmb,EAAM,aAAemmb,EAAc,UACtCnmb,EAAM,YACNomb,EAAM,gBAAgB,QAAQ,EAE9BA,EAAM,MAAM,YAAY,2BAA4BA,EAAM,YAAc,IAAI,EAC5EA,EAAM,MAAM,YAAY,4BAA6BA,EAAM,aAAe,IAAI,EAC9E,QAAQ,IAAIA,EAAM,cAAc,CAAC,CAAC,IAAK,GAAI1la,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAE7D0la,EAAM,MAAM,YAAY,2BAA4B,MAAM,EAC1DA,EAAM,MAAM,YAAY,4BAA6B,MAAM,CAC/D,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAEfA,EAAM,MAAM,YAAY,2BAA4BA,EAAM,YAAc,IAAI,EAC5EA,EAAM,MAAM,YAAY,4BAA6BA,EAAM,aAAe,IAAI,EAE9E,OAAO,iBAAiBA,CAAK,CAAC,CAAC,OAE/BA,EAAM,MAAM,YAAY,2BAA4B,KAAK,EACzDA,EAAM,MAAM,YAAY,4BAA6B,KAAK,EAE1D,QAAQ,IAAIA,EAAM,cAAc,CAAC,CAAC,IAAK,GAAI1la,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS0la,EAAM,aAAa,SAAU,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAGlI,EAAc,QAAUpmb,EAAM,UAClC,CACJ,EAAG,CACCo9M,EACAnoL,EACAj1B,EAAM,WACNotX,CACJ,CAAC,GACD,EAAIi5D,qBACW,CACHngE,EAAI,SAAS,qBAAqBA,EAAI,OAAO,CACrD,EACD,CAAC,CAAC,EACE,CACH,YAAa,CACT,GAAI4/D,EACJ,gBAAiB9lb,EAAM,WACvB,gBAAiB+lb,EACjB,QAAU,GAAI,CACN,CAAC3oO,GAAc,EAAE,cAAgB,YAAYp9M,EAAM,OAAO,CAClE,EACY,aACZ,aAAc,EAAG,CACT,EAAE,cAAgB,YAAc,CAACo9M,GAAYp9M,EAAM,OAAO,CAClE,CACJ,EACA,WAAY,CACR,GAAI+lb,EAEJ,KAAM,QACN,kBAAmBD,EACnB,cAAe,CAAC9lb,EAAM,WACtB,OAAQotX,EAAQ,CAACptX,EAAM,WAAa,MACxC,CACJ,CACJ,CCxGA,SAASsmb,IAA0C,EAAO,CACtD,GAAI,CAA0B,yBAAyB,GAAmB,aAAa,IAAU5/a,EAC7F,CAAC2sa,EAAcE,GAAuBphD,IAAA,EAA+Co0D,eAAoB7/a,EAAM,aAAe,IAAI,IAAIA,EAAM,YAAY,EAAI,OAAW,CACvKA,EAAM,YACV,CAAC,KAAO6/a,eAAoB7/a,EAAM,oBAAsB,IAAI,IAAIA,EAAM,mBAAmB,EAAI,IAAI,IAAO,CACpGA,EAAM,mBACV,CAAC,EAAGA,EAAM,gBAAgB,EAU1B,OATA,EAAI8/a,iBAAsB,CAEtB,GAAI,CAACC,GAA0BpT,EAAa,KAAO,EAAG,CAClD,IAAI/yW,EAAW+yW,EAAa,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,MACxC/yW,GAAY,MAAMizW,EAAgB,IAAI,IAAI,CAC1CjzW,CACJ,CAAC,CAAC,CACN,CACJ,CAAC,EACM,CACqB,yBACZ,aACE,eACG,kBACjB,UAAW,EAAK,CACZ,IAAIthE,EACAynb,GACA,EAAO,IAAI,IAAIpT,CAAY,EACvBr0a,EAAK,IAAIzE,CAAG,EAAGyE,EAAK,OAAOzE,CAAG,EAC7ByE,EAAK,IAAIzE,CAAG,GACd,EAAO,IAAI,IAAI84a,EAAa,IAAI94a,CAAG,EAAI,CAAC,EAAI,CAC/CA,CACJ,CAAC,EACDg5a,EAAgBv0a,CAAI,CACxB,CACJ,CACJ,CCjCA,SAAS0nb,IAA0C,EAAO,CACtD,GAAI,CAACC,EAAYC,GAAmBz0D,GAA2CzrX,EAAM,WAAYA,EAAM,iBAAmB,GAAOA,EAAM,gBAAgB,EAiBvJ,MAAO,CACS,aACC,cACb,UAnBemgb,mBAAwB,CACvCD,EAAY,EAAI,CACpB,EAAG,CACCA,CACJ,CAeiB,EACb,YAfiBC,mBAAwB,CACzCD,EAAY,EAAK,CACrB,EAAG,CACCA,CACJ,CAWqB,EACjB,UAXeC,mBAAwB,CACvCD,EAAY,CAACD,CAAU,CAC3B,EAAG,CACCC,EACAD,CACJ,CAMiB,CACjB,CACJ,CCPA,IAAMG,KAAyD,EAAIC,iBAAsB,IAAI,EACvFC,KAA0D,EAAIC,cAAmB,SAAyB,EAAO,EAAK,CACxH,IAAIjnb,EAAYknb,IAAgCxgb,CAAK,EACjDw6W,EAAkBpB,GAAyC,CAC3D,GAAGp5W,EACH,iBAAkB,6BAClB,OAAQ,CACJ,WAAY1G,EAAM,WACX,OACX,CACJ,CAAC,EACG+hX,EAAeolE,GAAuBzgb,EAAO,CAC7C,OAAQ,EACZ,CAAC,EACD,OAAqB4zG,EAAkB,cAAkB2nQ,GAA2C,IAAK,CACrG,GAAGF,EACH,GAAGb,EACE,MACL,gBAAiBx6W,EAAM,YAAc,MACzC,EAAiB4zG,EAAkB,cAAcwsU,IAAyC,SAAU,CAChG,MAAO9mb,CACX,EAAGkhX,EAAY,QAAQ,CAAC,CAC5B,CAAC,EACKkmE,KAA0D,EAAIL,iBAAsB,IAAI,EACxFM,KAA0D,EAAIN,iBAAsB,IAAI,EACxFO,KAAgE,EAAIP,iBAAsB,IAAI,EAC9FQ,KAA0D,EAAIN,cAAmB,SAAoB,EAAO,EAAK,CACnH,CAACvgb,EAAOuuB,GAAWwrV,GAA2C/5W,EAAOuuB,EAAKmyZ,GAAyC,EACnH,IAAII,GAAA,EAAiBC,cAAmBX,GAAwC,EAC5E,CAAM,KAAI,GAAGtzM,GAAe9sO,EAG5B41W,EAAgBorE,GAAc,EAClC,IAAOprE,EACP,IAAIqqE,EAAaa,EAAaA,EAAW,aAAa,IAAIrsb,CAAE,EAAIuL,EAAM,WAClE1G,EAAY2nb,IAA2B,CACvC,GAAGjhb,EACS,aACZ,iBAAkB,EAAY,CACtB8gb,GAAYA,EAAW,UAAUrsb,CAAE,EACvCuL,EAAM,mBAAmBigb,CAAU,CACvC,CACJ,CAAC,EACGiB,EAAAttU,EAA6B,OAAO,IAAI,EACxC8iG,EAAa12M,EAAM,YAAc8gb,GAAY,YAAc,GAC3D,CAAe,cAAyB,cAAmBK,IAAsB,CACjF,GAAGnhb,EACS,aACA,YAChB,EAAG1G,EAAO4nb,CAAQ,EACd,CAAE,eAAgBE,EAAsB,WAAYnkD,GAAyBokD,GAAqB,CAClG,OAAQ,EACZ,CAAC,EACG7mE,EAAkBpB,GAAyC,CAC3D,GAAGp5W,EACH,GAAI,OACJ,iBAAkB,wBAClB,OAAQ,CACJ,WAAY1G,EAAM,WACN,aACU,uBACf,OACX,CACJ,CAAC,EACG+hX,EAAeolE,GAAuB3zM,EAAY,CAClD,OAAQ,EACZ,CAAC,EACD,OAAqBl5H,EAAkB,cAAkBulQ,GAA4C,CACjG,OAAQ,CACJ,CACQopB,GACJ,CACI,MAAO,EACErpB,IAA6C,CAAC,EACnD,QAASopB,CACb,CACJ,CACJ,EACA,CACIs+C,IACA,CACgB,aACF,UACd,CACJ,EACA,CACID,IACArnb,CACJ,CACJ,CACJ,EAAiBs6G,EAAkB,cAAkB2nQ,GAA2C,IAAK,CACjG,GAAO+lE,GAAmBjmE,EAAUb,EAAayiB,CAAgB,EAC5D,MACL,gBAAiB3jY,EAAM,YAAc,OACrC,gBAAiBo9M,GAAc,OAC/B,4BAA6B0qO,GAAwB,MACzD,EAAG5mE,EAAY,QAAQ,CAAC,CAC5B,CAAC,EACK+mE,KAA0D,EAAIhB,cAAmB,SAAyB,EAAO,EAAK,CACxH,GAAI,CAAQ,OAAO,SAAYvgb,EAC3B,CAAc,aAAsB,eAAiB+gb,cAAmBH,GAA+C,EACvH,CAAE,eAAgBQ,EAAsB,WAAYnkD,GAAyBokD,GAAqB,CAClG,OAAQ,EACZ,CAAC,EACG7mE,EAAkBpB,GAAyC,CAC3D,GAAGp5W,EACH,iBAAkB,6BAClB,OAAQ,CACkB,sBAC1B,CACJ,CAAC,EACGujY,EAAek9C,GAAuBzgb,EAAO,CAC7C,OAAQ,GACR,UAAW,EACf,CAAC,EACD,OAAqB4zG,EAAkB,cAAkB2nQ,GAA2C,IAAK,CACrG,GAAO+lE,GAAmB/9C,EAAU/oB,EAAagnE,EAAYvkD,CAAgB,EAC7E,IAASwkD,GAAkBlzZ,EAAK2yZ,CAAQ,EAClC,OACN,4BAA6BE,GAAwB,MACzD,EAAiBxtU,EAAkB,cAAkBulQ,GAA4C,CAC7F,OAAQ,CACJ,CACQopB,GACJ,IACJ,CACJ,CACJ,EAAGviY,EAAM,QAAQ,CAAC,CACtB,CAAC,EChJD,SAAS0hb,IAA0C,EAAK,EAAS,CAC7D,IAAIhrO,EAAan8M,GAAS,WACtB,CAAConb,EAAkBC,IAAA,EAA2BC,YAAiB,EAAK,EAgCxE,OA/BA7sE,OAAmD,CAC/C,GAAIzmV,GAAK,SAAW,CAACmoL,EAAY,CAC7B,IAAI5gC,MAAa,CACb,GAAIvnJ,EAAI,QAAS,CACb,IAAIgzX,EAAaoC,GAA2Cp1X,EAAI,QAAS,CACrE,SAAU,EACd,CAAC,EACDqzZ,EAAoB,CAAC,CAACrgC,EAAO,SAAS,CAAC,CAC3C,CACJ,EACAzrO,EAAO,EAEP,IAAI3xF,EAAW,IAAI,iBAAiB2xF,CAAM,EAU1C,OATA3xF,EAAS,QAAQ51D,EAAI,QAAS,CAC1B,QAAS,GACT,UAAW,GACX,WAAY,GACZ,gBAAiB,CACb,WACA,UACJ,CACJ,CAAC,MACU,CAKP41D,EAAS,WAAW,CACxB,CACJ,CACJ,CAAC,EACM,IAAqBw9V,CAChC,CCrCA,IAAMG,IAAsC,KACtCC,IAAyC,IAC3CC,GAAiC,CAAC,EAClCC,IAAkC,EAClCC,GAAuC,GACvCC,GAA4C,KAC5CC,GAA8C,KAClD,SAASC,IAA0C,EAAQ,CAAC,EAAG,CAC3D,GAAI,CAAS,QAAQP,IAAiD,aAAaC,KAA2C/hb,EAC1H,CAAU,SAAc,OAAa,SAAc8ka,GAA2C9ka,CAAK,EAGnG,CAACsib,EAAqBC,IAAA,EAAoBC,YAAiB,EAAK,EAChE/tb,GAAA,EAASgub,eAAoB,GAAG,EAAER,MAAmC,CAAC,CAAC,EACvES,GAAA,EAAmBC,UAAe,IAAI,EACtCC,GAAA,EAAoBD,UAAe37N,CAAK,EACxC67N,MAAyB,CACzB,GAA+Bpub,GAAMqub,CACzC,EACIC,MAAwB,CACxB,IAAI,IAAIC,KAAiBhB,GAAmCgB,IAAkBvub,IAG1Eutb,GAA+BgB,EAAc,CAAC,GAAM,EAAI,EACxD,OAAOhB,GAA+BgB,GAE9C,EACIC,EAAe,GAAU,CACrBP,EAAa,SAAS,aAAaA,EAAa,OAAO,EAC3D,EAAa,QAAU,KACvBK,EAAkB,EAClBF,EAAmB,EACnBN,EAAa,CAAC,CAACW,CAAO,EACtB,GAAuC,GACvCz8N,EAAK,EACL,EAEI07N,IADA,aAAaA,EAAyC,EACV,MAEhD,EAEIC,IADA,aAAaA,EAA2C,EACV,KAEtD,EACIU,GAAe,EAAW,IAAU,CACpCP,EAAa,CAAC,CAACW,CAAO,EAClBC,GAAaC,GAAc,GACvBV,EAAa,SAAS,aAAaA,EAAa,OAAO,EAC3D,EAAa,QAAU,KACvBE,EAAc,QAAQ,GACnB,CAA2BF,CAAa,UAAU,eAAe,CACpE,EAAa,QAAU,KACvBE,EAAc,QAAQ,CAC1B,EAAGQ,CAAU,EACb,EAEIjB,IADA,aAAaA,EAAyC,EACV,MAE5CD,KACIE,IAA6C,aAAaA,EAA2C,EACzG,GAA8C,eAAe,CACzD,OAAOJ,GAA+Bvtb,GACtC,GAA8C,KAC9C,GAAuC,EAC3C,EAAG,KAAK,IAAIstb,IAAwCqB,CAAU,CAAC,EAEvE,EACIC,MAAoB,CACpBN,EAAkB,EAClBF,EAAmB,EACf,CAAC7uE,GAAU,CAACkuE,IACRC,IAA2C,aAAaA,EAAyC,EACrG,GAA4C,eAAe,CACvD,GAA4C,KAC5C,GAAuC,GAEvCc,EAAY,EAAK,CACrB,EAAGvsY,CAAK,GACAs9T,GACZivE,EAAY,EAAI,CACpB,EAeA,OAdA,EAAIK,iBAAsB,CACtB,EAAc,QAAUt8N,CAC5B,EAAG,CACCA,CACJ,CAAC,GACD,EAAIs8N,qBACW,CACHZ,EAAa,SAAS,aAAaA,EAAa,OAAO,EAC7CV,GAA+Bvtb,IAChC,OAAOutb,GAA+Bvtb,EACvD,EACD,CACCA,CACJ,CAAC,EACM,CACK,SACa,sBACrB,KAAO,GAAY,CACX,CAAC0ub,GAAazsY,EAAQ,GAAK,CAACgsY,EAAa,QAASW,EAAc,EAGpEJ,EAAYf,EAAoC,CACpD,EACA,MAAOY,CACX,CACJ,CClGA,SAASS,IAA0C,EAAO,EAAO,EAAK,CAClE,GAAI,CAAgB,eAA6B,iBAAsB1jB,IAA2C,CAC9G,GAAG7/Z,EACH,OAAQ1G,EAAM,OACd,QAASA,EAAM,KACnB,EAAGi1B,CAAG,EACN+yY,IAA+C,CAC3C,WAAY,CAAChoa,EAAM,OACnB,uBAAwB0G,EAAM,sBAClC,CAAC,EACD4ka,IAA+C,EAC/C,GAAI,CAAc,cAAe5ka,EAgBjC,OAfA,EAAIwjb,iBAAsB,CACtB,GAAIlqb,EAAM,QAAUi1B,EAAI,QAGpB,OAFI62Y,EACO/M,IAA2C9pY,EAAI,OAAO,EACtD4oY,IAA2C,CAClD5oY,EAAI,OACR,EAAG,CACC,eAAgB,EACpB,CAAC,CAET,EAAG,CACCj1B,EAAM,OACN8ra,EACA72Y,CACJ,CAAC,EACM,CACH,WAAgBkqV,GAA2CoqD,CAAY,EACxD,eACnB,CACJ,CC/BA,IAAI4gB,GAAuC,OAAO,SAAa,KAAe,OAAO,eACrF,SAASC,KAA4C,CACjD,IAAIh9D,EAAY1Q,GAA2C,EACvD2tE,GAAA,EAAiBC,UAAe,IAAI,EACpC,CAACv1a,EAAM+wM,IAAA,EAAeykO,gBAAqBn9D,EAAQ,CAC/C,MAAO,EACP,OAAQ,CACZ,EAAIo9D,GAAsC,CAAC,EAsC/C,OArCA,EAAIC,iBAAsB,CACtB,IAAIC,EAAc,GAAU,CACxB5kO,EAAS,GACDO,EAAQ,QAAUtxM,EAAK,OAASsxM,EAAQ,SAAWtxM,EAAK,OAAeA,EACpEsxM,CACV,CACL,EAEIL,MAAe,CAEXmkO,IAAwCA,GAAqC,MAAQ,GACzFO,EAAWF,GAAsC,CAAC,CACtD,EAGIllE,EAAU,GAAI,CACV6kE,IAAwCA,GAAqC,MAAQ,GAChF7+D,GAA+C/H,GAA2CxxU,CAAC,CAAC,IACrG,EAAW,QAAc41X,GAA4C,GAAS,CACtEjtD,GACJgwE,EAAW,CACP,MAAO,SAAS,gBAAgB,YAChC,OAAQ,SAAS,gBAAgB,YACrC,CAAC,CACL,CAAC,EACL,EAKA,OAJAA,EAAWF,GAAsC,CAAC,EAC1C5jE,GAA2C,GAASE,GAA2C,GAAG,OAAO,iBAAiB,OAAQxB,EAAQ,EAAI,EACjJ6kE,GACAA,GAAqC,iBAAiB,SAAUnkO,CAAQ,EADlC,OAAO,iBAAiB,SAAUA,CAAQ,MAE1E,CACPqkO,EAAW,UAAU,EACbzjE,GAA2C,GAASE,GAA2C,GAAG,OAAO,oBAAoB,OAAQxB,EAAQ,EAAI,EACpJ6kE,GACAA,GAAqC,oBAAoB,SAAUnkO,CAAQ,EADrC,OAAO,oBAAoB,SAAUA,CAAQ,CAE5F,CACJ,EAAG,CAAC,CAAC,EACEjxM,CACX,CAGI,SAASy1a,IAAwC,CACjD,MAAO,CAEH,MAAOL,GAEP,KAAK,IAAIA,GAAqC,MAAQA,GAAqC,MAAO,SAAS,gBAAgB,WAAW,EAAI,SAAS,gBAAgB,YACnK,OAAQA,GAAuCA,GAAqC,OAASA,GAAqC,MAAQ,SAAS,gBAAgB,YACvK,CACJ,CCrCA,IAAMQ,KAA0D,EAAIC,iBAAsB,IAAI,EACxFC,IAA0D,EAAID,iBAAsB,IAAI,EACxFE,IAA0D,EAAIC,cAAmB,SAAe,EAAO,EAAK,CAE9G,MADcC,cAAmBH,EAC3B,EAiBF,OAAqBvwU,EAAkB,cAAc2wU,IAAoC,CACrF,GAAGvkb,EACH,SAAUuuB,CACd,EAAGvuB,EAAM,QAAQ,EAErB,GAAI,CAAiB,gBAA0C,4BAAmC,SAAqB,cAA2B,eAAwB,WAAsB,aAAuB,YAAqC,2BAAwD,+BAA8B,GAAG8sO,GAAe9sO,EACpW,OAAqB4zG,EAAkB,cAAc4wU,GAA2C,CAC7E,gBACY,4BACnB,SACK,cACC,eACF,aACD,YACe,2BACI,8BAClC,EAAiB5wU,EAAkB,cAAc2wU,IAAoC,CACjF,GAAGz3M,EACH,SAAUv+M,CACd,EAAG2iF,CAAQ,CAAC,CAChB,CAAC,EACD,SAASuzU,IAAiD,EAAO,EAAK,CAClE,CAACzkb,EAAOuuB,GAAWwrV,GAA2C/5W,EAAOuuB,EAAK01Z,GAAyC,EACnH,IAAItd,GAAA,EAAmB2d,cAAuBzd,EAAyC,EACnFC,EAAiB4d,GAA+B1kb,CAAK,EACrD1G,EAAQ0G,EAAM,QAAU,MAAQA,EAAM,aAAe,MAAQ,CAAC2ma,EAAeG,EAAaH,EAI1Fge,EAAgBC,GAAqBr2Z,CAAG,EACxCs2Z,GAAA,EAAeC,UAAe,IAAI,EAClCC,EAAuBC,GAAyBL,EAAWrrb,EAAM,OAAQ0G,EAAM,MAAM,EACrFilb,GAAA,EAAgBH,UAAe,IAAI,EACnCI,EAAqBF,GAAyBH,EAAUvrb,EAAM,OAAS,GAAU2rb,EAAU,UAAUjua,CAAO,CAAC,EAC7G2tZ,EAAYogB,GAAoBG,GAAkBllb,EAAM,WAAa,GACrE0mX,EAAYy+D,GAAiB,EAEjC,MADI,CAAC7rb,EAAM,QAAU,CAACqra,GAAaj+C,EAAc,KAC5B9yQ,EAAkB,cAAcwxU,IAAyC,CAC1F,GAAGplb,EACI,QACI,YACX,WAAY2kb,EACF,WACC,WACf,CAAC,CACL,CACA,IAAMH,IAA0D,EAAIH,cAAmBI,GAAgD,EACvI,SAASW,IAAwC,CAA4B,2BAAsD,6BAA4B,GAAGplb,GAAS,CACvK,IAAI6kb,EAAW7kb,EAAM,SACjB,CAAS,SAAUA,EACnB,CAACg0W,EAAQyzD,IAAA,EAAiB4d,YAAiB,EAAK,EAChDC,EAAeC,GAA0Bvlb,EAAM,WAAYg0W,EAAQh0W,EAAM,OAAO,GAAKA,EAAM,YAAc,GACzGwlb,EAAa,CAAC,CAACC,IAA+B,CAACzxE,GAAUsxE,GACzD,CAAc,aAA2B,iBAAsBI,IAAwB,CACvF,GAAG1lb,EACH,WAAYwlb,CAChB,EAAGlsb,EAAOurb,CAAQ,EAEdc,GAAA,EAAoBrB,cAAuBhU,EAA0C,EACrFsV,EAAsBH,EAA6BI,IAAyCF,EAAe,CAC3G,WAAYH,CAChB,CAAC,EAAIG,EACDnrE,EAAkBpB,GAAyC,CAC3D,GAAGp5W,EACH,iBAAkB,0BAClB,OAAQ,CACJ,WAAYslb,EACZ,UAAWtlb,EAAM,UACV,OACX,CACJ,CAAC,EACG+7L,EAAe+pP,IAAwB,EACvCC,EACAC,EACJ,GAAI,OAAO,SAAa,IAAa,CACjC,IAAIC,EAAuBC,GAAqB,SAAS,IAAI,EAAI,SAAS,KAAO,SAAS,kBAAoB,SAAS,gBAEnHC,EAA4BF,EAAiB,sBAAsB,CAAC,CAAC,MAAQ,EAC7EG,EAA6BH,EAAiB,sBAAsB,CAAC,CAAC,OAAS,EACnF,EAAYA,EAAiB,YAAcE,EAC3C,EAAaF,EAAiB,aAAeG,CACjD,CACA,IAAIl6V,EAAQ,CACR,GAAGsuR,EAAY,MACf,0BAA2Bz+K,EAAS,MAAQ,KAC5C,2BAA4BA,EAAS,OAAS,KAC9C,eAAgBgqP,IAAc,OAA+B,OAAnBA,EAAY,KACtD,gBAAiBC,IAAe,OAAgC,OAApBA,EAAa,IAC7D,EAIA,OAFAhxE,OAAoCqxE,OAA6B5e,EAAU,EAAI,CAAC,EAAG,CAAC,CAAC,EAEhE7zT,EAAkB,cAAkB0yU,GAAiB,CACtE,UAAWtmb,EAAM,UACjB,gBAAiBgpa,CACrB,EAAiBp1T,EAAkB,cAAkB2nQ,GAA2C,IAAK,CACjG,GAAOgrE,GAAuBC,GAAuBxmb,EAAO,CACxD,OAAQ,EACZ,CAAC,EAAGipa,CAAa,EACjB,GAAGzuD,EACI,QACP,IAAKx6W,EAAM,WACX,gBAAiBslb,GAAY,OAC7B,eAAgBtlb,EAAM,WAAa,MACvC,EAAiB4zG,EAAkB,cAAkBulQ,GAA4C,CAC7F,OAAQ,CACJ,CACIgrE,GACA,CACgB,aACF,WACV,UAAWnkb,EAAM,UACjB,UAAWA,EAAM,UACT,SACR,cAAeA,EAAM,aACzB,CACJ,EACA,CACQ6ma,GACJvta,CACJ,EACA,CACQg3a,GACJsV,CACJ,CACJ,CACJ,EAAGprE,EAAY,QAAQ,CAAC,CAAC,CAE7B,CACA,SAASqrE,IAAyC,EAAS,EAAO,CAC9D,GAAIjha,GAAW,UAAWA,GAAWA,EAAQ,MAAO,CAChD,IAAI6ha,EAAQ,CAAC,EACb,IAAI,IAAI5yb,KAAO+wB,EAAQ,MAAM,EAAM/wB,GAAO,CACtC,GAAG+wB,EAAQ,MAAM/wB,GACjB,GAAGmM,CACP,EACA,MAAO,CACH,GAAG4kB,EACI,OACX,CACJ,CACA,MAAO,CACH,GAAGA,EACH,GAAG5kB,CACP,CACJ,CACA,SAASukb,IAAmC,EAAO,CAC/C,GAAI,CAAc,aAAsB,WAAqB,YAAsB,YAA0B,gBAAuB,aAAeD,cAAmBH,EAAyC,EAC3M7qb,GAAA,EAAYgrb,cAAuBzd,EAAyC,EAK5Et4Y,EAAUq2Z,IAJV,EAAiB8B,eAAwBC,GAAkB3mb,EAAM,SAAU6kb,CAAQ,EAAG,CACtF7kb,EAAM,SACN6kb,CACJ,CACmC,CAAU,EACzCS,EAAeC,GAA0Bh3Z,EAAKylV,EAAQh0W,EAAM,OAAO,EACnEw6W,EAAkBpB,GAAyC,CAC3D,GAAGp5W,EACH,iBAAkB,mBAClB,OAAQ,CACJ,WAAYslb,EACD,YACJ,OACX,CACJ,CAAC,EAID,OAHAtwE,OAAgC,CACxBiwE,IAAW,EAAU,QAAUjlb,EAAM,OAC7C,CAAC,EACoB4zG,EAAkB,cAAkB2nQ,GAA2C,IAAK,CACrG,GAAOgrE,GAAuBC,GAAuBxmb,EAAO,CACxD,OAAQ,EACZ,CAAC,EAAG4mb,CAAU,EACd,GAAGpsE,EACE,MACL,gBAAiB8qE,GAAY,OAC7B,eAAgB3gB,GAAa,MACjC,EAAGtE,GAA+BzsT,EAAkB,cAAkBizU,GAAuB,CACzF,UAAWvtb,EAAM,KACrB,CAAC,EAAGkhX,EAAY,QAAQ,CAC5B,CCxOI,IAAMssE,IAA4C,IAAI,QCmB1D,SAASC,IAA0C,EAAO,EAAO,EAAK,CAClE,GAAI,CAAS,QAAiB,WAAU,aAAcvwJ,EAAW,kBAAmBkoG,EAA8B,eAA0B,aAA2B,gBAAwB,UAAoB,YAAoB,WAAY1+X,EAC7O02M,EAAa12M,EAAM,YAAc1G,EAAM,WAIzC2+E,EAAU3+E,EAAM,gBAAkBxF,EAClCqqN,EAAY,GAAI,CAChB,EAAE,gBAAgB,EAClB7kN,EAAM,iBAAiBxF,CAAK,CAChC,EAEI,CAAc,aAAuB,aAAkBwlY,GAA2C,CACpF,eACF,aACG,gBACN,UACE,YACF,UACG,YAChB,CAAC,EAEG,CAAE,WAAYkF,EAAY,UAAWwoD,GAAuB1tD,GAA2C,CACzF,eACF,aACG,gBACJ,YACF,UACG,aACZ,QAAS,EAAG,CACRY,IAAU,CAAC,EACX5gY,EAAM,iBAAiBxF,CAAK,EAC5By6B,EAAI,SAAS,MAAM,CACvB,CACJ,CAAC,EACG,CAAkB,kBAAuBqkW,GAA+Cna,GAA2Cz4W,EAAO,CAC1I,YAAa1G,EAAM,oBAAoBxF,CAAK,CAChD,CAAC,EAAGy6B,CAAG,EACHskW,EAAmBpa,GAA2CsiB,EAAYzF,CAAc,EACxFja,EAAekc,GAA2Cv3X,EAAO,CACjE,UAAW,EACf,CAAC,EACGs0N,EAAW,GACXh7N,EAAM,eAAiB,MAEhBA,EAAM,mBAAqBxF,GAASwF,EAAM,kBAAoB,QAAM,EAAW,GADlFA,EAAM,gBAAkBxF,IAAO,EAAW,GAE9C4iN,IAAY,EAAW,QAC3B,GAAI,CAAQ,OAAY,OAAqB,gBAA+B,iBAAoC,sBAA2BowO,IAA2C,IAAIxtb,CAAK,EAC/LkgZ,GAA+CjrX,EAAKj1B,EAAM,qBAAsBA,EAAM,gBAAgB,EACtGqgZ,GAA+C,CACvB,oBACxB,EAAGrgZ,EAAOi1B,CAAG,EACb,IAAI0nY,EAAuBzb,IAA2C,EACtE,MAAO,CACH,WAAgB/hC,GAA2C+lB,GAAA,EAAgByoD,gBAAqB,CACxF,QAAU,GAAI,EAAE,eAAe,EAG/B,YAAc,GAAI,EAAE,eAAe,CACvC,GAAI,CAAC,CAAC,CAAC,EACX,WAAgBxuE,GAA2C4C,EAAU,CACjE,GAAGwX,EACH,KAAM,QACA,OACA,OACI,WACV,SAAUn8K,EACV,SAAUp9M,EAAM,YAAcw/Y,IAAuB,SAC5C,UACF,QACG,WACV,mBAAoB,CAChB94Y,EAAM,oBACNi2Z,EAAiB,GACjB38Z,EAAM,UAAYigZ,EAAiB,KACnCD,CACJ,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,GAAK,MACnC,CAAC,EACiB,mBACN,aACZ,WAAYrhU,EACZ,UAAWuhT,GAAawtD,CAC5B,CACJ,CC/EA,SAASE,IAA0C,EAAO,EAAO,CAC7D,GAAI,CAAQ,OAAY,OAAkB,aAAwB,aAAwB,aAAyB,cAAc,WAAgC,qBAAqB,QAAWlnb,EAC7L,CAAa,aAAkBknX,GAA2C,EAC1E,CAAa,YAA6B,mBAAqC,qBAAsB5tX,EAAM,kBAC3G,CAAc,aAAwB,aAA8B,mBAAqC,qBAA0B+/Y,GAA2C,CAC9K,GAAGr5Y,EAGH,iBAAkB,OAClB,UAAW1G,EAAM,UACjB,aAAc0G,EAAM,cAAgBo5Y,CACxC,CAAC,EACG/9B,EAAekc,GAA2Cv3X,EAAO,CACjE,UAAW,EACf,CAAC,EAIG,CAAoB,oBAAyBg8X,GAA2C,CACxF,aAAc,EAAG,CACbh8X,EAAM,SAASqrC,CAAC,EACX/xC,EAAM,eAAeA,EAAM,oBAAoB,IAAI,CAC5D,EACA,cAAe0G,EAAM,QACrB,oBAAqBA,EAAM,aAC/B,CAAC,EACD,SAASmnb,EAAe,EAAS,EAAG,CAChC,IAAI5lC,EAAaoC,GAA2Ct4W,EAAE,cAAe,CACzE,KAAUwxU,GAA2CxxU,CAAC,EACtD,OAAS,GAAO8kC,aAAoB2rS,GAA2C3rS,CAAI,CAAC,CAAC,kBAAoBA,EAAK,OAAS,OAC3H,CAAC,EACGi3W,EAoBJ,OAnBIC,IAAY,QACZ,EAAW9lC,EAAO,SAAS,EAC3B,CAEI6lC,IADA,EAAO,YAAc/7Y,EAAE,cACZk2W,EAAO,WAAW,KAGjC,EAAWA,EAAO,aAAa,EAC/B,CAEI6lC,IADA,EAAO,YAAc/7Y,EAAE,cACZk2W,EAAO,UAAU,IAGhC6lC,GAEAA,EAAS,MAAM,EACf9tb,EAAM,iBAAiB8tb,EAAS,KAAK,EAC9B,IAEJ,EACX,CACA,GAAI,CAAiB,iBAAsBr1D,GAA2C,CAClF,UAAW,CACP,WAAa,GAEFo1D,EADOnxH,IAAc,OAASy0F,IAAgB,WAAa,OAAS,OAC5C,CAAC,EAEpC,UAAY,GAED08B,EADOnxH,IAAc,OAASy0F,IAAgB,WAAa,OAAS,OAC5C,CAAC,EAEpC,UAAY,GACD08B,EAAe,OAAQ,CAAC,EAEnC,QAAU,GACCA,EAAe,OAAQ,CAAC,CAEvC,EACA,aAAc,EAClB,CAAC,EACGG,EAAgBnwE,GAA2C7hX,CAAI,EAQnE,OAPAwxb,IAA+C,IAAIxtb,EAAO,CACtD,KAAMgub,EACA,OACN,cAAerxB,EAAiB,GAChC,eAAgBkoB,EAAkB,GACd,oBACxB,CAAC,EACM,CACH,gBAAqB1lE,GAA2C4C,EAAU,CAEtE,KAAM,aACN,GAAG0X,EACH,eAAgBz5X,EAAM,WAAa,OACnC,oBAAqB0G,EAAM,qBAC3B,gBAAiB86Y,GAAc,OAC/B,gBAAiBuB,GAAc,OAC/B,gBAAiB3lM,GAAc,OAC/B,mBAAoB+zM,EACpB,GAAG5rB,EACH,GAAG5B,CACP,CAAC,EACW,aACM,mBACC,oBACR,YACO,mBACC,mBACvB,CACJ,CCrHA,IAAIsqD,IAAiC,KAAK,MAAM,KAAK,OAAO,EAAI,IAAW,EACvEC,IAA0B,EAC9B,SAASC,IAA0C,EAAO,CAEtD,IAAInyb,GAAA,EAAWoyb,eAAoB1nb,EAAM,MAAQ,eAAeunb,IAA+B,GAAG,EAAEC,MAA2B,CAC3Hxnb,EAAM,IACV,CAAC,EACG,CAAC2nb,EAAehtC,GAAmBlvB,GAA2CzrX,EAAM,MAAOA,EAAM,cAAgB,KAAMA,EAAM,QAAQ,EACrI,CAACozG,IAAA,EAAoBw0U,YAAiBD,CAAa,EACnD,CAACE,EAAkBC,IAAA,EAA2BF,YAAiB,IAAI,EACnEjL,EAAiB3lC,GAA2C,CAC5D,GAAGh3Y,EACH,MAAO2nb,CACX,CAAC,EACGI,EAAoB,GAAQ,CACxB,CAAC/nb,EAAM,YAAc,CAACA,EAAM,aAC5B26Y,EAAY7mZ,CAAK,EACjB6ob,EAAW,iBAAiB,EAEpC,EACItlC,EAAYslC,EAAW,kBAAkB,UAC7C,MAAO,CACH,GAAGA,EACG,OACS,gBACf,qBAAsB38a,EAAM,QAAU,OAA2BA,EAAM,cAAgB,KAArCozG,EAChC,mBACA,mBACG,sBACrB,WAAYpzG,EAAM,YAAc,GAChC,WAAYA,EAAM,YAAc,GAChC,WAAYA,EAAM,YAAc,GAChC,gBAAiBA,EAAM,kBAAoBq3Y,EAAY,UAAY,MACxD,WACf,CACJ,CCPA,IAAM2wC,KAA0D,EAAIC,iBAAsB,IAAI,EAExFC,KAA0D,EAAID,iBAAsB,IAAI,EACxFE,IAA0D,EAAIF,iBAAsB,IAAI,EACxFG,KAA0D,EAAIC,cAAmB,SAAoB,EAAO,EAAK,CACnH,CAACrob,EAAOuuB,GAAWwrV,GAA2C/5W,EAAOuuB,EAAKy5Z,GAAyC,EACnH,GAAI,CAAE,mBAAoBtK,GAA+B/jE,GAA+Co/B,EAA0C,GAAK,CAAC,EACpJD,EAAqB94Y,EAAM,oBAAsB09a,GAA0B,SAC3Epkb,EAAYgvb,IAA2B,CACvC,GAAGtob,EACiB,oBACxB,CAAC,EACG,CAACg+a,EAAU53Q,GAAaq0M,GAA2C,CAACz6W,EAAM,eAAiB,CAACA,EAAM,kBAAkB,EACpH,CAAmB,kBAA6B,aAA8B,mBAAqC,oBAAmB,GAAG28a,GAAmB4L,IAAsB,CAClL,GAAGvob,EACI,QACa,oBACxB,EAAG1G,CAAK,EACJkhX,EAAkBpB,GAAyC,CAC3D,GAAGp5W,EACH,OAAQ,CACJ,YAAaA,EAAM,aAAe,WAClC,WAAY1G,EAAM,WAClB,WAAYA,EAAM,WAClB,WAAYA,EAAM,WAClB,UAAWA,EAAM,UACV,OACX,EACA,iBAAkB,uBACtB,CAAC,EACGiqY,EAAeilD,GAAuBxob,EAAO,CAC7C,OAAQ,EACZ,CAAC,EACD,OAAqB4zG,EAAkB,cAAkB2nQ,GAA2C,IAAK,CACrG,GAAOktE,GAAmBllD,EAAU/oB,EAAakuE,CAAe,EAC3D,MACL,KAAM1ob,EAAM,MAAQ,OACpB,mBAAoBA,EAAM,aAAe,WACzC,eAAgB1G,EAAM,WAAa,OACnC,gBAAiBA,EAAM,YAAc,OACrC,gBAAiBA,EAAM,YAAc,OACrC,gBAAiBA,EAAM,YAAc,MACzC,EAAiBs6G,EAAkB,cAAkBulQ,GAA4C,CAC7F,OAAQ,CACJ,CACIgvE,GACA7ub,CACJ,EACA,CACQ8kY,GACJ,CACI,GAAGI,EACH,IAAKw/C,EACL,YAAa,MACjB,CACJ,EACA,CACQj6C,GACJ,CACI,MAAO,CACH,YAAakyB,EACb,aAAckoB,CAClB,CACJ,CACJ,EACA,CACQ3nC,GACJmmC,CACJ,CACJ,CACJ,EAAiB/oU,EAAkB,cAAkB8sS,GAA4C,KAAMlmC,EAAY,QAAQ,CAAC,CAAC,CACjI,CAAC,EAyBKmuE,KAA2D,EAAIV,iBAAsB,IAAI,EACzFW,KAA0D,EAAIP,cAAmB,SAAoB,EAAO,EAAK,CACnH,GAAI,CAAE,SAAUQ,EAAuB,KAAM,GAAG/7M,GAAe9sO,EAC/D,CAACA,EAAOuuB,GAAWwrV,GAA2CjtI,EAAYv+M,EAAK25Z,GAAyC,EACxH,IAAI5ub,EAAAs6G,EAA0B,WAAWu0U,EAAyC,EAC9Et+D,EAAei/D,MAAyBC,eAAwBC,GAAkBH,EAAsB7ob,EAAM,WAAa,OAA6B,KAAjBA,EAAM,QAAe,EAAG,CAC/J6ob,EACA7ob,EAAM,QACV,CAAC,CAAC,EACEo0M,EAAW60O,IAAiB,CAC5B,GAAOluE,GAA2C/6W,CAAK,EAEvD,SAAU,OAAOA,EAAM,UAAa,YAAoBA,EAAM,QAClE,EAAG1G,EAAOuwX,CAAQ,EACd,CAAoB,mBAA8B,aAAwB,cAAez1K,EACzFomK,EAAkBpB,GAAyC,CAC3D,GAAGp5W,EACH,iBAAkB,wBAClB,OAAQ,CACQ,aACA,aACZ,WAAY1G,EAAM,WAClB,UAAWA,EAAM,UACjB,WAAYA,EAAM,UACtB,CACJ,CAAC,EACGiqY,EAAeilD,GAAuBxob,EAAO,CAC7C,OAAQ,EACZ,CAAC,EAGD,OAFA,OAAOujY,EAAS,GAChB,OAAOA,EAAS,QACK3vR,EAAkB,cAAkB2nQ,GAA2C,IAAK,CACrG,GAAOktE,GAAmBllD,EAAU/oB,CAAW,EAC1C,MACL,gBAAiBkgC,GAAc,OAC/B,gBAAiBhkM,GAAc,OAC/B,gBAAiBp9M,EAAM,YAAc,OACrC,eAAgBA,EAAM,WAAa,OACnC,gBAAiBA,EAAM,YAAc,MACzC,EAAiBs6G,EAAkB,cAAkBulQ,GAA4C,CAC7F,OAAQ,CACJ,CACQynC,GACJ,CACgB,YAChB,CACJ,EACA,CACI+nC,IACA,CACI,GAAGv0O,EACO,WACV,iBAAkB,wBACtB,CACJ,EACA,CACQ2vL,GACJ,CACI,MAAO,CACH,YAAakyB,CACjB,CACJ,CACJ,CACJ,CACJ,EAAGz7C,EAAY,QAAQ,CAAC,CAC5B,CAAC,EACK0uE,KAA0D,EAAIb,cAAmB,SAAqB,EAAO,EAAK,CACpH,GAAI,CAAc,aAAwB,aAAwB,aAAwB,aAAuB,YAA6B,mBAA4B,eAAiBc,cAAmBR,GAA0C,EACpPrvb,EAAAs6G,EAA0B,WAAWu0U,EAAyC,EAC9E,CAAa,YAA2B,iBAA4B,cAAmBiB,GAAqB,EAC5GC,EAAsB3yO,GAAcp9M,EAAM,WAC1C,CAAc,aAAuB,aAAkBgwb,GAAiB,CACxE,GAAGtpb,EACH,WAAYqpb,CAChB,CAAC,EACG7uE,EAAkBpB,GAAyC,CAC3D,GAAGp5W,EACe,mBAClB,OAAQ,CACQ,aACD,YACA,YACA,YACK,iBACJ,aACZ,WAAY1G,EAAM,WAClB,UAAWA,EAAM,UACjB,WAAYA,EAAM,UACtB,CACJ,CAAC,EACGiqY,EAAeilD,GAAuBxob,EAAO,CAC7C,OAAQ,EACZ,CAAC,EAGD,OAFA,OAAOujY,EAAS,GAChB,OAAOA,EAAS,QACK3vR,EAAkB,cAAkB2nQ,GAA2C,MAAO,CACvG,GAAOktE,GAAmBllD,EAAU/E,EAAYL,EAAY3jB,CAAW,EAClE,MACL,gBAAiBkgC,GAAc,OAC/B,eAAgBlhB,GAAa,OAC7B,eAAgBgE,GAAa,OAC7B,eAAgBf,GAAa,OAC7B,qBAAsBO,GAAkB,OACxC,gBAAiBtmL,GAAc,OAC/B,gBAAiBp9M,EAAM,YAAc,OACrC,eAAgBA,EAAM,WAAa,OACnC,gBAAiBA,EAAM,YAAc,MACzC,EAAiBs6G,EAAkB,cAAkB21U,IAAwB,CACzE,YAAa,MACjB,EAAiB31U,EAAkB,cAAc,QAAS,CACtD,GAAO60U,GAAmBn9D,EAAYwH,CAAU,EAChD,IAAKjJ,CACT,CAAC,CAAC,EAAGrP,EAAY,QAAQ,CAC7B,CAAC,EC9PGgvE,IAA4B,CAAC,EACjC,IAA4B,CACxB,eAAgB,cACpB,ECgCA,IAAIC,IAA4B,CAAC,EAmCjC,IAA4B,CACxB,eACA,eACA,eACA,eACA,eACA,eACA,QAASC,IACT,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,cACJ,EClGA,SAAS9gE,IAAuB,EAAG,CACjC,OAAO5uW,GAAKA,EAAE,WAAaA,EAAE,QAAUA,CACzC,CAgBA,SAAS2va,IAA0C,EAAO,EAAO,EAAU,CACvE,IAAI5sC,EAAsBt0B,GAAgDG,IAAuBghE,GAAqB,EAAK,yBAAyB,EAChJ,CAAc,aAAwB,aAAsB,WAAmB,UAAe,OAAO,UAAa5pb,EAClH,CAAiB,iBAAsB+xX,GAA2C,CAClF,WAAYr7K,GAAcokM,EAC1B,UAAW,CACP,UAAW,CACP,GAAI+uC,EAGAA,EAASvwb,EAAM,KAAK,OAGxB,MAAO,EACX,EACA,WAAY,CAGR,GAAIA,EAAM,QAAU,KAAO,CAACuwX,EAAS,SAAWA,EAAS,QAAQ,QAAU,IAAK,MAAO,GACvFvwX,EAAM,SAAS,EAAE,EACjBwwb,IAAU,CACd,CACJ,CACJ,CAAC,EACGC,MAAyB,CACzBzwb,EAAM,SAAS,EAAE,EACbwwb,GAASA,EAAQ,CACzB,EACIhwD,MAAmB,CAGnBjQ,EAAS,SAAS,MAAM,CAC5B,EACI,CAAc,aAAwB,aAA8B,mBAAqC,oBAAmB,GAAG8yD,GAAmB5gC,IAA0C,CAC5L,GAAG/7Y,EACH,MAAO1G,EAAM,MACb,SAAUA,EAAM,SAChB,UAAW0G,EAAM,UACjB,QAASA,EAAM,QACT,MACV,EAAG6pX,CAAQ,EACX,MAAO,CACS,aAIZ,WAAgBpR,GAA2Csa,EAAe,CACtE,GAAGzH,EAEH,aAAc,MAClB,CAAC,EACD,iBAAkB,CACd,aAAcyxB,EAAgB,OAAO,cAAc,EACnD,oBAAqB,GACrB,oBAAqB,GACrB,WAAYrmM,GAAcokM,EAC1B,QAASivC,EACK,cAClB,EACkB,mBACC,oBACnB,GAAGpN,CACP,CACJ,CC3EA,SAASqN,IAA0C,EAAO,CACtD,GAAI,CAACl2b,EAAO0iX,GAAgBiV,GAA2Cw+D,IAA+Bjqb,EAAM,KAAK,EAAGiqb,IAA+Bjqb,EAAM,YAAY,GAAK,GAAIA,EAAM,QAAQ,EAC5L,MAAO,CACI,QACG,UACd,CACJ,CACA,SAASiqb,IAA+B,EAAK,CACzC,GAAIx2b,GAAO,KACX,OAAOA,EAAI,SAAS,CACxB,CCgBA,IAAMy2b,KAA0D,EAAIC,iBAAsB,IAAI,EACxFC,IAA8DC,GAAgC,SAAqB,EAAO,EAAK,CACjI,CAACrqb,EAAOuuB,GAAWwrV,GAA2C/5W,EAAOuuB,EAAK27Z,GAAyC,EACnH,GAAI,CAAE,mBAAoBxM,GAA+B/jE,GAA+Co/B,EAA0C,GAAK,CAAC,EACpJD,EAAqB94Y,EAAM,oBAAsB09a,GAA0B,SAC3E7zD,GAAA,EAAeygE,UAAe,IAAI,EACtC,CAACtqb,EAAO6pX,GAAgB9P,GAA2C/5W,EAAO6pX,EAAcqD,EAA0C,EAClI,GAAI,CAAC8wD,EAAU53Q,GAAaq0M,GAA2C,CAACz6W,EAAM,eAAiB,CAACA,EAAM,kBAAkB,EACpH1G,EAAYixb,IAA4B,CACxC,GAAGvqb,EACiB,oBACxB,CAAC,EACG,CAAc,aAAwB,aAA8B,mBAAoC,mBAAqC,oBAAmB,GAAG28a,GAAmB6N,IAAuB,CAC7M,GAAOzvE,GAA2C/6W,CAAK,EAChD,QACa,oBACxB,EAAG1G,EAAOuwX,CAAQ,EACdrP,EAAkBpB,GAAyC,CAC3D,GAAGp5W,EACH,OAAQ,CACJ,QAAS1G,EAAM,QAAU,GACzB,WAAY0G,EAAM,YAAc,GAChC,UAAW28a,EAAW,WAAa,GACnC,WAAY38a,EAAM,YAAc,GAChC,WAAYA,EAAM,YAAc,GACzB,OACX,EACA,iBAAkB,wBACtB,CAAC,EACGujY,EAAeknD,GAAuBzqb,EAAO,CAC7C,OAAQ,EACZ,CAAC,EAED,OADA,OAAOujY,EAAS,GACK3vR,EAAkB,cAAkB2nQ,GAA2C,IAAK,CACrG,GAAGgoB,EACH,GAAG/oB,EACE,MACL,KAAMx6W,EAAM,MAAQ,OACpB,aAAc1G,EAAM,QAAU,IAAM,OACpC,gBAAiB0G,EAAM,YAAc,OACrC,eAAgB28a,EAAW,WAAa,OACxC,gBAAiB38a,EAAM,YAAc,OACrC,gBAAiBA,EAAM,YAAc,MACzC,EAAiB4zG,EAAkB,cAAkBulQ,GAA4C,CAC7F,OAAQ,CACJ,CACQilB,GACJ,CACI,GAAGI,EACH,IAAKw/C,CACT,CACJ,EACA,CACQziC,GACJ,CACI,GAAGjwB,EACH,IAAKzB,CACT,CACJ,EACA,CACQ0Y,GACJmoD,CACJ,EACA,CACQ3mD,GACJ,CACI,MAAO,CACH,YAAakyB,EACb,aAAckoB,CAClB,CACJ,CACJ,EACA,CACQnjC,GACJ,CACI,UAAW2hC,EAAW,UACtB,WAAY38a,EAAM,YAAc,EACpC,CACJ,EACA,CACQw2Y,GACJmmC,CACJ,CACJ,CACJ,EAAGniE,EAAY,QAAQ,CAAC,CAC5B,CAAC,ECvFKmwE,GAA4C,IAAI,QACtD,SAASC,IAA0C,EAAO,EAAO,EAAK,CAClE,GAAI,CAAoB,mBAA8B,aAAwB,aAAkB,OAAY,OAA0B,qBAAqB,QAAW5qb,EAGlKoqZ,EAAeF,GAA2C,CAC1D,MAAO,SACP,YAAa,MACjB,CAAC,EACGxD,GAAA,EAAemkC,eAAoB3kC,GAAoB,IAAQ+C,GAA2C3vZ,EAAM,WAAYA,EAAM,aAAci1B,EAAK67X,CAAQ,EAAG,CAChKlE,EACA5sZ,EAAM,WACNA,EAAM,aACN8wZ,EACA77X,CACJ,CAAC,EACG,CAAoB,mBAA6B,aAAkBy7Y,IAA2C,CAClG,aACZ,KAAM,SACV,EAAG1wa,EAAOi1B,CAAG,EACT,CAAiB,iBAAsBwjW,GAA2C,CAClF,UAAW,CACP,cAAe,CACX,GAAIz4X,EAAM,iBAAiB,gBAAkB,WAAY,MAAO,GAChE,IAAIzF,EAAMyF,EAAM,aAAe,KAAmDotZ,EAAS,cAAc,EAAnEA,EAAS,cAAcptZ,EAAM,WAAW,EAC1EzF,GAAO,MAAMyF,EAAM,eAAezF,CAAG,CAC7C,EACA,eAAgB,CACZ,GAAIyF,EAAM,iBAAiB,gBAAkB,WAAY,MAAO,GAChE,IAAIzF,EAAMyF,EAAM,aAAe,KAAmDotZ,EAAS,cAAc,EAAnEA,EAAS,cAAcptZ,EAAM,WAAW,EAC1EzF,GAAO,MAAMyF,EAAM,eAAezF,CAAG,CAC7C,CACJ,EACA,aAAc,GACd,UAAWmM,EAAM,UACjB,QAASA,EAAM,OACnB,CAAC,EACG,CAAmB,mBAAwB+lZ,IAA2C,CACtF,iBAAkBW,EAClB,iBAAkBptZ,EAAM,iBACxB,aAAc,EAAK,CACfA,EAAM,eAAezF,CAAG,CAC5B,CACJ,CAAC,EACG,CAAa,YAA6B,mBAAqC,qBAAsByF,EAAM,kBAC3G,CAAc,aAAwB,aAA8B,mBAAqC,qBAA0B+/Y,GAA2C,CAC9K,GAAGr5Y,EACH,iBAAkB,OACP,YACX,aAAcA,EAAM,cAAgBo5Y,CACxC,CAAC,EACG9/Y,EAAM,iBAAiB,gBAAkB,aAAY,EAAkB,CAAC,GAC5E,IAAI+hX,EAAekc,GAA2Cv3X,EAAO,CACjE,UAAW,EACf,CAAC,EACGsqa,EAAmB7xD,GAA2CowC,EAAiBklB,EAAkBlvC,CAAU,EAC3GisD,EAAc3zE,GAA2C,EAQ7D,OAPAwzE,GAA0C,IAAIrxb,EAAO,CACrC,aACA,aACN,OACA,OACc,oBACxB,CAAC,EACM,CACH,WAAY,CACR,GAAGklY,EACH,YAAa,CACJx+X,EAAM,aACPuuB,EAAI,SAAS,MAAM,EAEnBi0V,GAA+C,UAAU,EAEjE,CACJ,EACA,aAAkB/J,GAA2C4C,EAAU,CACnE,GAAGivD,EACS,aACZ,UAAev1D,GAA2Cu1D,EAAa,UAAWv3C,EAAc,SAAS,EACzG,QAASA,EAAc,QACvB,kBAAmB,CACf+3D,EACAxgB,EAAa,mBACbA,EAAa,eAAiB,CAACA,EAAa,mBAAqBA,EAAa,GAAK,IACvF,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,EAC1B,QAAS,EAAG,CACJhxa,EAAM,YACN0G,EAAM,SAASA,EAAM,QAAQqrC,CAAC,EAC9BrrC,EAAM,eAAeA,EAAM,cAAc,EAAI,EACjD1G,EAAM,WAAW,EAAI,EACzB,EACA,OAAQ,EAAG,CACHA,EAAM,SACN0G,EAAM,QAAQA,EAAM,OAAOqrC,CAAC,EAC5BrrC,EAAM,eAAeA,EAAM,cAAc,EAAK,EAClD1G,EAAM,WAAW,EAAK,EAC1B,CACJ,CAAC,EACD,WAAY,CACR,GAAIwxb,CACR,EACA,UAAW,CACP,GAAGjd,EACH,SAAU,OACV,UAAWv0a,EAAM,eAAiB,GAClC,sBAAuB,GACvB,mBAAoB,GACpB,uBAAwB,GACxB,aAAc,YACd,OAAS,GAAI,CACDojX,GAA2CrxU,EAAE,cAAeA,EAAE,aAAa,IAC/ErrC,EAAM,QAAQA,EAAM,OAAOqrC,CAAC,EAC5BrrC,EAAM,eAAeA,EAAM,cAAc,EAAK,EAClD1G,EAAM,WAAW,EAAK,EAC1B,EACA,kBAAmB,CACfulY,EAAW,mBACXyrC,EAAa,eAAiB,CAACzrC,EAAW,mBAAqByrC,EAAa,GAAK,IACrF,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,CAC9B,EACkB,mBACC,oBACR,YACO,mBACC,oBACnB,kBAAmB,CACH,aACN,OACN,MAAOtqa,EAAM,MACN,QACP,WAAYuuB,EACN,MACV,CACJ,CACJ,CCpJA,SAASw8Z,IAA0C,EAAO,EAAO,EAAY,CACzE,IAAIntb,EAAW+sb,GAA2C,IAAIrxb,CAAK,GAAK,CAAC,EACrE,CAAgB,eAAoB,OAAOsE,EAAK,KAAY,OAAOA,EAAK,KAAkB,aAAaA,EAAK,YAAeoC,EAC3H,CAAsB,qBAAgC,cAAepC,EACrE,CAAuB,uBAA4Bq4Y,GAA2C,CAC9F,MAAO,CAEH,SAAU,QACV,IAAK,EACL,KAAM,CACV,CACJ,CAAC,EACDuD,GAA+Cx5Y,EAAM,UAAW1G,EAAM,aAAcA,EAAM,QAAQ,EAClGqgZ,GAA+C,CACvB,qBACpB,UAAW6jB,EAAW,SAAS,MAAM,CACzC,EAAGlka,EAAO0G,EAAM,SAAS,EACzB,IAAIw2W,EAAWl9W,EAAM,SAEjB6kN,GAAA,EAAe6sO,eAAqB,GAAI,CACxC,IAAI7uE,EAAkBU,GAA2C,CAAC,EAC9DV,EAAY,SAAU3F,EAAS,MAAM,KAAK2F,EAAY,gBAAkB,GAASzvR,EAAO,KAAK,CAAC,EAC7F8pR,EAAS,EAAE,cAAc,KAAK,CACvC,EAAG,CACCA,CACJ,CAAC,EAOD,MAAO,CACH,eAAgB,CACZ,GAAG+/B,EACH,cAAe,GAEd,gCAAkC,GAElC,mBAAqB,mBAC1B,EACA,WAAY,CACR,MAAO,CACH,QAAS,MACb,CACJ,EACA,YAAa,CACT,SAAU,GACI,eACd,SAAU7/L,EACV,SAAUp9M,EAAM,iBAAiB,gBAAkB,WACnD,SAAUw/Y,IAAuB,UAAYuD,EACvC,OACA,OACN,MAAO/iZ,EAAM,OAAS,GACZ,WACV,QAAS6kN,CACb,CACJ,CACJ,CACA,SAAS8sO,IAA0C,EAAO,CACtD,GAAI,CAAS,QAAmB,aAAmB,QAAa,OAAY,OAAkB,cAAejrb,EACzGkrb,GAAA,EAAgBC,UAAe,IAAI,EACnCthE,GAAA,EAAeshE,UAAe,IAAI,EAClC,CAAkB,iBAA6B,eAAgBJ,IAA0C,CACzG,GAAG/qb,EACH,UAAW1G,EAAM,WAAW,MAAQ,IAAM4xb,EAAYrhE,CAC1D,EAAGvwX,EAAOkka,CAAU,EAChBj7Y,EAAS,MAAM,QAAQjpB,EAAM,KAAK,EAAIA,EAAM,MAAQ,CACpDA,EAAM,KACV,EAIA,GAAIA,EAAM,WAAW,MAAQ,IAAK,OAAqBs6G,EAAkB,cAAc,MAAO,CAC1F,GAAGq/T,EACH,cAAe,yBACnB,EAAiBr/T,EAAkB,cAAc,QAAS,KAAMwyD,EAAqBxyD,EAAkB,cAAc,SAAU,CAC3H,GAAGw3U,EACH,IAAKF,CACT,EAAiBt3U,EAAkB,cAAc,SAAU,CACvD,MAAO,GACP,MAAO,MACX,EAAG,MAAQ,EAAG,CACV,GAAGt6G,EAAM,WAAW,QAAQ,CAChC,CAAC,CAAC,IAAK,GAAM,CACT,IAAI6mC,EAAO7mC,EAAM,WAAW,QAAQzF,CAAG,EACvC,GAAIssC,GAAQA,EAAK,OAAS,OAAQ,OAAqByzE,EAAkB,cAAc,SAAU,CAC7F,IAAKzzE,EAAK,IACV,MAAOA,EAAK,GAChB,EAAGA,EAAK,SAAS,CACrB,CAAC,EAAG7mC,EAAM,WAAW,OAAS,GAAKhE,GAAQitB,EAAO,KAAK,EAAO,IAAkBqxF,EAAkB,cAAc,SAAU,CAClH,IAAKp3G,EACL,MAAO1I,GAAS,EACpB,CAAC,CAAC,CAAC,CAAC,CAAC,EACJ,GAAIwB,EAAM,CAEX,GAAI,CAAsB,sBADXq1b,GAA2C,IAAIrxb,CAAK,GAAK,CAAC,EAGrEipB,EAAO,SAAW,IAAG,EAAS,CAC9B,IACJ,GACA,IAAIkG,EAAMlG,EAAO,KAAK,EAAO,IAAI,CAC7B,IAAI+oW,EAAa,CACb,KAAM,SACN,aAAc8/D,EAAY,aACpB,OACA,OACN,SAAU10O,EACV,MAAO5iN,GAAS,EACpB,EAeA,OAdIglZ,IAAuB,SAENllS,EAAkB,cAAc,QAAS,CAC1D,IAAKp3G,EACL,GAAG8uX,EACH,IAAK9uX,IAAM,EAAIqtX,EAAW,KAC1B,MAAO,CACH,QAAS,MACb,EACA,KAAM,OACN,SAAUrtX,IAAM,GAAI4ub,EAAY,SAChC,aAAc,CACe,CACjC,CAAC,EACoBx3U,EAAkB,cAAc,QAAS,CAC1D,IAAKp3G,EACL,GAAG8uX,EACH,IAAK9uX,IAAM,EAAIqtX,EAAW,IAC9B,CAAC,CACL,CAAC,EACD,OAAqBj2Q,EAAkB,cAAAA,EAAgC,SAAU,KAAMnrF,CAAG,CAC9F,CACA,OAAO,IACX,CCxIA,SAAS4ia,IAA0C,EAAO,CACtD,GAAI,CAAiB,gBAAgB,SAA+B,sBAAsBC,IAAkB,UAAatrb,EACrH4ua,EAAmB9J,GAA2C9ka,CAAK,EACnE,CAACmqa,EAAe8B,IAAA,EAAwBsf,YAAiB,IAAI,EAC7D54U,GAAA,EAAmB64U,eACZxrb,EAAM,eAAiB,OAAiCsrb,IAAkB,SAAWtrb,EAAM,oBAAsB,KAAO,CAAC,EAAtFA,EAAM,aACjD,CACCA,EAAM,aACNA,EAAM,mBACNsrb,CACJ,CAAC,EAQG,CAACG,EAAiBC,GAA0BjgE,IAP5C,EAAY+/D,eACLxrb,EAAM,QAAU,OAA0Bsrb,IAAkB,SAAWtrb,EAAM,YAAc,OAA/DA,EAAM,MAC1C,CACCA,EAAM,MACNA,EAAM,YACNsrb,CACJ,CAC2F,EAAO34U,EAAc3yG,EAAM,QAAQ,EAE1Hy7a,EAAe6P,IAAkB,UAAY,MAAM,QAAQG,CAAe,EAAIA,EAAgB,GAAKA,EACnGj1E,EAAY,GAAQ,CACpB,GAAI80E,IAAkB,SAAU,CAC5B,IAAIz3b,EAAM,MAAM,QAAQC,CAAK,EAAIA,EAAM,IAAM,KAAOA,EACpD43b,EAAmB73b,CAAG,EAClBA,IAAQ4nb,GAAcz7a,EAAM,oBAAoBnM,CAAG,CAC3D,KAAO,CACH,IAAIyE,EAAO,CAAC,EACR,MAAM,QAAQxE,CAAK,EAAG,EAAOA,EACxBA,GAAS,OAAM,EAAO,CAC3BA,CACJ,GACA43b,EAAmBpzb,CAAI,CAC3B,CACJ,EAEIqzb,EAAgBz6B,GAA2C,CAC3D,GAAGlxZ,EACY,gBACf,uBAAwBsrb,IAAkB,SAC1C,8BAA+B,GAC/B,gBAAkBE,eAAoBI,IAAmCnQ,CAAY,EAAG,CACpFA,CACJ,CAAC,EACD,kBAAoB,GAAO,CAEvB,GAAInjb,IAAS,MACb,IAAIgzb,IAAkB,SAAU,CAC5B,IAAIz3b,EAAMyE,EAAK,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,OAAS,KACxCk+W,EAAS3iX,CAAG,CAChB,MAAO2iX,EAAS,CACZ,GAAGl+W,CACP,CAAC,EACGsza,GAAqBgD,EAAa,MAAM,EAC5Cz3B,EAAgB,iBAAiB,CAFhC,CAGL,CACJ,CAAC,EACG00C,EAAcF,EAAU,iBAAiB,iBACzCG,GAAA,EAAoBN,eACb,CACH,GAAGG,EAAU,iBAAiB,YAClC,CAAC,CAAC,IAAK,GAAMA,EAAU,WAAW,QAAQ93b,CAAG,CAAC,CAAC,CAAC,OAAQ,GAAOssC,GAAQ,IAAI,EAC5E,CACCwrZ,EAAU,iBAAiB,aAC3BA,EAAU,UACd,CAAC,EACGx0C,EAAsBH,GAA2C,CACjE,GAAGh3Y,EACH,MAAO,MAAM,QAAQy7a,CAAY,GAAKA,EAAa,SAAW,EAAI,KAAOA,CAC7E,CAAC,EACG,CAACh/C,EAAWC,IAAA,EAAkB6uD,YAAiB,EAAK,EACpD,CAACn4U,IAAA,EAAoBm4U,YAAiB9P,CAAY,EACtD,MAAO,CACH,GAAGtkC,EACH,GAAGw0C,EACH,GAAG/c,EACH,MAAO6M,EACP,aAAc9oU,GAAgBS,EACpB,WACG,cACb,eAAgBojQ,EAChB,aAAcs1E,EAAc,IAAM,KACnB,gBACf,mBAAoB9rb,EAAM,qBAAuBA,EAAM,gBAAkB,SAAWozG,EAAe,MACpF,gBACf,KAAM,EAAgB,KAAM,EAEpBu4U,EAAU,WAAW,OAAS,GAAK3rb,EAAM,yBACzCisa,EAAiB9B,CAAa,EAC9ByE,EAAa,KAAK,EAE1B,EACA,OAAQ,EAAgB,KAAM,EACtB+c,EAAU,WAAW,OAAS,GAAK3rb,EAAM,yBACzCisa,EAAiB9B,CAAa,EAC9ByE,EAAa,OAAO,EAE5B,EACW,YACC,YAChB,CACJ,CACA,SAASgd,IAAmC,EAAO,CAC/C,GAAI93b,IAAU,OAEd,OADIA,IAAU,KAAa,CAAC,EACrB,MAAM,QAAQA,CAAK,EAAIA,EAAQ,CAClCA,CACJ,CACJ,CC3GA,SAAS80X,IAAuB,EAAG,CACjC,OAAO5uW,GAAKA,EAAE,WAAaA,EAAE,QAAUA,CACzC,CA+BA,IAAM+xa,IAA0D,EAAIC,iBAAsB,IAAI,EACxFC,KAA0D,EAAID,iBAAsB,IAAI,EACxFE,GAA8DC,GAAgC,SAAgB,EAAO,EAAK,CAC5H,CAACnsb,EAAOuuB,GAAWwrV,GAA2C/5W,EAAOuuB,EAAKw9Z,EAAyC,EACnH,GAAI,CAAY,WAAsB,aAAa,GAAkB,YAAY,GAAmB,aAAa,IAAU/rb,EACvHc,GAAA,EAAcsrb,eAAoB,OAAOl7U,GAAa,WAAaA,EAAS,CACxE,OAAQ,GACI,aACD,YACC,aACZ,UAAW,GACX,eAAgB,GAChB,gBAAiB,IACrB,CAAC,EAAIA,EAAU,CACfA,EACAwlG,EACA2gM,EACAgF,CACJ,CAAC,EACD,OAAqBzoS,EAAkB,cAAkBy4U,GAA2B,CACvE,SACb,EAAI,GAA2Bz4U,EAAkB,cAAc04U,IAAmC,CACnF,QACK,aACZ,UAAW/9Z,CACf,CAAC,CAAC,CACV,CAAC,EAEKg+Z,IAAuC,CACrCnuD,GACAmE,GACAwB,EACR,EACA,SAASuoD,IAAkC,CAAS,QAAO,UAAW/9Z,EAAiB,cAAc,CACjG,GAAI,CAAE,mBAAoBmvZ,GAA+B/jE,GAA+Co/B,EAA0C,GAAK,CAAC,EACpJD,EAAqB94Y,EAAM,oBAAsB09a,GAA0B,SAC3Epkb,EAAYkzb,IAAuB,CACnC,GAAGxsb,EACS,aACZ,SAAU,OACU,oBACxB,CAAC,EACG,CAAkB,iBAA4B,cAAmBysb,GAAqB,CACtF,OAAQ,EACZ,CAAC,EAEG/b,GAAA,EAAgBgc,UAAe,IAAI,EACnC,CAAC1O,EAAU53Q,GAAaq0M,GAA2C,CAACz6W,EAAM,eAAiB,CAACA,EAAM,kBAAkB,EACpH,CAAc,aAA0B,eAA0B,aAAuB,YAA6B,mBAAqC,oBAAsC,oBAAmB,GAAG28a,GAAmBgQ,IAAkB,CAC5P,GAAO5xE,GAA2C/6W,CAAK,EAChD,QACa,oBACxB,EAAG1G,EAAOo3a,CAAS,EAEfkc,GAAA,EAAuBR,gBAAqB,CACxC,OAAQ9yb,EAAM,OACd,UAAWA,EAAM,UACD,iBAChB,WAAY0G,EAAM,YAAc,GAChC,UAAW28a,EAAW,WAAa,GACnC,WAAY38a,EAAM,YAAc,EACpC,GAAI,CACJ1G,EAAM,OACNA,EAAM,UACN0jY,EACAh9X,EAAM,WACN28a,EAAW,UACX38a,EAAM,UACV,CAAC,EACGw6W,EAAkBpB,GAAyC,CAC3D,GAAGp5W,EACH,OAAQ4sb,EACR,iBAAkB,mBACtB,CAAC,EACGrpD,EAAespD,GAAuB7sb,EAAO,CAC7C,OAAQ,EACZ,CAAC,EACD,OAAOujY,EAAS,GAChB,IAAI4kB,GAAA,EAAgBukC,UAAe,IAAI,EACvC,OAAqB94U,EAAkB,cAAkBulQ,GAA4C,CACjG,OAAQ,CACJ,CACI4yE,GACA/rb,CACJ,EACA,CACIisb,IACA3yb,CACJ,EACA,CACIwzb,IACAC,CACJ,EACA,CACQ3uD,GACJ,CACI,GAAGI,EACH,IAAKw/C,EACL,YAAa,MACjB,CACJ,EACA,CACQz7C,GACJ,CACI,GAAG+nC,EACH,IAAKoG,EACL,UAAWp3a,EAAM,OACjB,UAAW0G,EAAM,SACrB,CACJ,EACA,CACQ6ma,GACJvta,CACJ,EACA,CACQgta,GACJ,CACI,QAAS,SACT,WAAYoK,EACD,YACX,UAAW,eACX,kBAAmB7C,EAAU,mBAC7B,cAAe0e,GACnB,CACJ,EACA,CACQp6B,GACJ,CACI,GAAG0b,EACH,IAAK1lB,CACT,CACJ,EACA,CACQkK,GACJ/4Z,CACJ,EACA,CACQyqY,GACJ,CACI,MAAO,CACH,YAAakyB,EACb,aAAckoB,CAClB,CACJ,CACJ,EACA,CACQ3nC,GACJmmC,CACJ,CACJ,CACJ,EAAiB/oU,EAAkB,cAAkB2nQ,GAA2C,IAAK,CACjG,GAAOyxE,GAAmBzpD,EAAU/oB,EAAasY,CAAU,EACtD,MACL,KAAM9yX,EAAM,MAAQ,OACpB,eAAgB1G,EAAM,WAAa,OACnC,qBAAsB0jY,GAAkB,OACxC,YAAa1jY,EAAM,QAAU,OAC7B,gBAAiB0G,EAAM,YAAc,OACrC,eAAgB28a,EAAW,WAAa,OACxC,gBAAiB38a,EAAM,YAAc,MACzC,EAAGw6W,EAAY,SAAwB5mQ,EAAkB,cAAkBq5U,IAAsB,CAC7F,GAAGC,EACH,aAAcltb,EAAM,YACxB,CAAC,CAAC,CAAC,CACP,CACA,IAAM8sb,KAA0D,EAAId,iBAAsB,IAAI,EACxFmB,IAA8DhB,GAAgC,SAAqB,EAAO,EAAK,CACjI,CAACnsb,EAAOuuB,GAAWwrV,GAA2C/5W,EAAOuuB,EAAKu+Z,GAAyC,EACnH,IAAIxzb,GAAA,EAAY8zb,cAAmBnB,GAAyC,EACxE,CAAe,eAAoBtyE,GAA2CoyE,EAAyC,EACvH78D,EAAW51X,EAAM,cAAc,IAAK,GAAO,CAC3C,IAAI41X,EAAW/uV,EAAK,OAAO,SAe3B,OAbI,OAAO+uV,GAAa,aAEpB,EAAWj/X,EAAG,CACV,UAAW,GACX,UAAW,GACX,WAAY,GACZ,UAAW,GACX,eAAgB,GAChB,WAAY,GACZ,cAAe,SACf,kBAAmB,QACvB,CAAC,GAEEi/X,CACX,CAAC,EACGrjN,EAAgBwhR,IAAyB,EACzCl+D,GAAA,EAAgBi9D,eAAoB9yb,EAAM,cAAc,IAAK,GAAO6mC,GAAM,SAAS,EAAG,CACtF7mC,EAAM,aACV,CAAC,EACGgyb,EAAgBhyb,EAAM,iBAAiB,cACvCg0b,GAAA,EAAmBlB,eAAoBd,IAAkB,SAAWn8D,EAAU,IAAM,GAAKtjN,EAAU,OAAOsjN,CAAS,EAAG,CACtHm8D,EACAz/Q,EACAsjN,CACJ,CAAC,EACG1V,GAAA,EAAsB2yE,eAAoB,CAC1C,GAAId,IAAkB,SAAU,OAAOp8D,EAAS,GAChD,IAAIjvV,EAAQ4rI,EAAU,cAAcsjN,CAAS,EAC7C,GAAIlvV,EAAM,SAAW,EAAG,OAAO,KAC/B,IAAI3kC,EAAQ,EACZ,OAAO2kC,EAAM,IAAK,GACV4zC,EAAK,OAAS,UAAgC+/B,EAAkB,cAAkB25U,WAAkB,CACpG,IAAKjyb,CACT,EAAG4zX,EAAS,IAAQ,EACRr7S,EAAK,KACpB,CACL,EAAG,CACCy3W,EACAz/Q,EACAsjN,EACAD,CACJ,CAAC,EACG6tB,EAAsBywC,GAAyC5kE,IAAuB6kE,GAAqB,EAAK,uBAAuB,EACvIjzE,EAAkBpB,GAAyC,CAC3D,GAAGp5W,EACH,gBAAiBy5W,GAAmB+gE,GAAez9B,EAAgB,OAAO,mBAAmB,EAC7F,iBAAkB,yBAClB,OAAQ,CACJ,aAAczjZ,EAAM,cAAc,EAAE,EAAE,OAAS,KAC/C,iBAAmB8yb,eAAoB9yb,EAAM,cAAc,IAAK,GAAO6mC,EAAK,OAAS,IAAI,EAAG,CACxF7mC,EAAM,aACV,CAAC,EACa,eACd,cAAeA,EAAM,cAAc,SAAW,EACvC,OACX,CACJ,CAAC,EACGiqY,EAAespD,GAAuB7sb,EAAO,CAC7C,OAAQ,EACZ,CAAC,EACD,OAAqB4zG,EAAkB,cAAkB2nQ,GAA2C,KAAM,CACjG,MACL,GAAGgoB,EACH,GAAG/oB,EACH,mBAAoBlhX,EAAM,cAAc,SAAW,GAAK,MAC5D,EAAiBs6G,EAAkB,cAAkBmwR,GAA2C,SAAU,CACtG,MAAO,MACX,EAAGvpB,EAAY,QAAQ,CAAC,CAC5B,CAAC,EC9RSkzE,IAA4C,IAAI,QAC1D,SAASC,GAA0C,EAAO,EAAK,EAAM,CAMjE,OALKr0b,GAED,OAAOzF,GAAQ,WAAU,EAAMA,EAAI,QAAQ,OAAQ,EAAE,GAGlD,GAFM65b,IAA0C,IAAIp0b,CAE5C,EAAE,GAAGsiY,EAAK,GAAG/nY,KAJrB,EAKX,CCKA,SAAS+5b,IAA0C,EAAO,EAAO,EAAK,CAClE,GAAI,CAAO,MAAK,WAAYC,EAAsC,yBAA0B7tb,EACxF,CAAE,iBAAkBysF,EAAsB,eAAgBnzF,EAC1DohZ,EAAa7mZ,IAAQg4b,EACrBn1O,EAAam3O,GAAiBv0b,EAAM,YAAcA,EAAM,iBAAiB,WAAWzF,CAAG,EACvFssC,EAAO7mC,EAAM,WAAW,QAAQzF,CAAG,EACnC,CAAa,YAAsB,aAAkB03Z,GAA2C,CAChG,iBAAkB9+T,EACb,MACA,MACO,aAIZ,sBAAuBigU,GAAyBvsX,GAAM,MAAM,MAAQ,KACpE,aAAc,WAClB,CAAC,EACG2tZ,EAAYH,GAA2Cr0b,EAAOzF,EAAK,KAAK,EACxEk6b,EAAiBJ,GAA2Cr0b,EAAOzF,EAAK,UAAU,EAClF,CAAY,YAAamzZ,EACzB3rC,EAAekc,GAA2Cp3V,GAAM,MAAO,CACvE,UAAW,EACf,CAAC,EACD,OAAOk7U,EAAS,GAChB,IAAI8F,EAAgBD,GAA2C/gV,GAAM,KAAK,EACtE,CAAkB,kBAAuByyV,GAA2C,CACpF,GAAGzyV,GAAM,MACG,YAChB,EAAG5R,CAAG,EACN,MAAO,CACH,SAAckqV,GAA2C4C,EAAUia,EAAgBnU,EAAW6lC,EAAW,CACrG,GAAI8mC,EACJ,gBAAiBpzC,EACjB,gBAAiBhkM,GAAc,OAC/B,gBAAiBgkM,EAAaqzC,EAAa,OAC3C,SAAUr3O,EAAa,OAAY4d,EACnC,KAAM,KACV,CAAC,EACW,aACA,aACD,WACf,CACJ,CC9CA,SAAS05N,IAA0C,EAAO,EAAO,EAAK,CAIlE,IAAI15N,EAAeotN,IAA2CnzZ,CAAG,EAAI,OAAY,EAC3E95B,EAASk5b,GAA2Cr0b,EAAO0G,EAAM,IAAM1G,GAAO,YAAa,UAAU,EAM3G,MAAO,CACH,cAAmBm/W,GANGmN,GAA2C,CACjE,GAAG5lX,EACC,KACJ,kBAAuB2tb,GAA2Cr0b,EAAOA,GAAO,YAAa,KAAK,CACtG,CAEkE,EAAe,CAC/D,WACV,KAAM,WACN,mBAAoB0G,EAAM,oBAC1B,eAAgBA,EAAM,eAC1B,CAAC,CACL,CACJ,CC5BI,IAAMiub,IAAN,KAAgD,CAChD,YAAY,EAAY,EAAW,EAAa,EAAe,IAAI,IAAM,CACrE,KAAK,WAAa1hU,EAGlB,KAAK,cAAgBypM,IAAc,MACnC,KAAK,aAAew0F,EACpB,KAAK,aAAeC,IAAgB,YACxC,CACA,aAAa,EAAK,CAEd,OADI,KAAK,cAAsB,KAAK,WAAW52Z,CAAG,EAC3C,KAAK,eAAeA,CAAG,CAClC,CACA,cAAc,EAAK,CAEf,OADI,KAAK,cAAsB,KAAK,eAAeA,CAAG,EAC/C,KAAK,WAAWA,CAAG,CAC9B,CACA,WAAW,EAAK,CACZ,OAAO,KAAK,aAAa,IAAIA,CAAG,GAAK,CAAC,CAAC,KAAK,WAAW,QAAQA,CAAG,CAAC,EAAE,OAAO,UAChF,CACA,aAAc,CACV,IAAIA,EAAM,KAAK,WAAW,YAAY,EAEtC,OADIA,GAAO,MAAQ,KAAK,WAAWA,CAAG,IAAG,EAAM,KAAK,WAAWA,CAAG,GAC3DA,CACX,CACA,YAAa,CACT,IAAIA,EAAM,KAAK,WAAW,WAAW,EAErC,OADIA,GAAO,MAAQ,KAAK,WAAWA,CAAG,IAAG,EAAM,KAAK,eAAeA,CAAG,GAC/DA,CACX,CACA,YAAY,EAAK,CAEb,OADI,KAAK,aAAqB,KACvB,KAAK,eAAeA,CAAG,CAClC,CACA,YAAY,EAAK,CAEb,OADI,KAAK,aAAqB,KACvB,KAAK,WAAWA,CAAG,CAC9B,CACA,WAAW,EAAU,CACjB,IAAIA,EAAMq6b,EACV,EACI,GAAM,KAAK,WAAW,YAAYr6b,CAAG,EACrC,CAAiBA,GAAM,KAAK,WAAW,YAAY,QAC/CA,GAAO,MAAQ,KAAK,WAAWA,CAAG,GAAKA,IAAQq6b,GACvD,OAAOr6b,CACX,CACA,eAAe,EAAU,CACrB,IAAIA,EAAMq6b,EACV,EACI,GAAM,KAAK,WAAW,aAAar6b,CAAG,EACtC,CAAiBA,GAAM,KAAK,WAAW,WAAW,QAC9CA,GAAO,MAAQ,KAAK,WAAWA,CAAG,GAAKA,IAAQq6b,GACvD,OAAOr6b,CACX,CACJ,ECrCA,SAASs6b,IAA0C,EAAO,EAAO,EAAK,CAClE,GAAI,CAAe,cAAc,aAAkC,qBAAqB,aAAgBnub,EACpG,CAAc,aAAY,iBAAkBysF,EAAuB,gBAAiBnzF,EACpF,CAAa,aAAkB4tX,GAA2C,EAO1E,CAAmB,mBAAwBu/B,IAA2C,CACjF,MACL,iBAAkBh6T,EAClB,kBATA,EAAe2hW,eAAoB,IAAQH,IAA2C1hU,EAAYypM,EAAWy0F,EAAaD,CAAY,EAAG,CACzIj+R,EACAi+R,EACAC,EACAz0F,CACJ,CAIsB,EAClB,cAAeq4H,IAAuB,YACtC,uBAAwB,GACxB,UAAW9/Z,EACX,aAAc,WAClB,CAAC,EAEG+/Z,EAAan3E,GAA2C,EAM5D,OALAu2E,IAA+C,IAAIp0b,EAAOg1b,CAAM,EAKzD,CACH,aAAc,CACV,GAAO71E,GAA2CuS,EAN9BpF,GAA2C,CACnE,GAAG5lX,EACH,GAAIsub,CACR,CAG2E,CAAiB,EACpF,KAAM,UACN,mBAAoB7jC,EACpB,SAAU,MACd,CACJ,CACJ,CC5CA,SAAS8jC,IAA0C,EAAO,CACtD,GAAI,CAAC1C,EAAa2C,GAAsB/iE,GAA2CzrX,EAAM,YAAaA,EAAM,oBAAsB,KAAMA,EAAM,iBAAiB,EAC3J0oZ,GAAA,EAAmB+lC,eAAoB5C,GAAe,KAElD,CAAC,EAFwD,CACzDA,CACJ,EAAQ,CACRA,CACJ,CAAC,EACG,CAAc,aAA0B,eAAgC,oBAAyB36B,GAA2C,CAC5I,GAAGlxZ,EACH,cAAe,SACf,uBAAwB,GACxB,8BAA+B,GACjB,eACd,kBAAoB,GAAO,CAEvB,GAAI1H,IAAS,MAAO,OACpB,IAAIzE,EAAMyE,EAAK,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,OAAS,KAGpCzE,IAAQg4b,GAAe7rb,EAAM,mBAAmBA,EAAM,kBAAkBnM,CAAG,EAC/E26b,EAAe36b,CAAG,CACtB,CACJ,CAAC,EAED,MAAO,CACS,aACE,eACI,mBACL,cACG,iBAChB,aAPeg4b,GAAe,KAAyC,KAAlCt/T,EAAW,QAAQs/T,CAAW,CAQvE,CACJ,CClCA,SAAS6C,IAAwC,EAAO,CACpD,IAAIp1b,EAAYi1b,IAA2C,CACvD,GAAGvub,EACH,kBAAmBA,EAAM,kBAAqB,GAAM,CAC5CnM,GAAO,MAAMmM,EAAM,oBAAoBnM,CAAG,CAClD,EAAI,OACJ,yBAA0B,GAC1B,mBAAoBmM,EAAM,oBAAsB2ub,IAA6C3ub,EAAM,WAAYA,EAAM,aAAe,IAAI,IAAIA,EAAM,YAAY,EAAI,IAAI,GAAK,GAAK,MACpL,CAAC,EACG,CAAoB,mBAA8B,aAAY,YAAa4ub,GAAuBt1b,EAClGu1b,GAAA,EAAsBC,UAAeF,CAAkB,EAe3D,OAdA,EAAIG,iBAAsB,CAEtB,IAAIlD,EAAc+C,EACd5ub,EAAM,aAAe,OAAS8/Y,EAAiB,SAAW+rC,GAAe,MAAQ,CAACt/T,EAAW,QAAQs/T,CAAW,KAChH,EAAc8C,IAA6CpiU,EAAYjzH,EAAM,YAAY,EACrFuyb,GAAe,MACnB/rC,EAAiB,gBAAgB,CAC7B+rC,CACJ,CAAC,IAGDA,GAAe,MAAQ/rC,EAAiB,YAAc,MAAQ,CAACA,EAAiB,WAAa+rC,IAAgBgD,EAAgB,UAAS/uC,EAAiB,cAAc+rC,CAAW,EACpL,EAAgB,QAAUA,CAC9B,CAAC,EACM,CACH,GAAGvyb,EACH,WAAY0G,EAAM,YAAc,EACpC,CACJ,CACA,SAAS2ub,IAA6C,EAAY,EAAc,CAC5E,IAAI9C,EAAc,KAClB,GAAIt/T,EAAY,CAGZ,IAFA,EAAcA,EAAW,YAAY,EAE/Bs/T,GAAe,OAASrhC,EAAa,IAAIqhC,CAAW,GAAKt/T,EAAW,QAAQs/T,CAAW,CAAC,EAAE,OAAO,aAAeA,IAAgBt/T,EAAW,WAAW,GAAE,EAAcA,EAAW,YAAYs/T,CAAW,EAE1MA,GAAe,OAASrhC,EAAa,IAAIqhC,CAAW,GAAKt/T,EAAW,QAAQs/T,CAAW,CAAC,EAAE,OAAO,aAAeA,IAAgBt/T,EAAW,WAAW,IAAG,EAAcA,EAAW,YAAY,EACtM,CACA,OAAOs/T,CACX,CCNA,IAAMmD,IAA0D,EAAIC,iBAAsB,IAAI,EACxFC,IAA0D,EAAID,iBAAsB,IAAI,EACxFE,KAA0D,EAAIC,cAAmB,SAAc,EAAO,EAAK,CAC7G,CAACpvb,EAAOuuB,GAAWwrV,GAA2C/5W,EAAOuuB,EAAKyga,EAAyC,EACnH,GAAI,CAAY,WAAuB,cAAc,cAAiBhvb,EAQtE,MAPA,MAAeqvb,eAAoB,OAAOn+U,GAAa,WAAaA,EAAS,CACxD,cACb,gBAAiB,IACrB,CAAC,EAAIA,EAAU,CACfA,EACAu5S,CACJ,CAAC,EACoB72S,EAAkB,cAAkB07U,GAA2B,CAChF,QAASp+U,CACb,EAAI,GAA2B0C,EAAkB,cAAc27U,IAAiC,CACjF,QACK,aACZ,QAAShha,CACb,CAAC,CAAC,CACV,CAAC,EACD,SAASgha,IAAgC,CAAS,QAAO,QAAShha,EAAiB,cAAc,CAC7F,GAAI,CAAe,cAAc,cAAiBvuB,EAC9C1G,EAAYk2b,IAAwB,CACpC,GAAGxvb,EACS,aACZ,SAAU,MACd,CAAC,EACG,CAAc,aAAuB,YAA2B,kBAAuByvb,GAAqB,CAC5G,OAAQ,EACZ,CAAC,EACGlta,GAAA,EAAa8sa,gBAAqB,CACjB,cACb,cAAe5yD,EACC,gBACpB,GAAI,CACJguB,EACAhuB,EACAO,CACJ,CAAC,EACGxiB,EAAkBpB,GAAyC,CAC3D,GAAGp5W,EACH,iBAAkB,kBACV,QACZ,CAAC,EACGujY,EAAemsD,GAAuB1vb,EAAO,CAC7C,OAAQ,EACZ,CAAC,EACD,OAAqB4zG,EAAkB,cAAkB2nQ,GAA2C,IAAK,CACrG,GAAOo0E,GAAmBpsD,EAAU/oB,EAAasY,CAAU,EACtD,MACL,KAAM9yX,EAAM,MAAQ,OACpB,eAAgBy8X,GAAa,OAC7B,mBAAoBguB,EACpB,qBAAsBztB,GAAkB,OACxC,gBAAiB1jY,EAAM,YAAc,MACzC,EAAiBs6G,EAAkB,cAAkBulQ,GAA4C,CAC7F,OAAQ,CACJ,CACI61E,GACAhvb,CACJ,EACA,CACIkvb,GACA51b,CACJ,CACJ,CACJ,EAAGkhX,EAAY,QAAQ,CAAC,CAC5B,CACA,IAAMo1E,KAA0D,EAAIR,cAAmB,SAAiB,EAAO,EAAK,CAEhH,SADgBS,cAAmBX,EACxB,EAAkBt7U,EAAkB,cAAck8U,IAAoC,CACtF,QACP,aAAcvha,CAClB,CAAC,EAAkBqlF,EAAkB,cAAkBm8U,GAAoB/vb,CAAK,CACpF,CAAC,EACD,SAAS8vb,IAAmC,CAAS,QAAO,aAAcvha,GAAO,CAC7E,IAAIj1B,GAAA,EAAYu2b,cAAmBX,EAAyC,EACxE,CAAkB,qBAAuBW,cAAuBh5D,EAA0C,EAC1G,CAAe,cAAc,aAAkC,qBAAqB,aAAoBld,GAA2Cq1E,EAAyC,EAC5LrK,EAAgBqL,GAAqBzha,CAAG,EACxC,CAAgB,gBAAqB0ha,IAAmB,CACxD,GAAGjwb,EACU,cACO,oBACxB,EAAG1G,EAAOqrb,CAAS,EACfnqE,EAAkBpB,GAAyC,CAC3D,GAAGp5W,EACH,SAAU,KACV,iBAAkB,qBAClB,OAAQ,CACS,cACN,OACX,CACJ,CAAC,EACGujY,EAAemsD,GAAuB1vb,EAAO,CAC7C,OAAQ,EACZ,CAAC,EAED,OADA,OAAOujY,EAAS,GACK3vR,EAAkB,cAAkB2nQ,GAA2C,IAAK,CACrG,GAAOo0E,GAAmBpsD,EAAU/oB,EAAa01E,CAAY,EAC7D,IAAKvL,EACL,mBAAoBl6B,GAAe,MACvC,EAAiB72S,EAAkB,cAAkB8sS,GAA4C,KAAoB9sS,EAAkB,cAAc8gT,EAAgB,CACjK,WAAYp7Z,EAAM,WAClB,cAAmBw9X,IAA2Cx9X,EAAM,iBAAiB,UAAU,CACnG,CAAC,CAAC,CAAC,CACP,CAMA,IAAM62b,IAA8DC,GAA4B,cAL5CC,EAAuB,CACvE,OACI,KAAK,KAAO,MAChB,CACJ,GACoI,EAAO,EAAc,IAAO,CAC5J,IAAI/2b,GAAA,EAAYu2b,cAAmBX,EAAyC,EACxE3ga,EAAUyha,GAAqB70E,CAAY,EAC3C,CAAY,WAAsB,aAAwB,aAAuB,aAAkBm1E,IAAe,CAClH,IAAKnwZ,EAAK,IACV,GAAGngC,CACP,EAAG1G,EAAOi1B,CAAG,EACT,CAAc,aAAuB,YAA2B,kBAAuBkha,GAAqB,EAC5G,CAAc,aAAuB,aAAkBc,GAAiB,CAC5D,aACZ,aAAcvwb,EAAM,aACpB,WAAYA,EAAM,WAClB,cAAeA,EAAM,aACzB,CAAC,EACGw6W,EAAkBpB,GAAyC,CAC3D,GAAGp5W,EACH,GAAI,OACJ,SAAUmgC,EAAK,SACf,iBAAkB,iBAClB,OAAQ,CACQ,aACA,aACD,YACK,iBACL,YACA,WACf,CACJ,CAAC,EACGi7U,EAAcj7U,EAAK,MAAM,KAAWo7U,GAA2C,EAAQA,GAA2C,IAClIgoB,EAAemsD,GAAuB1vb,EAAO,CAC7C,OAAQ,EACZ,CAAC,EAGD,OAFA,OAAOujY,EAAS,GAChB,OAAOA,EAAS,QACK3vR,EAAkB,cAAcwnQ,EAAa,CAC9D,GAAOu0E,GAAmBpsD,EAAU/oB,EAAag2E,EAAU19D,EAAYqL,CAAU,EAC5E,MACL,gBAAiBuc,GAAc,OAC/B,gBAAiBhkM,GAAc,OAC/B,eAAgB+lL,GAAa,OAC7B,qBAAsBO,GAAkB,OACxC,eAAgBxD,GAAa,OAC7B,eAAgBgE,GAAa,MACjC,EAAiB5pR,EAAkB,cAAkBgtS,GAA2C,SAAU,CACtG,MAAO,CACS,YAChB,CACJ,EAAGpmC,EAAY,QAAQ,CAAC,CAC5B,CAAC,EAwDKi2E,IAA8DC,GAAgC,SAAkB,EAAO,EAAc,CACvI,IAAMp3b,GAAA,EAAYu2b,cAAmBX,EAAyC,EAC1E3ga,EAAUyha,GAAqB70E,CAAY,EAG3Cu/B,EAAaphZ,EAAM,cAAgB0G,EAAM,GACzC,CAAC2wb,EAAqBC,IAAA,EAA4BC,YAAiBv3b,EAAM,aAAe,KAAoB,KAAbohZ,CAAiB,EAChHi2C,GAAuB,MAAQr3b,EAAM,aAAe,KAAMs3b,EAAqBl2C,CAAU,EACpF,CAACA,GAAci2C,GAAqBC,EAAqB,EAAK,EACvE,IAAIjsB,EAAgBmsB,GAAyBvia,EAAKmsX,CAAU,EAE5D,MADI,CAACA,GAAc,CAAC16Y,EAAM,kBAAoB,CAAC2ka,EAAkB,KAC5C/wT,EAAkB,cAAcm9U,IAAqC,CACtF,GAAG/wb,EACH,YAAauuB,EACb,oBAAqBoia,GAAuB,GACjC,WACf,CAAC,CACL,CAAC,EACD,SAASI,IAAoC,EAAO,CAChD,IAAIz3b,GAAA,EAAYu2b,cAAmBX,EAAyC,EAExE,CAAM,KAAI,YAAa3ga,EAA0B,sBAAgC,YAAW,GAAGu+M,GAAe9sO,EAC9G,CAAiB,iBAAsBgxb,IAAoBhxb,EAAO1G,EAAOi1B,CAAG,EAC5E,CAAc,aAAuB,YAA2B,kBAAuBkha,GAAqB,EAC5G/0C,EAAaphZ,EAAM,cAAgB0G,EAAM,GACzCola,EAAiB6rB,GAA0B1ia,CAAG,GAAK,CAACoia,EACpDn2E,EAAkBpB,GAAyC,CAC3D,GAAGp5W,EACH,iBAAkB,sBAClB,OAAQ,CACO,YACK,iBAEhB,QAAakxb,GAAmB,CAACx2C,CAAU,EAC/B,aACD,YACJ,OACX,CACJ,CAAC,EACGnX,EAAemsD,GAAuB5iN,EAAY,CAClD,OAAQ,EACZ,CAAC,EACD,OAAOy2J,EAAS,GAChB,IAAIloB,EAAWq/B,EAAiBi1C,GAAmBpsD,EAAU4tD,EAAer+D,EAAYtY,CAAW,EAAQm1E,GAAmBpsD,EAAU/oB,CAAW,EACnJ,OAAqB5mQ,EAAkB,cAAkB2nQ,GAA2C,IAAK,CACrG,GAAGF,EACE,MACL,eAAgBohB,GAAa,OAC7B,qBAAsBO,GAAkB,OAExC,MAAWk0D,GAAmB,CAACx2C,GAAc16Y,EAAM,KAAK,EACxD,aAAe06Y,EAAsB,OAAT,OAC5B,gBAAiB0qB,GAAc,OAC/B,eAAgBT,GAAa,MACjC,EAAiB/wT,EAAkB,cAAkBulQ,GAA4C,CAC7F,OAAQ,CACJ,CACI61E,GACA,IACJ,EACA,CACIE,GACA,IACJ,CACJ,CACJ,EAAiBt7U,EAAkB,cAAkBijR,GAA2C,SAAU,CACtG,MAAWX,GACf,EAAG1b,EAAY,QAAQ,CAAC,CAAC,CAC7B,CC5TA,SAAS42E,IAA0C,EAAO,EAAO,EAAK,CAClE,GAAM,CAAc,cAAe93b,EAC7B,CAAa,YAAwB,eAAoB6oY,IAA2C,CACtG,GAAGniY,EACH,QAAa+0W,GAA2Cz7W,EAAM,OAAQ0G,EAAM,OAAO,CACvF,EAAGuuB,CAAG,EACN,MAAO,CACQ,YACC,aACZ,WAAYvuB,EAAM,YAAc,GAChC,YAAiBy4W,GAA2C6pB,EAAa,CACrE,eAAgBoY,CACpB,CAAC,CACL,CACJ,CCRA,SAAS22C,IAAyC,EAAO,EAAK,CAC1D,GAAM,CAAE,aAAc76J,EAAW,kBAAmB6gJ,EAA6B,cAAc,cAAiBr3a,EAC5G,CAACsxb,EAAaC,IAAA,EAAoBC,YAAiB,EAAK,EAI5Dx8E,OAAmD,CAC/Cu8E,EAAa,CAAC,EAAEhja,EAAI,SAAWA,EAAI,QAAQ,eAAe,QAAQ,kBAAkB,EAAE,CAC1F,CAAC,EACD,GAAM,CAAa,aAAkB24V,GAA2C,EAC1EuqE,EAAgBz7H,IAAc,OAASy0F,IAAgB,aAEzDhH,EAAmB4B,GAA0C92X,CAAG,EAC9Do8V,EAAa,GAAI,CAEnB,GAASjO,GAA2C,EAAE,cAAmBG,GAA2C,CAAC,CAAC,EACtH,IAAI4tC,IAAgB,cAAgB,EAAE,MAAQ,cAAgBA,IAAgB,YAAc,EAAE,MAAQ,YAC9FgnC,EAAehuC,EAAa,cAAc,EACzCA,EAAa,UAAU,OACzB,GAAIgH,IAAgB,cAAgB,EAAE,MAAQ,aAAeA,IAAgB,YAAc,EAAE,MAAQ,UACpGgnC,EAAehuC,EAAa,UAAU,EACrCA,EAAa,cAAc,OAC7B,GAAI,EAAE,MAAQ,MAAO,CAKxB,EAAY,QAAc7mC,GAA2C,EACjE,EAAE,SAAU6mC,EAAa,WAAW,EACnCA,EAAa,UAAU,EAC5B,MACJ,MACA,OAEA,EAAE,gBAAgB,EAClB,EAAE,eAAe,CAHjB,CAIJ,EAEMiuC,GAAA,EAAkBC,UAAe,IAAI,EACrC/yE,EAAU,GAAI,CACZ,CAAKlC,GAA2C,EAAE,cAAe,EAAE,aAAa,GAAK,CAACg1E,EAAY,UAAS,EAAY,QAAc70E,GAA2C,CAAC,EACzL,EAIMyC,EAAW,GAAI,CACboyE,EAAY,SAAW,CAAKh1E,GAA2C,EAAE,cAAe,EAAE,aAAa,GAASA,GAA2CnuV,EAAI,QAAasuV,GAA2C,CAAC,CAAC,IACzN60E,EAAY,SAAS,MAAM,EAC3B,EAAY,QAAU,KAE9B,EACA,MAAO,CACH,aAAc,CACV,GAAOn6D,GAA2Cv3X,EAAO,CACrD,UAAW,EACf,CAAC,EACD,KAAOsxb,EAA0B,QAAZ,UACrB,mBAAoB7mC,EACpB,aAAcj0H,EACd,kBAAmBA,GAAa,KAAO6gJ,EAAiB,OACxD,iBAAmBia,EAA0B,OAAZ3mE,EACjC,eAAiB2mE,EAAwB,OAAVhyE,EAC/B,cAAgBgyE,EAAuB,OAAT1yE,CAClC,CACJ,CACJ,CCzEA,SAASgzE,IAA0C,EAAO,EAAO,EAAK,CAClE,GAAI,CAAc,cAAe5xb,EAC7B,CAAgB,gBAAqBqxb,IAA0Crxb,EAAOuuB,CAAG,EAC7F,MAAO,CACH,WAAY,CACR,GAAGsja,EACH,KAAMv4b,EAAM,gBAAkB,SAAW,aAAeu4b,EAAa,KACrE,gBAAiBn7O,CACrB,CACJ,CACJ,CACA,SAASo7O,IAA0C,EAAO,EAAO,EAAK,CAClE,IAAI/2C,EAAc,CACd,WAAYzhZ,EAAM,aAAa,IAAI0G,EAAM,EAAE,EAC3C,gBAAiB,GACjB,YAAa,EAAY,CACrB1G,EAAM,YAAY0G,EAAM,GAAI06Y,CAAU,CAC1C,EACA,QAAU,CACNphZ,EAAM,UAAU0G,EAAM,EAAE,CAC5B,CACJ,EACI,CAAa,YAAuB,aAAwB,aAAyB,eAAoBoxb,IAA2C,CACpJ,GAAGpxb,EACH,GAAI,OACJ,WAAYA,EAAM,YAAc1G,EAAM,UAC1C,EAAGyhZ,EAAaxsX,CAAG,EASnB,OARIj1B,EAAM,gBAAkB,WAExB,EAAY,KAAO,QAEnB,EAAY,gBAAkByhZ,EAAY,WAE1C,OAAOzY,EAAY,iBAEhB,CACQ,YACC,aACA,aACC,aACjB,CACJ,CCzCA,SAASyvD,IAA0C,EAAO,CACtD,GAAI,CAAiB,gBAAgB,SAAkC,yBAAoC,aAAa,IAAU/xb,EAC9H,CAAC0oZ,EAAcgH,GAAuBjkC,IAAA,EAA+CumE,eAAoBhyb,EAAM,aAAe,IAAI,IAAIA,EAAM,YAAY,EAAI,OAAW,CACvKA,EAAM,YACV,CAAC,KAAOgyb,eAAoBhyb,EAAM,oBAAsB,IAAI,IAAIA,EAAM,mBAAmB,EAAI,IAAI,IAAO,CACpGA,EAAM,mBACV,CAAC,EAAGA,EAAM,iBAAiB,EAC3B,MAAO,CACY,gBACH,aACE,eACG,kBACjB,UAAW,EAAK,CACZ,IAAI1H,EACAgzb,IAAkB,YAClB,EAAO,IAAI,IAAI5iC,CAAY,EACvBpwZ,EAAK,IAAIzE,CAAG,IAAM,CAAC+zZ,GAA0BtvZ,EAAK,KAAO,GAAIA,EAAK,OAAOzE,CAAG,EAC3EyE,EAAK,IAAIzE,CAAG,GACd,EAAO,IAAI,IAAI60Z,EAAa,IAAI70Z,CAAG,GAAK,CAAC+zZ,EAAyB,CAAC,EAAI,CAC1E/zZ,CACJ,CAAC,EACD67Z,EAAgBp3Z,CAAI,CACxB,EACA,YAAa,EAAK,EAAY,CACtBoiZ,IAAegO,EAAa,IAAI70Z,CAAG,GAAG,KAAK,UAAUA,CAAG,CAChE,CACJ,CACJ,CCjBA,IAAMo+b,KAA0D,EAAIC,iBAAsB,CAAC,CAAC,EACtFC,KAA0D,EAAID,iBAAsB,IAAI,EACxFE,KAA0D,EAAIC,cAAmB,SAA2B,EAAO,EAAK,CAC1H,CAACryb,EAAOuuB,GAAWwrV,GAA2C/5W,EAAOuuB,EAAK0ja,GAAyC,EACnH,IAAI34b,EAAYg5b,IAA4Btyb,CAAK,EAC7C,CAAc,cAAmBuyb,IAA6Bvyb,EAAO1G,EAAOi1B,CAAG,EAC/EisV,EAAkBpB,GAAyC,CAC3D,GAAGp5W,EACH,OAAQ,CACJ,YAAaA,EAAM,aAAe,aAClC,WAAY1G,EAAM,WACX,OACX,EACA,iBAAkB,8BACtB,CAAC,EACGiqY,EAAeivD,GAAuBxyb,EAAO,CAC7C,OAAQ,EACZ,CAAC,EACD,OAAqB4zG,EAAkB,cAAkB2nQ,GAA2C,IAAK,CACrG,GAAOk3E,GAAmBlvD,EAAU/oB,EAAaq6C,CAAU,EACtD,MACL,KAAM70Z,EAAM,MAAQ,OACpB,mBAAoBA,EAAM,aAAe,aACzC,gBAAiBA,EAAM,YAAc,MACzC,EAAiB4zG,EAAkB,cAAcu+U,IAA0C,SAAU,CACjG,MAAO74b,CACX,EAAiBs6G,EAAkB,cAAkB8sS,GAA4C,KAAMlmC,EAAY,QAAQ,CAAC,CAAC,CACjI,CAAC,ECnBKk4E,KAA0D,EAAIC,iBAAsB,CAAC,CAAC,EACtFC,KAA0D,EAAIC,cAAmB,SAAsB,EAAO,EAAK,CACrH,CAAC7yb,EAAOuuB,GAAWwrV,GAA2C/5W,EAAOuuB,EAAKmka,GAAyC,EACnH,IAAI5R,GAAA,EAAiBgS,cAAuBX,GAA0C,EAClF74b,EAAYy5b,IAAuBjS,GAAc9gb,EAAM,IAAM,KAAO,CACpE,WAAY8gb,EAAW,aAAa,IAAI9gb,EAAM,EAAE,EAChD,SAAU,EAAY,CAClB8gb,EAAW,YAAY9gb,EAAM,GAAI06Y,CAAU,CAC/C,CACJ,EAAI16Y,CAAK,EACL,CAAe,cAAwB,YAAuB,aAAwB,cAAe8gb,GAAc9gb,EAAM,IAAM,KAAWgzb,IAAiC,CAC3K,GAAGhzb,EACH,GAAIA,EAAM,EACd,EAAG8gb,EAAYvyZ,CAAG,EAAQ0ka,IAAwB,CAC9C,GAAGjzb,EACH,GAAIA,EAAM,IAAM,KAA0B,OAAnB,OAAOA,EAAM,EAAE,CAC1C,EAAG1G,EAAOi1B,CAAG,EACT,CAAc,aAAuB,YAA2B,kBAAuB2ka,GAAqBlzb,CAAK,EACjH,CAAc,aAAuB,aAAkBmzb,GAAiB,CACxE,GAAGnzb,EACS,YAChB,CAAC,EACGw6W,EAAkBpB,GAAyC,CAC3D,GAAGp5W,EACH,GAAI,OACJ,OAAQ,CACO,YACA,YACA,YACX,WAAY1G,EAAM,WACF,iBACJ,aACL,OACX,EACA,iBAAkB,yBACtB,CAAC,EACGiqY,EAAe6vD,GAAuBpzb,EAAO,CAC7C,OAAQ,EACZ,CAAC,EAGD,OAFA,OAAOujY,EAAS,GAChB,OAAOA,EAAS,QACK3vR,EAAkB,cAAkB2nQ,GAA2C,OAAQ,CACxG,GAAO83E,GAAmB9vD,EAAU/oB,EAAa8nB,EAAaxP,EAAYqL,CAAU,EAC/E,MACL,KAAMn+X,EAAM,MAAQ,OACpB,eAAgBy8X,GAAa,OAC7B,gBAAiB/lL,GAAc,OAC/B,eAAgB8iL,GAAa,OAC7B,gBAAiBkhB,GAAc,OAC/B,eAAgBld,GAAa,OAC7B,qBAAsBR,GAAkB,MAC5C,EAAiBppR,EAAkB,cAAkBgtS,GAA2C,SAAU,CACtG,MAAO,CACS,YAChB,CACJ,EAAGpmC,EAAY,QAAQ,CAAC,CAC5B,CAAC,ECtEK84E,GAA8C1/U,EAAkB,cAAc,IAAI,EACxF,SAAS2/U,IAAyC,EAAO,CACrD,GAAI,CAAY,YAAavzb,EACzB4wD,GAAA,EAAa4iY,cAAmBF,EAA6B,EAC7D,CAACG,EAAYC,IAAA,EAAqBC,YAAiB,CAAC,EACpD/ua,GAAA,EAAcgva,gBAAqB,CACvB,SACI,aACZ,UAAY,CACRF,EAAe,GAAQt5Y,EAAQ,CAAC,EAC5BwW,GAAQA,EAAO,SAAS,CAChC,EACA,aAAe,CACX8iY,EAAe,GAAQt5Y,EAAQ,CAAC,EAC5BwW,GAAQA,EAAO,YAAY,CACnC,CACJ,GAAI,CACJA,EACA6iY,CACJ,CAAC,EACD,OAAqB7/U,EAAkB,cAAc0/U,GAA8B,SAAU,CACzF,MAAO1ua,CACX,EAAGssF,CAAQ,CACf,CACA,SAAS2iV,KAA4C,CACjD,IAAIjva,GAAA,EAAc4ua,cAAmBF,EAA6B,EAClE,MAAO,CACH,mBAAoB,CAChB,cAAe1ua,GAAWA,EAAQ,WAAa,EAAI,GAAO,MAC9D,CACJ,CACJ,CAGI,SAASkva,IAA0C,EAAO,CAC1D,GAAI,CAAsB,sBAAuBD,IAA0C,EAC3F,OAAqBjgV,EAAkB,cAAc,MAAO,CACxD,yBAA0B,GAC1B,GAAG5zG,EACH,GAAG+zb,CACP,CAAC,CACL,CACA,SAASC,IAA0C,EAAO,CACtD,OAAqBpgV,EAAkB,cAAc2/U,IAA0C,KAAoB3/U,EAAkB,cAAckgV,IAA2C9zb,CAAK,CAAC,CACxM,CACA,SAASi0b,IAA0C,EAAO,CACtD,IAAIvtE,EAAY1Q,GAA2C,EACvD,CAAmB,kBAAkB0Q,EAAQ,KAAO,SAAS,KAAM,GAAGv8V,GAASnqB,EAC/E,CAAgB,gBAAqBika,GAA2C,EAOpF,GANI,CAACjka,EAAM,iBAAmBkka,IAAc,EAAkBA,EAAa,GAC3EtwT,EAAkB,cAAc,CAC5B,GAAI8wT,GAAiB,QAAQ,0BAA0B,EAAG,MAAU,MAAM,mGAAmG,CACjL,EAAG,CACCA,CACJ,CAAC,EACG,CAACA,EAAiB,OAAO,KAC7B,IAAInjE,EAAyB3tP,EAAkB,cAAcogV,IAA2C7pa,CAAI,EAC5G,OAAqB0xL,GAAqB,aAAa0lJ,EAAUmjE,CAAe,CACpF,CC5DA,SAASwvB,IAA0C,EAAO,EAAO,CAC7D,IAAI74E,EAAekc,GAA2Cv3X,EAAO,CACjE,UAAW,EACf,CAAC,EACG,CAAc,cAAmBu9X,GAA2C,CAC5E,iBAAkBjkY,GAAO,KAAK,EAAI,EAClC,eAAgBA,GAAO,MAAM,CACjC,CAAC,EACD,MAAO,CACH,aAAkBm/W,GAA2C4C,EAAU8iB,EAAY,CAC/E,KAAM,SACV,CAAC,CACL,CACJ,CCPA,SAASg2D,IAA0C,EAAO,EAAO,EAAK,CAClE,GAAI,CAAc,aAAqB,UAA6B,qBAAqB,IAASn0b,EAC9Fo0b,EAAgBj9E,GAA2C,EAC3DqmB,GAAA,EAAgB62D,UAAe,EAAK,EACpC53D,GAAA,EAAgB43D,UAAe,EAAK,EACpCC,MAAiB,EACb92D,EAAU,SAAWf,EAAU,UAASnjY,EAAM,KAAKmjY,EAAU,OAAO,CAC5E,EACI83D,EAAc,GAAY,CACtB,CAAC/2D,EAAU,SAAW,CAACf,EAAU,SAASnjY,EAAM,MAAM6pb,CAAS,CACvE,GACA,EAAIqR,iBAAsB,CACtB,IAAI7pE,EAAa,GAAI,CACbp8V,GAAOA,EAAI,SAGP,EAAE,MAAQ,WACV,EAAE,gBAAgB,EAClBj1B,EAAM,MAAM,EAAI,EAG5B,EACA,GAAIA,EAAM,OAEN,OADA,SAAS,iBAAiB,UAAWqxX,EAAW,EAAI,MACzC,CACP,SAAS,oBAAoB,UAAWA,EAAW,EAAI,CAC3D,CAER,EAAG,CACCp8V,EACAj1B,CACJ,CAAC,EACD,IAAI0kY,MAAmB,CACfosC,IAAY,UAKRrnD,GAA2C,IAAM,UAAW,EAAU,QAAU,GACnF,EAAU,QAAU,GACzBuxE,EAAW,EACf,EACIp2D,MAAiB,CACbksC,IAAY,UAEhB,EAAU,QAAU,GACpB,EAAU,QAAU,GACpBmqB,EAAW,EACf,EACIz6D,MAAmB,CAEd26D,IAEL,EAAU,QAAU,GACpB,EAAU,QAAU,GACpBF,EAAW,EAAI,EACnB,EACIj1E,MAAc,CACMwD,GACR,IACR,EAAU,QAAU,GACpBwxE,EAAW,EAEnB,EACI11E,MAAa,CACb,EAAU,QAAU,GACpB,EAAU,QAAU,GACpB21E,EAAW,EAAI,CACnB,EACI,CAAc,cAAmBh3D,GAA2C,CAChE,aACE,eACF,YAChB,CAAC,EACG,CAAkB,kBAAuB3K,GAA2C,CACxE,aACH,UACD,QACZ,EAAGrkW,CAAG,EACN,MAAO,CACH,aAAc,CACV,mBAAoBj1B,EAAM,OAAS86b,EAAY,OAE/C,GAAO37E,GAA2C6c,EAAgB6I,EAAY,CAC1E,cAAerE,EACf,UAAWA,CACf,CAAC,EACD,SAAU,MACd,EACA,aAAc,CACV,GAAIs6D,CACR,CACJ,CACJ,CCnFA,IAAMM,IAA0D,EAAIC,iBAAsB,IAAI,EACxFC,KAA0D,EAAID,iBAAsB,IAAI,EAC9F,SAASE,IAA0C,EAAO,CACtD,IAAIv7b,EAAYw7b,IAA+B90b,CAAK,EAChDuuB,GAAA,EAAUwma,UAAe,IAAI,EAC7B,CAAgB,eAA4B,gBAAqBC,IAA0Bh1b,EAAO1G,EAAOi1B,CAAG,EAChH,OAAqBqlF,EAAkB,cAAkBulQ,GAA4C,CACjG,OAAQ,CACJ,CACIu7E,GACAp7b,CACJ,EACA,CACIs7b,IACA,CACI,GAAGK,EACH,WAAY1ma,CAChB,CACJ,CACJ,CACJ,EAAiBqlF,EAAkB,cAAkBshV,IAA2B,CAC5E,GAAG5qB,EACE,KACT,EAAGtqa,EAAM,QAAQ,CAAC,CACtB,CACA,IAAMm1b,KAA0D,EAAIC,cAAmB,SAAiB,CAA4B,2BAA0B,GAAGp1b,GAAS,EAAK,CAC3K,CAACA,EAAOuuB,GAAWwrV,GAA2C/5W,EAAOuuB,EAAKqma,GAAyC,EACnH,IAAIjuB,GAAA,EAAmB0uB,cAAmBX,EAAyC,EAC/E5tB,EAAiBguB,IAA+B90b,CAAK,EACrD1G,EAAQ0G,EAAM,QAAU,MAAQA,EAAM,aAAe,MAAQ,CAAC2ma,EAAeG,EAAaH,EAG1FK,EAAoBsuB,GAAyB/ma,EAAKj1B,EAAM,MAAM,EAC9Dqra,EAAY3ka,EAAM,WAAa,CAAC1G,EAAM,qBAAuB0ta,GAAiB,GAElF,MADI,CAAC1ta,EAAM,QAAU,CAACqra,EAAkB,KACnB/wT,EAAkB,cAAkB2hV,IAA0B,CAC/E,gBAAiBvsB,CACrB,EAAiBp1T,EAAkB,cAAc4hV,IAAoC,CACjF,GAAGx1b,EACH,WAAYuuB,EACD,WACf,CAAC,CAAC,CACN,CAAC,EACD,SAASina,IAAmC,EAAO,CAC/C,IAAIl8b,GAAA,EAAY+7b,cAAmBX,EAAyC,EACxEp2B,GAAA,EAAey2B,UAAe,IAAI,EAClC,CAAgB,eAA0B,aAAuB,YAA+B,sBAA2BU,IAA2B,CACtJ,UAAWz1b,EAAM,WAAa,MAC9B,UAAWA,EAAM,WACjB,WAAYA,EAAM,WACR,WACV,OAAQA,EAAM,OACd,YAAaA,EAAM,YACnB,OAAQ1G,EAAM,OACd,oBAAqB0G,EAAM,oBAC3B,WAAYA,EAAM,WAClB,iBAAkBA,EAAM,iBACxB,YAAa1G,EAAM,MAAM,EAAI,CACjC,CAAC,EAGGsua,EAAqB8tB,GAA0B11b,EAAM,WAAY,CAAC,CAACm8L,CAAS,EAC5EipO,EAAapla,EAAM,YAAc,CAAC1G,EAAM,qBAAuBsua,GAAkB,GACjFptD,EAAkBpB,GAAyC,CAC3D,GAAGp5W,EACH,iBAAkB,qBAClB,OAAQ,CACO,YACC,aACZ,UAAWA,EAAM,UACV,OACX,CACJ,CAAC,EACD,EAAY21b,GAAmB31b,EAAO6ia,CAAY,EAClD,GAAI,CAAgB,gBAAqB+yB,IAAmB51b,EAAO1G,CAAK,EACpEiqY,EAAesyD,GAAuB71b,EAAO,CAC7C,OAAQ,EACZ,CAAC,EAED,OAAqB4zG,EAAkB,cAAkB2nQ,GAA2C,IAAK,CACrG,GAAOo6E,GAAmBpyD,EAAU/oB,EAAay6E,CAAY,EAC7D,IAAKj1b,EAAM,WACX,MAAO,CACH,GAAG6ia,EAAa,MAChB,yBAA0B3G,EAAqB,GAAGA,EAAmB,EAAE,KAAKA,EAAmB,EAAE,IAAM,OACvG,GAAG1hD,EAAY,KACnB,EACA,iBAAkBr+K,GAAa,OAC/B,gBAAiBipO,GAAc,OAC/B,eAAgBpla,EAAM,WAAa,MACvC,EAAiB4zG,EAAkB,cAAkB8iT,GAA2C,SAAU,CACtG,MAAO,CACH,GAAGoS,EACQ,YACX,IAAKxK,CACT,CACJ,EAAG9jD,EAAY,QAAQ,CAAC,CAE5B,CCxHA,IAAas7E,IAAiB,CAC1B/4a,YACAqpJ,QACAtyK,QACAiic,UACAC,WACAv7O,WACA80J,eAWI5rE,UAAC,MAAD,CACI5mR,UAAWw9J,EACP,iBACA,CAAE,2BAA4BkgC,CAAS,EACvC19L,GAJRm0F,SAAA,EAOIyyL,UAAC,QAAD,CAAAzyL,SAAA,EACIgrG,SAAC,QAAD,CACIxgM,KAAK,WACLu8D,QAASnkF,EACC2mN,WACV0D,SAAUoxJ,EACV,kBAAiBymF,CACpB,IACD95O,SAAC,MAAD,CAAK,kBAAgB,GAAGn/L,UAAU,QAC9Bm0F,UAAAgrG,SAAC,MAAD,CAAKn/L,UAAU,OAAa,EAC3B,GACJqpJ,EACA2vR,IACGpyJ,UAACsyJ,IAAD,CAAgBv/Y,MAAO,EAAvBw6D,SAAA,EACIgrG,SAACg6O,GAAD,CACIn5a,UAAU,kBACV,aAAW,sCAEXm0F,UAAAgrG,SAAC+9E,EAAD,CAAiB1W,KAAMyd,EAAe,EAClC,IACR2C,UAACwyJ,IAAD,CACIp5a,UAAU,qBACVo/K,UAAU,MACVv7J,OAAQ,EAHZswE,SAAA,EAKIgrG,SAACk6O,IAAD,CAAcr5a,UAAU,oCACpBm0F,UAAAgrG,SAAC,MAAD,CAAKrjI,MAAO,EAAGvkB,OAAQ,EAAG+hY,QAAQ,UAC9BnlV,UAAAgrG,SAAC,OAAD,CAAMtwK,EAAE,gBAAkB,EACzB,EACK,GACbmqZ,CACI,CACG,G,EAEjB,IACNA,IACG75O,SAAC,MAAD,CAAKn/L,UAAU,0BAA2Bm0F,SAAA6kV,CAAa,EAE1D,C,GCrEAO,IAAY,CACrBv5a,YACAk7D,UACAkmI,WACA/3C,QACAq0C,WACAhmN,KACA8hc,eACA,YAAaC,MAYTt6O,SAAC,MAAD,CACIn/L,UAAWw9J,EACP,WACA,CAAE,qBAAsBkgC,CAAS,EACjC19L,GAGJm0F,UAAAyyL,UAAC,QAAD,CAAAzyL,SAAA,EACIgrG,SAAC,QAAD,CACQznN,KACJinB,KAAK,WACL,YAAW86a,EACFv+W,UACCkmI,WACA1D,WACI87O,cACjB,IACDr6O,SAAC,MAAD,CAAKn/L,UAAU,SACVm0F,SAAAj5B,IAAWikI,SAAC+9E,EAAD,CAAiB1W,KAAM2a,EAAU,EAC5C,IACLhiF,SAAC,MAAD,CAAKn/L,UAAU,QAASm0F,SAAAk1D,CAAW,EAChC,GACN,GC5CAqwR,IAAe,CACxB15a,YACAk7D,UACAkmI,WACA/3C,QACA5yC,QACAinF,WACAhmN,KACA,YAAa+hc,MAYTt6O,SAAC,MAAD,CAAKn/L,UAAWw9J,EAAG,QAASx9J,GACxBm0F,UAAAyyL,UAAC,QAAD,CAAAzyL,SAAA,EACIgrG,SAAC,QAAD,CACIxgM,KAAK,QACDjnB,KACJ,YAAW+hc,EACD/7O,WACVnlN,KAAMk+H,EACGv7C,UACCkmI,UACb,IACDjC,SAAC,MAAD,CAAKn/L,UAAU,QACVm0F,SAAAj5B,IAAWikI,SAAC,MAAD,CAAKn/L,UAAU,OAAS,EACnC,IACLm/L,SAAC,MAAD,CAAKn/L,UAAU,QAASm0F,SAAAk1D,CAAW,EAChC,GACN,GC9Bb,SAAgBswR,GAAY,CACxBplF,UACAv0V,aAAA,CAKA,OACIm/L,SAAC,SAAD,CACIxgM,KAAK,SACLqB,UAAWw9J,EAAG,eAAgBx9J,GACrBu0V,UACT,aAAW,QAEXpgQ,UAAAgrG,SAAC+9E,EAAD,CAAiB1W,KAAMib,EAAU,EAC7B,EAEhB,CCtBA,SAAgBm4J,GAAc,CAC1BhzS,QACAizS,eACAxzB,YACArmZ,aAAA,CAOA,OACI4mR,UAAC,MAAD,CAAK5mR,UAAWw9J,EAAG,iBAAkBx9J,GAArCm0F,SAAA,EACIgrG,SAAC,KAAD,CACIn/L,UAAWw9J,EAAG,QAAS,CACnBs8Q,UAAW,CAAC,CAACD,CACjB,GACAtlF,QAASslF,EAER1lV,SAAAyyC,CACD,GACHy/Q,IAAalnN,SAACw6O,GAAD,CAAaplF,QAAS8xD,CAAY,EAC/C,C,EAEb,CCpBA,IAAa0zB,IAAYC,gBACrB,SAAmB,CAAEh6a,YAAW,GAAG/c,GAAyBuuB,EAAA,CACxD,OACI2tL,SAAC,QAAD,CACIn/L,UAAWw9J,EAAG,aAAcx9J,GACvBwR,MACL,GAAIvuB,CACP,EAET,GCdJ,SAAgBg3b,MAEZC,SAD8BC,iBAAiB,qBAC/CD,EAAa1pb,QAASmvC,IAClB,IAAMsyH,EACFtyH,EAAQy6Y,cAAc,wBAAwB5/W,aAAe,GAE5D76B,EAAQ2hH,gBACb+4R,kBAAY16Y,EAAQ2hH,eAAe69C,SAACu2J,GAAD,CAAmBzjM,MAAO,GACjE,EACJ,CCZA,SAAgBqoR,MACZ,OACI1zJ,UAAC,MAAD,CAAK9qN,MAAM,KAAKvkB,OAAO,KAAKx2C,KAAK,OAAOu4a,QAAQ,YAAhDnlV,SAAA,EACIgrG,SAAC,OAAD,CAAMrjI,MAAM,KAAKvkB,OAAO,IAAItJ,EAAE,IAAIltC,KAAK,UAAUw5a,GAAG,GAAK,IACzDp7O,SAAC,OAAD,CAAMrjI,MAAM,KAAKvkB,OAAO,IAAIz5D,EAAE,KAAKmwD,EAAE,IAAIltC,KAAK,UAAUw5a,GAAG,GAAK,IAChEp7O,SAAC,OAAD,CAAMrjI,MAAM,KAAKvkB,OAAO,IAAIz5D,EAAE,KAAKmwD,EAAE,IAAIltC,KAAK,UAAUw5a,GAAG,GAAK,IAChEp7O,SAAC,OAAD,CAAMrjI,MAAM,KAAKvkB,OAAO,IAAItJ,EAAE,IAAIltC,KAAK,UAAUw5a,GAAG,GAAK,IACzDp7O,SAAC,OAAD,CAAMrjI,MAAM,KAAKvkB,OAAO,IAAIz5D,EAAE,KAAKmwD,EAAE,IAAIltC,KAAK,UAAUw5a,GAAG,GAAK,IAChEp7O,SAAC,OAAD,CAAMrjI,MAAM,KAAKvkB,OAAO,IAAIz5D,EAAE,KAAKmwD,EAAE,IAAIltC,KAAK,UAAUw5a,GAAG,GAAK,IAChEp7O,SAAC,OAAD,CAAMrjI,MAAM,KAAKvkB,OAAO,IAAItJ,EAAE,KAAKltC,KAAK,UAAUw5a,GAAG,GAAK,IAC1Dp7O,SAAC,OAAD,CAAMrjI,MAAM,KAAKvkB,OAAO,IAAIz5D,EAAE,KAAKmwD,EAAE,KAAKltC,KAAK,UAAUw5a,GAAG,GAAK,IACjEp7O,SAAC,OAAD,CAAMrjI,MAAM,KAAKvkB,OAAO,IAAIz5D,EAAE,KAAKmwD,EAAE,KAAKltC,KAAK,UAAUw5a,GAAG,GAAK,EAChE,C,EAEb,CCdA,SAAgBC,MACZ,OACI5zJ,UAAC,MAAD,CAAK9qN,MAAM,KAAKvkB,OAAO,KAAKx2C,KAAK,OAAOu4a,QAAQ,YAAhDnlV,SAAA,EACIgrG,SAAC,OAAD,CAAMrjI,MAAM,KAAKvkB,OAAO,IAAItJ,EAAE,IAAIltC,KAAK,UAAUw5a,GAAG,GAAK,IACzDp7O,SAAC,OAAD,CAAMrjI,MAAM,KAAKvkB,OAAO,IAAIz5D,EAAE,KAAKmwD,EAAE,IAAIltC,KAAK,UAAUw5a,GAAG,GAAK,IAChEp7O,SAAC,OAAD,CAAMrjI,MAAM,KAAKvkB,OAAO,IAAIz5D,EAAE,KAAKmwD,EAAE,IAAIltC,KAAK,UAAUw5a,GAAG,GAAK,IAChEp7O,SAAC,OAAD,CAAMrjI,MAAM,KAAKvkB,OAAO,IAAItJ,EAAE,IAAIltC,KAAK,UAAUw5a,GAAG,GAAK,IACzDp7O,SAAC,OAAD,CAAMrjI,MAAM,KAAKvkB,OAAO,IAAIz5D,EAAE,KAAKmwD,EAAE,IAAIltC,KAAK,UAAUw5a,GAAG,GAAK,IAChEp7O,SAAC,OAAD,CAAMrjI,MAAM,KAAKvkB,OAAO,IAAIz5D,EAAE,KAAKmwD,EAAE,IAAIltC,KAAK,UAAUw5a,GAAG,GAAK,IAChEp7O,SAAC,OAAD,CAAMrjI,MAAM,KAAKvkB,OAAO,IAAItJ,EAAE,KAAKltC,KAAK,UAAUw5a,GAAG,GAAK,IAC1Dp7O,SAAC,OAAD,CAAMrjI,MAAM,KAAKvkB,OAAO,IAAIz5D,EAAE,KAAKmwD,EAAE,KAAKltC,KAAK,UAAUw5a,GAAG,GAAK,IACjEp7O,SAAC,OAAD,CAAMrjI,MAAM,KAAKvkB,OAAO,IAAIz5D,EAAE,KAAKmwD,EAAE,KAAKltC,KAAK,UAAUw5a,GAAG,GAAK,EAChE,C,EAEb,CCLA,SAAgBE,GAAe,CAC3Bz6a,YACA4mI,QACAiwN,cACArwF,OACAk0K,kBACAC,yBACAC,aACAC,eACAtmF,UACA72J,YAAA,CAaA,GAAM,CAACo9O,EAAeC,MAAoB98O,YAAS,IAC7C+8O,EAAch4O,IAAa83O,EAAe,CAC5CnhZ,MAAO,IACPshZ,IAAK,EACT,GAYA,OACIr0J,UAAC,SAAD,CACI5mR,UAAWw9J,EAAG,kBAAmBx9J,EAAW,CACxC,2BAA4Bg7a,CAChC,GACAzmF,QAASlhR,SAfG,CAChB0nW,EAAiB,IAEjB,GAAI,CACA,MAAMxmF,GACV,QAAU,CACNwmF,EAAiB,GACrB,CACJ,EAQQ,kBAAiBF,EACjBn9O,SAAUA,GAAYo9O,GAAiBE,EAN3C7mV,SAAA,CAQKqyK,IACGrnE,SAAC,MAAD,CAAKn/L,UAAU,wBACVm0F,SAAAqyK,IAAS,QACNrnE,SAACm7O,IAAD,CAAmB,IAEnBn7O,SAACq7O,IAAD,CAAuB,EAE1B,IAEPE,GAAmBC,KACjBx7O,SAAC,MAAD,CACIn/L,UAAU,iCACVmvE,MAAOwrW,EAENxmV,SAAAumV,IACGv7O,SAAC,MAAD,CACInqM,IAAK0lb,EACL5+W,MAAO6+W,GAAwB7+W,MAC/BvkB,OAAQojY,GAAwBpjY,OAChC43B,MAAOyrW,EACPpgG,IAAI,EACP,EAEJ,IAET5zD,UAAC,MAAD,CAAK5mR,UAAU,2BAAfm0F,SAAA,EACIgrG,SAAC,KAAD,CAAIn/L,UAAU,yBAA0Bm0F,SAAAyyC,CAAU,IAClDggJ,UAAC,MAAD,CAAK5mR,UAAU,uCAAfm0F,SAAA,EACIgrG,SAAC,IAAD,CAAGn/L,UAAU,+BACRm0F,SAAA0iQ,CACF,GACFmkF,IACG77O,SAAC,IAAD,CAAGn/L,UAAU,iCAAiCm0F,SAAA,UAE3C,EAEN,CACJ,G,IACLgrG,SAAC,MAAD,CAAKn/L,UAAU,iCACVm0F,SAAA6mV,GACG77O,SAAC+9E,EAAD,CAAiB1W,KAAM6a,IAAW/F,KAAA,EAAM,IAExCn8E,SAAC+9E,EAAD,CAAiB1W,KAAMkc,EAAa,EAEvC,EACD,C,EAEhB,CCjGA,SAAgBw4J,IAAmB,CAC/Bl7a,YACA4mI,QACAiwN,cACArwF,OACAq0K,eACA9rX,OACAosX,WACA,GAAGC,GAAA,CAUH,OACIx0J,UAAC,IAAD,CACI5mR,UAAWw9J,EAAG,uCAAwCx9J,GAChD+uD,OACIosX,WACV,kBAAiBN,EACjB,GAAIO,EALRjnV,SAAA,CAOKqyK,IACGrnE,SAAC,MAAD,CAAKn/L,UAAU,wBACVm0F,SAAAqyK,IAAS,QACNrnE,SAACm7O,IAAD,CAAmB,IAEnBn7O,SAACq7O,IAAD,CAAuB,EAE1B,IAET5zJ,UAAC,MAAD,CAAK5mR,UAAU,2BAAfm0F,SAAA,EACIgrG,SAAC,KAAD,CAAIn/L,UAAU,yBAA0Bm0F,SAAAyyC,CAAU,IAClDu4D,SAAC,MAAD,CAAKn/L,UAAU,uCACXm0F,UAAAgrG,SAAC,IAAD,CAAGn/L,UAAU,+BACRm0F,SAAA0iQ,CACF,EACF,EACJ,C,IACL13J,SAAC,MAAD,CAAKn/L,UAAU,iCACXm0F,UAAAgrG,SAAC+9E,EAAD,CAAiB1W,KAAMkc,EAAa,EACnC,EACN,C,EAEX,CCnDA,SAAgB24J,IAAmB,CAC/BC,cACAC,sBACAC,gBACAC,wBACAC,gBAAA,CAQA,IAAMC,KAAc1hK,WACd2hK,EAAaF,GAAcnjc,KAC3Bsjc,EAAcH,GAAc/nR,UAC5BmoR,EAAsB,CAAC,CAACD,EAE9B,OACIj1J,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIyyL,UAAC,UAAD,CAAS5mR,UAAU,oCAAnBm0F,SAAA,EACIgrG,SAACu6O,GAAD,CACIrwR,MAAM,6DACN5yC,MAAO,GAAGklU,EAAY,cACtBzgX,QAAS,CAACogX,EACVl6O,aAAgBm6O,EAAoB,GACvC,IACDp8O,SAACu6O,GAAD,CACIrwR,MAAM,iEACN5yC,MAAO,GAAGklU,EAAY,cACtBzgX,QAASogX,EACTl6O,aAAgBm6O,EAAoB,GACvC,EACI,CACR,GAAAO,IACGl1J,UAAC,UAAD,CAAS5mR,UAAU,oCAAnBm0F,SAAA,EACIyyL,UAAC,MAAD,CAAAzyL,SAAA,EACIgrG,SAACu6O,GAAD,CACIrwR,MAAM,oBACN5yC,MAAO,GAAGklU,EAAY,gBACtBzgX,QAAS,CAACsgX,EACVp6O,aAAgBq6O,EAAsB,GACzC,IACD70J,UAAC,IAAD,CAAAzyL,SAAA,CAAG,SACMgrG,SAAC,OAAD,CAAAhrG,SAAOynV,CAAiB,EAC9B,GACF,KACLh1J,UAAC,MAAD,CAAAzyL,SAAA,EACIgrG,SAACu6O,GAAD,CACIrwR,MAAM,yBACN5yC,MAAO,GAAGklU,EAAY,gBACtBzgX,QAASsgX,EACTp6O,aAAgBq6O,EAAsB,GACzC,IACD70J,UAAC,IAAD,CAAAzyL,SAAA,CAAG,OACM,KACLgrG,SAAC,OAAD,CAAMhwH,MAAO,CAAE4sW,UAAW,WAAY,EACjC5nV,SAAA0nV,CACC,EACP,GACF,GACA,CAEf,KAEV,CC5BA,IAAa1C,IAAU,CACnB75O,QAAQ,mBACRt/L,YACAmvE,QACApgB,OACAwlS,UACA3gS,OACA6lN,YACA96Q,OAAO,SACP6nQ,OAAO+a,GACPy6J,eAAe,QACfzsF,gBACA7xJ,cAAA,CAEA,IAAMvlJ,EAAUqlH,EAAG,WAAY,aAAa8hC,IAASt/L,EAAW,CAC5D,sBAAuBwmQ,GAAQ,CAAC5yM,CACpC,GACM7vE,GACF6iS,UAAAsxC,WAAA,CAAA/jO,SAAA,CACK6nV,IAAiB,QAAUx1K,IACxBrnE,SAAC+9E,EAAD,CACIl9Q,UAAWw9J,EAAG,CAAE,sBAAuB5pG,CAAK,GACtC4yM,MACT,GAEJ5yM,IAAQurI,SAAC,OAAD,CAAAhrG,SAAOvgC,CAAW,GAC1BooX,IAAiB,QAAUx1K,IACxBrnE,SAAC+9E,EAAD,CACIl9Q,UAAWw9J,EAAG,CAAE,uBAAwB5pG,CAAK,GACvC4yM,MACT,EAEP,IA2BN,OAxBIz3M,GAYOowI,SAAC,IAAD,CAVHpwI,KAAM2uI,EAAWl7D,OAAYzzE,EAC7B/uD,UAAWm4C,EACXg3B,QACA,kBAAmBogR,EACnBgF,QAAS72J,EACFpvK,GAAwBA,EAAEmmU,eAAA,EAC3BjyN,OACN,aAAci3I,EACd,gBAAiB/7E,EAEEvpG,SAAApwG,CAAW,IAY/Bo7M,SAAC,SAAD,CARHxgM,OACAqB,UAAWm4C,EACXg3B,QACAolR,UACA,aAAc96E,EACd,kBAAmB81E,EACnB7xJ,WAE6BvpG,SAAApwG,CAAgB,EACrD,EChGMk4b,IAAsB,IAYtBC,GAAwC,CAC1Cn7a,KAAM,OACNwlR,OAAQ,OACRE,cAAe,QACfC,eAAgB,QAChBy1J,WAAY,MAChB,EAEA,SAAgBC,GAAKn5b,EAAA,CAEjB,GAAI,EADSA,EAAMw2M,MAAQ,IAChB,OAAOx2M,EAAMkxG,SAExB,IAAMkoV,EACFp5b,EAAMo5b,eACLp5b,EAAMk5K,WAAa35B,OAEd,EADAy5S,IAAsBh5b,EAAMk5K,UAGhCsgM,EAAe,CACjB,GAAGy/E,GACH11J,YAAa3uI,EAAYwkS,GACzBt7a,KAAM9d,EAAMq5b,cAAgBJ,GAAiBn7a,KAC7CwlR,OAAQtjS,EAAMq5b,cAAgBJ,GAAiB31J,MACnD,EACMg2J,EAAOvhP,EAAM+hJ,aAAa95V,EAAMkxG,SAAU,CAC5Cz8G,GAAIuL,EAAMvL,GACVy3F,MAAO,CACH,GAAGstR,EACH,GAAGx5W,EAAMksF,KACb,CACJ,GACA,OACIy3M,YAAOkyC,SAAP,CAAA3kO,SAAA,CACKooV,EACAt5b,EAAMkxG,QACK,GAHKlxG,EAAMvL,EAGX,CAExB,CC1CA,IAAa8kc,GAAb,cAAA3lV,EAAsC,SAA2B,CAC7D,QAAyC,KAEzC,mBAAmC,CAC3B,OAAO,SAAa,MACpB,KAAK,QAAU,SAAS,cAAc,KAAK,EACvC,KAAK,MAAM,qBACX,KAAK,QAAQ,UAAY,KAAK,MAAM,oBAExC,SAAS,KAAK,YAAY,KAAK,OAAO,EAEtC,KAAK,YAAY,EAEzB,CAEA,sBAAsC,CAE9B,KAAK,SAAW,KAAK,QAAQ,aAAe,SAAS,MACrD,SAAS,KAAK,YAAY,KAAK,OAAO,EAE1C,KAAK,QAAU,IACnB,CAEA,QAA4C,CAExC,OADK,KAAK,QACVioG,GAAgB,aAAa,KAAK,MAAM,SAAU,KAAK,OAAO,EADpC,IAE9B,CACJ,ECpCM29O,IAAgB,OAETC,GAAoBz5b,IAOzBk8M,SAAC,MAAD,CACIn/L,UAAU,oBACV4mI,MAAO3jJ,EAAM2jJ,MACbz3D,MAAO,CACHwtW,gBAAiB15b,EAAM05b,gBACvB,GAAG15b,EAAMm5K,QAAQwgR,OACrB,EAEAzoV,UAAAgrG,SAAC,OAAD,CACIhwH,MAAO,CACH0tW,YAAa55b,EAAM+jN,OAASy1O,GAChC,CACH,EACA,GCzBb,SAAgBK,GAA6B,CACzCC,cACAC,iBAAA,CAKA,OACIp2J,UAAAsxC,WAAA,CAAA/jO,SAAA,CAAE,kFAGG4oV,GAAeA,EAAYv+b,OAAS,IACjCooS,UAAAsxC,WAAA,CAAA/jO,SAAA,CACK,IAAI,mBAEJ4oV,EAAYv+b,OAAS,EAChB,8BACA,6BAA6B,qBAEnC2gN,SAAC,KAAD,CAAIn/L,UAAWg9a,EACV7oV,SAAA4oV,EAAYrtb,IAAK4oB,IACd6mL,SAAC,KAAD,CAAAhrG,UACIgrG,SAAC,IAAD,CAAGpwI,KAAMz2C,EAAM73B,OAAO,SAASygK,IAAI,WAC9B/sD,SAAA77E,CACF,EACH,EAJKA,GAMb,EACN,GAER,GAEV,CChBA,SAAgB2ka,GAAe,CAC3BvhT,OAAA,CAIA,OAAQA,EAAR,CACI,KAAKpK,GAAkB4rT,MACnB,OAAO/9O,SAAC+9E,EAAD,CAAiB1W,KAAM+Y,GAAU,GAC5C,KAAKjuJ,GAAkB6rT,SACnB,OAAOh+O,SAAC+9E,EAAD,CAAiB1W,KAAM8Z,GAAkB,GACpD,QACI,OAAO88J,IAAW1hT,EAC1B,CACJ,CAEA,IAAM0hT,IAA2D,EAE5DjsT,EAAoBksT,YAAYl+O,SAAC+9E,EAAD,CAAiB1W,KAAMqa,EAAc,IAGrE1vJ,EAAoBmsT,cAAcn+O,SAAC+9E,EAAD,CAAiB1W,KAAM6b,GAAgB,IACzElxJ,EAAoBosT,aAAap+O,SAAC+9E,EAAD,CAAiB1W,KAAM6b,GAAgB,IACxElxJ,EAAoBqsT,qBACjBr+O,SAAC+9E,EAAD,CAAiB1W,KAAM4a,GAAa,IAIvCjwJ,EAAoBssT,cACjBt+O,SAAC,MAAD,CAAKrjI,MAAM,KAAKvkB,OAAO,KAAKx2C,KAAK,OAAOu4a,QAAQ,cAC5CnlV,UAAAgrG,SAAC,OAAD,CACIp+L,KAAK,eACL28a,SAAS,UACT7uZ,EAAE,qTACF8uZ,SAAS,SACZ,EACA,IAIRxsT,EAAoBysT,YACjBz+O,SAAC,MAAD,CAAKrjI,MAAM,KAAKvkB,OAAO,KAAKx2C,KAAK,OAAOu4a,QAAQ,YAC5CnlV,UAAAgrG,SAAC,OAAD,CACIp+L,KAAK,eACLwlR,OAAO,eACPC,YAAY,KACZ33P,EAAE,mUACL,EACA,IAIRsiG,EAAoB0sT,cACjB1+O,SAAC,MAAD,CAAKrjI,MAAM,KAAKvkB,OAAO,KAAKx2C,KAAK,OAAOu4a,QAAQ,YAC5CnlV,UAAAyyL,UAAC,IAAD,CACIL,OAAO,eACPE,cAAc,QACdC,eAAe,QACfF,YAAY,MAJhBryL,SAAA,EAMIgrG,SAAC,OAAD,CAAMtwK,EAAE,iDAAmD,IAC3DswK,SAAC,OAAD,CAAMtwK,EAAE,kCAAoC,EAC7C,C,EACF,IAIRsiG,EAAoB2sT,aACjB3+O,SAAC,MAAD,CAAKrjI,MAAM,KAAKvkB,OAAO,KAAKx2C,KAAK,OAAOu4a,QAAQ,YAC5CnlV,UAAAgrG,SAAC,OAAD,CACIonF,OAAO,eACPE,cAAc,QACdC,eAAe,QACfF,YAAY,MACZ33P,EAAE,6DACL,EACA,IAIRsiG,EAAoB4sT,WACjB5+O,SAAC,MAAD,CAAKrjI,MAAM,KAAKvkB,OAAO,KAAKx2C,KAAK,OAAOu4a,QAAQ,YAC5CnlV,UAAAgrG,SAAC,OAAD,CACIp+L,KAAK,eACL8tB,EAAE,4YACL,EACA,IAIRsiG,EAAoB6sT,WACjB7+O,SAAC,MAAD,CAAKrjI,MAAM,KAAKvkB,OAAO,KAAKx2C,KAAK,OAAOu4a,QAAQ,YAC5CnlV,UAAAgrG,SAAC,OAAD,CACIp+L,KAAK,eACL8tB,EAAE,6MACL,EACA,EAEb,EC9GMovZ,IAAc,CAChBl5T,GAAI,gGACJm5T,KAAM,wGACNvmU,MAAO,kJACX,EAGMwmU,IAA8D,CAChEp5T,GAAI,UACJm5T,KAAM,UACNvmU,MAAO,SACX,EAEA,SAAgBymU,GAAkB,CAC9BnlI,YACAjyG,QACAhnM,aAAA,CAMA,OACIm/L,SAAC,MAAD,CACIn/L,UAAWw9J,EAAG,oBAAqBy7I,EAAWj5S,GAC9CmvE,MAAO,CAAEpuE,KAAMimM,GAASm3O,IAAgBllI,EAAW,EACnDklC,MAAM,6BACNm7F,QAAS,OAAOrgI,IAAc,QAAU,GAAK,GAAG,KAEhD9kN,UAAAgrG,SAAC,OAAD,CAAMtwK,EAAGovZ,IAAYhlI,EAAa,EACjC,EAEb,CCjCA,IAAMolI,IAAuB,mCAE7B,SAAgBC,IAAmC,CAC/C,OACI,OAAO,OAAW,KAClB,OAAO,WAAWD,GAAoB,CAAC,CAAC,OAEhD,CAEA,IAAaE,QAAgC7+O,GAAc2+O,GAAoB,ECJlEG,IAAyB,CAClC,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,EAEaC,IAAuB,CAChC,QAAS,mEACT,QAAS,QACT,oBAAqB,CAAC,EACtB,mBAAoB,CAAC,EACrB,oBAAqB,CAAC,EACtB,oBAAqB,CAAC,EACtB,wBAAyB,CAAC,EAC1B,eAAgB,cAChB,WAAY,oBACZ,iBAAkB,wBAClB,2BAA4B,SAC5B,WAAY,CAAC,YAAa,aAAa,EACvC,UAAW,GACX,IAAK,QACL,MAAO,CACH,0BAA2B,GAC3B,UAAW,SACX,IAAK,OACL,mBAAoB,GACpB,YAAa,QACjB,EACA,MAAO,CACH,0BAA2B,GAC3B,UAAW,SACX,IAAK,OACL,mBAAoB,GACpB,YAAa,QACjB,EACA,WAAY,CACR,gBAAiB,OACjB,SAAU,EACV,qBAAsB,GACtB,0BAA2B,GAC3B,kBAAmB,EACvB,EACA,IAAK,CACD,OAAQ,QACR,aAAc,GACd,WAAY,CACR,gBAAiB,OACjB,SAAU,EACV,qBAAsB,GACtB,0BAA2B,GAC3B,kBAAmB,EACvB,EACA,kBAAmB,UACnB,uBAAwB,GACxB,KAAM,SACN,oBAAqB,CAAC,CAC1B,EACA,SAAU,CACN,eAAgB,QAChB,eAAgB,UACpB,EACA,SAAU,CACN,iBAAkB,sBACtB,EACA,kBAAmB,GACnB,KAAM,OACN,iBAAkB,GAClB,SAAU,GACV,mBAAoB,GACpB,0BAA2B,GAC3B,kBAAmB,GACnB,oBAAqB,GACrB,iBAAkB,GAClB,4BAA6B,CACzB,OAAQ,GACR,KAAM,GACN,eAAgB,EACpB,EACA,QAAS,WACT,QAAS,SACT,gBAAiB,WACjB,gBAAiB,SACjB,aAAc,GACd,UAAW,WACX,gBAAiB,GACjB,eAAgB,GAChB,eAAgB,GAChB,qBAAsB,GACtB,qBAAsB,GACtB,oBAAqB,OACrB,0BAA2B,OAC3B,sBAAuB,OACvB,OAAQ,QACR,UAAW,OACX,gBAAiB,CAAC,EAClB,iBAAkB,CAAC,CACvB,ECvGaC,IAAmB,6BAEnBC,IAA+B,mBAE/BC,GACT,sCAMSC,GAAyB,kBACzBC,IAA2B,aAC3BC,IAAyB,yBAGzBC,IAA2B,aAC3BC,IAAuB,SACvBC,IAAuB,SAEvBC,IAA8B,oBAC9BC,IAAqC,wBAWrCC,IAAyB,KAIzBC,GAAyB,IAAI9jR,EACtC,EACA,SAEA+jR,EAGSC,IAAgC,IAAIhkR,EAC7C,EACA,SAEAikR,EAUSC,GAAwB,GAExBC,GAA+B,GAC/BC,GAA6B,GAQ7BC,GAA4BpB,IAAqBqB,QAElDC,IAAL,SAAAA,EAAA,C,MACHA,GAAAC,QAAA,U,CACJ,MAEaC,IAAoB,QAEpBC,GAAqBC,GAC9BA,IAAeF,IAENG,IAA0B,OAE1BC,IAA0B3oc,GACnCA,EAAGrE,SAAA,IAAe+sc,IAAwB/sc,SAAA,EAMxCitc,IACF,sGAiBSC,IAA+B,CACxC,MACA,MACA,QACA,SACA,SACA,OACA,OACA,MACJ,EAKaC,GAA+Bxsa,GACjCssa,IAAiB/tc,KAAKyhC,GAGrBysa,GAAL,SAAAA,EAAA,C,MAEHA,GAAAC,cAAA,gBAEAD,EAAAE,oBAAA,sBAEAF,EAAAG,oBAAA,sBAEAH,EAAAI,0BAAA,4BAEAJ,EAAAK,qBAAA,uBAEAL,EAAAM,8BAAA,gC,CACJ,MAQA,SAAgBC,GAAcC,EAAgBC,EAAA,CAC1C,OAAOA,EAAW,GAAGD,EAAO,GAAGC,IAAaD,CAChD,CAMA,IAAaE,IACT,0EAESC,IAAuC,CAChDzmH,oBAAqB,iCACrB0mH,cAAe,qBACfC,oBAAqB,aACzB,EAEYC,GAAL,SAAAA,EAAA,C,MACHA,GAAAC,QAAA,UACAD,EAAAE,SAAA,WACAF,EAAAG,MAAA,Q,CACJ,MAEaC,IAAyD,CAClExwT,EAAoBssT,YACpBtsT,EAAoBysT,SACxB,ECjLA,GAAI,CAAC3/O,WACD,MAAU,MAAM,mDAAmD,EAEvE,GAAI,CAACvpB,EACD,MAAU,MAAM,oEAAoE,ECLxF,SAAgBktQ,IAAiB,EAAU,CACvC5vb,EAAS,CACb,CACA,SAAgB6vb,IAAiB,EAAmB,CAChD,CACIlzQ,GAAoBizQ,IAKxBE,IAAU,CAAqB,mBAAkB,CAAC,CACtD,CCXA,SAAgBC,IAAgB,EAAG,CAC/B,OAAOjwQ,IAAkBx5K,CAAC,CAC9B,CCHA,IAAW0pb,IAA0B,IAC1BC,IAA0B,IACjCC,IAAgD,UAAY,CAC5D,SAASA,EAA+B,EAAU,CAC9C,IAAI/3Q,EAAQ,KACZ,OAAO,eAAe,KAAM,WAAY,CACpC,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAOg4Q,CACX,CAAC,EACD,OAAO,eAAe,KAAM,gBAAiB,CACzC,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,IAAI,GACf,CAAC,EACD,OAAO,eAAe,KAAM,eAAgB,CACxC,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,IAAK,EAChB,CAAC,EAED,OAAO,eAAe,KAAM,QAAS,CACjC,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,SAAU,EAAQ,CACjBC,IAAW,IAAK,KAAK,EAASJ,KAElC,aAAa73Q,EAAM,YAAY,EAC/B,EAAM,aAAe,OACrB,IAAIpxI,EAAM,KAAK,IAAI,EACnBoxI,EAAM,cAAc,QAAQ,SAAU,EAAc,EAAO,CACnDpxI,EAAMspZ,EAAa,cAAgBD,IACnCj4Q,EAAM,SAASk4Q,EAAa,KAAK,EACjCl4Q,EAAM,cAAc,OAAOgxJ,CAAK,EAExC,CAAC,EACGhxJ,EAAM,cAAc,KAAO,GAC3BA,EAAM,cAAc,CAE5B,CACJ,CAAC,EAED,OAAO,eAAe,KAAM,yBAA0B,CAClD,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,UAAY,CACfA,EAAM,MAAM,CAAC,CACjB,CACJ,CAAC,CACL,CAgCA,OA9BA,OAAO,eAAe+3Q,EAA+B,UAAW,WAAY,CACxE,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,SAAU,EAAQ,EAAO,EAAO,CACnC,KAAK,cAAc,IAAI/mH,EAAO,CACnB,QACP,aAAc,KAAK,IAAI,CAC3B,CAAC,EACD,KAAK,cAAc,CACvB,CACJ,CAAC,EACD,OAAO,eAAe+mH,EAA+B,UAAW,aAAc,CAC1E,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,SAAU,EAAO,CACpB,KAAK,cAAc,OAAO/mH,CAAK,CACnC,CACJ,CAAC,EACD,OAAO,eAAe+mH,EAA+B,UAAW,gBAAiB,CAC7E,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,UAAY,CACX,KAAK,eAAiB,SACtB,KAAK,aAAe,WAAW,KAAK,MAAOD,GAAuB,EAE1E,CACJ,CAAC,EACMC,CACX,EAAE,ECtFSI,GAA+B,IDwFC,OAAO,qBAAyB,IACrE,qBACAJ,KC1FsE,SAAU,EAAK,CACvF,IAAI//T,GACH,EAAKuhD,EAAI,WAAc,MAAiCvhD,EAAG,QAAQ,EACpE,EAAI,SAAW,IACnB,CAAC,ECLGogU,IAA+B,GAInC,SAAgBC,IAAyB,CACrC,OAAOD,GACX,CCNA,IAAIE,IAAkC,SAAU,EAAG,EAAG,CAClD,IAAIzzZ,EAAI,OAAO,QAAW,YAAcP,EAAE,OAAO,UACjD,GAAI,CAACO,EAAG,OAAOP,EACf,IAAIhvC,EAAIuvC,EAAE,KAAKP,CAAC,EAAGmf,EAAG80Y,EAAK,CAAC,EAAGp0Z,EAC/B,GAAI,CACA,MAAQzwC,IAAM,IAAK,IAAK,IAAM,IAAM,EAAE,EAAI4B,EAAE,KAAK,GAAG,MAAMijc,EAAG,KAAK90Y,EAAE,KAAK,CAC7E,OACOjiD,EAAO,CAAE,EAAI,CAAS,OAAM,CAAG,QAC9B,CACJ,GAAI,CACIiiD,GAAK,CAACA,EAAE,OAAS,EAAInuD,EAAE8Y,SAAYy2B,EAAE,KAAKvvC,CAAC,CACnD,QACQ,CAAE,GAAI6uC,EAAG,MAAMA,EAAE,KAAO,CACpC,CACA,OAAOo0Z,CACX,EAMA,SAASC,IAAyB,EAAmB,CACjD,MAAO,WAAkBC,GAC7B,CAIA,IAAIC,IAA2C,UAAY,CACvD,SAASA,GAA4B,CACrC,CACA,OAAOA,CACX,EAAE,EACF,SAASC,KAAmC,CACxC,OAAO,IAAID,GACf,CACA,SAAgBE,IAAY,EAAI,EAAmB,CAE/C,GADIH,IAAsB,IAAK,KAAK,EAAoB,YACpDJ,GAAuB,EACvB,OAAOtvc,EAAG,EAEd,IAAsE8vc,EAA7DP,MAAa,SAASK,GAAgC,EAAG,CAA6B,CAAC,CAAC,GAE3D7hP,EAA7BwhP,MAAa,SAAS,EAAG,CAAgB,CAAC,CAAC,GAChDtzE,EAAc,UAAY,CAAE,OAAOluK,EAAS,CAAC,CAAC,CAAG,EAIjDgiP,EAAApsV,EAAe,OAAO,IAAI,EAC9B,CAEIosV,CAAO,UAAU,CACb,SAAU,KACV,QAAS,GACT,mBAAoB,EACxB,EAEJ,IAAIv/Q,EAAMu/Q,EAAO,QACZv/Q,EAAI,WAEL,EAAI,SAAW,IAAIuK,GAAS00Q,IAAyBC,CAAiB,EAAG,UAAY,CAM7El/Q,EAAI,QAEJyrM,EAAY,EAKZ,EAAI,mBAAqB,EAEjC,CAAC,EACDmzE,GAA6B,SAASU,EAAuBt/Q,EAAKA,CAAG,GAEzE7sE,EAAM,cAAc6sE,EAAI,SAAUq+Q,GAAe,EACjDlrV,EAAM,UAAU,UAAY,CAsBxB,OArBAyrV,GAA6B,WAAW5+Q,CAAG,EAC3C,EAAI,QAAU,GACVA,EAAI,SACAA,EAAI,qBAEJ,EAAI,mBAAqB,GACzByrM,EAAY,IAShB,EAAI,SAAW,IAAIlhM,GAAS00Q,IAAyBC,CAAiB,EAAG,UAAY,CAEjFzzE,EAAY,CAChB,CAAC,EACDA,EAAY,GAET,UAAY,CACfzrM,EAAI,SAAS,QAAQ,EACrB,EAAI,SAAW,KACf,EAAI,QAAU,GACd,EAAI,mBAAqB,EAC7B,CACJ,EAAG,CAAC,CAAC,EAIL,IAAIw/Q,EACA5kb,EASJ,GARAolK,EAAI,SAAS,MAAM,UAAY,CAC3B,GAAI,CACA,EAAYxwL,EAAG,CACnB,OACO,EAAG,CACN,EAAY,CAChB,CACJ,CAAC,EACGorB,EACA,MAAMA,EAEV,OAAO4kb,CACX,CCxHA,IAAIC,IAAY,OAAO,QAAW,YAAc,OAAO,IAEnDC,IAAwBD,IACtB,OAAO,IAAI,mBAAmB,EAC9B,OAAOnJ,cAAe,eAAcA,cAAW,SAAU,EAAO,CAAE,OAAO,IAAM,CAAC,CAAC,CAACqJ,SACpFC,IAAkBH,IAChB,OAAO,IAAI,YAAY,EACvB,OAAOhgb,QAAS,eAAcA,QAAK,SAAU,EAAO,CAAE,OAAO,IAAM,CAAC,CAAC,CAACkgb,SAE5E,SAAgBj8W,IAAS,EAEzB,EAAS,CAML,GAAIk8W,KAAmBC,EAAcF,WAAgBC,IACjD,MAAU,MAAM,qLAAqL,EAGzM,GAAId,GAAuB,EACvB,OAAOe,EAEX,IAAIC,EAAsBhmc,GAA0D,YAA6C,GAC7Hg3M,EAAS+uP,EACTX,EAAoBW,EAAc,aAAeA,EAAc,KAGnE,GAAIH,KAAyBG,EAAcF,WAAgBD,MACvD,EAAgB,GAChB,EAASG,EAAcE,OACnB,OAAOjvP,GAAW,YAClB,MAAU,MAAM,sEAAsE,EAG9F,IAAIkvP,EAAoB,SAAU,EAAO,EAAK,CAC1C,OAAOX,IAAY,UAAY,CAAE,OAAOvuP,EAAOvxM,EAAOuuB,CAAG,CAAG,EAAGoxa,CAAiB,CACpF,EA+BA,OA5BIA,IAAsB,KAEtB,EAAkB,YAAcA,GAGhCW,EAAc,eAEd,EAAkB,aAAeA,EAAc,cAE/CC,IAIA,KAAoBxJ,cAAW0J,CAAiB,GAKpD,KAAoBvgb,QAAKugb,CAAiB,EAC1CC,IAAqBJ,EAAeG,CAAiB,EAS9CA,CACX,CAEA,IAAIE,IAAiB,CACjB,SAAU,GACV,OAAQ,GACR,QAAS,GACT,KAAM,GAGN,YAAa,EACjB,EACA,SAASD,IAAqB,EAAM,EAAQ,CACxC,OAAO,KAAK/ib,CAAI,CAAC,CAAC,QAAQ,SAAU,EAAK,CAChCgjb,IAAe9sc,IAChB,OAAO,eAAe2J,EAAQ3J,EAAK,OAAO,yBAAyB8pB,EAAM9pB,CAAG,CAAC,CAErF,CAAC,CACL,CCnFA+qc,IAAiBgC,0BAAK,EAOSvB,GAA6BwB,uBCV5D,IAAIC,IAAW,EAEf,SAASC,IAAa,EAAM,CAC1B,GAAI,OAAO,QAAW,WACpB,OAAO,OAAOzrc,CAAI,EAGpB,IAAI/C,EAAS,iBAAmB+C,EAAO,KAAOwrc,IAAW,IAEzD,MADA,OACOvuc,CACT,CAEA,IAAIyuc,GAAiB,CAAC,EACtB,SAASC,GAAU,EAAM,CAKvB,OAJKD,GAAe1rc,KAClB,GAAeA,GAAQyrc,IAAazrc,CAAI,GAGnC0rc,GAAe1rc,EACxB,CACA,SAASg9O,IAAa,EAAM,EAAM,CAEhC,GAAIF,IAAGG,EAAMC,CAAI,EACf,MAAO,GAGT,GAAI,OAAOD,GAAS,WAAYA,GAAiB,OAAOC,GAAS,WAAYA,EAC3E,MAAO,GAGT,IAAIC,EAAQ,OAAO,KAAKF,CAAI,EACxBG,EAAQ,OAAO,KAAKF,CAAI,EAE5B,GAAIC,EAAM,SAAWC,EAAM,OACzB,MAAO,GAGT,IAAK,IAAI,EAAI,EAAG,EAAID,EAAM,OAAQ,IAChC,GAAI,CAAC,OAAO,eAAe,KAAKD,EAAMC,EAAM,EAAE,GAAK,CAACL,IAAGG,EAAKE,EAAM,IAAKD,EAAKC,EAAM,GAAG,EACnF,MAAO,GAIX,MAAO,EACT,CAEA,SAASL,IAAG,EAAG,EAAG,CAKd,OAHEv3O,IAAMmwD,EACDnwD,IAAM,GAAK,EAAIA,GAAM,EAAImwD,EAEzBnwD,IAAMA,GAAKmwD,IAAMA,CAE5B,CAkCA,SAASk2Y,GAAc,EAAQ,EAAM,EAAO,CACrC,OAAO,eAAe,KAAK1jc,EAAQ89B,CAAI,EAQ1C,EAAOA,GAAQxnC,EAPf,OAAO,eAAe0J,EAAQ89B,EAAM,CAClC,WAAY,GACZ,aAAc,GACd,SAAU,GACH,OACT,CAAC,CAIL,CAMA,IAAI6la,IAA0BF,GAAU,aAAa,EACjDG,IAAqCH,GAAU,mBAAmB,EAEtE,SAASI,IAAU,EAAQ,EAAY,CACrC,IAAIC,EAAS,EAAOH,KAAc3jc,EAAO2jc,MAAe,CAAC,EACrDI,EAAe,EAAOpub,GAAcmub,EAAOnub,IAAe,CAAC,EAG/D,MAFA,GAAa,MAAQoub,EAAa,OAAS,EAC3C,EAAa,QAAUA,EAAa,SAAW,CAAC,EACzCA,CACT,CAEA,SAASn+X,IAAQ,EAAY,EAAQ,CACnC,IAAI8jH,EAAQ,KAEsB9tK,MACf,oBAInB,EAAO,QAEP,GAAI,CACF,IAAIoob,EAMJ,OAJIC,GAA2C,OAC7C,EAASA,EAAW,MAAM,KAAMrob,CAAI,GAG/Boob,CACT,QAAU,CACR,EAAO,QAEHF,EAAO,QAAU,GACnBA,EAAO,QAAQ,QAAQ,SAAU,EAAI,CACnCI,EAAG,MAAMx6Q,EAAO9tK,CAAI,CACtB,CAAC,CAEL,CACF,CAEA,SAASuob,IAAa,EAAY,EAAQ,CASxC,OAAO,UARgB,CAChB,IAA8Bvob,MACnB,WAGhBgqD,IAAQ,KAAK,MAAMA,IAAS,CAAC,KAAMq+X,EAAYH,CAAM,CAAC,CAAC,OAAOlob,CAAI,CAAC,CACrE,CAGF,CAEA,SAASkiE,IAAM,EAAQ,EAAY,EAAa,CAC9C,IAAIgmX,EAASD,IAAU7jc,EAAQ2V,CAAU,EAErCmub,EAAO,QAAQ,QAAQM,CAAW,EAAI,GACxCN,EAAO,QAAQ,KAAKM,CAAW,EAGjC,IAAIC,EAAgB,OAAO,yBAAyBrkc,EAAQ2V,CAAU,EAEtE,GAAI,KAAiB0ub,EAAcT,MAKnC,KAAIU,EAAiBtkc,EAAO2V,GACxB4ub,EAAgBC,IAAiBxkc,EAAQ2V,EAAY0ub,EAAgBA,EAAc,WAAa,OAAWP,EAAQQ,CAAc,EACrI,OAAO,eAAetkc,EAAQ2V,EAAY4ub,CAAa,CAF3B,CAG9B,CAEA,SAASC,IAAiB,EAAQ,EAAY,EAAY,EAAQ,EAAgB,CAChF,IAAI3gR,EAEAk8B,EAAcokP,IAAaG,EAAgBR,CAAM,EACrD,MAAO,GAAO,CAAC,EAAG,EAAKF,KAAyB,GAAM,EAAK,IAAM,UAAe,CAC9E,OAAO7jP,CACT,EAAG,EAAK,IAAM,SAAa,EAAO,CAChC,GAAI,OAAS//M,EACX,EAAcmkc,IAAa7tc,EAAOwtc,CAAM,MACnC,CAKL,IAAIS,EAAgBC,IAAiB,KAAM7ub,EAAY+sJ,EAAYohS,EAAQxtc,CAAK,EAChF,OAAO,eAAe,KAAMqf,EAAY4ub,CAAa,CACvD,CACF,EAAG,EAAK,aAAe,GAAM,EAAK,WAAa7hS,EAAYmhB,CAC7D,CAEA,IAAI4gR,GAAoBlkR,IAAS,QAE7BmkR,IAAoCjB,GAAU,qBAAqB,EACnEkB,GAA+BlB,GAAU,aAAa,EACtDmB,GAA6BnB,GAAU,YAAY,EACnDoB,GAAkCpB,GAAU,iBAAiB,EACjE,SAASqB,IAA2B,EAAgB,CAClD,IAAI9kc,EAAS+kc,EAAe,UAE5B,GAAIA,EAAeL,KAAuB,CACxC,IAAIM,EAAcC,GAAejlc,CAAM,EACvC,QAAQ,KAAK,iCAAmCglc,EAAc;oEAAwE,CACxI,KACE,GAAeN,KAAwB,GAGzC,GAAI1kc,EAAO,mBACT,MAAU,MAAM,gEAAgE,EAGlF,GAAI+kc,EAAeG,YAAiB3yV,gBAAe,CACjD,GAAI,CAACvyG,EAAO,sBACV,EAAO,sBAAwBmlc,SAC1B,GAAInlc,EAAO,wBAA0Bmlc,IAE1C,MAAU,MAAM,8EAA8E,CAElG,CAMAC,GAAmBplc,EAAQ,OAAO,EAClColc,GAAmBplc,EAAQ,OAAO,EAE9B+kc,EAAe,aACjBK,GAAmBplc,EAAQ,SAAS,EAGtC,IAAIqlc,EAAiBrlc,EAAO,OAE5B,GAAI,OAAOqlc,GAAmB,WAAY,CACxC,IAAIC,EAAeL,GAAejlc,CAAM,EAExC,MAAU,MAAM,iCAAmCslc,EAAe,uKAAiL,CACrP,CAoCA,MAlCA,GAAO,OAAS,UAAY,CAE1B,MADA,MAAK,OAASvD,GAAuB,EAAIsD,EAAiBE,IAAqB,KAAK,KAAMF,CAAc,EACjG,KAAK,OAAO,CACrB,EAEAvnX,IAAM99E,EAAQ,oBAAqB,UAAY,CAC7C,KAAK2kc,IAAmB,GAEnB,KAAK,OAAOF,KAGfruV,EAAA,UAAU,UAAU,YAAY,KAAK,IAAI,CAE7C,CAAC,EACDt4B,IAAM99E,EAAQ,uBAAwB,UAAY,CAChD,GAAI,IAAuB,EAI3B,KAAIyvL,EAAW,KAAK,OAAOg1Q,IAE3B,GAAIh1Q,EACFA,EAAS,QAAQ,EAEjB,KAAK,OAAOg1Q,IAAqB,SAC5B,CAEL,IAAIe,EAAgBP,GAAe,IAAI,EAEvC,QAAQ,KAAK,uDAAyDO,EAAgB;;sEAAuK,CAC/P,CAEA,KAAKb,IAAmB,EAbG,CAc7B,CAAC,EACMI,CACT,CAEA,SAASE,GAAe,EAAM,CAC5B,OAAOQ,EAAK,aAAeA,EAAK,MAAQA,EAAK,cAAgBA,EAAK,YAAY,aAAeA,EAAK,YAAY,OAAS,aACzH,CAEA,SAASF,IAAqB,EAAgB,CAC5C,IAAI77Q,EAAQ,KAMZg6Q,GAAc,KAAMkB,GAAe,EAAK,EAMxClB,GAAc,KAAMmB,GAAoB,EAAK,EAC7C,IAAIa,EAAcT,GAAe,IAAI,EACjCU,EAAsBN,EAAe,KAAK,IAAI,EAC9CO,EAAqB,GAErBC,EAAiB,UAA0B,CAC7C,IAAIp2Q,EAAW,IAAIjC,GAASk4Q,EAAc,YAAa,UAAY,CACjE,GAAI,CAACE,IAIH,EAAqB,GAEjBl8Q,EAAMi7Q,MAAqB,IAAM,CACnC,IAAImB,EAAW,GAEf,GAAI,CACFpC,GAAch6Q,EAAOm7Q,GAAoB,EAAI,EAExCn7Q,EAAMk7Q,KACTxuV,EAAA,UAAU,UAAU,YAAY,KAAKszE,CAAK,EAG5C,EAAW,EACb,QAAU,CACRg6Q,GAAch6Q,EAAOm7Q,GAAoB,EAAK,EAE1CiB,IACFr2Q,EAAS,QAAQ,EAEjB,EAAM,OAAOg1Q,IAAqB,KAEtC,CACF,CAEJ,CAAC,EAED,MADA,GAASsB,eAAoBr8Q,EACtB+F,CACT,EAEA,SAASu2Q,GAAiB,CAGxB,EAAqB,GAErB,IAAIv2Q,EAAoCu2Q,EAAevB,MAAsD,EAAeA,IAAqBoB,EAAe,GAC5Jhob,EAAY,OACZ4kb,EAAY,OAWhB,GAVAhzQ,EAAS,MAAM,UAAY,CACzB,GAAI,CAGF,EAAYw2Q,GAAmB,GAAON,CAAmB,CAC3D,OAAS,EAAG,CACV,EAAY,CACd,CACF,CAAC,EAEG9nb,EACF,MAAMA,EAGR,OAAO4kb,CACT,CAEA,OAAOuD,CACT,CAEA,SAASb,IAAY,EAAW,EAAW,CAczC,OAbIpD,GAAuB,GACzB,QAAQ,KAAK,iLAAiL,EAI5L,KAAK,QAAUn2M,GAQZ,CAAC9W,IAAa,KAAK,MAAO5gC,CAAS,CAC5C,CAEA,SAASkxP,GAAmB,EAAQ,EAAU,CAC5C,IAAIc,EAAiBzC,GAAU,aAAexuV,EAAW,cAAc,EACnEkxV,EAAgB1C,GAAU,aAAexuV,EAAW,aAAa,EAErE,SAASy7E,GAAU,CAKjB,OAJK,KAAKy1Q,IACRzC,GAAc,KAAMyC,EAAellR,GAAW,YAAchsE,CAAQ,CAAC,EAGhE,KAAKkxV,EACd,CAEA,OAAO,eAAenmc,EAAQi1G,EAAU,CACtC,aAAc,GACd,WAAY,GACZ,IAAK,UAAe,CAClB,IAAImxV,EAAgB,GAcpB,OAXIC,IAAyBC,KAC3B,EAAgBD,GAAsB,EAAI,GAG5C31Q,EAAQ,KAAK,IAAI,CAAC,CAAC,eAAe,EAG9B21Q,IAAyBC,IAC3Bh9Q,GAAoB88Q,CAAa,EAG5B,KAAKF,EACd,EACA,IAAK,SAAa,EAAG,CACf,CAAC,KAAKrB,KAAuB,CAAC/vN,IAAa,KAAKoxN,GAAiBrub,CAAC,GACpE6rb,GAAc,KAAMwC,EAAgBrub,CAAC,EACrC6rb,GAAc,KAAMkB,GAAe,EAAI,EACvCl0Q,EAAQ,KAAK,IAAI,CAAC,CAAC,cAAc,EACjCgzQ,GAAc,KAAMkB,GAAe,EAAK,GAExClB,GAAc,KAAMwC,EAAgBrub,CAAC,CAEzC,CACF,CAAC,CACH,CAMA,SAAS8uE,EAAS,EAAW,CAUzB,OATE8qE,EAAU80S,iBAAsB,IAClC,QAAQ,KAAK,4IAA4I,EAGvJ,OAAO,UAAU,cAAc,KAAKp0V,YAAWs/C,CAAS,GAAK,OAAO,UAAU,cAAc,KAAKl/C,gBAAek/C,CAAS,EAEpHqzS,IAA2BrzS,CAAS,EAGpC+0S,IAAW/0S,CAAS,CAE/B,CAmWA,GAAI,CAACt/C,YAAW,MAAU,MAAM,2CAA2C,EAC3E,GAAI,CAAC2vE,EAAY,MAAU,MAAM,0CAA0C,E,s1GCjyB9D2kR,GAAb,KAAaA,C,gCAWRp1U,E,EAAaq1U,qB,GAIbr1U,E,EAAas1U,c,GAIbt1U,E,EAAaM,S,GAQbN,E,EAAau1U,qB,GAIbv1U,E,EAAaw1U,a,IAKbtxV,IAAOo6D,K,KAAMm3R,qB,IAKbvxV,IAAOo6D,K,KAAMo3R,gB,IAKbxxV,IAAOo6D,K,KAAMq3R,gB,IAIbzxV,IAAOo6D,K,KAAMs3R,iB,IAMb1xV,IAAOo6D,K,KAAMu3R,c,IAKb3xV,IAAOo6D,K,KAAMw3R,gB,IAKb5xV,IAAOo6D,K,KAAMy3R,gB,IAKb7xV,IAAOo6D,K,KAAM03R,kB,KAtEdzwc,iBAA0C,IAAIkZ,KAE9C,YAAY42b,EAAoC,GAAI,CAChDzyQ,EAAwC,KAAM,CAAEr9L,MAAOkrL,CAAW,GAElE,IAAK,IAAMhqL,KAAQ4uc,EACf,KAAK9vc,MAAMsZ,IAAIpY,EAEvB,CAEA,IAAc4uc,qBAAoC,CAC9C,MAAO,CAAI,QAAK9vc,KAAK,CACzB,CAEA,IAAc+vc,cAAwB,CAClC,OAAO,KAAKC,oBAAsB,CACtC,CAEA,IAAcj1U,SAAmB,CAC7B,OAAO,KAAK/6H,MAAMia,OAAS,CAC/B,CAEAlV,IAAI+jc,EAAiC,CACjC,OAAO,KAAK9oc,MAAM+E,IAAI+jc,EAC1B,CAEA,IAAckH,qBAA8B,CACxC,OAAO,KAAKhwc,MAAMia,IACtB,CAEA,IAAcg2b,aAA+B,CACzC,OAAO,IAAI/2b,IAAI,KAAKlZ,KAAK,CAC7B,CAGckwc,oBAAoBQ,EAAiC,CAE/D,OADA,KAAKN,eAAA,EACE,KAAKD,eAAeO,EAC/B,CAEcP,eAAeO,EAAiC,CAC1D,IAAK,IAAMxvc,KAAQwvc,EAAa,KAAKJ,aAAapvc,GAClD,OAAO,IACX,CAEckvc,gBAAuB,CACjC,KAAKpwc,MAAM85W,MAAA,CACf,CAEcu2F,gBAAgBvH,EAA8B,CACxD,OAAO,KAAK9oc,MAAM+E,IAAI+jc,GAChB,KAAKyH,eAAezH,GACpB,KAAKwH,aAAaxH,EAC5B,CAEcwH,aAAaxH,EAA8B,CAErD,OADA,KAAK9oc,MAAMsZ,IAAIwvb,GACR,IACX,CAEcyH,eAAezH,EAA8B,CAEvD,OADA,KAAK9oc,MAAM2wc,OAAO7H,GACX,IACX,CAEc0H,eAAeE,EAAiC,CAC1D,IAAK,IAAMxvc,KAAQwvc,EAAa,KAAKJ,aAAapvc,GAClD,OAAO,IACX,CAEcuvc,iBAAiBC,EAAiC,CAC5D,IAAK,IAAMxvc,KAAQwvc,EAAa,KAAKH,eAAervc,GACpD,OAAO,IACX,CACJ,EClEM0vc,IAAN,cAAmChkT,EAAW,CAAC,EAClCikT,IAAb,cAAuCjkT,EAAW,CAAC,EAC7CkkT,IAAN,cAAiClkT,EAAW,CAAC,EACvCmkT,IAAN,cAAyCnkT,EAAW,CAAC,EAC/CokT,IAAN,cAAoCpkT,EAAW,CAAC,EAC1CqkT,IAAN,cAAqCrkT,EAAW,CAAC,EAC3CskT,IAAN,cAAyCtkT,EAAW,CAAC,EAC/CukT,IAAN,cAAoCvkT,EAAW,CAAC,EAC1CwkT,IAAN,cAAmDxkT,EAAW,CAAC,EAClDykT,IAAb,cAAuCzkT,EAAW,CAAC,EAC7C0kT,IAAN,cAAqC1kT,EAAW,CAAC,EAC3C2kT,IAAN,cAAuC3kT,EAAW,CAAC,EACtC4kT,IAAb,cAAiC5kT,EAAW,CAAC,EACvC6kT,IAAN,cAAsC7kT,EAAW,CAAC,EAC5C8kT,IAAN,cAA4B9kT,EAAW,CAAC,EAClC+kT,IAAN,cAAsC/kT,EAAW,CAAC,EAC5CglT,IAAN,cAAmChlT,EAAW,CAAC,EACzCilT,IAAN,cAAmCjlT,EAAW,CAAC,EAGlCklT,IAAb,cAA6CllT,EAAW,CAAC,EAE5CmlT,GAAkB,CAC3B,qBAAsB,IAAInB,IAC1B,kBAAmB,IAAIC,IACvB,mBAAoB,IAAIC,IACxB,2BAA4B,IAAIC,IAChC,sBAAuB,IAAIC,IAC3B,uBAAwB,IAAIC,IAC5B,2BAA4B,IAAIC,IAChC,sBAAuB,IAAIC,IAC3B,wBAAyB,IAAIW,IAC7B,qCACI,IAAIV,IACR,kBAAmB,IAAIC,IACvB,uBAAwB,IAAIC,IAC5B,yBAA0B,IAAIC,IAC9B,YAAa,IAAIC,IACjB,wBAAyB,IAAIC,IAC7B,cAAe,IAAIC,IACnB,wBAAyB,IAAIC,IAC7B,qBAAsB,IAAIC,IAC1B,qBAAsB,IAAIC,GAC9B,EAIaG,GAAyB,GAClC,EAAEjma,aAAgB6gH,IAETqlT,GACT,GAEAvyc,IAAU,QAAasyc,GAAgBtyc,CAAK,EAEnCwyc,KACT,EACA,IACoBF,GAAgBjma,CAAI,EAAIA,EAAOwyE,EC5DvD,SAAgB4zV,IACZ,EACwC,CAGxC,OAAOt1S,GAAYJ,GAAgBryB,EAAI,OAAO,CAAC,EACzC0iB,GAAe,IACfA,GAAe,IACzB,CAEA,SAAgBslT,GAAmC,EAA0B,CACzE,MAAO,GAAG1jT,EAAK,cACnB,CAEA,SAAgB2jT,GACZ,EACM,CACN,MAAO,GAAG3jT,EAAK,mBACnB,CAEA,SAAgB4jT,IAAoC,EAA0B,CAC1E,MAAO,GAAG5jT,EAAK,eACnB,CAEA,IAAa6jT,GAAuB,GAChC,GAAGhwR,EAAW,cAElB,SAAgBiwR,GACZ,EACA,EACU,CACV,IAAMC,EAAmBL,GAAmC1jT,CAAI,EAEhE,OADI3iB,EAAM,IAAI0mU,CAAgB,EAAUA,EACjC1mU,EAAM,WAAW,IAC5B,CAEA,SAAgB2mU,IACZ,EACA,EACU,CACV,IAAMC,EAAwBN,GAAwC3jT,CAAI,EAE1E,OADI3iB,EAAM,IAAI4mU,CAAqB,EAAUA,EACtC5mU,EAAM,WAAW,IAC5B,CAEA,SAAgB6mU,IACZ,EACA,EACsB,CACtB,IAAMC,EAAoBP,IAAoC5jT,CAAI,EAClE,GAAI3iB,EAAM,IAAI8mU,CAAiB,EAAG,OAAOA,CAE7C,CAEA,SAAgBC,GACZ,EACA,EAAOzlT,GAAgB,WACV,CAGb,MAAO,CACH,GAAG0lT,EACH,OACA,KAAM,OACN,UAAW,OACX,QAAS,CACL,GAAGA,EAAU,QACb,KAAM,OACN,UAAW,OACX,aAAc,OACd,iBAAkB,OAClB,iBAAkB,MACtB,CACJ,CACJ,C,y2GClCsBC,GAAtB,KAAsBA,C,+BA4BjBpnS,E,EAAUqnS,W,GAIVrnS,E,EAAUsnS,c,GAIVtnS,E,EAAUunS,qB,GAMVvnS,E,EAAUuwM,sB,GAIVvwM,E,EAAUwnS,e,GAIVxnS,E,EAAU/H,W,GAIV+H,E,EAAUynS,mB,GAIVznS,E,EAAUlP,S,GAIVkP,E,EAAUjP,c,GAwDViP,E,EAAUoK,c,GAMVpK,E,EAAU0nS,uB,GAIV1nS,E,EAAU2nS,4B,GAIV3nS,E,EAAUgL,kB,GAIVhL,E,EAAU4K,uB,GAIV5K,E,EAAU92I,M,GAKV82I,E,EAAUmF,W,GAoBVnF,E,EAAU4nS,a,GA+BV5nS,E,EAAU4zM,a,GAIV5zM,E,EAAU7wC,S,GAIV6wC,E,EAAU1qK,M,GAIV0qK,E,EAAU6nS,c,GAIV7nS,E,EAAUwiS,a,GAUVxiS,E,EAAU8nS,qB,GASV9nS,E,EAAU+nS,0B,GAUV/nS,E,EAAUgoS,W,GAIVhoS,E,EAAUioS,a,GAKVjoS,E,EAAUivK,8B,GAMVjvK,E,EAAUld,M,GAIVkd,E,EAAUkoS,iB,GAkCVloS,E,EAAUywK,c,GAIVzwK,E,EAAUgyI,Y,GAUVhyI,E,EAAUmoS,iB,GASVnoS,E,EAAUooS,4B,GAKVpoS,E,EAAUqoS,iB,GASVroS,E,EAAUz9I,Q,GAWVy9I,E,EAAUsoS,wB,GAIVtoS,E,EAAUuoS,oB,GAIVvoS,E,EAAUwoS,6B,GAIVxoS,E,EAAUyoS,yB,GAIVzoS,E,EAAU0oS,e,GASV1oS,E,EAAU2oS,yB,GAIV3oS,E,EAAU4oS,gB,GASV5oS,E,EAAUpM,U,GAIVoM,E,EAAUnM,U,GAIVmM,E,EAAU6oS,gB,GAKV7oS,E,EAAUvM,W,GAIVuM,E,EAAU8oS,U,GAIV9oS,E,EAAU+oS,iB,GAiBV/oS,E,EAAkBgpS,U,GAIlBhpS,E,EAAUipS,c,GAIVjpS,E,EAAUuN,S,GAIVvN,E,EAAUqN,S,GAIVrN,E,EAAUkpS,iB,GAIVlpS,E,EAAkBmpS,gB,GAWlBnpS,E,EAAUopS,U,GAiBVppS,E,EAAUqpS,sB,GAOVrpS,E,EAAUspS,4B,GAgBVtpS,E,EAAUupS,c,GASVvpS,E,EAAUwpS,0B,GAgBVxpS,E,EAAUypS,kC,GAmBVzpS,E,EAAU0pS,yB,KAhhBXlrU,IACA2B,MAEA,YAAYA,EAAmB3B,EAAe,C,UAC1C,KAAK2B,MAAQA,EACb,KAAK3B,IAAMA,CACf,CAIAsE,MAAMrvI,EAAmB,CACrB,OAAOA,CACX,CAGAk2c,cAIE,CACE,OAAO,KAAKxpU,MAAMypU,YAAA,CACtB,CAEA,IAAWvC,WAAqB,CAC5B,OAAO,gBAAgBwC,EAC3B,CAEA,IAAWvC,cAAwB,CAC/B,OAAO,gBAAgBwC,EAC3B,CAEA,IAAWvC,qBAA+B,CACtC,OAAO,gBAAgBwC,EAC3B,CAIA,IAAWx5F,sBAA+B,CACtC,OAAO,KAAKz/M,SAASk5S,kBAAoB,CAC7C,CAEA,IAAWxC,eAAyB,CAChC,MAAO,EACX,CAEA,IAAWvvS,WAAoB,CAC3B,OAAO,KAAKnH,SAASmH,WAAa,KAAKz5B,IAAIy5B,WAAa,CAC5D,CAEA,IAAWwvS,mBAAmD,CAC1D,OAAO,KAAKjpU,IAAIipU,iBACpB,CAEA,IAAW32S,SAA0D,CACjE,OAAO,KAAKtyB,IAAIsyB,OACpB,CAEA,IAAWC,cAA6B,CACpC,OAAOF,GAAgB,KAAKC,OAAO,CACvC,CAOAm5S,kCACIn2c,EACAyG,EACM,CACN,OAAO,KAAKuqK,YAAYhxK,EAAOyG,EACnC,CAEAo1U,iBAAiB77U,EAAgByG,EAAyC,CACtE,OAAO,KAAKuqK,YAAYhxK,EAAOyG,EACnC,CAEA2vc,gBAAgBp2c,EAAgByG,EAAyC,CACrE,OAAO,KAAKuqK,YAAYhxK,EAAOyG,EACnC,CAEA4vc,cAAcr2c,EAAgByG,EAAyC,CACnE,OAAO,KAAKo1U,iBAAiB77U,EAAOyG,EACxC,CAGA6vc,aAAat2c,EAAwB,CACjC,OAAOuhK,IAAUuF,GAAY9mK,GACjC,CAEAu2c,WAAW9la,EAAsB,CAC7B,OAAO,KAAKgka,mBAAmBzjS,YAAYvgI,EAC/C,CAEA+la,gBAAgB/la,EAAsB,CAClC,OAAO,KAAK8la,WAAW9la,EAC3B,CAGAgma,mBAAmBhma,EAAsB,CACrC,OAAO,KAAK+la,gBAAgB/la,EAChC,CAGAima,gBAAgB91a,EAAmBC,EAAyB,CACxD,MAAO,GAAG,KAAK01a,WAAW31a,GAAW,MAAM,KAAK21a,WAAW11a,IAC/D,CAGA81a,qBAAqB/1a,EAAmBC,EAAyB,CAC7D,MAAO,GAAG,KAAK01a,WAAW31a,GAAW,OAAO,KAAK21a,WAAW11a,IAChE,CAEA,IAAWy1I,cAAyC,CAChD,OACI,KAAKtZ,SAASsZ,cAAgB5rB,GAAyBixL,aAE/D,CAEA,IAAWi4H,uBAAiC,CACxC,OAAO,KAAKt9R,eAAiB5rB,GAAyBixL,aAC1D,CAEA,IAAWk4H,4BAAsC,CAC7C,OAAO,KAAKv9R,eAAiB5rB,GAAyBksT,kBAC1D,CAEA,IAAW1/R,kBAA2B,CAClC,OAAO,KAAKla,SAASka,kBAAoB,CAC7C,CAEA,IAAWJ,uBAAgC,CACvC,OAAO,KAAK9Z,SAAS8Z,uBAAyB,CAClD,CAEA,IAAW1hJ,MAA2B,CAElC,OADa,KAAK4nI,SAAS5nI,MAAQ,KAAKs1G,IAAIt1G,OAC/BqyG,MACjB,CAEA,IAAW4pC,WAAgC,CACvC,IAAMA,EACF,KAAKrU,SAASqU,WAAa,KAAK3mC,IAAI2mC,WAAa5lB,OACrD,GAAI4lB,IAAc5lB,OAAW,OAAO4lB,EAEpC,IAAMj8I,EAAO,KAAKA,KAElB,GAAKA,EAEL,IAAIA,EAAK3tB,OAAS,EAAG,OAAO2tB,EAC5B,GAAI8gJ,GAAqB9gJ,EAAK,EAAE,EAAG,OAAOA,EAAK,EADnBA,CAIhC,CAOA,IAAW0+a,aAAkC,CAGzC,IAAMA,EADa,KAAK1+a,OAAS,KAAKi8I,UACQ5lB,OAAZ,KAAKr2H,KAOvC,OAJqB0+a,EACf7iS,GAAsB6iS,GACtBroT,MAGV,CAIAorT,yBACIC,EACsC,CACtC,IAAMn+b,EAAM,IAAIH,IACViW,EAAS,KAAKA,OASpB,OAJAsob,KAJyB1qU,MAAM2qU,mBAC3BF,EACA,KAAKvC,eAETwC,EAAYt9b,SAASw9b,EAAUzvc,KACtBmR,EAAItT,IAAI4xc,IAAWt+b,EAAIxT,IAAI8xc,EAAU,IAAIz9b,KAC9Cb,EAAIvT,IAAI6xc,GAAWr9b,IAAI6U,EAAOjnB,EAAM,CACxC,GACOmR,CACX,CAEA,IAAWmnW,aAAkC,CACzC,OAAO,KAAKp1O,IAAIo1O,WACpB,CAEA,IAAWzkP,SAAmB,CAC1B,OAAO,KAAKi5U,2BAA2B7sc,SAAW,CACtD,CAEA,IAAWjG,MAAe,CACtB,OAAO,KAAKkpI,IAAIlpI,MAAQ,KAAKkpI,IAAIskB,IACrC,CAEA,IAAW+kT,cAAuB,CAC9B,OAAO,KAAKrpU,IAAIlpI,MAAQ,KAAKkpI,IAAIskB,IACrC,CAEA,IAAW0/S,aAAsB,CAC7B,OACI,KAAK1xS,SAASx7J,MAEd,KAAKkpI,IAAIwsU,cAAcC,aACvB,KAAK31c,MACL,EAER,CAEA,IAAWwyc,qBAA8B,CACrC,OACI,KAAKh3S,SAASx7J,MAEd,KAAKkpI,IAAIwsU,cAAcC,aACvB,KAAKpD,YAEb,CAEA,IAAWE,0BAAwD,CAC/D,OAAO,KAAKvpU,IAAIwsU,cAAcC,YACxB,CACItnT,MAAO,KAAKnlB,IAAIwsU,cAAcC,YAC9B3sT,iBAAkB,KAAK9f,IAAIwsU,cAAc1sT,iBACzCC,aAAc,KAAK/f,IAAIwsU,cAAczsT,YACzC,EACA,CAAEoF,MAAO,KAAKmN,SAASx7J,MAAQ,KAAKA,MAAQ,EAAG,CACzD,CAEA,IAAW0yc,WAAgC,CACvC,OAAO,KAAKxpU,IAAIwpU,SACpB,CAEA,IAAWC,aAAkC,CACzC,OAAO,KAAKzpU,IAAIypU,WACpB,CAGA,IAAWh5H,8BAA0C,CACjD,OAAO91K,MAAMxnI,KACT,IAAIrkB,IAAI,KAAKiV,OAAO0hC,OAAOovG,GAAU,EAAEpvG,OAAQznD,GAAMA,KACvDkL,KAAA,CACN,CAEA,IAAWo7I,MAAe,CACtB,OAAO,KAAKtkB,IAAIskB,IACpB,CAEA,IAAWolT,iBAAsC,CAC7C,IAAMz7b,EAAM,IAAIH,IAKhB,OAJA,KAAK87b,2BAA2B76b,SAASzZ,EAAOwH,KACvCmR,EAAItT,IAAIrF,IAAQ2Y,EAAIxT,IAAInF,EAAO,EAAE,EACtC2Y,EAAIvT,IAAIpF,GAAQyI,KAAKjB,EACzB,GACOmR,CACX,CAEAy+b,aAAap3c,EAAiC,CAE1C,OAAOy3C,IAAE,IADO4tH,MAAMrjD,QAAQhiH,GAASA,EAAQ,CAACA,CAAK,EAE9Cq3c,CACE1+b,IAAKhZ,GAAQ,KAAKy0c,gBAAgBhvc,IAAIzF,IACtCwwD,OAAOsiF,IAEpB,CAGA6kU,aAAat3c,EAAyB,CAYlC,MADA,EATI,KAAK0qI,IAAI6sU,aAGT,KAAK7sU,IAAInkB,WAGTvmH,aAAiBktJ,IAGjB,OAAOltJ,IAAU,KAAKw3c,OAE9B,CAEA,IAAW76H,cAAwB,CAC/B,MAAO,CAAC,CAAC,KAAK3/K,SAAS2/K,YAC3B,CAEA,IAAWz+B,YAAwB,CAC/B,IAAM/4S,EAAM,KAAKkvc,gBAGXltb,EAAUk+I,MAAMlgK,EAAIoV,IAAI,EAC1B7R,EAAI,EAER,OADAvD,EAAIsU,QAAS9Z,GAASwnB,EAAIze,KAAO/I,GAC1BwnB,CACX,CAEA,IAAWktb,iBAAgC,CACvC,OAAO,IAAI76b,IAAI,KAAKiV,MAAM,CAC9B,CAOA,IAAW6lb,4BAA8C,CACrD,GAAM,CAAEjoU,QAAO2iB,QAAS,KACxB,OAAO3iB,EAAMhnI,IAAI2pJ,GAAQ3iB,EAAMorU,YAAYzoT,GAAQ,EACvD,CAEA,IAAWulT,iBAA4B,CACnC,IAAMmD,EAAoB,GAC1B,IAAK,IAAIhvc,EAAI,EAAGA,EAAI,KAAK4rc,2BAA2B7sc,OAAQiB,IAAK,CAC7D,IAAM1I,EAAQ,KAAKs0c,2BAA2B5rc,GAC1C4pc,GAAgBtyc,IAAQ03c,EAAQjvc,KAAKC,EAC7C,CACA,OAAOgvc,CACX,CAEA,IAAWjpb,QAAoB,CAC3B,IAAMA,EAAoB,GAG1B,IAAK,IAAI/lB,EAAI,EAAGA,EAAI,KAAK4rc,2BAA2B7sc,OAAQiB,IAAK,CAC7D,IAAM1I,EAAQ,KAAKs0c,2BAA2B5rc,GAC1C4pc,GAAgBtyc,IAAQyuB,EAAOhmB,KAAKzI,EAC5C,CACA,OAAOyuB,CACX,CAEA,IAAW+lb,wBAAiC,CACxC,OAAO1B,GAA0B,KAAKzmU,MAAO,KAAK2iB,IAAI,CAC1D,CAEA,IAAWylT,oBAAiC,CACxC,OAAO,KAAKpoU,MAAMjnI,IAAI,KAAKovc,sBAAsB,CACrD,CAEA,IAAWE,6BAAsC,CAC7C,OAAO1B,IAA+B,KAAK3mU,MAAO,KAAK2iB,IAAI,CAC/D,CAEA,IAAW2lT,yBAAsC,CAC7C,OAAO,KAAKtoU,MAAMjnI,IAAI,KAAKsvc,2BAA2B,CAC1D,CAEA,IAAWE,eAA0B,CACjC,GAAM,CAAEJ,0BAA2B,KAEnC,OADKA,EACE,KAAKnoU,MAAM2qU,mBACdxC,EACA,KAAKD,eACT,EAJoC,EAKxC,CAEA,IAAWM,yBAA8C,CACrD,OAAO3B,IAA2B,KAAK7mU,MAAO,KAAK2iB,IAAI,CAC3D,CAEA,IAAW8lT,gBAA4B,CACnC,GAAM,CAAED,2BAA4B,KAEpC,OADKA,EACE,KAAKxoU,MAAM2qU,mBACdnC,EACA,KAAKN,eACT,EAJqC,EAKzC,CAEA,IAAWz0S,UAAgC,CACvC,OAAOroH,GAAM,KAAKhpB,MAAM,CAC5B,CAEA,IAAWsxI,UAAgC,CACvC,OAAOtoH,GAAM,KAAKhpB,MAAM,CAC5B,CAEA,IAAWsmb,gBAAyB,CAChC,OAAO,KAAKT,2BAA2B7sc,OAAS,KAAKk4J,SACzD,CAGA,IAAWA,WAAoB,CAC3B,OAAO,KAAKlxI,OAAOhnB,MACvB,CAEA,IAAWutc,UAAmB,CAC1B,OAAO,KAAKX,gBAAgB95b,IAChC,CAEA,IAAW06b,iBAA6B,CACpC,IAAMxmb,EAAS,KAAKA,OAAO+sI,MAAA,EAC3B,OAAO,KAAKg8S,SAAW,SAAW/ob,EAAO7a,KAAA,EAASwxJ,GAAY32I,EAClE,CAEA,IAAIhlB,QAAqB,CACrB,GAAM,CAAEihI,OAAQ,KAChB,MAAO,CACHlpI,KAAMkpI,EAAIitU,WACVp2a,KAAMmpG,EAAIktU,WACVt3F,gBAAiB51O,EAAI41O,gBACrBu3F,oBAAqBntU,EAAImtU,oBACzBC,cAAeptU,EAAIotU,cACnBC,eAAgBrtU,EAAIqtU,cACxB,CACJ,CAEA,IAAmB7C,UAAmB,CAClC,OAAO,KAAK7oU,MAAM2rU,kBAAkB,KAAKzD,eAAe,CAC5D,CAEA,IAAWY,cAAuB,CAC9B,OAAO/vS,GAAY3tH,GAAO,KAAKy9Z,QAAQ,EAC3C,CAEA,IAAWz7R,SAAgB,CACvB,OAAOhiI,GAAM,KAAKy9Z,QAAQ,CAC9B,CAEA,IAAW37R,SAAgB,CACvB,OAAO9hI,GAAM,KAAKy9Z,QAAQ,CAC9B,CAEA,IAAWE,iBAAgC,CACvC,OAAO39Z,GAAO,KAAK49Z,cAAc,CACrC,CAEA,IAAmBA,gBAA+B,CAI9C,OAFK,KAAKQ,aAAA,EAEH,KAAKxpU,MAAM2qU,mBACd,KAAK3qU,MAAM4rU,eACX,KAAK1D,eACT,EALiC,EAMrC,CAGA,IAAWe,UAAuC,CAC9C,IAAM4C,EAAW,KAAK7C,eAChB8C,EAAQ,KAAKjD,SACbzmb,EAAS,KAAKA,OACdmmb,EAAgB,KAAKA,cACrBE,EAAiB,KAAKA,eAC5B,OAAOr9Z,GAAQ,EAAGm9Z,EAAcntc,MAAM,EAAEkR,IAAKnR,GAClCuiK,GAAoB,CACvBq/R,WAAY8O,EAAS1wc,GACrBipC,KAAM0na,EAAM3wc,GACZxH,MAAOyuB,EAAOjnB,GACd4wc,aAAcxD,EAAcptc,GAC5B6wc,cAAevD,EAAettc,EAClC,EACJ,CACJ,CAEA,IAAW+tc,sBAGT,CACE,OAAO/8b,IAAI0iH,QAAQ,KAAKo6U,SAAWhvR,GAAQA,EAAI8iR,UAAU,CAC7D,CAEA,IAAWoM,4BAGT,CACE,IAAM8C,EAA2B,IAAI9/b,IASrC,OALA,KAAK88b,SAAS77b,QAAS6sK,IACdgyR,EAAyBjzc,IAAIihL,EAAI8iR,UAAU,GAC5CkP,EAAyBnzc,IAAImhL,EAAI8iR,WAAY,IAAI5wb,KACrD8/b,EAAyBlzc,IAAIkhL,EAAI8iR,UAAU,EAAGjkc,IAAImhL,EAAI71I,KAAM61I,EAChE,GACOgyR,CACX,CAEA,IAAW7C,cAAqC,CAC5C,IAAM98b,EAAM,IAAIH,IAKhB,OAJA,KAAK88b,SAAS77b,QAAS6sK,IACd3tK,EAAItT,IAAIihL,EAAI71I,IAAI,GAAG93B,EAAIxT,IAAImhL,EAAI71I,KAAM,EAAE,EAC5C93B,EAAIvT,IAAIkhL,EAAI71I,IAAI,EAAGhoC,KAAK69K,EAAItmL,KAAK,CACrC,GACO2Y,CACX,CAEA,IAAW+8b,0BAAgE,CACvE,IAAMA,EAA2B,IAAIl9b,IAWrC,OAPA,KAAK88b,SAAS77b,QAAS6sK,IACdovR,EAAyBrwc,IAAIihL,EAAI71I,IAAI,GACtCila,EAAyBvwc,IAAImhL,EAAI71I,KAAM,IAAIj4B,KAC/Ck9b,EACKtwc,IAAIkhL,EAAI71I,IAAI,EACZtrC,IAAImhL,EAAI8iR,WAAY9iR,EAAItmL,KAAK,CACtC,GACO01c,CACX,CAGA,IAAWC,kCAGT,CACE,IAAM2C,EAA2B,IAAI9/b,IAWrC,OAPA,KAAK88b,SAAS77b,QAAS6sK,IACdgyR,EAAyBjzc,IAAIihL,EAAI8iR,UAAU,GAC5CkP,EAAyBnzc,IAAImhL,EAAI8iR,WAAY,IAAI5wb,KACrD8/b,EACKlzc,IAAIkhL,EAAI8iR,UAAU,EAClBjkc,IAAImhL,EAAI8xR,aAAc9xR,EAAItmL,KAAK,CACxC,GACOs4c,CACX,CAGA,IAAW1C,yBAAoD,CAC3D,IAAMj9b,EAAM,IAAIH,IAEVw4b,EAAc,KAAKqE,eACnB5mb,EAAS,KAAKA,OAIpB,IAAK,IAAI/lB,EAAI,EAAGA,EAAI+lB,EAAOhnB,OAAQiB,IAC/BiQ,EAAIxT,IAAI6rc,EAAYtoc,GAAI+lB,EAAO/lB,EAAE,EAGrC,OAAOiQ,CACX,CACJ,EAOao9b,GAAb,cAGUzC,GACNkE,OAASzqT,GAAQ3iJ,OAEjB4mK,aAAsB,CAClB,MAAO,EACX,CACJ,EAEMunS,GAAN,cAGUjF,GACNkE,OAASzqT,GAAQ3iJ,OAEjB4mK,YAAYhxK,EAAwB,CAChC,OAAO8mK,GAAY9mK,EACvB,CAEAgvI,MAAervI,EAAmB,CAG9B,OAFIA,IAAQ,KAAa0yc,GAAgBZ,sBACrC9xc,IAAQ8rJ,OAAkB4mT,GAAgBb,2BACvCzqS,OAAOpnK,IAAQ,EAC1B,CACJ,EAEM64c,IAAN,cAGUD,GAAoC,EACxCE,GAAN,cAGUF,GAAoC,EAExCG,IAAN,cAGUD,G,+BACLvsS,E,EAAUysS,qB,GAIVzsS,E,EAAmBivK,8B,uBARxB,SAAA71T,CAAA,EAAAszb,IAAA,K,CAII,IAAWD,qBAA4C,CACnD,OAAO,KAAKjuU,IAAI92H,IACpB,CAEA,IAAoBunU,8BAAyC,CACzD,OAAO,KAAKw9H,oBACN,KAAKA,oBACL,MAAMx9H,4BAChB,CACJ,EAEM09H,IAAN,cAGUH,IAAqC,EACzCI,IAAN,cAGUD,IAAoC,EACxCE,IAAN,cAGUN,GAAyC,EAE7CO,IAAN,cAGU1F,GACNkE,OAASzqT,GAAQjd,QAEjBkhC,YAAYhxK,EAAkC,CAC1C,OAAOA,EAAQ,OAAS,OAC5B,CAEAgvI,MAAervI,EAAuB,CAClC,MAAO,CAAC,CAACA,CACb,CACJ,EAEes2c,GAAf,cAIU3C,G,+BAyDLpnS,E,EAAmBwnS,e,KAxDpB8D,kBAASzqT,GAAQ7lJ,QAEjB8pK,YAAYhxK,EAAgByG,EAAyC,CASjE,OARIgxC,GAAWz3C,GACJgxK,GAAYhxK,EAAO,CACtBs2K,aAAc,KAAKA,aACnBY,iBAAkB,KAAKA,iBACvBJ,sBAAuB,KAAKA,sBAC5B,GAAGrwK,CACP,GAEG,EACX,CAEA0vc,kCACIn2c,EACAyG,EACM,CACN,OAAO,MAAM0vc,kCAAkCn2c,EAAO,CAClDu2K,mBAAoB,QAEpB,GAAGxM,GAAoB,CACnB30I,KACI,KAAKi8I,YAAc5lB,QACnByqB,GAAqB,KAAK7E,SAAS,EAC7B,KAAKA,UACL5lB,MACd,GACA,GAAGhlJ,CACP,EACJ,CAEAo1U,iBACI77U,EACAyG,EACM,CACN,OAAO,MAAMo1U,iBAAiB77U,EAAO,CACjC,GAAG+pK,GAAoB,CACnB30I,KAAM,KAAKi8I,SACf,GACA,GAAG5qK,CACP,EACJ,CAEA2vc,gBACIp2c,EACAyG,EACM,CACN,OAAO,MAAM2vc,gBAAgBp2c,EAAO,CAChC,GAAG+pK,GAAoB,CACnB30I,KAAM,KAAKA,IACf,GACA,GAAG3uB,CACP,EACJ,CAEA,IAAoBitc,eAAyB,CACzC,OAAO,KAAKjlb,OAAO0/I,MACdxuK,GAAQ,OAAOA,GAAQ,UAAYA,EAAM,GAAM,EAExD,CACJ,EAWMs5c,IAAN,cAGUhD,GAKNjlS,YACIhxK,EACAyG,EACM,CAIN,OAHIgxC,GAAWz3C,GACJ,MAAMgxK,YAAYhxK,EAAOyG,GAE7BqgK,GAAY9mK,EACvB,CACAgvI,MAAervI,EAA4C,CACvD,GAAIA,IAAQ,KAAM,OAAO0yc,GAAgBf,sBACzC,GAAI3xc,IAAQ8rJ,OAAW,OAAO4mT,GAAgBhB,2BAC9C,GAAItzS,OAAOU,MAAM9+J,GAAM,OAAO0yc,GAAgBnB,qBAE9C,IAAMgI,EAAcnyS,OAAOpnK,GACrBi/J,EAAMiI,WAAWqyS,GAGvB,OAFIn7S,OAAOU,MAAMG,GAAas6S,EAEvBt6S,CACX,CACJ,EAEeu6S,IAAf,cAGUlD,GACNjnU,MAAervI,EAAmC,CAC9C,GAAIA,IAAQ,KAAM,OAAO0yc,GAAgBf,sBACzC,GAAI3xc,IAAQ8rJ,OAAW,OAAO4mT,GAAgBhB,2BAC9C,GAAI1xc,IAAQ,GAAI,OAAO0yc,GAAgBd,uBACvC,GAAI9yS,MAAMV,OAAOp+J,IAAO,OAAO0yc,GAAgBnB,qBAE/C,IAAMv8a,EAAM,KAAKykb,OAAOz5c,GAIxB,OAHI8+J,MAAM9pI,GACC09a,GAAgBX,qCAEpB/8a,CACX,CAEAykb,OAAiBz5c,EAAsB,CACnC,OAAOknK,WAAWE,OAAOpnK,GAC7B,CACJ,EAEM05c,GAAN,cAGUF,IAA6C,EACjDG,IAAN,cAGUH,IAA6C,EAEjDI,IAAN,cAGUF,GACNroS,YACIhxK,EACAyG,EACM,CACN,OAAO,MAAMuqK,YAAYhxK,EAAO,CAC5Bk3K,iBAAkB,EAClB,GAAGzwK,CACP,EACJ,CAEA2yc,OAA0Bz5c,EAAsB,CAC5C,OAAOgnK,SAASI,OAAOpnK,GAC3B,CACJ,EAEM65c,IAAN,cAGUH,G,+BAaLntS,E,EAAmBmF,W,uBAhBxB,SAAA/rJ,CAAA,EAAAm0b,IAAA,K,CAIIzoS,YACIhxK,EACAyG,EACM,CACN,OAAO,MAAMuqK,YAAYhxK,EAAO,CAC5Bs2K,aAAc5rB,GAAyBixL,cACvCzkK,iBAAkB,EAClB9hJ,KAAM,KAAKi8I,UACX,GAAG5qK,CACP,EACJ,CAEA,IAAoB4qK,WAAoB,CACpC,MAAO,GACX,CACJ,EAGMqoS,GAAN,cAGUL,G,+BAYLntS,E,EAAmBmF,W,uBAfxB,SAAA/rJ,CAAA,EAAAq0b,IAAA,K,CAII3oS,YACIhxK,EACAyG,EACM,CACN,OAAO,MAAMuqK,YAAYhxK,EAAO,CAC5Bo1B,KAAM,KAAKi8I,UACX6F,iBAAkB,EAClB,GAAGzwK,CACP,EACJ,CAEA,IAAoB4qK,WAAoB,CACpC,MAAO,GACX,CACJ,EAIMuoS,IAAN,cAGUF,GAAwC,EAE5CG,IAAN,cAGUH,GACN1oS,YACIhxK,EACAyG,EACM,CACN,OAAO,MAAMuqK,YAAYhxK,EAAO,CAC5B02K,SAAU,GACV,GAAGjwK,CACP,EACJ,CACJ,EAEMqzc,IAAN,cAGUJ,GAAwC,EAC5CK,IAAN,cAGUV,GAAqC,EAGzCW,IAAN,cAGUV,IAAgD,EACpDW,IAAN,cAGUxB,GAAyC,EAC7CyB,IAAN,cAGUzB,GAAyC,EAG7BzC,GAAtB,cAGU1C,G,+BAYLpnS,E,EAAmBwiS,a,KAXpB8I,kBAASzqT,GAAQ7lJ,QASjBizc,aAAyB,EAEzB,IAAoBzL,aAAsB,CACtC,OAAOj3Z,GAAa,KAAKj2C,IAAI,CACjC,CAEA+0c,WAAoB9la,EAAsB,CACtC,OAAO,KAAKugI,YAAYvgI,EAC5B,CAEAu+F,MAAervI,EAAmC,CAC9C,OAAOgnK,SAASI,OAAOpnK,GAC3B,CAOAy6c,wBAAwBC,EAAiC,CACrD,OAAO/rS,IAAmB+rS,EAC9B,CAGAC,WAAW7pa,EAAY6V,EAAqB,CACxC,OAAO7V,EAAO6V,EAAQ,KAAK6zZ,YAC/B,CAGAI,aAAa35a,EAAiBC,EAAuB,CACjD,OAAOw7H,KAAKx1J,OAAOg6B,EAAUD,GAAa,KAAKu5a,YAAY,EAAI,CACnE,CAGAK,oBAAoB55a,EAAiBC,EAAuB,CACxD,OAAO0+H,GAAQ,EAAG,KAAKg7S,aAAa35a,EAAWC,IAAUloB,IAAKnR,GAC1D,KAAK8yc,WAAW15a,EAAWp5B,GAEnC,CACJ,EAEMizc,IAAN,cAGUzE,GACN0E,aAAe,OACfC,YAAc,KAEd,IAAa19S,cAA6B,CACtC,OAAOpS,GAAaqS,IACxB,CAEA8T,YAAYhxK,EAAuB,CAE/B,OAAOw+J,IAAWx+J,EACtB,CACJ,EAKM46c,IAAgBnja,GACjBz3C,GAA0B88J,GAAU98J,IAEnC66c,IAAmBpja,GACpBz3C,GAA0B88J,GAAU98J,EAAO,CAAE6nI,OAAQ,YAAa,IAEjEizU,IAAkBrja,GACnBz3C,GAA0B88J,GAAU98J,EAAO,CAAE6nI,OAAQ,UAAW,IAE/DkzU,IAAqBtja,GACtBz3C,GAA0B88J,GAAU98J,EAAO,CAAE6nI,OAAQ,SAAU,IAE9DmzU,IAAiBvja,GAAWz3C,GAEvB,WADQm8J,GAA4Bn8J,GAAOk8J,QAAQ,SACxC++S,EAAOpzU,OAAO,gBACpC,EACMqzU,IAAoBzja,GAAWz3C,IACjC,IAAMuwJ,EAAO4L,GAA4Bn8J,GACnCm7c,EAAKp0S,OAAOxW,EAAKnsB,QAAA,GAAWg3U,SAAS,EAAG,KAC9C,MAAO,GAAG7qT,EAAK8qT,YAAA,EAAc,IAAIF,GACrC,GACMG,IAAoB7ja,GAAWz3C,IACjC,IAAMuwJ,EAAO4L,GAA4Bn8J,GACzC,MAAO,IAAIuwJ,EAAKgrT,QAAA,EAAU,GAAGhrT,EAAKhL,KAAA,GACtC,GACMi2T,IAAuB/ja,GAAWz3C,IACpC,IAAMuwJ,EAAO4L,GAA4Bn8J,GACzC,MAAO,GAAGuwJ,EAAKhL,KAAA,EAAO,IAAIgL,EAAKgrT,QAAA,GACnC,GACME,IAAgBhka,GAAWz3C,GAC7Bs8J,GAA4Bx4B,GAAMK,IAAInkI,KAGpC07c,GAAN,cAGU1F,GACN0E,aAAe,MACfC,YAAc,KAEd,IAAa19S,cAA6B,CACtC,OAAOpS,GAAagT,GACxB,CAEAmT,YAAYhxK,EAAuB,CAC/B,OAAO46c,IAAc56c,EACzB,CAEAs2c,aAAsBt2c,EAAuB,CACzC,OAAO66c,IAAiB76c,EAC5B,CACJ,EACM27c,IAAN,cAGUD,GACN1sU,MAAervI,EAAsB,CAGjC,OADI,OAAOA,GAAQ,SAAiBA,EAC7B87c,IAAc10S,OAAOpnK,GAChC,CACJ,EASei8c,IAAf,cAGUF,GASNG,qBAA6Bpra,EAAoB,CAC7C,IAAM8/G,EAAO4L,GAA4B1rH,GACnCqra,EAAsBvrT,EAAKhL,KAAA,EAAS,GAAKgL,EAAK6N,MAAA,EACpD,OAAO/B,KAAKx1J,MAAMi1c,EAAsB,KAAKC,eAAe,CAChE,CAEAC,cAAsBH,EAAoC,CACtD,IAAMC,EAAsBD,EAAuB,KAAKE,gBAClDx2T,EAAO8W,KAAKx1J,MAAMi1c,EAAsB,IACxC19S,EAAQ09S,EAAsBv2T,EAAO,GAE3C,OAAO+W,GADMx4B,GAAMK,IAAIq4B,IAAkBjX,EAAM6Y,EAAO,EACnB7N,EACvC,CAEA+pT,WAAoB7pa,EAAY6V,EAAqB,CACjD,OAAO,KAAK01Z,cAAc,KAAKH,qBAAqBpra,GAAQ6V,EAChE,CAEAi0Z,aAAsB35a,EAAiBC,EAAuB,CAC1D,OACI,KAAKg7a,qBAAqBh7a,GAC1B,KAAKg7a,qBAAqBj7a,GAC1B,CAER,CAIA45a,oBAA6B55a,EAAiBC,EAAuB,CAGjE,OAAO0+H,GAFa,KAAKs8S,qBAAqBj7a,CAE/Bq7a,EADI,KAAKJ,qBAAqBh7a,CACjBq7a,EAAa,GAAGvjc,IAAKwjc,GAC7C,KAAKH,cAAcG,GAE3B,CAEA/B,wBAAiCC,EAA6B,CAI1D,OAAO/rS,IAAmB,CAAI8tS,OAHV5ic,IAChB6gc,EAAY1hc,IAAK83B,GAAS,KAAKora,qBAAqBpra,GAE1B2ra,CAAQ,GAAEzjc,IAAKwjc,GACzC,KAAKH,cAAcG,GAE3B,CACJ,EAqJaE,GAAgB,CACzBt1S,OAAQwxS,GACR+D,iBAAkB9D,IAClB+D,YAAa9D,GACb+D,QAAS9D,IACT+D,OAAQ5D,IACR6D,UAAW5D,IACX6D,eAAgB1D,IAChB2D,QAASvD,GACTx7S,IAAK69S,GACL/+S,KAAMg/S,IACNz+S,KAAMu9S,IACN78S,QAASi/S,cA5FHjB,IACNlB,aAAwB,UACxBC,YAAuB,KACvBoB,gBAA4B,EAE5B,IAAa9+S,cAA6B,CACtC,OAAOpS,GAAa+S,OACxB,CAEAoT,YAAqBhxK,EAAuB,CACxC,OAAOs7c,IAAkBt7c,EAC7B,CAEAs2c,aAAsBt2c,EAAuB,CACzC,OAAOw7c,IAAqBx7c,EAChC,CAGAw2c,gBAAyB/la,EAAsB,CAC3C,OAAO0rH,GAA4B1rH,GAC9ByrH,QAAQ,WACRr0B,OAAO,WAChB,CAGA4uU,mBAA4Bhma,EAAsB,CAC9C,OAAO0rH,GAA4B1rH,GAC9Bqsa,MAAM,WACNj1U,OAAO,WAChB,CAIA6uU,gBAAyB91a,EAAmBC,EAAyB,CACjE,MAAO,GAAG,KAAK21a,gBAAgB51a,GAAW,MAAM,KAAK61a,mBAAmB51a,IAC5E,CACJ,EAyDI88H,MAAOo/S,cA7JDnB,IACNlB,aAAwB,QACxBC,YAAuB,KACvBoB,gBAA4B,EAE5B,IAAa9+S,cAA6B,CACtC,OAAOpS,GAAa8S,KACxB,CAEAqT,YAAqBhxK,EAAuB,CACxC,OAAO86c,IAAgB96c,EAC3B,CAEAs2c,aAAsBt2c,EAAuB,CACzC,OAAO+6c,IAAmB/6c,EAC9B,CACJ,EA8II09J,KAAMs/S,cAvIAtB,GACNhB,aAAwB,OACxBC,YAAuB,KACvBR,aAAkC,EAElC,IAAal9S,cAA6B,CACtC,OAAOpS,GAAa6S,IACxB,CAEAsT,YAAqBhxK,EAAuB,CACxC,OAAOg7c,IAAeh7c,EAC1B,CAEAs2c,aAAsBt2c,EAAuB,CACzC,OAAOk7c,IAAkBl7c,EAC7B,CAGAw2c,gBAAyB/la,EAAsB,CAE3C,OADe0rH,GAA4B1rH,GAAMyrH,QAAQ,SAClD++S,EAAOpzU,OAAO,cACzB,CAGA4uU,mBAA4Bhma,EAAsB,CAE9C,OADe0rH,GAA4B1rH,GAAMqsa,MAAM,SAChDG,EAAOp1U,OAAO,cACzB,CAIA6uU,gBAAyB91a,EAAmBC,EAAyB,CACjE,MAAO,GAAG,KAAK21a,gBAAgB51a,GAAW,MAAM,KAAK61a,mBAAmB51a,IAC5E,CACJ,EAsGI09H,OAAQ2+S,MAxDNA,UAGIzC,IACNC,aAAwB,SACxBC,YAAuB,SACvBR,aAAkC,GAElC,IAAal9S,cAA6B,CACtC,OAAOpS,GAAa0T,MACxB,CAGA,OAAe4+S,cAAc53T,EAAsB,CAC/C,OAAO8W,KAAKx1J,MAAM0+I,EAAO,IAAM,EACnC,CAEAyrB,YAAqBhxK,EAAuB,CACxC,IAAMo9c,EAASF,EAAaC,cAAcn9c,GAC1C,OAAOo9c,EAAS,EAAI,GAAG/gT,KAAKqC,IAAI0+S,GAAQ,OAAS,GAAGA,EAAO,EAC/D,CAEA9G,aAAsBt2c,EAAuB,CACzC,OAAO,KAAKgxK,YAAYhxK,EAC5B,CACJ,EAgCIq9c,KAAMrH,GACNsH,QAAStE,IACTuE,SAAU/D,IACVgE,WAAY9D,GACZ+D,mBAAoB7D,IACpB8D,QAASnE,IACToE,kBAAmB7D,IACnB8D,sBAAuB/D,IACvBgE,MAAO9D,IACPllK,MAAOkkK,IACP+E,WAAY7D,IACZ8D,SAAU/D,IACVgE,WAAY9D,IACZ+D,WAAYC,cAxCN3E,IAAqC,EAyC3C4E,kBAAmBC,cArCb/E,GAAqC,EAsC3CgF,IAAKC,cAjCCjF,GAAqC,CAkC/C,E,qBCxxCE,EAAE,IAAI,CAAa,OAAO,QAAnB,YAA2B,OAAO,IAAI,OAAO,CAAC,EAAEziZ,CAAC,EAAY,OAAOwsE,GAAjB,UAA6CD,IAApB,OAA4B,EAAO,QAAQvsE,EAAE,EAAE,EAAE,KAAKA,EAAE,CAAC,GAAC2nZ,EAAO,SAAS1nZ,GAAG,CAAC,IAAI/vD,EAAe,OAAO,KAApB,IAAyB,KAAkB,OAAO,OAApB,IAA2B,OAAgBA,IAAT,IAAK,GAAQ,CAAC,EAAHA,EAASgxC,EAAEH,EAAE,CAAC7wC,EAAE,UAAU,CAAC,CAACA,EAAE,YAAYof,EAAEpf,EAAE,gBAAgB,CAAC,EAAE4wC,EAAE,CAAC,EAAEU,EAAE,EAAE72B,EAAE,CAAC,EAAE,SAASy1C,EAAE,EAAE,CAAC,KAAK,QAAQ,KAAK,KAAK,UAAU,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,KAAK,OAAO,KAAK,KAAK,WAAW,EAAE,KAAK,aAAa,GAAG,KAAK,UAAU,EAAE,KAAK,OAAO,EAAE,KAAK,WAAW,KAAK,KAAK,aAAa,CAAC,EAAE,KAAK,iBAAiB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE7wC,EAAE,CAAC,EAAE,EAAE,UAAU,SAAS,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,MAAM,KAAK,QAAQ,IAAIzd,EAAE,CAAC,EAAE,CAAC,KAAK,QAAQ,SAAS,MAAM,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,KAAK,WAAW,SAAS,EAAE,EAAE,CAAC,IAAIA,EAAE,SAAS,KAAK,QAAQ,eAAe,GAAG,EAAE,GAAG,KAAK,cAAc,EAAEA,EAAE,CAAC,IAAI6uC,EAAE,KAAK,QAAQ,QAAQ,CAAkCA,IAA9B,EAAE,KAAK,QAAQ,WAAW,IAAM,KAAK,QAAQ,iBAAiBqf,EAAEC,CAAC,GAAG,EAAE,CAAC,GAAGD,EAAE,MAAMrf,CAAC,CAAC,CAAC,MAAM7uC,CAAC,CAAC,CAAC,CAAC,KAAK6uC,CAAC,CAAC,CAAC,KAAK,cAAcugB,EAAE,KAAK,QAAQ,gBAAgB,IAAa,EAAE,KAAK,QAAQ,iBAAiBlB,CAAC,KAA3C,IAAK,KAA2C,EAAEC,GAAG,KAAK,aAAa,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,IAAInuD,EAAE,KAAK,aAAakuD,EAAEC,GAAG,KAAK,aAAa,GAAG,KAAK,QAAQ,MAAMnuD,EAAE,KAAK,WAAW,CAAC,KAAK,SAAS,GAAG,GAAG,CAAC,KAAK,QAAQ,OAAO,GAAG,CAAC,KAAK,QAAQ,QAAQ,EAAE,CAAgO,GAA/N,EAAEmuD,EAAE,KAAK,OAAO,GAAG,KAAK,YAAY,KAAK,aAAanuD,EAAE,UAAUkuD,EAAE,KAAK,UAAU,EAAE,KAAK,WAAWA,GAAGC,GAAGA,EAAE,OAAO,KAAK,WAAWA,EAAE,KAAK,QAAQ,KAAK,WAAW,KAAK,QAAQ,SAAS,KAAK,WAAW,KAAK,QAAQ,SAAY3wC,EAAEpf,EAAE,YAAY,CAAC,QAAQ+vD,EAAE,SAASt1C,EAAE,UAAU,SAAS7Y,CAAC,CAAC,OAAO,GAAGovD,EAAE,KAAK,QAAQ,KAAK,GAAG,CAACvgB,EAAE,CAAC,GAAG,KAAK,QAAQ,MAAMsf,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,OAAO,GAAG,KAAK,QAAQ,QAAQ,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,GAAG,KAAK,iBAAiB,EAAE,IAAK,EAAC,CAAC,OAAO,KAAK,QAAQ,MAAM,KAAK,QAAQ,QAAQ,KAAK,iBAAiB,KAAK,KAAK,iBAAiB,KAAK,OAAOA,EAAE,IAAI,EAAE,KAAK,iBAAiB,OAAO,KAAK,iBAAiB,OAAO,OAAOA,EAAE,MAAM,EAAE,KAAK,iBAAiB,KAAKA,EAAE,MAAM,KAAK,YAAY,CAACnuD,GAAG,CAACovD,EAAE,KAAK,QAAQ,QAAQ,GAAGjB,GAAGA,EAAE,KAAK,UAAU,KAAK,QAAQ,SAAS,KAAK,iBAAiB,KAAK,MAAM,EAAE,KAAK,WAAW,CAAC,GAAGnuD,GAAGmuD,GAAGA,EAAE,KAAK,QAAQ,KAAK,WAAW,EAAEA,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE,KAAK,WAAW,SAAS,EAAE,CAACiB,EAAE,KAAK,QAAQ,KAAK,EAAE,KAAK,QAAQ,MAAM,CAAC,EAAE5xC,GAAG,KAAK,QAAQ,OAAOpf,EAAE,YAAY,CAAC,SAASya,EAAE,UAAU,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAASg3B,EAAE,EAAE,CAAC,IAAIse,GAAG,IAAK,CAAC,GAAG,YAAY,EAAE,UAAUt1C,EAAE,iBAAiBy1C,EAAE,KAAK,KAAK,CAAC,EAAE,KAAK,WAAWrf,EAAE,UAAU,CAAC,KAAK,WAAW,EAAE,KAAK,aAAa,CAAC,EAAE,UAAU,CAAC,KAAK,WAAW,CAAC,EAAE,KAAK,OAAO,SAAS,EAAE,CAAC,KAAK,OAAO,EAAE,KAAK,WAAW,CAAC,EAAE,KAAK,WAAW,UAAU,CAAC,GAAG,KAAK,UAAU,KAAK,aAAa,MAAM,CAAC,GAAG,EAAE,IAAI,eAAe,KAAK,QAAQ,kBAAkB,EAAE,gBAAgB,KAAK,QAAQ,iBAAiBA,IAAI,EAAE,OAAOuf,EAAE,KAAK,aAAa,IAAI,EAAE,EAAE,QAAQA,EAAE,KAAK,YAAY,IAAI,GAAGL,EAAE,KAAK,KAAK,QAAQ,oBAAoB,OAAO,MAAM,KAAK,OAAO,CAAClf,CAAC,EAAE,KAAK,QAAQ,uBAAuB,CAAC,IAAI,EAAEif,EAAE,KAAK,QAAQ,uBAAuB,IAAI,KAAKA,EAAEC,EAAE,iBAAiB,EAAED,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,QAAQ,YAAY,EAAE,KAAK,OAAO,KAAK,QAAQ,UAAU,EAAEC,EAAE,iBAAiB,QAAQ,SAAS,KAAK,OAAO,IAAI,CAAC,GAAG,GAAG,CAACA,EAAE,KAAK,KAAK,QAAQ,mBAAmB,CAAC,OAAO,EAAE,CAAC,KAAK,YAAY,EAAE,OAAO,CAAC,CAAClf,GAAOkf,EAAE,SAAN,GAAc,KAAK,YAAY,CAAC,CAAC,EAAE,KAAK,aAAa,UAAU,CAAKA,EAAE,aAAN,IAAmBA,EAAE,OAAO,KAAK,KAAKA,EAAE,OAAO,KAAK,YAAY,GAAG,KAAK,QAAQ,KAAK,QAAQ,WAAWA,EAAE,aAAa,OAAO,KAAK,UAAU,CAAC,KAAK,QAAQ,WAAW,KAAK,SAAS,IAAW,EAAE,EAAE,kBAAkB,eAAe,KAA7C,KAA4F,GAA5C,SAAS,EAAE,UAAU,EAAE,YAAY,GAAG,EAAE,CAAC,CAAC,EAAE,CAAIA,CAAC,EAAE,KAAK,WAAWA,EAAE,YAAY,GAAG,EAAE,KAAK,YAAY,SAAS,EAAE,CAAC,EAAEA,EAAE,YAAY,EAAE,KAAK,WAAe,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAASjf,EAAE,EAAE,EAAE,IAAK,CAAC,GAAG,YAAY,EAAE,UAAUr2B,EAAE,gBAAgBy1C,EAAE,KAAK,KAAK,CAAC,EAAE,IAAItuD,EAAEmuD,EAAE/vD,EAAe,OAAO,WAApB,IAA+B,KAAK,OAAO,SAAS,EAAE,CAAC,KAAK,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,SAASA,GAAG,CAAC,EAAE,IAAI,WAAS,CAAG,OAAOowD,EAAE,KAAK,aAAa,IAAI,EAAE,EAAE,QAAQA,EAAE,KAAK,YAAY,IAAI,GAAG,EAAE,IAAI,eAAe,KAAK,WAAW,CAAC,EAAE,KAAK,WAAW,UAAU,CAAC,KAAK,WAAW,KAAK,QAAQ,SAAS,EAAE,KAAK,UAAU,KAAK,QAAQ,UAAU,KAAK,WAAW,CAAC,EAAE,KAAK,WAAW,UAAU,CAAC,IAAI,EAAE,KAAK,OAAON,GAAG,KAAK,QAAQ,YAAY,EAAE,KAAK,IAAI,KAAK,OAAO,KAAK,QAAQ,UAAU,KAAK,OAAO,IAAI,EAAE,EAAEC,EAAE,KAAK,EAAE,KAAK,OAAOD,CAAC,GAAGluD,EAAE,WAAW,EAAE,KAAK,QAAQ,QAAQ,GAAG5B,GAAG,KAAK,aAAa,CAAC,OAAO,CAAC,OAAO8vD,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,aAAa,SAAS,EAAE,CAAC,KAAK,QAAQ,KAAK,QAAQ,UAAU,KAAK,UAAU,CAAC,KAAK,QAAQ,WAAW,KAAK,QAAQ,KAAK,OAAO,KAAK,KAAK,WAAW,EAAE,OAAO,MAAM,CAAC,EAAE,KAAK,YAAY,UAAU,CAAC,KAAK,WAAWluD,EAAE,KAAK,CAAC,CAAC,CAAC,SAASwlB,EAAE,EAAE,CAAC,IAAIxlB,EAAEsuD,EAAE,KAAK,KAAK,IAAK,CAAC,CAAC,EAAE,KAAK,OAAO,SAAS,EAAE,CAAC,MAAO,GAAE,EAAE,KAAK,WAAW,CAAC,EAAE,KAAK,WAAW,UAAU,CAAC,IAAI,EAAEJ,EAAE,GAAG,CAAC,KAAK,UAAU,MAAO,GAAE,KAAK,QAAQ,UAAU,EAAE,GAAG,EAAEluD,EAAE,UAAU,EAAE,CAAC,EAAEA,EAAE,UAAU,CAAC,IAAI,EAAEA,EAAE,IAAI,KAAK,UAAU,CAACA,EAAE,KAAK,WAAWkuD,CAAC,CAAC,CAAC,CAAC,SAASxwC,EAAE,EAAE,CAAC4wC,EAAE,KAAK,KAAK,IAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAEtuD,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,MAAM,UAAU,CAACsuD,EAAE,UAAU,MAAM,MAAM,KAAK,SAAS,EAAE,KAAK,OAAO,MAAM,CAAC,EAAE,KAAK,OAAO,UAAU,CAACA,EAAE,UAAU,OAAO,MAAM,KAAK,SAAS,EAAE,KAAK,OAAO,OAAO,CAAC,EAAE,KAAK,OAAO,SAAS,EAAE,CAAC,KAAK,OAAO,EAAE,KAAK,OAAO,GAAG,OAAO,KAAK,WAAW,EAAE,KAAK,OAAO,GAAG,MAAM,KAAK,UAAU,EAAE,KAAK,OAAO,GAAG,QAAQ,KAAK,YAAY,CAAC,EAAE,KAAK,iBAAiB,UAAU,CAAC,GAAO,EAAE,SAAN,IAAe,KAAK,UAAU,CAAC,EAAE,EAAE,KAAK,WAAW,UAAU,CAAC,KAAK,iBAAiB,EAAE,EAAE,OAAO,KAAK,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,YAAYE,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,KAAe,OAAO,GAAjB,SAAmB,EAAE,EAAE,SAAS,KAAK,QAAQ,QAAQ,CAAC,EAAExuD,IAAI,EAAE,CAAC,EAAE,KAAK,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,aAAawuD,EAAE,SAAS,EAAE,CAAC,KAAK,eAAe,EAAE,KAAK,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,WAAWA,EAAE,UAAU,CAAC,KAAK,eAAe,EAAE,EAAE,CAAC,EAAE,KAAK,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,eAAeA,EAAE,UAAU,CAAC,KAAK,OAAO,eAAe,OAAO,KAAK,WAAW,EAAE,KAAK,OAAO,eAAe,MAAM,KAAK,UAAU,EAAE,KAAK,OAAO,eAAe,QAAQ,KAAK,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC,SAASxuD,EAAE,EAAE,CAAC,IAAI5B,EAAE6wC,EAAEzxB,EAAE0wC,EAAElf,EAAW,GAAE,GAAIU,EAAE,CAACV,EAAEsf,EAAE,mDAAmDlf,EAAE,qNAAqNpvC,EAAE,KAAKmuD,EAAE,EAAE,EAAE,EAAEjf,EAAE,CAAC,EAAEL,EAAE,CAAC,EAAErpB,EAAE,CAAC,EAAE9H,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,SAAS8wC,EAAE,EAAE,CAAC,OAAiBjf,EAAE,iBAAb,SAAiCV,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAArB,GAA2BA,EAAE,SAAN,GAAkBA,EAAE,EAAE,CAAC,SAAT,CAAe,CAAC,SAASwf,GAAG,CAAC,GAAG3wC,GAAGF,IAAIpa,EAAE,YAAY,wBAAwB,6DAA6DyV,EAAE,iBAAiB,GAAG,EAAE,EAAE,CAAC,GAAG02B,EAAE,iBAAiB,EAAE,KAAK7xB,EAAE,KAAK,OAAO,SAAS,EAAE,CAAC,MAAM,CAAC8wC,EAAE,CAAC,CAAC,CAAC,GAAGzf,EAAE,EAAE,CAAC,GAAGrxB,EAAE,IAAG,MAAM,QAAQA,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,IAAImxB,EAAE,EAAEE,EAAE,GAAGF,EAAEnxB,EAAE,KAAK,OAAO,IAAIA,EAAE,KAAKmxB,EAAE,CAAC,QAAQqf,CAAC,EAAExwC,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC,MAAMA,EAAE,KAAK,QAAQwwC,CAAC,EAAE,SAASA,EAAE,EAAE,EAAE,CAACkB,EAAE7f,EAAE,eAAe,IAAI,EAAEA,EAAE,gBAAgBV,EAAEqf,CAAC,GAAG1oC,EAAE,KAAKqpB,CAAC,CAAC,CAAC,CAAC,SAAS7uC,EAAE,EAAE,EAAE,CAAC,IAAI,IAAIA,EAAEuvC,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE4e,EAAE,EAAEA,EAAEtf,EAAE,OAAO,IAAI,CAAC,IAAIzwC,EAAE+vD,EAAElf,EAAEJ,EAAEsf,GAAGlf,IAAI,EAAE,KAAK,IAAIM,EAAE,uBAAgCA,EAAE,cAAcV,KAAzB,IAAK,KAAyB,EAAE,cAAcA,GAAGU,EAAE,sBAAsBV,CAAC,GAAG,CAAC,KAAKU,EAAE,cAAcV,IAAIU,EAAE,iBAAiBV,CAAC,EAAWqf,IAAT,QAAqBA,IAAT,QAAsBA,IAAV,SAAuBA,IAAV,WAAe,GAAG,CAAC,GAAGI,EAAE,KAAK,CAAC,IAAG,EAAE,WAAW,CAAC,EAAK5e,EAAE,GAAG,EAAEV,GAAE,MAAO,EAAE,GAAGkf,CAAC,EAAE,WAAWA,CAAC,EAAE9e,EAAE,KAAK8e,CAAC,EAAE,IAAI,KAAKA,CAAC,EAAOA,IAAL,GAAO,KAAKA,GAAGA,EAAA,CAAG,EAAE3e,EAAE,OAAO4e,GAAG3oC,EAAE,OAAO,iBAAiBA,EAAE2oC,GAAG/vD,EAAE,EAAEmxC,EAAE,UAAUA,EAAE,UAAUN,EAAE7wC,CAAC,EAAE6wC,CAAC,EAAqB7wC,IAAnB,kBAAsB,EAAEA,GAAG4B,EAAE5B,IAAI,CAAC,EAAE4B,EAAE5B,EAAE,CAAC,KAAK6wC,CAAC,GAAG,EAAE7wC,GAAG6wC,CAAC,CAAC,OAAOM,EAAE,SAAS4e,EAAE3oC,EAAE,OAAOpiB,EAAE,gBAAgB,gBAAgB,6BAA6BoiB,EAAE,OAAO,sBAAsB2oC,EAAE,EAAED,CAAC,EAAEC,EAAE3oC,EAAE,QAAQpiB,EAAE,gBAAgB,eAAe,4BAA4BoiB,EAAE,OAAO,sBAAsB2oC,EAAE,EAAED,CAAC,GAAGluD,CAAC,CAAC,IAAImuD,EAAEzwC,IAAI6xB,EAAE,QAAQA,EAAE,eAAeA,EAAE,aAAa,EAAE,EAAE,CAAC7xB,EAAE,KAAK,QAAQ,MAAM,QAAQA,EAAE,KAAK,EAAE,GAAG,EAAE,KAAKA,EAAE,KAAK,IAAI1d,CAAC,EAAE,EAAE0d,EAAE,KAAK,QAAQ,EAAE,KAAK1d,EAAE0d,EAAE,KAAK,CAAC,EAAE6xB,EAAE,QAAQ7xB,EAAE,OAAO,EAAE,KAAK,OAAO8H,GAAG,GAAG2oC,EAAE,CAAC,SAASpf,GAAG,CAAC,OAAOQ,EAAE,QAAY/pB,EAAE,SAAN,CAAY,CAAC,SAASpiB,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQpD,CAAC,EAAW,IAAT,IAAK,KAAQ,EAAE,IAAI,GAAG0d,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC0xC,EAAE7f,EAAE,IAAI,IAAI,EAAEA,EAAE,KAAK,EAAE,KAAK,SAAS,EAAE,CAAC,EAAEV,EAAEE,EAAE,EAAEsf,EAAE,GAAGA,EAAE,EAAM3wC,EAAE,KAAK,SAAX,IAAoB,GAAGmxB,EAAE,KAAK,OAAOU,EAAE,SAAS4e,EAAE5e,EAAE,QAAQN,EAAE,MAAM,GAAG,EAAE,KAAKvxB,EAAE,KAAK,GAAGwwC,EAAExwC,EAAE1d,CAAC,IAAI,GAAG,KAAK,MAAM,SAAS,EAAE,EAAE,EAAE,CAAC,IAAImuD,EAAE5e,EAAE,WAAW,IAAI4e,GAAG,CAAY5e,CAAE,UAAQ,KAAK,iBAAiBV,EAAEsf,CAAC,EAAG,EAAE,CAAC,EAAE5e,EAAE,UAAU6f,EAAE7f,EAAE,SAAS,IAAI,EAAE,UAAUA,EAAE,UAAUV,CAAC,EAAE,EAAE,KAAK,UAAUU,EAAE,aAAa,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,IAAIN,EAAEzxB,EAAEwxB,EAAEU,EAAE,IAAK,CAAC,IAAI,IAAK,IAAI,IAAI72B,EAAE,WAAWA,EAAE,QAAQ,EAAE,IAAI,IAAIy1C,EAAE,EAAEA,EAAElwD,EAAE,OAAO,IAAI,CAAC,IAAI,IAAIgxC,EAAES,EAAEzxC,EAAEkwD,GAAGpf,EAAE,EAAE1pB,EAAE,EAAE9H,EAAE,EAAE2wC,GAAG,EAAE,IAAK,GAAE,IAAIvf,EAAE,CAAC,SAASqf,EAAE,UAAUte,EAAE,QAAQqe,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAMrf,CAAC,GAAGE,EAAE,EAAEA,EAAEsf,EAAE,KAAK,OAAO,IAAIruD,GAAGwuD,EAAEH,EAAE,KAAKtf,EAAE,EAAE,KAAK,EAAEsf,EAAE,KAAKtf,EAAE,CAAC,OAAO,GAAGK,EAAWJ,IAAT,IAAK,GAAM,EAAEI,EAAE,EAAEA,IAAI,GAAG,KAAK,IAAIA,EAAEJ,CAAC,EAAE,EAAEI,IAAI,EAAEif,EAAE,KAAK,SAAS,GAAGA,EAAE,KAAK,OAAO3wC,IAAaF,IAAT,IAAK,IAAO0xB,GAAG1xB,KAAckyB,IAAT,IAAK,IAAOA,EAAElqB,IAAI,KAAKA,IAAI,EAAE0pB,EAAE,EAAEW,EAAE,EAAErqB,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,UAAUypB,GAAG,cAAcA,CAAC,CAAC,GAAGJ,EAAEU,EAAE,QAAQA,EAAE,eAAeA,EAAE,SAASA,EAAE,iBAAiB,GAAG,WAAW,EAAE,UAAU4e,EAAE,eAAe,EAAE,CAAC,EAAE,EAAE,UAAUt1C,EAAE,kBAAkB,EAAE,KAAK,UAAU02B,EAAE,WAAW9xB,EAAE8xB,CAAC,GAAG,OAAOA,EAAE,SAASA,EAAE,QAAQ,EAAE,UAAU,EAAEV,EAAE,EAAE,IAAIC,EAAEqf,CAAC,EAAE,EAAElf,EAAE,MAAM7wC,EAAE8vD,EAAEluD,CAAC,EAAEquD,EAAE,EAAEnf,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAExxB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,UAAU,CAAC,OAAOwxB,CAAC,EAAE,KAAK,MAAM,UAAU,CAAC,EAAE,CAAC,EAAED,EAAE,MAAM,EAAE,EAAEmgB,EAAE7f,EAAE,KAAK,EAAE,GAAGnxC,EAAE,UAAU6wC,EAAE,aAAa,CAAC,CAAC,EAAE,KAAK,OAAO,UAAU,CAACjvC,EAAE,SAAS,SAAS,EAAE,CAAC,EAAEA,EAAE,SAAS,WAAW5B,EAAE,CAAC,CAAC,GAAG,WAAW4B,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,UAAU,CAAC,OAAO6uC,CAAC,EAAE,KAAK,MAAM,UAAU,CAAC,EAAE,CAAC,EAAEI,EAAE,MAAM,EAAE,EAAE,KAAK,QAAQ,CAAC,EAAEmgB,EAAE7f,EAAE,QAAQ,GAAGA,EAAE,SAAS7xB,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,iBAAiB,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAM,OAAO7mB,EAAE,CAAC,EAAE,UAAUA,EAAE,CAAC,EAAE,IAAI,EAAEmJ,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM;CAAI,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,OAAOA,EAAE,EAAE,CAAC,OAAO,GAAOA,EAAE,SAAN,GAAc,EAAE,MAAM;EAAK,IAAI,IAAI,EAAE,EAAE5B,EAAE,EAAEA,EAAE4B,EAAE,OAAO,IAAWA,EAAE5B,EAAE,CAAC,KAAZ;GAAgB,IAAI,OAAO,GAAG4B,EAAE,OAAO,EAAE;EAAO,IAAI,CAAC,CAAC,SAASnJ,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,sBAAsB,MAAM,CAAC,CAAC,SAASi4C,EAAE,EAAE,CAAC,IAAI5rC,GAAG,IAAK,CAAC,GAAG,UAAUrI,EAAEoN,EAAE,QAAQ5J,EAAE4J,EAAE,SAAS8mD,EAAE9mD,EAAE,KAAKuC,EAAEvC,EAAE,QAAQsmD,EAAEtmD,EAAE,SAASonC,EAAE,KAAKF,EAAE,CAAC,EAAE7pC,EAAQ2C,EAAE,WAAR,KAAkB,IAAIA,EAAE,UAAUywH,EAAEpzH,EAAE,GAAY2C,EAAE,aAAX,IAAK,KAAmB,EAAEA,EAAE,aAAuB,OAAO/E,GAAjB,UAAoB,GAAG2V,EAAE,eAAe,QAAQ3V,CAAC,KAAK,EAAE,KAAK7E,IAAI6E,EAAE,MAAU,MAAM,qCAAqC,EAAE,CAAC,IAAI7E,EAAE,EAAE,KAAe,OAAOA,GAAjB,UAAoB,GAAGwa,EAAE,eAAe,QAAQxa,CAAC,KAAK,EAAE,CAAC,GAAUxD,IAAP;GAAiBA,IAAP,MAAmBA,IAAT;IAAa,EAAE;GAAM,IAAIm/H,EAAE,EAAEvrE,EAAE,CAAC,EAAE,KAAK,MAAM,SAAS,EAAE,EAAE,EAAE,CAAC,GAAa,OAAOzuD,GAAjB,SAAmB,MAAU,MAAM,wBAAwB,EAAE,IAAI5B,EAAE4B,EAAE,OAAO6uC,EAAE3rC,EAAE,OAAO+rC,EAAEp0C,EAAE,OAAO2iB,EAAEnf,EAAE,OAAO2wC,EAAEogB,EAAEL,CAAC,EAAErf,EAAE,CAAC,EAAE4e,EAAE,CAAC,EAAElf,EAAE,CAAC,EAAES,EAAE,EAAE,EAAE,GAAG,CAAC7vC,EAAE,OAAO8uD,GAAE,EAAE,GAAGP,GAAG,CAAC,IAAIA,GAAQvuD,EAAE,QAAQsF,CAAC,IAAhB,GAAkB,CAAC,IAAI,IAAI4pC,EAAElvC,EAAE,MAAMnF,CAAC,EAAE2qB,EAAE,EAAEA,EAAE0pB,EAAE,OAAO,IAAI,CAAC,GAAG,EAAEA,EAAE1pB,GAAG,GAAG4pB,EAAE,OAAO5pB,IAAI0pB,EAAE,OAAO,EAAE,GAAGr0C,EAAE,YAAY,GAAGszD,EAAE,OAAOW,GAAE,EAAE,GAAG,CAACzwD,GAAG+wC,EAAE,UAAU,EAAE5xB,CAAC,IAAInf,EAAE,CAAC,GAAG2wC,EAAM,MAAE,CAAC,EAAE5rC,EAAEgsC,EAAE,MAAMlsC,CAAC,CAAC,EAAE2zJ,GAAE,EAAEpoG,EAAE,OAAOK,GAAE,OAAO1rD,EAAEgsC,EAAE,MAAMlsC,CAAC,CAAC,EAAE,GAAGsH,GAAGA,GAAGgb,EAAE,MAAO,GAAEkqB,EAAE,MAAM,EAAEllC,CAAC,EAAEskD,GAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAOA,GAAE,CAAC,CAAC,IAAI,IAAIpxC,EAAE1d,EAAE,QAAQkD,EAAE82H,CAAC,EAAE3rE,EAAEruD,EAAE,QAAQnF,EAAEm/H,CAAC,EAAEjrF,EAAE,IAAI,OAAOl4C,EAAE6hI,CAAC,EAAE7hI,EAAEyO,CAAC,EAAE,GAAG,EAAEiqC,EAAEvvC,EAAE,QAAQsF,EAAE00H,CAAC,IAAI,GAAGh6H,EAAEg6H,KAAK10H,EAAE,IAAI,EAAE00H,EAAE,MAAM,CAAC,IAAS,EAAEh6H,EAAE,QAAQsF,EAAEiqC,EAAE,CAAC,KAAvB,GAA0B,OAAO4e,GAAGG,EAAE,KAAK,CAAC,KAAK,SAAS,KAAK,gBAAgB,QAAQ,4BAA4B,IAAI5e,EAAE,OAAO,MAAMsqF,CAAC,CAAC,EAAElrF,GAAE,EAAE,GAAGS,IAAInxC,EAAE,EAAE,OAAO0wC,GAAE9uC,EAAE,UAAUg6H,EAAEzqF,CAAC,CAAC,CAAC,QAAQR,EAAEzpC,CAAC,CAAC,EAAE,GAAGA,IAAIozH,GAAG14H,EAAEuvC,EAAE,KAAKmpF,EAAE,SAAS,GAAGpzH,IAAIozH,GAAOnpF,IAAJ,GAAOvvC,EAAEuvC,EAAE,KAAKmpF,EAAE,CAAMh7G,IAAL,IAAQA,EAAE6xB,EAAE,IAAI,EAAEvvC,EAAE,QAAQkD,EAAEqsC,EAAE,CAAC,GAAG,IAAIif,EAAE31C,IAAQ,EAAOw1C,IAAL,IAAQA,EAAE9e,EAAE,EAAEvvC,EAAE,QAAQnF,EAAE00C,EAAE,CAAC,EAAE8e,KAAvC,GAA0C3wC,EAAE,KAAK,IAAIA,EAAE2wC,CAAC,CAAC,EAAE,GAAGruD,EAAE,OAAOuvC,EAAE,EAAEif,EAAE3f,CAAC,IAAI3rC,EAAE,CAACksC,EAAE,KAAKpvC,EAAE,UAAUg6H,EAAEzqF,CAAC,CAAC,CAAC,QAAQR,EAAEzpC,CAAC,CAAC,EAAEtF,EAAE,EAAEuvC,EAAE,EAAEif,EAAE3f,KAAKvpC,IAAI,EAAEtF,EAAE,QAAQsF,EAAE00H,CAAC,GAAG,EAAEh6H,EAAE,QAAQkD,EAAE82H,CAAC,EAAE,EAAEh6H,EAAE,QAAQnF,EAAEm/H,CAAC,EAAE,KAAK,CAAQ,GAAP,EAAEnhH,GAAEw1C,CAAC,EAAKruD,EAAE,UAAUuvC,EAAE,EAAEif,EAAEjf,EAAE,EAAEif,EAAEvf,CAAC,IAAIp0C,EAAE,CAAC,GAAGu0C,EAAE,KAAKpvC,EAAE,UAAUg6H,EAAEzqF,CAAC,CAAC,CAAC,QAAQR,EAAEzpC,CAAC,CAAC,EAAEmY,GAAE8xB,EAAE,EAAEif,EAAEvf,CAAC,EAAE,EAAEjvC,EAAE,QAAQkD,EAAE82H,CAAC,EAAE,EAAEh6H,EAAE,QAAQsF,EAAE00H,CAAC,EAAEhrF,IAAI6nH,GAAE,EAAEpoG,GAAG,OAAOK,GAAE,EAAE,GAAGtkD,GAAGklC,EAAE,QAAQllC,EAAE,OAAOskD,GAAE,CAAC,CAAC,EAAE,KAAK,CAACR,EAAE,KAAK,CAAC,KAAK,SAAS,KAAK,gBAAgB,QAAQ,8CAA8C,IAAI5e,EAAE,OAAO,MAAMsqF,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG37H,GAAO+wC,EAAE,SAAN,GAAcpvC,EAAE,UAAUg6H,EAAEA,EAAEx8G,CAAC,IAAInf,EAAE,CAAC,GAAQgwD,IAAL,GAAO,OAAOS,GAAE,EAAE,EAAET,EAAEpf,EAAE,EAAEjvC,EAAE,QAAQnF,EAAEm/H,CAAC,EAAE,EAAEh6H,EAAE,QAAQkD,EAAE82H,CAAC,CAAC,MAAM,GAAQt8G,IAAL,KAASA,EAAE2wC,GAAQA,IAAL,IAAQjf,EAAE,KAAKpvC,EAAE,UAAUg6H,EAAEt8G,CAAC,CAAC,EAAE,EAAEA,EAAEmxB,EAAE,EAAE7uC,EAAE,QAAQkD,EAAE82H,CAAC,MAAM,CAAC,GAAQ3rE,IAAL,GAAO,MAAM,GAAGjf,EAAE,KAAKpvC,EAAE,UAAUg6H,EAAE3rE,CAAC,CAAC,EAAE5wC,GAAE4wC,EAAEpf,CAAC,EAAED,IAAI6nH,GAAE,EAAEpoG,GAAG,OAAOK,GAAE,EAAE,GAAGtkD,GAAGklC,EAAE,QAAQllC,EAAE,OAAOskD,GAAE,CAAC,CAAC,CAAC,CAAC,OAAOhgB,GAAE,EAAE,SAAS1rC,EAAE,EAAE,CAACssC,EAAE,KAAK,CAAC,EAAE,EAAEsqF,CAAC,CAAC,SAASnhH,GAAE,EAAE,CAAC,IAAI,EAAE,EAAE,MAAO,GAAO,IAAL,KAAS,EAAE7Y,EAAE,UAAUuvC,EAAE,EAAE,CAAC,IAAS,EAAE,KAAK,IAAZ,GAAc,EAAE,OAAO,CAAC,CAAC,SAAST,GAAE,EAAE,CAAC,OAAOqf,IAAa,IAAT,IAAK,KAAQ,EAAEnuD,EAAE,UAAUg6H,CAAC,GAAG5qF,EAAE,KAAK,CAAC,EAAE,EAAEhxC,EAAEgF,EAAEgsC,CAAC,EAAEJ,GAAG6nH,GAAE,GAAG/nG,GAAE,CAAC,CAAC,SAASrxC,GAAE,EAAE,CAAC,EAAE,EAAEra,EAAEgsC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAEpvC,EAAE,QAAQnF,EAAEm/H,CAAC,CAAC,CAAC,SAASlrE,GAAE,EAAE,CAAC,GAAG7mD,EAAE,QAAQ,CAACimD,GAAGxe,EAAE,QAAQ,CAACP,EAAE,CAAC,IAAIF,EAAES,EAAE,GAAG,EAAE,OAAO,OAAO,IAAI,EAAE,EAAE,IAAI,IAAIT,CAAC,EAAE,IAAI7wC,EAAE,CAAC,EAAE,IAAI,IAAI+vD,EAAE,EAAEA,EAAElf,EAAE,OAAO,IAAI,CAAC,IAAIjvC,EAAEivC,EAAEkf,GAAG,GAAG,EAAE,EAAEiB,EAAEnnD,EAAE,eAAe,EAAEA,EAAE,gBAAgBjI,EAAEmuD,CAAC,EAAEnuD,GAAG,CAAC,IAAI,EAAEkuD,EAAE,EAAEluD,GAAG,KAAK,EAAEA,EAAE,IAAIkuD,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAEC,GAAG,EAAE,EAAEnuD,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAASqvC,IAAP,KAAS,CAAC,EAAEA,EAAA,CAAG,GAAGrvC,CAAC,KAAM,GAAEA,GAAG,EAAE,EAAEmuD,GAAGnuD,EAAE,EAAE,IAAIA,CAAC,CAAC,CAAC5B,GAAG,QAAQ,KAAK,sCAAsC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAKsxC,EAAE,OAAO4e,EAAE,KAAK,CAAC,UAAUprD,EAAE,UAAUrI,EAAE,QAAQ4zD,EAAE,UAAU,CAAC,CAAC5f,EAAE,OAAOgB,GAAGqe,GAAG,GAAG,eAAe7e,CAAC,CAAC,CAAC,CAAC,SAASwnH,IAAG,CAAC9nG,EAAED,GAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,aAAa,UAAU,CAAC,OAAOkrE,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,KAAKh6H,EAAEgvC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,MAAMhvC,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,OAAO,GAAG,EAAE,SAAS,EAAE,QAAQ,KAAK,CAAC,IAAI5B,EAAE,CAAC,MAAM,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAMmxC,EAAE,OAAOA,CAAC,EAAE,GAAG6f,EAAEpvD,EAAE,QAAQ,EAAE,CAAC,IAAI,IAAIivC,EAAE,EAAEA,EAAE,EAAE,QAAQ,KAAK,SAASjvC,EAAE,SAAS,CAAC,KAAK,EAAE,QAAQ,KAAKivC,GAAG,OAAO,EAAE,QAAQ,OAAO,KAAK,EAAE,QAAQ,IAAI,EAAE7wC,CAAC,EAAE,CAAC,GAAG,KAAK,OAAO,EAAE,OAAO,MAAMgxD,EAAEpvD,EAAE,SAAS,IAAIA,EAAE,UAAU,EAAE,QAAQ5B,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,UAAU,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,IAAI4B,EAAEgvC,EAAE,GAAGogB,EAAEpvD,EAAE,YAAY,GAAGA,EAAE,aAAa,CAAC,EAAEA,EAAE,UAAU,EAAE,OAAOgvC,EAAE,EAAE,CAAC,SAASO,GAAG,CAAC,MAAU,MAAM,kBAAkB,CAAC,CAAC,SAAS9xB,EAAE,EAAE,CAAC,GAAa,OAAO,GAAjB,WAA2B,EAAE,OAAO,EAAE,IAAI,EAAEzd,EAAE,MAAM,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,KAAK,EAAE,EAAE,GAAGyd,EAAE,EAAE,EAAE,EAAE,OAAOzd,CAAC,CAAC,SAASwuD,EAAE,EAAE,EAAE,CAAC,OAAO,UAAU,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,SAASY,EAAE,EAAE,CAAC,OAAkB,OAAO,GAAnB,UAAoB,CAAC,MAAO,GAAE,MAAM,SAAS,EAAE,EAAE,CAAC,IAAI,GAAG,IAAK,CAAC,GAAG,eAAe,CAAC,EAAyC,GAAvCA,EAAE,CAAC,IAAI,EAAE,sBAAsB,EAAE,EAAE,CAAC,GAAM,EAAE,cAAc,EAAE,EAAE,UAAU,CAAC,CAACA,EAAElB,EAAE,SAAS,GAAGA,EAAE,UAAU,CAACA,EAAE,QAAQ,CAACr1C,EAAE,kBAAkB,MAAO,GAAE,KAAKA,EAAE,kBAA4B,OAAOg2B,GAAjB,UAAoB,GAAG,GAAW,EAAE,WAAW,CAAC,IAAtB,MAA0B,EAAE,MAAM,CAAC,EAAX,EAAW,CAAGA,CAAC,EAAE,EAAE,IAAIqf,EAAE,SAASre,EAAErqB,GAAG0oC,CAAC,GAAG,CAAC,IAAIrf,EAAE,UAAUugB,EAAEvgB,EAAE,IAAI,GAAGugB,EAAEvgB,EAAE,EAAE,EAAE,EAAE,IAAInxB,EAAEwwC,CAAC,GAAG9vD,EAAE,MAAMywC,aAAa,MAAMA,aAAa,UAAU,EAAE,IAAIK,EAAEgf,CAAC,GAAG,EAAE,OAAOrf,CAAC,EAAE,CAAC,OAAO,CAAC,IAAIA,EAAE,MAAM,CAAC,CAACh2B,EAAE,oBAAoB,OAAO,CAAC,IAAIg2B,EAAEzwC,EAAE,KAAKA,EAAE,WAAW,KAAK8vD,EAAEC,EAAE,SAAS,EAAE,MAAO,CAAat1C,EAAE,WAASg2B,EAAE,gBAAgB,IAAI,KAAK,CAAC,yOAAyO,IAAIqf,EAAE,MAAM,EAAE,CAAC,KAAK,iBAAiB,CAAC,CAAC,CAAE,GAAG,EAAE,CAAC,EAAE,IAAI9vD,EAAE,OAAOywC,CAAC,GAAG,UAAU,EAAE,EAAE,GAAG,IAAI,EAAEA,EAAE,IAAIA,EAAE,GAAG,GAAG,SAASqf,EAAE,KAAK,EAAE,UAAUA,EAAE,MAAM,EAAE,aAAaA,EAAE,SAAS,EAAE,UAAUA,EAAE,MAAM,EAAE,KAAKkB,EAAElB,EAAE,IAAI,EAAE,EAAE,MAAMkB,EAAElB,EAAE,KAAK,EAAE,EAAE,SAASkB,EAAElB,EAAE,QAAQ,EAAE,EAAE,MAAMkB,EAAElB,EAAE,KAAK,EAAE,OAAOA,EAAE,OAAO,EAAE,YAAY,CAAC,MAAMrf,EAAE,OAAOqf,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,SAAS,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAEnf,EAAE,CAAC,EAAEQ,EAAE,IAAIif,EAAE;EAAOvf,EAAE,IAAIzxB,EAAEyxB,EAAEA,EAAEjvC,EAAE,CAAC,EAAEmuD,EAAE,KAAKnf,EAAE,CAAC,EAAEU,QAAQ,CAAC,GAAa,OAAO,GAAjB,SAAmB,CAAC,GAAa,OAAO,EAAE,WAAnB,UAA8B72B,EAAE,eAAe,OAAO,SAAS,EAAE,CAAC,OAAW,EAAE,UAAU,QAAQ,CAAC,IAA1B,EAA2B,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,WAAsB,OAAO,EAAE,QAApB,WAAwC,OAAO,EAAE,QAArB,YAA6B,CAAC,MAAM,QAAQ,EAAE,MAAM,IAAI,EAAE,EAAE,QAAmB,OAAO,EAAE,gBAApB,WAA8C,OAAO,EAAE,gBAAnB,WAAoC,EAAE,EAAE,gBAA0B,OAAO,EAAE,SAAnB,WAA6B,EAAE,EAAE,SAAmB,OAAO,EAAE,WAAnB,WAA+B,EAAE,EAAE,WAAsB,OAAO,EAAE,QAApB,YAA6B,EAAE,EAAE,QAAQ,MAAM,QAAQ,EAAE,OAAO,EAAE,CAAC,GAAO,EAAE,QAAQ,SAAd,EAAqB,MAAU,MAAM,yBAAyB,EAAE,EAAE,EAAE,OAAO,CAAU,EAAE,aAAX,IAAK,KAAmB,EAAE,EAAE,WAAWo2B,GAAG,EAAE,0BAA0B,OAAO,EAAE,EAAE,eAA0B,OAAO,EAAE,gBAApB,WAAoC,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,GAAG,EAAE,IAAI,OAAOp4C,EAAEo4C,CAAC,EAAE,GAAG,GAAyC,GAA5B,OAAO,GAAjB,WAAqB,EAAE,KAAK,MAAM,CAAC,GAAM,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,MAAM,QAAQ,EAAE,EAAE,EAAE,OAAOqf,EAAE,KAAK,EAAEtuD,CAAC,EAAE,GAAa,OAAO,EAAE,IAAnB,SAAsB,OAAOsuD,EAAEH,GAAG,OAAO,KAAK,EAAE,EAAE,EAAE,EAAEnuD,CAAC,CAAC,MAAM,GAAa,OAAO,GAAjB,SAAmB,OAAgB,OAAO,EAAE,MAAnB,WAA0B,EAAE,KAAK,KAAK,MAAM,EAAE,IAAI,GAAG,MAAM,QAAQ,EAAE,IAAI,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,QAAQmuD,GAAG,EAAE,SAAS,EAAE,OAAO,MAAM,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,OAAiB,OAAO,EAAE,KAAK,IAAxB,SAA2B,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,MAAM,QAAQ,EAAE,KAAK,EAAE,GAAa,OAAO,EAAE,KAAK,IAAxB,WAA6B,EAAE,KAAK,CAAC,EAAE,IAAI,IAAIG,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,EAAEtuD,CAAC,EAAE,MAAU,MAAM,wCAAwC,EAAE,SAASsuD,EAAE,EAAE,EAAE,EAAE,CAAC,IAAIH,EAAE,GAAG/vD,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,MAAM,CAAC,GAAa,OAAO,GAAjB,WAAqB,EAAE,KAAK,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,EAAE,QAAQ6wC,EAAE,CAAC,MAAM,QAAQ,EAAE,EAAE,EAAE,GAAG7wC,GAAG2wC,EAAE,CAAC,IAAI,IAAIvxB,EAAE,EAAEA,EAAE,EAAE,OAAO,IAAI,EAAEA,IAAI,GAAG+xB,GAAG,GAAGnsC,EAAE,EAAEoa,GAAGA,CAAC,EAAE,EAAE,EAAE,SAAS,GAAGgxC,EAAE,CAAC,IAAI,IAAIxf,EAAE,EAAEA,EAAE,EAAE,OAAO,IAAI,CAAC,IAAIU,GAAGtxC,EAAE,EAAE,EAAE4wC,GAAA,CAAI,OAAOsf,EAAE,CAAC,EAAElf,EAAEhxC,EAAM,OAAO,KAAK,EAAE4wC,EAAE,CAAC,CAAC,SAAtB,EAAiC,EAAEA,EAAE,CAAC,SAAT,EAAgB,GAAGhvC,GAAG,CAAC5B,IAAI,EAAa4B,IAAX,SAAkB,EAAEgvC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,IAAxB,GAA8B,EAAEA,EAAE,CAAC,SAAT,GAAqB,EAAEA,EAAE,CAAC,EAAE,CAAC,SAAZ,GAA+BhvC,IAAX,UAAc5B,EAAE,CAAC,IAAI,IAAIyxC,EAAE,CAAC,EAAEX,EAAE,EAAEA,EAAEQ,EAAE,IAAI,CAAC,IAAIlqB,EAAEypB,EAAE,EAAEC,GAAGA,EAAEW,EAAE,KAAK,EAAEb,EAAE,CAACxpB,EAAE,CAAC,CAAC,EAAOqqB,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAArB,EAAsB,CAAC,GAAG,CAACye,EAAE,CAAC,IAAI,IAAI5wC,EAAE,EAAEA,EAAEgyB,EAAE,IAAI,CAAC,EAAEhyB,GAAG,CAAC0xB,IAAI,GAAGG,GAAG,IAAI8e,EAAEjwD,GAAG6wC,EAAE,EAAEvxB,GAAGA,EAAE,GAAGta,EAAE,EAAE4rC,EAAE,CAACqf,GAAG3wC,CAAC,CAAC,CAACsxB,EAAE,EAAE,OAAO,IAAI,CAAChvC,GAAG,EAAE0vC,GAAG,CAACN,KAAK,GAAGof,EAAE,CAAC,CAAC,OAAOL,CAAC,CAAC,SAAS/qD,EAAE,EAAE,EAAE,CAAC,IAAIpD,EAAEmuD,EAAE,OAAa,GAAN,KAAQ,GAAG,EAAE,cAAc,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAEnf,GAAa,OAAO,GAAjB,UAAoBA,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC,QAAQU,EAAElyB,CAAC,GAAG,EAAE2wC,GAAG,CAAC,IAAI,GAAe,OAAO,GAAnB,YAAsB,EAAE,EAAE,CAAC,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,IAAInuD,EAAE,EAAEA,EAAE,EAAE,OAAO,IAAI,GAAG,GAAG,EAAE,QAAQ,EAAEA,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,GAAGA,EAAE6Y,EAAE,cAAc,GAAG,GAAG7Y,EAAE,QAAQuvC,CAAC,GAASvvC,EAAE,OAAO,CAAC,IAAhB,KAAyBA,EAAE,OAAOA,EAAE,OAAO,CAAC,IAAzB,KAA4BivC,EAAEjvC,EAAEivC,EAAEjvC,EAAE,CAAC,EAAE,EAAE,WAAW,IAAwB,EAAE,SAAS,IAAwB,EAAE,gBAAgB,IAAS,EAAE,eAAe,CAAC,KAAK;EAAK,IAAI6Y,EAAE,eAAe,EAAE,EAAE,kBAAkB,CAACo2B,GAAG,CAAC,CAAC7wC,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,eAAe,SAAS,EAAE,gBAAgB,QAAQ,EAAE,iBAAiB,IAAI,EAAE,OAAO0wC,EAAE,EAAE,aAAa9uC,EAAE,EAAE,gBAAgB6vC,EAAE,EAAE,aAAaX,EAAE,EAAE,eAAe1pB,EAAE,EAAE,uBAAuB9H,EAAEtf,EAAE,SAAS,CAAC,EAAEA,EAAE,QAAQ,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI4B,EAAEgvC,EAAE,QAAQ,CAAC,EAAEU,EAAE,CAAC,EAAE,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC,GAAG,EAAYN,EAAE,IAAI,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,YAAY,IAA9C,SAA0DA,EAAE,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,YAAY,IAA1C,QAA6ChxC,EAAE,aAAa,CAAC,KAAK,OAAW,KAAK,MAAM,SAAf,EAAsB,MAAM,CAAC,EAAE,IAAI,IAAI8vD,EAAE,EAAEA,EAAE,KAAK,MAAM,OAAO,IAAIxe,EAAE,KAAK,CAAC,KAAK,KAAK,MAAMwe,GAAG,UAAU,KAAK,eAAe9e,EAAE,OAAO,CAAC,EAAEpvC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE6uC,EAAE,EAAE,KAAK,SAASA,GAAG,CAAC,GAAOa,EAAE,SAAN,EAAa0f,EAAEpgB,EAAE,QAAQ,GAAGA,EAAE,SAAS,MAAM,CAAC,IAAIH,EAAEqf,EAAEluD,EAAEmuD,EAAE/vD,EAAEsxC,EAAE,GAAG,GAAG0f,EAAEpgB,EAAE,MAAM,EAAE,CAAC,IAAIC,EAAED,EAAE,OAAO5wC,EAAE,KAAKA,EAAE,SAAS,EAAE,GAAa,OAAO6wC,GAAjB,SAAmB,CAAC,GAAaA,EAAE,SAAZ,QAAmB,MAAO,GAAE,aAAa,EAAE7wC,EAAE,KAAK,EAAEA,EAAE,UAAU,EAAE6wC,EAAE,OAAO,KAAKmgB,EAAEpgB,EAAE,KAAK,GAAGA,EAAE,MAAM,CAAC,KAAKH,CAAC,EAAEqf,EAAEluD,EAAEmuD,CAAC,GAAG,GAAYlf,EAAE,SAAX,OAAkB,OAAO,KAAKqf,EAAE,EAAY,OAAOrf,EAAE,QAAnB,WAA4B,EAAE,eAAeG,EAAE,OAAOhxC,EAAE,eAAe6wC,EAAE,MAAM,EAAE,MAAM,GAAYA,IAAT,OAAW,OAAO,KAAKqf,EAAE,CAAC,CAAC,IAAI9wC,EAAEpf,EAAE,eAAe,SAAS,EAAE,eAAe,SAAS,SAAS,EAAE,CAACgxD,EAAE5xC,CAAC,GAAGA,EAAE,EAAEpf,EAAE,KAAKA,EAAE,SAAS,EAAEkwD,EAAE,CAAC,EAAEz1C,EAAE,MAAMza,EAAE,KAAKA,EAAE,cAAc,CAAC,CAAC,CAAC,SAASkwD,GAAG,CAAC5e,EAAE,OAAO,EAAE,CAAC,EAAEb,EAAE,CAAC,CAAC,GAAGrxB,IAAI,EAAE,UAAU,SAAS,EAAE,CAAC,EAAE,EAAE,KAAc3E,EAAE,YAAX,IAAK,IAAiB,IAAI,EAAE,UAAU,EAAE,UAAoB,OAAO,EAAE,OAAnB,SAAyBza,EAAE,YAAY,CAAC,SAASya,EAAE,UAAU,QAAQA,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GAAGza,EAAE,MAAM,EAAE,iBAAiB,MAAM,EAAE,iBAAiB,UAAU,EAAEya,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,IAAIza,EAAE,YAAY,CAAC,SAASya,EAAE,UAAU,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,UAAU,OAAO,OAAOy1C,EAAE,SAAS,GAAG,YAAYze,EAAE,CAAC,EAAE,UAAU,OAAO,OAAOye,EAAE,SAAS,GAAG,YAAYpf,EAAE,CAAC,EAAE,UAAU,OAAO,OAAO1pB,EAAE,SAAS,GAAG,YAAYA,EAAE,CAAC,EAAE,UAAU,OAAO,OAAO8oC,EAAE,SAAS,GAAG,YAAY5wC,EAAE7E,CAAC,CAAC,C,SCc33lBi9b,IACT,GACkC,CAClC,IAAMC,EAAW,OAAO,OAAOhH,CAAW,CAAC,CAAC,GAC5C,GAAI,CAACgH,EAAU,MAAO,CAAC,EACvB,IAAMC,EAAQ,OAAO,KAAKjH,CAAW,EACrC,OAAOgH,EAAS,KAAK,EAAK,IAAU,CAChC,IAAME,EAAwC,CAAC,EAI/C,OAHAD,EAAM,QAAS,GAAS,CACpB,EAAO1vT,GAAQyoT,EAAYzoT,EAAK,CAACxnJ,EACrC,CAAC,EACMm3c,CACX,CAAC,CACL,EAGa1xb,KAAY,EAAa,IAClCC,EAAI,OAAS0xb,EAAY,GAAG1xb,EAAI,MAAM,EAAG0xb,EAAY,CAAC,EAAE,KAAO1xb,EAI7D2xb,IAAa,gBAGNC,IACT,GACmC,CACnC,IAAMC,EAAkB,CAAC,EAIzB,OAHAC,GAAc,QAAS,GAAS,CAC5B,EAAWhwT,GAAQ,QACvB,CAAC,EACO,GAA8B,CAClC,IAAK,IAAM6zB,KAAcz+K,EAAQ,CAC7B,IAAMpE,EAAQoE,EAAOy+K,GACfj7J,EAAOm3b,EAAWl8R,GACxB,GAAIj7J,IAAS,SAAU,CACnB,EAAOi7J,GAAc7iL,EACrB,QACJ,CAEA,IAAMkH,EAAS,WAAWlH,CAAe,EACrC4nB,IAAS,SACT,EAAOi7J,GAAc,MAAM37K,CAAM,EAC3Bmrc,GAAgB,qBAChBnrc,EAIN,MAAMA,CAAM,GAAK,CAAC23c,IAAW,KAAK7+c,CAAe,GACjD,EAAO6iL,GAAc7iL,EACrB,EAAW6iL,GAAc,WAI7B,EAAOA,GAAc37K,EACrB,EAAW27K,GAAc,SAC7B,CACA,OAAOz+K,CACX,CACJ,EAIa66c,IACT,GAC0E,CAC1E,IAAMjxG,EAAWnqM,EAAK,IAAM,CAAC,EACvBq7S,EAAe,OAAO,KAAKlxG,CAAQ,CAAC,CACrC,IAAK,IACK,CACH,OACA,KAAMxtM,IAAgBh/J,CAAI,CAC9B,EACH,CAAC,CACD,OAAQ,GAAQ2xE,EAAI,OAASA,EAAI,IAAI,EAC1C,GAAK+rY,EAAa,OASlB,OAPAr7S,EAAK,QAAS,GAAiB,CAC3Bq7S,EAAa,QAAS,GAAQ,CAC1B,EAAI/rY,EAAI,MAAQmzG,EAAInzG,EAAI,MACxB,OAAOmzG,EAAInzG,EAAI,KACnB,CAAC,CACL,CAAC,EAEM,CAAE,OAAM,KAAM+rY,CAAa,CACtC,EAEaC,KACT,EACA,IACgB,CAChB,IAAMtnU,EAAY,OAAOunU,EAEnB59c,EAAOwtJ,EAkDb,OAhDIA,IAAS,SACF,CACH,OACA,KAAMrB,GAAgB,WACtB,MACJ,EAEAqB,IAAS,MACF,CACH,OACA,KAAMrB,GAAgB,IACtB,KAAM,KACV,EAEAqB,IAAS,QAAUA,IAAS,OACrB,CACH,OACA,KAAMrB,GAAgB,KACtB,KAAM,MACV,EAEAqB,IAAS5B,GAAe,WAAmB2B,IAC3CC,IAAS5B,GAAe,WAAmB8B,IAC3CF,IAAS5B,GAAe,SAAiB6B,IAEzCD,IAAS,OACF,CACH,OACA,KAAMrB,GAAgB,KACtB,KAAM,MACV,EAEA9V,IAAc,UAOdA,IAAc,UACV,OAAOunU,CAAW,CAAC,CAAC,MAAM,OAAO,EAC1B,CACH,OACA,KAAMzxT,GAAgB,QACtB,MACJ,EAGD,CAAE,OAAM,KAAMA,GAAgB,OAAQ,MAAK,CACtD,EAEa0xT,IACT,EACA,IACU,CACV,IAAM/4R,EAAe,CAAC,EAKtB,OAJA,OAAO,QAAQmxR,CAAW,CAAC,CAAC,SAAS,CAACzoT,EAAM77E,KAAS,CAC7CA,EAAI,QAAUmsY,EAAU,EAAItwT,GAAQ,OACnC,EAAIA,GAAQ77E,EAAImsY,EACzB,CAAC,EACMh5R,CACX,EA2BA,SAAgBi5R,IACZ,EACA,EACA,EACA,EACA,EAAgB,EAChB,EAAcC,EAAsB,OAChC,CACJ,GAAI,CAACA,EAAsB,OAAQ,OAEnC,IAAMC,EAA2B/nI,GAAcgoI,EAAcvrc,CAAK,EAG5Dwrc,EAFyBjoI,GAAcgoI,EAAcxga,CAGvD,EAAyBuga,EAE7B,GAAIE,IAA2B,EAAG,CAE9B,IAAK,IAAIn4c,EAAQ2M,EAAO3M,EAAQ03C,EAAK,IACjC,EAAsB13C,GAClB6qc,GAAgB,wBAExB,MACJ,CAEK,GAAIsN,IAA2Bzga,EAAM/qC,EACtC,OAGJ,IAAIyrc,EAA2BH,EAC3BI,EACAC,EAEJ,IAAK,IAAIt4c,EAAQ2M,EAAO3M,EAAQ03C,EAAK,IAAS,CAY1C,GAVI4ga,IAAsB,KACrBA,IAAsB,QAAaA,GAAqBt4c,KAEzD,EAAoBk4c,EAAaE,IAA6B,GAC1DE,GAAqB5ga,IACrB,EAAoB,KAKxB13C,IAAUs4c,EAAmB,CAC7B,EAAoBt4c,EACpB,IACA,QACJ,CAEA,IAAMu4c,EAAgB77S,EAAS18J,GAEzBw4c,EACFH,IAAsB,OAEhB,KADC37S,EAAS27S,IAAsB,KAEpCI,EAAkB/7S,EAAS47S,IAAsB,IAEjD/qR,EACF8qR,IAAsB,OAIhB,OAHCL,EAAsBK,GAI3B/lR,EAAgC0lR,EAClCM,GAGA9/c,EACJ,GAAI,OAAO+0L,GAAc,UAAY,OAAO+E,GAAc,SAAU,CAChE,IAAMomR,EAAWH,EAAgBC,EAC3BG,EAAYF,EAAkBF,EACpC,GACKhrR,EAAYorR,EAAYrmR,EAAYomR,IACpCA,EAAWC,EACpB,KAAO,CAIFngd,EAJM,OAAO+0L,GAAc,UAAYjkK,EAAQ,iBACxCikK,EACH,OAAO+E,GAAc,UAAYhpK,EAAQ,mBACtCgpK,EACCu4Q,GAAgB,wBAE7B,EAAsB7qc,GAASxH,CACnC,CACJ,CAEA,SAAgBogd,IACZ,EACA,EACA,EACA,EACA,EAAgB,EAChB,EAAcZ,EAAsB,OAChC,CACJ,GAAI,CAACA,EAAsB,OAAQ,OAKnC,IAAMC,EAA2B/nI,GAAcgoI,EAAcvrc,CAAK,EAG5Dwrc,EAFyBjoI,GAAcgoI,EAAcxga,CAGvD,EAAyBuga,EAG7B,GAAIE,IAA2B,EAAG,CAE9B,IAAK,IAAIn4c,EAAQ2M,EAAO3M,EAAQ03C,EAAK,IACjC,EAAsB13C,GAClB6qc,GAAgB,uBAExB,MACJ,CAEK,GAAIsN,IAA2Bzga,EAAM/qC,EACtC,OAGC,GAAIwrc,IAA2B,EAAG,CAEnC,IAAMU,EAAiBX,EAAaD,GAC9Ba,EAAkBp8S,EAASm8S,GAEjC,IAAK,IAAI74c,EAAQ2M,EAAO3M,EAAQ03C,EAAK,IAAS,CAC1C,GAAI13C,IAAU64c,EAAgB,SAG9B,IAAME,EAAWD,EADKp8S,EAAS18J,GAG1B+4c,EAAW,GACR,KAAK,IAAIA,CAAQ,GAAKzvb,EAAQ,wBACjCyvb,EAAW,GACR,KAAK,IAAIA,CAAQ,GAAKzvb,EAAQ,uBAElC,EAAsBtpB,GAClBg4c,EAAsBa,GAC1B,EAAS74c,GAAS84c,GAElB,EAAsB94c,GAClB6qc,GAAgB,sBAE5B,CACA,MACJ,CAEA,IAAIuN,EAA2BH,EAC3BI,EACAC,EAEJ,IAAK,IAAIt4c,EAAQ2M,EAAO3M,EAAQ03C,EAAK,IAAS,CAY1C,GAVI4ga,IAAsB,KACrBA,IAAsB,QAAaA,GAAqBt4c,KAEzD,EAAoBk4c,EAAaE,IAA6B,GAC1DE,GAAqB5ga,IACrB,EAAoB,KAKxB13C,IAAUs4c,EAAmB,CAC7B,EAAoBt4c,EACpB,IACA,QACJ,CAEA,IAAMu4c,EAAgB77S,EAAS18J,GAEzBw4c,EACFH,IAAsB,OAEhB,KADC37S,EAAS27S,IAAsB,KAEpCI,EAAkB/7S,EAAS47S,IAAsB,IAEjDU,EAAeT,EAAgBC,EAC/BS,EAAeR,EAAkBF,EAGnCD,IAAsB,QACtBA,IAAsB,IACtBW,GAAgBD,GAChBC,GAAgB3vb,EAAQ,uBAExB,EAAsBtpB,GAClBg4c,EAAsBM,GAC1B,EAASt4c,GAAS08J,EAAS47S,IAE3BD,IAAsB,QACtBW,GAAgB1vb,EAAQ,wBAExB,EAAsBtpB,GAClBg4c,EAAsBK,GAC1B,EAASr4c,GAAS08J,EAAS27S,IAE3B,EAAsBr4c,GAClB6qc,GAAgB,sBAC5B,CACJ,CAGA,IAAaqO,KACT,EACA,IACiC,CACjC,IAAMC,EAAOC,EAAY,IAAK,GAASnJ,EAAYzoT,EAAK,EAElD6iN,EAAS,GACXlyW,GAAQ,KACF,GACA,OAAOA,GAAQ,SACbA,EACCA,EAAc,GAI3B,GAAIghd,EAAK,SAAW,EAAG,UAAa,GACpC,GAAIA,EAAK,SAAW,EAAG,CACnB,IAAMxtY,EAAMwtY,EAAK,GACjB,MAAQ,IAA6B9uG,EAAM1+R,EAAImsY,EAAS,CAC5D,CACA,GAAIqB,EAAK,SAAW,EAAG,CACnB,IAAME,EAAOF,EAAK,GACdG,EAAOH,EAAK,GAChB,MAAQ,IACJ,GAAG9uG,EAAMgvG,EAAKvB,EAAS,EAAE,GAAGztG,EAAMivG,EAAKxB,EAAS,GACxD,CACA,GAAIqB,EAAK,SAAW,EAAG,CACnB,IAAME,EAAOF,EAAK,GACdG,EAAOH,EAAK,GACZI,EAAOJ,EAAK,GAChB,MAAQ,IACJ,GAAG9uG,EAAMgvG,EAAKvB,EAAS,EAAE,GAAGztG,EAAMivG,EAAKxB,EAAS,EAAE,GAAGztG,EACjDkvG,EAAKzB,EACT,GACR,CAEA,MAAQ,IAEJqB,EAAK,IAAK,GAAQ9uG,EAAM1+R,EAAImsY,EAAS,CAAC,CAAC,CAAC,KAAK,GAAG,CACxD,EAEM0B,IAAwB,GACnB1tS,GAAM,OAAO,OAAOhzK,CAAK,CAAC,CAAC,IAAK,GAAMihB,EAAE,MAAM,CAAC,GAAK,EAGlD0/b,KACT,EACA,IACkB,CAClB,GAAI,CAACC,EAAO,OAAQ,MAAO,CAAC,EAE5B,IAAMC,EAAUD,EAAO,IAAIF,GAAoB,EACzCtC,EAAQ0C,GAAe,OAAO,KAAKC,GAAQH,CAAM,CAAE,EAEnDI,EAAkC,CAAC,EAsBzC,OAjBA5C,EAAM,QAAS,GAAS,CACpB,IAAI6C,EAAmC,CAAC,EACxC,IAAK,GAAM,CAAC,EAAGjhd,KAAU4gd,EAAO,QAAQ,EAAG,CACvC,IAAMzyb,EAASnuB,EAAM0uJ,IAAS,CAAC,EACzBwyT,EAAS,KAAK,IAAI,EAAGL,EAAQ,GAAK1yb,EAAO,MAAM,EAErD,EAAkB8yb,EAAgB,OAAO9yb,CAAM,EAC3C+yb,EAAS,IACT,EAAkBD,EAAgB,OAC1B,MAAMC,CAAM,CAAC,CAAC,KACdnP,GAAgB,uBACpB,CACJ,EAER,CACA,EAAerjT,GAAQuyT,CAC3B,CAAC,EACMD,CACX,EAEaG,GAAqB,GAAqC,CACnE,IAAMC,EAAiC,CAAC,EAMxC,OALK79S,EAAK,QAEV,OAAO,KAAKA,EAAK,EAAE,CAAC,CAAC,QAAS,GAAS,CACnC,EAAc7U,GAAQ6U,EAAK,IAAK,GAAQyiB,EAAIt3B,EAAK,CACrD,CAAC,EACM0yT,CACX,EAEMC,KACF,EACA,IAEK99S,EAAK,GACH,OAAO,KAAKA,EAAK,EAAE,CAAC,CACtB,OAAQ,GAAS,CAAC+9S,EAAa,IAAI5yT,CAAI,CAAC,CAAC,CACzC,IAAK,GAAS,CACX,IAAM6yT,EAAoBh+S,EAAK,KAC1B,GACGyiB,EAAIt3B,KAAU,QACds3B,EAAIt3B,KAAU,MACds3B,EAAIt3B,KAAU,EACtB,EAKA,OAAOmwT,IAA6BnwT,EAJjB6yT,EACbA,EAAkB7yT,GAClB,MAE8C,CACxD,CAAC,EAfgB,CAAC,EAkBb8yT,KACT,EACA,IACkB,CAClB,GAAI,CAAC,MAAM,QAAQC,CAAiB,EAAG,CACnC,IAAMtK,EAAcsK,EACpB,OAAO,OAAO,KAAKtK,CAAW,CAAC,CAC1B,OAAQ,GAAS,CAACmK,EAAa,IAAI5yT,CAAI,CAAC,CAAC,CACzC,IAAK,GACKmwT,IACHnwT,EACAyoT,EAAYzoT,EAAK,CAAC,KACb,GAAQrvJ,GAA6B,IAC1C,CACJ,CACH,CACT,CACA,OAAOgid,IAAwBI,EAAmBH,CAAY,CAClE,EAGaI,KACT,EACA,IAEAjhL,EAAK,IAAK,GACSkhL,EAAQ,KAAM,GAAWC,EAAO,OAASx3U,EAAI,IACrD,GAAUA,CACpB,EAEQy3U,KACT,EACA,IACkB,CAClB,IAAMC,EAA4B,CAAC,EAMnC,OALA,OAAO,KAAK3K,CAAW,CAAC,CAAC,QAAS,GAAS,CACnC4K,EAAgBrzT,GAChB,EAASqzT,EAAgBrzT,IAASyoT,EAAYzoT,GAC7C,EAASA,GAAQyoT,EAAYzoT,EACtC,CAAC,EACMozT,CACX,EAGaE,KACT,EACA,EACA,EAAO,KAAK,IAAI,IACF,IAAI,IAAIj/S,IAAWkjB,GAAQ,EAAGg8R,CAAW,EAAGj/S,EAASJ,CAAI,CAAC,EAE/Ds/S,KACT,EACA,EAAU,EACV,EAA4B,CAAC,EAC7B,EAAO,KAAK,IAAI,EAChB,MACInQ,GAAgB,oBACF,CAClB,IAAM+P,EAA4B,OAAO,OAAO,CAAC,EAAG3K,CAAW,EAQ/D,OAPAmJ,EAAY,QAAS,GAAS,CAC1B,IAAMnyb,EAAS2zb,EAASpzT,GAClByzT,EAAgBH,IAAe7zb,EAAO,OAAQ60I,EAASJ,CAAI,EACjE,EAASlU,GAAQvgI,EAAO,KAAK,EAAO,IAChCg0b,EAAc,IAAIj7c,CAAK,EAAIk7c,EAAqB,EAAI1id,CACxD,CACJ,CAAC,EACMoid,CACX,EAwBaO,IAAkB,GAA8B,CACzD,IAAMt2U,EAAQu2U,IAAWC,CAAM,EACzB/ga,EAASuqF,EAAM,GACrB,OAAOA,EAAM,MAAM,CAAC,CAAC,CAAC,IAAK,GAAQ,CAC/B,IAAMsyU,EAAc,CAAC,EAIrB,OAHA78Z,EAAO,SAAS,EAAK,IAAU,CAC3B,EAAOqxB,GAAOmzG,EAAI9+K,EACtB,CAAC,EACMm3c,CACX,CAAC,CACL,EAEMmE,IAAoB,GACtBD,EAAO,IAAIE,GAAS,EACXH,IAAc,GACvBE,IAAiBE,IAAcH,CAAM,CAAC,EA4B7BI,IACT,EACA,EACA,IACsC,CAEtC,IAAMC,GAAiB,CACnB,OACA,UAC8D,CAC9D,IAAMC,EAAYr5c,EAClB,EAAU,QAAUwyE,EAAK,QAAU,CAAC,EAIpC,IAAK,IAAMgqG,KAAO68R,EACd,IAAK,IAAMhwY,KAAOgwY,EAAU,QAClBhwY,KAAOmzG,IAAM,EAAInzG,GAAO,IAItC,OAAOgwY,CACX,EAEMhhd,EAASihd,IAAK,MAAMl2b,EAAK,CAC3B,UAAWG,GAAag2b,GAAgBn2b,CAAG,EAC3C,OAAQ,GACR,eAAgB,GAChB,gBAAkB,GAAmB40B,EAAO,KAAK,EACjD,UAAY,GAAkB9hD,EAAM,KAAK,CAC7C,CAAC,EAMD,OAJIsjd,IACA,EAAO,KAAOnhd,EAAO,KAAK,IAAK,GAAWmhd,EAAQC,CAAgB,CAAC,GAGhEL,EAAc/gd,CAAM,CAC/B,EAEakhd,GAAmB,GAC5Bn2b,EAAI,SAAS,GAAI,EAAI,IAAOA,EAAI,SAAS,GAAG,EAAI,IAAM,IAOpDs2b,IAAc,GAAwBl9R,EAAI,MAAMm9R,EAAW,EAEpDA,GAAe,GACxBp1G,GAAS,MAA8BA,IAAS,GAEvC20G,IAAiB,GAAmC,CAC7D,IAAIU,EACJ,IAAK,IAAIpE,EAAWuD,EAAO,OAAS,EAAGvD,GAAY,GAC1CkE,IAAWX,EAAOvD,EAAS,EADkB,IAElD,EAASA,EAEb,OAAOoE,IAAW,OAAYb,EAASA,EAAO,MAAM,EAAGa,CAAM,CACjE,EAEaX,IAAa,GAAsB,CAC5C,IAAIh7O,EACJ,IAAK,EAAa5gN,EAAI,OAAS,EAAG4gN,GAAc,GACvC07O,GAAYt8b,EAAI4gN,EAAW,EADe,KAGnD,OAAO5gN,EAAI,MAAM,EAAG4gN,EAAa,CAAC,CACtC,EAEM47O,KAAqB,EAAY,IAA8B,CACjE,IAAMC,EAAa,MAAMz8b,EAAI,MAAM,EACnC,IAAK,IAAIze,EAAI,EAAGA,EAAIm7c,EAAS,OAAQ,IAAK,CACtC,IAAMr8c,EAAQq8c,EAASn7c,GACvB,EAAOA,GAAKye,EAAI3f,EACpB,CACA,OAAOo8c,CACX,EAEaE,KACT,EACA,IACkB,CAClB,IAAMrF,EAAW,OAAO,OAAOhH,CAAW,CAAC,CAAC,GAC5C,GAAI,CAACgH,EAAU,MAAO,CAAC,EACvB,IAAM/2c,EAAM+2c,EAAS,OACfsF,EAASC,IAAavM,EAAaiH,CAAK,EAI1CuF,EAAW,GACf,IAAK,IAAIv7c,EAAI,EAAGA,EAAIhB,EAAM,EAAG,IACzB,GAAIq8c,EAAOr7c,EAAGA,EAAI,CAAC,EAAI,EAAG,CACtB,EAAW,GACX,KACJ,CAGJ,GAAIu7c,EAAU,OAAOxM,EAErB,IAAM2K,EAA4B,CAAC,EAE7ByB,EAAWt9R,GAAQ,EAAG7+K,CAAG,CAAC,CAAC,KAAKq8c,CAAM,EAK5C,OAJA,OAAO,QAAQtM,CAAW,CAAC,CAAC,SAAS,CAACzoT,EAAMk1T,KAAe,CACvD,EAASl1T,GAAQ20T,IAAkBO,EAAWL,CAAQ,CAC1D,CAAC,EAEMzB,CACX,EAEM4B,KACF,EACA,IACmD,CACnD,IAAMrD,EAAOC,EAAY,IAAK,GAASnJ,EAAYzoT,EAAK,EAExD,OAAQ,EAAgB,IAA+B,CAKnD,IAAK,IAAIm1T,EAAW,EAAGA,EAAWxD,EAAK,OAAQ,IAAY,CACvD,IAAMxtY,EAAMwtY,EAAKwD,GACXC,EAAKjxY,EAAIq2F,GACT66S,EAAKlxY,EAAIo2F,GACf,GAAI66S,EAAKC,EAAI,MAAO,GACpB,GAAID,EAAKC,EAAI,MAAO,EAExB,CACA,MAAO,EACX,CACJ,EAEaC,IAAqC,GAA0B,CAGxE,IAAMt2G,EADWi1G,GAAe/1b,EAAI,MAAM;CAAI,CAAC,CAAC,MAAM,EAAG,CAAC,CAAC,CAAC,KAAK;CAAI,CAC/C,EAAS,IAAM,CAAC,EAChCq3b,EAAuB,CAAC,EAI9B,OAHA,OAAO,KAAKv2G,CAAQ,CAAC,CAAC,QAAS,GAAS,CAChCA,EAASh/M,KAAU,IAAIu1T,EAAW,KAAKv1T,CAAI,CACnD,CAAC,EACMu1T,CACX,ECrwBYC,GAAL,SAAAA,EAAA,C,MAEHA,GAAAC,SAAA,WAEAD,EAAAE,WAAA,aAEAF,EAAAG,SAAA,WACAH,EAAAI,OAAA,SACAJ,EAAA12T,OAAA,S,CACJ,MAgBa+2T,KACTp2b,EACA0pb,KAEA,IAAMv3a,EAAYu3a,EAAM,GAClBt3a,EAAUs3a,EAAMA,EAAM1wc,OAAS,GAC/Bq9c,EAAc,GAChBr0a,EAAO7P,EACLmkb,EAAmB,IAAIvsc,IAI7B,IAHA2/b,EAAM1+b,SAASg3B,EAAMjpC,KACjBu9c,EAAiB5/c,IAAIsrC,EAAMjpC,EAC/B,GACOipC,GAAQ5P,GACXikb,EAAYr8c,KACRs8c,EAAiB1/c,IAAIorC,GACfhiB,EAAOs2b,EAAiB3/c,IAAIqrC,IAC5B4ha,GAAgBD,uBAC1B,EACA3ha,IAEJ,OAAOq0a,CACX,EAGA,SAAgBE,IACZlkV,EACAmkV,EACA39U,EAA4B,SAE5B,IAAMnlI,EAAkC,GAExC,IAAK,IAAI+id,EAAa,EAAGA,EAAapkV,EAAQr5H,OAAQy9c,IAAc,CAEhE,IAAM1/Q,EAAa1kE,EAAQokV,GAC3B,GAAI1/Q,IAAe,KAAM,CACrBrjM,EAAO+id,GAAc7S,GAAgBf,sBACrC,QACJ,CAAO,GAAI9rQ,IAAe/5C,OAAW,CACjCtpJ,EAAO+id,GAAc7S,GAAgBhB,2BACrC,QACJ,CAAO,GAAI7rQ,aAAsBt4C,GAAY,CACzC/qJ,EAAO+id,GAAc1/Q,EACrB,QACJ,CAGA,IAAM2/Q,EAASF,EAAa,EAKtBG,EAAa99U,IAAU,SAAW+0B,KAAKz1J,KAAKu+c,EAAS,GAAKA,EAC1DE,EAAc/9U,IAAU,SAAW+0B,KAAKx1J,MAAMs+c,EAAS,GAAK,EAE5Dn6U,EAAaqxB,KAAKh1J,IAAI69c,EAAaE,EAAY,GAC/CjkT,EAAW9E,KAAK/0J,IAAI49c,EAAaG,EAAavkV,EAAQr5H,OAAS,GAEjE6+C,EAAQ,EACRu4E,EAAM,EACV,IACI,IAAIymV,EAAct6U,EAClBs6U,GAAenkT,EACfmkT,IACF,CACE,IAAMtld,EAAQ8gI,EAAQwkV,GAElBtld,GACU,MACV,EAAEA,aAAiBktJ,MAEnBruB,GAAO7+H,EACPsmD,IAER,CAEAnkD,EAAO+id,GAAcrmV,EAAMv4E,CAC/B,CAEA,OAAOnkD,CACX,CAIA,IAAMojd,IAA8C,CAChDjma,OAAQ,CACJ,CAAE13B,KAAA,UAAkC,EACpC,CAAEA,KAAA,YAAoC,EACtC,CAAEA,KAAA,UAAkC,EACpC,CAAEA,KAAA,QAAgC,CACtC,EACAzrB,IACIs7c,EACA+N,EACAC,EACA5iS,EACA6iS,KAEA,IAAMj1X,EAAYo2E,WAAW6+S,GACvBC,EAAclO,EAAYgO,GAC1BG,EAAenO,EAAY50R,GAC3BgjS,EAAapO,EAAY+N,GAC3BM,EACAC,EACJ,OAAOH,EAAajtc,KAAK3Y,EAAOwH,KAC5B,IAAMk4H,EAAQimV,EAAYn+c,GACpBwhO,EAAc68O,EAAWr+c,GAC/B,GAAIk4H,IAAUomV,EAAc,CACxB,GAAI,CAACxT,GAAgBtyc,GAAQ,OAAOA,EACpC,GAAIA,EAAQywF,EAAW,OAAO4hX,GAAgBP,YAE9CgU,EAAepmV,EACfqmV,EAA+B/8O,CACnC,CACA,OAAOA,EAAc+8O,CACzB,EACJ,CACJ,EAIMC,IAA4B,CAC9B1ma,OAAQ,CACJ,CAAE13B,KAAA,UAAkC,EACpC,CAAEA,KAAA,YAAoC,EACtC,CAAEA,KAAA,UAAkC,EACpC,CAAEA,KAAA,QAAgC,CACtC,EACAzrB,IACIs7c,EACA+N,EACAC,EACA5iS,EACAoiS,KAEA,IAAMjU,EAAcyG,EAAYgO,GAC1BG,EAAenO,EAAY50R,GAC3BgjS,EAAapO,EAAY+N,GACzB99c,EAAMspc,EAAYvpc,OACxB,GAAI,CAACC,EAAK,MAAO,GACjB,IAAIu+c,EAAgBjV,EAAY,GAC5BkV,EAA0B,GAC1BC,EAAuB,GAErBxmK,EAAoC,GAC1C,IAAK,IAAI2/J,EAAW,EAAGA,GAAY53c,EAAK43c,IAAY,CAChD,IAAMlW,EAAa4H,EAAYsO,GACzBt/c,EAAQ4ld,EAAatG,GACrB7ua,EAAOo1a,EAAWvG,GACxB,GAAI2G,IAAkB7c,EAAY,CAC9B,IAAMgd,EAAWpB,IACbH,IAA+BqB,EAAeC,GAC9ClB,GACF90Z,OACGnwD,GACKA,IAAUqyc,GAAgBD,uBAAA,EAGpC,GADAzyJ,EAAOl3S,KAAK29c,GACRpmd,IAAUyrJ,OAAW,MACzBy6T,EAAgB,GAChBC,EAAe,GACfF,EAAgB7c,CACpB,CACA8c,EAAcz9c,KAAKzI,GACnBmmd,EAAa19c,KAAKgoC,EACtB,CACA,OAAOkvQ,EAAO71I,KAAA,CAClB,CACJ,EAEMu8S,IAAsB,CACxB/ma,OAAQ,CACJ,CAAE13B,KAAA,UAAkC,EACpC,CAAEA,KAAA,UAAkC,CACxC,EACAzrB,IACIs7c,EACA6O,EACAC,KAEA,IAAMC,EAAkB/O,EAAY6O,GAEpC,OAD0B7O,EAAY8O,EAC/BE,CAAkB9tc,KAAK+tc,EAAal/c,KACvC,GAAIk/c,IAAgB,EAAG,OAAOrU,GAAgBV,kBAC9C,IAAMnhE,EAAYg2E,EAAgBh/c,GAGlC,OAFK8qc,GAAgB9hE,GAChB8hE,GAAgBoU,GACdl2E,EAAYk2E,EADuBA,EADFl2E,CAG5C,EACJ,CACJ,EA8GMm2E,GAAsB,CACxBC,gBAvBAtna,OAAQ,CACJ,CAAE13B,KAAA,UAAkC,EACpC,CAAEA,KAAA,UAAkC,CACxC,EACAzrB,IACIs7c,EACA6O,EACAC,IAEAF,IACKlqd,GAAGs7c,EAAa6O,EAAeC,GAC/B5tc,IAAKimJ,GAAc,OAAOA,GAAQ,SAAW,IAAMA,EAAMA,EAYlEgoT,EACArB,qCACAc,aACAL,mBACAa,eA1EAvna,OAAQ,CACJ,CAAE13B,KAAA,UAAkC,EACpC,CAAEA,KAAA,YAAoC,EACtC,CAAEA,KAAA,UAAkC,EACpC,CAAEA,KAAA,QAAgC,CACtC,EACAzrB,IACIs7c,EACAqP,EACArB,EACA5iS,EACAoiS,KAEA,IAAMjU,EAAcyG,EAAYgO,GAC1BG,EAAenO,EAAY50R,GAGjC,GAAI,CAACoiS,EACD,OAAOW,EAAajtc,IAAKhZ,GAAS2yc,GAAgB3yc,GAAO,EAAIA,GAEjE,IAAIsmd,EACJ,OAAOL,EAAajtc,KAAK3Y,EAAYwH,KACjC,IAAM4zK,EAAS41R,EAAYxpc,GACrBu/c,EAAiB/V,EAAYxpc,EAAQy9c,GACrCjrZ,EAAgB4rZ,EAAap+c,EAAQy9c,GAgB3C,MAdI,CAACgB,GACDA,IAAkB7qS,GAClB2rS,IAAmB3rS,GAEnB6qS,EAAgB7qS,EACTi3R,GAAgBN,yBAEvB/3Y,aAAyBkzF,GAAmBlzF,EAC5Ch6D,aAAiBktJ,GAAmBltJ,EAEpCg6D,IAAkB,EAAUq4Y,GAAgBV,kBAC5C33Y,IAAkByxF,OACX4mT,GAAgBN,wBAEnB,KAAO/xc,EAAQg6D,GAAkBA,CAC7C,EACJ,CAgCA6sZ,EACAG,YAjHA1na,OAAQ,CACJ,CAAE13B,KAAA,UAAkC,EACpC,CAAEA,KAAA,QAAgC,CACtC,EACAzrB,IACIs7c,EACA50R,EACA3gD,IAEAu1U,EAAY50R,EAAW,CAAClqK,IAAK3Y,GACzBsyc,GAAgBtyc,GAAUA,EAAmBkiI,EAASliI,EAuG9Dgnd,EACAC,UAnGA3na,OAAQ,CACJ,CAAE13B,KAAA,UAAkC,EACpC,CAAEA,KAAA,UAAkC,CACxC,EACAzrB,IACIs7c,EACAyP,EACAC,KAEA,IAAM14b,EAASgpb,EAAYyP,GAE3B,OADkBzP,EAAY0P,EACvBC,CAAUzuc,KAAK27G,EAAU9sH,KAC5B,IAAMxH,EAAQyuB,EAAOjnB,GAGrB,OAFK8qc,GAAgBtyc,GAChBsyc,GAAgBh+U,GACdt0H,EAAQs0H,EADwBA,EADHt0H,CAGxC,EACJ,CAkFAind,EACAI,WAfA/na,OAAQ,CAAC,CAAE13B,KAAA,UAAkC,CAAC,EAC9CzrB,IACIs7c,EACA50R,IACkBprI,GAAYgga,EAAY50R,EAAW,CAWzDwkS,CACJ,EAGaC,IAA0B3oU,OAAOn6I,KAC1Cmid,IAGEY,IAAmB1+S,GACrBy+S,IAAwBzsV,SAASguC,GAgBxB+2H,GACTr5K,IAOA,IAAMo/N,EAAQp/N,EAAU3pH,MAAM,KAExB4qd,EAAgB7hI,EAAMloL,KAAMoL,GAAS0+S,IAAgB1+S,IAE3D,GAAI,CAAC2+S,EAAe,CAChB5ic,QAAQW,KAAK,uBAAuBiic,EAAc,YAAY,EAC9D,MACJ,CAEA,IAAM/4b,EAASk3T,EAAMx1R,OAAQ04G,GAASA,IAAS2+S,GAGzCC,EAAYd,GAAoBa,EAAc,CAACloa,OAKrD,MAAO,CAAEkoa,gBAAeloa,OAJTigH,GAAMkoT,EAAWh5b,GAAQ9V,KAAK,CAAC+uc,EAAU1nd,MAC7C,CAAE4nB,KAAM8/b,EAAS9/b,KAAM5nB,OAAM,EAGhBs/C,CAAO,CACnC,EAEaqoa,KACTlQ,EACA12K,KAEA,IAAK,IAAMr2J,KAAOq2J,EAAM,CACpB,GAAI,CAACr2J,EAAInkB,WAAamkB,EAAIk9U,gBAAiB,SAC3C,GAAM,CAAEJ,gBAAeloa,SAAS,IAC5BsgP,GAAqBl1J,EAAInkB,SAAS,GAAK,CAAC,EACtCshW,EAAcvoa,EAAO3mC,KAAK,CAAE3Y,WAAYA,GAC9C,GAAI,CAACwnd,EAAe,SACpB,GAAM,CAAErrd,MAAOwqd,GAAoBa,GACnC,GAAI,CACA/P,EAAY/sU,EAAIskB,MAAQ7yJ,EAAGs7c,KAAgBoQ,GAC3Cn9U,EAAIk9U,gBAAkB,EAC1B,OAASh8b,EAAK,CACVhH,QAAQhQ,MACJ,+BAA+B81H,EAAInkB,UAAU,gBACzCmkB,EAAIskB,KACP,oBAAoB7yJ,EAAGsL,OAAO,mBAC3B,EAAIogd,EAAYpgd,OACnB,WAAW+/c,EAAc,gBAAgBK,EACrClvc,IAAKi9E,GAAU,IAAIA,EAAM,EAAE,EAC3BvvF,KAAK,KAAK,GACnB,EACAue,QAAQhQ,MAAMgX,EAClB,CACJ,CACA,OAAO6rb,CACX,E,ixHCvBMr2c,WAAOsV,QAAA,E,IArVAoxc,GAAb,MAAaA,E,gCAuFR57S,E,EAAU67S,mB,GAeV77S,E,EAAkB87S,kB,GAiBlB97S,E,EAAU+7S,0B,GAmBV/7S,E,EAAUurS,a,GAkEVvrS,E,EAAkBg8S,wB,GAiIlBh8S,E,EAAUrI,M,GAIVqI,E,EAAUwrS,S,GAwBVxrS,E,EAAU8hM,U,GAIV9hM,E,EAAUi8S,S,GAOVj8S,E,EAAUyM,S,GAKVzM,E,EAAUk8S,Y,GA4BVl8S,E,EAAUm8S,Y,GAqBVn8S,E,EAAkBo8S,wB,GAIlBp8S,E,EAAUq8S,2B,GAIVr8S,E,EAAU6oS,gB,GAIV7oS,E,EAAUs8S,e,GAIVt8S,E,EAAUu8S,yB,GA4IVv8S,E,EAAU60H,M,GAIV70H,E,EAAUw8S,a,GAIVx8S,E,EAAUy8S,a,GAIVz8S,E,EAAU08S,e,GAIV18S,E,EAAU00S,a,GAIV10S,E,EAAU28S,oB,GAcV38S,E,EAAU48S,gB,GAsDV58S,E,EAAkBwqN,W,GAUlBxqN,E,EAAkB68S,wB,GAOlB78S,E,EAAkB88S,c,GAWlB98S,E,EAAkB+8S,gB,GA4BlB/8S,E,EAAkBg9S,gB,KAltBnBC,oBACI,IAAI3wc,KACRskD,OACAssZ,iBACAC,WAAsC,EACtCC,SAA4B3sT,KAAK36G,IAAA,EAEjCuna,cACAC,gBAEAC,gBACA,YACI5pd,EAA8B,GAC9B4pd,EAA2C,GAC3CD,EAAmC,CAAC,EACtC,CACE,IAAMr1c,EAAQwoJ,KAAK36G,IAAA,EACb,CAAE8a,SAAQssZ,mBAAmB,IAAOI,EAE1C,KAAKD,cAAgB1pd,EACrB,KAAKupd,iBAAmBA,EACxB,KAAKtsZ,OAASA,EACd,KAAK2sZ,gBACD,OAAOA,GAAoB,SACrBC,IAAyCD,GACzCA,EAGV,KAAKA,gBAAkB,KAAKA,gBAAgB9wc,IAAK+xH,IAC7C,GAAI,CAACA,EAAInkB,UAAW,OAAOmkB,EAC3B,IAAMnkB,EAAYq5K,GAAqBl1J,EAAInkB,SAAS,EACpD,GAAIA,GAAWihW,gBAAkB,YAAa,OAAO98U,EAErD,IAAMi/U,EAAapjW,EAAUjnE,OAAO,EAAE,CAACt/C,MAIvC,OAAOmxB,GAHW,KAAKs4b,gBAAgBhsT,KAClC/yB,GAAQA,EAAIskB,OAAS26T,CAEbC,EAAWl/U,EAC5B,GAIA,KAAK++U,gBAAkB,KAAKA,gBAAgB9wc,IAAK+xH,IAC7C,GAAI,CAACA,EAAIj8G,OAAQ,OAAOi8G,EACxB,KAAKm/U,qBAAqBn/U,EAAIskB,MAAQtkB,EAAIj8G,OAC1C,IAAM0wK,EAAO,CACT,GAAGz0D,CACP,EAEA,OADA,OAAOy0D,EAAK1wK,OACL0wK,CACX,GAEA,KAAKsqR,gBAAgBhwc,QAASixH,GAAQ,KAAKo/U,UAAUp/U,IAErD,KAAK8+U,gBAAkBA,EAIlB1sZ,GACDglZ,IAAqB,KAAKkG,iBAAkB,KAAKmB,QAAQ,EAAE1vc,QACtDixH,GAAQ,KAAKo/U,UAAUp/U,IAGhC,KAAK2+U,WAAa1sT,KAAK36G,IAAA,EAAQ7tC,CACnC,CAEA01c,qBAAgD,CAAC,EAIjD,IAAIE,wBAAoC,CACpC,IAAMC,EAAgB,IAAIxwc,IACtB,KAAKiwc,gBAAgB9wc,IAAK+xH,GAAQA,EAAIskB,IAAI,GAE9C,OAAO,IAAI84T,EACP,KAAK/mL,KAAK5wO,OAAQu6E,GAAQ,CAACs/U,EAAc3kd,IAAIqlI,EAAIskB,IAAI,GAE7D,CAEA8mT,aAAuB,CACnB,MAAO,EACX,CAEA,IAAWiS,mBAAmC,CAC1C,GAAM,CAAEyB,kBAAiB9yF,aAAc,KASvC,OARI8yF,EAAgBzB,kBACTyB,EAAgBzB,kBAEvBrxF,IAAchrO,GAAUu+T,UACjBl+T,GAAcm+T,kBACrBxzF,IAAchrO,GAAUy+T,OAAep+T,GAAcq+T,eACrD1zF,IAAchrO,GAAU2+T,SACjBt+T,GAAcu+T,iBAClBv+T,GAAcw+T,mBACzB,CAIA,IAAmBvC,kBAAoC,CACnD,GAAM,CAAEuB,gBAAe7yF,aAAc,KAUrC,OARIA,IAAchrO,GAAUu+T,UACjB,KAAK/B,uBACPxxF,IAAchrO,GAAUy+T,OACtB1I,GACHkB,IAAe4G,IAEd7yF,IAAchrO,GAAU2+T,SACtB5I,GAAkB8H,GACtBA,CACX,CAKA,IAAWtB,0BAAoC,CAC3C,GAAM,CAAEwB,kBAAiBI,uBAAsBjJ,eAAgB,KAEzD4J,EAAqB5J,EAAYzyS,MAClCnf,GAASA,KAAQ,KAAKg5T,gBAC3B,EAEMyC,EAAwBhB,EAAgBt5Z,OACzCu6E,GAAQA,EAAInkB,WAAa,CAACmkB,EAAIk9U,eACnC,EAEA,MACI,CAAC,KAAK8C,YAAYjjd,QAClB+id,GACA,CAAC7rU,OAAOn6I,KAAKqld,GAAsBpid,QACnC,CAACgjd,EAAsBhjd,MAE/B,CAEA,IAAWgwc,aAA+B,CACtC,GAAM,CAAEuQ,mBAAkBwB,mBAAoB,KAE9C,GAAIA,EAAgBmB,sBAGX,OAFDnB,EAAgBoB,WACTpB,EAAgBoB,WAAWvoc,MAAM2lc,GAChCA,EAGhB,GAAM,CACF6B,uBACAgB,kCACApB,mBACA,KAGAhS,EAAc94T,OAAOhjC,OACrB,CAAC,EACD,KAAKmvW,iBACL9C,EACA6B,GAIAlrU,OAAOn6I,KAAKqmd,GAAiCpjd,SAC7Cgwc,EAAc94T,OAAOhjC,OACjB87V,EACAoT,IAWR,IAAK,GAAM,CAAC77T,EAAMvgI,KAAWkwH,OAAOtjF,QAAQo8Y,GAAc,CACtD,IAAMsT,EACFt8b,EACA,OAAOs8b,EAAyBpuR,MAAS,aACzC86Q,EAAYzoT,GAAQ+7T,EAAyBpuR,KAAA,EAErD,CAEA,IAAM8tR,EAAwBhB,EAAgBt5Z,OACzCu6E,GAAQA,EAAInkB,WAAa,CAACmkB,EAAIk9U,eACnC,EAKA,OAJI6C,EAAsBhjd,SACtBgwc,EAAckQ,IAAgBlQ,EAAagT,IAGxCjB,EAAgBoB,WACjBpB,EAAgBoB,WAAWvoc,MAAMo1b,GACjCA,CACV,CAEA,IAAYqT,kBAAoC,CAC5C,IAAMpJ,EAAiC,CAAC,EAIxC,OAHA,KAAKd,YAAYnnc,QAASu1I,IACtB0yT,EAAc1yT,GAAQ,EAC1B,GACO0yT,CACX,CAEA,IAAmBwG,wBAA0C,CACzD,GAAM,CAAEqB,gBAAeyB,uBAAwB,KACzCrxW,EAASspW,GACXsG,EACA99T,OACAqzT,IAAekM,IAGnB,OAAOrxW,EAAOmqD,QAEd,IAAMmnT,EAAchM,IAAiBtlW,GACrC,OAAO8nW,GAAkBwJ,EAAcA,EAAYpnT,KAAOlqD,EAC9D,CAEA,IAAIuxW,WAAgC,CAChC,OAAO,KAAK1B,gBAAgB0B,SAChC,CAEA,IAAYL,iCAAmD,CAC3D,GAAM,CAAE7C,mBAAkB0C,eAAgB,KACpChJ,EAAiC,CAAC,EACxC,GAAI,CAACgJ,EAAYjjd,OAAQ,OAAOi6c,EAChC,IAAMyJ,EAAkC,GACpCzjd,EAAM,EAoBV,OAnBAgjd,EAAYjxc,QAAS05D,IACjB,GAAM,CAAE67E,QAAS77E,EACXi4Y,EAAepD,EAAiBh5T,GACjCo8T,GAIL1J,EAAc1yT,GAAQo8T,EAAazyc,IAAKhZ,GAAQwzE,EAAI67D,MAAMrvI,IAC1D+H,EAAMg6c,EAAc1yT,EAAK,CAACvnJ,QAJtB0jd,EAAY1id,KAAK0qE,EAKzB,GAIAg4Y,EAAY1xc,QACP05D,GACIuuY,EAAcvuY,EAAI67E,MAAQv3G,GAAQ,EAAG/vC,GAAKiR,QACvCw6D,EAAI67D,MAAMyc,UAGfi2T,CACX,CAEA,IAAYgJ,aAAkC,CAC1C,GAAM,CAAEh0F,YAAWoyF,iBAAgBd,oBAAqB,KAClDqD,EAAsBvC,EAAe34Z,OACtCgjB,GAAQ,CAACA,EAAIu3D,IAAI6sU,WACtB,EACM+T,EAAgBjM,GAAuB,EAAG2I,GAChD,GAAItxF,IAAchrO,GAAUu+T,UAAW,CACnC,IAAMsB,EAAe,IAAI/xc,IACrB,KAAKgyc,WACDlH,IACI,KAAKiF,aACT,IAGR,OAAO8B,EAAoBl7Z,OACtBgjB,GACGA,EAAImkY,aAAagU,EAAcn4Y,EAAI67E,KAAK,GACxCu8T,EAAalmd,IAAI8tE,GAE7B,CAEA,GAAI,KAAKrW,QAAU,CAACwuZ,EAAe,MAAO,GAK1C,IAAMG,EAAoB,IAAIjyc,IAC1BmlI,OAAOn6I,KAAK,KAAKqld,oBAAoB,GAQzC,OANI,KAAKrqE,OACE6rE,EAAoBl7Z,OACtBgjB,GAAQ,CAACs4Y,EAAkBpmd,IAAI8tE,EAAI67E,IAAI,GAIzCq8T,EAAoBl7Z,OACtBgjB,GACG,CAACs4Y,EAAkBpmd,IAAI8tE,EAAI67E,IAAI,GAC/B77E,EAAImkY,aAAagU,EAAcn4Y,EAAI67E,KAAK,EAEpD,CAEA86T,UAAkBp/U,EAAyB,CACvC,GAAM,CAAE9iH,OAAMonI,QAAStkB,EACjBghV,EAAc9jc,GAAQy0b,GAAcz0b,IAAUy0b,GAAct1S,OAClE,KAAKoiT,SAAShkd,IAAI6pJ,EAAM,IAAI08T,EAAW,KAAMhhV,GACjD,CAEAnkB,UACIw7V,EACAhhL,EACAqoL,EACArB,EACA6C,EACI,CAGJ,OAAO,IAAK,KAAK,YAAoB7I,EAAmBhhL,EAAM,CAC1DjkO,OAAQ,KACRssZ,mBACArB,oBACA6C,YACJ,EACJ,CAEAe,cAAwBvC,EAAgC,CACpD,OAAO,IAAK,KAAK,YAAoB,KAAK3R,YAAa,KAAK12K,KAAM,CAC9DjkO,OAAQ,KACRssZ,mBACArB,kBAAmBh8T,GAAc6/T,KACjCjB,sBAAuB,EAC3B,EACJ,CAKA,IAAYkB,aAAsB,CAC9B,OAAO,KAAK/uZ,OACN,KAAKwsZ,UAAY,KAAKxsZ,OAAOwsZ,SAAW,KAAKxsZ,OAAOusZ,YACpD,CACV,CAEA,IAAWxlT,MAAmB,CAC1B,OAAO26S,IAAkB,KAAK/G,WAAW,CAC7C,CAEA,IAAWC,SAAoB,CAC3B,OAAOjga,GAAQ,EAAG,KAAKkhI,OAAO,CAClC,CAEA,EAAAmzS,MAAwD,CACpD,GAAM,CAAErU,cAAa9+R,WAAY,KACjC,IAAK,IAAInxK,EAAQ,EAAGA,EAAQmxK,EAASnxK,IACjC,MAAM63c,GAAuB73c,EAAOiwc,EAE5C,CAEAO,kBAAkBN,EAA6B,CAE3C,OADKA,EAAQjwc,OACN,KAAKuvc,mBAAmB,KAAKqR,WAAWr5T,KAAM0oT,GADzB,EAEhC,CAEAV,mBACIn0R,EACA60R,EACe,CACf,IAAMjpb,EAAS,KAAKrpB,IAAIy9K,GAAYyxR,2BACpC,OAAOoD,EAAQ/+b,IAAKnR,GAAUinB,EAAOjnB,EAAM,CAC/C,CAEA,IAAWwmW,UAAqB,CAC5B,OAAOqxG,GAAuB,EAAG,KAAK5H,WAAW,CACrD,CAEA,IAAW0Q,SAAoB,CAC3B,OAAO9I,GACH,KAAK1mS,QAAU,EACf,KAAK8+R,WACT,CACJ,CAEA,IAAW9+R,SAAkB,CACzB,IAAMozS,EAAiBptU,OAAOlwH,OAAO,KAAKgpb,WAAW,CAAC,CAAC,GACvD,OAAOsU,EAAiBA,EAAetkd,OAAS,CACpD,CAEA,IAAW2gd,YAAqB,CAC5B,OAAO,KAAKxH,YAAYn5c,MAC5B,CAEArC,IAAIy9K,EAAoE,CAKpE,OAJIA,IAAep3B,OACR,IAAIsqT,GAAc,KAAM,CAC3B/mT,KAAM,gBACV,GAEA,KAAKm6T,SAAS/jd,IAAIy9K,IAClB,IAAIkzR,GAAc,KAAM,CAAE/mT,KAAM6zB,CAAW,EAEnD,CAEAx9K,IAAIw9K,EAA6C,CAE7C,OADIA,IAAep3B,QACZ,KAAK09T,SAAS9jd,IAAIw9K,EAC7B,CAEAmpS,uBACIC,EAC0C,CAC1C,OAAO,KAAKnD,eAAerrT,KACtBtqF,GAAQA,EAAIu3D,IAAI9iH,OAASqkc,EAElC,CAEA,IAAW5D,YAAyC,CAGhD,IAAM6D,EAAkB,KAAK9md,IAAIgoJ,GAAeiwT,IAAI,EAMpD,OALI6O,aAA2B7P,GAAcgB,KAClC6O,EAIH,KAAKpD,eAAerrT,KACvBtqF,GAAQA,aAAekpY,GAAcx+S,GAC1C,GACI,KAAKirT,eAAerrT,KACftqF,GAAQA,aAAekpY,GAAc1/S,IAC1C,GACA,KAAKmsT,eAAerrT,KACftqF,GAAQA,aAAekpY,GAAcn/S,IAC1C,GACAgvT,CACR,CAEA,IAAmB5D,wBAA6C,CAC5D,OAAO,KAAKQ,eAAe34Z,OAAQgjB,GAAQA,EAAI4hY,cAAc,CACjE,CAEA,IAAWwT,2BAAoC,CAC3C,OAAO,KAAKD,uBAAuB7gd,MACvC,CAEA,IAAWstc,gBAAyB,CAChC,OAAOt9Z,GAAM,KAAKqxa,eAAenwc,IAAKw6D,GAAQA,EAAI4hY,cAAc,EACpE,CAEA,IAAWyT,eAAwB,CAC/B,OAAO/wa,GAAM,KAAKqxa,eAAenwc,IAAKw6D,GAAQA,EAAIwsF,SAAS,EAC/D,CAEA,IAAW8oT,yBAAmC,CAC1C,OAAO,KAAK3rZ,OACN,KAAK26Y,cAAgB,KAAK36Y,OAAO26Y,YACjC,EACV,CAEA,IAAI0U,WAAkB,CAClB,OAAO,KAAKrvZ,OAAS,KAAKA,OAAOqvZ,UAAY,IACjD,CAWA7M,SAASsB,EAAkD,CACvD,IAAMp5c,EAAQ,IAAIgR,IACZ+/M,EAAQmoP,IAAU,KAAKjJ,YAAamJ,GAC1C,IAAK,IAAIl4c,EAAI,EAAGA,EAAI,KAAKiwK,QAASjwK,IAAK,CACnC,IAAM3I,EAAMw4N,EAAM7vN,GACdlB,EAAMnC,IAAItF,GAAMyH,EAAMpC,IAAIrF,GAAM0I,KAAKC,GACpClB,EAAMrC,IAAIpF,EAAK,CAAC2I,CAAE,EAC3B,CACA,OAAOlB,CACX,CAWA09c,WACIpO,EACAsV,EACiC,CACjC,IAAMC,EAAW,KAAKjnd,IAAI0xc,GACpBwV,EAAW,KAAKlnd,IAAIgnd,GACpBrV,EAAcsV,EAAS/X,2BACvBiY,EAAcD,EAAShY,2BACvBkY,EAAe,IAAIhzc,IAAI8yc,EAAS/X,eAAe,EAC/C94b,EAAe4wc,EAAS9X,gBAAgBpkZ,OAAQ3oD,GAClDgld,EAAannd,IAAImC,IAGfmR,EAAM,IAAIH,IAOhB,OANAiD,EAAahC,QAASjS,IAClBmR,EAAIxT,IACA4xc,EAAYvvc,GACZ+kd,EAAY/kd,EAChB,CACJ,GACOmR,CACX,CAEA8zc,KAAKC,EAA4C,CAC7C,OAAO,KAAKC,UAAWrmS,IACnB,IAAM7/J,EAAOk4H,OAAOlwH,OAAO63J,GAAKjgL,KAAK,KACrC,OAAO,OAAOqmd,GAAwB,SAChCjmc,EAAKo0G,SAAS6xV,GACdA,EAAoBlxd,KAAKirB,EACnC,EAAG,2BAA2Bimc,EAAoBpwd,SAAA,EAAW,EAAE,CACnE,CAEAqwd,UACIn6c,EACAo6c,EACI,CACJ,IAAMl8W,EAAO,IAAIm8W,GAAW,KAAKl0S,QAAS,KAAK9U,KAAKlrJ,IAAInG,IAGxD,OAFIk+F,EAAKo8W,OAAA,EAAiB,KAAKnB,cAAciB,GAEtC,KAAKrmW,UACR,KAAKkxV,YACL,KAAK12K,KACL6rL,EACA7gU,GAAcghU,WACdr8W,EAER,CAEAs8W,aACInqS,EACArwK,EACAo6c,EACI,CACJ,IAAMl8W,EAAO,IAAIm8W,GACb,KAAKl0S,QACL,KAAKvzK,IAAIy9K,GAAYyxR,2BAA2B37b,IAAInG,IAIxD,OAFIk+F,EAAKo8W,OAAA,EAAiB,KAAKnB,cAAciB,GAEtC,KAAKrmW,UACR,KAAKkxV,YACL,KAAK12K,KACL6rL,EACA7gU,GAAcghU,WACdr8W,EAER,CAEA+tB,OAAOigV,EAA2B,CAC9B,IAAM5+F,EAAc,WAAW4+F,EAAMr4c,KAAK,OACpCoiK,EAASq7S,IAAgB,KAAKrM,YAAaiH,GAI7C,OAFAj2S,IAAW,KAAKgvS,YAAoB,KAAKkU,cAAc7rG,GAEhD,KAAKv5P,UACRkiD,EACA,KAAKs4H,KACL++E,EACA/zN,GAAckhU,QAClB,CACR,CAGAC,gBAA0BrqS,EAAkC,CACxD,IAAMp0J,EAAS,KAAKrpB,IAAIy9K,GAAYyxR,2BAC9Bntb,EAAgB,GAClBg/C,EACJ,IAAK,IAAIz9D,EAAI,EAAGA,EAAI+lB,EAAOhnB,OAAQiB,IAAK,CACpC,IAAM/I,EAAM8uB,EAAO/lB,GACf/I,IAAQwmE,IACRh/C,EAAI1e,KAAKC,GACTy9D,EAAOxmE,EAEf,CAKA,OAHI8uB,GAAQhnB,QACR0f,EAAI1e,KAAKgmB,EAAOhnB,MAAM,EAEnB0f,CACX,CAEA,IAAW45Q,MAAuB,CAC9B,OAAO,KAAK+nL,eAAenwc,IAAKw6D,GAAQA,EAAIu3D,GAAG,CACnD,CAEA,IAAWg+U,aAAwB,CAC/B,OAAO,KAAKI,eAAenwc,IAAKw6D,GAAQA,EAAI3xE,IAAI,CACpD,CAEA,IAAWmnd,aAA+C,CACtD,OAAO,KAAKG,eAAenwc,IAAKw6D,GAAQA,EAAIu3D,IAAI9iH,IAAI,CACxD,CAEA,IAAWghc,eAA2B,CAClC,OAAO,KAAKE,eAAenwc,IAAKw6D,GAAQA,EAAIqkY,MAAM,CACtD,CAEA,IAAWoJ,aAAwB,CAC/B,OAAOv7S,MAAMxnI,KAAK,KAAKsrb,SAAS3kd,KAAA,EACpC,CAEA,IAAWqkd,oBAA+B,CACtC,OAAO,KAAKmC,mBAChB,CAEA,IAAYA,qBAAgC,CACxC,OAAO,KAAKmC,gBACPh9Z,OAAQgjB,GAAQA,aAAekpY,GAAcO,OAAO,EACpDjkc,IAAKw6D,GAAQA,EAAI67E,IAAI,CAC9B,CAEA,IAAYm+T,iBAAoD,CAC5D,OAAO9nT,MAAMxnI,KAAK,KAAKsrb,SAAS16b,OAAA,EACpC,CAEA,IAAWq6b,gBAAmD,CAC1D,OAAO,KAAKqE,eAChB,CAEA3B,WAAW9M,EAAuD,CAC9D,OAAOA,EAAM/lc,IAAKq2I,GAAS,KAAK5pJ,IAAI4pJ,GACxC,CAGAo+T,UAAU1O,EAAiC,CACvC,IAAMiC,EAAO,KAAK6K,WAAW9M,GACvB2O,EAAO1M,EAAKhoc,IAAKw6D,GAAQA,EAAI2sF,QAAQ,EACrCwtT,EAAQ3M,EAAKhoc,IAAKw6D,GAAQA,EAAI4sF,QAAQ,EAC5C,MAAO,CAACtoH,GAAM41a,GAAO51a,GAAM61a,EAAM,CACrC,CAEA,IAAY9tE,QAAkB,CAC1B,MAAO,CAAC,KAAK1iV,MACjB,CAEAywZ,KAAKC,EAAW,GAAU,CACtB,KAAKC,aAAA,EACL,KAAKC,YAAA,EACL,KAAKC,SAASH,EAClB,CAEAC,cAAqB,CAEjB7oc,QAAQynH,MAAM,KAAKuhV,UAAUj1c,IAAKsgB,GAAOA,EAAG40b,WAAW,EAC3D,CAEAH,aAAoB,CAEhB9oc,QAAQynH,MAAM,KAAK48U,cAAc,CACrC,CAEA6E,SAAS35c,EAAe+qC,EAAkB,CAGtC,OAFI/qC,GAAS,KAAKwkK,QAAgB,IAC9Bz5H,EAAM,KAAKy5H,UAASz5H,EAAM,KAAKy5H,SAC5BlhI,GAAQtjC,EAAO+qC,GAAKvmC,IAAKnR,GAC5B63c,GAAuB73c,EAAO,KAAKiwc,WAAW,GAEtD,CAEAkW,SAASH,EAAW,GAAU,CAE1B5oc,QAAQynH,MAAM,KAAKyhV,SAAS,EAAGN,GAAW,KAAK5M,WAAW,CAC9D,CAEAmN,gBAAuB,CAEnBnpc,QAAQynH,MAAM,KAAK28U,YAAY,CACnC,CAEA,IAAmBtyF,WAAuB,CACtC,GAAM,CAAE6yF,iBAAkB,KAM1B,OALI,OAAOA,GAAkB,SAAiB79T,GAAUu+T,UACpD5kT,MAAMrjD,QAAQunW,GACPlkT,MAAMrjD,QAAQunW,EAAc,EAAE,EAC/B79T,GAAUy+T,OACVz+T,GAAU2+T,SACb3+T,GAAUsiU,WACrB,CAEA,IAAmBjF,wBAGf,CACA,OAAOvK,IAAkB,KAAKwJ,gBAAgB,CAClD,CAEA,IAAmBgB,cAEQ,CACvB,GAAM,CAAEtyF,aAAc,KACtB,OAAOA,IAAchrO,GAAUsiU,YACzB,KAAKjF,uBACLryF,IAAchrO,GAAUy+T,OACtBxH,IAAe,KAAK4G,aAA2B,EAC/C,KAAKA,aACjB,CAEA,IAAmBN,gBAA4C,CAC3D,OAAO,KAAKH,eAAenwc,IAAKw6D,IAC5B,GAAM,CACF67E,OACAwoT,SACAh2c,OACAm+J,YACAo1S,iBACArG,cACAhkU,OACAv3D,EACJ,MAAO,CACH67E,OACApnI,KAAM8iH,EAAI9iH,KACV4vb,SACAh2c,OACAm+J,YACAo1S,iBACArG,cACAz+O,MAAOvlF,EAAIulF,KACf,CACJ,EACJ,CAEA,IAAI29P,WAAoB,CACpB,OAAO,KAAK9wZ,OAAS,CAAI,QAAKA,OAAO8wZ,UAAW,IAAI,EAAI,CAAC,IAAI,CACjE,CAEA,IAAmB1E,gBAAyB,CACxC,OAAO,KAAKwB,YAAYjjd,MAC5B,CAEA,IAAYomd,aAAuC,CAE/C,GAAM,CACFzE,mBACArB,oBACAK,aACAzvS,UACAkzS,cACAxC,aACAH,iBACAV,gBACAzT,iBACAwT,4BACAE,2BACA,KACJ,MAAO,CACHW,iBAAkBn8b,IAASm8b,EAAkB,IAC7CrB,oBACAK,aACAzvS,UACAkzS,cACAxC,aACAH,iBACAV,gBACAzT,iBACAwT,4BACAE,yBACJ,CACJ,CAEAwF,OAAOvW,EAA+B,CAClC,GAAM,CAAED,eAAgB,KACxB,OAAOC,EAAQ/+b,IACVnR,GAAU63c,GAAuB73c,EAAOiwc,GAEjD,CAEAyW,SAASpka,EAA8B,CACnC,OAAO,KAAKmka,OAAO,KAAKE,gBAAgBrka,GAC5C,CAEAqka,gBAAgBrka,EAAuB,CACnC,IAAM40Z,EAAQ//T,OAAOn6I,KAAKslD,GAK1B,OAJK40Z,EAAMj3c,OAIJgU,MAHM,KAAK+vc,WAAW9M,GAAO/lc,IAAKw6D,GACrCA,EAAIikY,aAAattZ,EAAMqpB,EAAI67E,KAAK,CAEbqZ,GAJG,KAAKqvS,OAKnC,CAEAnvc,QAAQ+9K,EAAoB,CACxB,OAAO,KAAK6nS,gBAAgB7nS,EAAI,CAAC,IAAM,EAC3C,CAEA8nS,MAAMtka,EAAwB,CAC1B,IAAM+5G,EAAO,KAAKqqT,SAASpka,GACrBuka,EAAmB1vU,OAAOtjF,QAAQvR,GACnCnxC,KAAK,CAACw6D,EAAKnzE,KAAW,GAAGmzE,EAAI,GAAGnzE,GAAO,EACvCqG,KAAK,KAEV,OAAO,KAAKkgH,UACRs9C,EACA,KAAKk9H,KACL,aAAal9H,EAAKp8J,OAAO,cAAc4md,IACvCtiU,GAAcghU,UAClB,CACJ,CAEAuB,WAAWzqT,EAAkB0qT,EAA6B,CACtD,OAAO,KAAKpld,OACR,CACI,IAAK,KAAK,YAAiC06J,EAAM,KAAKk9H,KAAM,CACxDjkO,OAAQ,IACZ,EACJ,EACAyxZ,EAER,CAEAC,WAAWryd,EAA+C,CACtD,OAAO,KAAKoqH,UACR,KAAKkxV,YACL,KAAK12K,KAAKpoR,IAAIxc,GACd,sBACA4vJ,GAAc0iU,gBAClB,CACJ,CAEA1iT,OAAO2yS,EAA2B,CAC9B,IAAM0D,EAA4B,CAAC,EAG7BrhL,EAAO29K,EACRvuZ,OAAQ6+F,GAAS,KAAK3pJ,IAAI2pJ,IAC1Br2I,IAAKq2I,GAAS,KAAK5pJ,IAAI4pJ,GAAMtkB,GAAG,EASrC,OANAg0U,EAAMjlc,QAASu1I,IACP,KAAKyoT,YAAYzoT,KAAUvD,SAC3B22T,EAASpzT,GAAQ,KAAKyoT,YAAYzoT,GAE1C,GAEO,KAAKzoC,UACR67V,EACArhL,EACA,iBAAiB29K,EAAM,GACvB3yT,GAAc2iU,aAClB,CACJ,CAEAC,YAAYjQ,EAAqBpwb,EAAwB,CACrD,IAAMsgc,EAAgB,IAAIp1c,IAAIklc,GACxB0D,EAAW,CACb,GAAG,KAAK3K,WACZ,EACM12K,EAAO,KAAK+nL,eACb34Z,OAAQgjB,GAAQ,CAACy7Y,EAAcvpd,IAAI8tE,EAAI67E,IAAI,GAC3Cr2I,IAAKw6D,GAAQA,EAAIu3D,GAAG,EAIzB,OAHAg0U,EAAMjlc,QAASu1I,IACX,OAAOozT,EAASpzT,EACpB,GACO,KAAKzoC,UACR67V,EACArhL,EACAzyQ,GAAW,oBAAoBowb,EAAM,GACrC3yT,GAAc2iU,aAClB,CACJ,CAEAlL,WAAWh8c,EAAwB,CAC/B,GAAM,CAAEiwc,eAAgB,KACxB,OACI,KAAKmJ,YACAjoc,IAAKq2I,GAASyoT,EAAYzoT,EAAK,CAACxnJ,EAAM,EACtC2oD,OAAQnwD,GAAUsyc,GAAgBtyc,IAAUA,IAAU,IACtDyH,SAAW,CAExB,CAEAond,eAAsB,CAClB,OAAO,KAAKC,WACR,KAAKpX,QACA/+b,IAAKnR,GAAW,KAAKg8c,WAAWh8c,GAASA,EAAQ,MACjD2oD,OAAOsiF,IAEpB,CAEAs8U,oCAAoCrQ,EAA2B,CAC3D,OAAO,KAAKiO,UACPrmS,GAAQo4R,EAAMvwS,MAAOnf,GAASsjT,GAAgBhsR,EAAIt3B,EAAK,GACxD,sDAAsD0vT,EAAMr4c,KACxD,OAER,CACJ,CAEA2od,qCAAqCtQ,EAA2B,CAC5D,OAAO,KAAKiO,UACPrmS,GAAQo4R,EAAMlgV,KAAMwwB,GAASsjT,GAAgBhsR,EAAIt3B,EAAK,GACvD,wDAAwD0vT,EAAMr4c,KAC1D,OAER,CACJ,CAEA4od,aAAaC,EAAqBC,EAA2B,CACzD,OAAO,KAAKC,cAAc,EAAGF,GAAUC,CAAQ,EACnD,CAGAC,cAAc/M,EAA6D,CACvE,IAAMgN,EAAW1wU,OAAOn6I,KAAK69c,GACvBiN,EAAW3wU,OAAOlwH,OAAO4zb,GAEzB/zb,EACF,WACA+gc,EACK12c,KAAKnX,EAAMgG,IAAU,IAAIhG,EAAK,QAAQ8td,EAAS9nd,GAAO,EAAE,EACxDnB,KAAK,SAEd,OAAO,KAAKkgH,UACR47V,IAAkB,KAAK1K,YAAa4K,GACpC,KAAKthL,KAAKpoR,IAAK+xH,GACX2kV,EAASx0V,SAAS6P,EAAIskB,IAAI,EACpB,CACI,GAAGtkB,EACHskB,KAAMsgU,EAASD,EAAS9md,QAAQmiI,EAAIskB,IAAI,EAC5C,EACAtkB,GAEVp8G,EACAy9H,GAAcwjU,aAClB,CACJ,CAEAT,WAAWpX,EAAmBppb,EAAwB,CAClD,IAAMoiF,EAAO,IAAIm8W,GAAW,KAAKl0S,QAAS++R,EAAS,IAInD,OAHIhnW,EAAKo8W,OAAA,EACE,KAAKnB,cAAcr9b,GAAW,iBAAiB,EAEnD,KAAKi4F,UACR,KAAKkxV,YACL,KAAK12K,KACLzyQ,GAAW,YAAYopb,EAAQjwc,OAAO,OACtCskJ,GAAcghU,WACdr8W,EAER,CAEA8+W,aACI5O,EACA6O,EACI,CACJ,IAAMrN,EAA4B,CAAE,GAAG,KAAK3K,WAAY,EAIxD,OAHAmJ,EAAYnnc,QAASu1I,IACjBozT,EAASpzT,GAAQozT,EAASpzT,EAAK,CAACr2I,IAAI82c,EACxC,GACO,KAAKlpW,UACR67V,EACA,KAAKrhL,KACL,qCAAqC6/K,EAAYv6c,KAAK,WACtD0lJ,GAAc2jU,UAClB,CACJ,CAEAC,eACI/O,EACAl2U,EACAklV,EAII,CACJ,GAAIhP,EAAYn5c,SAAW,EAAG,OAAO,KACrC,IAAM26c,EAA4B,CAAE,GAAG,KAAK3K,WAAY,EAkBxD,MAjBA2K,GAAS13U,EAAIskB,MAAQ,KAAK0oT,QAAQ/+b,IAAKnR,IACnC,IAAMipC,EAAO,KAAK43a,WAAW/T,2BAA2B9sc,GAElD8+K,EAGF,CAAC,EASL,OARAs6R,EAAYnnc,QAASu1I,IACjBs3B,EAAIt3B,GAAQ,CACRhvJ,MAAO,KAAKoF,IAAI4pJ,GAAMslT,2BAA2B9sc,GACjDipC,KAAM,KAAKrrC,IAAI4pJ,GAAMylT,mBAChBH,2BAA2B9sc,EACpC,CACJ,GAEOood,EAAUtpS,EAAK71I,EAC1B,GACO,KAAK81E,UACR67V,EACA,CAAI,QAAKrhL,KAAMr2J,CAAG,EAClB,qBAAqBk2U,EAAYv6c,KAAK,MAAM,UAAUqkI,EAAIskB,KAAK,GAC/DjD,GAAc8jU,cAClB,CACJ,CAEAC,mCAAmClP,EAA4B,GAAU,CACrE,OAAO,KAAK4O,aAAa5O,EAAcjhd,GACnC,OAAOA,GAAQ,UAAYA,GAAO,EAC5B0yc,GAAgBjB,mBAChBzxc,EAEd,CAEAowd,oCAAoCnP,EAA4B,GAAU,CACtE,OAAO,KAAK4O,aAAa5O,EAAcjhd,GACnC,OAAOA,GAAQ,UAAYA,EAAM,EAC3B0yc,GAAgBH,qBAChBvyc,EAEd,CAEAqwd,sCAAsCpP,EAAiC,CACnE,OAAO,KAAK4O,aAAa5O,EAAcjhd,GAClC83C,GAAW93C,GAA8CA,EAAvC0yc,GAAgBnB,oBAAuBvxc,CAElE,CAEAswd,mBACI3sT,EAAU,EACVs9S,EAA4B,GAC5B19S,EAAOvG,KAAK36G,IAAA,EACZ0ga,MACIrQ,GAAgBlB,kBAChB,CACJ,OAAO,KAAK5qV,UACRi8V,IACI,KAAK/K,YACLn0S,EACAs9S,EACA19S,EACAw/S,GAEJ,KAAK3hL,KACL,qBAAqBz9H,EAAQ,YAAYs9S,EAAYv6c,KACjD,WAEJ0lJ,GAAc2jU,UAClB,CACJ,CAEAQ,cAAcnvL,EAA4B,CACtC,OAAO,KAAKx6K,UACR,KAAKkxV,YACL,KAAK12K,KAAK53R,OAAO43R,GACjB,oBAAoBA,EACfpoR,IAAK+xH,GAAQ,IAAIA,EAAIskB,KAAK,EAAE,EAC5B3oJ,KAAK,WACV0lJ,GAAcokU,aAClB,CACJ,CAEAC,gBAAgBphU,EAAkBqhU,EAA+B,CAC7D,OAAO,KAAK9pW,UACR,CACI,GAAG,KAAKkxV,aACP4Y,EAAUrhU,MAAO,KAAKyoT,YAAYzoT,EACvC,EACA,KAAK+xI,KAAK53R,OAAO,CACb,CACI,GAAG,KAAK/D,IAAI4pJ,GAAMtkB,IAClB,GAAG2lV,CACP,CACH,GACD,sBAAsBrhU,EAAK,eAAeqhU,EAAUrhU,KAAK,GACzDjD,GAAcokU,aAClB,CACJ,CAEAG,mBAAmBvvL,EAA4B,CAC3C,OAAO,KAAKmvL,cAAcnvL,EAAK5wO,OAAQu6E,GAAQ,CAAC,KAAKrlI,IAAIqlI,EAAIskB,IAAI,GACrE,CAEAuhU,UAAoB,CAChB,IAAM7R,EAAQ,KAAKkC,YACb/8S,EAAO,KAAKA,KAAKlrJ,IAAK2tK,GACxBo4R,EAAM/lc,IAAKq2I,GACPsjT,GAAgBhsR,EAAIt3B,EAAK,EAAIs3B,EAAIt3B,GAAQvD,SAGjD,MAAO,CAAC,KAAKm1T,YAAgB/8S,IAAI,CACrC,CAGA2sT,eAAyB,CACrB,IAAM9R,EAAQ,KAAKkC,YACb/8S,EAAO,KAAKA,KAAKlrJ,IAAK2tK,GAAQo4R,EAAM/lc,IAAKq2I,GAASs3B,EAAIt3B,EAAK,GACjE,MAAO,CAAC,KAAK4xT,YAAgB/8S,IAAI,CACrC,CAEA16J,OAAOsnd,EAAqBnic,EAAkB,kBAAyB,CACnE,IAAM6iM,EAAM,CAAC,KAASs/P,IAAM,EAEtBC,EAAWj5a,GADJ05K,EAAIzhD,QAASrjC,GAAUA,EAAM00J,IAChBA,EAAOr2J,GAAQA,EAAIskB,IAAI,EACjD,OAAO,KAAKzoC,UACR06V,IACI9vP,EAAIx4M,IAAK0zH,GAAUA,EAAMorU,WAAW,EACpCiZ,EAAS/3c,IAAK+xH,GAAQA,EAAIskB,IAAI,GAElC0hU,EACApic,EACAy9H,GAAc4kU,MAClB,CACJ,CA2BAl7G,SAASmrG,EAA6C,CAClD,GAAIA,EAAYn5c,SAAW,EACvB,MAAU63J,MAAM,iDAEpB,GAAM,CAACsxT,EAAOC,GAASjQ,EACjBE,EAAO,KAAK17c,IAAIwrd,GAChB7P,EAAO,KAAK37c,IAAIyrd,GAIhBC,EAAuBhQ,EAAK9L,SAAW+L,EAAK/L,SAClD,GAAI,KAAKr8R,SAAWm4S,EAAsB,CACtC,GAAI,KAAKn4S,QAAUm4S,EACf,MAAUxxT,MAAM,qCAGpB,OAAO,IACX,CAKA,IAAMyxT,EAAoB,IAAIv4c,IAC9B,IAAK,IAAMhR,KAAS,KAAKkwc,QAAS,CAC9B,IAAMsZ,EAAOlQ,EAAKryb,OAAOjnB,GACnBypd,EAAOlQ,EAAKtyb,OAAOjnB,GACpBupd,EAAkB1rd,IAAI2rd,GAEtBD,EAAkB3rd,IAAI4rd,GAAOp3c,IAAIq3c,GADlCF,EAAkB5rd,IAAI6rd,EAAM,IAAIx3c,IAAI,CAACy3c,CAAK,GAElD,CAMA,IAAMC,EAAiC,GACjCC,EAAiC,GACjCC,EAAsBrQ,EAAK1M,gBAAgB95b,KAEjD,IAAK,IAAMy2c,KAAQlQ,EAAKzM,gBAAiB,CACrC,IAAMgd,EAAgBN,EAAkB3rd,IAAI4rd,GAI5C,GAAIK,GAAe92c,OAAS62c,EAAqB,SAGjD,IAAMppP,EAAO,IAAIxuN,IAAIunc,EAAK1M,eAAe,EACzC,IAAK,IAAM4c,KAAQI,GAAiB,GAAIrpP,EAAKipO,OAAOggB,GAEpD,IAAK,IAAMA,KAAQjpP,EACfkpP,EAAczod,KAAKuod,GACnBG,EAAc1od,KAAKwod,EAE3B,CACA,IAAMK,EAAqC,EACtCV,GAAQM,GACRL,GAAQM,CACb,EACMI,EAAc,IAAK,KAAK,YAC1BD,EACA,KAAKvwL,KACL,CAAEjkO,OAAQ,IAAK,GAGnB,OAAO,KAAK3zD,OACR,CAACood,CAAW,EACZ,4BAA4B3Q,GAChC,CACJ,CAEA,OAAO4Q,eAAer+Y,EAAsC,CACxD,OAAOA,aAAe6iY,GAAa7iY,EAAIwnY,YAAc,IACzD,CACJ,EAEMkS,GAAN,KAAMA,CACFn8W,KACAioE,QACA,YACIA,EACA94K,EACA4xd,EAAY,GACd,CAEE,GADA,KAAK94S,QAAUA,EACX,OAAO94K,EAAM,IAAO,UAAW,KAAK6wG,KAAO7wG,MAC1C,CACD,IAAMsF,EAAM,IAAIqU,IAAI3Z,GACpB,KAAK6wG,KAAOj5D,GAAQ,EAAGkhI,GAAShgK,IAAKnR,GACjCrC,EAAIE,IAAImC,GAASiqd,EAAY,CAACA,EAEtC,CACJ,CAEA3E,QAAkB,CACd,OAAO,KAAKp8W,KAAKy9D,MAAOnuK,GAAUA,EACtC,CAEAqiB,MAAMo1b,EAA+C,CACjD,IAAMiK,EAAiC,CAAC,EAClCgQ,EAAwB,GAC9B,IAAK,IAAIhpd,EAAI,EAAGA,EAAI,KAAKiwK,QAASjwK,IAC1B,KAAKgoG,KAAKhoG,IAAIgpd,EAAYjpd,KAAKC,GAiBvC,OAbIgpd,EAAYjqd,SAAW,KAAKkxK,QACrB8+R,GAGX94T,OAAOn6I,KAAKizc,GAAah+b,QAASu1I,IAC9B,IAAM2iU,EAAiBla,EAAYzoT,GAC7B4iU,EAAiCvsT,MAAMqsT,EAAYjqd,MAAM,EAC/D,IAAK,IAAIiB,EAAI,EAAGA,EAAIgpd,EAAYjqd,OAAQiB,IACpCkpd,EAAUlpd,GAAKipd,EAAeD,EAAYhpd,IAG9Cg5c,EAAc1yT,GAAQ4iU,CAC1B,GACOlQ,EACX,CACJ,EAQagI,IACT7pd,GAEA,IAAIiod,GAAajod,GAAOmtd,aACpB,OACChtd,GAAU,CAAC,CAACA,EACb,qCACF6jK,K,s1GCvvCOguT,GAAb,MAAaA,UAAkB/J,G,gCAkB1B57S,E,EAAU4lT,sB,GAIV5lT,E,EAAU6lT,wB,GAIV7lT,E,EAAU8lT,kB,GAOV9lT,E,EAAU+rS,gB,GAIV/rS,E,EAAU+lT,kB,GAOV/lT,E,EAAUgmT,gB,GAIVhmT,E,EAAUimT,gB,GAOVjmT,E,EAAUkmT,c,GAIVlmT,E,EAAUqN,S,GAIVrN,E,EAAUuN,S,GAKVvN,E,EAAUmmT,W,GAMVnmT,E,EAAkBgpS,U,GAIlBhpS,E,EAAUomT,wB,GAuFVpmT,E,EAAkBqmT,c,GAynBlBrmT,E,EAAUsmT,sB,GAWVtmT,E,EAAUumT,qB,GAOVvmT,E,EAAUwmT,6B,uBAhzBR,SAAAptc,CAAA,EAAAy4T,IAAA,K,CACH+3H,aAAgC,CAC5B,MAAO,EACX,CAEA,aAAa6c,QACTxta,EACAyta,EAA8B,GACZ,CAClB,IAAMrqb,EAAW,MAAM25H,MAAM/8G,GAC7B,GAAI,CAAC5c,EAASu5H,GACV,MAAUxC,MACN,4BAA4Bn6G,EAAI,IAAI5c,EAASrX,OAAO,GAAGqX,EAASw5H,YACpE,EACJ,IAAM8wT,EAAM,MAAMtqb,EAASs0C,KAAA,EAC3B,OAAO,IAAIg1Y,EAAUgB,EAAKD,EAC9B,CAEA,IAAWd,sBAA8B,CACrC,OAAOzsT,MAAMxnI,KAAK,KAAKk0b,sBAAsB,CACjD,CAEA,IAAWA,wBAAsC,CAC7C,OAAO,KAAKC,iBAAiB3d,eACjC,CAEA,IAAW2d,kBAA+B,CACtC,OACI,KAAKhG,uBAAuBr+T,GAAgBqwT,UAAU,GACtD,KAAK54c,IAAIgoJ,GAAe4wT,UAAU,CAE1C,CAEA,IAAW/F,gBAAyB,CAChC,OAAO,KAAK+Z,iBAAiBhjU,IACjC,CAEA,IAAWijU,kBAA+B,CACtC,OACI,KAAKjG,uBAAuBr+T,GAAgBmwT,UAAU,GACtD,KAAK14c,IAAIgoJ,GAAe0wT,UAAU,CAE1C,CAEA,IAAWoU,gBAAyB,CAChC,OAAO,KAAKD,iBAAiBjjU,IACjC,CAEA,IAAWmjU,gBAA6B,CACpC,OACI,KAAKnG,uBAAuBr+T,GAAgBowT,QAAQ,GACpD,KAAK34c,IAAIgoJ,GAAe2wT,QAAQ,CAExC,CAEA,IAAWqU,cAAuB,CAC9B,OAAO,KAAKD,eAAenjU,IAC/B,CAEA,IAAWuqB,SAA4B,CACnC,OAAO9hI,GAAM,KAAKy9Z,QAAQ,CAC9B,CAEA,IAAWz7R,SAA4B,CACnC,OAAOhiI,GAAM,KAAKy9Z,QAAQ,CAC9B,CAGA,IAAWmd,WAAmC,CAC1C,GAAM,CAAE94S,UAASE,WAAY,KAC7B,GAAIF,IAAY9tB,QAAaguB,IAAYhuB,OACzC,MAAO,CAAC8tB,EAASE,CAAO,CAC5B,CAEA,IAAmBy7R,UAAmB,CAClC,OAAO,KAAK9vc,IAAI,KAAKijd,WAAWr5T,IAAI,EAAEvgI,MAC1C,CAEA,IAAW6jc,wBAAgD,CACvD,OAAO,KAAKhT,SAAS,CAAC,KAAKrH,cAAe,EAC9C,CAEA6a,wBAAwBzf,EAA8C,CAClE,OAAO57Z,GAAU47Z,GAAW0f,uBACtBlgB,GAAoBQ,EAAUrkT,IAAI,EAClCqkT,EAAU0f,qBACpB,CAGAC,6BAA6BnwS,EAAoC,CAC7D,IAAMn4C,EAAM,KAAKtlI,IAAIy9K,GAAYn4C,IAC3BskB,EAAO,KAAK8jU,wBAAwBpoV,GAC1C,OAAO,KAAKtlI,IAAI4pJ,EACpB,CAEAikU,gCAAgCrS,EAAqC,CAEjE,OAAOx7S,GACH3tH,GACI,KAAK+za,WAAW5K,GACXzwZ,OAAQgjB,GAAQA,GAChBu8F,QAASv8F,GAAQA,EAAIgiY,YAAY,GAGlD,CAEA+d,cAAcxU,EAA2D,CACrE,IAAMiC,EAAO,KAAK6K,WAAW9M,GACvB2O,EAAO1M,EAAKhoc,IAAKw6D,GAAQA,EAAIomG,OAAO,EACpC+zS,EAAQ3M,EAAKhoc,IAAKw6D,GAAQA,EAAIsmG,OAAO,EAC3C,MAAO,CAAChiI,GAAM41a,GAAO51a,GAAM61a,EAAM,CACrC,CAEA6F,sBACIzU,EACoC,CACpC,IAAMiC,EAAO,KAAK6K,WAAW9M,GACvB2O,EAAO1M,EAAKhoc,IAAKw6D,GAAQ17B,GAAM07B,EAAIyhY,aAAa,GAChD0Y,EAAQ3M,EAAKhoc,IAAKw6D,GAAQ17B,GAAM07B,EAAIyhY,aAAa,GACvD,MAAO,CAACn9Z,GAAM41a,GAAO51a,GAAM61a,EAAM,CACrC,CAEA8F,oBAAoBzqd,EAA2B,CAC3C,IAAM0qd,EAAW,IAAI75c,IAAI7Q,GACzB,OAAO,KAAKqkd,aACR,KAAK/U,eACJj4c,GAAUqzd,EAAShud,IAAIrF,GACxB,mCAAmC2I,EAAM,EAC7C,CACJ,CAEA2qd,8CAA8C,CAC1CC,WACAC,YAIK,CACL,GAAI,CAACA,GAAY,CAACD,EAAU,OAAO,KAEnC,IAAME,EAAc,IAAIj6c,IAAI+5c,GACtBG,EAAc,IAAIl6c,IAAIg6c,GAEtBG,EAAiBvqB,GACnB,CAACqqB,EAAYpud,IAAI+jc,GACfwqB,EACFF,EAAYn5c,KAAO,EACZ6ub,GACGsqB,EAAYrud,IAAI+jc,OACL,GAEnBhyE,EAAYgyE,GACduqB,EAAcvqB,IAAewqB,EAAcxqB,GAEzCyqB,EAAeN,EAAWA,EAASltd,KAAK,MAAQ,GAChDytd,EAAeN,EAAWA,EAASntd,KAAK,MAAQ,GAEtD,OAAO,KAAK2md,aACR,KAAK/U,eACL7gF,EACA,0CAA0Cy8F,EAAa,4CAA4CC,GACvG,CACJ,CAGA,IAAmBvB,cAAqB,CAEpC,OADI,KAAKlK,WAAW9U,UAAkB,KAC/B,KAAK90U,OAAO,CAAC,KAAK4pV,WAAWr5T,IAAK,EAC7C,CAEA+kU,kBAAkB5/c,EAAkB+qC,EAAsB,CAItD,GAHI,KAAK80a,SAGL,CAAC,KAAK3B,UAAW,OAAO,KAC5B,GAAM,CAAC94S,EAASE,GAAW,KAAK44S,UAG1B4B,EAAgB9/c,IAAUkoI,IAAWo9B,EAAUtlK,EAC/C+/c,EAAch1a,IAAQ,KAAYq6H,EAAUr6H,EAE5Ci1a,EAAiB,KAAK9L,YAAYr5T,MAAQ5B,GAAeiwT,KAEzDv9F,EAAc,oCAAoCm0G,EAAc,KAAKC,IAM3E,OAHID,GAAiB16S,GAAW26S,GAAez6S,EACpC,KAAKkyS,cAAc7rG,GAAayyG,aAEpC,KAAKvF,aACRmH,EACC1jb,GACIA,GAAmBwjb,GACnBxjb,GAAmByjb,EACxBp0G,GAIFyyG,YACN,CAEA6B,oBAAoBjvT,EAAqBhB,EAAY,EAAS,CAC1D,IAAMkkT,EAAa,KAAKA,WAClBxC,EAAawC,EAAW/T,2BAI9B,GAAInwS,IAAc,EAAG,CACjB,IAAMkwT,EAAiB,IAAI76c,IAAI2rJ,GAC/B,OAAO,KAAK6nT,aACR3E,EAAWr5T,KACVv+G,GAAS4jb,EAAehvd,IAAIorC,GAC7B,8DAA8D00H,EAAY9+J,KACtE,OAER,CACJ,CAGA,IAAMiud,EAAsB,KAAKhC,uBAC3BiC,EAAkB,IAAI/6c,IAmB5B,OAlBA,KAAKs4c,qBAAqBr4c,QAAS2vb,IAE/B,IAAMorB,GADUF,EAAoBlvd,IAAIgkc,IAAe,IAElDzwb,IAAKnR,IAAW,CAAEipC,KAAMo1a,EAAWr+c,GAAkBA,OAAM,IAC3DoM,MAAMsS,EAAGC,IAAMD,EAAEuqB,KAAOtqB,EAAEsqB,IAAI,EAEnC00H,EAAY1rJ,QAAS0pF,IACjB,IAAM37F,EAAQy8J,IACVuwT,EAAY77c,IAAKi+C,GAAMA,EAAEnmB,IAAI,EAC7B0yD,EACAghE,GAEE+1J,EACF1yT,IAAUikJ,OAAYA,OAAY+oU,EAAYhtd,GAC9C0yT,IAAYzuK,QAAW8oU,EAAgB36c,IAAIsgT,EAAQ1yT,KAAK,CAChE,EACJ,GAEO,KAAKwld,aACR,KAAK/U,gBACJ3xR,EAAK9+K,IAAU+sd,EAAgBlvd,IAAImC,GACpC,4DAA4D29J,EAAY9+J,KACpE,MACF,kBAAkB89J,GACxB,CACJ,CAEAswT,yBAAyB/V,EAA8B,CACnD,OAAOA,EAAMlgV,KAAMwwB,GAAS,KAAK5pJ,IAAI4pJ,GAAM2Q,YAAc,EAC7D,CAEA+0T,aAAoB,CAChB,OAAO,KAAK5F,WAAW,KAAKpX,QAAS,gBACzC,CAEAid,iCAAiC3lU,EAAwB,CACrD,OAAO,KAAKg+T,aACRh+T,EACChvJ,GAAUsyc,GAAgBtyc,GAC3B,0CAA0CgvJ,EAAK,QACnD,CACJ,CAGA4lU,uCAAuChU,EAAiC,CACpE,IAAMiU,EAAsB,KAAKvC,uBAG3BwC,EAAoB,IAAIt7c,IAAIq7c,EAAoBrwd,KAAA,GAEtD,IAAK,IAAMwqJ,KAAQ4xT,EAAa,CAC5B,IAAMztY,EAAM,KAAK/tE,IAAI4pJ,GAGrB,GAAI77E,EAAI4hY,iBAAmB,EAE3B,IAAK,IAAM3L,KAAc0rB,EAAmB,CACxC,IAAMC,EAAuBF,EAAoBzvd,IAAIgkc,GACrD,GAAI,CAAC2rB,EACD,MAAUz1T,MAAM,6CAKhBy1T,EAAqBv2V,KAAMh3H,GACvB8qc,GAAgBn/X,EAAImhY,2BAA2B9sc,EAAM,CAKxDwtd,GACDF,EAAkB7jB,OAAO7H,EACjC,CACJ,CAEA,IAAM6rB,EACF,KAAKlD,uBAAuB72c,WAAW45c,GACrCI,EACFD,EAAkB16c,KAAO,EACnB,CAAI06c,IAAkB,EAAC5ud,KAAK,MAC5B,SAQV,OANI4ud,EAAkB16c,OAAS,EACpB,KAAKoxc,cACR,gDACJ,EAGG,KAAKqB,aACR,KAAK/U,eACJkd,GAAkBL,EAAkBzvd,IAAI8vd,GACzC,QAAQF,EAAkB16c,KAAK,8CAA8Cqmc,EAAYv6c,KAAK,MAAM,uBAAuB6ud,GAC/H,CACJ,CAGAE,wDACIxU,EACI,CACJ,IAAMiU,EAAsB,KAAKvC,uBAC3B+C,EAAY,IAAI77c,IAAI,KAAK07b,QAAQ,EAGjCogB,EAA2B,IAAI97c,IAAIq7c,EAAoBrwd,KAAA,GAGvDswd,EAAoB,IAAIt7c,IAGxB+7c,EAAcD,EAAyB/6c,KAGvCi7c,EAAcV,IAChB,IAAMG,EACF,KAAKlD,uBAAuB72c,WAAW45c,GACrCI,EACFD,EAAkB16c,KAAO,EACnB,CAAI06c,IAAkB,EAAC5ud,KAAK,MAC5B,SACV,MAAO,sEAAsEu6c,EAAYv6c,KAAK,MAAM,uBAAuB6ud,GAC/H,EAIA,IAAK,IAAMlmU,KAAQ4xT,EAAa,CAC5B,IAAMztY,EAAM,KAAK/tE,IAAI4pJ,GAErB,GACI77E,EAAIwsF,YAAc41T,EAAcF,EAAU96c,MAC1C44D,EAAI4hY,iBAAmB,EACzB,CACE,IAAM+f,EAAoB,IAAIt7c,IAAIq7c,EAAoBrwd,KAAA,GAEtD,OAAO,KAAKwod,aACR,KAAK/U,eACJkd,GACGL,EAAkBzvd,IAAI8vd,GAC1BK,EAAWV,GAEnB,CACJ,CAEA,IAAK,IAAM9lU,KAAQ4xT,EAAa,CAC5B,IAAMztY,EAAM,KAAK/tE,IAAI4pJ,GAErB,IAAK,IAAMo6S,KAAcksB,EAA0B,CAC/C,IAAMP,EAAuBF,EAAoBzvd,IAAIgkc,GACrD,GAAI,CAAC2rB,EACD,MAAUz1T,MAAM,6CAIhBy1T,EAAqBttd,OAAS4td,EAAU96c,MAKxCw6c,EAAqBv2V,KAChBh3H,GACG,CAAC8qc,GACGn/X,EAAImhY,2BAA2B9sc,EACnC,CAKPiud,IACDX,EAAkBl7c,IAAIwvb,GACtBksB,EAAyBrkB,OAAO7H,GAExC,CACJ,CAEA,OAAO,KAAK4jB,aACR,KAAK/U,eACJkd,GAAkBL,EAAkBzvd,IAAI8vd,GACzCK,EAAWV,GAEnB,CAEAY,WAAmB7yS,EAA6C,CAC5D,IAAMgjS,EAAa,KAAKwC,WAAW55b,OAC7BA,EAAS,KAAKrpB,IAAIy9K,GAAYp0J,OACpC,GAAIo3b,EAAWp+c,SAAWgnB,EAAOhnB,OAI7B,MAAM63J,MACF,4CAA4CumT,EAAWp+c,OAAO,gBAAgBgnB,EAAOhnB,OAAO,uBAChG,EACJ,IAAMkR,EAAM,IAAIH,IAIhB,OAHAqtc,EAAWpsc,SAASg3B,EAAMjpC,IACtBmR,EAAIxT,IAAIsrC,GAAO93B,EAAIvT,IAAIqrC,IAAS,GAAKhiB,EAAOjnB,EAAM,GAE/CmR,CACX,CAIAg9c,sCAAsC9yS,EAA8B,CAChE,GAAI,CAAC,KAAKx9K,IAAIw9K,GAAa,OAAO,KAClC,IAAMwlS,EAAa,KAAKA,WAClBl1Y,EAAM,KAAK/tE,IAAIy9K,GACf+yS,EAAa,KAAKF,WAAW7yS,GAC7BgjS,EAAawC,EAAW55b,OACxBwzb,EAAUD,IAAW,KAAKjhL,KAAM,CAClCqyK,GAAsBjgY,EAAIu3D,IAAKijB,GAAgB8vT,kBAAkB,CACpE,GACK6D,EAAkC,CACpC,GAAG,KAAK7J,aACP50R,GAAa,KAAK40R,YAAY50R,EAAW,CAAClqK,KAAKhZ,EAAK6H,KACjD,IAAMqud,EAAYD,EAAWxwd,IAAIygd,EAAWr+c,EAAM,EAElD,OADIqud,IAAc,EAAUxjB,GAAgBV,kBACpC,IAAOhyc,EAAkBk2d,CACrC,EACJ,EACA,OAAO,KAAKtvW,UACR+6V,EACAW,EACA,eAAep/R,EAAW,2DAC1B92B,GAAc+pU,wBAClB,CACJ,CAKAC,+CACInV,EACI,CAEJ,GADAA,EAAcA,EAAYzwZ,OAAQ6+F,GAAS,KAAK3pJ,IAAI2pJ,IAChD,CAAC4xT,EAAYn5c,OAAQ,OAAO,KAEhC,IAAMw6c,EAAU,KAAKlhL,KAAKpoR,IAAK+xH,GACvBk2U,EAAY/lV,SAAS6P,EAAIskB,IAAI,EACtBokT,GACH1oU,EACAijB,GAAgB8vT,kBACpB,EACG/yU,CACX,EAEM+sU,EAAc,KAAKA,YACnBue,EAAoC,CAAC,EAErCC,EAAa5wT,MAAM,KAAKsT,OAAO,EAAE3uJ,KAAK,GAAGrR,KAAKu9c,EAAIxtd,IACpD+uC,GAAQmpa,EAAc5xT,IAClB,IAAMhvJ,EAAQy3c,EAAYzoT,EAAK,CAACtmJ,GAChC,OAAO+uC,GAAWz3C,GAASq8J,KAAKqC,IAAI1+J,GAAS,CACjD,IAGJ4gd,EAAYnnc,QAASu1I,IACjBgnU,EAAiBhnU,GAAQyoT,EAAYzoT,EAAK,CAACr2I,KAAK3Y,EAAO0I,KACnD,IAAMixN,EAAQs8P,EAAOvtd,GAGrB,MAFI,CAAC+uC,GAAWz3C,IAAU,CAACy3C,GAAWkiL,GAAe35N,EACjD25N,IAAU,EAAU04O,GAAgBV,kBAChC,IAAMt1S,KAAKqC,IAAI1+J,GAAU25N,CACrC,EACJ,GAEA,IAAM2nP,EAAiB,CACnB,GAAG7J,EACH,GAAGue,CACP,EAEA,OAAO,KAAKzvW,UACR+6V,EACAW,EACA,gEAAgErB,EAAYv6c,KACxE,KACF,GACF0lJ,GAAc0iU,gBAClB,CACJ,CAIA0H,8CACIC,EACAxV,EACI,CACJ,GAAI,KAAKyH,WAAW9U,UAAW,OAAO,KACtC,IAAM4gB,EAAiB,KAAK9L,WAAWr5T,KACjCizT,EAAU,KAAKlhL,KAAKpoR,IAAK+xH,GACvBk2U,EAAY/lV,SAAS6P,EAAIskB,IAAI,EACtBokT,GACH1oU,EACAijB,GAAgBiwT,qBACpB,EACGlzU,CACX,EACM2rV,EAAU13U,OAAOlwH,OACnBgpB,GAAU,KAAK86a,aAAa1uT,KAAOyiB,GAAQA,EAAI,KAAK2xR,eAAe,GACrEvoS,QAAS4mT,IACP1V,EAAYnnc,QAAS88c,IACjB,IAAIC,EACJF,EAAsBA,EAAoB39c,IACrC2tK,IACG,IAAMq4R,EAAS,CACX,GAAGr4R,CACP,EAEMtmL,EAAQsmL,EAAIiwS,GAsBlB,OApBIjwS,EAAI6tS,GAAkBiC,EACtBzX,EAAO4X,GACHlkB,GAAgBD,wBACZ36Z,GAAWz3C,GAGZw2d,IAAoB/qU,OAMpBzrJ,IAAU,EACjB2+c,EAAO4X,GACHlkB,GAAgBD,yBAEpBokB,EAAkBx2d,EAClB2+c,EAAO4X,GAAa,GARpB5X,EAAO4X,GACF,KAAOv2d,EAAQw2d,GAChBn6T,KAAKqC,IAAI83T,GAPb7X,EAAO4X,GACHlkB,GAAgBnB,qBAejByN,CACX,EAER,GACO2X,EACX,EAEA,OAAO,KAAK/vW,UACR8vW,EACApU,EACA,yDAAyDmU,EAAe,eAAexV,EAAYv6c,KAC/F,KACF,GACF0lJ,GAAc0iU,gBAClB,CACJ,CAEAgI,wCAA+C,CAC3C,IAAMC,EAAW,KAAKpE,uBAChBjK,EAAa,KAAKA,WACxB,GAAIA,EAAW9U,UAAW,OAAO,KACjC,IAAMsS,EAAawC,EAAW/T,2BACxBigB,EAAkB,IAAI/6c,IAO5B,OANAk9c,EAASj9c,QAASi+b,GACd,CAACjga,GAASA,EAAQ,EACb9+B,IAAK4/B,GAAMA,EAAEm/Z,EAAUlwc,GAAUq+c,EAAWr+c,EAAM,GAClD2oD,OAAOsiF,IACPh5H,QAASjS,GAAU+sd,EAAgB36c,IAAIpS,KAEzC,KAAKwld,aACR3E,EAAWr5T,MACVs3B,EAAK9+K,IAAU+sd,EAAgBlvd,IAAImC,GACpC,kDACJ,CACJ,CAEAmvd,sCACI/V,EACiC,CACjC,IAAM98S,EAAU88S,EAAYjoc,IAAKq2I,GAAS,KAAK5pJ,IAAI4pJ,IAC7C0nU,EAAW,KAAKpE,uBAChBzM,EAAa,KAAKwC,WAAW/T,2BAG7BggB,EAAsB,IAAI97c,IA2BhC,OA1BAk+c,EAASj9c,SAASi+b,EAAStO,KAUvB,IAAMnhB,EAAWxwY,GANWiga,EAAQvnZ,OAAQ3oD,GACxCs8J,EAAQqK,MAAOh7F,IACX,IAAMnzE,EAAQmzE,EAAImhY,2BAA2B9sc,GAC7C,OAAOiwC,GAAWz3C,IAAUA,IAAU,CAC1C,EAGA42d,EACCpvd,GAAUq+c,EAAWr+c,EAC1B,EACM0gb,EAAWzwY,GAAQiga,EAAUlwc,GAAUq+c,EAAWr+c,EAAM,EAC1Dygb,IAAax8R,QAAay8R,IAAaz8R,QAELqY,EAAQqK,MAAOh7F,IACjD,IAAMyhY,EACF,KAAK6C,YAAYtkY,EAAIqhY,wBACzB,OAAOI,EAAc3sB,KAAc2sB,EAAc1sB,EACrD,CACI2uC,GACAvC,EAAoBnvd,IAAIikc,EAAY,CAACnhB,EAAUC,CAAS,EAChE,GAEOosC,CACX,CAEAwC,mCAAmClW,EAAiC,CAEhE,GADAA,EAAcA,EAAYzwZ,OAAQ6+F,GAAS,KAAK3pJ,IAAI2pJ,IAEhD,KAAKq5T,WAAW9U,WAChB,EAAE,KAAK8U,sBAAsBhM,GAAcn/S,OAC3C0jT,EAAYn5c,SAAW,EAEvB,OAAO,KAEX,IAAMq8J,EAAU88S,EAAYjoc,IAAKq2I,GAAS,KAAK5pJ,IAAI4pJ,IAC7CslU,EACF,KAAKqC,sCAAsC/V,GAGzC/8S,EAAkB,GACxBywT,EAAoB76c,QAASi+b,IACzB,GAAM,CAACqf,EAAUC,GAAU,KAAK/I,OAAOvW,GAEjCiH,EAAkB,CAAE,GAAGqY,CAAO,EACpClzT,EAAQrqJ,QAAS05D,IACb,IAAMqyY,EAAWryY,EAAIqhY,uBAEf5za,EAAYm2b,EAASvR,GAErBplT,EADU42T,EAAOxR,GACQ5kb,EAEzBs/H,EAAa62T,EAAS5jZ,EAAI67E,MAC1BmR,EAAW62T,EAAO7jZ,EAAI67E,MAG5B2vT,EAAOxrY,EAAI67E,MAAQiR,IAAKC,EAAYC,EAAUC,GAG9C,IAAM62T,EAAgBtkB,GAClBx/X,EAAI67E,IACR,EACA2vT,EAAOsY,GAAiBr2b,CAC5B,GAEAijI,EAAKp7J,KAAKk2c,EACd,GAEA,IAAMsD,EAA2B,CAC1BD,OACC,KAAKjhL,KACLj9H,EAAQnrJ,IAAKw6D,GACTigY,GACIjgY,EAAIu3D,IACJijB,GAAgBiwT,qBACpB,IAGL95S,KAAQnrJ,IAAKw6D,IACL,CACH,GAAG,KAAKk1Y,WAAW39U,IACnBskB,KAAM2jT,GAAwCx/X,EAAI67E,IAAI,EACtDkoU,YAAa,CACTr0S,WAAY1vG,EAAI67E,KAChBmoU,aAAc,mBAClB,CACJ,EACJ,CACJ,EAEA,OAAO,KAAK5wW,UACRs9C,EACAo+S,EACA,sCAAsCrB,EAAYv6c,KAAK,QACvD0lJ,GAAc2jU,UAClB,CACJ,CAEA0H,YAAY3wd,EAID,CACP,GAAM,CACF4wd,iBAAiB,CAAC,KAAKjF,YAAY,EACnC3zV,SAAS,CAAC,KAAKw5U,cAAc,EAC7Bqf,gBAAgB,IAChB7wd,GAAW,CAAC,EAEV8wd,EAAiB/1d,GACnBA,EAAKw7E,YAAA,EAAc52E,QAAQ,OAAQ,KAEjCoxd,EAAqBrkZ,IACvB,IAAMu3D,EAAMv3D,EAAIu3D,IAChB,OAAO4sV,EACA5sV,EAAIkyC,WAAa26S,EAAcpkZ,EAAI6gY,mBAAmB,EACvD7gY,EAAI6gY,mBACd,EAEMyjB,EAAwBtkZ,IAC1B,IAAMu3D,EAAMv3D,EAAIu3D,IAEZ4nC,EAAQklT,EAAkBrkZ,GAE9B,GAAIu3D,EAAIvnC,aAAesoD,OAAW,CAC9B,IAAMtoD,EAAahwB,EAAIojY,WAAW7rU,EAAIvnC,UAAU,EAChDmvE,GAASglT,EACH,QAAQn0X,IACR,OAAOA,GACjB,CAKA,GAHIunC,EAAIsyB,SAAS2/K,eACbrqK,GAASglT,EAAgB,cAAgB,gBAEzCnkZ,EAAIu3D,IAAIwsV,aAAaC,eAAiB,cAAe,CACrD,IAAMO,EAAWvkZ,EAAIu3D,IAAIwsV,YAAYr0S,WAC/B80S,EAAa,KAAKvyd,IAAIsyd,GACtB3ta,EAASuta,EACT,gBACA,iBACNhlT,EAAQ,GAAGklT,EAAkBG,KAAc5ta,GAC/C,CAEA,OAAOuoH,CACX,EAEMslT,EAAwBzkZ,IAC1B,IAAM0kZ,EAAaP,EACbC,EAAcpkZ,EAAIunY,YAAY,EAC9BvnY,EAAIunY,aAEV,GAAIvnY,EAAIu3D,IAAIwsV,aAAaC,eAAiB,eAAgB,CACtD,IAAMO,EAAWvkZ,EAAIu3D,IAAIwsV,YAAYr0S,WAC/B80S,EAAa,KAAKvyd,IAAIsyd,GAEtB3ta,EAASuta,EACT,cAAcO,EAAW76Y,YAAA,IACzB,cAAc66Y,EAAW,GAE/B,OAAOJ,EAAqBE,GAAc5ta,CAC9C,CAEA,OAAO8ta,CACX,EAOA,OAAO,KAAKlJ,YAAY0I,GACnB54V,OAAOA,GACPq5V,MAAM,CAAEC,iBAPa5kZ,GACtBA,aAAe6iY,GACT4hB,EAAqBzkZ,GACrBskZ,EAAqBtkZ,EAID,EAClC,CAEA2kZ,MAAMrxd,EAGK,CACP,GAAM,CACF4mB,YAAY,IACZ0qc,mBAAoB5kZ,GAA4BA,EAAI67E,MACpDvoJ,GAAW,CAAC,EAmBhB,OAhBI,KAAKqid,eACAnwc,IAAKw6D,GAAQouF,IAAUw2T,EAAiB5kZ,KACxC9sE,KAAKgnB,GAAa;EAEd,KAAKw2I,KACblrJ,IAAK2tK,GACF,KAAKwiS,eAAenwc,IAAKw6D,IACrB,IAAMnzE,EAAQsmL,EAAInzG,EAAI67E,MACtB,OAAOsjT,GAAgBtyc,GAChBmzE,EAAImjY,aAAat2c,IAAU,GAC5B,EACV,IAEH2Y,IAAK2tK,GAAQA,EAAIjgL,KAAKgnB,IACtBhnB,KAAK;CAEMkoE,CACpB,CAEA,IAAWikZ,sBAA+C,CACtD,OAAO,KAAKtN,WACR,KAAKjN,eACL7qT,GAAe4qU,WACnB,CACJ,CAEAC,sBAAsB7uB,EAA2C,CAC7D,OAAO,KAAKopB,qBAAqBptd,IAAIgkc,EACzC,CAEA,IAAWqpB,qBAA+C,CACtD,OAAO,KAAKvN,WAAW,KAAKjN,eAAgB,KAAKia,cAAc,CAInE,CAEA,IAAWQ,6BAAkD,CACzD,OAAO,IAAIl6c,IACP,KAAKswc,eACA34Z,OAAQgjB,GAAQA,EAAIu3D,IAAIulF,KAAK,EAC7Bt3M,IAAKw6D,GAAQ,CAACA,EAAIu7X,YAAav7X,EAAIu3D,IAAIulF,KAAO,GAE3D,CAIAioQ,wBACI9uB,EACAvmR,EACyB,CACzB,IAAM60R,EAAU,KAAK4a,uBAAuBltd,IAAIgkc,GAChD,GAAI,CAACsO,EAAS,OACd,IAAMjpb,EAAS,KAAKrpB,IAAIy9K,GAAYyxR,2BAE9B9sc,EADakwc,EAAQl8H,WACbt7M,EAAWu9B,KACpBj2J,GAAU,EAAEinB,EAAOjnB,aAAkB0lJ,GAAA,EAE1C,OAAO1lJ,IAAUikJ,OAA4BA,OAAhBh9H,EAAOjnB,EACxC,CAEA2wd,aAAavX,EAA4C,CAKrD,OAJKA,EAAYn5c,OACbm5c,EAAYn5c,SAAW,EAChB,IAAI+R,IAAI,KAAKpU,IAAIw7c,EAAY,EAAE,EAAExL,eAAe,EAEpDltS,IACH04S,EAAYjoc,IAAKq2I,GAAS,IAAIx1I,IAAI,KAAKpU,IAAI4pJ,GAAMomT,eAAe,IALpC,IAAI57b,GAOxC,CAKAyiS,YACIm8K,EACAv1S,EACAsxS,EACAkE,EACAvnc,EAC4C,CAC5C,IAAMo8b,EAAkBkL,EAAYlL,gBAAgB,KAAKjV,cAAc,EACjE9kY,EAAMilZ,EAAYhzd,IAAIy9K,GACtB68R,EAAevsY,EAAIohY,gBACnB+jB,EAAYnlZ,EAAImhY,2BAA2B94S,MAAA,EAC3C+8T,EAAWH,EACZhzd,IAAI+ud,GACJ7f,2BAA2B94S,MAAA,EAYhC,OAXA0xT,EAAgBzzc,SAASg+B,EAAGjwC,KACxB6wd,EACIC,EACAC,EACA7Y,EACA5ub,EACAo8b,EAAgB1ld,GAChB0ld,EAAgB1ld,EAAQ,EAC5B,CACJ,GAEO,CACHinB,OAAQ6pc,EACRngB,MAAOogB,CACX,CACJ,CAIAC,+BACI31S,EACA,CAAE41S,4BAA2BC,qBAAwC,CAAC,EAClE,CAEJ,GAAI,CAAC,KAAKrzd,IAAIw9K,GAAa,OAAO,KAElC,IAAMxsG,EAAS,KAAKjxE,IAAIy9K,GAClBwwR,EAAYh9X,EAAOq0D,IACnBy5B,EAAYu0T,GAAqBriZ,EAAO8tF,WAAa,EACrDwvS,EACF8kB,GACApiZ,EAAOs9X,mBACPl3T,GAAkBy9K,QAEhBy+J,EAAqB,KAAKtQ,WAAW9U,UAGrC,KAAKnuc,IAAIgoJ,GAAeiwT,IAAI,EAF5B,KAAKgL,WAILuQ,EACF9lB,GAA0B,KAAMjwR,IAChC4vR,IAA4BY,GAC1BwlB,EAAoB,KAAKzzd,IAAIwzd,GAC7B7lB,EAAmBL,GAAmC7vR,GAExD40R,EACJ,GAAItzS,EAAW,CACX,IAAMi0T,EAAc,KAAK3iH,SAAS,CAC9B,KAAKwiG,eACL0gB,EAAkB3pU,IACrB,GAAEvwB,OAAO,CAAC,KAAKw5U,eAAgB0gB,EAAkB3pU,IAAK,GAEjD8pU,EACF,CAACnlB,GACDA,IAAsBl3T,GAAkBy9K,QACtC6+J,EACFD,GACAnlB,IAAsBl3T,GAAkBu8U,UACtCC,EACFH,GACAnlB,IAAsBl3T,GAAkBy8U,SAEtCC,EAAsB,KAAKl9K,YAC7Bm8K,EACAv1S,EACAg2S,EAAkB7pU,KAClBoxT,IACA,CACIgZ,uBAAwBL,EAClB50T,EACA,EACNk1T,sBAAuBJ,EAAsB90T,EAAY,CAC7D,GAGJszS,EAAc,CACV,GAAG2gB,EAAY3gB,aACd50R,GAAas2S,EAAoB1qc,QACjCskb,GAAmBomB,EAAoBhhB,KAC5C,CACJ,KAEIV,GAAc,CACV,GAAG,KAAKA,aACP1E,GACG8lB,EAAkBvkB,0BAC1B,EAGJ,OAAO,KAAK/tV,UACRkxV,EACA,CACO,QAAK12K,KACR,CACI,GAAG83L,EAAkBnuV,IACrBskB,KAAM+jT,EACN/1S,QAAS,CAAEs8T,eAAgB,EAAM,EACjCpC,YAAa,CAAEr0S,aAAYs0S,aAAc,cAAe,CAC5D,CACJ,EACA,iCAAiCt0S,EAAW,kBAAkB1e,EAAU,uBAAuB4uS,EAAiB,0BAChHhnT,GAAc0iU,gBAClB,CACJ,CAEA8K,0BACI12S,EACA22S,EAAuB,GACnB,CAEJ,GAAI,CAAC,KAAKn0d,IAAIw9K,GAAa,OAAO,KAGlC,IAAMwwR,EADS,KAAKjuc,IAAIy9K,CACNxsG,EAAOq0D,IAEnB+uV,EACF3mB,GAA0B,KAAMjwR,IAChC4vR,IAA4BY,GAC1BgV,EACF,KAAKjjd,IAAIq0d,IAAwB,KAAKr0d,IAAIgoJ,GAAeiwT,IAAI,EAE3Dqc,EACF9mB,IAAoC/vR,GAClC82S,EAAmC,CACrC,GAAGtmB,EACHrkT,KAAM0qU,EACN18T,QAAS,CAAEs8T,eAAgB,EAAM,EACjCpC,YAAa,CAAEr0S,aAAYs0S,aAAc,eAAgB,CAC7D,EAGMiB,EAAc,KAAK3iH,SAAS,CAC9B,KAAKwiG,eACLoQ,EAAWr5T,IACd,GAAEvwB,OAAO,CAAC,KAAKw5U,eAAgBoQ,EAAWr5T,IAAK,GAE1CmqU,EAAsB,KAAKl9K,YAC7Bm8K,EACAv1S,EACAwlS,EAAWr5T,KACXuwT,IACA,CAAEqa,mBAAoBJ,EAAaK,iBAAkBL,CAAY,GAG/D1kB,EAAiBsjB,EAAY/yd,IAAIq0d,GACjCtB,EAAY3gB,YAAYiiB,GACxBtB,EAAY3gB,YAAY50R,GAExB40R,EAAc,CAChB,GAAG2gB,EAAY3gB,aACdiiB,GAAqB5kB,GACrBjyR,GAAas2S,EAAoB1qc,MACtC,EAEA,OAAO,KAAK83F,UACRkxV,EACA,CACO,QAAK12K,KACR44L,EACA,CACI,GAAGtR,EAAW39U,GAClB,CACJ,EACA,iCAAiCm4C,EAAW,gCAAgC62S,EAAmB,2BAC/F3tU,GAAc0iU,gBAClB,CACJ,CAEAqL,qCACI5S,EACAC,EACI,CACJ,GAAI,CAAC,KAAK9hd,IAAI6hd,IAAgB,CAAC,KAAK7hd,IAAI8hd,GAAc,OAAO,KAE7D,IAAM4S,EAAU,KAAK30d,IAAI8hd,GACnB8S,EAAU,KAAK50d,IAAI+hd,GAEnB8S,EAAaF,EAAQ51T,WAAa,EAClC+1T,EAAaF,EAAQ71T,WAAa,EAMxC,GACI,KAAKkkT,WAAW9U,WAChB,KAAK8U,WAAWr5T,OAAS+qU,EAAQvlB,wBACjC,KAAK6T,WAAWr5T,OAASgrU,EAAQxlB,wBAChCylB,IAAe,GAAKC,IAAe,EAEpC,OAAO,KAGX,IAAM9wT,EAAU/M,KAAKh1J,IAAI4yd,EAAYC,GAE/B9B,EAAc,KAAK3iH,SAAS,CAC9B,KAAKwiG,eACL,KAAKoQ,WAAWr5T,IACnB,GAAEvwB,OAAO,CAAC,KAAKw5U,eAAgB,KAAKoQ,WAAWr5T,IAAK,GAG/CmrU,EAAU/B,EAAYhzd,IAAI20d,EAAQ/qU,IAAI,EAAEslT,2BACxC8lB,EAAUhC,EAAYhzd,IAAI40d,EAAQhrU,IAAI,EAAEslT,2BACxC6D,EAAQigB,EAAY/P,WACrB/T,2BAGC+lB,EAAiBh1T,MAAM8yS,EAAM1wc,MAAM,EAAEuiB,KACvCqob,GAAgBT,sBACpB,EACM0oB,EAAiBj1T,MAAM8yS,EAAM1wc,MAAM,EAAEuiB,KACvCqob,GAAgBT,sBACpB,EACM2oB,EAAgBl1T,MAAM8yS,EAAM1wc,MAAM,EAAEuiB,KACtCqob,GAAgBT,sBACpB,EACM4oB,EAAgBn1T,MAAM8yS,EAAM1wc,MAAM,EAAEuiB,KACtCqob,GAAgBT,sBACpB,EAEMsb,EAAkBkL,EAAYlL,gBAAgB,KAAKjV,cAAc,EAEvE,IAAK,IAAIvvc,EAAI,EAAGA,EAAIwkd,EAAgBzld,OAAQiB,IAAK,CAC7C,IAAMsiI,EAAakiV,EAAgBxkd,EAAI,GACjCy4J,EAAW+rT,EAAgBxkd,GAC3BiwK,EAAUxX,EAAWn2B,EAErByvV,EAAkB,GAClBC,EAAkB,GAExB,IAAK,IAAIlzd,EAAQwjI,EAAYxjI,EAAQ25J,EAAU35J,IACvC8qc,GAAgB6nB,EAAQ3yd,EAAM,GAC9Bizd,EAAgBhyd,KAAK0vc,EAAM3wc,EAAM,EACjC8qc,GAAgB8nB,EAAQ5yd,EAAM,GAC9Bkzd,EAAgBjyd,KAAK0vc,EAAM3wc,EAAM,EAGzC,GAAIizd,EAAgBhzd,SAAW,GAAKizd,EAAgBjzd,SAAW,EAE3D,SAEJ,GACIgzd,EAAgBhzd,SAAWkxK,GAC3B+hT,EAAgBjzd,SAAWkxK,EAC7B,CAEE,IAAK,IAAInxK,EAAQwjI,EAAYxjI,EAAQ25J,EAAU35J,IAC3C6yd,EAAW7yd,GAAS2yd,EAAQ3yd,GAC5B8yd,EAAW9yd,GAAS4yd,EAAQ5yd,GAC5B+yd,EAAU/yd,GAAS2wc,EAAM3wc,GACzBgzd,EAAUhzd,GAAS2wc,EAAM3wc,GAE7B,QACJ,CAEA,IAAMmzd,EAAY1xT,IACdwxT,EACAC,EACAtxT,GAEEwxT,EAAe,IAAIpid,IAAImid,GACvBE,EAAiBz1T,GAAYC,MAAMxnI,KAAK+8b,EAAap2d,KAAA,IAE3D,IAAK,IAAIgD,EAAQwjI,EAAYxjI,EAAQ25J,EAAU35J,IAAS,CACpD,IAAMwhO,EAAcmvO,EAAM3wc,GAEpBszd,EAAiB15T,IACnBy5T,EACA7xP,GAIJ,GAFI8xP,IAAmBrvU,QAEnB4Q,KAAKqC,IAAIsqE,EAAc8xP,GAAkBb,EACzC,SAEJ,IAAMc,EAAiBH,EAAax1d,IAAI01d,GAExC,GACIC,IAAmBtvU,QACnB4Q,KAAKqC,IAAIsqE,EAAc+xP,GAAkBb,EAEzC,SAGJ,IAAMc,EAAkB95T,GACpBi3S,EACA2iB,EACA9vV,EACAm2B,GAGE85T,EAAkB/5T,GACpBi3S,EACA4iB,EACA/vV,EACAm2B,GAGJk5T,EAAW7yd,GAAS2yd,EAAQa,GAC5BV,EAAW9yd,GAAS4yd,EAAQa,GAC5BV,EAAU/yd,GAAS2wc,EAAM6iB,GACzBR,EAAUhzd,GAAS2wc,EAAM8iB,EAC7B,CACJ,CAEA,IAAMC,EAA0BxoB,GAC5BqnB,EAAQ/qU,IACZ,EACMmsU,EAA0BzoB,GAC5BsnB,EAAQhrU,IACZ,EAEMyoT,EAAc,CAChB,GAAG2gB,EAAY3gB,aACdsiB,EAAQ/qU,MAAOqrU,GACfL,EAAQhrU,MAAOsrU,GACfY,GAA0BX,GAC1BY,GAA0BX,CAC/B,EAEA,OAAOpC,EAAY7xW,UACfkxV,EACA,CACO2gB,KAAYr3L,KACf,CACI,GAAGq3L,EAAY/P,WAAW39U,IAC1BskB,KAAMksU,EACNhE,YAAa,CACTr0S,WAAYk3S,EAAQ/qU,KACpBmoU,aAAc,cAClB,CACJ,EACA,CACI,GAAGiB,EAAY/P,WAAW39U,IAC1BskB,KAAMmsU,EACNjE,YAAa,CACTr0S,WAAYm3S,EAAQhrU,KACpBmoU,aAAc,cAClB,CACJ,CACJ,EACA,sBACAprU,GAAc0iU,gBAClB,CACJ,CAEA2M,iBAAiB93T,EAAU,EAAU,CACjC,OAAO,KAAKwuT,qBAAqBt2T,MAAM,EAAG8H,EAC9C,CAEA,IAAI0wT,SAAmB,CACnB,MAAO,CAAC,KAAKr7S,OACjB,CACJ,EAEM0iT,IAAsB,kBAGfC,IACTpQ,EAAY,iBACZqQ,EAAwB,KAExB,IAAI1J,GACApmU,OACA,CACI,CAAEuD,KAAM5B,GAAe4wT,UAAW,EAClC,CAAEhvT,KAAM5B,GAAe8P,KAAMt1I,KAAM+lI,GAAgBuP,IAAK,CAC5D,EACA,CACIksT,iBAAkBiS,IAAsBE,EACxCrQ,WACJ,GC/wCKsQ,GAAb,MAAaA,CAAiB,CAI1B,kBAA8C,GAK9C,yBAAqD,GAYrD,YAAY,EAAmB,GAAO,EAAmC,CACrE,KAAK,kBAAoBC,EACzB,KAAK,yBAA2BA,EAC1B,GACCC,GAA2BD,CACtC,CAMA,OAAO,IACH,EACA,EACgB,CAIhB,OAAO,IAAID,EAFPG,IAAgB,QAAa/7R,IAAiB+7R,EAClBA,IAAgB,MACqB,CACzE,CAMA,IAAI,MAAgB,CAChB,MAAO,CAAC,KAAK,wBACjB,CAKA,IAAI,QAAkB,CAClB,OAAO,KAAK,iBAChB,CAOA,IAAI,YAAsB,CACtB,MAAO,CAAC,KAAK,0BAA4B,KAAK,iBAClD,CAMA,IAAI,YAAsB,CACtB,OAAO,KAAK,0BAA4B,CAAC,KAAK,iBAClD,CACJ,ECrBaC,GAA0BjjY,GAC/BA,EAAQkjY,cAAcp0d,OAAekxF,EAAQkjY,aAC7CljY,EAAQmjY,YAAoB,CAACnjY,EAAQmjY,WAAW,EAC7CnjY,EAAQ0zC,MAAMw8U,mBAGZkT,GAAyBpjY,GAC9BA,EAAQ0zC,MAAM8/U,UAAU6H,QAAgB,sBACxCr7X,EAAQ0zC,MAAM8/U,UAAU6F,iBAAiBze,UAClC,wCACP56W,EAAQ0zC,MAAM8/U,UAAU9D,WAAW9U,UAC5B,iCACUqoB,GAAuBjjY,CACvCkjY,EAAap0d,OACAu0d,GAAmBrjY,EAAQ5C,SACxCA,EAAUs6W,aACR,GAD6B,MAAM13W,EAAQsjY,WAAW,WAF5B,wBAMxBC,KACTC,EACA30d,IAEO,GAAG20d,EAAOC,WAAW,GAAGD,EAAOlsQ,MAAM,GACxCksQ,EAAOx/I,aAAe,aAAe,GACxC,GAAGn1U,IAGK60d,IACT1jY,EACA2jY,EAA6B,MAE7B,GAAI3jY,EAAQ4jY,eAAgB,OAAO5jY,EAAQ4jY,eAE3C,IAAIC,EAA0B,EAE9B,GAAIF,GAAqB3jY,EAAQ8jY,iBAAkB,CAE/C,IAAMC,EADed,GAAuBjjY,CAC3BkjY,EAAaljd,IAAKq2I,GAC/Br2D,EAAQ8jY,iBAAkBr3d,IAAI4pJ,IAG9B0tU,EAASl+V,KAAMrrD,GAAQA,EAAIwpQ,YAAY,GACvC+/I,EAASl+V,KAAMrrD,GAAQ,CAACA,EAAIwpQ,YAAY,IAExC6/I,EAAkB,EAE1B,CAEA,OAAOZ,GAAuBjjY,GAASlxF,OAAS+0d,EAC1C3+U,GAAexnE,OACfwnE,GAAeu9B,MACzB,EAOauhT,GAAgBzwd,IASzB,IAAMvL,EAAK,GADEuL,EAAM1K,MAAQ,aACR,GAAG0K,EAAM0wd,YAC5B,MAAO,CACHj8d,GAAI,QAAQA,EAAG,GACfuiB,SACIklM,SAAC,OAAD,CAAAhrG,UACIgrG,SAAC,WAAD,CAAcznN,KACVy8G,UAAAgrG,SAAC,OAAD,CAAM,GAAIl8M,EAAM8vM,GAAW,EACrB,EACR,EAEd,CACJ,EAEaggR,GACTjmY,GAEAA,aAAqBo6W,GACfp6W,EACA,IAAIo6W,GAAep6W,GAAa,EAAE,EAE5C,SAAgB8mY,GAAsBzzB,EAAA,CAElC,OADe3sR,GAAgB2sR,CACxBnkT,GAAQ23B,SACnB,CAEA,SAAgBkgT,GACZpzd,EACAwZ,EAAA,CAEA,IAAM4xN,EAAaprO,EACnB,MACI,CAACwZ,EAAQomL,SAASwrC,IAGlBxyO,SAASgnM,SAASwrC,EAE1B,CAEA,SAAgBioP,GACZZ,EACAjwd,EAAA,CAUA,IAAM8wd,EAAqB9wd,EAAM8wd,mBAC3BC,EACF/wd,EAAM+wd,mBAAqBD,EAAmBv1d,OAAS,EAI3D,OAAO,IAAI+zd,GAFMwB,EAAmBniW,SAASshW,EAAOC,UAExBhqD,EAAU6qD,EAC1C,CAGA,SAAgBC,IAAsBf,EAAA,CAYlC,OAPIA,EAAOgB,MAAM1xK,OAAe,EAC5B0wK,EAAOz3U,MAAM+mK,OAAe,EAG5B,CAAC0wK,EAAOgB,MAAMC,YAAc,CAACjB,EAAOz3U,MAAM04U,WAAmB,EAG1D,CACX,CAOA,SAAgBC,IAA2BC,EAAA,CACvC,IAAMn4a,EAAMo6H,GAAIwB,QAAQu8S,GAClBC,EAAsBp4a,EAAIi8H,YAWhC,MANeo8S,OAFXl1B,IAAuBhsc,SAAA,CAEZkhe,EACV7kd,IAAK8kd,GACK,GAAGt4a,EAAI88H,eAAe,CAAE,GAAGs7S,EAAqBE,SAAQ,GAAGp1X,QAAQ,GAAGo1X,EAAQ,EACzF,EACCp3d,KAAK,IAEHuhM,CACX,CAQA,SAAgB81R,GACZrxV,EACAvlC,EACArgG,EAAA,CAEA,GAAM,CACFk3d,iBACAC,gBACAC,eACAC,6BACAh3X,EAEEi3X,GACFz3S,EACA71I,KAKA,IAAMutb,EAAa13S,EAAIq3S,GACjBM,EAAY33S,EAAIs3S,GAEhBM,EAAqB7hU,KAAKqC,IAAIs/T,EAAWvtb,KAAOA,GAChD0tb,EAAqB9hU,KAAKqC,IAAIu/T,EAAUxtb,KAAOA,GAErD,GACI8ha,GAA2ByrB,EAAWh+d,KAAK,GAI3Ck+d,GAAsBC,EAEtB,MAAO,CAAEn+d,MAAOg+d,EAAWh+d,MAAO28U,aAAc,EAAM,EAE1D,GAAI41H,GAA2B0rB,EAAUj+d,KAAK,EAC1C,MAAO,CAAEA,MAAOi+d,EAAUj+d,MAAO28U,aAAc,EAAK,CAI5D,EAwBA,MArBAtwM,GAAQA,EAAMsjV,eACV,CAACiO,EAAeD,CAAc,EAC9B,CAAE,GAAGtxV,EAAMjnI,IAAIw4d,GAAelzV,IAAKskB,KAAM6uU,CAAa,GACrDv3S,EAAK71I,IACFstb,EAAYz3S,EAAK71I,IAAOzwC,OACxBqyc,GAAgBD,uBACxB,EAGI3rc,GAAS23d,8BACT/xV,EAAQA,EAAMsjV,eACV,CAACiO,EAAeD,CAAc,EAC9B,CACI3uU,KAAM8uU,EACNl2c,KAAM+lI,GAAgB2vT,OAC1B,GACCh3R,EAAK71I,IACFstb,EAAYz3S,EAAK71I,IAAOksS,cACxB01H,GAAgBD,uBACxB,GAEG/lU,CACX,CAEA,SAAgBgyV,IAAc,CAC1BC,YAAY50B,GAAS60B,cACrB54S,QAAQ,IAKR,IAAM64S,EAAej/T,GAAQomB,EAAO,GAC9B84S,EAAoBv/T,GAAiB,CACvC,kBACAs/T,IAAiB,EAA+B/yU,OAA3B,SAAS+yU,EAAa,EAC9C,GACD,OACIp2Q,SAAC,UAAD,CACIznN,GAAI29d,EACJI,aAAa,iBACb35Y,MAAM,IACNvkB,OAAO,IACPm+Z,iBAAkBF,EAAkBp4d,KAAK,KAEzC+2G,UAAAgrG,SAAC,OAAD,CAAMtwK,EAAE,eAAe03P,OAAO,OAAOC,YAAa,EAAM,EACnD,EAEjB,CAEA,SAAgBmvL,IAAiB,CAC7Bj5S,QAAQ,EACRwkR,YAAA,CAKA,OACI/hP,SAAC,OAAD,CAAAhrG,UACIgrG,SAACi2Q,IAAD,CACIC,UAAWr0B,GAAcP,GAAS60B,cAAep0B,GAC1CxkR,OACV,EACC,EAEd,CAEA,SAAgBk5S,GAAiB,CAC7Bz5S,YAAA,CAIA,MAAO,CACHgiL,MAAO,6BACP/oW,QAAS,MACTklL,WAAY6mR,IACZhlR,SAAUA,MACVhtF,MAAO,CACH,GAAGiyW,IAIHzE,gBAAiBh4J,EACrB,CACJ,CACJ,CAKA,IAAakxL,GAAiB19d,OAAO,kBAOrC,SAAgB29d,IACZC,EACAC,EAAA,CAEA,MAAQ5yb,IACJ2yb,GAAYppB,wBAAwBxwc,IAAI65d,EAAc5yb,KAAU,CACxE,CAEA,SAAgB6yb,GACZxmd,EACAymd,EACAC,EAAA,CAGA,IAAMC,EAAaD,EADDD,EAAW1gW,QAAUoc,GAAO8+E,QACNmlQ,GAClC91T,EAAYm2T,EAAWn2T,WAAatuB,GAAUpO,KAEpD,GAAI+yV,IAAeP,GACf,OAAO91T,IAActuB,GAAUpO,KAAO5zH,EAAM8iU,WAAA,EAAe,CAAI9iU,IAAK,EAExE,IAAM4md,EAAa7nb,GAAS/+B,EAAO2md,GAEnC,OAAOr2T,IAActuB,GAAUpO,KAAOgzV,EAAW9jJ,WAAA,EAAe8jJ,CACpE,CAEA,SAAgBC,GAAU1iZ,EAAc6hQ,EAAA,CACpC,OAAOj6J,EAAOo6J,QAAQhiQ,EAAM6hQ,GAAc35P,KAC9C,CAEA,SAAgBy6Y,GAAcp6S,EAAA,CAC1B,OAAO/oB,KAAKr+B,MAAMonD,EAAW,GAAK,CACtC,CAEA,SAAgBq6S,GACZC,EACAC,EAAA,CAEA,OAAOH,GAAeE,KAAiCC,EAC3D,CAMA,SAAgBC,IAAyBt6c,EAAA,CAKrC,GAAM,CAAEnR,QAAO+qC,MAAKilH,aAAc7+I,EAElC,GAAInR,EAAMikc,cAAgBl5Z,EAAIk5Z,aAAc,MAAO,GAEnD,IAAMynB,EAA4B1rd,EAAMikc,eAAiBjkc,EAAMs8B,KACzDqvb,EAA0B5gb,EAAIk5Z,eAAiBl5Z,EAAIzO,KACzD,GAAI,CAACovb,GAA6B,CAACC,EAAyB,MAAO,GAEnE,IAAMC,EAAiB1jU,KAAK/0J,IAAI68J,EAAWjlH,EAAIzO,KAAOt8B,EAAMs8B,IAAI,EAChE,OAAOyO,EAAIk5Z,aAAejkc,EAAMikc,cAAgB2nB,CACpD,CAEA,SAAgBC,IAAe15a,EAAe82G,EAAA,CAC1C,OAAO92G,IAAU,EAAI,KAAK82G,IAAa,GAAG92G,EAAM,GAAG82G,EAAS,EAChE,C,80GCzZgC6mD,cAAMpoG,UAANooG,I,KAAzB,cAAyBA,I,wCAD/B5zH,C,KASI4uB,IAAOo6D,K,KAAM4mT,iB,IAQbhhX,IAAOo6D,K,KAAM6mT,mB,CAhBcj8Q,gB,CAG5B,YAAY/3M,EAAwB,CAChC,MAAMA,GACNyxL,EAAe,IAAI,CACvB,CALA3wL,mBAAUi3M,EAAMk8Q,UAAA,GAOFF,gBAAgB1ob,EAA2B,CAEjD,KAAKvqC,SAAS/I,SACd64d,GAAuBvlb,EAAE7tC,OAAQ,KAAKsD,QAAQ/I,OAAO,GAErD,KAAKiI,MAAMoja,UAAA,CACnB,CAEc4wD,kBAAkB3ob,EAAwB,CAChDA,EAAEx3C,MAAQ,UAAU,KAAKmM,MAAMoja,UAAA,CACvC,CAEA8wD,mBAAmC,CAC/B99d,SAASk3W,iBAAiB,UAAW,KAAK0mH,iBAAiB,CAC/D,CAEAG,sBAAsC,CAClC/9d,SAAS63W,oBAAoB,UAAW,KAAK+lH,iBAAiB,CAClE,CAEAziR,QAAkB,CACd,OACI2K,SAACq9O,GAAD,CAAAroV,UACIgrG,SAAC,MAAD,CACIn/L,UAAWw9J,EAAG,oBAAqB,CAC/B,4BAA6B,KAAKv6K,MAAMo0d,QAC5C,GACAx4F,KAAK,SACL,aAAW,OACXtqB,QAAS,KAAKyiH,gBAEd7iX,UAAAgrG,SAAC,MAAD,CAAKn/L,UAAU,oBAAoBwR,IAAK,KAAKztB,QACxCowG,SAAA,KAAKlxG,MAAMkxG,QACX,EACJ,EACG,EAEpB,C,aACJ,GCnCA,IAAYmjX,GAAL,SAAAA,EAAA,C,MACHA,GAAAC,OAAA,SACAD,EAAAE,QAAA,UACAF,EAAAG,aAAA,eACAH,EAAA9kV,KAAA,O,CACJ,MAiGaklV,MAAuBC,cAElC,CAAC,GCjIH,SAAgBC,IAAc,CAC1B,QACA,eAOF,CAEE,GAAI,CAAC/sB,EAAa,MAAO,CAAE,UAAWxhS,CAAM,EAI5C,GAAM,CACFwuT,EACAC,EAAyB,OACzBC,EAAoB,QACpB1uT,EAAM,KAAK,CAAC,CAAC,MAAM,uBAAuB,GAAK,CAAC,EAC9C2uT,EAAgBF,GAAwB,KAAK,GAAK,GAMxD,MAAO,CAAE,UAFLC,IAAsB,IAAIltB,EAAY,GAAKmtB,EAAgB3uT,EAE7B,KAAMwhS,CAAY,CACxD,CCPA,IAAMziK,GAAgB,UACT6vL,IAAgB,OAE7B,SAAgBC,GAAa,CACzB7uT,QACAl9I,OACAp1B,QACAiwN,QACAmoP,eACAz7H,eACAykJ,eAAe,aACfC,8BACA9mJ,cAAclpC,GACd5mR,UAAA,CAUA,OACI29L,SAACk5Q,IAAD,CACWhvT,QACDl9I,OACN66L,MAZUjwN,GAAiC,KAElBkhe,IAAgBjxQ,EAW3B0sH,eACdi4H,cAAewD,EAAe,CAACA,CAAY,EAAI3sT,OACjC21U,eACN32c,SAER2yF,UAAAyyL,UAAC,OAAD,CAAAzyL,SAAA,CAjBap9G,GAASu6U,EAGV8mJ,GAChBj5Q,SAACm5Q,GAAD,CAAkBC,cAAe,EAAO,GACxC,IAeU,GACA,EAElB,CAEA,SAAgBC,GAAkB,CAC9BnvT,QACAl9I,OACA3G,SACAwvR,SACAyjL,aACA9sB,gBACA+sB,QACAP,eAAe,aACfC,+BAAA,CAEA,GAAM,CAACO,EAAWC,GAAYpzc,EAE9B,GAAImzc,IAAcn2U,QAAao2U,IAAap2U,OAAW,OAAO,KAE9D,IAAMq2U,EAAcT,GAChBj5Q,SAACm5Q,GAAD,CAAkBC,cAAe,EAAO,GACxC,KAIEO,EAAkBL,IAAezjL,EAAS,UAAYxyJ,QAE5D,OACI28D,SAACk5Q,IAAD,CACWhvT,QACDl9I,OACSw/a,gBACDwsB,eAEdhkX,UAAAyyL,UAAC,OAAD,CAAM5mR,UAAU,QAAhBm0F,SAAA,EACIyyL,UAAC,OAAD,CAAM5mR,UAAU,OAAhBm0F,SAAA,EACIgrG,SAAC,OAAD,CAAMhwH,MAAO,CAAE63H,MAAOguF,IAAS,EAAG,EAAI7gM,SAAAwkX,CAAgB,GACrD,CAACC,GAAYC,CACZ,C,GACLH,IACGv5Q,SAACi/O,GAAD,CACInlI,UAAWy/J,EACX1xQ,MAAO8xQ,CACV,GAEJF,IACGhyL,UAAC,OAAD,CAAM5mR,UAAU,OAAhBm0F,SAAA,EACIgrG,SAAC,OAAD,CAAMhwH,MAAO,CAAE63H,MAAOguF,IAAS,EAAG,EAAI7gM,SAAAykX,CAAe,GACpDC,CACC,C,EAER,C,EACA,EAElB,CAEA,SAASR,IAAS,CACdhvT,QACAl9I,OACAgoF,WACA6yG,QACA2kP,gBACAj4H,eACAykJ,eAAe,aACf32c,UAAA,CAEA,GAAM,CAAEu3c,UAAWC,EAAY7sc,KAAM8sc,GAAkBrB,IAAc,CACjEvuT,MAAOA,GAAS,GAChBwhS,YAAa1+a,CACjB,GAEM+sc,EACF1qb,IAAQm9Z,GAAiB,IAAIzkZ,OAAQyG,GAAMA,IAAM60F,SAAYplJ,KACzD,MACC,KAET,OACIwpS,UAAC,MAAD,CACI5mR,UAAWm5c,EAAW,WAAY,CAC9B,oBAAqBhB,IAAiB,WAC1C,GAHJhkX,SAAA,EAKIyyL,UAAC,MAAD,CAAK5mR,UAAU,aAAfm0F,SAAA,CACK6kX,IAAc75Q,SAAC,OAAD,CAAMn/L,UAAU,OAAQm0F,SAAA6kX,CAAiB,GACvDC,GAAiBA,EAAcz6d,OAAS,IACrC2gN,SAAC,OAAD,CAAMn/L,UAAU,OAAQm0F,SAAA8kX,CAAoB,GAE/CvlJ,IACGv0H,SAAC,OAAD,CAAMn/L,UAAU,aAAam0F,SAAA,gBAAoB,EAEpD,C,IACLyyL,UAAC,MAAD,CAAK5mR,UAAU,SAASmvE,MAAO,CAAE63H,OAAM,EAAvC7yG,SAAA,CACKA,EACA+kX,IACGtyL,UAAC,OAAD,CAAM5mR,UAAU,cAAhBm0F,SAAA,EACIgrG,SAAC+9E,EAAD,CAAiB1W,KAAMyd,EAAe,GACrCi1L,CACC,CAET,G,GACJ13c,IAAU29L,SAAC,MAAD,CAAKn/L,UAAU,SAAUm0F,SAAA3yF,CAAY,EAC/C,C,EAEb,CAEA,SAAgB43c,GAAa,CACzBv+T,UACAD,OACAoyT,SAAS,IAAC,CAEV,IAAMnlc,IAAgBwxc,WAAW3B,KAC3B4B,EAAQ1+T,EAAKrlC,KAAM8nD,GAAQA,EAAIk8S,OAAO,EACtCC,EAAW5+T,EAAKrlC,KAAM8nD,GAAQA,EAAIo8S,MAAM,EAExCC,EACF9+T,EAAKp8J,OAAS,GACdwud,EAAO9nT,MAAOnuK,GAAUA,IAAUyrJ,SAClCoY,EAAKrlC,MAAM,CAAE/vG,YAAaA,EAAO0/I,MAAOnuK,GAAUA,IAAUyrJ,SAC1Dm3U,EAAarjU,GAAMuE,EAASmyT,GAAQ9nT,OACrC,CAAC93F,EAAQsjJ,KAAW,CAAC,CAACtjJ,GAAQ26F,YAAY2oD,GAAOv7N,MAAM,iBAEtDyke,EAAa5M,GAAU,EAAE0M,GAAYC,GAIrCE,EAAkBhyc,GAASg6Y,SAAWhsR,GAAqBikV,OAE3DC,EAAczjU,GAAMuE,EAASmyT,GAAQt9c,KAAK,CAAC09D,EAAQsjJ,MACrDvR,SAAC,KAAD,CAAwBn/L,UAAU,eAC7Bm0F,SAAA/mC,GAAUsjJ,IAAUluE,OAAYp1E,EAAO26F,YAAY2oD,GAAS,IAC7D,EAFKtjJ,GAAQi8F,QAKrB,OACIu9H,UAAC,QAAD,CAAO5mR,UAAWm5c,EAAW,cAAe,CAAEG,QAAOE,UAAS,GAA9DrlX,SAAA,CACK0mD,EAAQr8J,OAAS,IACd2gN,SAAC,QAAD,CAAAhrG,UACIyyL,UAAC,KAAD,CAAAzyL,SAAA,EACIgrG,SAAC,KAAD,CAAIn/L,UAAU,cAAmB,IACjCm/L,SAAC,KAAD,CAAIn/L,UAAU,aAAkB,GAC/B66I,EAAQnrJ,IAAK09D,IACV+xI,SAAC,KAAD,CAAIn/L,UAAU,eACTm0F,SAAA/mC,EAAOi8F,KACR,EAF8Bj8F,EAAOi8F,KAErC,EAER,GACD,IAEXu9H,UAAC,QAAD,CAAAzyL,SAAA,CACKylX,GAAcC,IACXjzL,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIyyL,UAAC,KAAD,CAAI5mR,UAAU,aAAdm0F,SAAA,EACIgrG,SAAC,KAAD,CAAIn/L,UAAU,cAAmB,IACjCm/L,SAAC,KAAD,CAAIn/L,UAAU,cAAcm0F,SAAA,OAAS,GACpC4lX,CACD,CACJ,IAAA56Q,SAAC,KAAD,CAAIn/L,UAAU,QAAa,EAC7B,IAEL46I,EAAKlrJ,IAAK2tK,IACP,GAAM,CACF9kL,OACAghe,UACAS,UACAC,UACAt5S,aACAn7J,SACA2pb,eACAsqB,SAAS,CAAC,GACVp8S,EACE,CACF2pC,MAAOkzQ,EAAc,cACrBt3T,QAASu3T,EAAgB,GACzBV,EAEE,CAACW,EAAIjH,EAAYkH,GACnB9he,EAAKimI,KAAA,EAAOrpI,MAAM,yBAA2B,GAEjD,OACIyxS,UAAC,KAAD,CAEI5mR,UAAWm5c,EAAW,CAClBI,UACAS,UACAC,SACJ,GANJ9lX,SAAA,EAQIgrG,SAAC,KAAD,CAAIn/L,UAAU,eACVm0F,UAAAgrG,SAAC,MAAD,CACIn/L,UAAU,SACVmvE,MAAO,CACHwtW,gBAAiBu9B,EACjBt3T,QAASu3T,CACb,CACH,EACD,IACJvzL,UAAC,KAAD,CAAI5mR,UAAU,cAAdm0F,SAAA,CACKg/W,EACAkH,IACGl7Q,SAAC,OAAD,CAAMn/L,UAAU,gBACXm0F,SAAAkmX,CACC,GAET15S,IACGw+B,SAAC,OAAD,CAAMn/L,UAAU,aACXm0F,SAAAwsE,CACC,EAEV,C,GACHrqB,GAAMuE,EAASr1I,GAAQ9V,KAAK,CAAC09D,EAAQr2E,KAAA,CAClC,IAAMuje,EAAUvje,IAAUyrJ,OAC1B,OAAOp1E,GACH+xI,SAAC,KAAD,CAEIn/L,UAAWm5c,EAAW,eAAgB,CAClCmB,SACJ,GAECnmX,SAAA,CAACmmX,GAAWltZ,EAAO26F,YAAYhxK,EAChC,EANKq2E,EAAOi8F,KAMZ,EACJ,IACR,GACC8lS,IACGvoK,UAAC,KAAD,CAAI5mR,UAAU,cAAdm0F,SAAA,EACIgrG,SAAC+9E,EAAD,CAAiB1W,KAAMyd,EAAe,GAAE,IACvCkrK,CACD,C,EAER,CAhDK,EAAA52c,EAkDjB,GACCqhe,GAAc,CAACC,IACZjzL,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIgrG,SAAC,KAAD,CAAIn/L,UAAU,QAAa,IAC3B4mR,UAAC,KAAD,CAAI5mR,UAAU,QAAdm0F,SAAA,EACIgrG,SAAC,KAAD,CAAIn/L,UAAU,cAAmB,IACjCm/L,SAAC,KAAD,CAAIn/L,UAAU,cAAcm0F,SAAA,OAAS,GACpC4lX,CACD,CACN,KAEH,GACJ,C,EAEf,CAEA,SAAgBzB,GAAiB,CAC7BC,gBAAgB,KAIhB,OACI3xL,UAAC,MAAD,CACI5mR,UAAWm5c,EAAW,iBAAkB,CACpC,iBAAkBZ,CACtB,GAHJpkX,SAAA,EAKIgrG,SAAC,MAAD,CAAKn/L,UAAU,QAAU,IACzBm/L,SAAC+9E,EAAD,CAAiB1W,KAAMoY,GAAM,EAC5B,C,EAEb,CAEA,SAAgB27L,GACZrgY,EACA,CACIsgY,SAAS,GACTrrB,gBAC6C,CAAC,GAIlD,MAAO,0BAA0Bj1W,EAAW,8BAF1BsgY,EAAS,cAAgB,eAChBrrB,EAAe,KAAKA,EAAa,GAAK,GACwC,SAC7G,CAEA,SAAgBsrB,GACZ5sT,EACA,CAAE2sT,UAAgC,CAAEA,OAAQ,EAAK,GAGjD,IAAME,EAAsB/zT,IAAiBn4H,GADpBA,GAAOq/H,CACsB8sT,GAAmB,CACrE/zT,UAAW,IACf,GAKA,MAAO,GAHQ4zT,EAAS,SAAW,QAGlB,GAFLA,EAAS,MAAQ,KAEL,cAAcE,EAAoB,eAD1CA,IAAwB,IAAM,SAAW,WAE7D,CAEA,SAAgBE,GACZ//T,EAAA,CAIA,OAFqBuB,MAAMrjD,QAAQ8hD,GAAWA,EAAU,CAACA,CAAO,GAE5CnrJ,IAAK09D,IAAY,CACjCi8F,MAAOj8F,EAAOq4X,YACd19R,YAAchxK,GACVq2E,EAAOwlQ,iBAAiB77U,EAAO,CAAEw2K,eAAgB,EAAK,EAC9D,GACJ,CAEA,SAAgBstT,GACZr1c,EACA4nD,EACAkkQ,EAAsBlpC,GAAA,CAEtB,IAAM0yL,EAA2B/je,GAC7Bgke,IACIhke,EACCA,GAAUq2E,EAAOwlQ,iBAAiB77U,GACnCu6U,GAEF0pJ,EACFjke,GAEAgke,IACIhke,EACCA,GAAUq2E,EAAO8/X,kCAAkCn2c,GACpDu6U,GAGF,CAAC2pJ,EAAYttP,GAAanoN,EAAO9V,IAAK4I,GACxCwid,EAAwBxid,IAGtB,CAACqgd,EAAWC,GAGdpqb,GAAM,CAACysb,GAAYz8d,OAAQmvO,GAAWnvO,MAAO,GAAI,GAC3CgnB,EAAO9V,IAAK4I,GAAM0id,EAAyC1id,IAC3D,CAAC2id,EAAYttP,CAAS,EAEhC,MAAO,CAACgrP,EAAWC,CAAQ,CAC/B,CAEA,SAASmC,IACLhke,EACAgxK,EACAupK,EAAsBlpC,GAAA,CAItB,OAFIrxS,IAAUyrJ,OAAkB8uL,EAC5B,OAAOv6U,GAAU,SAAiBA,EAC/BgxK,EAAYhxK,EACvB,CC7YA,IAAMmke,IAAwB,IAMjBC,IAAb,KAAkC,CAC9B,SAAW,IAAIvrU,GAAY,EAAG,CAAC,EAE/B,QAAmC,OACnC,OAAuC,OACvC,MAEA,YAAY,CAAE,QAA2B,CAAC,EAAG,CACzC,KAAK,MAAQsrI,GAAQ,SACzB,CAEA,IAAI,QAAwB,CACxB,OAAO,KAAK,OAChB,CAEA,IAAI,OAAO,EAAqB,CAC5B,KAAK,UAAUkgM,CAAS,CAC5B,CAEA,IAAI,QAAsC,CAEtC,OAAS,KAAK,QAAY,KAAK,QAAU,KAAK,MAAQ,MAC1D,CAEA,UAAoB,EAA2B,CAM3C,GAFA,aAAa,KAAK,MAAM,EAEpBA,IAAc,KAAM,CACpB,IAAMC,EAAQ,CAAE,QAAS,EAAG,UAAW,GAAK,KAAM,CAAE,EAAE,KAAK,OAC3D,KAAK,OAAS,OAAO,eACX,KAAK,YAAY,EACvBA,EAAQH,GACZ,CACJ,KACI,MAAK,QAAUE,EACf,KAAK,OAAS,MAEtB,CAEA,aAA8B,CAC1B,KAAK,QAAU,OACf,KAAK,OAAS,MAClB,CACJ,EAEaE,GAAb,cAAqCH,GAAqB,CACtD,YAAY,EAAyB,CACjC,MAAM9+c,CAAI,EAEVq4K,EAGE,KAAM,CAEJ,SAAUnS,EACV,QAASA,EACT,OAAQA,EAGR,OAAQzwD,EACR,OAAQA,EAGR,UAAW9b,EAAO,MAClB,YAAaA,EAAO,KACxB,CAAC,CACL,CACJ,EC9DaulX,IAAb,cAAA1kX,EAAuCjE,SAAA,CAGnChyF,KAAwBo6L,EAAMk8Q,UAAA,EAC9BsE,aAA+B,EAC/BC,cAAgC,EAGhCC,kBAAiC,CAC7B,GAAI,CAAC,KAAK96c,KAAK5lB,QAAS,OACxB,IAAMqE,EAAK,KAAKuhB,KAAK5lB,QACf8gF,EAAQz8E,EAAGs8d,YAAc,EAAIt8d,EAAGyyJ,WAChCv6F,EAASl4D,EAAGw/J,aAAe,EAAIx/J,EAAG2yJ,WACpCl2E,IAAU,KAAK0/Y,cAAgBjka,IAAW,KAAKkka,iBACnD,KAAKD,aAAe1/Y,EACpB,KAAK2/Y,cAAgBlka,EACrB,KAAK43T,YAAA,EACT,CAEA,IAAYysG,cAAoC,CAC5C,GAAM,CAAEJ,eAAcC,iBAAkB,KAClC,CACFI,kBACAh6D,SACA/ja,IAAI,EACJmwD,IAAI,EACJo2I,UAAU,EACVD,UAAU,GACV,KAAKnhM,MACH64d,EAAmBj6D,IAAWhsR,GAAqBikV,OAEnD11M,EAAiBy3M,GAAiB//Y,MAClCy6P,EAAkBslJ,GAAiBtka,OAEnC43B,EAAQ,CAAE,GAAG,KAAKlsF,MAAMksF,KAAM,EAIpC,GAAIi1L,GAAkBmyD,GAAmB,CAACulJ,EAAkB,CACxD,IAAIC,EAAkB33R,EAClB43R,EAAkB33R,EAElB,KAAKphM,MAAMg5d,mBAAqB,WAChCF,EAAkB,CAAC33R,EAAUq3R,GAG7B,KAAKx4d,MAAMi5d,mBAAqB,QAAUp+d,EAAI09d,IAC9CQ,EAAkB,CAAC33R,EAAUm3R,GAIjC,IAAIjkW,EAAOz5H,EAAIk+d,EACXjqU,EAAM9jG,EAAI8ta,EACVN,GAAiBD,IACbjkW,EAAOikW,EAAep3M,IACtB7sJ,GAAQikW,EAAe,EAAIQ,GAC3BjqU,EAAM0pU,EAAgB,IAAOllJ,IAC7BxkL,GAAO0pU,EAAgB,EAAIM,GAG/BxkW,EAAO++B,GAAQ/+B,EAAM,CACjBl5H,IAAK,EACLD,IAAKgmR,EAAiBo3M,CAC1B,GACAzpU,EAAMuE,GAAQvE,EAAK,CACf1zJ,IAAK,EACLD,IAAKm4U,EAAkBklJ,CAC3B,IAGJtsY,EAAMzK,SAAW,WACjByK,EAAMooC,KAAOA,EACbpoC,EAAM4iE,IAAMA,EAOZ5iE,EAAMyvU,UAAYroF,EAAkBxkL,EACpC5iE,EAAM+2G,SAAW,MACrB,CAQA,OAJI41R,IAAqB3sY,EAAMrT,OAASqT,EAAM0nP,YAC1C1nP,EAAMrT,MAAQqT,EAAM0nP,SAAWr0L,QAG5BrzD,CACX,CAEAgoY,mBAAmC,CAC/B,KAAKuE,iBAAA,CACT,CAEAS,oBAAoC,CAChC,KAAKT,iBAAA,CACT,CAEAlnR,QAAsC,CAClC,GAAI,CACA98M,KACAkvJ,QACAw1U,kBACAj1U,WACAk1U,iBACA51H,SACA61H,WACAnoX,WACA0tT,UACA,KAAK5+Z,MACH64d,EAAmBj6D,IAAWhsR,GAAqBikV,OAGnDyC,EAAY31U,IAAUpE,QAAa2E,IAAa3E,OACtD,GAAM2E,GAAYk1U,IAAmB,OAAQ,CACzC,IAAMlwc,EAAOg7H,EAAS9zJ,SAAA,EAEtB8zJ,GADqBh7H,EAAKh3B,MAAM,kBAA4B,GAAR,OAC3B6yK,GAAsB77I,EACnD,CAGA,IAAMqwc,EAAa,CAAC,CAACr1U,GAAYk1U,IAAmB,SAG9CI,EAAQF,GAAa,CAACpoX,EAGtBiyU,EAAYk2C,IAAa,YAE/B,OACIn9Q,SAACu4Q,IAAegF,SAAhB,CAAyB3le,MAAO,CAAE8qa,QAAO,EACrC1tT,UAAAgrG,SAAC,MAAD,CACIn/L,UAAWm5c,EAAW,oBAAqB,CACvC,eAAgB2C,CACpB,GAEA3nX,UAAAyyL,UAAC,MAAD,CACIp1Q,IAAK,KAAK5Q,KACVlpB,GAAIA,GAAIrE,WACRwrY,KAAK,UACL7+W,UAAWm5c,EAAW,UAAW,CAC7BsD,QACAH,WACAl2C,WACJ,GACAj3V,MAAO,KAAKysY,aAThBznX,SAAA,CAWKooX,IACG31L,UAAC,MAAD,CAAK5mR,UAAU,cAAfm0F,SAAA,CACKyyC,IACGggJ,UAAC,MAAD,CAAK5mR,UAAU,QAAfm0F,SAAA,CACKyyC,EAAO,KACRu4D,SAAC,OAAD,CAAMn/L,UAAU,aACXm0F,SAAAioX,CACC,EACL,CAER,GAAAj1U,IACGy/I,UAAC,MAAD,CAAK5mR,UAAU,WAAfm0F,SAAA,CACKqoX,IACGr9Q,SAACw9Q,IAAD,CACIn2M,KAAM8wM,GAAkBsF,MAC3B,IAELz9Q,SAAC,OAAD,CAAAhrG,SAAOgzC,CAAe,EACrB,CAER,GAET,IAAAy/I,UAAC,MAAD,CAAK5mR,UAAU,wBAAfm0F,SAAA,CACKA,IACGgrG,SAAC,MAAD,CAAKn/L,UAAU,UAAWm0F,UAAc,GAE3CsyP,GAAUA,EAAOjoW,OAAS,IACvB2gN,SAAC,MAAD,CACIn/L,UAAWm5c,EAAW,YAAa,CAC/B,iBAAkB1yH,EAAOjoW,OAAS,CACtC,GAEC21G,SAAAsyP,GAAQ/2V,KAAK,CAAE82Q,OAAM5yM,WAClBgzN,UAAC,MAAD,CAEI5mR,UAAWm5c,EAAW,OAAQ,CAC1B,WACI3yM,IACA8wM,GAAkBuF,aACtB,UACIr2M,IACA8wM,GAAkBwF,IAC1B,GATJ3oX,SAAA,EAWIgrG,SAACw9Q,IAAD,CAAmBn2M,MAAO,IAC1BrnE,SAAC,IAAD,CAAAhrG,SAAIvgC,CAAQ,EACX,CAZI,EAAAA,GAcZ,EAER,CACJ,G,EACJ,EACgB,EAEjC,CACJ,EAEA,SAAS+oZ,IAAY,CACjBn2M,QAAA,CAIA,OAAOrxR,GAAMqxR,GACRhjH,KAAK8zT,GAAkBsF,YACpBz9Q,SAAC+9E,EAAD,CAAiBl9Q,UAAU,OAAOwmQ,KAAMyd,EAAe,IAE1DzgI,KAAK8zT,GAAkByF,aACpB59Q,SAAC,MAAD,CAAKn/L,UAAU,cAAoB,IAEtCwjJ,KAAK8zT,GAAkBuF,kBACpB19Q,SAAC,MAAD,CAAKn/L,UAAU,OACXm0F,UAAAgrG,SAACm5Q,GAAD,CAAmB,EAClB,IAER90T,KAAK8zT,GAAkBwF,SAAY,MACnCp5T,WAAA,CACT,C,80GCrOsCs3C,cAAMpoG,UAANooG,QAuBTA,O,IAvBtB,cAA+BA,I,uCADrC5zH,C,IAOI0qC,E,EAAqBknU,S,CANYh+O,gB,CAClC,YAAY/3M,EAAqC,CAC7C,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAsBskQ,SAAoC,CACtD,GAAM,CAAEA,WAAY,KAAK/1b,MAAM+5d,eAC/B,OAAOhkC,GAAS78b,KACpB,CAEAq4M,QAA6C,CACzC,GAAM,CAAEvxM,QAAO+1b,WAAY,KAE3B,OADKA,GACE75O,SAACo8Q,IAAD,CAAa,GAAIt4d,EAAO,GAAI+1b,CAAU,GADxB,IAEzB,C,aACJ,GAO6Bh+O,KAAMpoG,U,QAA5B,cAAsBooG,G,uCAD5B5zH,C,KAWI4uB,IAAOo6D,K,KAAc6sT,2B,IAIrBjnX,IAAOo6D,K,KAAc8sT,4B,CAdGliR,e,CACzB,YAAY/3M,EAA4B,CACpC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEAyiS,mBAAmC,CAC/B,KAAK8F,0BAAA,CACT,CAEsBA,2BAAkC,CACpD,KAAKh6d,MAAM+5d,eAAehkC,SAAS98b,IAAI,KAAK+G,KAAK,CACrD,CAEsBi6d,4BAAmC,CACrD,GAAM,CAAElkC,WAAY,KAAK/1b,MAAM+5d,eAI3BhkC,GAAS78b,OAAOzE,KAAO,KAAKuL,MAAMvL,IAAIshc,EAAQ98b,IAAIsmJ,OAC1D,CAEA25U,oBAAoC,CAChC,KAAKc,0BAAA,CACT,CAEA7F,sBAAsC,CAClC,KAAK8F,2BAAA,CACT,CAEA1oR,QAAwB,CACpB,OAAO,IACX,C,aACJ,GCtDA,SAAgB2oR,GAAM,CAClB/gT,SACAiqP,YACA5sI,YACA2jM,aACAjpX,WACAkpX,gBAAgB,GAChBC,gBAAgB,WAEhB,IAAMC,EAAoC,CACtChmW,KAAM6kD,EAAO7kD,KACbz7C,MAAOsgG,EAAOtgG,MACd8iV,UAAWxiP,EAAO7kH,MACtB,EAYA,OAVI8la,IACAE,EAAahma,OAAS6kH,EAAO7kH,QAG7B+la,IAAkB,SAClBC,EAAa7+T,OAAS0d,EAAOnuH,EACtBqva,IAAkB,QACzBC,EAAaxrU,IAAMqqB,EAAOnuH,IAI1BkxJ,SAACq+Q,GAAD,CAAuBr2D,iBAAoBi2D,EAAWpie,QAClDm5G,UAAAgrG,SAACs+Q,GAAD,CACIz9c,UAAU,gBACVi3V,OAAA,GACAymH,aAAezmH,IACNA,GAAQovD,GACjB,EACA/C,cAAA,GAEAnvT,UAAAgrG,SAACw+Q,GAAD,CACI39c,UAAWw9J,EACP,cACA,gBAAgB8/S,GACpB,EACAnuY,MAAOouY,EAEPppX,UAAAgrG,SAACy+Q,GAAD,CACI59c,UAAU,qBACV,aAAYy5Q,EAIZtlL,UAAAgrG,SAACq+Q,GAAD,CAAuBr2D,aAAc,KAChChzT,UACkB,EACnB,EACD,EACD,EACK,EAE/B,C,qBCzEC,SAA0C,EAAM,EAAS,CACtD,OAAO+lB,GAAY,UAAY,OAAOC,GAAW,SACnD,EAAO,QAAU4+N,EAAQ,EAClB,OAAO,QAAW,YAAc,OAAO,IAC9C,OAAO,CAAC,EAAGA,CAAO,EACX,OAAO7+N,GAAY,SAC1B,EAAQ2jW,WAAgB9kI,EAAQ,EAEhC,EAAK8kI,WAAgB9kI,EAAQ,CAC/B,GAAG,cACoB,CACb,IAAI+kI,EAAuB,CAE/B,MACE,EAAyB,IAAY,CAE7C,IAAIC,EAAoB,gBAOxB,EAAQ,gBAAkB,SAAU,EAAM,CACxC,OAAOA,EAAkB,KAAKn+T,CAAI,CACpC,EACA,EAAQ,WAAa,SAAU,EAAS,EAAM,CAI5C,OAHIp3F,EAAK,aACP,EAAU,GAAUynE,EAAQ,OAAO,CAAC,CAAC,CAAC,YAAY,IAAUA,EAAQ,MAAM,CAAC,KAEtEA,CACT,CAEM,GAEA,MACE,EAAQ,EAA0B,IAAwB,CAElE,IACExpB,EADau3W,EAAoB,GACb,CAAC,CAAC,WACpBC,EAAaD,EAAoB,GAAG,EACpC9rZ,EAAQ8rZ,EAAoB,GAAG,EAC/BE,EAAa,SAAoB,EAAM,CACzC,IAAI11Z,EAAO,UAAU,OAAS,GAAK,UAAU,KAAO,OAAY,UAAU,GAAK,CAAC,EAC5EynE,EAYJ,OANA/9D,EAAM,KAAK,SAAU,EAAM,CACzB,GAAIH,EAAK,MAAM6tF,EAAMp3F,CAAI,EAEvB,MADA,GAAUuJ,EAAK,IAAI6tF,EAAMp3F,CAAI,EACtB,EAEX,CAAC,EACM21Z,EAAcluV,EAASznE,EAAMo3F,CAAI,CAC1C,EACIu+T,EAAgB,SAAuB,EAAS,EAAM,EAAM,CAK9D,MAJA,GAAU13W,EAAWwpB,EAASznE,CAAI,EAC9BA,EAAK,YACAynE,EAEF,GAAUA,KAAqB2vB,GACxC,EACA,EAAW,eAAiBq+T,EAAW,KACvC,EAAO,QAAUC,CAEX,GAEA,MACE,EAAyB,IAAY,CAE7C,EAAQ,MAAQ,SAAU,EAAM,EAAQ,CACtC,GAAIE,EAAQ,CAEV,IAAI5lZ,EAAY,OAAO,GAAU4lZ,IAAY,EAE7C,GADA,EAAOx+T,EAAK,QAAQpnF,EAAO,EAAE,EACzBonF,EAAK,QAAU,EACjB,MAAO,EAEX,CACA,OAAO1lC,EAAQ,KAAK,QAAQ0lC,CAAI,EAAI,EACtC,EAoBA,EAAQ,KAAO,+6BA8B4B,CAErC,GAEA,MACE,EAAQ,EAA0B,IAAwB,CAElE,EAAO,QAAU,CAACo+T,EAAoB,GAAG,EAAGA,EAAoB,GAAG,EAAGA,EAAoB,GAAG,CAAC,CAExF,GAEA,MACE,EAAyB,EAAS,IAAwB,CAElE,IACEK,EADaL,EAAoB,GACR,CAAC,CAAC,gBACzBM,EAAU,WACVC,EAAoB,eACpBC,EAAqB,SAA4B,EAAM,CACzD,OAAOD,EAAkB,KAAK3+T,EAAK,OAAO,CAAC,CAAC,CAC9C,EAUI6+T,EAAgB,SAAuB,EAAG,EAAG,CAC/C,OAAOxhd,IAAMC,CACf,EAMA,EAAQ,MAAQ,SAAU,EAAM,EAAM,CAEpC,MADsB,GAAK,iBACMohd,EAAQ,KAAK1+T,EAAK,MAAM,GAAG,CAAC,CAAC,EAAE,CAClE,EACA,EAAQ,IAAM,SAAU,EAAM,CAC5B,IAAI8+T,EAAcF,EAAmB5+T,CAAI,EASzC,OADc6+T,EAPKJ,EAAgBz+T,CAOI,EAAG8+T,CAAW,EAAI,IAAM,IAEjE,CAEM,GAEA,MACE,EAAyB,IAAY,CAE7C,IAAIC,EAAU,aACVC,EAAwB,aACxBC,EAAkB,WACtB,EAAQ,MAAQ,SAAU,EAAM,CAC9B,OAAOF,EAAQ,KAAK/+T,CAAI,CAC1B,EACA,EAAQ,IAAM,SAAU,EAAM,EAAM,CAClC,IAAI3hK,EAAS2hK,EAAK,SAAS,CAAC,CAAC,MAAM++T,CAAO,CAAC,CAAC,EAAE,CAAC,QAAQ,KAAM,EAAE,EAC3D1uV,EAAU,IACd,GAAI2uV,EAAsB,KAAK3ge,CAAM,EAAG,CACtC,IAAI6ge,EAAmBD,EAAgB,KAAK5ge,CAAM,EAOlD,CAKEgyI,CALE6uV,GAAoB7ge,EAAO,SAAW,EAC9BuqE,EAAK,UAAY,aAAe,KAAO,IACxCs2Z,IAAqB7ge,EAAO,OAAS,GAAK,GAAM,GAG/CA,EAAO,WAAW,GAAG,EAFrB,KAEgC,GAE9C,CACA,OAAOgyI,CACT,CAEM,GAEA,MACE,EAAyB,EAAS,IAAwB,CAElE,IACEouV,EADaL,EAAoB,GACR,CAAC,CAAC,gBACzBC,EAAaD,EAAoB,GAAG,EACpCe,EAAS,SACTC,EAAW,SAAkB,EAAM,CACrC,OAAOp/T,EAAK,MAAMm/T,CAAM,CAAC,CAAC,EAAE,CAAC,YAAY,CAC3C,EACIE,EAAM,SAAa,EAAG,EAAG,CAC3B,OAAQhid,GAAKC,IAAM,EAAED,GAAKC,EAC5B,EAOIgid,EAAqB,SAA4B,EAAM,CACzD,MAAO,CAAC,KAAM,IAAK,KAAM,IAAI,CAAC,CAAC,OAAO,SAAU,EAAM,EAAQ,CAC5D,OAAO/7c,GAAQ86c,EAAW,MAAMnnZ,EAAMsnZ,CAAM,CAC9C,EAAG,EAAK,CACV,EACA,EAAQ,MAAQ,UAAY,CAC1B,MAAO,EACT,EACA,EAAQ,IAAM,SAAU,EAAM,EAAM,CAKlC,IAAIM,EAAcQ,EADNF,EAASp/T,CACoB,CAAC,EAS1C,OADcq/T,EAAIZ,EAAgBz+T,CAAI,EAAG8+T,CAAW,EAAI,KAAO,GAEjE,CAEM,EAEI,EAGIS,EAA2B,CAAC,EAGhC,SAASnB,EAAoB,EAAU,CAEtC,IAAIoB,EAAeD,EAAyBE,GAC5C,GAAID,IAAiB,OACpB,OAAOA,EAAa,QAGrB,IAAIjlW,EAAS,EAAyBklW,GAAY,CAGjD,QAAS,CAAC,CACX,EAMA,OAHAvB,EAAoBuB,EAAS,CAACllW,EAAQA,EAAO,QAAS6jW,CAAmB,EAGlE7jW,EAAO,OACf,CASA,OAF0B6jW,EAAoB,GAErB,CAC1B,GAAG,CAEX,C,SC3QD,SAASp/V,GAAO,EAAQ,CACvB,GAAIp+H,EAAO,cAAgB,MAC1B,MAAU,UAAU,iBAAiB,EAEtC,GAAIA,EAAO,SAAW,GACrB,OAAOA,EAER,GAAIA,EAAO,SAAW,EAAG,CACxB,IAAIo5c,EAASz/V,GAAS,EAOtB,MANA,GAAO,GAAK35G,EAAO,GACnB,EAAO,GAAKA,EAAO,GACnB,EAAO,GAAKA,EAAO,GACnB,EAAO,GAAKA,EAAO,GACnB,EAAO,IAAMA,EAAO,GACpB,EAAO,IAAMA,EAAO,GACbo5c,CACR,CACA,MAAU,WAAW,4CAA4C,CAClE,CAUA,SAASz/V,IAAW,CAEnB,IAAK,IADDy/V,EAAS,CAAC,EACLn6c,EAAI,EAAGA,EAAI,GAAI,IACvBA,EAAI,GAAK,EAAIm6c,EAAO,KAAK,CAAC,EAAIA,EAAO,KAAK,CAAC,EAE5C,OAAOA,CACR,CAuEA,SAASlxQ,IAAS,EAAG,EAAG,CAKvB,IAAK,IAJD42R,EAAK1gW,GAAO5vF,CAAC,EACbuwb,EAAK3gW,GAAO9gI,CAAC,EACb0he,EAAU,CAAC,EAEN//d,EAAI,EAAGA,EAAI,EAAG,IAEtB,IAAK,IADD49K,EAAM,CAACiiT,EAAG7/d,GAAI6/d,EAAG7/d,EAAI,GAAI6/d,EAAG7/d,EAAI,GAAI6/d,EAAG7/d,EAAI,GAAG,EACzC04H,EAAI,EAAGA,EAAI,EAAG,IAAK,CAC3B,IAAIt1H,EAAIs1H,EAAI,EACRjuD,EAAM,CAACq1Z,EAAG18d,GAAI08d,EAAG18d,EAAI,GAAI08d,EAAG18d,EAAI,GAAI08d,EAAG18d,EAAI,EAAE,EAC7C3J,EACHmkL,EAAI,GAAKnzG,EAAI,GAAKmzG,EAAI,GAAKnzG,EAAI,GAAKmzG,EAAI,GAAKnzG,EAAI,GAAKmzG,EAAI,GAAKnzG,EAAI,GAEpE,EAAQzqE,EAAIoD,GAAK3J,CAClB,CAGD,OAAOsme,CACR,CAcA,SAASz5V,IAAM,EAAQ,CACtB,GAAI,OAAOvlI,GAAW,SAAU,CAC/B,IAAIrL,EAAQqL,EAAO,MAAM,wBAAwB,EACjD,GAAIrL,EAEH,OAAOypI,GADGzpI,EAAM,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,UACnB,CAAC,CAEnB,CACA,OAAOglH,GAAS,CACjB,CAuFA,SAAS6lF,IAAO,EAAQ,CACvB,IAAI45Q,EAASz/V,GAAS,EAEtB,MADA,GAAO,GAAKslX,EACL7lB,CACR,CAQA,SAAS35Q,IAAO,EAAQ,CACvB,IAAI25Q,EAASz/V,GAAS,EAEtB,MADA,GAAO,GAAKslX,EACL7lB,CACR,CA6FA,SAAS8lB,IAAW,EAAU,CAC7B,IAAI9lB,EAASz/V,GAAS,EAEtB,MADA,GAAO,IAAMxhC,EACNihY,CACR,CAQA,SAAS+lB,IAAW,EAAU,CAC7B,IAAI/lB,EAASz/V,GAAS,EAEtB,MADA,GAAO,IAAMxhC,EACNihY,CACR,CC5Y2B,IAAItra,GAAE,SAAS,EAAE,CAAC,OAAgB,OAAOqf,GAAjB,QAAkB,EAAEluD,IAAE,SAAS,EAAE,CAAC,OAAkB,OAAOkuD,GAAnB,UAAoB,EAAE9vD,IAAE,SAAS,EAAE,CAAC,OAA0B,OAAO,UAAU,SAAS,KAAK8vD,CAAC,IAApD,iBAAqD,EAAEC,GAAE,SAAS,EAAE,CAAC,OAAO,MAAM,UAAU,MAAM,MAAMD,CAAC,CAAC,EAAEjf,IAAE,SAAS,EAAE,CAAC,IAAIJ,EAAEqf,EAAE,OAAO,SAAS,EAAE,EAAE,CAAC,MAAO,GAAErf,IAAIqf,EAAErf,IAAI,GAAG,EAAEqf,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,OAAO,KAAKrf,CAAC,CAAC,CAAC,OAAO,SAAS,EAAE,CAAC,OAAOA,EAAEqf,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS1wC,GAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,SAAS,EAAE,CAAC,GAAGqxB,EAAE,IAAI,IAAI7uC,KAAK6uC,EAAE,OAAO,UAAU,eAAe,KAAKA,EAAE7uC,CAAC,IAAI,EAAEA,GAAG6uC,EAAE7uC,GAAG,CAAC,EAAEkuD,CAAC,CAAC,IAAIlf,IAAEE,GAAE,SAAS,EAAE,EAAE,EAAE,CAAC,OAAOgf,GAAGrf,EAAEqf,GAAGluD,CAAC,EAAE0d,IAAE,CAAC,UAAU,KAAK,SAASmxB,GAAE,WAAW7uC,IAAE,SAAS5B,IAAE,QAAQ+vD,GAAE,0BAA0Blf,IAAE,OAAOzxB,GAAE,UAAU0xB,EAAC,EAAE1pB,GAAE,eAAe8oC,GAAE,uBAAuBlf,GAAE,kBAAkBS,IAAE,sBAAsBH,GAAE,CAAC,UAAU,KAAK,aAAalqB,GAAE,qBAAqB8oC,GAAE,uBAAuB,yBAAyB,iBAAiB,mBAAmB,gBAAgBlf,GAAE,oBAAoBS,GAAC,EAAEwe,GAAE,CAAC,SAAS,CAAC,UAAU,IAAI,QAAQ,EAAE,EAAE,OAAO,CAAC,UAAU,IAAI,QAAQ,EAAE,EAAE,WAAW,CAAC,UAAU,IAAI,QAAQ,EAAE,EAAE,OAAO,CAAC,UAAU,IAAI,QAAQ,EAAE,EAAE,MAAM,CAAC,UAAU,IAAI,QAAQ,EAAE,CAAC,EAAE9e,IAAE,SAAS,EAAE,CAAC,OAAOnxC,IAAE8vD,CAAC,EAAEA,EAAE,OAAO,KAAKG,EAAC,CAAC,CAAC,QAAQH,CAAC,EAAE,GAAGG,GAAEH,GAAG,CAAC,CAAC,EAAe,OAAO,OAApB,MAA6B,IAAE,OAAO,uBAAuB,IAAIr1C,IAAE,MAAK,SAAS,EAAE,CAAC,OAAO,WAAWq1C,EAAE,IAAI,EAAE,CAAC,EAAEM,IAAE,KAAK,IAAI,EAAEzf,IAAY,OAAO,aAAjB,UAA0C,OAAO,YAAY,KAA/B,WAAmC,UAAU,CAAC,OAAO,YAAY,IAAI,CAAC,EAAE,UAAU,CAAC,OAAO,KAAK,IAAI,EAAEyf,GAAC,EAAE,SAAStrD,IAAE,EAAE,EAAE,CAAC,IAAIlD,EAAEkuD,EAAE,QAAQrf,CAAC,EAAO7uC,IAAL,IAAQkuD,EAAE,OAAOluD,EAAE,CAAC,CAAC,CAAC,IAAI8uC,IAAe,UAAU,CAAC,SAASof,GAAG,CAAC,CAAC,MAAO,GAAE,UAAU,IAAI,UAAU,CAAC,IAAIA,EAAE,KAAKiya,IAAE,UAAU,CAACjya,EAAE,aAAa,KAAKnf,IAAE,CAAC,CAAC,CAAC,CAAC,EAAEmf,CAAC,EAAE,EAAE1jD,GAAE,UAAU,CAAC,KAAK,SAAS,EAAE,KAAK,SAAS,CAAC,EAAEvC,IAAE,EAAEwV,GAAE,KAAKsxC,IAAe,UAAU,CAAC,SAASb,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI,MAAI,KAAK,cAAcA,EAAE,KAAK,UAAU,CAAC,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,IAAI1jD,GAAE,KAAK,+BAA+B,KAAK,KAAK,UAAU,EAAE,KAAK,0BAA0B,CAAC,EAAE,KAAK,eAAe,IAAIA,GAAE,KAAK,oBAAoB,KAAK,KAAK,WAAW,IAAIA,GAAE,KAAK,iBAAiB,EAAE,KAAK,WAAW,CAAC,EAAE,KAAK,oBAAoB,CAAC,CAAC,CAAC,IAAIqkC,EAAEqf,EAAE,UAAU,MAAO,GAAE,MAAM,UAAU,CAAC,OAAO,KAAK,GAAG,EAAE,EAAE,QAAQ,UAAU,CAAC,KAAK,UAAU,CAAC,EAAE,KAAK,cAAc,iBAAiB,IAAI,CAAC,EAAE,EAAE,gBAAgB,SAAS,EAAE,CAAC,MAAO,MAAK,cAAcA,EAAE,IAAI,EAAE,EAAE,gBAAgB,UAAU,CAAC,OAAO,KAAK,cAAc,QAAQ,EAAE,EAAE,gCAAgC,SAAS,EAAE,CAAC,OAAO,KAAK,IAAI,KAAK,UAAUA,EAAE,QAAQ,CAAC,EAAE,EAAE,YAAY,SAAS,EAAE,CAAmC,GAA/BA,IAAI,KAAK,YAAyB,KAAK,aAAaA,EAAE,KAAK,YAAYA,GAAG,KAAK,SAAS,GAAE,OAAO,KAAK,KAAK,YAAY,KAAK,gBAAgB,EAAE,KAAK,UAAUA,EAAE,KAAK,cAAc,eAAe,KAAK,MAAM,CAAC,EAAE,IAAI,IAAIrf,EAAE,EAAE7uC,EAAE,KAAK,UAAU,OAAO6uC,EAAE7uC,EAAE,IAAI,CAAC,IAAI5B,EAAE,KAAK,UAAUywC,EAAE,CAAC,uBAAuBzwC,GAAGA,EAAE,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,YAAY,SAAS,EAAE,CAAC,OAAO8vD,IAAI,KAAK,cAAc,WAAW,KAAK,cAAc,SAASA,EAAE,KAAK,cAAc,eAAe,KAAK,MAAM,CAAC,GAAG,IAAI,EAAE,EAAE,gBAAgB,SAAS,EAAE,CAAC,KAAK,YAAYA,EAAE,KAAK,cAAc,SAASA,EAAE,IAAI,IAAIrf,EAAE,EAAE7uC,EAAE,KAAK,UAAU,OAAO6uC,EAAE7uC,EAAE,IAAI,CAAC,IAAI5B,EAAE,KAAK,UAAUywC,GAAGzwC,EAAE,gBAAgBA,EAAE,eAAe,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,UAAU,UAAU,CAAC,MAAO,MAAK,UAAU,KAAK,cAAc,SAAS,KAAK,WAAW,SAAS,KAAK,cAAc,SAAS,KAAK,cAAc,SAAS,EAAE,IAAI,EAAE,EAAE,4BAA4B,SAAS,EAAE,CAAC,MAAO,MAAK,0BAA0B8vD,EAAE,IAAI,EAAE,EAAE,eAAe,UAAU,CAAC,IAAIA,EAAE,KAAK,YAAYrf,EAAE,KAAK,UAAU,OAAO,KAAK,cAAc,QAAQ,IAAIqf,EAAErf,GAAG,KAAK,gBAAgB,EAAEA,GAAGqf,EAAErf,GAAG,KAAK,gBAAgB,EAAEA,EAAE,EAAE,EAAE,QAAQ,SAAS,EAAE,EAAE,CAAC,IAAI7uC,EAAE,KAAK,SAAS,EAAE,GAAG,CAACA,GAAG,CAAC,KAAK,WAAW,CAAC,IAAI5B,EAAEywC,EAAEA,EAAE,OAAO,EAAE,MAAM,KAAK,kBAAkBzwC,EAAE,IAAI,IAAI+vD,EAAElf,EAAEzxB,EAAEwxB,EAAEE,EAAExxB,EAAE8H,EAAE,KAAK,cAAc,QAAQ8oC,EAAE,KAAK,cAAc,SAASlf,EAAE,KAAK,cAAc,SAASS,EAAE,KAAK,cAAc,SAASH,EAAE,KAAK,WAAW,SAAS2e,EAAE,KAAK,WAAW,SAAS,KAAK,kBAAkB5wC,IAAG,KAAK,kBAAkBA,GAAE,KAAK,iBAAiBA,KAAI,KAAK,eAAe,SAAS2xB,EAAE,KAAK,eAAe,SAASS,GAAG,EAAErqB,GAAG,KAAK,UAAUkqB,GAAG4e,EAAEze,EAAE,EAAErqB,GAAG,KAAK,WAAW,EAAE4pB,GAAG,EAAES,GAAGpyB,GAAE,KAAK6wC,GAAG,EAAEze,EAAEZ,EAAExxB,GAAE,IAAI,EAAE+H,GAAG,KAAK,WAAW,EAAE4pB,GAAG,EAAEif,GAAG5wC,GAAE,KAAK6wC,GAAG,EAAEze,EAAEb,EAAEvxB,GAAE,IAAI,EAAE2xB,GAAG,EAAEif,GAAG5wC,GAAE,GAAG,EAAE,GAAG0wC,EAAE,GAAG3wC,EAAE0xB,IAAI,EAAEW,EAAEnyB,EAAED,KAAIA,GAAE,GAAG,EAAE,GAAGwxB,EAAE,GAAGD,EAAEtxB,IAAI8H,GAAG,KAAK,UAAUkqB,GAAG4e,EAAED,IAAI5wC,GAAE,KAAK,WAAW,SAASiyB,EAAE,KAAK,WAAW,SAAS2e,EAAE,KAAK,cAAc,SAASjf,EAAE,KAAK,cAAc,SAASS,EAAE,KAAK,iBAAiB,GAAG,KAAK,aAAa,KAAK,iBAAiBpyB,EAAC,GAAG,KAAK,SAAS,GAAG,KAAK,2BAA2B,KAAK,eAAe,KAAK,KAAK,cAAc,QAAQ,GAAG,KAAK,YAAY,KAAK,UAAU,KAAK,cAAc,SAAS,KAAK,YAAY,KAAK,UAAU,KAAK,cAAc,SAAS,KAAK,YAAY,KAAK,WAAW,KAAK,YAAY,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI8xB,EAAE,CAAC,EAAE,KAAK,aAAa,KAAK,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI12B,EAAE,CAAC,EAAE7Y,IAAI,KAAK,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,sBAAsBuvC,EAAE12B,CAAC,CAAC,CAAC,EAAE,EAAE,sBAAsB,SAAS,EAAE,EAAE,CAAC,IAAI7Y,EAAE,KAAK,KAAK,UAAU,OAAO,OAAO,CAAC,CAAC,QAAQ,SAAS,EAAE,CAACkuD,GAAG9vD,EAAE,kBAAkB,CAAC4B,EAAE,oBAAoB5B,EAAE,iBAAiB4B,CAAC,EAAE,EAAE,kBAAkB,CAAC,GAAG5B,EAAE,gBAAgBA,EAAE,eAAe4B,CAAC,EAAE6uC,GAAGzwC,EAAE,gBAAgBA,EAAE,eAAe4B,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,oBAAoB,UAAU,CAAC,MAAM,CAAC,KAAK,SAAS,GAAG,CAAC,KAAK,UAAU,CAAC,EAAE,EAAE,UAAU,UAAU,CAAC,OAAO,KAAK,UAAU,EAAE,EAAE,SAAS,UAAU,CAAC,OAAO,KAAK,IAAI,KAAK,cAAc,QAAQ,EAAE,KAAK,sBAAsB,KAAK,gCAAgC,KAAK,aAAa,GAAG,KAAK,gCAAoC,KAAK,cAAc,UAAvB,EAA+B,EAAE,EAAE,aAAa,SAAS,EAAE,CAAC,KAAK,cAAc,SAAS,KAAK,cAAc,SAASkuD,EAAE,KAAK,eAAe,UAAU,EAAEA,GAAG,KAAK,cAAc,SAAS,KAAK,cAAc,SAASA,EAAE,KAAK,eAAe,UAAU,EAAEA,EAAE,EAAE,EAAE,YAAY,SAAS,EAAE,CAAC,OAAO,KAAK,UAAU,KAAKA,CAAC,EAAE,IAAI,EAAE,EAAE,mBAAmB,SAAS,EAAE,CAAC,IAAIrf,EAAE,KAAK,OAAO,OAAO,KAAKqf,CAAC,CAAC,CAAC,QAAQ,SAAS,EAAE,CAAC,IAAI9vD,EAAE,EAAE4B,IAAI,EAAEkuD,EAAEluD,GAAG,UAAU,CAAC5B,EAAE,MAAM,IAAK,GAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,EAAEywC,EAAE,eAAeqf,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,UAAU,KAAKA,CAAC,EAAE,IAAI,EAAE,EAAE,eAAe,SAAS,EAAE,CAAC,OAAOhrD,IAAE,KAAK,UAAUgrD,CAAC,EAAE,IAAI,EAAEA,CAAC,EAAE,EAAEY,IAAe,UAAU,CAAC,SAASZ,EAAE,EAAE,CAAC,KAAK,OAAOA,GAAG,IAAIpf,IAAE,KAAK,OAAO,aAAa,KAAK,KAAK,UAAU,CAAC,EAAE,KAAK,eAAe,CAAC,EAAE,KAAK,mBAAmB,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,KAAK,gBAAgB,GAAG,KAAK,gBAAgB,CAAC,CAAC,CAAC,IAAID,EAAEqf,EAAE,UAAU,MAAO,GAAE,aAAa,SAAS,EAAE,EAAE,CAAC,OAAO,KAAK,uBAAuB,CAAC,QAAQA,EAAE,SAASrf,CAAC,CAAC,CAAC,EAAE,EAAE,uBAAuB,SAAS,EAAE,CAAC,IAAIA,EAAE,IAAIkgB,IAAE,IAAI,EAAE,OAAO,KAAK,eAAelgB,CAAC,EAAEA,EAAE,gBAAgBqf,CAAC,EAAErf,CAAC,EAAE,EAAE,UAAU,UAAU,CAAC,OAAO,KAAK,OAAO,EAAE,EAAE,eAAe,SAAS,EAAE,CAAC,KAAK,gBAAgBqf,EAAE,MAAM,GAAGA,CAAC,EAAE,EAAE,iBAAiB,SAAS,EAAE,CAACkya,IAAE,KAAK,eAAelya,CAAC,EAAE,OAAO,KAAK,gBAAgBA,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,SAAS,EAAE,EAAE,CAAC,IAAI,IAAIluD,EAAE,KAAK,KAAK,mBAAmB,OAAO,GAAG,KAAK,mBAAmB,IAAI,EAAE,IAAI,KAAK,eAAe,OAAO,OAAO,CAAC,CAAC,QAAQ,SAAS,EAAE,CAAC5B,EAAE,oBAAoB,EAAEA,EAAE,QAAQ8vD,EAAE,IAAIrf,EAAE,GAAG,EAAE7uC,EAAE,mBAAmB,KAAKA,EAAE,eAAe,QAAQ5B,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,mBAAmB,OAAO,GAAG,CAAC,IAAIA,EAAE,KAAK,mBAAmB,IAAI,EAAEA,GAAG,GAAG,KAAK,eAAe,OAAOA,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,SAAS,EAAE,CAAC,IAAIywC,EAAO,KAAK,kBAAV,KAA4B,KAAK,gBAAgBqf,EAAE,GAAG,IAAIluD,EAAEkuD,EAAE,KAAK,gBAAgB,KAAK,gBAAgBA,EAAE,IAAI9vD,EAAE,EAAE+vD,EAAE,KAAK,UAAU,OAAO,IAAI,EAAE,EAAE/vD,EAAE+vD,EAAE,KAAK,EAAE,KAAK,UAAU/vD,GAAA,CAAI,mBAAmBywC,EAAE,kBAAkB,IAAI,EAAE,IAAI,KAAK,QAAQqf,EAAEluD,CAAC,EAAM,KAAK,eAAe,SAAxB,IAAiC,KAAK,QAAQ,CAAC,EAAE,KAAK,gBAAgB,IAAI,EAAE,EAAE5B,EAAE+vD,EAAE,KAAK,EAAE,KAAK,UAAU/vD,GAAA,CAAI,kBAAkBywC,EAAE,iBAAiB,IAAI,EAAE,KAAK,SAAS,KAAK,OAAO,IAAI,CAAC,EAAE,EAAE,eAAe,SAAS,EAAE,CAAC,IAAIA,EAAE,KAAK,gBAAgBqf,GAAQ,KAAK,eAAe,QAAQrf,CAAC,IAAlC,IAAqC,KAAK,eAAe,KAAKA,CAAC,EAAE,KAAK,UAAU,IAAI,KAAK,QAAQ,CAAC,EAAE,KAAK,OAAO,IAAI,EAAE,EAAEqf,CAAC,EAAE,EAAErzD,IAAE,IAAIi0D,IAAEzwD,IAAE,SAAS,EAAE,CAAC,IAAIwwC,EAAEqf,EAAE,aAAaluD,EAAE6uC,EAAE,kBAAkBzwC,EAAE8vD,EAAE,gBAAgBC,EAAED,EAAE,eAAejf,EAAEif,EAAE,iBAAiB1wC,EAAE3iB,IAAE,aAAag0C,EAAE,UAAUA,EAAE,OAAO,EAAErxB,EAAE,4BAA4B,CAAC,CAACxd,CAAC,EAAE,IAAIgvC,EAAE,CAAC,iBAAiBC,EAAE,eAAe,UAAU,CAACzxB,EAAE,QAAQ,EAAE2wC,EAAE,CAAC,EAAE,eAAe/vD,EAAE,CAAC,OAAOof,EAAE,eAAe2wC,CAAC,CAAC,CAAC,EAAE,OAAO3wC,EAAE,YAAYwxB,CAAC,EAAExxB,CAAC,EAAE4xC,IAAE,SAAS,EAAE,CAAC,IAAIvgB,EAAExwC,IAAE6vD,CAAC,EAAE,OAAOrf,EAAE,YAAY,CAAC,EAAEA,CAAC,EAAEx7C,IAAE,SAAS,EAAE,EAAE,CAAC,GAAYw7C,IAAT,IAAK,KAAQ,EAAE,CAAC,GAAGqf,GAAGA,EAAE,OAAO,CAACrf,EAAE,SAASqf,EAAE,QAAQ,EAAE,IAAIluD,EAAE5B,EAAY,OAAO,EAAEywC,EAAE,QAArB,SAAgC,EAAE,KAAK,IAAI,KAAK,IAAI,EAAE7uC,EAAE,CAAC,EAAE,CAAC,EAAhC,IAAkCmuD,EAAE,EAAE,KAAK,IAAI,KAAK,IAAID,EAAE,OAAO,GAAG,EAAE,EAAE,EAAEjf,EAAEif,EAAE,IAAI,SAAS,EAAE,EAAE,CAAC,IAAIluD,EAAEkuD,EAAE,gBAAgB,MAAO,GAAE,gBAAgB,SAAS,EAAE,CAAC,IAAI1wC,EAAExd,EAAEkuD,CAAC,EAAE,OAAO,SAAS,EAAE,CAAC,IAAIluD,EAAEkuD,EAAE,gBAAgB,GAAG,EAAEluD,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEA,IAAImuD,GAAGlf,EAAEJ,EAAE,IAAII,EAAEJ,EAAE,EAAE,CAAC,KAAK,IAAI,KAAK,IAAI7uC,EAAE5B,EAAE,CAAC,EAAE,CAAC,CAAC,EAAEof,EAAE0wC,CAAC,CAAC,CAAC,EAAEA,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,IAAIrf,EAAExwC,IAAE6vD,CAAC,EAAE,GAAGrf,EAAE,OAAOA,EAAE,YAAY,KAAKA,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,EAAEI,EAAE,IAAIA,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE3pC,IAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,OAAO4oD,EAAErf,EAAE,CAAC,CAAC,EAAEh4C,IAAE,SAAS,EAAE,CAAC,OAAOq3D,EAAE,IAAI,OAAO,aAAaA,EAAE,OAAO,GAAGA,EAAE,KAAK,OAAO,YAAYA,EAAE,MAAM,CAAC,EAAE,SAAS7e,IAAE,EAAE,CAAC,OAAO,KAAK,MAAM6e,EAAE,QAAQ,YAAY,IAAI,CAAC,CAAC,IAAI2oG,IAAE,SAAS,EAAE,EAAE,CAAC,IAAI72J,EAAE,OAAOwd,GAAE0wC,GAAG,CAAC,EAAE,CAAC,GAAGrf,EAAE,IAAIA,EAAE,GAAG7uC,EAAE,CAAC,EAAEuuD,IAAE,SAAS,EAAE,EAAE,CAAC,OAAOJ,GAAEtf,EAAE,SAAS,iBAAiB,IAAIO,GAAE,KAAKP,EAAE,IAAI,EAAEqf,EAAE,iBAAiB,IAAI1oC,GAAE,GAAG,CAAC,CAAC,EAAEipC,IAAE,SAAS,EAAE,CAAC,OAAOP,EAAE,IAAI,SAAS,EAAE,CAAC,MAAM,CAACA,EAAEA,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,EAAE9qD,IAAE,CAAC,EAA6E+rC,IAAE,SAAS,EAAE,CAAC,IAAIH,EAAE5wC,EAAE,qBAAqBsf,EAAWsxB,IAAT,IAAK,GAAM,CAAC,EAAEA,EAAEa,EAAEzxC,EAAE,qBAAqBsxC,EAAWG,IAAT,IAAK,GAAM,CAAC,EAAEA,EAAEh3B,EAAEza,EAAE,oCAAoCowD,EAAW31C,IAAT,IAAK,GAAM,CAAC,EAAEA,EAAEk2B,EAAE3wC,EAAE,cAAc8E,EAAW6rC,IAAT,IAAK,GAAM,CAAC,EAAEA,EAAED,EAAE1wC,EAAE,YAAYoM,EAAEpM,EAAE,qBAAqB6J,EAAE7J,EAAE,OAAOqf,EAAErf,EAAE,MAAM2wD,EAAE3wD,EAAE,UAAU0wD,EAAE1wD,EAAE,cAAcvD,EAAWi0D,IAAT,IAAK,GAAM,CAAC,EAAEA,EAAEzwD,EAAED,EAAE,aAAas6H,EAAWr6H,IAAT,IAAK,GAAM,CAAC,EAAEA,EAAEixC,EAAElxC,EAAE,wBAAwB4wD,EAAE5wD,EAAE,WAAW+wC,EAAE/wC,EAAE,QAAQ,GAAGgF,KAAG,CAAC,OAAO,WAAW,kCAAkC,CAAC,CAAC,QAAQ,CAAC,IAAI6rD,EAAEisH,EAAEzsH,IAAEF,KAAG,EAAE,CAAC,QAAQzf,EAAE,UAAUigB,CAAC,GAAG,QAAQE,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,IAAIpgB,EAAEqf,EAAE,GAAGluD,EAAEkuD,EAAE,GAAG9vD,EAAE,OAAO,iBAAiBywC,CAAC,EAAE,MAAM,CAACA,EAAE,QAAQ,OAAO,CAAC,QAAQA,EAAE,KAAK7uC,EAAE,QAAQ,WAAW5B,EAAE,OAAO,EAAE,UAAUA,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAOy4J,IAAE,CAAC,CAAC,EAAEj8B,EAAE,SAAS,EAAE,CAAC,IAAI/rF,EAAEqf,EAAE,YAAYluD,EAAEkuD,EAAE,UAAU,OAAOluD,EAAE,SAAS,EAAE,CAAC,OAAO,SAAS,EAAE,CAAC,OAAOmuD,GAAE,SAAS,iBAAiB,IAAI/e,GAAE,KAAK8e,EAAE,KAAKrf,CAAC,CAAC,CAAC,CAAC,EAAE7uC,CAAC,EAAE6uC,EAAE,SAAS,EAAE,CAAC,IAAIA,EAAE,KAAK,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAO,GAAE,QAAQ,UAAUA,EAAE,SAAS,EAAE,CAAC,OAAOsf,GAAED,EAAE,iBAAiB,qBAAqBrf,EAAE,MAAM7uC,CAAC,CAAC,CAAC,CAAC,EAAE6uC,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,YAAYC,EAAE,UAAUigB,CAAC,CAAC,EAAEtf,EAAE,SAAS,EAAE,CAAC,OAAO,SAAS,EAAE,CAAC,OAAOye,EAAE,IAAI1oC,GAAE,KAAKqpB,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE+rF,CAAC,EAAEhrF,EAAE,SAAS,EAAE,CAAC,OAAO4e,EAAEN,IAAIgtH,EAAEhtH,EAAE,EAAEve,EAAE,OAAO,KAAK6e,CAAC,CAAC,CAAC,OAAO,OAAO,KAAK0sH,CAAC,CAAC,CAAC,CAAC,OAAO,SAAS,EAAE,CAAC,MAAM,CAACtrI,EAAEse,CAAC,CAAC,CAAC,EAAE+sH,EAAE,CAAC,cAAc/3K,EAAE,WAAWusC,EAAE,oCAAoC+e,EAAE,mCAAmC0sH,EAAE,qBAAqBxrI,EAAE,aAAagpF,CAAC,EAAEsB,EAAE,SAAS,EAAE,CAAC,IAAInrF,EAAE7uC,EAAEkuD,EAAE,aAAa9vD,EAAE8vD,EAAE,cAAcC,EAAED,EAAE,WAAWjf,EAAEif,EAAE,oCAAoC1wC,EAAE0wC,EAAE,mCAAmClf,EAAEkf,EAAE,qBAAqBhf,EAAEgf,EAAE,aAAaxwC,EAAE1d,EAAE,OAAO,SAAS,EAAE,CAAC,OAAOwd,EAAE0wC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,EAAE,CAAC,OAAO9vD,EAAE8vD,IAAI9vD,EAAE8vD,EAAE,CAAC,QAAQ,CAAC,EAAE1oC,EAAExlB,EAAE,OAAO,SAAS,EAAE,CAAC,OAAOivC,EAAEif,IAAI9vD,EAAE8vD,IAAI9vD,EAAE8vD,EAAE,CAAC,MAAM,CAAC,EAAEI,EAAE,IAAI,QAAQ,SAAS,EAAE,CAAC,EAAEJ,CAAC,CAAC,EAAE9e,EAAE,CAAC,EAAES,EAAE,EAAEH,EAAElqB,EAAE,IAAI,SAAS,EAAE,EAAE,CAAC,IAAI2oC,EAAElf,EAAEif,EAAE,CAAC,yBAAyB1wC,EAAE2wC,EAAE,QAAQzwC,EAAEywC,EAAE,OAAO3oC,EAAE2oC,EAAE,cAAcG,EAAE9oC,EAAE,IAAIkqB,EAAElqB,EAAE,KAAK6oC,EAAE7oC,EAAE,MAAM+pB,EAAE/pB,EAAE,OAAkB,iBAAiB9H,CAAC,CAAC,CAAC,WAA/B,WAA0C,EAAE,MAAM,SAAS,YAAY,EAAE,MAAM,UAAU,2BAA2B,EAAE,MAAM,SAAS,WAAW,EAAE,MAAM,IAAI4wC,EAAE,KAAK,EAAE,MAAM,KAAK5e,EAAE,KAAK,EAAE,MAAM,OAAOH,EAAE,KAAK,EAAE,MAAM,MAAM8e,EAAE,KAAK,IAAIx1C,EAAEu2B,EAAE,OAAO,SAAS,EAAE,CAAC,OAAO8e,EAAE,KAAKxwC,CAAC,CAAC,CAAC,CAAC,GAAG7E,IAAI,EAAE,CAAC6E,EAAE,SAAS,uBAAuB,CAAC,EAAE0xB,EAAE,KAAKv2B,CAAC,GAAGA,EAAE,EAAE,CAAC,YAAY2E,CAAC,EAAE,GAAG,EAAE,IAAIgxC,EAAE,UAAU,CAAC,GAAG,CAAC9wC,EAAE,YAAYF,CAAC,CAAC,MAAS,CAAC,QAAQ,CAAK,KAAJ,GAAWqxB,EAAE,CAAC,CAAC,EAAE,MAAO,GAAEqf,GAAG,CAAC,KAAKM,CAAC,EAAE,UAAU,CAAC,OAAOpwD,EAAE8vD,EAAE,CAAC,OAAO1wC,EAAExd,EAAEwuD,EAAEtf,CAAC,CAAC,CAAC,CAAC,EAAE,OAAOE,EAAE,QAAQ,SAAS,EAAE,CAAC8e,EAAE,EAAE,CAAC,YAAYA,EAAE,EAAE,CAAC,CAAC,EAAExe,EAAE,QAAQb,EAAE,EAAE,CAAC,qBAAqB,UAAU,CAACnxB,EAAE,QAAQ,SAAS,EAAE,CAAC,IAAImxB,EAAEsf,EAAED,CAAC,EAAErf,IAAI,EAAE,MAAM,QAAQ,IAAI,CAAC,CAAC,EAAE,wBAAwB,UAAU,CAACnxB,EAAE,QAAQ,SAAS,EAAE,EAAE,CAAC,IAAI1d,EAAEmuD,EAAED,CAAC,EAAEluD,GAAG5B,EAAE8vD,EAAE,CAAC,SAASluD,EAAE6uC,EAAEK,CAAC,CAAC,CAAC,CAAC,EAAE,uBAAuB,UAAU,CAAC,OAAOQ,EAAE,QAAQ,SAAS,EAAE,CAAC,OAAOwe,EAAE,CAAC,CAAC,EAAEI,CAAC,CAAC,CAAC,EAAE9wC,GAAE,CAAC,EAAEy9J,EAAE,CAAC,aAAatrI,CAAC,CAAC,CAAC,EAAEqrI,EAAEhhD,EAAE,qBAAqBxqF,EAAEwqF,EAAE,wBAAwBmhD,EAAEnhD,EAAE,uBAAuBl3H,EAAE0a,GAAE,CAAC,EAAEy9J,EAAE,CAAC,YAAYnsI,EAAE,WAAWpxB,EAAE,OAAOkyB,CAAC,EAAE,qBAAqBplC,EAAE,OAAOvC,EAAE,MAAMwV,EAAE,cAAc5iB,EAAE,eAAe+/H,EAAE,WAAW5rE,CAAC,CAAC,EAAE7f,GAAGA,EAAEL,EAAE4pF,CAAC,EAAE,IAAI2nW,EAAG,SAAS,EAAE,CAAC,IAAIrxb,EAAEtxB,EAAEtf,EAAE,WAAWonB,EAAEpnB,EAAE,cAAcgxC,EAAEhxC,EAAE,qBAAqByxC,EAAEzxC,EAAE,oCAAoCsxC,EAAEtxC,EAAE,mCAAmCya,EAAEza,EAAE,qBAAqBowD,EAAEpwD,EAAE,OAAO2wC,EAAE3wC,EAAE,WAAW8E,EAAE9E,EAAE,MAAM0wC,EAAE1wC,EAAE,cAAcoM,EAAWskC,IAAT,IAAK,GAAM,CAAC,EAAEA,EAAE7mC,EAAE7J,EAAE,aAAaqf,EAAWxV,IAAT,IAAK,GAAM,CAAC,EAAEA,EAAE8mD,EAAE3wD,EAAE,WAAW0wD,EAAE1wD,EAAE,YAAYvD,EAAE,IAAI,QAAQ,SAAS,EAAE,CAAC,EAAEqzD,CAAC,CAAC,EAAE,GAAGa,GAAGl0D,EAAE,KAAK,UAAU,CAAC,OAAOk0D,EAAED,EAAErxC,CAAC,CAAC,CAAC,EAAE,CAACC,EAAE,OAAO,OAAO,UAAU,CAAC,OAAOsxB,EAAE,CAAC,CAAC,EAAEn0C,CAAC,EAAE,IAAIwD,EAAE,CAAC,EAAEw4J,EAAE9nH,EAAErxB,EAAE,EAAE,EAAE6wC,EAAEsoG,EAAEA,EAAE,cAAc,cAAc,MAAM,EAAE,SAAS,cAAc,MAAM,EAAEypU,IAAE5id,CAAC,EAAE,IAAI+wC,EAAE/wC,EAAE,IAAI,SAAS,EAAE,CAAC,IAAIuxB,EAAEY,EAAEzxC,EAAE,CAAC,KAAKsf,EAAEgyB,EAAEtxC,EAAE,CAAC,KAAK2wC,EAAEc,EAAEzxC,EAAE,CAAC,QAAQ8E,EAAEwsC,EAAEtxC,EAAE,CAAC,QAAQ0wC,EAAEpxB,EAAE,MAAM,GAAGA,EAAE,OAAO,EAAElT,EAAEklC,EAAEtxC,EAAE,CAAC,QAAiC,GAAtB,CAACvH,IAAEo4C,CAAC,GAAG,CAACp4C,IAAE6mB,CAAC,GAAc,CAAClT,EAAE,MAAM,CAAC,EAAE,IAAIvC,EAAE8mD,EAAED,EAAEj0D,EAAEw0C,IAAE7kC,CAAC,EAAE4kD,GAAG,GAAG,GAAY,EAAE,CAAC,cAAcZ,EAAE,cAAc3zD,EAAE,MAAM,KAAnD,IAAK,GAAiD,CAAC,EAAEoN,EAAA,CAAG,cAAcuV,GAAE,CAAC,EAAE6wC,GAAE,SAAS9e,IAAEwf,EAAE,aAAa,EAAExf,IAAEuf,CAAC,CAAC,GAAGz7D,EAAE,CAAC,IAAIwH,EAAE,QAAQ,UAAUA,EAAE,QAAQg8J,EAAE,CAAC,QAAQrsJ,EAAE,GAAGpM,EAAE,QAAQ/K,EAAE,aAAa+7D,CAAC,EAAE,GAAG5pC,EAAEpnB,IAAIonB,EAAEpnB,EAAE,CAAC,YAAY,CAAConB,EAAEpnB,EAAE,CAAC,WAAWqf,EAAE,SAASA,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,IAAIra,EAAE,KAAK,IAAI6rC,EAAE,KAAKvxB,EAAE,IAAI,EAAE,KAAK,IAAIuxB,EAAE,IAAIvxB,EAAE,GAAG,EAAEg7G,EAAE,KAAK,IAAIzpF,EAAE,MAAMvxB,EAAE,KAAK,EAAE,KAAK,IAAIuxB,EAAE,OAAOvxB,EAAE,MAAM,EAAE4xB,EAAE,KAAK,IAAIpsC,EAAE6rC,CAAC,EAAE,GAAOE,EAAE,SAAN,GAAkBvxB,EAAE,SAAN,GAAkBuxB,EAAE,QAAN,GAAiBvxB,EAAE,QAAN,GAAata,EAAE,IAAIs1H,EAAE,IAAIppF,EAAE,IAAI,MAAM,CAAC,EAAE,IAAI0f,EAAEuxa,IAAQ7wb,EAAEtxC,EAAE,CAAC,SAAS,EAAE+wC,EAAE,CAAC,OAAO6f,CAAC,EAAEC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAEisH,EAAE,CAAClsH,CAAC,EAAEn0D,EAAE,YAAYqgL,EAAE,KAAKslT,IAAavxb,EAAE,KAAKvxB,EAAE,IAAI,CAAC,EAAEw9J,EAAE,KAAKulT,IAAaxxb,EAAE,IAAIvxB,EAAE,GAAG,CAAC,GAAG7iB,EAAE,QAAQqgL,EAAE,KAAKwlT,IAAS,KAAK,IAAIzxb,EAAE,MAAM,CAAC,EAAE,KAAK,IAAIvxB,EAAE,MAAM,CAAC,CAAC,CAAC,EAAEw9J,EAAE,KAAKylT,IAAS,KAAK,IAAI1xb,EAAE,OAAO,CAAC,EAAE,KAAK,IAAIvxB,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG7iB,EAAE,UAAU,EAAE,QAAQk0C,EAAE,EAAE,QAAQ7rC,GAAG,IAAI03H,EAAE,CAAC,GAAK,CAACp1G,EAAEpnB,IAAI,CAAConB,EAAEpnB,EAAE,CAAC,cAAconB,EAAEpnB,EAAE,CAAC,aAAaqf,EAAE,SAASA,EAAE,OAAO,KAA6E,EAApE,SAAS,EAAE,EAAE,CAAC,OAAO0wC,GAAED,EAAE,iBAAiB,IAAII,GAAE,KAAKzf,EAAE,IAAI,CAAC,CAAC,EAAErkC,EAAEpM,CAAK,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,MAAM,CAAC8vD,EAAE7e,IAAE6e,CAAC,CAAC,CAAC,CAAC,GAAE,EAAE,OAAO5oD,IAAE41K,EAAE,OAAO0lT,GAAU,CAAC,EAAE,EAAE,OAAOt7d,IAAE6pC,EAAE,MAAM,EAAE,IAAIS,EAAED,EAAE,SAAS,EAAE,CAAC,IAAI3vC,EAAEkuD,EAAE,QAAQ,EAAEA,EAAE,iBAAiB,EAAEA,EAAE,KAAK,OAAO,SAAS,EAAE,CAAC,IAAIjf,EAAEif,EAAE,OAAO,EAAEA,EAAE,QAAQ,EAAEA,EAAE,aAAa,GAAGrf,GAAE,CAAC,IAAI,EAAE,MAAM,QAAQ,EAAE,IAAI,IAAI,EAAE,MAAM,UAAU,MAAM,EAAE,MAAM,SAAS,OAAOI,EAAE,CAAC,IAAIC,EAAE,SAAS,EAAE,CAAC,MAAM,UAAUgf,EAAE,KAAK,IAAI,EAAE,GAAG,EAAEjf,CAAC,EAAE,EAAE,MAAM,UAAUC,EAAE,GAAG,SAAS,EAAE,CAAC,IAAIL,EAAEqf,EAAE,OAAOluD,EAAEkuD,EAAE,KAAKA,EAAE,iBAAiB,QAAQ,SAAS,EAAE,CAAC,IAAI9vD,EAAE8vD,EAAE,GAAGC,EAAED,EAAE,GAAG,GAAGluD,EAAE,SAAS5B,CAAC,EAAE,CAAC,IAAI6wC,EAAEJ,EAAE,GAAGrxB,EAAEqxB,EAAE,GAAGG,EAAEH,EAAE,GAAGK,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,EAAExxB,EAAE,GAAGywC,EAAE,YAAY,EAAE,WAAW,CAACtf,EAAE,GAAGI,EAAE,EAAE,WAAW,CAACD,EAAExxB,EAAE,GAAG,aAAa0xB,EAAE,WAAW,OAAOA,EAAE,WAAW,OAAOif,EAAE,QAAQ,EAAE,OAAO,EAAElf,EAAE,EAAE,OAAO,EAAEzxB,EAAE,GAAG,UAAU0xB,EAAE,OAAO,KAAKA,EAAE,OAAO,KAAK,EAAE,MAAM,UAAUxxB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,EAAE,OAAOuxB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQzkC,EAAE,iBAAiBowH,EAAE,KAAKrsE,CAAC,CAAC,EAAE,GAAG/oC,EAAEpnB,IAAIonB,EAAEpnB,EAAE,CAAC,WAAW,CAAC,IAAI68K,GAAEz1J,EAAEpnB,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO68K,GAAEzwK,EAAEiT,CAAC,CAAC,CAAC,CAAC,IAAIu8G,GAAEnrF,GAAEogB,EAAE,OAAO,GAAGpgB,GAAEM,EAAE,OAAO,GAAG8f,EAAE,UAAU9f,EAAE,QAAQ6rI,GAAE,CAAC,EAAE,OAAOx9J,GAAE,CAAC,EAAEq5I,EAAE,CAAC,QAAQxjK,EAAE,aAAa+7D,EAAE,gBAAgB,SAAS,EAAE,CAAC,IAAIvgB,EAAE,EAAE,OAAO7uC,EAAE,EAAE,eAAe,MAAO,GAAE5B,GAAG,CAAC,QAAQywC,EAAE,QAAQ,KAAKA,CAAC,EAAE,eAAe7uC,CAAC,EAAE,SAAS,EAAE,CAACwlB,EAAEpnB,IAAIonB,EAAEpnB,EAAE,CAAC,gBAAgBonB,EAAEpnB,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAE48K,KAAI,GAAE,CAAC,EAAEx1J,EAAEpnB,IAAIonB,EAAEpnB,EAAE,CAAC,SAASonB,EAAEpnB,EAAE,CAAC,QAAQoM,EAAEiT,CAAC,GAAG,IAAIoxB,EAAE,EAAE,gBAAgB,EAAE,GAAG0f,EAAE,SAAS/jD,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,OAAOykD,EAAE,OAAO,IAAI,SAAS,EAAE,EAAE,CAAC,OAAO/f,GAAEgf,EAAE/e,EAAE,OAAOnvC,GAAG6uC,CAAC,CAAC,CAAC,EAAEmrF,KAAI,EAAE,QAAQ9qF,GAAE+f,EAAE,QAAQ9f,EAAE,QAAQN,CAAC,GAAGc,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE,eAAe,UAAU,CAACA,EAAE,CAAC,OAAOsf,EAAE,OAAO,QAAQ+qE,GAAE/qE,EAAE,QAAQ,IAAK,GAAE,aAAangB,CAAC,CAAC,EAAEtpB,EAAEpnB,IAAIonB,EAAEpnB,EAAE,CAAC,kBAAkBonB,EAAEpnB,EAAE,CAAC,iBAAiBoM,EAAEiT,CAAC,EAAE5iB,EAAE,gBAAgB,EAAE,MAAM,gBAAgBA,EAAE,gBAAgBge,IAAI,EAAE,MAAM,gBAAgB,OAAO+hH,EAAE,QAAQ,SAAS,EAAE,CAAC,IAAI/rF,EAAEqf,EAAE,GAAGluD,EAAEkuD,EAAE,GAAGluD,EAAE,gBAAgB,EAAE,MAAM,gBAAgBA,EAAE,gBAAgB6Y,IAAI,EAAE,MAAM,gBAAgB,MAAM,CAAC,CAAC,EAAE,eAAe,SAAS,EAAE,CAAC,OAAOu2B,EAAEhxC,GAAG4B,IAAE4vC,CAAC,GAAGA,EAAE,EAAE,EAAE,MAAM,UAAU,GAAGgrF,EAAE,QAAQ,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,UAAU,EAAE,CAAC,EAAE9rF,GAAGtkC,IAAI,EAAE,MAAM,UAAU,GAAG,EAAE,MAAM,SAAS,IAAI0jD,IAAI7vD,EAAE,KAAKD,CAAC,EAAEC,EAAE,QAAQowD,EAAE,QAAQzf,EAAE3wC,CAAC,EAAE,EAAE,WAAWxD,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,EAAE,GAAG4zD,EAAE,QAAQ,SAAS,EAAE,CAAC,OAAO,EAAEP,EAAE,gBAAgB,CAAC,CAAC,EAAEhrD,EAAE,OAAO,UAAU,CAAC,EAAE,IAAIE,EAAEqrD,EAAE,OAAO,SAAS,EAAE,CAAC,OAAOP,EAAE,aAAa,EAAEA,EAAE,WAAWO,EAAE,OAAO,SAAS,EAAE,CAAC,OAAOP,EAAE,KAAKrf,CAAC,CAAC,CAAC,CAAC,YAAYA,CAAC,CAAC,EAAE6pF,EAAE,CAAC,EAAEppF,EAAE,CAAC,EAAE0f,EAAE,CAAC,EAAE5rD,EAAE,QAAQ,SAAS,EAAE,CAAC8qD,EAAE,SAAS,EAAEA,EAAE,SAAS,CAAC,EAAE5e,EAAE4e,EAAE,YAAY5e,EAAE4e,EAAE,WAAW,CAAC,KAAKA,EAAE,OAAO,EAAE,EAAEA,EAAE,YAAY,CAACA,EAAE,OAAO,GAAGwqE,EAAExqE,EAAE,YAAYwqE,EAAExqE,EAAE,WAAW,CAAC,KAAKA,CAAC,EAAE,EAAEA,EAAE,YAAY,CAACA,CAAC,CAAC,CAAC,EAAE,IAAI/e,EAAEsf,EAAE,OAAO,SAAS,EAAE,CAAC,OAAOP,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,SAAS,EAAE,EAAE,CAAC,OAAOA,EAAErf,EAAE,SAASqf,EAAErf,EAAE,QAAQ,CAAC,KAAKA,CAAC,EAAE,EAAEA,EAAE,SAAS,CAACA,CAAC,EAAEqf,CAAC,EAAE,CAAC,CAAC,EAAEe,EAAER,EAAE,OAAO,SAAS,EAAE,CAAC,OAAWrrD,EAAE,QAAQ8qD,CAAC,IAAhB,EAAiB,CAAC,EAAE,OAAOe,EAAE,QAAQ,SAAS,EAAE,CAAC,EAAE,iBAAiB,UAAU,CAACypE,EAAExqE,EAAE,KAAKwqE,EAAExqE,EAAE,GAAG,CAAC,QAAQkB,GAAC,EAAE9f,EAAE4e,EAAE,KAAK,OAAO,KAAK5e,EAAE4e,EAAE,GAAG,CAAC,OAAO,SAAS,EAAE,EAAE,CAAC,IAAIluD,EAAE,OAAOwd,GAAE0wC,GAAG,CAAC,EAAE,CAAC,GAAGrf,GAAG,CAAC,EAAE7uC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,SAAS,EAAE,CAAC6ge,IAAE1xb,EAAE+e,GAAG1jD,EAAE0jD,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAOO,EAAE,QAAQzf,EAAE,CAAC,CAAC,EAAEigB,EAAE,OAAO,SAAS,EAAE,CAAC,MAAM,CAACf,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQkB,GAAC,EAAE,OAAO,KAAKjgB,CAAC,CAAC,CAAC,QAAQ,SAAS,EAAE,CAAC6f,EAAEd,IAAI76D,IAAE87C,EAAE+e,GAAG1jD,EAAE0jD,EAAE,CAAC,CAAC,EAAErzD,CAAC,CAAC,EAAEiI,CAAC,EAAEwsC,EAAEA,EAAE,CAAC,qBAAqB0rI,EAAE,wBAAwBxrI,EAAE,uBAAuB2rI,EAAE,uBAAuBklT,CAAE,CAAC,GAAGrlT,EAAE,EAAEG,EAAE,CAAC,CAAC,KAAK3rI,CAAC,EAAE6wb,EAAG,EAAE,CAAC,EAAEpxa,IAAE,SAAS,EAAE,CAAC,IAAIpgB,EAAEqf,EAAE,QAAQluD,EAAEkuD,EAAE,cAAc9vD,EAAW4B,IAAT,IAAK,GAAM,CAAC,EAAEA,EAAEivC,EAAEif,EAAE,qBAAqBlf,EAAWC,IAAT,IAAK,GAAM,CAAC,EAAEA,EAAEC,EAAEqf,IAAE1f,EAAEqf,EAAE,SAAS,EAAExwC,EAAEywC,GAAEtf,EAAE,iBAAiB,IAAIyf,GAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAElf,EAAE,CAAC,EAAEM,EAAE,CAAC,EAAER,EAAE,OAAO,SAAS,EAAE,CAAC,OAAO9wC,GAAGA,EAAE8vD,EAAE,QAAQ,SAAS9vD,EAAE8vD,EAAE,QAAQ,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,SAAS,EAAE,CAAC,IAAIrf,EAAEqf,EAAE,WAAW,GAAGA,EAAE,QAAQ,CAAC,IAAIluD,EAAEkuD,EAAE,QAAQ,IAAIre,IAAE,GAAG,EAAE7vC,IAAI,EAAEA,EAAE,CAAC,IAAI5B,EAAEgxC,EAAE,UAAU,SAAS,EAAE,CAAC,OAAO8e,EAAE,KAAKrf,CAAC,CAAC,EAAOzwC,IAAL,KAASgxC,EAAE,KAAK,CAACP,EAAEA,EAAE,sBAAsB,CAAC,CAAC,EAAE,EAAEO,EAAE,OAAO,GAAG,EAAE8e,EAAE,QAAQ,QAAQ9e,EAAEhxC,EAAE,CAAC,GAAG,EAAE8vD,EAAE,QAAQ,QAAQrf,CAAC,CAAC,EAAE,IAAIwf,EAAEI,IAAEvf,CAAC,EAAEK,EAAE8e,EAAE,IAAI,SAAS,EAAE,CAAC,IAAIxf,EAAEqf,EAAE,GAAGluD,EAAEkuD,EAAE,GAAGC,EAAE,CAAC,EAAE,GAAG/vD,GAAGA,EAAEywC,EAAE,QAAQ,SAASzwC,EAAEywC,EAAE,QAAQ,OAAO,CAAC,OAAO,CAAC,IAAII,EAAE,EAAEJ,EAAE,QAAQ,QAAQiyb,GAAE3ya,EAAE,CAAC,QAAQtf,EAAE,OAAOa,EAAEb,EAAE,QAAQ,QAAQ,cAAc,CAAC,IAAI7uC,EAAE,IAAIivC,EAAE,IAAI,KAAKjvC,EAAE,KAAKivC,EAAE,KAAK,MAAMjvC,EAAE,MAAM,OAAOA,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC6uC,EAAE,QAAQ,OAAO,CAAC,KAAK7uC,EAAE,QAAQ,WAAW,OAAO,iBAAiB6uC,CAAC,CAAC,CAAC,SAAS,GAAG,EAAE,yBAAyBsf,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO0oG,IAAE,CAAC,CAAC,EAAE,OAAO,SAAS,EAAE,EAAE,CAAC,OAAO,KAAK3oG,CAAC,CAAC,CAAC,QAAQ,SAAS,EAAE,CAACA,EAAErf,EAAE,CAAC,SAASqf,EAAErf,EAAE,CAAC,QAAQ,EAAEqf,EAAErf,EAAE,CAAC,gBAAgBqf,EAAErf,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,OAAOqf,EAAErf,EAAE,CAAC,EAAEA,EAAE,QAAQ,SAAS,EAAE,CAAC,EAAE,MAAM,UAAU,GAAG,EAAE,MAAM,QAAQ,EAAE,CAAC,CAAC,EAAEG,EAAEE,EAAE,OAAOxxB,CAAC,CAAC,EAAE,CAAC,wBAAwB6xB,EAAE,qBAAqB8e,EAAE,IAAI,SAAS,EAAE,CAAC,OAAOH,EAAE,EAAE,CAAC,QAAQ,MAAM,CAAC,CAAC,CAAC,EAA21E,IAAIY,ICArynB,SAAS7f,IAAG,CAAC,MAAO,IAAE,OAAO,OAAO,OAAO,OAAO,KAAK,EAAE,SAAS,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,UAAU,OAAO,IAAI,CAAC,IAAIkf,EAAE,UAAU,GAAG,IAAI,IAAI/vD,KAAK+vD,EAAE,OAAO,UAAU,eAAe,KAAKA,EAAE/vD,CAAC,IAAI,EAAEA,GAAG+vD,EAAE/vD,GAAG,CAAC,OAAO,CAAC,EAAE6wC,GAAE,MAAM,KAAK,SAAS,CAAC,CAAC,SAASzpB,GAAE,EAAE,EAAE,CAAC,MAAO,IAAE,OAAO,eAAe,OAAO,eAAe,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,MAAO,GAAE,UAAU,EAAE,CAAC,EAAEA,GAAE,EAAE,CAAC,CAAC,CAAC,SAAS4pB,IAAE,EAAE,EAAE,CAAC,GAAS,GAAN,KAAQ,MAAM,CAAC,EAAE,IAAI+e,EAAE/vD,EAAE,EAAE,CAAC,EAAE4wC,EAAE,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE5wC,EAAE4wC,EAAE,OAAO,IAAI,EAAE,QAAQ,EAAEA,EAAE5wC,EAAE,GAAG,IAAI,EAAE+vD,GAAG,EAAEA,IAAI,OAAO,CAAC,CAAC,IAAIte,KAAe,EAAAunE,EAAA,eAAE,CAAC,CAAC,EAAE9oD,KAAe,EAAA8oD,EAAA,eAAE,QAAQ,EAAE1nE,GAAe,SAAS,EAAE,CAAC,IAAItxC,EAAE4wC,EAAE,SAAStxB,GAAG,CAAC,IAAI,IAAImxB,EAAEqf,EAAE,UAAU,OAAO9vD,EAAM,MAAM8vD,CAAC,EAAE,EAAE,EAAE,EAAEA,EAAE,IAAI,EAAE,GAAG,UAAU,GAAG,MAAM,CAAC,EAAEC,EAAE,KAAK,MAAMA,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO/vD,CAAC,CAAC,GAAG,MAAM,qBAAqB,CAAC,EAAE,EAAE,cAAc,CAAC,EAAE,EAAE,GAAG,IAAK,GAAEywC,CAAC,CAAC,EAAEsf,EAAE,CAAC,EAAEzwC,EAAA,CAAG,UAAU,OAAO,OAAOsxB,EAAE,SAAS,EAAE,EAAE,UAAU,YAAY5wC,EAAEonB,GAAEpnB,EAAE4wC,CAAC,EAAE,IAAIE,EAAExxB,EAAE,UAAU,MAAO,GAAE,wBAAwB,SAAS,EAAE,CAAC,OAAOwwC,EAAE,UAAU,KAAK,MAAM,SAAS,KAAK,GAAGrf,IAAE,CAAC,QAAQ,KAAK,GAAG,cAAc,KAAK,cAAc,qBAAqB,KAAK,qBAAqB,UAAU,KAAK,MAAM,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,mBAAmB,SAAS,EAAE,EAAE,EAAE,CAAC,KAAK,MAAM,UAAU,EAAE,SAAS,KAAK,IAAIqf,IAAE,CAAC,oCAAoC,EAAE,wBAAwB,qBAAqB,EAAE,qBAAqB,YAAY,KAAK,GAAG,qBAAqB,KAAK,qBAAqB,cAAc,KAAK,cAAc,qBAAqB,KAAK,MAAM,qBAAqB,OAAO,KAAK,MAAM,OAAO,MAAM,KAAK,MAAM,MAAM,UAAU,KAAK,MAAM,UAAU,cAAc,KAAK,MAAM,cAAc,wBAAwB,KAAK,MAAM,wBAAwB,aAAa,CAAC,SAAS,EAAE,aAAa,QAAQ,KAAK,MAAM,YAAY,EAAE,WAAW,KAAK,MAAM,WAAW,QAAQ,KAAK,MAAM,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,MAAMC,EAAE,EAAE,UAAU/vD,EAAeg5G,EAAE,cAAcvnE,IAAE,SAAS,CAAC,MAAM,KAAK,aAAa,EAAeunE,EAAE,cAAc,EAAE,QAAQ,CAAC,UAAU,EAAE,UAAU,IAAI,SAAS,EAAE,CAAC,MAAO,GAAE,GAAG,CAAC,CAAC,EAAE,KAAK,MAAM,QAAQ,CAAC,EAAE,OAAOjpD,IAAI,EAAeipD,EAAE,cAAc9oD,IAAE,SAAS,CAAC,MAAMH,CAAC,EAAE/vD,CAAC,GAAGA,CAAC,EAAEsf,CAAC,EAAEA,WAAC,EAAE,GAAE,aAAa,CAAC,qBAAqB,CAAC,EAAE,QAAQ,KAAK,EAAE,IAAI6xB,IAAE,CAAC,WAAW,SAAS,gBAAgB,WAAW,EAAEif,IAAE,CAAC,WAAW,SAAS,aAAa,eAAe,WAAW,UAAU,mBAAmB,aAAa,SAAS,gBAAgB,EAAEH,IAAE,SAAS,EAAE,CAAC,IAAI,EAAEruD,EAAE,EAAE,SAASgvC,EAAE,EAAE,OAAOtxB,EAAE,EAAE,cAAcuxB,EAAE,EAAE,UAAUzpB,EAAE4pB,IAAE,EAAEG,GAAC,EAAEM,EAAE7vC,EAAEsuD,EAAE,SAAS,EAAE,CAAC,OAAkB,OAAO,GAAnB,UAAoB,EAAEze,CAAC,EAAE,GAAG,CAACye,EAAE,GAAG,CAAC,EAAEpf,WAAE,KAAKlvC,CAAC,CAAC,MAAS,CAAC,MAAU,MAAM,iDAAiD,CAAC,CAACwlB,EAAE,OAAOA,EAAE,WAAWA,EAAE,SAAS2oC,IAAE,OAAO3oC,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAIkqB,GAAG,CAAC,EAAE,CAAC,GAAGtxC,GAAE,kBAAkB,KAAK,UAAUonB,CAAC,EAAE,GAAG,OAAgBwpB,IAAT,IAAK,GAAkCtxB,IAAI,EAAEtf,GAAE,sBAAsB,OAAOsf,CAAC,GAAlE,EAAEtf,GAAE,cAAc,OAAO4wC,CAAC,EAAoDC,IAAT,IAAK,KAAQ,EAAE7wC,GAAE,iBAAiB6wC,GAAGqf,EAAEze,EAAEH,CAAC,GAAe,EAAA0nE,EAAA,cAAEvnE,EAAEH,CAAC,CAAC,EAAE72B,GAAE,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,OAAOm2B,EAAE,EAAE,WAAWtxB,EAAE,EAAE,aAAawxB,EAAE,EAAE,SAAS1xB,EAAE,EAAE,QAAQgI,EAAE,EAAE,iBAAiBkqB,EAAE,EAAE,WAAWH,EAAE,EAAE,OAAO12B,EAAE,EAAE,eAAek2C,EAAE3f,IAAE,EAAEof,GAAC,EAAE,OAAO,EAAEO,EAAE,cAA2BqoD,EAAE,cAAc/oD,IAAEpf,GAAE,CAAC,EAAE8f,CAAC,EAAE,CAAC,EAAeqoD,EAAE,cAAc9oD,IAAE,SAAS,KAAK,SAAS,EAAE,CAAc,OAAA8oD,EAAS,cAAcvnE,IAAE,SAAS,KAAK,SAAS,EAAE,CAAC,OAAOse,IAAE,SAAS/e,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,WAAWJ,EAAE,aAAatxB,EAAE,SAASwxB,EAAE,QAAQ1xB,EAAE,iBAAiBgI,EAAE,WAAWkqB,EAAE,OAAOH,EAAE,eAAe12B,CAAC,GAAgBu+F,EAAE,cAAc/oD,IAAEpf,GAAE,CAAC,OAAO,CAAC,EAAE8f,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAE,YAAY,UCY7nH,SAAgBgya,IAASv9d,EAAA,CAKrB,IAAM0b,EAAO1b,EAAM0b,MAAQ,UACrB8hd,EAAex9d,EAAMw9d,cAAgB,GAEvCC,EAWJ,MATA,CAIIA,EAJA/hd,IAAS,OAEL1b,EAAMq8J,QAAU7tB,GAAUpO,KAAOy6J,IAAmBgG,IAGpD7gS,EAAMq8J,QAAU7tB,GAAUpO,KACpB4/J,IACAb,KAGVjjF,SAAC,OAAD,CACIn/L,UAAWm5c,EAAW,CAAE,YAAa,GAAM32K,OAAQi+K,CAAa,GAEhEtsX,UAAAgrG,SAAC+9E,EAAD,CAAiB1W,KAAMk6M,CAAS,EAC9B,EAEd,CCyBA,SAASC,IACLv9b,EAAA,CAEA,OAAQA,EAA6C5lC,UAAYglJ,MACrE,CAEA,SAASo+U,IACLpje,EAAA,CAEA,OAAOA,EAAQipK,QAASrjI,GACpBu9b,IAAcv9b,GAAQA,EAAK5lC,QAAU,CAAC4lC,CAC1C,EACJ,CAEA,SAAgBy9b,GAAqD,CACjE7gd,YAIA8gd,gBACAtje,UACAzG,QACA84X,aACAzuK,WACAsuK,gBACA+tD,cACA9jO,aACAonR,cACArnE,YACAhzP,eACAs6T,qBACAC,mBACA,GAAGlxP,GAAA,CAEH,GAAM,CAAE1vC,YAAa6gS,IAAU,CAAEC,YAAa,MAAO,GAC/CC,KAAc9gR,eAAcsgR,IAAepje,GAAU,CAACA,CAAQ,GAC9Dotb,EAAgB7zb,GAAS,KAE/B,SAASsqe,EAAsBvqe,EAAA,CAC3B,GAAIA,IAAQ,KAAM,CACdsqN,IAAW,MACX,MACJ,CAEA,GAAI,OAAOtqN,GAAQ,SAAU,OAC7B,IAAMwqe,EAAWF,EAAY5sU,KAAM7kE,GAAWA,EAAO54F,QAAUD,GAC3Dwqe,GACAlgR,IAAWkgR,EAEnB,CAEA,IAAMC,GACFpiR,SAACqiR,GAAD,CAASxhd,UAAU,2BACdm0F,SAAA32G,EAAQkS,KAAK0zB,EAAM7kC,IAChBoie,IAAcv9b,IACVwjQ,UAAC66L,IAAD,CAEI/pe,GAAI,WAAW6G,IACfyhB,UAAU,QAHdm0F,SAAA,EAKIgrG,SAACuiR,IAAD,CAAQ1hd,UAAU,gBAAiBm0F,SAAA/wE,EAAKimI,KAAc,GACrDjmI,EAAK5lC,QAAQkS,IAAKigF,IACfwvH,SAACwiR,GAAD,CACI3hd,UAAU,SAEVtoB,GAAIi4F,EAAO54F,MACXq7X,UACI,OAAOziS,EAAO05E,OAAU,SAClB15E,EAAO05E,MACPvL,OAAOnuE,EAAO54F,KAAK,EAE7B,kBAAiB44F,EAAOgkR,UAEvBx/P,SAAA8sX,EACKA,EAAiBtxY,GACjBA,EAAO05E,KACJ,EAZJ15E,EAAO54F,KAYH,EAEL,CAtBP,aAAWwH,GAsBJ,GAEhB4gN,SAACwiR,GAAD,CACI3hd,UAAU,SAEVtoB,GAAI0rC,EAAKrsC,MACTq7X,UACI,OAAOhvV,EAAKimI,OAAU,SAChBjmI,EAAKimI,MACLvL,OAAO16H,EAAKrsC,KAAK,EAE3B,kBAAiBqsC,EAAKuwU,UAErBx/P,SAAA8sX,EAAmBA,EAAiB79b,GAAQA,EAAKimI,KACzC,EAVJjmI,EAAKrsC,KAUD,EAGhB,GAGP6qe,GACFziR,SAAC0iR,GAAD,CACI7hd,UAAWw9J,EAAG,wBAAyBsjT,GACvCj9b,OAAQ,EAEPswE,SAAAuyD,GAGGkgI,UAACk7L,IAAD,CAAc56a,OAAQ2oU,EAAartO,OAAY69C,EAA/ClsF,SAAA,EACIyyL,UAACm7L,IAAD,CACI/hd,UAAU,0BACV,aAAW,SACXy/W,UAAA,GACA1oY,MAAO84X,EACPzuK,SAAUsuK,EALdv7Q,SAAA,EAOIgrG,SAAC,OAAD,CAAMn/L,UAAU,8BAAgC,IAChDm/L,SAAC6iR,IAAD,CACIhid,UAAU,gCACVmvE,MAAO,CACHgtF,SAAU9jB,KAAkB,GAAK7V,MACrC,CACH,IACD28D,SAACg6O,GAAD,CAAQn5a,UAAU,gCACdm0F,UAAAgrG,SAAC+9E,EAAD,CAAiB1W,KAAMuZ,GAAe,gBAAa,EAC/C,EACC,CACZ,GAAAwhM,CACS,CAEd,GAAAA,CAEC,GAGb,OACI36L,UAACq7L,GAAD,CACIjid,UAAWw9J,EAAG,mBAAoBx9J,GAGlCjpB,MAAOA,GAAOA,OAAS,KACvBqqN,SAAUigR,EACG5jD,cACD9jO,aACZ,GAAIo2B,EARR57H,SAAA,EAUIgrG,SAACg6O,GAAD,CACIn5a,UAAWw9J,EAAG,UAAW,CACrB2lC,QAASu2M,CACb,GAEAvlT,UAAAgrG,SAAC+iR,IAAD,CAAalid,UAAU,eACjBm0F,UAAA,CAAE46U,gBAAeryE,qBACXskH,GAAsBjyC,EAAcvwb,SAAW,EACxCwie,EAAmBp2C,GAEvBluE,CAEF,EACT,GACPqkH,GAAehqe,IACZooN,SAACg6O,GAAD,CACIn5a,UAAU,kBACV4zM,KAAM,KACNj1M,KAAK,SACLw+W,YAAe/7K,IAAW,MAC1B,aAAW,iBACd,GAEJwgR,CACG,C,EAEhB,C,s1GCxNaO,GAAb,cAAuCj7B,G,gCAOlCp1U,E,EAAqBswW,gC,GAMrBtwW,E,EAAauwW,mB,GAMbvwW,E,EAAawwW,sB,GAIbxwW,E,EAAaywW,c,GAQbzwW,E,EAAa0wW,kC,GAab1wW,E,EAAa2wW,kC,GAWb3wW,E,EAAa4wW,iB,GAOb5wW,E,EAAa6wW,qB,GAIb7wW,E,EAAa8wW,Y,GAIb9wW,E,EAAa+wW,mC,GAQb/wW,E,EAAagxW,gC,KA7Ed,YAAY37B,EAAoC,GAAI,CAChD,MAAMA,aAENzyQ,EAAe,IAAI,CACvB,CAEA,IAAsB0tS,gCAA2C,CAC7D,OAAOnsU,GACH,KAAKkxS,oBAAoBz3b,IAAKnX,GAASi7K,GAAgBj7K,IAE/D,CAEA,IAAc8pe,mBAA+B,CACzC,OAAO,KAAKD,+BAA+Bl7a,OAAQ80F,GAC/Cy1B,GAAez1B,GAEvB,CAEA,IAAcsmV,sBAAqC,CAC/C,OAAO,KAAKD,kBAAkB3yd,IAAK8rI,GAAYA,EAAQjjJ,IAAI,CAC/D,CAEA,IAAcgqe,cAAwB,CAClC,OAAO,KAAKF,kBAAkB7je,OAAS,CAC3C,CAMA,IAAcgke,kCAAiD,CAC3D,GAAI,CAAC,KAAKI,WAAY,OAAO,KAAKN,qBAClC,IAAMS,EAAkB,KAAKF,kCAC7B,OAAO,KAAKR,kBACPn7a,OAAQs0F,GAAYunV,EAAgB3me,IAAIo/I,EAAQjjJ,IAAI,GACpDmX,IAAK8rI,GAAYA,EAAQjjJ,IAAI,CACtC,CAOA,IAAckqe,kCAAiD,CAC3D,OAAOnsU,IACH,KAAKgsU,qBACL,KAAKE,gCACT,CACJ,CAMA,IAAcE,iBAA2D,CACrE,OAAO,KAAKN,+BAA+Bl7a,OACtC80F,GACG61B,GAAgB71B,IAAWA,EAAOi2B,OAAS,WAEvD,CAEA,IAAc0wT,qBAAoC,CAC9C,OAAO,KAAKD,gBAAgBhzd,IAAKssI,GAAWA,EAAOzjJ,IAAI,CAC3D,CAEA,IAAcqqe,YAAsB,CAChC,OAAO,KAAKF,gBAAgBlke,OAAS,CACzC,CAEA,IAAcqke,mCAAqD,CAC/D,OAAO,IAAItyd,IACP,KAAKmyd,gBAAgBj8T,QAASzqB,GAC1Bu4B,GAAyBv4B,IAGrC,CAEA,IAAc8mV,gCAA+C,CACzD,OAAO1mU,MAAMxnI,KAAK,KAAKiuc,iCAAiC,CAC5D,CACJ,ECtEaG,IAAuB,OACvBC,GAAqB,OAErBC,GAAuB,GACvBC,GAAqB,IAGrBC,GAAoB,GACpBC,IAAsB,GAEtBC,IAA8B,UAE9BC,IAAsB,WACtBC,IAA2B,gBAC3BC,GAAyB,cAKzBC,IAAqB,IAMrBC,GAA2C,CAAC,IAAK,EAAE,EACnDC,GAGT,CACAC,YAAa,CAAC,IAAK,EAAE,EACrBC,WAAY,CAAC,GAAI,EAAE,EACnBC,YAAa,CAAC,IAAK,EAAE,CACzB,EAEaC,IAAwBf,GACxBgB,IAAyB,OAUzBC,GAAmD,CAC5DC,MAAO,QACPC,OAAQ,SACRC,aAAc,gBACdC,aAAc,gBACdC,KAAM,OACNC,OAAQ,SACRC,QAAS,SACb,EAEaC,IAAmBpuU,GAAS4tU,IAmC7BS,GAAL,SAAAA,EAAA,C,MACHA,GAAAC,IAAA,MACAD,EAAAE,MAAA,Q,CACJ,MAkDaC,IAA0D,CACnEN,OAAQ,CAAE5oM,SAAU,CAAC,GAAI,EAAE,EAAGyV,KAAM,IAAK,EACzC+yL,OAAQ,CAAExoM,SAAU,CAAC,GAAI,CAAC,EAAGyV,KAAM,IAAK,EACxCgzL,aAAc,CAAEzoM,SAAU,CAAC,MAAO,EAAE,EAAGyV,KAAM,GAAI,EACjDizL,aAAc,CAAE1oM,SAAU,CAAC,IAAK,GAAG,EAAGyV,KAAM,IAAK,EACjDkzL,KAAM,CAAE3oM,SAAU,CAAC,GAAI,EAAE,EAAGyV,KAAM,IAAK,EACvCozL,QAAS,CAAE7oM,SAAU,CAAC,OAAQ,KAAK,EAAGyV,KAAM,CAAE,CAClD,EAGa0zL,GAAoD,CAC7DZ,MAAO,CAAErme,EAAG,KAAOmwD,EAAG,GAAK6tB,MAAO,IAAMvkB,OAAQ,KAAM6/F,MAAO,GAAI,EACjEotU,OAAQ,CAAE1me,EAAG,IAAMmwD,EAAG,IAAM6tB,MAAO,GAAKvkB,OAAQ,GAAK6/F,MAAO,IAAK,EACjEgtU,OAAQ,CAAEtme,EAAG,IAAMmwD,EAAG,GAAK6tB,MAAO,IAAMvkB,OAAQ,IAAM6/F,MAAO,IAAK,EAClEitU,aAAc,CAAEvme,EAAG,IAAMmwD,EAAG,GAAK6tB,MAAO,IAAMvkB,OAAQ,IAAM6/F,MAAO,IAAK,EACxEktU,aAAc,CAAExme,EAAG,IAAMmwD,EAAG,KAAO6tB,MAAO,GAAKvkB,OAAQ,IAAM6/F,MAAO,GAAK,EACzEmtU,KAAM,CAAEzme,EAAG,IAAMmwD,EAAG,IAAM6tB,MAAO,IAAMvkB,OAAQ,GAAK6/F,MAAO,IAAK,EAChEqtU,QAAS,CAAE3me,EAAG,IAAMmwD,EAAG,IAAM6tB,MAAO,GAAKvkB,OAAQ,GAAK6/F,MAAO,IAAK,CACtE,EChKM4tU,IAAN,KAAwB,CACpB,WAAqC,OACrC,KAA8B,OAC9B,UAAmC,OACnC,cAAoC,OACpC,kBAAmD,OACnD,aAAoC,OACpC,OAAS3qV,GAAc,MAEvB,MAAqB,CACjB,SAAU,GACV,SAAUspV,GACV,MACJ,EAEA,WAAa,IAAIn8L,GAEjB,uBAA8C,OAE9C,aAAc,CACV9yG,EAAe,KAAM,CACjB,WAAYnS,EACZ,KAAMA,EACN,UAAWA,EACX,cAAeA,EACf,kBAAmBA,EACnB,aAAcA,EACd,OAAQA,EACR,MAAOA,EACP,WAAYA,EACZ,uBAAwBA,CAC5B,CAAC,CACL,CACJ,EAEa0iT,GAAb,cAA+BD,GAAyC,CAEpE,UAAY,IAAI7C,GAChB,aAEA,iBAAiB,EAAwC,CACrD7lS,GAAmB,KAAM19L,CAAG,EAE5B,KAAK,KAAO2xK,GAAuC3xK,EAAI,IAAI,EAI3D,IAKI,CAAK,UALLA,EAAI,UACayxK,GACbzxK,EAAI,SACR,EAEiB,KAAK,KAItBA,EAAI,OAAO,WACX,KAAK,MAAQ,CACT,GAAG,KAAK,MACR,SACIA,EAAI,MAAM,SAAS,WAAW,CACtC,GAIAA,EAAI,qBACJ,KAAK,UAAU,oBAAoBA,EAAI,mBAAmB,CAClE,CAEA,UAAkD,CAC9C,IAAMA,EAA0Bq9L,GAA+B,IAAI,EAkCnE,OAjCAS,GAA+B99L,EAAK,IAAIome,GAAmB,EAE3D,CAAcpme,CAAI,OAAO8xK,GAAc,KAAK,IAAI,EAChD,CAAmB9xK,CAAI,YAAY6xK,GAAc,KAAK,SAAS,EAG3D7xK,EAAI,YAAcA,EAAI,MAAM,OAAOA,EAAI,UAG3C,EAAI,oBAAsB,KAAK,UAAU,oBAGpCA,EAAI,OAAO,UAAU,OAAOA,EAAI,MAGjCA,EAAI,OAAO,WACX,EAAI,MAAQ,CACR,GAAGA,EAAI,MACP,SAAU,CAENsme,GAAQtme,EAAI,MAAM,SAAS,GAAI,CAAC,EAChCsme,GAAQtme,EAAI,MAAM,SAAS,GAAI,CAAC,CACpC,CACJ,GAGAA,EAAI,OAAO,OACX,EAAI,MAAQ,CACR,GAAGA,EAAI,MACP,KAAMsme,GAAQtme,EAAI,MAAM,KAAM,CAAC,CACnC,GAGG45J,GAAW55J,CAAG,CACzB,CAEA,YAAY,EAAmC,CAC3C,MAAM,EACN81L,EAAe,KAAM,CACjB,UAAWnS,EACX,aAAcA,CAClB,CAAC,EACG3jL,GAAK,KAAK,iBAAiBA,CAAG,CACtC,CAEA,mBAA0D,CACtD,OAAO,KAAK,SAAWy7I,GAAc,KACzC,CAEA,qBAA4D,CACxD,OAAO,KAAK,kBAAkB,GAAK,CAAC,KAAK,MAAM,QACnD,CACJ,ECxHa8qV,GAAoD,CAE7D,UAAW,YACX,WAAY,aACZ,aAAc,gBACd,oBAAqB,mCAGrB,IAAK,oCACL,GAAI,qBACJ,IAAK,8BACL,GAAI,yBACJ,OAAQ,6BACR,OAAQ,2CACR,IAAK,sCACL,GAAI,2BACJ,MAAO,gBACP,SAAU,oCACV,IAAK,oCACL,IAAK,4CACL,IAAK,4CACL,SAAU,wCACV,KAAM,wCAGN,KAAM,iCACN,IAAK,cACL,IAAK,gCACL,MAAO,gBACP,OAAQ,iBACR,OAAQ,iBACR,KAAM,mCACN,KAAM,cACV,EAEMC,IAAoB,IAAI,IAAY,OAAO,KAAKD,EAAiB,CAAC,EAClEE,IAAqB,IAAI,IAAY,CACvC,GAAG5yT,IAAoB,EACvB,GAAG8tR,GACP,CAAC,EASK+kC,IAAwB,IAAI,IAC9B,CAAC,GAAGD,GAAkB,CAAC,CAAC,IAAK,GAAQ,CACjCzyT,IAAqB97K,CAAG,EACxBA,CACJ,CAAC,CACL,EAEA,SAAgByue,IACZ,EACa,CAEb,IAAM1c,EAAuB9gB,EAAY,OACpC,GAAe,CAAC7H,GAAkBC,CAAU,CACjD,EAQMqlC,EAAuBn2Q,GALJp5D,GACrB4yT,EAAqB,IAAK,GAAer1S,GAAgB2sR,CAAU,CAAC,CAKpE,EACC,GAAMvyY,EAAE,UACb,EAEM63a,EAAuC,CAAC,EAGxC,CAACC,EAAqBC,GAA0BC,GAClDJ,EAAqB,SAAW,CAAC,EAChC,GAAY,CAAC,CAAEhqV,EAAoB,YACxC,EAqBA,GAlBImqV,EAAuB,OAAS,GAChCF,EAAsB,KAAK,CACvB,eAAgB,YAChB,YAAaE,EAAuB,IAAK,GAAW3pV,EAAO,IAAI,CACnE,CAAC,EAIDwpV,EAAqB,WACrBC,EAAsB,KAAK,CACvB,eAAgB,aAChB,YAAaD,EAAqB,UAAU,IACvC,GAAWxpV,EAAO,IACvB,CACJ,CAAC,EAIDwpV,EAAqB,aAAc,CAInC,IAAMK,EAAehd,EAAqB,OACrC,GACG1oB,EAAW,SAAS,kBAAkB,GAEtCA,EAAW,SAAS,cAAc,CAC1C,EAEAslC,EAAsB,KAAK,CACvB,eAAgB,eAChB,YAAaI,CACjB,CAAC,CACL,CAEA,IAAMC,EAAsBC,IACxBld,EACC,GAAemd,GAAW7lC,CAAU,CAAC,CAAC,YAC3C,EAEA,IAAK,GAAM,CAAC8lC,EAAWl+B,KAAgBm+B,IAAUJ,CAAmB,EAChEL,EAAsB,KAAK,CAAE,eAAgBQ,EAAW,aAAY,CAAC,EAWzE,OAPIP,EAAoB,OAAS,GAC7BD,EAAsB,KAAK,CACvB,eAAgB,sBAChB,YAAaC,EAAoB,IAAK,GAAW1pV,EAAO,IAAI,CAChE,CAAC,EAGEypV,CACX,CASA,SAAgBO,GAAW,EAA0B,CACjD,IAAMt1X,EAASgiE,IAAsB4qD,CAAG,EACxC,GAAI,CAAC5sH,EAAQ,MAAO,CAAE,MAAK,KAAM4sH,CAAI,EAErC,GAAM,CAAE,OAAM,UAAW5sH,EACnBy1X,EAAeb,IAAsB,IAAI1yT,IAAqB9xH,CAAM,CAAC,EAG3E,OAFKqlb,EAEE,CAAE,MAAK,OAAM,SAAQ,cAAa,EAFf,CAAE,MAAK,OAAM,QAAO,CAGlD,CAEA,SAAgBC,IACZ,EAC+B,CAC/B,OAAOf,IAAmB,IAAI79c,CAAS,CAC3C,CAEA,SAAgB6+c,IACZ,EAC2B,CAC3B,OAAOjB,IAAkB,IAAI59c,CAAS,CAC1C,CC7LA,IAAau6c,KAAc/nC,gBAWzB,SACE,CAAEh6a,YAAWjpB,QAAO0mb,cAAa9pE,YAAWvyJ,WAAU2rO,UAASn/D,aAC/Dp8V,EAAA,CAEA,OACIo1Q,UAAC,MAAD,CACI5mR,UAAWw9J,EAAGx9J,EAAW,uBAAwB,CAC7C,8BAA+B,CAACjpB,CACpC,GAHJo9G,SAAA,EAKIgrG,SAAC+9E,EAAD,CAAiBl9Q,UAAU,cAAcwmQ,KAAMkY,EAAoB,IACnEv/E,SAAC,QAAD,CACS3tL,MACL7S,KAAK,SACE5nB,QACPqqN,SAAW7iM,GAAU6iM,EAAS7iM,EAAMs3L,cAAc9+M,KAAK,EACvD62X,UAAYrvW,GAAUqvW,IAAYrvW,EAAMkxN,WAAW,EACnD,kBAAiBkkI,EACjB,aAAY8pE,EAEZtuV,MAAO,CAAEgtF,SAAU9jB,KAAkB,GAAK7V,MAAU,CACvD,GAMA,CAACzrJ,IACEooN,SAAC,OAAD,CAAMn/L,UAAU,qBAAsBm0F,SAAAspU,CAAkB,GAE3D1mb,IACGooN,SAAC,SAAD,CACIxgM,KAAK,SACLqB,UAAU,QACVu0V,YAAew4E,IAEf54U,UAAAgrG,SAAC+9E,EAAD,CAAiB1W,KAAMsZ,EAAgB,EACnC,EAEX,C,EAEb,GC/CA,SAAgBwmM,IAAmB,EAAyB,CACxD,MAAO,WAAWxve,EAAI,MAC1B,CAGA,IAAMyve,IAAqD,CACvD,WAAY,6BACZ,IAAK,eACL,UAAW,4BACf,EAGaC,GACT,CACI,WAAY,CACR,KAAM,qBACN,KAAM,aACN,KAAM9hV,GAAgB,OAC1B,EACA,IAAK,CACD,KAAM,cACN,KAAM,iBACN,KAAMA,GAAgB,QACtB,UAAW,GACf,CACJ,EAGJ,SAAS+hV,IACL,EACA,CAAE,UAAS,YACL,CAGN,OAAOr/T,GAAiBC,EAAU,CAC9B,KAHai/T,IAAmBxve,CAG1B,EACN,SAAU,GAHSm7W,EAAQ,gCAAgCs0H,IAAazve,IAI5E,CAAC,CACL,CAGA,eAAe4ve,IACX,EACA,EAC6B,CAE7B,OAAO3tU,GADK0tU,IAAkB3ve,EAAK0G,CAClB,CAAG,CACxB,CAEA,IAAampe,GAAkBC,GAAUF,KAAmB,EAAK,IAC7DD,IAAkB3ve,EAAK0G,CAAO,CAClC,EC9Daqpe,GAAsC,CAC/C,CACI,WAAY,aACZ,KAAML,GAAuBM,WAAc,KAC3C,MAAO,YACX,EACA,CACI,WAAY,MACZ,KAAMN,GAAuBO,IAAO,KACpC,MAAO,yBACX,CACJ,E,80GCiLoC/rR,eAV9BgsR,IAAiB,IAAIz2d,IAAI+gK,GAAQ5hK,IAAKssI,GAAWA,EAAOzjJ,IAAI,GAU9ByiN,KAAMpoG,U,QAAnC,cAA6BooG,G,uCADnC5zH,C,KA+DI4uB,IAAOo6D,K,KAAcl0K,K,IAyFrB85G,IAAOo6D,K,KAAY62T,uB,GAwDnBn1W,E,EAAqBo1W,e,GAOrBp1W,E,EAAqB29V,mB,GA2GrB39V,E,EAAqBq1W,uB,GAmDrBr1W,E,EAAqBpiC,S,GAIrBoiC,E,EAAqBl6F,S,GAIrBk6F,E,EAAqBs1W,W,GAQrBt1W,E,EAAqB80B,O,GAUrB90B,E,EAAqBu1W,6B,GAYrBv1W,E,EAAqBw1W,a,GAIrBx1W,E,EAAaokW,Y,GAgBbpkW,E,EAAqBy1W,c,GAQrBz1W,E,EAAqB01W,kB,GAIrB11W,E,EAAqB21W,+B,GAMrB31W,E,EACW41W,wC,GAOX51W,E,EAAqB61W,yB,GAIrB71W,E,EAAqB81W,6B,GAOrB91W,E,EAAqB+1W,Y,GAIrB/1W,E,EAAqBsR,O,GAIrBtR,E,EAAqBg2W,wB,GAOrBh2W,E,EAAqBi2W,+B,GAUrBj2W,E,EAAqBk2W,qC,GAUrBl2W,E,EAAqBm2W,uB,GAmBrBn2W,E,EACWo2W,iC,GAeXp2W,E,EACWq2W,kC,GAWXr2W,E,EAAqBs2W,oC,GA2ErBt2W,E,EAAau2W,a,GAgHbv2W,E,EAAaw2W,W,GAYbx2W,E,EAAqBy2W,gB,GAIrBz2W,E,EAAqBkhW,Y,GAqBrBlhW,E,EAAqB02W,gB,GAMrB12W,E,EAAqB22W,qB,GAOrB32W,E,EAAqB+2V,sB,GAIrB/2V,E,EAAqBg3V,wB,GAIrBh3V,E,EAAqB42W,mB,GAwDrB52W,E,EAAqB62W,2B,GA0GrB72W,E,EAAa82W,a,GAIb92W,E,EAAa+2W,O,GAQb/2W,E,EAAag3W,e,GAKbh3W,E,EAAai3W,kB,IAOb/yX,IAAOo6D,K,KAAMypR,c,IAKb7jV,IAAOo6D,K,KAAM44T,iB,IAQbhzX,IAAOo6D,K,KAAM64T,oB,IAObjzX,IAAOo6D,K,KAAMgxC,U,IA+BbprG,IAAOo6D,K,KAAM28Q,S,IAWb/2U,IAAOo6D,K,KAAY84T,8B,IA8BnBlzX,IAAOo6D,K,KAAY+4T,kB,IA4BnBnzX,IAAOo6D,K,KAAMg5T,mB,IAKbpzX,IAAOo6D,K,KAAc65C,O,GAKrBn4F,E,EAAau3W,e,IAuBbrzX,IAAOo6D,K,KAAck5T,sB,GAWrBx3W,E,EAAqBy3W,a,GAQrBz3W,E,EAAa03W,qB,GA6Hb13W,E,EAAqB23W,oB,GAMrB33W,E,EAAqB43W,4B,GAWrB53W,E,EAAqB63W,U,CA9wCU3uR,e,CAYhC,YAAY/3M,EAA4B,CACpC,MAAMA,GACNyxL,EAAe,IAAI,CACvB,CAdAk1S,+BAAsB5uR,EAAMk8Q,UAAA,GAC5B2S,eAAiB7uR,EAAMk8Q,UAAA,EACvB4S,WAAa9uR,EAAMk8Q,UAAA,EAEnB6S,iBAAgD,CAC5ChkV,KAAM,KAAK3iB,MAAM4rU,eACjB1vS,MAAO7tB,GAAU8tB,GACrB,EAEAyqU,UAAkD,GAOlD7S,mBAAmC,CAC/B,KAAU8P,sBAAA,EAEN,KAAKhke,MAAMw8X,WAAa,CAACpnO,MACzB,KAAKwxU,eAAe7ue,SAASygJ,QAGjC,KAAKuuV,UAAUxqe,KACX0wL,OACU,KAAKo3S,gBAAA,CAEH,KAAKsC,oBAAoB5ue,UACzB,KAAK4ue,oBAAoB5ue,QAAQkjK,UAAY,EACrD,IAMR,KAAK8rU,UAAUxqe,KACXm0L,QACU,CAAC,CAAC,KAAKjkG,QAAQv3C,YACf,KAAK8xb,eAAA,IAMnB,KAAKD,UAAUxqe,KACX0wL,QACW,CACHulR,MAAO,KAAK4yB,YAAY34d,IAAKigF,GAAWA,EAAOo2D,IAAI,EACnD5tG,QAAS,KAAKu3C,QAAQv3C,OAC1B,OACM,KAAK+xb,6CAAA,EACX,CAAE7/S,OAAQj3D,GAAS+2W,UAAW,GAG1C,CAEA/S,sBAAsC,CAC9B,KAAK79T,WAAWK,aAAa,KAAKL,SAAS,EAC/C,KAAKywU,UAAUx5d,QAAS+9K,GAAYA,IACxC,CAEsBryL,IAAIwpP,EAA8C,CACpE,IAAM0kP,EAAiB,CAAE,GAAG1kP,CAAS,EAErC,GAAIA,EAASwwO,aAAe1zU,OAAW,CACnC,IAAM6nV,EAAsB,CAAE,GAAG3kP,EAASwwO,UAAW,EAE/CoU,EACF5kP,EAASwwO,WAAWnwU,OAAS,KAAK3iB,MAAM4rU,eAGxCs7B,GAAwB,CAAC,KAAK/B,iBAC9B8B,EAAoB/qU,MAAQ7tB,GAAU8tB,KAItC,CAAC+qU,GAAwB,KAAK/B,iBAC9B8B,EAAoB/qU,MAAQ7tB,GAAUpO,MAG1C+mW,EAAelU,WAAamU,CAChC,CAEA,KAAK36Y,QAAQ66Y,oBAAsB,CAC/B,GAAG,KAAK76Y,QAAQ66Y,oBAChB,GAAGH,CACP,CACJ,CAEAI,sBAAmC,CAC/B,IAAMC,EAA4B,KAAKpC,YAAYnhb,OAC9CyoC,GAAWA,EAAOhxE,OAAS,mBAIhC,GAAI8rd,EAA0Bjse,SAAW,EAAG,CACxC,GAAM,CAAEunJ,QAAS0kV,EAA0B,GAE3C,OADA,KAAKC,gCAAgC3kV,GAC9B,CAAEA,OAAMuZ,MAAO7tB,GAAUpO,IAAK,CACzC,CAEA,OAAO,KAAK0mW,gBAChB,CAEAG,8CAA+C,CAGtC,KAAKx6Y,QAAQv3C,SACb,KAAKu3C,QAAQi7Y,kBAAkBnse,SAK/B,KAAK6pe,YAAY9yW,KACb5lC,GAAWA,EAAOo2D,OAAS,KAAKmwU,WAAWnwU,IAChD,GAEA,KAAK7pJ,IAAI,CAAEg6d,WAAY,KAAKsU,qBAAA,CAAuB,GAE3D,CAEAP,gBAAuB,CACnB,KAAK/te,IAAI,CAAEg6d,WAAY,KAAKsU,qBAAA,CAAuB,EACvD,CAEAI,4BAAmC,CAC/B,GAAM,CAAEC,iBAAkB,KAAKn7Y,QACzBo7Y,EAAW,KAAK5U,WAAWnwU,KAI5B8kV,GACA,KAAKpD,8BAA8BoD,KAIpCC,IAAaD,EAIb,KAAKE,0BACD,KAAKC,sBAAsBH,IAI/B,OAAO,KAAKn7Y,QAAQ66Y,oBACf9C,gCAAgCoD,GAE7C,CAEA,MAAoB5D,uBAAuC,CACvD,GAAI,CACA,IAAMgE,EAAmB,MAAMpxU,KAC/B,GAAI,CAACoxU,EAAkB,OAEvB,IAAMC,EAAoCD,EAAiB35T,QACrD25T,EAAiB35T,QAAQpqH,OACpB80F,GAAW,CAAC81B,IAA2B91B,IAE5C,GAEAmvV,EAAkB,CACpBF,EAAiBh5T,KACdi5T,IACP,EAUM1D,EAJoBh5b,GAJN8iI,GAAQpqH,OAAQ80F,GAChCmvV,EAAgBv5W,SAASoqB,EAAOi2B,IAAI,CAGLm5T,EAAcpvV,GAC7CmvV,EAAgB7re,QAAQ08I,EAAOi2B,IAAI,CAGdo5T,EAAkB37d,IACtCssI,GAAWA,EAAOzjJ,IACvB,EAEIive,GAAkB,KAAKtre,IAAI,CAAEsre,kBAAiB,EACtD,MAAQ,CAER,CACJ,CAEAuD,0BAAkC39Z,EAA0B,CACxD,KAAKlxE,IAAI,CACLure,8BAA+B,CAC3B,GAAG,KAAKA,+BACPr6Z,EAAO24E,MAAO34E,CACnB,CACJ,EACJ,CAEAk+Z,uBACIvlV,EACAwlV,EACI,CACJ,GAAM,CAAE7D,0CAA2C,KACnDA,EAAuCxre,IACnC6pJ,EACAwlV,GAEJ,KAAKrve,IAAI,CAAEwre,wCAAuC,EACtD,CAGA,IAAsBR,eAAyB,CAC3C,MACI,CAAC,CAAC,KAAKx3Y,QAAQ87Y,gBACf,KAAK97Y,QAAQ+7Y,cAAgBjpV,MAErC,CAEA,IAAsBitU,mBAGpB,CAaE,OAVI,KAAKyX,cAAsB,CAAEnwe,MAAOq8I,GAAS,EAU1C,CAAEr8I,MAPS,KAAK24F,QAAQg8Y,WACzB,KAAKtE,UAAUuE,cACfnpV,OAKqB16G,SAJD,KAAK4nD,QAAQg8Y,WACjC,KAAKtE,UAAU18B,kBACfloT,MAEiD,CAC3D,CAEAwoV,sBAA8BjlV,EAA8B,CACxD,OAAO,KAAK8hV,WACPtY,+BAA+BxpU,EAAM,CAClC0pU,kBAAmB,KAAKA,kBAAkB14d,MAC1Cy4d,0BAA2B,KAAKC,kBAAkB3nb,QACtD,GACC3rC,IAAI4pJ,EACb,CAEA6lV,iCACI/tY,EACS,CACT,GAAM,CAAE82X,gBAAeD,kBAAmB72X,EAc1C,OAAO42X,GAXO,KAAKrxV,MACdmsV,+BAA+BmF,EAAgB,CAC5CjF,kBAAmB,KAAKA,kBAAkB14d,MAC1Cy4d,0BAA2B,KAAKC,kBAAkB3nb,QACtD,GACCynb,+BAA+BoF,EAAe,CAC3ClF,kBAAmB,KAAKA,kBAAkB14d,MAC1Cy4d,0BAA2B,KAAKC,kBAAkB3nb,QACtD,CAGyCs7F,EAAOvlC,EAAM,CACtDs3X,4BAA6B,EACjC,EACJ,CAEAuV,gCAAwC3kV,EAAwB,CAC5D,GAAI,KAAK0hV,8BAA8B1hV,GAAO,OAI9C,IAAM8lV,EAAiB,KAAKzD,mCAAmCjse,IAAI4pJ,GACnE,GAAI8lV,EAAgB,CAChB,IAAMzoW,EAAQ,KAAKwoW,iCAAiCC,GAE9CC,EAAiB1oW,EAAMjnI,IAAI0ve,EAAejX,YAAY,EACtDmX,EAAqB3oW,EAAMjnI,IAC7B0ve,EAAehX,yBACnB,EAAEpoB,yBAEF,KAAKs+B,0BAA0Be,GAC/B,KAAKR,uBACDO,EAAejX,aACfmX,GAGJ,MACJ,CAEA,IAAM3+Z,EAAS,KAAK49Z,sBAAsBjlV,GAC1C,KAAKglV,0BAA0B39Z,EACnC,CAEA4+Z,kBAAiC,CAC7B,KAAK9ve,IAAI,CAAEore,YAAa,EAAG,EAC/B,CAEA2E,mBAAkC,CAC9B,KAAK/ve,IAAI,CAAEqre,aAAc/kV,MAAU,EACvC,CAEA0pV,eAAuBhmB,EAAqB,CACxC,KAAKhqd,IAAI,CACLg6d,WAAY,CACRnwU,KAAMmgU,EACN5mT,MAAO,KAAK42T,WAAW52T,KAC3B,CACJ,EACJ,CAEA6sU,iBAA0B,CACtB,IAAMvxB,EACF,KAAKsb,WAAW52T,QAAU7tB,GAAU8tB,IAC9B9tB,GAAUpO,KACVoO,GAAU8tB,IACpB,KAAKrjK,IAAI,CACLg6d,WAAY,CACRnwU,KAAM,KAAKmwU,WAAWnwU,KACtBuZ,MAAOs7S,CACX,CACJ,EACJ,CAEA,IAAsBusB,uBAAiC,CACnD,OAAO,KAAKc,sBAAsB1yW,KAAMnoD,GACpC8mF,GAAY9mF,EAAO4mF,YAAY,EAEvC,CAEAo4U,oBAA4BrmV,EAA2B,CACnD,OAAO,KAAKoiV,iCAAiC5yW,KACxC82W,GAAatmV,IAASsmV,EAAStmV,IACpC,CACJ,CAOAumV,2BAAmC9kc,EAAY4lC,EAA0B,CAOrE,OAHmB,KAAKg/Z,oBAAoBh/Z,EAAO24E,IAC/CwmV,EAAmBn/Z,EAAOojG,SAAWhpI,EAElCA,CACX,CAEAglc,uBAA+Bhlc,EAAY4lC,EAA0B,CACjE,IAAMq/Z,EAAa,KAAKH,2BAA2B9kc,EAAM4lC,GAYzD,OATmB,KAAKg/Z,oBAAoBh/Z,EAAO24E,IAC/CwmV,EAAmBE,EAInB,KAAKtF,uBAAyB,CAACjzU,GAAY9mF,EAAO4mF,YAAY,EACvDd,GAA4Bu5U,GAAYnwV,KAAA,EAG5CmwV,CACX,CAEAC,6BACIllc,EACA4lC,EACM,CACN,IAAMu/Z,EAAY,KAAKH,uBAAuBhlc,EAAM4lC,GACpD,OAAOA,EAAOkgY,WAAWq/B,EAC7B,CAEA,IAAsBj9Y,SAAiC,CACnD,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAsB93D,SAAgB,CAClC,OAAO,KAAK83D,QAAQ93D,SAAW,KAAKwrG,MAAMotC,OAC9C,CAEA,IAAsB42T,WAAuB,CACzC,OAAO,KAAK13Y,QAAQ03Y,WAAa,IAAInC,EACzC,CAEA2H,cAAsBzsC,EAAiC,CACnD,OAAO,KAAKzwW,QAAQm9Y,0BAA0B1sC,IAAe,EACjE,CAEA,IAAsBv5S,OAAgB,CAClC,OAAO,KAAKl3D,QAAQg8Y,YAEd,KAAKh8Y,QAAQo9Y,qBADb,UAAU,KAAK9Z,WAAWwH,SAGxB,KAAK9qY,QAAQq9Y,gBACX,aAAU9vd,YAAE,KAAK+1c,WAAWga,QAAQ,IACpC,cAAc,KAAKha,WAAWwH,QAC5C,CAEA,IAAsB6M,6BAAsC,CAGxD,OAFIjB,IAAqB,KAAKmB,YAAY,EAAU,SAE7Cpye,GAAM,KAAKoye,YAAY,EACzB/jU,KAAK,UAAa,KAAKwvT,WAAWga,QAAQ,EAC1CxpU,KAAK,gBAAmB,WACxBA,KAAK,iBAAoB,aACzBA,KAAK,mBAAsB,gBAC3BA,KAAK,0BAA6B,qBAClCE,WAAA,CACT,CAEA,IAAsB4jU,aAAsB,CACxC,OAAO,KAAK53Y,QAAQ66Y,oBAAoBjD,aAAe,EAC3D,CAEA,IAAcpR,YAAyB,CACnC,OACI,KAAKxmY,QAAQ66Y,oBAAoBrU,YAAc,KAAK6T,gBAE5D,CAEAkD,gBAAgBlnV,EAA2B,CACvC,OAAO,KAAKsiV,YAAY9yW,KAAM5lC,GAAWA,EAAO54F,QAAUgvJ,EAC9D,CAEAmnV,oBAAoB3F,EAAqC,CACrD,OAAO,KAAK8B,cAAc9zW,KACrB5lC,GAAWA,EAAO54F,QAAUwwe,EAErC,CAEA,IAAsBA,cAA6B,CAC/C,OACI,KAAK73Y,QAAQ66Y,oBAAoBhD,cACjC,KAAK8B,cAAc,EAAE,EAAEtye,OACvB,KAER,CAEA,IAAsBywe,kBAAyC,CAC3D,OAAO,KAAK93Y,QAAQ66Y,oBAAoB/C,gBAC5C,CAEA,IAAsBC,+BAAkD,CACpE,OACI,KAAK/3Y,QAAQ66Y,oBAAoB9C,+BAAiC,CAAC,CAE3E,CAEA,IACYC,wCAAmF,CAC3F,OACI,KAAKh4Y,QAAQ66Y,oBACR7C,wCAA0C,IAAIn4d,GAE3D,CAEA,IAAsBo4d,yBAAwC,CAC1D,OAAOjyV,OAAOlwH,OAAO,KAAKiid,6BAA6B,CAC3D,CAEA,IAAsBG,6BAAuC,CACzD,OACI,KAAKl4Y,QAAQ66Y,oBAAoB3C,6BACjC,EAER,CAEA,IAAsBC,YAAwB,CAC1C,OAAO,KAAKn4Y,QAAQ0zC,KACxB,CAEA,IAAsBA,OAAmB,CACrC,OAAO,KAAK1zC,QAAQy9Y,iBACxB,CAEA,IAAsBrF,wBAAkC,CAEpD,OADK,KAAKC,8BACH,KAAKW,kBAAkBnzW,KAAM48C,GAChCN,GAAgBM,EAAOi7T,UAAU,GAFW,EAIpD,CAEA,IAAsBrF,+BAAyC,CAI3D,OAAO,KAAKlf,qBAAqBtzV,KAC5B4qU,GACG6mC,IAAe5qe,IAAI+jc,IAAe,CAACD,GAAkBC,GAEjE,CAEA,IAAsB6nC,qCAA+C,CAOjE,OAJK,KAAKt4Y,QAAQ29Y,uBAIX,KAAKtF,8BAJqC,EAKrD,CAEA,IAAsBE,uBAAsC,CACxD,GAAM,CACF0C,mBAAmB,GACnBE,gBACAa,cACA,KAAKh8Y,QAIT,OAFoBg8Y,EAAa,CAACb,CAAa,EAAIF,GAG9Cj7d,IAAKq2I,GAAS,KAAK3iB,MAAMjnI,IAAI4pJ,IAC7B7+F,OAAQkmB,GAAWA,EAAOo9X,mBAAmB,CACtD,CAOA,IACY09B,iCAEV,CACE,IAAMoF,EACF,CAAC,EACL,IAAK,IAAMjB,KAAYxF,GAAqC,CACxD,IAAM0G,EAAiB,KAAKtF,sBAAsBzzU,KAAMpnF,GACpDoga,IAA6BnB,EAASoB,WAAYrga,IAElDmga,IACAD,EAAgBjB,EAASoB,YAAcF,EAC/C,CACA,OAAOD,CACX,CAEA,IACYnF,kCAAsE,CAC9E,GAAI,CAAC,KAAKH,oCAAqC,MAAO,GAItD,IAAM0F,EAAeh4V,OAAOn6I,KAAK,KAAK2se,+BAA+B,EACrE,OAAOrB,GAAoC3/a,OACtCmlb,GAAa,CAACqB,EAAa97W,SAASy6W,EAASoB,UAAU,EAEhE,CAEA,IAAsBrF,oCAGpB,CACE,GAAI,CAAC,KAAK14Y,QAAQi+Y,2BAA4B,OAAO,IAAIp+d,IAEzD,IAAM64d,EAGF,IAAI74d,IAER,IAAK,IAAMsuF,KAAQ,KAAKnO,QAAQi+Y,2BAA2Bnod,OAAA,EACvD4id,EAAmClse,IAAI2hG,EAAK+2X,aAAc/2X,GAG9D,OAAOuqY,CACX,CAEAwF,uCACI7nV,EACAv+G,EACc,CACd,IAAMqmc,EACF,KAAKnG,uCAAuCvre,IAAI4pJ,GAMpD,OAHK8nV,GAEUA,EAAgC1xe,IAAIqrC,IAAOhiB,UAAY,IACxD+vG,KAAMm+M,GAAiB,CAACA,GAHO,IAIjD,CAEAo6J,qCACIjwY,EACAr2D,EACM,CACN,GAAM,CAAE47F,QAAOskW,0CAA2C,KAEpDqG,EAAiBC,GACnB5qW,EAAMjnI,IAAI0hG,EAAK82X,aAAa,GAE1BsZ,EAAkBD,GACpB5qW,EAAMjnI,IAAI0hG,EAAK62X,cAAc,GAG3BwZ,EACF,KAAKN,uCAAuC/vY,EAAK+2X,aAAcptb,GAOnE,GAAI0mc,IAA6B,KAAM,CACnC,IAAMC,EAAgBzG,EACjBnse,KAAA,EACAmT,KAAA,EAAO3X,MAWZ,OATIo3e,GAEI,KAAKP,uCACDO,EACA3mc,CAED4mc,EAAsBH,EAG1BF,CACX,CAIA,OAAOG,EAA2BD,EAAkBF,CACxD,CAEA,IAAc1F,aAAoC,CAC9C,IAAI7qe,EAAgC,GAGpCA,EAAQgC,KAAK,CACTmf,KAAM,OACN5nB,MAAO,KAAKqsI,MAAM4rU,eAClBjpT,KAAM,KAAK3iB,MAAM4rU,eACjB3lS,MAAO,MACX,GAGI,KAAK2+T,qCACLnB,GAAoCr2d,QAAS67d,IAGzC,IAAMgC,EACF,KAAKnG,gCAAgCmE,EAASoB,YAElD,GAAIY,EACA7we,EAAQgC,KAAK,CACTmf,KAAM,kBACN5nB,MAAOs3e,EAAYtoV,KACnBA,KAAMsoV,EAAYtoV,KAClBsjB,MAAO2kU,GAA2BK,GAClCC,cAAe,KAAK5B,6BAChB,KAAK90c,QACLy2c,EAER,OACG,CACH,IAAMjha,EACF,KAAKq6Z,8BAA8B4E,EAAStmV,MAChDvoJ,EAAQgC,KAAK,CACTmf,KAAM,qBACN5nB,MAAOs1e,EAAStmV,KAChBA,KAAMsmV,EAAStmV,KACfsjB,MAAOgjU,EAAShjU,MAChBilU,cAAelha,EACT,KAAKs/Z,6BACD,KAAK90c,QACLw1C,GAEJo1E,MACV,EACJ,CACJ,GAMJ,IAAM+rV,EAAgB74V,OAAOlwH,OACzB,KAAK0id,+BACT,EAAEx4d,IAAK09D,GAAWA,EAAO24E,IAAI,EACvB8U,EAAU,KAAKotU,sBAAsB/gb,OACtCkmB,GAAW,CAACmha,EAAc38W,SAASxkD,EAAO24E,IAAI,GAK7CyoV,EAAkC,IAAIj+d,IAE5C,IAAK,IAAM68D,KAAUytF,EAAS,CAG1B,IAAMyzU,EAAgB,KAAKpH,cACrB1kV,OACA,KAAKkqV,6BAA6B,KAAK90c,QAASw1C,GAEhDy+Z,EAAiB,KAAKn8Y,QAAQi+Y,4BAA4Bxxe,IAC5DixE,EAAO24E,IACX,EAGA,GAAI8lV,EAAgB,CAChB,IAAMrkc,EAAO,KAAK8kc,2BACd,KAAK10c,QACLw1C,GAEEi8F,EAAQ,KAAKykU,qCACfjC,EACArkc,GAGJhqC,EAAQgC,KAAK,CACTmf,KAAM,kBACN5nB,MAAO80e,EAAejX,aACtB7uU,KAAM8lV,EAAejX,aACrBvrT,QACAilU,eACJ,GAIAE,EAAe79d,IAAIk7d,EAAenX,cAAc,CACpD,MACIl3d,EAAQgC,KAAK,CACTmf,KAAM,kBACN5nB,MAAOq2E,EAAO24E,KACdA,KAAM34E,EAAO24E,KACbsjB,MAAO2kU,GAA2B5ga,GAClCkha,eACJ,EAER,CAIA,MAFA9we,GAAUA,EAAQ0pD,OAAQyoC,GAAW,CAAC6+Y,EAAepye,IAAIuzF,EAAO54F,KAAK,GAE9DyG,CACX,CAEA,IAAc8qe,WAAuC,CACjD,OACI,KAAKD,YAAY7zU,KACZ7kE,GAAWA,EAAOo2D,OAAS,KAAKmwU,WAAWnwU,IAChD,GAAK,IAEb,CAEA0oV,iBAAyB1oV,EAA2B,CAChD,OAAOA,IAAS,KAAK3iB,MAAM4rU,cAC/B,CAEA,IAAsBu5B,gBAA0B,CAC5C,OAAO,KAAKkG,iBAAiB,KAAKvY,WAAWnwU,IAAI,CACrD,CAEA,IAAsBitU,YAAmD,CAarE,OAXI,KAAKtjY,QAAQg8Y,YACZ,CAAC,KAAKh8Y,QAAQsjY,YAAc,KAAK+U,8BAG3B,KAAKD,uBACN,CACIkF,SAAU,oBACVxS,OAAQ,uBACZ,EACA,CAAEwS,SAAU,UAAWxS,OAAQ,WAAY,EAE9C,CACHwS,SAAU,KAAKt9Y,QAAQsjY,gCACvBwH,OACI,KAAK9qY,QAAQg/Y,yCAErB,CACJ,CAEA,IAAsBlG,gBAAiC,CACnD,OAAOzV,GACH,KAAK9vd,MAAM6pF,WAAa,KAAK4C,QAAQ5C,SACzC,CACJ,CAEA,IAAsB27Y,qBAA+B,CACjD,OACI,KAAKD,eAAenhC,sBACpB,KAAKwhB,qBAAqBrqd,MAElC,CAEA,IAAsBqqd,sBAAiC,CACnD,OAAO,KAAKzlV,MAAMylV,oBACtB,CAEA,IAAsBC,wBAAsC,CACxD,OAAO,KAAK1lV,MAAM0lV,sBACtB,CAEA,IAAsB4f,mBAAwC,CAC1D,IAAMiG,EAAQjnU,KAEd,OAAO,KAAKmhT,qBAAqBn5c,IAAKywb,IAClC,IAAMyuC,EAAqC,CACvCr2e,KAAM4nc,EACN0uC,iBAAkB,CAAC,EACnBC,iBAAkBj6T,GAA0BsrR,EAAYwuC,GACxDvB,WAAY55T,GAAgB2sR,EAChC,EAEI,KAAKqnC,mBACLoH,EAAiBG,QACb,KAAKvH,iBAAiB51W,SAASuuU,IAGvC,IAAK,IAAM/yX,KAAU,KAAKu6Z,wBAAyB,CAC/C,IAAMngc,EAAO,KAAK8kc,2BACd,KAAK10c,QACLw1C,GAOEy+Z,EACF,KAAKzD,mCAAmCjse,IAAIixE,EAAO24E,IAAI,EAC3D,GAAI8lV,GAEI,KAAKnE,wCACCvre,IAAI0ve,EAAejX,YAAY,GAC/Bz4d,IAAIqrC,IACJrrC,IAAIgkc,IAIN,KAAKytC,uCACD/B,EAAejX,aACfptb,CAEJ4mc,EAAqB,SAIjC,IAAM/wT,EAAMjwG,EAAOm/X,2BACdpwc,IAAIgkc,IACHhkc,IAAIqrC,GAEVonc,EAAiBC,iBAAiBzha,EAAO24E,MAAQs3B,GAAKtmL,KAC1D,CAEA,OAAO63e,CACX,EACJ,CAEA,IAAsBjG,2BAAgD,CAClE,GAAM,CAAED,oBAAmBnB,gBAAiB,KAG5C,GAAIA,IAAiB,MACjB,OAAO,KAAKyH,aAAatG,EAAmB,CACxCuG,gBAAiB,EACrB,GAEJ,IAAMC,EAAgB,IAAI3+d,IACtB,KAAKm/E,QAAQ+1Y,uBAAuBtpe,IAAIore,IAAiB,EAC7D,EACMoB,EAA4BD,EAAkBxhb,OAAQirH,GACxD+8T,EAAc9ye,IAAI+1K,EAAO55K,IAAI,GAGjC,OAAO,KAAKy2e,aAAarG,EAA2B,CAEhDsG,gBAAiB1H,IAAiB,WACtC,EACJ,CAEAyH,aACI//B,EACAzxc,EAAwC,CACpCyxe,gBAAiB,EACrB,EACkB,CAClB,GAAM,CAAE/Y,cAAe,KACjBiZ,EAAU7gc,GAAwBA,EAAE/1C,KACpC62e,EAAW9gc,GACbA,EAAEugc,iBAAiB3Y,EAAWnwU,MAGlC,GAAI,KAAKwiV,eAAgB,CAErB,GAAI,CAAC/qe,EAAQyxe,gBACT,OAAOzgc,GAAUyga,EAAUkgC,EAAQjZ,EAAW52T,KAAK,EAMvD,GAAM,CAAC,CAAC+vU,GAAcjid,GAAQohB,GAAYyga,EAAW3ga,GACjD4xZ,GAAkB5xZ,EAAE/1C,IAAI,GAEtB,CAAC+2e,EAAQC,GAAU/gc,GAAYphB,EAAOkhB,GAAMA,EAAEygc,OAAO,EAErDS,EAAehhc,GAAS8gc,EAAShhc,GACnC,KAAKk5b,kBAAkBloe,QAAQgvC,EAAE/1C,IAAI,GAEnCk3e,EAAejhc,GAAU+gc,EAAQJ,EAAQjZ,EAAW52T,KAAK,EAE/D,OAAOrJ,GAAiB,CACjBu5U,KACHH,EACGI,IACN,EACL,CAGA,GAAM,CAACC,EAAYC,GAAiBnhc,GAAYyga,EAAW3ga,GACvD63H,IAAkBipU,EAAQ9gc,KAG1Bshc,EACJ,GAAIpye,EAAQyxe,gBAAiB,CAMzB,GAAM,CAACY,EAAWC,GAAathc,GAC3Bkhc,EACCphc,GAAMA,EAAEygc,OACb,EAGMgB,EAAkBvhc,GAASqhc,EAAYvhc,GACzC,KAAKk5b,kBAAkBloe,QAAQgvC,EAAE/1C,IAAI,GAInCy3e,EAAkBxhc,GACpBshc,EACAV,EACAlZ,EAAW52T,KACf,EAEAswU,EAAmB35U,GAAiB,CAC7B85U,KACAC,IACN,EACL,KACIJ,GAAmBphc,GAAUkhc,EAAYN,EAASlZ,EAAW52T,KAAK,EAGtE,IAAM2wU,EAAsBzhc,GACxBmhc,EACAR,EACA19V,GAAU8tB,GACd,EAEA,MAAO,CAAIqwU,KAAqBK,IAAmB,CACvD,CAEA,IAAcrH,aAAuB,CACjC,MAAO,CAAC,KAAKl5Y,QAAQq9Y,eACzB,CAEA,IAAclE,OAAuC,CACjD,OAAO75Q,GAAYkhR,aACf,KAAKvH,0BACJx2T,GAAW,CAACA,EAAO55K,KAAU45K,KAAO28T,kBAAoB,EAAG,EAC3D38T,GAAWA,EAAO55K,IACvB,CACJ,CAEA,IAAcuwe,eAAgD,CAC1D,GAAK,KAAKxB,YACV,OAAO,KAAKuB,MAAMphR,OAAO,KAAK6/Q,WAAW,CAC7C,CAEA,IAAcyB,kBAAuC,CACjD,IAAMzH,EAAW,KAAKoH,kBAAkBxhb,OAAQirH,GAC5C,KAAKg+T,iBAAiBh+T,IAE1B,OAAO,KAAK68T,aAAa1N,EAAU,CAAE2N,gBAAiB,EAAM,EAChE,CAEcp1C,cAAqB,CAC3B,KAAK+vC,oBAAoB5ue,UACzB,KAAK4ue,oBAAoB5ue,QAAQkjK,UAAY,EACrD,CAEc8qU,gBAAgB16b,EAAwB,CAClD,GAAM,CAAEw6b,iBAAkB,KACtBx6b,EAAEx3C,MAAQ,SAAWgye,GAAiBA,EAActqe,OAAS,IAC7D,KAAK4iN,SAAS0nR,EAAc,EAAE,CAACvwe,IAAI,EACnC,KAAKyze,iBAAA,EAEb,CAEc/C,mBAAmBlhC,EAAiC,CAC9D,IAAK,IAAM5H,KAAc4H,EACrB,KAAKr4W,QAAQ0gZ,mBAAmBjwC,EAExC,CAEA5mS,UACc6nD,SAAS++O,EAA8B,CACjD,GAAI,KAAKyoC,YACL,KAAKJ,eAAe9gC,gBAAgBvH,GAEhC,KAAKqoC,eAAelhC,YAAYlrc,IAAI+jc,IACpC,KAAKzwW,QAAQ2gZ,iBAAiBlwC,GAC9B,KAAKzwW,QAAQ4gZ,yBAAyB,SAAUnwC,KAEhD,KAAKzwW,QAAQ0gZ,mBAAmBjwC,GAChC,KAAKzwW,QAAQ4gZ,yBAAyB,WAAYnwC,IAGlD,KAAKqoC,eAAenhC,sBAAwB,GAC5C,KAAK33W,QAAQ6gZ,kBAAA,MAEd,CACH,IAAMC,EAAkB,KAAKhI,eAAerhC,oBAC5C,KAAKqhC,eAAejhC,oBAAoB,CAACpH,CAAW,GACpD,KAAKzwW,QAAQ2gZ,iBAAiBlwC,GAC9B,KAAKzwW,QAAQ4gZ,yBAAyB,SAAUnwC,GAChD,KAAK8oC,mBAAmBuH,GAGpB,KAAK9gZ,QAAQ+gZ,oCACb,KAAKl3U,UAAYnH,OAAOvuF,eAAiB,KAAKomJ,MAAA,EAAS,KAE/D,CAEA,KAAK+hR,iBAAA,CACT,CAEcj/C,SAAgB,CAC1B,IAAMyjD,EAAkB,KAAKhI,eAAerhC,oBAC5C,KAAKqhC,eAAe/gC,eAAA,EACpB,KAAKwhC,mBAAmBuH,GACxB,KAAK9gZ,QAAQ6gZ,kBAAA,EAEb,KAAKtE,kBAAA,EAEL,KAAKv8Y,QAAQ4gZ,yBAAyB,QAC1C,CAEA,MAAoBpH,6BAChBmD,EACa,CACb,GAAM,CAAEoB,aAAY1nV,QAASsmV,EACvB,CAAEgB,0BAA2B,KAAK39Y,QAGxC,GAAI,MAAK+3Y,8BAA8B1hV,GAGvC,GAAI,CAEA,GADA,KAAK7pJ,IAAI,CAAE0re,4BAA6B,EAAK,GACzCyF,IAA2B7qV,OAC3B,MAAU6T,MACN,0EAOR,IAAMjpF,EADQsja,KAHO7ve,MADFwse,EAAuBI,IAChBvmb,OAAQm2H,GAC9B,KAAKwqT,WAAW/e,uBAAuB1sd,IAAIihL,EAAIlL,MAAM,CAEdw+T,EAAclD,CAC1CrqW,GAAOjnI,IAAI4pJ,GACtB34E,GAAQ,KAAK29Z,0BAA0B39Z,EAC/C,MAAQ,CACJzxD,QAAQhQ,MAAM,qCAAqC8he,GAAY,CACnE,QAAU,CACN,KAAKvxe,IAAI,CAAE0re,4BAA6B,EAAM,EAClD,CACJ,CAEA,MAAoBuB,iBAChB7H,EACa,CACb,GAAIA,EAAU,CACV,GAAM,CAAEv7U,QAASu7U,EAGX+K,EAAW,KAAKlE,iCAAiC3zU,KAClD63U,GAAaA,EAAStmV,OAASA,GAEhCsmV,GAAU,MAAM,KAAKnD,6BAA6BmD,GAGlD,CAACA,GAAY,CAAC,KAAKoC,iBAAiB1oV,IACpC,KAAK2kV,gCAAgC3kV,GAGzC,KAAKmmV,eAAenmV,GAEpB,IAAM6qV,EAAe,KAAKnC,iBAAiB1oV,GACrC,OACAsmV,EACEA,EAASoB,WACT,QACR,KAAK/9Y,QAAQ4gZ,uBAAuB,SAAUM,EAClD,CACJ,CAEcxH,mBAA0B,CACpC,KAAK+C,gBAAA,EACL,KAAKz8Y,QAAQ4gZ,uBAAuB,YACxC,CAEsBrmR,OAAc,CAC5B,KAAKhnN,MAAMoja,UAAW,KAAKpja,MAAMoja,UAAA,EAChC,KAAK32U,QAAQ+gZ,kCAAoC,EAC1D,CAEA,IAAcpH,eAAwC,CAClD,GAAM,CAAEwH,eAAe,IAAO,KAAKnhZ,QAE7BlyF,EAAkCqze,EACnCnhe,KAAK,CAAEohe,iBAAgB/oC,kBAAmB,CACvChxc,MAAO+5e,EACPznU,MAAO87T,GAAkB2L,GACzBzzb,MAAO0qZ,EAAY7gZ,OAAQi5Y,GACvB,KAAK2oB,uBAAuB1sd,IAAI+jc,IAClC3hc,MACN,IACC0oD,QAAQ,CAAE7J,WAAYA,EAAQ,GAEnC,MAAO,CACH,CACItmD,MAAO,MACPsyK,MAAO,MACPhsH,MAAO,KAAKqrb,kBAAkBlqe,MAClC,EACGhB,IACP,CACJ,CAEsB8re,qBAClBhI,EACI,CACJ,GAAIA,EAAU,CACV,IAAM3xY,EAAS2xY,EACf,KAAKple,IAAI,CAAEqre,aAAc53Y,EAAO54F,KAAM,GAEtC,KAAK24F,QAAQ4gZ,uBAAuB,WAAY3gZ,EAAO54F,KAAK,CAChE,CACJ,CAEA,IAAsBwye,aAAoC,CACtD,OACI,KAAKF,cAAc70U,KACd7kE,GAAWA,EAAO54F,QAAU,KAAKwwe,YACtC,GAAK,KAAK8B,cAAc,EAEhC,CAEA,IAAcG,qBAA+B,CACzC,OACI,KAAKH,cAAc7qe,OAAS,GAC5B,KAAK6qe,cAAc,EAAE,CAAChsb,QAAU,KAAKgsb,cAAc,EAAE,CAAChsb,KAE9D,CAEA0zb,iBAA8C,CAC1C,OACI5xR,SAAC,MAAD,CAAKn/L,UAAU,8BACXm0F,UAAAgrG,SAAC0hR,GAAD,CACIrje,QAAS,KAAK6re,cACdjoR,SAAU,KAAKkoR,qBACfvye,MAAO,KAAKwye,YACZvI,mBAAoBgQ,IACpB/P,iBAAkBgQ,IAClB,aAAW,gBACd,EACA,EAEb,CAEAC,iBAA8C,CAC1C,OACI/xR,SAAC,MAAD,CAAKn/L,UAAU,8BACXm0F,UAAAgrG,SAAC4iR,IAAD,CACIvwc,IAAK,KAAKq4c,eACV9ye,MAAO,KAAKuwe,YACZlmR,SAAWrqN,GAAU,KAAKmF,IAAI,CAAEore,YAAavwe,CAAM,GACnDg2b,YAAe,KAAKi/C,iBAAA,EACpBvuD,YAAa,iBAAcxga,YACvB,KAAKoqd,2BACT,IACA1zH,UAAU,yBACVia,UAAW,KAAKo7G,eACnB,EACA,EAEb,CAEAmI,eAA4C,CACxC,OACIhyR,SAAC,MAAD,CAAKn/L,UAAU,4BACXm0F,UAAAyyL,UAAC,MAAD,CAAK5mR,UAAU,4CAAfm0F,SAAA,EACIgrG,SAAC0hR,GAAD,CACI7gd,UAAU,iCACV8gd,cAAc,sCACdtje,QAAS,KAAK6qe,YACdjnR,SAAU,KAAK+nR,iBACfpye,MAAO,KAAKuxe,UACZ5uE,UAAW,KAAKkuE,4BAChB5G,mBAAoBoQ,IACpBnQ,iBAAkBoQ,IAClB,aAAW,SACd,IACDlyR,SAAC,SAAD,CACIxgM,KAAK,SACLqB,UAAU,OACVu0V,QAAS,KAAK60H,kBAEdj1X,UAAAgrG,SAACqhR,IAAD,CACI7hd,KAAM,KAAK4pd,eAAiB,OAAS,UACrCjpU,MAAO,KAAK42T,WAAW52T,KAC1B,EACG,EACP,C,EACJ,EAEb,CAEAgyU,qBAAkD,CAW9C,MAVI,CAAC,KAAKxI,eAAiB,KAAKA,cAActqe,SAAW,GAEjDooS,UAAC,MAAD,CAAK5mR,UAAU,6DAAfm0F,SAAA,CAA4E,4BAC9C,KAAK6+W,WAAWga,SAAS,2FAGlD,C,IAKT7tR,SAAC,KAAD,CAAIn/L,UAAU,wBACTm0F,SAAA,KAAK20X,cAAcp5d,IAAKyiK,IACrBgtC,SAAC,KAAD,CAAAhrG,UACIgrG,SAACoyR,GAAD,CACIh5e,KAAM45K,EAAO55K,KACbomB,KAAM,KAAKiqd,YAAc,WAAa,QACtC1tZ,QAAS,KAAKi1Z,iBAAiBh+T,GAC/B,GAAI,KAAKq/T,qBAAqBr/T,GAC9BivC,SAAU,KAAKA,SACf2tR,QAAS58T,EAAO48T,QAChB0C,QAAS,KAAK7E,cAAcz6T,EAAO55K,IAAI,CAC1C,EACD,EAVK45K,EAAO55K,IAUZ,EAER,EAEZ,CAEAm5e,+BAA4D,CACxD,GAAM,CAAE/I,4BAA2Ba,uBAAwB,KAE3D,OACI5iM,UAAAsxC,WAAA,CAAA/jO,SAAA,CACKq1X,GAAuB,KAAKuH,gBAAA,GAC7B5xR,SAAC,KAAD,CAAIn/L,UAAWw9J,EAAG,CAAE,kBAAmBgsT,CAAoB,GACtDr1X,SAAAw0X,EAA0Bj5d,IAAKyiK,IAC5BgtC,SAAC,KAAD,CAAAhrG,UACIgrG,SAACoyR,GAAD,CACIh5e,KAAM45K,EAAO55K,KACbomB,KAAK,QACLu8D,QAAS,KAAKi1Z,iBAAiBh+T,GAC/B,GAAI,KAAKq/T,qBAAqBr/T,GAC9BivC,SAAU,KAAKA,SACf2tR,QAAS58T,EAAO48T,QAChB0C,QAAS,KAAK7E,cAAcz6T,EAAO55K,IAAI,CAC1C,EACD,EAVK45K,EAAO55K,IAUZ,EAER,EACN,GAEV,CAEA,IAAsBkxe,oBAA6C,CAC/D,GAAM,CAAEvT,cAAe,KACvB,GAAI,MAAKqS,eACT,OAAO,KAAKd,8BAA8BvR,EAAWnwU,KACzD,CAEA,IAAsB2jV,4BAAiD,CACnE,GAAM,CAAED,qBAAoB7xc,WAAY,KACxC,GAAI,CAAC6xc,EAAoB,OACzB,IAAMjic,EAAO,KAAK8kc,2BACd10c,EACA6xc,GAGJ,OAAOj7b,GADQi7b,EAAmBj9B,aAAarwc,IAAIqrC,CACtChiB,EACjB,CAEA,IAAsBmkd,UAAwC,CAC1D,OAAOgI,KACFtmb,OAAO,CAAC,EAAG,KAAKq+a,4BAA8B,CAAE,GAChDx6Y,MAAM,CAAC,EAAG,CAAE,EACrB,CAEAsiZ,qBAA6Br/T,EAAoC,CAC7D,GAAM,CAAEs3T,qBAAoBE,YAAa,KAEzC,GAAI,CAACF,EAAoB,MAAO,CAAC,EAEjC,IAAM1ye,EAAQo7K,EAAO08T,iBAAiBpF,EAAmB1jV,MAEzD,GAAI,CAACogB,IAAkBpvK,GAAQ,MAAO,CAAE66e,kBAAmB,SAAU,EAErE,IAAMA,EACFnI,EAAmBv8B,kCAAkCn2c,GAIzD,OAFIA,EAAQ,EAAU,CAAE66e,oBAAmBC,SAAU,CAAE,EAEhD,CACHD,oBACAC,SAAUv7U,GAAQqzU,EAAS5ye,GAAQ,CAAEsH,IAAK,EAAGD,IAAK,CAAE,EACxD,CACJ,CAEA+xe,iBAAyBh+T,EAAmC,CACxD,OAAO,KAAKq2T,eAAelhC,YAAYlrc,IAAI+1K,EAAO55K,IAAI,CAC1D,CAEAu5e,8BAA2D,CACvD,GAAM,CACFnJ,4BACAI,mBACAS,uBACA,KACE,CAAEniC,sBAAqBF,uBAAwB,KAAKqhC,eAIpDuJ,EAAiBpJ,EAA0Bnqe,OAAS,GACpDwze,EACF,CAACxI,GAAuBuI,GAAkB,KAAKtJ,oBAE7CwJ,EAAyB,KAAK7K,UAAU8K,oBAAA,EACxC,gBAAgBhO,GAAkB,KAAKkD,UAAUprV,UACjD,OAAO,KAAKg3U,WAAWwH,SAE7B,OACI5zL,UAACurM,GAAD,CACIC,OAAQ,CAAEC,UAAW,IAAKC,QAAS,EAAG,EACtCC,QAASprC,EAAoB/pc,KAAK,KAFtC+2G,SAAA,EAIIyyL,UAAC,MAAD,CAAK5mR,UAAU,iBAAfm0F,SAAA,CACK40X,EAAiBvqe,OAAS,IACvB2gN,SAACqzR,GAAD,CAASC,OAAO,cAAcpiM,UAAA,GAAUztI,QAAA,GACpCzuD,UAAAyyL,UAAC,MAAD,CAAK5mR,UAAU,yBAAfm0F,SAAA,EACIyyL,UAAC,MAAD,CAAK5mR,UAAU,oEAAfm0F,SAAA,CAAmF,YACrE,IACTkzV,EAAsB,GACnB,IAAIA,EAAoB,EAC3B,CACL,IAAAloP,SAAC,SAAD,CAAQxgM,KAAK,SAAS41V,QAAS,KAAKw4E,QAAS54U,SAAA,OAErC,EACP,C,EACA,IAEbgrG,SAAC,KAAD,CAAAhrG,SACK40X,EAAiBr5d,IAAKyiK,IACnBgtC,SAACuzR,IAAD,CAEID,OAAQ,YAAYpgV,GAChB8f,EAAO55K,IACX,IACAA,KAAM45K,EAAO55K,KACbomB,KAAK,WACLu8D,QAAS,GACT,GAAI,KAAKs2Z,qBAAqBr/T,GAC9BivC,SAAU,KAAKA,SACf2tR,QAAS58T,EAAO48T,QAChB0C,QAAS,KAAK7E,cAAcz6T,EAAO55K,IAAI,CAC1C,EAXQ45K,EAAO55K,IAWf,EAEL,EACH,C,GAEJixe,IACGrqR,SAACqzR,GAAD,CAASC,OAAO,eAAepiM,UAAA,GAAUztI,QAAA,GACpCzuD,SAAA,KAAK48X,gBAAA,CACD,GAGZ,CAACiB,IACEprM,UAAC,MAAD,CACI5mR,UAAWw9J,EAAG,iBAAkB,CAC5B,kBAAmBgsT,CACvB,GAHJr1X,SAAA,CAKK,CAACq1X,IACErqR,SAACqzR,GAAD,CAASC,OAAO,cAAcpiM,UAAA,GAAUztI,QAAA,GACpCzuD,UAAAgrG,SAAC,MAAD,CAAKn/L,UAAU,oEACVm0F,SAAA89X,CACA,EACA,IAGb9yR,SAAC,KAAD,CAAAhrG,SACKw0X,EAA0Bj5d,IAAKyiK,IAC5BgtC,SAACuzR,IAAD,CAEID,OAAQ,aAAapgV,GACjB8f,EAAO55K,IACX,IACAA,KAAM45K,EAAO55K,KACbomB,KAAK,WACLu8D,QAAS,KAAKi1Z,iBAAiBh+T,GAC/B,GAAI,KAAKq/T,qBAAqBr/T,GAC9BivC,SAAU,KAAKA,SACf2tR,QAAS58T,EAAO48T,QAChB0C,QAAS,KAAK7E,cAAcz6T,EAAO55K,IAAI,CAC1C,EAXQ45K,EAAO55K,IAWf,EAEL,EACH,C,EAEJ,C,EAEjB,CAEAi8M,QAAsC,CAClC,OACIoyF,UAAC,MAAD,CAAK5mR,UAAU,kBAAfm0F,SAAA,EACIgrG,SAACy6O,GAAD,CACIhzS,MAAO,KAAKA,MACZizS,aAAc,KAAKA,aACnBxzB,UAAW,KAAKp8M,KACnB,GAEA,KAAKinR,gBAAA,GAENtqM,UAAC,MAAD,CAAKp1Q,IAAK,KAAKo4c,oBAAqB5pd,UAAU,aAA9Cm0F,SAAA,CACK,CAAC,KAAKmzX,aACH,KAAKe,YAAY7pe,OAAS,GAC1B,KAAK2ye,cAAA,GAEThyR,SAAC,MAAD,CACI3tL,IAAK,KAAKs4c,WACV9pd,UAAU,2BAETm0F,SAAA,KAAKmzX,YACA,KAAKgK,oBAAA,EACL,KAAK1I,YACH,KAAKkJ,6BAAA,EACL,KAAKJ,8BAAA,CACZ,EACJ,C,EACJ,C,EAEb,C,aACJ,GAoBA,SAASiB,MACL,OACI/rM,UAAC,OAAD,CAAM5mR,UAAU,gBAAhBm0F,SAAA,CAEK,QACDgrG,SAAC7B,GAAD,CACIv5M,QAAQ,wBACRu7M,MAAM,6BACNlgB,UAAU,MAEVjrF,UAAAgrG,SAAC+9E,EAAD,CAAiB1W,KAAMqZ,GAAkB,EACtC,EACL,C,EAEd,CAEA,IAAM0xM,GAAmBv2R,EAAM73L,KAAK,SAA0B,CAC1D5qB,OACA2iF,UACAv8D,OACAizd,oBACAC,WACAzwR,WACA2tR,UACA0C,WAAA,CAEA,IAAMzP,EAAQrjd,IAAS,WAAa46a,GAAWG,GACzC,CAAEnhc,KAAMktc,EAAa3kZ,UAAWklb,GAAWzte,GAE3C8wK,GACFu9H,UAAC,OAAD,CAAAzyL,SAAA,CACKsxV,EACA3kZ,IAAU8lP,UAAC,OAAD,CAAM5mR,UAAU,SAAhBm0F,SAAA,CAAyB,KAAGrzD,EAAO,GAAO,C,GACpDiub,IAAW5vR,SAACwzR,IAAD,CAAe,EACzB,IAGV,OACI/rM,UAAC,MAAD,CACI5mR,UAAWw9J,EAAG,oBAAqB,CAC/B,8BAA+Bq0T,IAAarvV,OAC5C,2BAA4BivV,CAChC,GAJJt9X,SAAA,CAMK09X,IAAarvV,SACV28D,SAAC,MAAD,CAAKn/L,UAAU,MAAMmvE,MAAO,CAAErT,MAAO,GAAG+1Z,EAAW,IAAI,EAAG,CAAI,IAElE1yR,SAAC6iR,EAAD,CACW34T,QACEnuF,UACTkmI,aAAgBA,EAAS7oN,EAC5B,GACAq5e,IAAsBpvV,SACnB28D,SAAC,OAAD,CAAMn/L,UAAU,gCACXm0F,SAAAy9X,CACC,EAET,C,EAEb,GAEMgB,IAAwB,CAAEP,UAAW,IAAKC,QAAS,EAAG,EAMtDI,IAA2B13R,EAAM73L,KAAK,SAAkC,CAC1Esvd,SACA,GAAGI,GAAA,CAEH,OACI1zR,SAACqzR,GAAD,CACYC,SACRpiM,UAAA,GACAztI,QAAA,GACAwvU,OAAQQ,IAERz+X,UAAAgrG,SAAC,KAAD,CAAAhrG,UACIgrG,SAACoyR,GAAD,CAAkB,GAAIsB,CAAwB,EAC9C,EACC,EAEjB,GAEA,SAASzB,IACLzhZ,EAAA,CAEA,GAAKA,EACL,OACIi3M,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIyyL,UAAC,OAAD,CAAM5mR,UAAU,QAAhBm0F,SAAA,EACIgrG,SAAC+9E,EAAD,CAAiB1W,KAAMmc,IAAuBrxR,KAAK,IAAM,GACxD,WACC,C,GACLq+E,EAAO05E,MACP15E,EAAO2+Y,gBACJ1nM,UAAC,OAAD,CAAM5mR,UAAU,SAAhBm0F,SAAA,CAAyB,KAAGxkB,EAAO2+Y,aAAoB,C,EAE7D,GAEV,CAEA,SAAS+C,IAAqB1hZ,EAAA,CAC1B,OACIi3M,UAAAsxC,WAAA,CAAA/jO,SAAA,CACKxkB,EAAO05E,MACP15E,EAAO2+Y,gBACJ1nM,UAAC,OAAD,CAAM5mR,UAAU,SAAhBm0F,SAAA,CAAyB,KAAGxkB,EAAO2+Y,aAAoB,CAE7D,KAEV,CAEA,SAAS0C,IACLrhZ,EAAA,CAEA,GAAKA,EACL,OACIi3M,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIyyL,UAAC,OAAD,CAAM5mR,UAAU,QAAhBm0F,SAAA,EACIgrG,SAAC+9E,EAAD,CAAiB1W,KAAMuX,GAAUzsR,KAAK,IAAM,GAC3C,kBACC,C,GACLq+E,EAAO05E,MAAM,KAACu9H,UAAC,OAAD,CAAM5mR,UAAU,SAAhBm0F,SAAA,CAAyB,IAAExkB,EAAOtyC,MAAM,GAAO,C,EAChE,GAEV,CAEA,SAAS4zb,IAAuBthZ,EAAA,CAC5B,OACIi3M,UAAAsxC,WAAA,CAAA/jO,SAAA,CACKxkB,EAAO05E,MAAM,KAACu9H,UAAC,OAAD,CAAM5mR,UAAU,SAAhBm0F,SAAA,CAAyB,IAAExkB,EAAOtyC,MAAM,GAAO,C,EAChE,GAEV,CAEA,SAAS2wb,GAA2B5ga,EAAA,CAChC,OAAOA,EAAO49X,yBAAyBpkT,KAC3C,CAGA,SAAS4mV,IACL12e,EACAs2E,EAAA,CAKA,OAFIA,EAAOq0D,IAAIskB,OAASygV,GAAuB1ve,EAAI,CAACivJ,MAE7C5wJ,GAAM2B,GACR0sK,KAAK,iBAEKg9R,GACFpzX,EAAOq0D,KAAuBqxW,aAAe,GAEtD,EACCtvU,KAAK,WAEYwqU,GAA2B5ga,CAGrCi8F,EAAMl0K,MAAM,mCAAqC,IAEpB+xD,OAC5B/xD,GAAU,CAACA,EAAMy8H,SAAS,IAExBz8F,EAAQ32B,OAAS,CAC5B,EACCklK,WAAA,CACT,CAEA,SAASgtU,IACL7ve,EACA4se,EAAA,CAEA,GAAI5se,EAAKrC,SAAW,EAAG,OAEvB,IAAM2tY,EAAU39V,GAAM3tC,EAAK6O,IAAK+hJ,GAAUA,EAAMnV,IAAI,GACpD,GAAI6vP,IAAY3pP,OAAW,OAE3B,IAAM4nT,EAAYo8B,GAAuBiH,GACnC1nV,EAAOqkT,EAAUrkT,KACjB+jT,EAAmBL,GAAmC1jT,GAoB5D,OAAO,IAAI6iU,GAlBE/nd,EAAK6O,IAAK2tK,IAAS,EAC3Bl5B,GAAe4wT,YAAa13R,EAAIlL,QAEhChuB,GAAe8P,MAAOk4O,GACtBi+D,EAAUrkT,MAAOs3B,EAAItmL,OACrB+yc,GAAmBzsR,EAAI/gC,IAC5B,EAYqBse,EAAM,CACvBwvS,EACA2oC,CAVAhtV,KAAM5B,GAAe8P,KACrBt1I,KAAM+lI,GAAgBuP,IAStB8+U,EACAC,CAPAjtV,KAAM+jT,EACNnrb,KAAM+lI,GAAgBuP,IAMtB++U,CACH,EACL,C,80GC/zDyCh4R,cAAMpoG,UAANooG,I,KAAlC,cAAkCA,I,wCADxC5zH,C,IASI0qC,E,EAAqBpiC,S,GAIrBoiC,E,EAAqBmhX,a,GAIrBnhX,E,EAAqBohX,a,IAMrBl9X,IAAOo6D,K,KAAMi2P,W,CAtBuBrrN,gB,CAGrC,YAAY/3M,EAAgD,CACxD,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAsBhlG,SAAsC,CACxD,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAsBujZ,aAAsB,CACxC,OAAO,KAAKvjZ,QAAQujZ,aAAe3zC,EACvC,CAEA,IAAsB4zC,aAAsB,CAExC,IAAMC,EAAW//U,KAAKh1J,IAAI,IAAK,KAAK60e,YAAYn3Z,MAAQ+6P,KAAY,GACpE,OAAO,KAAKo8J,YAAYG,UAAU,IAAID,SAASA,EACnD,CAEc9sE,WAAkB,CAC5B,KAAK32U,QAAQ+gZ,kCAAoC,EACrD,CAEAj8R,QAAsC,CAClC,OACI2K,SAACg+Q,GAAD,CACI1jM,UAAU,kBACV2jM,WAAY,KAAK1tY,QAAQ9uE,KACzBylZ,UAAW,KAAKA,UAChBjqP,OAAQ,KAAK82T,YACb7V,cAAe,GAEflpX,UAAAgrG,SAACk0R,GAAD,CACI3jZ,QAAS,KAAKA,QACd22U,UAAW,KAAKA,UAChB5mC,UAAW,EACd,EACE,EAEf,C,aACJ,GCxDA,IAAY6zG,GAAL,SAAAA,EAAA,C,MACHA,GAAA/pV,KAAA,OACA+pV,EAAAC,iBAAA,oB,CACJ,MAsBaC,IAAuB,KAChCvpc,KAMA,IAAM2/a,GAHF3/a,EAAIwpc,kBAAA,OACExpc,EAAIypc,UACJzpc,EAAI0pc,eACYxlB,YAAY,CAClCE,cAAepkb,EAAIuxZ,aACvB,GAEA,OAAO,IAAIo4C,KAAK,CAAChqB,CAAG,EAAG,CAAEjrc,KAAM,wBAAyB,EAC5D,EAEak1d,IACT5pc,IAEA,IAAMk9K,EAAe,IAAI2sR,gBACzB3sR,EAAajrN,IAAI,IAAK,KACtBirN,EAAajrN,IACT,UACA/G,GAAM80C,EAAIwpc,eAAe,EACpBjwU,KAAA,wBAA6C,YAC7CA,KAAA,WAAiC,QACjCE,WAAA,GAETyjD,EAAajrN,IAAI,sBAAuB+tC,EAAIuxZ,cAAcnoc,SAAA,GAC1D,IAAMgmL,EACFpvI,EAAIwpc,kBAAA,oBACExpc,EAAIk9K,aACJl9K,EAAI8pc,qBAERC,EAAkC,CACpC,SACJ,EAEA,IAAK,GAAM,CAACl9e,EAAKC,KAAUsiL,EAAYjnH,QAAA,EAC/B4hb,EAAsBpiX,SAAS96H,IAEnCqwN,EAAajrN,IAAIpF,EAAKC,GAE1B,OAAOowN,CACX,EAEa8sR,IACT31J,EACAr0S,KAGA,IAAMiqc,EADeL,IAAwB5pc,CAC3Bk9K,EAAa9zN,SAAA,EAAW+mW,WAAW,MAAO,KAC5D,MAAO,GAAGnwT,EAAIgoU,QAAQ,GAAG3zB,KAAe41J,EAAY,IAAIA,IAAc,GAC1E,EAEaC,IAA2B,CACpCpuV,OACAu4L,YACAm1J,qBAcO,GAAG1tV,IALNu4L,IAAc,OACdm1J,IAAA,oBACM,YACA,GAEsB,GAAGn1J,IAG1B81J,IACThxW,IAEA,GAAI,CAACA,EAAO,MAAO,CAAEs0U,KAAMl1T,OAAWu6S,YAAav6S,MAAU,EAE7D,IAAM6xV,EAAyBjxW,EAAMy8U,eAAe34Z,OAC/CgjB,GAAQA,EAAIu3D,IAAI6yW,kBACrB,EAYA,OAVKD,EAAuB71e,OAUrB,CAAEk5c,KAAM28B,EAAwBt3C,YAAavuZ,GAPhC6lc,EACf3ke,IAAKw6D,IACF,IAAMu3D,EAAMv3D,EAAIu3D,IAChB,OAAOA,EAAIktU,YAAcltU,EAAI2nC,UAAU,EAAE,EAAEmrU,OAC/C,GACCrtb,OAAQ5uB,GAAyB,CAAC,CAACA,CAEmByka,EAAa,EAT7D,CAAE2a,KAAMl1T,OAAWu6S,YAAav6S,MAAU,CAUzD,ECzGA,SAAgBgyV,IACZ,EACA,EAAa,IACqD,CAClE,GAAM,CAACz9e,EAAO0iX,IAAA,EAAYx7J,YAAwB5nG,CAAY,EACxDo+X,GAAA,EAAWz3R,UACb,MACJ,EAeA,MAAO,CAACjmN,GAbImrN,iBACP,GAAgB,CACTuyR,EAAS,SAAS,aAAaA,EAAS,OAAO,EACnDh7H,EAAStzR,CAAQ,CACrB,EACA,CAACszR,CAAQ,CAQE,GALDv3J,qBAAkB,CACxBuyR,EAAS,SAAS,aAAaA,EAAS,OAAO,EACnD,EAAS,QAAU,eAAiBh7H,EAAS,MAAS,EAAGi7H,CAAU,CACvE,EAAG,CAACj7H,EAAUi7H,CAAU,CAEJ,CAAK,CAC7B,CAEA,SAAgBC,IAAyB,CACrC,kBACA,gBAWF,CACE,GAAM,CAACr5C,EAAas5C,IAAA,EAAkB32R,YAAS,EAAK,EAC9C,CAACu9O,EAAeq5C,IAAA,EAAoB52R,YACtC,CAAC,CAACy9O,GAAc,SACpB,EAEMo5C,GAAA,EAA6Cx0R,gBACxC,CACH,GAAGy0R,EACH,gBAAiBz5C,EACXg4C,GAAgB,iBAChBA,GAAgB,KACtB,eACJ,GACA,CAACyB,EAAiBz5C,EAAaE,CAAa,CAChD,EAWA,MAAO,CACH,UAVWl7O,eACL2zR,GAAe,MAAOa,CAAW,EACvC,CAACA,CAAW,CAQZ,EACA,eAPgBx0R,eACV2zR,GAAe,gBAAiBa,CAAW,EACjD,CAACA,CAAW,CAKZ,EACA,cACA,iBACA,gBACA,kBACJ,CACJ,CAWA,SAASE,IAAkB,EAGzB,CACE,IAAM13Z,EAAOrjE,EAAQ,sBAAsB,EACrCk1E,EAAQ,OAAO,iBAAiBl1E,CAAO,EAEvCg7d,EAAM,GAA0B,WAAWl+e,CAAK,GAAK,EACrDm+e,EACFD,EAAG9lZ,EAAM,eAAe,EACxB8lZ,EAAG9lZ,EAAM,gBAAgB,EACzB8lZ,EAAG9lZ,EAAM,WAAW,EACpB8lZ,EAAG9lZ,EAAM,YAAY,EACnBgmZ,EACFF,EAAG9lZ,EAAM,cAAc,EACvB8lZ,EAAG9lZ,EAAM,iBAAiB,EAC1B8lZ,EAAG9lZ,EAAM,UAAU,EACnB8lZ,EAAG9lZ,EAAM,aAAa,EAE1B,MAAO,CACH,MAAO,KAAK,IAAI,EAAG7R,EAAK,MAAQ43Z,CAAU,EAC1C,OAAQ,KAAK,IAAI,EAAG53Z,EAAK,OAAS63Z,CAAQ,CAC9C,CACJ,CAQA,SAAgBC,GACZ,EACA,EAAkB91C,GAClB,EAKU,CAAC,EACD,CAKV,GAAM,CAAE,eAAe,IAAK,4BAA4B,IAHpD,OAAO+1C,GAA0B,SAC3B,CAAE,aAAcA,CAAsB,EACtCA,EAEJ,CAACj5T,EAAQk5T,IAAA,EAAar3R,YAAqB5nG,CAAY,EAEvDk/X,GAAA,EAA0BrzR,gBAC3B,EAAe,IAAmB,CAC/BozR,EAAW,GAMHE,IACC15Z,IAAU,GAAKvkB,IAAW,IAM3Bk+a,GAAe,QAAU35Z,GACzB25Z,EAAc,SAAWl+a,EAElBk+a,EAGJ,IAAIj6T,EAAO,EAAG,EAAG1/F,EAAOvkB,CAAM,CACxC,CACL,EACA,CAACi+a,CAAyB,CAC9B,EAEAx1R,OAAgC,CAC5B,IAAM/lM,EAAUuX,EAAI,QACpB,GAAI,CAACvX,EAAS,OAId,GAAM,CAAE,QAAO,UAAW+6d,IAAkB/6d,CAAO,EACnDs7d,EAAwBz5Z,EAAOvkB,CAAM,CACzC,EAAG,CAAC/lC,EAAK+jd,CAAuB,CAAC,EAEjC,IAAMG,GAAA,EAAwBp1R,eAEtBq1R,IAAiB,OASXJ,EARAK,IACIL,EACAI,EAIA,CAAE,QAAS,EAAK,CACpB,EAEV,CAACA,EAAcJ,CAAuB,CAC1C,EAiBA,OAfA,EAAA1+X,EAAA,eAAgB,CACZ,IAAM58F,EAAUuX,EAAI,QACpB,GAAI,CAACvX,EAAS,OAEd,IAAMmtE,EAAW,IAAI,eAAgB,GAAY,CAC7C,IAAMj2B,EAAQiB,EAAQ,GACtB,GAAI,CAACjB,EAAO,OACZ,GAAM,CAAE,QAAO,UAAWA,EAAM,YAChCukb,EAAsB55Z,EAAOvkB,CAAM,CACvC,CAAC,EAGD,OADA6vB,EAAS,QAAQntE,CAAO,MACXmtE,EAAS,WAAW,CACrC,EAAG,CAAC51D,EAAKkkd,CAAqB,CAAC,EAExBt5T,CACX,CAEA,SAAgBy5T,GACZ,EACI,EACJ,EAAAh/X,EAAA,eAAgB,CACZ,GAAKwvT,EAEL,OADA,SAAS,iBAAiB,cAAeA,EAAW,CAAE,QAAS,EAAK,CAAC,MACxD,CACT,SAAS,oBAAoB,cAAeA,CAAS,EACrDA,EAAU,CACd,CACJ,EAAG,CAACA,CAAS,CAAC,CAClB,CCvNA,IAAayvE,IAAwC,CACjDrme,QACAq/a,cACA1tO,WACAphM,YACA+1d,qBACA/uV,UAAU,UACV7yC,eAaIyyL,UAACovM,IAAD,CACIh2d,UAAW+1d,EACEjnD,cACbmnD,kBAAoBn/e,IACZ,OAAOA,GAAQ,UAAUsqN,EAAStqN,EAC1C,EALJq9G,SAAA,EAOIgrG,SAAC+2R,IAAD,CACIl2d,UAAWw9J,EAAG,OAAQ,iBAAmBx2B,EAAShnI,GAEjDm0F,SAAA1kG,EAAMC,IAAK0zB,IACR+7K,SAACg3R,IAAD,CAEIz+e,GAAI0rC,EAAKtsC,IACT,kBAAiBssC,EAAKmiW,aAAah2B,cACnC,aAAYnsU,EAAKmiW,aAAa9rG,UAC9Bz5Q,UAAWw9J,EAAG,YAAap6I,EAAKmiW,aAAavlX,WAC7CwR,IAAK4R,EAAKmiW,aAAa/zW,IAEtB2iF,SAAA/wE,EAAKnpB,OACL,EARImpB,EAAKtsC,GAQT,EAEJ,GACRq9G,CACK,C,i1GC6CiB6mG,mBAsGMA,OA5G7Bo7R,GAAL,SAAAA,EAAA,C,MACHA,GAAAC,IAAA,MACAD,EAAAE,KAAA,O,CACJ,MAGmCt7R,KAAMpoG,U,SAAlC,cAA4BooG,G,wCADlC5zH,C,IA0BI0qC,E,EAAqBmhX,a,GAIrBnhX,E,EAAqBohX,a,GAMrBphX,E,EAAqBykX,W,IAIrBvgY,IAAOo6D,K,KAAcomU,a,IAIrBxgY,IAAOo6D,K,KAAci2P,W,CA3CSrrN,e,CAC/B,YAAY/3M,EAA2B,CACnC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAY+hT,UAA4C,CACpD,MAAO,CACH,CACI3/e,IAAA,MACAmjB,SAASklM,SAAA+4H,WAAA,CAAA/jO,SAAE,eAAe,GAC1BoxR,YAAa,CACTh2B,cAAe,wCACnB,CACJ,EACA,CACIz4W,IAAA,OACAmjB,SAASklM,SAAA+4H,WAAA,CAAA/jO,SAAE,MAAM,GACjBoxR,YAAa,CACTh2B,cAAe,+BACnB,CACJ,CACJ,CACJ,CAEA,IAAsB0jI,aAAc,CAChC,OAAO,KAAKhwe,MAAMysF,QAAQujZ,aAAe3zC,EAC7C,CAEA,IAAsB4zC,aAAc,CAEhC,IAAMC,EAAW//U,KAAKh1J,IAAI,IAAK,KAAK60e,YAAYn3Z,MAAQ+6P,KAAY,GACpE,OAAO,KAAKo8J,YAAYG,UAAU,IAAID,SAASA,EACnD,CAEA,IAAsBoD,WAAkC,CACpD,OAAO,KAAKtze,MAAMysF,QAAQgnZ,sBAC9B,CAEsBF,YAAY1/e,EAA2B,CACzD,KAAKmM,MAAMysF,QAAQgnZ,uBAAyB5/e,CAChD,CAEsBuva,WAAY,CAC9B,KAAKpja,MAAMysF,QAAQinZ,YAAcn0V,MACrC,CAEAgyD,QAAsC,CAClC,OACI2K,SAACg+Q,GAAD,CACI1jM,UAAU,WACV2jM,WAAY,KAAKn6d,MAAMysF,QAAQ9uE,KAC/Bw7J,OAAQ,KAAK82T,YACb7sE,UAAW,KAAKA,UAChBi3D,cAAc,MAEdnpX,UAAAyyL,UAAC,MAAD,CACI5mR,UAAU,yBACVmvE,MAAO,CAAEyvU,UAAW,KAAKs0E,YAAY37a,MAAO,EAFhD48C,SAAA,EAIIgrG,SAACy6O,GAAD,CACIhzS,MAAM,WACNy/Q,UAAW,KAAKA,SACnB,IACDlnN,SAAC22R,GAAD,CACI9uV,QAAQ,OACRv3I,MAAO,KAAKgne,SACZ3nD,YAAa,KAAKynD,UAClBn1R,SAAU,KAAKo1R,YACfx2d,UAAU,2BACV+1d,mBAAmB,uBAQnB5hY,UAAAyyL,UAAC,MAAD,CAAK5mR,UAAU,4BAAfm0F,SAAA,EACIgrG,SAACy3R,IAAD,CACIl/e,GAAA,MACAm/e,iBAAA,GACA72d,UAAU,8BAEVm0F,UAAAgrG,SAAC23R,IAAD,CAAqB,GAAI,KAAK7ze,KAAQ,EAChC,IACVk8M,SAACy3R,IAAD,CACIl/e,GAAA,OACAm/e,iBAAA,GACA72d,UAAU,8BAEVm0F,UAAAgrG,SAAC43R,IAAD,CAAsB,GAAI,KAAK9ze,KAAQ,EACjC,EACT,C,EACH,EACL,C,EACF,EAEf,C,aACJ,GAGyC+3M,KAAMpoG,U,SAAxC,cAAkCooG,G,wCADxC5zH,C,IAyBI0qC,E,EAAqBklX,c,GAIrBllX,E,EAAqBmlX,sB,GAIrBnlX,E,EAAqBolX,mB,GAOrBplX,E,EAAqBqlX,mB,GAIrBrlX,E,EAAqBslX,c,GAMrBtlX,E,EAAqB0jN,a,GAIrB1jN,E,EAAqBulX,c,GAIrBvlX,E,EAAqBpiC,S,IAerBsmB,IAAOo6D,K,KAAcknU,Q,IAiBrBthY,IAAOo6D,K,KAAcmnU,a,IAIrBvhY,IAAOo6D,K,KAAcq0J,O,GAIrB3yM,E,EAAqB0lX,gB,GAGrB1lX,E,EAAqB2lX,c,IAIrBzhY,IAAOo6D,K,KAAcsnU,e,IAUrB1hY,IAAOo6D,K,KAAcunU,e,IAQrB3hY,IAAOo6D,K,KAAcwnU,oB,IAMrB5hY,IAAOo6D,K,KAAcynU,+B,IAIrB7hY,IAAOo6D,K,KAAc0nU,sB,GAIrBhmX,E,EAAqBimX,Y,GAIrBjmX,E,EAAqBkmX,yB,IAIrBhiY,IAAOo6D,K,KAAM6nU,iB,GAIbnmX,E,EAAaomX,mB,IAIbliY,IAAOo6D,K,KAAY+nU,W,CAxJiBn9R,e,CACrC,YAAY/3M,EAA2B,CACnC,MAAMA,GAENyxL,EASE,KAAM,CACJ0jT,QAAS71T,EACT81T,cAAe91T,EACf+1T,QAAS/1T,EACTg2T,cAAeh2T,EACflgB,oBAAqBkgB,EACrBpqI,QAASoqI,EACTi2T,qBAAsBj2T,CAC1B,EACJ,CAEA,IAAsBy0T,cAAuB,CACzC,OAAO,KAAKtnZ,QAAQsnZ,cAAgB13C,EACxC,CAEA,IAAsB23C,sBAA+B,CACjD,OAAO,KAAKvnZ,QAAQunZ,sBAAwB33C,EAChD,CAEA,IAAsB43C,mBAA6B,CAC/C,OACI,KAAKxnZ,QAAQsnZ,cAAcl7Z,QAC3B,KAAK4T,QAAQsnZ,cAAcz/a,MAEnC,CAEA,IAAsB4/a,mBAA6B,CAC/C,OAAO,KAAKznZ,QAAQynZ,mBAAqB,EAC7C,CAEA,IAAsBC,cAAuB,CAGpC,OAFD,KAAKoB,qBACE,KAAK9oZ,QAAQ+oZ,yBAA2B,KAAKzB,aAC5C,KAAKA,YACrB,CAEA,IAAsBxhK,aAAsB,CACxC,OAAO,KAAK4hK,aAAat7Z,KAC7B,CAEA,IAAsBu7Z,cAAuB,CACzC,OAAO,KAAKD,aAAa7/a,MAC7B,CAEA,IAAsBm4B,SAAgC,CAClD,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA0oZ,mBAAoC51V,QACpC61V,cAA4C71V,OAE5C81V,QAAoC91V,OACpC+1V,cAA4C/1V,OAC5C6f,oBAAuC,GAEvClqH,QAA2B,GAE3Bqgc,qBAA+B,GAETlB,QAAe,CAEjC,KAAK5nZ,QACAgpZ,UAAU,CAAEC,eAAgB,KAAKH,oBAAqB,GACtD5/U,MAAM,CAAE18G,MAAKizH,OAAMypU,SAAQR,aAAA,CACxB,KAAKG,cAAgBr8b,EACrB,KAAKo8b,QAAUnpU,EACf,KAAKkpU,cAAgBO,EACrB,KAAKR,QAAUA,EACf,KAAKb,YAAA,CACT,GACC79U,MAAO/2I,IACJhH,QAAQhQ,MAAMi2J,KAAKC,UAAUl/I,IAC7B,KAAK40d,YAAA,CACT,EACR,CAEsBA,aAAoB,CACtC,KAAKp/b,QAAU,EACnB,CAEsBssR,OAAc,CAChC,KAAKtsR,QAAU,EACnB,CAEA,IAAsBq/b,gBAAyB,CAC3C,MAAO,GAAG,KAAK9nZ,QAAQuiR,SAAW,GAAG,MAAM,KAAKviR,QAAQynF,UAAY,IACxE,CACA,IAAsBsgU,cAAuB,CACzC,OAAO,KAAK/nZ,QAAQmpZ,WACxB,CAEsBnB,eAAsB,CACxC,IAAMrkc,EAAW,KAAKokc,aAAe,OACjC,KAAKa,QACLrpU,GAAwB57H,EAAU,KAAKilc,OAAO,EAE9ClpU,IAAuB/7H,EAAU,KAAKmkc,cAAc,EAExD,KAAK9nZ,QAAQopZ,wBAAwB,qBACzC,CAEsBnB,eAAsB,CACxC,IAAMtkc,EAAW,KAAKokc,aAAe,OACjC,KAAKW,SACLnpU,GAAwB57H,EAAU,KAAK+kc,OAAO,EAElD,KAAK1oZ,QAAQopZ,wBAAwB,qBACzC,CAEsBlB,oBAA2B,CAC7C,KAAKloZ,QAAQsnZ,aAAe,KAAKE,kBAC3B53C,GACAE,GACV,CAEsBq4C,+BAAsC,CACxD,KAAKnoZ,QAAQynZ,kBAAoB,CAAC,KAAKA,iBAC3C,CAEsBW,sBAA6B,CAC/C,KAAKU,qBAAuB,CAAC,KAAKA,oBACtC,CAEA,IAAsBT,YAAsB,CACxC,MAAO,CAACvpc,GAAU,KAAKkhD,QAAQytP,yBAAyB,CAC5D,CAEA,IAAsB66J,yBAAmC,CACrD,MAAO,CAAC,EAAE,KAAKtoZ,QAAQqpZ,kBAAoB,KAAKrpZ,QAAQspZ,gBAC5D,CAEcf,iBAAwB,CAClC,KAAKvoZ,QAAQinZ,YAAcp1C,GAAa03C,KAC5C,CAEA,IAAcf,mBAA6B,CACvC,MAAO,CAAC,CAAC,KAAKxoZ,QAAQwpZ,mBAAqB,KAAK72U,mBACpD,CAEA,MAAoB81U,WAA2B,CAC3C,GAAI,CACA,GAAI,CAAC,KAAKG,QAAS,OACnB,MAAM1jf,UAAU6tK,UAAUmvL,MAAM,CAC5B,IAAIunJ,cAAc,CAAE,YAAa,KAAKb,OAAQ,EACjD,EACL,OAAS31d,EAAK,CACVhH,QAAQhQ,MAAM,iCAAkCgX,EACpD,CACJ,CAEAw0c,mBAAmC,CAC/BiiB,mBAAqB,KAAK9B,OAAA,GAE1Bj1U,GAAKA,EAAsBzJ,KACtByJ,GACI,KAAKA,oBAAsBA,EAExC,CAEAmyC,QAAsC,CAClC,GAAM,CACF9kH,UACA2oZ,gBACApB,uBACAzhK,cACA6hK,eACAW,2BACA,KACEO,EAAgB,KAAKA,eAAiB,KAAKf,eAC3C6B,EAAiB,CAAC,KAAKlhc,QAEzBmhc,EACAC,EACEC,EAAc,IAEhBvC,EAAqBn7Z,MAAQm7Z,EAAqB1/a,OAClDi+Q,EAAc6hK,GAEdkC,EAAgBnmV,KAAK/0J,IACjB,GACA44e,EAAqB1/a,OAASiib,GAElCF,EAAgB9jK,EAAc6hK,EAAgBkC,IAE9CD,EAAelmV,KAAK/0J,IAChB,IACA44e,EAAqBn7Z,MAAQ09Z,GAEjCD,EAAiBlC,EAAe7hK,EAAe8jK,GAGnD,IAAM3+C,EAAyB,CAC3B7+W,MAAOs3E,KAAKr+B,MAAMukX,GAClB/hb,OAAQ67F,KAAKr+B,MAAMwkX,EACvB,EACM3+C,EAAa,CAAEh4R,QAAS,QAAKzqH,OAAgB,EAEnD,OACIgnK,SAAC,MAAD,CAAAhrG,SACKzkB,EAAQ+pZ,mBACL7yM,UAAC,MAAD,CAAK5mR,UAAU,8BAAfm0F,SAAA,CACK6jY,IACGpxM,UAAC8yM,GAAD,CACI9yV,MAAM,gBACN4/H,MAAMrnE,SAAC+9E,EAAD,CAAiB1W,KAAMyd,EAAe,GAFhD9vL,SAAA,CAGC,oEAEuB,KACpBgrG,SAAC,IAAD,CACIo1J,QAAS,KAAK0jI,gBACd,kBAAgB,yCACnB9jY,SAAA,8BAEE,GAAC,IACF,IACD,KAAKzkB,QAAQqpZ,kBACV55R,SAAA+4H,WAAA,CAAA/jO,SAAE,oHAIA,IAEFgrG,SAAA+4H,WAAA,CAAA/jO,SAAE,oJAKA,EAED,C,IAEbyyL,UAAC,MAAD,CAAK5mR,UAAU,mCAAfm0F,SAAA,CACK,KAAK+jY,oBACFtxM,UAAC,SAAD,CACI5mR,UAAU,8BACVu0V,QAAS,KAAK4jI,UACdz6R,SAAU27R,EAHdllY,SAAA,EAKIgrG,SAAC+9E,EAAD,CAAiB1W,KAAMuc,GAAS,GAAC,UAE7B,C,IAEZ5jF,SAACs7O,GAAD,CACI7zS,MAAM,cACNiwN,YAAY,6CACZ6jF,gBAAiB69C,EACO59C,yBACxBpmF,QAAS,KAAKmjI,cACF98C,aACZC,aAAa,+BACbn9O,SAAU27R,CACb,IACDl6R,SAACs7O,GAAD,CACI7zS,MAAM,uBACNiwN,YAAY,8EACZ6jF,gBAAiB29C,EACO19C,yBACxBpmF,QAAS,KAAKojI,cACF/8C,aACZC,aAAa,+BACbn9O,SAAU27R,CACb,EACA,C,GACJ,KAAKtB,aACF54R,SAACo6O,GAAD,CACIr+W,QAAS,KAAKs9Z,qBACdnvU,MAAM,qDACN+3C,aAAA,CACI,KAAKqjH,MAAA,EACL,KAAKqzK,qBAAA,EACL,KAAKR,OAAA,CACT,CACH,GAEJ,KAAK5nZ,QAAQwpZ,oBACV/5R,SAACo6O,GAAD,CACIr+W,QAAS,KAAKg8Z,kBACd7tU,MAAM,gBACN+3C,SAAUprG,MAAA,CACN,KAAKyuN,MAAA,EACL,KAAKmzK,mBAAA,EACL,KAAKN,OAAA,CACT,EACH,IAELn4R,SAACo6O,GAAD,CACIr+W,QAAS,KAAKi8Z,kBACd9tU,MAAM,oCACN+3C,SAAUprG,MAAA,CACN,KAAKyuN,MAAA,EACL,KAAKozK,8BAAA,EACL,KAAKP,OAAA,CACT,EACH,EACA,CAEL,IAAA1wM,UAAC8yM,GAAD,CACI9yV,MAAM,6CACN4/H,MAAMrnE,SAAC+9E,EAAD,CAAiB1W,KAAMka,GAAsB,GAFvDvsL,SAAA,CAGC,uFAGGgrG,SAAC,KAAD,CAAK,GAAC,oFAGD,CAEZ,IAEb,C,aACJ,GAEA,IAAMw6R,KAA4B,CAAEv2W,WAAA,CAEhC,IAAMgmC,EACFhmC,GAAO00J,KACFrxH,QAAShlC,GAAQA,EAAI2nC,SAAW,EAAE,GACjCliH,OAAQzY,GAAMA,IAAM+zG,SAAc,GAEtCo3V,EACFx2W,GAAOy8U,eACFnwc,IAAKw6D,GAAQA,EAAI1pE,MAAM,EACvB0mD,OAAQxY,GAAMA,GAAG2oU,kBAAoB70N,QACrC9yI,IAAKg/B,IAAmB,CACrBu7H,SAAUv7H,EAAE2oU,gBACZk9H,QAAS7lc,EAAEpW,IACf,KAAO,GAOTuxI,EAAeV,IALD36H,GAChB,CAAI46H,KAAYwwU,IAAY,EAC3Bnrc,GAAMA,EAAE8lc,SAAW9lc,EAAEorc,aAGiBC,GAErC/8C,EAAclzR,EAAan6J,KAAK,CAAE25J,QAAOntH,SAC3CA,GACIijK,SAAC,KAAD,CAAAhrG,UACIgrG,SAAC,IAAD,CAAGpwI,KAAM7yB,EAAMi4D,SAAAk1D,CAAS,EACxB,EAFKntH,IAITijK,SAAC,KAAD,CAAAhrG,SAAiBk1D,CAAU,EAAlBA,IAKX0B,EAAsB3nC,GAAOy8U,eAC9Bnwc,IAAKw6D,GAAQA,EAAIu3D,IAAIspC,mBAAmB,EACxC5L,QAAQ+qB,EAAMp3J,KACX,GAAIo3J,IAAS,SAAWp3J,IAAS,QAAS,MAAO,QACjD,GAAIo3J,IAAS,SAAWp3J,IAAS,QAAS,MAAO,OAErD,EAAG0vH,QAEDywN,EAAwBnoM,GAC1BjB,EAAan6J,KAAK,CAAE25J,WAAYA,GAChC0B,GAEEgvU,EAAuB9mI,GACzBrsE,UAAAsxC,WAAA,CAAA/jO,SAAA,CACK,IAAI,MACHyyL,UAAC,IAAD,CAAAzyL,SAAA,CAAI8+P,EAAsB,uBAAwB,GACtD,IACFzwN,OAEJ,OACIokJ,UAAC,MAAD,CAAK5mR,UAAU,uDAAfm0F,SAAA,EACIgrG,SAAC,KAAD,CAAIn/L,UAAU,sBAAsBm0F,SAAA,qBAAuB,GAC1D4oV,EAAYv+b,OAAS,IAClBooS,UAAC,MAAD,CAAK5mR,UAAU,+BAAfm0F,SAAA,EACIgrG,SAAC,SAAD,CAAAhrG,SAAQ,eAAqB,GAAE,KAC/BgrG,SAAC,KAAD,CAAIn/L,UAAU,oCACTm0F,SAAA4oV,CACD,GACHg9C,CACA,C,IAETnzM,UAAC,MAAD,CAAAzyL,SAAA,EACIgrG,SAAC,SAAD,CAAAhrG,SAAQ,oBAA0B,GAAC,0IAEW,IAC7C4oV,EAAYv+b,SAAW,EAAI,aAAe,aAAa,iBAEvD,GACJ,C,EAEb,EAEMw7e,IAA6B/2e,IAI/B,GAAM,CACFssK,SACAC,cACA8rR,cACAs5C,iBACAp5C,gBACAq5C,oBACAF,IAAyB,CACzBI,gBAAiB9xe,EAAM8xe,gBACvBr5C,aAAcz4b,EAAMy4b,YACxB,GACMu+C,EAAe3qU,IAAyBC,EAAQC,GAEtD,OACIo3H,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIyyL,UAAC,MAAD,CAAK5mR,UAAU,+BAAfm0F,SAAA,EACIyyL,UAAC,MAAD,CAAK5mR,UAAU,uCAAfm0F,SAAA,EACIgrG,SAAC,KAAD,CAAIn/L,UAAU,sBAAsBm0F,SAAA,UAAY,IAChDyyL,UAAC,IAAD,CAAG5mR,UAAU,0BAAbm0F,SAAA,CAAuC,kHAEsB,KACzDgrG,SAAC,IAAD,CACIpwI,KAAK,yCACL,kBAAgB,gCACnBolC,SAAA,6CAEE,GAAE,IAAI,oEAGV,CACF,G,IAELyyL,UAAC,UAAD,CAAS5mR,UAAU,2BAAnBm0F,SAAA,EACIyyL,UAAC,MAAD,CAAAzyL,SAAA,EACIgrG,SAAC,KAAD,CAAIn/L,UAAU,wBAAwBm0F,SAAA,uBAElC,IACJgrG,SAACu2J,GAAD,CAAazjM,KAAM1C,CAAS,EAC3B,KACLq3H,UAAC,MAAD,CAAAzyL,SAAA,EACIgrG,SAAC,KAAD,CAAIn/L,UAAU,wBAAwBm0F,SAAA,4BAElC,IACJgrG,SAACu2J,GAAD,CAAazjM,KAAMzC,CAAc,EAChC,GACA,C,IACT2vC,SAACk8O,IAAD,CACiBC,cACbC,oBAAqBq5C,EACNp5C,gBACfC,sBAAuBo5C,EACvBn5C,aAAcz4b,EAAMy4b,YACvB,EACA,CACL,IAAA90J,UAAC,MAAD,CAAK5mR,UAAU,qDAAfm0F,SAAA,EACIyyL,UAAC,MAAD,CAAK5mR,UAAU,uCAAfm0F,SAAA,EACIgrG,SAAC,KAAD,CAAIn/L,UAAU,sBAAsBm0F,SAAA,eAAiB,IACrDgrG,SAAC,IAAD,CAAGn/L,UAAU,0BAA0Bm0F,SAAA,uEAGpC,EACF,CACL,IAAAgrG,SAAC,MAAD,CAAKn/L,UAAU,8BACVm0F,SAAAuhC,OAAOtjF,QAAQ6nb,GAAcvqe,KAAK,CAACnX,EAAMonD,MACtCinP,UAAC,MAAD,CAAAzyL,SAAA,EACIgrG,SAAC,KAAD,CAAIn/L,UAAU,wBAAyBm0F,SAAA57G,CAAS,IAChD4mN,SAACu2J,GAAD,CAAazjM,KAAMtyH,CAAU,EAC5B,GAHKpnD,GAKb,EACJ,CACP,KAEV,EAEaw+e,IAAwB9ze,IACjC,GAAM,CAAEi3e,oCAAqCzmB,GAAaxwd,EAAMysF,QAE1D,CAAEgoX,KAAM28B,EAAwBt3C,eAClCq3C,IAA0Bnxe,EAAMysF,QAAQyqZ,gBAAgB,EAGtDC,EACFn3e,EAAMysF,QAAQ2qZ,8BAEZvF,KAGFx0R,eAAA,CACA,IAAMyzR,EAAuB,IAAID,gBACjC,IAAK,GAAM,CAACh9e,EAAKC,KAAU2+I,OAAOtjF,QAC9BnvD,EAAMysF,QAAQ4qZ,qBAAuB,CAAC,GAElCvjf,GACAg9e,EAAqB73e,IAAIpF,EAAKC,GAGtC,MAAO,CACHgvJ,KAAM9iJ,EAAMysF,QAAQmpZ,YACpB1xR,aAAc,IAAI2sR,gBAAgB7we,EAAMysF,QAAQynF,QAAQ,EACxD48T,uBACA9hI,QACIhvW,EAAMysF,QAAQuiR,SACd,YAAYhvW,EAAMysF,QAAQmpZ,cAI9BnF,UAAWzwe,EAAMysF,QAAQyqZ,kBAAoB9nB,KAC7CshB,cACI1we,EAAMysF,QAAQ6qZ,0BAA4BloB,KAE9CsY,iBAAkB1ne,EAAMysF,QAAQi7Y,gBACpC,CACJ,EAAG,CACC1ne,EAAMysF,QAAQuiR,QACdhvW,EAAMysF,QAAQmpZ,YACd51e,EAAMysF,QAAQynF,SACdl0K,EAAMysF,QAAQ4qZ,oBACdr3e,EAAMysF,QAAQyqZ,iBACdl3e,EAAMysF,QAAQ6qZ,yBACdt3e,EAAMysF,QAAQi7Y,gBACjB,GAEK6P,KAAkBt4R,eACpB,KAAOuxR,KACH,IAAMxpc,EAAM,CACR,GAAG6qc,EACHrB,kBAOAj4C,cAAe,EACnB,EACA,GAAI4+C,EACA,GAAI,CAEA,IAAM96c,EAAW,MAAM45H,IADX+6U,GAAe,MAAOhqc,CACMiS,EAAK,IAAM,CAC/CvnD,OAAQ,MACR0tC,QAAS,CAAEo4c,OAAQ,iBAAkB,CACzC,GAEA,GAAI,CAACn7c,EAASu5H,GACV,MAAUxC,MACN,2BAA2B/2H,EAASrX,QACxC,EAGJ,IAAMknJ,EAAO,MAAM7vI,EAAS6vI,KAAA,EAC5BF,GACIklU,GAAwB,CACpBpuV,KAAM97G,EAAI87G,KACVu4L,UAAW,MACXm1J,iBACJ,GACAtkU,EAER,OAASxjK,EAAO,CAEZgQ,QAAQW,KACJ,2DACA3Q,GAEJ,IAAMwjK,EAAO,MAAMqkU,IAAqBvpc,GACxCglI,GACIklU,GAAwB,CACpBpuV,KAAM97G,EAAI87G,KACVu4L,UAAW,MACXm1J,iBACJ,GACAtkU,EAER,MAGAqkU,IAA0Bvpc,GAAK2uH,KAAMuW,IACjCF,GACIklU,GAAwB,CACpBpuV,KAAM97G,EAAI87G,KACVu4L,UAAW,MACXm1J,iBACJ,GACAtkU,EAER,EAER,EACA,CAAC2lU,EAAasF,CAClB,GAEA,GAAI/F,GAAwB71e,OACxB,OACI2gN,SAAC,MAAD,CAAAhrG,UACIgrG,SAACu6R,GAAD,CACI9yV,MAAM,sDACN4/H,MAAMrnE,SAAC+9E,EAAD,CAAiB1W,KAAMyd,EAAe,GAE5C9vL,UAAAgrG,SAAC29O,GAAD,CAA2CC,aAAc,EACpD,EACR,GAIb,IAAM29C,EAAmBN,GACrBj7R,SAAC,IAAD,CAAGn/L,UAAU,0BACRm0F,SAAA66D,GACF,IAEHmwC,SAAC,IAAD,CAAGn/L,UAAU,0BAA0Bm0F,SAAA,8JAIpC,GAGDunV,EAAe+3B,IAAW,EAAE,EAAEhyV,IAC9Bk5W,EAAa13e,EAAMysF,QAAQkrZ,aAC3B,QACA33e,EAAMysF,QAAQg8Y,WACZ,MACA,QACFmP,EAAsBlrU,IACxBmlU,EAAYpB,UAAUhkU,OAC1B,EACMorU,EAA0BlrU,IAAgC,CAC5DC,UAAW8qU,EACXjrU,QAASolU,EAAYnB,cAAcjkU,OACvC,GAEA,OACIk3H,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIgrG,SAACw6R,IAAD,CAA0Bv2W,MAAOngI,EAAMysF,QAAQyqZ,gBAAmB,IAClEvzM,UAAC,MAAD,CAAK5mR,UAAU,+BAAfm0F,SAAA,EACIyyL,UAAC,MAAD,CAAK5mR,UAAU,uCAAfm0F,SAAA,EACIgrG,SAAC,KAAD,CAAIn/L,UAAU,sBAAsBm0F,SAAA,gBAAkB,GACrDumY,CACA,CACL,IAAAv7R,SAAC,MAAD,CAAAhrG,UACIyyL,UAAC,MAAD,CAAK5mR,UAAU,mCAAfm0F,SAAA,EACIgrG,SAACs7O,GAAD,CACI7zS,MAAM,qBACNiwN,YAAagkI,EACbr0N,KAAK,OACLq0K,aAAc,2BACVu/C,EACM,WACA,aAEV7lI,YACIimI,EAAgBlH,GAAgByH,IAAI,CAE3C,IACD57R,SAACs7O,GAAD,CACI7zS,MAAM,0BACNiwN,YAAaikI,EACbt0N,KAAK,WACLq0K,aAAc,+BACVu/C,EACM,WACA,aAEV7lI,YACIimI,EACIlH,GAAgB0H,gBACpB,CAEP,EACA,CACJ,IACJ,C,GACJZ,IACGj7R,SAAC66R,IAAD,CACIjF,gBAAiBD,EACHp5C,cACjB,EAEP,GAEV,EAQA,SAASg+C,GAAQz2e,EAAA,CACb,OACI2jS,UAAC,MAAD,CAAK5mR,UAAU,0BAAfm0F,SAAA,CACKlxG,EAAM2jJ,QACHggJ,UAAC,KAAD,CAAI5mR,UAAU,gCAAdm0F,SAAA,CACKlxG,EAAMujR,KACNvjR,EAAM2jJ,KACP,CAER,IAAAu4D,SAAC,IAAD,CAAGn/L,UAAU,wCACRm0F,SAAAlxG,EAAMkxG,QACR,EACF,C,EAEb,CCt3BA,IAAa8mY,IAAuBh4e,IAChC,IAAMzC,EAASqyW,GAAW5vW,GACpBsnK,EAAc2oM,GAAgBjwW,GAC9BunK,EAAa2oM,GAAelwW,GAC5BowW,EAAYD,GAAcnwW,GAC1BkpB,EAAOmnV,GAASrwW,GAChBuwW,EAAuBD,IAAyBtwW,GAChDg0B,EAAQy8U,GAAUzwW,GAkBlB23J,EAAOtE,GAhBgBJ,IAAY,CACrCqU,EAAc,CAAElB,MAAO,eAAgBtlK,QAASwmK,CAAY,EAAI,KAChEC,EACM,CAAEnB,MAAO,uBAAwBtlK,QAASymK,CAAW,EACrD,KACN6oM,EAAY,CAAEhqM,MAAO,aAActlK,QAASsvW,CAAU,EAAI,KAC1DlnV,EAAO,CAAEk9I,MAAO,OAAQtlK,QAASooB,CAAK,EAAI,KAC1CqnV,EACM,CACInqM,MAAO,yBACPtlK,QAASyvW,CACb,EACA,KACNv8U,EAAQ,CAAEoyI,MAAO,QAAStlK,QAASkzB,CAAM,EAAI,IAChD,CAEoBikd,EAAsB,GAE3C,OACIt0M,UAAC,MAAD,CAAK5mR,UAAU,yBAAfm0F,SAAA,CACK3zG,IACGomS,UAAC,MAAD,CAAK5mR,UAAU,0BAAfm0F,SAAA,EACIgrG,SAAC,MAAD,CAAKn/L,UAAU,kBAAkBm0F,SAAA,QAAW,IAC5CgrG,SAAC,MAAD,CAAKn/L,UAAU,oBAAqBm0F,SAAA3zG,CAAY,EAC/C,CAER,GAAAo6J,EAAKlrJ,KAAK,CAACovF,EAAOgrS,MACfljG,UAACkyC,WAAD,CAAA3kO,SAAA,EACIyyL,UAAC,MAAD,CACI5mR,UAAWw9J,EAAG,WAAY,CACtB,iBAAkB,CAACssN,CACvB,GAHJ31R,SAAA,EAKIgrG,SAAC,MAAD,CAAKn/L,UAAU,kBAAmBm0F,SAAArV,EAAMuqE,KAAW,IACnD81C,SAAC,MAAD,CAAKn/L,UAAU,oBAAqBm0F,SAAArV,EAAM/6F,OAAa,EACtD,CACJ,GAAA+lY,IACGljG,UAAC,MAAD,CAAK5mR,UAAU,WAAfm0F,SAAA,EACIgrG,SAAC,MAAD,CAAKn/L,UAAU,kBACVm0F,SAAA21R,EAAOzgO,KACP,IACL81C,SAAC,MAAD,CAAKn/L,UAAU,oBACVm0F,SAAA21R,EAAO/lY,OACP,EACJ,CAEH,KAnBK+6F,EAAMuqE,KAmBX,EAEb,C,EAEb,ECnEa8xU,IAAuBl4e,IAChC,IAAM6vW,EAAwB7vW,EAAM6vW,uBAAyB,GAC7D,OACIlsE,UAAC,MAAD,CAAK5mR,UAAU,uBAAfm0F,SAAA,CACKlxG,EAAMyjN,iBACHkgF,UAAC,MAAD,CAAK5mR,UAAU,0BAAfm0F,SAAA,EACIgrG,SAAC,KAAD,CAAIn/L,UAAU,iCAAiCm0F,SAAA,sCAE3C,IACJgrG,SAAC,MAAD,CAAKn/L,UAAU,mCACXm0F,UAAAgrG,SAACgwJ,GAAD,CACIv7R,KAAM3wE,EAAMyjN,eAAeloF,KAAA,EAC3B8wO,kBAAmBrsW,EAAMqsW,iBAC5B,EACA,GACJwD,GAAyB7vW,EAAMm4e,gBAC5Bx0M,UAAC,IAAD,CACI5mR,UAAU,sCACV+uD,KAAK,QAFTolC,SAAA,CAGC,0BAEGgrG,SAAC+9E,EAAD,CAAiB1W,KAAM+c,EAAc,EACtC,C,EAEN,CAET,IAAAqD,UAAC,MAAD,CAAK5mR,UAAU,yBAAfm0F,SAAA,CACKlxG,EAAM80W,0BACH54J,SAACgzJ,GAAD,CACI9oM,MACIpmK,EAAMs+I,iBACA,gDAAgDt+I,EAAMs+I,iBAAiB,GACvE,8CAEVx9I,SACIo7M,SAACgwJ,GAAD,CACIv7R,KAAM3wE,EAAM80W,wBAAwBv5O,KAAA,EACpC8wO,kBAAmBrsW,EAAMqsW,iBAC5B,GAEL+C,kBACI,EAAEpvW,EAAMo4e,kBAAoBp4e,EAAMyjN,eAEzC,GAEJzjN,EAAM6rc,iBACH3vP,SAACgzJ,GAAD,CACI9oM,MAAM,yCACNtlK,SACIo7M,SAACqwJ,IAAD,CACI57R,KAAM3wE,EAAM6rc,eAAetwU,KAAA,EAC3B8wO,kBAAmBrsW,EAAMqsW,iBAC5B,EAER,EAEJ,CACJ,G,EAEb,ECpEA,SAAgBgsI,IAAgB,CAC5B3zE,kBACAxzT,WACA,GAAGlxG,GAAA,CAEH,IAAM2+d,GAAUziR,SAAC0iR,GAAD,CAAS,GAAI5+d,EAAQkxG,UAAkB,GAGvD,OADKwzT,GAEDxoN,SAACq+Q,GAAD,CAAuBr2D,iBAAoBQ,EACtCxzT,SAAAytX,CACkB,GAJEA,CAMjC,CCRA,IAAa2Z,KAAoD,CAC7D9re,QACAq/a,cACA1tO,WACAo6R,iBACAx7d,YACA2nZ,qBAAA,CASA,GAAM,CAAC1wD,EAAQyzD,MAAazsN,YAAS,IAEjCw9R,EAAenlV,GAAO7mJ,EAAO+re,GAC7BE,EAAcjse,EAAMy3C,OACnB9jB,GAAS,CAACq4c,EAAalmX,KAAMj9G,GAAMA,EAAExhB,MAAQssC,EAAKtsC,GAAG,GAIpD6kf,EAAqBD,EAAYlnV,KAClCpxH,GAASA,EAAKtsC,MAAQg4b,GAE3B,GAAI6sD,GAAsBF,EAAaj9e,OAAS,EAAG,CAC/C,IAAMo9e,EAAkBH,EAAaA,EAAaj9e,OAAS,GAC3Di9e,EAAenlV,GACXmlV,EACAnlV,IAAW,GACXA,IAAS,CAACqlV,CAAmB,IAEjCD,EAAcA,EACTx0b,OAAQ9jB,GAASA,EAAKtsC,MAAQg4b,GAC9B5ub,OAAO07e,EAChB,CAQA,IAAMha,GACFziR,SAACm8R,IAAD,CACIt7d,UAAU,4BACVo/K,UAAU,aACOuoO,kBAEjBxzT,UAAAgrG,SAAC08R,IAAD,CAAM77d,UAAU,yBAAyB6uY,SAZ3B/3Z,IACd,OAAOA,GAAQ,UAAUsqN,EAAStqN,GACtC4za,EAAU,GACd,EAUav2T,SAAAunY,EAAYhse,IAAK0zB,IACd+7K,SAAC28R,IAAD,CAEIpkf,GAAI0rC,EAAKtsC,IACTkpB,UAAWw9J,EACP,6BACAp6I,EAAKmiW,aAAavlX,WAEtB,kBAAiBojB,EAAKmiW,aAAah2B,cACnC,aAAYnsU,EAAKmiW,aAAa9rG,UAC9BjoQ,IAAK4R,EAAKmiW,aAAa/zW,IAEtB2iF,SAAA/wE,EAAKnpB,OACA,EAXDmpB,EAAKtsC,GAWJ,EAEZ,EACO,GAGrB,OACIqoN,SAAC,MAAD,CAAKn/L,UAAWw9J,EAAG,mBAAoBx9J,GACnCm0F,UAAAyyL,UAAC,MAAD,CAAK5mR,UAAU,wBAAfm0F,SAAA,EACIgrG,SAAC22R,GAAD,CACI91d,UAAU,yBACVvQ,MAAOgse,EACM3sD,cACH1tO,WACVp6D,QAAQ,SACX,GACA00V,EAAYl9e,OAAS,IAClBooS,UAACm1M,IAAD,CAAqB9kI,SAAQymH,aAAchzD,EAA3Cv2T,SAAA,EACIyyL,UAACuyJ,GAAD,CACIn5a,UAAU,+BACV,aAAW,iBACX,YAAWi3V,GAAUz0N,OAHzBruC,SAAA,EAKIgrG,SAAC+9E,EAAD,CACI1W,KAAM0Y,IACN,cAAY,MACf,IACD//E,SAAC,OAAD,CAAMn/L,UAAU,QAAQm0F,SAAA,MAAU,EAC9B,CACP,GAAAytX,CACQ,CAEhB,G,EACJ,EAEb,E,80GC3CkC5mR,mBAwTNA,OAjVtBghS,IAAoB,IAEpBC,IAAgB,GAChBC,IAAU,EACVC,IAAoB,EAqBQnhS,KAAMpoG,U,SAAjC,cAA2BooG,G,wCADjC5zH,C,IAaI4uB,E,EAAgBmhX,mB,IAIhBnhX,IAAOo6D,K,KAAcgsU,iB,GAIrBtqX,E,EAAqBpiC,S,GAIrBoiC,E,EAAqBmhX,a,GAIrBnhX,E,EAAqBohX,a,GAOrBphX,E,EAAqBuqX,kB,GAKrBvqX,E,EAAqBwqX,c,GAIrBxqX,E,EAAqByqX,a,GAKrBzqX,E,EAAqB+oC,S,GAsBrB/oC,E,EAAqBulG,M,GAuCrBvlG,E,EAAqB0qX,W,GAIrB1qX,E,EAAqB2qX,gB,IAoJrBzmY,IAAOo6D,K,KAAci2P,W,CAtQQrrN,e,CAK9B,YAAY/3M,EAA0B,CAClC,MAAMA,GACNyxL,EAA6C,KAAM,CAC/CgoT,aAAcn6T,CAClB,EACJ,CATAi5B,qBAA6BR,EAAMk8Q,UAAA,GAEnCwlB,aAAuB,GASNvlB,mBAA0B,CACvC,KAAKulB,aAAe,KAAKrlR,KAAK,EAAE,EAAEhuD,MAAMvyK,KAAO,EACnD,CAEsBslf,gBAAgBtlf,EAAmB,CACrD,KAAK4lf,aAAe5lf,CACxB,CAEA,IAAsB44F,SAA+B,CACjD,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAsBujZ,aAAsB,CACxC,OAAO,KAAKvjZ,QAAQujZ,aAAe3zC,EACvC,CAEA,IAAsB4zC,aAAsB,CAGxC,IAAMC,EAAW//U,KAAKh1J,IAAI,IAAK,KAAK60e,YAAYn3Z,MAAQ+6P,KAAY,GACpE,OAAO,KAAKo8J,YAAYG,UAAU,IAAID,SAASA,EACnD,CAEA,IAAsBkJ,kBAA4B,CAE9C,OADmB,KAAKnJ,YAAYp3Z,MAAQ,EAAI,KAAKwga,aAChCN,KAAqB,IAC9C,CAEA,IAAsBM,cAAuB,CACzC,MAAO,MAAO,KAAK5sZ,QAAQysF,UAAY,GAC3C,CAEA,IAAsBogU,aAAkC,CACpD,GAAK,KAAK7sZ,QAAQwpZ,kBAClB,MAAO,GAAG,KAAKj2e,MAAMysF,QAAQitZ,aAAa,OAC9C,CAEA,IAAsB9hV,SAAwB,CAC1C,OAAO,KAAKnrE,QAAQktZ,uBACxB,CAEAC,mBAA2Bj2V,EAAeY,EAA8B,CACpE,MAAO,GAAGZ,EAAM,GAAGY,GAAe,KAAKhpB,KAAA,CAC3C,CAEAs+W,oBACIl2V,EACAY,EACkB,CAClB,OACIo/I,UAAAsxC,WAAA,CAAA/jO,SAAA,CACKyyC,EACAY,IACG23D,SAAC,OAAD,CAAMn/L,UAAU,cAAem0F,SAAAqzC,CAAkB,EAEvD,GAEV,CAEA,IAAsB6vE,MAIlB,CACA,OAAO7oL,GACH,KAAKqsH,QAAQnrJ,IAAK09D,IACd,IAAIw5E,EAAQx5E,EAAO49X,yBAAyBpkT,MAMxCx5E,EAAOsmQ,cACP,KAAK74K,QAAQtlC,KACRtwG,GAAM2hI,IAAU3hI,EAAE+lb,yBAAyBpkT,KAChD,IAEAA,GAAS,iBAEb,IAAMY,EAAclG,GAChBl0E,EAAO49X,yBAAyBzpT,iBAChCn0E,EAAO49X,yBAAyBxpT,YACpC,EAEA,MAAO,CACHoF,QACAx5E,SACAi8F,MAAO,CACHvyK,IAAK,KAAK+lf,mBAAmBj2V,EAAOY,GACpCvtI,QAAS,KAAK6ie,oBAAoBl2V,EAAOY,EAC7C,CACJ,CACJ,GAEC9L,GAAQA,EAAI2tB,MAAMvyK,GACvB,CACJ,CAEA,IAAsB0lf,WAAuB,CACzC,OAAO,KAAKnlR,KAAK3nN,KAAK,CAAE25J,WAAYA,EACxC,CAEA,IAAsBozU,gBAA2B,CAC7C,OAAO,KAAKplR,KAAK3nN,KAAK,CAAE09D,YAMb2va,IAAgBn2V,GALNx5E,EAAO49X,yBAAyBpkT,QAC/BtF,GACdl0E,EAAO49X,yBAAyBzpT,iBAChCn0E,EAAO49X,yBAAyBxpT,YAEN8O,EAClC,CACJ,CAEA0sV,aAAqB,CACjB5va,SACAw5E,SAImB,CACnB,OACIu4D,SAAC89R,IAAD,CACWr2V,QACCx5E,SACRmva,YAAa,KAAKA,YAClBzpI,sBACI,KAAKpjR,QAAQojR,uBAAyB,GAE1CxD,kBAAmB,KAAK5/Q,QAAQqxE,UACnC,EAET,CAEAm8U,YAAyC,CAerC,GAbI,KAAKxtZ,QAAQytZ,UAab,KAAK9lR,KAAK74N,QAAU,EACpB,OACI2gN,SAAC22R,GAAD,CACI91d,UAAU,qBACVvQ,MAAO,KAAK+se,UACZ1tD,YAAa,KAAK4tD,aAClBt7R,SAAU,KAAKg7R,gBACfp1V,QAAQ,QACX,GA6BT,IAAMo2V,GAxBoBrrK,IAEtB,IAAM8E,EAAWzjL,KAAK/0J,IAClB29e,IACA,KAAK9I,YAAYp3Z,MAAQ,EAAI,KAAKwga,YACtC,EAKMc,EAA2B,GAC7BC,EAAeC,GACnB,IAAK,GAAM,CAACj0U,EAAOk0U,KAAejnV,GAC9By7K,EACA,KAAK0qK,cACT,EAAG,CAEC,GADAY,GAAgBE,EAAarB,IACzBmB,EAAexmK,EAAU,MAC7BumK,EAAc59e,KAAK6pK,EACvB,CAEA,OAAO+zU,CACX,EAEsBI,CAAiB,KAAKhB,SAAS,EAGrD,GAAIY,EAAc5+e,SAAW,KAAKg+e,UAAUh+e,OACxC,OACI2gN,SAAC22R,GAAD,CACI91d,UAAU,qBACVvQ,MAAO,KAAK+se,UACZ1tD,YAAa,KAAK4tD,aAClBt7R,SAAU,KAAKg7R,gBACfp1V,QAAQ,QACX,GAKT,IAAMw0V,EAAiBpoV,KAAKh1J,IAAI,EAAGg/e,EAAc5+e,MAAM,EAEvD,OACI2gN,SAACo8R,IAAD,CACIv7d,UAAU,qBACVvQ,MAAO,KAAK+se,UACZ1tD,YAAa,KAAK4tD,aAClBt7R,SAAU,KAAKg7R,gBACCZ,iBAChB7zE,gBAAiB,KAAKnsN,UAAUxgN,SAAWwnJ,MAC9C,EAET,CAEAi7V,uBAAoD,CAChD,IAAMlH,EAAY,KAAKl/Q,KAAK7iE,KACvB9Y,GAAQA,EAAI2tB,MAAMvyK,MAAQ,KAAK4lf,YACpC,EAEA,OACI91M,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIgrG,SAAC,IAAD,CAAGn/L,UAAU,2BAA2Bm0F,SAAA,0FAGrC,GACF,KAAK+oY,WAAA,EACL3G,GAAa,KAAKyG,aAAazG,EAClC,GAEV,CAEAmH,iBAA8C,CAC1C,OACIv+R,SAAC,IAAD,CAAGn/L,UAAU,kBAAkBm0F,SAAA,sEAG5B,EAEX,CAEAwpY,oBAAwD,CAIpD,OADI,KAAKtmR,KAAK74N,SAAW,EAAU,KAAKk/e,gBAAA,EACjC,KAAKrmR,KAAK74N,SAAW,EACtB,KAAKw+e,aAAa,CAAE5va,OAAQ,KAAKiqJ,KAAK,EAAE,CAACjqJ,MAAO,GAChD,KAAKqwa,sBAAA,CACf,CAEsBp3E,WAAkB,CACpC,KAAK32U,QAAQinZ,YAAcn0V,MAC/B,CAEAgyD,QAAsC,CAClC,OACI2K,SAACg+Q,GAAD,CACI1jM,UAAU,UACV2jM,WAAY,KAAK1tY,QAAQ9uE,KACzBw7J,OAAQ,KAAK82T,YACb7V,cAAe,GACfh3D,UAAW,KAAKA,UAEhBlyT,UAAAyyL,UAAC,MAAD,CAAK5mR,UAAU,wBAAwBwR,IAAK,KAAKgqL,UAAjDrnG,SAAA,CACK,KAAKkoY,kBACFl9R,SAACy6O,GAAD,CAAehzS,MAAM,GAAGy/Q,UAAW,KAAKA,SAAY,IAEpDlnN,SAACw6O,GAAD,CACI35a,UAAU,0BACVu0V,QAAS,KAAK8xD,SACjB,IAELlnN,SAAC,MAAD,CACIn/L,UAAWw9J,EAAG,aAAc,CACxB,sBAAuB,CAAC,KAAK6+T,gBACjC,GAEAloY,UAAAgrG,SAAC,MAAD,CAAKn/L,UAAU,WACVm0F,SAAA,KAAKzkB,QAAQv3C,QACV,KAAKwlc,mBAAA,GAELx+R,SAACu9O,GAAD,CAAmB,EAEtB,EACJ,EACJ,C,EACF,EAEf,C,aACJ,GAW4B1hP,KAAMpoG,U,SAA3B,cAAqBooG,G,wCAD3B5zH,C,IAOI0qC,E,EAAa1kD,Q,GAIb0kD,E,EAAa2P,K,GAIb3P,E,EAAqB8rX,W,GAYrB9rX,E,EAAqBtxH,Q,GAIrBsxH,E,EAAqB25C,oB,GAIrB35C,E,EAAqB80B,O,GAIrB90B,E,EAAqB+rX,S,GAiBrB/rX,E,EAAa+3C,c,GAQb/3C,E,EAAay4C,a,GAIbz4C,E,EAAa04C,Y,GAIb14C,E,EAAa3lG,M,GAIb2lG,E,EAAqBgsX,uB,GAKrBhsX,E,EAAqBisX,kB,GAQrBjsX,E,EAAqBo5C,mB,GAIrBp5C,E,EAAuBksX,uB,GAIvBlsX,E,EAAqBmsX,uB,GASrBnsX,E,EAAqBosX,uB,CAzGEljS,e,CACxB,YAAY/3M,EAAoB,CAC5B,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAActnH,QAAqB,CAC/B,OAAO,KAAKnqE,MAAMmqE,MACtB,CAEA,IAAcq0D,KAA+C,CACzD,MAAO,CAAE,GAAG,KAAKr0D,OAAOq0D,IAAKjhI,OAAQ,KAAK4sE,OAAO5sE,MAAO,CAC5D,CAEA,IAAsBo9e,WAA6C,CAC/D,OAAOtxU,GAAsB,CACzBZ,eAAgB,KAAKD,mBACrBrC,QAAS,KAAK3nC,IAAI2nC,SAAW,GAC7B5oK,OAAQ,KAAKA,OACbqpK,aAAcP,GAAoC,KAAK7nC,GAAG,EAC1D8f,iBAAkB,KAAK9f,IAAIwsU,cAAc1sT,iBACzCC,aAAc,KAAK/f,IAAIwsU,cAAczsT,aACrCupB,oBAAqB,KAAKtpC,IAAIspC,mBAClC,EACJ,CAEA,IAAsBvqK,QAAqB,CACvC,OAAO,KAAKihI,IAAIjhI,QAAU,CAAC,CAC/B,CAEA,IAAsBirK,oBAAkD,CACpE,OAAO,KAAKr+F,OAAO49X,wBACvB,CAEA,IAAsBpkT,OAAgB,CAClC,OAAO,KAAK3jJ,MAAM2jJ,OAAS,KAAK6kB,mBAAmB7kB,KACvD,CAEA,IAAsBi3V,SAA8B,CAChD,GAAK,KAAK56e,MAAMs5e,YAGhB,IAAI,KAAK96W,IAAI08W,eACT,MAAO,GAAG,KAAKl7e,MAAMs5e,YAAY,aAAa,KAAK96W,IAAI08W,iBAI3D,GAAI,KAAK18W,IAAIwpU,UACT,MAAO,GAAG,KAAKhoc,MAAMs5e,YAAY,YAAY,KAAK96W,IAAIwpU,WALCkzC,CAU/D,CAEA,IAAct0U,cAAmC,CAC7C,IAAMu0U,EAAuB90U,GACzB,KAAK7nC,GACT,EACA,GAAI28W,EAAqB5/e,SAAW,EACpC,OAAOorK,GAAmBw0U,EAC9B,CAEA,IAAc7zU,aAAkC,CAC5C,OAAOH,GAA2B,KAAK3oC,GAAG,CAC9C,CAEA,IAAc+oC,YAAiC,CAC3C,OAAOF,GAA0B,KAAK7oC,GAAG,CAC7C,CAEA,IAAct1G,MAA2B,CACrC,OAAO,KAAKihD,OAAOjhD,IACvB,CAEA,IAAsB2xd,uBAAiC,CACnD,IAAMO,EAAW,KAAK58W,IAAIwsU,cAAcx2F,MAAMj5W,QAAU,EACxD,MAAO,CAAC,CAAC,KAAKyE,MAAM6vW,uBAAyBurI,EAAW,CAC5D,CAEA,IAAsBN,kBAA4B,CAC9C,MACI,CAAC,CAAC,KAAKt8W,IAAIilF,gBACX,CAAC,CAAC,KAAKjlF,IAAIs2O,yBACX,CAAC,CAAC,KAAKv3W,OAAOsuc,cAEtB,CAEA,IAAsB5jS,mBAAqC,CACvD,OAAOD,GAAyB,KAAKxpC,GAAG,CAC5C,CAEA,IAAwBu8W,uBAAgC,CACpD,MAAO,+DACX,CAEA,IAAsBC,uBAAiC,CAGnD,MACI,CAAC,CAAC,KAAKx8W,IAAI08W,gBACX99C,IAAuB,KAAK5+T,IAAI08W,cAAc,CAEtD,CAEA,IAAsBD,uBAA4C,CAC9D,OAAO,KAAKz8W,IAAI45W,kBAAoB,KAAK55W,IAAIo1O,WACjD,CAEAynI,aAA4C,CACxC,OACI13M,UAAC,KAAD,CAAAzyL,SAAA,EACIgrG,SAAC,OAAD,CAAMn/L,UAAU,QAASm0F,SAAA,KAAKyyC,KAAY,GAAE,KAC1C,KAAK6kB,mBAAmBlqB,kBACtB,KAAKkqB,mBAAmBjqB,gBACxBolJ,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIgrG,SAAC,OAAD,CAAMn/L,UAAU,kBACXm0F,SAAAmtC,GACG,KAAKmqB,mBAAmBlqB,iBACxB,KAAKkqB,mBAAmBjqB,YAC5B,CACE,GAAE,GACV,IAEL,KAAKq8V,UACF1+R,SAAC,IAAD,CACIpwI,KAAM,KAAK8ua,QACX,GAAI78U,GAAsB,KAAK/9J,MAAMqsW,iBAAiB,EAEtDn7P,UAAAgrG,SAAC+9E,EAAD,CAAiB1W,KAAMyZ,GAAc,EACtC,EAEP,GAEZ,CAEAzrF,QAAsC,CAClC,OACIoyF,UAAC,MAAD,CAAK5mR,UAAU,SAAfm0F,SAAA,CACK,KAAKmqY,YAAA,EACL,KAAKJ,wBACF/+R,SAAC,MAAD,CAAKn/L,UAAU,0BACXm0F,UAAAgrG,SAACgwJ,GAAD,CACIv7R,KAAM,KAAKsqa,sBACX5uI,kBAAmB,KAAKrsW,MAAMqsW,iBACjC,EACA,IAETnwJ,SAAC87R,IAAD,CACIzzV,YAAa,KAAKqiB,aAClBkB,oBAAqB,KAAKtpC,IAAIspC,oBAC9BsoM,UAAW,KAAK5xO,IAAIgrC,SACpBlC,YAAa,KAAKA,YAClBC,WAAY,KAAKA,WACjBr+I,KAAM,KAAKA,KACXmM,KAAM,KAAK93B,OAAO83B,KAClBk7U,qBAAsB,KAAKpmS,OAAOomS,qBAClCV,sBAAuB,KAAK7vW,MAAM6vW,sBAClCxD,kBAAmB,KAAKrsW,MAAMqsW,iBACjC,GACA,KAAKyuI,mBACF5+R,SAACg8R,IAAD,CACIE,iBAAkB,KAAK55W,IAAI45W,iBAC3B30R,eAAgB,KAAKjlF,IAAIilF,eACzB00R,cAAe,KAAK0C,sBACpB/lI,wBACI,KAAKt2O,IAAIs2O,wBAEbx2N,iBACI,KAAK9f,IAAIwsU,cAAc1sT,iBAE3ButT,eAAgB,KAAKtuc,OAAOsuc,eAC5Bh8F,sBAAuB,KAAK7vW,MAAM6vW,sBAClCxD,kBAAmB,KAAKrsW,MAAMqsW,iBACjC,GAEJ,CAAC,KAAK2uI,uBACH,KAAK/yU,mBACL,KAAKA,kBAAkB1sK,OAAS,IAC5BooS,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIgrG,SAAC,KAAD,CAAIn/L,UAAU,UACTm0F,SAAA,KAAK6pY,qBACN,IACJ7+R,SAACo3J,GAAD,CACI34P,QAAS,KAAKstD,kBACd4nM,sBACI,KAAK7vW,MAAM6vW,sBAEfxD,kBAAmB,KAAKrsW,MAAMqsW,iBACjC,EACH,KAEVnwJ,SAAC,KAAD,CAAIn/L,UAAU,yBAAyBm0F,SAAA,2CAEnC,IACJgrG,SAAC20J,GAAD,CACIC,sBAAuB,KAAKtyO,IAAIsyO,sBAChCzE,kBAAmB,KAAKrsW,MAAMqsW,iBACjC,IACDnwJ,SAAC,KAAD,CAAIn/L,UAAU,yBAAyBm0F,SAAA,wBAEnC,IACJgrG,SAACi3J,GAAD,CACIC,cAAe,KAAKunI,UAAUlmI,MAC9BpB,aAAc,KAAKsnI,UAAUjmI,IAChC,EACA,C,EAEb,C,aACJ,GAEA,IAAMolI,KAAmB1zU,EAAek1U,KACpC,IAAMC,EAAY5qa,GACd4nG,EAAOo6J,QAAQhiQ,EAAM,CAAEuoG,SAAU8/T,GAAc,GAAGnga,MAStD,OAPmB0ia,EAASn1U,CAOrBk0U,GANoBgB,EACrBC,EAASD,GAAapC,IACtB,GAImCl9W,GAAUw/W,CACvD,EChlBA,SAAgBC,IAAe,CAC3BC,YAAA,CAKA,IAAMC,EAAiBpwc,GAHEmwc,EAASz3b,OAC7B23b,GAAYA,EAAQj4V,OAASi4V,EAAQjlc,QAEVklc,EAAkB,YAAYpve,KACzDmve,EAAStgf,EAAOihK,KAEb,IAAMu/U,EACFF,EAAQjlc,WAAa4lH,EAAOjhK,EAAQ,EAAE,EAAEq7C,SAEpC4oG,QADA28D,SAAC,MAAD,CAAKn/L,UAAU,kBAAmBm0F,SAAA0qY,EAAQjlc,QAAc,GAEhE,OACIgtP,UAAC,MAAD,CAAAzyL,SAAA,CACK4qY,GACDn4M,UAAC,MAAD,CAAK5mR,UAAU,gBAAfm0F,SAAA,EACIgrG,SAAC,OAAD,CAAMn/L,UAAU,eAAgBm0F,SAAA0qY,EAAQG,KAAY,IACpD7/R,SAAC,IAAD,CAAGo1J,QAASsqI,EAAQ3rf,GAAKihH,SAAA0qY,EAAQj4V,KAAS,EACzC,CACJ,KANK,UAAUroJ,GAMf,CAEb,GAGJ,OACIqoS,UAAC,MAAD,CAAK5mR,UAAU,iBAAfm0F,SAAA,EACIgrG,SAAC,MAAD,CAAKn/L,UAAU,eAAem0F,SAAA,oBAAuB,GACpDyqY,CACA,C,EAEb,C,80GCVgC5jS,cAAMpoG,UAANooG,I,KAAzB,cAAyBA,I,wCAD/B5zH,C,IAOI0qC,E,EAAapiC,S,GAIboiC,E,EAAqBmhX,a,GAIrBnhX,E,EAAqBohX,a,GAMrBphX,E,EAAqBmtX,c,GA2CrBntX,E,EAAqBotX,mB,IAarBlpY,IAAOo6D,K,KAAci2P,W,CA5EMrrN,gB,CAC5B,YAAY/3M,EAAwB,CAChC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAchlG,SAA6B,CACvC,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAsBujZ,aAAsB,CACxC,OAAO,KAAKvjZ,QAAQujZ,aAAe3zC,EACvC,CAEA,IAAsB4zC,aAAsB,CAExC,IAAMC,EAAW//U,KAAKh1J,IAAI,IAAK,KAAK60e,YAAYn3Z,MAAQ+6P,KAAY,GACpE,OAAO,KAAKo8J,YAAYG,UAAU,IAAID,SAASA,EACnD,CAEA,IAAsB8L,cAA+B,CACjD,GAAM,CAAEE,WAAUC,oBAAqB,KAAK1vZ,QAEtClnB,EAAuB,GAOvB62a,EACF/oU,GAAIwB,QAAQ,KAAKpoF,QAAQyvZ,UAAY,IAAIh4d,SACzCmvJ,GAAIwB,QAAQ,KAAKpoF,QAAQ0vZ,kBAAoB,IAAIj4d,OA4BrD,OA1BIg4d,GAAY,CAACE,GACb72a,EAAKhpE,KAAK,CACNonJ,MAAO,0BACPiwN,aACIjwE,UAAC,OAAD,CAAAzyL,SAAA,CAAM,6CACyC,KAC3CgrG,SAAC,SAAD,CAAAhrG,SAAQ,QAAc,GAAC,0EAErB,IAEVj4D,IAAKijc,CACT,GAEAC,GACA52a,EAAKhpE,KAAK,CACNonJ,MAAO,sCACPiwN,aACIjwE,UAAC,OAAD,CAAAzyL,SAAA,CAAM,wDACoD,KACtDgrG,SAAC,SAAD,CAAAhrG,SAAQ,YAAkB,GAAC,0EAEzB,IAEVj4D,IAAKkjc,CACT,GAEG52a,CACX,CAEA,IAAsB02a,mBAA4B,CAI9C,OAAO,KAAKxvZ,QAAQ4vZ,+BACd,IACC,KAAK5vZ,QAAQ6vZ,8BAAgC,GACxD,CAEAC,kBAA0Btjc,EAAqB,CAC3C,MAAO,gBAAgBA,EAAI,+CAA+C,KAAKgjc,kBAAkB,oEACrG,CAEsB74E,WAAkB,CACpC,KAAK32U,QAAQinZ,YAAcn0V,MAC/B,CAEAgyD,QAAkB,CACd,GAAM,CAAEyqS,gBAAiB,KAGzB,OADKA,EAAazgf,QAEd2gN,SAACg+Q,GAAD,CACI1jM,UAAU,QACV2jM,WAAY,KAAK1tY,QAAQ9uE,KACzBw7J,OAAQ,KAAK82T,YACb5V,cAAc,SACdj3D,UAAW,KAAKA,UAEhBlyT,UAAAyyL,UAAC,MAAD,CACI5mR,UAAU,sBACVmvE,MAAO,CAAEyvU,UAAW,KAAKs0E,YAAY37a,MAAO,EAFhD48C,SAAA,EAIIgrG,SAACy6O,GAAD,CAAehzS,MAAM,QAAQy/Q,UAAW,KAAKA,SAAY,IACzDz/H,UAAC,MAAD,CAAK5mR,UAAU,aAAfm0F,SAAA,EACIgrG,SAAC,MAAD,CAAKn/L,UAAU,uBACVm0F,SAAA8qY,EAAavve,IAAKigF,IACfi3M,UAAC,MAAD,CAEI5mR,UAAU,sBAFdm0F,SAAA,EAIIgrG,SAAC,KAAD,CAAIn/L,UAAU,oDACTm0F,SAAAxkB,EAAOi3D,KACR,IACJu4D,SAAC,IAAD,CAAGn/L,UAAU,yDACRm0F,SAAAxkB,EAAOknR,WACT,IACH13J,SAACu2J,GAAD,CACIzjM,KAAM,KAAKutU,kBACP7vZ,EAAOzzC,GACX,CACH,EACA,CAdI,EAAAyzC,EAAOi3D,KAcX,EAER,GACJ,KAAKl3D,QAAQ+vZ,iCACVtgS,SAACo6O,GAAD,CACIv5a,UAAU,4BACVqpJ,MAAM,gBACNnuF,QACI,KAAKwU,QAAQ4vZ,+BAEjBl+R,SAAW7iM,GACP,KAAKmxE,QAAQgwZ,kCACTnhe,EAAM9d,OAAOy6E,OACjB,CAEP,EAEJ,CACJ,G,EACF,GAnDsB,IAqDrC,C,aACJ,GCtKA,IAAIyka,IAA2B,CAC9B,QACA,OACA,MACA,SACD,EAKIC,IAAkB,IAIlBC,IAAgB,UAKhBC,IAAW,OAAO,WAAc,SAAW,UAAU,SAAW,GAIhEC,IAAM,uBAAuB,KAAKD,GAAQ,EAAI,OAAS,UASvDE,IAAoBF,MAAa,QAAU,CAAC,UAAW,KAAK,EAAI,CAAC,KAAK,EAM1E,SAASG,IAAgB,EAAO,CAC/B,MAAO,CAAC,EAAE1he,EAAM,KAAOA,EAAM,MAAQA,EAAM,iBAC5C,CAKA,SAAS2he,IAAgC,EAAO,CAC/C,IAAIz/e,EAAS8d,EAAM,OACnB,OAAOA,EAAM,QAAUA,EAAM,aAAe9d,IAAW8d,EAAM,eAAiB9d,EAAO,QAAQ,yCAAyC,CACvI,CAKA,SAAS0/e,GAAiB,EAAO,EAAK,CACrC,OAAO,OAAO5he,EAAM,kBAAqB,WAAaA,EAAM,iBAAiBshV,CAAG,GAAKmgJ,IAAkB,SAASngJ,CAAG,GAAKthV,EAAM,iBAAiB,UAAU,EAAI,EAC9J,CAcA,SAAS6he,IAAgB,EAAK,CAC7B,OAAOn8d,EAAI,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAK,GAAU,CAC3C,IAAIif,EAAQm9c,EAAM,MAAM,cAAc,EAClCnjb,EAAOh6B,EAAM,IAAI,EACjBs1C,EAAQtb,EAAK,MAAM,YAAY,EAC/BpmE,EAAM0hF,EAAY,OAAO,OAAOA,EAAM,GAAG,IAAK,IAAI,EAAItb,EACtDojb,EAAoB,CAAC,EACrBC,EAAoB,CAAC,EACzB,IAAK,IAAMzpa,KAAQ5zC,EAAO,CACzB,IAAImsG,EAAWv4D,EAAK,MAAM,YAAY,EAClC+oR,EAAMxwN,IAAW,IAAMv4D,EAC3B,EAAM+oR,IAAQ,OAASkgJ,IAAMlgJ,EACzBxwN,EAAUkxW,EAAkB,KAAK1gJ,CAAG,EACnCygJ,EAAkB,KAAKzgJ,CAAG,CAChC,CACA,MAAO,CACNygJ,EACAC,EACAzpf,CACD,CACD,CAAC,CACF,CAIA,SAAS0pf,IAAqB,EAAO,CAACF,EAAmBC,EAAmBzpf,GAAM,CACjF,IAAM2pf,EAAcH,EAAkB,SAAS,UAAU,EACzD,MAAO,GAAGxpf,aAAe,OAAS,EAAEA,EAAI,KAAKynB,EAAM,GAAG,GAAKznB,EAAI,KAAKynB,EAAM,IAAI,GAAKznB,EAAI,YAAY,IAAMynB,EAAM,IAAI,YAAY,GAAKznB,IAAQynB,EAAM,OAAS+he,EAAkB,KAAM,GAC3K,CAACH,GAAiB5he,EAAOshV,CAAG,CACnC,GAAK8/I,IAAyB,KAAM,GAC7B,CAACW,EAAkB,SAASzgJ,CAAG,GAAK,CAAC0gJ,EAAkB,SAAS1gJ,CAAG,GAAK/oW,IAAQ+oW,GAAOsgJ,GAAiB5he,EAAOshV,CAAG,GAAK,EAAE4gJ,GAAeT,IAAkB,SAASngJ,CAAG,EAC7K,EACF,CAuBA,SAAS6gJ,IAAyB,EAAgB,EAAU,CAAC,EAAG,CAC/D,IAAIloc,EAAUh7C,EAAQ,SAAWoif,IAC7B/3Y,EAASrqG,EAAQ,QAAU0if,IAC3BS,EAAc,OAAO,KAAKC,CAAc,CAAC,CAAC,IAAK,GAC3C,CACNhqf,EACAwpf,IAAgBxpf,CAAK,EACrBgqf,EAAehqf,EAChB,CACA,EACGy7D,EAA0B,IAAI,IAC9BlwB,EAAQ,KACZ,MAAQ,IAAU,CACjB,GAAI,CAAC89c,IAAgB1he,CAAK,GAAKspF,EAAOtpF,CAAK,EAAG,OAC9C,IAAIsie,EAAY,CAAC,EACjB,IAAK,GAAI,CAACjqf,EAAO+sG,EAAU9kF,KAAY8he,EAAa,CACnD,GACI,CAAC3lf,EAAS,GAAGoyB,GADNilC,EAAQ,IAAIz7D,CACE,GAAc+sG,EACvC,GAAI,CAAC68Y,IAAqBjie,EAAOvjB,CAAO,EAClCmlf,GAAiB5he,EAAOA,EAAM,GAAG,GAAG8zC,EAAQ,OAAOz7D,CAAK,OACvD,GAAIw2B,EAAK,OAAS,EACxBilC,EAAQ,IAAIz7D,EAAOw2B,CAAI,EACvByzd,EAAU,KAAKjqf,CAAK,OAGpB,GADAy7D,EAAQ,OAAOz7D,CAAK,EAChBiqf,EAAU,OAAQ,QAAQ,KAAK,8BAA8Bjqf,EAAM,8BAA+Biqf,CAAS,MAC1G,CACJhie,EAAQN,CAAK,EACb,KACD,CAEF,CACI4jB,GAAO,aAAaA,CAAK,EAC7B,EAAQ,eAAiBkwB,EAAQ,MAAM,EAAG7Z,CAAO,CAClD,CACD,CAuBA,SAASsoc,GAAS,EAAQ,EAAe,EAAU,CAAC,EAAG,CACtD,IAAIvie,EAAQ/gB,EAAQ,OAASqif,IACzBkB,EAAaL,IAAyBM,EAAexjf,CAAO,EAEhE,OADAiD,EAAO,iBAAiB8d,EAAOwie,EAAYvjf,EAAQ,OAAO,MAC7C,CACZiD,EAAO,oBAAoB8d,EAAOwie,EAAYvjf,EAAQ,OAAO,CAC9D,CACD,CClKA,IAAayjf,KACT,EACA,IACY,CACZ,IAAMC,EAAiBC,GACnB/5B,EACAg6B,GAAY,GAAaC,EAAS,UAAU,EAC5CC,IAAU,CAAE,gBAAiBl+W,EAAM,IAAIw2C,CAAU,CAAC,EAClD2nU,IACK,CAAE,aAAY,aACX,CAAC3nU,EAAYphB,GAAWzE,GAAW,CAAC,CAAC,CAAC,CAC9C,EACAutV,IAAU,EAAGvtV,KAAa,CAACytV,IAAUztV,CAAO,CAAC,CACjD,EACM0tV,EAAgB,IAAI,IAAIP,CAAc,EAG5C,OAFIO,EAAc,OAAS,EAAUr+W,EAE9Bs+W,IACHC,IAAqBv+W,EAAOq+W,CAAa,EACzCA,CACJ,CACJ,EAEME,KACF,EACA,IAEOv+W,EAAM,WAAY,GAAuB,CAC5C,IAAM2wB,EAAU0tV,EAAc,IAAIhgX,EAAI,IAAI,EAC1C,GAAI,CAACsyB,EAAS,OAAOtyB,EAErB,IAAMmgX,EAA2B,CAC7B,GAAGngX,EACH,QAAS,CAAE,GAAGA,EAAI,QAAS,GAAGsyB,CAAQ,CAC1C,EAUA,OATIA,EAAQ,QAAO,EAAU,MAAQA,EAAQ,OAGzCtyB,EAAI,OAASijB,GAAgB,SAC7BqP,EAAQ,mBAAqB,QAC7B,CAAC8tV,IAAY9tV,EAAQ,gBAAgB,IAErC,EAAU,KAAOrP,GAAgB,SAE9Bk9V,CACX,CAAC,EAGCF,KACF,EACA,IACY,CACZ,IAAII,EAAc1+W,EAClB,IAAK,GAAM,CAAC2iB,EAAM,CAAE,uBAAuB07V,EACnCx0C,IAAqB,QAAaA,IAAqB,IAC3D,EAAc60C,EAAY,aAAa,CAAC/7V,CAAI,EAAI,GAC5Cy2B,GAAWzlL,CAAK,EAAIA,EAAQk2c,EAAmBl2c,CACnD,GAEJ,OAAO+qf,CACX,ECzCaC,IACT,EACA,EACA,IACY,CAGZ,IAAMC,EAAa,CAAC,GAAG7oV,EAAK,OAAO,CAAC,CAAC,CAAC,QACjC,GAAUpiK,EAAM,SAAS,WAAW,SAAS,MAClD,EACMkrf,EAAgC,OAAO,YACzCD,EAAW,IAAK,GAAW,CAAC7vU,EAAO,GAAG,SAAS,EAAGA,CAAM,CAAC,CAC7D,EAIM+vU,EAAiD,IAAI,IAC3Dh8V,IAAuB,QAAS,GAAQ,CACpCg8V,EAAe,IAAIzgX,EAAI,KAAMA,CAAG,CACpC,CAAC,EAKD,IAAM0gX,EAAmB3yR,GADGlnD,EAAW,OAAOjmB,EAE1C,EACAoyL,EACJ,EAEM2tK,EAA0C,CAAC,EAC3CC,EAAyC,CAAC,EAC1CC,EAAwD,CAAC,EAC/D,IAAK,IAAMhgW,KAAa6/V,EAAkB,CACtC,IAAM54U,EAAWpQ,EAAK,IAAI7W,EAAU,UAAU,EAI9C,GAAI,CAACinB,EAAU,SAGf,IAAMogT,EAAa,IAAI,IAAIu4B,CAAc,EAGnCK,EAAgBC,IAA8Bj5U,EAAS,QAAQ,EACrEogT,EAAW,IAAI44B,EAAc,KAAMA,CAAa,EAGhD,IAAME,EAAiBC,IAA0Bn5U,EAAS,QAAQ,EAClE,EAAe,KAAOkrK,GAAuBnyL,CAAS,EAGtD,EAAe,YAAc,GAC7B,EAAe,QAAUkW,GAAWiqV,EAAe,OAAO,EACtDngW,EAAU,aAAe,SACzB,EAAe,WAAaA,EAAU,YAC1CqnU,EAAW,IAAI84B,EAAe,KAAMA,CAAc,EAGlD,GAAM,CAACE,EAAeC,GAClBC,IAAoCt5U,EAAS,QAAQ,EAInD2lS,EAAQ4zC,IACVv5U,EAAS,SACTA,EAAS,IACb,EACMw5U,EAAYx5U,EAAS,KAAK,UAAY,CAAC,EACvCw+R,EAAcg7C,EAAU,IAKzB,GAAOd,EAAevqf,EAAG,EAAE,MAAQA,EAAG,SAAS,CACpD,EAEMsrf,EAAcD,EAAU,IAAK,GAAOd,EAAevqf,EAAG,EAAE,IAAI,EAE5D82c,EAAwC,EACzCrqT,GAAe,UAAW4+V,GAC1B5+V,GAAe,YAAa6+V,GAC5B7+V,GAAe,YAAa4jT,GAC5Bw6C,EAAc,MAAOrzC,GACrBuzC,EAAe,MAAOl5U,EAAS,KAAK,QAAU,CAAC,CACpD,EAEIq5U,IACA,EAAYA,EAAoB,MAAQ76C,EAAY,IAC/C,GAAe46C,EAAe,IAAIxiD,CAAU,CACjD,EACAwpB,EAAW,IAAIi5B,EAAoB,KAAMA,CAAmB,GAIhE,IAAIK,EAAgB,IAAIr6B,GACpBpa,EACA,MAAM,KAAKmb,EAAW,OAAO,CAAC,CAClC,EAGA,EAAgBs3B,IAAgCgC,EAAe,CAC3DC,IAA4B5gW,EAAW6W,CAAI,CAC/C,CAAC,EAMD,IAAMj/D,EAAaooD,EAAU,WACzBk6B,GAAWtiF,CAAU,GACrB,EAAgB+oZ,EAMX,oBACG,CAAC/oZ,CAAU,EACX+oZ,EAAc,IAAIR,EAAe,IAAI,CAAC,CAAC,SAC3C,CAAC,CAEA,+BAA+BA,EAAe,KAAM,CACjD,kBAAmB,CACvB,CAAC,CAAC,CACD,YAAY,CAACF,EAAc,IAAI,CAAC,EAIrCD,EAAyC,KAAKW,CAAa,GACpD/uV,GAAYJ,GAAgByV,EAAS,SAAS,OAAO,CAAC,EAC7D84U,EAA0B,KAAKY,CAAa,EAC3Cb,EAA2B,KAAKa,CAAa,CACtD,CA4BA,IAAME,EAAuBC,GAAef,EAA2B,CACnEl+V,GAAe,IACfA,GAAe,QACnB,CAAC,EAEGk/V,EAEJ,GACIjB,EAA2B,OAAS,GACpCC,EAA0B,OAAS,EACrC,CAEE,IAAMiB,EAAaH,EAAqB,WAAW,CAC/Ch/V,GAAe,GACnB,CAAC,CAAC,CAAC,GACGo/V,EAA+B3c,GAAW,GAC5CnqU,IAAiCzrB,IAAYwyW,CAAQ,CACzD,EACMC,EAAqBH,EAAW,OAAO,IAAK,GAC9CC,EAA6BC,CAAkB,CACnD,EAEME,EAAgB,CAClB,GAAGJ,EACH,KAAMn/V,GAAe,KACrB,KAAMA,GAAe,KACrB,OAAQs/V,CACZ,EASA,EAAuBL,GACnB,CARAD,EAAqB,cAAc,CAACO,CAAa,CAQhD,EAAoC,GAAGtB,CAA0B,EAClE,CAACj+V,GAAe,IAAKA,GAAe,QAAQ,EAC5C,CACI,CAACA,GAAe,KAAMA,GAAe,QAAQ,EAC7C,CAACA,GAAe,QAAQ,CAC5B,CACJ,EAGIm+V,EAAyC,OAAS,IAClD,EAAuBc,GACnB,CACIC,EACA,GAAGf,CACP,EACA,CAACn+V,GAAe,IAAKA,GAAe,QAAQ,EAC5C,CAAC,CAACA,GAAe,QAAQ,CAAC,CAC9B,EACR,MAAWi+V,EAA2B,OAAS,GAG3C,EAAuBgB,GAAehB,EAA4B,CAC9Dj+V,GAAe,KACfA,GAAe,QACnB,CAAC,EAIGm+V,EAAyC,OAAS,IAClD,EAAuBc,GACnB,CACIC,EACA,GAAGf,CACP,EACA,CAACn+V,GAAe,KAAMA,GAAe,QAAQ,EAC7C,CAAC,CAACA,GAAe,QAAQ,CAAC,CAC9B,KAGJ,EAAuBg/V,EAInBb,EAAyC,OAAS,IAClD,EAAuBc,GACnB,CACIC,EACA,GAAGf,CACP,EACA,CAACn+V,GAAe,IAAKA,GAAe,QAAQ,EAC5C,CAAC,CAACA,GAAe,QAAQ,CAAC,CAC9B,IAMR,EAAuBw/V,IACnBN,EACAhB,EACAl+V,GAAe,GACnB,EACA,EAAuBw/V,IACnBN,EACAjB,EACAj+V,GAAe,IACnB,EAIA,IAAK,IAAMy/V,IAAiB,CAACz/V,GAAe,IAAKA,GAAe,IAAI,EAChE,GAAIk/V,EAAqB,YAAY,SAASO,CAAa,EAAG,CAC1D,EAAuBP,EAAqB,gBACxCO,EACA,CAAE,KAAMz/V,GAAe,KAAM,KAAMA,GAAe,IAAK,CAC3D,EAEA,KACJ,CAGJ,OAAO0/V,IACHR,EACAS,CACJ,CACJ,EAGaD,KACT,EACA,IACY,CACZ,GAAIv/R,GAAUw/R,CAAoB,EAAG,OAAO1gX,EAE5C,IAAM2gX,EACF,GAEK5jD,EAED2jD,IAAuB3jD,IACvBiJ,GAAgB,2BAHIA,GAAgB,2BAO5C,OAAOhmU,EAAM,cAAc,CACvB,CACI,KAAM+gB,GAAe,YACrB,KAAMA,GAAe,YACrB,KAAMO,GAAgB,MACtB,OAAQthB,EAAM,iBAAiB,2BAA2B,IACrD,GAAe2gX,EAAQ5jD,CAAwB,CACpD,CACJ,CACJ,CAAC,CACL,EAEM+iD,KACF,EACA,KACyB,CACzB,WAAYzuK,GAAuBnyL,CAAS,EAC5C,QAAS,CACL,iBAAkB6W,EAAK,IAAI7W,EAAU,UAAU,CAAC,EAAE,SAAS,SACrD,iBACN,GAAGkW,GAAWlW,EAAU,SAAW,CAAC,CAAC,CACzC,CACJ,GAEM8gW,IACF,EACA,EACA,IACY,CAqBZ,GAAI57B,EAAO,SAAW,EAAG,OAAO,IAAIoB,GAC/B,GAAIpB,EAAO,SAAW,EAAG,OAAOA,EAAO,GAG5C,IAAMw8B,EAA+Cx8B,EAAO,IAAK,GAI7Dy8B,GACA7wM,GAAa8wM,EAAkB9gX,EAAM,WAAW,CAAC,CAAC,OAAS,EACrD,IAAI,IACJA,EAAM,SAAS8gX,CAAgB,CACzC,EAIMC,EAAoCF,EACpCA,EAA2B,IAAK,GAC5Bz8B,EAAO,IAAK,GAAUpkV,EAAM,SAASghX,CAAe,CAAC,CACzD,EACA,OAQAC,EAAoB7xe,GACtB,GAAGg1c,EAAO,IAAK,GAAUpkV,EAAM,WAAW,CAC9C,EACMkhX,EAAsBN,EAAoB,QAAS,GAAU,CAC/D,GAAGzlf,EAAM,KAAK,CAClB,CAAC,EACKgmf,EAAiB,IAAI,IAAID,CAAmB,EAG5CE,EAAuBh9B,EAAO,IAAK,GACrCp0K,GAAahwK,EAAM,YAAaihX,CAAiB,CACrD,EAYMI,EAAoB,CAAC,CADtBj9B,EAAO,GAAI68B,CACW,CAA6B,CAAC,CACpD,OAAOK,GAAMl9B,EAAQg9B,CAAoB,CAAC,CAAC,CAC3C,IACI,GACGG,EAAgB,EAAE,CACb,WAAWA,EAAgB,EAAG,CAAC,CAC/B,IAAK,GAAQ,CACV,IAAMljX,EAAM,CAAE,GAAGv3D,EAAI,GAAI,EAEzB,MADA,GAAI,OAAS,CAAC,EACPu3D,CACX,CAAC,CACb,EAGJ,IAAK,IAAMljI,KAASgmf,EAAe,OAAO,EAAG,CAEzC,IAAK,IAAM9iX,KAAOgjX,EAAkB,GAAI,CAMpC,IAAIG,EAAa,EACbC,EAAYb,EAAoBY,EAAW,CAAC,IAAIrmf,CAAK,EACzD,KAAOsmf,IAAc,QACjB,IACA,EAAYb,EAAoBY,EAAW,CAAC,IAAIrmf,CAAK,EAEzDkjI,EAAI,QAAQ,KACR+lV,EAAOo9B,EAAW,CAAC,YAAYnjX,EAAI,KAAK,CAACojX,EAAU,GACvD,CACJ,CAOA,IAAMA,EAAYb,EAAoB,EAAE,CAAC,IAAIzlf,CAAK,EAC5Cumf,EACFb,GAA8BY,EACxBZ,EAA2B,IAAK,GAC5BxsC,IAAU+P,EAAO,EAAE,CAAC,YAAau9B,CAAS,CAAC,CAACF,EAAU,EAAE,CAC5D,EACA,OAUV,IAAK,IAAIplf,EAAI,EAAGA,EAAI+nd,EAAO,OAAQ,IAAK,CACpC,IAAIq9B,EAAYb,EAAoBvkf,EAAE,CAAC,IAAIlB,CAAK,EAE5Csmf,IAAc,QAAaA,EAAU,OAAS,GAO9C,QAAQ,MACJ,6CAA6Cr9B,EAAO/nd,EAAE,CAAC,WAC3D,EACJ,IAAK,IAAMgiI,KAAOgjX,EAAkBhlf,EAAI,GAEpC,GAAIolf,IAAc,OACdpjX,EAAI,QAAQ,KACR+lV,EAAO/nd,EAAE,CAAC,YAAYgiI,EAAI,KAAK,CAACojX,EAAU,GAC9C,MACC,CAED,EAAY,OACZ,IACI,IAAIG,EAAgB,EACpBF,GACAX,GACAU,IAAc,QACdG,EAAgBF,EAAqB,OACrC,IAEA,EAAYX,EACRa,EACH,CAACvlf,EAAE,CAAC,IAAIqlf,EAAqBE,EAAc,EAE5CH,IAAc,OAuBdpjX,EAAI,QAAQ,KACR2nU,GAAgB,wBACpB,EATA3nU,EAAI,QAAQ,KACR+lV,EAAO/nd,EAAE,CAAC,YAAYgiI,EAAI,KAAK,CAC3BojX,EAAUA,EAAU,OAAS,GAErC,CAMR,CAER,CACJ,CACA,OAAO,IAAIj8B,GACP,CAAC,EACD67B,EAAkB,QAAS,GAAS3sN,CAAI,CAC5C,CACJ,EAMM6rN,KACF,EACA,EACA,IACY,CACZ,IAAMrvV,EAAY2wV,EAAe,IAC5B,GAAU7hX,EAAM,IAAI2iB,CAAI,CAAC,CAAC,YAC/B,EACA,GAAI,IAAI,IAAIuO,CAAS,CAAC,CAAC,KAAO,EAAG,OAAO4wV,EACxC,IAAM3C,EACF4C,IAA4B9wV,IAA6BC,CAAS,GACtE,OAAO4wV,EAAY,WAAY,GAC3BzjX,EAAI,OAASskB,EAAO,CAAE,GAAGtkB,EAAK,GAAG8gX,CAAc,EAAI9gX,CACvD,CACJ,EAEM2jX,IAA4B,GAA4C,CAC1E,OAAQzme,EAAR,CACI,IAAK,UACD,OAAO+lI,GAAgB,QAC3B,IAAK,SACD,OAAOA,GAAgB,OAC3B,IAAK,MACD,OAAOA,GAAgB,QAC3B,IAAK,QACD,OAAOA,GAAgB,QAE3B,QACI,OAAOA,GAAgB,cAC/B,CACJ,EAEM2gW,IACF,GACuB,CACvB,IAAM7/d,EAAS8iJ,EAAW,QAAQ,OAClC,GAAI,CAAC9iJ,EAAQ,OAEb,IAAM7a,EAAO6a,EACR,IAAK,GAAUzuB,EAAM,IAAI,CAAC,CAC1B,OAAQ,GAASwB,IAAS,MAAS,EAExC,GAAIoS,EAAK,SAAW,EAEpB,OAAOA,CACX,EAEM+3e,IACF,GACgB,CAChB,IAAM38V,EAAOwjB,EAAS,GAAG,SAAS,EAC5B,CACF,OACA,YACA,cACA,WACA,YACA,cACA,mBACA,wBACA,iBACA,0BACA,SACA,UACA,UACA,WACA,qBACA,eACA,cACA,mBACA,aACAA,EAEE+7U,EAAcjlD,IAAuB92R,EAAS,EAAE,EAChDhxK,EAAOgxK,EAAS,KAGhBg8U,EAAah8U,EAAS,KACtB67U,IAAyB77U,EAAS,IAAI,EACtC7kB,GAAgB,eAGhB/lI,EAAO2me,EAAc5gW,GAAgB,UAAY6gW,EAKjD56e,EACF46e,IAAe7gW,GAAgB,QACzB2gW,IAAsB97U,EAAS,UAAU,EACzC,OAEV,MAAO,CACH,OACA,OACA,OACA,YACA,cACA,mBACA,wBACA,iBACA,0BACA,WACA,YACA,cACA,UACA,MAAOxV,GAAS,MAChB,qBACA,WAAYvzJ,GAAQ,KACpB,WAAYA,GAAQ,KACpB,gBAAiBA,GAAQ,gBACzB,oBAAqBA,GAAQ,oBAC7B,cAAeA,GAAQ,cACvB,eAAgBA,GAAQ,eACxB,WACA,UACA,eACA,cACA,mBACA,eAAgB+oK,EAAS,GACzB,oBAAqBA,EAAS,gBAC9B,kBAAmBA,EAAS,cAC5B,OACA,OACA,WACJ,CACJ,EAIM47U,IAAmE,EACpEvjW,GAAa,KAAM,CAChB,KAAMuC,GAAe,IACrB,KAAMO,GAAgB,IACtB,KAAM,KACV,GACC9C,GAAa,MAAO,CACjB,KAAMuC,GAAe,IACrB,KAAMO,GAAgB,KACtB,KAAM,MACV,GACC9C,GAAa,OAAQ,CAClB,KAAMuC,GAAe,IACrB,KAAMO,GAAgB,MACtB,KAAM,OACV,GACC9C,GAAa,SAAU,CACpB,KAAMuC,GAAe,IACrB,KAAMO,GAAgB,QACtB,KAAM,SACV,GACC9C,GAAa,MAAO,CACjB,KAAMuC,GAAe,KACrB,KAAMO,GAAgB,KACtB,KAAM,MACV,GACC9C,GAAa,QAAS,CACnB,KAAMuC,GAAe,KACrB,KAAMO,GAAgB,OACtB,KAAM,QACV,CACJ,EAEM89V,IACF,GAEO2C,IACHrxV,GAAgB0yD,EAAiB,OAAO,GAI1Cs8R,KACF,EACA,IACW,CACX,GAAM,CAAE,WAAYt8R,EACd,CAAE,SAAUg/R,EAEZrxV,EAAWL,GAAgBC,CAAO,EASpCm7S,EAJAn7S,GACAG,GAAYC,CAAQ,GACpBJ,EAAQ,UAAY,QACpBA,EAAQ,uBAEN0xV,IAAmBn5G,GAAS,CAAC,EAAGv4O,EAAQ,OAAQ,EAChDu4O,GAAS,CAAC,EAQhB,OAHIp4O,GAAYC,CAAQ,GAAKA,IAAavS,GAAa,MACnD,EAAQstT,EAAM,IAAK,GAASr6S,GAAoBrtH,EAAM2sH,CAAQ,CAAC,GAE5D+6S,CACX,EAEMu2C,KAAsB,EAAiB,IAA8B,CAMvE,IAAM1mR,EAAOzrE,GAAgBz4B,GAAM,IAAI6qX,CAAO,EAAG/yV,GAAU,CAAC,EAC5D,OAAO25O,EAAM,IAAK,GAAMr+U,EAAI8wK,CAAI,CACpC,EAEM8jR,IACF,GAC4C,CAC5C,GAAIt5U,EAAS,SAAS,qBAAsB,CACxC,IAAMxjB,EAAOwjB,EAAS,GAAG,SAAS,EAC5Bo8U,EAAkB/7C,GAAoB7jT,CAAI,EAWhD,MAAO,CAVe6/V,IAClBr8U,EAAS,QAAQ,oBASb,EAAe,CANnB,KAAMo8U,EACN,KAAMjhW,GAAgB,iBACtB,KAAMihW,EACN,QAAS,CAAE,eAAgB,EAAM,EACjC,YAAa,CAAE,WAAY5/V,EAAM,aAAc,aAAc,CAE1C,CAAS,CACpC,CACA,MAAO,CAAC,CACZ,EAEM6/V,IAAoB,GAA6C,CAEnE,IAAMC,EAAuB,IAAI,IAMjC,OAJAh0T,EAAY,MAAM;CAAI,CAAC,CAAC,QAAS,GAAS,CACtC,GAAM,CAAC/6L,EAAK,GAAG4lV,GAASl/T,EAAK,MAAM,GAAS,EAC5Cqoe,EAAqB,IAAI/uf,EAAI,KAAK,EAAG4lV,EAAM,KAAK,GAAS,CAAC,CAAC,KAAK,CAAC,CACrE,CAAC,EACMmpK,CACX,ECjzBaC,KAAa,CACtB1pU,SACAjoE,eAMIgrG,SAAC,MAAD,CACIn/L,UAAW8+a,IACX3vW,MAAO,CACHrT,MAAOsgG,EAAOtgG,MACdvkB,OAAQ6kH,EAAO7kH,MACnB,EAEC48C,UACA,GCRb,SAAgB4xY,IAAc,CAC1B9uI,SACAymH,eACAjkM,YACAtlL,WACAipX,cAAA,CAEA,OACIj+Q,SAACq+Q,GAAD,CAAuBr2D,iBAAoBi2D,EAAWpie,QAClDm5G,UAAAgrG,SAACs+Q,GAAD,CACIz9c,UAAU,SACFi3V,SACMymH,eACdp6D,cAAA,GAEAnvT,UAAAgrG,SAACg+Q,GAAD,CAAOn9c,UAAU,kBACbm0F,UAAAgrG,SAACy+Q,GAAD,CAAQ,aAAYnkM,EAAWz5Q,UAAU,gBAGrCm0F,UAAAgrG,SAACq+Q,GAAD,CAAuBr2D,aAAc,KAChChzT,UACkB,EACnB,EACL,EACG,EACK,EAE/B,CCvCA,IAAa6xY,IAAgB,8wLAEhBC,IAAsB,w5KAGtBC,IAAoB,qqLCa3BC,IAA4C,CAC9CC,KAAM,CACF90V,IAAK00V,IACLlqa,MAAO,GACPvkB,OAAQ,GACR8/a,aAAc,GACdn7b,IAAK,4BACT,EACAmqc,SAAU,CACN/0V,IAAK40V,IACLpqa,MAAO,GACPvkB,OAAQ,GACR8/a,aAAc,GACdn7b,IAAK,4BACT,EACA,YAAa,CACTo1G,IAAKg1V,slPACLxqa,MAAO,IACPvkB,OAAQ,GACR8/a,aAAc,EAClB,CACJ,EAGMkP,IAAgB,CAClBj1V,IAAK20V,IACLnqa,MAAO,GACPvkB,OAAQ,GACR8/a,aAAc,GACdn7b,IAAK,4BACT,EASasqc,IAAb,KAAaA,CACTvjf,MACA,YAAYA,EAAkB,CAC1B,KAAKA,MAAQA,CACjB,CAEA,IAAYwjf,MAAmB,CAC3B,OAAO,KAAKxjf,MAAMwjf,MAAQ3wW,GAAWswW,IACzC,CAEA,IAAY9xH,MAAuB,CAI/B,OAHI,KAAKrxX,MAAMyjf,iBAAmB,KAAKD,OAAS3wW,GAAWswW,KAChDG,IAEJJ,IAAM,KAAKM,KACtB,CAEA,IAAYpP,cAAuB,CAC/B,OAAQ,KAAKp0e,MAAM0jf,aAAe,GAAK,KAAKryH,KAAK+iH,YACrD,CAEA,IAAY36T,OAAgB,CACxB,OAAO,KAAK26T,aAAe,KAAK/iH,KAAK/8T,MACzC,CAEA,IAAIukB,OAAgB,CAChB,OAAO,KAAKw4S,KAAKx4S,MAAQ,KAAK4gG,KAClC,CACA,IAAInlH,QAAiB,CACjB,OAAO,KAAK+8T,KAAK/8T,OAAS,KAAKmlH,KACnC,CAEAkqU,UAAUC,EAAiBC,EAAqC,CAC5D,GAAM,CAAEpqU,SAAU,KACZprB,GACD,KAAKgjO,KAAKhjO,IAAIn8J,MAAM,qBAAuB,IAAI,IAAM,KAAKm/X,KAAKhjO,IACpE,OACI6tD,SAAC,IAAD,CACIznN,GAAI+6J,EAAY,QAChBn1C,UAAW,aAAau6C,EAAYgvV,GAAS,IAAIhvV,EAC7CivV,GACF,UAAUjvV,EAAY6kB,GAAO,GAC/By3B,wBAAyB,CAAEmkI,OAAQhnL,CAAI,CAC1C,EAET,CAEAy1V,YAAiC,CAC7B,GAAM,CAAEzyH,QAAS,KACXrxX,EAA2C,CAC7C+c,UAAW,OACXm0L,wBAAyB,CAAEmkI,OAAQg8C,EAAKhjO,GAAI,EAC5CniE,MAAO,CAAE53B,OAAQ,GAAG,KAAK8/a,aAAa,GAAI,CAC9C,EAKK,OAJD,KAAKp0e,MAAMy3X,QAAUpG,EAAKp4U,KAEtBijK,SAAC,IAAD,CAAG,GAAIl8M,EAAO8rE,KAAMulT,EAAKp4U,IAAKz7C,OAAO,SAASygK,IAAI,UAAY,IAE1Di+C,SAAC,MAAD,CAAK,GAAIl8M,CAAQ,EACjC,CACJ,E,60GC0S4B+jf,mBAGMA,GAzXnBA,IAAf,cAAAnwY,EAEgBjE,SAAA,C,+BAQXkf,E,EAAuBpiC,S,GAIvBoiC,E,EAAuB+kN,U,GAIvB/kN,E,EAAuBm1X,iB,GAIvBn1X,E,EAAuB4kW,c,GAIvB5kW,E,EAAuBo1X,W,GAIvBp1X,E,EAAuBq1X,c,GAIvBr1X,E,EAAuBs1X,W,GAIvBt1X,E,EAAuBu1X,qB,GAIvBv1X,E,EAAuBw1X,gB,GAIvBx1X,E,EAAqBy1X,c,GAIrBz1X,E,EAAa20X,M,GAab30X,E,EAAuB01X,W,GAIvB11X,E,EAAqB21X,Y,GAIrB31X,E,EAAa41X,iB,GAIb51X,E,EAAa61X,iB,GAIb71X,E,EAAqB81X,sB,GAYrB91X,E,EAAqB+1X,yB,GAQrB/1X,E,EAAa80B,O,GAsGb90B,E,EAAqBg2X,Y,GAIrBh2X,E,EAAai2X,yB,GAabj2X,E,EAAak2X,mB,GAcbl2X,E,EAAam2X,e,GAMbn2X,E,EAAao2X,kB,GAQbp2X,E,EAAaq2X,oB,GAIbr2X,E,EAAaq1B,U,GAUbr1B,E,EAAav6D,Q,GAkBbu6D,E,EAAas2X,Y,KAnRdC,2BAA4B,GAE5B,YAAYplf,EAAc,CACtB,MAAMA,GACNyxL,EAAe,IAAI,CACvB,CAEA,IAAwBhlG,SAAyB,CAC7C,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAwBmnP,UAAmB,CACvC,OAAO,KAAK5zU,MAAM4zU,UAAYyoH,GAAuBxjX,KACzD,CAEA,IAAwBmra,iBAA2B,CAC/C,MAAO,CAAC,CAAC,KAAKv3Z,QAAQu3Z,eAC1B,CAEA,IAAwBvwB,cAAuB,CAC3C,OAAO,KAAKhnY,QAAQysF,YACxB,CAEA,IAAwB+qU,WAAqB,CACzC,MAAO,CAAC,KAAKx3Z,QAAQ44Z,WAAa,CAAC,CAAC,KAAKlB,SAC7C,CAEA,IAAwBD,cAAwB,CAC5C,MAAO,CAAC,KAAKz3Z,QAAQ64Z,cAAgB,CAAC,CAAC,KAAKhB,YAChD,CAEA,IAAwBH,WAAoB,CACxC,OAAO,KAAK13Z,QAAQ84Z,WAAWhqX,QAAU,EAC7C,CAEA,IAAwB6oX,qBAA8B,CAClD,OAAO,KAAK33Z,QAAQ0sY,iBAAiB59V,QAAU,EACnD,CAEA,IAAwB8oX,gBAAqC,CACzD,OAAO,KAAK53Z,QAAQ+4Z,WAAWjqX,QAAUgkB,MAC7C,CAEA,IAAsB+kW,cAAuB,CACzC,OAAO,KAAK73Z,QAAQg5Z,mBAAmBlqX,QAAU,EACrD,CAEA,IAAcioX,MAAyB,CACnC,GAAM,CAAE/2Z,WAAY,KACpB,GAAIA,EAAQo3D,SAAU,OACtB,IAAM6hW,EAAa,CAACj5Z,EAAQ+2Z,MAAQ/2Z,EAAQ+2Z,OAAS3wW,GAAWswW,KAChE,OAAO,IAAII,IAAK,CACZC,KAAM/2Z,EAAQ+2Z,KACd/rH,OAAQ,CAAC,CAAChrS,EAAQk5Z,iBAElBjC,YAAaj3Z,EAAQm5Z,SAAW,CAACF,EAAa,KAAQ,EACtDjC,gBAAiBh3Z,EAAQm5Z,SAAWF,CACxC,EACJ,CAEA,IAAwBnB,WAAoB,CACxC,OAAO,KAAKf,KAAO,KAAKA,KAAK3qa,MAAQ,CACzC,CAEA,IAAsB2ra,YAAqB,CACvC,OAAO,KAAKhB,KAAO,KAAKA,KAAKlvb,OAAS,CAC1C,CAEA,IAAcmwb,iBAA0B,CACpC,MAAO,IACX,CAEA,IAAcC,iBAA0B,CACpC,OAAO,KAAKj4Z,QAAQm5Z,QAAU,IAAM,GACxC,CAEA,IAAsBjB,sBAA+B,CACjD,OAAO,KAAKl4Z,QAAQo5Z,iBACd,GACA,KAAK7B,gBACF,MAAuB,KAAKvwB,aAC7B,KAAKhnY,QAAQytZ,SACX,GACA,KAAKztZ,QAAQq5Z,SACX,GACA,EAChB,CAEA,IAAsBlB,yBAAkC,CACpD,OAAOr5c,GACH+nb,GAAc,IAAO,KAAKqxB,oBAAoB,EAC9C,KAAKM,iBACL,GAER,CAEA,IAActhW,OAAuB,CACjC,IAAMoiW,EAAc,KAAKt5Z,QAAQytZ,SAC3B,GACA,KAAKztZ,QAAQm5Z,QACX,GACA,GAEFI,EAAa9sU,GAkBR,IAAIg/K,GAAc,CACrB7qM,UAAW,CAAC44V,CAjBZt1a,KAAM,KAAKwza,SAiBC8B,EAAcC,CAb1Bv1a,KAAM,KAAKyza,oBACX/sU,WAAYJ,GAAWM,KACvB0B,WAAY,IAGZC,SAAU/oB,KAAK/0J,IAAI,KAAKwpf,wBAAyB1rU,GACjD6qC,MAAO69E,GACPw1C,UAAWjnL,KAAK/0J,IAAI,EAAG+0J,KAAKr+B,MAAM,GAAMonD,IACxCu/K,WAAY,KAAK2sJ,gBACjBzsJ,QAAS,YAIiButJ,CAAkB,EAC5CtyK,SAAU,KAAKA,SAAW,KAAK2wK,UAAYwB,EAC3C1uU,WAAYJ,GAAWa,gBACvBmB,WAAY,KAAKwrU,gBACjBvxK,WAAY,KAAKwxK,gBACjBxrU,UACJ,GAIEitU,EAAkB7yB,GAAc,KAAKqxB,oBAAoB,EACzDyB,EAAqB76c,GACvB46c,EACAA,EAAkB,IAClB,GAAC,EAKC52N,EAA4C,GAC5C82N,EAAe/qf,GAChBi0R,EAAWj0R,KAAW0qf,EAAUI,EAAmB9qf,EAAM,EAGxDqoJ,EAAQ0iW,EAAY,GAG1B,GAAI1iW,EAAMkwL,WAAa,EAAG,OAAOlwL,EAIjC,IAAM2iW,EACFC,IAEA,IAAMjrf,EAAQ+3J,IACV+yV,GACCI,EAAWlrf,IAAU,CAACirf,EAAKF,EAAY/qf,KAG5C,GAAIA,IAAU8qf,EAAmB7qf,OACjC,OAAO8qf,EAAY/qf,EACvB,EAgCA,OA1BwBgrf,EAFQ/he,GAC5BA,EAAUsvT,WAAa,CAIvB4yK,GAMuBH,EAFI/he,GAC3BA,EAAU4zU,mBAAmB,KAAO,CAIpCuuJ,GAO4BJ,EAFA/he,GAC5BA,EAAUsvT,UAAYlwL,EAAMkwL,SAI5B8yK,GAIGN,EAAYD,EAAmB7qf,OAAS,EACnD,CAEA,IAAsBspf,YAAkC,CACpD,MAAO,CAAE,GAAG,KAAKlhW,MAAMz3D,MAAOi3G,UAAW,SAAU,CACvD,CAEA,IAAc2hT,yBAAmC,CAC7C,IAAME,EAAgBzsU,EAAOo6J,QAAQ,KAAK2xK,aAAc,CACpDprU,SAAU,KAAK+rU,gBACnB,GAAGpsa,MACG+sa,EACF,KAAKn5Z,QAAQm6Z,cAAgB,KAAKn6Z,QAAQo5Z,iBAC9C,OAEI,KAAKliW,MAAMrvF,OAAS,KAAKkwb,YACzB,CAAC,EAAEoB,GAAWZ,EAAgB,EAAI,KAAKpxK,SAE/C,CAEA,IAAcmxK,mBAA4B,CACtC,IAAI/oX,EAAU,KAAKopX,gBAUnB,OANI,KAAKN,yBACL,KAAKN,WAAa,KAAK7gW,MAAMrvF,SAE7B0nE,GAAW,KAAKwoX,WAAa,KAAK7gW,MAAMrvF,QAGrC0nE,CACX,CAEA,IAAcgpX,eAAwB,CAClC,OAAO,KAAKF,wBACN,KAAKlxK,SACL,KAAKA,SAAW,KAAK2wK,UAAY,EAC3C,CAEA,IAAcU,kBAA2B,CAKrC,OAJI,KAAKx4Z,QAAQo5Z,iBAAyB,GACtC,KAAK7B,gBACEzwB,GAAc,GAAI,KAAKE,YAAY,EAEvC,KAAKhnY,QAAQm5Z,QAAU,GAAK,KAAKn5Z,QAAQq5Z,SAAW,GAAK,EACpE,CAEA,IAAcZ,oBAA6B,CACvC,OAAO,KAAKz4Z,QAAQq5Z,SAAW,IAAM,OACzC,CAEA,IAAc5hW,UAA6B,CACvC,OAAO,IAAI6yM,GAAiB,CACxBnjB,SAAU,KAAKoxK,cACf9rU,SAAU,KAAK+rU,iBACft0a,KAAM,KAAK2za,aACXpxK,WAAY,KAAKgyK,mBACjBhrK,0BAA2B,KAAKztP,QAAQytP,yBAC5C,EACJ,CAEA,IAAc5lR,QAAiB,CAC3B,GAAM,CACFqvF,QACAO,WACA+/V,YACAC,eACAa,oBACAP,aACAW,cACA,KAEJ,OADKA,EACEh1V,KAAKh1J,KACP8of,EAAYtgW,EAAMrvF,OAAS,IACvB4vb,EAAehgW,EAAS5vF,OAASywb,EAAoB,GAC1DP,GAJoB,CAM5B,CAEA,IAAcW,YAAsB,CAChC,MAAO,CAAC,CAAC,KAAK3B,MAAQ,KAAKS,WAAa,KAAKC,YACjD,CAEA7I,aAA0C,CACtC,GAAM,CAAE5uZ,WAAY,KAkCpB,MA7BI,CAACA,EAAQo6Z,cACRp6Z,EAAQq6Z,kBAAoB,CAACr6Z,EAAQqxE,YAGlCo+C,SAAC,KAAD,CAAIhwH,MAAO,KAAK24Z,WAAY,aAAY,KAAKR,eACzCnzY,UAAAgrG,SAAC48I,GAAD,CAAsB7lB,SAAU,KAAKtvL,KAAQ,EAC7C,GAKRl3D,EAAQq5Z,UAEJ5pS,SAAC,IAAD,CACIpwI,KAAM2gB,EAAQo6Z,aACd,kBAAgB,oBAChB,GAAI9oV,GAAsBtxE,EAAQqxE,UAAU,EAE5C5sD,UAAAgrG,SAAC,KAAD,CACIhwH,MAAO,KAAK24Z,WACZ,aAAY,KAAKR,eAEjBnzY,UAAAgrG,SAAC48I,GAAD,CAAsB7lB,SAAU,KAAKtvL,KAAQ,EAC7C,EACL,IAMPu4D,SAAC,KAAD,CAAIhwH,MAAO,KAAK24Z,WACZ3zY,UAAAgrG,SAAC,IAAD,CACIpwI,KAAM2gB,EAAQo6Z,aACd,kBAAgB,oBAChB,aAAY,KAAKxC,eACjB,GAAItmV,GAAsBtxE,EAAQqxE,UAAU,EAE5C5sD,UAAAgrG,SAAC48I,GAAD,CAAsB7lB,SAAU,KAAKtvL,KAAQ,EAC9C,EACH,EAEZ,CAEAojW,gBAA6C,CACzC,IAAM76Z,EAA6B,CAC/B,GAAG,KAAKg4D,SAASh4D,MACjB+sQ,UAAW,KAAK8rJ,kBAChBlsa,MAAO,KAAKisa,wBAA0B,OAASvlW,OAE/C4jD,UAAW,QACf,EACA,OACI+Y,SAAC,IAAD,CAAUhwH,QACNglB,UAAAgrG,SAAC48I,GAAD,CAAsB7lB,SAAU,KAAK/uL,QAAW,EACjD,EAEX,CAEAqtD,QAA6C,CAEzC,OADK,KAAK4zS,YAENxhN,UAAC,MAAD,CACI5mR,UAAU,aACVmvE,MAAO,CACH8vC,QAAS,YACTgrX,cAAe,CACnB,EALJ91Y,SAAA,CAOK,KAAKsyY,MAAQ,KAAKA,KAAKM,WAAA,GACtB,KAAKG,WAAa,KAAKC,gBACrBvgN,UAAC,MAAD,CAAKz3M,MAAO,CAAE+6Z,UAAW,KAAK3yb,MAAO,EAArC48C,SAAA,CACK,KAAK+yY,WAAa,KAAK5I,YAAA,EACvB,KAAK6I,cAAgB,KAAK6C,eAAA,CAC1B,CAER,G,GAhBoB,IAkBjC,CACJ,EAQ4BhD,O,QAArB,cAAqBA,G,8BAD3B5/Z,CAC2B4/Z,kB,cAA6B,GAGvBA,O,QAA3B,cAA2BA,G,8BADjC5/Z,CACiC4/Z,kB,CAG9B,YAAY/jf,EAA0B,CAClC,MAAMA,GAENyxL,EAAe,IAAI,CACvB,CANA2zT,gBAAqC,EAQrC,IAAaV,iBAA0B,CACnC,OAAO,KAAKj4Z,QAAQo5Z,iBAAmB,IAAM,GACjD,CAEA,IAAaX,oBAA6B,CACtC,MAAO,IACX,CAEA3zS,QAA6C,CACzC,GAAM,CAAEqyS,QAAS/of,EAAGgpf,QAAS74b,GAAM,KAAKhrD,MAClC,CACF2jJ,QACA6/V,OACAt/V,WACAz3D,UACAmnP,WACAqwK,YACAC,gBACA,KAGJ,OAFqBV,GAAQS,GAAaC,GAGtCvgN,UAAC,IAAD,CAAGlvS,GAAI+6J,EAAYwsS,KAAuBj/a,UAAU,aAApDm0F,SAAA,CACKsyY,GACGA,EAAKlvb,OAAS,GACdkvb,EAAKG,UAAU9of,EAAI+4U,EAAW4vK,EAAK3qa,MAAO7tB,GAC7C,KAAKi5b,YACF/nS,SAAC,IAAD,CACIznN,GAAI+6J,EAAY,SAChB1jF,KAAM2gB,EAAQo6Z,aACd,GAAI9oV,GAAsBtxE,EAAQqxE,UAAU,EAE5C5sD,UAAAgrG,SAACg9I,GAAD,CACIjmB,SAAUtvL,EACP9oJ,IACAmwD,IACHltC,cACH,EACF,GAEN,KAAKome,eACFhoS,SAACg9I,GAAD,CACIjmB,SAAU/uL,EACPrpJ,IACHmwD,EACIA,GACC,KAAKi5b,UACAtgW,EAAMrvF,OAAS,KAAKywb,kBACpB,GAEVtwf,GAAI+6J,EAAY,YAChB1xI,eACAq7U,cAAe,KAAK1sQ,QAAQy6Z,kBAC/B,EAEN,C,GAnCiB,IAqC5B,C,aACJ,G,u2GCxY+BnvS,eA/CzBovS,IAAgB16Z,IAClB,GAAKA,EAAQo6Z,aAEb,MAAO,CACHljW,MAAOl3D,EAAQ+4Z,WAAa,GAC5Bvsc,IAAKwzC,EAAQo6Z,YACjB,CACJ,EAEMO,IAAkB36Z,IACpB,IAAM46Z,EAAYF,IAAa16Z,GAG/B,OAFK46Z,EAGD,UAAW11f,WACX,aAAcA,WACdA,UAAU21f,SAASD,GALA,EAO3B,EAUaE,IAA4B96Z,IACpCs0H,OAAeC,QAAYomS,IAAe36Z,GAElC+6Z,IAAqB,KAC9B/6Z,KAEA,GAAI,CAAC96F,UAAU81f,MAAO,OAEtB,IAAMJ,EAAYF,IAAa16Z,GAC/B,GAAK46Z,EAEL,GAAI,CACA,MAAM11f,UAAU81f,MAAMJ,EAC1B,OAAS3ne,EAAK,CACVhH,QAAQhQ,MAAM,uCAAwCgX,EAC1D,CACJ,EAG+Bq4L,KAAMpoG,U,2CAAxB+3Y,e,CAAAA,qBAAkB3vS,G,uCAD9B5zH,C,IAqBI0qC,E,EAAapiC,S,GAIboiC,E,EAAa80B,O,GAIb90B,E,EAAa84X,e,GAIb94X,E,EAAag4X,c,IAIb9zY,IAAOo6D,K,KAAMy6U,S,IAIb70Y,IAAOo6D,K,KAAM06U,kB,IAqBb90Y,IAAOo6D,K,KAAM26U,S,IAQb/0Y,IAAOo6D,K,KAAY46U,kB,IAInBh1Y,IAAOo6D,K,KAAY66U,W,IAmBnBj1Y,IAAOo6D,K,KAAY+nU,W,GA0BnBrmX,E,EAAau4X,gB,GAIbv4X,E,EAAaomX,mB,CA1Hal9R,e,CAC3BkwS,mBAA2BlwS,EAAMk8Q,UAAA,GAEjC,YAAYj0d,EAAuB,CAC/B,MAAMA,GAENyxL,EAAe,IAAI,EAEnB,KAAKn4L,MAAQ,CACT8lK,oBAAqB,GACrB8oV,WAAY,GACZC,UAAW,EACf,CACJ,CAEA,OAAOC,WAAW37Z,EAAoC,CAElD,OAAOn9F,IADM+4f,GAAc,CAAE57Z,SAAQ,CAC9Bn9F,EAAKq4f,aAChB,CAEA,IAAcl7Z,SAA4B,CACtC,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAck3D,OAAgB,CAC1B,OAAO,KAAKl3D,QAAQ+4Z,WAAa,EACrC,CAEA,IAAcmC,eAAyB,CACnC,MAAO,CAAC,CAAC,KAAKd,cAAgB,CAAC,CAAC,KAAKp6Z,QAAQmuZ,OACjD,CAEA,IAAciM,cAAmC,CAC7C,OAAO,KAAKp6Z,QAAQo6Z,YACxB,CAEce,SAAgB,CAC1B,KAAK5nf,MAAMoja,YAAA,CACf,CAEcykF,iBAAiBx8c,EAAgB,CAEvC,KAAK48c,QAAQlwf,SACbszC,EAAE7tC,QACFozd,GAAuBvlb,EAAE7tC,OAAQ,KAAKyqf,QAAQlwf,OAAO,GAErD,KAAK6vf,QAAA,CAEb,CAEA1zB,mBAAmC,CAC/B99d,SAASk3W,iBAAiB,QAAS,KAAKu6I,gBAAgB,EACxDzoV,GAAKA,EAAsBzJ,KAAMyJ,GAC7B,KAAK4+C,SAAS,CAAE5+C,qBAAoB,GAE5C,CAEA+0T,sBAAsC,CAClC/9d,SAAS63W,oBAAoB,QAAS,KAAK45I,gBAAgB,CAC/D,CAEcC,QAAQz8c,EAA2B,CAC7C,GAAM,CAAEw7c,eAAcp6Z,WAAY,KAC7Bo6Z,IACLp6Z,EAAQinZ,YAAcp1C,GAAa03C,MACnC,KAAK4R,QAAA,EACLv8c,EAAE23W,gBAAA,EACN,CAEA,MAAoB+kG,kBAAkC,CAClD,MAAMP,IAAmB,KAAK/6Z,OAAO,CACzC,CAEA,MAAoBu7Z,WAA2B,CAC3C,GAAK,KAAKnB,aAEV,GAAI,CACA,KAAK7oS,SAAS,CAAEkqS,WAAY,GAAOC,UAAW,EAAM,GAEhDj1I,MADkB5zM,GAAgB,KAAKunV,YAAY,EAEnD,KAAK7oS,SAAS,CAAEkqS,WAAY,GAAMC,UAAW,EAAM,GAEnDzve,QAAQhQ,MAAM,mCAEtB,OAASgX,EAAK,CACVhH,QAAQhQ,MACJ,uDACAgX,EAER,CACJ,CAEA,MAAoBw1d,WAA2B,CAC3C,GAAM,CAAEzoZ,WAAY,KAEpB,GAAI,CACA,KAAKuxH,SAAS,CAAEkqS,WAAY,GAAOC,UAAW,EAAM,GAEpD,IAAMG,EAAmB77Z,EAAQgpZ,UAAU,CAEvCC,eAAgB,EACpB,GAKA,MAAM/jf,UAAU6tK,UAAUmvL,MAAM,CAC5B,IAAIunJ,cAAc,CACd,YAAaoS,EAAiB3yV,MAAM,CAAEuW,UAAWA,EACrD,EACH,GAED,KAAK8xC,SAAS,CAAEkqS,WAAY,GAAOC,UAAW,EAAK,EACvD,OAASzoe,EAAK,CACVhH,QAAQhQ,MAAM,iCAAkCgX,EACpD,CACJ,CAEA,IAAc0ne,gBAA0B,CACpC,OAAOA,IAAe,KAAK36Z,OAAO,CACtC,CAEA,IAAcwoZ,mBAA6B,CACvC,OAAO,KAAK37e,MAAM8lK,mBACtB,CAEAmyC,QAAsC,CAClC,GAAM,CAAE61S,iBAAgB36Z,UAASwoZ,qBAAsB,KACjD,CAAE2F,UAAS2N,2BAA4B97Z,EAGvCioC,EAAQ,KAAK10H,MAAM00H,OAAS,EAC5BxoC,EAA6B,CAC/BrT,UACA67C,MAAOy7B,KAAKh1J,IAAI,KAAc,CAACu5H,EACnC,EAEA,OACIivK,UAAC,MAAD,CAAK5mR,UAAU,YAAYwR,IAAK,KAAK05d,QAAgB/7Z,QAArDglB,SAAA,EACIgrG,SAAC,KAAD,CAAAhrG,SAAI,OAAS,GACZ,KAAK21Y,eACFljN,UAAC,IAAD,CACI5mR,UAAU,QACV4mI,MAAM,6FACN,kBAAgB,oBAChB2tN,QAAS,KAAKw2I,QAJlB52Y,SAAA,EAMIgrG,SAAC+9E,EAAD,CAAiBl9Q,UAAU,OAAOwmQ,KAAM6Z,GAAS,IACjDlhF,SAAC,OAAD,CAAMn/L,UAAU,QAAQm0F,SAAA,kBAAsB,EAC/C,C,GAENk2Y,IACGzjN,UAAC,IAAD,CACIhgJ,MAAM,sDACN,kBAAgB,wBAChB2tN,QAAS,KAAKy2I,iBAHlB72Y,SAAA,EAKIgrG,SAAC+9E,EAAD,CAAiBl9Q,UAAU,OAAOwmQ,KAAM+X,GAAa,IACrDp/E,SAAC,OAAD,CAAMn/L,UAAU,QAAQm0F,SAAA,YAAuB,EAChD,C,GAEN+jY,IACGtxM,UAAC,IAAD,CACIhgJ,MAAM,+CACN,kBAAgB,uBAChB2tN,QAAS,KAAK4jI,UAHlBhkY,SAAA,EAKIgrG,SAAC+9E,EAAD,CAAiBl9Q,UAAU,OAAOwmQ,KAAMwZ,GAAU,IAClD7gF,SAAC,OAAD,CAAMn/L,UAAU,QACXm0F,SAAA,KAAK53G,MAAM6uf,UACN,gBACA,qBACJ,EACP,C,GAEN,KAAK7uf,MAAM8lK,qBAAuB,KAAKynV,eACpCljN,UAAC,IAAD,CACIhgJ,MAAM,6CACN,kBAAgB,uBAChB2tN,QAAS,KAAK02I,UAHlB92Y,SAAA,EAKIgrG,SAAC+9E,EAAD,CAAiBl9Q,UAAU,OAAOwmQ,KAAMma,EAAS,IACjDxhF,SAAC,OAAD,CAAMn/L,UAAU,QACXm0F,SAAA,KAAK53G,MAAM4uf,WACN,eACA,oBACJ,EACP,C,GAENtN,IACGj3M,UAAC,IAAD,CACIhgJ,MAAM,aACN73E,KAAM8ua,EACNp9e,OAAO,SACPygK,IAAI,WAJR/sD,SAAA,EAMIgrG,SAAC+9E,EAAD,CAAiBl9Q,UAAU,OAAOwmQ,KAAM2Y,GAAS,IACjDhgF,SAAC,OAAD,CAAMn/L,UAAU,QAAQm0F,SAAA,MAAU,EACnC,C,GAENq3Y,IACG5kN,UAAC,IAAD,CACIhgJ,MAAM,2BACN73E,KAAMy8a,EACN/qf,OAAO,SACPygK,IAAI,WAJR/sD,SAAA,EAMIgrG,SAAC+9E,EAAD,CAAiBl9Q,UAAU,OAAOwmQ,KAAMwb,GAAa,IACrD7iF,SAAC,OAAD,CAAMn/L,UAAU,QAAQm0F,SAAA,wBAA4B,EACrD,C,EAEN,C,EAEb,C,22GCzP+B6mG,eAb7BywS,IAAgB,GAChBC,GAA0B,EAI1BC,GAAyBF,IAQIzwS,KAAMpoG,U,2CAA5Bg5Y,e,CAAAA,qBAAsB5wS,G,uCADlC5zH,C,IAOI0qC,E,EAAqBpiC,S,GAIrBoiC,E,EAAuB+kN,U,GAIvB/kN,E,EAAav6D,Q,GAIbu6D,E,EAAqB+5X,uB,GAmCrB/5X,E,EAAag6X,oB,GAqBbh6X,E,EAAai6X,kB,GAKbj6X,E,EAAah2C,O,GAgBbg2C,E,EAAqBk6X,8B,GAIrBl6X,E,EAAqBm6X,2B,GAIrBn6X,E,EAAqBo6X,uB,GAKrBp6X,E,EAAqBq6X,gC,GAIrBr6X,E,EAAqBs6X,4B,GAIrBt6X,E,EAAqBu6X,oC,GAIrBv6X,E,EAAqBw6X,qB,GAWrBx6X,E,EAAqBy6X,kB,GAQrBz6X,E,EAAqB06X,uB,GAWrB16X,E,EAAqB26X,mB,GAYrB36X,E,EAAqB46X,2B,IAOrB12Y,IAAOo6D,K,KAAMu8U,iB,IAQb32Y,IAAOo6D,K,KAAMw8U,sB,IAIb52Y,IAAOo6D,K,KAAMy8U,mB,GAWb/6X,E,EAAqBg7X,mB,GAIrBh7X,E,EAAqBi7X,iB,GAQrBj7X,E,EAAqBk7X,gB,GAMrBl7X,E,EAAqBm7X,qB,GAIrBn7X,E,EAAqBo7X,yB,GAMrBp7X,E,EAAqBq7X,a,CA5NSnyS,e,CAC/B,YAAY/3M,EAA2B,CACnC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAsBhlG,SAAgC,CAClD,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAwBmnP,UAAmB,CACvC,OAAO,KAAK5zU,MAAM4zU,UAAYyoH,GAAuBxjX,KACzD,CAEA,IAAcvkB,QAAiB,CAC3B,OAAOk0b,GACX,CAEA,IAAsBI,uBAAgC,CAClD,GAAM,CACFsB,cACAL,oBACAC,kBACAC,iBACAC,sBACAC,0BACAlB,+BACAI,6BACAH,4BACAE,iCACAE,sCACA,KAEAvwa,EAAQ,EAiBZ,OAhBIgxa,IACAhxa,GAASkwa,GAETgB,IACAlxa,GAASmwa,GAETgB,IACAnxa,GAASqwa,GAETY,IACAjxa,GAASswa,GAETc,IACApxa,GAASuwa,GAGNvwa,EAAQs3E,KAAKh1J,IAAI,EAAG+uf,EAAc,GAAKzB,EAClD,CAEA,IAAcI,oBAA6B,CACvC,GAAM,CACFqB,cACAD,0BACAR,6BACA,KAEA5wa,EAAQ,EACRsxa,EAAuBD,EAU3B,OAPID,IACApxa,GAAS4wa,EACTU,KAEJtxa,GAASsxa,EAAuBzB,GAChC7va,GAASs3E,KAAKh1J,IAAI,EAAG+uf,EAAc,GAAKzB,GAEjC5va,CACX,CAEA,IAAciwa,kBAA4B,CACtC,GAAM,CAAEl1K,WAAUg1K,yBAA0B,KAC5C,OAAOA,GAAyBh1K,CACpC,CAEA,IAAc/6P,OAAgB,CAC1B,GAAM,CAAEiwa,mBAAkBF,wBAAuBC,sBAC7C,KACJ,OAAOC,EAAmBF,EAAwBC,CACtD,CAEA,OAAeuB,mBAAmBhkV,EAAuB,CAErD,MACI,IAFemS,EAAOo6J,QAAQvsK,EAAO,CAAE8S,SAAU,EAAG,GAAGrgG,KAO/D,CAEA,IAAsBkwa,8BAAuC,CACzD,OAAOJ,GAAcyB,mBAAmB,WAC5C,CAEA,IAAsBpB,2BAAoC,CACtD,OAAOL,GAAcyB,mBAAmB,QAC5C,CAEA,IAAsBnB,uBAAgC,CAClD,GAAM,CAAEoB,sBAAuB,KAAK59Z,QACpC,OAAO49Z,EAAqB,mBAAqB,mBACrD,CAEA,IAAsBnB,gCAAyC,CAC3D,OAAOP,GAAcyB,mBAAmB,KAAKnB,qBAAqB,CACtE,CAEA,IAAsBE,4BAAqC,CACvD,OAAOR,GAAcyB,mBAAmB,SAC5C,CAEA,IAAsBhB,oCAA6C,CAC/D,OAAOT,GAAcyB,mBAAmB,mBAC5C,CAEA,IAAsBf,qBAA8B,CAChD,GAAM,CACFQ,oBACAf,mBACAC,gCACA,KAGJ,OAFKc,EACAf,EACEC,EADuBL,GADC,CAGnC,CAEA,IAAsBY,kBAA2B,CAC7C,GAAM,CAAES,iBAAgBjB,mBAAkBE,6BACtC,KAGJ,OAFKe,EACAjB,EACEE,EADuBN,GADF,CAGhC,CAEA,IAAsBa,uBAAgC,CAClD,GAAM,CACFS,sBACAlB,mBACAI,kCACA,KAGJ,OAFKc,EACAlB,EACEI,EADuBR,GADG,CAGrC,CAEA,IAAsBc,mBAA4B,CAC9C,GAAM,CACFM,kBACAhB,mBACAK,8BACA,KAGJ,OAFKW,EACAhB,EACEK,EADuBT,GADD,CAGjC,CAGA,IAAsBe,2BAAoC,CACtD,GAAM,CAAEQ,0BAAyBb,sCAC7B,KAEJ,OADKa,EACEb,EAD8B,CAEzC,CAEcM,iBAAwB,CAC9BnC,IAAyB,KAAK96Z,OAAO,EACrC+6Z,IAAwB,KAAK/6Z,OAAO,EAGxC,KAAKA,QAAQ69Z,kBAAoB,CAAC,KAAK79Z,QAAQ69Z,iBACnD,CAEcX,sBAA6B,CACvC,KAAKl9Z,QAAQ49Z,mBAAqB,CAAC,KAAK59Z,QAAQ49Z,kBACpD,CAEcT,mBAA0B,CACpC,KAAKn9Z,QAAQinZ,YAAcp1C,GAAaisD,SAGpC,KAAK99Z,QAAQkrZ,aACb,KAAKlrZ,QAAQgnZ,uBAAyBN,GAAqBqX,KAE3D,KAAK/9Z,QAAQgnZ,uBAAyBN,GAAqBsX,GAEnE,CAEA,IAAsBZ,mBAA6B,CAC/C,MAAO,CAAC,KAAKp9Z,QAAQi+Z,kBACzB,CAEA,IAAsBZ,iBAA2B,CAC7C,MACI,CAAC,KAAKr9Z,QAAQk+Z,kBACd,CAAC,CAAC,KAAKl+Z,QAAQqxE,YACf,CAAC,KAAKrxE,QAAQm+Z,OAEtB,CAEA,IAAsBb,gBAA0B,CAC5C,MACI,CAAC,KAAKt9Z,QAAQo+Z,iBAAmBnD,GAAUU,WAAW,KAAK37Z,OAAO,CAE1E,CAEA,IAAsBu9Z,qBAA+B,CACjD,MAAO,CAAC,KAAKv9Z,QAAQq+Z,sBAAwB,CAAC,KAAKr+Z,QAAQqxE,UAC/D,CAEA,IAAsBmsV,yBAAmC,CACrD,GAAM,CAAEx9Z,WAAY,KAEpB,OADKA,EAAQo6Z,aACN,CAACp6Z,EAAQs+Z,0BAA4B,CAAC,CAACt+Z,EAAQqxE,WADpB,EAEtC,CAEA,IAAsBosV,aAAsB,CACxC,IAAI9vc,EAAQ,EAMZ,OALI,KAAKyvc,oBAAmBzvc,GAAS,GACjC,KAAK2vc,iBAAgB3vc,GAAS,GAC9B,KAAK4vc,sBAAqB5vc,GAAS,GACnC,KAAK0vc,kBAAiB1vc,GAAS,GAC/B,KAAK6vc,0BAAyB7vc,GAAS,GACpCA,CACX,CAEA4wc,iBAA8C,CAE1C,IAAIt2X,EAAQ,EAMZ,OALI,KAAKs1X,sBACLt1X,GAAS+zX,GAA0B,KAAKc,uBACxC,KAAKU,0BACLv1X,GAAS+zX,GAA0B,KAAKgB,4BAGxCvtS,SAACwrS,GAAD,CACIj7Z,QAAS,KAAKA,QACd22U,UAAW,KAAKsmF,gBACTh1X,OACV,EAET,CAEA68E,QAAsC,CAClC,GAAM,CAAE9kH,WAAY,KACd,CAAE69Z,qBAAsB79Z,EAE9B,OACIyvH,SAAC,MAAD,CACIn/L,UAAU,gBACVmvE,MAAO,CAAE53B,OAAQ,KAAKA,OAAQukB,MAAO,KAAKA,KAAM,EAEhDq4B,UAAAyyL,UAAC,KAAD,CAAAzyL,SAAA,CACK,KAAK24Y,oBACF3tS,SAAC,KAAD,CAAIhwH,MAAO,CAAErT,MAAO,KAAKwwa,mBAAoB,EACzCn4Y,UAAAgrG,SAAC+uS,GAAD,CACI7kV,MAAM,WACNkmM,cAAc,uBACd4+I,UAAW,KAAKpC,iBAChBvlO,KAAMkc,GACN6xE,QAASv+P,EAAQ1nE,IACb,KAAKu+c,kBAAA,EACLv+c,EAAE23W,gBAAA,CACN,EACH,EACD,GAEP,KAAK+mG,iBACFpmN,UAAC,KAAD,CAAIz3M,MAAO,CAAErT,MAAO,KAAKywa,gBAAiB,EAA1Cp4Y,SAAA,EACIgrG,SAAC+uS,GAAD,CACI7kV,MAAM,QACNkmM,cAAc,oBACd4+I,UAAW,KAAKpC,iBAChBvlO,KAAM8X,GACNi2E,QAASv+P,EAAQ1nE,IACb,KAAKq+c,gBAAA,EACLr+c,EAAE23W,gBAAA,CACN,GACAkjB,SAAU,KAAKz5U,QAAQ69Z,iBAC1B,GACAA,GAAqB,KAAKU,gBAAA,CAC3B,C,GAEP,KAAKhB,sBACF9tS,SAAC,KAAD,CAAIhwH,MAAO,CAAErT,MAAO,KAAK0wa,qBAAsB,EAC3Cr4Y,UAAAgrG,SAAC+uS,GAAD,CACI7kV,MAAO,KAAK6iV,sBACZ38I,cAAc,yBACd4+I,UAAW,KAAKpC,iBAChBvlO,KACI92L,EAAQ49Z,mBACFnqN,GACAlE,GAEVs1E,QAAS,KAAKq4I,oBACjB,EACD,GAEP,KAAKG,kBACF5tS,SAAC,KAAD,CAAIhwH,MAAO,CAAErT,MAAO,KAAK2wa,iBAAkB,EACvCt4Y,UAAAgrG,SAAC+uS,GAAD,CACIlue,UAAU,uBACVqpJ,MAAM,SACNkmM,cAAc,qBACd4+I,UAAW,KAAKpC,iBAChBvlO,KAAMgZ,IACNzwN,KAAK,mCACR,EACD,GAEP,KAAKm+a,0BACF/tS,SAAC,KAAD,CAAIhwH,MAAO,CAAErT,MAAO,KAAK4wa,yBAA0B,EAC/Cv4Y,UAAAgrG,SAAC+uS,GAAD,CACI7kV,MAAM,mBACNkmM,cAAc,0BACd/oF,KAAM+a,GACN6sN,cAAc,QACdr/a,KAAM2gB,EAAQo6Z,aACd9pe,UAAU,4BACVmue,UAAW,EACd,EACD,EAER,GACH,EAEb,C,IAGJ,SAAgBD,GAAajrf,EAAA,CAczB,IAAMorf,EAAmBnxS,EAAW,CAChCslG,OAAQv/S,EAAMkma,SACd,YAAa,CAAClma,EAAMkrf,SACxB,GAEMC,EAAgBnrf,EAAMmrf,eAAiB,OAEvCE,GACF1nN,UAAAsxC,WAAA,CAAA/jO,SAAA,CACKi6Y,IAAkB,SAAUjvS,SAAC+9E,EAAD,CAAiB1W,KAAMvjR,EAAMujR,IAAO,GAChEvjR,EAAMkrf,YAAahvS,SAAC,OAAD,CAAMn/L,UAAU,QAASm0F,SAAAlxG,EAAMomK,KAAY,GAC9D+kV,IAAkB,UAAWjvS,SAAC+9E,EAAD,CAAiB1W,KAAMvjR,EAAMujR,IAAO,EACpE,IAGN,OACIrnE,SAAC7B,GAAD,CACIv5M,QAASd,EAAMomK,MACfi2C,MAAM,eACNlgB,UAAU,MACVyC,MAAO,GACPh+J,OAAQ,CAAC,EAAG,CAAC,EACbwpY,QAAQ,aACR52N,MAAO,GACPiH,SAAUz6M,EAAMkrf,UAEhBh6Y,UAAAgrG,SAAC,MAAD,CACIn/L,UAAWk9L,EAAW,eAAgBj6M,EAAM+c,SAAS,EACrDmvE,MAAOlsF,EAAMksF,MACb,kBAAiBlsF,EAAMssW,cACvBgF,QAAStxW,EAAMsxW,QACfg6I,YAAatrf,EAAMsrf,YAElBp6Y,SAAAlxG,EAAM8rE,MACHowI,SAAC,IAAD,CACIpwI,KAAM9rE,EAAM8rE,KACZ/uD,UAAWque,EACX,aAAYprf,EAAMomK,MAClB5oK,OAAO,SACPygK,IAAI,WAEH/sD,SAAAm6Y,CACF,IAEHnvS,SAAC,SAAD,CACIn/L,UAAWque,EACX,aAAYprf,EAAMomK,MAClB1qJ,KAAK,SAEJw1F,SAAAm6Y,CACG,EAEX,EACF,EAEf,C,60GCmT4BE,mBAQMA,OAxrB5BC,GAAqB,EAOZD,IAAf,MAAeA,YAEC57Y,SAAA,C,+BAWXkf,E,EAAuBpiC,S,GAIvBoiC,E,EAAuB+kN,U,GAIvB/kN,E,EAAuBm1X,iB,GAIvBn1X,E,EAAuB4kW,c,GAIvB5kW,E,EAAuB48X,e,GAIvB58X,E,EAAuB68X,a,GAQvB78X,E,EAAuB88X,+B,GAQvB98X,E,EAAuB+8X,a,GAMvB/8X,E,EAAuBg9X,U,GAKvBh9X,E,EAAuBi9X,kB,GAKvBj9X,E,EAAuBsjP,S,GAOvBtjP,E,EAAuBk9X,gB,GAMvBl9X,E,EAAuBm9X,a,GAKvBn9X,E,EAAuBo9X,Y,GAKvBp9X,E,EAAuBq9X,uB,GAIvBr9X,E,EAAuBs9X,U,GAMvBt9X,E,EAAuBu9X,kB,GAsBvBv9X,E,EAAuBw9X,c,GAiCvBx9X,E,EAAuBy9X,yB,GAQvBz9X,E,EAAuBqkN,Y,GAIvBrkN,E,EAAuBqqD,U,GAOvBrqD,E,EAAuB09X,iB,GAOvB19X,E,EAAuB29X,U,GAIvB39X,E,EAAqB49X,iC,GAOrB59X,E,EAAqB69X,qB,GAerB79X,E,EAAqB89X,kB,GAWrB99X,E,EAAuB+9X,iB,GAKvB/9X,E,EAAuBg+X,c,GAKvBh+X,E,EAAuBi+X,6B,GAIvBj+X,E,EAAuBk+X,0B,GAiBvBl+X,E,EAAuBlU,S,GAUvBkU,E,EAAuBm+X,M,GAWvBn+X,E,EAAuBo+X,qB,GAWvBp+X,E,EAAqBq+X,uB,GA+CrBr+X,E,EAAqBs+X,e,GAOrBt+X,E,EAAav6D,Q,IAOby+C,IAAOo6D,K,KAAcwlC,a,IAmDrB5/F,IAAOo6D,K,KAAcigV,iC,GAsIrBv+X,E,EAAqBw+X,kB,GA0CrBx+X,E,EAAqBy+X,qB,KApjBtBlI,2BAAkB,GAElB,YAAYplf,EAAc,CACtB,MAAMA,GAENyxL,EAAe,KAAM,CACjB87T,cAAejuU,EAAW/wJ,GAC9B,EACJ,CAEA,IAAwBk+D,SAAyB,CAC7C,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAwBmnP,UAAmB,CACvC,OAAO,KAAK5zU,MAAM4zU,UAAYyoH,GAAuBxjX,KACzD,CAEA,IAAwBmra,iBAA2B,CAC/C,MAAO,CAAC,CAAC,KAAKv3Z,QAAQu3Z,eAC1B,CAEA,IAAwBvwB,cAAuB,CAC3C,OAAO,KAAKhnY,QAAQysF,YACxB,CAEA,IAAwBuyU,eAAyB,CAC7C,MAAO,CAAC,CAAC,KAAKh/Z,QAAQg/Z,aAC1B,CAEA,IAAwBC,aAAsB,CAC1C,OAAO,KAAKj/Z,QAAQi/Z,aAAaxxf,QAAQ,cAAe,KAAO,EACnE,CAMA,IAAwByxf,+BAAyC,CAC7D,MACI,CAAC,CAAC,KAAKl/Z,QAAQ+ga,8BACf,CAAC,CAAC,KAAK/ga,QAAQojR,uBACf,CAAC,KAAKpjR,QAAQqxE,UAEtB,CAEA,IAAwB8tV,aAAsB,CAG1C,OAFI,KAAKD,8BACE,gBAAgB,KAAKD,cACzB,gBAAgB,KAAKA,YAAY,8BAC5C,CAEA,IAAwBG,UAAmB,CACvC,IAAMmB,EAAO,KAAKvga,QAAQgha,cAC1B,OAAOT,EAAO,SAASA,IAAS,EACpC,CAEA,IAAwBlB,kBAA2B,CAC/C,IAAMkB,EAAO,KAAKvga,QAAQgha,cAC1B,OAAOT,EAAO,aAAaA,IAAS,EACxC,CAEA,IAAwB76I,SAAyB,CAC7C,OAAO,KAAK1lR,QAAQ0lR,gBACxB,CAKA,IAAwB45I,gBAA0B,CAC9C,MACI,CAAC,CAAC,KAAKt/Z,QAAQiha,aAAe,KAAKv7I,iBAE3C,CAEA,IAAwB65I,aAAsB,CAE1C,OADI,KAAKD,eAAuB/4W,GAAe,KAAKm/N,QAAQ,CAAC78W,KACtD,+BACX,CAEA,IAAwB22f,YAAqB,CAEzC,OADI,KAAKF,eAAuB/4W,GAAe,KAAKm/N,QAAQ,CAACl5T,IACtD,4BACX,CAEA,IAAwBizc,uBAAgC,CACpD,OAAO,KAAKz/Z,QAAQy/Z,uBAAyB,kBACjD,CAEA,IAAwBC,UAAmB,CACvC,IAAMwB,EAAY,KAAKzB,sBAEvB,OADY74U,GAAIwB,QAAQ84U,CACjB10c,EAAIm8H,eAAiB,EAChC,CAEA,IAAwBg3U,kBAAuC,CAC3D,IAAMuB,EAAY,KAAKzB,sBAGvB,GAAKyB,GAAcA,EAAU78a,YAAA,EAAc5+E,MAAM,iBAIjD,OADYmhL,GAAIwB,QAAQ84U,CACjB10c,EAAIm8H,eACLl7K,QAAQ,eAAgB,IACzBA,QAAQ,qBAAsB,sBAC9BA,QAAQ,MAAO,GACxB,CAEA,OAAiB0zf,iCACbC,EACA7B,EACM,CAEN,OADK6B,EACE,CAACA,EAAS7B,CAAY,EAAC7xf,KAAK,OADd6xf,CAEzB,CAEA,IAAwBK,cAAmC,CACvD,GAAM,CACFD,mBACAJ,cACA9yU,WACA06J,WACAu5K,iBACA,KAIJ,GAFI,KAAK1B,eAEL,CAACW,EAAkB,OAEvB,IAAME,EACFf,EAAeqC,iCACXxB,EACAJ,GAQR,GANiCzzU,IAAOo6J,QACpC25K,EACA,CAAEpzU,UAAS,GACbrgG,MAI6B2ya,GAC3B53K,EAAWu5K,EAAct0a,OAI7B,OAAOuza,CACX,CAEA,IAAwBE,yBAAkC,CACtD,GAAM,CAAED,eAAcL,eAAgB,KACtC,OAAOT,EAAeqC,iCAClBvB,EACAL,EAER,CAEA,IAAwB94K,YAAqB,CACzC,OAAO,KAAKzmP,QAAQm5Z,QAAU,IAAM,GACxC,CAEA,IAAwB1sU,UAAmB,CAIvC,OAHI,KAAK8qU,gBACEzwB,GAAc,GAAI,KAAKE,YAAY,EAEvC,KAAKhnY,QAAQq5Z,SAAW,GAAK,EACxC,CAEA,IAAwByG,iBAA0B,CAI9C,OAHI,KAAKvI,gBACEzwB,GAAc,GAAI,KAAKE,YAAY,EAEvC,KAAKhnY,QAAQm5Z,QAAU,GAAK,EACvC,CAEA,IAAwB4G,UAAoB,CACxC,MAAO,CAAC,KAAK//Z,QAAQqha,UAAY,CAAC,CAAC,KAAKjC,QAC5C,CAEA,IAAsBY,iCAA0C,CAC5D,OAAO,IAAI9D,GAAc,CACrBl8Z,QAAS,KAAKA,QACdmnP,SAAU,KAAKA,QACnB,GAAGi1K,kBACP,CAEA,IAAsB6D,qBAA+B,CACjD,GAAM,CACFF,WACAD,kBACA34K,WACAg4K,cACAa,mCACA,KAKJ,OAJID,EAAiB,GACAj0U,EAAOo6J,QAAQi5K,EAAa,CAC7C1yU,SAAUqzU,CACd,GAAG1za,MACmB,GAAK+6P,EAAW64K,EAC1C,CAEA,IAAsBE,kBAA4B,CAC9C,GAAM,CACFzzU,WACA06J,WACAi4K,WACAY,mCACA,KAEJ,OADkBl0U,EAAOo6J,QAAQk5K,EAAU,CAAE3yU,UAAS,GAAGrgG,MACtC,GAAK+6P,EAAW64K,EACvC,CAEA,IAAwBG,iBAA0B,CAE9C,OADI,KAAKF,oBAA4B,KAAK94K,SACnC,KAAKA,SAAW,KAAKu5K,cAAct0a,MAAQ2ya,EACtD,CAEA,IAAwBqB,cAAuB,CAE3C,OADI,KAAKF,iBAAyB,KAAK/4K,SAChC,KAAKA,SAAW,KAAKu5K,cAAct0a,MAAQ2ya,EACtD,CAEA,IAAwBsB,6BAAsC,CAC1D,OAAO,KAAKl5K,QAChB,CAEA,IAAwBm5K,0BAAoC,CACxD,GAAM,CACFL,sBACA94K,WACAj5N,UACAsyY,sBACAD,QACA,KAIJ,MAHI,CAACN,GAED,KAAKC,kBAAoBK,EAAK5yK,UAAU7+U,QAAU,EAAU,GAE5Do/G,EAAQ9hC,MAAQ2ya,GAAqByB,EAAoBp0a,OACzD+6P,CAER,CAEA,IAAwBj5N,SAA4B,CAChD,GAAM,CAAEu4N,cAAe,KACvB,OAAO,IAAI6jB,GAAiB,CACxBpmR,KAAM,KAAKi7a,YACXh4K,SAAU,KAAKg5K,gBACf1zU,SAAU,KAAKqzU,gBACfr5K,YACJ,EACJ,CAEA,IAAwB85K,MAAyB,CAC7C,GAAM,CAAE9zU,WAAUg6J,aAAYzmP,WAAY,KAC1C,OAAO,IAAIsqQ,GAAiB,CACxBpmR,KAAM,KAAKm7a,iBACXl4K,SAAU,KAAKi5K,aACf3zU,WACAg6J,aACAgH,0BAA2BztP,EAAQytP,yBACvC,EACJ,CAEA,IAAwB+yK,qBAAgC,CACpD,GAAM,CAAE/zU,WAAUg6J,cAAe,KACjC,OAAO,IAAIS,GAAS,CAChBhjQ,KAAM,KAAK27a,wBACX14K,SAAU,KAAKk5K,4BACfp4K,QAAS,GACTx7J,WACAg6J,YACJ,EACJ,CAEA,IAAsBg6K,uBAAgC,CAClD,GAAM,CACFd,mBACAJ,cACAp4K,WACA16J,WACAqzU,kBACAG,sBACAd,cACAC,WACAW,WACAG,oBACA,KAEEoB,EAAex1U,EAAOo6J,QAAQi5K,EAAa,CAC7C1yU,SAAUqzU,CACd,GAAG1za,MACGm1a,EAAYz1U,EAAOo6J,QAAQk5K,EAAU,CAAE3yU,UAAS,GAAGrgG,MAGnDo1a,EAAiBvB,EAEjBF,GAAY,CAACG,EACXqB,EACA,EAHFD,EAMAG,EAAexB,EACfC,EACIqB,EACAD,EACJ,EACAI,EAA2B51U,EAAOo6J,QACpC44K,EAAeqC,iCACXxB,EACAJ,GAEJ,CAAE9yU,UAAS,GACbrgG,MAEF,OACI+6P,EACAzjL,KAAKh1J,IAAI+yf,EAAcD,EAAeE,GACtC3C,EAER,CAEA,IAAsB2B,eAA+B,CACjD,OAAO,IAAIxE,GAAc,CACrBl8Z,QAAS,KAAKA,QACdmnP,SAAU,KAAKs5K,qBACnB,EACJ,CAEA,IAAc54b,QAAiB,CAC3B,OAAO,KAAK+4b,iBAAmB,KAAKC,mBACxC,CAEA3ve,KAAOo6L,EAAMk8Q,UAAA,EACbs5B,cAAmChuW,OAEbozD,YAAYtnK,EAAqB,CAEnD,IADW,KAAK1tB,KAAK5lB,SAASo/b,cAAc,aACpCjla,QAAQ,UAAW,CAEvB,IAAMk8d,EADM,KAAKzwe,KAAK5lB,QACFi2T,QAAQ,qBAC5B,GAAIogM,EAAS,CACT,IAAMC,EAAQrgW,GAAiBogW,EAAS/id,GACxC,KAAKkid,cAAgB,CAAE1yf,EAAGwzf,EAAMxzf,EAAGmwD,EAAGqjc,EAAMrjc,CAAE,CAClD,MAAOtyC,QAAQhQ,MAAM,oBACzB,KAAO,MAAK6kf,cAAgBhuW,MAChC,CAEA20U,mBAAmC,CAC/B/kU,OAAOm+M,iBAAiB,YAAa,KAAK36J,WAAW,CACzD,CAEAwhR,sBAAsC,CAClChlU,OAAO8+M,oBAAoB,YAAa,KAAKt7J,WAAW,CAC5D,CAEA27S,eAA4C,CACxC,OACI3qN,UAAC,MAAD,CAAK5mR,UAAU,UAAUmvE,MAAO,KAAK+ga,oBAAoBj5K,UAAzD9iO,SAAA,CACK,KAAKm7Y,eACF1oN,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIgrG,SAAC,IAAD,CACIpwI,KAAM,KAAKqgb,SACX,GAAIpuV,GAAsB,KAAKtxE,QAAQqxE,UAAU,EAEhD5sD,SAAA,KAAKm7Y,YACP,GAAE,IAAI,IACP,GACJ,KAENnwS,SAAC,IAAD,CACIn/L,UAAW,KAAKgve,eAAiB,SAAWxsW,OAC5CzzE,KAAM,KAAKmgb,WACX//Z,MAAO,CAAE4rP,eAAgB,MAAO,EAChC,GAAI/5K,GAAsB,KAAKtxE,QAAQqxE,UAAU,EAEhD5sD,SAAA,KAAK86Y,WACP,EACF,C,EAEb,CAOsBoB,iCAAwC,CAC1D,IAAMmB,EAAiBn4f,SAASo4f,eAC5B9+I,IAEC6+I,GAMLA,EAAevgM,QAAQ,YAAYygM,aAAa,OAAQ,IACxDF,EAAeG,eAAe,CAC1B9xc,SAAUy+Y,KAA4B,OAAS,QACnD,GACA,KAAK5uW,QAAQ49Z,mBAAqB,IAP9B,KAAK59Z,QAAQinZ,YAAcp1C,GAAaqwD,OAQhD,CAEAC,eAAmD,CAC/C,IAAMj0Y,EAAU,IAAIo8O,GAAiB,CACjCpmR,KAAM,oBAAoB,KAAK+6a,cAC/B93K,SAAU,KAAKg5K,gBACf1zU,SAAU,KAAKqzU,gBACfr5K,WAAY,KAAKA,UACrB,GASA,GAAI,KAAKy4K,8BAA+B,CAEpC,IAAMrR,EAAa/hU,EAAOo6J,QAAQvsK,gBAAO,CACrC8S,SAAU,KAAKqzU,gBACftzU,WAAY,GAChB,GAAGpgG,MACG4yX,EAAa,IAAI10G,GAAiB,CACpCpmR,KAAM,KAAK+6a,YAMX93K,SAAU,KAAKg5K,gBAAkBtS,EACjCphU,SAAU,KAAKqzU,gBACfr5K,WAAY,KAAKA,UACrB,GACA,OACIh3H,SAAC,IAAD,CAAGn/L,UAAU,UAAUmvE,MAAOyuB,EAAQzuB,MAClCglB,UAAAyyL,UAAC,IAAD,CACI5mR,UAAU,eACV,kBAAgB,sBAChBu3M,SAAU,EACVg9I,QAASv+P,EAAQ1nE,IACbA,EAAE23W,gBAAA,EACF,KAAKoqG,gCAAA,CACT,GAPJl8Y,SAAA,EASIgrG,SAAC,SAAD,CAAAhrG,SAAQ,cAAoB,GAAE,KAC9BgrG,SAAC48I,GAAD,CAAsB7lB,SAAUw4H,CAAa,EAC9C,C,EACJ,EAEX,CAEA,OACI9nK,UAAC,IAAD,CAAG5mR,UAAU,UAAUmvE,MAAOyuB,EAAQzuB,MAAtCglB,SAAA,EACIgrG,SAAC48I,GAAD,CAAsB7lB,SAAUt4N,CAAU,GACzC,OACDuhG,SAAC,IAAD,CACIn/L,UAAU,wBACV,kBAAgB,sBAChBu3M,SAAU,EACVg9I,QAASv+P,EAAQ1nE,IAIb,GAHAA,EAAE23W,gBAAA,EAIE,KAAKv2T,QAAQoia,wBACb,KAAKpia,QAAQqxE,WACf,CACE,KAAKrxE,QAAQinZ,YAAcp1C,GAAaqwD,QACxC,MACJ,CAIA,IAAMG,EACFr/I,IACE8+I,EACFn4f,SAASo4f,eAAeM,GACxBP,GAAkBA,EAAeG,gBACjCH,EAAeG,eAAe,CAC1B9xc,SAAUy+Y,KACJ,OACA,QACV,GACA,KAAK5uW,QAAQ49Z,mBAAqB,IAC3BkE,GACPp/V,OAAO+jB,SAAS6B,KAAO,IAAM+5U,EAC7B,KAAKria,QAAQ49Z,mBAAqB,IAGlC,KAAK59Z,QAAQinZ,YAAcp1C,GAAaqwD,OAEhD,GACHz9Y,SAAA,4BAEE,EACJ,C,EAEX,CAEA69Y,YAAyC,CACrC,OACI7yS,SAAC,IAAD,CAAGn/L,UAAU,OAAOmvE,MAAO,KAAK8ga,KAAK9ga,MACjCglB,UAAAgrG,SAAC48I,GAAD,CAAsB7lB,SAAU,KAAK+5K,IAAO,EAC7C,EAEX,CAEAgC,qBAAkD,CAC9C,OACI9yS,SAAC,MAAD,CACIhwH,MAAO,CACH53B,OAAQ,KAAK8wb,gBACbvsa,MAAO,MACX,CACH,EAET,CAEA,IAAsBw0a,kBAA2B,CAC7C,GAAM,CAAE1yY,UAASqyY,QAAS,KAEpB4B,EAAgB,KAAKlC,oBACrBqC,EAAa,KAAKvC,UAAY,KAAKG,iBAIzC,MAFI,CAACiC,GAAiB,CAACG,EAAmB,GAGrCH,EAAgBj0Y,EAAQrmD,OAAS,IACjCs6b,GAAiBG,EAAa,KAAK3J,gBAAkB,IACrD2J,EAAa/B,EAAK14b,OAAS,GAC5B,KAAK8wb,eAEb,CAIA6J,kBAAsD,CAClD,IAAML,EAAgB,KAAKlC,oBACrBqC,EAAa,KAAKvC,UAAY,KAAKG,iBACnC2B,EAAgB,KAAKvB,yBAI3B,MAFI,CAAC6B,GAAiB,CAACG,EAAmB,MAGtCprN,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIyyL,UAAC,MAAD,CAAK5mR,UAAU,uBAAfm0F,SAAA,CACK09Y,IACGjrN,UAAC,MAAD,CAAK5mR,UAAU,oBAAfm0F,SAAA,CACK,KAAK09Y,cAAA,EACLN,GAAiB,KAAKA,cAAA,CACtB,C,GAERM,GAAiBG,GAAc,KAAKC,oBAAA,EACpCD,GAAc,KAAKA,WAAA,CACnB,CACJ,QAAKC,oBAAA,CACR,GAEV,CAEA,IAAsB1B,qBAA8B,CAChD,GAAM,CAAEH,gBAAexyY,UAASqyY,QAAS,KAEnC4B,EAAgB,CAAC,KAAKlC,oBACtBqC,EAAa,KAAKvC,UAAY,CAAC,KAAKG,iBACpC2B,EAAgB,CAAC,KAAKvB,yBACtBmC,GAAiBN,GAAiBG,IAAeT,EAEjDl7K,GACDw7K,EAAgBj0Y,EAAQrmD,OAASy6b,EAAa/B,EAAK14b,OAAS,IAC5D46b,EAAgB,KAAK9J,gBAAkB,IACvCkJ,EAAgB,KAAKrB,oBAAoB34b,OAAS,GAEvD,OAAO67F,KAAKh1J,IAAIi4U,EAAY+5K,EAAc74b,MAAM,CACpD,CAIA66b,qBAAkD,CAC9C,IAAMP,EAAgB,CAAC,KAAKlC,oBACtBqC,EAAa,KAAKvC,UAAY,CAAC,KAAKG,iBACpC2B,EAAgB,CAAC,KAAKvB,yBACtBmC,GAAiBN,GAAiBG,IAAeT,EAMjDpia,EAAQ,CACVkja,WALgB,CAACR,GAAiB,CAACG,GAAcT,GACpC,CAACM,GAAiBG,GAAc,CAACT,GAKd,KAAKtB,KAAK5yK,UAAU7+U,QAAU,EACpD,SACA,UACd,EAEA,OACIooS,UAAC,MAAD,CAAK5mR,UAAU,0BAAiCmvE,QAAhDglB,SAAA,EACIyyL,UAAC,MAAD,CAAAzyL,SAAA,CACK09Y,EACK,KAAKA,cAAA,EACLG,EACE,KAAKA,WAAA,EACL,KACPG,GAAiB,KAAKF,oBAAA,EACtBV,GAAiB,KAAKA,cAAA,CACtB,KACLpyS,SAACysS,GAAD,CACIl8Z,QAAS,KAAKA,QACdmnP,SAAU,KAAKs5K,qBAClB,EACA,C,EAEb,CAEA37S,QAAsC,CAClC,GAAM,CAAEg8S,iBAAkB,KAE1B,OACI5pN,UAAC,SAAD,CACI5mR,UAAU,oBACVmvE,MAAO,CACH8vC,QAAS,QACb,EACAztG,IAAK,KAAK5Q,KALduzF,SAAA,CAOK,KAAK+9Y,iBAAA,EACL,KAAKE,oBAAA,EACL5B,IACGrxS,SAACi6O,GAAD,CACI1hc,GAAG,SACHsle,eAAgB,KAAKttY,QACrB5xF,EAAG0yf,EAAc1yf,EACjBmwD,EAAGuic,EAAcvic,EACjBkhC,MAAO,CACHmja,UAAW,OACXz7K,SAAU,QACV07K,WAAY,UACZp2U,SAAU,OACVl9C,QAAS,IACTk3M,WAAY,OACZj6J,WAAY,IACZs2U,cAAe,QACnB,EAEAr+Y,UAAAyyL,UAAC,IAAD,CAAAzyL,SAAA,CACK,KAAKihQ,mBACFj2J,SAAA+4H,WAAA,CAAA/jO,SAAE,0KAMA,IAEFyyL,UAAAsxC,WAAA,CAAA/jO,SAAA,CAAE,kDAEY8hC,GAAe,KAAKm/N,QAAQ,CAAC78W,KAAK,kHAI9C,IACH,IAAI,8IAIR,GACE,EAET,C,EAEhB,CACJ,EAG4Bi2f,O,QAArB,cAAqBA,G,8BAD3Bpna,CAC2Bona,kB,cAA6B,GAQvBA,O,QAA3B,cAA2BA,G,sCADjCpna,C,IAmBI0qC,E,EAAqB2gY,W,CAlBQjE,e,CAG9B,YAAYvrf,EAA0B,CAClC,MAAMA,GAENyxL,EAAe,IAAI,CACvB,CANA2zT,2BAA2B,KAS3BlxB,mBAAmC,CAAC,CAEpCC,sBAAsC,CAAC,CAEvC,IAAuBs3B,eAAyB,CAC5C,MAAO,CAAC,CAAC,KAAKh/Z,QAAQg/Z,eAAiB,CAAC,CAAC,KAAKh/Z,QAAQo5Z,gBAC1D,CAEA,IAAsB2J,WAAoB,CACtC,OAAO5tN,EACX,CAEA,IAAuBmrN,0BAAoC,CACvD,OACI,KAAKn5K,SAAW,KAAKj5N,QAAQ9hC,MAAQ2ya,GACrC,KAAKyB,oBAAoBp0a,KAEjC,CAEA,IAAuBwza,cAAmC,CACtD,GAAM,CAAED,mBAAkBJ,cAAa9yU,WAAU06J,YAAa,KAI9D,GAFI,KAAK63K,eAEL,CAACW,EAAkB,OAEvB,IAAME,EAA0BmD,GAAO7B,iCACnCxB,EACAJ,GAQJ,GANiCzzU,IAAOo6J,QACpC25K,EACA,CAAEpzU,UAAS,GACbrgG,MAG6B+6P,GAE/B,OAAOw4K,CACX,CAEA,IAAuBE,yBAAkC,CACrD,GAAM,CAAEH,WAAUE,eAAcL,cAAaC,aAAYuD,aACrD,KACEE,EAAY,SAASF,EAAU,GAC/BG,EAAa,KAAKlja,QAAQqxE,WAC1B,kCACA,GACA8xV,EAAa,aAAaF,EAAU,UAAUzD,EAAW,GAAG0D,EAAW,GAAG3D,EAAY,MAG5F,OAFKK,EAEE,CAACwD,aAD0BH,EAAU,UAAUvD,EAAS,GAAGwD,EAAW,GAAGtD,EAAa,MACvEuD,CAAW,EAACz1f,KAAK,OAFby1f,CAG9B,CAEA,IAAuBhE,aAAsB,CACzC,MAAO,oBAAoB,KAAKF,aACpC,CAEA,IAAuBxyU,UAAmB,CAEtC,OADI,KAAKzsF,QAAQo5Z,iBAAyB,GACnC,KAAK7B,gBAAkBzwB,GAAc,GAAI,KAAKE,YAAY,EAAI,EACzE,CAEA,IAAuB84B,iBAA0B,CAC7C,OAAO,KAAKrzU,QAChB,CAEA,IAAuB0zU,iBAA0B,CAC7C,OAAO,KAAKh5K,QAChB,CAEA,IAAuBi5K,cAAuB,CAC1C,OAAO,KAAKj5K,QAChB,CAEA,IAAuBk5K,6BAAsC,CACzD,OAAO,KAAKl5K,QAChB,CAEA,IAAat/Q,QAAiB,CAC1B,OACI,KAAKqmD,QAAQrmD,QACZ,KAAKk4b,SAAW,KAAKQ,KAAK14b,OAAS,KAAK8wb,gBAAkB,IAC1D,KAAK2H,yBACA,EACA,KAAKE,oBAAoB34b,OAAS,KAAK8wb,gBAErD,CAEA7zS,QAAsC,CAClC,GAAM,CACF52F,UACAqyY,OACAC,sBACAF,2BACAn5K,YACA,KACE,CAAEgwK,UAASC,WAAY,KAAK7jf,MAElC,OACI2jS,UAAC,IAAD,CACIlvS,GAAI+6J,EAAYysS,KAChBl/a,UAAU,gBACVmvE,MAAO,CAAEpuE,KAAM,KAAK0xe,SAAU,EAHlCt+Y,SAAA,EAKIgrG,SAACg9I,GAAD,CACIjmB,SAAUt4N,EACV9/G,EAAG+of,EACH54b,EAAG64b,EACHpvf,GAAI+6J,EAAY,UACnB,GACA,KAAKg9V,WACFtwS,SAACg9I,GAAD,CACIjmB,SAAU+5K,EACVnyf,EAAG+of,EACH54b,EAAG64b,EAAUlpY,EAAQrmD,OAAS,KAAK8wb,gBACnC3wf,GAAI+6J,EAAY,QAChB2pM,cAAe,KAAK1sQ,QAAQy6Z,kBAC/B,GAEJ6F,GACG7wS,SAAC64H,GAAD,CACI9B,SAAUg6K,EACVpyf,EAAG+of,EAAUhwK,EAAWq5K,EAAoBp0a,MAC5C7tB,EAAG64b,EACHpvf,GAAI+6J,EAAY,aACnB,IAED0sD,SAAC64H,GAAD,CACI9B,SAAUg6K,EACVpyf,EAAG+of,EACH54b,EACI64b,EACAlpY,EAAQrmD,QACP,KAAKk4b,SACAQ,EAAK14b,OAAS,KAAK8wb,gBACnB,GACN,KAAKA,gBAET3wf,GAAI+6J,EAAY,aACnB,EAEN,C,EAEX,C,aACJ,G,s1GCp5BMsgW,IAAkB,IAClBC,IAAkB,IAClBC,IAA+B,IAEzBC,GAAL,SAAAA,EAAA,C,MACHA,GAAAC,MAAA,QACAD,EAAAE,IAAA,MACAF,EAAAG,KAAA,O,CACJ,MAoBaC,IAAb,KAAaA,C,gCAoCRxhY,E,EAAayhY,W,GAebzhY,E,EAAa0hY,uB,IAoIbx9Y,IAAOo6D,K,KAAcqjV,kB,IAMrBz9Y,IAAOo6D,K,KAAYsjV,M,IAkHnB19Y,IAAOo6D,K,KAAMxhK,M,IAObonG,IAAOo6D,K,KAAcujV,O,IAQrB39Y,IAAOo6D,K,KAAYwjV,Y,IAgMnB59Y,IAAOo6D,K,KAAcyjV,iB,IAIrB79Y,IAAOo6D,K,KAAc0jV,e,KAjgBtBpka,QAEA,YAAYA,EAA0B,CAClC,KAAKA,QAAUA,CACnB,CAEA,IAAIurE,UAAqB,CAErB,OAAO,KAAKvrE,QAAQw/W,KACxB,CAEA,IAAIv3a,WAAoB,CACpB,OAAOmkI,GACH,KAAKb,SACL,KAAKvrE,QAAQqka,oBACjB,CACJ,CAEA,IAAIn8d,SAAkB,CAClB,OAAOkkI,GAAgB,KAAKb,SAAU,KAAKvrE,QAAQska,kBAAkB,CACzE,CAEA,IAAI1jV,SAAkB,CAClB,OAAO,KAAKrV,SAAS,EACzB,CAEA,IAAIuV,SAAkB,CAClB,OAAOla,GAAO,KAAK2E,QAAQ,CAC/B,CAEA,IAAIwR,UAAmB,CACnB,OAAO,KAAK+D,QAAU,KAAKF,OAC/B,CAGA,IAAcijV,WAAoB,CAC9B,IAAMU,EAAgB,KAAKh5V,SAASz8J,OAKpC,OAJIy1f,GAAiB,EAAUjB,IAIxB18V,GAFU28V,IAA+BgB,EAEvB,CAAE51f,IAAK00f,IAAiB30f,IAAK40f,GAAgB,EAC1E,CAQA,IAAcQ,uBAAiC,CAK3C,GAHI,KAAKv4V,SAASz8J,OAAS,IAGvB,KAAKiuK,UAAY,IAAK,MAAO,GAGjC,IAAM25K,EAAOtnL,GAAW,KAAK7D,UAAWh+I,EAAGC,IAAMA,EAAID,GAQrD,OANqBq5I,GACjB8vL,EACA9vL,IAAc8vL,EAAK5nV,OAAS,GAAK,CAAC83J,GAAE,EAAY,MAAO,GACvDA,IAAE,CAGC49V,EAAe,KAAKznV,SAAW,EAC1C,CAMA0nV,eAAe3sd,EAAoB,CAC/B,GAAI,KAAKgsd,sBAAuB,CAE5B,IAAMj1f,EAAQ,KAAK08J,SAAS37J,QAAQkoC,GAEpC,OADIjpC,IAAU,GAAW,EAClB,KAAK08J,SAASz8J,OAAS,EACxBD,GAAS,KAAK08J,SAASz8J,OAAS,GAChC,CACV,CAGI,OADI,KAAKiuK,WAAa,EAAU,GACxBjlI,EAAO,KAAK8oI,SAAW,KAAK7D,QAE5C,CAMA2nV,eAAeC,EAA0B,CACrC,GAAI,KAAKb,sBAAuB,CAE5B,GAAI,KAAKv4V,SAASz8J,QAAU,EAAG,OAAO,KAAKy8J,SAAS,GACpD,IAAM18J,EAAQ60J,KAAKr+B,MAAMs/X,GAAY,KAAKp5V,SAASz8J,OAAS,IAC5D,OAAO,KAAKy8J,SACR3E,GAAQ/3J,EAAO,CAAEF,IAAK,EAAGD,IAAK,KAAK68J,SAASz8J,OAAS,CAAE,GAE/D,CAEI,OAAO,KAAK8xK,QAAU+jV,EAAW,KAAK5nV,QAE9C,CAEA,IAAI6nV,mBAA4B,CAC5B,OAAO,KAAKH,eAAe,KAAKx8d,SAAS,CAC7C,CAEA,IAAI48d,iBAA0B,CAC1B,OAAO,KAAKJ,eAAe,KAAKv8d,OAAO,CAC3C,CAIA48d,gBAAwBhtd,EAAsB,CAC1C,IAAMjpC,EAAQ+3J,GAAc,KAAK2E,SAAUzzH,GAC3C,GAAI,KAAKyzH,SAAS18J,KAAWipC,EAAM,OAAOjpC,EACrC,MAAU83J,MAAM,QAAQ7uH,EAAK,8BAA8B,CACpE,CAEAitd,YAAYjtd,EAAsB,CAC9B,IAAMjpC,EAAQ,KAAKi2f,gBAAgBhtd,GACnC,OAAO,KAAKyzH,SAAS18J,EAAQ,IAAM,KAAKiyK,OAC5C,CAEAkkV,YAAYltd,EAAsB,CAC9B,IAAMjpC,EAAQ,KAAKi2f,gBAAgBhtd,GACnC,OAAO,KAAKyzH,SAAS18J,EAAQ,IAAM,KAAK+xK,OAC5C,CAEAqkV,iBAAiBntd,EAAcotd,EAA4B,CACvD,IAAMC,EAAW,KAAKJ,YAAYjtd,GAYlC,MAPI,CAAC,KAAKstd,wBACNF,IAAcpyW,QACdqyW,IAAaD,EAENptd,EAGJqtd,CACX,CAEAE,iBAAiBvtd,EAAcotd,EAA4B,CACvD,IAAMI,EAAW,KAAKN,YAAYltd,GAYlC,MAPI,CAAC,KAAKstd,wBACNF,IAAcpyW,QACdwyW,IAAaJ,EAENptd,EAGJwtd,CACX,CAGAC,qBAAoB,IACpBC,iBAAwB,CAEpB,MADA,MAAKD,UAAY,CAAC,KAAKA,UAChB,IACX,CAEAE,SAA2B,CACvB,OAAO,KAAKv9d,UAAY,KAAK44I,OACjC,CAEA,IAAY4kV,WAAoB,CAC5B,GAAM,CAAE1la,WAAY,KACpB,OAAOA,EAAQska,qBAAuBtka,EAAQqka,qBAExC,KAAKzjV,QADL5gF,EAAQqka,oBAElB,CAEsBN,kBAAyB,CAC3C,GAAM,CAAE2B,aAAc,KACtB,KAAK1la,QAAQska,mBAAqBoB,EAClC,KAAK1la,QAAQqka,qBAAuBqB,CACxC,CAEA,MAAoB1B,KAAK2B,EAAyC,CAC9D,GAAM,CAAE3la,WAAY,KAEpBA,EAAQ4la,2BAA6B,GACrC5la,EAAQ6la,0BAA4B,GAEhC,KAAKJ,QAAA,GAAW,KAAK1B,iBAAA,EAErB/ja,EAAQ8la,QAAQ9la,EAAQ8la,OAAA,EAG5B,IAAIC,EAAY,EAChB,KAAO/la,EAAQ4la,4BAA4B,CACvC,IAAMT,EAAW,KAAKJ,YAAY,KAAK78d,OAAO,EAI9C,GAHK,KAAKq9d,WAAW,KAAKpB,gBAAgBgB,GAC1C,KAAKf,cAAce,GACnBY,IACIZ,GAAY,KAAKrkV,SAAW6kV,IAAkBI,EAAW,CACzD,KAAK7mf,KAAA,EACL,KACJ,CACA,MAAMguJ,GAAM,KAAK22V,SAAS,CAC9B,CAEA,OAAOkC,CACX,CAEA,IAAIX,wBAAkC,CAClC,MAAO,CAAC,KAAKpla,QAAQgma,8BACzB,CAEAC,mBAA0B,CACtB,IAAMd,EAAW,KAAKJ,YAAY,KAAK98d,SAAS,EAC5C,CAAC,KAAKm9d,wBAA0BD,GAAY,KAAKj9d,SACrD,KAAKi8d,gBAAgBgB,EACzB,CAEAe,mBAA0B,CACtB,IAAMZ,EAAW,KAAKN,YAAY,KAAK/8d,SAAS,EAChD,KAAKk8d,gBAAgBmB,EACzB,CAEAa,iBAAwB,CACpB,IAAMhB,EAAW,KAAKJ,YAAY,KAAK78d,OAAO,EAC9C,KAAKk8d,cAAce,EACvB,CAEAiB,iBAAwB,CACpB,IAAMd,EAAW,KAAKN,YAAY,KAAK98d,OAAO,EAC1C,CAAC,KAAKk9d,wBAA0BE,GAAY,KAAKr9d,WACrD,KAAKm8d,cAAckB,EACvB,CAGAe,oBAAoBh2R,EAAqB1P,EAAW,GAAa,CAC7D,IAAMh9L,EAAe,KAAKmhe,gBAAgBz0R,GAC1C,GAAI1sM,IAAiB,GAAI,OAAO,KAAKm9I,QAErC,IAAM+8J,EAAWn6K,KAAKh1J,IAClB,EACAg1J,KAAKx1J,MAAM,KAAKq9J,SAASz8J,OAAS6xN,IAGhC2lS,EAAc5iW,KAAK/0J,IACrB,KAAK48J,SAASz8J,OAAS,EACvB60B,EAAek6S,GAGnB,OAAO,KAAKtyK,SAAS+6V,EACzB,CAGAC,qBAAqBl2R,EAAqB1P,EAAW,GAAa,CAC9D,IAAMh9L,EAAe,KAAKmhe,gBAAgBz0R,GAC1C,GAAI1sM,IAAiB,GAAI,OAAO,KAAKi9I,QAErC,IAAMi9J,EAAWn6K,KAAKh1J,IAClB,EACAg1J,KAAKx1J,MAAM,KAAKq9J,SAASz8J,OAAS6xN,IAGhC2lS,EAAc5iW,KAAKh1J,IAAI,EAAGi1B,EAAek6S,GAE/C,OAAO,KAAKtyK,SAAS+6V,EACzB,CAEAE,8BAAqC,CACjC,IAAMrB,EAAW,KAAKkB,oBAAoB,KAAKp+d,SAAS,EACpD,CAAC,KAAKm9d,wBAA0BD,GAAY,KAAKj9d,QACjD,KAAK+9d,kBAAA,EAGT,KAAK9B,gBAAgBgB,EACzB,CAEAsB,8BAAqC,CACjC,IAAMnB,EAAW,KAAKiB,qBAAqB,KAAKt+d,SAAS,EACzD,KAAKk8d,gBAAgBmB,EACzB,CAEAoB,4BAAmC,CAC/B,IAAMvB,EAAW,KAAKkB,oBAAoB,KAAKn+d,OAAO,EACtD,KAAKk8d,cAAce,EACvB,CAEAwB,4BAAmC,CAC/B,IAAMrB,EAAW,KAAKiB,qBAAqB,KAAKr+d,OAAO,EACnD,CAAC,KAAKk9d,wBAA0BE,GAAY,KAAKr9d,UACjD,KAAKm+d,gBAAA,EAGT,KAAKhC,cAAckB,EACvB,CAEcpmf,MAAa,CACvB,KAAK8gF,QAAQ4la,2BAA6B,GAC1C,KAAK5la,QAAQ6la,0BAA4B,GACzC,KAAK7la,QAAQ4ma,mBAAqB9zW,OAClC,KAAK9yD,QAAQ6ma,oCAAsC/zW,MACvD,CAEsBmxW,OAAc,CAChC,KAAKjka,QAAQ4la,2BAA6B,EAC9C,CAEAkB,QAAe,CACX,KAAK5nf,KAAA,CACT,CAEA,MAAoBglf,YAA4B,CACvC,KAAKlka,QAAQ6la,4BACd,KAAK7la,QAAQ6ma,oCACT,KAAK7ma,QAAQqka,uBACb,KAAKrka,QAAQska,mBACjB,KAAKtka,QAAQ4ma,mBAAqB,KAAKnB,QAAA,EACjCr5V,GAAgB,KAAKb,SAAU,KAAKm6V,SAAS,EAC7C,KAAKz9d,WAGX,KAAK+3D,QAAQ4la,2BAA4B,KAAK3B,MAAA,EAC7C,MAAM,KAAKD,KAAA,CACpB,CAUA+C,YAAwC,CAAC,EAAG,CAAC,EAE7C,IAAYC,oBAA8B,CACtC,OAAO,KAAKD,YAAY,KAAO,KAAKA,YAAY,EACpD,CAEAE,YAAoBnvd,EAAoB,CACpC,OAAO8uH,GAAc,KAAK2E,SAAUzzH,EACxC,CAEAovd,iBAAyBr4f,EAA0B,CAC/C,IACM0gb,EAAW,KAAKhkR,SAASz8J,OAAS,EAClCq4f,EAAevgW,GAAQ/3J,EAAO,CAAEF,IAAK2gb,EAAU5gb,IAAK6gb,CAAS,GAC7Dz3Y,EAAO,KAAKyzH,SAAS47V,GAM3B,OAHIt4f,GAASygb,EAAiB/rS,GAAe0oB,iBACzCp9J,GAAS0gb,EAAiBhsS,GAAe4oB,iBAEtCr0H,CACX,CAEAsvd,eAAeC,EAAyB,CAChC,KAAKvD,sBACL,KAAKwD,2BAA2BD,GAEhC,KAAKE,2BAA2BF,EAExC,CAEAC,2BAAmCD,EAAyB,CACxD,IAAMG,EACFp7V,GAAgB,KAAKb,SAAU87V,IAAcA,EAC3CI,EAAa,KAAKR,YAAYO,GAC9Bn1X,EAAa,KAAK40X,YAAY,KAAKh/d,SAAS,EAC5CugI,EAAW,KAAKy+V,YAAY,KAAK/+d,OAAO,EAE9C,KAAK6+d,YAAc,CAAC10X,EAAao1X,EAAYj/V,EAAWi/V,CAAU,CACtE,CAEAF,2BAAmCF,EAAyB,CACxD,IAAMG,EACFp7V,GAAgB,KAAKb,SAAU87V,IAAcA,EACjD,KAAKN,YAAc,CACf,KAAK9+d,UAAYu/d,EACjB,KAAKt/d,QAAUs/d,CACnB,CACJ,CAEAE,eAAeL,EAA4B,CAKvC,OAJIA,EAAY,KAAKzmV,QAAgBr9B,GAAe0oB,iBAChDo7V,EAAY,KAAKvmV,QAAgBv9B,GAAe4oB,iBAG7CvF,GADHwF,GAAgB,KAAKb,SAAU87V,IAAcA,EACrB,CAAE14f,IAAK,KAAKiyK,QAASlyK,IAAK,KAAKoyK,OAAQ,EACvE,CAEA6mV,gBAAwB7vd,EAAkB,CAClC,KAAKgsd,sBACL,KAAK8D,4BAA4B9vd,GAEjC,KAAK+vd,4BAA4B/vd,EAEzC,CAEA8vd,4BAAoC9vd,EAAkB,CAClD,IAAM0vd,EAAcp7V,GAAgB,KAAKb,SAAUzzH,IAASA,EACtDnU,EAAe,KAAKsje,YAAYO,GAGlCn1X,EAAa1uG,EAAe,KAAKoje,YAAY,GAC7Cv+V,EAAW7kI,EAAe,KAAKoje,YAAY,GAGzCx3E,EAAW,KAAKhkR,SAASz8J,OAAS,EAGxC,GAAI,CAAC,KAAKk4f,mBAAoB,CAC1B,IAAMc,EAAY,KAAKf,YAAY,GAAK,KAAKA,YAAY,GAErD10X,EAAai9S,GACbj9S,EAAai9S,EACb9mR,EAAW8mR,EAAWw4E,GACft/V,EAAW+mR,IAClB/mR,EAAW+mR,EACXl9S,EAAak9S,EAAWu4E,EAEhC,CAGA,IAAMrqC,EAAiB,KAAKypC,iBAAiB70X,GACvC01X,EAAe,KAAKb,iBAAiB1+V,GAE3C,KAAK27V,gBAAgB1mC,GACrB,KAAK2mC,cAAc2D,EACvB,CAEAF,4BAAoC/vd,EAAkB,CAClD,GAAM,CAAE8oI,UAASE,WAAY,KAEzB74I,EAAY,KAAKy/d,eAAe,KAAKX,YAAY,GAAKjvd,GACtD5P,EAAU,KAAKw/d,eAAe,KAAKX,YAAY,GAAKjvd,GAEnD,KAAKkvd,qBACF/+d,EAAY24I,EACZ14I,EAAU,KAAKw/d,eACX9mV,GAAW,KAAKmmV,YAAY,GAAK,KAAKA,YAAY,KAE/C7+d,EAAU44I,IACjB74I,EAAY,KAAKy/d,eACb5mV,GAAW,KAAKimV,YAAY,GAAK,KAAKA,YAAY,OAK9D,KAAK5C,gBAAgBl8d,GACrB,KAAKm8d,cAAcl8d,EACvB,CAEA8/d,iBACI5wN,EACAiwN,EACkB,CAClB,GAAM,CAAErna,WAAY,KAEhBloD,EAAO,KAAK4vd,eAAeL,GAG/B,GAAI,CAAC,KAAKjC,uBAAwB,CAC9B,IAAMoC,EAAcp7V,GAAgB,KAAKb,SAAUzzH,IAASA,EAExDs/P,IAAA,SACAowN,IAAgB,KAAKt/d,QAErB4P,EAAO,KAAKktd,YAAY,KAAK98d,OAAO,EAEpCkvQ,IAAA,OACAowN,IAAgB,KAAKv/d,YAErB6P,EAAO,KAAKitd,YAAY,KAAK98d,SAAS,EAE9C,CAEA,IAAMgge,EACF7wN,IAAA,SAAuCt/P,EAAO,KAAK5P,QAAA,MAE7CkvQ,IAAA,OAAqCt/P,EAAO,KAAK7P,UAAA,QAE/CmvQ,EAkBZ,OAhBI6wN,IAAsB7wN,IAClBA,IAAA,QACA,KAAK+sN,gBAAgBnka,EAAQska,kBAAkB,EAC9C,KAAKF,cAAcpka,EAAQqka,oBAAoB,GAGpDrka,EAAQ4la,4BAA8B,CAAC,KAAKL,WAC5C,KAAKpB,gBAAgBrsd,GACrB,KAAKssd,cAActsd,IACZs/P,IAAA,OACP,KAAKuwN,gBAAgBN,GAChBY,IAAA,QACL,KAAK9D,gBAAgBrsd,GAChBmwd,IAAA,OACL,KAAK7D,cAActsd,GAEhBmwd,CACX,CAEsB9D,gBAAgBn4V,EAA4B,CAC9D,KAAKhsE,QAAQqka,qBAAuBr4V,CACxC,CAEsBo4V,cAAcp4V,EAA4B,CAC5D,KAAKhsE,QAAQska,mBAAqBt4V,CACtC,CAEAk8V,iBAAwB,CACpB,KAAK/D,gBAAgB5gX,GAAe0oB,gBAAgB,CACxD,CAEAk8V,eAAsB,CAClB,KAAK/D,cAAc7gX,GAAe4oB,gBAAgB,CACtD,CAEAi8V,eAAsB,CAClB,KAAKjE,gBAAgB5gX,GAAe4oB,gBAAgB,CACxD,CAEAk8V,aAAoB,CAChB,KAAKjE,cAAc7gX,GAAe0oB,gBAAgB,CACtD,CAEAq8V,4BAA4Bxwd,EAAoB,CAC5C,IAAMk0H,EAAY,KAAK07V,eAAe5vd,GACtC,KAAKqsd,gBAAgBn4V,GACrB,KAAKo4V,cAAcp4V,EACvB,CAEAu8V,sBAAsBzwd,EAAoB,CACtC,IAAIk0H,EAAY,KAAK07V,eAAe5vd,GAG9B0vd,EAAcp7V,GAAgB,KAAKb,SAAUzzH,IAASA,EACxD,CAAC,KAAKstd,wBAA0BoC,IAAgB,KAAKt/d,UACrD8jI,EAAY,KAAKg5V,YAAY,KAAK98d,OAAO,GAIzC8jI,EAAY,KAAK9jI,SACjB,KAAKi8d,gBAAgB,KAAKnka,QAAQska,kBAAkB,EACpD,KAAKF,cAAcp4V,IAEnB,KAAKm4V,gBAAgBn4V,EAE7B,CAEAw8V,oBAAoB1wd,EAAoB,CACpC,IAAIk0H,EAAY,KAAK07V,eAAe5vd,GAG9B0vd,EAAcp7V,GAAgB,KAAKb,SAAUzzH,IAASA,EACxD,CAAC,KAAKstd,wBAA0BoC,IAAgB,KAAKv/d,YACrD+jI,EAAY,KAAK+4V,YAAY,KAAK98d,SAAS,GAI3C+jI,EAAY,KAAK/jI,WACjB,KAAKm8d,cAAc,KAAKpka,QAAQqka,oBAAoB,EACpD,KAAKF,gBAAgBn4V,IAErB,KAAKo4V,cAAcp4V,EAE3B,CACJ,E,80GC9hBuCs/C,eA/BjCm9S,IAAkB,GAClBC,IAAqC,IAErCC,IAAe,0BACfC,IAAoB,8BAQpBC,IAAkB,CACpB,UACA,YACA,YACA,aACA,SACA,WACA,OACA,KACJ,EAUuCv9S,KAAMpoG,U,SAAtC,cAAgCooG,G,wCADtC5zH,C,IAyCI0qC,E,EAAuB+kN,U,GAIvB/kN,E,EAAqB0mY,Y,GAIrB1mY,E,EAAqBmnS,Y,GAIrBnnS,E,EAAqBpiC,S,GAIrBoiC,E,EAAqB2mY,Y,GAIrB3mY,E,EAAqBumC,e,GAIrBvmC,E,EAAqB4mY,uB,GAIrB5mY,E,EAAqBkiC,c,GAIrBliC,E,EAAqB6mY,sB,IAuBrB3iZ,IAAOo6D,K,KAAcomV,Q,IASrBxgZ,IAAOo6D,K,KAAcwoV,kB,IAKrB5iZ,IAAOo6D,K,KAAcyoV,gB,IAKrB7iZ,IAAOo6D,K,KAAc0oV,c,IAiCrB9iZ,IAAOo6D,K,KAAcm+U,a,IA6BrBv4Y,IAAOo6D,K,KAAcwlC,a,IAWrB5/F,IAAOo6D,K,KAAc2oV,W,GAQrBjnY,E,EAAqBknY,uB,GAIrBlnY,E,EAAqBmnY,2B,GAkCrBnnY,E,EAAqBonY,mB,IAMrBljZ,IAAOo6D,K,KAAc+oV,mB,IASrBnjZ,IAAOo6D,K,KAAcgpV,mB,IAIrBpjZ,IAAOo6D,K,KAAcipV,oB,IAsBrBrjZ,IAAOo6D,K,KAAckpV,8B,IAYrBtjZ,IAAOo6D,K,KAAcmpV,gB,IAarBvjZ,IAAOo6D,K,KAAcopV,oB,IA8DrBxjZ,IAAOo6D,K,KAAcqpV,sC,IAcrBzjZ,IAAOo6D,K,KAAcspV,yB,IAWrB1jZ,IAAOo6D,K,KAAcwjV,Y,IAIrB59Y,IAAOo6D,K,KAAcupV,gB,IAMrB3jZ,IAAOo6D,K,KAAcwpV,gB,IAIrB5jZ,IAAOo6D,K,KAAcypV,qB,IAKrB7jZ,IAAOo6D,K,KAAc0pV,qB,IAIrB9jZ,IAAOo6D,K,KAAc2pV,wB,IAIrB/jZ,IAAOo6D,K,KAAc4pV,sB,IAQrBhkZ,IAAOo6D,K,KAAc6pV,sB,IAQrBjkZ,IAAOo6D,K,KAAc8pV,gB,IAOrBlkZ,IAAOo6D,K,KAAc+pV,c,IAiBrBnkZ,IAAOo6D,K,KAAcgqV,gB,IAMrBpkZ,IAAOo6D,K,KAAciqV,c,IAWrBrkZ,IAAOo6D,K,KAAckqV,8B,IAoBrBtkZ,IAAOo6D,K,KAAcmqV,4B,IAoBrBvkZ,IAAOo6D,K,KAAMoqV,0B,IAcbxkZ,IAAOo6D,K,KAAMqqV,wB,GAiCb3oY,E,EAAqB4oY,oB,GAwDrB5oY,E,EAAqB6oY,kB,GA8DrB7oY,E,EAAqB8oY,c,CAnqBa5/S,e,CAmBnC,YAAY/3M,EAA+B,CACvC,MAAMA,GAENyxL,EAQE,KAAM,CACJmmU,oBAAqBt4U,EACrBu4U,kBAAmBv4U,EACnBw4U,mBAAoBx4U,EACpBy4U,UAAWz4U,EACX04U,WAAY14U,EACZ24U,sBAAuB34U,CAC3B,EACJ,CArCA3hK,gBAAOo6L,EAAMk8Q,UAAA,GAEb8jC,UAEAH,oBAAuC,GACvCC,kBAAqC,GACrCC,mBAEAE,WAGAC,sBAAyC,GAEzCC,OACAC,WACAC,4BACArxB,UAA6C,GAuB7C,IAAwBnzJ,UAAmB,CACvC,OAAO,KAAK5zU,MAAM4zU,UAAYyoH,GAAuBxjX,KACzD,CAEA,IAAsB08a,YAA6C,CAC/D,OAAO,KAAK9oa,QAAQ4ra,kBACxB,CAEA,IAAsBriG,YAAsB,CACxC,MAAO,CAAC,CAAC,KAAKu/F,UAClB,CAEA,IAAsB9oa,SAA2B,CAC7C,OAAO,KAAKzsF,MAAMs4f,mBAAmB7ra,OACzC,CAEA,IAAsB+oa,YAAiC,CACnD,OAAO,KAAKx1f,MAAMs4f,kBACtB,CAEA,IAAsBljW,eAAyB,CAC3C,OAAOA,IACX,CAEA,IAAsBqgW,uBAAiC,CACnD,MAAO,CAAC,KAAKrgW,aACjB,CAEA,IAAsBrE,cAA6B,CAC/C,OAAO,KAAKtkE,QAAQ0vX,YAAYprT,cAAgBpS,GAAaqS,IACjE,CAEA,IAAsB0kW,sBAAwC,CAC1D,OAAO,KAAK3kW,eAAiBpS,GAAa8S,OACtC,KAAKV,eAAiBpS,GAAa+S,QACjC,QACA,KACV,CAEA,IAAY6mW,cAAuB,CAC/B,OAAO,KAAKL,OACN3/U,EAAOigV,SAAS,KAAKN,OAAOtpW,sBAAA,GAC5B,IAAI2pB,EAAO,EAAG,EAAG,IAAK,IAChC,CAEAkgV,sBACIn9e,EACkB,CAClB,GAAI,CAAC,KAAK48e,OAAQ,OAGlB,IAAM9G,EAFSpjW,GAAiB,KAAKkqW,OAAQ58e,GAAOzgB,EAE1B,KAAK09f,aAAa1/a,MAC5C,OAAO,KAAK28a,WAAWrE,eAAeC,EAC1C,CAEsBmC,OAAOO,EAAyB,CAClD,KAAK0B,WAAWjC,OAAA,EAChB,KAAK9ma,QAAQ4ra,mBAAqB,KAAK7C,WAAWf,iBAC9C,KAAKc,WACLzB,GAEJ,KAAK+B,aAAA,CACT,CAEsBF,kBAAyB,CAC3C,KAAK+C,0BAA0B/qY,OAAA,EAC/B,KAAKiqY,oBAAsB,EAC/B,CAEsBhC,gBAAuB,CACzC,KAAK+C,wBAAwBhrY,OAAA,EAC7B,KAAKkqY,kBAAoB,EAC7B,CAEsBhC,cAAqB,CACvC,KAAKF,iBAAA,EACL,KAAKC,eAAA,EAED,KAAKL,aAAe,UACpB,KAAKuC,mBAAA,eACL,KAAKvC,aAAe,QAAO,KAAKuC,mBAAA,aAChC,KAAKrra,QAAQqka,qBAAuB,KAAKrka,QAAQska,qBACjD,KAAK+G,mBACD,KAAKA,qBAAA,wCAGjB,CAEAc,cACI9E,EACA+E,EACAC,EACkB,CAClB,GAAM,CAAEhI,uBAAsBC,sBAAuB,KAAKtka,QAW1D,OARIqka,IAAyBC,IACxB8H,GAAiBC,GAEX7I,GAAmB8I,KACrBF,GAAiB/E,GAAahD,EAC5Bb,GAAmB+I,MACrBF,GAAehF,GAAa/C,EAC1Bd,GAAmBgJ,IACvBhJ,GAAmB8I,IAC9B,CAEsBzN,YAAYhwe,EAAsC,CAEpE,KAAKq7e,eAAA,EAEL,KAAKlqa,QAAQysa,kBAAA,EAGb,KAAKnB,UAAYx4W,OAEjB,IAAM45W,EAAWt5V,GAAOvkJ,EAAM9d,MAAiB,EAEzCs2f,EAAY,KAAK2E,sBAAsBn9e,GACzCw4e,IAAcv0W,SAElB,KAAK9yD,QAAQ4ra,mBAAqB,KAAKO,cACnC9E,EACAqF,EAASC,QAAA,eACTD,EAASC,QAAA,cAGT,KAAK7D,aAAe,QACpB,KAAKC,WAAW3B,eAAeC,GAEnC,KAAKP,OAAOO,GAEZx4e,EAAMk2V,eAAA,EACV,CAEA94F,WACsB/lE,YAAYr3L,EAAsC,CACpE,GAAM,CAAEi6e,cAAe,KAEvB,GADI,CAACA,GACD,KAAK78O,WAAY,OAErB,KAAKA,WAAa,GAClB,IAAMo7O,EAAY,KAAK2E,sBAAsBn9e,GACzCw4e,IAAcv0W,QAAW,KAAKg0W,OAAOO,GACzC,KAAKp7O,WAAa,EACtB,CAEsBo9O,WAAkB,CACpC,KAAKrpa,QAAQ4ra,mBAAqB94W,OAE9B,MAAK9yD,QAAQ4la,4BAEjB,KAAKgE,6BAAA,CACT,CAEA,IAAsBN,uBAAiC,CACnD,OAAO,KAAKP,WAAW9ge,YAAc,KAAK8ge,WAAW7ge,OACzD,CAEA,IAAsBqhe,2BAAqC,CACvD,MACI,CAAC,KAAKvpa,QAAQ4sa,6BACd,CAAC,KAAKrjG,YACN,CAAC,KAAK+/F,uBACN,CAAC,KAAKiC,YACN,CAAC,KAAKC,qBAEd,CAEAqB,aAAqBh+e,EAAsC,CACvD,GAAI,CAAC,KAAK06e,0BAA2B,OAErC,IAAMlC,EAAY,KAAK2E,sBAAsBn9e,GAG7C,GAFIw4e,IAAcv0W,QAEd,CAAC,KAAK24W,OAAQ,OAClB,IAAMqB,EAASvrW,GAAiB,KAAKkqW,OAAQ58e,GAAOzgB,EAC9C2+f,EACF,KAAKhE,WAAWnE,kBAAoB,KAAK6G,OAAOuB,YAIpD,GAAItpW,KAAKqC,IAAI+mW,EAASC,GAAUtE,IAAiB,CAC7C,KAAK6C,UAAYx4W,OACjB,MACJ,CAEA,IAAMkZ,EAAY,KAAK+8V,WAAWrB,eAAeL,GAC5CjiW,OAAOC,SAAS2G,KAErB,KAAKs/V,UAAYt/V,EACrB,CAEA,IAAsBw9V,mBAAwC,CAC1D,GAAI,KAAK8B,YAAcx4W,OACvB,OAAO,KAAKi2W,WAAWtE,eAAe,KAAK6G,SAAS,CACxD,CAEA2B,0BAA6C,GACvBxD,kBAAkB56e,EAAyB,CAC7D,KAAKo+e,0BAA4B,GAEjC,KAAK/D,iBAAA,EACL,KAAKC,eAAA,EAEL,KAAK0D,aAAah+e,EACtB,CAEsB66e,kBAAkB76e,EAAyB,CAC7D,KAAKg+e,aAAah+e,EACtB,CAEsB86e,oBAA2B,CAEzC,CAAC,KAAK3pa,QAAQ4la,4BACd,CAAC,KAAKr8F,YACN,CAAC,KAAKgiG,aAEN,KAAKJ,oBAAsB,GAC3B,KAAKC,kBAAoB,IAE7B,KAAK6B,0BAA4B,GACjC,KAAK3B,UAAYx4W,OAEZ,KAAKy4W,YAAY,KAAKrB,eAAA,CAC/B,CAEA+B,0BAA6Cntd,OAAE,CAC3C,KAAKqsd,oBAAsB,EAC/B,EAAGzC,KACHwD,wBAA2Cptd,OAAE,CACzC,KAAKssd,kBAAoB,EAC7B,EAAG1C,KAEmBkB,8BAAqC,CACnD,KAAKjhW,eAEL,KAAKsjW,0BAAA,EACL,KAAKC,wBAAA,GACG,KAAKe,4BAEb,KAAK9B,oBAAsB,GAC3B,KAAKC,kBAAoB,GAEjC,CAEsBvB,eAAenld,EAAkB,CACnDA,EAAIqgU,eAAA,EACJrgU,EAAI6xW,gBAAA,EAGC,KAAKv2T,QAAQ4la,6BACd,KAAKsD,iBAAA,EACL,KAAKC,eAAA,GAGT,KAAUJ,WAAW7E,WAAA,CACzB,CAEsB4F,mBAAmBj7e,EAAoB,CACzD,KAAKgwe,YAAYhwe,EACrB,CAEA44c,mBAAmC,CAC/B,IAAMn8d,EAAU,KAAK4lB,KAAK5lB,QAEtBA,IACA,KAAKmggB,OAASnggB,EAAQo/b,cAAc,IAAIi+D,KAAc,EACtD,KAAK+C,WAAapggB,EAAQo/b,cAAc,IAAIk+D,KAAmB,GAGnEj/f,SAAS2kK,gBAAgBuyM,iBAAiB,UAAW,KAAKwoJ,SAAS,EACnE1/f,SAAS2kK,gBAAgBuyM,iBAAiB,aAAc,KAAKwoJ,SAAS,EACtE1/f,SAAS2kK,gBAAgBuyM,iBAAiB,YAAa,KAAK36J,WAAW,EACvEv8M,SAAS2kK,gBAAgBuyM,iBAAiB,WAAY,KAAKwoJ,SAAS,EACpE1/f,SAAS2kK,gBAAgBuyM,iBAAiB,YAAa,KAAK36J,WAAW,EACvE,KAAKulT,QAAQ5qJ,iBAAiB,aAAc,KAAKipJ,mBAAoB,CACjEz0T,QAAS,EACb,GACA,KAAKq2T,YAAY7qJ,iBAAiB,WAAY,KAAKgpJ,eAAgB,CAC/Dx0T,QAAS,EACb,GAGA,KAAKilS,UAAUxqe,KACX0wL,OACU,KAAKxgG,QAAQ4la,4BAClBsH,EAAWC,KACJA,GAAc,CAACD,GACf,KAAKtD,6BAAA,CACb,GAGZ,CAEAliC,sBAAsC,CAClC/9d,SAAS2kK,gBAAgBkzM,oBAAoB,UAAW,KAAK6nJ,SAAS,EACtE1/f,SAAS2kK,gBAAgBkzM,oBACrB,aACA,KAAK6nJ,SACT,EACA1/f,SAAS2kK,gBAAgBkzM,oBACrB,YACA,KAAKt7J,WACT,EACAv8M,SAAS2kK,gBAAgBkzM,oBAAoB,WAAY,KAAK6nJ,SAAS,EACvE1/f,SAAS2kK,gBAAgBkzM,oBACrB,YACA,KAAKt7J,WACT,EACA,KAAKulT,QAAQjqJ,oBAAoB,aAAc,KAAKsoJ,kBAAkB,EACtE,KAAK4B,YAAYlqJ,oBAAoB,WAAY,KAAKqoJ,cAAc,EAEhE,KAAK8B,8BAAgC74W,SACrCs6W,qBAAqB,KAAKzB,2BAA2B,EACrD,KAAK3B,wBAAA,GAGT,KAAK1vB,UAAUx5d,QAAS+9K,GAAYA,IACxC,CAEsBkrU,sCAA6C,CAC/D,KAAK/pa,QAAQqta,yBAA2B,GAEpC,KAAK1B,8BAAgC74W,QACrCs6W,qBAAqB,KAAKzB,2BAA2B,EAGzD,KAAKA,4BAA8B2B,0BAAA,CAC/B,KAAK3B,4BAA8B2B,sBAC/B,KAAKtD,uBACT,CACJ,EACJ,CAEsBA,yBAAgC,CAClD,KAAK2B,4BAA8B74W,OACnC,KAAK9yD,QAAQqta,yBAA2B,EAC5C,CAEAzvD,WAAmB9la,EAAsB,CACrC,GAAM,CAAE43a,cAAe,KAAK1vX,QAE5B,OADK0vX,EACEA,EAAW7R,gBAAgB/la,GADVA,EAAKn0C,SAAA,CAEjC,CAEsBuggB,YAAmB,CACrC,KAAU6E,WAAW7E,WAAA,CACzB,CAEsB+F,eAClB7yN,EACI,CACJ,KAAKm0N,WAAan0N,CACtB,CAEsB8yN,gBAAuB,CACzC,KAAKqB,WAAaz4W,MACtB,CAEsBq3W,qBAA4B,CAC9C,KAAKqB,sBAAwB,GAC7B,KAAKF,UAAYx4W,MACrB,CAEsBs3W,qBAA4B,CAC9C,KAAKoB,sBAAwB,EACjC,CAEsBnB,wBAA+B,CACjD,KAAKiB,UAAYx4W,MACrB,CAEsBw3W,sBAA6B,CAC3C,KAAKhB,sBACL,KAAKP,WAAWb,gBAAA,EAEhB,KAAKa,WAAWT,4BAA4B,KAAKS,WAAWnoV,OAAO,CAE3E,CAEsB2pV,sBAA6B,CAC3C,KAAKjB,sBACL,KAAKP,WAAWZ,cAAA,EAEhB,KAAKY,WAAWT,4BAA4B,KAAKS,WAAWjoV,OAAO,CAE3E,CAEsB0pV,eAAe59W,EAAqB,CAElDA,IAASkG,QAAa,KAAKy4W,aAAez4W,QAC1C,KAAK23W,aAAa79W,GACtB,KAAKs9W,eAAA,CACT,CAEsBO,aAAa79W,EAAoB,CAC9C,KAAK08W,sBAEC,KAAKiC,aAAA,cACZ,KAAKxC,WAAWR,sBAAsB37W,GAEtC,KAAKm8W,WAAWP,oBAAoB57W,GAJpC,KAAKm8W,WAAWT,4BAA4B17W,EAMpD,CAEA2gX,oCAA4C31W,EAA4B,CACpE,OAAOuN,GACHqoW,IAA6B51W,GAC7B,KAAK0M,YACT,CACJ,CAEsBomW,eAAe9yW,EAA2B,CAExDA,GAAQ,KAAK2zW,aAAez4W,QAAW,KAAK63W,aAAa/yW,GAC7D,KAAKsyW,eAAA,CACT,CAEsBS,aAAa/yW,EAA0B,CACzD,IAAMupP,EAAiB,KAAKosH,oCAAoC31W,GAC3D,KAAK0xW,sBAEC,KAAKiC,aAAA,cACZ,KAAKxC,WAAWR,sBAAsBpnH,GAEtC,KAAK4nH,WAAWP,oBAAoBrnH,GAJpC,KAAK4nH,WAAWT,4BAA4BnnH,EAMpD,CAEsBypH,6BAClBxjgB,EACM,CACN,GAAM,CAAE2hgB,cAAe,KACjB,CAAE9ge,YAAWC,WAAY6ge,EAE/B,OAAOtjgB,GAAM2B,GACR0sK,KAAK,UAAW,iBACbi1V,EAAW9D,iBAAiBh9d,EAAWC,IAE1C4rI,KAAK,YAAa,gBACfi1V,EAAW1D,iBAAiBp9d,EAAWC,IAE1C4rI,KAAK,aAAgBi1V,EAAW1C,oBAAoBp+d,IACpD6rI,KAAK,eAAkBi1V,EAAWxC,qBAAqBt+d,IACvD6rI,KAAK,WAAci1V,EAAWnoV,OAAO,EACrC9M,KAAK,UAAai1V,EAAWjoV,OAAO,EACpC9M,WAAA,CACT,CAEsB62V,2BAClBzjgB,EACM,CACN,GAAM,CAAE2hgB,cAAe,KACjB,CAAE9ge,YAAWC,WAAY6ge,EAE/B,OAAOtjgB,GAAM2B,GACR0sK,KAAK,UAAW,iBACbi1V,EAAW9D,iBAAiB/8d,EAASD,IAExC6rI,KAAK,YAAa,gBACfi1V,EAAW1D,iBAAiBn9d,EAASD,IAExC6rI,KAAK,aAAgBi1V,EAAW1C,oBAAoBn+d,IACpD4rI,KAAK,eAAkBi1V,EAAWxC,qBAAqBr+d,IACvD4rI,KAAK,WAAci1V,EAAWnoV,OAAO,EACrC9M,KAAK,UAAai1V,EAAWjoV,OAAO,EACpC9M,WAAA,CACT,CAEc82V,yBAAyB1jgB,EAA0B,CAC7D,GAAM,CAAE2hgB,cAAe,KACvBtjgB,GAAM2B,GACD0sK,KAAK,WAAci1V,EAAWb,gBAAA,GAC9Bp0V,KAAK,UAAai1V,EAAWX,cAAA,GAC7Bt0V,KAAK,YAAa,gBACfi1V,EAAW7C,kBAAA,GAEdpyV,KAAK,aAAc,cAAiBi1V,EAAW9C,kBAAA,GAC/CnyV,KAAK,aAAgBi1V,EAAWvC,6BAAA,GAChC1yV,KAAK,eAAkBi1V,EAAWtC,6BAAA,GAClCzyV,WAAA,CACT,CAEc+2V,uBAAuB3jgB,EAA0B,CAC3D,GAAM,CAAE2hgB,cAAe,KACjB0E,EAAwB,CAAC,KAAKnE,sBACpC7jgB,GAAM2B,GACD0sK,KAAK,WAAci1V,EAAWV,YAAA,GAC9Bv0V,KAAK,UAAai1V,EAAWZ,cAAA,GAC7Br0V,KAAK,YAAa,iBACfi1V,EAAW3C,gBAAA,EACPqH,GAAuB1E,EAAW7C,kBAAA,CAC1C,GACCpyV,KAAK,aAAc,eAChBi1V,EAAW5C,gBAAA,EACPsH,GAAuB1E,EAAW9C,kBAAA,CAC1C,GACCnyV,KAAK,cACFi1V,EAAWrC,2BAAA,EACP+G,GACA1E,EAAWvC,6BAAA,CACnB,GACC1yV,KAAK,gBACFi1V,EAAWpC,2BAAA,EACP8G,GACA1E,EAAWtC,6BAAA,CACnB,GACCzyV,WAAA,CACT,CAEA05V,cAAc51d,EAAsB,CAGhC,OAFIA,IAAS,KAAkB,KAAKixd,WAAWnoV,QAC3C9oI,IAAS,IAAkB,KAAKixd,WAAWjoV,QACxChpI,CACX,CAEA,IAAsBkzd,oBAAsC,CACxD,GAAM,CAAE/ie,aAAc,KAAK8ge,WAE3B,GAAI,CAAC,KAAKoC,qBAAuB,CAAC,KAAK7B,sBACnC,OAGJ,IAAMqE,EAAqB,KAAK/vD,WAAW,KAAKmrD,WAAW9ge,SAAS,EAEpE,GAAI,CAAC,KAAK+ge,sBACN,OAAOv5S,SAACm+S,GAAD,CAAmBhvB,cAAe+uB,CAAqB,GAGlE,IAAME,EAAY,KAAKtC,aAAA,cASvB,OAAO/mW,GAAY,KAAKF,YAAY,GAChCmrD,SAACq+S,IAAD,CACI94a,SAAS,OACE64a,YACXjvB,cAAe+uB,EACft9R,YAAapoM,EACA8le,YAbAn2W,IACjB,GAAM,CAAEgpB,UAAS14I,UAASk9d,0BAA2B,KAAK2D,WACpDjxd,EAAO,KAAKy1d,oCAAoC31W,GAEtD,OADI9/G,EAAO8oI,EAAgB,GACpBwkV,EAAyBttd,GAAQ5P,EAAU4P,EAAO5P,CAC7D,EASQqkZ,YAAa,KAAK08E,qBAClBgB,mBAAsB,KAAKA,eAAA,eAC3B+D,WAAY,KAAKtD,eACjBh5S,SAAU,KAAKi5S,aACfsD,aAAc,KAAK9D,oBACnB5hT,aAAc,KAAK6hT,mBACtB,IAED36S,SAACy+S,GAAD,CACIl5a,SAAS,OACE64a,YACXx9R,YAAapoM,EACb22c,cAAe+uB,EACf1D,mBAAsB,KAAKA,eAAA,eAC3B+D,WAAY,KAAKxD,eACjB94S,SAAU,KAAK+4S,aACf0D,cAAe,KAAKvD,6BACpBqD,aAAc,KAAK9D,oBACnB5hT,aAAc,KAAK6hT,oBACnBj4I,OAAQ7rQ,MAAA,CACJ,KAAK6kZ,oBAAsB,GAC3B,KAAKC,kBAAoB,EAC7B,EACH,EAET,CAEA,IAAsBH,kBAAoC,CACtD,GAAM,CAAE/ie,WAAY,KAAK6ge,WAEzB,GAAI,CAAC,KAAKqC,kBAAmB,OAE7B,IAAMgD,EAAmB,KAAKxwD,WAAW,KAAKmrD,WAAW7ge,OAAO,EAEhE,GAAI,CAAC,KAAK8ge,sBACN,OAAOv5S,SAACm+S,GAAD,CAAmBhvB,cAAewvB,CAAmB,GAIhE,IAAMp5a,EACF,KAAKs2a,YAAcx4W,QACnB,KAAKw4W,UAAY,KAAKvC,WAAW7ge,QAC3B,OACA,QAEJ2le,EAAY,KAAKtC,aAAA,YAUvB,OAAO/mW,GAAY,KAAKF,YAAY,GAChCmrD,SAACq+S,IAAD,CACc94a,WACC64a,YACXjvB,cAAewvB,EACf/9R,YAAanoM,EACA6le,YAdAn2W,IACjB,GAAM,CAAEkpB,UAAS74I,YAAWm9d,0BACxB,KAAK2D,WACHjxd,EAAO,KAAKy1d,oCAAoC31W,GAEtD,OADI9/G,EAAOgpI,EAAgB,GACpBskV,EAAyBttd,GAAQ7P,EAAY6P,EAAO7P,CAC/D,EASQskZ,YAAa,KAAK08E,qBAClBgB,mBAAsB,KAAKA,eAAA,aAC3B+D,WAAY,KAAKtD,eACjBh5S,SAAU,KAAKi5S,aACfsD,aAAc,KAAK9D,oBACnB5hT,aAAc,KAAK6hT,mBACtB,IAED36S,SAACy+S,GAAD,CACcl5a,WACC64a,YACXx9R,YAAanoM,EACb02c,cAAewvB,EACfnE,mBAAsB,KAAKA,eAAA,aAC3B+D,WAAY,KAAKxD,eACjB94S,SAAU,KAAK+4S,aACf0D,cAAe,KAAKtD,2BACpBoD,aAAc,KAAK9D,oBACnB5hT,aAAc,KAAK6hT,oBACnBj4I,OAAQ7rQ,MAAA,CACJ,KAAK6kZ,oBAAsB,GAC3B,KAAKC,kBAAoB,EAC7B,EACH,EAET,CAEA,IAAsBF,cAAgC,CAClD,GAAM,CAAEI,aAAc,KAEtB,GAAI,CAACA,EAAW,OAChB,IAAM+C,EAAqB,KAAKzwD,WAAW0tD,GAE3C,GAAI,CAAC,KAAKtC,sBACN,OAAOv5S,SAACm+S,GAAD,CAAmBhvB,cAAeyvB,CAAqB,GAKlE,IAAMr5a,EAAWs2a,EAAY,KAAKvC,WAAW7ge,QAAU,OAAS,QAIhE,OACIunL,SAACy+S,GAAD,CACcl5a,WACVq7I,YAAai7R,EACb1sB,cAAeyvB,CAClB,EAET,CAEAvpT,QAAsC,CAClC,GAAM,CAAE9kH,UAAS+oa,aAAYuC,aAAc,KACrC,CACF1G,oBACAC,kBACAjkV,UACAE,UACA74I,YACAC,WACA6ge,EAEEuF,EAAmB,KAAK1wD,WAAWh9R,GACnC2tV,EAAmB,KAAK3wD,WAAW98R,GACnC6sV,EAAqB,KAAK/vD,WAAW31a,GACrCmme,EAAmB,KAAKxwD,WAAW11a,GACnCmme,EACF/C,IAAcx4W,OAAyCA,OAA7B,KAAK8qT,WAAW0tD,GAE9C,OACIp0N,UAAC,MAAD,CACIp1Q,IAAK,KAAK5Q,KACVZ,UAAWw9J,EAAGqhR,GAAwB,EACjC,GAAGA,GAAuB,UACvB,KAAK89D,2BACR,GAAG99D,GAAuB,UAAW,KAAKxmS,aAC/C,GACAlpE,MAAO,CAAE8vC,QAAS,QAA0C,EAC5D4/P,KAAK,QACL,aAAW,oBACXq/H,YAAaloZ,EAAQz3F,GACjB,KAAK46e,kBAAkB56e,EAAMkxN,WAAW,GAE5Cx3B,aAAc,KAAKohT,mBACnBzjT,YAAa5/F,EAAQz3F,GACjB,KAAK66e,kBAAkB76e,EAAMkxN,WAAW,GAfhDt7H,SAAA,CAkBK,CAAC,KAAKzkB,QAAQyua,cACXh/S,SAAC+uS,GAAD,CACIlue,UAAWs4e,IACX/oJ,cACI7/Q,EAAQ4la,2BACF,iBACA,gBAEV/G,YAAcjgd,GAAYA,EAAE23W,gBAAA,EAC5B1xC,QAAS,KAAKq/I,WACdzF,UAAW,GACX9kV,OACK35E,EAAQ4la,2BACH,QACA,QAAU,cAEpB9uO,KACI92L,EAAQ4la,2BACFhyN,IACApC,IAEVioI,SAAUz5U,EAAQ4la,2BAClBnma,MAAO,CAAEiva,WAA0B,CACtC,IAELj/S,SAACk/S,IAAD,CACI/vB,cAAe0vB,EACfzpJ,QAAS,KAAKylJ,qBACd2D,aAAc,KAAK5D,sBACtB,IACDnzN,UAAC,MAAD,CACI5mR,UAAW,GAAGq4e,IAAa,YAC3Bx5H,KAAK,QACL,aAAW,oBACX0vH,YAAchwe,GAAU,KAAKgwe,YAAYhwe,EAAMkxN,WAAW,EAJ9Dt7H,SAAA,EAMIgrG,SAACm/S,GAAD,CACIt+e,UAAA,cACAy5Q,UAAW,eAAe4jO,IAC1BkB,cAAejK,EAAoB,IACjB0J,mBACAC,mBAClBO,kBAAmBnB,EACnB9lS,SAAU,KAAKyhS,sBAAwB,EAAI,GAC3CprI,UAAW53Q,EAAQ1nE,IACXmwd,GAAwBnwd,EAAEx3C,GAAG,IAC7Bw3C,EAAEmmU,eAAA,EACF,KAAKglJ,qCAAA,EACL,KAAKe,yBAAyBlsd,EAAEx3C,GAAG,EAE3C,GACAyrX,QAASvsQ,MAAa,KAAK8iZ,aAAA,GAC3B9/D,QAAS,KAAK0hE,mBACdgE,OACI,KAAK3D,qBAAA,cAA0C,EAAI,CAE1D,IACD57S,SAACw/S,IAAD,CACuBrK,oBACFC,iBACpB,GACA,KAAK2E,oBAAsB12W,SACxB28D,SAACw/S,IAAD,CACI3+e,UAAU,iCACVs0e,kBAAmBlhW,KAAK/0J,IACpBi2f,EACA,KAAK4E,iBACT,EACA3E,gBAAiBnhW,KAAKh1J,IAClBk2f,EACA,KAAK4E,iBACT,EACA0F,WAAY,EACf,IAELz/S,SAACm/S,GAAD,CACIt+e,UAAA,YACAy5Q,UAAW,aAAaqkO,IACxBS,cAAehK,EAAkB,IACfyJ,mBACAC,mBAClBO,kBAAmBV,EACnBlwI,UAAW53Q,EAAQ1nE,IACXmwd,GAAwBnwd,EAAEx3C,GAAG,IAC7Bw3C,EAAEmmU,eAAA,EACF,KAAKglJ,qCAAA,EACL,KAAKgB,uBAAuBnsd,EAAEx3C,GAAG,EAEzC,GACAyrX,QAASvsQ,MAAa,KAAK8iZ,aAAA,GAC3B9/D,QAAS,KAAK2hE,iBACd+D,OACI,KAAK3D,qBAAA,YAAwC,EAAI,CAExD,GACA,KAAK7B,oBAAsB12W,QACxBu7W,IACI5+S,SAACm/S,GAAD,CACIt+e,UAAA,cACAu3M,SAAU,GACVgnS,cAAe,KAAKrF,kBAAoB,IACtB8E,mBACAC,mBAClBO,kBAAmBT,EACnB/kE,QAAS,KAAK4hE,aACd8D,OAAQ,CACX,EAER,C,IACLv/S,SAACk/S,IAAD,CACI/vB,cAAe2vB,EACf1pJ,QAAS,KAAK0lJ,qBACd0D,aAAc,KAAK5D,sBACtB,EACA,C,EAEb,C,aACJ,GAEA,IAAMsE,KAAsB,CACxB/vB,gBACA/5H,UACAopJ,eACA1lT,mBAQIkH,SAAC,SAAD,CACIn/L,UAAU,sCACVrB,KAAK,SACI41V,UACKopJ,eACA1lT,eACd,aAAY,WAAWq2R,IAEtBn6X,SAAAm6X,CACG,GAIhB,SAASgwB,GAAe,CACpBt+e,YACAy5Q,YACA8kO,gBACAP,mBACAC,mBACAO,oBACAxlE,UACAzhO,WAAW,EACXmnS,SACA9wI,YACArL,UACAV,UAAA,CAeA,OAGIj7E,UAAC,MAAD,CACI5mR,UAAWw9J,EAAG,0BAA2Bx9J,GACzCmvE,MAAO,CAAEooC,KAAM,GAAGgnY,EAAc,GAAIG,QAAO,EAC3C7/H,KAAK,SACKtnK,WACV,gBAAesnS,GAAuBb,GACtC,gBAAea,GAAuBL,GACtC,gBAAeK,GAAuBZ,GACtC,iBAAgBO,EAChB,aAAY/kO,EACZ,mBAAiB,4GACjB,mBAAiB,aACR8oF,UACDV,SACG+L,YAdfz5Q,SAAA,EAgBIgrG,SAAC,MAAD,CAAKn/L,UAAU,6BAA+B,GAC7Cg5a,CACA,C,EAEb,CAEA,SAAS4kE,GAAoB,CACzBl5a,WACA64a,YAAY,GACZx9R,cACAuuQ,gBACAqrB,iBACA+D,aACAt8S,WACAy8S,gBACAF,eACA1lT,eACA4pK,UAAA,CAcA,GAAM,CAACgO,EAAYC,KAAuB7xK,SAAS8hB,EAAY1sO,SAAA,GAIzD,CAAC24P,EAAW8yQ,KAAsB7gT,SAAS,CAAEs/S,YAAWx9R,aAAY,GAwC1E,OAtCIisB,EAAUuxQ,YAAcA,GACxBvxQ,EAAUjsB,cAAgBA,KAE1B++R,EAAa,CAAEvB,YAAWx9R,aAAY,GAClCw9R,GAAWztI,EAAc/vJ,EAAY1sO,SAAA,KAmCzC8rN,SAAC,MAAD,CACIn/L,UAAWw9J,EAAG,sBAAuB,CACjC,4BAA6B94F,IAAa,OAC1C,6BAA8BA,IAAa,OAC/C,GACA6pa,YAAcjgd,GAAMA,EAAE23W,gBAAA,EACR03G,eACA1lT,eAEb9jG,SAAAopZ,GACGp+S,SAAC,MAAD,CACIn/L,UAAU,oCACV,aAAY6vW,EAEZ17Q,UAAAgrG,SAAC,QAAD,CACIxgM,KAAK,SACLqB,UAAU,6BACVjpB,MAAO84X,EACPzuK,SA7BE9yK,IAClB,IAAM63C,EAAW73C,EAAE7tC,OAAO1J,MAC1B+4X,EAAc3pS,EAClB,EA2BoB07R,WAzBd,CACF,IAAMnxQ,EAAS+sD,GAAoBoyN,EAAWrxP,KAAA,GAC9Ck/X,IAAahtZ,EACjB,EAuBoBk9Q,UApDGt/U,IACnB,GAAIA,EAAEx3C,MAAQ,IAEVw3C,EAAEmmU,eAAA,OACC,GAAInmU,EAAEx3C,MAAQ,QAAS,CAC1B,IAAM45G,EAAS+sD,GAAoBoyN,EAAWrxP,KAAA,GAC9Ck/X,IAAahtZ,EACjB,MAAO,GAAIpiE,EAAEx3C,MAAQ,SACjB4mgB,WACG,GAAIG,GAAiBY,GAAwBnwd,EAAEx3C,GAAG,EAAG,CAExDw3C,EAAEmmU,eAAA,EAEF,IAAMsqJ,EAAUlB,EAAcvvd,EAAEx3C,GAAG,EACnCg5X,EAAcivI,EAAQ1rgB,SAAA,GACtB+tN,IAAW29S,EACf,CAEAzwd,EAAE23W,gBAAA,CACN,EAkCoB1jC,QAAUj0U,GAAMA,EAAE7tC,OAAOqiK,OAAA,EACzB28N,UAAA,GACA,aAAW,WACd,EACA,IAELtgL,SAAC,SAAD,CACIxgM,KAAK,SACLqB,UAAU,8BACVu0V,QAASolJ,EACD93I,SACR,aAAY,iBAAiBysH,EAAc,kBAE1Cn6X,SAAAm6X,CACG,EAEX,EAEb,CAEA,SAASkvB,IAAoB,CACzB94a,WACA64a,YAAY,GACZx9R,cACAuuQ,gBACAmvB,kBAA6B,GAC7BxhF,cAAc,MACd09E,iBACAgE,eACA1lT,eACAylT,aACAt8S,YAAA,CAcA,OACIjC,SAAC,MAAD,CACIn/L,UAAWw9J,EAAG,sBAAuB,CACjC,4BAA6B94F,IAAa,OAC1C,6BAA8BA,IAAa,OAC/C,GACci5a,eACA1lT,eACds2S,YAAcjgd,GAAMA,EAAE23W,gBAAA,EAErB9xS,SAAAopZ,GACGp+S,SAAC6/S,IAAD,CACIjogB,MAAOkogB,IAA6Bl/R,GACvB09R,cACAxhF,cACDyhF,aACFt8S,UACb,IAEDjC,SAAC,SAAD,CACIxgM,KAAK,SACLqB,UAAU,8BACVu0V,QAASolJ,EACT,aAAY,iBAAiBrrB,EAAc,kBAE1Cn6X,SAAAm6X,CACG,EAEX,EAEb,CAEA,IAAM0wB,KAAqB,CACvBjogB,QACA0mgB,cACAxhF,cAAc,MACdyhF,aACAt8S,cAAA,CAQA,GAAM,CAACzqB,EAAcuoU,KAAyBjhT,SAASlnN,GACjD,CAACoogB,EAAwBC,KACrBnhT,SAAS,IA+BbohT,GACFlgT,SAACmgT,IAAD,CACIvogB,MAAO4/L,EACPyqB,SAjBc95D,IAClB,GAAKA,IAEL43W,EAAgB53W,GAIZ63W,GAAwB,CACxB,GAAI,CAAC1B,EAAYn2W,GAAO,OACxB85D,IAAW95D,GACX83W,EAA0B,GAC9B,CACJ,EAMQv9I,WAAc67I,EAAW/mU,GACzBi3L,UAlCet/U,IACfA,EAAEx3C,MAAQ,QACV4mgB,EAAW/mU,GACJroJ,EAAEx3C,MAAQ,SACjB4mgB,IACOpvd,EAAEx3C,MAAQ,WAAaw3C,EAAEx3C,MAAQ,YAExCsogB,EAA0B,IAG1BA,EAA0B,IAE9B9wd,EAAE23W,gBAAA,CACN,EAsBQjmY,UAAWw9J,EAAG,6BAA8B,CACxC,oCAAqCy+P,IAAgB,OACzD,GACA,aAAW,YAEX9nU,UAAAgrG,SAACogT,IAAD,CAAWv/e,UAAU,kCACfm0F,SAAA5sF,GACEpyB,GAAM8mb,GACDz4Q,KAAK,aACF27C,SAACqgT,IAAD,CACaj4e,UACTvH,UAAU,mCACb,IAEJwjJ,KAAK,WACF27C,SAACsgT,IAAD,CACal4e,UACTvH,UAAU,mCACb,IAEJ0jJ,WAAA,CAEF,EACJ,GAOf,OAAOu4Q,IAAgB,SACnB98N,SAACugT,IAAD,CAAc/hY,OAAO,QAASxpB,SAAAkrZ,CAAwB,GAEtDA,CAER,EAOA,SAASG,IAAiB,CACtBj4e,UACAvH,aAAA,CAMA,GAAIuH,EAAQ5I,OAAS,SAAW4I,EAAQ5I,OAAS,OAC7C,OAAOwgM,WAAO25H,SAAP,CAAiB,GAE5B,IAAMvoL,GACF4uD,SAAC,OAAD,CAAM,iBAAYn/L,UAAU,sCAAsCm0F,SAAA,GAE5D,GAGV,OACIyyL,UAAAsxC,WAAA,CAAA/jO,SAAA,CACK5sF,EAAQ5I,OAAS,QAAU4xI,GAC5B4uD,SAACsgT,IAAD,CAAsBl4e,UAAoBvH,WAAY,EACxD,GAEV,CAEA,IAAM2+e,KAAoB,CACtBrK,oBACAC,kBACAv0e,YACA4+e,gBAAA,CAOA,IAAMrnY,EAAO+8X,EAAoB,IAC3B38X,EAAQ,IAAM48X,EAAkB,IACtC,OACIp1S,SAAC,MAAD,CACIn/L,UAAWw9J,EAAG,4BAA6Bx9J,GAC3CmvE,MAAO,CAAEooC,KAAM,GAAGA,EAAK,GAAII,MAAO,GAAGA,EAAM,EAAG,EAC9CknQ,KAAK,eACL,cAAa+/H,CAChB,EAET,EAEA,SAAStB,GAAkB,CACvBhvB,iBAAA,CAIA,OAAOnvR,SAAC,MAAD,CAAKn/L,UAAU,oBAAqBm0F,SAAAm6X,CAAmB,EAClE,CAGA,SAAgB2wB,IACZpuH,EAAA,CAEA,IAAMvpP,EAAO4L,GAA4B29O,GACzC,OAAO,IAAI8uH,GACPr4W,EAAKhL,KAAA,EACLgL,EAAK6N,MAAA,EAAU,EACf7N,EAAKA,KAAA,EAEb,CAGA,SAAgB41W,IAA6B51W,EAAA,CAEzC,IAAMs4W,EAAQlsW,KAAKmsW,IAAIv4W,EAAKhL,KAAMgL,EAAK6N,MAAQ,EAAG7N,EAAKmM,GAAG,EAC1D,OAAOJ,GAA4Bx4B,GAAMK,IAAI0kY,GACjD,CAEA,SAASnB,GAAwB3ngB,EAAA,CAC7B,OAAOyhgB,IAAgB3mY,SAAS96H,EACpC,CAEA,SAAS+ngB,GAAuBnwd,EAAA,CAC5B,OAAO6jF,IAAS7jF,GAAK,CAACA,EAAIA,CAC9B,CAEA,SAAS6jF,IAAS7jF,EAAA,CACd,MAAO,QAAQn8C,KAAKm8C,EACxB,CCnzCA,IAAaoxd,IAAsD,CAC/D,CACI3uX,EAAoB,UACpBA,EAAoB,YACpBA,EAAoB,SACpBA,EAAoB,WACpBA,EAAoB,UACpBA,EAAoB,WACxB,EACA,CACIA,EAAoB,YACpBA,EAAoB,WACpBA,EAAoB,kBACxB,EACA,CAACA,EAAoB,QAAQ,CACjC,EAOa4uX,IAAqD,EAC7D5uX,EAAoB,WAAY,QAChCA,EAAoB,YAAa,SACjCA,EAAoB,aAAc,OAClCA,EAAoB,aAAc,WAClCA,EAAoB,WAAY,aAChCA,EAAoB,aAAc,QAClCA,EAAoB,YAAa,UACjCA,EAAoB,oBAAqB,OACzCA,EAAoB,UAAW,YAC/BA,EAAoB,UAAW,UACpC,EAEa6uX,IAA0D,EAClE7uX,EAAoB,WAAY,cAChCA,EAAoB,YAAa,eACjCA,EAAoB,aAAc,aAClCA,EAAoB,aAAc,gBAClCA,EAAoB,WAAY,mBAChCA,EAAoB,aAAc,cAClCA,EAAoB,YAAa,gBACjCA,EAAoB,oBAAqB,aACzCA,EAAoB,UAAW,kBAC/BA,EAAoB,UAAW,UACpC,EAEM8uX,IAGF,EACC5uX,GAA2B,MAAOF,EAAoB,WACtDE,GAA2B,OAAQF,EAAoB,YACvDE,GAA2B,SAAUF,EAAoB,aACzDE,GAA2B,iBACxBF,EAAoB,aACvBE,GAA2B,gBAAiBF,EAAoB,YAChEE,GAA2B,iBACxBF,EAAoB,aACvBE,GAA2B,yBACxBF,EAAoB,oBACvBE,GAA2B,WAAYF,EAAoB,WAC3DE,GAA2B,UAAWF,EAAoB,UAC1DE,GAA2B,UAAWF,EAAoB,QAC/D,EAEM+uX,IAAiDC,GACnDF,GACJ,EAEA,SAAgBG,IACZ,EACgB,CAChB,OAAOH,IAA+CI,EAC1D,CAEA,SAAgBC,IACZ,EACoB,CACpB,OAAOJ,IAA+CltS,EAC1D,CAcA,SAAgButS,IACZ,EACsB,CACtB,OAAOprgB,GAAMqrgB,CAAO,CAAC,CAChB,KAAKlvX,GAAkB,UAAaD,GAA2B,KAAK,CAAC,CACrE,KAAKC,GAAkB,aAAgBD,GAA2B,GAAG,CAAC,CACtE,UAAW,GAAYivX,IAAkCE,CAAO,CAAC,CAC1E,CAEA,IAAaC,GAAgCF,IAE7C,SAAgBG,GACZ,EACA,EACM,CACN,GAAM,CAAE,SAAS,SAAYljgB,GAAW,CAAC,EAMzC,OAJIk+I,IAAQpK,GAAkB,MAAc,QACxCoK,IAAQpK,GAAkB,SACnB1S,IAAW,QAAU,MAAQ,YAEjCA,IAAW,QACZmhY,IAAiBrkX,GACjBskX,IAAsBtkX,EAChC,CAEA,SAAgBilX,IACZ,EAC8B,CAC9B,IAAK,IAAMC,KAAoBd,IAA+B,CAC1D,IAAMe,EAAkC,IAAI,IAAID,CAAgB,EAIhE,GAHwBE,EAAW,KAAM,GACrCD,EAAS,IAAI7tS,CAAS,CAEtB,EAAiB,OAAO4tS,CAChC,CAEJ,CAEA,SAAgBG,IACZ,EAC8B,CAE9B,OADyBJ,IAA+BG,CACjD,GAAkB,OAAQ,GAC7BA,EAAW,SAAS9tS,CAAS,CACjC,CACJ,CAEA,SAAgBguS,IACZ,EAC6B,CAC7B,OAAO5vX,IAAwB,SAAS5pH,CAAgB,CAC5D,CAEA,SAAgBy5e,GACZ,EACiC,CACjC,OAAO,OAAO,OAAO1vX,EAAwB,CAAC,CAAC,SAAS/pH,CAAgB,CAC5E,CAQA,IAAa05e,GAAc,GACvBxlX,IAAQpK,GAAkB,OAASoK,IAAQpK,GAAkB,SAEpD6vX,GACT,GAEAzlX,IAAQpK,GAAkB,SAMjB8vX,IACT,GACsB,CACtB,IAAMC,EAAe,IAAI,IAAIP,CAAU,EAEjC,CAAE,IAAG,IAAG,QAAO,QAASluX,GAExB0uX,EAAaD,EAAa,IAAIlwX,EAAoB,WAAW,EAC7DowX,EAAeF,EAAa,IAAIlwX,EAAoB,SAAS,EAC7DqwX,EAAeH,EAAa,IAAIlwX,EAAoB,SAAS,EAC7DswX,EAAiBJ,EAAa,IAAIlwX,EAAoB,WAAW,EAKvE,OAHImwX,EAAmB,CAACrzc,EAAGnwD,EAAGwT,EAAM01M,CAAK,EACrCu6S,EAAqB,CAACtzc,EAAGnwD,EAAGkpN,CAAK,EACjCw6S,GAAgBC,EAAuB,CAACxzc,EAAG+4J,CAAK,EAC7C,CAAC/4J,CAAC,CACb,E,u2GClLsC+sJ,eARhC0mT,IAAmB,EACnBC,IAAmC,EAEzC,SAASC,IAA2Blya,EAAA,CAChC,OAAQA,EAAQmya,eAAiB,IAAIrjgB,OAAS,CAClD,CAGsCw8M,KAAMpoG,U,2CAA/BkvZ,e,CAAAA,qBAAyB9mT,G,uCADrC5zH,C,IAQI0qC,E,EAAqBpiC,S,GAIrBoiC,E,EAAqB+vY,e,GAIrB/vY,E,EAAqBu5X,Y,GAIrBv5X,E,EAAqBiwY,a,GAsBrBjwY,E,EAAqBkwY,Y,GAMrBlwY,E,EAAqBykX,W,GAIrBzkX,E,EAAqB2kX,U,IAYrBzgY,IAAOo6D,K,KAAc6xV,Q,CA/DYjnT,e,yCAGlC,OAAOqwS,WAAW37Z,EAA2C,CACzD,OAAOkya,IAA2Blya,EACtC,CAEA,IAAsBA,SAAmC,CACrD,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAsBmya,eAAkC,CACpD,OAAO,KAAKnya,QAAQmya,eAAiB,EACzC,CAEA,IAAsBxW,YAAsB,CACxC,OAAOuW,IAA2B,KAAKlya,OAAO,CAClD,CAEA,IAAsBqya,aAAgC,CAClD,GAAM,CAAExrB,YAAWsrB,iBAAkB,KAGrC,GAAIA,EAAcrjgB,QAAUkjgB,IACxB,OAAOG,EAIX,IAAME,EAAcF,EAActvW,MAC9B,EACAovW,KAQJ,OAJKI,EAAYnwY,SAAS2kX,KACtBwrB,EAAYA,EAAYvjgB,OAAS,GAAK+3e,GAGnCwrB,CACX,CAEA,IAAsBC,YAA+B,CACjD,OAAO,KAAKH,cAAc36c,OACrBw0F,GAAQ,CAAC,KAAKqmX,YAAYnwY,SAAS8pB,GAE5C,CAEA,IAAsB66V,WAA4B,CAC9C,OAAO,KAAK7mZ,QAAQ6mZ,WAAa,KAAKsrB,cAAc,EACxD,CAEA,IAAsBprB,UAAsC,CACxD,OAAO,KAAKsrB,YAAYryf,IAAKgsI,IAAS,CAClC5kJ,IAAK4kJ,EACLzhI,SAASklM,SAAC+iT,IAAD,CAA2BxmX,KAAM,EAAhBA,GAC1B6pP,YAAa,CACTvlX,UAAWw9J,EAAG,CAAEglI,OAAQ9mK,IAAQ,KAAK66V,SAAU,GAC/ChnI,cAAe,eAAiB7zN,EAChC+9I,UAAWinO,GAAuBhlX,EACtC,CACJ,GACJ,CAEsBumX,OAAOE,EAAmC,CAC5D,IAAMC,EAAS,KAAK1ya,QAAQ6mZ,UACtB8rB,EAASF,EACf,KAAKzya,QAAQuya,OAAOI,GACpB,KAAK3ya,QAAQ8mZ,cAAc4rB,EAASC,EACxC,CAEA7tT,QAA6C,CAGzC,OAFK,KAAK62S,YAGNzkN,UAAC,MAAD,CAAK5mR,UAAU,8BAAfm0F,SAAA,EACIgrG,SAAC22R,GAAD,CACI9uV,QAAQ,OACRhnI,UAAU,mBACVvQ,MAAO,KAAKgne,SACZ3nD,YAAa,KAAKynD,UAClBn1R,SAAU,KAAK6gT,MAClB,GACA,KAAKD,WAAWxjgB,OAAS,IACtB2gN,SAACmjT,IAAD,CACIN,WAAY,KAAKA,WACjBvzG,SAAU,KAAKwzG,MAClB,EAEJ,C,GAjBoB,IAmBjC,C,IAGJ,SAASK,IAAa,CAClBN,aACAvzG,YAAA,CAKA,IAAM8zG,KAAergT,eAChBprN,IACG23Z,EAAS33Z,EACb,EACA,CAAC23Z,CACL,GAEA,OACI7nH,UAACm1M,IAAD,CAAA5nY,SAAA,EACIgrG,SAACg6O,GAAD,CACIn5a,UAAU,iDACV,aAAW,wBAEXm0F,UAAAyyL,UAAC,OAAD,CAAM5mR,UAAU,QAAhBm0F,SAAA,CAAwB,KAAS6tZ,EAAWxjgB,MAAa,C,EACrD,IACR2gN,SAAC0iR,GAAD,CACI7hd,UAAU,iCACVo/K,UAAU,SAEVjrF,UAAAgrG,SAAC08R,IAAD,CACI77d,UAAU,qCACV6uY,SAAU0zG,EAETpuZ,SAAA6tZ,EAAWtyf,IAAKgsI,IACbyjE,SAAC28R,IAAD,CAEIpkf,GAAIgkJ,EACJ17H,UAAU,qCAEVm0F,UAAAgrG,SAAC+iT,IAAD,CAAiBxmX,KAAM,EACjB,EALDA,GAOX,EACD,EACA,GAErB,CAEA,SAASwmX,IAAW,CAAExmX,OAAA,CAClB,OACIkrJ,UAAC,OAAD,CAAM5mR,UAAU,+BAAhBm0F,SAAA,EACIgrG,SAAC89O,GAAD,CAAqBvhT,KAAM,IAC3ByjE,SAAC,OAAD,CAAMn/L,UAAU,QAASm0F,SAAAusZ,GAAuBhlX,EAAW,EACzD,C,EAEd,C,u2GC7I2Cs/D,cAAMpoG,UAANooG,I,uCAA9BwnT,e,CAAAA,qBAA8BxnT,I,uCAD1C5zH,C,IAcI0qC,E,EAAa2wY,Y,GA0Bb3wY,E,EAAau3C,O,CAvCyB2xC,gB,CAGvC,YAAY/3M,EAA4C,CACpD,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,OAAO22T,WAAW37Z,EAA0C,CAExD,OAAOgza,IADQC,GAA0B,CAAEjza,SAAQ,CAC5Cgza,EAAOD,UAClB,CAEA,IAAcA,YAAsB,CAChC,GAAM,CACFG,eACAl3B,aACAm3B,qBACAC,6BACAC,mCACA,KAAK9/f,MAAMysF,QAEf,GAAImza,EAAoB,MAAO,GAE/B,IAAMG,EACFF,IAA+B3lX,GAAkB8lX,OAC/CC,EACFJ,IAA+B3lX,GAAkBgmX,MAIrD,OAFIz3B,EAAmBs3B,EAEhB,CAAC,EACJJ,GACAG,IACCG,GAAmBF,IACpB,KAAK35V,MAEb,CAEA,IAAcA,OAAqC,CAC/C,GAAM,CACF2pT,aAAa,GACb0b,mBAAmB,GACnB5B,uBACAC,kBACAq2B,iBACA13B,cACA,KAAKzoe,MAAMysF,QA8Bf,OA5BIg8Y,EACO,CACH11X,OAAQ,SACRm8D,OAAQ,YACRq0G,MAAMrnE,SAAC+9E,EAAD,CAAiB1W,KAAMqb,GAAQ,EACzC,EAEAirM,EACO,CACH92X,OAAQ,SACR,GAAGqtZ,GAAwB30B,GAC3BloN,MAAMrnE,SAAC+9E,EAAD,CAAiB1W,KAAMsY,EAAQ,EACzC,EAEAiuM,EACO,CACH/2X,OAAQ,SACR,GAAGqtZ,GAAwBrwC,GAC3BxsM,MAAMrnE,SAAC+9E,EAAD,CAAiB1W,KAAMgb,GAAc,EAC/C,EAEA4hO,EACO,CACHptZ,OAAQ,OACR,GAAGqtZ,GAAwB30B,GAC3BloN,MAAMrnE,SAAC+9E,EAAD,CAAiB1W,KAAMqb,GAAQ,EACzC,EAEG,IACX,CAEArtF,QAA6C,CACzC,GAAM,CAAEiuT,aAAYp5V,SAAU,KACxB,CAAEonU,kCAAmCjuL,GAAW,KAAKv/S,MAAMysF,QAEjE,OAAO+ya,GAAcp5V,GACjB81C,SAAC,MAAD,CACIn/L,UAAWm5c,EAAW,wBAAyB,CAC3C,qCAAsC,CAAC,CAAC9vT,EAAMi6V,YAClD,GAEAnvZ,UAAAyyL,UAAC,SAAD,CACI5mR,UAAWm5c,EAAW,cAAe,CAAE32K,QAAO,GAC9C+xD,QAASv+P,EAAQ1nE,IACb,KAAKrrC,MAAMysF,QAAQ+gZ,kCACf,CAACjuL,EACLl0Q,EAAE23W,gBAAA,CACN,GACAtnY,KAAK,SACL,kBAAgB,mBAChB,aAAY,GAAG0qJ,EAAMrzD,OAAO,GAAGqzD,EAAM8I,SAAS9I,EAAMi6V,cAAgB,KATxEnvZ,SAAA,CAWKk1D,EAAMm9G,MACPogB,UAAC,QAAD,CAAO5mR,UAAU,QAAjBm0F,SAAA,CACKk1D,EAAMrzD,OAAQ,KACf4wL,UAAC,OAAD,CAAAzyL,SAAA,CACKk1D,EAAM8I,OACN9I,EAAMi6V,eACHnkT,SAAC,OAAD,CAAMn/L,UAAU,gBACXm0F,SAAAk1D,EAAMi6V,YACL,EAER,GACH,CACH,G,EACP,GACL,IACR,C,IAOJ,SAASD,GACLlxV,EAAA,CAMA,OAJIA,4BACO,CAAEA,OAAQ,YAAamxV,aAAc,cAAe,EAC3DnxV,wBACO,CAAEA,OAAQ,UAAWmxV,aAAc,YAAa,EACpD,CAAEnxV,QAAO,CACpB,C,u2GClJuC6oC,cAAMpoG,UAANooG,I,uCAA1BuoT,e,CAAAA,qBAA0BvoT,I,uCADtC5zH,C,IAcI0qC,E,EAAqBpiC,S,GAIrBoiC,E,EAAqBs1W,W,GAIrBt1W,E,EAAqB0xY,U,IAYrBxtZ,IAAOo6D,K,KAAMgxC,U,GAebtvF,E,EAAat0H,S,GAcbs0H,E,EAAa/6H,O,CA9DqBikN,gB,CAGnC,YAAY/3M,EAA8C,CACtD,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,OAAO22T,WAAW37Z,EAA4C,CAE1D,OAAOi9T,IADM82G,GAAsB,CAAE/za,SAAQ,CACtCi9T,EAAK62G,QAChB,CAEA,IAAsB9za,SAAoC,CACtD,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAsB03Y,WAAuB,CACzC,OAAO,KAAK13Y,QAAQ03Y,WAAa,IAAInC,EACzC,CAEA,IAAsBu+B,UAAoB,CACtC,GAAM,CAAE93B,aAAYg4B,YAAWt8B,aAAc,KAAK13Y,QAElD,MAAO,EACHg8Y,IAECtE,GAAW7qV,MAAM4sR,UAEhB,KAAKi+D,UAAUprV,SAAW3B,GAAc8pV,OAAUu/B,GAE5D,CAEctiT,SAASkgR,EAAgD,CACnE,IAAMvqe,EAAQuqe,GAAUvqe,MACnBA,IAGL,KAAKqwe,UAAUprV,OAASjlJ,EAGpB,KAAKqwe,UAAUprV,SAAW3B,GAAc8pV,OACxC,KAAKiD,UAAUt6Y,UAAUg7W,iBACrB,KAAKs/B,UAAUt6Y,UAAU61Y,mBAC7B,EAER,CAEA,IAAcnle,SAAqC,CAW/C,OAVoDk4I,OAAOlwH,OACvD60H,IACF3qI,IAAKssI,IACI,CACHjlJ,MAAOilJ,EACPqtB,MAAO66T,GAAkBloV,GACzB23N,UAAW,oBACf,EAGGgwJ,CACX,CAEA,IAAc5sgB,OAAwC,CAClD,GAAM,CAAEilJ,UAAW,KAAKorV,UACxB,OAAO,KAAK5pe,QAAQg3J,KAAMlrD,GAAQA,EAAIvyG,QAAUilJ,IAAW,IAC/D,CAEAw4D,QAA6C,CAGzC,OAFK,KAAKgvT,UAGNrkT,SAAC0hR,GAAD,CACI7gd,UAAU,sBACVxiB,QAAS,KAAKA,QACd4jN,SAAU,KAAKA,SACfrqN,MAAO,KAAKA,MACZ,aAAW,kBACd,GATsB,IAW/B,C,k1GCxFiCikN,cAAMpoG,UAANooG,I,IAA9B,cAA8BA,I,uCADpC5zH,C,KAOI4uB,IAAOo6D,K,KAAcwzV,c,CANW5oT,gB,CACjC,YAAY/3M,EAA6B,CACrC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEsBkvU,aAAalnV,EAAwB,CACvD,KAAKz5K,MAAMi/L,KAAKvrC,UAAY+lB,CAChC,CAEA83B,QAAsC,CAClC,GAAM,CAAE45F,SAAQhyR,OAAQg2H,GACpB,CAAE8vD,OAAMthJ,SAAQumG,YAAa,KAAKlkJ,MAClC4ggB,EAAW3hU,EAAKvrC,YAAcy3I,EAC9B/kI,EAAQzoH,EAAS,GAAGA,EAAO,IAAM4hG,OAErC,OACI28D,SAAA+4H,WAAA,CAAA/jO,UACIyyL,UAAC,MAAD,CAAK5mR,UAAU,gBAAfm0F,SAAA,CACKgzC,IAAYg4D,SAAC,QAAD,CAAAhrG,SAAQgzC,CAAgB,IACrCg4D,SAAC,SAAD,CACIn/L,UAAWm5c,EAAW,CAAE32K,OAAQqhN,CAAS,GACzCtvJ,YAAqB,KAAKqvJ,aAAax1N,GACvC,kBAAgB,qBAEhBj6L,UAAAyyL,UAAC,OAAD,CAAM5mR,UAAU,QAAhBm0F,SAAA,CAAyBk1D,EAAM,QAAY,C,EACvC,IACR81C,SAAC,SAAD,CACIn/L,UAAWm5c,EAAW,CAAE32K,OAAQ,CAACqhN,CAAS,GAC1CtvJ,YAAqB,KAAKqvJ,aAAaxnf,GACvC,kBAAgB,qBAEhB+3F,UAAAyyL,UAAC,OAAD,CAAM5mR,UAAU,QAAhBm0F,SAAA,CAAyBk1D,EAAM,aAAiB,C,EAC5C,EACP,CACP,IAEV,C,aACJ,G,80GCjCkC2xC,eAT5B,CAAEqiP,cAAWI,gBAAaK,gBAAe3sT,EASb6pE,KAAMpoG,U,SAAjC,cAA2BooG,G,wCADjC5zH,C,KASI4uB,IAAOo6D,K,KAAMoiM,U,GAMb1gP,E,EAAagyY,gB,GAIbhyY,E,EAAapiC,S,GAIboiC,E,EAAaknU,S,CAtBgBh+O,e,CAG9B,YAAY/3M,EAAyC,CACjD,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEc89K,UAAiB,CAC3B,KAAK9iR,QAAQksD,UAAY,KAAKkoX,eACxB5vX,GAAUo2N,SACVp2N,GAAU0iC,QACpB,CAEA,IAAcktV,gBAA0B,CACpC,OAAO,KAAKp0a,QAAQksD,YAAc1H,GAAU0iC,QAChD,CAEA,IAAclnF,SAA+B,CACzC,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAcspW,SAAkB,CAC5B,GAAM,CAAE+qE,mBAAoB,KAAKr0a,QACjC,OAAOq0a,IAAoBtmE,IACrB,wEACAsmE,IAAoB1mE,KAAa0mE,IAAoBjmE,IACnD,gFACA,sFACZ,CAEAtpP,QAAsC,CAClC,IAAMnrC,EACF,KAAK35E,QAAQs0a,qBAAuB,0BACxC,OACI7kT,SAAC45O,GAAD,CACW1vR,QACPtyK,MAAO,KAAK+sgB,eACZ9qE,QAAS,KAAKA,QACdxmF,SAAU,KAAKA,SACfymF,SAAS,sBACZ,EAET,C,aACJ,G,80GCrDgCj+O,cAAMpoG,UAANooG,I,KAAzB,cAAyBA,I,wCAD/B5zH,C,KASI4uB,IAAOo6D,K,KAAMoiM,U,CARcx3J,gB,CAG5B,YAAY/3M,EAAuC,CAC/C,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEc89K,UAAiB,CAC3B,KAAKvvW,MAAMysF,QAAQmsD,gBAAkB,MAAK54I,MAAMysF,QAAQmsD,iBAClD2G,MAEV,CAEAgyD,QAAsC,CAClC,OACI2K,SAAC45O,GAAD,CACI1vR,MAAM,oBACN2vR,QAAQ,gEACRjic,MAAO,KAAKkM,MAAMysF,QAAQmsD,gBAC1B22N,SAAU,KAAKA,SACfymF,SAAS,yBACZ,EAET,C,aACJ,G,80GCnB2Cj+O,cAAMpoG,UAANooG,I,KAApC,cAAoCA,I,wCAD1C5zH,C,IASI0qC,E,EAAamyY,qB,GAQbnyY,E,EAAaquU,Y,GAIbruU,E,EAAa/zD,Y,GAIb+zD,E,EAAaoyY,Y,GAUbpyY,E,EAAaq1B,U,GAwDbr1B,E,EAAaqyY,e,CA1FyBnpT,gB,CAGvC,YAAY/3M,EAAmD,CAC3D,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAcuvU,qBAA0D,CACpE,MAAO,EACF5vX,GAAckiK,MAAO,gBACrBliK,GAAc89B,QAAS,YAAY,KAAKguR,cACxC9rT,GAAct1F,QAAS,YAAY,KAAKgf,YAC7C,CACJ,CAEA,IAAcoiY,YAAqB,CAC/B,OAAO,KAAKl9b,MAAMysF,QAAQsjY,+BAC9B,CAEA,IAAcj1Z,YAAqB,CAC/B,OAAO,KAAK96D,MAAMysF,QAAQ00a,4BAA8B,QAC5D,CAEA,IAAcF,YAA8B,CACxC,OACI,KAAKjhgB,MAAMysF,QAAQ20a,0BAA4B,CAC3ChwX,GAAckiK,KACdliK,GAAc89B,OACd99B,GAAct1F,MAClB,CAER,CAEA,IAAcooG,UAAmB,CAC7B,IAAMm9W,EAAe,KAAKnkE,WAAWhjc,QAAQ,OAAQ,KACjDongB,EAAW,KAAKL,WAAWtyY,SAASyiB,GAAc89B,MAAM,EACxDqyV,EAAW,KAAKN,WAAWtyY,SAASyiB,GAAct1F,MAAM,EAcxD,OAZAwld,GAAYC,EAQR,gEANAD,GAAYC,EACN,GAAG,KAAKzmc,WAAW,MAAMumc,IACzBC,EACE,KAAKpkE,WACL,KAAKpiY,YAMV,EAEf,CAEAy2I,QAAsC,CAClC,OACIoyF,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIgrG,SAAC,MAAD,CAAKn/L,UAAU,kBAAmBm0F,SAAA,KAAKgzC,QAAc,IACrDg4D,SAAC,MAAD,CAAKn/L,UAAU,cACVm0F,SAAA,KAAK+vZ,WAAWx0f,IAAK3Y,IAClB,IAAMsyK,EAAQ,KAAK46V,oBAAoBltgB,GACnCyrT,EAASzrT,IAAU,KAAKotgB,cACxBx0a,EAAS54F,EAAM1D,SAAA,EAEnB,OACIuzS,UAAC,SAAD,CAEI5mR,UAAWm5c,EAAWxpY,EAAQ,CAAE6yN,QAAO,GACvC+xD,YAAA,CACI,KAAKtxW,MAAMysF,QAAQy0a,cAAgBptgB,CACvC,EACA,kBAAiB,eAAe44F,IANpCwkB,SAAA,EAQIgrG,SAAC,MAAD,CAAKn/L,UAAU,gBACVm0F,SAAA3lE,GAAQz3C,IAAU,OAAS,EAAI,GAAG2Y,IAC9BjQ,IACG0/M,SAAC,OAAD,CAAoB,EAAT1/M,GAGlB,GACJ4pK,CACG,CAfC,EAAA15E,EAiBjB,EACC,EACP,GAEV,CAEA,IAAcw0a,eAA+B,CACzC,OAAO,KAAKlhgB,MAAMysF,QAAQy0a,eAAiB9vX,GAAckiK,IAC7D,C,aACJ,G,80GChGwCv7F,cAAMpoG,UAANooG,I,KAAjC,cAAiCA,I,wCADvC5zH,C,KASI4uB,IAAOo6D,K,KAAMoiM,U,GASb1gP,E,EAAa2yY,iB,CAjBsBzpT,gB,CAGpC,YAAY/3M,EAA+C,CACvD,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEc89K,UAAiB,CAC3B,GAAM,CAAEkyJ,SAAU,KAAKzhgB,MAAMysF,QACzBg1a,IACAA,EAAMC,YAAc,KAAKF,gBACnBhwX,GAAgBmwX,YAChBnwX,GAAgB78I,OAE9B,CAEA,IAAc6sgB,iBAA2B,CACrC,GAAM,CAAEC,SAAU,KAAKzhgB,MAAMysF,QAE7B,OADoBg1a,GAAOC,aAAelwX,GAAgB78I,UACnC68I,GAAgB78I,MAC3C,CAEA48M,QAA6C,CACzC,GAAM,CAAEkwT,QAAOP,iBAAkB,KAAKlhgB,MAAMysF,QAG5C,MAFI,CAACg1a,GAASP,IAAkB,OAAe,MAG3ChlT,SAAC45O,GAAD,CACI1vR,MAAM,oBACN2vR,QAAQ,oGACRjic,MAAO,KAAK0tgB,gBACZjyJ,SAAU,KAAKA,SACfymF,SAAS,4BACZ,EAET,C,aACJ,G,80GCxCsCj+O,cAAMpoG,UAANooG,I,KAA/B,cAA+BA,I,wCADrC5zH,C,KASI4uB,IAAOo6D,K,KAAMoiM,U,GAIb1gP,E,EAAapiC,S,CAZoBsrH,gB,CAGlC,YAAY/3M,EAA6C,CACrD,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEc89K,UAAiB,CAC3B,KAAK9iR,QAAQ2sD,eAAiB,CAAC,KAAK3sD,QAAQ2sD,cAChD,CAEA,IAAc3sD,SAAmC,CAC7C,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA8kH,QAAsC,CAClC,OACI2K,SAAC45O,GAAD,CACI1vR,MAAO,sBACPtyK,MAAO,KAAK24F,QAAQ2sD,eACpB28S,QAAQ,kEACRxmF,SAAU,KAAKA,SACfymF,SAAS,2BACZ,EAET,C,aACJ,G,u2GCuDkCj+O,mBAoSNA,GArVtB,CACFqiP,cACAI,eACAI,gBACAL,sBACAD,eACAK,cACAE,gBACA3sT,EAyC8B6pE,KAAMpoG,U,2CAA3BiyZ,e,CAAAA,qBAAqB7pT,G,uCADjC5zH,C,IAeI0qC,E,EAAakhG,W,GAIblhG,E,EAAagzY,kB,GAiBbhzY,E,EAAqBizY,kB,GAKrBjzY,E,EAAqBkzY,wB,GAQrBlzY,E,EAAamzY,gB,GAMbnzY,E,EAAaozY,sB,GAObpzY,E,EAAqBqzY,kB,GAiBrBrzY,E,EAAqBszY,kB,GAmCrBtzY,E,EAAqBuzY,wB,IAgBrBrvZ,IAAOo6D,K,KAAck1V,kB,GAIrBxzY,E,EAAqBpiC,S,GAIrBoiC,E,EAAqB02W,gB,GAIrB12W,E,EAAqByzY,mB,GAgFrBzzY,E,EAAqB0zY,W,CA7NQxqT,e,CAC9BwnG,kBAA0B,IAE1B,YAAYv/S,EAA0B,CAClC,MAAMA,GAENyxL,EAAuC,KAAM,CAAE8tH,OAAQjgI,EAAW/wJ,GAAI,EAC1E,CAEA,OAAO65d,WAAW37Z,EAAuC,CAErD,OAAOn9F,IADMkzgB,GAAiB,CAAE/1a,SAAQ,CACjCn9F,EAAK8ygB,sBAChB,CAEA,IAAcryS,WAA8B,CACxC,OAAO,KAAKtjI,QAAQq0a,iBAAmB5yX,EAAoBksT,SAC/D,CAEA,IAAcynE,kBAAwC,CAclD,OAbI,KAAKp1a,QAAQo0a,gBAEb,CACI3yX,EAAoB0sT,YACpB1sT,EAAoBosT,WACpBpsT,EAAoBmsT,YACpBnsT,EAAoBqsT,mBACpBrsT,EAAoBysT,UACpBzsT,EAAoB4sT,SACpB5sT,EAAoB6sT,QACvB,EAACpsU,SAAS,KAAKohG,SAAgB,EAEzB,GACJ,KAAKtjI,QAAQg1a,MAAMgB,kBAC9B,CAEA,IAAsBX,kBAAwC,CAE1D,MADA,CAAI,KAAKr1a,QAAQo0a,gBACV,KAAKp0a,QAAQi2a,MAAMD,kBAC9B,CAEA,IAAsBV,wBAAkC,CAEpD,OACI,KAAKt1a,QAAQy0a,gBAAkB9vX,GAAckiK,MAC7C,KAAKvjF,YAAcwqO,EAE3B,CAEA,IAAcynE,gBAA0B,CACpC,OACI,KAAKjyS,YAAcyqO,IAAe,KAAK+qC,eAAephC,YAE9D,CAEA,IAAc89D,sBAAgC,CAC1C,OACI,KAAKlyS,YAAc4qO,KACnB,KAAKluW,QAAQ+7Y,cAAgBjpV,MAErC,CAEA,IAAsB2iX,kBAA4B,CAC9C,GAAM,CAAES,wBAAuBC,cAAaC,iBACxC,KAAKp2a,QAIT,OAHKk2a,EACD,KAAK5yS,YAAcyqO,GACZqoE,IAAkBtjX,QAAa,CAAC,CAACqjX,EACrC,CACHhoE,IACAN,IACAC,GACAC,GACAJ,IACAO,IACAE,GACH,EAAClsU,SAAS,KAAKohG,SAAgB,EAXG,EAYvC,CAEA,IAAsBoyS,kBAA4B,CAC9C,GAAM,CACFW,mBACA1B,2BACA2B,mBACApD,gBACA,KAAKlza,QAGT,GAAI20a,EAAyB7lgB,QAAU,EAAG,MAAO,GAIjD,GAAI,CAAC6lgB,EAAyBzyY,SAASyiB,GAAckiK,IAAI,EAAG,MAAO,GAEnE,IAAM0vN,EAA4B,CAC9BpoE,IACAN,IACAC,GACAH,IACAS,GACH,EAAClsU,SAAS,KAAKohG,SAAgB,EAE1BkzS,EAAgBH,EAAiBxwY,KAClCm+F,GAAQA,EAAI3/D,QAAQ2/K,YACzB,EAEA,OACIuyL,GACA,CAACD,GACD,CAACE,GACD,CAAC,CAACtD,CAEV,CAEA,IAAsByC,wBAAkC,CAGpD,OAFK,KAAK31a,QAAQkza,aAEX,CAAC,EACJ,KAAKkC,kBACL,KAAKC,kBACL,KAAKC,wBACL,KAAKC,gBACL,KAAKC,sBACL,KAAKE,kBACL,KAAKD,kBAT8B,EAa3C,CAEsBG,iBAAiB57S,EAAsB,CACzD,KAAK84F,OAAS94F,GAAQ,CAAC,KAAK84F,MAChC,CAEA,IAAsB9yN,SAA+B,CACjD,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAsB84Y,gBAAiC,CACnD,OAAOzV,GAAmB,KAAKrjY,QAAQ5C,SAAS,CACpD,CAEA,IAAsBy4a,mBAAwC,CAC1D,GAAM,CACF71a,UACAo1a,mBACAC,mBACAE,iBACAC,uBACAE,mBACAJ,yBACAG,oBACA,KAEE,CACFT,QACAiB,QAEAI,mBACAnD,gBACAlza,EAEEy2a,EACEJ,EAAiBvxW,KAAM3lH,GAAsBA,EAAE7mC,WAAa,MACtD+rJ,QAAQx7J,MAAQ,SAC1B6tgB,EACIL,EAAiBvxW,KAAM3lH,GAAsBA,EAAE7mC,WAAa,MACtD+rJ,QAAQx7J,MAAQ,SAI9B,OACIquS,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIyyL,UAACy/N,GAAD,CACIz/W,MAAM,aACN47J,OACIogN,IACCuC,GACGF,GACAC,GACAE,GACAJ,GARZ7wZ,SAAA,CAWKixZ,IACGjmT,SAACmnT,IAAD,CAAgC52a,SAAU,GAE7Cs1a,IACG7lT,SAAConT,IAAD,CAA6B72a,SAAU,GAE1Cy1a,IAAoBhmT,SAACqnT,IAAD,CAAuB92a,SAAU,GACrDw1a,IACG/lT,SAACsnT,IAAD,CAA2B/2a,SAAU,GAExCu1a,IAAkB9lT,SAACunT,IAAD,CAAqBh3a,SAAU,EACvC,CACf,IAAAk3M,UAACy/N,GAAD,CACIz/W,MAAM,aACN47J,OACIogN,IAAiBkC,GAAoBC,GAH7C5wZ,SAAA,CAMK2wZ,IACG3lT,SAACwnT,GAAD,CACIzkU,KAAMwiU,EACNv9W,SApCZ29W,GAAoB,CAACC,GAAoBoB,IAAW,SAoCV,GAAKA,CACtC,GAEJpB,IACG5lT,SAACwnT,GAAD,CAAiBzkU,KAAMyjU,EAAOx+W,SAAUi/W,CAAS,IAErDjnT,SAAC,MAAD,CAAKn/L,UAAU,kBAAkBm0F,SAAA,oNAK5B,EACM,CACjB,KAEV,CAEA,IAAsBqxZ,WAAoB,CACtC,MAAO,GAAGxF,IAAsB,KAAKhtS,WAAW,UACpD,CAEA4zS,8BAA2D,CACvD,GAAM,CAAEpkN,UAAW,KAEnB,OACIrjG,SAAC,MAAD,CAAKn/L,UAAU,gBACXm0F,UAAAyyL,UAACigO,IAAD,CACI5vJ,OAAQ,KAAKz0D,OACbk7K,aAAc,KAAK4nC,iBAFvBnxZ,SAAA,EAIIyyL,UAACuyJ,GAAD,CACIn5a,UAAWm5c,EAAW,cAAe,CAAE32K,QAAO,GAC9C,kBAAgB,6BAChB,aAAW,iBAHfruM,SAAA,EAKIgrG,SAAC+9E,EAAD,CAAiB1W,KAAMwa,GAAS,IAChC7hF,SAAC,OAAD,CAAMn/L,UAAU,QAAQm0F,SAAA,UAAc,EAClC,CACR,IAAAgrG,SAAC0iR,GAAD,CACI7hd,UAAW++a,IACX3/P,UAAU,aACVjwG,MAAO,CACH0nP,SAAU,KAAK5zU,MAAM6jgB,gBACrBloG,UAAW,KAAK37Z,MAAM8jgB,gBAC1B,EAEA5yZ,UAAAyyL,UAACg3L,GAAD,CAAAzpX,SAAA,EACIgrG,SAAC6nT,IAAD,CACIpzS,KAAK,QACL5zM,UAAU,iCAEVm0F,UAAAgrG,SAACy6O,GAAD,CACIhzS,MAAO,KAAK4+W,UACZn/F,cACI,KAAKi/F,iBAAiB,GAE7B,EACI,IACTnmT,SAAC,MAAD,CAAKn/L,UAAU,kCACVm0F,SAAA,KAAKoxZ,iBACL,EACD,GACH,EACE,C,EACd,EAEb,CAEA/wT,QAA6C,CACzC,GAAM,CACF9kH,QAAS,CAAEkza,gBACXyC,0BACA,KAEJ,OAAOzC,GAAgByC,EACjB,KAAKuB,6BAAA,EACL,IACV,C,IAWwB5rT,KAAMpoG,U,QADlC,cAC4BooG,G,+BAD3B5zH,CAC2B4zH,kB,CACxBxG,QAA6C,CACzC,GAAM,CAAEguG,SAAQ57J,QAAOO,WAAUhzC,YAAa,KAAKlxG,MAGnD,OAFKu/S,GAGD5b,UAAC,UAAD,CAAAzyL,SAAA,EACIgrG,SAAC,MAAD,CAAKn/L,UAAU,cAAem0F,SAAAyyC,CAAW,GACxCO,IAAYg4D,SAAC,MAAD,CAAKn/L,UAAU,kBAAmBm0F,SAAAgzC,CAAc,GAC5DhzC,CACI,IAPO,IASxB,C,aACJ,G,u2GC/WoC6mG,cAAMpoG,UAANooG,I,uCAAvBisT,e,CAAAA,qBAAuBjsT,I,uCADnC5zH,C,IAkBI0qC,E,EAAqB0xY,U,GAsBrB1xY,E,EAAqBpiC,S,GAIrBoiC,E,EAAqBs1W,W,GAIrBt1W,E,EAAqBu3C,O,GAOrBv3C,E,EAAqB6hP,W,IAOrB39P,IAAOo6D,K,KAAcmkM,S,CA7DUv5J,gB,CAIhC,YAAY/3M,EAA4B,CACpC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,OAAO22T,WACH37Z,EACAsmB,EACO,CAEP,OAAO22S,IADMu6G,GAAmB,CAAEx3a,UAASsmB,QAAO,CAC3C22S,EAAK62G,QAChB,CAEA,IAAsBA,UAAoB,CACtC,GAAM,CAAEp8B,aAAc,KAChB,CAAEsE,aAAYg4B,YAAWZ,8BAC3B,KAAK7/f,MAAMysF,QAEf,GAAI,CAACg8Y,EAAY,MAAO,GAKxB,IAAMy7B,EAFFrE,IAA+B3lX,GAAkBwlS,QAG7B+gF,GAAat8B,EAAU8K,oBAAA,GAEzCk1B,EACFhgC,EAAU7qV,MAAM4sR,UAAY,CAACg+F,EAEjC,OAAOhygB,GAAM,KAAK8N,MAAM+yG,MAAM,EACzBwtD,KAAK,gBAAmB2jW,GACxB3jW,KAAK,gBAAmB4jW,GACxB1jW,WAAA,CACT,CAEA,IAAsBh0E,SAAiC,CACnD,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAsB03Y,WAAuB,CACzC,OAAO,KAAK13Y,QAAQ03Y,WAAa,IAAInC,EACzC,CAEA,IAAsB57T,OAAgB,CAClC,OAAOl0K,GAAM,KAAK8N,MAAM+yG,MAAM,EACzBwtD,KAAK,gBAAmB,cACxBA,KAAK,gBAAmB,cACxBE,WAAA,CACT,CAEA,IAAsBiwM,WAAoB,CACtC,OAAOx+W,GAAM,KAAK8N,MAAM+yG,MAAM,EACzBwtD,KAAK,gBAAmB,kBACxBA,KAAK,gBAAmB,kBACxBE,WAAA,CACT,CAEsB6wM,SAAgB,CAClC,KAAK6yH,UAAUprV,OAAS3B,GAAc8pV,MACtC,KAAKz0Y,QAAQ23a,iBAAiBC,YAC9B,KAAK53a,QAAQ23a,iBAAiBE,aAE1B,KAAKtkgB,MAAM+yG,SAAW,cACtB,KAAKtmB,QAAQqka,qBAAuB,KAAKrka,QAAQska,mBAEzD,CAEAx/S,QAA6C,CACzC,OAAO,KAAKgvT,UACR58N,UAAC,SAAD,CACIjoR,KAAK,SACL,kBAAiB,KAAKg1V,UACtBY,QAAS,KAAKA,QACdv0V,UAAU,cAJdm0F,SAAA,EAMIgrG,SAAC+9E,EAAD,CAAiB1W,KAAMgc,GAAe,IACtCrjF,SAAC,OAAD,CAAMn/L,UAAU,QAASm0F,SAAA,KAAKk1D,KAAY,EACtC,CACR,OACR,C,ICnGJ,SAAgBm+V,IACZ,EACA,CACI,uBACA,wBACA,uBAEQ,CACZ,IAAMC,EAAiBtygB,GAAM+xD,CAAM,CAAC,CAC/B,KAAK,UAAa2ha,CAAoB,CAAC,CACvC,KAAK,gBACF1hB,EAAoB,OAAS,EACvBA,EACA0hB,CACV,CAAC,CACA,KACGwd,IACC,GACGZ,EAAsB,IAAIv+a,CAAM,GAAK2ha,CAC7C,CAAC,CACA,WAAW,EAEVC,EAAyB,IAAI,IAAID,CAAoB,EAC3D,OAAO4+C,EAAe,OAAQ,GAAS3+C,EAAuB,IAAIvwd,CAAI,CAAC,CAC3E,CAEA,SAAgBmvgB,IACZ,EACA,CAAE,wBACqB,CACvB,IAAMC,EAAY,IAAoD,CAClE,MAAOzgd,EACP,MAAOsgd,IAAiCtgd,EAAQ+nZ,CAAQ,CAAC,CAAC,MAC9D,GAEM24D,EAAqB,CAAC,GAAG34D,EAAS,sBAAsB,KAAK,CAAC,CAAC,CAChE,IAAI04D,CAAQ,CAAC,CACb,QAAQ,CAAE,WAAYtqd,EAAQ,CAAC,EAEpC,MAAO,CACHsqd,EAAS,KAAK,EACd,GAAIE,EAAuB,CAACF,EAAS,WAAW,CAAC,EAAI,CAAC,EACtD,GAAGC,CACP,CACJ,CAEA,SAAgBE,IACZ,EACO,CACP,GAAM,CAACC,EAAW,GAAGC,GAAgBxqgB,EACrC,OAAOwqgB,EAAa,MAAM,CAAE,WAAY3qd,EAAQ0qd,EAAU,KAAK,CACnE,CAEA,SAAgBE,IACZ,EACe,CACf,GAAM,CAACF,EAAW,GAAGC,GAAgBxqgB,EAC/B0qgB,EAAkBF,EAAa,MAChC,CAAE,WAAYjxgB,IAAU,WAC7B,EAGA,OADMmxgB,GAAmBA,EAAgB,MAAQ,EAAIH,EAAU,OACjCG,EAAgB,MAAQH,EAAU,MAC1D,YACA,KACV,C,u2GC/C6C/sT,eApBvCmtT,IAAiD,CACnDjgT,IAAK,MACLp7H,UAAW,YACX,GAAGq4Y,EACP,EAgB6CnqR,KAAMpoG,U,2CAAtCw1Z,e,CAAAA,qBAAgCptT,G,uCAD5C5zH,C,IAcI0qC,E,EAAqBpiC,S,GAIrBoiC,E,EAAqBu5X,Y,IAQrBr1Y,IAAOo6D,K,KAAcgxC,U,GAOrBtvF,E,EAAqBt0H,S,GAQrBs0H,E,EAAqB/6H,O,CAxCmBikN,e,CAGzC,YAAY/3M,EAAoD,CAC5D,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,OAAO22T,WAAW37Z,EAAkD,CAEhE,OAAOi9T,IADM07G,GAA4B,CAAE34a,SAAQ,CAC5Ci9T,EAAK0+F,UAChB,CAEA,IAAsB37Z,SAA0C,CAC5D,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAsB27Z,YAAsB,CACxC,MACI,CAAC,CAAC,KAAK37Z,QAAQkrZ,cACfktB,IAAyB,KAAKp4a,QAAQ44a,sBAAsB,GAC5D,CAAC,KAAK54a,QAAQm6Z,YAEtB,CAEsBzoS,SAASkgR,EAAuC,CAC9DA,GAAUvqe,QACV,KAAK24F,QAAQ64a,gBAAgBrhd,OAASo6a,EAASvqe,MAC/C,KAAK24F,QAAQ64a,gBAAgB9gT,OAAS,GAE9C,CAEA,IAAsBjqN,SAA4B,CAC9C,OAAO,KAAKkyF,QAAQ44a,uBAAuB54f,IAAKigF,IAAY,CACxD,GAAGA,EACH05E,MAAO8+V,IAAcx4a,EAAO54F,OAC5B48W,UAAW,sBACf,GACJ,CAEA,IAAsB58W,OAA+B,CACjD,IAAMmwD,EAAS,KAAKjkD,MAAMysF,QAAQ84a,gBAClC,OACI,KAAKhrgB,QAAQg3J,KAAM7kE,GAAWzoC,IAAWyoC,EAAO54F,KAAK,GACrD,KAAKyG,QAAQ,EAErB,CAEAg3M,QAA6C,CAGzC,OAFK,KAAK62S,YAGNlsS,SAAC0hR,GAAD,CACI7gd,UAAU,6BACV8gd,cAAc,kCACdtje,QAAS,KAAKA,QACd4jN,SAAU,KAAKA,SACfrqN,MAAO,KAAKA,MACZiqe,mBAAoBgQ,IACpB/P,iBAAkBgQ,IAClB,aAAW,WACd,GAZwB,IAcjC,C,IAGJ,SAASD,IACLrhZ,EAAA,CAEA,GAAKA,EACL,OACIi3M,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIgrG,SAAC,OAAD,CAAMn/L,UAAU,QAAQm0F,SAAA,aAAiB,GACxCxkB,EAAO05E,MAAM,KAACu9H,UAAC,OAAD,CAAM5mR,UAAU,SAAhBm0F,SAAA,CAAyB,IAAExkB,EAAOtyC,MAAM,GAAO,C,EAChE,GAEV,CAEA,SAAS4zb,IAAuBthZ,EAAA,CAC5B,OACIi3M,UAAAsxC,WAAA,CAAA/jO,SAAA,CACKxkB,EAAO05E,MAAM,KAACu9H,UAAC,OAAD,CAAM5mR,UAAU,SAAhBm0F,SAAA,CAAyB,IAAExkB,EAAOtyC,MAAM,GAAO,C,EAChE,GAEV,C,u2GC/F0C29J,cAAMpoG,UAANooG,I,uCAA7BytT,e,CAAAA,qBAA6BztT,I,uCADzC5zH,C,IAcI0qC,E,EAAqBpiC,S,GAIrBoiC,E,EAAqBu5X,Y,GAIrBv5X,E,EAAqBkhW,Y,GAIrBlhW,E,EAAqB42Y,uB,CAzBgB1tT,gB,CAGtC,YAAY/3M,EAAiD,CACzD,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,OAAO22T,WAAW37Z,EAA+C,CAE7D,OAAOi9T,IADMg8G,GAAyB,CAAEj5a,SAAQ,CACzCi9T,EAAK0+F,UAChB,CAEA,IAAsB37Z,SAAuC,CACzD,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAsB27Z,YAAsB,CACxC,MAAO,CAAC,CAAC,KAAK37Z,QAAQkrZ,YAC1B,CAEA,IAAsB5nB,YAAqB,CACvC,OAAO,KAAKtjY,QAAQsjY,+BACxB,CAEA,IAAsB01C,uBAAgC,CAClD,IAAMxhd,EAAS,KAAKwoC,QAAQ84a,gBAG5B,OAFIpiC,IAAqBl/a,GAAgB,SAElC/xD,GAAM+xD,GACRs8G,KAAK,UAAa,KAAKwvT,UAAU,EACjCxvT,KAAK,gBAAmB,KAAKwvT,UAAU,EACvCxvT,KAAK,gBAAmB,WACxBA,KAAK,iBAAoB,aACzBA,KAAK,mBAAsB,gBAC3BA,KAAK,0BAA6B,qBAClCE,WAAA,CACT,CAEA8wC,QAA6C,CAGzC,OAFK,KAAK62S,YAGNlsS,SAAC4iR,IAAD,CACI/hd,UAAU,0BACVjpB,MAAO,KAAK24F,QAAQ64a,gBAAgB9gT,OACpCrG,SAAWrqN,IAGHA,GAAS,KAAK24F,QAAQ84a,kBAAoB,QAC1C,KAAK94a,QAAQ64a,gBAAgBrhd,OAAS,OAE1C,KAAKwoC,QAAQ64a,gBAAgB9gT,OAAS1wN,CAC1C,EACAg2b,YAAgB,KAAKr9V,QAAQ64a,gBAAgB9gT,OAAS,GACtDksJ,UAAU,oBACV8pE,YAAa,iBAAcxga,YAAE,KAAKyrf,qBAAqB,GAC1D,GAjBwB,IAmBjC,C,22GC5D0C1tT,cAAMpoG,UAANooG,I,uCAAjC4tT,e,CAAAA,qBAAiC5tT,I,uCAD7C5zH,C,IAYI0qC,E,EAAqB0xY,U,GAarB1xY,E,EAAqBpiC,S,IAIrBsmB,IAAOo6D,K,KAAcmkM,S,CA5BoBv5J,gB,CAC1C,YAAY/3M,EAAsC,CAC9C,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,OAAO22T,WAAW37Z,EAAmD,CAEjE,OAAOi9T,IADMk8G,GAA6B,CAAEn5a,SAAQ,CAC7Ci9T,EAAK62G,QAChB,CAEA,IAAsBA,UAAoB,CACtC,GAAM,CAAE93B,aAAYtE,YAAW0hC,yBAC3B,KAAK7lgB,MAAMysF,QACf,MAAO,CAAC,EACJg8Y,GACAtE,GAAWt6Y,UAAUs6W,cACrBggC,GAAWprV,SAAW3B,GAAc8pV,OACpC,CAACiD,GAAW7qV,MAAM4sR,UAClB,CAAC,KAAKz5U,QAAQg0a,WACdoF,EAER,CAEA,IAAsBp5a,SAA2C,CAC7D,OAAO,KAAKzsF,MAAMysF,OACtB,CAEsB6kR,SAAgB,CAClC,KAAK7kR,QAAQ23a,iBAAiB0B,oBAC1B,KAAKr5a,QAAQ03Y,YACb,KAAK13Y,QAAQ03Y,UAAUprV,OAAS3B,GAAc8pV,MACtD,CAEA3vR,QAA6C,CACzC,OAAO,KAAKgvT,UACR58N,UAAC,SAAD,CACI2tE,QAAS,KAAKA,QACd51V,KAAK,SACL,kBAAgB,wBAChBqB,UAAU,cAJdm0F,SAAA,EAMIgrG,SAAC6pT,IAAD,CAAW13f,KAAM,EAAK,IACtB6tM,SAAC,OAAD,CAAMn/L,UAAU,QAAQm0F,SAAA,mBAAuB,EAC3C,CACR,OACR,C,IAGJ,SAAS60Z,IAAU,CAAE13f,QAAA,CACjB,OACI6tM,SAAC,MAAD,CACIrjI,MAAM,KACNvkB,OAAO,KACPx2C,KAAK,OACLouE,MAAO,CAAErT,MAAOxqE,EAAMimD,OAAQjmD,CAAK,EACnCgob,QAAQ,YAERnlV,UAAAgrG,SAAC,OAAD,CACIp+L,KAAK,eACL28a,SAAS,UACT7uZ,EAAE,4tCACF8uZ,SAAS,SACZ,EACA,EAEb,C,u2GC/BqC3iP,eAPrC,SAASiuT,IACL7le,EAAA,CAEA,OAAQA,EAA+B5lC,UAAYglJ,MACvD,CAGqCw4D,KAAMpoG,U,2CAA9Bs2Z,e,CAAAA,qBAAwBluT,G,uCADpC5zH,C,IAqBI0qC,E,EAAqB0xY,U,GAUrB1xY,E,EAAqBpiC,S,GAIrBoiC,E,EAAqBs1W,W,GAIrBt1W,E,EAAa+2W,O,IAQb7yX,IAAOo6D,K,KAAcgxC,U,GAwBrBtvF,E,EAAqBq3Y,iB,GAIrBr3Y,E,EAAqBt0H,S,GAkDrBs0H,E,EAAqBsvW,a,GAMrBtvW,E,EACWs3Y,iB,GAKXt3Y,E,EAAqB/6H,O,IASrBi/G,IAAOo6D,K,KAAYi5V,0B,CAjJaruT,e,CAGjCssR,uBAAsB,IACtBE,iBAAqDhlV,OAErD,YAAYv/I,EAA4C,CACpD,MAAMA,GAENyxL,EACI,KACA,CAAE4yS,YAAa/kT,EAAYilT,iBAAkBjlT,CAAW,EAEhE,CAEA,OAAO8oU,WAAW37Z,EAA0C,CAExD,OAAOi9T,IADM28G,GAAoB,CAAE55a,SAAQ,CACpCi9T,EAAK62G,QAChB,CAEA,IAAsBA,UAAoB,CACtC,GAAM,CAAEsF,wBAAuBp9B,aAAYtE,aACvC,KAAKnke,MAAMysF,QACf,MAAO,EACHg8Y,IACCo9B,GACA1hC,GAAW7qV,MAAM4sR,SAE1B,CAEA,IAAsBz5U,SAAkC,CACpD,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAsB03Y,WAAuB,CACzC,OAAO,KAAK13Y,QAAQ03Y,WAAa,IAAInC,EACzC,CAEA,IAAc4D,OAAqC,CAC/C,OAAO75Q,GAAYkhR,aACf,KAAK9O,YACJjvT,GAAW,CAACA,EAAO9I,MAAW8I,KAAO28T,kBAAoB,EAAG,EAC5D38T,GAAWA,EAAO9I,KACvB,CACJ,CAEsB+3C,SAASkgR,EAAuC,CAC7DA,GAAUvqe,QAEf5B,GAAMmse,EAAS3id,IAAI,EACd6kJ,KAAK,eAEE,KAAK4jU,UAAUprV,SAAW3B,GAAc8pV,QACxC,KAAKiD,UAAUprV,OAAS3B,GAAc8pV,OAI1C,KAAKz0Y,QAAQ23a,iBAAiBkC,gBAAgBjoC,EAASvqe,KAAK,EAC5D,KAAK24F,QAAQ23a,iBAAiBmC,gBAAgBloC,EAASvqe,KAAK,CAChE,GACCysK,KAAK,iBACF,KAAK9zE,QAAQ23a,iBAAiBoC,sBAC1BnoC,EAASvqe,KACb,CACJ,GACC2sK,WAAA,EAEL,KAAK4jU,YAAc,GACvB,CAEA,IAAsB6hC,iBAAgC,CAClD,OAAO36d,GAAS4jI,GAAkB1iK,IAAK8rI,GAAYA,EAAQjjJ,IAAI,EACnE,CAEA,IAAsBiF,SAA8C,CAChE,GAAM,CAAEgqe,mBAAmB,IAAO,KAC5BmH,EAAQjnU,KAERgiW,EAAmC,KAAKP,gBAAgBz5f,IACzD8rI,IAAa,CACV78H,KAAM,UACN5nB,MAAOykJ,EACP6tB,MAAO7tB,EACPszV,iBAAkBj6T,GAA0Br5B,EAASmzV,GACrDI,QAAS,KAAKvH,kBAAkB51W,SAAS4pB,GACzCm4N,UAAW,iBACf,IAGEgwJ,EAAqCjuX,OAAOlwH,OAAO60H,IACpDnzF,OAAQ80F,GAAWA,IAAW3B,GAAc8pV,KAAK,EACjDz0d,IAAKssI,IACK,CACHr9H,KAAM,YACN5nB,MAAOilJ,EACPqtB,MAAO66T,GAAkBloV,GACzB+yV,QAAS,KAAKvH,kBAAkB51W,SAASoqB,GACzC23N,UAAW,iBACf,EACJ,EAEEg2J,EACFnsgB,IAEA,GAAIgqe,EAAiBhpe,SAAW,EAAG,OAAOhB,EAC1C,GAAM,CAACosgB,EAAOC,GAAYvzW,GACtB94J,EACCmyF,GAAW,CAAC,CAACA,EAAOo/Y,OACzB,EACA,MAAO,CAAI66B,KAAUC,IAAQ,CACjC,EAEA,MAAO,CACH,CACIxgW,MAAO,aACP7rK,QAASmsgB,EAAuBhG,EACpC,EACA,CACIt6V,MAAO,YACP7rK,QAASmsgB,EAAuBD,EACpC,CACJ,CACJ,CAEA,IAAsBtoC,aAAgC,CAClD,OAAO,KAAK5je,QAAQipK,QAASrjI,GACzB6le,IAAgB7le,GAAQA,EAAK5lC,QAAU,CAAC4lC,CAC5C,EACJ,CAEA,IACYgme,iBAAsD,CAE9D,OADK,KAAK9hC,YACH,KAAKuB,MAAMphR,OAAO,KAAK6/Q,WAAW,EADX,KAAK9pe,OAEvC,CAEA,IAAsBzG,OAA+B,CACjD,GAAM,CAAEilJ,UAAW,KAAKorV,UAClB,CAAE0iC,gBAAiB,KAAKp6a,QAAQ03Y,WAAW7qV,OAAS,CAAC,EACrDo6C,EAAemzU,GAAgB9tX,EACrC,OACI,KAAKolV,YAAY5sU,KAAMlrD,GAAQqtF,IAAiBrtF,EAAIvyG,KAAK,GAAK,IAEtE,CAEA,MAAoBsygB,0BAA0C,CAC1D,GAAI,CACA,IAAMp+B,EAAmB,MAAMpxU,KAC/B,GAAI,CAACoxU,EAAkB,OAEvB,IAAMC,EAAoCD,EAAiB35T,QACrD25T,EAAiB35T,QAAQpqH,OACpB80F,GAAW,CAAC81B,IAA2B91B,IAE5C,GAEAmvV,EAAkB,CACpBF,EAAiBh5T,KACdi5T,IACP,EAUM1D,EAJoBh5b,GAJN8iI,GAAQpqH,OAAQ80F,GAChCmvV,EAAgBv5W,SAASoqB,EAAOi2B,IAAI,CAGLm5T,EAAcpvV,GAC7CmvV,EAAgB7re,QAAQ08I,EAAOi2B,IAAI,CAGdo5T,EAAkB37d,IACtCssI,GAAWA,EAAOzjJ,IACvB,EAEA,KAAKive,iBAAmBA,CAC5B,MAAQ,CAER,CACJ,CAEArQ,mBAAmC,CAC/B,KAAUkyC,yBAAA,CACd,CAEA70T,QAA6C,CACzC,OAAO,KAAKgvT,UACRrkT,SAAC,MAAD,CAAKn/L,UAAU,oBACXm0F,UAAAgrG,SAAC0hR,GAAD,CACIrje,QACI,KAAK8pe,YAAc,KAAK8hC,gBAAkB,KAAK5rgB,QAEnD4jN,SAAU,KAAKA,SACfrqN,MAAO,KAAKA,MACZ84X,WAAY,KAAKy3G,YACjB53G,cAAgBG,GACX,KAAKy3G,YAAcz3G,EAExBnpN,aAAA,GACA+2Q,YAAY,aACZ,aAAW,kCACXwjD,iBAAmBtxY,IACfi3M,UAAAsxC,WAAA,CAAA/jO,SAAA,CACKxkB,EAAO05E,MACP15E,EAAOo/Y,UACJ5vR,SAAC+9E,EAAD,CACIl9Q,UAAU,+BACVwmQ,KAAMqZ,GACT,EAEP,GAET,EACA,GACL,IACR,C,22GCrN6BjtL,4B,uCAApBm3Z,e,CAAAA,qBAAoBn3Z,I,uCADhCxrB,C,IAcI0qC,E,EAAqBpiC,S,GAIrBoiC,E,EAAqBk4Y,iB,CAjBOp3Z,gB,CAC7Bq3Z,sCAEA,YAAYhngB,EAAyB,CACjC,MAAMA,GACNyxL,EAAe,IAAI,CACvB,CAEA,OAAO22T,WAAW37Z,EAAsC,CAEpD,OAAOn9F,IADM23gB,GAAgB,CAAEx6a,SAAQ,CAChCn9F,EAAKy3gB,eAChB,CAEA,IAAsBt6a,SAA8B,CAChD,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAsBs6a,iBAA2B,CAC7C,OACIlI,GAAiBzW,WAAW,KAAK37Z,OAAO,GACxCm1a,GAAaxZ,WAAW,KAAK37Z,OAAO,GACpC8ya,GAAsBnX,WAAW,KAAK37Z,OAAO,GAE7C6za,GAAkBlY,WAAW,KAAK37Z,OAAO,GACzCw5a,GAAgB7d,WAAW,KAAK37Z,OAAO,GACvCk5a,GAAyBvd,WAAW,KAAK37Z,OAAO,GAChDu3a,GAAe5b,WAAW,KAAK37Z,QAAS,cACxCu3a,GAAe5b,WAAW,KAAK37Z,QAAS,cAExC04a,GAAwB/c,WAAW,KAAK37Z,OAAO,GAC/C+4a,GAAqBpd,WAAW,KAAK37Z,OAAO,CAEpD,CAEAy6a,qBAAkD,CAC9C,OACIvjO,UAAC,MAAD,CAAK5mR,UAAU,0BAAfm0F,SAAA,EACIgrG,SAACqjT,GAAD,CAAuB9ya,QAAS,KAAKA,OAAU,IAC/CyvH,SAAC0lT,GAAD,CACIn1a,QAAS,KAAKA,QACdo3a,gBAAiB,KAAK7jgB,MAAM6jgB,gBAC5BC,iBAAkB,KAAK9jgB,MAAM8jgB,gBAChC,EACA,C,EAEb,CAEAqD,qBAAkD,CAC9C,OACIxjO,UAAC,MAAD,CAAK5mR,UAAU,0BAAfm0F,SAAA,EACIgrG,SAACipT,GAAD,CAAyB14a,QAAS,KAAKA,OAAU,IACjDyvH,SAACspT,GAAD,CAAsB/4a,QAAS,KAAKA,OAAU,EAC7C,C,EAEb,CAEA26a,mBAAgD,CAC5C,OACIlrT,SAAC,MAAD,CAAKn/L,UAAU,wBACVm0F,SAAA,KAAKzkB,QAAQo5a,sBACR,KAAKwB,4BAAA,EACL,KAAKC,2BAAA,CACV,EAEb,CAEAD,6BAA0D,CACtD,OACI1jO,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIgrG,SAAC8nT,GAAD,CAAgBv3a,QAAS,KAAKA,QAASsmB,OAAO,WAAa,IAC3DmpG,SAACypT,GAAD,CAA0Bl5a,QAAS,KAAKA,OAAU,IAClDyvH,SAAC8nT,GAAD,CAAgBv3a,QAAS,KAAKA,QAASsmB,OAAO,WAAa,IAC3DmpG,SAACokT,GAAD,CAAmB7za,QAAS,KAAKA,OAAU,IAC3CyvH,SAACqjT,GAAD,CAAuB9ya,QAAS,KAAKA,OAAU,EACjD,GAEV,CAEA66a,4BAAyD,CASrD,OARkCtD,GAAe5b,WAC7C,KAAK37Z,QACL,WAGA03a,GACOjoT,SAAC8nT,GAAD,CAAgBv3a,QAAS,KAAKA,QAASsmB,OAAO,WAAa,GAE/D,KAAKtmB,QAAQg0a,WAChBvkT,SAACokT,GAAD,CAAmB7za,QAAS,KAAKA,OAAU,IAE3CyvH,SAAC+pT,GAAD,CAAiBx5a,QAAS,KAAKA,OAAU,EAEjD,CAEA8kH,QAAsC,CAClC,OACIoyF,UAAC,MAAD,CACI5mR,UAAU,cACVmvE,MAAO,CAAE8vC,QAAS,KAAK,KAAKgrY,uBAAuB,GAAI,EAF3D91Z,SAAA,EAIIgrG,SAAC,MAAD,CAAAhrG,UACIgrG,SAAC2iT,GAAD,CAAkBpya,QAAS,KAAKA,OAAU,EACzC,IACLyvH,SAAC,MAAD,CAAKn/L,UAAU,WACVm0F,SAAA,KAAKzkB,QAAQg8Y,WACR,KAAK2+B,kBAAA,EACL,KAAK36a,QAAQkrZ,aACX,KAAKwvB,oBAAA,EACL,KAAKD,oBAAA,CACZ,EACJ,C,EAEb,C,k1GCtI+BnvT,cAAMpoG,UAANooG,I,IAA5B,cAA4BA,I,uCADlC5zH,C,IAOI0qC,E,EAAqBsqD,Q,GAIrBtqD,E,EAAqBpiC,S,GAIrBoiC,E,EAAqBqqD,U,CAdS6+B,gB,CAC/B,YAAY/3M,EAA2B,CACnC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAsBtY,QAAiB,CACnC,OAAO,KAAKn5K,MAAMm5K,QAAUkjR,EAChC,CAEA,IAAsB5vW,SAAgC,CAClD,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAsBysF,UAAmB,CAErC,OAAOq6S,GAAc,GADA,KAAK9mY,QAAQysF,YACTu6S,CAC7B,CAEAliR,QAAsC,CAClC,GAAM,CAAEp4B,SAAQD,YAAa,KACvB,CAAE92J,WAAY,KAAKpiB,MACnB,CACF+vd,aAAa7zB,IACbuvC,mBAAmBtvC,IACnBgkE,iBACAr2B,kBACAy9B,YACA,KAAK96a,QAEH+6a,EAAkBrH,EAClB,cAAc10B,EAAiB,mBAC/B3B,EACE,mBAAgB9vd,YAAE+1c,GAAY,mBAC9BxwU,OACFkoX,EAAW,KAAKzngB,MAAMyngB,UAAYD,EAElC7yY,EAASwkD,EAAOuuV,UAChBC,EAAe,CAACJ,GAAY,CAAC,CAACE,EAC9BG,EAAmBt0C,GAAc,GAAMp6S,GAEvC06J,EAAWz6J,EAAOtgG,MAAQ,EAAIqgG,EAC9B2uV,EAAc,IAAIl0L,GAAS,CAC7BhjQ,KAAMvuD,GAAW,oBACjBwxT,SAAUz6J,EAAOtgG,MACjBqgG,WACAD,WAAY,IACZk6J,cAAet4L,GAAc2jB,MACjC,GACMspW,EAAWH,EACX,IAAIh0L,GAAS,CACThjQ,KAAM82b,EACN7zL,WACA16J,SAAU0uV,EACVz0L,cAAet4L,GAAc2jB,MACjC,GACAjf,OAGAwoX,EAAMD,EAAW,GAAM5uV,EAAW,EAClC4/O,EAAc+uG,EAAYvzc,OAASyzc,GAAOD,GAAUxzc,QAAU,GAC9Dw6F,EAAMn6B,EAAO3pE,EAAI8tW,EAAc,EAC/BkvG,EAAWl5W,EAAM+4W,EAAYvzc,OAAS,EACtC2zc,EACFn5W,EAAM+4W,EAAYvzc,OAASyzc,GAAOD,GAAUxzc,QAAU,GAAK,EAE/D,OACIqvO,UAAC,IAAD,CAAG5mR,UAAU,UAAbm0F,SAAA,EACIgrG,SAAC,OAAD,CAAM,GAAI/iC,EAAO+uV,QAAA,EAAWpqf,KAAK,OAAO6hJ,QAAS,EAAM,IAEvDu8C,SAACi9O,GAAD,CACI1kc,GAAG,kBACOykL,WACVs9B,KAAM,CAAC,KAAKx2M,MAAMmogB,gBAElBj3Z,UAAAgrG,SAAC64H,GAAD,CACI9B,SAAU40L,EACVhtgB,EAAG85H,EAAO95H,EACPmtgB,EACHzuK,WAAW,SACXz7U,KAAM6jR,EACT,EACC,GAELmmO,IACG5rT,SAACi9O,GAAD,CACI1kc,GAAG,eACHykL,SAAU0uV,EACVpxT,KAAM,CAAC,KAAKx2M,MAAMmogB,gBAElBj3Z,UAAAgrG,SAAC64H,GAAD,CACI9B,SAAU60L,EACVjtgB,EAAG85H,EAAO95H,EACVmwD,EAAGi9c,EACH1uK,WAAW,SACXz7U,cACH,EACC,EAEX,C,EAEX,C,aACJ,GCzCA,IAAYsqf,GAAL,SAAAA,EAAA,C,MACHA,GAAAC,MAAA,QACAD,EAAAE,MAAA,Q,CACJ,MAEYC,GAAL,SAAAA,EAAA,C,MACHA,GAAAC,UAAA,Y,CACJ,MAOYC,GAAL,SAAAA,EAAA,C,MACHA,GAAA98S,OAAA,S,CACJ,MAUY+8S,GAAL,SAAAA,EAAA,C,MACHA,GAAA1tX,MAAA,QACA0tX,EAAAztX,IAAA,MACAytX,EAAAC,MAAA,QACAD,EAAAE,WAAA,a,CACJ,MAiCaC,IAA4B,CAAC,MAAO,WAAW,EAuB/CC,IAA6C,CACtDC,YACAC,UAAWzpX,OACX8c,MAAO7tB,GAAU8tB,GACrB,EClLM2sW,GAAQ,GACRC,GAAS,GACTC,IAAa,EAEnB,SAAgBC,IAAU,CACtBhgE,WACAigE,eAAA,CAKA,GAAIjgE,EAAS7tc,QAAU,EAAG,OAAO,KAGjC,IAAM49K,EAAS,IAAIZ,EAAO,EAAG,EAAG0wV,GAAOC,IAAQh5B,SAASi5B,KAElDrnK,EAAWsnG,EAAS,GACpB6S,EAAU7S,EAASA,EAAS7tc,OAAS,GACrC8xK,EAAUy0L,EAASoqG,aACnB3+R,EAAU0uS,EAAQ/P,aAGlBrzT,EAAS61V,KACVtmb,OAAO,CAACilH,EAASE,CAAQ,GACzBthF,MAAM,CAACktF,EAAO7kD,KAAM6kD,EAAOzkD,KAAM,GAGhC40Y,EAAUt0Y,GAAOo0U,EAAS38b,IAAK2tK,GAAQA,EAAItmL,KAAK,GAChDglJ,EAAS41V,KACVtmb,OAAOkhd,GACPr9a,MAAM,CAACktF,EAAO1d,OAAQ0d,EAAOrqB,GAAI,GAMhC/9H,EAJWxW,MACZ1f,EAAGu/K,GAAQxlB,EAAY/b,EAAOuhC,EAAI8xR,YAAY,IAC9ClhZ,EAAGovH,GAAQxlB,EAAY9b,EAAOshC,EAAItmL,KAAK,EAE/By1gB,EAASngE,GAKtB,OAJKr4a,GAKD4yQ,UAAC,MAAD,CACI9qN,MAAOowb,GACP30c,OAAQ40c,GACR7yE,QAAS,OAAO4yE,GAAM,GAAGC,KACzBh9a,MAAO,CAAE+2G,SAAU,SAAU,EAJjC/xF,SAAA,EAMIgrG,SAAC,OAAD,CACItwK,EAAG7a,EACHuyQ,OAAQzB,GACR/jR,KAAK,OACLylR,YAAa,IACIk2D,gBAdL4vK,IAAgB,SAAW,MAAQ9pX,MAelD,GAEA,CAACuiN,EAAUm6G,CAAQ,EAACxvc,IAAK2tK,IACtB8hC,SAAC,SAAD,CAEI3hC,GAAI3lB,EAAY/b,EAAOuhC,EAAI8xR,YAAY,GACvC1xR,GAAI5lB,EAAY9b,EAAOshC,EAAItmL,KAAK,GAChC62D,EAAGw+c,IACHrrf,KAAM+jR,EACT,EALQznH,EAAI8xR,YAKZ,EAEJ,C,GA5BS,IA8BtB,C,80GCgB+Bn0P,eAlBzByxT,IAAuD,CACzDjlT,OAAQ,QACRt8M,MAAO,QACP+qC,IAAK,MACLohF,MAAO,kBACPq1Y,WAAY,kBACZC,UAAW,OACf,EAEMC,IAAoBttW,GACtBA,IAAU7tB,GAAU8tB,IAAM9tB,GAAUpO,KAAOoO,GAAU8tB,IAQ1By7C,KAAMpoG,U,SAA9B,cAAwBooG,G,wCAD9B5zH,C,IAEI0qC,E,EAAapiC,S,GAIboiC,E,EAAqB+6Y,a,GAIrB/6Y,E,EAAqBg7Y,iB,GAIrBh7Y,E,EAAqBi7Y,iB,GAIrBj7Y,E,EAAasR,O,GAYbtR,E,EAAqBk7Y,kB,GAiBrBl7Y,E,EAAqBm7Y,W,GAiCrBn7Y,E,EAAqBkhW,Y,GAIrBlhW,E,EAAqBo7Y,iB,GAsDrBp7Y,E,EAAqBq7Y,e,IASrBn3Z,IAAOo6D,K,KAAcg9V,Y,GAkCrBt7Y,E,EAAqBu7Y,qB,GAoOrBv7Y,E,EAAasqD,Q,GAIbtqD,E,EAAqBw7Y,c,GA8DrBx7Y,E,EAAqBy7Y,gB,GAUrBz7Y,E,EAAa07Y,uB,GAkCb17Y,E,EAAqB27Y,e,GAqBrB37Y,E,EAAqB+2V,sB,GAQrB/2V,E,EAAa+2W,O,GAYb/2W,E,EAAqBi2U,a,GAKrBj2U,E,EAAqBw6V,a,GAIrBx6V,E,EAAqB47Y,Y,GAuBrB57Y,E,EAAaoqC,a,GAqBbpqC,E,EAAa67Y,+B,GAuNb77Y,E,EAAa87Y,mB,GAgBb97Y,E,EAAqB+7Y,a,GAWrB/7Y,E,EAAqBg8Y,mB,CAt1BK9yT,e,CAC3B,IAActrH,SAA4B,CACtC,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAsBm9a,aAA+B,CACjD,OAAO,KAAKn9a,QAAQ64a,eACxB,CAEA,IAAsBuE,iBAAoC,CACtD,OAAO,KAAKp9a,QAAQq+a,sBACxB,CAEA,IAAsBhB,iBAAoC,CACtD,OAAO,KAAKr9a,QAAQs+a,sBACxB,CAEA,IAAc5qY,OAAmB,CAC7B,IAAIA,EAAQ,KAAK1zC,QAAQu+a,gBAQzB,MALA7qY,GAAQA,EAAM0nV,kBACV,KAAKp7X,QAAQq+a,wBAA0B,KACvC,KAAKr+a,QAAQs+a,wBAA0B56X,KAGpChQ,CACX,CAEA,IAAsB4pY,kBAAuC,CACzD,IAAMkB,EAAiB,KAAKP,8BAA8B,GACpDQ,EAAaD,GAAgBE,kBAAkB1+f,IAChD2+f,GAAWA,EAAOv3gB,GACvB,EACMm1gB,EAAYkC,GAAYv8Y,SAAS+5Y,GAAe11d,GAAG,EACnD01d,GAAe11d,IACfk4d,GAAYv8Y,SAAS85Y,GAAelkT,MAAM,EACxCkkT,GAAelkT,OACfhlE,OAKR,OAHI0rX,GAAgBI,gBAAgB9jE,qBAAuByhE,EAChD,CAAED,SAAU,EAAGC,YAAW3sW,MAAO7tB,GAAUpO,IAAK,EAEpD0oY,GACX,CAEA,IAAsBkB,WAAgC,CAClD,IAAMsB,EACF,KAAK7+a,QAAQ8+a,eAAiB,KAAKxB,iBACnC,CAAEhB,WAAUC,aAAcsC,EACxB,CAAEjvW,SAAUivW,EAIZjmW,EAAa,KAAKqlW,8BAExB,GADA3B,EAAW54W,KAAK/0J,IAAI2tgB,EAAU1jW,EAAW9pK,OAAS,GAC9CwtgB,EAAW,EACX,MAAO,CAAEA,YAA6BC,UAAWzpX,OAAW8c,OAAM,EAEtE,IAAMmvW,EAAmBnmW,EAAW0jW,EAAS,CAACoC,kBAAkB1+f,IAC3D2+f,GAAWA,EAAOv3gB,GACvB,EAWA,OAVIm1gB,IAAczpX,QAAa,CAACisX,EAAiB78Y,SAASq6Y,MAGtDA,EACIA,IAAcP,GAAelkT,QAC7BinT,EAAiB78Y,SAAS+5Y,GAAe11d,GAAG,EACtC01d,GAAe11d,IACfw4d,EAAiB,IAGxB,CACHzC,WACAC,YACA3sW,OACJ,CACJ,CAEA,IAAsB0zT,YAAqB,CACvC,OAAO,KAAKtjY,QAAQsjY,+BACxB,CAEA,IAAsBk6C,iBAED,CACjB,GAAM,CAAElB,SAAU0C,EAAWzC,YAAW3sW,SAAU,KAAK2tW,UACvD,GAAIyB,OACA,MAAQrxV,IAAgBA,EAAI8iR,WAEhC,IAAM/yX,EACF,KAAKugc,8BAA8Be,EAAU,EAAEJ,gBAC7CK,EACFvhc,aAAkBgmY,GAAcG,SAChCnmY,EAAOsiY,qBAAqBlxc,OACtB,IAAI+Q,IACA69D,EAAOsiY,oBAAoBhgc,KAAK3Y,EAAOwH,IAAU,CAC7CxH,EACAwH,CACH,IAELikJ,OAEV,MAAQ66B,KACJ,IAAMuxV,EAAKvxV,EAAI73J,OAAOkpf,GAElB33gB,EAcJ,GAbI63gB,IACIC,IAAcD,GACd73gB,EAAQ63gB,EAAGpnT,QAAQzwN,MAEnB+3gB,IAAaF,IACb3C,IAAczpX,QACdusX,IAAiB9C,KAEjBl1gB,EAAQ63gB,EAAG3C,EAAU,EAAEl1gB,QAM3BA,IAAUyrJ,QACT,OAAOzrJ,GAAU,WACb,CAACg+J,SAASh+J,IAAUy+J,MAAMz+J,IAE/B,OAAOuoK,IAAU7tB,GAAU8tB,IAAMnsB,IAAW,KAEhD,GAAIu7X,GAAgB,OAAO53gB,GAAU,SAAU,CAC3C,IAAMi4gB,EACF1vW,IAAU7tB,GAAU8tB,IAAMovW,EAAar9f,KAAO,GAClD,OAAOq9f,EAAaxygB,IAAIpF,IAAUi4gB,CACtC,CAEA,OAAOj4gB,CACX,CACJ,CAEA,IAAsBo2gB,eAAyB,CAC3C,MACI,CAAC,KAAKE,qBACN,KAAKM,8BAA8Bp4Y,KAC9B18E,GAAWA,EAAOu1d,kBAAkB5vgB,OAAS,EAG1D,CAEsB4ugB,WAClBpB,EACAC,EACI,CACJ,IAAMthgB,EAAO,KAAKsigB,UACZ3tW,EACF30J,EAAKqhgB,WAAaA,GAAYrhgB,EAAKshgB,YAAcA,EAC3CW,IAAiBjigB,EAAK20J,KAAK,EAC3B0sW,OACEv6X,GAAU8tB,IACV9tB,GAAUpO,KAEtB,KAAK3zC,QAAQ8+a,cAAgB,CAAExC,WAAUC,YAAW3sW,OAAM,CAC9D,CAEA,IAAY2vW,kBAA2B,CACnC,OAAOzge,GAAa,KAAKwkb,UAAU,CACvC,CAEA,IAAYk8C,cAAmC,CAC3C,IAAMvkgB,EAAO,KAAKsigB,UAClB,OACI9tT,SAACgwT,GAAD,CAEIC,SAAU,KAAK9iD,YAAc,EAC7B+iD,UAAW1kgB,EAAKqhgB,cAChBjsW,UAAWp1J,EAAK20J,MAChBi1M,YAAqB,KAAK64J,aAAWkC,EACrCC,WAAY,KAAKN,iBACjBO,QAAQ,QACX,EAPO,SAShB,CAEA,IAAsBnC,qBAA+B,CACjD,OAAO,KAAKM,8BAA8BnvgB,OAAS,CACvD,CAEA,IAAYixgB,kBAAgD,CACxD,IAAM9kgB,EAAO,KAAKsigB,UAClB,OAAO,KAAKW,kBAAkBl+f,KAAKgkN,EAAKs4S,KACpC,GAAM,CAAEsC,kBAAiBv6W,WAAY2/D,EAC/Bg8S,EAAeh8S,EAAI06S,kBAAkB55W,KACtCpnF,GAAWA,EAAOt2E,MAAQ40gB,GAAelkT,MAC9C,EACMttH,EAAa,KAAKiza,cAClB3qX,OACAktX,GAAcx1a,WAEd0sD,EAAQp4G,GAAaulH,EAAQilU,WAAWpyU,KAAK,EAC7C,CAAEpF,gBAAiBuS,EAAQilU,WAE3B22C,GACF/oO,YAAOkyC,SAAP,CAAA3kO,SAAA,EACIyyL,UAAC,MAAD,CACI5mR,UAAU,OACV4mI,MACIpF,EAAe,GAAGoF,EAAM,KAAKpF,IAAiBoF,EAHtDzyC,SAAA,EAMIyyL,UAAC,OAAD,CAAM5mR,UAAU,aAAhBm0F,SAAA,CAA8ByyC,EAAM,GAAO,CAC3C,IAAAu4D,SAAC,OAAD,CAAMn/L,UAAU,kBAAmBm0F,SAAAqtC,CAAmB,EACrD,CACL,IAAAolJ,UAAC,MAAD,CAAK5mR,UAAU,cAAfm0F,SAAA,EACIgrG,SAAC,OAAD,CAAMn/L,UAAU,OAAQm0F,SAAA4/C,EAAQ5nI,IAAW,IAC3CgzL,SAAC,OAAD,CAAAhrG,SACK4/C,EAAQ5nI,MAAQ+tE,IAAesoD,QAAa,GAC3C,GAAE,KACR28D,SAAC,OAAD,CAAMn/L,UAAU,OACXm0F,SAAAja,IAAesoD,QACZ8rX,EAAgBhhE,WAAWpzW,EAC7B,EACL,CACO,MAGdq6Q,EAAU7gJ,EAAI07S,aACF,KAAKhC,WAAWpB,EAAUN,GAAelkT,MAAM,EAC3DhlE,OAEAv/I,EAAQ,CACVmsgB,SAAU17S,EAAI07S,SACdC,UAAW37S,EAAI07S,UAAYzkgB,EAAKqhgB,WAAaA,EAC7CjsW,UAAWp1J,EAAK20J,MAChBi1M,UACAq7J,QAASl8S,EAAI06S,kBAAkB5vgB,OAC/B+wgB,WAAYI,EACZH,QAAS,WACb,EAEA,OAAOrwT,SAACgwT,GAAD,CAAyC,GAAIlsgB,CAAQ,EAAlCqrgB,EAAgBvoX,IAAkB,CAChE,EACJ,CAEA8pX,cACIzic,EACAk1E,EACM,CACN,IAAMp4E,EAAMo4E,EAAUgsX,gBAEtB,OAAOwB,GAAc1ic,EAAOt2E,GAAG,GAC3Bs2E,EAAOt2E,MAAQ00gB,GAAamB,UAC1BF,IAAiBr/b,EAAOt2E,KACxBozE,EAAIojY,WAAWlgY,EAAO8sB,UAAW,CAC3C,CAEA,IAAY61a,qBAA8C,CACtD,IAAMplgB,EAAO,KAAKsigB,UAClB,OAAO,KAAKW,kBAAkBl+f,KAAKgkN,EAAKs4S,IACpCt4S,EAAI06S,kBAAkB1+f,KAAK09D,EAAQ8tY,KAC/B,IAAMq0D,EAAa,KAAKM,cAAczic,EAAQsmJ,GACxC6gJ,EAAUnnS,EAAOgic,aACL,KAAKhC,WAAWpB,EAAU5+b,EAAOt2E,GAAG,EAChD0rJ,OACN,OACI28D,SAACgwT,GAAD,CAEIC,SAAUhic,EAAOgic,SACjBC,UACI1kgB,EAAKqhgB,WAAaA,GAClBrhgB,EAAKshgB,YAAc7+b,EAAOt2E,IAE9BipK,UAAWp1J,EAAK20J,MACPi1M,UACGg7J,aACZC,QAAQ,eACRtyT,WAAYi8Q,EAAW,CACnB,qBAAsBje,IAAa,CACvC,EACH,EAbQ9tY,EAAOt2E,GAaf,CAET,GAER,CAEA,IAAYk5gB,WAAgC,CACxC,GAAM,CAAE3C,sBAAqBF,iBAAkB,KAC/C,OAAOE,GAAuBF,GAC1BvmO,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIyyL,UAAC,KAAD,CAAAzyL,SAAA,EACIgrG,SAAC,KAAD,CAAIn/L,UAAU,cAAgB,GAC7B,KAAKyvf,kBACNtwT,SAAC,KAAD,CAAIn/L,UAAU,SAASiwf,QAAS,EAAG,gBAAa,EAChD,KACJrpO,UAAC,KAAD,CAAAzyL,SAAA,CACK,KAAK+6Z,aACL,KAAKa,mBACN,GACN,KAEFnpO,UAAC,KAAD,CAAAzyL,SAAA,CACK,KAAK+6Z,aACL/B,EACK,KAAK4C,oBACL,KAAKN,kBACXtwT,SAAC,KAAD,CAAIn/L,UAAU,SAAS,gBAAa,EACpC,GAEZ,CAEAkwf,uBAA+B,CAC3BC,mBACAC,kBACA9iE,cAK0B,CAC1B,IAAM+iE,GACFlxT,SAACmxT,IAAD,CACsBH,mBACN7iE,YACf,GAIL,GADI,CAAC8iE,GACD,EAAED,EAAiBr5gB,OAAOs5gB,GAC1B,OAAOC,EAEX,IAAMt5gB,EAAQw5gB,IACVH,EACAD,EAAiBr5gB,GACrB,EAIA,MAHI,CAACC,GAASA,EAAM2nb,eAAiBl8R,OAC1B6tX,GAGPzpO,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIgrG,SAACqxT,IAAD,CACWz5gB,QACWo5gB,mBACN7iE,YACf,IACDnuP,SAAC,OAAD,CAAAhrG,SAAOp9G,EAAM2nb,YAAmB,EAClC,GAEV,CAEA+xF,gBACIpzV,EACA/U,EACkB,CAClB,OACIs+H,UAAC,KAAD,CAAAzyL,SAAA,EACIgrG,SAAC,KAAD,CAAiBn/L,UAAWm5c,EAAW,CAAEhnT,OAAQ,EAAK,GAClDh+D,UAAAgrG,SAAC,MAAD,CAAKn/L,UAAU,cAAem0F,SAAAkpE,EAAI8iR,UAAgB,EAClD,EAFI,UAIP9iR,EAAI73J,OAAO9V,KAAK0ggB,EAAiBpE,KAC9B,IAAM1pX,EAAYgmB,EAAW0jW,GACvB,CAAEt4L,gBAAiBpxL,EAAUgsX,gBAEnC,OAAOhsX,EAAU8rX,kBAAkB1+f,KAC9ByggB,EAAkBj1D,KACf,IAAMpkd,EAAM,GAAGk1gB,EAAS,GAAG9wD,IA0B3B,OAtBIi1D,EAAiBr5gB,MAAQ00gB,GAAamB,WAElCxtT,SAACuxT,IAAD,CAEIzE,UAAWkE,EAAiBr5gB,IAC5B65gB,cAAez1D,IAAa,EAE3B/mW,SAAAi8Z,GAAiBzD,YACdxtT,SAACktT,IAAD,CACIhgE,SACI+jE,EAAgBzD,UAEpBL,YACI54L,EACM,SACA,OAEb,EAEE,EAhBF58U,IAoBbqoN,SAACuxT,IAAD,CAEIzE,UAAWkE,EAAiBr5gB,IAC5B65gB,cAAez1D,IAAa,EAE3B/mW,SAAA,KAAK+7Z,uBAAuB,CACzBC,mBACAC,kBACA9iE,WAlCQ9la,GAChB86G,EAAUgsX,gBAAgBhhE,WAAW9la,EAkCjC,EACO,EATF1wC,EAWjB,EAER,IACAqoN,SAAC,KAAD,CAAIn/L,UAAU,SAAS,gBAAa,EACpC,GAtDKq9J,EAAI8iR,UAsDT,CAEZ,CAEA,IAAc/jR,QAAiB,CAC3B,OAAO,KAAKn5K,MAAMm5K,QAAUkjR,EAChC,CAEA,IAAsBguE,cAA0C,CAE5D,GADI,KAAKD,qBACL,KAAKO,kBAAkBpvgB,SAAW,EAAG,OAAO,KAEhD,IAAMoygB,EAAkB,KAAKhD,kBAAkB,GACzC,CAAEpsX,gBAAiBovX,EAAgB78W,QAAQilU,WAEjD,OAAO43C,GACHhqO,UAAC,MAAD,CAAK5mR,UAAU,UAAfm0F,SAAA,CACKy8Z,EAAgB78W,QAAQilU,WAAWpyU,MAAO,KAC3CggJ,UAAC,OAAD,CAAM5mR,UAAU,kBAAhBm0F,SAAA,CACKqtC,EACAovX,EAAgB78W,QAAQ5nI,MACrB,KAAKykf,EAAgB78W,QAAQ5nI,KAAK,EACpC,C,EACL,CACL,OACR,CAEA0kf,qBAAkD,CAC9C,OACI1xT,SAAC,MAAD,CACIrjI,MAAO,KAAKsgG,OAAOtgG,MACnBvkB,OAAQ,KAAK6kH,OAAO7kH,OACpB+iH,WAAY6mR,IACZhyW,MAAOiyW,IAEPjtV,UAAAgrG,SAAC2xT,GAAD,CACIphb,QAAS,KAAKA,QACd0sF,OAAQ,KAAKA,OACb/2J,QAAS,MAAM,KAAK2tc,WAAW,qBAC/B03C,SAAS,yDACTU,gBAAA,EACH,EACA,EAEb,CAEA52T,QAA6C,CAIzC,OAHI,KAAKs5T,kBAAkBtvgB,SAAW,EAC3B,KAAKqygB,oBAAA,GAGZjqO,UAAC,MAAD,CAAK5mR,UAAU,YAAfm0F,SAAA,CACK,KAAKm5Z,cACNnuT,SAAC,MAAD,CAAKn/L,UAAU,gBACXm0F,UAAAyyL,UAAC,QAAD,CAAAzyL,SAAA,EACIgrG,SAAC,QAAD,CAAAhrG,SAAQ,KAAK67Z,SAAiB,IAC9B7wT,SAAC,QAAD,CAAAhrG,SACK,KAAK25Z,kBAAkBp+f,IAAK2tK,GACzB,KAAKozV,gBACDpzV,EACA,KAAKuwV,iBACT,EAED,EACJ,GACN,EACJ,C,EAEb,CAEA,IAAsBL,gBAA0B,CAC5C,OAAO,KAAKE,cAAcjvgB,OAAS,CACvC,CAEAuygB,+CAAuD,IAMvD,IAAcvD,uBAA4C,CACtD,IAAIA,EAEJ,GAAI,CAAC,KAAKD,eAAgB,OAE1B,IAAMyD,EAAqB,KAAKjpE,YAAYvpc,OA0B5C,OAxBA,KAAKivgB,cAAcj9f,QAAS48D,IAMxB,IAAM6jc,EALuCzie,GACzCknG,OAAOtjF,QAAQkkG,IAAUlpF,EAAO8+X,aAAc51S,GAAE,KAC/C,CAAC9uH,EAAM0pe,KAAYxzW,SAASl2H,EAI7B2pe,EAAqC38W,KAAMhtH,GACXA,EAAK,GAEPwpe,GAGtB,KAAKD,mCAEb,IAAK,GAMT,MAJA,CAAIE,IACAzD,EAAwB9vW,SAASuzW,GAC1B,GAGf,GAEOzD,CACX,CAEA,IAAsBC,eAA8B,CAChD,IAAMh4D,EAAQ,KAAK/lX,QAAQ0hb,gBAAkB,GAC7C,GAAI37D,EAAMj3c,OACN,OAAOi3c,EACF/lc,IAAKq2I,IACF,IAAM77E,EAAM,KAAKk5D,MAAMjnI,IAAI4pJ,GAG3B,OAFK77E,GACDvuD,QAAQW,KAAK,oBAAoBypI,EAAK,YAAY,EAC/C77E,CACX,GACChjB,OAAQgjB,GAAQA,GAEzB,IAAMmnc,EAAQ,IAAI9ggB,IAAYmlI,OAAOlwH,OAAO2+H,KAC5C,OAAO,KAAK/gB,MAAMy8U,eAAe34Z,OAC5BkmB,GACG,CAACikc,EAAMj1gB,IAAIgxE,EAAO24E,IAAI,IAErB34E,EAAO2mF,SAASs8T,gBAAkB,IAE/C,CAEA,IAAsBxH,sBAAqC,CACvD,OAAOr6a,IAAE,GACF,KAAKi/d,cAAc/9f,IACjBw6D,GAAQ,KAAKk5D,MAAMjnI,IAAI+tE,EAAI67E,IAAI,EAAEomT,eACtC,EAER,CAEA,IAAc08B,OAA6B,CACvC,IAAM8F,EAAQjnU,KACd,OAAOsnD,GAAYkhR,aACf,KAAKrnB,qBACJ1oB,GAAe,CACZA,EACItrR,MAA0BsrR,EAAYwuC,IAAU,EACxD,EACCxuC,GAAeA,EAExB,CAEA,IAAsB4H,aAA4B,CAE9C,OADK,KAAK8kE,YAAYplT,OACf,KAAKohR,MAAMphR,OAAO,KAAKolT,YAAYplT,MAAM,EADX,KAAKohQ,oBAE9C,CAEA,IAAsByD,aAAsB,CACxC,OAAO,KAAKvkB,YAAYvpc,MAC5B,CAEA,IAAsBkvgB,YAAsB,CACxC,OAAO,KAAKphD,YAAc,CAC9B,CAEA6K,mBAAmC,CAC/BllU,GAAuB,KAAM,YACjC,CAEA8V,YACI36F,EACAr2E,EACAu6gB,EACkB,CAClB,GAAIv6gB,IAAUyrJ,OACd,OAAOp1E,EAAOwlQ,iBAAiB77U,EAAO,CAClCs2K,aAAc5rB,GAAyBixL,cACvCplK,mBAAoB,GACpBC,eAAgB,GAChBsB,gBAAiB,GACjB,GAAGyiW,CACP,EACJ,CAEA,IAAcp1W,aAAuD,CACjE,GAAM,CAAEvkI,YAAWC,WAAY,KAAK83D,QACpC,GAAI/3D,IAAc6qH,QAAa5qH,IAAY4qH,OAG3C,OADI7qH,IAAcC,EACX,CAACA,CAAO,EADmB,CAACD,EAAWC,CAAO,CAEzD,CAEA25e,wBACIjD,EAC2B,CAQ3B,OANIA,EAAgB7sY,IAAIvnC,aAAesoD,OAInC,KAAK0Z,cAAgB1Z,OAElB,CAAC8rX,EAAgB99V,OAAO,EAFY,KAAKtU,YAHrC,CAACoyW,EAAgB7sY,IAAIvnC,UAAU,CAM9C,CAEA,IAAcyza,+BAAsD,CAChE,OAAO,KAAKF,cAAc/9f,IAAK4+f,IAC3B,IAAMpyW,EAAc,KAAKq1W,wBAAwBjD,GAC3CkD,EACFt1W,EAAY19J,OAAS,EACf6sgB,GAAe55W,MACf45W,GAAen8a,MAGnBuib,EAAuB,KAAKC,wBAAwB,CACtDpD,kBACApyW,aACJ,GAGMy1W,EACF,KAAKC,qCAAqC,CACtCH,uBACAnD,kBACAkD,gBACJ,GAGJ,GAAI,KAAKK,mBAAmBvD,GACxB,IAAK,GAAM,CAACnuE,EAAY36a,KAAWmsf,EAC/Bnsf,EAAOmnf,UACH2B,EAAgBhiE,qBAAqBnwc,IAAIgkc,GAWrD,MAAO,CAAEiuE,kBANiB,KAAK0D,2BAA2B,CACtDxD,kBACApyW,cACAs1W,gBACJ,CAESpD,EAAmBuD,qBAAoBrD,iBAAgB,CACpE,EACJ,CAEAuD,mBAA2BvD,EAAsC,CAC7D,OACI,KAAKxB,kBAAoBtqX,QACzB,KAAKuqX,kBAAoBvqX,QACzB,KAAKsqX,kBAAoB,KAAKC,iBAC9BuB,EAAgB9jE,qBAGhB8jE,EAAgB7sY,IAAIvnC,aAAesoD,MAE3C,CAEAsvX,2BAAmC,CAC/BxD,kBACApyW,cACAs1W,kBAK4B,CAI5B,IAAMO,EAA4C,GAClD,GAAIzD,EAAgB9jE,qBACZgnE,IAAmBnG,GAAen8a,MAAO,CACzC,GAAM,CAAE8ib,eAAe,CAAC,GAAM1D,EAAgBv6W,SAAW,CAAC,EACrDi+W,EAAaC,oBACdF,EAAavygB,KAAK,CACd1I,IAAK60gB,GAAet0Y,MACpB+3Y,SAAU,KAAK1B,UACnB,GACCsE,EAAaE,oBACdH,EAAavygB,KAAK,CACd1I,IAAK60gB,GAAee,WACpB0C,SAAU,KAAK1B,UACnB,EACR,CAGJ,IAAMyE,EAA4Cj2W,EAAYxsJ,KACzDwqF,EAAY37F,KAAW,CACpBzH,IACI06gB,IAAmBnG,GAAen8a,MAC5B3wF,IAAU,EACNotgB,GAAezggB,MACfyggB,GAAe11d,IACnBy1d,GAAelkT,OACzBttH,aACAk1a,SAAU,KAAK1B,UACnB,IAIE0E,EAAkB,KAAKP,mBAAmBvD,GAC1C,CAAEx3gB,IAAK00gB,GAAamB,UAAWyC,SAAU,EAAM,EAC/C5sX,OAEN,OAAOyT,GAAiB,CACjBk8W,KACHC,EACGL,IACN,EACL,CAEAL,wBAAgC,CAC5BpD,kBACApyW,eAIuC,CACvC,OAAOG,IACHiyW,EAAgB5hE,iCAChBxwS,EACAoyW,EAAgBpzW,SACpB,CACJ,CAEA02W,qCAA6C,CACzCH,uBACAD,iBACAlD,mBAKsC,CACtC,OAAOvyW,GAAa01W,EAAuBY,IAGvC,GAAIb,IAAmBnG,GAAen8a,MAAO,CACzC,GAAM,CAAChkF,EAAO+qC,GAAuCo8d,EAC/Cn5gB,EAA+B,CACjCgS,MAAO,CACH,GAAGA,EACHwza,aAAc,KAAK32Q,YACfumW,EACApjgB,GAAOnU,MAEf,EACAk/C,IAAK,CACD,GAAGA,EACHyoY,aAAc,KAAK32Q,YACfumW,EACAr4d,GAAKl/C,MAEb,EACAsgI,MAAOmrB,OACPkqX,WAAYlqX,MAChB,EAEA,GACIt3I,IAAUs3I,QACVvsG,IAAQusG,QACR,OAAOt3I,EAAMnU,OAAU,UACvB,OAAOk/C,EAAIl/C,OAAU,UAErBmU,EAAMs8B,OAASg7G,QACfvsG,EAAIzO,OAASg7G,QACbt3I,EAAMs8B,MAAQyO,EAAIzO,KACpB,CACE,IAAM8qe,EAAar8d,EAAIl/C,MAAQmU,EAAMnU,MAC/Bw7gB,EAAkBD,EAAal/W,KAAKqC,IAAIvqJ,EAAMnU,KAAK,EAEzDmC,EAAOm+H,MAAQ,CACXtgI,MAAOu7gB,EACP5zF,aAAc,KAAK32Q,YACfumW,EACAgE,EACA,CACI7kW,SAAU,GACVthJ,KACImif,EAAgBlmW,YAAc,IACxB,KACAkmW,EAAgBlmW,SAC9B,EAER,EAEAlvK,EAAOwzgB,WAAa,CAChB31gB,MAAOw7gB,EACP7zF,aACI3pR,SAASw9W,IAAoB,CAAC/8W,MAAM+8W,GAC9B,KAAKxqW,YACDumW,EACAiE,EAAkB,IAClB,CACIpmf,KAAM,IACN8hJ,iBAAkB,EAClBR,SAAU,EACd,GAEJjrB,MACd,CACJ,CACA,OAAOtpJ,CACX,CAAO,CAEH,IAAM01gB,EAAKyD,EAAI,GACTn5gB,EAA+B,CACjCsuN,OAAQ,CAAE,GAAGonT,CAAG,CACpB,EAMA,OALIA,IAAOpsX,SACPtpJ,EAAOsuN,OAAQk3N,aAAe,KAAK32Q,YAC/BumW,EACAM,EAAG73gB,KACP,GACGmC,CACX,CACJ,EACJ,CAEA,IAAc00gB,mBAAiD,CAC3D,OAAO,KAAKD,8BAA8Bj+f,IAAKm/B,IAC3C,IAAMy/d,EAAkBz/d,EAAEy/d,gBACpBt1C,EAAas1C,EAAgBtjE,yBAC7B7+a,EACFmif,EAAgBnif,OAAS,IAAM,UAAYmif,EAAgBnif,KAE/D,MAAO,CACHmif,kBACAF,kBAAmBv/d,EAAEu/d,kBACrBr6W,QAAS,CAAEilU,aAAY7sc,MAAK,EAC5Bijf,SAAU,CAAC,KAAKjC,aACpB,CACJ,EACJ,CAEA,IAAsBU,aAA8B,CAChD,OAAO,KAAK9lE,YAAYr4b,IAAKywb,IAClB,CACHA,aACA36a,OAAQ,KAAKmof,8BAA8Bj+f,IAAKm/B,GAC5CA,EAAE8ie,mBAAmBx1gB,IAAIgkc,GAEjC,EACJ,CACJ,CAEA,IAAsB2tE,mBAAoC,CACtD,GAAM,CAAExuW,SAAU,KAAK2tW,UACvB,OAAOz+d,GAAU,KAAKq/d,YAAa,KAAKX,gBAAiB5tW,EAC7D,C,aACJ,GAEA,SAAS6vW,GAAalsgB,EAAA,CAWlB,GAAM,CAAEmsgB,WAAUC,YAAWG,WAAYvsgB,EACnCuvgB,EAAiBhD,IAAY,SAC7BiD,EAAWrD,IACbjwT,SAACqhR,IAAD,CACIC,aAAc4uC,EACd/vW,MACI+vW,EACMpsgB,EAAM88J,UACNyyW,EACE/gY,GAAU8tB,IACV9tB,GAAUpO,IAEzB,GAGL,OACI87E,SAAC,KAAD,CACIn/L,UAAWm5c,EAAWl2d,EAAMi6M,WAAYsyT,EAAS,CAAEJ,UAAS,GAC5Da,QAAShtgB,EAAMgtgB,SAAW,EAC1BL,QAAS3sgB,EAAM2sgB,SAAW,EAC1Br7J,QAAStxW,EAAMsxW,QAEfpgQ,UAAAyyL,UAAC,MAAD,CAAK5mR,UAAU,UAAfm0F,SAAA,CACK,CAACq+Z,GAAkBC,GACpBtzT,SAAC,OAAD,CAAAhrG,SAAOlxG,EAAMssgB,UAAiB,GAC7BiD,GAAkBC,CAClB,C,EACL,EAEZ,CAEA,SAAS/B,IAAUztgB,EAAA,CAKf,IAAM+c,EAAYm5c,EAAW,CACzB,OACA,QAAQl2d,EAAMgpgB,YACd,CAAE,aAAchpgB,EAAM0tgB,aAAc,CACvC,GACD,OAAOxxT,SAAC,KAAD,CAAen/L,YAAYm0F,SAAAlxG,EAAMkxG,QAAa,EACzD,CAEA,SAASqsX,IAASv9d,EAAA,CAId,IAAMw9d,EAAex9d,EAAMw9d,cAAgB,GACrCiyC,EACFzvgB,EAAMq8J,QAAU7tB,GAAUpO,KAAOk9J,IAAgBkC,IAErD,OACItjF,SAAC,OAAD,CACIn/L,UAAWm5c,EAAW,CAAE,YAAa,GAAM32K,OAAQi+K,CAAa,GAE/DtsX,SAAAssX,GACGthR,SAAC+9E,EAAD,CAAiB1W,KAAMksP,CAAa,IAEpC9rO,UAAC,OAAD,CAAMz3M,MAAO,CAAE4kE,QAAS,eAAgBj4E,MAAO,aAAc,EAA7Dq4B,SAAA,EACIgrG,SAAC+9E,EAAD,CAAiB1W,KAAM+Z,GAAgB,IACvCphF,SAAC+9E,EAAD,CACI1W,KAAMic,IACNtzM,MAAO,CAAEqrP,WAAY,MAAO,CAC/B,EACC,C,EAER,EAEd,CAEA,SAASg2L,IAAkB,CACvBz5gB,QACAo5gB,mBACA7iE,cAAA,CAMA,IAAMqlE,EACF,CAAC7C,GAAcK,EAAiBr5gB,GAAG,GACnCq5gB,EAAiBj2a,aAAenjG,EAAMywC,KAE1C,GACIzwC,EAAMywC,OAASg7G,QACf2tX,EAAiBj2a,aAAesoD,QAChC,CAACmwX,EAED,OAAO,KAEX,IAAMz4a,EAAaozW,EAAW6iE,EAAiBj2a,UAAU,EACnDg9Z,EAAc5pD,EAAWv2c,EAAMywC,IAAI,EAEzC,OACI23K,SAAC7B,GAAD,CACIv5M,SACI6iS,UAAC,MAAD,CAAK5mR,UAAU,4BAAfm0F,SAAA,EACIyyL,UAAC,SAAD,CAAAzyL,SAAA,CAAQ,0BAAwBja,CAAmB,KACnDilH,SAAC,KAAD,CAAK,GAAC,yCACiC+3S,EAAY,GAClD,C,GAGT/iZ,UAAAgrG,SAAC,OAAD,CAAMn/L,UAAU,2BACZm0F,UAAAgrG,SAAC,OAAD,CAAMn/L,UAAU,OACZm0F,UAAAgrG,SAAC+9E,EAAD,CAAiB1W,KAAMyd,EAAe,EACpC,EACJ,EACH,EAEf,CAEA,SAASqsO,IAAmB,CACxBH,mBACA7iE,cAAA,CAKA,GACIwiE,GAAcK,EAAiBr5gB,GAAG,GAClCq5gB,EAAiBj2a,aAAesoD,OAEhC,OACI28D,SAAC,OAAD,CAAMn/L,UAAU,gBAAgB6+W,KAAK,MAAM,aAAW,UAAU1qR,SAAA,GAE1D,GAGd,IAAMm9N,EAAc,eAAeg8H,EAAW6iE,EAAiBj2a,UAAU,IAEzE,OACIilH,SAAC7B,GAAD,CACIv5M,SACIo7M,SAAC,MAAD,CAAKn/L,UAAU,4BAA6Bm0F,SAAAm9N,CAAiB,GAGjEn9N,UAAAgrG,SAAC,OAAD,CAAMn/L,UAAU,gBAAgB6+W,KAAK,MAAM,aAAYvtD,EAAan9N,SAAA,GAE9D,EACH,EAEf,CAEA,SAASo8Z,IACLqC,EACA3G,EAAA,CAIO,GAFH4C,IAAc+D,IAEP9D,IAAa8D,GACpB,OAAOA,EAAe3G,EAG9B,CAEA,SAAS8C,IAAiBj4gB,EAAA,CACtB,OAAO4+I,OAAOlwH,OAAOmmf,IAAgB/5Y,SAAS96H,EAClD,CAEA,SAASg4gB,IACL/3gB,EAAA,CAEA,MAAO,UAAWA,CACtB,CAEA,SAAS83gB,IACL93gB,EAAA,CAEA,MAAO,WAAYA,CACvB,CAEA,SAAS+4gB,GAAc7D,EAAA,CACnB,OAAOA,IAAc,SAAWA,IAAc,YAClD,CAEA,SAAS4G,IACLrrf,EAAA,CAEA,OAAOskf,IAA0Bl6Y,SAASpqG,EAC9C,CAEA,SAAgBsrf,IACZtrf,EAAA,CAEA,OACIqrf,IAAwBrrf,IAAc6+c,IAAuB7+c,EAErE,CC5nCA,IAAYurf,EAAL,SAAAA,EAAA,C,MAEHA,GAAA/1X,QAAA,UAEA+1X,EAAAC,SAAA,WAEAD,EAAAE,YAAA,cAEAF,EAAAG,MAAA,Q,CACJ,MAEA,SAAgBC,GAAgB,CAC5Bj/C,QACAz4U,SAAA,CAOA,OAFIy4U,GAAO1xK,QAAU/mK,GAAO+mK,OAAQ,cAChC0xK,GAAOC,YAAc14U,GAAO04U,WAAY,QAC5C,SACJ,CCdA,IAAai/C,GAAwB,YAGxBC,IAAqB,OAGrBnwC,IAAuB,IACvBowC,IAA8B,IAG9BC,IAAwB,IACxBC,IAAyB,IACzBC,IAA+B,IAC/BC,IAAkC,IAIlCC,IAA6B,GASpCC,GAAsC,CACxC,kBAAmB,EACnB,QAAS,EACT,YAAa,EACjB,EAEaC,GAAgD,EACxDd,EAAS,SAAUa,IACnBb,EAAS,aAAca,IACvBb,EAAS,UAAW,CACjB,GAAGa,GACH,kBAAmB,IACvB,GACCb,EAAS,OAAQ,CACd,kBAAmB,IACnB,QAASrzE,GACT,YAAa,EACjB,CACJ,EAIao0E,GAA0C,CACnD,OAAQ,CAAE,QAAS,CAAE,OAAQ,UAAW,YAAa,CAAE,CAAE,CAC7D,EACaC,GAA8C,CACvD,OAAQ,CACJ,QAAS,CAAE,QAAS,CAAE,EACtB,MAAO,CAAE,QAASr0E,EAAsB,CAC5C,EACA,KAAM,CAAE,MAAO,CAAE,QAASA,EAAsB,CAAE,CACtD,EC7Bas0E,GAAb,KAAsC,CAClC,YACA,kBACA,SACA,kBACA,eAEA,YAAY,EAAsC,CAC9C,KAAK,YAAc/wgB,EAAM,YACzB,KAAK,kBAAoBA,EAAM,mBAAqB,GACpD,KAAK,SAAWA,EAAM,UAAY,IAAI,IACtC,KAAK,kBAAoBA,EAAM,mBAAqB,IAAI,IACxD,KAAK,eAAiBA,EAAM,cAChC,CAEA,IAAY,YAAsB,CAC9B,IAAM2gC,EAA8B,IAAI,IAAI,CACxC,GAAG,KAAK,kBACR,GAAG,KAAK,QACZ,CAAC,EACD,OAAO,MAAM,KAAKA,EAAO,OAAO,CAAC,CACrC,CAEA,IAAY,iBAA2B,CAEnC,IAAMoxQ,GACD,KAAK,iBAAmB,OAEnB83B,GAAO,KAAK,YAAY,SAAS,EADjC,KAAK,YAAY,UAAU,KAAK,cAAc,EACb,EACpC,MAAM,GAAK,CAAC,EAEd,OADD,KAAK,kBAA0B93B,EAAO,WAAW,EACzCA,CAChB,CAEA,IAAY,gBAAwB,CAChC,IAAMi/N,EAAiB/gO,IACnB,KAAK,gBACL,KAAK,UACT,EASA,OAPI+gO,IAAmB,QAEnB,QAAQ,MAAM,8CAA+C,CACzD,gBAAiB,KAAK,gBACtB,WAAY,KAAK,UACrB,CAAC,EAEEA,GAAkB,MAC7B,CAEA,OAAO,EAAuB,CAC1B,IAAIjtT,EAAQ,KAAK,SAAS,IAAItvN,CAAE,EAMhC,OALIsvN,IAAU,SAAW,EAAQ,KAAK,kBAAkB,IAAItvN,CAAE,GAC1DsvN,IAAU,QAAa,KAAK,YAAY,WACxC,EAAQ,KAAK,YAAY,SAAStvN,IAClCsvN,IAAU,SAAW,EAAQ,KAAK,gBACtC,KAAK,kBAAkB,IAAItvN,EAAIsvN,CAAK,EAC7BA,CACX,CACJ,ECpDA,SAAgBktT,IAAc,CAC1B,aACA,aACA,iBACA,8BACA,8BAC8B,CAO9B,OALI5gD,IAAmB1+U,GAAe,OAAeurT,EAK9Cg0E,GAA8BC,EAC/B,GAAGj0E,EAAW,KAAK64B,IACnBA,CACV,CAEA,SAAgBtzB,IAAe,CAC3B,aACA,aACA,iBACA,+BACiE,CAOjE,OALI4tB,IAAmB1+U,GAAe,OAAeurT,EAK9Ci0E,EACD,GAAGj0E,EAAW,KAAK64B,IACnBA,CACV,CAEA,SAAgBq7C,IAAY,CACxB,aACA,aACA,iBACA,+BACiE,CAOjE,OALI/gD,IAAmB1+U,GAAe,OAAeurT,EAK9Ci0E,EACD,GAAGj0E,EAAW,KAAK64B,IACnBA,CACV,CAEA,SAAgBs7C,GACZ,EACA,EAC0B,CAC1B,OAAOlxY,EACF,6BAA6B2iB,CAAI,CAAC,EACjC,yBAAyB3iB,EAAM,cAAc,CACvD,CAEA,SAAgBmxY,GACZ,EACA,EACkB,CAClB,IAAM1iV,EAAc2iV,GAAgB,IAAIrhD,CAAU,EAClD,GAAKthS,EACL,OAAO,MAAM,KAAKA,EAAY,OAAO,CAAC,CAAC,CAClC,OAAQ,GAAS4iV,CAAI,CAAC,CACtB,KAAK,KAAK,CACnB,CAEA,SAAgBC,IACZ,EACmB,CACnB,MAAO,CACH,KAAMj/Z,GAAQ,YAAc28B,GAAU,IAItC,0BAA2B4L,GAAU,MAErC,IAAK,CACT,CACJ,CAEA,SAAgB22X,IACZ,EACA,CAAE,aAAY,YACS,CACvB,GAAM,CAAE,iBAAgB,gBAAiBC,EAEzC,OAAO1hD,EAAO,WAAW,CAAC,CAAC,IAAK,GAAW,CACvC,IAAM2hD,EAAe3hD,EAAO,OAAO,IAAK,GAAuB,CAC3D,IAAMlsQ,EAAQ8tT,EAAW,cACnB9gO,GACI8gO,EAAW,mBAAmBrjX,EAAM,UAAU,CAClD,EACAyhU,EAAO,MAEb,MAAO,CACH,KAAMzhU,EAAM,EACZ,EAAGsjX,EAAe,MAAMtjX,EAAM,CAAC,EAC/B,EAAGujX,EAAa,MAAMvjX,EAAM,CAAC,EAC7B,OACJ,CACJ,CAAC,EACD,MAAO,CAAE,GAAGyhU,EAAQ,cAAa,CACrC,CAAC,CACL,CAMA,SAAgB+hD,IAAuB,CACnC,QACA,cACA,iBACA,aAMiB,CAEjB,IAAMC,EAAc98W,GAAS,EAAI,GAAK,GAMtC,GAAI,CALe+8W,EAAY,OAAO,CAClC,KAAMD,EACN,MAAOA,CACX,CAEK,EAAW,SAAS5jB,CAAK,EAAG,OAEjC,IAAM8jB,EAAYL,EAAe,OAAOzjB,EAAM,CAAC,EAE/C,OADgB/9M,GAAQ8hO,EAAY,GAAU,KAAK,IAAID,EAAY3jX,EAAM,CAAC,CACnE,GAAS,CACpB,CAEA,SAAgB6jX,IACZ,EACA,CACI,oBAAoB,GACpB,oBAAoB,GACpB,qBAAqB,CAAC,EACtB,4BAA4B,IAOT,CACvB,IAAMC,EAAiBC,EAAa,SAAW,EAE3CtiD,EAAkCsiD,EAAa,IAAK,GAAW,CAC/D,IAAMthD,EAAQJ,GAAuBZ,EAAQ,CACzC,oBACA,oBACJ,CAAC,EACGt+H,EAAWu+K,GAAgB,CAAE,QAAO,MAAOjgD,EAAO,KAAM,CAAC,EAU7D,OANIuiD,GACAF,GACA3gL,IAAam+K,EAAS,UAEtB,EAAWA,EAAS,UAEjB,CAAE,GAAG7/C,EAAQ,QAAO,UAAS,CACxC,CAAC,EAWD,MARA,GAASwiD,GAASxiD,EAAS,GAAW,CAACA,EAAO,eAAe,GAIzDyiD,GAAqB3hD,KACrB,EAAS0hD,GAASxiD,EAAQe,GAAqB,GAG5Cf,CACX,C,s1GChOa0iD,GAAb,KAAaA,C,gCAOR9jZ,E,EAAa+jZ,e,GAIb/jZ,E,EAAagkZ,a,GAIbhkZ,E,EAAaM,S,GAIbN,E,EAAaikZ,kB,GAIbjkZ,E,EAAatzH,Q,IAkBbw3G,IAAOo6D,K,KAAMz/J,K,IAObqlG,IAAOo6D,K,KAAMz+J,Q,IAObqkG,IAAOo6D,K,KAAM4lW,gB,IAMbhga,IAAOo6D,K,KAAMsyV,Q,IAWb1sZ,IAAOo6D,K,KAAM+gM,O,KAvEd95W,iBAA0C,IAAIkZ,KAE9C,aAAc,CACVmkL,EAAoC,KAAM,CAAEr9L,MAAOkrL,CAAW,EAClE,CAEA,IAAcszV,eAAiC,CAC3C,OAAO,KAAKx+gB,KAChB,CAEA,IAAcy+gB,aAA4B,CACtC,OAAO15W,MAAMxnI,KAAK,KAAKv9B,KAAK,CAChC,CAEA,IAAc+6H,SAAmB,CAC7B,OAAO,KAAK/6H,MAAMia,OAAS,CAC/B,CAEA,IAAcykgB,kBAA4B,CACtC,MAAO,CAAC,KAAK3jZ,OACjB,CAEA,IAAc5zH,QAAiB,CAC3B,OAAO,KAAKnH,MAAMia,IACtB,CAKAlV,IAAI+2d,EAAiC,CACjC,OAAO,KAAK97d,MAAM+E,IAAI+2d,EAC1B,CAKA52d,MAAM42d,EAA0C,CAC5C,OAAO,IAAIZ,GAAiB,KAAKn2d,IAAI+2d,GAAa,CAAC,KAAK/gW,OAAO,CACnE,CAEczhH,IAAI,GAAGmlgB,EAAiC,CAClD,IAAK,IAAM3iD,KAAc2iD,EACrB,KAAKz+gB,MAAMsZ,IAAIwid,GAEnB,OAAO,IACX,CAEcxhd,OAAO,GAAGmkgB,EAAiC,CACrD,IAAK,IAAM3iD,KAAc2iD,EACrB,KAAKz+gB,MAAM2wc,OAAOmrB,GAEtB,OAAO,IACX,CAEc6iD,eAAe,GAAGF,EAAiC,CAG7D,OAFA,KAAK3kK,MAAA,EACL,KAAKxgW,IAAA,GAAOmlgB,GACL,IACX,CAEcpT,OAAO,GAAGoT,EAAiC,CACrD,IAAK,IAAM3iD,KAAc2iD,EACjB,KAAK15gB,IAAI+2d,GACT,KAAKxhd,OAAOwhd,GAEZ,KAAKxid,IAAIwid,GAGjB,OAAO,IACX,CAEchiH,OAAc,CACxB,KAAK95W,MAAM85W,MAAA,CACf,CACJ,E,s1GC1Ba8kK,GAAb,KAAaA,C,gCAaRnkZ,E,EAAa+1W,Y,GAIb/1W,E,EAAaokZ,6B,GAObpkZ,E,EAAa0hW,kB,GA0Db1hW,E,EAAa02W,gB,GAIb12W,E,EAAaqkZ,Y,GAIbrkZ,E,EAAa6jZ,mB,GAIb7jZ,E,EAAa8gW,c,GAIb9gW,E,EAAaskZ,iB,GAIbtkZ,E,EAAa2hW,U,GAIb3hW,E,EAAaukZ,c,GAIbvkZ,E,EAAawkZ,a,GAIbxkZ,E,EAAaykZ,Y,GAIbzkZ,E,EAAas4K,a,GAQbt4K,E,EAAa2+M,kB,GAWb3+M,E,EAAaggN,kB,GAObhgN,E,EAAa0kZ,0B,GAYb1kZ,E,EAAa2kZ,e,GAQb3kZ,E,EAAa0iZ,gB,GAIb1iZ,E,EAAa4+M,c,GAOb5+M,E,EAAa4kZ,qB,GAIb5kZ,E,EAAawhW,gB,GAIbxhW,E,EAAaohW,Q,GAmBbphW,E,EAAa6kZ,c,GAIb7kZ,E,EAAauyY,0B,GAwIbvyY,E,EAAapa,W,KArVdhoB,QAEAknb,WACA5kM,kCAAyB77L,GAAgB0gY,mBACzCrmM,mBAAqBzrC,GAErB,YAAY,CAAEr1M,WAA0C,CACpD,KAAKA,QAAUA,EACf,KAAKknb,WAAalnb,EAAQonb,oBAAsB,IAAI1mM,GAAW,IAAI,EACnE17I,EAAe,IAAI,CACvB,CAEA,IAAcmzS,YAAwB,CAClC,OAAO,KAAKn4Y,QAAQ0zC,KACxB,CAEA,IAAc8yY,6BAAyC,CACnD,OACI,KAAKxmb,QAAQ8jY,kBACb,KAAKujD,eAAe,KAAKlvC,UAAU,CAE3C,CAEA,IAAcrU,kBAA8B,CACxC,IAAIpwV,EAAQ,KAAK8yY,4BAGX,CAAEpS,iBAAgBnse,aAAc,KAAK+3D,QAO3C,OANIo0a,GAAkBnse,IAAc6qH,SAChCpf,EAAQA,EAAM8pV,8CACVv1b,EACA,KAAK+3D,QAAQkjY,cAAgB,EACjC,GAEGxvV,CACX,CAEA2zY,eAAe3zY,EAA6B,CA6BxC,MA5BAA,GAAQA,EAAM+mV,oBACV,KAAKqe,eAAerhC,mBACxB,EAIA/jU,EAAQA,EAAM2jV,sCAAsC,KAAK6L,YAAY,EAEjE,KAAK2jD,aACLnzY,EAAQA,EAAMyjV,mCAAmC,KAAK+L,YAAY,GAElE,KAAKwjD,kBACLhzY,EAAQA,EAGH2jV,sCAAsC,CAAC,KAAKqvD,eAAgB,GAC5D7mD,+BAA+B,KAAK6mD,eAAe,GAMxD,KAAKM,sBAAwB7hY,GAAoBrR,MACjDJ,EAAMooV,yBAAyB,KAAKoH,YAAY,IAEhDxvV,EAAQA,EAAMqoV,YAAA,GAGXroV,CACX,CAEA4zY,2BAA2B5zY,EAA6B,CASpD,OANI,KAAKszY,sBAAwB7hY,GAAoBrR,OACjDJ,EAAQA,EACH2jV,sCAAsC,KAAK6L,YAAY,EACvDjH,uCAAuC,KAAKiH,YAAY,GAG1DxvV,CACX,CAEA,IAAcolW,gBAAiC,CAC3C,OAAOzV,GAAmB,KAAKrjY,QAAQ5C,SAAS,CACpD,CAEA,IAAcqpb,YAAyB,CACnC,OAAO,KAAKzmb,QAAQymb,YAAc,IAAIP,EAC1C,CAEA,IAAcD,mBAA6B,CACvC,OAAO,KAAKQ,WAAWJ,gBAC3B,CAEA,IAAcnjD,cAAyB,CACnC,OAAOD,GAAuB,KAAKjjY,OAAO,CAC9C,CAEA,IAAc0mb,iBAAsC,CAChD,OAAO,KAAK1mb,QAAQ0mb,eACxB,CAEA,IAAc3iD,UAAyB,CACnC,OAAO,KAAKb,aAAaljd,IAAKq2I,GAAS,KAAKytU,iBAAiBr3d,IAAI4pJ,GACrE,CAEA,IAAcswX,cAA2B,CACrC,OAAO,KAAK5iD,SAAS,EACzB,CAEA,IAAc6iD,aAA0B,CACpC,OAAO,KAAK9iD,iBAAiBr3d,IAAI,KAAKi6gB,eAAe,CACzD,CAEA,IAAcG,YAAsB,CAChC,OAAO,KAAK7mb,QAAQunb,aAAatgX,YAAcvkB,GAAUh2H,GAC7D,CAEA,IAAcguR,aAA2B,CACrC,OACK,KAAK16M,QAAQg4M,gBACRgO,GAAav5S,IAAI,KAAKuzF,QAAQg4M,eAAe,EAC7C,OAASgO,GAAav5S,IAAI,KAAK61U,sBAAsB,CAEnE,CAEA,IAAcvB,kBAA+B,CACzC,OAGI,KAAK/gP,QAAQwnb,0BAGb,KAAKrvC,WAAW1re,IAAI,KAAKi6gB,eAAe,CAEhD,CAEA,IAActkM,kBAA0D,CACpE,OACItqC,GAAiB2vO,QAAQ,KAAKb,YAAY70Y,GAAG,GAC7C,KAAK/xC,QAAQknb,UAErB,CAEA,IAAcJ,0BAAqD,CAC/D,OAAO,IAAIxC,GAAyB,CAChC5pO,YAAa,KAAKA,YAClBgtO,kBAAmB,KAAK1nb,QAAQ0nb,kBAChC9iO,SACI,KAAKg/K,iBAAmB1+U,GAAeu9B,OACjC,KAAK01T,WAAWte,qBAChB,KAAKse,WAAWpe,4BAC1B4tD,kBAAmB,KAAK3nb,QAAQ4nb,cACpC,EACJ,CAEA,IAAcb,eAAyB,CACnC,MAAO,CAAC,KAAKH,YAAYhsE,SAC7B,CAEAitE,mBAAmBxghB,EAAyC,CACxD,OAAO,KAAK6/gB,WAAWrjM,SAASx8U,UACpC,CAEA,IAAcy9gB,gBAA6C,CACvD,OAAOF,GAAkB,KAAKzsC,WAAY,KAAKjV,aAAa,EAAE,CAClE,CAEA,IAAcliJ,cAAwB,CAElC,OADK,KAAK+lM,cACH,KAAKH,YAAYjrE,2BAA2B91U,KAC9Cx+H,GAAU,CAACsyc,GAAgBtyc,IAFA,EAIpC,CAEA,IAAc2/gB,qBAA2C,CACrD,OAAO,KAAKhnb,QAAQgnb,qBAAuB7hY,GAAoBgqD,IACnE,CAEA,IAAcy0R,gBAAiC,CAC3C,OAAOF,GAAyB,KAAK1jY,QAAS,GAClD,CAEA,IAAcwjY,QAAqC,CAC/C,IAAMA,EAAS,KAAKO,SAAShtT,QAASv8F,GAClCA,EAAIiiY,gBAAgBz8b,IAAKywb,GACrB,KAAKq3E,sBAAsBr3E,EAAYj2X,KAKzC,CAAEi9X,uBAAwB,KAAKqhC,eAC/BivC,EAAc,IAAIlogB,IACpB43b,EAAoBz3b,KAAKnX,EAAMgG,IAAU,CAAChG,EAAMgG,CAAM,IAM1D,OAJqBiwC,GAAS0kb,EAASA,GACnCukD,EAAYt7gB,IAAI+2d,EAAOC,UAAU,CAG9BukD,CACX,CAEA,IAAcf,cAAiD,CAC3D,OAAO,IAAIpngB,IAAI,KAAK2jd,OAAOxjd,IAAKwjd,GAAW,CAACA,EAAOC,WAAYD,CAAO,GAC1E,CAEA,IAAcmxC,0BAA4C,CACtD,IAAMH,EAA8B,CAAC7vX,GAAckiK,IAAI,EAUvD,OARI,KAAKiyL,eAAenhC,oBAAsB,GAC1C68D,EAAW1kgB,KAAK60I,GAAc89B,MAAM,EAER,KAAK01T,WAChCtlB,WAAW,KAAKqQ,YAAY,EAC5B1ra,OAAQkmB,GAAW,CAACA,EAAO2mF,SAAS2/K,cAAcl1U,OACzB,GAAG0lgB,EAAW1kgB,KAAK60I,GAAct1F,MAAM,EAE9Dmld,CACX,CAEAsT,sBACIr3E,EACA/yX,EACe,CACf,GAAM,CACFsiB,QAAS,CAAEiob,6BACXnkD,iBAAkB,CAAE3K,wBACpByK,iBACAmjD,gBACAH,eACA,KAGE15D,EAAaxvY,EAAOo+X,mBAAmBH,2BACvC7lb,EAAS4nD,EAAOi+X,2BAChBusE,EAActB,EAAYjrE,2BAS1BrzS,EANaxpH,IACf,KAAKglb,iBAAiBnK,uBACjBltd,IAAIgkc,GACJj5Y,OAAQ3oD,GAAUiwC,GAAWhpB,EAAOjnB,EAAM,GAC9CA,GAAUq+c,EAAWr+c,EAEXs5gB,EAAWnogB,IAAKnR,IAC3B,IAAMkzJ,EAAmB,CACrB3zJ,EAAG8+c,EAAWr+c,GACd0vD,EAAGzoC,EAAOjnB,EACd,EACA,GAAIk4gB,EAAe,CACf,IAAMqB,EAAaF,EAAYr5gB,GAC/BkzJ,EAAMqmX,WAAazuE,GAAgByuE,GAC7BA,EACAt1X,MACV,CACA,OAAOiP,CACX,GAGMunU,EAAa5rZ,EAAO29X,oBACpBqpE,EAA8BvrD,EAAqBrqd,OAAS,EAC5D20d,EAAa+gD,IAAc,CAC7B/zE,aACA64B,aACA1F,iBACA8gD,8BACAD,2BAA4BwD,CAChC,GAEMlyE,EAAcC,IAAe,CAC/BvF,WAFoByzB,GAAsBzzB,CAE9B43E,GAAmB53E,EAC/B64B,aACA1F,iBACA8gD,6BACJ,GAEI4D,EACJ,GAAIvB,EAAe,CACf,IAAMqB,EAAaxhX,GAAO0B,IAAS8/W,WACnCE,EAAc,KAAKT,mBAAmBO,EAC1C,KACIE,GAAc,KAAKxB,yBAAyB9ja,OACxC2ha,IAAY,CACRl0E,aACA64B,aACA1F,iBACA8gD,6BACJ,IAIR,MAAO,CACHp8W,SACAm7T,aACAhzB,aACA64B,aACAvzB,cACA/xH,aAActmQ,EAAOsmQ,aACrBukM,gBAAiB7qc,EAAO2mF,SAASmkX,2BACjClxT,MAAOgxT,EACPv8X,MAAO,KAAK06X,WAAW55gB,MAAM42d,EACjC,CACJ,CAEAglD,iBAAiB1ia,EAAoC,CACjD,IAAMysF,EAAOzsF,EAAO0ia,iBAAA,EAWpB,OARAj2U,EAAKk2U,mCACD,KAAK5kD,iBAAiBvJ,cAAc,KAAK2I,YAAY,GAGzD1wR,EAAKvrC,UAAYvkB,GAAUg8J,OAC3BlsG,EAAKm0U,aAAe,KAAKxuC,WAAWzoB,WACpCl9Q,EAAKm2U,oBAAsB,GAEpBn2U,CACX,CAEAo2U,eAAe7ia,EAAkC,CAC7C,IAAMysF,EAAOzsF,EAAO6ia,eAAA,EAGd/L,EAAU,KAAK/4C,iBAAiBrP,UAAU,KAAKyO,YAAY,EAgBjE,OAfA1wR,EAAKk2U,mCAAmC,CACpChlX,KAAK/0J,IAAI6jM,EAAK72I,OAAO,GAAIkhd,EAAQ,EAAE,EACnCn5W,KAAKh1J,IAAI8jM,EAAK72I,OAAO,GAAIkhd,EAAQ,EAAE,CACtC,GAGDrqU,EAAKm2U,oBAAsB,KAAK5kD,SAASvuT,MACpCqzW,GAAYA,EAAQ9tE,aACzB,EAGAvoQ,EAAK74B,MAAQ,GAEb64B,EAAKm0U,aAAe,KAAKA,aAElBn0U,CACX,CAEA,IAAcxqF,WAA4B,CACtC,IAAMryF,EAAUytc,GAAsB,KAAKpjY,OAAO,EAClD,GAAIrqE,EAAS,MAAO,CAAEosB,OAAQpsB,CAAQ,EAEtC,GAAM,CAAEqpd,mBAAmB,YAAe,KAAKh/Y,QAK/C,OAJK,KAAKwjY,OAAO10d,OAIV,CAAEizC,OAAQ,EAAG,EAHT,CACHA,OAAQ,4BAA4Bi9b,GACxC,CAER,CACJ,ECnYA,SAAgB8pC,GAAoB,CAChC,aACA,mBACA,UACA,gBACA,qBAOmB,CACnB,IAAMC,EACF9sC,GAAiB+sC,IAA0B79W,CAAO,EACtD,GAAI,CAAC49W,EAAqB,OAE1B,IAAME,EAAiBC,IACnBplD,EACA34T,CACJ,EACA,GAAI,CAAC89W,EAAe,OAAQ,OAI5B,IAAME,EAAmBH,IAA0BC,CAAc,EAC3DG,EACFntC,IAAkBktC,GAAoBJ,GAEpCrvD,EAAYye,EAAW,UACvBkxC,EAA0BC,IAC5BnxC,EACA8wC,EAAe,IAAK,GAAWvrc,EAAO,IAAI,CAC9C,EAEA,OAAO6rc,IAAsB,CACzB,WAAYzlD,EAAiB,WAC7B,YACA,0BACA,cAAeslD,EACf,mBACJ,CAAC,CACL,CAEA,SAAgBG,IAAsB,CAClC,aACA,gBACA,YACA,0BACA,oBAAoBzlY,GAAkB,SAOnB,CAInB,GAHI,CAACm4V,GAAiBvsB,EAAW,WAG7B,CAACgK,EAAW,OAGhB,IAAMlvX,EACFklX,EAAW,aAAa,SAAW,EAC7BA,EAAW,aAAa,GACxB,OAEJ,CAACvzR,EAAWqtV,GAAY9vD,EAG9B,GAAIv9R,IAAcqtV,EAIlB,IAAIh/a,IAAe,QAAa,CAACg6D,GAAYkrT,EAAW,YAAY,EAAG,CAEnE,GAAM,CAAC+5D,EAAkBC,GACrBL,GAA2B3vD,EACzBx0b,EACF81a,IAAsBl3T,GAAkB,SAClCt5C,EACA,KAAK,IAAIA,EAAayxY,EAAewtC,CAAgB,EACzDh2c,EACFunY,IAAsBl3T,GAAkB,UAClCt5C,EACA,KAAK,IAAIA,EAAayxY,EAAeytC,CAAe,EAGxDlugB,EAAQ0pB,IAASslE,EAAatlE,EAAO,EAAIA,EACzCqhB,EAAMktB,IAAO+2B,EAAa/2B,EAAK,EAAIA,EAGzC,GAAIj4D,EAAQ+qC,EAAK,OAEjB,IAAM2oF,EAAU,GAAuBwgV,EAAW,WAAW53a,CAAI,EAC3D4qH,EACFlnJ,IAAU+qC,EACJ2oF,EAAO1zH,CAAK,EACZ,4BAA4B0zH,EAAO1zH,CAAK,EAAE,OAAO0zH,EAAO3oF,CAAG,IAErE,MAAO,kBAAkB2oF,EAAO1kC,CAAU,EAAE,kCAAkCk4D,EAAO,mBACzF,CAAO,CAEH,IAAM6+J,EACFy5I,IAAsBl3T,GAAkB,UAClC,kBACAk3T,IAAsBl3T,GAAkB,SACtC,gBACA,UAcZ,OAToBm4V,GAAiButC,EAAWrtV,EAErC,kCAAkColI,EAAQ,0BAO9C,kCAAkCA,EAAQ,gBAF/B8lK,IAAe4U,EAHXz3U,GAAYkrT,EAAW,YAAY,EACnDx9T,GAAa,IACbA,GAAa,IAG8C,EAAU,mBAC/E,EACJ,CAGA,SAAS82X,IAA0B,EAA+B,CAC9D,OAAO,KAAK,IAAI,EAAG,GAAG79W,EAAQ,IAAK,GAAWztF,EAAO,SAAS,CAAC,CACnE,CAMA,SAASwrc,IACL,EACA,EACY,CACZ,GAAM,CAAE,cAAex1Y,EACvB,GAAIg8U,EAAW,UAAW,MAAO,CAAC,EAElC,IAAMlQ,EAAQkQ,EAAW,2BAEzB,OAAOvkT,EAAQ,OAAQ,GAAW,CAC9B,GAAM,CAAE,QAASztF,EACX08X,EAAmBD,GAA0BzmU,EAAO2iB,CAAI,EAC9D,GAAI,CAAC3iB,EAAM,IAAI2iB,CAAI,GAAK,CAAC3iB,EAAM,IAAI0mU,CAAgB,EAAG,MAAO,GAE7D,IAAM6B,EACFvoU,EAAM,IAAI0mU,CAAgB,CAAC,CAAC,2BAEhC,IAAK,IAAIrqc,EAAI,EAAGA,EAAIyvc,EAAM,OAAQ,IAC9B,GAAIA,EAAMzvc,KAAOksc,EAAclsc,GAAI,MAAO,GAG9C,MAAO,EACX,CAAC,CACL,CAGA,SAASu5gB,IACL,EACA,EACqB,CACrB,IAAMK,EAAe5jE,EAChB,OAAQ,GAASryU,EAAM,IAAI2iB,CAAI,CAAC,CAAC,CACjC,IAAK,GAAS3iB,EAAM,IAAI2iB,CAAI,CAAC,EAClC,GAAKszX,EAAa,OAElB,MAAO,CACH,KAAK,IAAI,GAAGA,EAAa,IAAK,GAAWjsc,EAAO,OAAO,CAAC,EACxD,KAAK,IAAI,GAAGisc,EAAa,IAAK,GAAWjsc,EAAO,OAAO,CAAC,CAC5D,CACJ,C,s1GCrJaksc,IAAb,KAAaA,C,gCAURxnZ,E,EAAa+1W,Y,GAIb/1W,E,EAAaokZ,6B,GAObpkZ,E,EAAa0hW,kB,GA4Db1hW,E,EAAa02W,gB,GAIb12W,E,EAAaqkZ,Y,GAIbrkZ,E,EAAa6jZ,mB,GAIb7jZ,E,EAAa8gW,c,GAIb9gW,E,EAAa2hW,U,GAIb3hW,E,EAAaukZ,c,GAIbvkZ,E,EAAagyY,gB,GAIbhyY,E,EAAaykZ,Y,GAIbzkZ,E,EAAa4kZ,qB,GAIb5kZ,E,EAAaynZ,Y,GAIbznZ,E,EAAas4K,a,GAQbt4K,E,EAAan6F,W,GAIbm6F,E,EAAal6F,S,GAIbk6F,E,EAAawhW,gB,GAIbxhW,E,EAAauyY,0B,GAWbvyY,E,EAAa0kZ,0B,GAYb1kZ,E,EAAa0iZ,gB,GAsGb1iZ,E,EAAa0nZ,W,GAQb1nZ,E,EAAa2nZ,uB,GAOb3nZ,E,EAAaohW,Q,GAMbphW,E,EAAa4nZ,Y,GAOb5nZ,E,EAAa6nZ,iB,GAQb7nZ,E,EAAa8nZ,S,GAIb9nZ,E,EAAa+nZ,gB,GA+Bb/nZ,E,EAAapa,W,KAhVdhoB,QAEAsiP,kCAAyB77L,GAAgB0gY,mBAEzC,YAAY,CAAEnnb,WAA2C,CACrD,KAAKA,QAAUA,EACfglG,EAAe,IAAI,CACvB,CAEA,IAAcmzS,YAAwB,CAClC,OAAO,KAAKn4Y,QAAQ0zC,KACxB,CAEA,IAAc8yY,6BAAyC,CACnD,OACI,KAAKxmb,QAAQ8jY,kBACb,KAAKujD,eAAe,KAAKlvC,UAAU,CAE3C,CAEA,IAAcrU,kBAA8B,CACxC,IAAIpwV,EAAQ,KAAK8yY,4BAGX,CAAEv+e,aAAc,KAAK+3D,QAO3B,OANI,KAAKo0a,gBAAkBnse,IAAc6qH,SACrCpf,EAAQA,EAAM8pV,8CACVv1b,EACA,KAAKi7b,cAAgB,EACzB,GAEGxvV,CACX,CAEA2zY,eAAe3zY,EAAkB,CAe7B,MAdAA,GAAQA,EAAM+mV,oBACV,KAAKqe,eAAerhC,mBACxB,EAGA/jU,EAAQA,EAAM2jV,sCAAsC,KAAK6L,YAAY,EAEjE,KAAK2jD,aACLnzY,EAAQA,EAAMyjV,mCAAmC,KAAK+L,YAAY,GAEtE,KAAKA,aAAapid,QAASu1I,IACvB3iB,EAAQA,EAAMmsV,+BAA+BxpU,EACjD,GAEO3iB,CACX,CAEA4zY,2BAA2B5zY,EAA6B,CAyBpD,MAxBAA,GAAQA,EAAM2jV,sCAAsC,KAAK6L,YAAY,EAErE,KAAKA,aAAapid,QAASu1I,IACvB3iB,EAAQA,EAAMmsV,+BAA+BxpU,EACjD,GAII,CAAC,KAAKr2D,QAAQm2a,aAAe,KAAKlue,YAAc,KAAKC,UACrDwrG,EAAQA,EACH+nV,oBAAoB,CAAC,KAAKxzb,UAAW,KAAKC,OAAQ,GAClDu0b,wDACG,KAAKyG,YACT,GAKJ,KAAK8jD,sBAAwB7hY,GAAoBrR,OACjDJ,EAAQA,EAAMuoV,uCACV,KAAKiH,YACT,GAGGxvV,CACX,CAEA,IAAcolW,gBAAiC,CAC3C,OAAOzV,GAAmB,KAAKrjY,QAAQ5C,SAAS,CACpD,CAEA,IAAcqpb,YAAyB,CACnC,OAAO,KAAKzmb,QAAQymb,YAAc,IAAIP,EAC1C,CAEA,IAAcD,mBAA6B,CACvC,OAAO,KAAKQ,WAAWJ,gBAC3B,CAEA,IAAcnjD,cAA6B,CACvC,OAAOD,GAAuB,KAAKjjY,OAAO,CAC9C,CAEA,IAAc+jY,UAAyB,CACnC,OAAO,KAAKb,aAAaljd,IAAKq2I,GAAS,KAAKytU,iBAAiBr3d,IAAI4pJ,GACrE,CAEA,IAAcswX,cAA2B,CACrC,OAAO,KAAK5iD,SAAS,EACzB,CAEA,IAAcqwC,gBAA0B,CACpC,MAAO,CAAC,CAAC,KAAKp0a,QAAQo0a,cAC1B,CAEA,IAAcyS,YAAsB,CAChC,OAAO,KAAK7mb,QAAQunb,aAAatgX,YAAcvkB,GAAUh2H,GAC7D,CAEA,IAAcs6f,qBAA2C,CACrD,OAAO,KAAKhnb,QAAQgnb,qBAAuB7hY,GAAoBgqD,IACnE,CAEA,IAAc06U,YAAwB,CAClC,OAAO,KAAK7pb,QAAQunb,aAAatgX,WAAavkB,GAAUg8J,MAC5D,CAEA,IAAchE,aAA2B,CACrC,OACK,KAAK16M,QAAQg4M,gBACRgO,GAAav5S,IAAI,KAAKuzF,QAAQg4M,eAAe,EAC7C,OAASgO,GAAav5S,IAAI,KAAK61U,sBAAsB,CAEnE,CAEA,IAAcr6S,WAAkB,CAC5B,OAAO,KAAK67b,iBAAiBljT,SAAW,CAC5C,CAEA,IAAc14I,SAAgB,CAC1B,OAAO,KAAK47b,iBAAiBhjT,SAAW,CAC5C,CAEA,IAAc8iT,gBAAiC,CAC3C,OAAOF,GAAyB,KAAK1jY,QAAS,GAClD,CAEA,IAAc20a,0BAA4C,CACtD,IAAMH,EAA8B,CAAC7vX,GAAckiK,IAAI,EAOvD,OALI,KAAKiyL,eAAenhC,oBAAsB,GAC1C68D,EAAW1kgB,KAAK60I,GAAc89B,MAAM,EAEpC,KAAKygT,aAAap0d,OAAS,GAAG0lgB,EAAW1kgB,KAAK60I,GAAct1F,MAAM,EAE/Dmld,CACX,CAEA,IAAcsS,0BAAqD,CAC/D,OAAO,IAAIxC,GAAyB,CAChC5pO,YAAa,KAAKA,YAClBgtO,kBAAmB,KAAK1nb,QAAQ0nb,kBAChC9iO,SACI,KAAKg/K,iBAAmB1+U,GAAeu9B,OACjC,KAAK01T,WAAWte,qBAChB,KAAKse,WAAWpe,4BAC1B4tD,kBAAmB,KAAK3nb,QAAQ4nb,cACpC,EACJ,CAEA,IAAc9C,gBAA6C,CACvD,OAAOF,GAAkB,KAAKzsC,WAAY,KAAKjV,aAAa,EAAE,CAClE,CAEA4kD,sBACIr3E,EACA/yX,EACmB,CACnB,GAAM,CAAEz1C,YAAWC,UAAS07b,kBAAmB,KACzC,CAAEqkD,6BAA8B,KAAKjob,QACrC,CAAEm5X,wBAAyB,KAAK2K,iBAEhCwF,EAAa5rZ,EAAO29X,oBACpBqpE,EAA8BvrD,EAAqBrqd,OAAS,EAC5D20d,EAAa+gD,IAAc,CAC7B/zE,aACA64B,aACA1F,iBACA8gD,8BACAD,2BAA4BwD,CAChC,GAEMlyE,EAAcC,IAAe,CAC/BvF,WAFoByzB,GAAsBzzB,CAE9B43E,GAAmB53E,EAC/B64B,aACA1F,iBACA8gD,6BACJ,GAEM0F,EAAgB1sc,EAAOm/X,2BAA2Bpwc,IAAIgkc,GACtDj1b,EAAQ4ugB,GAAe39gB,IAAIw7B,GAC3Bse,EAAM6je,GAAe39gB,IAAIy7B,GAEzBmif,EAAW1F,IAAY,CACzBl0E,aACA64B,aACA1F,iBACA8gD,6BACJ,GAUA,MAAO,CACHhnc,SACA+lZ,aACAhzB,aACAsF,cACAz+O,MAdU,KAAKwvT,yBAAyB9ja,OAAOqna,CAc/C/yT,EACA97M,QACA+qC,MACA0qI,WAfe4zV,GACf,KAAKC,eACLrhD,CAaAxyS,EACAllC,MAXU,KAAK06X,WAAW55gB,MAAM42d,CAWhC13U,CACJ,CACJ,CAEAu+X,cAAc9mD,EAAyD,CACnE,GAAM,CACFhod,QACA+qC,MACAm3B,OAAQ,CAAE8tF,cACVg4T,EAKJ,OAFIhod,GAAOnU,QAAUyrJ,QAAavsG,GAAKl/C,QAAUyrJ,OAAkB,GAE5Dm0U,IAAyB,CAAEzrd,QAAO+qC,MAAKilH,WAAU,EAC5D,CAQA++W,sBACI/mD,EAC0B,CAiB1B,OAhBK,KAAK8mD,cAAc9mD,GAKpB,KAAKI,iBAAmB1+U,GAAexnE,QACvC,KAAKspc,sBAAwB7hY,GAAoBrR,KAK1C,CAAC,CAHmB,KAAKi2Y,sBAAsBt9gB,IAClD+2d,EAAO/yB,UAEF+5E,GAAoBh1W,MAAOguT,GAChC,KAAK8mD,cAAc9mD,IAIpB,GAhBiC,EAiB5C,CAEA,IAAcsmD,WAAmC,CAC7C,OAAO,KAAK/lD,SAAShtT,QAASr5F,GAC1B,KAAKo7Z,eAAerhC,oBAAoBz3b,IAAKywb,GACzC,KAAKq3E,sBAAsBr3E,EAAY/yX,IAGnD,CAEA,IAAcqsc,uBAGZ,CACE,OAAOlqgB,IAAI0iH,QAAQ,KAAKunZ,UAAYtmD,GAAWA,EAAO/yB,UAAU,CACpE,CAEA,IAAc+yB,QAA6B,CACvC,OAAO,KAAKsmD,UAAUtyd,OAAQgsa,GAC1B,KAAK+mD,sBAAsB/mD,GAEnC,CAEA,IAAcwmD,YAAuB,CACjC,OAAO,KAAKxmD,OAAOzsT,QAASysT,GAAW,CACnCA,EAAOhod,MAAMnU,MACbm8d,EAAOj9a,IAAIl/C,KACd,EACL,CAEA,IAAc4ihB,iBAAsC,CAChD,OAAOnB,GAAoB,CACvB3wC,WAAY,KAAKA,WACjBrU,iBAAkB,KAAKA,iBACvB34T,QAAS,KAAK44T,QAClB,EACJ,CAEA,IAAcmmD,SAA4B,CACtC,MAAO,CAAC,KAAKjif,UAAW,KAAKC,OAAO,CACxC,CAEA,IAAciif,gBAAmC,CAE7C,OAAOpjX,GAAa,KAAKijX,WAAY,KAAKH,UAAU,GAAKY,CADhB/mY,IAAU,IACM+mY,CAC7D,CAEA7B,eACI7ia,EACA,CACI82Z,UACA6N,UAEQ,CACZ,IAAMl4U,EAAOzsF,EAAO6ia,eAAA,EAKpB,MAJAp2U,GAAK72I,OAASkhd,EACdrqU,EAAKhzG,MAAQkrb,EACbl4U,EAAKm0U,aAAe,KAAK5iD,SAAS,GAClCvxR,EAAK74B,MAAQ,GACN64B,CACX,CAEAi2U,iBACI1ia,EACA,CAAE4ka,UACY,CACd,IAAMn4U,EAAOzsF,EAAO0ia,iBAAA,EAIpB,MAHAj2U,GAAK72I,OAAS,KAAKuud,QACnB13U,EAAKhzG,MAAQmrb,EACbn4U,EAAKm0U,aAAe,KAAKxuC,WAAWzoB,WAC7Bl9Q,CACX,CAEA,IAAcxqF,WAA4B,CACtC,IAAMryF,EAAUytc,GAAsB,KAAKpjY,OAAO,EAClD,GAAIrqE,EAAS,MAAO,CAAEosB,OAAQpsB,CAAQ,EAEtC,GAAM,CAAEqpd,mBAAmB,YAAe,KAAKh/Y,QAK/C,OAJI,KAAKwjY,OAAO10d,SAAW,EAChB,CACHizC,OAAQ,4BAA4Bi9b,GACxC,EACG,CAAEj9b,OAAQ,EAAG,CACxB,CACJ,EC5UM6oe,IAA+C,CACjD,WAAY36E,GACZ,aAAc,CAClB,EAEa46E,GAAyD,EACjExH,EAAS,SAAUuH,KACnBvH,EAAS,UAAWuH,KACpBvH,EAAS,aAAc,CACpB,aACA,aAAc,CAClB,GACCA,EAAS,OAAQ,CACd,WAAYnzE,GACZ,aAAc,EAClB,CACJ,EAgCa46E,IAAqB,IAErBC,IAAyB,CAClC7oY,GAAO,OACPA,GAAO,WACPA,GAAO,KACX,E,s1GChEa8oY,IAAb,KAAaA,C,gCAaR5oZ,E,EAAa+1W,Y,GAIb/1W,E,EAAa0hW,kB,GA2Eb1hW,E,EAAa02W,gB,GAIb12W,E,EAAaqkZ,Y,GAcbrkZ,E,EAAa6oZ,a,GA8Bb7oZ,E,EAAa8gW,c,GAIb9gW,E,EAAaskZ,iB,GAIbtkZ,E,EAAawkZ,a,GAIbxkZ,E,EAAa2hW,U,GAIb3hW,E,EAAaukZ,c,GAIbvkZ,E,EAAa0iZ,gB,GASb1iZ,E,EAAa8oZ,kB,GAQb9oZ,E,EAAqB+oZ,oB,GAOrB/oZ,E,EAAqBs4K,a,GAWrBt4K,E,EAAa2+M,kB,GAWb3+M,E,EAAaggN,kB,GAObhgN,E,EAAa2kZ,e,GAIb3kZ,E,EAAa4+M,c,GAOb5+M,E,EAAawhW,gB,GAoEbxhW,E,EAAagpZ,iB,GAMbhpZ,E,EAAaipZ,kB,GAKbjpZ,E,EAAaokW,Y,GAIbpkW,E,EAAakpZ,iB,GA2BblpZ,E,EAAampZ,mB,GAIbnpZ,E,EAAqBopZ,mB,GASrBppZ,E,EAAaohW,Q,GAqCbphW,E,EAAauyY,0B,GAwBbvyY,E,EAAapa,W,KAvZdhoB,QAEAknb,WACA5kM,kCAAyB77L,GAAgBo0J,kBACzCimC,mBAAqBzrC,GAErB,YAAY,CAAEr1M,WAAiD,CAC3D,KAAKA,QAAUA,EACf,KAAKknb,WAAalnb,EAAQonb,oBAAsB,IAAI1mM,GAAW,IAAI,EACnE17I,EAAe,IAAI,CACvB,CAEA,IAAcmzS,YAAwB,CAClC,OAAO,KAAKn4Y,QAAQ0zC,KACxB,CAEA,IAAcowV,kBAA8B,CACxC,OACI,KAAK9jY,QAAQ8jY,kBACb,KAAKujD,eAAe,KAAKlvC,UAAU,CAE3C,CAEAkvC,eAAe3zY,EAA6B,CAyBxC,OAxBK,KAAKwvV,aAAap0d,SAEvB4kI,EAAQA,EAAM+mV,oBACV,KAAKqe,eAAerhC,mBACxB,EAGA/jU,EAAQjuI,GAAM,KAAKwlhB,WAAW,EACzBn3W,KAAK,CAAE7kJ,KAAM,aAAc,MACxB,KAAKw8f,oCAAoC/3Y,IAE5CogC,KAAK,CAAE7kJ,KAAM,UAAW,GAAI,CAAEk/E,UAC3B,KAAKu9a,gCAAgCh4Y,EAAOvlC,IAE/C6lE,WAAA,EAED,KAAK0yW,kBACLhzY,EAAQA,EAGH2jV,sCAAsC,CAAC,KAAKqvD,eAAgB,GAC5D7mD,+BAA+B,KAAK6mD,eAAe,IAGrDhzY,CACX,CAEA+3Y,oCAA4C/3Y,EAA6B,CAUrE,MARAA,GAAQA,EAAM2jV,sCAAsC,KAAK6L,YAAY,EAErExvV,EAAQA,EAAM2iV,qCAAqC,KAAK6M,YAAY,EAEpE,KAAKA,aAAapid,QAASu1I,IACvB3iB,EAAQA,EAAMmsV,+BAA+BxpU,EACjD,GAEO3iB,CACX,CAEAg4Y,gCACIh4Y,EACAvlC,EACS,CACT,GAAM,CAAE62X,iBAAgBC,gBAAeC,gBAAiB/2X,EAoBxD,MAjBAulC,GAAQA,EAAM2jV,sCAAsC,CAChD2N,EACAC,CACH,GAGDvxV,EAAQA,EACHmsV,+BAA+BoF,GAC/BpF,+BAA+BmF,GAEpCtxV,EAAQqxV,GAAsCrxV,EAAOvlC,EAAM,CACvDs3X,4BAA6B,EACjC,GAGA/xV,EAAQA,EAAMsoV,iCAAiCkJ,GAExCxxV,CACX,CAEA,IAAcolW,gBAAiC,CAC3C,OAAOzV,GAAmB,KAAKrjY,QAAQ5C,SAAS,CACpD,CAEA,IAAcqpb,YAAyB,CACnC,OAAO,KAAKzmb,QAAQymb,YAAc,IAAIP,EAC1C,CAYA,IAAc+E,aAA2B,CACrC,GAAM,CAAEhtC,8BAA+B,KAAKj+Y,QAEtC2rb,EAAS1oD,GAAuB,KAAKjjY,OAAO,EAElD,GAAI,CAACi+Y,EACD,MAAO,CAAEhvd,KAAM,cAAe82b,MAAO4lE,CAAO,EAEhD,IAAMC,EAAkBD,EAAOn0d,OAC1B6+F,GAAS,KAAK8hV,WAAW1re,IAAI4pJ,GAAM2tL,YACxC,EAIA,GAAI2nM,EAAO78gB,SAAW,GAAK88gB,EAAgB98gB,SAAW,EAClD,MAAO,CAAEmgB,KAAM,cAAe82b,MAAO4lE,CAAO,EAGhD,IAAME,EAAiBD,EAAgB,GACjCz9a,EAAO8vY,EAA2Bxxe,IAAIo/gB,GAQ5C,MAPI,CAAC19a,GAGaw9a,EAAO7mX,KAAMzO,GAASA,IAASw1X,CAC7CC,IAAc39a,EAAK62X,eACZ,CAAE/1c,KAAM,cAAe82b,MAAO4lE,CAAO,EAEzC,CAAE18f,KAAM,WAAY82b,MAAO,CAAC53W,EAAK+2X,YAAY,EAAG/2X,MAAK,CAChE,CAEA,IAAc+0X,cAAyB,CACnC,OAAO,KAAK+nD,YAAYllE,KAC5B,CAEA,IAAc2gE,iBAAsC,CAChD,OAAO,KAAK1mb,QAAQ0mb,eACxB,CAEA,IAAcE,aAA0B,CACpC,OAAO,KAAK9iD,iBAAiBr3d,IAAI,KAAKi6gB,eAAe,CACzD,CAEA,IAAc3iD,UAAyB,CACnC,OAAO,KAAKD,iBAAiBjR,WAAW,KAAKqQ,YAAY,CAC7D,CAEA,IAAcyjD,cAA2B,CACrC,OAAO,KAAK5iD,SAAS,EACzB,CAEA,IAAc+gD,gBAA6C,CACvD,IAAM3hD,EACF,KAAK8nD,YAAYh8f,OAAS,WACpB,KAAKg8f,YAAY98a,KAAK62X,eACtB,KAAK9B,aAAa,GAC5B,GAAKC,EACL,OAAOyhD,GAAkB,KAAKzsC,WAAYhV,EAC9C,CAEA,IAAc+nD,kBAA4B,CACtC,OAAO,KAAK1nD,OAAO39V,KAAM29V,GAAWA,EAAOx/I,YAAY,CAC3D,CAMA,IAAsBmnM,oBAA6C,CAC/D,GAAI,KAAKF,YAAYh8f,OAAS,WAC9B,OAAO,KAAK60c,iBAAiBr3d,IACzB,KAAKw+gB,YAAY98a,KAAKg3X,yBAC1B,CACJ,CAEA,IAAsBzqL,aAA2B,CAC7C,IAAMmmC,EAAqB,KAAKyB,uBAC1B5nC,EAAc,KAAK16M,QAAQg4M,iBAAmB6oC,EAIpD,OAAO,KAAK7gP,QAAQ8xa,cAAgB,KAAK9xa,QAAQ+rb,cAC3C/lO,GAAav5S,IAAIo0U,GACjB76B,GAAav5S,IAAIiuS,EAC3B,CAEA,IAAcqmC,kBAA+B,CACzC,OAGI,KAAK/gP,QAAQwnb,0BAGb,KAAKrvC,WAAW1re,IAAI,KAAKi6gB,eAAe,CAEhD,CAEA,IAActkM,kBAA0D,CACpE,OACItqC,GAAiB2vO,QAAQ,KAAKb,YAAY70Y,GAAG,GAC7C,KAAK/xC,QAAQknb,UAErB,CAEA,IAAcH,eAAyB,CACnC,MAAO,CAAC,KAAKH,YAAYhsE,SAC7B,CAEA,IAAc55H,cAAwB,CAElC,OADK,KAAK+lM,cACH,KAAKH,YAAYjrE,2BAA2B91U,KAC9Cx+H,GAAU,CAACsyc,GAAgBtyc,IAFA,EAIpC,CAEA,IAAcu8d,gBAAiC,CAC3C,IAAMooD,EAAetoD,GAAyB,KAAK1jY,QAAS,IAgB5D,OAZIgsb,IAAiB9mY,GAAexnE,QAChC,KAAKo7Z,eAAenhC,oBAAsB,EAEnCzyT,GAAeu9B,OAGtBupW,IAAiB9mY,GAAeu9B,QAChC,KAAKq2T,eAAenhC,sBAAwB,GAC5C,KAAKosB,SAASj1d,OAAS,EAEhBo2I,GAAexnE,OAEnBsuc,CACX,CAEAC,gBACIzxc,EACA0/I,EACiB,CACjB,GAAM,CACF4pQ,mBACA8iD,cACAG,gBACAoE,sBACA,KACEr1f,EAAS0kD,EAAImhY,2BACbM,EAAgBzhY,EAAIshY,mBAAmBH,2BACvCtD,EACFyrB,EAAiBzK,iBAAiB1d,2BAChCusE,EAActB,EAAYjrE,2BAC1B0gC,EACF8uC,GAAoBxvE,2BACxB,OAAOzhP,EAAQl6M,IAAKnR,IAChB,IAAMq9gB,EACF,KAAKtoD,iBAAmB1+U,GAAexnE,OACrC+lZ,EAAayoD,EACb1xc,EAAIu7X,YACHsC,EAAYxpc,GACbu5gB,EAAazuE,GAAgBuuE,EAAYr5gB,EAAM,EAC/Cq5gB,EAAYr5gB,GACZikJ,OACAwkE,EAAQyvT,EACR,KAAKG,WAAWrjM,SAASukM,GACzB8D,EACE1xc,EAAIu3D,IAAIulF,MACRwsQ,EAAiBxE,sBACbjnB,EAAYxpc,EAChB,EACFm1U,EAAeq4J,EACdA,EAAmBxte,GACpB2rE,EAAIwpQ,aACV,MAAO,CACH6kM,QAASruc,EACTipZ,aACAp8d,MAAOyuB,EAAOjnB,GACdipC,KAAMmka,EAAcptc,GACpBu5gB,aACA9wT,QACA0sH,cACJ,CACJ,EACJ,CAEA,IAAconM,iBAAqC,CAC/C,OAAO,KAAKrnD,SAAShtT,QAASv8F,GAC1B,KAAKyxc,gBAAgBzxc,EAAKA,EAAIohY,gBAAgB/4S,MAAM,EAAG,IAE/D,CAEA,IAAcwoX,kBAAsC,CAChD,IAAM7wc,EAAM,KAAKupZ,SAAS,GAC1B,OAAO,KAAKkoD,gBAAgBzxc,EAAKA,EAAIohY,eAAe,CACxD,CAEA,IAAc4qB,YAAyB,CACnC,OAAO,KAAKxmY,QAAQwmY,YAAc,CAAC,CACvC,CAEA,IAAc8kD,iBAAqC,CAC/C,IAAM19S,EACF,KAAKg2P,iBAAmB1+U,GAAeu9B,OACjC,KAAK4oW,iBACL,KAAKD,gBAET3kD,EAGF,EACCvkV,GAAOiqY,QACJ,KAAKvoD,iBAAmB1+U,GAAeu9B,OAChC/uI,GACG,KAAKolc,eAAerhC,oBAAoB7nc,QACpC8jC,EAAK+vb,UACT,EACJ0C,IACTjkV,GAAOuuT,YAAc/8Z,GAAiBA,EAAK+vb,YAC3CvhV,GAAO8+E,OAASttL,GAAiBA,EAAKrsC,OAGtC66I,GAAOxkE,QAAUhqC,GAAiBA,EAAKrsC,KAC5C,EAEA,OAAOk/d,GAAa34P,EAAK,KAAK44P,WAAYC,EAC9C,CAEA,IAAc8kD,mBAA0C,CACpD,MAAO,CAAIR,MAAsB,CACrC,CAEA,IAAsBS,mBAAyC,CAC3D,GAAM,CAAExrb,UAAS06M,cAAa4wO,mBAAoB,KAElD,OAAO5wO,EAAY0xO,qBACftte,GAAOwse,EAAgBtrgB,IAAKwjd,GAAWA,EAAOn8d,KAAK,GACnD,CAAC24F,EAAQ0nb,iBACb,CACJ,CAEA,IAAclkD,QAA8B,CAkCxC,OAjCe,KAAK8nD,gBAAgBtrgB,IAAK8pgB,IACrC,GAAM,CACFzihB,QACAywC,OACAswe,aACA3kD,aACAnsQ,QACAuxT,UACA7kM,gBACA8lM,EAqBJ,MAAOtmD,CAnBHqlD,UACAxhhB,QACAywC,OACAswe,aACA3kD,aACAhzB,WAAYgzB,EACZ4kD,gBAAiBnkD,GAAsBT,GACvCxyS,WAAY4zV,GACR,KAAKC,eACLrhD,GAGJnsQ,MACIA,GACA,KAAKk0T,kBAAkB/+gB,IAAIpF,cAE/B0kJ,MAAO,KAAK06X,WAAW55gB,MAAM42d,GAC7Bz/I,cAEGw/I,CACX,CAEOA,CACX,CAEA,IAAcmxC,0BAA4C,CACtD,IAAM5wC,EAAW,KAAKoU,WAAWtlB,WAAW,KAAKqQ,YAAY,EAoB7D,OAfIa,EAASj1d,OAAS,GAClB,KAAKgqe,eAAenhC,oBAAsB,EAOtC00E,IAHoBxrgB,IACpBkjd,EAAS/jd,IAAK09D,GAAWA,EAAOg7F,SAAS,CAEzC2zW,EAAYzqgB,KAAO,EACZ,CAAC+iI,GAAct1F,MAAM,EAGzB,CAACs1F,GAAc89B,OAAQ99B,GAAct1F,MAAM,EAG/C,CAACs1F,GAAckiK,IAAI,CAC9B,CAEA,IAAc7+L,WAA4B,CAEtC,GAAI,CADW,KAAK+7W,SAAS,GAChB,MAAO,CAAEhib,OAAQ,oBAAqB,EAEnD,IAAMpsB,EAAUytc,GAAsB,KAAKpjY,OAAO,EAClD,GAAIrqE,EAAS,MAAO,CAAEosB,OAAQpsB,CAAQ,EAEtC,GAAM,CAAEqpd,mBAAmB,YAAe,KAAKh/Y,QAE/C,OAAO,KAAK+jY,SAASvuT,MAAOh7F,GAAQA,EAAIkoD,OAAO,EACzC,CACI3gF,OAAQ,4BAA4Bi9b,GACxC,EACA,CAAEj9b,OAAQ,EAAG,CACvB,CACJ,E,s1GCjbMuqe,IAAiB,UACjBC,IAAiB,UAEDC,IAAtB,KAAsBA,C,gCAcjBpqZ,E,EAAa+1W,Y,GAIb/1W,E,EAAa0hW,kB,GA8Db1hW,E,EAAa4kZ,qB,GAIb5kZ,E,EAAa2hW,U,GAIb3hW,E,EAAa8gW,c,GAIb9gW,E,EAAaukZ,c,GAKbvkZ,E,EAAawhW,gB,GAIbxhW,E,EACGgpZ,iB,GAaHhpZ,E,EACGipZ,kB,GAiBHjpZ,E,EACG0nZ,W,GAMH1nZ,E,EAAa6kZ,c,GAIb7kZ,E,EACGqqZ,kB,GAIHrqZ,E,EAAawiL,U,GAMbxiL,E,EAAa0kZ,0B,GAiBb1kZ,E,EAAa02W,gB,GAIb12W,E,EAAaqkZ,Y,GAIbrkZ,E,EAAa6jZ,mB,GAIb7jZ,E,EAAasqZ,gB,GAIbtqZ,E,EAAauyY,0B,GA4BbvyY,E,EAAauqZ,iB,GAwCbvqZ,E,EAAawqZ,W,GAuCbxqZ,E,EAAapa,W,KAtSdhoB,QAQA,YAAY,CAAEA,WAAsC,C,UAChD,KAAKA,QAAUA,EACfglG,EAAe,IAAI,CACvB,CAEA,IAAcmzS,YAAwB,CAClC,OAAO,KAAKn4Y,QAAQ0zC,KACxB,CAEA,IAAcowV,kBAA8B,CACxC,OACI,KAAK9jY,QAAQ8jY,kBACb,KAAKujD,eAAe,KAAKlvC,UAAU,CAE3C,CAEAkvC,eAAe3zY,EAA6B,CAgCxC,MA/BAA,GAAQA,EAAM+mV,oBACV,KAAKqe,eAAerhC,mBACxB,EAGA/jU,EAAQA,EACH2jV,sCAAsC,KAAK6L,YAAY,EACvD7M,qCAAqC,KAAK6M,YAAY,EAEvD,KAAK2pD,8BACL,KAAK3pD,aAAapid,QAASu1I,IACvB3iB,EAAQA,EAAMktV,0BAA0BvqU,EAC5C,GAMA,KAAK2wX,sBAAwB7hY,GAAoB4kE,OACjDr2E,EAAQA,EAAM0iV,oCAAoC,KAAK8M,YAAY,GAGnE,KAAKljY,QAAQo0a,iBACb1gY,EAAQ,KAAKg5Y,eACPh5Y,EAAMspV,sCACF,KAAKkG,aAAa,EACtB,EACAxvV,EAAM0pV,+CACF,KAAK8F,YACT,GAEHxvV,CACX,CAEA4zY,2BAA2B5zY,EAA6B,CAiBpD,OAdI,KAAKszY,sBAAwB7hY,GAAoB4kE,OACjDr2E,EAAQA,EACH2jV,sCAAsC,KAAK6L,YAAY,EACvD7M,qCAAqC,KAAK6M,YAAY,EAEvD,KAAK2pD,8BACL,KAAK3pD,aAAapid,QAASu1I,IACvB3iB,EAAQA,EAAMktV,0BAA0BvqU,EAC5C,GAGJ3iB,EAAQA,EAAM0iV,oCAAoC,KAAK8M,YAAY,GAGhExvV,CACX,CAEA,IAAcszY,qBAA2C,CACrD,OAAO,KAAKhnb,QAAQgnb,qBAAuB7hY,GAAoBgqD,IACnE,CAEA,IAAc40R,UAAyB,CACnC,OAAO,KAAKD,iBAAiBjR,WAAW,KAAKqQ,YAAY,CAC7D,CAEA,IAAcA,cAAyB,CACnC,OAAO,KAAKljY,QAAQkjY,cAAgBD,GAAuB,KAAKjjY,OAAO,CAC3E,CAEA,IAAc2mb,cAA2B,CAErC,OAAO,KAAK5iD,SAAS,EACzB,CAEA,IAAcH,gBAAiC,CAC3C,OAAOF,GAAyB,KAAK1jY,OAAO,CAChD,CAEA,IACIorb,iBAAuD,CACvD,OAAO,KAAKrnD,SACP/jd,IAAK09D,IACK,CACHsmQ,aAActmQ,EAAOsmQ,aACrBy/I,WAAY/lZ,EAAOq4X,YACnB7qS,KAAMxtF,EAAOi/X,SACb5wT,MAAO,KAAK06X,WAAW55gB,MAAM6wE,EAAOq4X,WAAW,CACnD,EACJ,EACClzH,WAAA,CACT,CAEA,IACIwoM,kBAAwD,CACxD,GAAI,CAAC,KAAKtnD,SAASj1d,OAAQ,MAAO,GAElC,GAAM,CAAEk1U,eAAc44H,wBAAyB,KAAKmnB,SAAS,GAC7D,OAAO,KAAK+U,eAAerhC,oBACtBz3b,IAAKywb,IACK,CACHzsH,eACAy/I,WAAYhzB,EACZ43E,gBAAiBnkD,GAAsBzzB,GACvCvlS,KAAM0xS,EAAqBnwc,IAAIgkc,IAAe,GAC9C1kT,MAAO,KAAK06X,WAAW55gB,MAAM4jc,EACjC,EACJ,EACC5tH,WAAA,CACT,CAEA,IACIinM,WAAiD,CACjD,OAAO,KAAK4C,eACN,KAAKrB,iBACL,KAAKD,eACf,CAEA,IAAcnE,cAAuD,CACjE,OAAO,IAAIpngB,IAAI,KAAK2jd,OAAOxjd,IAAKwjd,GAAW,CAACA,EAAOC,WAAYD,CAAO,GAC1E,CAEA,IACIipD,kBAAoD,CACpD,OAAO,KAAKjpD,OAAOzsT,QAASysT,GAAWA,EAAOl7T,MAAM,CACxD,CAEA,IAAcs8I,UAAgC,CAC1C,OAAO,KAAK8nO,eACN,KAAKv0C,WAAWte,qBAChB,KAAKse,WAAWpe,2BAC1B,CAEA,IAAc+sD,0BAAqD,CAC/D,IAAMgG,EAAc,KAAKJ,eACnB,KAAK5zC,eAAenhC,oBACpB,KAAKosB,SAASj1d,OACpB,OAAO,IAAIw1gB,GAAyB,CAChC5pO,aACK,KAAK16M,QAAQg4M,gBACRgO,GAAav5S,IAAI,KAAKuzF,QAAQg4M,eAAe,EAC7C,OACNgO,GAAav5S,IAAIg6I,GAAgBsmY,kBAAkB,EACvDrF,kBAAmB,KAAK1nb,QAAQ0nb,kBAChC9iO,SAAU,KAAKA,SACf+iO,kBAAmB,KAAK3nb,QAAQ4nb,eAChCoF,eAAgBF,CACpB,EACJ,CAEA,IAAch0C,gBAAiC,CAC3C,OAAOzV,GAAmB,KAAKrjY,QAAQ5C,SAAS,CACpD,CAEA,IAAcqpb,YAAyB,CACnC,OAAO,KAAKzmb,QAAQymb,YAAc,IAAIP,EAC1C,CAEA,IAAcD,mBAA6B,CACvC,OAAO,KAAKQ,WAAWJ,gBAC3B,CAEA,IAAcqG,gBAA0B,CACpC,OAAO,KAAK9oD,iBAAmB1+U,GAAeu9B,MAClD,CAEA,IAAckyV,0BAA4C,CACtD,IAAMH,EAA8B,GAE9ByY,EACF,KAAKn0C,eAAerhC,oBAAoB3oc,OAAS,EAC/Co+gB,EAAsB,KAAKhqD,aAAap0d,OAAS,EAEjDq+gB,EAAa,KAAKh1C,WACnBtlB,WAAW,KAAKqQ,YAAY,EAC5Bljd,IAAK09D,GAAWA,EAAOg7F,SAAS,EAC/B00W,EAAmB,IAAIvsgB,IAAIssgB,GAAYvrgB,KAAO,EAC9CyrgB,EAAoBF,EAAWjrZ,SAAS,KAc9C,OAXK,CAAC,KAAKwqZ,gBAAkB,CAACO,GACzB,KAAKP,gBAAkB,CAACQ,IAEzB1Y,EAAW1kgB,KAAK60I,GAAckiK,IAAI,EAElComO,GAA+B,CAACG,GAChC5Y,EAAW1kgB,KAAK60I,GAAc89B,MAAM,EAEpCyqW,GAAuB,CAACG,GACxB7Y,EAAW1kgB,KAAK60I,GAAct1F,MAAM,EAEjCmld,CACX,CAEA,IAAcmY,iBAAoD,CAC9D,OAAO,KAAK7C,UACPtyd,OAAQgsa,GAAWA,EAAOt4T,KAAKp8J,OAAS,GAExCkR,IAAKwjd,IACF,GAAM,CAAEx/I,eAAcy/I,aAAYv4T,QAASs4T,EAErCl7T,EAAS4C,EAAKlrJ,IAAK2tK,IACrB,IAAM2/V,EACF3/V,EAAItmL,MAAQ,EAAIilhB,IAAiBC,IAC/Bz0e,EAAO61I,EAAI8xR,aACjB,MAAO,CACHzqX,SAAUl9C,EACJA,OACN8mc,cAAe,KAAK+nC,aAAa/oE,WAAW9la,GAC5CzwC,MAAOsmL,EAAItmL,MACXkmhB,YAAa,EACbC,aACI,KAAKX,8BACLjzE,GAA2BjsR,EAAItmL,KAAK,GACpC,CAACuyc,GAA2BjsR,EAAI+xR,aAAa,EAEjDpoP,MAAO,KAAKm2T,yBACNH,EACAx6X,MACV,CACJ,GAEA,MAAO,CACH2wU,aACAz/I,eACA17K,SACAolX,WAAYplX,EAAOkN,MAAOzT,GAAUA,EAAM16J,QAAU,GACpDiwN,MAAO,KAAKwvT,yBAAyB9ja,OAAOygX,GAC5C13U,MAAOy3U,EAAOz3U,MACds8X,gBAAiB7kD,EAAO6kD,eAC5B,CACJ,EACR,CAEA,IAAcuE,WAAsB,CAChC,IAAIe,EAAQ,EACZ,OAAO,KAAKnqD,OAAOxjd,IAAKwjd,IACpB,IAAMvlP,EAAYr3E,GAAO48T,EAAOl7T,MAAM,EACtC,GAAI,CAAC21E,EAAW,MAAO,GAEvB,IAAM1/K,EAAI0/K,EAAU52O,MAAQ42O,EAAUsvS,YAChCK,EAAUD,GAASpvd,EAAIovd,GAAS,EAEtC,MADAA,GAAQpvd,EACDqvd,CACX,EACJ,CAEAnF,iBAAiB1ia,EAAoC,CACjD,IAAMysF,EAAOzsF,EAAO0ia,iBAAA,EAUpB,OAPAj2U,EAAKk2U,mCACD,KAAK5kD,iBAAiBvJ,cAAc,KAAK2I,YAAY,GAGzD1wR,EAAKm0U,aAAe,KAAKxuC,WAAWzoB,WACpCl9Q,EAAKm2U,oBAAsB,GAEpBn2U,CACX,CAEAo2U,eAAe7ia,EAAkC,CAC7C,IAAMysF,EAAOzsF,EAAO6ia,eAAA,EAQpB,OALI,KAAK5ob,QAAQo0a,eAAgB5hU,EAAK72I,OAAS,CAAC,EAAG,GAAG,EACjD62I,EAAKk2U,mCAAmC,KAAK7L,OAAO,EAEzDrqU,EAAKm0U,aAAe,KAAK5iD,SAAS,GAE3BvxR,CACX,CAEA,IAAcxqF,WAA4B,CACtC,IAAMryF,EAAUytc,GAAsB,KAAKpjY,OAAO,EAClD,GAAIrqE,EAAS,MAAO,CAAEosB,OAAQpsB,CAAQ,EAEtC,GAAM,CAAEqpd,mBAAmB,YAAe,KAAKh/Y,QAEzC,CAAEkjY,gBAAiB,KAQzB,OAPKA,EAAap0d,OACb,KAAK69gB,gBAAgB79gB,OAIrB,KAAK29gB,iBAAiB39gB,OAEpB,CAAEizC,OAAQ,EAAG,EADT,CAAEA,OAAQ,oBAAqB,EAJ/B,CACHA,OAAQ,4BAA4Bi9b,GACxC,EAJ6B,CAAEj9b,OAAQ,kBAAmB,CAQlE,CACJ,EC5Ua8re,IACT,IAEAC,EAAU,SAAS,EAAQ,IAAgB,CAClCC,GACLvqD,EAAO,OAAO,SAAS,EAAO,IAAe,CACzC,IAAMwqD,EACFF,EAAUC,EAAc,EAAE,CAAC,OAAOE,GACtC,EAAM,YACFD,EAAkB,MAAQA,EAAkB,WACpD,CAAC,CACL,CAAC,EACMF,GAIEI,IAGT,IAEAJ,EAAU,SAAS,EAAQ,IAAgB,CAClCC,GACLvqD,EAAO,OAAO,SAAS,EAAO,IAAe,CACzC,IAAM2qD,EAAqBL,EACtB,MAAM,EAAGC,CAAW,CAAC,CACrB,IAAK,GAAM/ue,EAAE,OAAOive,EAAW,EAC9BD,EACFjsX,EAAM,MAAQ,EACRosX,EAAmB,SAAU,GAAM1ggB,EAAE,MAAQ,CAAC,EAC9C0ggB,EAAmB,SAAU,GAAM1ggB,EAAE,OAAS,CAAC,EACzD,EAAM,YAAcuggB,EACdA,EAAkB,MAAQA,EAAkB,YAC5C,CACV,CAAC,CACL,CAAC,EACMF,GAWEM,IAGT,EACA,EAA4C,CAAC,IACb,CAChC,IAAIC,EAAmB5hX,GACnBsN,GACI+zW,EACK,QAAS,GAAWtqD,EAAO,MAAM,CAAC,CAClC,IAAK,GAAUzhU,EAAM,QAAQ,CACtC,CACJ,EAQA,OANIj0J,EAAQ,uBAAyBynK,IAAiB84W,CAAgB,IAClE,EAAmBvghB,EAAQ,WAAW,wBAClCughB,CACJ,GAGGP,EAAU,IAAK,GAAW,CAC7B,IAAMQ,EAAmBlrW,GAAQogT,EAAO,OAAQ,UAAU,EAC1D,MAAO,CACH,GAAGA,EACH,OAAQ6qD,EAAiB,IAAK,GAAa,CACvC,IAAMtsX,EAAQusX,EAAiBt5b,GACzB3tF,EAAQ06J,GAAO,OAAS,EAE9B,OAAOqP,GAAoB,CACvB,KAFSrP,GAAO,MAAQ,EAGxB,WACA,QACA,YAAa,EACb,cAAeA,GAAO,cACtB,QAAS,CAACA,EACV,aAAcA,GAAO,aACrB,MAAOA,GAAO,KAClB,CAAC,CACL,CAAC,CACL,CACJ,CAAC,CACL,EAEA,SAAgBwsX,GACZ,EACA,EACiC,CAEjC,GAAIpyN,EAAG,YAAc,CAACqyN,EAAG,WAAY,OAAOA,EAC5C,GAAIA,EAAG,YAAc,CAACryN,EAAG,WAAY,OAAOA,EAG5C,IAAMsyN,EAASrxM,GAAOjhB,EAAG,MAAM,CAAC,EAAE,OAAS,EACrCuyN,EAAStxM,GAAOoxM,EAAG,MAAM,CAAC,EAAE,OAAS,EAC3C,GAAIC,EAASC,EAAQ,OAAOvyN,EAC5B,GAAIuyN,EAASD,EAAQ,OAAOD,EAG5B,IAAMG,EAAQC,GAAQzyN,EAAG,OAAS,GAAM1uS,EAAE,KAAK,CAAC,EAAE,OAAS,EACrDohgB,EAAQD,GAAQJ,EAAG,OAAS,GAAM/ggB,EAAE,KAAK,CAAC,EAAE,OAAS,EAC3D,GAAIkhgB,EAAQE,EAAO,OAAO1yN,EAC1B,GAAI0yN,EAAQF,EAAO,OAAOH,EAG1B,IAAMM,EAAQ/mT,GAAQo0F,EAAG,OAAS,GAAM1uS,EAAE,KAAK,EACzCshgB,EAAQhnT,GAAQymT,EAAG,OAAS,GAAM/ggB,EAAE,KAAK,EAC/C,GAAIqhgB,EAAQC,EAAO,OAAO5yN,EAC1B,GAAI4yN,EAAQD,EAAO,OAAON,CAG9B,CAEA,SAAgBQ,IACZ,EACmB,CACnB,MAAO,CAAE,cAAe,GAAM,WAAY5J,EAAW,OAAQ,CACjE,CAEA,SAAS6J,IACL,EACA,EACK,CACL,GAAM,CAAE,iBAAgB,gBAAiB/J,EACzC,MAAO,CACH,EAAGG,EAAe,MAAMtjX,EAAM,QAAQ,EACtC,EAAGujX,EAAa,MAAMvjX,EAAM,MAAQA,EAAM,WAAW,CACzD,CACJ,CAIA,SAASmtX,IACL,EACA,EACO,CACP,GAAM,CAAE,iBAAgB,gBAAiBhK,EAEzC,GAAI1hD,EAAO,OAAO,OAAS,EACvB,OAAOA,EAAO,OAAO,IAAK,GACtByrD,IAAsBltX,EAAOmjX,CAAQ,CACzC,EACG,GAAI1hD,EAAO,OAAO,SAAW,EAAG,CASnC,IAAMzhU,EAAQyhU,EAAO,OAAO,GACtBjla,EAAI+md,EAAa,MAAMvjX,EAAM,MAAQA,EAAM,WAAW,EAI5D,GAFIsjX,EAAe,OAAO,KAAOA,EAAe,OAAO,GAInD,MAAO,CACH,CAAE,EAAGA,EAAe,MAAM,GAAI,GAAE,EAChC,CAAE,EAAGA,EAAe,MAAM,GAAI,GAAE,CACpC,EACG,CAEH,IAAM8J,EAAQ,KAAK,IACf9J,EAAe,MAAMtjX,EAAM,SAAW,EAAG,EACzCsjX,EAAe,MAAM,EACzB,EACM+J,EAAS,KAAK,IAChB/J,EAAe,MAAMtjX,EAAM,SAAW,EAAG,EACzCsjX,EAAe,MAAM,EACzB,EAEA,MAAO,CACH,CAAE,EAAG8J,EAAO,GAAE,EACd,CAAE,EAAGC,EAAQ,GAAE,CACnB,CACJ,CACJ,CAAO,MAAO,CAAC,CACnB,CAGA,SAASC,IACL,EACA,EACA,EACO,CACP,IAAMC,EAAYpK,EAAS,aAAa,MAAM,GACxCqK,EAAsBC,GAAoB,CAC5C,CAAE,EAAGrK,EAAa,EAAE,CAAC,EAAG,EAAGmK,CAAU,EACrC,CAAE,EAAGzoX,GAAoBs+W,CAAY,CAAC,CAAC,EAAG,EAAGmK,CAAU,CAC3D,EACA,MAAO,CAAC,GAAGnK,EAAc,GAAGoK,EAAW,WAAW,CAAC,CACvD,CAEA,SAAgBE,IACZ,EACA,EAC+B,CAC/B,IAAMC,EAAclsD,EAAO,OAAQ,GAAW,CAACA,EAAO,UAAU,EAC1DsiD,EAAgD,CAAC,EAEvD,IAAK,IAAIj3gB,EAAQ,EAAGA,EAAQ6ghB,EAAY,OAAQ,IAAS,CACrD,IAAMlsD,EAASksD,EAAY7ghB,GACrBs2gB,EAAe+J,IAAuB1rD,EAAQ0hD,CAAQ,EACtDsK,EAAmB1J,EAAaj3gB,EAAQ,EAAE,EAAE,aAC5C8ghB,EAAaN,IACflK,EACAqK,EACAtK,CACJ,EACAY,EAAa,KAAK,CAAE,GAAGtiD,EAAQ,eAAc,YAAW,CAAC,CAC7D,CAEA,OAAOsiD,CACX,CAEA,SAAgB8J,IACZ,EACA,EACuC,CACvC,GAAM,CAAE,iBAAgB,gBAAiB1K,EACnC/iC,GAAYkjC,EAAe,WAAa,GAAK,GAEnD,OAAO7hD,EAAO,IAAK,IAAY,CAC3B,GAAGA,EACH,aAAcA,EAAO,OAAO,IAAK,GAAQ,CACrC,IAAMp1d,EAAIi3gB,EAAe,MAAMwK,EAAI,QAAQ,EAAI1tC,EAAW,EACpD/1T,EAAKk5V,EAAa,MAAMuK,EAAI,WAAW,EACvCxjW,EAAKi5V,EAAa,MAAMuK,EAAI,MAAQA,EAAI,WAAW,EACnDtxd,EAAI,KAAK,IAAI6tH,EAAIC,CAAE,EACnByjW,EAAY,KAAK,IAAIzjW,EAAKD,CAAE,EAClC,MAAO,CAAE,GAAGyjW,EAAK,IAAG,IAAG,WAAU,WAAU,CAC/C,CAAC,CACL,EAAE,CACN,C,s1GChQaE,IAAb,cACYvD,I,gCAUPpqZ,E,EAAaqrZ,0B,GAIbrrZ,E,EAAaohW,Q,GAIbphW,E,EAAay6Y,S,KAfd,YAAYtpgB,EAAkC,CAC1C,MAAMA,GACNyxL,EAAe,IAAI,CACvB,CAEA6nV,wCAA+B,IAE/B,IAAcY,0BAAoC,CAC9C,MAAO,EACX,CAEA,IAAcjqD,QAA2C,CACrD,OAAOqqD,IAAYO,GAA0B,KAAKzB,eAAe,EACrE,CAEA,IAAc9P,SAA4B,CAItC,MAAO,CAAC,EAAG/9d,GAHK,KAAK2te,iBAAiBzsgB,IACjC+hJ,GAAUA,EAAM16J,MAAQ06J,EAAMwrX,WAElBnjW,IAAY,CAAC,CAClC,CACJ,E,s1GCRa4lW,IAAb,cACYxD,I,gCAYPpqZ,E,EACG6tZ,0C,GAuBH7tZ,E,EAAaohW,Q,GAMbphW,E,EAAa8tZ,S,GASb9tZ,E,EAAaqrZ,0B,GAYbrrZ,E,EAAaggN,kB,GAIbhgN,E,EAAay6Y,S,KAhEd,YAAYtpgB,EAAkC,CAC1C,MAAMA,GACNyxL,EAAe,IAAI,CACvB,CAEA6nV,wCAA+B,IAE/BvqM,uBAAyB77L,GAAgBsmY,mBAEzC,IACIkD,0CAAoE,CAIpE,GAAM,CAAEvgE,cAAe,KAAKoU,iBACtBqsD,EAAazgE,EAAW39U,IAAI9iH,KAC5BmhgB,EACFD,IAAen7X,GAAgBkQ,KAC/BirX,IAAen7X,GAAgBgP,KAYnC,OATI0rT,aAAsBrS,IACW,CAAC+yE,EAE3BhC,GAA0B,KAAKzB,gBAAiB,CACnD0D,sBAAuB,GACvB3gE,YACJ,GAGG0+D,GAA0B,KAAKzB,eAAe,CACzD,CAEA,IAAcnpD,QAA2C,CACrD,OAAO0qD,IACH,KAAK+B,wCACT,CACJ,CAEA,IAAcC,SAAoB,CAC9B,OAAOpxe,GACH,KAAKmxe,yCAAyCl5W,QAAS/3H,GACnDA,EAAEspH,OAAOtoJ,IAAKyN,GAAMA,EAAEunE,QAAQ,GAG1C,CAGA,IAAcy4b,0BAAoC,CAK9C,OAHI,KAAKztb,QAAQytb,yBAAiC,GAI9C,KAAK3D,UAAUh7gB,SAAW,GAC1B,KAAKg7gB,UAAU,EAAE,CAAC5+W,KAAKrlC,KAAM8nD,GAAQA,EAAItmL,MAAQ,IACjD,KAAKyihB,UAAU,EAAE,CAAC5+W,KAAKrlC,KAAM8nD,GAAQA,EAAItmL,MAAQ,EAEzD,CAEA,IAAc+6U,kBAA0D,CACpE,OAAO,KAAKpiP,QAAQknb,UACxB,CAEA,IAAcrK,SAA4B,CACtC,IAAMzyV,EAAU,KAAKqiW,iBAAiBzsgB,IACjC+hJ,GAAUA,EAAM16J,MAAQ06J,EAAMwrX,WACnC,EACA,MAAO,CAACzue,GAAM,CAAC,EAAMsrI,IAAQ,IAAK,EAAGtrI,GAAM,CAAC,EAAMsrI,IAAQ,IAAK,CAAC,CACpE,CACJ,ECzFakmW,IAAkD,EAC1DjN,EAAS,SAAU,CAAE,QAAS,CAAE,GAChCA,EAAS,UAAW,CAAE,QAAS,CAAE,GACjCA,EAAS,aAAc,CAAE,QAAS,CAAE,GACpCA,EAAS,OAAQ,CAAE,QAASnzE,EAA2B,CAC5D,EA4CaqgF,IAAiC,CAC1CruY,GAAO,OACPA,GAAO,WACPA,GAAO,MACPA,GAAO,MACX,E,s1GCtBasuY,IAAb,KAAaA,C,gCAQRpuZ,E,EAAa+1W,Y,GAIb/1W,E,EAAa0hW,kB,GAyEb1hW,E,EAAa02W,gB,GAIb12W,E,EAAaqkZ,Y,GAIbrkZ,E,EAAa6jZ,mB,GAIb7jZ,E,EAAa4kZ,qB,GAIb5kZ,E,EAAa8gW,c,GAIb9gW,E,EAAa2hW,U,GAIb3hW,E,EAAa6nZ,iB,GAQb7nZ,E,EAAaukZ,c,GAIbvkZ,E,EAAaquZ,gB,GAIbruZ,E,EAAaikW,Y,GAObjkW,E,EAAaokW,Y,GAIbpkW,E,EAAas4K,a,GAQbt4K,E,EAAa0kZ,0B,GAWb1kZ,E,EAAauqZ,iB,GAuBbvqZ,E,EAAaohW,Q,GAMbphW,E,EAAa8oC,M,GAkCb9oC,E,EAAaukW,Y,GAgBbvkW,E,EAAampZ,mB,GAIbnpZ,E,EAAauyY,0B,GAQbvyY,E,EAAapa,W,KArPdhoB,QAEA,YAAY,CAAEA,WAAwD,C,UAClE,KAAKA,QAAUA,EACfglG,EAAe,IAAI,CACvB,CAEA,IAAcmzS,YAAwB,CAClC,OAAO,KAAKn4Y,QAAQ0zC,KACxB,CAEA,IAAcowV,kBAA8B,CACxC,OACI,KAAK9jY,QAAQ8jY,kBACb,KAAKujD,eAAe,KAAKlvC,UAAU,CAE3C,CAEAkvC,eAAe3zY,EAA6B,CA6BxC,OA5BK,KAAKwvV,aAAap0d,SAEvB4kI,EAAQA,EAAM+mV,oBACV,KAAKqe,eAAerhC,mBACxB,EAGA/jU,EAAQA,EAAM2jV,sCAAsC,KAAK6L,YAAY,EAErExvV,EAAQA,EAAM2iV,qCAAqC,KAAK6M,YAAY,EAEpE,KAAKA,aAAapid,QAASu1I,IACvB3iB,EAAQA,EAAMmsV,+BAA+BxpU,EACjD,GAEA3iB,EAAQ,KAAKg9Y,yBAAyBh9Y,GAElC,KAAK1zC,QAAQo0a,iBACb1gY,EAAQA,EACH0jV,oCAAoC,KAAK8L,YAAY,EACrD9F,+CACG,KAAK8F,YACT,EAGJxvV,EAAQ,KAAKg9Y,yBAAyBh9Y,KAGnCA,CACX,CAEA4zY,2BAA2B5zY,EAA6B,CAQpD,MAPAA,GAAQA,EACH2jV,sCAAsC,KAAK6L,YAAY,EACvD9L,oCAAoC,KAAK8L,YAAY,EACrD7M,qCAAqC,KAAK6M,YAAY,EAE3DxvV,EAAQ,KAAKg9Y,yBAAyBh9Y,GAE/BA,CACX,CAEAg9Y,yBAAiCh9Y,EAA6B,CAoB1D,OAVI,KAAKszY,sBAAwB7hY,GAAoBrR,MAChD,KAAK9zC,QAAQo0a,gBACV,KAAK4S,sBAAwB7hY,GAAoB4kE,KAI9Cr2E,EAAM0iV,oCAAoC,KAAK8M,YAAY,EAI/DxvV,CACX,CAEA,IAAcolW,gBAAiC,CAC3C,OAAOzV,GAAmB,KAAKrjY,QAAQ5C,SAAS,CACpD,CAEA,IAAcqpb,YAAyB,CACnC,OAAO,KAAKzmb,QAAQymb,YAAc,IAAIP,EAC1C,CAEA,IAAcD,mBAA6B,CACvC,OAAO,KAAKQ,WAAWJ,gBAC3B,CAEA,IAAcW,qBAA2C,CACrD,OAAO,KAAKhnb,QAAQgnb,qBAAuB7hY,GAAoBgqD,IACnE,CAEA,IAAc+zR,cAAyB,CACnC,OAAO,KAAKljY,QAAQkjY,cAAgBD,GAAuB,KAAKjjY,OAAO,CAC3E,CAEA,IAAc+jY,UAAyB,CACnC,OAAO,KAAKD,iBAAiBjR,WAAW,KAAKqQ,YAAY,CAC7D,CAEA,IAAc+mD,iBAAsC,CAChD,OAAOnB,GAAoB,CACvB3wC,WAAY,KAAKA,WACjBrU,iBAAkB,KAAKA,iBACvB34T,QAAS,KAAK44T,QAClB,EACJ,CAEA,IAAc4iD,cAA2B,CACrC,OAAO,KAAK5iD,SAAS,EACzB,CAEA,IAAc0sD,gBAAqC,CAC/C,OAAO,KAAKjqD,WAAWiqD,cAC3B,CAEA,IAAcpqD,YAAqC,CAC/C,GAAI,CAAC,KAAKoqD,eAAgB,OAC1B,IAAMpqD,EAAa,KAAKvC,iBAAiBr3d,IAAI,KAAKgkhB,cAAc,EAChE,GAAIpqD,GAAc,CAACA,EAAWzrB,UAAW,OAAOyrB,CAEpD,CAEA,IAAcG,YAAyB,CACnC,OAAO,KAAKxmY,QAAQwmY,YAAc,CAAC,CACvC,CAEA,IAAc9rL,aAA2B,CACrC,OACK,KAAK16M,QAAQg4M,gBACRgO,GAAav5S,IAAI,KAAKuzF,QAAQg4M,eAAe,EAC7C,OAASgO,GAAav5S,IAAIg6I,GAAgB,gBAAgB,CAExE,CAEA,IAAcqgY,0BAAqD,CAC/D,IAAMgG,EAAc,KAAK/oD,SAASj1d,OAClC,OAAO,IAAIw1gB,GAAyB,CAChC5pO,YAAa,KAAKA,YAClBgtO,kBAAmB,KAAK1nb,QAAQ0nb,kBAChC9iO,SAAU,KAAKuzL,WAAWpe,4BAC1B4tD,kBAAmB,KAAK3nb,QAAQ4nb,eAChCoF,eAAgBF,CACpB,EACJ,CAEA,IAAcH,iBAA+C,CACzD,OACI,KAAK5oD,SACA/jd,IAAKw6D,IACK,CACHipZ,WAAYjpZ,EAAIu7X,YAChB7rR,WAAY1vG,EAAI67E,KAChBihE,MAAO,KAAKwvT,yBAAyB9ja,OACjCxoC,EAAIu7X,WACR,EACAztS,OAAQ9tF,EAAImiY,SAAS38b,IAAK2tK,IAAS,CAC/B71I,KAAM61I,EAAI8xR,aACVzqX,SAAU24F,EAAI8iR,WACdppc,MAAOsmL,EAAItmL,MACXkmhB,YAAa,CACjB,GACJ,EACJ,EAEC/1d,OAAQgsa,GAAWA,EAAOl7T,OAAOx5J,OAAS,EAEvD,CAEA,IAAc00d,QAA+C,CACzD,OAAO0qD,IACHE,GAA0B,KAAKzB,eAAe,EAEtD,CAEA,IAAczhX,MAAkC,CA+B5C,OA9BoB,KAAK4tU,eAAerhC,oBAEnCz3b,IAAKywb,IACF,IAAIkgF,EAAa,EACXC,EAAOrqX,GACT,KAAKi9T,OAAOxjd,IAAKwjd,IACb,IAAMzhU,EAAQyhU,EAAOl7T,OAAOxD,KACvB/C,GAAUA,EAAM/sE,WAAay7W,GAElC,GAAK1uS,EAEL,MADA4uX,IAAc5uX,EAAM16J,MACb,CACH06J,QACAmoB,WAAYs5S,EAAOt5S,WACnBotC,MAAOksQ,EAAOlsQ,MACdmsQ,WAAYD,EAAOC,UACvB,CACJ,IAGJ,MAAO,CACHhzB,aACA43E,gBAAiBnkD,GAAsBzzB,GACvCmgF,OACAD,aACA5kY,MAAO,KAAK06X,WAAW55gB,MAAM4jc,EACjC,CACJ,GACCj5Y,OAAQm2H,GAAQA,EAAIijW,KAAK9hhB,MAEvBo8J,CACX,CAEA,IAAcy7T,YAAwC,CAClD,IAAMF,EAGF,EACCvkV,GAAOiqY,QAAShmD,IAChBjkV,GAAOuuT,YAAc9iR,GAAgBA,EAAI8iR,YACzCvuT,GAAOxkE,QAAS0oZ,IACb,KAAKC,WACJ14S,GAAQA,EAAI8iR,UACjB,GACCvuT,GAAO8+E,OAASrzC,GAAgBA,EAAIgjW,UACzC,EACA,OAAOpqD,GAAa,KAAKr7T,KAAM,KAAKs7T,WAAYC,EACpD,CAEA,IAAc8kD,mBAAiD,CAC3D,MAAO,CAAIgF,MAA8B,CAC7C,CAEA,IAAc5b,0BAA4C,CACtD,IAAMH,EAAa,CAAC7vX,GAAckiK,IAAI,EAItC,OAFI,KAAKq8K,aAAap0d,OAAS,GAAG0lgB,EAAW1kgB,KAAK60I,GAAct1F,MAAM,EAE/Dmld,CACX,CAEA,IAAcxsZ,WAA4B,CAGtC,GAAI,CAFW,KAAK+7W,SAAS,GAEhB,MAAO,CAAEhib,OAAQ,oBAAqB,EAEnD,IAAMpsB,EAAUytc,GAAsB,KAAKpjY,OAAO,EAClD,GAAIrqE,EAAS,MAAO,CAAEosB,OAAQpsB,CAAQ,EAEtC,GAAM,CAAEqpd,mBAAmB,YAAe,KAAKh/Y,QAG/C,OAAO,KAAK+jY,SAASvuT,MAAOh7F,GAAQA,EAAIkoD,OAAO,EACzC,CACI3gF,OAAQ,4BAA4Bi9b,GACxC,EACA,CAAEj9b,OAAQ,EAAG,CACvB,CACJ,ECvOa8ue,IAA8B,UAG9BC,IAAgC,GAChCC,IAAqC,GAErCC,IAAiC,GAKjCC,GAA0C,KCvEjDC,GAAc,CAChB,EACA,EACA,EACA,EACA,GACA,GACA,GACA,IACA,IACA,IACA,IACJ,EAIMC,IAAgB,CAClB,EACA,EACA,GACA,GACA,GACA,IACA,IACA,IACA,IACJ,EAGMC,IAAY,CACd,EACA,EACA,EACA,EACJ,EAIMC,IAAa,CACf,EACA,EACJ,EAEMC,GAAe,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,EAcrD,SAASC,GAAY,EAAe,EAA0B,CAC1D,MAAO,CAAE,QAAO,SAAU,EAAG,MAAOptX,GAAU98J,EAAO,CAAE,QAAO,CAAC,CAAE,CACrE,CAGA,SAASmqhB,IAAgB,EAA8B,CACnD,IAAM55X,EAAO4L,GAA4Bn8J,CAAK,EAC9C,MAAO,CACH,QACA,WAAYuwJ,EAAK,KAAK,EAAI,GAAKA,EAAK,MAAM,EAC1C,eAAgBA,EAAK,KAAK,IAAM,EAChC,mBAAoBA,EAAK,KAAK,GAAK,CACvC,CACJ,CAGA,IAAM65X,IAAsBtsX,GAAoB,EAAGjT,GAAa,IAAI,EAMpE,SAASw/X,IAAiB,EAAsB,CAC5C,OAAOzygB,EAAO,GAAM,EAAIwygB,IAAsB,CAClD,CAMA,SAASE,IACL,CAAE,SACF,EACkB,CAClB,IAAM9ihB,GAASxH,EAAQqqhB,IAAiBzygB,CAAI,GAAKA,EACjD,OAAO,OAAO,UAAUpQ,CAAK,EAAIA,EAAQ,MAC7C,CAMA,SAAS+ihB,GACL,CAAE,cACF,EACkB,CAClB,IAAM/ihB,EAAQi1J,EAAa7kJ,EAC3B,OAAO,OAAO,UAAUpQ,CAAK,EAAIA,EAAQ,MAC7C,CAMA,SAASgjhB,IACL,EACA,CAAE,SAAQ,kBACA,CACV,IAAMj1I,EAAQk1I,EAAK,IAAK,GAAUtuX,GAA4Bn8J,CAAK,CAAC,CAAC,KAAK,CAAC,EACrE0qhB,EAAa,GACfhihB,IAAM,GAAK6sY,EAAM7sY,KAAO6sY,EAAM7sY,EAAI,GAStC,OAJqB+hhB,EAAK,QAAQ,EAAG,IAAMC,EAAUhihB,CAAC,CAAC,CAAC,CAAC,QACrC+hhB,EAAK,OAAS,EACvBA,EAAK,IAAK,GAAUP,GAAYlqhB,EAAO2qhB,CAAc,CAAC,EAE1DF,EAAK,KAAK,EAAO,IACpBP,GAAYlqhB,EAAO0qhB,EAAUhihB,CAAC,EAAIiihB,EAAiB9iZ,CAAM,CAC7D,CACJ,CAMA,SAAS+iZ,IAAkB,CACvB,QACA,cACA,OACA,eAMqB,CACrB,IAAK,IAAMhzgB,KAAQizgB,EAAO,CACtB,IAAMJ,EAAOK,EAAYlzgB,CAAI,EAC7B,GAAIwiB,EAAOxiB,GAAQmzgB,GAAeN,EAAK,QAAUM,EAC7C,OAAON,CACf,CAEJ,CAGA,SAAgBO,IAAwB,CACpC,WACA,SACA,cACA,cAMuB,CAIvB,OAFIC,GAAY,OAAeC,IAA2B,CAAE,YAAW,CAAC,EAEjE9shB,GAAMg/J,CAAQ,CAAC,CACjB,KAAKvS,GAAa,YACfsgY,IAAkC,CAAE,SAAQ,aAAY,CAAC,CAC7D,CAAC,CACA,KAAKtgY,GAAa,UACfugY,IAAgC,CAAE,SAAQ,aAAY,CAAC,CAC3D,CAAC,CACA,KAAKvgY,GAAa,SACfwgY,IAA+B,CAAE,SAAQ,aAAY,CAAC,CAC1D,CAAC,CACA,KAAKxgY,GAAa,QACfygY,IAA8B,CAAE,SAAQ,aAAY,CAAC,CACzD,CAAC,CACA,WAAW,CACpB,CAOA,SAASC,IAA8B,CACnC,SACA,cACA,SAKuB,CACvB,IAAMz0I,EAAU36O,GAA4B7nG,EAAO,EAAE,EAC/C0iV,EAAU76O,GAA4B7nG,EAAO,EAAE,EAE/Ck3d,EAAax0I,EACd,QAAQ,OAAO,CAAC,CAChB,KAAKF,EAAQ,QAAQ,OAAO,EAAG,OAAO,EAC3C,GAAI00I,GAAc,EAAG,OAErB,IAAMV,EAAe,GAA2B,CAI5C,IAAIW,EAAa30I,EAAQ,KAAK,EAC9B,GAAIl/X,GAAQ,GAAI,CACZ,IAAM8zgB,EAAY9zgB,EAAO,GACzB,EAAa,KAAK,MAAM6zgB,EAAaC,CAAS,EAAIA,CACtD,CAEA,IAAM5gH,EAAShnS,GAAM,IAAI,GAAG2nZ,EAAW,OAAO,EACxCE,EAAoB,GACtBp7X,EAAK,QAAQ,OAAO,CAAC,CAAC,KAAKu6Q,EAAQ,OAAO,EAM9C,OACIvkP,GAJmB,KAAK,KAAKolW,EAAiB70I,CAAO,EAAIl/X,CAIjD,EAHU,KAAK,MAAM+zgB,EAAiB30I,CAAO,EAAIp/X,CAGjC,EAAgB,CAAC,CAAC,CACrC,IAAK,GACF0kJ,GAA4BwuQ,EAAO,IAAIh/Z,EAAI8L,EAAM,OAAO,CAAC,CAC7D,CAAC,CAIA,OAAQ,GAAU5X,GAASs0D,EAAO,IAAMt0D,GAASs0D,EAAO,EAAE,CAEvE,EAEMm2d,EACFG,IAAkB,CACd,QACA,cACA,KAAMY,EACN,aACJ,CAAC,GAEDV,EAAYD,EAAMA,EAAM,OAAS,EAAE,EAWvC,OAVKJ,EAAK,OAKNA,EAAK,MAFU,GACftuX,GAA4Bn8J,CAAK,CAAC,CAAC,MAAM,IAAM,CAC3B,EACbyqhB,EAAK,IAAK,GAAUP,GAAYlqhB,EAAO,MAAM,CAAC,EAIlDwqhB,IAA0BC,EAAM,CACnC,OAAQ,MACR,eAAgB,UACpB,CAAC,EAbiB,MActB,CAMA,SAAgBW,IAAgC,CAC5C,SACA,eAIuB,CACvB,OAAOG,IAA8B,CACjC,SACA,cACA,MAAO1B,EACX,CAAC,CACL,CAMA,SAAgBsB,IAAkC,CAC9C,SACA,eAIuB,CACvB,OAAOI,IAA8B,CACjC,SACA,cACA,MAAOzB,GACX,CAAC,CACL,CAOA,SAAS8B,IAA4B,CACjC,SACA,cACA,SAKuB,CACvB,IAAMC,EAAWv3d,EAAO,GAAKA,EAAO,GACpC,GAAIu3d,GAAY,EAAG,OAEnB,IAAMf,EAAe,GAA2B,CAC5C,IAAM3iV,EAAYkiV,IAAiBzygB,CAAI,EAIvC,OAAO2uK,GAFgB,KAAK,MAAMjyH,EAAO,GAAK6zI,GAAavwL,CAE5C,EADO,KAAK,OAAO08C,EAAO,GAAK6zI,GAAavwL,CAC5B,EAAgB,CAAC,CAAC,CAAC,IAC7C,GAAMuwL,EAAYr8L,EAAI8L,CAC3B,CACJ,EAII6ygB,EAAOG,IAAkB,CACzB,QACA,cACA,KAAMiB,EACN,aACJ,CAAC,EACD,GAAIpB,IAAS,OAAW,CACpB,IAAMqB,EAAeV,IAAgC,CACjD,SACA,aACJ,CAAC,EACD,GAAIU,EAAc,OAAOA,EAIzB,EAAOhB,EAAYD,EAAMA,EAAM,OAAS,EAAE,CAC9C,CACA,GAAKJ,EAAK,OAIV,OAAOD,IAA0BC,EAAM,CACnC,OAAQ,QACR,eAAgB,aACpB,CAAC,CACL,CAOA,SAAgBa,IAA8B,CAC1C,SACA,eAIuB,CACvB,OAAOM,IAA4B,CAC/B,SACA,cACA,MAAO7B,GACX,CAAC,CACL,CAOA,SAAgBsB,IAA+B,CAC3C,SACA,eAIuB,CACvB,OAAOO,IAA4B,CAC/B,SACA,cACA,MAAO5B,GACX,CAAC,CACL,CAEA,SAAgB+B,IAAqB,CACjC,SACA,eAIuB,CACvB,IAAMjB,EAAe,GACjBvkW,GACI,KAAK,KAAKjyH,EAAO,GAAK18C,CAAI,EAC1B,KAAK,MAAM08C,EAAO,GAAK18C,CAAI,EAAI,CACnC,CAAC,CAAC,IAAK,GAAM9L,EAAI8L,CAAI,EAEnB6ygB,EACFR,GAAa,IAAIa,CAAW,CAAC,CAAC,KACzB,GAAcr6f,EAAU,QAAUs6f,CACvC,GAAKD,EAAYb,GAAaA,GAAa,OAAS,EAAE,EAC1D,GAAKQ,EAAK,OAEV,OAAOA,EAAK,IAAK,IAAW,CAAE,QAAO,SAAU,CAAE,EAAE,CACvD,CAMA,SAAgBS,IAA2B,CACvC,cAGW,CACX,OAAO9lX,GAAYsN,GAAOu4W,CAAU,CAAC,CAAC,CAAC,IAAK,IAAW,CACnD,QACA,SAAU,CACd,EAAE,CACN,CAQA,SAAgBe,IAAgC,CAC5C,WACA,cAIa,CACb,OAAO5thB,GAAMg/J,CAAQ,CAAC,CACjB,KAAKvS,GAAa,YACfohY,IAAgC,CAAE,YAAW,CAAC,CAClD,CAAC,CACA,KAAKphY,GAAa,UACfqhY,IAA8B,CAAE,YAAW,CAAC,CAChD,CAAC,CACA,KAAKrhY,GAAa,SACfshY,IAA6B,CAAE,YAAW,CAAC,CAC/C,CAAC,CACA,KAAKthY,GAAa,QACfuhY,IAA4B,CAAE,YAAW,CAAC,CAC9C,CAAC,CACA,WAAW,CACpB,CAQA,SAASC,GACL,EACA,EACY,CACZ,IAAMC,EAAiBlnX,GAAYsN,GAAOu4W,CAAU,CAAC,CAAC,CAAC,IAAId,GAAe,EAEpEoC,EAAY,GACd99f,EAAO,KAAK,CAAE,YAAa,CAAE,QAAO,SAAU,CAAE,EAAE,EAGhD+9f,EAAsB,CAACD,EAASD,CAAc,CAAC,EACrD,GAAIA,EAAe,QAAU,EAAG,OAAOE,EAEvC,IAAK,IAAMC,KAAgBC,EAAiB,CACxC,IAAMC,EAAeL,EAChB,IAAK,IAAW,CAAE,QAAO,MAAOG,EAAazshB,CAAK,CAAE,EAAE,CAAC,CACvD,OACI,GACGo6D,EAAM,QAAU,MACxB,EAGJ,GAAI,IAAa,OAAS,IAGHuyd,EAAa,OAC/B,CAAE,SAAS,IAAMjkhB,IAAM,GAAKlB,EAAQmlhB,EAAajkhB,EAAI,EAAE,CAAC,QAAU,CAElE,GAKDikhB,EAAa,SAAWH,EAAMA,EAAM,OAAS,EAAE,CAAC,SAEpDA,EAAM,KAAKD,EAASI,EAAa,KAAK,CAAE,WAAY3shB,CAAK,CAAC,CAAC,EAIvD2shB,EAAa,SAAW,GAAG,KACnC,CAEA,OAAOH,CACX,CAGA,SAAgBN,IAA8B,CAC1C,cAGa,CACb,OAAOG,GACHpB,EACApB,GAAY,IACP,GAAU,GAAyBU,GAAkBvqhB,EAAO4X,CAAI,CACrE,CACJ,CACJ,CAGA,SAAgBq0gB,IAAgC,CAC5C,cAGa,CACb,OAAOI,GACHpB,EACAnB,IAAc,IACT,GAAU,GAAyBS,GAAkBvqhB,EAAO4X,CAAI,CACrE,CACJ,CACJ,CAOA,SAAgBu0gB,IAA6B,CACzC,cAGa,CACb,OAAOE,GAA0BpB,EAAY,CACzC,GAAGjB,IAAW,IACT,GAAU,GAAyBM,IAAgBtqhB,EAAO4X,CAAI,CACnE,EACA,GAAGiygB,GAAY,IACV,GAAU,GACP7phB,EAAM,mBACAuqhB,GAAkBvqhB,EAAO4X,CAAI,EAC7B,MACd,CACJ,CAAC,CACL,CAOA,SAAgBw0gB,IAA4B,CACxC,cAGa,CACb,OAAOC,GAA0BpB,EAAY,CACzC,GAAGlB,IAAU,IACR,GAAU,GAAyBO,IAAgBtqhB,EAAO4X,CAAI,CACnE,EACA,GAAGiygB,GAAY,IACV,GAAU,GACP7phB,EAAM,eACAuqhB,GAAkBvqhB,EAAO4X,CAAI,EAC7B,MACd,CACJ,CAAC,CACL,CC9kBA,SAAgBg1gB,GACZ,EAC0C,CAC1C,MAAO,YAAaC,GAAcA,EAAW,UAAY,MAC7D,C,s1GCIaC,IAAb,KAAaA,C,gCAgBR/xZ,E,EAAaqqD,U,GAKbrqD,E,EAAagyZ,Y,GAUbhyZ,E,EAAaiyZ,6B,KA9BdnP,SACAv3f,MACAq5c,aAEA,YACIr5c,EACA7f,EACF,C,UACEk3L,EAAe,IAAI,EAEnB,KAAKr3K,MAAQA,EACb,KAAKu3f,SAAWp3gB,EAAQo3gB,SACxB,KAAKl+C,aAAel5d,EAAQk5d,YAChC,CAEA,IAAcv6S,UAAmB,CAC7B,OAAOq6S,GAAc,GAAI,KAAKE,YAAY,CAC9C,CAGA,IAAcotD,YAAqB,CAO/B,OANmC,KAAKzmgB,MAAMk4G,KAAM/3G,GAChDmmgB,GAAoCnmgB,EAGnCwmgB,EAEE,KAAK7nW,SAF4B,CAG5C,CAEA,IAAc4nW,6BAGZ,CAEE,IAAM1kV,EAAa,IAAI9vL,IAMjB00gB,EAAgBz1e,GAClB,KAAKnxB,MAAM6pC,OAAQ1pC,GACfmmgB,GAAoCnmgB,IAEvCA,GAASA,EAAK0mgB,OACnB,EAEA,GAAID,EAAczlhB,SAAW,EAAG,OAAO6gM,EAEvC,GAAM,CAAE01U,iBAAgBI,eAAgB,KAAKP,SACvC,CAACuP,EAAMC,GAAQrP,EAAe1pd,OAC9B8wH,EAAW,KAAKA,SAIhBkoW,EAAc71e,GAChBy1e,EAAc/8d,OACT1pC,GAASA,EAAK0mgB,SAAWC,GAAQ3mgB,EAAK0mgB,SAAWE,GAErD5mgB,GAASA,EAAK0mgB,OACnB,EAGII,EAAgBnP,EAAY59Y,KAEhC,IAAK,IAAI93H,EAAI,EAAGA,EAAI4khB,EAAY7lhB,OAAQiB,IAAK,CACzC,IAAM+d,EAAO6mgB,EAAY5khB,GAEnB3B,EAAIi3gB,EAAewP,MAAM/mgB,EAAK0mgB,OAAO,EAI3C,GAAI,CAAC1mgB,EAAK6rJ,MAAO,CACbi7W,EAAgBlxX,KAAKh1J,IAAIkmhB,EAAexmhB,GACxC,QACJ,CAEA,IAAMy/e,EAAa/hU,EAAOo6J,QAAQp4T,EAAK6rJ,MAAO,CAAE8S,UAAS,GAAGrgG,MAGtD0oc,EACF/khB,EAAI4khB,EAAY7lhB,OAAS,EACnBu2gB,EAAewP,MAAMF,EAAY5khB,EAAI,EAAE,CAACykhB,OAAO,EAC/C/O,EAAYx9Y,MAEhB8sZ,EAAarxX,KAAK/0J,IAAImmhB,EAAWrP,EAAYx9Y,KAAK,EAClD+sZ,EAAYtxX,KAAKh1J,IAAIkmhB,EAAenP,EAAY59Y,IAAI,EAEpDotZ,EAAiBF,EAAa3mhB,EAAI,EAClC8mhB,EAAgB9mhB,EAAI4mhB,EAAY,EAElCnnC,GAAconC,GAEdtlV,EAAWnjM,IAAIshB,EAAK0mgB,QAAS,CACzBpmhB,EAAGA,EAAImhI,EACP4iS,OAAQ,OACZ,GAGAyiH,EAAgBxmhB,EAAImhI,EAAUs+W,EAAat+W,IACpCs+W,GAAcqnC,GAErBvlV,EAAWnjM,IAAIshB,EAAK0mgB,QAAS,CAAEpmhB,EAAGA,EAAImhI,EAAS4iS,OAAQ,KAAM,GAG7DyiH,EAAgBlxX,KAAKh1J,IAAIkmhB,EAAexmhB,GAKhD,CAEA,OAAOuhM,CACX,CACJ,E,i2GChFMwlV,IAAgB,EAGhBC,IAAuB,GAEvBC,KAAe3oW,EAAgB4oW,IAC1B5oW,EAAO6oW,WAAWD,GAGvBE,GAA4B77W,IAC9B,GAAM,CAAEvrK,IAAGmwD,IAAG6tB,QAAOvkB,SAAQ4td,SAAQC,UAAW/7W,EAC1Cg8W,EACFF,IAAWvnY,GAAgBhmB,OACrB,CAAC97C,EAAQ,EACTqpc,IAAWvnY,GAAgBjmB,MACzB,CAAC77C,EACD,EACNwpc,EACFF,IAAWtnY,GAAc2jB,OACnB,CAAClqG,EAAS,EACV6td,IAAWtnY,GAAc4gB,OACvB,CAACnnG,EACD,EACZ,OAAO,IAAIikH,EAAO19K,EAAIunhB,EAAQp3d,EAAIq3d,EAAQxpc,EAAOvkB,EACrD,EAEegud,IAAf,MAAeA,E,+BAsCVzzZ,E,EAAa0zZ,U,GAIb1zZ,E,EAAa2zZ,e,GAIb3zZ,E,EAAa4zZ,a,GAIb5zZ,E,EAAa6zZ,c,GAIb7zZ,E,EAAa41M,M,GAIb51M,E,EAAa8zZ,8B,GAIb9zZ,E,EAAa+zZ,4B,GAIb/zZ,E,EAAag0Z,sB,GAIbh0Z,E,EAAaqqD,U,GAIbrqD,E,EAAuBi0Z,U,GAIvBj0Z,E,EAAqBk0Z,U,GAIrBl0Z,E,EAAa4zY,oB,GAIb5zY,E,EAAa6kC,W,GAQb7kC,E,EAAaykZ,Y,GAIbzkZ,E,EAAau3C,O,GAwEbv3C,E,EAAam0Z,W,GAsCbn0Z,E,EAAqBo0Z,U,GA2BrBp0Z,E,EAAaq0Z,W,GAIbr0Z,E,EAAas0Z,U,GAIbt0Z,E,EAAau0Z,U,GAIbv0Z,E,EAAaw0Z,a,GAKbx0Z,E,EAAqBy0Z,kB,GAiBrBz0Z,E,EAAuB00Z,kB,GAUvB10Z,E,EAAuB20Z,e,GAiCvB30Z,E,EAAqB40Z,W,GAyOrB50Z,E,EAAa60Z,c,GAIb70Z,E,EAAuB80Z,W,GAsBvB90Z,E,EAAa+0Z,e,GAIb/0Z,E,EAAag1Z,e,GAmDbh1Z,E,EAAai1Z,a,KAjnBdtxa,OACAuxa,YAEA37d,OACAgrd,wBAAuC7zX,QACvC61X,oBAAsB,GACtBnpb,MAAoB,CAAC,EAAG,CAAC,EACzB+3b,WAA4CzkY,OAC5C0kY,OAAqC1kY,OAErC,YAAY/sC,EAAoBuxa,EAA2B,CACvDtyV,EAAsD,KAAM,CACxDrpI,OAAQk3H,EAAW/wJ,IACnB6kf,aAAc9zV,EACd81V,oBAAqB91V,EACrBrzF,MAAOqzF,EAAW4kW,OAClBF,WAAY1kW,EACZ2kW,OAAQ3kW,CACZ,GACA,KAAK9sE,OAASA,EACd,KAAKpqD,OAAS,CAACoqD,EAAOpqD,OAAO,GAAIoqD,EAAOpqD,OAAO,EAAE,EACjD,KAAK27d,YAAcA,CACvB,CAeA,IAAcxB,UAAoB,CAC9B,OAAO,KAAK/va,OAAO+va,UAAY,EACnC,CAEA,IAAcC,eAAyB,CACnC,OAAO,KAAKhwa,OAAOgwa,eAAiB,EACxC,CAEA,IAAcC,aAAsB,CAChC,OAAO,KAAKjwa,OAAOiwa,aAAe,CACtC,CAEA,IAAcC,cAAuB,CACjC,OAAO,KAAKlwa,OAAOkwa,cAAgB,EACvC,CAEA,IAAcj+M,MAAgB,CAC1B,OAAO,KAAKjyN,OAAOiyN,MAAQ,EAC/B,CAEA,IAAck+M,8BAAwC,CAClD,OAAO,KAAKnwa,OAAOmwa,8BAAgC,EACvD,CAEA,IAAcC,4BAAsC,CAChD,OAAO,KAAKpwa,OAAOowa,4BAA8B,EACrD,CAEA,IAAcC,sBAAgC,CAC1C,OAAO,KAAKrwa,OAAOqwa,sBAAwB,EAC/C,CAEA,IAAc3pW,UAAmB,CAC7B,OAAO,KAAK1mE,OAAO0mE,QACvB,CAEA,IAAwB4pW,UAAmB,CACvC,MAAO,EACX,CAEA,IAAsBC,UAAmB,CACrC,OAAO,KAAKvwa,OAAOuwa,UAAY,CACnC,CAEA,IAActgB,oBAA0C,CACpD,OAAO,KAAKjwZ,OAAOiwZ,kBACvB,CAEA,IAAc/uW,WAAuB,CACjC,OAAO,KAAKswX,YAAc,KAAKxxa,OAAOkhD,WAAavkB,GAAUg8J,MACjE,CAEA,IAAIz3I,UAAU5/J,EAAkB,CAC5B,KAAKkwhB,WAAalwhB,CACtB,CAEA,IAAcw/gB,YAAsB,CAChC,OAAO,KAAK5/W,YAAcvkB,GAAUh2H,GACxC,CAEA,IAAcitJ,OAAgB,CAC1B,OAAO,KAAK69W,QAAU,KAAKzxa,OAAO4zD,OAAS,EAC/C,CAEA,IAAIA,MAAMtyK,EAAe,CACrB,KAAKmwhB,OAASnwhB,CAClB,CAEAspM,SAAStpM,EAAwB,CAC7B,GAAM,CAACsH,EAAKD,GAAO,KAAKitD,OACxB,OAAOt0D,GAASsH,GAAOtH,GAASqH,CACpC,CAMAg6gB,mCACI/sd,EACI,CACJ,IAAMksE,EACFlsE,EAAO,KAAOm3F,OAER,KAAKn3F,OAAO,GADZ7c,GAAM,CAAC,KAAK6c,OAAO,GAAIA,EAAO,EAAG,GAErCssE,EACFtsE,EAAO,KAAOm3F,OAER,KAAKn3F,OAAO,GADZ7c,GAAM,CAAC,KAAK6c,OAAO,GAAIA,EAAO,EAAG,GAG3C,MADA,MAAKA,OAAS,CAACksE,GAAQ,EAAGI,GAAS,CAAC,EAC7B,IACX,CAGAyvZ,QAAQC,EAAgC,CAOpC,MANA,MAAKhR,aAAegR,EAAWhR,aAC/B,KAAKhrd,OAASg8d,EAAWh8d,OAAOknG,MAAA,EAChC,KAAK8lX,oBAAsBgP,EAAWhP,oBACtC,KAAKnpb,MAAQm4b,EAAWn4b,MAAMqjE,MAAA,EAC9B,KAAK00X,WAAaI,EAAWJ,WAC7B,KAAKC,OAASG,EAAWH,OAClB,IACX,CAEA,OAAeI,mBAAmB,CAC9B9hgB,SACAk3J,SAIO,CACP,IAAMxtF,EAAQwtF,EAAMxtF,MAAA,EAEdq4b,EAAe,GADHn0X,KAAKqC,IAAIvmE,EAAM,GAAKA,EAAM,EACjBi3b,EAE3B,GAAI3ggB,EAAOhnB,OAAS,EAAG,OAAO+ohB,EAK9B,IAAM7/b,EADel5C,GAAShpB,CACZqpT,EAAan/T,IAAK3Y,GAAU2lL,EAAM3lL,IAMpD,OAAOy3C,GAAM,CAFKA,GAHJk5C,EACT6qE,MAAM,GACN7iJ,KAAKwnE,EAAK34E,IAAU24E,EAAMwQ,EAAUnpF,EACjBiphB,IAAU,EAETD,CAAa,IAAK,CAC/C,CAMA,IAActB,WAAgC,CAC1C,GAAM,CAAEjE,cAAe,KAAKvsa,OAC5B,GAAKusa,EACL,OAAOuD,EAAa+B,mBAAmB,CACnC9hgB,OAAQw8f,EACRtlW,MAAO,KAAKwpW,QAChB,EACJ,CAEA,OAAeuB,cACX/qW,EACA6pW,EACwD,CACxD,IAAIntZ,EAAQsjD,EAAMtjD,MAAMmtZ,GAGxB,GAAIntZ,EAAM56H,OAAS,EAAG,MAAO,CAAEk+K,MAAOA,EAAMgrJ,KAAK6+M,EAAkB,EAEnE,IAAMhtZ,EAAWH,EAAM,GAAKA,EAAM,GAC5BsuZ,EAAYtuZ,EAAM,GAClBuuZ,EAAWrxX,GAAOl9B,GAIlB,CAACy9B,EAAUC,GAAY4lB,EAAMrxH,OAAA,EAUnC,OATIyrG,EAAW6wX,EAAW,IAAOpuZ,IAC7BmjD,EAAMrxH,OAAO,CAACqxH,EAAMrxH,OAAA,CAAQ,CAAC,GAAIs8d,EAAWpuZ,CAAS,GACrDH,EAAQ,CAAIA,KAAOuuZ,EAAWpuZ,CAAQ,GAEtCs9B,EAAW6wX,EAAY,IAAOnuZ,IAC9BmjD,EAAMrxH,OAAO,CAACq8d,EAAYnuZ,EAAUmjD,EAAMrxH,OAAA,CAAQ,CAAC,EAAG,GACtD+tE,EAAQ,CAACsuZ,EAAYnuZ,EAAaH,IAAK,GAGpC,CAAEsjD,QAAOtjD,OAAM,CAC1B,CAEAwuZ,UACA,IAAsB1B,UAAkB,CAEpC,IAAIxpW,GADY,KAAK65V,WAAasR,GAAWl2C,IACjCm2C,EAAUz8d,OAAO,KAAKA,MAAM,EAAE6jC,MAAM,KAAKA,KAAK,EAE1D,GAAI,KAAKw4O,MAAQ,CAAC,KAAK6uM,WAAY,CAC/B,GAAM,CAAE75V,MAAOqrW,EAAW3uZ,MAAOwuZ,GAC7BrC,EAAakC,cAAc/qW,EAAO,KAAK6pW,gBAAgB,EAC3D7pW,EAAQqrW,EACR,KAAKH,UAAYA,CACrB,KACI,MAAKA,UAAYplY,OAGrB,GAAI,KAAK/sC,OAAOusa,WAAY,CAMxB,IAAMn+e,EAJY0hf,EAAa+B,mBAAmB,CAC9C9hgB,OAAQ,KAAKiwF,OAAOusa,WACpBtlW,OACJ,CACeupW,EAAY,EAAIpB,IACzBj3d,EAAI8uH,EAAMxtF,MAAA,EAChB,OAAOwtF,EAAMxtF,MAAM,CAACthC,EAAE,GAAK/pB,EAAQ+pB,EAAE,GAAK/pB,CAAO,EACrD,CACI,OAAO64I,CAEf,CAEA,IAAcypW,WAAoB,CAC9B,OAAO/yX,KAAKqC,IAAI,KAAKvmE,MAAM,GAAK,KAAKA,MAAM,EAAE,CACjD,CAEA,IAAck3b,UAAmB,CAC7B,OAAOhzX,KAAKh1J,IAAI,KAAK8wF,MAAM,GAAI,KAAKA,MAAM,EAAE,CAChD,CAEA,IAAcm3b,UAAmB,CAC7B,OAAOjzX,KAAK/0J,IAAI,KAAK6wF,MAAM,GAAI,KAAKA,MAAM,EAAE,CAChD,CAEA,IAAco3b,aAAsB,CAChC,OAAO,KAAKD,SAAW,KAAKF,UAAY,CAC5C,CAGA,IAAsBI,kBAA2B,CAK7C,OAAOnzX,KAAKr+B,MACRuhC,GAAQ,KAAK6vX,WAAa,KAAKhqW,SAAW,KAAM,CAC5C99K,IAAK,KAAK0nhB,SACV3nhB,IAAK,KAAK4nhB,QACd,GAER,CAMA,IAAwBQ,kBAA6C,CACjE,IAAMp5c,EAAS,KAAKipc,aACpB,GAAI,MAAK5ga,OAAO2jB,OAAUhsD,GAAQm9X,aAClC,OAAOn9X,EAAO4mF,YAClB,CAMA,IAAwByyX,eAAwC,CAC5D,IAAMtyX,EAAW,KAAKqyX,iBACtB,GAAIryX,IAAa3R,OAAW,OAE5B,GAAM,CAAEn3F,SAAQk7d,iBAAkBzE,GAAgB,KAC5C,CAAEE,cAAe,KAAKvsa,OAE5B,OAAOtgH,GAAMg/J,GACRqP,KAAK5hB,GAAaqS,SAAYzR,QAC9BghB,KAAK5hB,GAAa0T,WACf0sX,EACMx/X,OACAsgY,IAAqB,CAAEz3d,SAAQy2d,aAAY,IAEpDt+W,KACGltK,GAAEgd,MACEsuI,GAAagT,IACbhT,GAAa6S,KACb7S,GAAa8S,MACb9S,GAAa+S,OACjB,EACCR,GACG4tX,IAAwB,CACpB5tX,WACA9oG,SACAy2d,cACAE,YACJ,IAEPt+W,WAAA,CACT,CAGA,IAAsBgjX,WAAoC,CACtD,GAAM,CAAE1E,cAAe,KAAKvsa,OAC5B,GAAKusa,EACL,OAAOA,EAAWtygB,IAAK3Y,IAAW,CAAEA,QAAO80F,SAAU,CAAE,GAC3D,CAEAm8b,eAA4B,CACxB,OAAO,KAAKC,uBAAA,EAAyB/ge,OAAQo7P,GACzC,KAAK4lO,2BAA2B5lO,EAAKvrT,KAAK,EAElD,CAEAkxhB,wBAA6C,CACzC,GAAM,CAAE/B,WAAUO,iBAAkB,KAEpC,GAAIA,EAAe,OAAOA,EAE1B,IAAIrtZ,EAEE+uZ,EAAc,KAAK1ya,OAAO2jB,OAAS,KAAKstZ,UAC9C,GAAIyB,EAAa,CAEb,GAAM,CAACtxX,EAAUC,GAAYovX,EAAS76d,OAAA,EAetC,OAAO7c,GAdgB25e,EAElBz4gB,IAAK4yS,GACEA,EAAKvrT,QAAU,KACR,CAAE,GAAGurT,EAAMvrT,MAAO8/J,CAAS,EAClCyrJ,EAAKvrT,QAAUq8I,IACR,CAAE,GAAGkvK,EAAMvrT,MAAO+/J,CAAS,EAC/BwrJ,CACX,EAECp7P,OACIo7P,GAASA,EAAKvrT,OAAS8/J,GAAYyrJ,EAAKvrT,OAAS+/J,CAG1CsxX,EAAiB9lO,GAASA,EAAKvrT,KAAK,CACxD,CAAO,GAAI,KAAKw/gB,WAAY,CAExB,IAAM8R,EAAmBj1X,KAAKr+B,MAAM,KAAKwxZ,iBAAmB,MACtDP,EAAW5yX,KAAKr+B,MAAM,KAAKwxZ,iBAAmB,GA2CpD,GAbAntZ,EADuB8sZ,EAAS9sZ,MAAMivZ,CAC9BC,EAAe54gB,IAAK3Y,GAEpBq8J,KAAKm1X,OAAOn1X,KAAKwC,MAAM7+J,IAAU,GAAM,EAChC,CAAEA,QAAO80F,SAAU,CAAE,EAEvBunE,KAAKm1X,OAAOn1X,KAAKwC,MAAM7+J,EAAQ,IAAM,GAAM,GAG3Cq8J,KAAKm1X,OAAOn1X,KAAKwC,MAAM7+J,EAAQ,IAAM,GAAM,EACzC,CAAEA,QAAO80F,SAAU,CAAE,EACzB,CAAE90F,QAAO80F,SAAU,CAAE,CAChC,EAEIutC,EAAM56H,OAAS6phB,EAAkB,CACjC,GAAIjvZ,EAAM56H,QAAUwnhB,EAGM5sZ,EAAMlyE,OAAQyG,GAAMA,EAAEk+B,SAAW,CACnD28b,EAAchqhB,QAAU,IACxB46H,EAAQA,EAAM1pH,IAAK4yS,GACfA,EAAKz2N,WAAa,EACZ,CAAE,GAAGy2N,EAAMmmO,MAAO,GAAMC,aAAc,EAAK,EAC3CpmO,SAMd,IAAK,IAAIz2N,EAAW,EAAGA,EAAW,EAAGA,IAC7ButC,EAAM56H,OAAS6phB,IACfjvZ,EAAQA,EAAMlyE,OACTo7P,GAASA,EAAKz2N,SAAWA,GAI9C,CACJ,KAMIutC,IAJI,KAAKwuZ,WAAa1B,EAAS9sZ,MAAM,KAAKmtZ,gBAAgB,GAIzC72gB,IAAKi5gB,IAAe,CACjC5xhB,MAAO4xhB,EACP98b,SAAU,CACd,IAaJ,OAVI,KAAKwsb,sBACLj/Y,EAAQA,EAAMlyE,OAAQyG,GAAMA,EAAE52D,MAAQ,GAAM,IAG3C,KAAKs/gB,cAAc9rE,eACpBnxU,EAAQA,EAAM1pH,IAAK4yS,GACfA,EAAKvrT,QAAU,EAAI,CAAE,GAAGurT,EAAMsmO,MAAO,EAAK,EAAItmO,IAI/C9zQ,GAAO4qF,EAClB,CAEAyvZ,0BAA0D,CACtD,IAAMrrhB,EAAiC,CACnC,GAAG,KAAKi4G,OAAOqza,sBACfz7W,aAAc5rB,GAAyBixL,aAC3C,EAuBMq2M,EAAUv6e,GACZswH,GAAW,KAAK8nX,WAAY3pgB,EAAGC,IAAMk2I,KAAKqC,IAAIx4I,EAAElmB,MAAQmmB,EAAEnmB,KAAK,IAEnE,GAAIgyhB,IAAYvmY,OAAW,CAEvB,IAAMq3B,EAAK,CAACnkB,GAAgBqzX,GAAW,EAUvC,GATIlvW,GAAM,IACNr8K,EAAQywK,iBAAmB4L,GAQ3B,CAAC,KAAK08V,WAAY,CAClB,IAAMyS,EAASx6e,GACX,KAAKo4e,UAAUl3gB,IAAK4yS,GAASlvJ,KAAKqC,IAAI6sJ,EAAKvrT,KAAK,IAEpD,GAAIiyhB,EAAQ,CACR,IAAMC,EACFvzX,GAAgBszX,GAAUtzX,GAAgBqzX,GAAW,EACrDE,EAAU,IACVzrhB,EAAQ4wK,+BAAiC66W,EAEjD,CACJ,CACJ,CACA,OAAOzrhB,CACX,CAEA+mhB,MAAMxthB,EAAuB,CACzB,GAAI,CAAC,KAAKm4F,MAIN,OAHAvzE,QAAQhQ,MACJ,6DAEG5U,EACJ,GAAI,KAAKw/gB,YAAcx/gB,GAAS,EAEnC,OADA4kB,QAAQhQ,MAAM,cAAc5U,EAAM,8BAA8B,EACzDA,EACJ,GAAI,KAAKs0D,OAAO,KAAO,KAAKA,OAAO,GAQtC,OAAQ,KAAKoqD,OAAOyza,0BAApB,CACI,KAAKlrY,GAAU9yI,MACX,OAAO,KAAKgkF,MAAM,GACtB,KAAK8uD,GAAU/nG,IACX,OAAO,KAAKi5C,MAAM,GACtB,KAAK8uD,GAAUyjB,OACf,QACI,OAAQ,KAAKvyE,MAAM,GAAK,KAAKA,MAAM,IAAM,CACjD,CAEJ,IAAMi6b,EAAc,KAAKjD,SAASnvhB,GAKlC,OAJIoyhB,IAAgB3mY,QAChB7mI,QAAQhQ,MAAM,iCAAiC5U,GAAO,EAC/CA,GAEJoyhB,CACX,CAMA3kN,OAAOztU,EAAuB,CAC1B,OAAO,KAAKmvhB,SAAS1hN,OAAOztU,EAChC,CAEA,IAAc4vhB,cAAuB,CACjC,OAAO,KAAKlxa,OAAOkxa,YACvB,CAEA,IAAwBC,WAAwB,CAC5C,OAAO,KAAKoB,cAAA,EAAgB9ge,OAAQo7P,GAAS,CAACA,EAAKomO,YAAY,CACnE,CAEAR,2BAAmCnxhB,EAAwB,CACvD,MAAO,CAAC,KAAK+uhB,sBAAwB/uhB,EAAQ,KAAKs0D,OAAO,EAC7D,CAEA+9d,WACI9mO,EACA+mO,EACM,CACN,IAAMP,EAA+C,CACjD,GAAG,KAAKD,yBAAA,EACR,GAAGQ,CACP,EACA,OACI,KAAKhT,cAAcjpE,cAAc9qJ,EAAMwmO,IACvCxmO,EAAKjvT,SAAA,CAEb,CAEA,IAAcwzhB,eAAwB,CAClC,OAAO,KAAKpxa,OAAOoxa,aACvB,CAEA,IAAcC,eAGE,CACZ,GAAI,CAAC,KAAKz9W,MAAO,OAEjB,IAAMigX,EAAgB,CAClBzyM,SAAU,KAAK0yM,cACfptW,SAAU,KAAK0qW,cACf1wM,WAAY,EACZgH,0BACI,KAAK6pM,aAAa7pM,yBAC1B,EAEMqsM,EAAY5xD,IAAc,CAC5BvuT,MAAO,KAAKA,MACZwhS,YAAa,KAAKwrE,cAAcxrE,WACpC,GAEM4+E,EAAoB,CACtB71c,KAAM41c,EAAUzwD,UAChB78S,WAAY,IACZm+K,SAAU,EACd,EAEMqvL,EAAiB,gCAmBvB,OAjBIF,EAAUr9f,KAIH,IAAIgvU,GAAc,CACrB7qM,UAAW,CAACm5X,EAAmB,CAAE71c,KAJf,KAAK2ic,WACrB,IAAIiT,EAAUr9f,KAAK,IAAIu9f,EAAe,GACtC,IAAIF,EAAUr9f,KAAK,EAEgC,CAAC,EACtD,GAAGm9f,CACP,GAGA,KAAK/S,WACE,IAAIp7K,GAAc,CACrB7qM,UAAW,CAACm5X,EAAmB,CAAE71c,KAAM,IAAI81c,EAAe,EAAG,CAAC,EAC9D,GAAGJ,CACP,GAGG,IAAItvL,GAAiB,CACxBpmR,KAAM41c,EAAUzwD,UAChB78S,WAAY,IACZ,GAAGotW,CACP,EACJ,CAEA,IAAcvC,aAAsB,CAChC,OAAO,KAAKD,cACN,KAAKA,cAAcvvd,OAAS,KAAKoud,aACjC,CACV,CACJ,EAEagE,IAAb,MAAaA,UAAuBpE,I,+BAW/BzzZ,E,EAAa83Z,Q,GAOb93Z,E,EAAa+3Z,a,GAIb/3Z,E,EAAay3Z,e,GAIbz3Z,E,EAAav6D,Q,GAiBbu6D,E,EAAaxgH,M,GAIbwgH,E,EAAag4Z,oB,GAoFbh4Z,E,EAAqBi4Z,e,GAwBrBj4Z,E,EAAak4Z,Y,KA1Jd,YAAYv0a,EAAoBuxa,EAA2B,CACvD,MAAMvxa,EAAQuxa,aAEdtyV,EAAe,IAAI,CACvB,CAEAtjL,OAAwB,CACpB,OAAO,IAAIu4gB,EAAe,KAAKl0a,OAAQ,KAAKuxa,WAAW,EAAEI,QAAQ,IAAI,CACzE,CAEA,IAAcwC,QAAmB,CAE7B,OAAO,KAAKn0a,OAAOm0a,SAAWrsY,GAASwU,IACjCxU,GAASwU,IACTxU,GAASmhB,MACnB,CAEA,IAAcmrX,aAAsB,CAChC,OAAO,KAAK9C,WAChB,CAEA,IAAcwC,eAAwB,CAClC,OAAO,KAAKpD,SAChB,CAEA,IAAc5ud,QAAiB,CAC3B,GAAM,CACFiud,WACAqE,cACAnE,cACAjwa,OAAQ,CAAEw0a,UAAU,IACpB,KAEJ,GAAIzE,EAAU,MAAO,GAErB,IAAM0E,EAAmB,KAAKH,cACxB,KAAKpD,aAAejB,EACpB,EAEN,OAAOtyX,KAAKh1J,IAAI8rhB,EAAmBL,EAAaI,EACpD,CAEA,IAAc34gB,MAAe,CACzB,OAAO,KAAKimD,MAChB,CAEA,IAAcuyd,oBAA2C,CACrD,GAAM,CAAEzT,gBAAiB,KAIzB,GAAIA,GAAc9rE,aAAc,CAC5B,GAAM,CAACr/b,EAAO+qC,GAAO,KAAKoV,OAEpB8+d,EAAar1X,OAAOC,SAAS7pJ,GAC7B,KAAKk/gB,eACDl/gB,EACAmrgB,EAAa9oE,gBAAgBric,IAEjCs3I,OAEA02X,EACF,KAAK4M,sBAAwBzP,aAAwBtpE,GAC/CspE,EAAahlE,WAAWp7Z,EAAK,EAAC,EAC9BA,EAWV,OAAOo0e,GACHp0X,GAAiB,CAACk0X,EATlBr1X,OAAOC,SAAS9+G,IAAQije,IAAahugB,EAC/B,KAAKk/gB,eACDn0e,EAEAoge,EAAa7oE,mBAAmB0rE,IAEpC12X,MAGiC,GACvC,CAAEvjB,QAAS,CAAE,EAErB,CAEA,OAAOqrZ,IAAwB,KAAKN,WAAa3gX,GAAUA,EAAMvrK,CAAC,CACtE,CAEA,IAAuB8ohB,WAAwB,CAC3C,GAAI,KAAKH,cAAe,OAAO,KAAKuB,cAAA,EAEpC,IAAI5uZ,EAAQ,KAAK4uZ,cAAA,EAAgB9ge,OAC5Bo7P,GAAkB,CAACA,EAAKomO,YAC7B,EACM,CAAEr9d,UAAW,KAGbk/d,EAAe,KAAKhU,WAAa,EAAI,EA6B3C,OA5BIlrd,EAAO,GAAK,GAAM,IAClB+tE,EAAQ,CACJ,CACIriI,MAAOs0D,EAAO,GACdwgC,SAAU0+b,CACd,EACGnxZ,IACP,GAEA/tE,EAAO,GAAK,GAAM,GAClB,KAAKgtd,qBACL,CAAC,KAAKyN,uBAEN1sZ,EAAQ,CACDA,KACH,CACIriI,MAAOs0D,EAAO,GACdwgC,SAAU0+b,CACd,CACJ,GASG/7e,IAJaA,GAAS4qF,EAAO,CAC/BzrE,GAAcA,EAAE52D,MAChB42D,GAAcA,EAAEk+B,QACpB,CACqB2+b,EAAc78d,GAAMA,EAAE52D,KAAK,CACrD,CAOA,IAAsBgzhB,eAAyB,CAG3C,IAAM51X,EAAW,KAAKqyX,iBAkBtB,OAjBIryX,IAAa3R,QAAa0R,GAAYC,IAIlC,KAAK1+C,OAAOusa,WAAmB,KAAKvsa,OAAOusa,WAAWxjhB,OAAS,EAWnE,KAAK6sD,OAAO,GAAK,GAAM,GAEpB,KAAKu7d,UAAUpohB,OAAS,CACnC,CAEA,IAAcwrhB,YAAmC,CAG7C,IAAM71X,EAAW,KAAKqyX,iBACtB,GACIryX,IAAa3R,QACb0R,GAAYC,IACZ,KAAK1+C,OAAOusa,WACd,CACE,IAAMxkhB,EAAUulhB,IAAgC,CAC5C5uX,WACA6tX,WAAY,KAAKvsa,OAAOusa,UAC5B,GACA,IAAK,IAAMryb,KAAUnyF,EAAS,CAE1B,GAAImyF,EAAOnxF,OAASsmhB,IAAsB,SAE1C,IAAM2F,EAAmB96b,EAAOjgF,IAAK4yS,GACjC,KAAK8nO,eAAe9nO,EAAKvrT,MAAOurT,EAAKj5I,KAAK,GAE9C,GAAIqhX,IAAUD,EAAkB,CAAExrZ,QAAS,CAAE,GACzC,OAAOwrZ,CACf,CAEJ,CAOA,OAAOJ,GAJkB77e,GACrB,KAAKo4e,UACJtkO,GAASA,EAAKz2N,QACnB,EAAEn8E,IAAK4yS,GAAS,KAAK8nO,eAAe9nO,EAAKvrT,MAAOurT,EAAKj5I,KAAK,CACzBohX,EAAkB,CAAExrZ,QAAS,CAAE,EACpE,CAEAmrZ,eAAerzhB,EAAesyK,EAAoC,CAC9D,IAAMshX,EAAiBthX,GAAS,KAAK+/W,WAAWryhB,GAC1C,CAAE+kF,QAAOvkB,UAAWikH,EAAOo6J,QAAQ+0M,EAAgB,CACrDxuW,SAAU,KAAKwqW,YACnB,GACI7ohB,EAAI,KAAKymhB,MAAMxthB,GACfouhB,EAASvnY,GAAgBhmB,OACvBL,EAAOz5H,EAAIg+E,EAAQ,EACnB67C,EAAQ75H,EAAIg+E,EAAQ,EACpBj4C,EAAS,KAAKoif,UAAY,KAAKA,UAAY,EAAIpB,IAAgB,EAYrE,OAVI,KAAKe,8BACLruZ,EAAO,KAAK8uZ,SAAWxif,IAEvB/lC,EAAI,KAAKuohB,SACTlB,EAASvnY,GAAgBrmB,MAEzB,KAAKsuZ,4BAA8BluZ,EAAQ,KAAKyuZ,SAAWvif,IAC3D/lC,EAAI,KAAKsohB,SACTjB,EAASvnY,GAAgBjmB,OAEtB,CACH5gI,QACA4zhB,iBACA7shB,IACAmwD,EAAG,EACH6tB,QACAvkB,SACA4td,SACAlsS,SAAU,EACd,CACJ,CAGA8rS,YAAsB3oW,EAAgB4oW,EAA0B,CAC5D,OAAO5oW,EAAO6oW,WAAWD,EAAQ7xC,SAAS,EAAC,EAC/C,CACJ,EAEay3C,IAAb,MAAaA,UAAqBrF,I,+BAW7BzzZ,E,EAAa83Z,Q,GAIb93Z,E,EAAay3Z,e,GAIbz3Z,E,EAAa+4Z,gB,GAIb/4Z,E,EAAah2C,O,GAebg2C,E,EAAav6D,Q,GAIbu6D,E,EAAaxgH,M,GAIbwgH,E,EAAag4Z,oB,GAIbh4Z,E,EAAak4Z,Y,GA6Dbl4Z,E,EAAag5Z,qB,GAIbh5Z,E,EAAai5Z,mB,GAYbj5Z,E,EAAak5Z,gB,GAIbl5Z,E,EAAam5Z,iB,KAlId,YAAYx1a,EAAoBuxa,EAA2B,CACvD,MAAMvxa,EAAQuxa,aAEdtyV,EAAe,IAAI,CACvB,CAEAtjL,OAAsB,CAClB,OAAO,IAAIw5gB,EAAa,KAAKn1a,OAAQ,KAAKuxa,WAAW,EAAEI,QAAQ,IAAI,CACvE,CAEA,IAAcwC,QAAmB,CAC7B,OAAOrsY,GAAShmB,IACpB,CAEA,IAAcgyZ,eAAwB,CAClC,OAAO,KAAKvC,aAAakE,YAAYpvc,OAASs3D,GAClD,CAEA,IAAcy3Y,gBAAyB,CACnC,OAAO,KAAK9D,WAChB,CAEA,IAAcjrc,OAAgB,CAC1B,GAAM,CACF0pc,WACAE,cACAjwa,OAAQ,CAAEw0a,UAAU,IACpB,KAEJ,GAAIzE,EAAU,MAAO,GAErB,IAAM2F,EAAe38e,GAAM,KAAKw7e,WAAWt6gB,IAAK4yS,GAASA,EAAKxmO,KAAK,GAC7Dsvc,EAAkBD,EAAeA,EAAezF,EAAc,EAEpE,OAAOtyX,KAAKh1J,IAAIgthB,EAAiBnB,EACrC,CAEA,IAAc1yd,QAAiB,CAC3B,OAAO,KAAK4ud,SAChB,CAEA,IAAc70gB,MAAe,CACzB,OAAO,KAAKwqE,KAChB,CAEA,IAAcguc,oBAA2C,CACrD,OAAOQ,IAAwB,KAAKN,WAAa3gX,GAAUA,EAAMp7G,CAAC,CACtE,CAEA,IAAc+7d,YAAmC,CAC7C,GAAM,CAAE3+d,UAAW,KAEb2+d,EAAax7e,GACf,KAAKo4e,UACJtkO,GAASA,EAAKz2N,QACnB,EAAEn8E,IAAK4yS,GAAS,KAAK8nO,eAAe9nO,EAAKvrT,KAAK,GAG1Cs0hB,EAAehB,GAA0BL,EAAY,CAAE/qZ,QAAS,CAAE,GAStE,GANIosZ,EAAa7shB,OAAS,KAAKunhB,WAC3BsF,EAAehB,GAA0BL,EAAY,CAAE/qZ,QAAS,CAAE,IAKlEosZ,EAAa7shB,OAAS,KAAKunhB,SAAU,CACrC,IAAMuF,EAAmB98e,GAAY,KAAKo4e,SAAS,EACnD,GAAIv7d,EAAO,KAAO,GAAKA,EAAO,KAAO,EAAG,CACpC,IAAMkge,EAAYD,EACb57gB,IAAK4yS,GAASA,EAAKvrT,KAAK,EACxBuI,QAAQ,GACTishB,GAAa,GAAKD,EAAiBC,EAAU,CAAC3C,QAC9C0C,EAAiBC,GAAa,CAC1Bx0hB,MAAO,EACP80F,SAAU,CACd,EAER,CAMAw/b,EAAehB,GAJI77e,GACf88e,EACChpO,GAASA,EAAKz2N,QACnB,EAAEn8E,IAAK4yS,GAAS,KAAK8nO,eAAe9nO,EAAKvrT,KAAK,CACLizhB,EAAY,CAAE/qZ,QAAS,CAAE,EACtE,CAEA,OAAOosZ,CACX,CAEAjB,eAAerzhB,EAAmC,CAC9C,IAAM4zhB,EAAiB,KAAKvB,WAAWryhB,GACjC,CAAE+kF,QAAOvkB,UAAWikH,EAAOo6J,QAAQ+0M,EAAgB,CACrDxuW,SAAU,KAAKwqW,YACnB,GAEA,MAAO,CACH5vhB,QACA4zhB,iBACA7shB,EAAG,EACHmwD,EALM,KAAKs2d,MAAMxthB,CAKjBk3D,EACA6tB,QACAvkB,SACA4td,OAAQvnY,GAAgBjmB,MACxBytZ,OAAQtnY,GAAc2jB,OACtBw3E,SAAU,EACd,CACJ,CAEA,IAAc6xS,qBAA+B,CACzC,OAAO,KAAKvU,YAAc,CAAC,KAAKuQ,aACpC,CAEA,IAAciE,mBAAkD,CAK5D,OAJK,KAAKD,oBAIH,IAAI9wL,GAAiB,CACxBpmR,KAAM,WACNijQ,SAAUzjM,IACV+oC,SALaq6S,GAAc,MAAO,KAAKr6S,QAKvCA,CACJ,GAR+B,MASnC,CAEA,IAAc6uW,gBAAyB,CACnC,OAAO,KAAKD,kBAAoB,KAAKA,kBAAkBjvc,MAAQ,CACnE,CAEA,IAAcmvc,iBAA0B,CACpC,IAAMhsZ,EAAU,KAAK0nZ,aACrB,OAAO,KAAKoE,kBACN,KAAKA,kBAAkBxzd,OAAS0nE,EAChC,CACV,CACJ,EAaausZ,GAAb,KAAaA,C,+BAQR15Z,E,EAAaijZ,gB,GAMbjjZ,E,EAAakjZ,c,GAObljZ,E,EAAqB25Z,oB,GAOrB35Z,E,EAAqB45Z,kB,GAOrB55Z,E,EAAaqjZ,a,GAqBbrjZ,E,EAAasqD,Q,GAIbtqD,E,EAAa65Z,iB,GAOb75Z,E,EAAqBg5Z,qB,KAlEtB7nhB,MAEA,YAAYA,EAAsB,C,UAC9ByxL,EAAe,IAAI,EACnB,KAAKzxL,MAAQA,CACjB,CAEA,IAAc8xgB,gBAAiC,CAC3C,IAAM7yU,EAAO,KAAKj/L,MAAM8xgB,eAAe3jgB,MAAA,EAEvC,MADA8wL,GAAKhzG,MAAQ,KAAKimb,YAAYkF,OAAA,EACvBn4U,CACX,CAEA,IAAc8yU,cAA6B,CACvC,IAAM9yU,EAAO,KAAKj/L,MAAM+xgB,aAAa5jgB,MAAA,EAErC,MADA8wL,GAAKhzG,MAAQ,KAAKimb,YAAYiF,OAAA,EACvBl4U,CACX,CAGA,IAAsBupV,oBAA6B,CAC/C,IAAMvpV,EAAO,KAAKj/L,MAAM8xgB,eAAe3jgB,MAAA,EAEvC,MADA8wL,GAAKhzG,MAAQ,CAAC,EAAG,KAAKktF,OAAOtgG,MAAQ,KAAK4vc,gBAAgB,EACnDxpV,EAAK5wL,IAChB,CAGA,IAAsBo6gB,kBAA2B,CAC7C,IAAMxpV,EAAO,KAAKj/L,MAAM+xgB,aAAa5jgB,MAAA,EAErC,MADA8wL,GAAKhzG,MAAQ,CAAC,EAAG,KAAKktF,OAAO7kH,MAAM,EAC5B2qI,EAAK5wL,IAChB,CAGA,IAAc6jgB,aAAsB,CAChC,OACI,KAAK/4V,OAGAwvW,IAAI,EACA,KAAK3ohB,MAAM8xgB,eAAe6U,QAAS,KAAK6B,oBACxC,KAAKxohB,MAAM+xgB,aAAa4U,QAAS,KAAK8B,gBAC3C,GAECG,OAAO,KAAK5ohB,MAAM+xgB,aAAa6V,cAAc,EAE7CgB,OAAO,KAAKF,gBAAgB7H,UAAU,EACtC+H,OACG,KAAKf,oBACC,KAAK7nhB,MAAM+xgB,aAAaiW,gBACxB,EAGtB,CAEA,IAAc7uW,QAAiB,CAC3B,OAAO,KAAKn5K,MAAMm5K,QAAUkjR,EAChC,CAEA,IAAcqsF,iBAAmC,CAC7C,OAAO,IAAI9H,IAAgB,KAAK5ghB,MAAM0ohB,iBAAmB,GAAI,CACzD/W,SAAU,KACVl+C,aAAc,KAAKzzd,MAAM+xgB,aAAa74V,QAC1C,EACJ,CAEA,IAAsB2uW,qBAA+B,CACjD,OACI,KAAK7nhB,MAAM+xgB,aAAa8V,qBAExB,KAAK7nhB,MAAM+xgB,aAAagW,gBAAkB,KAAKU,gBAEvD,CACJ,EAQA,SAAShB,IACLV,EACA,CAAE/qZ,UAAU,GAA4B,CAAC,GAEzC,IAAK,IAAIx/H,EAAI,EAAGA,EAAIuqhB,EAAWxrhB,OAAS,EAAGiB,IACvC,GACIslhB,IAEIG,GAAyB8E,EAAWvqhB,EAAE,EAAEy8c,OAAOj9U,GAC/CimZ,GAAyB8E,EAAWvqhB,EAAI,EAAE,EAAEy8c,OAAOj9U,IAGvD,MAAO,GAEf,MAAO,EACX,CAEA,SAASqrZ,IACLN,EACAtlc,EAAA,CAGA,OADIslc,EAAWxrhB,OAAS,EAAUwrhB,EAC3B,CAACx7e,GAAQw7e,EAAYtlc,GAAYl2C,GAAQw7e,EAAYtlc,EAAU,CAC1E,CAMA,SAAS2lc,GACLL,EACA,CAAE/qZ,UAAU,GAA4B,CAAC,GAEzC,IAAK,IAAIx/H,EAAI,EAAGA,EAAIuqhB,EAAWxrhB,OAAQiB,IACnC,IAAK,IAAI04H,EAAI14H,EAAI,EAAG04H,EAAI6xZ,EAAWxrhB,OAAQ25H,IAAK,CAC5C,IAAMupL,EAAKsoO,EAAWvqhB,GAClBkiT,EAAKqoO,EAAW7xZ,GAChBupL,IAAOC,GAAMD,EAAGzoE,UAAY0oE,EAAG1oE,UAE/B8rS,IAEIG,GAAyBxjO,GAAIw6J,OAAOj9U,GACpCimZ,GAAyBvjO,GAAIu6J,OAAOj9U,MAGxC0iL,EAAG1oE,SAAW,GACtB,CAEJ,OAAO+wS,EAAW9ie,OAAQo7P,GAAS,CAACA,EAAKrpE,QAAQ,CACrD,C,s1GCrqCM6yS,IAAN,KAAMA,CACFlC,OAA+BpnY,OAC/BnkJ,IAA0BmkJ,OAC1BpkJ,IAA0BokJ,OAC1BkjX,mBAA0CljX,OAC1CupY,0BAAiDvpY,OACjDynY,QAA8BznY,OAC9BgjY,SAAgChjY,OAChCijY,cAAqCjjY,OACrCwpY,eAAsCxpY,OACtCmjY,aAAmCnjY,OACnCkjY,YAAkCljY,OAClCklL,KAA4BllL,OAC5BwjY,SAA+BxjY,OAC/BsmY,sBAA2DtmY,OAC3DmU,UAAmCvkB,GAAUg8J,OAC7Cu2N,YAA2CniX,OAC3CppB,MAAgCopB,OAChC0mY,0BAAmD1mY,OACnD6mB,MAA4B7mB,OAC5Bw/X,WAAmCx/X,OACnCojY,6BAAoDpjY,OACpDqjY,2BAAkDrjY,OAClDsjY,qBAA4CtjY,OAE5C,aAAc,CACVkyC,EAAe,KAAM,CACjBk1V,OAAQrnW,EAAW/wJ,IACnBnzB,IAAKkkL,EAAW/wJ,IAChBpzB,IAAKmkL,EAAW/wJ,IAChBk0e,mBAAoBnjV,EAAW/wJ,IAC/Bu6f,0BAA2BxpW,EAAW/wJ,IACtCy4f,QAAS1nW,EAAW/wJ,IACpBg0f,SAAUjjW,EAAW/wJ,IACrBi0f,cAAeljW,EAAW/wJ,IAC1Bw6f,eAAgBzpW,EAAW/wJ,IAC3Bm0f,aAAcpjW,EAAW/wJ,IACzBk0f,YAAanjW,EAAW/wJ,IACxBk2S,KAAMnlJ,EAAW/wJ,IACjBw0f,SAAUzjW,EAAW/wJ,IACrBs3f,sBAAuBvmW,EAAW/wJ,IAClCmlI,UAAW4rB,EAAW/wJ,IACtBmze,YAAapiV,EAAW/wJ,IACxB4nG,MAAOmpD,EAAW/wJ,IAClB03f,0BAA2B3mW,EAAW/wJ,IACtC63I,MAAOkZ,EAAW/wJ,IAClBwwf,WAAYz/V,EAAW/wJ,IACvBo0f,6BAA8BrjW,EAAW/wJ,IACzCq0f,2BAA4BtjW,EAAW/wJ,IACvCs0f,qBAAsBvjW,EAAW/wJ,GACrC,EACJ,CACJ,EAEA,SAASy6f,IACLl1hB,EAAA,CAGA,OADIA,IAAU68I,GAAmBirD,KAAazrD,IACvCr8I,CACX,CAEA,SAASm1hB,IACLn1hB,EAAA,CAGA,OADIA,IAAU68I,GAAmBirD,KAAa,KACvC9nM,CACX,CAEA,IAAao1hB,GAAb,cACYL,I,gCAkDPh6Z,E,EAAaqqD,U,GAIbrqD,E,EAAa60Z,c,GAIb70Z,E,EAAa+0Z,e,GAKb/0Z,E,EAAqBs6Z,gB,GAcrBt6Z,E,EAAqBu6Z,gB,GAMrBv6Z,E,EAAazmE,Q,KAhFd,YAAYpoD,EAA6B+jhB,EAA2B,CAChE,QAAAlyM,IAAA,MACApgJ,EAAe,IAAI,EACnB,KAAKsgJ,iBAAiB/xU,GACtB,KAAK+jhB,YAAcA,CACvB,CAEAA,YAGAhyM,iBAAiB/xU,EAAmC,CAC5CA,GAAOurC,GAAS,KAAMvrC,GACtBA,GAAO5E,MAAK,KAAKA,IAAM4thB,IAAiBhphB,GAAO5E,MAC/C4E,GAAO7E,MAAK,KAAKA,IAAM8thB,IAAiBjphB,GAAO7E,KACvD,CAEA7G,UAAgC,CAC5B,IAAMqH,EAAM45J,GAAW,CACnBoxX,OAAQ,KAAKA,OACbvrhB,IAAK,KAAKA,IACVD,IAAK,KAAKA,IACVsngB,mBAAoB,KAAKA,mBACzBqmB,0BAA2B,KAAKA,0BAChC9B,QAAS,KAAKA,QACdzE,SAAU,KAAKA,SACfC,cAAe,KAAKA,cACpBuG,eAAgB,KAAKA,eACrBrG,aAAc,KAAKA,aACnBj+M,KAAM,KAAKA,KACXs+M,SAAU,KAAKA,SACf8C,sBAAuB,KAAKA,sBAC5BnyX,UAAW,KAAKA,UAChB0S,MAAO,KAAKA,MAAQ,KAAKA,MAAQ7mB,OACjCmiX,YAAa,KAAKA,YAClBvrY,MAAO,KAAKA,MACZ8vZ,0BAA2B,KAAKA,0BAChClH,WAAY,KAAKA,UACrB,GAOA,OALAtlV,GAA+B99L,EAAK,IAAIkthB,KAEpClthB,EAAIP,MAAQ+0I,MAAUx0I,EAAIP,IAAMu1I,GAAmBirD,MACnDjgM,EAAIR,MAAQ,OAAWQ,EAAIR,IAAMw1I,GAAmBirD,MAEjDjgM,CACX,CAEA,IAAcu9K,UAAmB,CAC7B,OAAO,KAAK6qW,aAAa7qW,YAC7B,CAEA,IAAcwqW,cAAuB,CACjC,OAAOnwD,GAAc,GAAI,KAAKr6S,QAAQ,CAC1C,CAEA,IAAc0qW,eAAwB,CAClC,OAAOrwD,GAAc,GAAI,KAAKr6S,QAAQ,CAC1C,CAGA,IAAsBiwW,gBAAyB,CAG3C,OAFI,KAAKz1X,YAAcvkB,GAAUh2H,MAAQ,KAAK/d,KAAO,IAAM,EAChD+0I,IACJ,KAAK/0I,KAAO+0I,GACvB,CAGAk5Y,kBAAkBv1hB,EAAwB,CAItC,OAHK,KAAKg1hB,0BACN,KAAK1thB,MAAQmkJ,QAAazrJ,EAAQ,KAAKsH,KACvC,KAAKD,MAAQokJ,QAAazrJ,EAAQ,KAAKqH,IAFC,EAIhD,CAEA,IAAsBiuhB,gBAAyB,CAG3C,OAFI,KAAK11X,YAAcvkB,GAAUh2H,MAAQ,KAAKhe,KAAO,IAAM,EAChD,KACJ,KAAKA,KAAO,IACvB,CAEA,IAAcitD,QAA2B,CACrC,MAAO,CAAC,KAAK+ge,eAAgB,KAAKC,cAAc,CACpD,CAIAlU,kBAAmC,CAC/B,OAAO,IAAIwR,IAAe,KAAM,KAAK3C,WAAW,CACpD,CAEA1O,gBAA+B,CAC3B,OAAO,IAAIsS,IAAa,KAAM,KAAK5D,WAAW,CAClD,CACJ,EC3KauF,IAAiB,GAAgC,CAC1D,IAAI1gc,EAAWw9E,EAAM,SAMrB,OAJIA,EAAM,OAAO,UAAS,GAAY,KAClCA,EAAM,OAAO,UAAS,GAAY,KAClCA,EAAM,QAAO,GAAY,KAEtBx9E,CACX,EAGa2gc,KACT,EACA,EACA,EACA,IAC2B,CAE3B,GAAI,CAACt5D,EAAO,cAAgBA,EAAO,OAAO,QAAU,EAAG,OAEvD,IAAM/2S,EAAWswW,EACXj2D,GAAA,GAAyDE,CAAY,EACrExD,EAAO,aAEDsD,GADJk2D,EACkB,EACA,EADGh2D,CACY,EACjCF,GAAc,EAAGE,CAAY,EAC/BuE,EAAa/H,EAAO,OAAO,GAE3By5D,EADYz5D,EAAO,OAAO,EACZ,CAAU,SAAS,SAAS+H,EAAW,QAAQ,EAE7D/jZ,EAAM+jZ,EAAW,SAAS,SAAS0xD,EAAY,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,EACrEvwW,EAASZ,EAAO,QAAQy/S,EAAW,MAAO,CAC1C,EAAG/jZ,EAAI,EACP,EAAGA,EAAI,EACG,UACd,CAAC,EAgBD,OAfIA,EAAI,EAAI+jZ,EAAW,SAAS,IAC5B,EAAS,IAAIz/S,EACTY,EAAO,EAAIA,EAAO,MAAQ,EAC1BA,EAAO,EACPA,EAAO,MACPA,EAAO,MACX,GACAllG,EAAI,EAAI+jZ,EAAW,SAAS,IAC5B,EAAS,IAAIz/S,EACTY,EAAO,EACPA,EAAO,EAAIA,EAAO,OAAS,EAC3BA,EAAO,MACPA,EAAO,MACX,GAEG,CACH,KAAM6+S,EAAW,MACjB,WACA,WAAY,IACZ,MAAOA,EAAW,MAClB,SACA,SACA,QAAS,EACb,CACJ,EAIa2xD,KACT,EACA,EACA,EACA,IACiB,CACjB,GACI,CAAC15D,EAAO,cACRA,EAAO,OAAO,QAAU,GACvB,CAACA,EAAO,SAAWw5D,EAEpB,MAAO,CAAC,EAEZ,IAAMvwW,EAAWswW,EACXj2D,GAAA,GAAyDE,CAAY,EACrExD,EAAO,aAEDsD,GADJk2D,EACkB,EACA,EADGh2D,CACY,EACjCF,GAAc,EAAGE,CAAY,EAI/BzhW,EAAYi+V,EAAO,WAAa,CAACA,EAAO,QAAU,IAAW,GAEnE,OAAOA,EAAO,OAAO,MAAM,EAAGj+V,CAAS,CAAC,CAAC,KAAK,EAAG,IAAM,CACnD,IAAM43Z,EAAUpthB,EAAI,GAAKyzd,EAAO,OAAOzzd,EAAI,EAAE,CAAC,SACxCqthB,EAAcD,GAAWv0gB,EAAE,SAAS,SAASu0gB,CAAO,EACpDE,EAAU75D,EAAO,OAAOzzd,EAAI,EAAE,CAAC,SAC/BkthB,EAAcI,EAAQ,SAASz0gB,EAAE,QAAQ,EAE3C4+D,EACJ,CAcIA,CAdA21c,GAAWC,EAOLxO,GANUwO,EACX,IAAIH,CAAW,CAAC,CAChB,UAAU,CAAC,CACX,QAAQ,CAAC,CACT,IAAK,GAAM7uhB,EAAE,MAAM,CAAC,CACF,EAAQ,IAAK,GAAMwa,EAAE,SAAS,IAAIza,CAAC,CAC5C,EAAiB,GAEvB+xJ,GAAY,SAASzyI,EAAG0vgB,CAAO,EAC/Bj9X,GAAY,SAASzyI,EAAG4vgB,CAAO,CAEtC,EAEKz0gB,EAAE,SAAS,SAASq0gB,EAAY,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,EAG9D,IAAIvwW,EAASZ,EAAO,QAAQljK,EAAE,MAAO,CACjC,EAAG4+D,EAAI,EACP,EAAGA,EAAI,EACG,WACE,cAChB,CAAC,EAgBD,OAfIA,EAAI,EAAI5+D,EAAE,SAAS,IACnB,EAAS,IAAIkjK,EACTY,EAAO,EAAIA,EAAO,MAAQ,EAC1BA,EAAO,EACPA,EAAO,MACPA,EAAO,MACX,GACAllG,EAAI,EAAI5+D,EAAE,SAAS,IACnB,EAAS,IAAIkjK,EACTY,EAAO,EACPA,EAAO,EAAIA,EAAO,OAAS,EAC3BA,EAAO,MACPA,EAAO,MACX,GAEG,CACH,KAAM9jK,EAAE,MACR,WACA,eACA,MAAOA,EAAE,MACT,SACA,SACA,MAAO,EACX,CACJ,CAAC,CACL,EAMa00gB,KACT,EACA,EACA,EACA,IACe,CACf,IAAMr/S,EAAYm/F,GAAOomJ,EAAO,MAAM,EAChC+5D,EAAUt/S,EAAU,SACpBxxD,EAAWswW,EACXj2D,GAAA,GAAyDE,CAAY,EACrEH,GACIrD,EAAO,UACFA,EAAO,aAAgBw5D,EAAqB,IAAM,IAAO,IAClE,EACAxwW,EACFg3S,EAAO,cAAgB,CAACu5D,EAA4B,IAAM,IAE1DS,EAAet9X,GAAY,GAC/B,GAAIsjU,EAAO,OAAO,OAAS,EAAG,CAE1B,IAAM25D,EADY35D,EAAO,OAAOA,EAAO,OAAO,OAAS,EACvC,CAAU,SAC1B,EAAe+5D,EAAQ,SAASJ,CAAO,CAC3C,CACA,EAAO,aAAeK,EAEtB,IAAMC,EAAWF,EAAQ,IACrBC,EACK,UAAU,CAAC,CACX,MAAMh6D,EAAO,OAAO,SAAW,EAAIvlP,EAAU,KAAO,EAAI,CAAC,CAClE,EAEIy/S,EAAc5xW,EAAO,QAAQ03S,EAAO,KAAM,CAC1C,EAAGi6D,EAAS,EACZ,EAAGA,EAAS,EACF,UACd,CAAC,EAWD,OATIA,EAAS,EAAIF,EAAQ,IACrB,EAAcG,EAAY,IAAI,CAC1B,EAAGA,EAAY,EAAIA,EAAY,KACnC,CAAC,GACDD,EAAS,EAAIF,EAAQ,IACrB,EAAcG,EAAY,IAAI,CAC1B,EAAGA,EAAY,EAAIA,EAAY,OAAS,CAC5C,CAAC,GAEE,CACH,KACIX,GAA6Bv5D,EAAO,aAC9BvlP,EAAU,MACVulP,EAAO,WAAa,CAACA,EAAO,QAC1B,GACAA,EAAO,KACnB,WACA,aACA,MAAOvlP,EAAU,MACjB,OAAQy/S,EACR,SACA,MAAO,EACX,CACJ,EAEA,SAAgBC,IACZ,EACA,EACgB,CAChB,GAAIvY,EAAW,WAAW,UAEtB,OAAOA,EAAW,YACZ,IAAuD,EACvD,IAA2D,EAGrE,IACMwY,EAAiB,KAAK,OAExBC,GAAQ,KAAK,IAAInxW,EAAO,MAAOA,EAAO,MAAM,EAAI,IAAM,CAAC,CAC3D,EAEA,OAAO04V,EAAW,YAIZ,CAAC,EAAG,CAAY,EAChB,CAAC,EAAGwY,CAAc,CAC5B,CAEA,SAAgBE,IACZ,EACA,EACU,CAEV,MAAO,CAAC,EAAGnjX,GADQjnC,EAAM,IAAI2iB,CAAI,CAAC,CAAC,OAAO,OAAOy2B,EAChC,CAAU,GAAK,CAAC,CACrC,C,s1GC3NaixW,IAAb,KAAaA,C,gCAaR37Z,E,EAAa+1W,Y,GAIb/1W,E,EAAaokZ,6B,GAQbpkZ,E,EAAa0hW,kB,GAoGb1hW,E,EAAa02W,gB,GAIb12W,E,EAAaqkZ,Y,GAIbrkZ,E,EAAa6jZ,mB,GAKb7jZ,E,EAAa47Z,wB,GAcb57Z,E,EAAag0Y,e,GAIbh0Y,E,EAAa67Z,sB,GAIb77Z,E,EAAa87Z,Y,GAMb97Z,E,EAAaynZ,Y,GAMbznZ,E,EAAa+gW,a,GAIb/gW,E,EAAaymZ,S,GAIbzmZ,E,EAAa25W,a,GAKb35W,E,EAAao1W,e,GAIbp1W,E,EAAa+7Z,S,GAIb/7Z,E,EAAag8Z,gB,GAIbh8Z,E,EAAai8Z,Y,GAIbj8Z,E,EAAaskZ,iB,GAIbtkZ,E,EAAawkZ,a,GAIbxkZ,E,EAAa2+M,kB,GAWb3+M,E,EAAaggN,kB,GAObhgN,E,EAAa4+M,c,GAOb5+M,E,EAAqBk8Z,yB,GA0BrBl8Z,E,EAAaqqD,U,GAIbrqD,E,EAAqBm8Z,a,GAIrBn8Z,E,EAAqBmlZ,a,GA0CrBnlZ,E,EAAqBo8Z,gC,GAoDrBp8Z,E,EAAaohW,Q,GAkBbphW,E,EAAaq8Z,a,GAIbr8Z,E,EAAas8Z,W,GASbt8Z,E,EAAqBu8Z,kB,GAMrBv8Z,E,EAAa6nZ,iB,GAYb7nZ,E,EAAqBw8Z,gB,GAOrBx8Z,E,EAAay8Z,sB,GA0Bbz8Z,E,EAAa08Z,gB,GAIb18Z,E,EAAa+nZ,gB,GAIb/nZ,E,EAAa28Z,Y,GAWb38Z,E,EAAa48Z,qB,GA2Cb58Z,E,EAAa68Z,2B,GASb78Z,E,EAAa88Z,2B,GASb98Z,E,EAAa+8Z,mB,GAcb/8Z,E,EAAqBg9Z,yB,GAOrBh9Z,E,EAAai9Z,qB,GAgFbj9Z,E,EAAapa,W,KAhnBdhoB,QAEAknb,WACA5kM,kCAAyB77L,GAAgB64Y,YACzCx+M,mBAAqBzrC,GAErB,YAAY,CAAEr1M,WAA4C,CACtD,KAAKA,QAAUA,EACf,KAAKknb,WAAalnb,EAAQonb,oBAAsB,IAAI1mM,GAAW,IAAI,EACnE17I,EAAe,IAAI,CACvB,CAEA,IAAcmzS,YAAwB,CAClC,OAAO,KAAKn4Y,QAAQ0zC,KACxB,CAEA,IAAc8yY,6BAAyC,CACnD,OACI,KAAKxmb,QAAQ8jY,kBACb,KAAKujD,eAAe,KAAKlvC,UAAU,CAE3C,CAGA,IAAcrU,kBAA8B,CACxC,IAAIpwV,EAAQ,KAAK8yY,4BAYjB,OATI,KAAKyX,sBAAwB,CAAC,KAAKj+b,QAAQo0a,iBAC3C1gY,EAAQA,EAAMoqV,uCAAA,GAEd,KAAK99X,QAAQo0a,iBACb1gY,EAAQA,EAAMyqV,mCAAmC,CAC7C,KAAK4d,YACL,KAAK5Y,WACR,IAEEzvV,CACX,CAEA2zY,eAAe3zY,EAA6B,CAIxCA,EAAQA,EAAMuoV,uCAAuC,CACjD,KAAK8f,YACL,KAAK5Y,WACR,GAEG,KAAK+6D,aAAex7Y,GAAUh2H,KAAO,KAAKqvd,cAC1CroW,EAAQA,EAAMyjV,mCAAmC,CAAC,KAAK4kB,WAAY,IAEnE,KAAK8tC,aAAennY,GAAUh2H,KAAO,KAAKy2c,cAC1CzvV,EAAQA,EAAMyjV,mCAAmC,CAAC,KAAKgM,WAAY,IAEnE,KAAKujD,iBAAmB,KAAK1mb,QAAQu/b,uBACrC7rZ,EAAQA,EAAMsoV,iCAAiC,KAAK0qD,eAAe,GAIvE,GAAM,CAAC8Y,EAAiBC,GAAiB/rZ,EAAM6mV,cAAc,CACzD,KAAKwhB,YACL,KAAK5Y,WACR,GACDzvV,EAAQA,EAAM0nV,kBACVokE,GAAmB,KACnBC,GAAiB/7Y,KAGrB,CACIhQ,CADA,KAAK0iY,gBAAkBtjX,OAGfpf,EAAMytV,qCACV,KAAK4a,YACL,KAAK5Y,WACT,EALQzvV,EAAMmsV,+BAA+B,KAAKsD,WAAW,EAUjEzvV,EAAQA,EACH2gV,aACG,KAAK0nB,YACLj9b,GACA,gDAEHu1a,aACG,KAAK8O,YACLrkb,GACA,gDASR,GAAM,CAAC4gf,EAAyBC,GAC5BjsZ,EAAM8mV,sBAAsB,CAAC,KAAKuhB,YAAa,KAAK5Y,WAAY,GAMpE,MALAzvV,GAAQA,EAAM0nV,kBACVskE,GAA2B,KAC3BC,GAAyBj8Y,KAGtBhQ,CACX,CAEAksZ,yBAAyBlsZ,EAA6B,CAalD,MAXAA,GAAQA,EACH2gV,aACG,KAAK0nB,YACLj9b,GACA,gDAEHu1a,aACG,KAAK8O,YACLrkb,GACA,gDAED40F,CACX,CAEA,IAAcolW,gBAAiC,CAC3C,OAAOzV,GAAmB,KAAKrjY,QAAQ5C,SAAS,CACpD,CAEA,IAAcqpb,YAAyB,CACnC,OAAO,KAAKzmb,QAAQymb,YAAc,IAAIP,EAC1C,CAEA,IAAcD,mBAA6B,CACvC,OAAO,KAAKQ,WAAWJ,gBAC3B,CAGA,IAAc2X,wBAA0C,CACpD,IAAM5X,EAAc,KAAKttC,eAAerhC,oBAOxC,OALI,KAAKz3W,QAAQu/b,sBAAwB,CAAC,KAAK3Y,YAAYhsE,UAChD,IAAI/5b,IACPiC,GAAasjgB,EAAa,KAAKQ,YAAYnqE,eAAe,GAG3D,IAAI57b,IAAIulgB,EACnB,CAKA,IAAchQ,eAAoC,CAC9C,OAAO,KAAKp2a,QAAQo2a,aACxB,CAEA,IAAc6nB,sBAAgC,CAC1C,MAAO,CAAC,CAAC,KAAKj+b,QAAQi+b,oBAC1B,CAEA,IAAcC,YAAwB,CAClC,OAAO,KAAKl+b,QAAQo0a,eACd1xX,GAAUg8J,OACT,KAAK1+M,QAAQu+b,aAAat3X,WAAavkB,GAAUg8J,MAC5D,CAEA,IAAcmrO,YAAwB,CAClC,OAAO,KAAK7pb,QAAQo0a,eACd1xX,GAAUg8J,OACT,KAAK1+M,QAAQunb,aAAatgX,WAAavkB,GAAUg8J,MAC5D,CAEA,IAAcykL,aAAsB,CAChC,OAAOF,GAAuB,KAAKjjY,OAAO,CAAC,CAAC,EAChD,CAEA,IAAc6ob,SAAsB,CAChC,OAAO,KAAK/kD,iBAAiBr3d,IAAI,KAAK02d,WAAW,CACrD,CAEA,IAAc4Y,aAAsB,CAChC,GAAM,CAAEA,eAAgB,KAAK/7Y,QAC7B,OAAO+7Y,GAAe,KAAK/7Y,QAAQ0zC,MAAMg8U,WAAWr5T,IACxD,CAEA,IAAcmhV,eAAyB,CACnC,OAAO,KAAKx3Y,QAAQ+7Y,cAAgBjpV,MACxC,CAEA,IAAcqrY,SAAsB,CAChC,OAAO,KAAKr6D,iBAAiBr3d,IAAI,KAAKsve,WAAW,CACrD,CAEA,IAAcqiD,gBAAqC,CAC/C,OAAO,KAAKp+b,QAAQo+b,cACxB,CAEA,IAAcC,YAAyB,CACnC,OAAO,KAAKv6D,iBAAiBr3d,IAAI,KAAK2xhB,cAAc,CACxD,CAEA,IAAc1X,iBAAsC,CAChD,OAAO,KAAK1mb,QAAQ0mb,eACxB,CAEA,IAAcE,aAA0B,CACpC,OAAO,KAAK9iD,iBAAiBr3d,IAAI,KAAKi6gB,eAAe,CACzD,CAEA,IAAc3lM,kBAA+B,CACzC,OAGI,KAAK/gP,QAAQwnb,0BAGb,KAAKrvC,WAAW1re,IAAI,KAAKi6gB,eAAe,CAEhD,CAEA,IAActkM,kBAA0D,CACpE,OACItqC,GAAiB2vO,QAAQ,KAAKb,YAAY70Y,GAAG,GAC7C,KAAK/xC,QAAQknb,UAErB,CAEA,IAAclmM,cAAwB,CAElC,MADA,CAAI,KAAK4lM,YAAYhsE,WACd,KAAKgsE,YAAYjrE,2BAA2B91U,KAC9Cx+H,GAAU,CAACsyc,GAAgBtyc,GAEpC,CAEA,IAAsBi3hB,yBAAwC,CAC1D,OAAOx7gB,GACH,KAAK+lgB,QAAQpsE,gBACb,KAAK0hF,QAAQ1hF,eACjB,CACJ,CAEAojF,oBACIpvF,EACA+yB,EACI,CACJ,GAAIA,EAAOl7T,OAAOx5J,OAAQ,CACtB,IAAMgxhB,EACF,KAAKh8D,iBAAiBxE,sBAAsB7uB,GAChD,GAAIqvF,IAAahtY,OAAW0wU,EAAOlsQ,MAAQwoU,OACtC,GAAI,CAAC,KAAKlZ,YAAYhsE,UAAW,CAClC,IAAMwtE,EAAaxhX,GAAO48T,EAAOl7T,MAAM,GAAGgvD,MACpCA,EAAQ,KAAK4vT,WAAWrjM,SAASukM,GACnC9wT,IAAUxkE,SACV0wU,EAAOlsQ,MAAQA,EACfksQ,EAAOu8D,aAAe,GAE9B,CACJ,CACJ,CAEA,IAActzW,UAAmB,CAC7B,OAAO,KAAKzsF,QAAQysF,YACxB,CAEA,IAAsB8xW,aAA0B,CAC5C,OAAO,IAAI9B,GAAW,KAAKz8b,QAAQu+b,YAAa,IAAI,CACxD,CAEA,IAAsBhX,aAA0B,CAC5C,OAAO,IAAIkV,GAAW,KAAKz8b,QAAQunb,YAAa,IAAI,CACxD,CAEAyY,yBAAiC13X,EAAsC,CACnE,GAAM,CAAEi2X,cAAahX,eAAgB,KAarC,OAVIA,EAAY8U,2BACZkC,EAAYlC,0BAEL/zX,EAAO9wG,OAAQuqG,GAEd,CAACw8X,EAAY3B,kBAAkB76X,EAAM3zJ,CAAC,GACtC,CAACm5gB,EAAYqV,kBAAkB76X,EAAMxjG,CAAC,CAE9C,EAEG+pG,CACX,CAEA23X,cAAsBt5E,EAAsC,CACxD,IAAMu5E,EAAQ,KAAKlgc,QAAQmgc,0BACrB,CAAEhC,UAAStV,WAAY,KACvB,CAAEn5D,cAAe,KAAKoU,iBACxBnqT,EAcJ,MAbA,CASIA,EATAumX,IAAU56Y,IAA0B/mF,EAC5Bsqd,GAASxwW,YACbwwW,EAAQltE,2BAA2BgL,EACvC,EACOu5E,IAAU56Y,IAA0Bl3I,EACnC+vhB,GAAS9lX,YACb8lX,EAAQxiF,2BAA2BgL,EACvC,EAEQ+I,EAAW9R,WACf8R,EAAW/T,2BAA2BgL,EAC1C,EAEGhtS,CACX,CAEA,IAAsB6kX,gCAAgD,CAClE,GAAM,CAAEnlE,mBAAkB3J,cAAe,KAAKoU,iBACxC,CAAEq6D,UAAStV,UAASwV,aAAYzX,eAAgB,KAItD,OAAO,KAAKoZ,yBACR,KAAKl8D,iBAAiB/kB,QAAQ/+b,IAAK2mc,IACxB,CACHv4c,EAAG+vhB,EAAQxiF,2BAA2BgL,GACtCpoZ,EAAGsqd,EAAQltE,2BAA2BgL,GACtC/kc,KAAMi4b,IACFwkF,EAAW1iF,2BAA2BgL,GACtC7zT,QAEJwkE,MAAOuiP,IACH+sE,EAAYjrE,2BAA2BgL,GACvC7zT,QAEJ29S,WAAY4oB,EAAiB1d,2BACzBgL,GAEJhtS,MAAO,KAAKsmX,cAAct5E,IAAa,GACvCt2B,UAAWq/B,EAAW/T,2BAClBgL,GAEJ7ua,KAAM,CACF1pC,EAAG+vhB,EAAQriF,mBACNH,2BAA2BgL,GAChCpoZ,EAAGsqd,EAAQ/sE,mBACNH,2BAA2BgL,GAIhCllb,KAAM,KAAKu+D,QAAQo0a,eACb,CACIyU,EAAQ7sE,wBACHL,2BACDgL,GAEJkiE,EAAQ/sE,mBACHH,2BACDgL,EAER,EACA7zT,MACV,CACJ,EACJ,EAER,CAEA,IAAc0wU,QAA0B,CACpC,OAAOx9U,OAAOtjF,QACV5jB,GAAU,KAAK0/e,+BAAiC/wgB,GAAMA,EAAEgjb,UAAU,GACpEzwb,KAAK,CAACywb,EAAYnoS,KAAA,CAEhB,IAAMk7T,EAAwB,CAC1BC,WAAYhzB,EACZ92R,MAHoBuqT,GAAsBzzB,CAGnC43E,GAAmB53E,EAC1Bn5O,MAAOu5T,IACPvoX,SACAvc,MAAO,KAAK06X,WAAW55gB,MAAM4jc,EACjC,EAEA,OADA,KAAKovF,oBAAoBpvF,EAAY+yB,GAC9BA,CACX,EACJ,CAGA,IAAci7D,aAAuB,CACjC,OAAO,KAAKj7D,OAAO39V,KAAM7mF,GAAMA,EAAEspH,OAAOx5J,OAAS,EACrD,CAEA,IAAc4vhB,WAA2B,CACrC,OAAO,KAAKl7D,OAAOzsT,QAASysT,GAAWA,EAAOl7T,MAAM,CACxD,CAOA,IAAsBq2X,kBAAiC,CACnD,OAAO,KAAKvoB,gBAAkBtjX,OAExB,CAAC,KAAKqrY,QAAS,KAAKtV,OAAO,EAD3B,CAAC,KAAKA,OAAO,CAEvB,CAEA,IAAcoB,iBAAsC,CAGhD,GAAI,MAAKzyC,cAET,OAAOsxC,GAAoB,CACvB3wC,WAAY,KAAKA,WACjBrU,iBAAkB,KAAKA,iBACvB34T,QAAS,KAAKwzX,gBAClB,EACJ,CAEA,IAAsBC,gBAAgC,CAClD,IAAMwB,EAAiB,KAAKpC,uBAC5B,OAAO,KAAKU,UAAUlne,OACjBuqG,GAAUA,EAAM0uS,YAAc2vF,EAAe1zhB,IAAIq1J,EAAM0uS,UAAU,EAE1E,CAEA,IAAcouF,sBAAsC,CAOhD,MALI,CAAC,KAAK/lD,eAAenhC,qBACrB,CAAC,KAAK33W,QAAQmsD,gBAEP,KAAKuyY,UAET,KAAKE,eAAe9vhB,OAAS,KAAK8vhB,eAAiB,KAAKF,SACnE,CAGA2B,cAAsB/nhB,EAAuC,CACzD,IAAM2uJ,EAAY3uJ,IAAa,IAAM,KAAK4lhB,WAAa,KAAKrU,WACtDY,EACFxjX,IAAcvkB,GAAUh2H,IAAM,CAAC,EAAG,GAAG,EAAI,CAAC,GAAI,CAAC,EACnD,OACIq6I,GACI,KAAK83X,qBAAqB7+gB,IAAK+hJ,GAAUA,EAAMzpJ,EAAS,EACxD2uJ,EACA,KAAKjnE,QAAQmsD,iBAAmB,KAAKyyY,eAAe9vhB,OAC9C,IACA,IACL27gB,CAEb,CAEA,IAAcqU,gBAAmC,CAC7C,OAAO,KAAKuB,cAAc,IAC9B,CAEA,IAAclW,gBAAmC,CAC7C,OAAO,KAAKkW,cAAc,IAC9B,CAEA,IAActB,YAA+B,CAQzC,OAPI,KAAKV,WAAWzjF,UAAkB,CAAC,EAAG,GAAG,EAEzC,KAAK56W,QAAQsgc,oCACb,KAAKtB,oBAAoBp9gB,KAElB,KAAKo9gB,oBAAoBp9gB,KAE7Bk8gB,IAAkB,KAAKh6D,iBAAkB,KAAKu6D,WAAWhoY,IAAI,CACxE,CAEA,IAAc2oY,qBAIZ,CACE,GAAM,CAAE7mD,cAAe,KACjB,CAAEyuB,qBAAoB25B,oBAAqB,KAAKvgc,QAEtD,GAAI,CAAC4ma,GAAsB,CAAC25B,EAAkB,MAAO,CAAC,EAEtD,IAAI7sZ,EAAQykW,EAAW/c,kBACnBwrC,EACA25B,GAGA,KAAKvgc,QAAQu/b,sBAAwB,CAAC,KAAK3Y,YAAYhsE,YACvDlnU,EAAQA,EAAM+mV,oBACV/mV,EAAMjnI,IAAI,KAAKi6gB,eAAe,EAAEjqE,eACpC,GAGJ/oU,EAAQA,EACH2gV,aACG,KAAK0nB,YACLj9b,GACA,gDAEHu1a,aACG,KAAK8O,YACLrkb,GACA,gDAGR,IAAMoxe,EAAUx8Y,EAAMjnI,IAAI,KAAKsve,WAAW,EAAEx2L,WACtCn7H,EAAU12C,EAAMjnI,IAAI,KAAK02d,WAAW,EAAE59K,WAE5C,MAAO,CACHn3S,EAAG24J,GAAampX,EAAS,KAAKgO,UAAU,EACxC3/d,EAAGwoG,GAAaqjB,EAAS,KAAKy/V,UAAU,EACxCjogB,KAAMk8gB,IAAkBpqZ,EAAO,KAAK2qZ,WAAWhoY,IAAI,CACvD,CACJ,CAEA,IAAc4oY,2BAAsC,CAChD,GAAM,CAAEf,aAAYW,wBAAyB,KAEvC/ogB,EAAS+ogB,EAAqB7+gB,IAAK+hJ,GAAUA,EAAM3zJ,CAAC,EAC1D,OAAO8vhB,IAAex7Y,GAAUh2H,IAC1BoJ,EAAO0hC,OAAQ5uC,GAAMA,EAAI,GACzBkN,CACV,CAEA,IAAcopgB,2BAAsC,CAChD,GAAM,CAAErV,aAAYgV,wBAAyB,KAEvC/ogB,EAAS+ogB,EAAqB7+gB,IAAK+hJ,GAAUA,EAAMxjG,CAAC,EAC1D,OAAOsrd,IAAennY,GAAUh2H,IAC1BoJ,EAAO0hC,OAAQ5uC,GAAMA,EAAI,GACzBkN,CACV,CAEA,IAAcqpgB,mBAA4B,CAGtC,IAAIxlX,EAFgB,KAAK35E,QAAQunb,aAER5tW,OAAS,KAAKkvW,SAAS9yE,aAAe,GAQ/D,OANI,KAAK/1W,QAAQo0a,gBAAkBz6V,GAASA,EAAM7qK,OAAS,IACvD6qK,EAAQ,4BAA4BxJ,GAChCwJ,MAIDA,EAAM7qC,KAAA,CACjB,CAEA,IAAsBswZ,yBAAkC,CACpD,IAAMoB,EAAW,KAAKrC,SAASpoF,aAAe,GAG9C,OAFI,KAAKqgE,gBAAkBtjX,OAEpB0tY,EADI,GAAGA,EAAS,MAAM,KAAKpqB,eAEtC,CAEA,IAAcipB,qBAA8B,CAGxC,IAAI1lX,EAFgB,KAAK35E,QAAQu+b,aAER5kX,OAAS,KAAKylX,wBAOvC,OANI,KAAKp/b,QAAQo0a,gBAAkBz6V,GAASA,EAAM7qK,OAAS,IACvD6qK,EAAQ,4BAA4BxJ,GAChCwJ,MAIDA,EAAM7qC,KAAA,CACjB,CAEA25Y,iBAAiB1ia,EAAoC,CACjD,IAAMysF,EAAOzsF,EAAO0ia,iBAAA,EAOpB,GALAj2U,EAAKm0U,aAAe,KAAKwX,QACzB3rV,EAAKvrC,UAAY,KAAKi3X,WAElB,KAAKmB,sBAAqB7sV,EAAK74B,MAAQ,KAAK0lX,qBAG5C,KAAKr/b,QAAQsgc,oCACb,KAAKtB,oBAAoB5whB,EAEzBokM,EAAKk2U,mCAAmC,KAAKsW,oBAAoB5whB,CAAC,OAC/D,GAAI,KAAK4xF,QAAQo0a,eACpB5hU,EAAK72I,OAAS,KAAKmje,mBAChB,CACH,IAAM2B,EACF,KAAKxB,0BAA0Bp5Z,KAC1Bx+H,GAAUA,EAAQmrM,EAAK72I,OAAO,IAAMt0D,EAAQmrM,EAAK72I,OAAO,EAC7D,GAKA,IAAI96C,IAAI,KAAKo+gB,yBAAyB,EAAEr9gB,KAAO,GAC/C6+gB,IAEAjuV,EAAKk2U,mCAAmC,KAAKoW,cAAc,CAEnE,CAEA,OAAOtsV,CACX,CAEAo2U,eAAe7ia,EAAkC,CAC7C,IAAMysF,EAAOzsF,EAAO6ia,eAAA,EAMpB,GAJAp2U,EAAKm0U,aAAe,KAAKkC,QACzBr2U,EAAKvrC,UAAY,KAAK4iX,WAClB,KAAKsV,oBAAmB3sV,EAAK74B,MAAQ,KAAKwlX,mBAG1C,KAAKn/b,QAAQsgc,oCACb,KAAKtB,oBAAoBzge,EAEzBi0I,EAAKk2U,mCAAmC,KAAKsW,oBAAoBzge,CAAC,OAC/D,GAAI,KAAKyhC,QAAQo0a,eACpB5hU,EAAK72I,OAAS,KAAKwud,mBAChB,CACH,IAAMsW,EACF,KAAKvB,0BAA0Br5Z,KAC1Bx+H,GAAUA,EAAQmrM,EAAK72I,OAAO,IAAMt0D,EAAQmrM,EAAK72I,OAAO,EAC7D,GAKA,IAAI96C,IAAI,KAAKq+gB,yBAAyB,EAAEt9gB,KAAO,GAC/C6+gB,IAEAjuV,EAAKk2U,mCAAmC,KAAKyB,cAAc,CAEnE,CAEA,OAAO33U,CACX,CAEA,IAAcxqF,WAA4B,CACtC,GAAI,KAAK6ga,QAAQjuE,UAAW,MAAO,CAAE74Z,OAAQ,yBAA0B,EAEvE,GAAI,KAAKo8e,QAAQvjF,UAAW,MAAO,CAAE74Z,OAAQ,yBAA0B,EAEvE,GAAM,CAAEi9b,mBAAmB,YAAe,KAAKh/Y,QAqB/C,OApBIlhD,GAAU,KAAKw/e,uBAAuB,EAElC,KAAKt+b,QAAQo0a,gBACb,KAAKp0a,QAAQm2a,aACb,KAAKn2a,QAAQ/3D,YAAc,KAAK+3D,QAAQ93D,QAEjC,CACH6Z,OAAQ,2DACZ,EAEG,CACHA,OAAQ,MAAMi9b,EAAiB,4BACnC,EAGAlgc,GAAU,KAAK0kb,MAAM,EACd,CACHzhb,OAAQ,mBAAmBi9b,GAC/B,EAEG,CAAEj9b,OAAQ,EAAG,CACxB,CACJ,E,s1GCzpBa2+e,IAAb,KAAaA,C,gCAaRt+Z,E,EAAa+1W,Y,GAIb/1W,E,EAAa0hW,kB,GAoDb1hW,E,EAAa02W,gB,GAIb12W,E,EAAaqkZ,Y,GAIbrkZ,E,EAAa6jZ,mB,GAab7jZ,E,EAAa+gW,a,GAMb/gW,E,EAAaymZ,S,GAIbzmZ,E,EAAaukZ,c,GAIbvkZ,E,EAAa25W,a,GAIb35W,E,EAAa+7Z,S,GAKb/7Z,E,EAAaskZ,iB,GAIbtkZ,E,EAAa6nZ,iB,GAQb7nZ,E,EAAawkZ,a,GAIbxkZ,E,EAAaggN,kB,GAObhgN,E,EAAa2+M,kB,GAQb3+M,E,EAAqBs4K,a,GASrBt4K,E,EAAau+Z,c,GAIbv+Z,E,EAAa82L,I,GAIb92L,E,EAAa+2L,I,GAIb/2L,E,EAAaw+Z,yB,GAwBbx+Z,E,EAAqBy+Z,mB,GAIrBz+Z,E,EAAaohW,Q,GAyCbphW,E,EAAa4lZ,c,GAqBb5lZ,E,EAAa0+Z,gB,GAQb1+Z,E,EAAa+nZ,gB,GASb/nZ,E,EAAa08Z,gB,GAQb18Z,E,EAAqB2+Z,gB,GAOrB3+Z,E,EAAqB4+Z,mB,GAIrB5+Z,E,EAAai9Z,qB,GA4Cbj9Z,E,EAAapa,W,KA9UdhoB,QAEAknb,WACA5kM,kCAAyB77L,GAAgB64Y,YACzCx+M,mBAAqBzrC,GAErB,YAAY,CAAEr1M,WAA+C,CACzD,KAAKA,QAAUA,EACf,KAAKknb,WAAalnb,EAAQonb,oBAAsB,IAAI1mM,GAAW,IAAI,EACnE17I,EAAe,IAAI,CACvB,CAEA,IAAcmzS,YAAwB,CAClC,OAAO,KAAKn4Y,QAAQ0zC,KACxB,CAEA,IAAcowV,kBAA8B,CACxC,GAAM,CAAEqU,cAAe,KACvB,OAAO,KAAKn4Y,QAAQ8jY,kBAAoB,KAAKujD,eAAelvC,EAChE,CAEAkvC,eAAe3zY,EAA6B,CACxC,GAAM,CAAEyvV,cAAanjY,UAAS0mb,kBAAiB3qC,eAAgB,KAC/D,GAAI5Y,IAAgBrwU,OAAW,OAAOpf,EAGtCA,EAAQA,EAAM2jV,sCAAsC,CAAC8L,CAAY,GAE7DujD,GAAmB1mb,EAAQu/b,uBAC3B7rZ,EAAQA,EAAMsoV,iCAAiC0qD,IAInD,IAAMua,EAAUllD,EAAc,CAACA,EAAa5Y,CAAW,EAAI,CAACA,CAAW,EACjE,CAACq8D,EAAiBC,GAAiB/rZ,EAAM6mV,cAAc0mE,GA+B7D,MA9BAvtZ,GAAQA,EAAM0nV,kBACVokE,GAAmB,KACnBC,GAAiB/7Y,KAGrBhQ,EAAQA,EAAMmsV,+BAA+BsD,GAEzC4Y,IACAroW,EAAQA,EAAMmsV,+BAA+Bkc,IAE5C/7Y,EAAQ2sD,iBACTjZ,EAAQA,EAAM2iV,qCAAqC,CAAC8M,CAAY,IAEhE4Y,IACAroW,EAAQA,EAAMsoV,iCAAiC+f,IAC/C/7Y,EAAQo0a,iBAER1gY,EAAQA,EAAMsoV,iCACVtoV,EAAMg8U,WAAWr5T,IACrB,EACI0lV,IACAroW,EAAQA,EAAMspV,sCAAsC+e,GAGpD/1V,OAAOhjC,OAAO0wB,EAAMjnI,IAAIsve,IAAchqW,IAAK,CACvCt1G,KAAM,gBACV,KAIDi3G,CACX,CAEA,IAAcolW,gBAAiC,CAC3C,OAAOzV,GAAmB,KAAKrjY,QAAQ5C,SAAS,CACpD,CAEA,IAAcqpb,YAAyB,CACnC,OAAO,KAAKzmb,QAAQymb,YAAc,IAAIP,EAC1C,CAEA,IAAcD,mBAA6B,CACvC,OAAO,KAAKQ,WAAWJ,gBAC3B,CAEA6a,sBAA8BzwF,EAA0C,CAMpE,OAAO,IAAIoyB,GAJP,KAAK4jD,WAAW/5gB,IAAI+jc,IACpB,KAAKqoC,eAAelhC,YAAYlrc,IAAI+jc,GAEpC,KAAKg2E,WAAWJ,kBAAoB,KAAKvtC,eAAephC,YAClBypF,CAC9C,CAEA,IAAch+D,aAAkC,CAG5C,OADI,KAAKnjY,QAAQkjY,cAAgBD,GAAuB,KAAKjjY,OAAO,GACvD,EACjB,CAEA,IAAc6ob,SAAsB,CAChC,OAAO,KAAK/kD,iBAAiBr3d,IAAI,KAAK02d,WAAW,CACrD,CAEA,IAAcwjD,cAA2B,CACrC,OAAO,KAAKkC,OAChB,CAEA,IAAc9sC,aAAkC,CAC5C,OAAO,KAAK/7Y,QAAQ+7Y,WACxB,CAEA,IAAcoiD,SAAkC,CAC5C,GAAI,KAAKpiD,cAAgBjpV,OACzB,OAAO,KAAKgxU,iBAAiBr3d,IAAI,KAAKsve,WAAW,CACrD,CAEA,IAAc2qC,iBAAsC,CAChD,OAAO,KAAK1mb,QAAQ0mb,eACxB,CAEA,IAAcuD,iBAAsC,CAChD,OAAOnB,GAAoB,CACvB3wC,WAAY,KAAKA,WACjBrU,iBAAkB,KAAKA,iBACvB34T,QAAS5E,GAAiB,CAAC,KAAKsiX,QAAS,KAAKsV,OAAQ,EAC1D,EACJ,CAEA,IAAcvX,aAA0B,CACpC,OAAO,KAAK9iD,iBAAiBr3d,IAAI,KAAKi6gB,eAAe,CACzD,CAEA,IAActkM,kBAA0D,CACpE,OACItqC,GAAiB2vO,QAAQ,KAAKb,YAAY70Y,GAAG,GAC7C,KAAK/xC,QAAQknb,UAErB,CAEA,IAAcnmM,kBAA+B,CACzC,GAAM,CAAE/gP,UAASm4Y,cAAe,KAChC,OACIn4Y,EAAQwnb,0BACRrvC,EAAW1re,IAAI,KAAKi6gB,eAAe,CAE3C,CAEA,IAAsBhsO,aAA2B,CAC7C,OACK,KAAK16M,QAAQg4M,gBACRgO,GAAav5S,IAAI,KAAKuzF,QAAQg4M,eAAe,EAC7CllJ,SACNkzJ,GAAav5S,IAAIg6I,GAAgB,gBAAgB,CAEzD,CAEA,IAAck6Y,cAAsB,CAChC,OAAO,KAAK9X,QAAQ92Y,IAAIulF,OAAS,KAAKojF,YAAYkoC,UAAU,EAAE,CAAC,EACnE,CAEA,IAAc1pB,IAAa,CACvB,MAAO,EACX,CAEA,IAAcC,IAAa,CACvB,MAAO,EACX,CAEA,IAAcynO,yBAAwD,CAClE,GAAM,CAAEha,cAAaM,aAAY2Z,qBAAsB,KAEjDO,EADkBxa,EAAYhsE,UAG9B9nT,OADA8zX,EAAYhqE,qBAEZykF,EAAiB,IAAIxhhB,IAC3B,GAAIghhB,IAAsB/tY,OACtB,IAAK,IAAMjqJ,KAAQg4hB,EAAmB,CAClC,IAAMS,EAAmBF,GAAmB30hB,IAAI5D,KAAQ,GAExD,GAAIy4hB,EAAkB,CAClB,IAAMhqU,EAAQ4vT,EAAWrjM,SAASy9M,EAAiBj6hB,KAAK,EACpDiwN,GACA+pU,EAAe70hB,IAAI3D,EAAM,CACrByuN,QACAgqU,iBAAkBA,EAAiBj6hB,KACvC,EACR,CACJ,CAEJ,OAAOg6hB,CACX,CAEA,IAAsBR,mBAA8C,CAChE,OAAO,KAAK1C,SAAS1hF,iBAAmB,KAAKosE,QAAQpsE,eACzD,CAEA,IAAc+mB,QAAqC,CAC/C,GAAM,CACF26D,UACAtV,UACA8X,eACAC,0BACAC,qBACA,KAEJ,GAAIA,IAAsB/tY,OAAW,MAAO,GAE5C,IAAMyuY,EAAgB1Y,EAAQjsE,qBACxB4kF,EAAgBrD,GAASvhF,qBAE/B,OAAOr2S,GACHs6X,EAAkB7ghB,IAAKywb,IACnB,IAAMgxF,EAAOD,GAAe/0hB,IAAIgkc,KAAc,GAC9C,GAAI0tF,GAAW,CAACsD,EAAM,OAEtB,IAAMC,EAAOH,EAAc90hB,IAAIgkc,KAAc,GACvCkxF,EAAcf,EAAwBn0hB,IAAIgkc,GAEhD,MAAO,CACHgzB,WAAYhzB,EACZA,aACA43E,gBAAiBnkD,GAAsBzzB,GACvCmxF,OAAQH,EACF,CAAEp6hB,MAAOo6hB,EAAKp6hB,MAAOywC,KAAM2pf,EAAKhiF,YAAa,EAC7C3sT,OACN+uY,OAAQH,EACF,CAAEr6hB,MAAOq6hB,EAAKr6hB,MAAOywC,KAAM4pf,EAAKjiF,YAAa,EAC7C3sT,OACNwkE,MAAOqqU,GAAarqU,OAASqpU,EAC7BgB,cACA51Y,MAAO,KAAKm1Y,sBAAsBzwF,EACtC,CACJ,GAER,CAGA,IAAcu3E,cAAkC,CAa5C,GAAM,CAAC8Z,EAAkBC,GAAuBjjf,GAPrBA,GAAS,KAAK0kb,OAAQ,CAL/BA,GACdA,EAAOq+D,QAAQx6hB,OAAS,EACNm8d,GAClBA,EAAO/yB,UAKV,GAAE5tH,WAKCm/M,EACCx+D,GAAWA,EAAOq+D,SAAW/uY,QAGlC,MAAO,CAAIgvY,KAAqBC,IAAmB,CACvD,CAEA,IAAcjB,gBAAoC,CAC9C,IAAMlpF,EAAc,KAAKkhC,eAAelhC,YAExC,OADIA,EAAYh2b,OAAS,EAAU,GAC5B,KAAKomgB,aAAaxwd,OAAQgsa,GAC7B5rB,EAAYlrc,IAAI82d,EAAO/yB,UAAU,EAEzC,CAEA,IAAc05E,gBAAmC,CAE7C,IAAMr0f,EAAS,KAAK+yf,QAAQlsE,SAAS38b,IAAK2tK,GAAQA,EAAItmL,KAAK,EAC3D,MAAO,CACHq8J,KAAK/0J,IAAI,KAAKwqT,GAAIr6Q,GAAMhpB,IACxB4tI,KAAKh1J,IAAI,KAAKyqT,GAAIr6Q,GAAMhpB,GAC5B,CACJ,CAEA,IAAcgpgB,gBAAmC,CAC7C,GAAM,CAAEX,WAAY,KACpB,GAAIA,IAAYrrY,OAAW,CACvB,IAAM5sB,EAAMpnF,GAAQq/e,EAAQxhF,SAAWhvR,GAAQA,EAAItmL,KAAK,EACxD,MAAO,CAAC,KAAK6xT,GAAIhzL,CAAG,CACxB,CAAO,MAAO,CAAC,KAAKgzL,GAAI,KAAKsqK,OAAO10d,MAAM,CAC9C,CAEA,IAAsBiyhB,gBAAyB,CAC3C,IAAMP,EAAW,KAAKQ,kBAGtB,OAFI,KAAKhhc,QAAQo2a,gBAAkBtjX,OAE5B0tY,GAAY,GADR,GAAGA,EAAS,MAAM,KAAKxgc,QAAQo2a,eAE9C,CAEA,IAAsB4qB,mBAAwC,CAC1D,OAAO,KAAK7C,SAASpoF,WACzB,CAEA,IAAcspF,qBAA8B,CACxC,GAAM,CAAE0B,kBAAmB,KAE3B,OADe,KAAK/gc,QAAQu+b,aACb5kX,OAASonX,CAC5B,CAEAtY,iBAAiB1ia,EAAoC,CACjD,IAAIysF,EAAOzsF,EAAO0ia,iBAAA,EAuBlB,OAtBI,KAAKzob,QAAQo0a,gBAAkB,KAAK+pB,SAIpC3rV,EAAO,IAAIynV,IACP,IAAIwC,GACA,CAAE,GAAG12a,EAAOl+G,SAAA,EAAYyuhB,SAAU,EAAG,EACrCvwa,EAAOuxa,WACX,EACAvxa,EAAOuxa,WACX,EACA9kV,EAAK72I,OAAS,CAAC,EAAG,GAAG,GAErB62I,EAAKk2U,mCAAmC,KAAKoW,cAAc,EAI/DtsV,EAAKvrC,UAAYvkB,GAAUg8J,OAC3BlsG,EAAKm0U,aAAe,KAAKwX,QAEzB3rV,EAAK74B,MAAQ,KAAK0lX,oBAEX7sV,CACX,CAEAo2U,eAAe7ia,EAAkC,CAC7C,IAAMysF,EAAOzsF,EAAO6ia,eAAA,EAOpB,OANAp2U,EAAKk2U,mCAAmC,KAAKyB,cAAc,EAE3D33U,EAAKvrC,UAAYvkB,GAAUg8J,OAC3BlsG,EAAKm0U,aAAe,KAAKA,aACzBn0U,EAAK74B,MAAQ,GAEN64B,CACX,CAEA,IAAcxqF,WAA4B,CAItC,OAHI,KAAKm7W,cAAgBrwU,OACd,CAAE/wG,OAAQ,sBAAuB,EAErC,KAAK8me,QAAQnmZ,QACd,CAAE3gF,OAAQ,kBAAmB,EAC7B,CAAEA,OAAQ,EAAG,CACvB,CACJ,ECzVakgf,IAAkB5sP,GAElB6sP,IAAmC,CAC5CC,SAAUppP,EAAmBqpP,aAC7BC,SAAUtpP,EAAmBupP,KACjC,EAEaC,IAAqBntP,GAStBotP,GAAL,SAAAA,EAAA,C,MACHA,GAAAC,UAAA,YACAD,EAAAE,UAAA,Y,CACJ,MAgEMC,GAAwC,CAC1CzvX,QAAS,EACT0vX,WAAYztP,EAChB,EAEa0tP,GAAkD,EAC1Dxf,EAASyf,SAAUH,IACnBtf,EAAS0f,UAAWJ,IACpBtf,EAAS2f,aAAc,CACpB,GAAGL,GACHC,WAAY1tP,EAChB,GACCmuO,EAAS4f,OAAQ,CACd,GAAGN,GACHzvX,QAAS88R,EACb,CACJ,EAOakzF,IAAqB,CAC9BhhZ,GAAOiqY,OACPjqY,GAAOuuT,WACPvuT,GAAO8+E,MACP9+E,GAAOxkE,OACPwkE,GAAO64C,OACP74C,GAAOqlB,WACPrlB,GAAOslB,QACX,ECnIa27X,GAAiC,CAC1C,eAAgBh4Y,GAAuB,MACvC,eAAgBG,GAAuB,QAC3C,EAEM83Y,IAAN,KAAkC,CAC9B,eACID,GAA+B,eACnC,eACIA,GAA+B,eACnC,cAAuC,CAAC,EAExC,aAAc,CACVn+V,EAAe,KAAM,CACjB,eAAgBnS,EAAW,IAC3B,eAAgBA,EAAW,IAC3B,cAAeA,EAAW,GAC9B,CAAC,CACL,CACJ,EAEawwW,IAAb,cACYD,GAEZ,CACI,iBAAiB,EAAkD,CAC/Dx2V,GAAmB,KAAM19L,CAAG,CAChC,CAEA,UAA4D,CACxD,IAAMA,EAAMq9L,GACR,IACJ,EAEA,OADAS,GAA+B99L,EAAK,IAAIk0hB,GAA6B,EAC9Dt6X,GAAW55J,CAAG,CACzB,CAEA,YAAY,EAA6C,CACrD,MAAM,EACFA,GAAK,KAAK,iBAAiBA,CAAG,CACtC,CACJ,E,s1GCVao0hB,IAAb,KAAaA,C,gCAQRlha,E,EAAa+1W,Y,GAIb/1W,E,EAAa0hW,kB,GAqBb1hW,E,EAAa02W,gB,GAIb12W,E,EAAaqkZ,Y,GAIbrkZ,E,EAAa8gW,c,GAIb9gW,E,EAAa2hW,U,GAIb3hW,E,EAAaymZ,S,GAIbzmZ,E,EAAaukZ,c,GAIbvkZ,E,EAAan6F,W,GAIbm6F,E,EAAal6F,S,GASbk6F,E,EAAawnH,M,GAMbxnH,E,EAAamha,c,GASbnha,E,EAAaoha,iB,GAYbpha,E,EAAaqha,gB,GAObrha,E,EAAasha,gB,GAObtha,E,EAAqB0iZ,gB,GAIrB1iZ,E,EAAqBokW,Y,GAIrBpkW,E,EAAqBikW,Y,GAiJrBjkW,E,EAAqBuha,gB,GAMrBvha,E,EAAaohW,Q,GAqBbphW,E,EAAampZ,mB,GAQbnpZ,E,EAAaujZ,W,GAObvjZ,E,EAAa6nZ,iB,GAQb7nZ,E,EAAa+nZ,gB,GAKb/nZ,E,EAAapa,W,KA9TdhoB,QAEA,YAAY,CAAEA,WAA8C,C,UACxD,KAAKA,QAAUA,EACfglG,EAAe,IAAI,CACvB,CAEA,IAAcmzS,YAAwB,CAClC,OAAO,KAAKn4Y,QAAQ0zC,KACxB,CAEA,IAAcowV,kBAA8B,CACxC,OACI,KAAK9jY,QAAQ8jY,kBACb,KAAKujD,eAAe,KAAKlvC,UAAU,CAE3C,CAEAkvC,eAAe3zY,EAA6B,CAWxC,MAVAA,GAAQA,EAAM+mV,oBACV,KAAKqe,eAAerhC,mBACxB,EAEA/jU,EAAQA,EAAM2jV,sCAAsC,KAAK6L,YAAY,EAErE,KAAKA,aAAapid,QAASu1I,IACvB3iB,EAAQA,EAAMmsV,+BAA+BxpU,EACjD,GAEO3iB,CACX,CAEA,IAAcolW,gBAAiC,CAC3C,OAAOzV,GAAmB,KAAKrjY,QAAQ5C,SAAS,CACpD,CAEA,IAAcqpb,YAAyB,CACnC,OAAO,KAAKzmb,QAAQymb,YAAc,IAAIP,EAC1C,CAEA,IAAchjD,cAA6B,CACvC,OAAOD,GAAuB,KAAKjjY,OAAO,CAC9C,CAEA,IAAc+jY,UAAyB,CACnC,OAAO,KAAKb,aAAaljd,IAAKq2I,GAAS,KAAKytU,iBAAiBr3d,IAAI4pJ,GACrE,CAEA,IAAcwyX,SAAsB,CAChC,OAAO,KAAK9kD,SAAS,EACzB,CAEA,IAAc4iD,cAA2B,CACrC,OAAO,KAAK5iD,SAAS,EACzB,CAEA,IAAc97b,WAAoB,CAC9B,OAAO,KAAK67b,iBAAiBljT,SAAW,CAC5C,CAEA,IAAc14I,SAAkB,CAC5B,OAAO,KAAK47b,iBAAiBhjT,SAAW,CAC5C,CAOA,IAAc8oE,MAAqB,CAC/B,OAAO,KAAKs5O,aAAap0d,OAAS,EAC5B0zhB,GAAaoB,UACbpB,GAAaqB,SACvB,CAEA,IAAcN,cAA+C,CACzD,GAAM,CAACO,EAAaC,GAAa,KAAKhgE,SACtC,MAAO,CACHvod,MAAOsohB,GAAa/xZ,IAAIulF,OAASirU,IACjCh8e,IAAKw9e,GAAWhyZ,IAAIulF,gBACxB,CACJ,CAGA,IAAcksU,iBAAmD,CAC7D,IAAMQ,EAAgB,KAAKhkc,QAAQikc,UAAUD,cAC7C,MAAO,CACH7B,SACI6B,GAAe7B,UACfD,IAAiCC,SACrCE,SACI2B,GAAe3B,UACfH,IAAiCG,QACzC,CACJ,CAEA,IAAcoB,gBAAyC,CACnD,OACI,KAAKzjc,QAAQikc,UAAUR,gBACvBN,GAA+BM,cAEvC,CAEA,IAAcC,gBAAyC,CACnD,OACI,KAAK1jc,QAAQikc,UAAUP,gBACvBP,GAA+BO,cAEvC,CAEA,IAAsB5e,gBAA6C,CAC/D,OAAOF,GAAkB,KAAKzsC,WAAY,KAAKjV,aAAa,EAAE,CAClE,CAEA,IAAsBsD,YAAyB,CAC3C,OAAO,KAAKxmY,QAAQwmY,YAAc,CAAC,CACvC,CAEA,IAAsBH,YAAqC,CACvD,IAAMoqD,EAAiB,KAAKjqD,WAAWiqD,eACvC,GAAI,CAACA,EAAgB,OAErB,IAAMpqD,EAAa,KAAKvC,iBAAiBr3d,IAAIgkhB,GAC7C,GAAIpqD,GAAc,CAACA,EAAWzrB,UAAW,OAAOyrB,CAGpD,CAGA69D,6BAAwD,CACpD,GAAM,CACFrb,UACA5gf,YACAC,UACAu+e,aACA3B,iBACA0e,gBAAiBl+O,GACjB,KAEJ,OAAO,KAAKwzL,eAAerhC,oBACtBz3b,IAAKywb,IACF,IAAM0zF,EACFtb,EAAQhsE,2BAA2Bpwc,IAAIgkc,GAErC2tB,EAAW+lE,GAAY13hB,IAAIw7B,GAC3Bo2b,EAAS8lE,GAAY13hB,IAAIy7B,GAS/B,GALI,OAAOk2b,GAAU/2d,OAAU,UAC3B,OAAOg3d,GAAQh3d,OAAU,UAKzB,CAAC4/d,IAAyB,CACtBzrd,MAAO4id,EACP73a,IAAK83a,EACL7yT,UAAWq9W,EAAQr9W,SACvB,GAEA,OAIJ,IAAM8rD,EACF8mQ,EAAS/2d,QAAUg3d,EAAOh3d,MACpB46hB,IACA7jE,EAAS/2d,MAAQg3d,EAAOh3d,MACtBi+S,EAAO68O,SACP78O,EAAO+8O,SAEb7mhB,EAAQ,CACVnU,MAAO+2d,EAAS/2d,MAChBywC,KAAMsmb,EAAS3e,aACfnoP,OACJ,EACM/wK,EAAM,CACRl/C,MAAOg3d,EAAOh3d,MACdywC,KAAMumb,EAAO5e,aACbnoP,OACJ,EAEM+wT,EAAkBnkD,GAAsBzzB,GAQ9C,MAAO,CACHgzB,WAAYhzB,EACZA,aACAsF,YAVgBsyE,GAAmB53E,EAWnC43E,kBACAp3V,WAVe4zV,GACfC,EACAr0E,CAQAx/Q,EACAqmC,QACA97M,QACA+qC,MACAwlG,MAAO06X,EAAW55gB,MAAM4jc,EAC5B,CACJ,GACCj5Y,OAAQgsa,GAAWA,IAAW1wU,OACvC,CAGAsxY,8BAAyD,CACrD,GAAM,CAAEl8f,UAASu+e,aAAY3B,iBAAgBye,gBAAiB,KACxD,CAACO,EAAaC,GAAa,KAAKhgE,SAItC,MAFI,CAAC+/D,GAAe,CAACC,EAAkB,GAEhC,KAAKjrD,eAAerhC,oBACtBz3b,IAAKywb,IACF,IAAM2tB,EAAW0lE,EAAYjnF,2BACxBpwc,IAAIgkc,IACHhkc,IAAIy7B,GACJm2b,EAAS0lE,EAAUlnF,2BACpBpwc,IAAIgkc,IACHhkc,IAAIy7B,GAGV,GACI,OAAOk2b,GAAU/2d,OAAU,UAC3B,OAAOg3d,GAAQh3d,OAAU,SAEzB,OAEJ,IAAMmU,EAAQ,CACVnU,MAAO+2d,EAAS/2d,MAChBywC,KAAMsmb,EAAS3e,aACfnoP,MAAOisU,EAAa/nhB,KACxB,EACM+qC,EAAM,CACRl/C,MAAOg3d,EAAOh3d,MACdywC,KAAMumb,EAAO5e,aACbnoP,MAAOisU,EAAah9e,GACxB,EAEM8he,EAAkBnkD,GAAsBzzB,GAQ9C,MAAO,CACHgzB,WAAYhzB,EACZA,aACAsF,YAVgBsyE,GAAmB53E,EAWnC43E,kBACAp3V,WAVe4zV,GACfC,EACAr0E,CAQAx/Q,EACAqmC,MAAOisU,EAAa/nhB,MACpBA,QACA+qC,MACAwlG,MAAO06X,EAAW55gB,MAAM4jc,EAC5B,CACJ,GACCj5Y,OAAQgsa,GAAWA,IAAW1wU,OACvC,CAEA,IAAsB6wY,gBAAmC,CACrD,OAAO,KAAK/5S,OAAS44S,GAAaqB,UAC5B,KAAKK,4BAAA,EACL,KAAKE,6BAAA,CACf,CAEA,IAAc5gE,QAA2B,CACrC,IAAMiD,EAA6D,EAC9DvkV,GAAOiqY,QAAU3oD,GACd,KAAKsV,eAAerhC,oBAAoB7nc,QACpC4zd,EAAO/yB,UACX,GACHvuT,GAAOuuT,YAAc+yB,GAAmBA,EAAO/yB,YAC/CvuT,GAAO8+E,OAASwiQ,GACbA,EAAOhod,MAAMnU,MAAQm8d,EAAOj9a,IAAIl/C,OACnC66I,GAAO64C,QAAUyoS,GACdA,EAAOj9a,IAAIl/C,MAAQm8d,EAAOhod,MAAMnU,OACnC66I,GAAOqlB,YAAci8T,GAAmBA,EAAOhod,MAAMnU,OACrD66I,GAAOslB,UAAYg8T,GAAmBA,EAAOj9a,IAAIl/C,OACjD66I,GAAOxkE,QAAS0oZ,IACb,KAAKC,WACJ7C,GAAWA,EAAO/yB,UACvB,CACJ,EACA,OAAO81B,GAAa,KAAKo9D,eAAgB,KAAKn9D,WAAYC,EAC9D,CAEA,IAAc8kD,mBAAuC,CACjD,IAAM3wD,EACF,KAAKhxO,OAAS44S,GAAaoB,UACrB,CAAC1hZ,GAAOqlB,WAAYrlB,GAAOslB,QAAQ,EACnC,CAACtlB,GAAOxkE,MAAM,EACxB,OAAOkpF,IAAa,CAAIs8X,MAAkB,EAAGtoE,EACjD,CAEA,IAAc+qD,WAAsB,CAChC,OAAO,KAAKniD,OAAOzsT,QAASysT,GAAW,CACnCA,EAAOhod,MAAMnU,MACbm8d,EAAOj9a,IAAIl/C,KACd,EACL,CAEA,IAAc4ihB,iBAAsC,CAChD,OAAOnB,GAAoB,CACvB3wC,WAAY,KAAKA,WACjBrU,iBAAkB,KAAKA,iBACvB34T,QAAS,KAAK44T,QAClB,EACJ,CAEA,IAAcomD,gBAAmC,CAE7C,OAAOpjX,GAAa,KAAK4+W,UAAWjjY,GAAUg8J,MAAM,GAAK+rO,CADhB/mY,IAAU,IACM+mY,CAC7D,CAEA,IAAczia,WAA4B,CACtC,IAAMryF,EAAUytc,GAAsB,KAAKpjY,OAAO,EAClD,GAAIrqE,EAAS,MAAO,CAAEosB,OAAQpsB,CAAQ,EAEtC,GAAM,CAAEqpd,mBAAmB,YAAe,KAAKh/Y,QAI/C,OAHI,KAAKwjY,OAAO10d,SAAW,EAChB,CAAEizC,OAAQ,4BAA4Bi9b,GAAmB,EAE7D,CAAEj9b,OAAQ,EAAG,CACxB,CACJ,EC1Wasif,IAAqB,IAIrBC,IAAA,GAA0C,IAE1CC,IAA2B,GAC3BC,IAAwB,GAExBC,IAAgE,EACxEphB,EAAS,SAAU,CAAE,QAASpzE,EAA6B,GAC3DozE,EAAS,UAAW,CAAE,QAASpzE,EAA6B,GAC5DozE,EAAS,aAAc,CAAE,SAA0C,GACnEA,EAAS,OAAQ,CAAE,QAASnzE,EAA2B,CAC5D,EAEaw0F,GAA8D,EACtErhB,EAAS,SAAU,CAAE,QAAS,CAAE,GAChCA,EAAS,UAAW,CAAE,QAAS,CAAE,GACjCA,EAAS,aAAc,CAAE,QAAS,CAAE,GACpCA,EAAS,OAAQ,CAAE,QAASnzE,EAA2B,CAC5D,EAEay0F,IAA2C,CACpD,OAAQ,EACHthB,EAAS,SAAU,CAAE,QAASpzE,EAA6B,GAC3DozE,EAAS,aAAc,CAAE,SAA0C,GACnEA,EAAS,OAAQ,CAAE,QAASnzE,EAA2B,CAC5D,EACA,KAAM,EAAGmzE,EAAS,OAAQ,CAAE,QAASnzE,EAA2B,CAAE,CACtE,EAEa00F,IAAmD,CAC5D,OAAQ,EACHvhB,EAAS,SAAU,CAChB,QAASpzE,GACT,OAAQ,OACR,YAAa,CACjB,GACCozE,EAAS,aAAc,CAAE,SAA0C,GACnEA,EAAS,OAAQ,CAAE,QAASnzE,EAA2B,CAC5D,EACA,KAAMy0F,IAAsB,IAChC,EAuIaE,IAAqB,CAAC3iZ,GAAO,OAAQA,GAAO,UAAU,EAGnE,SAAgB4iZ,IAAkB,EAA2C,CACzE,OAAQD,IAAyC,SAAS/+Z,CAAM,CACpE,CClMA,IAAai/Z,GAAc,CACvB,KAAM,WACN,QAAS,CACL,MAAO,CACH,KAAM,qBACN,WAAY,CACR,CACI,GAAI,cACJ,KAAM,UACN,KAAM,CAAC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,CAC7B,EACA,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CAAC,CAAC,GAAI,GAAI,GAAI,GAAI,EAAE,CAAC,CAC/B,EACA,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,CAAC,CACnD,EACA,CAAE,GAAI,UAAW,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EAChD,CACI,GAAI,SACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,EAAG,EAAG,EAAG,CAAC,CAAC,EAAG,CAAC,CAAC,GAAI,GAAI,EAAE,CAAC,CAAC,CACzC,EACA,CACI,GAAI,aACJ,KAAM,eACN,KAAM,CACF,CAAC,CAAC,EAAE,CAAC,EACL,CAAC,CAAC,EAAE,CAAC,EACL,CAAC,CAAC,EAAE,CAAC,EACL,CAAC,CAAC,EAAE,CAAC,EACL,CAAC,CAAC,EAAE,CAAC,EACL,CAAC,CAAC,EAAE,CAAC,EACL,CAAC,CAAC,EAAE,CAAC,EACL,CAAC,CAAC,EAAE,CAAC,CACT,CACJ,EACA,CACI,GAAI,sBACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAC3B,EACA,CACI,GAAI,YACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,GAAI,EAAE,CAAC,EAAG,CAAC,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,CAAC,CAAC,CACjD,EACA,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CAAC,CAAC,GAAI,GAAI,GAAI,GAAI,EAAE,CAAC,CAC/B,EACA,CACI,GAAI,YACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CACzB,EACA,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CAAC,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,CAAC,CACvD,EACA,CACI,GAAI,aACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,EAAG,CAAC,CAAC,GAAI,GAAI,IAAK,GAAI,EAAE,CAAC,CAAC,CAC/C,EACA,CACI,GAAI,UACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAG,CAAC,CAAC,EAAE,CAAC,EAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CACjC,EACA,CAAE,GAAI,UAAW,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EAChD,CAAE,GAAI,aAAc,KAAM,UAAW,KAAM,CAAC,CAAC,GAAI,GAAI,EAAE,CAAC,CAAE,EAC1D,CAAE,GAAI,WAAY,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EACjD,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CAAC,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,GAAG,CAAC,CAChD,EACA,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CAAC,CAAC,GAAI,GAAI,GAAI,GAAI,EAAE,CAAC,CAC/B,EACA,CAAE,GAAI,SAAU,KAAM,UAAW,KAAM,CAAC,CAAC,IAAK,IAAK,GAAG,CAAC,CAAE,EACzD,CAAE,GAAI,QAAS,KAAM,UAAW,KAAM,CAAC,CAAC,GAAI,GAAI,GAAI,GAAI,EAAE,CAAC,CAAE,EAC7D,CAAE,GAAI,SAAU,KAAM,UAAW,KAAM,CAAC,CAAC,IAAK,GAAG,CAAC,CAAE,EACpD,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,IAAK,GAAG,CAAC,CACpC,EACA,CACI,GAAI,yBACJ,KAAM,UACN,KAAM,CAAC,CAAC,GAAI,GAAI,GAAI,EAAE,CAAC,CAC3B,EACA,CACI,GAAI,WACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,CAC/B,EACA,CACI,GAAI,SACJ,KAAM,UACN,KAAM,CACF,CACI,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC9C,GACJ,CACJ,CACJ,EACA,CAAE,GAAI,SAAU,KAAM,UAAW,KAAM,CAAC,CAAC,IAAK,GAAG,CAAC,CAAE,EACpD,CACI,GAAI,WACJ,KAAM,UACN,KAAM,CAAC,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,CAAC,CACnC,EACA,CACI,GAAI,eACJ,KAAM,UACN,KAAM,CAAC,CAAC,GAAI,GAAI,GAAI,IAAK,GAAI,EAAE,CAAC,CACpC,EACA,CAAE,GAAI,UAAW,KAAM,UAAW,KAAM,CAAC,CAAC,GAAI,GAAI,GAAI,EAAE,CAAC,CAAE,EAC3D,CACI,GAAI,WACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,CAC/B,EACA,CACI,GAAI,WACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,GAAG,CAAC,CACzD,EACA,CACI,GAAI,SACJ,KAAM,eACN,KAAM,CACF,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,CAAC,EAC/B,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,CACV,CACJ,EACA,CACI,GAAI,aACJ,KAAM,eACN,KAAM,CACF,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,CACV,CACJ,EACA,CACI,GAAI,2BACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,CAAC,CAC9C,EACA,CACI,GAAI,OACJ,KAAM,UACN,KAAM,CACF,CACI,KAAM,IAAK,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAC9C,GACJ,CACJ,CACJ,EACA,CACI,GAAI,QACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,IAAK,GAAG,CAAC,EAAG,CAAC,CAAC,IAAK,IAAK,IAAK,IAAI,CAAC,CAAC,CAChD,EACA,CACI,GAAI,QACJ,KAAM,eACN,KAAM,CACF,CAAC,CAAC,GAAG,CAAC,EACN,CACI,CACI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACxC,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,IACzC,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC5C,IAAK,IAAK,GACd,CACJ,CACJ,CACJ,EACA,CACI,GAAI,WACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,GAAG,CAAC,CAC/C,EACA,CACI,GAAI,UACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CACpC,EACA,CACI,GAAI,QACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,KAAM,KAAM,IAAI,CAAC,CAC5C,EACA,CACI,GAAI,aACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,CAC/B,EACA,CACI,GAAI,gBACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,CAAC,CACzC,EACA,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,CAAC,CAC9C,EACA,CAAE,GAAI,OAAQ,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EAC7C,CAAE,GAAI,SAAU,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EAC/C,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,CAC/B,EACA,CACI,GAAI,+BACJ,KAAM,UACN,KAAM,CACF,CACI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,KAAM,IAAK,GACzB,CACJ,CACJ,EACA,CACI,GAAI,UACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,KAAM,GAAG,CAAC,CAAC,CACjC,EACA,CACI,GAAI,WACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,CAC/B,EACA,CAAE,GAAI,WAAY,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EACjD,CACI,GAAI,qBACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,GAAG,CAAC,CACrB,EACA,CAAE,GAAI,aAAc,KAAM,UAAW,KAAM,CAAC,CAAC,IAAK,IAAI,CAAC,CAAE,EACzD,CAAE,GAAI,UAAW,KAAM,UAAW,KAAM,CAAC,CAAC,IAAK,KAAM,GAAG,CAAC,CAAE,EAC3D,CAAE,GAAI,QAAS,KAAM,UAAW,KAAM,CAAC,CAAC,IAAK,IAAK,GAAG,CAAC,CAAE,EACxD,CACI,GAAI,cACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,KAAM,IAAI,CAAC,CAC5B,EACA,CACI,GAAI,oBACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,KAAM,IAAI,CAAC,CAC5B,EACA,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAI,CAAC,CACpD,EACA,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,CAC/B,EACA,CAAE,GAAI,WAAY,KAAM,UAAW,KAAM,CAAC,CAAC,IAAK,IAAI,CAAC,CAAE,EACvD,CACI,GAAI,WACJ,KAAM,UACN,KAAM,CACF,CACI,IAAK,IAAK,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAC/C,IAAK,IAAK,IACd,CACJ,CACJ,EACA,CACI,GAAI,OACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CACpC,EACA,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,CAC/B,EACA,CACI,GAAI,SACJ,KAAM,eACN,KAAM,CACF,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,IAAK,KAAM,KAAM,IAAK,IAAK,KAAM,IAAK,GAAG,CAAC,CAChD,CACJ,EACA,CACI,GAAI,gBACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,IAAK,IAAK,IAAK,IAAI,CAAC,CAAC,CAClC,EACA,CACI,GAAI,8BACJ,KAAM,UACN,KAAM,CAAC,CAAC,GAAG,CAAC,CAChB,EACA,CACI,GAAI,QACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,KAAM,IAAI,CAAC,CACjC,EACA,CAAE,GAAI,SAAU,KAAM,UAAW,KAAM,CAAC,CAAC,IAAK,GAAG,CAAC,CAAE,EACpD,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,CAAC,CACnD,EACA,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CACF,CACI,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAC/C,GACJ,CACJ,CACJ,EACA,CAAE,GAAI,QAAS,KAAM,UAAW,KAAM,CAAC,CAAC,IAAK,KAAM,IAAK,GAAG,CAAC,CAAE,EAC9D,CACI,GAAI,SACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,IAAK,IAAK,IAAK,IAAK,GAAG,CAAC,CAAC,CAC/C,EACA,CAAE,GAAI,YAAa,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EAClD,CAAE,GAAI,UAAW,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EAChD,CACI,GAAI,YACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,KAAM,IAAK,IAAK,GAAG,CAAC,CAC1C,EACA,CACI,GAAI,SACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAI,CAAC,CAC/C,EACA,CACI,GAAI,gBACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAI,CAAC,CAC3B,EACA,CACI,GAAI,SACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,KAAM,GAAG,CAAC,CAChC,EACA,CAAE,GAAI,QAAS,KAAM,UAAW,KAAM,CAAC,CAAC,KAAM,GAAG,CAAC,CAAE,EACpD,CACI,GAAI,WACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,KAAM,IAAK,GAAG,CAAC,CACrC,EACA,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,GAAG,CAAC,CACpD,EACA,CAAE,GAAI,UAAW,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EAChD,CACI,GAAI,QACJ,KAAM,UACN,KAAM,CAAC,CAAC,KAAM,IAAK,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,GAAG,CAAC,CAC5D,EACA,CACI,GAAI,YACJ,KAAM,eACN,KAAM,CACF,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,IAAK,GAAG,CAAC,EACX,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,IAAK,GAAG,CAAC,EACX,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,IAAK,GAAG,CAAC,EACX,CAAC,CAAC,GAAG,CAAC,CACV,CACJ,EACA,CACI,GAAI,OACJ,KAAM,UACN,KAAM,CACF,CAAC,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,CACzD,CACJ,EACA,CACI,GAAI,OACJ,KAAM,UACN,KAAM,CAAC,CAAC,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,CAAC,CACpD,EACA,CAAE,GAAI,UAAW,KAAM,UAAW,KAAM,CAAC,CAAC,IAAK,IAAI,CAAC,CAAE,EACtD,CACI,GAAI,SACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,CAAC,CACnD,EACA,CACI,GAAI,QACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,IAAK,IAAK,KAAM,KAAM,GAAG,CAAC,CAAC,CAC1D,EACA,CAAE,GAAI,UAAW,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EAChD,CACI,GAAI,QACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CACpC,EACA,CACI,GAAI,SACJ,KAAM,UACN,KAAM,CAAC,CAAC,KAAM,IAAK,KAAM,IAAK,IAAK,KAAM,GAAG,CAAC,CACjD,EACA,CACI,GAAI,aACJ,KAAM,UACN,KAAM,CACF,CACI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,IAAK,KAAM,GACzB,CACJ,CACJ,EACA,CACI,GAAI,QACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,IAAK,KAAM,GAAG,CAAC,CAC1C,EACA,CAAE,GAAI,WAAY,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EACjD,CACI,GAAI,SACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,IAAK,GAAG,CAAC,CACpC,EACA,CAAE,GAAI,SAAU,KAAM,UAAW,KAAM,CAAC,CAAC,IAAK,IAAK,IAAI,CAAC,CAAE,EAC1D,CACI,GAAI,aACJ,KAAM,UACN,KAAM,CAAC,CAAC,KAAM,KAAM,IAAK,GAAG,CAAC,CACjC,EACA,CACI,GAAI,OACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,KAAM,IAAK,IAAI,CAAC,CACtC,EACA,CACI,GAAI,SACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,KAAM,IAAK,IAAK,IAAI,CAAC,CACtC,EACA,CAAE,GAAI,UAAW,KAAM,UAAW,KAAM,CAAC,CAAC,KAAM,IAAK,GAAG,CAAC,CAAE,EAC3D,CAAE,GAAI,UAAW,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EAChD,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,KAAM,IAAI,CAAC,CACjC,EACA,CACI,GAAI,QACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,KAAM,IAAK,IAAK,KAAM,IAAK,GAAG,CAAC,CAChD,EACA,CACI,GAAI,gBACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,KAAM,GAAG,CAAC,CAChC,EACA,CACI,GAAI,YACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,IAAK,GAAG,CAAC,CACpC,EACA,CACI,GAAI,aACJ,KAAM,UACN,KAAM,CAAC,CAAC,KAAM,KAAM,GAAG,CAAC,CAC5B,EACA,CAAE,GAAI,aAAc,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EACnD,CACI,GAAI,SACJ,KAAM,UACN,KAAM,CAAC,CAAC,KAAM,IAAK,IAAK,GAAG,CAAC,CAChC,EACA,CACI,GAAI,WACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EAAG,CAAC,CAAC,KAAM,IAAK,KAAM,GAAG,CAAC,CAAC,CAC3D,EACA,CACI,GAAI,WACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAC3B,EACA,CACI,GAAI,OACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,GAAG,CAAC,CACjD,EACA,CAAE,GAAI,QAAS,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EAC9C,CACI,GAAI,mBACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAC3B,EACA,CACI,GAAI,aACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,KAAM,IAAI,CAAC,CACtC,EACA,CAAE,GAAI,YAAa,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EAClD,CACI,GAAI,SACJ,KAAM,UACN,KAAM,CAAC,CAAC,KAAM,KAAM,IAAK,IAAK,GAAG,CAAC,CACtC,EACA,CACI,GAAI,uBACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CACtD,EACA,CAAE,GAAI,UAAW,KAAM,UAAW,KAAM,CAAC,CAAC,IAAK,GAAG,CAAC,CAAE,EACrD,CAAE,GAAI,SAAU,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EAC/C,CACI,GAAI,WACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAI,CAAC,CACzD,EACA,CACI,GAAI,aACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,KAAM,GAAG,CAAC,CACrC,EACA,CAAE,GAAI,UAAW,KAAM,UAAW,KAAM,CAAC,CAAC,KAAM,IAAK,GAAG,CAAC,CAAE,EAC3D,CACI,GAAI,aACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,CAAC,CACxD,EACA,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,KAAM,KAAM,KAAM,GAAG,CAAC,CAC5C,EACA,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,GAAI,IAAK,KAAM,GAAG,CAAC,CACpC,EACA,CAAE,GAAI,QAAS,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EAC9C,CAAE,GAAI,QAAS,KAAM,UAAW,KAAM,CAAC,CAAC,KAAM,IAAI,CAAC,CAAE,EACrD,CACI,GAAI,cACJ,KAAM,UACN,KAAM,CAAC,CAAC,KAAM,IAAK,GAAG,CAAC,CAC3B,EACA,CAAE,GAAI,gBAAiB,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EACtD,CACI,GAAI,cACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAC3B,EACA,CACI,GAAI,YACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,KAAM,IAAK,IAAI,CAAC,CACjC,EACA,CACI,GAAI,QACJ,KAAM,UACN,KAAM,CACF,CACI,IAAK,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,IAC3C,KAAM,IAAK,GACf,CACJ,CACJ,EACA,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,KAAM,IAAI,CAAC,CACjC,EACA,CACI,GAAI,cACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,KAAM,IAAK,IAAI,CAAC,CACjC,EACA,CACI,GAAI,kBACJ,KAAM,UACN,KAAM,CAAC,CAAC,KAAM,IAAK,IAAK,KAAM,GAAG,CAAC,CACtC,EACA,CACI,GAAI,SACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,KAAM,IAAK,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CACxD,EACA,CACI,GAAI,OACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EAAG,CAAC,CAAC,IAAK,GAAG,CAAC,CAAC,CAC/C,EACA,CACI,GAAI,WACJ,KAAM,UACN,KAAM,CAAC,CAAC,KAAM,KAAM,IAAK,KAAM,EAAE,CAAC,CACtC,EACA,CAAE,GAAI,QAAS,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EAC9C,CACI,GAAI,YACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,KAAM,IAAI,CAAC,EAAG,CAAC,CAAC,KAAM,GAAG,CAAC,CAAC,CACxC,EACA,CACI,GAAI,SACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,KAAM,IAAK,IAAI,CAAC,CACjC,EACA,CACI,GAAI,mBACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,KAAM,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CACnD,EACA,CAAE,GAAI,WAAY,KAAM,UAAW,KAAM,CAAC,CAAC,KAAM,KAAM,GAAG,CAAC,CAAE,EAC7D,CACI,GAAI,OACJ,KAAM,UACN,KAAM,CAAC,CAAC,KAAM,IAAK,KAAM,KAAM,KAAM,IAAI,CAAC,CAC9C,EACA,CACI,GAAI,cACJ,KAAM,eACN,KAAM,CACF,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,CACV,CACJ,EACA,CACI,GAAI,SACJ,KAAM,UACN,KAAM,CAAC,CAAC,KAAM,IAAK,IAAK,KAAM,KAAM,IAAK,IAAK,IAAI,CAAC,CACvD,EACA,CAAE,GAAI,WAAY,KAAM,UAAW,KAAM,CAAC,CAAC,KAAM,GAAG,CAAC,CAAE,EACvD,CAAE,GAAI,cAAe,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EACpD,CAAE,GAAI,QAAS,KAAM,UAAW,KAAM,CAAC,CAAC,IAAK,GAAG,CAAC,CAAE,EACnD,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAAI,CAAC,CAChD,EACA,CACI,GAAI,SACJ,KAAM,eACN,KAAM,CACF,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,KAAM,IAAK,IAAI,CAAC,EAClB,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CACI,CACI,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KAC3C,IAAK,KAAM,IAAK,KAAM,KAAM,IAAK,IAAK,KAAM,IAC5C,KAAM,IAAK,KAAM,KAAM,KAAM,IAAK,KAAM,IACxC,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAC1C,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAC1C,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,KAAM,KAAM,IAC5C,IAAK,KAAM,GACf,CACJ,EACA,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,CACV,CACJ,EACA,CACI,GAAI,SACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,KAAM,GAAG,CAAC,CACrC,EACA,CACI,GAAI,wBACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAC3B,EACA,CAAE,GAAI,cAAe,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EACpD,CACI,GAAI,mCACJ,KAAM,UACN,KAAM,CAAC,CAAC,GAAG,CAAC,CAChB,EACA,CAAE,GAAI,QAAS,KAAM,eAAgB,KAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,EAC9D,CAAE,GAAI,aAAc,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EACnD,CAAE,GAAI,wBAAyB,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EAC9D,CACI,GAAI,eACJ,KAAM,UACN,KAAM,CACF,CAAC,IAAK,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,IAAK,KAAM,GAAG,CAC1D,CACJ,EACA,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,IAAI,CAAC,CACnD,EACA,CACI,GAAI,SACJ,KAAM,UACN,KAAM,CACF,CACI,IAAK,KAAM,KAAM,KAAM,IAAK,IAAK,KAAM,IAAK,KAC5C,IACJ,CACJ,CACJ,EACA,CAAE,GAAI,aAAc,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EACnD,CACI,GAAI,eACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,KAAM,IAAI,CAAC,CAC5B,EACA,CAAE,GAAI,YAAa,KAAM,UAAW,KAAM,CAAC,CAAC,IAAK,GAAG,CAAC,CAAE,EACvD,CACI,GAAI,WACJ,KAAM,UACN,KAAM,CAAC,CAAC,KAAM,IAAK,KAAM,IAAK,IAAI,CAAC,CACvC,EACA,CACI,GAAI,WACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,KAAM,KAAM,IAAK,IAAI,CAAC,CACvC,EACA,CACI,GAAI,kBACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CACtD,EACA,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,KAAM,KAAM,IAAK,KAAM,IAAI,CAAC,CAClD,EACA,CACI,GAAI,eACJ,KAAM,UACN,KAAM,CAAC,CAAC,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,GAAG,EAAG,CAAC,IAAI,CAAC,CAC3D,EACA,CAAE,GAAI,cAAe,KAAM,UAAW,KAAM,CAAC,CAAC,IAAK,GAAG,CAAC,CAAE,EACzD,CACI,GAAI,cACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,KAAM,KAAM,IAAK,IAAK,KAAM,KAAM,IAAK,IAAI,CAAC,CAC7D,EACA,CAAE,GAAI,QAAS,KAAM,UAAW,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,CAAE,EAC7D,CAAE,GAAI,YAAa,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EAClD,CACI,GAAI,QACJ,KAAM,UACN,KAAM,CACF,CACI,IAAK,IAAK,KAAM,IAAK,KAAM,KAAM,IAAK,KAAM,IAC5C,KAAM,GACV,CACJ,CACJ,EACA,CACI,GAAI,WACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,KAAM,IAAK,KAAM,IAAI,CAAC,CACvC,EACA,CAAE,GAAI,SAAU,KAAM,UAAW,KAAM,CAAC,CAAC,KAAM,KAAM,GAAG,CAAC,CAAE,EAC3D,CACI,GAAI,cACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,CAAC,CACnD,EACA,CACI,GAAI,QACJ,KAAM,UACN,KAAM,CAAC,CAAC,KAAM,KAAM,KAAM,IAAK,IAAK,IAAI,CAAC,CAC7C,EACA,CAAE,GAAI,SAAU,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EAC/C,CACI,GAAI,aACJ,KAAM,UACN,KAAM,CAAC,CAAC,KAAM,KAAM,GAAI,GAAG,CAAC,CAChC,EACA,CACI,GAAI,WACJ,KAAM,UACN,KAAM,CACF,CACI,KAAM,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,IAChD,IAAK,KAAM,GACf,CACJ,CACJ,EACA,CACI,GAAI,WACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,KAAM,IAAK,KAAM,KAAM,IAAI,CAAC,CAC7C,EACA,CAAE,GAAI,OAAQ,KAAM,UAAW,KAAM,CAAC,CAAC,IAAK,KAAM,IAAK,GAAG,CAAC,CAAE,EAC7D,CACI,GAAI,QACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CACpC,EACA,CAAE,GAAI,sBAAuB,KAAM,UAAW,KAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EAC5D,CAAE,GAAI,UAAW,KAAM,UAAW,KAAM,CAAC,CAAC,KAAM,IAAK,IAAI,CAAC,CAAE,EAC5D,CACI,GAAI,SACJ,KAAM,eACN,KAAM,CACF,CAAC,CAAC,KAAM,IAAK,KAAM,IAAK,KAAM,KAAM,GAAG,CAAC,EACxC,CAAC,CAAC,KAAM,IAAK,GAAG,CAAC,CACrB,CACJ,EACA,CACI,GAAI,eACJ,KAAM,UACN,KAAM,CAAC,CAAC,KAAM,IAAK,KAAM,IAAK,EAAE,CAAC,CACrC,EACA,CACI,GAAI,SACJ,KAAM,eACN,KAAM,CACF,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,CACV,CACJ,EACA,CACI,GAAI,SACJ,KAAM,UACN,KAAM,CAAC,CAAC,KAAM,KAAM,IAAK,KAAM,IAAK,KAAM,KAAM,IAAI,CAAC,CACzD,EACA,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CACF,CACI,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,IAC3C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IACxC,CACJ,CACJ,EACA,CACI,GAAI,uBACJ,KAAM,UACN,KAAM,CAAC,CAAC,GAAI,GAAI,GAAI,GAAI,EAAE,CAAC,CAC/B,EACA,CACI,GAAI,iBACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,IAAK,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAChC,EACA,CACI,GAAI,gBACJ,KAAM,eACN,KAAM,CACF,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,IAAK,KAAM,IAAK,IAAI,CAAC,EACvB,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,GAAG,CAAC,EACN,CAAC,CAAC,KAAM,IAAK,KAAM,GAAG,CAAC,CAC3B,CACJ,EACA,CAAE,GAAI,UAAW,KAAM,UAAW,KAAM,CAAC,CAAC,KAAM,IAAK,GAAG,CAAC,CAAE,EAC3D,CACI,GAAI,aACJ,KAAM,UACN,KAAM,CAAC,CAAC,KAAM,KAAM,KAAM,KAAM,EAAE,CAAC,CACvC,EACA,CACI,GAAI,UACJ,KAAM,eACN,KAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAC3B,EACA,CACI,GAAI,YACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,KAAM,KAAM,IAAI,CAAC,CAClC,EACA,CACI,GAAI,UACJ,KAAM,UACN,KAAM,CAAC,CAAC,IAAK,KAAM,KAAM,IAAI,CAAC,CAClC,EACA,CACI,GAAI,iBACJ,KAAM,UACN,KAAM,CAAC,CAAC,KAAM,KAAM,KAAM,GAAG,CAAC,CAClC,EACA,CAAE,GAAI,QAAS,KAAM,UAAW,KAAM,CAAC,CAAC,IAAK,KAAM,IAAI,CAAC,CAAE,EAC1D,CACI,GAAI,SACJ,KAAM,UACN,KAAM,CAAC,CAAC,KAAM,KAAM,IAAK,KAAM,KAAM,GAAI,KAAM,IAAK,IAAI,CAAC,CAC7D,EACA,CACI,GAAI,WACJ,KAAM,UACN,KAAM,CAAC,CAAC,KAAM,KAAM,KAAM,IAAI,CAAC,CACnC,CACJ,CACJ,CACJ,EAGA,KAAM,CACJ,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EACzJ,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAC1C,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EACxQ,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAC5B,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EACjZ,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EACzI,CAAC,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,CAAC,EACnJ,CAAC,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,CAAC,EACrJ,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAA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M,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,CAAC,EACtlB,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,C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AE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,CAAC,EAC7Z,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,KAAM,MAAM,EAAE,CAAC,KAAM,MAAM,EAAE,CAAC,IAAK,KAAK,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,CAAC,EACv9Q,CAAC,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,MAAM,CAAC,EACzQ,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAA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AO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,CAAC,EACle,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,CAAC,EAChI,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,CAAC,EAC3O,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK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AK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EACpI,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EACnK,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,EACzgC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,CAAC,EACzM,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,CAAC,EAChD,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,CAAC,EAChD,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,CAAC,EAChG,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EAC3nF,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,CAAC,EACpsB,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EAC5F,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,CAAC,EAClK,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAA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,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,CAAC,EAC5K,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EACxT,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EACx7B,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,EACvC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,EACpD,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,EACvC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,EACpI,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,EACvG,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,EACpD,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,CAAC,EAC3Q,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,CAAC,EACxpB,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,CAAC,EAChD,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EACnJ,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EAC7B,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EAC5D,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EAC9B,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EAC3D,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EAC5C,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EAC7C,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,CAAC,EAC5C,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,CAAC,EAC5B,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EACnJ,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EACjxB,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAA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,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAK,EAAE,CAAC,OAAO,GAAI,EAAE,CAAC,OAAO,IAAK,EAAE,CAAC,OAAO,IAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,EACjhB,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,GAAI,EAAE,CAAC,OAAO,GAAI,EAAE,CAAC,OAAO,GAAI,EAAE,CAAC,OAAO,GAAI,EAAE,CAAC,OAAO,GAAI,EAAE,CAAC,OAAO,IAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAK,EAAE,CAAC,OAAO,IAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KA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MAAM,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAC3M,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAC5kB,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EACpS,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAC7H,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EACxJ,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,EAC3H,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAA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AM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EACrJ,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,EAChI,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EACzC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,EACvlB,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EAC/J,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAC1C,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAC5H,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,CAAC,EAC3B,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EACzC,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EAChL,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EAChiB,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EAC7O,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,KAAK,KAA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AE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EACvR,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAChH,CAAC,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,CAAC,EACntB,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,CAAC,EACl5C,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,K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MAAM,CAAC,EAC5D,CAAC,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,CAAC,EACte,CAAC,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,CAAC,EAC9B,CAAC,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,CAAC,EAC7C,CAAC,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,CAAC,EAC3E,CAAC,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,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C,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,CAAC,EAC1P,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EACrK,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,C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,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,CAAC,EACte,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EAClK,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EACjU,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,K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AC,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,EACxC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,CAAC,EACzC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EACpE,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,CAAC,EAC1/G,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EACxG,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAC9M,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAC3J,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EACzC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAC5B,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAC1C,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,IAAI,CAAC,EACxO,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAC1W,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,CAAC,EACtJ,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAC5B,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EACxM,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,EACpa,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,EAC1B,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAC/M,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,EAC5F,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EACxD,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,EAC1B,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,EAC1B,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,EAC9E,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EACtC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,EAC1B,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EACzF,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EAC9B,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,CAAC,EAC7F,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EACrH,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,CAAC,EACvG,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EACvI,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EACtG,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,GAAG,CAAC,EAClF,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EACvG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,EACjC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EACvC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,GAAI,EAAE,CAAC,MAAM,IAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAChd,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAC1C,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,EACzC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,CAAC,EACtE,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,CAAC,EACrE,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAC1C,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAC3B,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EACtQ,CAAC,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,CAAC,EACtI,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EACvC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EACxJ,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAC1C,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,EACzC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,EACzC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,EACxB,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,CAAC,EACnN,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,EACrH,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EACpK,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,EACjM,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAC9N,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EACrI,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EACpH,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAC5M,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAC5B,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EACjZ,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EACvH,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,CAAC,EAClI,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,CAAC,EACpL,CAAC,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,CAAC,EAC5D,CAAC,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,CAAC,EAC5C,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAC1C,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EACxD,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EACrE,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAChH,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,IAAK,CAAC,EACvD,CAAC,CAAC,MAAM,IAAK,EAAE,CAAC,MAAM,IAAK,EAAE,CAAC,MAAM,EAAG,CAAC,EACxC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,EACtC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EACzC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAC1C,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EACzC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,IAAI,CAAC,EACtD,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EACzC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,EAChT,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,CAAC,EAC/H,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,CAAC,EAC9Q,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,QAAQ,KAAK,CAAC,EAC5I,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,CAAC,EAC/E,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,CAAC,EAChJ,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,CAAC,EAC9G,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EACthD,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,EACpf,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,CAAC,EAC/I,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,CAAC,EAChH,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,CAAC,EAC/L,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,CAAC,EAChD,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,CAAC,EACr9D,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,IAAI,CAAC,EAC/d,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,CAAC,EACnP,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,CAAC,EAC/E,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,CAAC,EAC7G,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAC5B,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAC/X,CAAC,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,CAAC,EAC1E,CAAC,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,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Q,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,CAAC,EACtoD,CAAC,CAAC,KAAK,GAAI,EAAE,CAAC,KAAK,GAAI,EAAE,CAAC,KAAK,GAAI,EAAE,CAAC,KAAK,GAAI,EAAE,CAAC,KAAK,GAAI,EAAE,CAAC,KAAK,GAAI,EAAE,CAAC,KAAK,GAAI,CAAC,EACpF,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,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ACI,oQACJ,SACI,mUACJ,aACI,kHACJ,WACI,mHACJ,IAAK,yEACL,GAAI,4IACJ,MAAO,wHACP,SACI,6KACJ,IAAK,6KACL,MAAO,qLACP,MAAO,6LACP,MAAO,wRACP,MAAO,oQACP,QACI,8PACJ,WACI,qJACJ,WACI,4IACJ,KAAM,sLACV,EAGaC,IAGT,CACA,WAAY,CACR,gBACA,gBACA,SACA,SACA,OACA,SACJ,EACA,GAAI,CACA,qBACA,mCACA,0BACA,2DACA,+BACA,kBACA,4BACJ,EACA,GAAI,CACA,wBACA,uCACA,cACA,cACA,YACA,cACJ,EACA,SAAU,CACN,oBACA,kBACA,kBACA,gBACA,kBACJ,EACA,SAAU,CACN,4BACA,2CACA,2BACA,8BACA,2BACA,0BACA,2BACA,0BACA,wBACA,wBACA,yBACA,wBACA,8BACA,qCACA,qBACA,sBACA,oBACJ,EACA,SAAU,CACN,qBACA,2BACA,yBACA,0BACA,yBACA,2BACA,yBACJ,EACA,IAAK,CACD,iBACA,eACA,8BACA,eACA,wBACA,uBACJ,EACA,MAAO,CACH,uCACA,2CACA,8BACA,4CACA,qCACA,0CACA,qCACA,kBACJ,EACA,IAAK,CACD,sBACA,gCACA,2BACA,iCACA,eACA,oBACJ,EACA,aAAc,CACV,uBACA,gCACA,gCACA,uBACJ,EACA,GAAI,CACA,qBACA,iCACA,cACA,mBACA,cACA,WACA,mBACJ,EACA,IAAK,CACD,sBACA,kCACA,eACA,oBACA,eACA,gBACA,oBACJ,EACA,MAAO,CACH,wBACA,sCACA,iBACA,sBACA,iBACA,eACA,iBACJ,EACA,SAAU,CACN,+BACA,2BACA,gCACA,0CACA,4BACA,4BACA,uCACA,sBACJ,EACA,IAAK,CACD,sBACA,sBACA,2BACA,qCACA,eACA,gCACA,kCACA,kBACA,eACJ,EACA,MAAO,CACH,iBACA,eACA,oBACA,gCACA,4BACJ,EACA,MAAO,CACH,yBACA,wCACA,wBACA,2BACA,oBACA,8CACA,uBACA,iCACA,sBACA,qBACA,0CACJ,EACA,MAAO,CACH,iBACA,eACA,eACA,aACA,eACJ,EACA,MAAO,CACH,yBACA,kBACA,wBACA,sBACA,wBACA,uBACA,sBACA,wBACA,uBACA,wBACA,uBACA,wBACA,uBACA,qBACA,qBACA,sBACA,qBACA,2BACA,kCACA,kBACA,mBACA,iBACJ,EACA,QAAS,CACL,oCACA,wCACA,2BACA,yCACA,uCACA,4CACA,kCACA,mDACJ,EACA,WAAY,CACR,yBACA,yCACA,gCACA,0CACA,8DACA,wBACA,mDACJ,EACA,WAAY,CACR,uCACA,uBACA,mCACA,kCACA,oCACA,oCACA,wCACA,wCACA,wCACA,yCACA,0CACA,4BACA,4BACA,4BACA,0BACA,wBACA,uBACA,4BACA,sCACA,yBACA,oBACJ,EACA,KAAM,CACF,kBACA,gBACA,qBACA,gBACA,yBACJ,CACJ,EAEA,SAAgBC,IACZ,EACgC,CAChC,OACItkX,GAAiB11B,CAAM,GACvBA,EAAO,YAAc,QACrBA,EAAO,YAAc,MAE7B,CAEA,SAAgBi6Y,IAAqB,EAAyB,CAC1D,OAAOH,IAAah/hB,EACxB,CAEA,SAASo/hB,IAAkB,EAA2C,CAClE,IAAM5kX,EACFx6K,IAAQ,eACFi7K,GAAgB,EAChBj7K,IAAQ,aACNu7K,IAAc,EACdU,IAAyBj8K,CAAG,EAElCq/hB,EAAkCJ,IAAyBj/hB,GAMjE,OAAOqqf,GACH7vU,EACA8kX,GAPY,GAAwD,CACpE,IAAM73hB,EAAQ43hB,EAAa,QAAQn6Y,EAAO,IAAI,EAC9C,OAAOz9I,GAAS,EAAIA,EAAQ,GAChC,CAImB,EACfgjf,IAAO,EAAQ,KAAW,CACtB,KAAMvlW,EAAO,KACb,YAAagqV,GAAWhqV,EAAO,IAAI,CAAC,CAAC,KACrC,MACI45Y,IAAmB55Y,EAAO,OAC1B65Y,IAAqBt3hB,EAAQs3hB,IAAqB,QACtD,QAAS,CAAC,GAAIP,GAAqBt5Y,EAAO,IAAI,GAAK,CAAC,CAAE,CAC1D,EAAE,CACN,CACJ,CAEA,IAAaq6Y,IAAmBzvD,GAAUsvD,GAAiB,EAG3D,SAAgBI,IACZ,EACsD,CACtD,IAAM5mhB,EAAM,IAAI,IAChB,IAAK,IAAMssI,KAAUs1B,EACjB,IAAK,IAAM91B,KAAWQ,EAAO,QACzBtsI,EAAI,IAAI8rI,EAAS,CAAE,MAAOQ,EAAO,MAAO,OAAQA,EAAO,IAAK,CAAC,EAGrE,OAAOtsI,CACX,C,s1GCzSa6mhB,GAAb,MAAaA,E,gCAsCRzka,E,EAAqBt0H,S,GAOrBs0H,E,EAAal+C,M,GAIbk+C,E,EAAa0qO,Y,GAIb1qO,E,EAAqB0ka,Y,GAIrB1ka,E,EAAqBv5H,M,GAOrBu5H,E,EAAqB2ka,U,GAQrB3ka,E,EAAa2jN,c,GAQb3jN,E,EAAailN,kB,GAIbjlN,E,EAAqB4ka,U,GAIrB5ka,E,EAAqBkpO,Y,GAIrBlpO,E,EAAqB6ka,e,GAIrB7ka,E,EAAqB8ka,gB,GAqCrB9ka,E,EAAqB+ka,iB,GAyDrB/ka,E,EAAqBgla,gB,GAkBrBhla,E,EAAqBila,qB,GAqBrBjla,E,EAAqBkla,gB,GAiCrBlla,E,EAAqBmla,gB,GAwBrBnla,E,EAAqBola,c,GAiCrBpla,E,EAAaqla,S,GAMbrla,E,EAAah2C,O,GAObg2C,E,EAAav6D,Q,GAKbu6D,E,EAAasla,W,GAKbtla,E,EAAaula,qB,KArVd9tb,eAEAqmG,0BAAkC,CAC9B1zB,WAAY,IACZi6J,WAAY,IACZmhN,6BAA8B,GAC9BC,kBAAmB,GACnB/6L,WAAY,OAChB,GAEA,YAAYh/V,EAAkC,CAC1C,KAAK+rG,eAAiB/rG,EACtBk3L,EAAe,IAAI,CACvB,CAEA,OAAO8iW,aACHthN,EACA14U,EAIgB,CAChB,OAAO,IAAI+4hB,EAAiB,CACxB3id,KAAMsiQ,EAAStiQ,KACfijQ,SAAUX,EAASW,SACnB16J,SAAU+5J,EAAS/5J,SACnBD,WAAYg6J,GAAUh6J,WACtBi6J,WAAYD,GAAUC,WACtBohN,kBAAmB/5hB,GAAS+5hB,kBAC5B/6L,WAAYh/V,GAASg/V,UACzB,EACJ,CAEAzkB,2BAA2Bj6U,EAAWmwD,EAA6B,CAC/D,OAAO,KAAKwoe,SAAS1+M,2BAA2Bj6U,EAAGmwD,EACvD,CAEA,IAAsBzwD,SAGpB,CACE,MAAO,CAAE,GAAG,KAAKoyM,eAAgB,GAAG,KAAKrmG,cAAe,CAC5D,CAEA,IAAc31B,MAAe,CACzB,OAAO,KAAKp2E,QAAQo2E,IACxB,CAEA,IAAc4oR,YAA8B,CACxC,OAAO,KAAKh/V,QAAQg/V,UACxB,CAEA,IAAsBg6L,YAA0B,CAC5C,OAAOxwD,GAAW,KAAKxoe,QAAQo2E,IAAI,CACvC,CAEA,IAAsBr7E,MAAe,CAEjC,OAAO,KAAKi+hB,WAAWrwD,aACjB,KAAKqwD,WAAWj+hB,KAChB,KAAKi+hB,WAAWl5T,GAC1B,CAEA,IAAsBm5T,UAAqB,CACvC,OAAO,IAAI7/M,GAAS,CAChBhjQ,KAAM,KAAKr7E,KACXs+U,SAAU,KAAKr5U,QAAQq5U,SACvB,GAAG,KAAKpB,YACZ,EACJ,CAEA,IAAcA,cAA6B,CACvC,MAAO,CACHt5J,SAAU,KAAK3+K,QAAQ2+K,SACvBg6J,WAAY,KAAK34U,QAAQ24U,WACzBj6J,WAAY,KAAK1+K,QAAQ0+K,UAC7B,CACJ,CAEA,IAAc66J,kBAA2B,CACrC,OAAO,KAAK0/M,SAAS1/M,gBACzB,CAEA,IAAsB2/M,UAAmB,CACrC,OAAOtjY,KAAKr+B,MAAM,KAAKv3H,QAAQ2+K,SAAW,GAC9C,CAEA,IAAsB6+K,YAAqB,CACvC,OAAOx/K,EAAOo6J,QAAQ,IAAK,KAAKH,YAAY,EAAE35P,KAClD,CAEA,IAAsB66c,eAA+B,CACjD,MAAO,CAAEh4gB,KAAM,QAASm9D,MAAO,KAAKk/Q,UAAW,CACnD,CAEA,IAAsB47L,gBAEN,CACZ,GAAI,CAAC,KAAKp5hB,QAAQ+5hB,kBAAmB,OAErC,IAAMv7Y,EACFw3B,GAAgB,KAAKh2K,QAAQo2E,IAAI,GACjC8/F,IAAqB,KAAKl2K,QAAQo2E,IAAI,EAC1C,GAAKooE,EAGL,IAAI41B,GAAmB51B,GACnB,MAAO,CAAEy7Y,WAAY,eAAgBvjX,WAAYl4B,EAAOzjJ,IAAK,EAGjE,GAAIo5K,GAAqB31B,GACrB,MAAO,CAAEy7Y,WAAY,aAAcvjX,WAAYl4B,EAAOzjJ,IAAK,EAG/D,GAAI,KAAKi+hB,WAAWrwD,cAAgB6vD,IAAeh6Y,GAC/C,MAAO,CACHy7Y,WAAYz7Y,EAAO07Y,UACnBxjX,WAAYl4B,EAAOzjJ,IACvB,CAX6D,CAerE,CAUA,IAAsBs+hB,iBAAiD,CACnE,GAAI,CAAC,KAAKL,WAAWrwD,aAAc,OAEnC,IAAM1wJ,EAAe,CAAE,GAAG,KAAKA,aAAcv5J,WAAY,GAAI,EAE7D,GAAI,KAAK06W,gBAAkB,CAAC,KAAKG,oBAAqB,CAClD,IAAMY,EAAiB,IAAI,KAAKnB,WAAW11e,SAGrC82e,EAAkBp8W,EAAOo6J,QAC3B+hN,EACAliN,GACF35P,MACI+7c,EAAiBr8W,EAAOo6J,QAC1BkiN,IACAriN,GACF35P,MAEF,MAAO,CACH,CACIn9D,KAAM,OACNkgX,KAAM,wBACNjrT,KAAM+jd,EACN77c,MAAO87c,EACP17W,WAAYu5J,EAAav5J,UAC7B,EACA,KAAKy6W,cACL,CACIh4gB,KAAM,OACNm9D,MAAO,KAAK46c,SACZA,SAAU,KAAKA,SACf,GAAG,KAAKE,cACZ,EACA,CACIj4gB,KAAM,OACNkgX,KAAM,wBACNjrT,KAAMkkd,IACNh8c,MAAO+7c,EACP37W,WAAYu5J,EAAav5J,UAC7B,CACJ,CACJ,CAAO,CACH,IAAMtoG,EAAO,IAAI,KAAK4id,WAAW11e,OAAO,GAGxC,MAAO,CACH,CACIniC,KAAM,OACNkgX,KAAM,wBACNjrT,OACAkI,MAPM0/F,EAAOo6J,QAAQhiQ,EAAM6hQ,GAAc35P,MAQzCogG,WAAYu5J,EAAav5J,UAC7B,CACJ,CACJ,CACJ,CAEA,IAAsB46W,gBAAgD,CAClE,GAAI,CAAC,KAAKt5hB,QAAQmthB,eAAgB,OAElC,IAAM/2c,EAAO,KAAKp2E,QAAQmthB,eACpBl1M,EAAe,CAAE,GAAG,KAAKA,aAAcv5J,WAAY,GAAI,EAG7D,MAAO,CACH,CACIv9J,KAAM,OACNkgX,KAAM,QACNjrT,OACAkI,MAPM0/F,EAAOo6J,QAAQhiQ,EAAM6hQ,GAAc35P,MAQzCogG,WAAYu5J,EAAav5J,UAC7B,CACJ,CACJ,CAEA,IAAsB66W,qBAAqD,CACvE,GAAK,KAAKH,gBAAkB,MAAKJ,WAAWrwD,aAG5C,MAAO,CACH,CACIxnd,KAAM,OACNm9D,MAAO,KAAK46c,SACZA,SAAU,KAAKA,SACf,GAAG,KAAKE,cACZ,CACJ,CACJ,CASA,IAAsBI,gBAEN,CAGZ,GAAI,KAAKD,oBAAqB,MAAO,aAGrC,GAAI,KAAKF,gBAAiB,CACtB,IAAMkB,EAAa,IAAI,KAAKvB,WAAW11e,OAAO,GACxCi6S,EAAgB,KAAK67L,eACrB,KAAKF,SAAW,KAAK17L,WACrB,EAMN,OALaJ,IAAwB,CACjCC,iBAAkB,KAAK47L,SACvB37L,aAAci9L,EACdh9L,eACJ,CACOyuJ,EAAO,wBAA0BhnW,MAC5C,CAGA,GAAI,KAAKs0Y,gBAAkB,CAAC,KAAKt5hB,QAAQ85hB,6BAKrC,OAJa18L,IAAwB,CACjCC,iBAAkB,KAAK47L,SACvB37L,aAAc,KAAKt9V,QAAQmthB,cAC/B,CACOnhC,EAAO,QAAUhnW,MAIhC,CAEA,IAAsBy0Y,gBAGlB,CACA,OAAOhhY,GAAiB,CACpB,KAAK4gY,gBACC,CACIh4J,KAAM,wBACNvuO,UAAW,KAAKumY,eACpB,EACAr0Y,OACN,KAAKu0Y,oBACC,CACIl4J,KAAM,aACNvuO,UAAW,KAAKymY,mBACpB,EACAv0Y,OACN,KAAKs0Y,eACC,CAAEj4J,KAAM,QAASvuO,UAAW,KAAKwmY,cAAe,EAChDt0Y,MACT,EACL,CAGA,IAAsB00Y,cAA8B,CAChD,GAAM,CACFT,WACAE,gBACAM,iBACAD,iBACAvhN,aAAc,CAAEv5J,eAChB,KAGE7+J,EAAuBo5gB,EAASp5gB,MAAM3N,IAAK8N,GAAS,CACtD,CACImB,KAAM,OACNkgX,KAAM,OACNjrT,KAAMp2D,EAAKo2D,KACXkI,MAAOt+D,EAAKs+D,MACZogG,WAAYu6W,EAASv6W,YAAcA,CACvC,CACH,GAGK87W,EAAe36gB,EAAMA,EAAM7e,OAAS,GAG1C,IAAK,GAAM,CAAEqgY,OAAMvuO,eAAe2mY,EAC1BD,IAAmBn4J,EACnBm5J,EAAax4hB,KAAKm3hB,KAAkBrmY,GACnCjzI,EAAM7d,KAAK8wJ,GAGpB,OAAOjzI,CACX,CAEA,IAAc85gB,SAAmB,CAC7B,OAAO,KAAKD,aAAa3ha,KAAM/3G,GAC3BA,EAAK+3G,KAAMjmF,GAAMA,EAAE3wB,OAAS,QAEpC,CAEA,IAAcm9D,OAAgB,CAC1B,IAAMm8c,EAAa,KAAKf,aAAaxnhB,IAAK8N,GACtCgxB,GAAQhxB,EAAOqkC,GAAaA,EAASi6B,KAAK,GAE9C,OAAOm8c,EAAWz5hB,OAAS,EAAI40J,KAAKh1J,IAAA,GAAO65hB,GAAc,CAC7D,CAEA,IAAc1ge,QAAiB,CAC3B,OAAO,KAAK2/d,aAAa14hB,OAAS,KAAKu4U,gBAC3C,CAGA,IAAcqgN,WAAwB,CAClC,OAAO,KAAKF,aAAaxnhB,IAAK8N,GAAS06gB,IAAiB16gB,GAC5D,CAGA,IAAc65gB,qBAA4C,CACtD,OAAO,KAAKH,aAAazwX,SAASnW,EAAWmsL,IACzC07M,IAAsB,CACP7nY,YACXriG,EAAGwuR,EAAY,KAAK1F,iBACpBylB,WAAY,KAAKh/V,QAAQg/V,UAC7B,GAER,CACJ,EAGA,SAAS07L,IAAiB16gB,EAAA,CACtB,IAAM8yI,EAAY9yI,EAAK0pC,OAClB5X,GAAMA,EAAE3wB,OAAS,QAAU2wB,EAAE3wB,OAAS,SAG3C,OAAO2xI,EACF5gJ,KAAKmyC,EAAUpiD,KACZ,GAAIoiD,EAASljC,OAAS,QAEtB,MAAO,CACHi1D,KAFiB08E,EAAU7wJ,EAAI,EAAE,EAAEkf,OAAS,QAEvB,IAAMkjC,EAAS+xB,KAAO/xB,EAAS+xB,KACpDsoG,WAAYr6H,EAASq6H,WACrB2iN,KAAMh9U,EAASg9U,IACnB,CACJ,GACC33U,OAAQ/1B,GAASA,IAASqxH,OACnC,CAGA,SAAS21Y,IAAsB,CAC3B7nY,YACAriG,IACAuuS,cAAA,CAMA,IAAM66L,EAA4C,GAG5C97W,EAAa/sI,GAAQ8hH,EAAYhhH,GAAMA,EAAEwsC,KAAK,EAGhDh+E,EAAI0+V,IAAe,MAAQ,CAACjhL,EAAa,EAE7C,IAAK,IAAM15H,KAAYyuG,EACnBn7J,GAAM0sD,GACD2hH,KAAK,CAAE7kJ,KAAM,MAAO,EAAIkjC,IACrBw1e,EAAoB73hB,KAAK,CAAE,GAAGqiD,EAAU/jD,IAAGmwD,GAAE,GAC7CnwD,GAAK+jD,EAASi6B,KAClB,GACC0nF,KAAK,CAAE7kJ,KAAM,MAAO,EAAIkjC,IACrB,IAAMu2e,EAAc,CAACv2e,EAAS60e,SAAW,IACzCW,EAAoB73hB,KAAK,CAAE,GAAGqiD,EAAU/jD,IAAGmwD,EAAGA,EAAImqe,CAAY,GAC9Dt6hB,GAAK+jD,EAASi6B,KAClB,GACC0nF,KAAK,CAAE7kJ,KAAM,OAAQ,EAAIkjC,IAEtB/jD,GAAK+jD,EAASi6B,KAClB,GACC4nF,WAAA,EAGT,OAAO2zX,CACX,CC/dA,IAAMgB,GAAqB,EAG3B,SAAgBC,GAA+B,CAC3C,IACA,QACA,cAKoD,CACpD,IAAMC,EAAmB53W,EACnB03W,GAAqB13W,EAAW,OAChC,EAIA63W,EAASvqe,GAHKo7G,EAAM,OAASkvX,GAGF,EAKjC,MAAO,CAAE,SAAQ,YAJG53W,EACd63W,EAASnvX,EAAM,OAASgvX,GACxB,MAEuB,CACjC,CAWA,SAASI,IAAmB,CACxB,QACA,kBACA,WACA,WACA,gBAOkD,CAClD,IAAMC,EAAmBjjN,EAAa,SAGhCkjN,EAAetvX,EAAM,QAAQ,MAAO,GAAG,CAAC,CAAC,KAAK,EAG9CuvX,GACF,EACA,IACS,CACT,IAAMziN,EAAaV,EAAa,SAAWA,EAAa,WACxD,OAAO,KAAK,IAAI,EAAG,KAAK,MAAMojN,EAAkB1iN,CAAU,CAAC,CAC/D,EAGM2iN,GAAgB,EAAkB,IACpC,IAAIliN,GAAS,CACT,KAAM+hN,EACN,WACA,GAAGljN,EACH,UACJ,CAAC,EAGCsjN,EAAWH,EAAoBC,EAAiBpjN,CAAY,EAY5DujN,EAAYF,EATGG,IAAwB,CACzC,MAAON,EACP,WACA,WACA,WACA,cACJ,CAG+B,EAAcD,CAAgB,EAC7D,GAAIM,EAAU,MAAM,QAAUD,EAAU,MAAO,CAAE,SAAUC,CAAU,EAIrE,IAAME,EAAkBC,IAAyB,CAC7C,MAAOR,EACP,WACA,kBACA,YAAaD,EACb,YANgB,KAAK,IAAI,KAAK,MAAMA,EAAmB,EAAG,EAAG,CAM7D,EACA,cACJ,CAAC,EAGKU,EAAkBN,EAAajiN,EAAUqiN,CAAe,EAExDG,EAAwBT,EAC1BC,EACA,CAH0B,GAAGpjN,EAAc,SAAUyjN,CAGrD,CACJ,EAGA,MAAO,CAAE,SAAUE,EAAiB,gBAFZA,EAAgB,MAAM,OAASC,CAEH,CACxD,CAGA,SAASJ,IAAwB,CAC7B,QACA,WACA,WACA,WACA,gBAOO,CACP,IAAIvjN,EAAM0oL,EACNzoL,EAAOkB,EACPyiN,EAAYziN,EAGhB,KAAOnB,GAAOC,GAAM,CAChB,IAAMj+M,EAAM,KAAK,OAAOg+M,EAAMC,GAAQ,CAAC,EAOnC,IANiBiB,GAAS,CAC1B,KAAMvtK,EACN,SAAU3xC,EACV,GAAG+9M,CACP,CAEI,EAAS,MAAM,QAAUsjN,GAEzB,EAAYrha,EACZ,EAAOA,EAAM,GAGb,EAAMA,EAAM,CAEpB,CAEA,OAAO4ha,CACX,CAGA,SAASH,IAAyB,CAC9B,QACA,WACA,kBACA,cACA,cACA,gBAQO,CACP,IAEIh9W,EAAW0/J,EAEf,KAAO1/J,GAAYo9W,GAAa,CAC5B,IAAMpjN,EAAah6J,EAAWs5J,EAAa,WACrCsjN,EAAW,KAAK,IAAI,EAAG,KAAK,MAAMF,EAAkB1iN,CAAU,CAAC,EASrE,GAAI,IAPiBS,GAAS,CAC1B,KAAMvtK,EACN,WACA,GAAGosK,EACH,UACJ,CAEI,EAAS,MAAM,QAAUsjN,EAAU,OAAO58W,EAE9C,GAAY,EAChB,CAEA,OAAOo9W,CACX,CAGA,SAAgBC,GAMd,CACE,SACA,2BACA,gBACA,gBACA,eACA,yBAAyB,CACrB,SAAU,GAAM/jN,EAAa,SAC7B,WAAY,IACZ,WAAY,CAChB,EACA,oBAAoB,IASqD,CAEzE,IAAMgkN,EAAgBvmE,EAAO,IAAK,GAAW,CAIzC,GAAM,CACF,SAAU8lE,EACV,gBAAiBU,GACjBjB,IAAmB,CACnB,MAPUvlE,EAAO,iBAAmBA,EAAO,WAQ3C,gBAAiBymE,EACjB,SAAUC,EACV,SAAUC,EACV,cACJ,CAAC,EAGD,GAAI,CAAC3mE,EAAO,WAAY,MAAO,CAAE,YAAW,0BAAyB,EAGrE,IAAM4mE,EACFH,EAA2BX,EAAU,OAASX,GAAqB,EAKvE,GAAIyB,EADAC,EAAuB,SAAWA,EAAuB,WAEzD,MAAO,CAAE,YAAW,0BAAyB,EAGjD,IAAMC,EAAiB,IAAIpjN,GAAS,CAChC,KAAMs8I,EAAO,WAEb,SAAU,KAAK,IAAI2mE,EAAeb,EAAU,MAAQ,EAAE,EACtD,GAAGe,CACP,CAAC,EAGD,GAAIC,EAAe,OAASF,EAA8B,CAEtD,IAAME,EAAiB,IAAIpjN,GAAS,CAChC,KAAMs8I,EAAO,WACb,SAAU2mE,EACV,GAAGE,CACP,CAAC,EAKD,MAAO,CACH,YACA,2BACA,iBACA,8BANAC,EAAe,OAASF,CAO5B,CACJ,CAEA,MAAO,CACH,YACA,iBACA,2BACA,8BAA+B,EACnC,CACJ,CAAC,EAMD,GAAI,CAHoBL,EAAc,KACjC,GAAM/qf,EAAE,0BAA4BA,EAAE,6BAEtC,EACD,OAAOwkb,EAAO,KAAK,EAAQ,KAAW,CAClC,GAAGA,EACH,MAAOqjE,GAAiB,aACpBkD,EAAcl7hB,EAAM,CAAC,UACrB,CAAE,oBAAmB,WAAY,KAAM,CAC3C,EACA,mBAAoBk7hB,EAAcl7hB,EAAM,CAAC,cAC7C,EAAE,EAGN,IAAM07hB,EAA0BR,EAC3B,OAAQ,GAAM,CAAC/qf,EAAE,wBAAwB,CAAC,CAC1C,IAAK,GAAMA,EAAE,UAAU,KAAK,EAC3Bwrf,EAA+BT,EAChC,OACI,GACG/qf,EAAE,iBAAmB,QACrB,CAACA,EAAE,6BACX,CAAC,CACA,IAAK,GAAMA,EAAE,eAAgB,KAAK,EACjC8mS,EAAc,KAAK,IACrBnrK,GAAM4vX,CAAuB,GAAK,EAClC5vX,GAAM6vX,CAA4B,GAAK,CAC3C,EAEMC,EAAkBV,EAAc,KACjC,CAAE,YAAW,8BACLC,EAQE,IAAI9iN,GAAS,CAChB,KAPkBf,GAClBmjN,EAAU,KACVxjN,EACAC,CAIM,EACN,SAAU,IACV,GAAGA,CACP,CAAC,EAZqCujN,CAc9C,EAEMoB,EAAuBX,EAAc,KACtC,CAAE,iBAAgB,mCACX,CAACO,GAAkB,CAACK,EACbL,EAQJ,IAAIpjN,GAAS,CAChB,KAPkBf,GAClBmkN,EAAe,KACfxkN,EACAukN,CAIM,EACN,SAAU,IACV,GAAGA,CACP,CAAC,CAET,EAEA,OAAO7mE,EAAO,KAAK,EAAQ,KAAW,CAClC,GAAGA,EACH,MAAOqjE,GAAiB,aAAa4D,EAAgB57hB,GAAQ,CACzD,oBACA,WAAY,KAChB,CAAC,EACD,mBAAoB67hB,EAAqB77hB,EAC7C,EAAE,CACN,CC9UA,SAAgB+7hB,IAAsB,CAClC,eACA,oBAIqB,CACrB,GAAIC,EAAiB,SAAW,EAAG,MAAO,CAAC,EAE3C,IAAMtla,EAAYsla,EAAiB,OAAS,EACtCC,EAAiB,IAAI,IACvBC,EAAa,KAAK,CAAE,OAAM,cAAe,CAACjzf,EAAMoS,CAAQ,CAAC,CAC7D,EACM8gf,EAAsBH,EAAiB,IAAK,GAC9CC,EAAe,IAAIhzf,CAAI,CAC3B,EAEMmzf,EAAoC,CAAC,EACvC54Z,EAAa,EACjB,IAAK,IAAIxjI,EAAQ,EAAGA,GAAS02H,EAAW,IAAS,CAI7C,GAFI12H,IAAU02H,GACVyla,EAAoBn8hB,EAAQ,KAAOm8hB,EAAoBn8hB,GACxC,SAEnB,IAAM2wF,EAAQ,CACV,UAAWqrc,EAAiBx4Z,GAC5B,QAASw4Z,EAAiBh8hB,EAC9B,EACMq7C,EAAW8gf,EAAoBn8hB,GACrCo8hB,EAAY,KACR/gf,IAAa,OACP,CAAE,KAAM,UAAW,GAAGs1C,CAAM,EAC5B,CAAE,KAAM,WAAY,WAAU,GAAGA,CAAM,CACjD,EACA,EAAa3wF,EAAQ,CACzB,CACA,OAAOo8hB,CACX,CAEA,SAAgBC,IAAmB,CAC/B,cACA,mBACA,aACA,cAMkB,CAClB,GAAM,CAAE,UAAWC,EAAkB,QAASC,GAC1CC,EAEJ,OAAOJ,EACF,OACI,GACGK,EAAW,SAAWH,GACtBG,EAAW,WAAaF,CAChC,CAAC,CACA,IAAK,GAAgC,CAClC,IAAM9rR,EAAS,CACX,iBAAkB,KAAK,IACnBgsR,EAAW,UACXH,CACJ,EACA,eAAgB,KAAK,IAAIG,EAAW,QAASF,CAAe,EAC5D,eAAgBG,IAAuB,CACnC,UAAWD,EAAW,UACtB,QAASA,EAAW,QACpB,YACJ,CAAC,CACL,EACA,GAAIA,EAAW,OAAS,UACpB,MAAO,CAAE,GAAGA,EAAY,GAAGhsR,CAAO,EACtC,IAAM+4B,EAAM6uO,EAAW,eAAeokB,EAAW,QAAQ,EACzD,MAAO,CACH,GAAGA,EACH,GAAGhsR,EACH,cAAe+4B,GAAK,MAAQizP,EAAW,SACvC,MAAOjzP,GAAK,gBAChB,CACJ,CAAC,CACT,CAEA,SAAgBkzP,IAAuB,CACnC,YACA,UACA,cAKO,CAEP,OADItjgB,IAAcC,EAAgBwnb,EAAW,WAAWznb,CAAS,EAC1Dynb,EAAW,gBAAgBznb,EAAWC,CAAO,CACxD,CAGA,SAAgBsjgB,IAAsB,CAClC,UACA,cAIO,CAKP,OAAOnkE,IAJW3X,EAAW,aACzB73b,EAAQ,UACRA,EAAQ,OAEU,EAAW63b,EAAW,YAAY,CAC5D,CAEA,SAAgB+7E,IAAuB,CACnC,SACA,YAIO,CACP,OAAO,KAAK,IAAI5je,EAAS6je,EAAUpH,GAAqB,CAC5D,CAEA,SAAgBqH,IAAuB,CACnC,SACA,SACA,kBACA,cACA,YACA,0BACA,0BACA,qBAUuB,CACvB,IAAMC,EAAYC,GAAmB,EAAIxH,KAEzC,OAAO7gE,EAAO,KAAK,CAAE,WAAU,GAAGsoE,KAAwC,CACtE,IAAMvte,EAAIwte,EAAYD,EAAY,UAAU,EAEtCE,EAAUC,IAA2B,CACvC,WACA,YACA,yBACJ,CAAC,EACKC,EAAiBpiO,EAAS,KAAK,EAAS,IAC1CqiO,IAAwB,CACpB,UACA,GAAGH,EAAQj/L,GACX,EAAG,CAAC6+L,EAAY,EAChB,OAAQA,EACR,gBAAiBQ,EACjB,WAAYC,CAChB,CAAC,CACL,EAEM,CAAE,SAAQ,eAAgBzD,GAA+B,CAC3D,IACA,MAAOkD,EAAY,MACnB,WAAYA,EAAY,kBAC5B,CAAC,EAED,MAAO,CACH,GAAGA,EACH,IACA,OAAQD,EACR,cAAe,CAAE,EAAGS,EAAQ,QAASxD,EAASvqe,CAAE,EAChD,mBACIgue,IAAgB,OAEV,OADA,CAAE,EAAGD,EAAQ,QAASC,EAAchue,CAAE,EAEhD,gBACJ,CACJ,CAAC,CACL,CAEA,SAASiue,IAAyB,CAC9B,WACA,mBACA,mBACA,oBACA,SAOwB,CACxB,OAAO1iO,EAAS,IAAK,GAAY,CAC7B,IAAM5/Q,EACFryB,EAAQ,OAAS,WAAaA,EAAQ,SAAW,OAC/Ck5W,EACFl5W,EAAQ,YAAc40gB,GACtB,CAAC,CAACC,GAAkB,SAASxif,CAAQ,EAEzC,MAAO,CACH,GAAGryB,EACH,SAAU4rf,GAAgB,CACtB,MAAO,IAAI5gD,GAAiB9xF,EAAWuzF,CAAiB,EACxD,OACJ,CAAC,CACL,CACJ,CAAC,CACL,CAEA,SAAgBqoE,IAAuB,CACnC,OAAQC,EACR,iBACA,aACA,oBAMuB,CACvB,IAAMtoE,EACFuoE,IAAmB,QAAaH,IAAqB,OAEzD,OAAOE,EAAU,IAAK,GAAiC,CACnD,IAAM7gZ,EAAQ06X,EAAW,MAAMjjD,EAAO,UAAU,EAC1CipE,EACFI,GAAgB,aAAerpE,EAAO,WAChCqpE,EAAe,QAAQ,UACvB,OACV,MAAO,CACH,GAAGrpE,EACH,SAAUigD,GAAgB,CAAE,OAAM,CAAC,EACnC,eAAgB+oB,IAAyB,CACrC,SAAUhpE,EAAO,eACjB,mBACA,mBACA,oBACA,OACJ,CAAC,CACL,CACJ,CAAC,CACL,CAEA,SAASyoE,IAA2B,CAChC,WACA,YACA,2BAK+B,CAC/B,OAAOniO,EAAS,KAAK,EAAS,IAAU,CACpC,IAAMmzN,EAAcnzN,EAASj7T,EAAQ,GAC/BT,EAAI0+hB,EAAUj1gB,EAAQ,gBAAgB,EAI5C,MAAO,CAAE,IAAG,MAHEi1gB,EACV7P,GAAa,kBAAoB8P,CAElB,EAAQ3+hB,CAAE,CACjC,CAAC,CACL,CAEA,SAAS+9hB,IAAwB,CAC7B,UACA,IACA,QACA,IACA,SACA,kBACA,cASsB,CACtB,IAAMz8V,EAAY,CAAE,IAAG,QAAO,IAAG,QAAO,EACxC,GAAI73K,EAAQ,OAAS,UAAW,MAAO,CAAE,GAAGA,EAAS,GAAG63K,CAAU,EAElE,IAAMs9V,EAAgB,CAClB,GAAGn1gB,EACH,GAAG63K,EACH,eAAgB73K,EAAQ,UAAYA,EAAQ,iBAC5C,aAAcA,EAAQ,QAAUA,EAAQ,eACxC,UAAW,KAAK,IAAI0sgB,IAA2B18d,EAAQukB,EAAQ,CAAC,CACpE,EACA,MAAO,CACH,GAAG4gd,EACH,MAAOC,EACDC,IAAkBF,EAAeG,CAAU,EAC3C,MACV,CACJ,CAGA,SAASD,IACL,EACA,EACsC,CACtC,IAAMzmN,EAAahnP,EAAM,SAAS,SAAWA,EAAM,SAAS,WAC5D,GAAI5nE,EAAQ,OAAS,EAAI4uT,EAAY,OAErC,IAAM2mN,EAAav1gB,EAAQ,eAAiBA,EAAQ,UAAY,EAC1Dw1gB,EAAWx1gB,EAAQ,aAAeA,EAAQ,UAAY,EAO5D,GALI,IAAQ,MAAQu1gB,EAAaC,EAAW,GACzB,KAAK,IACpBzmE,GAAU/uc,EAAQ,cAAe4nE,EAAM,QAAQ,EAC/CmnY,GAAU/uc,EAAQ,eAAgB4nE,EAAM,SAAS,CAEhC,GAErB,MAAO,CACH,EAAG5nE,EAAQ,EAAIu1gB,EAAA,EACf,EAAGv1gB,EAAQ,EAAIA,EAAQ,OAAS,EAAI4uT,EAAa,EACjD,OACJ,CACJ,CCpVA,IAAa6mN,IAAiC,CAC1C,iBAAkB5hZ,IAAyB,oBAC/C,EAEM6hZ,IAAN,KAAkC,CAC9B,iBACID,IAA+B,iBAEnC,aAAc,CACVtoW,EAAe,KAAM,CACjB,iBAAkBnS,EAAW,GACjC,CAAC,CACL,CACJ,EAEa26W,IAAb,cACYD,GAEZ,CACI,iBAAiB,EAAkD,CAC/D3gW,GAAmB,KAAM19L,CAAG,CAChC,CAEA,UAA4D,CACxD,IAAMA,EAAMq9L,GACR,IACJ,EAEA,OADAS,GAA+B99L,EAAK,IAAIq+hB,GAA6B,EAC9DzkY,GAAW55J,CAAG,CACzB,CAEA,YAAY,EAA6C,CACrD,MAAM,EACFA,GAAK,KAAK,iBAAiBA,CAAG,CACtC,CACJ,E,s1GCSau+hB,IAAb,KAAaA,C,gCAYRrra,E,EAAa+1W,Y,GAIb/1W,E,EAAa0hW,kB,GAeb1hW,E,EAAa02W,gB,GAIb12W,E,EAAaqkZ,Y,GAIbrkZ,E,EAAa8gW,c,GAIb9gW,E,EAAa+gW,a,GAIb/gW,E,EAAasra,c,GAIbtra,E,EAAaymZ,S,GAIbzmZ,E,EAAaukZ,c,GAIbvkZ,E,EAAastV,Y,GAKbttV,E,EAAaura,kB,GAObvra,E,EAAa2+M,kB,GAIb3+M,E,EAAaggN,kB,GAObhgN,E,EAAawra,c,GAQbxra,E,EAAakgN,wB,GAMblgN,E,EAAqByoa,kB,GAMrBzoa,E,EAAaipa,kB,GAabjpa,E,EAAayra,mB,GAIbzra,E,EAAaokW,Y,GAMbpkW,E,EAAampZ,mB,GAIbnpZ,E,EAAqB0iZ,gB,GAIrB1iZ,E,EAAqB0ra,yB,GA8BrB1ra,E,EAAqBuha,gB,GAiCrBvha,E,EAAaohW,Q,GAqBbphW,E,EAAapa,W,KAxNdhoB,QAEAknb,WACAlmM,wBAAe,IAEf,YAAY,CAAEhhP,WAA8C,CACxD,KAAKA,QAAUA,EACf,KAAKknb,WAAa,IAAIxmM,GAAW,IAAI,EACrC17I,EAAe,IAAI,CACvB,CAEA,IAAcmzS,YAAwB,CAClC,OAAO,KAAKn4Y,QAAQ0zC,KACxB,CAEA,IAAcowV,kBAA8B,CACxC,OACI,KAAK9jY,QAAQ8jY,kBACb,KAAKujD,eAAe,KAAKlvC,UAAU,CAE3C,CAEAkvC,eAAe3zY,EAA6B,CAGxC,OAFK,KAAKyvV,YAEHzvV,EAAM+mV,oBACT,KAAKqe,eAAerhC,mBACxB,EAJ8B/jU,CAKlC,CAEA,IAAcolW,gBAAiC,CAC3C,OAAOzV,GAAmB,KAAKrjY,QAAQ5C,SAAS,CACpD,CAEA,IAAcqpb,YAAyB,CACnC,OAAO,KAAKzmb,QAAQymb,YAAc,IAAIP,EAC1C,CAEA,IAAchjD,cAA6B,CACvC,OAAOD,GAAuB,KAAKjjY,OAAO,CAC9C,CAEA,IAAcmjY,aAAsC,CAChD,OAAO,KAAKD,aAAa,EAC7B,CAEA,IAAcwqE,cAA2B,CACrC,OAAO,KAAKv1D,WAAW1re,IAAI,KAAK02d,WAAW,CAC/C,CAEA,IAAc0lD,SAAsB,CAChC,OAAO,KAAK/kD,iBAAiBr3d,IAAI,KAAK02d,WAAW,CACrD,CAEA,IAAcwjD,cAA2B,CACrC,OAAO,KAAKkC,OAChB,CAEA,IAAcn5D,YAAqC,CAC/C,GAAM,CAAEA,cAAe,KAAKyoB,WAC5B,OAAOzoB,aAAsBrS,GAAaqS,EAAa58T,MAC3D,CAEA,IAAc66Y,kBAA6C,CACvD,OACI,KAAK3tc,QAAQ+tc,UAAUJ,kBACvBL,IAA+BK,gBAEvC,CAEA,IAAc5sN,kBAA+B,CACzC,OAAO,KAAK2sN,YAChB,CAEA,IAActrN,kBAA0D,CACpE,OACItqC,GAAiB2vO,QAAQ,KAAK1mM,iBAAiBhvM,GAAG,GAClD,KAAK/xC,QAAQknb,UAErB,CAEA,IAAc0mB,cAAiD,CAC3D,IAAMlwd,EAAS,KAAKqjQ,iBACpB,GAAMrjQ,aAAkBgmY,GAAct1S,OACtC,OAAO1wF,aAAkBgmY,GAAcG,QACjC,UACA,aACV,CAEA,IAAcvhI,wBAA0C,CACpD,OAAO,KAAKsrN,eAAiB,UACvBnnZ,GAAgBy0J,yBAChBz0J,GAAgBunZ,gBAC1B,CAEA,IAAsBnD,kBAA2B,CAC7C,GAAM,CAAE7jY,YAAW4Z,UAASE,WAAY,KAAK4sX,aAE7C,MADI,CAAC,KAAKh+E,YAAc1oT,IAAc,EAAU,GACzC,KAAK0oT,WAAW7N,oBAAoBjhS,EAASE,EACxD,CAEA,IAAcuqX,kBAAyD,CACnE,GAAM,CAAE37E,cAAe,KACjB,CAAEznb,YAAWC,WAAY,KAAK83D,QACpC,GAAK0vX,GAAcznb,IAAc6qH,QAAa5qH,IAAY4qH,OAG1D,MAAO,CACH7qH,YACAC,UACA+lgB,iBAAkBv+E,EAAW/N,WAAWz5a,EAAS,EACrD,CACJ,CAEA,IAAc2lgB,mBAAgC,CAC1C,MAAO,CAAE/na,OAAQoc,GAAOuuT,WAAYpgS,UAAWtuB,GAAU8tB,GAAI,CACjE,CAEA,IAAc22T,YAAyB,CACnC,GAAM,CAAE1gW,SAAQuqC,aAAc,KAAKrwE,QAAQwmY,YAAc,CAAC,EAE1D,OADI1gW,GAAUg/Z,IAAkBh/Z,GAAgB,CAAEA,SAAQuqC,WAAU,EAC7D,KAAKw9X,iBAChB,CAEA,IAActiB,mBAAuC,CACjD,MAAO,CAAIsZ,MAAkB,CACjC,CAEA,IAAsB/f,gBAA6C,CAC/D,OAAOF,GAAkB,KAAKzsC,WAAY,KAAKu1D,aAAar3Y,IAAI,CACpE,CAEA,IAAsBy3Y,yBAGpB,CACE,GAAM,CAAEJ,eAAc7C,oBAAqB,KAErCqD,EAA0BR,EAAa7wF,2BAE7C,OAAO,IAAIh9b,IACP,KAAKi5d,eAAerhC,oBACfjgZ,OAAQi5Y,GAAey9F,EAAwBxhiB,IAAI+jc,IACnDzwb,IAAKywb,IACF,IAAMvlS,EACFgjY,EAAwBzhiB,IAAIgkc,IAAa36a,UAAY,GAMzD,MAAO,CACH26a,EACAm6F,IAAsB,CAClBG,aAPoCr+X,MAAMxnI,KAAKgmI,GAClD1zG,OAAQm2H,GAAQA,EAAItmL,QAAU,IAC9B2Y,IAAK2tK,IAAS,CAAE71I,KAAM61I,EAAI71I,KAAMoS,SAAUyjI,EAAItmL,KAAM,EAKjD0jiB,EACAF,kBACJ,EACJ,CACJ,GAEZ,CAEA,IAAsBlH,gBAAmC,CACrD,GAAM,CACFmK,0BACAzC,mBACAnkB,aACApC,iBACAp1D,cACA,KAGJ,MAFI,CAAC27E,GAAoB,CAAC37E,EAAmB,GAEtChjT,MAAMxnI,KAAK4ogB,GAAyB9thB,KACtC,CAACywb,EAAYw6F,KAAA,CACV,IAAMnhO,EAAWohO,IAAmB,CAChCD,cACAI,mBACAnkB,aACAx3D,YACJ,GAEA,MAAO,CACH+T,WAAYhzB,EACZA,aACA43E,gBAAiBnkD,GAAsBzzB,GACvCx/Q,WAAY4zV,GACRC,EACAr0E,GAEJ3mI,UACJ,CACJ,EAER,CAEA,IAAc05J,QAA2B,CACrC,IAAMiD,EAA2D,EAC5DvkV,GAAOiqY,QAAShmD,IAChBjkV,GAAOuuT,YAAc+yB,GAAmBA,EAAO/yB,UACpD,EAEA,OAAO81B,GAAa,KAAKo9D,eAAgB,KAAKn9D,WAAYC,EAC9D,CAEAgiD,iBAAiB1ia,EAAoC,CACjD,IAAMysF,EAAOzsF,EAAO0ia,iBAAA,EAQpB,OAPAj2U,EAAKk2U,mCAAmC,CACpC,KAAK2iB,kBAAkBpjgB,UACvB,KAAKojgB,kBAAkB4C,gBAC1B,GACDz7V,EAAKvrC,UAAYvkB,GAAUg8J,OAC3BlsG,EAAKm0U,aAAe,KAAKxuC,WAAWzoB,WACpCl9Q,EAAKm2U,oBAAsB,GACpBn2U,CACX,CAEA,IAAcxqF,WAA4B,CACtC,IAAMryF,EAAUytc,GAAsB,KAAKpjY,OAAO,EAClD,GAAIrqE,EAAS,MAAO,CAAEosB,OAAQpsB,CAAQ,EAEtC,GAAI,KAAKutc,aAAap0d,OAAS,EAC3B,MAAO,CAAEizC,OAAQ,2CAA4C,EAEjE,GAAI,CAAC,KAAK6rf,aACN,MAAO,CAAE7rf,OAAQ,+CAAgD,EAErE,GAAM,CAAEi9b,mBAAmB,YAAe,KAAKh/Y,QAO/C,OAN2B,KAAKwjY,OAAO39V,KAAM29V,GACzCA,EAAO15J,SAASjkM,KAAMhuG,GAAYA,EAAQ7Z,OAAS,WAElDmwhB,EAGE,CAAEpsf,OAAQ,EAAG,EAFT,CAAEA,OAAQ,4BAA4Bi9b,GAAmB,CAGxE,CACJ,E,s1GCpPaovD,IAAb,KAAaA,C,gCAyKRhsa,E,EAAa+1W,Y,GAYb/1W,E,EAAaokZ,6B,GAObpkZ,E,EAAa0hW,kB,GAmBb1hW,E,EAAqBisa,iC,GAWrBjsa,E,EAAa02W,gB,GAIb12W,E,EAAaksa,W,GAIblsa,E,EAAamsa,e,GAsBbnsa,E,EAAas1W,W,GAIbt1W,E,EAAaosa,4B,GAKbpsa,E,EAAa+4W,e,GAKb/4W,E,EAAaqsa,wB,GAIbrsa,E,EAAaggN,kB,GAObhgN,E,EAAa2+M,kB,GAMb3+M,E,EAAa8oZ,kB,GAIb9oZ,E,EAAa6+M,qB,GAIb7+M,E,EAAa8+M,oB,GAIb9+M,E,EAAa53B,Y,GAIb43B,E,EAAqB44U,mB,GAMrB54U,E,EAAa6nZ,iB,GAWb7nZ,E,EAAassa,oB,GA0Bbtsa,E,EAAas/M,a,GAIbt/M,E,EAAaohW,Q,GAyBbphW,E,EAAausa,W,GAIbvsa,E,EAAawsa,uB,GAqBbxsa,E,EAAapa,W,KAvYdhoB,QAEAknb,WACA5kM,kCAAyB77L,GAAgB87L,MACzCvB,aAAe,GAEf,YAAY,CAAEhhP,WAAyC,CACnD,KAAKA,QAAUA,EACf,KAAKknb,WAAa,IAAIxmM,GAAW,IAAI,EACrC17I,EAAe,IAAI,CACvB,CAEAqiV,eAAe3zY,EAA6B,CAIxC,MAFAA,GAAQ,KAAKm7Z,mBAAmBn7Z,GAEzBjuI,GAAM,KAAK8oiB,aAAa,EAC1Bz6X,KAAK,CAAE7kJ,KAAMroB,GAAEgd,MAAM,aAAc,YAAa,EAAIuqF,GACjD,KAAK2gc,iCAAiCp7Z,EAAOvlC,IAEhD2lE,KAAK,CAAE7kJ,KAAM,sBAAuB,EAAIk/E,GACrC,KAAK4gc,mCAAmCr7Z,EAAOvlC,IAElD6lE,WAAA,CACT,CAEA86X,iCACIp7Z,EACA66Z,EAIS,CACT,OAAO76Z,EACFsoV,iCAAiCuyE,EAAcl4Y,IAAI,EACnDwpU,+BAA+B0uE,EAAcl4Y,KAAM,CAChD0pU,kBAAmB,KAAK2X,UAAUuE,cAClCnc,0BAA2B,KAAK4X,UAAU18B,iBAC9C,EACR,CAEA+zF,mCACIr7Z,EACA66Z,EACS,CACT,GAAM,CAAEvpE,iBAAgBC,gBAAeC,gBAAiBqpE,EAqBxD,MAlBA76Z,GAAQA,EACHmsV,+BAA+BoF,EAAe,CAC3ClF,kBAAmB,KAAK2X,UAAUuE,cAClCnc,0BAA2B,KAAK4X,UAAU18B,iBAC9C,GACC6kB,+BAA+BmF,EAAgB,CAC5CjF,kBAAmB,KAAK2X,UAAUuE,cAClCnc,0BAA2B,KAAK4X,UAAU18B,iBAC9C,GAGJtnU,EAAQqxV,GAAsCrxV,EAAO66Z,EAAe,CAChE9oE,4BAA6B,EACjC,GAGA/xV,EAAQA,EAAMsoV,iCAAiCkJ,GAExCxxV,CACX,CAEA4zY,2BAA2B5zY,EAA6B,CAIpD,MAHAA,GAAQ,KAAKs7Z,sBAAsBt7Z,GACnCA,EAAQ,KAAKu7Z,+BAA+Bv7Z,GAC5CA,EAAQ,KAAKw7Z,eAAex7Z,GACrBA,CACX,CAEAw7Z,eAAuBx7Z,EAA6B,CAGhD,OAAOA,EAAMinV,8CAA8C,CACvDC,SAAU,CAAC,YAAY,CAC3B,EACJ,CAEAi0E,mBAA2Bn7Z,EAA6B,CACpD,IAAMy7Z,EACFz7Z,EAAMylV,qBAAqB3ha,OAAOsue,KACtC,OAAOpyZ,EAAM+mV,oBAAoB00E,EACrC,CAEAF,+BAAuCv7Z,EAA6B,CAChE,GAAM,CAAEolW,iBAAgBpB,aAAc,KAEhC03D,EAA0B1sX,GAAkB1iK,IAAKuV,GAAMA,EAAE1sB,IAAI,EAC7DwmiB,EAAiBztX,GAClBpqH,OAAQ0G,GAAMikH,GAAgBjkH,IAAMA,EAAEqkH,OAAS,YAC/CviK,IAAKk+C,GAAMA,EAAEr1D,IAAI,EAEhBymiB,EAAyB,IAAIzuhB,IAAIuuhB,GAKvC,GAAI,KAAK13D,UAAU8K,oBAAA,EAAuB,CACtC,IAAM+sD,EAAuB3J,GACzBpxD,GAAkBkD,EAAUprV,OAChC,EACA,GAAI,CAACijZ,EAAsB,OAAO77Z,EAElC,IAAM87Z,EAA4BD,EAC7B1jiB,KAAA,EACA2rD,OAAQktH,GACL4qX,EAAuB5iiB,IAAIg4K,IAGnC,OAAOhxC,EAAM+mV,oBACT7zT,GAAS,CAEF4oY,KAEA12D,KAAerhC,mBACrB,GAET,CAUA,OAPKqhC,EAAe5F,WAObx/V,EAAM+mV,oBACT7zT,GAAS,CAEFyoY,KAEAv2D,KAAe1F,+BAEf0F,KAAerhC,mBACrB,IAdM/jU,EAAM+mV,oBAAoB,CAC1B40E,KACAD,IACN,EAaT,CAEAJ,sBAA8Bt7Z,EAA6B,CAUvD,IAAMw3B,EAJ2BwX,GAAkBlrH,OAC9Cs0F,GAAY,CAACpY,EAAM0lV,uBAAuB1sd,IAAIo/I,EAAQjjJ,IAAI,CAGlD4miB,EAAyBzvhB,IAAK8rI,IAAa,CACpD2kT,WAAY3kT,EAAQjjJ,KACpBivC,KAAM47F,EAAMotC,QACZz5K,MAAOqyc,GAAgBD,uBAC3B,IAMA,MALA/lU,GAAQA,EAAMiiV,WACVzqT,EACA,oDAAoDA,EAAKlrJ,IAAK2tK,GAAQA,EAAI8iR,UAAU,EAAE/ic,KAAK,OAC/F,EAEOgmI,CACX,CAEA,IAAcykW,YAAwB,CAClC,GAAM,CAAEo2D,iBAAkB,KACpB,CAAE76Z,SAAU,KAAK1zC,QAKvB,OAAOuuc,EAAct/gB,OAAS,uBACxB81c,GAAsCrxV,EAAO66Z,GAC7C76Z,CACV,CAEA,IAAc8yY,6BAAyC,CACnD,OACI,KAAKxmb,QAAQ8jY,kBACb,KAAKujD,eAAe,KAAKlvC,UAAU,CAE3C,CAEA,IAAcrU,kBAA8B,CACxC,IAAIpwV,EAAQ,KAAK8yY,4BAWjB,OARI,KAAKxmb,QAAQwK,aAAesoD,SAC5Bpf,EAAQA,EAAM+nV,oBACV,CAAC,KAAKz7X,QAAQwK,UAAU,EACxB,KAAKktY,UAAUuE,eACXvoW,EAAMjnI,IAAI,KAAK0ue,aAAa,EAAE3vU,SACtC,GAGG93B,CACX,CAMA,IAAsB26Z,iCAA6C,CAC/D,GAAI,CAAC,KAAK32D,UAAU8K,oBAAA,EAAuB,OAAO,KAAK1e,iBAEvD,IAAMthT,EAAYojX,GACdpxD,GAAkB,KAAKkD,UAAUprV,OACrC,EAGA,OAFKk2B,EAEE,KAAKshT,iBAAiBrJ,oBAAoB,CAAIj4S,IAAU,GAFxC,KAAKshT,gBAGhC,CAEA,IAAcgV,gBAAoC,CAC9C,OAAO,KAAKpB,UAAUt6Y,SAC1B,CAEA,IAAckxc,WAAwB,CAClC,OAAO,KAAKxqE,iBAAiBr3d,IAAI,KAAK0ue,aAAa,CACvD,CAEA,IAAcozD,eAA+B,CACzC,IAAMpzD,EAAgB,KAAKn7Y,QAAQm7Y,cAI7BgB,EACF,KAAKn8Y,QAAQi+Y,4BAA4Bxxe,IAAI0ue,GAajD,OAZIgB,EACO,CACHltd,KAAM,uBACNonI,KAAM8lV,EAAejX,aACrB,GAAGiX,CACP,EAOG,CAAEltd,KAJI,KAAK+wE,QAAQ0zC,MAAMjnI,IAAI0ue,GAAen3J,aAC7C,YACA,aAES3tL,KAAM8kV,CAAc,CACvC,CAEA,IAAczD,WAAuB,CACjC,OAAO,KAAK13Y,QAAQ03Y,WAAa,IAAInC,EACzC,CAEA,IAAci5D,4BAA8C,CACxD,GAAM,CAAEkB,0BAA0B,IAAO,KAAK1vc,QAC9C,OAAO,IAAIn/E,IAAI6uhB,EAAwBl4e,OAAOsue,KAClD,CAEA,IAAc3qD,eAA4B,CACtC,OAAO,KAAKozD,cAAcl4Y,IAC9B,CAGA,IAAco4Y,wBAAqC,CAC/C,OAAO,KAAKI,mBAAmB,KAAK12D,UAAU,EAAE1re,IAAI,KAAK0ue,aAAa,CAC1E,CAEA,IAAc/4J,kBAAqC,CAC/C,OACItqC,GAAiB2vO,QAAQ,KAAK6mB,UAAUv8Z,GAAG,GAC3C,KAAK2lW,UAAUwvC,UAEvB,CAEA,IAAcnmM,kBAA+B,CAGzC,OAAO,KAAK0tN,sBAChB,CAEA,IAAcvjB,kBAA4B,CACtC,OAAO,KAAKqjB,cAAct/gB,OAAS,YACvC,CAEA,IAAcgyT,qBAA+B,CACzC,OAAO,KAAKiqM,gBAChB,CAEA,IAAchqM,oBAA8B,CACxC,OAAO,KAAKstN,2BAA2B5shB,KAAO,CAClD,CAEA,IAAc4oF,YAAiC,CAC3C,OAAO,KAAKxK,QAAQwK,YAAc,KAAKxK,QAAQ93D,OACnD,CAEA,IAAsB8ya,mBAAmD,CACrE,OACI,KAAK08B,UAAU18B,mBAAqB,KAAKszF,UAAUtzF,iBAE3D,CAEA,IAAcivE,iBAAsC,CAChD,OAAOnB,GAAoB,CACvB3wC,WAAY,KAAKA,WAEjBrU,iBAAkB,KAAKuqE,gCACvBljY,QAAS,CAAC,KAAKmjY,SAAS,EACxBryD,cAAe,KAAKvE,UAAUuE,cAC9BjhC,kBAAmB,KAAKA,iBAC5B,EACJ,CAEA,IAAc0zF,oBAA6C,CACvD,IAAMvpE,EACF,KAAKopE,eAAet/gB,OAAS,uBACvB,KAAKs/gB,cAAcppE,0BACnBryU,OAEV,OAAOqyU,EACD,KAAKrB,iBAAiBr3d,IAAI04d,GAC1BryU,MACV,CAEA68Y,kBACIl/F,EACAgP,EACO,CACP,OAAOh6c,GAAM,KAAK8oiB,cAAct/gB,IAAI,EAC/B6kJ,KAAK,iBAAoB,IACzBA,KAAK,gBAAmB,IACxBA,KAAK,2BACF,KAAK46X,oBAAoB1xF,iCACpBvwc,IAAIgkc,IACHhkc,IAAIgzc,IAEbzrS,WAAA,CACT,CAEA,IAAc0tK,aAAqB,CAC/B,OAAO,KAAKwlM,WAAWxlM,WAC3B,CAEA,IAAc8hJ,QAA6B,CACvC,GAAM,CAAE8qE,YAAW9jc,cAAe,KAIlC,OAHI8jc,EAAU1zF,WACVpwW,IAAesoD,OAAkB,GAE9Bw7Y,EAAU3xF,SACZ38b,IAAK2tK,IACF,GAAM,CAAE8iR,aAAYppc,QAAOo4c,gBAAiB9xR,EAO5C,MAAO,CACH81S,WAAYhzB,EACZ34Z,KAAM2na,EACNp4c,QACAiwN,MATA,KAAK4vT,WAAWrjM,SAASx8U,IAAU,KAAKq6U,YAUxCsC,aATiB,KAAK2rN,kBACtBl/F,EACAgP,CAOAz7H,CACJ,CACJ,GACCxsR,OAAOsiF,GAChB,CAEA,IAAc60Z,WAAoC,CAC9C,OAAO,IAAI9uhB,IAAI,KAAK2jd,OAAOxjd,IAAKwjd,GAAW,CAACA,EAAOC,WAAYD,CAAO,GAC1E,CAEA,IAAcorE,uBAAkD,CAC5D,GAAM,CAAEl3D,YAAWwvC,cAAe,KAElC,OAAQ/ne,EAAkBrxC,KACtB,GAAI4pe,EAAUk4D,uBAAwB,CAGlC,IAAMj2X,EADMutW,EAAWtjM,eAAezkS,CACxBk5P,GAAK1+H,MACnB,GAAIA,IAAU7mB,QAAa6mB,IAAU,GACjC,MAAO,CAAEA,QAAOk2X,cAAe,EAAK,CAC5C,CAMI,OAJA,OAAO1wf,GAAM,SAEN,CAAEw6H,MADK,KAAK20X,UAAUprN,iBAAiB/jS,EAAGrxC,CACxC6rK,EAAOk2X,cAAe,EAAM,EAE9B,CAAEl2X,MAAOxL,GAAYhvH,GAAI0wf,cAAe,EAAK,CAE5D,CACJ,CAEA,IAAc7nb,WAA4B,CAEtC,OADI,KAAKsmb,UAAU1zF,UAAkB,CAAE74Z,OAAQ,oBAAqB,EAC7D,CAAEA,OAAQ,EAAG,CACxB,CACJ,EC9ba+tf,IAAwB,CACjC,QAAS,GACT,KAAM,OACN,OAAQ,OACR,gBAAiB,KACrB,EAEaC,IAA8B,CACvC,KAAM,OACN,QAAS,EACb,E,80GCW4CzkV,cAAMpoG,UAANooG,I,KAArC,cAAqCA,I,wCAD3C5zH,C,IASI0qC,E,EAAqB65Z,iB,GAIrB75Z,E,EAAqBqqD,U,GAIrBrqD,E,EAAqBstE,W,GAQrBttE,E,EAAqBi1Z,a,GAKrBj1Z,E,EAAqB8xZ,Y,GAKrB9xZ,E,EAAqB4ta,iB,GAsBrB5ta,E,EAAqB6ta,e,CAxDkB3kV,gB,CAGxC,YAAY/3M,EAA0D,CAClE,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAsBi3V,iBAAmC,CACrD,OAAO,KAAK1ohB,MAAM2xgB,SAAS+W,eAC/B,CAEA,IAAsBxvW,UAAmB,CACrC,OAAO,KAAKwvW,gBAAgBxvW,QAChC,CAEA,IAAsBijB,WAEN,CACZ,OAAO,KAAKusV,gBAAgB5H,4BAA4B5nhB,IACpD,KAAKynhB,WAAWM,OACpB,CACJ,CAEA,IAAsB6C,aAAsB,CAExC,OAAO,KAAK5qW,QAChB,CAEA,IAAsBynW,YAA2C,CAC7D,OAAO,KAAK3ghB,MAAM28hB,cACtB,CAGA,IAAsBF,iBAEN,CACZ,GAAM,CAAE9qB,YAAa,KAAK3xgB,MACpB,CAAE8xgB,iBAAgBI,eAAgBP,EAClCirB,EAAS,KAAKjc,WAAWM,QACzB,CAACC,EAAMC,GAAQrP,EAAe1pd,OAIpC,GADuBw0e,GAAU1b,GAAQ0b,GAAUzb,EAGnD,MAAO,CACHtmhB,EAAGi3gB,EAAewP,MAAMsb,GAGxB/jX,GAAIq5V,EAAYpjX,IAAM,KAAKg1X,YAC3BhrW,GAAIo5V,EAAYz2W,MACpB,CACJ,CAGA,IAAsBihY,eAEN,CACZ,GAAM,CAAED,kBAAiBtgW,aAAc,KAEvC,GAAKsgW,GAAoBtgW,EAEzB,MAAO,CACHthM,EAAGshM,EAAUthM,EACbmwD,EAAGyxe,EAAgB5jX,GACnB+lP,OAAQziO,EAAUyiO,MACtB,CACJ,CAEAi+H,aAAiD,CAC7C,GAAI,CAAC,KAAKH,cAAe,OAAO,KAEhC,GAAM,CAAE7hiB,IAAGmwD,IAAG4zW,UAAW,KAAK89H,cAE9B,OACIxgV,SAAC,OAAD,CACI,GAAIsgV,IACJ3hiB,EAAG+5J,EAAY/5J,GACfmwD,EAAG4pG,EAAY5pG,GACfkuH,SAAU,KAAKA,SACf21H,GAAItwI,GAAY1jB,GAAc4gB,MAAM,EACpC89L,WAAYqlE,EAEX1tT,SAAA,KAAKyva,WAAWv6W,KACf,EAEd,CAEAmrC,QAA6C,CACzC,GAAI,CAAC,KAAKkrV,gBAAiB,OAAO,KAElC,GAAM,CAAE5hiB,IAAGg+K,KAAIC,MAAO,KAAK2jX,gBAE3B,OACI94P,UAAC,IAAD,CAAGlvS,GAAI+6J,EAAY,kBAAmB,KAAKmxX,WAAWv6W,KAAK,EAA3Dl1D,SAAA,EACIgrG,SAAC,OAAD,CACIzjC,GAAI7jB,EAAY/5J,GAChBg+K,GAAIjkB,EAAYikB,GAChBD,GAAIhkB,EAAY/5J,GAChBi+K,GAAIlkB,EAAYkkB,GAChB5sF,MAAOqwc,GACV,GACA,KAAKM,YAAA,CACP,C,EAEX,C,aACJ,GChIA,IAAIv9hB,IAAI,OAAO,eACXjI,KAAK,EAAG,EAAG,IAAMmF,KAAKkvC,EAAIpsC,IAAEosC,EAAGlvC,EAAG,CAAE,WAAY,CAAC,EAAG,aAAc,CAAC,EAAG,SAAU,CAAC,EAAG,MAAO6uC,CAAE,CAAC,EAAI,EAAE7uC,GAAK6uC,EACzGzwC,IAAK,EAAG,EAAG,KAAOvD,IAAEq0C,EAAG,OAAOlvC,GAAK,SAAoBA,EAATA,EAAI,GAAQ6uC,CAAC,EAAGA,GAC5Dwf,GAAI,CACR,GAAI,KAAK,GACT,EAAG,KAAK,EACR,IAAK,KAAK,IACV,KAAM,KAAK,KACX,MAAO,KAAK,MACZ,OAAQ,KAAK,OACb,QAAS,KAAK,QACd,MAAO,KAAK,KACd,EACM3wC,GAAN,KAAQ,CACN,OAAO,iBAAiB,EAAG,CACzB,GAAI,OAAO1d,GAAM,SACf,MAAU,MAAM,4CAA4C,CAChE,CACF,EACM3M,IAAN,KAAQ,CACN,OAAO,iBAAiB,EAAG,CACzB,GAAI,OAAO2M,GAAM,SACf,MAAU,MAAM,4CAA4C,CAChE,CACF,EACM0vC,GAAN,KAAQ,CACN,OAAO,yBAAyB,EAAG,EAAG,EAAG,CACvC,GAAI1vC,IAAM,IACR,OAAO,IAAIyd,GAAEoxB,EAAGqf,CAAC,EACnB,GAAI,CAAC,IAAK,GAAG,CAAC,CAAC,SAASluD,CAAC,EACvB,OAAO,IAAI3B,GAAE2B,EAAG6uC,EAAGqf,CAAC,EACtB,GAAI,CAAC,IAAK,GAAG,CAAC,CAAC,SAASluD,CAAC,EACvB,OAAO,IAAI8uC,GAAE9uC,EAAG6uC,EAAGqf,CAAC,EACtB,GAAI,CAAC,IAAK,IAAK,KAAM,KAAM,IAAK,IAAI,CAAC,CAAC,SAASluD,CAAC,EAC9C,OAAO,IAAIovC,GAAEpvC,EAAG6uC,EAAGqf,CAAC,EACtB,MAAU,MAAM,qBAAqBluD,GAAG,CAC1C,CACA,SAAS,EAAI,CAAC,EAAG,CACf,MAAU,MAAM,qDAAqD,CACvE,CACA,UAAW,CACT,MAAO,EACT,CACF,EACMkD,IAAN,cAAgBwsC,EAAE,CAChB,YAAY,EAAG,CAGb,GAFA,MAAM,EACN4wf,GAAE,KAAM,iBAAiB,EACrB,KAAK,gBAAkB,EAAG,EAAE,KAAK,2BAA2B5wf,IAC9D,MAAU,MAAM,kDAAkD,CACtE,CACA,SAAS,EAAI,CAAC,EAAG,CACf,OAAO,KAAK,gBAAgB,SAAS,CAAC,CACxC,CACA,UAAW,CACT,MAAO,IAAI,KAAK,gBAAgB,SAAS,EAAE,EAC7C,CACF,EACMof,GAAN,cAAgBpf,EAAE,CAChB,YAAY,EAAG,EAAI,SAAU,CAI3B,OAHA,MAAM,EACN4wf,GAAE,KAAM,OAAO,EACfA,GAAE,KAAM,MAAM,EACN,KAAK,MAAQ,OAAO,CAAC,EAAG,EAAhC,CACE,IAAK,SACH,GAAI,KAAK,MAAQ,OAAO,CAAC,EAAG,MAAM,KAAK,KAAK,EAC1C,MAAU,MAAM,wBAA0B,CAAC,EAC7C,MACF,IAAK,SACH,KAAK,MAAQ,OAAO,CAAC,EACrB,MACF,QACE,MAAU,MAAM,uBAAyB,CAAC,CAC9C,CACA,KAAK,KAAO,CACd,CACA,UAAW,CACT,OAAO,KAAK,KACd,CACA,UAAW,CACT,OAAQ,KAAK,KAAb,CACE,IAAK,SACH,OAAO,OAAO,KAAK,KAAK,EAC1B,IAAK,SACH,MAAO,IAAM,KAAK,MAAQ,IAC5B,QACE,MAAU,MAAM,cAAc,CAClC,CACF,CACF,EACMxxf,GAAN,cAAgBY,EAAE,CAChB,YAAY,EAAG,EAAG,EAAG,CAKnB,GAJA,MAAM,EACN4wf,GAAE,KAAM,UAAU,EAClBA,GAAE,KAAM,MAAM,EACdA,GAAE,KAAM,OAAO,EACX,CAAC,CAAC,IAAK,GAAG,CAAC,CAAC,SAAS,CAAC,EACxB,MAAU,MAAM,kDAAkD,GAAG,EACvE,KAAK,SAAW,EAAG,KAAK,KAAO,EAAG,KAAK,MAAQnye,CACjD,CACA,SAAS,EAAI,CAAC,EAAG,CACf,IAAM,EAAI,KAAK,KAAK,SAAS,CAAC,EAAGA,EAAI,KAAK,MAAM,SAAS,CAAC,EAC1D,GAAIzwC,GAAE,iBAAiB,CAAC,EAAGA,GAAE,iBAAiBywC,CAAC,EAAG,KAAK,WAAa,IAClE,OAAO,OAAO,CAAC,EAAI,OAAOA,CAAC,EAC7B,GAAI,KAAK,WAAa,IACpB,OAAO,OAAO,CAAC,EAAI,OAAOA,CAAC,EAC7B,MAAU,MAAM,2CAA2C,CAC7D,CACA,UAAW,CACT,MAAO,GAAG,KAAK,KAAK,SAAS,EAAE,GAAG,KAAK,SAAS,GAAG,KAAK,MAAM,SAAS,GACzE,CACF,EACM9vD,GAAN,cAAgBqxC,EAAE,CAChB,YAAY,EAAG,EAAG,EAAG,CAKnB,GAJA,MAAM,EACN4wf,GAAE,KAAM,UAAU,EAClBA,GAAE,KAAM,MAAM,EACdA,GAAE,KAAM,OAAO,EACX,CAAC,CAAC,IAAK,GAAG,CAAC,CAAC,SAAS,CAAC,EACxB,MAAU,MAAM,yDAAyD,GAAG,EAC9E,KAAK,SAAW,EAAG,KAAK,KAAO,EAAG,KAAK,MAAQnye,CACjD,CACA,SAAS,EAAI,CAAC,EAAG,CACf,IAAM,EAAI,KAAK,KAAK,SAAS,CAAC,EAAGA,EAAI,KAAK,MAAM,SAAS,CAAC,EAC1D,GAAIzwC,GAAE,iBAAiB,CAAC,EAAGA,GAAE,iBAAiBywC,CAAC,EAAG,KAAK,WAAa,IAClE,OAAO,OAAO,CAAC,EAAI,OAAOA,CAAC,EAC7B,GAAI,KAAK,WAAa,IACpB,OAAO,OAAO,CAAC,EAAI,OAAOA,CAAC,EAC7B,MAAU,MAAM,yCAAyC,CAC3D,CACA,UAAW,CACT,MAAO,GAAG,KAAK,KAAK,SAAS,EAAE,GAAG,KAAK,SAAS,GAAG,KAAK,MAAM,SAAS,GACzE,CACF,EACM1wC,GAAN,cAAgBiyB,EAAE,CAChB,YAAY,EAAG,EAAG,CAChB,MAAM,EACN4wf,GAAE,KAAM,MAAM,EACdA,GAAE,KAAM,UAAU,EAClB,KAAK,KAAO,EAAG,KAAK,SAAW,CACjC,CACA,SAAS,EAAI,CAAC,EAAG,CACf,IAAM,EAAI,KAAK,KAAK,SAAS,CAAC,EAAGnye,EAAI,KAAK,SAAS,SAAS,CAAC,EAC7D,OAAOzwC,GAAE,iBAAiB,CAAC,EAAGA,GAAE,iBAAiBywC,CAAC,EAAY,OAAO,CAAC,IAAG,OAAOA,CAAC,CACnF,CACA,UAAW,CACT,MAAO,GAAG,KAAK,KAAK,SAAS,EAAE,GAAG,KAAK,SAAS,SAAS,GAC3D,CACF,EACM/e,GAAN,cAAgBM,EAAE,CAChB,YAAY,EAAG,EAAG,EAAG,CAKnB,GAJA,MAAM,EACN4wf,GAAE,KAAM,UAAU,EAClBA,GAAE,KAAM,MAAM,EACdA,GAAE,KAAM,OAAO,EACX,CAAC,CAAC,IAAK,IAAK,KAAM,KAAM,IAAK,IAAI,CAAC,CAAC,SAAS,CAAC,EAC/C,MAAU,MAAM,+CAA+C,GAAG,EACpE,KAAK,SAAW,EAAG,KAAK,KAAO,EAAG,KAAK,MAAQnye,CACjD,CACA,SAAS,EAAI,CAAC,EAAG,CACf,IAAM,EAAI,KAAK,KAAK,SAAS,CAAC,EAAGA,EAAI,KAAK,MAAM,SAAS,CAAC,EAC1D,OAAQ,KAAK,SAAb,CACE,IAAK,IACH,MAAO,IAAIA,GACb,IAAK,IACH,MAAO,IAAIA,GACb,IAAK,KACH,MAAO,KAAKA,GACd,IAAK,KACH,MAAO,KAAKA,GACd,IAAK,IACH,MAAO,MAAMA,GACf,IAAK,KACH,OAAO,IAAMA,EAAQ,EAAJ,CACrB,CACA,MAAU,MAAM,yCAAyC,CAC3D,CACA,UAAW,CACT,MAAO,GAAG,KAAK,KAAK,SAAS,EAAE,GAAG,KAAK,SAAS,GAAG,KAAK,MAAM,SAAS,GACzE,CACF,EACM/qD,IAAN,cAAgBssC,EAAE,CAChB,YAAY,EAAG,EAAG,EAAI,KAAM,CAC1B,MAAM,EACN4wf,GAAE,KAAM,IAAI,EACZA,GAAE,KAAM,SAAS,EACjBA,GAAE,KAAM,qBAAqB,EAC7BA,GAAE,KAAM,eAAe,EACvBA,GAAE,KAAM,aAAa,EACrB,KAAK,GAAK,GAAgB,GAAI,KAAK,QAAU,KAAK,GAAG,MAAM,GAAG,EAAG,KAAK,oBAAsB,GAAK,CAAC,EAAG,KAAK,cAAgBnye,EAAG,KAAK,YAAc,IAAK,EACvJ,CACA,SAAS,EAAI,CAAC,EAAG,CAEf,IAAS,CAAC,EACV,IAAM,EAAI,KAAK,oBAAoB,IAAK,GAAMlf,EAAE,SAAS,CAAC,CAAC,EAC3D,GAAI,CACF,IAAIA,EAAIM,GAAE,EAAG,KAAK,QAAS,KAAK,EAAE,EAClC,GAAIN,aAAa,SACf,OAAOA,EAAE,MAAM,KAAM,CAAC,CAC1B,MAAY,CACZ,CACA,IAAIkf,EACJ,GAAI,CACF,EAAI5e,GAAO,KAAK,eAA6B,CAAC,EAAG,KAAK,QAAS,KAAK,EAAE,CACxE,MAAY,CACZ,CACA,GAAI,KAAK,eAAiB4e,aAAa,SAAU,CAC/C,GAAI,KAAK,cAAc,EACrB,MAAU,MAAM,gCAAkC,KAAK,EAAE,EAC3D,OAAOA,EAAE,MAAM,KAAK,cAAe,CAAC,CACtC,CACA,GAAI,CACF,IAAMlf,EAAIM,GAAE,KAAM,KAAK,QAAS,KAAK,EAAE,EACvC,GAAIN,aAAa,SACf,OAAO,EAAE,QAAS,GAAM,CACtBsxf,IAAE,iBAAiBvxf,CAAC,CACtB,CAAC,EAAGC,EAAE,MAAM,KAAM,CAAC,CACvB,MAAY,CACZ,CACA,MAAU,MAAM,uBAAyB,KAAK,EAAE,CAClD,CACA,UAAW,CACT,MAAO,GAAG,KAAK,GAAG,GAAG,KAAK,oBAAoB,IAAK,GAAM,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,EACpF,CACA,eAAgB,CACd,OAAO,KAAK,cAAgB,IAAK,KAAM,KAAK,YAAc+f,IAAE,kBAAkB,SAC5E,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAM,IACrD,GAAI,KAAK,WACX,CACF,EACA,SAASzf,GAAE,EAAG,EAAG,EAAG,CAClB,IAAI2e,EAAIhf,EACR,IAAK,IAAIif,KAAKnuD,EAAG,CAGf,GAFI,OAAOkuD,GAAK,UAEZA,EAAEC,KAAO,IAAK,GAChB,MAAU,MAAM,mBAAmBA,EAAE,kCAAkCtf,EAAE,EAAE,EAC7E,EAAIqf,EAAEC,EACR,CACA,GAAI,OAAOD,GAAK,SACd,MAAU,MAAM,eAAe,EACjC,OAAOA,CACT,CACA,IAAMM,GAAN,cAAgB9e,EAAE,CAChB,YAAY,EAAG,EAAI,KAAM,CACvB,MAAM,EACN4wf,GAAE,KAAM,UAAU,EAClBA,GAAE,KAAM,SAAS,EACjBA,GAAE,KAAM,eAAe,EACvB,KAAK,cAAgB,EAAG,KAAK,SAAW,EAAG,KAAK,QAAU,EAAE,MAAM,GAAG,CACvE,CACA,SAAS,EAAI,CAAC,EAAG,CAEf,IAAI,EACJ,GAAI,CACF,EAAI/wf,GAAE,EAAG,KAAK,QAAS,KAAK,QAAQ,CACtC,MAAY,CACZ,CACA,GAAI,IAAM,IAAK,KAAM,EAAIA,GAAO,KAAK,eAA6B,CAAC,EAAG,KAAK,QAAS,KAAK,QAAQ,GAAI,OAAO,GAAK,YAAc,OAAO,GAAK,SACzI,MAAU,MAAM,cAAc,KAAK,SAAS,8CAA8C,EAC5F,OAAO,CACT,CACA,UAAW,CACT,MAAO,GAAG,KAAK,QAAQ,KAAK,GAAG,GACjC,CACF,EACM+e,GAAI,MAAMA,CAAE,CAahB,YAAY,EAAG,EAAI,CAAC,EAAG,CACrBgye,GAAE,KAAM,mBAAmB,EAC3BA,GAAE,KAAM,SAAS,EACjBA,GAAE,KAAM,YAAY,EACpBA,GAAE,KAAM,YAAY,EACpBA,GAAE,KAAM,SAAS,EACjB,KAAK,kBAAoB,KAAM,KAAK,QAAU,CAAE,YAAa,CAAC,EAAG,GAAGzxf,CAAE,EAAG,KAAK,WAAa,GAAI,KAAK,WAAa,CAAC,EAAG,KAAK,QAAU,CAAC,EAAG,KAAK,WAAW7uC,CAAC,CAC3J,CAQA,WAAW,EAAG,CACZ,OAAOA,IAAM,KAAK,kBAAoB,KAAM,KAAK,WAAa,CAAC,EAAG,KAAK,QAAU,CAAC,EAAG,KAAK,WAAaA,EAAG,KAAK,kBAAoB,KAAK,MAAMA,CAAC,GAAI,IACrJ,CAKA,mBAAoB,CAClB,KAAK,QAAQ,YAAc,CAAC,CAC9B,CAIA,oBAAqB,CACnB,KAAK,QAAQ,YAAc,CAAC,EAAG,KAAK,QAAU,CAAC,CACjD,CAMA,oBAAoB,EAAG,CACrB,IAAI6uC,EAAI,EAAGqf,EAAI,GACT,EAAI,CAAC,EACX,IAAK,IAAI1wC,KAAKxd,EAAE,MAAM,EAAE,EACtB,GAAIwd,IAAM,KAAOqxB,IAAM,EACrB,EAAE,KAAKqf,CAAC,EAAG,EAAI,QACZ,GAAI1wC,IAAM,IACb,IAAK,GAAKA,OACP,GAAIA,IAAM,IACT,QAAK,GAAKA,EAAGqxB,EAAI,EACnB,MAAU,MAAM,sCAAsC,MAExD,IAAKrxB,EACT,GAAIqxB,IAAM,EACR,MAAU,MAAM,sCAAsC,EACxD,OAAOqf,EAAE,OAAS,GAAK,EAAE,KAAKA,CAAC,EAAG,CACpC,CAKA,oBAAoB,EAAG,CACrB,IAAMrf,EAAI,CAAC,EACX,OAAO7uC,EAAE,MAAM,GAAG,CAAC,CAAC,SAAS,EAAG,IAAM,CACpCwd,EAAI,GAAM,IAAM,EAAI2wC,EAAE,QAAQ,SAAU,EAAE,EAAG,OAAO,KAAKE,EAAC,CAAC,CAAC,QAAS,GAAM,CACzE,EAAIF,EAAE,QAAY,OAAO,MAAMlf,EAAE,KAAM,GAAG,EAAG,IAAIA,EAAE,EAAE,CACvD,CAAC,GAAIJ,EAAE,KAAKsf,CAAC,CACf,CAAC,EAAGtf,EAAE,KAAK,GAAG,CAChB,CAyCA,MAAM,EAAG,CACP,MAAO,GAAI,KAAK,oBAAoB7uC,CAAC,EAAG,KAAK,UAAUA,CAAC,CAC1D,CAMA,UAAU,EAAG,CACX,IAAI6uC,EAAI7uC,EAAE,OAAS,EAAGkuD,EAAI,EAAG,EAAI,UAAW1wC,EAAI,CAAC,EAAGyxB,EAAI,GAAI,EAAI,GAAIp2B,EAAI,KAAMg3B,EAAI,EAAGrqB,EAAI,GACzF,KAAO0oC,GAAKrf,GAAK,CACf,OAAQ,EAAR,CACE,IAAK,UACH,GAAI,EAAI7uC,EAAE,OAAOkuD,CAAC,EAAGjf,EAAE,MAAM,QAAQ,EACnC,EAAI,YAAa,EAAI,GAAI,SACtB,GAAI,KAAK,WAAWA,CAAC,EAAG,CAC3B,GAAIA,IAAM,MAAQzxB,EAAE,SAAW,GAAK,KAAK,eAAeA,EAAEA,EAAE,OAAS,EAAE,GAAI,CACzE,EAAI,YAAa,EAAI,IACrB,KACF,CACA,GAAI0wC,IAAMrf,GAAK,KAAK,eAAerxB,EAAEA,EAAE,OAAS,EAAE,EAAG,CACnD,EAAI,UACJ,KACF,CACEA,EAAE,KACAkyB,GAAE,yBAAyBT,EAAG,IAAIS,GAAK,IAAIA,EAAG,CAChD,EAAG,EAAI,SACX,MAAO,GAAI,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,CAAC,SAAST,CAAC,EACxC,IAAIif,IAAMrf,EAAG,CACX,EAAI,UACJ,KACF,CACE,EAAI,0BAA2B,EAAII,CAAA,MAErCA,IAAM,KAAO,EAAI,qBAAsB,EAAI,GAAI,EAAI,GAAKA,IAAM,KAAO,EAAI,mBAAoB,EAAI,IAAMA,EAAE,MAAM,MAAM,GAAK,EAAI,gBAAiB,EAAIA,EAAG,EAAI,IAAMA,EAAE,MAAM,UAAU,IAAMif,EAAIrf,GAAK7uC,EAAE,OAAOkuD,EAAI,CAAC,CAAC,CAAC,MAAM,eAAe,GAAK,EAAIjf,EAAG,EAAI,gBAAkBzxB,EAAE,OAAS,GAAKA,EAAEA,EAAE,OAAS,aAAcsxC,IAAKtxC,EAAE,KACxTkyB,GAAE,yBAAyB,IAAK,IAAIA,GAAK,IAAIA,EAAG,CAClD,EAAGlyB,EAAE,KAAK,IAAIgxC,GAAEvf,EAAG,IAAI,CAAC,EAAG,KAAK,iBAAiBA,CAAC,EAAG,EAAI,UAAW,EAAI,KAC1E,MACF,IAAK,YACH,EAAIjvC,EAAE,OAAOkuD,CAAC,EAAGjf,EAAE,MAAM,QAAQ,GAAK,GAAKA,EAAGif,IAAMrf,IAAMrxB,EAAE,KAAK,IAAIsxC,GAAE,CAAC,CAAC,EAAG,EAAI,aAAe,IAAM,MAAQ,EAAI,MAAOtxC,EAAE,KAAK,IAAIsxC,GAAE,CAAC,CAAC,EAAG,EAAI,GAAI,EAAI,UAAW,KACjK,MACF,IAAK,cACH,GAAI,EAAI9uD,EAAE,OAAOkuD,CAAC,EAAGjf,EAAE,MAAM,eAAe,EAC1C,GAAKA,OACF,GAAIA,IAAM,IACb,EAAI,EAAG,EAAI,GAAI,EAAI,EAAG,EAAI,+BAE1B,MAAU,MAAM,4CAA8Cif,CAAC,EACjE,MACF,IAAK,mBACH,GAAI,EAAIluD,EAAE,OAAOkuD,CAAC,EAAGjf,IAAM,IACzBzxB,EAAE,KAAK,IAAIgxC,GAAE,EAAG,IAAI,CAAC,EAAG,KAAK,iBAAiB,CAAC,EAAG,EAAI,GAAI,EAAI,eAC3D,GAAIvf,EAAE,MAAM,eAAe,EAC9B,GAAKA,OAEL,MAAU,MAAM,gDAAkDA,CAAC,EACrE,MACF,IAAK,gBACH,EAAIjvC,EAAE,OAAOkuD,CAAC,EAAGjf,IAAMzpB,GAAKhI,EAAE,KAAK,IAAIsxC,GAAE,EAAG,QAAQ,CAAC,EAAG,EAAI,GAAI,EAAI,UAAW,EAAI,IAAM,GAAK7f,EAC9F,MACF,IAAK,qBACL,IAAK,0BACH,GAAI,EAAIjvC,EAAE,OAAOkuD,CAAC,EAAG1oC,EACnBypB,IAAMzpB,IAAM,EAAI,IAAK,GAAKypB,OACvB,GAAIA,IAAM,IACb,IAAIY,GAAK,EAAG,CACV,GAAI,IAAM,qBACRryB,EAAE,KAAK,IAAIta,IAAE,KAAK,UAAU,CAAC,CAAC,CAAC,OAC5B,GAAI,IAAM,0BAA2B,CACxC,IAAIurD,EAAI,KAAK,oBAAoB,CAAC,CAAC,CAAC,IAAK,GAAM,KAAK,UAAU53D,CAAC,CAAC,EAChE2mB,EAAE,KAAK,IAAIpa,IAAEyV,EAAG41C,EAAG,IAAI,CAAC,EAAG,EAAI,IACjC,CACA,EAAI,SACN,KACE,KAAK,GAAKxf,CAAA,MAEZA,IAAM,KAAO,IAAK,GAAKA,IAAMA,EAAE,MAAM,MAAM,IAAM,EAAIA,GAAI,GAAKA,GAChE,MACF,IAAK,0BACH,EAAIjvC,EAAE,OAAOkuD,CAAC,EAAGjf,IAAM,MAAQ,GAAKA,EAAG,KAAMzxB,EAAE,KAAKkyB,GAAE,yBAAyB,EAAG,IAAIA,GAAK,IAAIA,EAAG,CAAC,EAAG,EAAI,GAAI,EAAI,UAAW,GAEjI,CACA,GACF,CACA,GAAI,IAAM,UACR,MAAU,MAAM,wCAAwC,EAC1D,OAAO,KAAK,oBAAoBlyB,CAAC,CACnC,CAUA,oBAAoB,EAAG,CACrB,GAAIxd,EAAE,OAAS,EACb,MAAU,MAAM,sBAAsB,EACxC,IAAM6uC,EAAI,CAAC,GAAG7uC,CAAC,EACXkuD,EAAI,EAAG,EAAI,KACf,KAAOA,EAAIrf,EAAE,QACX,GAAI,EAAIA,EAAEqf,GAAI,aAAazwC,GAAG,CAC5B,GAAIywC,IAAM,GAAKA,IAAMrf,EAAE,OAAS,EAC9B,MAAU,MAAM,0BAA0B,EAC5C,EAAE,KAAOA,EAAEqf,EAAI,GAAI,EAAE,SAAWrf,EAAEqf,EAAI,GAAI,EAAEA,EAAI,GAAK,EAAGrf,EAAE,OAAOqf,EAAG,CAAC,CACvE,KACE,KACJ,IAAK,EAAI,EAAG,EAAI,KAAMA,EAAIrf,EAAE,QAC1B,GAAI,EAAIA,EAAEqf,GAAI,aAAa7vD,GAAG,CAC5B,GAAI6vD,IAAM,GAAKA,IAAMrf,EAAE,OAAS,EAC9B,MAAU,MAAM,0BAA0B,EAC5C,EAAE,KAAOA,EAAEqf,EAAI,GAAI,EAAE,MAAQrf,EAAEqf,EAAI,GAAI,EAAEA,EAAI,GAAK,EAAGrf,EAAE,OAAOqf,EAAG,CAAC,CACpE,KACE,KACJ,IAAK,EAAI,EAAG,EAAI,KAAMA,EAAIrf,EAAE,QAC1B,GAAI,EAAIA,EAAEqf,GAAI,aAAapf,GAAG,CAC5B,GAAIof,IAAM,GAAKA,IAAMrf,EAAE,OAAS,EAC9B,MAAU,MAAM,0BAA0B,EAC5C,EAAE,KAAOA,EAAEqf,EAAI,GAAI,EAAE,MAAQrf,EAAEqf,EAAI,GAAI,EAAEA,EAAI,GAAK,EAAGrf,EAAE,OAAOqf,EAAG,CAAC,CACpE,KACE,KACJ,IAAK,EAAI,EAAG,EAAI,KAAMA,EAAIrf,EAAE,QAC1B,GAAI,EAAIA,EAAEqf,GAAI,aAAa9e,GAAG,CAC5B,GAAI8e,IAAM,GAAKA,IAAMrf,EAAE,OAAS,EAC9B,MAAU,MAAM,0BAA0B,EAC5C,EAAE,KAAOA,EAAEqf,EAAI,GAAI,EAAE,MAAQrf,EAAEqf,EAAI,GAAI,EAAEA,EAAI,GAAK,EAAGrf,EAAE,OAAOqf,EAAG,CAAC,CACpE,KACE,KACJ,GAAIrf,EAAE,SAAW,EACf,MAAU,MAAM,4CAA4C,EAC9D,OAAOA,EAAE,EACX,CACA,WAAW,EAAG,CACZ,OAAO,OAAO7uC,GAAK,UAAYA,EAAE,MAAM,UAAU,CACnD,CACA,eAAe,EAAG,CAChB,OAAOA,aAAa8uC,IAAK9uC,aAAa3B,IAAK2B,aAAayd,IAAKzd,aAAaovC,EAC5E,CACA,iBAAiB,EAAG,CAClB,KAAK,WAAW,QAAQpvC,CAAC,EAAI,GAAK,KAAK,WAAW,KAAKA,CAAC,CAC1D,CACA,cAAe,CACb,OAAO,KAAK,UACd,CAYA,SAAS,EAAG,CACV,GAAIA,aAAa,MACf,OAAOA,EAAE,IAAK,GAAM,KAAK,SAASkuD,CAAC,CAAC,EACtC,IAAIrf,EAAI,KAAK,cAAc,EAC3B,GAAI,EAAEA,aAAaa,IACjB,MAAU,MAAM,4DAA4D,EAC9E,GAAI,KAAK,QAAQ,YAAa,CAC5B,IAAIwe,EAAI,KAAK,iBAAiBluD,CAAC,EAC/B,OAAOkuD,IAAM,OAAS,EAAIrf,EAAE,SAAS,CAAE,GAAGwf,GAAG,GAAGruD,CAAE,CAAC,EAAG,KAAK,cAAcA,EAAGkuD,CAAC,GAAIA,CACnF,CACA,OAAOrf,EAAE,SAAS,CAAE,GAAGwf,GAAG,GAAGruD,CAAE,CAAC,CAClC,CACA,WAAW,EAAG,CACZ,OAAO,KAAK,UAAUA,CAAC,CACzB,CACA,iBAAiB,EAAG,CAClB,IAAI6uC,EAAI,KAAK,WAAW7uC,CAAC,EAAGkuD,EAAI,KAAK,QAAQrf,GAC7C,OAAOqf,IAAM,IAAK,GAAQ,KAAJA,CACxB,CACA,cAAc,EAAG,EAAG,CAClB,KAAK,QAAQ,KAAK,WAAWluD,CAAC,GAAK6uC,CACrC,CACA,eAAgB,CACd,OAAO,KAAK,iBACd,CACA,qBAAsB,CACpB,OAAO,KAAK,kBAAoB,KAAK,kBAAkB,SAAS,EAAI,EACtE,CACA,OAAO,KAAK,EAAG,EAAI,KAAM,EAAI,CAAC,EAAG,CAC/B,MAAO,KAAoB,CAAC,EAAG,IAAIyf,EAAEtuD,EAAGkuD,CAAC,CAAC,CAAC,SAASrf,CAAC,CACvD,CACF,EACAzwC,GAAEkwD,GAAG,aAAc5e,EAAC,EAAGtxC,GAAEkwD,GAAG,oBAAqBprD,GAAC,EAAG9E,GAAEkwD,GAAG,kBAAmB7wC,EAAC,EAAGrf,GAAEkwD,GAAG,oBAAqBjwD,EAAC,EAAGD,GAAEkwD,GAAG,sBAAuBxf,EAAC,EAAG1wC,GAAEkwD,GAAG,oBAAqBlf,EAAC,EAAGhxC,GAAEkwD,GAAG,kBAAmBQ,EAAC,EAAG1wD,GAAEkwD,GAAG,qBAAsBE,EAAC,EAAGpwD,GAAEkwD,GAAG,qBAAsBlrD,GAAC,EAAGhF,GAAEkwD,GAAG,iBAAkBD,EAAC,EAC/RjwD,GAAEkwD,GAAG,oBAAqB,OAAO,oBAAoBA,GAAE,SAAS,CAAC,CAAC,OAAQ,GAAMA,GAAE,UAAUtuD,aAAc,QAAQ,CAAC,CAAC,IAAK,GAAMsuD,GAAE,UAAUtuD,EAAE,CAAC,EAC9I,IAAIgvD,IAAIV,GC3jBR,SAAgBkye,IACZ,EAAuB,IACvB,EACA,EACA,EACA,EACkB,CAClB,IAAMC,EAAUC,IAAcC,CAAY,EACpCC,EAAS,GACXC,IAAYJ,EAAS,CAAE,GAAE,EAAG,MAAS,EAMnCxjX,GADgBkxW,IAAex7Y,GAAU,IAAMy1Y,GAAWl2C,IACpC,CAAC,CAAC,OAAO4uD,CAAY,CAAC,CAAC,MAAM,CAAC,EAAG,GAAS,CAAC,EAEjEC,EAAuC,CAAC,EAC9C,IAAK,IAAI/giB,EAAI,EAAGA,EAAI,IAAW,IAAK,CAChC,IAAM3B,EAAI4+K,EAAM,OAAOj9K,CAAC,EAClBwuD,EAAIoye,EAAMviiB,CAAC,EAEbmwD,IAAM,QAAa,OAAO,MAAMnwD,CAAC,GAAK,OAAO,MAAMmwD,CAAC,GACpD2/d,IAAex7Y,GAAU,KAAOt0I,GAAK,GACrCy7gB,IAAennY,GAAU,KAAOnkF,GAAK,GACrCA,EAAIwye,EAAa,IACrBD,EAAY,KAAK,CAAC1iiB,EAAGmwD,CAAC,CAAC,CAC3B,CAEA,OAAOuye,CACX,CAEA,SAAgBF,IACZ,EACA,EACA,EACU,CACV,GAAII,IAAS,OAAW,OAAOppM,EAC/B,GAAI,CACA,OAAOopM,EAAK,SAAS74gB,CAAO,CAChC,MAAQ,CACJ,OAAOyvU,CACX,CACJ,CAEA,SAAgB6oM,IAAc,EAAuC,CACjE,GAAI,CACA,IAAMD,EAAU,IAAIS,IAAQC,CAAQ,EAGpC,MAFA,GAAQ,GAAK,KAAK,IAClB,EAAQ,EAAI,KAAK,EACVV,CACX,OAAS,EAAG,CACR,QAAQ,MAAM,CAAC,EACf,MACJ,CACJ,C,80GCtC0CllV,cAAMpoG,UAANooG,I,KAAnC,cAAmCA,I,wCADzC5zH,C,IAYI0qC,E,EAAqBqqD,U,GAIrBrqD,E,EAAa+ua,U,GAQb/ua,E,EAAqB0ua,a,GAarB1ua,E,EAAqBgva,U,GAUrBhva,E,EAAqBiva,a,CA9CgB/lV,gB,CAMtC,YAAY/3M,EAAwD,CAChE,MAAMA,GACNyxL,EAAe,IAAI,CACvB,CANAi/R,qBAA6B/7T,MAC7BopY,OAA0B,QAAQ,KAAKrtE,YAOvC,IAAsBx3S,UAAmB,CACrC,OAAO,KAAKl5K,MAAM2xgB,SAAS+W,gBAAgBxvW,QAC/C,CAEA,IAAc0kX,UAAqB,CAC/B,OAAOntE,GAAa,CAChBn7d,KAAM,aACNo7d,UAAW,KAAKA,UAChB5gR,IAAK,KAAK9vM,MAAM2xgB,SAASO,WAC7B,EACJ,CAEA,IAAsBqrB,aAAkC,CACpD,GAAM,CAAEZ,iBAAgBhrB,YAAa,KAAK3xgB,MACpC,CAAE8xgB,iBAAgBC,gBAAiBJ,EAEzC,OAAOqrB,IACHL,EAAeqB,QACflsB,EAAe1pd,OACf2pd,EAAa3pd,OACb0pd,EAAep+W,UACfq+W,EAAar+W,SACjB,CACJ,CAEA,IAAsBmqY,UAA0B,CAC5C,GAAM,CAAEN,eAAgB,KAClB,CAAEzrB,iBAAgBC,gBAAiB,KAAK/xgB,MAAM2xgB,SAKpD,OAJassB,MACRn4N,MAAMC,KACNlrU,EAAG+wC,GAAMgpH,EAAYk9W,EAAewP,MAAM11e,EAAE,EAAE,IAC9Cof,EAAGpf,GAAMgpH,EAAYm9W,EAAauP,MAAM11e,EAAE,EAAE,EAC1CrxB,EAAKgjhB,EAChB,CAEA,IAAsBO,aAEN,CACZ,GAAM,CAAE13X,SAAU,KAAKpmK,MAAM28hB,eAC7B,GAAI,CAACv2X,EAAO,OAEZ,GAAM,CAAEm3X,eAAgB,KAClB,CAAEzrB,iBAAgBC,eAAcG,eAClC,KAAKlygB,MAAM2xgB,SAGTusB,EAAaX,EACd9whB,IACIm/B,GACG,IAAI+gH,GACAmlX,EAAewP,MAAM11e,EAAE,EAAE,EACzBmme,EAAauP,MAAM11e,EAAE,EAAE,IAGlCqY,OAAQ/pC,GAAMg4f,EAAY90U,SAASljL,IACxC,GAAI,CAACgkhB,EAAW3iiB,OAAQ,OAExB,IAAMmhiB,EAAgBwB,EAAW/tY,KAAKx1J,MAAMujiB,EAAW3iiB,OAAS,IAC1Dm9K,EAAKwlX,EAAW,GAChBvlX,EAAKulX,EAAWA,EAAW3iiB,OAAS,GACpCuyT,EAAS39J,KAAKu+J,MAAM/1I,EAAG3tH,EAAI0tH,EAAG1tH,EAAG2tH,EAAG99K,EAAI69K,EAAG79K,CAAC,EAAI,IAAOs1J,KAAKi0I,GAElE,MAAO,CACHvpS,EAAG6hiB,EAAc7hiB,EACjBmwD,EAAG0xe,EAAc1xe,EACV8iQ,QACPn9O,KAAMy1F,CACV,CACJ,CAEAy2X,aAAiD,CAC7C,GAAM,CAAEkB,SAAQrtE,YAAWotE,eAAgB,KAI3C,OAFKA,GAGD5hV,SAAC,OAAD,CACIhwH,MAAO,CACH,GAAGswc,IACHjjM,WAAY,MACZrgL,SAAU,KAAKA,QACnB,EACA0kX,SAAU,KAAKA,SAASnpiB,GAExBy8G,UAAAgrG,SAACi9O,GAAD,CAAM1kc,GAAI,QAAQi8d,IAAax3S,SAAU,KAAKA,SAC1ChoE,UAAAgrG,SAAC,WAAD,CACIiiV,cAAc,UACdryd,KAAM,IAAIiyd,IACVhlN,YAAY,MAEX7nO,SAAA4sb,EAAYntd,IACP,EACR,EACJ,GApBe,IAsB7B,CAEA4gI,QAA6C,CAGzC,OAFK,KAAKssV,UAGNl6P,UAAC,IAAD,CACIlvS,GAAI+6J,EACA,kBACA,KAAKxvJ,MAAM28hB,eAAev2X,KAC9B,EAJJl1D,SAAA,CAMK,KAAK0sb,SAAS5mhB,SACfklM,SAAC,OAAD,CACIhwH,MAAOqwc,IACP9niB,GAAI,KAAKspiB,OACTnyf,EAAG,KAAKiyf,SACRD,SAAU,KAAKA,SAASnpiB,EAC3B,GACA,KAAKooiB,YAAA,CACP,C,GAjBoB,IAmB/B,C,aACJ,GCxIA,IAAauB,IACTp+hB,GAEIq+hB,IAA8Br+hB,IACvBk8M,SAACoiV,IAAD,CAAwB,GAAIt+hB,CAAQ,IAEpCk8M,SAACqiV,IAAD,CAAsB,GAAIv+hB,CAAQ,GAIjD,SAASq+hB,IACLr+hB,EAAA,CAEA,OAAO0ghB,GAAoC1ghB,EAAM28hB,cAAc,CACnE,C,60GCO2C5kV,eAmDEA,OAiDDA,OA6CFA,OAoCIA,OAgCPA,OA4FIA,OA/T9BymV,GAAa,OACpBC,IAAmB,OACZC,GAAmB,OAYW3mV,KAAMpoG,U,SAA1C,cAAoCooG,G,+BAD1C5zH,CAC0C4zH,kB,CACvCxG,QAAsC,CAClC,GAAM,CAAEp4B,SAAQoqH,eAAgB,KAAKvjS,MAE/Bi/L,EAAO,KAAKj/L,MAAMi/L,KAAK9wL,MAAA,EAG7B,MAFA8wL,GAAKhzG,MAAQktF,EAAOg+V,OAAA,GAGhBj7T,SAAC,IAAD,CACIznN,GAAI+6J,EAAY,yBAChBzyI,UAAWk9L,EAAW,gBAAiB,mBAEtC/oG,SAAA+tF,EAAK8lV,cAAA,EAAgBt4gB,IAAKi+C,IACvB,IAAMq5J,EAAQr5J,EAAE86d,MACViZ,IACA/ze,EAAEi7d,MACA+Y,GACAF,GACFG,EACF,KAAK3+hB,MAAM4+hB,mBAET7hhB,EAAY2tC,EAAE52D,QAAU,EAAI,YAAcyrJ,OAEhD,OACI28D,SAAC,OAAD,CACIznN,GAAI+6J,EAAYyvC,EAAKknV,WAAWz7d,EAAE52D,KAAK,GAC5BipB,YAEX07J,GAAI7jB,EAAYukB,EAAO7kD,IAAI,EAC3BukD,GAAIjkB,EAAYqqC,EAAKqiV,MAAM52d,EAAE52D,KAAK,GAClC8kL,GAAIhkB,EAAYukB,EAAOzkD,KAAK,EAC5BokD,GAAIlkB,EAAYqqC,EAAKqiV,MAAM52d,EAAE52D,KAAK,GAClCwvS,OAAQv/E,EACKw/E,cACbk2D,gBAAiB/uS,EAAEi7d,MAAQpmY,OAAYo/Y,CAC1C,EARQj0e,EAAE52D,KAQV,CAET,EACD,EAEX,C,aACJ,GAU6CikN,KAAMpoG,U,QAA5C,cAAsCooG,G,8BAD5C5zH,CAC4C4zH,kB,CACzCxG,QAAsC,CAClC,GAAM,CAAEgyF,cAAapqH,UAAW,KAAKn5K,MAE/Bi/L,EAAO,KAAKj/L,MAAMi/L,KAAK9wL,MAAA,EAG7B,MAFA8wL,GAAKhzG,MAAQktF,EAAOi+V,OAAA,GAGhBl7T,SAAC,IAAD,CACIznN,GAAI+6J,EAAY,uBAChBzyI,UAAWk9L,EAAW,gBAAiB,iBAEtC/oG,SAAA+tF,EAAK8lV,cAAA,EAAgBt4gB,IAAKi+C,IACvB,IAAMq5J,EAAQr5J,EAAE86d,MACViZ,IACA/ze,EAAEi7d,MACA+Y,GACAF,GACFG,EACF,KAAK3+hB,MAAM4+hB,mBAEf,OACI1iV,SAAC,OAAD,CACIznN,GAAI+6J,EAAYyvC,EAAKknV,WAAWz7d,EAAE52D,KAAK,GAEvC2kL,GAAI7jB,EAAYqqC,EAAKqiV,MAAM52d,EAAE52D,KAAK,GAClC+kL,GAAIjkB,EAAYukB,EAAO1d,MAAM,EAC7Bmd,GAAIhkB,EAAYqqC,EAAKqiV,MAAM52d,EAAE52D,KAAK,GAClCglL,GAAIlkB,EAAYukB,EAAOrqB,GAAG,EAC1Bw0I,OAAQv/E,EACKw/E,cACbk2D,gBAAiB/uS,EAAEi7d,MAAQpmY,OAAYo/Y,CAC1C,EARQj0e,EAAE52D,KAQV,CAET,EACD,EAEX,C,aACJ,GAW4CikN,KAAMpoG,U,QAA3C,cAAqCooG,G,8BAD3C5zH,CAC2C4zH,kB,CACxCxG,QAAsC,CAClC,GAAM,CACFp4B,SACA/9C,QAAQuf,GAAgBhmB,OACxB4uK,cAAc,EACdx/E,QAAQ26U,IACR,KAAK1+hB,MAEHi/L,EAAO,KAAKj/L,MAAMi/L,KAAK9wL,MAAA,EAC7B8wL,EAAKhzG,MAAQktF,EAAOi+V,OAAA,EAIpB,IAAMx2e,EACFw6F,IAAUuf,GAAgBhmB,OACpB,EACAyG,IAAUuf,GAAgBjmB,MACxB,CAAC6uK,EAAc,EACfA,EAAc,EACpB1oS,EAAIokM,EAAKqiV,MAAM,GAAK1gf,EAE1B,OACIs7K,SAAC,OAAD,CACIznN,GAAI+6J,EAAY,sBAChBipB,GAAI7jB,EAAY/5J,GAChBg+K,GAAIjkB,EAAYukB,EAAO1d,MAAM,EAC7Bmd,GAAIhkB,EAAY/5J,GAChBi+K,GAAIlkB,EAAYukB,EAAOrqB,GAAG,EAC1Bw0I,OAAQv/E,EACKw/E,aAChB,EAET,C,aACJ,GAW0CxrF,KAAMpoG,U,QAAzC,cAAmCooG,G,8BADzC5zH,CACyC4zH,kB,CACtCxG,QAAsC,CAClC,GAAM,CACFp4B,SACAmqH,SAASo7P,GACTn7P,cAAc,EACdk2D,mBACA,KAAKz5V,MAEHi/L,EAAO,KAAKj/L,MAAMi/L,KAAK9wL,MAAA,EAC7B8wL,EAAKhzG,MAAQktF,EAAOg+V,OAAA,EAEpB,IAAMnsd,EAAIi0I,EAAKqiV,MAAM,GAErB,OACIplU,SAAC,OAAD,CACIznN,GAAI+6J,EAAY,wBAChBipB,GAAI7jB,EAAYukB,EAAO7kD,IAAI,EAC3BukD,GAAIjkB,EAAY5pG,GAChB4tH,GAAIhkB,EAAYukB,EAAOzkD,KAAK,EAC5BokD,GAAIlkB,EAAY5pG,GACRs4O,SACKC,cACIk2D,iBACpB,EAET,C,aACJ,GAS8C1hJ,KAAMpoG,U,QAA7C,cAAuCooG,G,8BAD7C5zH,CAC6C4zH,kB,CAC1CxG,QAAsC,CAClC,GAAM,CAAEp4B,SAAQoqH,cAAc,EAAGD,SAAS,QAAW,KAAKtjS,MAE1D,OACIk8M,SAAC,OAAD,CACIznN,GAAI+6J,EAAY,eAChBipB,GAAI7jB,EAAYukB,EAAO7kD,IAAI,EAC3BukD,GAAIjkB,EAAYukB,EAAO1d,MAAM,EAC7Bmd,GAAIhkB,EAAYukB,EAAOzkD,KAAK,EAC5BokD,GAAIlkB,EAAYukB,EAAO1d,MAAM,EACrB6nI,SACKC,aAChB,EAET,C,aACJ,GAgBuCxrF,KAAMpoG,U,QAAtC,cAAgCooG,G,8BADtC5zH,CACsC4zH,kB,CACnCxG,QAAsC,CAClC,GAAM,CACFogU,WACAktB,gBACAC,iBACAzP,aACA0P,YACAC,YACAC,kBACA9lM,gBACA+lM,qBACA,KAAKl/hB,MACH,CAAEm5K,SAAQ24V,iBAAgBC,eAAcG,eAAgBP,EAExDwtB,EAAoBptB,EAAayQ,cAAgB,MACnDtmU,SAACkjV,IAAD,CACIngW,KAAM8yU,EACN54V,OAAQ+4V,EACR3uO,YAAay7P,EACbJ,YAAaK,CAChB,GAGCI,EAAsBvtB,EAAe0Q,cAAgB,MACvDtmU,SAACojV,GAAD,CACIrgW,KAAM6yU,EACN34V,OAAQ+4V,EACR3uO,YAAay7P,EACbJ,YAAaK,CAChB,GAGCM,EAAwBxtB,EAAawQ,SAAW,MAClDrmU,SAACsjV,IAAD,CACYrmX,SACR8lB,KAAM8yU,EACMsd,aACD0P,YACI5lM,gBACI+lM,mBACtB,GAGCO,EAA0B3tB,EAAeyQ,SAAW,MACtDrmU,SAACwjV,GAAD,CACYvmX,SACR8lB,KAAM6yU,EACS+sB,gBACCC,iBAChBa,sBAAuBztB,EAAYz2W,OACvB4zX,aACD0P,YACXa,cAAeZ,EACA7lM,gBACI+lM,mBACtB,GAGCxW,EAAkB/W,EAAS+W,gBAAgBtugB,MAAM3N,KAClD8N,EAAMjf,KACH4gN,SAACkiV,IAAD,CAEczsB,WACVgrB,eAAgBpihB,CACnB,EAHQ,GAAGA,EAAK6rJ,MAAM,GAAG9qK,GAGzB,GAIT,OACIqoS,UAAAsxC,WAAA,CAAA/jO,SAAA,CACKuub,EACAF,EACAJ,EACAE,EACA3W,CACH,GAEV,C,aACJ,GAa2C3wU,KAAMpoG,U,SAA1C,cAAoCooG,G,+BAD1C5zH,CAC0C4zH,kB,CACvCxG,QAAsC,CAClC,GAAM,CACFp4B,SACA8lB,OACAowV,aACA0P,YACA5lM,gBACA0lM,gBACAK,qBACA,KAAKl/hB,MACH,CAAE6jhB,gBAAeiE,oBAAmBt1a,UAAWysF,EAE/C4gW,EAAoBX,EACpBjgW,EAAK4nV,mBACL5nV,EAAK8nV,WAELc,EACF5oV,EAAK4oV,qBAEL5oV,EAAK8oV,gBAAkB9oV,EAAKpmH,MAE1Bind,EAAQ3mX,EAAO7kD,KAAO2qE,EAAKpmH,MAAQomH,EAAKwjV,YAE9C,OACI9+O,UAAC,IAAD,CAAGlvS,GAAI+6J,EAAY,iBAAkBzyI,UAAU,eAA/Cm0F,SAAA,CACK22a,GAAuBC,IACpB5rU,WAAO25H,SAAP,CAAA3kO,UACIgrG,SAACg9I,GAAD,CACIjmB,SAAU60M,EACVjthB,EAAGiliB,EACH90e,EAAGmuH,EAAOrqB,IACVr6J,GAAI+6J,EAAY,4BAChB1xI,KAAMihhB,aACNxlM,WAAYj7L,GACR3jB,GAAgBjmB,KACpB,EACAkjN,UAAU,SACKuhB,eAClB,EACW,EAbK2uL,EAAkBn3c,IAavB,EAEnBkzc,IACG3nU,WAAO25H,SAAP,CAAA3kO,UACIgrG,SAACg9I,GAAD,CACIjmB,SAAU4wM,EACVhphB,EAAGs+K,EAAO7kD,KACVtpE,EAAGmuH,EAAOrqB,IACVr6J,GAAI+6J,EAAY,uBAChB1xI,KAAMuxgB,aACSl2L,eAClB,EACW,EATK0qL,EAAclzc,IASnB,EAEnBkud,IACG3iV,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,cACdt+C,SAAA2ub,EAAkBpzhB,IAAK25J,IACpB81C,SAAC6jV,IAAD,CACItriB,GAAI+6J,EAAY4W,EAAMshX,cAAc,EAEpCsY,kBAAmB/gW,EAAKqiV,MAAMl7W,EAAMtyK,KAAK,EACzCmsiB,qBAAsB9mX,EAAO7kD,KAAO2qE,EAAKpmH,MACzCkrI,YACH,EAJQ39C,EAAMtyK,KAId,EAEN,GAEN,CAAC0+G,EAAOu2a,iBACL7sU,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,eACdt+C,SAAA2ub,EAAkBpzhB,IAAK25J,IACpB,GAAM,CAAEtyK,QAAOk3D,IAAGk3d,SAAQC,SAAQuF,kBAC9BthX,EACJ,OACI81C,SAAC,OAAD,CAEIrhN,EAAG+5J,EAAYkrY,GACf90e,EAAG4pG,EAAY5pG,GACf6jP,GAAItwI,GACA4jX,GAAUtnY,GAAc2jB,MAC5B,EACA+6L,WAAYj7L,GACR4jX,GAAUvnY,GAAgBjmB,KAC9B,EACA52G,KAAMihhB,aACN7lX,SAAU+lB,EAAKykV,aAEdxya,SAAAw2a,CACC,EAbG5zhB,EAejB,EACD,EAER,C,EAEX,C,aACJ,GAEA,IAAa4riB,GAAb,cAAA9rb,EAAmDjE,SAAA,C,+BA4B9Ckf,E,EAAa6kC,W,GASb7kC,E,EAAasqD,Q,KAzBd,YAAYn5K,EAWT,CACC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAc/9B,WAAuB,CACjC,OAAO,KAAK1zJ,MAAMi/L,KAAKvrC,SAC3B,CAEA,IAAIA,UAAUA,EAAsB,CAChC,KAAK1zJ,MAAMi/L,KAAKzsF,OAAOkhD,UAAYA,CACvC,CAGA,IAAcylB,QAAiB,CAC3B,GAAM,CAAEA,SAAQ8lB,QAAS,KAAKj/L,MAGzB,OAFDi/L,EAAK0nV,SAAWrsY,GAASwU,IAClB,IAAIypB,EAAOY,EAAOzkD,MAAOykD,EAAOrqB,IAAM,GAAI,IAAK,KAC9C,IAAIypB,EAAOY,EAAOzkD,MAAOykD,EAAO1d,OAAS,GAAI,IAAK,IAClE,CAEA81C,QAAsC,CAClC,GAAM,CACFp4B,SACA8lB,OACA4/V,gBACAC,iBACAa,wBACAtQ,aACA0P,YACAa,gBAAgB,EAChBzmM,gBACA+lM,qBACA,KAAKl/hB,MACH,CAAE6jhB,cAAez9W,EAAOwgX,cAAaD,UAAW1nV,EAEhDihW,EAA4BvZ,IAAWrsY,GAASwU,IAChDqxY,EAAiBD,EACjB/mX,EAAOrqB,IACPqqB,EAAO1d,QAAU2K,GAAO9xG,QAAU,GAElC8re,EAAqBF,EACrB/mX,EAAOrqB,IAAMmwC,EAAK3qI,OAAS,EAC1Bqre,GAAyBxmX,EAAO1d,OAEjC4kY,EAAsBH,EACtB/mX,EAAOrqB,IAAM83X,EAAc,GAC3BztW,EAAO1d,OAASmrX,EAEhB0Z,EAAiB,CAACrhW,EAAKzsF,OAAOu2a,eAE9B8W,EAAoBX,EACpBjgW,EAAK4nV,mBACL5nV,EAAK8nV,WAEX,OACIpjP,UAAC,IAAD,CAAGlvS,GAAI+6J,EAAY,mBAAoBzyI,UAAU,iBAAjDm0F,SAAA,CACKk1D,IACG81C,WAAO25H,SAAP,CAAA3kO,UACIgrG,SAACg9I,GAAD,CACIjmB,SAAU7sK,EACVvrK,EAAGokM,EAAKokV,YACRr4d,EAAGm1e,EACH1riB,GAAI+6J,EAAY,yBAChB1xI,KAAMuxgB,aACN91L,WAAW,SACIJ,eAClB,EACW,EAVK/yL,EAAMz1F,IAUX,EAEnBkud,IACG3iV,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,cACdt+C,SAAA2ub,EAAkBpzhB,IAAK25J,IACpB,IAAIvrK,EAAIokM,EAAKqiV,MAAMl7W,EAAMtyK,KAAK,EAK9B,GAAIgriB,EAAgB,CAChB,IAAMyB,EAAaX,EAAgB,EAC/B/kiB,GAAKokM,EAAKmkV,SAAUvohB,GAAK0liB,EACpB1liB,GAAKokM,EAAKkkV,WAAUtohB,GAAK0liB,EACtC,CAEA,OACIrkV,SAAC,OAAD,CAEIznN,GAAI+6J,EAAY4W,EAAMshX,cAAc,EACpCjvW,GAAI7jB,EAAY/5J,GAChBg+K,GAAIjkB,EACAwrY,EAAqBR,EAAgB,GAEzChnX,GAAIhkB,EAAY/5J,GAChBi+K,GAAIlkB,EACAwrY,EAAqBI,GAEzBl9P,cACAC,YAAaq8P,CAChB,EAZQx5X,EAAMtyK,KAYd,CAET,EACD,GAENwsiB,IACGpkV,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,eACdt+C,SAAA2ub,EAAkBpzhB,IAAK25J,IACpB81C,SAAC,OAAD,CAEIrhN,EAAG+5J,EAAYwR,EAAMvrK,CAAC,EACtBmwD,EAAG4pG,EAAYyrY,GACfvihB,KAAMihhB,aACNxlM,WAAYj7L,GACR8H,EAAM87W,QAAUvnY,GAAgBhmB,MACpC,EACAukD,SAAU+lB,EAAKykV,aAEdxya,SAAAk1D,EAAMshX,cACL,EAVGthX,EAAMtyK,KAUT,EAEX,EAER,C,EAEX,CACJ,EAEaisiB,IAAb,cAAAnsb,EAAgDjE,SAAA,CAO5C4hG,QAAsC,CAClC,GAAM,CAAEyuV,oBAAmBC,uBAAsBl8U,QAAOlrI,QAAOpkF,MAC3D,KAAKuL,MAEHygiB,EAAYR,EAAuBO,EACzC,OACItkV,SAAC,OAAD,CACQznN,KACJgkL,GAAI7jB,EAAYqrY,GAChBpnX,GAAIjkB,EAAYorY,GAChBpnX,GAAIhkB,EAAY6rY,GAChB3nX,GAAIlkB,EAAYorY,GAChB18P,OAAQv/E,EACRw/E,YAAa1qN,CAChB,EAET,CACJ,EClmBA,SAAA6nd,IAAwB,EAAG,CACzB,OAAO7liB,CACT,CCAA,SAAA8liB,IAAwB,EAAW,CACjC,GAAItmb,GAAa,KAAM,OAAOnD,IAC9B,IAAIyuM,EACAC,EACAg7O,EAAKvmb,EAAU,MAAM,GACrBwmb,EAAKxmb,EAAU,MAAM,GACrBu0L,EAAKv0L,EAAU,UAAU,GACzBw0L,EAAKx0L,EAAU,UAAU,GAC7B,OAAO,SAAS,EAAO,EAAG,CACnB79G,IAAG,EAAK,EAAK,GAClB,IAAI04H,EAAI,EAAGt6H,EAAIjH,EAAM,OAAQutB,EAAa,MAAMtmB,CAAC,EAGjD,IAFA,EAAO,IAAM,GAAMjH,EAAM,IAAMitiB,EAAKhyP,EACpC,EAAO,IAAM,GAAMj7S,EAAM,IAAMktiB,EAAKhyP,EAC7B35K,EAAIt6H,GAAG,EAAOs6H,GAAKvhI,EAAMuhI,GAAI,EAAEA,EACtC,OAAOh0G,CACT,CACF,CClBA,SAAA4/gB,IAAwB,EAAO,EAAG,CAEhC,IADA,IAAIp2e,EAAGwqE,EAAI9jB,EAAM,OAAQ,EAAI8jB,EAAIt6H,EAC1B,EAAI,EAAEs6H,GAAG,EAAI9jB,EAAM,GAAI,EAAM,KAAOA,EAAM8jB,GAAI,EAAMA,GAAKxqE,CAClE,CCAA,SAAAq2e,IAAwB,EAAU,EAAG,CAEnC,OADI,OAAOv1f,GAAM,WAAU,EAAIw1f,EAAS,QAAQx1f,IACzCA,EAAE,OAAS,qBACZ,CAAC,KAAM,oBAAqB,SAAUA,EAAE,WAAW,IAAI,SAAS,EAAG,CAAE,OAAO1tC,IAAQkjiB,EAAUx1f,CAAC,CAAG,CAAC,CAAC,EACpG1tC,IAAQkjiB,EAAUx1f,CAAC,CAC3B,CAEA,SAAS1tC,IAAQ,EAAU,EAAG,CAC5B,IAAIrJ,EAAK+2C,EAAE,GACPgtI,EAAOhtI,EAAE,KACTmoB,EAAanoB,EAAE,YAAc,KAAO,CAAC,EAAIA,EAAE,WAC3C0jR,EAAWh3T,IAAO8oiB,EAAUx1f,CAAC,EACjC,OAAO/2C,GAAM,MAAQ+jL,GAAQ,KAAO,CAAC,KAAM,UAAuB,aAAsB,UAAQ,EAC1FA,GAAQ,KAAO,CAAC,KAAM,UAAe,KAAgB,aAAsB,UAAQ,EACnF,CAAC,KAAM,UAAe,KAAU,OAAkB,aAAsB,UAAQ,CACxF,CAEA,SAAgBtgL,IAAO,EAAU,EAAG,CAClC,IAAI+oiB,EAAiB5mb,IAAU2mb,EAAS,SAAS,EAC7CE,EAAOF,EAAS,KAEpB,SAASzpO,EAAI,EAAG,EAAQ,CAClBxiK,EAAO,QAAQA,EAAO,IAAI,EAC9B,IAAK,IAAI/6I,EAAIknhB,EAAK1kiB,EAAI,EAAI,CAACA,EAAIA,GAAIoD,EAAI,EAAGhF,EAAIof,EAAE,OAAQpa,EAAIhF,EAAG,EAAEgF,EAC/Dm1J,EAAO,KAAKksY,EAAejnhB,EAAEpa,GAAIA,CAAC,CAAC,EAEjCpD,EAAI,GAAGskiB,IAAQ/rY,EAAQn6J,CAAC,CAC9B,CAEA,SAAS4zJ,EAAM,EAAG,CAChB,OAAOyyY,EAAe/mhB,CAAC,CACzB,CAEA,SAASK,EAAK,EAAM,CAElB,IAAK,IADDw6I,EAAS,CAAC,EACLv4J,EAAI,EAAG5B,EAAIsmiB,EAAK,OAAQ1kiB,EAAI5B,EAAG,EAAE4B,EAAG+6T,EAAI2pO,EAAK1kiB,GAAIu4J,CAAM,EAEhE,OADIA,EAAO,OAAS,GAAGA,EAAO,KAAKA,EAAO,EAAE,EACrCA,CACT,CAEA,SAASkiK,EAAK,EAAM,CAElB,IADA,IAAIliK,EAASx6I,EAAK2mhB,CAAI,EACfnsY,EAAO,OAAS,GAAGA,EAAO,KAAKA,EAAO,EAAE,EAC/C,OAAOA,CACT,CAEA,SAASiiK,EAAQ,EAAM,CACrB,OAAOkqO,EAAK,IAAIjqO,CAAI,CACtB,CAEA,SAAS/H,EAAS,EAAG,CACnB,IAAIxzS,EAAO8vB,EAAE,KAAM+jR,EACnB,OAAQ7zS,EAAR,CACE,IAAK,qBAAsB,MAAO,CAAO,OAAM,WAAY8vB,EAAE,WAAW,IAAI0jR,CAAQ,CAAC,EACrF,IAAK,QAAS,EAAc1gK,EAAMhjH,EAAE,WAAW,EAAG,MAClD,IAAK,aAAc,EAAcA,EAAE,YAAY,IAAIgjH,CAAK,EAAG,MAC3D,IAAK,aAAc,EAAcj0I,EAAKixB,EAAE,IAAI,EAAG,MAC/C,IAAK,kBAAmB,EAAcA,EAAE,KAAK,IAAIjxB,CAAI,EAAG,MACxD,IAAK,UAAW,EAAcy8S,EAAQxrR,EAAE,IAAI,EAAG,MAC/C,IAAK,eAAgB,EAAcA,EAAE,KAAK,IAAIwrR,CAAO,EAAG,MACxD,QAAS,OAAO,IAClB,CACA,MAAO,CAAO,OAAmB,aAAW,CAC9C,CAEA,OAAO9H,EAAS1jR,CAAC,CACnB,CCvBA,IAAM85Q,IAAU,KACVxX,IAAW,MACXsX,GAAK,KAAK,GACVkJ,GAASlJ,GAAK,EACdxY,IAAU,IAAMwY,GAChBoJ,IAAUpJ,GAAK,IAGf+7O,GAAc,OAChBC,GAAc,OACdC,GAAc,QACdC,GAAc,OACdC,IAAcJ,GACdK,IAAc,EAAIJ,GAClBK,IAAc,EAAIJ,GAClBK,IAAc,EAAIJ,GAClBK,IAAgB,YAEpB,SAAgBC,IAAa,EAAgB,EAA+B,CACxE,IAAMjiO,EAAO9O,EAAMA,EACnB,MAAO,CACHD,EACAC,GACKswO,GACGxhO,EACIA,GACCyhO,GAAczhO,GAAQ0hO,GAAcC,GAAc3hO,IACnE,CACJ,CAEA,IAAa,OAAS,SAAU,EAAW,EAA6B,CAChE30Q,EAAI22e,IAAe,EAAIA,IAClB32e,EAAI,eAAgB,EAAI,cACjC,IAAI62e,EAAK72e,EACLopE,EAEJ,EAAG,CAEC,IAAM0kD,EAAK+oX,EAAKA,EAChB,GAAM,GACDA,GACIV,GACGroX,EACIA,GACCsoX,GAActoX,GAAMuoX,GAAcC,GAAcxoX,KACzD9tH,IACHu2e,IACGzoX,EAAKA,GAAM0oX,IAAc1oX,GAAM2oX,IAAcC,IAAc5oX,IACvE,OAAS,KAAK,IAAI1kD,CAAK,EAAIkxL,KAE3B,MAAO,CAACzqT,EAAGgniB,CAAE,CACjB,EAEA,SAAgBC,KAA8B,CAC1C,OAAOC,GAAcH,GAAY,CAAC,CAAC,MAAM,OAAO,CACpD,CAGA,IAAMx1f,GAAI,CACN,CAAC,MAAQ,KAAM,EACf,CAAC,EAAK,CAAG,EACT,CAAC,MAAQ,IAAK,EACd,CAAC,MAAQ,IAAK,EACd,CAAC,IAAM,IAAK,EACZ,CAAC,MAAQ,IAAK,EACd,CAAC,KAAO,GAAI,EACZ,CAAC,IAAM,IAAK,EACZ,CAAC,MAAQ,IAAK,EACd,CAAC,MAAQ,KAAM,EACf,CAAC,MAAQ,KAAM,EACf,CAAC,MAAQ,KAAM,EACf,CAAC,KAAO,KAAM,EACd,CAAC,MAAQ,KAAM,EACf,CAAC,MAAQ,KAAM,EACf,CAAC,MAAQ,KAAM,EACf,CAAC,MAAQ,KAAM,EACf,CAAC,MAAQ,KAAM,EACf,CAAC,MAAQ,KAAM,EACf,CAAC,MAAQ,CAAG,CAChB,EAEAA,GAAE,QAAQ,SAAU,EAAG,CACnB,EAAE,IAAM,MACZ,CAAC,EAED,SAAgB41f,IAAY,EAAgB,EAA+B,CACvE,IAAIpiiB,EACApD,EAAI,KAAK,IAAI,GAAK,KAAK,IAAIq0T,CAAG,EAAI,GAAMzL,EAAE,EAC1CtuL,EAAK,KAAK,MAAMt6H,CAAC,EACjByliB,EAAKzliB,EAAIs6H,EACTkyL,GAAM,EAAI58Q,GAAE0qF,GAAA,CAAK,GACjBsyL,EAAKxpT,EAAE,GACPspT,GAAM,EAAI98Q,GAAE,EAAE0qF,GAAA,CAAK,GACnBwyL,EAAK1pT,EAAE,GACP26K,GAAM,EAAInuI,GAAE,KAAK,IAAI,GAAI,EAAE0qF,CAAE,IAAI,GACjC0jD,EAAK56K,EAAE,GACX,MAAO,CACHgxT,GACK1H,EAAM+4O,GAAM1nX,EAAKyuI,GAAO,EAAKi5O,EAAKA,GAAM1nX,EAAK,EAAI2uI,EAAKF,GAAO,IACjE6H,EAAM,EAAIvC,GAAS,CAACA,KAChBhF,EAAM24O,GAAMznX,EAAK4uI,GAAO,EAAK64O,EAAKA,GAAMznX,EAAK,EAAI8uI,EAAKF,GAAO,EACtE,CACJ,CAEA,IAAY,OAAS,SAAU,EAAW,EAA6B,CACnE,IAAI84O,EAAKl3e,EAAIsjQ,GACTuC,EAAMqxO,EAAK,GACX,EAAI,KAAK,IAAI,GAAI,KAAK,IAAIrxO,EAAM,CAAC,CAAC,EAClC/5L,EAAK,KAAK,IAAI,EAAG,KAAK,MAAM,CAAC,CAAC,EAClC,EAAG,CACC,IAAIsyL,EAAKh9Q,GAAE0qF,EAAG,CAAC,GACXwyL,EAAKl9Q,GAAE0qF,EAAK,EAAE,CAAC,GACf0jD,EAAKpuI,GAAE,KAAK,IAAI,GAAI0qF,EAAK,CAAC,EAAE,CAAC,GAC7BhsE,EAAI0vH,EAAK4uI,EACT/zS,EAAImlK,EAAK,EAAI8uI,EAAKF,EAClB1+P,EAAK,GAAK,KAAK,IAAIw3e,CAAE,EAAI54O,GAAOx+P,EAChC9oC,EAAI3M,EAAIy1C,EACRm3e,EAAKv3e,GAAK,EAAI1oC,EAAI0oC,GAAK,EAAI,EAAI1oC,EAAI0oC,IACvC,GAAIu3e,GAAM,GAAKnra,IAAO,EAAG,CACrB,GAAO9rE,GAAK,EAAI,EAAI,KAAOi3e,EAAK,GAChC,IAAI/sa,EAAI,GACJd,EACJ,EACI,GAAI,KAAK,IAAI,GAAI,KAAK,IAAIy8L,CAAG,EAAI,CAAC,EAClC,EAAK,KAAK,MAAM,CAAC,EACjB,EAAK,EAAI/5L,EACT,EAAK1qF,GAAE0qF,EAAG,CAAC,GACX,EAAK1qF,GAAE0qF,EAAK,EAAE,CAAC,GACf,EAAK1qF,GAAE,KAAK,IAAI,GAAI0qF,EAAK,CAAC,EAAE,CAAC,GAC7B,IACK,GACI9rE,GAAK,EAAIsjQ,GAAS,CAACA,KACfhF,EACI24O,GAAMznX,EAAK4uI,GAAO,EAClB64O,EAAKA,GAAMznX,EAAK,EAAI8uI,EAAKF,GAAO,GACzCp+P,GAAK4hP,UACR,KAAK,IAAIx4K,CAAK,EAAI05K,KAAY,EAAE54K,EAAI,GAC7C,KACJ,CACJ,OAAS,EAAE4B,GAAM,GACjB,IAAMkyL,EAAK58Q,GAAE0qF,EAAG,CAAC,GACboyL,EAAK98Q,GAAE0qF,EAAK,EAAE,CAAC,GACfyjD,EAAKnuI,GAAE,KAAK,IAAI,GAAI0qF,EAAK,CAAC,EAAE,CAAC,GACjC,MAAO,CACHj8H,GAAKquT,EAAM+4O,GAAM1nX,EAAKyuI,GAAO,EAAKi5O,EAAKA,GAAM1nX,EAAK,EAAI2uI,EAAKF,GAAO,GAClE6H,EAAMrC,GACV,CACJ,EAEA,SAAgB2zO,KAA6B,CACzC,OAAOJ,GAAcC,GAAW,CAAC,CAAC,MAAM,MAAM,CAClD,CCjMA,IAAaI,GAAwD,CACjE,MAAOD,IAAY,EAEnB,OAAQE,GAAkB,CAAC,CACtB,OAAO,CAAC,IAAK,CAAC,CAAC,CAAC,CAChB,OAAO,CAAC,EAAG,CAAC,CAAC,CAAC,CACd,UAAU,CAAC,GAAI,GAAG,CAAC,EAExB,aAAcA,GAAkB,CAAC,CAC5B,OAAO,CAAC,GAAI,CAAC,CAAC,CAAC,CACf,OAAO,CAAC,EAAG,EAAE,CAAC,CAAC,CACf,UAAU,CAAC,KAAM,IAAI,CAAC,EAE3B,aAAcA,GAAkB,CAAC,CAC5B,OAAO,CAAC,GAAI,CAAC,CAAC,CAAC,CACf,OAAO,CAAC,EAAG,GAAG,CAAC,CAAC,CAChB,UAAU,CAAC,GAAI,GAAG,CAAC,EAGxB,KAAMP,IAAa,CAAC,CACf,OAAO,CAAC,GAAI,EAAE,CAAC,CAAC,CAChB,MAAM,GAAG,CAAC,CACV,UAAU,CAAC,EAAG,CAAC,CAAC,CAAC,CACjB,UAAU,EAAG,EAGlB,OAAQQ,IAAsB,CAAC,CAC1B,MAAM,GAAG,CAAC,CACV,UAAU,CAAC,IAAK,IAAI,CAAC,CAAC,CACtB,UAAU,OAAU,CAAC,CACrB,UAAU,CAAC,EAEhB,QAASD,GAAkB,CAAC,CACvB,OAAO,CAAC,KAAM,CAAC,CAAC,CAAC,CACjB,OAAO,CAAC,EAAG,GAAG,CAAC,CAAC,CAChB,UAAU,CAAC,IAAK,GAAG,CAAC,CAC7B,EC3BaE,GACTC,IACIhR,GACAA,GAAY,QAAQ,KACxB,CAAC,CACH,SAEWiR,IAAkB,IAAI,IAC/BF,GAAY,IAAK,GAAY,CAACzkiB,EAAQ,GAAIA,CAAO,CAAC,CACtD,EAGM4kiB,GAAe,IAAI,IACnBC,IAAe,GAAwC,CACzD,GAAID,GAAa,IAAIzxX,CAAU,EAAG,OAAOyxX,GAAa,IAAIzxX,CAAU,EAEpE,IAAM2xX,EAAgBC,GAAQ,CAAC,CAC1B,OAAO,CAAC,CAAC,CACT,WAAWT,GAAgBnxX,EAAW,EACrC6xX,EAAOP,GAAY,IAAK,GAAYK,EAAc9kiB,CAAO,GAAK,EAAE,EAGtE,OADA4kiB,GAAa,IAAIzxX,EAAY6xX,CAAI,EAC1BJ,GAAa,IAAIzxX,CAAU,CACtC,EAGM8xX,GAAiB,IAAI,IACrBC,IAAgB,GAAwC,CAC1D,GAAID,GAAe,IAAI9xX,CAAU,EAAG,OAAO8xX,GAAe,IAAI9xX,CAAU,EAExE,IAAM2xX,EAAgBC,GAAQ,CAAC,CAAC,WAAWT,GAAgBnxX,EAAW,EAChEkI,EAASopX,GAAY,IAAK,GAAY,CACxC,IAAMU,EAAUL,EAAc,OAAO9kiB,CAAO,EAEtCq7K,EAASZ,EAAO,YAClB,IAAI5rB,GAAY,GAAGs2Y,EAAQ,EAAE,EAC7B,IAAIt2Y,GAAY,GAAGs2Y,EAAQ,EAAE,CACjC,EASA,OANInliB,EAAQ,KAAO,OACRq7K,EAAO,IAAI,CACd,EAAGA,EAAO,MAAQA,EAAO,OACzB,MAAOA,EAAO,MAClB,CAAC,EAEEA,CACX,CAAC,EAGD,OADA4pX,GAAe,IAAI9xX,EAAYkI,CAAM,EAC9B4pX,GAAe,IAAI9xX,CAAU,CACxC,EAEMiyX,IAA0BX,GAAY,IAAK,GAC7CY,IAAYrliB,EAAQ,QAAQ,CAChC,EAEMsliB,IAAuBb,GAAY,IAAK,GAAY,CACtD,IAAMU,EAAUI,IAAUvliB,CAAO,EACjC,OAAOy6K,EAAO,YACV,IAAI5rB,GAAY,GAAGs2Y,EAAQ,EAAE,EAC7B,IAAIt2Y,GAAY,GAAGs2Y,EAAQ,EAAE,CACjC,CACJ,CAAC,EAEKK,GAAyB,IAAI,IACtBC,IACT,GACqB,CACrB,GAAID,GAAuB,IAAIryX,CAAU,EACrC,OAAOqyX,GAAuB,IAAIryX,CAAU,EAEhD,IAAMuyX,EAAaR,IAAa/xX,CAAU,EACpCwyX,EAAYd,IAAY1xX,CAAU,EAElCq+I,EACFizO,GAAY,KAAK,EAAK,KAAW,CAC7B,KAAM7gE,GAAkB,IACxB,GAAIgiE,EAAI,GACH,MACL,WAAYF,EAAWloiB,GACvB,UAAW8niB,IAAqB9niB,GAChC,YAAa4niB,IAAwB5niB,GACrC,KAAMmoiB,EAAUnoiB,EACpB,EAAE,CAAC,CACL,OAAQ,GAAYwC,EAAQ,KAAO,YAAY,EAGjD,OADAwliB,GAAuB,IAAIryX,EAAYq+I,CAAQ,EACxCg0O,GAAuB,IAAIryX,CAAU,CAChD,EAEa0yX,GAAyBh0Y,OAC3B4yY,GAAY,KAAK,EAAK,IAAU,CACnC,IAAMU,EAAUI,IAAUK,CAAG,EACvBvqX,EAASZ,EAAO,YAClB,IAAI5rB,GAAY,GAAGs2Y,EAAQ,EAAE,EAC7B,IAAIt2Y,GAAY,GAAGs2Y,EAAQ,EAAE,CACjC,EACA,MAAO,CACH,KAAMvhE,GAAkB,MACxB,GAAIgiE,EAAI,GACH,MACL,YAAaR,IAAwB5niB,GACrC,UAAW69K,CACf,CACJ,CAAC,CACJ,EChHK67S,IAAgBvzL,IAEtB,SAAgBmiQ,IAAU,CACtB30X,YACA40X,oBACAC,gBACAC,iBAAA,CAOA,IAAMz0O,EAAWi0O,IAAqBnsZ,GAAc8pV,KAAK,EAEnD7qC,KAAUh5O,eAAA,CACZ,IAAM2mV,EAAY10O,EAAS7iT,IAAK4/B,GAAMA,EAAEm3f,UAAU,EAClD,OAAOjrX,EAAOtzJ,MAAM++gB,GAAWC,UAAA,CACnC,EAAG,CAAC30O,CAAS,GAEb,OACIpzG,SAAC,MAAD,CAAKn/L,UAAU,MAAes5a,UAAS6tG,eAAgBH,EAClD7yb,SAAAo+M,EAAS7iT,IAAK3O,IACX,IAAMowD,EAAQ+gH,EAAU/1K,IAAI4E,EAAQrJ,EAAE,EACtC,OACIynN,SAACioV,IAAD,CAEIpzgB,KAAMjzB,EAAQizB,KACdgzL,MAAO71J,GAAO61J,OAASixQ,IACvBtpD,YAAa4jD,GAAiB80E,IAC1Bl2e,GAAO6qF,OACP8qZ,GAEJQ,eACIn2e,MACY41e,IAAgB51e,EAAM6qF,MAAM,EAClCgrZ,EAEVG,eAAgBH,CACnB,EAbQjmiB,EAAQrJ,EAahB,CAET,EACC,EAEb,CAEA,SAAS0viB,IAAY,CACjBpzgB,OACAgzL,QACA2nN,cACA24H,iBACAH,kBAAA,CAQA,OACIhoV,SAAC,OAAD,CACIn/L,UAAWw9J,EAAG,CAAE+pX,MAAO54H,EAAYwlD,UAAW,GAC9Ctlb,EAAG7a,EACHjT,KAAMimM,EACUsgV,iBACAH,gBACnB,EAET,CCnEA,SAAgBK,IAAc,CAC1B3wL,cACAvlM,UACAm2X,8BAAA,CAMA,GAAM,CAACC,EAAcC,EAAiBC,GAClCpzD,IAA2BizD,GAEzBv1X,KAAYouC,eAAcg2U,IAAgBhlX,GAAU,CAACA,CAAQ,GAEnE,OACIs1H,UAAC,MAAD,CACI5mR,UAAU,iBAKV41L,YAActnK,GAAMA,EAAE23W,gBAAA,EACtB03G,aAAervd,GAAMA,EAAE23W,gBAAA,EACvBhuM,aAAe3pK,GAAMA,EAAE23W,gBAAA,EAR3B9xS,SAAA,EAUIgrG,SAACgwJ,GAAD,CAAoBv7R,KAAMijS,CAAc,IACxC13J,SAAC,MAAD,CAAKn/L,UAAU,gBACXm0F,UAAAgrG,SAAC0nV,IAAD,CACe30X,YACX40X,kBAAmBY,EACnBX,cAAeY,EACfX,cAAeY,CAClB,EACA,IACLzoV,SAAC0oV,IAAD,CACav2X,UACTw1X,kBAAmBY,EACnBX,cAAeY,EACfX,cAAeY,CAClB,EACA,C,EAEb,CAEA,SAASC,IAAa,CAClBv2X,UACAw1X,oBACAC,gBACAC,iBAAA,CAOA,OACI7nV,SAAC,KAAD,CAAIn/L,UAAU,SACTm0F,SAAAm9D,EAAQ5hK,IAAKssI,IACVmjE,SAAC2oV,IAAD,CAEY9rZ,SACR2yR,YAAa4jD,GAAiB80E,IAC1BrrZ,EAAOzjJ,KACPuuiB,GAEJQ,mBAAsBP,EAAc/qZ,EAAOzjJ,IAAI,EAC/C4uiB,eAAgBH,CACnB,EARQhrZ,EAAOzjJ,IAQf,EAEL,EAEZ,CAEA,SAASuviB,IAAiB,CACtB9rZ,SACA2yR,cACA24H,iBACAH,kBAAA,CAOA,OACIvgQ,UAAC,KAAD,CACI5mR,UAAWw9J,EAAG,cAAe,CAAE+pX,MAAO54H,EAAYwlD,UAAW,GAC7CmzE,iBACAH,iBAHpBhzb,SAAA,EAKIgrG,SAAC,OAAD,CACIn/L,UAAU,SACVmvE,MAAO,CAAEwtW,gBAAiB3gT,EAAOgrE,KAAM,CAC1C,GACAhrE,EAAOypT,WACR,C,EAEZ,CCnFA,IAAMsiG,IAA0C,CAC5CxviB,KAAMqsS,GACN7tS,MAAO6tS,GACPojQ,sBAAuBnjQ,GACvBojQ,WAAYpjQ,EAChB,EAyBA,SAAgBqjQ,GAAY,CACxB3riB,QACAuB,IACAmwD,IACAv2D,KACAsvN,QACApkD,UACAulY,UACAxqC,eACA1lT,eACAmwV,qBAAA,CAEA,GAAM,CAACjwN,EAAS1B,GAAWl6U,EAAMw7U,2BAA2Bj6U,EAAGmwD,GAEzDkuH,EAAW5/K,EAAMk5U,aAAat5J,SAC9B64H,EAAS,CAAE,GAAG+yP,IAAe,GAAG/gV,CAAM,EACtC/jN,EAAQ,CAAEvL,KAAIkrK,UAAS+6V,eAAc1lT,cAAa,EAElDowV,EACFpuhB,IAKA,IAAMquhB,EAAS5wiB,EAAK,GAAGA,EAAG,QAAU,cACpC,OAAOywiB,GACHhpV,SAACi9O,GAAD,CAAM1kc,GAAI4wiB,EAAQnsX,SAAU5/K,EAAMk5U,aAAat5J,SAC1ChoE,SAAAl6F,CACC,GAENA,CAER,EAGA,GAAI,CAAC1d,EAAM46hB,QACP,OAAOkR,GACHlpV,SAACopV,IAAD,CACIzqiB,EAAGq6U,EACHlqR,EAAGwoR,EACH2gN,UAAW76hB,EAAM66hB,UACjB56L,WAAYjgW,EAAMigW,WACRrgL,WACVg6J,WAAY55U,EAAMw6U,iBACV/hC,SACR,GAAI/xS,CACP,IAKT,GAAM,CAACuliB,EAAeC,GAAiBnyY,GACnC/5J,EAAM86hB,oBACL/nf,GAAMA,EAAE3wB,OAAS,QAGtB,OACIioR,UAAC,IAAD,CAAG,GAAI3jS,EAAPkxG,SAAA,CACKk0b,GACGlpV,SAACupV,IAAD,CACI5qiB,EAAGq6U,EACHlqR,EAAGwoR,EACHnmL,UAAWk4Y,EACDrsX,WACF64H,QACX,IAEJyzP,EAAc/4hB,IAAKmyC,IAChBs9J,SAACwpV,IAAD,CAEI7qiB,EAAGq6U,EACHlqR,EAAGwoR,EACO50R,WACV9gC,KAAMi0R,EAAOgzP,sBACb9zX,WAAYryH,EAASqyH,WACPypV,eACA1lT,eACKmwV,mBACtB,EATQvmf,EAAS41e,UASjB,EAEN,C,EAEX,CAEA,SAAS8Q,IAAuB,CAC5BzqiB,IACAmwD,IACAmpe,YACA56L,aACArgL,WACAg6J,aACAnhC,SACAt9S,KACAkrK,UACAzzE,QACAwua,eACA1lT,gBAAA,CAeA,OACIkH,SAAC,OAAD,CACQznN,KACGy3F,QACPrxF,EAAG+5J,EAAY/5J,GACfmwD,EAAG4pG,EAAY5pG,GACHuuS,aACFrgL,WACDvZ,UACK+6V,eACA1lT,eAEb9jG,SAAAijb,EAAU1nhB,KAAKorB,EAAO2hT,IACnB3hT,EAAMprB,KAAKyhB,EAAMy3gB,KACb,IAAMzwN,EAAU0wN,IAAS,CAAED,YAAW9qiB,GAAE,GAClCgriB,EAAWC,IAAU,CACvB3R,YACA36M,YACAmsN,YACAzyN,aACAqmB,YACJ,GAEA,OACIr9I,SAAC,QAAD,CAEIrhN,EAAGq6U,EACHrmC,GAAIg3P,EACJ5sX,WAAY/qJ,EAAK+qJ,WACjBn7J,KAAMi0R,EAAO7jR,EAAK0tW,MAElBpkD,SACItpT,EAAKyiD,KAAKg0F,WAAW,KACf,WACAplB,OAGTruC,SAAAhjF,EAAKyiD,IACH,EAbEziD,EAAKyiD,IAaP,CAEf,GAEF,EAEd,CAEA,SAAS80d,IAAU,CACf5qiB,IACAmwD,IACAqiG,YACA6rB,WACA64H,SACAt9S,KACAkrK,UACAzzE,QACAwua,eACA1lT,gBAAA,CA8BA,OAjBI3nD,EAAU9xJ,SAAW,GAEjB2gN,SAAC6pV,IAAD,CACQtxiB,KACDoG,IACAmwD,IACHpM,SAAUyuG,EAAU,GACV6rB,WACVp7J,KAAMi0R,EAAO1kJ,EAAU,EAAE,CAACuuO,MACjBj8N,UACFzzE,QACOwua,eACA1lT,cACjB,IAKLkH,SAAC,OAAD,CACQznN,KACGy3F,QACGgtF,WACDvZ,UACK+6V,eACA1lT,eAEb9jG,SAAAm8C,EAAU5gJ,IAAKmyC,IACZs9J,SAAC8pV,IAAD,CAEOnriB,IACAmwD,IACOpM,WACV9gC,KAAMi0R,EAAOnzP,EAASg9U,KACzB,EALQh9U,EAAS+xB,IAKjB,EAEH,EAEd,CAEA,SAASo1d,IAAa,CAClBlriB,IACAmwD,IACApM,WACAs6H,WACAp7J,OACArpB,KACAkrK,UACAzzE,QACAwua,eACA1lT,gBAAA,CAaA,OACIkH,SAAC,OAAD,CACQznN,KACGy3F,QACGgtF,WACDvZ,UACK+6V,eACA1lT,eAEd9jG,UAAAgrG,SAAC8pV,IAAD,CAAqBnriB,IAAMmwD,IAAapM,WAAgB9gC,MAAO,EAC7D,EAEd,CAEA,SAASkohB,IAAiB,CACtBnriB,IACAmwD,IACApM,WACA9gC,QAAA,CAOA,OACIo+L,SAAC,QAAD,CACIrhN,EAAG+5J,EAAY/5J,EAAI+jD,EAAS/jD,CAAC,EAC7BmwD,EAAG4pG,EAAY5pG,EAAIpM,EAASoM,CAAC,EAC7BiuH,WAAYr6H,EAASq6H,WACfn7J,OAELozF,SAAAtyD,EAAS+xB,IACP,EAEf,CAEA,SAAS+0d,IAAa,CAClB7qiB,IACAmwD,IACApM,WACA9gC,OACAmzJ,aACAypV,eACA1lT,eACAmwV,qBAAA,CAYA,GAAM,CAACc,EAAmBC,MAAwBlrV,YAAS,IAErDmrV,EAAQtriB,EAAI+jD,EAAS/jD,EACrBuriB,EAAQp7e,EAAIpM,EAASoM,EAErBq7e,EAAcjxY,KAAkB,GAAK,GACrCp5B,EAAUm0B,KAAKz1J,MAAM2riB,EAAcznf,EAAS60e,UAAY,GACxD6S,EAAgB,IAAI/tX,EACtB4tX,EACAC,EACAxnf,EAAS60e,SACT70e,EAAS60e,QACb,EAAEx6E,OAAOj9U,GAET,OACI2nK,UAAC,IAAD,CAAAzyL,SAAA,EACIgrG,SAAC,IAAD,CACI7hG,UAAW,aAAau6C,EAAYuxY,GAAO,IAAIvxY,EAAYwxY,GAAO,GAElEl1b,UAAAgrG,SAAC+9E,EAAD,CACI1W,KAAMwd,GACNloN,MAAOj6B,EAAS60e,SAChBn/d,OAAQ1V,EAAS60e,SACjB1vU,MAAOjmM,CACV,EACF,IAGHo+L,SAAC7B,GAAD,CACIgC,MAAM,sBACNlgB,UAAU,MACV0wK,YAAa,CAACz3M,KACd6gD,aAAgB7/M,SAASisE,KACzBwrS,OAAS9rK,IAEL2V,IAAQ,CAAE6uV,QAASxkW,CAAS,GAE5BojW,KACJ,EAIAvve,aAAgBswe,EAAsBtmiB,GAAM,CAACA,GAC7CkB,SACIo7M,SAACqoV,IAAD,CAEI3wL,YAAao/K,IAAqBp0e,EAAS41e,UAAU,EACrDnmX,QAAS+kX,IAAiBx0e,EAAS41e,UAAU,EAC7CgQ,2BAA4BvzX,CAC/B,EAJQg1X,EAAkB71iB,SAAA,GAO/B8gH,UAAAgrG,SAAC,OAAD,CACI,GAAIoqV,EAAcp+B,QAAA,EAClBpqf,KAAK,cACLouE,MAAO,CAAEs6c,cAAe,MAAO,EACjB9rC,eACA1lT,cACjB,EACE,EACR,GAEX,CAEA,SAAS4wV,IAAS,CACdD,YACA9qiB,KAAA,CAMA,OADoB8qiB,IAAc,EACb/wY,EAAY/5J,GAAK0kJ,MAC1C,CAEA,SAASumZ,IAAU,CACf3R,YACA36M,YACAmsN,YACAzyN,aACAqmB,cAAA,CAQA,IAAMktM,EAAcjtN,IAAc,EAC5BktN,EAAcf,IAAc,EAC5BgB,EAAehB,IAAc,EAGnC,GAAIe,KAAeD,GAGnB,IAAIC,EAKA,OAAO9xY,EAAYs+K,EAJS0zN,IACxBzS,EAAU36M,EAAY,GACtB+f,CAE4BstM,GAIpC,GAAIF,EACA,OACIC,IAAoBzS,EAAU36M,GAAY+f,IAAeh6M,MALjE,CASJ,CAGA,SAASqnZ,IACL/ugB,EACA0hU,EAAA,CAEA,OAAOA,IAAe,SAClB1hU,EAAMt8B,OAAS,GACfs8B,EAAM,EAAE,CAACohJ,aAAephJ,EAAM,EAAE,CAACohJ,WAC/Bs8J,IACA,CACV,CCxcA,IAAMuxN,GAAwC,CAC1C,QAAS,EACT,mBAAoB,MACxB,EAEa/pB,GAAkD,EAC1DjN,EAAS,SAAUg3B,IACnBh3B,EAAS,UAAWg3B,IACpBh3B,EAAS,aAAcg3B,IACvBh3B,EAAS,OAAQ,CACd,QAASrzE,GACT,mBAAoB,MACxB,CACJ,ECRMhrZ,KAAQ,EAAuB,IACjC,KAAK,IAAIwoR,EAAG,KAAOjrO,EAAG,IAAI,EAE9B,SAAS+3c,IACL,EACA,EACM,CAEN,IAAM/qa,EAAUgra,IAAkB,EAAI,IACtC,OAAOA,EAAgBzihB,EAAU,OAAO,OAASy3G,CACrD,CAMA,SAASira,IACL,EACA,EACwC,CACxC,GAAIC,EAAe,SAAW,EAAG,MAAO,CAAC,OAAW,MAAS,EAE7D,IAAMC,EAAoBD,EAAe,EAAE,CAAC,GACtCE,EAAmBv9N,GAAOq9N,CAAc,CAAC,CAAE,GAEjD,GAAItsiB,EAAIusiB,EAAmB,MAAO,CAAC,OAAWA,CAAiB,EAC/D,GAAIvsiB,GAAKwsiB,EAAkB,MAAO,CAACA,EAAkB,MAAS,EAE9D,IAAK,IAAMC,KAAWH,EAClB,GAAItsiB,GAAKysiB,EAAQ,IAAMzsiB,EAAIysiB,EAAQ,GAAI,OAAOA,EAGlD,MAAO,CAAC,OAAW,MAAS,CAChC,CAKA,SAAgBC,IACZ,EACA,EACoC,CACpC,GAAI,CAAE,aAAY,mBAAkB,oBAAqB1ihB,EAGnD2ihB,EAAcC,IAChB5ihB,EAAQ,iBACRL,EACC,GAAMknB,EAAE,IACb,EASA,OARAg8f,EAAiB,OAAOF,EAAa,EAAGhjhB,CAAS,EAGjD,EAAmBwihB,IAAaW,EAAkBnjhB,CAAS,EAG3DgrQ,EAAW,OAAOhrQ,CAAS,EAEpB,CAAE,GAAGK,EAAS,aAAY,mBAAkB,kBAAiB,CACxE,CAKA,SAAS+ihB,IACL,EACA,EACF,CACE,GAAM,CAAE,cAAe/ihB,EAEvB,OADA2qQ,EAAW,OAAOhrQ,CAAS,EACpB,CAAE,GAAGK,EAAS,YAAW,CACpC,CAcA,SAASgjhB,IACL,EACoC,CACpC,GAAI,CACA,UACA,kBACA,yBACA,uBACAx0f,EAEJ,GAAIy0f,EAAgB,SAAW,GAAKC,IAAwB,EACxD,OAAOljhB,EAEX,IAAMmjhB,EAAsB,CAAC,GAAGF,CAAe,EAC3CG,EAAY,EAIVC,MAAoD,CACtD,GAAIC,EAAwB,CACxB,IAAM3jhB,EAAY2jhB,EAAuBH,CAAmB,EAC5D,GAAIxjhB,EAAW,CACX,IAAMjpB,EAAQysiB,EAAoB,QAAQxjhB,CAAS,EACnDwjhB,EAAoB,OAAOzsiB,EAAO,CAAC,CACvC,CACA,OAAOipB,CACX,CAEA,OAAOwjhB,EAAoB,IAAI,CACnC,EAEA,KAAOA,EAAoB,OAAS,GAAG,CACnC,IAAMxjhB,EAAY0jhB,EAAa,EAI/B,GAHI,CAAC1jhB,GAGAK,EAAQ,WAAW,IAAIL,CAAS,IAGnBwihB,IAAanihB,EAAQ,iBAAkBL,CACrD,GAAaK,EAAQ,iBACrB,EAAU0ihB,IAAc1ihB,EAASL,CAAS,EAC1C,KAEA,EAAUojhB,IAAiB/ihB,EAASL,CAAS,EAI7CyjhB,IAAcF,GAAqB,KAC3C,CAEA,OAAOljhB,CACX,CAYA,SAAgBujhB,IACZ,EACoC,CACpC,OAAOP,IAAiCx0f,CAAM,CAClD,CAYA,SAAgBg1f,GACZ,EACoC,CACpC,OAAOR,IAAiC,CACpC,GAAGx0f,EACH,oBAAqB,CACzB,CAAC,CACL,CAEA,SAAgBi1f,IAAiD,EAIxB,CACrC,GAAM,CAAE,UAAS,kBAAiB,sBAAuBj1f,EAKzD,OAAOg1f,GAAuB,CAC1B,UACA,kBACA,uBANyB,GACzB/sB,GAAQ9rP,EAAa,GAAM99O,IAAKzvB,EAAGsmhB,CAAkB,CAAC,CAM1D,CAAC,CACL,CAOA,SAAgBC,IACZ,EACA,EACuB,CACvB,IAAMC,EAAW,IAAI,IAEftB,EAAiBO,EAClB,MAAM,EAAG,EAAE,CAAC,CACZ,KAAK,EAAG,IAAM,CAACh8f,EAAE,KAAMg8f,EAAiBjriB,EAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CACrD,OAAQ,GAAY6qiB,EAAQ,KAAOA,EAAQ,EAAE,EAGlD,IAAK,IAAM9ihB,KAAagrQ,EAAY,CAEhC,GAAM,CAACtnR,EAAO+qC,GAAOi0f,IAAYC,EAAgB3ihB,EAAU,IAAI,EAG/D,GAAIyuB,IAAQ,QAAa/qC,IAAU,OAAW,CAC1CugiB,EAAS,IAAIjkhB,EAAU,WAAY,CAAC,EACpC,QACJ,CAIA,IAAMhpB,EAASy3C,EAAM/qC,EACfwgiB,EAAWxgiB,EAAQ1M,EAAS,EAE5B+qN,EAAQ/qN,EADe,KAAK,IAAIgpB,EAAU,KAAOkkhB,CAChC,EAEvBD,EAAS,IAAIjkhB,EAAU,WAAY+hM,CAAK,CAC5C,CAEA,OAAOkiV,CACX,CAEA,SAAgBx4E,GAAa,EAA2B,EAAuB,CAC3E,MAAO,GAAGC,EAAO,WAAW,GAAG30d,GACnC,CAEA,SAAgBotiB,GAAc,EAAqC,CAC/D,OACIl0U,GAAQy7P,EAAS,GAAWA,EAAO,OAAO,MAAM,GAC/CA,EAAO,OAAS,IAEzB,CC1PA,SAAgB04E,GAAe,CAC3BrviB,QACAuB,IAAI,EACJqqiB,UAAU,GACVxqC,eACA1lT,eACA63J,cAAc,KASd,GAAM,CAAE+7L,eAAcC,kBAAiBtvM,cAAejgW,EAEtD,OACIqqS,UAAC,IAAD,CACIlvS,GAAI+6J,EAAY,mBAChBn1C,UAAW,aAAau6C,EAAY/5J,GAAG,MAF3Cq2G,SAAA,CAIK27P,IACG3wJ,SAAC4sV,IAAD,CACI74E,OAAQ32d,EAAMi5gB,aACd3zG,OAAQrlE,EACMmhK,eACA1lT,cACjB,GAEJ17M,EAAMyviB,sBACH7sV,SAAC8sV,IAAD,CAAgB/4E,OAAQ24E,CAAe,GAE1CtviB,EAAM2viB,qBACH/sV,SAACgtV,IAAD,CAAaj5E,OAAQ44E,EAAiBjqI,OAAQrlE,CAAa,IAE/Dr9I,SAACitV,IAAD,CACIl5E,OAAQ24E,EACC1D,UACKxqC,eACA1lT,cACjB,EACF,C,EAEX,CAEA,SAASm0V,IAAO,CACZl5E,SACAi1E,UAAU,GACVxqC,eACA1lT,gBAAA,CAOA,OACIkH,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,eAAgBtjE,MAAO,CAAEs6c,cAAe,MAAO,EAC7Dt1b,SAAA++W,EAAOxjd,KAAKwjd,EAAQ30d,KACjB,IAAMyoN,EAAQitF,GAAmBi/K,EAAOlsQ,KAAK,EACvC4tI,EAAWs+H,EAAOt+H,UAAYm+K,EAASyf,QAC7C,OACIrzU,SAAC+oV,GAAD,CAEIxwiB,GAAI+6J,EAAY,QAASygU,EAAOC,UAAU,EAC1C52d,MAAO22d,EAAOm5E,YACdvuiB,EAAGo1d,EAAOo5E,YAAYxuiB,EACtBmwD,EAAGila,EAAOo5E,YAAYr+e,EACtB+4J,MAAO,CAAEzuN,KAAMyuN,EAAOjwN,MAAOiwN,CAAM,EACnCpkD,QAASo9W,GAAYprL,EAAS,CAAChyL,QACtBulY,UACTxqC,iBAAoBA,IAAezqC,EAAOC,UAAU,EACpDl7Q,iBAAoBA,IAAei7Q,EAAOC,UAAU,CACvD,EAVQF,GAAaC,EAAQ30d,GAYtC,EACD,EAEX,CAEA,SAAS4tiB,IAAY,CACjBj5E,SACArxD,UAAA,CAKA,OACI1iN,SAAC,IAAD,CACIznN,GAAI+6J,EAAY,oBAChBtjE,MAAO,CAAEs6c,cAAe,MAAO,EAE9Bt1b,SAAA++W,EAAOxjd,KAAKwjd,EAAQ30d,KACjB,GAAI,CAAC20d,EAAOq5E,mBAAoB,OAAO,KACvC,IAAM33M,EAAWs+H,EAAOt+H,UAAYm+K,EAASyf,QAC7C,OACIrzU,WAAO25H,SAAP,CAAA3kO,UACIgrG,SAAC64H,GAAD,CACI9B,SAAUg9I,EAAOq5E,mBACjBzuiB,EAAGo1d,EAAOo5E,YAAYxuiB,EACtBmwD,EACIila,EAAOo5E,YAAYr+e,EACnBila,EAAOm5E,YAAY90e,SAGvBx2C,KAAK,OACL6hJ,QAASo9W,GAAYprL,EAAS,CAAChyL,QAC/B45L,WAAYqlE,EACZ1yU,MAAO,CAAE+sF,WAAY,GAAI,CAC5B,EACW,EAdK+2S,GAAaC,EAAQ30d,GAgBlD,EACD,EAEX,CAEA,SAAS0tiB,IAAe,CACpB/4E,UAAA,CAIA,OACI/zQ,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,cAAetjE,MAAO,CAAEs6c,cAAe,MAAO,EAC5Dt1b,SAAA++W,EAAOxjd,KAAKwjd,EAAQ30d,KACjB,GAAM,CAAEk+f,SAAQ+vC,QAASt5E,EAAOu5E,oBAC1B,CACF1whB,QACA2whB,cACAC,WAAY,CAAEC,QAASC,GACvBzwX,OAAQ,CAAEwwX,QAASE,IACnB55E,EAEEvkd,GAAQ69hB,EAAO/vC,IAAWiwC,EAAc,GACxCK,EAAatwC,EAAS9tf,EAAOoN,EAAQpN,EACrCkgC,EACF,IAAIgpH,EAAY4kW,GAAQ,GAAG5kW,EAAYg1Y,OAClCh1Y,EAAYk1Y,OACZl1Y,EAAYi1Y,OACZj1Y,EAAY20Y,KAGfQ,EAAYhtB,GADD9sD,EAAOt+H,UAAYm+K,EAASyf,QACN,CAACya,mBAExC,OACI9tV,SAAC,OAAD,CACIznN,GAAI+6J,EAAYygU,EAAOC,UAAU,EAE9Btkb,IACH03P,OAAQymQ,EACRxmQ,YAAa,GACbzlR,KAAK,MACR,EALQkyc,GAAaC,EAAQ30d,GAOtC,EACD,EAEX,CAEA,SAASwtiB,IAAoB,CACzB74E,SACArxD,SACA87F,eACA1lT,gBAAA,CAOA,OACIkH,SAAC,IAAD,CAAAhrG,SACK++W,EAAOxjd,KAAKwjd,EAAQ30d,KACjB,IAAMT,EACF+ja,IAAW,QACLqxD,EAAOy5E,WAAW7uiB,EAClBo1d,EAAOy5E,WAAW7uiB,EAAIo1d,EAAO92S,OAAOtgG,MAC9C,OACIqjI,SAAC,IAAD,CAEIw+S,iBAAoBA,IAAezqC,EAAOC,UAAU,EACpDl7Q,iBAAoBA,IAAei7Q,EAAOC,UAAU,EAEpDh/W,UAAAgrG,SAAC,OAAD,CACIrhN,EAAG+5J,EAAY/5J,GACfmwD,EAAG4pG,EAAYq7T,EAAO92S,OAAOnuH,CAAC,EAC9B6tB,MAAO+7E,EAAYq7T,EAAO92S,OAAOtgG,KAAK,EACtCvkB,OAAQsgG,EAAYq7T,EAAO92S,OAAO7kH,MAAM,EACxCx2C,KAAK,OACL6hJ,QAAS,CACZ,EACF,EAZMqwT,GAAaC,EAAQ30d,GActC,EACD,EAEX,CC7LA,SAAgB2uiB,IACZ,EACA,EACA,EACmB,CACnB,IAAM3vV,EAAU4vV,EAAkBj6E,EAAQ2lE,CAAe,EACnDhvU,EAAcsjV,EAChBj6E,EAAO,OAAQ,GAAWA,EAAO,WAAa6/C,EAAS,WAAW,EAClE8lB,CACJ,EAEMuU,EAAe,IAAI,IAAI7vV,EAAQ,IAAK,GAAW21Q,EAAO,UAAU,CAAC,EACjEoH,EAAUzwQ,EAAY,OACvB,GAAW,CAACujV,EAAa,IAAIl6E,EAAO,UAAU,CACnD,EACA,GAAIoH,EAAQ,SAAW,EAAG,OAAO/8Q,EAEjC,IAAM8vV,EAAmB,IAAI,IACzBxjV,EAAY,IAAK,GAAWqpQ,EAAO,UAAU,CACjD,EAMMo6E,EAAgB53B,GAClBn4T,EAAQ,OAAQ,GAAW,CAAC8vV,EAAiB,IAAIn6E,EAAO,UAAU,CAAC,EALnE,GAEA,KAAK,IAAI,GAAGoH,EAAQ,IAAK,GAAU,KAAK,IAAIpH,EAAO,KAAOrhd,EAAM,IAAI,CAAC,CAAC,CAK1E,EAEM+xB,EAAS8xe,GAAS,CAAC,GAAGn4T,EAAS,GAAG+8Q,CAAO,EAAI,GAAWpH,EAAO,IAAI,EACzE,IAAK,IAAMq6E,KAAUD,EAAe,CAChC,GAAI3B,GAAc/ngB,CAAM,GAAKi1f,EAAiB,MAC9Cj1f,EAAO,OAAOA,EAAO,QAAQ2pgB,CAAM,EAAG,CAAC,CAC3C,CAEA,OAAO3pgB,CACX,CAQA,SAAgB4pgB,IACZ,EACA,EACmB,CACnB,IAAI3lhB,EAAgD,CAChD,WAAY,IAAI,IAAI4lhB,CAAwB,EAC5C,kBACA,iBAAkB,CAAC,EACnB,iBAAkB,CACtB,EAEMC,EAAkB,IAAI,IACxBD,EAAyB,KAAK,EAAQ,IAAU,CAC5Cv6E,EAAO,WACP,CAAC30d,CACL,CAAC,CACL,EAWA,MANA,GAAU6siB,IAA8B,CACpC,UACA,gBAAiBqC,EACjB,uBAN+B,GAC/BnvB,GAAQ9rP,EAAa,GAAMk7Q,EAAgB,IAAIzohB,EAAE,UAAU,CAAC,CAMhE,CAAC,EAEM4C,EAAQ,gBACnB,CAeA,SAAgB8lhB,IACZ,EACA,EACmB,CACnB,IAAI9lhB,EAAgD,CAChD,WAAY,IAAI,IAAIqrc,CAAM,EAC1B,kBACA,iBAAkB,CAAC,EACnB,iBAAkB,CACtB,EAGA,EAAUm4E,GAAuB,CAC7B,UACA,gBAAiBn4E,EACjB,uBAAyB,GACrBorD,GAAQ9rP,EAAa,GAAMvtQ,EAAE,IAAI,CACzC,CAAC,EACD,IAAMsmhB,EAAqB1jhB,EAAQ,iBAAiB,GAUpD,IATI0jhB,IACA,EAAUD,IAAiD,CACvD,UACA,gBAAiBp4E,EACjB,oBACJ,CAAC,GAKDrrc,EAAQ,WAAW,KAAO,GAC1BA,EAAQ,kBAAoBgxgB,GAC9B,CACE,IAAMrmQ,EAAa,MAAM,KAAK3qQ,EAAQ,UAAU,EAC1C4jhB,EAAWD,IACbh5Q,EACA3qQ,EAAQ,gBACZ,EAMA,EAAUwjhB,GAAuB,CAC7B,UACA,gBAAiB74Q,EACjB,uBANsB,GACtB8rP,GAAQ9rP,EAAa,GAAMi5Q,EAAS,IAAIxmhB,EAAE,UAAU,CAAC,CAMzD,CAAC,CACL,CAEA,OAAO4C,EAAQ,gBACnB,C,s1GC/Ga+lhB,GAAb,KAAaA,C,gCAkBR97a,E,EAAqBt0H,S,GAOrBs0H,E,EAAa0qO,Y,GAIb1qO,E,EAAaqqD,U,GAIbrqD,E,EAAqB4yY,O,GAIrB5yY,E,EAAqB+7a,c,IAerB/7a,IAASq1Z,M,KAAWqU,a,GAkCpB1pa,E,EAAqB+na,e,GAWrB/na,E,EAAag8a,a,GAIbh8a,E,EAAah2C,O,GAMbg2C,E,EAAqBi8a,S,GAmBrBj8a,E,EACWk8a,qB,GAuCXl8a,E,EAAam8a,2B,GAObn8a,E,EAAa0jZ,c,GA2Eb1jZ,E,EAAqB27a,0B,GAWrB37a,E,EAAqB+ma,iB,GAKrB/ma,E,EAAqBo8a,kB,GAIrBp8a,E,EAAqBq8a,iB,GAMrBr8a,E,EAAas8a,qB,GAcbt8a,E,EAAau8a,oB,GAIbv8a,E,EAAaw8a,qB,GAKbx8a,E,EAAak6a,qB,GAIbl6a,E,EAAay8a,U,GAIbz8a,E,EAAa+5a,c,GA4Bb/5a,E,EAAag6a,iB,GAIbh6a,E,EAAao6a,oB,KAhVdsC,cACAjlc,eAEAqmG,0BAAkC,CAC9B8mR,gBACAx6S,eACA26J,SAAUzjM,IACVgjM,cAAet4L,GAAc2jB,OAC7B+6L,WAAY,QACZ+6L,kBAAmB,EACvB,GAEA,YAAYrkE,EAAuB11d,EAAqC,CACpE,KAAKgxiB,cAAgBt7E,EACrB,KAAK3pX,eAAiB/rG,CAC1B,CAEA,IAAsBA,SAGpB,CACE,MAAO,CAAE,GAAG,KAAKoyM,eAAgB,GAAG,KAAKrmG,cAAe,CAC5D,CAEA,IAAcizP,YAA8B,CACxC,OAAO,KAAKh/V,QAAQg/V,UACxB,CAEA,IAAcrgL,UAAmB,CAC7B,OAAOq6S,GAAc,GAAI,KAAKh5d,QAAQk5d,YAAY,CACtD,CAEA,IAAsBguC,OAAsB,CACxC,OAAO,KAAKlngB,QAAQkngB,QAAA,GAAa,IAAIkmB,IAAa,IAAIuB,GAC1D,CAEA,IAAsB0hB,cAAuB,CACzC,OAAO,KAAKrwiB,QAAQq5U,WACxB,CAEA43N,uBAA+Bv7E,EAA2C,CACtE,GAAI,CAACA,EAAOvyS,WAAY,OACxB,IAAMk2J,EAAWzjL,KAAK/0J,IAAI,KAAKwviB,aAAc,KAC7C,OAAO,IAAIj3N,GAAS,CAChBhjQ,KAAMs/Y,EAAOvyS,WACbk2J,WACA16J,SAAUo6S,GAAc,KAAKp6S,SAAW,IACxCg6J,WAAY,CAChB,EACJ,CAEA,IAAqBqlN,aAAkC,CACnD,GAAM,CAAEt/W,WAAYwyX,GAAsB,KAAKlxiB,QAC/C,OAAO,KAAKgxiB,cAAc9+hB,IAAKwjd,IAE3B,IAAMh3S,GADmBg3S,EAAOy3D,eAAiB,IAAMnoY,SAChBksZ,EAEjCrC,EAAc,IAAI9V,GAAiB,CACrC3id,KAAMs/Y,EAAO7pT,MACbwtK,SAAU,KAAKg3N,aACf1xX,SAAU,KAAKA,SACfD,aACAsgL,WAAY,KAAKh/V,QAAQg/V,WACzBmuL,eAAgBz3D,EAAOy3D,eACvB2M,6BACIpkE,EAAOokE,6BACXC,kBAAmB,KAAK/5hB,QAAQ+5hB,iBACpC,GAEMgV,EAAqB,KAAKkC,uBAAuBv7E,GACjDy7E,EAAkBpC,GAAoBzwd,OAAS,EAC/Cy8c,EAAmBgU,IACEA,EAAmBh1e,OACxC,EAEN,MAAO,CACH,GAAG27Z,EACHm5E,cACAE,qBACAzwd,MAAOs3E,KAAKh1J,IAAIiuiB,EAAYvwd,MAAO6yd,GACnCp3e,OAAQ80e,EAAY90e,OAASghe,CACjC,CACJ,EACJ,CAEA,IAAsBsB,eAAwB,CAC1C,GAAM,CAAE2B,cAAc,IAAO,KAC7B,OAAOhtf,GAAMgtf,EAAY9rhB,IAAKm/B,GAAMA,EAAEitC,KAAK,IAAM,CACrD,CAQA,IAAcgyd,aAAsB,CAChC,OAAO,KAAKjU,kBAChB,CAEA,IAAc/9c,OAAgB,CAC1B,OAAO,KAAKkwd,oBACN,KAAK8B,YACL,KAAKjU,eACf,CAEA,IAAsBkU,SAA4B,CAC9C,IAAM7+c,EAAQ,KAAK1xF,QAAQ48gB,SAAA,GAAc,KAAK1V,MAAMx1a,MACpD,MAAO,CAACkkE,KAAK/0J,IAAI6wF,EAAM,GAAIA,EAAM,EAAE,EAAGkkE,KAAKh1J,IAAI8wF,EAAM,GAAIA,EAAM,EAAE,CAAC,CACtE,CAEA0/c,2BAAmC17E,EAAkC,CACjE,IAAMjla,EAAI,KAAKy2c,MAAM6f,MAAMrxD,EAAO27E,MAAM,EAClC14N,EAAa+8I,EAAOm5E,YAAYt1N,iBACtC,OAAQ,KAAKv5U,QAAQ44U,cAArB,CACI,KAAKt4L,GAAc2jB,OACf,OAAOxzG,EAAIila,EAAO37Z,OAAS,EAC/B,KAAKumF,GAAciU,IACf,OAAO9jG,EAAIkoR,EAAa,EAC5B,KAAKr4L,GAAc4gB,OACf,OAAOzwG,EAAIila,EAAO37Z,OAAS4+Q,EAAa,CAChD,CACJ,CAGA,IACY63N,qBAA2C,CACnD,GAAM,CAAEtpC,QAAOqpC,WAAY,KAGrB,CAACe,EAAYC,GAAchB,EAEjC,OAAO,KAAKvS,YAAY9rhB,IAAKwjd,IACzB,IAAM6zD,EAAc7zD,EAAO37Z,OACrBgmb,EAAarqB,EAAOp3Y,SAEpBkzd,EAAOtqC,EAAM6f,MAAMrxD,EAAO27E,MAAM,EAChClC,EAAa,IAAInxX,EACnByzX,EACAD,EAAO97E,EAAO37Z,OAAS,EACvBgmb,EACAwpC,GAIEmoB,EAAW,KAAKN,2BAA2B17E,GAC3Cjla,EAAImlG,KAAK/0J,IACX+0J,KAAKh1J,IAAI8wiB,EAAUJ,GACnBC,EAAahoB,GAEX3qW,EAAS,IAAIZ,EAAOyzX,EAAShhf,EAAGsvb,EAAYwpC,GAElD,MAAO,CACH,GAAG7zD,EACHjla,IACA+gf,OACArC,aACAvwX,SACA+yX,YAAa,EACbpzhB,MAAO,EACP2whB,YAAa,CACjB,CACJ,EACJ,CAEA,IAAcuB,2BAGZ,CACE,OAAO,IAAI1+hB,IAAI,KAAKy+hB,oBAAoBt+hB,IAAKm/B,GAAM,CAACA,EAAEskb,WAAYtkb,CAAE,GACxE,CAEA,IAAc2me,cAAoC,CAC9C,GAAM,CAAC45B,EAAYC,GAAc,KAAKtB,QAQhCr3P,EALeloQ,GACjB,KAAK4/f,oBACJ/kY,GAAUA,EAAM2lY,IAGiBt3B,EAAahogB,IAAKugR,GAAS,CAC7D,CAAE,GAAGA,CAAK,CACb,GAEGq/Q,EAEJ,EAAG,CACCA,EAAa,GACb,IAAK,IAAI7viB,EAAI,EAAGA,EAAIi3S,EAAOl4S,OAAS,EAAGiB,IAAK,CACxC,IAAM8viB,EAAW74P,EAAOj3S,GAClB+viB,EAAc94P,EAAOj3S,EAAI,GACzBgwiB,EAAYC,IAAYH,GACxBI,EAAeD,IAAYF,GACjC,GAAIC,EAAUxqB,WAAW0qB,GAAe,CACpC,IAAMC,EACFH,EAAU/wY,OACVixY,EAAa59Y,MAEX4wD,EACF8sV,EAAUl4e,SAEVo4e,EAAap4e,OACXuvb,EACF2oD,EAAU19Y,IACV69Y,GACKJ,EAAYhxiB,QACR+wiB,EAAS/wiB,OAASgxiB,EAAYhxiB,SACrCqxiB,EAAcz8Y,KAAKh1J,IAAIgxiB,EAAatoD,EAAS,GAC7CgpD,EAAiB18Y,KAAKh1J,IACxB0of,EAAUnkS,EAAY0sV,EACtB,GAEEU,EAAOjpD,EAAU+oD,EAAcC,EAC/BE,EAAW,CAAIT,KAAaC,IAAW,EAC7CS,IAAqBD,EAAUD,GAC/Br5P,EAAOv0L,OAAO1iH,EAAG,EAAGuwiB,GACpBV,EAAa,GACb,KACJ,CACJ,CACJ,OAASA,GAAc54P,EAAOl4S,OAAS,GAEvC,IAAK,IAAMi4H,KAASigL,EAAQ,CACxB,IAAIw5P,EAAe,EACfC,EAAW,EACf,IAAK,IAAMj9E,KAAUz8V,EAAO,CACxB,IAAM25a,EAAch9Y,KAAK90B,KACrB40V,EAAO92S,OAAOnuH,EAAIila,EAAOy5E,WAAW1+e,CACxC,EACIkif,IAAaC,IACbF,GAAgBE,GAEpBl9E,EAAOn3c,MAAQm0hB,EACfC,EAAWC,CACf,CACA,IAAMC,EAAW7hgB,GAAMioF,EAAM/mH,IAAKugR,GAASA,EAAKl0Q,KAAK,GAC/CwyhB,EAAW//f,GAAMioF,EAAM/mH,IAAKugR,GAASA,EAAKl0Q,KAAK,GACrD,IAAK,IAAMk0Q,KAAQx5J,EACfw5J,EAAKl0Q,OAASs0hB,EACdpgR,EAAKy8Q,YAAc6B,EAAW8B,EAAW,CAEjD,CAEA,OAAO35P,EAAO71I,KAAA,CAClB,CAEA,IAAsB4sY,0BAEN,CACZ,GAAK,KAAKjwiB,QAAQ8yiB,8BAClB,OAAOr6Y,GACH,KAAKz4J,QAAQ8yiB,8BAA8B5giB,IAAKyjd,GAC5C,KAAK86E,0BAA0B9xiB,IAAIg3d,IAG/C,CAEA,IAAsB0lE,iBAA0B,CAC5C,GAAM,CAACx6hB,EAAKD,GAAO,KAAK2viB,QACxB,OAAO36Y,KAAKqC,IAAIr3J,EAAMC,EAC1B,CAEA,IAAsB6viB,kBAAwC,CAC1D,OAAO,KAAKT,0BAA4B,KAAKO,mBACjD,CAEA,IAAsBG,iBAAmC,CACrD,OAAO,KAAK3wiB,QAAQ8yiB,8BACd9C,IACAG,GACV,CAEA,IAAcS,qBAA2C,CACrD,GAAM,CAAEJ,sBAAqBnV,mBAAoB,KAMjD,OAHoB8S,GAAcqC,CAC9BjyI,GAAe88H,EAAwBmV,EAEpCd,IACH,KAAKgB,iBACL,KAAKC,gBACLtV,EAER,CAEA,IAAcwV,oBAAmC,CAC7C,OAAO,KAAKD,oBAAoB1+hB,IAAKwjd,GAAWA,EAAOC,UAAU,CACrE,CAEA,IAAcm7E,qBAA8B,CACxC,OAAO3C,GAAc,KAAKyC,mBAAmB,CACjD,CAGA,IAAcpC,qBAA+B,CACzC,OAAO,KAAKx2B,aAAajgZ,KAAM29V,GAAWA,EAAOw5E,YAAc,EACnE,CAEA,IAAc6B,UAAmB,CAC7B,OAAO//f,GAAM,KAAKgne,aAAa9lgB,IAAKwjd,GAAWA,EAAOw5E,WAAW,IAAM,CAC3E,CAEA,IAAcb,cAAoC,CAC9C,IAAM5yO,EAAY,KAAKz7T,QAAQg/V,aAAe,QAAU,EAAI,GACtD+zM,EAAet3O,IACfu3O,EAAqBv3O,KAE3B,OAAO,KAAKu8M,aAAa9lgB,IAAKwjd,IAC1B,GAAM,CAAEp1d,KAAMo1d,EAAOy5E,WACfF,EAAsB,CACxBhwC,OAAQ3+f,EAAIyyiB,EACZ/D,KAAM1uiB,EAAI0yiB,EAAqBD,CACnC,EAEME,EAAQ,KAAKzE,oBACbS,EAAoBD,KAAO+D,EAC3BzyiB,EAAIyyiB,EACJG,EAAQx9E,EAAO92S,OAAOnuH,EAEtB2mS,EAAWs+H,EAAOt+H,UAAYm+K,EAASyf,QAE7C,MAAO,CACH,GAAGt/D,EACHo5E,YAAa,CAAExuiB,EAAG2yiB,EAAOxif,EAAGyif,CAAM,EAClCjE,sBACA73M,UACJ,CACJ,EACJ,CAEA,IAAck3M,iBAAuC,CACjD,OAAO,KAAKD,aAAa3kf,OAAQgsa,GAAWA,EAAOq5E,kBAAkB,CACzE,CAEA,IAAcL,oBAA8B,CACxC,OAAO,KAAKJ,gBAAgBttiB,OAAS,CACzC,CACJ,EAEA,SAASkxiB,IAAYj5a,EAAA,CACjB,IAAM33B,EAAQ23B,EAAM,GACdv5D,EAAOu5D,EAAMA,EAAMj4H,OAAS,GAC5B+4D,EAAS2F,EAAKk/G,OAAO1d,OAAS5/D,EAAMs9E,OAAOrqB,IAC3Cj2E,EAAQs3E,KAAKh1J,IAAI0gG,EAAMs9E,OAAOtgG,MAAO5e,EAAKk/G,OAAOtgG,KAAK,EAC5D,OAAO,IAAI0/F,EAAO18E,EAAMs9E,OAAOt+K,EAAGghG,EAAMs9E,OAAOnuH,EAAG6tB,EAAOvkB,EAC7D,CAEA,SAAS04e,IACLx5a,EACAxoE,EAAA,CAEA,IAAI0if,EAAW1if,EAMf,OALAwoE,EAAMjmH,QAASy/Q,IACXA,EAAK7zG,OAAS6zG,EAAK7zG,OAAOlgL,IAAI,CAAE+xD,EAAG0if,CAAS,GAC5C1gR,EAAKk/Q,aAAe,EACpBwB,GAAY1gR,EAAK7zG,OAAO7kH,QAC5B,GACOk/D,CACX,C,80GCpXsCukF,cAAMpoG,U,IAArC,cAA+BooG,I,+BADrC5zH,CACqC4zH,mB,CAClC,IAAY85T,YAA6B,CACrC,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAAYr0gB,QAAqC,CAC7C,OAAO,KAAKwC,MAAM2tiB,aAAanwiB,QAAU+hJ,MAC7C,CAEA,IAAY0wU,QAAkC,CAC1C,GAAM,CAAEzyd,UAAW,KAMnB,OALKA,EAGW8O,IAAI0iH,QAAQ,KAAKhvH,MAAMiwd,OAASxkb,GAAMA,EAAEykb,UAEjD09E,EACFrrhB,OAAA,EACA9V,IACI8pT,GAEGA,EAAShlK,KAAM0+T,GACXA,EAAOl7T,OAAOxD,KAAM/C,GAAUA,EAAM3zJ,IAAM2C,EAAO+mC,IAAI,IAIzDgyR,EAAShlK,KAAM0+T,IACX,GAAM,CAACupC,EAAQ+vC,GAAQv0a,GACnBi7V,EAAOl7T,QACN,CAAEl6J,OAAQA,GAEf,OACI0wC,GAAWiud,IACXjud,GAAWg+f,IACX/vC,EAASh8f,EAAO+mC,MAChB/mC,EAAO+mC,KAAOglgB,CAEtB,IAEPtlf,OAAQgsa,GAAWA,IAAW1wU,QAC9BqhI,QAAA,EA7Be,EA8BxB,CAEA,IAAYitR,oBAA8B,CACtC,OAAO,KAAK59E,OAAO39V,KAAM29V,GAAWA,EAAOx/I,YAAY,CAC3D,CAEA,IAAYgkM,cAAwC,CAChD,GAAM,CAAEj3gB,SAAQyyd,UAAW,KAG3B,OAFKzyd,EAEE+tC,GAAS0kb,EAASA,IACrB,IAAMn8d,EAAQm8d,EAAOl7T,OAAOxD,KAAM/C,GAAUA,EAAM3zJ,IAAM2C,EAAO+mC,IAAI,EACnE,OAAOzwC,IAAUyrJ,OAAuBpP,IAAX,CAACr8I,EAAMk3D,CACxC,GALoB,EAMxB,CAEA,IAAY8if,kBAA2C,CACnD,GAAK,KAAKD,mBAEV,MAAO,CAAEtqR,KAAM8wM,GAAkByF,QAASnpZ,KAAM,gBAAiB,CACrE,CAEA,IAAYo9d,gBAAyC,CACjD,GAAM,CAAE36B,gBAAiB,KAAKvB,WAE9B,GAAKuB,EAAazrE,2BAElB,MAAO,CACHpkL,KAAM8wM,GAAkBwF,KACxBlpZ,KAAM6mZ,GAA0B,CAC5B47C,EAAaxoW,qBAChB,EACL,CACJ,CAEA,IAAY44L,QAAuB,CAC/B,OAAOxwM,GAAiB,CAAC,KAAK86Y,iBAAkB,KAAKC,cAAe,EACxE,CAEA,IAAYpqZ,OAAgB,CACxB,GAAM,CAAEnmJ,UAAW,KAEnB,OADKA,EACE,KAAKq0gB,WAAWuB,aAAa/oE,WAAW7sc,EAAO+mC,IAAI,EADtC,EAExB,CAEA,IAAY40b,iBAA0B,CAClC,OAAO,KAAKn5d,MAAMguiB,WAAa,IAAI,KAAKhuiB,MAAMguiB,WAAW,GAAK,EAClE,CAEA,IAAY9pZ,UAA+B,CACvC,GAAM,CAAE28W,iBAAgBnse,aAAc,KAAKm9e,WAAWplb,QAChD,CAAE2mb,gBAAiB,KAAKvB,WAE9B,OAAOhR,GAAkBnse,EACnB,kBAAkB0+e,EAAa/oE,WAAW31a,KAC1C0+e,EAAaxrE,WACvB,CAEA,IAAYwxB,gBAAiD,CACzD,OAAO,KAAKl1U,WAAa,KAAK2tX,WAAWuB,aAAaxrE,YAChD,OACAroT,MACV,CAEA,IAAYqY,SAAwB,CAChC,GAAM,CAAEw7W,eAAcC,cAAaG,iBAAkB,KAAK3B,WAEpDj6W,EAAU,CAACw7W,CAAY,EAI7B,OAHII,GAAiBH,EAAYvwX,OAASswX,EAAatwX,MACnD8U,EAAQr7J,KAAK82gB,GAEVz7W,CACX,CAEAq2Y,kBACIh+E,EACiC,CACjC,GAAM,CAAEzyd,UAAW,KAEb,CAAE0yd,aAAY1tB,cAAa/xH,aAAcumJ,GAAY/G,EACrDvyS,EAAa4zV,GACf,KAAKO,WAAWN,eAChBrhD,GAGE1hU,EAAQyhU,EAAOl7T,OAAOxD,KAAM/C,GAAUA,EAAM3zJ,IAAM2C,EAAQ+mC,IAAI,EAE9Dwyb,EACF9G,EAAOt+H,WAAam+K,EAAS4f,OAASlhY,IAAUjP,OAepD,MAAO,CACHjqJ,KAAMktc,EACN9kR,aACA84S,QAVazyQ,MANH,KAAK8tT,WAAW2B,cACxBziO,GACI,KAAK8gO,WAAWyC,mBAAmB9lX,GAAOqmX,aAE9C5kD,EAAOlsQ,MAEWpkD,QADRo3T,EAAUt6B,GAAwB,CAW9C+5B,EACAO,UACAC,UACAz0c,OAXWywI,GAAiB,CAC5BxE,GAAOxjG,EACPwjG,GAAOqmX,UACV,CAQGtyf,CACJ,CACJ,CAEAgvL,QAA6C,CACzC,GAAM,CAAE/zM,UAAW,KACb,CAAEikF,WAAUysd,UAAW,KAAKluiB,MAAM2tiB,aAIxC,OAFKnwiB,GAGD0+M,SAACi6O,GAAD,CACI1hc,GAAI,KAAKuL,MAAMvL,GACfsle,eAAgB,KAAK83C,WAAWplb,QAChC5xF,EAAG4mF,EAAS5mF,EACZmwD,EAAGy2B,EAASz2B,EACZkhC,MAAO,CAAE0nP,SAAU,OAAQ,EAC3BqlJ,iBAAiB,OACjB73R,QAAS,GACTD,QAAS,IACTx9C,MAAO,KAAKA,MACZw1U,gBAAiB,KAAKA,gBACtBj1U,SAAU,KAAKA,SACfk1U,eAAgB,KAAKA,eACrB51H,OAAQ,KAAKA,OACb61H,SAAU60E,EACVtmD,QAAS,KAAK5nf,MAAMmuiB,eAEpBj9b,UAAAgrG,SAACi6Q,GAAD,CACIv+T,QAAS+/T,GAAsB,KAAK//T,OAAO,EAC3CD,KAAM,KAAK88W,aAAahogB,IAAKwjd,GACzB,KAAKg+E,kBAAkBh+E,GAE9B,EACI,GA1BO,IA4BxB,C,aACJ,GCnNA,SAAgBm+E,GACZ,EACA,EACW,CACX,OAAO,IAAI,IAAI7kO,EAAK,IAAK,GAAQ,CAACzkC,EAAKz2P,EAAQy2P,CAAG,CAAC,CAAC,CAAC,CACzD,CAiCA,SAAgBupQ,GACZ,EACA,EACe,CACf,IAAM19d,EAAO29d,GAAa,KAC1B,MAAO,CACH,MAAO3sQ,GACP,GAAGhxN,GAAM,QACT,GAAGA,IAAOghR,GAAYm+K,EAAS,QACnC,CACJ,CAGA,SAAgBy+B,GACZ,EACA,EACA,EACiB,CACjB,IAAMzvN,EAASwvN,GAAa,OAC5B,MAAO,CACH,GAAGE,EACH,GAAG1vN,GAAQ,QACX,GAAGA,IAAS6S,GAAYm+K,EAAS,QACrC,CACJ,CC1EA,IAAa2+B,IAA6B,OAC7BC,IAAmC,GAKnCC,IAA+B,GAK/BC,IAAmB,KCkBhC,SAAgBC,GACZ7uiB,EAAA,CAEA,GAAM,CACF1G,QACAuB,IACAmwD,IACA6hT,cAAc,GACdyhM,cACAQ,cACAp0C,eACAO,cACAjmT,gBACAh1M,EACE,CACF+uiB,gBACAC,YACAC,iBACA36e,SACAqvF,QACAurZ,iBACA51iB,EAEE61iB,EAActiM,GAAe,CAAC,CAACouJ,EACrCroB,GACIu8D,EAAcn6V,EAAez1D,QAGjC,IAAM6vZ,EACFd,GAAa39d,MAAM0+d,SAAStrV,cAE1BurV,EAAUtkf,EAAIsJ,EAEdi7e,EAAkBzqQ,GACpBypQ,GAAyBD,EAAaQ,GAAa51iB,IAAI4rS,GAAM,CACzDhnR,KAAMgnR,EAAI/gF,MACVu/E,OAAQmrQ,IACRlrQ,YAAamrQ,GACjB,GAEErK,EACDv/P,GACAxpR,IACOA,EAAM+pE,cAAgB,UAE1Bq1a,IAAe51N,GACfm2N,IAAcn2N,GAClB,EAEEo/P,EAAkB5ohB,IAChBA,EAAM+pE,cAAgB,SAE1B2vH,KACJ,EAEMwmL,EACD12F,GACAxpR,IACOA,EAAM+pE,cAAgB,UACtBq1a,IAAe51N,GACfm2N,IAAcn2N,GAEtB,EAEE0qQ,GACFC,EACAC,EAAqB,MAErB,IAAM5qQ,EAAM2qQ,EAAc3qQ,IACpB54M,EAAQqjd,EAAezqQ,GACvBhnR,EAAOgnR,EAAI6qQ,eACX,QAAQ7qQ,EAAI6qQ,eAAe,GAC3Bzjd,EAAMpuE,KAENoxS,EAAW,CACbr0T,EAAGA,EAAI40iB,EAAc50iB,EACrBmwD,EAAGskf,EAAUN,EACbn2d,MAAO42d,EAAc52d,MACrBvkB,OAAQ06e,EACRh/N,WAAYkB,GAAapsC,GAAOA,EAAI9kS,MAAMgwU,WAAa,GACvDC,YAAaiB,GAAapsC,GAAOA,EAAI9kS,MAAMiwU,YAAc,EAC7D,EAEA,OACItsC,YAAOkyC,SAAP,CAAA3kO,SAAA,EAOIgrG,SAAC0zV,IAAD,CACI,GAAI1gP,EACJpxS,KAAM4xhB,EAAqB,OAAS5xhB,EACpCwlR,OAAQp3M,EAAMo3M,OACdC,YAAar3M,EAAMq3M,YACnB5jI,QAASzzE,EAAMyzE,QACf6mY,cAAekJ,EAAqB,OAASnwZ,MAChD,GACAulJ,EAAI+qQ,mBAAqB,CAACH,IACvBxzV,SAAC0zV,IAAD,CACI,GAAI1gP,EACJpxS,KAAM,QAAQgnR,EAAI+qQ,kBAAkB,GACpClwY,QAASzzE,EAAMyzE,QACf6mY,cAAc,MACjB,EAEO,GArBRkJ,EACM,aAAaD,EAAc50iB,IAC3B40iB,EAAc50iB,CAmBZ,CAExB,EAEA,OACI8oS,UAAC,IAAD,CACIlvS,GAAI+6J,EAAY,wBAChBzyI,UAAU,qBACVsuW,cAAgB/vW,GAAUA,EAAM0nY,gBAAA,EAHpC9xS,SAAA,EAKIgrG,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,SACdt+C,SAAA69b,EAActiiB,KAAK25J,EAAO9qK,KACvB,IAAM4wF,EAAQqjd,EAAenpY,EAAM0+H,GAAG,EACtC,OACI5oF,SAAC,OAAD,CAEIznN,GAAI+6J,EAAY4W,EAAMz1F,IAAI,EAC1B8nG,GAAI7jB,EACA/5J,EAAIurK,EAAM+S,OAAOt+K,EAAIurK,EAAM+S,OAAOtgG,MAAQ,GAE9CggG,GAAIjkB,EAAY06Y,EAAUN,GAC1Bp2X,GAAIhkB,EACA/5J,EAAIurK,EAAM+S,OAAOt+K,EAAIurK,EAAM+S,OAAOtgG,MAAQ,GAE9CigG,GAAIlkB,EACA06Y,EAAUlpY,EAAM+S,OAAOnuH,EAAIo7G,EAAM+S,OAAO7kH,MAC5C,EAGAgvO,OACIl9H,EAAM0pY,QAAU5jd,EAAMo3M,OAChByN,GAAmB7kN,EAAMo3M,MAAM,EAC/Bp3M,EAAMo3M,OAEhBC,YAAar3M,EAAMq3M,WACtB,EApBQjoS,EAsBjB,EACD,IACHqoS,UAAC,IAAD,CAAGlvS,GAAI+6J,EAAY,YAAnBt+C,SAAA,CACK+9b,EAAexiiB,IAAKgjiB,GACjBD,EAAUC,IAQbR,EACIhrf,OACIwrf,GACGX,GAAa51iB,IAAIu2iB,EAAc3qQ,GAAG,IAClCgrO,EAAS2f,WACjB,EACChjhB,IAAKgjiB,GAAkBD,EAAUC,EAAe,IACtD,C,IACHvzV,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,UACdt+C,SAAA69b,EAActiiB,KAAK25J,EAAO9qK,KACvB,IAAM4wF,EAAQmid,GACVC,EACAQ,GAAa51iB,IAAIktK,EAAM0+H,GAAG,GAE9B,OACI5oF,SAAC,OAAD,CAEIrhN,EAAG+5J,EAAY/5J,EAAIurK,EAAM+S,OAAOt+K,CAAC,EACjCmwD,EAAG4pG,EAAY06Y,EAAUlpY,EAAM+S,OAAOnuH,CAAC,EAIvC6jP,GAAItwI,GAAY1jB,GAAc4gB,MAAM,EACpCyd,SAAU9S,EAAM8S,SAChBhtF,MAAO,CAAEpuE,KAAMouE,EAAM63H,MAAO,GAAG73H,CAAM,EAEpCglB,SAAAk1D,EAAMz1F,IACL,EAXGr1E,EAajB,EACD,GACF6ziB,IACGjzV,SAAC,IAAD,CAAG,cAAY,OACVhrG,SAAA+9b,EAAexiiB,KAAKgjiB,EAAen0iB,KAChC4gN,SAAC,OAAD,CAEIrhN,EAAG+5J,EAAY/5J,EAAI40iB,EAAc50iB,CAAC,EAClCmwD,EAAG4pG,EAAY5pG,GACf6tB,MAAO+7E,EAAY66Y,EAAc52d,KAAK,EACtCvkB,OAAQsgG,EAAYtgG,GACpBx2C,KAAK,cACL0ohB,cAAc,MACdnC,eAAgBA,EAAeoL,EAAc3qQ,GAAG,EAChCo/P,iBAChB1oK,YAAaA,EAAYi0K,EAAc3qQ,GAAG,CAC7C,EAVQxpS,GAYd,GAENqoJ,GAASurZ,IACNhzV,SAAC64H,GAAD,CACI9B,SAAUtvL,EACV9oJ,EAAGA,EAAIq0iB,EAAcr0iB,EACrBmwD,EAAGA,EAAIkkf,EAAclkf,EACrBltC,KAAMsxhB,CACT,EAEN,C,EAEX,CAWA,IAAMQ,IAAkB5viB,IACpB,GAAM,CAAEgwU,aAAYC,cAAap1U,IAAGmwD,IAAG6tB,QAAOvkB,SAAQ,GAAGy7e,GAAc/viB,EACvE,GAAIiwU,EAAa,CACb,IACM3kR,EAAIutB,EAAQ7+D,EACZ4xB,EAAIizH,IAAoB;gBACtBjK,EAAY/5J,GAAG,IAAI+5J,EAAY5pG;gBAC/B4pG,EAAYtpG,GAAG;gBACfspG,EAAY56I,GAAG,IAAI46I,EAAYtgG,EAAS;gBACxCsgG,EAAY,EAAC56I,EAAG,IAAI46I,EAAYtgG,EAAS;gBACzCsgG,EAAY,CAACtpG,GAAG;;SAEvB,EACD,OAAO4wJ,SAAC,OAAD,CAAStwK,IAAG,GAAImkgB,CAAY,EACvC,CAAO,GAAI//N,EAAY,CACnB,IACM1kR,EAAIutB,EAAQ7+D,EACZ4xB,EAAIizH,IAAoB;gBACtBjK,EAAY/5J,EAAImf,GAAG,IAAI46I,EAAY5pG;gBACnC4pG,EAAYtpG,GAAG;mBACZspG,EAAYtgG;gBACfsgG,EAAY,CAACtpG,GAAG;gBAChBspG,EAAY,EAAC56I,EAAG,IAAI46I,EAAY,CAACtgG,EAAS;;SAEjD,EACD,OAAO4nJ,SAAC,OAAD,CAAStwK,IAAG,GAAImkgB,CAAY,EACvC,CACI,OACI7zV,SAAC,OAAD,CACIrhN,EAAG+5J,EAAY/5J,GACfmwD,EAAG4pG,EAAY5pG,GACf6tB,MAAO+7E,EAAY/7E,GACnBvkB,OAAQsgG,EAAYtgG,GACpB,GAAIy7e,CACP,EAGb,E,s1GCtQaC,GAAb,KAAaA,C,gCAYRnhb,E,EAAqB4kW,c,GAIrB5kW,E,EAAqBuM,O,GAIrBvM,E,EAAqB2xa,U,GAIrB3xa,E,EAAqBohb,a,GAIrBphb,E,EAAqBqhb,a,GAIrBrhb,E,EAAamgb,W,GAIbngb,E,EAAqB60Z,c,GAIrB70Z,E,EAAqBshb,Y,GAiBrBthb,E,EAAqBuhb,uB,GA4BrBvhb,E,EAAqBwhb,mB,GAmBrBxhb,E,EAAah2C,O,GASbg2C,E,EAAqByhb,uB,GAMrBzhb,E,EAAqB0hb,S,GAYrB1hb,E,EAAaogb,gB,GAsCbpgb,E,EAAqB2hb,e,GAIrB3hb,E,EAAa80B,O,GAab90B,E,EAAqB4hb,Y,GAIrB5hb,E,EAAakgb,e,GAmGblgb,E,EAAav6D,Q,GAObu6D,E,EAAaqgb,e,KAvSd3lO,KACAhvU,QAEA,YACIgvU,EACAhvU,EACF,C,UACE,KAAKgvU,KAAOA,EACZ,KAAKhvU,QAAUA,CACnB,CAEA,IAAsBk5d,cAAuB,CACzC,OAAO,KAAKl5d,QAAQk5d,gBACxB,CAEA,IAAsBr4V,OAAyB,CAC3C,OAAO,KAAK7gI,QAAQ6gI,OAASuf,GAAgBhmB,MACjD,CAEA,IAAsB6ra,UAAmB,CACrC,OAAO,KAAKjmiB,QAAQimiB,WACxB,CAEA,IAAsByP,aAA+B,CACjD,OAAO,KAAK1mO,KAAKtlR,OAAQ6gP,GAAQ,CAACA,EAAI9uD,QAAQ,CAClD,CAEA,IAAsBk6T,aAA4B,CAC9C,OAAO,KAAKD,YAAYhsf,OAAOitR,GACnC,CAEA,IAAc89N,WAAoB,CAC9B,OAAO,KAAKz0iB,QAAQy0iB,aACxB,CAEA,IAAsBtrB,cAAuB,CACzC,OAAOnwD,GAAc,GAAI,KAAKE,YAAY,CAC9C,CAEA,IAAsB08E,YAAqB,CACvC,OAAOhgZ,KAAKr+B,MAAM,KAAK2hW,aAAe,MAC1C,CAEAi9E,kBAA0BtqY,EAAuB,CAC7C,OAAOmS,EAAOo6J,QAAQvsK,EAAO,CACzB8S,SAAU,KAAKwqW,YACnB,GAAG7qc,KACP,CAEA83d,uBAA+B7rQ,EAA4B,CACvD,OAAO30I,KAAKh1J,IACR,KAAKu1iB,kBAAkB5rQ,EAAIn0N,IAAI,IAC/Bige,CAER,CAEA,IAAsBR,uBAAgC,CAClD,GAAM,CAAEH,cAAaE,cAAe,KAMpC,OAAO5kgB,GALQ0kgB,EAAYxjiB,IAAKq4R,GAC5BmsC,GAAiBnsC,IAAQ,CAACA,EAAI9uD,SACxB,KAAK26T,uBAAuB7rQ,GAAOqrQ,EACnC,CAEGn1W,EACjB,CAEA61W,wBAAgC/rQ,EAAyB,CAYjD,OAXAA,EAAIn0N,KACmB,KAAK+/d,kBAAkB5rQ,EAAIn0N,IAC3Cmge,IAEqBvlgB,GACxB,CAACu5P,EAAIisQ,QAASjsQ,EAAIksQ,OAAQ,EAACvkiB,IACtBkkE,GAEG,KAAK+/d,kBAAkB//d,GAAQ,EAGpCsge,IAEf,CAIA,IAAsBZ,mBAA4B,CAC9C,IAAMa,EAAW,KAAKhB,YAAY30iB,OAC5B41iB,EAAoB,KAAKjB,YAAYzjiB,IAAKq4R,IAAS,CACrDssQ,WAAY,KAAKP,wBAAwB/rQ,EAC7C,IAKMusQ,EAAc,KAAK59E,aAAem7E,IAClC0C,EACF/lgB,GACI4lgB,EAAkB1kiB,KAAK,CAAE2kiB,gBACrBjhZ,KAAKh1J,IAAIi2iB,EAAYC,MAExB,EACT,OAAOlhZ,KAAKr+B,MAAMw/a,EAAcJ,EACpC,CAEA,IAAcr4d,OAAgB,CAC1B,OAAOs3E,KAAK/0J,IACR,KAAKb,QAAQq5U,SACb,KAAK68N,WACD,KAAKL,sBACL,KAAKC,iBACb,CACJ,CAEA,IAAsBC,uBAAgC,CAClD,OAAO,KAAKz3d,MAAQ,KAAKu3d,sBAAwB,KAAKK,UAC1D,CAIA,IAAsBF,SAAkB,CACpC,GAAM,CAAE13d,QAAOuiD,SAAU,KACnBm2a,EAAY,KAAKh3iB,QAAQq5U,SAAW/6P,EAMtC,OALAuiD,IAAUuf,GAAgBhmB,OACnB48a,EAAY,EACZn2a,IAAUuf,GAAgBjmB,MAC1B68a,EAEA,CAEf,CAEA,IAActC,gBAAkC,CAC5C,GAAM,CACFqB,wBACAL,cACAC,cACAO,aACAF,WACA,KAEAiB,EAAWjB,EAAUE,EACrBgB,EAEJ,OAAOxB,EAAYxjiB,KAAKq4R,EAAKxpS,KACzB,IAAMu0U,EAAUv0U,IAAU,EACtBu9E,EAAgB,KAAK83d,uBAAuB7rQ,GAC5CyyC,EAAqB1H,EAAU,EAAI,KAAKsgO,WAExCj/N,GAAapsC,KACbjsN,EAAQy3d,EAAwBJ,EAAY30iB,OAGxCk2iB,GAAWvgO,GAAaugO,KACxBl6N,EAAa,IAIrB,IAAM18U,EAAI22iB,EAAWj6N,EAIrB,MAHAi6N,GAAW32iB,EAAIg+E,EACf44d,EAAU3sQ,EAEH,CACHjqS,IACAg+E,QACAisN,KACJ,CACJ,EACJ,CAEA,IAAsB0rQ,eAAwB,CAC1C,OAAOj9E,GAAc,GAAI,KAAKE,YAAY,CAC9C,CAEA,IAAc9vU,OAA8B,CACxC,GAAM,CAAEA,SAAU,KAAKppJ,QACvB,OAAOopJ,EACD,IAAIgwL,GAAS,CACThjQ,KAAMgzE,EACNu1B,SAAU,KAAKs3X,cACfv3X,WAAY,IACZ26J,SAAU,KAAKr5U,QAAQq5U,SAAW,EAClCV,WAAY,CAChB,GACA3zL,MACV,CAEA,IAAsBkxZ,YAAqB,CACvC,OAAO,KAAK9sZ,MAAQ,KAAKA,MAAM9qE,MAAQ,KAAKs3d,WAAa,CAC7D,CAEA,IAAcpB,eAAgC,CAC1C,GAAM,CAAEC,YAAWC,iBAAgBvrB,gBAAiB,KAE9CguB,GACF5sQ,EACA6sQ,EACAhhe,KAEA,IAAMw5c,EAAc5xW,EAAOo6J,QAAQhiQ,EAAM,CAAEuoG,SAAUwqW,CAAa,GAC5D7ohB,EACFiqS,EAAIjqS,GACH82iB,IAAa,MAAQ,EAAI7sQ,EAAIjsN,OAC9Bsxc,EAAYtxc,MAAQ,EAClB7tB,EAAI,CAACgkf,EAAY7kB,EAAY71d,OAAS,KAAKkse,SAEjD,MAAO,CACG7vd,OACNuoG,SAAUwqW,EACVvqW,OAAQgxW,EAAYlxhB,IAAI,CAAK4B,IAAMmwD,GAAE,GACrC0sW,OAAQ,GACRo4I,OAAQ,GACRhrQ,IAAKA,EAAIA,GACb,CACJ,EAEM8sQ,EAAkB9sQ,IACpB,IAAMqlP,EAAc5xW,EAAOo6J,QAAQ7tC,EAAIA,IAAIn0N,KAAM,CAC7CuoG,SAAUwqW,CACd,GACM7ohB,EAAIiqS,EAAIjqS,EAAIiqS,EAAIjsN,MAAQ,EAAIsxc,EAAYtxc,MAAQ,EAChD7tB,EAAI,CAACgkf,EAAY7kB,EAAY71d,OAAS,KAAKkse,SAEjD,MAAO,CACH7vd,KAAMm0N,EAAIA,IAAIn0N,KACduoG,SAAUwqW,EACVvqW,OAAQgxW,EAAYlxhB,IAAI,CAAK4B,IAAMmwD,GAAE,GACrC49B,SAAU,GACV8uU,OAAQ,GACRo4I,OAAQ,GACRhrQ,IAAKA,EAAIA,GACb,CACJ,EAEIgqC,EAAyB,GAC7B,IAAK,IAAMhqC,KAAOmqQ,EACVnqQ,EAAIA,IAAIn0N,KAAMm+P,EAAOvyU,KAAKq1iB,EAAe9sQ,IACpCosC,GAAapsC,EAAIA,GAAG,IACrBA,EAAIA,IAAIisQ,SACRjiO,EAAOvyU,KAAKm1iB,EAAkB5sQ,EAAK,MAAOA,EAAIA,IAAIisQ,OAAO,GACzDjsQ,IAAQzxI,GAAO47Y,IAAmBnqQ,EAAIA,IAAIksQ,SAC1CliO,EAAOvyU,KAAKm1iB,EAAkB5sQ,EAAK,MAAOA,EAAIA,IAAIksQ,OAAO,IAIrE,IAAK,IAAI11iB,EAAQ,EAAGA,EAAQwzU,EAAOvzU,OAAQD,IAAS,CAChD,IAAMwtU,EAAKgG,EAAOxzU,GAClB,GAAIwtU,GAAG4uF,OAEP,IAAK,IAAIxiS,EAAI55H,EAAQ,EAAG45H,EAAI45M,EAAOvzU,OAAQ25H,IAAK,CAC5C,IAAM63B,EAAK+hL,EAAO55M,IAEd4zM,EAAG3vJ,OAAOzkD,QACNq4B,EAAGosB,OAAO04X,SACb9kZ,EAAGosB,OAAO7kD,OACPw0M,EAAG3vJ,OAAO04X,SACV,CAAC9kZ,EAAGnkE,YAERmkE,EAAG2qQ,OAAS,GACpB,CACJ,CAEA5oF,EAASA,EAAO7qR,OAAQmiH,GAAU,CAACA,EAAMsxP,MAAM,EAG/C,IAAIo6I,EAAa,GACjB,IAAK,IAAIx2iB,EAAQ,EAAGA,EAAQwzU,EAAOvzU,OAAQD,IAAS,CAChD,IAAMwtU,EAAKgG,EAAOxzU,EAAQ,GACtByxJ,EAAK+hL,EAAOxzU,GAChB,GAAIwtU,EAAG3vJ,OAAOzkD,QAAiCq4B,EAAGosB,OAAO7kD,KAAM,CAC3Dw9a,EAAa,GACb,KACJ,CACJ,CAEA,GAAIA,EACA,IAAK,IAAIx2iB,EAAQ,EAAGA,EAAQwzU,EAAOvzU,OAAQD,IAAS,CAChD,IAAM8qK,EAAQ0oK,EAAOxzU,GACjBA,EAAQ,GAAM,IACd8qK,EAAM+S,OAAS/S,EAAM+S,OAAOlgL,IAAI,CAC5B+xD,EAAGo7G,EAAM+S,OAAOnuH,EAAIo7G,EAAM+S,OAAO7kH,OAAS,CAC9C,GACA8xG,EAAM0pY,OAAS,GAEvB,CAGJ,OAAOhhO,CACX,CAEA,IAAcx6Q,QAAiB,CAC3B,OAAO67F,KAAKqC,IACRjnH,GAAM,KAAKwjgB,cAActiiB,IAAK25J,GAAUA,EAAM+S,OAAOnuH,CAAC,IAAM,EAEpE,CAGA,IAAckkf,eAAsD,CAChE,GAAK,KAAKvrZ,MACV,MAAO,CACH9oJ,EAAG,KAAK01iB,QACRvlf,EAEI,KAAKsJ,OAAS,KAAKqvF,MAAMrvF,OAAS,KAAKk8e,cAAgB,EAC/D,CACJ,CACJ,EC3TA,SAAgBuB,IAA2B,CACvC9lG,QACA28F,eACAj3B,WACAE,aACAmgC,aAAA,CAEA,GAAM,CAAElgC,iBAAgBC,gBAAiBJ,EAIzC,OAFI1lE,EAAM1wc,SAAW,EAAU,MAG3B2gN,SAAA+4H,WAAA,CAAA/jO,SACK+6V,EAAMx/b,IAAK83B,IACRo/P,UAAC,IAAD,CAAG5mR,UAAU,iBAAbm0F,SAAA,EACIgrG,SAAC,OAAD,CACIzjC,GAAI7jB,EAAYk9W,EAAewP,MAAM/8e,IACrCs0I,GAAIjkB,EAAYm9W,EAAa9lb,MAAM,EAAE,EACrC2sF,GAAIhkB,EAAYk9W,EAAewP,MAAM/8e,IACrCu0I,GAAIlkB,EAAYm9W,EAAa9lb,MAAM,EAAE,EACrCq3M,OAAO,sBACV,GACAslQ,EAAan8hB,KAAKwjd,EAAQ30d,KACvB,IAAMkzJ,EAAQyhU,EAAOl7T,OAAOxD,KACvB/C,GAAUA,EAAM3zJ,IAAM0pC,GAE3B,GAAI,CAACiqH,GAASyhU,EAAOgB,MAAMC,WAAY,OAAO,KAE9C,IAAM+gF,EAAapgC,EAAW2B,cACxBziO,GACI8gO,EAAWyC,mBACP9lX,EAAMqmX,UACV,GAEJ5kD,EAAOlsQ,MACPpkD,EACFswT,EAAOt+H,WAAam+K,EAAS4f,MACvBjzF,GACA,EAEV,OACIvgP,SAAC,SAAD,CAEI3hC,GAAI3lB,EAAYk9W,EAAewP,MAAM9yX,EAAM3zJ,CAAC,GAC5C2/K,GAAI5lB,EAAYm9W,EAAauP,MAAM9yX,EAAMxjG,CAAC,GAC1CL,EAAGiqG,EAAYo9Y,GACfl0hB,KAAMm0hB,EACNC,YAAavyY,EACb2jI,OAAQ5B,GACR6B,YAAa,EAChB,EARQysL,IAAaC,EAAQ30d,GAUtC,EACD,CAvCgC,EAAAipC,GAyCzC,EAEV,C,80GCiBwCwzK,eAzExC,SAASo6V,IAAYn4hB,EAAUC,EAAA,CAC3B,MAAO,CACHpf,GAAImf,EAAEnf,EAAIof,EAAEpf,GAAK,EACjBmwD,GAAIhxC,EAAEgxC,EAAI/wC,EAAE+wC,GAAK,CACrB,CACJ,CAEA,SAASonf,GAAQ5jZ,EAAA,CACb,MAAO,CACH3zJ,EAAG2zJ,EAAM3zJ,EACTmwD,EAAGwjG,EAAMxjG,CACb,CACJ,CAEA,SAAgBqnf,IACZt9Y,EAAA,CAEA,IAAMwhK,EAAsB,GAsB5B,OArBAxhK,EAAOxnJ,QAAS+kiB,IACZ,IAAMC,EAAiBl/Y,GAAOkjK,GAC9B,GAAIg8O,IAAmBhzZ,OACnBg3K,EAASh6T,KAAK,CACVw4J,OAAQ,CAACq9Y,GAAQE,EAAa,EAC9BvuV,MAAOuuV,EAAavuV,KACxB,QACG,GAAIwuV,EAAexuV,QAAUuuV,EAAavuV,MAC7CwuV,EAAex9Y,OAAOx4J,KAAK61iB,GAAQE,QAChC,CACH,IAAM7J,EAAW0J,IACb9+Y,GAAOk/Y,EAAex9Y,MAAM,EAC5Bu9Y,GAEJC,EAAex9Y,OAAOx4J,KAAKksiB,GAC3BlyO,EAASh6T,KAAK,CACVw4J,OAAQ,CAAC0zY,EAAU2J,GAAQE,EAAa,EACxCvuV,MAAOuuV,EAAavuV,KACxB,EACJ,CACJ,GACOwyG,CACX,CAEA,SAASi8O,IAAYz9Y,EAAA,CACjB,OAAOA,EACFtoJ,IAAKyN,GAAM,GAAG06I,EAAY16I,EAAErf,CAAC,EAAE,GAAG+5J,EAAY16I,EAAE8wC,CAAC,GAAG,EACpD7wD,KAAK,IACd,CA2BwC49M,KAAMpoG,U,QAAvC,cAAiCooG,G,uCADvC5zH,C,IAOI0qC,E,EAAa0nM,U,CANsBx+G,e,CACpC,YAAY/3M,EAAgC,CACxC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAc8kI,UAAsB,CAChC,OAAO87O,IAAsB,KAAKryiB,MAAM+0J,MAAM,CAClD,CAEAw8C,QAAsC,CAClC,GAAM,CAAEkhW,cAAaC,YAAWC,YAAW,GAAGC,GAC1C,KAAK5yiB,MACT,OACIk8M,SAAC,IAAD,CAAGznN,GAAI,KAAKuL,MAAMvL,GACby8G,SAAA,KAAKqlN,SAAS9pT,KAAK+mH,EAAOl4H,KACvBu3iB,mBAAC,WAAD,CACI,GAAID,EACJ/+iB,IAAKyH,EACLy5J,OAAQy9Y,IAAYh/a,EAAMuhC,MAAM,EAChCuuI,OAAQ9vK,EAAMuwF,MACdjmM,KAAK,OACL0lR,cAAc,OACdivQ,YAAan3iB,IAAU,EAAIm3iB,EAAclzZ,OAC9BmzZ,YACXC,UACIr3iB,IAAU,KAAKi7T,SAASh7T,OAAS,EAC3Bo3iB,EACApzZ,MAEb,GAEN,EAEX,C,aACJ,G,80GC5F2Bw4D,cAAMpoG,UAANooG,I,IAApB,cAAoBA,I,uCAD1B5zH,C,IAOI0qC,E,EAAasqD,Q,GAQbtqD,E,EAAqBikb,c,GAIrBjkb,E,EAAqBkkb,iB,GAIrBlkb,E,EAAqBuqU,c,GAIrBvqU,E,EAAqBwqU,c,GAWrBxqU,E,EAAqBmkb,Y,GAUrBnkb,E,EAAqBokb,sB,CA/CCl7V,gB,CACvB,YAAY/3M,EAAmB,CAC3B,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAActY,QAAiB,CAC3B,GAAM,CAAE24V,iBAAgBC,gBAAiB,KAAK/xgB,MAAM2xgB,SACpD,OAAOp5V,EAAO26X,YACV,IAAIvmZ,GAAYmlX,EAAe7lb,MAAM,GAAI8lb,EAAa9lb,MAAM,EAAE,EAC9D,IAAI0gE,GAAYmlX,EAAe7lb,MAAM,GAAI8lb,EAAa9lb,MAAM,EAAE,EAEtE,CAEA,IAAsB6md,cAAuB,CACzC,OAAO,KAAK9yiB,MAAM8yiB,iBACtB,CAEA,IAAsBC,iBAA0B,CAC5C,OAAO,KAAK/yiB,MAAMmziB,oBACtB,CAEA,IAAsB/5G,cAAuB,CACzC,OAAO,KAAKp5b,MAAMoziB,oBACtB,CAEA,IAAsB/5G,cAAuB,CACzC,OAAO33J,EACX,CASA,IAAsBsxQ,YAAsB,CAOxC,MANA,CAAI,KAAKhziB,MAAMqziB,YACK9ngB,GAChB,KAAKvrC,MAAMiwd,OACNhsa,OAAQgsa,GAAW,KAAKqjF,iBAAiBrjF,IACzCxjd,IAAKwjd,GAAWA,EAAO2hD,aAAar2gB,MAAM,CAE5Cg4iB,EAAc,GACzB,CAEA,IAAsBN,sBAAgC,CAClD,OAAO,KAAKjziB,MAAMiwd,OAAO39V,KAAM29V,GAAWA,EAAO+kD,eAAe,CACpE,CAEAs+B,iBAAyBrjF,EAAwC,CAQ7D,OANIA,EAAOx/I,cAIP,KAAKwiO,sBAAwB,CAAChjF,EAAO+kD,gBAAwB,GAE1D/kD,EAAOt+H,WAAam+K,EAAS4f,KACxC,CAEA8jB,WACIvjF,EAC8B,CAC9B,GAAIA,EAAO+kD,gBAAiB,OAC5B,GAAM,CAAEvkM,gBAAiBw/I,EAEnB/jY,EAAQ0kb,GAAW3gD,EAAOt+H,UAE1B5tI,EAAQksQ,EAAO2hD,aAAa,EAAE,EAAE7tT,cAEhCw/E,EAAcr3M,EAAMund,kBAAoB,KAAKV,gBAC7CW,EAAgBxnd,EAAMyzE,QACtB85L,EAAkBhpB,EAAe,MAAQlxL,OAEzCo0Z,EAAcznd,EAAMynd,YACpBt6G,EAAe,KAAKA,aACpBD,EAAe71J,EAAc,KAAK61J,aAAe,EAEjD8rG,GACFhpV,SAAC03V,IAAD,CACIn/iB,GAAI+6J,EAAY,UAAWygU,EAAOztB,WAAW,EAC7CovE,aAAc3hD,EAAO2hD,aACrBtuO,OAAQ+1J,EACR91J,YAAa3uI,EAAYwkS,EAC5B,GAGC7+a,EAAO,KAAKva,MAAM6ziB,YACpB33V,SAAC43V,GAAD,CACIr/iB,GAAI+6J,EAAY,OAAQygU,EAAOC,UAAU,EACzCn7T,OAAQk7T,EAAO2hD,aACfnuO,eAAe,QACfF,YAAa3uI,EAAY2uI,GACRk2D,kBACFi6M,eAClB,IAEDx3V,SAAC03V,IAAD,CACIn/iB,GAAI+6J,EAAY,OAAQygU,EAAOC,UAAU,EACzC0hD,aAAc3hD,EAAO2hD,aACrBtuO,OAAQv/E,EACRw/E,YAAa3uI,EAAY2uI,GACVmwQ,gBACEj6M,iBACpB,GAGL,OACI91D,UAAAsxC,WAAA,CAAA/jO,SAAA,CACKyic,GAAezO,EACf3qhB,CACH,GAEV,CAEAw5hB,kBACI9jF,EAC8B,CAC9B,GAAM,CAAE6hD,kBAAmB,KAAK9xgB,MAAM2xgB,SAEhCqiC,EAGF/jF,EAAO2hD,aAAar2gB,SAAW,GAE/B00d,EAAO+kD,gBAKX,IAFoB,CAAC,KAAKg+B,YAAc,CAAC,KAAKM,iBAAiBrjF,KAE5C,CAAC+jF,EAAc,OAElC,IAAMr0Y,EAAUixW,GAAW3gD,EAAOt+H,SAAS,CAAChyL,QAEtC05R,EAAe42B,EAAO+kD,gBACtB,KAAK37E,aACL95S,OACA65S,EAAe62B,EAAO+kD,gBACtB,KAAK57E,aACL75S,OAEN,OACI28D,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,aAAcygU,EAAOztB,WAAW,EAC9CtxV,SAAA++W,EAAO2hD,aAAanlgB,KAAK3Y,EAAOwH,KAC7B4gN,SAAC,SAAD,CACIznN,GAAI+6J,EAAYsiX,EAAeqU,WAAWryhB,EAAMywC,IAAI,GAEpDg2I,GAAI3lB,EAAY9gK,EAAM+G,CAAC,EACvB2/K,GAAI5lB,EAAY9gK,EAAMk3D,CAAC,EACvBL,EAAGiqG,EAAY,KAAKk+Y,YAAY,EAChCh1hB,KAAMhqB,EAAMiwN,MACZu/E,OAAQ+1J,EACR91J,YAAa61J,EACJz5R,SACZ,EARQrkK,GAUd,EAEX,CAEA24iB,aAA0C,CACtC,OACI/3V,SAAA+4H,WAAA,CAAA/jO,SACK,KAAKlxG,MAAMiwd,OAAOxjd,KAAKwjd,EAAQ30d,KAC5BqoS,YAAOkyC,SAAP,CAAA3kO,SAAA,CACK,KAAKsic,WAAWvjF,GAChB,KAAK8jF,kBAAkB9jF,EACZ,GAHKD,IAAaC,EAAQ30d,IAKhD,EAEV,CAEA44iB,cAA2C,CACvC,OAAOh4V,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,SAAWt+C,SAAA,KAAK+ic,YAAA,CAAiB,EAC/D,CAEAE,mBAAgD,CAC5C,GAAM,CAAEh7X,UAAW,KACnB,OACIwqH,UAAC,IAAD,CAAG5mR,UAAU,QAAbm0F,SAAA,EAGIgrG,SAAC,OAAD,CACIrhN,EAAGs1J,KAAKr+B,MAAMqnD,EAAOt+K,CAAC,EACtBmwD,EAAGmlG,KAAKr+B,MAAMqnD,EAAOnuH,CAAC,EACtB6tB,MAAOs3E,KAAKr+B,MAAMqnD,EAAOtgG,KAAK,EAC9BvkB,OAAQ67F,KAAKr+B,MAAMqnD,EAAO7kH,MAAM,EAChCx2C,KAAK,sBACL6hJ,QAAS,CACZ,GACA,KAAKs0Y,YAAA,CACP,C,EAEX,CAEA1iW,QAAsC,CAClC,OAAO,KAAKvxM,MAAMungB,SACZ,KAAK2sC,aAAA,EACL,KAAKC,kBAAA,CACf,C,aACJ,GAMA,SAASP,IAAS5ziB,EAAA,CACd,GAAM,CAAE4xgB,eAAc,GAAGwiC,GAAcp0iB,EACvC,OACIk8M,SAAC,OAAD,CACIp+L,KAAK,OACL0lR,cAAc,OACdC,eAAe,QACfH,OAAQ8sO,IACR,GAAIgkC,EACJxogB,EAAGkpH,GAAa88W,EACnB,EAET,C,80GCrLY75T,cAAMpoG,UAANooG,I,IADL,cACKA,I,uCAFX5zH,C,IAwBI0qC,E,EAAagjZ,Y,GAIbhjZ,E,EAAa04Y,U,GAIb14Y,E,EAAaqrN,2B,IAIbnnO,IAAOo6D,K,KAAcghY,gB,IAIrBp7b,IAAOo6D,K,KAAcknY,e,GAOrBxlb,E,EAAqBujZ,W,IAIrBr/Z,IAAOo6D,K,KAAcmnY,c,GA+BrBzlb,E,EAAqBpiC,S,GAIrBoiC,E,EAAqBsqD,Q,GAIrBtqD,E,EAAqB0lb,0B,GAMrB1lb,E,EAAqB2lb,wB,GAIrB3lb,E,EAAqBskb,iB,GAQrBtkb,E,EAAqBukb,kB,GAMrBvkb,E,EAAqBikb,c,GAQrBjkb,E,EAAa4lb,a,GAUb5lb,E,EAAqB6lb,wB,GAIrB7lb,E,EAAqB8lb,iB,IAIrB5hc,IAAOo6D,K,KAAcynY,2B,IAQrB7hc,IAAOo6D,K,KAAc0nY,yB,IAIrB9hc,IAAOo6D,K,KAAc2nY,kC,IAUrB/hc,IAAOo6D,K,KAAc4nY,2B,GAIrBlmb,E,EAAqBiiW,oB,GAerBjiW,E,EAAqBkiW,mB,GAUrBliW,E,EAAqBmmb,mB,IAKrBjic,IAAOo6D,K,KAAc4mT,iB,GA6BrBllW,E,EAAaqqD,U,GAIbrqD,E,EAAqBoqD,Y,GAIrBpqD,E,EAAqBwkb,Y,GAIrBxkb,E,EAAqBomb,iB,GAIrBpmb,E,EAAqBqmb,sB,GAOrBrmb,E,EAAqBsmb,qB,GAKrBtmb,E,EACWumb,iC,GAoBXvmb,E,EAAqBwmb,kB,GAOrBxmb,E,EAAqBymb,qB,GAOrBzmb,E,EAAqB0mb,4B,GAuIrB1mb,E,EAAuB8gW,c,GAIvB9gW,E,EAAqB2kZ,e,GAIrB3kZ,E,EAAqB2mb,gB,GAIrB3mb,E,EAAqB8kZ,Y,GAKrB9kZ,E,EAAqB4mb,mB,GAiBrB5mb,E,EAAqB6mb,oB,GAerB7mb,E,EAAqB8mb,a,GAMrB9mb,E,EAAqB+mb,c,GAMrB/mb,E,EAAaohW,Q,GAIbphW,E,EAAqBokb,sB,GAIrBpkb,E,EAAa0jZ,c,GAcb1jZ,E,EAAqB+5a,c,GAUrB/5a,E,EAAqBgnb,sB,GAiCrBhnb,E,EAAqBmlZ,a,GAMrBnlZ,E,EAAqBm8Z,a,GAWrBn8Z,E,EAAqBinb,oB,GAIrBjnb,E,EAAqBknb,kB,GAIrBlnb,E,EAAqBqjZ,a,GAqBrBrjZ,E,EAAa8iZ,U,GAab9iZ,E,EAAa4yY,O,GAIb5yY,E,EAAa6zY,O,GAIb7zY,E,EAAamnb,gB,CAtmBNj+V,gB,CAaR,YAAY/3M,EAAuB,CAC/B,MAAMA,GAENyxL,EACI,KACA,CAAEk8W,aAAcruX,EAAY22X,uBAAwB32X,CAAW,EAEvE,CAjBA3hK,gBAAwBo6L,EAAMk8Q,UAAA,GAE9B7/B,UAA6Bz/R,KAC7Bg5Y,aAAgC,IAAIt1E,GAA6B,CAC7DpgM,KAAM,WACV,GAEAg+Q,uBAAyD12Z,OACzD22Z,WAAyC32Z,OAWzC,IAAcsyX,YAA6B,CACvC,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAActK,UAAoB,CAC9B,OAAO,KAAK96a,QAAQ86a,UAAY,EACpC,CAEA,IAAcrtL,2BAAsC,CAChD,OAAO,KAAKztP,QAAQytP,2BAA6B,EACrD,CAEsBi0N,gBAAuB,CACzC,KAAKR,aAAanwiB,OAAS,IAC/B,CAEsB62iB,eAAsB,CACnC,KAAK5nd,QAAQ0pd,0BACd,KAAKhI,eAAA,EAET,KAAK2G,iCAAA,CACT,CAEA,IAAsB1iC,WAAyB,CAC3C,OAAO,KAAKG,aAAa/uW,QAASysT,GAAWA,EAAOl7T,MAAM,CAC9D,CAEsBu/Y,aAClBhqe,EACI,CACJ,IAAM/7C,EAAM,KAAK5Q,KAAK5lB,QAClBq+iB,EAAY,KAAK3pd,QAAQ9uE,MAAM5lB,QAOnC,GAJIq+iB,IACA,KAAKzI,aAAalsd,SAAWusE,GAAiBooZ,EAAW9re,IAGzD,CAAC/7C,EAAK,OAEV,IAAM8/d,EAAQrgW,GAAiBz/H,EAAK+7C,GAE9Bytb,EAAYia,IAAuB,CACrC3jB,QACA6jB,YAAa,KAAKP,SAASO,YAC3BJ,eAAgB,KAAKH,SAASG,eAC9BM,UAAW,KAAKA,SACpB,GAGI,KAAKT,SAASO,YAAY90U,SAASixT,IACnC,KAAKwmD,wBAAA,EAGT,KAAKlH,aAAanwiB,OACdu6f,IAAcx4W,OAAY,KAAO,CAAEh7G,KAAMwzd,CAAU,CAC3D,CAEA,IAAsBtra,SAA4B,CAC9C,OAAO,KAAKolb,WAAWplb,OAC3B,CAEA,IAAsB0sF,QAAiB,CACnC,OAAO,KAAKn5K,MAAMm5K,QAAUkjR,EAChC,CAEA,IAAsBk4G,0BAAmC,CACrD,OAAO,KAAKp7X,OAAOyvW,OACf,KAAK4sB,eAAiB,KAAKI,gBAAgC,EAEnE,CAEA,IAAsBpB,wBAAiC,CACnD,OAAO,KAAKr7X,OAAOtgG,MAAQ,CAC/B,CAEA,IAAsBs6d,iBAA0B,CAC5C,GAAI,KAAK1md,QAAQ0md,gBAAiB,OAAO,KAAK1md,QAAQ0md,gBACtD,IAAMn9a,EAAS,KAAKvpC,QAAQo5Z,iBAAmB,EAAI,EACnD,OAAO,KAAK2tB,cACNx9Y,EAASq6Y,IACTr6Y,EAASiqW,GACnB,CAEA,IAAsBmzE,kBAA2B,CAC7C,OAAO,KAAK5/B,gBAEN9C,GACV,CAEA,IAAsBoiC,cAAuB,CAKzC,OAJI,KAAKG,qBAA6BxiC,IAClC,KAAK+C,cAAsBhD,IAC3B,KAAK/jb,QAAQo5Z,iBAAkB,EAC/B,KAAK+iD,aAAartiB,SAAW,EAAUg1gB,IACpCD,GACX,CAEA,IAAcmkC,aAAsB,CAChC,IAAM4B,EAAc,KAAK1I,aAAanwiB,QAAQ+mC,KACxC+xgB,EAAmB,KAAK7pd,QAAQ8pd,6BAA+B,GACrE,OAAOhrgB,GACH8qgB,IAAgB92Z,OAEV+2Z,EADA,CAACD,EAAgBC,IAAgB,CACjCA,CAEd,CAEA,IAAsB5B,wBAAiC,CACnD,OAAO,KAAKvB,gBAAkB,EAAI,GACtC,CAEA,IAAsBwB,iBAA2B,CAC7C,OAAO,KAAKlod,QAAQspW,SAAS78b,OAAOzE,KAAO,KAAK2/b,SACpD,CAEsBwgH,0BAClB1kF,EACI,CACJ,KAAK2hD,WAAWqB,WAAWhlK,MAAA,EAC3Bv3M,aAAa,KAAKu/Y,UAAU,EAC5B,KAAKD,uBAAyB/lF,CAClC,CAEsB2kF,yBAAgC,CAClD,KAAKoB,uBAAyB12Z,MAClC,CAEsBu1Z,kCAAyC,CAC3Dn+Y,aAAa,KAAKu/Y,UAAU,EAI5B,KAAKA,WAAa/mZ,OAAOvuF,eAAA,CACrB,KAAKi0e,wBAAA,CACT,EAAG,IACP,CAEsBE,2BAAkC,CACpD,KAAKD,iCAAA,CACT,CAEA,IAAsBhkF,oBAA+B,CACjD,GAAM,CAAE0lF,0BAA2B,KAAK/pd,QAClCqkY,EAAqB99T,GAAiB,CACxC,KAAKijZ,sBACR,GAQD,OAPIO,GACA1lF,EAAmBv0d,KAAA,GACZ,KAAK0zd,OACHxjd,IAAKg/B,GAAMA,EAAEykb,UAAU,EACvBjsa,OAAQ3uD,GAASkhjB,EAAuBp5W,SAAS9nM,KAGvDw7d,CACX,CAEA,IAAsBC,mBAA6B,CAC/C,OACI,KAAKD,mBAAmBv1d,OAAS,GAIhC,CAAC,CAAC,KAAKkxF,QAAQ+pd,wBAA0B,CAAC,KAAKhjC,aAExD,CAEA,IAAsBwhC,mBAA6B,CAC/C,GAAM,CAAEuB,8BAA8B,IAAO,KAAK9pd,QAClD,OAAO8pd,EAA4Bh7iB,OAAS,CAChD,CAEsBw4d,gBAAgB1ob,EAAqB,CAGvD,IAAMorgB,EAAiB,KAAKhqd,QAAQ9uE,MAAM5lB,QAC1C,GAAI,CAAC0+iB,EAAgB,OACrB,IAAMC,EAAaD,EAAeE,uBAC9BxmC,IAE8Bh3W,MAAMxnI,KAAK+khB,GAAYz0Y,MACpD20Y,GAAchmF,GAAuBvlb,EAAE7tC,OAASo5iB,EAEjDC,GACA,KAAK1I,eAAA,CAEb,CAEAj6E,mBAAmC,CAC/BllU,GAAuB,IAAI,EAC3B54J,SAASk3W,iBAAiB,QAAS,KAAKymH,gBAAiB,CACrD10Z,QAAS,EACb,EACJ,CAEA80Z,sBAAsC,CAClC/9d,SAAS63W,oBAAoB,QAAS,KAAK8lH,gBAAiB,CACxD10Z,QAAS,EACb,EACJ,CAEA,IAAc65G,UAAmB,CAC7B,OAAO,KAAKzsF,QAAQysF,YACxB,CAEA,IAAsBD,YAAqB,CACvC,OAAO,KAAKu6V,cAAgB,IAAM,GACtC,CAEA,IAAsB6/B,YAAsB,CACxC,MAAO,CAAC,CAAC,KAAK5md,QAAQ4md,UAC1B,CAEA,IAAsB4B,iBAA0B,CAC5C,OAAO,KAAK97X,OAAOzkD,MAAQ,KAAK4gb,mBACpC,CAEA,IAAsBJ,sBAAyC,CAC3D,MAAO,CACH,KAAKX,yBAAyBzlZ,IAC9B,KAAKylZ,yBAAyB94Y,MAClC,CACJ,CAEA,IAAsB05Y,qBAA2C,CAC7D,OAAO,KAAK2B,4BAA8B,KAAKr1C,KAAK,CACxD,CAGA,IACY2zC,iCAAuD,CAC/D,OAAO,KAAK0B,4BACF,KAAKvB,0BACf,CACJ,CAEAuB,wBACIr1C,EACmB,CACnB,OAAO,IAAIkpC,GAAoB,KAAKkL,qBAAsB,CACtDp0C,QACA0V,WAAc,KAAK+9B,qBACnBthO,SAAU,KAAK4gO,uBACf/gF,aAAc,KAAKv6S,SACnBD,WAAY,KAAKA,WACjBk6J,cAAet4L,GAAciU,IAC7BwlY,kBAAmB,CAAC,KAAK/sB,QAC7B,EACJ,CAEA,IAAsB8tC,kBAA4B,CAC9C,MACI,CAAC,CAAC,KAAK5od,QAAQm6Z,cACf,KAAKztU,OAAOtgG,SAEpB,CAEA,IAAsBy8d,qBAA8B,CAEhD,OADK,KAAK7od,QAAQsqd,iBACX,KAAK1B,iBACN,KAAKD,gCAAgCv8d,MACrC,KAAKs8d,oBAAoBtK,YAHY,CAI/C,CAEA,IAAsB0K,4BAA2C,CAC7D,GAAI,CAAC,KAAKF,iBAAkB,OAAO,KAAK5zC,MACxC,IAAMtoV,EAAS,KAAK69X,gBAAgB,CAChCC,aAAc,KAAK9B,oBAAoBtK,WAC3C,GACA,OAAO,KAAKqM,aAAa/9X,GAAQ44V,YACrC,CAEAolC,gBAA6C,CACzC,GAAM,CAAE1qd,UAASklb,YAAa,KAE9B,OACIz1T,SAACk7V,GAAD,CACczlC,WACVktB,cAAe,GACf1lM,cAAe1sQ,EAAQy6Z,kBAC1B,EAET,CAEAmwD,mBAAuD,CAEnD,MADI,CAAC,KAAK7B,gBAAkB,CAAC,KAAKE,mBAA2B,MAEzDx5V,SAAC2yV,GAAD,CACIv1iB,MAAO,KAAKo8iB,mBACZ76iB,EAAG,KAAKs+K,OAAOt+K,EACfmwD,EAAG,KAAKmuH,OAAOrqB,IACf+9M,YAAa,CAAC,KAAK06J,SACnB+mC,YAAa,KAAKgJ,wBACrB,EAET,CAKAC,qBAAkD,CAC9C,GAAM,CAAE9qd,WAAY,KACpB,OACIk3M,UAAAsxC,WAAA,CAAA/jO,SAAA,CACKzkB,EAAQsqd,mBACL76V,SAACysV,GAAD,CACIrviB,MAAO,KAAK67iB,oBACZt6iB,EAAG,KAAKo6iB,gBACRv6C,aAAc,KAAKk6C,0BACnB5/V,aAAc,KAAK+/V,0BACnBloM,YAAa,CAAC,KAAK06J,QACtB,IAELrrT,SAACs7V,GAAD,CACI7lC,SAAU,KAAKA,SACf1hD,OAAQ,KAAK24E,aACbiL,WAAY,KAAKrgC,cACjB6/B,WAAY,KAAKA,WACjBF,gBAAiB,KAAKA,gBACtBC,iBAAkB,KAAKA,iBACvBN,aAAc,KAAKA,aACnBvrC,SAAU96a,EAAQ86a,QACrB,EACH,GAEV,CAEA2sC,cAA2C,CACvC,OACIvwQ,UAAAsxC,WAAA,CAAA/jO,SAAA,CACK,KAAKmmc,kBAAA,EACL,KAAKF,eAAA,EACL,KAAKI,oBAAA,CACR,GAEV,CAEApD,mBAAgD,CAC5C,OACIxwQ,UAAC,IAAD,CACIp1Q,IAAK,KAAK5Q,KACVZ,UAAWozf,GACXn7T,aAAc,KAAKq/V,cACnBoD,WAAY,KAAKpD,cACjBqD,cAAe,KAAKrD,cACpB1hW,YAAa,KAAK2hW,aAClB5/V,aAAc,KAAK4/V,aACnB7/V,YAAa,KAAK6/V,aARtBpjc,SAAA,EAUIgrG,SAAC,OAAD,CAAM,GAAI,KAAK/iC,OAAO+uV,QAAA,EAAWgqC,YAAY,GAMvC,GACL,KAAKmF,kBAAA,EACL,KAAKF,eAAA,EACL,KAAKI,oBAAA,GAEJ,KAAK5C,iBAAmB,KAAKK,qBAC3B94V,SAAC61V,IAAD,CACI9lG,MAAO,KAAKwoG,YACZ7L,aAAc,KAAKA,aACnBj3B,SAAU,KAAKA,SACfE,WAAY,KAAKA,WACjBmgC,UAAW,KAAK0C,sBACnB,IAELx4V,SAACy7V,GAAD,CACIljjB,GAAI,KAAK2/b,UACTy9E,WAAY,KAAKA,WACjB87B,aAAc,KAAKA,aACnB19E,OAAQ,KAAK24E,aACboF,WAAY,KAAKtrC,MAAMt8V,MACvB+nY,eAAgB,KAAKA,cACxB,EACF,C,EAEX,CAEA58V,QAAsC,CAClC,GAAM,CAAE9kH,WAAY,KAcpB,OAZI,KAAKolb,WAAWp9Z,UAAUjmE,QAEtBm1P,UAAC,IAAD,CAAAzyL,SAAA,CACK,KAAKimc,eAAA,GACNj7V,SAAC2xT,GAAD,CACaphb,UACT0sF,OAAQ,KAAKA,OACb/2J,QAAS,KAAKyvf,WAAWp9Z,UAAUjmE,MACtC,EACF,IAGJi+C,EAAQ86a,SAAW,KAAK2sC,aAAA,EAAiB,KAAKC,kBAAA,CACzD,CAEA,IAAwBxkF,cAAyB,CAC7C,OAAO,KAAKkiD,WAAWliD,YAC3B,CAEA,IAAsB6jD,eAAyB,CAC3C,OAAO,KAAK3B,WAAW2B,aAC3B,CAEA,IAAsBgiC,gBAA0B,CAC5C,OAAO,KAAKhiC,eAAiB,CAAC,CAAC,KAAK/mb,QAAQmrd,UAChD,CAEA,IAAsBjkC,YAAyB,CAC3C,OAAO,KAAK9B,WAAW8B,UAC3B,CAGA,IAAsB8hC,mBAAqC,CAEvD,OAAOlqgB,GACH,KAAKooe,WAAWhlM,WACf7pC,GAAQA,aAAesrC,GAEhC,CAEAynO,iBAAoC,EACpCC,eAAkC,EAGlCC,6BAAkDjnC,GAGlDwmC,yBAA2BzmC,GAE3B,IAAsB6kC,oBAEN,CACZ,OAAO,KAAKliC,eAAiB,KAAK/mb,QAAQmrd,WACpC,IAAI5H,GAAkC,KAAKyF,kBAAmB,CAC1DhiF,aAAc,KAAKv6S,SACnB06J,SAAU,KAAKz6J,OAAOtgG,MACtBuiD,MAAOuf,GAAgBhmB,OACvBgvB,MAAO,KAAKgyZ,YACZnV,SAAU,KAAKsX,eACf9I,UAAW,KAAK6I,gBACpB,GACAt4Z,MACV,CAEA,IAAsBo2Z,aAAkC,CACpD,OAAO,KAAKniC,cACN,KAAKG,WAAWtuO,kBAChB9lJ,MACV,CAEA,IAAsBq2Z,cAAuB,CACzC,OAAO,KAAKF,oBAAoBphf,QAAU,CAC9C,CAIA,IAAc27Z,QAAqC,CAC/C,OAAO,KAAK4hD,WAAW5hD,MAC3B,CAEA,IAAsBgjF,sBAAgC,CAClD,OAAO,KAAKhjF,OAAO39V,KAAM29V,GAAWA,EAAO+kD,eAAe,CAC9D,CAEA,IAAczC,cAAwC,CAClD,OAAOb,IAAwB,KAAKzhD,OAAQ,CACxC4hD,WAAY,KAAKA,WACjBF,SAAU,KAAKA,QACnB,EACJ,CAEAqmC,oBAA4B/nF,EAA2C,CACnE,OAAOY,GAAuBZ,EAAQ,CAClCc,kBAAmB,KAAKA,kBACxBD,mBAAoB,KAAKA,kBAC7B,EACJ,CAEA,IAAsB83E,cAAwC,CAC1D,OAAOv2B,IAAwB,KAAKE,aAAc,CAC9CG,kBAAmB,KAAKb,WAAWa,kBACnC3hD,kBAAmB,KAAKA,kBACxBD,mBAAoB,KAAKA,kBAC7B,EACJ,CAIA,IAAsB+kF,sBAAsC,CAExD,IAAI5lF,EAAS,KAAKA,OACdA,EAAO39V,KAAM29V,GAAW,CAAC,CAACA,EAAOx/I,YAAY,IAC7Cw/I,EAASA,EAAOhsa,OAAQgsa,GAAWA,EAAOx/I,YAAY,GAG1D,IAAMwnO,EAAwC,GACxCC,EAAsB5riB,IAAI0iH,QAAQihW,EAASxkb,GAAMA,EAAEykb,UAAU,EACnE,IAAK,IAAMioF,KAAcD,EAAoB31hB,OAAA,EAGzC01hB,EAAmB17iB,KAAK82J,GAAO8kZ,IAGnC,OAAOF,EAAmBxriB,IAAKwjd,IAC3B,GAAM,CAAEC,aAAY1tB,cAAaz+O,QAAOvrE,SAAUy3U,EAC5CvlP,EAAYr3E,GAAO48T,EAAOl7T,MAAM,EAAG/pG,EACnCima,EAAQ,KAAK+mF,oBAAoB/nF,GACvC,MAAO,CACHlsQ,QACAmsQ,aACA9pT,MAAQ,KAAK35E,QAAQsqd,iBAAwBv0G,EAAL,GACxC9kR,WAAY4zV,GACR,KAAKO,WAAWN,eAChBrhD,GAEJ07E,OAAQlhU,EACRinH,SAAUu+K,GAAgB,CAAE13X,QAAOy4U,OAAM,EAC7C,CACJ,EACJ,CAEA,IAAsB+iD,aAA0B,CAC5C,GAAM,CAAEA,eAAgB,KAAKvnb,QAE7B,OAAO,IAAIy8b,GAAW,CAAE,GADPzX,IAAuBuC,CACbw6B,EAAU,GAAGx6B,CAAY,EAAG,IAAI,CAC/D,CAEA,IAAsBgX,aAA0B,CAC5C,GAAM,CAAEA,cAAa3sB,cAAe,KAAK5xa,QACnC2rd,EAAe,CAAE51B,cAAe,EAAK,EAIrC61B,EAAah6C,EAAa9+W,OAAYyrY,EAE5C,OAAO,IAAI9B,GAAW,CAAE,GAAGkvB,EAAc,GAAGC,CAAW,EAAG,IAAI,CAClE,CAEA,IAAsBvC,oBAAqC,CACvD,OAAO,KAAKjkC,WAAWqD,iBAAiB,KAAK8V,WAAW,CAC5D,CAEA,IAAsB+qB,kBAAiC,CACnD,OAAO,KAAKlkC,WAAWwD,eAAe,KAAKrB,WAAW,CAC1D,CAEA,IAAsB9B,aAAsB,CACxC,OAAO,KAAK8kC,gBAAgB,CAAEC,aAAc,KAAK3B,mBAAoB,EACzE,CAEA0B,gBAAwB,CACpBC,gBAGO,CACP,OACI,KAAK1C,yBACA+D,SAAS,KAAK7rd,QAAQsqd,iBAAmBE,EAAe,GAIxDruB,OAAO,KAAK/W,WAAWyB,WAAa,EAAI,GAExCilC,UAAU,EAEvB,CAEA,IAAc5mC,UAAqB,CAC/B,OAAO,KAAKulC,aAAa,KAAKhlC,WAAW,CAC7C,CAEAglC,aAAqB/9X,EAA0B,CAC3C,OAAO,IAAIovW,GAAS,CAChBpvW,SACA44V,aAAc,KAAKgkC,iBACnBjkC,eAAgB,KAAKgkC,mBACrBptB,gBAAiB,KAAKj8b,QAAQi8b,eAClC,EACJ,CAEA,IAAcjnB,OAAsB,CAChC,OAAO,KAAKkQ,SAASI,YACzB,CAEA,IAAcrP,OAAwB,CAClC,OAAO,KAAKiP,SAASG,cACzB,CAEA,IAAckkC,gBAAsD,CAChE,GAAI,CAAC,KAAKvpd,QAAQsqd,iBAed,MAAO,CACHtB,kBAfsB,KAAKjiC,cACzB,KAAKiiC,kBACL,GAcF+C,sBAb0B,KAAKhlC,cAC7B,GACA,KAAKvjD,OAAOxjd,KACPwjd,EAAQ30d,IACL,IAAI80U,GAAe,CACf90U,QACAxH,MAAOm8d,EAAOC,WACd9pT,MAAO6pT,EAAOztB,YACdz+O,MAAOksQ,EAAOlsQ,KAClB,IAKV4xV,YAAa,KAAKA,YAClBmC,eAAgB,KAAKA,eACrBD,iBAAkB,KAAKA,iBACvBE,6BAA8B,KAAKA,6BACnCT,yBAA0B,KAAKA,wBACnC,CAGR,C,aACJ,GC3sBA,SAAgBmB,IAAc,CAC1B5lC,cACA15V,SACA/9C,QAAQuf,GAAgBrmB,KACxBm/V,eAAe,KAOf,CACI,IAAMilF,EAAiB7lC,EAAYvjX,MAAM,EAAG,GACtCn7I,EAAYg8I,KAAKh1J,IACnB,EACA03gB,EAAYt3gB,OAASm9iB,EAAen9iB,MACxC,EAEMo9iB,EAAkBplF,GAAc,GAAIE,GACpCmlF,EAAerlF,GAAc,GAAIE,GAEvC,OACI9vL,UAAC,gBAAD,CACI5mR,UAAU,gBACV,GAAIo8J,EAAO+uV,QAAA,EACXh8a,MAAO,CACHmja,UACIj0X,IAAUuf,GAAgBjmB,MAAQ,QAAU,OAChDqvF,MAAO69E,EACX,EAPJ1wL,SAAA,EASIgrG,SAAC,MAAD,CAAKn/L,UAAU,UAAUmvE,MAAO,CAAEgtF,SAAUy/X,CAAgB,EAAGznc,SAAA,SAE1D,IACLyyL,UAAC,MAAD,CAAK5mR,UAAU,OAAOmvE,MAAO,CAAEgtF,SAAU0/X,CAAa,EAAtD1nc,SAAA,EACIgrG,SAAC,KAAD,CAAAhrG,SACKwnc,EAAejsiB,IAAKywb,IACjBhhP,SAAC,KAAD,CAAAhrG,SAAsBgsV,CAAe,EAA5BA,GAEb,GACH/ob,EAAY,IACTwvR,UAAC,MAAD,CAAAzyL,SAAA,CAAK,KAAG/8F,IAAc,EAAI,MAAQA,EAAU,OAAU,GAEzD,CACM,G,EAEvB,CACJ,CChCA,SAAgBs9f,IACZ,EACmB,CACnB,MAAO,CACH,KAAMj/Z,GAAQ,YAAc28B,GAAU,IAEtC,IAAK,CACT,CACJ,CAEA,SAAgB0pa,IACZ,EACA,CAAE,YAAW,WACM,CACnB,MAAO,CACH,MAAO,CACH,CAAE,MAAOnkhB,EAAW,SAAU,EAAG,MAAO,EAAK,EAC7C,CAAE,MAAOC,EAAS,SAAU,EAAG,MAAO,EAAK,CAC/C,EAGA,eAAgB69E,GAAQ,gBAAkBA,GAAQ,SAClD,SAAU,EACd,CACJ,CAEA,SAAgBsmc,IACZ,EACA,CACI,QACA,SACA,QAEoB,CACxB,OAAO7oF,EAAO,IAAK,GAAW,CAC1B,IAAM8oF,EAASt3C,EAAM,MAAMxxC,EAAO,MAAM,KAAK,EACvC+oF,EAAOv3C,EAAM,MAAMxxC,EAAO,IAAI,KAAK,EAEnClgI,EAAa,IAAIpjM,GAAY6sW,EAAQu/C,CAAM,EAC3CE,EAAW,IAAItsZ,GAAY48Y,EAAMyP,CAAI,EAE3C,MAAO,CAAE,GAAG/oF,EAAQ,aAAY,UAAS,CAC7C,CAAC,CACL,CAEA,SAAgBipF,IACZ,EACA,CACI,oBAAoB,GACpB,oBAAoB,GACpB,qBAAqB,CAAC,GAMF,CACxB,IAAMjpF,EAAmCsiD,EAAa,IAAK,GAAW,CAClE,IAAMthD,EAAQJ,GAAuBZ,EAAQ,CACzC,oBACA,oBACJ,CAAC,EACKt+H,EAAWu+K,GAAgB,CAAE,QAAO,MAAOjgD,EAAO,KAAM,CAAC,EAC/D,MAAO,CAAE,GAAGA,EAAQ,QAAO,UAAS,CACxC,CAAC,EAQD,OAJIc,GAAqB2hD,EACdD,GAASxiD,EAAQe,GAAqB,EAG1Cf,CACX,CChFA,SAAgBkpF,IAAM,CAClBlpF,SACA+hF,YAAY,IACZzuQ,cAAc,EACd61J,eAAe,GACfggH,gBAAgB13Q,IAAA,CAEhB,GAAM,CAAE8gK,cAAazyG,aAAYkpN,YAAahpF,EAExC/jY,EAAQ0kb,GAAW3gD,EAAOt+H,UAC1BqtM,EAAY9yc,EAAMund,kBAAoBlwQ,EAE5C,OACII,UAAAsxC,WAAA,CAAA/jO,SAAA,CACKhlB,EAAMynd,cACHz3V,SAACm9V,IAAD,CACI5kjB,GAAI+6J,EAAY,UAAWgzS,GACfzyG,aACFkpN,WACV5/X,OAAQ24X,EAAY,EAAI54G,EACxBr1O,MAAOq1V,EACPpa,UAAWA,EAAY,EAAI5lG,CAC9B,IAELl9O,SAACm9V,IAAD,CACI5kjB,GAAI+6J,EAAY,QAASgzS,GACbzyG,aACFkpN,WACV5/X,OAAQ24X,EACRjuV,MAAOksQ,EAAOlsQ,MACHi7U,YACXr/X,QAASzzE,EAAMyzE,OAClB,EACH,GAEV,CAEA,SAAS05Y,IAAa,CAClB5kjB,KACAs7V,aACAkpN,WACA5/X,SACA0qC,QACAi7U,YAAY,EACZr/X,UAAU,IAUV,OACIgkI,UAAC,IAAD,CAAOlvS,KAAakrK,UAAS5iJ,UAAU,QAAvCm0F,SAAA,EACIgrG,SAAC,SAAD,CACIznN,GAAI+6J,EAAY,eAChB+qB,GAAI3lB,EAAYm7L,EAAWl1V,CAAC,EAC5B2/K,GAAI5lB,EAAYm7L,EAAW/kS,CAAC,EAC5BL,EAAGiqG,EAAYykB,GACfv7J,KAAMimM,CACT,IACD7H,SAAC,SAAD,CACIznN,GAAI+6J,EAAY,aAChB+qB,GAAI3lB,EAAYqkZ,EAASp+iB,CAAC,EAC1B2/K,GAAI5lB,EAAYqkZ,EAASjuf,CAAC,EAC1BL,EAAGiqG,EAAYykB,GACfv7J,KAAMimM,CACT,IACD7H,SAAC,OAAD,CACIznN,GAAI+6J,EAAY,QAChBipB,GAAI7jB,EAAYm7L,EAAWl1V,CAAC,EAC5Bg+K,GAAIjkB,EAAYm7L,EAAW/kS,CAAC,EAC5B4tH,GAAIhkB,EAAYqkZ,EAASp+iB,CAAC,EAC1Bi+K,GAAIlkB,EAAYqkZ,EAASjuf,CAAC,EAC1Bs4O,OAAQv/E,EACRw/E,YAAa3uI,EAAYoqY,EAC5B,EACF,C,EAEX,CCxFA,SAAgBsa,IAAgB,CAC5Br6W,OACA9lB,SACAn9C,WAAA,CAMA,IAAM+sZ,EAAiB9pV,EAAKzsF,OAAOu2a,eACnC,OACIplP,UAAC,IAAD,CAAGlvS,GAAI+6J,EAAY,mBAAnBt+C,SAAA,EACIgrG,SAACojV,GAAD,CAA+BrgW,OAAc9lB,QAAS,GACrD,CAAC4vW,IACE7sU,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,eACdt+C,SAAA+tF,EAAK8nV,WAAWt6gB,IAAK25J,IAClB81C,SAAC,OAAD,CAEIrhN,EAAG+5J,EAAYqqC,EAAKqiV,MAAMl7W,EAAMtyK,KAAK,GACrCk3D,EAAG4pG,EACCukB,EAAO1d,OAASz/B,EAAUijE,EAAKykV,YACnC,EACAnqL,WAAW,SACXrgL,SAAU+lB,EAAKykV,aACf5lgB,eAECozF,SAAAk1D,EAAMshX,cACL,EAVGthX,EAAMtyK,KAUT,EAEX,EAER,C,EAEX,C,80GC2DYikN,eAXNoxT,IAAa,IAEbowC,GAAqB,EACrBC,GAA0B,EAC1BC,IAAiB,GACjBC,IAAqB,EAMf3hW,KAAMpoG,U,SADX,cACKooG,G,wCAFX5zH,C,IAuBI0qC,E,EAAagjZ,Y,GAIbhjZ,E,EAAqBpiC,S,GAIrBoiC,E,EAAqBsqD,Q,GAIrBtqD,E,EAAqB8qb,2B,GAMrB9qb,E,EAAqBqjZ,a,GAUrBrjZ,E,EAAqB+qb,iB,GASrB/qb,E,EAAaqqD,U,GAIbrqD,E,EAAqB4kZ,qB,GAIrB5kZ,E,EAAqBukZ,c,GAIrBvkZ,E,EAAqBskb,iB,GAIrBtkb,E,EAAqBkiW,mB,GAUrBliW,E,EAAqBn6F,W,GAIrBm6F,E,EAAqBl6F,S,GAIrBk6F,E,EAAqB2qY,Q,GAIrB3qY,E,EAAqB06a,M,GAIrB16a,E,EAAqBwhW,gB,GAIrBxhW,E,EAAaohW,Q,GAIbphW,E,EAAqB0jZ,c,GAerB1jZ,E,EAAqB+5a,c,GAQrB/5a,E,EAAagrb,c,GAMbhrb,E,EAAqBirb,mB,GAoBrBjrb,E,EAAqBkrb,a,GAKrBlrb,E,EAAamlZ,a,GAObnlZ,E,EAAqBm8Z,a,GASrBn8Z,E,EAAa+nZ,gB,GAUb/nZ,E,EAAay6Y,S,GASbz6Y,E,EAAqBsoZ,Q,GAIrBtoZ,E,EAAa6zY,O,GAMb7zY,E,EAAa4yY,O,GAOb5yY,E,EAAqBmrb,Y,GAIrBnrb,E,EAAqBorb,c,GAMrBprb,E,EAAamnb,gB,GAmBbnnb,E,EAAqBqrb,gB,GAIrBrrb,E,EAAqBsrb,gB,GAIrBtrb,E,EAAqBurb,c,GAarBvrb,E,EACWwrb,qB,GAWXxrb,E,EACWyrb,oB,GAIXzrb,E,EACW0rb,mB,GAYX1rb,E,EAAqB2rb,oB,GAoBrB3rb,E,EAAqB4rb,iB,GAOrB5rb,E,EAAqB6rb,iB,GAMrB7rb,E,EAAqB8rb,kB,GAOrB9rb,E,EAAqB+rb,kB,GAOrB/rb,E,EAAagsb,qB,GAMbhsb,E,EAAaisb,c,GAcbjsb,E,EACWksb,oB,GAIXlsb,E,EACWmsb,uC,GAkBXnsb,E,EAAqBosb,sB,GAQrBpsb,E,EAAqBuoZ,Q,GA2CrBvoZ,E,EAAqBqrX,U,GAIrBrrX,E,EAAqBwmb,kB,GAIrBxmb,E,EAAqBiiW,oB,GAkDrBjiW,E,EAAqBqsb,kB,GAWrBrsb,E,EAAqBssb,mB,GAarBtsb,E,EAAqBusb,uB,GAIrBvsb,E,EAAqBwsb,oB,GAarBxsb,E,EAAqBysb,e,GAIrBzsb,E,EAAqB0sb,oB,GAYrB1sb,E,EAAqB2sb,mC,IAIrBzoc,IAAOo6D,K,KAAcsuY,uB,IA2CrB1oc,IAAOo6D,K,KAAcuuY,kB,IAOrB3oc,IAAOo6D,K,KAAMynY,2B,IAKb7hc,IAAOo6D,K,KAAcwuY,oB,IAKrB5oc,IAAOo6D,K,KAAcyuY,6B,IAUrB7oc,IAAOo6D,K,KAAM4nY,2B,IAKbhic,IAAOo6D,K,KAAMwlC,a,IAKb5/F,IAAOo6D,K,KAAM6nC,c,GAMbnmF,E,EAAqBknU,S,CAjoBdh+O,e,CAYR,YAAY/3M,EAAwB,CAChC,MAAMA,GAENyxL,EAAiE,KAAM,CACnEoqX,kBAAmBv8X,EACnBquX,aAAcruX,CAClB,EACJ,CAhBAw8X,wBAAgC/jW,EAAMk8Q,UAAA,GAEtC7/B,UAA6Bz/R,KAC7Bg5Y,aAAgC,IAAIt1E,GAEjC,CAAEpgM,KAAM,WAAY,GAEvB4jR,kBAAgDt8Z,OAWhD,IAAcsyX,YAA8B,CACxC,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAAsBplb,SAA6B,CAC/C,OAAO,KAAKolb,WAAWplb,OAC3B,CAEA,IAAsB0sF,QAAiB,CACnC,OAAO,KAAKn5K,MAAMm5K,QAAUkjR,EAChC,CAEA,IAAsBs9G,2BAAoC,CACtD,OAAO,KAAKxgY,OACPyvW,OAAOzf,KACPovC,UAAU,KAAKwB,YAAc,EACtC,CAEA,IAAsB7nC,aAAsB,CACxC,OAAO,KAAKynC,0BAA0BrB,SAClC,KAAK2B,aAAeR,IAE5B,CAMA,IAAsBG,iBAA0B,CAC5C,OAAO,IAAIrhY,EACP,KAAKihV,OACL,KAAK0Y,YAAYpjX,IACjB,KAAKy6Y,KAAO,KAAK/vC,OACjB,KAAK0Y,YAAY59c,MACrB,CACJ,CAEA,IAAc4kH,UAAmB,CAC7B,OAAO,KAAKzsF,QAAQysF,YACxB,CAEA,IAAsBu6V,qBAA2C,CAC7D,OAAO,KAAK5B,WAAW4B,mBAC3B,CAEA,IAAsBL,cAA2B,CAC7C,OAAO,KAAKvB,WAAWuB,YAC3B,CAEA,IAAsB+/B,iBAA0B,CAC5C,OAAO,KAAK1md,QAAQo5Z,iBAAmB,EAAI,GAC/C,CAEA,IAAsB90B,mBAA6B,CAC/C,OACI,KAAKD,mBAAmBv1d,OAAS,GAIjC,CAAC,CAAC,KAAKkxF,QAAQ+pd,sBAEvB,CAEA,IAAsB9hhB,WAAkB,CACpC,OAAO,KAAKm9e,WAAWn9e,SAC3B,CAEA,IAAsBC,SAAgB,CAClC,OAAO,KAAKk9e,WAAWl9e,OAC3B,CAEA,IAAsB6ke,QAAiB,CACnC,OAAO,KAAKkJ,MAAM4e,MAAM,KAAK5sf,SAAS,CAC1C,CAEA,IAAsB60gB,MAAe,CACjC,OAAO,KAAK7mC,MAAM4e,MAAM,KAAK3sf,OAAO,CACxC,CAEA,IAAsB07b,gBAAiC,CACnD,OAAO,KAAKwhD,WAAWxhD,cAC3B,CAEA,IAAcJ,QAA6B,CACvC,OAAO,KAAK4hD,WAAW5hD,MAC3B,CAEA,IAAsBsiD,cAAyC,CAC3D,OAAOumC,IAAyB,KAAK7oF,OAAQ,CACzCwxC,MAAO,KAAKA,MACZjI,OAAQ,KAAKA,OACb+vC,KAAM,KAAKA,IACf,EACJ,CAEAyO,oBAA4B/nF,EAA4C,CACpE,OAAOY,GAAuBZ,EAAQ,CAClCc,kBAAmB,KAAKA,kBACxBD,mBAAoB,KAAKA,kBAC7B,EACJ,CAEA,IAAsB83E,cAAyC,CAC3D,OAAOsQ,IAAyB,KAAK3mC,aAAc,CAC/CG,kBAAmB,KAAKb,WAAWa,kBACnC3hD,kBAAmB,KAAKA,kBACxBD,mBAAoB,KAAKA,kBAC7B,EACJ,CAEA,IAAc+oF,cAAsC,CAChD,OAAO,KAAKhoC,WAAW0E,UAAUtyd,OAC5Bgsa,GAAW,CAAC,KAAK4hD,WAAWkF,cAAc9mD,GAEnD,CAEA,IAAsB6pF,mBAA6B,CAc/C,OAbI,KAAKrtd,QAAQsvd,mBAGb,KAAKlC,aAAat+iB,SAAW,GAG7B,KAAKkxF,QAAQ86a,SAAiB,GAQ9B,KAAKl3C,iBAAmB1+U,GAAeu9B,QACvC,KAAKukW,sBAAwB7hY,GAAoBrR,IAEzD,CAEA,IAAsBw5a,aAAsB,CAExC,OADI,KAAK/uB,YAAYjC,eAAuB,EACrC,KAAKiC,YAAYtH,aAAe61B,EAC3C,CAEA,IAAcvlC,aAA0B,CACpC,GAAM,CAAEA,eAAgB,KAAKvnb,QACvB+hd,EAAW/8B,IAAuBuC,GAClC4E,EAAS,CAAE2J,SAAU,EAAK,EAChC,OAAO,IAAI2G,GAAW,CAAE,GAAGslB,EAAU,GAAGx6B,EAAa,GAAG4E,CAAO,EAAG,IAAI,CAC1E,CAEA,IAAsBoS,aAA0B,CAC5C,GAAM,CAAEA,eAAgB,KAAKv+b,QACvB03X,EAAY00F,IAAuB7tB,EAAa,CAClDt2f,UAAW,KAAKA,UAChBC,QAAS,KAAKA,OAClB,GACA,OAAO,IAAIu0f,GAAW,CAAE,GAAG8B,EAAa,GAAG7mE,CAAU,EAAG,IAAI,CAChE,CAEA,IAAcyyD,gBAAmC,CAE7C,OACIpjX,GACI,KAAKq+W,WAAW4E,WAChB,KAAK5E,WAAWyE,UACpB,GAAKY,CALgC/mY,IAAU,IAK1C+mY,CAEb,CAEA,IAAc5N,SAA4B,CACtC,IAAMlhd,EAAS,KAAK4rd,YAAY5rd,QAAU,CAAC+nF,IAAU,IAAS,EACxD28Y,EAAgB,KAAKlW,eAC3B,MAAO,CACHzmX,KAAK/0J,IAAIgtD,EAAO,GAAI0ke,EAAc,EAAE,EACpC38X,KAAKh1J,IAAIitD,EAAO,GAAI0ke,EAAc,EAAE,CACxC,CACJ,CAEA,IAAsB3V,QAA2B,CAC7C,OAAO,KAAKjF,YAAYiF,OAAA,CAC5B,CAEA,IAAczU,OAAwB,CAClC,OAAO,KAAKmP,WAAWqD,iBAAiB,KAAK8V,YAAa,CACtD5T,OAAQ,KAAKA,MACjB,EACJ,CAEA,IAAc3V,OAAsB,CAChC,OAAO,KAAKoQ,WAAWwD,eAAe,KAAKrB,YAAa,CACpD1K,QAAS,KAAKA,QACd6N,OAAQ,KAAKA,MACjB,EACJ,CAEA,IAAsB6iC,YAAqB,CACvC,OAAO,KAAKv4C,MAAM5ob,KACtB,CAEA,IAAsBohe,cAAuB,CACzC,OAAO,KAAKH,kBACNzmZ,GAAQ,KAAK8lB,OAAOtgG,MAAQ,KAAO,CAAEz9E,IAAK,GAAID,IAAK,GAAI,GACvD,CACV,CAEA,IAAc66iB,gBAAsD,CAChE,GAAI,CAAC,KAAKvpd,QAAQsqd,iBAUd,MAAO,CACHyB,sBAV0B,KAAKvoF,OAAOxjd,KACrCwjd,EAAQ30d,IACL,IAAI80U,GAAe,CACf90U,QACAxH,MAAOm8d,EAAOC,WACd9pT,MAAO6pT,EAAOztB,YACdz+O,MAAOksQ,EAAOlsQ,KAClB,EAGJy0V,EACAT,6BAA8BjnC,EAClC,CAGR,CAEA,IAAsBopC,gBAAyB,CAC3C,MAAO,KAAO,KAAKhoC,YAAYr5b,KACnC,CAEA,IAAsBshe,gBAAyB,CAC3C,OAAO,KAAKQ,iBAAiBzhY,QACjC,CAEA,IAAsBkhY,cAAiC,CAUnD,MAAO,CATK,KAAKjhY,OAAOrqB,IAGpB,KAAKqqB,OAAO1d,OAEZ,KAAKs+Y,YAEL,KAAKI,eAAiB,CAEP,CACvB,CAEA,IACYE,qBAAkD,CAC1D,MAAO,CACH54C,UAAa,KAAKA,MAClB0V,WAAc,KAAKijC,aACnBxmO,SAAU,KAAKsmO,eACfzmF,aAAc,KAAKv6S,SACnBi6J,cAAet4L,GAAciU,IAC7BwlY,kBAAmB,CAAC,KAAK7nc,QAAQ86a,QACrC,CACJ,CAEA,IACY+yC,oBAAiD,CACzD,MAAO,CAAE/gN,WAAY,OAAQ,CACjC,CAEA,IACYghN,mBAAgD,CACxD,MAAO,CACHhhN,WAAY,MACZ8zM,8BACI,KAAK2N,qCACb,CACJ,CAEAl2Y,YAAoBhxK,EAAuB,CACvC,OAAO,KAAKs/gB,aAAanpE,kCAAkCn2c,EAC/D,CAEA,IAAsB0mjB,oBAA6B,CAY/C,OAXK,KAAK/td,QAAQsqd,iBAWX,IAAIpM,GARI,KAAK16E,OAAOxjd,IAAKwjd,GAC5B,KAAK+rF,2BACD/rF,EACCA,GAAWA,EAAOhod,MAAMnU,MACzB,CAAEmojB,eAAgB,EAAM,EAIDhsF,EAAQ,CACnC,GAAG,KAAKoqF,oBACR,GAAG,KAAKE,kBACRlN,8BACI,KAAK2N,qCACb,GAAG1P,SAhBwC,CAiB/C,CAEA,IAAsBmP,iBAAuC,CACzD,OAAO,IAAI9P,GAAoB,KAAKuQ,iBAAkB,CAClD,GAAG,KAAKb,oBACR,GAAG,KAAKE,iBACZ,EACJ,CAEA,IAAsBG,iBAA0B,CAC5C,OAAO,KAAKrF,iBACN,KAAKoF,gBAAgB5he,MACrB,KAAK4he,gBAAgB5P,WAC/B,CAEA,IAAsB8P,kBAAwC,CAC1D,OAAO,IAAIhQ,GAAoB,KAAKwQ,kBAAmB,CACnD,GAAG,KAAKd,oBACR,GAAG,KAAKC,kBACZ,EACJ,CAEA,IAAsBM,kBAA2B,CAC7C,OAAO,KAAKvF,iBACN,KAAKsF,iBAAiB9he,MACtB,KAAK8he,iBAAiB9P,WAChC,CAGA,IAAcgQ,qBAAkC,CAC5C,MAAO,CAAEvmb,KAAM,KAAKomb,gBAAiBhmb,MAAO,KAAKkmb,gBAAiB,CACtE,CAIA,IAAcE,cAAuC,CACjD,GAAI,KAAKjpC,WAAWp9Z,UAAUjmE,OAAQ,OACtC,IAAM0tgB,EAAiB,KAAKx5C,MAAMlwZ,OAAOu2a,eACnC,CAAC7B,EAAYi1B,GAAY,KAAKz5C,MAAMqkB,WACpCq1B,EAAgBF,EAChB,EACA,IAAOh1B,GAAYruc,OAAS,GAC5Bwje,EAAcH,EAAiB,EAAI,IAAOC,GAAUtje,OAAS,GACnE,MAAO,CACHy7C,KAAM,KAAKklY,OAAS4iD,EAAgB,KAAKjjY,OAAO7kD,KAChDI,MAAO,KAAKykD,OAAOzkD,OAAS,KAAK60a,KAAO8S,EAC5C,CACJ,CAEA,IACYtB,oBAAsC,CAC9C,OAAO,IAAIztiB,IAAI,KAAKqtiB,kBAAkBvP,oBAAsB,EAAE,CAClE,CAEA,IACY4P,uCAAsD,CAC9D,OAAO,KAAK/qF,OACPxjd,IAAKg/B,GAAMA,EAAEykb,UAAU,EACvBxod,MAAMkhT,EAAgBqyN,KACnB,IAGMqhC,EAAgB,KAAKvB,mBAAmB5hjB,IAAIyvT,GAC5C2zP,EAAgB,KAAKxB,mBAAmB5hjB,IAAI8hhB,GAMlD,OAHIqhC,GAAiB,CAACC,EAAsBC,GACxCD,GAAiB,CAACD,EAAsBG,EAErC,CACX,EACR,CAEA,IAAsBxB,sBAAmC,CACrD,IAAMtmjB,EAAS,KAAK83F,QAAQiwd,0BAC5B,MAAO,CACHpob,KAAM67B,KAAKh1J,IAAIxG,GAAQ2/H,MAAQ,EAAG,KAAKomb,eAAe,EACtDhmb,MAAOy7B,KAAKh1J,IAAIxG,GAAQ+/H,OAAS,EAAG,KAAKkmb,gBAAgB,CAC7D,CACJ,CAEA,IAAsBxjC,QAA2B,CAC7C,GAAM,CAAE9iZ,OAAMI,SAAU,KAAKumb,qBACvBP,EAAkBpmb,EAAOklb,GACzBoB,EAAmBlmb,EAAQ8kb,GAC3BmD,EAAiB,KAAKzqC,YAAYr5b,MAGlC+je,EAAY,KAAK1qC,YAAYr3gB,EAAI,KAAKm/iB,WAAaU,EACnDmC,EAAU,KAAK3qC,YAAYx9Y,MAAQkmb,EAGzC,GAAI,KAAKnud,QAAQytZ,UAAY,KAAKA,SAC9B,MAAO,CAAC0iE,EAAWC,CAAO,EAG9B,IAAMj8gB,EAAS,IACX44d,EAAS,KAAK0Y,YAAYr3gB,EAAI+lC,EAAS+7gB,EACvCpT,EAAO,KAAKr3B,YAAYx9Y,MAAQ9zF,EAAS+7gB,EAG7CnjD,EAASrpW,KAAKh1J,IAAIq+f,EAAQojD,GAC1BrT,EAAOp5Y,KAAK/0J,IAAImuiB,EAAMsT,GAGtB,IACMhqO,EACF8pO,EACA,KAAK3C,WACLU,EACAE,EACEkC,EAAaplZ,GAAmB,KAAKyhB,OAAO7kH,OAC5Cyof,EAAgB5sZ,KAAK/0J,IAAI0hjB,EAAYjqO,GAErCmqO,EAAoBzT,EAAO/vC,EACjC,GAAIwjD,EAAoBD,EAAe,CACnC,IAAM/gb,EAAUghb,EAAoBD,EACpCvjD,GAAUx9X,EAAU,EACpButa,GAAQvta,EAAU,CACtB,CAEA,MAAO,CAACw9X,EAAQ+vC,CAAI,CACxB,CAEA,IAAsBrvD,UAAoB,CACtC,OAAO,KAAK/gU,OAAOtgG,SACvB,CAEA,IAAsBw8d,kBAA4B,CAC9C,MAAO,CAAC,CAAC,KAAK5od,QAAQm6Z,cAAgB,KAAK1M,QAC/C,CAEA,IAAsBppB,oBAAmC,CACrD,IAAMA,EAAmC,GAiBzC,OAdI,KAAK+qF,mBACL/qF,EAAmBv0d,KAAK,KAAKs/iB,iBAAiB,EAG9C,KAAKpvd,QAAQ+pd,wBACb1lF,EAAmBv0d,KAAA,GACZ,KAAK0zd,OACHxjd,IAAKg/B,GAAMA,EAAEykb,UAAU,EACvBjsa,OAAQ3uD,GACL,KAAKm3F,QAAQ+pd,wBAAwBp5W,SAAS9nM,KAKvDw7d,CACX,CAEAkrF,2BACI/rF,EACAj4W,EACA,CACIikc,iBACAgB,kBAKO,CACX,GAAM,CAAE/sF,aAAY1tB,cAAaz+O,QAAOrmC,cAAeuyS,EACjDn8d,EAAQkkH,EAASi4W,GACjBy3D,EAAiB,KAAK5iX,YAAYhxK,GACxC,MAAO,CACHiwN,QACAmsQ,aACAxyS,WAAYu/X,EAAiBv/X,EAAan+B,OAC1C6mB,MAAO61Y,EAAiBz5G,EAAcklF,EACtCA,eAAgBu0B,EAAiBv0B,EAAiBnoY,OAClD80Y,6BAA8B,KAAKghB,iBACnCzJ,OAAQ93iB,EACR69V,SAAUu+K,GAAgB,CACtB13X,MAAOy3U,EAAOz3U,MACdy4U,MAAO,KAAK+mF,oBAAoB/nF,EACpC,EACJ,CACJ,CAEA,IAAsBirF,kBAAkC,CACpD,GAAM,CAAEM,kCAAmCS,GAAmB,KAC9D,OAAO,KAAKhsF,OAAOxjd,IAAKwjd,GACpB,KAAK+rF,2BACD/rF,EACCA,GAAWA,EAAOhod,MAAMnU,MACzB,CAAEmojB,gBAAe,GAG7B,CAEA,IAAsBd,mBAAmC,CACrD,OAAO,KAAKlrF,OAAOxjd,IAAKwjd,GACpB,KAAK+rF,2BACD/rF,EACCA,GAAWA,EAAOj9a,IAAIl/C,MACvB,CACImojB,eAAgB,KAAKxvd,QAAQsqd,iBAC7BkG,eAAgB,CAAC,KAAK5H,gBAC1B,GAGZ,CAEA,IAAsB+F,uBAAgC,CAClD,OAAO7nF,GAAc,GAAI,KAAKr6S,QAAQ,CAC1C,CAEA,IAAsBmiY,oBAA8B,CAChD,IAAM6B,EAA0B,KAAKrrC,WAAW5hD,OAAO39V,KAClD29V,GAAWA,EAAOhod,MAAMnU,QAAU,GAEjCqpjB,EAAiB,KAAK7zC,QAAQ,IAAM,GAAK,KAAKA,QAAQ,IAAM,EAElE,MACI,CAAC,KAAKuI,WAAWhR,gBACjBq8C,GACAC,CAER,CAEA,IAAsB7B,eAAwB,CAC1C,OAAO,KAAKzpC,WAAWrhD,SAAS,EAAE,CAACrmB,cAAc,EACrD,CAEA,IAAsBoxG,oBAA6B,CAG/C,OAFK,KAAKF,mBAEH9iY,EAAOo6J,QAAQ,KAAK2oO,cAAe,CACtCpiY,SAAU,KAAKkiY,qBACnB,GAAGvie,MAJkC,CAKzC,CAEAq7Y,mBAA6B,CACzBllU,GAAuB,IAAI,CAC/B,CAEA,IAAsBwsZ,mCAA6C,CAC/D,OAAO,KAAKhB,oBAAsB,GAAK,CAAC,CAAC,KAAK/td,QAAQsqd,gBAC1D,CAEsB0E,sBAClBngiB,EACI,CACJ,IAAMiT,EAAM,KAAKk+D,QAAQ9uE,MAAM5lB,QAC3Bw2B,IAAK,KAAKo/gB,aAAalsd,SAAWusE,GAAiBz/H,EAAKjT,GAChE,CAEA8hiB,mBAA2B9hiB,EAAmC,CAC1D,IAAMiT,EAAM,KAAKuthB,aAAa/jjB,QAC9B,GAAI,CAACw2B,EAAK,OAEV,IAAM8/d,EAAQrgW,GAAiBz/H,EAAKjT,GACpC,KAAK+hiB,WAAatjD,0BAAA,CACd,GAAI,KAAKwY,aAAah3gB,SAAW,EAAG,OAEpC,IAAM+hjB,EAAc,IAAIhxiB,IACxB,IAAK,IAAM2jd,KAAU,KAAKsiD,aACtB+qC,EAAYrkjB,IACRg3d,EACAtjU,GAAY4wZ,iCACRlvD,EACAp+B,EAAOlgI,WACPkgI,EAAOgpF,QACX,GAIR,IAAMuE,EAAejygB,GAAQ,KAAKgne,aAAe9me,GAC7C6xgB,EAAYpkjB,IAAIuyC,IAEdgygB,EAAaH,EAAYpkjB,IAAIskjB,GAI/BA,GAAgBC,EAAaC,IAC7B,KAAKhC,iBAAiB8B,GAEtB,KAAK7B,mBAAA,CAEb,EACJ,CAEAzF,WACsBwF,iBAAiBzrF,EAAgC,CACnE,KAAK4hD,WAAWqB,WAAWhlK,MAAA,EAC3Bv3M,aAAa,KAAKu/Y,UAAU,EAC5B,KAAK2F,kBAAoB5rF,EAAOC,WAChC,KAAKy9E,aAAanwiB,OAAS,CAAEyyd,QAAO,CACxC,CAEc2kF,0BAA0B1kF,EAA8B,CAClE,IAAMD,EAAS,KAAKA,OAAO1+T,KAAM9lH,GAAMA,EAAEykb,aAAeA,GACpDD,GAAQ,KAAKyrF,iBAAiBzrF,EACtC,CAEsB0rF,oBAA2B,CAC7C,KAAKE,kBAAoBt8Z,OACzB,KAAKouZ,aAAanwiB,OAAS,IAC/B,CAEsBo+iB,6BAAoC,CACtDjlZ,aAAa,KAAKu/Y,UAAU,EAI5B,KAAKA,WAAa/mZ,OAAOvuF,eAAA,CACrB,KAAK+6e,mBAAA,CACT,EAAG,IACP,CAEc5G,2BAAkC,CAC5C,KAAK6G,4BAAA,CACT,CAEAyB,WACc1qW,YAAYr3L,EAAmC,CACzD,KAAKmgiB,sBAAsBngiB,GAC3B,KAAK8hiB,mBAAmB9hiB,EAC5B,CAEc05L,cAAqB,CAC3B,KAAKqoW,aAAe99Z,QAAWs6W,qBAAqB,KAAKwjD,UAAU,EAEvE,KAAK1B,mBAAA,CACT,CAEA,IAAsB5lH,SAA0C,CAC5D,GAAM,CACFtpW,QAAS,CAAEo0a,kBACX8sC,aAAc,CAAEnwiB,SAAQikF,WAAUysd,UAClC96B,eACA1+e,YACAC,WACA,KAEE,CAAEs7b,UAAWzyd,GAAU,CAAC,EAC9B,GAAI,CAACyyd,EAAQ,OAEb,IAAM5lB,EAAc9la,GAAe6ue,EAAa/oE,WAAW9la,GAErDo/G,EAAQssU,EAAOztB,YACf22B,EAAkBlJ,EAAOvyS,WAEzBigY,EAAkB1tF,EAAOhod,MAAMikc,aAC/B0xG,EAAgB3tF,EAAOj9a,IAAIk5Z,aAC3B2xG,EAAYh9C,EACZ,oBAAoBuS,EAAa/oE,WAAWszG,GAAiB,OAAOvqC,EAAa/oE,WAAWuzG,KAC5FxqC,EAAa3oE,qBAAqBkzG,EAAiBC,GAiCnDE,OA5BA,CAGF,IAAMC,EAAuB9tF,EAAOhod,MAAMikc,eAAiBx3a,EACrDsphB,EAAqB/tF,EAAOj9a,IAAIk5Z,eAAiBv3a,EAEvD,GAAI,CAACophB,GAAwB,CAACC,EAC1B,MAAO,CACHxgjB,OAAQ,GAAG6sc,EAAW31a,GAAW,OAAO21a,EAAW11a,KACnD4ic,OAAQ,EACZ,EACG,GAAI,CAACwmF,EACR,MAAO,CACHvgjB,OAAQ6sc,EAAW31a,GACnB3W,SAAUssb,EAAWszG,GACrBpmF,OAAQ,EACZ,EACG,GAAKymF,GACR,MAAO,CACHxgjB,OAAQ6sc,EAAW11a,GACnB5W,SAAUssb,EAAWuzG,GACrBrmF,OAAQ,EACZ,CAIR,EAE6B0mF,GAsBvBz6M,EAASxwM,GAAiB,CArBR8qZ,EAClB,CACIv6R,KAAM8wM,GAAkBsF,OACxBhpZ,KAAM2mZ,GACFwmF,EAAqBtgjB,OACrB,CACI+5d,OAAQumF,EAAqBvmF,OAC7BrrB,aAAc4xG,EAAqB//hB,QACvC,EAER,EACAwhI,OACiB0wU,EAAO9lZ,OAAOw9X,2BAC/B,CACIpkL,KAAM8wM,GAAkBwF,KACxBlpZ,KAAM6mZ,GACF,CAACvH,EAAO9lZ,OAAOygG,qBAAqB,EACpC,CAAE2sT,OAAQ,CAACspC,CAAe,EAElC,EACAthX,MAC2D,GAE3Dh9H,EAASs+e,EACT,CAAC5wC,EAAOj9a,IAAIl/C,KAAK,EACjB,CAACm8d,EAAOhod,MAAMnU,MAAOm8d,EAAOj9a,IAAIl/C,KAAK,EAE3C,OACIooN,SAACi6O,GAAD,CACI1hc,GAAI,KAAK2/b,UACT2lC,eAAgB,KAAK/5d,MAAM6xgB,WAAWplb,QACtC5xF,EAAG4mF,EAAS5mF,EACZmwD,EAAGy2B,EAASz2B,EACZo2I,QAAS,GACTD,QAAS,IACTj1G,MAAO,CAAE0nP,SAAU,OAAQ,EACpBjwL,QACUw1U,kBACjBj1U,SAAU25Z,EACVzkF,eAAgB0kF,EAAuB,SAAWv+Z,OAClD85U,SAAU60E,EACF1qM,SACRokJ,YAAgB,KAAK+lD,aAAanwiB,OAAS,KAE3C0zG,UAAAgrG,SAACq5Q,GAAD,CACInvT,MAAO6pT,EAAO9lZ,OAAOq4X,YACrBt5a,KAAM+mc,EAAO9lZ,OAAOy9X,YACpBrlb,OAAQq1c,GAAyBr1c,EAAQ0tc,EAAO9lZ,MAAM,EACtDsrZ,MAAO5wT,GACHtiJ,EAAO,GACPA,EAAO,GACNzuB,GAAUm8d,EAAO9lZ,OAAOwlQ,iBAAiB77U,IAE9Cohe,aAAa,WAChB,EACI,EAEjB,CAEAgpF,qBAA6BjuF,EAAqC,CAC9D,GAAM,CAAEztB,cAAav6b,QAAO+qC,OAAQi9a,EAE9Bv7b,EAAY,KAAK0+e,aAAa/oE,WAAW,KAAK31a,SAAS,EACvDC,EAAU,KAAKy+e,aAAa/oE,WAAW,KAAK11a,OAAO,EAGzD,GAAI1sB,GAAOnU,QAAUyrJ,QAAavsG,GAAKl/C,QAAUyrJ,OAC7C,MAAO,GAAGijT,EAAY,IAAI9ta,EAAU,KAAKC,EAAQ,GAC9C,GAAI1sB,GAAOnU,QAAUyrJ,OACxB,MAAO,GAAGijT,EAAY,IAAI9ta,EAAU,GACjC,GAAIse,GAAKl/C,QAAUyrJ,OACtB,MAAO,GAAGijT,EAAY,IAAI7ta,EAAQ,GAOtC,IAAMwphB,EACFl2iB,EAAMikc,eAAiB,KAAKx3a,UAC1B0phB,EAA+BprgB,EAAIk5Z,eAAiB,KAAKv3a,QAS/D,OARIwphB,GAAkCC,EAC3B,GAAG57G,EAAY,IAAI9ta,EAAU,KAAKC,EAAQ,GAC1CwphB,EACA,GAAG37G,EAAY,IAAI9ta,EAAU,GAC7B0phB,EACA,GAAG57G,EAAY,IAAI7ta,EAAQ,GAG/B6ta,CACX,CAEA67G,qBAA8D,CAC1D,GAAI,CAAC,KAAKvE,kBAAmB,OAE7B,IAAM3gY,EAAS,IAAIZ,EACf,KAAK25V,YAAYx9Y,MAAQ+kb,IACzB,KAAKtgY,OAAOrqB,IACZ,KAAKmrZ,aACL,KAAK9gY,OAAO7kH,MAChB,EAIMu+c,EAAc,KAAKgnC,aACpBptiB,IAAKwjd,GAAW,KAAKiuF,qBAAqBjuF,IAC1C75V,QAAA,EAEL,OACI8lF,SAACu8V,IAAD,CACiB5lC,cACL15V,SACR/9C,MAAOuf,GAAgBjmB,MACvB++V,aAAc,KAAKv6S,QACtB,EAET,CAEAolY,cAAuB,CACnB,OACIpiW,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,UACdt+C,SAAA,KAAK03b,aAAan8hB,IAAKwjd,IACpB/zQ,SAACi9V,IAAD,CAEYlpF,SACR+hF,UAAW7oC,IACX5lO,YAAa,KAAK4vQ,gBAClB/5G,aAAc,EACjB,EALQ62B,EAAOC,UAKf,EAEN,EAEX,CAEAquF,yBAAsD,CAClD,OACI56Q,UAAC,IAAD,CACIp1Q,IAAK,KAAKuthB,aACVnpW,YAAa,KAAKA,YAClB8B,YAAa,KAAK9B,YAClB+B,aAAc,KAAK/B,YACnBqC,aAAc,KAAKA,aALvB9jG,SAAA,EAOIgrG,SAAC,OAAD,CACIrhN,EAAG+5J,EAAY,KAAK4kW,MAAM,EAC1Bxuc,EAAG4pG,EAAY,KAAKukB,OAAOnuH,CAAC,EAC5B6tB,MAAO+7E,EAAY,KAAK20Y,KAAO,KAAK/vC,MAAM,EAC1Cllc,OAAQsgG,EAAY,KAAKukB,OAAO7kH,MAAM,EACtC49e,YAAa,CAChB,GACA,KAAKoM,aAAA,CACP,C,EAEX,CAEAE,gBAAoD,CAChD,GAAI,CAAC,KAAKnD,mBAAoB,OAAO,KAErC,IAAMoD,EAAYtuZ,KAAK/0J,IAAI,IAAM,KAAKs/iB,gBAAiB,IAIjDgE,EACFlF,GAA0B,KAAKkB,gBAAkB+D,EAG/CE,EACF,KAAKnlD,OACL,KAAKrgV,OAAO7kD,KACZ,KAAKinb,mBACL7B,IACEr+N,EAAYlrL,KAAK/0J,IAAIsjjB,EAAkBC,GAEvCC,EAAW,KAAKplD,OAASn+K,EACzBwjO,EAAY1uZ,KAAK/0J,IACnB,KAAKmuiB,KAAOluN,EACZ,KAAK62L,YAAYx9Y,KACrB,EACMoqb,EAAgB,KAAKnF,0BAA0B1gjB,IAAI,CACrD4B,EAAG+jjB,EACH/le,MAAOgme,EAAYD,CACvB,GAEM7lB,EAAS6lB,EAAWlF,IAE1B,OACI/1Q,UAAAsxC,WAAA,CAAA/jO,SAAA,CACK,CAAC,KAAKuwZ,MAAM+gB,gBACTtmU,SAAC6iW,GAAD,CACI5lY,OAAQ2lY,EACR7/W,KAAM,KAAKwiU,MACXn+N,OAAO,OACPm2D,gBAAgB,KACnB,IAELv9I,SAAC,OAAD,CACIrhN,EAAG+5J,EAAYmkY,GACf/te,EAAG4pG,EAAY,KAAK6sW,MAAM6f,MAAM,IAChC/nL,WAAW,MACX1qD,GAAItwI,GAAY1jB,GAAc2jB,MAAM,EACpC0a,SAAU,KAAKkiY,sBACft9hB,KAAM6jR,GAELzwL,SAAA,KAAKoqc,aACJ,EACR,GAEV,CAEA0D,iBAAqD,CAKjD,GAJI,CAAC,KAAKntC,WAAWyB,YAIjB,KAAK5Q,MAAMlwZ,OAAOu2a,eAAgB,OAAO,KAE7C,IAAM7vW,EAAWq6S,GAAc,GAAI,KAAKr6S,QAAQ,EAE1C+lY,EAAW,gCACXC,EAAY,WAEZC,EAAgB5mY,EAAOo6J,QAAQssO,EAAU,CAAE/lY,UAAS,GAAGrgG,MACvDume,EAAiB7mY,EAAOo6J,QAAQusO,EAAW,CAAEhmY,UAAS,GAAGrgG,MAGzDwme,EAAQ,KAAK9V,KAAO,KAAK/vC,OACzB,CAAC8lD,EAAgBC,GAAgB,KAAK78C,MAAMqkB,WAC5Cy4B,EAAc,IAAOF,GAAgBzme,OAAS,GAE9C+6P,EAAWyrO,EADI,IAAOE,GAAc1me,OAAS,GACX2me,EAAc,GAIhDC,EACFN,GAAiBvrO,EACXqrO,EACAG,GAAkBxrO,EAChBsrO,EACA,KAEZ,GAAI,CAACO,EAAc,OAAO,KAG1B,IAAMC,GAAQ,KAAKlmD,OAAS,KAAK+vC,MAAQ,EACnCv+e,EACF,KAAK4uf,gBAAgBn+Y,OACrB89Y,GACA,KAAK72C,MAAMghB,aAEf,OACIxnU,SAAC,OAAD,CACIrhN,EAAG+5J,EAAY8qZ,GACf10f,EAAG4pG,EAAY5pG,GACLkuH,WACVqgL,WAAW,SACXz7U,KAAM6jR,GACNi2C,UAAU,SAET1mO,SAAAuuc,CACC,EAEd,CAEAE,aAAiD,CAC7C,OACIh8Q,UAAAsxC,WAAA,CAAA/jO,SAAA,CACK,KAAKstc,eAAA,EACL,KAAKQ,gBAAA,CACR,GAEV,CAEAY,aAA0C,CACtC,OACI1jW,SAACo9V,IAAD,CACIr6W,KAAM,KAAKyjU,MACXvpV,OAAQ,KAAKygY,gBACb59a,QAASu9a,EACZ,EAET,CAEAsG,2BAAwD,CACpD,OACI3jW,SAACysV,GAAD,CACIrviB,MAAO,KAAKqhjB,iBACZ9/iB,EAAG,KAAKu8gB,OAAO,GAAKoiC,GACpBtU,QAAS,GACTxqC,aAAc,KAAKk6C,0BACnB5/V,aAAc,KAAK+/V,0BACnBloM,YAAa,CAAC,KAAKpgR,QAAQ86a,QAC9B,EAET,CAEAu4C,0BAA8D,CAE1D,GAAI,KAAKrzd,QAAQo0a,eAAgB,OAAO,KAExC,IAAMk/C,EAAc,IAAIzyiB,IACpB,KAAK4tiB,iBAAiBzuiB,IAAKwjd,GAAWA,EAAO27E,MAAM,GAsBvD,OAnBImU,EAAY1xiB,OAAS,GAAK0xiB,EAAY5mjB,IAAI,IAKtC+iN,SAACi9O,GAAD,CAAM1kc,GAAG,oBAAoBykL,SAAU,KAAKihY,eACxCjpc,UAAAgrG,SAAC,OAAD,CACIrhN,EAAG+5J,EAAY,KAAK4kW,MAAM,EAC1Bxuc,EAAG4pG,EAAY,KAAK6sW,MAAM6f,MAAM,IAChC/nL,WAAW,MACX3qD,GAAI,GACJC,GAAItwI,GAAY1jB,GAAc2jB,MAAM,EACpC0a,SAAU,KAAKihY,eAEdjpc,SAAA,KAAK4zD,YAAY,EAChB,EACJ,IAIVo3C,SAACysV,GAAD,CACIrviB,MAAO,KAAKmhjB,gBACZ5/iB,EAAG,KAAKu8gB,OAAO,GAAKoiC,GACpBtU,QAAS,GACTxqC,aAAc,KAAKk6C,0BACnB5/V,aAAc,KAAK+/V,0BACnBloM,YAAa,CAAC,KAAKpgR,QAAQ86a,QAC9B,EAET,CAEAy4C,sBAA+D,CAC3D,OACIr8Q,UAAAsxC,WAAA,CAAA/jO,SAAA,CACK,KAAK4uc,yBAAA,EACL,KAAKD,0BAAA,CACR,GAEV,CAEA1L,mBAAgD,CAC5C,OACIxwQ,UAAC,IAAD,CACIhxF,YAAa,KAAK8oW,sBAClB/mW,aAAc,KAAK+mW,sBACnBhnW,YAAa,KAAKgnW,sBAHtBvqc,SAAA,EAKIgrG,SAAC,OAAD,CAAM,GAAI,KAAK/iC,OAAO+uV,QAAA,EAAWgqC,YAAa,CAAI,GACjD,KAAKyN,YAAA,EACL,KAAKC,YAAA,EACL,KAAKrB,wBAAA,EACL,KAAKyB,qBAAA,EACL,KAAK3B,oBAAA,EACL,KAAKtoH,OACP,C,EAEX,CAEAm+G,cAA2C,CACvC,OACIvwQ,UAAAsxC,WAAA,CAAA/jO,SAAA,CACK,KAAKyuc,YAAA,EACL,KAAKC,YAAA,EACL,KAAKtB,aAAA,EACL,KAAK0B,qBAAA,CACR,GAEV,CAEAzuW,QAAkB,CAUd,OATI,KAAKsgU,WAAWp9Z,UAAUjmE,QAEtB0tK,SAAC2xT,GAAD,CACIphb,QAAS,KAAKA,QACd0sF,OAAQ,KAAKn5K,MAAMm5K,OACnB/2J,QAAS,KAAKyvf,WAAWp9Z,UAAUjmE,MACtC,GAGF,KAAKi+C,QAAQ86a,SACd,KAAK2sC,aAAA,EACL,KAAKC,kBAAA,CACf,C,aACJ,GC1pCA,SAAgB8L,GAA2B,EAA2B,CAClE,OAAOliH,GAAc,2BAA4BE,CAAQ,CAC7D,CCHA,IAAI18M,GAAc2+T,GAAU,EACxB1gM,GAAO,GAAOrgE,GAASlvT,EAAIsxP,EAAW,EACtC4+T,GAAaD,GAAU,EAC3B,GAAI,MAAS,GAAO/gQ,GAASlvT,EAAIkwjB,EAAU,EAC3C,IAAIC,GAAeF,GAAU,EAC7B,GAAI,QAAW,GAAO/gQ,GAASlvT,EAAImwjB,EAAY,EAC/C,IAAIC,GAAeH,GAAU,EAC7B,GAAI,QAAW,GAAO/gQ,GAASlvT,EAAIowjB,EAAY,EAC/C,IAAIC,GAAgBJ,GAAU,EAC9B,GAAI,SAAY,GAAO/gQ,GAASlvT,EAAIqwjB,EAAa,EACjD,IAAIC,GAAW,CAAC,EAChB,GAAI,YAAc,EAAS,IAAO,CAChC,IAAMh8gB,EAAOi7U,GAAI,IAAI,EAAI5lN,EACnBjsC,MAAe,CACnB,IAAMnxH,EAAI+jjB,GAAS,UAAW,GAAM71f,EAAE,QAAUijE,CAAM,EAClD,CAACnxH,GAAG+jjB,GAAS,OAAO/jjB,EAAG,CAAC,EAC5B,IAAgB,IAACA,CACnB,EACM+4C,EAAU,CAAE,OAAM,UAAS,QAAO,EAIxC,OAHAgrgB,GAAS,OAAOC,IAAYj8gB,CAAI,EAAG,EAAGgR,CAAO,EAC7C,IAAgB,EAChBttC,IAAM,EACCstC,CACT,EACA,IAAIirgB,IAAe,GAAS,EAAE,CAACD,GAAS,UAAW,GAAM,EAAE,KAAOh8gB,CAAI,GAAK,CAACg8gB,GAAS,QACrF,GAAI,OAAU,GAAO,CACnBH,GAAa,OAAOnwjB,CAAE,EACtBowjB,GAAa,OAAOpwjB,CAAE,EACtBqwjB,GAAc,OAAOrwjB,CAAE,EACvBsxP,GAAY,OAAOtxP,CAAE,EACrBkwjB,GAAW,OAAOlwjB,CAAE,CACtB,EACA,GAAI,KAAQ,GAAO,CACjB,GAAO,GACPuvX,GAAI,eAAevvX,CAAE,EACrB,GAAO,EACT,EACA,GAAI,SAAY,GAAO,CACrB,IAAI48H,EACJ,SAAS4zb,GAAW,CAClB,GAAI,CACFxwjB,EAAG,GAAG48H,CAAQ,CAChB,QAAU,CACR,EAAW,IACb,CACF,CACA,SAAS6zb,EAAU,GAAGtniB,EAAM,CAC1B,EAAWA,EACXomW,GAAI,QAAQihM,CAAQ,CACtB,CAMA,MALA,GAAU,QAAUxwjB,EACpB,EAAU,WAAe,CACvBmwjB,GAAa,OAAOK,CAAQ,EAC5B,EAAW,IACb,EACOC,CACT,EACA,IAAIC,GAAY,OAAO,OAAU,IAAc,OAAO,2BAE9C,CACN,GAEF,GAAI,IAAO,GAAS,GAAYlgf,EAChC,GAAI,IAAM,OAAO,YAAe,QAAoB,YAAY,IAAI,EAAI,KAAK,IAC7E,GAAI,eAAkB,GAAOxwE,EAAG,EAChC,GAAI,MAAQ,QAAQ,MACpB,GAAI,UAAY,SAChB,GAAI,YAAgB,CACduvX,GAAI,YAAc,SAKpBohM,IAAO,EAJP,QAAQ,KACN,kFACF,CAIJ,EACA,IAAIzrd,GAAK,GACLnvB,GAAe,EACf66e,GAAO,GACX,SAAS1hQ,GAAS,EAAI,EAAO,CACvB0hQ,IACFprU,EAAM,OAAOxlP,CAAE,EACfA,EAAG,CAAC,IAEJwlP,EAAM,IAAIxlP,CAAE,EACZgY,IAAM,EAEV,CACA,SAASA,KAAQ,CACXktF,GAAK,IACP,GAAK,EACDqqR,GAAI,YAAc,UACpBmhM,GAAUG,GAAI,EAGpB,CACA,SAASn1iB,KAAO,CACd,GAAK,EACP,CACA,SAASm1iB,KAAO,CACV,CAAC3rd,KACHwrd,GAAUG,GAAI,EACdthM,GAAI,eAAe1pM,GAAM,EAE7B,CACA,SAASA,KAAS,CAChB,IAAMirY,EAAS5rd,GACf,GAAKqqR,GAAI,IAAI,EACb,IAAMplU,EAAQomgB,IAAYrrd,EAAE,EACxB/6C,IACF4mgB,IAAWT,GAAS,OAAO,EAAGnmgB,CAAK,EAAI,GAAMsQ,EAAE,QAAQ,CAAC,EACxD,IAAgBtQ,GAEb4rB,IAILo6e,GAAa,MAAM,EACnB7+T,GAAY,MAAMw/T,EAAS,KAAK,IAAI,GAAI5rd,GAAK4rd,CAAM,EAAI,MAAM,EAC7DV,GAAa,MAAM,EACnBF,GAAW,MAAM,EACjBG,GAAc,MAAM,GAPlB30iB,IAAK,CAQT,CACA,SAASu0iB,IAAY,CACnB,IAAIz0iB,EAAuB,IAAI,IAC3B1T,EAAU0T,EACd,MAAO,CACL,IAAI,EAAI,CACN,IAAgB,KAAWA,GAAQ,CAACA,EAAK,IAAIxb,CAAE,GAC/Cwb,EAAK,IAAIxb,CAAE,CACb,EACA,OAAO,EAAI,CAET,MADA,KAAgB8H,GAAW0T,GAAQA,EAAK,IAAIxb,CAAE,EAAI,EAAI,EAC/Cwb,EAAK,OAAOxb,CAAE,CACvB,EACA,MAAM,EAAK,CACL8H,EAAQ,OACV,EAAuB,IAAI,IAC3B,IAAgBA,EAAQ,KACxBipjB,IAAWjpjB,EAAU,GAAO9H,EAAGk6D,CAAG,GAAK1+C,EAAK,IAAIxb,CAAE,CAAC,EACnD,IAAgBwb,EAAK,KACrB,EAAUA,EAEd,CACF,CACF,CACA,SAASu1iB,IAAW,EAAQ,EAAM,CAChCz+hB,EAAO,QAAS,GAAU,CACxB,GAAI,CACF0+hB,EAAKntjB,CAAK,CACZ,OAAS,EAAG,CACV0rX,GAAI,MAAM,CAAC,CACb,CACF,CAAC,CACH,CC3JA,IAAI5xS,IAAY,OAAO,eACnBsze,KAAY,EAAQ,IAAQ,CAC9B,IAAK,IAAI5rjB,KAAQ2vN,EACfr3I,IAAUpwE,EAAQlI,EAAM,CAAE,IAAK2vN,EAAI3vN,GAAO,WAAY,EAAK,CAAC,CAChE,EAGI6rjB,GAAkB,CAAC,EACvBD,IAASC,GAAiB,CACxB,WAAc1xc,IACd,WAAcsiM,GACd,6BAAgCqvQ,GAChC,kBAAqBC,IACrB,OAAUnhf,IACV,gBAAmBohf,EACrB,CAAC,EAID,SAASpxc,IAAO,CAChB,CACA,IAAIqxc,KAAgB,EAAK,EAAK,IAAU,OAAO,eAAe5ljB,EAAK9H,EAAK,CAAE,QAAO,SAAU,GAAM,aAAc,EAAK,CAAC,EACjHu+O,GAAK,CACP,IAAK,MAAM,QACX,IAAM,GAAM,CAAC,CAACp4N,GAAKA,EAAE,YAAY,OAAS,SAC1C,IAAM,GAAM,OAAOA,GAAM,WACzB,IAAM,GAAM,OAAOA,GAAM,SACzB,IAAM,GAAM,OAAOA,GAAM,SACzB,IAAM,GAAMA,IAAM,IAAK,EACzB,EACA,SAASo1G,GAAQ,EAAG,EAAG,CACrB,GAAIgjH,GAAG,IAAIp4N,CAAC,EAAG,CACb,GAAI,CAACo4N,GAAG,IAAIn4N,CAAC,GAAKD,EAAE,SAAWC,EAAE,OAAQ,MAAO,GAChD,IAAK,IAAIzd,EAAI,EAAGA,EAAIwd,EAAE,OAAQ,IAC5B,GAAIA,EAAExd,KAAOyd,EAAEzd,GAAI,MAAO,GAE5B,MAAO,EACT,CACA,OAAOwd,IAAMC,CACf,CACA,IAAIgniB,IAAQ,EAAK,IAAOtljB,EAAI,QAAQ1L,CAAE,EACtC,SAASuxjB,GAAS,EAAK,EAAI,EAAK,CAC9B,GAAIpvU,GAAG,IAAIz2O,CAAG,EACZ,IAAK,IAAIa,EAAI,EAAGA,EAAIb,EAAI,OAAQ,IAC9B1L,EAAG,KAAK+2C,EAAKrrC,EAAIa,GAAI,GAAGA,GAAG,OAI/B,IAAK,IAAM3I,KAAO8H,EACZA,EAAI,eAAe9H,CAAG,GACxB5D,EAAG,KAAK+2C,EAAKrrC,EAAI9H,GAAMA,CAAG,CAGhC,CACA,IAAI+sR,GAAW,GAAMxuC,GAAG,IAAIp4N,CAAC,EAAI,CAAC,EAAIo4N,GAAG,IAAIp4N,CAAC,EAAIA,EAAI,CAACA,CAAC,EACxD,SAASmxB,GAAM,EAAO,EAAU,CAC9B,GAAIsqM,EAAM,KAAM,CACd,IAAMjpO,EAAQ,MAAM,KAAKipO,CAAK,EAC9BA,EAAM,MAAM,EACZwrU,GAAKz0iB,EAAOhC,CAAQ,CACtB,CACF,CACA,IAAIi3iB,IAAc,EAAO,GAAGroiB,IAAS+xB,GAAMsqM,EAAQ,GAAOxlP,EAAG,GAAGmpB,CAAI,CAAC,EACjEstW,OAAc,OAAO,OAAW,KAAe,CAAC,OAAO,WAAa,8BAA8B,KAAK,OAAO,UAAU,SAAS,EAGjI06L,GACAlhf,IACA6xO,GAAS,KACTsvQ,IAAgB,GAChBC,GAAcpxc,GACdT,IAAU,GAAY,CACpBiyc,EAAQ,KAAI,IAAKA,EAAQ,IACzBA,EAAQ,MAAK,GAAI,IAAMA,EAAQ,KAC/BA,EAAQ,SAAW,IAAK,KAAG,GAASA,EAAQ,QAC5CA,EAAQ,eAAiB,OAAM,IAAgBA,EAAQ,eACvDA,EAAQ,2BACV,GAA2BA,EAAQ,0BACjCA,EAAQ,uBAAuBliM,GAAI,IAAIkiM,EAAQ,qBAAqB,EACpEA,EAAQ,iBAAgB,GAAI,eAAiBA,EAAQ,gBACrDA,EAAQ,cAAa,GAAcA,EAAQ,aAC3CA,EAAQ,YAAW,GAAI,UAAYA,EAAQ,UACjD,EAIIC,GAA6B,IAAI,IACjCC,GAAe,CAAC,EAChBC,GAAY,CAAC,EACbj5d,GAAW,EACXk5d,GAAY,CACd,IAAI,MAAO,CACT,MAAO,CAACH,GAAW,MAAQ,CAACC,GAAa,MAC3C,EAEA,MAAM,EAAW,CACXh5d,GAAWmnL,EAAU,UACvB4xS,GAAW,IAAI5xS,CAAS,EACxByvG,GAAK,QAAQuiM,GAAe,IAE5BC,IAAYjyS,CAAS,EACrByvG,GAAKyiM,EAAO,EAEhB,EAEA,WAEA,KAAK,EAAW,CACd,GAAIr5d,GACF42R,GAAK,YAAcsiM,GAAU,KAAK/xS,CAAS,CAAC,MACvC,CACL,IAAMmyS,EAAYN,GAAa,QAAQ7xS,CAAS,EAC5C,CAACmyS,IACHN,GAAa,OAAOM,EAAW,CAAC,EAChCC,IAAcpyS,CAAS,EAE3B,CACF,EAMA,OAAQ,CACN,GAAe,CAAC,EAChB4xS,GAAW,MAAM,CACnB,CACF,EACA,SAASI,KAAkB,CACzBJ,GAAW,QAAQK,GAAW,EAC9BL,GAAW,MAAM,EACjBniM,GAAKyiM,EAAO,CACd,CACA,SAASD,IAAY,EAAW,CACzBJ,GAAa,SAAS7xS,CAAS,GAAGoyS,IAAcpyS,CAAS,CAChE,CACA,SAASoyS,IAAc,EAAW,CAChCP,GAAa,OACX7nO,IAAU6nO,GAAe,GAAUhziB,EAAM,SAAWmhQ,EAAU,QAAQ,EACtE,EACAA,CACF,CACF,CACA,SAASkyS,GAAQ,EAAI,CACnB,IAAMG,EAAYP,GAClB,IAAK,IAAIrljB,EAAI,EAAGA,EAAIoljB,GAAa,OAAQ,IAAK,CAC5C,IAAM7xS,EAAY6xS,GAAapljB,GAC/B,GAAWuzQ,EAAU,SAChBA,EAAU,OACbuxS,GAAYvxS,CAAS,EACrBA,EAAU,QAAQwqK,CAAE,EACfxqK,EAAU,MACbqyS,EAAU,KAAKryS,CAAS,EAG9B,CAKA,MAJA,IAAW,EACX,GAAY6xS,GACZ,GAAU,OAAS,EACnB,GAAeQ,EACRR,GAAa,OAAS,CAC/B,CACA,SAAS7nO,IAAU,EAAK,EAAM,CAC5B,IAAMz+U,EAAQ2f,EAAI,UAAU3rB,CAAI,EAChC,OAAOgM,EAAQ,EAAI2f,EAAI,OAAS3f,CAClC,CAGA,IAAIyoH,KAAS,EAAK,EAAK,IAAM,KAAK,IAAI,KAAK,IAAI1uG,EAAGja,CAAG,EAAGD,CAAG,EAGvDknjB,IAAU,CACZ,YAAa,EACb,UAAW,WACX,aAAc,WACd,KAAM,SACN,WAAY,WACZ,MAAO,WACP,MAAO,WACP,OAAQ,WACR,MAAO,IACP,eAAgB,WAChB,KAAM,MACN,WAAY,WACZ,MAAO,WACP,UAAW,WACX,YAAa,WACb,UAAW,WACX,WAAY,WACZ,UAAW,WACX,MAAO,WACP,eAAgB,WAChB,SAAU,WACV,QAAS,WACT,KAAM,SACN,SAAU,MACV,SAAU,QACV,cAAe,WACf,SAAU,WACV,UAAW,QACX,SAAU,WACV,UAAW,WACX,YAAa,WACb,eAAgB,WAChB,WAAY,WACZ,WAAY,WACZ,QAAS,WACT,WAAY,WACZ,aAAc,WACd,cAAe,WACf,cAAe,UACf,cAAe,UACf,cAAe,SACf,WAAY,WACZ,SAAU,WACV,YAAa,SACb,QAAS,WACT,QAAS,WACT,WAAY,UACZ,UAAW,WACX,YAAa,WACb,YAAa,UACb,QAAS,WACT,UAAW,WACX,WAAY,WACZ,KAAM,WACN,UAAW,WACX,KAAM,WACN,MAAO,QACP,YAAa,WACb,KAAM,WACN,SAAU,WACV,QAAS,WACT,UAAW,WACX,OAAQ,WACR,MAAO,WACP,MAAO,WACP,SAAU,WACV,cAAe,WACf,UAAW,WACX,aAAc,WACd,UAAW,WACX,WAAY,WACZ,UAAW,WACX,qBAAsB,WACtB,UAAW,WACX,WAAY,WACZ,UAAW,WACX,UAAW,WACX,YAAa,WACb,cAAe,UACf,aAAc,WACd,eAAgB,WAChB,eAAgB,WAChB,eAAgB,WAChB,YAAa,WACb,KAAM,SACN,UAAW,UACX,MAAO,WACP,QAAS,WACT,OAAQ,WACR,iBAAkB,WAClB,WAAY,MACZ,aAAc,WACd,aAAc,WACd,eAAgB,WAChB,gBAAiB,WACjB,kBAAmB,SACnB,gBAAiB,WACjB,gBAAiB,WACjB,aAAc,UACd,UAAW,WACX,UAAW,WACX,SAAU,WACV,YAAa,WACb,KAAM,MACN,QAAS,WACT,MAAO,WACP,UAAW,WACX,OAAQ,WACR,UAAW,WACX,OAAQ,WACR,cAAe,WACf,UAAW,WACX,cAAe,WACf,cAAe,WACf,WAAY,WACZ,UAAW,WACX,KAAM,WACN,KAAM,WACN,KAAM,WACN,WAAY,WACZ,OAAQ,WACR,cAAe,WACf,IAAK,WACL,UAAW,WACX,UAAW,WACX,YAAa,WACb,OAAQ,WACR,WAAY,WACZ,SAAU,UACV,SAAU,WACV,OAAQ,WACR,OAAQ,WACR,QAAS,WACT,UAAW,WACX,UAAW,WACX,UAAW,WACX,KAAM,WACN,YAAa,SACb,UAAW,WACX,IAAK,WACL,KAAM,QACN,QAAS,WACT,OAAQ,WACR,UAAW,WACX,OAAQ,WACR,MAAO,WACP,MAAO,WACP,WAAY,WACZ,OAAQ,WACR,YAAa,UACf,EAGIC,GAAS,oBACTC,GAAaD,GAAS,IAC1B,SAAS7yjB,GAAK,GAAGwwC,EAAO,CACtB,MAAO,WAAaA,EAAM,KAAK,aAAa,EAAI,UAClD,CACA,IAAImqQ,IAAU,OAAO,MAAQ36S,GAAK6yjB,GAAQA,GAAQA,EAAM,CAAC,EACrDr4Q,IAAW,OAAO,OAASx6S,GAAK6yjB,GAAQA,GAAQA,GAAQA,EAAM,CAAC,EAC/D13Q,IAAU,OAAO,MAAQn7S,GAAK6yjB,GAAQC,GAAYA,EAAU,CAAC,EAC7Dr4Q,IAAW,OACb,OAASz6S,GAAK6yjB,GAAQC,GAAYA,GAAYD,EAAM,CACtD,EACIE,IAAO,sDACPC,IAAO,sEACPC,IAAO,sBACPC,IAAO,sBAGX,SAASC,IAAe,EAAO,CAC7B,IAAI1wjB,EAkEJ,OAjEI,OAAO6xN,GAAU,SACZA,IAAU,IAAMA,GAASA,GAAS,GAAKA,GAAS,WAAaA,EAAQ,MAE1E,EAAQ2+V,IAAK,KAAK3+V,CAAK,GAClB,SAAS7xN,EAAM,GAAK,KAAM,EAAE,IAAM,EACvC6/S,IAAUA,GAAOhuF,KAAW,IAAK,GAC5BguF,GAAOhuF,IAEZ,EAAQqmF,IAAI,KAAKrmF,CAAK,IAChB8+V,GAAS3wjB,EAAM,EAAE,GAAK,GAC9B2wjB,GAAS3wjB,EAAM,EAAE,GAAK,GACtB2wjB,GAAS3wjB,EAAM,EAAE,GAAK,EACtB,OACA,GAEE,EAAQ+3S,IAAK,KAAKlmF,CAAK,IACjB8+V,GAAS3wjB,EAAM,EAAE,GAAK,GAC9B2wjB,GAAS3wjB,EAAM,EAAE,GAAK,GACtB2wjB,GAAS3wjB,EAAM,EAAE,GAAK,EACtB4wjB,IAAO5wjB,EAAM,EAAE,KACf,GAEE,EAAQswjB,IAAK,KAAKz+V,CAAK,GAClB,SACL7xN,EAAM,GAAKA,EAAM,GACjBA,EAAM,GAAKA,EAAM,GACjBA,EAAM,GAAKA,EAAM,GACjB,KAEA,EACF,IAAM,GAEJ,EAAQywjB,IAAK,KAAK5+V,CAAK,GAAU,SAAS7xN,EAAM,GAAI,EAAE,IAAM,GAC5D,EAAQuwjB,IAAK,KAAK1+V,CAAK,GAClB,SACL7xN,EAAM,GAAKA,EAAM,GACjBA,EAAM,GAAKA,EAAM,GACjBA,EAAM,GAAKA,EAAM,GACjBA,EAAM,GAAKA,EAAM,GAEjB,EACF,IAAM,GAEJ,EAAQ04S,IAAI,KAAK7mF,CAAK,IAChBg/V,IACNC,IAAS9wjB,EAAM,EAAE,EAEjB+wjB,GAAgB/wjB,EAAM,EAAE,EAExB+wjB,GAAgB/wjB,EAAM,EAAE,CAE1B,EAAI,OACJ,GAEE,EAAQg4S,IAAK,KAAKnmF,CAAK,IACjBg/V,IACNC,IAAS9wjB,EAAM,EAAE,EAEjB+wjB,GAAgB/wjB,EAAM,EAAE,EAExB+wjB,GAAgB/wjB,EAAM,EAAE,CAE1B,EAAI4wjB,IAAO5wjB,EAAM,EAAE,KACnB,EAEK,IACT,CACA,SAASgxjB,GAAQ,EAAG,EAAG,EAAG,CAMxB,OALIx4f,EAAI,IAAG,GAAK,GACZA,EAAI,GAAG,IACPA,EAAI,EAAI,EAAUxwC,GAAKuxC,EAAIvxC,GAAK,EAAIwwC,EACpCA,EAAI,EAAI,EAAUe,EAClBf,EAAI,EAAI,EAAUxwC,GAAKuxC,EAAIvxC,IAAM,EAAI,EAAIwwC,GAAK,EAC3CxwC,CACT,CACA,SAAS6oiB,IAAS,EAAG,EAAG,EAAG,CACzB,IAAMt3f,EAAI/f,EAAI,GAAMA,GAAK,EAAID,GAAKC,EAAID,EAAIC,EAAID,EACxCvxB,EAAI,EAAIwxB,EAAI+f,EACZd,EAAIu4f,GAAQhpiB,EAAGuxC,EAAGvf,EAAI,EAAI,CAAC,EAC3B2e,EAAIq4f,GAAQhpiB,EAAGuxC,EAAGvf,CAAC,EACnBjyB,EAAIipiB,GAAQhpiB,EAAGuxC,EAAGvf,EAAI,EAAI,CAAC,EACjC,OAAO,KAAK,MAAMye,EAAI,GAAG,GAAK,GAAK,KAAK,MAAME,EAAI,GAAG,GAAK,GAAK,KAAK,MAAM5wC,EAAI,GAAG,GAAK,CACxF,CACA,SAAS4oiB,GAAS,EAAK,CACrB,IAAMM,EAAM,SAASniiB,EAAK,EAAE,EAG5B,OAFImiiB,EAAM,EAAU,EAChBA,EAAM,IAAY,IACfA,CACT,CACA,SAASH,IAAS,EAAK,CAErB,OADY,WAAWhiiB,CACb,EAAI,IAAM,KAAO,IAAM,GACnC,CACA,SAAS8hiB,IAAO,EAAK,CACnB,IAAMpwZ,EAAM,WAAW1xI,CAAG,EAG1B,OAFI0xI,EAAM,EAAU,EAChBA,EAAM,EAAU,IACb,KAAK,MAAMA,EAAM,GAAG,CAC7B,CACA,SAASuwZ,GAAgB,EAAK,CAC5B,IAAME,EAAM,WAAWniiB,CAAG,EAG1B,OAFImiiB,EAAM,EAAU,EAChBA,EAAM,IAAY,EACfA,EAAM,GACf,CAGA,SAASC,IAAY,EAAO,CAC1B,IAAIC,EAAaT,IAAejvjB,CAAK,EAOrC,OANI0vjB,IAAe,KAAa1vjB,GAChC,IAA2B,EAKpB,SAJI0vjB,EAAa,cAAgB,GAIvB,KAHNA,EAAa,YAAc,GAGf,KAFZA,EAAa,SAAW,EAEN,KADlBA,EAAa,KAAO,IACI,GACrC,CAGA,IAAIC,IAAsB,EAAO,EAAQ,IAAgB,CACvD,GAAIlxU,GAAG,IAAInmJ,CAAK,EACd,OAAOA,EAET,GAAImmJ,GAAG,IAAInmJ,CAAK,EACd,OAAOq3d,GAAmB,CACxB,QACA,SACA,aACF,CAAC,EAEH,GAAIlxU,GAAG,IAAInmJ,EAAM,OAAO,EAAE,EACxB,OAAOm1d,GAAyBn1d,CAAK,EAEvC,IAAMumB,EAASvmB,EACTs3d,EAAc/wc,EAAO,OACrBgxc,EAAahxc,EAAO,OAAS,CAAC,EAAG,CAAC,EAClCixc,EAAkBjxc,EAAO,iBAAmBA,EAAO,aAAe,SAClEkxc,EAAmBlxc,EAAO,kBAAoBA,EAAO,aAAe,SACpEmxc,EAASnxc,EAAO,SAAY,GAAM9nD,GACxC,MAAQ,IAAU,CAChB,IAAMk5f,EAASC,IAAUlwjB,EAAO6vjB,CAAU,EAC1C,OAAOzzQ,IACLp8S,EACA6vjB,EAAWI,GACXJ,EAAWI,EAAS,GACpBL,EAAYK,GACZL,EAAYK,EAAS,GACrBD,EACAF,EACAC,EACAlxc,EAAO,GACT,CACF,CACF,EACA,SAASu9L,IAAY,EAAO,EAAU,EAAU,EAAW,EAAW,EAAQ,EAAiB,EAAkB,EAAK,CACpH,IAAI95S,EAASwW,EAAMA,EAAI9Y,CAAK,EAAIA,EAChC,GAAIsC,EAAS6tjB,EAAU,CACrB,GAAIL,IAAoB,WAAY,OAAOxtjB,EAClCwtjB,IAAoB,UAAS,EAASK,EACjD,CACA,GAAI7tjB,EAAS8tjB,EAAU,CACrB,GAAIL,IAAqB,WAAY,OAAOztjB,EACnCytjB,IAAqB,UAAS,EAASK,EAClD,CAUA,OATIC,IAAcC,EAAkBD,EAChCF,IAAaC,EAAiBpwjB,GAASmwjB,EAAWE,EAAYC,GAC9DH,IAAa,KAAW,EAAS,CAAC7tjB,EAC7B8tjB,IAAa,IAAU,GAAkBD,EAC7C,GAAU7tjB,EAAS6tjB,IAAaC,EAAWD,GAChD,EAASH,EAAO1tjB,CAAM,EAClB+tjB,IAAc,KAAW,EAAS,CAAC/tjB,EAC9BgujB,IAAc,IAAU,GAAkBD,EAC9C,EAAS/tjB,GAAUgujB,EAAYD,GAAaA,EAC1C/tjB,EACT,CACA,SAAS4tjB,IAAU,EAAO,EAAY,CACpC,IAAK,IAAIrnjB,EAAI,EAAGA,EAAIgnjB,EAAW,OAAS,GAClC,IAAWhnjB,IAAM7I,GADoB,EAAE6I,GAE7C,OAAOA,EAAI,CACb,CAGA,IAAImihB,KAAS,EAAQ,EAAY,QAAW,GAAc,CACxD,EAAY3oN,IAAc,MAAQ,KAAK,IAAIkuP,EAAW,IAAK,EAAI,KAAK,IAAIA,EAAW,IAAI,EACvF,IAAMC,EAAWD,EAAYE,EAE7B,OAAOrgc,IAAM,EAAG,GADAiyM,IAAc,MAAQ,KAAK,MAAMmuP,CAAQ,EAAI,KAAK,KAAKA,CAAQ,GAClDC,CAAM,CACrC,EACInqP,GAAK,QACLjrO,GAAKirO,GAAK,MACVoqP,IAAKpqP,GAAK,EACVqqP,IAAK,EAAI,KAAK,GAAK,EACnBC,IAAK,EAAI,KAAK,GAAK,IACnBC,GAAa,GAAM,CACrB,IAAM5qP,EAAK,OACL5qB,EAAK,KAQT,OAPEn0S,EAAI,EAAIm0S,EACH4qB,EAAK/+T,EAAIA,EACPA,EAAI,EAAIm0S,EACV4qB,GAAM,GAAK,IAAM5qB,GAAMn0S,EAAI,IACzBA,EAAI,IAAMm0S,EACZ4qB,GAAM,GAAK,KAAO5qB,GAAMn0S,EAAI,MAE5B++T,GAAM,GAAK,MAAQ5qB,GAAMn0S,EAAI,OAExC,EACI4pjB,IAAU,CACZ,OAAS,GAAM5pjB,EACf,WAAa,GAAMA,EAAIA,EACvB,YAAc,GAAM,GAAK,EAAIA,IAAM,EAAIA,GACvC,cAAgB,GAAMA,EAAI,GAAM,EAAIA,EAAIA,EAAI,GAAa,GAAKA,EAAI,IAAG,EAAK,EAC1E,YAAc,GAAMA,EAAIA,EAAIA,EAC5B,aAAe,GAAM,GAAa,EAAIA,IAAG,EACzC,eAAiB,GAAMA,EAAI,GAAM,EAAIA,EAAIA,EAAIA,EAAI,GAAa,GAAKA,EAAI,IAAG,EAAK,EAC/E,YAAc,GAAMA,EAAIA,EAAIA,EAAIA,EAChC,aAAe,GAAM,GAAa,EAAIA,IAAG,EACzC,eAAiB,GAAMA,EAAI,GAAM,EAAIA,EAAIA,EAAIA,EAAIA,EAAI,GAAa,GAAKA,EAAI,IAAG,EAAK,EACnF,YAAc,GAAMA,EAAIA,EAAIA,EAAIA,EAAIA,EACpC,aAAe,GAAM,GAAa,EAAIA,IAAG,EACzC,eAAiB,GAAMA,EAAI,GAAM,GAAKA,EAAIA,EAAIA,EAAIA,EAAIA,EAAI,GAAa,GAAKA,EAAI,IAAG,EAAK,EACxF,WAAa,GAAM,EAAI,KAAK,IAAIA,EAAI,KAAK,GAAK,CAAC,EAC/C,YAAc,GAAM,KAAK,IAAIA,EAAI,KAAK,GAAK,CAAC,EAC5C,cAAgB,GAAM,EAAE,KAAK,IAAI,KAAK,GAAKA,CAAC,EAAI,GAAK,EACrD,WAAa,GAAMA,IAAM,EAAI,EAAa,IAAG,GAAKA,EAAI,IACtD,YAAc,GAAMA,IAAM,EAAI,EAAI,EAAa,IAAG,IAAMA,GACxD,cAAgB,GAAMA,IAAM,EAAI,EAAIA,IAAM,EAAI,EAAIA,EAAI,GAAe,IAAG,GAAKA,EAAI,IAAM,GAAK,EAAa,IAAG,IAAMA,EAAI,KAAO,EAC7H,WAAa,GAAM,EAAI,KAAK,KAAK,EAAaA,GAAG,CAAE,EACnD,YAAc,GAAM,KAAK,KAAK,GAAaA,EAAI,IAAG,CAAE,EACpD,cAAgB,GAAMA,EAAI,IAAO,EAAI,KAAK,KAAK,GAAa,EAAIA,IAAG,CAAE,GAAK,GAAK,KAAK,KAAK,GAAa,GAAKA,EAAI,IAAG,CAAE,EAAI,GAAK,EAC7H,WAAa,GAAMwpjB,IAAKxpjB,EAAIA,EAAIA,EAAIo/T,GAAKp/T,EAAIA,EAC7C,YAAc,GAAM,EAAIwpjB,KAAcxpjB,EAAI,IAAG,EAAKo/T,IAAcp/T,EAAI,IAAG,EACvE,cAAgB,GAAMA,EAAI,IAAe,EAAIA,IAAG,IAAOm0F,GAAK,GAAK,EAAIn0F,EAAIm0F,IAAM,IAAc,EAAIn0F,EAAI,IAAG,IAAOm0F,GAAK,IAAMn0F,EAAI,EAAI,GAAKm0F,IAAM,GAAK,EAClJ,cAAgB,GAAMn0F,IAAM,EAAI,EAAIA,IAAM,EAAI,EAAI,EAAU,IAAG,GAAKA,EAAI,KAAM,KAAK,KAAKA,EAAI,GAAK,OAASypjB,GAAE,EAC5G,eAAiB,GAAMzpjB,IAAM,EAAI,EAAIA,IAAM,EAAI,EAAa,IAAG,IAAMA,GAAK,KAAK,KAAKA,EAAI,GAAK,KAAQypjB,GAAE,EAAI,EAC3G,iBAAmB,GAAMzpjB,IAAM,EAAI,EAAIA,IAAM,EAAI,EAAIA,EAAI,GAAM,EAAW,IAAG,GAAKA,EAAI,IAAM,KAAK,KAAK,GAAKA,EAAI,QAAU0pjB,GAAE,GAAK,EAAa,IAAG,IAAM1pjB,EAAI,IAAM,KAAK,KAAK,GAAKA,EAAI,QAAU0pjB,GAAE,EAAI,EAAI,EACvM,aAAe,GAAM,EAAIC,GAAU,EAAI3pjB,CAAC,EACxC,cAAe2pjB,GACf,gBAAkB,GAAM3pjB,EAAI,IAAO,EAAI2pjB,GAAU,EAAI,EAAI3pjB,CAAC,GAAK,GAAK,EAAI2pjB,GAAU,EAAI3pjB,EAAI,CAAC,GAAK,EAChG,SACF,EAGI6pjB,GAAO,OAAO,IAAI,gBAAgB,EAClCC,GAAa,OAAO,IAAI,sBAAsB,EAC9CC,GAAiB,GAAQ,GAAQz6f,GAAOA,EAAIu6f,KAC5CG,GAAiB,GAAQ16f,GAAOA,EAAIu6f,IAAQv6f,EAAIu6f,GAAK,CAAC,EAAIv6f,EAC1D26f,IAAqB,GAAWtnjB,EAAOmnjB,KAAe,KAC1D,SAASI,IAAkB,EAAW,EAAO,CACvCC,EAAU,cACZA,EAAU,cAAc1piB,CAAK,EAE7B0piB,EAAU1piB,CAAK,CAEnB,CACA,SAAS2piB,GAAmB,EAAQ,EAAO,CACzC,IAAMzzS,EAAYh0Q,EAAOmnjB,IACrBnzS,GACFA,EAAU,QAAS,GAAc,CAC/BuzS,IAAkBC,EAAW1piB,CAAK,CACpC,CAAC,CAEL,CAEA,IAAI4piB,IAAa,KAAM,CACrB,YAAY,EAAK,CACf,GAAI,CAAChsjB,GAAO,EAAE,EAAM,KAAK,KACvB,MAAM,MAAM,gBAAgB,EAE9BisjB,IAAe,KAAMjsjB,CAAG,CAC1B,CACF,EACIisjB,KAAkB,EAAQ,IAAQ1tJ,IAAUj6Z,EAAQknjB,GAAMxrjB,CAAG,EACjE,SAASksjB,GAAiB,EAAQ,EAAW,CAC3C,GAAI5njB,EAAOknjB,IAAO,CAChB,IAAIlzS,EAAYh0Q,EAAOmnjB,IAClBnzS,GACHimJ,IAAUj6Z,EAAQmnjB,GAAY,EAA4B,IAAI,GAAK,EAEhEnzS,EAAU,IAAIwzS,CAAS,IAC1BxzS,EAAU,IAAIwzS,CAAS,EACnBxnjB,EAAO,eACTA,EAAO,cAAcg0Q,EAAU,KAAMwzS,CAAS,EAGpD,CACA,OAAOA,CACT,CACA,SAASK,GAAoB,EAAQ,EAAW,CAC9C,IAAM7zS,EAAYh0Q,EAAOmnjB,IACzB,GAAInzS,GAAaA,EAAU,IAAIwzS,CAAS,EAAG,CACzC,IAAM5qgB,EAAQo3N,EAAU,KAAO,EAC3Bp3N,EACFo3N,EAAU,OAAOwzS,CAAS,EAE1B,EAAOL,IAAc,KAEnBnnjB,EAAO,iBACTA,EAAO,gBAAgB48C,EAAO4qgB,CAAS,CAE3C,CACF,CACA,IAAIvtJ,KAAa,EAAQ,EAAK,IAAU,OAAO,eAAej6Z,EAAQ3J,EAAK,CACzE,QACA,SAAU,GACV,aAAc,EAChB,CAAC,EAGGyxjB,GAAc,oDACdC,IAAa,2FACbC,IAAgB,OAAO,IAAIF,GAAY,OAAO,aAAc,GAAG,EAC/DG,IAAY,+DACZC,GAAmB,uDAGnBC,IAAkB,GAAU,CAC9B,GAAM,CAACztO,EAAO1uT,GAAYo8hB,IAAiBjyjB,CAAK,EAChD,GAAI,CAACukV,GAASwuC,GAAM,EAClB,OAAO/yX,EAET,IAAMG,EAAQ,OAAO,iBAAiB,SAAS,eAAe,CAAC,CAAC,iBAAiBokV,CAAK,EAetF,OAdIpkV,EACKA,EAAM,KAAK,EACT01B,GAAYA,EAAS,WAAW,IAAI,EAC9B,OAAO,iBAAiB,SAAS,eAAe,CAAC,CAAC,iBAAiBA,CAC9E,GAGK71B,EAEA61B,GAAYk8hB,GAAiB,KAAKl8hB,CAAQ,EAC5Cm8hB,IAAen8hB,CAAQ,EACrBA,GAGJ71B,CACT,EACIiyjB,IAAoB,GAAY,CAClC,IAAM1zjB,EAAQwzjB,GAAiB,KAAK3tjB,CAAO,EAC3C,GAAI,CAAC7F,EAAO,MAAO,EAAE,EACrB,GAAM,EAAGgmV,EAAO1uT,GAAYt3B,EAC5B,MAAO,CAACgmV,EAAO1uT,CAAQ,CACzB,EAGIq8hB,IACAC,KAAa,EAAG,EAAI,EAAI,EAAI,IAAO,QAAQ,KAAK,MAAMptY,CAAE,EAAE,IAAI,KAAK,MAAMC,CAAE,EAAE,IAAI,KAAK,MAAMotY,CAAE,EAAE,IAAIC,EAAG,GACvGC,IAA6B,GAAW,CAC1C,GACEJ,GAAkB9zQ,GAEZ,OAAO,IAAI,OAAO,KAAKA,EAAM,CAAC,CAAC,KAAK,GAAG,EAAE,UAAW,GAAG,EAG3D,OAEJ,IAAM7wR,EAASsxF,EAAO,OAAO,IAAK,GACzBqyc,GAAc/wjB,CAAK,CAAC,CAAC,QAAQ4xjB,GAAkBC,GAAc,CAAC,CAAC,QAAQJ,IAAYnC,GAAW,CAAC,CAAC,QAAQyC,IAAiBzC,GAAW,CAC5I,EACK7yS,EAAYrvP,EAAO,IAAK,GAAUptB,EAAM,MAAMwxjB,EAAW,CAAC,CAAC,IAAI,MAAM,CAAC,EAStEY,EARe31S,EAAU,EAAE,CAAC,KAC/B,EAAG,IAAMA,EAAU,IAAK,GAAW,CAClC,GAAI,EAAE/zQ,KAAK+lB,GACT,MAAM,MAAM,gDAAgD,EAE9D,OAAOA,EAAO/lB,EAChB,CAAC,CAE8B,CAAC,CAAC,IAChC,GAAY8mjB,GAAmB,CAAE,GAAG9wc,EAAQ,OAAQ2zc,CAAQ,CAAC,CAChE,EACA,MAAQ,IAAU,CAChB,IAAMC,EAAc,CAACZ,IAAU,KAAKtkiB,EAAO,EAAE,GAAKA,EAAO,KAAM,GAAUskiB,IAAU,KAAK1xjB,CAAK,CAAC,CAAC,EAAE,QAAQwxjB,GAAa,EAAE,EACpH,EAAI,EACR,OAAOpkiB,EAAO,EAAE,CAAC,QACfokiB,OACM,GAAGY,EAAc,IAAI,CAACvyjB,CAAK,IAAIyyjB,GAAe,IACtD,CAAC,CAAC,QAAQX,IAAWK,GAAS,CAChC,CACF,EAGInogB,GAAS,iBACTu9H,IAAQ,GAAO,CACjB,IAAM9nL,EAAOnD,EACTqmE,EAAS,GACb,GAAI,OAAOljE,GAAQ,WACjB,MAAU,UAAU,GAAGuqD,GAAO,mCAAmC,EAEnE,OAAQ,GAAGvkC,IAAS,CAClB,CAEEk9C,IADAljE,EAAK,GAAGgmB,CAAI,EACH,GAEb,CACF,EACIitiB,IAAkBnrY,IAAK,QAAQ,IAAI,EACvC,SAASorY,KAAuB,CAC9BD,IACE,GAAG1ogB,GAAO,kEACZ,CACF,CACA,IAAI4ogB,IAAiBrrY,IAAK,QAAQ,IAAI,EACtC,SAASsrY,KAAsB,CAC7BD,IACE,GAAG5ogB,GAAO,gJACZ,CACF,CAGA,SAAS8ogB,GAAiB,EAAO,CAC/B,OAAOr0U,GAAG,IAAIt+O,CAAK,IAAMA,EAAM,IAAM,KAAO,KAAK,KAAKA,CAAK,GAC3D,CAAC4yX,GAAM,GAAKg/L,GAAiB,KAAK5xjB,CAAK,GAAKA,KAAUi+S,IAAU,CAAC,GACnE,CA2LA,IAAIp4F,GAA4B+sK,GAAM,EAAI7sK,YAAYD,kBAGlDmF,QAAqB,CACvB,IAAMC,GAAA,EAAY0nW,UAAQ,EAAK,EAO/B,OANAC,QACE,EAAU,QAAU,OACP,CACX,EAAU,QAAU,EACtB,GACC,CAAC,CAAC,EACE3nW,CACT,EAGA,SAAS4nW,KAAiB,CACxB,IAAM9wY,GAAA,EAASklC,YAAS,CAAC,CAAC,GACpBgE,EAAYD,IAAa,EAC/B,UAAa,CACPC,EAAU,SACZlpC,EAAO,KAAK,OAAO,CAAC,CAExB,CACF,CAiDA,IAAI+wY,IAAW,MAAWC,aAAWn5X,EAAQo5X,GAAS,EAClDA,IAAY,CAAC,EAIjB,SAASC,IAAQ,EAAO,CACtB,IAAMroW,GAAA,EAAUsoW,UAAQ,IAAK,EAAC,EAI9B,OAHA,EAAArzc,EAAA,eAAiB,CACf,EAAQ,QAAU9/G,CACpB,CAAC,EACM6qN,EAAQ,OACjB,CCjgCA,IAAIuoW,GAAQ,OAAO,IAAI,eAAe,EAClCC,IAAc,GAAU,CAAC,CAACrzjB,GAASA,EAAMozjB,MAAWpzjB,EACpDszjB,GAAe,GAAUxwU,GAASA,EAAMswU,IACxCG,IAAe,EAAO,IAAS9F,IAAa3qU,EAAOswU,GAAO/2e,CAAI,EAC9Dm3e,GAAc,GAAU1wU,GAASA,EAAMswU,KAAUtwU,EAAMswU,GAAM,CAAC,WAAW,EACzEK,IAAW,KAAM,CACnB,aAAc,CACZF,GAAY,KAAM,IAAI,CACxB,CAEA,YAAa,CACX,OAAO,KAAK,SAAW,CAAC,CAC1B,CACF,EAIIG,GAAgB,MAAMC,UAAuBF,GAAS,CACxD,YAAY,EAAQ,CAClB,MAAM,EACN,KAAK,OAASvjZ,EACd,KAAK,KAAO,GACZ,KAAK,iBAAmB,EACpBouE,GAAG,IAAI,KAAK,MAAM,IACpB,KAAK,aAAe,KAAK,OAE7B,CAEA,OAAO,OAAO,EAAO,CACnB,OAAO,IAAIq1U,EAAe3zjB,CAAK,CACjC,CACA,YAAa,CACX,MAAO,CAAC,IAAI,CACd,CACA,UAAW,CACT,OAAO,KAAK,MACd,CACA,SAAS,EAAO,EAAM,CAcpB,OAbIs+O,GAAG,IAAIt+O,CAAK,IACd,KAAK,aAAeA,EAChB4X,IACF,EAAQ,KAAK,MAAM5X,EAAQ4X,CAAI,EAAIA,EAC/B,KAAK,OACP,KAAK,aAAe5X,KAItB,KAAK,SAAWA,IAGpB,KAAK,OAASA,EACP,GACT,CACA,OAAQ,CACN,GAAM,CAAE,QAAS,KACjB,KAAK,KAAO,GACRs+O,GAAG,IAAI,KAAK,MAAM,IACpB,KAAK,YAAc,EACnB,KAAK,iBAAmB,EACxB,KAAK,aAAe,KAAK,OACrBhjO,IAAM,KAAK,aAAe,MAC9B,KAAK,GAAK,KAEd,CACF,EAIIs4iB,GAAiB,MAAMC,UAAwBH,EAAc,CAC/D,YAAY,EAAO,CACjB,MAAM,CAAC,EACP,KAAK,QAAU,KACf,KAAK,UAAYlE,GAAmB,CAClC,OAAQ,CAACxvjB,EAAOA,CAAK,CACvB,CAAC,CACH,CAEA,OAAO,OAAO,EAAO,CACnB,OAAO,IAAI6zjB,EAAgB7zjB,CAAK,CAClC,CACA,UAAW,CAET,MAAO,CAAgB,KAAK,UAAU,KAAK,UAAU,KAAK,MAAM,CAClE,CACA,SAAS,EAAO,CACd,GAAI8zjB,GAAI,IAAI9zjB,CAAK,EAAG,CAClB,GAAIA,GAAS,KAAK,QAChB,MAAO,GAET,KAAK,QAAUA,EACf,KAAK,OAAS,CAChB,MAAO,GAAI,MAAM,SAASA,CAAK,EAC7B,KAAK,QAAU,UAEf,MAAO,GAET,MAAO,EACT,CACA,MAAM,EAAM,CACN+zjB,IACF,KAAK,UAAYvE,GAAmB,CAClC,OAAQ,CAAC,KAAK,SAAS,EAAGuE,CAAI,CAChC,CAAC,GAEH,KAAK,OAAS,EACd,MAAM,MAAM,CACd,CACF,EAcIC,GAAc,CAAE,aAAc,IAAK,EAGnCC,GAAiB,cAAcR,GAAS,CAC1C,YAAY,EAAQ,CAClB,MAAM,EACN,KAAK,OAAShqjB,EACd,KAAK,SAASA,CAAM,CACtB,CACA,SAAS,EAAU,CACjB,IAAMglB,EAAS,CAAC,EAUhB,OATAi/hB,GAAS,KAAK,QAAS,EAAQ,IAAQ,CACjC2F,IAAW5pjB,CAAM,EACnB,EAAO1J,GAAO0J,EAAO,SAASyqjB,CAAQ,EAC7BpD,GAAcrnjB,CAAM,EAC7B,EAAO1J,GAAOgxjB,GAActnjB,CAAM,EACxByqjB,IACV,EAAOn0jB,GAAO0J,EAElB,CAAC,EACMglB,CACT,CAEA,SAAS,EAAQ,CACf,KAAK,OAAShlB,EACd,KAAK,QAAU,KAAK,aAAaA,CAAM,CACzC,CACA,OAAQ,CACF,KAAK,SACP0jjB,GAAK,KAAK,QAAU,GAAS9we,EAAK,MAAM,CAAC,CAE7C,CAEA,aAAa,EAAQ,CACnB,GAAI5yE,EAAQ,CACV,IAAM8iC,EAA0B,IAAI,IAEpC,OADAmhhB,GAASjkjB,EAAQ,KAAK,cAAe8iC,CAAO,EACrC,MAAM,KAAKA,CAAO,CAC3B,CACF,CAEA,cAAc,EAAQ,CAChBynhB,GAAY,cAAgBlD,GAAcrnjB,CAAM,GAClDuqjB,GAAY,aAAa,IAAIvqjB,CAAM,EAErC,IAAM8iC,EAAUinhB,GAAW/pjB,CAAM,EAC7B8iC,GACF4ghB,GAAK5ghB,EAAU,GAAS,KAAK,IAAI8vC,CAAI,CAAC,CAE1C,CACF,EAGI83e,IAAgB,MAAMC,UAAuBH,EAAe,CAC9D,YAAY,EAAQ,CAClB,MAAMxqjB,CAAM,CACd,CAEA,OAAO,OAAO,EAAQ,CACpB,OAAO,IAAI2qjB,EAAe3qjB,CAAM,CAClC,CACA,UAAW,CACT,OAAO,KAAK,OAAO,IAAK,GAAS4yE,EAAK,SAAS,CAAC,CAClD,CACA,SAAS,EAAQ,CACf,IAAM9vC,EAAU,KAAK,WAAW,EAKhC,OAJI9iC,EAAO,QAAU8iC,EAAQ,OACpBA,EAAQ,KAAK,EAAM,IAAM8vC,EAAK,SAAS5yE,EAAOf,EAAE,CAAC,CAAC,CAAC,KAAK,OAAO,GAExE,MAAM,SAASe,EAAO,IAAI4qjB,GAAY,CAAC,EAChC,GACT,CACF,EACA,SAASA,IAAa,EAAO,CAE3B,OADiB1B,GAAiB3yjB,CAAK,EAAI4zjB,GAAiBF,GAAA,CAC5C,OAAO1zjB,CAAK,CAC9B,CAIA,SAASs0jB,GAAgB,EAAO,CAC9B,IAAMvke,EAAauje,GAAYtzjB,CAAK,EACpC,OAAO+vF,EAAaA,EAAW,YAAcwke,GAAI,IAAIv0jB,CAAK,EAAIm0jB,IAAgBK,GAAkBx0jB,CAAK,EAAI4zjB,GAAiBF,EAC5H,CAkBA,IAAIe,KAAgB,EAAW,IAAS,CACtC,IAAMC,EAGJ,CAACC,GAAI,IAAI94c,CAAS,GAAKA,EAAU,WAAaA,EAAU,UAAU,iBAEpE,SAAOonV,eAAY,EAAY,IAAa,CAC1C,IAAM2xH,GAAA,EAAc3uW,UAAO,IAAI,EACzBxrL,EAAMi6hB,IAAA,EACZvpW,eACG,GAAU,CACT,EAAY,QAAUkrC,IAAUw+T,EAAU70jB,CAAK,CACjD,EACA,CAAC60jB,CAAQ,CACX,EACM,CAAC3ojB,EAAOkzG,GAAQ01c,IAAiBC,EAAYh4hB,CAAI,EACjDq7V,EAAc06L,IAAe,EAC7B73iB,MAAiB,CACrB,IAAMgzL,EAAW2mX,EAAY,SACzB,IAAgB3mX,KAGFA,EAAWlxK,EAAK,oBAAoBkxK,EAAU/hM,EAAM,SAAS,EAAI,CAAC,EAAI,MACtE,IAChBksX,EAAY,CAEhB,EACM/nS,EAAW,IAAI2ke,IAAc/5iB,EAAUmkG,CAAI,EAC3C61c,GAAA,EAAchvW,UAAO,IAAK,EAAC,EACjC4sW,QACE,EAAY,QAAUxie,EACtB88d,GAAM/tc,EAAO,GAAQkyc,GAAiBl7X,EAAK/lG,CAAQ,CAAC,MACvC,CACP4ke,EAAY,UACd9H,GACE8H,EAAY,QAAQ,KACnB,GAAQ1D,GAAoBn7X,EAAK6+X,EAAY,OAAO,CACvD,EACAvpM,GAAI,OAAOupM,EAAY,QAAQ,MAAM,EAEzC,EACD,GACD,EAAAn1c,EAAA,WAAU7kG,EAAU,CAAC,CAAC,EACtB83iB,YAAoB,CAClB,IAAM7B,EAAY+D,EAAY,QAC9B9H,GAAM+D,EAAU,KAAO,GAAQK,GAAoBn7X,EAAK86X,CAAS,CAAC,CACpE,CAAC,EACD,IAAMgE,EAAYn4hB,EAAK,kBAAkB7wB,EAAM,SAAS,CAAC,EACzD,OAAuB4zG,EAAM,cAAcjE,EAAW,CAAE,GAAGq5c,EAAW,KAAI,CAAC,CAC7E,CAAC,CACH,EACIF,IAAgB,KAAM,CACxB,YAAY,EAAQ,EAAM,CACxB,KAAK,OAAShzY,EACd,KAAK,KAAO5iE,CACd,CACA,cAAc,EAAO,CACf53F,EAAM,MAAQ,UAChBkkW,GAAI,MAAM,KAAK,MAAM,CAEzB,CACF,EACA,SAASopM,IAAiB,EAAO,EAAM,CACrC,IAAMn/U,EAA+B,IAAI,IASzC,MARA,IAAY,aAAeA,EACvBzpO,EAAM,QACR,EAAQ,CACN,GAAGA,EACH,MAAO6wB,EAAK,oBAAoB7wB,EAAM,KAAK,CAC7C,GACF,EAAQ,IAAI+njB,GAAe/njB,CAAK,EAChC,GAAY,aAAe,KACpB,CAACA,EAAOypO,CAAY,CAC7B,CACA,SAAS0gB,IAAU,EAAK,EAAO,CAK7B,OAJI57N,IACEk6hB,GAAI,IAAIl6hB,CAAG,EAAGA,EAAIz6B,CAAK,EACtB,EAAI,QAAUA,GAEdA,CACT,CAGA,IAAI07X,IAAW,OAAO,IAAI,mBAAmB,EACzCy5L,KAAc,EAAY,CAC5B,0BAA4B,GAC5B,sBAAuB,GAAU,IAAIlB,GAAe77d,CAAK,EACzD,oBAAqB,GAAUlsF,GAC7B,CAAC,IAAM,CACT,IAAMkpjB,EAAa,CACjB,sBACA,sBACA,mBACF,EACMlB,EAAY,GAAc,CAC9B,IAAMxlH,EAAcC,IAAe9yV,CAAS,GAAK,YAOjD,MANA,CAGEA,EAHEw5c,GAAI,IAAIx5c,CAAS,EACPq4c,EAASr4c,KAAe,EAASA,GAAa44c,IAAa54c,EAAWu5c,CAAU,GAEhFv5c,EAAU6/Q,OAAc,EAAUA,KAAY+4L,IAAa54c,EAAWu5c,CAAU,GAE9F,EAAU,YAAc,YAAY1mH,EAAY,GACzC7yV,CACT,EAOA,OANA6xc,GAAUnwhB,GAAa,EAAW,IAAQ,CACpC83hB,GAAI,IAAI93hB,CAAU,IACpB,EAAMoxa,IAAe9yV,CAAS,GAEhC,EAAS97G,GAAOm0jB,EAASr4c,CAAS,CACpC,CAAC,EACM,CACL,UACF,CACF,EACI8yV,IAAkB,GAAQ0mH,GAAI,IAAIh/f,CAAG,EAAIA,EAAMA,GAAOg/f,GAAI,IAAIh/f,EAAI,WAAW,EAAIA,EAAI,YAAcg/f,GAAI,IAAIh/f,CAAG,GAAKA,EAAI,MAAQ,KCtUnI,SAASi/f,GAAS,EAAO,GAAGhwiB,EAAM,CAChC,OAAOg5N,GAAG,IAAIt+O,CAAK,EAAIA,EAAM,GAAGslB,CAAI,EAAItlB,CAC1C,CACA,IAAIu1jB,IAAa,EAAO,IAAQv1jB,IAAU,IAAQ,CAAC,EAAED,GAAOC,IAAUs+O,GAAG,IAAIt+O,CAAK,EAAIA,EAAMD,CAAG,EAAI+sR,GAAQ9sR,CAAK,CAAC,CAAC,SAASD,CAAG,IAC1Hy1jB,KAAe,EAAM,IAAQl3U,GAAG,IAAI92M,CAAI,EAAIznC,GAAOynC,EAAKznC,GAAOynC,EAC/DiuhB,KAAkB,EAAO,IAAQvpjB,EAAM,UAAY,GAAOA,EAAMnM,GAAOmM,EAAM,QAAUA,EAAM,QAAQnM,GAAO,IAAK,GACjH4rd,IAAiB,GAAU3rd,EAC3B01jB,IAAmB,EAAO,EAAY/pG,MAAkB,CAC1D,IAAInnd,EAAOyhS,IACP/5R,EAAM,SAAWA,EAAM,UAAY,KACrC,EAAQA,EAAM,QACd,EAAO,OAAO,KAAKA,CAAK,GAE1B,IAAMypjB,EAAY,CAAC,EACnB,IAAK,IAAM51jB,KAAOyE,EAAM,CACtB,IAAMxE,EAAQumH,EAAUr6G,EAAMnM,GAAMA,CAAG,EAClCu+O,GAAG,IAAIt+O,CAAK,IACf,EAAUD,GAAOC,EAErB,CACA,OAAO21jB,CACT,EACI1vR,IAAgB,CAClB,SACA,UACA,UACA,WACA,UACA,WACA,QACF,EACI2vR,IAAiB,CACnB,OAAQ,EACR,KAAM,EACN,GAAI,EACJ,IAAK,EACL,KAAM,EACN,MAAO,EACP,MAAO,EACP,OAAQ,EACR,QAAS,EACT,UAAW,EACX,QAAS,EACT,MAAO,EACP,QAAS,EACT,QAAS,EACT,SAAU,EACV,QAAS,EACT,SAAU,EACV,OAAQ,EACR,UAAW,EAEX,MAAO,EACP,MAAO,EACP,KAAM,EACN,QAAS,EACT,QAAS,EACT,MAAO,EACP,OAAQ,EACR,MAAO,EACP,SAAU,EACV,YAAa,EAEb,KAAM,EACN,OAAQ,EACR,SAAU,CACZ,EACA,SAASC,IAAgB,EAAO,CAC9B,IAAMC,EAAU,CAAC,EACbxvgB,EAAQ,EAOZ,GANAongB,GAASxhjB,GAAQ,EAAO,IAAS,CAC1B0pjB,IAAepuhB,KAClB,EAAQA,GAAQxnC,EAChB,IAEJ,CAAC,EACGsmD,EACF,OAAOwvgB,CAEX,CACA,SAASC,GAAQ,EAAO,CACtB,IAAMC,EAAMH,IAAgB3pjB,CAAK,EACjC,GAAI8pjB,EAAK,CACP,IAAMz1f,EAAM,CAAE,GAAIy1f,CAAI,EAEtB,OADAtI,GAASxhjB,GAAQ,EAAK,IAAQnM,KAAOi2jB,IAAQ,EAAIj2jB,GAAOJ,EAAI,EACrD4gE,CACT,CACA,MAAO,CAAE,GAAGr0D,CAAM,CACpB,CACA,SAAS+pjB,GAAY,EAAO,CAE1B,MADA,GAAQlF,GAAc/wjB,CAAK,EACpBs+O,GAAG,IAAIt+O,CAAK,EAAIA,EAAM,IAAIi2jB,EAAW,EAAItD,GAAiB3yjB,CAAK,EAAI0jL,GAAE,yBAAyB,CACnG,MAAO,CAAC,EAAG,CAAC,EACZ,OAAQ,CAAC1jL,EAAOA,CAAK,CACvB,CAAC,CAAC,CAAC,CAAC,EAAIA,CACV,CACA,SAASk2jB,IAAS,EAAO,CACvB,IAAK,IAAMz+gB,KAAKvrC,EAAO,MAAO,GAC9B,MAAO,EACT,CACA,SAASiqjB,GAAU,EAAK,CACtB,OAAO73U,GAAG,IAAI03U,CAAG,GAAK13U,GAAG,IAAI03U,CAAG,GAAK13U,GAAG,IAAI03U,EAAI,EAAE,CACpD,CACA,SAASI,IAAW,EAAM,EAAK,CAC7BC,EAAK,KAAK,OAAOA,CAAI,EACrB57hB,GAAK,OAAO47hB,CAAI,CAClB,CACA,SAASC,IAAW,EAAM,EAAK,CACzB77hB,GAAO47hB,EAAK,MAAQ57hB,IACtB47hB,EAAK,KAAK,OAAOA,CAAI,EACrB57hB,EAAI,IAAI47hB,CAAI,EACZ,EAAK,IAAM57hB,EAEf,CA2FA,IAAIikF,IAAS,CACX,QAAS,CAAE,QAAS,IAAK,SAAU,EAAG,EACtC,OAAQ,CAAE,QAAS,IAAK,SAAU,EAAG,EACrC,OAAQ,CAAE,QAAS,IAAK,SAAU,EAAG,EACrC,MAAO,CAAE,QAAS,IAAK,SAAU,EAAG,EACpC,KAAM,CAAE,QAAS,IAAK,SAAU,EAAG,EACnC,SAAU,CAAE,QAAS,IAAK,SAAU,GAAI,CAC1C,EAGIg8b,GAAW,CACb,GAAGh8b,IAAO,QACV,KAAM,EACN,QAAS,EACT,OAAQiyc,IAAQ,OAChB,MAAO,EACT,EACI4F,IAAkB,KAAM,CAC1B,aAAc,CAMZ,KAAK,SAAW,EAChB,OAAO,OAAO,KAAM7b,EAAQ,CAC9B,CACF,EACA,SAAS8b,IAAY,EAAS,EAAW,EAAe,CAClDC,IACF,EAAgB,CAAE,GAAGA,CAAc,EACnCC,IAAeD,EAAelob,CAAS,EACvC,EAAY,CAAE,GAAGkob,EAAe,GAAGlob,CAAU,GAE/Cmob,IAAeC,EAASpob,CAAS,EACjC,OAAO,OAAOoob,EAASpob,CAAS,EAChC,IAAK,IAAMxuI,KAAO26iB,GACZic,EAAQ52jB,KACV,EAAQA,GAAO26iB,GAAS36iB,IAG5B,GAAI,CAAE,YAAW,WAAY42jB,EACvB,CAAE,QAASA,EAOjB,OANK7C,GAAI,IAAI8C,CAAS,IAChBA,EAAY,MAAM,EAAY,KAC9Br7E,EAAU,IAAG,EAAU,GAC3B,EAAQ,SAAmB,EAAI,KAAK,GAAKq7E,IAAW,EAAKC,EACzD,EAAQ,SAAW,EAAI,KAAK,GAAKt7E,EAAUs7E,EAAOD,GAE7CD,CACT,CACA,SAASD,IAAe,EAAS,EAAO,CACtC,GAAI,CAAC5C,GAAI,IAAI5njB,EAAM,KAAK,EACtB,EAAQ,SAAW,IAAK,OACnB,CACL,IAAM4qjB,EAAkB,CAAChD,GAAI,IAAI5njB,EAAM,OAAO,GAAK,CAAC4njB,GAAI,IAAI5njB,EAAM,QAAQ,GACtE4qjB,GAAmB,CAAChD,GAAI,IAAI5njB,EAAM,SAAS,GAAK,CAAC4njB,GAAI,IAAI5njB,EAAM,OAAO,GAAK,CAAC4njB,GAAI,IAAI5njB,EAAM,IAAI,KAChG,EAAQ,SAAW,IAAK,GACxB,EAAQ,MAAQ,IAAK,IAEnB4qjB,IACF,EAAQ,UAAY,IAAK,GAE7B,CACF,CAGA,IAAIC,IAAa,CAAC,EACdC,IAAY,KAAM,CACpB,aAAc,CACZ,KAAK,QAAU,GACf,KAAK,OAASD,IACd,KAAK,SAAW,KAChB,KAAK,WAAaA,IAClB,KAAK,OAAS,IAAIR,IAClB,KAAK,UAAY,EACnB,CACF,EAIA,SAASU,IAAc,EAAQ,CAAE,MAAK,QAAO,eAAc,QAAO,WAAW,CAC3E,OAAO,IAAI,SAAS,EAAS,IAAW,CACtC,IAAIr0gB,EACAnB,EACAo4E,EAAS07b,GAAUrpjB,EAAM,QAAUwwM,GAAc,OAAQ38M,CAAG,EAChE,GAAI85H,EACFs4S,EAAQ,MACH,CACAoiJ,GAAI,IAAIrojB,EAAM,KAAK,IACtB,EAAM,OAASqpjB,GAAUrpjB,EAAM,MAAOnM,CAAG,GAE3C,IAAI68f,EAAQlgT,GAAc,MACtBkgT,IAAU,KACZ,EAAQp3f,EAAM,QAAU+vjB,GAAU34D,EAAO78f,CAAG,GAE9C,EAAQu1jB,GAASppjB,EAAM,OAAS,EAAGnM,CAAG,EAClC68f,GACFp3f,EAAM,YAAY,IAAI0xjB,CAAQ,EAC9BC,EAAQ,MAAM,IAEdA,EAAQ,OAAO,EACfD,EAAS,EAEb,CACA,SAASE,GAAU,CACjB5xjB,EAAM,YAAY,IAAI0xjB,CAAQ,EAC9B1xjB,EAAM,SAAS,OAAOi8C,CAAO,EAC7BA,EAAQ,OAAO,EACf,EAAQA,EAAQ,KAAOiqU,GAAI,IAAI,CACjC,CACA,SAASwrM,GAAW,CACdt0gB,EAAQ,GAAK,CAACy0gB,GAAG,eACnB,EAAM,QAAU,GAChB,EAAU3rM,GAAI,WAAWymD,EAASvvX,CAAK,EACvCp9C,EAAM,WAAW,IAAI4xjB,CAAO,EAC5B5xjB,EAAM,SAAS,IAAIi8C,CAAO,GAE1B0wX,EAAQ,CAEZ,CACA,SAASA,GAAU,CACjB,CACE3sa,CAAM,UAAU,GAElBA,EAAM,WAAW,OAAO4xjB,CAAO,EAC/B5xjB,EAAM,SAAS,OAAOi8C,CAAO,EACzB61gB,IAAW9xjB,EAAM,UAAY,KAC/B,EAAS,IAEX,GAAI,CACF2xjB,EAAQ,MAAM,CAAE,GAAGjrjB,EAAO,SAAQ,QAAO,EAAGquC,CAAO,CACrD,OAAS3uB,EAAK,CACZ6uB,EAAO7uB,CAAG,CACZ,CACF,CACF,CAAC,CACH,CAYA,IAAI2riB,IAAqB,EAAQ,IAAY9kW,EAAQ,QAAU,EAAIA,EAAQ,GAAKA,EAAQ,KAAM,GAAWtwN,EAAO,SAAS,EAAIq1jB,GAAmB9tjB,EAAO,IAAI,CAAC,EAAI+oN,EAAQ,MAAO,GAAWtwN,EAAO,IAAI,EAAIs1jB,IAAc/tjB,EAAO,IAAI,CAAC,EAAIgujB,GACrOhujB,EAAO,IAAI,EACX+oN,EAAQ,MAAO,GAAWtwN,EAAO,QAAQ,CAC3C,EACIs1jB,IAAiB,IAAW,CAC9B,QACA,KAAM,GACN,SAAU,GACV,UAAW,EACb,GACIC,IAAqB,EAAO,EAAU,EAAY,MAAW,CAC/D,QACA,WACA,WACF,GACIF,GAAsB,IAAW,CACnC,QACA,UAAW,GACX,SAAU,EACZ,GAGA,SAASG,IAAS,EAAK,EAAO,EAAO,EAAQ,CAC3C,GAAM,CAAE,SAAQ,WAAU,UAAWzrjB,EAC/B,CAAE,QAAS0rjB,EAAQ,QAASC,GAAgBryjB,EAIlD,MAHI,CAACmqD,GAAYqmgB,IAAQ4B,GAAU,CAAC1rjB,EAAM,MACjC2rjB,EAEF,EAAM,SAAW,SAAY,CAClC,EAAM,QAAUP,EAChB,EAAM,QAAUtB,EAChB,IAAMt5W,EAAeg5W,GACnBxpjB,GACC,EAAO,IAENnM,IAAQ,SAAW,IAAK,GAAIC,CAEhC,EACI83jB,EACAlmN,EACEmmN,EAAc,IAAI,SACrB,EAAS,KAAY,EAAcx9gB,EAAS,EAAOE,EACtD,EACMu9gB,EAAe,GAAe,CAClC,IAAMC,EAEJX,IAAW9xjB,EAAM,UAAY,IAAMgyjB,GAAmB9tjB,CAAM,GAC5D4tjB,IAAW9xjB,EAAM,SAAWkyjB,GAAkBhujB,EAAQ,EAAK,EAE7D,GAAIuujB,EAGF,KAFA,GAAW,OAASA,EACpBrmN,EAAKsmN,CAAU,EACTA,CAEV,EACMC,GAAW,EAAM,IAAS,CAC9B,IAAMD,EAAa,IAAIE,IACjBC,EAAsB,IAAIC,IAChC,OAAQ,SAAY,CAClB,GAAIC,GAAG,cAIL,MAHAC,GAAUhzjB,CAAK,EACf,EAAoB,OAASkyjB,GAAkBhujB,EAAQ,EAAK,EAC5DkoW,EAAKymN,CAAmB,EAClBA,EAERL,EAAYE,CAAU,EACtB,IAAMO,EAAS9D,GAAI,IAAIhjY,CAAI,EAAI,CAAE,GAAGA,CAAK,EAAI,CAAE,GAAGhB,EAAM,GAAIgB,CAAK,EACjE,EAAO,SAAW2lY,EAClB5J,GAAUhxW,GAAe,EAAO,IAAQ,CAClCi4W,GAAI,IAAI8D,EAAO14jB,EAAI,IACrB,EAAOA,GAAOC,EAElB,CAAC,EACD,IAAM04jB,EAAU,MAAMhvjB,EAAO,MAAM+ujB,CAAM,EAOzC,OANAT,EAAYE,CAAU,EAClB1yjB,EAAM,QACR,MAAM,IAAI,QAAS,GAAW,CAC5BA,EAAM,YAAY,IAAIu7V,CAAM,CAC9B,CAAC,EAEI23N,CACT,GAAG,CACL,EACIv2jB,EACJ,GAAIo2jB,GAAG,cAEL,OADAC,GAAUhzjB,CAAK,EACRkyjB,GAAkBhujB,EAAQ,EAAK,EAExC,GAAI,CACF,IAAIivjB,EACJ,CAOEA,CAPEhE,GAAI,IAAIqB,CAAG,GACA,KAAO,IAAU,CAC5B,IAAK,IAAMyC,KAAU92U,EACnB,MAAMw2U,EAAQM,CAAM,CAExB,GAAGzC,CAAG,EAEM,QAAQ,QAAQA,EAAImC,EAASzujB,EAAO,KAAK,KAAKA,CAAM,CAAC,CAAC,EAEpE,MAAM,QAAQ,IAAI,CAACivjB,EAAU,KAAKb,CAAW,EAAGC,CAAW,CAAC,EAC5D,EAASL,GAAkBhujB,EAAO,IAAI,EAAG,GAAM,EAAK,CACtD,OAASkiB,EAAK,CACZ,GAAIA,aAAewsiB,IACjB,EAASxsiB,EAAI,YACR,GAAIA,aAAe0siB,IACxB,EAAS1siB,EAAI,YAEb,MAAMA,CAEV,QAAU,CACJ0riB,GAAU9xjB,EAAM,UAClB,EAAM,QAAUmqD,EAChB,EAAM,QAAUA,EAAWiogB,EAAS,IAAK,GACzC,EAAM,QAAUjogB,EAAWkogB,EAAc,IAAK,GAElD,CAMA,OALIlD,GAAI,IAAIiE,CAAM,GAChBltM,GAAK,mBAAqB,CACxBktM,EAAOz2jB,EAAQuH,EAAQA,EAAO,IAAI,CACpC,CAAC,EAEIvH,CACT,GAAG,CACL,CACA,SAASq2jB,GAAU,EAAO,EAAU,CAClCnhhB,GAAM7xC,EAAM,SAAW,GAAMoxD,EAAE,OAAO,CAAC,EACvCpxD,EAAM,WAAW,MAAM,EACvBA,EAAM,YAAY,MAAM,EACxB,EAAM,QAAU,EAAM,QAAU,EAAM,QAAU,IAAK,GACjDqzjB,IAAU,EAAM,SAAWA,EACjC,CACA,IAAIT,IAAa,cAAc,KAAM,CACnC,aAAc,CACZ,MACE,yIACF,CACF,CACF,EACIE,IAAsB,cAAc,KAAM,CAC5C,aAAc,CACZ,MAAM,qBAAqB,CAC7B,CACF,EAWIQ,GAAgB,GAAU94jB,aAAiB+4jB,GAC3C3qe,IAAS,EACT2qe,GAAa,cAAcC,GAAY,CACzC,aAAc,CACZ,MAAM,GAAG,SAAS,EAClB,KAAK,GAAK,MACV,KAAK,UAAY,CACnB,CACA,IAAI,UAAW,CACb,OAAO,KAAK,SACd,CACA,IAAI,SAAS,EAAU,CACjB,KAAK,WAAalke,IACpB,KAAK,UAAYA,EACjB,KAAK,kBAAkBA,CAAQ,EAEnC,CAEA,KAAM,CACJ,IAAMzY,EAAOi3e,GAAY,IAAI,EAC7B,OAAOj3e,GAAQA,EAAK,SAAS,CAC/B,CAEA,GAAG,GAAG/2D,EAAM,CACV,OAAO2ziB,GAAG,GAAG,KAAM3ziB,CAAI,CACzB,CAEA,YAAY,GAAGA,EAAM,CAEnB,OADAktiB,IAAqB,EACdyG,GAAG,GAAG,KAAM3ziB,CAAI,CACzB,CACA,QAAS,CACP,OAAO,KAAK,IAAI,CAClB,CACA,cAAc,EAAO,CACfghC,GAAS,GAAG,KAAK,QAAQ,CAC/B,CACA,gBAAgB,EAAO,CACjBA,GAAS,GAAG,KAAK,QAAQ,CAC/B,CAEA,SAAU,CACV,CAEA,SAAU,CACV,CAEA,UAAU,EAAO,EAAO,GAAO,CAC7B6qgB,GAAmB,KAAM,CACvB,KAAM,SACN,OAAQ,KACR,QACA,MACF,CAAC,CACH,CAEA,kBAAkB,EAAU,CACrB,KAAK,MACRnD,GAAU,KAAK,IAAI,EAErBmD,GAAmB,KAAM,CACvB,KAAM,WACN,OAAQ,KACR,UACF,CAAC,CACH,CACF,EAGI+H,GAAK,OAAO,IAAI,aAAa,EAC7BC,IAAe,EACfC,GAAe,EACfC,GAAY,EACZC,GAAe,IAAY5vjB,EAAOwvjB,IAAMC,KAAgB,EACxDI,GAAe,IAAY7vjB,EAAOwvjB,IAAME,IAAgB,EACxDI,GAAY,IAAY9vjB,EAAOwvjB,IAAMG,IAAa,EAClDI,KAAgB,EAAQ,IAAWhuQ,EAAS,EAAOytQ,KAAOE,GAAeD,IAAe,EAAOD,KAAO,CAACE,GACvGM,KAAgB,EAAQ,IAAWC,EAAS,EAAOT,KAAOG,GAAY,EAAOH,KAAO,CAACG,GAGrFO,IAAc,cAAcb,EAAW,CACzC,YAAY,EAAM,EAAM,CAqBtB,GApBA,MAAM,EAEN,KAAK,UAAY,IAAI/B,IAErB,KAAK,aAAe,CAAC,EAErB,KAAK,OAAS,CACZ,OAAQ,GACR,QAAS,GACT,WAA4B,IAAI,IAChC,YAA6B,IAAI,IACjC,SAA0B,IAAI,GAChC,EAEA,KAAK,cAAgC,IAAI,IAEzC,KAAK,YAAc,EAEnB,KAAK,UAAY,EACjB,KAAK,kBAAoB,EACrB,CAAC3B,GAAI,IAAI1jY,CAAI,GAAK,CAAC0jY,GAAI,IAAI1kY,CAAI,EAAG,CACpC,IAAMzkL,EAAQmpjB,GAAI,IAAI1jY,CAAI,EAAI,CAAE,GAAGA,CAAK,EAAI,CAAE,GAAGhB,EAAM,KAAMgB,CAAK,EAC9D0jY,GAAI,IAAInpjB,EAAM,OAAO,IACvB,EAAM,QAAU,IAElB,KAAK,MAAMA,CAAK,CAClB,CACF,CAEA,IAAI,MAAO,CACT,MAAO,EAAEqtjB,GAAY,IAAI,GAAK,KAAK,OAAO,UAAYC,GAAS,IAAI,CACrE,CACA,IAAI,MAAO,CACT,OAAOK,GAAe,KAAK,UAAU,EAAE,CACzC,CACA,IAAI,UAAW,CACb,IAAMx9e,EAAOy9e,GAAa,IAAI,EAC9B,OAAOz9e,aAAgBq3e,GAAgBr3e,EAAK,cAAgB,EAAIA,EAAK,WAAW,CAAC,CAAC,IAAK,GAAUmiB,EAAM,cAAgB,CAAC,CAC1H,CAIA,IAAI,aAAc,CAChB,OAAO86d,GAAY,IAAI,CACzB,CAKA,IAAI,aAAc,CAChB,OAAOC,GAAY,IAAI,CACzB,CAIA,IAAI,UAAW,CACb,OAAOC,GAAS,IAAI,CACtB,CAKA,IAAI,WAAY,CACd,OAAO,KAAK,OAAO,OACrB,CAEA,QAAQ,EAAI,CACV,IAAIO,EAAO,GACP7td,EAAU,GACR8td,EAAO,KAAK,UACd,CAAE,YAAaA,EACb,CAAE,OAAQrD,GAAYqD,EACtBzthB,EAAUinhB,GAAWwG,EAAK,EAAE,EAC9B,CAACzthB,GAAWukhB,GAAckJ,EAAK,EAAE,IACnC,EAAWC,GAASJ,GAAeG,EAAK,EAAE,CAAC,GAE7CA,EAAK,OAAO,SAAS,EAAO,IAAM,CAChC,GAAIx7d,EAAM,KAAM,OAChB,IAAMw3d,EAEJx3d,EAAM,aAAeo1d,GAAiB,EAAIrnhB,EAAUA,EAAQ7jC,EAAE,CAAC,aAAewxjB,EAASxxjB,GAErFyxjB,EAAWH,EAAK,UAChBrse,EAAWqoe,EACf,GAAI,CAACmE,EAAU,CAEb,GADA,EAAW37d,EAAM,aACbm4d,EAAQ,SAAW,EAAG,CACxB,EAAM,KAAO,GACb,MACF,CACA,IAAI7rQ,EAAU,EAAM,aAAe27H,EAC7B5oZ,EAAOm8hB,EAAK,WAAWtxjB,GACvB+8T,EAAKjnO,EAAM,IAAM,KAAkB,EAAM,GAAK62d,GAAI,IAAIsB,EAAQ,QAAQ,EAAIA,EAAQ,SAASjujB,GAAKiujB,EAAQ,SAAhFn4d,EAAM,GAChC47d,EACEtqc,EAAY6mc,EAAQ,YAAc94hB,GAAQm4hB,EAAM,KAAO,KAAK,IAAI,EAAG,KAAK,IAAIA,EAAMn4hB,CAAI,EAAI,IAAI,GACpG,GAAI,CAACw3hB,GAAI,IAAIsB,EAAQ,QAAQ,EAAG,CAC9B,IAAIvwiB,EAAI,EACJuwiB,EAAQ,SAAW,IACjB,KAAK,oBAAsBA,EAAQ,WACrC,KAAK,kBAAoBA,EAAQ,SAC7Bn4d,EAAM,iBAAmB,IAC3B,EAAM,YAAcm4d,EAAQ,SAAWn4d,EAAM,iBAC7C,EAAU,EAAM,aAAeioV,IAGnC,GAAKkwI,EAAQ,UAAY,GAAK7rQ,EAAU,KAAK,kBAC7C,EAAI1kS,EAAI,EAAI,EAAIA,EAAI,EAAI,EAAIA,EAC5B,EAAM,iBAAmBA,GAE3B,EAAWyX,EAAO84hB,EAAQ,OAAOvwiB,CAAC,GAAK4viB,EAAMn4hB,GAC7C,GAAY8vD,EAAW6Q,EAAM,cAAgBioV,EAC7C,EAAWrga,GAAK,CAClB,MAAO,GAAIuwiB,EAAQ,MAAO,CACxB,IAAM0D,EAAQ1D,EAAQ,QAAU,GAAO,KAAQA,EAAQ,MACjDp/gB,EAAI,KAAK,IAAI,EAAE,EAAI8ihB,GAASvvQ,CAAO,EACzC,EAAWjtR,EAAO4nS,GAAM,EAAI40P,IAAU,EAAI9ihB,GAC1C,EAAW,KAAK,IAAIinD,EAAM,aAAe7Q,CAAQ,GAAKmiC,EACtD,EAAW21M,EAAKluR,CAClB,KAAO,CACL,EAAWinD,EAAM,cAAgB,KAAOinO,EAAKjnO,EAAM,aACnD,IAAM87d,EAAe3D,EAAQ,cAAgB7mc,EAAY,GACnDyqc,EAAe5D,EAAQ,MAAQ,EAAIA,EAAQ,OAC3C6D,EAAY,CAACnF,GAAI,IAAIkF,CAAY,EACjCE,EAAY58hB,GAAQm4hB,EAAMx3d,EAAM,GAAK,EAAI3gE,EAAOm4hB,EAClD0E,EACAC,EAAa,GAEXC,EAAW,KAAK,KAAKn0I,EAAK,CAAI,EACpC,IAAK,IAAI3/a,EAAI,EAAGA,EAAI8zjB,IAClB,EAAW,KAAK,IAAIR,CAAQ,EAAIE,EAE9B,EADE,CAACI,IACH,EAAW,KAAK,IAAI1E,EAAMroe,CAAQ,GAAKmiC,EACnCqqc,KAJsB,EAAErzjB,EAAG,CAQ7B0zjB,IACF,EAAa7se,GAAYqoe,GAAOroe,EAAWqoe,GAAOyE,EAC9CE,IACF,EAAW,CAACP,EAAWG,EACvB,EAAWvE,IAKf,IAAM6E,GAFc,CAAClE,EAAQ,QAAU,MAAQhpe,EAAWqoe,GACrC,CAACW,EAAQ,SAAW,KAAOyD,GACIzD,EAAQ,KAC5D,GAAsBkE,EAAe,EACrC,GAAsBT,EAAW,CACnC,CACF,CACA,EAAM,aAAeA,EACjB,OAAO,MAAMzse,CAAQ,IACvB,QAAQ,KAAK,2BAA4B,IAAI,EAC7C,EAAW,GAEf,CACIphD,GAAW,CAACA,EAAQ7jC,EAAE,CAAC,OACzB,EAAW,IAETyxjB,EACF,EAAM,KAAO,GAEb,EAAO,GAEL37d,EAAM,SAAS7Q,EAAUgpe,EAAQ,KAAK,IACxC,EAAU,GAEd,CAAC,EACD,IAAMt6e,EAAOy9e,GAAa,IAAI,EACxBgB,EAAUz+e,EAAK,SAAS,EAC9B,GAAI09e,EAAM,CACR,IAAMgB,EAAWlB,GAAeG,EAAK,EAAE,GAClCc,IAAYC,GAAY7ud,IAAY,CAACyqd,EAAQ,OAChDt6e,EAAK,SAAS0+e,CAAQ,EACtB,KAAK,UAAUA,CAAQ,GACd7ud,GAAWyqd,EAAQ,OAC5B,KAAK,UAAUmE,CAAO,EAExB,KAAK,MAAM,CACb,MAAW5ud,GACT,KAAK,UAAU4ud,CAAO,CAE1B,CAEA,IAAI,EAAO,CAMT,OALApvM,GAAK,mBAAqB,CACxB,KAAK,MAAM,EACX,KAAK,OAAO1rX,CAAK,EACjB,KAAK,KAAKA,CAAK,CACjB,CAAC,EACM,IACT,CAKA,OAAQ,CACN,KAAK,QAAQ,CAAE,MAAO,EAAK,CAAC,CAC9B,CAEA,QAAS,CACP,KAAK,QAAQ,CAAE,MAAO,EAAM,CAAC,CAC/B,CAEA,QAAS,CACP,GAAIu5jB,GAAY,IAAI,EAAG,CACrB,GAAM,CAAE,GAAIvD,EAAK,OAAQW,GAAY,KAAK,UAC1CjrM,GAAK,mBAAqB,CACxB,KAAK,SAAS,EACTirM,EAAQ,OACX,KAAK,KAAKX,EAAK,EAAK,EAEtB,KAAK,MAAM,CACb,CAAC,CACH,CACA,OAAO,IACT,CAEA,OAAO,EAAO,CAGZ,OAFc,IAAe,CAAK,QAAQ,CAAC,GACrC,KAAK9pjB,CAAK,EACT,IACT,CACA,MAAM,EAAK,EAAM,CACf,IAAIy1O,EAOJ,OANK0zU,GAAI,IAAIW,CAAG,GAGd,EAAQ,KAAK,OAAS,CAAC,EACvB,KAAK,MAAQ,CAAC,GAHd,EAAQ,CAACX,GAAI,IAAIW,CAAG,EAAIA,EAAM,CAAE,GAAGrlY,EAAM,GAAIqlY,CAAI,CAAC,EAK7C,QAAQ,IACbr0U,EAAM,IAAK,GACE,KAAK,QAAQz1O,CAChB,CACT,CACH,CAAC,CAAC,KAAM,GAAYqrjB,GAAkB,KAAM9kW,CAAO,CAAC,CACtD,CAMA,KAAK,EAAQ,CACX,GAAM,CAAE,GAAIujW,GAAQ,KAAK,UAIzB,OAHA,KAAK,OAAO,KAAK,IAAI,CAAC,EACtBwC,GAAU,KAAK,OAAQ3+b,GAAU,KAAK,WAAW,EACjD6xP,GAAK,mBAAqB,KAAK,MAAMsqM,EAAKn8b,CAAM,CAAC,EAC1C,IACT,CAEA,OAAQ,CACN,KAAK,QAAQ,CAAE,MAAO,EAAK,CAAC,CAC9B,CAEA,cAAc,EAAO,CACfryG,EAAM,MAAQ,SAChB,KAAK,OAAO,EACHA,EAAM,MAAQ,aACvB,KAAK,SAAWA,EAAM,SAAW,EAErC,CAOA,aAAa,EAAO,CAClB,IAAMznB,EAAM,KAAK,KAAO,GACpB,CAAE,GAAIi2jB,EAAK,QAAS9pjB,EACxB,EAAMmpjB,GAAI,IAAIW,CAAG,EAAIA,EAAIj2jB,GAAOi2jB,GAC5BA,GAAO,MAAQG,GAAUH,CAAG,KAC9B,EAAM,IAAK,IAEb,EAAOX,GAAI,IAAIx3hB,CAAI,EAAIA,EAAK99B,GAAO89B,EACnC,CACEA,GAAO,IAAK,GAEd,IAAMs6D,EAAQ,CAAE,GAAI69d,EAAK,MAAK,EAU9B,OATKsD,GAAY,IAAI,IACfptjB,EAAM,UAAS,CAAC8pjB,EAAKn4hB,GAAQ,CAACA,EAAMm4hB,CAAG,GAC3C,EAAO6D,GAAeh8hB,CAAI,EACrBw3hB,GAAI,IAAIx3hB,CAAI,EAELi8hB,GAAa,IAAI,GAC3B,KAAK,KAAK9D,CAAG,EAFb,KAAK,KAAKn4hB,CAAI,GAKXs6D,CACT,CAEA,QAAQ,CAAE,GAAGjsF,GAAS,EAAQ,CAC5B,GAAM,CAAE,MAAK,gBAAiB,KAC1BA,EAAM,SACR,OAAO,OACLwwM,EACAg5W,GACExpjB,GACC,EAAO,IAAS,MAAM,KAAKs7B,CAAI,EAAIguhB,IAAYx1jB,EAAOD,CAAG,EAAIC,CAChE,CACF,EACFg7jB,IAAc,KAAM9ujB,EAAO,SAAS,EACpC+ujB,GAAU,KAAM,UAAW/ujB,EAAO,IAAI,EACtC,IAAMisF,EAAQ,KAAK,aAAajsF,CAAK,EACrC,GAAI,OAAO,SAAS,IAAI,EACtB,MAAM,MACJ,4IACF,EAEF,IAAM1G,EAAQ,KAAK,OACnB,OAAOyxjB,IAAc,EAAE,KAAK,YAAa,CACvC,MACA,QACA,eACA,QACA,QAAS,CACP,UAAa,CACNuC,GAAS,IAAI,IAChBE,IAAa,KAAM,EAAI,EACvB/L,GAAWnojB,EAAM,UAAU,EAC3By1jB,GACE,KACA,UACAvD,GAAkB,KAAMwD,GAAc,KAAM,KAAK,UAAU,EAAE,CAAC,EAC9D,IACF,EAEJ,EACA,WAAc,CACR1B,GAAS,IAAI,IACfE,IAAa,KAAM,EAAK,EACpBH,GAAY,IAAI,GAClB,KAAK,QAAQ,EAEf5L,GAAWnojB,EAAM,WAAW,EAC5By1jB,GACE,KACA,WACAvD,GAAkB,KAAMwD,GAAc,KAAM,KAAK,UAAU,EAAE,CAAC,EAC9D,IACF,EAEJ,EACA,MAAO,KAAK,OAAO,KAAK,KAAM/ie,CAAK,CACrC,CACF,CAAC,CAAC,CAAC,KAAM,GAAW,CAClB,GAAIjsF,EAAM,MAAQ/J,EAAO,UAAY,EAAEg5jB,GAAUh5jB,EAAO,MAAO,CAC7D,IAAMy7M,EAAYw9W,IAAiBlvjB,CAAK,EACxC,GAAI0xM,EACF,OAAO,KAAK,QAAQA,EAAW,EAAI,CAEvC,CACA,OAAOz7M,CACT,CAAC,CACH,CAEA,OAAO,EAAO,EAAO,EAAS,CAC5B,GAAI+J,EAAM,OAER,OADA,KAAK,KAAK,EAAI,EACPquC,EAAQi9gB,GAAmB,IAAI,CAAC,EAEzC,IAAM6D,EAAY,CAAChG,GAAI,IAAIl9d,EAAM,EAAE,EAC7Bmje,EAAc,CAACjG,GAAI,IAAIl9d,EAAM,IAAI,EACvC,GAAIkje,GAAaC,EAAa,CAC5B,GAAIpvjB,EAAM,OAAS,KAAK,UACtB,KAAK,UAAYA,EAAM,YAEvB,OAAOquC,EAAQi9gB,GAAmB,IAAI,CAAC,CAE3C,CACA,GAAM,CAAE,MAAK,eAAc,UAAWwC,GAAS,KACzC,CAAE,GAAIpC,EAAQ,KAAM2D,GAAavB,EACnC,CAAE,GAAIhE,EAAM4B,EAAQ,OAAO2D,GAAapje,EACxCmje,GAAe,CAACD,IAAc,CAACnvjB,EAAM,SAAWmpjB,GAAI,IAAIW,CAAG,KAC7D,EAAMn4hB,GAEJ3xB,EAAM,UAAS,CAAC8pjB,EAAKn4hB,GAAQ,CAACA,EAAMm4hB,CAAG,GAC3C,IAAMwF,EAAiB,CAAClgc,GAAQz9F,EAAM09hB,CAAQ,EAC1CC,IACF,EAAK,KAAO39hB,GAEd,EAAOg8hB,GAAeh8hB,CAAI,EAC1B,IAAM49hB,EAAe,CAACngc,GAAQ06b,EAAK4B,CAAM,EACrC6D,GACF,KAAK,OAAOzF,CAAG,EAEjB,IAAM0F,EAAavF,GAAUjqjB,EAAM,EAAE,EAC/B,CAAE,OAAQyqjB,GAAYqD,EACtB,CAAE,QAAO,YAAarD,GACxB0E,GAAaC,KACf,EAAQ,SAAW,GAEjBpvjB,EAAM,QAAU,CAACwvjB,GACnBlF,IACEG,EACArB,GAASppjB,EAAM,OAAQnM,CAAG,EAE1BmM,EAAM,SAAWwwM,EAAa,OAA8C,IAAK,GAA1C44W,GAAS54W,EAAa,OAAQ38M,CAAG,CAC1E,EAEF,IAAIs8E,EAAOy9e,GAAa,IAAI,EAC5B,GAAI,CAACz9e,GAAQg5e,GAAI,IAAIW,CAAG,EACtB,OAAOz7gB,EAAQm9gB,GAAkB,KAAM,EAAI,CAAC,EAE9C,IAAMhqP,EAIJ2nP,GAAI,IAAInpjB,EAAM,KAAK,EAAIovjB,GAAe,CAACpvjB,EAAM,QAAU,CAACmpjB,GAAI,IAAIx3hB,CAAI,GAAK03hB,GAAUrpjB,EAAM,MAAOnM,CAAG,EAE/FC,EAAQ0tU,EAAQ7vS,EAAO,KAAK,IAAI,EAChCk2hB,EAAOkC,GAAYD,CAAG,EACtB2F,EAAetG,GAAI,IAAItB,CAAI,GAAKsB,GAAI,IAAItB,CAAI,GAAKS,GAAkBT,CAAI,EACvE1kI,EAAY,CAACqsI,IAAe,CAACC,GAAgBpG,GAAU74W,EAAa,WAAaxwM,EAAM,UAAWnM,CAAG,GAC3G,GAAI07jB,EAAc,CAChB,IAAMl8S,EAAW+0S,GAAgB0B,CAAG,EACpC,GAAIz2S,IAAaljM,EAAK,YAAa,CACjC,GAAIgzW,EACF,EAAO,KAAK,KAAK0kI,CAAI,OAErB,MAAM,MACJ,0BAA0B13e,EAAK,YAAY,KAAK,OAAOkjM,EAAS,KAAK,4BACvE,CACJ,CACF,CACA,IAAMq8S,EAAWv/e,EAAK,YAClBy4P,EAAUg8O,GAAckF,CAAG,EAC3BmE,EAAW,GACf,GAAI,CAACrlP,EAAS,CACZ,IAAM+mP,EAAkBnuP,GAAS,CAAC4rP,GAAY,IAAI,GAAKkC,GACnDC,GAAgBI,KAClB,EAAWvgc,GAAQ26b,GAAYj2jB,CAAK,EAAG+zjB,CAAI,EAC3C,EAAU,CAACoG,IAET,CAAC7+b,GAAQ0+b,EAAK,UAAW3qI,CAAS,GAAK,CAACA,GAAa,CAAC/zT,GAAQq7b,EAAQ,MAAO0D,CAAK,GAAK,CAAC/+b,GAAQq7b,EAAQ,SAAUyD,CAAQ,KAC5H,EAAU,GAEd,CAQA,GAPID,GAAYZ,GAAY,IAAI,IAC1BS,EAAK,SAAW,CAACtsP,EACnB,EAAU,GACAoH,GACV,KAAK,MAAM8iP,CAAM,GAGjB,CAAC8D,KACC5mP,GAAWg8O,GAAc8G,CAAM,KACjC,EAAK,OAASv7e,EAAK,WAAW,EAC9B,EAAK,SAAWy0e,GAAckF,CAAG,EAAI,KAAO4F,GAAYhI,GAAiB,CAAC,CAAC,EAAIqG,GAASlG,CAAI,GAE1FiG,EAAK,WAAa3qI,IACpB,EAAK,UAAYA,EACb,CAACA,GAAa,CAAC3hH,GACjB,KAAK,KAAKkqP,CAAM,GAGhB9iP,GAAS,CACX,GAAM,CAAE,UAAWklP,EACnB7M,GAAM2O,IAAgB,GAASd,IAAc,KAAM9ujB,EAAO0b,CAAI,CAAC,EAC/D,IAAMzlB,EAASu1jB,GAAkB,KAAMwD,GAAc,KAAMtD,CAAM,CAAC,EAClEjK,GAAW,KAAK,cAAexrjB,CAAM,EACrC,KAAK,cAAc,IAAIo4C,CAAO,EAC1By/gB,EAAK,SACPtuM,GAAK,mBAAqB,CACxB,EAAK,QAAU,CAACh+C,EAChBkrP,IAASz2jB,EAAQ,IAAI,EACjBurU,EACF4nP,GAAS54W,EAAa,OAAQv6M,CAAM,EAEpC63jB,EAAK,UAAU73jB,EAAQ,IAAI,CAE/B,CAAC,CACL,CAEEurU,GACF,KAAK,KAAK1tU,CAAK,EAEb07jB,EACFnhhB,EAAQo9gB,IAASzrjB,EAAM,GAAIA,EAAO,KAAK,OAAQ,IAAI,CAAC,EAC3C4oU,EACT,KAAK,OAAO,EACHykP,GAAY,IAAI,GAAK,CAACkC,EAC/B,KAAK,cAAc,IAAIlhhB,CAAO,EAE9BA,EAAQk9gB,IAAcz3jB,CAAK,CAAC,CAEhC,CAEA,OAAO,EAAO,CACZ,IAAMg6jB,EAAO,KAAK,UACdh6jB,IAAUg6jB,EAAK,KACbhJ,IAAkB,IAAI,GACxB,KAAK,QAAQ,EAEf,EAAK,GAAKhxjB,EACNgxjB,IAAkB,IAAI,GACxB,KAAK,QAAQ,EAGnB,CACA,SAAU,CACR,IAAIl8d,EAAW,EACT,CAAE,GAAIkhe,GAAQ,KAAK,UACrBlF,GAAckF,CAAG,IACnB1E,GAAiB0E,EAAK,IAAI,EACtB8C,GAAa9C,CAAG,IAClB,EAAWA,EAAI,SAAW,IAG9B,KAAK,SAAWlhe,CAClB,CACA,SAAU,CACR,GAAM,CAAE,GAAIkhe,GAAQ,KAAK,UACrBlF,GAAckF,CAAG,GACnBzE,GAAoByE,EAAK,IAAI,CAEjC,CAKA,KAAK,EAAK,EAAO,GAAM,CACrB,IAAMh2jB,EAAQ65jB,GAAexjgB,CAAG,EAChC,GAAI,CAACg/f,GAAI,IAAIr1jB,CAAK,EAAG,CACnB,IAAMu8E,EAAUu9e,GAAa,IAAI,EACjC,GAAI,CAACv9e,GAAW,CAAC++C,GAAQt7H,EAAOu8E,EAAQ,SAAS,CAAC,EAAG,CACnD,IAAMgjM,EAAW+0S,GAAgBt0jB,CAAK,EAClC,CAACu8E,GAAWA,EAAQ,aAAegjM,EACrCg0S,GAAY,KAAMh0S,EAAS,OAAOv/Q,CAAK,CAAC,EAExCu8E,EAAQ,SAASv8E,CAAK,EAEpBu8E,GACFmvS,GAAK,mBAAqB,CACxB,KAAK,UAAU1rX,EAAO+5jB,CAAI,CAC5B,CAAC,CAEL,CACF,CACA,OAAOD,GAAa,IAAI,CAC1B,CACA,UAAW,CACT,IAAME,EAAO,KAAK,UACbA,EAAK,UACR,EAAK,QAAU,GACfiB,GACE,KACA,UACAvD,GAAkB,KAAMwD,GAAc,KAAMlB,EAAK,EAAE,CAAC,EACpD,IACF,EAEJ,CACA,UAAU,EAAO,EAAM,CAChBD,IACH,KAAK,SAAS,EACdzE,GAAS,KAAK,UAAU,SAAUt1jB,EAAO,IAAI,GAE/Cs1jB,GAAS,KAAK,aAAa,SAAUt1jB,EAAO,IAAI,EAChD,MAAM,UAAUA,EAAO+5jB,CAAI,CAC7B,CAIA,QAAS,CACP,IAAMC,EAAO,KAAK,UAClB1G,GAAa,IAAI,CAAC,CAAC,MAAMuG,GAAeG,EAAK,EAAE,CAAC,EAC3CA,EAAK,YACR,EAAK,WAAaA,EAAK,OAAO,IAAK,GAAS39e,EAAK,YAAY,GAE1Dk9e,GAAY,IAAI,IACnBE,IAAa,KAAM,EAAI,EAClBD,GAAS,IAAI,GAChB,KAAK,QAAQ,EAGnB,CACA,SAAU,CACJuC,GAAG,cACL,KAAK,OAAO,EAEZ/N,GAAW,MAAM,IAAI,CAEzB,CAMA,MAAM,EAAM,EAAQ,CAClB,GAAIuL,GAAY,IAAI,EAAG,CACrBE,IAAa,KAAM,EAAK,EACxB,IAAMO,EAAO,KAAK,UAClB7M,GAAM6M,EAAK,OAAS,GAAS,CAC3B,EAAK,KAAO,EACd,CAAC,EACGA,EAAK,WACP,EAAK,SAAW,EAAK,QAAU,EAAK,SAAW,IAAK,IAEtD7I,GAAoB,KAAM,CACxB,KAAM,OACN,OAAQ,IACV,CAAC,EACD,IAAMhvjB,EAAS03H,EAAS29b,GAAmB,KAAK,IAAI,CAAC,EAAIE,GAAkB,KAAK,IAAI,EAAGwD,GAAc,KAAMnH,GAAQiG,EAAK,EAAE,CAAC,EAC3HrM,GAAW,KAAK,cAAexrjB,CAAM,EACjC63jB,EAAK,UACP,EAAK,QAAU,GACfiB,GAAU,KAAM,SAAU94jB,EAAQ,IAAI,EAE1C,CACF,CACF,EACA,SAAS+4jB,GAAc,EAAQ,EAAK,CAClC,IAAMnH,EAAOkC,GAAYD,CAAG,EAE5B,OAAO16b,GADO26b,GAAYvsjB,EAAO,IAAI,CACtB,EAAOqqjB,CAAI,CAC5B,CACA,SAASqH,IAAiB,EAAO,EAAOlvjB,EAAM,KAAM,EAAMA,EAAM,GAAI,CAClE,IAAM8vjB,EAAU1G,GAAStI,CAAI,EAC7B,GAAIgP,EAAS,CACX,IAAM3rG,EAAY2rG,IAAY,IAAQjG,GAAQiG,CAAO,EAC/C15b,GAAW+tV,GAAankd,EAAA,CAAO,QAC/BwhU,EAAQ,CAAC2iJ,GAAaA,EAAU,MACtC,OAAO9iO,GAAa,CAClB,GAAGrhP,EACH,OAEA,QAAS,GAET,MAAO,IAAK,GAIZ,GAAI,CAACo2H,GAAW6zb,GAAUH,CAAG,EAAIA,EAAM,IAAK,GAE5C,KAAMtoP,EAAQxhU,EAAM,KAAO,IAAK,GAChC,QAGA,GAAGmkd,CACL,CAAC,CACH,CACF,CACA,SAAS9iO,GAAa,EAAO,CAC3B,GAAM,CAAE,GAAIyoU,EAAK,QAAS,EAAQD,GAAQ7pjB,CAAK,EACzC1H,EAAuB,IAAI,IAIjC,OAHI6wjB,GAAI,IAAIW,CAAG,GAAGiG,IAAYjG,EAAKxxjB,CAAI,EACnC6wjB,GAAI,IAAIx3hB,CAAI,GAAGo+hB,IAAYp+hB,EAAMr5B,CAAI,EACzC,EAAM,KAAOA,EAAK,KAAO,MAAM,KAAKA,CAAI,EAAI,KACrC0H,CACT,CAQA,SAAS+vjB,IAAY,EAAQ,EAAM,CACjCvO,GAAUj/hB,GAAS,EAAO,IAAQzuB,GAAS,MAAQwE,EAAK,IAAIzE,CAAG,CAAC,CAClE,CACA,IAAI+7jB,IAAgB,CAClB,UACA,SACA,WACA,UACA,UACF,EACA,SAASd,IAAc,EAAQ,EAAO,EAAM,CAC1C,EAAO,UAAUpziB,GAAQ1b,EAAM0b,KAAU6tiB,IAAevpjB,EAAO0b,CAAI,EAA2C,IAAK,GAA5C4tiB,IAAYtpjB,EAAM0b,GAAOle,EAAO,GAAG,CAC5G,CACA,SAASuxjB,GAAU,EAAQ,EAAM,GAAG31iB,EAAM,CACxC5b,EAAO,UAAUke,EAAK,GAAG,GAAGtC,CAAI,EAChC5b,EAAO,aAAake,EAAK,GAAG,GAAGtC,CAAI,CACrC,CAcA,IAAI42iB,IAAiB,CAAC,UAAW,WAAY,QAAQ,EACjDC,IAAU,EACVC,IAAa,KAAM,CACrB,YAAY,EAAO,EAAQ,CACzB,KAAK,GAAK,MAEV,KAAK,QAAU,CAAC,EAEhB,KAAK,MAAQ,CAAC,EAEd,KAAK,aAAe,EAEpB,KAAK,QAA0B,IAAI,IAEnC,KAAK,SAA2B,IAAI,IAEpC,KAAK,SAAW,GAEhB,KAAK,OAAS,CACZ,OAAQ,GACR,WAA4B,IAAI,IAChC,YAA6B,IAAI,IACjC,SAA0B,IAAI,GAChC,EAEA,KAAK,QAAU,CACb,QAAyB,IAAI,IAC7B,SAA0B,IAAI,IAC9B,OAAwB,IAAI,GAC9B,EACA,KAAK,SAAW,KAAK,SAAS,KAAK,IAAI,EACnCC,IACF,KAAK,OAASA,GAEZnwjB,GACF,KAAK,MAAM,CAAE,QAAS,GAAM,GAAGA,CAAM,CAAC,CAE1C,CAKA,IAAI,MAAO,CACT,MAAO,CAAC,KAAK,OAAO,SAAW,OAAO,OAAO,KAAK,OAAO,CAAC,CAAC,MAAO,GACzDmve,EAAO,MAAQ,CAACA,EAAO,WAAa,CAACA,EAAO,QACpD,CACH,CACA,IAAI,MAAO,CACT,OAAO,KAAK,KACd,CACA,IAAI,KAAK,EAAM,CACb,KAAK,MAAQhvc,CACf,CAEA,KAAM,CACJ,IAAM5d,EAAS,CAAC,EAEhB,OADA,KAAK,MAAM,EAAQ,IAAQ,EAAO1uB,GAAOs7e,EAAO,IAAI,CAAC,EAC9C5sd,CACT,CAEA,IAAI,EAAQ,CACV,IAAK,IAAM1uB,KAAO0uB,EAAQ,CACxB,IAAMzuB,EAAQyuB,EAAO1uB,GAChBu8jB,GAAI,IAAIt8jB,CAAK,GAChB,KAAK,QAAQD,EAAI,CAAC,IAAIC,CAAK,CAE/B,CACF,CAEA,OAAO,EAAO,CAIZ,OAHIkM,GACF,KAAK,MAAM,KAAKqhP,GAAarhP,CAAK,CAAC,EAE9B,IACT,CAQA,MAAM,EAAO,CACX,GAAI,CAAE,SAAU,KAUhB,OATIA,EACF,EAAQqwjB,GAASrwjB,CAAK,CAAC,CAAC,IAAIqhP,EAAY,EAExC,KAAK,MAAQ,CAAC,EAEZ,KAAK,OACA,KAAK,OAAO,KAAM5L,CAAK,GAEhC66U,IAAY,KAAM76U,CAAK,EAChB86U,IAAiB,KAAM96U,CAAK,EACrC,CAEA,KAAK,EAAK,EAAM,CAId,GAHItrL,IAAQ,CAAC,CAACA,IACZ,EAAOA,GAEL7xD,EAAM,CACR,IAAMk4jB,EAAU,KAAK,QACrBvP,GAAMoP,GAAS/3jB,CAAI,EAAI,GAAQk4jB,EAAQ38jB,EAAI,CAAC,KAAK,CAAC,CAACs2D,CAAG,CAAC,CACzD,MACEmigB,GAAU,KAAK,OAAQ,KAAK,YAAY,EACxC,KAAK,KAAM,GAAWn9E,EAAO,KAAK,CAAC,CAAChlb,CAAG,CAAC,EAE1C,OAAO,IACT,CAEA,MAAM,EAAM,CACV,GAAIimgB,GAAI,IAAI93jB,CAAI,EACd,KAAK,MAAM,CAAE,MAAO,EAAK,CAAC,MACrB,CACL,IAAMk4jB,EAAU,KAAK,QACrBvP,GAAMoP,GAAS/3jB,CAAI,EAAI,GAAQk4jB,EAAQ38jB,EAAI,CAAC,MAAM,CAAC,CACrD,CACA,OAAO,IACT,CAEA,OAAO,EAAM,CACX,GAAIu8jB,GAAI,IAAI93jB,CAAI,EACd,KAAK,MAAM,CAAE,MAAO,EAAM,CAAC,MACtB,CACL,IAAMk4jB,EAAU,KAAK,QACrBvP,GAAMoP,GAAS/3jB,CAAI,EAAI,GAAQk4jB,EAAQ38jB,EAAI,CAAC,OAAO,CAAC,CACtD,CACA,OAAO,IACT,CAEA,KAAK,EAAU,CACb2tjB,GAAU,KAAK,QAASh3iB,CAAQ,CAClC,CAEA,UAAW,CACT,GAAM,CAAE,UAAS,WAAU,UAAW,KAAK,QACrC+0S,EAAS,KAAK,QAAQ,KAAO,EAC7Bv/M,EAAU,KAAK,SAAS,KAAO,GACjCu/M,GAAU,CAAC,KAAK,UAAYv/M,GAAW,CAAC,KAAK,YAC/C,KAAK,SAAW,GAChB70D,GAAO86X,GAAU,CAACwqJ,EAAUx6jB,KAAY,CACtC,EAAO,MAAQ,KAAK,IAAI,EACxBw6jB,EAASx6jB,EAAQ,KAAM,KAAK,KAAK,CACnC,CAAC,GAEH,IAAM43jB,EAAO,CAACtuQ,GAAU,KAAK,SACvBh9R,EAASy9E,GAAW6td,GAAQnB,EAAO,KAAO,KAAK,IAAI,EAAI,KACzD1sd,GAAWm+G,EAAS,MACtBhzK,GAAOgzK,GAAW,CAACuyW,EAAWz6jB,KAAY,CACxC,EAAO,MAAQssB,EACfmuiB,EAAUz6jB,EAAQ,KAAM,KAAK,KAAK,CACpC,CAAC,EAEC43jB,IACF,KAAK,SAAW,GAChB1ihB,GAAOuhhB,GAAS,CAACiE,EAAS16jB,KAAY,CACpC,EAAO,MAAQssB,EACfouiB,EAAQ16jB,EAAQ,KAAM,KAAK,KAAK,CAClC,CAAC,EAEL,CAEA,cAAc,EAAO,CACnB,GAAIqlB,EAAM,MAAQ,SAChB,KAAK,SAAS,IAAIA,EAAM,MAAM,EACzBA,EAAM,MACT,KAAK,QAAQ,IAAIA,EAAM,MAAM,OAE1B,GAAIA,EAAM,MAAQ,OACvB,KAAK,QAAQ,OAAOA,EAAM,MAAM,OAC3B,OACPkkW,GAAK,QAAQ,KAAK,QAAQ,CAC5B,CACF,EACA,SAAS+wM,IAAiB,EAAM,EAAO,CACrC,OAAO,QAAQ,IAAI96U,EAAM,IAAK,GAAUm7U,IAAYzG,EAAMnqjB,CAAK,CAAC,CAAC,CAAC,CAAC,KAChE,GAAYqrjB,GAAkBlB,EAAM5jW,CAAO,CAC9C,CACF,CACA,eAAeqqW,IAAY,EAAM,EAAO,EAAQ,CAC9C,GAAM,CAAE,OAAM,GAAI9G,EAAK,OAAM,OAAM,SAAQ,aAAc9pjB,EACnDypjB,EAAY2G,GAAI,IAAIpwjB,EAAM,OAAO,GAAKA,EAAM,QAC9C8gjB,IACF,EAAM,KAAO,IAEXgJ,IAAQ,KAAO,EAAM,GAAK,MAC1Bn4hB,IAAS,KAAO,EAAM,KAAO,MACjC,IAAMk/hB,EAAUT,GAAI,IAAItG,CAAG,GAAKsG,GAAI,IAAItG,CAAG,EAAIA,EAAM,IAAK,GACtD+G,GACF,EAAM,GAAK,IAAK,GAChB,EAAM,OAAS,IAAK,GAChBpH,IACF,EAAU,OAAS,IAAK,KAG1BxI,GAAM+O,IAAiB,GAAQ,CAC7B,IAAMp0iB,EAAU5b,EAAMnM,GACtB,GAAIu8jB,GAAI,IAAIx0iB,CAAO,EAAG,CACpB,IAAM65N,EAAQ00U,EAAK2G,QAAWj9jB,GAC9B,EAAMA,IAAQ,CAAE,WAAU,eAAgB,CACxC,IAAM24jB,EAAU/2U,EAAM,IAAI75N,CAAO,EAC7B4wiB,GACGyB,IAAU,EAAQ,SAAW,IAC9B8C,IAAW,EAAQ,UAAY,KAEnCt7U,EAAM,IAAI75N,EAAS,CACjB,MAAO,KACP,SAAUqyiB,GAAY,GACtB,UAAW8C,GAAa,EAC1B,CAAC,CAEL,EACItH,IACF,EAAU51jB,GAAOmM,EAAMnM,GAE3B,CACF,CAAC,EAEH,IAAMyF,EAAQ6wjB,EAAK6G,OACfhxjB,EAAM,QAAU,CAAC1G,EAAM,QACzB,EAAM,OAAS0G,EAAM,MACrByhjB,GAAYzhjB,EAAM,MAAQ1G,EAAM,WAAaA,EAAM,WAAW,GACrDA,EAAM,SACf,EAAM,MAAQ,IAEhB,IAAMk8C,GAAYl9C,GAAQ,OAAO,KAAK6xjB,EAAK,OAAO,GAAG,IAClD,GAAQA,EAAK,QAAQt2jB,EAAI,CAAC,MAAMmM,CAAK,CACxC,EACM2tH,EAAS3tH,EAAM,SAAW,IAAQupjB,IAAevpjB,EAAO,QAAQ,IAAM,IACxE6wjB,GAAWljc,GAAUr0H,EAAM,UAC7Bk8C,EAAS,KACPu1gB,IAAc,EAAEZ,EAAK8G,aAAiB,CACpC,QACA,QACA,QAAS,CACP,MAAO/gd,GACP,OAAQA,GACR,MAAM,EAAQ,EAAS,CACjByd,GACF2+b,GAAUhzjB,EAAO6wjB,EAAK8G,YAAe,EACrC5ihB,EAAQi9gB,GAAmBnB,CAAI,CAAC,IAEhC,EAAO,OAASuC,EAChBr+gB,EACEo9gB,IACEoF,EACAtE,EACAjzjB,EACA6wjB,CACF,CACF,EAEJ,CACF,CACF,CAAC,CACH,EAEE7wjB,EAAM,QACR,MAAM,IAAI,QAAS,GAAW,CAC5BA,EAAM,YAAY,IAAIu7V,CAAM,CAC9B,CAAC,EAEH,IAAM5+V,EAASo1jB,GAAkBlB,EAAM,MAAM,QAAQ,IAAI30gB,CAAQ,CAAC,EAClE,GAAIsrgB,GAAQ7qjB,EAAO,UAAY,EAAEg5jB,GAAUh5jB,EAAO,MAAO,CACvD,IAAMy7M,EAAYw9W,IAAiBlvjB,EAAO8gjB,EAAMgJ,CAAG,EACnD,GAAIp4W,EAEF,OADA4+W,IAAYnG,EAAM,CAACz4W,CAAS,CAAC,EACtBk/W,IAAYzG,EAAMz4W,EAAW,EAAI,CAE5C,CAIA,OAHIw/W,GACF1xM,GAAK,mBAAqB0xM,EAAUj7jB,EAAQk0jB,EAAMA,EAAK,IAAI,CAAC,EAEvDl0jB,CACT,CACA,SAASk7jB,IAAW,EAAM,EAAO,CAC/B,IAAMX,EAAU,CAAE,GAAGrG,EAAK,OAAQ,EAelC,OAdInqjB,GACFihjB,GAAMoP,GAASrwjB,CAAK,EAAI,GAAW,CAC7BowjB,GAAI,IAAI7D,EAAO,IAAI,IACrB,EAASlrU,GAAakrU,CAAM,GAEzB6D,GAAI,IAAI7D,EAAO,EAAE,IACpB,EAAS,CAAE,GAAGA,EAAQ,GAAI,IAAK,EAAE,GAEnC6E,IAAeZ,EAASjE,EAAS,GACxB8E,IAAax9jB,CAAG,CACxB,CACH,CAAC,EAEHy9jB,IAAWnH,EAAMqG,CAAO,EACjBA,CACT,CACA,SAASc,IAAW,EAAM,EAAS,CACjC9P,GAAUgP,GAAU,EAAQ,IAAQ,CAC7BrG,EAAK,QAAQt2jB,KAChB,EAAK,QAAQA,GAAOs7e,EACpBi2E,GAAkBj2E,EAAQg7E,CAAI,EAElC,CAAC,CACH,CACA,SAASkH,IAAa,EAAK,EAAU,CACnC,IAAMliF,EAAS,IAAIu+E,IAKnB,MAJA,GAAO,IAAM75jB,EACTswF,GACFihe,GAAkBj2E,EAAQhrZ,CAAQ,EAE7BgrZ,CACT,CACA,SAASiiF,IAAe,EAAS,EAAO,EAAQ,CAC1CpxjB,EAAM,MACRihjB,GAAMjhjB,EAAM,KAAO,GAAQ,EACVwwjB,EAAQ38jB,KAAS,EAAQA,GAAO0N,EAAO1N,CAAG,IAClD09jB,aAAgBvxjB,CAAK,CAC9B,CAAC,CAEL,CACA,SAASswjB,IAAY,EAAM,EAAO,CAChCrP,GAAMxrU,EAAQ,GAAU,CACtB27U,IAAejH,EAAK,QAASnqjB,EAAQ,GAC5BqxjB,IAAax9jB,EAAKs2jB,CAAI,CAC9B,CACH,CAAC,CACH,CAKA,IAAIqH,IAAA59c,EAAsB,cAAc,CACtC,MAAO,GACP,UAAW,EACb,CAAC,EAIG69c,QAAkB,CACpB,IAAM15jB,EAAU,CAAC,EACX25jB,EAAa,SAAS,EAAO,CACjClL,IAAoB,EACpB,IAAMjgW,EAAU,CAAC,EAWjB,OAVA06V,GAAMlpjB,GAAU,EAAM,IAAM,CAC1B,GAAI45jB,GAAI,IAAI3xjB,CAAK,EACfumN,EAAQ,KAAK4jW,EAAK,MAAM,CAAC,MACpB,CACL,IAAMyH,EAAUC,EAAU7xjB,EAAOmqjB,EAAM,CAAC,EACpCyH,GACFrrW,EAAQ,KAAK4jW,EAAK,MAAMyH,CAAO,CAAC,CAEpC,CACF,CAAC,EACMrrW,CACT,EACA,EAAW,QAAUxuN,EACrB,EAAW,IAAM,SAAS,EAAM,CACzBA,EAAQ,SAASoyjB,CAAI,GACxBpyjB,EAAQ,KAAKoyjB,CAAI,CAErB,EACA,EAAW,OAAS,SAAS,EAAM,CACjC,IAAM3tjB,EAAIzE,EAAQ,QAAQoyjB,CAAI,EAC1B,CAAC3tjB,GAAGzE,EAAQ,OAAOyE,EAAG,CAAC,CAC7B,EACA,EAAW,MAAQ,UAAW,CAE5B,OADAykjB,GAAMlpjB,EAAU,GAASoyjB,EAAK,MAAM,GAAG,SAAS,CAAC,EAC1C,IACT,EACA,EAAW,OAAS,UAAW,CAE7B,OADAlJ,GAAMlpjB,EAAU,GAASoyjB,EAAK,OAAO,GAAG,SAAS,CAAC,EAC3C,IACT,EACA,EAAW,IAAM,SAAS,EAAQ,CAChClJ,GAAMlpjB,GAAU,EAAM,IAAM,CAC1B,IAAM65jB,EAAUD,GAAI,IAAIpviB,CAAM,EAAIA,EAAO/lB,EAAG2tjB,CAAI,EAAI5niB,EAChDqviB,GACFzH,EAAK,IAAIyH,CAAO,CAEpB,CAAC,CACH,EACA,EAAW,MAAQ,SAAS,EAAO,CACjC,IAAMrrW,EAAU,CAAC,EAWjB,OAVA06V,GAAMlpjB,GAAU,EAAM,IAAM,CAC1B,GAAI45jB,GAAI,IAAI3xjB,CAAK,EACfumN,EAAQ,KAAK4jW,EAAK,MAAM,CAAC,MACpB,CACL,IAAMyH,EAAU,KAAK,UAAU5xjB,EAAOmqjB,EAAM3tjB,CAAC,EACzCo1jB,GACFrrW,EAAQ,KAAK4jW,EAAK,MAAMyH,CAAO,CAAC,CAEpC,CACF,CAAC,EACMrrW,CACT,EACA,EAAW,KAAO,UAAW,CAE3B,OADA06V,GAAMlpjB,EAAU,GAASoyjB,EAAK,KAAK,GAAG,SAAS,CAAC,EACzC,IACT,EACA,EAAW,OAAS,SAAS,EAAO,CAElC,OADAlJ,GAAMlpjB,GAAU,EAAM,IAAMoyjB,EAAK,OAAO,KAAK,UAAUnqjB,EAAOmqjB,EAAM3tjB,CAAC,CAAC,CAAC,EAChE,IACT,EACA,IAAMq1jB,EAAY,SAAS,EAAK,EAAM,EAAO,CAC3C,OAAOF,GAAI,IAAIxngB,CAAG,EAAIA,EAAI7uD,EAAO6ujB,CAAI,EAAIhggB,CAC3C,EAEA,MADA,GAAW,UAAY0ngB,EAChBH,CACT,EAmLA,SAASI,IAAc,EAAM,EAAO,EAAM,CACxC,IAAMC,EAAUC,GAAK,IAAIhyjB,CAAK,GAAKA,EAC7B,CACJ,QACA,OACA,QAAQ,EACR,UAAU,GACV,kBAAkB,GAClB,cACA,IAAKiyjB,EACL,OAAQC,GACNH,EAAUA,EAAQ,EAAI/xjB,EACpBuuB,GAAA,EAAM4jiB,eACJJ,GAAW,UAAU,QAAU,EAAIN,IAAU,EAAI,IAAK,GAC5D,CAAC,CACH,EACMjljB,EAAQ4ljB,GAASx0jB,CAAI,EACrB8lQ,EAAc,CAAC,EACf2uT,GAAA,EAAkB3L,UAAQ,IAAI,EAC9B4L,EAAkB9wP,EAAQ,KAAO6wP,EAAgB,QACvD1L,OAAiC,CAC/B,EAAgB,QAAUjjT,CAC5B,CAAC,EACDmjT,SACE5F,GAAMv9S,EAAc,GAAM,CACxBn1O,GAAK,IAAIm8B,EAAE,IAAI,EACf,EAAE,KAAK,IAAMn8B,CACf,CAAC,MACY,CACX0yhB,GAAMoR,EAAgB,QAAU,GAAM,CAChC3ngB,EAAE,SACJ,aAAaA,EAAE,YAAY,EAE7Bw/f,IAAWx/f,EAAE,KAAMn8B,CAAG,EACtBm8B,EAAE,KAAK,KAAK,EAAI,CAClB,CAAC,CACH,EACD,EACD,IAAMpyD,EAAOi6jB,IAAQ/ljB,EAAOuljB,EAAUA,EAAQ,EAAI/xjB,EAAOsyjB,CAAe,EAClEE,EAAUhxP,GAAS6wP,EAAgB,SAAW,CAAC,EACrD1L,OACQ8L,GAAMD,GAAU,CAAE,OAAM,OAAM,SAAU,CAC5CtI,IAAWC,EAAM57hB,CAAG,EACpB66hB,GAASsJ,EAAavyhB,EAAMtsC,CAAG,CACjC,CAAC,CACH,EACA,IAAM8+jB,EAAS,CAAC,EAsBhB,GArBIL,GACFrR,GAAMqR,GAAkB,EAAG,IAAM,CAC3B5ngB,EAAE,SACJ,aAAaA,EAAE,YAAY,EAC3B8ngB,EAAQ,KAAK9ngB,CAAC,IAEd,EAAI,EAAOluD,GAAKlE,EAAK,QAAQoyD,EAAE,GAAG,EAC9B,CAACluD,IAAG,EAAYA,GAAKkuD,GAE7B,CAAC,EACHu2f,GAAMz0iB,GAAQ,EAAM,IAAM,CACnBk3P,EAAYlnQ,KACf,EAAYA,GAAK,CACf,IAAKlE,EAAKkE,GACV,OACA,MAAO,QACP,KAAM,IAAI0zjB,GACZ,EACA,EAAY1zjB,EAAE,CAAC,KAAK,KAAO2jC,EAE/B,CAAC,EACGwyhB,EAAO,OAAQ,CACjB,IAAIn2jB,EAAI,GACF,CAAE,SAAUu1jB,EAAUA,EAAQ,EAAI/xjB,EACxCihjB,GAAM0R,GAAS,EAAU,IAAc,CACrC,IAAMjogB,EAAI4ngB,EAAgBpQ,GACtB,CAAC0Q,GACH,EAAIlvT,EAAY,QAAQh5M,CAAC,EACzB,EAAYluD,GAAK,CAAE,GAAGkuD,EAAG,KAAMl+C,EAAMomjB,EAAU,GACtCC,GACTnvT,EAAY,OAAO,EAAElnQ,EAAG,EAAGkuD,CAAC,CAEhC,CAAC,CACH,CACIsngB,GAAK,IAAItqjB,CAAI,GACfg8P,EAAY,MAAM,EAAG,IAAMh8P,EAAKsS,EAAE,KAAMC,EAAE,IAAI,CAAC,EAEjD,IAAIy8B,EAAQ,CAACo8gB,EACP5mM,EAAc6mM,IAAgB,EAC9BviX,EAAeg5W,GAAgBxpjB,CAAK,EACpCi4Z,EAA0B,IAAI,IAC9B+6J,GAAA,EAAqBtM,UAAwB,IAAI,GAAK,EACtDuM,GAAA,EAAcvM,UAAQ,EAAK,EACjCzF,GAAMv9S,GAAc,EAAG,IAAM,CAC3B,IAAM7vQ,EAAM62D,EAAE,IACRwogB,EAAYxogB,EAAE,MACdxwC,EAAI63iB,EAAUA,EAAQ,EAAI/xjB,EAC5B8pjB,EACA99W,EACEmnX,EAAa/J,GAASlviB,EAAE,OAAS,EAAGrmB,CAAG,EAC7C,GAAIq/jB,GAAa,QACf,EAAMh5iB,EAAE,MACR,EAAQ,YACH,CACL,IAAMk5iB,EAAU96jB,EAAK,QAAQzE,CAAG,EAAI,EACpC,GAAIq/jB,GAAa,QAAqB,CACpC,GAAIE,EACF,EAAMl5iB,EAAE,MACR,EAAQ,aACH,GAAI,EAAMA,EAAE,OACjB,EAAQ,cACH,MACT,MAAO,GAAI,CAACk5iB,EACV,EAAMl5iB,EAAE,MACR,EAAQ,aACH,MACT,CAGA,GAFA,EAAMkviB,GAASU,EAAKp/f,EAAE,KAAMluD,CAAC,EAC7B,EAAMw1jB,GAAK,IAAIlI,CAAG,EAAID,GAAQC,CAAG,EAAI,CAAE,GAAIA,CAAI,EAC3C,CAACA,EAAI,OAAQ,CACf,IAAMW,EAAUyH,GAAe1hX,EAAa,OAC5C,EAAI,OAAS44W,GAASqB,EAAS//f,EAAE,KAAMluD,EAAGwvM,CAAK,CACjD,CACA,GAAS8mX,EACT,IAAMzyhB,EAAU,CACd,GAAGmwK,EAEH,MAAO2iX,EAAaz8gB,EACpB,IAAKu7gB,EACL,UAAW/3iB,EAAE,UAEb,MAAO,GAEP,GAAG4viB,CACL,EACA,GAAI99W,GAAS,SAAuBgmX,GAAK,IAAI3xhB,EAAQ,IAAI,EAAG,CAC1D,IAAMs4I,EAAKo5Y,EAAUA,EAAQ,EAAI/xjB,EAEjC,EAAQ,KAAOopjB,GADF4I,GAAK,IAAIr5Y,EAAG,OAAO,GAAK25Y,EAAkB35Y,EAAG,KAAOA,EAAG,QACtCjuH,EAAE,KAAMluD,CAAC,CACzC,CACA,GAAM,CAAE,aAAc6jC,EACtB,EAAQ,UAAa,GAAW,CAC9B+ohB,GAAS8H,EAAWj7jB,CAAM,EAC1B,IAAMo9jB,EAAehB,EAAgB,QAC/B3zQ,EAAK20Q,EAAa,KAAM,GAAOC,EAAG,MAAQz/jB,CAAG,EACnD,GAAK6qT,GACD,IAAO,WAAaA,EAAG,OAAS,WAGhCA,EAAG,KAAK,KAAM,CAChB,IAAMmvQ,EAAOwF,EAAa,MAAO,GAAOC,EAAG,KAAK,IAAI,EACpD,GAAI50Q,EAAG,OAAS,QAAqB,CACnC,IAAM1nN,EAASoyd,GAASp8V,EAAS0xF,EAAG,IAAI,EACxC,GAAI1nN,IAAW,GAAO,CACpB,IAAMu8d,EAAWv8d,IAAW,GAAO,EAAIA,EAEvC,GADA,EAAG,QAAU,GACT,CAAC62d,GAAQ0F,EAAW,EAAG,CACrBA,GAAY,aACd,EAAG,aAAe,WAAWrnM,EAAaqnM,CAAQ,GACpD,MACF,CACF,CACF,CACI1F,GAAQwF,EAAa,KAAM,GAAOC,EAAG,OAAO,IAC9CN,EAAmB,QAAQ,OAAOt0Q,CAAE,EAChC80Q,IACF,EAAY,QAAU,IAExBtnM,EAAY,EAEhB,CACF,EACA,IAAMskM,EAAUW,IAAWzmgB,EAAE,KAAMrqB,CAAO,EACtC2rK,IAAU,SAAuBwnX,EACnCR,EAAmB,QAAQ,IAAItogB,EAAG,CAAE,QAAO,UAAS,SAAQ,CAAC,EAE7DutW,EAAQ,IAAIvtW,EAAG,CAAE,QAAO,UAAS,SAAQ,CAAC,CAE9C,CAAC,EACD,IAAM9lC,GAAA,EAAU6uiB,cAAYjC,GAAa,EAEnCkC,EAAa9uiB,IADC+uiB,IAAS/uiB,CACY,GAAKoliB,IAASpliB,CAAO,EAC9D+hiB,OAAiC,CAC3B+M,GACFzS,GAAMv9S,EAAc,GAAM,CACxBh5M,EAAE,KAAK,MAAM,CAAE,QAAS9lC,CAAQ,CAAC,CACnC,CAAC,CAEL,EAAG,CAACA,CAAO,CAAC,EACZq8hB,GAAMhpJ,GAAU,EAAG,IAAM,CACvB,GAAI+6J,EAAmB,QAAQ,KAAM,CACnC,IAAMY,EAAMlwT,EAAY,UAAW,GAAUpqQ,EAAM,MAAQ,EAAE,GAAG,EAChEoqQ,EAAY,OAAOkwT,EAAK,CAAC,CAC3B,CACF,CAAC,EACDjN,OACQ,CACJ1F,GACE+R,EAAmB,QAAQ,KAAOA,EAAmB,QAAU/6J,GAC9D,CAAE,QAAO,WAAW,IAAM,CACzB,GAAM,CAAE,QAASvtW,EACjB,EAAE,MAAQshJ,EACVz9K,GAAK,IAAI47hB,CAAI,EACTuJ,GAAc1nX,GAAS,SACzBm+W,EAAK,MAAM,CAAE,QAASvliB,CAAQ,CAAC,EAE7Byb,IACF+phB,IAAWD,EAAM9phB,EAAQ,GAAG,GACvB8phB,EAAK,KAAO57hB,IAAQ,CAAC0kiB,EAAY,QACpC9I,EAAK,OAAO9phB,CAAO,GAEnB8phB,EAAK,MAAM9phB,CAAO,EAClB,CACE4yhB,CAAY,UAAU,IAI9B,CACF,CACF,EACAzxP,EAAQ,IAAK,GAAItuN,CACnB,EACA,IAAM2gd,EAAqB,GAA2Bjgd,EAAO,cAAAA,EAAqB,SAAU,KAAM8vJ,EAAY,KAAK,EAAG,IAAM,CAC1H,GAAM,CAAE,WAAYu0J,EAAQ,IAAI,CAAC,GAAK,EAAE,KAClC9jW,EAAOo9I,EAAO,CAAE,GAAGi/W,CAAQ,EAAG,EAAE,KAAM,EAAGh0jB,CAAC,EAC1C3I,EAAMm+jB,GAAK,IAAI,EAAE,GAAG,GAAKA,GAAK,IAAI,EAAE,GAAG,EAAI,EAAE,IAAM,EAAE,KAAK,GAE1DzF,EAASp4f,GAAM,OAAS,CAAC,EACzB2/f,EAAsCvH,GAAQ,IACpD,OAAOp4f,GAAQA,EAAK,KAAuBy/C,EAAO,cAAcz/C,EAAK,KAAM,CAAE,GAAGo4f,EAAQ,MAAK,IAAKuH,CAAQ,CAAC,EAAI3/f,CACjH,CAAC,CAAC,EACF,OAAO5lC,EAAM,CAACsliB,EAAmBtliB,CAAG,EAAIsliB,CAC1C,CACA,IAAIppgB,IAAU,EACd,SAAS8ngB,IAAQ,EAAO,CAAE,MAAK,OAAO1+jB,GAAO,EAAiB,CAC5D,GAAIyE,IAAS,KAAM,CACjB,IAAMq6jB,EAAyB,IAAI,IACnC,OAAOnmjB,EAAM,IAAK,GAAS,CACzB,IAAMk+C,EAAI4ngB,GAAmBA,EAAgB,KAC1C,GAAO5zQ,EAAG,OAASv+Q,GAAQu+Q,EAAG,QAAU,SAAuB,CAACi0Q,EAAO,IAAIj0Q,CAAE,CAChF,EAKA,OAJIh0P,GACFiogB,EAAO,IAAIjogB,CAAC,EACLA,EAAE,KAEJ,KACT,CAAC,CACH,CACA,OAAOsngB,GAAK,IAAI15jB,CAAI,EAAIkU,EAAQwljB,GAAK,IAAI15jB,CAAI,EAAIkU,EAAM,IAAIlU,CAAI,EAAI85jB,GAAS95jB,CAAI,CAClF,CAoMA,IAAIy7jB,IAAgB,cAAclH,EAAW,CAC3C,YAAY,EAAQ,EAAM,CACxB,MAAM,EACN,KAAK,OAAStvjB,EAEd,KAAK,KAAO,GAEZ,KAAK,QAA0B,IAAI,IACnC,KAAK,KAAO+ljB,GAAmB,GAAGlqiB,CAAI,EACtC,IAAMtlB,EAAQ,KAAK,KAAK,EAClBu/Q,EAAW2gT,GAAiBlgkB,CAAK,EACvCuzjB,GAAa,KAAMh0S,EAAS,OAAOv/Q,CAAK,CAAC,CAC3C,CACA,QAAQ,EAAK,CACX,IAAMA,EAAQ,KAAK,KAAK,EAEnBmgkB,GAASngkB,EADG,KAAK,IACD,CAAQ,IAC3BszjB,GAAa,IAAI,CAAC,CAAC,SAAStzjB,CAAK,EACjC,KAAK,UAAUA,EAAO,KAAK,IAAI,GAE7B,CAAC,KAAK,MAAQogkB,IAAU,KAAK,OAAO,GACtCC,GAAW,IAAI,CAEnB,CACA,MAAO,CACL,IAAMC,EAASC,GAAK,IAAI,KAAK,MAAM,EAAI,KAAK,OAAO,IAAIC,EAAc,EAAIC,GAASD,GAAe,KAAK,MAAM,CAAC,EAC7G,OAAO,KAAK,KAAK,GAAGF,CAAM,CAC5B,CACA,QAAS,CACH,KAAK,MAAQ,CAACF,IAAU,KAAK,OAAO,IACtC,KAAK,KAAO,GACZjT,GAAOuT,GAAY,IAAI,EAAI,GAAS,CAClC,EAAK,KAAO,EACd,CAAC,EACGC,GAAG,eACLj1M,GAAK,mBAAqB,KAAK,QAAQ,CAAC,EACxC20M,GAAW,IAAI,GAEfrS,GAAW,MAAM,IAAI,EAG3B,CAEA,SAAU,CACR,IAAIl5d,EAAW,EACfq4d,GAAOsT,GAAS,KAAK,MAAM,EAAI,GAAW,CACpCG,GAAen3jB,CAAM,GACvB6njB,GAAkB7njB,EAAQ,IAAI,EAE5BqvjB,GAAarvjB,CAAM,IAChBA,EAAO,MACV,KAAK,QAAQ,IAAIA,CAAM,EAEzB,EAAW,KAAK,IAAIqrF,EAAUrrF,EAAO,SAAW,CAAC,EAErD,CAAC,EACD,KAAK,SAAWqrF,EAChB,KAAK,OAAO,CACd,CAEA,SAAU,CACRq4d,GAAOsT,GAAS,KAAK,MAAM,EAAI,GAAW,CACpCG,GAAen3jB,CAAM,GACvB8njB,GAAqB9njB,EAAQ,IAAI,CAErC,CAAC,EACD,KAAK,QAAQ,MAAM,EACnB42jB,GAAW,IAAI,CACjB,CAEA,cAAc,EAAO,CACf74iB,EAAM,MAAQ,SACZA,EAAM,KACR,KAAK,QAAQ,GAEb,KAAK,QAAQ,IAAIA,EAAM,MAAM,EAC7B,KAAK,OAAO,GAELA,EAAM,MAAQ,OACvB,KAAK,QAAQ,OAAOA,EAAM,MAAM,EACvBA,EAAM,MAAQ,aACvB,KAAK,SAAWi5iB,GAAS,KAAK,MAAM,CAAC,CAAC,QACnC,EAAS,IAAW,KAAK,IAAII,GAAU/H,GAAah8f,CAAM,EAAIA,EAAO,SAAW,GAAK,CAAC,EACvF,CACF,EAEJ,CACF,EACA,SAASgkgB,IAAO,EAAQ,CACtB,OAAOr3jB,EAAO,OAAS,EACzB,CACA,SAAS22jB,IAAU,EAAQ,CACzB,MAAO,CAAC30Q,EAAO,MAAQ,MAAM,KAAKA,CAAM,CAAC,CAAC,MAAMq1Q,GAAM,CACxD,CACA,SAAST,GAAW,EAAM,CACnBrujB,EAAK,OACR,EAAK,KAAO,GACZm7iB,GAAOuT,GAAY1ujB,CAAI,EAAI,GAAS,CAClC,EAAK,KAAO,EACd,CAAC,EACDm/iB,GAAoBn/iB,EAAM,CACxB,KAAM,OACN,OAAQA,CACV,CAAC,EAEL,CAYA+ujB,GAAQ,OAAO,CACb,yBAAA5O,IACA,IAAK,EAAQ,IAAS,IAAI8N,IAAcx2jB,EAAQ6b,CAAI,CACtD,CAAC,EACY07iB,GAAW,QC73ExB,IAAIC,IAAiB,MACrB,SAASC,IAAoB,EAAM,EAAO,CAIxC,OAHIlhkB,GAAS,MAAQ,OAAOA,GAAU,WAAaA,IAAU,GAAW,GACpE,OAAOA,GAAU,UAAYA,IAAU,GAAK,CAACihkB,IAAe,KAAKz/jB,CAAI,GAAK,EAAE2/jB,GAAiB,eAAe3/jB,CAAI,GAAK2/jB,GAAiB3/jB,IACjIxB,EAAQ,MACT,GAAKA,EAAA,CAAO,KAAK,CAC3B,CACA,IAAIohkB,IAAiB,CAAC,EACtB,SAASC,IAAoB,EAAU,EAAO,CAC5C,GAAI,CAACpzX,EAAS,UAAY,CAACA,EAAS,aAClC,MAAO,GAET,IAAMqzX,EAAkBrzX,EAAS,WAAa,UAAYA,EAAS,YAAcA,EAAS,WAAW,WAAa,SAC5G,CACJ,YACA,QACA,WACA,YACA,aACA,UACA,GAAG17K,GACDrmB,EACEuiB,EAAS,OAAO,OAAO8D,CAAU,EACjC5pB,EAAQ,OAAO,KAAK4pB,CAAU,CAAC,CAAC,IACnC,GAAS+uiB,GAAmBrzX,EAAS,aAAazsM,CAAI,EAAIA,EAAO4/jB,IAAe5/jB,KAAU,IAAeA,GAAQA,EAAK,QACrH,WAEC,GAAM,IAAMsF,EAAE,YAAY,CAC7B,EACF,EACIs2G,IAAa,IAAK,KACpB,EAAS,YAAcA,GAEzB,IAAK,IAAM57G,KAAQ42F,EACjB,GAAIA,EAAM,eAAe52F,CAAI,EAAG,CAC9B,IAAMxB,EAAQkhkB,IAAoB1/jB,EAAM42F,EAAM52F,EAAK,EAC/Cy/jB,IAAe,KAAKz/jB,CAAI,EAC1BysM,EAAS,MAAM,YAAYzsM,EAAMxB,CAAK,EAEtC,EAAS,MAAMwB,GAAQxB,CAE3B,CAEF2I,EAAM,SAAS,EAAM,IAAM,CACzBslM,EAAS,aAAazsM,EAAMitB,EAAO/lB,EAAE,CACvC,CAAC,EACGugB,IAAc,IAAK,KACrB,EAAS,UAAYA,GAEnBk+I,IAAc,IAAK,KACrB,EAAS,UAAYA,GAEnBgiQ,IAAe,IAAK,KACtB,EAAS,WAAaA,GAEpBo5B,IAAY,IAAK,IACnBt0P,EAAS,aAAa,UAAWs0P,CAAO,CAE5C,CACA,IAAI4+H,GAAmB,CACrB,wBAAyB,GACzB,kBAAmB,GACnB,iBAAkB,GAClB,iBAAkB,GAClB,QAAS,GACT,aAAc,GACd,gBAAiB,GACjB,YAAa,GACb,QAAS,GACT,KAAM,GACN,SAAU,GACV,aAAc,GACd,WAAY,GACZ,aAAc,GACd,UAAW,GACX,QAAS,GACT,WAAY,GACZ,YAAa,GACb,aAAc,GACd,WAAY,GACZ,cAAe,GACf,eAAgB,GAChB,gBAAiB,GACjB,WAAY,GACZ,UAAW,GACX,WAAY,GACZ,QAAS,GACT,MAAO,GACP,QAAS,GACT,QAAS,GACT,OAAQ,GACR,OAAQ,GACR,KAAM,GAEN,YAAa,GACb,aAAc,GACd,YAAa,GACb,gBAAiB,GACjB,iBAAkB,GAClB,iBAAkB,GAClB,cAAe,GACf,YAAa,EACf,EACII,KAAa,EAAQ,IAAQ13gB,EAAS9pD,EAAI,OAAO,CAAC,CAAC,CAAC,YAAY,EAAIA,EAAI,UAAU,CAAC,EACnF2mI,IAAW,CAAC,SAAU,KAAM,MAAO,GAAG,EAC1C,GAAmB,OAAO,KAAKy6b,EAAgB,CAAC,CAAC,QAAQ,EAAK,KAC5Dz6b,IAAS,QAAS,GAAW,EAAI66b,IAAU13gB,EAAQriB,CAAI,GAAKhM,EAAIgM,EAAK,EAC9DhM,GACN2liB,EAAgB,EAgBnB,IAAIK,IAAgB,wCAChBC,IAAe,eACfC,IAAgB,iBAChBC,IAAW,EAAO,IAASrjV,GAAG,IAAIt+O,CAAK,GAAKA,IAAU,EAAIA,EAAQo1B,EAAOp1B,EACzE4hkB,IAAmB,EAAO,IAAOtjV,GAAG,IAAIt+O,CAAK,EAAIA,EAAM,MAAO,GAAM4hkB,GAAgBrgjB,EAAG5gB,CAAE,CAAC,EAAI29O,GAAG,IAAIt+O,CAAK,EAAIA,IAAUW,EAAK,WAAWX,CAAK,IAAMW,EACnJkhkB,IAAgB,cAAc5N,EAAe,CAC/C,YAAY,CAAE,IAAG,IAAG,IAAG,GAAG77d,GAAS,CACjC,IAAMkoe,EAAS,CAAC,EACVwB,EAAa,CAAC,GAChB/6jB,GAAKmwD,GAAKwrE,KACZ49b,EAAO,KAAK,CAACv5jB,GAAK,EAAGmwD,GAAK,EAAGwrE,GAAK,CAAC,CAAC,EACpCo/b,EAAW,KAAM,GAAQ,CACvB,eAAeC,EAAI,IAAK,GAAMJ,GAAQpgjB,EAAG,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,GAE1DqgjB,GAAgBG,EAAK,CAAC,CACxB,CAAC,GAEHrU,GAASt1d,GAAQ,EAAO,IAAQ,CAC9B,GAAIr4F,IAAQ,YACVugkB,EAAO,KAAK,CAACtgkB,GAAS,EAAE,CAAC,EACzB8hkB,EAAW,KAAM,GAAc,CAACv7c,EAAWA,IAAc,EAAE,CAAC,OACvD,GAAIi7c,IAAc,KAAKzhkB,CAAG,EAAG,CAElC,GADA,OAAOq4F,EAAMr4F,GACTu+O,GAAG,IAAIt+O,CAAK,EAAG,OACnB,IAAMo1B,EAAOqsiB,IAAa,KAAK1hkB,CAAG,EAAI,KAAO2hkB,IAAc,KAAK3hkB,CAAG,EAAI,MAAQ,GAC/EugkB,EAAO,KAAKxzS,GAAQ9sR,CAAK,CAAC,EAC1B8hkB,EAAW,KACT/hkB,IAAQ,YAAc,CAAC+kL,EAAIE,EAAIg9Y,EAAI5xR,KAAS,CAC1C,YAAYtrH,EAAG,GAAGE,EAAG,GAAGg9Y,EAAG,GAAGL,GAAQvxR,EAAKh7Q,CAAI,EAAE,GACjDwsiB,GAAgBxxR,EAAK,CAAC,CACxB,EAAK,GAAU,CACb,GAAGrwS,EAAI,GAAGF,EAAM,IAAK,GAAM8hkB,GAAQpgjB,EAAG6T,CAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,GACvDwsiB,GAAgB/hkB,EAAO,KAAI,WAAW,OAAO,CAAS,CACxD,CACF,CACF,CACF,CAAC,EACGygkB,EAAO,SACT,EAAM,UAAY,IAAI2B,IAAe3B,EAAQwB,CAAU,GAEzD,MAAM1pe,CAAK,CACb,CACF,EACI6pe,IAAiB,cAAc7Q,GAAW,CAC5C,YAAY,EAAQ,EAAY,CAC9B,MAAM,EACN,KAAK,OAASkP,EACd,KAAK,WAAawB,EAClB,KAAK,OAAS,IAChB,CACA,KAAM,CACJ,MAAO,CAAgB,KAAK,SAAS,KAAK,KAAK,CACjD,CACA,MAAO,CACL,IAAIv7c,EAAY,GACZnD,EAAW,GASf,OARA+pc,GAAK,KAAK,QAAS,EAAO,IAAM,CAC9B,IAAMx7X,EAAOo/X,GAAclxjB,EAAM,EAAE,EAC7B,CAAC+2D,EAAGj2D,GAAM,KAAK,WAAW+H,EAAE,CAChC41O,GAAG,IAAI3sD,CAAI,EAAIA,EAAO9xL,EAAM,IAAIkxjB,EAAa,CAC/C,EACA,GAAa,IAAMn6f,EACnB,IAAuBj2D,CACzB,CAAC,EACMyiH,EAAW,OAASmD,CAC7B,CAEA,cAAc,EAAO,CACfjgE,GAAS,GACX6mgB,GACE,KAAK,OACJ,GAAUA,GACTttjB,EACC,GAAUixjB,GAAc9wjB,CAAK,GAAKsxjB,GAAiBtxjB,EAAO,IAAI,CACjE,CACF,CACJ,CAEA,gBAAgB,EAAO,CACjBsmD,GAAS,GACX6mgB,GACE,KAAK,OACJ,GAAUA,GACTttjB,EACC,GAAUixjB,GAAc9wjB,CAAK,GAAKuxjB,GAAoBvxjB,EAAO,IAAI,CACpE,CACF,CACJ,CACA,cAAc,EAAO,CACfwnB,EAAM,MAAQ,WAChB,KAAK,OAAS,MAEhB2piB,GAAmB,KAAM3piB,CAAK,CAChC,CACF,EAGI06iB,IAAa,uvBAuIjB,EAIAnB,GAAQ,OAAO,CACb,eAAgBoB,2BAChB,yBAAAhQ,IACA,OAAA5D,GACF,CAAC,EAOD,IAAI2F,IANOiB,IAAW+M,IAAY,CAChC,wBACA,oBAAsB,GAAU,IAAIL,IAAczpe,CAAK,EAEvD,mBAAoB,CAAE,YAAW,aAAY,GAAGlsF,KAAYA,CAC9D,CACkB,CAAC,CAAC,SC1WpB,SAAgBk2jB,GAAgB,CAC5B1pjB,QACA2pjB,cACAC,OACAC,YACAlzI,aAAA,CAEA,IAAMmzI,EAAuBh7H,MAEvB53L,EAAcouT,IAAgCtljB,EAAO,CACvDlU,KAAM69jB,EACNxkiB,KAAOwO,IAAa,CAAE6qB,EAAGorgB,EAAKj2hB,EAAM,GACpCw1Q,MAAQx1Q,IAAa,CAAE6qB,EAAGorgB,EAAKj2hB,EAAM,GACrC21I,OAAS31I,IAAa,CAAE6qB,EAAGorgB,EAAKj2hB,EAAM,GACtCqyE,OAAQA,IAAO68b,QACflsH,UAAWA,GAAamzI,CAC5B,GAEA,OACIp6W,SAAA+4H,WAAA,CAAA/jO,SACKwyJ,GAAax3K,EAAsB/rD,KAChC+7K,SAAC8rW,IAASn9f,EAAV,CAEIwvD,UAAWnuB,EAAMlhC,EAAEkV,GAAIlV,GAAc,gBAAgBA,EAAE,EAAE,EAExDkmD,SAAAmld,EAAUl2hB,EACH,EAJHg2hB,EAAYh2hB,IAM3B,EAEV,C,80GC0BY43K,eAlBNw+W,IAAyC,UAGzCC,IAAyB,EAGzBC,IAAiC,GAY3B1+W,KAAMpoG,U,QADX,cACKooG,G,uCAFX5zH,C,IAYI0qC,E,EAAagjZ,Y,GAIbhjZ,E,EAAqBpiC,S,GAIrBoiC,E,EAAqBsqD,Q,GAIrBtqD,E,EAAqB53B,Y,GAIrB43B,E,EAAqB6nc,e,GAIrB7nc,E,EAAaqqD,U,GAIbrqD,E,EAAqB8nc,U,GAIrB9nc,E,EAAqB6na,0B,GAIrB7na,E,EAAqB+0Z,e,GASrB/0Z,E,EAAqB+nc,kB,GAIrB/nc,E,EAAa0pa,a,GAWb1pa,E,EAAqBgoc,iB,GAIrBhoc,E,EAAqBioc,a,GAIrBjoc,E,EAAqBkoc,a,GAKrBloc,E,EAAqBmoc,uB,GAUrBnoc,E,EAAqB82L,I,GAKrB92L,E,EAAqB08Z,gB,GAQrB18Z,E,EAAqBuoZ,Q,GAKrBvoZ,E,EAAqBmlZ,a,GAiBrBnlZ,E,EAAa4yY,O,GAmBb5yY,E,EAAqB6rb,iB,GAerB7rb,E,EAAqBqjZ,a,GAYrBrjZ,E,EAAqBooc,c,GAIrBpoc,E,EAAqBqoc,Y,GAIrBroc,E,EAAqB0tZ,W,GAKrB1tZ,E,EAAqB0jZ,c,GAyCrB1jZ,E,EAAqB+5a,c,GAsTrB/5a,E,EAAqB2mb,gB,GAIrB3mb,E,EAAqBsoc,iB,GAKrBtoc,E,EAAqB4mb,mB,GAsBrB5mb,E,EAAqBuoc,4B,GAUrBvoc,E,EAAamnb,gB,GAUbnnb,E,EAAqBgpb,kB,GAIrBhpb,E,EAAqB6mb,oB,GAcrB7mb,E,EAAqB8mb,a,GAMrB9mb,E,EAAqB+mb,c,GAMrB/mb,E,EAAqBohW,Q,CAvmBdl4Q,e,CAKR,YAAY/3M,EAA8B,CACtC,MAAMA,GACNyxL,EAAe,IAAI,CACvB,CALA9zK,gBAAOo6L,EAAMk8Q,UAAA,GAOb,IAAc49C,YAAoC,CAC9C,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAAsBplb,SAAmC,CACrD,OAAO,KAAKolb,WAAWplb,OAC3B,CAEA,IAAsB0sF,QAAiB,CACnC,OAAQ,KAAKn5K,MAAMm5K,QAAUkjR,IAAwBi8G,SAAS,GAClE,CAEA,IAAsBrhd,YAA+B,CACjD,OAAO,KAAKxK,QAAQ93D,OACxB,CAEA,IAAsB+hiB,eAAwB,CAC1C,MAAO,IAAM,KAAK9gB,YACtB,CAEA,IAAc18X,UAAmB,CAC7B,OAAO,KAAKzsF,QAAQysF,YACxB,CAEA,IAAsBy9Y,UAAmB,CACrC,OAAO,KAAK1mG,OAAO10d,MACvB,CAEA,IAAsBm7hB,0BAAmC,CACrD,OAAO,KAAKv9W,OAAO7kH,OAAS,KAAKqigB,QACrC,CAEA,IAAsB/yC,eAAwB,CAC1C,OAAOtwD,GACHnjU,KAAK/0J,IACDm4d,GAAc,GAAI,KAAKr6S,QAAQ,EAC/B,IAAM,KAAKw9W,wBACf,EAER,CAEA,IAAsBkgC,kBAAiC,CACnD,MAAO,CAAE19Y,SAAU,KAAK0qW,cAAe3qW,WAAY,IAAKi6J,WAAY,CAAE,CAC1E,CAEA,IAAcqlN,aAAwC,CAClD,OAAOhC,GAAuB,CAC1BtmE,OAAQ,KAAKA,OACbymE,yBAA0B,KAAKA,yBAC/BC,cAAe,GAAM,KAAKx9W,OAAOtgG,MACjC+9c,cAAe,IAAO,KAAKz9W,OAAOtgG,MAClC25P,aAAc,KAAKokP,iBACnBtiC,kBAAmB,CAAC,KAAK7nc,QAAQ86a,QACrC,EACJ,CAEA,IAAsBsvD,iBAAgC,CAClD,MAAO,CAAE39Y,SAAU,KAAK0qW,cAAe3qW,WAAY,IAAKi6J,WAAY,CAAE,CAC1E,CAEA,IAAsB4jP,aAAuB,CACzC,OAAO,KAAK7mG,OAAO39V,KAAM1mF,GAAMA,EAAE93C,OAAS,EAC9C,CAEA,IAAsBijkB,aAAuB,CACzC,OAAO,KAAK9mG,OAAO39V,KAAM1mF,GAAMA,EAAE93C,MAAQ,EAC7C,CAGA,IAAsBkjkB,uBAAgC,CAOlD,OANK,KAAKF,YAMHvrhB,GAJc,KAAK0kb,OACrBhsa,OAAQgsa,GAAWA,EAAOn8d,OAAS,GACnC2Y,IAAKwjd,GAAW,KAAKnrT,YAAYmrT,GAAQp3Y,KAEjCw+e,IAAiB,EANA,CAOlC,CAEA,IAAsB1xQ,IAAa,CAC/B,MAAO,EACX,CAGA,IAAsB4lO,gBAAmC,CACrD,IAAMnZ,EAAY,KAAKniD,OAAOxjd,IAAKm/B,GAAMA,EAAE93C,KAAK,EAChD,MAAO,CACHq8J,KAAK/0J,IAAI,KAAKuqT,GAAIp6Q,GAAM6me,IACxBjiX,KAAKh1J,IAAI,KAAKwqT,GAAIp6Q,GAAM6me,GAC5B,CACJ,CAEA,IAAsBgF,QAA2B,CAC7C,OAAO,KAAKlF,YAAYkF,OAAA,CAC5B,CAGA,IAAsBpD,aAA0B,CAC5C,OAAO,IAAIkV,GACP,CAGIjD,0BAA2BlrY,GAAU9yI,MACrC,GAAG,KAAKwkF,QAAQunb,YAKhB54gB,IAAKmkJ,MACT,EACA,IACJ,CACJ,CAEA,IAAckiX,OAAwB,CAElC,IAAMxiU,EAAO,KAAK+0U,YAAYkB,iBAAA,EAO9B,OANAj2U,EAAKk2U,mCAAmC,KAAKoW,cAAc,EAE3DtsV,EAAKvrC,UAAYvkB,GAAUg8J,OAC3BlsG,EAAKm0U,aAAe,KAAKvB,WAAWuB,aACpCn0U,EAAKhzG,MAAQ,KAAKmrb,OAClBn4U,EAAK74B,MAAQ,GACN64B,CACX,CASA,IAAsBy7W,iBAA0B,CAY5C,OAAOnvgB,GAXa,KAAKgtf,YAAY9rhB,IAAKwjd,IACtC,IAAMoD,EAAYljU,KAAKh1J,IACnB80d,EAAO7pT,OAAOvtF,OAAS,EACvBo3Y,EAAOq5E,oBAAoBzwd,OAAS,GAMxC,OAJIo3Y,EAAOn8d,MAAQ,EAERu/d,EADY,KAAKvuT,YAAYmrT,GAAQp3Y,MACZ49e,IAE7BpjG,CACX,CACaikG,IAAgB,CACjC,CAEA,IAAsBplD,aAAsB,CACxC,OAAO,KAAK/4V,OACPyvW,OACG,KAAKuuC,gBACC,KAAKvhB,aAAe,KAAK8gB,cACzB,GAETa,QAAQ,KAAK7c,eAAe,EAC5BpC,SAAS,KAAK0e,qBAAqB,CAC5C,CAGA,IAAsBC,cAAuB,CACzC,OAAO,KAAK/kD,YAAY59c,OAAS,KAAKqigB,QAC1C,CAEA,IAAsBO,YAAqB,CACvC,OAAO,KAAKD,aAAe1/C,GAC/B,CAEA,IAAsBgF,WAAoB,CACtC,IAAMi7C,EAAkB,KAAKb,SAAW,KAAKO,WAC7C,OAAQ,KAAKhlD,YAAY59c,OAASkjgB,GAAmB,KAAKb,QAC9D,CAEA,IAAsBpkD,cAA0C,CAC5D,IAAMn5K,EACF,KAAK84K,YAAYpjX,IAAM,KAAKytX,UAAY,EAAI,KAAK26C,WAAa,EAClE,OAAO,KAAK3+B,YAAY9rhB,KAAKwjd,EAAQ30d,KACjC,IAAMm8jB,EAAOr+N,EAAU99V,GAAS,KAAKihhB,UAAY,KAAK26C,YAChD52L,EAAa2vF,EAAOn8d,MAAQ,EAC5B4jkB,EAAOp3L,EACP,KAAKmhI,MAAM6f,MAAMrxD,EAAOn8d,KAAK,EAC7B,KAAK2tgB,MAAM6f,MAAM,KAAK37N,EAAE,EACxBipL,EAAWtuG,EACX,KAAKmhI,MAAM6f,MAAM,KAAK37N,EAAE,EAAI+xQ,EAC5B,KAAKj2D,MAAM6f,MAAMrxD,EAAOn8d,KAAK,EAAI4jkB,EACjCtxZ,EAAQ,KAAKtB,YAAYmrT,GAEzB0nG,EAAer3L,EACfo3L,EAAOtxZ,EAAMvtF,MAAQ49e,IACrBiB,EAAOlB,IACPoB,EACF,KAAKn2D,MAAM6f,MAAMrxD,EAAOn8d,KAAK,GAC5BwsY,EAAa,GAA0Bk2L,KAEtC,CAAEjhC,OAAQsiC,EAAc7+B,eAC1B3D,GAA+B,CAC3Brqe,EAAGysgB,EACHrxZ,MAAO6pT,EAAO7pT,MACdsX,WAAYuyS,EAAOq5E,kBACvB,GAEJ,MAAO,CACH,GAAGr5E,EACHynG,OACAD,OACA7oF,WACA+oF,eACAE,eACA7+B,cACA4+B,aACJ,CACJ,EACJ,CAEA,IAAsBhvB,cAA0C,CAC5D,OAAO,KAAKr2B,aAAa9lgB,IAAKwjd,IAC1B,IAAMt+H,EAAWu+K,GAAgB,CAAE13X,MAAOy3U,EAAOz3U,KAAM,GACvD,MAAO,CAAE,GAAGy3U,EAAQt+H,UAAS,CACjC,EACJ,CAEAuiI,mBAAmC,CAC/BllU,GAAuB,IAAI,CAC/B,CAEA8V,YAAYmrT,EAAkC,CAC1C,GAAM,CAAEqlD,WAAYrlD,EAEd6nG,EACF,KAAKrre,QAAQqre,gBAAkB7nG,EAAO1rb,OAAS,KAAK0yD,WAClD8ge,EAAcziD,EAAQ3lM,iBAAiBsgJ,EAAOn8d,KAAK,EACrD63d,EAAa,GACjB,GAAImsG,EAAgB,CAChB,GAAM,CAAE37G,cAAe,KAAK01D,WAAWthD,iBAEvC5E,EAAa,IADOhG,GAAUL,eAAenJ,CAC5B1N,EAAY,GAAG0N,EAAW9R,WAAW4lB,EAAO1rb,IAAI,GACrE,CAEA,IAAM4lf,EAAc5xW,EAAOo6J,QACvBolP,EAAcpsG,EACd,KAAKkrG,eACT,EAEA,MAAO,CACHkB,cACApsG,aACA9yY,MAAOsxc,EAAYtxc,KACvB,CACJ,CAEAm/e,UACI/nG,EACAjla,EAAI,EACc,CAClB,IAAMitgB,EAAa3gD,GAAmBrnD,EAAOt+H,SAAS,CAACsmO,WAGjD/oQ,EAAW,CACbr0T,EAAG,EACHmwD,EAAG,EACHqvD,UAAW,aALCu6C,EAAYq7T,EAAOynG,IAKPQ,EAAQ,IAJrBtja,EAAY5pG,EAAI,KAAKuxd,UAAY,CAIR47C,EAAO,GAC3Ct/e,MAAO+7E,EAAYq7T,EAAO2e,QAAQ,EAClCt6a,OAAQsgG,EAAY,KAAK2nX,SAAS,CACtC,EACMrwb,EAAQ,CAAEimB,WAAY,mBAAoB,EAchD,OAZK89W,EAAOx/I,cAaR9sC,UAAC,IAAD,CAAoChkI,QAASs4Z,EAA7C/md,SAAA,EACIgrG,SAAC,OAAD,CACIznN,GAAI+6J,EAAYygU,EAAOC,UAAU,EACjC,GAAIhhK,EACJpxS,KAAMmyc,EAAOlsQ,MACN73H,OACV,IACDgwH,SAAC,OAAD,CACIznN,GAAI+6J,EACAygU,EAAOC,WACP,0BAEJ,GAAIhhK,EACJpxS,KAAM,QAAQmiiB,GAA2B,KAAKxzd,QAAQ2re,eAAe,EAAE,GACvE5xB,cAAc,OACPt6c,OACV,EACF,CAjBK,SAAO+jY,EAAOC,YAiBnB,GA5BCh0Q,SAAC,OAAD,CAEIznN,GAAI+6J,EAAYygU,EAAOC,UAAU,EACjC,GAAIhhK,EACJpxS,KAAMmyc,EAAOlsQ,MACbpkD,QAASs4Z,EACF/re,OACV,EANQ,OAAO+jY,EAAOC,YAMtB,CAuBb,CAEAmoG,kBACIpoG,EACAjla,EAAI,EACqB,CAGzB,OAFKila,EAAO7pT,OAGR81C,SAAC+oV,GAAD,CACI3riB,MAAO22d,EAAO7pT,MACdvrK,EAAGo1d,EAAO0nG,aACV3sgB,EAAGA,EAAIila,EAAO4nG,aAAe5nG,EAAOwnG,KACpC93Z,QAAS23W,GAAmBrnD,EAAOt+H,SAAS,CAAC2mO,YAChD,GARqB,IAU9B,CAEAC,uBACItoG,EACAjla,EAAI,EACqB,CAKzB,MAJI,CAACila,EAAOq5E,oBAAsBr5E,EAAO+oE,cAAgBz5Y,OAC9C,MAIP28D,SAAC,IAAD,CAAAhrG,UACIgrG,SAAC64H,GAAD,CACI9B,SAAUg9I,EAAOq5E,mBACjBzuiB,EAAGo1d,EAAO0nG,aACV3sgB,EAAGA,EAAIila,EAAO+oE,YAAc/oE,EAAOwnG,KACnC35iB,KAAK,OACLy7U,WAAW,MACX55L,QAAS23W,GAAmBrnD,EAAOt+H,SAAS,CAAC2mO,YAChD,EACF,EATK,cAAcroG,EAAOC,YAS1B,CAEX,CAEAsoG,iBACIvoG,EACAjla,EAAI,EACc,CAClB,IAAMo7G,EAAQ,KAAKtB,YAAYmrT,GAC/B,OACItsL,UAAC,OAAD,CAEI9oS,EAAG,EACHmwD,EAAG,EACHqvD,UAAW,aAAau6C,EAAYq7T,EAAO2nG,WAAW,EAAE,IAAIhja,EACxD5pG,GACF,GACFltC,KAAM6jR,GACNkN,GAAItwI,GAAY1jB,GAAc2jB,MAAM,EACpC+6L,WAAY02H,EAAOn8d,MAAQ,EAAI,MAAQ,QACvC6rK,QAAS23W,GAAmBrnD,EAAOt+H,SAAS,CAAC2mO,aAC7Cp/Y,SAAU,KAAK29Y,gBAAgB39Y,SAC/BD,WAAY,KAAK49Y,gBAAgB59Y,WAZrC/nE,SAAA,CAcKk1D,EAAM2xZ,aACP77W,SAAC,QAAD,CAAOp+L,KAAK,OAAQozF,SAAAk1D,EAAMulT,UAAkB,EAC1C,CAfG,iBAAesE,EAAOC,YAezB,CAEd,CAEAuoG,YAAyC,CACrC,OACIv8W,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,QACdt+C,SAAA,KAAK03b,aAAan8hB,IAAKwjd,GACpB,KAAK+nG,UAAU/nG,EAAQA,EAAOwnG,IAAI,EAEvC,EAEX,CAEAiB,oBAAiD,CAC7C,OACIx8W,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,iBACdt+C,SAAA,KAAK03b,aAAan8hB,IAAKwjd,IACpB/zQ,WAAO25H,SAAP,CAAA3kO,SACK,KAAKmnd,kBAAkBpoG,EAAQA,EAAOwnG,IAAI,CAC/B,EAFK,gBAAgBxnG,EAAOC,YAE5B,EAErB,EAEX,CAEAyoG,yBAA6D,CAQzD,OAPuB,KAAK/vB,aAAat2a,KACpC29V,GACGA,EAAOq5E,oBAAsBr5E,EAAO+oE,cAAgBz5Y,MAGvDq5a,GAGD18W,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,sBACdt+C,SAAA,KAAK03b,aAAan8hB,IAAKwjd,GACpB,KAAKsoG,uBAAuBtoG,EAAQA,EAAOwnG,IAAI,EAEpD,GAPqB,IAShC,CAEAoB,mBAAgD,CAC5C,OACI38W,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,gBACdt+C,SAAA,KAAK03b,aAAan8hB,IAAKwjd,GACpB,KAAKuoG,iBAAiBvoG,EAAQA,EAAOwnG,IAAI,EAE9C,EAEX,CAEAqB,YAAgD,CAG5C,OAFK,KAAK7oG,OAAO39V,KAAM29V,GAAWA,EAAOx/I,YAAY,GAGjDv0H,SAAC,OAAD,CAAAhrG,UACIgrG,SAAC68W,IAAD,CACI3mG,UAAW6tF,GACP,KAAKxzd,QAAQ2re,eACjB,CACH,EACC,GATqD,IAWnE,CAEA/B,UAAkBpmG,EAAqD,CACnE,OACItsL,UAAC,IAAD,CAAAzyL,SAAA,CACK,KAAK8md,UAAU/nG,GACf,KAAKooG,kBAAkBpoG,GACvB,KAAKsoG,uBAAuBtoG,GAC5B,KAAKuoG,iBAAiBvoG,EACxB,GALKA,EAAOC,UAKZ,CAEX,CAEA8oG,oBAAiD,CAC7C,OACI98W,SAACg6W,GAAD,CACI1pjB,MAAO,KAAKo8hB,aACZutB,YAAcvqhB,GAAMA,EAAEskb,WACtBkmG,KAAOxqhB,GAAMA,EAAE6rhB,KACfpB,UAAYpmG,GAAW,KAAKomG,UAAUpmG,GACtC9sC,UAAW,KAAK12V,QAAQqta,wBAC3B,EAET,CAEAm/D,cAAkD,CAG9C,MAFI,CAAC,KAAK9B,iBAAmB,CAAC,KAAKzhB,mBAA2B,MAG1Dx5V,SAAC2yV,GAAD,CACIv1iB,MAAO,KAAKo8iB,mBACZ76iB,EAAG,KAAKs+K,OAAOt+K,EACfmwD,EAAG,KAAKmuH,OAAOrqB,IACf+9M,YAAa,CAAC,KAAKpgR,QAAQ86a,SAC3B+mC,YAAa,KAAKgJ,wBACrB,EAET,CAEA4hB,YAAyC,CACrC,OACIh9W,SAACi9W,GAAD,CACIl6X,KAAM,KAAKwiU,MACXtoV,OAAQ,KAAK+4V,YACb3uO,YAAa,GAIbnoK,MACI,KAAK27b,YACCp8a,GAAgBhmB,OAChBgmB,GAAgBjmB,KAE7B,EAET,CAEAw/a,cAA2C,CACvC,OACIvwQ,UAAAsxC,WAAA,CAAA/jO,SAAA,CACK,KAAK4nd,WAAA,EACL,KAAKG,aAAA,EACL,KAAKC,WAAA,EACL,KAAKT,WAAA,EACL,KAAKI,kBAAA,EACL,KAAKH,mBAAA,EACL,KAAKC,wBAAA,CACR,GAEV,CAEAxkB,mBAAgD,CAC5C,OACIxwQ,UAAC,IAAD,CAAGp1Q,IAAK,KAAK5Q,KAAMlpB,GAAI+6J,EAAY,sBAAnCt+C,SAAA,CACK,KAAK4nd,WAAA,EACL,KAAKG,aAAA,EACL,KAAKC,WAAA,EACL,KAAKF,mBAAA,CACP,C,EAEX,CAEAznX,QAAsC,CAUlC,OATI,KAAKsgU,WAAWp9Z,UAAUjmE,QAEtB0tK,SAAC2xT,GAAD,CACIphb,QAAS,KAAKA,QACd0sF,OAAQ,KAAKA,OACb/2J,QAAS,KAAKyvf,WAAWp9Z,UAAUjmE,MACtC,GAGF,KAAKi+C,QAAQ86a,SACd,KAAK2sC,aAAA,EACL,KAAKC,kBAAA,CACf,CAIA,IAAsBqB,gBAA0B,CAC5C,OAAO,KAAK3jC,WAAW2B,eAAiB,KAAK3B,WAAW8F,gBAC5D,CAEA,IAAsBw/C,iBAA2B,CAC7C,OAAO,KAAK3hB,gBAAkB,CAAC,CAAC,KAAK/od,QAAQmrd,UACjD,CAGA,IAAsBnC,mBAAqC,CACvD,IAAM9mO,EAAa,KAAKkjM,WAAW8B,WAAWhlM,WAAWr/K,MAAA,EAkBzD,OAfI,KAAKuiX,WAAW8F,kBAChBhpM,EAAWpyU,KACP,IAAI6zU,GAAe,CACfrsH,MAAO,KAAKqzW,2BACZhxZ,MAAO,iBACP9qK,MAAO,EACPxH,MAAO,YACP+7iB,kBAAmBoQ,GACf,KAAKxzd,QAAQ2re,eACjB,CACJ,IAKD7shB,GAASojS,EAAa7pC,GAAQA,aAAesrC,GACxD,CAEA,IAAsBgnP,4BAAqC,CAIvD,OAFI7rhB,GAAS,KAAK0kb,OAAQ,SAAS10d,SAAW,EACnC,KAAK00d,OAAO,EAAE,CAAClsQ,MACnBwyW,GACX,CAGAjf,yBAA2BzmC,GAE3B,IAAcmlC,gBAAsD,CAChE,GAAI,KAAKR,eACL,MAAO,CACHC,kBAAmB,KAAKA,kBACxB6B,yBAA0B,KAAKA,wBACnC,CAGR,CAEA,IAAsBO,kBAA2B,CAC7C,MAAO,MAAQ,KAAK3+X,QACxB,CAEA,IAAsBw8X,oBAEN,CACZ,GAAK,KAAKjpd,QAAQmrd,WAClB,OAAO,IAAI5H,GAAkC,KAAKyF,kBAAmB,CACjEhiF,aAAc,KAAKv6S,SACnB06J,SAAU,KAAKz6J,OAAOtgG,MACtBuiD,MAAOuf,GAAgBhmB,OACvBgvB,MAAO,KAAKgyZ,YACZnV,SAAU,EACVwO,UAAW,KAAK6I,gBACpB,EACJ,CAEA,IAAsBlC,aAAkC,CACpD,OAAO,KAAK9jC,WAAW2B,cACjB,KAAK3B,WAAW8B,WAAWtuO,kBAC3B9lJ,MACV,CAEA,IAAsBq2Z,cAAuB,CACzC,OAAO,KAAKF,oBAAoBphf,QAAU,CAC9C,CAIA,IAAsB27Z,QAA8B,CAChD,OAAO,KAAK4hD,WAAW5hD,MAC3B,C,aACJ,GAEA,SAAS8oG,IAA4B,CACjC3mG,YACAzyT,UAAU,GACVtxJ,OAAO,EACP+qjB,cAAc,IAOd,OACIl9W,SAAC,UAAD,CACIznN,GAAI29d,EACJI,aAAa,iBACb35Y,MAAOxqE,EACPimD,OAAQjmD,EACRokd,iBAAiB,aAEjBvhX,UAAAgrG,SAAC,OAAD,CACIrhN,EAAGwT,EAAO+qjB,EACVvgf,MAAOugf,EACP9kgB,OAAQjmD,EACRyP,KAAK,OACI6hJ,SACZ,EACI,EAEjB,CC1rBA,IAAM05Z,IAAqD,CACvD,YAAa38H,GACb,cAAe,GACf,YAAa,EACjB,EAEa48H,GAA+D,EACvExpD,EAAS,SAAUupD,KACnBvpD,EAAS,UAAWupD,KACpBvpD,EAAS,aAAc,CACpB,cACA,cAAe,EACf,YAAa,GACjB,GACCA,EAAS,OAAQ,CACd,YAAanzE,GACb,cAAe,GACf,YAAa,EACjB,CACJ,EAEa48H,GAA6D,EACrEzpD,EAAS,SAAU,CAAE,QAASpzE,EAA6B,GAC3DozE,EAAS,UAAW,CAAE,QAASpzE,EAA6B,GAC5DozE,EAAS,aAAc,CAAE,SAA0C,GACnEA,EAAS,OAAQ,CAAE,QAASnzE,EAA2B,CAC5D,EAEa68H,GAAqD,CAC9D,OAAQ,CACJ,QAAS,CAAE,QAAS98H,EAA6B,EACjD,YAAa,CAAE,SAA0C,EACzD,MAAO,CAAE,QAASC,EAA2B,CACjD,EACA,KAAM,CACF,MAAO,CAAE,QAASA,EAA2B,CACjD,CACJ,EChDA,SAAgB88H,GAAa,CACzBxpG,SACAyqC,eACA1lT,gBAAA,CAMA,OACI2uF,UAAC,IAAD,CAAG5mR,UAAU,QAAQtoB,GAAI+6J,EAAY,iBAArCt+C,SAAA,EACIgrG,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,SACdt+C,SAAA++W,EAAOxjd,IAAKwjd,IACT/zQ,SAACw9W,IAAD,CAEYzpG,SACMyqC,eACA1lT,cACjB,EAJQi7Q,EAAOC,UAIf,EAEN,IACHh0Q,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,WACdt+C,SAAA++W,EAAOxjd,IAAKwjd,IACT/zQ,SAACy9W,IAAD,CAEY1pG,SACMyqC,eACA1lT,cACjB,EAJQi7Q,EAAOC,UAIf,EAEN,EACJ,C,EAEX,CAEA,SAASwpG,IAAK,CACVzpG,SACAyqC,eACA1lT,gBAAA,CAMA,IAAM9oH,EAAQote,GAAmBrpG,EAAOt+H,UAAYm+K,EAASyf,SAE7D,OACIrzU,SAAC,OAAD,CACIznN,GAAI+6J,EAAYygU,EAAOC,UAAU,EACjCnzc,UAAWqyI,GAAe6gU,EAAOC,UAAU,EAAI,QAE/C1sL,cAAc,QACd53P,EAAGkpH,GAAam7T,EAAOmsD,UAAU,EACjCt+f,KAAMmyc,EAAOlsQ,MACbmuV,YAAahmd,EAAMgmd,YACnBx3C,iBAAA,CACIA,IAAezqC,EAAOC,UAAU,CACpC,EACAl7Q,iBAAA,CACIA,KACJ,CACH,EAXQi7Q,EAAOC,WAAa,QAarC,CAEA,SAASypG,IAAO,CACZ1pG,SACAyqC,eACA1lT,gBAAA,CAMA,IAAM9oH,EAAQote,GAAmBrpG,EAAOt+H,UAAYm+K,EAASyf,SAE7D,OACIrzU,SAAC,OAAD,CACIznN,GAAI+6J,EAAYygU,EAAOC,UAAU,EACjCnzc,UAAWqyI,GAAe6gU,EAAOC,UAAU,EAAI,UAE/C1sL,cAAc,QACd53P,EAAGkpH,GAAam7T,EAAO2hD,YAAY,EACnCtuO,OAAQ8G,GAAI6lL,EAAOlsQ,KAAK,EAAE6kF,OAAO,IAAKx4S,SAAA,EACtCsjjB,cAAexnd,EAAM0te,cACrBr2R,YAAar3M,EAAMsvZ,YACnB19d,KAAK,OACL48e,iBAAA,CACIA,IAAezqC,EAAOC,UAAU,CACpC,EACAl7Q,iBAAA,CACIA,KACJ,CACH,EAbQi7Q,EAAOC,WAAa,UAerC,C,80GC1CYn4Q,eANN8hX,IAAgC,cAM1B9hX,KAAMpoG,U,SADX,cACKooG,G,wCAFX5zH,C,IA0BI0qC,E,EAAagjZ,Y,GAIbhjZ,E,EAAqBpiC,S,GAIrBoiC,E,EAAqBsqD,Q,GAIrBtqD,E,EAAqB04Y,U,GAIrB14Y,E,EAAaqqD,U,GAIbrqD,E,EAAaqrN,2B,GAIbrrN,E,EAAqBqjZ,a,GAmBrBrjZ,E,EAAqB8iZ,U,GAcrB9iZ,E,EAAa4yY,O,GAIb5yY,E,EAAa6zY,O,GAIb7zY,E,EAAqBinb,oB,GAIrBjnb,E,EAAqBmlZ,a,GAMrBnlZ,E,EAAqBknb,kB,GAIrBlnb,E,EAAqBm8Z,a,GAarBn8Z,E,EAAqBgnb,sB,GAuBrBhnb,E,EAAqB2lb,wB,GAIrB3lb,E,EAAqB+ob,Y,GAMrB/ob,E,EAAqBsmb,qB,GAKrBtmb,E,EACWumb,iC,GAmBXvmb,E,EAAqBwmb,kB,GAOrBxmb,E,EAAqBymb,qB,GAOrBzmb,E,EAAqB0mb,4B,IAQrBxic,IAAOo6D,K,KAAc2sZ,kB,IAYrB/md,IAAOo6D,K,KAAc4sZ,kB,GAIrBlrc,E,EAAamnb,gB,GAsBbnnb,E,EAAqB27a,0B,IAoBrBz3b,IAAOo6D,K,KAAcynY,2B,IAQrB7hc,IAAOo6D,K,KAAc0nY,yB,IAIrB9hc,IAAOo6D,K,KAAc2nY,kC,IAUrB/hc,IAAOo6D,K,KAAc4nY,2B,GAIrBlmb,E,EAAqBmrc,8B,GAarBnrc,E,EAAqBgtb,mB,GAWrBhtb,E,EAAqBkiW,mB,IAUrBh+W,IAAOo6D,K,KAAcmnY,c,IA2CrBvhc,IAAOo6D,K,KAAcghY,gB,IAIrBp7b,IAAOo6D,K,KAAcknY,e,GAOrBxlb,E,EAAqBorc,qB,GAmDrBprc,E,EAAqB8lb,iB,GAIrB9lb,E,EAAqBknU,S,IAiFrBhjV,IAAOo6D,K,KAAM4mT,iB,GAiHbllW,E,EAAqBomb,iB,GAMrBpmb,E,EAAqBqmb,sB,GAIrBrmb,E,EAAqBohW,Q,GAIrBphW,E,EAAqB0jZ,c,GAIrB1jZ,E,EAAqB+5a,c,CA3nBd7wV,e,CAYR,YAAY/3M,EAA8B,CACtC,MAAMA,GAENyxL,EAGE,KAAM,CACJk8W,aAAcruX,EACd22X,uBAAwB32X,CAC5B,EACJ,CAnBA80Q,qBAA6Bz/R,MAC7Bg5Y,aAAgC,IAAIt1E,GAGjC,CAAEpgM,KAAM,WAAY,GAEvBg+Q,uBAAyD12Z,OACzD22Z,WAAyC32Z,OAczC,IAAcsyX,YAAoC,CAC9C,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAAsBplb,SAAwB,CAC1C,OAAO,KAAKolb,WAAWplb,OAC3B,CAEA,IAAsB0sF,QAAiB,CACnC,OAAO,KAAKn5K,MAAMm5K,QAAUkjR,EAChC,CAEA,IAAsBkrE,UAAoB,CACtC,OAAO,KAAK96a,QAAQ86a,UAAY,EACpC,CAEA,IAAcruV,UAAmB,CAC7B,OAAO,KAAKzsF,QAAQysF,YACxB,CAEA,IAAcghK,2BAAsC,CAChD,OAAO,KAAKztP,QAAQytP,2BAA6B,EACrD,CAEA,IAAsBg4L,aAAsB,CACxC,OAAO,KAAK8kC,gBAAgB,CAAEC,aAAc,KAAK3B,mBAAoB,EACzE,CAEA0B,gBAAwB,CACpBC,gBAGO,CACP,OACI,KAAK99X,OACAm/X,SAASrB,GAETruB,OAAO,GAEP2vB,UAAU,EAEvB,CAEA,IAAsB5mC,UAAqB,CACvC,OAAO,KAAKulC,aAAa,KAAKhlC,WAAW,CAC7C,CAEAglC,aAAqB/9X,EAA0B,CAC3C,GAAM,CAAE28X,qBAAoBC,oBAAqB,KACjD,OAAO,IAAIxtB,GAAS,CAChBpvW,SACA24V,eAAgBgkC,EAChB/jC,aAAcgkC,EACdrtB,gBAAiB,KAAKj8b,QAAQi8b,eAClC,EACJ,CAEA,IAAcjnB,OAAsB,CAChC,OAAO,KAAKkQ,SAASI,YACzB,CAEA,IAAcrP,OAAwB,CAClC,OAAO,KAAKiP,SAASG,cACzB,CAEA,IAAsBgkC,oBAAqC,CACvD,OAAO,KAAKjkC,WAAWqD,iBAAiB,KAAK8V,WAAW,CAC5D,CAEA,IAAsBhX,aAA0B,CAC5C,GAAM,CAAEA,eAAgB,KAAKvnb,QAE7B,OAAO,IAAIy8b,GAAW,CADLzkN,KAAM,GACY,GAAGuvM,CAAY,EAAG,IAAI,CAC7D,CAEA,IAAsB+hC,kBAAiC,CACnD,OAAO,KAAKlkC,WAAWwD,eAAe,KAAKrB,WAAW,CAC1D,CAEA,IAAsBgX,aAA0B,CAC5C,GAAM,CAAEA,eAAgB,KAAKv+b,QAE7B,OAAO,IAAIy8b,GAAW,CADL1G,cAAe,GACG,GAAGwI,CAAY,EAAG,IAAI,CAC7D,CAEAgtB,oBAA4B/nF,EAA+C,CACvE,OAAOY,GAAuBZ,EAAQ,CAClCc,kBAAmB,KAAKA,kBACxBD,mBAAoB99T,GAAiB,CAAC,KAAK6oZ,iBAAkB,EACjE,EACJ,CAEA,IAAsBhG,sBAAsC,CACxD,IAAMqkB,EACF,KAAKroD,WAAWxhD,iBAAmB1+U,GAAeu9B,OAEtD,OAAO,KAAK+gT,OACPxjd,KAAKwjd,EAAQ30d,KAAW,CACrByoN,MAAOksQ,EAAOlsQ,MACdmsQ,WAAYD,EAAOC,WACnB9pT,MACI8zZ,GAAoBjqG,EAAO6kD,gBACrB7kD,EAAO6kD,gBACP7kD,EAAOC,WACjB07E,OAAQ,KAAK/5B,WAAWwH,UAAU/9gB,GAClC6+gB,WAAYlqD,EAAOkqD,WACnBxoL,SAAUu+K,GAAgB,CACtBj/C,MAAO,KAAK+mF,oBAAoB/nF,GAChCz3U,MAAOy3U,EAAOz3U,KAClB,EACJ,IACCv0F,OAAQgsa,GAAW,CAACA,EAAOkqD,UAAU,EACrC7qM,WAAA,CACT,CAEA,IAAsBklO,wBAAiC,CACnD,OAAOrkZ,KAAK/0J,IAAI,IAAK,KAAK+9K,OAAOtgG,MAAQ,EAC7C,CAEA,IAAsB++d,YAAsB,CACxC,MACI,CAAC,CAAC,KAAKnrd,QAAQsqd,kBAAoB,CAAC,KAAKtqd,QAAQ0te,kBAEzD,CAEA,IAAsBhlB,qBAA2C,CAC7D,OAAO,KAAK2B,4BAA8B,KAAKr1C,KAAK,CACxD,CAGA,IACY2zC,iCAAuD,CAC/D,OAAO,KAAK0B,4BACF,KAAKvB,0BACf,CACJ,CAEAuB,wBACIr1C,EACmB,CACnB,OAAO,IAAIkpC,GAAoB,KAAKkL,qBAAsB,CACtDjiO,SAAU,KAAK4gO,uBACf/gF,aAAc,KAAKv6S,SACnBuoV,QACA0V,WAAc,KAAK+9B,qBACnB7H,8BAA+B,KAAK7C,yBACpClW,kBAAmB,CAAC,KAAK/sB,QAC7B,EACJ,CAEA,IAAsB8tC,kBAA4B,CAC9C,MACI,CAAC,CAAC,KAAK5od,QAAQm6Z,cACf,KAAKztU,OAAOtgG,SAEpB,CAEA,IAAsBy8d,qBAA8B,CAEhD,OADK,KAAKsC,WACH,KAAKvC,iBACN,KAAKD,gCAAgCv8d,MACrC,KAAKs8d,oBAAoBtK,YAHF,CAIjC,CAEA,IAAsB0K,4BAA2C,CAC7D,GAAI,CAAC,KAAKF,iBAAkB,OAAO,KAAK5zC,MACxC,IAAMtoV,EAAS,KAAK69X,gBAAgB,CAChCC,aAAc,KAAK9B,oBAAoBtK,WAC3C,GACA,OAAO,KAAKqM,aAAa/9X,GAAQ44V,YACrC,CAEsB+nD,iBAAiB5pG,EAA8B,CACjE,KAAK2hD,WAAWqB,WAAWhlK,MAAA,EACvB,KAAKy/L,aAAanwiB,OAClB+tC,GAAS,KAAKoigB,aAAanwiB,OAAQ,CAAEyyd,OAAQC,CAAW,GAExD,KAAKy9E,aAAanwiB,OAAS,CACvBlC,MAAO,EACP20d,OAAQC,CACZ,CAER,CAEsB6pG,kBAAyB,CAC3CxuhB,GAAS,KAAKoigB,aAAanwiB,OAAQ,CAAEyyd,OAAQ1wU,MAAU,EAC3D,CAEA,IAAcy2Z,gBAAsD,CAChE,GAAI,CAAC,KAAK4B,WAaN,MAAO,CACHY,sBAb0B,KAAK3mC,WAAWuH,gBACzC3sgB,KACIwjd,EAAQ30d,IACL,IAAI80U,GAAe,CACf90U,QACAxH,MAAOm8d,EAAOC,WACd9pT,MAAO6pT,EAAOC,WACdnsQ,MAAOksQ,EAAOlsQ,KAClB,IAEPurH,WAGDkpO,EACAT,6BAA8ByhB,EAClC,CAGR,CAEA,IAAsBhvB,0BAAqC,CACvD,OAAO,KAAKv6E,OACPmqG,UACIxxQ,EAAyBqyN,KAItB,GAAI,CAACryN,EAAI,MAAO6zP,GAChB,GAAI,CAACxhC,EAAI,MAAOuhC,GAEhB,IAAM6d,EAASr/C,GAAiBpyN,EAAIqyN,GAIpC,OAHIo/C,IAAWzxQ,EAAW4zP,GAC1B,EAAI6d,IAAWp/C,EAGnB,GAEHxugB,IAAKg/B,GAAMA,EAAEykb,UAAU,CAChC,CAEsB0kF,0BAClB1kF,EACI,CACJ,KAAK2hD,WAAWqB,WAAWhlK,MAAA,EAC3Bv3M,aAAa,KAAKu/Y,UAAU,EAC5B,KAAKD,uBAAyB/lF,CAClC,CAEsB2kF,yBAAgC,CAClD,KAAKoB,uBAAyB12Z,MAClC,CAEsBu1Z,kCAAyC,CAC3Dn+Y,aAAa,KAAKu/Y,UAAU,EAI5B,KAAKA,WAAa/mZ,OAAOvuF,eAAA,CACrB,KAAKi0e,wBAAA,CACT,EAAG,IACP,CAEsBE,2BAAkC,CACpD,KAAKD,iCAAA,CACT,CAEA,IAAsBklB,8BAEN,CACZ,GAAM,CAAExjB,0BAA2B,KAAK/pd,QACxC,GAAK+pd,EAML,OAHsB,KAAK3kC,WAAW0E,UAAUhlX,KAAM0+T,GAClDumF,EAAuBp5W,SAAS6yR,EAAOC,UAAU,CAE9CoqG,GAAepqG,UAC1B,CAEA,IAAsB2rF,mBAA4C,CAC9D,OAEI,KAAKlO,aAAanwiB,QAAQyyd,QAE1B,KAAKgmF,wBAEL,KAAK+jB,4BAEb,CAEA,IAAsBjpG,mBAA6B,CAC/C,MACI,CAAC,CAAC,KAAK8qF,mBAIP,CAAC,CAAC,KAAKpvd,QAAQ+pd,sBAEvB,CAEsBlC,aAClBhqe,EACI,CACJ,IAAM/7C,EAAM,KAAK5Q,KAAK5lB,QAClBq+iB,EAAY,KAAK3pd,QAAQ9uE,MAAM5lB,QAOnC,GAJIq+iB,IACA,KAAKzI,aAAalsd,SAAWusE,GAAiBooZ,EAAW9re,IAGzD,CAAC/7C,EAAK,OAEV,GAAM,CAAE0hc,UAAW,KACbo+B,EAAQrgW,GAAiBz/H,EAAK+7C,EAAGkiK,WAAW,EAC5C+tV,EAAapla,KAAa,GAAK,GAG/Bqla,EAAa,KAAK7oD,SAASO,YAAYj5D,OAAO,CAChD3kV,KAAMimc,EACN7lc,MAAO6lc,CACX,GAEIE,EACJ,GAAID,EAAWp9X,SAASixT,GAAQ,CAC5B,IAAM8jB,EAAY,KAAKR,SAASG,eAAevwM,OAAO8sL,EAAMxzf,CAAC,EACvD6/jB,EAAenvhB,GAAQ0kb,EAAO,EAAE,CAACl7T,OAASnpH,GAC5CukH,KAAKqC,IAAI5mH,EAAE61C,SAAW0wb,IAEtBuoD,IAEAD,EADcxqG,EAAO,EAAE,CAACl7T,OAAO14J,QAAQq+jB,CACxBp/jB,EAEvB,CACA,KAAKqyiB,aAAanwiB,OACdi9jB,IAAiBl7a,OACX,KACA,CACIjkJ,MAAOm/jB,EACPxqG,OAAQ,KAAK09E,aAAanwiB,QAAQyyd,MACtC,CACd,CAEsBk+E,gBAAuB,CACzC,KAAKR,aAAanwiB,OAAS,IAC/B,CAEsB62iB,eAAsB,CACnC,KAAK5nd,QAAQ0pd,0BACd,KAAKhI,eAAA,EAET,KAAK8H,uBAAyB12Z,MAClC,CAEA,IAAsB06a,qBAEN,CACZ,GAAM,CAAEtoD,WAAU1hD,UAAW,KACvB,CAAE6hD,iBAAgBC,gBAAiBJ,EACnCgpD,EAAoB,KAAKhtB,aAAanwiB,QAAQlC,MACpD,GAAIq/jB,IAAsBp7a,OAAW,OAErC,IAAM8uY,EAASp+D,EAAO,EAAE,CAACl7T,OAAO4la,GAChC,GAAItsC,IAAW9uY,OAEf,OAEIokJ,UAAC,IAAD,CAAG5mR,UAAU,iBAAiBmvE,MAAO,CAAEs6c,cAAe,MAAO,EAA7Dt1b,SAAA,CACK++W,EAAOxjd,IAAKwjd,IACT,IAAMzhU,EAAQyhU,EAAOl7T,OAAO4la,GAS5B,MAPI,CAACnsa,GACDA,EAAM6oU,SACN7oU,EAAMyrX,cACNzrX,EAAM16J,QAAU,EAET,MAGPooN,SAAC,SAAD,CAEI3hC,GAAI3lB,EACAk9W,EAAewP,MAAM9yX,EAAM/sE,QAAQ,GAEvC+4F,GAAI5lB,EACAm9W,EAAauP,MACT9yX,EAAM16J,MAAQ06J,EAAMwrX,WACxB,GAEJrvd,EAAG,EACH7sC,KAAMmyc,EAAOlsQ,KAChB,EAXQksQ,EAAOC,UAWf,CAET,IACAh0Q,SAAC,OAAD,CACIzjC,GAAI7jB,EAAYk9W,EAAewP,MAAM+M,EAAO5sc,QAAQ,GACpDo3F,GAAIjkB,EAAYm9W,EAAa9lb,MAAM,EAAE,EACrC2sF,GAAIhkB,EAAYk9W,EAAewP,MAAM+M,EAAO5sc,QAAQ,GACpDq3F,GAAIlkB,EAAYm9W,EAAa9lb,MAAM,EAAE,EACrCq3M,OAAO,sBACV,EACF,C,EAEX,CAEA,IAAsBqxQ,iBAA2B,CAC7C,OAAO,KAAKlod,QAAQspW,SAAS78b,OAAOzE,KAAO,KAAK2/b,SACpD,CAEA,IAAsB2B,SAA0C,CAC5D,GAAM,CAAEv4b,SAAQikF,WAAUysd,UAAW,KAAKP,aAC1C,GAAI,CAACnwiB,EAAQ,OAGb,GAAM,CAAEyyd,UAAW,KACb0qG,EAAoBn9jB,EAAOlC,MAC3Bs/jB,EAAoB3qG,EAAO,EAAE,CAACl7T,OAAO4la,GAC3C,GAAI,CAACC,EAAmB,OAExB,IAAMxnD,EAAe,KAAKvB,WAAWuB,aACjC/nC,EAAgB+nC,EAAa/oE,WAAWuwH,EAAkBn5e,QAAQ,EAClE,CAAEmmX,eAAgBwrE,EAEhBzvX,EAAQ0nV,EACRlS,EAAkB,KAAKupC,MAAMt8V,MAAQ,IAAI,KAAKs8V,MAAMt8V,MAAM,GAAK,GAE/Dy0Z,EAAmBxna,GAAO48T,GAASl7T,OAAO4la,GAChD,GAAI,CAACE,EAAkB,OACvB,IAAMz9C,EAAay9C,EAAiB/mkB,MAAQ+mkB,EAAiB7gD,YAUvDx2K,EAASxwM,GAAiB,CARTogX,EAAazrE,2BAC9B,CACIpkL,KAAM8wM,GAAkBwF,KACxBlpZ,KAAM6mZ,GAA0B,CAC5B47C,EAAaxoW,qBAChB,EACL,EACArrB,MAC0C,GAEhD,OACI28D,SAACi6O,GAAD,CACI1hc,GAAI,KAAK2/b,UACT2lC,eAAgB,KAAKttY,QACrB5xF,EAAG4mF,EAAS5mF,EACZmwD,EAAGy2B,EAASz2B,EACZm2I,QAAS,IACTC,QAAS,GACT63R,iBAAiB,OACjB/sY,MAAO,CAAE0nP,SAAU,KAAM,EAClBjwL,QACUw1U,kBACjBj1U,SAAU0jT,EACVwxB,eAAe,OACP51H,SACR61H,SAAU60E,EACVtmD,QAAS,KAAKumD,eAEdj9b,UAAAgrG,SAACi6Q,GAAD,CACIv+T,QAAS+/T,GAAsBy7C,GAC/BrpD,OAAQ,CAACqzD,CAAU,EACnBzlX,KAAMs4T,EAAO3gJ,WAAA,EAAa7iU,IAAKwjd,IAC3B,GAAM,CAAEC,WAAY56d,EAAMyuN,QAAOhvD,UAAWk7T,EACtCzhU,EAAQuG,EAAO4la,GACfrkG,EAAUhhe,IAASkI,EAAOyyd,OAC1B1tc,EAAS,CACXisI,GAAO6oU,SAAW7oU,GAAOyrX,aACnB16X,OACAiP,GAAO16J,KACjB,EASA,MAAO,CACHwB,OACAkhe,QAJazyQ,QAAOpkD,QAFR25Z,GAHChjG,EACXw5C,EAAS2f,YACT3f,EAASyf,QAC6B,CAAC2iB,WAMzC17E,EACAF,UACA/zc,QACJ,CACJ,EACH,EACI,EAEjB,CAEcwxc,gBAAgB1ob,EAAqB,CAG/C,IAAMorgB,EAAiB,KAAKhqd,QAAQ9uE,MAAM5lB,QACrC0+iB,GACyBt9Y,MAAMxnI,KAChC8khB,EAAeE,uBAAuBkjB,IAERnjB,EAAWz0Y,MAAO20Y,GAChDhmF,GAAuBvlb,EAAE7tC,OAASo5iB,EAElCC,GACA,KAAK1I,eAAA,CAEb,CAEAxwhB,KAAOo6L,EAAMk8Q,UAAA,EACbC,mBAAmC,CAC/B99d,SAASk3W,iBAAiB,QAAS,KAAKymH,gBAAiB,CACrD10Z,QAAS,EACb,GACA2vF,GAAuB,IAAI,CAC/B,CAEAmlU,sBAAsC,CAClC/9d,SAAS63W,oBAAoB,QAAS,KAAK8lH,gBAAiB,CACxD10Z,QAAS,EACb,EACJ,CAEA65f,YAAiC,CAC7B,GAAM,CAAEzse,WAAY,KACpB,OACIyvH,SAACk7V,GAAD,CACIzlC,SAAU,KAAKA,SACfktB,cAAe,GACfC,eAAgB,GAChB3lM,cAAe1sQ,EAAQy6Z,kBAC1B,EAET,CAEA84D,sBAAuD,CACnD,GAAK,KAAKpI,WACV,OACI17V,SAACysV,GAAD,CACIrviB,MAAO,KAAK67iB,oBACZt6iB,EAAG,KAAKo6iB,gBACRv6C,aAAc,KAAKk6C,0BACnB5/V,aAAc,KAAK+/V,0BACnBloM,YAAa,CAAC,KAAK06J,QACtB,EAET,CAEA2sC,cAAmC,CAC/B,OACIvwQ,UAAAsxC,WAAA,CAAA/jO,SAAA,CACK,KAAKgod,WAAA,EACL,KAAKlZ,qBAAA,GACN9jW,SAACu9W,GAAD,CAAcxpG,OAAQ,KAAK24E,YAAe,EAC5C,GAEV,CAEAuL,mBAAwC,CACpC,OACIxwQ,UAAC,IAAD,CACIp1Q,IAAK,KAAK5Q,KACVZ,UAAW88iB,IACX7kX,aAAc,KAAKq/V,cACnBoD,WAAY,KAAKpD,cACjBqD,cAAe,KAAKrD,cACpB1hW,YAAa,KAAK2hW,aAClB5/V,aAAc,KAAK4/V,aACnB7/V,YAAa,KAAK6/V,aARtBpjc,SAAA,EAUIgrG,SAAC,OAAD,CAAM,GAAI,KAAK/iC,OAAO+uV,QAAA,EAAWgqC,YAAY,GAIvC,GACL,KAAKgnB,WAAA,EACL,KAAKlZ,qBAAA,GACN9jW,SAACu9W,GAAD,CACIxpG,OAAQ,KAAK24E,aACbluC,aAAc,KAAKo/D,iBACnB9kX,aAAc,KAAK+kX,gBACtB,GACA,KAAKplB,iBAAmB,KAAKslB,oBAC7B,KAAKlkI,OACP,C,EAEX,CAEAxkP,QAAsC,CAalC,OAZI,KAAKsgU,WAAWp9Z,UAAUjmE,QAEtBm1P,UAAC,IAAD,CAAAzyL,SAAA,CACK,KAAKgod,WAAA,GACNh9W,SAAC2xT,GAAD,CACIphb,QAAS,KAAKA,QACd0sF,OAAQ,KAAKA,OACb/2J,QAAS,KAAKyvf,WAAWp9Z,UAAUjmE,MACtC,EACF,IAGJ,KAAKi+C,QAAQ86a,SACd,KAAK2sC,aAAA,EACL,KAAKC,kBAAA,CACf,CAEA,IAAsBc,iBAA0B,CAC5C,OAAO,KAAK2C,WACN,KAAKz+X,OAAOzkD,MAAQ,KAAK4gb,oBACzB,CACV,CAEA,IAAsBJ,sBAAyC,CAC3D,MAAO,CAAC,KAAK/7X,OAAOrqB,IAAK,KAAKqqB,OAAO1d,MAAM,CAC/C,CAEA,IAAsBw0T,QAAyC,CAC3D,OAAO,KAAK4hD,WAAW5hD,MAC3B,CAEA,IAAsBsiD,cAAgD,CAClE,OAAO2J,IAA0B,KAAKjsD,OAAQ,KAAK0hD,QAAQ,CAC/D,CAEA,IAAsBi3B,cAAgD,CAClE,OAAO,KAAKr2B,aAAa9lgB,IAAKwjd,IAC1B,IAAMgB,EAAQ,KAAK+mF,oBAAoB/nF,GACjCt+H,EAAWu+K,GAAgB,CAAEj/C,QAAOz4U,MAAOy3U,EAAOz3U,KAAM,GAC9D,MAAO,CAAE,GAAGy3U,EAAQgB,QAAOt/H,UAAS,CACxC,EACJ,C,aACJ,GC1qBA,SAAgBmpO,IACZ96jB,EAAA,CAEA,GAAM,CACF1G,QACAuB,IACAmwD,IACA6hT,cAAc,GACdyhM,cACAQ,cACA7zC,cACAjmT,eACAs8J,WACAtxW,EACE,CAAEiwd,SAAQtsU,SAAUrqJ,EAE1B,OACIqqS,UAAC,IAAD,CACIlvS,GAAI+6J,EAAY,yBAChBzyI,UAAU,+BAFdm0F,SAAA,CAIKyyC,IACGu4D,SAAC64H,GAAD,CAAa9B,SAAUtvL,EAAU9oJ,IAAMmwD,IAAGiuH,WAAY,GAAM,IAEhEijC,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,UACdt+C,SAAA++W,EAAOxjd,IAAKwjd,IACT,IAAM/jY,EAAQmid,GACVC,EACAQ,GAAa51iB,IAAI+2d,EAAOnrL,GAAG,GAG/B,OACI5oF,SAAC64H,GAAD,CAEI9B,SAAUg9I,EAAOh9I,SACjBp4U,EAAGA,EAAIo1d,EAAO7pT,MAAMvrK,EACpBmwD,EAAGA,EAAIila,EAAO7pT,MAAMp7G,EACpBltC,KAAMouE,EAAM63H,MACZ,GAAI73H,CACP,EANQ+jY,EAAOh9I,SAAStiQ,IAMxB,CAET,EACD,IACHurI,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,YACdt+C,SAAA++W,EAAOxjd,IAAKwjd,IACT,IAAM/jY,EAAQqid,GACVD,EACAQ,GAAa51iB,IAAI+2d,EAAOnrL,GAAG,EAC3B,CAAEhnR,KAAMmyc,EAAOnrL,IAAI/gF,KAAM,GAG7B,OACI7H,SAAC,OAAD,CACIznN,GAAI+6J,EAAYygU,EAAOh9I,SAAStiQ,IAAI,EAEpC91E,EAAG+5J,EAAY/5J,EAAIo1d,EAAOuG,OAAO37d,CAAC,EAClCmwD,EAAG4pG,EAAY5pG,EAAIila,EAAOuG,OAAOxra,CAAC,EAClC6tB,MAAO+7E,EAAYq7T,EAAOuG,OAAO39Y,KAAK,EACtCvkB,OAAQsgG,EAAYq7T,EAAOuG,OAAOlia,MAAM,EACjC43B,OACV,EANQ+jY,EAAOh9I,SAAStiQ,IAMxB,CAET,EACD,GACFk8R,IACG3wJ,SAAC,IAAD,CAAAhrG,SACK++W,EAAOxjd,IAAKwjd,IACT,IAAM7pT,EAAQ6pT,EAAOh9I,SAAStiQ,KACxBoqf,EAAY9/D,MACAA,EAAYhrC,EAAOnrL,GAAG,EAClCvlJ,OACAy7a,EAAahmX,GAAgBz1D,OAC7BxuD,EAAQugR,MACIA,EAAQ2+G,EAAOnrL,GAAG,EAC9BvlJ,OAIN,OACI28D,SAAC,IAAD,CAEIn/L,UAAU,aACVk+e,YAAa8/D,EACb/lX,aAAcgmX,EACd1pN,QAASvgR,EACT7E,MAAO,CAAEi1I,OATFpwI,EAAQ,UAAY,SASX,EAEhBmgB,UAAAgrG,SAAC,OAAD,CACIrhN,EAAG+5J,EAAY/5J,EAAIo1d,EAAOgrG,QAAQpgkB,CAAC,EACnCmwD,EAAG4pG,EAAY5pG,EAAIila,EAAOgrG,QAAQjwgB,CAAC,EACnC6tB,MAAO+7E,EAAYq7T,EAAOgrG,QAAQpif,KAAK,EACvCvkB,OAAQsgG,EAAYq7T,EAAOgrG,QAAQ3mgB,MAAM,EACzCx2C,KAAK,OACLo0hB,YAAa,CAChB,EACF,EAfM9rY,EAiBjB,EACD,EAER,C,EAEX,C,s1GC5Ga80Z,IAAb,KAAaA,C,gCAYRrsc,E,EAAqB+kN,U,GAIrB/kN,E,EAAqBqqD,U,GAIrBrqD,E,EAAqBssc,U,GAIrBtsc,E,EAAa80B,O,GAYb90B,E,EAAqBusc,a,GAKrBvsc,E,EAAqB0pa,a,GA2BrB1pa,E,EAAaohW,Q,GA+BbphW,E,EAAah2C,O,GAMbg2C,E,EAAav6D,Q,KAxGdi1Q,KACAhvU,QAEA8gkB,uBAA+B,GAC/BnoP,WAA8B,EAE9B,YAAY3J,EAAuBhvU,EAAqC,CACpE,KAAKgvU,KAAOA,EACZ,KAAKhvU,QAAUA,CACnB,CAEA,IAAsBq5U,UAAmB,CACrC,OAAO,KAAKr5U,QAAQq5U,UAAY,GACpC,CAEA,IAAsB16J,UAAmB,CACrC,OAAOq6S,GAAc,KAAM,KAAKh5d,QAAQk5d,gBAAgB6nG,CAC5D,CAEA,IAAsBH,UAAmB,CACrC,OAAOhra,KAAKr+B,MAAM,KAAKonD,SAAW,IACtC,CAEA,IAAcv1B,OAA8B,CACxC,GAAK,KAAKppJ,QAAQopJ,MAClB,OAAO,IAAIgwL,GAAS,CAChBC,SAAU,KAAKA,SACf16J,SAAU,KAAKA,SACfD,WAAY,IACZi6J,WAAY,EACZviQ,KAAM,KAAKp2E,QAAQopJ,MACnBuuL,WAAY,CAAC,IAAK,GAAG,CACzB,EACJ,CAEA,IAAsBkpP,aAAsB,CAExC,OADK,KAAKz3a,MACH,KAAKA,MAAMrvF,OAAS,EADH,CAE5B,CAEA,IAAsBike,aAAmC,CACrD,GAAM,CAAEr/W,WAAUiiZ,WAAUE,eAAgB,KAE5C,OAAO,KAAK9xP,KAAK98T,IAAKq4R,IAElB,IAAI1+H,EAAQ0+H,EAAIn0N,KACZ,CAACy1F,GAAS8qK,GAAapsC,IAAQA,EAAIisQ,SAAWjsQ,EAAIksQ,UAClD5qY,EAAQ,GAAG0+H,EAAIisQ,QAAQ,KAAKjsQ,EAAIksQ,WAGpC,IAAM/9N,EAAW,IAAIU,GAAS,CAC1BC,SAAU,KAAKA,SACf16J,WACAg6J,WAAY,EACZviQ,KAAMy1F,EACN8rK,WAAY,CAAC,IAAK,GAAG,CACzB,GAEA,MAAO,CACHptC,MACAmuC,WACAp6P,MAAOsif,EAAWE,EAAcpoP,EAASp6P,MACzCvkB,OAAQ67F,KAAKh1J,IAAI83U,EAAS3+Q,OAAQ6mgB,EACtC,CACJ,EACJ,CAEA,IAAclrG,QAA+B,CACzC,GAAM,CAAEkrG,WAAUE,cAAanoP,cAAe,KAE1CqoP,EAAiB,KAAKH,YAC1B,OAAO,KAAK7iC,YAAY9rhB,IAAKwjd,IACzB,IAAM72H,EAAUmiO,EAChBA,GAAkBtrG,EAAO37Z,OAAS4+Q,EAElC,IAAM9sK,EAAQ,CAAEvrK,EAAGsgkB,EAAWE,EAAarwgB,EAAGouS,CAAQ,EAIhD,EAAG2iL,GAAa9rD,EAAOh9I,SAAS6B,2BAClC1uK,EAAMvrK,EACNurK,EAAMp7G,CACV,EAEA,MAAO,CACH,GAAGila,EACH7pT,QACAowT,OAAQ,IAAIj+S,EAAO,EAAGwjW,EAAYo/C,EAAUA,EAAUA,GACtDF,QAAS,IAAI1iZ,EACT,EACA6gL,EAAUlmB,EAAa,EACvB+8I,EAAOp3Y,MACPo3Y,EAAO37Z,OAAS4+Q,EAExB,CACJ,EACJ,CAEA,IAAcr6P,OAAgB,CAC1B,IAAMmiH,EAAS,KAAKu9V,YAAY9rhB,IAAKwjd,GAAWA,EAAOp3Y,KAAK,EAE5D,OADI,KAAK8qE,OAAOq3C,EAAOz+L,KAAK,KAAKonJ,MAAM9qE,KAAK,EACrCttC,GAAMyvJ,IAAW,CAC5B,CAEA,IAAc1mI,QAAiB,CAC3B,OACI,KAAK8mgB,YACL7vhB,GAAM,KAAKgtf,YAAY9rhB,IAAKwjd,GAAWA,EAAO37Z,MAAM,GACpD,KAAK4+Q,WAAa,KAAKqlN,YAAYh9hB,MAE3C,CACJ,EC/GA,SAAgBigkB,GACZx7jB,EAAA,CAEA,GAAM,CACF1G,QACAuB,IACAmwD,IACA6hT,cAAc,GACdyhM,cACAQ,cACAp0C,eACAO,cACAjmT,gBACAh1M,EACE,CAAEy7jB,QAAOJ,eAAgB/hkB,EAEzB61iB,EAActiM,GAAe,CAAC,CAACouJ,EAKrC,OAJAroB,GACIu8D,EAAcn6V,EAAez1D,SAI7BokJ,UAAC,IAAD,CACIlvS,GAAI+6J,EAAY,4BAChBzyI,UAAU,yBACVsuW,cAAgB/vW,GAAUA,EAAM0nY,gBAAA,EAHpC9xS,SAAA,EAKIgrG,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,YACdt+C,SAAAuqd,EAAMhvjB,KAAKugR,EAAM1xR,KACd,IAAM4wF,EAAQqid,GACVD,EACAQ,GAAa51iB,IAAI8zR,EAAK8X,GAAG,EACzB,CACIhnR,KAAMkvQ,EAAK8X,IAAI/gF,MACfw/E,YAAaorQ,GACjB,GAGE7whB,EAAOkvQ,EAAK8X,IAAI6qQ,eAChB,QAAQ3iR,EAAK8X,IAAI6qQ,eAAe,GAChCzjd,EAAMpuE,KAENoxS,EAAW,CACbr0T,EAAG+5J,EAAY/5J,EAAImyR,EAAKnyR,CAAC,EACzBmwD,EAAG4pG,EAAY5pG,EAAIgiO,EAAKhiO,CAAC,EACzB6tB,MAAO+7E,EAAYo4H,EAAKmuS,QAAQ,EAChC7mgB,OAAQsgG,EAAYo4H,EAAKmuS,QAAQ,CACrC,EAEA,OACIx3R,YAAOkyC,SAAP,CAAA3kO,SAAA,EACIgrG,SAAC,OAAD,CACIznN,GAAI+6J,EAAYw9H,EAAK5mH,MAAMz1F,IAAI,EAC/B,GAAIu+O,EACJhjO,MAAO,CAAE,GAAGA,EAAOpuE,MAAK,CAC3B,GACAkvQ,EAAK8X,IAAI+qQ,oBACN3zV,SAAC,OAAD,CACIznN,GAAI+6J,EACAw9H,EAAK5mH,MAAMz1F,KACX,0BAEJ,GAAIu+O,EACJpxS,KAAM,QAAQkvQ,EAAK8X,IAAI+qQ,kBAAkB,GACzClwY,QAASzzE,EAAMyzE,QACf6mY,cAAc,MACjB,EAEO,GAlBK,GAAGx5Q,EAAK5mH,MAAM,GAAG9qK,GAkBtB,CAExB,EACD,IACH4gN,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,UACdt+C,SAAAuqd,EAAMhvjB,KAAKugR,EAAM1xR,KACd,IAAM4wF,EAAQmid,GACVC,EACAQ,GAAa51iB,IAAI8zR,EAAK8X,GAAG,GAG7B,OACI5oF,SAAC,OAAD,CAEIrhN,EAAG+5J,EAAY/5J,EAAImyR,EAAK5mH,MAAM+S,OAAOt+K,CAAC,EACtCmwD,EAAG4pG,EAAY5pG,EAAIgiO,EAAK5mH,MAAM+S,OAAOnuH,CAAC,EAItC6jP,GAAItwI,GAAY1jB,GAAc2jB,MAAM,EACpC0a,SAAU8zG,EAAK5mH,MAAM8S,SACrBD,WAAY/sF,EAAM+sF,WAClB/sF,MAAO,CAAEpuE,KAAMouE,EAAM63H,MAAO,GAAG73H,CAAM,EAEpCglB,SAAA87K,EAAK5mH,MAAMz1F,IACV,EAZG,GAAGq8M,EAAK5mH,MAAM,GAAG9qK,GAYpB,CAEd,EACD,GACF6ziB,IACGjzV,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,aACdt+C,SAAAuqd,EAAMhvjB,KAAKugR,EAAM1xR,KA0BV4gN,SAAC,IAAD,CAEImoV,eA1BJ/ohB,IAEIA,EAAM+pE,cAAgB,SACtBq1a,IAAe1tO,EAAK8X,GAAG,CAC/B,EAuBQ42R,cArBJpgjB,IAEIA,EAAM+pE,cAAgB,SACtB41a,IAAcjuO,EAAK8X,GAAG,CAC9B,EAkBQo/P,eAhBJ5ohB,IAEIA,EAAM+pE,cAAgB,SAAS2vH,KACvC,EAcQwmL,YAbWlgX,IACXA,EAAM+pE,cAAgB,UACtBq1a,IAAe1tO,EAAK8X,GAAG,EACvBm2N,IAAcjuO,EAAK8X,GAAG,EAE9B,EAUQ5zL,UAAAgrG,SAAC,OAAD,CACIrhN,EAAG+5J,EAAY/5J,EAAImyR,EAAKnyR,CAAC,EACzBmwD,EAAG4pG,EACC5pG,EAAIgiO,EAAKhiO,EAAIqwgB,EAAc,GAE/B/mgB,OAAQsgG,EACJo4H,EAAKmuS,SAAWE,GAEpBxif,MAAO+7E,EACHo4H,EAAKn0M,OACD8if,EAER79iB,KAAK,OACL6hJ,QAAS,CACZ,EACF,EArBM,GAAGqtH,EAAK5mH,MAAM,GAAG9qK,GAqBvB,CAEX,CACD,EAER,C,EAEX,C,s1GC3JasgkB,GAAb,KAAaA,C,gCAeR/sc,E,EAAqB4kW,c,GAIrB5kW,E,EAAqBuM,O,GAIrBvM,E,EAAqBohb,a,GAIrBphb,E,EAAqBgtc,W,GAwDrBhtc,E,EAAa4sc,O,GAyBb5sc,E,EAAav6D,Q,KA3Gdi1Q,KACAhvU,QAEA8gkB,uBAAuB,GACvBS,YAA+B,EAE/B,YACIvyP,EACAhvU,EACF,CACE,KAAKgvU,KAAOA,EACZ,KAAKhvU,QAAUA,CACnB,CAEA,IAAsBk5d,cAAuB,CACzC,OAAO,KAAKl5d,QAAQk5d,gBACxB,CAEA,IAAsBr4V,OAAyB,CAC3C,OAAO,KAAK7gI,QAAQ6gI,OAASuf,GAAgBhmB,MACjD,CAEA,IAAsBs7a,aAAgC,CAClD,OAAO,KAAK1mO,KAAKtlR,OAAQ6gP,GAAQ,CAACA,EAAI9uD,QAAQ,CAClD,CAEA,IAAsB6lV,WAAwB,CAC1C,IAAM3iZ,EAAWq6S,GAAc,KAAM,KAAKE,YAAY,EAChD0nG,EAAW,KAAK1nG,aAAe,IAE/Br5c,EAAoB,GACtBqhjB,EAA2B,GAC3BlrB,EAAU,EACVn3M,EAAU,EA8Cd,OA7CA,KAAK62M,YAAY1iiB,QAASu3R,IACtB,IAAMqlP,EAAc5xW,EAAOo6J,QAAQ7tC,EAAIn0N,KAAM,CAAEuoG,UAAS,GAClD6iZ,EACFZ,EACA,KAAKE,YACLlxC,EAAYtxc,MACZ,KAAKijf,YAELvrB,EAAUwrB,EAAY,KAAKxhkB,QAAQs+E,OAAS4if,EAAMlgkB,OAAS,IAC3D6e,EAAM7d,KAAK,CACP+7K,WAAYi4X,EAAU,KAAKurB,YACpBL,OACX,GACAA,EAAQ,GACRlrB,EAAU,EACVn3M,GAAW+hO,EAAW,KAAKE,aAG/B,IAAMW,EAAQzrB,EACR0rB,EAAQ7iO,EAERhzL,EAAQ,CACVz1F,KAAMm0N,EAAIn0N,KACVwoG,OAAQgxW,EAAYlxhB,IAAI,CACpB4B,EAAGmhkB,EAAQb,EAAW,KAAKE,YAC3BrwgB,EAAGixgB,EAAQd,EAAW,CAC1B,GACAjiZ,UACJ,EAEAuiZ,EAAMl/jB,KAAK,CACP1B,EAAGmhkB,EACHhxgB,EAAGixgB,EACHpjf,MAAOkjf,EACPZ,WACA/0Z,QACA0+H,KACJ,GAEAyrQ,GAAWwrB,GACf,GAEIN,EAAMlgkB,OAAS,GACf6e,EAAM7d,KAAK,CAAE+7K,WAAYi4X,EAAU,KAAKurB,YAAoBL,OAAM,GAE/DrhjB,CACX,CAEA,IAAcqhjB,OAA2B,CACrC,GAAM,CAAEI,UAAWzhjB,EAAOghH,SAAU,KAC9B,CAAEviD,SAAU,KAAKt+E,QAGvB,OAAO6f,EAAMopJ,QAASjpJ,IAClB,IAAM6ngB,EACFhnZ,IAAUuf,GAAgBhmB,QACnB97C,EAAQt+D,EAAK+9J,YAAc,EAC5Bl9C,IAAUuf,GAAgBjmB,MACxB77C,EAAQt+D,EAAK+9J,WACb,EACZ,OAAO/9J,EAAKkhjB,MAAMhvjB,IAAKugR,IAAU,CAC7B,GAAGA,EACHnyR,EAAGmyR,EAAKnyR,EAAIunhB,EACZh8W,MAAO,CACH,GAAG4mH,EAAK5mH,MACR+S,OAAQ6zG,EAAK5mH,MAAM+S,OAAOlgL,IAAI,CAC1B4B,EAAGmyR,EAAK5mH,MAAM+S,OAAOt+K,EAAIunhB,CAC7B,EACJ,CACJ,GACJ,EACJ,CAEA,IAAc9td,QAAiB,CAC3B,OAAO/oB,GAAM,KAAKkwhB,MAAMhvjB,IAAKugR,GAASA,EAAKhiO,EAAIgiO,EAAKmuS,QAAQ,IAAM,CACtE,CACJ,ECvHA,SAAgBe,IAAY,CACxBjsG,SACAgrC,cACAjmT,gBAAA,CASA,OACIkH,SAAA+4H,WAAA,CAAA/jO,SACK++W,EAAOxjd,KAAKwjd,EAAQ30d,KACjB4gN,SAAC,IAAD,CAEIznN,GAAI+6J,EAAYygU,EAAOC,UAAU,EACjCnzc,UAAWqyI,GAAe6gU,EAAOC,UAAU,EAAI,YAE9Ch/W,SAAA++W,EAAO2hD,aAAanlgB,KAAK6vgB,EAAKhhhB,KAC3B,GAAIghhB,EAAIjlD,QAAS,OAAO,KAMxB,IAAM4gG,EAAasB,GAJDj9C,EAAI/3e,OAAS0rb,EAAO8nC,UAEhC+X,EAAS2f,YACRx/D,EAAOt+H,UAAYm+K,EAASyf,QACW,CAAC5vX,QAE/C,OACIu8C,SAAC,OAAD,CAEIznN,GAAI+6J,EAAY8sX,EAAIjxC,aAAa,EACjCxwe,EAAG+5J,EAAY0nX,EAAIzhhB,CAAC,EACpBmwD,EAAG4pG,EAAY0nX,EAAItxd,CAAC,EACpB6tB,MAAO+7E,EAAY0nX,EAAI1tC,QAAQ,EAC/Bt6a,OAAQsgG,EAAY0nX,EAAIC,SAAS,EACjCz+f,KAAMw+f,EAAIv4T,OAASksQ,EAAOlsQ,MAC1BpkD,QAASs4Z,EACTh9D,gBAAmBA,IAAcqhB,EAAKrsD,GACtCj7Q,iBAAoBA,KACvB,EAVQ15M,EAYjB,EACD,EA5BMA,GA8Bf,EAEV,C,80GCMYy8M,cAAMpoG,UAANooG,I,KADL,cACKA,I,wCAFX5zH,C,IA4BI0qC,E,EAAagjZ,Y,GAIbhjZ,E,EAAqBpiC,S,GAIrBoiC,E,EAAqBsqD,Q,GAIrBtqD,E,EAAqB04Y,U,GAIrB14Y,E,EAAaqqD,U,GAIbrqD,E,EAAaqrN,2B,GAIbrrN,E,EAAqBqjZ,a,GAYrBrjZ,E,EAAqB8iZ,U,GAUrB9iZ,E,EAAa4yY,O,GAIb5yY,E,EAAa6zY,O,GAIb7zY,E,EAAqBinb,oB,GAIrBjnb,E,EAAqBmlZ,a,GAMrBnlZ,E,EAAqBknb,kB,GAIrBlnb,E,EAAqBm8Z,a,GAMrBn8Z,E,EACGqqZ,kB,GAIHrqZ,E,EAAqBstc,sB,GAIrBttc,E,EAAqButc,a,GAIrBvtc,E,EAAqBwtc,uB,GAQrBxtc,E,EAAqBytc,qB,GAOrBztc,E,EAAqB0tc,0B,GAarB1tc,E,EAAqB2tc,kC,GAUrB3tc,E,EAAqBiiW,oB,GAOrBjiW,E,EAAqBkiW,mB,GAerBliW,E,EAAqB4tc,c,GA2BrB5tc,E,EAAqB6tc,2B,GAOrB7tc,E,EAAqB2pb,uB,GAcrB3pb,E,EAAqB8tc,gB,GAMrB9tc,E,EAAqB+tc,iB,GAIrB/tc,E,EAAqBguc,iB,GAIrBhuc,E,EAAqB+ob,Y,GAIrB/ob,E,EAAqBorb,c,GAarBprb,E,EAAqBiuc,0B,GAOrBjuc,E,EACWkuc,4B,GAWXluc,E,EAAamnb,gB,GAsBbnnb,E,EAAqBknU,S,IAgGrBhjV,IAAOo6D,K,KAAM6vZ,mB,IAKbjqd,IAAOo6D,K,KAAM8vZ,oB,IAIblqd,IAAOo6D,K,KAAM+vZ,gB,IAQbnqd,IAAOo6D,K,KAAcwlC,a,IAOrB5/F,IAAOo6D,K,KAAMgwZ,iB,GA2Gbtuc,E,EAAqBuuc,iB,GAIrBvuc,E,EAAqBi8a,S,GAKrBj8a,E,EAAqBm9a,S,GAMrBn9a,E,EAAaohW,Q,GAIbphW,E,EACW0jZ,c,GAIX1jZ,E,EACW+5a,c,CAjiBJ7wV,gB,CAOR,YAAY/3M,EAA6B,CACrC,MAAMA,GAENyxL,EAAe,KAAM,CACjB4rY,iBAAkB/9Y,EAClBquX,aAAcruX,CAClB,EACJ,CAXAg+Y,yBAAyB,GAEzBlpI,UAA6Bz/R,KAY7B0oa,iBAAsC99a,OAEtCouZ,aAAe,IAAIt1E,GAKnBklG,kBAAoB/D,GAEpB,IAAc3nD,YAAmC,CAC7C,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAAsBplb,SAAwB,CAC1C,OAAO,KAAKolb,WAAWplb,OAC3B,CAEA,IAAsB0sF,QAAiB,CACnC,OAAO,KAAKn5K,MAAMm5K,QAAUkjR,EAChC,CAEA,IAAsBkrE,UAAoB,CACtC,OAAO,KAAK96a,QAAQ86a,UAAY,EACpC,CAEA,IAAcruV,UAAmB,CAC7B,OAAO,KAAKzsF,QAAQysF,YACxB,CAEA,IAAcghK,2BAAsC,CAChD,OAAO,KAAKztP,QAAQytP,2BAA6B,EACrD,CAEA,IAAsBg4L,aAAsB,CACxC,OACI,KAAK/4V,OACAyvW,OAAO,KAAK0zC,mBAAmB,EAC/BhkB,SAAS,KAAK+jB,qBAAqB,EAEnCzzC,OAAO,GAEP2vB,UAAU,EAEvB,CAEA,IAAsB5mC,UAAqB,CACvC,GAAM,CAAEmkC,qBAAoBC,oBAAqB,KACjD,OAAO,IAAIxtB,GAAS,CAChBpvW,OAAQ,KAAK+4V,YACbJ,eAAgBgkC,EAChB/jC,aAAcgkC,EACdrtB,gBAAiB,KAAKj8b,QAAQi8b,eAClC,EACJ,CAEA,IAAcjnB,OAAsB,CAChC,OAAO,KAAKkQ,SAASI,YACzB,CAEA,IAAcrP,OAAwB,CAClC,OAAO,KAAKiP,SAASG,cACzB,CAEA,IAAsBgkC,oBAAqC,CACvD,OAAO,KAAKjkC,WAAWqD,iBAAiB,KAAK8V,WAAW,CAC5D,CAEA,IAAsBhX,aAA0B,CAC5C,GAAM,CAAEA,eAAgB,KAAKvnb,QAE7B,OAAO,IAAIy8b,GAAW,CADLzkN,KAAM,GACY,GAAGuvM,CAAY,EAAG,IAAI,CAC7D,CAEA,IAAsB+hC,kBAAiC,CACnD,OAAO,KAAKlkC,WAAWwD,eAAe,KAAKrB,WAAW,CAC1D,CAEA,IAAsBgX,aAA0B,CAC5C,GAAM,CAAEA,eAAgB,KAAKv+b,QAE7B,OAAO,IAAIy8b,GAAW,CAAE,GADPzN,IAAoC,KAAK5J,UAC/B28B,EAAU,GAAGxjB,CAAY,EAAG,IAAI,CAC/D,CAEA,IACI9R,kBAAoD,CACpD,OAAO,KAAKjpD,OAAOzsT,QAASysT,GAAWA,EAAOl7T,MAAM,CACxD,CAEA,IAAsBona,sBAAgC,CAClD,MAAO,CAAC,EAAE,KAAK1ve,QAAQm6Z,cAAgB,KAAKn6Z,QAAQo5Z,iBACxD,CAEA,IAAsBu2E,aAA+B,CACjD,OAAOzhb,GAAgBrmB,IAC3B,CAEA,IAAsB+nc,uBAAgC,CAClD,OAAO,KAAKF,qBACN,EACA,KAAKliB,aAAe,EAClB,KAAKA,aAAe,GACpB,CACZ,CAEA,IAAsBqiB,qBAA8B,CAChD,OAAO,KAAKH,qBACN,KAAKY,2BAA2BzogB,OAAS,EACzC,CACV,CAGA,IAAsBiogB,0BAAyC,CAC3D,GAAM,CAAEc,oBAAqB,KAI7B,OAFKA,EAEE9xhB,GACH,KAAK0kb,OACAhsa,OAAQ4G,GAAMA,EAAEk5J,QAAUs5W,GAC1B5wjB,IAAKo+C,GAAMA,EAAEqla,UAAU,GALF,EAOlC,CAGA,IAAsBssG,kCAAiD,CACnE,GAAM,CAAEhmB,0BAA2B,KAAK/pd,QAIxC,OAFK+pd,EAEE,KAAK3kC,WAAW0E,UAClB9pgB,IAAKo+C,GAAMA,EAAEqla,UAAU,EACvBjsa,OAAQ3uD,GAASkhjB,EAAuBp5W,SAAS9nM,IAJlB,EAKxC,CAEA,IAAsBw7d,oBAAmC,CACrD,OAAOvlb,GAAO,CACP,QAAKgxhB,yBACL,QAAKC,gCACX,EACL,CAEA,IAAsBzrG,mBAA6B,CAC/C,OACI,KAAKD,mBAAmBv1d,OAAS,GACjC,CAAC,CAAC,KAAKkxF,QAAQ+pd,sBAEvB,CAEAwB,oBAA4B/nF,EAA+C,CACvE,OAAOY,GAAuBZ,EAAQ,CAClCa,mBAAoB,KAAKA,mBACzBC,kBAAmB,KAAKA,iBAC5B,EACJ,CAGA,IAAsB0rG,cAAyB,CAC3C,IAAMe,EAAwB,IAAIlwjB,IAAI,KAAKwjd,kBAAkB,EACvD2sG,EAAgB,KAAKxtG,OACtBhsa,OAAQ4G,GAAM2ygB,EAAsBrkkB,IAAI0xD,EAAEqla,UAAU,GACpDzjd,IAAKo+C,GAAMA,EAAEk5J,KAAK,EAUvB,OAJqBx4K,GACjBynH,GAAiB,CAAI0qa,GALH,KAAKztG,OACtBhsa,OAAQ4G,GAAMA,EAAE2tF,OAAO+mK,QACvB9yS,IAAKo+C,GAAMA,EAAEk5J,KAGO25W,EAAkBD,IAAc,EAGlDhB,CACX,CAEAkB,yBACI74R,IAEA,IAAMohI,EAAW,KAAKu2J,cAAc9tc,SAASm2K,EAAI/gF,KAAK,EAItD,OAFI,KAAK04W,aAAalhkB,SAAW,EAAUu0gB,EAASyf,QAE7CrpH,EAAW4pG,EAAS2f,YAAc3f,EAAS4f,KACtD,EAEA,IAAsBgtC,2BAAyC,CAC3D,OAAOtuB,GACH,KAAKoK,sBACL,KAAKmlB,wBACT,CACJ,CAEA,IAAsBnlB,uBAA0C,CAC5D,OAAO,KAAKvoF,OACPxjd,KACIwjd,EAAQ30d,IACL,IAAI80U,GAAe,CACf90U,QACAxH,MAAOm8d,EAAOC,WACd9pT,MAAO6pT,EAAOC,WACdnsQ,MAAOksQ,EAAOlsQ,KAClB,IAEPurH,WAAA,CACT,CAEA,IAAsBqtP,gBAAyB,CAC3C,OAAO,KAAKR,qBACN,KAAKhjZ,OAAOtgG,MACZ,KAAK+jf,eACf,CAEA,IAAsBA,iBAA0B,CAC5C,OAAO,KAAKzjZ,OAAOtgG,MAAQ,CAC/B,CAEA,IAAsBgkf,iBAA0B,CAC5C,MAAO,IACX,CAEA,IAAsBjlB,YAAsB,CACxC,MAAO,CAAC,CAAC,KAAKnrd,QAAQmrd,UAC1B,CAEA,IAAsBqC,cAAuB,CACzC,GAAI,CAAC,KAAKrC,WAAY,MAAO,GAC7B,GAAM,CACFilB,kBACAD,kBACAE,yBAA0Bc,GAC1B,KACJ,OAAOzta,KAAKh1J,IACRg1J,KAAK/0J,IAAIwikB,EAAiB/kf,MAAO+jf,GACjCC,EAER,CAEA,IAAsBC,0BAAqD,CACvE,OAAO,IAAI5B,IAAyB,KAAK1iB,sBAAuB,CAC5D/kF,aAAc,KAAKv6S,SACnB06J,SAAU,KAAK+oP,cACnB,EACJ,CAEA,IACYI,4BAAoE,CAC5E,OAAO,IAAInB,GACP,KAAKpjB,sBACL,CACI/kF,aAAc,KAAKv6S,SACnBrgG,MAAO,KAAKsgG,OAAOtgG,MACnBuiD,MAAO,KAAKghc,WAChB,EAER,CAEA,IAAcpmB,gBAAsD,CAChE,GAAI,CAAC,KAAK4B,WAaN,MAAO,CACHY,sBAb0B,KAAK3mC,WAAWuH,gBACzC3sgB,KACIwjd,EAAQ30d,IACL,IAAI80U,GAAe,CACf90U,QACAxH,MAAOm8d,EAAOC,WACd9pT,MAAO6pT,EAAOC,WACdnsQ,MAAOksQ,EAAOlsQ,KAClB,IAEPurH,WAGDkpO,EACAT,6BAA8B,KAAKwlB,iBACvC,CAGR,CAEA,IAAsBxnI,SAA0C,CAC5D,GAAM,CACF43G,aAAc,CAAEnwiB,SAAQikF,WAAUysd,UAClCj+E,UACA,KACE,CAAEmjD,gBAAiB,KAAKvB,WAExB,CAAEyK,IAAKuhD,EAAU5tG,OAAQ6tG,GAAgBtgkB,GAAU,CAAC,EACtDu6f,EACJ,GAAI8lE,IAAat+a,OACbw4W,EAAY8lE,EAASp8e,cAClB,OAEP,IAAMkiE,EAAQyvX,EAAa/oE,WAAW0tD,GAChC5+B,EAAkB,KAAKupC,MAAMt8V,MAAQ,IAAI,KAAKs8V,MAAMt8V,MAAM,GAAK,GAE/D,CAAEwhS,eAAgBwrE,EAElBgK,EAAa7xe,GACf0kb,EAAOxjd,KACF,CAAEsoJ,YACCA,EAAOxD,KAAM+qX,GAAQA,EAAI76b,WAAas2a,IAAYjkgB,OAAS,IAYjE0vW,EAASxwM,GAAiB,CARTogX,EAAazrE,2BAC9B,CACIpkL,KAAM8wM,GAAkBwF,KACxBlpZ,KAAM6mZ,GAA0B,CAC5B47C,EAAaxoW,qBAChB,EACL,EACArrB,MAC0C,GAY1C,CAACw+a,EAAgBC,GAAkBzyhB,GAVrB0kb,EAAOxjd,IAAKwjd,IAC5B,IAAMzhU,EAAQyhU,EAAOl7T,OAAOxD,KACvB+qX,GAAQA,EAAI76b,WAAas2a,GAE9B,MAAO,CACH7nC,WAAYD,EAAOC,WACnB6kD,YAAa9kD,EAAOlsQ,MACpBv1D,OACJ,CACJ,CAEIyva,GACC,CAAEzva,YAAaA,GAAO16J,OAAS,IAAM,GAEpCoqkB,EAAoB,CACnBH,KAAezuP,WAAA,EACf0uP,IACP,EAEA,OACI9hX,SAACi6O,GAAD,CACI1hc,GAAI,KAAK2/b,UACT2lC,eAAgB,KAAKttY,QACrB5xF,EAAG4mF,EAAS5mF,EACZmwD,EAAGy2B,EAASz2B,EACZkhC,MAAO,CAAE0nP,SAAU,OAAQ,EAC3BxyI,QAAS,GACTD,QAAS,IACFx9C,QACUw1U,kBACjBj1U,SAAU0jT,EACVwxB,eAAe,OACP51H,SACR61H,SAAU60E,EACVtmD,YAAgB,KAAK+lD,aAAanwiB,OAAS,KAE3C0zG,UAAAgrG,SAACi6Q,GAAD,CACIv+T,QAAS+/T,GAAsBy7C,GAC/BrpD,OAAQ,CAACqzD,CAAU,EACnBzlX,KAAMuma,EAAkBzxjB,KACnB,CAAE+hJ,QAAO0hU,WAAY56d,EAAMy/gB,iBAAA,CACxB,IAAMz+C,EAAUwnG,GAAa5tG,aAAe56d,EACtC6okB,EAAO3va,GAAO6oU,SAAW7oU,GAAOyrX,aAChCljD,EAAUonG,GAAQ,GAClB57iB,EAAS,CAAC47iB,EAAO5+a,OAAYiP,GAAO16J,KAAK,EAS/C,MAAO,CAAEwB,OAAMkhe,QAFEzyQ,MALHv1D,GAAOu1D,OAASgxT,EAKNp1W,QADR45Z,GAHCjjG,EACXw5C,EAAS2f,YACT3f,EAASyf,QAC4B,CAAC5vX,OAG7B62T,EAAQO,UAAST,UAAS/zc,QAAO,CACpD,EAEP,EACI,EAEjB,CAEcy6iB,kBAAkBl4R,EAA0B,CACtD,KAAK+sO,WAAWqB,WAAWhlK,MAAA,EAC3B,KAAKmvN,iBAAmBv4R,EAAI/gF,KAChC,CAEck5W,oBAA2B,CACrC,KAAKI,iBAAmB99a,MAC5B,CAEc29a,eACV5gD,EACArsD,EACI,CACJ,KAAK4hD,WAAWqB,WAAWhlK,MAAA,EAC3B,KAAKy/L,aAAanwiB,OAAS,CAAE8+gB,MAAKrsD,QAAO,CAC7C,CAEsBt9Q,YAAYroI,EAA4B,CAC1D,IAAM/7C,EAAM,KAAKk+D,QAAQ9uE,MAAM5lB,QAC3Bw2B,IACA,KAAKo/gB,aAAalsd,SAAWusE,GAAiBz/H,EAAK+7C,GAE3D,CAEc6yf,iBAAwB,CAClC,KAAKxvB,aAAanwiB,OAAS,IAC/B,CAEAy7jB,cAA+C,CAC3C,GAAM,CAAErhB,aAAYukB,wBAAyB,KAE7C,GAAKvkB,EAEL,OAAOukB,GACHjgX,SAACs/W,GAAD,CACIlikB,MAAO,KAAKyjkB,2BACZlikB,EAAG,KAAKmxiB,QACRhhf,EAAG,KAAKoygB,gBACRvwN,YAAa,CAAC,KAAK06J,SACnB+mC,YAAa,KAAKivB,kBAClBzuB,YAAa,KAAK4tB,0BAClBzhE,YAAa,KAAK+hE,kBAClBhoX,aAAc,KAAKioX,kBACtB,IAED/gX,SAAC4+W,IAAD,CACIxhkB,MAAO,KAAKwjkB,yBACZjikB,EAAG,KAAKmxiB,QACRhhf,EAAG,KAAK8/e,QACRj+L,YAAa,CAAC,KAAK06J,SACnB+mC,YAAa,KAAKivB,kBAClBzuB,YAAa,KAAK4tB,0BAClBzhE,YAAa,KAAK+hE,kBAClBhoX,aAAc,KAAKioX,kBACtB,EAET,CAEA/D,YAAiC,CAC7B,GAAM,CAAEzse,WAAY,KAEpB,OACIyvH,SAACk7V,GAAD,CACIzlC,SAAU,KAAKA,SACfktB,cAAe,GACf1lM,cAAe1sQ,EAAQy6Z,kBAC1B,EAET,CAEAuxE,YAAiC,CAC7B,OACIv8W,SAACggX,IAAD,CACIjsG,OAAQ,KAAK24E,aACb3tC,YAAa,KAAKiiE,eAClBloX,aAAc,KAAKmoX,eACtB,EAET,CAEAjpB,cAAmC,CAC/B,OACIvwQ,UAAAsxC,WAAA,CAAA/jO,SAAA,CACK,KAAKgod,WAAA,GACNh9W,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,QAAUt+C,SAAA,KAAKund,WAAA,CAAgB,GACjD,KAAKQ,aAAA,CACR,GAEV,CAEA9kB,mBAAwC,CACpC,GAAM,CAAEh7X,UAAW,KAEnB,OACIwqH,UAAC,IAAD,CAAGhxF,YAAa,KAAKA,YAArBzhG,SAAA,EACIgrG,SAAC,OAAD,CACIrhN,EAAG+5J,EAAYukB,EAAO7kD,IAAI,EAC1BtpE,EAAG4pG,EAAYukB,EAAOrqB,GAAG,EACzBj2E,MAAO+7E,EAAYukB,EAAOtgG,KAAK,EAC/BvkB,OAAQsgG,EAAYukB,EAAO7kH,MAAM,EACjCqrG,QAAS,EACT7hJ,KAAK,qBACR,GACA,KAAKo7iB,WAAA,EACL,KAAKT,WAAA,EACL,KAAKQ,aAAA,EACL,KAAKljI,OACP,C,EAEX,CAEAxkP,QAAsC,CAClC,GAAM,CAAEp4B,UAAW,KAcnB,OAZI,KAAK04V,WAAWp9Z,UAAUjmE,QAEtBm1P,UAAC,IAAD,CAAAzyL,SAAA,CACK,KAAKgod,WAAA,GACNh9W,SAAC2xT,GAAD,CACIphb,QAAS,KAAKA,QACN0sF,SACR/2J,QAAS,KAAKyvf,WAAWp9Z,UAAUjmE,MACtC,EACF,IAGJ,KAAKi+C,QAAQ86a,SACd,KAAK2sC,aAAA,EACL,KAAKC,kBAAA,CACf,CAEA,IAAsBipB,iBAA0B,CAC5C,OAAO,KAAKjkZ,OAAOrqB,GACvB,CAEA,IAAsBg8Y,SAAkB,CAEpC,OAAO,KAAK3xX,OAAOrqB,IAAM,CAC7B,CAEA,IAAsBk9Y,SAAkB,CACpC,OAAO,KAAKmwB,qBACN,KAAKhjZ,OAAO7kD,KACZ,KAAK6kD,OAAOzkD,MAAQ,KAAKulb,YACnC,CAEA,IAAchqF,QAAyC,CACnD,OAAO,KAAK4hD,WAAW5hD,MAC3B,CAEA,IACYsiD,cAAwD,CAChE,OAAO8J,IAAyB,KAAKpsD,OAAQ,KAAK0hD,QAAQ,CAC9D,CAEA,IACYi3B,cAAwD,CAChE,GAAM,CAAEpriB,UAAW,KAAKmwiB,aACxB,OAAO,KAAKp7B,aAAa9lgB,IAAKwjd,IAC1B,IAAMgB,EAAQ,KAAK+mF,oBAAoB/nF,GACjCt+H,EAAWu+K,GAAgB,CAAEj/C,QAAOz4U,MAAOy3U,EAAOz3U,KAAM,GAE9D,MAAO,CACH,GAAGy3U,EACHt+H,WACAs/H,QACA8mC,UACIv6f,GAAQyyd,OAAOC,aAAeD,EAAOC,WAC/B1yd,EAAO8+gB,IAAI/3e,KACXg7G,MACd,CACJ,EACJ,CAEA20U,mBAAmC,CAC/BllU,GAAuB,IAAI,CAC/B,C,aACJ,GCnmBA,IAAMova,IAAoB,EAE1B,SAAgBC,IAAsB,CAClCjkZ,MACApvH,IAAI,EACJuxd,YACAqH,gBACAniB,QACA68D,sBACAC,sBACAC,qBACAC,qBACAC,kBAAA,CAaA,GAAM,CAAExhI,aAAY92R,QAAOmwJ,WAAU6mN,aAAYzrL,YAAav3K,EAExDukZ,EAAaJ,EAAoBnhD,GACjCwhD,EAAqBroQ,EAASh7T,OAAS,EAEvCq+hB,EAAa7c,IAAYprL,GAIzBjnH,EACFn/L,GAAMgrR,EAAS9pT,IAAKoyjB,GAAQA,EAAIrwa,MAAMwrX,YAAc6kD,EAAIrwa,MAAM16J,KAAK,IACnE,EAEJ,OACI6vS,UAAC,IAAD,CACIlvS,GAAI+6J,EAAY0tS,GAChB7iV,UAAW,gBAAgBu6C,EAAY5pG,GAAG,GAC1C20G,QAAS,EAHbzuD,SAAA,CAKKqlN,EAAS9pT,IAAK6X,IACX43L,SAACq+O,IAAD,CAEaj2a,UACG44a,aACDq/E,YACXn2W,MAAOm4Z,EAAoBj6iB,EAAQkqI,MAAM16J,KAAK,EAC/B8vhB,gBACKg7C,qBACpBlkE,aAAc8jE,EACdxpX,aAAcypX,CACjB,EATQn6iB,EAAQ4rc,UAShB,IAELh0Q,SAAC+oV,GAAD,CACI3riB,MAAO8sK,EACPvrK,EAAG4mgB,EAAM6f,MAAM,GAAK88C,IACpBpzgB,EAAG,CAACo7G,EAAM9xG,OAAS,EACnBomc,iBAA0B8jE,EAAmBp4Z,EAAMz1F,IAAI,EACvDqkI,aAAcypX,EACdt5B,kBAAmBu5B,EACnB/+Z,QAASi6X,EAAWj6X,OACvB,GACA2+Z,IACGpiX,SAAC,OAAD,CACI7hG,UAAW,aAAau6C,EACpB6sW,EAAM6f,MAAM52S,GAAa0zV,KAC3B,MACFvvR,GAAItwI,GAAY1jB,GAAc2jB,MAAM,EACpCmB,QAASi6X,EAAWj6X,QACpB7hJ,KAAK,OACLo7J,SAAU0qW,EAET1ya,SAAAytd,CACC,EAEX,C,EAEX,CAEA,SAASpkI,IAAmB,CACxBj2a,UACA44a,aACAq/E,YACAn2W,QACAw9W,gBACAg7C,qBACAlkE,eACA1lT,gBAAA,CAWA,IAAMm1U,EAAc5xW,EAAOo6J,QAAQvsK,EAAO,CAAE8S,SAAU0qW,CAAc,GAC9Dk7C,EACFF,GACAz0C,EAAYtxc,MAAQ,IAAOv0D,EAAQsqd,UACnCu7C,EAAY71d,OAAS,IAAOiod,EAC1B8S,EAAa3+O,GAAYpsR,EAAQy/L,KAAK,EAAI,OAAS,OACnDu0W,EAAev7C,IAAYz4f,EAAQqtU,SAAS,CAAChyL,QAC7C23Q,EAAeiiJ,GAAkBj1iB,EAAQqtU,UAE/C,OACIhuD,UAAC,IAAD,CACIlvS,GAAI+6J,EAAYlrI,EAAQ4rc,UAAU,EAClCwqC,iBACIA,EAAax9D,EAAY54a,EAAQ4rc,UAAU,EAEjCl7Q,eALlB9jG,SAAA,EAOIgrG,SAAC,OAAD,CACIznN,GAAI+6J,EAAY,OAChB30J,EAAG,EACHmwD,EAAG,EACHqvD,UAAW,aAAau6C,EAAYtwI,EAAQzpB,CAAC,EAAE,IAAI+5J,EAC/C,CAAC2nX,EAAY,GACf,GACF1jc,MAAO+7E,EAAYtwI,EAAQsqd,QAAQ,EACnCt6a,OAAQsgG,EAAY2nX,GACpBz+f,KAAMwG,EAAQy/L,MACdpkD,QAAS23Q,EAAa33Q,QACtBzzE,MAAO,CAAEimB,WAAY,mBAAoB,CAC5C,GACA2sd,IACG5iX,SAAC,OAAD,CACIrhN,EAAG+5J,EAAYtwI,EAAQzpB,EAAIypB,EAAQsqd,SAAW,GAC9C5jb,EAAG,EACH6tB,MAAO+7E,EAAYtwI,EAAQsqd,QAAQ,EACnCt6a,OAAQsgG,EAAY2nX,GACpBz+f,KAAMuxgB,EACN1vX,QAAS24Z,EACTp/Y,SAAU0qW,EACVrqL,WAAW,SACX1qD,GAAItwI,GAAY1jB,GAAc2jB,MAAM,EAEnCttD,SAAAk1D,CACC,EAEX,C,EAEX,C,80GCpFY2xC,eATNw/T,IAAqB,IASfx/T,KAAMpoG,U,QADX,cACKooG,G,uCAFX5zH,C,IA2BI0qC,E,EAAagjZ,Y,GAIbhjZ,E,EAAqBpiC,S,GAIrBoiC,E,EAAqBsqD,Q,GAOrBtqD,E,EAAqB4kW,c,GAIrB5kW,E,EAAqB04Y,U,GAIrB14Y,E,EAAqB+ob,Y,GAQrB/ob,E,EAAqBkwc,qB,GAQrBlwc,E,EAAqBmwc,kB,GAIrBnwc,E,EAAqBowc,a,GAIrBpwc,E,EAAaqqD,U,GAIbrqD,E,EAAqB8/M,Y,GAWrB9/M,E,EAAqB2pb,uB,GASrB3pb,E,EAAaqwc,0B,GAsDbrwc,E,EAAqB6tc,2B,GASrB7tc,E,EAAamnb,gB,IAUbjjc,IAAOo6D,K,KAAM6vZ,mB,IASbjqd,IAAOo6D,K,KAAM8vZ,oB,GAIbpuc,E,EAAqBswc,a,IAWrBpsd,IAAOo6D,K,KAAcwlC,a,GAOrB9jF,E,EAAqBohW,Q,GAIrBphW,E,EAAqB8nc,U,GAIrB9nc,E,EAAqB6na,0B,GAIrB7na,E,EAAqB+0Z,e,GASrB/0Z,E,EAAqB+qa,Y,GAIrB/qa,E,EAAqBuwc,sB,GAIrBvwc,E,EAAqBwwc,W,GAWrBxwc,E,EAAqByrX,Y,GAIrBzrX,E,EAAqByvc,qB,GAIrBzvc,E,EAAqBywc,oB,GAKrBzwc,E,EAAqB0wc,sB,GAUrB1wc,E,EAAqB82L,I,GAIrB92L,E,EAAqBs8Z,W,GAIrBt8Z,E,EAAqB08Z,gB,GAOrB18Z,E,EAAqBuoZ,Q,GAOrBvoZ,E,EAAqBmlZ,a,GAIrBnlZ,E,EAAa4yY,O,GAWb5yY,E,EAAqBqjZ,a,GAQrBrjZ,E,EAAqBooc,c,GAIrBpoc,E,EAAqBqoc,Y,GAIrBroc,E,EAAqB0tZ,W,GAKrB1tZ,E,EAAqBkiW,mB,GAQrBliW,E,EAAqB2wc,Y,GAmBrB3wc,E,EAAqB4wc,Y,GAuDrB5wc,E,EAAqBukZ,c,GAIrB1tgB,G,EAAa64jB,qB,GAUb1vc,E,EAAqB+1W,Y,GAIrB/1W,E,EAAqB2hW,U,IAIrBz9W,IAAOo6D,K,KAAcuyZ,c,IAIrB3sd,IAAOo6D,K,KAAcqxZ,oB,IAQrBzrd,IAAOo6D,K,KAAcsxZ,oB,GAIrB5vc,E,EAAqBknU,S,CAzbdh+O,e,CAaR,YAAY/3M,EAAqC,CAC7C,MAAMA,GAENyxL,EAGE,KAAM,CACJkuY,sBAAuBrgZ,EACvBquX,aAAcruX,CAClB,EACJ,CApBA3hK,gBAAwBo6L,EAAMk8Q,UAAA,GAE9B0rG,sBAAwDpgb,OAExD60S,UAA6Bz/R,KAC7Bg5Y,aAAgC,IAAIt1E,GAiBpC,IAAcw5C,YAA2C,CACrD,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAAsBplb,SAA0C,CAC5D,OAAO,KAAKolb,WAAWplb,OAC3B,CAEA,IAAsB0sF,QAAiB,CAEnC,OAAQ,KAAKn5K,MAAMm5K,QAAUkjR,IACxBi8G,SAAS,IACTC,UAAU,EACnB,CAEA,IAAsB9kF,cAAuB,CACzC,OAAO,KAAKhnY,QAAQysF,YACxB,CAEA,IAAsBquV,UAAoB,CACtC,OAAO,KAAK96a,QAAQ86a,UAAY,EACpC,CAEA,IAAsBqwC,YAAsB,CACxC,MACI,CAAC,KAAK53iB,MAAM4/jB,YACZ,KAAKjxP,WAAWpzU,OAAS,GACzB,CAAC,CAAC,KAAKkxF,QAAQmrd,UAEvB,CAEA,IAAsBmnB,qBAA8B,CAChD,OAAO,KAAK5lZ,OAAOyvW,OACf,KAAKgvB,YAAc,KAAKunB,YAAY7qgB,OAAS,EACvC,KAAK6qgB,YAAY7qgB,OAAS,KAAK0qgB,iBAC/B,EAEd,CAEA,IAAsBA,kBAA2B,CAC7C,MAAO,IAAM,KAAKvrG,YACtB,CAEA,IAAsBwrG,aAAsB,CACxC,OAAO,KAAK9lZ,OAAOtgG,KACvB,CAEA,IAAcqgG,UAAmB,CAC7B,OAAO,KAAKu6S,YAChB,CAEA,IAAsB9kJ,YAA+B,CACjD,OAAO,KAAKshJ,OAAOxjd,KAAKwjd,EAAQ30d,IACrB,IAAI80U,GAAe,CACtB90U,QACAxH,MAAOm8d,EAAOC,WACd9pT,MAAO6pT,EAAOC,WACdnsQ,MAAOksQ,EAAOlsQ,KAClB,EACJ,CACJ,CAEA,IAAsBy0V,uBAA0C,CAC5D,OAAO,KAAKZ,WAAa,KAAKjpO,WAAa,EAC/C,CAOA,IAAcuwP,0BAGZ,CACE,GAAM,CACFhsD,aACA3tC,eAAgB,CAAErhC,wBAClB,KAAK2tE,WAEH,CAACguD,EAAiBC,GAAkBzsa,GACtC6/W,EAAWL,YACV3iD,GAAehsB,EAAoBv1U,SAASuhW,IAGjD,MAAO,CAAEhhT,OAAQ2wZ,EAAiB11f,OAAQ21f,CAAe,CAC7D,CAEAnC,yBACI74R,IAEA,GAAM,CAAEouO,cAAe,KAAKrB,WAG5B,GAAI,KAAKqtD,yBAAyBhwZ,OAAO3zK,OAAS,EAC9C,OAAOu0gB,EAASyf,QAIpB,GAAI,KAAKowC,sBACL,OAAO76R,EAAI1nG,SAAS,KAAKuiY,qBAAqB,EACxC7vD,EAAS2f,YACT3f,EAAS4f,MAInB,GAAI,KAAKie,aAAanwiB,QAAQ0yd,WAC1B,OAAOprL,EAAI1nG,SAAS,KAAKuwW,aAAanwiB,OAAO0yd,UAAU,EACjD4/C,EAAS2f,YACT3f,EAAS4f,MAInB,GAAI,KAAKwvC,yBAAyB/0f,OAAO5uE,OAAS,EAAG,CACjD,IAAMwkkB,EAAgB,KAAK9vG,OAAO1+T,KAAM9lH,GACpCq5P,EAAI1nG,SAAS3xJ,EAAEykb,UAAU,IAC1BA,WACH,OAAO6vG,GAAiB7sD,EAAW/5gB,IAAI4mkB,GACjCjwD,EAAS2f,YACT3f,EAAS4f,KACnB,CAEA,OAAO5f,EAASyf,OACpB,EAEA,IAAsBmtC,2BAAyC,CAC3D,OAAOtuB,GACH,KAAKoK,sBACL,KAAKmlB,wBACT,CACJ,CAEAJ,kBAAoB/D,GAEpB,IAAcxjB,gBAAsD,CAChE,GAAI,CAAC,KAAK4B,WACN,MAAO,CACHY,sBAAuB,KAAK7pO,WAC5BopO,6BAA8B,KAAKwlB,iBACvC,CAGR,CAEcP,kBAAkBl4R,EAA0B,CACtD,KAAK+sO,WAAWqB,WAAWhlK,MAAA,EAC3B,KAAKyxN,sBAAwBtsa,GACzB,KAAK48T,OACAxjd,IAAKg/B,GAAMA,EAAEykb,UAAU,EACvBjsa,OAAQ3uD,GAASwvS,EAAI1nG,SAAS9nM,IAE3C,CAEc2nkB,oBAA2B,CACrC,KAAK0C,sBAAwBpgb,MACjC,CAEA,IAAsB4/a,aAAqD,CACvE,OAAO,IAAIvD,GACP,KAAKpjB,sBACL,CACI/kF,aAAc,KAAKv6S,SACnBrgG,MAAO,KAAKomf,YACZ7jc,MAAOuf,GAAgBrmB,IAC3B,EAER,CAEsBq+E,YAAYroI,EAA4B,CAC1D,IAAM/7C,EAAM,KAAKk+D,QAAQ9uE,MAAM5lB,QAC3Bw2B,IACA,KAAKo/gB,aAAalsd,SAAWusE,GAAiBz/H,EAAK+7C,GAE3D,CAEA,IAAsB2lZ,QAA+C,CACjE,OAAO,KAAK4hD,WAAW5hD,MAC3B,CAEA,IAAsB0mG,UAAmB,CACrC,OAAO,KAAK9kD,WAAWl6W,KAAKp8J,MAChC,CAEA,IAAsBm7hB,0BAAmC,CACrD,OAAO,KAAKqoC,oBAAoBzqgB,OAAS,KAAKqigB,QAClD,CAEA,IAAsB/yC,eAAwB,CAC1C,OAAOtwD,GACHnjU,KAAK/0J,IACDm4d,GAAc,GAAI,KAAKr6S,QAAQ,EAC/B,IAAM,KAAKw9W,wBACf,EAER,CAEA,IAAsBkD,YAA2B,CAC7C,MAAO,CAAE1gX,SAAU,KAAK0qW,cAAe3qW,WAAY,IAAKi6J,WAAY,CAAE,CAC1E,CAEA,IAAsBksP,sBAA8C,CAChE,MAAO,CAAElmZ,SAAU,KAAK0qW,aAAc,CAC1C,CAEA,IAAsBy7C,WAA4C,CAC9D,OAAO9oC,GAAuB,CAC1BtmE,OAAQ,KAAK4hD,WAAWz+C,WACxBsjE,yBAA0B,KAAKA,yBAC/BC,cAAe,GAAM,KAAKooC,oBAAoBlmf,MAC9C+9c,cAAe,IAAO,KAAKmoC,oBAAoBlmf,MAC/C25P,aAAc,KAAKonN,WACnBtF,kBAAmB,CAAC,KAAK7nc,QAAQ86a,QACrC,EACJ,CAEA,IAAsBjtB,YAAqB,CACvC,OAAO/uc,GAAM,KAAK8zhB,UAAU5yjB,IAAKm/B,GAAMA,EAAEw6H,MAAMvtF,KAAK,IAAM,CAC9D,CAEA,IAAsBylf,qBAA+B,CACjD,MAAO,CAAC,KAAK7xe,QAAQo0a,gBAAkB,CAAC,KAAKp0a,QAAQuze,mBACzD,CAEA,IAAsBV,oBAA8B,CAChD,MAAO,CAAC,KAAKhB,mBACjB,CAGA,IAAsBiB,sBAA+B,CACjD,GAAI,CAAC,KAAKjB,oBAAqB,MAAO,GAKtC,IAAM2B,EAAe10hB,GAHN,KAAK8zhB,UAAU5yjB,IAAKm/B,GAC/B,KAAK2yhB,oBAAoB3yhB,EAAEwxe,UAAU,CAEZtuM,EAASpjS,GAAMA,EAAEnwC,MAAM,EACpD,OAAOg9K,EAAOo6J,QAAQstP,EAAc,KAAKb,oBAAoB,EAAEvmf,KACnE,CAEA,IAAsB8sO,IAAa,CAC/B,MAAO,EACX,CAEA,IAAsBwlO,WAAwC,CAC1D,OAAO,KAAKl7D,OAAOzsT,QAASysT,GAAWA,EAAOl7T,MAAM,CACxD,CAEA,IAAsBw2X,gBAAmC,CACrD,IAAM20C,EAAY,KAAK/0C,UAAU1+gB,IAC5B+hJ,GAAUA,EAAM16J,MAAQ06J,EAAMwrX,WACnC,EACA,MAAO,CAAC,KAAKr0N,GAAIx1J,KAAKh1J,IAAI,KAAKwqT,GAAIp6Q,GAAM20hB,GAAqB,CAClE,CAEA,IAAsB9oD,QAA2B,CAC7C,MAAO,CACH,KAAK2nD,oBAAoBzqc,KAAO,KAAKgmX,WACrC,KAAKykF,oBAAoBrqc,MAAQ,KAAK6qc,oBAC1C,CACJ,CAEA,IAAsBvrD,aAA0B,CAC5C,OAAO,IAAIkV,GAAW,KAAKz8b,QAAQunb,YAAa,IAAI,CACxD,CAEA,IAAcvS,OAAwB,CAClC,IAAMxiU,EAAO,KAAK+0U,YAAYkB,iBAAA,EAO9B,OANAj2U,EAAKk2U,mCAAmC,KAAKoW,cAAc,EAE3DtsV,EAAKvrC,UAAYvkB,GAAUg8J,OAC3BlsG,EAAKm0U,aAAe,KAAK5iD,SAAS,GAClCvxR,EAAKhzG,MAAQ,KAAKmrb,OAClBn4U,EAAK74B,MAAQ,GACN64B,CACX,CAEA,IAAsBizU,aAAsB,CACxC,OAAO,KAAK6sD,oBACPxH,QAAQ,KAAKj9E,UAAU,EACvBi+D,UAAU,KAAK+mB,mBAAqB,KAAK79D,MAAMntc,OAAS,GACxDgkf,SAAS,KAAKinB,oBAAoB,CAC3C,CAGA,IAAsBtI,cAAuB,CACzC,OAAO,KAAK/kD,YAAY59c,OAAS,KAAKqigB,QAC1C,CAEA,IAAsBO,YAAqB,CACvC,OAAO,KAAKD,aAAe1/C,GAC/B,CAEA,IAAsBgF,WAAoB,CACtC,IAAMi7C,EAAkB,KAAKb,SAAW,KAAKO,WAC7C,OAAQ,KAAKhlD,YAAY59c,OAASkjgB,GAAmB,KAAKb,QAC9D,CAEA,IAAsB5lG,mBAA6B,CAC/C,OACI,KAAK4uG,wBAA0Bpgb,QAC/B,KAAKouZ,aAAanwiB,QAAQ0yd,aAAe3wU,QACzC,KAAKouZ,aAAanwiB,QAAQ0/b,aAAe39S,MAEjD,CAEA,IAAsBigb,YAAqC,CACvD,GAAM,CAAEttD,cAAaqK,YAAW26C,aAAYz1D,QAAO97M,MAAO,KAEpDw6Q,EAAajuD,EAAYpjX,IAAMytX,EAAY,EAAI26C,EAAa,EAElE,OAAO,KAAKmI,UAAU5yjB,KAAKm/B,EAAGpvC,KAAO,CACjC,GAAGovC,EACHw0hB,UAAWD,GAAc5jD,EAAY26C,GAAc16jB,EACnD6jkB,WAAYz0hB,EAAEyxe,KAAK5wgB,IAAK6vgB,IACpB,IAAIo7C,EAAOj2D,EAAM6f,MAAM37N,EAAK22N,EAAI9tX,MAAMwrX,WAAW,EAC3CprC,EAAWz+U,KAAKqC,IAClBivW,EAAM6f,MAAMhF,EAAI9tX,MAAM16J,KAAK,EAAI2tgB,EAAM6f,MAAM37N,IAG/C,OADI22N,EAAI9tX,MAAM16J,MAAQ,IAAG4jkB,GAAQ9oF,GAC1B,CAAE,GAAG0tC,EAAKzhhB,EAAG68jB,EAAM9oF,UAAS,CACvC,EACJ,GACJ,CAEA,IAAsB6wF,YAAqC,CACvD,GAAM,CACFE,wBACAhyB,aAAc,CAAEnwiB,UAChBq0gB,WAAY,CAAEqB,eACd,KAEJ,OAAO,KAAKssD,WAAW/yjB,IAAK2tK,IAExB,IAAMkmZ,EAAWptD,EAAW55gB,MAAM8gL,EAAI8iR,UAAU,EAG1C3mI,EAA+Bn8I,EAAIimZ,WAAW5zjB,IAC/C8zjB,IAEG,IAAM/iM,EACFmiM,IAA0BY,EAAUrwG,YAEnC1yd,GAAQ0yd,aAAeqwG,EAAUrwG,YAC9B1yd,EAAO0/b,aAAe9iR,EAAI8iR,YAE7B1/b,GAAQ0/b,aAAe9iR,EAAI8iR,YACxB1/b,EAAO0yd,aAAe3wU,OAGxBk9O,EACF6jM,EAAS/gR,QACT2zN,EAAW55gB,MAAMinkB,EAAUrwG,UAAU,EAAE3wK,OAErC0xK,EAAQ,IAAI3B,GACd9xF,EACA,KAAKuzF,iBACT,EACMv4U,EAAQ,IAAI82U,GACd7yF,EACA,CAACy2I,EAAW/jZ,OAChB,EAEMwiO,EAAWu+K,GAAgB,CAAEj/C,QAAOz4U,OAAM,GAEhD,MAAO,CAAE,GAAG+nb,EAAWtvG,QAAOz4U,QAAOm5M,UAAS,CAClD,GAME6uO,EAHwBjqQ,EAASjkM,KAClChuG,GAAYA,EAAQqtU,WAAam+K,EAAS2f,WAE3BgxC,EACd3wD,EAASyf,QACTrf,GAAgB,CAAE13X,MAAO8nb,CAAS,GAExC,MAAO,CAAE,GAAGlmZ,EAAKu3K,SAAU6uO,EAAajqQ,UAAS,CACrD,EACJ,CAEA,IAAsB68M,cAA2B,CAC7C,OAAO,KAAK5iD,SAAS,EACzB,CAEc+tG,oBAAoBzqkB,EAAuB,CAIrD,IAAM84J,EAAY6F,GAAgB3+J,GAClC,OAAO,KAAKs/gB,aAAazjM,iBAAiB77U,EAAO,CAC7Ck3K,iBAAkB7a,KAAKh1J,IAAI,EAAG,CAACyxJ,EAAY,EAC/C,EACJ,CAEA,IAAsBg4U,YAAwB,CAC1C,OAAO,KAAKitC,WAAWjtC,UAC3B,CAEA,IAAsBpU,UAAyB,CAC3C,OAAO,KAAKqhD,WAAWrhD,QAC3B,CAEsBkvG,cAAqB,CACvC,KAAK/xB,aAAanwiB,OAAS,IAC/B,CAEsBghkB,mBAClBthI,EACAgzB,EACI,CACJ,KAAK2hD,WAAWqB,WAAWhlK,MAAA,EAC3B,KAAKy/L,aAAanwiB,OAAS,CAAE0/b,aAAYgzB,YAAW,CACxD,CAEsBuuG,oBAA2B,CAC7C,KAAKiB,aAAA,CACT,CAEA,IAAsB3pI,SAA0C,CAC5D,GAAM,CACE43G,aAAc,CAAEnwiB,SAAQikF,WAAUysd,UAClC96B,aAAc,CAAExrE,eAChBn7W,QAAS,CAAE93D,QAASsiE,GACpB2tY,WAAY,CAAEzoB,eACd,KACJh8a,EAAO,KAAKq/hB,WAAWjua,MAClB,CAAE2rS,gBAAiBA,IAAe1/b,GAAQ0/b,YAQ/CwjI,EANYvgiB,GAAMk9e,KAAK/qZ,MAClB,CAAEk8B,WACC,CAACA,EAAM6oU,SACP,CAAC7oU,EAAMyrX,cACPzrX,EAAMjqH,OAAS0yD,GAGjBklX,EAAWr3S,YAAY7tE,GACvBsoD,OAgBJikN,EAASxwM,GAAiB,CAdR0ta,EAClB,CACIn9S,KAAM8wM,GAAkBsF,OACxBhpZ,KAAM2mZ,GAA2BopG,EACrC,EACAnhb,OACiB,KAAK6zX,aAAazrE,2BACnC,CACIpkL,KAAM8wM,GAAkBwF,KACxBlpZ,KAAM6mZ,GAA0B,CAC5B,KAAK47C,aAAaxoW,qBACrB,EACL,EACArrB,MAC2D,GAEjE,OACI/hJ,GACA2iC,IACI+7K,SAACi6O,GAAD,CACI1hc,GAAI,KAAK2/b,UACT2lC,eAAgB,KAAKttY,QACrB5xF,EAAG4mF,EAAS5mF,EACZmwD,EAAGy2B,EAASz2B,EACZkhC,MAAO,CAAE0nP,SAAU,OAAQ,EAC3BxyI,QAAS,GACTD,QAAS,IACTx9C,MAAOnmJ,EAAO0/b,WACdh5S,SAAU0jT,EACVwxB,eAAe,OACP51H,SACR61H,SAAU60E,EACVtmD,YAAgB,KAAK+lD,aAAanwiB,OAAS,KAE3C0zG,UAAAgrG,SAACi6Q,GAAD,CACIv+T,QAAS+/T,GAAsB,KAAKy7C,YAAY,EAChDrpD,OAAQ,CAAC5pb,EAAKi9e,UAAU,EACxBzlX,KAAMx3H,EAAKk9e,KAAK5wgB,IAAK6vgB,IACjB,GAAM,CACFpsD,WAAY56d,EACZyuN,QACAv1D,MAAO,CAAE16J,QAAOywC,OAAM8yb,UAAS4iD,iBAC/BqC,EAEEvlD,EAAUM,GAAW4iD,EAE3B,MAAO,CACH3khB,OACAkhe,OAAQ,CAAEzyQ,OAAM,EAChBgzQ,UACAT,QAAShhe,IAASkI,EAAO0yd,WACzB3tc,OAAQ,CAAEw0c,EAAkBx3U,OAARzrJ,CAAiB,EACrCo4c,aACI,CAAC6qB,GAAWxyb,IAAS0yD,EACfklX,EAAWr3S,YAAYvgI,GACvBg7G,MACd,CACJ,EACW,EACV,EAGrB,CAEAgyD,QAAsC,CAUlC,OATI,KAAKsgU,WAAWp9Z,UAAUjmE,QAEtB0tK,SAAC2xT,GAAD,CACIphb,QAAS,KAAKA,QACd0sF,OAAQ,KAAKA,OACb/2J,QAAS,KAAKyvf,WAAWp9Z,UAAUjmE,MACtC,GAGF,KAAKi+C,QAAQ86a,SACd,KAAK2sC,aAAA,EACL,KAAKC,kBAAA,CACf,CAEA8kB,cAAuD,CACnD,GAAK,KAAKrhB,WACV,OACI17V,SAACs/W,GAAD,CACIlikB,MAAO,KAAK6lkB,YACZtkkB,EAAG,KAAKs+K,OAAOt+K,EACfmwD,EAAG,KAAKmuH,OAAOrqB,IACf+9M,YAAa,CAAC,KAAK06J,SACnB+mC,YAAa,KAAKivB,kBAClBzuB,YAAa,KAAK4tB,0BAClBzhE,YAAa,KAAK+hE,kBAClBhoX,aAAc,KAAKioX,kBACtB,EAET,CAEA/D,YAAyC,CACrC,GAAM,CAAE6F,oBAAqB5lZ,EAAQsoV,QAAOyQ,eAAgB,KAE5D,OACIvuO,UAAAsxC,WAAA,CAAA/jO,SAAA,CACK,KAAKoud,qBACF37R,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIgrG,SAACwjV,GAAD,CACYvmX,SACR8lB,KAAMwiU,EACNk+B,sBAAuBztB,EAAYz2W,MACtC,IACDygD,SAACojV,GAAD,CACIrgW,KAAMwiU,EACNtoV,OAAQ+4V,CACX,EACH,KAENh2T,SAACi9W,GAAD,CACIl6X,KAAMwiU,EACNtoV,OAAQ+4V,EACR3uO,YAAa,GAGbnoK,MAAOuf,GAAgBjmB,KAC1B,EACH,GAEV,CAEAw/a,cAA2C,CACvC,OACIvwQ,UAAAsxC,WAAA,CAAA/jO,SAAA,CACK,KAAK+nd,aAAA,EACL,KAAKC,WAAA,GACNh9W,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,QACdt+C,SAAA,KAAKuud,WAAWhzjB,IAAK2tK,IAClB8hC,SAACmiX,IAAD,CAESjkZ,MACLpvH,EAAGovH,EAAIgmZ,UACP3+D,MAAO,KAAKA,MACZ8a,UAAW,KAAKA,UAChBqH,cAAe,KAAKA,cACpB06C,oBAAqB,KAAKA,oBAC1BC,oBAAqB,KAAKA,oBAC1BC,mBAAoB,KAAKA,mBACzBC,mBAAoB,KAAKA,mBACzBC,eAAgB,KAAKgB,YACxB,EAXQtlZ,EAAI8iR,UAWZ,EAEN,EACL,GAEV,CAEAi3G,mBAAgD,CAC5C,GAAM,CAAEh7X,UAAW,KAEnB,OACIwqH,UAAC,IAAD,CAAGp1Q,IAAK,KAAK5Q,KAAMg1L,YAAa,KAAKA,YAArCzhG,SAAA,EACIgrG,SAAC,OAAD,CACIrhN,EAAG+5J,EAAYukB,EAAO7kD,IAAI,EAC1BtpE,EAAG4pG,EAAYukB,EAAOrqB,GAAG,EACzBj2E,MAAO+7E,EAAYukB,EAAOtgG,KAAK,EAC/BvkB,OAAQsgG,EAAYukB,EAAO7kH,MAAM,EACjCqrG,QAAS,EACT7hJ,KAAK,qBACR,GACA,KAAKm7iB,aAAA,EACL,KAAKC,WAAA,GACNh9W,SAACg6W,GAAD,CACI1pjB,MAAO,KAAKizjB,WACZtJ,YAAcvqhB,GAAMA,EAAEsxZ,WACtBk5H,KAAOxqhB,GAAMA,EAAEw0hB,UACfj9I,UAAW,KAAK12V,QAAQqta,yBACxBu8D,UAAYj8Y,IACR8hC,SAACmiX,IAAD,CAESjkZ,MACLmiW,UAAW,KAAKA,UAChBqH,cAAe,KAAKA,cACpBniB,MAAO,KAAKA,MACZ68D,oBAAqB,KAAKA,oBAC1BC,oBAAqB,KAAKA,oBAC1BC,mBAAoB,KAAKA,mBACzBC,mBAAoB,KAAKA,mBACzBC,eAAgB,KAAKgB,YACxB,EAVQtlZ,EAAI8iR,UAUZ,CAER,GACA,KAAKnH,OACP,C,EAEX,CAEAm+B,mBAAmC,CAC/BllU,GAAuB,IAAI,CAC/B,C,aACJ,GCptBA,IAAa2xa,GAAY3gkB,IACrB,GAAM,CAAEu6K,KAAIC,KAAI7vH,EAAGguO,YAAa34R,EAC1BnF,EAAI0/K,EAAK5vH,EACXK,EAAIwvH,EAAK7vH,EACPoqG,EAAS,CACX,CAACl6J,EAAGmwD,EAAIL,EAAI,CAAC,EACb,CAAC9vD,EAAK8vD,EAAI,EAAK,EAAGK,CAAC,EACnB,CAACnwD,EAAI8vD,EAAI,EAAGK,EAAIL,EAAI,CAAC,CACzB,EACMi2gB,EAAkBjoS,EAClB,CAACA,EAAUp+G,EAAIC,CAAG,EAAC/tK,IAAImoJ,GACvBrV,OAEN,OACI28D,SAAC,UAAD,CACInnD,OAAQA,EACHtoJ,IAAKyN,GAAM,GAAG06I,EAAY16I,EAAE,EAAE,EAAE,GAAG06I,EAAY16I,EAAE,EAAE,GAAG,EACtD/f,KAAK,KACVkgH,UACIumd,EACM,UAAUA,EAAgBzmkB,KAAK,MAAM,GACrColJ,OAEV,GAAIh0G,GAAOvrC,EAAO,CAAC,KAAM,KAAM,IAAK,UAAW,EAClD,EAET,E,s1GCtBa6gkB,IAAb,KAAaA,C,gCAiBRhyc,E,EAAaqqD,U,GAQbrqD,E,EAAah2C,O,GAIbg2C,E,EAAa+na,e,GAIb/na,E,EAAaq4Z,Y,GAUbr4Z,E,EAAastb,U,GAUbttb,E,EAAaiyc,gB,GAIbjyc,E,EAAav6D,Q,KAxDdm4B,QAEAs0e,8BAAsC,GACtC/uB,UAA6B,EAC7BgvB,YAA+B,EAC/Bhlc,QAA2B,KAAKglc,YAChCxxE,UAA6B7tN,GAC7B6zL,WAA8Bn0L,IAC9Bg4J,aAAgC,OAChCD,aAAgC,GAEhC,YAAY3sW,EAAwC,CAChDglG,EAAe,IAAI,EACnB,KAAKhlG,QAAUA,CACnB,CAEA,IAAcysF,UAAmB,CAC7B,IAAMu6S,EAAe,KAAKhnY,QAAQysF,aAClC,OAAOq6S,GACH,KAAK9mY,QAAQo5Z,iBAAmB,EAAI,KACpCpyB,EAER,CAEA,IAAc56Y,OAAgB,CAC1B,OAAO,KAAK4T,QAAQwtd,YACxB,CAEA,IAAcrjB,eAAwB,CAClC,OAAQ,KAAK/9c,MAAQ,GAAK,CAC9B,CAEA,IAAcquc,YAAuB,CACjC,GAAM,CAAEz6b,UAASmqc,gBAAe19W,YAAa,KAC7C,OAAO,IAAIy6J,GAAS,CAChBhjQ,KAAM8b,EAAQw0e,iBACd/nZ,WACA06J,SAAUgjN,EACV1jN,WAAY,CAChB,EACJ,CAEA,IAAcipO,UAAqB,CAC/B,GAAM,CAAE1vd,UAASmqc,gBAAe19W,YAAa,KAC7C,OAAO,IAAIy6J,GAAS,CAChBhjQ,KAAM8b,EAAQy0e,eACdhoZ,WACA06J,SAAUgjN,EACV1jN,WAAY,CAChB,EACJ,CAEA,IAAc4tP,gBAAyB,CACnC,OAAO3wa,KAAKh1J,IAAI,KAAK+rhB,WAAW5yd,OAAQ,KAAK6nf,SAAS7nf,MAAM,CAChE,CAEA,IAAcA,QAAiB,CAC3B,OAAO,KAAKwsgB,eAAiB,KAAK9kc,QAAU,KAAK+kc,kBACrD,CAEAxvX,OACIqyS,EACAC,EACAs9E,EAAkD,CAAC,EACjC,CAClB,GAAM,CAAEj6C,aAAYi1B,WAAUngb,UAAS+kc,qBAAoBlof,SACvD,KAGE+le,EAAWh7D,EAAU5nX,EACrB6ib,EAAYj7D,EAAU/qa,EAAQmjD,EAC9Bo5M,EAAQyuK,EAAU7nX,EAGlBu5Z,EAASngN,EAAQ2rP,EACjBK,EAAcx9E,EACdy9E,EAAYz9E,EAAU/qa,EAAQsje,EAAStje,MAC7C,OACI8qN,UAAC,IAAD,CACIlvS,GAAI+6J,EAAY,gBAChBzyI,UAAU,yBACV,GAAIokjB,EAHRjwd,SAAA,EAKIgrG,SAAC,OAAD,CACIrhN,EAAG+5J,EAAYgvV,GACf54b,EAAG4pG,EAAYivV,GACfhra,MAAO+7E,EAAY,KAAK/7E,KAAK,EAC7BvkB,OAAQsgG,EAAY,KAAKtgG,MAAM,EAC/Bx2C,KAAK,OACL6hJ,QAAS,CACZ,IACDu8C,SAAC64H,GAAD,CACI9B,SAAUi0M,EACVrshB,EAAGumkB,EACHp2gB,EAAGuqe,EACHz3gB,KAAM,KAAK0xe,SACd,IACDtzS,SAAC64H,GAAD,CACI9B,SAAUkpO,EACVthjB,EAAGwmkB,EACHr2gB,EAAGuqe,EACHz3gB,KAAM,KAAK0xe,SACd,IACDtzS,SAAC,OAAD,CACIzjC,GAAI7jB,EAAYgqZ,GAChB/lY,GAAIjkB,EAAYwgL,GAChBx8J,GAAIhkB,EAAYiqZ,GAChB/lY,GAAIlkB,EAAYwgL,GAChB9xC,OAAQ,KAAKkyL,WACbjyL,YAAa,CAChB,IACDrnF,SAAC,SAAD,CACI3hC,GAAI3lB,EAAYgqZ,GAChBpkY,GAAI5lB,EAAYwgL,GAChBzqR,EAAGiqG,EAAY,KAAKo9Y,SAAS,EAC7Bl0hB,KAAM,KAAK03c,WACXlyL,OAAQ,KAAK+1J,aACb91J,YAAa,KAAK61J,YACrB,GACA,CAAC,KAAK3sW,QAAQi+b,uBACX/mP,YAAOkyC,SAAP,CAAA3kO,SAAA,EACIgrG,SAAC,SAAD,CACI3hC,GAAI3lB,EACAgqZ,GAAYC,EAAYD,GAAY,GAExCpkY,GAAI5lB,EAAYwgL,GAChBzqR,EAAGiqG,EAAY,KAAKo9Y,SAAS,EAC7Bl0hB,KAAM,KAAK03c,WACXlyL,OAAQ,KAAK+1J,aACb91J,YAAa,KAAK61J,YACrB,IACDl9O,SAAC,SAAD,CACI3hC,GAAI3lB,EACAgqZ,EAAY,GAAKC,EAAYD,GAAa,GAE9CpkY,GAAI5lB,EAAYwgL,GAChBzqR,EAAGiqG,EAAY,KAAKo9Y,SAAS,EAC7Bl0hB,KAAM,KAAK03c,WACXlyL,OAAQ,KAAK+1J,aACb91J,YAAa,KAAK61J,YACrB,EACW,KAEpBl9O,SAACykX,GAAD,CACIpmZ,GAAIskY,EACJrkY,GAAI46J,EACJzqR,EAAG,KAAKq2gB,YACRroS,SAAU,GACV76Q,KAAM,KAAK03c,WACXlyL,OAAQ,KAAK+1J,aACb91J,YAAa,KAAK61J,YACrB,EACF,C,EAEX,CACJ,E,80GCvJkCrhP,eAmEDA,GAvEpBupX,IAA+B,UAIVvpX,KAAMpoG,U,QAAjC,cAA2BooG,G,+BADjC5zH,CACiC4zH,kB,CAC9BxG,QAA6C,CACzC,GAAM,CACF0+Q,SACAsxG,cACAC,gBACA9mE,eACA1lT,gBACA,KAAKh1M,MACHlM,EAAQu/J,GAAQ48T,EAAOl7T,MAAM,EACnC,GAAIjhK,IAAUyrJ,OAAW,OAAO,KAEhC,IAAMwkE,EACFksQ,EAAOwxG,SAAW,CAACF,EACbztkB,EAAMiwN,MACNu9W,IAEJI,EAAazxG,EAAO0xG,UAAUrvc,KAAM8zC,GAAU,CAACA,EAAM4vE,QAAQ,EAC7D3nO,EAAOva,EAAMua,KACbksK,EAAK3lB,EAAY9gK,EAAM2tF,SAAS5mF,CAAC,EACjC2/K,EAAK5lB,EAAY9gK,EAAM2tF,SAASz2B,CAAC,EACjCs4O,EAASi+R,EAAc,OAASG,EAAa,OAAS,OAE5D,OACI/9R,UAAC,IAAD,CACIlvS,GAAI+6J,EAAYygU,EAAOC,WAAY,aAEnCnzc,UAAWkzc,EAAO2xG,WAClBlnE,aACIA,MACkBA,EAAazqC,EAAOC,UAAU,EAC1C3wU,OAEIy1D,eATlB9jG,SAAA,CAWK,CAACswd,GAAiBvxG,EAAOwxG,UACtBvlX,SAAC,SAAD,CACQ3hC,KACAC,KACJ18J,KAAK,OACLwlR,OAAQv/E,EACRp5J,EAAGiqG,EAAYvmJ,EAAO,EACzB,IAEL6tM,SAAC,SAAD,CACQ3hC,KACAC,KACJ7vH,EAAGiqG,EAAYvmJ,GACfyP,KAAMimM,EACNpkD,QAAS49W,IACDj6O,SACRC,YAAai6O,IACbtxb,MAAO,CAAEimB,WAAY,YAAa,CACrC,EACF,CA5BM,EAAA89W,EAAO2xG,UA4Bb,CAEX,C,aACJ,GAUiC7pX,KAAMpoG,U,SAAhC,cAA0BooG,G,gCADhC5zH,CACgC4zH,kB,CAC7BxG,QAA6C,CACzC,GAAM,CAAE0+Q,SAAQsxG,cAAa7mE,eAAc1lT,gBAAiB,KAAKh1M,MAEjE,GAAIiwd,EAAOl7T,OAAOx5J,SAAW,EACzB,OACI2gN,SAAC2lX,GAAD,CACY5xG,SACKsxG,cACC7mE,eACA1lT,cACjB,GAGT,IAAMgjR,EAAa3kU,GAAQ48T,EAAOl7T,MAAM,EAClC21E,EAAYr3E,GAAO48T,EAAOl7T,MAAM,EACtC,GAAIijU,IAAez4U,QAAamrF,IAAcnrF,OAAW,OAAO,KAEhE,IAAIo5I,EAAWhsI,GAAYmhK,MAAMmiK,EAAOg6D,aAAct9X,GAAY7qB,EAAE,EAChEmuV,EAAOg6D,aAAapvhB,EAAI,IAAG89R,EAAW,CAACA,GAE3C,IAAMh5H,EAAU,GAEhB,OACIgkI,UAAC,IAAD,CACIlvS,GAAI+6J,EAAY,eAAgBygU,EAAO2xG,UAAU,EAEjD7kjB,UAAWkzc,EAAO2xG,WAHtB1wd,SAAA,EAKIgrG,SAAC,SAAD,CACI3hC,GAAI3lB,EAAYojU,EAAWv2Y,SAAS5mF,CAAC,EACrC2/K,GAAI5lB,EAAYojU,EAAWv2Y,SAASz2B,CAAC,EACrCL,EAAGiqG,EAAY,EAAIojU,EAAW3pd,KAAO,GACrCyP,KAAMyjjB,EAAc,UAAYvpG,EAAWj0Q,MAC3Cu/E,OAAO,OACE3jI,SACZ,IACDu8C,SAAC43V,GAAD,CACI/+Y,OAAQk7T,EAAOl7T,OAAOtoJ,IAAK4I,IAAO,CAC9Bxa,EAAGwa,EAAEosE,SAAS5mF,EACdmwD,EAAG31C,EAAEosE,SAASz2B,EACd+4J,MAAOw9W,EAAc,OAASlsjB,EAAE0uM,KACpC,IACAw/E,YAAa3uI,EAAYq7T,EAAO5hd,IAAI,EAC3BsxJ,UACTzzE,MAAO,CAAEimB,WAAY,cAAe,CACvC,IACD+pG,SAACykX,GAAD,CACIpmZ,GAAImwD,EAAUjpJ,SAAS5mF,EACvB2/K,GAAIkwD,EAAUjpJ,SAASz2B,EACvBL,EAAG,IAAM+/K,EAAUr8N,KACTsqR,WACV76Q,KAAMyjjB,EAAc,UAAY72V,EAAU3mB,MACjCpkD,SACZ,EACF,CA7BM,EAAAswT,EAAO2xG,UA6Bb,CAEX,C,aACJ,G,80GCvG6C7pX,cAAMpoG,UAANooG,I,IAAtC,cAAsCA,I,uCAD5C5zH,C,IAsBI0qC,E,EAAqBizc,a,GAIrBjzc,E,EAAqBkzc,oB,GASrBlzc,E,EAAqBiiW,oB,GAIrBjiW,E,EAAqBmzc,mB,GAMrBnzc,E,EAAqB0yc,a,GAYrB1yc,E,EAAqBsqD,Q,GAKrBtqD,E,EAAqB46Z,oB,GAOrB56Z,E,EAAqB8kZ,Y,GAIrB9kZ,E,EAAqBozc,W,GAIrBpzc,E,EAAqBqzc,W,GAIrBrzc,E,EAAqBszc,mB,GAIrBtzc,E,EAAqBuzc,kB,GAoCrBvzc,E,EAAqB26Z,2B,GAKrB36Z,E,EAAqBwzc,qB,GAgDrBxzc,E,EAAqB+5a,c,IA0JrB71b,IAAOo6D,K,KAAMm1Z,mB,IASbvvd,IAAOo6D,K,KAAMo1Z,mB,IAKbxvd,IAAOo6D,K,KAAMwlC,a,IA6Bb5/F,IAAOo6D,K,KAAM6nC,c,IAObjiG,IAAOo6D,K,KAAMmkM,S,GAIbziP,E,EAAa2zc,kB,GAIb3zc,E,EAAa4zc,kB,CAjY2B1qX,gB,CASzC,YAAY/3M,EAAqC,CAC7C,MAAMA,GAENyxL,EACI,KACA,CACIixY,WAAYpjZ,EACZqjZ,WAAYrjZ,CAChB,EAER,CAlBA3hK,gBAAOo6L,EAAMk8Q,UAAA,GAGbyuG,WAAgDnjb,OAEhDojb,WAAgDpjb,OAChDmxU,UAA6B/7T,KAc7B,IAAsBmta,aAA+B,CACjD,OAAO,KAAK9hkB,MAAM8hkB,WACtB,CAEA,IAAsBC,oBAA+B,CACjD,OACIxyjB,GACI,KAAKvP,MAAM+hkB,oBAAsB,GACjC,KAAKD,YAAYr1jB,IAAKo+C,GAAMA,EAAEqla,UAAU,IACvC,EAEb,CAEA,IAAsBY,oBAA+B,CACjD,OAAO,KAAK9wd,MAAM8wd,oBAAsB,EAC5C,CAEA,IAAsBkxG,mBAAwC,CAC1D,OAAO,KAAKhikB,MAAMgikB,iBACtB,CAIA,IAAsBT,aAAuB,CACzC,OACI,KAAKQ,mBAAmBxmkB,OAAS,GACjC,KAAKu1d,mBAAmBv1d,OAAS,GACjC,KAAKyE,MAAM+wd,oBAGT,KAAK/wd,MAAM+hkB,oBAAsB,IAAIxmkB,OAAS,GAC5C,KAAKwmkB,mBAAmBxmkB,SAAW,CAE/C,CAEA,IAAsB49K,QAAiB,CACnC,OAAO,KAAKn5K,MAAM2xgB,SAASO,WAC/B,CAGA,IAAsBuX,oBAA8B,CAChD,OACI,KAAKs4C,mBAAmBxmkB,OAAS,GACjC,KAAKyE,MAAM8hkB,YAAYxvc,KAAM29V,GAAWA,EAAOl7T,OAAOx5J,OAAS,EAEvE,CAEA,IAAsBo4gB,YAAqC,CACvD,OAAO,KAAK3zgB,MAAM2zgB,UACtB,CAEA,IAAsBsuD,WAAyC,CAC3D,OAAO,KAAKjikB,MAAMiikB,SACtB,CAEA,IAAsBC,WAAqD,CACvE,OAAO,KAAKlikB,MAAMkikB,SACtB,CAEA,IAAsBC,mBAA6B,CAC/C,MAAO,CAAC,CAAC,KAAKnikB,MAAMmikB,iBACxB,CAEA,IAAsBC,kBAA4B,CAC9C,MAAO,CAAC,CAAC,KAAKpikB,MAAMoikB,gBACxB,CAEAQ,eAAuB9ukB,EAAmC,CACtD,IAAMulL,EACFvlL,IAAUyrJ,OAEJ,KAAK0ib,UAAUh2e,MAAA,CAAO,CAAC,GADvB,KAAKg2e,UAAUnukB,GAIzB,OAAOq8J,KAAKh1J,IACRk+K,EACA,KAAKr5K,MAAMkrhB,YACLzN,KACAolD,CAEd,CAEAC,iBAAyBhvkB,EAAmC,CACxD,GAAI,CAAC,KAAKoukB,UAAW,UACrB,IAAMhpZ,EACFplL,IAAUyrJ,OAEJ,KAAK2ib,UAAUj2e,MAAA,CAAO,CAAC,GADvB,KAAKi2e,UAAUpukB,GAEzB,OAAOw/d,GACHnjU,KAAKh1J,IACD+9K,EACAq6S,MAEI,KAAKvzd,MAAMyzd,YACf,GAGZ,CAEA,IAAsB+1D,2BAAqC,CACvD,OAAO,KAAKxphB,MAAMwphB,yBACtB,CAGA,IAAsB64C,qBAA6C,CAC/D,GAAM,CAAEP,cAAanuD,aAAYx6V,UAAW,KACtCupV,EAAQ,KAAK1igB,MAAM2xgB,SAASG,eAAe3jgB,MAAA,EACjDu0f,EAAMz2a,MAAQktF,EAAOi+V,OAAA,EACrB,IAAM3V,EAAQ,KAAKzhgB,MAAM2xgB,SAASI,aAAa5jgB,MAAA,EAG/C,MAFAszf,GAAMx1a,MAAQ,KAAKktF,OAAOg+V,OAAA,EAEnBj+W,GACH4oa,EAAYr1jB,IAAKwjd,IACb,IAAMl7T,EAASk7T,EAAOl7T,OAAOtoJ,IACxB+hJ,IACG,IAAMu0a,EACFpvD,IAAep0X,OAETA,OADAo0X,EAAWrjM,SAAS9hL,EAAMu1D,KAAK,EAEzC,MAAO,CACHtiI,SAAU,IAAIkrE,GACVwD,KAAKx1J,MAAM+ngB,EAAM4e,MAAM9yX,EAAM3zJ,CAAC,GAC9Bs1J,KAAKx1J,MAAM8mgB,EAAM6f,MAAM9yX,EAAMxjG,CAAC,IAElC+4J,MAAOg/W,GAAc9yG,EAAOlsQ,MAC5B11M,KAAM,KAAKu0jB,eAAep0a,EAAMngJ,IAAI,EACpCk2B,KAAMiqH,EAAMjqH,KACZ6hI,MAAO5X,EAAM4X,KACjB,CACJ,GAGJ,MAAO,CACH8pT,WAAYD,EAAOC,WACnB0xG,WAAY,OAASxya,GAAe6gU,EAAOC,UAAU,EACrDnsQ,MAAOksQ,EAAOlsQ,MACd11M,KAAMglJ,GAAO0B,GAAS1mJ,KACtB6qK,SAAU,KAAK4pZ,iBACXzva,GAAO48T,EAAOl7T,MAAM,EAAG1mJ,IAC3B,EACA0mJ,SACApkF,KAAMs/Y,EAAO7pT,MACb48Z,UAAW,GACXrB,UAAW,GACX13C,aAAct9X,GAAYt4B,IAC9B,CACJ,GACCzoF,GAAMA,EAAEv9B,KACTmgI,GAAUpO,IACd,CACJ,CAEA,IAAsBwoa,cAAsC,CAExD,IAAMq6B,EAAa,KAAKZ,oBAExB,IAAK,IAAMpyG,KAAUgzG,EACjBhzG,EAAOizG,QAAU,KAAKpyG,mBAAmBniW,SAASshW,EAAOC,UAAU,EACnED,EAAOwxG,QAAU,KAAKM,mBAAmBpzc,SAASshW,EAAOC,UAAU,EACnED,EAAOkzG,UAAY,KAAKnB,oBAAsB/xG,EAAOC,WACrDD,EAAOmzG,aAAenzG,EAAOizG,SAAWjzG,EAAOwxG,QAC3CxxG,EAAOizG,UAASjzG,EAAO5hd,MAAQ,GAGvC,IAAK,IAAM4hd,KAAUgzG,EACjBhzG,EAAOi3D,WAAaqC,IAChBt5D,EACA,KAAKw5D,mBACL,KAAKD,0BACL,KAAKxphB,MAAMyzd,YACf,EACAxD,EAAO+yG,UAAYr5C,IACf15D,EACA,KAAKw5D,mBACL,KAAKD,0BACL,KAAKxphB,MAAMyzd,YACf,EACAxD,EAAOksF,SAAWpyB,IACd95D,EACA,KAAKw5D,mBACL,KAAKD,0BACL,KAAKxphB,MAAMyzd,YACf,EACAxD,EAAO0xG,UAAY,CAAC1xG,EAAOi3D,UAAW,EACjCjqhB,OAAOgzd,EAAO+yG,UACP,CAAC/yG,EAAOksF,QAAS,GACxBl4f,OAAQppD,GAAMA,GAGvB,IAAMi0U,EAASm0P,EAAWz/Z,QAASysT,GAAWA,EAAO0xG,SAAS,EAI9D,KAAK0B,4BAA4Bv0P,EAAQ,KAAK31J,MAAM,EAEpD,IAAMmqZ,EAAmBpqa,GACrB41K,EACCpjS,GAAM49e,IAAc59e,GACrB8iG,GAAUpO,IACd,EAaA,OAZI,KAAK2hc,mBAAmBxmkB,OAAS,GACjC,KAAKgokB,qBAAqBD,GAE1B,KAAKnB,mBACL,KAAKqB,WAAWF,EAAkB,KAAKxyG,mBAAmBv1d,MAAM,EAEhE,KAAK6mkB,kBACL,KAAKqB,cAAcH,GAGvB,KAAKI,8BAA8BJ,GAE5BL,CACX,CAEAO,WACIF,EACAK,EACI,CACJL,EACKr/gB,OAAQmiH,GAAU,EAAEA,EAAM6pT,OAAOizG,SAAWS,IAAmB,IAC/Dp2jB,QAAS64J,GAAWA,EAAM4vE,SAAW,GAC9C,CAEAytV,cAAsBH,EAAwC,CAC1DA,EACKr/gB,OAAQmiH,GAAUA,EAAMw9Z,KAAK,EAC7Br2jB,QAAS64J,GAAWA,EAAM4vE,SAAW,GAC9C,CAEAutV,qBAA6BD,EAAwC,CACjEA,EACKr/gB,OAAQmiH,GAAU,CAACA,EAAM6pT,OAAOwxG,SAAW,CAACr7Z,EAAM6pT,OAAOizG,OAAO,EAChE31jB,QAAS64J,GAAWA,EAAM4vE,SAAW,GAC9C,CAEA0tV,8BACIJ,EACI,CACJ,IAAK,IAAI9mkB,EAAI,EAAGA,EAAI8mkB,EAAiB/nkB,OAAQiB,IAAK,CAC9C,IAAMqnkB,EAAsBP,EAAiB9mkB,GAC7C,GAAIqnkB,GAAoB7tV,SAExB,IAAK,IAAI9gH,EAAI14H,EAAI,EAAG04H,EAAIouc,EAAiB/nkB,OAAQ25H,IAAK,CAClD,IAAM4uc,EAAqBR,EAAiBpuc,GACxC4uc,EAAmB9tV,WAGnB8tV,EAAmBF,QAClBE,EAAmB7zG,OAAOizG,SACvBY,EAAmB7zG,OAAOwxG,UAC9BoC,EAAoB5zG,OAAOizG,UACvBY,EAAmB7zG,OAAOizG,SAC9BW,EAAoB5zG,OAAOwxG,UACvBqC,EAAmB7zG,OAAOwxG,QAMxBoC,EAAoB1qZ,OACfwvW,IAAI,GACJ3G,WAAW8hD,EAAmB3qZ,MAAM,EAMzC0qZ,EAAoB1qZ,OACfwvW,IAAI,EAAC,EACL3G,WAAW8hD,EAAmB3qZ,MAAM,KAE/C2qZ,EAAmB9tV,SAAW,GAEtC,CACJ,CACJ,CAGAqtV,4BACIv0P,EACA31J,EACI,CACJ,IAAK,IAAM/S,KAAS0oK,EACZ1oK,EAAM+S,OAAO7kD,KAAO6kD,EAAO7kD,KAAO,EAClC8xC,EAAM+S,OAAS/S,EAAM+S,OAAOlgL,IAAI,CAC5B4B,EAAGurK,EAAM+S,OAAOt+K,EAAIurK,EAAM+S,OAAOtgG,KACrC,GACKutF,EAAM+S,OAAOzkD,MAAQykD,EAAOzkD,MAAQ,IACzC0xC,EAAM+S,OAAS/S,EAAM+S,OAAOlgL,IAAI,CAC5B4B,EAAGurK,EAAM+S,OAAOt+K,EAAIurK,EAAM+S,OAAOtgG,KACrC,IAEAutF,EAAM+S,OAAOrqB,IAAMqqB,EAAOrqB,IAAM,EAChCsX,EAAM+S,OAAS/S,EAAM+S,OAAOlgL,IAAI,CAAE+xD,EAAGmuH,EAAOrqB,GAAI,GAC3CsX,EAAM+S,OAAO1d,OAAS0d,EAAO1d,OAAS,IAC3C2K,EAAM+S,OAAS/S,EAAM+S,OAAOlgL,IAAI,CAC5B+xD,EAAGmuH,EAAO1d,OAAS2K,EAAM+S,OAAO7kH,MACpC,GAEZ,CAMcgugB,kBAAkBpyG,EAA0B,CACtD,KAAKyyG,WAAa,KAAKb,YAAYvwa,KAC9B0+T,GAAWA,EAAOC,aAAeA,GAGlC,KAAKyyG,YAAc,CAAC,KAAKD,YACzB,KAAK1ikB,MAAM06f,eAAe,KAAKioE,UAAU,CACjD,CAEcJ,mBAA0B,CACpC,KAAKI,WAAapjb,OACb,KAAKmjb,YAAY,KAAK1ikB,MAAMg1M,eAAA,CACrC,CAEcrC,YAAYroI,EAAyC,CAC/D,GAAI,KAAK3sD,KAAK5lB,QAAS,CACnB,GAAM,CAAE8C,IAAGmwD,KAAMgjG,GAAiB,KAAKrwI,KAAK5lB,QAASuyE,GAI/C2hB,EAAQ,KAAK02e,aACsB,GAInCoB,EAAS,KAAK/jkB,MAAM6rT,UAAUt6J,KAAK12J,EAAGmwD,EAAGihC,IAAQgkY,OACnD8zG,EAEIA,EAAO7zG,aAAe,KAAKwyG,YAAYxyG,YACvC,KAAKlwd,MAAM06f,eAAeqpE,GAEvB,KAAKrB,aAGZ,KAAK1ikB,MAAMg1M,eAAA,EACP,KAAK2tX,YACL,KAAK3ikB,MAAM06f,eAAe,KAAKioE,UAAU,GAGjD,KAAKD,WAAaqB,CACtB,CACJ,CAEc/uX,cAAqB,CAE/B,KAAK0tX,WAAanjb,OAClB,KAAKojb,WAAapjb,OACd,KAAKv/I,MAAMg1M,cAAc,KAAKh1M,MAAMg1M,aAAA,CAC5C,CAEcs8J,SAAgB,CACtB,KAAKtxW,MAAMsxW,SAAS,KAAKtxW,MAAMsxW,QAAA,CACvC,CAEA,IAAckxN,kBAA0C,CACpD,OAAO,KAAK55B,aAAa3kf,OAAQgsa,GAAW,CAACA,EAAOmzG,YAAY,CACpE,CAEA,IAAcX,kBAA0C,CACpD,OAAO,KAAK75B,aAAa3kf,OAAQgsa,GAAW,CAAC,CAACA,EAAOmzG,YAAY,CACrE,CAEAY,wBAA4D,CACxD,GAAM,CAAExB,mBAAkBjB,cAAa/3C,6BACnC,KAIJ,OAFIA,EAAkC,MAGlCttU,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,UACdt+C,SAAAsxd,EAAiB/1jB,IAAKwjd,IACnB/zQ,SAAC+nX,IAAD,CAEYh0G,SACKsxG,cACb7mE,aAAc,KAAK4nE,kBACnBttX,aAAc,KAAKutX,iBACtB,EALQtyG,EAAOC,UAKf,EAEN,EAEX,CAEAg0G,wBAAqD,CACjD,GAAM,CAAE3C,eAAgB,KACxB,OACIrlX,SAAC,IAAD,CACIznN,GAAI+6J,EAAY,UAChBzyI,UAAU,mBACVe,KAAOyjjB,EAAuB,OAAT,OAEpBrwd,SAAA,KAAKsxd,iBAAiB/1jB,IAAKwjd,GACjBA,EAAO0xG,UACT19gB,OAAQmiH,GAAU,CAACA,EAAM4vE,QAAQ,EACjCvpO,IAAK25J,IACF81C,SAACi9O,GAAD,CAEI1kc,GAAI+6J,EAAY,UAAWygU,EAAOC,UAAU,EAC5Ch3S,SAAU9S,EAAM8S,SAEhBhoE,UAAAgrG,SAAC,OAAD,CACIznN,GAAI+6J,EAAY,QAAS4W,EAAMz1F,IAAI,EACnC91E,EAAG+5J,EAAYwR,EAAM+S,OAAOt+K,CAAC,EAC7BmwD,EAAG4pG,EACCwR,EAAM+S,OAAOnuH,EAAIo7G,EAAM+S,OAAO7kH,MAClC,EACA4kH,SAAU9S,EAAM8S,SAChBD,WAAY7S,EAAM6S,WAClBn7J,KAAMyjjB,EAAc,OAASn7Z,EAAM29C,MACnC73H,MAAO,CAAEs6c,cAAe,MAAO,EAE9Bt1b,SAAAk1D,EAAMz1F,IACL,EACJ,EAjBGs/Y,EAAO2xG,WAAa,aAmBzC,CACD,EAEX,CAEAuC,wBAAqD,CACjD,GAAM,CAAE16C,qBAAoBD,6BAA8B,KAC1D,OACIttU,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,UACdt+C,SAAA,KAAKuxd,iBAAiBh2jB,IAAKwjd,IACxB,IAAMm0G,EAAY/wa,GAAO48T,EAAOl7T,MAAM,EAChCwuI,GACDimP,GAEKv5D,EAAOizG,QADP,EAGEz5C,EACE,IACA,GACV26C,EAAU/1jB,KAAO,EAErB,GAAI4hd,EAAOl7T,OAAOx5J,SAAW,EACzB,OACI2gN,SAAC2lX,GAAD,CAEY5xG,SACRuxG,cAAe,KAAKxhkB,MAAMwhkB,cAC1B9mE,aAAc,KAAK4nE,kBACnBttX,aAAc,KAAKutX,iBACtB,EALQtyG,EAAO2xG,UAKf,EAGT,IAAM5pG,EAAa3kU,GAAQ48T,EAAOl7T,MAAM,EAClC4K,EAAU8pX,EAAqB,GAAM,EACrCpwW,EAASmwW,EACTjmP,EACAA,EAAc,EAAI,EACpB5K,EAAWhsI,GAAYmhK,MACvBmiK,EAAOg6D,aACPt9X,GAAY7qB,EAChB,EAEA,OADImuV,EAAOg6D,aAAapvhB,EAAI,IAAG89R,EAAW,CAACA,IAEvCgL,UAAC,IAAD,CACIlvS,GAAI+6J,EAAY,eAAgBygU,EAAO2xG,UAAU,EAEjD7kjB,UAAWkzc,EAAO2xG,WAHtB1wd,SAAA,CAKK,CAACs4a,IACEttU,SAAC43V,GAAD,CACI/+Y,OAAQk7T,EAAOl7T,OAAOtoJ,IAAK+hJ,IAAW,CAClC3zJ,EAAG2zJ,EAAM/sE,SAAS5mF,EAClBmwD,EAAGwjG,EAAM/sE,SAASz2B,EAClB+4J,MAAOv1D,EAAMu1D,KACjB,IACAw/E,YAAa3uI,EAAY2uI,GAChB5jI,SACZ,IAEHswT,EAAOwxG,SAAWj4C,IAChBxxD,IACI97Q,SAAC,SAAD,CACI3hC,GAAI3lB,EAAYojU,EAAWv2Y,SAAS5mF,CAAC,EACrC2/K,GAAI5lB,EAAYojU,EAAWv2Y,SAASz2B,CAAC,EACrCL,EAAGiqG,EAAYykB,GACfv7J,KAAMk6c,EAAWj0Q,MACRpkD,UACT2jI,OAAQ00L,EAAWj0Q,MACnB2vV,cAAe,EAClB,IAEPzjF,EAAOizG,SAAW15C,IAChBv5D,EAAOl7T,OACFzF,MACG,EACAk6X,EACMjqY,OACA,EAAC,EAEV9yI,KAAK4I,EAAG/Z,KACL4gN,SAAC,SAAD,CAEI3hC,GAAI3lB,EAAYv/I,EAAEosE,SAAS5mF,CAAC,EAC5B2/K,GAAI5lB,EAAYv/I,EAAEosE,SAASz2B,CAAC,EAC5BL,EAAGiqG,EAAYykB,GACfv7J,KAAMzI,EAAE0uM,MACRu/E,OAAO,MACV,EANQhoS,IAQpB,CAACkuhB,IACEttU,SAACykX,GAAD,CACIpmZ,GAAI6pZ,EAAU3if,SAAS5mF,EACvB2/K,GAAI4pZ,EAAU3if,SAASz2B,EACvBL,EAAG,IAAM44O,EACC5K,WACV76Q,KAAMsmjB,EAAUrgX,MACPpkD,SACZ,EAEN,CAtDM,EAAAswT,EAAO2xG,UAsDb,CAEX,EACD,EAEX,CAEAyC,wBAAqD,CACjD,OACInoX,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,UACdt+C,SAAA,KAAKuxd,iBAAiBh2jB,IAAKwjd,GACjBA,EAAO0xG,UACT19gB,OAAQmiH,GAAU,CAACA,EAAM4vE,QAAQ,EACjCvpO,KAAK25J,EAAO9qK,KACT4gN,SAACi9O,GAAD,CACI1kc,GAAI+6J,EAAY,UAAWygU,EAAOC,UAAU,EAE5Ch3S,SAAU9S,EAAM8S,SAEhBhoE,UAAAgrG,SAAC,OAAD,CACIznN,GAAI+6J,EAAY,QAASygU,EAAOC,UAAU,EAC1Cr1d,EAAG+5J,EAAYwR,EAAM+S,OAAOt+K,CAAC,EAC7BmwD,EAAG4pG,EACCwR,EAAM+S,OAAOnuH,EAAIo7G,EAAM+S,OAAO7kH,MAClC,EACA4kH,SAAU9S,EAAM8S,SAChBD,WAAY7S,EAAM6S,WAClBn7J,KAAMsoJ,EAAM29C,MAEX7yG,SAAAk1D,EAAMz1F,IACL,EACJ,EAfG,GAAGs/Y,EAAO2xG,WAAW,SAAStmkB,GAejC,EAElB,CACD,EAEX,CAEAi2M,QAAsC,CAClC,GAAM,CAAEp4B,SAAQyvX,eAAcl4E,aAAc,KACtC4zG,EAAanrZ,EAAOwvW,IAAI,GAAC,EAU/B,OARIp9e,GAAUq9f,IAEN1sV,SAAC2xT,GAAD,CACIphb,QAAS,KAAKzsF,MAAMukkB,qBACZprZ,QACX,IAILwqH,UAAC,IAAD,CACIp1Q,IAAK,KAAK5Q,KACVlpB,GAAI+6J,EAAY,kBAChBzyI,UAAU,6BACV6ghB,SAAU,sBAAsBltE,EAAU,GAC1C/9Q,YAAa,KAAKA,YAClBqC,aAAc,KAAKA,aACnBs8J,QAAS,KAAKA,QAPlBpgQ,SAAA,EASIgrG,SAAC,OAAD,CAEIrhN,EAAG+5J,EAAYukB,EAAOt+K,CAAC,EACvBmwD,EAAG4pG,EAAYukB,EAAOnuH,CAAC,EACvB6tB,MAAO+7E,EAAYukB,EAAOtgG,KAAK,EAC/BvkB,OAAQsgG,EAAYukB,EAAO7kH,MAAM,EACjCx2C,KAAK,qBACR,EANO,eAORo+L,SAAC,OAAD,CAAAhrG,UACIgrG,SAAC,WAAD,CAAUznN,GAAI,iBAAiBi8d,IAC3Bx/W,UAAAgrG,SAAC,OAAD,CACIrhN,EAAG+5J,EAAY0va,EAAWzpkB,CAAC,EAC3BmwD,EAAG4pG,EAAY0va,EAAWt5gB,CAAC,EAC3B6tB,MAAO+7E,EAAY0va,EAAWzrf,KAAK,EACnCvkB,OAAQsgG,EAAY0va,EAAWhwgB,MAAM,CACxC,EACK,EACR,GACL,KAAK0vgB,uBAAA,EACL,KAAKE,uBAAA,EACL,KAAKC,uBAAA,EACL,KAAKE,uBAAA,CACP,C,EAEX,C,aACJ,G,s1GCjoBMG,GAAiB,EACjBC,IAAsB,OACtBC,IAAqB,OACrBC,IAAgB,EAChBC,IAAchjS,GACdijS,IAAcljS,GAEdmjS,IAAgB,EAETC,IAAb,KAAaA,C,gCAORl2c,E,EAAqB4kW,c,GAIrB5kW,E,EAAqB+kN,U,GAIrB/kN,E,EAAqBsH,O,GA0BrBtH,E,EAAqBm2c,oB,GAYrBn2c,E,EAAqBo2c,Y,GAOrBp2c,E,EAAqBu3C,O,GAgBrBv3C,E,EAAqB80B,O,GAiBrB90B,E,EAAah2C,O,GAIbg2C,E,EAAav6D,Q,GAUbu6D,E,EAAqB23F,W,KA1GtB/5H,QACA,YAAYA,EAAmC,C,UAC3CglG,EAAe,IAAI,EACnB,KAAKhlG,QAAUA,CACnB,CAEA,IAAsBgnY,cAAuB,CACzC,OAAO,KAAKhnY,QAAQysF,YACxB,CAEA,IAAsB06J,UAAmB,CACrC,OAAO,KAAKnnP,QAAQwtd,YACxB,CAEA,IAAsB9jb,OAAkB,CACpC,GAAM,CAAE8rc,aAAc,KAAKx1e,QACrB,CAACy4e,EAAaC,GAAalD,EAAU75gB,OAAA,EAC3C,GAAI88gB,IAAgBC,EAAW,MAAO,CAACD,CAAW,EAClD,GAAM,CAACE,EAAa,GAAGC,GAAapD,EAAU9rc,MAAM,GAAGm5M,WAAA,EACvD,GAAI81P,IAAgB7lb,OAAW,MAAO,GACtC,IAAMppB,EAAQ,CAACivc,CAAW,EAW1B,OAVAC,EAAU93jB,QAASzZ,IAGXmukB,EAAUnukB,IAAUmukB,EAAU5ua,GAAOl9B,IAAW,GAEhD8rc,EAAUnukB,IAAU,GAEpBqiI,EAAM55H,KAAKzI,EAEnB,GACOqiI,CACX,CAEAysc,eAAuB9ukB,EAAmC,CAEtD,OADIA,IAAUyrJ,OAAW,EAClB,KAAK9yD,QAAQw1e,UAAUnukB,EAClC,CAGA,IAAsBkxkB,oBAAkD,CACpE,OACIt2F,KAGKtmb,OAAO,CAAC,IAA4B,GACpC6jC,MAAM,CAAC,EAAG,EAAG,GACb83B,MAAM,GAEnB,CAGA,IAAsBkhd,YAAqB,CAIvC,OAHI,KAAK9uc,MAAM56H,SAAW,EAAU,EAG7B,GAFW83J,GAAO,KAAK5mE,QAAQw1e,UAAUh2e,MAAA,IAAY,GAErC,CAC3B,CAEA,IAAsBm6E,OAAkB,CACpC,IAAM8S,EAAW/oB,KAAKh1J,IAClB2pkB,IACAvxG,GAAc,GAAI,KAAKE,YAAY,GAEvC,OAAO,IAAI9/I,GAAS,CAChBhjQ,KAAM,mBAINijQ,SAAU,KAAKA,SAAW,GAC1B16J,WACAg6J,WAAY,CAChB,EACJ,CAEA,IAAsBvvL,OAAkB,CACpC,IAAMu1B,EAAW/oB,KAAKh1J,IAClB2pkB,IACAvxG,GAAc,GAAI,KAAKE,YAAY,GAEvC,OAAO,IAAI9/I,GAAS,CAChBhjQ,KAAM,KAAK8b,QAAQq+b,WAAWtoF,YAI9B5uH,SAAU,KAAKA,SAAW,GAC1B16J,WACAD,WAAY,IACZi6J,WAAY,CAChB,EACJ,CAEA,IAAcr6P,OAAgB,CAC1B,OAAO,KAAK4T,QAAQwtd,YACxB,CAEA,IAAc3lf,QAAiB,CAC3B,OACI,KAAK2wgB,WACLT,GACA,KAAKp+Z,MAAM9xG,OACXqwgB,IACA,KAAKhhb,MAAMrvF,MAEnB,CAEA,IAAsBkyJ,WAEN,CACZ,GAAM,CAAE8+W,iBAAkB,KAAK74e,QAC/B,GACI64e,GAAevwa,OAAOx5J,SAAW,GACjC83J,GAAQiya,EAAcvwa,MAAM,GAAG1mJ,OAASkxI,OAExC,MAAO,CACHzrJ,MAAOu/J,GAAQiya,EAAcvwa,MAAM,EAAG1mJ,KACtC01M,MAAOuhX,EAAcvhX,KACzB,CAGR,CAEAk1W,aAAqBr1E,EAAiBC,EAAqC,CACvE,GAAM,CAAEr9R,aAAc,KAChBjsC,EAAKqpU,EAAU,KAAKhwK,SAAW,EACrC,OACIjwC,YAAOkyC,SAAP,CAAA3kO,SAAA,CACK,KAAKilB,MAAM1pH,IAAK3Y,IACb,IAAMulL,EAAS,KAAKupZ,eAAe9ukB,GACnC,OACIooN,SAACqpX,IAAD,CAEIn/Z,MAAO,KAAK35E,QAAQq+b,WAAW7gF,kCAC3Bn2c,EACA,CACIs2K,aACI5rB,GAAyBixL,aACjC,GAEAl1J,KACJC,GAAIqpU,EAAU,KAAKohF,WAAa5rZ,EAChC48I,aAAc58I,EACdmsZ,aACIh/W,EAAY,OAASi+W,IAEzB7gD,cAAetwD,GACX,KAAK0xG,mBAAmB3rZ,IAE5BosZ,UAAWj/W,EAAY,OAASk+W,GACnC,EAlBQ5wkB,EAoBjB,GACC0yN,IACGtK,SAACqpX,IAAD,CAEIn/Z,MAAO,KAAK35E,QAAQq+b,WAAWn7M,iBAC3BnpH,EAAU1yN,KACd,EACIymL,KACJC,GACIqpU,EACA,KAAKohF,WACL,KAAKrC,eAAep8W,EAAU1yN,KAAK,EAEvC4xkB,WAAYl/W,EAAUzC,MACtByhX,aAAc,OACdG,qBACA1vQ,aAAc,KAAK2sQ,eAAep8W,EAAU1yN,KAAK,EACjD8xkB,iBACAhiD,cAAe,GACf6hD,UAAWz0R,GAAmBxqF,EAAUzC,KAAK,EAC7C8hX,gBAAiB,IACjBC,aAAc,EACjB,EAnBQt/W,EAAU1yN,KAmBlB,CAEO,GAExB,CAEAy9M,OACIqyS,EACAC,EACAs9E,EAAkD,CAAC,EACjC,CAClB,IAAMtvB,EAAUjuD,EAAU,KAAKhwK,SAAW,EAC1C,OACIjwC,UAAC,IAAD,CAAGlvS,GAAI+6J,EAAY,eAAgB,GAAI2xa,EAAvCjwd,SAAA,CACK,KAAK+nd,aAAar1E,EAASC,IAC5B3nS,SAAC64H,GAAD,CACI9B,SAAU,KAAK7sK,MACfvrK,EAAGg3iB,EACH7mf,EAAG64b,EAAU,KAAKohF,WAAaT,GAC/B1mjB,KAAM8mjB,IACNrrO,WAAW,QACd,IACDr9I,SAAC64H,GAAD,CACI9B,SAAU,KAAKtvL,MACf9oJ,EAAGg3iB,EACH7mf,EACI64b,EACA,KAAKohF,WACLT,GACA,KAAKp+Z,MAAM9xG,OACXqwgB,IAEJ7mjB,KAAM+mjB,IACNtrO,WAAW,QACd,EACF,C,EAEX,CACJ,EAEMgsO,KAAc,CAChBn/Z,QACAmU,KACAC,KACAy7I,eACAyvQ,aAAa,OACbF,eAAef,IACfkB,oBAAoB,KACpBC,gBAAgB,EAChBH,YAAYf,IACZ9gD,gBACAiiD,kBAAkB,IAClBC,eAAe,OAgBXniS,UAAC,IAAD,CAAAzyL,SAAA,EACIgrG,SAAC,SAAD,CACI3hC,GAAI3lB,EAAY2lB,GAChBC,GAAI5lB,EAAY4lB,GAChB7vH,EAAGiqG,EAAYqhK,GACfn4S,KAAM4njB,EACNpiS,OAAQkiS,EACRjiS,YAAaoiS,EACbhma,QAASima,CACZ,IACD1pX,SAACi9O,GAAD,CAAM1kc,GAAI2xK,EAAO8S,SAAU0qW,EACvB1ya,UAAAgrG,SAAC,OAAD,CACIrhN,EAAG+5J,EAAY2lB,GACfvvH,EAAG4pG,EAAY4lB,EAAKy7I,GACpBpnB,GAAIi3R,EAAe,SAAW,QAC9BhojB,KAAM2njB,EACNvsZ,SAAU0qW,EACV3qW,WAAY4sZ,EACZtsO,WAAW,SAEVroP,SAAAk1D,CACC,EACJ,EACP,I,80GCvQ6B2xC,cAAMpoG,UAANooG,I,KAAjC,cAAiCA,I,wCADvC5zH,C,IAEI0qC,E,EAAqBgjZ,Y,GAIrBhjZ,E,EAAqBkmC,Q,GAIrBlmC,E,EAAqBtsG,Q,GAMrBssG,E,EAAqB6nZ,iB,GAyDrB7nZ,E,EAAqBk/a,gB,GAkCrBl/a,E,EAAqBk3c,yC,GAIrBl3c,E,EAAqB20O,Q,GAIrB30O,E,EAAqBq1B,U,CAlHc6zD,gB,mBAAjC,SAAA3+L,CAAA,EAAAy4T,IAAA,K,CACH,IAAsBggM,YAAoC,CACtD,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAAsB98W,QAAwB,CAC1C,OAAO,KAAK/0J,MAAM2tiB,aAAanwiB,QAAQyyd,OAAOl7T,QAAU,EAC5D,CAEA,IAAsBxyI,QAAwB,CAC1C,OAAO2wI,GACH3nH,GAAO,CAAC8nH,GAAQ,KAAK0B,MAAM,EAAG1B,GAAO,KAAK0B,MAAM,CAAE,GAE1D,CAEA,IAAsB2hX,iBAA0C,CAC5D,GAAM,CAAE3hX,SAAQxyI,UAAW,KACrB,CAAEqogB,UAAStV,UAAS7ob,UAASw3Y,iBAAkB,KAAK4tC,WACpD,CAAEn9e,YAAWC,WAAY83D,EAQ/B,GALIu5e,GAAgCp7C,EAAStV,EAASvgX,IAKlDkvU,EAAe,OAGnB,GAAIx3Y,EAAQo0a,eAAgB,CACxB,GAAM,CAAC54f,EAAO+qC,GAAO+hH,EAAO,EAAE,CAACxwH,KAAKrW,MAAQ,GAU5C,OATqB+3iB,GAAgB,CACjCtoB,gBAAiB11iB,EACjB21iB,cAAe5qgB,EACfkzhB,gBAAiBxxiB,EACjByxiB,cAAexxiB,CACnB,CAEKyxiB,EAEE7wD,IAAoB,CACvB7gf,YACAC,UACAw1C,OAAQmrc,CACZ,GANmB,MAOvB,CAEA,GAAM,CAAEz6gB,EAAGwrkB,EAAQr7gB,EAAGs7gB,GAAWjza,GAAQ9wI,IAASgiB,MAAQ,CAAC,EACrD,CAAE1pC,EAAG0rkB,EAAMv7gB,EAAGw7gB,GAASnza,GAAO9wI,IAASgiB,MAAQ,CAAC,EAEhDkiiB,EAAgBR,GAAgB,CAClCtoB,gBAAiB0oB,EACjBzoB,cAAe2oB,EACfL,gBAAiBxxiB,EACjByxiB,cAAexxiB,CACnB,GACM+xiB,EAAgBT,GAAgB,CAClCtoB,gBAAiB2oB,EACjB1oB,cAAe4oB,EACfN,gBAAiBxxiB,EACjByxiB,cAAexxiB,CACnB,GAEA,GAAK8xiB,GAAkBC,EAEvB,OAAOnxD,IAAoB,CACvB7gf,YACAC,UACAw1C,OAAQmrc,CACZ,EACJ,CAEA,IAAsBy4B,gBAAyC,CAC3D,GAAM,CAAEnjB,UAAStV,UAASwV,cAAe,KAAK9qhB,MAAM6xgB,WAE9Cj6W,EAAU,CAACgzX,EAAStV,EAASwV,CAAW,EAAC7me,OAC1CkmB,GAAW,CAACA,EAAOk9X,WAAa,CAACl9X,EAAOm9X,YAC7C,EAEMq/H,EAAsB/ua,EAAQqK,MAC/B93F,GAAWA,EAAOw9X,0BACvB,EAKA,GAAI,CAJwB/vS,EAAQtlC,KAC/BnoD,GAAWA,EAAOw9X,0BAGlBi/H,EAAqB,OAE1B,IAAM5gD,EAAUhzX,GACZ4E,EAAQnrJ,IAAK09D,GACTA,EAAOw9X,2BACDx9X,EAAOygG,sBACPrrB,SAId,MAAO,CACHgkI,KAAMojT,EACAtyG,GAAkBwF,KAClBxF,GAAkBuF,aACxBjpZ,KAAM6mZ,GAA0BwuD,EAAS,CACrCzuD,OAAQyuD,EAAQzqhB,OAAS,CAC7B,EACJ,CACJ,CAEA,IAAsBwqkB,yCAAmD,CACrE,OAAO,KAAKh4B,gBAAgBxqR,OAAS8wM,GAAkBuF,YAC3D,CAEA,IAAsBp2H,QAAuB,CACzC,OAAOxwM,GAAiB,CAAC,KAAK0jX,gBAAiB,KAAKq3B,cAAe,EACvE,CAEA,IAAsB7pZ,UAAmB,CACrC,GAAM,CAAEz3D,UAAS6ob,UAASsV,WAAY,KAAK/Y,WACrC,CAAEn9e,YAAWC,UAASkse,kBAAmBp0a,EAEzCo6e,EAAeb,GACjBp7C,EACAtV,EACA,KAAKvgX,MACT,EAEIk3S,EAWJ,MAVA,CAKIA,EALA46H,EACQt7hB,GAAS,CAAC,KAAKwpH,OAAO,EAAE,CAACxwH,KAAK1pC,EAAG,KAAKk6J,OAAO,EAAE,CAACxwH,KAAKymB,CAAE,GACxD,KAAK6md,WAAW5tC,cACf14b,GAAO2nH,GAAe,KAAK3wI,OAAO9V,IAAK4I,GAAMA,EAAEkvB,KAAKymB,CAAC,IAErDzf,GAAO2nH,GAAe,CAACx+H,EAAWC,CAAQ,IAGpCmyiB,IAAY76H,EAAOqpE,EAAS,CAAEuxD,cAAa,CAEtDhpB,GAAah9C,EAAiB,wBAA0B,GACnE,CAEAtvT,QAA6C,CACzC,GAAM,CAAEw0X,2CAA4C,KAC9C,CAAEl0D,aAAY87B,gBAAiB,KAAK3tiB,MAEpC,CAAExC,SAAQikF,WAAUysd,UAAWP,EACrC,GAAI,CAACnwiB,EAAQ,OAAO,KAEpB,IAAMupkB,EAAqB,KAAKrwD,kBAAoBn3X,OAEpD,OACIokJ,UAACwyJ,GAAD,CACI1hc,GAAI,KAAKuL,MAAMvL,GACfsle,eAAgB83C,EAAWplb,QAC3B5xF,EAAG4mF,EAAS5mF,EACZmwD,EAAGy2B,EAASz2B,EACZo2I,QAAS,GACTD,QAAS,IACTj1G,MAAO,CAAE0nP,SAAU,OAAQ,EAC3BjwL,MAAOnmJ,EAAOyyd,OAAO7pT,MACrBliB,SAAU,KAAKA,SACfm1U,SAAU60E,EACV1qM,OAAQ,KAAKA,OACbokJ,YAAgB+lD,EAAanwiB,OAAS,KAZ1C0zG,SAAA,EAcIgrG,SAAC8qX,IAAD,CACgBn1D,aACZ98W,OAAQ,KAAKA,OACbxyI,OAAQ,KAAKA,OAETwjjB,0CAEJkB,kBAAmBF,CACtB,IACD7qX,SAACgrX,IAAD,CACgBr1D,aACZ98W,OAAQ,KAAKA,OACbxyI,OAAQ,KAAKA,OAETwjjB,0CAEJkB,kBAAmBF,CACtB,IACD7qX,SAACirX,IAAD,CACgBt1D,aACZtvf,OAAQ,KAAKA,OAETwjjB,yCAEP,IACD7pX,SAACkrX,IAAD,CACgBv1D,aACZtvf,OAAQ,KAAKA,MAChB,EACI,C,EAEjB,C,aACJ,GAEA,SAASykjB,IAAmB,CACxBn1D,aACA98W,SACAxyI,SACAwjjB,0CACAkB,qBAAA,CAEA,GAAM,CAAEr8C,WAAY/Y,EAEpB,GAAI+Y,EAAQvjF,WAAaujF,EAAQtjF,aAAc,OAAO,KAEtD,GAAM,CAAE/kb,OAAQo6f,EAASj0E,gBAAgB,IAAO2+H,IAC5Cx1D,EACA98W,EACAxyI,GAGE+kjB,EAAyBL,EACzBv+H,EAAcj8b,IAAK83B,GAAS8la,IAAW9la,EAAMqmf,IAC7C,GAEN,OACI1uU,SAACq5Q,GAAD,CACInvT,MAAOwkX,EAAQpoF,YACft5a,KAAM0hgB,EAAQhjF,YACdrlb,OAAQq1c,GAAyB+kD,EAASiO,GAC1Cn1D,MAAO5wT,GAAwB83W,EAAQ,GAAIA,EAAQ,GAAK7ohB,GACpD82hB,EAAQj7M,iBAAiB77U,IAE7B40c,cAAe4+H,EACfnyG,4BACI4wG,GACAn7C,EAAQjjF,0BAEf,EAET,CAEA,SAASu/H,IAAmB,CACxBr1D,aACA98W,SACAxyI,SACAwjjB,0CACAkB,qBAAA,CAEA,GAAM,CAAE3xD,WAAYzD,EAEpB,GAAIyD,EAAQjuE,UAAW,OAAO,KAE9B,GAAM,CAAE9kb,OAAQs0J,EAAS6xR,gBAAgB,IAAO6+H,IAC5C11D,EACA98W,EACAxyI,GAGE+kjB,EAAyBL,EACzBv+H,EAAcj8b,IAAK83B,GAAS8la,IAAW9la,EAAM+we,IAC7C,GAEN,OACIp5T,SAACq5Q,GAAD,CACInvT,MAAOkvW,EAAQ9yE,YACft5a,KAAMosf,EAAQ1tE,YACdrlb,OAAQq1c,GAAyB/gT,EAASy+V,GAC1C7/C,MACI5+S,EAAQt7K,SAAW,EACbspK,GAAwBgS,EAAQ,GAAIA,EAAQ,GAAK/iL,GAC7CwhhB,EAAQ3lM,iBAAiB77U,IAE7ByrJ,OAEVmpT,cAAe4+H,EACfnyG,4BACI4wG,GACAzwD,EAAQ3tE,0BAEf,EAET,CAEA,SAASw/H,IAAsB,CAC3Bt1D,aACAtvf,SACAwjjB,2CAAA,CAEA,GAAM,CAAEj7C,cAAejZ,EAEvB,GAAIiZ,EAAWzjF,UAAW,OAAO,KAEjC,IAAMmgI,EAAat0a,GAAe3wI,EAAO9V,IAAK4I,GAAMA,EAAEhH,IAAI,GAE1D,OACI6tM,SAACq5Q,GAAD,CACInvT,MAAO0kX,EAAWtoF,YAClBt5a,KAAM4hgB,EAAWljF,YACjBrlb,OAAQq1c,GAAyB4vG,EAAY18C,GAC7Cr1D,MACI+xG,EAAWjskB,SAAW,EAChBspK,GACI2ia,EAAW,GACXA,EAAW,GACV1zkB,GAAUg3hB,EAAWn7M,iBAAiB77U,IAE3CyrJ,OAEV41U,4BACI4wG,GACAj7C,EAAWnjF,0BAElB,EAET,CAEA,SAASy/H,IAAkB,CACvBv1D,aACAtvf,UAAA,CAEA,GAAM,CAAE8wf,cAAaM,cAAe9B,EAEpC,GAAIwB,EAAYhsE,WAAagsE,aAAuBljE,GAAcK,UAC9D,OAAO,KAGX,IAAMqkE,EADQtyf,EAAO61I,GAAG,EACLtkK,GAAOiwN,MAC1B,GAAI,CAAC8wT,EAAY,OAAO,KAIxB,IAAMp5F,EADMk4F,EAAWtjM,eAAewkM,CACjB/vO,GAAK1+H,OAASyuW,EAAWzkhB,SAAA,EAE9C,OACI8rN,SAAC+4Q,GAAD,CACI7uT,MAAOutW,EAAWtuO,mBAAqBguO,EAAY7wE,YACnD1uc,MAAO2nb,CACV,EAET,CAOA,SAASuqJ,GACLp7C,EACAtV,EACAvgX,EAAA,CAGA,GAAIA,EAAOx5J,SAAW,EAAG,MAAO,GAGhC,IAAMkskB,EAAO78C,EAAQpsZ,IACfkpc,EAAOpyD,EAAQ92Y,IAIrB,GAFIipc,EAAKvsF,iBAAmB37V,QACxBkob,EAAKvsF,iBAAmBwsF,EAAKxsF,eACZ,MAAO,GAG5B,IAAM1sV,EAAQuG,EAAO,GAMrB,OAJIvG,EAAMjqH,KAAK1pC,IAAM2zJ,EAAMjqH,KAAKymB,GAC5Bzf,GAAWijH,EAAMjqH,KAAK1pC,CAAC,GACvB0wC,GAAWijH,EAAMjqH,KAAKymB,CAAC,CAG/B,CAEA,SAASi7gB,GAAgB,CACrBtoB,kBACAC,gBACAsoB,kBACAC,iBAAA,CAYA,OAJIxoB,IAAoBp+Z,QAAao+Z,IAAoBuoB,GAErDtoB,IAAkBr+Z,QAAaq+Z,IAAkBuoB,CAGzD,CAEA,SAASW,IACL76H,EACA9hY,EACA,CAAE08f,eAAe,IAAsC,CAAC,GAExD,GAAI56H,EAAM1wc,SAAW,EAAG,MAAO,GAC/B,GAAI0wc,EAAM1wc,SAAW,EAAG,OAAO4uE,EAAOkgY,WAAW4B,EAAM,EAAE,EAEzD,GAAM,CAACv3a,EAAWC,GAAWs3a,EAC7B,OAAO46H,EACD18f,EAAOsgY,qBAAqB/1a,EAAWC,GACvCw1C,EAAOqgY,gBAAgB91a,EAAWC,EAC5C,CAEA,SAAS4gf,IAAoB,CACzB7gf,YACAC,UACAw1C,UAAA,CAMA,IAAMu2f,EAAeoG,IACjBv7hB,GAAO2nH,GAAe,CAACx+H,EAAWC,CAAQ,IAC1Cw1C,GAGJ,MAAO,CACHo5M,KAAM8wM,GAAkBsF,OACxBhpZ,KAAM2mZ,GAA2BopG,EACrC,CACJ,CAEA,SAAS2G,IACLx1D,EACA98W,EACAxyI,EAAA,CAKA,GAAM,CAAEqogB,UAAStV,UAAS7ob,WAAYolb,EAChC,CAAEn9e,YAAWC,UAASkse,kBAAmBp0a,EAEzCurY,EAAa3kU,GAAQ9wI,GACrBmoN,EAAYr3E,GAAO9wI,GAEzB,GAAI,CAACy1c,GAAc,CAACttP,EAAW,MAAO,CAAEnoN,OAAQ,GAAImmb,cAAe,EAAG,EAItE,GAAIs9H,GAAgCp7C,EAAStV,EAASvgX,GAAS,CAC3D,IAAMvG,EAAQuG,EAAO,GAKrB,MAAO,CAAExyI,OAHLisI,EAAMjqH,KAAK1pC,EAAI2zJ,EAAMjqH,KAAKymB,EACpB,CAACwjG,EAAM3zJ,EAAG2zJ,EAAMxjG,CAAC,EACjB,CAACwjG,EAAMxjG,EAAGwjG,EAAM3zJ,CAAC,EACV6tc,cAAe,EAAG,CACvC,CAEA,IAAM29H,EAASruG,EAAWzzb,KAAK1pC,EACzB0rkB,EAAO77V,EAAUnmM,KAAK1pC,EAEtB8hhB,EAAU0pD,IAAWE,EAAO,CAACvuG,EAAWn9d,CAAC,EAAI0nB,EAAO9V,IAAK4I,GAAMA,EAAExa,CAAC,EA0BxE,OAxBIgmgB,EAOO,CAAEt+e,OAAQo6f,EAASj0E,cANJi/H,IAAgC,CAClDz5iB,KAAM8pc,EAAWzzb,KAAKrW,KACtBwG,YACAC,SACJ,CAE0B+za,CAAc,EAiBrC,CAAEnmb,OAAQo6f,EAASj0E,cAbLu9H,GAAgB,CACjCtoB,gBAAiB0oB,EACjBzoB,cAAe2oB,EACfL,gBAAiBxxiB,EACjByxiB,cAAexxiB,CACnB,CAEsByxiB,EAChBC,IAAWE,EACP,CAACA,CAAI,EACL,CAACF,EAAQE,CAAI,EACjB,EAEkC,CAC5C,CAEA,SAASgB,IACL11D,EACA98W,EACAxyI,EAAA,CAKA,GAAM,CAAEqogB,UAAStV,UAAS7ob,WAAYolb,EAChC,CAAEn9e,YAAWC,UAASkse,kBAAmBp0a,EAG/C,GAAIolb,EAAW5tC,cACX,MAAO,CAAE1hd,OAAQA,EAAO9V,IAAK4I,GAAMA,EAAE21C,CAAC,EAAG09Y,cAAe,EAAG,EAK/D,GAAIs9H,GAAgCp7C,EAAStV,EAASvgX,GAElD,MAAO,CAAExyI,OAAQ,GAAImmb,cAAe,EAAG,EAG3C,IAAMsvB,EAAa3kU,GAAQ9wI,GACrBmoN,EAAYr3E,GAAO9wI,GAEzB,GAAI,CAACy1c,GAAc,CAACttP,EAChB,MAAO,CAAEnoN,OAAQ,GAAImmb,cAAe,EAAG,EAG3C,IAAM49H,EAAStuG,EAAWzzb,KAAKymB,EACzBw7gB,EAAO97V,EAAUnmM,KAAKymB,EAEtB6rH,EAAUyvZ,IAAWE,EAAO,CAACxuG,EAAWhta,CAAC,EAAIzoC,EAAO9V,IAAK4I,GAAMA,EAAE21C,CAAC,EA0BxE,OAxBI61c,EAOO,CAAEt+e,OAAQs0J,EAAS6xR,cANJi/H,IAAgC,CAClDz5iB,KAAM8pc,EAAWzzb,KAAKrW,KACtBwG,YACAC,SACJ,CAE0B+za,CAAc,EAiBrC,CAAEnmb,OAAQs0J,EAAS6xR,cAbLu9H,GAAgB,CACjCtoB,gBAAiB2oB,EACjB1oB,cAAe4oB,EACfN,gBAAiBxxiB,EACjByxiB,cAAexxiB,CACnB,CAEsByxiB,EAChBE,IAAWE,EACP,CAACA,CAAI,EACL,CAACF,EAAQE,CAAI,EACjB,EAEkC,CAC5C,CAEA,SAASmB,IAAgC,CACrCjziB,YACAC,UACAzG,QAAA,CAMA,GAAI,CAACA,EAAM,MAAO,GAElB,GAAM,CAAC05iB,EAAWC,GAAW35iB,EAQ7B,OAPqB+3iB,GAAgB,CACjCtoB,gBAAiBiqB,EACjBhqB,cAAeiqB,EACf3B,gBAAiBxxiB,EACjByxiB,cAAexxiB,CACnB,CAEOyxiB,EACDwB,IAAcC,EACV,CAACA,CAAO,EACR,CAACD,EAAWC,CAAO,EACvB,EACV,CAEA,SAASx9H,IACL9la,EACA4lC,EAAA,CAEA,GAAI5lC,IAASg7G,OACb,OAAOp1E,EAAOkgY,WAAW9la,EAC7B,C,80GCjhBYwzK,cAAMpoG,UAANooG,I,KADL,cACKA,I,wCAFX5zH,C,IAoCI0qC,E,EAAagjZ,Y,GAIbhjZ,E,EAAqBpiC,S,GAIrBoiC,E,EAAqB8kZ,Y,GAIrB9kZ,E,EAAqB0hW,kB,IAIrB1hW,IAASq1Z,M,KAAmB/qW,Q,GAI5BtqD,E,EAAqBqjZ,a,GAWrBrjZ,E,EAAao5Z,Y,GAIbp5Z,E,EAAqB04Y,U,GAIrB14Y,E,EAAqBi5c,e,IAMrB/0d,IAAOo6D,K,KAAcigU,gB,GAOrBv+W,E,EAAqBk5c,a,GAoBrBl5c,E,EAAaqrN,2B,GAIbrrN,E,EAAaqqD,U,GAIbrqD,E,EAAag3X,kB,IAIb9yY,IAAOo6D,K,KAAM6vZ,mB,IAKbjqd,IAAOo6D,K,KAAM8vZ,oB,IAMblqd,IAAOo6D,K,KAAM66Z,e,GA8Bbn5c,E,EAAqBiiW,oB,GAmBrBjiW,E,EAAqBkiW,mB,GASrBliW,E,EAAqBq1U,qB,GAIrBr1U,E,EAAaoyc,kB,GAMbpyc,E,EAAaqyc,gB,GAMbryc,E,EAAqBo5c,a,IAarBl1d,IAAOo6D,K,KAAc+6Z,qB,IAIrBn1d,IAAOo6D,K,KAAcg7Z,qB,IAIrBp1d,IAAOo6D,K,KAAci7Z,oB,IASrBr1d,IAAOo6D,K,KAAck7Z,gB,GAKrBx5c,E,EAAay2c,e,GAIbz2c,E,EAAqBiuc,0B,GAYrBjuc,E,EAAqB8tc,gB,GAIrB9tc,E,EAAqBguc,iB,GAIrBhuc,E,EAAqB+tc,iB,IAIrB/tc,IAASq1Z,M,KAAW+1B,c,GAiBpBprb,E,EAAa8iZ,U,GAUb9iZ,E,EAAa4yY,O,GAIb5yY,E,EAAa6zY,O,IAIb3vZ,IAAOo6D,K,KAAcm7Z,mB,GAMrBz5c,E,EAAa4tc,c,GAyCb5tc,E,EAAqB6tc,2B,GAOrB7tc,E,EAAqB26Z,2B,GAIrB36Z,E,EAAqBszc,mB,GAIrBtzc,E,EAAqBg9L,U,GA4DrBh9L,E,EAAqBkmC,Q,GA4BrBlmC,E,EAAqBskZ,iB,GAIrBtkZ,E,EAAqBwkZ,a,GAIrBxkZ,E,EAAqB2pb,uB,GAQrB3pb,E,EAAqB8mb,a,GAIrB9mb,E,EAAaozc,W,GAMbpzc,E,EAAqBqzc,W,GAuBrBrzc,E,EAAqB05c,Y,GAQrB15c,E,EACW25c,6B,GAgBX35c,E,EAAqB45c,kB,GAQrB55c,E,EAAqB+ua,U,GAsJrB/ua,E,EAAqBknU,S,GAUrBlnU,E,EAAqBi8a,S,GAIrBj8a,E,EAAqBm9a,S,GAIrBn9a,E,EAAqBmlZ,a,GASrBnlZ,E,EAAqBm8Z,a,GASrBn8Z,E,EAAqBymZ,S,GAIrBzmZ,E,EAAqB+7Z,S,GAIrB/7Z,E,EAAai8Z,Y,GAIbj8Z,E,EAAa67Z,sB,GAIb77Z,E,EAAas8Z,W,GAIbt8Z,E,EAAqB65c,W,GAIrB75c,E,EAAqBknb,kB,GAIrBlnb,E,EAAqBinb,oB,GAIrBjnb,E,EAAqBohW,Q,CA/uBdl4Q,gB,CAOR,YAAY/3M,EAA8B,CACtC,MAAMA,GAENyxL,EAAuD,KAAM,CACzDk3Y,mBAAoBrpZ,EACpBquX,aAAcruX,CAClB,EACJ,CAEA80Q,qBAA6Bz/R,MAC7B+7T,UAA6B/7T,KAG7Bg0a,mBAAgDppb,OAEhDouZ,aAAe,IAAIt1E,GAInBklG,kBAAuC,CACnCz+O,OAAQ,CACJuwN,QAAS,CAAE1vY,QAAS49W,GAAsB,EAC1C+mB,MAAO,CAAExmhB,KAAMwjjB,GAA6B,CAChD,EACA3wf,KAAM,CAAE2zd,MAAO,CAAEvgV,MAAOu9E,GAAQ,EAAG16E,YAAa,CAAE7C,MAAOm9E,EAAS,CAAE,CACxE,EAEA,IAAc2wO,YAAoC,CAC9C,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAAsBplb,SAA8B,CAChD,OAAO,KAAKolb,WAAWplb,OAC3B,CAEA,IAAsBknb,YAAyB,CAC3C,OAAO,KAAK9B,WAAW8B,UAC3B,CAEA,IAAsBpjD,kBAA8B,CAChD,OAAO,KAAKshD,WAAWthD,gBAC3B,CAEA,IAA6Bp3S,QAAiB,CAC1C,OAAO,KAAKn5K,MAAMm5K,QAAUkjR,EAChC,CAEA,IAAsB61E,aAAsB,CACxC,OACI,KAAK/4V,OACAm/X,SAAS,KAAK2B,aAAe,EAAI,KAAKA,aAAe,GAAK,GAE1DrxB,OAAO,KAAK/W,WAAW+Z,kBAAoB,EAAI,GAE/C2sB,UAAU,EAEvB,CAEA,IAActwB,YAAqB,CAC/B,OAAO,KAAK/V,WAChB,CAEA,IAAsB3K,UAAoB,CACtC,MAAO,CAAC,CAAC,KAAK96a,QAAQ86a,QAC1B,CAEA,IAAsBugE,eAAyB,CAC3C,GAAM,CAAEc,kBAAmB,KAAKn8e,QAChC,OAAQm8e,GACJA,IAAmB/3b,GAAoBg4b,QAC/C,CAEsBz7F,eAAelwC,EAA8B,CAC3D,KAAK4qI,eACL,KAAKj2D,WAAWtsC,eAAe9gC,gBAAgBvH,EACvD,CAIA,IAAsB6qI,aAAuB,CACzC,IAAM31D,EACF,KAAK3lb,QAAQq8e,iDAAiD5vkB,IAC1D,KAAKi6gB,eACT,GAAG/qE,4BAA8B,GASrC,OAAOusE,IANiBrngB,IACpB8kgB,EAAU3lgB,IAAK3Y,GACXsyc,GAAgBtyc,GAASA,EAAQyrJ,OAIlCo1X,EACFpyf,OAAA,EACA9V,IAAKoogB,GAAe,KAAKlB,WAAWrjM,SAASukM,IAC7C5wd,OAAQ8/J,GAAUA,IAAUxkE,QAC5BqhI,QAAA,CACT,CAEA,IAAcs5D,2BAAsC,CAChD,OAAO,KAAKztP,QAAQytP,2BAA6B,EACrD,CAEA,IAAchhK,UAAmB,CAC7B,OAAO,KAAKzsF,QAAQysF,YACxB,CAEA,IAAc2sU,kBAA4B,CACtC,MAAO,CAAC,CAAC,KAAKp5Z,QAAQo5Z,gBAC1B,CAEcm3E,kBAAkBl4R,EAA0B,CAClD1vI,OACJ,KAAKuza,mBAAqB7jS,EAAI/gF,MAClC,CAEck5W,oBAA2B,CACjC7na,OACJ,KAAKuza,mBAAqBppb,OAC9B,CAGcyob,cAAcljS,EAA0B,CAClD,GAAM,CAAEygM,kBAAmB,KAAKssC,WAChC,GAAI,CAAC,KAAKi2D,cAAe,OAEzB,IAAM/jX,EAAQ+gF,EAAI/gF,MAGZglX,EAA2B,KAAK94G,OACjChsa,OAAQ4G,GAAMA,EAAEk5J,QAAUA,GAC1Bt3M,IAAKo+C,GAAMA,EAAEqla,UAAU,EAIxB3gd,GAAaw5jB,EAA0B,KAAK7kI,mBAAmB,EAC1D3oc,SAAWwtkB,EAAyBxtkB,OAKzCgqe,EAAejhC,oBACX/4Z,IAAU,KAAK24Z,oBAAA,GAAwB6kI,IAG3CxjG,EAAejhC,oBACX/4Z,GACI,KAAK24Z,oBAAoBjnc,OAAO8rkB,IAGhD,CAEA,IAAsBj4G,oBAA+B,CACjD,GAAM,CAAE63G,qBAAoBh7B,gBAAiB,KAEvC78E,EACF63G,IAAuBppb,OACjB,GACAh0G,GACI,KAAK0kb,OACAhsa,OAAQ4G,GAAMA,EAAEk5J,QAAU4kX,GAC1Bl8jB,IAAKo+C,GAAMA,EAAEqla,UAAU,GAO1C,OAJIy9E,EAAanwiB,QACbszd,EAAmBv0d,KAAKoxiB,EAAanwiB,OAAOyyd,OAAOC,UAAU,EAG1DY,CACX,CAEA,IAAsBC,mBAA6B,CAC/C,GAAM,CAAE43G,qBAAoBh7B,gBAAiB,KAC7C,MAAO,CAAC,EACJg7B,IAAuBppb,QACvB,KAAKuxU,mBAAmBv1d,OAAS,GACjCoyiB,EAAanwiB,OAErB,CAEA,IAAsB0mc,qBAAgC,CAClD,OAAO,KAAK2tE,WAAWtsC,eAAerhC,mBAC1C,CAEA,IAAc+8H,kBAA2B,CACrC,OAAO,KAAK1wG,iBAAiBpU,WAAW9R,WACpC,KAAKkmB,iBAAiBljT,SAAW,KAEzC,CAEA,IAAc6zZ,gBAAyB,CACnC,OAAO,KAAK3wG,iBAAiBpU,WAAW9R,WACpC,KAAKkmB,iBAAiBhjT,SAAW,IAEzC,CAEA,IAAsB06Z,aAAkD,CACpE,GACI,OAAKhH,mBAAqB,KAAKC,gBAC/B,KAAKt2C,QAAQtjF,cACb,KAAKguE,QAAQhuE,cACb,KAAK76W,QAAQo0a,gBACb,CAAC,KAAKp0a,QAAQmrd,YAIlB,OAAO,IAAIipB,IAAuB,IAAI,CAC1C,CAEsBqH,oBAAoBj4G,EAA6B,CACnE,KAAK09E,aAAanwiB,OAAS,CAAEyyd,QAAO,CACxC,CAEsBk4G,qBAA4B,CAC9C,KAAKx6B,aAAanwiB,OAAS,IAC/B,CAEsB4qkB,mBAClB99f,EACI,CACJ,IAAM/7C,EAAM,KAAKk+D,SAAS9uE,MAAM5lB,QAC5Bw2B,IACA,KAAKo/gB,aAAalsd,SAAWusE,GAAiBz/H,EAAK+7C,GAE3D,CAEsB+9f,gBAAuB,CACzC,GAAM,CAAE7qkB,UAAW,KAAKmwiB,aACpBnwiB,GAAQ,KAAK4ve,eAAe5ve,EAAOyyd,OAAOC,UAAU,CAC5D,CAEA,IAAco1G,eAA2C,CACrD,OAAO,KAAK33B,aAAanwiB,QAAQyyd,MACrC,CAEA,IAAsB6sG,0BAEN,CACZ,GAAI,KAAKtkB,sBAAsBj9iB,SAAW,GAAM,KAAKkxF,QAAQmrd,WAE7D,OAAO,IAAIsjB,IAAyB,KAAK1iB,sBAAuB,CAC5D/kF,aAAc,KAAKv6S,SACnB06J,SAAU,KAAK+oP,eACfh5a,MAAO,KAAKgyZ,WAChB,EACJ,CAEA,IAAsBgnB,gBAAyB,CAC3C,OAAO,KAAKC,eAChB,CAEA,IAAsBC,iBAA0B,CAC5C,OAAO1sa,KAAKh1J,IAAI,KAAKg+K,OAAOtgG,MAAQ,GAAK,GAC7C,CAEA,IAAsB+jf,iBAA0B,CAC5C,OAAOzsa,KAAKh1J,IAAI,KAAKg+K,OAAOtgG,MAAQ,GAAK,KAAKgkf,eAAe,CACjE,CAEA,IAAqB5iB,cAAuB,CACxC,GAAM,CAAE4iB,kBAAiBD,mBAAoB,KAa7C,MATI,CAAC,KAAKE,0BACN,CAAC,KAAKyL,YACN,CAAC,KAAKN,aACN,CAAC,KAAKQ,iBAEC,EAIJl9hB,GAFkB,KAAKuxhB,0BAA0Bjkf,OAAS,EAEhCgkf,EAAiBD,EACtD,CAEA,IAAcjrD,UAAqB,CAC/B,GAAM,CAAEmkC,qBAAoBC,oBAAqB,KACjD,OAAO,IAAIxtB,GAAS,CAChBpvW,OAAQ,KAAK8uW,WACbnW,eAAgBgkC,EAChB/jC,aAAcgkC,EACdrtB,gBAAiB,KAAKj8b,QAAQi8b,eAClC,EACJ,CAEA,IAAcjnB,OAAsB,CAChC,OAAO,KAAKkQ,SAASI,YACzB,CAEA,IAAcrP,OAAwB,CAClC,OAAO,KAAKiP,SAASG,cACzB,CAEsBw2D,mBAA0B,CAC5C,KAAK77e,QAAQi+b,qBACT,CAAC,KAAKA,sBAAwBnrY,MACtC,CAGA,IAAck9a,cAAyB,CACnC,GAAM,CAAE3rG,qBAAoB5sB,sBAAqBykI,sBAC7C,KAEEK,EAAkB,IAAI17jB,IAExBq7jB,IAAuBppb,QACvBypb,EAAgBt7jB,IAAIi7jB,GAGxB,IAAMM,EAAoBn4G,EAAmB7zd,OAAOinc,GACpD,GAAI+kI,EAAkB1tkB,OAAS,EAAG,CAC9B,IAAM2tkB,EAAe,KAAKj5G,OAAOhsa,OAAQ4G,GACrCo+gB,EAAkBt6c,SAAS9jE,EAAEqla,UAAU,GAGrCykD,EAAc,IAAIrngB,IACpB47jB,EAAa1la,QAAS/3H,GAAMA,EAAEspH,OAAOtoJ,IAAKyN,GAAMA,EAAE6pM,KAAK,IAG3D,IAAK,IAAMA,KAAS4wT,EACfpyf,OAAA,EACA9V,IAAKs3M,GAAU,KAAK4vT,WAAWrjM,SAASvsH,IACxC9/J,OAAQ8/J,GAAUA,IAAUxkE,QAC7Bypb,EAAgBt7jB,IAAIq2M,EAE5B,CAKA,OAFIilX,EAAgB36jB,OAAS,EAAU,KAAK05jB,YAErC5ua,MAAMxnI,KAAKq3iB,EACtB,CAEArL,yBACI74R,GAEiB,KAAK23R,aAAa9tc,SAASm2K,EAAI/gF,KACzCmiN,EAAW4pG,EAAS2f,YAAc3f,EAAS4f,MAGtD,IAAsBgtC,2BAAyC,CAC3D,OAAOtuB,GACH,KAAKoK,sBACL,KAAKmlB,wBACT,CACJ,CAEA,IAAsBn0C,2BAAqC,CACvD,MAAO,CAAC,CAAC,KAAK/8b,QAAQ+8b,yBAC1B,CAEA,IAAsB24C,mBAA6B,CAC/C,MAAO,CAAC,CAAC,KAAK11e,QAAQ01e,iBAC1B,CAEA,IAAsBt2Q,UAA+C,CACjE,GAAM,CACFokK,OAAQ6xG,EACRnwD,SAAU,CAAEG,iBAAgBC,eAAcG,gBAC1C,KAEExP,EAAQoP,EAAe3jgB,MAAA,EAC7Bu0f,EAAMz2a,MAAQimb,EAAYkF,OAAA,EAC1B,IAAM3V,EAAQsQ,EAAa5jgB,MAAA,EAC3Bszf,EAAMx1a,MAAQimb,EAAYiF,OAAA,EAE1B,IAAMhjb,EAAoC2te,EAAYt+Z,QACjDysT,IACG,IAAMl7T,EAASk7T,EAAOl7T,OAAOtoJ,IAAK+hJ,GACvB,IAAI7B,GACP+1W,EAAM4e,MAAM9yX,EAAM3zJ,CAAC,EACnB4mgB,EAAM6f,MAAM9yX,EAAMxjG,CAAC,EAE3B,EAWA,OARI+pG,EAAOx5J,OAAS,EACTw5J,EAAOtoJ,IAAK+hJ,IAAW,CAC1ByhU,SACAp1d,EAAG2zJ,EAAM3zJ,EACTmwD,EAAGwjG,EAAMxjG,CACb,IAGGs5D,IAAMywC,GAAQyO,SAAS,CAACxpJ,EAAGC,KAAA,CAC9B,IAAMkvjB,EACE,EACAh5a,KAAKx1J,MACDgyJ,GAAYj3E,SAAS17D,EAAGC,KACpBmvjB,EAEZC,EAAYt5R,GACR,CAAEl1S,EAAGmf,EAAEnf,EAAGmwD,EAAGhxC,EAAEgxC,CAAE,EACjB,CAAEnwD,EAAGof,EAAEpf,EAAGmwD,EAAG/wC,EAAE+wC,CAAE,GAOzB,OALas+gB,IACJC,GAAgBh+hB,GAAQ89hB,EAAUE,IACnCJ,CAGDK,EAAO/8jB,IAAK+hJ,IAAW,CAC1ByhU,SACAp1d,EAAG2zJ,EAAM3zJ,EACTmwD,EAAGwjG,EAAMxjG,CACb,GACJ,EACJ,GAGJ,OAAO6gQ,KACFhxT,GAAG,CAAEA,OAAQA,GACbmwD,GAAG,CAAEA,OAAQA,GACbs/P,OAAOn2N,EAChB,CAEA,IAAsB4gE,QAA6B,CAC/C,OACImnD,SAACutX,GAAD,CACIlF,qBAAsB,KAAK93e,QAC3By+b,YAAa,KAAKrZ,WAAWqZ,YAC7B1B,0BAA2B,KAAKA,0BAChCs4C,YAAa,KAAK7xG,OAClB0hD,SAAU,KAAKA,SACfgC,WACK,KAAKN,YAAYhsE,UAA8B9nT,OAAlB,KAAKo0X,WAEvCsuD,UAAW,KAAKA,UAChBC,UAAW,KAAKA,UAChBzuG,aAAc,KAAKv6S,SACnB6oZ,mBAAoB,KAAK79H,oBACzB4sB,mBAAoB,KAAKA,mBACzBC,kBAAmB,KAAKA,kBACxBixG,kBAAmB,KAAKsD,eAAep1G,WACvCiyG,kBAAmB,KAAKA,kBACxBC,iBAAkB,CAAC,KAAK31e,QAAQsqd,iBAChCr8C,aAAc,KAAKwtE,oBACnBlzX,aAAc,KAAKmzX,oBACnB72N,QAAS,KAAK+2N,eACdx8Q,SAAU,KAAKA,QAClB,EAET,CAEA,IAAsBsnN,iBAAsC,CACxD,OAAO,KAAKtB,WAAWsB,eAC3B,CAEA,IAAsBE,aAA0B,CAC5C,OAAO,KAAKxB,WAAWwB,WAC3B,CAEA,IAAsBmlC,uBAAyC,CAC3D,OAAO,KAAK7kC,WAAWhlM,WAAW1qR,OAC7B6gP,GACG,KAAKijS,YAAYp5c,SAASm2K,EAAI/gF,KAAK,GACnC+gF,EAAI1+H,iBAAU++H,CAE1B,CAEA,IAAsBwwQ,aAAkC,CACpD,OAAO,KAAKhiC,WAAWtuO,iBAC3B,CAEA,IAAc48R,WAAyC,CACnD,OAAOyH,KACFthhB,OAAO,KAAKypd,WAAW2Z,UAAU,EACjCv/b,MAAM,KAAKy8e,SAAS,CAC7B,CAEA,IAAsBxG,WAAyC,CAC3D,IAAMyH,EAAkBp2G,GACpBmqD,GACA,KAAKxkW,QACT,EACM8tW,EAAU,KAAKv6b,QAAQytZ,SACvBwjC,MAEA59f,EAAU,KAAK2sE,QAAQytZ,SACvBwjC,MAEA4Y,EAAc/iE,GAAcyzD,EAAS,KAAK9tW,QAAQ,EAClD0/J,EAAc26I,GAAczzc,EAAS,KAAKo5J,QAAQ,EACxD,OAAOwwZ,KACFthhB,OAAO,KAAKypd,WAAW2Z,UAAU,EACjCv/b,MACG,KAAK6+b,WAAWzjF,UAEV,CAACsiI,EAAiBA,CAAe,EACjC,CAACrzC,EAAa19M,CACxB,EACR,CAEA,IAAsB2vP,YAA4C,CAC9D,GAAI,OAAK12D,WAAWqZ,aAAe,KAAKJ,WAAWzjF,aAE9C,KAAK56W,QAAQmrd,YAAe,KAAKnrd,QAAQ0te,oBAE9C,OAAO,IAAI4K,IAAkB,IAAI,CACrC,CAEA,IACYyD,6BAAwC,CAUhD,OAP4Bj9hB,GACxBA,GACI,KAAK24Z,oBACL,KAAK+rB,OAAOxjd,IAAKg/B,GAAMA,EAAEykb,UAAU,IAEzC95V,QAEKwzc,EAAoBn9jB,IAAKywb,GACVyzB,GAAsBzzB,CACjCxsR,GAAawsR,CACxB,CACJ,CAEA,IAAsBurI,kBAA4B,CAC9C,OAAO,KAAKD,4BAA4BjtkB,OAAS,CACrD,CAEA24d,mBAAmC,CAC/BllU,GAAuB,IAAI,CAC/B,CAEA,IAAsB4uY,UAAqB,CACvC,OAAOntE,GAAa,CAAEC,UAAW,KAAKA,UAAW5gR,IAAK,KAAK32B,MAAO,EACtE,CAEA0wZ,eAA2C,CACvC,GAAM,CACF1wZ,SACAovZ,aACAN,cACAnL,2BACA7iB,gBACA,KAEE6vB,EAAuBhN,GAA0BxogB,QAAU,EAC3Dy1gB,EAAmBxB,GAAYj0gB,QAAU,EACzC01gB,EAAoB/B,GAAa3zgB,QAAU,EAG3C21gB,EACF,KAAKn/B,QACLg/B,GACCA,EAAuB,EAAIpT,GAAgB,GAC1CwT,EACFD,EACAF,GACCA,EAAmB,EAAIrT,GAAgB,GACtCyT,EACFD,EACAF,GACCA,EAAoB,EAAItT,GAAgB,GAEvC0T,EAAsB,IAAI7xZ,EAC5B,KAAKyzX,QACLm+B,EACAlwB,EACA9gY,EAAO7kH,OAAS61gB,GAGdE,EAAiBr/gB,GACnBA,EAAImuH,EAAOrqB,KACPotD,SAAC,OAAD,CACIznN,GAAI+6J,EAAY,aAChBipB,GAAI7jB,EAAY,KAAKo3Y,OAAO,EAC5BnzX,GAAIjkB,EAAY5pG,EAAI,CAAM0rgB,EAC1B99Y,GAAIhkB,EAAYukB,EAAOzkD,KAAK,EAC5BokD,GAAIlkB,EAAY5pG,EAAI,CAAM0rgB,EAC1BpzR,OAAO,SACV,GACD,KAER,OACIK,UAAAsxC,WAAA,CAAA/jO,SAAA,CACK4rd,IACG5gX,SAAC4+W,IAAD,CACIxhkB,MAAOwjkB,EACPjikB,EAAG,KAAKmxiB,QACRhhf,EAAG,KAAK8/e,QACRj+L,YAAa,CAAC,KAAK06J,SACnB+mC,YAAa,KAAKivB,kBAClBzuB,YAAa,KAAK4tB,0BAClBzhE,YAAa,KAAK+hE,kBAClBhoX,aAAc,KAAKioX,mBACnB3rN,QAAS,KAAK02N,aACjB,GAEJO,IACG5kS,UAAAsxC,WAAA,CAAA/jO,SAAA,CACK4rd,GAA4BuN,EAAcJ,GAC1C1B,EAAWh3X,OAAO,KAAKy6V,QAASi+B,EACnC,IAELhC,IACGtkS,UAAAsxC,WAAA,CAAA/jO,SAAA,EACM4rd,GAA4ByL,IAC1B8B,EAAcH,IAClBhuX,SAAC,IAAD,CACIn/L,UAAU,YACVu0V,QAAS,KAAKg3N,kBAEbp3d,SAAA+2d,EAAY12X,OAAO,KAAKy6V,QAASk+B,EACnC,EACL,IAEL,KAAKzB,kBAAoB,CAAC,KAAKh8e,QAAQ86a,WACpC5jO,UAAAsxC,WAAA,CAAA/jO,SAAA,EACM4rd,GACEyL,GACAN,IACAoC,EAAcD,EAAoBt7a,GAAG,GACzCotD,SAACu8V,IAAD,CACI5lC,YAAa,KAAK21D,4BAClBrvZ,OAAQixZ,EACR32G,aAAc,KAAKv6S,QACtB,EACH,GAER,GAEV,CAEAg7X,cAAmC,CAC/B,OACIvwQ,UAAAsxC,WAAA,CAAA/jO,SAAA,CACK,KAAK0sb,SAAS5mhB,SACfklM,SAACk7V,GAAD,CACIzlC,SAAU,KAAKA,SACfktB,cAAe,GACf1lM,cAAe,KAAK1sQ,QAAQy6Z,kBAC/B,IACDvjN,UAAC,IAAD,CAAGi6P,SAAU,KAAKA,SAASnpiB,GAA3By8G,SAAA,CACK,KAAK6jD,OACL,KAAK80a,cAAA,CACP,C,EACL,GAEV,CAEA11B,mBAAwC,CACpC,OACIxwQ,UAAC,IAAD,CAAGhxF,YAAa,KAAKy1X,mBAArBl3d,SAAA,CACK,KAAK0sb,SAAS5mhB,SACfklM,SAACk7V,GAAD,CACIzlC,SAAU,KAAKA,SACfktB,cAAe,GACf1lM,cAAe,KAAK1sQ,QAAQy6Z,kBAC/B,IACDvjN,UAAC,IAAD,CAAGi6P,SAAU,KAAKA,SAASnpiB,GAA3By8G,SAAA,CACK,KAAK6jD,OACL,KAAK80a,cAAA,CACP,C,GACF,KAAK9zI,OACP,C,EAEX,CAEAxkP,QAAsC,CAUlC,OATI,KAAKsgU,WAAWp9Z,UAAUjmE,QAEtB0tK,SAAC2xT,GAAD,CACIphb,QAAS,KAAKA,QACd0sF,OAAQ,KAAKA,OACb/2J,QAAS,KAAKyvf,WAAWp9Z,UAAUjmE,MACtC,GAGF,KAAKi+C,QAAQ86a,SACd,KAAK2sC,aAAA,EACL,KAAKC,kBAAA,CACf,CAEA,IAAsBp+G,SAAqC,CACvD,OACI75O,SAACouX,IAAD,CACI71kB,GAAI,KAAK2/b,UACTy9E,WAAY,KAAKA,WACjB87B,aAAc,KAAKA,YACtB,EAET,CAEA,IAAsB7C,SAAkB,CACpC,OAAO,KAAK3xX,OAAOrqB,IAAM,KAAK2yW,MAAMqiB,WACxC,CAEA,IAAsBkoB,SAAkB,CACpC,OAAO,KAAK7yX,OAAOzkD,MAAQ,KAAKulb,YACpC,CAEA,IAAsBjmC,aAA0B,CAC5C,GAAM,CAAEA,cAAc,CAAC,GAAM,KAAKvnb,QAKlC,OAAO,IAAIy8b,GAAW12a,CAHlB,GAAGwha,EACH0O,aAAc,KAAKj2b,QAAQytZ,SAAW,GAAK,EAEzB1nY,EAAQ,IAAI,CACtC,CAEA,IAAsBw4a,aAA0B,CAC5C,GAAM,CAAEA,cAAc,CAAC,GAAM,KAAKv+b,QAKlC,OAAO,IAAIy8b,GAAW12a,CAHlB,GAAGw4a,EACHtI,aAAc,KAAKj2b,QAAQytZ,SAAW,EAAI36V,MAExB/sC,EAAQ,IAAI,CACtC,CAEA,IAAsB8ia,SAAsB,CACxC,OAAO,KAAKzD,WAAWyD,OAC3B,CAEA,IAAsBsV,SAAsB,CACxC,OAAO,KAAK/Y,WAAW+Y,OAC3B,CAEA,IAAcE,YAAyB,CACnC,OAAO,KAAKjZ,WAAWiZ,UAC3B,CAEA,IAAcJ,sBAAgC,CAC1C,OAAO,KAAK7Y,WAAW6Y,oBAC3B,CAEA,IAAcS,WAA2B,CACrC,OAAO,KAAKtZ,WAAWsZ,SAC3B,CAEA,IAAsBu9C,WAA8B,CAChD,OAAOt+C,IAAY,KAAKvY,WAAY,KAAKK,WAAW,CACxD,CAEA,IAAsB6jC,kBAAiC,CACnD,OAAO,KAAKlkC,WAAWwD,eAAe,KAAKrB,WAAW,CAC1D,CAEA,IAAsB8hC,oBAAqC,CACvD,OAAO,KAAKjkC,WAAWqD,iBAAiB,KAAK8V,WAAW,CAC5D,CAEA,IAAsB/6D,QAA0B,CAC5C,OAAO,KAAK4hD,WAAW5hD,MAC3B,C,aACJ,GCxwBA,IAAMs6G,IAAiD,CACnD,YAAa7tI,GACb,cAAe,EACf,YAAa,EACjB,EAEa8tI,IAA2D,EACnE16D,EAAS,SAAUy6D,KACnBz6D,EAAS,UAAWy6D,KACpBz6D,EAAS,aAAc,CACpB,cACA,cAAe,EACf,YAAa,CACjB,GACCA,EAAS,OAAQ,CACd,YAAanzE,GACb,cAAe,GACf,YAAa,EACjB,CACJ,ECnEM8tI,IAAoB,OAa1B,SAAgBC,IAAc,CAC1Bz6G,SACA06G,aACAzxZ,WACAk/Y,kBACA1lD,oBACAk4D,gBACAnM,qBACAoM,qBAAA,CAEA,OACIlnS,UAAAsxC,WAAA,CAAA/jO,SAAA,CACKy5d,IACGzuX,SAAC,OAAD,CACIrhN,EAAG+5J,EAAY+1a,EAAW9vkB,CAAC,EAC3BmwD,EAAG4pG,EAAY+1a,EAAW3/gB,CAAC,EAC3B6tB,MAAO+7E,EAAY+1a,EAAW9xf,KAAK,EACnCvkB,OAAQsgG,EAAY+1a,EAAWr2gB,MAAM,EACrCx2C,KAAM,QAAQigb,GAAcP,GAAS60B,cAAe+lG,GAAiB,GACrEz4Z,QAAS,EACN,GAEVswT,EAAOxjd,IAAKwjd,IACT/zQ,SAAC4uX,IAAD,CAEY76G,SACO26G,gBACKnM,qBACDoM,mBACtB,EALQ56G,EAAO/yB,UAKf,GAEJ,CAACw1E,GAAqBi4D,IACnBzuX,SAAC,OAAD,CACI7hG,UAAW,aAAau6C,EACpB+1a,EAAW5xC,MACf,EAAE,IAAInkY,EAAY+1a,EAAWp1C,MAAM,EAAE,eACrCt8W,WAAY,IACZn7J,KAAK,OACLo7J,SAAUq6S,GAAc,GAAIr6S,GAC5BqgL,WAAW,SACX1qD,GAAItwI,GAAY1jB,GAAc2jB,MAAM,EACpCtyE,MAAO,CAAEs6c,cAAe,MAAO,EAClCt1b,SAAA,SAEK,EAEZ,GAEV,CASA,SAAS45d,IAAa,CAClB76G,SACA26G,gBACAnM,qBACAoM,qBAAA,CAEA,GAAM,CAAE3tI,aAAYvrG,WAAU+lO,OAAMD,OAAM7oF,WAAU2tC,aAActsD,EAC5D/yC,EAAgB+yC,EAAOq+D,SAAW/uY,OAElCwrb,EAAW7tJ,EAAgButJ,IAAoBx6G,EAAOlsQ,MACtD,CAAEmuV,cAAawB,gBAAenwQ,eAChCinS,IAAoB74O,GAExB,OACIz1I,SAAC,IAAD,CACIznN,GAAI+6J,EAAY,MAAO0tS,GACvBngb,UAAU,MACVs9F,UAAW,aAAau6C,EAAY8ia,GAAM,MAC1Cz8D,YAAc3wb,GAAauggB,IAAoB3tI,EAAY5yX,GAC3D0qI,iBAA0BypX,MAC1BntN,YAAqBs5N,IAAgB1tI,GAErChsV,UAAAgrG,SAAC,OAAD,CACIrhN,EAAG,EACHmwD,EAAG4pG,EAAY6ia,EAAOl7C,GACtB1jc,MAAO+7E,EAAYg6U,GACnBt6a,OAAQsgG,EAAY2nX,GACpBz+f,KAAMitjB,EACO74B,cACb5uQ,OAAQynS,EACKxnS,cACbmwQ,cAAex2H,EAAgB,GAAMw2H,EACrC/zY,QAASu9Q,EAAgB,GAAM,CAClC,EACF,EAEX,CC/FA,SAAS8tJ,KAA2B,CAChC,OAAOzyZ,EAAO,QAAQ,SAAS,CAAC,CAAC,OAAS,EAC9C,CAEA,SAAgB0yZ,IACZ,EACA,CAAE,KAAI,KAAI,YACa,CACvB,GAAM,CAAE,iBAAgB,gBAAiBt5D,EACnCu5D,EAAUp5D,EAAe,MAAMnsN,CAAE,EACjC8xQ,EAAO1lD,EAAa,MAAMnsN,CAAE,EAI5BulR,EACFp5D,EAAa,OAAO0lD,EAAO,CAAC,EAAI1lD,EAAa,OAAO0lD,CAAI,EACtD2T,EAAoBJ,IAAiB,EAErCz4D,EAAwC,CAAC,EAC3Cg+B,EAAU,EACd,IAAK,IAAMtgF,KAAUwkD,EAAc,CAC/B,IAAMmoB,EAAS3sE,EAAO,QAAQ,OAAS,EACjC2e,EAAWkjC,EAAe,MAAM8qB,CAAM,EAAIsuC,EAC1C3uD,EACFtsD,EAAO,SAAW,OAKZm7G,EAJA3T,EACA1lD,EAAa,MACT,KAAK,IAAI9hD,EAAO,OAAO,MAAOk7G,CAAgB,CAClD,EAGV54D,EAAa,KAAK,CACd,GAAGtiD,EACH,KAAMi7G,EAAU36B,EAChB,OACA,WACA,WACJ,CAAC,EACD,GAAW3hE,CACf,CACA,OAAO2jC,CACX,CAEA,SAAgB84D,IACZ,EACA,CACI,oBACA,mBAIA,CAAC,EACkB,CACvB,IAAMv6G,EAAqBw6G,EACrB,CAACA,CAAiB,EAClBC,EACEh5D,EACK,OAAQ,GACLg5D,EAAgB,SACZt7G,EAAO,aAAa,gBACxB,CACJ,CAAC,CACA,IAAK,GAAWA,EAAO,UAAU,EACtC,CAAC,EAEHc,EACFu6G,IAAsB,QAAaC,IAAoB,OAa3D,OAAO94D,GAXcF,EAAa,IAAK,GAAkC,CACrE,IAAMthD,EAAQJ,GAAuBZ,EAAQ,CACzC,qBACA,mBACJ,CAAC,EAEKz3U,EAAQ+yb,EAAkB,OAAYt7G,EAAO,MACnD,MAAO,CAAE,GAAGA,EAAQ,SAAUigD,GAAgB,CAAE,QAAO,OAAM,CAAC,CAAE,CACpE,CAII,EACC,GAAWs6D,IAAoBv6G,EAAO,SAAS,CAAC,WACrD,CACJ,CAEA,SAAgBu7G,IACZ,EAC+B,CAC/B,IAAMC,EAAoBl5D,EAAa,UAClC,GAAWtiD,EAAO,SAAW,MAClC,EACA,GAAIw7G,IAAsB,GAAI,OAGAl5D,EACzB,MAAMk5D,CAAiB,CAAC,CACxB,KAAM,GAAWx7G,EAAO,SAAW,MACpC,GACA,QAAQ,MAAM,uCAAuC,EAEzD,IAAMp0X,EAAQ02a,EAAak5D,GACrBxxgB,EAAO4vQ,GAAO0oM,CAAY,EAC1B13gB,EAAIghG,EAAM,KACVhjB,EAAQ5e,EAAK,KAAOA,EAAK,SAAWp/D,EACpCy5D,EAAS02gB,IAAiB,EAEhC,MAAO,CACH,IACA,EAAGnve,EAAM,KAAOvnC,EAChB,QACA,SACA,OAAQz5D,EAAIg+E,EAAQ,EACpB,OAAQgjB,EAAM,KAAO08E,EAAO,QAAQ,SAAS,CAAC,CAAC,KACnD,CACJ,CAGA,IAAMmzZ,IAAgB,EAEhBC,IAAkB,GAGxB,SAAgBC,IAA6B,CACzC,sBACA,yBACA,yBACA,sBACA,aACA,iBACA,YAS0B,CAC1B,GAAIC,IAA2B,OAAW,MAAO,CAAC,EAElD,IAAMC,EAAgC,IAAI,IACtCD,EAAuB,SAAS,IAAK,GAAQ,CACzCzxZ,EAAI,WACJA,EAAI,KACR,CAAC,CACL,EAMIm1G,GAHAw8S,GAA0BF,EAAA,CAIL,SAAS,IAAK,GAAQ,CACvC,IAAMl7f,EAAOggZ,GAAsBv2S,EAAI,UAAU,GAAKA,EAAI,WAC1D,MAAO,CACH,WAAYA,EAAI,WAChB,OACA,OAAQ7B,EAAO,QAAQ5nG,EAAM,CAAE,UAAS,CAAC,EACzC,OAAQo7f,IAA2B,OAAwB,EAAZ3xZ,EAAI,MACnD,WAAY0xZ,EAAS,IAAI1xZ,EAAI,UAAU,EACvC,WAAY8pR,EAAoB,IAAI9pR,EAAI,UAAU,CACtD,CACJ,CAAC,EAYL,GAVA,EAAam1G,EAAW,OAAQ,GAC5By8S,EAAoB,IAAIznjB,EAAU,UAAU,CAChD,EAGI2uf,EAAW,mBACX,EAAa3jP,EAAW,OAAQ,GAC5B2jP,EAAW,IAAI3uf,EAAU,UAAU,CACvC,GAEAgrQ,EAAW,SAAW,EAAG,MAAO,CAAC,EAGrCA,EAAW,MAAM,EAAG,IAAM,CACtB,IAAM08S,EAAajyjB,EAAE,WACfkyjB,EAAajyjB,EAAE,WAErB,GAAIgyjB,IAAe,QAAaC,IAAe,OAAW,CACtD,IAAMpwW,EAAOmwW,EAAaC,EAErB,OADDpwW,IAAS,EACD9hN,EAAE,WAAW,cAAcC,EAAE,UAAU,EAD5B6hN,CAE3B,CAGK,OAHMmwW,IAAe,QAAaC,IAAe,OAC3C,EACFD,IAAe,QAAaC,IAAe,OAAkB,GAC1D,CAChB,CAAC,EAED,IAAM7R,EAAS,IAAI,IACf9qS,EACK,OAAQ,GAAchrQ,EAAU,UAAU,CAAC,CAC3C,IAAK,GAAcA,EAAU,UAAU,CAChD,EAEM,CAACkod,EAAYC,GAAiBy/F,GAChC58S,EACC,GACGhrQ,EAAU,aAAe,GAAKA,EAAU,aAAe,MAC/D,EAGIkod,EAAW,SACX4tF,EAAO,IAAIllH,GAAQs3B,CAAU,CAAC,CAAE,UAAU,EAC1C4tF,EAAO,IAAIxwP,GAAO4iK,CAAU,CAAC,CAAE,UAAU,GAEzCC,EAAc,QAAQ2tF,EAAO,IAAIllH,GAAQu3B,CAAa,CAAC,CAAE,UAAU,EAEvE,IAAMo3C,EAAcv0P,EAAW,EAAE,CAAC,OAAO,OACnC68S,EAAiB,KAAK,MACxB,KAAK,IACDv5P,GAAkBixM,EAAc4nD,KAAiB,EACjDC,GACJ,CACJ,EAGM79O,EAASu+O,IAA+B98S,EAAY68S,CAAc,EACxE,IAAK,IAAMp+O,KAASF,EAAQ,CACxB,GAAIE,EAAM,KAAM,GAAcqsO,EAAO,IAAI91iB,EAAU,UAAU,CAAC,EAC1D,SACJ,IAAM+njB,EAASjxD,GAAQrtL,EAAQ,GAAczpU,EAAU,MAAM,EACzD+njB,GAAQjS,EAAO,IAAIiS,EAAO,UAAU,CAC5C,CAEA,OAAO/8S,EAAW,OAAQ,GAAc8qS,EAAO,IAAI91iB,EAAU,UAAU,CAAC,CAC5E,CAOA,SAAgBgojB,IACZ,EACA,CAAE,YACwB,CAC1B,IAAMC,EAAoB,KAAK,IAC3B,GAAGj9S,EAAW,IAAK,GAAchrQ,EAAU,OAAO,KAAK,CAC3D,EACMkojB,EAAqB,KAAK,IAC5B,GAAGl9S,EAAW,IAAK,GAAchrQ,EAAU,OAAO,MAAM,CAC5D,EACMmojB,EAAA,IAA2C,KAAK,GAAM,IAE5D,MAAO,CACH,oBACA,qBACA,gBAAiB,KAAK,IAClBxzZ,EACAszZ,EAAoB,KAAK,IAAI,KAAK,IAAIE,CAAc,CAAC,CACzD,EACA,iBAAkB,KAAK,IACnBxzZ,EACAszZ,EAAoB,KAAK,IAAI,KAAK,IAAIE,CAAc,CAAC,CACzD,CACJ,CACJ,CAEA,SAAgBC,IACZ,EACA,CACI,2BACA,0BACA,gBACA,eACA,WACA,MASkB,CACtB,IAAM79P,EAAiCv/C,EAAW,IAAK,GAAc,CAEjE,IAAM0gM,EAAS28G,EAAyB,IAAIrojB,EAAU,UAAU,EAE1DsojB,EAAU58G,EAAO,KAAOA,EAAO,SAAW,EAC1C68G,EAAcz/C,EAAwB,IAAI9ogB,EAAU,UAAU,EACpE,MAAO,CACH,WAAYA,EAAU,WACtB,KAAMA,EAAU,KAChB,MAAOuojB,GAAa,OAASC,EAC7B,WAAYxojB,EAAU,WACtB,WAAYsojB,EACZ,WAAYA,CAChB,CACJ,CAAC,EA4BD,GAAI/9P,EAAO,SAAW,EAAG,MAAO,CAAC,EAEjCA,EAAO,MAAM,EAAG,IAAM,CAClB,IAAMhzG,EAAO9hN,EAAE,WAAaC,EAAE,WAEzB,OADD6hN,IAAS,EACD9hN,EAAE,WAAW,cAAcC,EAAE,UAAU,EAD5B6hN,CAE3B,CAAC,EAED,IAAMw+Q,EAAav2c,EAAa,mBAO1BipiB,EAAsB1yF,GALxB,EACA,KAAK,IACDv2c,EAAa,kBAAoBu2c,EACjC,KAAK,IAAI,KAAK,OAA0B,CAAC,CAC7C,GAGJ,IAAK,IAAI99e,EAAI,EAAGA,EAAIsyU,EAAO,OAAS,EAAG,IAAK,CACxC,IAAM/2U,EAAU+2U,EAAOtyU,GACjBiP,EAAOqjU,EAAOtyU,EAAI,GAClBywkB,EAAWl1kB,EAAQ,WAAai1kB,EAClCvhkB,EAAK,WAAawhkB,IAAU,EAAK,WAAaA,EACtD,CACA,IAAMhzgB,EAAO4vQ,GAAOiF,CAAM,EAC1B,EAAK,WAAa,KAAK,IACnB70Q,EAAK,WACL03c,EAAS,eAAe,UAAYA,EAAS,eAAe,MAAMhsN,CAAE,CACxE,EACA,IAAK,IAAInpT,EAAIsyU,EAAO,OAAS,EAAGtyU,EAAI,EAAG,IAAK,CACxC,IAAMzE,EAAU+2U,EAAOtyU,GACjBy+E,EAAW6zP,EAAOtyU,EAAI,GACtB0wkB,EAAen1kB,EAAQ,WAAai1kB,EACtC/xf,EAAS,WAAaiyf,IACtB,EAAS,WAAaA,EAC9B,CAEA,OAAOp+P,CACX,CAMA,SAAgBq+P,IACZ,EACwB,CACxB,IAAMC,EAAiC,CAAC,EACpCC,EAAc,GAClB,IAAK,IAAMjna,KAASkna,EACZlna,EAAM,aAAeA,EAAM,WAC3B,EAAc,GACPina,GACPD,EAAK,KAAK,CAAChna,CAAK,CAAC,EACjB,EAAc,IAEdmna,GAAOH,CAAI,CAAC,CAAE,KAAKhna,CAAK,EAGhC,OAAOgna,CACX,CAMA,SAASf,IACL,EACA,EAC2B,CAC3B,IAAMv+O,EAAsC,CAAC,EACzC0/O,EAA0C,CAAC,EAC3CC,EAAoB,EAClBC,EAAsB,KAAK,KAC7Bl5W,GAAQ+6D,EAAa,GAAchrQ,EAAU,MAAM,EAAIopjB,CAC3D,EACA,IAAK,IAAMppjB,KAAagrQ,EAAY,CAChC,KAAOk+S,EAAoBC,GACvB5/O,EAAO,KAAK0/O,CAAY,EACxB,EAAe,CAAC,EAChB,GAAqBE,EAEzB,GAAqBnpjB,EAAU,OAC/BipjB,EAAa,KAAKjpjB,CAAS,CAC/B,CAGA,OAFAupU,EAAO,KAAK0/O,CAAY,EAEjB1/O,EAAO,OAAQ,GAAUE,EAAM,OAAS,CAAC,CACpD,C,80GC/VYj2I,eAPN61X,IAAgB,EAChBC,GAAqB,GAMf91X,KAAMpoG,U,SADX,cACKooG,G,wCAFX5zH,C,IA0BI0qC,E,EAAagjZ,Y,GAIbhjZ,E,EAAqBpiC,S,GAIrBoiC,E,EAAqBohW,Q,GAIrBphW,E,EAAqBi/c,Y,GAUrBj/c,E,EAAqBk/c,gC,GAUrBl/c,E,EAAqBk9c,wB,GAUrBl9c,E,EAAqBg9c,wB,GAMrBh9c,E,EAAqBsqD,Q,GAIrBtqD,E,EAAqBqjZ,a,GAyBrBrjZ,E,EAAqB04Y,U,GAIrB14Y,E,EAAaqqD,U,GAIbrqD,E,EAAqBuoZ,Q,GAIrBvoZ,E,EAAqBmlZ,a,GAIrBnlZ,E,EAAqBm8Z,a,GAarBn8Z,E,EAAqBknb,kB,GAIrBlnb,E,EAAqBinb,oB,GAIrBjnb,E,EAAqB8iZ,U,GASrB9iZ,E,EAAa0jZ,c,GASb1jZ,E,EAAqBy8c,mB,GAKrBz8c,E,EAAqB+5a,c,GAOrB/5a,E,EAAqB87c,Y,GAIrB97c,E,EAAqB+9c,0B,GAWrB/9c,E,EAAqBmwc,kB,GAIrBnwc,E,EAAqBowc,a,GAIrBpwc,E,EAAaqrN,2B,GAIbrrN,E,EAAqB2pb,uB,GAiBrB3pb,E,EAAqB6tc,2B,GASrB7tc,E,EAAqBm/c,a,GAMrBn/c,E,EAAqB4tc,c,GAWrB5tc,E,EAAqB+ob,Y,IAIrB7kc,IAAOo6D,K,KAAM6vZ,mB,IAKbjqd,IAAOo6D,K,KAAM8vZ,oB,GAIbpuc,E,EAAqBswc,a,IAWrBpsd,IAAOo6D,K,KAAc09Z,mB,IAKrB93d,IAAOo6D,K,KAAcwlC,a,IAOrB5/F,IAAOo6D,K,KAAcghY,gB,IAIrBp7b,IAAOo6D,K,KAAcy9Z,e,IAIrB73d,IAAOo6D,K,KAAcigU,gB,GAIrBv+W,E,EAAqBi5c,e,GAMrBj5c,E,EAAqBy2c,e,GA2MrBz2c,E,EAAqBo/c,uB,GAmBrBp/c,E,EAAqBq/c,mB,GAMrBr/c,E,EAAqBy+c,c,GAarBz+c,E,EAAqBs/c,kB,GA8FrBt/c,E,EAAqBu/c,qB,CAnnBdr2X,e,CAOR,YAAY/3M,EAA4B,CACpC,MAAMA,GAENyxL,EAAe,KAAM,CACjB85Y,gBAAiBjsZ,EACjBquX,aAAcruX,CAClB,EACJ,CAXA3hK,gBAAOo6L,EAAMk8Q,UAAA,GAEb7/B,UAA6Bz/R,KAY7B42a,gBAA6Chsb,OAG7CouZ,aAAe,IAAIt1E,GAInB,IAAcw5C,YAAkC,CAC5C,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAAsBplb,SAAiC,CACnD,OAAO,KAAKolb,WAAWplb,OAC3B,CAEA,IAAsBwjY,QAAqC,CACvD,OAAO,KAAK4hD,WAAW5hD,MAC3B,CAEA,IAAsB69G,YAAiC,CACnD,GAAM,CAAEl+G,eAAgB,KAAKiiD,WACvB5lE,EAAQ2jB,EACR,KAAKnjY,QAAQq8e,iDAAiD/hH,gCAC1D,CAAC6I,CACL,GACArwU,OAEN,OAAO0sT,EAAQ54S,GAAO44S,GAAS1sT,MACnC,CACA,IAAsBwub,gCAEN,CACZ,GAAI,KAAKD,WACL,OAAO,KAAKrhf,QAAQq8e,iDAAiD5gH,oBACjE,CAAC,KAAK4lH,UAAU,EAChB,EAGZ,CACA,IAAsB/B,wBAAiD,CACnE,GAAM,CAAEvjG,eAAgB,KAAKqpC,WAC7B,GAAIrpC,IAAgBjpV,QAChB,KAAKwub,+BACL,OAAO,KAAKA,+BAA+BzuH,WAAW,CAClDkpB,CACH,EAAC,CAAC,EAEX,CAEA,IAAsBqjG,wBAAiD,CACnE,GAAM,CAAEj8G,eAAgB,KAAKiiD,WAC7B,GAAIjiD,IAAgBrwU,OACpB,OAAO,KAAKwub,gCAAgCzuH,WAAW,CAACsQ,CAAY,EAAC,CAAC,EAC1E,CAEA,IAAsBz2S,QAAiB,CACnC,OAAQ,KAAKn5K,MAAMm5K,QAAUkjR,IAAwBi8G,SAAS,GAClE,CAEA,IAAsBpmC,aAAsB,CAGxC,IAAMjzU,EAAO,KAAK82W,iBAAiB5niB,MAAA,EACnC8wL,EAAKhzG,MAAQ,CAAC,EAAG,KAAKktF,OAAO7kH,MAAM,EACnC,IAAM+5gB,EAAwBpvY,EAAKpmH,MAE7By1f,EAAmB,KAAKn1Z,OAAO7kD,KAAO+5c,EACtCE,EAAmBV,GAGnBW,EACFr+a,KAAKh1J,IAAImzkB,EAAkB,KAAKJ,kBAAkBO,eAAe,EACjEH,EACJ,OAAO,KAAKn1Z,OACPo/X,UAAU,KAAK21B,kBAAkBQ,iBAAmB,GACpDn2B,UAAUg2B,GACV3lD,OACG,KAAKgvB,WACC,KAAKunB,YAAY7qgB,OAAS,KAAK0qgB,iBAC/B,GAETzH,QAAQiX,EACjB,CAEA,IAAsBjnE,UAAoB,CACtC,OAAO,KAAK96a,QAAQ86a,UAAY,EACpC,CAEA,IAAcruV,UAAmB,CAC7B,OAAO,KAAKzsF,QAAQysF,YACxB,CAEA,IAAsBk+V,QAA2B,CAC7C,MAAO,CAAC,KAAKj+V,OAAO7kD,KAAM,KAAK6kD,OAAOzkD,KAAK,CAC/C,CAEA,IAAsBs/Y,aAA0B,CAC5C,OAAO,IAAIkV,GAAW,KAAKz8b,QAAQunb,YAAa,IAAI,CACxD,CAEA,IAAsBgX,aAA0B,CAC5C,GAAM,CAAExiD,eAAgB,KAAKqpC,WAC7B,OAAO,IAAIqX,GACP,CACI,GAAG,KAAKz8b,QAAQu+b,YAChBrE,OAAQrsY,GAASwU,IACjByzX,SAAU/5C,IAAgBjpV,OAC1BijY,cAAeh6C,IAAgBjpV,MACnC,EACA,IACJ,CACJ,CAEA,IAAsBw2Z,kBAAiC,CACnD,OAAO,KAAKlkC,WAAWwD,eAAe,KAAKrB,WAAW,CAC1D,CAEA,IAAsB8hC,oBAAqC,CACvD,OAAO,KAAKjkC,WAAWqD,iBAAiB,KAAK8V,WAAW,CAC5D,CAEA,IAAsBrZ,UAAqB,CACvC,OAAO,IAAI4W,GAAS,CAChBpvW,OAAQ,KAAK+4V,YACbH,aAAc,KAAKgkC,iBACnBjkC,eAAgB,KAAKgkC,mBACrBptB,gBAAiB,KAAKj8b,QAAQi8b,eAClC,EACJ,CAEA,IAAcnW,cAAwC,CAClD,GAAM,CAAE5sN,KAAIC,KAAI6uN,gBAAiB,KAAK5C,WACtC,OAAOo5D,IAAwBx2D,EAAc,CACzC9uN,KACAC,KACA+rN,SAAU,KAAKA,QACnB,EACJ,CAEA,IAAsB25D,mBAAwC,CAC1D,GAAM,CAAE9tkB,SAAQ0wiB,UAAW,KAAKP,aAChC,OAAOnwiB,GAAU,CAAC0wiB,EAAS1wiB,EAAO0/b,WAAa39S,MACnD,CAEA,IAAsBqpZ,cAAwC,CAC1D,OAAOyiC,IAAwB,KAAK94D,aAAc,CAC9C+4D,kBAAmB,KAAKA,kBACxBC,gBAAiB,KAAKA,eAC1B,EACJ,CAEA,IAAsBZ,YAA8C,CAChE,OAAOa,IAAsB,KAAKj5D,YAAY,CAClD,CAEA,IAAsBq6D,0BAGpB,CACE,OAAO,IAAItgkB,IACP,KAAKimgB,aAAa9lgB,IAAKwjd,GAAW,CAACA,EAAO/yB,WAAY+yB,CAAO,GAErE,CAIA,IAAsB+uG,kBAA2B,CAC7C,OAAO,KAAKG,YAAY7qgB,OAAS,EAAI,KAAK4kH,SAAW,CACzD,CAEA,IAAsB+lZ,aAAsB,CACxC,OAAO,KAAK9lZ,OAAOtgG,KACvB,CAEA,IAAcqhQ,2BAAsC,CAChD,OAAO,KAAKztP,QAAQytP,2BAA6B,EACrD,CAEA,IAAsBs+N,uBAA0C,CAE5D,OADK,KAAK3mC,WAAWsB,gBACd,KAAKtB,WAAW8B,WAAW/kM,sBADW,EAEjD,CAEA+uP,yBACI74R,GAEI,CAAC,KAAK23R,cAAgB,CAAC,KAAKuR,YAAoBl+D,EAASyf,QAE3C,KAAKy+C,aAAar/c,SAASm2K,EAAI/gF,KAAK,GAGrC,KAAK04W,cAAc9tc,SAASm2K,EAAI/gF,KAAK,EAFhC+rT,EAAS2f,YAGU3f,EAAS4f,MAGtD,IAAsBgtC,2BAAyC,CAC3D,OAAOtuB,GACH,KAAKoK,sBACL,KAAKmlB,wBACT,CACJ,CAEAJ,kBAAuC/D,GAEvC,IAAsBwU,aAAmC,CACrD,GAAI,KAAKzC,gBAAiB,MAAO,CAAC,KAAKA,gBAAgBxnX,KAAK,EAC5D,GAAM,CAAEqqU,eAAgB,KAAKk3C,eAAiB,CAAC,EAC/C,OAAOl3C,EAAc,CAACA,EAAYrqU,KAAK,EAAIxkE,MAC/C,CAEA,IAAsBk9a,cAAoC,CACtD,IAAM1qR,EAAS1+I,GACXL,GACI,KAAKi9T,OACAhsa,OAAQgsa,GAAWA,EAAOz3U,MAAM+mK,MAAM,EACtC9yS,IAAKwjd,GAAWA,EAAOm+D,aAAarqU,SAGjD,OAAOguF,EAAOx2S,OAAS,EAAIw2S,EAASxyJ,MACxC,CAEA,IAAsBq4Z,YAAsB,CACxC,MAAO,CAAC,CAAC,KAAK/lC,WAAWsB,iBAAmB,CAAC,CAAC,KAAK1mb,QAAQmrd,UAC/D,CAEcolB,kBAAkBl4R,EAA0B,CACtD,KAAK+sO,WAAWqB,WAAWhlK,MAAA,EAC3B,KAAKq9N,gBAAkBzmS,CAC3B,CAEcm4R,oBAA2B,CACrC,KAAKsO,gBAAkBhsb,MAC3B,CAEA,IAAsB4/a,aAAqD,CACvE,OAAO,IAAIvD,GACP,KAAKpjB,sBACL,CACI/kF,aAAc,KAAKv6S,SACnBrgG,MAAO,KAAKomf,YACZ7jc,MAAOuf,GAAgBrmB,IAC3B,EAER,CAEsBu2c,kBAAkB3tI,EAA0B,CAC9D,KAAK20E,WAAWqB,WAAWhlK,MAAA,EAC3B,KAAKy/L,aAAanwiB,OAAS,CAAE0/b,YAAW,CAC5C,CAEsBvqP,YAAYroI,EAA4B,CAC1D,IAAM/7C,EAAM,KAAKk+D,QAAQ9uE,MAAM5lB,QAC3Bw2B,IACA,KAAKo/gB,aAAalsd,SAAWusE,GAAiBz/H,EAAK+7C,GAE3D,CAEsB6je,gBAAuB,CACzC,KAAKR,aAAanwiB,OAAS,IAC/B,CAEsBotkB,cAAc1tI,EAA0B,CAC1D,KAAKkwC,eAAelwC,EACxB,CAEsBkwC,eAAelwC,EAA0B,CACvD,KAAK4qI,eACL,KAAKj2D,WAAWtsC,eAAe9gC,gBAAgBvH,EACvD,CACA,IAAsB4qI,eAAyB,CAC3C,GAAM,CAAEc,kBAAmB,KAAKn8e,QAChC,OAAQm8e,GACJA,IAAmB/3b,GAAoBg4b,QAC/C,CAEA,IAAsBvD,eAA6C,CAC/D,GAAM,CAAE9nkB,UAAW,KAAKmwiB,aACxB,OACInwiB,GACA,KAAKyyd,OAAO1+T,MACP,CAAE2rS,gBAAiBA,IAAe1/b,EAAO0/b,UAC9C,CAER,CAEAg3B,mBAAmC,CAC/BllU,GAAuB,IAAI,CAC/B,CAEAuiD,QAAsC,CAClC,GAAI,KAAKsgU,WAAWp9Z,UAAUjmE,OAC1B,OACI0tK,SAAC2xT,GAAD,CACIphb,QAAS,KAAKA,QACd0sF,OAAQ,KAAKA,OACb/2J,QAAS,KAAKyvf,WAAWp9Z,UAAUjmE,MACtC,GAGT,GAAM,CACFi+C,UACA0sF,SACAw4V,WACA2zD,gBACA74e,QAAS,CAAE93D,UAASkue,iBACpB8qC,aAAc,CAAEnwiB,SAAQikF,WAAUysd,WAClC,KACE,CAAEtjB,UAAStV,UAASjC,cAAaM,cAAe,KAAK9B,WACrD,CAAE11D,cAAe,KAAK01D,WAAWjtC,WAEjC,CAAE1nC,aAAYmxF,SAAQC,UAAWg3C,GAAiB,CAAC,EAEnDqJ,EACFrgD,GAAUA,EAAO/pf,OAAS5P,EACpB2gf,EAAQjrE,WAAWikF,EAAO/pf,IAAI,EAC9Bg7G,OAKJqvb,EADFvgD,GAAUA,EAAO9pf,OAAS5P,GAAWkue,IAAkBtjX,OACb8uY,GAAQ9pf,KAAOg7G,OACvDsvb,EAAyBD,EACzBhkD,GAASvgF,WAAWukI,GACpBrvb,OACAmhb,EACFkO,GAAiBD,EACXxyH,EAAWr3S,YAAYnwI,GACvB4qH,OACJm3X,EAAkBgqD,EAClB,CACIn9S,KAAM8wM,GAAkBsF,OACxBhpZ,KAAM2mZ,GAA2BopG,EACrC,EACAnhb,OAEAqY,EAAU5E,GAAiB,CAAC43X,EAAStV,CAAQ,GAC7CqxD,EAAsB/ua,EAAQqK,MAC/B93F,GAAWA,EAAOw9X,0BACvB,EACMi/H,EAAsBhva,EAAQtlC,KAC/BnoD,GAAWA,EAAOw9X,0BACvB,EACMq+E,EAAUhzX,GACZ4E,EAAQnrJ,IAAK09D,GACTA,EAAOw9X,2BACDx9X,EAAOygG,sBACPrrB,SAGRwuZ,EAAiB64B,EACjB,CACIrjT,KAAMojT,EACAtyG,GAAkBwF,KAClBxF,GAAkBuF,aACxBjpZ,KAAM6mZ,GAA0BwuD,EAAS,CACrCzuD,OAAQyuD,EAAQzqhB,OAAS,CAC7B,EACJ,EACAgkJ,OACAwmb,EACF,CAAC,CAACh4B,GAAkBA,EAAexqR,OAAS8wM,GAAkBwF,KAE5Dr2H,EAASxwM,GAAiB,CAAC0jX,EAAiBq3B,CAAe,GAEjE,OACIpqQ,UAAC,IAAD,CACIp1Q,IAAK,KAAK5Q,KACVlpB,GAAI+6J,EAAY,mBAChBmjD,YAAcroI,GAAa,KAAKqoI,YAAYroI,GAC5C0qI,iBAA0B,KAAKm5V,eAAA,EAJnCj9b,SAAA,EAMIgrG,SAAC,OAAD,CACIrhN,EAAG+5J,EAAYukB,EAAO7kD,IAAI,EAC1BtpE,EAAG4pG,EAAYukB,EAAOrqB,GAAG,EACzBj2E,MAAO+7E,EAAYukB,EAAOtgG,KAAK,EAC/BvkB,OAAQsgG,EAAYukB,EAAO7kH,MAAM,EACjCqrG,QAAS,EACT7hJ,KAAK,qBACR,IACDo+L,SAACk7V,GAAD,CACczlC,WACVktB,cAAe,GACf1lM,cAAe1sQ,EAAQy6Z,kBAC1B,GACA,KAAK0wD,aACF17V,SAACs/W,GAAD,CACIlikB,MAAO,KAAK6lkB,YACZtkkB,EAAG,KAAKs+K,OAAOt+K,EACfmwD,EAAG,KAAKmuH,OAAOrqB,IACf+9M,YAAa,CAAC,KAAK06J,SACnB+mC,YAAa,KAAKivB,kBAClBzuB,YAAa,KAAK4tB,0BAClBzhE,YAAa,KAAK+hE,kBAClBhoX,aAAc,KAAKioX,kBACtB,GAEJ,KAAKxE,WAAA,EACL,KAAKqW,iBAAA,EACL,KAAKC,aAAA,EACLvxkB,IACGmmS,UAACwyJ,GAAD,CACI1hc,GAAI,KAAK2/b,UACT2lC,eAAgB,KAAKttY,QACrB5xF,EAAG4mF,EAAS5mF,EACZmwD,EAAGy2B,EAASz2B,EACZkhC,MAAO,CAAE0nP,SAAU,OAAQ,EAC3BxyI,QAAS,GACTD,QAAS,IACTx9C,MAAOu5S,EACPh5S,SAAUi4T,EAAWr3S,YAAYnwI,GACzB6uU,SACR61H,SAAU60E,EACVtmD,YAAgB,KAAK+lD,aAAanwiB,OAAS,KAZ/C0zG,SAAA,CAcKo9a,IACGpyU,SAAC+4Q,GAAD,CACI7uT,MAAOkvW,EAAQ9yE,YACft5a,KAAMosf,EAAQ1tE,YACd9zc,MAAOwhhB,EAAQ3lM,iBAAiB2+M,EAAOx6hB,KAAK,EAC5Co4c,aAAcyiI,EACdx5G,4BACI4wG,GACAzwD,EAAQ3tE,0BAEf,GAEJijF,GAAW,CAACA,EAAQvjF,YACjBnrP,SAAC+4Q,GAAD,CACI7uT,MAAOwkX,EAAQpoF,YACft5a,KAAM0hgB,EAAQhjF,YACd9zc,MAAO82hB,EAAQj7M,iBAAiB0+M,GAAQv6hB,OACxCo4c,aAAc2iI,EACd15G,4BACI4wG,GACAn7C,EAAQjjF,0BAEf,GAEJ,CAAC0rE,EAAYhsE,WACVi+H,GAAel3C,aACf,EACI/a,aAAuBljE,GAAcK,aAErCt0P,SAAC+4Q,GAAD,CACI7uT,MACIutW,EAAWtuO,mBACXguO,EAAY7wE,YAEhB1uc,MACI6/gB,EAAWtjM,eACPi1P,EAAcl3C,YACTL,gBACT,GAAG3nX,OACHk/Z,EAAcl3C,YACTL,gBAEZ,EAEJ,C,EAEd,C,EAEX,CAEA0qC,YAAyC,CACrC,OACIv8W,SAACwuX,IAAD,CACIz6G,OAAQ,KAAK24E,aACb+hC,WAAY,KAAKA,WACjBzxZ,SAAU,KAAKA,SACfk/Y,gBAAiB,KAAK3re,QAAQ2re,gBAC9BwS,cAAe,KAAKA,cACpBnM,mBAAoB,KAAKtwB,eACzB08B,kBAAmB,KAAKA,iBAC3B,EAET,CAEA,IAAsBoD,uBAAmD,CACrE,GAAM,CAAElC,yBAAwBF,yBAAwBz0D,UAAW,KAC7D,CAAEmW,iBAAgBra,cAAe,KAAKrB,WAE5C,OAAO+5D,IAA6B,CAChCI,oBAAqB,IAAI1+jB,IACrB,KAAK2id,OAAOxjd,KAAK,CAAEywb,gBAAiBA,IAExC6uI,yBACAF,yBACA3nI,oBAAqB,IAAI52b,IACrBighB,EAAe9ghB,IAAKwjd,GAAWA,EAAO/yB,UAAU,GAEpDg2E,aACArgM,eAAgBukM,EAAO,GAAKA,EAAO,GACnCl+V,SAAU,KAAKk1Z,mBACnB,EACJ,CAEA,IAAsBF,mBAAgD,CAClE,OAAO3B,IAAuB,KAAK0B,sBAAuB,CACtD/0Z,SAAU,KAAKA,QACnB,EACJ,CAEA,IAAsBo0Z,cAAuC,CACzD,GAAM,CAAE3nR,KAAI0nO,0BAAyBD,gBAAiB,KAAKvb,WAE3D,OAAO86D,IAAwB,KAAKsB,sBAAuB,CACvDrB,yBAA0B,KAAKA,yBAC/Bv/C,0BACA0/C,cAAe3/C,EACfrpf,aAAc,KAAKmqiB,kBACnBv8D,SAAU,KAAKA,SACfhsN,IACJ,EACJ,CAEA,IAAsBwoR,kBAA6C,CAC/D,OAAOhB,IAAmB,KAAKG,YAAY,CAC/C,CAEAwB,kBAAiD,CAC7C,IAAME,EAAe,KAAKr9D,SAASI,aAAauP,MAAM,GAChD2tD,EAAqBD,EAAepB,IACpCsB,EACFF,EAAenB,GAAqBD,IAGlCuB,EAAmC,GACzC,IAAK,IAAM5hZ,KAAO,KAAK4gZ,iBAAkB,CACrC,IAAMiB,EAAiBC,IAAmB9hZ,EAAIhyL,OAAS,GACvDgyL,EAAIhgL,SAAS64J,EAAOkpa,KAChB,IAAMC,GACDD,EAAa,GAAKF,EACjBI,EACFppa,EAAMqpa,WAAarpa,EAAMspa,WACnBH,EACAF,GAAkBE,EAC5BJ,EAAW5ykB,MACP2/M,SAAC,IAAD,CACIznN,GAAI+6J,EAAY,aAAc4W,EAAM82R,UAAU,EAC9Cngb,UAAU,YAGVm0F,UAAAgrG,SAAC,OAAD,CACItwK,EAAG,IAAIgpH,EAAYwR,EAAMqpa,UAAU,EAAE,GAAG76a,EACpCq6a,GACF,IAAIr6a,EAAY46a,GAAY,IAAI56a,EAC9BwR,EAAMspa,UACV,EAAE,IAAI96a,EAAYs6a,KAClB5rS,OAAQl9H,EAAMs0O,WAAa,OAAS,OACpCn3G,YAAa,EACbzlR,KAAK,MACR,EACF,EAZM,aAAasoJ,EAAM82R,YAYzB,EAEX,EACJ,CACA,IAAMyyI,EAAkB,KAAKrC,aAAarphB,OACrCmiH,GAAUA,EAAMqpa,aAAerpa,EAAMspa,UAC1C,EACA,IAAK,IAAMtpa,KAASupa,EAChBR,EAAW5ykB,MACP2/M,SAAC,IAAD,CACIznN,GAAI+6J,EAAY,aAAc4W,EAAM82R,UAAU,EAG9ChsV,UAAAgrG,SAAC,OAAD,CACItwK,EAAG,IAAIgpH,EAAYwR,EAAMqpa,UAAU,EAAE,GAAG76a,EACpCq6a,GACF,IAAIr6a,EAAYs6a,KAClB5rS,OAAQl9H,EAAMs0O,WAAa,OAAS,OACpCn3G,YAAa,EACbzlR,KAAK,MACR,EACF,EAVM,aAAasoJ,EAAM82R,YAUzB,GAGX,OAAOiyI,CACX,CAEAJ,cAA6C,CACzC,IAAMa,EAAU/B,GAAqB,KAAKl8D,SAASI,aAAauP,MAAM,GACtE,OAAO,KAAKgsD,aAAa7gkB,IAAK25J,IAC1B81C,SAAC,IAAD,CAEIznN,GAAI+6J,EAAY,QAAS4W,EAAM82R,UAAU,EACzC7iV,UAAW,aAAau6C,EAAYwR,EAAMspa,UAAU,EAAE,IAAI96a,EACtDg7a,GACF,GAEF1+d,UAAAgrG,SAAC,OAAD,CACIlxJ,EAAG,EACHiuH,WAAY7S,EAAMs0O,WAAa,IAAM,IACrC58X,KAAMsoJ,EAAM29C,MACZ1pG,UAAW,oBACX6+D,SAAU,KAAKk1Z,oBACf70O,WAAW,MACX1qD,GAAItwI,GAAY1jB,GAAc2jB,MAAM,EACpCy8V,gBACI,KAAK4vE,kBAAkBzka,EAAM82R,UAAU,EAE3CloP,iBAA0B,KAAKm5V,eAAA,EAC/B78L,YAAqB,KAAKs5N,cAAcxka,EAAM82R,UAAU,EAEvDhsV,SAAAk1D,EAAMz1F,IACL,EACP,EAtBM,SAASy1F,EAAM82R,YAsBrB,EAEX,CAEA,IAAsBkxI,qBAA8B,CAChD,OAAO76G,GAAc,GAAI,KAAKr6S,QAAQ,CAC1C,C,aACJ,GCvsBA,SAAgB22Z,IACZ7vkB,EAAA,CAMA,GAAM,CAAEgrD,IAAGwuc,SAAQ+vC,OAAM,GAAGzgI,GAAe9oa,EAE3C,OACIk8M,SAAC6lF,IAAD,CACI95R,MAAO,CAAEpN,EAAG2+f,EAAQxuc,GAAE,EACtBhY,IAAK,CAAEn4C,EAAG0uiB,EAAMv+e,GAAE,EAClB,GAAI89W,CACP,EAET,CCLA,SAAgBgnK,IAAkB,CAC9B7/G,UAAA,CAIA,IAAM/jY,EAAQojc,GAAer/D,EAAOt+H,UAC9B,CAAE1pV,QAAO+qC,OAAQi9a,EAGjB1sL,EADgB0sL,EAAO7pT,MAAMosK,aAAat5J,UACX,KAAO,EAAI,IAEhD,OACIgjC,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,YAAamQ,QAASzzE,EAAMyzE,QAC3CzuD,UAAAgrG,SAAC6zX,IAAD,CACIv2E,OAAQvxf,EAAMpN,EACd0uiB,KAAMv2f,EAAIn4C,EACVkpN,MAAOksQ,EAAOlsQ,MACdlrI,MAAO0qN,EACPlB,WAAYlyI,KAAK/0J,IAAI,IAAK,GAAM43C,EAAIqmI,MAAM,CAC7C,EACF,EAEX,CAEA,SAAgB22Z,IAAkB,CAC9B//G,SACAigE,kBAAA,CAKA,OAAOh+hB,GAAMg+hB,GACR3vX,KAAK3oB,GAAuBq4b,WACzB/zX,SAACg0X,IAAD,CAAgCjgH,QAAS,IAE5C1vT,KAAK3oB,GAAuBu4b,UACzBj0X,SAACk0X,IAAD,CAA+BngH,QAAS,IAE3CxvT,WAAA,CACT,CAEA,SAAS2va,IAAsB,CAC3BngH,UAAA,CAIA,IAAM/jY,EAAQojc,GAAer/D,EAAOt+H,UAC9B,CAAE1pV,QAAO+qC,OAAQi9a,EAEjB72H,EAAUi3O,IAA2BpokB,EAAO+qC,GAElD,OACI2wP,UAAC,IAAD,CAAGlvS,GAAI+6J,EAAY,YAAamQ,QAASzzE,EAAMyzE,QAA/CzuD,SAAA,EACIgrG,SAAC,OAAD,CACIzjC,GAAI7jB,EAAY3sJ,EAAMpN,CAAC,EACvB+9K,GAAIhkB,EAAY5hH,EAAIn4C,CAAC,EACrByoS,OAAQ/B,IACRgC,YAAa,CAChB,IACDrnF,SAACo0X,GAAD,CACI77kB,GAAI+6J,EAAY,SAChB+gM,KAAMtoV,EACN+iD,EAAG,CAACouS,EACJ8rM,QAAA,EACH,IACDhpV,SAACo0X,GAAD,CACI77kB,GAAI+6J,EAAY,OAChB+gM,KAAMv9S,EACNgY,EAAGouS,EACH8rM,QAAA,EACH,EACF,C,EAEX,CAEA,SAASgrC,IAAuB,CAC5BjgH,UAAA,CAIA,IAAM/jY,EAAQojc,GAAer/D,EAAOt+H,UAC9B,CAAE1pV,QAAO+qC,OAAQi9a,EAEjBv6Y,EAAWy6E,KAAKqC,IAAIx/G,EAAIn4C,EAAIoN,EAAMpN,CAAC,EACnCktgB,EAAM53W,KAAKh1J,IAAI,EAAGu6E,GAAYztE,EAAMoxK,OAASrmI,EAAIqmI,OAAA,EAGjDk3Z,EAAel9a,GAAQ00W,EAAM,EAAG,CAAE3sgB,IAAK,EAAGD,IAAK8M,EAAMoxK,OAAS,CAAE,GAEhEh+C,EAAOroF,EAAIn4C,GAAKoN,EAAMpN,EAAI,EAAI,GAC9B21kB,EAAcvokB,EAAMpN,EAAIwgI,GAAQpzH,EAAMoxK,OAASk3Z,GAC/CE,EAAYz9hB,EAAIn4C,EAAIwgI,GAAQroF,EAAIqmI,OAASk3Z,GAIzCG,EAAkB3oE,EAAM4oE,EAExBv3O,EAAUi3O,IAA2BpokB,EAAO+qC,GAElD,OACI2wP,UAAC,IAAD,CAAGlvS,GAAI+6J,EAAY,YAAamQ,QAASzzE,EAAMyzE,QAA/CzuD,SAAA,CACKw/d,GACGx0X,SAAC6zX,IAAD,CACIv2E,OAAQg3E,EACRjnC,KAAMknC,EACN1sX,MAAOo9E,IACPkB,WAAYlyI,KAAK/0J,IAAI,IAAK,GAAM6M,EAAMoxK,MAAM,CAC/C,IAED6iC,SAAC,OAAD,CACIzjC,GAAI7jB,EAAY47a,GAChB53Z,GAAIhkB,EAAY67a,GAChBntS,OAAQnC,GACX,IAELjlF,SAACo0X,GAAD,CACI77kB,GAAI+6J,EAAY,SAChB+gM,KAAMtoV,EACN+iD,EAAG,CAACouS,EACJ8rM,QAAA,EACH,IACDhpV,SAACo0X,GAAD,CACI77kB,GAAI+6J,EAAY,OAChB+gM,KAAMv9S,EACNgY,EAAGouS,EACH8rM,QAAA,EACH,EACF,C,EAEX,CAEA,SAAS6qC,IAAc,CACnBv2E,SACA+vC,OACA1wd,QACAkrI,QACAs+E,cAAA,CAQA,OACInmF,SAAC2zX,IAAD,CACI7khB,EAAG,EACKwuc,SACF+vC,OACC1wd,QACAkrI,QACPw+E,UAAU,QACEF,aACZC,UAAW,GACXE,SAAS,OACZ,EAET,CAEA,SAAS6tS,IACLpokB,EACA+qC,EAAA,CAIA,IAAM0iC,EAAWy6E,KAAKqC,IAAIx/G,EAAIn4C,EAAIoN,EAAMpN,CAAC,EAIzC,OAHgBoN,EAAMoxK,OAASrmI,EAAIqmI,OAAS3jG,IACZztE,EAAMoxK,OAASrmI,EAAIqmI,QAE7B,GAAM,EAAI,CACpC,CAEA,SAASi3Z,GAAa,CAClB77kB,KACA87V,OACA20M,UAAU,GACVl6e,IAAI,IAOJ,OACIkxJ,SAAC,SAAD,CACQznN,KACJ8lL,GAAI3lB,EAAY27L,EAAK11V,CAAC,EACtB2/K,GAAI5lB,EAAY5pG,GAChBL,EAAGiqG,EAAY27L,EAAKl3K,MAAM,EAC1Bv7J,KAAMyyU,EAAKxsI,MACXu/E,OAAQ4hQ,EAAU,QAAU3lZ,MAC/B,EAET,CCrMA,SAAgBqxb,IACZ,EACA,EACkB,CAClB,GAAI58a,IAAe,EACnB,OAASC,EAAWD,GAAc,KAAK,IAAIA,CAAU,EAAK,GAC9D,CAGA,SAAgB68a,GACZ,EACA,EACqB,CACrB,OAAO5okB,EAAM,OAAS+qC,EAAI,MACpB,CAAE,KAAM/qC,EAAO,MAAO+qC,CAAI,EAC1B,CAAE,KAAMA,EAAK,MAAO/qC,CAAM,CACpC,CAcA,SAAgB6okB,IAAoB,CAChC,SACA,SACA,QACA,WACA,YAOW,CACX,GAAI7gH,EAAO,SAAW,GAAKp3Y,GAAS,EAChC,MAAO,CAAE,SAAQ,IAAK,CAAE,KAAM,EAAG,MAAO,CAAE,CAAE,EAEhD,IAAM8+E,EAAOs4T,EAAO,IAAK,GAAW,CAChC,GAAM,CAAE,OAAM,SAAU4gH,GAAY5gH,EAAO,MAAOA,EAAO,GAAG,EAC5D,MAAO,CACH,KAAM,CACF,MAAO37V,EAAK,MACZ,WAAYA,EAAK,MACXA,EAAK,MAAM,MAAQA,EAAK,MAAM,QAC9B,CACV,EACA,MAAO,CACH,MAAOI,EAAM,MACb,WAAYA,EAAM,MACZA,EAAM,MAAM,MAAQA,EAAM,MAAM,QAChC,CACV,CACJ,CACJ,CAAC,EAEGwwc,EAAc98gB,EAAO,GACrB+8gB,EAAY/8gB,EAAO,GACnBmvgB,EAAU,EACVjf,EAAW,EAGTy4B,EAAY,GAElB,IAAK,IAAIv0kB,EAAI,EAAGA,EAAI,EAAgB,IAAK,CACrC,IAAMw0kB,EAAa7L,EAAYD,EACzB+L,EAAiBp4f,EAAQ0+e,EAAUjf,EACzC,GAAI04B,GAAc,GAAKC,GAAkB,EAAG,MAG5C,IAAMC,EAAgBD,EAAiBD,EACjCG,EAAmB5Z,EAAU2N,EAAcgM,EAC3CE,EAAW,GACbD,EAAmBr9kB,EAAQo9kB,EAG3BG,EAAe,EACfC,EAAgB,EACpB,IAAK,IAAMl3Z,KAAOziB,EAAM,CACpB,IAAMikX,EAAQw1D,EAAQh3Z,EAAI,KAAK,KAAK,EAC9ByhW,EAASu1D,EAAQh3Z,EAAI,MAAM,KAAK,EAEtC,EAAe,KAAK,IAAIi3Z,EAAcj3Z,EAAI,KAAK,WAAawhW,CAAK,EACjE,EAAgB,KAAK,IACjB01D,EACAz1D,EAASzhW,EAAI,MAAM,WAAavhG,CACpC,CACJ,CAGA,GAAIw4f,EAAeN,GAAaO,EAAgBP,EAAW,MAK3D,IAAMQ,EAAgBP,EAAaC,EAC/BI,GAAgBN,IACZS,EAAU,GAAWH,EACpB,GAAeA,EAAeE,GAEnCD,GAAiBP,IACbU,EAAU,GAAYH,EACrB,GAAaA,EAAgBC,EAE1C,CAEA,MAAO,CACH,OAAQ,CAACrM,EAAaC,CAAS,EAC/B,IAAK,CAAE,KAAM5N,EAAS,MAAOjf,CAAS,CAC1C,CACJ,CC5GA,SAAgBo5B,IAAiB,CAC7BzhH,SACA55O,OACA65S,iBACAlle,IACAihC,QACA4qe,kBACA1xB,qBAAA,CAUA,IAAMj5c,EAAQojc,GAAer/D,EAAOt+H,UAC9B,CAAEr9N,KAAMq9c,EAAUj9c,MAAOk9c,GAAcf,GACzC5gH,EAAOhod,MACPgod,EAAOj9a,GACX,EAEA,OACI2wP,UAAC,IAAD,CACIlvS,GAAI+6J,EAAYygU,EAAOC,UAAU,EACjC71W,UAAW,gBAAgBu6C,EAAY5pG,GAAG,GAC1C20G,QAASzzE,EAAMyzE,QACfzzE,MAAO,CAAEs6c,cAAe,MAAO,EAJnCt1b,SAAA,EAOIgrG,SAAC,OAAD,CACIznN,GAAI+6J,EAAY,mBAChBipB,GAAI7jB,EAAY3oE,EAAM,EAAE,EACxB2sF,GAAIhkB,EAAY3oE,EAAM,EAAE,EACxBq3M,OAAQk7P,GACR/kM,qBACH,GAGAw2H,EAAO7pT,QACJ81C,SAAC+oV,GAAD,CACI3riB,MAAO22d,EAAO7pT,MACdvrK,EAAGo1d,EAAOysE,cAAc7hiB,EACxBmwD,EAAGila,EAAOysE,cAActjM,QACxBr1I,MAAO,CAAEzuN,KAAM42F,EAAMmjc,UAAW,EACb8V,mBACtB,GAIJl1E,EAAOq5E,oBACJr5E,EAAO4hH,qBAAuBtyb,SAC1B28D,SAAC64H,GAAD,CACI9B,SAAUg9I,EAAOq5E,mBACjBzuiB,EAAGo1d,EAAO4hH,mBAAmBh3kB,EAC7BmwD,EAAGila,EAAO4hH,mBAAmBz4O,QAC7Bt7U,eACAy7U,WAAW,KACd,GAIRljH,IAAS44S,GAAaqB,WACnBp0U,SAAC4zX,IAAD,CAA2B7/G,QAAS,IAEpC/zQ,SAAC8zX,IAAD,CACY//G,SACQigE,gBACnB,GAIJ4hD,IAASH,KACNz1X,SAAC61X,IAAD,CACIlqY,KAAK,OACL0oJ,KAAMohP,EACNzlf,MAAO2qe,CACV,GAIJib,IAASF,KACN11X,SAAC61X,IAAD,CACIlqY,KAAK,QACL0oJ,KAAMqhP,EACN1lf,MAAO2qe,CACV,EAEN,C,EAEX,CAEA,SAASkb,IAAmB,CACxBlqY,OACA0oJ,OACArkQ,SAAA,CAMA,IAAMrxF,EACFgtM,IAAS,OACH0oJ,EAAK11V,EAAI01V,EAAKnqL,MAAMpqC,QACpBu0N,EAAK11V,EAAI01V,EAAKnqL,MAAMpqC,QAE9B,OACIkgF,SAACi9O,GAAD,CACI1kc,GAAI+6J,EAAY,GAAG+gM,EAAKnqL,MAAMz1F,KAAK,OAAO,EAC1CuoG,SAAUhtF,EAAMgtF,SAEhBhoE,UAAAgrG,SAAC,OAAD,CACIrhN,EAAG+5J,EAAY/5J,GACfijB,KAAMkzR,GAAmBu/C,EAAKxsI,KAAK,EACnC8qF,GAAItwI,GAAY1jB,GAAc2jB,MAAM,EACpC+6L,WAAY1xJ,IAAS,OAAS,MAAQ,QACtC3uB,SAAUhtF,EAAMgtF,SAChBD,WAAY/sF,EAAM+sF,WAEjB/nE,SAAAq/O,EAAKnqL,MAAMz1F,IACV,EACJ,EAEd,CAEA,SAAgBmhgB,IACZvhP,EAAA,CAEA,OAAOA,EAAKnqL,QAAU7mB,MAC1B,CC/IA,SAAgByyb,IAAoB,CAChC14kB,QACA0xD,IACA+4J,QAAQ49E,IAAA,CAMR,OACIzlF,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,yBACdt+C,SAAA53G,EAAMi5gB,aAAa9lgB,KAAKwjd,EAAQzzd,KAC7B0/M,SAAC64H,GAAD,CAEI9B,SAAUg9I,EAAOh9I,SACjBp4U,EAAGo1d,EAAO92S,OAAO7kD,KACdtpE,IACHltC,KAAMmyc,EAAOlsQ,OAASA,CACzB,EALQ,GAAGksQ,EAAO,GAAGzzd,GAKrB,EAEN,EAEX,C,s1GCCay1kB,IAAb,KAAaA,C,gCAuBRpjd,E,EAAqBt0H,S,GAOrBs0H,E,EAAa0pa,a,GAYb1pa,E,EAAa0jZ,c,GAgFb1jZ,E,EAAaw9a,Y,KAzHdd,cACAjlc,eAEAqmG,0BAAkC,CAC9B6lI,aAAc,CACVt5J,YACAD,WAAY,IACZi6J,WAAY,CAChB,EACAkkM,OAAQ,CAAC,KAAWjnY,GAAQ,EAC5B+hc,OAAQ,CACZ,GAEA,YACIjiH,EACA11d,EACF,CACE,KAAKgxiB,cAAgBt7E,EACrB,KAAK3pX,eAAiB/rG,EACtBk3L,EAAe,IAAI,CACvB,CAEA,IAAsBl3L,SAGpB,CACE,MAAO,CAAE,GAAG,KAAKoyM,eAAgB,GAAG,KAAKrmG,cAAe,CAC5D,CAEA,IAAciyb,aAA0C,CACpD,GAAM,CAAE/lN,gBAAiB,KAAKj4U,QAC9B,OAAO,KAAKgxiB,cAAc9+hB,IAAKwjd,IAC3B,IAAMh9I,EAAW,IAAIU,GAAS,CAC1B,GAAGnB,EACH7hQ,KAAMs/Y,EAAOt/Y,KACbijQ,SAAUzjM,GACd,GACA,MAAO,CAAE,GAAG8/U,EAAQh9I,UAAS,CACjC,EACJ,CAEA,IAAcs/L,cAA4C,CACtD,GAAM,CACF2/D,SACA96D,OAAQ,CAAC8J,EAAMC,IACf,KAAK5mhB,QAGHg4gB,EAAe,KAAKgmB,YAAY9rhB,IAAKwjd,IACvC,GAAM,CACFp1d,IACAo4U,SAAU,CAAEp6P,QAAOvkB,UACnBilS,aAAa5+M,GAAgBrmB,MAC7B27V,EAGEkiH,EAAYjglB,GAAMqnW,GACnBh5L,KAAK5lB,GAAgBrmB,SAAYz5H,GACjC0lK,KAAK5lB,GAAgBjmB,UAAa75H,EAAIg+E,GACtC0nF,KAAK5lB,GAAgBhmB,WAAc95H,EAAIg+E,EAAQ,GAC/C4nF,WAAA,EAEL,MAAO,CACH,GAAGwvT,EACH92S,OAAQ,IAAIZ,EAAO45Z,EAAW,EAAGt5f,EAAOvkB,EAC5C,CACJ,GAGA,IAAK,IAAM27Z,KAAUsiD,EAAc,CAC/B,IAAM6/D,EAAW7miB,GACb0kb,EAAO92S,OAAOt+K,EACdqmhB,EACAC,EAAOlxD,EAAO92S,OAAOtgG,KACzB,EAEIu5f,IAAaniH,EAAO92S,OAAOt+K,IAC3Bo1d,EAAO92S,OAAS82S,EAAO92S,OAAOlgL,IAAI,CAAE4B,EAAGu3kB,CAAS,GACxD,CAEA,GAAM,CAACC,EAAWC,GAAc/miB,GAC5Bgne,EACCtiD,GAAWA,EAAO92S,OAAOt+K,CAC9B,EAGM03kB,EAAUF,EAAUl5Z,OAAOzkD,MAAQw9c,EAASI,EAAWn5Z,OAAO7kD,KAIpE,GAAIi+c,EAAU,EAAG,CAEb,IAAMC,EAAqBH,EAAUl5Z,OAAOt+K,EAAIqmhB,EAC1CuxD,EAAsBtxD,EAAOmxD,EAAWn5Z,OAAOzkD,MAGjDg+c,EAAYvib,KAAK/0J,IAAIm3kB,EAAU,EAAGC,GAChCG,EAAaxib,KAAK/0J,IACpBm3kB,EAAUG,EACVD,GAKAC,EAAYC,EAAaJ,IACzBG,EAAYvib,KAAK/0J,IAAIm3kB,EAAUI,EAAYH,IAI/CH,EAAUl5Z,OAASk5Z,EAAUl5Z,OAAOlgL,IAAI,CACpC4B,EAAGw3kB,EAAUl5Z,OAAOt+K,EAAI63kB,CAC5B,GACAJ,EAAWn5Z,OAASm5Z,EAAWn5Z,OAAOlgL,IAAI,CACtC4B,EAAGy3kB,EAAWn5Z,OAAOt+K,EAAI83kB,CAC7B,EACJ,CAEA,MAAO,CAACN,EAAWC,CAAU,CACjC,CAGA,IAAcjmC,YAAsB,CAChC,GAAM,CAAE6lC,UAAW,KAAK33kB,QAClB,CAAC83kB,EAAWC,GAAc,KAAK//D,aAGrC,OAFY+/D,EAAWn5Z,OAAO7kD,KAAO+9c,EAAUl5Z,OAAOzkD,MAEzCw9c,EAAS,IAC1B,CACJ,E,80GC7H8Cn6X,cAAMpoG,UAANooG,QAyHAA,O,KAzHvC,cAAuCA,I,wCAD7C5zH,C,IAOI0qC,E,EAAqBgjZ,Y,GAIrBhjZ,E,EAAqBrxH,Q,GAMrBqxH,E,EAAqBq1B,U,GAarBr1B,E,EAAqB6nZ,iB,GAqCrB7nZ,E,EAAqBk/a,gB,CAlEoBh2V,gB,CAC1C,YAAY/3M,EAA6B,CACrC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAsBogV,YAAiC,CACnD,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAAsBr0gB,QAA0C,CAC5D,IAAM0yd,EAAa,KAAKlwd,MAAM2tiB,aAAanwiB,QAAQ0yd,WACnD,GAAKA,EACL,OAAO,KAAKlwd,MAAMiwd,OAAO1+T,KAAM9lH,GAAMA,EAAEykb,aAAeA,EAC1D,CAEA,IAAsBhsU,UAAmB,CACrC,GAAM,CAAEkvX,eAAc1+e,YAAWC,WAAY,KAAKk9e,WAC5C,CAAEr0gB,UAAW,KAEbo1kB,EAAoBp1kB,GAAQyK,MAAMs8B,MAAQ7P,EAC1Cm+iB,EAAkBr1kB,GAAQw1C,IAAIzO,MAAQ5P,EAE5C,OAAOy+e,EAAa3oE,qBAChBmoI,EACAC,EAER,CAEA,IAAsBn8D,iBAA0C,CAC5D,GAAM,CAAEl5gB,UAAW,KACnB,GAAI,CAACA,EAAQ,OAEb,GAAM,CAAE41gB,eAAc1+e,YAAWC,WAAY,KAAKk9e,WAC5CihE,EAAkBt1kB,EAAOyK,MAAMs8B,OAAS7P,EACxCq+iB,EAAgBv1kB,EAAOw1C,IAAIzO,OAAS5P,EAE1C,GAAIm+iB,GAAmBC,EAAe,OAEtC,IAAM1oI,EAAc3/Y,GAAc0od,EAAa/oE,WAAW3/Y,GACpDusC,EACF,CAAC67e,GAAmB,CAACC,EACf,GAAG1oI,EAAW31a,GAAW,OAAO21a,EAAW11a,KAGzC01a,EAFDyoI,EAEYn+iB,EADAD,CACAC,EAKjBu3a,EACF,CAAC4mI,GAAmB,CAACC,EACfxzb,OAGE8qT,EAFDyoI,EAEYt1kB,EAAOw1C,IAAIzO,KADX/mC,EAAOyK,MAAMs8B,IACE,EAEtC,MAAO,CACHg/O,KAAM8wM,GAAkBsF,OACxBhpZ,KAAM2mZ,GAA2BrgY,EAAY,CACzCsgY,OAAQ,CAACu7G,GAAmB,CAACC,EAC7B7mI,cACJ,EACJ,CACJ,CAEA,IAAsB6hG,gBAAyC,CAC3D,GAAM,CAAE36B,gBAAiB,KAAKvB,WAC9B,GAAKuB,EAAazrE,2BAClB,MAAO,CACHpkL,KAAM8wM,GAAkBwF,KACxBlpZ,KAAM6mZ,GAA0B,CAC5B47C,EAAaxoW,qBAChB,EACL,CACJ,CAEA2mC,QAA6C,CACzC,GAAM,CAAE/zM,UAAW,KACb,CAAEikF,WAAUysd,UAAW,KAAKluiB,MAAM2tiB,aACxC,GAAI,CAACnwiB,EAAQ,OAAO,KAEpB,GAAM,CAAE41gB,gBAAiB,KAAKvB,WACxBtvf,EAA2B,CAAC/kB,EAAOyK,MAAMnU,MAAO0J,EAAOw1C,IAAIl/C,KAAK,EAChE0vW,EAASxwM,GAAiB,CAC5B,KAAK0jX,gBACL,KAAKq3B,cACR,GAED,OACI7xV,SAACi6O,GAAD,CACI1hc,GAAI,KAAKuL,MAAMvL,GACfsle,eAAgB,KAAK83C,WAAWplb,QAChC5xF,EAAG4mF,EAAS5mF,EACZmwD,EAAGy2B,EAASz2B,EACZo2I,QAAS,GACTD,QAAS,IACTj1G,MAAO,CAAE0nP,SAAU,OAAQ,EAC3BjwL,MAAOnmJ,EAAOglc,YACdt+S,SAAU,KAAKA,SACfk1U,eAAgB,KAAKs9C,gBAAkB,SAAWn3X,OAC1CikN,SACR61H,SAAU60E,EACVtmD,QAAS,KAAK5nf,MAAMmuiB,eAEpBj9b,UAAAgrG,SAACq5Q,GAAD,CACInvT,MAAOgtW,EAAa5wE,YACpBt5a,KAAMkqf,EAAaxrE,YACnBrlb,OAAQq1c,GAAyBr1c,EAAQ6wf,GACzC39C,MAAO5wT,MAA2BtiJ,EAASzuB,GACvCs/gB,EAAazjM,iBAAiB77U,IAElC0he,WAAYh4d,EAAOumN,MACnBmxQ,aAAa,WAChB,EACI,EAEjB,C,aACJ,GAG8Cn9Q,KAAMpoG,U,SAA7C,cAAuCooG,G,wCAD7C5zH,C,IAOI0qC,E,EAAqBgjZ,Y,GAIrBhjZ,E,EAAqBrxH,Q,GAMrBqxH,E,EAAqB+oC,S,GAKrB/oC,E,EAAqBq1B,U,GAKrBr1B,E,EAAqB6nZ,iB,GAgBrB7nZ,E,EAAqBk/a,gB,GA8BrBl/a,E,EAAqBk3c,yC,GAIrBl3c,E,EAAqBmkd,W,CA5EoBj7X,e,CAC1C,YAAY/3M,EAA6B,CACrC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAsBogV,YAAiC,CACnD,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAAsBr0gB,QAA0C,CAC5D,IAAM0yd,EAAa,KAAKlwd,MAAM2tiB,aAAanwiB,QAAQ0yd,WACnD,GAAKA,EACL,OAAO,KAAKlwd,MAAMiwd,OAAO1+T,KAAM9lH,GAAMA,EAAEykb,aAAeA,EAC1D,CAEA,IAAsBt4T,SAAoC,CACtD,GAAM,CAAC24X,EAAaC,GAAa,KAAK3e,WAAWrhD,SACjD,MAAO,CAAC+/D,EAAaC,CAAS,CAClC,CAEA,IAAsBtsY,UAAmB,CACrC,GAAM,CAAEkvX,eAAcz+e,WAAY,KAAKk9e,WACvC,OAAOuB,EAAa/oE,WAAW11a,EACnC,CAEA,IAAsB+hf,iBAA0C,CAC5D,GAAM,CAAEl5gB,UAAW,KACnB,GAAI,CAACA,EAAQ,OAEb,GAAM,CAAE41gB,eAAcz+e,WAAY,KAAKk9e,WACjCihE,EAAkBt1kB,EAAOyK,MAAMs8B,OAAS5P,EACxCo+iB,EAAgBv1kB,EAAOw1C,IAAIzO,OAAS5P,EAE1C,GAAIm+iB,KAAmBC,GAEvB,MAAO,CACHxvT,KAAM8wM,GAAkBsF,OACxBhpZ,KAAM2mZ,GAA2B87C,EAAa/oE,WAAW11a,GAC7D,CACJ,CAEA,IAAsBo5gB,gBAAyC,CAC3D,IAAM5+e,EAAU6jG,GAAiB,CAAI,QAAK4E,QAAS,KAAKo7a,SAAU,GAE5DrM,EAAsBx3gB,EAAQ8yG,MAC/B/zG,GAAUA,EAAMy5Y,0BACrB,EAKA,GAAI,CAJwBx4Y,EAAQmjE,KAC/BpkE,GAAUA,EAAMy5Y,0BAGhBi/H,EAAqB,OAE1B,IAAM5gD,EAAUhzX,GACZ7jG,EAAQ1iD,IAAKyhD,GACTA,EAAMy5Y,2BACAz5Y,EAAM08G,sBACNrrB,SAId,MAAO,CACHgkI,KAAMojT,EACAtyG,GAAkBwF,KAClBxF,GAAkBuF,aACxBjpZ,KAAM6mZ,GAA0BwuD,EAAS,CACrCzuD,OAAQyuD,EAAQzqhB,OAAS,CAC7B,EACJ,CACJ,CAEA,IAAsBwqkB,yCAAmD,CACrE,OAAO,KAAKh4B,gBAAgBxqR,OAAS8wM,GAAkBuF,YAC3D,CAEA,IAAsBo5G,WAON,CACZ,GAAM,CAAE7iD,kBAAmB,KAAKte,WAMhC,GAHIse,IAAmBp4Y,GAAuBk7b,QAC1C9iD,IAAmBp4Y,GAAuBm7b,cAErB,OAEzB,IAAMp/kB,EAAQ,KAAK0J,QAAQw1C,IAAIozH,OAAOz1F,KACtC,GAAI78E,IAAUyrJ,OAAW,OAEzB,GAAM,CAACgxY,GAAe,KAAK34X,QAC3B,OAAO1lK,GAAMi+hB,GACR5vX,KAAKxoB,GAAuBk7b,YAAe,CACxC7sa,MAAO,SACPtyK,QAEA6zc,2BACI4oF,EAAY5oF,2BAChB/8R,sBAAuB2lX,EAAY3lX,qBACvC,IACCrK,KAAKxoB,GAAuBm7b,mBAAsB,CAC/C9sa,MAAO,iBACPtyK,QAEA6zc,2BAA4B,GAC5B/8R,sBAAuB,CAC3B,IACCnK,WAAA,CACT,CAEA8wC,QAA6C,CACzC,GAAM,CAAE/zM,UAAW,KACb,CAAEikF,WAAUysd,UAAW,KAAKluiB,MAAM2tiB,aACxC,GAAI,CAACnwiB,EAAQ,OAAO,KAEpB,GAAM,CAAC+yhB,EAAaC,GAAa,KAAK54X,QAChC,CAAEjjI,WAAY,KAAKk9e,WACnBruK,EAASxwM,GAAiB,CAC5B,KAAK0jX,gBACL,KAAKq3B,cACR,GAED,OACIpqQ,UAACwyJ,GAAD,CACI1hc,GAAI,KAAKuL,MAAMvL,GACfsle,eAAgB,KAAK83C,WAAWplb,QAChC5xF,EAAG4mF,EAAS5mF,EACZmwD,EAAGy2B,EAASz2B,EACZo2I,QAAS,GACTD,QAAS,IACTj1G,MAAO,CAAE0nP,SAAU,OAAQ,EAC3BjwL,MAAOnmJ,EAAOglc,YACdt+S,SAAU,KAAKA,SACPs/M,SACR61H,SAAU60E,EACVtmD,QAAS,KAAK5nf,MAAMmuiB,eAZxBj9b,SAAA,EAcIgrG,SAAC+4Q,GAAD,CACI7uT,MAAOmqX,EAAY/tF,YACnBt5a,KAAMqngB,EAAY3oF,YAClB9zc,MAAOy8hB,EAAY5gN,iBAAiBnyU,EAAOyK,MAAMnU,KAAK,EACtDiwN,MAAOvmN,EAAOyK,MAAM87M,MACpBmoP,aACI1uc,EAAOyK,MAAMs8B,OAAS5P,EAEhB4qH,OADAgxY,EAAYlmF,WAAW7sc,EAAOyK,MAAMs8B,IAAI,EAGlD4wb,4BACI,KAAK4wG,yCACLx1C,EAAY5oF,2BAEhButB,aAAa,YAChB,IACDh5Q,SAAC+4Q,GAAD,CACI7uT,MAAOoqX,EAAUhuF,YACjBt5a,KAAMsngB,EAAU5oF,YAChB9zc,MAAO08hB,EAAU7gN,iBAAiBnyU,EAAOw1C,IAAIl/C,KAAK,EAClDiwN,MAAOvmN,EAAOw1C,IAAI+wK,MAClBmoP,aACI1uc,EAAOw1C,IAAIzO,OAAS5P,EAEd4qH,OADAixY,EAAUnmF,WAAW7sc,EAAOw1C,IAAIzO,IAAI,EAG9C4wb,4BACI,KAAK4wG,yCACLv1C,EAAU7oF,2BAEdutB,aAAa,YAChB,GACA,KAAK89G,YACF92X,SAAC+4Q,GAAD,CACI7uT,MAAO,KAAK4sa,UAAU5sa,MACtBtyK,MAAO,KAAKk/kB,UAAUl/kB,MACtBiwN,gBACAoxQ,4BACI,KAAK4wG,yCACL,KAAKiN,UAAUrrI,0BAEtB,EAEA,C,EAEjB,C,aACJ,G,80GC/PY5vP,cAAMpoG,UAANooG,I,IADL,cACKA,I,uCAFX5zH,C,IAiBI0qC,E,EAAagjZ,Y,GAIbhjZ,E,EAAqBpiC,S,GAIrBoiC,E,EAAqBsqD,Q,GAKrBtqD,E,EAAqBkwc,qB,GAIrBlwc,E,EAAaqqD,U,GAIbrqD,E,EAAqBohW,Q,GAIrBphW,E,EAAqB6na,0B,GAIrB7na,E,EAAqB+nc,kB,GAarB/nc,E,EAAqBgoc,iB,GAMrBhoc,E,EAAqBskd,wB,GAyDrBtkd,E,EAAa0pa,a,GAiCb1pa,E,EAAqBuoZ,Q,GAIrBvoZ,E,EAAqBmlZ,a,GAqBrBnlZ,E,EAAaukd,Y,GAKbvkd,E,EAAaowE,M,GAIbpwE,E,EAAqBwkd,e,GAWrBxkd,E,EAAqBykd,Y,GAerBzkd,E,EAAqB0kd,qB,GAUrB1kd,E,EAAao5Z,Y,GAMbp5Z,E,EAAqBqjZ,a,GAKrBrjZ,E,EAAqB2kd,Y,GAIrB3kd,E,EAAqB4kd,oB,GAcrB5kd,E,EAAqB0jZ,c,GAsCrB1jZ,E,EAAqBgtb,mB,GAIrBhtb,E,EAAqB+5a,c,GAWrB/5a,E,EAAa6kd,c,GA4Cb7kd,E,EAAqB8kd,kB,GAUrB9kd,E,EAAqB+kd,e,GAUrB/kd,E,EAAqBgld,iB,GAarBhld,E,EAAqBild,4B,GAMrBjld,E,EAAqBkld,oB,GA6ErBlld,E,EAAqBmld,mB,GAYrBnld,E,EAAqBowc,a,GAIrBpwc,E,EAAqB2pb,uB,GAmBrB3pb,E,EACWold,wB,IAkBXlhe,IAAOo6D,K,KAAcghY,gB,IAIrBp7b,IAAOo6D,K,KAAc+ma,oB,IASrBnhe,IAAOo6D,K,KAAcgna,mB,IAMrBphe,IAAOo6D,K,KAAcina,oB,CA1hBdr8X,gB,CAQR,YAAY/3M,EAA2B,CACnC,MAAMA,GACNyxL,EAA8C,KAAM,CAChDk8W,aAAcruX,CAClB,EACJ,CAVA80Q,qBAA6Bz/R,MAC7Bg5Y,aAAgC,IAAIt1E,GAAqC,CACrEpgM,KAAM,WACV,GASA,IAAc45O,YAAiC,CAC3C,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAAsBplb,SAAgC,CAClD,OAAO,KAAKolb,WAAWplb,OAC3B,CAEA,IAAsB0sF,QAAiB,CAEnC,OAAQ,KAAKn5K,MAAMm5K,QAAUkjR,IAAwBk8G,UAAU,EACnE,CAEA,IAAsBwmB,qBAA8B,CAChD,OAAO,KAAK5lZ,OAAOyvW,OAAO,KAAKkrD,0BAA0B,CAC7D,CAEA,IAAc56Z,UAAmB,CAC7B,OAAO,KAAKzsF,QAAQysF,YACxB,CAEA,IAAsB+2S,QAA2B,CAC7C,OAAO,KAAK4hD,WAAW5hD,MAC3B,CAEA,IAAsBymE,0BAAmC,CACrD,OAAO,KAAKqoC,oBAAoBzqgB,OAAS,KAAK27Z,OAAO10d,MACzD,CAEA,IAAsBq7jB,kBAAiC,CAInD,IAAMlgC,EAA2B,KAAKv9W,OAAO7kH,OAAS,KAAK27Z,OAAO10d,OAMlE,MAAO,CAAE29K,SAJQo6S,GACbnjU,KAAK/0J,IAAIm4d,GAAc,GAAI,KAAKr6S,QAAQ,EAAGw9W,EAGtCx9W,EAAUD,WAAY,IAAKi6J,WAAY,CAAE,CACtD,CAEA,IAAsB2jP,iBAAgC,CAGlD,MAAO,CAAE39Y,SAFQ,KAAK09Y,iBAAiB19Y,SAAW,GAE/BD,WAAY,IAAKi6J,WAAY,CAAE,CACtD,CAEA,IAAsBigQ,wBAAuC,CACzD,MAAO,CACHj6Z,SAAU,KAAK29Y,gBAAgB39Y,SAC/BD,WAAY,IACZi6J,WAAY,CAChB,CACJ,CAEAmhQ,gBAAwB1jgB,EAAkC,CACtD,MAAO,CACHA,OACAkI,MAAOw6Y,GAAU1iZ,EAAM,KAAKkmf,eAAe,EAC3C76b,QACI,KAAK61Y,WAAWx7R,OAAS44S,GAAaqB,cAEV,KAAKmjD,kBACzC,CACJ,CAEAa,eACItgb,EACAC,EACgC,CAChC,OAAO/hK,GAAM,KAAK2/gB,WAAWse,cAAc,EACtC5vX,KAAKxoB,GAAuBw8b,aAGrB,KAAK1iE,WAAWx7R,OAAS44S,GAAaqB,WACtCt8X,IAAeC,EAER,CAAEhsJ,MAAO,KAAK68J,YAAY9Q,EAAY,EAG1C,CACH/rJ,MAAO,KAAK68J,YAAY9Q,GACxBhhH,IAAK,KAAK8xH,YAAY7Q,EAC1B,CACJ,EACCsM,KAAKxoB,GAAuBk7b,WAAA,CACzB,IAAMn3W,EAAO7nE,EAAWD,EACxB,MAAO,CAAEhhH,IAAK,KAAK8xH,YAAYg3D,EAAM,CAAEtxD,SAAU,EAAK,EAAG,CAC7D,GACCjK,KAAKxoB,GAAuBm7b,kBAAA,CACzB,IAAM1rZ,EAASopZ,IAAqB58a,EAAYC,GAEhD,OADIuzB,IAAWjoC,OAAkB,CAAC,EAC3B,CACHvsG,IAAK8xH,GAAY0iB,EAAQ,CACrBhd,SAAU,GACVthJ,KAAM,IACN8hJ,iBAAkB,CACtB,EACJ,CACJ,GACCzK,KAAKxoB,GAAuB8hV,UAAa,CAAC,IAC1Cp5T,WAAA,CACT,CAEA,IAAc83X,aAAqC,CAC/C,OAAOhC,GAAuB,CAC1BtmE,OAAQ,KAAKA,OACbymE,yBAA0B,KAAKA,yBAC/BC,cAAe,GAAM,KAAKx9W,OAAOtgG,MACjC+9c,cAAe,IAAO,KAAKz9W,OAAOtgG,MAClC25P,aAAc,KAAKokP,iBACnBtiC,kBAAmB,CAAC,KAAK7nc,QAAQ86a,QACrC,GAAG96f,IAAKwjd,IACJ,GAAM,CAAEhod,QAAO+qC,OAAQ,KAAKshiB,eACxBrkH,EAAOhod,MAAMnU,MACbm8d,EAAOj9a,IAAIl/C,KACf,EAEMozhB,EAAaj/gB,EAAQ,KAAKoskB,gBAAgBpskB,GAASs3I,OACnD48Z,EAAWnpgB,EAAM,KAAKqhiB,gBAAgBrhiB,GAAOusG,OAEnD,MAAO,CACH,GAAG0wU,EACHhod,MAAO,CACH,GAAGgod,EAAOhod,MACVm+J,MAAO8gX,EACP7tW,OAAQ,KAAKo6Z,kBACjB,EACAzgiB,IAAK,CACD,GAAGi9a,EAAOj9a,IACVozH,MAAO+1Y,EACP9iY,OAAQ,KAAKo6Z,kBACjB,CACJ,CACJ,EACJ,CAEA,IAAsBr8D,QAA2B,CAC7C,OAAO,KAAKo8D,WAAWp8D,OAAA,CAC3B,CAEA,IAAsBpD,aAA0B,CAC5C,OAAO,IAAIkV,GACP,CACI,GAAG,KAAKz8b,QAAQunb,YAChBwO,cAAe,GACfG,6BAA8B,EAClC,EACA,IACJ,CACJ,CAEAzN,iBAAyB97f,EAA+C,CACpE,IAAM6lL,EAAO,KAAK+0U,YAAYkB,iBAAA,EAM9B,OALAj2U,EAAKk2U,mCAAmC,KAAKm+D,WAAWlrhB,MAAM,EAC9D62I,EAAKvrC,UAAYvkB,GAAUg8J,OAC3BlsG,EAAKm0U,aAAe,KAAKvB,WAAWuB,aAC/Bh6f,GAAMo7jB,YAAWv1Y,EAAKhzG,MAAQ,KAAKmrb,QACxCn4U,EAAK74B,MAAQ,GACN64B,CACX,CAEA,IAAcm0Y,YAAqB,CAE/B,OAAO,KAAKl+D,iBAAiB,CAAEs/D,UAAW,EAAK,GAAGlghB,MACtD,CAEA,IAAc2qI,MAAuB,CACjC,OAAO,KAAKi2U,iBAAA,CAChB,CAEA,IAAsBm+D,eAAgB,CAClC,OAAOoB,MACFrshB,OAAO,KAAK6na,OAAOxjd,IAAKg/B,GAAMA,EAAEykb,UAAU,GAC1CjkY,MAAM,CAAC,KAAKimb,YAAYpjX,IAAK,KAAKojX,YAAYz2W,MAAO,GACrDz/B,QAAQ,GACjB,CAMA,IAAsBs3c,YAAyB,CAC3C,GAAM,CAACoB,EAAWC,GAAa,KAAK3gE,YAAY5rd,OAE1C62I,EAAO,KAAK+0U,YAAYkB,iBAAA,EAG9B,OAFAj2U,EAAKk2U,mCAAmC,KAAKtD,WAAW+E,cAAc,EAE/Dk6D,IAAoB,CACvB7gH,OAAQ,KAAKsoE,YACbnwe,OAAQ62I,EAAK72I,OACbywB,MAAO,KAAKovc,WAAWpvc,MACvB24f,SAAU3/a,OAAOC,SAAS4ib,GAC1BjD,SAAU5/a,OAAOC,SAAS6ib,EAC9B,EACJ,CAEA,IAAsBpB,qBAA8B,CAChD,IAAMlc,EAAe,KAAK9+B,YAAY/0X,QAASysT,GAAW,CACtDA,EAAO7pT,OAAOvtF,OAAS,EACvBo3Y,EAAOq5E,oBAAoBzwd,OAAS,CACvC,GAED,OADIw+e,EAAa97jB,SAAW,EAAU,EAC/B40J,KAAKh1J,IAAA,GAAOk8jB,EACvB,CAGA,IAAcpvC,YAAqB,CAC/B,OAAO,KAAK82C,oBAAoBxH,QAC5B,KAAKgc,qBAAsBqB,CAEnC,CAEA,IAAsB1iE,aAAsB,CACxC,OAAO,KAAK+V,WAAWswB,UAAU,KAAK66B,UAAU,CACpD,CAGA,IAAsBI,YAAqB,CACvC,OAAO,KAAKthE,YAAYyW,IAAI,KAAK2qD,WAAW3qD,GAAG,CACnD,CAEA,IAAsB8qD,oBAA6B,CAK/C,IAAMoB,EAAYC,IAHd,KAAKje,gBAAgB39Y,SAAW,KAAK29Y,gBAAgB3jP,WAGA,EAAK,KAE9D,OAAO3nS,GACH4kH,KAAKx1J,MAAM,KAAK+7hB,yBAA2B,GAC3C,EACAm+C,EAER,CAEA,IAAsBtiE,cAAuC,CACzD,OAAO,KAAKgmB,YACP9rhB,IAAKwjd,IACF,IAAM05E,EAAU,KAAK0pC,cAAcpjH,EAAOC,UAAU,EAC9C6oE,EAAS,KAAK7mB,YAAYr3gB,IAEhC,GAAI8uiB,IAAYpqZ,OAAW,OAE3B,GAAM,CAAEg2Y,SAAQyD,eAAgB3D,GAA+B,CAC3Drqe,EAAG2+e,EACHvjY,MAAO6pT,EAAO7pT,MACdsX,WAAYuyS,EAAOq5E,kBACvB,GAEM5M,EAAgB,CAAE7hiB,EAAGk+hB,EAAQ3/L,QAASm8L,EAASoU,CAAQ,EACvDkoC,EACF74C,IAAgBz5Y,OAEVA,OADA,CAAE1kJ,EAAGk+hB,EAAQ3/L,QAAS4/L,EAAc2Q,CAAQ,EAGtD,MAAO,CACH,GAAG15E,EACHjla,EAAG2+e,EACHjN,gBACAm1C,qBACA5pkB,MAAO,CACH,GAAGgod,EAAOhod,MACVpN,EAAG,KAAKokM,KAAKqiV,MAAMrxD,EAAOhod,MAAMnU,KAAK,CACzC,EACAk/C,IAAK,CACD,GAAGi9a,EAAOj9a,IACVn4C,EAAG,KAAKokM,KAAKqiV,MAAMrxD,EAAOj9a,IAAIl/C,KAAK,CACvC,CACJ,CACJ,GACCmwD,OAAQgsa,GAAWA,IAAW1wU,OACvC,CAEA,IAAsBs8Z,mBAAwC,CAC1D,OAAO,KAAKlO,aAAanwiB,QAAQ0yd,UACrC,CAEA,IAAsB04E,cAAuC,CACzD,OAAO,KAAKr2B,aAAa9lgB,IAAKwjd,IAK1B,IAAMt+H,EAAWu+K,GAAgB,CAAEj/C,MAJrB3B,GAAiB80E,IAC3Bn0E,EAAOC,WACP,KAAK2rF,iBAE0B5qF,EAAOz4U,MAAOy3U,EAAOz3U,KAAM,GAC9D,MAAO,CAAE,GAAGy3U,EAAQt+H,UAAS,CACjC,EACJ,CAEA,IAAc+hP,cAEE,CACZ,GAAM,CAAE97B,aAAa,IAAS,KAAKnrd,QAEnC,GAAKmrd,GAAc,KAAK3nF,OAAO10d,SAAW,EAE1C,OACIrJ,GAAM,KAAK2/gB,WAAWx7R,IAAI,EAErB91E,KAAK0uX,GAAaqB,cAAA,CACf,GAAM,CAAEld,eAAc1+e,YAAWC,WAAY,KAAKk9e,WAClD,MAAO,CACH5pgB,MAAO,CACH0oE,KAAMyic,EAAa/oE,WAAW31a,GAC9BqvL,MAAO69E,EACX,EACA5uP,IAAK,CACD29B,KAAMyic,EAAa/oE,WAAW11a,GAC9BovL,MAAO69E,EACX,CACJ,CACJ,GAECrhI,KAAK0uX,GAAaoB,cAAA,CACf,GAAM,CAAE7/D,WAAUw/D,gBAAiB,KAAKne,WAClC,CAAC0e,EAAaC,GAAahgE,EACjC,GAAK+/D,GAAgBC,EACrB,MAAO,CACHvohB,MAAO,CACH0oE,KAAM4/c,EAAYzoF,oBAClB/jP,MAAOitF,GAAmBg/O,EAAa/nhB,KAAK,CAChD,EACA+qC,IAAK,CACD29B,KAAM6/c,EAAU1oF,oBAChB/jP,MAAOitF,GAAmBg/O,EAAah9e,GAAG,CAC9C,CACJ,CACJ,GACCytH,WAAA,CAEb,CAGA,IAAsBkza,kBAA4B,CAC9C,GAAI,CAAC,KAAKD,aAAc,MAAO,GAC/B,GAAM,CAAEzrkB,QAAO+qC,OAAQ,KAAK0giB,aAK5B,OAFIrgH,GAAUprd,EAAM0oE,KAAM,KAAKwigB,sBAAsB,EACjD9/G,GAAUrgb,EAAI29B,KAAM,KAAKwigB,sBAAsB,KACN,KAAKh6Z,OAAOtgG,KAC7D,CAEA,IAAsB+6f,eAA+B,CAKjD,OAJK,KAAKF,aACN,KAAKC,iBAAyB,SAG3B,KAAK9hE,WAAWx7R,OAAS44S,GAAaqB,UACvC,OACA,WANyB,MAOnC,CAEA,IAAsBujD,iBAA0B,CAC5C,OAAO3hlB,GAAM,KAAK0hlB,aAAa,EAC1Brza,KACG,aAEI,KAAK4ya,uBAAuBj6Z,SAC5B,KAAKi6Z,uBAAuBjgQ,UACpC,EACC3yK,KAAK,eAAkB,KAAK0za,uBAAuB3/gB,MAAM,EACzDisG,KAAK,WAAc,GACnBE,WAAA,CACT,CAEA,IAAsBqza,4BAAqC,CACvD,OAAO,KAAKD,gBACN,KAAKA,kBACL,CACV,CAEA,IAAsBE,oBAEN,CACZ,GAAM,CAAEL,eAAcE,iBAAkB,KAExC,GAAI,CAACF,GAAgBE,IAAkB,SAAU,OAEjD,IAAMn/D,EAAelpe,GAAS,KAAKgne,aAAetiD,GAAWA,EAAOjla,CAAC,EAE/D+phB,EAAY7ilB,GAAM,KAAK2/gB,WAAWx7R,IAAI,EAGvC91E,KAAK0uX,GAAaqB,cAAiB7b,EAAa,EAAE,EAGlDl0W,KACG0uX,GAAaoB,cAET5b,EAAaljX,KAAM9lH,GAAMA,EAAExjC,MAAMpN,IAAM4wC,EAAEuH,IAAIn4C,CAAC,GAC9C45gB,EAAa,EACrB,EACCh0W,WAAA,EAEL,GAAI,CAACs0a,EAAW,OAMhB,GAAM,CAAEzgd,KAAMq9c,GAAad,GAAYkE,EAAU9skB,MAAO8skB,EAAU/hiB,GAAG,EAC/DgiiB,EAAcrD,IAAaoD,EAAU9skB,MACrCgtkB,EAAcD,EACdr6b,GAAgBjmB,MAChBimB,GAAgBrmB,KAChB4gd,EAAYF,EACZr6b,GAAgBrmB,KAChBqmB,GAAgBjmB,MAEhB9zF,EAAU24T,GACZrnW,GAAM,KAAK2/gB,WAAWx7R,IAAI,EAGrB91E,KAAK0uX,GAAaqB,cACf/2L,IAAe5+M,GAAgBjmB,MACzB,IACAygd,EAGT50a,KAAK0uX,GAAaoB,cAAA,CACf,IAAMzjY,EAAYuD,KAAK/0J,IACnB,GACA+0J,KAAKx1J,MACDw1J,KAAKqC,IAAIuib,EAAU/hiB,IAAIn4C,EAAIk6kB,EAAU9skB,MAAMpN,CAAC,EAAI,IAGxD,OAAO0+V,IAAe5+M,GAAgBjmB,MAChCk4B,EACA,CAACA,CACX,GACC6T,WAAA,EAET,MAAO,CACH,CACI9vF,KAAM+igB,EAAazrkB,MAAM0oE,KACzB91E,EAAGk6kB,EAAU9skB,MAAMpN,EAAI+lC,EAAOq0iB,GAC9BlxX,MAAO2vX,EAAazrkB,MAAM87M,MAC1Bw1I,WAAY07O,CAChB,EACA,CACItkgB,KAAM+igB,EAAa1giB,IAAI29B,KACvB91E,EAAGk6kB,EAAU/hiB,IAAIn4C,EAAI+lC,EAAOs0iB,GAC5BnxX,MAAO2vX,EAAa1giB,IAAI+wK,MACxBw1I,WAAY27O,CAChB,CACJ,CACJ,CAEA,IAAsBlB,mBAEN,CACZ,GAAK,KAAKD,mBAEV,OAAO,IAAI9B,IAAyB,KAAK8B,mBAAoB,CACzD38D,OAAQ,CAAC,KAAKj+V,OAAO7kD,KAAM,KAAK6kD,OAAOzkD,KAAK,EAC5C89M,aAAc,KAAK2gQ,uBACnBjB,QACJ,EACJ,CAEA,IAAsBjT,aAAsB,CACxC,OAAO,KAAK9lZ,OAAOtgG,KACvB,CAEA,IAAsB2/d,uBAA0C,CAC5D,GAAI,CAAC,KAAKk7B,cAAgB,KAAKE,gBAAkB,WAAY,MAAO,GACpE,GAAM,CAAE3rkB,QAAO+qC,OAAQ,KAAK0giB,aAC5B,MAAO,CACH,IAAItjQ,GAAe,CACf90U,MAAO,EACPxH,MAAOmU,EAAM0oE,KACby1F,MAAOn+J,EAAM0oE,KACbozI,MAAO97M,EAAM87M,KACjB,GACA,IAAIqsH,GAAe,CACf90U,MAAO,EACPxH,MAAOk/C,EAAI29B,KACXy1F,MAAOpzH,EAAI29B,KACXozI,MAAO/wK,EAAI+wK,KACf,EACJ,CACJ,CAEA,IACYkwX,wBAAgE,CACxE,OAAO,IAAIrY,GACP,KAAKpjB,sBACL,CACI/kF,aAAc,KAAKv6S,SACnBrgG,MAAO,KAAKomf,YACZ7jc,MAAOuf,GAAgBrmB,IAC3B,EAER,CAEAwwC,YACIhxK,EACAyG,EACM,CACN,OAAO,KAAKs3gB,WAAWuB,aAAazjM,iBAAiB77U,EAAOyG,EAChE,CAEsB4ziB,gBAAuB,CACzC,KAAKR,aAAanwiB,OAAS,IAC/B,CAEsB02kB,mBAClBhkH,EACA50c,EACI,CACJ,KAAKu2f,WAAWqB,WAAWhlK,MAAA,EAC3B,KAAKutM,sBAAsBngiB,GAC3B,KAAKqyhB,aAAanwiB,OAAS,CAAE0yd,YAAW,CAC5C,CAEsBikH,kBAClB74jB,EACI,CACJ,KAAKmgiB,sBAAsBngiB,EAC/B,CAEsB84jB,oBAA2B,CAC7C,KAAKzmC,aAAanwiB,OAAS,IAC/B,CAEAi+iB,sBAA8BngiB,EAA2C,CACrE,IAAMiT,EAAM,KAAKk+D,QAAQ9uE,MAAM5lB,QAC3Bw2B,IAAK,KAAKo/gB,aAAalsd,SAAWusE,GAAiBz/H,EAAKjT,GAChE,CAEA44c,mBAAmC,CAC/BllU,GAAuB,IAAI,CAC/B,CAEAiqa,cAAkD,CAC9C,OAAO/mkB,GAAM,KAAK0hlB,aAAa,EAC1Brza,KAAK,gBACF27C,SAACs/W,GAAD,CACIlikB,MAAO,KAAK26kB,uBACZp5kB,EAAG,KAAKs+K,OAAO7kD,KACftpE,EAAG,KAAKmuH,OAAOrqB,IACf+9M,YAAa,CAAC,KAAKpgR,QAAQ86a,QAC9B,IAEJhnW,KAAK,aACF,KAAKyza,mBACD93X,SAAC81X,IAAD,CACI14kB,MAAO,KAAK06kB,kBACZhphB,EAAG,KAAKmuH,OAAOrqB,GAClB,GACD,MAEPyR,KAAK,WAAc,MACnBE,WAAA,CACT,CAEAyzY,cAA2C,CACvC,OACIvwQ,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIgrG,SAACk5X,IAAD,CACIj8Z,OAAQ,KAAK4lZ,oBACbyU,WAAY,KAAKA,WACjBv0Y,KAAM,KAAKA,IACd,IACDid,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,QACdt+C,SAAA,KAAK03b,aAAan8hB,IAAKwjd,IACpB/zQ,SAACw1X,IAAD,CAEYzhH,SACR55O,KAAM,KAAKw7R,WAAWx7R,KACtB65S,eAAgB,KAAKre,WAAWqe,eAChCjkc,MAAO,KAAKmrb,OACZy/C,gBAAiB,KAAKA,gBACtB7rgB,EAAGila,EAAOjla,CACb,EAPQila,EAAOC,UAOf,EAEN,GACF,KAAK+oG,aAAA,CACR,GAEV,CAEA9kB,mBAAgD,CAC5C,GAAM,CAAE/8B,SAAQy/C,mBAAoB,KAC9B,CAAExgV,OAAM65S,kBAAmB,KAAKre,WAEtC,OACIluO,UAAC,IAAD,CAAAzyL,SAAA,EACIgrG,SAACk5X,IAAD,CACIj8Z,OAAQ,KAAK4lZ,oBACbyU,WAAY,KAAKA,WACjBv0Y,KAAM,KAAKA,IACd,IACDid,SAAC,IAAD,CAAGn/L,UAAU,cACRm0F,SAAA,KAAKqha,aAAa9lgB,IAAKwjd,IACpB/zQ,SAACm5X,IAAD,CAEYplH,SACR37Z,OAAQ,KAAKoie,yBACb99D,gBAAiB,KAAKmmG,oBACtBrkE,aAAc,KAAKw5E,mBACnBvhY,YAAa,KAAKwhY,kBAClBn/X,aAAc,KAAKo/X,kBACtB,EAPQnkH,EAAOC,UAOf,EAEN,IACHh0Q,SAACg6W,GAAD,CACI1pjB,MAAO,KAAKo8hB,aACZutB,YAAcvqhB,GACVA,EAAEskb,WAENkmG,KAAOxqhB,GAAoCA,EAAEof,EAC7Cm4X,UAAW,KAAK12V,QAAQqta,yBACxBu8D,UAAYpmG,IACR/zQ,SAACw1X,IAAD,CAEYzhH,SACF55O,OACU65S,iBAChBjkc,MAAOmrb,EACUy/C,kBACjB7rgB,EAAG,EACHm6e,kBAAmB,KAAKgJ,cAC3B,EARQl+E,EAAOC,UAQf,CAER,GACA,KAAK+oG,aAAA,EACL,KAAKpnD,WAAWx7R,OAAS44S,GAAaqB,WACnCp0U,SAACo5X,IAAD,CACI7glB,GAAI,KAAK2/b,UACTy9E,WAAY,KAAKA,WACjB87B,aAAc,KAAKA,aACnB19E,OAAQ,KAAKsoE,YACb4V,eAAgB,KAAKA,cACxB,IAEDjyV,SAACq5X,IAAD,CACI9glB,GAAI,KAAK2/b,UACTy9E,WAAY,KAAKA,WACjB87B,aAAc,KAAKA,aACnB19E,OAAQ,KAAKsoE,YACb4V,eAAgB,KAAKA,cACxB,EAEN,GAEX,CAEA58V,QAAsC,CAUlC,OATI,KAAKsgU,WAAWp9Z,UAAUjmE,QAEtB0tK,SAAC2xT,GAAD,CACIphb,QAAS,KAAKA,QACd0sF,OAAQ,KAAKA,OACb/2J,QAAS,KAAKyvf,WAAWp9Z,UAAUjmE,MACtC,GAGF,KAAKi+C,QAAQ86a,SACd,KAAK2sC,aAAA,EACL,KAAKC,kBAAA,CACf,C,aACJ,GAEA,SAASihC,IAAkB,CACvBn2Y,OACA9lB,SACAq6Z,cAAA,CAMA,OACI7vS,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIgrG,SAACwjV,GAAD,CACYvmX,SACF8lB,OACN8/V,UAAWn9P,EACd,IACD1lF,SAACojV,GAAD,CAAyBnmX,OAAQq6Z,EAAkBv0Y,MAAO,GACzDA,EAAK7B,SAAS,KACX8e,SAACi9W,GAAD,CACIhgZ,OAAQq6Z,EACFv0Y,OACN8kB,MAAM,MACT,EAEP,GAEV,CAEA,SAASsxX,IAAkB,CACvBplH,SACA37Z,SACAqnW,YAAY,GACZi9D,kBACA8hC,eACA/nT,cACAqC,gBAAA,CAUA,IAAMwgY,EAAerlb,KAAK/0J,IAAIk5D,EAAQqnW,GACtC,OACIz/M,SAAC,OAAD,CACIrhN,EAAG+5J,EAAYgkU,EAAgBtkW,IAAI,EACnCtpE,EAAG4pG,EAAYq7T,EAAOjla,EAAIwqhB,EAAe,GACzC38f,MAAO+7E,EAAYgkU,EAAgB//Y,KAAK,EACxCvkB,OAAQsgG,EAAY4gb,GACpB13jB,KAAK,cACL48e,aAAepwb,GAAOowb,EAAazqC,EAAOC,WAAY5lZ,GACzCqoI,cACCqC,cACjB,EAET,CAEA,SAAS8/X,IAAmBhhlB,EAAA,CACxB,OAAOq8J,KAAKr+B,MAAMh+H,EAAQ,GAAK,CACnC,CC7yBA,IAAM2hlB,IAAsB,CACxBnyS,OAAQmrQ,IACRlrQ,YAAamrQ,GACjB,EAEA,SAAgBgnC,IACZ11kB,EAAA,CAEA,GAAM,CACF1G,QACAuB,IACAmwD,IACA6hT,cAAc,GACdyhM,cACAQ,cACAp0C,eACAO,cACAjmT,gBACAh1M,EACE,CAAE8uU,SAAQkgO,YAAW2mC,OAAM1mC,iBAAgB36e,UAAWh7D,EAEtD61iB,EAActiM,GAAe,CAAC,CAACouJ,EACrCroB,GACIu8D,EAAcn6V,EAAez1D,QAGjC,IAAMq2b,EAAS5qhB,EAAI2qhB,EAEbtxC,EACDv/P,GACAxpR,IACOA,EAAM+pE,cAAgB,UAE1Bq1a,IAAe51N,GACfm2N,IAAcn2N,GAClB,EAEEo/P,EAAkB5ohB,IAChBA,EAAM+pE,cAAgB,SAE1B2vH,KACJ,EAEMwmL,EACD12F,GACAxpR,IACOA,EAAM+pE,cAAgB,UACtBq1a,IAAe51N,GACfm2N,IAAcn2N,GAEtB,EAEJ,OACInB,UAAC,IAAD,CACIlvS,GAAI+6J,EAAY,wBAChBzyI,UAAU,qBACVsuW,cAAgB/vW,GAAUA,EAAM0nY,gBAAA,EAHpC9xS,SAAA,EAKIgrG,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,YACdt+C,SAAA+9b,EAAexiiB,IAAKgjiB,IACjB,GAAM,CAAE3qQ,OAAQ2qQ,EACVvjd,EAAQ,CACV,GAAGqid,GACCD,EACAQ,GAAa51iB,IAAI4rS,GACjB,CAAEhnR,KAAMgnR,EAAI/gF,KAAM,GAEtB,GAAIotH,GAAYrsC,GAAO2wS,IAAsB,CAAC,CAClD,EACA,OACIv5X,SAAC,OAAD,CAEIrhN,EAAG+5J,EAAY/5J,EAAI40iB,EAAc50iB,CAAC,EAClCmwD,EAAG4pG,EAAYghb,GACf/8f,MAAO+7E,EAAY66Y,EAAc52d,KAAK,EACtCvkB,OAAQsgG,EAAYo6Y,GACpB1rQ,OAAQp3M,EAAMo3M,OACdC,YAAar3M,EAAMq3M,YACnB5jI,QAASzzE,EAAMyzE,QACf7hJ,KACIgnR,EAAI6qQ,eACE,QAAQ7qQ,EAAI6qQ,eAAe,GAC3Bzjd,EAAMpuE,IAEnB,EAbQ2xhB,EAAc50iB,CAatB,CAET,EACD,IACHqhN,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,UACdt+C,SAAA49N,EAAOriU,KAAK25J,EAAO9qK,KAChB,IAAM4wF,EAAQmid,GACVC,EACAQ,GAAa51iB,IAAIktK,EAAM0+H,GAAG,GAE9B,OACI5oF,SAAC64H,GAAD,CAEI9B,SAAU7sK,EAAM6sK,SAChBp4U,EAAGA,EAAIurK,EAAM9xC,KACbtpE,EAAGA,EAAIo7G,EAAMtX,IACbyqM,WAAW,QACXrtQ,MAAO,CAAEpuE,KAAMouE,EAAM63H,MAAO,GAAG73H,CAAM,CACxC,EANQ5wF,EAQjB,EACD,GACF6ziB,IACGjzV,SAAC,IAAD,CAAG,cAAY,OACVhrG,SAAA+9b,EAAexiiB,KAAKgjiB,EAAen0iB,KAChC4gN,SAAC,OAAD,CAEIrhN,EAAG+5J,EAAY/5J,EAAI40iB,EAAc50iB,CAAC,EAClCmwD,EAAG4pG,EAAY5pG,GACf6tB,MAAO+7E,EAAY66Y,EAAc52d,KAAK,EACtCvkB,OAAQsgG,EAAYtgG,GACpBx2C,KAAK,cACL0ohB,cAAc,MACdnC,eAAgBA,EAAeoL,EAAc3qQ,GAAG,EAChCo/P,iBAChB1oK,YAAaA,EAAYi0K,EAAc3qQ,GAAG,CAC7C,EAVQxpS,GAYd,EAER,C,EAEX,CC1IA,IAAMu6kB,IAAsB,GACtBC,IAA4B,GAC5BC,IAAoB,IAS1B,SAAgBC,IAAoB,CAChC,OACA,WACA,YAKiB,CACjB,IAAMC,EAAUC,IAAO3sQ,CAAI,EACrB4sQ,EAAeF,EAAUA,EAAQ,EAAIA,EAAQ,MAAQ,EACrDG,EAAgBC,IAAc,CAAE,OAAM,eAAc,UAAS,CAAC,EAI9D9mT,EACFg6C,EAAK,QAAUssQ,IACTS,GAAyC/sQ,EAAK,MAAM,EACpD,CACIA,EAAK,QAAqB,OAAO,EACjCgtQ,IAAqBhtQ,EAAK,MAAM,CACpC,EAENitQ,EACJ,IAAK,IAAMC,KAASlnT,EAAY,CAE5B,IAAMmnT,EAASC,IAAe,CAC1B,OACA,UAHcC,IAAc,CAAE,gBAAe,OAAM,CAGnD,EACA,QACA,eACA,UACJ,CAAC,EACKtwX,EAAQuwX,IAAoBH,CAAM,GACpC,CAACF,GAAQM,IAAaxwX,EAAOkwX,EAAK,KAAK,KACvC,EAAO,CAAE,OAAQE,EAAQ,OAAM,EACvC,CACA,OAAOF,EAAM,MACjB,CAEA,SAASG,IAAe,CACpB,OACA,YACA,QACA,eACA,YAOiB,CAEjB,IAAMI,EAAQxtQ,EAAK,KAAK,CAAE,KAAK,IAC3B,KAAK,IAAI1uU,EAAG+4U,EAAWojQ,EAAU17kB,EAAM,CAAC,KAAK,CACjD,EACM27kB,EAASF,EAAM,KAAK,EAAM,IAAUzid,EAAO0id,EAAU17kB,EAAM,CAAC,KAAK,EACjE,CAAE,kBAAiB,eAAgB47kB,IAAsBT,CAAK,EAEpE,OAAOltQ,EAAK,KAAK,CAAE,KAAK,IAAU,CAC9B,IAAMj1M,EAAOyid,EAAMz7kB,GAEb67kB,EAAoBC,EAAY97kB,GAChC+7kB,EACFF,GAAqB,EAAI5tQ,EAAK4tQ,GAAqB,OACjDG,EAAwBC,EAAgBj8kB,GAGxCk8kB,EADqBljd,EAAOz5H,GAAKy8kB,GAAyB,EAE1DL,EAAOK,GAAA,GAAsDhjd,EAC7D,EAEAmjd,EAAWC,GAAeL,EAAiBlB,CAAY,EACvDlzY,EACF,KAAK,IAAI,EAAGg0Y,EAAO37kB,GAASm8kB,CAAQ,EACpC,KAAK,IAAI,EAAGD,CAAqB,EAErC,MAAO,CACH,KAAMf,EAAMn7kB,GACZ,SAAU07kB,EAAU17kB,GACpB,OACA,UACJ,CACJ,CAAC,CACL,CAEA,SAAS47kB,IAAsB,EAG7B,CACE,IAAMK,EAAsB,MAAcd,EAAM,MAAM,CAAC,CAAC,KAAK,EAAE,EACzDW,EAAkB,MAAcX,EAAM,MAAM,CAAC,CAAC,KAAK,EAAE,EAErDkB,EAAsD,CAAC,EAC7D,IAAK,IAAIr8kB,EAAQ,EAAGA,EAAQm7kB,EAAM,OAAQ,IACtC,EAAgBn7kB,GAASq8kB,EAAgBlB,EAAMn7kB,KAAW,GAC1D,EAAgBm7kB,EAAMn7kB,IAAUA,EAGpC,IAAMs8kB,EAAsD,CAAC,EAC7D,IAAK,IAAIt8kB,EAAQm7kB,EAAM,OAAS,EAAGn7kB,GAAS,EAAG,IAC3C,EAAYA,GAASs8kB,EAAgBnB,EAAMn7kB,KAAW,GACtD,EAAgBm7kB,EAAMn7kB,IAAUA,EAGpC,MAAO,CAAE,kBAAiB,aAAY,CAC1C,CAQA,SAAgBu8kB,GACZ,EACA,EACM,CAIN,OAAOzwa,GAHS0nK,EACX,OAAQ,GAAU1oK,EAAM,OAASyhC,CAAI,CAAC,CACtC,IAAK,GAAUzhC,EAAM,SAAS,MACtB,CAAO,GAAK,CAC7B,CAEA,SAASywa,IAAoB,EAA4C,CACrE,MAAO,CAEH,KAAK,MAAM/nQ,EAAO,QAAQ,EAAK,IAAUn8M,EAAMyzC,EAAM,SAAU,CAAC,CAAC,EAEjE0oK,EAAO,OAAQ,GAAU1oK,EAAM,OAAS,OAAO,CAAC,CAAC,OAEjD,KAAK,MACDyxa,GAAmB/oQ,EAAQ,OAAO,EAC9B+oQ,GAAmB/oQ,EAAQ,OAAO,CAC1C,CACJ,CACJ,CAGA,SAASgoQ,IAAa,EAAqB,EAA8B,CACrE,IAAK,IAAIx7kB,EAAQ,EAAGA,EAAQ0e,EAAE,OAAQ,IAClC,GAAIA,EAAE1e,KAAW2e,EAAE3e,GAAQ,OAAO0e,EAAE1e,GAAS2e,EAAE3e,GAEnD,MAAO,EACX,CAEA,SAASi7kB,IAAqB,EAA4B,CACtD,OAAOl8Z,GAAQjgI,CAAK,CAAC,CAAC,IAAK,GAAW9+C,EAAQ,GAAM,EAAI,QAAU,OAAQ,CAC9E,CAEA,SAASg7kB,GACL,EACa,CAGb,OAFIl8hB,IAAU,EAAU,CAAC,CAAC,CAAC,EACvBA,IAAU,EAAU,CAAC,CAAC,OAAO,EAAG,CAAC,OAAO,CAAC,EACtC,CACH,GAAGk8hB,GAAyCl8hB,EAAQ,CAAC,CAAC,CAAC,IAClD,GAAsB,CAAC,QAAS,GAAGjwB,CAAI,CAC5C,EACA,GAAGmsjB,GAAyCl8hB,EAAQ,CAAC,CAAC,CAAC,IAClD,GAAsB,CAAC,QAAS,QAAS,GAAGjwB,CAAI,CACrD,CACJ,CACJ,CAEA,SAASutjB,GACL,EACA,EACM,CACN,OAAOjskB,EAAOA,EAAK,KAAiC0qkB,CACxD,CAEA,SAAS2B,IACL,EACA,EACA,EACM,CACN,IAAMrskB,EAAO89T,EAAKjuU,EAAQ,GAC1B,GAAI,CAACmQ,EAAM,OAAO0qkB,EAClB,IAAM4B,EAAetskB,EAAK,EAAIqqkB,IAA4BrqkB,EAAK,MACzDuskB,EAAoBN,GAAenuQ,EAAKjuU,EAAQ,GAAI66kB,CAAY,EACtE,OAAO,KAAK,IAAI4B,EAAcC,CAAiB,CACnD,CAOA,SAAS3B,IAAc,CACnB,OACA,eACA,YAKgB,CAChB,OAAO9sQ,EAAK,KAAK,CAAE,IAAG,OAAO,IAAU,CACnC,IAAM0uQ,EAAiBP,GAAenuQ,EAAKjuU,EAAQ,GAAI66kB,CAAY,EAC7D+B,EAAeJ,IAAsBvuQ,EAAMjuU,EAAO66kB,CAAY,EAE9DgC,EAAU,GACZ,IAAIxkQ,GAAS,CACT,KAAM7uC,EAAI,KACV,WACA,WACA,WAAYixS,GAChB,CAAC,EAECqC,EAAiB,KAAK,KAAKH,EAAiBp9kB,CAAC,EAC7Cw9kB,EAAe,KAAK,KAAKH,EAAer9kB,CAAC,EACzCy9kB,EAAYH,EAAOC,CAAc,EAIvC,MAAO,CAAE,YAAW,QAFhBC,IAAiBD,EAAiBE,EAAYH,EAAOE,CAAY,CAEzC,CAChC,CAAC,CACL,CAEA,SAASzB,IAAc,CACnB,gBACA,SAIW,CACX,OAAOR,EAAc,KAAK,CAAE,YAAW,WAAW,IAC9C96kB,EAAQ,EAAIm7kB,EAAM,QAAUA,EAAMn7kB,EAAQ,KAAOm7kB,EAAMn7kB,GACjDi9kB,EACAD,CACV,CACJ,C,s1GChOaE,IAAb,KAAaA,C,gCAYR3pd,E,EAAqB4kW,c,GAIrB5kW,E,EAAqBuM,O,GAIrBvM,E,EAAqB+0Z,e,GAIrB/0Z,E,EAAqB4pd,W,GAOrB5pd,E,EAAamgb,W,GAIbngb,E,EAAqBohb,a,GAIrBphb,E,EAAqB6pd,W,GAIrB7pd,E,EAAqB8pd,qB,GAIrB9pd,E,EAAqByib,a,GAQrBzib,E,EAAqB+pd,gB,GAWrB/pd,E,EAAqBgqd,a,GAIrBhqd,E,EAAqBiqd,kB,GAkBrBjqd,E,EAAah2C,O,GAObg2C,E,EAAqB0hb,S,GAOrB1hb,E,EAAaogb,gB,GAiBbpgb,E,EAAqBy+c,c,GAQrBz+c,E,EAAqBkqd,kB,GAIrBlqd,E,EAAqBmqd,kB,GAIrBnqd,E,EAAa8md,M,GAIb9md,E,EAAaigN,Q,GAqBbjgN,E,EAAav6D,Q,KA/Jdi1Q,KACAhvU,QAEA,YACIgvU,EACAhvU,EACF,C,UACE,KAAKgvU,KAAOA,EACZ,KAAKhvU,QAAUA,CACnB,CAEA,IAAsBk5d,cAAuB,CACzC,OAAO,KAAKl5d,QAAQk5d,gBACxB,CAEA,IAAsBr4V,OAAyB,CAC3C,OAAO,KAAK7gI,QAAQ6gI,OAASuf,GAAgBhmB,MACjD,CAEA,IAAsBivZ,eAAwB,CAC1C,OAAOrwD,GAAc,GAAI,KAAKE,YAAY,CAC9C,CAEA,IAAsBglH,WAAoB,CACtC,OAAOtob,KAAKh1J,IACRg1J,KAAKr+B,MAAM,KAAK2hW,aAAe,SAC/BwlH,CAER,CAEA,IAAcjqC,WAAoB,CAC9B,OAAO,KAAKz0iB,QAAQy0iB,aACxB,CAEA,IAAsBiB,aAAgC,CAClD,OAAO,KAAK1mO,KAAKtlR,OAAQ6gP,GAAQ,CAACA,EAAI9uD,QAAQ,CAClD,CAEA,IAAsB0iW,WAAwC,CAC1D,OAAO,KAAKzoC,YAAY1+Y,KAAK4/K,GACjC,CAEA,IAAsBwnQ,qBAAwC,CAC1D,OAAO,KAAK1oC,YAAYhsf,OAAQ6gP,GAAQ,CAACqsC,GAAYrsC,GACzD,CAEA,IAAsBwsQ,aAAsB,CACxC,OAAO,KAAK79E,cAChB,CAEAylH,cAAsBvogB,EAAsB,CACxC,OAAO4nG,EAAOo6J,QAAQhiQ,EAAM,CAAEuoG,SAAU,KAAK0qW,aAAc,GAAG/qc,KAClE,CAEA,IAAsB+/f,gBAAyB,CAC3C,GAAI,CAAC,KAAKF,UAAW,MAAO,GAE5B,IAAMS,GADiB,KAAK5+kB,QAAQq5U,SAAW,KAAK6kQ,WACf,KAAKxoC,YAAY10iB,OAChD69kB,EAAiBjpb,KAAKh1J,IACxB,KAAK+9kB,cAAc,KAAKR,UAAU/ngB,IAAI,IACtCige,EAEJ,OAAOzgZ,KAAK/0J,IAAI+9kB,EAAa,KAAK7nC,YAAa8nC,EACnD,CAEA,IAAsBP,aAAsB,CACxC,OAAO,KAAKH,UAAY,KAAKE,eAAiB,KAAKH,UAAY,CACnE,CAEA,IAAsBK,kBAA2B,CAC7C,IAAM1+hB,EAAQ,KAAKu+hB,oBAAoBp9kB,OACvC,GAAI6+C,IAAU,EAAG,MAAO,GAExB,IAAM++hB,GADiB,KAAK5+kB,QAAQq5U,SAAW,KAAKilQ,aACfz+hB,EAC/Bi/hB,EACF9tiB,GACI,KAAKotiB,oBAAoBlskB,IAAKq4R,GAC1B,KAAKo0S,cAAcp0S,EAAIn0N,IAAI,KAE9B,EACHyogB,EAAiBjpb,KAAKh1J,IACxBk+kB,KACA,KAAK5lH,aAAem7E,KAExB,OAAOz+Y,KAAK/0J,IAAI+9kB,EAAa,KAAK7nC,YAAa8nC,EACnD,CAEA,IAAcvggB,OAAgB,CAC1B,OACI,KAAKgggB,YACL,KAAKF,oBAAoBp9kB,OAAS,KAAKu9kB,gBAE/C,CAEA,IAAsBvoC,SAAkB,CACpC,IAAMgB,EAAY,KAAKh3iB,QAAQq5U,SAAW,KAAK/6P,MAG/C,OAFI,KAAKuiD,QAAUuf,GAAgBhmB,OAAe48a,EAAY,EAC1D,KAAKn2a,QAAUuf,GAAgBjmB,MAAc68a,EAC1C,CACX,CAEA,IAActC,gBAAkD,CAC5D,GAAM,CAAEypC,YAAWnoC,UAASuoC,oBAAqB,KAC3CQ,EAAiB/oC,EAAU,KAAKsoC,YAChCU,EAAe,KAAKZ,oBAAoBlskB,KAAKq4R,EAAKxpS,KAAW,CAC/DT,EAAGy+kB,EAAiBh+kB,EAAQw9kB,EAC5BjggB,MAAOiggB,EACPh0S,KACJ,IAOA,OANK4zS,EAME,CAACc,CAJJ3+kB,EAAG01iB,EACH13d,MAAO,KAAK+/f,eACZ9zS,IAAK4zS,CAEDc,EAAqBD,IAAY,EANlBA,CAO3B,CAEA,IAAsBjM,cAAiC,CACnD,OAAO0I,IAAoB,CACvBzsQ,KAAM,KAAK0lO,eACXr7N,SAAU,KAAKr5U,QAAQq5U,SACvB16J,SAAU,KAAK0qW,aACnB,EACJ,CAEA,IAAsBm1D,kBAA2B,CAC7C,OAAOlB,GAAmB,KAAKvK,aAAc,QACjD,CAEA,IAAsB0L,kBAA2B,CAC7C,OAAOnB,GAAmB,KAAKvK,aAAc,QACjD,CAEA,IAAcqI,MAAe,CACzB,OAAO,KAAKoD,kBAChB,CAEA,IAAcjqQ,QAAyB,CACnC,GAAM,CACFw+P,eACAyL,mBACA9pC,iBACA0mC,OACA3mC,aACA,KACEyqC,EAAS9D,EAAO3mC,IACtB,OAAOs+B,EAAa7gkB,KAAKiqkB,EAAQp7kB,KAAW,CACxCwpS,IAAKmqQ,EAAe3ziB,EAAM,CAACwpS,IAC3Bj9F,KAAM6uY,EAAO7uY,KACborI,SAAUyjQ,EAAOzjQ,SACjB3+M,KAAMoid,EAAOpid,KACbw6B,IACI4nb,EAAO7uY,OAAS,QACVkxY,EAAmBrC,EAAOzjQ,SAAS3+Q,OACnCmlhB,CACd,GACJ,CAEA,IAAcnlhB,QAAiB,CAC3B,GAAI,KAAK27e,YAAY10iB,SAAW,EAAG,MAAO,GAC1C,GAAM,CAAEy9kB,oBAAqB,KAC7B,OACI,KAAKrD,KACL,KAAK3mC,WACJgqC,EAAmB,IAAwBA,EAAmB,EAEvE,CACJ,ECjLA,SAAgBU,IAAiB,CAC7BnjR,WACAojR,kBACAj/E,eACA1lT,gBAAA,CAOA,OACIkH,SAAA+4H,WAAA,CAAA/jO,SACKqlN,EAAS9pT,IAAK6X,IACXq/Q,UAAC,IAAD,CAEI+2N,iBAA0BA,IAAep2e,GAC3B0wL,eAHlB9jG,SAAA,EAKIgrG,SAAC09X,IAAD,CACat1jB,UACQq1jB,iBACpB,GACAr1jB,EAAQ7Z,OAAS,aACdyxM,SAAC29X,IAAD,CAAmCv1jB,SAAU,EAElD,CAXM,EAAAA,EAAQoQ,SAWd,EAET,EAEV,CAEA,SAASkljB,IAAqB,CAC1Bt1jB,UACAq1jB,mBAAA,CAKA,GAAM,CAAE9+kB,IAAGmwD,IAAG6tB,QAAOvkB,UAAWhwC,EAC1BxG,EACFwG,EAAQ7Z,OAAS,UAAY,QAAQkvkB,EAAgB,GAAKr1jB,EAAQy/L,MAChEpkD,EAAUuxX,IAAuB5sgB,EAAQqtU,SAAS,CAAChyL,QAmBzD,OAhBIr7I,EAAQ7Z,OAAS,WAChB,CAAC6Z,EAAQw1jB,gBAAkB,CAACx1jB,EAAQy1jB,cAGjC79X,SAAC,OAAD,CACIrhN,EAAG+5J,EAAY/5J,GACfmwD,EAAG4pG,EAAY5pG,GACf6tB,MAAO+7E,EAAY/7E,GACnBvkB,OAAQsgG,EAAYtgG,GACdx2C,OACNwlR,OAAO,OACPC,YAAa0tP,IACJtxX,SACZ,IAILu8C,SAAC,UAAD,CACInnD,OAAQilb,IAAuB11jB,GACzBxG,OACNwlR,OAAO,OACPC,YAAa0tP,IACJtxX,SACZ,EAET,CAEA,SAASk6a,IAAyB,CAC9Bv1jB,WAAA,CAIA,GAAM,CAAE8hJ,SAAU9hJ,EAClB,GAAI,CAAC8hJ,EAAO,OAAO,KAEnB,GAAM,CAAEzvH,WAAUwva,aAAc//S,EAAMl6E,MAChCrxF,EAAI+5J,EAAYwR,EAAMvrK,CAAC,EACvBq4U,EAAav8R,EAASuiI,SAAWviI,EAASu8R,WAC1CnvH,EAAQ2sF,GAAYpsR,EAAQy/L,KAAK,EAAI,OAASm9E,GAC9CvhI,EAAUwxX,GAAqB7sgB,EAAQqtU,SAAS,CAAChyL,QAEvD,OACIgkI,UAAC,OAAD,CACO9oS,IACHmwD,EAAG4pG,EAAYwR,EAAMp7G,CAAC,EACtB6jP,GAAItwI,GAAY1jB,GAAc2jB,MAAM,EACpC0a,SAAUviI,EAASuiI,SACnBp7J,KAAMimM,EACGpkD,UANbzuD,SAAA,EAQIgrG,SAAC,QAAD,CAAUrhN,IAAGo+K,WAAYtiI,EAASsiI,WAC7B/nE,SAAA5sF,EAAQ21jB,aACN,IACP/9X,SAAC,QAAD,CACOrhN,IACHg0S,GAAIj6I,EAAYs+K,GAChBh6J,SAAUitS,EAAUjtS,SACpBD,WAAYktS,EAAUltS,WAErB/nE,SAAA5sF,EAAQ41jB,cACN,EACL,C,EAEd,CAGA,SAASF,IAAuB,CAC5Bn/kB,IACAmwD,IACA6tB,QACAvkB,SACAwlhB,iBACAC,eACAI,aAAA,CAEA,GAAM,CAAC7ld,EAAMI,EAAOo6B,EAAK2M,GAAU,CAAC5gK,EAAGA,EAAIg+E,EAAO7tB,EAAGA,EAAIsJ,CAAM,EACzDkqG,EAASxzG,EAAIsJ,EAAS,EAEtB8lhB,EAAoBN,EACpB,CACI,CAACxld,EAAO6ld,EAAW1+a,CAAM,EACzB,CAACnnC,EAAMkqC,CAAM,EACb,CAAClqC,EAAO6ld,EAAWrrb,CAAG,CAC1B,EACA,CACI,CAACx6B,EAAMmnC,CAAM,EACb,CAACnnC,EAAMw6B,CACX,GACAurb,EAAqBN,EACrB,CACI,CAACrld,EAAQyld,EAAWrrb,CAAG,EACvB,CAACp6B,EAAO8pC,CAAM,EACd,CAAC9pC,EAAQyld,EAAW1+a,CAAM,CAC9B,EACA,CACI,CAAC/mC,EAAOo6B,CAAG,EACX,CAACp6B,EAAO+mC,CACZ,GAEN,MAAO,CAAI2+a,KAAaC,IAAU,EAC7B5tkB,KACI,CAACu5T,EAAQC,KACN,GAAGrxK,EAAYoxK,GAAQ,GAAGpxK,EAAYqxK,IAC9C,EACC9rU,KAAK,IACd,CC3JA,SAAgBmglB,IAAY,CACxBrqH,SACAjla,IACA2uhB,kBACAY,sBACAC,uBAAA,CAWA,OACI72S,UAAC,IAAD,CACIlvS,GAAI+6J,EAAYygU,EAAOC,UAAU,EACjC71W,UAAWrvD,EAAI,gBAAgB4pG,EAAY5pG,GAAG,GAAKu0F,OAFvDruC,SAAA,EAIIgrG,SAAC+oV,GAAD,CACI3riB,MAAO22d,EAAO7pT,MACdvrK,EAAGo1d,EAAOysE,cAAc7hiB,EACxBmwD,EAAGila,EAAOysE,cAActjM,QACxBr1I,MAAO,CAAEzuN,KAAMssS,EAAmB,EAClCjiI,QAASwxX,GAAqBlhE,EAAOt+H,SAAS,CAAChyL,OAClD,GACAswT,EAAOq5E,oBAAsBr5E,EAAO4hH,qBACjC31X,SAAC64H,GAAD,CACI9B,SAAUg9I,EAAOq5E,mBACjBzuiB,EAAGo1d,EAAO4hH,mBAAmBh3kB,EAC7BmwD,EAAGila,EAAO4hH,mBAAmBz4O,QAC7Bt7U,eACAy7U,WAAW,MACX55L,QAASwxX,GAAqBlhE,EAAOt+H,SAAS,CAAChyL,OAClD,IAELu8C,SAACw9X,IAAD,CACInjR,SAAU05J,EAAO0oE,eACAghD,kBACjBj/E,aACI6/E,IACEj2jB,GACEi2jB,EAAoBtqH,EAAO/yB,WAAY54a,IAE/C0wL,aAAcwlY,CACjB,EACF,C,EAEX,C,80GC7C0CziY,cAAMpoG,U,KAAzC,cAAmCooG,I,gCADzC5zH,CACyC4zH,mB,CACtC,IAAY85T,YAAiC,CACzC,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAAYr0gB,QAA4C,CACpD,OAAO,KAAKwC,MAAM2tiB,aAAanwiB,QAAU+hJ,MAC7C,CAEA,IAAYm+B,YAAiC,CACzC,OAAO,KAAKm0V,WAAW5hD,OAAO1+T,KACzB0+T,GAAWA,EAAO/yB,aAAe,KAAK1/b,QAAQ0/b,aAChDx/Q,UACP,CAEA,IAAY+8Z,mBAAwC,CAChD,IAAMn2jB,EAAU,KAAK9mB,QAAQ8mB,QACvB,CAAE63b,cAAe,KAAK01D,WAC5B,GAAKvtf,GAAY63b,EACjB,OAAO87E,IAAsB,CAAE3zgB,UAAS63b,YAAW,EACvD,CAEA5qQ,QAA6C,CACzC,GAAM,CAAE/zM,UAAW,KACb,CAAEikF,WAAUysd,UAAW,KAAKluiB,MAAM2tiB,aAExC,GAAI,CAACnwiB,EAAQ,OAAO,KAEpB,IAAMk9kB,EACFl9kB,EAAO8mB,QAAQ7Z,OAAS,WAAajN,EAAO8mB,QAAUi7H,OAE1D,OACI28D,SAACi6O,GAAD,CACI1hc,GAAI,KAAKuL,MAAMvL,GACfsle,eAAgB,KAAK83C,WAAWplb,QAChC5xF,EAAG4mF,EAAS5mF,EACZmwD,EAAGy2B,EAASz2B,EACZkhC,MAAO,CAAE0nP,SAAU,OAAQ,EAC3BqlJ,iBAAiB,OACjB73R,QAAS,GACTD,QAAS,IACTx9C,MAAOnmJ,EAAO0/b,WACdi8B,gBAAiB,KAAKz7S,WACtBx5B,SAAU1mJ,EAAO8mB,QAAQ41jB,eACzB7gH,SAAU60E,EACVtmD,QAAS,KAAK5nf,MAAMmuiB,eAEpBj9b,UAAAgrG,SAAC+4Q,GAAD,CACInhe,MAAO4mlB,GAAiBT,cACxBl2X,MACI22X,GACA1pS,GAAmB0pS,EAAgB32X,KAAK,EAE5CxlM,OAAQ,KAAKk8jB,kBACbpsQ,YAAa,KAAKwjM,WAAW8B,WAAWtlM,WAC3C,EACI,EAEjB,C,aACJ,G,80GCKYt2H,cAAMpoG,UAANooG,I,IADL,cACKA,I,uCAFX5zH,C,IAkBI0qC,E,EAAagjZ,Y,GAIbhjZ,E,EAAqBpiC,S,GAIrBoiC,E,EAAaqqD,U,GAIbrqD,E,EAAqBsqD,Q,GAKrBtqD,E,EAAqB+ob,Y,GAIrB/ob,E,EAAqB8qd,iB,GAOrB9qd,E,EAAqB8rd,iB,GAMrB9rd,E,EAAqB+rd,oB,GAQrB/rd,E,EAAqB+/M,uB,GAOrB//M,E,EAAqBgsd,iB,GAYrBhsd,E,EAAqBisd,gB,GAOrBjsd,E,EAAqBksd,oB,GAiBrBlsd,E,EAAqBold,wB,GAgBrBpld,E,EAAqBkwc,qB,GAarBlwc,E,EAAqBohW,Q,GAIrBphW,E,EAAqB6na,0B,GAOrB7na,E,EAAqB+nc,kB,GAWrB/nc,E,EAAqBgqa,yB,GAOrBhqa,E,EAAqBiqa,mB,GAQrBjqa,E,EAAqB0pa,a,GAWrB1pa,E,EAAqBm8Z,a,GAOrBn8Z,E,EAAqB0kd,qB,GASrB1kd,E,EAAao5Z,Y,GAMbp5Z,E,EAAa6zY,O,GAMb7zY,E,EAAqBqjZ,a,GAIrBrjZ,E,EAAqBypa,iB,GAOrBzpa,E,EAAqBiqB,Q,GAYrBjqB,E,EAAqB0jZ,c,GAerB1jZ,E,EAAqB+5a,c,GASrB/5a,E,EAAqBmsd,a,IAQrBjoe,IAAOo6D,K,KAAcwlC,a,IAOrB5/F,IAAOo6D,K,KAAcota,qB,IAQrBxne,IAAOo6D,K,KAAcqta,qB,IAMrBzne,IAAOo6D,K,KAAcghY,gB,IAIrBp7b,IAAOo6D,K,KAAc6vZ,mB,IAMrBjqd,IAAOo6D,K,KAAc8vZ,oB,CApSdllX,gB,CAQR,YAAY/3M,EAA2B,CACnC,MAAMA,GACNyxL,EACI,KACA,CAAEk8W,aAAcruX,EAAY65W,iBAAkB75W,EAAW/wJ,GAAI,EAErE,CAXA6la,qBAA6Bz/R,MAC7Bg5Y,aAAgC,IAAIt1E,GAEpC8gE,iBAAuD55Y,OAUvD,IAAcsyX,YAAiC,CAC3C,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAAsBplb,SAAgC,CAClD,OAAO,KAAKolb,WAAWplb,OAC3B,CAEA,IAAcysF,UAAmB,CAC7B,OAAO,KAAKzsF,QAAQysF,YACxB,CAEA,IAAsBC,QAAiB,CAEnC,OAAQ,KAAKn5K,MAAMm5K,QAAUkjR,IAAwBk8G,UAAU,EACnE,CAEA,IAAsBX,YAAsB,CACxC,OAAO,KAAKnrd,QAAQmrd,YAAc,EACtC,CAEA,IAAsB+hC,iBAA0B,CAC5C,OAAO57I,GACHP,GAAS60B,cACT,KAAK5lY,QAAQ2re,eACjB,CACJ,CAEA,IAAsBuiB,iBAA8C,CAChE,IAAM71S,EACF,KAAK+sO,WAAW8B,WAAW/kM,sBAAsBr9K,KAAK4/K,IAC1D,OAAOrsC,GAAOwsC,GAAmBxsC,EAAK,KAAK60S,eAAe,CAC9D,CAEA,IAAsBiB,oBAAuC,CACzD,OAAOjqQ,IACH,KAAKkhM,WAAW8B,WAAW/kM,sBAAsB3qR,OAC5C6gP,GAAQ,CAACA,EAAI9uD,UAAY,CAACm7F,GAAYrsC,IAGnD,CAEA,IAAsB8pC,uBAA0C,CAC5D,OAAO57K,GAAiB,CACpB,KAAK2nb,gBACF,QAAKC,kBACX,EACL,CAEA,IAAsBC,iBAA0B,CAC5C,MAAO,MAAQ,KAAK3ha,QACxB,CAEAykZ,yBACI74R,IAEA,GAAM,CAAEq0P,oBAAqB,KAE7B,OADKA,EACEr0P,IAAQq0P,EAAmBrpB,EAAS2f,YAAc3f,EAAS4f,MADpC5f,EAASyf,OAE3C,EAEA,IAAsBurD,gBAA8B,CAChD,OAAO1sC,GACH,KAAKx/N,sBACL,KAAK+uP,wBACT,CACJ,CAEA,IAAsBod,oBAEN,CACZ,GAAK,KAAKnjC,YAAc,KAAK/lC,WAAWwoB,eAAiB,UAGzD,OAAO,IAAIm+C,IACP,KAAK5pQ,sBACL,CACI6kJ,aAAc,KAAKv6S,SACnB06J,SAAU,KAAKz6J,OAAOtgG,MACtBuiD,MAAOuf,GAAgBhmB,OACvBq6a,UAAW,KAAK6rC,eACpB,EAER,CAEA,IAAsB5G,wBAEN,CACZ,GAAK,KAAKr8B,YAAc,KAAK/lC,WAAWwoB,eAAiB,cAGzD,OAAO,IAAIuhC,GACP,KAAKhtP,sBACL,CACI6kJ,aAAc,KAAKv6S,SACnBrgG,MAAO,KAAKsgG,OAAOtgG,MACnBuiD,MAAOuf,GAAgBrmB,IAC3B,EAER,CAEA,IAAsByqc,qBAA8B,CAChD,IAAMnpB,EACF,KAAKmlC,oBAAoBzmhB,QACzB,KAAK2/gB,wBAAwB3/gB,QAC7B,EAEJ,OAAO,KAAK6kH,OAAOyvW,OACfgtB,EAAe,EACTA,IACA,EAEd,CAEA,IAAsB3lF,QAA2B,CAC7C,OAAO,KAAK4hD,WAAW5hD,MAC3B,CAEA,IAAsBymE,0BAAmC,CACrD,OAAOwB,IAAuB,CAC1B5je,OAAQ,KAAKyqgB,oBAAoBzqgB,OACjC6je,SAAU,KAAKloE,OAAO10d,MAC1B,EACJ,CAEA,IAAsBq7jB,kBAAiC,CAQnD,MAAO,CAAE19Y,SAPQo6S,GACbnjU,KAAK/0J,IACDm4d,GAAc,GAAI,KAAKr6S,QAAQ,EAC/B,IAAM,KAAKw9W,wBACf,CAGKx9W,EAAUD,WAAY,IAAKi6J,WAAY,CAAE,CACtD,CAEA,IAAsB2lN,yBAAmC,CACrD,MACI,CAAC,KAAKmiD,aACN,KAAKnpE,WAAWuoB,mBAAqBjiZ,IAAyB0hV,IAEtE,CAEA,IAAsBi/D,mBAA+C,CACjE,IAAM5/W,EAAWq6S,GAAc,GAAI,KAAKr6S,QAAQ,EAChD,MAAO,CACHviI,SAAU,CAAEuiI,WAAUD,WAAY,IAAKi6J,WAAY,GAAI,EACvDizI,UAAW,CAAEjtS,WAAUD,WAAY,IAAKi6J,WAAY,GAAI,CAC5D,CACJ,CAEA,IAAsBqlN,aAAqC,CACvD,OAAOhC,GAAuB,CAC1BtmE,OAAQ,KAAKA,OACbymE,yBAA0B,KAAKA,yBAC/BC,cAAe,GAAM,KAAKooC,oBAAoBlmf,MAC9C+9c,cAAe,IAAO,KAAKmoC,oBAAoBlmf,MAC/C25P,aAAc,KAAKokP,iBACnBtiC,kBAAmB,CAAC,KAAK7nc,QAAQ86a,QACrC,EACJ,CAEA,IAAsByjB,aAA0B,CAC5C,OAAO,IAAI9B,GACP,CAAErG,qBAAsB,GAAM,GAAG,KAAKp2b,QAAQu+b,WAAY,EAC1D,IACJ,CACJ,CAEA,IAAsBuoD,qBAA8B,CAChD,IAAMjc,EAAc,KAAK/+B,YAAY/0X,QAASysT,GAAW,CACrDA,EAAO7pT,MAAMvtF,MACbo3Y,EAAOq5E,oBAAoBzwd,OAAS,CACvC,GAED,OADIy+e,EAAY/7jB,SAAW,EAAU,EAC9B40J,KAAKh1J,IAAA,GAAOm8jB,EACvB,CAEA,IAAcrvC,YAAqB,CAC/B,OAAO,KAAK82C,oBAAoBxH,QAC5B,KAAKgc,qBAAsBqB,CAEnC,CAEA,IAAclyE,OAAwB,CAClC,IAAMzjU,EAAO,KAAK4yU,WAAWqD,iBAAiB,KAAK8V,WAAW,EAE9D,MADA/rV,GAAKhzG,MAAQ,KAAKg8b,WAAW7Q,OAAA,EACtBn4U,CACX,CAEA,IAAsBizU,aAAsB,CACxC,OAAO,KAAK+V,WAAWswB,UAAU,KAAK71C,MAAMpuc,MAAM,CACtD,CAEA,IAAsBgke,iBAA0B,CAC5C,OAAOJ,IAAuB,CAC1B5je,OAAQ,KAAK49c,YAAY59c,OACzB6je,SAAU,KAAKloE,OAAO10d,MAC1B,EACJ,CAEA,IAAsBu9I,QAAiC,CACnD,GAAM,CAAEo5X,cAAaomB,kBAAiBroE,UAAW,KAC3Cn3D,EAAcw/H,EAAkBroE,EAAO10d,OAC7C,OAAOk5kB,MACFrshB,OAAO6na,EAAOxjd,IAAKg/B,GAAMA,EAAEykb,UAAU,GACrCjkY,MAAM,CACHimb,EAAYy3B,QAAU7wI,EAAc,EACpCo5G,EAAYy3B,QAAU7wI,EAAc,CACvC,GACA98R,QAAQ,GACjB,CAEA,IAAsBu2Y,cAAuC,CACzD,GAAM,CAAEulB,oBAAqB,KAAKjmB,WAElC,OADKimB,EACEM,IAAuB,CAC1BnoE,OAAQ,KAAKsoE,YACbQ,OAAQ,KAAK7mB,YAAY59Y,OACzBgka,gBAAiB,KAAKA,gBACtBE,YAActoE,GAAe,KAAKp3U,OAAOo3U,GACzCqpE,UAAYh1f,GAAS,KAAKm+d,MAAM4e,MAAM/8e,GACtCi1f,wBAAyB1B,EAAiB4C,iBAC1C7B,wBAAyB,KAAKA,wBAC9BC,kBAAmB,KAAKA,iBAC5B,GAV8B,EAWlC,CAEA,IAAsB8P,cAAuC,CACzD,OAAOxP,IAAuB,CAC1BnpE,OAAQ,KAAKsiD,aACb+mB,eAAgB,KAAKqU,aAAanwiB,OAClC01gB,WAAY,KAAKrB,WAAWqB,WAC5BimB,iBAAkB,KAAKA,gBAC3B,EACJ,CAEA,IAAsB6hD,aAAuB,CACzC,OAAO,KAAKvuf,QAAQs3D,UAAYjK,GAAemhc,SACnD,CAEA/mH,mBAAmC,CAC/BllU,GAAuB,IAAI,CAC/B,CAEsB2jD,YAAYr3L,EAA+B,CAC7D,IAAMiT,EAAM,KAAKk+D,QAAQ9uE,MAAM5lB,QAC3Bw2B,IACA,KAAKo/gB,aAAalsd,SAAWusE,GAAiBz/H,EAAKjT,GAE3D,CAEsBi/jB,oBAClBr9I,EACA54a,EACI,CACJ,KAAKutf,WAAWqB,WAAWhlK,MAAA,EAC3B,KAAKy/L,aAAanwiB,OAAS,CAAE0/b,aAAY54a,SAAQ,CACrD,CAEsBk2jB,qBAA4B,CACzC,KAAK/tf,QAAQ0pd,0BACd,KAAKhI,eAAA,CAEb,CAEsBA,gBAAuB,CACzC,KAAKR,aAAanwiB,OAAS,IAC/B,CAEsBw/jB,kBAAkBl4R,EAA0B,CACzDmsC,GAAiBnsC,KACtB,KAAK+sO,WAAWqB,WAAWhlK,MAAA,EAC3B,KAAKirL,iBAAmBr0P,EAC5B,CAEsBm4R,oBAA2B,CAC7C,KAAK9jC,iBAAmB55Y,MAC5B,CAEA05a,cAAuD,CACnD,GAAI,KAAK8hB,mBACL,OACI7+X,SAACw5X,IAAD,CACIp8kB,MAAO,KAAKyhlB,mBACZlglB,EAAG,KAAKs+K,OAAOt+K,EACfmwD,EAAG,KAAKmuH,OAAOrqB,IACf+9M,YAAa,CAAC,KAAKpgR,QAAQ86a,SAC3B+mC,YAAajd,IACbyd,YAAa,KAAKgsC,eAClB7/E,YAAa,KAAK+hE,kBAClBhoX,aAAc,KAAKioX,kBACtB,GAET,GAAI,KAAKgX,uBACL,OACI/3X,SAACs/W,GAAD,CACIlikB,MAAO,KAAK26kB,uBACZp5kB,EAAG,KAAKs+K,OAAOt+K,EACfmwD,EAAG,KAAKmuH,OAAOrqB,IACf+9M,YAAa,CAAC,KAAKpgR,QAAQ86a,SAC3B+mC,YAAald,IACb0d,YAAa,KAAKgsC,eAClB7/E,YAAa,KAAK+hE,kBAClBhoX,aAAc,KAAKioX,kBACtB,EAGb,CAEAwC,YAA2C,CACvC,OAAO,KAAK72B,aAAan8hB,IAAKwjd,IAC1B/zQ,SAACo+X,IAAD,CAEYrqH,SACRjla,EAAGila,EAAOjla,EACV2uhB,gBAAiB,KAAKA,eACzB,EAJQ1pH,EAAOC,UAIf,EAET,CAEAgrH,oBAAiD,CAC7C,OACIh/X,SAACg6W,GAAD,CACI1pjB,MAAO,KAAKo8hB,aACZutB,YAAclmG,GACVA,EAAOC,WAEXkmG,KAAOnmG,GAAyCA,EAAOjla,EACvDm4X,UAAW,KAAK12V,QAAQqta,yBACxBu8D,UAAYpmG,IACR/zQ,SAACo+X,IAAD,CAEYrqH,SACRjla,EAAG,EACH2uhB,gBAAiB,KAAKA,gBACtBY,oBAAqB,KAAKA,oBAC1BC,oBAAqB,KAAKA,mBAC7B,EANQvqH,EAAOC,UAMf,CAER,EAET,CAEAgpG,YAAyC,CACrC,OACIv1R,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIgrG,SAACwjV,GAAD,CACIvmX,OAAQ,KAAK4lZ,oBACb9/X,KAAM,KAAKyjU,MACXq8B,UAAWn9P,GACXi9P,cAAe,GACfc,sBAAuB,KAAKztB,YAAYz2W,OACxCyjY,kBAAmB,KAAK87C,WAC3B,IACD9+X,SAACi/X,GAAD,CACIhia,OAAQ,KAAK+4V,YACb5uO,OAAQo7P,EACX,EACH,GAEV,CAEAwV,cAA2C,CACvC,OACIvwQ,UAAC,IAAD,CAAAzyL,SAAA,CACK,KAAK+nd,aAAA,EACL,KAAKC,WAAA,GACNh9W,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,QAAUt+C,SAAA,KAAKuud,WAAA,CAAgB,EACnD,GAEX,CAEAtrB,mBAAgD,CAC5C,OACIxwQ,UAAC,IAAD,CAAGhxF,YAAa,KAAKA,YAArBzhG,SAAA,CACK,KAAK+nd,aAAA,EACL,KAAKC,WAAA,GACNh9W,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,QAAUt+C,SAAA,KAAKgqe,mBAAA,CAAwB,IAC1Dh/X,SAACk/X,IAAD,CACI3mlB,GAAI,KAAK2/b,UACTy9E,WAAY,KAAKA,WACjB87B,aAAc,KAAKA,aACnBQ,eAAgB,KAAKA,cACxB,EACF,C,EAEX,CAEA58V,QAAsC,CAUlC,OATI,KAAKsgU,WAAWp9Z,UAAUjmE,QAEtB0tK,SAAC2xT,GAAD,CACIphb,QAAS,KAAKA,QACd0sF,OAAQ,KAAKA,OACb/2J,QAAS,KAAKyvf,WAAWp9Z,UAAUjmE,MACtC,GAGF,KAAKi+C,QAAQ86a,SACd,KAAK2sC,aAAA,EACL,KAAKC,kBAAA,CACf,C,aACJ,G,u2GCjckCp8V,eA1B5BsjY,IAA0B,IAC1BC,IAA2B,GAE3BC,GAAoB,GACpBC,GAAkB,EAsBUzjY,KAAMpoG,U,2CAA3B8re,e,CAAAA,qBAAqB1jY,G,uCADjC5zH,C,IAYI0qC,E,EAAqBpiC,S,GAIrBoiC,E,EAAqB+4W,e,GAIrB/4W,E,EAAqB6sd,gB,GAWrB7sd,E,EAAqB8sd,mB,GAIrB9sd,E,EAAqB+sd,e,GAIrB/sd,E,EAAqB0nb,6B,GAIrB1nb,E,EAAqBgtd,kB,GA8ErBhtd,E,EAAqBitd,gB,GAIrBjtd,E,EAAqBktd,iB,GAIrBltd,E,EAAqBmtd,iB,GAWrBntd,E,EAAqBotd,qB,GAIrBptd,E,EAAqBqtd,gB,CA/IQnkY,e,CAC9B,YAAY/3M,EAA0B,CAClC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,OAAO22T,WAAW37Z,EAAuC,CAErD,OAAOn9F,IADM6slB,GAAiB,CAAE1vf,SAAQ,CACjCn9F,EAAKsslB,aAChB,CAEA,IAAsBnvf,SAA+B,CACjD,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAsBm7Y,eAA4B,CAC9C,OAAO,KAAKn7Y,QAAQm7Y,aACxB,CAEA,IAAsB8zG,gBAA4B,CAC9C,OAAO,KAAKjvf,QAAQ2vf,gBACfl1H,oBAAoB,CAAC,KAAKz6X,QAAQywW,UAAW,GAC7C4jB,aACG,KAAK8mB,cACLr8b,GACA,gDAEHgnF,OAAO,CAAC,KAAK9lC,QAAQ2vf,gBAAgBjgI,WAAWr5T,IAAK,EAC9D,CAEA,IAAsB64b,mBAA6B,CAC/C,OAAO,KAAKD,eAAejva,QAAU,CACzC,CAEA,IAAsBmva,eAAyB,CAC3C,OAAO,KAAKD,iBAChB,CAEA,IAAsBplC,6BAAsC,CACxD,OAAO,KAAKv2iB,MAAMysF,QAAQ4vf,6BAA+B,EAC7D,CAEA,IAAsBR,kBAAqC,CACvD,GAAM,CAAE7gD,iBAAkB,KAAKvuc,QAGzBkjY,EACFqrE,EAAct/gB,OAAS,uBACjB,CAACs/gB,EAActpE,cAAespE,EAAcvpE,cAAc,EAC1D,CAACupE,EAAcl4Y,IAAI,EAGzB,CAAEuqB,UAASE,WAAY,KAAK9gF,QAAQ2vf,iBAAmB,CAAC,EAC5D,GAAI,KAAKx0G,cAAe,CACpB,IAAM37B,EACF,KAAKx/W,QAAQ2vf,gBAAgBr1H,gCAAgC,CACzD,KAAK6gB,aACR,GACLv6T,EAAUha,GAAQ44S,IAAU5+R,EAC5BE,EAAUla,GAAO44S,IAAU1+R,CAC/B,CAGA,IAAMrkJ,EAAO,KAAKwyjB,eAAexilB,IAAI,KAAK0ue,aAAa,EAAEziU,UACnDm3a,EACF,OAAOpzjB,GAAS,UACV8gJ,GAAqB9gJ,GACjBA,EAEJ,GAEV,MAAO,CACHi3G,MAAO,KAAKu7c,eACZnrH,iBAAkB,KAAKmrH,eACvB/rH,eACAwjD,gBAAiB,KAAKvrC,cACtB/9Y,UAAW,CAAC,KAAK4C,QAAQywW,UAAU,EACnC22E,mBAAoB,KAAKpnb,QAAQ8vf,eACjC3kC,WAAY,GACZvE,WAAY,GACZn6X,SAAU,GACVi6X,gBAAiB,EACjBoD,4BAA6B,KAAKA,4BAClCviC,YAAa,CACTuO,SAAU,GACVC,cAAe,GACfqD,sBAAuB,CACnB38f,KAAMozjB,EACNjya,mBAAoB,QACpBS,sBAAuB,GAC3B,EAEA1vK,IAAK,KAAKqxF,QAAQ+vf,wBACX,KAAK/vf,QAAQunb,aAAa54gB,KAAO,EAClCmkJ,OACNpkJ,IAAK,KAAKsxF,QAAQ+vf,wBACZ,KAAK/vf,QAAQunb,aAAa74gB,IAC1BokJ,OACNppB,MAAO,CAEH,CAAEriI,MAAO,KAAW80F,SAAU,CAAE,EAChC,CAAE90F,MAAO,EAAG80F,SAAU,CAAE,CAC5B,EACA67O,KAAM,EACV,EACAumN,YAAa,CACTzI,SAAU,GACVC,cAAe,GACfqD,sBAAuB,CAAC,EACxBzqhB,IAAKiyK,GAAW,KAAK5gF,QAAQwK,WAC7B97F,IAAKoyK,GAAW,KAAK9gF,QAAQwK,WAC7Bk/B,MAAO,CAEH,CAAEriI,MAAO,KAAW80F,SAAU,CAAE,EAChC,CAAE90F,MAAOq8I,IAAUvnD,SAAU,CAAE,CACnC,CACJ,CACJ,CACJ,CAEA,IAAsBkzf,gBAAyB,CAC3C,OAAO,KAAK97kB,MAAM87kB,gBAAkBT,GACxC,CAEA,IAAsBU,iBAA0B,CAC5C,OAAO,KAAK/7kB,MAAM+7kB,iBAAmBT,GACzC,CAEA,IAAsBU,iBAA0B,CAG5C,OAAO,IAAIzja,EAAO,EAAG,EAAG,KAAKuja,eAAgB,KAAKC,eAAe,EAAEpzD,IAAI,CACnE75X,IAAK,EACLx6B,KAAMind,GACN7md,MAAO6md,GACP9/a,OAAQ,CACZ,EACJ,CAEA,IAAsBwgb,qBAAsC,CACxD,OAAO,IAAIjpE,GAAe,CAAEvmb,QAAS,KAAKovf,gBAAiB,EAC/D,CAEA,IAAsBK,gBAA4B,CAC9C,OAAO,IAAI9hJ,GAAU,CACjBjhR,OAAQ,KAAK6ia,gBACbnqE,WAAY,KAAKoqE,mBACrB,EACJ,CAEA1qY,QAA6C,CACzC,GAAI,CAAC,KAAKqqY,cAAe,OAAO,KAEhC,GAAM,CAAEh0G,gBAAeyzD,yBAA0B,KAAK5uc,QAEhD29E,EAAe5rB,GAAyBixL,cACxC,CAAEukM,eAAgB,KAAK6nE,iBACzBvmE,EAAU,KAAKomE,eAAexilB,IAAI0ue,GAClC60G,EAASlxiB,GAAM,CAAC+pe,EAAQ1hX,SAAUogX,GAAa54gB,GAAI,IAAK,EACxDshlB,EAASnxiB,GAAM,CAAC+pe,EAAQzhX,SAAUmgX,GAAa74gB,GAAI,IAAK,EACxDwhlB,EAAWthD,EAAsBohD,EAAQ,CAAErya,cAAa,GAAGhE,MAC3Dw2a,EAAWvhD,EAAsBqhD,EAAQ,CAAEtya,cAAa,GAAGhE,MACzD,CAAE8rW,YAAa+V,GAAe,KAAKi0D,eAAevqE,SAElDonB,EAAS9Q,EAAWvzZ,MAAQ8md,GAC5BqB,EAAW50D,EAAWn5X,IAAM0sb,GAC5BsB,EAAc70D,EAAWxsX,OAAS+/a,GAExC,OACIt/X,SAAC,MAAD,CACIn/L,UAAU,YAEVmvE,MAAO,CAAE+lU,OAAQ,MAAMspL,GAAkB,GAAI,EAE7Crqe,UAAAyyL,UAAC,MAAD,CACI5mR,UAAU,OACV87D,MAAO,KAAKijgB,eACZxnhB,OAAQ,KAAKynhB,gBAHjB7qe,SAAA,EAKIgrG,SAAC,OAAD,CACIn/L,UAAU,WACV07J,GAAI7jB,EAAYqzX,EAAW3zZ,IAAI,EAC/BukD,GAAIjkB,EAAYqzX,EAAWj9d,CAAC,EAC5B4tH,GAAIhkB,EAAYqzX,EAAWvzZ,KAAK,EAChCokD,GAAIlkB,EAAYqzX,EAAWj9d,CAAC,CAC/B,IACDkxJ,SAACk+O,GAAD,CACIjhR,OAAQ,KAAK6ia,gBACbnqE,WAAY,KAAKoqE,mBACpB,GACAW,IAAaD,IACVzgY,SAAC,IAAD,CAAGn/L,UAAU,iBACTm0F,UAAAgrG,SAAC,OAAD,CACIrhN,EAAG+5J,EAAYmkY,GACf/te,EAAG4pG,EAAYiob,GAEd3re,SAAA0re,CACC,EACP,IAEPj5S,UAAC,IAAD,CAAG5mR,UAAU,iBAAbm0F,SAAA,EACIgrG,SAAC,OAAD,CACIn/L,UAAU,UACVliB,EAAG+5J,EAAYmkY,GACf/te,EAAG4pG,EAAYkob,GAEd5re,SAAAyre,CACC,IACNzgY,SAAC,OAAD,CACIrhN,EAAG+5J,EAAYmkY,GACf/te,EAAG4pG,EAAYkob,GAEd5re,SAAAyre,CACC,EACP,C,EACF,C,EACJ,EAEb,C,k1GCjNQ5kY,cAAMpoG,UAANooG,I,KADL,cACKA,I,wCAFX5zH,C,IAUI0qC,E,EAAa+4W,e,GAIb/4W,E,EAAamsa,e,GAIbnsa,E,EAAqBksa,W,GAIrBlsa,E,EAAawsa,uB,GAIbxsa,E,EAAa2td,yB,GAQb3td,E,EAAaquU,Y,GAIbruU,E,EAAakud,sB,GAMblud,E,EAAamud,wB,GAQbnud,E,EAAqBoud,sB,GASrBpud,E,EAAqBn6F,W,GAIrBm6F,E,EAAqBl6F,S,GAKrBk6F,E,EAAqBqud,a,GAMrBrud,E,EAAautd,iB,GAIbvtd,E,EAAqBsud,Y,GASrBtud,E,EAAqBuud,U,GASrBvud,E,EACWwud,qB,GAOXxud,E,EACWyud,mB,GAOXzud,E,EAAawtd,6B,GAcbxtd,E,EAAqB4hN,c,GAarB5hN,E,EAAa0td,gB,GAIb1td,E,EAAamlZ,a,GAabnlZ,E,EAAqB0ud,iB,GA2BrB1ud,E,EAAqB6nZ,iB,GAwCrB7nZ,E,EAAqBk/a,gB,CA/Ndh2V,gB,CAGR,YAAY/3M,EAAwB,CAChC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAcm2S,eAA4B,CACtC,OAAO,KAAK5ne,MAAM4ne,aACtB,CAEA,IAAcozD,eAA+B,CACzC,OAAO,KAAKh7hB,MAAMg7hB,aACtB,CAEA,IAAsBD,WAAwB,CAC1C,OAAO,KAAKmiD,YAAYhklB,IAAI,KAAK0ue,aAAa,CAClD,CAEA,IAAcyzD,uBAAkD,CAC5D,OAAO,KAAKr7hB,MAAMq7hB,qBACtB,CAEA,IAAcmhD,yBAAmC,CAC7C,GAAM,CAAE50G,iBAAkB,KACpB,CAAEhY,cAAaD,gBAAiB,KAAK3vd,MAAMysF,QACjD,OAAOkjY,EACDA,EAAahhW,SAASi5W,GACtBhY,IAAgBgY,CAC1B,CAEA,IAAc1qC,YAAyB,CACnC,OAAO,KAAKl9b,MAAMk9b,UACtB,CAEA,IAAc6/I,sBAAgC,CAC1C,OACI,KAAK/8kB,MAAMi7hB,4BAA4B9hiB,IAAI,KAAK+jc,UAAU,GAAK,EAEvE,CAEA,IAAc8/I,wBAAiC,CAI3C,IAAM52a,EAAQ,KAAKm2a,eAAejuQ,kBAClC,OAAOloK,IAAU,KAAK82R,WAAajwH,GAAqB7mK,CAC5D,CAEA,IAAsB62a,sBAAgC,CAClD,OACI,KAAKj9kB,MAAMi5J,cAAgB1Z,SAE1B,KAAK49b,YAAYrplB,QAAUyrJ,QACxB,KAAK69b,UAAUtplB,QAAUyrJ,OAErC,CAEA,IAAsB7qH,WAA8B,CAChD,OAAO,KAAK10B,MAAMi5J,cAAc,EACpC,CAEA,IAAsBtkI,SAA4B,CAC9C,OAAO,KAAK30B,MAAMi5J,cAAc,IAAM,KAAKj5J,MAAMi3F,UACrD,CAGA,IAAsBimf,aAAyB,CAG3C,OADI,KAAKl9kB,MAAMysF,QAAQ8jY,kBAAoB,KAAKvwd,MAAMysF,QAAQ0zC,OACjD+mV,oBAAoB,CAAC,KAAKhqB,UAAW,EACtD,CAEA,IAAck/I,iBAA6B,CACvC,OAAO,KAAKp8kB,MAAMo8kB,eACtB,CAEA,IAAsBe,YAEN,CACZ,GAAI,KAAKzojB,YAAc6qH,OACvB,OAAO,KAAKw7Y,UAAUzxF,2BACjBpwc,IAAI,KAAKgkc,UAAU,GAClBhkc,IAAI,KAAKw7B,SAAS,CAC5B,CAEA,IAAsB0ojB,UAEN,CACZ,GAAI,KAAKzojB,UAAY4qH,OACrB,OAAO,KAAKw7Y,UAAUzxF,2BACjBpwc,IAAI,KAAKgkc,UAAU,GAClBhkc,IAAI,KAAKy7B,OAAO,CAC1B,CAEA,IACY0ojB,qBAEI,CACZ,GAAK,KAAKF,WACV,OAAO,KAAK9hD,sBAAsB,KAAK8hD,WAAWrplB,KAAK,CAC3D,CAEA,IACYwplB,mBAEI,CACZ,GAAK,KAAKF,SACV,OAAO,KAAK/hD,sBAAsB,KAAK+hD,SAAStplB,KAAK,CACzD,CAEA,IAAcuolB,6BAAkD,CAW5D,OAVI,KAAKr8kB,MAAMi5J,YACJ,CACH,KAAKkkb,YAAYjxI,cAAgB,KAAKlsc,MAAMi5J,YAAY,GACxD,KAAKmkb,UAAUlxI,cAAgB,KAAKlsc,MAAMi5J,YAAY,EAC1D,EAGA,KAAKj5J,MAAMi3F,aAAesoD,OAGvB,GAFI,CAAC,KAAK69b,UAAUlxI,cAAgB,KAAKlsc,MAAMi3F,UAAU,CAGpE,CAEA,IAAsBw5O,cAAwB,CAC1C,OAAOv+U,GAAM,KAAK8oiB,aAAa,EAC1Bz6X,KAAK,CAAE7kJ,KAAM,YAAa,MAAS,IACnC6kJ,KAAK,CAAE7kJ,KAAM,WAAY,MAAS,IAClC6kJ,KACG,CAAE7kJ,KAAM,sBAAuB,EAC9Bk/E,GACG,KAAKsif,YAAYhklB,IAAI0hG,EAAKg3X,yBAAyB,EAC9CxoB,SAAS,EAAE,EAAEt1c,OAEzB2sK,WAAA,CACT,CAEA,IAAc87a,gBAA6B,CACvC,OAAO,KAAKv8kB,MAAMu8kB,cACtB,CAEA,IAAcvoE,aAA+C,CACzD,OAAO,KAAKh0gB,MAAMysF,QAAQunb,WAC9B,CAEA3pE,WAAmB9la,EAAiC,CAChD,GAAIA,IAASg7G,OAKb,OAHK,KAAK29b,YAAY/gI,WAAW9U,UAG1B9ia,GAAMn0C,WAFF,KAAK8slB,YAAY/gI,WAAWr3S,YAAYvgI,EAGvD,CAEA,IAAsBg5iB,iBAAsC,CACxD,GAAM,CAAEJ,aAAYC,WAAU1ojB,YAAWC,WAAY,KAC/C,CAAEwnb,cAAe,KAAK+gI,YAI5B,GAAI,KAAKH,qBAAsB,OAE/B,IAAMnK,EAAoBuK,GAAYjxI,cAAgBx3a,EAChDm+iB,EAAkBuK,GAAUlxI,cAAgBv3a,EAelD,OAbI,KAAKsojB,qBAEDrK,IAAsBrzb,QACtBszb,IAAoBtzb,OAEpB,OAEG48T,EAAW1R,qBACdmoI,EACAC,GAID,KAAKxoI,WAAWwoI,EAC3B,CAEA,IAAsBn8D,iBAA0C,CAC5D,GAAM,CAAEymE,aAAYzojB,YAAW0ojB,WAAUzojB,WAAY,KAE/Cslf,EAAejnX,GAAiB,CAClCmqb,GAAcA,EAAWjxI,eAAiBx3a,EACpC,CAAEl3B,OAAQk3B,EAAW3W,SAAUo/jB,EAAWjxI,YAAa,EACvD3sT,OACN69b,GAAYA,EAASlxI,eAAiBv3a,EAChC,CAAEn3B,OAAQm3B,EAAS5W,SAAUq/jB,EAASlxI,YAAa,EACnD3sT,MACT,GAED,GAAI06X,EAAa1+gB,SAAW,EAAG,OAO/B,IAAM09J,GALegzS,GACjBj5S,GAAiBi5S,EAAMx/b,IAAK83B,GAAS,KAAK8la,WAAW9la,KAAQpqC,KACzD,SAGY2skB,CAAY7sD,EAAaxtgB,IAAKjQ,GAAMA,EAAEgB,MAAM,GAChE,GAAI,CAACy7J,EAAa,OAMlB,IAAMizS,EACF,KAAK+wI,sBAAwBhjE,EAAa1+gB,SAAW,EAC/C,KAAK8uc,WAAW4vE,EAAa,EAAE,CAACl8f,QAAQ,EACxCwhI,OAEV,MAAO,CACHgkI,KAAM8wM,GAAkBsF,OACxBhpZ,KAAM2mZ,GAA2Br+T,EAAa,CAC1Cs+T,OAAQ0iD,EAAa1+gB,OAAS,EAC9B2wc,cACJ,EACJ,CACJ,CAEA,IAAsB6hG,gBAAyC,CAC3D,GAAM,CAAEhT,aAAc,KAGtB,GAAKA,EAAUpzF,6BAGV,KAAKw1I,YAAe,KAAKC,WAI1B,OAAKC,qBAAqB/gD,eAC1B,KAAKghD,mBAAmBhhD,eAI5B,MAAO,CACH/4Q,KAAM8wM,GAAkBwF,KACxBlpZ,KAAM6mZ,GAA0B,CAACujE,EAAUnwX,qBAAqB,EAAG,CAC/D2sT,OAAQ,KAAK0lH,oBACjB,EACJ,CACJ,CAEA1rY,QAAsC,CAClC,GAAM,CACFwpV,YACAoiD,aACAC,WACAlgJ,aACAzsH,eACA8rQ,eAAgB5oE,GAChB,KACE,CAAElyb,WAAUysd,UAAW,KAAKluiB,MAE5BwjW,EAASxwM,GAAiB,CAC5B,KAAK0jX,gBACL,KAAKq3B,cACR,GAED,OACIpqQ,UAACwyJ,GAAD,CACI1hc,GAAI,KAAKuL,MAAMvL,GACfsle,eAAgB,KAAK/5d,MAAMysF,QAC3B5xF,EAAG4mF,GAAU5mF,EACbmwD,EAAGy2B,GAAUz2B,EACbkhC,MAAO,CAAE0nP,SAAU,OAAQ,EAC3BxyI,QAAS,GACTD,QAAS,IACT63R,iBAAkB,WAClBr1U,MAAOu5S,EACPh5S,SAAU,KAAKq5b,gBACfnkH,eAAgB,KAAKs9C,gBAAkB,SAAWn3X,OAC1CikN,SACR61H,SAAU60E,EACVtmD,QAAS,KAAK5nf,MAAMmuiB,eAdxBj9b,SAAA,CAgBK,KAAK+re,sBACF/gY,SAACshY,IAAD,CACeziD,YACCoiD,aACFC,WACVC,oBAAqB,KAAKA,oBAC1BC,kBAAmB,KAAKA,kBACZ3pE,YACf,IAEDz3T,SAACuhY,IAAD,CACe1iD,YACX9lP,MAAOmoS,EACP11D,eACI,KAAKq1D,qBACC,KAAKC,uBACL,KAAKM,mBAAmBl3a,MAEtButW,aACEljM,eACdD,eAAgB,KAAKusQ,oBACxB,IAEL7gY,SAACu/X,GAAD,CACIhvf,QAAS,KACTqvf,eAAgB,KAAK97kB,MAAM87kB,eAC3BC,gBAAiB,KAAK/7kB,MAAM+7kB,eAC/B,EACI,C,EAEjB,C,aACJ,GAEA,SAAS0B,IAAgB,CACrB1iD,YACA9lP,QACAyyO,iBACA/T,aACAljM,eAAe,GACfD,iBAAiB,KASjB,IAAMzsH,EAAQysH,EACRv/B,IAA+B0iO,EAAWvlM,iBAAiB,EAC3DsvQ,GAAsBzoS,GAAOnhT,MAAO,CAAE6/gB,YAAW,GAEvD,OACIz3T,SAAC+4Q,GAAD,CACI7uT,MAAO20X,EAAUv4F,YACjBt5a,KAAMsnT,EAAiBjxL,OAAYw7Y,EAAUnzF,YAC7C9zc,MAAO4zhB,EACA3jU,QACP0sH,aAAc,CAACD,GAAkBC,EACjCykJ,aAAa,YACb7mJ,YAAaslM,EAAWtlM,WAC3B,EAET,CAEA,SAASmvQ,IAAsB,CAC3BziD,YACAoiD,aACAC,WACAC,sBACAC,oBACA3pE,cAAA,CASA,IAAMgqE,EACFN,GAAqB/gD,eAAiBghD,GAAmBhhD,cAEvDvqP,EAAS,CACX2rS,GAAsBP,GAAYrplB,MAAO,CAAE6/gB,YAAW,GACtD+pE,GAAsBN,GAAUtplB,MAAO,CAAE6/gB,YAAW,EACxD,EAEMpxf,EAASo7jB,EACT,CAACN,GAAqBj3a,MAAOk3a,GAAmBl3a,KAAK,EACrD,CAAC+2a,GAAYrplB,MAAOsplB,GAAUtplB,KAAK,EAEzC,OACIooN,SAACq5Q,GAAD,CACInvT,MAAO20X,EAAUv4F,YACjBt5a,KAAM6xgB,EAAUnzF,YAChBrlb,OAAQq1c,GACJr1c,EACAw4gB,EACApnB,EAAWtlM,WACf,EACQt8B,SACR0jL,MACI5wT,GAAwBtiJ,EAAO,GAAIA,EAAO,GAAKzuB,GAC3CiniB,EAAUprN,iBAAiB77U,KAC1B,QAETohe,aAAa,WAChB,EAET,CAEA,SAASwoH,GACL5plB,EACA,CAAE6/gB,cAAA,CAGF,OADI7/gB,IAAUyrJ,OAAkBy1U,IACzB/jL,IAA+B0iO,EAAWrjM,SAASx8U,IAAU,OACxE,CCpcA,SAAA8plB,IAAyB,EAAM,CAC3B,SAAS/ilB,EAAE,EAAG,CACV,OAAO+wC,EAAE,EAAIA,EAAE,EACnB,CAEA,SAASof,EAAE,EAAG,CACV,OAAOpf,EAAE,EAAIA,EAAE,EACnB,CAEA,SAAS+sE,EAAS,EAAG,CACjB,OAAO,UAAY,CACf,OAAO99G,CACX,CACJ,CAEA,IAAIs5F,EACA0pf,EACA3vR,EAAW,EACXriI,EAAa,EAEb,OAAOrT,GAAS,aAChB,EAAO7/D,EAAS6/D,IAAS,KAAO,CAAK,CAAU,EAAIA,CAAI,GAG3D,SAAS50E,GAAQ,CACb,IAAIpnG,EAAGwtT,EAAM75O,EAAM2tgB,EAAIC,EAAIC,EAAKC,EAAKC,EAAKC,EAAKC,EAE3CC,EAAc,CAAC,EACnBlqf,EAAM,QAAQ,SAAU,EAAG,EAAG,CAC1Bkqf,EAAY,KAAK,CACb,KAAMzyiB,EACN,GAAIA,EAAE,GACN,GAAIA,EAAE,GACN,EAAGA,EAAE,GAAKiyiB,EAAcrhlB,EAAE,CAAC,EAAE,CAAC,GAAKqhlB,EAAcrhlB,EAAE,CAAC,EAAE,CAAC,IAAM,EAC7D,EAAGovC,EAAE,GAAKiyiB,EAAcrhlB,EAAE,CAAC,EAAE,CAAC,GAAKqhlB,EAAcrhlB,EAAE,CAAC,EAAE,CAAC,IAAM,CACjE,CAAC,EACD6hlB,EAAY,KAAK,CACb,KAAMzyiB,EACN,GAAIA,EAAE,GACN,GAAIA,EAAE,GACN,EAAGA,EAAE,EAAIiyiB,EAAcrhlB,EAAE,CAAC,EAAE,CAAC,GAC7B,EAAGovC,EAAE,EAAIiyiB,EAAcrhlB,EAAE,CAAC,EAAE,CAAC,EACjC,CAAC,EACD6hlB,EAAY,KAAK,CACb,KAAMzyiB,EACN,GAAIA,EAAE,GACN,GAAIA,EAAE,GACN,EAAGA,EAAE,EAAIiyiB,EAAcrhlB,EAAE,CAAC,EAAE,CAAC,GAC7B,EAAGovC,EAAE,EAAIiyiB,EAAcrhlB,EAAE,CAAC,EAAE,CAAC,EACjC,CAAC,EACD6hlB,EAAY,KAAK,CACb,KAAMzyiB,EACN,GAAIA,EAAE,GACN,GAAIA,EAAE,GACN,EAAGA,EAAE,EAAIiyiB,EAAcrhlB,EAAE,CAAC,EAAE,CAAC,GAC7B,EAAGovC,EAAE,EAAIiyiB,EAAcrhlB,EAAE,CAAC,EAAE,CAAC,EACjC,CAAC,EACD6hlB,EAAY,KAAK,CACb,KAAMzyiB,EACN,GAAIA,EAAE,GACN,GAAIA,EAAE,GACN,EAAGA,EAAE,EAAIiyiB,EAAcrhlB,EAAE,CAAC,EAAE,CAAC,GAC7B,EAAGovC,EAAE,EAAIiyiB,EAAcrhlB,EAAE,CAAC,EAAE,CAAC,EACjC,CAAC,CACL,CAAC,EAGD,IAAK,IAFD8hlB,EAAKD,EAAY,OAEZz+kB,EAAI,EAAGA,EAAIisL,EAAY,EAAEjsL,EAG9B,IAFA,EAAOisT,GAASwyR,EAAaxjlB,EAAGmwD,CAAC,CAAC,CAAC,WAAWuzhB,CAAc,EAEvD,EAAI,EAAG/hlB,EAAI8hlB,EAAI,EAAE9hlB,EAAG,CACrB,IAAIgilB,EAAQ,CAAC,EAAEhilB,EAAI,GACnB,EAAO23F,EAAMqqf,GACb,EAAMX,EAAcW,GACpB,EAAKrugB,EAAK,EAAIA,EAAK,GACnB,EAAKA,EAAK,EAAIA,EAAK,GACnB,EAAM2tgB,EAAKE,EAAI,EAAE,CAAC,GAClB,EAAMD,EAAKC,EAAI,EAAE,CAAC,GAClB,EAAMF,EAAKE,EAAI,EAAE,CAAC,GAClB,EAAMD,EAAKC,EAAI,EAAE,CAAC,GAClBh0R,EAAK,MAAM7zS,CAAK,CACpB,CAGJ,SAASA,EAAM,EAAM,EAAI,EAAI,EAAI,EAAI,CACjC,IAAIvY,EAAO2nY,EAAK,KAChB,GAAI3nY,EAAM,CACN,IAAI6glB,EAASC,EAASV,EAAK,CAAC,EACxBW,EAAUD,EAASV,EAAK,CAAC,EAE7B,GAAIpglB,EAAK,KAAK,QAAU4glB,EAAO,CAC3B,IAAII,EAAWhhlB,EAAK,KAChBihlB,EAAMhB,EAAce,EAAS,OAC7BE,EAAOF,EAAS,EAAIA,EAAS,GAAKC,EAAI,EAAE,CAAC,GACzCE,EAAOH,EAAS,EAAIA,EAAS,GAAKC,EAAI,EAAE,CAAC,GACzCG,EAAOJ,EAAS,EAAIA,EAAS,GAAKC,EAAI,EAAE,CAAC,GACzCI,EAAOL,EAAS,EAAIA,EAAS,GAAKC,EAAI,EAAE,CAAC,GACzCK,EAASR,EAASG,EAAK,CAAC,EACxBM,EAAUT,EAASG,EAAK,CAAC,EAE7B,GACIZ,GAAOe,GACPF,GAAQX,GACRD,GAAOe,GACPF,GAAQX,EACV,CACE,IAAIgB,EAAQ,CACR,KAAK,IAAI,MAAM,KAAM,CAACN,EAAME,EAAMf,EAAKE,CAAG,CAAC,EAC3C,KAAK,IAAI,MAAM,KAAM,CAACW,EAAME,EAAMf,EAAKE,CAAG,CAAC,CAC/C,EACIkB,EAAQ,CACR,KAAK,IAAI,MAAM,KAAM,CAACN,EAAME,EAAMf,EAAKE,CAAG,CAAC,EAC3C,KAAK,IAAI,MAAM,KAAM,CAACW,EAAME,EAAMf,EAAKE,CAAG,CAAC,CAC/C,EAEIkB,EAAWb,EAASS,GAAUE,EAAM,GAAKA,EAAM,IAC/CG,EAAWZ,EAAUQ,GAAWE,EAAM,GAAKA,EAAM,IAEjDG,EAASF,EAAWpxR,GAAYqxR,EAAWZ,GAC3Cc,EAASF,EAAWrxR,GAAYoxR,EAAWb,GAE3CiB,EAASJ,EAAWpxR,GAAYqxR,EAAWJ,GAC3CQ,EAASJ,EAAWrxR,GAAYoxR,EAAWJ,IAE1CjB,EAAME,GAAO,GAAKW,EAAOE,GAAQ,GAClC,EAAK,IAAMQ,EACX,EAAS,IAAME,IAEf,EAAK,IAAMF,EACX,EAAS,IAAME,IAEdxB,EAAME,GAAO,GAAKW,EAAOE,GAAQ,GAClC,EAAK,IAAMQ,EACX,EAAS,IAAME,IAEf,EAAK,IAAMF,EACX,EAAS,IAAME,EAEvB,CACJ,CAEJ,MAEA,OAAOh6R,EAAKw4R,GAAO1la,EAAKwla,GAAOr4R,EAAKw4R,GAAOvla,EAAKqla,CACpD,CACJ,CAEA,SAASK,EAAe,EAAM,CAC1B,GAAIh5M,EAAK,KACL,MAAQ,GAAK,GAAKs4M,EAAct4M,EAAK,KAAK,KAAK,OAEnD,EAAK,GAAK,CACN,CAAC,EAAG,CAAC,EACL,CAAC,EAAG,CAAC,CACT,EACA,IAAK,IAAI/oY,EAAI,EAAGA,EAAI,EAAG,EAAEA,EACjB+oY,EAAK/oY,IAAM+oY,EAAK/oY,EAAE,CAAC,GAAG,EAAE,CAAC,GAAK+oY,EAAK,GAAG,EAAE,CAAC,KACzC,EAAK,GAAG,EAAE,CAAC,GAAKA,EAAK/oY,EAAE,CAAC,GAAG,EAAE,CAAC,IAE9B+oY,EAAK/oY,IAAM+oY,EAAK/oY,EAAE,CAAC,GAAG,EAAE,CAAC,GAAK+oY,EAAK,GAAG,EAAE,CAAC,KACzC,EAAK,GAAG,EAAE,CAAC,GAAKA,EAAK/oY,EAAE,CAAC,GAAG,EAAE,CAAC,IAE9B+oY,EAAK/oY,IAAM+oY,EAAK/oY,EAAE,CAAC,GAAG,EAAE,CAAC,GAAK+oY,EAAK,GAAG,EAAE,CAAC,KACzC,EAAK,GAAG,EAAE,CAAC,GAAKA,EAAK/oY,EAAE,CAAC,GAAG,EAAE,CAAC,IAE9B+oY,EAAK/oY,IAAM+oY,EAAK/oY,EAAE,CAAC,GAAG,EAAE,CAAC,GAAK+oY,EAAK,GAAG,EAAE,CAAC,KACzC,EAAK,GAAG,EAAE,CAAC,GAAKA,EAAK/oY,EAAE,CAAC,GAAG,EAAE,CAAC,GAG1C,CAEA,SAASkilB,EAAS,EAAM,EAAa,CACjC,OAAOlma,EAAK,EAAE,CAACona,GAAepna,EAAK,EAAE,CAACona,EAC1C,CAuBA,MArBA,GAAM,WAAa,SAAU,EAAG,CAC5B,IAAIpjlB,EACA5B,GAAK,EAAQ2wC,EAAA,CAAG,OAEpB,IADA,EAAoB,MAAM3wC,CAAC,EACtB,EAAI,EAAG4B,EAAI5B,EAAG,EAAE4B,EAAG,EAAcA,GAAKg8K,EAAKrkF,EAAM33F,GAAIA,EAAG23F,CAAK,CACtE,EAEA,EAAM,WAAa,SAAU,EAAG,CAC5B,OAAO,UAAU,QAAW,EAAa,CAAC5oD,EAAIq4D,GAASioF,CAC3D,EAEA,EAAM,SAAW,SAAU,EAAG,CAC1B,OAAO,UAAU,QAAW,EAAW,CAACtgJ,EAAIq4D,GAASsqN,CACzD,EAEA,EAAM,KAAO,SAAU,EAAG,CACtB,OAAO,UAAU,QACT,EAAO,OAAO3iR,GAAM,WAAaA,EAAIotE,EAAS,CAACptE,CAAC,EAAIq4D,GACtD40E,CACV,EAEO50E,CACX,CCzMA,SAASi8e,IAAe,EAAG,EAAS,CAChC,IAAIrjlB,EACAmhQ,EACA/9P,EAAI,EACJysC,EACAyziB,EACAC,EACAC,EACAl5f,EACAm5f,EACAC,EAEArllB,EAAIqf,EAAE,GACN8wC,EAAI9wC,EAAE,GAENimkB,EAAcnpR,EAAQ,OAC1B,IAAK,EAAI,EAAGx6T,EAAI2jlB,EAAa,IAAK,CAC9B,EAAK,EACL,IAAIC,EAAUppR,EAAQx6T,GAClB6jlB,EAAaD,EAAQ,OAAS,EAGlC,GADA,EAAWA,EAAQ,GACfH,EAAS,KAAOG,EAAQC,EAAW,CAAC,IACpCJ,EAAS,KAAOG,EAAQC,EAAW,CAAC,GACpC,MAAU,MAAM,uDAAuD,EAM3E,IAHA,EAAKJ,EAAS,GAAKpllB,EACnB,EAAKollB,EAAS,GAAKj1hB,EAEV2yM,EAAK0iV,EAAY,IAAM,CAM5B,GALA,EAAQD,EAAQziV,EAAK,GAErB,EAAKuiV,EAAM,GAAKrllB,EAChB,EAAKqllB,EAAM,GAAKl1hB,EAEZ+0hB,IAAO,GAAKj5f,IAAO,EACd,IAAAk5f,GAAM,GAAKF,GAAM,GAAOA,GAAM,GAAKE,GAAM,EAAM,MAAO,QACxD,GAAKl5f,GAAM,GAAKi5f,GAAM,GAAOj5f,GAAM,GAAKi5f,GAAM,EAAI,CAErD,GADA,EAAIn2R,IAASk2R,EAAIE,EAAID,EAAIj5f,EAAI,EAAG,CAAC,EAC7Bz6C,IAAM,EAAK,MAAO,IACjBA,EAAI,GAAKy6C,EAAK,GAAKi5f,GAAM,GAAO1ziB,EAAI,GAAKy6C,GAAM,GAAKi5f,EAAK,IAAM,GACxE,CACA,EAAWG,EACX,EAAKp5f,EACL,EAAKk5f,CACT,CACJ,CAGA,OADIpglB,EAAI,GAAM,CAElB,CCpDA,IAAI0glB,GAAc,UAEHA,GAAc,IACdA,GAAc,IAErBA,GAAc,QACZA,GAAc,MACVA,GAAc,IACdA,GAAc,IAGnBA,GAAc,SACRA,GAAc,IACdA,GAAc,IACZA,GAAc,KAEtBA,GAAc,OAmBvB,SAASxilB,GAAQ,EAAM,EAAY,EAAU,CAAC,EAAG,CAC/C,IAAMyilB,EAAO,CAAE,KAAM,SAAU,EAS/B,OARIhmlB,EAAQ,KAAO,GAAKA,EAAQ,MAC9B,EAAK,GAAKA,EAAQ,IAEhBA,EAAQ,OACV,EAAK,KAAOA,EAAQ,MAEtB,EAAK,WAAao5D,GAAc,CAAC,EACjC,EAAK,SAAW6shB,EACTD,CACT,CAmBA,SAAS/xb,IAAM,EAAa,EAAY,EAAU,CAAC,EAAG,CACpD,GAAI,CAAC+gK,EACH,MAAU,MAAM,yBAAyB,EAE3C,GAAI,CAAC,MAAM,QAAQA,CAAW,EAC5B,MAAU,MAAM,8BAA8B,EAEhD,GAAIA,EAAY,OAAS,EACvB,MAAU,MAAM,6CAA6C,EAE/D,GAAI,CAACjgM,IAASigM,EAAY,EAAE,GAAK,CAACjgM,IAASigM,EAAY,EAAE,EACvD,MAAU,MAAM,kCAAkC,EAMpD,OAAOzxT,GAAQ,CAHb,KAAM,QACN,aAEgB,EAAG61D,EAAYp5D,CAAO,CAC1C,CAuCA,SAASkmlB,IAAW,EAAa,EAAY,EAAU,CAAC,EAAG,CACzD,GAAIlxR,EAAY,OAAS,EACvB,MAAU,MAAM,uDAAuD,EAMzE,OAAOzxT,GAAQ,CAHb,KAAM,aACN,aAEgB,EAAG61D,EAAYp5D,CAAO,CAC1C,CASA,SAASmmlB,GAAkB,EAAU,EAAU,CAAC,EAAG,CACjD,IAAMC,EAAK,CAAE,KAAM,mBAAoB,EAQvC,OAPIpmlB,EAAQ,KACV,EAAG,GAAKA,EAAQ,IAEdA,EAAQ,OACV,EAAG,KAAOA,EAAQ,MAEpB,EAAG,SAAW+0T,EACPqxR,CACT,CACA,SAASC,IAAgB,EAAa,EAAY,EAAU,CAAC,EAAG,CAK9D,OAAO9ilB,GAAQ,CAHb,KAAM,kBACN,aAEgB,EAAG61D,EAAYp5D,CAAO,CAC1C,CA0FA,SAAS+0H,IAAS,EAAK,CACrB,MAAO,CAAC,MAAMojC,CAAG,GAAKA,IAAQ,MAAQ,CAAC,MAAM,QAAQA,CAAG,CAC1D,CCxPA,SAASmub,IAAS,EAAO,CACvB,GAAI,CAACC,EACH,MAAU,MAAM,mBAAmB,EAErC,GAAI,CAAC,MAAM,QAAQA,CAAK,EAAG,CACzB,GAAIA,EAAM,OAAS,WAAaA,EAAM,WAAa,MAAQA,EAAM,SAAS,OAAS,QACjF,MAAO,CAAC,GAAGA,EAAM,SAAS,WAAW,EAEvC,GAAIA,EAAM,OAAS,QACjB,MAAO,CAAC,GAAGA,EAAM,WAAW,CAEhC,CACA,GAAI,MAAM,QAAQA,CAAK,GAAKA,EAAM,QAAU,GAAK,CAAC,MAAM,QAAQA,EAAM,EAAE,GAAK,CAAC,MAAM,QAAQA,EAAM,EAAE,EAClG,MAAO,CAAC,GAAGA,CAAK,EAElB,MAAU,MAAM,oDAAoD,CACtE,CAgFA,SAASC,GAAQ,EAAS,CAIxB,OAHIC,EAAQ,OAAS,UACZA,EAAQ,SAEVA,CACT,CCpGA,SAASC,GAAsB,EAAO,EAAS,EAAU,CAAC,EAAG,CAC3D,GAAI,CAACzyb,EACH,MAAU,MAAM,mBAAmB,EAErC,GAAI,CAACwoK,EACH,MAAU,MAAM,qBAAqB,EAEvC,IAAMkqR,EAAKL,IAASryb,CAAK,EACnBgyb,EAAOO,GAAQ/pR,CAAO,EACtBt7S,EAAO8kkB,EAAK,KACZhoa,EAAOw+I,EAAQ,KACjBmqR,EAAQX,EAAK,YACjB,GAAIhoa,GAAQ4oa,IAAOF,EAAI1oa,CAAI,IAAM,GAC/B,MAAO,GAEL98J,IAAS,YACX,EAAQ,CAACylkB,CAAK,GAEhB,IAAIlrlB,EAAS,GACb,IAAK,IAAIuG,EAAI,EAAGA,EAAI2klB,EAAM,OAAQ,EAAE3klB,EAAG,CACrC,IAAM6klB,EAAaC,IAAIJ,EAAIC,EAAM3klB,EAAE,EACnC,GAAI6klB,IAAe,EAAG,MAAO,GAAQ,eAC5BA,IAAY,EAAS,GAChC,CACA,OAAOprlB,CACT,CACA,SAASmrlB,IAAO,EAAI,EAAM,CACxB,OAAO5oa,EAAK,IAAM0oa,EAAG,IAAM1oa,EAAK,IAAM0oa,EAAG,IAAM1oa,EAAK,IAAM0oa,EAAG,IAAM1oa,EAAK,IAAM0oa,EAAG,EACnF,CC/BA,IAAMK,IAAN,KAAgB,CACZ,YAAY,EAAO,CAAC,EAAG,EAAUC,IAAgB,CAK7C,GAJA,KAAK,KAAO5jlB,EACZ,KAAK,OAAS,KAAK,KAAK,OACxB,KAAK,QAAUi1G,EAEX,KAAK,OAAS,EACd,IAAK,IAAIr2G,GAAK,KAAK,QAAU,GAAK,EAAGA,GAAK,EAAG,IAAK,KAAK,MAAMA,CAAC,CAEtE,CAEA,KAAK,EAAM,CACP,KAAK,KAAK,KAAK2jC,CAAI,EACnB,KAAK,SACL,KAAK,IAAI,KAAK,OAAS,CAAC,CAC5B,CAEA,KAAM,CACF,GAAI,KAAK,SAAW,EAAG,OAEvB,IAAM2uH,EAAM,KAAK,KAAK,GAChB2M,EAAS,KAAK,KAAK,IAAI,EAQ7B,MAPA,MAAK,SAED,KAAK,OAAS,IACd,KAAK,KAAK,GAAKA,EACf,KAAK,MAAM,CAAC,GAGT3M,CACX,CAEA,MAAO,CACH,OAAO,KAAK,KAAK,EACrB,CAEA,IAAI,EAAK,CACL,GAAM,CAAC,OAAM,WAAW,KAClB3uH,EAAOviC,EAAKq2E,GAElB,KAAOA,EAAM,GAAG,CACZ,IAAMrjB,EAAUqjB,EAAM,GAAM,EACtBl8E,EAAU6F,EAAKgzD,GACrB,GAAIiiD,EAAQ1yE,EAAMpoC,CAAO,GAAK,EAAG,MACjC,EAAKk8E,GAAOl8E,EACZ,EAAM64D,CACV,CAEA,EAAKqjB,GAAO9zC,CAChB,CAEA,MAAM,EAAK,CACP,GAAM,CAAC,OAAM,WAAW,KAClBw7L,EAAa,KAAK,QAAU,EAC5Bx7L,EAAOviC,EAAKq2E,GAElB,KAAOA,EAAM0nJ,GAAY,CACrB,IAAIrnG,GAAQrgD,GAAO,GAAK,EACpBuigB,EAAO54kB,EAAK02H,GACVI,EAAQJ,EAAO,EAMrB,GAJII,EAAQ,KAAK,QAAU7hB,EAAQj1G,EAAK82H,GAAQ8hd,CAAI,EAAI,IACpD,EAAO9hd,EACP,EAAO92H,EAAK82H,IAEZ7hB,EAAQ2je,EAAMr2iB,CAAI,GAAK,EAAG,MAE9B,EAAK8zC,GAAOuigB,EACZ,EAAMlid,CACV,CAEA,EAAKrgD,GAAO9zC,CAChB,CACJ,EAEA,SAASqhjB,IAAe,EAAG,EAAG,CAC1B,OAAOxnkB,EAAIC,EAAI,GAAK,IAAIA,EAC5B,CAEA,SAASwnkB,IAAuB,EAAI,EAAI,CAKpC,OAJIC,EAAG,EAAE,EAAIl8f,EAAG,EAAE,EAAU,EACxBk8f,EAAG,EAAE,EAAIl8f,EAAG,EAAE,EAAU,GAExBk8f,EAAG,EAAE,IAAMl8f,EAAG,EAAE,GAAUk8f,EAAG,EAAE,EAAIl8f,EAAG,EAAE,EACrC,EAD6C,EAExD,CAEA,SAASm8f,IAAwC,EAAM,EAAM,CAKzD,OAJIC,EAAK,gBAAgB,EAAE,EAAIC,EAAK,gBAAgB,EAAE,EAAU,EAC5DD,EAAK,gBAAgB,EAAE,EAAIC,EAAK,gBAAgB,EAAE,EAAU,GAE5DD,EAAK,gBAAgB,EAAE,IAAMC,EAAK,gBAAgB,EAAE,GAAUD,EAAK,gBAAgB,EAAE,EAAIC,EAAK,gBAAgB,EAAE,EAC7G,EADqH,EAEhI,CAEA,IAAMC,IAAN,KAAY,CAER,YAAa,EAAG,EAAW,EAAQ,EAAS,CACxC,KAAK,EAAI,CACL,EAAG5nkB,EAAE,GACL,EAAGA,EAAE,EACT,EACA,KAAK,UAAY6nkB,EACjB,KAAK,OAASC,EACd,KAAK,QAAU7/jB,EAEf,KAAK,WAAa,KAClB,KAAK,eAAiB,IAC1B,CAEA,YAAa,EAAc,CACvB,OAAO,KAAK,EAAE,IAAM8/jB,EAAa,EAAE,GAAK,KAAK,EAAE,IAAMA,EAAa,EAAE,CACxE,CACJ,EAEA,SAASC,IAAgB,EAAS,EAAY,CAC1C,GAAIlB,EAAQ,OAAS,oBAAqB,CACtC,IAAM1xR,EAAW0xR,EAAQ,SACzB,IAAK,IAAIxklB,EAAI,EAAGA,EAAI8yT,EAAS,OAAQ,IACjC6yR,IAAe7yR,EAAS9yT,GAAI4llB,CAAU,CAE9C,MACID,IAAenB,EAASoB,CAAU,CAE1C,CAEA,IAAIL,GAAY,EACZC,GAAS,EACT7/jB,GAAU,EACd,SAASggkB,IAAgB,EAAmB,EAAY,CACpD,IAAM3B,EAAO6B,EAAkB,OAAS,UAAYA,EAAkB,SAAWA,EAC7E7Y,EAASgX,EAAK,aAEdA,EAAK,OAAS,WAAaA,EAAK,OAAS,qBAAmB,EAAS,CAAChX,CAAM,GAC5EgX,EAAK,OAAS,eAAc,EAAS,CAAC,CAAChX,CAAM,CAAC,GAElD,IAAK,IAAIhtkB,EAAI,EAAGA,EAAIgtkB,EAAO,OAAQ,IAC/B,IAAK,IAAI7rU,EAAK,EAAGA,EAAK6rU,EAAOhtkB,EAAE,CAAC,OAAQ,IAAM,CAC1C,IAAIyjlB,EAAWzW,EAAOhtkB,EAAE,CAACmhQ,EAAG,CAAC,GACzBuiV,EAAQ,KACZ,IAAkB,EAClB,IAAK,IAAIoC,EAAM,EAAGA,EAAM9Y,EAAOhtkB,EAAE,CAACmhQ,EAAG,CAAC,OAAS,EAAG,IAAO,CACrD,EAAQ6rU,EAAOhtkB,EAAE,CAACmhQ,EAAG,CAAC2kV,EAAM,GAE5B,IAAMZ,EAAK,IAAII,IAAM7B,EAAU8B,GAAWC,GAAQ7/jB,EAAO,EACnDqjE,EAAK,IAAIs8f,IAAM5B,EAAO6B,GAAWC,GAAQ7/jB,GAAU,CAAC,EAE1D,EAAG,WAAaqjE,EAChB,EAAG,WAAak8f,EAEZD,IAAsBC,EAAIl8f,CAAE,EAAI,GAChC,EAAG,eAAiB,GACpB,EAAG,eAAiB,KAEpB,EAAG,eAAiB,GACpB,EAAG,eAAiB,IAExB48f,EAAW,KAAKV,CAAE,EAClBU,EAAW,KAAK58f,CAAE,EAElB,EAAW06f,EACX,IAAoB,CACxB,CACJ,CAEJ,IAAwB,CAC5B,CAEA,IAAMqC,IAAN,KAAc,CAEV,YAAa,EAAO,CAChB,KAAK,eAAiBjnkB,EACtB,KAAK,gBAAkBA,EAAM,UACjC,CACJ,EAEA,SAASknkB,IAAsB,EAAM,EAAM,CAGvC,GAFIZ,IAAS,MAAQC,IAAS,MAE1BD,EAAK,eAAe,SAAWC,EAAK,eAAe,SAClDD,EAAK,gBAAgB,YAAYC,EAAK,cAAc,GACrDD,EAAK,gBAAgB,YAAYC,EAAK,cAAc,GACpDD,EAAK,gBAAgB,YAAYC,EAAK,eAAe,GACrDD,EAAK,eAAe,YAAYC,EAAK,cAAc,GACnDD,EAAK,eAAe,YAAYC,EAAK,eAAe,GAAI,MAAO,GAEnE,IAAMppa,EAAKmpa,EAAK,eAAe,EAAE,EAC3B/oa,EAAK+oa,EAAK,eAAe,EAAE,EAC3Bhpa,EAAKgpa,EAAK,gBAAgB,EAAE,EAC5B9oa,EAAK8oa,EAAK,gBAAgB,EAAE,EAC5B92R,EAAK+2R,EAAK,eAAe,EAAE,EAC3B92R,EAAK82R,EAAK,eAAe,EAAE,EAC3BY,EAAKZ,EAAK,gBAAgB,EAAE,EAC5Ba,EAAKb,EAAK,gBAAgB,EAAE,EAE5Bc,GAAUD,EAAK33R,IAAOnyI,EAAKH,IAASgqa,EAAK33R,IAAOhyI,EAAKD,GACrD+pa,GAAUH,EAAK33R,IAAOjyI,EAAKkyI,IAAS23R,EAAK33R,IAAOtyI,EAAKqyI,GACrD+3R,GAAUjqa,EAAKH,IAAOI,EAAKkyI,IAASjyI,EAAKD,IAAOJ,EAAKqyI,GAE3D,GAAI63R,IAAU,EAEV,MADuC,GAI3C,IAAMG,EAAKF,EAAQD,EACbI,EAAKF,EAAQF,EAOnB,OALIG,GAAM,GAAKA,GAAM,GAAKC,GAAM,GAAKA,GAAM,GAGhC,CAFGtqa,EAAMqqa,GAAMlqa,EAAKH,GACjBI,EAAMiqa,GAAMhqa,EAAKD,EACf,CAGpB,CAIA,SAASmqa,IAAU,EAAY,EAAyB,CACpD,IAA8E,GAE9E,IAAMC,EAAqB,CAAC,EACtBC,EAAW,IAAI3B,IAAU,CAAC,EAAGI,GAAsC,EAEzE,KAAOS,EAAW,QAAQ,CACtB,IAAM9mkB,EAAQ8mkB,EAAW,IAAI,EAC7B,GAAI9mkB,EAAM,eAAgB,CAEtB,IAAMgJ,EAAU,IAAIi+jB,IAAQjnkB,CAAK,EACjC,IAAK,IAAI9e,EAAI,EAAGA,EAAI0mlB,EAAS,KAAK,OAAQ,IAAK,CAC3C,IAAMC,EAAWD,EAAS,KAAK1mlB,GAC/B,GAAI4mlB,GACID,EAAS,eAAe,YAAc7nkB,EAAM,UAAW,SAE/D,IAAM/L,EAAeizkB,IAAqBl+jB,EAAS6+jB,CAAQ,EACvD5zkB,IAAiB,IAAO0zkB,EAAmB,KAAK1zkB,CAAY,CACpE,CACA2zkB,EAAS,KAAK5+jB,CAAO,CACzB,MAAWhJ,EAAM,iBAAmB,IAChC4nkB,EAAS,IAAI,CAIrB,CACA,OAAOD,CACX,CAEA,SAASI,IAAwB,EAAS,EAAyB,CAC/D,IAAMjB,EAAa,IAAIb,IAAU,CAAC,EAAGE,GAAqB,EAE1D,OADAS,IAAelB,EAASoB,CAAU,EAC3BY,IAASZ,EAAYgB,CAAuB,CACvD,CCrPA,IAAIC,IAAyBC,IAG7B,SAASC,GAAc,EAAO,EAAO,EAAU,CAAC,EAAG,CACjD,GAAM,CAAE,mBAAmB,GAAM,0BAA0B,IAAShplB,EAChE+0T,EAAW,CAAC,EACZk0R,EAAM,OAAS,oBACjB,EAAWl0R,EAAS,OAAOk0R,EAAM,QAAQ,EAClCA,EAAM,OAAS,UAAWl0R,EAAS,KAAKk0R,CAAK,GAC7CA,EAAM,OAAS,cAAgBA,EAAM,OAAS,WAAaA,EAAM,OAAS,mBAAqBA,EAAM,OAAS,iBACrHl0R,EAAS,KAAKxxT,GAAQ0llB,CAAK,CAAC,EAE1Bx8gB,EAAM,OAAS,oBACjB,EAAWsoP,EAAS,OAAOtoP,EAAM,QAAQ,EAClCA,EAAM,OAAS,UAAWsoP,EAAS,KAAKtoP,CAAK,GAC7CA,EAAM,OAAS,cAAgBA,EAAM,OAAS,WAAaA,EAAM,OAAS,mBAAqBA,EAAM,OAAS,iBACrHsoP,EAAS,KAAKxxT,GAAQkpE,CAAK,CAAC,EAE9B,IAAMy8gB,EAAgBJ,IACpB3C,GAAkBpxR,CAAQ,EAC1B8zR,CACF,EACI78X,EAAU,CAAC,EACf,GAAIm9X,EAAkB,CACpB,IAAM30Z,EAAS,CAAC,EAChB00Z,EAAc,QAAS,GAAiB,CACtC,IAAM5vlB,EAAM0b,EAAa,KAAK,GAAG,EAC5Bw/K,EAAOl7L,KACV,EAAOA,GAAO,GACd0yN,EAAQ,KAAKh3M,CAAY,EAE7B,CAAC,CACH,KACE,GAAUk0kB,EAEZ,OAAO/C,GAAkBn6X,EAAQ,IAAK,GAAM/3D,IAAM7jG,CAAC,CAAC,CAAC,CACvD,CC8HA,SAASg5hB,IAAS,EAAS,EAAU,CACnC,IAAInnlB,EAAG04H,EAAGrqE,EAAGqkQ,EAAU00R,EAAOC,EAAyBC,EAAsBC,EAAmBC,EAAajC,EAAWkC,EAAe,EAAGC,EAAsBlD,EAAQ,OAAS,oBAAqBmD,EAAYnD,EAAQ,OAAS,UAAWr1kB,EAAOu4kB,EAAsBlD,EAAQ,SAAS,OAAS,EACrS,IAAK,EAAI,EAAGxklB,EAAImP,EAAM,IAAK,CAOzB,IANA,EAA0Bu4kB,EAAsBlD,EAAQ,SAASxklB,EAAE,CAAC,SAAW2nlB,EAAYnD,EAAQ,SAAWA,EAC9G,EAAoBkD,EAAsBlD,EAAQ,SAASxklB,EAAE,CAAC,WAAa2nlB,EAAYnD,EAAQ,WAAa,CAAC,EAC7G,EAAckD,EAAsBlD,EAAQ,SAASxklB,EAAE,CAAC,KAAO2nlB,EAAYnD,EAAQ,KAAO,IAAK,GAC/F,EAAYkD,EAAsBlD,EAAQ,SAASxklB,EAAE,CAAC,GAAK2nlB,EAAYnD,EAAQ,GAAK,IAAK,GACzF,EAAuB6C,EAA0BA,EAAwB,OAAS,qBAAuB,GACzG,EAAQC,EAAuBD,EAAwB,WAAW,OAAS,EACtE,EAAI,EAAGh5hB,EAAI+4hB,EAAO,IAErB,GADA,EAAWE,EAAuBD,EAAwB,WAAWh5hB,GAAKg5hB,EACtE30R,IAAa,KACf,IAAIngT,EACF,KACAk1kB,EACAF,EACAC,EACAjC,CACF,IAAM,GACJ,MAAO,QAGX,OAAQ7yR,EAAS,KAAjB,CACE,IAAK,QACL,IAAK,aACL,IAAK,aACL,IAAK,UACL,IAAK,kBACL,IAAK,eACH,GAAIngT,EACFmgT,EACA+0R,EACAF,EACAC,EACAjC,CACF,IAAM,GACJ,MAAO,GACT,MAEF,IAAK,qBACH,IAAK,EAAI,EAAG7sd,EAAIg6L,EAAS,WAAW,OAAQ,IAC1C,GAAIngT,EACFmgT,EAAS,WAAWh6L,GACpB+ud,EACAF,EACAC,EACAjC,CACF,IAAM,GACJ,MAAO,GAEX,MAEF,QACE,MAAU,MAAM,uBAAuB,CAC3C,CAEF,GACF,CACF,CAqBA,SAASqC,GAAY,EAAS,EAAU,CACtCT,IAAS3C,EAAS,SAAS,EAAU,EAAc,EAAY,EAAM,EAAI,CACvE,IAAItlkB,EAAOwzS,IAAa,KAAO,KAAOA,EAAS,KAC/C,OAAQxzS,EAAR,CACE,KAAK,KACL,IAAK,QACL,IAAK,aACL,IAAK,UAOH,OANI3M,EACFjR,GAAQoxT,EAAUv7P,EAAY,CAAE,OAAM,IAAG,CAAC,EAC1CswhB,EACA,CACF,IAAM,IAEN,MACJ,CACA,IAAII,EACJ,OAAQ3okB,EAAR,CACE,IAAK,aACH,EAAW,QACX,MACF,IAAK,kBACH,EAAW,aACX,MACF,IAAK,eACH,EAAW,SAEf,CACA,IAAK,IAAI4okB,EAAoB,EAAGA,EAAoBp1R,EAAS,YAAY,OAAQ,IAAqB,CACpG,IAAIS,EAAaT,EAAS,YAAYo1R,GAKtC,GAAIv1kB,EAASjR,GAAQ,CAHnB,KAAMumlB,EACN,YAAa10R,CAES,EAAGh8P,CAAU,EAAGswhB,EAAcK,CAAiB,IAAM,GAC3E,MAAO,EACX,CACF,CAAC,CACH,CCzRA,SAASC,GAAc,EAAM,EAAU,CAAC,EAAG,CACzC,IAAM/D,EAAOO,GAAQyD,CAAI,EAIzB,OAHI,CAACjqlB,EAAQ,YAAciqlB,EAAK,OAAS,YACvC,EAAQ,WAAaA,EAAK,YAEpBhE,EAAK,KAAb,CACE,IAAK,UACH,OAAOiE,IAAoBjE,EAAMjmlB,CAAO,EAC1C,IAAK,eACH,OAAOmqlB,IAAmBlE,EAAMjmlB,CAAO,EACzC,QACE,MAAU,MAAM,cAAc,CAClC,CACF,CACA,SAASkqlB,IAAoB,EAAM,EAAU,CAAC,EAAG,CAE/C,IAAMjb,EADOuX,GAAQyD,CACH,CAAC,CAAC,YAEpB,OAAOG,IAAanb,EADDjvkB,EAAQ,WAAaA,EAAQ,WAAaiqlB,EAAK,OAAS,UAAYA,EAAK,WAAa,CAAC,CACpE,CACxC,CACA,SAASE,IAAmB,EAAW,EAAU,CAAC,EAAG,CAEnD,IAAMlb,EADOuX,GAAQ6D,CACH,CAAC,CAAC,YACdjxhB,EAAap5D,EAAQ,WAAaA,EAAQ,WAAaqqlB,EAAU,OAAS,UAAYA,EAAU,WAAa,CAAC,EAC9GxqkB,EAAQ,CAAC,EAIf,OAHAovjB,EAAO,QAAS,GAAU,CACxBpvjB,EAAM,KAAKuqkB,IAAa7D,EAAOnthB,CAAU,CAAC,CAC5C,CAAC,EACM+shB,GAAkBtmkB,CAAK,CAChC,CACA,SAASuqkB,IAAa,EAAQ,EAAY,CAIxC,OAHInb,EAAO,OAAS,EACXoX,IAAgBpX,EAAQ71gB,CAAU,EAEpC8shB,IAAWjX,EAAO,GAAI71gB,CAAU,CACzC,CCjCA,SAASkxhB,IAAgB,EAAU,EAAU,CAC3C,0BAA0B,IACxB,CAAE,wBAAyB,EAAK,EAAG,CACrC,IAAIC,EAAO,GAaX,OAZAV,GAAYW,EAAW,GAAa,CAClCX,GAAYY,EAAW,GAAa,CAClC,GAAIF,IAAS,GACX,MAAO,GAET,EAAOG,IACLC,EAAS,SACTC,EAAS,SACT/B,CACF,CACF,CAAC,CACH,CAAC,EACM0B,CACT,CACA,SAASG,IAAS,EAAO,EAAO,EAAyB,CACvD,OAAQG,EAAM,KAAd,CACE,IAAK,QACH,OAAQC,EAAM,KAAd,CACE,IAAK,QACH,MAAO,CAACC,IAAcF,EAAM,YAAaC,EAAM,WAAW,EAC5D,IAAK,aACH,MAAO,CAACE,IAAcF,EAAOD,CAAK,EACpC,IAAK,UACH,MAAO,CAACnE,GAAsBmE,EAAOC,CAAK,CAC9C,CACA,MACF,IAAK,aACH,OAAQA,EAAM,KAAd,CACE,IAAK,QACH,MAAO,CAACE,IAAcH,EAAOC,CAAK,EACpC,IAAK,aACH,MAAO,CAACG,IAAaJ,EAAOC,EAAOjC,CAAuB,EAC5D,IAAK,UACH,MAAO,CAACqC,IAAaJ,EAAOD,EAAOhC,CAAuB,CAC9D,CACA,MACF,IAAK,UACH,OAAQiC,EAAM,KAAd,CACE,IAAK,QACH,MAAO,CAACpE,GAAsBoE,EAAOD,CAAK,EAC5C,IAAK,aACH,MAAO,CAACK,IAAaL,EAAOC,EAAOjC,CAAuB,EAC5D,IAAK,UACH,MAAO,CAACsC,IAAaL,EAAOD,EAAOhC,CAAuB,CAC9D,CACJ,CACA,MAAO,EACT,CACA,SAASmC,IAAc,EAAY,EAAI,CACrC,IAAK,IAAI/olB,EAAI,EAAGA,EAAIiklB,EAAW,YAAY,OAAS,EAAG,IACrD,GAAIkF,IACFlF,EAAW,YAAYjklB,GACvBiklB,EAAW,YAAYjklB,EAAI,GAC3B0klB,EAAG,WACL,EACE,MAAO,GAGX,MAAO,EACT,CACA,SAASsE,IAAa,EAAa,EAAa,EAAyB,CAOvE,OANyBjC,GAAcqC,EAAaC,EAAa,CAC/D,yBACF,CACmB,CAAC,CAAC,SAAS,OAAS,CAIzC,CACA,SAASJ,IAAa,EAAS,EAAY,EAAyB,CAClE,IAAK,IAAM3E,KAASL,EAAW,YAC7B,GAAIQ,GAAsBH,EAAO9pR,CAAO,EACtC,MAAO,GASX,OANyBusR,GAAc9C,EAAY8D,GAAcvtR,CAAO,EAAG,CACzE,yBACF,CACmB,CAAC,CAAC,SAAS,OAAS,CAIzC,CACA,SAAS0uR,IAAa,EAAU,EAAU,EAAyB,CACjE,IAAK,IAAMI,KAAUf,EAAS,YAAY,GACxC,GAAI9D,GAAsB6E,EAAQd,CAAQ,EACxC,MAAO,GAGX,IAAK,IAAMe,KAAUf,EAAS,YAAY,GACxC,GAAI/D,GAAsB8E,EAAQhB,CAAQ,EACxC,MAAO,GAWX,OARyBxB,GACvBgB,GAAcQ,CAAQ,EACtBR,GAAcS,CAAQ,EACtB,CAAE,yBAAwB,CAET,CAAC,CAAC,SAAS,OAAS,CAIzC,CACA,SAASW,IAAqB,EAAkB,EAAgB,EAAI,CAClE,IAAMK,EAAM9E,EAAG,GAAK+E,EAAiB,GAC/BC,EAAMhF,EAAG,GAAK+E,EAAiB,GAC/BE,EAAMC,EAAe,GAAKH,EAAiB,GAC3CI,EAAMD,EAAe,GAAKH,EAAiB,GAc/C,OAbYD,EAAMK,EAAMH,EAAMC,IAClB,EAGV,KAAK,IAAIA,CAAG,GAAK,KAAK,IAAIE,CAAG,EAC3BF,EAAM,EACDF,EAAiB,IAAM/E,EAAG,IAAMA,EAAG,IAAMkF,EAAe,GAExDA,EAAe,IAAMlF,EAAG,IAAMA,EAAG,IAAM+E,EAAiB,GAExDI,EAAM,EACRJ,EAAiB,IAAM/E,EAAG,IAAMA,EAAG,IAAMkF,EAAe,GAExDA,EAAe,IAAMlF,EAAG,IAAMA,EAAG,IAAM+E,EAAiB,GAXxD,EAaX,CACA,SAASX,IAAc,EAAO,EAAO,CACnC,OAAOgB,EAAM,KAAOC,EAAM,IAAMD,EAAM,KAAOC,EAAM,EACrD,CCrIA,SAASC,GAAkB,EAAU,EAAU,CAC7C,0BAA0B,IACxB,CAAC,EAAG,CACN,IAAI1B,EAAO,GAWX,OAVAV,GAAYW,EAAW,GAAa,CAClCX,GAAYY,EAAW,GAAa,CAClC,GAAIF,IAAS,GACX,MAAO,GAET,EAAO,CAACD,IAAgBK,EAAS,SAAUC,EAAS,SAAU,CAC5D,yBACF,CAAC,CACH,CAAC,CACH,CAAC,EACML,CACT,CCCA,IAAa2B,IAA2B,IAAI,I,ymoBAIxC73Z,EAAY,IAAK,GAAe,CAC5B,IAAM83Z,EAAqB,CACvB,GAAGhpa,EACH,eAAgBA,EAAW,iBAAiB,IAAK,GAC7C+kX,IAAgB,IAAIntiB,CAAI,CAC5B,CACJ,EACA,MAAO,CAACooL,EAAW,GAAIgpa,CAAkB,CAC7C,CAAC,CACL,ECJMC,GAAkB,EAExB,SAAgBC,IAAiC,CAC7C,UACA,aACA,iBACA,QACA,gBAAgB,GAOe,CAC/B,IAAMzqZ,EAAYsqZ,IAAyB,IAAI3olB,EAAQ,EAAE,EACzD,GAAI,CAACq+L,GAAa,CAACA,EAAU,QAAS,OAGtC,IAAM0qZ,EAAUC,IAAyB,CACrC,QAAS3qZ,EAAU,QACnB,aACA,cAAe,CAAE,EAAG,EAAI,CAC5B,CAAC,EAED,GAAI,CAAC0qZ,EAAS,OAGd,IAAM/oD,EAAcipD,IAA0B,CAC1C,KAAMr/D,EACN,UACA,eACJ,CAAC,EAED,GAAIoW,EACA,MAAO,CACH,KAAM,WACN,GAAIhgiB,EAAQ,GACZ,UACA,aAAcggiB,EAAY,aAC1B,KAAMpW,EACN,UACA,SAAUoW,EAAY,SACtB,MAAO/5U,GAAA,SACX,CAGR,CAEA,SAAgBijY,IAAiC,CAC7C,UACA,aACA,iBACA,gBAAgB,GAMe,CAC/B,IAAM7qZ,EAAYsqZ,IAAyB,IAAI3olB,EAAQ,EAAE,EACzD,GAAI,CAACq+L,GAAa,CAACA,EAAU,aAAe,CAACA,EAAU,UAAW,OAElE,IAAM65H,EAAY75H,EAAU,UACtB8qZ,EAAcvoR,EAAWviI,EAAU,WAAW,EACpD,GAAI,CAAC8qZ,EAAa,OAElB,IAAM/ta,EAAW,KAAK,MACsBgua,EAAA,EAE5C,EACMC,EAAe,KAAK,MACkBD,EAAA,EAE5C,EAIIE,EAAeC,IAAmB,CAClC,KAAM3/D,EACN,cACA,YACA,WACA,cACJ,CAAC,EAcD,OAVIvrV,EAAU,gBAAgB,SAC1B,EAAemrZ,IAA2B,CACtC,eAAgBnrZ,EAAU,eAC1B,eACA,YACA,aACA,KAAMgrZ,EAAe,EACrB,SAAU,CACd,CAAC,GAEE,CACH,KAAM,WACN,GAAIrplB,EAAQ,GACZ,UACA,KAAM4phB,EACN,eACA,OAAQu/D,EACR,YACA,WACA,MAAOtlT,EACX,CACJ,CAOA,SAAgB4lT,IAAuC,CACnD,cACA,aACA,0BAKqB,CACrB,IAAMC,EAA0B,IAAI,IAChC54Z,EAAY,IAAK,GAAe,CAAClR,EAAW,GAAIA,CAAU,CAAC,CAC/D,EAMM+pa,EAH4BC,IAAwB94Z,CAG9B,EAA0B,OACjD,GAAe,CAEZ,IAAI+4Z,EAAoBC,IACpBlqa,EAAW,OACf,EAgBA,OAZImqa,EAAuB,KAAO,IAC9B,EAAoBF,EAAkB,OACjC,GACG,CAACE,EAAuB,IAAI/plB,EAAQ,EAAY,CACxD,GAWA,CAACgqlB,IAA2C,CACxC,aACA,kBAXkB90b,GACtB20b,EAAkB,IAAK,GACnBH,EAAwB,IAAI1plB,EAAQ,EAAY,CACpD,CAQI,CACJ,CAAC,GAED,CAACiqlB,IAAoC,CACjC,aACA,oBACA,YACJ,CAAC,CAET,CACJ,EAeA,OAbIN,EAAoB,OAAS74Z,EAAY,OAGlC84Z,IACHD,EAAoB,IAAK,GAAe,CACpC,IAAM/9C,EAAa89C,EAAwB,IACvC9pa,EAAW,EACf,CAAC,CAAE,aACH,MAAO,CAAE,GAAGA,EAAY,aAAcgsX,CAAW,CACrD,CAAC,CACL,EAGG+9C,CACX,CAEA,SAASV,IAA0B,CAC/B,OACA,UACA,gBAAgB,GAKuC,CACvD,IAAMpd,EAAA,GACsCud,EAGtCc,EAAgB,CAAE,EAAGnB,EAAQ,GAAI,EAAGA,EAAQ,EAAG,EACjDO,EAAea,IAAwB,CACvC,OACA,SAAUte,EACV,WAAY,IACZ,SAAUqe,EACV,OAAQ,EACZ,CAAC,EAGGE,EAAWC,IAAsBf,EAAa,QAASP,CAAO,EAClE,GAAIqB,EAAU,MAAO,CAAE,eAAc,SAAUve,CAAgB,EAI/D,IACI,IAAIzwZ,EAAA,GACJA,GAAA,EACA,IACF,CACE,IAAMkva,EAAiBlva,EAAWgua,EAUlC,GATA,EAAee,IAAwB,CACnC,OACA,SAAUG,EACV,WAAY,IACZ,SAAUJ,EACV,OAAQ,EACZ,CAAC,EAED,EAAWG,IAAsBf,EAAa,QAASP,CAAO,EAC1DqB,EAAU,MAAO,CAAE,eAAc,SAAUE,CAAe,CAClE,CAIJ,CAEA,SAASf,IAAmB,CACxB,OACA,cACA,YACA,WACA,eACA,UAAUV,IAQH,CACP,IAAM0B,EAAa9va,EAAO,QAAQ5nG,EAAM,CAAE,WAAU,WAAY,GAAI,CAAC,EAE/D+rd,EAAgB4rD,IAA+B,CACjD,cACA,aACA,YACA,eACA,SACJ,CAAC,EAED,OAAOD,EAAW,IAAI,CAAE,EAAG3rD,EAAc,GAAI,EAAGA,EAAc,EAAG,CAAC,CACtE,CAEA,SAASyrD,IAAsB,EAAc,EAA2B,CACpE,IAAMv5S,EAAKpgJ,EAAM,EAAIq4b,EAAQ,GACvBh4S,EAAKrgJ,EAAM,EAAIq4b,EAAQ,GAC7B,OACKj4S,EAAKA,GAAOi4S,EAAQ,GAAKA,EAAQ,IAC7Bh4S,EAAKA,GAAOg4S,EAAQ,GAAKA,EAAQ,KACtC,CAER,CAEA,SAASC,IAAyB,CAC9B,UACA,aACA,iBAKoB,CACpB,IAAMyB,EAAa7pR,EAAW,CAACmoR,EAAQ,GAAIA,EAAQ,EAAE,CAAC,EAChD2B,EAAW9pR,EAAW,CAACmoR,EAAQ,KAAMA,EAAQ,EAAE,CAAC,EAChD4B,EAAU/pR,EAAW,CAACmoR,EAAQ,GAAIA,EAAQ,GAAG,CAAC,EAEpD,GAAI,CAAC0B,GAAc,CAACC,GAAY,CAACC,EAAS,OAE1C,IAAMnxJ,EAAK,KAAK,IAAIixJ,EAAW,GAAKC,EAAS,EAAE,EACzCE,EAAK,KAAK,IAAIH,EAAW,GAAKE,EAAQ,EAAE,EAExCE,GAAQC,GAAe,GAAK,GAAKtxJ,EACjCuxJ,GAAQD,GAAe,GAAK,GAAKF,EAEvC,MAAO,CACH,GAAIH,EAAW,GACf,GAAIA,EAAW,GACf,GAAIjxJ,EAAKqxJ,EACT,GAAID,EAAKG,CACb,CACJ,CAMA,SAASP,IAA+B,CACpC,cACA,aACA,YACA,eACA,UAAU3B,IAOO,CACjB,GAAM,CAAC9rlB,EAAGmwD,GAAKi8hB,EACT37hB,EAAI+8hB,EAAW,MACjBn8iB,EAAIm8iB,EAAW,OACbt8iB,EAAIo7iB,EAAenrd,EAEzB,OAAQg6L,EAAR,CACI,IAAK,QACD,MAAO,CAACn7T,EAAIkxC,EAAGif,EAAI9e,EAAI,CAAC,EAC5B,IAAK,OACD,MAAO,CAACrxC,EAAIkxC,EAAIuf,EAAGN,EAAI9e,EAAI,CAAC,EAChC,IAAK,SACD,MAAO,CAACrxC,EAAIywD,EAAI,EAAGN,EAAIjf,CAAC,EAC5B,IAAK,MACD,MAAO,CAAClxC,EAAIywD,EAAI,EAAGN,EAAI9e,EAAI,EAAIH,CAAC,EACpC,IAAK,UACD,MAAO,CAAClxC,EAAIkxC,EAAIuf,EAAGN,EAAI9e,EAAI,EAAIH,EAAI,EAAIG,CAAC,EAC5C,IAAK,aACD,MAAO,CAACrxC,EAAIkxC,EAAIuf,EAAGN,EAAI9e,EAAI,EAAIA,EAAIH,EAAI,CAAC,EAC5C,IAAK,WACD,MAAO,CAAClxC,EAAIkxC,EAAGif,EAAI9e,EAAI,EAAIH,EAAI,EAAIG,CAAC,EACxC,IAAK,cACD,MAAO,CAACrxC,EAAIkxC,EAAGif,EAAI9e,EAAI,EAAIA,EAAIH,EAAI,CAAC,CAC5C,CACJ,CAEA,SAAgB+8iB,IAA6B,CACzC,aACA,YACA,UAAUnC,IAKO,CACjB,GAAM,CAAE,IAAG,IAAG,QAAO,UAAW0B,EAEhC,OAAQryR,EAAR,CACI,IAAK,QACD,MAAO,CAACn7T,EAAImhI,EAAShxE,EAAIsJ,EAAS,CAAC,EACvC,IAAK,OACD,MAAO,CAACz5D,EAAIg+E,EAAQmjD,EAAShxE,EAAIsJ,EAAS,CAAC,EAC/C,IAAK,SACD,MAAO,CAACz5D,EAAIg+E,EAAQ,EAAG7tB,EAAIgxE,CAAO,EACtC,IAAK,MACD,MAAO,CAACnhI,EAAIg+E,EAAQ,EAAG7tB,EAAIsJ,EAAS0nE,CAAO,EAC/C,IAAK,UACD,MAAO,CAACnhI,EAAIg+E,EAAO7tB,EAAIsJ,CAAM,EACjC,IAAK,aACD,MAAO,CAACz5D,EAAIg+E,EAAO7tB,CAAC,EACxB,IAAK,WACD,MAAO,CAACnwD,EAAGmwD,EAAIsJ,CAAM,EACzB,IAAK,cACD,MAAO,CAACz5D,EAAGmwD,CAAC,CACpB,CACJ,CAEA,SAASi9hB,IAAwB,CAC7B,OACA,WACA,aACA,WACA,SAAS,IAOF,CAEP,IAAMI,EAAa9va,EAAO,QAAQ5nG,EAAM,CAAE,WAAU,YAAW,CAAC,EAG1D91E,EAAI85H,EAASlzC,EAAS,EAAI4mgB,EAAW,MAAQ,EAAI5mgB,EAAS,EAC1Dz2B,EAAI2pE,EAASlzC,EAAS,EAAI4mgB,EAAW,OAAS,EAAI5mgB,EAAS,EACjE,OAAO4mgB,EAAW,IAAI,CAAE,IAAG,GAAE,CAAC,CAClC,CAEA,SAASf,IAA2B,CAChC,iBACA,YACA,eACA,aACA,OACA,YAQO,CAEP,IAAIyB,EAAkBC,GAAsB5B,EAAe,GACvD1oR,EAAW,OAAOj9O,CAAQ,CAC9B,EAEIwngB,EAAY7B,EAChB,IAAK,IAAI/nS,EAAO,EAAGA,EAAO6pS,GACYC,EAAe,KAAM,GACnD3C,GAAkBuC,EAAiBK,CAAa,CAE/C,EAJ2B,IAOhC,EAAYH,EAAU,IAClBI,IAAwB,CACpB,SAAUJ,EAAU,QACpB,YACA,MACJ,CAAC,CACL,EAGA,EAAkBD,GAAsBC,EAAY,GAChDvqR,EAAW,OAAOj9O,CAAQ,CAC9B,EAGJ,OAAOwngB,CACX,CAEA,SAASI,IAAwB,CAC7B,SAAU,CAAE,IAAG,KACf,YACA,QAKM,CACN,OAAQrzR,EAAR,CACI,IAAK,QACD,MAAO,CAAE,EAAGn7T,EAAI6Q,EAAM,GAAE,EAC5B,IAAK,OACD,MAAO,CAAE,EAAG7Q,EAAI6Q,EAAM,GAAE,EAC5B,IAAK,MACD,MAAO,CAAE,IAAG,EAAGs/C,EAAIt/C,CAAK,EAC5B,IAAK,SACD,MAAO,CAAE,IAAG,EAAGs/C,EAAIt/C,CAAK,EAC5B,IAAK,UACD,MAAO,CAAE,EAAG7Q,EAAI6Q,EAAM,EAAGs/C,EAAIt/C,CAAK,EACtC,IAAK,WACD,MAAO,CAAE,EAAG7Q,EAAI6Q,EAAM,EAAGs/C,EAAIt/C,CAAK,EACtC,IAAK,aACD,MAAO,CAAE,EAAG7Q,EAAI6Q,EAAM,EAAGs/C,EAAIt/C,CAAK,EACtC,IAAK,cACD,MAAO,CAAE,EAAG7Q,EAAI6Q,EAAM,EAAGs/C,EAAIt/C,CAAK,CAC1C,CACJ,CAEA,IAAM49kB,GAA6B,IAAI,IACvC,SAAS1B,IAA2B,EAAsC,CACtE,GAAI0B,GAA2B,IAAIxrlB,EAAQ,EAAE,EACzC,OAAOwrlB,GAA2B,IAAIxrlB,EAAQ,EAAE,EAEpD,IAAMyrlB,EAAS,CACX,GAAIzrlB,EAAQ,YAAY,GACxB,GAAIA,EAAQ,YAAY,GACxB,EAAG,EACP,EAEM6plB,EAAoBhkD,GAAuB,CAAC,CAC7C,OACI,GACGp/gB,EAAU,KAAOzmB,EAAQ,IACzB0rlB,IAAiC,CAC7B,SACA,UAAWjlkB,EAAU,SACzB,CAAC,CACT,CAAC,CACA,IAAK,GAAYzmB,EAAQ,GAAG,EAGjC,OADAwrlB,GAA2B,IAAIxrlB,EAAQ,GAAI6plB,CAAiB,EACrDA,CACX,CAEA,SAAS6B,IAAiC,CACtC,SACA,aAIQ,CACR,IAAMC,EAAWC,GAAQH,EAAO,GAAI,CAChC,IAAKI,EAAU,QAAQ,EACvB,IAAKA,EAAU,YAAY,CAC/B,CAAC,EACKC,EAAWF,GAAQH,EAAO,GAAI,CAChC,IAAKI,EAAU,QAAQ,EACvB,IAAKA,EAAU,YAAY,CAC/B,CAAC,EAEK/6S,EAAK26S,EAAO,GAAKE,EACjB56S,EAAK06S,EAAO,GAAKK,EAEvB,OAAOh7S,EAAKA,EAAKC,EAAKA,GAAM06S,EAAO,EAAIA,EAAO,CAClD,CAMA,SAAS7B,IACL,EACA,EAAU,EACU,CACpB,GAAI94Z,EAAY,OAAS,EAAG,OAAOA,EAEnC,IAAMi7Z,EAAoCj7Z,EAAY,IAAK,GAAe,CACtE,GAAM,CAAE,UAAS,WAAYlR,EAAW,aAClCosa,EACFpsa,EAAW,YAAc,OAASA,EAAW,YAAc,SAC/D,MAAO,CACH,aACA,EAAGm0X,EACH,EAAGlI,EAGH,GAAKmgD,EAA0B,OAAVj4C,EACrB,GAAIi4C,EAAgBngD,EAAU,MAClC,CACJ,CAAC,EAiDD,OA5CAx8O,IAAgB08R,CAAe,CAAC,CAC3B,MACG,IACAE,IAAQ,GAAsBn+iB,EAAE,WAAW,aAAa,OAAO,CACnE,CAAC,CACA,MACG,IACAo+iB,IAAQ,GAAsBp+iB,EAAE,WAAW,aAAa,OAAO,CACnE,CAAC,CACA,MACG,UACAq+iB,IAAa,GAAsB,CAC/B,CACI,CAACr+iB,EAAE,WAAW,aAAa,MAAQ,EAAIowF,EACvC,CAACpwF,EAAE,WAAW,aAAa,OAAS,EAAIowF,CAC5C,EACA,CACIpwF,EAAE,WAAW,aAAa,MAAQ,EAAIowF,EACtCpwF,EAAE,WAAW,aAAa,OAAS,EAAIowF,CAC3C,CACJ,CAAC,CAAC,CAGG,SAAS,EAAG,CACrB,CAAC,CAGA,KAAK,CAAC,EAGgB4yD,EAAY,KAAK,EAAY,IAAU,CAC9D,IAAMz+G,EAAO05gB,EAAgBvulB,GACvB4ulB,EAAiBxsa,EAAW,aAG5B,CAAE,EAAGm0X,EAAU,EAAG,EAAGlI,EAAU,GAAMx5d,EACrCi3gB,EAAe8C,EAAe,IAAI,CACpC,EAAGr4C,EAAUq4C,EAAe,MAAQ,EACpC,EAAGvgD,EAAUugD,EAAe,OAAS,CACzC,CAAC,EAED,MAAO,CAAE,GAAGxsa,EAAY,cAAa,CACzC,CAEO,CACX,CAEA,SAASqqa,IAAoC,CACzC,aACA,oBACA,cAKQ,CACR,IAAMgB,EAAkBC,GACpBtra,EAAW,aACV,GAAaghJ,EAAW,OAAOj9O,CAAQ,CAC5C,EACA,OAAOkmgB,EAAkB,KAAM,GAC3BnB,GAAkBuC,EAAiBjrlB,CAAO,CAC9C,CACJ,CAEA,SAASgqlB,IAA2C,CAChD,aACA,qBAIQ,CAER,IAAMr1C,EAAc/0X,EAAW,OAKzBysa,EAAaC,IAAmB33C,EAJpBq2C,IAA6B,CAC3C,WAAYpra,EAAW,aACvB,UAAWA,EAAW,SAC1B,CACmD,CAAS,EAG5D,OAAO2sa,EAAkB,KAAM,GAAqB,CAChD,IAAMC,EAActB,GAAsBuB,EAAiB,YAAY,EACvE,OAAO/D,GAAkB2D,EAAYG,CAAW,CACpD,CAAC,CACL,CAEA,SAAStB,GACL,EACA,EACmC,CACnC,IAAI/lD,EAAU,CACV,CAAC9pX,EAAO,QAAQ,EAAGA,EAAO,QAAQ,CAAC,EACnC,CAACA,EAAO,SAAS,EAAGA,EAAO,SAAS,CAAC,EACrC,CAACA,EAAO,YAAY,EAAGA,EAAO,YAAY,CAAC,EAC3C,CAACA,EAAO,WAAW,EAAGA,EAAO,WAAW,CAAC,EACzC,CAACA,EAAO,QAAQ,EAAGA,EAAO,QAAQ,CAAC,CACvC,EAIA,OAHI9+D,IACA,EAAU4ob,EAAQ,IAAK,GAAa5ob,EAAU54B,CAAQ,CAAC,GAEpD,CACH,KAAM,UACN,WAAY,CAAC,EACb,SAAU,CACN,KAAM,UACN,YAAa,CAACwhd,CAAO,CACzB,CACJ,CACJ,CAEA,SAASmnD,IACL,EACA,EACA,EAAY,EACuB,CAEnC,IAAMx7S,EAAK57P,EAAI,GAAK/qC,EAAM,GACpB4mS,EAAK77P,EAAI,GAAK/qC,EAAM,GACpBuilB,EAAa,KAAK,KAAK57S,EAAKA,EAAKC,EAAKA,CAAE,EAGxC47S,EAAS,CAAC57S,EAAK27S,GAAexrD,EAAY,GAC1C0rD,EAAS97S,EAAK47S,GAAexrD,EAAY,GAW/C,MAAO,CACH,KAAM,UACN,WAAY,CAAC,EACb,SAAU,CACN,KAAM,UACN,YAAa,CAAC,CAZlB,CAAC/2hB,EAAM,GAAKwilB,EAAOxilB,EAAM,GAAKyilB,CAAK,EACnC,CAACzilB,EAAM,GAAKwilB,EAAOxilB,EAAM,GAAKyilB,CAAK,EACnC,CAAC13iB,EAAI,GAAKy3iB,EAAOz3iB,EAAI,GAAK03iB,CAAK,EAC/B,CAAC13iB,EAAI,GAAKy3iB,EAAOz3iB,EAAI,GAAK03iB,CAAK,EAC/B,CAACzilB,EAAM,GAAKwilB,EAAOxilB,EAAM,GAAKyilB,CAAK,CAQjB,CAAO,CACzB,CACJ,CACJ,CCprBA,SAAgBC,IAAiD,CAC7D7slB,UACAizB,OACAwyQ,cAAc08L,IAAA,CAMd,OACI/jR,SAAC,OAAD,CACIznN,GAAI+6J,EAAY1xJ,EAAQrJ,EAAE,EAC1Bm3C,EAAG4mf,GAAmB10hB,GAAWA,EAAQizB,KAAOA,EACnCwyQ,cACbD,OAAO,OACPxlR,KAAK,MACR,EAET,CAEA,SAAgB8skB,IAA+C,CAC3D9slB,UACAmyd,SACAl/b,OACA2pX,aAAa,GACbu2E,QACA45H,cAAc,EACdv5O,UACA+yL,iBACAH,kBAAA,CAYA,IAAM1mK,EAAYyzF,GAAO1xK,QAAU,GAE7Bjc,EACFk6F,GAAakd,EAAaslF,GAAqBD,IAC7Cx8L,EAAcunT,GAChBC,IAAe,CAAEvtN,YAAWkd,YAAW,GACvCmwM,GAEEn3C,EAAgBziF,GAAOC,WAAakP,IAAsB,EAE1D8xE,EAAcjhF,GAAOC,WAAaiP,GAAoB,EAE5D,OACIjkR,SAAC,OAAD,CACIznN,GAAI+6J,EAAY1xJ,EAAQrJ,EAAE,EAC1B,kBAAiBqJ,EAAQrJ,GACzBm3C,EAAG4mf,GAAmB10hB,GAAWA,EAAQizB,KAAOA,EACnCwyQ,cACLD,SACOowQ,gBACfvyU,OAAO,UACPrjN,KAAMmyc,EAAOlsQ,MACAmuV,cACb5gM,QAAUh2V,GAAUg2V,IAAUxzW,EAASwd,GACvC+ohB,eAAiBh5f,GAAMg5f,IAAiBvmiB,EAASutC,EAAEmhM,WAAW,EAC9D03T,eAAiB74f,GAAM64f,IAAiB74f,EAAEmhM,WAAW,CACxD,EAET,CAGA,SAAgBw+W,IAAoD,CAChEltlB,UACAmyd,SACAmoG,kBACArniB,OACAkgc,SAAA,CAQA,OACI/0Q,SAAC,OAAD,CACIznN,GAAI+6J,EAAY1xJ,EAAQrJ,GAAI,0BAC5Bm3C,EAAG4mf,GAAmB10hB,GAAWA,EAAQizB,KAAOA,EAChDuyQ,OAAO,OACPxlR,KAAM,QAAQmiiB,IAA2BhwF,EAAOlsQ,MAAOq0W,GAAiB,GACxElmB,YAAajhF,GAAOC,WAAaiP,GAAoB,EACrDqmE,cAAc,MACjB,EAET,CAEA,SAAgBykD,IAAiD,CAC7DntlB,UACAizB,OACAqhc,YACA13E,aAAa,GACbu2E,QACA45H,cAAc,EACdv5O,UACA+yL,iBACAH,kBAAA,CAYA,IAAM1mK,EAAYyzF,GAAO1xK,QAAU,GAE7Bjc,EAASk6F,GAAakd,EAAaslF,GAAqB,OACxDz8L,EAAcunT,GAChBC,IAAe,CAAEvtN,YAAWkd,YAAW,GACvCmwM,GAEEn3C,EAAgBziF,GAAOC,WAAakP,IAAsB,EAE1D8xE,EAAcjhF,GAAOC,WAAaiP,GAAoB,EAE5D,OACIjkR,SAAC,OAAD,CACIznN,GAAI+6J,EAAY1xJ,EAAQrJ,EAAE,EAC1B,kBAAiBqJ,EAAQrJ,GACzBm3C,EAAG4mf,GAAmB10hB,GAAWA,EAAQizB,KAAOA,EACnCwyQ,cACLD,SACOowQ,gBACfvyU,OAAO,UACPrjN,KAAM,QAAQs0c,EAAU,GACX8/E,cACb5gM,QAAUh2V,GAAUg2V,IAAUxzW,EAASwd,GACvC+ohB,eAAiBh5f,GAAMg5f,IAAiBvmiB,EAASutC,EAAEmhM,WAAW,EAC9D03T,eAAiB74f,GAAM64f,IAAiB74f,EAAEmhM,WAAW,CACxD,EAET,CAEA,SAAgB0+W,IAAoB,CAChC94H,YAAY50B,GAAS2tJ,oBACrBpnY,QAAQmpH,IACRzzJ,QAAQ,IAMR,IAAM64S,EAAej/T,GAAQomB,EAAO,GACpC,OACIkqH,UAAC,UAAD,CACIlvS,GAAI29d,EACJI,aAAa,iBACb35Y,MAAM,IACNvkB,OAAO,IACPm+Z,iBAAkB,yBAAyBH,EAAa,GAL5DphX,SAAA,EAOIgrG,SAAC,OAAD,CAAMrjI,MAAM,IAAIvkB,OAAO,IAAIx2C,KAAMimM,CAAQ,IACzC7H,SAAC,OAAD,CAAMtwK,EAAE,eAAe03P,OAAO,OAAOC,YAAa,EAAM,EACnD,C,EAEjB,CAEA,SAAgB6nT,IAAqB,CACjCrnY,QACAtqC,QAAQ,EACRwkR,YAAA,CAMA,IAAMotJ,EAAY76S,IAAwBzsF,IAAU,EACpD,OACI7H,SAACovY,IAAD,CACIl5H,UAAW6tF,IAA2Bl8V,EAAOk6O,GACtCxkR,QACP8xa,WAAYp7b,KAAKh1J,IAAI,EAAIkwlB,EAAW,GACvC,EAET,CAEA,SAAgBG,IAA2B,CACvC/xa,QAAQ,EACRwkR,YAAA,CAKA,OACI/hP,SAACovY,IAAD,CACIl5H,UAAWq5H,IAAiCxtJ,GACrCxkR,QACP8xa,WAAY,EACf,EAET,CAEA,SAASD,IAA2B,CAChCl5H,YACAm5H,aACA9xa,QAAQ,EACRiya,cAAc,EACdC,UAAUD,EAAc,IAQxB,IAAMp5H,EAAej/T,GAAQomB,EAAO,GAEpC,OACIyiC,SAAC,UAAD,CACIznN,GAAI29d,EACJI,aAAa,iBACb35Y,MAAO+7E,EAAY82b,GACnBp3hB,OAAQsgG,EAAY82b,GACpBj5H,iBAAkB,oBAAoBH,EAAa,GAEnDphX,UAAAgrG,SAAC,SAAD,CACI3hC,GAAI3lB,EAAY82b,EAAc,GAC9Blxa,GAAI5lB,EAAY82b,EAAc,GAC9B/giB,EAAGiqG,EAAY+2b,GACf7tkB,KAAK,QACLo0hB,YAAaq5C,CAChB,EACI,EAEjB,CAEA,SAAgBK,IAAwB,CACpClua,aACAmta,cAAc,EACdl3C,cAAc,KAMd,GAAM,CAAEl/iB,KAAIk8E,OAAMozI,QAAOqjY,eAAclua,YAAawE,EAE9Cmua,EAAWl4C,GAAejjQ,GAAY3sF,GACtCw/E,EAAcunT,GAAiB7qH,GAAsB4qH,GAE3D,OACI3uY,SAACi9O,GAAD,CAAU1kc,KAAI2kc,aAAc,EAAG5iP,KAAMq1Y,EACjC36e,UAAAgrG,SAAC,OAAD,CACIznN,GAAI+6J,EAAY/6J,GAChBoG,EAAG+5J,EAAYwyb,EAAa0E,QAAQjxlB,CAAC,EACrCmwD,EAAG4pG,EACCwyb,EAAa0E,QAAQ9giB,EAAIo8hB,EAAa9yhB,OAAS,GAEzC4kH,WACVD,WAAY,IACZn7J,KAAMimM,EACOw/E,cACbr3M,MAAO,CAAEs6c,cAAe,MAAO,EAE9Bt1b,SAAAvgC,CACC,EACJ,EAEd,CAEA,SAAgBo7gB,IAAwB,CACpCrua,aACAmta,cAAc,EACdxmD,iBACAH,kBAAA,CAOA,GAAM,CAAEzviB,KAAIk8E,OAAMqlP,YAAW4oG,SAAQwoL,eAAclua,YAAawE,EAE1D+0X,EAAc7zI,EACd+zI,EAAYm2C,IAA6B,CAC3CT,WAAYjB,EACZpxR,WACJ,GACMm9O,EAAkB9/Y,GAAS,GAAM6sU,GAAsB2qH,EAAa,GACpEmB,EAAkB34b,GAAQ4sU,GAAuB4qH,EAAa,GAEpE,OACIlnT,UAAC,IAAD,CAAGlvS,GAAI+6J,EAAY/6J,GAAnBy8G,SAAA,EACIgrG,SAAC,OAAD,CACIzjC,GAAI7jB,EAAY69Y,EAAY,EAAE,EAC9B55X,GAAIjkB,EAAY69Y,EAAY,EAAE,EAC9B75X,GAAIhkB,EAAY+9Y,EAAU,EAAE,EAC5B75X,GAAIlkB,EAAY+9Y,EAAU,EAAE,EAC5BrvQ,OAAQ5lH,EAAWqmC,MACnBw/E,YAAa4vQ,EACbjnd,MAAO,CAAEs6c,cAAe,MAAO,CAClC,IACDtqV,SAAC,OAAD,CACIrhN,EAAG+5J,EAAYwyb,EAAavslB,CAAC,EAC7BmwD,EAAG4pG,EAAYwyb,EAAap8hB,EAAIo8hB,EAAa9yhB,OAAS,GAC5C4kH,WACVqqH,YAAayoT,EACblukB,KAAM4/J,EAAWqmC,MACjB9qC,WAAY,IACZorX,eAAiBh5f,GACbg5f,IAAiB3mX,EAAW5/K,QAASutC,EAAEmhM,WAAW,EAEtD03T,eAAiB74f,GAAM64f,IAAiB74f,EAAEmhM,WAAW,EAEpDt7H,SAAAvgC,CACC,EACP,C,EAEX,CAEA,SAASm6gB,GAAiBvnT,EAAqBsnT,EAAA,CAC3C,OAAOx3b,GAAQkwI,EAAcsnT,EAAa,EAC9C,CAEA,SAASE,IAAe,CACpBrwM,aACAld,aAAA,CAOA,OAFIA,EAAkB0iG,GAClBxlF,EAAY,EACTulF,EACX,CAEA,SAAgBggF,IACZl8V,EACAk6O,EAAA,CAEA,OAAOF,GAAc,GAAGP,GAASyuJ,qBAAqB,GAAGloY,IAASk6O,EACtE,CAEA,SAAgBwtJ,IAAiCxtJ,EAAA,CAC7C,OAAOF,GAAcP,GAAS0uJ,8BAA+BjuJ,EACjE,C,80GC1TmClmP,cAAMpoG,UAANooG,I,KAA5B,cAA4BA,I,wCADlC5zH,C,IAqBI0qC,E,EAAqBpiC,S,GAIrBoiC,E,EAAas1W,W,IAIbt1W,IAASq1Z,M,KAAmB/qW,Q,GAI5BtqD,E,EAAqB02W,gB,GAIrB12W,E,EAAqBktE,U,IAIrBltE,IAASq1Z,M,KAAmBioE,gB,GAI5Bt9d,E,EAAqBu9d,c,GAKrBv9d,E,EAAqBw9d,W,GAMrBx9d,E,EAAqBy9d,e,GAUrBz9d,E,EAAqB09d,qB,GAIrB19d,E,EAAqB29d,mB,GAIrB39d,E,EAAqB4/B,iB,GAoCrB5/B,E,EAAqBygM,U,GAIrBzgM,E,EAAqB49d,kB,GAerB59d,E,EAAqB69d,c,GAIrB79d,E,EAAqB89d,oB,GAIrB99d,E,EACW+9d,oB,GAIX/9d,E,EAAqBg5d,wB,GAIrBh5d,E,EAAqBg+d,kB,GAMrBh+d,E,EAAqBi+d,wB,GAWrBj+d,E,EACWk+d,kC,GAMXl+d,E,EACWm+d,iC,GAMXn+d,E,EAAqBo+d,oB,GAIrBp+d,E,EAAqBq+d,W,GAIrBr+d,E,EAAqBg9L,U,GAOrBh9L,E,EAAqB6vM,Y,GAIrB7vM,E,EAAqBs+d,uB,GAWrBt+d,E,EAAqBu+d,6B,GAWrBv+d,E,EACWw+d,sB,GAiCXx+d,E,EACWy+d,qB,GAMXz+d,E,EACW0+d,qB,IAgBXx6e,IAAOo6D,K,KAAcskX,qB,IAyBrB1+a,IAAOo6D,K,KAAcqgb,e,IAIrBz6e,IAAOo6D,K,KAAck3X,gB,IAUrBtxb,IAAOo6D,K,KAAc+2X,gB,IAOrBnxb,IAAOo6D,K,KAAcsgb,sB,IASrB16e,IAAOo6D,K,KAAcugb,wB,IAKrB36e,IAAOo6D,K,KAAcmkM,S,IA2BrBv+P,IAAOo6D,K,KAAcwgb,gB,IAWrB56e,IAAOo6D,K,KAAcygb,uB,CArXS71Y,gB,CAQ/B,YAAY/3M,EAA0C,CAClD,MAAMA,GAENyxL,EAGE,KAAM,CACJo8Z,kBAAmBvua,EACnBwua,mBAAoBxua,CACxB,EACJ,CAfA3hK,gBAAOo6L,EAAMk8Q,UAAA,GAEb45H,kBAA0Dtuc,OAC1Duuc,mBAA2Dvuc,OAc3D,IAAsB9yD,SAAgC,CAClD,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAc03Y,WAAuB,CACjC,OAAO,KAAK13Y,QAAQ03Y,SACxB,CAEA,IAA6BhrT,QAAiB,CAC1C,OAAO,KAAK1sF,QAAQshgB,mBACxB,CAEA,IAAsBxoH,gBAAoC,CACtD,OAAO,KAAK94Y,QAAQ84Y,gBAAkB,IAAIrG,EAC9C,CAEA,IAAsBnjS,UAAwB,CAC1C,OAAO,KAAKtvG,QAAQuhgB,aAAelsH,GAAc,KAAKqC,UAAUprV,OACpE,CAEA,IAA6Bozc,gBAAyC,CAClE,OAAO,KAAK1/f,QAAQ0/f,cACxB,CAEA,IAAsBC,cAA6C,CAC/D,OAAO,KAAKyB,mBAAqB,KAAKC,kBAC1C,CAGA,IAAsBzB,WAAoB,CACtC,IAAMroD,EAAY,KAAK10O,SAAS7iT,IAAK3O,GAAYA,EAAQ0liB,UAAU,EACnE,OAAOjrX,EAAOtzJ,MAAM++gB,EACxB,CAGA,IAAsBsoD,eAAwB,CAC1C,GAAM,CAAEnza,SAAQ4iB,WAAUswZ,aAAc,KAClC4B,EAAgBlyZ,EAASljH,MAAQwzgB,EAAUxzgB,MAC3Cq1gB,EAAiBnyZ,EAASznI,OAAS+3hB,EAAU/3hB,OACnD,OAAO67F,KAAK/0J,IACR+9K,EAAOtgG,MAAQo1gB,EACf90a,EAAO7kH,OAAS45hB,EAExB,CAEA,IAAsB3B,qBAA8B,CAChD,OAAQ,KAAK9/f,QAAQ0hgB,cAAgB,GAAK,KAAK7B,aACnD,CAEA,IAAsBE,mBAA4B,CAC9C,OAAOr8b,KAAK2H,KAAK,KAAKw0b,aAAa,CACvC,CAEA,IAAsB79b,iBAA0B,CAC5C,GAAM,CAAE0qB,SAAQkza,YAAWtwZ,WAAUuwZ,iBAAkB,KAIjD8B,EAAO/B,EAAUxxlB,EAAI,EACrBwzlB,EAAOhC,EAAUrhiB,EAAI,EAGrBw0J,EAAW6sY,EAAUxzgB,MAAQyzgB,EAC7B5sY,EAAY2sY,EAAU/3hB,OAASg4hB,EAC/BgC,EAAgBn1a,EAAO7kD,KAAO6kD,EAAOtgG,MAAQ,EAC7C01gB,EAAgBp1a,EAAOrqB,IAAMqqB,EAAO7kH,OAAS,EAC7Ck6hB,EACFJ,GAAQ9B,EAAgB,GAAKD,EAAUxxlB,EAAIkhM,EAASlhM,EAAI2kN,EACtDivY,EACFJ,GAAQ/B,EAAgB,GAAKD,EAAUrhiB,EAAI+wI,EAAS/wI,EAAI00J,EAiB5D,MAAOgvY,UALyBC,CAP5BrC,EACA,EACA,EACAA,EAPegC,EAAgBE,EAChBD,EAAgBE,CAUHE,EAAiBlilB,IAAKuV,GAClDupB,GAAQvpB,EAAG,EAGa4skB,EAAwBz0lB,KAAK,KAAK,EAElE,CAEA,IAAsBm1T,UAA+B,CACjD,OAAOi0O,IAAqB,KAAKp/D,UAAUprV,MAAM,CACrD,CAEA,IAAsB0zc,kBAAuC,CACzD,GAAM,CAAEn9R,WAAU60K,aAAc,KAEhC,GAAIA,EAAUprV,SAAW3B,GAAc8pV,MAAO,OAAO5xK,EAErD,IAAMu/R,EAAwBx8D,GAC1BpxD,GAAkBkD,EAAUprV,OAChC,EAGA,OAFI81c,IAA0Btvc,OAAkB,GAEzC+vK,EAASrrQ,OAAQnmD,GACpB+wlB,EAAsB11lB,IAAI2E,EAAQrJ,EAAE,EAE5C,CAEA,IAAsBi4lB,cAA8C,CAChE,OAAO,IAAIpglB,IAAI,KAAKgjT,SAAS7iT,IAAK3O,GAAY,CAACA,EAAQrJ,GAAIqJ,CAAQ,GACvE,CAEA,IAAsB6ulB,oBAAyC,CAC3D,OAAOz6D,IAAsB,KAAKu6D,iBAAkB,KAAKlnH,cAAc,CAC3E,CAEA,IACYqnH,oBAAyC,CACjD,OAAOrhjB,GAAa,KAAK+jR,SAAU,KAAKq9R,kBAAkB,CAC9D,CAEA,IAAsB9E,wBAA0C,CAC5D,OAAO,IAAIv6kB,IAAI,KAAKs/kB,mBAAmBnglB,IAAK3O,GAAYA,EAAQrJ,EAAE,EACtE,CAEA,IAAsBo4lB,kBAAuC,CACzD,OAAO,KAAKF,mBAAmB1oiB,OAAQnmD,GACnC,KAAKqulB,eAAehzlB,IAAI2E,EAAQrJ,EAAE,EAE1C,CAEA,IAAsBq4lB,wBAA6C,CAG/D,OAAOn7D,IAAsC,KAAKk7D,iBAAkB,CAChErvN,UAAYukN,GACR,KAAKt1f,QAAQqigB,gBAAgB/M,IAAYxiS,QAAU,GACvDm7F,WAAaqnM,GACT,KAAKt1f,QAAQiuT,aAAaqnM,IAAc,EAChD,EACJ,CAEA,IACYgL,kCAAuD,CAC/D,OAAO,KAAKD,uBAAuB7oiB,OAC9BnmD,GAAY,CAAC,KAAKqulB,eAAejzlB,IAAI4E,EAAQrJ,EAAE,GAAGg8U,aAE3D,CAEA,IACYu8Q,iCAAsD,CAC9D,OAAO,KAAKF,uBAAuB7oiB,OAC9BnmD,GAAY,KAAKqulB,eAAejzlB,IAAI4E,EAAQrJ,EAAE,GAAGg8U,aAE1D,CAEA,IAAsBw8Q,oBAAyC,CAC3D,OAAO1hjB,GAAa,KAAKohjB,mBAAoB,KAAKE,gBAAgB,CACtE,CAEA,IAAsBK,WAAsB,CACxC,OAAO,KAAKzggB,QAAQyggB,WAAa,EACrC,CAEA,IAAsBrhS,UAAuC,CACzD,OAAOA,KACFhxT,EAAGiD,GAAYA,EAAQ0liB,WAAWqO,OAAO,EACzC7mf,EAAGltD,GAAYA,EAAQ0liB,WAAWmG,OAAO,EACzCr/O,OAAO,KAAKqiS,kBAAkB,CACvC,CAEA,IAAsBjuR,YAAkB,CACpC,OAAO0jO,GAAgB,KAAKj+D,UAAUprV,OAC1C,CAEA,IAAsBo0c,uBAAiC,CACnD,MAAO,EACH,MAAK1ggB,QAAQsuc,UAAUxzF,qBACtB,KAAK48B,UAAUk4D,uBAExB,CAEA0yD,sBAA8Bj7lB,EAAgC,CAC1D,OAAO,KAAK24F,QAAQsuc,UAAU9wF,kCAAkCn2c,EACpE,CAEA,IAAsBs5lB,6BAAkD,CAGpE,OAFK,KAAKD,sBAEHn6b,GACH,KAAKmxU,UAAUt6Y,UAAU01Y,iCAAiC9yd,IACrDnX,GAAS,KAAKo3lB,aAAaxzlB,IAAI5D,KAEtC2uD,OAAQnmD,GAAY,KAAK6ulB,mBAAmBh+d,SAAS7wH,IANf,EAO5C,CAGA,IACYuvlB,sBAAqC,CAC7C,OAAOr6b,GACH,KAAKo6b,4BAA4B3glB,IAAK3O,IAClC,IAAMmyd,EAAS,KAAKk8H,eAAejzlB,IAAI4E,EAAQrJ,EAAE,EACjD,GAAI,CAACw7d,EAAQ,OAEb,IAAMo/D,EAAa3+O,GAAYu/K,EAAOlsQ,KAAK,EACrCi9Q,IACAD,IAEA3nd,EAAO,CACTtb,UACA4gU,WAAY,KAAKA,WACjBgpN,eAAgB,KAAKqnE,sBAAsB9+H,EAAOn8d,KAAK,EACvDozlB,cAAe,KAAKoF,cACpBvoY,MAAOsrU,CACX,EAGM2/D,EACFpI,IAAiCxtkB,GACrC,GAAI41kB,EAAoB,OAAOA,EAG/B,IAAMC,EACFjI,IAAiC5tkB,GACrC,GAAI61kB,EAAoB,OAAOA,CAGnC,GAER,CAEA,IACY3B,qBAA4C,CACpD,OAAO,KAAKD,qBAAqBppiB,OAC5By5H,GAAeA,EAAWhiK,OAAS,WAE5C,CAEA,IACY6xkB,qBAA4C,CACpD,GAAM,CAAE7uR,aAAYmpR,0BAA2B,KAI/C,OAAON,IAAuC,CAC1C34Z,YAJgB,KAAKy+Z,qBAAqBppiB,OACzCy5H,GAAeA,EAAWhiK,OAAS,UAGpCkzK,EACA8vI,aACAmpR,wBACJ,EACJ,CAMsBp2D,oBAClBn2gB,EAC4B,CAC5B,GAAI,KAAKuykB,mBAAqB,CAAC,KAAKlwkB,KAAK5lB,QAAS,OAElD,IAAMm3lB,EAAgBz9D,IAAoB,CACtC5lO,SAAU,KAAKA,SACf70S,QAAS,KAAK2G,KAAK5lB,QACnBujB,OACJ,GAEA,GAAI,CAAC4zkB,EACD,KAAKpB,mBAAqBvuc,OAC1B,KAAK9yD,QAAQ0igB,kBAAA,OASjB,OALID,EAAcz6lB,KAAO,KAAKq5lB,oBAAoBr5lB,KAC9C,KAAKq5lB,mBAAqBoB,EAC1B,KAAKzigB,QAAQ2igB,iBAAiBF,EAAcxrD,GAAG,GAG5CwrD,CACX,CAEsB1B,cAAclykB,EAA2B,CAC3D,KAAKm2gB,oBAAoBn2gB,EAC7B,CAEsB+ohB,eAClBvmiB,EACAwd,EACI,CAGAA,EAAM+pE,cAAgB,SAC1B,KAAKoogB,qBAAqB3vlB,EAC9B,CAEsBomiB,eAAe5ohB,EAA2B,CAExDA,EAAM+pE,cAAgB,SAE1B,KAAKqogB,uBAAA,CACT,CAEsBD,qBAClB3vlB,EACI,CACA,KAAK+vlB,mBAAmBp5lB,KAAOqJ,EAAQrJ,KAE3C,KAAKo5lB,kBAAoB/vlB,EACzB,KAAK2uF,QAAQ2igB,iBAAiBtxlB,EAAQ4liB,GAAG,EAC7C,CAEsBgqD,wBAA+B,CACjD,KAAKG,kBAAoBtuc,OACzB,KAAK9yD,QAAQ0igB,kBAAA,CACjB,CAEsB79O,QAAQxzW,EAAiC,CAC3D,GAAM,CACF+ngB,wBACA1hC,UAAW,CAAEt6Y,aACbu6a,mBACA,KAAK33a,QAET,KAAKghgB,qBAAqB3vlB,GAE1B,IAAMmxe,EAAsB,KAAK9K,UAAU8K,oBAAA,EAEvC42B,EAEAh8a,EAAU46W,gBAAgB3mc,EAAQrJ,EAAE,EAGpC,CAACw6e,GAED,CAAC,KAAKxiZ,QAAQg0a,WAEdtxW,QAAQyzC,gBAAgBnpB,QAAU,GAGlC2qV,GAAiBmC,gBAAgBzogB,EAAQrJ,EAAE,CAEnD,CAEsBk5lB,eAClB7vlB,EACAwd,EACI,CAGJA,EAAM0nY,gBAAA,EAEN,KAAK1xC,QAAQxzW,EACjB,CAEsB8vlB,uBAA8B,CAChD,KAAKnhgB,QAAQ23a,iBAAiBirF,uBAC1B,KAAKxB,mBAAqB,KAAKC,sBAC/B,KAAKD,kBAAoBtuc,OACzB,KAAKuuc,mBAAqBvuc,OAC1B,KAAK9yD,QAAQ0igB,kBAAA,EAErB,CAEAG,2BAAoE,CAChE,GAAI,KAAKhC,oBAAoB/xlB,SAAW,EAExC,OACI2gN,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,wBACdt+C,SAAA,KAAKo8e,oBAAoB7glB,IAAKixK,IAC3Bw+B,SAAC0vY,IAAD,CAEgBlua,aACZmta,YAAa,KAAK2B,kBAClB74C,YACI,KAAKw4C,eAAejzlB,IAAIwkL,EAAWjpL,EAAE,GAAGg8U,YAE/C,EANQ/yJ,EAAWjpL,EAMnB,EAEN,EAEX,CAEA86lB,2BAAoE,CAChE,GAAI,KAAKhC,oBAAoBhylB,SAAW,EAExC,OACI2gN,SAAC,IAAD,CACIznN,GAAI+6J,EAAY,wBAChBzyI,UAAU,sBAETm0F,SAAA,KAAKq8e,oBAAoB9glB,IAAKixK,IAC3Bw+B,SAAC6vY,IAAD,CAEgBrua,aACZmta,YAAa,KAAK2B,kBAClBnoD,eAAgBtxb,EAAQj1G,GACpB,KAAK2vlB,qBACD3vlB,IAGRomiB,eAAgBnxb,MACZ,KAAK26e,uBAAA,EAEZ,EAXQhwa,EAAWjpL,EAWnB,EAEN,EAEX,CAEA+6lB,4BAA6D,CACzD,GAAI,KAAK5C,mBAAmBrxlB,SAAW,EAEvC,OACI2gN,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,wBACdt+C,SAAA,KAAK07e,mBAAmBnglB,IAAK3O,IAC1Bo+M,SAACyuY,IAAD,CAA6C7slB,SAAU,EAA/BA,EAAQrJ,EAAuB,EAE5D,EAEX,CAEAg7lB,2BAA4D,CACxD,GAAM,CACFxC,qBACAxggB,QAAS,CAAEwuc,+BACX,KAEJ,GAAIgyD,EAAmB1xlB,SAAW,EAAG,OAErC,GAAM,CAAE68jB,mBAAoB,KAAK3re,QAC3Bktf,EAAkB57I,GACpBP,GAASkyJ,oBACTt3B,GAEEu3B,EAAwB5xJ,GAC1BP,GAASoyJ,0BACTx3B,GAGJ,OACIz0R,UAAC,IAAD,CACIlvS,GAAI+6J,EAAY,0BAChBzyI,UAAU,iBAFdm0F,SAAA,EAIIyyL,UAAC,OAAD,CAAAzyL,SAAA,EACIgrG,SAACi2Q,IAAD,CACIC,UAAWunH,EACXlga,MAAO,KAAK8ya,mBACf,GACA,CAAC,CAACtxD,GAA4B5shB,OAC3B6tM,SAACgvY,IAAD,CACI94H,UAAWu9H,EACX5rY,MAAO,KAAKt3H,QAAQ2hP,kBACpB30J,MAAO,KAAK8ya,mBACf,EAEH,IAELU,EAAmBxglB,IAAK3O,IACrBo+M,SAAC+uY,IAAD,CAEantlB,UACTs0d,UACI6oE,GAA4B9hiB,IAAI2E,EAAQrJ,EAAE,EACpCk7lB,EACAhW,EAEVj/L,WAAY,KAAKjuT,QAAQiuT,aAAa58Y,EAAQrJ,EAAE,EAChDw8d,MAAO,KAAKxkY,QAAQqigB,gBAAgBhxlB,EAAQrJ,EAAE,EAC9Co2lB,YAAa,KAAK2B,kBAClBl7O,QAAS,KAAKq8O,eACdtpD,eAAgB,KAAKA,eACrBH,eAAgB,KAAKA,cACxB,EAbQpmiB,EAAQrJ,EAahB,EAEN,C,EAEX,CAEAo7lB,6BAA8D,CAC1D,GAAK,KAAKpjgB,QAAQkrb,iBAElB,OACIh0O,UAAC,OAAD,CAAAzyL,SAAA,EACIgrG,SAACsvY,IAAD,CACIvtJ,SAAU,KAAKxxW,QAAQ2re,gBACvB3+Y,MAAO,KAAKhtF,QAAQ0hgB,YACvB,GAEA,KAAKjB,UAAUzglB,KAAKs3M,EAAOzoN,KACxB4gN,SAACkvY,IAAD,CACIntJ,SAAU,KAAKxxW,QAAQ2re,gBAEhBr0W,QACPtqC,MAAO,KAAK8ya,mBACf,EAHQ,GAAGxoY,EAAM,GAAGzoN,GAGpB,EAEH,GAEd,CAEAw0lB,sBACIhylB,EACAmyd,EACkB,CAClB,OACI/zQ,SAAC0uY,IAAD,CAEa9slB,UACDmyd,SACRv1E,WAAY,KAAKjuT,QAAQiuT,aAAa58Y,EAAQrJ,EAAE,EAChDw8d,MAAO,KAAKxkY,QAAQqigB,gBAAgBhxlB,EAAQrJ,EAAE,EAC9Co2lB,YAAa,KAAK2B,kBAClBl7O,QAAS,KAAKq8O,eACdtpD,eAAgB,KAAKA,eACrBH,eAAgB,KAAKA,cACxB,EATQpmiB,EAAQrJ,EAShB,CAET,CAEAs7lB,wBAAyD,CACrD,GAAI,KAAKhD,iCAAiCxxlB,SAAW,EAErD,OACI2gN,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,uBACdt+C,SAAA,KAAK67e,iCAAiCtglB,IAAK3O,IACxC,IAAMmyd,EAAS,KAAKk8H,eAAejzlB,IAAI4E,EAAQrJ,EAAE,EAEjD,OADKw7d,EACE,KAAK6/H,sBAAsBhylB,EAASmyd,GADvB,IAExB,EACD,EAEX,CAEA+/H,iCAAkE,CAC9D,GAAI,KAAKhD,gCAAgCzxlB,SAAW,EAEpD,OACIooS,UAAC,IAAD,CAAGlvS,GAAI+6J,EAAY,iCAAnBt+C,SAAA,CACK,KAAK87e,gCAAgCvglB,IAAK3O,IACvC,IAAMmyd,EAAS,KAAKk8H,eAAejzlB,IAAI4E,EAAQrJ,EAAE,EAEjD,OADKw7d,EACE,KAAK6/H,sBAAsBhylB,EAASmyd,GADvB,IAExB,IACA/zQ,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,2BACdt+C,SAAA,KAAK87e,gCAAgCvglB,IAAK3O,IACvC,IAAMmyd,EAAS,KAAKk8H,eAAejzlB,IAAI4E,EAAQrJ,EAAE,EAEjD,OADKw7d,GAED/zQ,SAAC8uY,IAAD,CAEaltlB,UACDmyd,SACRmoG,gBAAiB,KAAK3re,QAAQ2re,gBAC9BnnG,MAAO,KAAKxkY,QAAQqigB,gBAAgBhxlB,EAAQrJ,EAAE,CACjD,EALQqJ,EAAQrJ,EAKhB,EARe,IAUxB,EACD,EACJ,C,EAEX,CAEAy/iB,cAAmC,CAC/B,OACIvwQ,UAAC,IAAD,CAAGlvS,GAAI+6J,EAAY,OAAQn1C,UAAW,KAAKo0C,gBAA3Cv9C,SAAA,CACK,KAAK2+e,4BAAA,EACL,KAAKL,2BAAA,EACL,KAAKC,0BAAA,EACL,KAAKM,uBAAA,EACL,KAAKC,gCAAA,EACL,KAAKV,0BAAA,EACL,KAAKC,0BAAA,CACP,C,EAEX,CAEAr7H,mBAAmC,CAC/B99d,SAASk3W,iBAAiB,cAAe,KAAKsgP,sBAAuB,CACjE9rZ,QAAS,EACb,EACJ,CAEAqyR,sBAAsC,CAClC/9d,SAAS63W,oBAAoB,cAAe,KAAK2/O,qBAAqB,CAC1E,CAEAz5C,mBAAwC,CACpC,GAAM,CAAEh7X,SAAQ1qB,mBAAoB,KAOpC,OAJyB,KAAKo9J,UAK1BloB,UAAC,IAAD,CACIp1Q,IAAK,KAAK5Q,KACVZ,UAAWwjd,IACX+qB,YACKhhb,GACGA,EAAGknS,eAAA,EAEXg8O,cAAgBljhB,GAAa,KAAKkjhB,cAAcljhB,EAAGkiK,WAAW,EAC9D03T,eAAiB74f,GAAM,KAAK64f,eAAe74f,EAAEmhM,WAAW,EACxD8kI,YAAA,CAEQ,KAAKw8O,oBACL,KAAKx8O,QAAQ,KAAKw8O,kBAAkB,CAC5C,EACA5hgB,MAAO,CACHi1I,OAAQ,KAAKirX,aAAe,UAAY7sc,OAExC0wc,YAAa,cACjB,EAlBJ/+e,SAAA,EAoBIgrG,SAAC,OAAD,CACIrhN,EAAG+5J,EAAYukB,EAAOt+K,CAAC,EACvBmwD,EAAG4pG,EAAYukB,EAAOnuH,CAAC,EACvB6tB,MAAO+7E,EAAYukB,EAAOtgG,KAAK,EAC/BvkB,OAAQsgG,EAAYukB,EAAO7kH,MAAM,EACjCx2C,KAAK,sBACL6hJ,QAAS,CACZ,IACDgkI,UAAC,IAAD,CACI5mR,UAAWyjd,GACXnmX,UAAWo0C,EAFfv9C,SAAA,CAIK,KAAK2+e,4BAAA,EACL,KAAKL,2BAAA,EACL,KAAKC,0BAAA,EACL,KAAKM,uBAAA,EACL,KAAKC,gCAAA,EACL,KAAKV,0BAAA,EACL,KAAKC,0BAAA,CACP,CACJ,G,EAEX,CAEAh+Y,QAAsC,CAClC,OAAO,KAAK9kH,QAAQ86a,SACd,KAAK2sC,aAAA,EACL,KAAKC,kBAAA,CACf,C,aACJ,GCttBA,IAAMrlP,IAAO,KAAK,KACdC,IAAO,KAAK,KACZL,IAAQ,KAAK,MACbrqB,GAAM,KAAK,IACXsqB,IAAQ,KAAK,MACbxzT,GAAM,KAAK,IACXC,GAAM,KAAK,IACXgpS,IAAK,KAAK,GACVltI,GAAM,KAAK,IACXs3J,GAAUpqB,IAAK,IACfwI,GAAU,IAAMxI,IAEd8rT,GAAN,MAAMA,CAAO,CACX,OAAO,cAAc,CAACr1lB,EAAGmwD,EAAGwrE,GAAI,CAC9B,MAAO,CAAC,EAAGA,EAAG,CAACxrE,EAAGnwD,CAAC,CACrB,CACA,OAAO,WAAW,CAAC6wC,EAAGxxB,EAAG2wC,GAAI,CAC3B,GAAK2jQ,GAAU,EACf,GAAKA,GAAU,EACf,GAAK3jQ,GAAG,GAAK2jQ,GAAU,EACvB,IAAM2hS,EAAKj5b,GAAIxrH,CAAC,EAAG4yF,EAAK+lK,GAAI34P,CAAC,EACvB0kjB,EAAKl5b,GAAIh9I,CAAC,EAAGm2kB,EAAKhsT,GAAInqR,CAAC,EACvBo2kB,EAAKp5b,GAAIrsG,CAAC,EAAG0liB,EAAKlsT,GAAIx5O,CAAC,EAC7B,MAAO,CACLyzE,EAAK+xd,EAAKE,EAAKJ,EAAKC,EAAKE,EACzBH,EAAKE,EAAKE,EAAKjyd,EAAK8xd,EAAKE,EACzBhyd,EAAK8xd,EAAKG,EAAKJ,EAAKE,EAAKC,EACzBhyd,EAAK+xd,EAAKC,EAAKH,EAAKC,EAAKG,CAC3B,CACF,CACA,OAAO,SAAS,CAACv2kB,EAAGC,EAAG+H,EAAG4pB,GAAI,CAC5B,MAAO,CACL8iR,IAAM,GAAK10S,EAAIC,EAAI+H,EAAI4pB,GAAI,EAAI,GAAK3xB,EAAIA,EAAI+H,EAAIA,EAAE,EAAI4qR,GACtDmiB,IAAK5zT,GAAI,GAAIC,GAAI,EAAG,GAAK4e,EAAIgI,EAAI4pB,EAAI3xB,EAAE,CAAC,CAAC,EAAI2yR,GAC7C8hB,IAAM,GAAK10S,EAAI4xB,EAAI3xB,EAAI+H,GAAI,EAAI,GAAKA,EAAIA,EAAI4pB,EAAIA,EAAE,EAAIghQ,EACxD,CACF,CACA,OAAO,kBAAkB,EAAG,EAAG,CAC7B,IAAMpwS,EAAI0zlB,EAAO,YAAYA,EAAO,WAAWl2kB,CAAC,EAAGk2kB,EAAO,WAAWj2kB,CAAC,CAAC,EACvE,MAAO,IAAKi2kB,EAAO,SAAS1zlB,EAAE,CAAC,CAAC,CAClC,CACA,OAAO,kBAAkB,CAACqqT,EAAIzX,EAAI6qB,EAAIjrB,GAAK,CAAC1gN,EAAIkigB,EAAIxhgB,EAAI8/M,GAAK,CAC3D,GAAM+X,EAAI,GAAMzX,EAAI,GAAM6qB,EAAI,GAAMjrB,EACpC,IAAMn0S,EAAI,KAAW,EACrB,MAAO,IAAK,CACV,IAAM6wC,EAAIijR,IAAM,EAAE,GAAK9H,EAAKv4N,EAAK5jC,EAAG,EAAE,GAAK0kP,EAAKohT,EAAK9liB,EAAG,EAAE,GAAKuvQ,EAAKjrO,EAAKtkC,EAAG,EAAE,GAAKskP,EAAKF,EAAKpkP,CAAC,EAE9F,MADA,GAAE,IAAMhf,EAAG,EAAE,IAAMA,EAAG,EAAE,IAAMA,EAAG,EAAE,IAAMA,EAClC7wC,CACT,CACF,CACA,OAAO,YAAY,CAACgsT,EAAIzX,EAAI6qB,EAAIjrB,GAAK,CAAC1gN,EAAIkigB,EAAIxhgB,EAAI8/M,GAAK,CACrD,IAAIzZ,EAAM66T,EAAO,IAAI,CAACrpS,EAAIzX,EAAI6qB,EAAIjrB,CAAE,EAAG,CAAC1gN,EAAIkigB,EAAIxhgB,EAAI8/M,CAAE,CAAC,EAEvD,GADIzZ,EAAM,IAAG,EAAK,CAAC/mM,EAAI,EAAK,CAACkigB,EAAI,EAAK,CAACxhgB,EAAI,EAAK,CAAC8/M,EAAI,EAAM,CAACzZ,GACxDA,EAAM,MAAQ,OAAO66T,EAAO,kBAAkB,CAACrpS,EAAIzX,EAAI6qB,EAAIjrB,CAAE,EAAG,CAAC1gN,EAAIkigB,EAAIxhgB,EAAI8/M,CAAE,CAAC,EACpF,IAAM2hT,EAAS3hS,IAAK3zT,GAAI,GAAIC,GAAI,EAAGi6R,CAAG,CAAC,CAAC,EAClCx6R,EAAI,KAAW,EACf6wC,EAAIijR,IAAM,GAAM9H,EAAKxxB,EAAK,GAAM+Z,EAAK/Z,EAAK,GAAM4kC,EAAK5kC,EAAK,GAAM2Z,EAAK3Z,CAAG,EAE9E,MADA,IAAM3pP,EAAG,GAAMA,EAAG,GAAMA,EAAG,GAAMA,EAC1B,GAAK,CACV,IAAMm3P,EAAQ4tT,EAAS/liB,EACjBjf,EAAIyrH,GAAI2rI,CAAK,EACb7gR,EAAIqiR,GAAIxB,CAAK,EAKnB,MAJA,GAAE,GAAKgkB,EAAK7kS,EAAIssE,EAAK7iD,EACrB,EAAE,GAAK2jQ,EAAKptR,EAAIwukB,EAAK/kjB,EACrB,EAAE,GAAKwuR,EAAKj4S,EAAIgtE,EAAKvjD,EACrB,EAAE,GAAKujQ,EAAKhtR,EAAI8sR,EAAKrjQ,EACd5wC,CACT,CACF,CACA,OAAO,IAAI,CAACgsT,EAAIzX,EAAI6qB,EAAIjrB,GAAK,CAAC1gN,EAAIkigB,EAAIxhgB,EAAI8/M,GAAK,CAC7C,OAAO+X,EAAKv4N,EAAK8gN,EAAKohT,EAAKv2R,EAAKjrO,EAAKggN,EAAKF,CAC5C,CACA,OAAO,SAAS,CAAC+X,EAAIzX,EAAI6qB,EAAIjrB,GAAK,CAAC1gN,EAAIkigB,EAAIxhgB,EAAI8/M,GAAK,CAClD,MAAO,CACL+X,EAAKv4N,EAAK8gN,EAAKohT,EAAKv2R,EAAKjrO,EAAKggN,EAAKF,EACnC+X,EAAK2pS,EAAKphT,EAAK9gN,EAAK2rO,EAAKnrB,EAAKE,EAAKhgN,EACnC63N,EAAK73N,EAAKogN,EAAKN,EAAKmrB,EAAK3rO,EAAK0gN,EAAKwhT,EACnC3pS,EAAK/X,EAAKM,EAAKpgN,EAAKirO,EAAKu2R,EAAKxhT,EAAK1gN,CACrC,CACF,CACF,EAOMoigB,GAASR,GAAO,WAGtB,GAAO,SAAWA,GAAO,SAGzB,GAAO,SAAWA,GAAO,SAGzB,GAAO,YAAcA,GAAO,kBAG5B,GAAO,UAAY,SAAS,EAAG,CAC7B,IAAMxkjB,EAAI,EAAE,GAAK8iR,GAASt0S,EAAI,EAAE,GAAKs0S,GAAS6hS,EAAKhsT,GAAInqR,CAAC,EACxD,MAAO,CAACm2kB,EAAKhsT,GAAI34P,CAAC,EAAG2kjB,EAAKn5b,GAAIxrH,CAAC,EAAGwrH,GAAIh9I,CAAC,CAAC,CAC1C,EAKA,GAAO,MAAQ,SAAS,EAAI,EAAI,EAAO,CACjC,UAAU,QAAU,IAAG,EAAQ,GAEnC,IAAM49I,EAAO,KAAK,KAClB,SAAS64b,EAAM,EAAI,EAAI,CACrB,MAAQ,CAACp3R,EAAG,GAAKwmR,EAAG,GAAKxmR,EAAG,GAAKwmR,EAAG,GAAIxmR,EAAG,GAAKwmR,EAAG,GAAKxmR,EAAG,GAAKwmR,EAAG,GAAIxmR,EAAG,GAAKwmR,EAAG,GAAKxmR,EAAG,GAAKwmR,EAAG,EAAE,CACtG,CACA,SAAS1qT,EAAI,EAAI,EAAI,CACnB,OAAOkkC,EAAG,GAAKwmR,EAAG,GAAKxmR,EAAG,GAAKwmR,EAAG,GAAKxmR,EAAG,GAAKwmR,EAAG,EACpD,CAEA,IAAMz0hB,EAAIqliB,EAAMp3R,EAAIwmR,CAAE,EAAGr0iB,EAAIosH,EAAKu9H,EAAI/pO,EAAGA,CAAC,CAAC,EAC3C,GAAI,CAAC5f,EAAG,MAAO,CAAC,EAAG,EAAG,EAAG,CAAC,EAC1B,IAAMgf,EAAI2iQ,EAAQyB,IAAK3zT,GAAI,GAAIC,GAAI,EAAGi6R,EAAIkkC,EAAIwmR,CAAE,CAAC,CAAC,CAAC,EAAI,EAAGt0iB,EAAIyrH,GAAIxsG,CAAC,EACnE,MAAO,CAAC25O,GAAI35O,CAAC,EAAGY,EAAE,GAAK5f,EAAID,EAAG,CAAC6f,EAAE,GAAK5f,EAAID,EAAG6f,EAAE,GAAK5f,EAAID,CAAC,CAC3D,E,s1GCnFMmljB,GAAkB,IAAItklB,IACxBq3hB,KAAyBl3hB,IAAK4/B,GAA0B,CAACA,EAAE53C,GAAI43C,CAAE,IAG/DwkjB,IAAmB,GACnBC,IAAqB,IAKrBC,IAA+C,CAAC,IAAK,GAAG,EAKxDC,IAAiC,GAAK7gc,KAAKi0I,GAAM,IAW1C6sT,GAAb,KAAaA,C,iCAWRl+e,IAAOo6D,K,KAAM+jb,W,IAIbn+e,IAAOo6D,K,KAAMk3V,W,IAIbtxZ,IAAOo6D,K,KAAMgkb,a,IAIbp+e,IAAOo6D,K,KAAMm3V,Y,IAMbvxZ,IAAOo6D,K,KAAMm5V,iB,IAIbvzZ,IAAOo6D,K,KAAMkib,qB,IAIbt8e,IAAOo6D,K,KAAcikb,Q,KApCtB3kgB,QAEA,YAAYA,EAAiC,C,UACzC,KAAKA,QAAUA,CACnB,CAEA,IAAY4kgB,aAA2B,CACnC,OAAO,KAAK5kgB,QAAQ03Y,UAAU7qV,KAClC,CAEc43c,WAAkB,CAC5B,KAAKG,YAAYnrL,SAAW,EAChC,CAEcm+F,WAAkB,CAC5B,KAAKgtF,YAAYnrL,SAAW,EAChC,CAEcirL,aAAoB,CAC9B,KAAKE,YAAYnrL,SAAW,CAAC,KAAKmrL,YAAYnrL,QAClD,CAEco+F,YAAmB,CAC7B,KAAK+sF,YAAY14T,SAAW+nM,GAC5B,KAAK2wH,YAAYjjT,KAAO,EACxB,KAAKijT,YAAYxqF,aAAetnX,MACpC,CAEc+mX,gBAAgB/tX,EAA2B,CACrD,KAAK84c,YAAYxqF,aAAetuX,CACpC,CAEc82c,qBAA4B,CACtC,KAAKgC,YAAYxqF,aAAetnX,MACpC,CAEsB6xc,OAAO5zlB,EAA+B,CACpDA,EAAOgskB,SAAQ,KAAK6nB,YAAY14T,SAAWn7R,EAAOgskB,QAClDhskB,EAAO4wS,OAAM,KAAKijT,YAAYjjT,KAAO5wS,EAAO4wS,KACpD,CAEAkjT,qBAA6B9zlB,EAAsB,CAG1C,KAAK6zlB,YAAYnrL,WAClB,KAAKkrL,OAAO,CAAE5nB,OAAQ+nB,IAAmB/zlB,EAAOgskB,MAAM,CAAE,GACxD,KAAK0nB,UAAA,GAGT,KAAUM,SAASh0lB,EACvB,CAEAi0lB,oBAAoBC,EAAkC,CAClD,IAAMl0lB,EAASm0lB,GAAgCD,GAC/C,KAAKN,OAAO5zlB,EAChB,CAEA+ogB,gBAAgBhuX,EAAqB61J,EAAqB,CACtD,IAAM5wS,EAASo0lB,GAA0Br5c,EAAS61J,GAC9C5wS,GAAQ,KAAK8zlB,qBAAqB9zlB,EAC1C,CAEAgpgB,sBAAsBkrF,EAAkC,CACpD,IAAMl0lB,EAASm0lB,GAAgCD,GAC/C,KAAKJ,qBAAqB9zlB,EAC9B,CAEAq0lB,4BAAmC,CAC/B,IAAMr0lB,EAASs0lB,MACf,KAAKR,qBAAqB9zlB,EAC9B,CAEAsogB,mBAA0B,CACtB,IAAMtogB,EAASu0lB,IACX,KAAKtlgB,QAAQ03Y,UAAUt6Y,SAC3B,EACIrsF,GAAQ,KAAK8zlB,qBAAqB9zlB,EAC1C,CAEAw0lB,eAAe/gb,EAA0B,CACrC,IAAMzzK,EAASy0lB,IAAyBhhb,GACpCzzK,GAAQ,KAAK8zlB,qBAAqB9zlB,EAC1C,CAEA00lB,iBACA,MAAcV,SAASh0lB,EAAkD,CAErE,IAEI,CAAK00lB,oBADL,KAAKA,iBAAiB37b,MAAA,EACEhX,QAI5B,IAAMi2W,EAAa,IAAIn/V,gBACvB,KAAK67b,iBAAmB18F,EAExB,GAAI,CACA,MAAM,KAAK28F,UAAU38F,EAAWh/V,OAAQh5J,EAAOgskB,OAAQhskB,EAAO4wS,IAAI,CACtE,MAAQ,CAER,QAAU,CACF,KAAK8jT,mBAAqB18F,IAC1B,KAAK08F,iBAAmB3yc,OAEhC,CACJ,CAEA,MAAc4yc,UACV37b,EACA47b,EACAC,EACa,CACb,IAAMC,EAAgB,KAAKjB,YAAY14T,SACjC45T,EAAiBC,IAAeF,EAAeF,GAE/CK,EAAc,KAAKpB,YAAYjjT,KAC/BskT,EACFL,IAAe9yc,OAETA,OADAygK,GAAkByyS,EAAaJ,GA+BzC,MAAMM,IA5BkBhte,SAAet3E,EAASE,KAC5C,IAAMuH,EAAM26G,KAAK36G,IAAA,EACXpqC,EAAOqnG,MAAA,CACT,IAAM6rM,EAAUnuJ,KAAK36G,IAAA,EAAQA,EACvB4U,EAAIylG,KAAK/0J,IAAI,EAAGwjT,EAAUkyS,KAG5Bt6b,EAAO33B,QACPtwF,KAKJ,KAAK8ijB,YAAY14T,SAAW45T,EAAeK,IAAaloiB,IAGpDgoiB,IACA,KAAKrB,YAAYjjT,KAAOskT,EAAaE,IAAaloiB,KAElDA,EAAI,EACJqvc,sBAAsBruf,GAEtB2iC,IAER,GACA0rd,sBAAsBruf,EAC1B,CAEMinlB,EACDl8b,UAAA,CAED,GACCd,KACG5iD,MAAA,CAEI,KAAKs+e,YAAY14T,SAAWy5T,EACxBC,IAAe9yc,SACf,KAAK8xc,YAAYjjT,KAAOikT,EAChC,GAEZ,CACJ,EAEA,SAAST,GACLr5c,EACA61J,EAAA,CAEA,IAAMykT,EAAajC,GAAgB13lB,IAAIq/I,GACvC,GAAI,CAACs6c,EAAY,OAEjB,IAAMrpB,EAASspB,GAAcD,EAAW1vD,WAAW,EAG7C4vD,EAAYC,IAA6BH,GAG/C,MAAO,CAAErpB,SAAQp7R,KAFEj+I,KAAK/0J,IAAIgzS,OAA4B2kT,CAEjCV,CAAW,CACtC,CAEA,SAASW,IAA6Bl1lB,EAAA,CAClC,IAAMm1lB,EAAcH,GAAch1lB,EAAQqliB,WAAW,EAC/CzkO,EAAaw0R,KAAkBlvT,OAAOmvT,IAAaF,IAEnDhwD,EAAUJ,KAAUnkO,WAAWA,GAAYvlJ,OAAOr7K,EAAQ4liB,GAAG,EAMnE,OAAO0vD,IALQ76a,EAAO26X,YAClB,IAAIvmZ,MAAes2Y,EAAQ,EAAE,EAC7B,IAAIt2Y,MAAes2Y,EAAQ,EAAE,CAGE9pX,EACvC,CAEA,SAASi6a,IAA4Bj6a,EAAA,CAEjC,IAAIi1H,EAAOj+I,KAAK/0J,QACS+9K,EAAOtgG,UACPsgG,EAAO7kH,MAChC,EASA,OARIu9F,OAAOU,MAAM67I,KAAOA,EAAO,GAG/BA,GAAc,IAGdA,EAAO/6I,GAAQ+6I,EAAM,CAAEhzS,MAAqBD,KAAoB,GAEzDizS,CACX,CAEA,SAASujT,GAAgCD,EAAA,CACrC,IAAM31Z,EAAW8lS,IAAgB6vH,GACjC,MAAO,CAAEloB,OAAQztY,EAAS48F,SAAUyV,KAAMryG,EAASqyG,IAAK,CAC5D,CAEA,SAAS0jT,MAEL,MAAO,CAAEtoB,OADM6pB,IACN7pB,EAAQp7R,KAAM,CAAE,CAC7B,CAEA,SAAS6jT,IAAyBhhb,EAAA,CAC9B,IAAMl4B,EAASw3B,GAAgBU,GAC/B,GAAKl4B,GAAW61B,GAAgB71B,GAEhC,OAAOu6c,GADchib,GAAyBv4B,CACHs4B,EAC/C,CAEA,SAAS0gb,IACLlogB,EAAA,CA2BA,OAxBIA,EAAU01Y,iCAAiChke,OAAS,EAC7C+3lB,GACHzpgB,EAAU01Y,gCACd,EAMA11Y,EAAU41Y,gBAAgBlke,SAAW,GACrCmzK,GAAqB7kF,EAAU41Y,gBAAgB,EAAE,EAE1CkyH,GACHlwH,IACI53Y,EAAU41Y,gBAAgB,EAAE,CAACnqe,KAErC,EAQGg+lB,GAAoCjib,CAHpCxnF,KAAU01Y,iCACV11Y,KAAUg2Y,8BAE0BxuT,EAC/C,CAEA,SAASiib,GACLjib,EAAA,CAGA,GAAIA,EAAa91K,SAAW,EAAG,OAC/B,GAAI81K,EAAa91K,SAAW,EACxB,OAAOq2lB,GAA0Bvgb,EAAa,EAAE,EAMpD,IAAMkib,EAAmBC,IAAyBnib,GAGlD,GAAIkib,EAAiBh4lB,SAAW,EAMhC,OALIg4lB,EAAiBh4lB,SAAW,EACrBq2lB,GAA0B2B,EAAiB,EAAE,EAIjDE,IAAqCF,EAChD,CAEA,SAASF,MAEL,IAAM/oN,EAAQjmP,IADGoM,KACHpM,EAAKqvc,YAAA,EAOf,OALAppN,GAAS,EACFq2F,GAAiCC,YACjCt2F,GAAS,GACTq2F,GAAiCE,WAEjCF,GAAiCG,WAEhD,CAEA,SAAS6yH,IACLtib,EAAA,CAMA,IAAM4hb,EAAc9vD,IAAY,CAAEznhB,KAAM,aAAc6zS,YAHlCv8J,GAChBqe,EAAa5kK,IAAKnX,GAASs7lB,GAAgB13lB,IAAI5D,IAAO6tiB,YAEJ5zO,CAAY,GAOlE,MAHI,CAAC19J,OAAOC,SAASmhc,EAAY,EAAE,GAAK,CAACphc,OAAOC,SAASmhc,EAAY,EAAE,EAC5DvyH,GAEJoyH,GAAcG,EACzB,CAEA,SAASH,GAAc,CAACc,EAAKC,GAAA,CACzB,MAAO,CACHD,EACAvgc,GAAQwgc,EAAK,CACTz4lB,QACAD,MACJ,EACJ,CACJ,CAEA,SAASs4lB,IAAqCpib,EAAA,CAI1C,IAAM4hb,EAAcU,IAA8Btib,GAC5CqtJ,EAAaw0R,KAAkBlvT,OAAOmvT,IAAaF,IAEnD95a,EAASnmB,GACXqe,EAAa5kK,IAAK0kK,IACd,IAAMrzK,EAAU8ylB,GAAgB13lB,IAAIi4K,GACpC,GAAI,CAACrzK,EAAS,OACd,IAAMmliB,EAAUJ,KAAUnkO,WAAWA,GAAYvlJ,OAAOr7K,EAAQ4liB,GAAG,EACnE,GAAIT,EAAQ,EAAE,CAAC,KAAOpxY,IACtB,OAAO0mB,EAAO26X,YACV,IAAIvmZ,MAAes2Y,EAAQ,EAAE,EAC7B,IAAIt2Y,MAAes2Y,EAAQ,EAAE,EAErC,IAOJ,MAAO,CAAEumC,OAAQypB,EAAa7kT,KAFjBglT,IADQ76a,EAAOtzJ,MAAMk0J,CACO26a,CAEX1lT,CAAK,CACvC,CAEA,SAASolT,IAAyBnib,EAAA,CAG9B,IAAM4hb,EAAcU,IAA8Btib,GAC5Ckib,EAAmBlib,EAAaptH,OAAQktH,IAC1C,IAAMrzK,EAAU8ylB,GAAgB13lB,IAAIi4K,GAKpC,OAJKrzK,EAGYi2lB,IAAYj2lB,EAAQqliB,YAAa8vD,CAC3Cv9gB,EAAWs7gB,IAJG,EAKzB,GAIA,GAAIuC,EAAiBh4lB,SAAW,EAAG,CAE/B,GAAM,CAACy4lB,EAAMC,GAAOC,IAA+B7ib,GAGnD,OAAO2ib,EAAKz4lB,OAAS04lB,EAAI14lB,OAASy4lB,EAAOC,CAC7C,CAEA,OAAOV,CACX,CAEA,SAASW,IACL7ib,EAAA,CASA,GAAM,CAAC2ib,EAAMC,GAAO5gc,GAPHL,GACbqe,EAAa5kK,IAAKnX,GAASs7lB,GAAgB13lB,IAAI5D,GAO/Cg6T,EACCxxT,GACGi2lB,IAAYj2lB,EAAQqliB,YAAa4tD,KACjC5gc,KAAKi0I,GAAK,GAGlB,MAAO,CAAC4vT,EAAKvnlB,IAAK3O,GAAYA,EAAQrJ,EAAE,EAAGw/lB,EAAIxnlB,IAAK3O,GAAYA,EAAQrJ,EAAE,CAAC,CAC/E,CAEA,SAAS88lB,IACL/nB,EACA5oiB,EAASiwjB,IAAA,CAET,MAAO,CAACrnB,EAAO,GAAK5oiB,EAAQ4oiB,EAAO,EAAE,CACzC,CAEA,SAAS2pB,IAAa3pB,EAAA,CAClB,MAAO,CAAC,CAACA,EAAO,GAAI,CAACA,EAAO,EAAE,CAClC,C,80GCnYqCzxX,eAH/Bo8Y,IAAgBjB,KAAkBz5a,MAAA,EAGHs+B,KAAMpoG,U,SAApC,cAA8BooG,G,wCADpC5zH,C,IAuBI0qC,E,EAAqBumC,e,GAIrBvmC,E,EAAqBpiC,S,GAIrBoiC,E,EAAas1W,W,GAIbt1W,E,EAAqBu1Y,iB,IAIrBv1Y,IAASq1Z,M,KAAmB/qW,Q,GAI5BtqD,E,EAAqB02W,gB,IAIrB12W,IAASq1Z,M,KAAmBioE,gB,GAI5Bt9d,E,EAAqBygM,U,GAIrBzgM,E,EAAqB69d,c,GAIrB79d,E,EAAqB89d,oB,GAIrB99d,E,EACW+9d,oB,GAIX/9d,E,EAAqBg5d,wB,GAIrBh5d,E,EAAqBg+d,kB,GAMrBh+d,E,EAAqBi+d,wB,GAWrBj+d,E,EACWk+d,kC,GAMXl+d,E,EACWm+d,iC,GAMXn+d,E,EAAqBo+d,oB,GAIrBp+d,E,EAAqBq+d,W,IAQrBn6e,IAAOo6D,K,KAAcskX,qB,GA2BrB5ia,E,EAAqBule,W,GAIrBvle,E,EAAqBwle,a,GAWrBxle,E,EAAqByle,U,GAIrBzle,E,EAAqB0le,U,GAIrB1le,E,EAAqB2le,Y,GAIrB3le,E,EAAqB4le,a,GAIrB5le,E,EAAqB0qB,e,GAQrB1qB,E,EAAqB6le,W,GAIrB7le,E,EAAqB6vM,Y,GAOrB7vM,E,EAAqB8le,W,GAmBrB9le,E,EAAqB+le,e,GAKrB/le,E,EAAqBgme,a,GAKrBhme,E,EAAqBime,iB,GAMrBjme,E,EAAqBg9L,U,GAOrBh9L,E,EAAqBs+d,uB,GAWrBt+d,E,EAAqBu+d,6B,GAWrBv+d,E,EACWw+d,sB,GA4CXx+d,E,EACWy+d,qB,GAMXz+d,E,EACW0+d,qB,IAYXx6e,IAAOo6D,K,KAAc4nb,a,IAarBhif,IAAOo6D,K,KAAc6nb,W,GASrBnme,E,EAAqBu9d,c,IAIrBr5e,IAAOo6D,K,KAAc8nb,Y,IAOrBlif,IAAOo6D,K,KAAcqgb,e,IAIrBz6e,IAAOo6D,K,KAAc+nb,uB,IAYrBnif,IAAOo6D,K,KAAcgob,uB,IAOrBpif,IAAOo6D,K,KAAcsgb,sB,IASrB16e,IAAOo6D,K,KAAcugb,wB,IAKrB36e,IAAOo6D,K,KAAcmkM,S,IAwBrBv+P,IAAOo6D,K,KAAcwgb,gB,IAWrB56e,IAAOo6D,K,KAAcygb,uB,CAzaW71Y,e,CAUjC,YAAY/3M,EAA0C,CAClD,MAAMA,GAENyxL,EAGE,KAAM,CACJo8Z,kBAAmBvua,EACnBwua,mBAAoBxua,CACxB,EACJ,CAjBA3hK,gBAAOo6L,EAAMk8Q,UAAA,GAEb45H,kBAA4Dtuc,OAC5Duuc,mBAA6Dvuc,OAE7D61c,mBAA6B,GAc7B,IAAsBhgc,eAAyB,CAC3C,OAAOA,IACX,CAEA,IAAsB3oE,SAAgC,CAClD,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAc03Y,WAAuB,CACjC,OAAO,KAAK13Y,QAAQ03Y,SACxB,CAEA,IAAsBigC,iBAAmC,CACrD,OAAO,KAAK33a,QAAQ23a,iBAAmB,IAAI6sF,GAAgB,IAAI,CACnE,CAEA,IAA6B93a,QAAiB,CAC1C,OAAO,KAAK1sF,QAAQshgB,mBACxB,CAEA,IAAsBxoH,gBAAoC,CACtD,OAAO,KAAK94Y,QAAQ84Y,gBAAkB,IAAIrG,EAC9C,CAEA,IAA6BitH,gBAAyC,CAClE,OAAO,KAAK1/f,QAAQ0/f,cACxB,CAEA,IAAsB78R,UAAiC,CACnD,OAAOq0O,IACX,CAEA,IAAsB+oD,cAAgD,CAClE,OAAO,IAAIpglB,IAAI,KAAKgjT,SAAS7iT,IAAK3O,GAAY,CAACA,EAAQrJ,GAAIqJ,CAAQ,GACvE,CAEA,IAAsB6ulB,oBAA2C,CAC7D,OAAOz6D,IAAsB,KAAK5iO,SAAU,KAAKi2K,cAAc,CACnE,CAEA,IACYqnH,oBAA2C,CACnD,OAAOrhjB,GAAa,KAAK+jR,SAAU,KAAKq9R,kBAAkB,CAC9D,CAEA,IAAsB9E,wBAA0C,CAC5D,OAAO,IAAIv6kB,IAAI,KAAKs/kB,mBAAmBnglB,IAAK3O,GAAYA,EAAQrJ,EAAE,EACtE,CAEA,IAAsBo4lB,kBAAyC,CAC3D,OAAO,KAAKF,mBAAmB1oiB,OAAQnmD,GACnC,KAAKqulB,eAAehzlB,IAAI2E,EAAQrJ,EAAE,EAE1C,CAEA,IAAsBq4lB,wBAA+C,CAGjE,OAAOn7D,IAAsC,KAAKk7D,iBAAkB,CAChErvN,UAAYukN,GACR,KAAKt1f,QAAQqigB,gBAAgB/M,GAAWxiS,QAAU,GACtDm7F,WAAaqnM,GACT,KAAKt1f,QAAQiuT,aAAaqnM,IAAc,EAChD,EACJ,CAEA,IACYgL,kCAAyD,CACjE,OAAO,KAAKD,uBAAuB7oiB,OAC9BnmD,GAAY,CAAC,KAAKqulB,eAAejzlB,IAAI4E,EAAQrJ,EAAE,GAAGg8U,aAE3D,CAEA,IACYu8Q,iCAAwD,CAChE,OAAO,KAAKF,uBAAuB7oiB,OAC9BnmD,GAAY,KAAKqulB,eAAejzlB,IAAI4E,EAAQrJ,EAAE,GAAGg8U,aAE1D,CAEA,IAAsBw8Q,oBAA2C,CAC7D,OAAO1hjB,GAAa,KAAKohjB,mBAAoB,KAAKE,gBAAgB,CACtE,CAEA,IAAsBK,WAAsB,CACxC,OAAO,KAAKzggB,QAAQyggB,WAAa,EACrC,CAMsBz7D,oBAClBn2gB,EACA+5kB,KAC8B,CAC9B,GAAI,KAAKxH,mBAAqB,CAAC,KAAKlwkB,KAAK5lB,QAAS,OAElD,IAAMm3lB,EAAgBz9D,IAAoB,CACtC5lO,SAAU,KAAKA,SACf70S,QAAS,KAAK2G,KAAK5lB,QACnBujB,QACAo6D,SAAU2/gB,CACd,GAEA,GAAI,CAACnG,EACD,KAAKpB,mBAAqBvuc,OAC1B,KAAK9yD,QAAQ0igB,kBAAA,OASjB,OALID,EAAcz6lB,KAAO,KAAKq5lB,oBAAoBr5lB,KAC9C,KAAKq5lB,mBAAqBoB,EAC1B,KAAKzigB,QAAQ2igB,iBAAiBF,EAAcxrD,GAAG,GAG5CwrD,CACX,CAEA,IAAsBkF,WAAoB,CACtC,OAAOjkc,KAAK/0J,IAAI,KAAK+9K,OAAOtgG,MAAO,KAAKsgG,OAAO7kH,MAAM,CACzD,CAEA,IAAsB+/hB,aAAgC,CAClD,MAAO,CACH,KAAKl7a,OAAO7kD,KAAO,KAAK6kD,OAAOtgG,MAAQ,EACvC,KAAKsgG,OAAOrqB,IAAM,KAAKqqB,OAAO7kH,OAAS,CAC3C,CACJ,CAEAghiB,uBAA+BZ,EAA2B,CACtD,OAAOA,EAAYP,KAAiB,KAAKC,cAC7C,CAEA,IAAsBE,UAAmB,CACrC,OAAO,KAAKgB,wBAAuBC,CACvC,CAEA,IAAsBhB,UAAmB,CACrC,OAAO,KAAKe,wBAAuBE,CACvC,CAEA,IAAsBhB,YAAqB,CACvC,OAAO,KAAKc,uBAAuB,KAAKZ,SAAS,CACrD,CAEA,IAAsBD,aAAsB,CACxC,OAAQ,KAAKL,UAAY,EAAK,KAAKM,SACvC,CAEA,IAAsBn7c,eAAkC,CAEpD,MAAO,CACH,CAAC,KAAK4qV,UAAU7qV,MAAMq/I,SAAS,GAC/B,CAAC,KAAKwrM,UAAU7qV,MAAMq/I,SAAS,EACnC,CACJ,CAEA,IAAsB+7T,WAAoB,CACtC,OAAO,KAAKvwH,UAAU7qV,MAAM80J,IAChC,CAEA,IAAsBswB,YAAkB,CACpC,OAAOw0R,KACFz5a,MAAM,KAAK+6a,UAAU,EACrBpnT,UAAU,KAAKinT,WAAW,EAC1BrwT,OAAO,KAAKzqJ,aAAa,CAClC,CAEA,IAAsBo7c,WAAiD,CACnE,OAAO9xD,KAAUp9O,OAAO,GAAGiZ,WAAW,KAAKA,UAAU,CACzD,CAEA+2R,QAAgB33lB,EAAqC,CACjD,OAAO,KAAK62lB,UAAU72lB,EAAQ4liB,GAAG,GAAK,EAC1C,CAEAgyD,gCACI53lB,EACAymF,EAAY,EACL,CACP,OAAOutc,IACHh0hB,EAAQqliB,YACR,KAAKh/D,UAAU7qV,MAAMq/I,SACrBp0M,EAER,CAEA,IAAsBqwgB,eAAwB,CAC1C,IAAMr4R,EAAYo5R,MAAejqlB,KAAK,CAAC,GAAI,EAAG,KAC9C,OAAO,KAAKiplB,UAAUp4R,IAAc,EACxC,CAEA,IAAsBs4R,aAAsB,CACxC,IAAMe,EAAUD,MAAejqlB,KAAK,CAAC,EAAG,GAAI,KAC5C,OAAO,KAAKiplB,UAAUiB,IAAY,EACtC,CAEA,IAAsBd,iBAAwC,CAC1D,OAAO,KAAKnI,mBAAmB1oiB,OAAQnmD,GACnC,KAAK43lB,gCAAgC53lB,GAE7C,CAEA,IAAsB+tT,UAAyC,CAC3D,OAAOA,KACFhxT,EAAGiD,GAAY,KAAK4gU,WAAW5gU,EAAQqliB,WAAW,CAAC,CAAC,EAAE,EACtDn4e,EAAGltD,GAAY,KAAK4gU,WAAW5gU,EAAQqliB,WAAW,CAAC,CAAC,EAAE,EACtD74O,OAAO,KAAKwqS,eAAe,CACpC,CAEA,IAAsB3H,uBAAiC,CACnD,MAAO,EACH,MAAK1ggB,QAAQsuc,UAAUxzF,qBACtB,KAAK48B,UAAUk4D,uBAExB,CAEA0yD,sBAA8Bj7lB,EAAgC,CAC1D,OAAO,KAAK24F,QAAQsuc,UAAU9wF,kCAAkCn2c,EACpE,CAEA,IAAsBs5lB,6BAAoD,CAGtE,OAFK,KAAKD,sBAEHn6b,GACH,KAAKmxU,UAAUt6Y,UAAU01Y,iCAAiC9yd,IACrDnX,GAAS,KAAKo3lB,aAAaxzlB,IAAI5D,KAEtC2uD,OAAQnmD,GAAY,KAAK6ulB,mBAAmBh+d,SAAS7wH,IANf,EAO5C,CAGA,IACYuvlB,sBAAqC,CAC7C,OAAOr6b,GACH,KAAKo6b,4BACAnpiB,OACInmD,GACGA,IAAYyhJ,QAGZ,KAAKm2c,gCAAgC53lB,EAAS,KAErD2O,IAAK3O,IACF,IAAMmyd,EAAS,KAAKk8H,eAAejzlB,IAAI4E,EAAQrJ,EAAE,EACjD,GAAI,CAACw7d,EAAQ,OAEb,IAAMo/D,EAAa3+O,GAAYu/K,EAAOlsQ,KAAK,EACrCi9Q,IACAD,IACAmmH,EAAgB,EAAI,KAAKwN,UAEzBt7kB,EAAO,CACTtb,UACA4gU,WAAY,KAAKA,WACjBgpN,eAAgB,KAAKqnE,sBACjB9+H,EAAOn8d,KACX,EACAiwN,MAAOsrU,CACX,EAGM2/D,EACFpI,IAAiCxtkB,GACrC,GAAI41kB,EAAoB,OAAOA,EAG/B,IAAMC,EAAqBjI,IACvB,CAAE,GAAG5tkB,EAAM8tkB,eAAc,GAE7B,GAAI+H,EAAoB,OAAOA,CAGnC,GAEZ,CAEA,IACY3B,qBAA4C,CACpD,OAAO,KAAKD,qBAAqBppiB,OAC5By5H,GAAeA,EAAWhiK,OAAS,WAE5C,CAEA,IACY6xkB,qBAA4C,CACpD,GAAM,CAAE7uR,aAAYmpR,0BAA2B,KAI/C,OAAON,IAAuC,CAC1C34Z,YAJgB,KAAKy+Z,qBAAqBppiB,OACzCy5H,GAAeA,EAAWhiK,OAAS,UAGpCkzK,EACA8vI,aACAmpR,wBACJ,EACJ,CAEsBkN,YAAY3C,EAAsC,CACpE,KAAKjuH,UAAU7qV,MAAMq/I,SAAW,CAC5B,CAACy5T,EAAa,GAId,CAAC/+b,GAAQ++b,EAAa,GAAI,CACtBh3lB,QACAD,MACJ,EACJ,CACJ,CAEsB65lB,UAAU5ge,EAAqB,CAEjD,IAAMyhe,EAAU,KAAKnB,WAAa,EAAItge,EAAQ8pW,KAC9C,KAAKiG,UAAU7qV,MAAM80J,KAAO/6I,GAAQwic,EAAS,CACzCz6lB,MACAD,KACJ,EACJ,CAEA,IAAsBixlB,cAA+C,CACjE,OAAO,KAAKyB,mBAAqB,KAAKC,kBAC1C,CAEsBmH,YAAmB,CACrC,KAAKpH,kBAAoBtuc,OACzB,KAAKuuc,mBAAqBvuc,OAC1B,KAAK9yD,QAAQ0igB,kBAAA,EACb,KAAK/qF,gBAAgBirF,oBAAA,CACzB,CAEsB7B,cAAclykB,EAA2B,CAC3D,KAAKm2gB,oBAAoBn2gB,EAC7B,CAEsB45kB,sBAClBp3lB,EACAwd,EACI,CAEA,KAAK85kB,oBAGL95kB,EAAM+pE,cAAgB,SAC1B,KAAKoogB,qBAAqB3vlB,EAC9B,CAEsBq3lB,sBAAsB75kB,EAA2B,CAE/DA,EAAM+pE,cAAgB,SAE1B,KAAKqogB,uBAAA,CACT,CAEsBD,qBAClB3vlB,EACI,CACA,KAAK+vlB,mBAAmBp5lB,KAAOqJ,EAAQrJ,KAE3C,KAAKo5lB,kBAAoB/vlB,EACzB,KAAK2uF,QAAQ2igB,iBAAiBtxlB,EAAQ4liB,GAAG,EAC7C,CAEsBgqD,wBAA+B,CACjD,KAAKG,kBAAoBtuc,OACzB,KAAK9yD,QAAQ0igB,kBAAA,CACjB,CAEsB79O,QAAQxzW,EAAmC,CAC7D,KAAK2vlB,qBAAqB3vlB,GAG1B,KAAKqme,UAAUprV,OAAS3B,GAAc8pV,MAGtC,IAAM3oV,EAAUz6I,EAAQrJ,GAUxB,GATI,KAAKg4F,QAAQo5a,wBACb,KAAK1hC,UAAUt6Y,UAAU46W,gBAAgBlsT,GAGpC,KAAK4rV,UAAUt6Y,UAAUw6W,YAAYlrc,IAAIo/I,IAC1C,KAAK6rX,gBAAgBirF,oBAAA,GAIzB,CAAC,KAAK5igB,QAAQo5a,sBAAuB,CAErC,IAAMz3N,EAAOj+I,KAAKh1J,IAAIsle,IAAoB,KAAK0D,UAAU7qV,MAAM80J,IAAI,EACnE,KAAKg2N,gBAAgBmC,gBAAgBhuX,EAAS61J,EAClD,CACJ,CAEsBu/S,eAClB7vlB,EACAwd,EACI,CAGJA,EAAM0nY,gBAAA,EAEN,KAAK1xC,QAAQxzW,EACjB,CAEsB8vlB,uBAA8B,CAChD,KAAKqH,WAAA,CACT,CAEAa,wBAAuC,CACnC,IAAMn4kB,EAAO,KAAKA,KAAK5lB,QAClB4lB,GAsKLkiJ,GAAOliJ,GAAMluB,UAlJP,CACF,IAAIsmmB,EAGAC,EACAC,EACAC,EACAC,EAGAC,EAEEC,EAAsB/6kB,GACpBA,EAAM2hS,YAAYvhS,OAAS,QAAgB,cAC3C46kB,IAAkBh7kB,EAAM2hS,WAAW,EAAU,aAC1C,MAGLs5S,EAAyBj7kB,IAC3B,IAAMI,EAAO26kB,EAAmB/6kB,GAgB5BI,IAAS,aAbT06kB,EAAgBI,IAAuBl7kB,EAAM2hS,WAAW,EAcnDvhS,IAAS,YAXZ,CACF,IAAM+6kB,EAAYzoc,GAAiBrwI,EAAMrC,EAAM2hS,WAAW,EACpDhpO,EAAwB,CAACwihB,EAAU57lB,EAAG47lB,EAAUzriB,CAAC,EAEvDgriB,EAActF,GAAOr/R,UAAU,KAAKqN,WAAW6C,OAAOttP,IACtDiihB,EAAW,KAAKx3R,WAAW16B,OAAA,EAC3BiyT,EAAYvF,GAAOwF,GACnBC,EAAclihB,CAClB,EAGyByihB,GAEzBX,EAAer6kB,CACnB,EAEMi7kB,EAAmB5jf,EAAQz3F,IAC7B,KAAK85kB,mBAAqB,GAE1B,KAAKH,WAAA,EACL,KAAK9wH,UAAUprV,OAAS3B,GAAc8pV,MAEtC,IAAM01H,MAAA,CACF,KAAK5B,UAAU,CAAC15kB,EAAM2hS,YAAY45S,MAAM,CAC5C,EAEMC,MAAA,CACF,IAAMphhB,EAAW8ghB,IAAuBl7kB,EAAM2hS,WAAW,EAEzD,GAAI,CAACm5S,EAAe,CAChBA,EAAgB1ghB,EAChB,MACJ,CAEA,IAAM0+C,EAAQ1+C,EAAW0ghB,EAOrBhie,IAAU,IAEd,KAAK4ge,UAAU5ge,GACfgie,EAAgB1ghB,EACpB,EAEMqhhB,MAAA,CACF,IAAMN,EAAYzoc,GAAiBrwI,EAAMrC,EAAM2hS,WAAW,EACpDhpO,EAAwB,CAACwihB,EAAU57lB,EAAG47lB,EAAUzriB,CAAC,EASvD,GANwBgsiB,IAAgBP,EAAW,CAC/Cl8a,GAAI,KAAK85a,YAAY,GACrB75a,GAAI,KAAK65a,YAAY,GACrB1piB,EAAG,KAAK8piB,WACZ,CAEIwC,EAAiB,CAKjB,IAAMC,EAAaxG,GAAOr/R,UACtB,KAAKqN,WAAW16B,OAAOkyT,GAAU30R,OAAOttP,IAEtCmgD,EAAQs8d,GAAOt8d,MAAM4he,EAAakB,GAClCC,EAAOzG,GAAOjrZ,SAASwwZ,EAAW7he,GAClCukK,EAAW+3T,GAAO/3T,SAASw+T,GAMjC,KAAKpC,YAAY,CAACp8T,EAAS,GAAIA,EAAS,EAAG,EAC/C,KAAO,CAMH,IAAMulM,EAAc,GACdvza,EAAI,KAAK4uF,cACTq1J,EAAK36N,EAAI,GAAKkihB,EAAY,GAC1BtnT,EAAK56N,EAAI,GAAKkihB,EAAY,GAChC,KAAKpB,YAAY,CACbpqiB,EAAE,GAAKuza,EAActvL,EACrBjkP,EAAE,GAAKuza,EAAcrvL,CACxB,EACL,CAEAsnT,EAAclihB,CAClB,EAEMv4D,EAAO26kB,EAAmB/6kB,IAI5By6kB,IAAiB,cAAgBr6kB,IAAS,SAE1CA,IAAS,cAAek7kB,IACnBl7kB,IAAS,aAAco7kB,IACvBp7kB,IAAS,OAAOq7kB,IAEzBhB,EAAer6kB,EACnB,GAQA,OAAO0yR,MACFm5B,YAAY,CAAC,KAAK+sR,SAAU,KAAKC,QAAS,GAC1CjtR,cAAgB,KAAKlyK,aAAa,EAClCx6E,GAAG,QAAS27gB,GACZ37gB,GAAG,OAAQ+7gB,GACX/7gB,GAAG,UAXF,CACF,KAAKw6gB,mBAAqB,GAC1BgB,EAAgB72c,OAChBw2c,EAAex2c,MACnB,CAOe63c,CACnB,EAEkBC,GACtB,CAEAnjI,mBAAmC,CAE3Bw+D,IAAuB,KAAKvuD,UAAUprV,MAAM,GAC5C,KAAKqrX,gBAAgBqtF,oBAAoB,KAAKttH,UAAUprV,MAAM,EAGlE3iJ,SAASk3W,iBAAiB,cAAe,KAAKsgP,sBAAuB,CACjE9rZ,QAAS,EACb,GAEA,KAAKg0Z,uBAAA,CACT,CAEA3hI,sBAAsC,CAClC/9d,SAAS63W,oBAAoB,cAAe,KAAK2/O,qBAAqB,CAC1E,CAEA0J,oBAAyC,CACrC,OACI3zT,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIgrG,SAAC,SAAD,CACIznN,GAAI+6J,EAAY,gBAChB+qB,GAAI3lB,EAAY,KAAKy/b,YAAY,EAAE,EACnC75a,GAAI5lB,EAAY,KAAKy/b,YAAY,EAAE,EACnC1piB,EAAGiqG,EAAY,KAAK6/b,WAAW,EAC/B32kB,KAAK,SACR,IACDo+L,SAAC,OAAD,CACIznN,GAAI+6J,EAAY,mBAChB5jH,EAAG,KAAKgpjB,cACRtxT,OAAO,UACPC,YAAa,EACbzlR,KAAK,OACLouE,MAAO,CAAEs6c,cAAe,MAAO,CAClC,IACDtqV,SAAC,OAAD,CACIznN,GAAI+6J,EAAY,iBAChB5jH,EAAG,KAAKipjB,YACRvxT,OAAO,UACPC,YAAa,EACbzlR,KAAK,OACLouE,MAAO,CAAEs6c,cAAe,MAAO,CAClC,EACH,GAEV,CAEAgpD,4BAA6D,CACzD,GAAI,KAAK5C,mBAAmBrxlB,SAAW,EAEvC,OACI2gN,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,wBACdt+C,SAAA,KAAK07e,mBAAmBnglB,IAAK3O,IAC1Bo+M,SAACyuY,IAAD,CAEa7slB,UACTizB,KAAM,KAAK0kkB,QAAQ33lB,EACtB,EAHQA,EAAQrJ,EAGhB,EAEN,EAEX,CAEA8imB,0BAA2D,CACvD,GAAM,CACFtK,qBACAxggB,QAAS,CAAEwuc,+BACX,KAEJ,GAAIgyD,EAAmB1xlB,SAAW,EAAG,OAErC,GAAM,CAAE68jB,mBAAoB,KAAK3re,QAC3Bktf,EAAkB57I,GACpBP,GAAS60B,cACT+lG,GAEEu3B,EAAwB5xJ,GAC1BP,GAAS2tJ,oBACT/yB,GAGJ,OACIl8W,SAAC,IAAD,CACIznN,GAAI+6J,EAAY,0BAChBzyI,UAAU,iBAETm0F,SAAA+7e,EAAmBxglB,IAAK3O,IACrBo+M,SAAC+uY,IAAD,CAEantlB,UACTizB,KAAM,KAAK0kkB,QAAQ33lB,GACnBs0d,UACI6oE,GAA4B9hiB,IAAI2E,EAAQrJ,EAAE,EACpCk7lB,EACAhW,EAEVj/L,WAAY,KAAKjuT,QAAQiuT,aAAa58Y,EAAQrJ,EAAE,EAChDw8d,MAAO,KAAKxkY,QAAQqigB,gBAAgBhxlB,EAAQrJ,EAAE,EAC9C68W,QAAS,KAAKq8O,eACdtpD,eAAgB,KAAK6wD,sBACrBhxD,eAAgB,KAAKixD,qBACxB,EAbQr3lB,EAAQrJ,EAahB,EAEN,EAEX,CAEAo7lB,6BAA8D,CAC1D,GAAK,KAAKpjgB,QAAQkrb,iBAElB,OACIh0O,UAAC,OAAD,CAAAzyL,SAAA,EACIgrG,SAACsvY,IAAD,CACIvtJ,SAAU,KAAKxxW,QAAQ2re,gBACvB3+Y,MAAO,KAAKhtF,QAAQ0hgB,YACvB,GAEA,KAAKjB,UAAUzglB,KAAKs3M,EAAOzoN,KACxB4gN,SAACkvY,IAAD,CACIntJ,SAAU,KAAKxxW,QAAQ2re,gBAEhBr0W,QACPtqC,MAAO,KAAKhtF,QAAQ0hgB,YACvB,EAHQ,GAAGpqY,EAAM,GAAGzoN,GAGpB,EAEH,GAEd,CAEAw0lB,sBACIhylB,EACAmyd,EACkB,CAClB,OACI/zQ,SAAC0uY,IAAD,CAEa9slB,UACDmyd,SACRl/b,KAAM,KAAK0kkB,QAAQ33lB,GACnB48Y,WAAY,KAAKjuT,QAAQiuT,aAAa58Y,EAAQrJ,EAAE,EAChDw8d,MAAO,KAAKxkY,QAAQqigB,gBAAgBhxlB,EAAQrJ,EAAE,EAC9C68W,QAAS,KAAKq8O,eACdtpD,eAAgB,KAAK6wD,sBACrBhxD,eAAgB,KAAKixD,qBACxB,EATQr3lB,EAAQrJ,EAShB,CAET,CAEAs7lB,wBAAyD,CACrD,GAAI,KAAKhD,iCAAiCxxlB,SAAW,EAErD,OACI2gN,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,uBACdt+C,SAAA,KAAK67e,iCAAiCtglB,IAAK3O,IACxC,IAAMmyd,EAAS,KAAKk8H,eAAejzlB,IAAI4E,EAAQrJ,EAAE,EAEjD,OADKw7d,EACE,KAAK6/H,sBAAsBhylB,EAASmyd,GADvB,IAExB,EACD,EAEX,CAEA+/H,iCAAkE,CAC9D,GAAI,KAAKhD,gCAAgCzxlB,SAAW,EAEpD,OACIooS,UAAC,IAAD,CAAGlvS,GAAI+6J,EAAY,iCAAnBt+C,SAAA,CACK,KAAK87e,gCAAgCvglB,IAAK3O,IACvC,IAAMmyd,EAAS,KAAKk8H,eAAejzlB,IAAI4E,EAAQrJ,EAAE,EAEjD,OADKw7d,EACE,KAAK6/H,sBAAsBhylB,EAASmyd,GADvB,IAExB,IACA/zQ,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,2BACdt+C,SAAA,KAAK87e,gCAAgCvglB,IAAK3O,IACvC,IAAMmyd,EAAS,KAAKk8H,eAAejzlB,IAAI4E,EAAQrJ,EAAE,EAEjD,OADKw7d,GAED/zQ,SAAC8uY,IAAD,CAEaltlB,UACDmyd,SACRmoG,gBAAiB,KAAK3re,QAAQ2re,gBAC9BrniB,KAAM,KAAK0kkB,QAAQ33lB,GACnBmzd,MAAO,KAAKxkY,QAAQqigB,gBAAgBhxlB,EAAQrJ,EAAE,CACjD,EANQqJ,EAAQrJ,EAMhB,EATe,IAWxB,EACD,EACJ,C,EAEX,CAEA66lB,2BAA4D,CACxD,GAAI,KAAKhC,oBAAoB/xlB,SAAW,EAExC,OACI2gN,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY,wBACdt+C,SAAA,KAAKo8e,oBAAoB7glB,IAAKixK,IAC3Bw+B,SAAC0vY,IAAD,CAEgBlua,aACZi2X,YACI,KAAKw4C,eAAejzlB,IAAIwkL,EAAWjpL,EAAE,GAAGg8U,YAE/C,EALQ/yJ,EAAWjpL,EAKnB,EAEN,EAEX,CAEA86lB,2BAA4D,CACxD,GAAI,KAAKhC,oBAAoBhylB,SAAW,EAExC,OACI2gN,SAAC,IAAD,CACIznN,GAAI+6J,EAAY,wBAChBzyI,UAAU,sBAETm0F,SAAA,KAAKq8e,oBAAoB9glB,IAAKixK,IAC3Bw+B,SAAC6vY,IAAD,CAEgBrua,aACZ2mX,eAAgBtxb,EAAQj1G,GACpB,KAAK2vlB,qBACD3vlB,IAGRomiB,eAAgBnxb,MACZ,KAAK26e,uBAAA,EAEZ,EAVQhwa,EAAWjpL,EAUnB,EAEN,EAEX,CAEAy/iB,cAAmC,CAC/B,OACIvwQ,UAAAsxC,WAAA,CAAA/jO,SAAA,CACK,KAAKomf,mBAAA,GACN3zT,UAAC,IAAD,CAAGlvS,GAAI+6J,EAAY,SAAnBt+C,SAAA,CACK,KAAK2+e,4BAAA,EACL,KAAKL,2BAAA,EACL,KAAK+H,yBAAA,EACL,KAAKxH,uBAAA,EACL,KAAKC,gCAAA,EACL,KAAKV,0BAAA,EACL,KAAKC,0BAAA,CACP,CACL,KAEV,CAEAp7C,mBAAwC,CAIpC,OAFyB,KAAKtoP,UAG1BloB,UAAC,IAAD,CACIp1Q,IAAK,KAAK5Q,KACV2te,YACKhhb,GACGA,EAAGknS,eAAA,EAEXg8O,cAAgBljhB,GAAa,KAAKkjhB,cAAcljhB,EAAGkiK,WAAW,EAC9D03T,eAAiB74f,GACb,KAAK8pjB,sBAAsB9pjB,EAAEmhM,WAAW,EAE5C8kI,YAAA,CAEQ,KAAKw8O,oBACL,KAAKx8O,QAAQ,KAAKw8O,kBAAkB,CAC5C,EACA5hgB,MAAO,CACHi1I,OAAQ,KAAKirX,aAAe,UAAY7sc,OAExC0wc,YAAa,cACjB,EAnBJ/+e,SAAA,CAqBK,KAAKomf,mBAAA,GACN3zT,UAAC,IAAD,CAAG5mR,UAAWyjd,GAAdtvX,SAAA,CACK,KAAK2+e,4BAAA,EACL,KAAKL,2BAAA,EACL,KAAK+H,yBAAA,EACL,KAAKxH,uBAAA,EACL,KAAKC,gCAAA,EACL,KAAKV,0BAAA,EACL,KAAKC,0BAAA,CACP,CACJ,G,EAEX,CAEAh+Y,QAAsC,CAClC,OAAO,KAAK9kH,QAAQ86a,SACd,KAAK2sC,aAAA,EACL,KAAKC,kBAAA,CACf,C,aACJ,GAEA,IAAMmiD,IACFh7kB,GAEO4yI,IAAkB5yI,IAAUA,EAAMqtT,QAAQptU,QAAU,EAGzDi7lB,IAA0Bl7kB,IAC5B,GAAM,CAAEqtT,WAAYrtT,EACpB,OAAOu2gB,IACH,CAAClpN,EAAQ,EAAE,CAAC5jP,QAAS4jP,EAAQ,EAAE,CAAC3jP,OAAO,EACvC,CAAC2jP,EAAQ,EAAE,CAAC5jP,QAAS4jP,EAAQ,EAAE,CAAC3jP,OACpC,EACJ,EAEA,SAASgygB,IACLxoc,EACA+6b,EAAA,CAEA,GAAM,CAAE1ulB,IAAGmwD,KAAMwjG,EACX,CAAE+rB,KAAIC,KAAI7vH,KAAM4+hB,EAKtB,OAHyB1ulB,EAAI0/K,IAAO,GAAKvvH,EAAIwvH,IAAO,GAC9B7vH,GAAK,CAG/B,C,80GCn5BYglD,eAJC6nf,IAA6B,IAI9B7nf,e,QADL,cACKA,G,uCAFXxrB,C,IAuBI0qC,E,EAAagjZ,Y,GAIbhjZ,E,EAAa02W,gB,GAIb12W,E,EAAaksa,W,GAIblsa,E,EAAqB+4W,e,GAIrB/4W,E,EAAqBmsa,e,GAIrBnsa,E,EAAa8oZ,kB,GAIb9oZ,E,EAAaosa,4B,GAIbpsa,E,EAAau/M,mB,GAIbv/M,E,EAAqB53B,Y,GAIrB43B,E,EAAqBsqD,Q,GAIrBtqD,E,EAAas9d,gB,IAKbp5e,IAAOo6D,K,KAAMiib,gB,IAYbr8e,IAAOo6D,K,KAAMsqb,kB,IAOb1kf,IAAOo6D,K,KAAMgib,iB,GAKbtge,E,EAAqBpiC,S,GAIrBoiC,E,EAAau1Y,iB,GAIbv1Y,E,EAAam/d,a,GAIbn/d,E,EAAa4xY,W,GAIb5xY,E,EAAag3Y,uB,IAUb9yZ,IAAOo6D,K,KAAMuqb,oB,IAOb3kf,IAAOo6D,K,KAAM6vZ,mB,IAIbjqd,IAAOo6D,K,KAAM8vZ,oB,GAIbpuc,E,EAAas/d,c,GAIbt/d,E,EAAaupc,iB,GAIbvpc,E,EAAas1W,W,IAIbpxX,IAAOo6D,K,KAAMwqb,gB,GAIb9oe,E,EAAqB8kZ,Y,IAIrB5ga,IAAOo6D,K,KAAM6mT,mB,GASbnlW,E,EAAamnb,gB,GAiBbnnb,E,EAAqB+oe,Y,GAKrB/oe,E,EAAqBgpe,Y,GAoDrBhpe,E,EAAaqqD,U,GAObrqD,E,EAAqBipe,iC,GAQrBjpe,E,EAAak/d,qB,GA4Bbl/d,E,EAAqBkpe,wC,GAoDrBlpe,E,EAAa4mb,mB,GAgBb5mb,E,EAAqBmpe,oC,GAiBrBnpe,E,EAAa2pb,uB,GA2Bb3pb,E,EAAqBope,iC,GAOrBppe,E,EAAqBqpe,0B,GAIrBrpe,E,EAAaq+d,W,GAIbr+d,E,EAAqBspe,qB,GAYrBtpe,E,EAAqBupe,yB,GAkCrBvpe,E,EAAqBwpe,uB,GAOrBxpe,E,EAAqB6tc,2B,GAiBrB7tc,E,EAAqBype,gB,GAKrBzpe,E,EAAqBm9a,S,GAIrBn9a,E,EAAqB+mb,c,GAIrB/mb,E,EAAqB0pe,qB,GAIrB1pe,E,EAAqB2pe,sB,GAIrB3pe,E,EAAqB4pe,qB,GAerB5pe,E,EAAqB6mb,oB,GAarB7mb,E,EAAqBuuc,iB,GAUrBvuc,E,EAAqB6pe,gB,GAarB7pe,E,EAAa04Y,U,GAIb14Y,E,EAAqB+ua,U,GAOrB/ua,E,EAAqBgpb,kB,CA7iBdloc,e,CAGR,YAAY3vG,EAAsB,CAC9B,MAAMA,GAENyxL,EAAe,KAAM,CACjBkna,aAAcr5a,EACdquX,aAAcruX,CAClB,EACJ,CAEA80Q,qBAA6Bz/R,MAC7B+7T,UAA6B/7T,KAE7Bgkc,aAAuCp5c,OAEvCouZ,aAAe,IAAIt1E,GAInB,IAAcw5C,YAA4B,CACtC,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAActsC,gBAAoC,CAC9C,OAAO,KAAKssC,WAAWtsC,cAC3B,CAEA,IAAcw1D,WAAwB,CAClC,OAAO,KAAKlpB,WAAWkpB,SAC3B,CAEA,IAAsBnzD,eAA4B,CAC9C,OAAO,KAAKiqC,WAAWjqC,aAC3B,CAEA,IAAsBozD,eAA+B,CACjD,OAAO,KAAKnpB,WAAWmpB,aAC3B,CAEA,IAAcrjB,kBAA4B,CACtC,OAAO,KAAKqjB,cAAct/gB,OAAS,YACvC,CAEA,IAAcu/gB,4BAA8C,CACxD,OAAO,KAAKppB,WAAWopB,0BAC3B,CAEA,IAAc7sN,mBAA2B,CACrC,OAAO,KAAKulM,WAAWvlM,iBAC3B,CAEA,IAAsBn3O,YAAiC,CACnD,OAAO,KAAK46a,WAAW56a,UAC3B,CAEA,IAAsBkiF,QAAiB,CACnC,OAAO,KAAKn5K,MAAMm5K,QAAUkjR,EAChC,CAEA,IAAc8vJ,gBAAyC,CACnD,OAAO,KAAKt6E,WAAWupB,SAC3B,CAEAz9gB,MAAOs2c,iBACOm7H,eAAetxlB,EAA2B,CACpD,GAAIA,EAAQrJ,KAAO8qJ,OAAW,CAC1B,IAAMwic,EAAYjklB,EAAQrJ,GAC1B,KAAK0ve,UAAUy0H,aAAe7W,EAC9B,KAAKp0C,aAAanwiB,OAAS,CAAEuklB,WAAU,EACvC,KAAKt1f,QAAQosgB,6BACT,oBACA9W,EAER,CACJ,CAEc0V,iBAAiBnthB,EAAwB,CACnD,IAAM/7C,EAAM,KAAKk+D,SAAS9uE,MAAM5lB,QAC5Bw2B,IACA,KAAKo/gB,aAAalsd,SAAWusE,GAAiBz/H,EAAK+7C,GAE3D,CAEc6khB,iBAAwB,CAClC,KAAKhrH,UAAUy0H,aAAer5c,OAC9B,KAAKouZ,aAAanwiB,OAAS,IAC/B,CAEA,IAAsBivF,SAA2B,CAC7C,OAAO,KAAKolb,WAAWplb,OAC3B,CAEA,IAAc23a,iBAAmC,CAC7C,OAAO,KAAK33a,QAAQ23a,iBAAmB,IAAI6sF,GAAgB,IAAI,CACnE,CAEA,IAAcjD,aAAuC,CACjD,OAAO,KAAKvhgB,QAAQuhgB,WACxB,CAEA,IAAcvtF,WAAiC,CAC3C,OAAO,KAAKh0a,QAAQg0a,SACxB,CAEA,IAAcoF,uBAAiC,CAC3C,MAAO,CAAC,CAAC,KAAKp5a,QAAQo5a,qBAC1B,CAEA1xC,sBAAsC,CAClC,KAAKg7H,gBAAA,EACL,KAAKlyB,mBAAA,EACL7mkB,SAAS63W,oBAAoB,UAAW,KAAK+lH,iBAAiB,CAClE,CAEc0jI,mBAAmBrwD,EAA2B,CACxD,KAAK56c,QAAQosgB,6BACT,mBACAxxD,EAAQjhY,KACZ,CACJ,CAEc42Z,kBAAkB31B,EAA2B,CACvD,KAAKsxD,aAAetxD,CACxB,CAEc41B,oBAA2B,CACrC,KAAK07B,aAAep5c,MACxB,CAEA,IAAc4uc,cAAuB,CACjC,OAAO,KAAK1hgB,QAAQ0hgB,cAAgB,CACxC,CAEA,IAAc/1B,iBAAsC,CAChD,OAAO,KAAK3re,QAAQ2re,eACxB,CAEA,IAAcj0F,WAAuB,CACjC,OAAO,KAAK0tC,WAAW1tC,SAC3B,CAEcwzH,eAAe7jmB,EAA4B,CACrD,KAAKqwe,UAAUprV,OAASjlJ,CAC5B,CAEA,IAAsB6/gB,YAAyB,CAC3C,OAAO,KAAK9B,WAAW8B,UAC3B,CAEc3/C,kBAAkB3ob,EAAwB,CAEhDA,EAAEx3C,MAAQ,UAAY,KAAKswe,UAAU7qV,MAAM4sR,WAC3C,KAAKk+F,gBAAgBC,UAAA,EACrB,KAAKD,gBAAgBE,WAAA,EACrB,KAAKngC,UAAUprV,OAAS3B,GAAc8pV,MAE9C,CAEA,IAAc80E,gBAAsD,CAChE,GAAI,MAAKvpd,QAAQmrd,WAEjB,MAAO,CACHnC,kBAAmB,KAAKA,kBACxB+C,sBAAuB,KAAKA,sBAC5BlB,yBAA0B,KAAKimB,kBAC/BxlB,6BAA8B,KAAKwlB,iBACvC,CACJ,CAEArpG,mBAAmC,CAC/BllU,GAAuB,IAAI,EAE3B54J,SAASk3W,iBAAiB,UAAW,KAAK0mH,iBAAiB,CAC/D,CAEA,IAAsB4jI,YAA8B,CAChD,OAAO,KAAKjkF,WAAWhlM,WAAW1qR,OAAQ6gP,GAAQ,CAACA,EAAI9uD,QAAQ,CACnE,CAGA,IAAsB6hX,YAA0C,CAC5D,GAAI,CAAC,KAAK1zH,UAAUy0H,aAAc,OAElC,GAAI,KAAK39D,2BAA2B9hiB,IAAI,KAAKgre,UAAUy0H,YAAY,EAC/D,OAAO3rR,GAEX,IAAMgjJ,EAAS,KAAKk8H,eAAejzlB,IAAI,KAAKire,UAAUy0H,YAAY,EAGlE,OAFK3oI,EAEEA,EAAOn8d,MAFM,SAGxB,CAEA0pY,UAAkBukN,EAA4B,CAC1C,GAAM,CAAE59G,YAAWw0H,gBAAiB,KAC9B,CAAEniD,0BAA2B,KAAK/pd,QAMxC,GAHI03Y,EAAU7qV,MAAMutX,eAAiBk7E,GAGjC59G,EAAUy0H,eAAiB7W,EAAW,MAAO,GAGjD,IAAM9xH,EAAS,KAAKk8H,eAAejzlB,IAAI6olB,GACjCvxQ,EAAiB,KAAKyqN,2BAA2B9hiB,IAAI4olB,GAa3D,MAHA,GARI4W,GAAcv7Z,SAAS6yR,GAAQn8d,MAAO,CAClC28U,aAAcw/I,GAAQx/I,aACtBD,gBACJ,IAKAgmO,GAAwBp5W,SAAS6yR,GAAQn8d,MAAO,CAAE08U,gBAAe,GAIzE,CAEAkqE,WAAWqnM,EAA4B,CACnC,OAAO,KAAKx8G,eAAelhC,YAAYlrc,IAAI4olB,EAC/C,CAEA+M,cAAc/M,EAAqC,CAK/C,OAAO,IAAIzyH,GAJO,KAAK9xF,UAAUukN,CAILvkN,EAAWuzF,CAHZ,EACvB,KAAK4nI,cAAgB,KAAKlsgB,QAAQ+pd,uBAECzlF,CAC3C,CAEA,IAAc73S,UAAmB,CAC7B,OAAO,KAAKzsF,QAAQysF,YACxB,CAKA,IAAsB4+a,iCAA2C,CAC7D,MACI,CAAC,KAAKr3F,WACN,CAAC,KAAKt8B,UAAU7qV,MAAM4sR,UACtB,CAAC,EAAE,KAAKz5U,QAAQm6Z,cAAgB,KAAKn6Z,QAAQo5Z,iBAErD,CAEA,IAAckoG,qBAA8B,CAWxC,IAAM+K,EAAY3oc,KAAKh1J,IACnB,EACA,KAAKg+K,OAAOt+K,GAAIk+lB,EAMpB,OAJe,KAAKjB,gCACd,KAAK3+a,OAAO8/R,OAAO,CAAE3kV,KAAMwke,EAAWpke,MAAOoke,CAAU,GACvD,KAAK3/a,QAEGo/X,UACV,KAAK3C,aACC,KAAKA,iBAGL,EAEd,CAEA,IAAsBmiD,wCAAkD,CACpE,OAAO7lmB,GAAM,KAAK8oiB,aAAa,EAC1Bz6X,KAAK,CAAE7kJ,KAAM,YAAa,MAAS,IACnC6kJ,KAAK,CAAE7kJ,KAAM,WAAY,MAAS,IAClC6kJ,KAAK,CAAE7kJ,KAAM,sBAAuB,EAAIk/E,GAIrC,KAAKi3a,WAAWthD,iBACXr3d,IAAI0hG,EAAKg3X,yBAAyB,EAClCrvc,OAAO0/I,MAAOnuK,GAAUA,IAAU,KAE1C2sK,WAAA,CACT,CAEAu4b,yBAA4Dl0T,EAAe,CACvE,GAAIqsC,GAAYrsC,GACZ,OAAOwsC,GACHxsC,EACAi5J,GAAcP,GAAS60B,cAAe,KAAK+lG,eAAe,GAGlE,GAAI/mP,GAAkBvsC,GAClB,OAAOwsC,GACHxsC,EACAi5J,GACIP,GAAS2tJ,oBACT,KAAK/yB,eACT,GAGR,IAAMvoB,EAAoB47C,IACtB,KAAKrzB,eACT,EAgBA,OAdIhnP,IAAmBtsC,GACZ,IAAIsrC,GAAe,CACtB,GAAGtrC,EAAI9kS,MACP+jN,MAAOs8Q,IACPwvE,mBACJ,GAEA,KAAKkoD,uCAEDjzT,aAAesrC,GACT,IAAIA,GAAe,CAAE,GAAGtrC,EAAI9kS,MAAO6viB,mBAAkB,GACrD,IAAI9/N,GAAW,CAAE,GAAGjrC,EAAI9kS,MAAO6viB,mBAAkB,GAGxD/qQ,CACX,CAEA,IAAc2wQ,mBAAqC,CAC/C,IAAMvF,EAAc,KAAK0nD,WACpB3ziB,OAAQ6gP,GAAQosC,GAAapsC,IAC7Br4R,IAAKq4R,GAAQ,KAAKk0T,yBAAyBl0T,IAUhD,OARI,KAAKozT,yBAAiChoD,EAQnC,CAAI+oD,GAJa,KAAKrB,WACxB3ziB,OAAQ6gP,GAAQmsC,GAAiBnsC,IACjCr4R,IAAKq4R,GAAQ,KAAKk0T,yBAAyBl0T,EAErCm0T,EAAoB/oD,IAAW,CAC9C,CAEA,IAAsB8nD,oCAGpB,CACE,GAAM,CAAEnmF,aAAY+lF,cAAe,KACnC,OAAO,IAAItrlB,IACPsrlB,EACK3ziB,OAAQ6gP,GAAQmsC,GAAiBnsC,IACjCr4R,IAAKq4R,IACF,IAAMo0T,EAAcrnF,EAAW5hD,OAAOhsa,OAAQgsa,GAC1CnrL,EAAI1nG,SAAS6yR,EAAOn8d,KAAK,GAC3ByH,OACF,MAAO,CAACupS,EAAIxpS,MAAO49lB,CAAW,CAClC,GAEZ,CAEA,IAAc1gD,uBAA0C,CACpD,IAAIA,EAAwB,KAAKo/C,WAC5B3ziB,OAAQ6gP,GAAQmsC,GAAiBnsC,IACjCr4R,IAAKq4R,GAAQ,KAAKk0T,yBAAyBl0T,IAqBhD,OAjBI,KAAKyiO,UACL,KAAK96a,QAAQs3D,UAAYjK,GAAemhc,YAExCziC,EAAwBA,EAAsBv0f,OAAQ6gP,IAClD,IAAMo0T,EACF,KAAKlB,mCAAmC9+lB,IAAI4rS,EAAIxpS,KAAK,GAAK,EAC9D,OACI61U,GAAYrsC,IACZssC,IAAmBtsC,IACnBusC,GAAkBvsC,IAClBo0T,EAAc,CAEtB,IAKGvoR,IAAoC6nO,EAC/C,CAEA,IAAsBy/C,iCAA2C,CAC7D,OACI,KAAKpmF,WAAWlkM,oBAChB,KAAKiqR,WAAWtle,KAAMwyK,GAAQusC,GAAkBvsC,GAExD,CAEA,IAAsBozT,0BAAoC,CACtD,OAAO,KAAK1/C,sBAAsBj9iB,OAAS,CAC/C,CAEA,IAAc2xlB,WAAsB,CAChC,OAAO,KAAK0K,WAAWnrlB,IAAKq4R,GAAQA,EAAI/gF,KAAK,CACjD,CAEA,IAAsBo0Y,qBAAiD,CACnE,GAAM,CAAEQ,eAAcd,aAAYpiD,qBAAsB,KAClD,CAAEe,0BAA2B,KAAK/pd,QAOxC,OALIksgB,IAEAd,IAAet4c,OAGZi3Z,EAFIf,EAAkBlkZ,KAAMuzI,GAAQA,EAAI1nG,SAASy6Z,IAG5D,CAEA,IAAsBO,yBAEN,CACZ,GAAM,CAAEO,eAAcd,aAAYr/C,yBAA0B,KAE5D,GAAImgD,GAAgBA,aAAwBvoR,GACxC,OAAOuoR,EAEX,GAAId,IAAet4c,OACf,OAAOi5Z,EAAsBjnZ,KAAMuzI,GAAQA,EAAI1nG,SAASy6Z,GAGhE,CAEAl6B,yBACI74R,GAEI,CAAC,KAAKszT,yBAA2B,CAAC,KAAKD,oBAChCroF,EAASyf,QAIhB,KAAK6oE,yBACLtzT,EAAI19G,OAAO,KAAKgxa,uBAAuB,GAIvC,KAAKD,qBAAuBrzT,EAAI19G,OAAO,KAAK+wa,mBAAmB,EACxDroF,EAAS2f,YAGb3f,EAAS4f,MAGpB,IAAsB2oE,uBAAqC,CACvD,OAAOjqD,GACH,KAAKqH,kBACL,KAAKkoB,wBACT,CACJ,CAEA,IAAsBjB,2BAAyC,CAC3D,OAAOtuB,GACH,KAAKoK,sBACL,KAAKmlB,wBACT,CACJ,CAEAJ,kBAAwD,CACpDz+O,OAAQ,CACJuwN,QAAS,CAAE/rQ,OAAQy8L,GAAqB,EACxCn5Q,YAAa,CACT08E,OAAQ08L,GACRz8L,YAAa28L,EACjB,CACJ,CACJ,EAEA,IAAsBo4H,gBAAyB,CAE3C,OAAO,KAAKn/a,OAAOtgG,MAAQ2+gB,GAC/B,CAEA,IAAsBxrD,SAAkB,CACpC,OAAO,KAAK7yX,OAAOt+K,GAAK,KAAKs+K,OAAOtgG,MAAQ,KAAKy/gB,gBAAkB,CACvE,CAEA,IAAsB1iD,cAAuB,CACzC,OAAO,KAAK4iD,qBAAuB,KAAKD,mBAC5C,CAEA,IAAsBA,qBAA8B,CAChD,OAAO,KAAK7iD,oBAAoBphf,QAAU,CAC9C,CAEA,IAAsBkkiB,sBAA+B,CACjD,OAAO,KAAKC,qBAAqBnkiB,QAAU,CAC/C,CAEA,IAAsBmkiB,qBAEN,CACZ,GAAK,KAAKhsgB,QAAQmrd,YAAe,KAAKsgD,yBAEtC,OAAO,IAAIt8B,GACP,KAAKpjB,sBACL,CACI/kF,aAAc,KAAKv6S,SACnBrgG,MAAO,KAAKy/gB,eACZl9d,MAAOuf,GAAgBhmB,MAC3B,EAER,CAEA,IAAsB+gb,oBAEN,CACZ,GAAI,GAAC,KAAKjpd,QAAQmrd,YAAc,KAAKnC,kBAAkBl6iB,QAAU,GAEjE,OAAO,IAAIy0iB,GAAkC,KAAKyF,kBAAmB,CACjEhiF,aAAc,KAAKv6S,SACnB06J,SAAU,KAAK0kR,eACfl9d,MAAOuf,GAAgBhmB,OACvBq6a,UAAW,KAAK6I,gBACpB,EACJ,CAEA,IAAsBulB,iBAA0B,CAG5C,OAFK,KAAKq7B,oBAGN,KAAKt/a,OAAO1d,OACZ,KAAK+8b,uBAJ6B,CAO1C,CAEA,IAAsBE,gBAAyB,CAE3C,OADK,KAAKhjD,mBAEN,KAAKv8X,OAAO1d,OACZ,KAAK88b,uBAGJ,KAAKE,oBACA,KAAKD,uBACL,GAR2B,CAUzC,CAEA,IAAcjxF,UAAoB,CAC9B,OAAO,KAAK96a,QAAQ86a,UAAY,EACpC,CAEA,IAAsBq2B,UAAqB,CACvC,OAAOntE,GAAa,CAChBC,UAAW,KAAKA,UAChB5gR,IAAK,KAAKi+Y,mBACd,EACJ,CAEA,IAAsBl2C,kBAA2B,CAC7C,MAAO,MAAQ,KAAK3+X,QACxB,CAEAigb,iBAAsC,CAClC,GAAM,CAAEzjD,qBAAoB+iD,uBAAwB,KAEpD,OACI90T,UAAAsxC,WAAA,CAAA/jO,SAAA,CACKwkc,IACGx5V,SAAC2yV,GAAD,CACIv1iB,MAAOo8iB,EACP76iB,EAAG,KAAKmxiB,QACRhhf,EAAG,KAAK0tiB,eACR7rP,YAAa,CAAC,KAAK06J,SACnB+mC,YAAa,KAAKivB,kBAClBzuB,YAAa,KAAKupD,sBAClB39F,aAAc,KAAKg9F,mBACnBz8F,YAAa,KAAK+hE,kBAClBhoX,aAAc,KAAKioX,kBACtB,GAEJw7B,IACGv8Y,SAACs/W,GAAD,CACIlikB,MAAOm/lB,EACP59lB,EAAG,KAAKmxiB,QACRhhf,EAAG,KAAKoygB,gBACRvwN,YAAa,CAAC,KAAK06J,SACnB+mC,YAAa,KAAKivB,kBAClBzuB,YAAa,KAAK4tB,0BAClBhiE,aAAc,KAAKg9F,mBACnBz8F,YAAa,KAAK+hE,kBAClBhoX,aAAc,KAAKioX,kBACtB,EAEP,GAEV,CAEAm8B,kBAAuC,CACnC,IAAMC,EAAa,KAAKl1H,UAAU7qV,MAAM4sR,UACpChqN,SAACo9Y,IAAD,CAAiB7sgB,QAAS,IAAO,IAEjCyvH,SAACq9Y,IAAD,CAAe9sgB,QAAS,IAAO,GAGnC,OACIk3M,UAAAsxC,WAAA,CAAA/jO,SAAA,CACK,KAAK+mf,kCACF/7Y,SAAC,OAAD,CAAAhrG,UACIgrG,SAACgvY,IAAD,CACI94H,UAAWr0B,GACPP,GAAS2tJ,oBACT,KAAK/yB,eACT,EACAr0W,MAAO,KAAKqqH,kBACZ30J,MAAO,KAAK00a,YACf,EACC,GAKT,KAAKvwD,SAAS5mhB,SACfklM,SAAC,IAAD,CAAG0hV,SAAU,KAAKA,SAASnpiB,GAAKy8G,SAAAmof,CAAc,EAChD,GAEV,CAEAnlD,cAAmC,CAC/B,OACIvwQ,UAAAsxC,WAAA,CAAA/jO,SAAA,CACK,KAAKkof,iBAAA,EACL,KAAKD,gBAAA,CACR,GAEV,CAEAhlD,mBAAwC,CACpC,GAAM,CAAExG,gBAAiB,KAErBmuC,EACJ,GAAI,KAAKrvf,QAAQ0pd,yBAA0B,CACvC,IAAMqjD,EAAcrqc,QAAQsqc,YAAc,IAC1C3d,EAAiB3rb,KAAK/0J,QAElBo+lB,EAAc,EAEtB,CAEA,IAAME,EACF/rD,EAAanwiB,QAAQuklB,YAEpB,KAAKt1f,QAAQ0pd,yBACR,KAAKhyE,UAAU7qV,MAAMutX,aACrBtnX,QAEV,OACIokJ,UAAC,IAAD,CACIp1Q,IAAK,KAAK5Q,KACVZ,UAAWujd,IACXktH,cAAe,KAAKiK,iBAHxBvmf,SAAA,CAKK,KAAKkof,iBAAA,EACL,KAAKD,gBAAA,EACLO,IACGx9Y,SAACy9Y,IAAD,CACIllmB,GAAI,KAAK2/b,UACTwzC,cAAe,KAAKA,cACpBozD,cAAe,KAAKA,cACpB99F,WAAYw8J,EACZj4gB,SAAUksd,EAAalsd,SACvBysd,OAAQP,EAAaO,OACrBkuC,gBAAiB,KAAKvqE,WAAWjtC,WACjCy2D,sBACI,KAAKxpB,WAAWwpB,sBAEpB5uc,QAAS,KAAKA,QACd8vf,eAAgB,KAAK5oE,WACrB18a,WAAY,KAAKA,WACjBgiE,YAAa,KAAKxsE,QAAQmtgB,0BAC1B3+D,2BACI,KAAKA,2BAEO6gD,iBAChB3tC,eAAgBp7b,MAAA,CACZ,KAAKoxX,UAAUy0H,aAAer5c,OAC9B,KAAKouZ,aAAanwiB,OAAS,KAC3B,KAAK4mgB,gBAAgBirF,oBAAA,CACzB,EACH,EAEN,C,EAEX,CAEA99Y,QAAsC,CAUlC,OATI,KAAKsgU,WAAWp9Z,UAAUjmE,QAEtB0tK,SAAC2xT,GAAD,CACIphb,QAAS,KAAKA,QACd0sF,OAAQ,KAAKn5K,MAAMm5K,OACnB/2J,QAAS,KAAKyvf,WAAWp9Z,UAAUjmE,MACtC,GAGF,KAAK+4d,SAAW,KAAK2sC,aAAA,EAAiB,KAAKC,kBAAA,CACtD,C,aACJ,G,s1GChuBa0lD,GAAb,KAAaA,C,gCAwBRhre,E,EAAqBt0H,S,GAOrBs0H,E,EAAaqqD,U,GAIbrqD,E,EAAa0qO,Y,GAIb1qO,E,EAAa6zZ,c,GAKb7zZ,E,EAAqBire,kB,GAgBrBjre,E,EACW0pa,a,GAgDX1pa,E,EAAaohW,Q,GA4FbphW,E,EAAah2C,O,KAxMd0yd,cACAjlc,eAEAqmG,0BAAkC,CAC9BumI,WAAY,EACZU,SAAUzjM,IACV4pd,WAAY,CAAE9nH,WAAY,EAAGC,SAAU,CAAE,EACzC/+J,cAAet4L,GAAc2jB,OAC7Bya,WAAY,IACZsgL,WAAY,QACZmpL,aAAc,EACds3E,sBAAuB,CAC3B,GAEA,YACI/pI,EACA11d,EACF,CACE,KAAKgxiB,cAAgBt7E,EACrB,KAAK3pX,eAAiB/rG,EACtBk3L,EAAe,IAAI,CACvB,CAEA,IAAsBl3L,SAGpB,CACE,MAAO,CAAE,GAAG,KAAKoyM,eAAgB,GAAG,KAAKrmG,cAAe,CAC5D,CAEA,IAAc4yE,UAAmB,CAC7B,OAAO,KAAK3+K,QAAQ2+K,QACxB,CAEA,IAAcqgL,YAA8B,CACxC,OAAO,KAAKh/V,QAAQg/V,UACxB,CAEA,IAAcmpL,cAAuB,CACjC,OAAO,KAAKnohB,QAAQmohB,YACxB,CAGA,IAAsBo3E,kBAA8B,CAChD,GAAM,CAAEC,cAAe,KAAKx/lB,QAEtB0/lB,EACFF,EAAW7nH,SAAW,EAAI6nH,EAAW7nH,SAAW,EAAI,EAClDgoH,EACFH,EAAW9nH,WAAa,EAAI8nH,EAAW9nH,WAAa,EAAI,EAE5D,MAAO,CACHnjV,IAAKmrc,EACLx+b,OAAQw+b,EACRvle,MAAOwle,EACP5le,KAAM4le,CACV,CACJ,CAEA,IACY3hE,aAA0C,CAClD,GAAM,CACFr/W,WACAD,aACA26J,WACAT,gBACAD,aACAqmB,cACA,KAAKh/V,QAET,OAAO,KAAKgxiB,cAAc9+hB,IAAKwjd,IAC3B,GAAM,CAAE7pT,QAAO3kF,YAAawuY,EAEtBh9I,EAAW,IAAIU,GAAS,CAC1BhjQ,KAAMy1F,EACNwtK,WACA16J,WACAD,aACAi6J,aACAC,eACJ,GAEMgnR,EAAiB5gQ,IAAe,QAChCvjC,EAAYmkS,EAAiB,EAAI,GAEjCC,EAAe,CACjBv/lB,EAAG4mF,EAAS5mF,EAAIm7T,EAAY,KAAK0sN,aACjC13d,EAAGy2B,EAASz2B,CAChB,EAGMqviB,EAAiB,CACnBx/lB,EAAGs/lB,EACGC,EAAav/lB,EACbu/lB,EAAav/lB,EAAIo4U,EAASp6P,MAChC7tB,EAAGoviB,EAAapviB,EAAIioR,EAAS3+Q,OAAS,CAC1C,EACM6kH,EAAS,IAAIZ,EACf8hb,EAAex/lB,EACfw/lB,EAAerviB,EACfioR,EAASp6P,MACTo6P,EAAS3+Q,MACb,EAEA,MAAO,CAAE,GAAG27Z,EAAQh9I,WAAU95J,SAAQihb,cAAa,CACvD,EACJ,CAEA,IAAcnqI,QAAsC,CAChD,GAAM,CAAE+qD,mBAAkB7D,UAAW,KAAK58gB,QAEpC01d,EAAS,KAAKsoE,YAAY9rhB,IAAKwjd,IAAY,CAC7C,GAAGA,EAGHqqI,gBAAiBrqI,EAAO92S,OAAO8/R,OAAO,KAAK6gJ,gBAAgB,EAE3DS,aAAchib,EAAOiib,OACjBvqI,EAAOxuY,SAAS5mF,EAChBo1d,EAAOxuY,SAASz2B,EAChB,KAAKzwD,QAAQy/lB,qBACjB,EAEAhkX,SAAU,EACd,IAGA,GAAImhS,EACA,IAAK,IAAMvuN,KAAMqnK,EACTrnK,EAAG5yE,WAEH4yE,EAAGzvI,OAAOrqB,IAAMqoX,EAAO,IAAMvuN,EAAGzvI,OAAO1d,OAAS07W,EAAO,MACvDvuN,EAAG5yE,SAAW,IAM1B,IAAMykX,EAAgBhvjB,IAClB,OAAQA,EAAEkmT,SAAV,CACI,KAAKm+K,EAAS2f,YACV,MAAO,GACX,KAAK3f,EAAS4f,MACV,MAAO,GACX,QACI,MAAO,EACf,CACJ,EAGA,GAAI,KAAKn1hB,QAAQy/lB,sBACb,KAAK,IAAMpxS,KAAMqnK,EACb,IAAK,IAAMgrD,KAAMhrD,EACb,GAAIrnK,EAAGsnK,aAAe+qD,EAAG/qD,YACrBtnK,EAAG0xS,gBAAgBt4E,WAAW/G,EAAGs/E,YAAY,EAAG,CAGhD,GAAIE,EAAa7xS,GAAM6xS,EAAax/E,GAAK,SACzCryN,EAAG5yE,SAAW,GACd,KACJ,CACJ,CAKR,IAAK,IAAIx5O,EAAI,EAAGA,EAAIyzd,EAAO10d,OAAQiB,IAAK,CACpC,IAAMosT,EAAKqnK,EAAOzzd,GAClB,GAAIosT,GAAG5yE,SAEP,IAAK,IAAI9gH,EAAI14H,EAAI,EAAG04H,EAAI+6V,EAAO10d,OAAQ25H,IAAK,CACxC,IAAM+lZ,EAAKhrD,EAAO/6V,GAClB,GAAI+lZ,GAAGjlS,UAEH4yE,EAAG0xS,gBAAgBt4E,WAAW/G,EAAGq/E,eAAe,EAAG,CACnD,IAAMI,EAAQD,EAAa7xS,GACrB+xS,EAAQF,EAAax/E,IAKvBy/E,EAAQC,EACF/xS,EACA+xS,EAAQD,EACNz/E,EACCD,IAAmBpyN,EAAIqyN,IAAOryN,KAE5BA,EAAIqyN,EAAGjlS,SAAW,GAC5B4yE,EAAG5yE,SAAW,EACvB,CACJ,CACJ,CAEA,OAAOi6O,EACFhsa,OAAQgsa,GAAW,CAACA,EAAOj6O,QAAQ,EACnCvpO,IAAKwjd,GACF58T,GAAO48T,EAAQ,CAAC,WAAY,kBAAmB,cAAe,GAE1E,CAEA,IAAcp3Y,OAAgB,CAG1B,OADsBw6E,GADF,KAAK48T,OAAOxjd,IAAKwjd,GAAWA,EAAOh9I,SAASp6P,KAChCy+e,EAAa,CAACjka,GAAE,EAAY,MAAO,CAC5DujY,GAAiB,CAC5B,CACJ,ECrQMgkE,GAAyD,CAC3D,QAAS,CACb,EAEaC,IACT,EACK/qF,EAAS,SAAU8qF,IACnB9qF,EAAS,UAAW8qF,IACpB9qF,EAAS,aAAc8qF,IACvB9qF,EAAS,OAAQ,CAAE,QAASrzE,EAAsB,CACvD,ECVJ,SAAgBq+J,GAAe,CAC3BxhmB,SAAA,CAIA,OACI4iN,SAAC,IAAD,CAAAhrG,SACK53G,EAAM22d,OAAOxjd,IAAKwjd,IACf,IAAMt+H,EAAWs+H,EAAOt+H,UAAYm+K,EAASyf,QAC7C,OACIrzU,SAAC,IAAD,CAEIv8C,QAASk7b,IAAqBlpQ,EAAS,CAAChyL,QAExCzuD,UAAAgrG,SAACi9O,GAAD,CAAM1kc,GAAIw7d,EAAOC,WAAYh3S,SAAU5/K,EAAM4/K,SACzChoE,UAAAgrG,SAAC64H,GAAD,CACI9B,SAAUg9I,EAAOh9I,SACjBp4U,EAAGo1d,EAAOmqI,aAAav/lB,EACvBmwD,EAAGila,EAAOmqI,aAAapviB,EACvBuuS,WAAYjgW,EAAMigW,WAClBz7U,KAAMkzR,GAAmBi/K,EAAOlsQ,KAAK,CACxC,EACC,EACP,EAZMksQ,EAAOC,UAYb,CAEX,EACD,EAEX,C,80GCgCYn4Q,cAAMpoG,UAANooG,I,IADL,cACKA,I,uCAFX5zH,C,IAmBI0qC,E,EAAagjZ,Y,GAIbhjZ,E,EAAqBpiC,S,GAIrBoiC,E,EAAqBsqD,Q,GAIrBtqD,E,EAAqBqjZ,a,GAOrBrjZ,E,EAAaqqD,U,GAIbrqD,E,EAAamlZ,a,GAObnlZ,E,EAAqBm8Z,a,GAMrBn8Z,E,EAAqBinb,oB,GAIrBjnb,E,EAAqBknb,kB,GAIrBlnb,E,EAAa8iZ,U,GAQb9iZ,E,EAAa6zY,O,GAIb7zY,E,EAAa4yY,O,GAIb5yY,E,EAAa0jZ,c,GAUb1jZ,E,EAAqBiiW,oB,GAQrBjiW,E,EAAqBkiW,mB,GAUrBliW,E,EAAqB+5a,c,GAuBrB/5a,E,EAAqBmjb,W,GAOrBnjb,E,EAAqBkse,yB,GAIrBlse,E,EAAqB6zZ,c,GAKrB7zZ,E,EAAqBmse,oB,GAoBrBnse,E,EAAqBose,kB,GAoBrBpse,E,EAAqBqse,mB,GAcrBrse,E,EAAqBg/a,oB,GAIrBh/a,E,EAAqBsse,a,GAcrBtse,E,EACWuse,yB,GAoBXvse,E,EAAqBwse,sB,GAYrBxse,E,EAAqByse,iB,GA4ErBzse,E,EAAqB0se,gB,GAIrB1se,E,EACW2se,2B,GAoBX3se,E,EAAqB4se,wB,GAYrB5se,E,EAAqB6se,2B,GAIrB7se,E,EAAqB8se,qB,GAMrB9se,E,EAAqB+se,mB,GAqGrB/se,E,EAAqBgte,kB,GAkBrBhte,E,EAAqBite,sB,GA2BrBjte,E,EAAagsb,qB,GAMbhsb,E,EAAaisb,c,GASbjsb,E,EAAqBosb,sB,GAQrBpsb,E,EAAqBkte,oB,GAMrBlte,E,EAAqBmte,kB,GAMrBnte,E,EAAamnb,gB,GAiCbnnb,E,EAAqBwsb,oB,GAQrBxsb,E,EAAqBujZ,W,GAIrBvjZ,E,EAAa4lb,a,GAKb5lb,E,EAAqB8lb,iB,IAIrB5hc,IAAOo6D,K,KAAcghY,gB,IAIrBp7b,IAAOo6D,K,KAAcknY,e,IAIrBthc,IAAOo6D,K,KAAcmnY,c,IAwBrBvhc,IAAOo6D,K,KAAc4mT,iB,CA/nBdh8Q,gB,CAUR,YAAY/3M,EAAuB,CAC/B,MAAMA,GACNyxL,EAAmD,KAAM,CACrDk8W,aAAcruX,CAClB,EACJ,CAZA3hK,gBAAwBo6L,EAAMk8Q,UAAA,GAE9B7/B,UAA6Bz/R,KAC7Bg5Y,aAAgC,IAAIt1E,GAA6B,CAC7DpgM,KAAM,WACV,GASA,IAAc45O,YAA6B,CACvC,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAAsBplb,SAA4B,CAC9C,OAAO,KAAKolb,WAAWplb,OAC3B,CAEA,IAAsB0sF,QAAiB,CACnC,OAAO,KAAKn5K,MAAMm5K,QAAUkjR,EAChC,CAEA,IAAsB61E,aAAsB,CACxC,GAAM,CAAE59Y,OAAMI,SAAU,KAAKumb,qBAC7B,OAAO,KAAK9hY,OACPm/X,SAAS5jb,EAAQ,EAAIA,EAAQ,KAAKguZ,aAAe,GACjD60C,QAAQjjc,EAAO,EAAIA,EAAO,KAAKouZ,aAAe,EACvD,CAEA,IAAcxpW,UAAmB,CAC7B,OAAO,KAAKzsF,QAAQysF,YACxB,CAEA,IAAc86V,aAA0B,CACpC,GAAM,CAAEA,eAAgB,KAAKvnb,QACvB+hd,EAAW/8B,IAAuBuC,GAClC4E,EAAS,CAAE2J,SAAU,EAAK,EAChC,OAAO,IAAI2G,GAAW,CAAE,GAAGslB,EAAU,GAAG51B,EAAQ,GAAG5E,CAAY,EAAG,IAAI,CAC1E,CAEA,IAAsBgX,aAA0B,CAC5C,GAAM,CAAEA,eAAgB,KAAKv+b,QAE7B,OAAO,IAAIy8b,GAAW,CADLxG,aAAc,EAAGD,YAAa,EACZ,GAAGuI,CAAY,EAAG,IAAI,CAC7D,CAEA,IAAsB8qB,oBAAqC,CACvD,OAAO,KAAKjkC,WAAWqD,iBAAiB,KAAK8V,WAAW,CAC5D,CAEA,IAAsB+qB,kBAAiC,CACnD,OAAO,KAAKlkC,WAAWwD,eAAe,KAAKrB,WAAW,CAC1D,CAEA,IAAcrC,UAAqB,CAC/B,OAAO,IAAI4W,GAAS,CAChBpvW,OAAQ,KAAK+4V,YACbH,aAAc,KAAKgkC,iBACnBjkC,eAAgB,KAAKgkC,kBACzB,EACJ,CAEA,IAAcpzC,OAAwB,CAClC,OAAO,KAAKiP,SAASG,cACzB,CAEA,IAAcrQ,OAAsB,CAChC,OAAO,KAAKkQ,SAASI,YACzB,CAEA,IAAcQ,cAAwC,CAClD,OAAOb,IAAwB,KAAKG,WAAW5hD,OAAQ,CACnD4hD,WAAY,KAAKA,WACjBF,SAAU,KAAKA,QACnB,EACJ,CAKA,IAAsB7gD,oBAAmC,CACrD,GAAM,CAAE0lF,0BAA2B,KAAK/pd,QAExC,OADK+pd,EACE,KAAK3kC,WAAW5hD,OAClBxjd,IAAKwjd,GAAWA,EAAOC,UAAU,EACjCjsa,OAAQ3uD,GAASkhjB,EAAuBp5W,SAAS9nM,IAHlB,EAIxC,CAEA,IAAsBy7d,mBAA6B,CAC/C,OACI,KAAKD,mBAAmBv1d,OAAS,GAGhC,CAAC,CAAC,KAAKkxF,QAAQ+pd,wBACZ,CAAC,KAAK3kC,WAAW2B,aAE7B,CAEA,IAAsBo1B,cAAwC,CAC1D,OAAOv2B,IAAwB,KAAKE,aAAc,CAC9CG,kBAAmB,KAAKb,WAAWa,kBACnC3hD,kBAAmB,KAAKA,kBACxBD,mBAAoB,KAAKA,mBACzB0hD,0BAA2B,EAC/B,EACJ,CAEAwlC,oBAA4B/nF,EAA2C,CACnE,OAAOY,GAAuBZ,EAAQ,CAClCc,kBAAmB,KAAKA,kBACxBD,mBAAoB,KAAKA,kBAC7B,EACJ,CAEAmrI,kBAA0BhsI,EAAmC,CACzD,OAAOigD,GAAgB,CACnBj/C,MAAO,KAAK+mF,oBAAoB/nF,GAChCz3U,MAAOy3U,EAAOz3U,KAClB,EACJ,CAEA,IAAsBw5Z,WAAoB,CAItC,OAAOzmgB,GAFOmjc,KAActmb,OAAO,CAAC,GAAI,EAAG,GAAE6jC,MAAM,CAAC,IAAK,GAAI,CAE9CwtF,EAAM,KAAKP,QAAQ,EAAI,GAAK,CAC/C,CAEA,IAAsB6hb,yBAAkC,CACpD,OAAO,KAAK/oD,SAChB,CAEA,IAAsBtvB,cAAuB,CACzC,OAAO,KAAKsvB,UAAY,KAAK+oD,uBACjC,CAGA,IAAsBC,oBAAoC,CACtD,OAAO,KAAKpyD,aACP3kf,OACIgsa,GACG,KAAK8rI,mBAAmB5imB,IAAI82d,EAAOC,UAAU,GAE7C,CAACD,EAAOx/I,YAChB,EACChkU,IAAKwjd,IACF,IAAMzhU,EAAQjjH,GACV0kb,EAAO2hD,aACNpjX,GAAUA,EAAMjqH,IACrB,EACA,GAAKiqH,EACL,MAAO,CAAE,GAAGA,EAAOmjM,SAAUs+H,EAAOt+H,QAAS,CACjD,GACC1tS,OAAQuqG,GAAUA,IAAUjP,OACrC,CAGA,IAAsB07c,kBAAkC,CACpD,OAAO,KAAKryD,aACP3kf,OACIgsa,GACG,KAAK+rI,iBAAiB7imB,IAAI82d,EAAOC,UAAU,IAG1C,CAAC,KAAK29E,oBAAsB59E,EAAOx/I,aAAA,EAE3ChkU,IAAKwjd,IACF,IAAMzhU,EAAQjjH,GACV0kb,EAAO2hD,aACNpjX,GAAUA,EAAMjqH,IACrB,EACA,GAAKiqH,EACL,MAAO,CAAE,GAAGA,EAAOmjM,SAAUs+H,EAAOt+H,QAAS,CACjD,GACC1tS,OAAQuqG,GAAUA,IAAUjP,OACrC,CAEA,IAAsB27c,mBAAkC,CACpD,MAAO,CACHhib,SAAUq6S,GAAc,GAAI,KAAKr6S,QAAQ,EACzCD,WAAY,IACZi6J,WAAY,CAChB,CACJ,CAEAgpR,YAAoBpomB,EAAuB,CACvC,OAAO,KAAK+9gB,WAAWuB,aAAanpE,kCAChCn2c,EAER,CAEA,IAAsB+5iB,oBAA8B,CAChD,OAAO,KAAKh8B,WAAW5hD,OAAO39V,KAAM29V,GAAW,CAAC,CAACA,EAAOx/I,YAAY,CACxE,CAEA,IAAsB0qR,aAAgC,CAClD,GAAM,CACFrlD,qBACArpd,QAAS,CAAE0vgB,mBAAmB,IAC9B,KAEJ,OAAO,KAAKhjb,OACP8/R,OAAO,CACJnqT,IAAKqtc,EACL1gc,OAAQ0gc,EAAmBrmD,EAAmBxhf,MAClD,GACC6id,OAAA,CACT,CAEA,IACYikF,yBAAsD,CAC9D,GAAI,CAAC,KAAK3ugB,QAAQsqd,iBAAkB,MAAO,GAE3C,IAAIqlD,EAAuB,KAAKvqF,WAAW5hD,OAc3C,OAXI,KAAK49E,qBACLuuD,EAAuBA,EAAqBn4iB,OACvCgsa,GAAWA,EAAOx/I,YACvB,GAGA,KAAKohM,WAAWa,oBAChB0pF,EAAuBA,EAAqBn4iB,OACvCgsa,GAAWA,EAAOz3U,MAAM+mK,MAC7B,GAEG68S,CACX,CAEA,IAAsBf,sBAGpB,CACE,OAAO,IAAI/ulB,IACP,KAAK8ulB,wBAAwB3ulB,IAAKwjd,GAAW,CACzCA,EAAOC,WACP3kb,GAAQ0kb,EAAOl7T,OAASvG,GAAUA,EAAM3zJ,CAAC,CAC5C,GAET,CAEA,IAAsBygmB,iBAGlB,CACA,OAAO,KAAKF,wBACP3ulB,IAAKwjd,IACF,IAAMgpF,EAAW,KAAKoiD,qBAAqBnimB,IACvC+2d,EAAOC,UACX,EACA,GAAI,CAAC+oF,EAAU,OAEf,IAAMnljB,EAAQmljB,EAASjuf,EACjBo7G,EAAQ,KAAK81b,YAAYpomB,GAEzBiwN,EAAQ,KAAK8tT,WAAW2B,cACxBziO,GACI,KAAK8gO,WAAWyC,mBACZ2kC,EAASpkC,UACb,GAEJ5kD,EAAOlsQ,MAEb,MAAO,CACHmsQ,WAAYD,EAAOC,WACnBp8d,QACAsyK,QACA29C,QACA4tI,SAAU,KAAKsqQ,kBAAkBhsI,EACrC,CACJ,GACChsa,OAAQgsa,GAAWA,IAAW1wU,OACvC,CAEA88c,mBAA2B,CACvB1qF,YAGgC,CAchC,OAbK,KAAKllb,QAAQsqd,iBAaX,IAAI8iD,GAXI,KAAKyB,gBAAgB7ulB,IAAKwjd,IACrC,IAAMgpF,EAAW,KAAKoiD,qBAAqBnimB,IAAI+2d,EAAOC,UAAU,EAE1DzuY,EAAW,CACb5mF,EAAG82gB,EAASG,eAAewP,MAAM23B,GAAUp+iB,GAAK,GAChDmwD,EAAG2md,EAASI,aAAauP,MAAM23B,GAAUjuf,GAAK,EAClD,EAEA,MAAO,CAAE,GAAGila,EAAQxuY,UAAS,CACjC,CAE+BwuY,EAAQ,CACnC,GAAG,KAAKirI,kBACR3hQ,WAAY,QACZ49K,OAAQ,KAAKgkF,YACbz4E,aAAc,KAAKA,aACnBs3E,sBAAuB,KAAKhoD,UAC5Bh3B,kBACIpyN,EACAqyN,KAEA,IAAMqhF,EAAY,KAAKjB,qBAAqBnimB,IAAI0vT,EAAGsnK,UAAU,EACvDqsI,EAAY,KAAKlB,qBAAqBnimB,IAAI+hhB,EAAG/qD,UAAU,EAEvDz3S,EAAK6jb,GAAWzhmB,GAAK,EACrB+9K,EAAK2jb,GAAW1hmB,GAAK,EAM3B,OAHI49K,EAAKG,EAAWgwI,EAChBhwI,EAAKH,EAAWwiW,EAEbryN,CACX,CACJ,GAnCoC,MAoCxC,CAEA,IAAsB2yS,gBAAkD,CACpE,OAAO,KAAKc,mBAAmB,CAAE1qF,SAAU,KAAKA,QAAS,EAC7D,CAEA,IACY6pF,2BAAwD,CAChE,GAAI,CAAC,KAAK/ugB,QAAQsqd,iBAAkB,MAAO,GAE3C,IAAIqlD,EAAuB,KAAKvqF,WAAW5hD,OAc3C,OAXI,KAAK49E,qBACLuuD,EAAuBA,EAAqBn4iB,OACvCgsa,GAAW,CAACA,EAAOx/I,YACxB,GAGA,KAAKohM,WAAWa,oBAChB0pF,EAAuBA,EAAqBn4iB,OACvCgsa,GAAWA,EAAOz3U,MAAM+mK,MAC7B,GAEG68S,CACX,CAEA,IAAsBX,wBAGpB,CACE,OAAO,IAAInvlB,IACP,KAAKkvlB,0BAA0B/ulB,IAAKwjd,GAAW,CAC3CA,EAAOC,WACP3kb,GAAQ0kb,EAAOl7T,OAASvG,GAAUA,EAAM3zJ,CAAC,CAC5C,GAET,CAEA,IAAsB6gmB,2BAAqC,CACvD,MAAO,CAAC,CAAC,KAAKjvgB,QAAQ0te,kBAC1B,CAEA,IAAsBwhC,qBAA0C,CAC5D,OAAO,KAAKD,0BACNn8c,OACA,IAAO,KAAK45B,OAAOtgG,KAC7B,CAEA,IAAsB+ihB,mBAGlB,CACA,OAAO,KAAKJ,0BACP/ulB,IAAKwjd,IAEF,GAAIA,EAAOl7T,OAAOx5J,OAAS,EAAG,OAE9B,IAAMw0V,EAAa,KAAK0rQ,uBAAuBvimB,IAC3C+2d,EAAOC,UACX,EACA,GAAI,CAACngI,EAAY,OAEjB,IAAMj8V,EAAQi8V,EAAW/kS,EACnBo7G,EAAQ,KAAKs1b,0BACb,KAAKQ,YAAYpomB,GACjBm8d,EAAOztB,YAEPz+O,EAAQ,KAAK8tT,WAAW2B,cACxBziO,GACI,KAAK8gO,WAAWyC,mBACZvkL,EAAW8kL,UACf,GAEJ5kD,EAAOlsQ,MAEb,MAAO,CACHmsQ,WAAYD,EAAOC,WACnBp8d,QACAsyK,QACA29C,QACA4tI,SAAU,KAAKsqQ,kBAAkBhsI,EACrC,CACJ,GACChsa,OAAQgsa,GAAWA,IAAW1wU,OACvC,CAEAi9c,qBAA6B,CACzB7qF,WACAqqF,oBAIgC,CAuBhC,MAtBI,CAAC,KAAKvvgB,QAAQsqd,kBAAoB,KAAKtqd,QAAQgwgB,qBAK/C,KAAKhwgB,QAAQo0a,eAAgB,OAiB1B,IAAIg5F,GAfI,KAAK+B,kBAAkBnvlB,IAAKwjd,IACvC,IAAMlgI,EAAa,KAAK0rQ,uBAAuBvimB,IAC3C+2d,EAAOC,UACX,EAEMzuY,EAAW,CACb5mF,EAAGk1V,EACG4hL,EAASG,eAAewP,MAAMvxL,EAAWl1V,CAAC,EAC1C82gB,EAASx4V,OAAO7kD,KACtBtpE,EAAG2md,EAASI,aAAauP,MAAMrxD,EAAOn8d,KAAK,CAC/C,EAEA,MAAO,CAAE,GAAGm8d,EAAQxuY,UAAS,CACjC,CAE+BwuY,EAAQ,CACnC,GAAG,KAAKirI,kBACRtnR,SAAU,KAAK+nR,oBACfpiQ,WAAY,MACZmpL,aAAc,KAAKA,aACnBs3E,sBAAuB,KAAKhoD,UAC5B76B,OAAQ,KAAKgkF,YACbngF,kBACIpyN,EACAqyN,KAGA,GAAI+gF,EAAiB7imB,IAAIyvT,EAAGsnK,UAAU,EAAG,OAAOtnK,EAChD,GAAIozS,EAAiB7imB,IAAI8hhB,EAAG/qD,UAAU,EAAG,OAAO+qD,EAEhD,IAAMyhF,EAAc,KAAKjB,uBAAuBvimB,IAC5C0vT,EAAGsnK,UACP,EACMysI,EAAc,KAAKlB,uBAAuBvimB,IAC5C+hhB,EAAG/qD,UACP,EAEMz3S,EAAKikb,GAAa7hmB,GAAK,EACvB+9K,EAAK+jb,GAAa9hmB,GAAK,EAM7B,OAHI49K,EAAKG,EAAWgwI,EAChBhwI,EAAKH,EAAWwiW,EAEbryN,CACX,CACJ,EACJ,CAEA,IAAsBizS,kBAAoD,CACtE,OAAO,KAAKW,qBAAqB,CAC7B7qF,SAAU,KAAKA,SACfqqF,iBAAkB,KAAKA,gBAC3B,EACJ,CAaA,IAAsBF,sBAAmC,CACrD,IAAMc,EAAsB,IAAIr0E,GAAS,CACrCpvW,OAAQ,KAAKA,OACb44V,aAAc,KAAKgkC,iBACnBjkC,eAAgB,KAAKgkC,kBACzB,GAEMylD,EAAiB,KAAKc,mBAAmB,CAC3C1qF,SAAUirF,CACd,GAEMZ,EAAmB,IAAI1ulB,IACzBiulB,GAAgBtrI,OAAOxjd,IAAKwjd,GAAWA,EAAOC,UAAU,GAQ5D,MAAO,CACH57V,KANqB,KAAKkoe,qBAAqB,CAC/C7qF,SAAUirF,EACVZ,kBACJ,CAGUH,GAAkBhjhB,OAAS,EACjC67C,MAAO6me,GAAgB1ihB,OAAS,CACpC,CACJ,CAGA,IAAcgie,qBAAkC,CAC5C,OAAO,KAAKihD,oBAChB,CAIA,IAAchhD,cAAuC,CACjD,GAAI,KAAKjpC,WAAWp9Z,UAAUjmE,OAAQ,OACtC,GAAM,CAAE0je,cAAa/4V,UAAW,KAChC,MAAO,CACH7kD,KAAM49Y,EAAY59Y,KAAO6kD,EAAO7kD,KAChCI,MAAOykD,EAAOzkD,MAAQw9Y,EAAYx9Y,KACtC,CACJ,CAEA,IAAsBumb,sBAAmC,CACrD,IAAMtmjB,EAAS,KAAK83F,QAAQiwd,0BAC5B,MAAO,CACHpob,KAAM67B,KAAKh1J,IAAIxG,GAAQ2/H,MAAQ,EAAG,KAAKumb,oBAAoBvmb,IAAI,EAC/DI,MAAOy7B,KAAKh1J,IAAIxG,GAAQ+/H,OAAS,EAAG,KAAKmmb,oBAAoBnmb,KAAK,CACtE,CACJ,CAEA,IAAsBqne,oBAAsC,CACxD,OAAO,IAAIzulB,IACP,KAAKuulB,kBAAkB5rI,OAAOxjd,IAAKwjd,GAAWA,EAAOC,UAAU,EAEvE,CAEA,IAAsB8rI,kBAAoC,CACtD,OAAO,IAAI1ulB,IACP,KAAKiulB,gBAAgBtrI,OAAOxjd,IAAKwjd,GAAWA,EAAOC,UAAU,EAErE,CAEA,IAAc8lF,gBAA0C,CACpD,IAAMP,EAAoB,KAAK5jC,WAAW2B,cACpCjoe,GACI,KAAKsme,WAAW8B,WAAWhlM,WAC1B7pC,GAAQA,aAAesrC,IAE5B,GAcN,MAAO,CACHooO,sBAb0B,KAAK3mC,WAAW2B,cACxC,GACA,KAAK3B,WAAW5hD,OAAOxjd,KAClBwjd,EAAQ30d,IACL,IAAI80U,GAAe,CACf90U,QACAxH,MAAOm8d,EAAOC,WACd9pT,MAAO6pT,EAAOztB,YACdz+O,MAAOksQ,EAAOlsQ,KAClB,IAKV0xV,oBACAE,YAAa,KAAK9jC,WAAW2B,cACvB,KAAK3B,WAAW8B,WAAWtuO,kBAC3B9lJ,OACNu4Z,eAAgB,EAChBD,iBAAkB,EAClBE,6BAA8BjnC,GAC9BwmC,yBAA0BzmC,EAC9B,CACJ,CAEA,IAAsBwqC,oBAA8B,CAChD,GAAM,CAAEtF,oBAAqB,KAC7B,GAAIA,EAAiBziC,WAAY,MAAO,GAExC,GAAM,CAACl4gB,EAAKD,GAAO46iB,EAAiB3tf,OACpC,OAAOhtD,GAAO,GAAKD,GAAO,CAC9B,CAEA,IAAsBi3gB,WAAyB,CAC3C,OAAO,KAAKG,aAAa/uW,QAASysT,GAAWA,EAAOl7T,MAAM,CAC9D,CAEA,IAAc0/Y,aAAsB,CAChC,IAAM4B,EAAc,KAAK1I,aAAanwiB,QAAQ+mC,KAC9C,OAAO8xgB,IAAgB92Z,OAA4B,GAAhB,CAAC82Z,CAAW,CACnD,CAEA,IAAsB1B,iBAA2B,CAC7C,OAAO,KAAKlod,QAAQspW,SAAS78b,OAAOzE,KAAO,KAAK2/b,SACpD,CAEsB+5G,gBAAuB,CACzC,KAAKR,aAAanwiB,OAAS,IAC/B,CAEsB62iB,eAAsB,CACnC,KAAK5nd,QAAQ0pd,0BAA0B,KAAKhI,eAAA,CACrD,CAEsBmG,aAClBhqe,EACI,CACJ,IAAM/7C,EAAM,KAAK5Q,KAAK5lB,QAClBq+iB,EAAY,KAAK3pd,QAAQ9uE,MAAM5lB,QAOnC,GAJIq+iB,IACA,KAAKzI,aAAalsd,SAAWusE,GAAiBooZ,EAAW9re,IAGzD,CAAC/7C,EAAK,OAEV,IAAMwpe,EAAYia,IAAuB,CACrC3jB,MAAOrgW,GAAiBz/H,EAAK+7C,GAC7B4nc,YAAa,KAAKP,SAASO,YAC3BJ,eAAgB,KAAKH,SAASG,eAC9BM,UAAW,KAAKA,SACpB,GAEA,KAAKu7B,aAAanwiB,OACdu6f,IAAcx4W,OAAY,KAAO,CAAEh7G,KAAMwzd,CAAU,CAC3D,CAEsBhkC,gBAAgB1ob,EAAqB,CAGvD,IAAMorgB,EAAiB,KAAKhqd,QAAQ9uE,MAAM5lB,QAC1C,GAAI,CAAC0+iB,EAAgB,OACrB,IAAMC,EAAaD,EAAeE,uBAC9BxmC,IAE8Bh3W,MAAMxnI,KAAK+khB,GAAYz0Y,MACpD20Y,GAAchmF,GAAuBvlb,EAAE7tC,OAASo5iB,EAEjDC,GACA,KAAK1I,eAAA,CAEb,CAEAj6E,mBAAmC,CAC/B99d,SAASk3W,iBAAiB,QAAS,KAAKymH,gBAAiB,CACrD10Z,QAAS,EACb,EACJ,CAEA80Z,sBAAsC,CAClC/9d,SAAS63W,oBAAoB,QAAS,KAAK8lH,gBAAiB,CACxD10Z,QAAS,EACb,EACJ,CAEAk4e,qBAAkD,CAC9C,OACI5zQ,UAAAsxC,WAAA,CAAA/jO,SAAA,CACK,KAAKmqc,oBACFn/V,SAAC6iW,GAAD,CACI9/W,KAAM,KAAK0yU,SAASI,aACpB54V,OAAQ,KAAKw4V,SAASO,YACtB3uO,YAAa,EAChB,IAKDrnF,SAACi/X,GAAD,CACIhia,OAAQ,KAAKw4V,SAASO,YACtB3uO,YAAa,EAChB,GAEJ,CAAC,KAAKouO,SAASG,eAAeyQ,WAC3BrmU,SAACwjV,GAAD,CACIzgW,KAAM,KAAK0yU,SAASG,eACpB34V,OAAQ,KAAKw4V,SAASx4V,OACtB+lX,kBAAA,EACH,IAELhjV,SAACs7V,GAAD,CACIvnF,OAAQ,KAAK24E,aACbj3B,SAAU,KAAKA,SACfkiC,WAAY,KAAKhiC,WAAW2B,cAC5B6/B,WAAA,GACAF,gBAAiB,IACjBC,iBAAkB,EAClB7rC,SAAU,KAAK96a,QAAQ86a,QAC1B,GACA,KAAKyzF,mBAAmBvulB,KAAK+hJ,EAAOlzJ,KACjC4gN,SAAC2gZ,IAAD,CAAwBruc,QAAO6qB,OAAQ,KAAK24X,SAAY,EAA9C12iB,IAEb,KAAK2/lB,iBAAiBxulB,KAAK+hJ,EAAOlzJ,KAC/B4gN,SAAC2gZ,IAAD,CAAwBruc,QAAO6qB,OAAQ,KAAK24X,SAAY,EAA9C12iB,IAEb,KAAKugmB,mBACF3/Y,SAAC4+Y,GAAD,CAAgBxhmB,MAAO,KAAKuimB,gBAAmB,GAElD,KAAKN,iBACFr/Y,SAAC4+Y,GAAD,CAAgBxhmB,MAAO,KAAKiimB,cAAiB,EAEnD,GAEV,CAEArnD,cAA2C,CACvC,OAAO,KAAKqD,oBAAA,CAChB,CAEApD,mBAAgD,CAC5C,OACIxwQ,UAAC,IAAD,CACIp1Q,IAAK,KAAK5Q,KACVZ,UAAWozf,GACXn7T,aAAc,KAAKq/V,cACnBoD,WAAY,KAAKpD,cACjBqD,cAAe,KAAKrD,cACpB1hW,YAAa,KAAK2hW,aAClB5/V,aAAc,KAAK4/V,aACnB7/V,YAAa,KAAK6/V,aARtBpjc,SAAA,EAUIgrG,SAAC,OAAD,CAAM,GAAI,KAAK/iC,OAAO+uV,QAAA,EAAWgqC,YAAY,GAMvC,GACL,KAAKqF,oBAAA,EACL,KAAK5C,kBACFz4V,SAAC61V,IAAD,CACI9lG,MAAO,KAAKwoG,YACZ7L,aAAc,KAAKA,aACnBj3B,SAAU,KAAKA,SACfE,WAAY,KAAKA,WACjBmgC,UAAW,CACd,IAEL91V,SAACy7V,GAAD,CACIljjB,GAAI,KAAK2/b,UACTy9E,WAAY,KAAKA,WACjB87B,aAAc,KAAKA,aACnB19E,OAAQ,KAAK24E,aACboF,WAAY,KAAKtrC,MAAMt8V,MACvB+nY,eAAgB,KAAKA,cACxB,EACF,C,EAEX,CAEA58V,QAAsC,CAUlC,OATI,KAAKsgU,WAAWp9Z,UAAUjmE,QAEtB0tK,SAAC2xT,GAAD,CACIphb,QAAS,KAAKA,QACd0sF,OAAQ,KAAKA,OACb/2J,QAAS,KAAKyvf,WAAWp9Z,UAAUjmE,MACtC,GAGF,KAAKi+C,QAAQ86a,SACd,KAAK2sC,aAAA,EACL,KAAKC,kBAAA,CACf,C,aACJ,GAEA,SAAS0oD,IAAI,CACTruc,QACA6qB,UAAA,CAKA,OACI6iC,SAAC,SAAD,CACI3hC,GAAI3lB,EAAYpG,EAAM3zJ,CAAC,EACvB2/K,GAAI5lB,EAAYpG,EAAMxjG,CAAC,EACvBL,EAAGiqG,EAAYykB,GACfv7J,KAAM0wI,EAAMu1D,MACZpkD,QAASixW,GAAWpiX,EAAMmjM,SAAS,CAAChyL,OACvC,EAET,C,80GClzBYo4C,eAPNoxT,IAAa,IAGbw7D,GAAgBx7D,IAIVpxT,KAAMpoG,U,SADX,cACKooG,G,wCAFX5zH,C,IAUI0qC,E,EAAagjZ,Y,GAIbhjZ,E,EAAapiC,S,GAIboiC,E,EAAasqD,Q,GAIbtqD,E,EAAqBurY,oB,GAMrBvrY,E,EAAqBgsY,kB,GAMrBhsY,E,EAAqBiue,e,GAIrBjue,E,EAAqBkue,iB,GAMrBlue,E,EAAqBmue,e,GAMrBnue,E,EAAqBoue,c,GAKrBpue,E,EAAaqjZ,a,GAqBbrjZ,E,EAAqB+qb,iB,GASrB/qb,E,EAAaqqD,U,GAIbrqD,E,EAAamlZ,a,GAObnlZ,E,EAAqBm8Z,a,GASrBn8Z,E,EAAay6Y,S,GASbz6Y,E,EAAqBsoZ,Q,GAMrBtoZ,E,EAAa6zY,O,GAMb7zY,E,EAAqBuoZ,Q,GAIrBvoZ,E,EAAqB2qY,Q,GAIrB3qY,E,EAAqB06a,M,GAIrB16a,E,EAAa4yY,O,GAOb5yY,E,EAAqBque,yB,GAOrBrue,E,EAAqB0jZ,c,GAQrB1jZ,E,EAAqB+5a,c,GAMrB/5a,E,EAAqBqse,mB,GAcrBrse,E,EAAqBute,sB,GAOrBvte,E,EAAqBsse,a,GAcrBtse,E,EAAqByse,iB,GA2CrBzse,E,EAAqB0se,gB,GAIrB1se,E,EAAqB6se,2B,GAIrB7se,E,EAAqB8se,qB,GAMrB9se,E,EAAqB+se,mB,GAyDrB/se,E,EAAqBgte,kB,GAQrBhte,E,EAAqBmte,kB,GAiBrBnte,E,EAAasue,qB,GA4Cbtue,E,EAAagsb,qB,GAMbhsb,E,EAAaisb,c,GAYbjsb,E,EAAqBosb,sB,CAhZdljW,e,CAGR,YAAY/3M,EAAwB,CAChC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAcogV,YAA8B,CACxC,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAAcplb,SAA6B,CACvC,OAAO,KAAKolb,WAAWplb,OAC3B,CAEA,IAAc0sF,QAAiB,CAC3B,OAAO,KAAKn5K,MAAMm5K,QAAUkjR,EAChC,CAEA,IAAsB+9D,oBAA6B,CAC/C,OAAO,KAAKyX,WAAWuB,aAAa/oE,WAChC,KAAKwnE,WAAW8E,QAAQ,EAC5B,CACJ,CAEA,IAAsB9b,kBAA2B,CAC7C,OAAO,KAAKgX,WAAWuB,aAAa/oE,WAChC,KAAKwnE,WAAW8E,QAAQ,EAC5B,CACJ,CAEA,IAAsBmmF,eAAwB,CAC1C,OAAO,KAAKI,wBAAwBx5E,YACxC,CAEA,IAAsBq5E,iBAA0B,CAC5C,OAAOxkb,EAAOo6J,QAAQ,KAAKynL,mBAAoB,CAC3ClhV,SAAU,KAAK4jb,aACnB,GAAGjkhB,KACP,CAEA,IAAsBmkhB,eAAwB,CAC1C,OAAOzkb,EAAOo6J,QAAQ,KAAKkoL,iBAAkB,CACzC3hV,SAAU,KAAK4jb,aACnB,GAAGjkhB,KACP,CAEA,IAAsBokhB,cAAuB,CAEzC,OADI,KAAKjyE,YAAYjC,eAAuB,EACrC,KAAK+zE,aAChB,CAEA,IAAc5qF,aAAsB,CAChC,GAAM,CAAE59Y,OAAMI,SAAU,KAAKumb,qBACvBmiD,EAAejtc,KAAKh1J,IACtBu5H,EAAQ,EAAIA,EAAQiwc,GAAgB,EACpC,GAAM,KAAKq4B,aACf,EACMx9C,EAAcrvZ,KAAKh1J,IACrBm5H,EAAO,EAAIA,EAAOqwc,GAAgB,EAClC,GAAM,KAAKo4B,eACf,EAEA,OAAO,KAAK5jb,OACPo/X,UAAU,KAAK0kD,YAAY,EAC3B3kD,SAAS8kD,GACT7lC,QAAQ/X,EACjB,CAMA,IAAsB5F,iBAA0B,CAC5C,OAAO,IAAIrhY,EACP,KAAKihV,OACL,KAAK0Y,YAAYpjX,IACjB,KAAKy6Y,KAAO,KAAK/vC,OACjB,KAAK0Y,YAAY59c,MACrB,CACJ,CAEA,IAAc4kH,UAAmB,CAC7B,OAAO,KAAKzsF,QAAQysF,YACxB,CAEA,IAAc86V,aAA0B,CACpC,GAAM,CAAEA,eAAgB,KAAKvnb,QACvB+hd,EAAW/8B,IAAuBuC,GAClC4E,EAAS,CAAE2J,SAAU,EAAK,EAChC,OAAO,IAAI2G,GAAW,CAAE,GAAGslB,EAAU,GAAG51B,EAAQ,GAAG5E,CAAY,EAAG,IAAI,CAC1E,CAEA,IAAsBgX,aAA0B,CAC5C,GAAM,CAAEA,eAAgB,KAAKv+b,QACvB03X,EAAY00F,IAAuB7tB,EAAa,CAClDt2f,UAAW,KAAKm9e,WAAWn9e,UAC3BC,QAAS,KAAKk9e,WAAWl9e,OAC7B,GACA,OAAO,IAAIu0f,GAAW,CAAE,GAAG8B,EAAa,GAAG7mE,CAAU,EAAG,IAAI,CAChE,CAEA,IAAcmlD,SAA4B,CACtC,IAAMlhd,EAAS,KAAK4rd,YAAY5rd,QAAU,CAAC+nF,IAAU,IAAS,EACxD28Y,EAAgB,KAAKjb,WAAW+E,eACtC,MAAO,CACHzmX,KAAK/0J,IAAIgtD,EAAO,GAAI0ke,EAAc,EAAE,EACpC38X,KAAKh1J,IAAIitD,EAAO,GAAI0ke,EAAc,EAAE,CACxC,CACJ,CAEA,IAAsB3V,QAA2B,CAG7C,OAAO,KAAKjF,YAAY/hC,UAAU,GAAGgnC,OAAA,CACzC,CAEA,IAAczU,OAAwB,CAClC,OAAO,KAAKmP,WAAWqD,iBAAiB,KAAK8V,YAAa,CACtD5T,OAAQ,KAAKA,MACjB,EACJ,CAEA,IAAsBA,QAA2B,CAC7C,OAAO,KAAKlF,YAAYkF,OAAA,CAC5B,CAEA,IAAsB5d,QAAiB,CACnC,OAAO,KAAKkJ,MAAM4e,MAAM,KAAKzP,WAAWn9e,SAAS,CACrD,CAEA,IAAsB60gB,MAAe,CACjC,OAAO,KAAK7mC,MAAM4e,MAAM,KAAKzP,WAAWl9e,OAAO,CACnD,CAEA,IAAc8se,OAAsB,CAChC,OAAO,KAAKoQ,WAAWwD,eAAe,KAAKrB,YAAa,CACpD1K,QAAS,KAAKA,QACd6N,OAAQ,KAAKA,MACjB,EACJ,CAEA,IAAsB+lF,yBAAwC,CAC1D,OAAO,KAAKrrF,WAAWwD,eAAe,KAAKrB,YAAa,CACpD1K,QAAS,KAAKA,QACd6N,OAAQ,KAAKh+V,OAAOg+V,OAAA,CACxB,EACJ,CAEA,IAAsB5E,cAAyC,CAC3D,OAAOumC,IAAyB,KAAKjnC,WAAW5hD,OAAQ,CACpDwxC,MAAO,KAAKA,MACZjI,OAAQ,KAAKA,OACb+vC,KAAM,KAAKA,IACf,EACJ,CAEA,IAAsBX,cAAyC,CAC3D,OAAOsQ,IAAyB,KAAK3mC,aAAc,CAC/CG,kBAAmB,KAAKb,WAAWa,iBACvC,EACJ,CAEA,IAAsBwoF,mBAAkC,CACpD,MAAO,CACHhib,SAAUq6S,GAAc,GAAI,KAAKr6S,QAAQ,EACzCD,WAAY,IACZi6J,WAAY,CAChB,CACJ,CAEAgpR,YAAoBpomB,EAAuB,CACvC,OAAO,KAAK+9gB,WAAWuB,aAAanpE,kCAChCn2c,EAER,CAEA,IAAsBsomB,sBAA2C,CAE7D,OAAO,KAAKvqF,WAAWa,kBACjB,KAAKb,WAAW5hD,OAAOhsa,OAAQgsa,GAAWA,EAAOz3U,OAAO+mK,QACxD,KAAKsyN,WAAW5hD,MAC1B,CAEA,IAAsBkrI,aAAgC,CAClD,GAAM,CACF8B,eACAxwgB,QAAS,CAAE0vgB,mBAAmB,IAC9B,KAEJ,OAAO,KAAKhjb,OACP8/R,OAAO,CACJnqT,IAAKqtc,EACL1gc,OAAQ0gc,EAAmBc,CAC/B,GACC9lF,OAAA,CACT,CAEA,IAAsBmkF,iBAGlB,CAGA,OAFK,KAAK7ugB,QAAQsqd,iBAEX,KAAKqlD,qBAAqB3vlB,IAAKwjd,IAClC,GAAM,CAAEC,aAAYnsQ,SAAUksQ,EAGxBn8d,EADYm8d,EAAOj9a,KACAl/C,OAAS,EAIlC,MAAO,CAAEo8d,aAAYp8d,QAAOsyK,MAFd,KAAK81b,YAAYpomB,CAEHsyK,EAAO29C,OAAM,CAC7C,GAX2C,EAY/C,CAEAs4Y,mBAA2B,CACvB56F,QACA8nC,QAIgC,CAYhC,OAXK,KAAK98c,QAAQsqd,iBAWX,IAAI8iD,GATI,KAAKyB,gBAAgB7ulB,IAAKwjd,IACrC,IAAMxuY,EAAW,CACb5mF,EAAG0uiB,EACHv+e,EAAGy2c,EAAM6f,MAAMrxD,EAAOn8d,KAAK,CAC/B,EAEA,MAAO,CAAE,GAAGm8d,EAAQxuY,UAAS,CACjC,CAE+BwuY,EAAQ,CACnC,GAAG,KAAKirI,kBACRx4E,aAAciiD,GACdxtD,OAAQ,KAAKgkF,WACjB,GAfoC,MAgBxC,CAEA,IAAsBI,gBAAkD,CACpE,OAAO,KAAKc,mBAAmB,CAAE56F,MAAO,KAAKA,MAAO8nC,KAAM,KAAKA,IAAK,EACxE,CAEA,IAAsBmyD,2BAAqC,CACvD,MAAO,CAAC,CAAC,KAAKjvgB,QAAQ0te,kBAC1B,CAEA,IAAsBwhC,qBAA0C,CAC5D,OAAO,KAAKD,0BACNn8c,OACA,IAAO,KAAK45B,OAAOtgG,KAC7B,CAEA,IAAsB+ihB,mBAGlB,CAGA,OAFK,KAAKnvgB,QAAQsqd,iBAEX,KAAKqlD,qBAAqB3vlB,IAAKwjd,IAClC,GAAM,CAAEC,aAAY1tB,cAAaz+O,SAAUksQ,EAErCn8d,EADam8d,EAAOhod,OACAnU,OAAS,EAKnC,MAAO,CAAEo8d,aAAYp8d,QAAOsyK,MAJd,KAAKs1b,0BACb,KAAKQ,YAAYpomB,GACjB0uc,EAE6Bz+O,OAAM,CAC7C,GAX2C,EAY/C,CAEAy4Y,qBAA6B,CACzB/6F,QACAjI,SACAwiG,oBAKgC,CAYhC,OAXK,KAAKvvgB,QAAQsqd,iBAWX,IAAI8iD,GATI,KAAK+B,kBAAkBnvlB,IAAKwjd,IACvC,IAAMxuY,EAAW,CACb5mF,EAAG2+f,EACHxuc,EAAGy2c,EAAM6f,MAAMrxD,EAAOn8d,KAAK,CAC/B,EAEA,MAAO,CAAE,GAAGm8d,EAAQxuY,UAAS,CACjC,CAE+BwuY,EAAQ,CACnC,GAAG,KAAKirI,kBACR3hQ,WAAY,MACZ3lB,SAAU,KAAK+nR,oBACfj5E,aAAciiD,GACdxtD,OAAQ,KAAKgkF,YACbngF,kBACIpyN,EACAqyN,IAGI+gF,EAAiB7imB,IAAIyvT,EAAGsnK,UAAU,EAAUtnK,EAC5CozS,EAAiB7imB,IAAI8hhB,EAAG/qD,UAAU,EAAU+qD,EAEzCryN,CAEf,GA3BoC,MA4BxC,CAEA,IAAsBizS,kBAAoD,CACtE,OAAO,KAAKW,qBAAqB,CAC7B/6F,MAAO,KAAKA,MACZjI,OAAQ,KAAKA,OACbwiG,iBAAkB,KAAKA,gBAC3B,EACJ,CAEA,IAAsBA,kBAAoC,CACtD,OAAO,IAAI1ulB,IACP,KAAKiulB,gBAAgBtrI,OAAOxjd,IAAKwjd,GAAWA,EAAOC,UAAU,EAErE,CAaA,IAAcitI,qBAAkC,CAG5C,IAAME,EAAoB,KAAKlkb,OAC1Bo/X,UAAU,KAAK0kD,YAAY,EAC3B3kD,SAAS,GAAM,KAAK0kD,aAAa,EACjCzlC,QAAQ,GAAM,KAAKwlC,eAAe,EAEjCO,EAAmB,KAAKzrF,WAAWwD,eACrC,KAAKrB,YACL,CACI1K,QAAS,KAAKA,QACd6N,OAAQkmF,EAAkBltH,UAAU,GAAGgnC,OAAA,CAC3C,GAGEomF,EAAoB7uH,KACrBtmb,OAAO,KAAKypd,WAAW8E,OAAO,EAC9B1qb,MAAMoxgB,EAAkBjmF,OAAA,GACvBomF,EAAoBD,EAAkB,KAAK1rF,WAAWn9e,SAAS,EAC/D+okB,EAAkBF,EAAkB,KAAK1rF,WAAWl9e,OAAO,EAE3D4mkB,EAAiB,KAAKc,mBAAmB,CAC3C56F,MAAO67F,EACP/zD,KAAMk0D,CACV,GAEMzB,EAAmB,IAAI1ulB,IACzBiulB,GAAgBtrI,OAAOxjd,IAAKwjd,GAAWA,EAAOC,UAAU,GAS5D,MAAO,CACH57V,KAPqB,KAAKkoe,qBAAqB,CAC/C/6F,MAAO67F,EACP9jG,OAAQgkG,EACRxB,kBACJ,CAGUH,GAAkBhjhB,OAAS,EACjC67C,MAAO6me,GAAgB1ihB,OAAS,CACpC,CACJ,CAGA,IAAcgie,qBAAkC,CAC5C,OAAO,KAAKsiD,mBAChB,CAIA,IAAcriD,cAAuC,CACjD,GAAI,KAAKjpC,WAAWp9Z,UAAUjmE,OAAQ,OACtC,GAAM,CAAE2qI,UAAW,KACb+iY,EAAiB,KAAKlxB,YAAYjC,eAClCqzB,EAAgBF,EAAiB,EAAI,GAAM,KAAK6gD,gBAChD1gD,EAAcH,EAAiB,EAAI,GAAM,KAAK8gD,cACpD,MAAO,CACH1oe,KAAM,KAAKklY,OAAS4iD,EAAgBjjY,EAAO7kD,KAC3CI,MAAOykD,EAAOzkD,OAAS,KAAK60a,KAAO8S,EACvC,CACJ,CAEA,IAAsBpB,sBAAmC,CACrD,IAAMtmjB,EAAS,KAAK83F,QAAQiwd,0BAC5B,MAAO,CACHpob,KAAM67B,KAAKh1J,IAAIxG,GAAQ2/H,MAAQ,EAAG,KAAKumb,oBAAoBvmb,IAAI,EAC/DI,MAAOy7B,KAAKh1J,IAAIxG,GAAQ+/H,OAAS,EAAG,KAAKmmb,oBAAoBnmb,KAAK,CACtE,CACJ,CAEA68E,QAAsC,CAUlC,OATI,KAAKsgU,WAAWp9Z,UAAUjmE,QAEtB0tK,SAAC2xT,GAAD,CACIphb,QAAS,KAAKA,QACd0sF,OAAQ,KAAKn5K,MAAMm5K,OACnB/2J,QAAS,KAAKyvf,WAAWp9Z,UAAUjmE,MACtC,IAILm1P,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIgrG,SAACo9V,IAAD,CACIr6W,KAAM,KAAKyjU,MACXvpV,OAAQ,KAAKygY,gBACb59a,QAAS,CACZ,IACDkgF,SAAC,IAAD,CAAAhrG,SACK,KAAK03b,aAAan8hB,IAAKwjd,IACpB/zQ,SAACi9V,IAAD,CAEYlpF,SACR+hF,UAAW7oC,IACX5lO,YAAa,IACb61J,aAAc,CACjB,EALQ62B,EAAOC,UAKf,EAEN,GACF,KAAK2rI,mBACF3/Y,SAAC4+Y,GAAD,CAAgBxhmB,MAAO,KAAKuimB,gBAAmB,GAElD,KAAKN,iBACFr/Y,SAAC4+Y,GAAD,CAAgBxhmB,MAAO,KAAKiimB,cAAiB,EAEnD,GAEV,C,aACJ,G,80GC1dYxjZ,cAAMpoG,UAANooG,I,KADL,cACKA,I,wCAFX5zH,C,IAUI0qC,E,EAAagjZ,Y,GAIbhjZ,E,EAAapiC,S,CAZNsrH,gB,CAGR,YAAY/3M,EAA8B,CACtC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAcogV,YAAoC,CAC9C,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAAcplb,SAAmC,CAC7C,OAAO,KAAKzsF,MAAM6xgB,WAAWplb,OACjC,CAEA8kH,QAAsC,CAClC,OAAO2K,SAACwhZ,GAAD,CAAkB,GAAI,KAAK19lB,KAAQ,EAC9C,C,aACJ,G,80GCIY+3M,eAJNysX,IAAiB,EAIXzsX,KAAMpoG,U,SADX,cACKooG,G,wCAFX5zH,C,IAUI0qC,E,EAAagjZ,Y,GAIbhjZ,E,EAAapiC,S,GAIboiC,E,EAAaqqD,U,GAIbrqD,E,EAAqBsqD,Q,GAIrBtqD,E,EAAqBqjZ,a,GAIrBrjZ,E,EAAqBm8Z,a,GAMrBn8Z,E,EAAqBmlZ,a,GAMrBnlZ,E,EAAqBinb,oB,GAIrBjnb,E,EAAqBknb,kB,GAIrBlnb,E,EAAqB8iZ,U,GASrB9iZ,E,EAAa6zY,O,GAIb7zY,E,EAAa4yY,O,GAIb5yY,E,EAAqBqse,mB,GAQrBrse,E,EAAqBsse,a,GAcrBtse,E,EAAqB8ue,gB,GAIrB9ue,E,EAAqB+ue,c,GA6DrB/ue,E,EAAqBgve,qB,GAiBrBhve,E,EAAqBsue,qB,GAerBtue,E,EAAqB0jZ,c,GAIrB1jZ,E,EAAqB+5a,c,CA5Ld7wV,e,CAGR,YAAY/3M,EAA8B,CACtC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAcogV,YAAoC,CAC9C,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAAcplb,SAAwB,CAClC,OAAO,KAAKolb,WAAWplb,OAC3B,CAEA,IAAcysF,UAAmB,CAC7B,OAAO,KAAKzsF,QAAQysF,YACxB,CAEA,IAAsBC,QAAiB,CACnC,OAAO,KAAKn5K,MAAMm5K,QAAUkjR,EAChC,CAEA,IAAsB61E,aAAsB,CACxC,OAAO,KAAK/4V,OAAOm/X,SAAS,KAAK6kD,mBAAmB,CACxD,CAEA,IAAsBnyE,aAA0B,CAC5C,GAAM,CAAEA,eAAgB,KAAKv+b,QAE7B,OAAO,IAAIy8b,GAAW,CADL1G,cAAe,GAAME,aAAc,EACjB,GAAGsI,CAAY,EAAG,IAAI,CAC7D,CAEA,IAAsBhX,aAA0B,CAC5C,GAAM,CAAEA,eAAgB,KAAKvnb,QAE7B,OAAO,IAAIy8b,GAAW,CADLzkN,KAAM,GAAM89M,SAAU,GACJ,GAAGvO,CAAY,EAAG,IAAI,CAC7D,CAEA,IAAsB8hC,oBAAqC,CACvD,OAAO,KAAKjkC,WAAWqD,iBAAiB,KAAK8V,WAAW,CAC5D,CAEA,IAAsB+qB,kBAAiC,CACnD,OAAO,KAAKlkC,WAAWwD,eAAe,KAAKrB,WAAW,CAC1D,CAEA,IAAsBrC,UAAqB,CACvC,GAAM,CAAEmkC,qBAAoBC,oBAAqB,KACjD,OAAO,IAAIxtB,GAAS,CAChBpvW,OAAQ,KAAK+4V,YACbJ,eAAgBgkC,EAChB/jC,aAAcgkC,CAClB,EACJ,CAEA,IAAcrzC,OAAwB,CAClC,OAAO,KAAKiP,SAASG,cACzB,CAEA,IAAcrQ,OAAsB,CAChC,OAAO,KAAKkQ,SAASI,YACzB,CAEA,IAAsBmpF,mBAAkC,CACpD,MAAO,CACHhib,SAAUq6S,GAAc,GAAI,KAAKr6S,QAAQ,EACzCD,WAAY,IACZi6J,WAAY,CAChB,CACJ,CAEA,IAAsBioR,aAAgC,CAClD,GAAM,CACFrlD,qBACArpd,QAAS,CAAE0vgB,mBAAmB,IAC9B,KAEJ,OAAO,KAAKhjb,OACP8/R,OAAO,CACJnqT,IAAKqtc,EACL1gc,OAAQ0gc,EAAmBrmD,EAAmBxhf,MAClD,GACC6id,OAAA,CACT,CAEA,IAAsBwmF,gBAAyB,CAC3C,MAAO,IAAM,KAAKxkb,OAAOtgG,KAC7B,CAEA,IAAsB+khB,cAGlB,CAIA,MAHI,CAAC,KAAKnxgB,QAAQsqd,kBAAoB,KAAKtqd,QAAQ0te,mBACxC,GAEJnna,GACH,KAAK6+W,WAAW5hD,OAAOxjd,KAAKwjd,EAAQuqD,KAChC,GAAM,CAAEtqD,aAAY4kD,kBAAiB/wT,QAAOvrE,SAAUy3U,EAGtD,GAAIz3U,IAAO04U,WAKX,MAAO,CAAEhB,aAAYp8d,MAHP,KAAK+9gB,WAAWwH,UAAUmB,GAGZp0W,MAFd0uW,GAAmB5kD,EAEEnsQ,OAAM,CAC7C,GAER,CAEA+5Y,wBAAgC,CAC5BnsF,YAGgC,CAYhC,OAXI,KAAKisF,aAAarimB,SAAW,EAAG,OAW7B,IAAIs+lB,GATI,KAAK+D,aAAanxlB,IAAKwjd,IAClC,IAAMxuY,EAAW,CACb5mF,EAAG82gB,EAASx4V,OAAOzkD,MACnB1pE,EAAG2md,EAASI,aAAauP,MAAMrxD,EAAOn8d,KAAK,CAC/C,EAEA,MAAO,CAAE,GAAGm8d,EAAQxuY,UAAS,CACjC,CAE+BwuY,EAAQ,CACnC,GAAG,KAAKirI,kBACRtnR,SAAU,KAAK+pR,eACfj7E,aAAc8hD,IACdrtD,OAAQ,KAAKgkF,YACbngF,kBACIpyN,EACAqyN,KAEA,IAAM8iF,EAAU,KAAKlsF,WAAW6B,aAAax6gB,IAAI0vT,EAAGsnK,UAAU,EACxD8tI,EAAU,KAAKnsF,WAAW6B,aAAax6gB,IAAI+hhB,EAAG/qD,UAAU,EAE9D,GAAI,CAAC6tI,GAAW,CAACC,EAAS,OAAOp1S,EAEjC,IAAMyxQ,EAASr/C,GAAiB+iF,EAASC,GAIzC,OAHI3jC,GAAQnqG,aAAetnK,EAAGsnK,WAAmBtnK,EAC7CyxQ,GAAQnqG,aAAe+qD,EAAG/qD,WAAmB+qD,EAE1CryN,CACX,CACJ,EACJ,CAEA,IAAsBi1S,qBAEN,CACZ,OAAO,KAAKC,wBAAwB,CAAEnsF,SAAU,KAAKA,QAAS,EAClE,CAaA,IAAsBwrF,qBAA8B,CAChD,IAAMP,EAAsB,IAAIr0E,GAAS,CACrCpvW,OAAQ,KAAKA,OACb24V,eAAgB,KAAKgkC,mBACrB/jC,aAAc,KAAKgkC,gBACvB,GAMMl9d,EAJc,KAAKilhB,wBAAwB,CAC7CnsF,SAAUirF,CACd,CAEcqB,GAAaplhB,OAAS,EACpC,OAAOA,EAAQ,EAAIA,EAAQ2rf,IAAiB,CAChD,CAEA,IAAsBjyD,cAAgD,CAClE,OAAO2J,IAA0B,KAAKrK,WAAW5hD,OAAQ,KAAK0hD,QAAQ,CAC1E,CAEA,IAAsBi3B,cAAgD,CAClE,OAAO,KAAKr2B,aAAa9lgB,IAAKwjd,IAAY,CACtC,GAAGA,EACHt+H,SAAUu+K,GAAgB,CAAE13X,MAAOy3U,EAAOz3U,KAAM,EACpD,GACJ,CAEA+4D,QAAsC,CAUlC,OATI,KAAKsgU,WAAWp9Z,UAAUjmE,QAEtB0tK,SAAC2xT,GAAD,CACIphb,QAAS,KAAKA,QACd0sF,OAAQ,KAAKn5K,MAAMm5K,OACnB/2J,QAAS,KAAKyvf,WAAWp9Z,UAAUjmE,MACtC,IAILm1P,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIgrG,SAAC6iW,GAAD,CACI9/W,KAAM,KAAK0yU,SAASI,aACpB54V,OAAQ,KAAKw4V,SAASO,WACzB,GACA,CAAC,KAAKP,SAASG,eAAeyQ,WAC3BrmU,SAACwjV,GAAD,CACIzgW,KAAM,KAAK0yU,SAASG,eACpB34V,OAAQ,KAAKw4V,SAASx4V,OACtB+lX,kBAAA,EACH,IAELhjV,SAACu9W,GAAD,CAAcxpG,OAAQ,KAAK24E,YAAe,GACzC,KAAKi1D,sBACF3hZ,SAAC4+Y,GAAD,CAAgBxhmB,MAAO,KAAKukmB,mBAAsB,EAExD,GAEV,C,aACJ,G,80GC7NY9lZ,eAJNysX,IAAiB,EAIXzsX,KAAMpoG,U,SADX,cACKooG,G,wCAFX5zH,C,IAUI0qC,E,EAAagjZ,Y,GAIbhjZ,E,EAAapiC,S,GAIboiC,E,EAAaqqD,U,GAIbrqD,E,EAAqBsqD,Q,GAIrBtqD,E,EAAqBqjZ,a,GAIrBrjZ,E,EAAqBm8Z,a,GAOrBn8Z,E,EAAqBmlZ,a,GAMrBnlZ,E,EAAqBinb,oB,GAIrBjnb,E,EAAqBknb,kB,GAIrBlnb,E,EAAqB8iZ,U,GASrB9iZ,E,EAAa6zY,O,GAIb7zY,E,EAAa4yY,O,GAIb5yY,E,EAAqBqse,mB,GAQrBrse,E,EAAqBsse,a,GAcrBtse,E,EAAqB8ue,gB,GAIrB9ue,E,EAAqB+ue,c,GA4DrB/ue,E,EAAqBgve,qB,GAiBrBhve,E,EAAqBsue,qB,GAgBrBtue,E,EACW0jZ,c,GAIX1jZ,E,EAAqB+5a,c,CA9Ld7wV,e,CAGR,YAAY/3M,EAA6B,CACrC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAcogV,YAAmC,CAC7C,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAAcplb,SAAwB,CAClC,OAAO,KAAKolb,WAAWplb,OAC3B,CAEA,IAAcysF,UAAmB,CAC7B,OAAO,KAAKzsF,QAAQysF,YACxB,CAEA,IAAsBC,QAAiB,CACnC,OAAO,KAAKn5K,MAAMm5K,QAAUkjR,EAChC,CAEA,IAAsB61E,aAAsB,CACxC,OAAO,KAAK/4V,OAAOm/X,SAAS,KAAK6kD,mBAAmB,CACxD,CAEA,IAAsBnyE,aAA0B,CAC5C,GAAM,CAAEA,eAAgB,KAAKv+b,QAG7B,OAAO,IAAIy8b,GAAW,CADLxG,aAAc,EACI,GAFlBjH,IAAoC,KAAK5J,UAEpB28B,EAAU,GAAGxjB,CAAY,EAAG,IAAI,CAC1E,CAEA,IAAsBhX,aAA0B,CAC5C,GAAM,CAAEA,eAAgB,KAAKvnb,QAE7B,OAAO,IAAIy8b,GAAW,CADLzkN,KAAM,GAAM89M,SAAU,GACJ,GAAGvO,CAAY,EAAG,IAAI,CAC7D,CAEA,IAAsB8hC,oBAAqC,CACvD,OAAO,KAAKjkC,WAAWqD,iBAAiB,KAAK8V,WAAW,CAC5D,CAEA,IAAsB+qB,kBAAiC,CACnD,OAAO,KAAKlkC,WAAWwD,eAAe,KAAKrB,WAAW,CAC1D,CAEA,IAAsBrC,UAAqB,CACvC,GAAM,CAAEmkC,qBAAoBC,oBAAqB,KACjD,OAAO,IAAIxtB,GAAS,CAChBpvW,OAAQ,KAAK+4V,YACbJ,eAAgBgkC,EAChB/jC,aAAcgkC,CAClB,EACJ,CAEA,IAAcrzC,OAAwB,CAClC,OAAO,KAAKiP,SAASG,cACzB,CAEA,IAAcrQ,OAAsB,CAChC,OAAO,KAAKkQ,SAASI,YACzB,CAEA,IAAsBmpF,mBAAkC,CACpD,MAAO,CACHhib,SAAUq6S,GAAc,GAAI,KAAKr6S,QAAQ,EACzCD,WAAY,IACZi6J,WAAY,CAChB,CACJ,CAEA,IAAsBioR,aAAgC,CAClD,GAAM,CACFrlD,qBACArpd,QAAS,CAAE0vgB,mBAAmB,IAC9B,KAEJ,OAAO,KAAKhjb,OACP8/R,OAAO,CACJnqT,IAAKqtc,EACL1gc,OAAQ0gc,EAAmBrmD,EAAmBxhf,MAClD,GACC6id,OAAA,CACT,CAEA,IAAsBwmF,gBAAyB,CAC3C,MAAO,IAAM,KAAKxkb,OAAOtgG,KAC7B,CAEA,IAAsB+khB,cAGlB,CAGA,OAFK,KAAKnxgB,QAAQmrd,WAEX5kZ,GACH,KAAK6+W,WAAW5hD,OAAOxjd,KAAKwjd,EAAQuqD,KAChC,GAAM,CAAEtqD,aAAY4kD,kBAAiB/wT,QAAOvrE,SAAUy3U,EAGtD,GAAIz3U,IAAO04U,WAKX,MAAO,CAAEhB,aAAYp8d,MAHP,KAAK+9gB,WAAWwH,UAAUmB,GAGZp0W,MAFd0uW,GAAmB5kD,EAEEnsQ,OAAM,CAC7C,IAbiC,EAezC,CAEA+5Y,wBAAgC,CAC5BnsF,YAGgC,CAYhC,OAXI,KAAKisF,aAAarimB,SAAW,EAAG,OAW7B,IAAIs+lB,GATI,KAAK+D,aAAanxlB,IAAKwjd,IAClC,IAAMxuY,EAAW,CACb5mF,EAAG82gB,EAASx4V,OAAOzkD,MACnB1pE,EAAG2md,EAASI,aAAauP,MAAMrxD,EAAOn8d,KAAK,CAC/C,EAEA,MAAO,CAAE,GAAGm8d,EAAQxuY,UAAS,CACjC,CAE+BwuY,EAAQ,CACnC,GAAG,KAAKirI,kBACRtnR,SAAU,KAAK+pR,eACfj7E,aAAc8hD,IACdrtD,OAAQ,KAAKgkF,YACbngF,kBACIpyN,EACAqyN,KAEA,IAAM8iF,EAAU,KAAKlsF,WAAW6B,aAAax6gB,IAAI0vT,EAAGsnK,UAAU,EACxD8tI,EAAU,KAAKnsF,WAAW6B,aAAax6gB,IAAI+hhB,EAAG/qD,UAAU,EAE9D,GAAI,CAAC6tI,GAAW,CAACC,EAAS,OAAOp1S,EAEjC,IAAMyxQ,EAASr/C,GAAiB+iF,EAASC,GAIzC,OAHI3jC,GAAQnqG,aAAetnK,EAAGsnK,WAAmBtnK,EAC7CyxQ,GAAQnqG,aAAe+qD,EAAG/qD,WAAmB+qD,EAE1CryN,CACX,CACJ,EACJ,CAEA,IAAsBi1S,qBAEN,CACZ,OAAO,KAAKC,wBAAwB,CAAEnsF,SAAU,KAAKA,QAAS,EAClE,CAaA,IAAsBwrF,qBAA8B,CAChD,IAAMP,EAAsB,IAAIr0E,GAAS,CACrCpvW,OAAQ,KAAKA,OACb24V,eAAgB,KAAKgkC,mBACrB/jC,aAAc,KAAKgkC,gBACvB,GAMMl9d,EAJc,KAAKilhB,wBAAwB,CAC7CnsF,SAAUirF,CACd,CAEcqB,GAAaplhB,OAAS,EAEpC,OAAOA,EAAQ,EAAIA,EAAQ2rf,IAAiB,CAChD,CAEA,IACYjyD,cAAwD,CAChE,OAAO8J,IAAyB,KAAKxK,WAAW5hD,OAAQ,KAAK0hD,QAAQ,CACzE,CAEA,IAAsBi3B,cAA+C,CACjE,OAAO,KAAKr2B,aAAa9lgB,IAAKwjd,IAAY,CACtC,GAAGA,EACHt+H,SAAUu+K,GAAgB,CAAE13X,MAAOy3U,EAAOz3U,KAAM,EACpD,GACJ,CAEA+4D,QAAsC,CAUlC,OATI,KAAKsgU,WAAWp9Z,UAAUjmE,QAEtB0tK,SAAC2xT,GAAD,CACIphb,QAAS,KAAKA,QACd0sF,OAAQ,KAAKn5K,MAAMm5K,OACnB/2J,QAAS,KAAKyvf,WAAWp9Z,UAAUjmE,MACtC,IAILm1P,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIgrG,SAAC6iW,GAAD,CACI9/W,KAAM,KAAK0yU,SAASI,aACpB54V,OAAQ,KAAKw4V,SAASO,WACzB,GACA,CAAC,KAAKP,SAASG,eAAeyQ,WAC3BrmU,SAACwjV,GAAD,CACIzgW,KAAM,KAAK0yU,SAASG,eACpB34V,OAAQ,KAAKw4V,SAASx4V,OACtB+lX,kBAAA,EACH,IAELhjV,SAACggX,IAAD,CAAajsG,OAAQ,KAAK24E,YAAe,GACxC,KAAKi1D,sBACF3hZ,SAAC4+Y,GAAD,CAAgBxhmB,MAAO,KAAKukmB,mBAAsB,EAExD,GAEV,C,aACJ,G,80GClQY9lZ,cAAMpoG,UAANooG,I,KADL,cACKA,I,wCAFX5zH,C,IAUI0qC,E,EAAagjZ,Y,CARN95T,gB,CAGR,YAAY/3M,EAA0D,CAClE,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAcogV,YAA2C,CACrD,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEAtgU,QAAsC,CAClC,OAAO2K,SAACgiZ,GAAD,CAAyB,GAAI,KAAKl+lB,MAAO4/jB,WAAA,EAAY,EAChE,C,aACJ,G,80GCFY7nX,cAAMpoG,UAANooG,I,KADL,cACKA,I,wCAFX5zH,C,IAUI0qC,E,EAAagjZ,Y,GAIbhjZ,E,EAAapiC,S,GAIboiC,E,EAAaqqD,U,GAIbrqD,E,EAAqBsqD,Q,GAIrBtqD,E,EAAqBqjZ,a,GAIrBrjZ,E,EAAao5Z,Y,GAIbp5Z,E,EAAqBm8Z,a,GAMrBn8Z,E,EAAqBmlZ,a,GAMrBnlZ,E,EAAqBknb,kB,GAIrBlnb,E,EAAqBinb,oB,GAIrBjnb,E,EAAqB8iZ,U,GAQrB9iZ,E,EAAqB65c,W,GAIrB75c,E,EAAaozc,W,CAhENlqX,gB,CAGR,YAAY/3M,EAA8B,CACtC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAcogV,YAAoC,CAC9C,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAAcplb,SAA8B,CACxC,OAAO,KAAKolb,WAAWplb,OAC3B,CAEA,IAAcysF,UAAmB,CAC7B,OAAO,KAAKzsF,QAAQysF,YACxB,CAEA,IAAsBC,QAAiB,CACnC,OAAO,KAAKn5K,MAAMm5K,QAAUkjR,EAChC,CAEA,IAAsB61E,aAAsB,CACxC,OAAO,KAAK/4V,MAChB,CAEA,IAAc8uW,YAAqB,CAC/B,OAAO,KAAK/V,WAChB,CAEA,IAAsB8Y,aAA0B,CAC5C,GAAM,CAAEA,eAAgB,KAAKv+b,QAE7B,OAAO,IAAIy8b,GAAW,CADLxG,aAAc,EACI,GAAGsI,CAAY,EAAG,IAAI,CAC7D,CAEA,IAAsBhX,aAA0B,CAC5C,GAAM,CAAEA,eAAgB,KAAKvnb,QAE7B,OAAO,IAAIy8b,GAAW,CADLxG,aAAc,EACI,GAAG1O,CAAY,EAAG,IAAI,CAC7D,CAEA,IAAsB+hC,kBAAiC,CACnD,OAAO,KAAKlkC,WAAWwD,eAAe,KAAKrB,WAAW,CAC1D,CAEA,IAAsB8hC,oBAAqC,CACvD,OAAO,KAAKjkC,WAAWqD,iBAAiB,KAAK8V,WAAW,CAC5D,CAEA,IAAsBrZ,UAAqB,CACvC,OAAO,IAAI4W,GAAS,CAChBpvW,OAAQ,KAAK+4V,YACbJ,eAAgB,KAAKgkC,mBACrB/jC,aAAc,KAAKgkC,gBACvB,EACJ,CAEA,IAAsB2yB,WAA8B,CAChD,OAAOt+C,IAAY,KAAKvY,WAAY,KAAKK,WAAW,CACxD,CAEA,IAAc+vD,WAAyC,CACnD,OAAOyH,KACFthhB,OAAO,KAAKypd,WAAW2Z,UAAU,EACjCv/b,MAAM,KAAKy8e,SAAS,CAC7B,CAEAn3X,QAAsC,CAUlC,OATI,KAAKsgU,WAAWp9Z,UAAUjmE,QAEtB0tK,SAAC2xT,GAAD,CACIphb,QAAS,KAAKA,QACd0sF,OAAQ,KAAKn5K,MAAMm5K,OACnB/2J,QAAS,KAAKyvf,WAAWp9Z,UAAUjmE,MACtC,IAILm1P,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIgrG,SAACk7V,GAAD,CACIzlC,SAAU,KAAKA,SACfktB,cAAe,GACfK,kBAAmB,EACtB,IACDhjV,SAACutX,GAAD,CACIlF,qBAAsB,KAAK93e,QAC3By+b,YAAa,KAAKrZ,WAAWqZ,YAC7B1B,0BACI,CAAC,CAAC,KAAK/8b,QAAQ+8b,0BAEnBs4C,YAAa,KAAKjwD,WAAW5hD,OAC7B0hD,SAAU,KAAKA,SACfgC,WACK,KAAK9B,WAAWwB,YAAYhsE,UAEvB9nT,OADA,KAAKsyX,WAAW8B,WAG1BsuD,UAAW,KAAKA,UAChBxuG,aAAc,KAAKv6S,SACnB6oZ,mBACI,KAAKlwD,WAAWtsC,eAAerhC,oBAEnCi+H,kBAAmB,EACtB,EACH,GAEV,C,aACJ,G,80GC7G6CpqX,cAAMpoG,UAANooG,I,KAAtC,cAAsCA,I,wCAD5C5zH,C,IAOI0qC,E,EAAa4lZ,c,GAOb5lZ,E,EAAay+c,c,GAmBbz+c,E,EAAasrX,e,CAhC2BpiS,gB,CACzC,YAAY/3M,EAAqC,CAC7C,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAcgjV,cAAwC,CAClD,OAAOlpe,GACH,KAAKvrC,MAAMiwd,OACVA,GAAWA,EAAOo+D,QAAQv6hB,OAASm8d,EAAOynG,IAC/C,CACJ,CAEA,IAAc4V,cAAsC,CAChD,OAAO,KAAK74D,aACPhogB,IAAKwjd,IACF,GAAIA,EAAOq+D,SAAW/uY,OAAW,OAEjC,IAAM1kJ,EAAIo1d,EAAOynG,KACX1sgB,EACFila,EAAOwnG,KAAOxnG,EAAOssD,UAAY,KAAKv8gB,MAAM0ihB,aAE1Ct8W,EAAQ6pT,EAAO6kD,iBAAmB7kD,EAAO/yB,WAK/C,MAAO,CAAE/jR,OAJMZ,EAAOo6J,QAAQvsK,EAAO,CACjC8S,SAAU,KAAKl5K,MAAMk5K,QACzB,GAAGjgL,IAAI,CAAE4B,IAAGmwD,GAAE,CAELmuH,EAAQ/S,QAAO29C,MAAOksQ,EAAOlsQ,KAAM,CAChD,GACC9/J,OAAQmiH,GAAUA,IAAU7mB,OACrC,CAEA,IAAc46V,eAAuC,CACjD,IAAMmzF,EAAe,KAAKA,aAAa7gkB,IAAKwjd,IAAY,CACpD,GAAGA,EAEHj6O,SACIi6O,EAAO92S,OAAOt+K,EAAIo1d,EAAO92S,OAAOtgG,MAChC,KAAK74E,MAAM2xgB,SAASO,YAAYx9Y,KACxC,IAGA,IAAK,IAAIl4H,EAAI,EAAGA,EAAI8wkB,EAAa/xkB,OAAQiB,IAAK,CAC1C,IAAMosT,EAAK0kR,EAAa9wkB,GACxB,GAAIosT,GAAG5yE,SAEP,IAAK,IAAI9gH,EAAI14H,EAAI,EAAG04H,EAAIo4c,EAAa/xkB,OAAQ25H,IAAK,CAC9C,IAAM+lZ,EAAKqyD,EAAap4c,GACpB+lZ,EAAGjlS,UAEH4yE,EAAGzvI,OAAO6oW,WAAW/G,EAAG9hW,MAAM,IAC9B8hW,EAAGjlS,SAAW,GAEtB,CACJ,CAEA,OAAOs3V,EACFrphB,OAAQmiH,GAAU,CAACA,EAAM4vE,QAAQ,EACjCvpO,IAAKwjd,GAAW58T,GAAO48T,EAAQ,CAAC,UAAW,GACpD,CAEA1+Q,QAA6C,CAGzC,OAFK,KAAK4oS,cAAc5+e,QAGpB2gN,SAAC,IAAD,CAAAhrG,SACK,KAAKipY,cAAc1te,KAAK,CAAE25J,QAAO+S,SAAQ4qC,YACtC7H,SAACi9O,GAAD,CAAkB1kc,GAAI2xK,EAAOgzR,aAAc,EACvCloV,UAAAgrG,SAAC,OAAD,CACIrhN,EAAG+5J,EAAYukB,EAAOt+K,CAAC,EACvBmwD,EAAG4pG,EAAYukB,EAAOnuH,CAAC,EACvBkuH,SAAU,KAAKl5K,MAAMk5K,SACrBp7J,KAAMimM,EAEL7yG,SAAAk1D,CACC,EACJ,EATKA,GAWhB,GAhBgC,IAkB3C,C,aACJ,G,80GCvEY2xC,eAJN4sX,IAAgB,EAIV5sX,KAAMpoG,U,SADX,cACKooG,G,wCAFX5zH,C,IAUI0qC,E,EAAagjZ,Y,GAIbhjZ,E,EAAapiC,S,GAIboiC,E,EAAasqD,Q,GAIbtqD,E,EAAaqjZ,a,GAWbrjZ,E,EAAaqqD,U,GAIbrqD,E,EAAa+0Z,e,GAIb/0Z,E,EAAai1Z,a,GAIbj1Z,E,EAAqBsve,wB,GAIrBtve,E,EAAqBmlZ,a,GASrBnlZ,E,EAAqBm8Z,a,GAMrBn8Z,E,EAAqBknb,kB,GAIrBlnb,E,EAAqBinb,oB,GAIrBjnb,E,EAAqB8iZ,U,GAQrB9iZ,E,EAAa6zY,O,GAIb7zY,E,EAAa4yY,O,GAIb5yY,E,EAAa0jZ,c,GASb1jZ,E,EAAqB+5a,c,GAIrB/5a,E,EAAqB+9c,0B,GASrB/9c,E,EAAqBuve,kB,GAIrBvve,E,EAAqBwve,gB,CAhHdtmZ,e,CAGR,YAAY/3M,EAA4B,CACpC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAcogV,YAAkC,CAC5C,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAAcplb,SAAiC,CAC3C,OAAO,KAAKolb,WAAWplb,OAC3B,CAEA,IAAc0sF,QAAiB,CAC3B,OAAO,KAAKn5K,MAAMm5K,QAAUkjR,EAChC,CAEA,IAAc61E,aAAsB,CAChC,OACI,KAAK/4V,OAEAyvW,OAAO,KAAK9E,YAAc,KAAKA,YAAc,EAAI,GAGjDy0B,UAAU,KAAK4lD,uBAAyB,EAAI,EAEzD,CAEA,IAAcjlb,UAAmB,CAC7B,OAAO,KAAKzsF,QAAQysF,YACxB,CAEA,IAAc0qW,eAAwB,CAClC,OAAOrwD,GAAc,GAAI,KAAKr6S,QAAQ,CAC1C,CAEA,IAAc4qW,aAAsB,CAChC,OAAO,KAAKs6E,iBAAmB,KAAKx6E,cAAgB+gD,IAAgB,CACxE,CAEA,IAAsBw5B,wBAAkC,CACpD,MAAO,CAAC,CAAC,KAAK1xgB,QAAQ0te,kBAC1B,CAEA,IAAsBnmD,aAA0B,CAC5C,GAAM,CAAEA,eAAgB,KAAKvnb,QACvBmsb,EAAS,CACX4J,cAAe,GACfD,SAAU,CAAC,KAAK47E,sBACpB,EACA,OAAO,IAAIj1E,GAAW,CAAE,GAAGlV,EAAa,GAAG4E,CAAO,EAAG,IAAI,CAC7D,CAEA,IAAsBoS,aAA0B,CAC5C,GAAM,CAAEA,eAAgB,KAAKv+b,QACvBmsb,EAAS,CAAE2J,SAAU,GAAMC,cAAe,EAAK,EACrD,OAAO,IAAI0G,GAAW,CAAE,GAAG8B,EAAa,GAAGpS,CAAO,EAAG,IAAI,CAC7D,CAEA,IAAsBm9B,kBAAiC,CACnD,OAAO,KAAKlkC,WAAWwD,eAAe,KAAKrB,WAAW,CAC1D,CAEA,IAAsB8hC,oBAAqC,CACvD,OAAO,KAAKjkC,WAAWqD,iBAAiB,KAAK8V,WAAW,CAC5D,CAEA,IAAsBrZ,UAAqB,CACvC,OAAO,IAAI4W,GAAS,CAChBpvW,OAAQ,KAAK+4V,YACbH,aAAc,KAAKgkC,iBACnBjkC,eAAgB,KAAKgkC,kBACzB,EACJ,CAEA,IAAcpzC,OAAwB,CAClC,OAAO,KAAKiP,SAASG,cACzB,CAEA,IAAcrQ,OAAsB,CAChC,OAAO,KAAKkQ,SAASI,YACzB,CAEA,IAAcQ,cAAwC,CAClD,GAAM,CAAE5sN,KAAIC,KAAI6uN,gBAAiB,KAAK5C,WACtC,OAAOo5D,IAAwBx2D,EAAc,CACzC9uN,KACAC,KACA+rN,SAAU,KAAKA,QACnB,EACJ,CAEA,IAAsBi3B,cAAwC,CAC1D,OAAOyiC,IAAwB,KAAK94D,YAAY,CACpD,CAEA,IAAsBq6D,0BAGpB,CACE,OAAO,IAAItgkB,IACP,KAAKimgB,aAAa9lgB,IAAKwjd,GAAW,CAACA,EAAO/yB,WAAY+yB,CAAO,GAErE,CAEA,IAAsBmuI,kBAA4B,CAC9C,OAAO,KAAKvsF,WAAWa,iBAC3B,CAEA,IAAsB2rF,gBAA0C,CAE5D,OADK,KAAKD,iBACH,KAAKvsF,WAAWqB,WAAWL,YAC7BpmgB,IAAKywb,GAAe,KAAK0vI,yBAAyB1zkB,IAAIgkc,IACtDj5Y,OAAQgsa,GAAWA,IAAW1wU,QAHA,EAIvC,CAEAgyD,QAAsC,CAUlC,OATI,KAAKsgU,WAAWp9Z,UAAUjmE,QAEtB0tK,SAAC2xT,GAAD,CACIphb,QAAS,KAAKA,QACd0sF,OAAQ,KAAKn5K,MAAMm5K,OACnB/2J,QAAS,KAAKyvf,WAAWp9Z,UAAUjmE,MACtC,IAILm1P,UAAC,IAAD,CAAAzyL,SAAA,EACIgrG,SAACk7V,GAAD,CAAmBzlC,SAAU,KAAKA,SAAUutB,kBAAA,EAAmB,IAC/DhjV,SAACwuX,IAAD,CACIz6G,OAAQ,KAAK24E,aACb+hC,WAAYa,IAAsB,KAAKj5D,YAAY,EACnDr5V,SAAU,KAAKA,SACfk/Y,gBAAiB,KAAK3re,QAAQ2re,gBAC9B1lD,kBAAmB,KAAKb,WAAWa,iBACtC,IACDx2T,SAACoiZ,IAAD,CACIruI,OAAQ,KAAKouI,eACb1sF,SAAU,KAAKA,SACfz4V,SAAU,KAAK0qW,cACflB,aAAciiD,GACjB,EACF,GAEX,C,aACJ,G,80GC1KYh1d,4B,KADL,cACKA,I,wCAFXxrB,C,IAUI0qC,E,EAAagjZ,Y,GAIbhjZ,E,EAAapiC,S,CAZNkjB,gB,CAGR,YAAY3vG,EAA2B,CACnC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAcogV,YAAiC,CAC3C,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEA,IAAcplb,SAAgC,CAC1C,OAAO,KAAKzsF,MAAM6xgB,WAAWplb,OACjC,CAEA8kH,QAAsC,CAClC,OAAO2K,SAACqiZ,GAAD,CAAe,GAAI,KAAKv+lB,KAAQ,EAC3C,C,aACJ,G,80GCtBY+3M,cAAMpoG,UAANooG,I,KADL,cACKA,I,wCAFX5zH,C,IAUI0qC,E,EAAagjZ,Y,CARN95T,gB,CAGR,YAAY/3M,EAA2B,CACnC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAcogV,YAAiC,CAC3C,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEAtgU,QAAsC,CAClC,OAAO2K,SAACsiZ,GAAD,CAAe,GAAI,KAAKx+lB,KAAQ,EAC3C,C,aACJ,G,80GCfY+3M,cAAMpoG,UAANooG,I,KADL,cACKA,I,wCAFX5zH,C,IAUI0qC,E,EAAagjZ,Y,CARN95T,gB,CAGR,YAAY/3M,EAAsB,CAC9B,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAcogV,YAA4B,CACtC,OAAO,KAAK7xgB,MAAM6xgB,UACtB,CAEAtgU,QAAsC,CAClC,OAAO2K,SAACuiZ,GAAD,CAAU,GAAI,KAAKz+lB,KAAQ,EACtC,C,aACJ,GC0CA,IAAM0+lB,IAAyB,IAAIpylB,IAGjC,CACE,CAAC4hI,EAAoBksT,UAAWA,EAAS,EACzC,CAAClsT,EAAoB2sT,WAAYA,GAAU,EAC3C,CAAC3sT,EAAoBmsT,YAAaqjK,EAAgB,EAClD,CAACxvd,EAAoB0sT,YAAa+jK,GAAgB,EAClD,CAACzwd,EAAoBosT,WAAYskK,GAAe,EAChD,CAAC1wd,EAAoBqsT,mBAAoB2jK,EAAuB,EAChE,CAAChwd,EAAoBssT,YAAaqkK,GAAgB,EAClD,CAAC3wd,EAAoBysT,UAAWmkK,GAAc,EAC9C,CAAC5wd,EAAoB4sT,SAAUyjK,EAAa,EAC5C,CAACrwd,EAAoB6sT,SAAUyjK,EAAa,EAC5C,CAACvwd,GAAkBwwd,EAAQ,CAC9B,GAEKM,IAAyB,IAAIzylB,IAGjC,CACE,CAAC4hI,EAAoBksT,UAAW4kK,EAAkB,EAClD,CAAC9wd,EAAoB2sT,WAAYokK,GAAmB,EACpD,CAAC/wd,EAAoBmsT,YAAa6kK,GAAyB,EAC3D,CAAChxd,EAAoB0sT,YAAaukK,GAAyB,EAC3D,CAACjxd,EAAoBosT,WAAY8kK,GAAwB,EACzD,CAAClxd,EAAoBqsT,mBAAoB8kK,GAAgC,EACzE,CAACnxd,EAAoBssT,YAAa8kK,GAAyB,EAC3D,CAACpxd,EAAoBysT,UAAW4kK,GAAuB,EACvD,CAACrxd,EAAoB4sT,SAAU0kK,GAAsB,EACrD,CAACtxd,EAAoB6sT,SAAU0kK,GAAsB,EACrD,CAACxxd,GAAkByxd,GAAiB,CACvC,GAEKC,IAAgB,IAAIrzlB,IAGxB,CACE,CAAC4hI,EAAoBksT,UAAW44E,EAAc,EAC9C,CAAC9kY,EAAoB2sT,WAAYw7E,GAAe,EAChD,CAACnoY,EAAoBmsT,YAAao9E,GAAqB,EACvD,CAACvpY,EAAoB0sT,YAAa4hF,GAAqB,EACvD,CAACtuY,EAAoBosT,WAAYmiF,GAAoB,EACrD,CAACvuY,EAAoBqsT,mBAAoB0iF,GAA4B,EACrE,CAAC/uY,EAAoBssT,YAAagwF,GAAqB,EACvD,CAACt8Y,EAAoBysT,UAAWwyF,GAAmB,EACnD,CAACj/Y,EAAoB4sT,SAAUi1F,GAAkB,EACjD,CAAC7hZ,EAAoB6sT,SAAUm/F,GAAkB,EACjD,CAACjsZ,GAAkB4sZ,GAAa,CACnC,GAED,SAAgB+kE,GACZ7vY,EACAtjI,EAAA,CAGA,OAAO,KADYkzgB,IAAczmmB,IAAI62N,KAAcijT,IAC7B,CAAEvmb,SAAQ,EACpC,CAEA,SAASozgB,IACL9vY,EACAhsE,EAAUjK,GAAey1Y,QAAA,CAEzB,GAAM,CAAEuwE,WAAUC,qBAAsB7tmB,GAAM6xJ,GACzCwc,KACGltK,GAAEgd,MAAMypI,GAAey1Y,QAASz1Y,GAAekmd,WAAW,OACnD,CACHF,SAAUpB,IACVqB,kBAAmB3lK,EACvB,IAEH75R,KAAKzmB,GAAemhc,eAAkB,CACnC6kB,SAAUf,IACVgB,kBAAmBf,EACvB,IACCv+b,WAAA,EAIL,OAFmBq/b,EAAS5mmB,IAAI62N,IAAcgwY,CAGlD,CAEA,IAAaE,IAAkB,CAC3BxzgB,UACAsjI,YACA8hT,aACA9tX,UAAUjK,GAAey1Y,QACzB,GAAG91U,KAAA,CAEH,IAAMymZ,EAAkBruF,GAAc+tF,GAAe7vY,EAAWtjI,GAC1D0zgB,EAAaN,IAAuB9vY,EAAWhsE,GAGrD,OAAOm4D,SAACikZ,EAAD,CAAY,GAAI1mZ,EAAgBo4T,WAAYquF,CAAkB,EACzE,EAEaE,KAAqB,CAC9B3zgB,UACAsjI,YACA8hT,aACA9tX,UAAUjK,GAAey1Y,QACzB,GAAG91U,KAAA,CAEH,IAAMymZ,EAAkBruF,GAAc+tF,GAAe7vY,EAAWtjI,GAEhE,OAAO,IADYozgB,IAAuB9vY,EAAWhsE,CAC1Co8c,GAAW,CAAE,GAAG1mZ,EAAgBo4T,WAAYquF,CAAgB,EAC3E,ECvKMG,IAAoB,IAIbC,KAAyB,CAClC,YACA,aACA,kBACA,UAAU,KAMA,CACV,IAAMhqE,EAAc,KAAK,IAAItP,EAASzzD,GAAc,GAAIE,CAAY,CAAC,EAC/D76I,EAAc26I,GAChB,GACA,KAAK,IAAIE,EAAA,EAA4B,CACzC,EAiBA,OAAOH,GAFUgjE,EAPIiqE,IAHN,KAAK,IAAIC,EAAWC,EAAazyd,EAI3C,EAASqyd,KAAsB,IAChC,EACA,CAI2B,GAAgBznR,EAAc09M,EAEhC,CACjC,EAEaoqE,IAAwB,EAAe,IAA2B,CAC3E,IAAMC,EAAc9nhB,EAAQvkB,EAE5B,OADI,MAAMqsiB,CAAW,EAAU,EACxBA,CACX,E,80GCkFY5oZ,eAlDN6oZ,IAAgC,IAChCC,IAA4B,IAC5BC,IAA0B,IAE1BC,KACFnoI,EACAnsY,EACAu0gB,KAEA,IAAI7nb,EAASy/S,EACPqoI,EAAO,CACT,CAAEzuf,OAAQ/lB,EAAQu+b,YAAa/rV,KAAM+ha,EAAct+F,KAAM,EACzD,CAAElwZ,OAAQ/lB,EAAQunb,YAAa/0U,KAAM+ha,EAAcv/F,KAAM,CAC7D,EACA,IAAK,GAAM,CAAEjvZ,SAAQysF,UAAUgia,EACtBzuf,GAAWysF,GACZ,CAACzsF,EAAO+va,UAAY/va,EAAOw0a,UAAYznY,SACvC45B,EAASA,EAAOwvW,IAAI,EAAG1pV,EAAK0nV,QAASn0a,EAAOw0a,OAAQ,IAG5D,OAAO7tW,CACX,EAEM+nb,KACFjia,EACAkia,EACAC,IAEKnia,EACDA,EAAKsjV,SAAiB,GACnBtjV,EAAK0nV,UAAUy6E,GAAmB,CAACD,EAAMhomB,IAAI8lM,EAAK0nV,MAAM,EAF7C,GAsBV5uU,KAAMpoG,U,QADX,cACKooG,G,uCAFX5zH,C,IAiBI0qC,E,EAAa+1W,Y,GAIb/1W,E,EAAa0hW,kB,GAOb1hW,E,EAAqBpiC,S,GAIrBoiC,E,EAAqBwye,e,GAIrBxye,E,EAAa04Y,U,GAIb14Y,E,EAAapa,W,GAIboa,E,EAAqBsqD,Q,GAIrBtqD,E,EAAqB6nc,e,GAKrB7nc,E,EAAqB6zZ,c,GAIrB7zZ,E,EAAqByye,uB,GAQrBzye,E,EAAaqqD,U,GAIbrqD,E,EAAqB0ye,oB,GAarB1ye,E,EAAqB2ye,mB,GAQrB3ye,E,EAAqBmlZ,a,GAMrBnlZ,E,EAAqBqqB,c,GAOrBrqB,E,EAAqB4ye,c,GAKrB5ye,E,EAAqB6ye,Y,GAIrB7ye,E,EAAqB8qD,Y,GAarB9qD,E,EAAqB8ye,kB,GAQrB9ye,E,EAAqB+ye,kB,GAmBrB/ye,E,EAAqBgze,0B,GAyIrBhze,E,EAAaize,4B,GAWbjze,E,EAAqBkze,kC,GAIrBlze,E,EAAqBmze,a,GAKrBnze,E,EAAqBoze,oB,GAUrBpze,E,EAAqBqze,gB,GAerBrze,E,EAAqBk1B,S,GAcrBl1B,E,EAAqBsze,e,GAarBtze,E,EAAqBuze,e,GAoBrBvze,E,EAAa0jZ,c,GAuJb1jZ,E,EAAa02W,gB,GAIb12W,E,EAAaqkZ,Y,GAIbrkZ,E,EAAqBwze,c,GAiBrBxze,E,EAAqByze,c,GAcrBzze,E,EAAqB2hW,U,GAIrB3hW,E,EAAqB8gW,c,GAIrB9gW,E,EAAqBqyY,e,GAIrBryY,E,EAAaohW,Q,GAQbphW,E,EAAqB0ze,iB,GAQrB1ze,E,EAAqB2ze,iB,GAMrB3ze,E,EAAqB+ob,Y,GA4CrB/ob,E,EAAqBm9a,S,GAIrBn9a,E,EAAqBi8a,S,GAIrBj8a,E,EAAqBype,gB,GAIrBzpe,E,EAAqButc,a,GAMrBvtc,E,EAAqB8mb,a,GAIrB9mb,E,EAAqBipb,gB,GAIrBjpb,E,EAAqBgpb,kB,GAIrBhpb,E,EAAqBm/c,a,GAKrBn/c,E,EAAqB4tc,c,GAmBrB5tc,E,EAAa4mb,mB,GAgBb5mb,E,EAAa2pb,uB,IA+Bbzlc,IAAOo6D,K,KAAM6vZ,mB,IAKbjqd,IAAOo6D,K,KAAM8vZ,oB,GAgBbpuc,E,EAAqBwpe,uB,GAOrBxpe,E,EAAqB6tc,2B,GAOrB7tc,E,EAAqB4ze,oB,GAIrB5ze,E,EAAqB6ze,wB,GAQrB7ze,E,EAAqB8ze,Q,GA8DrB9ze,E,EACW+ze,oB,CA11BJ7qZ,e,CAGR,YAAY/3M,EAAwB,CAChC,MAAMA,GAENyxL,EAA6C,KAAM,CAC/Coxa,eAAgBvjb,EAAW/wJ,GAC/B,EACJ,CAEAulf,eAAe3zY,EAA6B,CACxC,OAAOA,CACX,CAEA,IAAcykW,YAAwB,CAClC,OAAO,KAAKn4Y,QAAQ0zC,KACxB,CAEA,IAAcowV,kBAA8B,CACxC,OACI,KAAK9jY,QAAQ8jY,kBACb,KAAKujD,eAAe,KAAKlvC,UAAU,CAE3C,CAEA,IAAsBn4Y,SAA6B,CAC/C,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAsB40gB,eAAkC,CACpD,OAAO,KAAKrhmB,MAAMqhmB,eAAiBnzd,EAAoBksT,SAC3D,CAEA,IAAcmtE,UAAoB,CAC9B,MAAO,CAAC,CAAC,KAAK96a,QAAQ86a,QAC1B,CAEA,IAAc9yZ,WAA4B,CACtC,MAAO,CAAEjmE,OAAQ,EAAG,CACxB,CAEA,IAAsB2qI,QAAiB,CACnC,OAAO,KAAKn5K,MAAMm5K,QAAUkjR,EAChC,CAEA,IAAsBq6H,eAAwB,CAC1C,GAAM,CAAE8rC,kBAAiBtpb,YAAa,KACtC,OAAOspb,EAAkB,IAAMtpb,EAAW,KAAQA,CACtD,CAEA,IAAsBwpW,cAAuB,CACzC,MAAO,IAAM,KAAK6+E,kBACtB,CAEA,IAAsBD,uBAAgC,CAClD,IAAMwB,EACF,KAAKlrD,YAAc,KAAK+qD,OAAOrpmB,MAAMg7D,OAAS,EACxC,KAAKquiB,OAAOrpmB,MAAMg7D,OAAS,KAAKoigB,cAChC,EACV,OAAO,KAAKv9Y,OAAOyvW,OAAOk6E,EAC9B,CAEA,IAAc5pb,UAAmB,CAC7B,OAAO,KAAKzsF,QAAQysF,YACxB,CAEA,IAAsBqob,oBAA6B,CAC/C,GAAM,CAAE5pc,OAAMC,WAAY,KAAK+hB,WAK/B,OAAO2mb,IAAsB,CACzBE,UAJc,KAAKrnb,OAAOtgG,MAAQ++E,EAKlC6oc,WAJe,KAAKtnb,OAAO7kH,OAASqjG,EAKpC87T,aAAc,KAAKv6S,QACvB,EACJ,CAEA,IAAsBsob,mBAA4B,CAK9C,OAAS,KAAKD,sBAAuC,GAAM,EAC/D,CAEA,IAAsBvtF,aAA0B,CAC5C,OAAO,IAAIkV,GAAW,KAAKz8b,QAAQunb,YAAa,CAC5C96V,SAAU,KAAKsob,iBACnB,EACJ,CAEA,IAAsBtod,cAAwB,CAI1C,OADI,KAAK86X,YAAYtS,aAAelwX,GAAgB78I,UAC7B68I,GAAgB78I,MAC3C,CAEA,IAAsB8smB,cAAwB,CAE1C,MAAO,EACX,CAEA,IAAsBC,YAAqB,CACvC,OAAO,KAAKzxI,OAAO10d,MACvB,CAEA,IAAsBo+K,YAA6B,CAC/C,IAAMv/H,EAAQ,KAAKsnjB,WACb,CAAE7ohB,QAAOvkB,UAAW,KAAK6kH,OAI/B,OAAO3hB,IAAmB,CACtBp9G,QACAq9G,qBAJyBipc,GAAqB7nhB,EAAOvkB,CAIrDmjG,EACAC,iBAAkB1pB,EACtB,EACJ,CAEA,IAAsB2zd,kBAAuC,CACzD,MAAO,CACH3nb,WAAY7pB,KAAKr+B,MAAM,KAAKyve,kBAAkB,EAC9C1nb,cAAe1pB,KAAKr+B,MAAM,KAAKyve,kBAAkB,EACjDznb,aAAc,CAClB,CACJ,CAEA,IAAsB8nb,kBAA4B,CAC9C,MAAO,EACX,CAGAvtF,0BAAiC,KAAK5nb,SAAS4nb,gBAAkB,IAAI/ngB,KAcrE,IAAsBu1lB,0BAAgD,CAClE,GAAM,CAAEp1gB,UAASwjY,SAAQyxI,aAAYrtF,iBAAgBwuF,kBACjD,KAGE3pb,EAAW,KAAKsob,kBAGhBuB,EAAgB,KAAK5pb,OAAOolW,KAC9B,KAAK5kW,WACL,KAAKgob,gBACT,EAEM,CACF/xI,cACA4Y,cACA7Y,eACAk7D,iBACA1X,kBACAtS,iBACA8S,aACA1gD,aACA69B,uBACAp8d,YACAC,UACA8+e,sBACAP,aACA3L,WACA6wD,kBACAz6iB,OACAo4a,UACAogH,4BACA1pd,EAGEo5b,EACF67E,EAAa,EACP,CAAEr3b,mBAAoB,QAASS,sBAAuB,GAAI,EAC1D,CAAET,mBAAoB,MAAO,EACjC24b,EAAyC,CAC3Cn9E,uBACJ,EACMo9E,EAAyC,CAC3Cp9E,uBACJ,EAIwB,KAAK3sY,eAIzB+pd,EAAkBx+R,KAAO,IAG7B,IAAMtkM,EAAQ,KAAKowV,iBAIb0jD,EAA2B,KAAKrvC,WAAW1re,IAAIi6gB,GAG/CykC,EAAa,CAAC,KAAKgqD,iBAGnBznC,EAAqB,KAAKp2a,UAAYjK,GAAemhc,UAIrDwhB,EACF,KAAK14c,UAAYjK,GAAemhc,WAChC,KAAKxuf,QAAQs3D,UAAYjK,GAAemhc,UACtClkC,EAAmBojB,EACnB,GACA,CAAC,KAAKynC,iBAEZ,OAAO3xI,EAAOxjd,KAAKwjd,EAAQ30d,KACvB,GAAM,CAAE69K,UAAW4pb,EAAcznmB,GAmDjC,MAAO,CACH69K,SACA+pb,cAAe/pb,EACf1sF,SA9CA0zC,QACA+4C,WACA0+X,aACAb,mBACA1D,cACAzjF,cACA4Y,cACA7Y,eACAk7D,iBACA1X,kBACAtS,iBACAwT,iBACAV,aACAM,2BACAhhD,aACA69B,uBACAp8d,YACAC,UACA8+e,sBACAsoC,qBACA7oC,aACA3L,WACA6wD,kBACAz6iB,OACAo4a,UACAogH,2BACAK,uBAAwBqsD,EACxB1oC,qBACAsiC,sBAEAN,iBAAkBhsd,IAClB,GAAG8/U,EAAOxjY,QACVu+b,YAAa,CACT,GAAGg4E,EACH,GAAG,KAAKv2gB,QAAQu+b,YAChB,GAAG/6D,EAAOxjY,QAAQu+b,WACtB,EACAhX,YAAa,CACT,GAAGivF,EACH,GAAG,KAAKx2gB,QAAQunb,YAChB,GAAG/jD,EAAOxjY,QAAQunb,WACtB,CAKAvnb,EACAyjY,WAAYD,EAAOC,UACvB,CACJ,EACJ,CAEA,IAAc4xI,4BAA+C,CACzD,OAAO,KAAKD,yBAAyBp1lB,KAAK,CAAE0sK,SAAQ1sF,aACzC2zgB,IAAkB,CACrB3zgB,UACA0sF,SACA42C,UAAW,KAAKsxY,cAChBt9c,QAAS,KAAKA,OAClB,EACJ,CACJ,CAEA,IAAsBg+c,kCAA4C,CAC9D,OAAO,KAAKV,gBAAkBnzd,EAAoBksT,SACtD,CAEA,IAAsB4nK,aAAkC,CACpD,OAAO,KAAK7ob,OAAOolW,KAAK,KAAK5kW,WAAY,KAAKgob,gBAAgB,CAAC,CAAC,EAAE,EAC5Dxob,MACV,CAEA,IAAsB8ob,oBAAiC,CACnD,IAAMkB,EAASnwc,GACX,KAAK8uc,2BAA2Br1lB,IAAKuV,GAAMA,EAAE84hB,YAAY,GAE7D,MAAO,CACHxmb,KAAM/oF,GAAM43jB,EAAO12lB,IAAK22lB,GAAUA,EAAM9ue,IAAI,IAAM,EAClDI,MAAOnpF,GAAM43jB,EAAO12lB,IAAK22lB,GAAUA,EAAM1ue,KAAK,IAAM,CACxD,CACJ,CAEA,IAAsBwte,gBAA0B,CAC5C,GAAM,CAAEF,eAAgB,KAWxB,OAVKA,EAKU7xc,KAAK/0J,IAChB4mmB,EAAYnphB,MACZmphB,EAAY1tiB,OAAS05E,EAGlBzyI,EAASslmB,IAVS,EAW7B,CAEA,IAAsB98c,SAA0B,CAS5C,OANI,KAAKt3D,QAAQs3D,UAAYjK,GAAemhc,WAGvC,KAAK8mB,kCAGH,KAAKG,eALDpod,GAAemhc,UAGfnhc,GAAey1Y,OAK9B,CAEA,IAAsB4yE,eAAyB,CAM3C,IAAMkB,EACF,KAAKhC,gBAAkBnzd,EAAoBmsT,aAC3C,KAAKgnK,gBAAkBnzd,EAAoBqsT,mBAE/C,OAAO,KAAKrhT,cAAgB,CAACmqd,CACjC,CAEA,IAAsBjB,eAAyB,CAC3C,IAAMkB,EAAsB,CACxBp1d,EAAoBksT,UACpBlsT,EAAoBosT,WACpBpsT,EAAoB0sT,YACpB1sT,EAAoB2sT,UACxB,EAEM,CAAEmnK,eAAgB,KAClBuB,EACF,CAAC,CAACvB,GAAeA,EAAY1tiB,OAASssiB,IAE1C,OACI,KAAKa,eACJ,KAAKS,gBAAkBqB,IACxBD,EAAoB30e,SAAS,KAAK0ye,aAAoB,CAE9D,CAGA,IAAc9uF,cAAoC,CAC9C,GAAM,CAAEuvF,8BAA+B,KAIjC5nF,EAA2B4nF,EAA2Bxve,KACvDyvE,GAAaA,EAASyha,8BAC3B,EAGMpC,EAAuC,CAAC,EAExCH,EAAiB,CACnBpmmB,EAAG,CACC23G,OAAQ,CAAC,EACTixf,aAAe1ha,GAAaA,EAAS2gU,MACrCghG,QAAS,KAAKjC,aACd9smB,OAAQ,KAAKytmB,aACjB,EACAp3iB,EAAG,CACCwnD,OAAQ,CAAC,EACTixf,aAAe1ha,GAAaA,EAAS0/T,MACrCiiG,QAAS,KAAKxqd,aACdvkJ,OAAQ,KAAKwtmB,aACjB,CACJ,EACA9uc,IAAS4tc,GAAM1zlB,SAAS,CAAEilG,SAAQixf,eAAcC,UAAS/umB,YAAA,CAErD,IAAMgvmB,EAAkBp4jB,GACpBu2jB,EAA2Br1lB,IAAIg3lB,GAC9Bxka,GAASA,GAAM5wL,MAEpB,GAAIq1lB,EAAS,CACT,IAAMzC,EAAOjuc,GACT8uc,EAA2Br1lB,IAAIg3lB,IAI7BG,EAAU3C,EAAKx0lB,IAAKwyL,GAASA,EAAK72I,MAAM,EAC9CoqD,EAAOp3G,IAAMmwC,GAAMq4jB,EAAQn3lB,IAAKm/B,GAAMA,EAAE,EAAE,GAC1C4mE,EAAOr3G,IAAMowC,GAAMq4jB,EAAQn3lB,IAAKm/B,GAAMA,EAAE,EAAE,GAG1C,IAAMmze,EAAaxze,GACf01jB,EAAKz9b,QAASy7B,GAASA,EAAKzsF,OAAOusa,YAAc,EAAE,GAEnDA,EAAWxjhB,OAAS,IAAGi3G,EAAOusa,WAAaA,GAG/C,IAAM5oZ,EAAQ5qF,GACV01jB,EAAKz9b,QAASy7B,GAASA,EAAKzsF,OAAO2jB,OAAS,EAAE,GAMlD,GAJIA,EAAM56H,OAAS,IAAGi3G,EAAO2jB,MAAQA,GAIjCwte,EAAiB,CAEjB,IAAM1ka,EAAO0ka,EAAgBx1lB,MAAA,EACvB,CAAEE,QAAS4wL,EAAKk2U,mCAAmC,CACrD3ia,EAAOp3G,IACPo3G,EAAOr3G,GACV,GACDq3G,EAAOw0a,QAAU34gB,EACb1Z,IACAysmB,EAAgBnia,EAAK0nV,QAAUt4gB,EAEvC,CACJ,MAAWs1lB,IACPnxf,EAAOw0a,QAAU28E,EAAgBt1lB,KAEzC,GAQA,IAAMipjB,EAActka,GAChB8uc,EAA2Br1lB,IAAKuV,GAAMA,EAAE64hB,mBAAmB,GAEzD6B,EACF4a,EAAY/7jB,OAAS,EACf,CACI+4H,KAAM/oF,GAAM+rhB,EAAY7qjB,IAAK6+C,GAAMA,EAAEgpE,IAAI,IAAM,EAC/CI,MAAOnpF,GAAM+rhB,EAAY7qjB,IAAK6+C,GAAMA,EAAEopE,KAAK,IAAM,CACrD,EACA6qB,OAOJwjd,EADa,KAAKzB,sBAAsB34E,IAAIy4E,CAC5ByC,EAAWtlF,KAC7B,KAAK5kW,WACL,KAAKgob,gBACT,EACA,OAAO,KAAKE,yBAAyBp1lB,KAAKwjd,EAAQzzd,KAC9C,IAAMwkmB,EAAgBc,EAA2BtlmB,GAC3C,CAAEkmgB,QAAOjB,SAAUu/F,EACnB,CAAE7nb,OAAQ2qb,EAAmBxpb,aAAcyob,EAAcvmmB,GAC3D28K,EAAS2qb,EAEb,IAAK,IAAMC,KAAQzpb,EACfnB,EAASA,EAAO8/R,OAAO,EAClB8qJ,GAAO3C,EAAgB2C,EAC5B,GAGJ5qb,EAASA,EAAOyvW,OAAO,KAAK24E,mBAAqB,KAAK7+E,YAAY,EAGlE,IAAMj2b,EAAU,CACZ,GAAGwjY,EAAOxjY,QACVytb,2BACAwiC,4BACA1xB,YAAa,CACTzI,SAAU2+E,IACNx+F,EACApoV,EACA8mb,GAEJ,GAAGnxI,EAAOxjY,QAAQu+b,YAClB,GAAGi2E,EAAKpmmB,EAAE23G,MACd,EACAwha,YAAa,CACTuO,SAAU2+E,IACNz/F,EACAnnV,EACA8mb,GAEJ,GAAGnxI,EAAOxjY,QAAQunb,YAClB,GAAGitF,EAAKj2iB,EAAEwnD,MACd,CACJ,EACM0wf,EAAgBnC,IAClB5nb,EACA1sF,EACAu0gB,GAEJ,MAAO,CACH,GAAG/wI,EACH92S,SACA+pb,gBACAz2gB,SACJ,CACJ,EACJ,CAEA,IAAc84Y,gBAAiC,CAC3C,OAAOzV,GAAmB,KAAKrjY,QAAQ5C,SAAS,CACpD,CAEA,IAAcqpb,YAAyB,CACnC,OAAO,KAAKzmb,QAAQymb,YAAc,IAAIP,EAC1C,CAEA,IAAsB0vF,cAA8B,CAChD,IAAMlie,EAAQ,KAAKowV,iBAAiBrJ,oBAChC,KAAKqe,eAAerhC,mBACxB,EACA,OAAO,KAAKqhC,eAAerhC,oBAAoBz3b,IAAKyjd,IASzC,CAAEA,aAAYzjY,SAJjB0zC,MAJgBA,EAAM+mV,oBAAoB,CAACgJ,CAAW,CAI/C8zI,EACPn6gB,UAAW,CAACqmY,CAAU,EACtBG,eAAgB1+U,GAAexnE,MAEdsiB,CAAQ,EACjC,CACJ,CAEA,IAAsB61gB,cAA8B,CAChD,OAAO,KAAK9xI,SAAS/jd,IAAKw6D,IAAS,CAC/BipZ,WAAYjpZ,EAAIu7X,YAGhB/1W,QAAS,CACL5C,UAAW,KAAK07Y,eAChB3V,YAAa3oZ,EAAI67E,KACjB6sU,aAAc,CAAC1oZ,EAAI67E,IAAI,EACvButU,eAAgB1+U,GAAeu9B,MACnC,CACJ,GACJ,CAEA,IAAsBshT,UAAyB,CAC3C,OAAO,KAAKb,aAAaljd,IAAKq2I,GAAS,KAAK8hV,WAAW1re,IAAI4pJ,GAC/D,CAEA,IAAsB6sU,cAAyB,CAC3C,OAAOD,GAAuB,KAAKjjY,OAAO,CAC9C,CAEA,IAAsBy0a,eAA+B,CACjD,OAAO,KAAKz0a,QAAQy0a,eAAiB9vX,GAAckiK,IACvD,CAEA,IAAc28K,QAAwB,CAClC,OAAO,KAAKixC,gBAAkB9vX,GAAct1F,OACtC,KAAKwmjB,aACL,KAAKD,YACf,CAIA,IAAsBE,iBAA6C,CAC/D,OAAOvvc,GACH,KAAK8uc,2BAA2Br1lB,IAC3Bs1L,GAAaA,EAASi0W,cAC3B,EAER,CAEA,IAAsBwsD,iBAA2B,CAC7C,OAAO,KAAKD,gBAAgBjwe,KAAMqwe,GAC9BA,EAAOltD,mBAAmBnjb,KAAMwyK,GAAQA,aAAeirC,IAE/D,CAEA,IAAsB6nO,YAAsB,CACxC,GAAM,CAAE4qD,kBAAiBhqD,wBAAuB/C,qBAC5C,KA0BJ,OAzBI,KAAKhpd,QAAQ0te,oBAGb,EADA3hB,EAAsBj9iB,OAAS,GAAKk6iB,EAAkBl6iB,OAAS,GAC9C,GACjBinmB,EAAwB,GAExB,KAAKximB,MAAMqhmB,gBACPnzd,EAAoBqsT,oBACxB,KAAK2mE,gBAAkB9vX,GAAct1F,OAE9B,GAEX,GACI08f,EAAsBj9iB,OAAS,GAO9B,KAAK2lgB,gBAAkB9vX,GAAct1F,QAClC,KAAK97C,MAAMysF,QAAQiob,0BAK/B,CAEAuvF,sBACI3okB,EACyC,CACzC,IAAK,IAAM06gB,KAAkB,KAAKusD,gBAC9B,GAAIvsD,EAAe16gB,KAAUikH,OACzB,OAAOy2Z,EAAe16gB,EAIlC,CAIA,IAAsB0wgB,SAAkB,CACpC,OAAO,KAAK7yX,OAAOt+K,CACvB,CAEA,IAAsBiwiB,SAAkB,CACpC,OAAO,KAAK3xX,OAAOrqB,GACvB,CAEA,IAAsBwpc,gBAAyB,CAC3C,OAAO,KAAKn/a,OAAOtgG,KACvB,CAEA,IAAsBujf,aAA+B,CACjD,OAAO,KAAKomC,gBACN7nd,GAAgBhmB,OAChBgmB,GAAgBrmB,IAC1B,CAEA,IAAsBqhb,aAAkC,CACpD,OAAO,KAAKsuD,sBAAsB,cACtC,CAEA,IAAsBnsD,gBAAqC,CACvD,OAAO,KAAKmsD,sBAAsB,iBACtC,CAEA,IAAsBpsD,kBAAuC,CACzD,OAAO,KAAKosD,sBAAsB,mBACtC,CAEA,IAAsBj2B,aAAmC,CACrD,GAAK,KAAK60B,eACV,MAAO,CAAC,KAAKA,eAAe9+Y,KAAK,CACrC,CAEA,IAAsB04W,cAAoC,CACtD,GAAI,CAAC,KAAKvpD,WAAY,OAGtB,IAAMupD,EAAelxhB,GACjBynH,GACI,KAAK8uc,2BAA2Bt+b,QAASw9b,GACrCA,EAAcnvF,WAAW5hD,OACpBhsa,OAAQgsa,GACL,KAAKijD,WAAW/5gB,IAAI82d,EAAOC,UAAU,GAExCzjd,IAAKwjd,GAAWA,EAAOlsQ,KAAK,KAK7C,OAAO04W,EAAalhkB,OAAS,EAAIkhkB,EAAel9a,MACpD,CAEA,IAAck2Z,mBAAqC,CAa/C,MAZI,CAAC,KAAK+sD,iBAAmB,CAAC,KAAKZ,iBAAyB,GAQzCr2jB,GADFslS,IANgB,KAAK0xR,gBAAgB/+b,QACjDm/b,GAAW,CACJA,KAAOltD,mBAAqB,GAC5BktD,KAAOnqD,uBAAyB,EAE5C,CACoC0rD,CAEhCC,EACCr/T,GAAQA,aAAesrC,EAErBg0R,CACX,CAEA,IAAc5rD,uBAA0C,CACpD,GAAI,KAAKgqD,iBAAmB,CAAC,KAAKZ,iBAAkB,MAAO,GAS3D,IAAMuC,EAAWtzR,IAPiB,KAAK0xR,gBAClC/+b,QAASm/b,GAAW,CACbA,KAAOltD,mBAAqB,GAC5BktD,KAAOnqD,uBAAyB,EACvC,GACAv0f,OAAQ6gP,GAAQA,aAAesrC,EAEA8zR,GAASz3lB,KAExCq4R,EAAKxpS,IAAU,IAAI80U,GAAe,CAAE,GAAGtrC,EAAI9kS,MAAO1E,OAAM,IAc7D,OAVI,KAAK4lgB,gBAAkB9vX,GAAct1F,QAAUqojB,EAAS5omB,QAAU,EAC3D,GAIP,KAAK8lmB,gBAAkBnzd,EAAoB0sT,aAC3C,KAAKymK,gBAAkBnzd,EAAoBosT,WAEpC6pK,EAAS/te,QAAA,EAEb+te,CACX,CAEAtB,eAAoDtjd,OAEtCy9a,kBAAkBl4R,EAA0B,CACtD,KAAKouO,WAAWhlK,MAAA,EAChB,KAAK20P,eAAiB/9T,CAC1B,CAEcm4R,oBAA2B,CACrC,KAAK4lC,eAAiBtjd,MAC1B,CAEAo+a,yBACI74R,GAEI,CAAC,KAAK23R,cAAgB,CAAC,KAAKuR,YAAoBl+D,EAASyf,QAE3C,KAAKy+C,aAAar/c,SAASm2K,EAAI/gF,KAAK,GAGrC,KAAK04W,cAAc9tc,SAASm2K,EAAI/gF,KAAK,EAFhC+rT,EAAS2f,YAGU3f,EAAS4f,MAGtD,IAAsB2oE,uBAAqC,CACvD,OAAOjqD,GACH,KAAKqH,kBACL,KAAKkoB,wBACT,CACJ,CAEA,IAAsBjB,2BAAyC,CAC3D,OAAOtuB,GACH,KAAKoK,sBACL,KAAKmlB,wBACT,CACJ,CAEA,IAAsB8kC,oBAAoD,CACtE,OAAO,KAAKwB,sBAAsB,2BACtC,CAEA,IAAsBvB,wBAEN,CACZ,OAAO,KAAKuB,sBAAsB,+BACtC,CAIA,IAAsBtB,QAAgC,CAiBlD,OAhBI,KAAKH,gBACE,CACH/3lB,KAAM,UACNnR,MAAO,IAAI02iB,GACP,KAAKyF,kBACL,CACIhiF,aAAc,KAAKv6S,SACnB06J,SAAU,KAAK0kR,eACf30c,MAAO,KAAKgyZ,YACZv6a,MAAO,KAAKghc,YACZ57B,SAAU,KAAKsX,eACf9I,UAAW,KAAK6I,gBACpB,EAER,EAEG,CACHptiB,KAAM,cACNnR,MAAO,IAAIsikB,GACP,KAAKpjB,sBACL,CACI/kF,aAAc,KAAKv6S,SACnBrgG,MAAO,KAAKy/gB,eACZl9d,MAAO,KAAKghc,WAChB,EAER,CACJ,CAEAnD,cAA2C,CACvC,GAAM,CAAE0pC,UAAW,KACnB,OAAQA,EAAOl4lB,KAAf,CACI,IAAK,UACD,OACIyxM,SAAC2yV,GAAD,CACIv1iB,MAAOqpmB,EAAOrpmB,MACduB,EAAG,KAAKmxiB,QACRhhf,EAAG,KAAK8/e,QACRj+L,YAAa,CAAC,KAAK06J,SACnB+mC,YAAa,KAAKm0D,mBAClB3zD,YAAa,KAAKupD,sBAClBp9F,YAAa,KAAK+hE,kBAClBhoX,aAAc,KAAKioX,kBACtB,GAET,IAAK,cACD,OACI/gX,SAACs/W,GAAD,CACIlikB,MAAOqpmB,EAAOrpmB,MACduB,EAAG,KAAKmxiB,QACRhhf,EAAG,KAAK8/e,QACRj+L,YAAa,CAAC,KAAK06J,SACnB+mC,YAAa,KAAKo0D,uBAClB5zD,YAAa,KAAK4tB,0BAClBzhE,YAAa,KAAK+hE,kBAClBhoX,aAAc,KAAKioX,kBACtB,EAEb,CACJ,CAEA,IACY2lC,oBAA4D,CACpE,MAAO,CACHhvR,SAAUzjM,IACV8oC,WAAY6nb,IACZ5nb,SAAU,KAAKqob,mBACfjtE,kBAAmB,CAAC,KAAK7nc,QAAQ86a,QACrC,CACJ,CAEArzC,mBAAmC,CAC/BllU,GAAuB,KAAM,aACjC,CAEAuiD,QAAsC,CAClC,GAAM,CAAEmxU,eAAckgF,qBAAoBhrD,cAAe,KACzD,OACIj0Q,YAAOkyC,SAAP,CAAA3kO,SAAA,CACK0mc,GAAc,KAAKqhB,aAAA,EACnB,KAAK1mD,aAAa9lgB,KAAK43lB,EAAY/omB,KAChC,GAAM,CAAE69K,SAAQ+pb,gBAAehzI,cAAem0I,EAExCC,EAAoB,KAAKrC,mBAAmB3te,KAC5Ciwe,EACFrB,EAAcrqhB,MAAQyrhB,EAEtBE,EAAmB,IAAIlxE,GAAiB,CACxC3id,KAAMu/Y,EACN,GAAG0yI,CACP,GAGA,GAAI4B,EAAiB3rhB,MAAQ0rhB,EAAqB,CAC9C,GAAM,CAAErrb,WAAUD,cAAe2pb,EAMjC4B,EAAmB,IAAIlxE,GAAiB,CACpC3id,KANmBiiQ,GACnBs9I,EACAq0I,EACA,CAAErrb,WAAUD,YAAW,CAGjBwrb,EACN,GAAG7B,CACP,EACJ,CAEA,OACIj/T,YAAOkyC,SAAP,CAAA3kO,SAAA,EACIgrG,SAAC+oV,GAAD,CACI3riB,MAAOkrmB,EACP3pmB,EAAGqomB,EAAcromB,EAAIypmB,EACrBt5iB,EACIk4iB,EAAcp0c,IACd01c,EAAiBlwiB,OACjBoud,CAEP,IACDxmU,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY0gU,GACfh/W,UAAAgrG,SAAC+jZ,GAAD,CACIxzgB,QAAS43gB,EAAW53gB,QACpBsjI,UAAW,KAAKsxY,cAChBt9c,QAAS,KAAKA,QACNo1B,QACX,EACF,EACS,GAlBK79K,EAoB7B,EACY,GAExB,C,aACJ,G,80GCl+BYy8M,cAAMpoG,UAANooG,I,KADL,cACKA,I,wCAFX5zH,C,IAkBI0qC,E,EAAa+1W,Y,GAIb/1W,E,EAAa0hW,kB,GAOb1hW,E,EAAqBpiC,S,GAIrBoiC,E,EAAqBsR,O,GAIrBtR,E,EAAqBokZ,6B,GAIrBpkZ,E,EAAa04Y,U,GAIb14Y,E,EAAapa,W,GAUboa,E,EAAqBn6F,W,GAIrBm6F,E,EAAqBl6F,S,GAIrBk6F,E,EAAqBsqD,Q,GAKrBtqD,E,EAAqByye,uB,GAcrBzye,E,EAAqBoqC,a,GAIrBpqC,E,EAAaqqD,U,GAIbrqD,E,EAAqB61e,e,GAIrB71e,E,EAAqBs1W,W,GAIrBt1W,E,EAAqBm/d,a,GAgDrBn/d,E,EAAqB8ye,kB,GAQrB9ye,E,EAAqBi1Z,a,GAIrBj1Z,E,EAAqB6zZ,c,GAIrB7zZ,E,EAAaohW,Q,IAQbl9W,IAAOo6D,K,KAAM0rb,4B,GAUbhqe,E,EAAqBgze,0B,GA6ErBhze,E,EAAqB81e,0B,GAkBrB91e,E,EAAa+1e,yB,GAIb/1e,E,EAAqB8qD,Y,GAIrB9qD,E,EAAqBg2e,kB,GAMrBh2e,E,EAAa0jZ,c,GAYb1jZ,E,EAAqBmnb,gB,GAMrBnnb,E,EAAqBm9a,S,GAIrBn9a,E,EAAqB6pe,gB,GAarB7pe,E,EAAqBuuc,iB,GASrBvuc,E,EAAqBype,gB,GAIrBzpe,E,EAAqB4mb,mB,GAIrB5mb,E,EAAqB2pb,uB,GAIrB3pb,E,EAAqB0pe,qB,GAIrB1pe,E,EAAqB2pe,sB,GAIrB3pe,E,EAAqB+mb,c,IAIrB7ic,IAAOo6D,K,KAAM6vZ,mB,IAIbjqd,IAAOo6D,K,KAAM8vZ,oB,GAIbpuc,E,EAAqB4pe,qB,GAcrB5pe,E,EAAqB6mb,oB,GAqCrB7mb,E,EAAqBwpe,uB,GAOrBxpe,E,EAAqB6tc,2B,GAOrB7tc,E,EAAqB4ze,oB,GAIrB5ze,E,EAAqB6ze,wB,CAhbd3qZ,gB,CAKR,YAAY/3M,EAAsB,CAC9B,MAAMA,GACNyxL,EAA2C,KAAM,CAC7Coxa,eAAgBvjb,EAAW/wJ,GAC/B,EACJ,CAPAs0kB,0BAAoDtjd,QASpDu0X,eAAe3zY,EAA6B,CACxC,OAAOA,CACX,CAEA,IAAcykW,YAAwB,CAClC,OAAO,KAAKn4Y,QAAQ0zC,KACxB,CAEA,IAAcowV,kBAA8B,CACxC,OACI,KAAK9jY,QAAQ8jY,kBACb,KAAKujD,eAAe,KAAKlvC,UAAU,CAE3C,CAEA,IAAsBn4Y,SAA2B,CAC7C,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAsB0zC,OAAmB,CACrC,OAAO,KAAK1zC,QAAQ0zC,KACxB,CAEA,IAAsB8yY,6BAAqD,CACvE,OAAO,KAAKxmb,QAAQ8jY,gBACxB,CAEA,IAAcg3C,UAAoB,CAC9B,MAAO,CAAC,CAAC,KAAK96a,QAAQ86a,QAC1B,CAEA,IAAc9yZ,WAA4B,CAOtC,OANI,KAAKhoB,QAAQ/3D,YAAc6qH,OACpB,CAAE/wG,OAAQ,wBAAyB,EAE1C,KAAKi+C,QAAQ93D,UAAY4qH,OAClB,CAAE/wG,OAAQ,sBAAuB,EAErC,CAAEA,OAAQ,EAAG,CACxB,CAEA,IAAsB9Z,WAAkB,CACpC,OAAO,KAAK+3D,QAAQ/3D,SACxB,CAEA,IAAsBC,SAAgB,CAClC,OAAO,KAAK83D,QAAQ93D,OACxB,CAEA,IAAsBwkJ,QAAiB,CAEnC,OADe,KAAKn5K,MAAMm5K,QAAUkjR,IACtBusF,OAAO,EACzB,CAEA,IAAsB04E,uBAAgC,CAClD,OACI,KAAKnob,OAEAyvW,OAAO,KAAK9E,YAAc,KAAKpB,YAAY,EAE3C61B,UACG,KAAK3C,gBAEDkvD,CAGpB,CAEA,IAAsB7rc,aAA4B,CAC9C,MAAO,CAAC,KAAKvkI,UAAW,KAAKC,OAAO,CACxC,CAEA,IAAcukJ,UAAmB,CAC7B,OAAO,KAAKzsF,QAAQysF,YACxB,CAEA,IAAsBwrb,eAAwB,CAC1C,OAAOnxI,GAAc,GAAI,KAAKr6S,QAAQ,CAC1C,CAEA,IAAsBirT,WAAuB,CACzC,OAAO,KAAK13Y,QAAQ03Y,WAAa,IAAInC,EACzC,CAEA,IAAsBgsH,aAA2B,CAC7C,GAAM,CAAEj1c,UAAW,KAAKorV,UACxB,OAAOrC,GAAc/oV,EACzB,CAEAgsd,cAAsB5rb,EAAgC,CAKlD,IAAM6rb,EAAmB,CAAErtc,KAAM,EAAGC,QAAS,EAAGx9G,MAAO,CAAE,EACnD6qjB,EAAiB,CAAEttc,KAAM,EAAGC,QAAS,EAAGx9G,MAAO,CAAE,EAEvD,GAAI,KAAK+pb,UAAU7qV,MAAM4sR,SACrB,OAAO/sP,EAAOtgG,MAAQsgG,EAAO7kH,OACvB0wiB,EACAC,EAEV,IAAMC,EAAiB,KAAKlX,YAAY75b,MAGlCgxc,EAA8BzE,GAChCvnb,EAAOtgG,MAAQ,EACfsgG,EAAO7kH,MACX,EAGM8wiB,EAA4B1E,GAC9Bvnb,EAAOtgG,MACPsgG,EAAO7kH,OAAS,GAGd+wiB,EAAiBl1c,KAAKqC,IACxBrC,KAAKm1c,KAAKJ,EAAiBC,IAEzBI,EAAep1c,KAAKqC,IACtBrC,KAAKm1c,KAAKJ,EAAiBE,IAO/B,OAAOC,GAFM,KAAKlhI,UAAUprV,SAAW3B,GAAc8pV,MAAQ,GAAM,IAEnCqkI,EAC1BP,EACAC,CACV,CAEA,IAAsBtD,kBAAuC,CACzD,MAAO,CACH3nb,WAAY7pB,KAAKr+B,MAAM,KAAKgyZ,YAAc,KAAKpB,YAAY,EAC3D7oW,cAAe1pB,KAAKr+B,MAAM,KAAKgyZ,WAAW,EAC1ChqW,aAAc,CAClB,CACJ,CAEA,IAAsBgqW,aAAsB,CACxC,OAAO,KAAK4gF,aAChB,CAEA,IAAsBhiF,cAAuB,CACzC,MAAO,IAAM,KAAKgiF,aACtB,CAEA,IAAcz0I,QAA2B,CACrC,OAAO,KAAKh3T,YAAYxsJ,IAAK83B,IAAU,CACnC2rb,WAAY,KAAK/vV,MAAMg8U,WAAW9R,WAAW9la,GAE7CkoD,QAAS,CAAEwK,WAAY1yD,CAAK,CAChC,GACJ,CAEcs0jB,2BACV9lf,EACAv1G,EACI,CACJ,KAAKivF,QAAQ+4gB,WAAW3M,2BAA2B9lf,EAAQ,CACvD,GAAG,KAAKtmB,QAAQg5gB,iBAChBjomB,QACJ,EACJ,CAEA,IAAsBqkmB,0BAAmD,CACrE,GAAM,CACFp1gB,UACAwjY,SACA9vV,QACA8yY,8BACAh6W,cACA+0b,cACA0W,gBACA7B,iBACAhK,8BACA,KAIE1/a,EAAS,KAAKA,OACd4pb,EAAgB5pb,EAAOolW,KACzB,KAAKwmF,cAAc5rb,GACnB,KAAKwob,gBACT,EAEM,CACFp6F,WACA3/B,gBAAgB,GAChBzD,YACAg4D,0BACAt2B,wBACA8N,aACAvP,kBACAzmf,OACAo4a,UACAogH,2BACAzrE,6BACA+1B,YACA7wC,cACAu+H,eACA/1B,mBACA3re,EAEJ,OAAOwjY,EAAOxjd,KAAKwjd,EAAQ30d,KACvB,GAAM,CAAE69K,UAAW4pb,EAAcznmB,GA6BjC,MAAO,CACH69K,SACA1sF,SA5BA0zC,QACAowV,iBAAkB0iD,EAClB/5V,SAAUwrb,EACV9sD,WAAY,GACZrwC,WACA3/B,gBACAzD,YACAg4D,0BACAt2B,wBACA8N,aACAvP,kBACAzmf,OACAo4a,UACAogH,2BACAK,uBAAwBqsD,EACxBhK,6BACAnuH,6BACAkvH,0BAA2B3gc,EAC3B+0b,cACAvtF,YACA7wC,cACAu+H,eACA/1B,kBACA,GAAGnoG,EAAOxjY,OAKVA,EACAyjY,WAAYD,EAAOC,UACvB,CACJ,EACJ,CAEA,IAAsBy0I,0BAAuC,CACzD,OAAO,KAAK9C,yBAAyBp1lB,KAChC,CAAE0sK,SAAQ1sF,aACP2zgB,IAAkB,CACd3zgB,UACA0sF,SACA42C,UAAW9hF,GACX8V,QAAS,KAAKt3D,QAAQs3D,OAC1B,GAEZ,CAQA,IAAc6gd,yBAAoC,CAC9C,OAAO,KAAKD,yBAAyB,EACzC,CAEA,IAAsBhrb,YAA6B,CAC/C,OAAO,KAAKorb,cAAc,KAAKzD,qBAAqB,CACxD,CAEA,IAAsBuD,kBAA+C,CACjE,OAAO,KAAKlrb,WAAWhiB,KAAO,KAAKgiB,WAAW/hB,QACxC,UACA,cACV,CAEA,IAAc26W,cAAuC,CAEjD,IAAMwwF,EADS,KAAKzB,sBACS/iF,KACzB,KAAK5kW,WACL,KAAKgob,gBACT,EACA,OAAO,KAAKE,yBAAyBp1lB,KAAKwjd,EAAQzzd,KAC9C,GAAM,CAAE28K,UAAW4pb,EAAcvmmB,GACjC,MAAO,CAAE,GAAGyzd,EAAQ92S,QAAO,CAC/B,EACJ,CAEA,IAAsB68X,gBAEN,CACZ,OAAO,KAAK4uD,wBAAwB5uD,cACxC,CAEA,IAAsBhK,SAAkB,CACpC,OAAO,KAAK7yX,OAAOt+K,CACvB,CAEA,IAAsB69lB,gBAAyB,CAE3C,OADK,KAAKhjD,mBAEN,KAAKv8X,OAAO1d,OACZ,KAAK88b,uBAGJ,KAAKE,oBACA,KAAKD,uBACL,GAR2B,CAUzC,CAEA,IAAsBp7B,iBAA0B,CAE5C,OADK,KAAKq7B,oBAEN,KAAKt/a,OAAO1d,OACZ,KAAK+8b,uBAH6B,CAM1C,CAEA,IAAsBF,gBAAyB,CAC3C,OAAO,KAAKn/a,OAAOtgG,MAAQ2+gB,GAC/B,CAEA,IAAsB/hD,mBAAqC,CACvD,OAAO,KAAKO,gBAAgBP,mBAAqB,EACrD,CAEA,IAAsB+C,uBAA0C,CAC5D,OAAO,KAAKxC,gBAAgBwC,uBAAyB,EACzD,CAEA,IAAsB+/C,qBAA8B,CAChD,OAAO,KAAK7iD,oBAAoBphf,QAAU,CAC9C,CAEA,IAAsBkkiB,sBAA+B,CACjD,OAAO,KAAKC,qBAAqBnkiB,QAAU,CAC/C,CAEA,IAAsBshf,cAAuB,CACzC,OAAO,KAAK4iD,qBAAuB,KAAKD,mBAC5C,CAEcv7B,kBAAkBl4R,EAA0B,CACtD,KAAK+9T,eAAiB/9T,CAC1B,CAEcm4R,oBAA2B,CACrC,KAAK4lC,eAAiBtjd,MAC1B,CAEA,IAAsBk5c,qBAEN,CACZ,GAAI,OAAKjgD,sBAAsBj9iB,QAAU,GACzC,OAAO,IAAIqgkB,GACP,KAAKpjB,sBACL,CACI/kF,aAAc,KAAKv6S,SACnBrgG,MAAO,KAAKy/gB,eACZl9d,MAAOuf,GAAgBhmB,MAC3B,EAER,CAEA,IAAsB+gb,oBAEN,CACZ,GAAI,OAAKD,kBAAkBl6iB,QAAU,GACrC,OAAO,IAAIy0iB,GAAkC,KAAKyF,kBAAmB,CACjEhiF,aAAc,KAAKv6S,SACnB06J,SAAU,KAAK0kR,eACfl9d,MAAOuf,GAAgBhmB,MAC3B,EACJ,CAEAgpc,yBACI74R,GAEI,CAAC,KAAK+9T,gBAAkB,CAAC,KAAK1+H,UAAUy0H,aACjC9oF,EAASyf,QAIhB,KAAKszE,gBAAkB/9T,EAAI19G,OAAO,KAAKy7a,cAAc,GAKrD,KAAK1+H,UAAUy0H,cACA,KAAK+L,yBAAyBl4lB,IAAKi5lB,GAC9CA,EAAS7zF,WAAW5hD,OAAO1+T,KACtB9lH,GAAMA,EAAEykb,aAAe,KAAKiU,UAAUy0H,YAC3C,CAEA3oI,EAAO39V,KAAM7mF,GAAMA,GAAGs4K,QAAU+gF,EAAI/gF,KAAK,EAClC+rT,EAAS2f,YAGjB3f,EAAS4f,MAGpB,IAAsB2oE,uBAAqC,CACvD,OAAOjqD,GACH,KAAKqH,kBACL,KAAKkoB,wBACT,CACJ,CAEA,IAAsBjB,2BAAyC,CAC3D,OAAOtuB,GACH,KAAKoK,sBACL,KAAKmlB,wBACT,CACJ,CAEA,IAAsB8kC,oBAAoD,CACtE,OAAO,KAAKzsD,gBAAgBsB,wBAChC,CAEA,IAAsBorD,wBAEN,CACZ,OAAO,KAAK1sD,gBAAgB+B,4BAChC,CAEA7jF,mBAAmC,CAC/BllU,GAAuB,KAAM,WACjC,CAEA22c,iBAAyB1sd,EAGvB,CACE,GAAM,CAAEkrV,YAAWu+C,gBAAiB,KAC9B,CAAEvpW,UAAWlgC,EAEb8/Y,EAAS5/W,EAAO04X,QAClBtc,EAASp8W,EAAOrqB,IAAM4zX,EAG1B,GACIv+C,EAAU7qV,MAAM4sR,UAChBi+D,EAAUprV,SAAW3B,GAAc8pV,MAEnC,MAAO,CAAErme,EAAGk+hB,EAAQ/te,EAAGuqe,CAAO,EAMlC,IAAM2vE,EAAiBpjI,GAAcZ,MAAM/sU,MAIvCyxc,EADazsb,EAAOtgG,MACGqshB,EAO3B,GANIU,EAAYzsb,EAAO7kH,SACnBsxiB,EAAYzsb,EAAO7kH,QAKnBsxiB,EAAYzsb,EAAO7kH,OAAQ,CAC3B,IAAMuxiB,GAAU1sb,EAAO7kH,OAASsxiB,GAAa,EAC7CrwE,EAASplY,KAAKh1J,IAAIo6hB,EAAQA,EAASswE,EAAS,EAAInjF,EACpD,CAEA,MAAO,CAAE7nhB,EAAGk+hB,EAAQ/te,EAAGuqe,CAAO,CAClC,CAEA4jE,iBAA8C,CAC1C,GAAM,CAAEzjD,qBAAoB+iD,uBAAwB,KAEpD,OACI90T,UAAAsxC,WAAA,CAAA/jO,SAAA,CACKwkc,IACGx5V,SAAC2yV,GAAD,CACIv1iB,MAAOo8iB,EACP76iB,EAAG,KAAKmxiB,QACRhhf,EAAG,KAAK0tiB,eACR7rP,YAAa,CAAC,KAAK06J,SACnB+mC,YAAa,KAAKm0D,mBAClB3zD,YAAa,KAAKupD,sBAClBp9F,YAAa,KAAK+hE,kBAClBhoX,aAAc,KAAKioX,kBACtB,GAEJw7B,IACGv8Y,SAACs/W,GAAD,CACIlikB,MAAOm/lB,EACP59lB,EAAG,KAAKmxiB,QACRhhf,EAAG,KAAKoygB,gBACRvwN,YAAa,CAAC,KAAK06J,SACnB+mC,YAAa,KAAKo0D,uBAClB5zD,YAAa,KAAK4tB,0BAClBzhE,YAAa,KAAK+hE,kBAClBhoX,aAAc,KAAKioX,kBACtB,EAEP,GAEV,CAEA6oC,qBAAyD,CACrD,GAAM,CACF3hI,YACA0gI,mBACAvD,sBAAuBnob,GACvB,KAmBJ,OAdIgrT,EAAUprV,SAAW3B,GAAc8pV,OACnC2jI,IAAqB,gBAGjB3oZ,SAAC,OAAD,CACIzjC,GAAI7jB,EAAYukB,EAAO04X,OAAO,EAC9Bh5X,GAAIjkB,EAAYukB,EAAOrqB,GAAG,EAC1B8pB,GAAIhkB,EAAYukB,EAAO04X,OAAO,EAC9B/4X,GAAIlkB,EAAYukB,EAAO1d,MAAM,EAC7B6nI,OAAQ9B,GACX,GAIF,IACX,CAEAjwF,QAAsC,CAClC,GAAM,CAAEmzZ,iBAAkB,KAC1B,OACI/gU,UAAAsxC,WAAA,CAAA/jO,SAAA,CACK,KAAKiof,gBAAA,EACL,KAAK2M,oBAAA,EACL,KAAKvzF,aAAa9lgB,IAAKwjd,IACpB,GAAM,CAAE92S,SAAQ+2S,cAAeD,EAE/B,OACItsL,YAAOkyC,SAAP,CAAA3kO,SAAA,EACIgrG,SAAC,OAAD,CACI,GAAI,KAAKypZ,iBAAiB11I,GAC1Bnyc,KAAM6jR,GACNzoH,SAAUwrb,EACVnrQ,WAAW,SACXrtQ,MAAO,CAAE+sF,WAAY,GAAI,EAExB/nE,SAAAg/W,CACC,IACNh0Q,SAAC,IAAD,CAAGznN,GAAI+6J,EAAY0gU,GACfh/W,UAAAgrG,SAAC+jZ,GAAD,CACIxzgB,QAASwjY,EAAOxjY,QAChBsjI,UAAW9hF,GACX8V,QAAS,KAAKt3D,QAAQs3D,QACdo1B,QACX,EACF,EACS,GAlBK+2S,EAoB7B,EACF,GAEV,C,aACJ,G,80GCrmBsCn4Q,cAAMpoG,UAANooG,I,IAA/B,cAA+BA,I,uCADrC5zH,C,IAOI0qC,E,EAAqBpiC,S,GAIrBoiC,E,EAAqBsqD,Q,GAIrBtqD,E,EAAqBk3e,sB,GAUrBl3e,E,EAAqBgjZ,Y,CAxBY95T,gB,CAClC,YAAY/3M,EAA8B,CACtC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAsBhlG,SAAiC,CACnD,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAsB0sF,QAAiB,CACnC,OAAO,KAAKn5K,MAAMm5K,OAAO+2T,SAAS,KAAKlwe,MAAMkwe,UAAY,EAC7D,CAEA,IAAsB61H,sBAEN,CACZ,GAAM,CAAEt5gB,WAAY,KACpB,GAAIA,GAAQkrZ,aACZ,IAAIlrZ,EAAQg8Y,WAAY,OAAOx6V,GAC/B,GAAIxhD,EAAQkza,aAAc,OAAOlza,EAAQq0a,eADV7yX,CAGnC,CAEA,IAAsB4jY,YAAqC,CACvD,GAAK,KAAKk0F,qBACV,OAAOnG,GAAe,KAAKmG,qBAAsB,KAAKt5gB,OAAO,CACjE,CAEAu5gB,+BAA4D,CACxD,OACI9pZ,SAAC,gBAAD,CAAe,GAAI,KAAK/iC,OAAO+uV,QAAA,EAC3Bh3Z,UAAAgrG,SAACu9O,GAAD,CAAkB91S,MAAM,iBAAmB,EAChC,EAEvB,CAEAsid,uBAA2D,CACvD,GAAM,CAAE9sb,SAAQ1sF,UAASs5gB,uBAAsBl0F,cAAe,KAiB9D,OAfKk0F,EAEDt5gB,EAAQg0a,UACDslG,gBACH7pZ,SAACgqZ,IAAD,CAAkB/sb,SAAiB1sF,SAAU,IAE7CyvH,SAACiqZ,GAAD,CACYhtb,SACC1sF,UACT40gB,cAAe0E,CAClB,GAGJl0F,GAGD31T,SAAC+jZ,GAAD,CACaxzgB,UACTsjI,UAAWg2Y,EACCl0F,aACZ9tX,QAASt3D,EAAQs3D,QACTo1B,QACX,GATmB,KAbU,IAwBtC,CAEAitb,kBAA+C,CAC3C,GAAM,CAAEvthB,QAAOvkB,UAAW,KAAKt0D,MAAMm5K,OAQrC,OACI+iC,SAAC,MAAD,CAAKhwH,MAAOm6gB,CANZ5khB,SAAU,WACVysR,MAAO,OACP55S,QAIY+xiB,EACRn1f,UAAAyyL,UAAC,MAAD,CACI,GAAIgvL,GAAiB,KAAKlmY,OAAO,EAC1B5T,QACCvkB,SACR+hY,QAAS,OAAOx9W,EAAM,GAAGvkB,IAJ7B48C,SAAA,EAMIgrG,SAACw2Q,IAAD,CACIj5S,MAAO,KAAKhtF,QAAQ0hgB,aACpBlwJ,SAAU,KAAKxxW,QAAQ2re,eAC1B,GACA,KAAK3re,QAAQv3C,QACR,KAAK+wjB,sBAAA,EACL,KAAKD,8BAAA,CACV,C,EACJ,EAEb,CAEAM,iBAA8C,CAC1C,GAAM,CAAEntb,UAAW,KACbktb,EAAsC,CACxC5khB,SAAU,WACV,GAAG03F,EAAOwgR,MAAA,CACd,EACA,OACIz9O,SAAC,MAAD,CAAKn/L,UAAU,qBAAqBmvE,MAAOm6gB,EACtCn1f,SAAA,KAAKzkB,QAAQv3C,SACVgnK,SAACqqZ,IAAD,CAAmBptb,SAAQ1sF,QAAS,KAAKA,OAAU,IAEnDyvH,SAACu9O,GAAD,CAAkB91S,MAAM,iBAAmB,EAE9C,EAEb,CAEAuwZ,cAA0C,CAKtC,OAFI,KAAKznd,QAAQkrZ,aAAqB,MAGlCh0M,UAAC,IAAD,CACIlvS,GAAI+6J,EAAYusS,KAChB7vW,MAAO,CAAEs6c,cAAe,MAAO,EAFnCt1b,SAAA,EAIIgrG,SAACw2Q,IAAD,CACIj5S,MAAO,KAAKhtF,QAAQ0hgB,aACpBlwJ,SAAU,KAAKxxW,QAAQ2re,eAC1B,GACA,KAAK6tC,sBAAA,CACP,C,EAEX,CAEA9xD,mBAA+C,CAC3C,OAAO,KAAK1nd,QAAQkrZ,aACd,KAAK2uH,gBAAA,EACL,KAAKF,iBAAA,CACf,CAEA70Z,QAA6C,CACzC,OAAO,KAAK9kH,QAAQ86a,SACd,KAAK2sC,aAAA,EACL,KAAKC,kBAAA,CACf,C,aACJ,G,80GCxJwCp8V,cAAMpoG,UAANooG,I,IAAjC,cAAiCA,I,uCADvC5zH,C,IAOI0qC,E,EAAqBpiC,S,GAIrBoiC,E,EAAuBsqD,Q,GAQvBtqD,E,EAAqB23e,O,CAlBczuZ,gB,CACpC,YAAY/3M,EAAgC,CACxC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAsBhlG,SAAiC,CACnD,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAwB0sF,QAAiB,CACrC,OACI,KAAKn5K,MAAMm5K,QACX,KAAK1sF,QAAQsnZ,cACb13C,EAER,CAEA,IAAsBmqK,OAA4B,CAC9C,IAAItilB,EAAS,GACb,GAAI,CACI,KAAKuoE,QAAQg6gB,kBACbvilB,EAAS,IAAIk3M,IAAI,KAAK3uI,QAAQg6gB,eAAe,EAAEvilB,OACvD,MAAQ,CAER,CACA,IAAM45K,EAAM,eAAe55K,EAAO,aAClC,OACIg4L,SAAC,OAAD,CAAAhrG,UACIgrG,SAAC,QAAD,CAAAhrG,SAAQ4sF,CAAW,EACjB,EAEd,CAEAyT,QAAsC,CAClC,GAAM,CAAE9kH,WAAY,KAEd0sF,EAAS,KAAK1sF,QAAQ+oZ,yBAA2B,KAAKr8T,OACtDtgG,EAAQsgG,EAAOtgG,MACfvkB,EAAS6kH,EAAO7kH,OAEhBoyiB,EAAoB,CAACj6gB,EAAQk6gB,wBAC7BC,EAAwB,CAAC,CAACn6gB,EAAQk6gB,wBAExC,OACIhjU,UAAC,MAAD,CACI,GAAIgvL,GAAiB,KAAKlmY,OAAO,EAC1B5T,QACCvkB,SACR+hY,QAAS,OAAOx9W,EAAM,GAAGvkB,IAJ7B48C,SAAA,CAMKw1f,GAAqB,KAAKF,MAC1BI,IACG1qZ,SAAC,OAAD,CACIn/L,UAAU,kBACVe,YACO+6D,QACCvkB,QACX,GAEJ,KAAKt0D,MAAMkxG,QACX,C,EAEb,C,aACJ,G,60GCgFoC21f,uBAuNMA,OA/Q3BA,IAAf,cAAAjzf,EAAoDjE,SAAA,C,+BAS/Ckf,E,EAAuBpiC,S,GAIvBoiC,E,EAAuB+kN,U,GAIvB/kN,E,EAAuBu2X,iB,GAIvBv2X,E,EAAuBj5E,Q,GAOvBi5E,E,EAAuB20O,Q,GAOvB30O,E,EAAuBsqD,Q,GAWvBtqD,E,EAAa02W,gB,GAIb12W,E,EAAuBi4e,U,KAjDxB9/F,sCACA+/F,wBAEA,YAAY/mmB,EAA4B,CACpC,MAAMA,GACNyxL,EAAe,IAAI,CACvB,CAEA,IAAwBhlG,SAAiC,CACrD,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAwBmnP,UAAmB,CACvC,OAAO,KAAKz6J,OAAOtgG,MAAQ,EAAI,KAAKmub,sBACxC,CAEA,IAAwB5hB,iBAA0B,CAC9C,OAAO,KAAK34Z,QAAQm5Z,QAAU,EAAI,KAAKn5Z,QAAQq5Z,SAAW,GAAK,EACnE,CAEA,IAAwBlwc,QAAiB,CACrC,OAAO,IAAI6ob,GAAO,CACdhyY,QAAS,KAAKA,QACdmnP,SAAU,KAAKA,QACnB,EACJ,CAEA,IAAwB4vB,QAAiB,CACrC,OAAO,IAAIisJ,GAAO,CACdhja,QAAS,KAAKA,QACdmnP,SAAU,KAAKA,QACnB,EACJ,CAEA,IAAwBz6J,QAAiB,CAIrC,OAFI,KAAK1sF,QAAQunZ,sBAAwB33C,IAE3Bi8G,SAAS,GAAGC,UAAU,EACxC,CAEArkF,mBAAmC,CAC/BllU,GAAuB,KAAM,iBACjC,CAEA,IAAcu2U,gBAA4D,CACtE,OAAO,KAAK94Y,QAAQ5C,SACxB,CAEA,IAAwBi9gB,UAA0C,CAC9D,OAAOn0I,GAAiB,KAAKlmY,OAAO,CACxC,CACJ,EAGoCo6gB,O,SAA7B,cAA6BA,G,uCADnC1ihB,C,IAOI0qC,E,EAAqBm4e,sB,GAMrBn4e,E,EAAqBo4e,qB,GAIrBp4e,E,EAAqBq4e,uB,GAKrBr4e,E,EAAqBk4Y,iB,GAKrBl4Y,E,EAAqBs4e,yB,GAKrBt4e,E,EAAqBu4e,0B,GA2DrBv4e,E,EAAqBw4e,Y,GAIrBx4e,E,EAAqBy4e,yB,GAKrBz4e,E,EAAqB04e,yB,GAIrB14e,E,EAAqB24e,8B,GAMrB34e,E,EAAqB44e,2B,GAMrB54e,E,EAAqB64e,kC,GAUrB74e,E,EAAqB84e,a,GAYrB94e,E,EAAqB+4e,oB,CAzIUf,e,CAChC,YAAY7mmB,EAA4B,CACpC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAsBu1a,sBAA+B,CAGjD,OAFI,KAAKv6gB,QAAQg8Y,WAAmB,EAChC,KAAKh8Y,QAAQkrZ,aAAqB,KAAKlrZ,QAAQq5Z,SAAW,EAAI,EAC3D,KAAKr5Z,QAAQq5Z,SAAW,EAAI,EACvC,CAEA,IAAsBmhH,qBAA+B,CACjD,MAAO,CAAC,CAAC,KAAKx6gB,QAAQw6gB,mBAC1B,CAEA,IAAsBC,uBAAgC,CAElD,OADK,KAAKD,oBACH,KAAKx6gB,QAAQq5Z,SAAW,GAAK,GADE,CAE1C,CAEA,IAAsBihB,iBAA2B,CAE7C,MADA,CAAI,KAAKt6a,QAAQo7gB,iBACV/gG,GAAY1e,WAAW,KAAK37Z,OAAO,CAC9C,CAEA,IAAsB06gB,yBAAkC,CAEpD,OAAOh3c,KAAK/0J,IAAI,IAAK+0J,KAAKx1J,MAAM,KAAKi5U,QAAQ,EACjD,CAEA,IAAsBwzR,0BAAmC,CACrD,IAAMxxE,EACF,KAAKz8W,OAAO7kH,OACZ,EAAI,KAAKyyiB,qBACT,KAAKO,wBACL,KAAKE,6BAET,OAAOr3c,KAAKx1J,MAAMi7hB,EACtB,CAEAkyE,mBAAgD,CAC5C,OACI5rZ,SAAC4qT,GAAD,CACIr6a,QAAS,KAAKA,QACdmnP,SAAU,KAAKA,SACfiwL,gBAAiB,KAAKsjG,wBACtBrjG,iBAAkB,KAAKsjG,wBAC1B,EAET,CAEAW,uBAAoD,CAChD,GAAM,CAAEC,oBAAqB,KAAKv7gB,QAClC,OACIk3M,UAAC,MAAD,CACI5mR,UAAU,kBACVmvE,MAAO,CACHrT,MAAO,KAAKsgG,OAAOtgG,MACnBvkB,OAAQ,KAAK4yiB,sBACblre,QAAS,KAAK,KAAKgrY,uBAAuB,GAC9C,EANJ91Z,SAAA,CAOC,gBAEGgrG,SAAC,IAAD,CACIpwI,KAAMk8hB,EAAkB,EAAE,CAAC/ujB,IAC3Bz7C,OAAO,SACPygK,IAAI,WACJ,kBAAgB,sBAEf/sD,SAAA82f,EAAkB,EAAE,CAACr3hB,IACvB,IACHurI,SAAC+9E,EAAD,CAAiB1W,KAAM4X,EAAoB,EAC1C,C,EAEb,CAEA8sU,wBAAqD,CACjD,OAAO/rZ,SAACu9O,GAAD,CAAkB91S,MAAM,kBAAkBw1B,OAAQ,KAAKA,MAAS,EAC3E,CAEA+ub,gBAA6C,CACzC,OACIhsZ,SAACisZ,IAAD,CACI7vG,mBAAoB,KAAK7ra,QAAQ6ra,mBACjC1kL,SAAU,KAAKA,QAClB,EAET,CAEA,IAAsByzR,YAAsB,CACxC,OAAO,KAAKzxjB,OAAO0e,OAAS,CAChC,CAEA,IAAsBgziB,yBAAkC,CAEpD,OADK,KAAKD,WACH,KAAKzxjB,OAAO0e,OAAS,KAAK8wb,gBADJ,CAEjC,CAEA,IAAsBmiH,yBAAkC,CACpD,OAAO,KAAK/jQ,OAAOlvS,OAAS,KAAK8wb,eACrC,CAEA,IAAsBoiH,8BAAuC,CACzD,OAAO,KAAKzgG,mBACgB,KAAKigG,qBAC3B,CACV,CAEA,IAAsBS,2BAAoC,CACtD,OAAO,KAAKh7gB,QAAQm2a,eACI,KAAKokG,qBACvB,CACV,CAEA,IAAsBU,kCAA2C,CAC7D,OAAO,KAAKT,oBACN,KAAKC,sBAAwB,KAAKH,qBAAuB,IACzD,CACV,CAMA,IAAsBY,aAAsB,CACxC,OAAOx3c,KAAKx1J,MACR,KAAKw+K,OAAO7kH,OACR,EAAI,KAAKyyiB,qBACT,KAAKO,wBACL,KAAKE,6BACL,KAAKC,0BACL,KAAKF,wBACL,KAAKG,gCACb,CACJ,CAEA,IAAsBE,oBAA6B,CAC/C,GAAM,CAAEzub,SAAQwub,eAAgB,KAChC,OAAO,IAAIpvb,EAAO,EAAG,EAAGY,EAAOtgG,MAAO8uhB,EAC1C,CAGAp2Z,QAAsC,CAelC,OACIoyF,UAAC,MAAD,CACI5mR,UAAU,iBACVmvE,MAAO,CAAEwtW,gBAAiBh4J,EAAmB,EAFjDxwL,SAAA,CAKK,KAAKm2f,aACF1jU,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIgrG,SAACuiR,GAAD,CACIhyY,QAAS,KAAKA,QACdmnP,SAAU,KAAKA,QAClB,IACD13H,SAACksZ,GAAD,CAAe9ziB,OAAQ,KAAK8wb,eAAkB,EAChD,IAGL,KAAK34Z,QAAQv3C,SACVyuP,UAAAsxC,WAAA,CAAA/jO,SAAA,CAEK,KAAK61Z,iBAAmB,KAAK+gG,kBAAA,EAC7B,KAAK/gG,kBACF7qT,SAACksZ,GAAD,CAAe9ziB,OAAQ,KAAK0yiB,oBAAuB,IAIvD9qZ,SAACmsZ,GAAD,CACI57gB,QAAS,KAAKA,QACd0sF,OAAQ,KAAKyub,mBACb13H,WACH,GAGA,KAAKzjZ,QAAQm2a,cACV1mT,SAACksZ,GAAD,CAAe9ziB,OAAQ,KAAK0yiB,oBAAuB,GAEtD,KAAKv6gB,QAAQm2a,aAAe,KAAKslG,eAAA,GAGlChsZ,SAACksZ,GAAD,CAAe9ziB,OAAQ,KAAK8wb,eAAkB,IAC9ClpS,SAACuzS,GAAD,CACIhja,QAAS,KAAKA,QACdmnP,SAAU,KAAKA,QAClB,GAGA,KAAKqzR,qBACF,KAAKc,sBAAA,CACX,IAEF,KAAKE,uBAAA,CAER,C,EAEb,C,aACJ,GAG0CpB,O,SAAnC,cAAmCA,G,uCADzC1ihB,C,IAwBI0qC,E,EAAqBy5e,W,GAUrBz5e,E,EAAqBqjZ,a,GAcrBrjZ,E,EAAuB05e,c,GASvB15e,E,EAAuB25e,c,CAxDc3B,e,CACtC,YAAY7mmB,EAA4B,CACpC,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAmBA,IAAsB62a,WAAoB,CACtC,OAAO,KAAK77gB,QAAQ+oZ,yBAA2B,KAAKr8T,MACxD,CAGA,IAAuBA,QAAiB,CACpC,OAAO,KAAK1sF,QAAQsnZ,cAAgB13C,EACxC,CAGA,IAAsB61E,aAAsB,CACxC,OAAO,KAAK/4V,OACP+2T,SAAS,KAAK82B,sBAAsB,EACpC72B,UAAU,KAAK42H,oBAAoB,CAC5C,CAGA,IAAca,oBAA6B,CACvC,OAAO,KAAK11F,YACP0W,OAAO,KAAK4/E,aAAal0iB,MAAM,EAC/Bikf,UAAU,KAAKgwD,aAAaj0iB,OAAS,KAAK8wb,eAAe,EACzDwjC,OAAO,KAAKn8b,QAAQg8Y,WAAa,EAAI,KAAK2c,eAAe,CAClE,CAEA,IAAwBmjH,cAAuB,CAC3C,OAAO,IAAIE,GAAa,CACpBh8gB,QAAS,KAAKA,QACdmnP,SAAU,KAAKA,SACfgwK,QAAS,KAAKsuB,YAAYr3gB,EAC1Bgpf,QAAS,KAAKquB,YAAYz2W,OAAS,KAAK+nM,OAAOlvS,MACnD,EACJ,CAEA,IAAwBk0iB,cAAuB,CAC3C,OAAO,IAAIE,GAAa,CACpBj8gB,QAAS,KAAKA,QACdmnP,SAAU,KAAKA,SACfgwK,QAAS,KAAKsuB,YAAYr3gB,EAC1Bgpf,QAAS,KAAKquB,YAAYlnd,CAC9B,EACJ,CAEA29iB,kBAAuC,CACnC,IAAIvvQ,EAAU,EACVwvQ,EACJ,OACIjlU,UAAAsxC,WAAA,CAAA/jO,SAAA,EACIgrG,SAAC,OAAD,CACIznN,GAAI+6J,EAAY,kBAChBipB,GAAI7jB,EAAY,KAAKoyW,sBAAsB,EAC3CnuV,GAAIjkB,EAAY,KAAKukB,OAAO7kH,MAAM,EAClCskH,GAAIhkB,EACA,KAAKgzc,mBAAmB/uhB,MACpB,KAAKmub,sBACb,EACAluV,GAAIlkB,EAAY,KAAKukB,OAAO7kH,MAAM,EAClCgvO,OAAO,SACJ,IACPpnF,SAAC,IAAD,CACIznN,GAAI+6J,EAAY,WAChBn1C,UAAW,iBAAiBu6C,EACxB,KAAKukB,OAAO7kH,OAAS,KAAKyyiB,oBAC9B,EAAE,GAED71f,SAAA,KAAKzkB,QAAQo8gB,gBAAgBp8lB,KAAK8R,EAAQ/hB,KACvCosmB,EAAiBxvQ,EACjBA,GAAW76U,EAAO+1C,UAEd4nJ,WAAO25H,SAAP,CAAA3kO,UACIgrG,SAACg9I,GAAD,CACIjmB,SAAU10T,EACV1jB,EAAG,EACHmwD,EAAG49iB,CACN,EACW,EANKpsmB,GAQ7B,CACD,EACL,GAEV,CAEA+0M,QAAsC,CAClC,GAAM,CAAE2gU,cAAazlb,UAASmnP,YAAa,KAErCk1R,EACFr8gB,EAAQs8gB,oCACR,CAACx9jB,GAAU,KAAKkhD,QAAQo8gB,eAAe,EAE3C,OACIllU,UAACqlU,GAAD,CAAoBv8gB,QAAS,KAAKA,QAAS0sF,OAAQ,KAAKmvb,UAAxDp3f,SAAA,EACIgrG,SAACwsZ,GAAD,CACaj8gB,UACCmnP,WACVgwK,QAASsuB,EAAYr3gB,EACrBgpf,QAASquB,EAAYlnd,CACxB,IACDkxJ,SAACmsZ,GAAD,CACI57gB,QAAS,KAAKA,QACd0sF,OAAQ,KAAKyub,kBAChB,IACD1rZ,SAACusZ,GAAD,CACah8gB,UACCmnP,WACVgwK,QAASsuB,EAAYr3gB,EACrBgpf,QAASquB,EAAYz2W,OAAS,KAAK8sc,aAAaj0iB,MACnD,GACAw0iB,GAAgC,KAAKH,iBAAA,CACtB,C,EAE5B,C,aACJ,GAKA,SAASP,GAAc,CAAE9ziB,UAAA,CACrB,OAAO4nJ,SAAC,MAAD,CAAKn/L,UAAU,gBAAgBmvE,MAAO,CAAE53B,SAAQukB,MAAO,MAAO,CAAI,EAC7E,C,80GCvf2Bk/H,cAAMpoG,UAANooG,I,IAApB,cAAoBA,I,uCAD1B5zH,C,IASI0qC,E,EAAqBpiC,S,GAIrBoiC,E,EAAqBo6e,a,CAZClxZ,gB,CAGvB,YAAY/3M,EAAkC,CAC1C,MAAMA,aACNyxL,EAAe,IAAI,CACvB,CAEA,IAAsBhlG,SAAwB,CAC1C,OAAO,KAAKzsF,MAAMysF,OACtB,CAEA,IAAsBw8gB,aAAuB,CACzC,OAAO,KAAKx8gB,QAAQs3D,UAAYjK,GAAey1Y,OACnD,CAEA4kB,mBAAgD,CAC5C,OAAO,KAAK80D,aACR/sZ,SAACgtZ,IAAD,CAAgBz8gB,QAAS,KAAKA,OAAU,IAExCyvH,SAACmsZ,GAAD,CACI57gB,QAAS,KAAKA,QACd0sF,OAAQ,KAAK1sF,QAAQ08gB,eACxB,EAET,CAEAj1D,cAA2C,CACvC,OAAO,KAAK+0D,aACR/sZ,SAACktZ,IAAD,CAAsB38gB,QAAS,KAAKA,OAAU,IAE9CyvH,SAAC8sZ,GAAD,CACIv8gB,QAAS,KAAKA,QACd0sF,OAAQ,KAAK1sF,QAAQ08gB,gBAErBj4f,UAAAgrG,SAACmsZ,GAAD,CACI57gB,QAAS,KAAKA,QACd0sF,OAAQ,KAAK1sF,QAAQ08gB,eACxB,EACe,EAE5B,CAEA53Z,QAAsC,CAClC,OAAO,KAAK9kH,QAAQ86a,SACd,KAAK2sC,aAAA,EACL,KAAKC,kBAAA,CACf,C,aACJ,G,80GCwI6Bp8V,cAAMpoG,UAANooG,I,IAAtB,cAAsBA,I,uCAD5B5zH,C,IAEI0qC,E,EAAaw6e,c,IAiCbt2f,IAAOo6D,K,KAAcm8b,gB,GAoBrBv2f,E,EAAOw2f,uB,GAWP7jmB,G,EAAK4lL,S,IAILv4E,IAAOo6D,K,KAAMq8b,U,IAIbz2f,IAAOo6D,K,KAAMs8b,a,IAWb12f,IAAOo6D,K,KAAcu8b,sB,IAKrB32f,IAAOo6D,K,KAAcw8b,kB,IAOrB52f,IAAOo6D,K,KAAcy8b,sB,IAIrB72f,IAAOo6D,K,KAAc08b,wB,IAWrB92f,IAAOo6D,K,KAAc28b,uB,IAIrB/2f,IAAOo6D,K,KAAc48b,2B,IAQrBh3f,IAAOo6D,K,KAAc68b,4B,IAmHrBj3f,IAAOo6D,K,KAAc88b,uB,IAOrBl3f,IAAOo6D,K,KAAc+8b,yB,IAOrBn3f,IAAOo6D,K,KAAMg9b,iB,IAcbp3f,IAAOo6D,K,KAAMw8U,sB,IAKb52Y,IAAOo6D,K,KAAMi9b,mB,IA4Lbr3f,IAAOo6D,K,KAAck9b,2B,IAiFrBt3f,IAAOo6D,K,KAAcm9b,+B,CA5hBGvyZ,gB,CAgBzB,YAAY/3M,EAAuC,CAC/C,MAAMA,GAENyxL,EAGE,KAAM,CACJ84a,uBAAwBjrb,EACxBkrb,eAAgBlrb,EAChBmrb,cAAenrb,CACnB,EACJ,CA1BA,IAAc+pb,cAA6B,CACvC,OAAO,KAAKrpmB,MAAMqpmB,YACtB,CAMAkB,kCAEkBhrd,QAClBmrd,qBAA+B,GAC/BF,eAAyB,GACzBC,cAA2Clrd,OAgB3Cord,kBAAkB3plB,EAAMkyJ,SAASsxC,OAAqB,CAClD,OAAOvwC,IAAiBjzJ,EAC5B,CAEsBsolB,eAClBpzc,EACA00c,EACI,CAGJ,IAAMC,EAAYtnlB,YAAYuyB,IAAA,EACxBg1jB,EAAkBhsH,GACpB5oV,EACA00c,EAAavlc,YAAc,GAC3Bulc,EAAa/pH,oBACjB,EACA,KAAKwoH,aAAa0B,6BACd,iCACAF,GAGJ,KAAKxB,aAAazkI,WAAakmI,CACnC,CAEQvB,uBAA8B,CAE7B,KAAKgB,wBACV,KAAKjB,eACD,KAAKiB,uBACL,KAAKlB,aAAa2B,sBACtB,CACJ,CAIM1/a,SAAgB,CAClB,KAAK+9a,aAAatiI,UAAUx5d,QAAS+9K,GAAYA,IACrD,CAEck+a,SAAS9plB,EAAkB,CACrC,KAAK+qlB,cAAgB/qlB,CACzB,CAEc+plB,aAAoB,CAC9B,KAAKgB,cAAgBlrd,MACzB,CAEA,IAAY0rd,gBAA4C,CAEpD,OADK,KAAKjrmB,MAAMqpmB,aAAa6B,yBACtB,KAAK7B,aAAa8B,sBACrBjvZ,SAACu/R,IAAD,CAAgBC,SAAU,KAAK0vH,iBAAoB,GAFM,IAIjE,CAEsB1B,sBAA6B,CAC/C,KAAKL,aAAa8B,qBACd,CAAC,KAAK9B,aAAa8B,oBAC3B,CAEsBxB,kBAAyB,CAC3C,IAAMxqG,EAAS,KAAKkqG,aAAa/1H,UAC3B8rB,EAAS3zf,GAAK,KAAK49lB,aAAazqG,cAAeO,GACrD,KAAKkqG,aAAarqG,OAAOI,GACzB,KAAKiqG,aAAa91H,YAAY4rB,EAAQC,EAC1C,CAEsBwqG,sBAA6B,CAC/C,KAAUP,aAAa/wG,mBAAmB3H,WAAA,CAC9C,CAEsBk5G,wBAA+B,CAC7C,KAAKR,aAAax/gB,UAAUs6W,cAC5B,KAAKklK,aAAax/gB,UAAU26W,eAAA,EAC5B,KAAK6kK,aAAan2F,WAAWhlK,MAAA,GAE7B,KAAKm7P,aAAax/gB,UAAUy6W,oBACxB,KAAK+kK,aAAazjJ,oBACtB,CAER,CAEsBkkJ,uBAA8B,CAChD,KAAKT,aAAatmG,iBAAmB,CAAC,KAAKsmG,aAAatmG,gBAC5D,CAEsBgnG,2BAAkC,CACpD,IAAMsB,EACF,KAAKhC,aAAa31H,cAAgBp1C,GAAaqwD,QACnD,KAAK06G,aAAa31H,YAAc23H,EAC1B9rd,OACA++S,GAAaqwD,OACvB,CAEsBq7G,4BAAmC,CACrD,IAAMsB,EACF,KAAKjC,aAAa31H,cAAgBp1C,GAAaisD,SACnD,KAAK8+G,aAAa31H,YAAc43H,EAC1B/rd,OACA++S,GAAaisD,QACvB,CAEA,IAAY6gH,mBAA+B,CAOvC,IAAMn5O,EAAY,CACXs5O,GAP4BhgkB,GAAQ,EAAG,IAAI9+B,IAAKimJ,IAC5C,CACHqpV,MAAO,GAAGrpV,IACVziK,OAAgB,KAAKk6mB,gBAAgBz3c,EACzC,EAGG64c,EACH,CACIxvH,MAAO,IACP9rf,GAAI,KAAK05mB,iBACThmd,MAAO,aACPhtG,SAAU,YACd,EACA,CACIolc,MAAO,YACP9rf,GAAI,KAAKy5mB,qBACT/ld,MAAO,cACPhtG,SAAU,YACd,EACA,CACIolc,MAAO,IACP9rf,GAAI,KAAK45mB,uBACTlmd,MAAO,KAAK0ld,aAAax/gB,UAAUs6W,aAC7B,cACA,aACNxtZ,SAAU,WACd,EACA,CACIolc,MAAO,IACP9rf,GAAI,KAAK65mB,sBACTnmd,MAAO,kBACPhtG,SAAU,OACd,EACA,CACIolc,MAAO,IACP9rf,GAAI,KAAK25mB,qBACTjmd,MAAO,KAAK0ld,aAAah3G,2BACnB,QACA,OACN17c,SAAU,UACd,EACA,CACIolc,MAAO,IACP9rf,GAAI,KAAKi6mB,wBACTvmd,MAAO,sBACPhtG,SAAU,OACd,EACA,CACIolc,MAAO,IACP9rf,GAAI,KAAK05f,qBACThmW,MAAO,0BACPhtG,SAAU,OACd,EACA,CACIolc,MAAO,IACP9rf,GAAI,KAAK85mB,0BACTpmd,MAAO,uBACPhtG,SAAU,OACd,EACA,CACIolc,MAAO,IACP9rf,GAAI,KAAK+5mB,2BACTrmd,MAAO,wBACPhtG,SAAU,OACd,EACA,CAAEolc,MAAO,SAAU9rf,GAAI,KAAKw5mB,WAAY,EACxC,CACI1tH,MAAO,IACP9rf,GAAI,KAAKg6mB,sBACTtmd,MAAO,6BACPhtG,SAAU,UACd,EACA,CACIolc,MAAO,UACP9rf,GAAI,KAAKo5mB,aAAamC,iBACtB7nd,MAAO,oBACPhtG,SAAU,YACd,EACA,CACIolc,MAAO,IACP9rf,GAAI,KAAKo5mB,aAAajlG,gBAAgB+sF,YACtCxtc,MAAO,oBACPhtG,SAAU,KACd,CACJ,EAEA,GAAI,KAAK0yjB,aAAaoC,UAAW,CAC7B,IAAMA,EAAY,KAAKpC,aAAaoC,UACpCx5O,EAAU11X,KAAK,CACXw/e,MAAO,aACP9rf,GAAIw7mB,EAAUC,SACd/nd,MAAO,aACPhtG,SAAU,QACd,GACAs7U,EAAU11X,KAAK,CACXw/e,MAAO,YACP9rf,GAAIw7mB,EAAUE,aACdhod,MAAO,iBACPhtG,SAAU,QACd,EACJ,CAEA,OAAOs7U,CACX,CAEsBg4O,uBAA8B,CAEhD,KAAKZ,aAAauC,0BACdngmB,GAAK,CAAC,SAAU,WAAY,IAAI,EAAG,KAAK49lB,aAAawC,SAAU,EAEvE,CAEsB3B,yBAAgC,CAClD,KAAKb,aAAa5nG,MAAM/tW,UAAYjoJ,GAChC,CAAC0jI,GAAUg8J,OAAQh8J,GAAUh2H,GAAG,EAChC,KAAKkwlB,aAAa5nG,MAAM/tW,SAC5B,CACJ,CAEcy2c,gBAAgBz3c,EAAmB,CAE7C,KAAK+2c,YAAA,EACL,IAAMqC,EACF,KAAKzC,aAAax/gB,UAAUq6W,oBAAoB3oc,OAC9CwwmB,EAASr5c,IAAYo5c,EAAmBA,EAAmB,EAAI,IACrE,KAAKzC,aAAax/gB,UAAUy6W,oBACxBntS,IACI,KAAKkyc,aAAazjJ,qBAClBmmJ,EACAt7c,KAAK36G,IAAA,GAGjB,CACc6zc,sBAA6B,CACvC,KAAK0/G,aAAah/G,mBACd,CAAC,KAAKg/G,aAAah/G,kBAC3B,CAEc+/G,mBAA0B,CAGhC,KAAKf,aAAa2C,aAClB,KAAK3C,aAAa/+G,mBAElB,KAAK++G,aAAa77H,kCAAoC,GACtD,KAAK67H,aAAa31H,YAAcn0V,OAChC,KAAK8pd,aAAa/+G,kBAAoB,IAEtC,KAAK++G,aAAah/G,mBAAqB,EAE/C,CAEA4hH,aAA0C,CACtC,OACItoU,UAAC,MAAD,CACIhgJ,MAAO,KAAK8md,eAAerolB,QAC3B8pE,MAAO,CACHrT,MAAO,OACPvkB,OAAQ,OACRmtB,SAAU,WACVqvE,QAAS,OACTo7c,cAAe,SACfC,eAAgB,SAChB98G,UAAW,SACXn8K,WAAY,IACZl3M,QAAS,MACb,EAZJ9qB,SAAA,EAcIyyL,UAAC,IAAD,CAAGz3M,MAAO,CAAE63H,MAAO,UAAW9qC,WAAY,GAAI,EAA9C/nE,SAAA,EACIgrG,SAAC+9E,EAAD,CAAiB1W,KAAM+b,GAAwB,GAAC,wCAEjD,C,IACHqE,UAAC,IAAD,CAAAzyL,SAAA,CAAG,uIAGY,KACXgrG,SAAC,IAAD,CACIpwI,KAAM,+DAA+DqjF,OAAO+jB,SAASpnG,OACxFolC,SAAA,yBAEE,GAAC,GAEL,IACF,KAAKu5f,eAAiB,KAAKA,cAAcrolB,UACtCuhR,UAAC,MAAD,CAAKz3M,MAAO,CAAEgtF,SAAU,MAAO,EAA/BhoE,SAAA,CAAkC,UACtB,KAAKu5f,cAAcrolB,OAC1B,C,EAER,C,EAEb,CAEAgqlB,wBAAqD,CACjD,IAAMC,EAAmBn2I,EAAW,CAChCo2I,iBAAkB,GAClBC,qBAAsB,KAAKlD,aAAamD,WACxCjlG,SAAU,KAAK8hG,aAAa9hG,SAC5BklG,sBAAuB,KAAKpD,aAAaoD,sBACzCC,uBAAwB,KAAKrD,aAAanvH,SAC1CyyH,2BAA4B,KAAKtD,aAAaziH,aAC9CgmH,sBAAuB,KAAKvD,aAAazjH,QACzCinH,uBAAwB,KAAKxD,aAAavjH,QAC9C,GAEMugH,EAAiB,CACnBxthB,MAAO,KAAKwwhB,aAAayD,aAAaj0hB,MACtCvkB,OAAQ,KAAK+0iB,aAAayD,aAAax4iB,OACvC4kH,SAAU,KAAKmwb,aAAaoD,sBACtB,GACAt8c,KAAK/0J,IAAI,GAAI,KAAKiumB,aAAanwb,QAAQ,CACjD,EAEA,OACIyqH,UAAC,MAAD,CACIp1Q,IAAK,KAAK86kB,aAAa1rlB,KACvBZ,UAAWsvlB,EACXnghB,MAAOm6gB,EACP,mBAAkB1nc,KAAKC,UAAU,CAC7Bmuc,WAAY,KAAK1D,aAAaxiH,aAC9BmmH,mBACI,KAAK3D,aAAa4D,oBAAoB33mB,KAC1CquN,aACI,KAAK0lZ,aAAa5D,iBAAiB9hZ,YAC3C,GAVJzyG,SAAA,CAYK,KAAK+5f,eACL,KAAKR,cAAgB,KAAKwB,YAAA,EAAgB,KAAKiB,YAAA,CAC/C,C,EAEb,CAEA37Z,QAAkD,CAgB9C,OAdI,KAAK83Z,aAAaoD,uBACXvwZ,SAACixZ,GAAD,CAAO1ghB,QAAS,KAAK48gB,YAAe,GAE3C,KAAKA,aAAah/G,oBAEdnuS,SAACkxZ,IAAD,CACIhqM,UAAW,KAAKgnM,kBAChBh2I,SAAU,KAAKi1I,aAAa2C,YAE3B96f,SAAA,KAAKk7f,uBAAA,CACE,GAIb,KAAKA,uBAAA,CAChB,CAEAc,aAAiD,CAC7C,GAAI,CAAC,KAAK1C,eAAgB,OAAO,KAEjC,IAAM6C,EAAsB,KAAKhE,aAAa5gI,WACxC,KAAK4gI,aAAallI,UAAUt6Y,UAC5B,KAAKw/gB,aAAax/gB,UAExB,OACI85M,UAAAsxC,WAAA,CAAA/jO,SAAA,EAEIyyL,UAAC,MAAD,CAAK5mR,UAAU,6BAAfm0F,SAAA,EACIgrG,SAACixZ,GAAD,CAAO1ghB,QAAS,KAAK48gB,YAAe,GAEnC,KAAKA,aAAaiE,kBACfpxZ,SAAC2mS,IAAD,CAAW1pU,OAAQ,KAAKkwb,aAAaiE,gBACjCp8f,UAAAgrG,SAACk0R,GAAD,CACI3jZ,QAAS,KAAK48gB,aACdx/gB,UAAWwjhB,CACd,EACM,EAEd,C,GAGJ,KAAKhE,aAAa31H,cAAgBp1C,GAAaqwD,SAC5C,KAAK06G,aAAan0jB,UACdgnK,SAACqxZ,IAAD,CAAc9ghB,QAAS,KAAK48gB,YAAe,GAElD,KAAKA,aAAa31H,cAAgBp1C,GAAaisD,UAC5C,KAAK8+G,aAAan0jB,UACdgnK,SAACsxZ,IAAD,CAAe/ghB,QAAS,KAAK48gB,YAAe,GAEnD,KAAKA,aAAa31H,cAAgBp1C,GAAa03C,OAC5C,KAAKqzH,aAAan0jB,UACdgnK,SAACuxZ,IAAD,CAAYhhhB,QAAS,KAAK48gB,YAAe,GAEhD,KAAKA,aAAaqE,4BACfxxZ,SAACyxZ,IAAD,CAAqBlhhB,QAAS,KAAK48gB,YAAe,IAItDntZ,SAAC4mS,IAAD,CACItsN,UAAU,kBACV2jM,WAAY,KAAKkvI,aAAa1rlB,KAC9Bq2V,OAAQ,KAAKq1P,aAAauE,2BAC1BnzI,aAAezmH,IACX,KAAKq1P,aAAa77H,kCACdx5H,CACR,EAEA9iQ,UAAAgrG,SAACk0R,GAAD,CACI3jZ,QAAS,KAAK48gB,aACdx/gB,UAAWwjhB,EACX7wO,UAAW,EACd,EACU,GAGd,KAAK6sO,aAAalzD,0BACfj6V,SAACq9O,GAAD,CAAAroV,UACIgrG,SAAC2xZ,GAAD,CACI9zI,eAAgB,KAAKsvI,aACrBzqM,OAAQhsR,GAAqBikV,MAChC,EACO,IAEZ36Q,SAAC2xZ,GAAD,CACI9zI,eAAgB,KAAKsvI,aACrBzwI,gBAAiB,KAAKywI,aAAar1H,oBACtC,EAEP,GAEV,CAGsBq2H,2BAAkC,CACpD,GAAI,OAAOl7c,OAAW,KAAe,yBAA0BA,OAAQ,CACnE,IAAMhrE,EAAW,IAAI2phB,qBAChB3+iB,IACGA,EAAQ5hD,QAAS2gD,IACb,GAAIA,EAAMswJ,eAAgB,EAItBuvZ,gBACIh7f,MAAA,CACI,KAAKy3f,eAAiB,EAC1B,IAGC,KAAKE,uBACN,KAAKA,qBAAuB,GAExB,KAAKrB,aAAa4D,oBAClB,KAAK5D,aAAa7D,UAAUwI,eACxB,KAAK3E,aAAa4D,mBACbgB,gBACL,CACIjB,mBACI,KAAK3D,aACA4D,mBAAmB33mB,IAChC,GAEJ,KAAKo1mB,qBAAuB,IACrB,KAAKrB,aAAavmd,OACzB,KAAKumd,aAAa7D,UAAUwI,eACxB,KAAK3E,aAAavmd,IACtB,EACA,KAAK4nd,qBAAuB,KAKpC,IAAM30K,EAAU,KAAKszK,aAAatzK,SAAS78b,MACrCg1mB,EAAe,CAAChgjB,EAAMswJ,eACtB2vZ,EACFjgjB,EAAMswJ,gBACNtwJ,EAAMkgjB,kBAAoB,IAE1Br4K,IACCm4K,GAAgBC,IAEjBp4K,EAAQ6xD,UAAA,CAEhB,CACJ,EACJ,EACA,CAAErja,UAAW,CAAC,EAAG,GAAI,CAAE,GAE3BJ,EAAS4K,QAAQ,KAAKs6gB,aAAagF,gBAAiB,EACpD,KAAKhF,aAAatiI,UAAUxqe,SAAW4nF,EAAS6pM,WAAA,EACpD,KAEI,MAAKw8U,eAAiB,EAE9B,CAIA8D,cAA6B,CACzB,GAAI,CAAC,KAAKjF,aAAakF,gBAAiB,OAIxC,IAAMC,MACFh6b,IAAkBH,GAAiB,KAAKg1b,aAAaoF,aAAa,GAChEC,EAAsBnjkB,GAAWijkB,EAAY,KAEnDvhb,OACU,KAAKo8a,aAAaoF,kBACjB,KAAKE,aAAeD,IAAwBF,KAGvD1lb,OAAe1yL,SAASutJ,MAAQ,KAAK0ld,aAAa7jH,SAAU,CAChE,CAEsB8kH,+BAAsC,CASxD,IAAMsE,EAAyB77f,MAAA,CAC3B,KAAKs2f,aAAawF,iBAAmB1/c,OAAOsqc,WAC5C,KAAK4P,aAAayF,kBAAoB3/c,OAAO4/c,YAC7C,KAAK1F,aAAahlP,aAAel1N,OAAOu1N,OAAOpwT,MACnD,GACMgrJ,EAAW/zK,GAAWqjkB,EAAwB,IAAK,CACrD3hf,QAAS,EACb,GAEI,OAAOkiC,OAAW,MAClBy/c,IACAz/c,OAAOm+M,iBAAiB,SAAUhuJ,GAClC,KAAK+pZ,aAAatiI,UAAUxqe,SAAA,CACxB4yJ,OAAO8+M,oBAAoB,SAAU3uJ,EACzC,GAER,CAEA0vZ,yCAAwD,CACpD,KAAK3F,aAAatiI,UAAUxqe,KACxB0wL,OACU,KAAKo8a,aAAa4F,4BACxB,KAAK5F,aAAa6F,wBACtB,EAER,CAEAC,gBAA+B,CAItB,KAAK9F,aAAaz+G,SACnB,KAAKy+G,aAAatiI,UAAUxqe,KACxB0wL,OACU,CACF,KAAKo8a,aAAanoG,cAClB,KAAKmoG,aAAax/gB,UAAUq6W,oBAC5B,KAAKmlK,aAAa/1H,SACtB,MACM,KAAK+1H,aAAan2F,WAAWhlK,MAAA,EAGnC,CAAE9mL,OAAQj3D,GAAS+2W,UAAW,GAI9C,CAEAhT,mBAAmC,CAC/BllU,GAAuB,KAAM,WAE7B,KAAKq7c,0BAAA,EACL,KAAKC,8BAAA,EAEL,KAAKgE,aAAA,EACL,KAAKc,sBAAA,EAEL,KAAKD,eAAA,EACL,KAAKH,wCAAA,CACT,CAEAK,0BACAD,uBAAsC,CAClC,GACI,CAAC,KAAK/F,aAAa6B,yBACnB,KAAKmE,0BAEL,OACJ,IAAM3xH,EAAcjrW,OAAOg9E,YACvB,KAAK27Y,kBAAkB3+lB,IAAK6imB,GAAa,CACrCA,EAASvzH,MACRzge,IACGA,EAAMk2V,eAAA,EACNl2V,EAAM0nY,gBAAA,EACNssN,EAASr/mB,GAAA,EACT,KAAKo5mB,aAAa7D,UAAU+J,oBACxBD,EAAS3rd,OAAS,GAClB2rd,EAASvzH,KACb,CACJ,CACH,IAEL,KAAKszH,0BAA4BxxH,GAAS1uV,OAAQuuV,EACtD,CAEA8xH,yBAAwC,CACpC,KAAKH,4BAAA,EACL,KAAKA,0BAA4B9vd,MACrC,CAEA40U,sBAAsC,CAClC,KAAKq7I,wBAAA,EACL,KAAKlkb,QAAA,CACT,CAEAmkb,kBAA2B/mmB,EAAoB,CAC3C,KAAK8gmB,SAAS9gmB,GACd,KAAK2gmB,aAAa7D,UAAUkK,oBAAoBhnmB,EACpD,CAEAimmB,aAAe,G,aACnB,GC/0BA,SAAS9wmB,IAAW,EAAU,CAC5B,IAAI8xmB,EAAc,CAAC,EACnB,GAAIC,EAAS,SAAW,EAAK,MAAO,GAEpC,GAAI,OAAOA,EAAS,IAAO,SACzB,MAAU,UAAU,kCAAoCA,EAAS,EAAE,EAIjEA,EAAS,EAAE,CAAC,MAAM,cAAc,GAAKA,EAAS,OAAS,IAEzD,EAAS,GADGA,EAAS,MACH,EAAIA,EAAS,IAIjC,CAGEA,CAAS,GAHPA,EAAS,EAAE,CAAC,MAAM,cAAc,EACpBA,EAAS,EAAE,CAAC,QAAQ,gBAAiB,QAAQ,EAE7CA,EAAS,EAAE,CAAC,QAAQ,gBAAiB,OAAO,EAG5D,IAAK,IAAIpzmB,EAAI,EAAGA,EAAIozmB,EAAS,OAAQ,IAAK,CACxC,IAAI3gd,EAAY2gd,EAASpzmB,GAEzB,GAAI,OAAOyyJ,GAAc,SACvB,MAAU,UAAU,kCAAoCA,CAAS,EAG/DA,IAAc,KAEdzyJ,EAAI,IAEN,EAAYyyJ,EAAU,QAAQ,SAAU,EAAE,GAE5C,CAKEA,CALEzyJ,EAAIozmB,EAAS,OAAS,EAEZ3gd,EAAU,QAAQ,SAAU,EAAE,EAG9BA,EAAU,QAAQ,SAAU,GAAG,EAG7C0gd,EAAY,KAAK1gd,CAAS,EAE5B,CAEA,IAAIjuI,EAAM2ulB,EAAY,KAAK,GAAG,EAI9B,EAAM3ulB,EAAI,QAAQ,kBAAmB,IAAI,EAGzC,IAAIif,EAAQjf,EAAI,MAAM,GAAG,EAGzB,MAFA,GAAMif,EAAM,MAAM,GAAKA,EAAM,OAAS,EAAI,IAAK,IAAMA,EAAM,KAAK,GAAG,EAE5Djf,CACT,CAEA,SAAwB6ulB,IAAU,CAShC,OAAOhymB,IANH,OAAO,UAAU,IAAO,SAClB,UAAU,GAEV,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAGX,CACxB,CClDA,IAAMiymB,IAAqB11c,IAA0B,EAC/C21c,IAA4CD,IAC5C,CAAE,QAAS,CAAE,aAAcA,GAAmB,CAAE,EAChD,OAEOE,KACT,EACA,EACA,CAAE,WAAU,WAAwD,CAAC,IAC5D,CACT,GAAIC,EAAW,SAAS,eAAe,EAAG,CACtC,IAAM7/jB,EAAW,GAAGkvG,EAAW,YACzBrmG,EAAMkrH,GAAiBC,EAAU,CACnC,KAAMh0H,EAEN,SAAU8/jB,GAAQD,EAAY7/jB,CAAQ,CAC1C,CAAC,EACD,OAAO+/jB,EAAU,GAAGl3jB,EAAI,UAAYA,CACxC,CACI,MAAU,MAAM,oCAAoCg3jB,GAAY,CAExE,EAEaG,KACT,EACA,EACA,CAAE,WAAU,WAAwD,CAAC,IAC5D,CACT,GAAIH,EAAW,SAAS,eAAe,EAAG,CACtC,IAAM7/jB,EAAW,GAAGkvG,EAAW,gBACzBrmG,EAAMkrH,GAAiBC,EAAU,CACnC,KAAMh0H,EAEN,SAAU8/jB,GAAQD,EAAY7/jB,CAAQ,CAC1C,CAAC,EACD,OAAO+/jB,EAAU,GAAGl3jB,EAAI,UAAYA,CACxC,CACI,MAAU,MAAM,oCAAoCg3jB,GAAY,CAExE,EAEA,eAAsBI,IAClB,EACA,EACA,EAK2C,CAC3C,IAAMC,EAAkB56c,GACpB06c,IAAyBH,EAAY3wd,EAAY/kJ,CAAO,EACxDw1mB,GACJ,EAEA,GAAIx1mB,GAAS,iBAAkB,CAC3B,IAAMg2mB,EAAmB,MAAMD,EAC/B,GAAI,CAACC,EAAiB,GAAI,MAAU,MAAMA,EAAiB,UAAU,EACrE,IAAM/2mB,EACF,MAAM+2mB,EAAiB,KAAK,EAOhC,MAJA,GAAS,eAAiBnyd,GACtB5kJ,EAAS,cACb,EAEO,CAAE,KAAM,CAAE,OAAQ,CAAC,EAAG,SAAU,CAAC,EAAG,MAAO,CAAC,CAAE,EAAG,UAAS,CACrE,CAEA,IAAMg3mB,EAAc96c,GAChBs6c,IAAqBC,EAAY3wd,EAAY/kJ,CAAO,EACpDw1mB,GACJ,EACM,CAACU,EAAcF,GAAoB,MAAM,QAAQ,IAAI,CACvDC,EACAF,CACJ,CAAC,EACD,GAAI,CAACG,EAAa,GAAI,MAAU,MAAMA,EAAa,UAAU,EAC7D,GAAI,CAACF,EAAiB,GAAI,MAAU,MAAMA,EAAiB,UAAU,EACrE,IAAM3ymB,EAAO,MAAM6ymB,EAAa,KAAK,EAC/Bj3mB,EACF,MAAM+2mB,EAAiB,KAAK,EAEhC,MADA,GAAS,eAAiBnyd,GAAwB5kJ,EAAS,cAAc,EAClE,CAAE,OAAM,UAAS,CAC5B,CAEA,eAAsBk3mB,IAClB,EACA,EACA,EACA,EACA,EAC8C,CAC9C,IAAMC,EAA2BC,EAAY,IAAK,GAC9CP,IAA4B/wd,EAAY2wd,EAAY,CAChD,SACIY,GAAgB,OAAS,eACnBA,EAAe,OAAO,QACtB,OACV,UACA,kBACJ,CAAC,CACL,EACMC,EACF,MAAM,QAAQ,IAAIH,CAAwB,EAI9C,OAAO,IAHsB,IACzBG,EAAc,IAAK,GAAS,CAAClzmB,EAAK,SAAS,GAAIA,CAAI,CAAC,CAEjD,CACX,CCvGA,IAAamzmB,GAAuD,KAChE,IACC,CACD,IAAMC,GAAuB53lB,EAAK,YAAc,CAAC,GAAG,OAChDgmI,EACJ,EAgBA,OAfI4xd,EAAoB,SAAW,EAAG,OASnBlyH,GACf,MAR2B4xH,IADbM,EAAoB,IAAK,GAAMplkB,EAAE,UAE/C,EACAxyB,EAAK,WACLA,EAAK,eACLA,EAAK,QACLA,EAAK,gBACT,EAGI43lB,EACA53lB,EAAK,oBAGF,CACX,EAEA,SAAgB63lB,IACZ,EACA,EACA,EACA,EAIgC,CAChC,IAAM1wf,EAAyD,IAAI,IAC/D2wf,EAAoD,CAAC,EACrDC,EAGJ,OAAO,MACH,EACA,IACC,CAED,IAAM9rc,EAAa+rc,EAAe,IAAK,GAAM3gb,GAAK51L,CAAC,CAAC,EAC9Cgmf,EAAuBpwT,GAAK4gb,CAAwB,EAE1D,GACIx3a,GAAUq3a,EAAoB7rc,CAAU,GACxCw0B,GAAUs3a,EAA8BtwH,CAAoB,EAE5D,OAEJ,EAAqBx7U,EACrB,EAA+Bw7U,EAE/B,IAAMmwH,EAAsB3rc,EAAW,OAAOjmB,EAAoB,EAClE,GAAI4xd,EAAoB,SAAW,EAAG,OAEtC,IAAM9oP,EAAY8oP,EAAoB,IAAK,GAAMplkB,EAAE,UAAU,EACvD0lkB,EAAmBppP,EAAU,OAAQ,GAAM,CAAC3nQ,EAAM,IAAIlrG,CAAC,CAAC,EA4B9D,OA1BIi8lB,EAAiB,OAAS,IAa1B,MAZ0B,QAAQ,IAC9BA,EAAiB,IAAK,GAClBjB,IAA4B/wd,EAAY2wd,EAAY,CAChD,SACIY,GAAgB,OAAS,eACnBA,EAAe,OAAO,QACtB,OACV,UACA,kBACJ,CAAC,CACL,CACJ,GACY,QAAS,GAAStwf,EAAM,IAAI3iH,EAAK,SAAS,GAAIA,CAAI,CAAC,EAOhDkhf,GACf,IALyB,IACzB52H,EAAU,IAAK,GAAM,CAAC7yW,EAAGkrG,EAAM,IAAIlrG,CAAC,CAAE,CAAC,CAIvC,EACA27lB,EACAnwH,CAGG,CACX,CACJ,CC9GA,IAAM0wH,IAA4D5hd,OAC9D,OAAO,YAAY0e,GAAQ,KAAK,CAAE,OAAM,UAAW,CAACW,EAAM15K,CAAI,CAAC,CAAC,CACpE,EAEMk8mB,IAA8B7hd,OAChCutW,GAASq0G,IAA4B,CAAC,CAC1C,EAEaE,IAAoB,GACtBF,IAA4B,CAAC,CAACG,IAAqBA,EAGjDC,IAAoB,GACtBH,IAA4B,CAAC,CAACt0K,IAAeA,ECclD00K,IAAe,IAGfC,IAAa,GAGR,CAACC,EAAW,YAA4B,EAG7CC,IACF,GAIOC,EAAkB,MAAMJ,GAAY,CAAC,CAAC,IAAIx9b,GAAsB,EAGrE69b,GAAwB,GAEtBntK,EAAY,SAAW,EAAG,IAA6BA,EAAY,GAChEA,EAAY,QAAwB,EAGzCotK,IAA0B,GAErBJ,EAAW,SAAyB,CAAC,CAAC,OAAQ,GAAS3xkB,CAAI,EAGhEgykB,IAAoC,GAAQ,CAC9C,GAAM,CAAE,WAAYl5jB,EAAI,YACxB,GAAIs/F,IAAY,QAAa,CAACs5d,IAAUt5d,CAAO,EAAG,OAAOt/F,EAEzD,IAAMm5jB,EAAiBn5jB,EAAI,mBAAmB,SAAW,GACzD,OAAOA,EAAI,kBAAkB,CACzB,QAASg5jB,GACLF,IAA8BK,CAAc,CAChD,CACJ,CAAC,CACL,EA0BMC,IAAuB,iBAEvBC,IACF,GACe,CAGf,IAAMC,EAAyB,CAAC,EAWhC,OAVAztK,EAAY,QAAS,GAAe,CAEhC,GADAytK,EAAS,KAAKr1K,CAAU,EACpBm1K,IAAqB,KAAKn1K,CAAU,EAAG,CACvC,IAAMs1K,EAAmBt1K,EAAW,QAChCm1K,IACA,IACJ,EACAE,EAAS,KAAKC,CAAgB,CAClC,CACJ,CAAC,EACMD,CACX,EAoBME,IAAgC,CAClCN,IAnB+C,GAAQ,CACvD,GAAM,CAAE,WAAYl5jB,EAAI,YAUxB,OATIs/F,EACOt/F,EAAI,kBAAkB,CACzB,QAASg5jB,GACLK,IACIJ,IAAuB35d,CAAO,CAClC,CACJ,CACJ,CAAC,EAEEt/F,CACX,CASA,EAEay5jB,IACT,GAEOx4a,GAAqBu4a,IAAex5jB,CAAG,EAOrC05jB,GACT,GAC2B,CAC3B,GAAIjphB,IAAU,OACd,OAAOwohB,IAAuBxohB,CAAK,CAAC,CAAC,IAAI+nhB,GAAgB,CAC7D,EAEamB,IACT,GAGOD,GAAoBp6d,CAAO,EAGzBs6d,GACT,GACSZ,GAAqBntK,EAAY,IAAI6sK,GAAgB,CAAC,EAEtDmB,KACT,EACA,IAGO75jB,EAAI,kBAAkB,CACzB,QAAS6rZ,EACH+tK,GAAiC/tK,CAAW,EAC5C,MACV,CAAC,EAkBQiuK,IACT,GAEOJ,GAAoBb,CAAU,EAG5BkB,IACT,GACSf,GAAqBp/F,EAAY,IAAI8+F,GAAgB,CAAC,EClMtDsB,IAAuC,CAC/C,GAAkB,CACf,GAAM,CAAE,OAAM,QAASh6jB,EAAI,YAE3B,OADKogG,EACEpgG,EAAI,kBAAkB,CACzB,KAAM,OACN,KAAM1U,GAAQ80G,CAClB,CAAC,EAJiBpgG,CAKtB,EACAy5jB,GACJ,EAEaQ,GAA6B,GACtCh5a,GAAqB+4a,IAAsBh6jB,CAAG,EAErCk6jB,IACT,GAGOD,GADK7/b,GAAI,aAAaa,CACI,CAAG,CAAC,CAAC,YCtBpCk/b,GAAoB,CAAC,GAAG73K,IAAA,KAA2C,EAcnE83K,IACF,0FAEEC,IAAwB,GAC1BF,GAAkB,SAASjhnB,CAAc,EAM7C,SAAgBohnB,IACZ,EACoB,CACpB,GAAI,OAAO/ggB,EAAO,SAAY,SAAU,OAAO,KAC/C,IAAMrgH,EAAUqgH,EAAO,QAAQ,MAAM6ggB,GAAkB,CAAC,EAAE,QAAQ,QAElE,MADI,CAAClhnB,GAAW,CAACmhnB,IAAqBnhnB,CAAO,EAAU,KAChDA,CACX,CAEA,SAAgBqhnB,IAAuB,EAAgC,CACnE,MAAO,2DAA2DrhnB,EAAQ,MAC9E,CAEA,IAAashnB,IACT,GACiCthnB,IAAA,MAErC,SAAgBuhnB,IACZ,EACa,CACb,OAAON,GAAkBA,GAAkB,QAAQjhnB,CAAO,EAAI,EAClE,CAEA,IAAawhnB,IACT,GACmC,CAACF,IAAgBthnB,CAAO,EAElDyhnB,IACT,GAC6BL,IAAiB/ggB,CAAM,IAAM,KCuExDqhgB,IAAgE,CAClE,MAnHyB,GAAmC,CAC5D,OAAOrhgB,EAAO,YAClB,EAkHI,MA/GyB,GAAmC,CAC5D,GAAIA,EAAO,sBAAwB,OAAW,CAC1C,IAAM+tB,EAAO/tB,EAAO,oBACpB,EAAO,4BAA8B,CACjC,OAAQ+tB,EACR,KAAMA,EACN,eAAgBA,CACpB,CACJ,CACA,OAAO/tB,EAAO,mBAClB,EAsGI,MAnGyB,GAAmC,CAC5D,OAAOA,EAAO,IAClB,EAkGI,MA/FyB,GAAmC,CAC5D,OAAOA,EAAO,yBAClB,EA8FI,MA5FyB,GAAmC,CAC5D,GAAM,CAAE,OAAM,eAAgBA,EAE1BshgB,IAAgB,GAAO,EAAO,WAAa,CAAC,EACvCp4lB,IAAS,SAAW,EAAO,WAAa,CAACA,CAAI,GAEtD,OAAO82F,EAAO,KACd,OAAOA,EAAO,WAClB,EAqFI,MAnFyB,GAAmC,CAExDA,EAAO,KAAK,aACZ,EAAO,IAAI,OAASA,EAAO,IAAI,WAC/B,OAAOA,EAAO,IAAI,WAE1B,EA8EI,MA5EyB,GAAmC,CAExDA,EAAO,KAAK,YAAY,sBACxB,EAAO,IAAI,WAAW,oBAAsB,CACxCA,EAAO,IAAI,WAAW,uBAAyB,EAC/C,GAAGA,EAAO,IAAI,WAAW,mBAC7B,GAEAA,EAAO,KAAK,YAAY,wBAA0B,QAClD,OAAOA,EAAO,IAAI,WAAW,sBAG7BA,EAAO,YAAY,sBACnB,EAAO,WAAW,oBAAsB,CACpCA,EAAO,WAAW,uBAAyB,EAC3C,GAAGA,EAAO,WAAW,mBACzB,GAEAA,EAAO,YAAY,wBAA0B,QAC7C,OAAOA,EAAO,WAAW,qBAEjC,EAwDI,MAtDyB,GAAmC,EACvDA,EAAO,KAAK,YAAY,iBAAmB,YAAc,WAC1D,EAAO,IAAI,WAAW,gBAAkB,QAGxCA,EAAO,KAAK,YAAY,0BAA4B,QACpD,OAAOA,EAAO,IAAI,WAAW,yBAG5BA,EAAO,YAAY,iBAAmB,YAAc,WACrD,EAAO,WAAW,gBAAkB,QAGpCA,EAAO,YAAY,0BAA4B,QAC/C,OAAOA,EAAO,WAAW,uBAEjC,EAuCI,MArCyB,GAAmC,CACxDA,EAAO,aAAe,SACtB,EAAO,iBAAmBA,EAAO,YACrC,OAAOA,EAAO,UAClB,EAkCI,MAhCyB,GAAmC,CAE5D,IAAK,IAAM6sC,KAAa7sC,EAAO,YAAc,CAAC,EAAG,CAC7C,IAAMs+C,EAAUzR,EAAU,QACrByR,IAEDA,EAAQ,YAAc,KACrBA,EAAQ,eAAiB,QACtBA,EAAQ,eAAiB,QAE7B,EAAQ,aAAe,OAC3B,OAAOA,EAAQ,UACnB,CACJ,EAoBI,MAlByB,GAAmC,CAIxDt+C,EAAO,OAAS,YAAW,EAAO,KAAO,OACjD,CAcA,EAGauhgB,KACT,EACA,IACgB,CAChBF,IAAgB1hnB,EAAQ,CAACqgH,CAAM,EAC/B,IAAMwhgB,EAAcN,IAAqBvhnB,CAAO,EAEhD,MADA,GAAO,QAAUqhnB,IAAuBQ,CAAW,EAC5CA,CACX,EClIaC,GACTzhgB,IAEA,IAAMrkG,EAAQo9B,GAAYinE,GAC1B,GAAIohgB,IAAsBzlmB,GAAQ,CAC9B,IAAIhc,EAAUohnB,IAAiBplmB,GAC/B,KAAOwlmB,IAAkBxhnB,IACrBA,EAAU4hnB,IAAa5lmB,EAAOhc,GAClC,OAAOgc,CACX,CAEA,GAAIA,EAAM0ub,UAAYt9S,OAAW,OAAOpxI,EAUxC,IAAMiU,EAAU,mDAAmDowF,EAAOqqV,QAAQ,6BAA6BrB,IAAqBqB,QAAQ,GAI5I,OAHAnkb,QAAQW,KAAK+I,GACb03M,GAAsB13M,EAAS,CAAEtJ,MAAO,SAAU,GAE3C3K,CACX,EC9Ca+lmB,IAAqB,sBACrBC,IAAqB,kCAarBC,IAAb,KAAaA,CACT/ld,IACAx1E,MACAvkB,OACAqnE,OACAzqD,OACAmjiB,QAAU,EACVC,cAAgB,GAEhB,YACIjmd,EACAx1E,EACAvkB,EACAqnE,EAAS,YACX,CACE,KAAK0yB,IAAMA,EACX,KAAKx1E,MAAQA,EACb,KAAKvkB,OAASA,EACd,KAAKqnE,OAASA,EAId,IAAM44e,EAAYn+mB,SAASI,cAAc,UACzC,KAAK06E,OAAS,IAAIy0C,QAASt3E,IACvB2nH,MAAMk+c,KACDv+c,KAAK,KAAO/3J,KACT,KAAK02mB,cAAgB,MAAM12mB,EAAK+yE,KAAA,EAChC,MAAM,KAAK6jiB,aAAaD,GACxBlmkB,EAAQkmkB,EACZ,GACC99c,MAAO/2I,IACJhH,QAAQhQ,MAAMi2J,KAAKC,UAAUl/I,IAC7B2uB,EAAQkmkB,EACZ,EACR,EACJ,CAEA,MAAcC,aAAatjiB,EAA0C,CAMjE,IAGMujiB,EAAQ,CACV,CAAEx8b,KAAM,YAAar3I,OAAQ,EAAG,EAChC,CAAEq3I,KAAM,iBAAkBr3I,OAAQ,EAAG,EACrC,CAAEq3I,KAAM,8BAA+Br3I,OAAQ,EAAG,CACtD,EAEA,IAAK,IAAIy8N,EAAQ,EAAGA,EAAQq3W,GAAar3W,IAAS,CAC9C,IAAMr2N,EAAMkqC,EAAOyjiB,WAAW,KAAM,CAChCtnT,MAAO,GACPunT,mBAAoB,EACxB,GACMt5jB,EAAsB,GAE5B,IAAK,GAAM,CAAE28H,OAAMr3I,YAAY6zkB,EAAO,CAElC,IAOII,EAAY,MAAMC,IAAaC,MADfC,GANHC,GACT,qEAAqEh9b,EAAK;wCAC1D,KAAKq8b,cAAc;4CACf1zkB,EAAO;gCAGHs0kB,EACGH,EAEnC7jiB,EAAO2H,MAAQ,GACf3H,EAAO5c,OAAS,GAChBttB,EAAImukB,UAAUN,EAAW,EAAG,GAI5B,IAAMO,EAASpukB,EAAImqC,aAAa,EAAG,EAAG,GAAI,KAAKvzE,MAAQ,GACnDy3mB,EAAUD,EAAO75mB,QAAU65mB,EAAOnzc,MAAO1iC,GAAOA,IAAO,KAC3DjkF,EAAS/+C,KAAK,CAAC,CAAC84mB,EACpB,CAGA,GAAI/5jB,EAAS2mH,MAAOhsK,GAAWA,GAAS,OAGxCyiB,QAAQW,KACJ,sBACAo7lB,EAAMxwjB,QAAQqxjB,EAAI94mB,IAAM,CAAC8+C,EAAS9+C,EAAE,EAAEiQ,IAAK4/B,GAAMA,EAAE4rI,IAAI,GAE3D,MAAMte,GAAM47c,IAAkBl4W,EAAQk4W,IAAkB,EAC5D,CAIA,KAAKjB,cAAgB,EACzB,CAEA,MAAM/ia,QAAiC,CAEnC,IAAMrgI,EAAS,MAAM,KAAKA,OACtBlqC,EAAMkqC,EAAOyjiB,WAAW,KAAM,CAAEtnT,MAAO,EAAM,GAI3CmoT,EAAW,MAAMV,IACnB,MAAME,GACFC,GACI,KAAK5md,IAAIn0J,QAAQi6mB,IAAoB,KAAKG,aAAa,KAM7D,CAAEz7hB,QAAOvkB,SAAQ+/iB,UAAS14e,UAAW,KAC3CzqD,EAAO2H,MAAQA,EAAQw7hB,EACvBnjiB,EAAO5c,OAASA,EAAS+/iB,EACzBrtkB,EAAIyukB,sBAAwB,GAC5BzukB,EAAI0ukB,aAAarB,EAAS,EAAG,EAAGA,EAAS,EAAG,GAC5CrtkB,EAAImukB,UAAUK,EAAU,EAAG,GAG3B,IAAMrgI,EAAU8/H,GAAY,KAAK5md,GAAG,EAChCsnV,EAAS,MAAMq/H,GAAY7/H,GAE/B,OAAO,IAAIxvX,SAASl9F,EAAKktlB,KACrB,GAAI,CACA,IAAM18jB,EAAMi4B,EAAO0kiB,UAAUj6e,GAC7BzqD,EAAO2kiB,OAAQ3pc,IACPA,EAAMzjJ,EAAI,CAAEwwB,MAAKizH,OAAMypU,SAAQR,SAAQ,GACtCwgI,EAAQvid,MAAM,kCACvB,EACJ,OAAS1zI,EAAK,CACVi2lB,EAAIj2lB,EACR,CACJ,EACJ,CACJ,EAMMu1lB,GAAe5md,GACjB,IAAIsiV,KAAK,CAACtiV,CAAG,EAAG,CAAE3yI,KAAM,6BAA8B,GAEpDs5lB,GAAe9oc,GACjB,IAAIvmD,SAASl9F,EAAKktlB,KACd,IAAMG,EAAS,IAAIC,WACnBD,EAAOE,OAAU1riB,IACb7hD,EAAI6hD,EAAG9sE,OAAOvH,MAAgB,CAClC,EACA6/mB,EAAOG,QAAUN,EACjBG,EAAOI,cAAchqc,EACzB,GAEE4oc,IAAgB77jB,GAClB,IAAI0sE,SAASl9F,EAAKktlB,KACd,IAAMn9hB,EAAQ,IAAI29hB,MAClB39hB,EAAMw9hB,WAAqBvtlB,EAAI+vD,GAC/BA,EAAMy9hB,QAAUN,EAChBn9hB,EAAMzmE,IAAMknC,CAChB,G,s1GC5KSm9jB,IAAb,KAAaA,C,gCASRvnf,E,EAAav5H,M,GAYbu5H,E,EAAawnf,e,GAObxnf,E,EAAaynf,Y,GAIbznf,E,EAAaw2C,Y,KA/Bdgkc,aACAtkmB,SACA,YAAYqpf,EAAuBrpf,EAA6B,C,UAC5D0sL,EAAe,IAAI,EACnB,KAAK43a,aAAej7G,EACpB,KAAKrpf,SAAWA,CACpB,CAEA,IAAczP,MAAe,CASzB,MAAQmH,CAPJuuD,EAAG,SACHnwD,EAAG,SACHwT,KAAM,OACN01M,MAAO,QACP5jF,MAAO,OAGH1jI,EAAc,KAAKsI,WAAa,EAC5C,CAEA,IAAcsxmB,eAAyB,CACnC,OACI,KAAKtxmB,WAAa4qI,GAAkB3kF,GACpC,KAAKq+iB,aAAakN,wBAE1B,CAEA,IAAcD,YAAsB,CAChC,OAAO,KAAKD,aAChB,CAEA,IAAchxc,YAA+B,CACzC,OAAO,KAAKgkc,aAAahkc,WAAWphH,OAC/BrY,GAAMA,EAAE7mC,WAAa,KAAKA,QAC/B,CACJ,CACJ,ECVayxmB,GAAb,KAA8B,CAC1B,YAAY,EAAsB,GAAI,CAClC,KAAK,MAAQh4kB,IAAgB,aACjC,CAEA,MAEA,eACI,EACA,EACI,CACJ,GAAM,CAAE,OAAM,YAAai4kB,GAAgB,YAAY3zd,GAAM,EAC7D,KAAK,QAAQ,CACT,MAAO+D,GAAc,YACrB,YAAa91H,EACb,gBAAiB2llB,EACjB,aAAc1vkB,GAAK,aACnB,mBAAoBA,GAAK,kBAC7B,CAAC,CACL,CAEA,oBAAoB,EAAoB,CACpC,KAAK,QAAQ,CACT,MAAO6/G,GAAc,aACrB,YAAa6B,IAAmB,iBAChC,aAAchgJ,EAAM,OACxB,CAAC,CACL,CAEA,yBAAyB,EAA0B,CAC/C,KAAK,QAAQ,CACT,MAAOm+I,GAAc,aACrB,YAAa6B,IAAmB,iBAChC,aAAc,KAAK,UAAUsjT,CAAQ,CACzC,CAAC,CACL,CAEA,gBACI,EACA,EACA,EACI,CACJ,KAAK,QAAQ,CACT,MAAOnlT,GAAc,aACrB,aAAc,cAAc/D,IAC5B,aAAc,KAAK,UAAUwqC,CAAI,EACjC,cACJ,CAAC,CACL,CAGA,qBACI,EACA,EACA,EACI,CACJ,KAAK,QAAQ,CACT,MAAOzmC,GAAc,wBACrB,YAAa9zC,EACb,aAAci6Y,EACd,cACJ,CAAC,CACL,CAGA,uBACI,EACA,EACI,CACJ,KAAK,QAAQ,CACT,GAAG2pH,GAAuC3vkB,CAAG,EAC7C,MAAO6/G,GAAc,sBACrB,YAAa9zC,EACb,YAAa/rE,EAAI,MACrB,CAAC,CACL,CAEA,6BACI,EACA,EACI,CACJ,KAAK,QAAQ,CACT,GAAG2vkB,GAAuC3vkB,CAAG,EAC7C,MAAO6/G,GAAc,aACrB,YAAa9zC,EACb,aAAc/rE,EAAI,QAAU,KAAK,UAAUA,EAAI,OAAO,EAAI,MAC9D,CAAC,CACL,CAEA,2BACI,EACA,EACI,CACJ,KAAK,QAAQ,CACT,GAAG2vkB,GAAuC3vkB,CAAG,EAC7C,MAAO6/G,GAAc,aACrB,YAAa9zC,EACb,YAAa/rE,EAAI,MACrB,CAAC,CACL,CAEA,gBACI,EAAiB,iBACjB,EAMI,CACJ,GAAM,CAAE,OAAM,YAAayvkB,GACvBG,IAAY5vkB,EAAI,UAAU,GAAK,EACnC,EACA,KAAK,QAAQ,CACT,MAAO6/G,GAAc,aACrB,YAAa9zC,EACb,YAAa/rE,EAAI,MACjB,YAAajW,EACb,gBAAiB2llB,EACjB,mBAAoB1vkB,EAAI,mBACxB,aAAcA,EAAI,YACtB,CAAC,CACL,CAEA,aAAa,EAAiB,iBAAkB,EAAsB,CAClE,KAAK,QAAQ,CACT,MAAO6/G,GAAc,UACrB,YAAa9zC,EACb,YAAaqzD,CACjB,CAAC,CACL,CAEA,kBACI,EACA,EACI,CACJ,KAAK,QAAQ,CACT,MAAOvf,GAAc,eACrB,YAAa9zC,EACb,YAAaqzD,CACjB,CAAC,CACL,CAEA,oBAAoB,EAAkB,EAAqB,CACvD,KAAK,QAAQ,CACT,MAAOvf,GAAc,iBACrB,YAAayod,EACb,aAAcvzH,CAClB,CAAC,CACL,CAEA,QAAkB,EAAsB,CAMhC,OAAO,OAAW,KAYlB,OAAO,WAAW,KAAK,CAAE,GAAGzge,EAAO,OAAQ,EAAK,CAAC,CAEzD,CAEA,wBAAwB,EAAgC,CACpD,SAASu7lB,EAAgB,GAAG34e,EAAkB,CAK1C,OAAO,WAAW,KAAK,SAAiC,CAC5D,CACA24e,EAAgB,UAAW,SAAUC,CAAO,CAChD,CACJ,EAEA,SAASF,IAAY,EAAkC,CAGnD,GAAI39jB,IAAQ,OAEZ,GAAI,CAEA,OAAO,IADY,IAAIA,CAChB,EAAO,QAClB,MAAQ,CAEJ,MACJ,CACJ,CAGA,SAAgBw9jB,GAAgB,EAG9B,CAEE,OADI1llB,EAAK,QAAU,IAAY,CAAE,MAAK,EAC/B,CAAE,KAAMA,EAAK,MAAM,EAAG,GAAG,EAAG,SAAUA,EAAK,MAAM,GAAG,CAAE,CACjE,CAEA,SAAS4llB,GACL,EACgB,CAEhB,GAAM,CAAE,OAAM,YAAaF,IADVzvkB,EAAI,KAAO,YAAYA,EAAI,OAAS,SACE,EAAE,EACzD,MAAO,CACH,YAAajW,EACb,gBAAiB2llB,EACjB,aAAc1vkB,EAAI,aAClB,mBAAoBA,EAAI,kBAC5B,CACJ,CC7JA,IAAa+vkB,IACT,IAoDO,CAxCH,IAAK3oH,EAAQ,0BAA0BA,EAAQ,SAAS,EACxD,OAAQA,EAAQ,OAAO,UACvB,OAAQA,EAAQ,OAAO,UACvB,UAAWA,EAAQ,UACnB,gBAAiBA,EAAQ,gBAAkB,OAAS,OACpD,cAAeA,EAAQ,qBAAuB,IAAM,IACpD,KAAMA,EAAQ,UACd,OAAQA,EAAQ,IAAI,OACpB,MAAOA,EAAQ,sBACf,aACIA,EAAQ,MAAM,cAAgB58W,GAAgB,YACxC,IACA,IACV,eAAgB48W,EAAQ,eAAiB,IAAM,IAC/C,QAASA,EAAQ,wCACXykH,GACIzkH,EAAQ,UAAU,mBACtB,EACA,OACN,MAAOA,EAAQ,0CACT4kH,IAAgC5kH,EAAQ,WAAW,WAAW,EAC9D,OACN,UAAWykH,GACPzkH,EAAQ,UAAU,UAAU,mBAChC,EACA,MAAOA,EAAQ,UAAU,MAAM,SAAW,IAAM,IAChD,cAAgB4oH,GACZ5oH,EAAQ,UAAU,MAAM,SACxB1tB,EACJ,EAEM,OADAu2I,IAAuB7oH,EAAQ,UAAU,MAAM,QAAQ,EAE7D,UACIA,EAAQ,UAAU,MAAM,SAElB,OADAnsB,GAAQmsB,EAAQ,UAAU,MAAM,KAAM,CAAC,CAAC,CAAC,SAAS,EAE5D,YAAaA,EAAQ,gBAAgB,OACrC,YAAaA,EAAQ,gBAAgB,OACrC,QAASA,EAAQ,YAEd,GAgCX,SAAgB8oH,IAAmB,EAAkC,CAEjE,GAAM,CAACrjB,EAAKD,GAAOujB,EACd,MAAM,GAAG,CAAC,CACV,IAAK,GAAM,CAAC1rkB,CAAC,CAAC,CACd,MAAM,EAAG,CAAC,EACf,MAAO,CAACmojB,EAAKC,CAAG,CACpB,CAEA,SAASojB,IAAuB,EAA0B,CAEtD,IAAMrjB,EAAM3xH,GAAQm1I,EAAO,GAAI,CAAC,EAEhC,MAAO,CADKn1I,GAAQm1I,EAAO,GAAI,CACvB,EAAKxjB,CAAG,CAAC,CAAC,KAAK,GAAG,CAC9B,CC1GA,eAAsByjB,IAClB,EACA,EAIqB,CAErB,GAAI,CAAC98mB,GAAS,eACN8umB,EAAa,UAAU,sBAAwB,EAC/C,MAAO,CAAC,EAIhB,IAAMiO,EACF/8mB,GAAS,eAAiB8umB,EAAa,UAAU,oBAAoB,GACnEkO,EAAmBlO,EAAa,eAAe,oBAE/C5jI,EAAoB+xI,IAAgCnO,CAAY,EACtE,GAAI5jI,EAAkB,SAAW,EAAG,MAAO,CAAC,EAE5C,IAAMgyI,EACFl9mB,GAAS,qBAAuB8umB,EAAa,oBACjD,GAAI,CAACoO,EAAqB,MAAO,CAAC,EAGlC,IAAMttI,EAAa55T,GAAgB+mc,CAAa,EAChD,GAAI,CAACntI,GAAc,CAAC37T,GAAe27T,CAAU,EAAG,MAAO,CAAC,EAExD,IAAMC,EAAyBi/H,EAAa,uBACtC59I,EAAa49I,EAAa,MAAM,IAAIA,EAAa,WAAW,EAC5D9kkB,EAAO8kkB,EAAa,QAE1B,OAAOqO,IAAoB,CACvB,sBACA,gBACA,mBACA,oBACA,yBACA,aACA,MACJ,CAAC,CACL,CAGA,eAAsBA,IAClB,EACqB,CACrB,OAAOxlnB,GAAMkhD,CAAM,CAAC,CACf,KAAK,CAAE,oBAAqB6+F,GAAoB,IAAK,MAAS,CAAC,CAAC,CAAC,CACjE,KACG,CAAE,oBAAqBA,GAAoB,gBAAiB,GAC3D,CAAE,sBAAuBsle,CAC9B,CAAC,CACA,KACG,CAAE,oBAAqBtle,GAAoB,aAAc,EACxD,GAAW0le,IAA2BvkkB,CAAM,CACjD,CAAC,CACA,KACG,CAAE,oBAAqB6+F,GAAoB,YAAa,EACxD,KAAO,IACH2le,IAAkC,CAC9B,WAAY,MACZ,aAAc,KACd,GAAGxkkB,CACP,CAAC,CACT,CAAC,CACA,KACG,CAAE,oBAAqB6+F,GAAoB,UAAW,EACtD,KAAO,IACH2le,IAAkC,CAC9B,WAAY,aACZ,aAAc,IACd,GAAGxkkB,CACP,CAAC,CACT,CAAC,CACA,KACG,CAAE,oBAAqB6+F,GAAoB,SAAU,EACrD,KAAO,IAAW4le,IAA+BzkkB,CAAM,CAC3D,CAAC,CACA,KACG,CAAE,oBAAqB6+F,GAAoB,SAAU,EACrD,KAAO,IAAW6le,IAAuB1kkB,CAAM,CACnD,CAAC,CACA,WAAW,CACpB,CAEA,SAAS2kkB,GACL,EACsD,CAOtD,OANK3tI,EAME,IALH,QAAQ,KACJ,4FACJ,EACO,GAGf,CAEA,SAAS4tI,IACL,EACwB,CAOxB,MANI,CAACvsJ,GAAcA,EAAW,WAAaA,EAAW,SAClD,QAAQ,KACJ,gFACJ,EACO,IAEJ,EACX,CAGA,SAASwsJ,IAAiC,CACtC,WACA,aACA,iBAKa,CAGb,OAFIC,EAAc,SAAW,EAAUlsK,EAEhCA,EAAS,OAAQ,GAAe,CACnC,IAAMmsK,EAAa1sJ,EAAW,2BAA2B,IAAIvuB,CAAU,EAEvE,OADKi7K,EACED,EAAc,MAChB,GAASC,EAAW,IAAI5zkB,CAAI,CAAC,EAAE,QAAU,MAC9C,EAHwB,EAI5B,CAAC,CACL,CAOA,SAAgBizkB,IACZ,EACY,CAIZ,IAAMY,EAHoB/O,EAAa,qBAGI,OAAQ,GAAe,CAC9D,IAAMtwd,EAASw3B,GAAgB2sR,CAAU,EACzC,MAAO,EAAEnkT,GAAUy1B,GAAez1B,CAAM,GAAKA,EAAO,aACxD,CAAC,EAEK0yU,EAAa49I,EAAa,MAAM,IAAIA,EAAa,WAAW,EAClE,GAAI,CAAC2O,IAAsBvsJ,CAAU,EAAG,OAAO2sJ,EAE/C,IAAMF,EAAgB7O,EAAa,kBAC7Br2c,GAAiB,CAACq2c,EAAa,UAAWA,EAAa,OAAO,CAAC,EAC/D,CAAC,EAIP,OAFI6O,EAAc,SAAW,EAAUE,EAEhCH,IAAiC,CACpC,SAAUG,EACV,aACA,eACJ,CAAC,CACL,CAMA,SAAgBT,IAA2B,CACvC,gBACA,qBAC+C,CAC/C,IAAM5+d,EAASw3B,GAAgB+mc,CAAa,EAG5C,GAAI,CAACv+d,EAAQ,MAAO,CAAC,EAErB,IAAMs/d,EAAqB,IAAI,IAAI5yI,CAAiB,EAC9C6yI,EAAQ,IAAI,IAGdD,EAAmB,WAAqB,GAAGC,EAAM,IAAIt7K,GAAiB,EAI1E,IAAMnsR,EAAgBG,IAAiBj4B,EAAO,IAAI,EAE5Cw/d,EAAe,GAA0BF,EAAmB,IAAI/inB,CAAI,EAGpEy5K,EAAc8B,EAAc,KAC7B,GAAMlC,GAAmBhkH,CAAC,GAAK4tjB,EAAY5tjB,EAAE,IAAI,CACtD,EACIokH,GAAaupc,EAAM,IAAIvpc,EAAY,IAAI,EAI3C,IAAMypc,EAAgB3nc,EAAc,KAC/B,GAAMnC,GAAqB/jH,CAAC,GAAK4tjB,EAAY5tjB,EAAE,IAAI,CACxD,EACA,GAAI6tjB,EACAF,EAAM,IAAIE,EAAc,IAAI,MACzB,CACH,IAAMC,EAAY5nc,EAAc,KAC3B,GAAMpC,GAAiB9jH,CAAC,GAAK4tjB,EAAY5tjB,EAAE,IAAI,CACpD,EACI8tjB,GAAWH,EAAM,IAAIG,EAAU,IAAI,CAC3C,CAEA,OAAO,MAAM,KAAKH,CAAK,CAC3B,CAGA,eAAeV,IAAkC,CAC7C,gBACA,oBACA,yBACA,aACA,cAAc,EACd,eAAe,KAKO,CACtB,GAAI,CAEA,GAAI,CAACG,GAAsB3tI,CAAsB,EAAG,MAAO,CAAC,EAC5D,IAAMxse,EAAO,MAAMwse,EAAuBI,CAAU,EAapD,OAAOkuI,IAAmB,CACtB,OAAQpB,EACR,WAXe7xI,EAAkB,OAAQ,GAAe,CACxD,IAAM1sV,EAASw3B,GAAgB2sR,CAAU,EAEzC,OADkBnkT,GAAUy1B,GAAez1B,CAAM,GAC7BmkT,IAAeo6K,CACvC,CAOI,EACA,WALe,IAAI15mB,EAAK,IAAK,GAAQ,CAACw8K,EAAI,OAAQA,EAAI,KAAK,CAAC,CAK5D,EACA,cACA,cACJ,CAAC,CACL,OAAS1xK,EAAO,CAKZ,OAJA,QAAQ,MACJ,oDACAA,CACJ,EACO,CAAC,CACZ,CACJ,CAGA,eAAeovmB,IAAuB,CAClC,gBACA,oBACA,yBACA,cAAc,GACsC,CACpD,GAAI,CAEA,GAAI,CAACC,GAAsB3tI,CAAsB,EAAG,MAAO,CAAC,EAI5D,IAAMuuI,GAAc,MAHDvuI,EAAuB,WAAW,GAG5B,KAAM,GAAUl8a,EAAM,SAAWopjB,CAAa,EACvE,GAAI,CAACqB,EAED,OADA,QAAQ,KAAK,+BAA+BrB,GAAe,EACpD,CAAC,EAIZ,IAAMsB,EAAuB,IAAI,IAAInzI,CAAiB,EAMtD,OAL2BkzI,EAAY,MAAM,OAAQ,GACjDC,EAAqB,IAAIC,CAAQ,CAI9B,EAAmB,MAAM,EAAGh6F,CAAW,CAClD,OAASn2gB,EAAO,CAEZ,OADA,QAAQ,MAAM,uCAAwCA,CAAK,EACpD,CAAC,CACZ,CACJ,CAGA,eAAemvmB,IAA+B,CAC1C,gBACA,oBACA,aACA,yBACA,cAAc,EACd,YAAY,GACZ,QAC+C,CAE/C,IAAMiB,EAAoBrzI,EAAkB,OAAQ,GAAe,CAC/D,IAAM1sV,EAASw3B,GAAgB2sR,CAAU,EACzC,OAAOnkT,GAAUy1B,GAAez1B,CAAM,CAC1C,CAAC,EAGD,GAAI,CAACi/d,IAAsBvsJ,CAAU,EAAG,MAAO,CAAC,EAEhD,IAAMlpc,EAASw2lB,IAAuB,CAClC,SAAUD,EACV,aACA,gBACA,MACJ,CAAC,EAGD,GAAI,CAACf,GAAsB3tI,CAAsB,EAAG,MAAO,CAAC,EAC5D,IAAM4uI,EAAiB,MAAM5uI,EAAuB,YAAY,EAKhE,OAAO6uI,IAAmB,CACtB,gBACA,SACA,eAPmB,IACnBD,EAAe,IAAK,GAAQ,CAAC5+b,EAAI,OAAQA,EAAI,KAAK,CAAC,CAMnD,EACA,cACA,WACJ,CAAC,CACL,CAGA,SAAgBs+b,IAAmB,CAC/B,SACA,aACA,SACA,cAAc,EACd,eAAe,KASF,CAEb,IAAM7lM,EAActwZ,EAAO,IAAI/kB,CAAM,EACrC,GAAIq1a,IAAgB,OAEhB,OADA,QAAQ,KAAK,iBAAiBr1a,EAAO,qBAAqB,EACnD,CAAC,EAIZ,IAAMw6K,EAAW,CAAE,cAAa,cAAa,cAAa,EAGpDytT,EAAoB,MAAM,KAAKljd,EAAO,KAAK,CAAC,CAAC,CAAC,OAC/C,GAAe26a,IAAe1/b,CACnC,EACM07mB,EAAkB3pV,GAAck2M,EAGhC0zI,EAAkBjoc,IAAuB1zK,CAAM,EAGrD,GAAI,CAAC27mB,EACD,OAAOC,GAAyB,CAC5B,SACA,WAAYF,EACZ,GAAGlhc,CACP,CAAC,EAIL,GAAM,CAACqhc,EAAyBC,GAA6B32I,GACzDu2I,EACC,GAAShoc,IAAuB57K,CAAI,IAAM6jnB,CAC/C,EAGMI,EAAqBH,GAAyB,CAChD,SACA,WAAYC,EACZ,GAAGrhc,CACP,CAAC,EAGD,GAAIuhc,EAAmB,QAAU16F,EAAa,OAAO06F,EAGrD,IAAMC,EAAiB36F,EAAc06F,EAAmB,OAClDE,EAAsBL,GAAyB,CACjD,SACA,WAAYE,EACZ,GAAGthc,EACH,YAAawhc,CACjB,CAAC,EAEKE,EAAgB,CAAC,GAAGH,EAAoB,GAAGE,CAAmB,EAQpE,OANIC,EAAc,SAAW,GACzB,QAAQ,KACJ,yBAAyBC,EAAa,QAAQn8mB,EAAO,WAAWq1a,EAAY,EAChF,EAGG6mM,CACX,CAEA,IAAMN,IAA4B,CAC9B,SACA,aACA,cACA,cAAc,EACd,eAAe,QAOC,CAChB,IAAMQ,EAAiB,KAAK,IAAI/mM,CAAW,EACrCgnM,EAAiB,KAAK,IAAIF,CAAY,EAE5C,OAAOz7H,GACH3uN,EACA+uN,GAAO,GAAe,CAClB,IAAMxqf,EAAQyuB,EAAO,IAAI26a,CAAU,EACnC,GAAIppc,IAAU,OACd,MAAO,CACH,aAGA,WAAY,KAAK,IAAI,KAAK,IAAIA,CAAK,EAAI8lnB,CAAc,CACzD,CACJ,CAAC,EACDv7H,GAASy7H,GAAW,EAEpBz7H,IAAU,CAAE,gBAAiBrve,GAAc6qmB,CAAc,EACzD1mF,GAAU,GAAShzf,EAAK,UAAU,EAClC45kB,GAAOl7F,CAAW,EAClBvgC,GAAO,GAASn+c,EAAK,UAAU,CACnC,CACJ,EASA,SAAgB84kB,IAAmB,CAC/B,SACA,aACA,cAAc,EACd,gBACA,YAAY,IAUC,CACb,IAAMe,EAAa97H,GACf,MAAM,KAAK37d,EAAO,QAAQ,CAAC,EAC3B+7d,IAAO,CAACphD,EAAYppc,MAAY,CAAE,aAAY,OAAM,EAAE,EACtDq/hB,GAAU,GAAShzf,EAAK,KAAK,CACjC,EAEA,GAAI65kB,EAAW,SAAW,EAAG,MAAO,CAAC,EAGrC,IAAMC,EAAUC,GAAQF,EADL,KAAK,KAAKA,EAAW,OAASn7F,CACb,CAAU,EAIxCs7F,EACF7C,IAAkB,QAAa/0lB,EAAO,IAAI+0lB,CAAa,EACjD2C,EAAQ,UAAW,GACfv3kB,EAAO,KAAM,GAASvC,EAAK,aAAem3kB,CAAa,CAC3D,EACA,GAiBV,OAAO8C,GAfUl8H,GACb+7H,EACA37H,IAAO,EAAQ,IAAgB,CAC3B,GAAI57c,EAAO,SAAW,GAGlB23kB,IAAgBF,EAEpB,OAAOG,EACDC,IAAmB73kB,EAAQ83kB,CAAU,EACrCC,IAAkB/3kB,EAAQ83kB,CAAU,CAC9C,CAAC,EACDn8H,GAASy7H,GAAW,CAGR,CAAQ,CAC5B,CAGA,SAASW,IACL,EACA,EACsB,CACtB,OAAOp/F,GAAQ34e,EAAS,GAAS83kB,EAAW,IAAIr6kB,EAAK,UAAU,GAAK,CAAC,CAAC,EAChE,UACV,CAGA,SAASo6kB,IACL,EACA,EACsB,CAEtB,IAAMlpV,EAAU3uP,EAAO,IAAK,GAAS83kB,EAAW,IAAIr6kB,EAAK,UAAU,GAAK,CAAC,EAEnEu6kB,EAAcC,IAAMtpV,CAAO,EAGjC,GAAIqpV,IAAgB,EAAG,OAAOE,IAASl4kB,EAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,WAYtD,IAAI+2L,EAAS,KAAK,OAAO,EAAIihZ,EAC7B,IAAK,IAAIl+mB,EAAI,EAAGA,EAAIkmC,EAAO,OAAQ,IAE/B,GADA,GAAU2uP,EAAQ70R,GACdi9N,GAAU,EAAG,OAAO/2L,EAAOlmC,EAAE,CAAC,WAGtC,OAAOkmC,EAAOA,EAAO,OAAS,EAAE,EAAE,UACtC,CAEA,SAASq2kB,IAAuB,CAC5B,WACA,aACA,gBACA,QAMwB,CAGxB,GAAIzB,EAAe,CACf,IAAM1mF,EACFnlE,EAAW,2BAA2B,IAAI6rJ,CAAa,EAE3D,GAAI,CAAC1mF,EACD,OAAOiqF,GAAoB,CACvB,WACA,aACA,KAAMt2kB,GAAQknb,EAAW,OAC7B,CAAC,EAEL,IAAMxf,EAAQ,CAAC,GAAG2kF,EAAW,KAAK,CAAC,EACnC,GAAIrsf,IAAS,OAAW,CAKpB,IAAMu2kB,EAFc1zc,GAAM6kS,EAAM,OAAQ,GAAMvhZ,GAAKnmB,CAAI,CAElC,GAAeA,EAC9BhiB,EAASs4lB,GAAoB,CAC/B,WACA,aACA,KAAMC,CACV,CAAC,EAWD,OARIv4lB,EAAO,OAAS,GAAKu4lB,IAAiBrvJ,EAAW,QAC1CovJ,GAAoB,CACvB,WACA,aACA,KAAMpvJ,EAAW,OACrB,CAAC,EAGElpc,CACX,CAGI,OAAOs4lB,GAAoB,CACvB,WACA,aACA,KAJYzzc,GAAM6kS,CAIZ,GAAWwf,EAAW,OAChC,CAAC,CAET,CAGA,IAAMx0X,EAAa1yD,GAAQknb,EAAW,QAChClpc,EAASs4lB,GAAoB,CAC/B,WACA,aACA,KAAM5jhB,CACV,CAAC,EAYD,OARI10E,EAAO,OAAS,GAAK00E,IAAew0X,EAAW,QACxCovJ,GAAoB,CACvB,WACA,aACA,KAAMpvJ,EAAW,OACrB,CAAC,EAGElpc,CACX,CAGA,SAASs4lB,GAAoB,CACzB,WACA,aACA,QAKwB,CACxB,IAAMt4lB,EAAS,IAAI,IACnB,IAAK,IAAM26a,KAAc8O,EAAU,CAC/B,IAAMl4c,EAAQ23d,EAAW,2BACpB,IAAIvuB,CAAU,CAAC,EACd,IAAI34Z,CAAI,CAAC,EAAE,MACbzwC,IAAU,QAAWyuB,EAAO,IAAI26a,EAAYppc,CAAK,CACzD,CACA,OAAOyuB,CACX,CCprBA,SAAS+4U,GAAS,EAA0B,CACxC,MAAO,CAAE,OAAQ,QAAS,OAAM,CACpC,CAGA,SAASy/Q,GAAW,EAAkB,EAAgC,CAClE,MAAO,CAAE,OAAQ,UAAW,WAAU,QAAO,CACjD,CAGA,SAAS1jJ,IAA6B,CAClC,MAAO,CAAE,OAAQ,SAAU,CAC/B,CAGA,IAAa2jJ,GAAuB,CAChC,QAAS,UACT,SAAU,WACV,aAAc,gBACd,YAAa,cACjB,EAWA,SAASC,GACL,EACoB,CAIpB,OAHInnnB,IAAU,OAAkBuje,GAAQ,EACpCvje,IAAU,IAAYwnW,GAAM,EAAI,EAChCxnW,IAAU,IAAYwnW,GAAM,EAAK,EAC9By/Q,GAAQjnnB,EAAO,6BAA6BA,EAAM,EAAE,CAC/D,CAGA,SAASonnB,IACL,EACsB,CAItB,OAHIpnnB,IAAU,OAAkBuje,GAAQ,EACpCvje,IAAUq7I,GAAU,QAAUr7I,IAAUq7I,GAAU,IAC3CmsN,GAAMxnW,CAAK,EACfinnB,GACHjnnB,EACA,sCAAsC,OAAO,OAAOq7I,EAAS,CAAC,CAAC,KAAK,IAAI,GAC5E,CACJ,CAGA,SAASgse,IACL,EACmC,CAGnC,OAFIrnnB,IAAU,OAAkBuje,GAAQ,EACpC2mC,GAAqBlqgB,CAAK,EAAUwnW,GAAMxnW,CAAK,EAC5CinnB,GACHjnnB,EACA,qCAAqC,OAAO,OAAOs6I,EAA0B,CAAC,CAAC,KAAK,IAAI,GAC5F,CACJ,CASA,SAASgte,IACL,EAC0B,CAC1B,GAAItnnB,IAAU,OAAW,OAAOuje,GAAQ,EAExC,OAAQvje,EAAR,CACI,KAAKknnB,GAAqB,QACtB,OAAO1/Q,GAAM,CAAE,MAAOgjG,GAAa,OAAQ,CAAC,EAChD,KAAK08K,GAAqB,SACtB,OAAO1/Q,GAAM,CAAE,MAAOgjG,GAAa,QAAS,CAAC,EACjD,KAAK08K,GAAqB,aACtB,OAAO1/Q,GAAM,CACT,MAAOgjG,GAAa,SACpB,YAAa60C,GAAqB,IACtC,CAAC,EACL,KAAK6nI,GAAqB,YACtB,OAAO1/Q,GAAM,CACT,MAAOgjG,GAAa,SACpB,YAAa60C,GAAqB,GACtC,CAAC,EACL,QACI,OAAO4nI,GACHjnnB,EACA,yCAAyC,OAAO,OAAOknnB,EAAoB,CAAC,CAAC,KAAK,IAAI,GAC1F,CACR,CACJ,CAGA,SAASK,IACL,EACsB,CAKtB,OAJIvnnB,IAAU,OAAkBuje,GAAQ,EACpCvje,IAAUm9I,GAAU,UAAYn9I,IAAUm9I,GAAU,SAC7CqqN,GAAMxnW,CAAK,EAEfinnB,GACHjnnB,EACA,2CAA2C,OAAO,OAAOm9I,EAAS,CAAC,CAAC,KAAK,IAAI,GACjF,CACJ,CAUA,SAASqqe,GAAkB,EAAwB,CAU/C,MAFA,GANIxnnB,IAAU,YAAcA,IAAU,UAGlC,UAAU,KAAKA,CAAK,GAGpB,yBAAyB,KAAKA,CAAK,EAG3C,CASA,SAASynnB,IAAe,EAAgD,CACpE,GAAIznnB,IAAU,QAAaA,IAAU,GAAI,OAAOuje,GAAQ,EAGxD,GAAIvje,EAAM,SAAS,IAAI,EAAG,CACtB,IAAMmsC,EAAQnsC,EAAM,MAAM,IAAI,EAC9B,GAAImsC,EAAM,SAAW,EACjB,OAAO86kB,GACHjnnB,EACA,kDACJ,EAGJ,GAAM,CAACmU,EAAO+qC,GAAO/S,EAGfu7kB,EAAavzmB,IAAU,IAAMqzmB,GAAkBrzmB,CAAK,EACpDwzmB,EAAWzokB,IAAQ,IAAMsokB,GAAkBtokB,CAAG,EASpD,MAPI,CAACwokB,GAAc,CAACC,EACTV,GACHjnnB,EACA,2EACJ,EAGGwnW,GAAMxnW,CAAK,CACtB,CAKA,OAFIwnnB,GAAkBxnnB,CAAK,EAAUwnW,GAAMxnW,CAAK,EAEzCinnB,GACHjnnB,EACA,2EACJ,CACJ,CAGA,SAAS4nnB,IAAgB,EAAiD,CACtE,OAAOT,GAAyBnnnB,CAAK,CACzC,CAGA,SAAS6nnB,IACL,EAC6B,CAC7B,GAAI7nnB,IAAU,OAAW,OAAOuje,GAAQ,EAExC,IAAM1+L,EAAWu+U,IAAmBpjnB,CAAK,EAKzC,OAJI6kS,GAAU,SAAW,GAAK,CAAC,MAAMA,EAAS,EAAE,GAAK,CAAC,MAAMA,EAAS,EAAE,EAC5D2iE,GAAM3iE,CAAQ,EAGlBoiV,GAAQjnnB,EAAO,mCAAmCA,EAAM,EAAE,CACrE,CAGA,SAAS8nnB,IAAoB,EAAgD,CACzE,GAAI9nnB,IAAU,OAAW,OAAOuje,GAAQ,EAExC,IAAM5pX,EAASitD,IAAsB5mK,CAAK,EAG1C,OAFI25G,IAAW,OAERstgB,GAAQjnnB,EAAO,gCAAgCA,EAAM,EAAE,EAF7BwnW,GAAM7tP,CAAM,CAGjD,CAGA,SAASougB,IACL,EAC0B,CAG1B,OAFI/nnB,IAAU,OAAkBuje,GAAQ,EACpCo7D,IAAqB3+hB,CAAK,EAAUwnW,GAAMxnW,CAAK,EAC5CinnB,GACHjnnB,EACA,kCAAkC,OAAO,OAAOsjJ,EAAa,CAAC,CAAC,KAAK,IAAI,GAC5E,CACJ,CAGA,SAAS0ke,IACL,EACyB,CACzB,GAAIhonB,IAAU,OAAW,OAAOuje,GAAQ,EAExC,IAAM56d,EAAQk2mB,GAAoB7+mB,CAAK,EAGvC,OAFI2I,EAAc6+V,GAAM7+V,CAAK,EAEtB46d,GAAQ,CACnB,CAGA,SAAS0kJ,IACL,EACyB,CAKzB,OAJIjonB,IAAU,OAAkBuje,GAAQ,EAIjC/7H,GAFWs3Q,IAA4B9+mB,CAEjC,GAAa,CAAC,CAAC,CAChC,CAGA,SAASkonB,IAAgB,EAAsD,CAC3E,GAAIlonB,IAAU,OAAW,OAAOuje,GAAQ,EACxC,IAAM56d,EAAQs2mB,IAA2Bj/mB,CAAK,EAE9C,OADI2I,EAAc6+V,GAAM7+V,CAAK,EACtB46d,GAAQ,CACnB,CAGA,SAAS4kJ,IACL,EAC0B,CAG1B,OAFInonB,IAAU,OAAkBuje,GAAQ,EACpC6kJ,IAAqBponB,CAAK,EAAUwnW,GAAMxnW,CAAK,EAC5CinnB,GACHjnnB,EACA,uCAAuC,OAAO,OAAOs9I,EAAa,CAAC,CAAC,KAAK,IAAI,GACjF,CACJ,CAGA,SAAS+qe,IACL,EAC4B,CAI5B,OAHIronB,IAAU,OAAkBuje,GAAQ,EACpCvje,IAAU,IAAYwnW,GAAM9pN,GAAgB,WAAW,EACvD19I,IAAU,IAAYwnW,GAAM9pN,GAAgB,MAAM,EAC/Cupe,GAAQjnnB,EAAO,6BAA6BA,EAAM,EAAE,CAC/D,CAGA,SAASsonB,IACL,EACoB,CACpB,OAAOnB,GAAyBnnnB,CAAK,CACzC,CAGA,SAASuonB,IACL,EAC4B,CAI5B,OAHIvonB,IAAU,OAAkBuje,GAAQ,EACpCvje,IAAU,IAAYwnW,GAAM,WAAW,EACvCxnW,IAAU,IAAYwnW,GAAM,KAAK,EAC9By/Q,GAAQjnnB,EAAO,6BAA6BA,EAAM,EAAE,CAC/D,CAGA,SAASwonB,IACL,EAC4B,CAG5B,OAFIxonB,IAAU,OAAkBuje,GAAQ,EACpCw4C,IAAuB/7gB,CAAK,EAAUwnW,GAAMxnW,CAAK,EAC9CinnB,GAAQjnnB,EAAO,2BAA2B,CACrD,CAGA,SAASyonB,IAAsB,EAAgD,CAE3E,OADIzonB,IAAU,QAAaA,IAAU,GAAWuje,GAAQ,EACjD/7H,GAAMxnW,CAAK,CACtB,CAGA,SAAS0onB,IACL,EACoB,CACpB,OAAOvB,GAAyBnnnB,CAAK,CACzC,CAGA,SAAS2onB,IACL,EACiB,CAGjB,OAFI3onB,IAAU,OAAkBuje,GAAQ,EACpCvje,IAAU,OAAewnW,GAAM,EAAI,EAChC+7H,GAAQ,CACnB,CAEA,SAASqlJ,IACL,EAC0C,CAK1C,OAJI5onB,IAAU,OAAkBuje,GAAQ,EAEpC1kV,IAAqC7+I,CAAK,EAAUwnW,GAAMxnW,CAAK,EAE5DinnB,GACHjnnB,EACA,+CAA+C0+I,IAAyC,KAAK,IAAI,GACrG,CACJ,CA+CA,SAAgBmqe,IACZ,EACwB,CACxB,MAAO,CACH,IAAKxB,IAAc/nkB,EAAO,GAAG,EAC7B,QAASgokB,IAAkBhokB,EAAO,OAAO,EACzC,UAAWiokB,IAAoBjokB,EAAO,SAAS,EAC/C,gBAAiBqpkB,IAA0BrpkB,EAAO,eAAe,EACjE,OAAQ8nkB,IAAoB9nkB,EAAO,MAAM,EACzC,OAAQ8nkB,IAAoB9nkB,EAAO,MAAM,EACzC,KAAMmokB,IAAenokB,EAAO,IAAI,EAChC,cAAeopkB,IAAwBppkB,EAAO,aAAa,EAC3D,MAAOsokB,IAAgBtokB,EAAO,KAAK,EACnC,cAAeuokB,IAAwBvokB,EAAO,aAAa,EAC3D,UAAWwokB,IAAoBxokB,EAAO,SAAS,EAC/C,OAAQyokB,IAAiBzokB,EAAO,MAAM,EACtC,UAAW0okB,IAAsB1okB,EAAO,SAAS,EACjD,QAAS2okB,IAAkB3okB,EAAO,OAAO,EACzC,MAAO4okB,IAAgB5okB,EAAO,KAAK,EACnC,MAAO6okB,IAAgB7okB,EAAO,KAAK,EACnC,aAAc+okB,IAAuB/okB,EAAO,YAAY,EACxD,eAAgBgpkB,IAAyBhpkB,EAAO,cAAc,EAC9D,yBAA0BipkB,IACtBjpkB,EAAO,wBACX,EACA,YAAakpkB,IAAsBlpkB,EAAO,WAAW,EACrD,YAAampkB,IAAsBnpkB,EAAO,WAAW,EACrD,cAAespkB,IAAwBtpkB,EAAO,aAAa,CAC/D,CACJ,CAGA,SAAgBwpkB,IAAsB,EAAwC,CAC1E,IAAMztjB,EAAU,OAAO,QAAQs+C,CAAM,EAKrC,IAAK,GAAM,CAAC55G,EAAKoC,KAAWk5D,EACpBl5D,EAAO,SAAW,WAClB,QAAQ,MACJ,4BAA4BpC,EAAI,KAAKoC,EAAO,OAAO,gBAAgBA,EAAO,SAAS,GACvF,CAGZ,CAEA,SAASimnB,IAAqB,EAAuC,CACjE,OAAO,OAAO,OAAO9qe,EAAa,CAAC,CAAC,SAASt9I,CAAY,CAC7D,CCtdA,IAAa+onB,IACT,GAEOjoQ,EAAS,OACT,CAACA,EAAS,KAAO,eACb,CAACA,EAAS,IAAI,MAAM,cAAc,GAC/B,qCACJ,OCNd,SAASkoQ,KAA0B,CAG/B,GAAI,CAGA,MAAO,CAAC,CAAC/kZ,GAAU+kO,IAAU,OAAO,CACxC,MAAQ,CACJ,MAAO,EACX,CACJ,CAEA,SAASigL,KAAgC,CAErC,OADI,OAAO,SAAa,IAAoB,GAExC,SAAS,KAAK,SAAS,SAAS,GAAK,SAAS,KAAK,SAAS,WAAW,CAE/E,CAaA,SAAgBC,IAAmC,CAC/C,OAAOF,IAAe,GAAKC,IAAqB,CACpD,CCbA,IAAaE,KAA6B,CACtC,QACA,eACA,cACA,kBACA,iBACA,eAQgB,CAChB,IAAMC,EAAmB,IAAI,IAEnBC,IADN7pI,GAEyCjlW,GAAkB,KAAK,CACpE,EAEMqmU,EAA4B,CAAC,EAkBnC,GAfIwoK,EAAiB,IAAIvte,GAAkB,CAAC,GACxC+kU,EAAY,KAAK,GAAGib,CAAY,EAKhCwjD,GAAmB+pG,EAAiB,IAAIvte,GAAkB,KAAK,IAC3CxP,EAAM,IAAIgzY,CACxB,YAAuBhjE,GAAc,WACvCuE,EAAY,KAAKy+D,CAAe,GAMpC3qC,GAAe00I,EAAiB,IAAIvte,GAAkB,CAAC,EAAG,CAC1D,IAAMi7Y,EAAUzqZ,EAAM,IAAIqoW,CAAW,CAAC,CAAC,IACjC40I,EAAuB7/K,GACzBqtF,GAAS,aAAe,EAC5B,EACoBt3C,IAAcjlW,GAAkB,WAC/B+ue,GACjB1oK,EAAY,KAAK8zB,CAAW,CAEpC,CAIA,GAAIqiD,GAAkBqyF,EAAiB,IAAIvte,GAAkB,IAAI,EAAG,CAChE,IAAMm7Y,EAAa3qZ,EAAM,IAAI0qZ,CAAc,CAAC,CAAC,IAChBttF,GACzButF,GAAY,aAAe,EAE1B,GACDp2E,EAAY,KAAKm2E,CAAc,CAEvC,CAEA,OAAOrkX,GAAOkuS,CAAW,CAC7B,EAMMyoK,IACF,GACsB,CACtB,GAAM,CAAE,IAAG,IAAG,QAAO,QAASxte,GAU9B,OANIsuX,GAAWxlX,CAAG,EAAU0lX,IAAoC,CAAC1lX,CAAG,CAAC,EAGjEA,IAAQpK,GAAkB,SAAiB,CAACrjF,CAAC,EAG1C,CAACA,EAAGnwD,EAAGkpN,EAAO11M,CAAI,CAC7B,EAEagvmB,IAA+B,GAYjCx2c,IAA4BL,GAXR5O,EAAQ,OAC9B,GAAW,CAAC,CAACztF,EAAO,OAAO,MAAQ,CAACk3I,GAAUl3I,EAAO,IAAI,OAAO,CAGhD,EAAmB,QAAS,GAC7Ck8F,GAAoC,CAChC,GAAGl8F,EAAO,IACV,OAAQA,EAAO,MACnB,CAAC,CAGqC,CAAY,CAAC,E,s1GCoI3D,SAASmziB,MACL,OAAQnud,OAAiDoud,KAC7D,CAEA,IAAaC,GAAb,MAAaA,E,iCA6jBRzqgB,IAAOo6D,K,KAAM4kK,kB,GAuFbljN,E,EAAa32H,Q,GAgBb66G,E,EAAW6xX,Y,GA+BX/1W,E,EAAa4uf,4C,GAoCb5uf,E,EAAa6uf,yC,GAsBb7uf,E,EAAasR,O,GAYbtR,E,EAAai6c,iD,GAqBbj6c,E,EACW8uf,mC,GA8BX9uf,E,EAAa0hW,kB,GAKb1hW,E,EAAaq7W,mB,GAsBbr7W,E,EAAa+uf,mC,GAkBb/uf,E,EAAqBgvf,mB,GASrBhvf,E,EAAaw2Y,wB,GASbx2Y,E,EAAa02Y,iB,GAQb12Y,E,EAAam8Y,iB,GAcbn8Y,E,EAAaqoX,kB,GAQbroX,E,EAAayoX,0B,IAgHbvkY,IAAOo6D,K,KAAM2wc,yB,IAwJb/qgB,IAAOo6D,K,KAAMy+b,2B,GAMb/8e,E,EAAqBkvf,O,GAIrBlvf,E,EAAas/Y,gB,IAIbp7Z,IAAOo6D,K,KAAM6wc,oB,IAMbjrgB,IAAOo6D,K,KAAM8wc,uB,GASbpvf,E,EAAaykX,W,GAIbzkX,E,EAAaiyY,iB,GAIbjyY,E,EAAqBqvf,kB,GAIrBrvf,E,EAAqBsvf,Y,IAMrBprgB,IAAOo6D,K,KAAMixc,mB,GAIbvvf,E,EAAakhG,W,GAIblhG,E,EAAailf,a,GAIbjlf,E,EAAa8wY,c,GAIb9wY,E,EAAa45W,Y,GAIb55W,E,EAAa8oX,c,GAIb9oX,E,EAAa2nX,mB,GAIb3nX,E,EAAamlZ,a,GAIbnlZ,E,EAAam8Z,a,GAIbn8Z,E,EAAakob,kB,GAIblob,E,EAAa+ob,Y,GAyBb/ob,E,EAAqBwvf,8B,GAMrBxvf,E,EAAainX,kB,GAIbjnX,E,EAAaknX,iB,GASblnX,E,EAAayvf,oC,GAebzvf,E,EAAa0vf,oB,GAMb1vf,E,EAAagjZ,Y,GAMbhjZ,E,EAAa2vf,oB,GAQb3vf,E,EAAqB4vf,0B,GAIrB5vf,E,EAAa6vf,qB,GAIb7vf,E,EAAqB8vf,kB,GAkBrB9vf,E,EAAa+vf,sB,GAUb/vf,E,EAAa04Y,U,GAIb14Y,E,EAAa+rX,S,GAOb/rX,E,EAAa05X,yB,GAiBb15X,E,EAAqBgwf,wB,GAUrBhwf,E,EAAa+7X,S,GAoBb/7X,E,EAAaonX,mB,IAmCbljY,IAAOo6D,K,KAAc2xc,8B,IASrB/rgB,IAAOo6D,K,KAAc4xc,kC,GASrBlwf,E,EAAamwf,S,GAQbnwf,E,EAAa35E,S,GAMb25E,E,EAAaowf,qB,GAebpwf,E,EAAau0V,U,GAMbv0V,E,EAAqBqwf,mB,GAMrBrwf,E,EAAaivC,Y,GAIbjvC,E,EAAao9U,O,GAwBbp9U,E,EAAqBswf,kB,GASrBtwf,E,EAAqBuwf,qC,GAIrBvwf,E,EAAaiiY,sB,GAyBbjiY,E,EAAakiY,oB,GAIbliY,E,EAAai8Y,wB,GAIbj8Y,E,EAAak8Y,wB,GAIbl8Y,E,EAAan6F,W,GAIbm6F,E,EAAal6F,S,GAIbk6F,E,EAAak+Z,oC,GASbl+Z,E,EAAqBwwf,gC,GAQrBxwf,E,EAAqBywf,iC,GAIrBzwf,E,EAAa4jY,gC,GAIb5jY,E,EAAawqY,6B,GAQbxqY,E,EAAa82X,kB,GAWb92X,E,EAAa6+X,a,GAMb7+X,E,EAAa0wf,gB,IAObxsgB,IAAOo6D,K,KAAM6xV,Q,IAIbjsZ,IAAOo6D,K,KAAcqyc,4B,IASrBzsgB,IAAOo6D,K,KAAcsyc,kC,GAWrB5wf,E,EAAa6wf,gB,GAmCb7wf,E,EAAqB8wf,qB,IAkDrB5sgB,IAAOo6D,K,KAAMyyc,oC,IAgBb7sgB,IAAOo6D,K,KAAc0yc,uC,IAgCrB9sgB,IAAOo6D,K,KAAM2yc,mB,IA0Bb/sgB,IAAOo6D,K,KAAM4yc,uC,IA2BbhtgB,IAAOo6D,K,KAAc6yc,6B,IA6BrBjtgB,IAAOo6D,K,KAAMomU,a,IASbxgY,IAAOo6D,K,KAAc8yc,8B,GAerBpxf,E,EAAqBqxf,iB,GAoBrBrxf,E,EAAaq9X,uB,GAebr9X,E,EAAasxf,0B,GA8Cbtxf,E,EAAauxf,gB,IASbvxf,IAASq1Z,M,KAAWphB,kB,GAIpBj0Y,E,EAAawxf,kB,IAIbttgB,IAAOo6D,K,KAAMmzc,c,IAIbvtgB,IAAOo6D,K,KAAMozc,0B,IAebxtgB,IAAOo6D,K,KAAMqzc,0B,GAQb3xf,E,EAAa4xf,a,GAIb5xf,E,EAAa+mX,a,GAKb/mX,E,EAAaqrN,2B,GA8BbrrN,E,EAAaq4X,oB,GAUbr4X,E,EAAag6e,iB,GAkCbh6e,E,EAAa8oZ,kB,GAMb9oZ,E,EAAa67W,4B,GAkDb77W,E,EAAa6xf,iB,GA2Bb7xf,E,EAAa8xf,mB,GAIb9xf,E,EAAa+vY,e,GAQb/vY,E,EAAa+xf,uB,GAKb/xf,E,EAAa42X,mB,GAYb52X,E,EAAa6nZ,iB,GAcb7nZ,E,EAAaogf,6B,IAIbl8f,IAAOo6D,K,KAAM+hc,0B,GAUbrgf,E,EAAa4+X,e,GAYb5+X,E,EAAagyf,8B,GAqBbhyf,E,EAAaiyf,4B,GAkBbjyf,E,EAAakyf,gC,GAYblyf,E,EAAqBmyf,iC,GAcrBnyf,E,EAAaoyf,gB,GAWbpyf,E,EAAa02X,W,GAoBb12X,E,EAAasqW,iB,GAiBbtqW,E,EAAa22X,W,GAWb32X,E,EAAa+zY,a,GAqBb/zY,E,EAAqBqyf,sB,GAQrBryf,E,EAAa+4W,e,GAkBb/4W,E,EAAasyf,wB,GAMbtyf,E,EAAqBuyf,mB,GAQrBvyf,E,EAAqBwyf,kB,GAMrBxyf,E,EAAqByyf,kB,GAIrBzyf,E,EAAqB0yf,qB,GAIrB1yf,E,EAAqB2yf,sB,GAMrB3yf,E,EAAqB4yf,6B,GAUrB5yf,E,EAAqB6yf,iC,GAUrB7yf,E,EAAa8gW,c,GAKb9gW,E,EAAa+gW,a,GAKb/gW,E,EAAaskZ,iB,GAiBbtkZ,E,EAAa25W,a,GAQb35W,E,EAAag8Z,gB,GAIbh8Z,E,EAAqBynZ,Y,GAIrBznZ,E,EACW8yf,6B,GAYX9yf,E,EAAqB+yf,uB,GAYrB/yf,E,EAAqBgzf,iB,GA2BrBhzf,E,EAAa68X,a,GAKb78X,E,EAAa64W,kB,GASb74W,E,EAAa8qX,yB,GAab9qX,E,EAAqBizf,oB,GAarBjzf,E,EAAqBkzf,gB,GAQrBlzf,E,EAAaooX,qC,GAMbpoX,E,EAAamzf,c,GA8Bbnzf,E,EAAaozf,a,GAMbpzf,E,EAAaqzf,W,GAIbrzf,E,EAAaszf,e,GAIbtzf,E,EAAauzf,c,GAIbvzf,E,EAAawzf,e,GAIbxzf,E,EAAayzf,c,GAIbzzf,E,EAAa0zf,a,GAIb1zf,E,EAAa2zf,sB,GAIb3zf,E,EAAa4zf,Y,GAIb5zf,E,EAAa6zf,Y,GAIb7zf,E,EAAa8zf,kB,GAIb9zf,E,EAAa05W,gB,GAIb15W,E,EAAa+zf,oB,GAIb/zf,E,EAAag0f,mB,GAIbh0f,E,EAAai0f,oB,GAIbj0f,E,EAAak0f,mB,GAIbl0f,E,EAAam0f,kB,GAIbn0f,E,EAAao0f,2B,GAIbp0f,E,EAAaq0f,iB,GAIbr0f,E,EAAas0f,iB,GAIbt0f,E,EAAqBu0f,0B,GAIrBv0f,E,EAAa0vY,c,GAIb1vY,E,EAAa2pZ,e,GAIb3pZ,E,EAAa2vY,gB,GAIb3vY,E,EAAayvY,c,GAIbzvY,E,EAAawvY,Y,GAIbxvY,E,EAAaw0f,gB,GAIbx0f,E,EAAay0f,e,GAIbz0f,E,EAAa00f,uB,GAMb10f,E,EAAa20f,kB,GAIb30f,E,EAAa40f,a,GAIb50f,E,EAAa0nf,0B,GAKb1nf,E,EAAqB60f,oB,GAKrB70f,E,EAAqB80f,yB,GAIrB90f,E,EAAqB+0f,Y,GAOrB/0f,E,EAAag0Y,e,GAQbh0Y,E,EAAag1f,kB,GAIbh1f,E,EAAai1f,e,GAuBbj1f,E,EAAa2mX,yB,GAqCb3mX,E,EAAas1W,W,GAIbt1W,E,EAAakyY,qB,GAOblyY,E,EAAagyY,gB,GAUbhyY,E,EAAa8zY,uB,GAgCb9zY,E,EAAqBumC,e,GAIrBvmC,E,EAAqBsmC,U,GASrBtmC,E,EAAak1f,gB,GAWbl1f,E,EAAa29e,Y,GAOb39e,E,EAAqBm1f,2B,GAIrBn1f,E,EAAqBo1f,4B,GAIrBp1f,E,EAAqBq1f,gB,GAmDrBr1f,E,EAAqBs1f,iB,GAOrBt1f,E,EAAqBu1f,mB,GAMrBv1f,E,EAAai8X,sB,GAcbj8X,E,EAAqBgkN,gB,GAerBhkN,E,EAAqB+ma,iB,GAerB/ma,E,EAAqBiub,Y,GAIrBjub,E,EAAqBw1f,a,GAOrBx1f,E,EAAamhX,a,GAMbnhX,E,EAAai+e,c,GAKbj+e,E,EAAamlX,sB,GAoBbnlX,E,EAAaste,kB,GAMbtte,E,EAAas6e,iB,GAKbt6e,E,EAAay+e,iB,GAWbz+e,E,EAAaw/e,kB,GAIbx/e,E,EAAa42e,kB,GAsCb52e,E,EAAastV,Y,GAMbttV,E,EAAa+2V,sB,GAIb/2V,E,EAAqBy1f,uB,IAoBrBvxgB,IAAOo6D,K,KAAoBo3c,4B,GAsB3B11f,E,EAAa++W,c,GAIb/+W,E,EAAa2zW,uB,GASb3zW,E,EAAa21f,a,GAQb31f,E,EAAaokW,Y,GAiBbpkW,E,EAAa8qZ,qB,GAIb9qZ,E,EAAqB41f,yB,GAyBrB51f,E,EAAqB61f,yB,GAcrB71f,E,EACW81f,6B,GAKX91f,E,EAAauyY,0B,GAObvyY,E,EAAaqyY,e,GAsBbryY,E,EAAa4xY,W,GAQb5xY,E,EAAa+1f,2B,GAQb/1f,E,EAAag2f,qB,GAYbh2f,E,EAAai2f,mC,GAQbj2f,E,EAAaw7X,oB,IAkBbt3Y,IAAOo6D,K,KAAMsvU,mC,GAIb5tX,E,EAAam9e,a,GAKbn9e,E,EAAauoX,+B,GAabvoX,E,EAAa4kW,c,GAWb5kW,E,EAAam1X,iB,GAiBbn1X,E,EAAaqqD,U,GAIbrqD,E,EAAaqrX,U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QAAS,QACT,YAAa,qBACjB,EACA,sBAAuB,CACnB,GAAGA,GACH,QAAS,wBACT,YACI,+DACR,EACA,WAAY,CACR,GAAGA,GACH,QAAS,aACT,YACI,ggBACR,EACA,WAAY,CACR,GAAGY,GACH,QAAS,aACT,YACI,2DACR,EACA,gBAAiB,CACb,GAAGZ,GACH,QAAS,kBACT,YACI,wPACR,EACA,oBAAqB,CACjB,GAAGA,GACH,QAAS,sBACT,YACI,gJACR,EACA,cAAe,CACX,GAAGA,GACH,QAAS,gBACT,YAAa,wCACjB,EACA,eAAgB,CACZ,GAAGA,GACH,QAAS,iBACT,YACI,kHACR,EACA,mBAAoB,CAChB,GAAGJ,GACH,QAAS,qBACT,YAAa,iCACjB,EACA,MAAO,CACH,GAAGI,GACH,QAAS,QACT,YAAa,2BACb,kBAAmB,EACvB,EACA,iBAAkB,CACd,GAAGE,GACH,QAAS,mBACT,gBAAiB,OAAO,OAAOrjf,EAAe,CAAC,CAAC,IAAK,IAAa,CAC9D,UACA,YAAa,GACb,SAAU,EACd,EAAE,EACF,YAAa,yBACjB,EACA,iBAAkB,CACd,GAAG+if,GACH,QAAS,mBACT,YAAa,yBACjB,EACA,0BAA2B,CACvB,GAAGM,GACH,QAAS,4BACT,gBAAiB1we,GAA2B,IAAK,IAAa,CAC1D,UACA,YAAa,GACb,SAAU,EACd,EAAE,EACF,YAAa,6BACjB,EACA,sBAAuB,CACnB,GAAGwwe,GACH,QAAS,wBACT,YAAa,oCACjB,EACA,4BAA6B,CACzB,GAAGA,GACH,QAAS,8BACT,YAAa,cACjB,EACA,0BAA2B,CACvB,GAAGI,IACH,QAAS,4BACT,YACI,qFACR,EACA,sBAAuB,CACnB,GAAGJ,GACH,QAAS,wBACT,YAAa,CACT,sBACA,oEACA,kEACJ,CAAC,CAAC,KAAK;CAAI,CACf,EACA,0BAA2B,CACvB,GAAGA,GACH,QAAS,4BACT,YAAa,CACT,0BACA,4EACA,mCACJ,CAAC,CAAC,KAAK;CAAI,CACf,EACA,aAAc,CACV,GAAGJ,GACH,QAAS,eACT,YAAa,2CACb,kBAAmB,EACvB,EACA,2BAA4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","names":["check","it","this$14","exec","require_fails","test","NATIVE_BIND","require_function_bind_native","call","$propertyIsEnumerable","getOwnPropertyDescriptor","descriptor","V","bitmap","FunctionPrototype","uncurryThisWithBind","fn","uncurryThis","require_function_uncurry_this","toString","stringSlice","fails","classof","require_classof_raw","$Object","split","isNullOrUndefined","require_is_null_or_undefined","$TypeError","IndexedObject","require_indexed_object","requireObjectCoercible","require_require_object_coercible","documentAll","argument","isCallable","require_is_callable","globalThis","require_global_this","aFunction","namespace","method","navigator","userAgent","require_environment_user_agent","process","Deno","versions","v8","match","version","V8_VERSION","require_environment_v8_version","$String","symbol","require_symbol_constructor_detection","getBuiltIn","require_get_built_in","isPrototypeOf","require_object_is_prototype_of","USE_SYMBOL_AS_UID","require_use_symbol_as_uid","$Symbol","tryToString","require_try_to_string","aCallable","require_a_callable","func","P","require_function_call","isObject","require_is_object","val","pref","input","defineProperty","key","value","IS_PURE","require_is_pure","defineGlobalProperty","require_define_global_property","SHARED","store","require_shared_store","toObject","require_to_object","hasOwnProperty","id","postfix","shared","require_shared","hasOwn","require_has_own_property","uid","require_uid","NATIVE_SYMBOL","Symbol","WellKnownSymbolsStore","createWellKnownSymbol","\"for\"","name","isSymbol","require_is_symbol","getMethod","require_get_method","ordinaryToPrimitive","require_ordinary_to_primitive","wellKnownSymbol","require_well_known_symbol","TO_PRIMITIVE","exoticToPrim","result","toPrimitive","require_to_primitive","document","EXISTS","DESCRIPTORS","require_descriptors","createElement","require_document_create_element","propertyIsEnumerableModule","require_object_property_is_enumerable","createPropertyDescriptor","require_create_property_descriptor","toIndexedObject","require_to_indexed_object","toPropertyKey","require_to_property_key","IE8_DOM_DEFINE","require_ie8_dom_define","$getOwnPropertyDescriptor","O","V8_PROTOTYPE_DEFINE_BUG","require_v8_prototype_define_bug","anObject","require_an_object","$defineProperty","ENUMERABLE","CONFIGURABLE","WRITABLE","Attributes","current","definePropertyModule","require_object_define_property","object","getDescriptor","functionToString","WeakMap","keys","NATIVE_WEAK_MAP","require_weak_map_basic_detection","createNonEnumerableProperty","require_create_non_enumerable_property","sharedKey","require_shared_key","hiddenKeys","require_hidden_keys","OBJECT_ALREADY_INITIALIZED","TypeError","set","get","has","enforce","getterFor","state","TYPE","metadata","STATE","CONFIGURABLE_FUNCTION_NAME","require_function_name","inspectSource","require_inspect_source","InternalStateModule","require_internal_state","enforceInternalState","getInternalState","replace","join","CONFIGURABLE_LENGTH","TEMPLATE","makeBuiltIn","options","require_make_built_in","simple","ceil","floor","n","x","trunc","require_math_trunc","number","toIntegerOrInfinity","require_to_integer_or_infinity","max","min","integer","index","length","len","toLength","require_to_length","obj","toAbsoluteIndex","require_to_absolute_index","lengthOfArrayLike","require_length_of_array_like","createMethod","$this","IS_INCLUDES","fromIndex","el","indexOf","require_array_includes","push","i","names","internalObjectKeys","require_object_keys_internal","require_enum_bug_keys","getOwnPropertyNamesModule","require_object_get_own_property_names","getOwnPropertySymbolsModule","require_object_get_own_property_symbols","concat","getOwnPropertySymbols","ownKeys","require_own_keys","getOwnPropertyDescriptorModule","require_object_get_own_property_descriptor","source","target","exceptions","replacement","isForced","data","normalize","feature","POLYFILL","NATIVE","detection","string","defineBuiltIn","require_define_built_in","copyConstructorProperties","require_copy_constructor_properties","require_is_forced","TARGET","GLOBAL","STATIC","FORCED","targetProperty","sourceProperty","TO_STRING_TAG","TO_STRING_TAG_SUPPORT","require_to_string_tag_support","classofRaw","CORRECT_ARGUMENTS","tryGet","tag","require_classof","$","require_export","require_to_string","charAt","S","relativeIndex","k","enumBugKeys","objectKeys","require_object_keys","props","Properties","definePropertiesModule","require_object_define_properties","html","require_html","documentCreateElement","GT","LT","PROTOTYPE","SCRIPT","IE_PROTO","EmptyConstructor","scriptTag","content","NullProtoObjectViaActiveX","activeXDocument","temp","NullProtoObjectViaIFrame","iframe","JS","iframeDocument","NullProtoObject","create","require_object_create","UNSCOPABLES","ArrayPrototype","addToUnscopables","require_add_to_unscopables","require_es_array_at","F","CORRECT_PROTOTYPE_GETTER","require_correct_prototype_getter","ObjectPrototype","constructor","isPossiblePrototype","require_is_possible_prototype","uncurryThisAccessor","require_function_uncurry_this_accessor","aPossiblePrototype","require_a_possible_prototype","CORRECT_SETTER","setter","proto","NATIVE_ARRAY_BUFFER","require_array_buffer_basic_detection","defineBuiltInAccessor","require_define_built_in_accessor","getPrototypeOf","require_object_get_prototype_of","setPrototypeOf","require_object_set_prototype_of","Int8Array","Int8ArrayPrototype","Uint8ClampedArray","Uint8ClampedArrayPrototype","TypedArray","TypedArrayPrototype","TYPED_ARRAY_TAG","TYPED_ARRAY_CONSTRUCTOR","NATIVE_ARRAY_BUFFER_VIEWS","TYPED_ARRAY_TAG_REQUIRED","NAME","Constructor","Prototype","TypedArrayConstructorsList","BigIntArrayConstructorsList","isView","klass","getTypedArrayConstructor","isTypedArray","aTypedArray","aTypedArrayConstructor","C","exportTypedArrayMethod","forced","ARRAY","TypedArrayConstructor","KEY","property","exportTypedArrayStaticMethod","ArrayBufferViewCore","require_array_buffer_view_core","require_es_typed_array_at","require_es_string_at_alternative","require_esnext_array_at","require_esnext_typed_array_at","require_es_object_has_own","require_esnext_object_has_own","require_function_uncurry_this_clause","bind","that","require_function_bind_context","IS_FIND_LAST_INDEX","self","boundFunction","callbackfn","$findLast","require_array_iteration_from_last","require_es_array_find_last","$findLastIndex","require_es_array_find_last_index","predicate","require_es_typed_array_find_last","require_es_typed_array_find_last_index","require_esnext_array_find_last","require_esnext_array_find_last_index","require_esnext_typed_array_find_last","require_esnext_typed_array_find_last_index","createProperty","require_create_property","$Array","A","require_es_array_to_reversed","$length","list","CONSTRUCTOR","METHOD","arrayFromConstructorAndList","require_array_from_constructor_and_list","getBuiltInPrototypeMethod","require_get_built_in_prototype_method","sort","compareFn","require_es_array_to_sorted","MAX_SAFE_INTEGER","doesNotExceedSafeInteger","require_does_not_exceed_safe_integer","actualStart","start","argumentsLength","insertCount","actualDeleteCount","newLen","deleteCount","require_es_array_to_spliced","$RangeError","\"with\"","error","actualIndex","require_es_array_with","require_es_typed_array_to_reversed","require_es_typed_array_to_sorted","prim","isBigIntArray","require_is_big_int_array","toBigInt","require_to_big_int","PROPER_ORDER","THROW_ON_NEGATIVE_FRACTIONAL_INDEX","numericValue","require_es_typed_array_with","require_esnext_array_to_reversed","require_esnext_array_to_sorted","require_esnext_array_to_spliced","require_esnext_array_with","require_esnext_typed_array_to_reversed","require_esnext_typed_array_to_sorted","require_esnext_typed_array_with","Iterators","require_iterators","ITERATOR","getIteratorMethod","require_get_iterator_method","iteratorMethod","usingIterator","innerResult","innerError","iterator","kind","isArrayIteratorMethod","require_is_array_iterator_method","getIterator","require_get_iterator","iteratorClose","require_iterator_close","Result","stopped","ResultPrototype","AS_ENTRIES","IS_RECORD","IS_ITERATOR","INTERRUPTED","unboundFunction","iterFn","next","step","stop","$iterator","condition","callFn","iterable","MapPrototype","\"delete\"","iterate","require_iterate","MapHelpers","require_map_helpers","Map","DOES_NOT_WORK_WITH_PRIMITIVES","items","map","require_es_map_group_by","nativeGroupBy","require_es_object_group_by","require_esnext_map_group_by","require_esnext_object_group_by","SetPrototype","require_set_helpers","ITERATOR_INSTEAD_OF_RECORD","record","iterateSimple","require_iterate_simple","SetHelpers","Set","forEach","interruptible","require_set_iterate","add","getIteratorDirect","require_get_iterator_direct","INVALID_SIZE","SetRecord","intSize","numSize","aSet","require_a_set","clone","require_set_clone","size","require_set_size","getSetRecord","require_get_set_record","iterateSet","remove","otherRec","other","createSetLike","createSetLikeWithInfinitySize","callback","difference","require_set_difference","require_set_method_accept_set_like","setLike","done","baseSet","require_es_set_difference_v2","intersection","require_set_intersection","require_es_set_intersection_v2","isDisjointFrom","require_set_is_disjoint_from","require_es_set_is_disjoint_from_v2","isSubsetOf","require_set_is_subset_of","require_es_set_is_subset_of_v2","isSupersetOf","require_set_is_superset_of","require_es_set_is_superset_of_v2","keysIter","METHOD_NAME","union","require_set_union","setMethodGetKeysBeforeCloning","require_set_method_get_keys_before_cloning_detection","require_es_set_union_v2","symmetricDifference","require_set_symmetric_difference","require_es_set_symmetric_difference_v2","require_esnext_set_difference_v2","require_esnext_set_intersection_v2","require_esnext_set_is_disjoint_from_v2","require_esnext_set_is_subset_of_v2","require_esnext_set_is_superset_of_v2","require_esnext_set_union_v2","require_esnext_set_symmetric_difference_v2","BUGGY_SAFARI_ITERATORS","IteratorPrototype","PrototypeOfArrayIteratorPrototype","arrayIterator","anInstance","require_an_instance","require_iterators_core","NativeIterator","IteratorConstructor","defineIteratorPrototypeAccessor","require_es_iterator_constructor","src","iters","defineBuiltIns","require_define_built_ins","createIterResultObject","require_create_iter_result_object","iteratorCloseAll","require_iterator_close_all","ITERATOR_HELPER","WRAP_FOR_VALID_ITERATOR","NORMAL","THROW","setInternalState","createIteratorProxyPrototype","returnMethod","WrapForValidIteratorPrototype","IteratorHelperPrototype","IteratorProxy","RETURN_HANDLER_RESULT","nextHandler","methodName","Iterator","CLOSED","ExpectedError","notANaN","require_not_a_nan","toPositiveInteger","require_to_positive_integer","createIteratorProxy","require_iterator_create_proxy","iteratorHelperThrowsOnInvalidIterator","require_iterator_helper_throws_on_invalid_iterator","iteratorHelperWithoutClosingOnEarlyError","require_iterator_helper_without_closing_on_early_error","DROP_WITHOUT_THROWING_ON_INVALID_ITERATOR","dropWithoutClosingOnEarlyError","remaining","limit","require_es_iterator_drop","everyWithoutClosingOnEarlyError","counter","require_es_iterator_every","ENTRIES","callWithSafeIterationClosing","require_call_with_safe_iteration_closing","FILTER_WITHOUT_THROWING_ON_INVALID_ITERATOR","filterWithoutClosingOnEarlyError","require_es_iterator_filter","findWithoutClosingOnEarlyError","require_es_iterator_find","stringHandling","getIteratorFlattenable","require_get_iterator_flattenable","throwsOnIteratorWithoutReturn","v","\"return\"","FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR","flatMapWithoutClosingOnEarlyError","mapper","inner","require_es_iterator_flat_map","forEachWithoutClosingOnEarlyError","require_es_iterator_for_each","iteratorRecord","require_es_iterator_from","MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR","mapWithoutClosingOnEarlyError","require_es_iterator_map","apply","require_function_apply","FAILS_ON_INITIAL_UNDEFINED","reduceWithoutClosingOnEarlyError","reducer","noInitial","accumulator","require_es_iterator_reduce","someWithoutClosingOnEarlyError","require_es_iterator_some","TAKE_WITHOUT_THROWING_ON_INVALID_ITERATOR","takeWithoutClosingOnEarlyError","require_es_iterator_take","element","require_es_iterator_to_array","require_esnext_iterator_constructor","require_esnext_iterator_drop","require_esnext_iterator_every","require_esnext_iterator_filter","require_esnext_iterator_find","require_esnext_iterator_flat_map","require_esnext_iterator_for_each","require_esnext_iterator_from","require_esnext_iterator_map","require_esnext_iterator_reduce","require_esnext_iterator_some","require_esnext_iterator_take","require_esnext_iterator_to_array","GLOBAL_OBJ","SDK_VERSION","getMainCarrier","getSentryCarrier","__SENTRY__","carrier","getGlobalSingleton","creator","CONSOLE_LEVELS","originalConsoleMethods","consoleSandbox","console","wrappedFuncs","wrappedLevels","originalConsoleMethod","level","enable","disable","isEnabled","_getLoggerSettings","log","args","warn","debug","disable$1","isEnabled$1","log$2","STACKTRACE_FRAME_LIMIT","WEBPACK_ERROR_REGEXP","STRIP_FRAME_REGEXP","createStackParser","parsers","sortedParsers","a","b","p","frames","lines","stack","skipFirstLines","line","cleanedLine","parser","frame","framesToPop","stripSentryFramesAndReverse","stackParserFromStackParserOptions","stackParser","localStack","getLastStackFrame","arr","defaultFunctionName","getFunctionName","getFramesFromEvent","exception","event","handlers","instrumented","addHandler","type","handlers$3","handler","typeHandlers","maybeInstrument","instrumentFn","triggerHandlers","_oldOnErrorHandler","addGlobalErrorInstrumentationHandler","addHandler$1","instrumentError","triggerHandlers$1","_oldOnUnhandledRejectionHandler","addGlobalUnhandledRejectionInstrumentationHandler","instrumentUnhandledRejection","handlerData","objectToString","isError","wat","isInstanceOf","isBuiltin","className","isErrorEvent","isDOMError","isDOMException","isString","isParameterizedString","isPrimitive","isPlainObject","isObjectLike","isEvent","isRegExp","isThenable","base","isRequest","request","fill","original","wrapped","replacementFactory","markFunctionWrapped","addNonEnumerableProperty","getOriginalFunction","convertToPlainObject","getOwnProperties","detail","extractExceptionKeysForMessage","RESOLVED_RUNNER","withRandomSafeContext","cb","sym","globalWithSymbol","safeMathRandom","safeDateNow","SENTRY_SKIP_NORMALIZATION","SENTRY_OVERRIDE_NORMALIZATION_DEPTH","hasSkipNormalizationHint","getNormalizationDepthOverrideHint","stringifier","setNormalizeStringifier","newStringifier","visit","depth","maxProperties","err","normalizeToSize","normalized","jsonSize","maxSize","memoBuilder","memoize","unmemoize","memo","stringified","stringifyValue","overrideDepth","remainingDepth","valueWithToJSON","numAdded","visitable","visitKey","visitValue","getConstructorName","prototype","utf8Length","truncate","str","safeJoin","output","delimiter","isMatchingPattern","pattern","requireExactStringMatch","stringMatchesSomePattern","patterns","testString","getCrypto","gbl","emptyUuid","getRandomByte","uuid4","crypto","c","getFirstException","getEventDescription","eventId","message","firstException","addExceptionTypeValue","values","addExceptionMechanism","applyExceptionMechanism","newMechanism","addExceptionMechanismToCapturedException","capturedException","defaultMechanism","currentMechanism","checkOrSetAlreadyCaught","isAlreadyCaptured","ONE_SECOND_IN_MS","CLOCK_DRIFT_THRESHOLD_MS","MAX_TIME_ORIGIN_SEGMENTS","dateTimestampInSeconds","_timeOriginSegments","createUnixTimestampInSecondsFunc","performance","correctedTimeOrigin","isFirstCall","lastCheckedPerformanceNow","performanceNow","dateNow","safePerformanceNow","_cachedTimestampInSecondsFn","_checkedForDriftInThisTask","performanceTimeToSeconds","monotonicTimeInMs","origin","browserPerformanceTimeOrigin","entryStartTimeInMs","timestampInSeconds","segment","candidate","makeSession","startingTime","session","sessionToJSON","context","updateSession","duration","closeSession","status","merge","mergeObj","levels","initialObj","generateTraceId","generateSpanId","DEFAULT_MAX_BREADCRUMBS","Scope","newScope","client","lastEventId","user","conversationId","tags","newAttributes","extras","extra","fingerprint","captureContext","scopeToMerge","attributes","contexts","propagationContext","maxCrumbs","maxBreadcrumbs","mergedBreadcrumb","breadcrumb","attachment","newData","hint","syntheticException","getDefaultCurrentScope","getDefaultIsolationScope","SUPPRESS_TRACING_KEY","isActualPromise","kChainedCopy","chainAndCopyPromiseLike","chained","onSuccess","onError","copyProps","mutated","AsyncContextStack","assignedScope","scope","assignedIsolationScope","isolationScope","maybePromiseResult","getAsyncContextStack","sentry","withScope","withSetScope","withIsolationScope","getStackAsyncContextStrategy","suppressTracingInStack","withScope$1","res","getAsyncContextStrategy","isAttributeObject","maybeObj","attributeValueToTypedAttributeValue","rawValue","attributeValue","getTypedAttributeValue","checkedUnit","unit","useFallback","stringValue","serializeAttributes","serializedAttributes","typedValue","fallback","estimateTypedAttributesSizeInBytes","weight","attr","estimatePrimitiveSizeInBytes","primitiveType","getExternalPropagationContext","hasExternalPropagationContext","getCurrentScope","getIsolationScope","getGlobalScope","rest","acs","getClient","getTraceContextFromScope","externalContext","traceContext","traceId","propagationSpanId","parentSpanId","Bt","Wt","Ht","na","la","wr","Do","Vo","Ho","$o","Ic","Ac","wc","Md","Vd","Qd","Jd","$d","mm","gm","hm","km","Tm","Om","Im","Am","wm","Rm","Nm","Fm","Wm","tg","ag","Yg","eb","tb","ib","pb","ub","mb","gb","kb","Tb","Sb","SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE","SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE","SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT","SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE","SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME","SPAN_STATUS_TYPES","isStatusErrorMessageValid","getSpanStatusFromHttpCode","httpStatus","setHttpStatus","span","spanStatus","makeWeakRef","WeakRefImpl","derefWeakRef","ref","SCOPE_ON_START_SPAN_FIELD","ISOLATION_SCOPE_ON_START_SPAN_FIELD","TRACER_PROVIDER_SPAN_FIELD","setCapturedScopesOnSpan","getCapturedScopesOnSpan","spanWithScopes","spanIsTracerProviderSpan","SENTRY_BAGGAGE_KEY_PREFIX","baggageHeaderToDynamicSamplingContext","baggageObject","parseBaggageHeader","baggageHeader","dynamicSamplingContext","nonPrefixedKey","acc","dynamicSamplingContextToSentryBaggageHeader","objectToBaggageHeader","dscKey","dscValue","currBaggageObject","baggageHeaderToObject","curr","eqIdx","baggageEntry","keyOrValue","objectKey","objectValue","newBaggageHeader","currentIndex","ORG_ID_REGEX","DSN_REGEX","dsnToString","dsn","protocol","publicKey","withPassword","pass","host","port","path","projectId","dsnFromString","lastPath","projectMatch","dsnFromComponents","components","validateDsn","extractOrgIdFromDsnHost","extractOrgIdFromClient","org_id","makeDsn","from","parseSampleRate","sampleRate","rate","TRACEPARENT_REGEXP","extractTraceparentData","traceparent","matches","parentSampled","propagationContextFromHeaders","traceparentData","sentryTrace","baggage","sampleRand","getSampleRandFromTraceparentAndDsc","generateSentryTraceHeader","sampledString","sampled","spanId","generateTraceparentHeader","parsedSampleRand","dsc","parsedSampleRate","SCOPE_SPAN_FIELD","_setSpanForScope","_getSpanForScope","spanToTransactionTraceContext","span_id","trace_id","spanToStaticSpanJSON","spanToTraceContext","parent_span_id","isRemote","spanToTraceHeader","spanIsSampled","spanToTraceparentHeader","convertSpanLinksForEnvelope","links","restContext","traceFlags","getStreamedSpanLinks","spanTimeInputToSeconds","ensureTimestampInSeconds","timestamp","spanIsSentrySpan","spanIsOpenTelemetrySdkTraceBaseSpan","getOtelParentSpanId","startTime","endTime","getStatusMessage","SENTRY_OP","SENTRY_ORIGIN","spanToJSON","spanIsSegment","getSimpleStatus","addStatusMessageAttribute","streamedSpanJsonToSerializedSpan","spanJson","link","castSpan","statusMessage","CHILD_SPANS_FIELD","ROOT_SPAN_FIELD","addChildSpanToSpan","rootSpan","childSpan","SENTRY_SEGMENT_NAME_SOURCE","removeChildSpanFromSpan","getSpanDescendants","resultSet","addSpanChildren","span2","childSpans","getRootSpan","INTERNAL_getSegmentSpan","getActiveSpan","INTERNAL_setSegmentNameSourceIfSegment","errorsInstrumented","registerSpanErrorInstrumentation","errorCallback","activeSpan","hasSpansEnabled","maybeOptions","shouldIgnoreSpan","ignoreSpans","isStringOrRegExp","hasAttributes","nameMatches","opMatches","attrsMatch","valuePattern","_matchesAttributeValue","actual","pat","reparentChildSpans","droppedSpanParentId","dropSpan","droppedSpanId","spans","installedIntegrations","filterDuplicates","integrationsByName","integrations","currentInstance","existingInstance","getIntegrationsToSetup","defaultIntegrations","userIntegrations","resolvedUserIntegrations","setupIntegrations","integrationIndex","integration","setupIntegration","afterSetupIntegrations","processor","hook","defineIntegration","DEFAULT_ENVIRONMENT","NON_RECORDING_SPAN_FIELD","SentryNonRecordingSpan","spanContext","spanIsNonRecordingSpan","FROZEN_DSC_FIELD","freezeDscOnSpan","spanWithMaybeDsc","getDynamicSamplingContextFromClient","public_key","getDynamicSamplingContextFromScope","getDynamicSamplingContextFromSpan","rootSpanJson","rootSpanAttributes","traceState","rootSpanSampleRate","applyLocalSampleRateToDsc","dsc2","frozenDsc","isNonRecordingRoot","isIgnoredRoot","capturedScope","scopeDsc","traceStateDsc","dscOnTraceState","applyScopeDataToEvent","applyDataToEvent","applyFingerprintToEvent","applyBreadcrumbsToEvent","breadcrumbs","applySdkMetadataToEvent","sdkProcessingMetadata","mergeScopeData","mergeData","mergeAndOverwriteScopeData","transactionName","eventProcessors","attachments","prop","mergeVal","getCombinedScopeData","scopeData","currentScope","mergedBreadcrumbs","applySpanToEvent","safeCallback","recover","isStaticBeforeSendSpanCallback","applyBeforeSendSpanCallback","beforeSendSpan","spanJsonToSerializedStreamedSpan","scopeContextsToSpanAttributes","attrs","response","profile","cloud_resource","culture","angular","\"angular\"","\"version\"","react","\"react\"","captureSpan","spanJSON","segmentSpan","serializedSegmentSpan","spanIsolationScope","spanScope","finalScopeData","applyCommonSpanAttributes","applyScopeToSegmentSpan","applySdkMetadataToSegmentSpan","traceLifecycle","safeSetSpanJSONAttributes","segmentSpanJSON","originalAttributes","integrationNames","SENTRY_SDK_INTEGRATIONS","commonSpanAttributes","sdk","SENTRY_TRACE_LIFECYCLE","SENTRY_SEGMENT_NAME","SENTRY_SEGMENT_ID","SENTRY_SDK_NAME","SENTRY_SDK_VERSION","SENTRY_RELEASE","release","SENTRY_ENVIRONMENT","environment","USER_ID","USER_EMAIL","USER_IP_ADDRESS","USER_NAME","includeScopeAttributes","captureStandaloneSpanWithStaticCallback","commonAttributes","hasSpanStreamingEnabled","safeUnref","timer","createEnvelope","headers","addItemToEnvelope","envelope","newItem","forEachEnvelopeItem","envelopeItems","envelopeItem","envelopeItemType","envelopeContainsItemType","types","encodeUTF8","serializeEnvelope","envHeaders","parts","append","item","itemHeaders","payload","stringifiedPayload","concatBuffers","totalLength","buffers","buf","merged","offset","buffer","createAttachmentEnvelopeItem","DATA_CATEGORY_OVERRIDES","_isOverriddenType","envelopeItemTypeToDataCategory","getSdkMetadataForEnvelopeHeader","metadataOrEvent","createEventEnvelopeHeaders","sdkInfo","tunnel","getDataCategoryByType","isBrowserBundle","getSDKSource","isNodeEnv","isBrowser","isElectronNodeRenderer","createStreamedSpanEnvelope","dscHasRequiredProps","createSpanContainerItem","serializedSpans","inferSetting","estimateSerializedSpanSizeInBytes","linkWeight","MAX_SPANS_PER_ENVELOPE","MAX_TRACE_WEIGHT_IN_BYTES","SpanBuffer","maxSpanLimit","flushInterval","maxTraceWeightInBytes","bucket","cleanSpanJSON","INTEGRATION_NAME","spanStreamingIntegration","flushOnSegmentEnd","escapedSpanTraceContexts","toWeakMapKey","applyEscapedErrorSpanToEvent","eventTraceContext","sampleSpan","resolved","resolveSampleRate","samplingContext","localSampleRateWasApplied","tracesSampler","samplerResult","fallbackSampleRate","tracesSampleRate","setMeasurement","timedEventsToMeasurements","events","measurements","getSegmentSpanCaptureStrategy","MAX_SPAN_COUNT","SentrySpan","timeInput","endTimestamp","SENTRY_PROFILE_ID","SENTRY_EXCLUSIVE_TIME","time","isSpanTimeInput","attributesOrStartTime","sendStandaloneSpan","strategy2","scope2","strategy","transactionEvent","isFullFinishedSpan","capturedSpanScope","capturedSpanIsolationScope","normalizedRequest","droppedUnfinishedSpanCount","descendant","isStandaloneSpan","hasGenAiSpans","transaction","serializedSpan2","serializedSpan","_segmentSpan","startInactiveSpan","spanArguments","parseSentrySpanArguments","customParentSpan","customScope","withActiveSpan","parentSpan","getParentSpan","startMissingRequiredParentSpan","createChildOrRootSpan","getAcs","isTracingSuppressed","resolvedParentSpan","scopePropagationContext","forceTransaction","_shouldIgnoreStreamedSpan","ignoredSpan","_startChildSpan","_startRootSpan","dscWithSampleRand","initialCtx","ctx","mutableSpanSamplingData","finalParentSampled","finalAttributes","currentPropagationContext","_isTracingSuppressed","dropReason","outcomeReason","spanIsIgnored","clientsWithIntegration","_INTERNAL_ensureBrowserSpanStreaming","startInactiveSpan$1","TRACING_DEFAULTS","FINISH_REASON_HEARTBEAT_FAILED","FINISH_REASON_IDLE_TIMEOUT","FINISH_REASON_FINAL_TIMEOUT","FINISH_REASON_EXTERNAL_FINISH","startIdleSpan","activities","_finished","_idleTimeoutID","_childSpanTimeoutID","_finishReason","_autoFinishAllowed","_cleanupHooks","previousActiveSpan","startSpanOptions","thisArg","definedEndTimestamp","spanEndTimestamp","child","trimIdleSpanEndTimestamp","onIdleSpanEnded","latestSpanEndTimestamp","currentSpanJson","spanStartTimestamp","finalTimeout","_cancelIdleTimeout","_cancelChildSpanTimeout","_restartIdleTimeout","idleTimeout","_restartChildSpanTimeout","childSpanTimeout","_pushActivity","_popActivity","cleanup","startTimestamp","SENTRY_IDLE_SPAN_FINISH_REASON","currentStatus","debug$1","discardedSpans","childEndTimestamp","childStartTimestamp","spanStartedBeforeIdleSpanEnd","timeoutWithMarginOfError","startedSpan","endedSpan","spanToAllowAutoFinish","debounce","callbackReturnValue","timerId","maxTimerId","maxWait","wait","setTimeoutImpl","invokeFunc","cancelTimers","flush","debounced","e","E","_","o","s","l","L","d","D","B","m","Q","W","h","H","K","f","UE","PAGELOAD_SPAN_NAME_FALLBACK","NAVIGATION_SPAN_NAME_FALLBACK","UI_LONG_TASK_SPAN_NAME_FALLBACK","UI_INTERACTION_CLICK_SPAN_NAME_FALLBACK","UI_INTERACTION_HOVER_SPAN_NAME_FALLBACK","UI_INTERACTION_DRAG_SPAN_NAME_FALLBACK","UI_INTERACTION_PRESS_SPAN_NAME_FALLBACK","BROWSER_NAVIGATION_TIMING_SPAN_NAMES","BROWSER_CACHE","BROWSER_DNS","BROWSER_CONNECT","BROWSER_TLS_SSL","BROWSER_REDIRECT","BROWSER_REQUEST","BROWSER_RESPONSE","BROWSER_UNLOAD_EVENT","BROWSER_DOM_CONTENT_LOADED_EVENT","BROWSER_LOAD_EVENT","_enhanceEventWithSdkInfo","newSdkInfo","eventSdkInfo","createSessionEnvelope","createEventEnvelope","eventType","envelopeHeaders","STATE_PENDING","STATE_RESOLVED","STATE_REJECTED","resolvedSyncPromise","SyncPromise","resolve","rejectedSyncPromise","reject","reason","executor","onfulfilled","onrejected","isRejected","onfinally","cachedHandlers","setResult","notifyEventProcessors","_notifyEventProcessors","processors","onDrop","callbackError","final","parsedStackResults","lastSentryKeysCount","lastNativeKeysCount","cachedFilenameDebugIds","getFilenameToDebugIdMap","sentryDebugIdMap","nativeDebugIdMap","sentryDebugIdKeys","nativeDebugIdKeys","processDebugIds","debugIdKeys","debugId","debugIdMap","parsedStack","filename","isInternalException","getPossibleEventMessages","possibleMessages","lastException","prepareEvent","prepared","applyClientOptions","applyIntegrationsMetadata","applyDebugIds","finalScope","getFinalScope","clientEventProcessors","isTransaction","spanCountBeforeProcessing","evt","droppedSpanCount","applyDebugMeta","normalizeDepth","normalizeEvent","normalizeMaxBreadth","dist","maxValueLength","filenameDebugIdMap","images","debug_id","maxBreadth","parseEventHintOrCaptureContext","hintIsScopeOrFunction","hintIsScopeContext","captureContextKeys","captureException","captureMessage","captureEvent","setContext","setTags","setAttributes","setUser","addEventProcessor","startSession","currentSession","endSession","_sendSessionUpdate","captureSession","end","getBaseApiEndpoint","_getIngestEndpoint","_encodedAuth","params","getEnvelopeEndpointWithUrlEncodedAuth","getReportDialogEndpoint","dsnLike","endpoint","encodedOptions","dialogOptions","createLogContainerEnvelopeItem","inferUserData","createLogEnvelope","logs","_INTERNAL_flushLogsBuffer","logBuffer","maybeLogBuffer","_INTERNAL_getLogBuffer","clientOptions","_getBufferMap$1","_getBufferMap","createMetricContainerEnvelopeItem","createMetricEnvelope","metrics","_INTERNAL_flushMetricsBuffer","metricBuffer","maybeMetricBuffer","_INTERNAL_getMetricBuffer","extractGenAiSpansFromEvent","genAiSpans","remainingSpans","SENTRY_BUFFER_FULL_ERROR","makePromiseBuffer","isReady","task","taskProducer","drain","drainPromise","timeout","promises","DEFAULT_RETRY_AFTER","parseRetryAfterHeader","headerDelay","header","headerDate","now","disabledUntil","limits","dataCategory","isRateLimited","updateRateLimits","updatedRateLimits","rateLimitHeader","retryAfterHeader","retryAfter","categories","namespaces","delay","category","statusCode","createTransport","rateLimits","recordItemLoss","send","filteredEnvelopeItems","filteredEnvelope","recordEnvelopeLoss","makeRequest","createClientReportEnvelope","clientReportItem","convertTransactionEventToSpanJson","convertSpanJsonToTransactionEvent","maybeWarnAboutIgnoredTransactionOptions","DEFAULTS","isCollectBehavior","resolveHttpHeaders","httpHeaders","resolveDataCollectionOptions","dc","INTERNAL_ERROR_SYMBOL","DO_NOT_SEND_EVENT_SYMBOL","DEFAULT_FLUSH_INTERVAL","CLOSED_CLIENT_SYMBOL","isClientClosed","_makeInternalError","_makeDoNotSendEventError","_isInternalError","_isDoNotSendEventError","setupWeightBasedFlushing","flushTimeout","isTimerActive","flushHook","afterCaptureHook","estimateSizeFn","flushFn","Client","url","estimateLogSizeInBytes","estimateMetricSizeInBytes","hintWithEventId","eventMessage","isMessage","promisedEvent","transport","clientFinished","transportFlushed","eventProcessor","integrationName","isAlreadyInstalled","genAiSpanItem","env","sendResponse","clientReleaseOption","clientEnvironmentOption","sessionAttrs","count","hookCallbacks","uniqueCallback","callbacks","unhandled","errored","ex","sessionNonTerminal","ticked","finalEvent","isTransactionEvent","beforeSendLabel","beforeSendDropReason","ignoredSpanCount","preparedSpanCount","processBeforeSend","processedEvent","transactionInfo","outcomes","quantity","beforeSend","errorEvent","processedSpans","initialSpans","onIgnoredSpans","beforeSendTransaction","metric","estimateAttributesSizeInBytes","initAndBind","warnIfClientIsActive","clientClass","setCurrentClient","getActiveClient","FILTERED_VALUE","SENSITIVE_KEY_SNIPPETS","isSensitiveKey","denySnippets","lower","snippet","shouldFilterDataKey","behavior","lowerKey","additionalDenyTerms","matchesConfiguredTerm","term","filterKeyValueData","filterQueryParams","queryString","separatorIndex","pair","encodedKey","filterUrlQuery","fragmentStart","queryEnd","queryStart","prefix","query","suffix","filtered","urlQueryParamsBehavior","filterCollectedUrl","filterCollectedUrlQuery","DEFAULT_BASE_URL","isURLObjectRelative","parseStringToURLObject","isRelative","urlBase","fullUrlObject","getSanitizedUrlStringFromUrlObject","newUrl","getUrlQuery","getUrlFragment","fragment","getUrlDomain","parseUrl","stripUrlQueryAndFragment","urlPath","stripDataUrlContent","mimeType","isBase64","dataStart","dataPrefix","includeDataPrefix","isSentryRequestUrl","checkDsn","checkTunnel","removeTrailingSlash","urlParts","hostnameMatchesDsnHost","hostname","dsnHost","addAutoIpAddressToSession","\"ip_address\"","applySdkMetadata","name2","getTraceData","isTwpPlaceholder","scopeToTraceHeader","traceData","scopeToTraceparentHeader","NORMALIZED_REGEXP_CACHE","normalizeRegExpTarget","flags","cached","normalizedPattern","matchesTracePropagationTargets","lowerCaseValue","tracePropagationTargets","lowerCaseTarget","DEFAULT_BREADCRUMBS","addBreadcrumb","finalBreadcrumb","beforeBreadcrumb","SETUP_CLIENTS","functionToStringIntegration","originalFunctionToString","originalFunction","unwrappedFunction","DEFAULT_IGNORE_ERRORS","eventFiltersIntegration","mergedOptions","_mergeOptions","_shouldDropEvent","internalOptions","_isIgnoredError","_isUselessError","_isDeniedUrl","_isAllowedUrl","_isIgnoredTransaction","ignoreErrors","ignoreTransactions","denyUrls","_getEventFilterUrl","allowUrls","_getLastValidUrl","applyAggregateErrorsToEvent","originalException","aggregateExceptionsFromError","exceptionFromErrorImplementation","prevExceptions","newExceptions","applyExceptionGroupFieldsForParentException","exceptionId","newException","newExceptionId","applyExceptionGroupFieldsForChildException","isExceptionGroup","childError","isSuppressedError","parentId","hasSentryFetchUrlHost","_enhanceErrorWithSentryInfo","_filter","addConsoleInstrumentationHandler","removeHandler","instrumentConsole","addConsoleInstrumentationFilter","filter","instrumentedLevels","CONSOLE_LEVELS$1","firstArg","isFiltered","severityLevelFromString","dedupeIntegration","previousEvent","currentEvent","_isSameMessageEvent","_isSameExceptionEvent","currentMessage","previousMessage","_isSameFingerprint","_isSameStacktrace","previousException","_getExceptionFromEvent","currentException","currentFrames","previousFrames","frameA","frameB","currentFingerprint","previousFingerprint","consoleIntegration","unsubscribe","addConsoleBreadcrumb","unsubscribe2","formatConsoleArgs","assertionArgs","conversationIdIntegration","isolationScopeData","op","GEN_AI_CONVERSATION_ID","instrumentFetchRequest","shouldCreateSpanResult","shouldCreateSpan","endSpan","_callOnRequestSpanEnd","instrumentFetchRequestOptions","hasParent","shouldEmitSpan","getSpanStartOptions","spanOrigin","spanForTraceHeaders","shouldAttachHeaders","_INTERNAL_getTracingHeadersForFetchRequest","propagateTraceparent","fetchHint","traceHeaders","originalHeaders","fetchOptionsObj","isHeaders","newHeaders","prevBaggageHeader","baggageHeaderHasSentryBaggageValues","isHeadersInitTupleArray","prevBaggageHeaderWithSentryValues","existingSentryTraceHeader","existingTraceparentHeader","existingBaggageHeader","newBaggageHeaders","headerItem","contentLength","contentLengthNum","HTTP_RESPONSE_BODY_SIZE","isStreamed","domain","sanitizedUrl2","getFetchSpanAttributes","parsedUrl","sanitizedUrl","URL_FULL","HTTP_REQUEST_METHOD","HTTP_CLIENT","URL_DOMAIN","SERVER_ADDRESS","SERVER_PORT","URL_QUERY","URL_FRAGMENT","WINDOW","_isFetchSupported","isNativeFunction","supportsNativeFetch","doc","sandbox","addFetchInstrumentationHandler","instrumentFetch","originalFetch","virtualError","parseFetchArgs","getHeadersFromFetchArgs","onFetchResolved","enhanceOption","hasProp","getUrlFromResource","resource","fetchArgs","arg","requestArgument","optionsArgument","getBreadcrumbLogLevelFromHttpStatusCode","LRUMap","_maxSize","nextKey","t","r","c$11","g","u","T","y","M","_$4","m$10","M$4","p$9","w","I","N","q","B$4","q$3","U","e$22","$$5","_previousCls","_previousLcp","_previousTtfb","_previousInp","_previousFcp","stopListeners","_reportSoftNavs","_reportBfcache","enableSoftNavigationReporting","enableBfcacheReporting","addClsInstrumentationHandler","addMetricObserver","instrumentCls","stopOnCallback","addLcpInstrumentationHandler","instrumentLcp","addTtfbInstrumentationHandler","instrumentTtfb","addFcpInstrumentationHandler","instrumentFcp","addInpInstrumentationHandler","instrumentInp","addPerformanceInstrumentationHandler","instrumentPerformanceObserver","getCleanupCallback","unlessBfcacheDisabled","onCLS","onLCP","onTTFB","onFCP","onINP","previousValue","handlers$2","stopOnCleanup","isPerformanceEventTiming","entry","MAX_TRACKED_NAVIGATIONS","INTERACTION_MATCH_TOLERANCE_MS","_pendingNavigation","_pendingInteraction","_lastInteractionTimestamp","_interactionIdToNavigationSpan","_navigationIdToNavigationSpan","_correlationStarted","interactionMatches","entryStartTime","interactionTimestamp","supportsSoftNavigations","startSoftNavigationCorrelation","onInteraction","WINDOW$3","bindInteractionToNavigationSpan","entries","pending","BROWSER_NAVIGATION_ID","getNavigationSpanForMetric","isMeasurementValue","startAndEndSpan","parentStartTime","startTimeInSeconds","getBrowserPerformanceAPI","msToSec","extractNetworkProtocol","_name","char","nextHopProtocol","supportsWebVital","entryType","resourceTimingToSpanAttributes","timingSpanData","resourceTiming","_INTERNAL_performanceTimeToSeconds","getAbsoluteTime","dropUndefinedKeysFromObject","MAX_INT_AS_BYTES","_performanceCursor","startTrackingLongTasks","parent","parentAttributes","parentStartTimestamp","UI_LONG_TASK","startTrackingLongAnimationFrames","parentOp","invoker","invokerType","sourceURL","CODE_FILE_PATH","sourceFunctionName","CODE_FUNCTION_NAME","sourceCharPosition","UI_LONG_ANIMATION_FRAME","addPerformanceEntries","performanceEntries","transactionStartTime","_addNavigationSpans","spanStreamingEnabled","_addPaintSpan","_addResourceSpans","ignoreResourceSpans","_trackNavigator","BROWSER_PAINT","BROWSER_PAINT_TYPE","_addPerformanceNavigationTiming","_addRequest","_navigationTimeToSeconds","NAVIGATION_TIMING_SPAN_OPS","_getEndPropertyNameForNavigationTiming","filteredUrl","requestStartTimestamp","responseEndTimestamp","responseStartTimestamp","RESOURCE_OTHER","ignoredResourceSpanOps","resourceUrl","URL_SCHEME","HTTP_REQUEST_SAME_ORIGIN","_setResourceRequestAttributes","HTTP_RESPONSE_STATUS_CODE","HTTP_RESPONSE_SIZE","attributesWithResourceTiming","connection","NETWORK_CONNECTION_EFFECTIVE_TYPE","NETWORK_CONNECTION_TYPE","NETWORK_CONNECTION_RTT","properties","entryKey","attributeKey","entryVal","DEFAULT_MAX_STRING_LENGTH","accessors","_safeRead","htmlTreeAsString","elem","currentElem","out","height","nextStr","keyAttrs","maxStringLength","_htmlElementAsString","tagName","dataset","\"sentryComponent\"","\"sentryElement\"","keyAttrPairs","keyAttr","keyAttrPair","classes","isValidLcpMetric","lcpValue","addPageListener","listener","removePageListener","getNavigationEntry","navigationEntry","checkResponseStart","getActivationStart","onHidden","firstHiddenTime","onHiddenFunctions","initHiddenTime","onVisibilityUpdate","onHiddenFunction","getVisibilityWatcher","activationStart","whenIdleOrHidden","rIC","called","runOnce","_measurements","_lcpEntry","_clsEntry","_navigationType","startTrackingWebVitals","lcpCleanupCallback","trackLcp","_trackLCP","clsCleanupCallback","trackCls","_trackCLS","ttfbCleanupCallback","_trackTtfb","fcpCleanupCallback","_trackFcp","fpCleanupCallback","_trackFp","\"cls\"","\"lcp\"","\"ttfb\"","\"fcp\"","firstHidden","\"fp\"","addWebVitalsToSpan","resetWebVitalState","timeOrigin","_addTtfbRequestTimeToMeasurements","_rebaseFpAgainstActivationStart","setAttr","attrKey","customAttrName","shortWebVitalName","measurementName","recordClsOnPageloadSpan","recordLcpOnPageloadSpan","measurement","_setWebVitalAttributes","BROWSER_NAVIGATION_TYPE","fp","navEntry","requestStart","responseStart","LAST_INTERACTIONS","INTERACTIONS_SPAN_MAP","ELEMENT_NAME_TIMESTAMP_MAP","INP_ENTRY_MAP","getCachedInteractionContext","interactionId","registerInpInteractionListener","interactionEvents","captureElementFromEvent","elementName","firstKey","resolveElementNameFromEntry","nearbyName","handleEntries","activeRootSpan","last","BOT_USER_AGENT_RE","isBotUserAgent","nav","getComponentName","maxTraverseHeight","getLocationHref","CLIENT_ROUTE_PROVIDERS","setRouteProvider","provider","_emitWebVitalSpan","passedAttributes","segmentName","metricName","SENTRY_TRANSACTION","USER_AGENT_ORIGINAL","softNavigationId","navigationType","standalone","getReplayAttributes","replay","replayId","SENTRY_REPLAY_ID","listenForWebVitalReportEvents","pageloadSpan","collected","_runCollectorCallbackOnce","collectorCallback","unsubscribeStartNavigation","unsubscribeAfterStartPageLoadSpan","INTERACTION_TYPE_TO_SPAN_OP","UI_INTERACTION_CLICK","UI_INTERACTION_HOVER","UI_INTERACTION_DRAG","UI_INTERACTION_PRESS","INTERACTION_TYPE_TO_SPAN_NAME_FALLBACK","trackWebVitalPerNavigation","bfcacheNavigationSpan","addInstrumentationHandler","navigationSpan","trackLcpAsSpan","perNavigation","_sendLcpSpan","lcpEntry","lcpNavigationType","cleanupLcpHandler","navigationStart","navigationStartTime","selector","componentName","UI_COMPONENT_NAME","UI_WEBVITAL_LCP","trackClsAsSpan","_sendClsSpan","clsValue","clsEntry","clsNavigationType","cleanupClsHandler","firstSourceNode","UI_WEBVITAL_CLS","trackInpAsSpan","isPlausibleInp","_sendInpSpan","findInpEntry","inpValue","entryInteractionType","interactionType","cachedContext","spanToUse","attributedSpan","hasSpanStreaming","fallbackName","DEBOUNCE_DURATION","debounceTimerID","lastCapturedEventType","lastCapturedEventTargetId","getCapture","addClickKeypressInstrumentationHandler","instrumentDOM","triggerDOMHandler","globalDOMEventHandler","makeDOMEventHandler","globalObject","handlerForType","capture","originalAddEventListener","listeners","originalRemoveEventListener","isSimilarToLastCapturedEvent","shouldSkipDOMEvent","\"_sentryCaptured\"","getEventTarget","globalListener","lastHref","supportsHistory","addHistoryInstrumentationHandler","instrumentHistory","to","historyReplacementFunction","getAbsoluteUrl","originalHistoryFunction","urlOrPath","cachedImplementations","getNativeImplementation","impl","contentWindow","clearCachedImplementation","setTimeout","SENTRY_XHR_DATA_KEY","addXhrInstrumentationHandler","instrumentXHR","xhrproto","xhrOpenArgArray","parseXhrUrlArg","originalOpen","xhrOpenThisArg","onreadystatechangeHandler","xhrInfo","originalOnreadystatechange","onreadystatechangeThisArg","onreadystatechangeArgArray","setRequestHeaderArgArray","setRequestHeaderThisArg","originalSetRequestHeader","sentryXhrData","sendThisArg","sendArgArray","originalSend","ORIGINAL_REQ_BODY","serializeFormData","formData","getBodyString","body","getFetchRequestArgBody","originalBody","parseXhrResponseHeaders","xhr","isElement","ignoreOnError","ignoredErrorReports","shouldIgnoreOnError","isSameErrorReport","report","ignoreNextOnError","wrap","isFunction","fn2","wrapper","sentryWrapped","wrappedArguments","getHttpRequestData","referrer","exceptionFromError","parseStackFrames","extractType","extractMessage","eventFromPlainObject","errorFromProp","getErrorPropertyFromObject","isUnhandledRejection","getNonErrorObjectExceptionValue","eventFromError","stacktrace","skipLines","getSkipFirstStackStringLines","getPopFirstTopFrames","reactMinifiedRegexp","isWebAssemblyException","_INTERNAL_enhanceErrorWithSentryInfo","eventFromException","eventFromUnknownInput","attachStacktrace","eventFromMessage","eventFromString","domException","objectException","stringifiedException","__sentry_template_string__","__sentry_template_values__","captureType","getObjectClassName","BrowserClient","opts","applyDefaultOptions","userInfo","checkDrift","sendClientReports","optionsArg","DEFAULT_BROWSER_TRANSPORT_BUFFER_SIZE","makeFetchTransport","pendingBodySize","pendingCount","requestSize","requestOptions","nativeFetch","CHROME_PRIORITY","GECKO_PRIORITY","createFrame","lineno","colno","chromeRegexNoFnName","chromeRegex","chromeEvalRegex","chromeDataUriRegex","chromeStackLineParser","dataUriMatch","noFnParts","line2","col","subMatch","extractSafariExtensionDetails","geckoREgex","geckoEvalRegex","defaultStackParser","isSafariExtension","isSafariWebExtension","MAX_ALLOWED_STRING_LENGTH","breadcrumbsIntegration","_options","_getDomBreadcrumbHandler","_getXhrBreadcrumbHandler","_getFetchBreadcrumbHandler","_getHistoryBreadcrumbHandler","_getSentryBreadcrumbHandler","dom","_isEvent","status_code","parsedLoc","parsedFrom","parsedTo","DEFAULT_EVENT_TARGET","browserApiErrorsIntegration","_wrapTimeFunction","_wrapRAF","_wrapXHR","eventTargetOption","_wrapEventTarget","originalCallback","wrapOptions","isEventListenerObject","integrationOptions","unregisterOriginalCallback","eventName","originalEventHandler","browserSessionIntegration","lifecycle","initialSessionSent","previousUser","maybeNewUser","cultureContextIntegration","getCultureContext","intl","globalHandlersIntegration","_installGlobalOnErrorHandler","_installGlobalOnUnhandledRejectionHandler","getOptions","_enhanceEventWithInitialFrame","msg","column","_getUnhandledRejectionError","_eventFromRejectionWithPrimitive","ev","ev0","ev0s","ev0sf","getFilenameFromUrl","httpContextIntegration","collectedHeaders","userHeaders","_INTERNAL_filterKeyValueData","reqData","referer","\"Referer\"","SENTRY_IS_LOCALHOST","DEFAULT_KEY","DEFAULT_LIMIT","linkedErrorsIntegration","HTML_ELEMENT_CONSTRUCTOR_NAME_REGEX","normalizeStringifyValue","objName","checkAndWarnIfIsEmbeddedBrowserExtension","_isEmbeddedBrowserExtension","_window","\"chrome\"","\"browser\"","href","getDefaultIntegrations","init","shouldDisableBecauseIsBrowserExtenstion","showReportDialog","optionalDocument","injectionPoint","script","onLoad","onClose","reportDialogClosedMessageHandler","WINDOW$2","REPLAY_SESSION_KEY","REPLAY_EVENT_NAME","UNABLE_TO_SEND_REPLAY","SESSION_IDLE_PAUSE_DURATION","SESSION_IDLE_EXPIRE_DURATION","DEFAULT_FLUSH_MIN_DELAY","DEFAULT_FLUSH_MAX_DELAY","BUFFER_CHECKOUT_TIME","RETRY_BASE_INTERVAL","RETRY_MAX_COUNT","NETWORK_BODY_MAX_SIZE","CONSOLE_ARG_MAX_SIZE","SLOW_CLICK_THRESHOLD","SLOW_CLICK_SCROLL_TIMEOUT","REPLAY_MAX_EVENT_BUFFER_SIZE","MIN_REPLAY_DURATION","MIN_REPLAY_DURATION_LIMIT","MAX_REPLAY_DURATION","__defProp","__defNormalProp","__publicField","NodeType$1","\"Document\"","\"DocumentType\"","\"Element\"","\"Text\"","\"CDATA\"","\"Comment\"","NodeType2","isElement$1","isShadowRoot","isNativeShadowDom","shadowRoot","fixBrowserCompatibilityIssuesInCSS","cssText","escapeImportStatement","rule","statement","stringifyStylesheet","rules","stringifyRule","fixAllCssProperty","styles","i2","styleDeclaration","attribute","isImportant","importStringified","isCSSImportRule","isCSSStyleRule","needsSafariColonFix","needsAllFix","\"all\"","fixSafariColons","cssStringified","Mirror","childNode","node","meta","oldNode","createMirror","shouldMaskInput","maskInputOptions","\"text\"","maskInputValue","text","isMasked","maskInputFn","toLowerCase","toUpperCase","ORIGINAL_ATTRIBUTE_NAME","is2DCanvasBlank","canvas","getImageData","originalGetImageData","pixel","getInputType","getInputValue","extractFileExtension","baseURL","cachedImplementations$1","getImplementation$1","windowImpl","document2","sandboxImpl","setTimeout$1","clearTimeout$1","getIFrameContentDocument$1","getIFrameContentWindow$1","_id","tagNameRegex","IGNORED_NODE","genId","getValidTagName","processedTagName","extractOrigin","canvasService","canvasCtx","URL_IN_CSS_REF","URL_PROTOCOL_MATCH","URL_WWW_MATCH","DATA_URI","filterCSSPropertiesFromInlineStyle","ignoredProperties","filteredProperties","colonIndex","propertyName","absoluteToStylesheet","filePath","path1","path2","path3","maybeQuote","quote1","quote2","part","SRCSET_NOT_SPACES","SRCSET_COMMAS_OR_SPACES","getAbsoluteSrcsetString","pos","collectCharacters","chars2","regEx","absoluteToDoc","descriptorsStr","inParens","cachedDocument","getHref","isSVGElement","customHref","transformAttribute","processedStyle","ignoreCSSAttributes","maskAttributeFn","ignoreAttribute","_isBlockedElement","unblockSelector","blockClass","eIndex","blockSelector","elementClassMatchesRegex","regex","distanceToMatch","matchPredicate","distance","createMatchPredicate","needMaskingText","autocomplete","maskDistance","unmaskDistance","maskAllText","unmaskTextClass","unmaskTextSelector","maskTextClass","maskTextSelector","onceIframeLoaded","win","iframeEl","fired","readyState","iframeLoadTimeout","blankUrl","onceStylesheetLoaded","styleSheetLoaded","styleSheetLoadTimeout","serializeNode","rootId","getRootId","mirror","serializeElementNode","serializeTextNode","docId","parentTagName","textContent","isStyle","isScript","isTextarea","forceMask","maskTextFn","needBlock","attributes2","inlineStylesheet","stylesheet","checked","\"select\"","recordCanvas","dataURLOptions","canvasDataURL","blankCanvas","inlineImages","image","imageSrc","priorCrossOrigin","recordInlineImage","newlyAddedElement","width","keepIframeSrcFn","isCustomElement","lowerIfExists","maybeAttr","slimDOMExcluded","slimDOMOptions","sn","serializeNodeWithId","_serializedNode","preserveWhiteSpace","serializedNode2","onSerialize","recordChild","skipChild","bypassOptions","childNodes","childN","serializedChildNode","iframeDoc","onIframeLoad","serializedIframeNode","updateImageDimensions","onBlockedImageLoad","rect","onStylesheetLoad","serializedLinkNode","stylesheetLoadTimeout","snapshot","maskAllInputs","slimDOM","on","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","receiver","throttle$1","previous","clearTimeout$2","setTimeout$2","hookSetter","isRevoked","patch","nowTimestamp","getWindowScroll","getWindowHeight","getWindowWidth","closestElementOfNode$1","isBlocked","blockedPredicate","checkAncestors","isUnblocked","blockDistance","unblockDistance","isSerialized","isIgnored","isAncestorRemoved","legacy_isTouchEvent","polyfill","isSerializedIframe","isSerializedStylesheet","hasShadowRoot","StyleSheetMirror","newId","getShadowHost","shadowHost","getRootShadowHost","rootShadowHost","shadowHostInDom","inDom","getImplementation","onRequestAnimationFrame","EventType","\"DomContentLoaded\"","\"Load\"","\"FullSnapshot\"","\"IncrementalSnapshot\"","\"Meta\"","\"Custom\"","\"Plugin\"","EventType2","IncrementalSource","\"Mutation\"","\"MouseMove\"","\"MouseInteraction\"","\"Scroll\"","\"ViewportResize\"","\"Input\"","\"TouchMove\"","\"MediaInteraction\"","\"StyleSheetRule\"","\"CanvasMutation\"","\"Font\"","\"Log\"","\"Drag\"","\"StyleDeclaration\"","\"Selection\"","\"AdoptedStyleSheet\"","\"CustomElement\"","IncrementalSource2","MouseInteractions","\"MouseUp\"","\"MouseDown\"","\"Click\"","\"ContextMenu\"","\"DblClick\"","\"Focus\"","\"Blur\"","\"TouchStart\"","\"TouchMove_Departed\"","\"TouchEnd\"","\"TouchCancel\"","MouseInteractions2","PointerTypes","\"Mouse\"","\"Pen\"","\"Touch\"","PointerTypes2","MediaInteractions","\"Play\"","\"Pause\"","\"Seeked\"","\"VolumeChange\"","\"RateChange\"","MediaInteractions2","errorHandler","registerErrorHandler","unregisterErrorHandler","callbackWrapper","chars","lookup","CanvasManagerNoop","getIFrameContentDocument","getIFrameContentWindow","StyleDeclarationParser","styleText","sheet","old","isNodeInLinkedList","n2","DoubleLinkedList","position","moveKey","MutationBuffer","mutations","adds","addedIds","addList","getNextId","ns","nextId","pushAdd","currentN","childSn","serializedNode","isAncestorInSet","isParentRemoved","tailNode","_node","unhandledNode","diffAsStr","unchangedAsStr","attributeName","isInputMasked","oldStyle","pname","newValue","newPriority","nodeId","deepDelete","targetId","addsSet","removes","_isParentRemoved","mirror2","r2","_isAncestorInSet","parentNode","mutationBuffers","initMutationObserver","mutationBuffer","mutationObserverCtor","angularZoneSymbol","observer","rootEl","initMoveObserver","sampling","threshold","callbackThreshold","positions","timeBaseline","wrappedCb","totalOffset","mousemoveCb","updatePosition","clientX","clientY","initMouseInteractionObserver","disableMap","currentPointerType","getHandler","pointerType","thisEventKey","eventKey","e2","mouseInteractionCb","initScrollObserver","scrollLeftTop","scrollCb","initViewportResizeObserver","lastH","lastW","viewportResizeCb","INPUT_TAGS","lastInputValueMap","initInputObserver","eventHandler","userTriggered","ignoreClass","ignoreSelector","isChecked","cbWithDedup","userTriggeredOnInput","el2","text2","lastInputValue","v2","inputCb","currentWindow","propertyDescriptor","hookProperties","getNestedCSSRulePositions","recurse","hasNestedCSSRule","childRule","getIdAndStyleId","styleId","styleMirror","initStyleSheetObserver","insertRule","argumentsList","stylesheetManager","styleSheetRuleCb","deleteRule","replaceSync","supportedNestedCSSRuleTypes","canMonkeyPatchNestedCSSRule","unmodifiedFunctions","typeKey","initAdoptedStyleSheetObserver","hostId","patchTarget","originalPropertyDescriptor","sheets","initStyleDeclarationObserver","setProperty","priority","styleDeclarationCb","removeProperty","initMediaInteractionObserver","mediaInteractionCb","initFontObserver","fontMap","originalFontFace","fontFace","family","descriptors","restoreHandler","fontCb","initSelectionObserver","param","collapsed","updateSelection","selection","ranges","startContainer","endContainer","selectionCb","initCustomElementObserver","customElementCb","initObservers","o2","mutationObserver","mousemoveHandler","mouseInteractionHandler","scrollHandler","viewportResizeHandler","inputHandler","mediaInteractionHandler","styleSheetObserver","adoptedStyleSheetObserver","styleDeclarationObserver","fontObserver","selectionObserver","customElementObserver","pluginHandlers","plugin","CrossOriginIframeMirror","generateIdFn","idToRemoteIdMap","idToRemoteMap","remoteIdToIdMap","remoteToIdMap","remoteId","ids","IframeManagerNoop","IframeManager","crossOriginMessageEvent","transformedEvent","range","style","iframeMirror","ShadowDomManagerNoop","ShadowDomManager","iframeElement","iframeWindow","iframeElementConstructor","manager","option","StylesheetManager","linkEl","adoptedStyleSheetData","ProcessedNodeManager","thisBuffer","wrappedEmit","_takeFullSnapshot","cleanFrame","_maskInputOptions","_slimDOMOptions","inEmittingFrame","passEmitsToParent","emit","mousemoveWait","lastFullSnapshotEvent","incrementalSnapshotCount","plugins","packFn","isCheckout","exceedCount","checkoutEveryNth","exceedTime","checkoutEveryNms","takeFullSnapshot2","wrappedMutationEmit","wrappedScrollEmit","wrappedCanvasMutationEmit","a2","iframeManager","processedNodeManager","canvasManager","_getCanvasManager","getCanvasManager","\"canvas\"","shadowDomManager","recordDOM","observe","c2","recordAfter","takeFullSnapshot","getCanvasManagerFn","n$43","ReplayEventTypeIncrementalSnapshot","ReplayEventTypeCustom","timestampToMs","timestampToS","addBreadcrumbEvent","INTERACTIVE_SELECTOR","getClosestInteractive","getClickTargetNode","getTargetNode","isEventWithTarget","onWindowOpen","monkeyPatchWindowOpen","handlers$1","originalWindowOpen","IncrementalMutationSources","handleClick","clickDetector","clickBreadcrumb","ClickDetector","slowClickConfig","_addBreadcrumbEvent","cleanupWindowOpen","nowInSeconds","ignoreElement","isClickBreadcrumb","newClick","click","timedOutClicks","hadScroll","hadMutation","isSlowClick","timeAfterClickMs","endReason","clickCount","setTimeout$3","SLOW_CLICK_TAGS","updateClickDetectorForRecordingEvent","isIncrementalEvent","isIncrementalMouseInteraction","createBreadcrumb","NodeType","ATTRIBUTES_TO_RECORD","BREADCRUMB_RELEVANT_ATTRIBUTES","getAttributesToRecord","normalizedKey","handleDomListener","handleDom","isClick","getBaseDomBreadcrumb","node2","getDomTarget","handleKeyboardEvent","getKeyboardBreadcrumb","isInputElement","hasModifierKey","metaKey","ctrlKey","altKey","isCharacterKey","ENTRY_TYPES","createResourceEntry","createPaintEntry","createNavigationEntry","webVitalHandler","getter","createPerformanceEntries","createPerformanceEntry","domComplete","transferSize","initiatorType","responseEnd","responseStatus","getLargestContentfulPaint","lastEntry","getWebVital","isLayoutShift","getCumulativeLayoutShift","layoutShifts","nodes","nodeIds","getInteractionToNextPaint","rating","setupPerformanceObserver","addPerformanceEntry","onEntries","clearCallbacks","clearCallback","makeReplayDebugLogger","_debug","EventBufferSizeExceededError","WorkerDestroyedError","EventBufferArray","eventSize","eventsRet","ts","WorkerHandler","worker","EventBufferCompressionWorker","EventBufferProxy","addEventPromises","hasCheckout","waitForCheckout","createEventBuffer","customWorkerUrl","useCompression","_loadWorker","workerUrl","_getWorkerUrl","hasSessionStorage","clearSession","deleteSession","WINDOW$1","isSampled","saveSession","getSessionSampleType","sessionSampleRate","allowBuffering","createSession","stickySession","fetchSession","sessionStringFromStorage","isExpired","initialTime","expiry","targetTime","isSessionExpired","maxReplayDuration","sessionIdleExpire","shouldRefreshSession","loadOrCreateSession","existingSession","sessionOptions","isCustomEvent","addEventSync","shouldAddEvent","_addEvent","addEvent","eventBuffer","isBufferMode","eventAfterPossibleCallback","maybeApplyCallback","isExceeded","timestampInMs","MAX_CONTEXT_VALUES","addSegmentDetailsToContext","replayContext","handleProcessSegmentSpan","isReplayEvent","isFeedbackEvent","handleAfterSendEvent","handleTransactionEvent","handleErrorEvent","beforeErrorSampling","handleBeforeSendEvent","handleHydrationError","exceptionValue","handleBreadcrumbs","beforeAddBreadcrumb","isBreadcrumbWithCategory","normalizeBreadcrumb","normalizeConsoleBreadcrumb","isTruncated","normalizedArgs","normalizedArg","isRrwebError","resetReplayIdOnDynamicSamplingContext","setReplayIdOnDynamicSamplingContext","addFeedbackBreadcrumb","shouldSampleForBufferEvent","handleGlobalEventListener","sessionId","feedbackReplayId","isErrorEventSampled","createPerformanceSpans","handleHistory","handleHistorySpanListener","shouldFilterRequest","addNetworkBreadcrumb","getBodySize","textEncoder","formDataStr","parseContentLengthHeader","mergeWarning","info","warning","newMeta","makeNetworkReplayBreadcrumb","buildSkippedNetworkRequestOrResponse","bodySize","buildNetworkRequestOrResponse","normalizedBody","normalizeNetworkBody","warnings","getAllowedHeaders","allowedHeaders","filteredHeaders","exceedsSizeLimit","isProbablyJson","_strIsProbablyJson","truncatedBody","first","urlMatches","getFullUrl","urls","fixedUrl","baseURI","fullUrl","captureFetchBreadcrumbToReplay","_prepareFetchData","enrichFetchBreadcrumb","reqSize","resSize","requestBodySize","responseBodySize","captureDetails","_getRequestInfo","_getResponseInfo","getRequestHeaders","networkRequestHeaders","networkCaptureBodies","bodyStr","getAllHeaders","networkResponseHeaders","bodyText","_parseFetchResponseBody","getResponseData","_tryCloneResponse","_tryGetResponseText","allHeaders","getHeadersFromOptions","_getResponseText","txt","captureXhrBreadcrumbToReplay","_prepareXhrData","enrichXhrBreadcrumb","_getBodySize","requestBody","requestWarning","responseBody","responseWarning","_getXhrResponseBody","errors","_parseXhrResponse","responseType","handleNetworkBreadcrumbs","beforeAddNetworkBreadcrumb","_isXhrBreadcrumb","_isXhrHint","_isFetchBreadcrumb","_isFetchHint","addGlobalListeners","replayIdOnFeedbackOpen","feedbackContext","feedbackEvent","addMemoryEntry","createMemoryEntry","memoryEntry","debounce$1","NAVIGATOR","getRecordingSamplingOptions","getHandleRecordingEmit","hadFirstEvent","_isCheckout","syncMirrorAttributesFromMutationEvent","addSettingsEvent","earliestEvent","mutation","changed","record$1","createOptionsEvent","closestElementOfNode","createReplayEnvelope","replayEvent","recordingData","prepareRecordingData","payloadWithSequence","replayHeaders","sequence","prepareReplayEvent","event_id","eventHint","\"_integrations\"","preparedEvent","sendReplayRequest","segment_id","preparedRecordingData","eventContext","initialTimestamp","errorIds","traceIds","segmentNames","RateLimitError","TransportStatusCodeError","ReplayDurationLimitError","sendReplay","replayData","retryConfig","err2","THROTTLED","SKIPPED","throttle","_cleanup","durationSeconds","_getTotalCount","isThrottled","maxCount","wasThrottled","ReplayContainer","recordingOptions","slowClickTimeout","slowClickIgnoreSelectors","requiresManualStart","errorSampleRate","previousSessionId","canvasOptions","stopReason","forceFlush","activityTime","hasStoppedRecording","continueRecording","cbResult","lastActiveSpan","lastRootSpan","_lastActivity","initialTimestampInSeconds","_context","segmentId","force","tooShort","tooLong","_flushInProgress","ignoreMutations","mutationLimit","mutationBreadcrumbLimit","overMutationLimit","getOption","selectors","defaultSelectors","getPrivacyOptions","mask","unmask","block","unblock","ignore","maskAttribute","privacyOptions","masksNamedAttribute","maskAttributes","masksSubmitButtonValue","MEDIA_SELECTORS","DEFAULT_NETWORK_HEADERS","ORIGINAL_BODY","_initialized","_isRequestInstrumented","_INTERNAL_instrumentRequestInterface","OriginalRequest","SentryRequest","replayIntegration","Replay","maskFn","_experiments","minReplayDuration","_getMergedNetworkHeaders","onlyIfSampled","finalOptions","loadReplayOptionsFromClient","canvasIntegration","\"_canvas\"","opt","initialOptions","replaysSessionSampleRate","replaysOnErrorSampleRate","getReplay","baggageHeaderHasSentryValues","getFullURL","isPerformanceResourceTiming","createHeadersSafely","defaultRequestInstrumentationOptions","instrumentOutgoingRequests","shouldCreateSpanForRequest","shouldAttachHeadersWithTargets","traceFetch","createdSpan","sanitizedFullUrl","enableHTTPTimings","addHTTPTimings","onRequestSpanStart","traceXHR","xhrCallback","onRequestSpanEnd","HTTP_TIMING_WAIT_MS","onEntryFound","unsubscribePerformanceObsever","originalEnd","capturedEndTimestamp","isEnded","endSpanAndCleanup","fallbackTimeout","resolvedUrl","currentOrigin","targetUrl","isSameOriginRequest","isRelativeSameOriginRequest","urlForSpanName","streamedName","shouldAttachHeaders2","addTracingHeadersToXhrRequest","setHeaderOnXhr","sentryTraceHeader","traceparentHeader","\"traceparent\"","sentryBaggageHeader","originalBaggageHeader","\"baggage\"","WEB_VITALS_INTEGRATION_NAME","webVitalsIntegration","ignored","reportSoftNavs","softNavigations","reportBfcache","bfcacheNavigations","trackClsOnPageloadSpan","trackLcpOnPageloadSpan","finalizeWebVitals","pageloadSpans","registerBackgroundTabDetection","PREVIOUS_TRACE_KEY","PREVIOUS_TRACE_TMP_SPAN_ATTRIBUTE","linkTraces","useSessionStorage","linkPreviousTrace","inMemoryPreviousTraceInfo","getPreviousTraceFromSessionStorage","oldPropagationContext","addPreviousTraceSpanLink","storePreviousTraceInSessionStorage","isFirstTraceOnPageload","consistentTraceSampling","spanContextSampled","mutableSamplingContextData","getSampleRate","oldSampleRate","updatedPreviousTraceInfo","previousTraceInfo","previousTraceSpanCtx","SENTRY_LINK_TYPE","BROWSER_TRACING_INTEGRATION_ID","DEFAULT_BROWSER_TRACING_OPTIONS","browserTracingIntegration","optionalWindowDocument","_isBot","lastInteractionTimestamp","_pageloadSpan","_createRouteSpan","isPageloadSpan","initialSpanName","finalStartSpanOptions","beforeStartSpan","urlObject","makeActive","idleSpan","enableReportPageLoaded","setActiveIdleSpan","emitFinish","enableLongAnimationFrame","enableLongTask","detectRedirects","interactionHandler","maybeEndActiveSpan","getActiveIdleSpan","navigationOptions","NAVIGATION_REDIRECT","NAVIGATION","traceOptions","getMetaContent","getServerTiming","requestData","PAGELOAD","webVitals","enableInp","startingUrl","instrumentPageLoad","startBrowserTracingPageLoadSpan","instrumentNavigation","parsed","navigationIsRedirect","isRedirect","startBrowserTracingNavigationSpan","instrumentBfcacheRestore","markBackgroundSpan","isFallbackSpanName","spanOptions","pageloadSpanOptions","isRedirect2","metaName","entry2","ACTIVE_IDLE_SPAN_PROPERTY","REDIRECT_THRESHOLD","spanData","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_CONSUMER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_ACTIVITY_TYPE","REACT_VIEW_TRANSITION_TYPE","MAYBE_ITERATOR_SYMBOL","getIteratorFn","maybeIterable","ReactNoopUpdateQueue","assign","emptyObject","Component","updater","partialState","ComponentDummy","PureComponent","pureComponentPrototype","isArrayImpl","noop","ReactSharedInternals","ReactElement","refProp","cloneAndReplaceKey","oldElement","newKey","isValidElement","escape","escaperLookup","userProvidedKeyEscapeRegex","getElementKey","resolveThenable","thenable","fulfilledValue","mapIntoArray","children","invokeCallback","array","escapedPrefix","nameSoFar","nextNamePrefix","mapChildren","lazyInitializer","ctor","moduleObject","reportGlobalError","startTransition","prevTransition","currentTransition","returnValue","onStartTransitionFinish","addTransitionType","transition","transitionTypes","Children","forEachFunc","forEachContext","config","propName","childArray","defaultValue","childrenLength","compare","usable","action","initialState","permalink","deps","Context","initialValue","passthrough","initialArg","subscribe","getSnapshot","getServerSnapshot","require_react_production","isSyntheticEvent","import_react","init$1","normalizeStringifyValue$1","setCause","seenErrors","error2","cause2","cause","captureReactException","componentStack","errorBoundaryError","INITIAL_STATE","ErrorBoundary","errorInfo","beforeCapture","showDialog","onMount","onUnmount","onReset","freeGlobal","freeSelf","root","objectProto","nativeObjectToString","symToStringTag","getRawTag","isOwn","unmasked","nullTag","undefinedTag","baseGetTag","symbolTag","arrayMap","iteratee","isArray","INFINITY","symbolProto","symbolToString","baseToString","reWhitespace","trimmedEndIndex","reTrimStart","baseTrim","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","isBinary","MAX_INTEGER","toFinite","toInteger","remainder","identity","asyncTag","funcTag","genTag","proxyTag","coreJsData","maskSrcKey","funcToString","toSource","reRegExpChar","reIsHostCtor","funcProto","reIsNative","baseIsNative","getValue","getNative","objectCreate","baseCreate","copyArray","HOT_COUNT","HOT_SPAN","nativeNow","shortOut","lastCalled","stamp","constant","setToString","\"configurable\"","\"enumerable\"","\"value\"","\"writable\"","arrayEach","baseFindIndex","fromRight","baseIsNaN","strictIndexOf","baseIndexOf","arrayIncludes","reIsUint","isIndex","baseAssignValue","defineProperty$1","eq","assignValue","objValue","copyObject","isNew","customizer","nativeMax","overRest","otherArgs","transform","baseRest","isLength","isArrayLike","isIterateeCall","createAssigner","sources","guard","assigner","isPrototype","Ctor","baseTimes","argsTag","baseIsArguments","propertyIsEnumerable","isArguments","stubFalse","freeExports","freeModule","Buffer","isBuffer","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","baseIsTypedArray","baseUnary","freeProcess","nodeUtil","nodeIsTypedArray","arrayLikeKeys","isArr","isArg","isBuff","isType","skipIndexes","inherited","overArg","nativeKeys","baseKeys","nativeKeysIn","baseKeysIn","isProto","keysIn","assignIn","reIsDeepProp","reIsPlainProp","isKey","nativeCreate","hashClear","hashDelete","HASH_UNDEFINED","hashGet","hashHas","hashSet","Hash","listCacheClear","assocIndexOf","splice","listCacheDelete","splice$1","listCacheGet","listCacheHas","listCacheSet","ListCache","mapCacheClear","\"hash\"","\"map\"","\"string\"","isKeyable","getMapData","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","FUNC_ERROR_TEXT","resolver","memoized","cache","MAX_MEMOIZE_SIZE","memoizeCapped","rePropName","reEscapeChar","stringToPath","quote","subString","castPath","toKey","baseGet","arrayPush","spreadableSymbol","isFlattenable","baseFlatten","isStrict","flatten","flatRest","getPrototype","objectCtorString","baseSlice","castSlice","reHasUnicode","hasUnicode","asciiToArray","rsAstralRange","rsComboRange","rsVarRange","rsAstral","rsCombo","rsFitz","rsModifier","rsNonAstral","rsRegional","rsSurrPair","rsZWJ","reOptMod","rsOptVar","rsOptJoin","rsSeq","rsSymbol","reUnicode","unicodeToArray","stringToArray","createCaseFirst","strSymbols","chr","trailing","upperFirst","capitalize","nativeIsFinite","nativeMin","createRound","precision","baseClamp","upper","clamp","stackClear","stackDelete","stackGet","stackHas","LARGE_ARRAY_SIZE","stackSet","pairs","Stack","baseAssign","baseAssignIn","allocUnsafe","cloneBuffer","isDeep","arrayFilter","resIndex","stubArray","nativeGetSymbols","getSymbols","copySymbols","getSymbolsIn","copySymbolsIn","baseGetAllKeys","keysFunc","symbolsFunc","getAllKeys","getAllKeysIn","DataView","Promise","promiseTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ctorString","_getTag_default","initCloneArray","Uint8Array","cloneArrayBuffer","arrayBuffer","cloneDataView","dataView","reFlags","cloneRegExp","regexp","symbolValueOf","cloneSymbol","cloneTypedArray","typedArray","initCloneByTag","initCloneObject","baseIsMap","nodeIsMap","isMap","baseIsSet","nodeIsSet","isSet","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","cloneableTags","baseClone","bitmask","isFlat","isFull","isFunc","stacked","subValue","cloneDeep","compact","setCacheAdd","setCacheHas","SetCache","arraySome","cacheHas","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalArrays","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","equalFunc","mapToArray","setToArray","equalByTag","convert","equalObjects","objProps","objLength","objStacked","skipCtor","objCtor","othCtor","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","baseIsEqual","baseIsMatch","matchData","noCustomizer","srcValue","isStrictComparable","getMatchData","matchesStrictComparable","baseMatches","baseHasIn","hasPath","hasFunc","hasIn","baseMatchesProperty","baseProperty","basePropertyDeep","baseIteratee","arrayAggregator","createBaseFor","baseFor","baseForOwn","createBaseEach","collection","eachFunc","baseEach","baseAggregator","createAggregator","initializer","lastArgs","lastThis","lastCallTime","lastInvokeTime","leading","maxing","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","isInvoking","assignMergeValue","isArrayLikeObject","safeGet","toPlainObject","baseMergeDeep","isCommon","isTyped","mergeFunc","srcIndex","baseMerge","mergeWith","arrayIncludesWith","comparator","baseDifference","includes","valuesLength","computed","valuesIndex","baseMap","groupBy","baseGt","baseValues","isEmpty","isEqual","isInteger","isNumber","keyBy","baseLt","mapValues","baseExtremum","maxBy","baseSum","minBy","baseUnset","customOmitClone","omit","paths","baseSortBy","comparer","compareAscending","valIsDefined","valIsNull","valIsReflexive","valIsSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","compareMultiple","objCriteria","othCriteria","ordersLength","orders","baseOrderBy","iteratees","\"criteria\"","\"index\"","orderBy","partition","nativeFloor","nativeRandom","baseRandom","nativeCeil","baseRange","createRange","round","shuffleSelf","lastIndex","rand","arrayShuffle","baseShuffle","shuffle","baseSome","some","sortBy","baseSortedUniq","sortedUniq","sortedUniqBy","sum","sumBy","\"leading\"","\"maxWait\"","\"trailing\"","createSet","baseUniq","seenIndex","arrays","uniq","uniqBy","uniqWith","unzip","group","without","zip","i$21","e$17","n$35","r$24","ascending","descending","bisector","compare1","compare2","delta","zero","left","lo","hi","mid","right","center","numbers","valueof","ascendingBisect","bisectRight","extent","Adder","j","InternMap","keyof","intern_get","intern_set","intern_delete","_key","_intern","compareDefined","ascendingDefined","e10","e5","tickSpec","power","factor","i1","inc","ticks","reverse","tickIncrement","tickStep","quickselect","z","sd","newLeft","newRight","swap","quantile","i0","value0","pairof","exports","module","this$13","Y","this$12","this$11","this$10","this$9","this$8","this$7","this$6","dayjs","customParseFormat","isToday","isYesterday","relativeTime","utc","isoWeek","quarterOfYear","dayjs_default","formatDecimal_default","formatDecimalParts","coefficient","exponent_default","formatGroup_default","grouping","thousands","formatNumerals_default","numerals","re","formatSpecifier","specifier","FormatSpecifier","formatTrim_default","prefixExponent","formatPrefixAuto_default","exponent","formatRounded_default","formatTypes_default","\"b\"","\"c\"","\"d\"","formatDecimal","\"e\"","\"f\"","\"g\"","\"o\"","\"p\"","formatRounded","\"r\"","\"s\"","formatPrefixAuto","\"X\"","\"x\"","identity_default$2","prefixes","locale_default","locale","formatGroup","currencyPrefix","currencySuffix","decimal","formatNumerals","percent","minus","nan","newFormat","align","sign","comma","trim","formatTypes","formatType","maybeSuffix","format","valuePrefix","valueSuffix","valueNegative","formatTrim","padding","formatPrefix","defaultLocale","formatLocale","definition","precisionFixed_default","precisionPrefix_default","precisionRound_default","STATE_PLAINTEXT","STATE_HTML","STATE_COMMENT","ALLOWED_TAGS_REGEX","NORMALIZE_TAG_REGEX","striptags","init_context","allowable_tags","tag_replacement","striptags_internal","init_striptags_stream","parse_allowable_tags","tag_buffer","in_quote_char","idx","normalize_tag","tag_set","this$5","getEnumValues","numericValues","jsonStringifyReplacer","Cached","nullish","cleanRegex","assignProp","captureStackTrace","_args","prot","propertyKeyTypes","escapeRegex","cl","inst","def","normalizeParams","_params","optionalKeys","shape","aborted","startIndex","explicitlyAborted","prefixIssues","issues","_a","iss","unwrapMessage","sizeCaps","caps","ch","defChecks","attachSchema","finalizeIssue","traits","schemaError","full","highSurrogate","codePointLength","units","getLengthableOrigin","members","table","desc","defineBound","own","hide","own$4","claim","sentinel","installing","broke","breaker","defineLazyInternal","outer","compute","installLazyProp","make","_zodDesc","_E","newError","saved","Definition","$constructor","zodProto","Internals","protoMembers","initialized","ctorProto","up","Parent","deferred","pp","$ZodAsyncError","$ZodEncodeError","globalConfig","newConfig","_getMessage","internals","util.jsonStringifyReplacer","_setMessage","_messageDesc","_issuesDesc","_installedToString","$ZodRealError","parse","_ctx","schema","core.$ZodAsyncError","_Err","util.finalizeIssue","core.config","errors.$ZodRealError","parseAsync","safeParse","failure","Err","safeParseAsync","anyString","boolean","$ZodCheck","_whenHasLength","util.nullish","numericOriginMap","$ZodCheckGreaterThan","$ZodCheckMinLength","util.codePointLength","util.getLengthableOrigin","$ZodType","checks","runChecks","isAborted","util.aborted","asyncResult","util.explicitlyAborted","currLen","handleCanaryResult","canary","checkResult","util.hide","standardProps","toStandardResult","validateAsync","$ZodString","regexes.anyString","$ZodNumber","regexes.number","received","$ZodBoolean","regexes.boolean","$ZodAny","$ZodNever","capSize","util.sizeCaps","cap","arraySize","handleArrayResult","util.prefixIssues","$ZodArray","proms","abortEarly","handlePropertyResult","isPresent","isOptionalOut","optout","optin","NO_SYMBOL_KEYS","normalizeDef","ownSymbols","symbolKeys","allKeys","okeys","util.optionalKeys","handleCatchall","unrecognized","keySet","_catchall","$ZodObject","sh","newSh","_normalized","util.cached","zod","propValues","field","util.isObject","catchall","$ZodRecord","util.isPlainObject","recordKeys","keyResult","outKey","number$3","retryResult","$ZodEnum","util.getEnumValues","valuesSet","patternValues","util.escapeRegex","$ZodLiteral","vals","$ZodTransform","core.$ZodEncodeError","_out","handleOptionalResult","$ZodOptional","util.cleanRegex","$ZodNullable","$ZodPipe","handlePipeResult","snapshotChecks","_string","Class","util.normalizeParams","_number","_boolean","_any","_never","_gte","checks.$ZodCheckGreaterThan","_minLength","checks.$ZodCheckMinLength","ZodMiniType","parse.parse","parse.parseAsync","parse.safeParse","parse.safeParseAsync","core.clone","_def","reg","ZodMiniString","core._string","ZodMiniNumber","core._number","ZodMiniBoolean","core._boolean","ZodMiniAny","any","core._any","ZodMiniNever","never","core._never","ZodMiniArray","ZodMiniObject","strictObject","ZodMiniRecord","valueType","string$2","keyType","ZodMiniEnum","_enum","ZodMiniLiteral","literal","ZodMiniTransform","ZodMiniOptional","optional","ZodMiniNullable","nullable","ZodMiniPipe","pipe","in_","EMAIL_NOTIFICATIONS_FREQUENCIES","EMAIL_NOTIFICATIONS_FREQUENCY_LABELS","daily","weekly","EMAIL_NOTIFICATIONS_CONTENT_TYPES","EMAIL_NOTIFICATIONS_CONTENT_TYPE_LABELS","article","announcement","SiteFooterContext","\"gdocsDocument\"","\"grapherPage\"","\"dataPageV2\"","\"multiDimDataPage\"","\"dynamicCollectionPage\"","\"explorerPage\"","\"explorerIndexPage\"","\"default\"","\"latestPage\"","\"searchPage\"","\"subscribePage\"","\"slideshowPage\"","EPOCH_DATE","IDEAL_PLOT_ASPECT_RATIO","GRAPHER_MAP_TYPE","GRAPHER_CHART_TYPES","ALL_GRAPHER_CHART_TYPES","GRAPHER_TAB_CONFIG_OPTIONS","GRAPHER_TAB_NAMES","GRAPHER_TAB_QUERY_PARAMS","ORIGIN_URL_REGEX_PATTERNS","SortOrder","\"asc\"","\"desc\"","SortBy","\"custom\"","\"entityName\"","\"column\"","\"total\"","\"change\"","\"startValue\"","\"endValue\"","ScaleType","\"linear\"","\"log\"","KeyChartLevel","\"None\"","\"Bottom\"","\"Middle\"","\"Top\"","DimensionProperty","\"y\"","\"size\"","\"color\"","\"table\"","TimeBoundValue","\"negativeInfinity\"","\"positiveInfinity\"","Infinity","TimeBoundValueStr","\"unboundedLeft\"","\"unboundedRight\"","ToleranceStrategy","\"closest\"","\"backwards\"","\"forwards\"","AxisMinMaxValueStr","\"auto\"","EntitySelectionMode","\"MultipleEntities\"","\"SingleEntity\"","\"Disabled\"","StackMode","\"absolute\"","\"relative\"","FacetStrategy","\"none\"","\"entity\"","\"metric\"","FacetAxisDomain","\"independent\"","\"shared\"","SeriesStrategy","MissingDataStrategy","\"hide\"","\"show\"","ScatterPointLabelStrategy","\"year\"","PeerCountryStrategy","\"ParentRegions\"","\"GdpPerCapita\"","\"Population\"","\"DataRange\"","\"DefaultSelection\"","\"Neighbors\"","VALID_PEER_COUNTRY_STRATEGY_QUERY_PARAMS","Object","isValidPeerCountryStrategy","isValidPeerCountryStrategyQueryParam","GrapherTooltipAnchor","LogoOption","\"owid\"","\"wordmark\"","CHART_LICENSES","DEFAULT_CHART_LICENSE","ColorSchemeName","\"YlGn\"","\"YlGnBu\"","\"GnBu\"","\"BuGn\"","\"PuBuGn\"","\"BuPu\"","\"RdPu\"","\"PuRd\"","\"OrRd\"","\"YlOrRd\"","\"YlOrBr\"","\"Purples\"","\"Blues\"","\"Greens\"","\"Oranges\"","\"Reds\"","\"Greys\"","\"PuOr\"","\"BrBG\"","\"PRGn\"","\"PiYG\"","\"RdBu\"","\"RdGy\"","\"RdYlBu\"","\"Spectral\"","\"RdYlGn\"","\"Accent\"","\"Dark2\"","\"Paired\"","\"Pastel1\"","\"Pastel2\"","\"Set1\"","\"Set2\"","\"Set3\"","\"PuBu\"","\"Magma\"","\"Inferno\"","\"Plasma\"","\"Viridis\"","\"continents\"","\"stackedAreaDefault\"","\"SingleColorDenim\"","\"SingleColorTeal\"","\"SingleColorPurple\"","\"SingleColorDustyCoral\"","\"SingleColorDarkCopper\"","\"OwidCategoricalA\"","\"OwidCategoricalB\"","\"OwidCategoricalC\"","\"OwidCategoricalD\"","\"OwidCategoricalE\"","\"OwidCategoricalMap\"","\"OwidEnergy\"","\"OwidEnergyLines\"","\"OwidDistinctLines\"","\"BinaryMapPaletteA\"","\"BinaryMapPaletteB\"","\"BinaryMapPaletteC\"","\"BinaryMapPaletteD\"","\"BinaryMapPaletteE\"","\"SingleColorGradientDenim\"","\"SingleColorGradientTeal\"","\"SingleColorGradientPurple\"","\"SingleColorGradientDustyCoral\"","\"SingleColorGradientDarkCopper\"","MapRegionName","\"World\"","\"Africa\"","\"NorthAmerica\"","\"SouthAmerica\"","\"Asia\"","\"Europe\"","\"Oceania\"","DumbbellConnectorStyle","\"Arrow\"","\"Line\"","DumbbellValueLabelMode","\"Absolute\"","\"Change\"","\"PercentChange\"","SwimlaneSegmentLabelMode","\"CategoryAndTimeRange\"","GRAPHER_QUERY_PARAM_KEYS","GRAPHER_ALL_QUERY_PARAMS","country","focus","tab","overlay","stackMode","zoomToSelection","xScale","yScale","region","endpointsOnly","facet","uniformYAxis","showSelectionOnlyInTable","showNoDataArea","year","globe","globeRotation","globeZoom","mapSelect","tableFilter","tableSearch","peerCountries","grapherKeysToSerialize","GrapherVariant","\"Default\"","\"Uncaptioned\"","\"Thumbnail\"","GrapherWindowType","\"panel\"","\"modal\"","\"drawer\"","Position","\"top\"","\"right\"","\"bottom\"","\"left\"","HorizontalAlign","\"center\"","VerticalAlign","\"middle\"","AxisAlign","\"start\"","\"end\"","TOPIC_AREA_NAMES","ContentGraphLinkType","\"Gdoc\"","\"Url\"","\"Grapher\"","\"Explorer\"","\"NarrativeChart\"","\"StaticViz\"","\"Dod\"","\"GuidedChart\"","BlockSize","\"Narrow\"","\"Wide\"","\"Widest\"","ChartConfigType","\"MultiDim\"","OwidGdocType","\"Article\"","\"TopicPage\"","\"Fragment\"","\"LinearTopicPage\"","\"DataInsight\"","\"Homepage\"","\"AboutPage\"","\"Author\"","\"Announcement\"","\"Profile\"","\"FeaturedViz\"","CHRONOLOGICAL_INDEX_TYPE_VALUES","LATEST_FEED_TYPE_VALUES","DYNAMIC_COLLECTION_PAGE_CONTAINER_ID","ALL_CHARTS_ID","KEY_INSIGHTS_ID","LICENSE_ID","CITATION_ID","PAST_VERSIONS_ID","CREDITS_ID","ENDNOTES_ID","RESEARCH_AND_WRITING_ID","FEATURED_METRICS_ID","FEATURED_DATA_INSIGHTS_ID","EXPLORE_DATA_SECTION_ID","RESEARCH_AND_WRITING_DEFAULT_HEADING","EXPLORE_DATA_SECTION_DEFAULT_TITLE","gdocUrlRegex","DEFAULT_GDOC_FEATURED_IMAGE","DEFAULT_THUMBNAIL_FILENAME","MARKDOWN_LIST_MARKER","collapseDescriptionKeyItem","rawLine","normalizeDescriptionKey","joinTitleFragments","attributionShort","titleVariant","OwidVariableRoundingMode","\"decimalPlaces\"","\"significantFigures\"","TimeInterval","\"Day\"","\"Week\"","\"Month\"","\"Quarter\"","\"Year\"","\"Decade\"","SUB_YEARLY_TIME_INTERVALS","TIME_INTERVALS","isIndicatorDimension","dimension","variableId","undefined","InputType","\"Delimited\"","\"RowStore\"","\"ColumnStore\"","\"Matrix\"","TransformType","\"LoadFromDelimited\"","\"LoadFromRowStore\"","\"LoadFromColumnStore\"","\"LoadFromMatrix\"","\"Concat\"","\"Noop\"","\"FilterRows\"","\"SortRows\"","\"UpdateRows\"","\"FilterColumns\"","\"AppendColumns\"","\"UpdateColumnDefs\"","\"UpdateColumnDefsAndApply\"","\"RenameColumns\"","\"CombineColumns\"","JsTypes","\"boolean\"","\"number\"","ErrorValue","toErrorString","OwidTableSlugs","\"EntityName\"","\"EntityColor\"","\"EntityId\"","\"EntityCode\"","\"Time\"","\"Date\"","ColumnTypeNames","\"NumberOrString\"","\"Numeric\"","\"String\"","\"Region\"","\"SeriesAnnotation\"","\"Categorical\"","\"Ordinal\"","\"Continent\"","\"Boolean\"","\"Currency\"","\"Percentage\"","\"RelativePercentage\"","\"DecimalPercentage\"","\"Integer\"","\"PercentChangeOverTime\"","\"Ratio\"","\"Color\"","\"PopulationDensity\"","\"Age\"","OwidEntityNameColumnDef","slug","OwidEntityIdColumnDef","OwidEntityCodeColumnDef","StandardOwidColumnDefs","SlideTemplate","\"Image\"","\"Chart\"","\"TwoCharts\"","\"Cover\"","\"Statement\"","\"Outline\"","SlideImageOnlySchema","template","title","largeText","hideLogo","blueBackground","variant","smallImage","SlideChartOnlySchema","subtitle","SlideCoverSchema","author","date","SlideStatementSchema","attribution","SlideContentsSchema","SlideTextSchema","SlideTwoChartsSchema","url1","url2","z.string","z.minLength","z.number","z.minimum","HIDE_IF_JS_ENABLED_CLASSNAME","HIDE_IF_JS_DISABLED_CLASSNAME","GRAPHER_PREVIEW_CLASS","MAILCHIMP_NEWSLETTER_LIST_ID","SENTRY_SESSION_STORAGE_KEY","SENTRY_SAMPLED_RATE_KEY","SUBSCRIBE_PAGE_ROOT_ID","OLD_SUBSCRIBE_PAGE_FORM_CONTAINER_ID","PREFERENCES_PAGE_ROOT_ID","ARCHIVE_DATE_TIME_FORMAT","logBinningStrategies","equalSizeBinningStrategies","automaticBinningStrategies","MediumVariantGridSlotKey","\"Single\"","\"Double\"","\"Triple\"","\"Quad\"","\"SmallLeft\"","\"SmallRight\"","LargeVariantGridSlotKey","\"Full\"","\"LeftQuad\"","\"RightQuad\"","\"RightQuadLeftColumn\"","\"TopRightCell\"","\"BottomRightCell\"","\"SingleCell\"","EventCategory","\"Filter\"","\"GrapherView\"","\"GrapherClick\"","\"GrapherHover\"","\"GrapherError\"","\"GrapherEntitySelector\"","\"ExplorerView\"","\"Expander\"","\"ExplorerCountrySelector\"","\"KeyboardShortcut\"","\"SiteClick\"","\"SiteError\"","\"SiteInstantSearchClick\"","\"SiteLatest\"","\"SiteLatestAnnouncementExpand\"","\"SiteLatestResultClick\"","\"SitePrint\"","\"SiteSearch\"","\"SiteSearchAutocompleteClick\"","\"SiteSearchResultClick\"","\"SiteFormSubmit\"","\"SiteFindInPage\"","\"DetailOnDemand\"","\"SiteGuidedChartLinkClick\"","\"SiteChartPreviewMouseover\"","\"SiteStaticVizDownload\"","\"SiteUserSurvey\"","\"TranslatePage\"","GrapherErrorAction","\"GrapherViewError\"","\"EntitiesNotFound\"","LATEST_TYPE_VALUES","ANNOUNCEMENT_LATEST_TYPES","LATEST_TYPE_LABELS","LATEST_PATH","LatestUrlParam","\"TOPICS\"","\"TYPE\"","DEFAULT_LATEST_STATE","topics","latestType","castSchemaOutput","OwidEnrichedGdocBlocksSchema","LinkedAttachmentsShape","linkedCharts","linkedDocuments","ImageAttachmentShape","imageMetadata","ChronologicalRecordBaseShape","objectID","excerpt","modifiedDate","authors","thumbnailUrl","PageChronologicalDataInsightRecordPayloadSchema","DataInsight","linkedAuthors","authorRoles","PageChronologicalArticleRecordPayloadSchema","Article","featuredImage","latestFeedFeaturedImage","latestFeedExcerpt","PageChronologicalAnnouncementRecordPayloadSchema","Announcement","PageChronologicalTopicPageRecordPayloadSchema","TopicPage","PageChronologicalLinearTopicPageRecordPayloadSchema","LinearTopicPage","ChartRecordType","\"MultiDimView\"","SearchIndexName","\"Pages\"","\"PagesChronological\"","\"ExplorerViewsMdimViewsAndCharts\"","FilterType","\"COUNTRY\"","\"TOPIC\"","\"QUERY\"","\"DATASET_PRODUCT\"","\"DATASET_NAMESPACE\"","\"DATASET_VERSION\"","\"DATASET_PRODUCER\"","SearchResultType","\"ALL\"","\"DATA\"","\"WRITING\"","SearchUrlParam","\"REQUIRE_ALL_COUNTRIES\"","\"RESULT_TYPE\"","SearchTopicType","\"Topic\"","\"Area\"","PointVector","magnitude","lhs","rhs","l2","i$7","CAMELCASE_REGEXP_PATTERN","dictionary","addedCharsCount","LOWERCASE_TRANSFORMER","fragments","separator","COMBINING_CHARS","CONVERT","CONVERT_CAMELCASE","camelCase","transformer","createFormatter","currency","getRootSVG","ownerSVGElement","getRelativeMouse","eventOwner","checkIsTouchEvent","targetTouches","changedTouches","svg","svgPoint","createSVGPoint","point","matrixTransform","getScreenCTM","inverse","getBoundingClientRect","clientLeft","top","clientTop","exposeInstanceOnWindow","component","alsoOnTopWindow","window","makeSafeForCSS","charCodeAt","slice","makeSafeForFigma","makeFigmaId","unsafeKeys","epochDate","lazy","epochTimestamp","valueOf","MS_PER_DAY","toStartOfDayUtc","startOf","convertDaysSinceEpochToDate","dayAsYear","Math","convertDateToDaysSinceEpoch","diffDatesInDays","plainUtcTimestamp","monthIndex","day","Date","setUTCFullYear","getTime","formatDay","getTimeInterval","display","timeInterval","Year","isSubYearly","interval","subYearly","findFinestCommonTimeInterval","intervals","finest","find","Week","Month","Quarter","Day","snapToIntervalStart","Number","isFinite","positiveModulo","daysSinceMonday","setUTCDate","month","getUTCMonth","setUTCMonth","Decade","formatYear","isNaN","abs","numberMagnitude","num","log10","normaliseToSingleDigitNumber","normalised","roundSigFig","sigfigs","excludeUndefined","excludeNull","excludeNullish","firstOfNonEmptyArray","Error","R","lastOfNonEmptyArray","nextIndex","domainExtent","numValues","scaleType","maxValueMultiplierForPadding","minValue","maxValue","filterValues","cagr","startValue","endValue","yearsElapsed","ratio","slugify","allowSlashes","slugifySameCase","subscriptMap","superscriptMap","normalizedStr","_guid","guid","roundForSvg","SVG_PRECISION","pointsToPath","points","sortedFindClosestIndex","endIndex","sortedFindClosest","isMobile","isTouchDevice","csvEscape","valueStr","trimObject","trimStringEmptyStrings","fetchText","fetchWithRetry","then","ok","statusText","fetchJson","timeoutMs","fetch","fetchWithTimeout","json","TimeoutError","abortController","AbortController","timeoutId","abort","signal","catch","finally","clearTimeout","getUserCountryInformation","_getUserCountryInformation","stripHTML","getRandomNumberGenerator","seed","semiRand","sin","sampleFrom","howMany","shuffleArray","clonedArr","replacerIndex","getIdealGridParams","containerAspectRatio","idealAspectRatio","rows","columns","initialColumns","sqrt","findClosestTimeIndex","timesAsc","tolerance","closestIndex","higherOrEqualVal","at","lowerVal","lowerDiff","higherDiff","isNegativeInfinity","timeBound","negativeInfinity","isPositiveInfinity","positiveInfinity","findClosestTime","es6mapValues","valuesAtTimes","valueByTime","targetTimes","sortNumeric","Array","valuesByEntityAtTimes","valueByEntityAndTime","aUtc","bUtc","getYearFromISOStringAndDayOffset","epoch","daysOffset","sleep","ms","fetchOptions","retryOptions","retryPromise","defaultRetryOptions","maxRetries","exponentialBackoff","initialDelay","getOwidDataFetchUserAgent","promiseGetter","retried","lastError","parseIntOrUndefined","parseInt","parseFloatOrUndefined","parseFloat","anyToString","String","isDocumentElement","documentElement","scrollTo","scrollTop","scrollIntoViewIfNeeded","containerEl","focusedEl","menuRect","focusedRect","overScroll","offsetHeight","bottom","offsetTop","clientHeight","scrollHeight","rollingMap","keyMap","accessor","intersectionOfSets","sets","reduce","arrs","sortByUndefinedLast","order","asc","sorted","mapped","mapNullToUndefined","isAbbreviation","word","lowerCaseFirstLetterUnlessAbbreviation","sortByFn","sortOrder","getClosestTimePairs","sortedTimesA","sortedTimesB","maxDiff","decidedPairs","undecidedPairs","indexB","indexA","timeA","closestIndexInB","lowCandidateIndexB","highCandidateIndexB","seenTimes","flat","omitUndefinedValues","isInIFrame","openLinkInNewTabAttrs","openInNewTab","rel","differenceObj","defaultObj","findDOMParent","parentElement","textAnchorFromAlign","dyFromAlign","middle","stringifyUnknownError","toISOString","JSON","stringify","removeAllWhitespace","formatDate","toLocaleDateString","deserializeOwidGdocPageData","createdAt","publishedAt","updatedAt","canWriteToClipboard","permissions","copyToClipboard","useModernClipboardApi","clipboard","writeText","textarea","opacity","appendChild","select","execCommand","removeChild","imemo","configurable","enumerable","writable","addInitializer","boundMethod","spansToUnformattedPlainText","with","spanType","exhaustive","getResearchAndWritingId","heading","CASE_PRESERVED_PHRASES","phrase","toSentenceCase","capitalizeFirstWord","sentenceCaseIfNotTopicPage","gdocType","topicPageTitleHeadings","keyCharts","featuredData","dataInsights","researchAndWriting","countryProfiles","relatedTopics","getTopicPageHeading","groupTocIntoSections","headings","sections","currentIsH1Section","isSubheading","subheadings","isArrayOfNumbers","every","greatestCommonDivisor","findGreatestCommonDivisorOfArray","withUniformSpacing","gcd","deltas","detailOnDemandRegex","guidedChartRegex","extractDetailsFromSyntax","matchAll","RegExp","deriveAnnouncementLatestType","kicker","commafyFormatter","Intl","NumberFormat","commafyNumber","isFiniteWithGuard","getAllChildrenOfArea","area","flattenNonTopicNodes","tagGraph","flattenNodes","flatMap","isSearchable","formatInlineList","connector","oxfordComma","formatAuthors","formatAuthorsForBibtex","hasRun","_value","isArrayDifferentFromReference","referenceArray","readFromAssetMap","assetMap","assetValue","getUserNavigatorLanguages","languages","language","getUserNavigatorLanguagesNonEnglish","lang","startsWith","objects","calculateTrendDirection","formatValue","stripOuterParentheses","getDisplayUnit","allowTrivial","isTrivial","shortUnit","dimensionsToViewId","dimensions","keyA","keyB","localeCompare","parseArchivalDate","dateInput","formatAsArchivalDate","formatDateForCitation","getPhraseForArchivalDate","archivalDate","parsedDate","getOriginAttributionLabel","yearPublished","getOriginAttributions","origins","label","getAttributionFragmentsFromVariable","variable","originAttributions","_.uniq","_.compact","getAttributionFragmentsFromBespokeMetadata","formatAttributions","attributions","formatAttributionsShortened","getETLPathComponents","channel","producer","indicator","isFullDate","getLastUpdatedFromVariable","_.max","getNextUpdateFromVariable","lastUpdated","nextUpdate","scheduledUpdate","OWID_ATTRIBUTION","getPhraseForProcessingLevel","processingLevel","isOwidTheSoleAttribution","getProcessingPhraseForAttribution","owidProcessingLevel","prepareOriginForDisplay","prepareSourcesForDisplay","sourcesForDisplay","getAttributionWithProcessing","processingPhrase","getCitationShort","getCitationLong","citationTitleFragments","attributionWithProcessing","titleWithFragments","indicatorTitle","originCitations","versionProducer","today","archivalPhrase","citationUrl","getCitationDatapage","currentYear","producers","adaptedFrom","primaryTopicCitation","primaryTopic","getIndicatorCitations","formatSourceDate","getDateRange","timespan","firstYearString","lastYearString","firstYear","lastYear","formattedFirstYear","formattedLastYear","DEFAULT_ABBREVIATION_THRESHOLD","checkIsVeryShortUnit","checkIsUnitCurrency","checkIsUnitPercent","getTrim","roundingMode","numberAbbreviation","trailingZeroes","getSign","showPlus","getSymbol","getType","defaultThreshold","numSignificantFigures","roundedMagnitude","abbreviationThreshold","getRoundedMagnitude","numDecimalPlaces","getEffectiveRoundingMode","getPrecision","abbreviationSignificantFigures","replaceSIPrefixes","prefixMap","postprocessString","effectiveRoundingMode","sigFigCapApplied","tooSmallThreshold","appendage","spaceBeforeUnit","useNoBreakSpace","formatter","effectiveNumDecimalPlaces","SERVER_SIDE_DOWNLOAD_HELP_TEXT","triggerDownloadFromBlob","objectUrl","blob","triggerDownloadFromUrl","downloadLink","makeDownloadCodeExamples","csvUrl","metadataUrl","makeNumberOfRowsSnippet","numRows","makeFullDownloadDescription","makeFilteredDownloadDescription","visibleIn","hasAnInfinity","formatTimeBound","parseTimeBound","fromJSON","R.isString","toJSON","bound","minTimeBoundFromJSONOrNegativeInfinity","minTime","maxTimeBoundFromJSONOrPositiveInfinity","maxTime","minTimeToJSON","maxTimeToJSON","reISODateComponent","reISODate","timeBoundToTimeBoundString","isDate","parseTimeURIComponent","upgradeLegacyTimeString","getTimeDomainFromQueryString","reIntComponent","reIntRange","reDateRange","timebound","regions","REGION_NAME_SUFFIX_RE","REGION_SET_BACKFILLS","checkIsCountry","checkIsAggregate","checkIsOwidContinent","checkIsIncomeGroup","checkHasMembers","checkIsOwidIncomeGroupCode","getIncomeGroups","incomeGroup","code","countries","entity","mappableCountries","getContinents","getAggregates","listedRegionsNames","getAggregatesWithPublisher","getRegionPublishers","parseRegionNameSuffix","rawName","toPublisherLookupKey","aggregatesWithPublisherByName","_.keyBy","getAggregatesInRegionSet","direct","regionSet","backfill","regionsByName","regionsByCode","regionsByShortName","regionsByNameOrVariantNameLowercase","countriesByName","getRegionByName","getRegionByCode","getRegionByShortName","shortName","getRegionByNameOrVariantName","nameOrVariantName","parentRegions","memberCode","subRegion","getParentRegions","regionName","getContinentForCountry","countryName","getCountryNamesForRegionRecursive","countryNames","getCountryNamesForRegion","_IntlDisplayNamesInstances","getRegionTranslation","languageCode","regionCode","_regionAlternativeNames","getRegionAlternativeNames","translationCodes","shortCode","codes","translation","undef","decode","querystring","querystringify","required","require_requires_port","qs","require_querystringify","controlOrWhitespace","CRHTLF","slashes","protocolre","windowsDriveLetter","trimLeft","isSpecial","address","lolcation","location","finaldestination","loc","Url","scheme","extractProtocol","forwardSlashes","otherSlashes","slashesCount","relative","unshift","extracted","instruction","instructions","ins","strToQueryParams","queryStr","strToEncodedQueryParams","safeDecodeURIComponent","queryParamsToStr","newQueryStr","getWindowQueryStr","setWindowQueryStr","urlParseLib","ensureStartsWith","ensureQueryStrFormat","ensureHashFormat","fromURL","pathname","hash","fromQueryStr","fromQueryParams","queryParams","pop","originAndPath","strings","fullUrlNoTrailingSlash","encodedQueryParams","isGoogleDoc","isGrapher","isDod","isGuidedChart","isUpload","isExplorer","update","setQueryParams","updateQueryParams","areQueryParamsEqual","otherUrl","thisParams","otherParams","setWindowUrl","history","replaceState","getWindowUrl","makeLinkedCalloutKey","findYDataPoint","columnSlug","dp","yValues","getCalloutValue","functionName","parameters","FontFamily","\"Lato\"","\"PlayfairDisplay\"","cssFontFamily","fontFamily","widthsMap","Lato","G","J","X","Z","µ","º","PlayfairDisplay","getPixelWidth","settings","font","bold","italic","fontVariants","charWidths","totalWidth","Bounds","bbox","x1","p1","p2","x2","y1","y2","boundsList","isBold","fontWeight","fontSize","bounds","isItalic","radius","amount","_.isNumber","_.mapValues","scale","otherBounds","gridParams","contentWidth","columnPadding","outerPadding","contentHeight","rowPadding","boxWidth","boxHeight","hasCell","row","_.range","cellEdges","cx","cy","die","mockGlobal","getGlobal","objectPrototype","EMPTY_ARRAY","EMPTY_OBJECT","hasProxy","plainObjectString","assertProxies","once","invoked","isStringish","protoConstructor","isGenerator","addHiddenProp","addHiddenFinalProp","createInstanceofPredicate","isES6Map","thing","isPlainES6Map","mapProto","isES6Set","hasGetOwnPropertySymbols","getPlainObjectKeys","symbols","getOwnPropertyDescriptors","ownKeys$29","getFlag","setFlag","_arrayLikeToArray","_construct","_isNativeReflectConstruct","_setPrototypeOf","_defineProperties","_toPropertyKey","_createClass","_createForOfIteratorHelperLoose","_unsupportedIterableToArray","_extends","_getPrototypeOf","_inheritsLoose","_isNativeFunction","_toPrimitive","_wrapNativeSuper","Wrapper","storedAnnotationsSymbol","createDecoratorAnnotation","decorator","is20223Decorator","annotation","storeAnnotation","isOverride","collectStoredAnnotations","\"kind\"","$mobx","Atom","name_","IDerivationState_","_proto","reportObserved","startBatch","propagateChanged","endBatch","isAtom","createAtom","onBecomeObservedHandler","onBecomeUnobservedHandler","atom","onBecomeObserved","onBecomeUnobserved","identityComparer","structuralComparer","deepEqual","shallowComparer","defaultComparer","deepEnhancer","isObservable","observable","isAction","isFlow","flow","autoAction","shallowEnhancer","isObservableObject","isObservableArray","isObservableMap","isObservableSet","referenceEnhancer","refStructEnhancer","oldValue","OVERRIDE","createActionAnnotation","make_$1","extend_$1","decorate_20223_$1","_this$options_","adm","createActionDescriptor","actionDescriptor","proxyTrap","ann","_createAction","createAction","_ann$options_3","mthd","initMthd","_this$options_2","assertActionDescriptor","_ref","_ref2","_annotation$options_","_annotation$options_4","safeDescriptors","globalState","createFlowAnnotation","make_$2","extend_$2","decorate_20223_$2","createFlowDescriptor","flowDescriptor","_this$options_3","assertFlowDescriptor","createComputedAnnotation","make_$3","extend_$3","decorate_20223_$3","assertComputedDescriptor","asObservableObject","ComputedValue","createObservableAnnotation","make_$4","extend_$4","decorate_20223_$4","assertObservableDescriptor","initializedObjects","initializeObservable","ObservableValue","AUTO","autoAnnotation","createAutoAnnotation","make_$5","extend_$5","decorate_20223_$5","_this$options_4","observableAnnotation","_this$options_5","OBSERVABLE","OBSERVABLE_REF","OBSERVABLE_SHALLOW","OBSERVABLE_STRUCT","defaultCreateObservableOptions","asCreateObservableOptions","observableRefAnnotation","observableShallowAnnotation","observableStructAnnotation","observableDecoratorAnnotation","getEnhancerFromOptions","getEnhancerFromAnnotation","getAnnotationFromOptions","createObservable","arg2","arg3","assign$1","createLegacyArray","createObservableArray","initialValues","ObservableMap","ObservableSet","initObservable","extendObservable","asDynamicObservableObject","decorators","COMPUTED","COMPUTED_STRUCT","computedAnnotation","computedStructAnnotation","arg1","currentActionId","nextActionId","isFunctionNameConfigurable","tmpNameDescriptor","executeAction","actionName","runInfo","_startAction","canRunAsDerivation","_endAction","notifySpy_","startTime_","prevDerivation_","runAsAction","prevAllowStateChanges_","untrackedStart","allowStateChangesStart","prevAllowStateReads_","allowStateReadsStart","allowStateChangesEnd","allowStateReadsEnd","untrackedEnd","allowStateChanges","prev","_this","notifySpy","equals","_Atom","enhancer","hasInterceptors","change","interceptChange","UPDATE","hasListeners","notifyListeners","registerInterceptor","fireImmediately","registerListener","isObservableValue","CaughtException","TraceMode","propagateMaybeChanged","shouldCompute","prevTrackingContext","propagateChangeConfirmed","isCaughtException","wasSuspended","track","trackDerivedFunction","clearObserving","firstTime","prevValue","autorun","prevU","isComputedValue","\"NOT_TRACKING_\"","\"UP_TO_DATE_\"","\"POSSIBLY_STALE_\"","\"STALE_\"","\"NONE\"","\"LOG\"","\"BREAK\"","derivation","prevAllowStateReads","prevUntracked","obs","changeDependenciesStateTo0","prevTracking","bindDependencies","prevObserving","observing","lowestNewObservingDerivationState","dep","_dep","removeObserver","_dep2","addObserver","untracked","allowStateReads","MobXGlobals","canMergeGlobalState","isolateCalled","global","isolateGlobalState","queueForUnobservation","runReactions","Reaction","onInvalidate_","errorHandler_","requiresObservable_","prevReaction","_this2","dispose","abortSignal","enterBreakPoint","MAX_REACTION_ITERATIONS","reactionScheduler","runReactionsHelper","allReactions","iterations","remainingReactions","isReaction","setReactionScheduler","baseScheduler","isSpyEnabled","spy","ACTION","ACTION_BOUND","AUTOACTION","AUTOACTION_BOUND","DEFAULT_ACTION_NAME","actionAnnotation","actionBoundAnnotation","autoActionAnnotation","autoActionBoundAnnotation","createActionFactory","runInAction","_opts2","runSync","reaction","reactionRunner","scheduler","createSchedulerFromOptions","isScheduled","view","run","_opts4","effectAction","wrapErrorHandler","effect","nextValue","expression","baseFn","ON_BECOME_OBSERVED","ON_BECOME_UNOBSERVED","interceptHook","getAtom","listenersKey","hookListeners","NEVER","ALWAYS","OBSERVED","configure","useProxies","enforceActions","ea","annotations","getDependencyTree","nodeToDependencyTree","unique","generatorId","FlowCancellationError","_Error","flowAnnotation","flowBoundAnnotation","generator","runId","gen","rejector","pendingPromise","promise","stepId","onFulfilled","ret","onRejected","\"throw\"","cancelPromise","_res","yieldedPromise","_isObservable","apiOwnKeys","toJSHelper","__alreadySeen","_res2","_res3","toJS","when","whenPromise","_when","timeoutHandle","disposer","_opts$signal","_opts$signal2","\"finally\"","_opts$signal3","getAdm","objectProxyTraps","_target$$mobx","interceptable","interceptors","listenable","makeObservable","SPLICE","MAX_SPLICE_SIZE","arrayTraps","arrayExtensions","ObservableArrayAdministration","owned_","legacyMode_","newV","oldV","newLength","currentLength","newItems","oldLength","reserveArrayBuffer","lengthDelta","_this$values_","oldItems","_i","notify","removed","added","owned","proxy","copy","addArrayExtension","simpleFunc","mapLikeFunc","reduceLikeFunc","funcName","funcFactory","dehancedValues","_this3","currentValue","isObservableArrayAdministration","ObservableMapMarker","ADD","DELETE","enhancer_","initialData","newEntry","hasKey","_change","_this3$hasMap_$get","_this4","_this4$hasMap_$get","makeIterableForMap","_keys$next","_keys$next2","_iterator","_step","_step$value","_this5","_this6","_iterator2","_step2","_this7","replacementMap","convertToMap","orderedData","keysReportChangedCalled","_iterator3","_step3","_iterator4","_step4","_step4$value","keyExisted","_value2","iter1","iter2","next1","next2","makeIterable","dataStructure","ObservableSetMarker","callbackFn","_change2","makeIterableForSet","_values$next","_values$next2","otherSet","descriptorCache","REMOVE","ObservableObjectAdministration","values_","defaultAnnotation_","target_","_this$target_$storedA","outcome","recordAnnotationApplied","deleteOutcome","cachedDescriptor","getCachedObservablePropDescriptor","_this$pendingKeys_","_this$pendingKeys_2","isObservableObjectAdministration","_adm$target_$storedAn","ENTRY_0","createArrayEntryDescriptor","safariPrototypeSetterInheritanceBug","OBSERVABLE_ARRAY_BUFFER_SIZE","StubArray","inherit","LegacyObservableArray","_StubArray","createArrayBufferItem","getDebugName","_observable","getAdministration","named","unwrap","areArrays","aCtor","bCtor","aStack","bStack","_length","maybeIteratorPrototype","getSelf","objectWithPersistablesToObject","objWithPersistables","keysSet","keysToSerialize","valIsPersistable","updatePersistables","currentVal","currentValIsPersistableObject","newVal","deleteRuntimeAndUnchangedProps","changedObj","defaultObject","defaultKeys","_.isEqual","OwidVariableDisplayConfigDefaults","OwidVariableDisplayConfig","getPrefixedGdocPath","gdoc","performUrlMigrations","migrations","migration","titleCase","subWord","removeDiacritics","jsonCommentDelimiter","deserializeJSONFromHTML","PromiseCache","createPromiseFromKey","PromiseSwitcher","LARGEST_IMAGE_WIDTH","getArchivalSizes","originalWidth","widths","getSizes","generateSrcSet","sizes","absoluteUrl","appendImageSizeSuffix","extIndex","generateArchivalSrcSet","generateSourceProps","buildProps","srcSet","regularImage","auto","basePlacements","clippingParents","viewport","popper","reference","variationPlacements","placement","placements","modifierPhases","getNodeName","getWindow","ownerDocument","isHTMLElement","applyStyles","initialStyles","applyStyles_default","getBasePlacement","includeScale","scaleX","scaleY","offsetWidth","getLayoutRect","clientRect","contains","rootNode","getComputedStyle","isTableElement","getDocumentElement","getParentNode","getTrueOffsetParent","getContainingBlock","isFirefox","currentNode","css","getOffsetParent","offsetParent","getMainAxisFromPlacement","within","mathMax","mathMin","withinMaxClamp","getFreshSideObject","mergePaddingObject","paddingObject","expandToHashMap","hashMap","toPaddingObject","arrow","_state$modifiersData$","arrowElement","popperOffsets","basePlacement","axis","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","axisProp","_options$element","arrow_default","getVariation","unsetSides","roundOffsetsByDPR","dpr","mapToStyles","_Object$assign2","popperRect","variation","offsets","gpuAcceleration","adaptive","roundOffsets","isFixed","_offsets$x","_offsets$y","_ref3","hasX","hasY","sideX","sideY","heightProp","widthProp","offsetY","offsetX","commonStyles","_ref4","_Object$assign","computeStyles","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","computeStyles_default","passive","instance","_options$scroll","scroll","_options$resize","resize","scrollParents","scrollParent","eventListeners_default","getOppositePlacement","matched","getOppositeVariationPlacement","getWindowScrollBarX","getViewportRect","visualViewport","getDocumentRect","winScroll","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","getScrollParent","listScrollParents","isBody","updatedList","rectToClientRect","getInnerBoundingClientRect","getClientRectFromMixedType","clippingParent","getClippingParents","clipperElement","getClippingRect","mainClippingParents","boundary","rootBoundary","firstClippingParent","clippingRect","accRect","computeOffsets","commonX","commonY","mainAxis","detectOverflow","_options$placement","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","computeAutoPlacement","flipVariations","_options$allowedAutoP","allowedAutoPlacements","allPlacements","allowedPlacements","overflows","getExpandedFallbackPlacements","oppositePlacement","flip","_options$mainAxis","checkMainAxis","_options$altAxis","checkAltAxis","specifiedFallbackPlacements","_options$flipVariatio","preferredPlacement","isBasePlacement","fallbackPlacements","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","numberOfChecks","_loop","fittingPlacement","flip_default","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","hide_default","distanceAndSkiddingToXY","invertDistance","rects","skidding","_options$offset","_data$state$placement","offset_default","popperOffsets_default","getAltAxis","preventOverflow","_options$tether","tether","_options$tetherOffset","tetherOffset","altAxis","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","_mainSide","_altSide","_offset","_len","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","preventOverflow_default","getHTMLElementScroll","getNodeScroll","isElementScaled","getCompositeRect","isOffsetParentAnElement","offsetParentIsScaled","elementOrVirtualElement","visited","modifiers","modifier","depModifier","orderModifiers","orderedModifiers","phase","mergeByName","existing","DEFAULT_OPTIONS","areValidElements","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","effectCleanupFns","isDestroyed","setOptionsAction","cleanupModifierEffects","runModifierEffects","_state$elements","_state$orderedModifie","_state$orderedModifie2","_ref3$options","cleanupFn","createPopper","eventListeners","BOX_CLASS","CONTENT_CLASS","BACKDROP_CLASS","ARROW_CLASS","SVG_ARROW_CLASS","TOUCH_OPTIONS","TIPPY_DEFAULT_APPEND_TO","getValueAtIndexOrReturn","invokeWithArgsOrReturn","splitBySpaces","normalizeToArray","pushIfUnique","arrayFrom","removeUndefinedProps","div","isNodeList","isMouseEvent","isReferenceElement","getArrayOfElements","setTransitionDuration","els","setVisibilityState","getOwnerDocument","_element$ownerDocumen","elementOrElements","isCursorOutsideInteractiveBorder","popperTreeData","popperState","interactiveBorder","topDistance","bottomDistance","leftDistance","rightDistance","exceedsTop","exceedsBottom","exceedsLeft","exceedsRight","updateTransitionEndListener","box","actualContains","currentInput","lastMouseMoveTime","onDocumentTouchStart","onDocumentMouseMove","onWindowBlur","activeElement","bindGlobalEventListeners","isIE11","defaultProps","setDefaultProps","partialProps","getExtendedPassedProps","pluginProps","passedProps","getDataAttributeProps","valueAsString","evaluateProps","innerHTML","dangerouslySetInnerHTML","createArrowElement","setContent","getChildren","boxChildren","render","onUpdate","_getChildren","nextProps","prevProps","idCounter","mouseMoveListeners","mountedInstances","createTippy","showTimeout","hideTimeout","scheduleHideAnimationFrame","isVisibleFromClick","didHideDueToDocumentMouseDown","didTouchMove","ignoreOnFirstUpdate","lastTriggerEvent","currentTransitionEndListener","onFirstUpdate","debouncedOnMouseMove","onMouseMove","currentTarget","popperInstance","_props$render","pluginsHooks","hasAriaExpanded","addListeners","handleAriaExpandedAttribute","handleStyles","invokeHook","scheduleShow","getDocument","getNormalizedTouchSettings","touch","getIsCustomTouchBehavior","getIsDefaultRenderFn","_instance$props$rende","getCurrentTarget","getDefaultTemplateChildren","getDelay","fromHide","shouldInvokePropsHook","pluginHooks","_instance$props","handleAriaContentAttribute","aria","cleanupInteractiveMouseListeners","onDocumentPress","actualTarget","removeDocumentPress","onTouchMove","onTouchStart","addDocumentPress","onTransitionedOut","onTransitionEnd","onTransitionedIn","onTrigger","onMouseLeave","onBlurOrFocusOut","removeListeners","shouldScheduleClickHide","isEventListenerStopped","wasFocused","scheduleHide","isCursorOverReferenceOrPopper","getNestedPopperTree","createPopperInstance","destroyPopperInstance","_instance$props2","popperOptions","getReferenceClientRect","moveTransition","computedReference","mount","appendTo","_getNormalizedTouchSe","touchValue","touchDelay","clearDelayTimeouts","setProps","nestedPopper","show","isAlreadyVisible","isDisabled","isTouchAndTouchDisabled","_getDefaultTemplateCh2","_instance$popperInsta2","_getDefaultTemplateCh3","_box","_content","isAlreadyHidden","_getDefaultTemplateCh4","hideWithInteractivity","unmount","destroy","tippy","optionalProps","instances","targets","hideAll","_temp","excludedReferenceOrInstance","isExcluded","originalDuration","React","require_react","formatProdErrorMessage","REACT_RECOVERABLE_TYPE","REACT_OPTIMISTIC_KEY","createPortal$1","getCrossOriginStringAs","as","container","previousTransition","previousUpdatePriority","crossOrigin","integrity","fetchPriority","form","checkDCE","require_react_dom_production","_objectWithoutPropertiesLoose","sourceKeys","preserveRef","ssrSafeCreateDiv","toDataAttributes","dataAttrs","uniqueByShape","outputItem","deepPreserveProps","componentProps","instanceProps","useIsomorphicLayoutEffect","useLayoutEffect","useEffect","useMutableBox","useRef","updateClassName","classNames","classNamePlugin","isDefaultRenderFn","TippyGenerator","Tippy","visible","singleton","_ref$disabled","disabled","_ref$ignoreAttributes","ignoreAttributes","restOfNativeProps","isControlledMode","isSingletonMode","_useState","useState","mounted","setMounted","_useState2","setAttrs","_useState3","singletonContent","setSingletonContent","mutableBox","computedProps","useIsomorphicLayoutEffect$4","_instance$popperInsta","hideData","import_react_dom","jsxProd","maybeKey","require_react_jsx_runtime_production","tippyProps","_jsx","LazyTippy","OriginalTippy","theme","lazyPlugin","reTrim","IS_SERVER2","useMediaQuery","getMatches","query2","setMatches","initializeWithValue","handleChange","useIsomorphicLayoutEffect$3","matchMedia","useUnmount","funcRef","useDebounceCallback","debouncedFunc","useMemo","debouncedFuncInstance","wrappedFunc","useDebounceValue","unwrappedInitialValue","debouncedValue","setDebouncedValue","previousValueRef","updateDebouncedValue","useIntersectionObserver","setRef","setState","initialIsIntersecting","callbackRef","onChange","frozen","freezeOnceVisible","unobserve","thresholds","isIntersecting","threshold2","rootMargin","prevRef","useIsClient","isClient","setClient","useIsMounted","isMounted","useCallback","initialSize","useResizeObserver","setSize","previousSize","onResize","boxProp","newWidth","extractSize","newHeight","newSize","sizeType","useTimeout","savedCallback","useSpinDelay","resolvedOptions","isSsr","loading","CURRENCY_SYMBOLS","GBP","EUR","USD","getCurrencySymbol","SUPPORTED_CURRENCY_CODES","MAX_DONATION_AMOUNT","PLEASE_GET_IN_TOUCH","PLEASE_TRY_AGAIN","getErrorMessageDonation","donation","showOnList","isAndroid","isIOS","KEYS_EXCLUDED_FROM_INHERITANCE","mergeGrapherConfigs","grapherConfigs","configsToMerge","_.isEmpty","configsWithoutSchema","\"$schema\"","configsJson","uniqueSchemas","_.omit","MultiDimDataPageConfig","fromJson","jsonString","fromObject","getEnrichedChoicesFields","choices","choicesBySlug","choicesByGroup","dimensionsEnriched","filterViewsByDimensions","views","dimensionSlug","choiceSlug","findViewByDimensions","matchingViews","filterToAvailableChoices","selectedChoices","updatedSelectedChoices","dimensionsWithAvailableChoices","currentDimSlug","currentDim","availableViewsBeforeSelection","availableViewsAfterSelection","availableChoicesForDimension","choice","getDefaultSelectedChoices","getDefaultView","mergeViewMetadata","variableMetadata","mdimConfigView","descriptionKey","findViewDimensionsByConfigId","viewConfigId","fullConfigId","viewToDimensionsConfig","indicators","color","getMultiDimPageTitle","extractMultiDimChoicesFromSearchParams","searchParams","dimensionChoices","UMD","\"fuzzysort\"","this$4","single","search","NULL","preparedSearch","getPreparedSearch","isPrepared","getPrepared","searchBitflags","algorithm","go","all","noResults","containsSpace","denormalizeScore","resultsLen","limitedCount","targetsLen","push_result","keysLen","keysBitflags","keyI","noTarget","NEGATIVE_INFINITY","tmpTargets","tmpResults","allowPartialMatchScores","keysSpacesBestScores","tmp","hasAtLeast1Match","objResults","KeysResult","score","results","highlight","open","targetLen","indexes","highlighted","matchI","indexesI","opened","close","prepare","prepareLowerInfo","new_result","preparedCache","preparedSearchCache","\"indexes\"","\"highlight\"","\"score\"","normalizeScore","\"target\"","\"obj\"","normalizedScore","prepareSearch","spaceSearches","searches","_info","targetPrepared","searchPrepared","allowSpaces","algorithmSpaces","allowPartialMatch","searchLower","searchLowerCodes","searchLowerCode","targetLowerCodes","searchLen","searchI","targetI","matchesSimpleLen","isMatch","successStrict","matchesStrictLen","nextBeginningIndexes","prepareNextBeginningIndexes","matchesSimple","backtrackCount","lastMatch","matchesStrict","substringIndex","isSubstring","isSubstringBeginning","calculateScore","extraMatchGroupCount","unmatchedDistance","uniqueBeginningIndexes","matchesBest","seen_indexes","first_seen_index_last_search","searchesLen","changeslen","resetNextBeginningIndexes","nextBeginningIndexesChanges","indexesIsConsecutiveSubstring","newBeginningIndex","toReplace","allowSpacesResult","remove_accents","strLen","lowerCodes","bitflags","lowerCode","bit","prepareBeginningIndexes","beginningIndexes","beginningIndexesLen","wasUpper","wasAlphanum","targetCode","isUpper","isAlphanum","isBeginning","lastIsBeginning","lastIsBeginningI","segs","\"single\"","\"go\"","\"prepare\"","\"cleanup\"","FuzzySearch","rawStrings","datamap","fuzzysort","uniqByFn","_.groupBy","keyFn","keysFn","_.uniqBy","DATA_PAGE_METADATA_EXPERIMENT_ID","DATA_PAGE_METADATA_EXPERIMENT_TREATMENT_ARM","DATA_PAGE_METADATA_V2_EXPERIMENT_ID","LATEST_STICKY_FILTERS_EXPERIMENT_ID","LATEST_STICKY_FILTERS_ARMS","validateUniqueStrings","DEFAULT_COOKIE_EXPIRY","Experiment","expires","arms","asExperimentId","asArmId","fraction","validate","validateArmFractions","validateUniqueArmIds","validateArmIdLengths","total","arm","getArmById","isUrlInPaths","endsWith","allowedPattern","experiments","isUrlInActiveExperiment","rawId","exp","isDataPageMetadataRedesignActive","stringifyAttribute","stringifyAttributes","milliseconds","encode","cookies","cookieString","cookie","getAll","defaultExperimentState","getExperimentState","activeExperiments","activeExperimentMap","assignedExperiments","getAssignedExperiments","currentPath","expId","armId","isPageInExperiment","experiment","allCookies","getAllCookies","fromEntries","cookieName","filteredCookies","buildChartHitDataDisplayProps","chartInfo","showTimeRange","chartType","endDatapoint","findDatapoint","startDatapoint","columnInfo","xSlug","xColumnInfo","isEntityPickedByUser","yDims","historicalDims","dim","getTableColumnCountForGridSlotKey","slot","MAX_FACET_VALUES","getFilterNamesOfType","filters","setToFacetFilters","facetSet","formatDisjunctiveFacetFilters","facets","formatConjunctiveFacetFilters","formatFeaturedMetricFacetFilter","formatCountryFacetFilters","facetFilters","requireAllCountries","formatTopicFacetFilters","buildChartsFacetFilters","countryFacetFilters","topicFacetFilters","fmFacetFilter","searchSingleForHits","liteSearchClient","DISTINCTIVE_SINGLE_WORD_MAX_HITS","searchSingleForHitsWithClosestMatches","primary","isFirstPage","hasQuery","relaxed","getWords","hit","topWords","tier","TOPIC_PAGE_TYPES","TOPIC_PAGE_TYPE_FILTER","rankTopicsOfChartHits","areaNames","slugByTopicName","collectTopics","scores","hits","rank","searchTopicPagesOfMatchingCharts","searchCharts","chartsResponse","rankedTopics","topic","pagesResponse","hitBySlug","orderedHits","recommendTopicPages","QUERY_ATTRIBUTES","isRecord","hasOnlyEmptyQueryAttributes","isEmptyQuerySearchRequest","isEmptyQuerySearchPayload","requests","placeGrapherTabsInMediumVariantGridLayout","placedMainTabs","assignTabsToGridSlotKeys","tabs","placedRemainingTabs","tabIndex","placeTabsInUniformGrid","_.sumBy","slotKey","maxNumTabs","numCharts","numAvailableSlotsForTable","numSlotsForTable","numNeededSlotsForTable","tableSlot","getGridSlotKeyForCount","slotCount","SENTRY_DATA_COLLECTION","ENV","COMMIT_SHA","SENTRY_DSN","BAKED_BASE_URL","ARCHIVE_BASE_URL","BAKED_GRAPHER_URL","GRAPHER_DYNAMIC_THUMBNAIL_URL","EXPLORER_DYNAMIC_THUMBNAIL_URL","GRAPHER_DYNAMIC_CONFIG_URL","MULTI_DIM_DYNAMIC_CONFIG_URL","ADMIN_BASE_URL","DATA_API_URL","CATALOG_URL","ALGOLIA_ID","ALGOLIA_SEARCH_KEY","ALGOLIA_CACHED_QUERIES_URL","CLOUDFLARE_IMAGES_URL","DONATE_API_URL","EMAIL_NOTIFICATIONS_API_BASE_URL","TURNSTILE_SITE_KEY","Features","featureFlagsRaw","FEATURE_FLAGS","IS_RUNNING_INSIDE_VITEST","BESPOKE_BASE_URL","BESPOKE_DATA_URL","LOAD_SENTRY","PreferenceType","\"Analytics\"","\"Marketing\"","Action","\"Accept\"","\"TogglePreference\"","\"Reset\"","\"Persist\"","\"Reject\"","POLICY_DATE","DATE_FORMAT","COOKIE_PREFERENCES_COOKIE_NAME","defaultState","preferences","getInitialState","cookieValue","parseRawCookieValue","getCookie","arePreferencesOutdated","preferencesRaw","dateRaw","DATE_SEPARATOR","parseDate","parsePreferences","PREFERENCES_SEPARATOR","preference","isValidPreference","isValid","getPreferenceValue","updatePreference","preferencesDate","policyDate","serializeState","serializedPreferences","getTodayDate","maybeSampleSession","allowRecording","stopSessionRecording","isSessionRecording","lastSampleRate","getSessionLastSampleRate","hasSessionBeenRecorded","setSessionLastSampleRate","random","startSessionRecording","hasSessionBeenSampled","getSentrySessionStorage","replaySession","Sentry","getReplayId","Analytics","analyticsConsent","getSessionSampleRate","parseExperimentsSampleRate","expSentrySampleRates","raw","sessionStorage","getItem","removeItem","setItem","isSentryInitialized","updateSentryTags","updateSentryReferrerTag","updateSentryExperimentTags","setSentryTagsAndAttributes","experimentState","updateSentryUser","clientId","extractGaClientIdFromCookie","gaCookie","URL","init$2","Sentry.browserTracingIntegration","Sentry.replayIntegration","heap","parentIndex","peek","halfLength","leftIndex","rightIndex","diff","localPerformance","localDate","taskQueue","timerQueue","taskIdCounter","currentTask","currentPriorityLevel","isPerformingWork","isHostCallbackScheduled","isHostTimeoutScheduled","needsPaint","localSetTimeout","localClearTimeout","localSetImmediate","advanceTimers","currentTime","handleTimeout","isMessageLoopRunning","schedulePerformWorkUntilDeadline","firstTimer","requestHostTimeout","taskTimeoutID","frameInterval","shouldYieldToHost","performWorkUntilDeadline","hasMoreWork","previousPriorityLevel","continuationCallback","fps","priorityLevel","parentPriorityLevel","require_scheduler_production","Scheduler","require_scheduler","ReactDOM","require_react_dom","isValidContainer","getNearestMountedFiber","fiber","nextNode","getSuspenseInstanceFromFiber","suspenseState","getActivityInstanceFromFiber","activityState","assertIsMounted","findCurrentFiberUsingSlowPath","alternate","parentA","parentB","didFindChild","child$0","findCurrentHostFiberImpl","traverseVisibleInstancesAndTextInstances","searchWithinHosts","getFragmentParentInstanceOrContainerFiber","fiberIsPortaledIntoHost","foundPortalParent","getFragmentInstanceOrTextInstanceSiblings","parentHostFiber","findFragmentInstanceOrTextInstanceSiblings","getInstanceFromHostFiber","searchTarget","searchBoundary","isFiberPrecedingCheck","isFiberFollowingCheck","getParentForFragmentAncestors","getLowestCommonAncestor","depthA","tempA","instA","getParent","tempB","instB","REACT_LEGACY_ELEMENT_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_LEGACY_HIDDEN_TYPE","REACT_MEMO_CACHE_SENTINEL","REACT_CLIENT_REFERENCE","getComponentNameFromType","innerType","ReactDOMSharedInternals","sharedNotPendingObject","valueStack","createCursor","cursor","contextStackCursor","contextFiberStackCursor","rootInstanceStackCursor","hostTransitionProviderCursor","pushHostContainer","nextRootInstance","getOwnHostContext","getChildHostContextProd","popHostContainer","pushHostContext","stateHook","JSCompiler_inline_result","popHostContext","describeBuiltInComponentFrame","reentry","describeNativeComponentFrame","previousPrepareStackTrace","RunInRootFrame","construct","Fake","control","x$1","x$2","sample","namePropDescriptor","_RunInRootFrame$Deter","sampleStack","controlStack","sampleLines","controlLines","describeFiber","childFiber","getStackByFiberInDevAndProd","workInProgress","scheduleCallback$3","cancelCallback$1","shouldYield","requestPaint","getCurrentPriorityLevel","ImmediatePriority","UserBlockingPriority","NormalPriority$1","LowPriority","IdlePriority","log$1","unstable_setDisableYieldValue","rendererID","injectedHook","setIsStrictModeForDevtools","newIsStrictMode","clz32","clz32Fallback","LN2","nextTransitionUpdateLane","nextTransitionDeferredLane","nextRetryLane","getHighestPriorityLanes","pendingSyncLanes","lanes","getNextLanes","pendingLanes","nextLanes","suspendedLanes","pingedLanes","nonIdlePendingLanes","rootHasPendingCommit","wipLanes","checkIfRootIsPrerendering","renderLanes","getEntangledLanes","allEntangledLanes","index$4","lane","computeExpirationTime","claimNextRetryLane","createLaneMap","laneMap","initial","markRootUpdated$1","updateLane","markRootFinished","previouslyPendingLanes","remainingLanes","entanglements","expirationTimes","hiddenUpdates","index$7","hiddenUpdatesForLane","spawnedLane","markSpawnedDeferredLane","suspendedRetryLanes","updatedLanes","finishedLanes","spawnedLaneIndex","entangledLanes","markRootEntangled","rootEntangledLanes","index$8","getBumpedLaneForHydration","renderLane","getBumpedLaneForHydrationByLane","lanesToEventPriority","resolveUpdatePriority","updatePriority","getEventPriority","runWithPriority","previousPriority","randomKey","internalInstanceKey","internalPropsKey","internalContainerInstanceKey","internalEventHandlersKey","internalEventHandlerListenersKey","internalEventHandlesSetKey","internalRootNodeResourcesKey","internalHoistableMarker","internalLoadPendingKey","detachDeletedInstance","getClosestInstanceFromNode","targetInst","targetNode","getParentHydrationBoundary","getInstanceFromNode","getNodeFromInstance","getResourcesFromRoot","resources","markNodeAsHoistable","clearPendingLoadOnNode","allNativeEvents","registrationNameDependencies","registerTwoPhaseEvent","registerDirectEvent","registrationName","dependencies","VALID_ATTRIBUTE_NAME_REGEX","illegalAttributeNameCache","validatedAttributeNameCache","isAttributeNameSafe","viewTransitionMutationContext","pushMutationContext","setValueForAttribute","prefix$10","setValueForKnownAttribute","setValueForNamespacedAttribute","getToStringValue","isCheckable","trackValueOnNode","valueField","updateValueIfChanged","tracker","lastValue","escapeSelectorAttributeValueInsideDoubleQuotesRegex","escapeSelectorAttributeValueInsideDoubleQuotes","updateInput","lastDefaultValue","setDefaultValue","defaultChecked","initInput","isHydrating","updateOptions","multiple","propValue","setDefaultSelected","updateTextarea","initTextarea","setTextContent","firstChild","unitlessNumbers","setValueForStyle","isCustomProperty","styleName","setValueForStyles","prevStyles","styleName$16","styleName$17","aliases","isJavaScriptProtocol","sanitizeURL","noop$1","currentReplayingEvent","nativeEvent","restoreTarget","restoreQueue","restoreStateOfTarget","internalInstance","otherNode","otherProps","isInsideEventHandler","batchedUpdates$1","flushSyncWork$1","getListener","stateNode","canUseDOM","passiveBrowserEventsSupported","startText","fallbackText","getData","startLength","endLength","minEnd","getEventCharCode","keyCode","functionThatReturnsTrue","functionThatReturnsFalse","createSyntheticEvent","SyntheticBaseEvent","reactName","reactEventType","nativeEventTarget","Interface","EventInterface","SyntheticEvent","UIEventInterface","SyntheticUIEvent","lastMovementX","lastMovementY","lastMouseEvent","MouseEventInterface","getEventModifierState","SyntheticMouseEvent","SyntheticDragEvent","SyntheticFocusEvent","SyntheticAnimationEvent","SyntheticClipboardEvent","SyntheticCompositionEvent","normalizeKey","translateToKey","modifierKeyToProp","modifierStateGetter","keyArg","SyntheticKeyboardEvent","SyntheticPointerEvent","SyntheticSubmitEvent","SyntheticTouchEvent","SyntheticTransitionEvent","SyntheticWheelEvent","SyntheticToggleEvent","END_KEYCODES","canUseCompositionEvent","documentMode","canUseTextInputEvent","useFallbackCompositionData","SPACEBAR_CHAR","hasSpaceKeypress","isFallbackCompositionEnd","domEventName","getDataFromCustomEvent","isComposing","getNativeBeforeInputChars","getFallbackBeforeInputChars","supportedInputTypes","isTextInputElement","nodeName","createAndAccumulateChangeEvent","accumulateTwoPhaseListeners","dispatchQueue","activeElement$1","activeElementInst$1","runEventInBatch","processDispatchQueue","getInstIfValueChanged","getTargetInstForChangeEvent","isInputEventSupported","JSCompiler_inline_result$jscomp$318","isSupported$jscomp$inline_474","element$jscomp$inline_475","stopWatchingForValueChange","handlePropertyChange","handleEventsForInputEventPolyfill","getTargetInstForInputEventPolyfill","getTargetInstForClickEvent","getTargetInstForInputOrChangeEvent","is","objectIs","shallowEqual","objA","objB","keysA","keysB","currentKey","getActiveElement","getLeafNode","getNodeForCharacterOffset","nodeEnd","containsNode","outerNode","innerNode","getActiveElementDeep","containerInfo","hasSelectionCapabilities","skipSelectionChangeEvent","activeElementInst","lastSelection","mouseDown","constructSelectEvent","makePrefixMap","styleProp","vendorPrefixes","prefixedEventNames","getVendorPrefixedEventName","ANIMATION_END","ANIMATION_ITERATION","ANIMATION_START","TRANSITION_RUN","TRANSITION_START","TRANSITION_CANCEL","TRANSITION_END","topLevelEventsToReactNames","simpleEventPluginEvents","registerSimpleEvent","globalClientIdCounter$1","getViewTransitionName","pendingEffectsRoot","globalClientId","getClassNameByType","classByType","activeTypes","pendingTransitionTypes","getViewTransitionClassName","defaultClass","eventClass","concurrentQueues","concurrentQueuesIndex","concurrentlyUpdatedLanes","finishQueueingConcurrentUpdates","queue","markUpdateLaneFromFiberToRoot","enqueueUpdate$1","enqueueConcurrentHookUpdate","getRootForUpdatedFiber","enqueueConcurrentRenderForLane","sourceFiber","isHidden","nestedUpdateCount","emptyContextObject","FiberNode","pendingProps","mode","createFiberImplClass","shouldConstruct","createWorkInProgress","resetWorkInProgress","createFiberFromTypeAndProps","fiberTag","owner","isHostHoistableType","createFiberFromFragment","elements","createFiberFromText","createFiberFromDehydratedFragment","dehydratedNode","createFiberFromPortal","portal","CapturedStacks","createCapturedValueAtFiber","forkStack","forkStackIndex","treeForkProvider","treeForkCount","idStack","idStackIndex","treeContextProvider","treeContextId","treeContextOverflow","pushTreeFork","totalChildren","pushTreeId","baseIdWithLeadingBit","baseLength","numberOfOverflowBits","pushMaterializedTreeId","popTreeContext","restoreSuspendedTreeContext","suspendedContext","hydrationParentFiber","nextHydratableInstance","hydrationErrors","rootOrSingletonContext","HydrationMismatchException","throwOnHydrationMismatch","queueHydrationError","prepareToHydrateHostInstance","listenToNonDelegatedEvent","mediaEventTypes","checkForUnmatchedText","popToNextHostParent","popHydrationState","JSCompiler_temp","shouldSetTextContent","getNextHydratableInstanceAfterHydrationBoundary","isSingletonScope","previousHydratableOnEnteringScopedSingleton","getNextHydratable","resetHydrationState","upgradeHydrationErrorsToRecoverable","queuedErrors","workInProgressRootRecoverableErrors","valueCursor","currentlyRenderingFiber$1","lastContextDependency","pushProvider","popProvider","scheduleContextWorkOnParentPath","propagationRoot","propagateContextChanges","nextFiber","dependency","forcePropagateEntireTree","propagateParentContextChanges","isInsidePropagationBailout","currentParent","HostTransitionContext","checkIfContextChanged","currentDependencies","prepareToReadContext","readContext","readContextForConsumer","readContextDuringReconciliation","consumer","AbortControllerLocal","scheduleCallback$2","NormalPriority","CacheContext","createCache","releaseCache","queueTransitionTypes","queued","transitionType","entangledTransitionTypes","claimQueuedTransitionTypes","claimed","currentEntangledListeners","currentEntangledPendingCount","currentEntangledLane","currentEntangledActionThenable","entangleAsyncAction","entangledListeners","requestTransitionLane","pingEngtangledActionScope","chainThenableValue","thenableWithOverride","prevOnStartTransitionFinish","root$28","firstScheduledRoot","root$29","resumedCache","peekCacheFromPool","cacheResumedFromPreviousRender","workInProgressRoot","pushTransition","prevCachePool","getSuspendedCache","cacheFromPool","SuspenseException","SuspenseyCommitException","SuspenseActionException","noopSuspenseyCommitThenable","isThenableResolved","trackUsedThenable","thenableState","checkIfUseWrappedInAsyncCatch","fulfilledThenable","rejectedThenable","resolveLazy","lazyType","suspendedThenable","getSuspendedThenable","rejectedReason","thenableState$1","thenableIndexCounter$1","unwrapThenable","coerceRef","throwOnInvalidObjectTypeImpl","newChild","returnFiber","createChildReconciler","deleteChild","shouldTrackSideEffects","deletions","childToDelete","deleteRemainingChildren","currentFirstChild","mapRemainingChildren","existingChildren","useFiber","placeChild","newIndex","newFiber","lastPlacedIndex","placeSingleChild","updateTextNode","updateElement","elementType","updateFragment","updatePortal","createChild","updateSlot","oldFiber","updateFromMap","newIdx","reconcileChildrenArray","resultingFirstChild","previousNewFiber","nextOldFiber","newChildren","reconcileChildrenIterator","reconcileChildFibersImpl","firstChildFiber","reconcileChildFibers","mountChildFibers","hasForceUpdate","initializeUpdateQueue","cloneUpdateQueue","createUpdate","enqueueUpdate","updateQueue","executionContext","entangleTransitions","queueLanes","enqueueCapturedUpdate","newFirst","newLast","capturedUpdate","didReadFromEntangledAsyncAction","suspendIfUpdateReadFromEntangledAsyncAction","entangledActionThenable","processUpdateQueue","workInProgress$jscomp$0","firstBaseUpdate","lastBaseUpdate","pendingQueue","lastPendingUpdate","firstPendingUpdate","newState","isHiddenUpdate","workInProgressRootRenderLanes","instance$jscomp$0","callCallback","commitCallbacks","currentTreeHiddenStackCursor","prevEntangledRenderLanesCursor","pushHiddenContext","entangledRenderLanes","reuseHiddenContextOnStack","popHiddenContext","suspenseHandlerStackCursor","shellBoundary","pushPrimaryTreeSuspenseHandler","suspenseStackCursor","pushDehydratedActivitySuspenseHandler","pushOffscreenSuspenseHandler","reuseSuspenseHandlerOnStack","popSuspenseHandler","pushSuspenseListContext","newContext","popSuspenseListContext","findFirstSuspended","isSuspenseInstancePending","isSuspenseInstanceFallback","currentlyRenderingFiber","currentHook","workInProgressHook","didScheduleRenderPhaseUpdate","didScheduleRenderPhaseUpdateDuringThisPass","shouldDoubleInvokeUserFnsInHooksDEV","localIdCounter","thenableIndexCounter","globalClientIdCounter","throwInvalidHookError","areHookInputsEqual","prevDeps","nextDeps","renderWithHooks","nextRenderLanes","HooksDispatcherOnMount","HooksDispatcherOnUpdate","secondArg","renderWithHooksAgain","finishRenderingHooks","ContextOnlyDispatcher","didRenderTooFewHooks","didReceiveUpdate","numberOfReRenders","HooksDispatcherOnRerender","TransitionAwareHostComponent","dispatcher","maybeThenable","useThenable","checkDidRenderIdHook","didRenderIdHook","bailoutHooks","resetHooksOnUnwind","mountWorkInProgressHook","updateWorkInProgressHook","nextCurrentHook","nextWorkInProgressHook","createFunctionComponentUpdateQueue","use","useMemoCache","memoCache","basicStateReducer","updateReducer","updateReducerImpl","baseQueue","baseFirst","newBaseQueueFirst","newBaseQueueLast","didReadFromEntangledAsyncAction$64","revertLane","rerenderReducer","dispatch","lastRenderPhaseUpdate","updateSyncExternalStore","isHydrating$jscomp$0","snapshotChanged","updateEffect","subscribeToStore","pushSimpleEffect","updateStoreInstance","pushStoreConsistencyCheck","renderedSnapshot","nextSnapshot","checkIfSnapshotChanged","forceStoreRerender","latestGetSnapshot","scheduleUpdateOnFiber","mountStateImpl","initialStateInitializer","updateOptimisticImpl","dispatchActionState","isRenderPhaseUpdate","actionQueue","actionNode","setPendingState","runActionStateAction","prevState","handleActionReturnValue","onActionError","error$70","onActionSuccess","nextState","notifyActionListeners","actionStateReducer","mountActionState","ssrFormState","JSCompiler_inline_result$jscomp$0","inRootOrSingleton","initialStateProp","dispatchSetState","dispatchOptimisticSetState","updateActionState","updateActionStateImpl","currentStateHook","actionStateActionEffect","rerenderActionState","updateRef","mountEffectImpl","fiberFlags","hookFlags","updateEffectImpl","mountEffect","useEffectEventImpl","componentUpdateQueue","updateEvent","updateInsertionEffect","updateLayoutEffect","imperativeHandleEffect","refCleanup","updateImperativeHandle","mountDebugValue","updateCallback","updateMemo","nextCreate","mountDeferredValueImpl","requestDeferredLane","updateDeferredValueImpl","pendingState","dispatchSetStateInternal","finishedState","requestUpdateLane","startHostTransition","formFiber","ensureFormComponentIsStateful","requestFormReset$1","existingStateHook","initialResetState","useHostTransitionStatus","updateId","updateRefresh","refreshCache","root$73","dispatchReducerAction","enqueueRenderPhaseUpdate","entangleTransitionUpdate","currentState","eagerState","throwIfDuringRender","identifierPrefix","idWithLeadingBit","booleanOrThenable","applyDerivedStateFromProps","getDerivedStateFromProps","classComponentUpdater","checkShouldComponentUpdate","newProps","nextContext","oldProps","oldState","callComponentWillReceiveProps","resolveClassComponentProps","baseProps","propName$77","defaultOnUncaughtError","defaultOnCaughtError","defaultOnRecoverableError","logUncaughtError","onUncaughtError","e$78","logCaughtError","onCaughtError","e$79","createRootErrorUpdate","createClassErrorUpdate","initializeClassErrorUpdate","getDerivedStateFromError","legacyErrorBoundariesThatAlreadyFailed","throwException","rootRenderLanes","renderDidSuspendDelayIfPossible","workInProgressRootExitStatus","attachPingListener","wrapperError","workInProgressRootConcurrentErrors","SelectiveHydrationException","reconcileChildren","nextChildren","updateForwardRef","propsWithoutRef","bailoutOnAlreadyFinishedWork","updateMemoComponent","updateSimpleMemoComponent","checkScheduledUpdateOrContext","updateFunctionComponent","updateOffscreenComponent","deferHiddenOffscreenComponent","bailoutOffscreenComponent","nextBaseLanes","remainingChildLanes","mountActivityChildren","mountWorkInProgressOffscreenFiber","retryActivityComponentWithoutHydrating","updateActivityComponent","didSuspend","canHydrateHydrationBoundary","dehydrated","markRef","replayFunctionComponent","updateClassComponent","contextType","unresolvedOldProps","oldContext","contextType$jscomp$0","mountHostRootWithoutHydrating","SUSPENDED_MARKER","mountSuspenseOffscreenState","getRemainingWorkInPrimaryTree","primaryTreeDidDefer","workInProgressDeferredLane","updateSuspenseComponent","showFallback","mountSuspensePrimaryChildren","dehydrated$96","updateDehydratedSuspenseComponent","primaryChildren","offscreenProps","retrySuspenseComponentWithoutHydrating","suspenseInstance","didPrimaryChildrenDefer","digest","scheduleSuspenseWorkOnFiber","findLastContentRow","lastContentRow","currentRow","initSuspenseListRenderState","renderState","isBackwards","tail","tailMode","reverseChildren","nextRow","updateSuspenseListComponent","revealOrder","suspenseContext","shouldForceFallback","updateContextProvider","attemptEarlyBailoutIfNoScheduledUpdate","state$108","primaryChildLanes","beginWork","$$typeof","getResource","createHoistableInstance","resolveSingletonInstance","canHydrateInstance","canHydrateTextInstance","markUpdate","preloadInstanceAndSuspendIfNeeded","maySuspendCommit","shouldRemainOnPreviousScreen","preloadResourceAndSuspendIfNeeded","preloadResource","scheduleRetryEffect","retryQueue","cutOffTailIfNeeded","lastTailNode","hasRenderedATailFallback","bubbleProperties","didBailout","completedWork","newChildLanes","subtreeFlags","child$113","completeWork","nextResource","getOwnerDocumentFromRootContainer","setInitialProperties","listenToAllSupportedEvents","workInProgressRootRenderTargetTime","unwindWork","unwindInterruptedWork","interruptedWork","commitHookEffectListMount","finishedWork","lastEffect","firstEffect","captureCommitPhaseError","commitHookEffectListUnmount","nearestMountedAncestor","nearestMountedAncestor$jscomp$0","destroy_","commitClassCallbacks","safelyCallComponentWillUnmount","safelyAttachRef","instanceToUse","createViewTransitionInstance","fragmentInstance","FragmentInstance","addFragmentHandleToFiber","safelyDetachRef","error$148","commitNewChildToFragmentInstances","parentFragmentInstances","commitNewChildToFragmentInstance","commitFragmentInstanceInsertionEffects","isFragmentInstanceParent","commitFragmentInstanceDeletionEffects","deleteChildFromFragmentInstance","isFragmentInstanceHostBoundary","commitHostMount","commitHostUpdate","domElement","updateProperties","isHostParent","getHostSibling","insertOrAppendPlacementNodeIntoContainer","before","insertOrAppendPlacementNode","commitHostSingletonAcquisition","shouldStartViewTransition","appearingViewTransitions","trackEnterViewTransitions","viewTransitionCancelableChildren","pushViewTransitionCancelableScope","prevChildren","viewTransitionHostInstanceIdx","applyViewTransitionToHostInstances","applyViewTransitionToHostInstancesRecursive","collectMeasurements","stopAtNestedViewTransitions","inViewport","measureInstance","applyViewTransitionName","restoreViewTransitionOnHostInstances","restoreViewTransitionName","commitAppearingPairViewTransitions","commitEnterViewTransitions","gesture","scheduleViewTransitionEvent","commitDeletedPairViewTransitions","deletion","commitExitViewTransitions","commitNestedViewTransitions","changedParent","restorePairedViewTransitions","restoreEnterOrExitViewTransitions","restoreNestedViewTransitions","measureViewTransitionHostInstancesRecursive","previousMeasurements","previousMeasurement","nextMeasurement","parentViewTransition","newRect","newName","oldName","measureNestedViewTransitions","measureClonedInstance","offscreenSubtreeIsHidden","offscreenSubtreeWasHidden","offscreenDirectParentIsHidden","needsFormReset","PossiblyWeakSet","nextEffect","viewTransitionContextChanged","inUpdateViewTransition","rootViewTransitionAffected","rootViewTransitionNameCanceled","commitBeforeMutationEffects","_enabled","anchorOffset","focusNode","indexWithinAnchor","indexWithinFocus","committedLanes","commitBeforeMutationEffects_complete","isViewTransitionEligible","isViewTransitionEligible$jscomp$0","resolvedPrevProps","clearContainerSparingly","commitLayoutEffectOnFiber","recursivelyTraverseLayoutEffects","finishedRoot","error$146","commitActivityHydrationCallbacks","commitSuspenseHydrationCallbacks","retryDehydratedSuspenseBoundary","registerSuspenseInstanceRetry","newOffscreenSubtreeWasHidden","recursivelyTraverseReappearLayoutEffects","hideOrUnhideAllChildren","parentFiber","hideOrUnhideAllChildrenOnFiber","hideOrUnhideNearestPortals","instance$jscomp$1","hideOrUnhideDehydratedBoundary","isHidden$jscomp$0","detachFiberAfterEffects","hostParent","hostParentIsContainer","recursivelyTraverseDeletionEffects","commitDeletionEffectsOnFiber","deletedFiber","prevHostParent","prevHostParentIsContainer","releaseSingletonInstance","clearHydrationBoundary","retryIfBlockedOn","getRetryCache","retryCache","attachSuspenseRetryListeners","wakeables","wakeable","retry","resolveRetryWakeable","recursivelyTraverseMutationEffects","root$jscomp$0","commitMutationEffectsOnFiber","currentHoistableRoot","ii","_eventPayloads$ii2","commitReconciliationEffects","getHydratableHoistableCache","mountHoistable","acquireResource","getHoistableRoot","recursivelyResetForms","prevOffscreenSubtreeIsHidden","prevOffscreenSubtreeWasHidden","prevOffscreenDirectParentIsHidden$166","recursivelyTraverseDisappearLayoutEffects","hostParentFiber","parent$jscomp$0","parent$149","parent$151","recursivelyTraverseAfterMutationEffects","commitAfterMutationEffectsOnFiber","layoutEffectTraversalFlags","layoutEffectTraversalFlags$jscomp$0","finishedRoot$jscomp$0","includeWorkInProgressEffects","hiddenCallbacks","commitOffscreenPassiveMountEffects","previousCache","commitCachePassiveMountEffect","recursivelyTraversePassiveMountEffects","commitPassiveMountOnFiber","committedTransitions","_finishedWork$memoize2","onPostCommit","recursivelyTraverseReconnectPassiveEffects","recursivelyTraverseAtomicPassiveEffects","committedLanes$jscomp$0","committedTransitions$jscomp$0","suspenseyCommitFlag","recursivelyAccumulateSuspenseyCommit","accumulateSuspenseyCommitOnFiber","suspendedState","suspendInstance","suspendResource","previousHoistableRoot","detachAlternateSiblings","previousFiber","recursivelyTraversePassiveUnmountEffects","commitPassiveUnmountEffectsInsideOfDeletedTree_begin","commitPassiveUnmountOnFiber","recursivelyTraverseDisconnectPassiveEffects","deletedSubtreeRoot","sibling","DefaultAsyncDispatcher","cacheForType","resourceType","PossiblyWeakMap","workInProgressSuspendedReason","workInProgressThrownValue","workInProgressRootDidSkipSuspendedSiblings","workInProgressRootIsPrerendering","workInProgressRootDidAttachPingListener","workInProgressRootSkippedLanes","workInProgressRootInterleavedUpdatedLanes","workInProgressRootPingedLanes","workInProgressSuspendedRetryLanes","workInProgressRootDidIncludeRecursiveRenderUpdate","globalMostRecentFallbackTime","globalMostRecentTransitionTime","workInProgressTransitions","pendingEffectsStatus","pendingFinishedWork","pendingEffectsLanes","pendingEffectsRemainingLanes","pendingPassiveTransitions","pendingRecoverableErrors","pendingViewTransition","pendingViewTransitionEvents","rootWithNestedUpdates","prepareFreshStack","markRootSuspended","ensureRootIsScheduled","performWorkOnRoot","shouldTimeSlice","forceSync","exitStatus","renderRootConcurrent","renderRootSync","renderWasConcurrent","isRenderConsistentWithExternalStores","wasRootDehydrated","scheduleTimeout","completeRootWhenReady","suspendedCommitReason","onUnsuspend","waitForCommitToBeReady","completeRoot","recoverableErrors","transitions","didIncludeRenderPhaseUpdate","didSkipSuspendedSiblings","completedRenderStartTime","completedRenderEndTime","didAttemptEntireTree","index$6","flushSyncWorkAcrossRoots_impl","resetWorkInProgressStack","cancelTimeout","handleThrow","thrownValue","pushDispatcher","prevDispatcher","pushAsyncDispatcher","prevAsyncDispatcher","prevExecutionContext","unitOfWork","throwAndUnwindWorkLoop","shouldYieldForPrerendering","workLoopSync","thrownValue$184","performUnitOfWork","replaySuspendedUnitOfWork","hostFiber","completeUnitOfWork","workLoopConcurrentByScheduler","thrownValue$186","suspendedReason","unwindUnitOfWork","skipSiblings","flushPendingEffects","commitRoot","scheduleCallback$1","flushPassiveEffects","startViewTransition","flushMutationEffects","flushLayoutEffects","flushAfterMutationEffects","flushSpawnedWork","reportViewTransitionError","onRecoverableError","rootMutationHasEffect","selectionInformation","curFocusedElem","priorFocusedElem","priorSelectionRange","start$jscomp$0","end$jscomp$0","startMarker","endMarker","eventsEnabled","rootHasLayoutEffect","committedViewTransition","passiveSubtreeMask","releaseRootPooledCache","recoverableError","renderPriority","captureCommitPhaseErrorOnRoot","rootFiber","pingCache","threadIDs","pingSuspendedRoot","retryTimedOutBoundary","retryLane","boundaryFiber","lastScheduledRoot","didScheduleMicrotask","mightHavePendingSyncWork","isFlushingWork","currentEventTransitionLane","scheduleImmediateRootScheduleTask","didPerformSomeWork","root$190","onlyLegacy","syncTransitionLanes","performSyncWorkOnRoot","processRootScheduleInImmediateTask","processRootScheduleInMicrotask","shouldAttemptEagerTransition","scheduleTaskForRootDuringMicrotask","index$5","expirationTime","performWorkOnRootViaSchedulerTask","originalCallbackNode","workInProgressRootRenderLanes$jscomp$0","didTimeout","scheduleMicrotask","actionScopeLane","coerceFormActionProp","actionProp","extractEvents$1","maybeTargetInst","submitter","i$jscomp$inline_1667","eventName$jscomp$inline_1668","nonDelegatedEvents","eventSystemFlags","_dispatchQueue$i","previousInstance","i$jscomp$0","_dispatchListeners$i","targetElement","listenerSetKey","addTrappedEventListener","listenToNativeEvent","isCapturePhaseListener","listeningMarker","rootContainerElement","listenerWrapper","dispatchDiscreteEvent","dispatchContinuousEvent","dispatchEvent","targetContainer","dispatchEventForPluginEventSystem","ancestorInst","targetInst$jscomp$0","nodeTag","grandTag","SyntheticEventCtor","inCapturePhase","accumulateTargetOnly","reactEventName","lastHostComponent","_instance","createDispatchListener","accumulateEnterLeaveListenersForEvent","getTargetInstFunc","handleEventFunc","fallbackData","captureName","targetFiber","_instance2","common","_instance3","NORMALIZE_NEWLINES_REGEX","NORMALIZE_NULL_AND_REPLACEMENT_REGEX","normalizeMarkupForTextOrAttribute","markup","clientText","serverText","setProp","setPropOnCustomElement","hasSrc","hasSrcSet","propKey","propValue$204","emptyProps","lastProps","lastProp","propKey$221","propKey$237","propKey$242","propKey$247","propKey$252","isLikelyStaticResource","estimateBandwidth","bits","resourceEntries","overlapEntry","overlapStartTime","overlapTransferSize","overlapInitiatorType","namespaceURI","parentNamespace","rootContainerInstance","internalInstanceHandle","currentPopstateTransitionEvent","localPromise","localRequestAnimationFrame","handleErrorInNextTick","hydrationInstance","parentInstance","clearSingletonPreambleContribution","node$jscomp$0","nextNode$jscomp$0","viewTransitionName","createMeasurement","computedStyle","measuredRect","forceLayout","waitForImageToLoad","rootContainer","ownerWindow","pendingNavigation","previousFontLoadingStatus","mutationCallback","blockingPromises","suspenseyImages","imgBytes","suspenseyImage","estimateImageBytes","estimatedBytesWithinLimit","layoutCallback","afterMutationCallback","viewTransitionAnimations","animations","animation","pseudoElement","unchangedDimensions","keyframe","spawnedWorkCallback","passiveCallback","ViewTransitionPseudoElement","pseudo","keyframes","fragmentFiber","optionsOrUseCapture","indexOfEventListener","attachedListener","getAttachOptions","addEventListenerToChild","_listeners$index","removeEventListenerFromChild","normalizeListenerOptions","_eventListeners$i","setFocusOnFiberIfFocusable","focusOptions","setFocusIfFocusable","collectChildren","blurActiveElementWithinFragment","observeChild","observers","unobserveChild","pendingIntersectionUnobserves","intersectionUnobserveScheduled","schedulePendingIntersectionUnobserve","requestPostPaintCallback","collectClientRects","getRootNodeOptions","parentHostInstance","parentHostInstanceFromDOM","firstResult","lastResult","otherNodeIsWithinFirstOrLastChild","validateDocumentPositionWithFiberTree","otherFiber","documentPosition","precedingBoundaryFiber","followingBoundaryFiber","scrollTextNodeIntoView","textNode","resolvedAlignToTop","alignToTop","hostSiblings","addFragmentHandleToInstance","_eventListeners$i3","childInstance","writeIdx","_eventListeners$i4","anyProps","nodeType","targetInstance","handleFocus","didFocus","preloadPropsMap","preconnectsSet","previousDispatcher","flushSyncWork","requestFormReset","prefetchDNS","preconnect","preload","preloadModule","preinitScript","preinitStyle","preinitModuleScript","previousWasRendering","wasRendering","formInst","globalDocument","preconnectAs","limitedEscapedHref","preloadSelector","getStyleKey","getScriptKey","getStylesheetSelectorFromKey","getScriptSelectorFromKey","precedence","adoptPreloadPropsForStylesheet","insertStylesheet","scripts","adoptPreloadPropsForScript","currentProps","currentResource","styles$268","resource$269","preloadStylesheet","stylesheetPropsFromRawProps","rawProps","preloadProps","hoistableRoot","styleProps","instance$274","linkInstance","prior","tagCaches","caches","nodeKey","keyAttribute","hostContext","onUnsuspendImg","insertSuspendedStylesheets","stylesheetTimer","unsuspend","timeoutOffset","imgTimer","commit","checkIfFullyUnsuspended","precedencesByRoot","insertStylesheetIntoRoot","precedences","FiberRootNode","formState","createFiberRoot","hydrate","onDefaultTransitionIndicator","isStrictMode","initialChildren","getContextForSubtree","parentComponent","updateContainerImpl","markRetryLaneImpl","markRetryLaneIfNotHydrated","attemptContinuousHydration","attemptHydrationAtCurrentPriority","blockedOn","findInstanceBlockingEvent","return_targetInst","clearIfContinuousEvent","queueIfContinuousEvent","discreteReplayableEvents","findInstanceBlockingTarget","nearestMounted","hasScheduledReplayAttempt","queuedFocus","queuedDrag","queuedMouse","queuedPointers","queuedPointerCaptures","queuedExplicitHydrationTargets","accumulateOrCreateContinuousQueuedReplayableEvent","existingQueuedEvent","pointerId","attemptExplicitHydrationTarget","queuedTarget","attemptReplayContinuousQueuedEvent","queuedEvent","targetContainers","nextBlockedOn","nativeEventClone","attemptReplayContinuousQueuedEventInMap","replayUnblockedEvents","scheduleCallbackIfUnblocked","unblocked","lastScheduledReplayQueue","scheduleReplayQueueIfNeeded","formReplayingQueue","submitterOrAction","formProps","defaultOnDefaultTransitionIndicator","handleNavigate","handleNavigateComplete","pendingResolve","isCancelled","startFakeNavigation","currentEntry","ReactDOMRoot","internalRoot","ReactDOMHydrationRoot","isomorphicReactPackageVersion$jscomp$inline_2043","componentOrElement","internals$jscomp$inline_2586","hook$jscomp$inline_2587","require_react_dom_client_production","_arrayWithHoles","_arrayWithoutHoles","_classCallCheck","_createForOfIteratorHelper","_defineProperty","_iterableToArray","_iterableToArrayLimit","_nonIterableRest","_nonIterableSpread","_objectSpread2","_defineProperty$27","_slicedToArray","_toConsumableArray","_typeof","_WINDOW","_DOCUMENT","_MUTATION_OBSERVER","_PERFORMANCE","_ref$userAgent","DOCUMENT","MUTATION_OBSERVER","PERFORMANCE","IS_DOM","IS_IE","_cl","rl","il","dl","xl","Al","zl","Ql","$l","rt","mt","ct","It","St","_jl","l$1","n$1","ra","al$1","da","ha","el$1","sl$1","ol$1","ga","wa","NAMESPACE_IDENTIFIER","UNITS_IN_GRID","DEFAULT_CSS_PREFIX","DEFAULT_REPLACEMENT_CLASS","DATA_FA_I2SVG","DATA_FA_PSEUDO_ELEMENT","DATA_FA_PSEUDO_ELEMENT_PENDING","DATA_PREFIX","DATA_ICON","HTML_CLASS_I2SVG_BASE_CLASS","MUTATION_APPROACH_ASYNC","TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS","PSEUDO_ELEMENTS","PRODUCTION","familyProxy","_PREFIX_TO_STYLE","\"kit\"","PREFIX_TO_STYLE","_STYLE_TO_PREFIX","STYLE_TO_PREFIX","_PREFIX_TO_LONG_STYLE","PREFIX_TO_LONG_STYLE","_LONG_STYLE_TO_PREFIX","ICON_SELECTION_SYNTAX_PATTERN","LAYERS_TEXT_CLASSNAME","FONT_FAMILY_PATTERN","ATTRIBUTES_WATCHED_FOR_MUTATION","DUOTONE_CLASSES","RESERVED_CLASSES","getAttrConfig","coerce","_default","_config","_onChangeCb","d$2","meaninglessTransform","insertCss","headChildren","beforeChild","idPool","nextUniqueId","toArray","classArray","htmlEscape","joinAttributes","joinStyles","transformIsMeaningful","transformForSvg","containerWidth","iconWidth","transformForCss","_ref2$width","_ref2$height","_ref2$startCentered","startCentered","baseStyles","dcp","drc","rc","dPatt","customPropPatt","rPatt","_cssInserted","ensureCss","InjectCSS","w$2","functions","_listener","loaded","domready","toHtml","abstractNodes","_abstractNodes$attrib","_abstractNodes$childr","iconFromMapping","mapping","iconName","bindInternal4","thisContext","subject","toHex","unicode","normalizeIcons","icons","icon","defineIcons","_params$skipHooks","skipHooks","shims","FAMILY_NAMES","PREFIXES_FOR_FAMILY","familyId","_defaultUsablePrefix","_byUnicode","_byLigature","_byOldName","_byOldUnicode","_byAlias","isReserved","getIconName","cls","cssPrefix","build","o$$1","a$$1","alias","hasRegular","shimLookups","maybeNameMaybeUnicode","shim","getCanonicalPrefix","c$$1","byUnicode","byLigature","ligature","byAlias","byOldName","byOldUnicode","oldUnicode","newUnicode","getDefaultUsablePrefix","emptyCanonicalIcon","getFamilyId","famProps","v$$1","_params$family","styleOrPrefix","defined","moveNonFaClassesToRest","sortedUniqueValues","_faCombinedClasses","getCanonicalIcon","_params$skipLookups","skipLookups","givenPrefix","faStyleOrFamilyClasses","nonStyleOrFamilyClasses","_faStyles$","styleFromValues","canonical","getDefaultCanonicalPrefix","applyShimAndAlias","aliasIconName","\"far\"","\"fas\"","newCanonicalFamilies","newCanonicalStyles","prefixOptions","_prefixOptions$givenP","_prefixOptions$styles","_prefixOptions$config","config$$1","isDuotoneFamily","valuesHasDuotone","defaultFamilyIsDuotone","canonicalPrefixIsDuotone","Library","additions","longPrefix","_normalized$key","_plugins","_hooks","providers","defaultProviderKeys","registerPlugins","nextPlugins","mixout","tk","sk","hooks","chainHooks","hookFn","callHooks","callProvided","findIconDefinition","iconLookup","library","api","autoReplaceSvgRoot","autoReplace","_icon","canonicalIcon","_prefix","_params$autoReplaceSv","domVariants","abstractCreator","asIcon","main","\"style\"","asSymbol","isLabeled","makeInlineSvgAbstract","_params$icons","maskId","_params$watchable","watchable","attrClass","\"class\"","\"role\"","\"viewBox\"","makeLayersTextAbstract","_params$watchable2","\"transform\"","styleString","makeLayersCounterAbstract","styles$1","asFoundIcon","vectorData","missingIconResolutionMixin","maybeNotifyMissing","findIcon","p$2","preamble","begin","p$2$1","perf","noop$2","isWatched","hasPrefixAndIcon","hasBeenReplaced","getMutator","mutators","createElementNS","convertSVG","_params$ceFn","ceFn","abstractObj","nodeAsComment","comment","abstract","forSvg","splitClasses","newInnerHTML","performOperationSync","perform","callbackFunction","mutator","mark","disableObservation","enableObservation","mo","_options$treeCallback","treeCallback","_options$nodeCallback","nodeCallback","_options$pseudoElemen","pseudoElementsCallback","_options$observeMutat","observeMutationsRoot","defaultPrefix","toArray$1","mutationRecord","_getCanonicalIcon","disconnect","styleParser","classParser","existingPrefix","existingIconName","innerText","attributesParser","blankMeta","parseMeta","_classParser","extraClasses","extraAttributes","pluginMeta","styles$2","generateMutation","nodeMeta","getKnownPrefixes","onTree","htmlClassList","hclAdd","hclRemove","prefixesDomQuery","p$$1","candidates","e$$1","resolvedMutations","onNode","resolveIcons","iconDefinition","maybeIconDefinition","_params$transform","_params$symbol","_params$mask","_params$maskId","_params$classes","_params$attributes","_params$styles","ReplaceElements","_params$node","_params$callback","nextChild","Layers","assembler","LayersCounter","_params$title","LayersText","computedFontSize","boundingClientRect","CLEAN_CONTENT_PATTERN","SECONDARY_UNICODE_RANGE","_FONT_FAMILY_WEIGHT_TO_PREFIX","FONT_FAMILY_WEIGHT_TO_PREFIX","FONT_FAMILY_WEIGHT_FALLBACK","weights","hexValueFromContent","isSecondaryLayer","hasStylisticSet","cleaned","codePoint","isPrependTen","isDoubled","getPrefix","fontFamilySanitized","fontWeightInteger","fontWeightSanitized","replaceForPosition","pendingAttribute","alreadyProcessedPseudoElement","fontFamilyMatch","hexValue","isV4","isSecondary","iconIdentifier","iconName4","processable","hasPseudoElement","pseudoSelector","parseCSSRuleForPseudos","selectorText","selectorSet","s$$1","selectorWithoutPseudo","searchPseudoElements","useAsNodeList","nodeList","cleanSelectors","operations","PseudoElements","_unwatched","MutationObserver$1","parseTransformString","transformString","PowerTransforms","ALL_SPACE","fillBlack","deGroup","maskData","explicitMaskId","mainWidth","mainPath","maskWidth","maskPath","trans","maskRect","maskInnerGroupChildrenMixin","maskInnerGroup","maskOuterGroup","clipId","maskTag","defs","\"fill\"","\"mask\"","reduceMotion","gChildren","FILL","ANIMATION_BASE","OPACITY_ANIMATE","dot","symbolData","\"symbol\"","config$1","parse$1","_isNumerical","camelize","createGradientStops","styleCache","STYLE_CACHE_LIMIT","styleToObject","semicolonIndex","rawProp","oldestKey","element2","extraProps","elementAttributes","existingStyle","existingRole","ariaLabel","gradientFill","gradientType","gradientStops","gradientProps","makeReactConverter","useAccessibilityId","generatedId","useId","hasAccessibleProps","Logger","IS_DEV","SVG_CORE_VERSION","IS_VERSION_7_OR_LATER","getIsVersion7OrLater","DEFAULT_CLASSNAME_PREFIX","ANIMATION_CLASSES","PULL_CLASSES","ROTATE_CLASSES","SIZE_CLASSES","STYLE_CLASSES","LAYER_CLASSES","withPrefix","getClassListFromProps","beat","fade","beatFade","bounce","shake","spin","spinReverse","spinPulse","pulse","fixedWidth","border","rotation","pull","swapOpacity","rotateBy","widthAuto","canvasSquare","canvasRoomy","flip360","buzz","float","jello","spinSnap","spinSnap4","spinSnap8","swing","wag","isIconDefinition","normalizeIconArgs","typedObjectKeys","logger","DEFAULT_PROPS","DEFAULT_PROP_KEYS","FontAwesomeIcon","allProps","iconArgs","maskArgs","titleIdFromProps","maskIdFromProps","titleId","classList","transformProps","normalizedMaskArgs","renderedIcon","faMinus","faSortAlphaUpAlt","faFilter","faEnvelope","faCaretRight","faBell","faCommentAlt","faExternalLinkAlt","faEnvelopeOpenText","faShareNodes","faShareAlt","faHeartBroken","faRss","faMagnifyingGlass","faSearch","faS","faArrowRightLong","faEye","faCaretLeft","faChevronUp","faExpand","faEllipsisVertical","faEdit","faBook","faSearchMinus","faPaperPlane","faTable","faHeart","faChevronRight","faSearchPlus","faDatabase","faNewspaper","faLocationArrow","faCircleXmark","faTimesCircle","faImage","faPencilAlt","faCircleArrowLeft","faLightbulb","faCircleArrowRight","faCode","faEarthAmericas","faArrowUpLong","faAngleRight","faCalendarDay","faCircleExclamation","faLink","faChain","faChartLine","faLineChart","faArrowLeftLong","faGear","faArrowUp","faPlay","faCheck","faChartBar","faSpinner","faBookmark","faArrowRight","faRightLeft","faXmark","faClose","faTimes","faFileLines","faPen","faChartSimple","faChevronDown","faPanorama","faClockRotateLeft","faBullhorn","faChevronLeft","faSortAmountUpAlt","faChartColumn","faFlag","faExclamationTriangle","faRotateLeft","faArrowDownLong","faDownload","faArrowRightArrowLeft","faCaretUp","faArrowLeft","faPlus","faCopy","faLinkSlash","faSortAmountDown","faCaretDown","faCompress","faTag","faMagnifyingGlassChart","faPause","faArrowDown","faLocationDot","faMapMarkerAlt","faBars","faAnglesLeft","faBoxArchive","faListUl","faSortAlphaDown","faArrowPointer","faCircleInfo","faInfoCircle","clsx","GRAY_100","GRAY_90","GRAY_80","GRAY_70","GRAY_60","GRAY_50","GRAY_30","GRAY_10","GRAPHER_BACKGROUND","GRAPHER_DARK_TEXT","GRAPHER_LIGHT_TEXT","GRAPHER_DENIM","OWID_NO_DATA_GRAY","BezierArrow","startHandleOffset","endHandleOffset","startHandle","endHandle","headAnchor","headLength","headAngle","headStyle","lineCaps","startControlPoint","addOffset","endControlPoint","headOptions","theta","closed","curvePath","bezierCurve","startHeadPath","arrowHead","resolveHandle","endHeadPath","curveStyle","stroke","strokeWidth","strokeLinecap","strokeLinejoin","arrowHeadStyle","_jsxs","controlPoint","handle","xLen","yLen","rotate","pivot","deg","rad","PI","cos","ColorScaleConfigDefaults","ColorScaleConfig","colorSchemeInvert","baseColorScheme","customNumericValues","customNumericLabels","customNumericColors","INTER_BIN_DELIMITER","bin","INTRA_BIN_DELIMITER","customNumericColorsActive","customCategoryColors","customCategoryLabels","NO_DATA_LABEL","binningStrategy","legendDescription","trimmed","CustomColorSchemes","OwidDistinctColors","DarkerOwidDistinctColors","DarkerHexByBaseHex","CategoricalColorsPaletteA","CategoricalColorsPaletteB","CategoricalColorsPaletteC","CategoricalColorsPaletteD","CategoricalColorsPaletteE","OwidDistinctColorScheme","OwidDistinctLinesPalette","OwidDistinctLinesColorScheme","OwidCategoricalAScheme","OwidCategoricalBScheme","OwidCategoricalCScheme","OwidCategoricalDScheme","OwidCategoricalEScheme","EnergyColors","EnergyColorPalette","OwidEnergy","OwidEnergyLines","getModifiedLinesColorScheme","IncomeGroupColors","OwidMapColors","ContinentColors","ContinentColorPalette","ContinentColorsColorScheme","modifiedColors","colorScheme","modifiedColorMap","ContinentColorsLinesColorScheme","SingleColorDenim","SingleColorTeal","SingleColorPurple","SingleColorDustyCoral","SingleColorDarkCopper","SingleColorGradientDenim","SingleColorGradientTeal","SingleColorGradientPurple","SingleColorGradientDustyCoral","SingleColorGradientDarkCopper","BinaryMapPaletteA","BinaryMapPaletteB","BinaryMapPaletteC","BinaryMapPaletteD","BinaryMapPaletteE","CategoricalMapPalette10","CategoricalMapPalette17","MapContinentColors","OwidCategoricalMapScheme","define_default","extend","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","define","channels","color_formatHex","color_formatHex8","color_formatHsl","color_formatRgb","hslConvert","rgbn","Rgb","rgba","hsla","rgbConvert","rgb","clampi","clampa","rgb_formatHex","rgb_formatHex8","rgb_formatRgb","hex","Hsl","hsl","m2","m1","hsl2rgb","clamph","clampt","constant_default$4","linear","exponential","gamma","nogamma","rgb_default","rgbGamma","colorRgb","numberArray_default","isNumberArray","genericArray","nb","date_default","number_default","object_default","reA","reB","one","string_default","bi","am","bm","bs","value_default","numberArray","round_default","degrees","decompose_default","skewX","svgNode","parseCss","decompose","parseSvg","interpolateTransform","translate","xa","xb","ya","yb","pxComma","pxParen","degParen","interpolateTransformCss","interpolateTransformSvg","epsilon2","cosh","sinh","tanh","zoom_default$1","zoomRho","zoom","ux0","p0","uy0","w0","ux1","uy1","w1","dx","dy","d2","rho","d1","b0","rho4","rho2","b1","r0","coshr0","_1","_2","quantize_default","samples","interpolator","interpolateArray","scaleArr","intervalWidth","interpolate","intervalOffset","getLeastUsedColor","unusedColors","_.difference","availableColors","usedColors","_.minBy","getYiq","calculateLightnessScore","colorHex","isDarkColor","colorSpecifier","darkenColorToTargetYiq","darkenCoeff","targetYiq","darkenColorForLine","darkenColorForText","darkenColorForHighContrastText","ColorScheme","singleColorScale","isDistinct","colorMap","colorSets","newColors","_.clone","shortColors","numColors","newColor","knownColors","prevColors","colorSet","colors","uniqValues","inverseOrder","colorByValue","colorSetsArray","colorbrewer","ColorBrewerSchemeIndex","getColorBrewerScheme","initColorScheme","_colorSchemes","ColorSchemes","schemeRaw","Dispatch","parseTypenames","typenames","typename","namespaces_default","namespace_default","creatorInherit","uri","creatorFixed","fullname","creator_default","none","selector_default","select_default$2","groups","subgroups","subgroup","subnode","Selection","empty","selectorAll_default","arrayAll","selectAll_default$1","selectorAll","parents","matcher_default","childMatcher","childFind","childFirst","selectChild_default","childrenFilter","selectChildren_default","filter_default$1","matcher","sparse_default","enter_default","sparse","EnterNode","datum","constant_default$3","bindIndex","groupLength","dataLength","bindKey","nodeByKeyValue","keyValues","keyValue","data_default$1","enter","exit","arraylike","enterGroup","updateGroup","exit_default","join_default","onenter","onupdate","onexit","merge_default$1","groups0","groups1","m0","merges","group0","group1","order_default","sort_default","compareNode","sortgroups","sortgroup","call_default","nodes_default","node_default","size_default$1","empty_default","each_default","attrRemove","attrRemoveNS","attrConstant","attrConstantNS","attrFunction","attrFunctionNS","attr_default$1","window_default","styleRemove","styleConstant","styleFunction","style_default$1","styleValue","defaultView","propertyRemove","propertyConstant","propertyFunction","property_default","ClassList","classedAdd","classedRemove","classedTrue","classedFalse","classedFunction","classed_default","textRemove","textConstant","textFunction","text_default$1","htmlRemove","htmlConstant","htmlFunction","html_default","raise","raise_default","lower_default","append_default","constantNull","insert_default","remove_default$2","selection_cloneShallow","selection_cloneDeep","clone_default","deep","datum_default","contextListener","onRemove","onAdd","on_default$1","dispatchConstant","dispatchFunction","dispatch_default","iterator_default","selection_selection","selection_select","selection_selectAll","selection_selectChild","selection_selectChildren","selection_filter","selection_data","selection_enter","selection_exit","selection_join","selection_merge","selection_order","selection_sort","selection_call","selection_nodes","selection_node","selection_size","selection_empty","selection_each","selection_attr","selection_style","selection_property","selection_classed","selection_text","selection_html","selection_raise","selection_lower","selection_append","selection_insert","selection_remove","selection_clone","selection_datum","selection_on","selection_dispatch","selection_iterator","select_default$1","sourceEvent_default","sourceEvent","pointer_default","nonpassivecapture","noevent_default$1","nodrag_default","noevent","yesdrag","noclick","pokeDelay","taskHead","taskTail","clockLast","clockNow","clockSkew","clock","setFrame","clearNow","Timer","sleep$1","timerFlush","wake","nap","poke","t0","t1","t2","timeout_default","elapsed","emptyOn","emptyTween","schedule_default","schedules","create$1","timing","schedule","tween","tick","interrupt_default$1","active","interrupt_default","tweenRemove","tween0","tween1","tweenFunction","tween_default","tweenValue","interpolate_default$1","interpolateNumber","interpolateRgb","interpolateString","string00","string1","value1","interpolate0","string0","string10","attr_default","attrInterpolate","attrInterpolateNS","attrTweenNS","attrTween","attrTween_default","delayFunction","delayConstant","delay_default","durationFunction","durationConstant","duration_default","easeConstant","ease_default","easeVarying","easeVarying_default","filter_default","Transition","merge_default","onFunction","on0","on1","sit","on_default","removeFunction","remove_default$1","select_default","selectAll_default","selection_default","styleNull","styleMaybeRemove","listener0","style_default","styleInterpolate","styleTween","styleTween_default","text_default","textInterpolate","textTween","textTween_default","transition_default$1","id0","id1","end_default","selection_prototype","transition_select","transition_selectAll","transition_filter","transition_merge","transition_selection","transition_transition","transition_on","transition_attr","transition_attrTween","transition_style","transition_styleTween","transition_text","transition_textTween","transition_remove","transition_tween","transition_delay","transition_duration","transition_ease","transition_easeVarying","transition_end","cubicOut","cubicInOut","defaultTiming","easeCubicInOut","transition_default","selection_interrupt","selection_transition","abs$1","max$1","min$1","pi","tau","epsilon","tauEpsilon","appendRound","digits","Path","x0","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","t01","t21","ccw","a0","cw","a1","splitter","resulterrbound","Qnew","hh","bvirt","enow","fnow","eindex","findex","hindex","elen","flen","estimate","vec","ccwerrboundA","ccwerrboundB","ccwerrboundC","C1","C2","orient2dadapt","acxtail","acytail","bcxtail","bcytail","ahi","alo","bhi","blo","_j","_0","s1","s0","u3","acx","ax","bcx","bx","acy","ay","bcy","by","det","errbound","detsum","C1len","C2len","orient2d","detleft","detright","add_default","tree","leaf","xm","ym","xp","yp","addAll","xz","yz","cover_default","data_default","extent_default","quad_default","find_default","x3","y3","quads","Quad","remove_default","retainer","removeAll","root_default","size_default","visit_default","visitAfter_default","defaultX","x_default$1","defaultY","y_default$1","quadtree","Quadtree","leaf_copy","treeProto","tree_add","tree_addAll","tree_cover","tree_data","tree_extent","tree_find","tree_remove","tree_removeAll","tree_root","tree_size","tree_visit","tree_visitAfter","tree_x","tree_y","constant_default$2","lcg_default","initialRadius","initialAngle","simulation_default","simulation","alpha","alphaMin","alphaDecay","alphaTarget","velocityDecay","forces","stepper","lcg","initializeNodes","angle","initializeForce","closest","x_default","strength","strengths","initialize","y_default","halfPi","quarterPi","radians","atan","atan2","hypot","pow","tan","acos","asin","haversin","streamGeometry","geometry","streamGeometryType","stream","streamObjectType","features","coordinates","streamLine","streamPolygon","geometries","coordinate","stream_default","areaRingSum","areaSum","lambda00","phi00","lambda0","cosPhi0","sinPhi0","areaStream","areaRingStart","areaRingEnd","areaRing","areaSum$1","areaPointFirst","areaPoint$1","areaPoint","lambda","phi","dLambda","sdLambda","adLambda","cosPhi","sinPhi","areaRingSum$1","spherical","cartesian","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","phi0","lambda1","phi1","lambda2","deltaSum","boundsStream","boundsPoint","boundsLineStart","boundsLineEnd","boundsRingPoint","boundsRingStart","boundsRingEnd","areaStream$1","linePoint","normal","inflection","lambdai","phii","antimeridian","rangeCompare","rangeContains","bounds_default","deltaMax","W0","W1","X0","Y0","Z0","X1","Y1","Z1","X2","Y2","Z2","z0","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroidPointCartesian","centroidLinePointFirst","centroidLinePoint","centroidRingPointFirst","centroidRingPoint","cz","X2$1","Y2$1","Z2$1","centroid_default","compose_default","compose","rotationIdentity","rotateRadians","deltaPhi","deltaGamma","rotationLambda","deltaLambda","rotationPhiGamma","forwardRotationLambda","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","circleStream","cosRadius","sinRadius","direction","circleRadius","buffer_default","pointEqual_default","Intersection","rejoin_default","clip","segments","pointEqual","compareIntersection","link$1","startInside","isSubject","longitude","polygonContains_default","winding","polygon","ring","point0","sinPhi1","cosPhi1","point1","absDelta","arc","phiArc","clip_default","clipLine","sink","ringBuffer","clipBuffer","ringSink","polygonStarted","pointRing","ringStart","ringEnd","lineStart","lineEnd","polygonContains","pointVisible","pointLine","clean","ringSegments","validSegment","antimeridian_default","clipAntimeridianLine","clipAntimeridianInterpolate","sign0","sign1","clipAntimeridianIntersect","sinLambda0Lambda1","circle_default","cr","smallRadius","notHemisphere","c0","v0","v00","point2","intersect","pa","n1","n2n2","n1n2","determinant","two","c1","n1xn2","uu","polar","meridian","q1","line_default$1","clipMax","clipMin","clipRectangle","corner","comparePoint","ca","activeStream","bufferStream","x__","y__","v__","x_","y_","v_","clipStream","polygonInside","polygonStart","polygonEnd","cleanInside","lengthSum","lengthStream","lengthLineStart","lengthPointFirst","lengthLineEnd","lengthPoint","cosDelta","lengthSum$1","length_default","distance_default","graticuleX","graticuleY","graticule","DX","DY","interpolate_default","cy0","sy0","cy1","sy1","kx0","ky0","kx1","ky1","identity_default$1","x00","y00","centroid","centroidPointFirstLine","centroidPointLine","centroidPointFirstRing","centroidPointRing","PathContext","lengthRing","cacheDigits","cacheAppend","cacheRadius","cacheCircle","PathString","path_default","pointRadius","projectionStream","contextStream","pathArea","pathMeasure","pathBounds","pathCentroid","projection","TransformStream","methods","fit","fitBounds","fitExtent","fitSize","fitWidth","fitHeight","maxDepth","cosMinDistance","resample_default","delta2","resample","project","resampleNone","resampleLineTo","phi2","dx2","dy2","dz","a00","b00","c00","resampleStream","ringPoint","transformRadians","transformRotate","scaleTranslate","sx","sy","scaleTranslateRotate","cosAlpha","sinAlpha","ai","ci","fi","projectionMutator","preclip","clipAntimeridian","postclip","projectResample","projectTransform","projectRotateTransform","cacheStream","invert","reset","clipCircle","recenter","projectAt","conicProjection","azimuthalRaw","azimuthalInvert","sc","cc","azimuthalEqualAreaRaw","cxcy","azimuthalEqualArea_default","mercatorRaw","tany","conicConformalRaw","fy","conicConformal_default","orthographicRaw","orthographic_default","initRange","implicit","ordinal","unknown","band","ordinalRange","r1","bandwidth","paddingInner","paddingOuter","rescale","pointish","constants","clamper","bimap","d0","polymap","bisect","interpolateValue","untransform","piecewise","interpolateRound","continuous","tickFormat","precisionPrefix","precisionRound","precisionFixed","linearish","prestep","maxIter","nice","transformLog","transformExp","transformLogn","transformExpn","pow10","powp","logp","reflect","loggish","pows","transformPow","transformSqrt","transformSquare","powish","constant_default$1","withPath","array_default","Linear","linear_default","line_default","curve","curveLinear","pointX","pointY","defined0","constant_default","ZoomEvent","Transform","nopropagation","noevent_default","defaultFilter","defaultExtent","defaultTransform","defaultWheelDelta","defaultTouchable","defaultConstrain","dx0","translateExtent","dx1","dy0","dy1","zoom_default","constrain","wheelDelta","touchable","scaleExtent","interpolateZoom","touchstarting","touchfirst","touchending","wheelDelay","clickDistance2","tapDistance","wheeled","mousedowned","dblclicked","touchstarted","touchmoved","touchended","k1","Gesture","pointer","wheelidled","mousemoved","mouseupped","touches","started","l0","l1","isLogBinningStrategy","autoChooseLogBinningStrategy","magnitudeDiff","runLogBinningStrategy","conf","resolvedStrategy","calcMagnitudeDiff","hasMidpoint","bins","createLogBins","exponentMin","exponentMax","R.range","logSteps","R.last","pruneUnusedBins","isEqualSizeBinningStrategy","runEqualSizeBinningStrategy","createEqualSizeBins","getTargetBinCountForEqualSizeBinsStrategy","normalisedRange","stepSizeInfo","candidateStepSize","stepSize","targetBinCount","stepSizeDifference","R.firstBy","actualStepSize","minValueRounded","AUTO_EQUAL_BINS_MAX_MAGNITUDE_DIFF","lowerValue","upperValue","R.dropWhile","R.dropLastWhile","runBinningStrategy","hasValuesBelowMidpoint","hasValuesAboveMidpoint","autoChooseBinningStrategy","hasValidConfigForBinningStrategy","runBinningStrategyAroundMidpoint","midpointIdx","R.sortedIndex","midpoint","computeMinMaxForStrategy","z$3","sortedValues","posValues","runResolvedBinningStrategy","leftRange","rightRange","biggerRange","R.takeWhile","mirrorBinsAroundMidpoint","leftValues","rightValues","binsRight","posValuesOnly","hasNegativeMinOrMaxValue","minValueForLog","maxValueForLog","percentile99","filteredRightBins","binOffsets","leftBins","rightBins","PROJECTED_DATA_LABEL","INAPPLICABLE_LABEL","INAPPLICABLE_COLOR","ColorScale","customHiddenCategories","isColorSchemeInverted","defaultColorScheme","defaultNoDataColor","colorScaleColumn","hasNoDataBin","hasProjectedDataBin","hasInapplicableBin","sortedNumericValues","minPossibleValue","maxPossibleValue","categoricalValues","manualBinThresholds","autoBinThresholds","bucketThresholds","noDataColor","inapplicableColor","noDataLabel","inapplicableLabel","baseColors","isManualBuckets","numNumericBins","numericLegendBins","legendBins","categoricalLegendBins","colorScaleConfig","labels","defaultBaseColorScheme","BuGn","sortedUniqNonEmptyStringVals","isPercent","createBinForMidpoint","midpointMode","getColors","toReversed","baseColor","roundingOptions","decimalPlaces","displayMin","formatValueShort","displayMax","isFirst","isLast","NumericBin","isOpenLeft","isOpenRight","allCategoricalValues","boundingOffset","CategoricalBin","getBinForValue","getColor","AbstractColorScaleBin","isInapplicable","isProjection","makeSwatchKey","mergeCategoricalBinsByLabelAndColor","binsByKey","dedupeRepeatedBins","_.uniqWith","binA","binB","isCategoricalBin","isNumericBin","isNoDataBin","isProjectedDataBin","isInapplicableBin","addPatternRefToBin","isIndicatorSource","getIndicatorColumnSlug","targetYear","ChartDimensionDefaults","ChartDimension","indicatorSource","_initProto","#manager","updateFromObject","splitIntoFragments","currText","separators","joinFragments","HTML_OPENING_CLOSING_TAG_REGEX","startsWithNewline","shortenForTargetWidth","targetWidth","fontSettings","low","high","forText","shortenWithEllipsis","availableWidth","ellipsis","truncatedText","getTextPositionForSvgRendering","textWrap","lineHeight","verticalAlign","textHeight","HEIGHT_CORRECTION_FACTOR","containerHeight","correctedY","renderY","sumTextWrapHeights","spacer","TextWrap","maxWidth","lineCount","singleLineHeight","lastLineWidth","htmlStyle","initialProps","processHtmlTags","currentlyOpenTags","prependOpenTags","fullTag","tagMatches","appendCloseTags","lineBounds","nextLine","rawHtml","nextBounds","wordWithoutNewline","toFixed","getPositionForSvgRendering","TextWrapSvg","svgTextProps","_Fragment","renderX","lineX","lineY","__html","SUPERSCRIPT_NUMERALS","FIGMA_TEXT_NODE_BREAK_DY","IRText","fontParams","getBreakpointBefore","toHTML","toSVG","Fragment","toPlaintext","IRWhitespace","tokenIndex","tokenStartOffset","breakOffset","IRLineBreak","IRElement","getLineWidth","splitBefore","after","splitLineAtBreakpoint","getClone","getContinuationClone","splitOnLineBreaks","splitAllOnNewline","tokens","lineToPlaintext","IRBold","IRFragment","leadingSpaceWidth","fragmentIndex","styleDelta","inlineGap","lineGap","internal","marginLeft","xmlSpace","IRSuperscript","fontFeatureSettings","IRItalic","fontStyle","IRLink","textDecoration","IRDetailOnDemand","currentLine","unproccessed","token","shift","firstLine","otherLines","breakWidth","prevBreakpoint","getLineFontSize","tokenFontSize","ownFontSize","childrenFontSize","maxFontSize","getLineGap","getDodUnderlineSegments","startOffset","isTextToken","recursiveMergeTextTokens","mergedTextTokens","splitIntoLines","processedLines","unprocessedLines","breakpoint","convertPlaintextToIRTokens","lineIndex","words","wordIndex","appendReferenceNumbers","references","traverse","referenceIndex","findIndex","appendedTokens","AbstractTokenTextWrap","detailsOrderedByReference","plaintext","htmlLines","svgLines","svgLinesWithDodReferenceNumbers","lineHeights","lineGaps","tokensWithReferenceNumbers","lineLengths","getLineHeight","emptyOptions","includeHtml","includeImageAlt","decodeNamedCharacterReference","characterReference","chunkStart","combineExtensions","extensions","syntaxExtension","extension","constructs","decodeNumericCharacterReference","normalizeIdentifier","asciiAlpha","regexCheck","asciiAlphanumeric","asciiAtext","asciiControl","asciiDigit","asciiHexDigit","asciiPunctuation","markdownLineEnding","markdownLineEndingOrSpace","markdownSpace","unicodePunctuation","unicodeWhitespace","normalizeUri","skip","factorySpace","effects","initializeContent","contentStart","afterContentStartConstruct","paragraphInitial","initializeDocument","containerConstruct","tokenizeContainer","continued","childFlow","childToken","lineStartOffset","documentContinue","checkNewContainers","closeFlow","indexBeforeExits","indexBeforeFlow","exitContainers","documentContinued","flowStart","thereIsANewContainer","thereIsNoNewContainer","containerContinue","flowContinue","writeToChild","endOfFile","nok","classifyCharacter","resolveAll","attention","resolveAllAttention","tokenizeAttention","openingSequence","closingSequence","nextEvents","movePoint","attentionMarkers","marker","inside","autolink","tokenizeAutolink","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","blankLine","tokenizeBlankLine","blockQuote","tokenizeBlockQuoteContinuation","tokenizeBlockQuoteStart","contStart","contBefore","characterEscape","tokenizeCharacterEscape","tokenizeCharacterReference","numeric","nonLazyContinuation","tokenizeNonLazyContinuation","codeFenced","tokenizeCodeFenced","closeStart","tokenizeCloseStart","initialPrefix","sizeOpen","beforeSequenceOpen","sequenceOpen","infoBefore","atNonLazyBreak","metaBefore","contentBefore","beforeContentChunk","contentChunk","startBefore","beforeSequenceClose","sequenceClose","sequenceCloseAfter","codeIndented","tokenizeCodeIndented","furtherStart","tokenizeFurtherStart","afterPrefix","atBreak","codeText","resolveCodeText","tokenizeCodeText","tailExitIndex","headEnterIndex","between","SpliceBuffer","chunkedPush","subtokenize","jumps","otherIndex","otherEvent","subevents","more","eventsArray","subcontent","eventIndex","startPosition","startPositions","tokenizer","childEvents","gaps","adjust","breaks","resolveContent","tokenizeContent","continuationConstruct","tokenizeContinuation","chunkInside","contentEnd","contentContinue","startLookahead","prefixed","factoryDestination","balance","literalType","literalMarkerType","enclosedBefore","rawType","stringType","enclosed","enclosedEscape","rawEscape","factoryLabel","markerType","labelInside","labelEscape","factoryTitle","factoryWhitespace","tokenizeDefinition","titleBefore","tokenizeTitleBefore","identifier","labelAfter","markerAfter","destinationBefore","destinationAfter","afterWhitespace","beforeMarker","titleAfter","titleAfterOptionalWhitespace","hardBreakEscape","tokenizeHardBreakEscape","headingAtx","resolveHeadingAtx","tokenizeHeadingAtx","sequenceFurther","htmlBlockNames","htmlRawNames","htmlFlow","resolveToHtmlFlow","tokenizeHtmlFlow","blankLineBefore","tokenizeBlankLineBefore","nonLazyContinuationStart","tokenizeNonLazyContinuationStart","closingTag","markerB","declarationOpen","tagCloseStart","continuationDeclarationInside","commentOpenInside","cdataOpenInside","continuation","slash","basicSelfClosing","completeClosingTagAfter","completeAttributeNameBefore","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCdataInside","continuationAfter","continuationStart","continuationStartNonLazy","continuationBefore","continuationRawEndTag","htmlText","tokenizeHtmlText","returnState","tagOpen","declaration","commentEnd","commentClose","lineEndingBefore","cdata","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","lineEndingAfter","lineEndingAfterPrefix","labelEnd","resolveAllLabelEnd","resolveToLabelEnd","tokenizeLabelEnd","resourceConstruct","tokenizeResource","referenceFullConstruct","tokenizeReferenceFull","referenceCollapsedConstruct","tokenizeReferenceCollapsed","newEvents","media","labelStart","labelEndNok","labelEndOk","referenceNotFull","resourceStart","resourceBefore","resourceOpen","resourceEnd","resourceDestinationAfter","resourceDestinationMissing","resourceBetween","resourceTitleAfter","referenceFull","referenceFullAfter","referenceFullMissing","referenceCollapsedStart","referenceCollapsedOpen","labelStartImage","tokenizeLabelStartImage","labelStartLink","tokenizeLabelStartLink","lineEnding","tokenizeLineEnding","thematicBreak","tokenizeThematicBreak","tokenizeListContinuation","tokenizeListEnd","tokenizeListStart","listItemPrefixWhitespaceConstruct","tokenizeListItemPrefixWhitespace","indentConstruct","tokenizeIndent","atMarker","onBlank","endOfPrefix","otherPrefix","notBlank","notInCurrentItem","setextUnderline","resolveToSetextUnderline","tokenizeSetextUnderline","paragraph","initializeFlow","atBlankEnding","afterConstruct","createResolver","initializeFactory","resolveAllLineSuffixes","initializeText","notText","resolveAllText","extraResolver","chunks","bufferIndex","chunk","contentInitial","flowInitial","insideSpan","resolveText","createTokenizer","columnStart","resolveAllConstructs","constructFactory","onsuccessfulconstruct","onsuccessfulcheck","write","addResult","sliceSerialize","serializeChunks","sliceStream","expandTabs","sliceChunks","defineSkip","accountForPotentialSkip","chunkIndex","consume","fields","listOfConstructs","constructIndex","currentConstruct","handleListOfConstructs","handleMapOfConstructs","bogusState","handleConstruct","onreturn","startPoint","startPrevious","startCurrentConstruct","startEventsIndex","startStack","restore","startBufferIndex","endBufferIndex","head","atTab","defaultConstructs","postprocess","preprocess","atCarriageReturn","preprocessor","endPosition","encoding","characterEscapeOrReference","decodeString","$1","$2","$0","stringifyPosition","fromMarkdown","compiler","opener","onenterdata","codeFlow","emphasis","hardBreak","listItem","onenterlistitemvalue","onenterlistordered","onenterreference","strong","closer","onexitatxheadingsequence","onexitautolinkemail","onexitautolinkprotocol","onexitdata","onexitcharacterreferencemarker","onexitcharacterreferencevalue","onexitcharacterreference","onexitcodefenced","onexitcodefencedfence","onexitcodefencedfenceinfo","onexitcodefencedfencemeta","onexitcodeindented","onexitcodetext","onexitdefinitiondestinationstring","onexitdefinitionlabelstring","onexitdefinitiontitlestring","onexithardbreak","onexithtmlflow","onexithtmltext","onexitimage","onexitlabel","onexitlabeltext","onexitlineending","onexitlink","onexitreferencestring","onexitresourcedestinationstring","onexitresourcetitlestring","onexitresource","onexitsetextheading","onexitsetextheadinglinesequence","onexitsetextheadingtext","compile","listStack","prepareList","defaultOnError","containerBalance","listSpread","firstBlankLineIndex","tailIndex","tailEvent","and","onExitError","resume","ancestor","siblings","referenceType","combined","escapeStringRegexp","castFactory","anyFactory","propsFactory","typeFactory","tests","checkAsRecord","nodeAsRecord","looksLikeANode","testFunction","visitParents","visitor","factory","subresult","grandparents","toResult","nodeAsParent","findAndReplace","toPairs","pairIndex","grandparent","matchObject","tupleOrList","tuple","toExpression","toFunction","urlRegex","remarkPlainLinks","turnIntoLink","MarkdownTextWrap","normalizeMarkdownNewlines","convertMarkdownToIRTokens","baseText","replaceAll","markdown","ast","convertMarkdownNodeToIRTokens","alt","ordered","splitted","converted","canAppendTextToLastLine","existingTextWrap","textToAppend","reservedWidth","spaceWidth","availableWidthInLastLine","secondaryTextWrap","TextWrapGroup","fragmentLineCounts","getFragmentFontParams","getFragmentStyleDelta","makeFragmentElement","elementWithGap","pushOnNewLine","newLineGap","pushOnCurrentLine","newLine","gapWidth","MarkdownTextWrapLine","MarkdownTextWrapHtml","plaintextLine","lineFontSize","marginTop","MarkdownTextWrapSvg","detailsMarker","yOffset","getLineY","renderSvgLine","textAnchor","segmentIndex","strokeDasharray","isTspan","isStyledElement","correctLineStartForFigma","positionedFirst","cloneElement","nameRe","nameReJsx","whitespace","Schema","space","definitions","Info","powers","increment","booleanish","overloadedBoolean","spaceSeparated","commaSeparated","commaOrSpaceSeparated","DefinedInfo","normals","caseSensitiveTransform","caseInsensitiveTransform","xlink","xmlns","xml","hastToReact","dash","valid","Type","camelcase","dashes","kebab","htmlBase","svgBase","COMMENT_REGEX","NEWLINE_REGEX","WHITESPACE_REGEX","PROPERTY_REGEX","COLON_REGEX","VALUE_REGEX","SEMICOLON_REGEX","TRIM_REGEX","errorsList","comments","declarations","decls","decl","__importDefault","this$3","mod","StyleToObject","inline_style_parser_1","require_inline_style_parser","styleObject","hasIterator","CUSTOM_PROPERTY_REGEX","HYPHEN_REGEX","NO_HYPHEN_REGEX","VENDOR_PREFIX_REGEX","MS_VENDOR_PREFIX_REGEX","skipCamelCase","character","trimHyphen","style_to_object_1","this$2","require_cjs$1","utilities_1","require_utilities","StyleToJS","pointEnd","pointStart","VFileMessage","optionsOrParentOrPlace","legacyCause","causeOrReason","emptyMap","tableElements","tableCellElement","docs","toJsxRuntime","developmentCreate","productionCreate","mdxExpression","mdxJsxElement","mdxEsm","parentSchema","findComponentFromName","createElementProps","createChildren","addNode","addChildren","crashEstree","createJsxElementProps","jsxs","jsx","isStaticChildren","jsxDEV","alignValue","objectExpression","countsByName","commas","spaces","parseStyle","transformStylesToCssCasing","styleToJs","allowExpression","identifiers","isIdentifierName","name$1","cssCasing","domCasing","transformStyleToCssCasing","toDash","urlAttributes","remarkParse","blockquote","strikethrough","footnoteReference","clobberPrefix","safeId","reuseCounter","sup","revert","subtype","contents","imageReference","inlineCode","linkReference","loose","listLoose","listItemLoose","firstRow","tableContent","tableRow","cellIndex","cells","cell","tableCell","trimLines","trimLine","deserializer","unpair","deserialize","serialized","EMPTY","typeOf","asString","shouldSkip","serializer","strict","spread","serialize","lossy","esm_default","defaultFootnoteBackContent","rereferenceIndex","defaultFootnoteBackLabel","footer","footnoteBackContent","footnoteBackLabel","footnoteLabel","footnoteLabelTagName","footnoteLabelProperties","listItems","backReferences","counts","tailTail","structuredClone","testOrVisitor","visitorOrReverse","maybeReverse","overload","createState","definitionById","footnoteById","defaultHandlers","patch$1","wrap$1","shallow","defaultUnknownHandler","trimMarkdownSpaceStart","applyData","hName","hChildren","hProperties","toHast","foot","remarkRehype","destination","hastTree","file","bail","toStr","gOPD","hasOwnConstructor","hasIsPrototypeOf","getProperty","copyIsArray","trough","fns","pipeline","middlewareIndex","middelware","fnExpectsCallback","middleware","minpath","basename","extname","assertPath$1","seenNonSlash","firstNonSlashEnd","extnameIndex","dirname","unmatchedSlash","startPart","startDot","preDotState","joined","absolute","normalizeString","lastSegmentLength","lastSlash","dots","lastSlashIndex","allowAboveRoot","assertPath","minproc","cwd","isUrl","fileUrlOrPath","urlToPath","getPathFromURLPosix","third","VFile","isUint8Array","assertNonEmpty","assertPart","stem","CallableInstance","unified","Processor","attacher","assertUnfrozen","realFile","vfile","assertParser","assertCompiler","parseTree","realDone","compileTree","compileResult","looksLikeAValue","complete","assertDone","assertNode","transformers","resultingTree","outputTree","attachers","addPlugin","addPreset","entryIndex","currentPrimary","isPlainObj","asyncName","looksLikeAVFile","emptyPlugins","emptyRemarkRehypeOptions","safeProtocol","deprecations","Markdown","createProcessor","createFile","post","rehypePlugins","remarkPlugins","remarkRehypeOptions","allowedElements","allowElement","disallowedElements","skipHtml","unwrapDisallowed","urlTransform","defaultUrlTransform","deprecation","import_jsx_runtime","colon","questionMark","numberSign","transformDodLinks","class","\"tabindex\"","dodTrackNote","COLOR_SYNTAX_REGEX","transformColorSyntax","SimpleMarkdownText","useParagraphs","markdownCustomComponents","openLinksInNewTab","dataTrackNote","HtmlOrSimpleMarkdownText","htmlRegex","reactRenderToStringClientOnly","createRoot","DOD_TIPPY_PROPS","allowHTML","interactive","hideOnClick","renderDodContentHtml","markdownTextWrap","cleanupPreviousInitialization","initializeDetailsOnDemand","details","onDodShown","instancesByDodSpan","addEventListener","handleEvent","Element","getAttribute","showDod","dodSpan","dod","onShow","hideDodsNotContaining","isVisible","cleanupDetailsOnDemand","removeEventListener","clear","getLinkType","urlString","getUrlTarget","gdocsMatch","gdocId","dodMatch","dodId","guidedChartMatch","guidedChartId","convertHeadingTextToId","urlSlug","headingText","getCanonicalUrl","baseUrl","getCanonicalPath","ExpandableToggle","alwaysVisibleDescription","isExpandedDefault","hasTeaser","contentId","onToggle","inert","DATAPAGE_ABOUT_THIS_DATA_SECTION_ID","DATAPAGE_SOURCES_AND_PROCESSING_SECTION_ID","INDICATOR_PROCESSING_SECTION_ID","makeSource","isEmbeddedInADataPage","processingId","isEmbedded","processingLevelPhrase","makeLastUpdated","makeNextUpdate","makeDateRange","dateRange","makeUnit","makeUnitConversionFactor","unitConversionFactor","splitSourceTextIntoFragments","makeLinks","trackNote","linkFragments","urlOrText","IndicatorProcessing","descriptionProcessing","MetadataBoxExpander","preview","showMoreLabel","detailsRef","fallbackDetailsRef","resolvedDetailsRef","summaryRef","onClick","summary","preventDefault","scrollBy","MetadataBoxCollapseButton","MetadataBoxSection","MetadataBoxReuseNotice","MetadataBoxKeyData","MetadataBoxKeyDataRow","isFullWidth","isLabelScreenReaderOnly","labelClassName","ChartLicenseNotice","license","ccBy","chartLicense","BESPOKE_METADATA_TITLE","getBespokeKeyDataRows","BespokeMetadataKeyData","CodeSnippet","useMarkdown","forceShowCopyButton","codeAttributes","onCopy","canCopy","setCanCopy","hasCopied","setHasCopied","success","DataCitation","citationShort","citationLong","IndicatorSources","uniqueSources","SourceContent","hideReuseThisWorkText","retrievedFromTrackNote","descriptionTrackNote","description","citation","hideTeasers","onSourceToggle","isOpen","NonExpandable","retrievedOn","showKeyInfo","dataPublishedBy","retrievedFrom","BespokeMetadataSections","pageCitation","faqs","short","long","faq","question","answer","descriptionFromProducer","$a4e76a5424781910$export$e08e3b67e392101e","$c4867b2f328c2698$export$e5c5a5f917a5871c","$c7eafbbe1ea5834e$var$defaultContext","$c7eafbbe1ea5834e$var$SSRContext","$c7eafbbe1ea5834e$var$IsSSRContext","$c7eafbbe1ea5834e$var$componentIds","$c7eafbbe1ea5834e$var$useCounter","$bl59K$useContext","$bl59K$useRef","currentOwner","$bl59K$react","prevComponentValue","$c7eafbbe1ea5834e$var$useLegacySSRSafeId","defaultId","$c7eafbbe1ea5834e$var$useModernSSRSafeId","didSSR","$bl59K$useState","$c7eafbbe1ea5834e$export$535bd6ca7f90a273","$c7eafbbe1ea5834e$export$619500959fc48b26","'useId'","$c7eafbbe1ea5834e$var$getSnapshot","$c7eafbbe1ea5834e$var$getServerSnapshot","$c7eafbbe1ea5834e$var$subscribe","'useSyncExternalStore'","$1a716630a9e3a599$export$14d238f342723f25","setValue","$dPTrK$useState","currValue","$dPTrK$useRef","nextRef","$dPTrK$useCallback","$390e54f620492c70$var$canUseDOM","$390e54f620492c70$export$d41a04c74483c6ef","$390e54f620492c70$var$registry","heldValue","$390e54f620492c70$var$registeredIds","$390e54f620492c70$export$f680877a34711e37","$4QKZm$useState","$4QKZm$useRef","cleanupRef","registeredId","cacheIdRef","$4QKZm$useEffect","$390e54f620492c70$export$cd8c9cb68f842629","idA","idB","setIdsA","setIdsB","$390e54f620492c70$export$b4cc09c592e8fdb8","resolvedId","setResolvedId","$4QKZm$useCallback","depArray","$4064df0d6f9620e1$export$c9058316764c140e","refs","hasCleanup","cleanups","$4064df0d6f9620e1$var$setRef","$bbaa08b3cd72f041$export$9d1611c77c2fe928","$aPpn7$clsx","$03e8ab2d84d7657a$export$4338b53315abf666","objRef","$i6EpZ$useRef","refEffect","$i6EpZ$useCallback","refCallback","$i6EpZ$useMemo","$7230ffa83bc0c2cf$export$c62b8e45d58ddad9","$7230ffa83bc0c2cf$export$2881499e37b75b9a","$7230ffa83bc0c2cf$export$4d86445c2cf5e3","$ahdqC$useMemo","computedClassName","computedChildren","defaultStyle","defaultChildren","defaultClassName","$7230ffa83bc0c2cf$export$fabf2dc03a41866e","$ahdqC$useContext","availableSlots","errorMessage","$7230ffa83bc0c2cf$export$29f1550f4b0d4415","contextRef","contextProps","mergedRef","$ahdqC$useObjectRef","$ahdqC$mergeRefs","mergedProps","$ahdqC$mergeProps","contextStyle","renderProps","$7230ffa83bc0c2cf$export$9d4c57ee4c6ffdd8","hasSlot","setHasSlot","$ahdqC$useState","$ahdqC$useRef","$ahdqC$useCallback","$7230ffa83bc0c2cf$export$ef03459518577ad4","filteredProps","$7230ffa83bc0c2cf$var$DOMElement","elementRef","forwardedRef","ElementType","domProps","$7230ffa83bc0c2cf$var$domComponentCache","$7230ffa83bc0c2cf$export$df3a06d6289f983e","$ahdqC$forwardRef","$8b2399d051d06d4c$export$447a38995de2c711","$8b2399d051d06d4c$export$831c820ad60f9d12","$d447af545b77c9f1$export$b204af158042fbac","$d447af545b77c9f1$var$isWindow","$d447af545b77c9f1$export$62858bae88b53fd0","$d447af545b77c9f1$export$f21a1ffae260145a","$d447af545b77c9f1$export$8ee0fc9ee280b4ee","$d447af545b77c9f1$export$af51f0f06c0f328a","$d447af545b77c9f1$export$f531f92e2a15358f","eventTargets","eventTarget","$d447af545b77c9f1$export$37a5fde709c1db82","styleTargets","styleTarget","initialPriority","$6a20a7989e6c817a$var$_shadowDOM","$6a20a7989e6c817a$export$98658e8c59125e6a","$23f2114a1b82827e$export$4282f70798064fe0","$eXv8n$shadowDOM","$23f2114a1b82827e$export$cd4e5573fbe2b576","$23f2114a1b82827e$export$e58f029f0fbfdb29","$23f2114a1b82827e$export$da7af4355d792141","toRoot","$23f2114a1b82827e$export$b4f377a2b6254582","$b72f3f7b3b5f42c6$export$76e4e37e5339496d","$b72f3f7b3b5f42c6$export$759df0d867455a91","$b72f3f7b3b5f42c6$export$6c5dc7e81d2cc29a","$b72f3f7b3b5f42c6$export$2b35b76d2e30e129","activeDescendant","$1969ac565cfec8d0$export$de79e2c695e052f3","$ae77152785188400$var$supportsCheckVisibility","$ae77152785188400$var$isStyleVisible","windowObject","visibility","computedDisplay","computedVisibility","$ae77152785188400$var$isAttributeVisible","childElement","$ae77152785188400$export$e989c0fffaa6b27a","$3b8b240c1bf84ab9$var$focusableElements","$3b8b240c1bf84ab9$var$FOCUSABLE_ELEMENT_SELECTOR","$3b8b240c1bf84ab9$var$TABBABLE_ELEMENT_SELECTOR","$3b8b240c1bf84ab9$export$4c063cf1350e6fed","$3b8b240c1bf84ab9$var$isInert","$3b8b240c1bf84ab9$export$bebd5a1431fec25d","$a92dc41f639950be$export$525bc4921d56d4a","$a92dc41f639950be$export$c2b7abe5d61ec696","$a92dc41f639950be$export$715c682d09d639cc","stateRef","$lIB5W$useRef","$lIB5W$useCallback","onBlur","relatedTargetEl","$a92dc41f639950be$export$fda7da73ab5d4c48","$a92dc41f639950be$export$cabe61c495ee3649","targetRoot","isFocusMovingToTarget","focusTarget","isBlurFromActiveElement","isRefocusing","onFocusOut","onFocus","onFocusIn","raf","$2add3ce32c6007eb$var$testUserAgent","brands","\"userAgentData\"","brand","$2add3ce32c6007eb$var$testPlatform","$2add3ce32c6007eb$var$cached","$2add3ce32c6007eb$export$9ac100e40613ea10","$2add3ce32c6007eb$export$186c6964ca17d99","$2add3ce32c6007eb$export$7bef049ce92e4224","$2add3ce32c6007eb$export$fedb369cb70207f1","$2add3ce32c6007eb$export$e1865c3bedcd822b","$2add3ce32c6007eb$export$78551043582a6a98","$2add3ce32c6007eb$export$6446a186d09e379e","$2add3ce32c6007eb$export$a11b0059900ceec8","$b5c62b033c25b96d$export$60278871457622de","$b5c62b033c25b96d$export$29bf1b5f2c56cf63","$caaf0dd3060ed57c$var$RouterContext","$epzQQ$createContext","$caaf0dd3060ed57c$var$openSyntheticLink","$caaf0dd3060ed57c$export$9a302a45f65d0572","$epzQQ$useContext","$caaf0dd3060ed57c$export$efa8c9099e530235","$caaf0dd3060ed57c$export$95185d699e05d4d7","setOpening","$caaf0dd3060ed57c$var$getSyntheticLink","$caaf0dd3060ed57c$export$7e924b3091a3bd18","linkProps","$caaf0dd3060ed57c$export$13aea1a3cb5e3f1f","router","routerOptions","$8f5a2122b0992be3$var$currentModality","$8f5a2122b0992be3$var$currentPointerType","$8f5a2122b0992be3$export$901e90a13c50a14e","$8f5a2122b0992be3$export$d90243b58daecda7","$8f5a2122b0992be3$var$hasEventBeforeFocus","$8f5a2122b0992be3$var$hasBlurredWindowRecently","$8f5a2122b0992be3$var$FOCUS_VISIBLE_INPUT_KEYS","$8f5a2122b0992be3$var$triggerChangeHandlers","modality","$8f5a2122b0992be3$var$isValidKey","$8f5a2122b0992be3$var$handleKeyboardEvent","$8f5a2122b0992be3$var$handlePointerEvent","$8f5a2122b0992be3$var$handleClickEvent","$8f5a2122b0992be3$var$handleFocusEvent","$8f5a2122b0992be3$var$handleWindowBlur","$8f5a2122b0992be3$var$handleInvalidEvent","startingActiveElement","$8f5a2122b0992be3$export$8397ddfc504fdb9a","$8f5a2122b0992be3$var$setupGlobalFocusEvents","documentObject","$8f5a2122b0992be3$var$tearDownWindowFocusTracking","loadListener","$8f5a2122b0992be3$export$2f1888112f558a7d","$8f5a2122b0992be3$export$b9b3dfddab17db27","$8f5a2122b0992be3$export$630ff653c5ada6a9","$8f5a2122b0992be3$export$887a228355cf7d95","$8f5a2122b0992be3$var$nonTextInputTypes","$8f5a2122b0992be3$var$isKeyboardFocusEvent","IHTMLInputElement","IHTMLTextAreaElement","IHTMLElement","IKeyboardEvent","isTextInput","$8f5a2122b0992be3$export$ec71b4b83ac08ec3","$7U4qw$useEffect","$9dd2209c22b301e2$exports","\"collectionLabel\"","$f4ee495ec2e82b79$exports","$3gLSz$intlautocompleteenUSmjs","$7096878c21af5e66$export$a929f3f93e2cc67e","$bb39c0fc1c19b34c$var$KEYBOARD_HEIGHT","$bb39c0fc1c19b34c$var$KEYBOARD_TIMEOUT","$bb39c0fc1c19b34c$var$state","$bb39c0fc1c19b34c$var$nonTextInputTypes","$bb39c0fc1c19b34c$var$getTouchScreen","screenWidth","screenHeight","visualScale","$bb39c0fc1c19b34c$var$onResizeStart","$bb39c0fc1c19b34c$var$onResizeEnd","viewportMeta","screen","willKeyboardOpen","$bb39c0fc1c19b34c$export$c57958e35f31ed73","$bb39c0fc1c19b34c$var$onOrientationChange","$bb39c0fc1c19b34c$var$onFocus","$bb39c0fc1c19b34c$var$setupGlobalEvents","$bb39c0fc1c19b34c$export$a986ed8aea890397","isTextArea","isEditable","$bb39c0fc1c19b34c$export$16792effe837dba3","$bb39c0fc1c19b34c$export$b1f1c83775b8b5f7","$fe16bffc7a557bf0$var$useEarlyEffect","'useInsertionEffect'","$fe16bffc7a557bf0$export$7f54fc3180508a52","$emnFQ$useRef","$emnFQ$useCallback","$600b3cf69ae46262$export$90fc3a17d93f704c","$jBdOV$useEffect","$e8ac3c3f5d4bae7f$export$d6875122194c7b44","labelledBy","defaultLabel","$d805ff57cab8bee2$var$RTL_SCRIPTS","$d805ff57cab8bee2$var$RTL_LANGS","$d805ff57cab8bee2$export$702d680b21cbd764","localeString","textInfo","$520a025cdb0d710d$var$localeSymbol","$520a025cdb0d710d$export$f09106e7c6677ec5","$520a025cdb0d710d$var$currentLocale","$520a025cdb0d710d$var$listeners","$520a025cdb0d710d$var$updateLocale","$520a025cdb0d710d$export$188ec29ebc2bdc3a","isSSR","setDefaultLocale","$lEF9U$useState","$lEF9U$useEffect","$2eb8e6d23f3d0cb0$var$I18nContext","$2eb8e6d23f3d0cb0$var$I18nProviderWithLocale","$2eb8e6d23f3d0cb0$var$I18nProviderWithDefaultLocale","$2eb8e6d23f3d0cb0$export$a54013f0d02a8f82","$2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7","$01Dwp$useContext","$a747a10fe70a57da$var$localeSymbol","$a747a10fe70a57da$var$stringsSymbol","$a747a10fe70a57da$var$cachedGlobalStrings","$a747a10fe70a57da$export$c17fa47878dc55b6","messages","$a747a10fe70a57da$var$getStringsForLocale","globalStrings","pkg","packageName","$a747a10fe70a57da$var$getLanguage","$a747a10fe70a57da$var$getScript","$b27c684a33948c64$var$pluralRulesCache","$b27c684a33948c64$var$numberFormatCache","$b27c684a33948c64$export$2f817fcdc4b89ae0","variables","pluralRules","numberFormat","$cf2482eff2eeeec2$var$cache","$cf2482eff2eeeec2$var$getCachedDictionary","$hwcjY$LocalizedStringDictionary","$cf2482eff2eeeec2$export$87b761675e8eaa10","$cf2482eff2eeeec2$export$f12b703ca79dfbb1","$hwcjY$useMemo","$hwcjY$LocalizedStringFormatter","$parcel$interopDefault","$134103e19bdfd846$export$1e40b3ca02d92d21","collectionId","$7qCLe$useRef","delayNextActiveDescendant","queuedActiveDescendant","isMobileScreenReader","shouldUseVirtualFocus","setShouldUseVirtualFocus","$7qCLe$useState","disableVirtualFocus","hasCollection","setHasCollection","autoFocusOnMount","setAutoFocusOnMount","$7qCLe$useEffect","updateActiveDescendantEvent","inputRef","collectionRef","collectionNode","setCollectionNode","$7qCLe$useCallback","mergedCollectionRef","$7qCLe$useMemo","focusFirstItem","clearVirtualFocus","clearFocusEvent","lastInputType","inputType","disableAutoFocusFirst","keyDownTarget","onKeyDown","focusedNodeId","focusCollection","shouldPerformDefaultAction","onKeyUpCapture","collectionProps","$7qCLe$intlStringsmjs","filterFn","nodeTextValue","lastFocusedNode","onPointerDown","inputProps","virtualFocusProps","$3e6197669829fe11$var$useEarlyEffect","$3e6197669829fe11$export$40bfa8c7b0832715","stateValue","setStateValue","$1CcWn$useState","valueRef","$1CcWn$useRef","isControlledRef","isControlled","$1CcWn$useEffect","forceUpdate","$1CcWn$useReducer","$1CcWn$useCallback","$436a01f8a2730afd$export$ce1595f6e1a63433","propsOnInputChange","propsInputValue","propsDefaultInputValue","onInputChange","setFocusedNodeId","$7kYgW$useState","inputValue","setInputValue","$4b38b5b75ecc6208$export$36e687af51cd0967","$1J3Gn$createContext","$4b38b5b75ecc6208$export$68ee3368b6d68148","$4b38b5b75ecc6208$export$b0d3ecf7112093a7","$4b38b5b75ecc6208$export$698f465ec27e93df","$4b38b5b75ecc6208$export$2f2b9559550c7bbc","$1J3Gn$mergeProps","$1J3Gn$useAutocompleteState","$1J3Gn$useRef","$1J3Gn$useAutocomplete","$6f0c29017aeec335$export$d68d59712b04d9d1","newCollection","$6f0c29017aeec335$export$b1918e978f1ee46f","lastKey","$6f0c29017aeec335$var$filterChildren","newNode","$6f0c29017aeec335$export$5ae2504e948afce5","$6f0c29017aeec335$export$8258a0665a675899","$6f0c29017aeec335$export$fd11f34e1d07f134","$6f0c29017aeec335$export$437f11dc9b403b78","filteredSection","lastChild","$6f0c29017aeec335$export$408d25a4e12db025","oldCollection","firstChildKey","firstNode","lastNode","prevKey","$96ead35620b8fd36$export$410b0c854570d131","previousSibling","nextSibling","referenceNode","$96ead35620b8fd36$export$dc064fe9e59310fd","nextColIndex","siblingNode","CollectionNodeClass","rendered","textValue","$96ead35620b8fd36$export$b34a105447964f9f","$a80bd3e9349588e7$export$727c8fc270210f13","childrenString","$2NO26$useMemo","cacheKey","$a80bd3e9349588e7$var$isWeakKey","idScope","$2NO26$cloneElement","addIdAndValue","$081cb5757e08788e$var$transitionsByElement","$081cb5757e08788e$var$transitionCallbacks","$081cb5757e08788e$var$isTransitionEvent","$081cb5757e08788e$var$onTransitionStart","$081cb5757e08788e$var$onTransitionEnd","$081cb5757e08788e$var$setupGlobalEvents","$081cb5757e08788e$var$cleanupDetachedElements","$081cb5757e08788e$export$24490316f764c430","$f192c2f16961cbe0$export$80f3e147d781571c","lastFocusedElement","$1e74c67db218ce67$export$f8168d8dd8fd66e6","onFocusProp","onBlurProp","$3siB1$useCallback","onFocusChange","onSyntheticFocus","$8dba16319206abb6$export$48d1ea6320830260","shouldStopPropagation","$cbf729ad7eb217b0$var$MODIFIER_NAMES","$cbf729ad7eb217b0$var$CANONICAL_MODIFIER_ORDER","$cbf729ad7eb217b0$export$9932402e211e7315","$cbf729ad7eb217b0$export$bf26c410e1f8fe6d","$cbf729ad7eb217b0$var$sortedModifierTokens","$cbf729ad7eb217b0$export$d636f01a2eaffd51","spec","$cbf729ad7eb217b0$var$normalizeEventKey","$cbf729ad7eb217b0$var$KEY_ALIASES","$cbf729ad7eb217b0$var$canonicalKeyFromSpecKey","specKey","$cbf729ad7eb217b0$export$6cfa2ace150c84a5","mods","$cbf729ad7eb217b0$export$786304bda41dd69f","$cbf729ad7eb217b0$export$2fd1fc8039383ae1","bindings","$8296dad1a4c5e0dc$export$8f71654801c2f7cd","onKeyUp","shortcuts","shortcutHandler","shortcutOnKeyDown","allowRepeats","allowComposing","shortcutOnKeyUp","$b7115c395c64f7b5$export$4debdb1a3f0fa79e","$d1116acdf220c2da$export$f9762fab77588ecb","$d1116acdf220c2da$var$useFocusableContext","$fKWKs$useContext","$d1116acdf220c2da$export$13f3202a3e5ddd5","$d1116acdf220c2da$export$4c014de7c8940b4c","interactions","focusProps","keyboardProps","domRef","interactionProps","autoFocusRef","$fKWKs$useRef","$fKWKs$useEffect","$d7f64c32b702fe2c$export$94b6d0abf7d33e8c","$iuCOg$createContext","$d7f64c32b702fe2c$export$8dc98ba7eadeaa56","$iuCOg$useContext","$d7f64c32b702fe2c$export$86427a43e3e48ebb","$iuCOg$forwardRef","$d7f64c32b702fe2c$export$b5d7cc18bb8d2b59","useDebugValue","useSyncExternalStore$2","useSyncExternalStore$1","require_use_sync_external_store_shim_production","$42ceafc619f9c3ba$var$ShallowRenderContext","$kT5Ur$createContext","$42ceafc619f9c3ba$var$CollectionDocumentContext","$42ceafc619f9c3ba$export$bf788dd355e3a401","$kT5Ur$useContext","$42ceafc619f9c3ba$var$useCollectionDocument","$42ceafc619f9c3ba$var$CollectionInner","$42ceafc619f9c3ba$var$useSyncExternalStoreFallback","isSSRRef","$kT5Ur$useRef","getSnapshotWrapper","$kT5Ur$useCallback","$kT5Ur$useSyncExternalStore","$42ceafc619f9c3ba$var$useSyncExternalStore","$kT5Ur$useState","createCollection","$42ceafc619f9c3ba$var$SSRContext","$42ceafc619f9c3ba$var$createCollectionNodeClass","$42ceafc619f9c3ba$var$useSSRCollectionNode","itemRef","$42ceafc619f9c3ba$export$18af5c7a9e9b3664","$kT5Ur$forwardRef","focusableProps","$42ceafc619f9c3ba$export$e953bb1cd0f19726","$42ceafc619f9c3ba$var$useCollectionChildren","useChildren","$42ceafc619f9c3ba$var$CollectionContext","$42ceafc619f9c3ba$export$fb8073518f34e6ec","$42ceafc619f9c3ba$var$CollectionRoot","$kT5Ur$useMemo","wrappedChildren","$kT5Ur$createPortal","$263ab7fc0f95ccdb$export$d40e14dec8b060a8","$f0m83$createContext","$263ab7fc0f95ccdb$export$a164736487e3f0ae","$263ab7fc0f95ccdb$var$useCollectionRender","renderDropIndicator","$f0m83$useCachedChildren","$263ab7fc0f95ccdb$export$2dbbd341daed716d","keyAfter","nextItemInFlattenedCollection","nextItemInSameLevel","afterIndicators","$f0m83$isValidElement","$f0m83$cloneElement","$263ab7fc0f95ccdb$export$4feb769f8ddf26c5","$263ab7fc0f95ccdb$export$90e00781bc59d8f9","$f0m83$useMemo","focusedKey","$8e9d2fae0ecb9001$var$DOMPropNames","$8e9d2fae0ecb9001$var$labelablePropNames","$8e9d2fae0ecb9001$var$linkPropNames","$8e9d2fae0ecb9001$var$globalAttrs","$8e9d2fae0ecb9001$var$globalEvents","$8e9d2fae0ecb9001$var$propRe","$8e9d2fae0ecb9001$export$457c3d6518dd4c6f","labelable","isLink","propNames","$cbf007e418543821$var$state","$cbf007e418543821$var$savedUserSelect","$cbf007e418543821$var$modifiedElementMap","$cbf007e418543821$export$16a4697467175487","$cbf007e418543821$export$b0d6fa1ab32e3295","targetOldUserSelect","$2b2d34ff061957fb$var$nonceCache","$2b2d34ff061957fb$export$2b85b721e524d74b","nonce","$24f9a20f226ad820$export$5165eccb35aaadb5","$48a7d519b337145d$export$4eaf04e54aa8eed6","globalListeners","$awe0O$useRef","addGlobalListener","$awe0O$useCallback","removeGlobalListener","removeAllGlobalListeners","$awe0O$useEffect","$d27d541f9569d26d$var$usePressResponderContext","$fL2C6$useContext","register","$d27d541f9569d26d$var$PressEvent","#shouldStopPropagation","originalEvent","$d27d541f9569d26d$var$LINK_CLICKED","$d27d541f9569d26d$var$STYLE_ID","$d27d541f9569d26d$var$PRESSABLE_ATTRIBUTE","$d27d541f9569d26d$export$45712eceda6fad21","isPressedProp","isPressed","setPressed","$fL2C6$useState","$fL2C6$useRef","triggerPressStart","$fL2C6$useCallback","onPressStart","onPressChange","triggerPressEnd","onPressEnd","onPress","wasPressed","triggerPressEndEvent","triggerPressUpEvent","onPressUp","$d27d541f9569d26d$var$createEvent","allowTextSelectionOnPress","cancelEvent","$fL2C6$useEffect","cancelOnPointerExit","shouldCancelOnPointerExit","triggerClick","triggerSyntheticClick","pressProps","$fL2C6$useMemo","$d27d541f9569d26d$var$isValidKeyboardEvent","$d27d541f9569d26d$var$shouldPreventDefaultKeyboard","originalTarget","stopPressStart","stopPressUp","stopPressEnd","$d27d541f9569d26d$var$isHTMLAnchorLink","onPointerUp","onPointerCancel","preventFocusOnPress","clicked","role","$d27d541f9569d26d$var$isValidInputKey","$d27d541f9569d26d$var$shouldPreventDefaultUp","$d27d541f9569d26d$var$nonTextInputTypes","$2c9edc598a03d523$export$420e68273165f4ec","$5319z$useRef","$5319z$useCallback","onBlurWithin","onFocusWithinChange","onFocusWithin","$0c4a58759813079a$export$4e328f61c538687f","$3s2y0$useRef","autoFocus","isFocused","setFocused","$3s2y0$useState","isFocusVisibleState","setFocusVisible","updateState","$3s2y0$useCallback","isFocusVisible","focusWithinProps","$e969f22b6713ca4a$var$globalIgnoreEmulatedMouseEvents","$e969f22b6713ca4a$var$hoverCount","$e969f22b6713ca4a$var$setGlobalIgnoreEmulatedMouseEvents","$e969f22b6713ca4a$var$handleGlobalPointerEvent","$e969f22b6713ca4a$var$setupGlobalTouchEvents","$e969f22b6713ca4a$export$ae780daf29e6d456","isHovered","setHovered","$hZqKM$useState","$hZqKM$useRef","$hZqKM$useEffect","$hZqKM$useMemo","triggerHoverStart","triggerHoverEnd","onHoverStart","onHoverChange","onHoverEnd","hoverProps","$43a3b93638fe5db9$export$75b6ee27786ba447","$32wDz$createContext","$43a3b93638fe5db9$export$b04be29aa201d4f5","$32wDz$createHideableComponent","labelProps","$0beb20c9744a2065$export$8467354a121f1b9f","ariaLabelledby","labelId","labelElementType","fieldProps","$1dfb119a85e764e5$var$formatterCache","$1dfb119a85e764e5$var$supportsSignDisplay","$1dfb119a85e764e5$export$cc77c4ff7e8673c5","$1dfb119a85e764e5$var$getCachedNumberFormatter","$1dfb119a85e764e5$export$711b50b3c525e0f2","startParts","endParts","numberingSystem","numberFormatter","signDisplay","needsPositiveSign","negative","noSign","$eb76cf4feb040f77$var$CURRENCY_SIGN_REGEX","$eb76cf4feb040f77$var$NUMBERING_SYSTEMS","$eb76cf4feb040f77$export$cd11ab140839f11d","$eb76cf4feb040f77$var$getNumberParserImpl","$eb76cf4feb040f77$var$numberParserCache","defaultParser","$eb76cf4feb040f77$var$getCachedNumberParser","$eb76cf4feb040f77$var$NumberParserImpl","$eb76cf4feb040f77$var$getSymbols","isGroupSymbolAllowed","fullySanitizedValue","isNegative","$eb76cf4feb040f77$var$replaceAll","$eb76cf4feb040f77$var$nonLiteralParts","$eb76cf4feb040f77$var$pluralNumbers","symbolFormatter","intlOptions","allParts","posAllParts","pluralParts","noNumeralUnits","minusSign","plusSign","originalOptions","allPartsLiterals","$eb76cf4feb040f77$var$escapeRegex","pluralPartsLiterals","sortedLiterals","literals","numeral","$240e9101ba2842f5$export$7d15b64cf5a3a4c4","$6c0095e7e99364f2$export$e9f3bf65a26ce129","$8MuvO$createContext","$a46cf152bb926da5$var$LIVEREGION_TIMEOUT_DELAY","$a46cf152bb926da5$var$liveAnnouncer","$a46cf152bb926da5$export$a9b970dcc4ae71a9","assertiveness","$a46cf152bb926da5$var$LiveAnnouncer","$a46cf152bb926da5$export$d10ae4f68404609a","ariaLive","$ac4318a9c075bb9f$export$ea18c227d4417cc3","additionalProps","allowFocusWhenDisabled","buttonProps","$7705c033048f6da7$export$24d547caef80ccd1","$9s8kH$createContext","$7705c033048f6da7$export$353f5b6fc5456de1","$9s8kH$createHideableComponent","$9s8kH$useButton","$7705c033048f6da7$var$useDisableInteractions","isPending","$9s8kH$useFocusRing","$9s8kH$useHover","renderValues","buttonId","$9s8kH$useId","progressId","wasPending","$9s8kH$useRef","$9s8kH$useEffect","DOMProps","$9s8kH$filterDOMProps","$9s8kH$mergeProps","$7705c033048f6da7$var$PRESERVED_EVENT_PATTERN","$2ec61d1d4f780267$export$d688439359537581","$6Xi9O$createContext","$2ec61d1d4f780267$export$a8a3e93435678ff9","$6Xi9O$forwardRef","$efe09c6d1c304b50$export$9afb8bc826b033ea","$cGkLv$createContext","$efe09c6d1c304b50$export$5f1af8db9871e1d6","$cGkLv$createHideableComponent","$9c268ab73a5d55e5$export$722debc0e56fea39","$1QAm5$useRef","$09ec6a572d60460f$export$842a2cf37af977e1","numerator","$93635573935797de$var$EPOCH","$93635573935797de$export$f297eb839006d339","$93635573935797de$export$c36e0ecb2d4fa69d","era","monthOffset","$93635573935797de$export$553d7fa8e3805fc0","$93635573935797de$export$4475b7e617eb123c","$93635573935797de$var$daysInMonth","$93635573935797de$export$80ee6245ec4f29ec","jd0","jd","depoch","quadricent","dqc","cent","dcent","quad","dquad","yindex","yearDay","leapAdj","$2aaf608024c21ca1$export$99faa760c7908e4f","$ad063034c8620db8$export$dbc69fd56b53d5e","$ad063034c8620db8$export$461939dd4422153","$d07e34cce18680fd$export$1b96692a1ba042ac","timeZone","$ad063034c8620db8$export$68781ddf31c0090f","$ad063034c8620db8$export$c19a80a9721b80f6","$ad063034c8620db8$var$timeToMs","$ad063034c8620db8$var$localTimeZone","$ad063034c8620db8$var$localTimeZoneOverride","$ad063034c8620db8$export$aa8b41735afcabd2","$ad063034c8620db8$export$6ab69b273755230b","$d07e34cce18680fd$export$bd4fb2bc8bb06fb","$d07e34cce18680fd$export$b4a036af3fc0b032","$d07e34cce18680fd$var$epochFromParts","hour","minute","second","millisecond","$d07e34cce18680fd$export$59c99f3515d3493f","$d07e34cce18680fd$var$getTimeZoneParts","$d07e34cce18680fd$var$formattersByTimeZone","namedParts","$d07e34cce18680fd$var$DAYMILLIS","$d07e34cce18680fd$var$getValidWallTimes","earlier","later","$d07e34cce18680fd$var$isValidWallTime","$d07e34cce18680fd$export$5107c82f94518f5c","dateTime","$d07e34cce18680fd$export$b21e0b124e224484","disambiguation","offsetBefore","offsetAfter","$d07e34cce18680fd$export$e67a095c620b86fe","$2aaf608024c21ca1$export$d3b7288e7994edea","$d07e34cce18680fd$export$93522d1a439f3617","$2aaf608024c21ca1$export$ca871e8dbb80966f","calendar","calendarDate","$435a2ceaa8778ed8$export$c4e2ecac49351ef2","$d07e34cce18680fd$export$84c95a83c799e074","$d07e34cce18680fd$export$538b00033cc11c75","$d07e34cce18680fd$export$83aac07b4c37b25","$d07e34cce18680fd$export$d9b67bc93c097491","$435a2ceaa8778ed8$var$ONE_HOUR","$435a2ceaa8778ed8$export$e16d8520af44a096","mutableDate","days","$435a2ceaa8778ed8$var$addTimeFields","$435a2ceaa8778ed8$var$addYears","$435a2ceaa8778ed8$var$balanceYearMonth","$435a2ceaa8778ed8$var$constrainMonthDay","$435a2ceaa8778ed8$var$balanceDay","maxYear","isInverseEra","maxMonth","years","monthsInYear","$435a2ceaa8778ed8$export$3e2544e88a25bff8","inverseDuration","$435a2ceaa8778ed8$export$4e2d2ead65e5f7e3","$435a2ceaa8778ed8$export$adaa4cf7ef1b65be","$435a2ceaa8778ed8$export$e5d5e1c1822b6e56","mutableValue","$435a2ceaa8778ed8$export$7555de1e070510cb","$435a2ceaa8778ed8$var$balanceTime","$435a2ceaa8778ed8$var$nonNegativeMod","$435a2ceaa8778ed8$export$d52ced6badfb9a4c","mutable","eras","eraIndex","$435a2ceaa8778ed8$var$cycleValue","$435a2ceaa8778ed8$export$dd02b3e0007dfe28","hours","isPM","$435a2ceaa8778ed8$export$96b1d28349274637","$435a2ceaa8778ed8$export$6814caac34ca03c7","$435a2ceaa8778ed8$export$9a297d111fc86b79","plainDateTime","minDate","minAbsolute","maxDate","maxAbsolute","$435a2ceaa8778ed8$export$31b5430eb18be4f8","$58246871e4652552$var$DATE_RE","$58246871e4652552$var$DATE_TIME_RE","$58246871e4652552$var$ABSOLUTE_RE","$58246871e4652552$export$6b862160d295c8e","$58246871e4652552$var$parseNumber","$58246871e4652552$export$588937bcd60ade55","$58246871e4652552$export$f59dee82248f5ad4","$58246871e4652552$export$60dfd74aa96791bd","gregorianDate","$58246871e4652552$export$4223de14708adc63","$58246871e4652552$var$offsetToString","offsetHours","offsetMinutes","offsetSeconds","stringOffset","$58246871e4652552$export$bf79f1ebf4b18792","$2aaf608024c21ca1$var$shiftArgs","$34b940b49ba042df$var$ERA_START_DATES","$34b940b49ba042df$var$ERA_END_DATES","$34b940b49ba042df$var$ERA_ADDENDS","$34b940b49ba042df$var$ERA_NAMES","$34b940b49ba042df$var$findEraFromGregorianDate","$34b940b49ba042df$var$toGregorian","eraAddend","$34b940b49ba042df$export$b746ab2b60cdffbf","endYear","endMonth","endDay","startMonth","startDay","cur","$34b940b49ba042df$var$getMinimums","$63d4eafd4d826996$var$BUDDHIST_ERA_START","$63d4eafd4d826996$export$42d20a78301dee44","$63d4eafd4d826996$var$toGregorian","$c009cc5f64923054$var$TAIWAN_ERA_START","$c009cc5f64923054$var$gregorianYear","$c009cc5f64923054$var$gregorianToTaiwan","$c009cc5f64923054$export$65e01080afcb0799","$c009cc5f64923054$var$toGregorian","$a0cc0739a536c3b1$var$PERSIAN_EPOCH","$a0cc0739a536c3b1$var$MONTH_START","$a0cc0739a536c3b1$export$37fccdbfd14c5939","daysSinceEpoch","dayOfYear","$11fa67a177e45470$var$INDIAN_ERA_START","$11fa67a177e45470$var$INDIAN_YEAR_START","$11fa67a177e45470$export$39f31c639fa15726","indianYear","yDay","leapMonth","indianMonth","indianDay","mDay","$fd4f9bc1ba0e49a8$var$CIVIL_EPOC","$fd4f9bc1ba0e49a8$var$ASTRONOMICAL_EPOC","$fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_START","$fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_END","$fd4f9bc1ba0e49a8$var$UMALQURA_START_DAYS","$fd4f9bc1ba0e49a8$var$islamicToJulianDay","$fd4f9bc1ba0e49a8$var$julianDayToIslamic","$fd4f9bc1ba0e49a8$var$isLeapYear","$fd4f9bc1ba0e49a8$export$2066795aadd37bfc","$fd4f9bc1ba0e49a8$export$37f0887f2f9d22f7","$fd4f9bc1ba0e49a8$var$UMALQURA_DATA","$fd4f9bc1ba0e49a8$var$UMALQURA_MONTHLENGTH","$fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_START_TABLE","$fd4f9bc1ba0e49a8$var$umalquraYearStart","$fd4f9bc1ba0e49a8$var$umalquraMonthLength","$fd4f9bc1ba0e49a8$var$umalquraMonthStart","$fd4f9bc1ba0e49a8$var$umalquraYearLength","$fd4f9bc1ba0e49a8$export$5baab4758c231076","yearStart","startDays","endDays","yearLength","monthLength","$f39495b96f9dbac6$var$HEBREW_EPOCH","$f39495b96f9dbac6$var$DAY_PARTS","$f39495b96f9dbac6$var$MONTH_PARTS","$f39495b96f9dbac6$var$isLeapYear","$f39495b96f9dbac6$var$hebrewDelay1","months","$f39495b96f9dbac6$var$hebrewDelay2","present","$f39495b96f9dbac6$var$startOfYear","$f39495b96f9dbac6$var$getDaysInYear","$f39495b96f9dbac6$var$getYearType","$f39495b96f9dbac6$var$getDaysInMonth","yearType","$f39495b96f9dbac6$export$ca405048b8fb5af","ys","monthStart","previousDate","$97cfca9efd59523d$var$ETHIOPIC_EPOCH","$97cfca9efd59523d$var$COPTIC_EPOCH","$97cfca9efd59523d$var$AMETE_MIHRET_DELTA","$97cfca9efd59523d$var$ceToJulianDay","$97cfca9efd59523d$var$julianDayToCE","$97cfca9efd59523d$var$getLeapDay","$97cfca9efd59523d$var$getDaysInMonth","$97cfca9efd59523d$export$26ba6eab5e20cd7d","$97cfca9efd59523d$export$d72e0c37005a4914","$97cfca9efd59523d$export$fe6243cbe1a4b7c1","$84102b64e5ca022f$export$dd0bbc9b26defe37","$12a3c853105e5a70$var$formatterCache","$12a3c853105e5a70$export$ad991b66133851cf","$12a3c853105e5a70$var$getCachedDateFormatter","$12a3c853105e5a70$var$hasBuggyResolvedHourCycle","$12a3c853105e5a70$var$getResolvedHourCycle","$12a3c853105e5a70$var$hour12Preferences","$12a3c853105e5a70$var$hasBuggyHour12Behavior","defaultHourCycle","$12a3c853105e5a70$var$_hasBuggyHour12Behavior","$12a3c853105e5a70$var$_hasBuggyResolvedHourCycle","$60f33508b4cd9d3b$export$85fd5fdf27bacc79","$60f33508b4cd9d3b$var$isEqual","$guoDu$useMemo","$guoDu$DateFormatter","aKeys","bKeys","$901761b40e390936$export$2bb74740c4e19def","isScrollable","checkForOverflow","$3578607fe3d4b096$export$cfa2225e87938781","scrollableNode","$76d97191f0f90600$export$94ed1c92c7beeb22","parentElements","$51a3e22a5186a962$export$53a0910f038337bd","scrollView","$51a3e22a5186a962$export$f064fd83a2c6e9ca","itemStyle","viewStyle","isRoot","viewTop","viewBottom","viewLeft","viewRight","scrollMarginTop","scrollMarginBottom","scrollMarginLeft","scrollMarginRight","scrollPaddingTop","scrollPaddingBottom","scrollPaddingLeft","scrollPaddingRight","borderTopWidth","borderBottomWidth","borderLeftWidth","borderRightWidth","scrollAreaTop","scrollAreaBottom","scrollAreaLeft","scrollAreaRight","scrollBarOffsetX","scrollBarOffsetY","scrollBarWidth","scrollBarHeight","scrollPortTop","scrollPortBottom","scrollPortLeft","scrollPortRight","shouldScrollBlock","shouldScrollInline","inline","$51a3e22a5186a962$export$c826860796309d1b","originalLeft","originalTop","newTop","containingElement","$121970af65029459$var$descriptionId","$121970af65029459$var$descriptionNodes","$121970af65029459$export$f8aeda7b10753fa1","setId","$4UXHm$useState","$ea3928288112382f$var$styles","$ea3928288112382f$export$a966af930f325cab","$48drk$useState","isFocusable","combinedStyles","$48drk$useMemo","$ea3928288112382f$export$439d29a4e110a164","visuallyHiddenProps","$1f3c3b1a70cec653$export$ff05c3ac10437e03","$QpkXT$createContext","$fd2148440a13ec26$export$aca958c65c314e6c","$fd2148440a13ec26$var$CUSTOM_VALIDITY_STATE","$fd2148440a13ec26$export$dad6ae84456c676a","$fd2148440a13ec26$export$571b5131b7e65c11","$8AuPP$createContext","$fd2148440a13ec26$export$a763b9476acd3eb","$fd2148440a13ec26$export$fc1a364ae1f3ff10","\"__reactAriaFormValidationState\"","$fd2148440a13ec26$var$useFormValidationStateImpl","validationState","controlledError","isInvalid","clientError","$8AuPP$useMemo","$fd2148440a13ec26$var$getValidationResult","$fd2148440a13ec26$var$runValidate","builtinValidation","serverErrors","$8AuPP$useContext","serverErrorMessages","$fd2148440a13ec26$var$asArray","lastServerErrors","setLastServerErrors","$8AuPP$useState","isServerErrorCleared","setServerErrorCleared","serverError","nextValidation","$8AuPP$useRef","currentValidity","setCurrentValidity","commitValidation","commitQueued","setCommitQueued","$fd2148440a13ec26$var$isEqualValidation","$8AuPP$useEffect","validationBehavior","$cdaed739b1139372$export$c24727297075ec6a","$iSTzu$createContext","$cdaed739b1139372$export$a7fed597f4b8afd8","$iSTzu$forwardRef","$iSTzu$FormValidationContext","validationErrors","$191c9b6d48a0a4e2$export$294aa081a6c6f55d","descriptionId","errorMessageId","$3274bf1495747a7b$export$5add1d006293d136","handleReset","$1HUBd$useEffect","$860f7da480e22816$export$b8473d3665f3a75a","$860f7da480e22816$var$getNativeValidity","isIgnoredReset","$axvKP$useRef","onInvalid","$860f7da480e22816$var$getFirstInvalidInput","$axvKP$useEffect","$860f7da480e22816$var$getValidity","validity","$4c14b02d5228be26$export$9d4c57ee4c6ffdd8","$hga0N$useState","$hga0N$useRef","$hga0N$useCallback","$4c14b02d5228be26$export$ed2feabec4a533f4","$fd3c5e01e837dc20$export$8042c6c013fd5226","isSelected","setSelected","$dAajM$useState","updateSelected","isReadOnly","toggleState","$3a442827418ebe87$export$f9c6924e160136d1","$1mD4M$createContext","$3a442827418ebe87$export$eb2fcfdbd7ba97d4","$1mD4M$forwardRef","$1mD4M$useHover","$1mD4M$useFocusRing","$1mD4M$mergeProps","$41fb335299a4a39e$export$37fb8590cf2c088c","$1aA6s$createContext","$41fb335299a4a39e$var$filterHoverProps","$41fb335299a4a39e$export$f5b8910cec6cf069","$1aA6s$createHideableComponent","$1aA6s$useHover","$1aA6s$useFocusRing","$1aA6s$mergeProps","$054f71d2330da2e3$export$712718f7aec83d5","$70eGi$useControlledState","$70eGi$useFormValidationState","inputOnlyProps","$70eGi$useState","inputElementType","isRequired","\"enterKeyHint\"","$df59f74ff621f180$exports","\"Empty\"","$6279e3628ec747df$exports","$lhGmr$intlspinbuttonenUSmjs","$757ec6630f26125c$var$noop","$757ec6630f26125c$export$e908e06f4b8e3402","_async","$bBWcS$useRef","stringFormatter","$bBWcS$intlStringsmjs","isSpinning","clearAsync","$bBWcS$useCallback","clearAsyncEvent","$bBWcS$useEffect","onIncrementPage","onIncrement","onDecrementPage","onDecrement","onDecrementToMin","onIncrementToMax","ariaTextValue","onIncrementEvent","onDecrementEvent","stepUpEvent","onIncrementPressStartEvent","initialStepDelay","stepDownEvent","onDecrementPressStartEvent","cancelContextMenu","isUp","isIncrementPressed","setIsIncrementPressed","$bBWcS$useState","isDecrementPressed","setIsDecrementPressed","$8977cb565542571b$exports","\"selectPlaceholder\"","\"tableResizer\"","\"dropzoneLabel\"","\"colorSwatchPicker\"","$aa5f63badbfee5df$exports","$aQscD$intlenUSmjs","$f9554a667e4f0374$export$d188a835a7bc5783","$k30rM$createContext","$f9554a667e4f0374$export$f55761759794cf55","$f9554a667e4f0374$export$62ed72bc21f6b8a6","$k30rM$forwardRef","$k30rM$useContext","$f9554a667e4f0374$export$971707d8a129a1f7","dragAndDropHooks","isVirtualDragging","$k30rM$useCallback","dropState","$f9554a667e4f0374$export$d1e8e3fbb7461f6","selectionManager","dropTargetKey","lastDescendantKey","targetLevel","$k30rM$useMemo","$53e61d82d8b8611d$export$e0e4026c12a8bdbb","$gfOZh$createContext","$53e61d82d8b8611d$export$8b251419efc915eb","$gfOZh$createLeafComponent","$gfOZh$HeaderNode","$792f28e438b9ad5f$var$SharedElementContext","$3Lq00$createContext","$792f28e438b9ad5f$export$758399f318e6385a","$3Lq00$useRef","$91fe5e721c7f36c1$export$c9549807523555e0","$31sgV$createContext","$e28ab3efe3e87743$export$6615d83f6de245ce","$adn6H$createContext","$adn6H$CollectionNode","prevItem","$cd088b5c0d7b27b4$export$3585ede4d035bf14","$cd088b5c0d7b27b4$var$normalizeKey","$cd088b5c0d7b27b4$export$9145995848b05025","itemKey","$654b97e09f2a30c1$export$63eb3ababa9c55c4","walker","whatToShow","walkers","curNode","currentWalkerCurrentNode","nodeResult","currentWalker","previousNode","$654b97e09f2a30c1$export$4d0f8be8b12a7ef6","$kGVXB$shadowDOM","$535772f9d2c1f38d$var$FocusContext","$535772f9d2c1f38d$var$RESTORE_FOCUS_EVENT","$535772f9d2c1f38d$var$activeScope","$535772f9d2c1f38d$export$20e40289641fbbb6","startRef","$jmfRy$useRef","endRef","scopeRef","$jmfRy$useContext","$jmfRy$useMemo","$535772f9d2c1f38d$var$TreeNode","$535772f9d2c1f38d$export$d06fae2ee68b101e","$535772f9d2c1f38d$var$isAncestorScope","activeNode","contain","stopPropagation","$535772f9d2c1f38d$var$useActiveScopeTracker","restoreFocus","$535772f9d2c1f38d$var$useFocusContainment","$535772f9d2c1f38d$var$useRestoreFocus","$535772f9d2c1f38d$var$useAutoFocus","$jmfRy$useEffect","$535772f9d2c1f38d$var$isElementInScope","parentScope","focusManager","$535772f9d2c1f38d$var$createFocusManagerForScope","$535772f9d2c1f38d$export$2d6ec8fc375ceafa","$535772f9d2c1f38d$var$getScopeRoot","$535772f9d2c1f38d$var$focusElement","$535772f9d2c1f38d$var$shouldContainFocus","$535772f9d2c1f38d$var$getRadiosInGroup","radio","radioList","$535772f9d2c1f38d$var$isTabbableRadio","radios","focusedNode","focusedElement","nextElement","$535772f9d2c1f38d$var$isElementInChildScope","$535772f9d2c1f38d$var$focusFirstInScope","shouldSkipFocusRestore","$535772f9d2c1f38d$var$isElementInAnyScope","$535772f9d2c1f38d$export$1258395f99bf9cbf","$535772f9d2c1f38d$var$getFirstInScope","scopeRoot","tabbable","$535772f9d2c1f38d$var$shouldRestoreFocus","nodeToRestoreRef","treeNode","nodeToRestore","clonedTree","$535772f9d2c1f38d$var$restoreFocusToElement","$535772f9d2c1f38d$export$c5251b9e124bf29","$535772f9d2c1f38d$var$last","$535772f9d2c1f38d$var$Tree","newTree","$22bbea12c2567021$export$d3e3bd3e26688c04","$22bbea12c2567021$export$c3d8340acf92597f","$22bbea12c2567021$var$collectionMap","$22bbea12c2567021$export$881eb0d9f3605d9d","$22bbea12c2567021$export$6aeb1680a0ae8741","$f5a4a9a3486154da$var$TYPEAHEAD_DEBOUNCE_WAIT_MS","$f5a4a9a3486154da$export$e32c88dfddc6e1d8","$dLAPo$useRef","$dLAPo$useEffect","keyboardDelegate","onTypeSelect","$f5a4a9a3486154da$var$getStringForKey","$a475cdc2445827b5$export$72ef708ab07251f1","isInitialMount","$cgy5r$useRef","lastDeps","$d667c2af82d35a98$export$d6daf82dcd84e87c","delegate","navigateToKey","linkBehavior","selectOnFocus","$V3AJM$flushSync","childFocus","itemProps","arrowDown","shouldFocusWrap","arrowUp","home","arrowLeft","arrowRight","pageDown","pageUp","aHandler","disallowSelectAll","escapeKeyBehavior","disallowEmptySelection","allowsTabNavigation","shiftTab","withShiftSel","repeatKeyboardProps","scrollPos","$V3AJM$useRef","scrollRef","UNSTABLE_focusOnEntry","relatedTarget","shouldVirtualFocusFirst","previousActiveElement","didAutoFocusRef","$V3AJM$useEffect","selectedKeys","lastFocusedKey","disallowTypeAhead","typeSelectProps","$a83747cc3f035330$export$8f5ed9ff9f511381","containerRect","itemRect","$ae8f8d98b2b18f2f$export$a05409b8bb224a5a","includeDisabled","getNext","tempKey","prevRect","currentEl","nextEl","prevEl","layoutDelegateMethod","menu","reversed","pageX","visibleRect","pageY","fromKey","substring","$673d46fce3e5717d$var$cache","$673d46fce3e5717d$export$a16aca283550c30d","$64903b4b31b6bb2a$export$b95089534ab7c1fd","collator","disabledBehavior","$7JLm2$useMemo","layoutDelegate","disabledKeys","orientation","$686593f99a1df089$export$50eacbbf140a3141","selectionBehavior","\"UNSTABLE_itemBehavior\"","listProps","$7b01448eaad0fe7c$var$DEFAULT_THRESHOLD","$7b01448eaad0fe7c$export$c24ed0104d07eab9","timeRef","$cZVsC$useRef","isAcceptedPointerType","onLongPressStart","onLongPress","onLongPressEnd","accessibilityDescription","$f6ba6936bfd098a0$export$ecf600387e221c37","onSelect","$iQN4Y$useEffect","isLinkOverride","isActionOverride","onAction","hasLinkAction","allowsSelection","allowsActions","hasPrimaryAction","hasSecondaryAction","hasAction","$iQN4Y$useRef","longPressEnabled","longPressEnabledOnPressStart","hadPrimaryActionOnPressStart","collectionItemProps","performAction","itemPressProps","shouldSelectOnPressUp","$f6ba6936bfd098a0$var$isSelectionKey","allowsDifferentPressOrigin","$f6ba6936bfd098a0$var$isActionKey","onDoubleClick","onDragStartCapture","mergedItemProps","longPressProps","isChildInteraction","elCollection","baseOnPointerDown","baseOnMouseDown","$cd5ea4b915021f1d$export$1005530eda016c13","$cd5ea4b915021f1d$export$fbdeaa6a76694f71","$cd5ea4b915021f1d$export$5f3398f8733f90e2","$cd5ea4b915021f1d$export$8c434b3a7a4dad6","aAncestors","$cd5ea4b915021f1d$var$getAncestors","bAncestors","firstNonMatchingAncestor","currNode","$2efe10d3f1f9e31e$var$cache","$2efe10d3f1f9e31e$export$77d5aafae4e095b2","countItems","$dae966e193913d1b$export$497855f14858aa34","shouldFocusOnHover","isVirtualized","optionProps","$i8Bql$getItemCount","$3d6c959d2ef57b72$export$c3f9f39876e4bc7","headingId","$b24d1bc31a0f941d$export$a9d04c5684123369","pieces","$gfwmN$version","$f664a81d022446b5$export$d085fb9e920b5ca7","$8b2540e09867b15e$export$52baac22726c72bf","anchorKey","$60f19cefd567a3e4$var$equalSets","setA","setB","$60f19cefd567a3e4$export$253fe78d46329472","selectionBehaviorProp","isFocusedRef","$7w3VE$useRef","$7w3VE$useState","focusedKeyRef","childFocusStrategyRef","setFocusedKey","setSelectedKeys","$7w3VE$useMemo","$60f19cefd567a3e4$var$convertSelection","disabledKeysProp","setSelectionBehavior","lastSelectionBehavior","$7w3VE$useEffect","childFocusStrategy","allowDuplicateSelectionEvents","$4a07ac835f260f78$export$6c8a5aaad13c9852","mappedKey","mappedToKey","fromItem","toItem","addKeys","$bda7a7e55e1ff206$export$bf788dd355e3a401","$bda7a7e55e1ff206$var$iterable","partialNode","parentKey","$bda7a7e55e1ff206$var$compose","$bda7a7e55e1ff206$var$capitalize","builder","$d03379b88399b8c5$export$6cd28814d92fa9c9","$emYU7$useMemo","$b14b6f590b50af39$export$2f645645f7bca764","selectionState","$3yt54$useMemo","$3yt54$useCallback","$b14b6f590b50af39$var$useFocusedKeyReset","$b14b6f590b50af39$export$ba9d38c0f1bf2b36","cachedCollection","$3yt54$useRef","$3yt54$useEffect","nextFocusedKey","$0407362eaf54473e$export$ccaea96c28e8b9e7","sentinelObserver","$9bhd4$useRef","triggerLoadMore","onLoadMore","margin","scrollOffset","$928221da08ecbc62$export$7ff8f37d2d81a48d","$c4d6w$createContext","$928221da08ecbc62$export$7c5906fe4f1f2af2","$928221da08ecbc62$export$41f133550aa26f48","$c4d6w$forwardRef","$c4d6w$useContext","$928221da08ecbc62$var$ListBoxInner","$c4d6w$CollectionBuilder","$c4d6w$Collection","$928221da08ecbc62$var$StandaloneListBox","$c4d6w$useListState","inputState","listBoxRef","$c4d6w$UNSTABLE_useFilteredListState","isListDraggable","isListDroppable","$c4d6w$useLocale","$c4d6w$useCollator","ctxDropTargetDelegate","$c4d6w$useMemo","$c4d6w$ListKeyboardDelegate","layout","$c4d6w$useListBox","$c4d6w$useRef","$c4d6w$useEffect","dragState","droppableCollection","isRootDropTarget","dragPreview","DragPreview","dropTargetDelegate","$c4d6w$useFocusRing","emptyState","$c4d6w$filterDOMProps","$c4d6w$FocusScope","$c4d6w$mergeProps","listBoxProps","$928221da08ecbc62$var$ListBoxDropIndicatorWrapper","$928221da08ecbc62$var$ListBoxSectionInner","CollectionRoot","headingRef","$c4d6w$useListBoxSection","groupProps","headingProps","CollectionBranch","section","$928221da08ecbc62$export$dca12b0bb56e4fc","$c4d6w$createBranchComponent","$c4d6w$SectionNode","$928221da08ecbc62$export$a11e76429ed99b4","$c4d6w$createLeafComponent","$c4d6w$ItemNode","$c4d6w$useObjectRef","isDraggable","states","$c4d6w$useOption","$c4d6w$useHover","$c4d6w$useKeyboard","$c4d6w$useFocus","draggableItem","droppableItem","isDragging","descriptionProps","$928221da08ecbc62$var$ListBoxDropIndicatorForwardRef","$928221da08ecbc62$var$ListBoxDropIndicator","dropIndicatorProps","isDropTarget","$c4d6w$LoaderNode","sentinelRef","$c4d6w$inertValue","isLoading","$4fcfe18fac72dabd$export$2de4954e8ae13b9f","$cVyXW$createContext","$4fcfe18fac72dabd$export$746d02f47f4d381","$cVyXW$forwardRef","$cVyXW$filterDOMProps","$58196c8d6a1f38fc$var$supportsInert","$58196c8d6a1f38fc$var$isAlwaysVisibleNode","$58196c8d6a1f38fc$var$refCountMap","$58196c8d6a1f38fc$var$observerStack","$58196c8d6a1f38fc$export$1c3ebcada18427bf","windowObj","shouldUseInert","visibleNodes","hiddenNodes","getHidden","setHidden","hidden","shadowRootsToWatch","$6UjbS$shadowDOM","walk","acceptNode","acceptRoot","refCount","changes","shadowObservers","shadowObserver","observerWrapper","$58196c8d6a1f38fc$export$1020fa7f77e17884","$954926fb6168ae2a$var$AXIS","$954926fb6168ae2a$var$FLIPPED_DIRECTION","$954926fb6168ae2a$var$CROSS_AXIS","$954926fb6168ae2a$var$AXIS_SIZE","$954926fb6168ae2a$var$TOTAL_SIZE","$954926fb6168ae2a$var$PARSED_PLACEMENT_CACHE","$954926fb6168ae2a$var$getVisualViewport","$954926fb6168ae2a$var$getContainerDimensions","totalHeight","isPinchZoomedIn","containerNode","$954926fb6168ae2a$var$getOffset","$954926fb6168ae2a$var$getScroll","$954926fb6168ae2a$var$getDelta","containerScroll","containerDimensions","boundarySize","boundaryDimensions","boundaryStartEdge","containerOffsetWithBoundary","boundaryEndEdge","startEdgeOffset","endEdgeOffset","$954926fb6168ae2a$var$getMargins","$954926fb6168ae2a$var$parsePlacement","crossPlacement","crossAxis","crossSize","$954926fb6168ae2a$var$computePosition","placementInfo","childOffset","overlaySize","crossOffset","minPosition","arrowSize","arrowBoundaryOffset","maxPosition","$c49fX$clamp","isContainerPositioned","$954926fb6168ae2a$var$getMaxHeight","overlayTop","overlayHeight","boundaryToContainerTransformOffset","isContainerDescendentOfBoundary","boundingRect","heightGrowthDirection","margins","$954926fb6168ae2a$var$getAvailableSpace","$954926fb6168ae2a$export$6839422d1f33cee9","placementInput","normalizedOffset","flippedPlacementInfo","flippedPosition","maxHeight","userSetMaxHeight","arrowPosition","preferredArrowPosition","arrowMinPosition","overlayMargin","arrowMaxPosition","triggerAnchorPoint","$954926fb6168ae2a$export$b3ceb0cbf1056d98","overlayNode","$954926fb6168ae2a$var$getContainingBlock","isViewportContainer","containerPositionStyle","targetRect","$954926fb6168ae2a$var$getPosition","scrollSize","scrollNode","boundaryElement","$954926fb6168ae2a$export$4b834cebd9e5cebe","shouldFlip","ignoreScale","overrideRect","scrollLeft","parentOffset","parentStyle","$954926fb6168ae2a$var$isContainingBlock","$22e2f5f6490788e8$export$f6211563215e3b37","$22e2f5f6490788e8$export$18fc8428861184da","$8Mq5d$useEffect","triggerRef","onCloseHandler","$970072cf4b13fde3$var$hasResizeObserver","$970072cf4b13fde3$export$683480f191c0e3ea","onResizeEvent","$aLvW6$useEffect","resizeObserverInstance","$b3526bc71400be8d$var$visualViewport","$b3526bc71400be8d$export$d39e1813b3bdd0e1","overlayRef","setPosition","$jKzS8$useState","shouldUpdatePosition","targetRef","arrowRef","containerPadding","lastScale","$jKzS8$useRef","$jKzS8$useEffect","$jKzS8$useCallback","anchor","anchorRect","scrollRect","$b3526bc71400be8d$var$translateRTL","getTargetRect","newOffset","$b3526bc71400be8d$var$useResize","isResizing","onScroll","$e260d131964da0f9$export$872b660ac5a1ff98","$a2uwp$useRef","onInteractOutside","$e260d131964da0f9$var$isValidEvent","onInteractOutsideStart","triggerInteractOutside","$a2uwp$useEffect","$77844860df94ba23$var$visibleOverlays","$77844860df94ba23$export$ea8f71083e90600f","lastVisibleOverlay","$eUNmN$useRef","$eUNmN$useEffect","onHide","topMostOverlay","shouldCloseOnInteractOutside","isKeyboardDismissDisabled","isDismissable","shouldCloseOnBlur","$e0a0e4399f316b76$var$WEBKIT_OPEN_DELAY","$e0a0e4399f316b76$var$TRANSITION_FRAMETIME","$e0a0e4399f316b76$var$TRANSITION_TIMEOUT","$e0a0e4399f316b76$var$listenersByWindow","$e0a0e4399f316b76$var$transitionCallbacks","$e0a0e4399f316b76$var$resizeCallbacks","$e0a0e4399f316b76$var$onTransitionFrame","isOpenKeyboard","wasOpenKeyboard","$e0a0e4399f316b76$var$setupGlobalListeners","$e0a0e4399f316b76$export$b80f73f72d03c10f","$e0a0e4399f316b76$export$c82b8fe1ad51fcd9","$0644e3663365bfe5$var$visualViewport","$0644e3663365bfe5$var$preventScrollCount","$0644e3663365bfe5$var$restore","$0644e3663365bfe5$export$ee0f7cc6afcd1c18","$0644e3663365bfe5$var$preventScrollMobileWebKit","$0644e3663365bfe5$var$preventScrollStandard","UNSTABLE_overrideFocus","scrollbarWidth","$0644e3663365bfe5$var$overrideFocus","$0644e3663365bfe5$var$handleBlur","restoreOverflow","scrollable","allowTouchMove","removeEvents","$0644e3663365bfe5$var$scrollIntoView","nextTarget","scrollableRect","adjustment","$f8a024fbad3a5a2e$export$542a6fd13ac93354","isSubmenu","\"trigger\"","isNonModal","groupRef","popoverRef","positionProps","$eBJzm$useEffect","overlayProps","$ea518f18e6f13288$exports","\"dismiss\"","$8ad4f9eb0c0f6434$exports","$9W4zk$intloverlaysenUSmjs","$081058010ef8962e$export$2317d149ed6f78c4","$3Rxt5$intlStringsmjs","onDismiss","$0d47b37c475c5231$export$3351871ee4b288b8","isRegistered","$iXgbh$useRef","prevContext","$iXgbh$useContext","$iXgbh$useEffect","$0d47b37c475c5231$export$cf75428e0b9ed1ea","$iXgbh$useMemo","$72abaeab4d80592f$export$60d741e20e0aa309","$9DQBE$createContext","$72abaeab4d80592f$export$78efe591171d7d45","ctxGetContainer","$72abaeab4d80592f$export$9fc1347d4195ccb3","getContainer","$9DQBE$useContext","$d7a937236970dc7f$export$a2200b96afd16271","$d7a937236970dc7f$export$c6fdb837b070b4ff","setContain","$3wX5A$useState","contextValue","$3wX5A$useMemo","portalContainer","isExiting","$d7a937236970dc7f$export$14c98a7594375490","$3wX5A$useContext","$f11fb0bcf1b2687a$export$61c6a8c84e605fb6","setOpen","setPoint","$kE40A$useState","$kE40A$useCallback","$fcc7165e876206c6$export$6d3443f2c48bfc20","isEntering","setEntering","$5MIG0$useState","isAnimationReady","$fcc7165e876206c6$var$useAnimation","onEnter","$5MIG0$useCallback","$fcc7165e876206c6$export$45fda7c47f93fd48","exitState","setExitState","onExit","isActiveRef","$5MIG0$useRef","onStart","isActive","onEnd","startPromise","$5MIG0$flushSync","$542a13ca2fa5b484$export$9b9a0cd73afb7ca4","$g4jvP$createContext","$542a13ca2fa5b484$var$PopoverGroupContext","$542a13ca2fa5b484$export$5b6b19405a83ff9d","$g4jvP$forwardRef","contextState","$g4jvP$useContext","$f2ff30fde7b014be$export$d2f961adcb0afbe","localState","$g4jvP$useOverlayTriggerState","exitAnimation","$g4jvP$useExitAnimation","$g4jvP$useIsHidden","$g4jvP$useLocale","$542a13ca2fa5b484$var$PopoverInner","$g4jvP$useRef","containerRef","groupCtx","isSubPopover","setIsOpen","$g4jvP$useState","$g4jvP$usePopover","enterAnimation","$g4jvP$useEnterAnimation","shouldBeDialog","isDialog","setDialog","$g4jvP$useEffect","$g4jvP$getInteractionModality","$g4jvP$isFocusWithin","$g4jvP$useMemo","clearContexts","triggerWidth","setTriggerWidth","$g4jvP$useCallback","popoverProps","$g4jvP$runAfterKeyboard","$g4jvP$mergeProps","$g4jvP$filterDOMProps","$g4jvP$DismissButton","arrowProps","$g4jvP$Overlay","UNSTABLE_portalContainer","underlayProps","$650bea62ab5f5f0f$export$744d98a3b8a94e1c","$91cTq$createContext","$788d77bcaab07d29$exports","\"longPressMessage\"","$bdff4dd8fb5956de$exports","$ljvjO$intlmenuenUSmjs","$00dce70c89c7306c$export$2464060fb1e12fa6","firedContextMenuEvent","$bhKyt$useRef","onContextMenu","$f282e36c29c025e8$export$f9d5c8beee7d008d","$i8XK3$useEffect","ariaHasPopup","overlayId","$f19b83c1486f45cc$export$dc9c12ed27dd1b49","menuTriggerId","shouldOpen","focusStrategy","trigger","$1SpDQ$intlStringsmjs","triggerProps","$1SpDQ$useEffect","contextMenuProps","_b","_c","$d5765cd7be93edd1$export$6f49b4016bfc8d56","$a2d69d6ee8486855$export$38eaa17faae8f579","$1a9c2c840fd36413$export$9d32628fc2aea7da","hasPopup","pressUpProp","pressChangeProp","onClickProp","hoverStartProp","isTrigger","isTriggerExpanded","keyboardId","ariaProps","$2sTAp$getItemCount","isPressedRef","$2sTAp$useRef","interaction","shouldClose","shouldCloseOnSelect","closeOnSelect","$7355d4e5c49461b6$export$73f7a44322579622","$e3403870bfb691da$export$79fefeb1c2091ac3","overlayTriggerState","setFocusStrategy","$aoDK0$useState","expandedKeysStack","setExpandedKeysStack","closeAll","openSubmenu","oldStack","triggerKey","closeSubmenu","$df1fcc684d3b021a$export$863faf230ee2118a","expandedKeys","$6b915bde6cd300dd$export$728d6ba534403756","setExpandedKeys","onExpandedChange","$aXIpm$useMemo","$aXIpm$useCallback","$aXIpm$useEffect","$6b915bde6cd300dd$var$toggleKey","$49319ee1285aa241$export$c7e742effb1c51e2","$7xe5e$createContext","$49319ee1285aa241$export$24aad8519b95b41b","$49319ee1285aa241$export$795aec4671cbae19","$49319ee1285aa241$var$SelectionManagerContext","$49319ee1285aa241$export$27d2ad3c5815583e","$7xe5e$useMenuTriggerState","$7xe5e$useRef","$7xe5e$useMenuTrigger","$7xe5e$useIsHidden","menuProps","$7xe5e$PressResponder","menuTriggerProps","$49319ee1285aa241$var$SubmenuTriggerContext","$7xe5e$CollectionNode","triggerNode","$49319ee1285aa241$export$d9b273488cd8ce6f","$7xe5e$forwardRef","$7xe5e$CollectionBuilder","$7xe5e$Collection","$49319ee1285aa241$var$MenuInner","autocompleteMenuProps","filteredCollection","$7xe5e$useMemo","$7xe5e$useTreeState","triggerState","$7xe5e$useContext","$7xe5e$useMenu","$7xe5e$filterDOMProps","$7xe5e$FocusScope","$7xe5e$mergeProps","$49319ee1285aa241$var$MenuSectionInner","$49319ee1285aa241$var$MenuItemContext","$49319ee1285aa241$var$GroupSelectionManager","$7xe5e$SelectionManager","$7xe5e$useMenuSection","$7xe5e$useMultipleSelectionState","$49319ee1285aa241$export$2ce376c2cc3355c8","$7xe5e$createLeafComponent","$7xe5e$ItemNode","$7xe5e$useObjectRef","$7xe5e$useMenuItem","$7xe5e$useHover","menuItemProps","keyboardShortcutProps","$7xe5e$LoaderNode","$7xe5e$inertValue","$13150e6629d46e45$export$d55e7ee900f34e93","$8glMc$useRef","$8glMc$useEffect","ariaDescribedby","$f2ff30fde7b014be$export$8b93a07348a7730c","$gV8PY$createContext","$f2ff30fde7b014be$export$2e1e1122cf0cba88","$gV8PY$useMenuTriggerState","buttonRef","$gV8PY$useRef","$gV8PY$useOverlayTrigger","$gV8PY$useId","$gV8PY$useIsHidden","$gV8PY$PressResponder","$f2ff30fde7b014be$export$3ddf2d174ce01153","$gV8PY$forwardRef","originalAriaLabelledby","$gV8PY$useDialog","$gV8PY$useContext","dialogProps","$gV8PY$filterDOMProps","$gV8PY$mergeProps","titleProps","contentProps","$ef182bb9912241d8$export$3274cf84b703fff","$cX3gV$useCallback","scan","sliceLen","$cX3gV$useMemo","$b4eb6eb8d15fb21e$export$a2f47a3d2973640","$1mob3$useMemo","$5a15223dacad897a$var$dateSegments","$5a15223dacad897a$var$granularityMap","$5a15223dacad897a$export$f6a685cd1acbd1fa","$9FtGl$useVisuallyHidden","inputStep","dateValue","$9FtGl$toCalendarDate","$9FtGl$toCalendarDateTime","$9FtGl$toLocalTimeZone","timeSegments","targetString","$9FtGl$getEventTarget","targetValue","$9FtGl$parseDateTime","$9FtGl$parseDate","$5a15223dacad897a$export$eefa3e19139f00f3","containerProps","$f55b2b490fefc83f$exports","\"era\"","\"month\"","\"day\"","\"hour\"","\"minute\"","\"second\"","\"dayPeriod\"","\"calendar\"","\"startDate\"","\"endDate\"","\"weekday\"","\"timeZoneName\"","\"selectedDateDescription\"","\"selectedRangeDescription\"","\"selectedTimeDescription\"","$0014db39426443c5$exports","$645EV$intldatepickerenUSmjs","$6a440d0e2d99dd46$export$4a931266a3838b86","$855dK$useMemo","disableArrowNavigation","$6a440d0e2d99dd46$var$findNextSegment","focusLast","closestDistance","fromX","absoluteDistance","$7541913c0284d84b$export$653eddfc964b0f8a","$7541913c0284d84b$export$300019f83c56d282","$7541913c0284d84b$export$7b3062cd49e80452","$7541913c0284d84b$export$5591b0b878c1a989","valueOnFocus","$GVr02$useRef","$GVr02$intlStringsmjs","descProps","describedBy","\"__reactAriaDateFieldRole\"","propsFocusManager","$GVr02$useMemo","fieldDOMProps","$GVr02$useEffect","$40cf8faa4dad0740$export$d42c60378c8168f8","$5vIuz$intlStringsmjs","$5vIuz$useMemo","$40cf8faa4dad0740$var$DisplayNamesPolyfill","$d51706f903be7eab$export$1315d136e6f7581","enteredKeys","$dk9mG$useRef","displayNames","$dk9mG$useMemo","monthDateFormatter","hourDateFormatter","monthTextValue","$dk9mG$NumberParser","backspace","amPmFormatter","pm","eraFormatter","$dk9mG$toCalendar","$dk9mG$CalendarDate","eraDate","prefixLength","$d51706f903be7eab$var$commonPrefixLength","onInput","numberValue","segmentValue","compositionRef","touchPropOverrides","ariaLabelledBy","segmentStyle","spinButtonProps","ariaDescribedBy","$6b7f94ed17767636$exports","\"rangeUnderflow\"","\"rangeOverflow\"","\"rangeReversed\"","\"unavailableDate\"","$d0d4459aa9ffd727$exports","$3ANuo$intldatepickerenUSmjs","$8b141f2f71e88f85$var$dictionary","$7hc54$LocalizedStringDictionary","$7hc54$intlStringsmjs","$8b141f2f71e88f85$var$getLocale","$8b141f2f71e88f85$export$f18627323ab57ac0","rangeOverflow","rangeUnderflow","isUnavailable","isDateUnavailable","$7hc54$LocalizedStringFormatter","dateFormatter","$7hc54$DateFormatter","$8b141f2f71e88f85$export$7e319ea407e63bc0","$8b141f2f71e88f85$var$DEFAULT_FIELD_OPTIONS","$8b141f2f71e88f85$var$TWO_DIGIT_FIELD_OPTIONS","fieldOptions","granularity","startIdx","endIdx","$8b141f2f71e88f85$export$61a490a80c552550","$7hc54$toCalendar","$8b141f2f71e88f85$export$66aa2b09de4b1ea5","placeholderValue","$7hc54$now","$7hc54$getLocalTimeZone","$7hc54$toCalendarDate","$7hc54$toCalendarDateTime","$8b141f2f71e88f85$export$2440da353cedad43","defaultTimeZone","defaultGranularity","setLastValue","$7hc54$useState","$8e5fbb9a25791ca0$var$placeholders","$bwGbA$LocalizedStringDictionary","$8e5fbb9a25791ca0$export$d3f5c5e0a5023fa0","$0e8931c783099b4f$export$ae165b50d181e1ef","hourCycle","dayPeriod","$0e8931c783099b4f$var$toHourCycle","dt","placeholder","$0e8931c783099b4f$var$cycleValue","$cMyEu$CalendarDate","hasDateSegements","displaySegments","adjustedHour","$0e8931c783099b4f$var$fromHourCycle","$8e7461aabf74661f$var$EDITABLE_SEGMENTS","$8e7461aabf74661f$var$PAGE_STEP","$8e7461aabf74661f$var$TYPE_MAPPING","$8e7461aabf74661f$export$60e84778edff6d26","$cV3Es$useMemo","$cV3Es$DateFormatter","createCalendar","setDate","$cV3Es$useState","calendarValue","displayValue","setDisplayValue","showEra","formatOpts","hideTimeZone","is12HourClock","minIndex","maxIndex","lastCalendar","setLastCalendar","lastHourCycle","setLastHourCycle","$cV3Es$isEqualCalendar","$cV3Es$toCalendar","$cV3Es$GregorianCalendar","newDateValue","$8e7461aabf74661f$var$processSegments","adjustSegment","validation","isValueInvalid","formatOptions","timeValue","$cV3Es$NumberFormatter","twoDigitFormatter","processedSegments","isPlaceholder","dateSegment","$5400c097f4765e59$export$7b3e670c86da5fe8","$lX0XJ$createContext","$5400c097f4765e59$export$3b08bebcf796eea0","$5400c097f4765e59$export$5d8dc44abd10a920","$5400c097f4765e59$export$d9781c7894a82487","$lX0XJ$forwardRef","formValidationBehavior","$lX0XJ$useLocale","$lX0XJ$useDateFieldState","$lX0XJ$createCalendar","fieldRef","$lX0XJ$useRef","labelRef","$lX0XJ$useDateField","$lX0XJ$filterDOMProps","errorMessageProps","$5400c097f4765e59$export$7edc06cf1783b30f","dateFieldState","$lX0XJ$useContext","timeFieldState","$5400c097f4765e59$var$DateInputInner","$5400c097f4765e59$var$DateInputStandalone","dateFieldProps","$lX0XJ$cloneElement","$5400c097f4765e59$export$336ab7fa954c4b5f","$lX0XJ$useObjectRef","$lX0XJ$useDateSegment","$lX0XJ$useFocusRing","$lX0XJ$useHover","$lX0XJ$mergeProps","segmentProps","$89a3495b7d82e671$export$6e3e27031a30522f","triggerId","panelId","$cbhof$useRef","$cbhof$useCallback","$cbhof$flushSync","isExpandedRef","panel","$cbhof$useEffect","$29a18fa139197b5c$export$f36461af0ef4707d","$ilT6J$useMemo","$ilT6J$useEffect","allowsMultipleExpanded","$086b1fd51041276f$export$3fcbf6e4407997e0","isExpanded","setExpanded","$aw5JV$useCallback","$a3e16eab0ea4036c$export$1d40e3e0cc4d5de","$evqUs$createContext","$a3e16eab0ea4036c$export$944aceb4f8c89f10","$evqUs$forwardRef","$evqUs$useDisclosureGroupState","$evqUs$filterDOMProps","$a3e16eab0ea4036c$export$d665dd135a51b28a","$a3e16eab0ea4036c$export$dab3ea4a6ef094da","$a3e16eab0ea4036c$var$InternalDisclosureContext","$a3e16eab0ea4036c$export$74a362b31437ec83","groupState","$evqUs$useContext","$evqUs$useId","$evqUs$useDisclosureState","panelRef","$evqUs$useDisclosure","isFocusVisibleWithin","$evqUs$useFocusRing","$evqUs$mergeProps","$a3e16eab0ea4036c$export$feabaa331e1d464c","panelProps","$evqUs$mergeRefs","$bf14c9739fda2eb3$export$eac1895992b9f3d6","hasTabbableChild","setHasTabbableChild","$Pt4LU$useState","$3834487504f4fc00$var$TOOLTIP_DELAY","$3834487504f4fc00$var$TOOLTIP_COOLDOWN","$3834487504f4fc00$var$tooltips","$3834487504f4fc00$var$tooltipId","$3834487504f4fc00$var$globalWarmedUp","$3834487504f4fc00$var$globalWarmUpTimeout","$3834487504f4fc00$var$globalCooldownTimeout","$3834487504f4fc00$export$4d40659c25ecb50b","shouldSkipAnimation","setIsInstant","$auOuY$useState","$auOuY$useMemo","closeTimeout","$auOuY$useRef","closeCallback","ensureTooltipEntry","hideTooltip","closeOpenTooltips","hideTooltipId","showTooltip","instant","immediate","closeDelay","warmupTooltip","$auOuY$useEffect","$5698867baeb53f4e$export$dbc0f175b25fb0fb","$22yBd$useEffect","$6066a2c586ade9e1$var$visualViewport","$6066a2c586ade9e1$export$d699905dd57c73ca","unmountRef","$99N2Z$useRef","$99N2Z$useState","$6066a2c586ade9e1$var$getViewportSize","$99N2Z$useEffect","updateSize","$8b8d26808cb8cb53$export$ab57792b9b6974a6","$gJBoF$createContext","$8b8d26808cb8cb53$export$6bc057cefccad9c8","$8b8d26808cb8cb53$export$2b77a92f1a5ad772","$gJBoF$forwardRef","$gJBoF$useContext","$8b8d26808cb8cb53$var$ModalContent","$8b8d26808cb8cb53$export$8948f78d83984c69","$8b8d26808cb8cb53$var$ModalOverlayWithForwardRef","$gJBoF$useOverlayTriggerState","objectRef","$gJBoF$useObjectRef","modalRef","$gJBoF$useRef","isOverlayExiting","$gJBoF$useExitAnimation","onExitRef","isModalExiting","$gJBoF$useIsSSR","$8b8d26808cb8cb53$var$ModalOverlayInner","$gJBoF$useState","entering","$gJBoF$useEnterAnimation","isDeferred","UNSTABLE_deferUntilEntered","$gJBoF$useModalOverlay","dialogContext","mergedDialogContext","$8b8d26808cb8cb53$var$mergeDialogContext","$gJBoF$useViewportSize","pageWidth","pageHeight","scrollingElement","$gJBoF$isScrollable","fractionalWidthDifference","fractionalHeightDifference","$gJBoF$runAfterKeyboard","$gJBoF$Overlay","$gJBoF$mergeProps","$gJBoF$filterDOMProps","slots","$gJBoF$useMemo","$gJBoF$mergeRefs","modalProps","$gJBoF$DismissButton","$640b6b92b30fd41a$export$37b65e5b5444d35c","$405627c100c5b965$export$37b0961d2f4751e2","isLabelPressed","$jgf8P$useMemo","$eecdee08e0d8a75f$export$62b9571f283ff5c2","getNextElement","nextElem","nextDir","groupName","$384704861d32dbed$var$instance","$384704861d32dbed$var$i","$384704861d32dbed$export$bca9d026f8e704eb","$6Hs9a$useMemo","selectedValue","$6Hs9a$useState","lastFocusedValue","setLastFocusedValue","setSelectedValue","$fe21c36db05242bb$export$a79eda4ff50e30b6","$64B8K$createContext","$fe21c36db05242bb$export$29c6814b341e632b","$fe21c36db05242bb$export$29d84393af70866c","$fe21c36db05242bb$export$a98f0dcb43a68a25","$64B8K$forwardRef","$64B8K$useRadioGroupState","$64B8K$useRadioGroup","$64B8K$filterDOMProps","$64B8K$mergeProps","radioGroupProps","$fe21c36db05242bb$var$InternalRadioContext","$fe21c36db05242bb$export$4aaf0c609b3e241e","userProvidedInputRef","$64B8K$useObjectRef","$64B8K$useMemo","$64B8K$mergeRefs","$64B8K$useRadio","$fe21c36db05242bb$export$f4422ae58352e179","$64B8K$useContext","$64B8K$useFocusRing","interactionDisabled","$64B8K$useHover","$64B8K$VisuallyHidden","$0b5fc13def2a30c7$exports","$cb1bf3901ab9f046$exports","$dHW54$intlsearchfieldenUSmjs","$44614525ec969a63$export$9bb30bbe003b82e0","$kb1Sb$intlStringsmjs","onSubmit","onClear","onClearButtonClick","$56baeede9f35e022$export$3f8be18b0f41eaf2","$56baeede9f35e022$var$toString","$29a5029ff43c9612$export$d1c4e4c63cb03a11","$gpBJB$createContext","$29a5029ff43c9612$export$b94867ecbd698f21","$gpBJB$createHideableComponent","$gpBJB$useRef","$gpBJB$useSearchFieldState","$gpBJB$useSearchField","$gpBJB$filterDOMProps","clearButtonProps","$c0a45cd074520508$export$703601b7e90536f8","$c0a45cd074520508$export$e64b2f635402ca43","$dmsVn$useMemo","valueId","$b046d185a4525d56$export$f809e80f58e251d1","$8AqU6$useCallback","$b046d185a4525d56$export$cbd84cdb2e668835","selectRef","$8AqU6$useRef","selectProps","$29256f53a2edafe9$export$5159ec8b34d4ec12","selectionMode","$5t5rb$useState","$5t5rb$useMemo","controlledValue","setControlledValue","listState","$29256f53a2edafe9$var$convertValue","selectedKey","selectedItems","$c8bb816105474884$export$7540cee5be7dc19b","$2l4Cq$createContext","$c8bb816105474884$export$ef445b55be0601bd","$c8bb816105474884$export$ef9b1a59e592288f","$2l4Cq$createHideableComponent","$2l4Cq$useMemo","$2l4Cq$CollectionBuilder","$c8bb816105474884$var$SelectInner","$c8bb816105474884$var$CLEAR_CONTEXTS","$2l4Cq$useSelectState","$2l4Cq$useFocusRing","$2l4Cq$useRef","$2l4Cq$useSelect","renderPropsState","$2l4Cq$filterDOMProps","$c8bb816105474884$export$f8f745c04421623f","valueProps","$2l4Cq$mergeProps","$2l4Cq$HiddenSelect","hiddenSelectProps","$c8bb816105474884$export$e288731fd71264f0","$2l4Cq$useContext","$2l4Cq$useListFormatter","selectedText","$2l4Cq$Fragment","$2l4Cq$useLocalizedStringFormatter","$2l4Cq$intlStringsmjs","$a251981b23baaa12$export$c5f62239608282b6","$a251981b23baaa12$export$567fc7097e064344","$1b6fa05bad3d7740$export$fdf4756d5b8ef90a","propsDisabled","tabId","tabPanelId","$7d951241dadd72e4$export$fae0121b5afe572d","$a226bee26c88efd7$export$15010ca3c1abe90b","startKey","$83428e53deb13caf$export$773e389e644c5874","$4mYNK$useMemo","keyboardActivation","tabsId","$0fdb127d377ffd84$export$e7f05e985daf4b5f","setSelectedKey","$jhfZc$useMemo","$caeb030f09a278a1$export$4ba071daf4e486","$caeb030f09a278a1$var$findDefaultSelectedKey","currentSelectedKey","lastSelectedKey","$eOo4G$useRef","$eOo4G$useEffect","$b4f18e3395fe64d7$export$cfa7aa87c26e7d1f","$4KeVI$createContext","$b4f18e3395fe64d7$export$364712098d2aa57c","$b4f18e3395fe64d7$export$b2539bed5023c21c","$4KeVI$forwardRef","$4KeVI$useMemo","$4KeVI$CollectionBuilder","$b4f18e3395fe64d7$var$TabsInner","$4KeVI$useTabListState","$4KeVI$useFocusRing","$4KeVI$filterDOMProps","$4KeVI$mergeProps","$b4f18e3395fe64d7$export$e51a686c67fdaa2d","$4KeVI$useContext","$b4f18e3395fe64d7$var$TabListInner","$4KeVI$Collection","$4KeVI$useObjectRef","$4KeVI$useTabList","tabListProps","$b4f18e3395fe64d7$export$3e41faf802a29e71","$4KeVI$createLeafComponent","$4KeVI$CollectionNode","$4KeVI$useTab","$4KeVI$useHover","tabProps","$b4f18e3395fe64d7$export$3d96ec278d3efce4","$4KeVI$createHideableComponent","isInitiallySelected","setInitiallySelected","$4KeVI$useState","$4KeVI$useExitAnimation","$b4f18e3395fe64d7$var$TabPanelInner","$4KeVI$useTabPanel","$4KeVI$useEnterAnimation","$4KeVI$inertValue","tabPanelProps","$b54a524c670b905d$export$51e84d46ca0bc451","$afa781ff67c1cd08$export$fa142eb1681c520","isInToolbar","setInToolbar","$jBcN3$useState","shouldReverse","lastFocused","$jBcN3$useRef","$162557ba4d6f08dd$export$dd5580ae642f110f","toolbarProps","$162557ba4d6f08dd$export$bc53712daae3d6e6","$3d8ad31c4c1725e9$export$8deac67f4addf270","$44j85$useMemo","$bc25b811ec97a172$export$298258635ae0dd97","$9mIod$createContext","$bc25b811ec97a172$export$a8a71863db173133","$bc25b811ec97a172$export$40258cc1d95ff477","$9mIod$forwardRef","$9mIod$useToggleGroupState","$9mIod$useToggleButtonGroup","$9mIod$filterDOMProps","$9mIod$mergeProps","$75afe627ae0cc0fa$export$43506d75ebd2e218","$2YxXO$createContext","$75afe627ae0cc0fa$export$d2b052e7b4be1756","$2YxXO$forwardRef","$2YxXO$useContext","$2YxXO$useToggleState","$2YxXO$useToggleButtonGroupItem","$2YxXO$useToggleButton","$2YxXO$useFocusRing","$2YxXO$useHover","$2YxXO$filterDOMProps","$2YxXO$mergeProps","$c07df45195231803$var$Context","$c07df45195231803$export$178405afcd8c5eb","$eXzCv$useContext","modalCount","setModalCount","$eXzCv$useState","$eXzCv$useMemo","$c07df45195231803$export$d9aaed4c3ece1bc0","$c07df45195231803$var$OverlayContainerDOM","modalProviderProps","$c07df45195231803$export$bf688221f59024e5","$c07df45195231803$export$b47c3594eab58386","$8c383cffc84c9982$export$1c4b08e0eca38426","$85908aa8a35f0fac$export$a6da6c504e4bba8b","tooltipId","$t8vQD$useRef","handleShow","handleHide","$t8vQD$useEffect","shouldCloseOnPress","$05a50f7d78b03ad9$export$7a7623236eec67fa","$4nVq8$createContext","$05a50f7d78b03ad9$export$39ae08fa83328b12","$05a50f7d78b03ad9$export$8c610744efcf8a1d","$4nVq8$useTooltipTriggerState","$4nVq8$useRef","$4nVq8$useTooltipTrigger","tooltipProps","$4nVq8$FocusableProvider","$05a50f7d78b03ad9$export$28c660c63b792dea","$4nVq8$forwardRef","$4nVq8$useContext","$4nVq8$useExitAnimation","$4nVq8$OverlayContainer","$05a50f7d78b03ad9$var$TooltipInner","$4nVq8$useOverlayPosition","$4nVq8$useEnterAnimation","$4nVq8$mergeProps","$4nVq8$useTooltip","$4nVq8$filterDOMProps","LabeledSwitch","tooltip","tracking","TooltipTrigger","Button","Tooltip","OverlayArrow","viewBox","Checkbox","autoComplete","testHook","RadioButton","CloseButton","OverlayHeader","onTitleClick","clickable","TextInput","forwardRef","hydrateCodeSnippets","codeSnippets","querySelectorAll","querySelector","hydrateRoot","DownloadIconFull","rx","DownloadIconSelected","DownloadButton","previewImageUrl","previewImageDimensions","imageStyle","trackingNote","isDownloading","setIsDownloading","showLoading","ssr","DownloadButtonLink","download","anchorProps","DownloadApiOptions","onlyVisible","onOnlyVisibleChange","shortColNames","onShortColNamesChange","firstYColDef","groupPrefix","exLongName","exShortName","shortNamesAvailable","wordBreak","iconPosition","TEXT_OUTLINE_FACTOR","defaultHaloStyle","userSelect","Halo","outlineWidth","outlineColor","halo","BodyPortal","DEFAULT_COLOR","LoadingIndicator","backgroundColor","toCSS","borderColor","NonRedistributableDataNotice","sourceLinks","listClassName","GrapherTabIcon","Table","WorldMap","chartIcons","LineChart","DiscreteBar","StackedBar","StackedDiscreteBar","ScatterPlot","fillRule","clipRule","Marimekko","StackedArea","SlopeChart","Dumbbell","Swimlane","ARROW_PATHS","down","SEMANTIC_COLORS","GrapherTrendArrow","REDUCED_MOTION_QUERY","getPrefersReducedMotion","usePrefersReducedMotion","outdatedSchemaVersions","defaultGrapherConfig","GRAPHER_PROD_URL","GRAPHER_EMBEDDED_FIGURE_ATTR","GRAPHER_NARRATIVE_CHART_CONFIG_FIGURE_ATTR","GRAPHER_TIMELINE_CLASS","GRAPHER_SIDE_PANEL_CLASS","GRAPHER_SETTINGS_CLASS","GRAPHER_CHART_AREA_CLASS","GRAPHER_HEADER_CLASS","GRAPHER_FOOTER_CLASS","DEFAULT_GRAPHER_ENTITY_TYPE","DEFAULT_GRAPHER_ENTITY_TYPE_PLURAL","GRAPHER_IMAGE_WIDTH_2X","DEFAULT_GRAPHER_BOUNDS","DEFAULT_GRAPHER_HEIGHT","DEFAULT_GRAPHER_BOUNDS_SQUARE","GRAPHER_SQUARE_SIZE","GRAPHER_OPACITY_MUTED","GRAPHER_AREA_OPACITY_DEFAULT","GRAPHER_AREA_OPACITY_MUTED","latestGrapherConfigSchema","$schema","CookieKey","\"isAdmin\"","WORLD_ENTITY_NAME","isWorldEntityName","entityName","CONTINENTS_INDICATOR_ID","isContinentsVariableId","population_regex","ADDITIONAL_REGION_PUBLISHERS","isPopulationVariableETLPath","Patterns","\"noDataPattern\"","\"noDataPatternForMap\"","\"inapplicablePattern\"","\"inapplicablePatternForMap\"","\"projectedDataPattern\"","\"projectedDataPatternForLegend\"","makePatternId","baseId","idSuffix","SVG_FONT_FAMILY","SVG_STYLE_PROPS","textRendering","WebkitFontSmoothing","GrapherModal","\"Sources\"","\"Download\"","\"Embed\"","CHART_TYPES_THAT_SHOW_ALL_ENTITIES","defaultNoopBatch","observerBatching","configure$1","printDebugValue","REGISTRY_FINALIZE_AFTER","REGISTRY_SWEEP_INTERVAL","TimerBasedFinalizationRegistry","finalize","maxAge","registration","observerFinalizationRegistry","globalIsUsingStaticRendering","isUsingStaticRendering","__read","ar","observerComponentNameFor","baseComponentName","ObjectToBeRetainedByReact","objectToBeRetainedByReactFactory","useObserver","objectRetainedByReact","admRef","rendering","hasSymbol","ReactForwardRefSymbol","\"$$typeof\"","ReactMemoSymbol","baseComponent","useForwardRef","\"render\"","observerComponent","copyStaticProperties","hoistBlackList","batch","\"finalizeAllImmediately\"","symbolId","createSymbol","createdSymbols","newSymbol","setHiddenProp","mobxMixins","mobxPatchedDefinition","getMixins","mixins","methodMixins","retVal","realMethod","mx","wrapFunction","mixinMethod","oldDefinition","originalMethod","newDefinition","createDefinition","mobxAdminProperty","mobxObserverProperty","mobxIsUnmounted","skipRenderKey","isForcingUpdateKey","makeClassComponentObserver","componentClass","displayName","getDisplayName","\"__proto__\"","observerSCU","makeObservableProp","originalRender","_displayName","createReactiveRender","_displayName2","comp","initialName","boundOriginalRender","isRenderingPending","createReaction","hasError","\"reactComponent\"","reactiveRender","_allowStateChanges","valueHolderKey","atomHolderKey","prevReadState","_allowStateReadsStart","_allowStateReadsEnd","\"isMobxInjector\"","observer$1","SelectionArray","selectedEntityNames","hasSelection","numSelectedEntities","selectedSet","setSelectedEntities","addToSelection","clearSelection","toggleSelection","selectEntity","deselectEntity","selectEntities","deselectEntities","entityNames","delete","NaNButShouldBeNumber","DroppedForTesting","InvalidOnALogScale","UndefinedButShouldBeNumber","NullButShouldBeNumber","BlankButShouldBeNumber","UndefinedButShouldBeString","NullButShouldBeString","NotAParseableNumberButShouldBeNumber","DivideByZeroError","NoValueWithinTolerance","NoMatchingValueAfterJoin","ValueTooLow","NoValueToCompareAgainst","FilteredValue","NoValueForInterpolation","InvalidNegativeValue","NoMatchingVariableId","MissingValuePlaceholder","ErrorValueTypes","isNotErrorValue","isNotErrorValueOrEmptyCell","defaultIfErrorValue","timeColumnSlugFromColumnDef","makeOriginalTimeSlugFromColumnSlug","makeOriginalStartTimeSlugFromColumnSlug","makeOriginalValueSlugFromColumnSlug","makeAnnotationsSlug","getOriginalTimeColumnSlug","originalTimeSlug","getOriginalStartTimeColumnSlug","originalStartTimeSlug","getOriginalValueColumnSlug","originalValueSlug","toPercentageColumnDef","columnDef","AbstractCoreColumn","isMissing","isTimeColumn","hasNumberFormatting","isAllIntegers","toleranceStrategy","roundsToFixedDecimals","roundsToSignificantFigures","displayUnit","nonEmptyName","nonEmptyDisplayName","titlePublicOrDisplayName","datasetId","datasetName","valuesToIndices","uniqValuesAsSet","valuesIncludingErrorValues","validRowIndices","originalTimeColumnSlug","originalTimeColumn","originalStartTimeColumnSlug","originalStartTimeColumn","originalTimes","originalValueColumnSlug","originalValues","numErrorValues","numUniqs","valuesAscending","allTimes","uniqTimesAsc","uniqEntityNames","allEntityNames","owidRows","owidRowsByEntityName","owidRowByEntityNameAndTime","valuesByTime","valueByTimeAndEntityName","valueByEntityNameAndOriginalTime","latestValueByEntityName","isOwidColumn","isOwidTable","MissingColumn","TimeColumn","AbstractColumnWithNumberFormatting","conversionFactor","formatValueShortWithAbbreviations","formatValueLong","formatForTick","formatForCsv","formatTime","formatTimeShort","formatTimeShortEnd","formatTimeRange","formatTimeComparison","significantFigures","getUniqueValuesGroupedBy","indexColumnSlug","indexValues","getValuesAtIndices","indexVal","presentation","titlePublic","indicesWhere","queries","needsParsing","skipParsing","jsType","columnStore","indices","sourceName","sourceLink","dataPublisherSource","retrievedDate","additionalInfo","getTimesAtIndices","entityNameSlug","entities","times","originalTime","originalValue","valueByEntityNameAndTime","StringColumn","SeriesAnnotationColumn","CategoricalColumn","OrdinalColumn","allowedValuesSorted","_initProto1","RegionColumn","ContinentColumn","ColorColumn","BooleanColumn","NumberOrStringColumn","valAsString","AbstractNumericColumn","_parse","NumericColumn","NumericCategoricalColumn","IntegerColumn","CurrencyColumn","_initProto3","PercentageColumn","_initProto4","RelativePercentageColumn","PercentChangeOverTimeColumn","DecimalPercentageColumn","RatioColumn","EntityIdColumn","EntityCodeColumn","EntityNameColumn","periodLength","getUniformlySpacedTimes","sortedTimes","addPeriods","countPeriods","getConsecutiveTimes","YearColumn","intervalName","preposition","memoFormatDay","memoFormatDayCsv","memoFormatMonth","memoFormatMonthCsv","memoFormatWeek","monday","memoFormatWeekCsv","ww","padStart","isoWeekYear","memoFormatQuarter","quarter","memoFormatQuarterCsv","memoParseDate","DayColumn","DateColumn","MonthBasedPeriodColumn","periodsSinceYearZero","monthsSinceYearZero","monthsPerPeriod","startOfPeriod","firstPeriod","lastPeriod","period","periods","ColumnTypeMap","SeriesAnnotation","Categorical","Ordinal","Region","Continent","NumberOrString","Numeric","QuarterColumn","endOf","MonthColumn","WeekColumn","sunday","DecadeColumn","startOfDecade","decade","Time","Boolean","Currency","Percentage","RelativePercentage","Integer","DecimalPercentage","PercentChangeOverTime","Ratio","EntityCode","EntityId","EntityName","Population","PopulationColumn","PopulationDensity","PopulationDensityColumn","Age","AgeColumn","this$1","columnStoreToRows","firstCol","slugs","newRow","maxLength","numberOnly","makeAutoTypeFn","slugToType","numericSlugs","standardizeSlugs","colsToRename","guessColumnDefFromSlugAndRow","sampleValue","makeRowFromColumnStore","rowIndex","linearInterpolation","valuesSortedByTimeAsc","startIndexInValidIndices","validIndices","distBetweenStartAndEnd","currentValidIndexPointer","prevNonBlankIndex","nextNonBlankIndex","timeOfCurrent","timeOfPrevIndex","timeOfNextIndex","distLeft","distRight","toleranceInterpolation","onlyValidIndex","timeOfOnlyValid","timeDiff","prevTimeDiff","nextTimeDiff","makeKeyFn","cols","columnSlugs","col0","col1","col2","getColumnStoreLength","concatColumnStores","stores","lengths","slugsToKeep","R.first","newColumnStore","newColumnValues","toFill","rowsToColumnStore","columnsObject","guessColumnDefsFromRows","definedSlugs","firstRowWithValue","autodetectColumnDefs","rowsOrColumnStore","replaceDef","newDefs","newDef","renameColumnStore","newStore","columnRenameMap","getDropIndexes","arrayLength","replaceRandomCellsInColumnStore","indexesToDrop","replacementGenerator","rowsFromMatrix","trimMatrix","matrix","trimEmptyColumns","trimArray","trimEmptyRows","parseDelimited","papaParseToD3","dsvParsed","Papa","detectDelimiter","parseFn","rawRow","isRowEmpty","isCellEmpty","trimAt","applyNewSortOrder","newArr","newOrder","sortColumnStore","sortFn","makeSortByFn","isSorted","colValues","colIndex","av","bv","emptyColumnsInFirstRowInDelimited","emptySlugs","TransformParamType","\"TimeSlug\"","\"EntitySlug\"","\"DataSlug\"","\"Number\"","insertMissingValuePlaceholders","filledRange","timeToValueIndex","computeRollingAverage","windowSize","valueIndex","expand","expandLeft","expandRight","windowIndex","timeSinceEntityExceededThreshold","timeSlug","entitySlug","thresholdAsString","groupValues","columnValues","timeValues","currentGroup","groupExceededThresholdAtTime","rollingAverage","currentEntity","currentValues","currentTimes","averages","divideBy","numeratorSlug","denominatorSlug","numeratorValues","denominatorValues","denominator","availableTransforms","asPercentageOf","percentChange","_timeSlug","previousEntity","multiplyBy","subtract","columnSlugA","columnSlugB","subValues","duplicate","availableTransformNames","isTransformName","transformName","paramDefs","paramDef","applyTransforms","transformHasRun","paramValues","CoreTable","transformCategory","inputColumnStore","canReuseInputColumnStore","delimitedAsColumnStore","lastRow","numColumns","timeColumn","columnsWithParseErrors","numColumnsWithErrorValues","numValidCells","colStoreIsEqualToParent","columnNames","columnTypes","columnJsTypes","numericColumnSlugs","columnsAsArray","inputColumnStoreToRows","inputAsTable","explainColumns","numColsToParse","_columns","tableDescription","timeToLoad","initTime","originalInput","advancedOptions","inputColumnDefs","columnDefinitionsFromInput","sourceSlug","sourceDef","valuesFromColumnDefs","setColumn","autodetectedColumnDefs","providedSlugs","Delimited","LoadFromDelimited","Matrix","LoadFromMatrix","RowStore","LoadFromRowStore","LoadFromColumnStore","storeHasAllColumns","columnsFromTransforms","colsToParse","forceReuseColumnStore","filterMask","inputColumnsToParsedColumnStore","blankColumnStore","valuesThatMayBeMobxProxy","_numericColumnSlugs","renamedRows","tableSlug","missingCols","unparsedVals","columnsToMaybeParse","firstInputRow","missingTypes","getColumns","alreadyTypedSlugs","ColumnType","noopTransform","Noop","betweenTime","_computedKey","firstColValues","getFirstColumnWithType","columnTypeName","maybeTimeColumn","rootTable","valueColumnSlug","indexCol","valueCol","valueValues","valueIndices","grep","searchStringOrRegex","rowFilter","opName","FilterMask","isNoop","FilterRows","columnFilter","SortRows","groupBoundaries","_columnsAsArray","domainFor","mins","maxes","dump","rowLimit","dumpPipeline","dumpColumns","dumpRows","ancestors","explanation","rowsFrom","dumpInputTable","ColumnStore","rowsAt","findRows","findRowsIndices","where","queryDescription","appendRows","opDescription","updateDefs","UpdateColumnDefs","FilterColumns","dropColumns","columnsToDrop","dropEmptyRows","dropRowsAt","dropRowsWithErrorValuesForAnyColumn","dropRowsWithErrorValuesForAllColumns","renameColumn","oldSlug","newSlug","renameColumns","oldSlugs","newSlugs","RenameColumns","replaceCells","replaceFn","UpdateRows","combineColumns","combineFn","CombineColumns","replaceNonPositiveCellsForLogScale","replaceNegativeCellsWithErrorValues","replaceNonNumericCellsWithErrorValues","replaceRandomCells","appendColumns","AppendColumns","duplicateColumn","overrides","appendColumnsIfNew","toMatrix","toTypedMatrix","tables","uniqDefs","Concat","slug1","slug2","cartesianProductSize","existingRowValues","val1","val2","rowsToAddCol1","rowsToAddCol2","col2UniqValuesCount","existingVals2","appendColumnStore","appendTable","getPreposition","keepThese","keepIndexes","originalColumn","newColumn","OwidTable","availableEntityNames","availableEntityNameSet","entityNameColumn","entityCodeColumn","entityCodeSlug","entityIdColumn","entityIdSlug","timeRange","rowIndicesByEntityName","sortedByTime","entityNameColorIndex","entityNameToCodeMap","columnDisplayNameToColorMap","fromUrl","columnDefs","csv","getAnnotationColumnSlug","annotationsColumnSlug","getAnnotationColumnForColumn","getTimesUniqSortedAscForColumns","timeDomainFor","originalTimeDomainFor","filterByEntityNames","namesSet","filterByEntityNamesUsingIncludeExcludePattern","excluded","included","excludedSet","includedSet","excludeFilter","includeFilter","excludedList","includedList","filterByTimeRange","isBlank","adjustedStart","adjustedEnd","timeColumnSlug","filterByTargetTimes","targetTimesSet","entityNameToIndices","matchingIndices","allTimesAsc","hasAnyColumnNoValidValue","dropAllRows","dropRowsWithErrorValuesForColumn","dropEntitiesThatHaveNoDataInSomeColumn","indexesByEntityName","entityNamesToKeep","indicesForEntityName","hasSomeValidValueForEntityInCol","entityNamesToDrop","droppedEntitiesStr","rowEntityName","dropEntitiesThatHaveSomeMissingOrErrorValueInAllColumns","uniqTimes","entityNamesToIterateOver","entityCount","makeOpName","hasSomeInvalidValueForEntityInCol","sumsByTime","toPercentageFromEachEntityForEachTime","timeTotals","timeTotal","UpdateColumnDefsAndApply","toPercentageFromEachColumnForEachEntityAndTime","columnStorePatch","totals","__","toTotalGrowthForEachColumnComparedToStartTime","startTimeBound","newRows","rowsForSingleEntity","valueSlug","comparisonValue","keepMinTimeAndMaxTimeForEachEntityOnly","indexMap","getAverageAnnualChangeIndicesByEntity","nonZeroValueIndices","allValuePairsHaveDistinctTime","toAverageAnnualChangeForEachEntity","startRow","endRow","startTimeSlug","derivedFrom","relationship","toPrettyCsv","excludeColumns","useShortNames","makeShortName","getLabelForColumn","formatDataColumnName","dataSlug","dataColumn","formatTimeColumnName","timeString","toCsv","formatColumnName","EntityColor","getColorForEntityName","getLatestValueForEntity","entitiesWith","withAllRows","interpolation","newValues","newTimes","interpolateColumnWithTolerance","toleranceStrategyOverride","toleranceOverride","timeColumnOfTable","maybeTimeColumnOfValue","timeColumnOfValue","interpolateInBothDirections","interpolateBackwards","backwards","interpolateForwards","forwards","interpolationResult","timeToleranceBackwards","timeToleranceForwards","includeInTable","interpolateColumnLinearly","extrapolate","maybeTimeColumnSlug","originalColumnSlug","originalColumnDef","extrapolateAtStart","extrapolateAtEnd","interpolateColumnsByClosestTimeMatch","columnA","columnB","toleranceA","toleranceB","valuesA","valuesB","newValuesA","newValuesB","newTimesA","newTimesB","availableTimesA","availableTimesB","timePairs","timeAtoTimeB","pairedTimesInA","candidateTimeA","candidateTimeB","candidateIndexA","candidateIndexB","originalTimeColumnASlug","originalTimeColumnBSlug","sampleEntityName","BLANK_TABLE_MESSAGE","BlankOwidTable","extraTableDescription","InteractionState","isInteractedWith","isInteractionModeActive","activeValue","autoDetectYColumnSlugs","yColumnSlugs","yColumnSlug","getDefaultFailMessage","makeSelectionArray","entityType","getSeriesKey","series","seriesName","autoDetectSeriesStrategy","handleProjections","seriesStrategy","columnThreshold","transformedTable","yColumns","makeClipPath","renderUid","getShortNameForEntity","isTargetOutsideElement","getHoverStateForSeries","hoveredSeriesNames","isHoverModeActive","byHoverThenFocusState","hover","background","generateGrapherImageSrcSet","defaultSrc","existingQueryParams","imWidths","imWidth","combineHistoricalAndProjectionColumns","historicalSlug","projectedSlug","combinedSlug","slugForIsProjectionColumn","transformFn","historical","projected","historicalTimeDiff","projectionTimeDiff","shouldAddIsProjectionColumn","NoDataPattern","patternId","noDataPattern","roundedScale","patternTransforms","patternUnits","patternTransform","ChartPatternDefs","getChartSvgProps","keepInputOrder","sortByColumnValue","sortColumn","getEntityName","sortByConfig","sortConfig","keyFns","sortByFunc","sortedRows","textWidth","roundFontSize","scaleFontSize","sizeAtBase16","baseFontSize","isToleranceDistanceValid","isToleranceAppliedToStart","isToleranceAppliedToEnd","minRequiredGap","formatTimeSpan","onDocumentClick","onDocumentKeyDown","createRef","componentDidMount","componentWillUnmount","isDimmed","TooltipFooterIcon","\"Notice\"","\"Stripes\"","\"Significance\"","TooltipContext","createContext","makeAxisLabel","_fullMatch","untrimmedMainLabelText","labelTextInParens","mainLabelText","NO_DATA_COLOR","TooltipValue","labelVariant","showSignificanceSuperscript","Variable","SignificanceIcon","asSuperscript","TooltipValueRange","arrowColor","trend","firstTerm","lastTerm","superscript","trendArrowColor","mainLabel","columnName","formattedUnit","displayOriginalTimes","classnames","TooltipTable","useContext","focal","focused","swatched","swatch","tooEmpty","tooTrivial","showTotals","showTotalsAtTop","Bottom","totalsCells","blurred","striped","swatchColor","swatchOpacity","_m","seriesParenthetical","missing","makeTooltipToleranceNotice","plural","makeTooltipRoundingNotice","formattedNumSigFigs","uniqueNumSigFigs","toTooltipTableColumns","formatTooltipRangeValues","formatTooltipValueShort","formatTooltipValue","formatTooltipValueShortWithAbbreviations","firstValue","TOOLTIP_FADE_DURATION","PlainTooltipState","newTarget","speed","TooltipState","TooltipCard","tooltipWidth","tooltipHeight","updateDimensions","scrollWidth","tooltipStyle","containerBounds","isPinnedToBottom","adjustedOffsetY","adjustedOffsetX","offsetYDirection","offsetXDirection","componentDidUpdate","titleAnnotation","subtitleFormat","dissolve","hasHeader","timeNotice","plain","Provider","TooltipIcon","Notice","Significance","None","Stripes","tooltipManager","connectTooltipToContainer","removeToolTipFromContainer","Modal","grapherRef","isHeightFixed","alignVertical","contentStyle","UNSAFE_PortalProvider","ModalOverlay","onOpenChange","AriaModal","Dialog","\"indefinite\"","__webpack_modules__","STARTS_WITH_VOWEL","__webpack_require__","irregulars","indefinite","handleOptions","ending","startsWithVowel","ACRONYM","IRREGULAR_ACRONYM","isIrregularAcronym","bothOrNeither","isIrregular","NUMBERS","EIGHT_ELEVEN_EIGHTEEN","ELEVEN_EIGHTEEN","startsWith11Or18","EXTRAS","getFirst","xor","checkForIrregulars","__webpack_module_cache__","cachedModule","moduleId","fm","fx","product","scalar","translateX","translateY","v$4","S$3","tt","s$4","t.parse","t.translateX","t.translateY","t.scaleX","t.scaleY","t.multiply","V$2","a$7","SortIcon","isActiveIcon","faIcon","isOptionGroup","flattenOptions","Dropdown","menuClassName","isClearable","renderTriggerValue","renderMenuOption","useFilter","sensitivity","flatOptions","handleSelectionChange","selected","listBox","ListBox","ListBoxSection","Header","ListBoxItem","popover","Popover","Autocomplete","SearchField","Input","Select","SelectValue","MapSelectionArray","selectedEntitiesWithRegionInfo","selectedCountries","selectedCountryNames","hasCountries","selectedCountryNamesInForeground","selectedCountryNamesInBackground","selectedRegions","selectedRegionNames","hasRegions","countryNamesForSelectedRegionsSet","countryNamesForSelectedRegions","memberCountries","DEFAULT_STROKE_COLOR","HOVER_STROKE_COLOR","DEFAULT_STROKE_WIDTH","HOVER_STROKE_WIDTH","BLUR_FILL_OPACITY","BLUR_STROKE_OPACITY","PROJECTED_DATA_LEGEND_COLOR","MAP_CHART_CLASSNAME","CHOROPLETH_MAP_CLASSNAME","GEO_FEATURES_CLASSNAME","GLOBE_COUNTRY_ZOOM","DEFAULT_GLOBE_ROTATION","DEFAULT_GLOBE_ROTATIONS_FOR_TIME","UTC_MORNING","UTC_MIDDAY","UTC_EVENING","ANNOTATION_COLOR_DARK","ANNOTATION_COLOR_LIGHT","MAP_REGION_LABELS","World","Africa","NorthAmerica","SouthAmerica","Asia","Europe","Oceania","MAP_REGION_NAMES","RenderFeatureType","\"Map\"","\"Globe\"","GLOBE_VIEWPORTS","MAP_VIEWPORTS","MapConfigDefaults","MapConfig","R.round","regionGroupLabels","regionGroupKeySet","regionPublisherSet","publishersByLookupKey","groupEntitiesByRegionType","regionsGroupedByType","entitiesByRegionGroup","historicalCountries","nonHistoricalCountries","R.partition","incomeGroups","entitiesByPublisher","R.groupBy","parseLabel","publisher","R.entries","publisherKey","isAnyRegionPublisher","isEntityRegionGroupKey","getCatalogAssetKey","catalogPaths","columnDefsByCatalogKey","getCatalogDataUrl","_loadCatalogData","loadCatalogData","_.memoize","EXTERNAL_SORT_INDICATOR_DEFINITIONS","\"population\"","\"gdp\"","regionNamesSet","populateLocalEntities","isTimeScatter","chartHasSubYearlyData","mapConfig","searchPlaceholderEntityType","searchInput","entityFilter","localEntityNames","interpolatedSortColumnsBySlug","isProjectionBySlugAndTimeAndEntityName","interpolatedSortColumns","isLoadingExternalSortColumn","inputTable","someEntitiesAreRegions","entitiesAreCountriesOrRegions","supportsSortingByExternalIndicators","numericalChartColumns","externalSortColumnsByCatalogKey","externalSortIndicatorDefinitions","projectionColumnInfoByCombinedSlug","sortOptions","sortValue","isSortedByName","selectionArray","allEntitiesSelected","availableEntities","filteredAvailableEntities","isMultiMode","fuzzy","searchResults","selectedEntities","onSearchKeyDown","onDeselectEntities","loadAndSetExternalSortColumn","onChangeSortSlug","onChangeSortOrder","filterOptions","onChangeEntityFilter","filterValue","shouldShowFilterBar","selectedSortColumn","selectedSortColumnMaxValue","barScale","scrollableContainer","searchFieldRef","contentRef","sortConfigByName","disposers","initSortConfig","updateSortConfigIfOptionHasBecomeUnavailable","structural","correctedState","correctedSortConfig","shouldBeSortedByName","entitySelectorState","getDefaultSortConfig","chartIndicatorSortOptions","setInterpolatedSortColumnBySlug","inputColumnSlugs","resetInterpolatedMapColumn","mapColumnSlug","sortSlug","setInterpolatedSortColumn","interpolateSortColumn","localCountryInfo","countryRegionsWithoutIncomeGroups","userEntityCodes","userRegions","sortedUserRegions","setIsProjectionForSlug","valuesByTimeAndEntityName","isOnScatterTab","xColumnSlug","isOnMapTab","timeTolerance","interpolateAndCombineSortColumns","projectionInfo","combinedColumn","isProjectionValues","clearSearchInput","resetEntityFilter","updateSortSlug","toggleSortOrder","isExternalIndicator","external","resolveLookupTimeForColumn","isExternal","getSortColumnLabelTime","lookupTime","formatTimeForSortColumnLabel","labelTime","isEntityMuted","isEntityMutedInSelector","canHighlightEntities","canChangeEntity","singular","isSortSlugValid","isEntityFilterValid","tableForSelection","regionInfo","additionalDataLoaderFn","matchingColumns","matchingColumn","isExternalSortIndicatorMatch","catalogKey","matchingKeys","projectionColumnInfoBySlug","combinedColumnHasHistoricalDataForTime","isProjectionByTimeAndEntityName","makeSortColumnLabelForCombinedColumn","projectedLabel","getTitleForSortColumnLabel","historicalLabel","hasHistoricalDataForTime","arbitrarySlug","hasHistoricalValues","chartColumn","formattedTime","matchingSlugs","slugsToExclude","isEntityNameSlug","entityTypePlural","langs","searchableEntity","sortColumnValues","alternativeNames","isLocal","sortEntities","sortLocalsToTop","entityNameSet","byName","byValue","worldEntity","locals","others","sortedLocals","sortedOthers","withValues","withoutValues","sortedWithValues","localWith","otherWith","sortedLocalWith","sortedOtherWith","sortedWithoutValues","withKeyArray","isEntitySelected","onDeselectEntity","onSelectEntity","logEntitySelectorEvent","onClearEntities","dropEntityNames","isEntitySelectorModalOrDrawerOpen","buildOwidTableForCatalogData","filteredData","sortByTarget","regionGroups","regionGroupKey","renderFilterBar","renderFilterTriggerValue","renderFilterMenuOption","renderSearchBar","renderSortBar","renderSortTriggerValue","renderSortMenuOption","renderSearchResults","SelectableEntity","getBarPropsForEntity","isMuted","renderAllEntitiesInSingleMode","scaleLinear","barFormattedValue","barWidth","renderAllEntitiesInMultiMode","hasFewEntities","shouldHideAvailableEntities","availableEntitiesTitle","is2dContinentActive","Flipper","spring","stiffness","damping","flipKey","Flipped","flipId","SelectableEntityListItem","LocationIcon","flippedListItemSpring","selectableEntityProps","catalogPath","yearColumnDef","originalTimeColumnDef","frameBounds","modalBounds","padWidth","padHeight","EntitySelector","CsvDownloadType","\"CurrentSelection\"","createCsvBlobLocally","csvDownloadType","fullTable","filteredTable","Blob","getDownloadSearchParams","URLSearchParams","externalSearchParams","searchParamsToExclude","getDownloadUrl","searchStr","getDataDownloadFilename","getNonRedistributableInfo","nonRedistributableCols","nonRedistributable","urlMain","useStateWithDebouncedClear","timerRef","clearDelay","useDataApiDownloadConfig","setOnlyVisible","setShortColNames","downloadCtx","downloadCtxBase","getContentBoxSize","px","horizontal","vertical","useElementBounds","throttleTimeOrOptions","setBounds","updateBoundsImmediately","preserveLastNonZeroBounds","currentBounds","updateBoundsThrottled","throttleTime","_.throttle","useDismissOnOutsidePointerDownOrUnmount","Tabs","containerClassName","AriaTabs","onSelectionChange","TabList","Tab","DownloadModalTabName","\"Vis\"","\"Data\"","activeTab","onTabChange","tabItems","activeDownloadModalTab","activeModal","TabPanel","shouldForceMount","DownloadModalVisTab","DownloadModalDataTab","staticBounds","captionedChartBounds","isExportingSquare","isWikimediaExport","targetBounds","targetHeight","export","markAsReady","fallbackPngUrl","baseFilename","onPngDownload","onSvgDownload","toggleExportFormat","toggleExportForUseOnWikimedia","toggleIncludeDetails","hasDetails","showInteractiveEmbedTip","openEmbedDialog","showCopyPngButton","onCopyPng","svgBlob","svgPreviewUrl","pngBlob","pngPreviewUrl","shouldIncludeDetails","staticBoundsWithDetails","rasterize","includeDetails","svgUrl","displaySlug","logImageDownloadEvent","isOnArchivalPage","hasArchivedPage","Embed","showAdminControls","ClipboardItem","queueMicrotask","isRegenerating","previewWidth","previewHeight","boundScalar","isOnChartOrMapTab","Callout","SourceAndCitationSection","otherSources","datePublished","originsUniq","fullProcessingPhrase","ApiAndCodeExamplesSection","codeExamples","yColumnsFromDimensionsOrSlugsOrAuto","tableForDownload","serverSideDownloadAvailable","isServerSideDownloadAvailable","externalQueryParams","filteredTableForDownload","onDownloadClick","Accept","downloadHelpText","activeView","isOnTableTab","fullDataDescription","filteredDataDescription","Full","CurrentSelection","SourcesKeyDataTable","keyDataWithoutSource","SourcesDescriptions","hasFaqEntries","descriptionShort","PortaledPopover","TabsWithDropdown","numVisibleTabs","visibleItems","hiddenItems","selectedHiddenItem","lastVisibleItem","Menu","MenuItem","MenuTrigger","MAX_CONTENT_WIDTH","TAB_FONT_SIZE","TAB_GAP","TAB_TITLE_SPACING","setActiveTabKey","showStickyHeader","modalPadding","editBaseUrl","tabLabels","tabLabelWidths","activeTabKey","adminBaseUrl","inputColumnsWithSources","makeTabLabelString","makeTabLabelElement","measureTabWidth","renderSource","Source","renderTabs","isNarrow","visibleLabels","currentWidth","moreButtonWidth","labelWidth","getVisibleLabels","renderMultipleSources","renderNoSources","renderModalContent","citations","editUrl","datapageHasFAQSection","showDescriptions","sourcesSectionHeading","hideSourcesForDisplay","descriptionBelowTitle","owidVariableId","attributionFragments","faqCount","renderTitle","secondary","getWidth","borderWidth","CommandPalette","commands","sortedCommands","command","filteredCommands","cat","combo","embedOptions","iframeEmbedHeight","embedUrl","embedArchivedUrl","areEmbedAndArchivedOriginsSame","hideExternalControlsInEmbedUrl","recommendedIframeEmbedHeight","codeSnippetForUrl","canHideExternalControlsInEmbed","setHideExternalControlsInEmbedUrl","KEYBINDING_MODIFIER_KEYS","DEFAULT_TIMEOUT","DEFAULT_EVENT","PLATFORM","MOD","ALT_GRAPH_ALIASES","isKeyboardEvent","defaultKeybindingsHandlerIgnore","getModifierState","parseKeybinding","press","requiredModifiers","optionalModifiers","matchKeybindingPress","hasAltGraph","createKeybindingsHandler","keybindings","keybindingsMap","conflicts","tinykeys","onKeyEvent","keybindingMap","applyDisplayAndConversionFactor","displayEntries","R.pipe","R.uniqueBy","override","R.filter","R.map","R.isEmpty","displayBySlug","scaleByConversionFactor","mergeDisplayIntoDefs","mergedDef","_.isInteger","scaledTable","legacyToOwidTableAndDimensions","entityMeta","entityMetaById","baseColumnDefs","dimensionColumns","variableTablesToJoinByYear","variableTablesToJoinByDay","variableTablesWithYearToJoinByEntityOnly","timeColumnDef","timeColumnDefFromOwidVariable","valueColumnDef","columnDefFromOwidVariable","annotationMap","annotationColumnDef","annotationMapAndDefFromOwidVariable","timeColumnValuesFromOwidVariable","entityIds","entityCodes","variableTable","getIndicatorDisplayOverride","variablesJoinedByDay","fullJoinTables","joinedVariablesTable","daysColumn","getYearFromISOStringMemoized","dayValue","yearsForDaysValues","newYearColumn","withFinestTimeColumnInterval","dayOrYearSlug","appendSelectedEntityColors","selectedEntityColors","valueFn","indexValuesPerTable","mergeFallbackLookupColumns","indexColumnNames","mergeFallbackLookupValuesPerTable","fallbackColumns","sharedColumnNames","allIndexValuesArray","allIndexValues","columnsToAddPerTable","defsToAddPerTable","R.zip","tableAndColumns","tableIndex","indexHits","fallbackMergeIndices","columnSet","fallbackIndex","variableTables","joinedTable","TIME_COLUMN_DEF_BY_INTERVAL","variableTypeToColumnType","getSortFromDimensions","isContinent","parsedType","variableData","convertLegacyYears","zeroDay","annotationsSlug","annotationsToMap","entityAnnotationsMap","SidePanel","SlideInDrawer","OWID_LOGO_SVG","SMALL_OWID_LOGO_SVG","OWID_WORDMARK_SVG","logos","owid","wordmark","CORE_LOGO_SVG","smallOwidLogo","Logo","logo","useSmallVersion","heightScale","renderSVG","targetX","targetY","renderHTML","AbstractHeader","useBaseFontSize","showTitle","showSubtitle","titleText","titleAnnotationText","titleAriaLabel","subtitleText","logoWidth","logoHeight","titleFontWeight","titleLineHeight","initialTitleFontSize","titleAnnotationFontSize","titleStyle","useFullWidthForSubtitle","subtitleMarginTop","subtitleWidth","subtitleFontSize","subtitleLineHeight","hasContent","verticalPadding","hideTitle","hideSubtitle","mainTitle","fullTitle","effectiveSubtitle","isOwidLogo","shouldLinkToOwid","isSmall","isStaticAndSmall","isMedium","logoPadding","makeTitle","mainFragment","annotationFragment","initialFontSize","potentialFontSizes","candidateAt","findLargestFontSizeThatFits","fits","_fontSize","singleLineTitle","singleLineMainText","candidateWithFewerLines","isSemiNarrow","canonicalUrl","isOnCanonicalUrl","renderSubtitle","paddingBottom","minHeight","detailsMarkerInSvg","getShareData","canUseShareApi","shareData","canShare","shouldShareUsingShareApi","shareUsingShareApi","share","ShareMenu","showShareMenu","dismiss","onClickSomewhere","onEmbed","onNavigatorShare","onCopyUrl","menuRef","copiedLink","copiedPng","shouldShow","_ShareMenu","rasterizePromise","createNarrativeChartUrl","BUTTON_HEIGHT","PADDING_BETWEEN_BUTTONS","BUTTON_WIDTH_ICON_ONLY","ActionButtons","widthWithButtonLabels","widthWithIconsOnly","showButtonLabels","downloadButtonWithLabelWidth","shareButtonWithLabelWidth","fullScreenButtonLabel","fullScreenButtonWithLabelWidth","donateButtonWithLabelWidth","exploreTheDataButtonWithLabelWidth","downloadButtonWidth","shareButtonWidth","fullScreenButtonWidth","donateButtonWidth","exploreTheDataButtonWidth","toggleShareMenu","toggleFullScreenMode","openDownloadModal","hasDownloadButton","hasDonateButton","hasShareButton","hasFullScreenButton","hasExploreTheDataButton","buttonCount","remainingButtonCount","computeButtonWidth","isInFullScreenMode","isShareMenuActive","Download","Data","Vis","hideDownloadButton","hideDonateButton","isAdmin","hideShareButton","hideFullScreenButton","hideExploreTheDataButton","renderShareMenu","ActionButton","showLabel","iconPlacement","buttonClassnames","buttonContents","onMouseDown","AbstractFooter","HORIZONTAL_PADDING","hideOriginUrl","sourcesLine","linkSourcesToDatapageMetadata","sourcesText","noteText","markdownNoteText","showsCcLicense","licenseText","licenseUrl","originUrlWithProtocol","finalUrl","correctedUrlText","finalUrlText","licenseAndOriginUrlText","sourcesFontSize","showNote","actionButtonsWidthWithIconsOnly","useFullWidthSources","useFullWidthNote","sourcesMaxWidth","noteMaxWidth","licenseAndOriginUrlMaxWidth","showLicenseNextToSources","note","licenseAndOriginUrl","actionButtonsMaxWidth","actionButtons","scrollToDatapageMetadataSources","topContentHeight","bottomContentHeight","tooltipTarget","useNewDatapageMetadataLayout","effectiveNote","hasOWIDLogo","originUrl","constructLicenseAndOriginUrlText","urlText","hideNote","sourcesWidth","noteWidth","leftTextWidth","topTextWidth","licenseAndOriginUrlWidth","grapher","mouse","renderLicense","sourcesElement","getElementById","setAttribute","scrollIntoView","Sources","renderSources","isEmbeddedInAnOwidPage","datapageSectionId","renderNote","renderVerticalSpace","renderTopContent","renderPadding","renderBottomContent","alignItems","textAlign","whiteSpace","letterSpacing","textColor","Footer","linkStyle","targetAttr","licenseSvg","originUrlSvg","MIN_MS_PER_TICK","MAX_MS_PER_TICK","TARGET_ANIMATION_DURATION_MS","TimelineDragTarget","\"Start\"","\"End\"","\"Both\"","TimelineController","msPerTick","shouldUseEqualSpacing","resetToBeginning","play","pause","togglePlay","updateStartTime","updateEndTime","startHandleTimeBound","endHandleTimeBound","numTimePoints","topDecileSum","timeToProgress","progressToTime","progress","startTimeProgress","endTimeProgress","findIndexOfTime","getNextTime","getPrevTime","getNextValidTime","avoidTime","nextTime","allowHandlesOnSameTime","getPrevValidTime","prevTime","rangeMode","toggleRangeMode","isAtEnd","beginning","numberOfTicks","isTimelineAnimationPlaying","isTimelineAnimationActive","onPlay","tickCount","onlyTimeRangeSelectionPossible","increaseStartTime","decreaseStartTime","increaseEndTime","decreaseEndTime","getLargeStepForward","targetIndex","getLargeStepBackward","increaseStartTimeByLargeStep","decreaseStartTimeByLargeStep","increaseEndTimeByLargeStep","decreaseEndTimeByLargeStep","animationStartTime","areHandlesOnSameTimeBeforeAnimation","onDrag","dragOffsets","isSingleDragMarker","timeToIndex","indexToTimeBound","clampedIndex","setDragOffsets","inputTime","setDragOffsetsEqualSpacing","setDragOffsetsProportional","closestTime","clickIndex","clampTimeBound","dragRangeToTime","dragRangeToTimeEqualSpacing","dragRangeToTimeProportional","indexSpan","endTimeBound","dragHandleToTime","constrainedHandle","resetStartToMin","resetEndToMax","setStartToMax","setEndToMin","setStartAndEndTimeFromInput","setStartTimeFromInput","setEndTimeFromInput","HANDLE_DIAMETER","HANDLE_TOOLTIP_FADE_TIME_MS_MOBILE","SLIDER_CLASS","PLAY_BUTTON_CLASS","NAVIGATION_KEYS","dragTarget","controller","canEditTimeViaTooltip","dateInputGranularity","showStartTooltip","showEndTooltip","showTooltips","onMouseUp","areBothHandlesVisible","shouldShowHoverTimeHandle","hoverTimeProgress","onMouseOverSlider","onMouseMoveSlider","onMouseLeaveSlider","hideTooltipsAfterInteraction","onPlayTouchEnd","onSliderTouchStart","disableChartRowAnimationForNextFrame","enableChartRowAnimation","onStartEditing","resetEditState","onTooltipMouseEnter","onTooltipMouseLeave","onEdgeButtonMouseEnter","onMinTimeButtonClick","onMaxTimeButtonClick","onCompleteYear","onChangeYear","onCompleteDate","onChangeDate","getStartTimeForNavigationKey","getEndTimeForNavigationKey","updateStartTimeOnKeyDown","updateEndTimeOnKeyDown","startHandleTooltip","endHandleTooltip","hoverTooltip","startTooltipVisible","endTooltipVisible","lastUpdatedTooltip","hoverTime","editHandle","isHoveringOverTooltip","slider","playButton","chartRowAnimationResetFrame","timelineDragTarget","timelineController","sliderBounds","fromRect","getInputTimeFromMouse","hideStartTooltipWithDelay","hideEndTooltipWithDelay","getDragTarget","isStartMarker","isEndMarker","Both","Start","End","onTimelineClick","targetEl","classed","isSingleTimeSelectionActive","setHoverTime","mouseX","startX","clientWidth","mouseHoveringOverTimeline","isPlaying","wasPlaying","cancelAnimationFrame","disableChartRowAnimation","requestAnimationFrame","calendarDateToSnappedDaysSinceEpoch","calendarDateToDaysSinceEpoch","shouldMoveBothHandles","convertToTime","formattedStartTime","SimpleTimeTooltip","isEditing","EditableDateTooltip","isDateValid","onComplete","onMouseEnter","EditableYearTooltip","getTimeForKey","formattedEndTime","formattedHoverTime","formattedMinTime","formattedMaxTime","onMouseOver","disablePlay","minWidth","TimelineEdgeButton","TimelineHandle","offsetPercent","formattedCurrTime","isRelevantNavigationKey","zIndex","TimelineInterval","ariaHidden","castToNumberIfPossible","setPrevState","newTime","TimelineDateInput","daysSinceEpochToCalendarDate","setCurrentValue","shouldApplyImmediately","setShouldApplyImmediately","dateField","DateField","DateInput","MonthYearSegment","DateSegment","I18nProvider","CalendarDate","utcMs","UTC","VALID_CHART_TYPE_COMBINATIONS","CHART_TYPE_LABEL","LONG_CHART_TYPE_LABEL","MAP_CHART_TAB_CONFIG_OPTION_TO_CHART_TYPE_NAME","MAP_CHART_TYPE_NAME_TO_CHART_TAB_CONFIG_OPTION","R.invert","mapTabConfigOptionToChartTypeName","tabOption","mapChartTypeNameToTabConfigOption","mapGrapherTabNameToConfigOption","tabName","mapGrapherTabNameToQueryParam","makeLabelForGrapherTab","findPotentialChartTypeSiblings","validCombination","validSet","chartTypes","findValidChartTypeCombination","isChartTypeName","isValidTabQueryParam","isChartTab","isMapTab","getSupportedDimensionsForChartTypes","chartTypeSet","hasScatter","hasMarimekko","hasLineChart","hasDiscreteBar","MAX_VISIBLE_TABS","MAX_VISIBLE_TABS_BEFORE_OVERFLOW","shouldShowContentSwitchers","availableTabs","ContentSwitchers","visibleTabs","hiddenTabs","setTab","TabContent","selectedTab","oldTab","newTab","OverflowMenu","handleAction","EntitySelectionToggle","showToggle","toggle","_EntitySelectionToggle","isOnChartTab","hideEntityControls","shouldShowEntitySelectorAs","canChangeAddOrHighlightEntities","shouldShowDrawer","drawer","shouldShowModal","modal","canAddEntities","splitDefaultEntityLabel","entitySuffix","MapRegionDropdown","showMenu","_MapRegionDropdown","isFaceted","continentOptions","setAxisScale","isLinear","isRelativeMode","activeChartType","relativeToggleLabel","facetStrategyLabels","strategies","facetStrategy","facettingLabelByYVariables","availableFacetStrategies","entityChoice","byEntity","byMetric","isYDomainShared","yAxis","facetDomain","independent","SettingsMenu","showYScaleToggle","showXScaleToggle","showFacetYDomainToggle","showZoomToggle","showNoDataAreaToggle","showAbsRelToggle","showFacetControl","showSettingsMenuToggle","toggleVisibility","menuContentsChart","menuTitle","_SettingsMenu","canChangeScaleType","xAxis","canToggleRelativeMode","hasTimeline","xOverrideTime","filledDimensions","hideFacetControl","showFacetControlChartType","hasProjection","yLabel","xLabel","SettingsGroup","FacetStrategySelector","FacetYDomainToggle","AbsRelToggle","NoDataAreaToggle","ZoomToggle","AxisScaleToggle","renderSettingsButtonAndPopup","DialogTrigger","popoverMaxWidth","popoverMaxHeight","Heading","MapResetButton","_MapResetButton","shouldShowResetViewButton","shouldShowResetZoomButton","globeController","hideGlobe","resetGlobe","getEntityNamesForDataTableFilter","candidateNames","buildDataTableFilterOptions","toOption","regionGroupOptions","canFilterBySelection","hasDataTableFilterChoice","allOption","otherOptions","pickDefaultDataTableFilter","countriesOption","FILTER_LABELS","DataTableFilterDropdown","_DataTableFilterDropdown","dataTableFilterOptions","dataTableConfig","dataTableFilter","DataTableSearchField","placeholderEntityType","_DataTableSearchField","MapZoomToSelectionButton","_MapZoomToSelectionButton","isMapSelectionEnabled","rotateToSelection","GlobeIcon","isGroupedOption","MapZoomDropdown","sortedCountries","filteredOptions","populateLocalCountryName","_MapZoomDropdown","setFocusCountry","rotateToCountry","rotateToOwidContinent","countryOptions","sortLocalEntitiesToTop","local","nonLocal","focusCountry","ControlsRow","showControlsRow","framePaddingHorizontal","_ControlsRow","renderChartControls","renderTableControls","renderMapControls","renderMapControlsForDesktop","renderMapControlsForMobile","isStatic","defaultHelpText","helpText","centerPos","showHelpText","helpTextFontSize","messageWrap","helpWrap","gap","messageY","helpY","toProps","hideTextOutline","TargetTimeMode","\"point\"","\"range\"","SparklineKey","\"sparkline\"","PointColumnKey","RangeColumnKey","\"delta\"","\"deltaRatio\"","COMMON_DATA_TABLE_FILTERS","ENTITY_DATA_TABLE_SORT","dimIndex","columnKey","WIDTH","HEIGHT","DOT_RADIUS","Sparkline","strokeStyle","yDomain","makePath","columnNameByType","deltaRatio","sparkline","inverseSortOrder","tableConfig","timelineMinTime","timelineMaxTime","defaultSortState","sortState","sortValueMapper","hasSubheaders","updateSort","hasDimensionHeaders","tableCaption","loadedWithData","autoSelectedStartTime","columnsToShow","isSortable","dataTableDimensionsWithValues","displayDimensions","displayRows","sortedDisplayRows","closestTimelineMinTime","closestTimelineMaxTime","tableForDisplay","firstDimension","columnKeys","columnDefinitions","colDef","coreTableColumn","requestedSort","dataTableSort","availableColumns","sortIndex","orderIndices","dv","isSingleValue","isRangeValue","isRangeColumnKey","unknownValueKey","entityHeaderText","entityHeader","ColumnHeader","sortable","sortedCol","ENTITY_SORT_INDEX","headerText","colType","dimensionHeaders","singleColumn","dimensionHeaderText","colSpan","subheaderText","isDeltaColumn","dimensionSubheaders","headerRow","rowSpan","renderValueCellContent","columnDefinition","valuesForEntity","missingValueNotice","MissingValueNotice","getValueForEntityByKey","ClosestTimeNotice","renderEntityRow","ValueCell","isFirstColumn","singleDimension","renderNoDataMessage","NoDataMessage","AUTO_SELECTION_THRESHOLD_PERCENTAGE","numEntitiesInTable","firstTimeWithSufficientData","_count","numberOfEntitiesWithDataSortedByTime","dataTableSlugs","skips","formattingOverrides","getTargetTimesForColumn","targetTimeMode","targetValuesByEntity","interpolateTargetValues","valuesByEntityName","calculateDataValuesForTargetTimeMode","columnHasSparkline","constructColumnDefinitions","deltaColumns","tableDisplay","hideAbsoluteChange","hideRelativeChange","valueColumns","sparklineColumn","dvs","deltaValue","deltaRatioValue","isEntityColumn","sortIcon","activeIcon","shouldShowClosestTimeNotice","dimensionValue","isCommonDataTableFilter","isValidDataTableFilter","Emphasis","\"Elevated\"","\"Highlighted\"","\"Muted\"","resolveEmphasis","LINE_CHART_CLASS_NAME","DEFAULT_LINE_COLOR","VARIABLE_COLOR_STROKE_WIDTH","DEFAULT_MARKER_RADIUS","ELEVATED_MARKER_RADIUS","VARIABLE_COLOR_MARKER_RADIUS","DISCONNECTED_DOTS_MARKER_RADIUS","DEFAULT_LINE_OUTLINE_WIDTH","DEFAULT_LINE_STYLE","LINE_STYLE","NUMERIC_LEGEND_STYLE","CATEGORICAL_LEGEND_STYLE","CategoricalColorAssigner","leastUsedColor","getSeriesName","allowsMultiEntitySelection","hasMultipleEntitiesSelected","getColorKey","getAnnotationsMap","getAnnotationsForSeries","annotationsMap","anno","getYAxisConfigDefaults","toPlacedLineChartSeries","dualAxis","placedPoints","chartState","horizontalAxis","verticalAxis","findClosestTimeAtMouse","hoverMargin","innerBounds","invertedX","allValues","toRenderLineChartSeries","isSingleSeries","placedSeries","shouldElevateSingleSeries","_.sortBy","isFocusModeActive","FocusArray","seriesNameSet","seriesNames","hasFocusedSeries","clearAllAndAdd","LineChartState","transformedTableFromGrapher","focusArray","colorColumnSlug","formatColumn","colorColumn","isLogScale","categoricalColorAssigner","hasColorScale","missingDataStrategy","seriesByName","colorScale","OwidDistinctLines","colorScaleOverride","transformTable","transformTableForSelection","yAxisConfig","colorScaleColumnOverride","fromDSL","invertColorScheme","autoColorMapCache","seriesColorMap","getColorScaleColor","constructSingleSeries","entityIndex","sortedSeries","canSelectMultipleEntities","colorValues","rowIndexes","colorValue","shortEntityName","seriesColor","plotMarkersOnly","plotMarkersOnlyInLineChart","toHorizontalAxis","updateDomainPreservingUserSettings","hideFractionalTicks","toVerticalAxis","yColumn","makeToleranceNotice","configuredTolerance","getMaxConfiguredTolerance","appliedColumns","columnsWithToleranceApplied","appliedTolerance","statedTolerance","appliedColumnsTimeRange","getTimeRangeOfColumns","formatToleranceNotice","lastTime","firstAppliedTime","lastAppliedTime","tableColumns","SlopeChartState","yScaleType","rawSeries","rawSeriesByEntityName","allYValues","toleranceNotice","xDomain","yDomainDefault","owidRowByTime","colorKey","isSeriesValid","shouldSeriesBePlotted","allSeriesForEntity","defaultDomain","yRange","xRange","DEFAULT_DISCRETE_BAR_STYLE","DISCRETE_BAR_STYLE","BAR_SPACING_FACTOR","DISCRETE_BAR_SORT_KEYS","DiscreteBarChartState","yColumnMode","hasProjectedData","isProjectionColumn","columnsAsSeries","entitiesAsSeries","sortedRawSeries","availableSortKeys","valuesToColorsMap","transformTableForIndependentColumns","transformTableForCombinedColumn","ySlugs","projectionSlugs","projectionSlug","otherSlug","hasSlopeChart","autoStrategy","constructSeries","isColumnStrategy","custom","getUniqValueColorMap","uniqueUnits","POSITIVE_COLOR","NEGATIVE_COLOR","AbstractStackedChartState","allStackedPoints","isEntitySeries","unstackedSeries","midpoints","shouldRunLinearInterpolation","seriesCount","stackedAreaDefault","numColorsInUse","areMultipleEntitiesSelected","hasMultipleYColumns","shortUnits","hasMultipleUnits","hasPercentageUnit","pointColor","valueOffset","interpolated","useValueBasedColorScheme","isAllZeros","prevY","middleY","stackSeries","seriesArr","seriesIndex","pointBelowThisOne","pointIndex","stackSeriesInBothDirections","pointsBelowThisOne","withMissingValuesAsZeroes","allXValuesSorted","pointsByPosition","resolveCollision","s2","yLast1","yLast2","yMax1","_.maxBy","yMax2","area1","area2","getXAxisConfigDefaultsForStackedBar","placeStackedAreaPoint","placeStackedAreaSeries","leftX","rightX","makeStackedAreaPolygon","baselineY","prevPoints","prevPlacedPoints","toPlacedStackedAreaSeries","validSeries","areaPoints","toPlacedStackedBarSeries","bar","barHeight","StackedAreaChartState","StackedBarChartState","unstackedSeriesWithMissingValuesAsZeroes","xValues","columnType","isDayEncoded","enforceUniformSpacing","LABEL_STYLE","STACKED_DISCRETE_BAR_SORT_KEYS","StackedDiscreteBarChartState","sortColumnSlug","applyMissingDataStrategy","totalValue","bars","SCATTER_POINT_DEFAULT_COLOR","SCATTER_POINT_OPACITY","SCATTER_POINT_STROKE_WIDTH","SCATTER_LINE_MIN_WIDTH","SCATTER_LABEL_DEFAULT_FONT_SIZE","MONTH_STEPS","QUARTER_STEPS","DAY_STEPS","WEEK_STEPS","DECADE_STEPS","makeDayTick","toCalendarValue","WEEK_GRID_REFERENCE","dayGridReference","dayGridPosition","monthGridPosition","labelGridWithYearOnChange","grid","isNewYear","formatWithYear","findGridForTarget","steps","gridForStep","targetCount","buildSubYearlyAxisTicks","bandValues","buildDiscreteTimeAxisTicks","buildContinuousQuarterlyAxisTicks","buildContinuousMonthlyAxisTicks","buildContinuousWeeklyAxisTicks","buildContinuousDailyAxisTicks","buildContinuousMonthGridTicks","spanMonths","anchorYear","yearsStep","monthsFromAnchor","buildContinuousDayGridTicks","spanDays","monthlyTicks","buildDecadeAxisTicks","getDiscreteSubYearlyTickOptions","getDiscreteQuarterlyTickOptions","getDiscreteMonthlyTickOptions","getDiscreteWeeklyTickOptions","getDiscreteDailyTickOptions","buildTickOptionsFromGrids","calendarValues","makeTier","tiers","getGridIndex","getGridIndexers","valuesOnGrid","isValidVerticalComparisonLineConfig","lineConfig","ComparisonLines","topPadding","verticalLineLabelPlacements","hasVerticalComparisonLines","verticalLines","xEquals","minX","maxX","sortedLines","occupiedRight","place","nextLineX","rightBound","leftBound","availableRight","availableLeft","OUTER_PADDING","MAX_TICK_LABEL_COUNT","doIntersect","bounds2","intersects","boundsFromLabelPlacement","xAlign","yAlign","xShift","yShift","AbstractAxis","hideAxis","hideGridlines","tickPadding","labelPadding","shouldOffsetTickLabelAtStart","shouldOffsetTickLabelAtEnd","isDomainEndExclusive","minTicks","maxTicks","bandWidth","d3_scale","rangeSize","rangeMax","rangeMin","rangeCenter","totalTicksTarget","timeTickInterval","timeAxisTicks","bandTicks","tickFontSize","baseTicks","labelFontSize","labelTextWrap","labelHeight","axisManager","_scaleType","_label","struct","_update","parentAxis","calculateBandWidth","maxBandWidth","diffs","makeScaleNice","firstTick","lastTick","niceTicks","scaleLog","d3Scale","niceScale","getTickValues","getCandidateTickValues","isBeforeExclusiveDomainEnd","manualTicks","processedTicks","maxLabelledTicks","tickCandidates","fround","priorityTicks","faint","gridLineOnly","tickValue","solid","getTickFormattingOptions","tickFormattingOptions","minDist","maxAbs","sigFigs","singleValueAxisPointAlign","placedValue","formatTick","formattingOptionsOverride","textWrapProps","labelMaxWidth","axisLabel","mainLabelFragment","logScaleNotice","HorizontalAxis","orient","labelOffset","endpointTickLabels","hasTickLabels","tickLabels","minSize","paddedTickHeight","startLabel","placeTickLabel","hideOverlappingTickLabels","pickOutermostTickLabels","startEndPrio","sortedTicks","placedTickLabels","labelsFit","formattedValue","VerticalAxis","labelOffsetTop","shouldShowLogNotice","logNoticeTextWrap","logNoticeWidth","logNoticeHeight","axisBounds","maxTickWidth","paddedTickWidth","visibleTicks","updatedBaseTicks","zeroIndex","DualAxis","horizontalAxisSize","verticalAxisSize","comparisonLines","pad","padTop","AxisConfigDefaults","removePointsOutsideDomain","hideTickLabels","parseMinFromJSON","parseMaxFromJSON","AxisConfig","constrainedMin","constrainedMax","shouldRemovePoint","labelPriority","makeStartLabel","hideConnectedScatterLines","isSubtleForeground","nextSegment","makeMidLabels","prevPos","prevSegment","nextPos","makeEndLabel","lastPos","offsetVector","labelPos","labelBounds","toSizeRange","maxPointRadius","_.round","computeSizeDomain","ScatterPlotChartState","seriesNamesToHighlight","compareEndPointsOnly","xScaleType","xColumn","sizeColumnSlug","sizeColumn","allEntityNamesWithXAndY","xAxisConfig","allPointsBeforeEndpointsFilter","isConnected","allPoints","toleranceColumns","selectedPoints","pointsForAxisDomains","xDomainDefault","sizeDomain","domainsForAnimation","validValuesForAxisDomainX","validValuesForAxisDomainY","verticalAxisLabel","horizontalAxisLabelBase","horizontalAxisLabel","continents","matchingEntitiesOnly","timeDomainStart","timeDomainEnd","originalTimeDomainStart","originalTimeDomainEnd","transformTableForDisplay","assignColorToSeries","keyColor","isScaleColor","removePointsOutsidePlane","getPointLabel","strat","scatterPointLabelStrategy","seriesNamesSet","domainDefault","isSingleTimeScatterAnimationActive","animationEndTime","xDimName","isAnyValueOutsideUserDomain","MarimekkoChartState","yColumnColor","domainColorForEntityMap","uniqueEntityNames","selectedSeries","xAxisLabelBase","defaultXAxisLabel","xySlugs","focusOrSelectionState","isModeActive","colorRowsByEntity","domainColorMap","colorDomainValue","yRowsByEntity","xRowsByEntity","xRow","yRow","entityColor","xPoint","yPoint","seriesWithValues","seriesWithoutValues","descendingByYValue","NO_CHANGE_COLOR","DEFAULT_DUMBBELL_TREND_COLOR_MAP","increase","TealishGreen","decrease","Coral","START_COLUMN_COLOR","DumbbellMode","\"TimeRange\"","\"TwoColumn\"","DEFAULT_DUMBBELL_STYLE","labelColor","DUMBBELL_STYLE","Default","Elevated","Highlighted","Muted","DUMBBELL_SORT_KEYS","DUMBBELL_CHART_CONFIG_DEFAULTS","DumbbellChartConfigDefaults","DumbbellChartConfig","DumbbellChartState","columnColors","directionColors","connectorStyle","valueLabelMode","unsortedSeries","TwoColumn","TimeRange","startColumn","endColumn","trendColorMap","dumbbell","constructSeriesForTimeRange","rowsByTime","constructSeriesForTwoColumns","ROW_SPACING_FACTOR","MAX_HEIGHT_PER_SERIES","SEGMENT_CROP_TAPER_RATIO","SEGMENT_OUTLINE_WIDTH","SWIMLANE_SEGMENT_STYLE","SWIMLANE_LABEL_STYLE","SWIMLANE_LEGEND_STYLE","SWIMLANE_ORDINAL_LEGEND_STYLE","SWIMLANE_SORT_KEYS","isSwimlaneSortKey","MapTopology","detectNearbyFeature","groupElement","sortFeaturesByInteractionStateAndSize","R.sort","calculateDistance","isPointPlacedOnVisibleHemisphere","toRadians","degree","rotationPhi","getForegroundFeatures","countrySet","countriesByRegionMap","getCountriesByRegion","_isOnTheMapCache","isOnTheMap","isMapRenderFeature","isValidMapRegionName","isValidGlobeRegionName","continentColorsMap","categoricalMapColors","descriptions","customRegionDisplayOrder","hasTooltipData","getDescriptionForKey","_getRegionsForKey","displayOrder","R.sortBy","getRegionsForKey","buildCountryMap","SeriesLabelState","parsedText","nameWrap","iconSize","spaceFragment","regionIconInfo","suffixFragments","valueFragments","regionIconFragments","roleOnNameLine","fragmentGroups","contentLines","hasIcon","spanLines","positionedFragments","placeFormattedValueInNewLine","showRegionTooltip","fromTextWrap","tooltipKey","definedBy","textBeforeIcon","textBeforeWidth","textAfterWidth","textAfterIcon","suffixText","lastNameLine","lineWidths","extractTextSpans","positionLineFragments","iconYOffset","ANNOTATION_PADDING","computeCenteredLabelYPositions","annotationHeight","labelY","wrapLabelForHeight","originalFontSize","cleanedLabel","computeMaxLineCount","availableHeight","makeTextWrap","maxLines","labelWrap","findMinWidthForMaxLines","optimalFontSize","findMaxFontSizeForHeight","reducedFontWrap","maxLinesAtReducedSize","bestWidth","minFontSize","enrichSeriesWithLabels","wrappedLabels","labelWrapNeedsTruncation","availableHeightPerSeries","minLabelWidth","maxLabelWidth","remainingHeightForAnnotation","annotationFontSettings","annotationWrap","nonTruncatedLabelWidths","nonTruncatedAnnotationWidths","truncatedLabels","truncatedAnnotations","annotationWrapNeedsTruncation","toRawSwimlaneSegments","consecutiveTimes","categoryByTime","observations","categoryByTimeIndex","rawSegments","toSwimlaneSegments","firstVisibleTime","lastVisibleTime","visibleTimeRange","rawSegment","formatSegmentTimeRange","formatSegmentDuration","computeHeightPerSeries","rowCount","toPlacedSwimlaneSeries","rowHeight","heightPerSeries","sizedSeries","placeSeries","extents","toContiguousSegmentExtents","placedSegments","toPlacedSwimlaneSegment","shouldShowSegmentLabels","segmentLabelStyle","labelX","annotationY","toRenderSwimlaneSegments","hoveredStartTime","hoveredLegendBin","toRenderSwimlaneSeries","allSeries","hoveredSegment","placeTime","visibleExclusiveEndTime","placedSegment","shouldShowLabel","placeSegmentLabel","labelStyle","startInset","endInset","SWIMLANE_CHART_CONFIG_DEFAULTS","SwimlaneChartConfigDefaults","SwimlaneChartConfig","SwimlaneChartState","inputYColumn","segmentLabelMode","categoryKind","defaultSortConfig","rawSegmentsByEntityName","swimlane","OwidCategoricalA","exclusiveEndTime","rowsByEntityNameAndTime","hasCategorySegment","MapChartState","transformedTableForActiveRegion","mapColumn","mapColumnInfo","inapplicableEntityNamesSet","mapColumnUntransformed","columnIsProjection","seriesMap","formatValueForTooltip","dropNonMapEntities","transformTableForSingleMapColumn","transformTableForCombinedMapColumn","addMissingMapEntities","dropNonMapEntitiesForSelection","dropAntarctica","entityNamesToSelect","allMappableCountryNames","allRegionNames","mappableCountryNameSet","countriesInRegionSet","mappableCountriesInRegion","missingMappableCountries","inapplicableEntityNames","checkIsProjection","tooltipUseCustomLabels","isCategorical","COMPARISON_LINE_STYLE","COMPARISON_LINE_LABEL_STYLE","lineCoordinates","labelPosition","comparisonLine","xValue","renderLabel","n$4","V$1","generateComparisonLinePoints","formula","parseEquation","lineFunction","yFunc","evalFormula","xScaleDomain","controlData","yScaleDomain","expr","Formula","equation","clipPath","linePath","placedLabel","pathId","yEquals","d3_line","linePoints","baselineShift","ComparisonLine","isVerticalComparisonLineProps","VerticalComparisonLine","CustomComparisonLine","TICK_COLOR","FAINT_TICK_COLOR","SOLID_TICK_COLOR","dasharray","dashPattern","showTickMarks","insetEdgeMarks","tickColor","lineWidth","gridDashPattern","showEndpointsOnly","verticalGridlines","VerticalAxisGridLines","horizontalGridlines","HorizontalAxisGridLines","verticalAxisComponent","VerticalAxisComponent","horizontalAxisComponent","HorizontalAxisComponent","preferredAxisPosition","tickMarkWidth","visibleTickLabels","tickX","VerticalAxisTickMark","tickMarkYPosition","tickMarkLeftPosition","horizontalAxisLabelsOnTop","labelYPosition","tickMarksYPosition","tickLabelYPlacement","showTickLabels","halfStroke","tickSize","tickRight","identity_default","transform_default","kx","ky","reverse_default","feature_default","topology","transformPoint","arcs","pattersonK1","pattersonK2","pattersonK3","pattersonK4","pattersonC1","pattersonC2","pattersonC3","pattersonC4","pattersonYmax","pattersonRaw","yc","geoPatterson","geoProjection","robinsonRaw","di","yy","geoRobinson","MAP_PROJECTIONS","geoConicConformal","geoAzimuthalEqualArea","GeoFeatures","topojson.feature","GeoFeaturesById","geoPathCache","geoPathsFor","projectionGeo","geoPath","strs","geoBoundsCache","geoBoundsFor","corners","geoCentroidsForFeatures","geoCentroid","geoBoundsForFeatures","geoBounds","geoFeaturesForMapCache","getGeoFeaturesForMap","projBounds","projPaths","geo","getGeoFeaturesForGlobe","RegionMap","highlightedRegion","onRegionHover","onRegionLeave","allBounds","toViewBox","onPointerLeave","CountryPath","for","onPointerEnter","muted","RegionTooltip","initiallyHighlightedRegion","activeRegion","setActiveRegion","clearActiveRegion","RegionLegend","RegionLegendItem","defaultColors","regionPublisherSuffix","regionIcon","SeriesLabel","outline","onInfoTooltipShow","withHalo","haloId","NativeAlignedLabelText","textFragments","iconFragments","LabelText","IconFragment","spanIndex","getSpanX","renderDy","getSpanDy","TextFragment","TextSpanFragment","tooltipRemountKey","setTooltipRemountKey","iconX","iconY","hitAreaSize","hitAreaBounds","exclude","pointerEvents","isFirstLine","isLineStart","isSecondSpan","getFigmaNodeBreakDy","previousLineBreakDy","DEFAULT_LABEL_STYLE","getNewHeight","currentHeight","findBracket","sortedBrackets","firstBracketValue","lastBracketValue","bracket","pickCandidate","insertIndex","R.sortedIndexBy","sortedKeepSeries","keepSeriesHeight","dismissCandidate","pickFromCandidateSubsetWithRetry","candidateSubset","maxCandidatesToPick","remainingCandidates","numPicked","getCandidate","getCandidateFromSubset","pickAsManyAsPossibleWithRetry","pickCandidateWithRetry","pickCandidateWithMaxDistanceToReferenceCandidate","referenceCandidate","computeCandidateScores","scoreMap","midPoint","computeHeight","VerticalLabels","renderSeries","annotatedSeries","InteractionOverlays","needsConnectorLines","ConnectorLines","hasAnnotatedSeries","Annotations","Labels","seriesLabel","labelCoords","annotationTextWrap","endX","connectorLineCoords","totalLevels","origBounds","centerY","leftCenterY","rightCenterY","markerXMid","lineColor","connectorLineColor","findSeriesThatFitWithHighlights","findSeriesThatFit","visibleNames","highlightedNames","evictionOrder","victim","findImportantSeriesThatFitIntoTheAvailableSpace","seriesSortedByImportance","importanceScore","findSeriesThatFitIntoTheAvailableSpace","VerticalLabelsState","textMaxWidth","stableWidth","legendY","initialPlacedSeries","initialPlacedSeriesByName","filterCandidates","filterAlgorithm","visiblePlacedSeries","visibleSeriesNames","visibleSeriesHeight","maxLevel","initialSeries","makeAnnotationTextWrap","defaultFontWeight","annotationWidth","getYPositionForSeriesLabel","yValue","legendYMin","legendYMax","midY","legendX","initialY","repositions","yLegendMin","yLegendMax","hasOverlap","topGroup","bottomGroup","topBounds","groupBounds","bottomBounds","overlapHeight","overflowTop","overflowBottom","newY","newGroup","stackGroupVertically","currentLevel","prevSign","currentSign","minLevel","seriesNamesSortedByImportance","markerMargin","connectorLineWidth","textX","textY","currentY","tooltipState","grouped","hasProjectedSeries","projectionNotice","roundingNotice","xAxisLabel","toTooltipTableRow","fading","dismissTooltip","toBinEmphasis","resolveLegendTextStyle","styleConfig","resolveLegendMarkerStyle","defaults","DEFAULT_NUMERIC_BIN_STROKE","DEFAULT_NUMERIC_BIN_STROKE_WIDTH","CATEGORICAL_BIN_STROKE_WIDTH","BIN_MIN_WIDTH_EM","HorizontalNumericColorLegend","binEmphasis","numericLabels","binHeight","positionedBins","titlePosition","isHoverable","defaultTextColor","default","bottomY","markerStyleFor","renderBin","positionedBin","isHighlightOverlay","fillPatternRef","NumericBinRect","overlayPatternRef","raised","restProps","HorizontalNumericColorLegendState","visibleBins","numericBins","itemMargin","totalCategoricalWidth","idealNumericWidth","availableNumericWidth","xOffset","titleFontSize","titleWidth","getTickLabelWidth","getCategoricalBinWidth","CATEGORICAL_BIN_MIN_WIDTH","getNumericLabelMinWidth","tickLabelWidth","minText","maxText","combinedLabelWidths","binCount","spaceRequirements","labelSpace","minBinWidth","maxBinWidth","widthDiff","runningX","prevBin","makeBoundaryLabel","minOrMax","makeRangeLabel","centerX","raisedMode","LineChartActiveTimeMarkers","dotRadius","valueColor","fillOpacity","getMidpoint","toPoint","getSegmentsFromPoints","currentPoint","currentSegment","toSvgPoints","markerStart","markerMid","markerEnd","polylineProps","_createElement","markerRadius","baseStrokeWidth","hasMarkers","hasMarkersOnlySeries","fromCorners","lineStrokeWidth","lineOutlineWidth","hidePoints","seriesHasMarkers","totalPoints","renderLine","strokeWidthFactor","strokeOpacity","showOutline","LinePath","multiColor","MultiColorPolyline","renderLineMarkers","forceMarkers","renderLines","renderStatic","renderInteractive","pathProps","onCursorLeave","onCursorMove","boundsWithoutColorLegend","maxVerticalLabelsWidth","activeTimes","activeTimeCircleRadius","isTooltipActive","onVerticalLabelMouseEnter","clearVerticalLabelHover","debouncedClearVerticalLabelHover","onVerticalLabelMouseLeave","hasTimeHighlights","verticalLabelsX","verticalLabelsYRange","verticalLabelsState","verticalLabelsStateOnStableAxis","useCompactLayout","verticalLabelsWidth","yAxisWithStableLabelsWidth","hasColorLegend","numericLegendData","numericLegendState","legendTitle","legendHeight","verticalLabelsSeries","horizontalAxisPart","verticalAxisPart","externalLegend","hoveredLabelSeriesName","hoverTimer","shouldPinTooltipToBottom","parentRef","tooltipTime","highlightedTimes","highlightedTimesInLineChart","externalLegendHoverBin","chartContainer","chartAreas","getElementsByClassName","chartArea","isTargetOutsideChartAreas","makeVerticalLabelsState","showSeriesLabels","makeInnerBounds","paddingRight","makeDualAxis","renderDualAxis","DualAxisComponent","renderColorLegend","numericLegendStyleConfig","renderChartElements","Lines","onTouchEnd","onTouchCancel","LineChartTooltip","showLegend","numericBinHeight","legendTickSize","categoricalLegendStyleConfig","hoverStateForSeries","deduplicatedSeries","seriesGroupedByName","duplicates","customConfig","userConfig","padRight","padBottom","categoricalLegendData","NoDataSection","displayedNames","headingFontsize","bodyFontsize","getXAxisConfigSettings","toPlacedSlopeChartSeries","startY","endY","endPoint","toRenderSlopeChartSeries","Slope","outlineStroke","LineWithDots","SlopeChartXAxis","TIME_LABEL_PADDING","VERTICAL_LABELS_PADDING","SIDEBAR_MARGIN","ZERO_LABEL_PADDING","boundsWithVerticalPadding","slopeAreaBounds","noDataSeries","showNoDataSection","xAxisHeight","yAxisWidth","sidebarWidth","maxLabelsWidth","labelsFontSize","labelsYRange","commonLabelsOptions","rightLabelsOptions","leftLabelsOptions","leftLabelsMaxLevel","leftLabelsState","leftLabelsWidth","rightLabelsState","rightLabelsWidth","verticalLabelWidths","contentInset","visibleRightLabels","seriesSortedByImportanceForLeftLabels","effectiveLabelWidths","leftLabelsSeries","rightLabelsSeries","zeroLineLabelFontSize","shouldShowZeroLine","zeroLineLabel","zeroLineLabelWidth","shouldShowSeriesNamesInLeftLabels","updateTooltipPosition","setHoveredSeries","clearHoveredSeries","debouncedClearHoveredSeries","hoveredSeriesName","slopeAreaRef","hideNoDataSection","constructSingleLabelSeries","showSeriesName","hideTimeLabels","endLabel","startOverflow","endOverflow","s1_isLabelled","s2_isLabelled","PREFER_S1","PREFER_S2","sharedVerticalLabelWidths","chartAreaWidth","minStartX","maxEndX","idealWidth","maxSlopeWidth","currentSlopeWidth","showAnnotation","hasAnyNonZeroStartValue","isZeroInDomain","detectHoveredSlope","mouseFrame","distanceMap","distanceFromPointToLineSegmentSq","closestSlope","distanceSq","toleranceSq","actualStartTime","actualEndTime","timeLabel","toleranceNoticeTimes","isStartValueOriginal","isEndValueOriginal","constructTimesForToleranceNotice","makeMissingDataLabel","isToleranceAppliedToStartValue","isToleranceAppliedToEndValue","renderNoDataSection","renderSlopes","renderInteractiveSlopes","renderZeroLine","overshoot","desiredExtension","maxExtension","lineLeft","lineRight","boundsForLine","VerticalAxisZeroLine","renderLogNotice","longText","shortText","longTextWidth","shortTextWidth","xDist","startTickLabel","endTickLabel","leftPadding","renderedText","midX","renderYAxis","renderXAxis","renderVerticalLabelsRight","renderVerticalLabelsLeft","uniqYValues","renderVerticalLabels","makeProjectedDataPatternId","makeQueue","writeQueue","onStartQueue","onFrameQueue","onFinishQueue","timeouts","findTimeout","queuedFn","throttled","nativeRaf","update$1","sync","loop","prevTs","eachSafely","each","__export","globals_exports","createStringInterpolator","skipAnimation","willAdvance","defineHidden","eachProp","flushCalls","globals","startQueue","currentFrame","prevFrame","frameLoop","flushStartQueue","startSafely","advance","prevIndex","startUnsafely","nextFrame","colors2","NUMBER","PERCENTAGE","hex3","hex4","hex6","hex8","normalizeColor","parse255","parse1","hslToRgb","parse360","parsePercentage","hue2rgb","int","colorToRgba","int32Color","createInterpolator","outputRange","inputRange","extrapolateLeft","extrapolateRight","easing","range2","findRange","inputMin","inputMax","outputMin","outputMax","progress2","expanded","steps2","c3","c4","c5","bounceOut","easings","$get","$observers","hasFluidValue","getFluidValue","getFluidObservers","callFluidObserver","observer2","callFluidObservers","FluidValue","setFluidGetter","addFluidObserver","removeFluidObserver","numberRegex","colorRegex","unitRegex","rgbaRegex","cssVariableRegex","variableToRgba","parseCSSVariable","namedColorRegex","rgbaRound","p3","p4","createStringInterpolator2","interpolators","output2","missingUnit","warnInterpolate","deprecateInterpolate","warnDirectCall","deprecateDirectCall","isAnimatedString","useRef2","useIsomorphicLayoutEffect$2","useForceUpdate","useOnce","useEffect3","emptyDeps","usePrev","useRef4","$node","isAnimated","getAnimated","setAnimated","getPayload","Animated","AnimatedValue","_AnimatedValue","AnimatedString","_AnimatedString","is2","goal","TreeContext","AnimatedObject","animated","AnimatedArray","_AnimatedArray","makeAnimated","getAnimatedType","is3","isAnimatedString2","withAnimated","hasInstance","is4","instanceRef","givenRef","getAnimatedState","givenProps","PropsObserver","observerRef","usedProps","createHost","hostConfig","is5","callProp","matchProp","resolveProp","getDefaultProp","getDefaultProps","defaults2","RESERVED_PROPS","getForwardProps","forward","inferTo","to2","computeGoal","hasProps","isAsyncTo","detachRefs","ctrl","replaceRef","AnimationConfig","mergeConfig","defaultConfig","sanitizeConfig","config2","frequency","mass","isTensionConfig","emptyArray","Animation","scheduleProps","onResume","actions","onPause","G2","callId","getCombinedResult","getCancelledResult","getNoopResult","getFinishedResult","runAsync","prevTo","prevPromise","preventBail","bailPromise","bailIfEnded","bailResult","bailSignal","animate","BailSignal","skipAnimationSignal","SkipAnimationSignal","G3","stopAsync","props2","result2","animating","onRest","cancelId","isFrameValue","FrameValue","FluidValue2","G4","$P","HAS_ANIMATED","IS_ANIMATING","IS_PAUSED","hasAnimated","isAnimating","isPaused","setActiveBit","setPausedBit","paused","SpringValue","getFluidValue2","getAnimated2","idle","anim","toArray2","toValues","finished","velocity","decay","restVelocity","bounceFactor","canBounce","isGrowing","isMoving","isBouncing","numSteps","acceleration","currVal","finalVal","mergeActiveFn","sendEvent","checkFinished","isLoop","createLoopUpdate","hasToProp","hasFromProp","prevFrom","hasFromChanged","hasToChanged","hasAsyncTo","isAnimatable","goalType","hasValueChanged","ACTIVE_EVENTS","G5","loopRet","findDefined","BATCHED_EVENTS","nextId2","Controller","flush3","is6","toArray3","prepareKeys","flushUpdateQueue","springs","onStart2","onChange2","onRest2","flushUpdate","asyncTo","\"_events\"","cancelled","\"_state\"","\"_lastAsyncId\"","onResolve","getSprings","prepareSprings","createSpring","setSprings","\"_prepareNode\"","SpringContext","SpringRef","SpringRef2","is7","update2","_getProps","useTransition","propsFn","is11","propsRef","propsConfig","useMemo3","toArray4","usedTransitions","prevTransitions","getKeys","expired","each7","onDestroyed","reused","keyIndex","leave","trail","useForceUpdate2","exitingTransitions","forceChange","prevPhase","propsDelay","isLeave","transitions2","t3","expiryMs","exitBeforeEnter","useContext3","hasContext","usePrev2","ind","renderTransitions","elemRef","Interpolation","getAnimatedType2","isEqual2","checkIdle","becomeIdle","inputs","is14","getFluidValue3","toArray5","getPayload2","G6","hasFluidValue2","highest","isIdle","Globals","frameLoop4","isCustomPropRE","dangerousStyleValue","isUnitlessNumber","attributeCache","applyAnimatedValues","isFilterElement","prefixKey","domTransforms","pxTransforms","degTransforms","addUnit","isValueIdentity","AnimatedStyle","transforms","xyz","z2","FluidTransform","primitives","unstable_batchedUpdates","AnimatedRows","keyAccessor","getY","renderRow","prefersReducedMotion","DEFAULT_PROJECTED_DATA_COLOR_IN_LEGEND","GAP__ENTITY_LABEL__BAR","GAP__ENTITY_LABEL__VALUE_LABEL","legendPadding","barCount","entityLabelStyle","valueLabelStyle","hasPositive","hasNegative","rightValueLabelsWidth","seriesHeight","barSpacing","showColorLegend","projectedDataColorInLegend","labelsWidths","labelWidths","padLeft","totalWhiteSpace","barY","barX","entityLabelX","valueLabelX","entityLabelY","showYearLabels","valueString","renderBar","barOpacity","barLeft","barTop","patternIdSuffix","renderEntityLabel","labelOpacity","renderEntityAnnotation","renderValueLabel","renderBars","renderEntityLabels","renderEntityAnnotations","hasAnnotations","renderValueLabels","renderDefs","StripedProjectedDataPattern","renderAnimatedBars","renderLegend","renderAxis","HorizontalAxisZeroLine","stripeWidth","DEFAULT_STACKED_AREA_STYLE","STACKED_AREA_STYLE","STACKED_BAR_STYLE","LEGEND_STYLE_FOR_STACKED_CHARTS","StackedAreas","Area","Border","borderOpacity","STACKED_AREA_CHART_CLASS_NAME","onAreaMouseEnter","onAreaMouseLeave","facetLegendHoveredSeriesName","activeXVerticalLine","isEntityStrategy","useMinimalLabeling","toSorted","picked","hoveredSeries","boxPadding","boundedBox","hoveredIndex","closestPoint","hoveredPointIndex","bottomSeriesPoint","lastStackedPoint","VerticalColorLegend","mouseOver","mouseLeave","hitArea","VerticalColorLegendState","rectSize","titleHeight","rectPadding","BASE_FONT_SIZE","runningYOffset","HorizontalCategoricalColorLegend","marks","onPointerOver","SPACE_BETWEEN_CATEGORICAL_BINS","HorizontalCategoricalColorLegendState","markLines","markPadding","markWidth","markX","markY","StackedBars","showHorizontalLegend","legendAlign","paddingForLegendRight","paddingForLegendTop","legendHoveredSeriesNames","externalLegendHoveredSeriesNames","activeColors","categoricalLegendEmphasis","maxLegendWidth","sidebarMaxWidth","sidebarMinWidth","verticalColorLegendState","horizontalColorLegendState","onLegendMouseOver","onLegendMouseLeave","onBarMouseOver","onBarMouseLeave","categoryLegendY","legendHoverColor","minBarSpacing","legendStyleConfig","hoveredSeriesNamesSet","hoveredColors","focusedColors","resolveLegendBinEmphasis","legendDimensions","hoverBar","hoverSeries","positivePoints","negativePoints","hoverPoints","sortedHoverPoints","fake","labelToBarPadding","StackedDiscreteBarRow","showTotalValueLabel","formatValueForLabel","onEntityMouseEnter","onEntityMouseLeave","onClearTooltip","totalLabel","showLabelInsideBar","seg","canShowLabel","boundsWithoutLegend","legendPaddingTop","legendWidth","focusedSeriesNamesByType","legendState","totalValueLabelStyle","sizedRows","showHorizontalAxis","totalValueLabelWidth","placedRows","renderRows","clearTooltip","legendHoverSeriesName","hideLegend","focusedEntities","focusedColumns","binSeriesName","hideTotalValueLabel","longestLabel","maxValues","topYOffset","yPosition","placedBars","rowFocus","placedBar","rowEmphasis","hasHighlightedSegment","targetNotice","Triangle","rotationRounded","ConnectedScatterLegend","maxLabelHeight","lineToLabelSpacing","arrowRadius","displayStartTime","displayEndTime","renderOptions","labelStartX","labelEndX","INACTIVE_SCATTER_POINT_COLOR","isLayerMode","hideFocusRing","isFocus","isLabelled","allLabels","displayKey","ScatterPoint","seriesArray","focusedSeriesNames","tooltipSeriesName","sizeScale","fontScale","hideScatterLabels","hideEntityLabels","initialRenderSeries","onPointMouseEnter","onPointMouseLeave","backgroundSeries","foregroundSeries","nearSeries","overSeries","getPointRadius","SCATTER_POINT_MIN_RADIUS","getLabelFontSize","scaleColor","midLabels","renderData","isHover","isTooltip","isForeground","moveLabelsInsideChartBounds","labelsByPriority","hideUnselectedLabels","hideLabels","hideEndLabels","hideCollidingLabelsByPriority","nHoveredLabels","isEnd","higherPriorityLabel","lowerPriorityLabel","nearby","renderBackgroundSeries","ScatterLine","renderBackgroundLabels","renderForegroundSeries","lastPoint","renderForegroundLabels","clipBounds","noDataMessageManager","LEGEND_PADDING","LEGEND_CIRCLE_COLOR","LEGEND_VALUE_COLOR","LABEL_PADDING","LABEL_COLOR","TITLE_COLOR","MIN_FONT_SIZE","ScatterSizeLegend","fontSizeFromRadius","legendSize","domainStart","domainEnd","largestTick","restTicks","tooltipSeries","LegendItem","circleStroke","labelFill","circleFill","circleStrokeWidth","circleOpacity","labelFontWeight","outsideLabel","showSignificanceSuperscriptIfApplicable","hasSameVariableWithTimeOverride","hasTimeMismatch","targetStartTime","targetEndTime","noticeNeeded","xStart","yStart","xEnd","yEnd","xNoticeNeeded","yNoticeNeeded","allRoundedToSigFigs","anyRoundedToSigFigs","isComparison","formatTimes","hasToleranceNotice","TooltipValueRangeX","showOriginalTimes","TooltipValueRangeY","TooltipValueRangeSize","TooltipValueColor","getXValuesWithTimes","formattedOriginalTimes","getYValuesWithTimes","sizeValues","xDef","yDef","getOriginalTimesForRelativeMode","spanStart","spanEnd","canAddCountry","colorsInUse","onLegendClick","arrowLegend","onScatterMouseEnter","onScatterMouseLeave","onScatterMouseMove","onScatterClick","onToggleEndpoints","sizeLegend","selectedEntitiesWithoutData","hasNoDataSection","sizeRange","hoveredLegendColor","addCountryMode","Disabled","tableAfterAuthorTimelineAndActiveChartTransform","colorMatchingSeriesNames","activeColorsSet","activeSeriesNames","activeSeries","numPoints","SCATTER_QUADTREE_SAMPLING_DISTANCE","lineRange","quantize","pct","coords","ScatterPointsWithLabels","scaleSqrt","defaultFontSize","entitiesWithoutData","renderSidebar","verticalLegendHeight","sizeLegendHeight","arrowLegendHeight","ySizeLegend","yArrowLegend","yNoDataSection","noDataSectionBounds","separatorLine","ScatterPlotTooltip","DEFAULT_MARIMEKKO_BAR_STYLE","MARIMEKKO_BAR_STYLE","PLACEHOLDER_COLOR","MarimekkoBars","noDataArea","onEntityClick","onEntityMouseOver","MarimekkoBar","barColor","noDataAreaHeight","toPlacedMarimekkoSeries","originX","onePixelInDomain","placeholderHeight","toRenderMarimekkoSeries","hoveredEntityName","hoveredColorBin","toMarimekkoNoDataArea","firstWithoutValue","LABEL_SPACING","MAX_LABEL_COUNT","pickMarimekkoLabelCandidates","yColumnAtLastTimePoint","ySizeMap","xColumnAtLastTimePoint","entityNamesWithBars","yValueForA","yValueForB","_.partition","numLabelsToAdd","splitIntoEqualDomainSizeChunks","widest","measureMarimekkoLabels","unrotatedMaxWidth","unrotatedMaxHeight","angleInRadians","toPlacedMarimekkoLabels","placedSeriesByEntityName","centreX","domainColor","fallbackColor","correctedLabelWidth","minNextX","maxPreviousX","toShiftedLabelRuns","runs","startNewRun","placedLabels","t$18","currentChunk","domainSizeOfChunk","domainSizeThreshold","numChunks","MARKER_MARGIN","MARKER_AREA_HEIGHT","latestTime","tableAtLatestTimelineTimepoint","hoverColors","pickedLabelCandidates","labelMeasurements","shiftedLabelRuns","entityLabelFontSize","verticalAxisTrueWidth","whiteSpaceOnLeft","labelLinesHeight","marginToEnsureWidestEntityLabelFitsEvenIfAtX0","rotatedMaxWidth","rotatedMaxHeight","yOriginalTimeFormatted","xOriginalTime","xOriginalTimeFormatted","renderLabelLines","renderLabels","barEndpointY","markerBarEndpointY","markerTextEndpointY","labelLines","markerStepSize","markerNetHeight","indexInRun","directionUnawareMakerYMid","markerYMid","preferredX","correctedX","unshiftedLabels","labelsY","HorizontalArrow","TimeRangeDumbbell","DumbbellArrow","TwoColumnDumbbell","Arrow","TwoColumnArrowDumbbell","Line","TwoColumnLineDumbbell","getOverlappingHeadsYOffset","DumbbellHead","arrowPadding","arrowStartX","arrowEndX","shouldShowArrow","minArrowLength","computePercentChange","toLeftRight","calculateAxisLayout","TOLERANCE","domainSpan","effectiveWidth","pixelsPerUnit","domainStartPixel","toPixel","leftOverflow","rightOverflow","unitsPerPixel","minFixed","maxFixed","DumbbellChartRow","leftHead","rightHead","annotationPosition","hasLabel","DumbbellValueLabel","HorizontalLabelPair","HorizontalLabelPairState","minGap","resolvedX","clampedX","leftLabel","rightLabel","overlap","leftAvailableShift","rightAvailableShift","leftShift","rightShift","originalStartTime","originalEndTime","isStartOriginal","isEndOriginal","changeRow","Change","PercentChange","inlineLegendLabelStyle","axisHeight","verticalScale","axisLayout","entityLabelMaxWidth","dataBounds","dumbbellHeadRadius","legendLabels","inlineLegendFits","topLegendType","topLegendHeight","topLegendHeightWithPadding","inlineLegendSeries","inlineLegendState","categoricalLegendState","onSeriesMouseEnter","onSeriesMouseMove","onSeriesMouseLeave","buildValueLabel","getValueLabels","Absolute","skipRange","scalePoint","configMin","configMax","ENTITY_LABEL_CHART_GAP","maxRadius","roundToNearestHalf","topSeries","startIsLeft","startAnchor","endAnchor","VALUE_LABEL_DOT_GAP","DumbbellChartAxis","DumbbellHoverArea","DumbbellTimeRangeTooltip","DumbbellTwoColumnTooltip","cappedHeight","NO_DATA_BIN_OUTLINE","HorizontalOrdinalColorLegend","binY","binTop","MAX_SEARCHED_LABELS","MAX_OVERRUN_INTO_NEXT_BIN","LABEL_LINE_HEIGHT","layOutOrdinalLabels","lastBin","_.last","lastBinRight","binLabelWraps","wrapBinLabels","listSideAssignmentsWithoutNeighborsBelow","listAlternatingSides","best","sides","placed","placeBinLabels","pickTextWraps","scoreBinLabelLayout","isScoreLower","lefts","textWraps","rights","findSameSideNeighbors","nextSameSideIndex","nextIndices","nextSameSideBin","previousSameSideIndex","previousIndices","intrusionIntoPrevious","maxRight","findRightLimit","lastIndexBySide","nextIndexBySide","findMaxLabelHeight","findWidenedRightLimit","overrunLimit","binAfterNextLimit","containedLimit","widenedLimit","wrapTo","containedWidth","widenedWidth","contained","widened","HorizontalOrdinalColorLegendState","noDataGap","noDataBin","visibleCategoryBins","noDataBinWidth","noDataWidth","categoryBinWidth","labelHeightAbove","labelHeightBelow","MINIMUM_BIN_LABEL_DISTANCE","getLabelWidth","sharedWidth","preferredWidth","widestLabelWidth","categoryStartX","categoryBins","noDataPositioned","belowY","SwimlaneSegments","noDataPatternId","SwimlaneSegmentShape","SwimlaneSegmentLabelText","isStartCropped","isEndCropped","toSegmentOutlinePoints","categoryLabel","timeRangeLabel","cropTaper","leftEdge","rightEdge","SwimlaneRow","onSegmentMouseEnter","onSegmentMouseLeave","formattedDuration","categorySegment","noDataLegendBin","categoryLegendBins","legendBinHeight","legendEmphasis","ordinalLegendState","isThumbnail","Thumbnail","renderAnimatedRows","HorizontalAxisDomainLine","SwimlaneChartTooltip","DEFAULT_SPARKLINE_WIDTH","DEFAULT_SPARKLINE_HEIGHT","SPARKLINE_PADDING","SPARKLINE_NUDGE","MapSparkline","sparklineTable","hasTimeSeriesData","showSparkline","sparklineManager","sparklineWidth","sparklineHeight","sparklineBounds","sparklineChartState","sparklineChart","_MapSparkline","timeSeriesTable","highlightedTimesInSparkline","yAxisUnit","lineColorScale","mapAndYColumnAreTheSame","minVal","maxVal","minLabel","maxLabel","labelTop","labelBottom","isInapplicableEntity","inapplicableValueLabel","shouldShowValueRange","entityTable","startDatum","endDatum","formattedStartValue","formattedEndValue","tooltipSubtitle","MapTooltipRangeValues","MapTooltipValue","makeTextColorForValue","hasCategoricalValueLabels","d3_bboxCollide_default","boundingBoxes","xi","yi","bbi","nx1","ny1","nx2","ny2","cornerNodes","cn","prepareCorners","nodeI","bWidth","bbLength","bHeight","dataNode","bbj","dnx1","dny1","dnx2","dny2","dWidth","dHeight","xSize","ySize","xOverlap","yOverlap","xBPush","yBPush","xDPush","yDPush","heightWidth","pointInPolygon","u1","v1","u2","currentP","nextP","numContours","contour","contourLen","earthRadius","feat","geom","lineString","featureCollection","fc","multiLineString","getCoord","coord","getGeom","geojson","booleanPointInPolygon","pt","polys","inBBox","polyResult","pip","TinyQueue","defaultCompare","checkWhichEventIsLeft","e1","checkWhichSegmentHasRightEndpointFirst","seg1","seg2","Event","featureId","ringId","eventToCheck","fillEventQueue","processFeature","eventQueue","featureOrGeometry","iii","Segment","testSegmentIntersect","x4","y4","denom","numeA","numeB","uA","uB","runCheck","intersectionPoints","outQueue","otherSeg","ignoreSelfIntersections","sweeplineIntersections","lib","lineIntersect","line1","intersections","removeDuplicates","geomEach","stopG","geometryMaybeCollection","isGeometryCollection","featureProperties","featureBBox","featureIndex","isFeatureCollection","isFeature","flattenEach","geomType","multiFeatureIndex","polygonToLine","poly","singlePolygonToLine","multiPolygonToLine","coordsToLine","multiPoly","booleanDisjoint","bool","feature1","feature2","disjoint","flatten1","flatten2","geom1","geom2","compareCoords","isPointOnLine","isLineOnLine","isLineInPoly","isPolyInPoly","isPointOnLineSegment","lineString1","lineString2","coord1","coord2","dxc","lineSegmentStart","dyc","dxl","lineSegmentEnd","dyl","pair1","pair2","booleanIntersects","annotationPlacementsById","enrichedAnnotation","MARKER_TEXT_GAP","makeInternalAnnotationForFeature","ellipse","makeEllipseForProjection","placeLabelAtEllipseCenter","makeExternalAnnotationForFeature","anchorPoint","fontSizeScale","markerLength","placedBounds","placeExternalLabel","moveExternalLabelIntoOcean","repositionAndFilterExternalAnnotations","originalAnnotationsById","filteredAnnotations","minimiseLabelCollisions","nearbyGeoFeatures","getGeoFeaturesWithinRadius","backgroundFeatureIdSet","checkAnnotationMarkerCollidesWithSomeLabel","checkAnnotationCollidesWithLandmass","ellipseCenter","makePlacedBoundsForText","textFits","checkPointIsInEllipse","scaledFontSize","textBounds","calculateExternalLabelPosition","projCenter","projLeft","projTop","ry","padX","paddingFactor","padY","getExternalMarkerEndPosition","annotationLabel","makePolygonFromBounds","newBounds","maxSteps","bridgeFeatures","bridgeFeature","moveIntoDirectionByStep","_featuresWithinRadiusCache","circle","checkRectangleOverlapsWithCircle","closestX","R.clamp","rectangle","closestY","simulationNodes","isTopOrBottom","forceX","forceY","bboxCollide","originalBounds","markerLine","makePolygonForLine","nearbyAnnotations","nearbyLabel","nearbyAnnotation","lineLength","perpX","perpY","BackgroundCountry","CountryWithData","strokeScale","scaleStrokeWidth","getStrokeWidth","ProjectedDataOverlay","CountryWithNoData","InapplicablePattern","inapplicablePattern","ProjectedDataPattern","lightness","DottedProjectedDataPattern","dotOpacity","ProjectedDataLegendPattern","makeProjectedDataLegendPatternId","patternSize","dotSize","InternalValueAnnotation","showHalo","topLeft","ExternalValueAnnotation","textStrokeWidth","projectedDataPattern","projectedDataPatternForLegend","choroplethData","hoverFeature","mapBounds","viewportScale","featurePatternScale","viewportScaleSqrt","featuresInRegion","featuresById","foregroundFeatures","backgroundFeatures","featuresWithData","sortedFeaturesWithData","sortedFeaturesWithHistoricalData","sortedFeaturesWithProjectedData","featuresWithNoData","binColors","shouldShowAnnotations","annotationCandidateFeatures","annotationCandidates","internalAnnotations","externalAnnotations","onPointerMove","setHoverEnterFeature","clearHoverEnterFeature","onClickFeature","onDocumentPointerDown","hoverEnterFeature","hoverNearbyFeature","choroplethMapBounds","mapViewport","viewportWidth","viewportHeight","patternScale","mapX","mapY","boundsCenterX","boundsCenterY","newCenterX","newCenterY","matrixStr","matrixComponents","matrixComponentsRounded","countriesByProjection","getHoverState","formatAnnotationLabel","internalAnnotation","externalAnnotation","nearbyFeature","onMapMouseLeave","onMapMouseOver","dismissCountryFocus","renderInternalAnnotations","renderExternalAnnotations","renderFeaturesInBackground","renderFeaturesWithoutData","noDataPatternForMap","inapplicablePatternId","inapplicablePatternForMap","renderProjectedDataPatterns","renderCountryWithData","renderFeaturesWithData","renderFeaturesWithProjectedData","touchAction","Versor","sl","sp","cp","sg","cg","b2","theta0","versor","cross","geoFeaturesById","LONGITUDE_OFFSET","ANIMATION_DURATION","HEMISPHERE_REFERENCE_POINT","MAX_VISIBLE_CENTROID_DISTANCE","GlobeController","showGlobe","toggleGlobe","jumpTo","globeConfig","showGlobeAndRotateTo","addLongitudeOffset","rotateTo","jumpToOwidContinent","continent","calculateTargetForOwidContinent","calculateTargetForCountry","rotateToDefaultBasedOnTime","calculateTargetBasedOnTime","calculateTargetForSelection","rotateToRegion","calculateTargetForRegion","currentAnimation","_rotateTo","targetCoords","targetZoom","currentCoords","animatedCoords","geoInterpolate","currentZoom","animatedZoom","animPromise","easeCubicOut","geoFeature","clampLatitude","zoomToFit","calculateZoomToFitForCountry","centerPoint","geoOrthographic","negateCoords","calculateZoomToFitForBounds","getCoordsBasedOnTime","calculateTargetForCountryCollection","visibleCountries","findVisibleCountrySubset","getCoordsAndZoomForCountryCollection","getUTCHours","getCenterForCountryCollection","lon","lat","mergedBounds","geoDistance","near","far","partitionCountriesByHemisphere","DEFAULT_SCALE","globeSize","globeCenter","minScale","maxScale","globeScale","globeRadius","zoomScale","globePath","graticulePath","equatorPath","visibleFeatures","rotateGlobe","zoomGlobe","clearHover","onPointerEnterFeature","onPointerLeaveFeature","isPanningOrZooming","maxDistance","computeProjectionScale","GLOBE_MIN_ZOOM","GLOBE_MAX_ZOOM","getPath","isFeatureCentroidVisibleOnGlobe","geoGraticule","equator","newZoom","setUpPanningAndZooming","previousType","startCoords","startQuat","startRot","previousPos","startDistance","getInteractionType","isMultiTouchEvent","panningOrZoomingStart","calculatePinchDistance","posVector","startPanning","panningOrZooming","wheeling","deltaY","pinching","panning","isPointInCircle","isDraggingGlobe","currCoords","quat","panningOrZoomingEnd","panAndZoom","renderGlobeOutline","renderFeaturesWithNoData","MAP_LEGEND_MAX_WIDTH_RATIO","onMapPointerMove","onLegendMouseEnter","onRegionChange","legendData","hoverValue","shouldExtendMapIntoFramePadding","shouldAddProjectionPatternToLegendBins","numMembersPerCategoricalBinByIndex","shouldDefineInapplicablePattern","hasCategoricalLegendData","numericHoverBracket","categoricalHoverBracket","numericLegendEmphasis","legendMaxWidth","numericLegendHeight","categoryLegendHeight","categoryLegendState","numericLegendY","hoverBracket","hoverCountry","logGrapherInteractionEvent","expansion","MAP_NARROW_FRAME_PADDING_HORIZONTAL","maybeAddPatternRefsToBin","categoricalBins","memberCount","renderMapLegend","renderMapOrGlobe","mapOrGlobe","ChoroplethGlobe","ChoroplethMap","windowWidth","innerWidth","tooltipCountry","MapTooltip","highlightedTimesInTooltip","AnchoredLabelsState","collisionPadding","minSpacing","anchorCollisionRadius","verticalMargin","horizontalMargin","isLeftAnchored","textPosition","boundsPosition","collisionBounds","anchorBounds","forDot","emphasisRank","rank1","rank2","DEFAULT_ANCHORED_LABEL_STYLE","ANCHORED_LABEL_STYLE","AnchoredLabels","spaceBetweenDotAndLabel","visibleStartPoints","visibleEndPoints","labelFontSettings","labelsRange","endLabelCandidateSeries","endPointBySeriesName","endLabelsSeries","endLabelsState","startLabelCandidateSeries","startPointBySeriesName","shouldShowValueLabelsOnly","startLabelsMaxWidth","startLabelsSeries","startLabelsState","estimatedLabelWidths","visibleStartLabels","visibleEndLabels","emphasisForSeries","formatLabel","chartAreaPadding","labelCandidateSeries","makeEndLabelsState","endPoint1","endPoint2","makeStartLabelsState","hideStartValueLabel","startPoint1","startPoint2","approximateDualAxis","Dot","xMarkFontSize","xStartMarkWidth","xEndMarkWidth","xMarksHeight","outerBoundsVerticalAxis","estimatedLabelWidth","rightPadding","preliminaryBounds","preliminaryYAxis","preliminaryXScale","preliminaryStartX","preliminaryEndX","DiscreteBarChart","labelsMaxWidth","labelsSeries","anchoredLabelsState","makeAnchoredLabelsState","series1","series2","labelsState","StackedDiscreteBarChart","shouldShowVerticalAxis","shouldShowLabels","labelledSeries","MarimekkoInternalLabels","DumbbellChart","SwimlaneChart","MapChart","ChartComponentClassMap","StackedAreaChart","StackedBarChart","ScatterPlotChart","MarimekkoChart","ChartThumbnailClassMap","LineChartThumbnail","SlopeChartThumbnail","DiscreteBarChartThumbnail","StackedAreaChartThumbnail","StackedBarChartThumbnail","StackedDiscreteBarChartThumbnail","ScatterPlotChartThumbnail","MarimekkoChartThumbnail","DumbbellChartThumbnail","SwimlaneChartThumbnail","MapChartThumbnail","ChartStateMap","makeChartState","getChartComponentClass","ClassMap","DefaultChartClass","Uncaptioned","ChartComponent","validChartState","ChartClass","makeChartInstance","SMALL_CELL_LENGTH","getFacetLabelFontSize","_.clamp","cellWidth","cellHeight","calculateAspectRatio","aspectRatio","SHARED_X_AXIS_MAX_CELL_HEIGHT","THUMBNAIL_MAX_CELL_LENGTH","FACET_LABEL_FONT_WEIGHT","getContentBounds","chartInstance","axes","shouldHideFacetAxis","edges","sharedAxesSizes","chartTypeName","facetsContainerBounds","facetLabelFontSize","facetBaseFontSize","uniformXAxis","facetCount","facetGridPadding","hideFacetLegends","intermediatePlacedSeries","intermediateChartInstances","shouldUseThumbnailForSmallFacets","facetBounds","sharedContentInset","hasSmallFacets","isSharedYAxis","isSharedXAxis","entityFacets","columnFacets","externalLegends","isNumericLegend","numericStyleConfig","categoricalStyleConfig","legend","facetLabelSettings","legendHoverBin","legendHeightWithPadding","gridBoundsArr","globalXAxisConfig","globalYAxisConfig","contentBounds","insets","inset","isHorizontalYAxis","supportedChartTypes","hasShortFacets","shouldUseValueBasedColorScheme","axisAccessor","uniform","axisWithMaxSize","domains","fullBounds","initialGridBounds","edge","seriesTable","getExternalLegendProp","allBins","uniqBins","sortedBins","facetChart","contentLeftOffset","availableLabelWidth","seriesLabelState","shortenedLabel","facetFontSize","intermediateMapInstances","intermediateMapInstance","facetArrangement","PADDING_BELOW_MAP_LEGEND","getGridParams","horizontalLayout","verticalLayout","mapAspectRatio","horizontalLayoutAspectRatio","verticalLayoutAspectRatio","horizontalDiff","log2","verticalDiff","analytics","analyticsContext","mapChart","getLabelPosition","mapHeight","shiftY","renderSeparatorLine","activeChartOrMapType","renderLoadingIndicatorIntoSvg","renderReadyChartOrMap","FacetMap","FacetChart","renderChartOrMap","containerStyle","renderDataTable","DataTable","fonts","bakedGrapherURL","includeFontsStyle","isExportingForWikimedia","includeBackgroundRect","AbstractCaptionedChart","svgProps","framePaddingVertical","verticalPaddingSmall","showRelatedQuestion","relatedQuestionHeight","settingsPopoverMaxWidth","settingsPopoverMaxHeight","showHeader","headerHeightWithPadding","footerHeightWithPadding","controlsRowHeightWithPadding","timelineHeightWithPadding","relatedQuestionHeightWithPadding","chartHeight","boundsForChartArea","hideControlsRow","renderControlsRow","renderRelatedQuestion","relatedQuestions","renderLoadingIndicator","renderTimeline","TimelineComponent","VerticalSpace","ChartAreaContent","svgBounds","staticFooter","staticHeader","StaticFooter","StaticHeader","renderSVGDetails","previousOffset","detailRenderers","includeDetailsInStaticExport","shouldIncludeDetailsInStaticExport","StaticChartWrapper","isCaptioned","CaptionedChart","chartAreaBounds","StaticCaptionedChart","grapherState","_setInputTable","rebuildInputOwidTable","setError","clearErrors","toggleCommandPalette","toggleTabCommand","togglePlayingCommand","toggleSelectAllCommand","toggleFacetingCommand","toggleSourcesModalCommand","toggleDownloadModalCommand","toggleTimelineCommand","toggleYScaleTypeCommand","randomSelection","dismissFullScreen","setUpIntersectionObserver","setUpWindowResizeEventHandler","legacyVariableDataJson","hasBeenVisible","uncaughtError","hasLoggedGAViewEvent","windowQueryParams","legacyConfig","startMark","tableWithColors","createPerformanceMeasurement","legacyConfigAsAuthored","commandPalette","enableKeyboardShortcuts","isCommandPaletteOpen","keyboardShortcuts","isSourcesModalOpen","isDownloadModalOpen","temporaryFacetTestCommands","clearQueryParams","slideShow","playNext","playPrevious","setTimeFromTimeQueryParam","timeParam","currentSelection","newNum","isModalOpen","renderError","flexDirection","justifyContent","renderGrapherComponent","containerClasses","GrapherComponent","GrapherPortraitClass","isPortrait","isExportingToSvgOrPng","GrapherComponentNarrow","GrapherComponentSemiNarrow","GrapherComponentSmall","GrapherComponentMedium","activeBounds","grapherUrl","narrativeChartName","narrativeChartInfo","renderReady","Chart","FullScreen","entitySelectorArray","sidePanelBounds","SourcesModal","DownloadModal","EmbedModal","isEntitySelectorModalOpen","EntitySelectorModal","isEntitySelectorDrawerOpen","TooltipContainer","IntersectionObserver","flushSync","logGrapherView","parentChartSlug","isNotVisible","isPartiallyVisible","intersectionRatio","containerElement","bindToWindow","bindUrlToWindow","pushParams","changedParams","debouncedPushParams","debounceMode","updateWindowDimensions","windowInnerWidth","windowInnerHeight","innerHeight","freezeToleranceNoticeWhileTimelineMoves","isTimelineInteractionActive","setToleranceNoticeFrozen","clearFocusMode","bindKeyboardShortcuts","unbindKeyboardShortcutsFn","shortcut","logKeyboardShortcut","unbindKeyboardShortcuts","componentDidCatch","logGrapherViewError","resultArray","strArray","urlJoin","dataFetchUserAgent","dataFetchOptions","getVariableDataRoute","dataApiUrl","urljoin","noCache","getVariableMetadataRoute","loadVariableDataAndMetadata","metadataPromise","metadataResponse","dataPromise","dataResponse","loadVariablesDataSite","loadVariableDataPromises","variableIds","archiveContext","variablesData","fetchInputTableForConfig","indicatorDimensions","getCachingInputTableFetcher","previousDimensions","previousSelectedEntityColors","dimensionsMobx","selectedEntityColorsMobx","variablesToFetch","getEntityCodesToEntityNames","getEntityNamesToEntityCodes","codeToEntityName","codeOrEntityName","entityNameToCode","V1_DELIMITER","isV1Param","queryParam","entityNamesFromV1EncodedParam","encodedQueryParam","entityNamesToV2Param","entityNamesFromV2Param","migrateV1Delimited","encodedCountry","LegacyDimensionRegex","injectEntityNamesInLegacyDimension","newNames","nonDimensionName","urlMigrations","migrateSelectedEntityNamesParam","getEntityNamesParam","getSelectedEntityNamesParam","generateSelectedEntityNamesParam","setSelectedEntityNamesParam","getFocusedSeriesNamesParam","generateFocusedSeriesNamesParam","grapherUrlMigrations","legacyToCurrentGrapherUrl","legacyToCurrentGrapherQueryParams","allSchemaVersions","schemaVersionRegex","isValidSchemaVersion","getSchemaVersion","createSchemaForVersion","isLatestVersion","getNextSchemaVersion","isOutdatedVersion","hasKnownSchemaVersion","MIGRATION_STEPS","hasChartTab","runMigration","nextVersion","migrateGrapherConfigToLatestVersion","EMBEDDED_FONTS_CSS","IMPORT_FONTS_REGEX","StaticChartRasterizer","density","embeddedFonts","canvasElt","preloadFonts","faces","MAX_RETRIES","getContext","willReadFrequently","testImage","imageFromUrl","testUrl","urlFromBlob","blobFromSVG","testBlob","drawImage","pixels","didDraw","_f","RETRY_DELAY_MS","svgImage","imageSmoothingEnabled","setTransform","rej","toDataURL","toBlob","reader","FileReader","onload","onerror","readAsDataURL","Image","DimensionSlot","allowMultiple","isOptional","supportsMultipleYColumns","GrapherAnalytics","splitPathForGA4","pathNext","grapherAnalyticsContextToGAEventFields","getPathname","pushToDataLayer","consent","grapherObjectToQueryParams","R.isDeepEqual","stringifyGlobeRotation","parseGlobeRotation","latLon","lonLat","selectPeerCountriesForGrapher","targetCountry","defaultSelection","prepareEntitiesForPeerSelection","peerCountryStrategy","selectPeerCountries","selectParentRegionsAsPeers","selectPeerCountriesByClosestValue","selectPeerCountriesByDataRange","selectNeighborsAsPeers","isDataLoaderAvailable","isDataColumnAvailable","filterEntitiesWithDataAtAllTimes","requiredTimes","entityData","relevantEntities","availableEntitySet","peers","isAvailable","owidContinent","aggregate","findClosestByValue","targetEntry","availableEntitiesSet","neighbor","candidateEntities","extractCandidateValues","populationData","findDataRangePeers","candidatesToUse","targetContinent","findClosestByLogDistance","sameContinentCandidates","otherContinentsCandidates","sameContinentPeers","remainingCount","otherContinentPeers","combinedPeers","maxPeerRatio","targetLogValue","maxLogDistance","R.isDefined","R.take","sortedData","buckets","R.chunk","targetBucketIndex","R.unique","bucketIndex","randomize","weightedRandomPick","population","maxPopulationPick","totalWeight","R.sum","R.sample","extractValuesAtTime","resolvedTime","invalid","OVERLAY_PARAM_VALUES","parseBooleanOneZeroParam","parseScaleTypeParam","parseTabParam","parseOverlayParam","parseStackModeParam","isValidSingleTime","parseTimeParam","startValid","endValid","parseGlobeParam","parseGlobeRotationParam","parseGlobeZoomParam","parseRegionParam","parseEntityNamesParam","parseCountryParam","parseFocusParam","parseFacetParam","isValidFacetStrategy","parseUniformYAxisParam","parseShowNoDataAreaParam","parseShowSelectionOnlyInTableParam","parseTableFilterParam","parseTableSearchParam","parseEndpointsOnlyParam","parseZoomToSelectionParam","parsePeerCountriesParam","parseGrapherQueryParams","logInvalidQueryParams","getErrorMessageRelatedQuestionUrl","hasAdminCookie","isStagingOrLocalhost","shouldShowStaffControls","pickColumnsForSourcesLine","activeDimensions","getDimensionPropertiesForActiveTab","isPopulationVariable","buildSourcesLineFromColumns","getWindowAdmin","admin","GrapherState","tableAfterColorAndSizeToleranceApplication","tableAfterAuthorTimelineAndEntityFilter","tableAfterAllTransformsAndFilters","tableForDisplayBeforeEntityFilter","dataTableEntities","populateFromQueryParams","isDev","setAuthoredVersion","updateAuthoredVersion","defaultChartType","defaultTab","resetToDefaultTab","hasChartThatShowsAllEntities","shouldShowSelectionOnlyInDataTable","dataTableSelection","facetChartInstance","activeChartTypeOrDefault","chartStateExceptMap","chartSeriesNames","focusableSeriesNames","isAdminObjectAvailable","applyOriginalFocusAsAuthored","applyOriginalSelectionAsAuthored","hasData","whatAreWeWaitingFor","loadingDimensions","hasTimeDimension","hasTimeDimensionButTimelineIsHidden","isSingleTimeMapAnimationActive","onlySingleTimeSelectionPossible","hasFatalErrors","ensureHandlesAreOnSameTime","ensureHandlesAreOnDifferentTimes","entitySelector","isAuthoredTimeRange","ensureTimeHandlesAreSensibleForTab","ensureEntitySelectionIsSensibleForTab","adjustStateForTab","syncEntitySelectionBetweenChartAndMap","validateEntitySelectorState","ensureValidConfigWhenEditing","validDimensions","timelineHandleTimeBounds","dimensionSlots","dimensionConfigs","addDimension","setDimensionsForProperty","setDimensionsFromConfigs","defaultSlug","validChartTypes","validChartTypeSet","hasMultipleChartTypes","shouldAddEntitySuffixToTitle","shouldAddTimeSuffixToTitle","shouldAddChangeInPrefixToTitle","shouldAddXIndicatorLabelToTitle","effectiveTitle","areHandlesOnSameTime","yColumnsFromDimensions","inputYColumnSlugs","inputYColumnSlug","inputXColumnSlug","inputSizeColumnSlug","inputColorColumnSlug","inputNumericColorColumnSlug","inputCategoricalColorColumnSlug","isOnScatterWithTimeOverride","comparesTwoTimePoints","timeTitleSuffix","defaultSourcesLine","axisDimensions","defaultTitle","isLineChart","isScatter","isStackedArea","isSlopeChart","isDiscreteBar","isStackedBar","isMarimekko","isStackedDiscreteBar","isDumbbell","isSwimlane","isOnLineChartTab","isOnStackedAreaTab","isOnSlopeChartTab","isOnDiscreteBarTab","isOnStackedBarTab","isOnMarimekkoTab","isOnStackedDiscreteBarTab","isOnSwimlaneTab","isOnDumbbellTab","isOnTwoColumnDumbbellTab","hasStackedArea","hasStackedBar","hasStackedDiscreteBar","hasDumbbellChart","hasSwimlane","isOnTimeScatterTab","isOnConnectedScatterTab","xDimension","canOverrideXTime","defaultBounds","externalBounds","widthForDeviceOrientation","heightForDeviceOrientation","useIdealBounds","scaleToFitIdeal","fullScreenPadding","idealHeight","canApplyPeerCountries","applyPeerCountriesIfNeeded","_sortConfig","hasSingleMetricInFacets","hasSingleEntityInFacets","isStackedChartSplitByMetric","hasMultipleSeriesPerFacet","supportedSortConfig","availableSortKeysAcrossChartTypes","areStaticBoundsSmall","hasRelatedQuestion","isRelatedQuestionTargetDifferentFromCurrentPage","clearFocus","allParams","overlayParam","areSelectedEntitiesDifferentThanAuthors","areFocusedSeriesNamesDifferentThanAuthors","authorsVersion","canonicalUrlIfIsNarrativeChart","hasUserChangedTimeHandles","hasUserChangedMapTimeHandle","isEntitySelectorPanelActive","numSelectableEntityNames","isPublished","sourceDesc","internalNotes","variantName","excludedEntityNames","includedEntityNames","MultipleEntities","hasMapTab","chart","hideSeriesLabels","hideRelativeToggle","hideAnnotationFieldsInTitle","hideTimeline","selectedFacetStrategy","_inputTable","isConfigReady","isDataReady","colorSlug","sizeSlug","tableSlugs","canonicalUrlOverride","_externalBounds","frozenToleranceNotice","hasTableTab","hideFullscreenButton","hideRelatedQuestion","forceHideAnnotationFieldsInTitle","changeInPrefix","enableMapSelection","_isInFullScreenMode","shouldApplyPeerCountries","peerCountriesPromise","isEditor","visibleEntities","prepareTableForDownload","dataSlugs","originalTimeSlugs","ySlug","annotationSlugs","entityCode","hasEntityCodes","mapTabConfigOptionToTabName","downloadTab","Neighbors","hasSingleEntity","isChartTypeThatShowsAllEntities","adminPath","adminCreateNarrativeChartPath","grapherQueryStr","isSuperuser","adminUrl","currentUrl","endMark","devtools","measure","authoredSeriesNames","authoredEntityNames","missingColumns","mapColumnSlugs","checkOnlySingleTimeSelectionPossible","checkOnlyTimeRangeSelectionPossible","mapTabNameToTabConfigOption","checkIsTwoColumnDumbbell","checkSingleTimeSelectionPreferred","checkTimeRangeSelectionPreferred","shouldSyncSelection","validProperties","dimensionProperties","newConfigs","newDimensions","configs","subtitleDetails","noteDetails","yAxisDetails","xAxisDetails","uniqueDetails","referenceLabel","computeBaseFontSizeFromHeight","nonProjectionSlugs","findHistoricalSlugForProjection","notice","isFrozen","authoredNote","showEntityAnnotation","showTimeAnnotation","showChangeInPrefix","entityStr","getSlugForProperty","uniqueDatasetNames","generateStaticSvg","renderToHtmlString","_isExportingToSvgOrPng","STATIC_EXPORT_DETAIL_SPACING","_shouldIncludeDetailsInStaticExport","staticSVG","logGrapherImageDownloadEvent","SingleEntity","hasFacetStrategy","computeBaseFontSizeFromWidth","squareBounds","idealPixelCount","sizeRatio","patternIdGuid","relatedQuestion","authoredConfig","currentSelectedEntityNames","originalSelectedEntityNames","currentFocusedSeriesNames","originalFocusedSeriesNames","archiveUrl","queryParamsForParentChart","combinedQueryParams","makeEmbedUrl","hideControls","isMappable","countriesInRegion","shouldShowPanel","mapGrapherTabToQueryParam","GuidedChartContext","useMaybeGlobalGrapherStateRef","registerGrapherState","grapherStateRef","useGuidedChartLinkHandler","buildArchiveGuidedChartSrc","mergedQuery","guidedUrl","updatedUrl","FetchingGrapher","downloadedConfig","setDownloadedConfig","catalogUrl","assets","runtime","configUrl","fetchAndApplyConfig","fetchedConfig","mergedConfig","migratedConfig","fetchData","Grapher","useCombinedRefs","VerticalScrollContainer","scrollingShadows","contentsId","scrollLock","scrollContainerRef","scrollBottom","useScrollBounds","useScrollLock","doNotLockIfNoScroll","ScrollingShadow","getShadowOpacity","maxOpacity","scrollDistance","onScrollTop","onScrollBottom","pendingUpdate","onScrollThrottled","onWheel","prevent","toggleSort","isDropdownMenu","pickerColumnDefs","metricOptions","metricDropdownOptions","selectedMetricDropdownOption","metricTable","activePickerMetricColumn","availableEntitiesForCurrentView","populateLocalEntity","entitiesWithMetricValue","grapherTable","pickerTable","selectionSet","focusedOption","showDoneButton","focusOptionDirection","focusSearch","onSearchFocus","onSearchBlur","onHover","blockHover","unblockHover","onMenuMouseDown","highlightLabel","onMetricSelectionChange","updateMetric","searchInputRef","focusIndex","focusRef","scrollFocusedIntoViewOnUpdate","blockOptionHover","mostRecentlySelectedEntityName","logEntityPickerEvent","entityPickerMetric","entityPickerSort","entityPickerColumnDefs","entityNameColumnInPickerColumnDefs","requiredColumnSlugs","userRegionNames","plotValue","localEntitiesIndex","entityPickerTable","withKey","unselected","normalizeFocusIndex","currentToken","setEntityPicker","isColumnTypeNumeric","pickerMenu","entityPickerTableIsLoading","selectedDebugMessage","isDropdown","PickerOption","hasDataForActiveMetric","optionWithMetricValue","innerRef","metricValue","readOnly","SlideShowController","playIndexCommand","slides","slide","setSlide","renderGrapherIntoContainer","reactRoot","resizeObserver","ResizeObserver","grapherConfigWithBounds","contentRect","renderSingleGrapherOnGrapherPage","getElementsByTagName","queryStrValue","enrichedConfig","getIndexName","DEFAULT_SEARCH_PLACEHOLDER","ExplorerControlType","\"Radio\"","\"Checkbox\"","\"Dropdown\"","ExplorerChartCreationMode","\"FromGrapherId\"","\"FromVariableIds\"","\"FromExplorerTableColumnSlugs\"","ExplorerControlTypeRegex","UNSAVED_EXPLORER_DRAFT","UNSAVED_EXPLORER_PREVIEW_QUERYPARAMS","EMBEDDED_EXPLORER_DELIMITER","EXPLORER_CONSTANTS_DELIMITER","EMBEDDED_EXPLORER_GRAPHER_CONFIGS","EMBEDDED_EXPLORER_PARTIAL_GRAPHER_CONFIGS","EMBEDDED_EXPLORER_VIEW_CONFIG_IDS","EXPLORER_EMBEDDED_FIGURE_SELECTOR","ExplorerContainerId","EXPLORERS_ROUTE_FOLDER","CellHasErrorsClass","GridBoolean","\"true\"","\"false\"","Origin","BooleanCellDef","keyword","terminalOptions","cssClass","StringCellDef","StringDeclarationDef","EnumCellDef","RootKeywordCellDef","NumericCellDef","requirementsDescription","valuePlaceholder","NumericOrAutoCellDef","IntegerCellDef","PositiveIntegerCellDef","SubTableHeaderCellDef","SubTableValueCellDef","UrlCellDef","MatchUrlsOnlyRegex","AbsoluteOrRelativeUrlCellDef","AbsoluteOrRelativeUrlRegex","NothingGoesThereCellDef","CommentCellDef","WorkInProgressCellDef","SlugDeclarationCellDef","FrontierCellClass","SlugsDeclarationCellDef","EtlPathCellDef","IndicatorIdOrEtlPathCellDef","SlugOrIndicatorIdOrEtlPathCellDef","IndicatorIdsOrEtlPathsCellDef","AVAILABLE_OPTION_CLASS","UNAVAILABLE_OPTION_CLASS","SELECTED_OPTION_CLASS","EXPLORER_DROPDOWN_CLASS","HIDDEN_CONTROL_HEADER_CLASS","ExplorerControlBar","showControls","closeControls","mobileCloseButton","ExplorerDropdown","dropdownOptions","selectedOption","ExplorerControlPanel","customOnChange","renderCheckboxOrRadio","explorerSlug","available","isCheckbox","onChangeValue","false","true","renderDropdown","renderColumn","displayTitle","Radio","optionsGroup","isBlankLine","didYouMean","caseSensitive","maximumEditDistanceToBeBestMatch","thresholdAbsolute","closestMatch","optionIndex","editDistance","getEditDistance","MAX_INT","aLength","stringA","bLength","stringB","maxInt","bIndex","aIndex","colMin","minJ","maxJ","tsvToMatrix","delimited","rowDelimiter","columnDelimiter","GridCell","subTableParseResults","cellDef","rootDefinition","isCommentCell","cellTerminalTypeDefinition","grammar","firstWordOnLine","isFirstWordAKeyword","positionalCellDefs","isHorizontalList","parentSubTableInfo","pointerRow","subTableHeaderRow","parentKeyword","parentRow","isCellInHeader","headerKeyword","subTableDef","headerCellDef","headerGrammar","valueCellDef","isFrontierCell","isSubTableFrontierCell","isToTheImmediateRightOfLastFullCell","isFirstCellOnFrontierRow","optionKeywords","catchAllCellDef","catchAllKeywordRegex","regexResult","catchAllRegexResult","guess","cssClasses","showArrow","hasSuggestions","firstOptionName","requirements","GridProgram","tsv","lastCommit","lastLine","blockRowNumber","keywordIndex","rowNumber","ColumnGrammar","toTerminalOptions","keywords","GrapherGrammar","omitEmptyStringValues","parsedValue","omitEmptyObjectValues","R.omitBy","R.isPlainObject","parseVariableIds","makeChoicesMap","headerLine","choiceNameAndType","choiceName","choiceType","removeChoiceControlTypeInfo","dropColumnTypes","makeCheckBoxOption","DecisionMatrix","diffBetweenUserSettingsAndConstrained","setValueCommand","_setValue","setValuesFromChoiceParams","choiceNames","allChoiceOptions","availableChoiceOptions","choicesWithAvailability","currentParams","selectedRow","choiceNameToControlTypeMap","grapherId","allColumnSlugsWithIndicatorIdsOrCatalogPaths","allDecisionsAsQueryParams","choiceParams","requiredGrapherIds","requiredVariableIds","yVariableIds","allVariableIds","xVariableId","colorVariableId","sizeVariableId","allColumnsWithIndicatorIdsOrCatalogPaths","requiredCatalogPaths","allIndicators","tableWithOriginalColumnNames","controlType","toConstrainedOptions","isOptionAvailable","defaultSettings","firstAvailableOptionForChoice","invalidState","trimAndParseObject","selectedRowIndex","choiceValue","choiceMap","getChoiceParamsForRow","rowsWith","modifiedQuery","queryColumn","firstMatch","toControlOption","optionName","constrainedOptions","ExplorerFormControlCellDeff","ExplorerGrammar","EXPLORER_FILE_SUFFIX","ExplorerRootDef","ExplorerProgram","makeFullPath","blockIdString","explorerGrapherConfig","decisionMatrix","grapherIdColumn","tableSlugColumn","hasGrapherId","hasCsvData","chartCreationMode","FromVariableIds","FromGrapherId","FromExplorerTableColumnSlugs","colDefsRows","parseColumnDefs","idOrSlug","remoteTable","existingTableDef","newCols","colDefsRow","selectedGrapherRow","partialConfigs","_.merge","relatedQuestionUrl","relatedQuestionText","makeSlugDimension","makeVariableIdDimension","parsedId","slugDimYList","slugDimX","slugDimColor","slugDimSize","varDimYList","varDimX","varDimColor","varDimSize","tableDef","tableDefRow","inlineData","owidDatasetSlug","trimmedRow","covidMetricFromLegacyQueryParams","legacyIntervalToNewValue","covidIntervalFromLegacyQueryParams","legacyInterval","boolParamToString","legacyToCurrentCovidQueryParams","restQueryParams","baseQueryParams","urlContainsMetric","explorerQueryParams","legacyCovidMigrationSpec","explorerUrl","baseQueryStr","decodeURIComponentOrUndefined","transformQueryParams","newQueryParams","oldQueryParams","transformMap","oldParamName","transformValue","_.identity","getExplorerSlugFromUrl","EXPLORER_SLUG","co2QueryParamTransformMap","co2UrlMigration","energyQueryParamTransformMap","energyUrlMigration","covidUrlMigration","explorerUrlMigrationsById","legacyToGridCovidExplorer","explorerUrlMigrations","migrateExplorerUrl","subscribeToLocalStoragePolling","setInterval","clearInterval","LivePreviewComponent","useLocalStorage","setUseLocalStorage","localStorageProgram","useSyncExternalStore","localStorage","hasLocalStorage","renderedProgram","program","Explorer","isPreview","renderLivePreviewVersion","setGrapher","partialGrapherConfigsByVariableId","partialGrapherConfigsBySlug","reactToUserChangingSelection","setGrapherTable","updateGrapherFromExplorer","updateGrapherFromExplorerUsingGrapherId","updateGrapherFromExplorerUsingVariableIds","updateGrapherFromExplorerUsingColumnSlugs","currentChoiceParams","showExplorerControls","toggleMobileControls","showHeaderElement","inputTableTransformer","appendOnlyAvailableEntityNames","grapherContainerRef","showMobileControlsPopup","explorerProgram","initDecisionMatrix","initialQueryParams","assetMaps","isInStandalonePage","setupGrapher","renderSingleExplorerOnExplorerPage","partialGrapherConfigs","chartConfigIdByViewId","explorerConstants","urlMigrationSpec","EXPLORERS_PREVIEW_ROUTE","explorerUrlMigrationId","migrateUrl","bakedBaseUrl","bakedGrapherUrl","columnDefsWithoutTableSlug","configsBySlug","transformParams","dataSlugsForTransform","DataSlug","indicatorId","partialGrapherConfig","logExplorerView","getChartConfigIdForCurrentParams","attachEventListeners","updateEntityPickerTable","onResizeThrottled","initSlideshow","persistedGrapherQueryParamsBySelectedRow","oldSelectedRow","currentlySelectedGrapherRow","oldGrapherParams","newGrapherParams","previousTab","currentTab","viewId","futureGrapherTable","onReject","tableLoader","constructTable","grapherConfig","throwOnMissingGrapher","loadInputTableForConfig","loadMetadataOnly","owidTable","dimensionsOfSelectedRow","variableIdDimensions","slugDimensions","getColumnDef","getColumnDefWithoutTableSlugByIdOrSlug","dimensionExists","baseSlugs","allRequiredSlugs","existingSlugs","missingColumnDefs","manuallyProvidedDef","pickerSort","pickerMetric","panels","onChangeChoice","choiceTitle","renderHeaderElement","explorerTitle","explorerSubtitle","downloadDataLink","renderControlBar","renderEntityPicker","EntityPicker","oldIsNarrow","updateGrapherBounds","grapherContainer","mobileCustomizeButton","HideControls","futureEntityPickerTable","tableSlugToLoad","getTableSlugOfColumnSlug","tableSlugHasColumnSlug","columnDefsByTableSlug","grapherTableSlug","allColumnDefs","pickerColumnSlugs","columnDefsBySlug","discardColumnTypes","buildExplorerProps","STOP_WORDS","pickEntitiesForChartHit","originalAvailableEntities","filteredEntities","sortedEntities","generateGrapherTabQueryParam","hasEntities","generateGrapherTimeQueryParam","timeBounds","timeMode","toGrapherQueryParams","generateQueryStrForChartHit","grapherParams","isExplorerView","ExplorerView","isMultiDimView","MultiDimView","queryStrList","constructChartUrl","viewQueryStr","overlayQueryStr","queryParts","constructChartInfoUrl","constructSearchResultUrl","optionsQueryStr","numDataTableRowsPerColumn","constructPreviewUrl","isMinimal","imageWidth","imageHeight","imType","imMinimal","imFontSize","imHeight","fullQueryStr","CHARTS_INDEX","ExplorerViewsMdimViewsAndCharts","PAGES_INDEX","Pages","PAGES_CHRONOLOGICAL_INDEX","PagesChronological","DATA_CATALOG_ATTRIBUTES","getSelectableTopics","selectedTopic","serializeSet","deserializeSet","topicAreasFromSearchParams","topicAreaNames","TOPICS","getFilterIcon","COUNTRY","countryCode","TOPIC","DATASET_PRODUCT","DATASET_NAMESPACE","DATASET_VERSION","DATASET_PRODUCER","QUERY","matchIsOnlyInsideParentheses","findTopicAndRegionFilters","allRegionsNames","allTopics","selectedTopics","synonymMap","searchTerm","searchCountryTopics","isSynonym","countryFilters","createCountryFilter","topicFilters","createTopicFilter","synonyms","synonym","filtersFromSynonym","filtersOfType","getQuotedWordPositions","quotedPositions","wordCount","suggestFiltersFromQuerySuffix","queryWords","splitIntoWords","suggestions","unmatchedQuery","matchedFilters","matchStartIndex","wordsToSearch","countryMatches","topicMatches","exactMatches","partialMatches","allMatches","sortedPartialMatches","primaryFilters","createQueryFilter","combinedFilters","isNotValidNgram","ngram","quotedWordPositions","matchedWordPositions","hasLeadingTrailingStopWords","generateNgrams","extractFiltersFromQuery","allFilters","maxNgramSize","ngramWords","ngramPositions","bestFilter","filtersFromNgram","createFilter","createDatasetProductsFilter","createDatasetNamespaceFilter","createDatasetVersionFilter","createDatasetProducerFilter","isCurrentRef","getSearchAutocompleteId","getSearchAutocompleteItemId","buildFilterTestId","baseTestId","filterType","filterName","encodeURIComponent","getFilterAriaLabel","filterTypeLabel","isValidResultType","getSelectedTopic","getSelectedTopicType","Topic","isBrowsing","hasDatasetFilters","getEffectiveResultType","desiredResultType","ALL","DATA","getUrlParamNameForFilter","getItemUrlForFilter","filterParam","RESULT_TYPE","SEARCH_BASE_PATH","getPageTypeNameAndIcon","pageType","AboutPage","Profile","FeaturedViz","Author","Homepage","getPaginationOffsetAndLength","pageParam","firstPageSize","laterPageSize","getNbPaginatedItemsRequested","currentPageIndex","lastPageHits","removeMatchedWordsWithStopWords","originalWords","matchedPositions","wordsToRemove","matchedPos","isNotStopWord","firstWord","lastWord","NotFoundPageForm","searchQuery","setSearchQuery","domValue","getLatestExperimentArm","SiteAnalytics","logPageNotFoundError","logToGA","SiteError","eventAction","logNewsletterSubscribeError","logInstantSearchClick","SiteInstantSearchClick","logExpandableToggle","logSiteClick","logDodShown","DetailOnDemand","logLatest","SiteLatest","latestTopics","experimentArm","logLatestResultClick","SiteLatestResultClick","latestPosition","logLatestAnnouncementExpand","SiteLatestAnnouncementExpand","logSearch","SiteSearch","searchRequireAllCountries","searchResultType","resultType","searchTopics","searchSelectedCountries","logSearchResultClick","SiteSearchResultClick","logExpanderToggle","Expander","logSearchAutocompleteClick","suggestionsTypes","suggestionsCount","SiteSearchAutocompleteClick","autocompleteQuery","autocompletePosition","autocompleteFilterType","autocompleteFilterName","autocompleteSuggestions","autocompleteSuggestionsTypes","autocompleteSuggestionsCount","logGuidedChartLinkClick","targetNext","SiteGuidedChartLinkClick","eventTargetNext","logChartPreviewMouseover","chartUrl","SiteChartPreviewMouseover","logStaticVizDownload","staticVizName","SiteStaticVizDownload","logUserSurveyRoleSubmit","SiteUserSurvey","surveyName","responseId","freeFormInput","optionId","optionLabel","logUserSurveyRoleShow","logUserSurveyThankYouShow","logUserSurveyFeedbackSubmit","logUserSurveyRoleDismiss","logUserSurveyThankYouDismiss","startClickTracking","dataTrackAttr","dataGrapherUrlAttr","trackedElement","grapherUrlRaw","grapherUrlObj","logGrapherClick","startPrintTracking","SitePrint","startFindInPageTracking","logOpen","SiteFindInPage","repeat","logBrowserTranslationEvent","browserLanguages","TranslatePage","startDetectingBrowserTranslation","htmlElement","initialLang","sendTranslationAnalyticsEvent","prevLang","newLang","page_translated","page_translated_to","MutationObserver","mutationsUniq","attributeFilter","attributeOldValue","titleElement","runNotFoundPage","SiteToolsButton","button","sendFeedback","feedback","Feedback","email","topicMatchers","vaccinationRegex","licensingRegex","citationRegex","translateRegex","fundingRegex","reusingChartsRegex","visualizationToolRegex","reusingDataRegex","logoRegex","teachingRegex","vaccineNotice","copyrightNotice","citationNotice","translateNotice","fundingNotice","reusingChartsNotice","reusingDataNotice","visualizationToolNotice","logoNotice","teachingNotice","topicNotices","onName","onEmail","onMessage","specialTopic","submit","renderBody","autofocus","notices","htmlFor","minLength","toggleOpen","onClickOutside","FeedbackForm","runFeedbackPage","y$2","v$2","DEFAULT_AMOUNT_INDEX","TURNSTILE_SENTRY_ERROR_CODES","amountsByInterval","monthly","annual","EveryOrgSection","buttonVariant","setPresetAmount","setCustomAmount","setName","toggleShowOnList","toggleSubscribeToDonorNewsletter","setErrorMessage","setIsSubmitting","setCurrency","intervalAmounts","currencySymbol","isUsa","onCaptchaSuccess","onCaptchaError","onCaptchaExpire","presetAmount","customAmount","subscribeToDonorNewsletter","captchaToken","isSubmitting","currencyCode","submitDonation","requestBodyForClientSideValidation","successUrl","cancelUrl","logSiteFormSubmit","errorCode","errorCodeNumber","errorFamily","prefixedErrorMessage","rawErrorMessage","Turnstile","siteKey","appearance","onExpire","runDonateForm","DonateForm","figuresFromDOM","MultiEmbedderSingleton","MultiEmbedder","renderInteractiveFigure","figuresObserver","isPreviewing","onIntersecting","embedAll","observeFigures","figures","figure","renderExplorerIntoFigure","_renderGrapherComponentIntoFigure","additionalConfig","fetchedGrapherPageConfig","grapherPageConfig","renderGrapherIntoFigure","embedUrlRaw","renderNarrativeChartIntoFigure","narrativeChartInfoRaw","chartConfigId","hasAttribute","isNarrativeChart","embedType","runMonkeyPatchForGoogleTranslate","nodeToString","outerHTML","Node","originalRemoveChild","this","originalInsertBefore","insertBefore","faThreads","faBluesky","faYoutube","faGithub","faLinkedin","faFacebook","faMastodon","faInstagram","faXTwitter","faCreativeCommons","PROD_URL","SMALL_BREAKPOINT_MEDIA_QUERY","MEDIUM_BREAKPOINT_MEDIA_QUERY","MOBILE_MENU_DETAILS_NAME","DATA_INSIGHTS_ATOM_FEED_NAME","SOCIALS","RSS_FEEDS","\"Topics\"","\"Resources\"","\"About\"","\"Subscribe\"","\"Search\"","ABOUT_LINKS","GalleryArrowDirection","\"prev\"","\"next\"","GalleryArrow","GrapherImageSource","suppressHydrationWarning","GrapherImage","enablePopulatingUrlParams","noFormatting","AllChartsListItem","GrapherFigureView","useProvidedConfigOnly","slugConfigUrl","GrapherWithFallback","shouldLoadGrapher","DocumentContext","useDocumentContext","useVersionsFileUrl","RELATED_CHARTS_CLASS_NAME","RelatedCharts","charts","showKeyChartsOnly","activeChartIdx","setActiveChartIdx","sortedCharts","keyChartLevel","isFirstSlideActive","isLastSlideActive","activeChart","activeChartSlug","onClickItem","shiftKey","singleChartView","multipleChartsView","Subscribable","defaultTimeoutProvider","intervalId","timeoutManager","#provider","systemSetTimeoutZero","isServer","functionalUpdate","isValidTimeout","timeUntilStale","staleTime","resolveStaleTime","resolveEnabled","enabled","matchQuery","queryKey","exact","hashQueryKeyByOptions","partialMatchKey","stale","fetchStatus","matchMutation","mutationKey","hashKey","replaceEqualDeep","isPlainArray","aSize","bItems","bSize","equalItems","aItem","bItem","shallowEqualObjects","hasObjectPrototype","replaceData","prevData","keepPreviousData","previousData","addToEnd","addToStart","skipToken","ensureQueryFn","shouldThrowError","throwOnError","#setup","#cleanup","setup","#focused","pendingThenable","_resolve","_reject","defaultScheduler","createNotifyManager","transactions","notifyFn","batchNotifyFn","scheduleFn","originalQueue","notifyManager","onlineManager","onlineListener","onOnline","offlineListener","#online","online","defaultRetryDelay","failureCount","canFetch","networkMode","CancelledError","createRetryer","isRetryCancelled","continueFn","isResolved","cancelOptions","cancelRetry","continueRetry","canContinue","canStart","continueResolve","promiseOrValue","initialPromise","retryDelay","shouldRetry","Removable","#gcTimeout","newGcTime","Query","#abortSignalConsumed","#defaultOptions","#client","#cache","#initialState","getDefaultState","#retryer","successState","#dispatch","addSignalProperty","fetchFn","queryFn","queryFnContext","queryFnContext2","context2","#revertState","fetchState","dataUpdatedAt","initialDataUpdatedAt","QueryObserver","#selectError","#currentThenable","#currentQuery","shouldFetchOnMount","#executeFetch","#updateTimers","shouldFetchOn","#clearStaleTimeout","#clearRefetchInterval","prevOptions","prevQuery","#updateQuery","shouldFetchOptionally","#updateStaleTimeout","nextRefetchInterval","#computeRefetchInterval","#currentRefetchInterval","#updateRefetchInterval","shouldAssignObserverCurrentProperties","#currentResult","#currentResultOptions","#currentResultState","onPropTracked","#trackedProps","defaultedOptions","#staleTimeoutId","nextInterval","#refetchIntervalId","prevResult","prevResultState","prevResultOptions","queryInitialState","#currentQueryInitialState","isPlaceholderData","fetchOnMount","fetchOptionally","skipSelect","placeholderData","#lastQueryWithDefinedData","#selectFn","#selectResult","selectError","isFetching","nextResult","isStale","finalizeThenableIfPossible","recreateThenable","prevThenable","#notify","notifyOnChangePropsValue","notifyOnChangeProps","includedProps","typedKey","notifyOptions","shouldLoadOnMount","optimisticResult","infiniteQueryBehavior","oldPages","oldPageParams","currentPage","fetchPage","page","addTo","maxPages","pageParamFn","getPreviousPageParam","getNextPageParam","oldData","remainingPages","pages","pageParams","hasNextPage","hasPreviousPage","InfiniteQueryObserver","parentResult","fetchDirection","isFetchNextPageError","isFetchingNextPage","isFetchPreviousPageError","isFetchingPreviousPage","isRefetchError","isRefetching","Mutation","#mutationCache","#observers","onContinue","mutationFnContext","restored","MutationCache","#mutations","#scopes","#mutationId","scopeFor","scopedMutations","firstPendingMutation","defaultedFilters","pausedMutations","#updateResult","#currentMutation","#mutateOptions","onMutateResult","excludeSet","array2","array1","replaceAt","QueriesObserver","#options","#queries","#result","#onUpdate","prevObservers","newObserverMatches","#findMatchingObservers","#observerMatches","newObservers","newResult","hasLengthChange","hasIndexChange","hasStructuralChange","hasResultChange","#combineResult","combine","#trackResult","observerResult","accessedProp","#combinedResult","#lastResult","#lastCombine","prevObserversMap","previousResult","newTracked","QueryCache","queryHash","queryInMap","QueryClient","#queryCache","#queryDefaults","#mutationDefaults","#mountCount","#unsubscribeFocus","#unsubscribeOnline","cachedData","queryCache","defaultedCancelOptions","queryDefault","QueryClientContext","useQueryClient","queryClient","QueryClientProvider","IsRestoringContext","useIsRestoring","createValue","isReset","QueryErrorResetBoundaryContext","useQueryErrorResetBoundary","ensurePreventErrorBoundaryRetry","errorResetBoundary","useClearResetErrorBoundary","getHasError","suspense","ensureSuspenseTimers","MIN_SUSPENSE_TIME_MS","originalStaleTime","willFetch","isRestoring","shouldSuspend","fetchOptimistic","useQueries","defaultedQueries","trackResult","shouldSubscribe","onStoreChange","suspensePromises","queryObserver","firstSingleResultWhichShouldThrow","useBaseQuery","isNewCacheEntry","Observer","useQuery","queryOptions","useIsFetching","useMutation","mutate","mutateOptions","useInfiniteQuery","SearchChartHitDataDisplay","showLocationIcon","_define_property","_object_spread","enumerableOnly","_object_spread_props","ownKeys$27","_object_without_properties_loose","_object_without_properties","htmlCharacters","regexEscapedHtml","regexHasEscapedHtml","unescape","TAG_REPLACEMENT","getHighlightedParts","highlightPostTag","highlightPreTag","splitByPreTag","highlightedValue","splitByPostTag","getPropertyByPath","safelyRunOnBrowser","createHighlightPartComponent","highlightedTagName","isHighlighted","nonHighlightedTagName","createHighlightComponent","HighlightPart","userProps","_userProps_highlightedTagName","_userProps_nonHighlightedTagName","_userProps_separator","_userProps_classNames","_$1","_$2","isLastPart","partIndex","subPartIndex","subPart","usePoweredBy","InternalHighlight","Highlight","_0_classNames","singleValue","Highlight$1","PoweredBy","_0_theme","uiProps","PoweredBy$1","Snippet","Snippet$1","SearchChartHitHeader","isLarge","__position","SearchChartHitSubtitle","hasSubtitle","shouldUseFreshSubtitle","makeStateForKey","searchQueryKeys","topicTagGraph","dataTopics","articles","topicPages","writingTopics","profiles","latestPagesQueryKey","latestPages","chartHitQueryKeys","searchResultData","queryDataTopics","indexName","attributesToRetrieve","hitsPerPage","searchForHits","queryCharts","datasetFacetFilters","queryDataInsights","hasCountry","restrictSearchableAttributes","queryArticles","isFilterOnly","TOPIC_PAGE_ATTRIBUTES","queryTopicPages","chartsIndexName","pagesIndexName","loadTagGraph","queryProfiles","LATEST_BASE_FILTER","queryLatestPages","latestTypeFacetFilter","maxValuesPerFacet","mainResult","typeResult","topicResult","tagFacetCounts","latestTypeFacetCounts","queryWritingTopics","totalCount","nbHits","PreviewVariant","\"Large\"","SCATTER_THUMBNAIL_WIDTH","getTotalColumnCount","R.sumBy","placedTabs","makeSlotClassNames","baseName","mapGridSlotKeyToClassName","getPreviewType","isPrimaryTab","calculateScatterPreviewImageDimensions","useQueryChartInfo","isChartRecord","constructChartAndPreviewUrlsForTab","imageDimensions","SearchChartHitSmall","isSmallScreen","entityForDisplay","hasUserPickedEntities","dataDisplayProps","downloadUrl","SearchChartHitDataTable","numRowsPerColumn","timedRows","mainTime","shouldShowTimeInTitle","shouldShowSwatch","shouldSpanBothColumns","timePreposition","Row","rounded","outlined","startValueColor","CaptionedLink","caption","CaptionedLinkOverlay","CaptionedTable","dataTableContent","numAvailableEntities","captionWithIcon","SearchChartHitThumbnail","previewUrl","hoverOverlayText","imgLoaded","setImgLoaded","imgError","setImgError","CaptionedThumbnail","isSmallSlot","SearchChartHitRichDataFallback","entityParam","grapherTabs","hasDataDisplay","hasDataTable","grapherTab","NUM_DATA_TABLE_ROWS_PER_COLUMN_IN_MEDIUM_VARIANT","NUM_DATA_TABLE_ROWS_PER_COLUMN_IN_LARGE_VARIANT","SCATTER_NUM_DATA_TABLE_ROWS_PER_COLUMN_IN_MEDIUM_VARIANT","SearchChartHitRichData","isMediumScreen","isLargeVariant","pickedEntities","loadingStatus","useQuerySearchResultDataForChartHit","sourcesUrl","SearchChartHitHeaderActionButtons","RichDataContentPlaceholder","countryParam","grapherQueryParams","chartParams","SmallLeft","SmallRight","constructChartUrlForTab","primaryGrapherTab","overwriteParams","constructPreviewUrlForTab","slotIndex","dataTable","valueDisplay","RichDataContentMediumVariantPlaceholder","RichDataContentLargeVariantPlaceholder","GrapherThumbnailPlaceholder","Single","LeftQuad","RightQuadLeftColumn","SingleCell","omitParamsForChartUrl","previewParams","previewType","Large","calculateLargePreviewImageDimensions","tabsWithSmallerFont","SearchChartHitComponent","SearchChartHitLarge","SearchChartHitMedium","\"Pop\"","\"Push\"","\"Replace\"","PopStateEventType","createBrowserHistory","createBrowserLocation","createLocation","globalHistory","createBrowserHref","createPath","getUrlBasedHistory","invariant","cond","createKey","getHistoryState","parsePath","parsedPath","hashIndex","searchIndex","getIndex","handlePop","validateLocation","historyState","v5Compat","createURL","invariant$1","getLocation","createHref","ResultType","\"data\"","\"deferred\"","\"redirect\"","\"error\"","stripBasename","nextChar","ABSOLUTE_URL_REGEX$1","isAbsoluteUrl","resolvePath","fromPathname","toPathname","oldPathname","resolvePathname","normalizeSearch","normalizeHash","relativePath","getInvalidPathError","dest","getPathContributingMatches","getResolveToMatches","pathMatches","v7_relativeSplatPath","resolveTo","isPathRelative","toArg","isEmptyPath","locationPathname","routePathnameIndex","routePathnames","toSegments","hasExplicitTrailingSlash","hasCurrentTrailingSlash","joinPaths","validMutationMethodsArr","validRequestMethodsArr","DataRouterContext","NavigationContext","LocationContext","RouteContext","useInRouterContext","useLocation","UNSAFE_invariant","useNavigate","isDataRoute","useNavigateStable","useNavigateUnstable","dataRouterContext","routePathnamesJson","UNSAFE_getResolveToMatches","future","activeRef","useIsomorphicLayoutEffect$1","DataRouterHook","\"UseBlocker\"","\"UseRevalidator\"","\"UseNavigateStable\"","DataRouterStateHook","\"UseLoaderData\"","\"UseActionData\"","\"UseRouteError\"","\"UseNavigation\"","\"UseRouteLoaderData\"","\"UseMatches\"","\"UseRouteId\"","useDataRouterContext","useRouteContext","route","useCurrentRouteId","hookName","thisRoute","logDeprecation","flag","logV6DeprecationWarnings","renderFuture","routerFuture","Router","basenameProp","locationProp","staticProp","navigationContext","locationContext","trailingPathname","AwaitRenderStatus","\"pending\"","\"success\"","createSearchParams","getSearchParamsForLocation","locationSearch","defaultSearchParams","REACT_ROUTER_VERSION","startTransitionImpl","START_TRANSITION","BrowserRouter","historyRef","setStateImpl","v7_startTransition","UNSAFE_logV6DeprecationWarnings","\"UseScrollRestoration\"","\"UseSubmit\"","\"UseSubmitFetcher\"","\"UseFetcher\"","\"useViewTransitionState\"","\"UseFetchers\"","useSearchParams","defaultSearchParamsRef","defaultInit","hasSetSearchParamsRef","navigate","newSearchParams","nextInit","navigateOptions","DEFAULT_SEARCH_STATE","useSearchParamsState","setSearchParams","applyAutomaticFilters","searchParamsToState","eligibleRegionNames","eligibleTopicsAndAreas","urlNeedsSanitization","stateToSearchParams","updateParams","stateWithAutoFilters","exists","newFilters","hasCountryFilters","topicsSet","countriesSet","datasetsSet","namespacesSet","versionsSet","producersSet","resultTypeParam","datasets","buildSearchHrefForCard","sanitizedParams","replaceQueryWordsWithFilters","filtersWithPositions","allPositions","newQuery","existingFilterKeys","createBrowserLocalStorageCache","storage","namespaceKey","getStorage","getNamespace","setNamespace","yieldToMain","getFilteredNamespace","timeToLive","cacheItem","cachedItem","createNullCache","createFallbackableCache","createMemoryCache","keyAsString","createAlgoliaAgent","algoliaAgent","addedAlgoliaAgent","createAuth","credentials","apiKey","appId","authMode","getAlgoliaAgent","defaultAlgoliaAgent","algoliaAgents","createNullLogger","MAX_LINE_BUFFER_SIZE","readableStreamToAsyncIterable","toAsyncIterable","iterLines","decoder","bufferSize","trailingCR","crIdx","lfIdx","remaining2","skipLen","SSEDecoder","colonIdx","currentEventType","iterSSEEvents","EXPIRATION_DELAY","createStatefulHost","lastUpdate","isTimedOut","AlgoliaError","ErrorWithStackTrace","correlationId","stackTrace","RetryError","ApiError","DeserializationError","DetailedApiError","shuffledArray","serializeUrl","queryParametersAsString","serializeQueryParameters","queryParameters","serializeData","serializeHeaders","baseHeaders","requestHeaders","requestOptionsHeaders","serializedHeaders","deserializeSuccess","getCorrelationId","deserializeSuccessWithHttpInfo","getLastCorrelationId","deserializeFailure","stackFrame","BASE62_CHARS","REQUEST_ID_LENGTH","generateRequestId","requestId","bytes","byte","isNetworkError","isRetryable","isSuccess","stackTraceWithoutCredentials","stackFrameWithoutCredentials","modifiedHeaders","createTransporter","injectRequestId","requestIdChannel","parameter","createRetryableOptions","statefulHosts","compatibleHosts","hostsCache","compatibleHost","hostsUp","hostsTimedOut","hostsAvailable","timeoutsCount","baseTimeout","retryableRequest","serializedData","wantsCompression","compression","compress","shouldCompress","dataQueryParameters","baseQueryParameters","retryableHosts","getTimeout","isRead","pushToStackTrace","response2","requester","hosts","createRequest","createRetryableRequest","responsesCache","requestsCache","createRequestWithHttpInfo","requestStream","\"accept\"","host2","validateRequired","apiClientVersion","getDefaultHosts","createLiteClient","appIdOption","apiKeyOption","auth","transporter","searchMethodParams","getRecommendationsParams","legacyRequest","liteClient","_compression","browserOptions","createXhrRequester","shouldUseCachedQueriesEndpoint","isSuccessStatus","createCachingRequester","fetchRequester","createFetchRequester","getLiteSearchClient","autocompleteSearchClient","getAutocompleteSearchClient","SearchResultHeaderSkeleton","SearchDataTopicsResultsSkeleton","SearchChartHitMediumSkeleton","CaptionedThumbnailSkeleton","SearchDataResultsSkeleton","MAX_MEDIUM_RESULTS","FeaturedMetrics","topicName","isDataPage","headingCaseCorrected","headingFragment","searchState","MAX_SMALL_RESULTS","searchHref","hitIndex","getSiteQueryClient","queryClient$1","SiteQueryClientProvider","RELATED_DATA_CHARTS_ID","NUM_RELATED_CHARTS","relatedChartToSearchChartHit","chartId","RelatedDataCharts","visibleCharts","vizType","getDownloadRewriteAttrs","getCodeExampleRewriteTarget","DownloadSection","archivedChartInfo","distribution","hideRowCounts","tableForDownloadSourceLinks","fullDownloadUrl","filteredDownloadUrl","fullDownloadFilename","filteredDownloadFilename","archiveDownloadVisUrl","overlaySearchParams","archiveDownloadDataUrl","sourceLinksFromDistribution","allowed","shouldShowNonRedistributableNotice","fullDownloadDescription","filteredDownloadDescription","processRelatedResearch","relatedResearch","topicTags","research","getDatapageDataV2","AttachmentsContext","useIsScrolling","isScrolling","setIsScrolling","settle","_.debounce","idleMs","useEmbedChart","refChartContainer","useTriggerOnEscape","handleEscape","useMobxStateToReactState","mobxStateGetter","useWindowQueryParams","navigation","lastQueryString","currentQueryString","subscribeToNothing","useHasHydrated","breadcrumbColorForCoverColor","coverColor","useLinkedAuthor","stripTrailingAuthorRole","getAuthorTeamAnchorId","nameWithoutRole","nameWithoutTitle","authorNamesWithoutTeamAnchors","getAuthorTeamAnchorUrl","getLinkedDocumentUrl","linkedDocument","originalUrl","useLinkedDocument","linkType","Gdoc","urlTarget","published","availableEntityCodes","useLinkedChart","parsedOriginalUrl","linkedChart","parsedResolvedUrl","useLinkedIndicator","linkedIndicators","linkedIndicator","useImage","useDonors","donors","useLinkedNarrativeChart","linkedNarrativeCharts","useLinkedStaticViz","linkedStaticViz","DataCalloutContext","useCalloutValue","linkedCallouts","calloutContext","linkedCallout","getShortPageCitation","getFullYear","buildGdocCitation","citationText","shortPageCitation","bibtex","normalizeBlockType","DebugContext","useDebug","BlockErrorBoundary","resetError","BlockErrorFallback","marginBottom","roundNumber","checkIsNumber","handleCallback","handleCancelAnimationFrame","handleCancelAnimation","contextInstance","handleSetupAnimation","lastStep","frameTime","animationProgress","animationTime","animationType","animationName","isValidTargetState","targetState","positionX","positionY","setTransformState","scaleDiff","positionXDiff","positionYDiff","getComponentsSizes","wrapperWidth","wrapperComponent","wrapperHeight","contentComponent","newContentWidth","newScale","newContentHeight","getBounds","scaleWidthFactor","diffWidth","centerZoomedOut","scaleHeightFactor","diffHeight","maxPositionX","maxPositionY","calculateBounds","newDiffWidth","newDiffHeight","boundLimiter","minBound","maxBound","handleCalculateBounds","getMouseBoundedPosition","minPositionX","minPositionY","paddingX","paddingY","paddingValueX","paddingValueY","limitToBounds","handleCalculateZoomPositions","scaleDifference","mouseY","checkZoomBounds","minScaleWithPadding","enablePadding","zoomPadding","isPanningStartAllowed","isInitialized","isWrapperChild","isExcludedNode","isPanningAllowed","isPanning","handlePanningSetup","handleTouchPanningSetup","handlePanToBounds","xChanged","yChanged","_d","handleNewPosition","newPositionX","newPositionY","getPanningClientPosition","transformState","lockAxisX","lockAxisY","getPaddingValue","disablePadding","isVelocityCalculationAllowed","velocityAnimation","isVelocityAllowed","getVelocityMoveTime","equalToMove","getVelocityPosition","currentPosition","calculatedPosition","newPosition","maxTarget","minTarget","isLocked","getSizeMultiplier","defaultMultiplier","handleCalculateVelocity","lastMousePosition","velocityTime","sizeMultiplier","distanceX","distanceY","velocityX","velocityY","handleVelocityPanning","alignmentAnimation","zoomAnimation","sizeX","sizeY","alignAnimationTime","moveAnimationTime","finalAnimationTime","maxTargetX","minTargetX","maxTargetY","minTargetY","startState","alignAnimation","alignStep","customStep","currentPositionX","currentPositionY","handlePanningStart","handleAlignToBounds","customAnimationTime","handlePanning","handlePanningEnd","velocityDisabled","wrapperRect","isZoomed","handleZoomToPoint","handleAlignToScaleBounds","mousePositionX","mousePositionY","__assign","__spreadArray","pack","initialSetup","baseClasses","createSetup","newSetup","validValue","dataType","handleCalculateButtonZoom","smooth","handleZoomToViewCenter","resetTransformations","initialTransformation","boundedPositions","onResetTransformation","getOffset","wrapperOffset","contentOffset","xOff","yOff","calculateZoomToNode","nodeRect","nodeOffset","nodeLeft","nodeTop","nodeWidth","nodeHeight","customZoom","zoomIn","zoomOut","resetTransform","centerView","getCenterPosition","zoomToElement","getControls","getState","passiveSupported","makePassiveEventOption","matchPrefix","getTransformStyles","mergeRefs","isWheelAllowed","wheelDisabled","touchPadDisabled","getDeltaY","getDelta","customDelta","getMousePosition","handleCalculateWheelZoom","targetScale","getTarget","paddingEnabled","handleWheelZoomStop","previousWheelEvent","isPinchStartAllowed","isPinchAllowed","pinchStartDistance","calculateTouchMidPoint","firstPointX","firstPointY","secondPointX","secondPointY","getTouchDistance","calculatePinchZoom","pinchStartScale","currentDistance","wheelStopEventTime","wheelAnimationTime","handleWheelStart","onWheelStart","onZoomStart","handleWheelZoom","onZoom","wheel","smoothStep","mousePosition","isLimitedToBounds","handleWheelStop","onWheelStop","onZoomStop","getTouchCenter","totalX","totalY","handlePinchStart","handlePinchZoom","panX","panY","finalX","finalY","handlePinchStop","pinchMidpoint","handleDoubleClickStop","handleDoubleClickResetMode","getDoubleClickScale","handleDoubleClick","doubleClickStopEventTimer","isDoubleClickAllowed","ZoomPanPinch","currentDocument","isCentered","centerOnInit","hasTarget","entries_1","onPanningStart","onPanning","onPanningStop","onPinchingStart","onPinching","onPinchingStop","isPanningAction","isPinchAction","onTransformed","ctx_1","getContent","TransformWrapper","localRef","styleInject","insertAt","css_248z","\"wrapper\"","\"content\"","TransformComponent","wrapperClass","contentClass","wrapperStyle","wrapperProps","_e","cleanupWindowEvents","wrapperRef","LightboxImage","isLoaded","setIsLoaded","Lightbox","imgSrc","imgFilename","hideDownload","handleDownload","onContentClick","doubleClick","FloatingDownloadButton","generateResponsiveSizes","numberOfColumns","gridSpan2","gridSpan3Sm","gridSpan5","gridSpan6","gridSpan7","gridSpan8","containerSizes","\"thumbnail\"","\"datapage\"","\"person\"","gridSpan12","LIGHTBOX_IMAGE_CLASS","makeSrc","cloudflareId","smallFilename","hasOutline","containerType","shouldLightbox","shouldHideDownloadButton","preferSmallFilename","imageData","smallImageData","isInteractive","imageFromHook","smallImageFromHook","activeImage","isLightboxOpen","setIsLightboxOpen","openLightbox","renderImageError","defaultAlt","sourceProps","downloadButton","originalHeight","BASE_URL","LinkedAuthor","includeImage","Byline","contributors","isSecondToLast","iconMap","shouldRenderLinks","ArticleBlocks","blocks","ChartPreview","chartSlug","LinkedA","SpanElements","chartLink","Footnote","footnotes","footnote","onEvent","ArticleBlock","interactiveDebounce","onUntrigger","SpanCalloutElement","SpanElement","handleGuidedChartLinkClick","hasHydrated","cachedGetVariableMetadata","cachedGetGrapherConfigByUuid","configFileName","grapherConfigUuid","getMultiDimConfigBySlug","useBaseGrapherConfig","useMultiDimConfig","useMultiDimAnalytics","oldSettingsRef","setHasBeenVisible","newView","useResolvedSettings","DimensionItem","Text","DimensionDropdown","groupLabel","groupChoices","Collection","MultiDimDropdowns","availableSettings","resolvedSettings","collapsedCount","setIsExpanded","dimensionsArray","needsToggle","MultiDimEmbedSettingsPanel","dropdownsRef","setCollapsedCount","calculateCollapsedCount","dropdownsContainer","dropdowns","totalWidthAllDropdowns","dropdownWidth","newCollapsedCount","fittingDropdowns","availableWidthWithToggle","toggleButtonWidth","dropdown","totalWidthWithThisDropdown","MultiDim","localGrapherConfig","grapherDataLoader","baseGrapherConfig","hasControls","setSettings","guidedQueryParams","setGuidedQueryParams","handleBaseSettingsChange","handleSettingsChange","handleGuidedChartSettingsChange","guidedChartContext","hasRegistered","registerMultiDim","onSettingsChange","ignoreFetchedData","isGuidedChartUpdate","viewGrapherConfig","MultiDimEmbed","chartConfig","DEFAULT_CHART_HEIGHT","CHART_WITH_EXTERNAL_CONTROLS_HEIGHT","fullWidthOnMobile","archiveIframeRef","registerChartElement","configType","isMultiDim","shouldApplyHideControls","resolvedUrlParsed","resolvedQueryParams","archivedPageVersion","controlsAreVisible","isExplorerWithControls","isMultiDimWithControls","hasExternalControls","archivedChartVersion","shouldRenderArchiveEmbed","registerArchiveChart","unregister","iframeRef","defaultQueryParams","chartConfigType","defaultHeight","explorer","ChartStory","setCurrentIndex","currentSlide","showDetails","technical","maxSlide","narrative","generateTestimonials","Testimonials","testimonials","Donors","donorsByLetter","donor","testimonialGenerator","letter","isOnlyEmptySpans","isNewline","isEmptySimpleText","Paragraph","layouts","\"align\"","\"chart\"","\"cta\"","\"divider\"","\"explorer\"","\"heading\"","\"html\"","\"list\"","\"toc\"","\"video\"","\"people\"","\"donors\"","\"image\"","\"socials\"","getGridColumns","R.prop","blockType","getLayout","PullQuote","ChartThumbnail","ChartRow","onGuidedChartLinkClick","thumbnail","thumbnailLink","ChartRows","isInGuidedChart","PullChart","alignClass","AriaAnnouncerContext","useAriaAnnouncer","R.identity","GuidedChart","interactiveImages","chartRef","multiDimData","setMultiDimData","announce","archiveChartRegistrationRef","applyGuidedChartLinkToArchive","nextSrc","handledArchiveIframe","didUpdateChart","chartElement","isSticky","isFullyVisible","registrationData","ARCHIVED_THUMBNAIL_FILENAME","HybridLinkTarget","HybridGdocLink","HybridChartLink","HybridExternalLink","HybridLinkList","Recirc","SubscribeBanner","List","NumberedList","SDGGrid","tile","SDGTile","sdgIconUrl","sdgNumberPadded","WebkitMask","People","SDGTableOfContents","toc","supertitle","MissingData","AdditionalChartsLink","AdditionalCharts","ProminentLink","documentErrorMessage","linkedChartErrorMessage","ExpandableParagraph","isClosed","setIsClosed","propsWithoutStyles","toggleExpanded","currentContainer","currentButton","containerTop","buttonTop","scrollY","CLOSED_HEIGHT","hasTopicNewsletterCard","topicArea","TopicNewsletterCard","TopicPageRelatedTopic","topicText","topicUrl","TopicPageIntro","relatedTopic","k$1","L$1","D$1","ee","te","ne","oe","se","ie","le","ae","ue","ce","de","he","fe","ve","NarrativeChart","viewMetadata","metadataStringified","parentQueryString","archivedParentUrl","latestArchivedParent","linkTarget","shouldRenderImage","imageClassName","KEY_INSIGHTS_CLASS_NAME","KEY_INSIGHTS_INSIGHT_PARAM","KEY_INSIGHTS_THUMBS_CLASS_NAME","KEY_INSIGHTS_THUMB_CLASS_NAME","KEY_INSIGHTS_SLIDES_CLASS_NAME","KEY_INSIGHTS_SLIDE_CLASS_NAME","KEY_INSIGHTS_SLIDE_CONTENT_CLASS_NAME","Thumb","KeyInsightsThumbs","titles","selectedId","setSelectedId","setSlides","setSlug","apiRef","thumbsRef","keyInsightsNode","tempSlides","previousElementSibling","insightParam","selectedSlideIdx","getItemById","scrollToItem","windowUrl","ScrollMenu","LeftArrow","RightArrow","itemId","useLeftArrowVisible","scrollPrev","VisibilityContext","useRightArrowVisible","scrollNext","KeyInsights","insights","renderAssetForInsight","asset","Wide","parseErrors","ResearchAndWritingLink","shouldHideThumbnail","shouldHideThumbnailSm","shouldHideSubtitle","shouldHideAuthors","shouldHideDate","parseLatestWorkToResearchAndWritingLink","latestWork","ResearchAndWriting","hideAuthors","hideDate","latest","primarySecondaryUrls","latestWorkLinks","defaultHeading","customHeadingCaseCorrected","seeAllResearchHref","WRITING","latestArticles","shouldPrimarySecondaryOverflow","isFeaturedVariant","sortRelatedCharts","relatedCharts","sortedSlugs","chartBySlug","topCharts","Top","AllCharts","defaultHeadingFragment","topSlugs","firstTag","firstTagDataCatalogQueryString","sortedRelatedCharts","Video","shouldLoop","shouldAutoplay","poster","posterSrc","videoSrc","controls","autoPlay","StaticViz","staticViz","setIsDownloadModalOpen","desktop","mobile","StaticVizDownloadModal","dialogTitleId","downloadImage","makeImageSrc","imageOptions","hasMobile","createDimensionsLabel","previewImage","dataOptions","onClickAnalytics","sourceUrl","handleOverlayClick","grapherLink","hasTwoImages","fallbackWidth","TableCell","isFirstColumnHeader","isFirstRowHeader","columnIndex","actualRowIndex","ExplorerTile","ExplorerTiles","explorers","KeyIndicator","datapageUrl","textBlock","tabIconMap","KeyIndicatorCollection","disclosureIds","homepageMetadata","chartCount","DisclosureGroup","defaultExpandedKeys","blockIndex","disclosureId","AccordionItem","Disclosure","AriaButton","KeyIndicatorHeader","isContentVisible","KeyIndicatorLink","DisclosurePanel","activeTabType","Pill","PillRow","pills","pill","NewsletterIcon","MAILCHIMP_NEWSLETTER_SIGNUP_FORM_ACTION","MAILCHIMP_NEWSLETTER_GROUP_ID","MAILCHIMP_SIGNUP_HONEYPOT_NAME","makeMailchimpNewsletterGroupInputName","groupValue","NEWSLETTER_HONEYPOT_FIELD","useNewsletterSpamProtection","setCaptchaToken","NewsletterSpamProtection","onToken","onTimeout","onUnsupported","scriptOptions","GENERIC_ERROR_MESSAGE","apiGet","apiPost","throwIfApiError","getErrorMessage","NewsletterOption","cadence","STORAGE_KEY","storeSubscribePrefill","prefill","takeSubscribePrefill","OWID_BRIEF_TITLE","OWID_BRIEF_CADENCE","OWID_BRIEF_DESCRIPTION","FOLLOW_TOPICS_TITLE","FOLLOW_TOPICS_CADENCE","FOLLOW_TOPICS_DESCRIPTION","PrivacyNotice","NewsletterSignupForm","NewsletterSignupFormInner","subscribeToOwidBrief","setSubscribeToOwidBrief","followTopics","setFollowTopics","captchaRef","resetCaptcha","spamProtectionFields","setEmail","hasEditedEmail","setHasEditedEmail","mutationFn","isSubmittable","showCaptcha","trimmedEmail","isEmailNotificationsEnabled","EmailNotifications","NewsletterSignup","showSubheading","NewsletterSubscriptionHeader","MailchimpSubscriptionForm","NewsletterSubscription","subscribeText","idDataInsights","idBiweekly","frequencies","setFrequencies","DATA_INSIGHTS","BIWEEKLY","updateFrequencies","AnnouncementsIcon","maskUnits","OwidSocials","includeRss","NewsletterSubscriptionContext","\"Header\"","\"Floating\"","\"HomepageDataInsights\"","\"FloatingDataInsights\"","\"Latest\"","\"SubscribePage\"","\"DataInsightsIndex\"","buildLatestPagePath","decodeLatestType","latestTypeLabelPlural","findThumbnailImageBlock","LATEST_FEED_VIEWS","DEFAULT_LATEST_FEED_VIEW","hasViewToggle","LATEST_TOPIC_AREAS_BY_POPULARITY","sortTopicAreasByPopularity","areas","LATEST_HIT_GRID_CLASSES","LATEST_NEWSLETTER_SIGNUP_CLASSES","LATEST_FACETS_CONTAINER_CLASSES","LATEST_FILTERS_DIVIDER_CLASSES","announcementContentTitleId","makeAttachments","FeaturedWorkTile","thumbnailSize","linkedDocumentFeaturedImage","thumbnailFilename","useIsOverflowing","isOverflowing","setIsOverflowing","overflowing","HomepageAnnouncement","announcementRef","publishedAtDayJs","publishedAtFormatted","isSame","fromNow","kickerLabel","HomepageAnnouncements","announcements","DonationCta","HomepageIntro","featuredWork","tiles","w2","w3","w4","SearchContext","useSearchContext","useSelectedTopic","useSelectedRegionNames","useTagGraphTopics","getAllSearchableTopics","useSearchAnalytics","lastLoggedStateRef","useInfiniteSearchOffset","allPages","lastPage","totalResults","isClosestMatches","useInfiniteSearch","nbPages","isSearchIndexQueryKey","getServerSnapshotForSearchError","useHasSearchError","useTopicTagGraph","autocompleteId","generateAutocompleteId","getAttributeValueByPath","getItemsCount","_Object$keys","userAgents","createClickedEvent","_ref$items","isModernInsightsClient","_split$map2","major","minor","_excluded","_excluded2","_objectWithoutProperties","_objectSpread","_defineProperty$26","chunkSize","mapToInsightsParamsApi","createSearchInsightsApi","canSendHeaders","searchInsights","sendToInsights","_items$0$__autocomple","payloads","authenticatedUserToken","userToken","createViewedEvents","itemsByIndexName","isAlgoliaInsightsHit","_defineProperty$25","VIEW_EVENT_DELAY","ALGOLIA_INSIGHTS_VERSION","ALGOLIA_INSIGHTS_SRC","sendViewedObjectIDs","onItemsChange","createAlgoliaInsightsPlugin","_getOptions","providedInsightsClient","insightsInitParams","onSelectEvent","onActiveEvent","__autocomplete_clickAnalytics","insightsClient","loadInsights","previousItems","debouncedOnStateChange","onActive","setInsightsContext","normalizeUserToken","_ref6","_ref7","getAlgoliaSources","_context$algoliaInsig","algoliaSourceBase","_ref8","insightsEvents","_ref9","createInternalCancelablePromise","createCallback","cancelable","onResult","_hasWaitPromiseResolved","_waitPromise","createCancelablePromiseList","cancelablePromise","createConcurrentSafePromise","basePromiseId","latestResolvedId","latestResolvedValue","currentPromiseId","getNextActiveItemId","itemCount","moveAmount","baseIndex","defaultActiveItemId","numericIndex","_defineProperty$24","getNormalizedSources","seenSourceIds","getSources","maybeSource","defaultSource","normalizedSource","_n","getPluginSubmitPromise","waitUntilComplete","_plugin$__autocomplet","pendingRequests","getCollectionFromActiveItemId","collectionIndex","collections","collectionsCount","getRelativeActiveItemId","isOffsetFound","previousItemsOffset","currentCollection","getActiveItem","getAutocompleteElementId","autocompleteInstanceId","elementId","isOrContainsNode","isSamsung","mapToAlgoliaResponse","rawResults","facetHit","getNativeEvent","_defineProperty$23","createStore","onStoreStateChange","_defineProperty$22","getAutocompleteSetters","baseItemId","_defineProperty$21","_props$onStateChange","_props$onSubmit","_props$onReset","nested","pluginSubscribers","itemUrl","_defineProperty$20","reshape","originalSourcesBySourceId","sourcesBySourceId","_defineProperty$19","isDescription","isRequesterDescription","preResolve","itemsOrDescription","contextParameters","searchClient","execute","requesterId","_container$items","maybeDescription","responses","postResolve","_defineProperty$18","lastStalledId","runConcurrentSafePromise","_ref$nextState","refresh","setters","setCollections","setQuery","setActiveItemId","setStatus","_request","__automaticInsights","isSearchResponseWithAutomaticInsightsFlag","isPanelOpen","highlightedItem","itemInputValue","_defineProperty$17","triggerScrollIntoView","nodeItem","triggerOnActive","waitForSubmit","_excluded3","_excluded4","_excluded5","_excluded6","_defineProperty$16","getPropGetters","inputElement","providedProps","formElement","panelElement","onMouseDownOrTouchStart","contextNode","handleSubmit","_providedProps$inputE","_providedProps$inputE2","_ref3$maxLength","activeItem","shouldFallbackKeyHint","enterKeyHint","_item","_source","_defineProperty$15","getMetadata","optionsKey","extraOptions","injectMetadata","_environment$navigato","metadataContainer","headRef","getCompletion","_defineProperty$14","stateReducer","_nextState","_defineProperty$13","createAutocomplete","subscribers","propGetters","_state$context","_state$context$algoli","isAlgoliaInsightsPluginEnabled","subscribePlugins","insightsParams","htm_module_default","ClearIcon","getHTMLElement","mergeClassNames","accValue","mergeDeep","_defineProperty$12","pickBy","TOUCH_EVENTS_ALIASES","setStyle","eventProxy","_this$_listeners","useCapture","nameLower","getNormalizedName","setProperties","setPropertiesWithoutEvents","getCreateDomElement","_ref$children","_defineProperty$11","autocompleteScopeApi","getInputProps","getInputPropsCore","isDetached","LoadingIcon","pauseAnimations","SearchIcon","_defineProperty$10","createAutocompleteDom","_ref$placeholder","setIsModalOpen","translations","createDomElement","rootProps","detachedContainer","detachedOverlay","submitButton","clearButton","loadingIndicator","inputWrapperPrefix","inputWrapperSuffix","inputWrapper","detachedSearchButtonQuery","detachedSearchButtonPlaceholder","detachedSearchButtonIcon","detachedSearchButton","detachedCancelButton","detachedFormContainer","createEffectWrapper","runEffect","effectCleanup","currentCleanups","currentEffects","createReactiveWrapper","reactives","reactive","HIGHLIGHT_PRE_TAG","HIGHLIGHT_POST_TAG","createAttributeSet","lastPart","parseAttribute","preTagParts","postTagParts","parseAlgoliaHitHighlight","htmlEscapes","hasLetterOrNumber","isPartHighlighted","isNextHighlighted","isPreviousHighlighted","_defineProperty$9","reverseHighlightedParts","parseAlgoliaHitReverseHighlight","parseAlgoliaHitSnippet","parseAlgoliaHitReverseSnippet","_defineProperty$8","createRequester","fetcher","fetcherParams","_fetcherParams$reques","requesterParams","requestParams","getAppIdAndApiKey","APP_ID","API_KEY","_defineProperty$7","fetchAlgoliaResults","_ref$userAgents","coreUserAgents","_getAppIdAndApiKey","searchParameters","resultIndex","_ref2$tagName","createReverseHighlightComponent","ReverseHighlight","createReverseSnippetComponent","ReverseSnippet","createSnippetComponent","_defineProperty$6","defaultClassNames","defaultRender","defaultRenderer","preactCreateElement","PreactFragment","getDefaultOptions","getEnvironmentProps","getFormProps","getItemProps","getLabelProps","getListProps","getPanelProps","getRootProps","panelContainer","panelPlacement","renderNoResults","renderer","detachedMediaQuery","core","defaultedRenderer","defaultComponents","getPanelPlacementStyle","formRect","_defineProperty$5","renderSearchBox","toggleAnimation","svgElement","renderPanel","sourceIndex","_defineProperty$4","instancesCount","_createEffectWrapper","cleanupEffects","runEffects","_createReactiveWrappe","runReactives","hasNoResultsSourceTemplateRef","optionsRef","onStateChangeRef","_onStateChangeRef$cur","_props$value$core$onS","_props$value$core","hasItems","hasNoResultsTemplate","lastStateRef","htm","setPanelPosition","scheduleRender","environmentProps","panelContainerElement","debouncedRender","scrollablePanel","previousIsDetached","toggleModalClassname","isModalDetachedMql","hasModernEventListener","updatedOptions","_props$value$renderer","_defineProperty$3","getAlgoliaResults","_defineProperty$2","addHighlightedAttribute","LOCAL_STORAGE_KEY","LOCAL_STORAGE_KEY_TEST","defaultTranslations","isLocalStorageSupported","getLocalStorage","createLocalStorage","createStorageApi","getTemplates","onTapAhead","_defineProperty$1","getDefaultSubscribe","recentItem","createRecentSearchesPlugin","transformSource","lastItemsRef","createLocalStorageRecentSearchesPlugin","defaultSearch","buildSynonymMap","otherTerms","termLower","otherTermsLower","alternatives","variantNames","alternative","alternativeLower","countryNameLower","SearchFilterPill","nameLabel","createDebouncedPromise","settlePending","resolveLatest","canceledValue","AUTOCOMPLETE_CONTAINER_ID","DETACHED_MEDIA_QUERY","AUTOCOMPLETE_DEBOUNCE_MS","STALL_THRESHOLD_MS","siteAnalytics","buildRecentSearchesPlugin","getItemUrl","prependSubdirectoryToAlgoliaItemUrl","__autocomplete_indexName","otherwise","FeaturedSearchesSource","sourceId","getItems","templates","algoliaItemTemplate","indexLabel","indexIcon","makeAlgoliaOnSelect","searchSource","activeItemId","algoliaGetItemUrl","ALGOLIA_PAGES_ITEM_PARAMS","attributesToHighlight","ALGOLIA_CHARTS_ITEM_PARAMS","createAlgoliaPagesSource","distinct","createAlgoliaChartsSource","createFiltersSource","createProfileSource","optionalFilters","onActivate","panelClassName","panelRootRef","rootRef","recentSearchesPlugin","debouncedResolveSources","setSearch","userCountryNameRef","openOnFocus","stallThreshold","onStateChange","shouldPanelOpen","testid","inputId","checkValidity","isFormValid","removeAttribute","onDocMouseDown","isInsideContainer","isInsidePanel","savedScrollY","HomepageSearch","topicCount","explorerCount","articleCount","DataInsightDateline","highlightToday","highlightClassName","formattedDate","toDate","LatestCarousel","seeAllHref","seeAllText","tall","scrollerRef","selectedIndex","setSelectedIndex","updateSelectedIndex","scroller","cards","getVisibleCards","maxScroll","findNearestCardIndex","canScrollPrev","canScrollNext","scrollToCard","card","offsetLeft","CarouselCard","isSnapped","HTMLElement","nearest","firstImageBlock","otherBlocks","dataInsightsToCarouselItems","dataInsight","announcementsToCarouselItems","LatestDataInsightsBlock","latestDataInsights","typeToIcon","facebook","instagram","linkedin","youtube","threads","mastodon","bluesky","SocialLink","Socials","Person","person","socials","BESPOKE_COMPONENT_REGISTRY","isBespokeConfigError","mountBespokeComponentInShadow","scriptUrl","dataUrl","attachShadow","replaceChildren","__vitePreload","mountContainer","resolveBespokeComponentUrls","dataBase","dataBaseUrl","resolveUrl","scriptBaseUrl","BespokeComponent","disposeRef","setIsLoading","loadError","setLoadError","intersectionRef","bundle","fallbackImage","fallbackImageFilename","BespokeError","DataCatalogButton","buttonText","firstTagName","dataCatalogUrl","ResourcePanelIcon","ResourcePanel","Cta","asSpan","SearchDataInsightsResultsSkeleton","SearchDataInsightHitSkeleton","SearchDataInsightHit","MAX_DATA_INSIGHTS_RESULTS","FeaturedDataInsights","ExploreDataSection","titleCaseCorrected","DEFAULT_TITLE","SECONDARY_CARDS","LTPTableOfContents","resolvedTitle","resourceSectionTitle","resourceCards","cardTitle","DataCallout","DataCalloutGroup","FALLBACK_DEFAULT_COUNTRY_NAMES","resolveCountriesToItems","searchKeys","resolveDefaultCountries","defaultCountryNames","allCountries","allByCode","CountryProfileSelector","setSearchTerm","defaultCountries","fuzzyCountrySearch","filteredCountries","highlightIndexes","profileBaseUrl","CountryProfileLink","NoResults","highlightMatch","ArticleBlockInternal","rawBlock","sideBySideBlock","leftBlock","rightBlock","leftIsChart","rightIsChart","leftLinkedChart","rightLinkedChart","setExperimentState","isWarning","layoutClassName","areControlsHidden","layoutSubtype","_block","people","firstBlock","separateHeading","controlsHidden","leftIsMdimWithControls","rightIsMdimWithControls","shouldApplyCompensation","alignment","isCitationAUrl","shouldShowCitationInFooter","blockquoteProps","cite","injectAutomaticSubscribeBanner","lastHeadingIndex","SubscribeBannerBlock","endsIntro","getIntroEndIndex","firstTextIndex","nextSectionIndex","automaticSubscribeBanner","afterIntro","blocksToRender","afterIntroIndex","articleBlock","LIST_ITEM_START","HEADING_START","CODE_FENCE_START","parseMarkdownBlocks","inCodeFence","countDescriptionKeyBullets","LEFT_COLUMN_TALLER_BULLET_COUNT","isDescriptionColumnShorter","joinMarkdownBlocks","PREVIEW_CHARACTER_BUDGET","MARKDOWN_LINK","visibleLength","findPreviewEnd","previewEnd","headingIndexes","listItemCount","budgetLeft","splitBlocksAt","splitDescriptionKey","groupFaqsByQuestion","questions","IndicatorMetadataSections","datapageData","faqEntries","datapage","citationDatapage","faqQuestions","descriptionKeyPreview","descriptionKeyRest","IndicatorMetadataBox","owners","sourceString","KeyDataTable","AboutThisData","hasFaq","hasDescriptionKey","id_","hasKeyInfo","isNewsletterCardOnLeft","DataPageResearchAndWriting","imageUrl","MetadataSection","downloadSection","OWID_DATAPAGE_CONTENT_ROOT_ID","DataPageDownloadSection","reactiveQueryStr","DataPageV2Content","useNewDatapageDesign","mergedGrapherConfig","topicTagsLinks","relatedChartsByCoview","allCharts","topicTag","Credits","contributorRoles","acknowledgements","Footnotes","definitionsArray","BreadcrumbSeparator","Breadcrumbs","OwidArticleHeader","isDeprecated","coverStyle","breadcrumbColor","versionsFileUrl","dateText","dateline","OwidTopicPageHeader","OwidLinearTopicPageHeader","OwidGdocHeader","getTotalOffset","STICKY_NAV_HEIGHT","HEADING_SCROLL_MARGIN","StickyNav","ulRef","currentHeadingIndex","headingPositions","handleResize","setHeadingPositions","handleScroll","setCurrentHeading","filterValidLinks","validLinks","previousHeadingYPosition","CitationSection","OxfordAndGcdlLogos","SiteLogos","homeUrl","fetchVersions","useVersionsQuery","useArchiveVersions","versionsObj","TIME_FORMAT","ArchiveText","tooltipContent","ArchiveDate","dayjsDate","ArchiveDataNavigation","ArchiveHeaderLogoBar","ArchiveDataNavigationBar","liveUrl","previousVersion","propsPreviousVersion","propsNextVersion","hasButtons","pageArchivalDate","currentVersionIdx","ArchiveWritingNavigation","ArchiveWritingNavigationBar","isDrawerOpen","setIsDrawerOpen","hasRequestedVersions","setHasRequestedVersions","liveVersionHref","handleDrawerOpenChange","VersionsDrawer","currentArchivalDate","formatVersionDateTime","versionDate","getCurrentVersionEntry","VersionItem","isLive","VersionsTimeline","formattedDisplay","isFirstVersion","currentVersionEntry","versionsForTimeline","showTimeline","PastVersionsSection","isOnArchivePage","archiveNavigation","LicenseSection","useClearHashOnReturnToTop","prevActiveIdRef","activeId","ACTIVE_TOC_ROW_SCROLL_MARGIN","useKeepActiveTocRowInView","rowRect","rowTop","rowBottom","targetScrollTop","maxScrollTop","nextScrollTop","ACTIVATION_OFFSET_PX","useTocScrollSpy","setActiveId","computeActiveId","onScrollOrResize","WIDE_COL_SELECTOR","LEFT_ALIGNED_SELECTOR","FULL_BLEED_SELECTOR","WIDE_BLOCK_SELECTORS","COEXIST_MIN_WIDTH","useWideBlockInView","inView","setInView","canWideColCoexist","fullBleed","wideCol","records","SIDEBAR_TOC_CONTENT_ID","SCROLL_IDLE_MS","TocNavigateContext","SidebarTableOfContents","spyIds","sidebarContentRef","isWideBlockInView","isSidebarExpanded","setIsSidebarExpanded","isDismissedRef","isMobileDrawerOpen","setIsMobileDrawerOpen","isDesktop","BackToTop","TocSections","onNavigate","SectionGroup","SeeAllChartsCta","subheading","SubheadingRow","citationDescriptionsByArticleType","GdocPost","manualBreadcrumbs","postType","citationDescription","hasSidebarToc","sidebarHeadings","headingVariant","shouldHideSubscribeBanner","stickyNavLinks","DeprecationNotice","LatestBreadcrumb","LatestCarouselSection","CopyLinkButton","RelatedTopicsList","AvatarByline","STANDALONE_POST_GRID_CLASSES","StandalonePostBody","spansToPlainText","resolveCtaUrl","rawUrl","ensureTrailingPunctuation","buildSocialText","paragraphs","ctaText","ctaUrl","authorsNote","CopySocialButton","setLabel","buildAuthorsNote","DataInsightPage","AllTopicsSection","flattenedAreas","isTopic","AuthorHeader","bio","AuthorWork","shouldOverrideTitle","AboutNav","activeLinkRef","activeLink","SOCIAL_LATEST_TYPES","AnnouncementPage","latestAnnouncements","shouldShowCopySocialButton","otherAnnouncements","CITATION_DESCRIPTION","instantiatedEntity","isCountry","BespokeMetadataBox","bespokeMetadata","hero","splitFeaturedVizBody","heroEmbedOptions","urlSync","hideMetadataModal","shouldShowCitation","FeaturedVizHeader","getMetadataBoxColumns","heroSize","Widest","heroIndex","AdminLinks","OwidGdoc","SITE_TOOLS_ROOT_CLASS","SiteTools","Floating","FeedbackPrompt","runDetailsOnDemand","getDodTrackNote","allGrapherSlugsAndQueryStrings","initialDynamicCollection","graphers","pollInterval","slugsAndQueryStrings","originalSlugAndUrl","withoutIndex","pollForGraphers","setupReaction","renderInterior","hydrateDynamicCollectionPage","urlParams","DynamicCollection","DEFAULT_PAGE_SIZE","FRESH_WINDOW_MS","isFreshlyPublished","isLikelyBakedQueryOptions","getProbeHref","useIsLikelyBaked","probeHref","needsProbe","useAreFreshProbesSettled","useLatestAnalytics","useInfiniteLatestPages","pageSize","useLatestStickyFiltersArm","getStickyLayout","stickyTop","STICKY_FILTERS_TOP_PROPERTY","layoutTop","STICKY_FILTERS_HEIGHT_PROPERTY","SCROLL_DIRECTION_THRESHOLD_PX","useRevealOnScrollUp","isRevealed","setIsRevealed","stickyRef","publishHeight","lastScrollY","LATEST_TOPIC_FACETS_LABEL","LATEST_TOPIC_FACETS_LABEL_ID","TopicPill","_itemId","ToggleButton","scrollPillIntoView","scrollKeyboardFocusedPillIntoView","isFirstVisible","ContentTypeListBoxItem","isLastVisible","LatestTopicFacets","onTopicsChange","selectedType","onLatestTypeChange","disabledTypes","disabledTopics","ToggleButtonGroup","LatestPageHeader","VIEW_LABELS","LatestViewToggle","onViewChange","RadioGroup","Label","RadioField","allAreas","LATEST_TYPE_ICONS","LatestHitMetadata","LatestContext","useLatestContext","LatestArticleHit","isLikelyBaked","handleResultClick","LatestDataInsightExpanded","firstImage","LatestDataInsightHit","CondensedDataInsightHit","MAX_LEAD_TEXT_BLOCKS","splitAfterNthTextBlock","textCount","leadBlocks","trailingBlocks","ExpandableText","alwaysExpanded","onReadMore","hasMore","AnnouncementContent","authorByline","LatestAnnouncementHit","LatestDataUpdateHit","showCopyLink","announcementHref","Card","LatestHit","isTypeFiltered","NewsletterSignupBlock","LatestNewsletterSlot","Latest","LatestHitSkeleton","LatestSearchSkeleton","SearchHorizontalDivider","hasButton","showLoadingText","SearchNoResults","scrollToTopOfPinnedElement","LatestSearch","tagGraphAreas","setView","shouldShowViewToggle","stickyFiltersArm","facetsContainerRef","areFiltersRevealed","revealOnScrollUp","newTopics","newType","clearAllFilters","fetchNextPage","arePagesLoading","areProbesSettled","hashSlug","didScrollToHash","displayedLatestType","LatestSearchWrapper","ExplorerIndexPageCard","setHasError","ExplorerIndex","__OWID_EXPLORER_INDEX_PAGE_PROPS","ANALYTICS_ACTION","CookiePreference","toggleConsent","CookiePreferences","cookiePreferencesDomSlot","createPortal","TogglePreference","preferenceType","Persist","CookieNotice","accepted","outdated","Reject","CookiePreferencesManager","useReducer","Reset","setCookie","updateGAConsentSettings","analytics_storage","actionType","SearchAutocompleteContext","useSearchAutocomplete","SearchInput","setLocalQuery","setGlobalQuery","onBackspaceEmpty","resetButton","hasUserInteracted","activeIndex","setActiveIndex","showSuggestions","setShowSuggestions","onSelectActiveItem","activeOptionId","blur","SearchActiveFilters","removeCountry","removeTopic","removeFilter","MAX_VISIBLE_FILTERS","SearchAutocompleteItemContents","activeFilters","renderActiveFilters","isCollapsed","visibleFilters","SearchAutocomplete","localQuery","addCountryAndSetQuery","setTopicAndClearQuery","debouncedLocalQuery","setUnmatchedQuery","setSuggestions","registerSelectionHandler","setQueries","handleSelection","unmatchedQueryNoStopWords","alphabetizedCountriesByName","SearchCountrySelector","addCountry","toggleRequireAllCountries","countrySearchQuery","setCountrySearchQuery","listContainerRef","toggleCountry","handleOpenChange","listContainer","filteredCountriesByName","SearchAutocompleteContextProvider","selectionHandlerRef","SearchResetButton","Searchbar","removeLastFilter","lastFilter","SearchTopicsRefinementList","topicType","setTopic","selectableTopics","topicLabel","OPTIONS","SearchResultTypeToggle","setResultType","effectiveResultType","optionsToShow","SearchDataTopic","titleLabel","handleAddTopicClick","handleHitClick","ribbonTag","SearchDataTopicsResults","SearchResultHeader","SearchClosestMatchesNotice","SearchDataResults","isFirstChartLarge","SearchFlatArticleHit","isArticle","totalWords","paragraphWords","maxWords","remainingWords","truncatedWords","getTagLabel","SearchTopicPageHit","flagCode","excerptLong","SearchProfileHit","SearchWritingResultsSkeleton","SearchArticleHitSkeleton","SearchTopicPageHitSkeleton","SearchWritingHit","hasLargeTopic","SingleColumnResults","MultiColumnResults","hasArticles","hitPositions","SearchWritingResults","hasTopicPages","showProfiles","profilesQuery","profileSlots","profilesRequestDone","articlesQuery","noArticles","articleSlots","topicFirstPageSize","dependenciesLoaded","topicsQuery","sectionHasExactHitsElsewhere","suppressArticlesRescue","showArticlesClosestMatches","articlePages","visibleArticleHits","articlePage","topicPage","SearchDataInsightsResults","setContainer","SearchTemplatesAll","templateConfig","SearchTemplatesData","SearchStackedArticleHit","SearchWritingTopic","SearchWritingTopicsResultsSkeleton","SearchWritingTopicSkeleton","SearchStackedArticleHitSkeleton","SearchWritingTopicLinkSkeleton","SearchWritingTopicsResults","SearchTemplatesWriting","Search","eligibleAreas","eligibleTopics","hasSearchError","searchbarKey","autoFocusSearchbarKey","setAutoFocusSearchbarKey","SearchWrapper","DebugProvider","AriaAnnouncerProvider","setAnnouncement","AriaAnnouncer","TopicTags","tagToSlugMap","MultiDimSettingsPanel","isIframe","useTitleFragments","DataPageContent","relatedResearchCandidates","initialViewData","initialViewDimensions","managerRef","grapherFigureRef","varDatapageData","setVarDatapageData","isLoadingView","setIsLoadingView","inputTableFetcher","titleFragments","displayedSettings","displayedSearchParams","fallbackQueryString","updateGrapher","variableMetadataPromise","grapherConfigPromise","mergedMetadata","grapherConfigWithBase","loadDataPromise","grapherChangedParams","grapherCurrentTitle","grapherTitle","mdimTitle","hasTopicTags","faqEntriesForView","fragmentId","MultiDimDataPageContent","SiteNavigationTopic","SiteNavigationTopics","activeArea","setActiveArea","numTopicColumns","SiteAbout","SiteResources","SiteSearchNavigation","SiteMobileArea","SiteMobileMenu","isFeedbackOpen","setIsFeedbackOpen","scrollMenuIntoView","menuBottomOffset","SiteNavigationToggle","withCaret","HAS_DONATION_FLAG","SiteNavigation","hideDonationFlag","isOnHomepage","setActiveMenu","isActiveMobileMenu","Topics","Resources","About","closeOverlay","setSearchAsActiveMenu","autocompleteContainer","toggleMenu","marginRight","Subscribe","SiteHeaderNavigation","archiveInfo","contentType","areAllTopicsSelected","topicTagsForStorage","topicTagsFromStorage","getPreferencesValidationErrors","hasTopicDependentContentType","contentTypes","topicTagsError","contentTypesError","CONTENT_TYPE_CARDS","TogglePill","ContentTypeCard","EmailNotificationsPreferenceFields","onToggleTopicTag","onToggleContentType","onSetFrequency","firstAlertRef","allTopicsSelected","frequencyOption","scrollAlertIntoView","alert","DEFAULT_CONTENT_TYPES","toggleInArray","useNotificationPreferences","setTopicTags","initialPreferences","setContentTypes","setFrequency","setValidationErrors","EmailNotificationsSubscribeForm","onSubscribed","alertRef","showError","topicAreas","notifications","resetValidation","forStorage","fieldsProps","SUBSCRIBE_PAGE_CONTENT_GRID_CLASSES","SubscribePageHero","SubscribePageConfirmation","preventScroll","SubscribeFlow","SubscribeFormScreen","subscription","SubscribedText","SubscribePage","EmailNotificationsPreferencesForm","TokenScreen","EnterEmailScreen","PreferencesScreen","LinkSentScreen","ErrorAlert","useRequestLinkMutation","requestLink","ExpiredLinkScreen","InvalidLinkScreen","fetchPreferences","emailNotificationsStatus","subscribedToTopicNotifications","subscribedToOwidBrief","owidBriefOptIn","PreferencesEditor","initialSubscribedToTopicNotifications","initialSubscribedToOwidBrief","onDone","setSubscribedToTopicNotifications","setSubscribedToOwidBrief","handleSave","commonRequest","subscribeToTopicNotifications","handleUnsubscribe","byteToHex","unsafeStringify","rnds8","rng","_state","v7","v7Bytes","rnds","updateV7State","msecs","seq","USER_SURVEY_FIRST_VISIT_TIMESTAMP_STORAGE_KEY","USER_SURVEY_VISIT_COUNT_STORAGE_KEY","USER_SURVEY_ROLE_V1_RESPONSE_STORAGE_KEY","isUserSurveyEligible","hasAnalyticsConsent","visitCount","firstVisitTimestampMs","nowTimestampMs","getUserSurveyWidgetEligibility","getUserSurveyResponse","incrementAndGetUserSurveyVisitCount","getOrSetUserSurveyFirstVisitTimestampMs","markUserSurveyAnswered","setUserSurveyResponse","markUserSurveyDismissed","parseUserSurveyResponse","getFromLocalStorage","setInLocalStorage","getUserSurveyVisitCount","setUserSurveyVisitCount","currentVisitCount","nextVisitCount","getUserSurveyFirstVisitTimestampMs","setUserSurveyFirstVisitTimestampMs","timestampMs","FEEDBACK_EMAIL_API_URL","FEEDBACK_STORAGE_API_URL","USER_SURVEY_NAME","USER_SURVEY_EXPERIMENT_ID","USER_SURVEY_FREE_FORM_INPUT_ID","USER_SURVEY_FOLLOW_UP_INPUT_ID","USER_SURVEY_TITLE_ID","USER_SURVEY_FOLLOW_UP_TITLE_ID","USER_SURVEY_FOLLOW_UP_DESCRIPTION_ID","uuidv7","LONG_LIST_OPTIONS","hasInlineInput","SHORT_LIST_OPTIONS","getAssignedExperimentArm","assignedArm","isValidRoleAnswer","selectedOptionId","otherInput","getFreeFormInput","getSelectedOptionMeta","selectedOptionIndex","getFeedbackEnvironment","sendFeedbackEmail","storeFeedback","feedbackAnswer","roleAnswer","submitFeedback","buildFeedbackMessage","messageLines","logRoleSubmit","submitRoleAnswer","onAnswered","buildListRoleAnswer","UserSurveyDialog","ThankYouStep","setFeedback","submitError","setSubmitError","isSubmitDisabled","ListRoleStep","radioButtonGroup","radioButtonClassName","setSelectedOptionId","setOtherInput","otherInputRef","isSubmitEnabled","Form","FreeFormRoleStep","UserSurvey","surveyState","setSurveyState","handleRoleAnswered","handleDismiss","minimalGrapherConfig","interactiveGrapherConfig","getSlideshowGrapherConfig","interactiveCharts","parseSlideChartUrl","getSlideAspectRatio","SlideLogo","coverSlideLogo","SlideRenderer","renderChart","Cover","ImageRenderer","ChartRenderer","Outline","Statement","TwoCharts","SiteSlideGrapher","withHiddenControls","SiteSlideExplorer","explorerRef","explorerProps","setExplorerProps","SiteSlideChartEmbed","resolvedInfo","configId","_OWID_SLIDESHOW_PROPS","SlideshowPresentation","chartResolutions","currentSlideIndex","internalIndex","setInternalIndex","onSlideChange","isHydrated","setIsHydrated","goToPrev","goToNext","defaultRenderChart","isFullscreen","setIsFullscreen","canFullscreen","fullscreenEnabled","toggleFullscreen","fullscreenElement","exitFullscreen","requestFullscreen","handleKeyDown","useEffectEvent","activeRenderChart","isCoverSlide","AuthorByline","linked","runSearchPage","_OWID_TOPIC_TAG_GRAPH","hydrateSubscribePage","renderEmailNotificationsPreferencesPage","hydrateOldSubscribePage","hydrateSlideshowPage","runLatestPage","hydrateDataPageV2Content","_OWID_DATAPAGEV2_PROPS","_OWID_GRAPHER_CONFIG","_OWID_ARCHIVE_CONTEXT","hydrateExplorerIndex","explorerIndexPageProps","runCookiePreferencesManager","USER_SURVEY_ROOT_ID","runUserSurveyWidget","runSiteNavigation","siteNavigationElem","_OWID_GDOC_PROPS","runSiteTools","siteToolsElem","hydrateOwidGdoc","hydrateMultiDimDataPageContent","configObj","_OWID_MULTI_DIM_PROPS","dataPageV2","multiDimDataPage","grapherPage","explorerPage","explorerIndexPage","gdocsDocument","latestPage","dynamicCollectionPage","searchPage","slideshowPage","subscribePage"],"ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,782,783,794,795,796,803,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,872,873,879,885,898,899,900,901,902,903,904,905,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,930,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1551,1566,1567,1568,1569,1592,1667,1672,1673,1674,1675,1702,1703,1704,1705,1706,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1763,1791,1843,1848,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1923,1924,1925,1927,1928,1929,1930,1946,1993,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2268,2269,2270],"sources":["../../node_modules/core-js/internals/global-this.js","../../node_modules/core-js/internals/fails.js","../../node_modules/core-js/internals/descriptors.js","../../node_modules/core-js/internals/function-bind-native.js","../../node_modules/core-js/internals/function-call.js","../../node_modules/core-js/internals/object-property-is-enumerable.js","../../node_modules/core-js/internals/create-property-descriptor.js","../../node_modules/core-js/internals/function-uncurry-this.js","../../node_modules/core-js/internals/classof-raw.js","../../node_modules/core-js/internals/indexed-object.js","../../node_modules/core-js/internals/is-null-or-undefined.js","../../node_modules/core-js/internals/require-object-coercible.js","../../node_modules/core-js/internals/to-indexed-object.js","../../node_modules/core-js/internals/is-callable.js","../../node_modules/core-js/internals/is-object.js","../../node_modules/core-js/internals/get-built-in.js","../../node_modules/core-js/internals/object-is-prototype-of.js","../../node_modules/core-js/internals/environment-user-agent.js","../../node_modules/core-js/internals/environment-v8-version.js","../../node_modules/core-js/internals/symbol-constructor-detection.js","../../node_modules/core-js/internals/use-symbol-as-uid.js","../../node_modules/core-js/internals/is-symbol.js","../../node_modules/core-js/internals/try-to-string.js","../../node_modules/core-js/internals/a-callable.js","../../node_modules/core-js/internals/get-method.js","../../node_modules/core-js/internals/ordinary-to-primitive.js","../../node_modules/core-js/internals/is-pure.js","../../node_modules/core-js/internals/define-global-property.js","../../node_modules/core-js/internals/shared-store.js","../../node_modules/core-js/internals/shared.js","../../node_modules/core-js/internals/to-object.js","../../node_modules/core-js/internals/has-own-property.js","../../node_modules/core-js/internals/uid.js","../../node_modules/core-js/internals/well-known-symbol.js","../../node_modules/core-js/internals/to-primitive.js","../../node_modules/core-js/internals/to-property-key.js","../../node_modules/core-js/internals/document-create-element.js","../../node_modules/core-js/internals/ie8-dom-define.js","../../node_modules/core-js/internals/object-get-own-property-descriptor.js","../../node_modules/core-js/internals/v8-prototype-define-bug.js","../../node_modules/core-js/internals/an-object.js","../../node_modules/core-js/internals/object-define-property.js","../../node_modules/core-js/internals/create-non-enumerable-property.js","../../node_modules/core-js/internals/function-name.js","../../node_modules/core-js/internals/inspect-source.js","../../node_modules/core-js/internals/weak-map-basic-detection.js","../../node_modules/core-js/internals/shared-key.js","../../node_modules/core-js/internals/hidden-keys.js","../../node_modules/core-js/internals/internal-state.js","../../node_modules/core-js/internals/make-built-in.js","../../node_modules/core-js/internals/define-built-in.js","../../node_modules/core-js/internals/math-trunc.js","../../node_modules/core-js/internals/to-integer-or-infinity.js","../../node_modules/core-js/internals/to-absolute-index.js","../../node_modules/core-js/internals/to-length.js","../../node_modules/core-js/internals/length-of-array-like.js","../../node_modules/core-js/internals/array-includes.js","../../node_modules/core-js/internals/object-keys-internal.js","../../node_modules/core-js/internals/enum-bug-keys.js","../../node_modules/core-js/internals/object-get-own-property-names.js","../../node_modules/core-js/internals/object-get-own-property-symbols.js","../../node_modules/core-js/internals/own-keys.js","../../node_modules/core-js/internals/copy-constructor-properties.js","../../node_modules/core-js/internals/is-forced.js","../../node_modules/core-js/internals/export.js","../../node_modules/core-js/internals/to-string-tag-support.js","../../node_modules/core-js/internals/classof.js","../../node_modules/core-js/internals/to-string.js","../../node_modules/core-js/modules/es.string.at-alternative.js","../../node_modules/core-js/internals/object-keys.js","../../node_modules/core-js/internals/object-define-properties.js","../../node_modules/core-js/internals/html.js","../../node_modules/core-js/internals/object-create.js","../../node_modules/core-js/internals/add-to-unscopables.js","../../node_modules/core-js/modules/es.array.at.js","../../node_modules/core-js/modules/esnext.array.at.js","../../node_modules/core-js/internals/array-buffer-basic-detection.js","../../node_modules/core-js/internals/define-built-in-accessor.js","../../node_modules/core-js/internals/correct-prototype-getter.js","../../node_modules/core-js/internals/object-get-prototype-of.js","../../node_modules/core-js/internals/function-uncurry-this-accessor.js","../../node_modules/core-js/internals/is-possible-prototype.js","../../node_modules/core-js/internals/a-possible-prototype.js","../../node_modules/core-js/internals/object-set-prototype-of.js","../../node_modules/core-js/internals/array-buffer-view-core.js","../../node_modules/core-js/modules/es.typed-array.at.js","../../node_modules/core-js/modules/esnext.typed-array.at.js","../../node_modules/core-js/proposals/relative-indexing-method.js","../../node_modules/core-js/modules/es.object.has-own.js","../../node_modules/core-js/modules/esnext.object.has-own.js","../../node_modules/core-js/proposals/accessible-object-hasownproperty.js","../../node_modules/core-js/internals/function-uncurry-this-clause.js","../../node_modules/core-js/internals/function-bind-context.js","../../node_modules/core-js/internals/array-iteration-from-last.js","../../node_modules/core-js/modules/es.array.find-last.js","../../node_modules/core-js/modules/esnext.array.find-last.js","../../node_modules/core-js/modules/es.array.find-last-index.js","../../node_modules/core-js/modules/esnext.array.find-last-index.js","../../node_modules/core-js/modules/es.typed-array.find-last.js","../../node_modules/core-js/modules/esnext.typed-array.find-last.js","../../node_modules/core-js/modules/es.typed-array.find-last-index.js","../../node_modules/core-js/modules/esnext.typed-array.find-last-index.js","../../node_modules/core-js/proposals/array-find-from-last.js","../../node_modules/core-js/internals/create-property.js","../../node_modules/core-js/modules/es.array.to-reversed.js","../../node_modules/core-js/modules/esnext.array.to-reversed.js","../../node_modules/core-js/internals/array-from-constructor-and-list.js","../../node_modules/core-js/internals/get-built-in-prototype-method.js","../../node_modules/core-js/modules/es.array.to-sorted.js","../../node_modules/core-js/modules/esnext.array.to-sorted.js","../../node_modules/core-js/internals/does-not-exceed-safe-integer.js","../../node_modules/core-js/modules/es.array.to-spliced.js","../../node_modules/core-js/modules/esnext.array.to-spliced.js","../../node_modules/core-js/modules/es.array.with.js","../../node_modules/core-js/modules/esnext.array.with.js","../../node_modules/core-js/modules/es.typed-array.to-reversed.js","../../node_modules/core-js/modules/esnext.typed-array.to-reversed.js","../../node_modules/core-js/modules/es.typed-array.to-sorted.js","../../node_modules/core-js/modules/esnext.typed-array.to-sorted.js","../../node_modules/core-js/internals/is-big-int-array.js","../../node_modules/core-js/internals/to-big-int.js","../../node_modules/core-js/modules/es.typed-array.with.js","../../node_modules/core-js/modules/esnext.typed-array.with.js","../../node_modules/core-js/proposals/change-array-by-copy-stage-4.js","../../node_modules/core-js/internals/iterators.js","../../node_modules/core-js/internals/is-array-iterator-method.js","../../node_modules/core-js/internals/get-iterator-method.js","../../node_modules/core-js/internals/get-iterator.js","../../node_modules/core-js/internals/iterator-close.js","../../node_modules/core-js/internals/iterate.js","../../node_modules/core-js/internals/map-helpers.js","../../node_modules/core-js/modules/es.map.group-by.js","../../node_modules/core-js/modules/esnext.map.group-by.js","../../node_modules/core-js/modules/es.object.group-by.js","../../node_modules/core-js/modules/esnext.object.group-by.js","../../node_modules/core-js/proposals/array-grouping-v2.js","../../node_modules/core-js/internals/set-helpers.js","../../node_modules/core-js/internals/a-set.js","../../node_modules/core-js/internals/iterate-simple.js","../../node_modules/core-js/internals/set-iterate.js","../../node_modules/core-js/internals/set-clone.js","../../node_modules/core-js/internals/set-size.js","../../node_modules/core-js/internals/get-iterator-direct.js","../../node_modules/core-js/internals/get-set-record.js","../../node_modules/core-js/internals/set-difference.js","../../node_modules/core-js/internals/set-method-accept-set-like.js","../../node_modules/core-js/modules/es.set.difference.v2.js","../../node_modules/core-js/modules/esnext.set.difference.v2.js","../../node_modules/core-js/internals/set-intersection.js","../../node_modules/core-js/modules/es.set.intersection.v2.js","../../node_modules/core-js/modules/esnext.set.intersection.v2.js","../../node_modules/core-js/internals/set-is-disjoint-from.js","../../node_modules/core-js/modules/es.set.is-disjoint-from.v2.js","../../node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js","../../node_modules/core-js/internals/set-is-subset-of.js","../../node_modules/core-js/modules/es.set.is-subset-of.v2.js","../../node_modules/core-js/modules/esnext.set.is-subset-of.v2.js","../../node_modules/core-js/internals/set-is-superset-of.js","../../node_modules/core-js/modules/es.set.is-superset-of.v2.js","../../node_modules/core-js/modules/esnext.set.is-superset-of.v2.js","../../node_modules/core-js/internals/set-union.js","../../node_modules/core-js/internals/set-method-get-keys-before-cloning-detection.js","../../node_modules/core-js/modules/es.set.union.v2.js","../../node_modules/core-js/modules/esnext.set.union.v2.js","../../node_modules/core-js/internals/set-symmetric-difference.js","../../node_modules/core-js/modules/es.set.symmetric-difference.v2.js","../../node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js","../../node_modules/core-js/proposals/set-methods-v2.js","../../node_modules/core-js/internals/an-instance.js","../../node_modules/core-js/internals/iterators-core.js","../../node_modules/core-js/modules/es.iterator.constructor.js","../../node_modules/core-js/modules/esnext.iterator.constructor.js","../../node_modules/core-js/internals/not-a-nan.js","../../node_modules/core-js/internals/to-positive-integer.js","../../node_modules/core-js/internals/define-built-ins.js","../../node_modules/core-js/internals/create-iter-result-object.js","../../node_modules/core-js/internals/iterator-close-all.js","../../node_modules/core-js/internals/iterator-create-proxy.js","../../node_modules/core-js/internals/iterator-helper-throws-on-invalid-iterator.js","../../node_modules/core-js/internals/iterator-helper-without-closing-on-early-error.js","../../node_modules/core-js/modules/es.iterator.drop.js","../../node_modules/core-js/modules/esnext.iterator.drop.js","../../node_modules/core-js/modules/es.iterator.every.js","../../node_modules/core-js/modules/esnext.iterator.every.js","../../node_modules/core-js/internals/call-with-safe-iteration-closing.js","../../node_modules/core-js/modules/es.iterator.filter.js","../../node_modules/core-js/modules/esnext.iterator.filter.js","../../node_modules/core-js/modules/es.iterator.find.js","../../node_modules/core-js/modules/esnext.iterator.find.js","../../node_modules/core-js/internals/get-iterator-flattenable.js","../../node_modules/core-js/modules/es.iterator.flat-map.js","../../node_modules/core-js/modules/esnext.iterator.flat-map.js","../../node_modules/core-js/modules/es.iterator.for-each.js","../../node_modules/core-js/modules/esnext.iterator.for-each.js","../../node_modules/core-js/modules/es.iterator.from.js","../../node_modules/core-js/modules/esnext.iterator.from.js","../../node_modules/core-js/modules/es.iterator.map.js","../../node_modules/core-js/modules/esnext.iterator.map.js","../../node_modules/core-js/internals/function-apply.js","../../node_modules/core-js/modules/es.iterator.reduce.js","../../node_modules/core-js/modules/esnext.iterator.reduce.js","../../node_modules/core-js/modules/es.iterator.some.js","../../node_modules/core-js/modules/esnext.iterator.some.js","../../node_modules/core-js/modules/es.iterator.take.js","../../node_modules/core-js/modules/esnext.iterator.take.js","../../node_modules/core-js/modules/es.iterator.to-array.js","../../node_modules/core-js/modules/esnext.iterator.to-array.js","../../node_modules/core-js/proposals/iterator-helpers-stage-3-2.js","../../node_modules/@sentry/core/build/esm/utils/worldwide.js","../../node_modules/@sentry/core/build/esm/utils/version.js","../../node_modules/@sentry/core/build/esm/carrier.js","../../node_modules/@sentry/core/build/esm/utils/debug-logger.js","../../node_modules/@sentry/core/build/esm/utils/stacktrace.js","../../node_modules/@sentry/core/build/esm/instrument/handlers.js","../../node_modules/@sentry/core/build/esm/instrument/globalError.js","../../node_modules/@sentry/core/build/esm/instrument/globalUnhandledRejection.js","../../node_modules/@sentry/core/build/esm/utils/is.js","../../node_modules/@sentry/core/build/esm/utils/object.js","../../node_modules/@sentry/core/build/esm/utils/randomSafeContext.js","../../node_modules/@sentry/core/build/esm/utils/normalizationHints.js","../../node_modules/@sentry/core/build/esm/utils/normalize.js","../../node_modules/@sentry/core/build/esm/utils/string.js","../../node_modules/@sentry/core/build/esm/utils/misc.js","../../node_modules/@sentry/core/build/esm/utils/time.js","../../node_modules/@sentry/core/build/esm/session.js","../../node_modules/@sentry/core/build/esm/utils/merge.js","../../node_modules/@sentry/core/build/esm/utils/propagationContext.js","../../node_modules/@sentry/core/build/esm/scope.js","../../node_modules/@sentry/core/build/esm/defaultScopes.js","../../node_modules/@sentry/core/build/esm/tracing/constants.js","../../node_modules/@sentry/core/build/esm/utils/chain-and-copy-promiselike.js","../../node_modules/@sentry/core/build/esm/asyncContext/stackStrategy.js","../../node_modules/@sentry/core/build/esm/asyncContext/index.js","../../node_modules/@sentry/core/build/esm/attributes.js","../../node_modules/@sentry/core/build/esm/currentScopes.js","../../node_modules/@sentry/conventions/dist/attributes.mjs","../../node_modules/@sentry/core/build/esm/semanticAttributes.js","../../node_modules/@sentry/core/build/esm/types/spanStatus.js","../../node_modules/@sentry/core/build/esm/tracing/spanstatus.js","../../node_modules/@sentry/core/build/esm/utils/weakRef.js","../../node_modules/@sentry/core/build/esm/tracing/utils.js","../../node_modules/@sentry/core/build/esm/utils/baggage.js","../../node_modules/@sentry/core/build/esm/utils/dsn.js","../../node_modules/@sentry/core/build/esm/utils/parseSampleRate.js","../../node_modules/@sentry/core/build/esm/utils/tracing.js","../../node_modules/@sentry/core/build/esm/utils/spanOnScope.js","../../node_modules/@sentry/core/build/esm/utils/spanUtils.js","../../node_modules/@sentry/core/build/esm/tracing/errors.js","../../node_modules/@sentry/core/build/esm/utils/hasSpansEnabled.js","../../node_modules/@sentry/core/build/esm/utils/should-ignore-span.js","../../node_modules/@sentry/core/build/esm/integration.js","../../node_modules/@sentry/core/build/esm/constants.js","../../node_modules/@sentry/core/build/esm/tracing/sentryNonRecordingSpan.js","../../node_modules/@sentry/core/build/esm/tracing/dynamicSamplingContext.js","../../node_modules/@sentry/core/build/esm/utils/scopeData.js","../../node_modules/@sentry/core/build/esm/utils/safeCallback.js","../../node_modules/@sentry/core/build/esm/tracing/spans/beforeSendSpan.js","../../node_modules/@sentry/core/build/esm/tracing/spans/spanJsonToStreamedSpan.js","../../node_modules/@sentry/core/build/esm/tracing/spans/scopeContextAttributes.js","../../node_modules/@sentry/core/build/esm/tracing/spans/captureSpan.js","../../node_modules/@sentry/core/build/esm/tracing/spans/hasSpanStreamingEnabled.js","../../node_modules/@sentry/core/build/esm/utils/timer.js","../../node_modules/@sentry/core/build/esm/utils/envelope.js","../../node_modules/@sentry/core/build/esm/utils/env.js","../../node_modules/@sentry/core/build/esm/utils/node.js","../../node_modules/@sentry/core/build/esm/utils/isBrowser.js","../../node_modules/@sentry/core/build/esm/tracing/spans/envelope.js","../../node_modules/@sentry/core/build/esm/tracing/spans/estimateSize.js","../../node_modules/@sentry/core/build/esm/tracing/spans/spanBuffer.js","../../node_modules/@sentry/core/build/esm/integrations/spanStreaming.js","../../node_modules/@sentry/core/build/esm/utils/errorSpanAttribution.js","../../node_modules/@sentry/core/build/esm/tracing/sampling.js","../../node_modules/@sentry/core/build/esm/tracing/measurement.js","../../node_modules/@sentry/core/build/esm/tracing/segmentSpanCaptureStrategy.js","../../node_modules/@sentry/core/build/esm/tracing/sentrySpan.js","../../node_modules/@sentry/core/build/esm/tracing/trace.js","../../node_modules/@sentry/core/build/esm/tracing/browserSpanApi.js","../../node_modules/@sentry/core/build/esm/tracing/idleSpan.js","../../node_modules/@sentry/core/build/esm/utils/debounce.js","../../node_modules/@sentry/conventions/dist/op.mjs","../../node_modules/@sentry/core/build/esm/tracing/spans/spanNames.js","../../node_modules/@sentry/core/build/esm/envelope.js","../../node_modules/@sentry/core/build/esm/utils/syncpromise.js","../../node_modules/@sentry/core/build/esm/eventProcessors.js","../../node_modules/@sentry/core/build/esm/utils/debug-ids.js","../../node_modules/@sentry/core/build/esm/utils/eventUtils.js","../../node_modules/@sentry/core/build/esm/utils/prepareEvent.js","../../node_modules/@sentry/core/build/esm/exports.js","../../node_modules/@sentry/core/build/esm/api.js","../../node_modules/@sentry/core/build/esm/logs/envelope.js","../../node_modules/@sentry/core/build/esm/logs/internal.js","../../node_modules/@sentry/core/build/esm/metrics/envelope.js","../../node_modules/@sentry/core/build/esm/metrics/internal.js","../../node_modules/@sentry/core/build/esm/tracing/spans/extractGenAiSpans.js","../../node_modules/@sentry/core/build/esm/utils/promisebuffer.js","../../node_modules/@sentry/core/build/esm/utils/ratelimit.js","../../node_modules/@sentry/core/build/esm/transports/base.js","../../node_modules/@sentry/core/build/esm/utils/clientreport.js","../../node_modules/@sentry/core/build/esm/utils/transactionEvent.js","../../node_modules/@sentry/core/build/esm/utils/warnAboutIgnoredTransactionOptions.js","../../node_modules/@sentry/core/build/esm/utils/data-collection/resolveDataCollectionOptions.js","../../node_modules/@sentry/core/build/esm/client.js","../../node_modules/@sentry/core/build/esm/sdk.js","../../node_modules/@sentry/core/build/esm/utils/data-collection/filtering-snippets.js","../../node_modules/@sentry/core/build/esm/utils/data-collection/filterKeyValueData.js","../../node_modules/@sentry/core/build/esm/utils/data-collection/filterQueryParams.js","../../node_modules/@sentry/core/build/esm/utils/data-collection/filterUrlQuery.js","../../node_modules/@sentry/core/build/esm/utils/data-collection/filterCollectedUrl.js","../../node_modules/@sentry/core/build/esm/utils/url.js","../../node_modules/@sentry/core/build/esm/utils/isSentryRequestUrl.js","../../node_modules/@sentry/core/build/esm/utils/ipAddress.js","../../node_modules/@sentry/core/build/esm/utils/sdkMetadata.js","../../node_modules/@sentry/core/build/esm/utils/traceData.js","../../node_modules/@sentry/core/build/esm/utils/tracePropagationTargets.js","../../node_modules/@sentry/core/build/esm/breadcrumbs.js","../../node_modules/@sentry/core/build/esm/integrations/functiontostring.js","../../node_modules/@sentry/core/build/esm/integrations/eventFilters.js","../../node_modules/@sentry/core/build/esm/utils/aggregate-errors.js","../../node_modules/@sentry/core/build/esm/utils/eventbuilder.js","../../node_modules/@sentry/core/build/esm/instrument/console.js","../../node_modules/@sentry/core/build/esm/utils/severity.js","../../node_modules/@sentry/core/build/esm/integrations/dedupe.js","../../node_modules/@sentry/core/build/esm/integrations/console.js","../../node_modules/@sentry/core/build/esm/integrations/conversationId.js","../../node_modules/@sentry/core/build/esm/fetch.js","../../node_modules/@sentry/core/build/esm/utils/supports.js","../../node_modules/@sentry/core/build/esm/instrument/fetch.js","../../node_modules/@sentry/core/build/esm/utils/breadcrumb-log-level.js","../../node_modules/@sentry/core/build/esm/utils/lru.js","../../node_modules/web-vitals/dist/web-vitals.js","../../node_modules/@sentry/browser-utils/build/esm/instrumentation/performanceObserver.js","../../node_modules/@sentry/browser-utils/build/esm/types.js","../../node_modules/@sentry/browser-utils/build/esm/web-vitals/softNavs.js","../../node_modules/@sentry/browser-utils/build/esm/performance/utils.js","../../node_modules/@sentry/browser-utils/build/esm/performance/resourceTiming.js","../../node_modules/@sentry/browser-utils/build/esm/performance/entries.js","../../node_modules/@sentry/browser-utils/build/esm/htmlTreeAsString.js","../../node_modules/@sentry/browser-utils/build/esm/web-vitals/lcp.js","../../node_modules/@sentry/browser-utils/build/esm/web-vitals/utils.js","../../node_modules/@sentry/browser-utils/build/esm/web-vitals/tracking.js","../../node_modules/@sentry/browser-utils/build/esm/web-vitals/inp.js","../../node_modules/@sentry/browser-utils/build/esm/isBotUserAgent.js","../../node_modules/@sentry/browser-utils/build/esm/component-name.js","../../node_modules/@sentry/browser-utils/build/esm/getLocationHref.js","../../node_modules/@sentry/browser-utils/build/esm/routing.js","../../node_modules/@sentry/browser-utils/build/esm/web-vitals/emitSpan.js","../../node_modules/@sentry/browser-utils/build/esm/web-vitals/reportEvents.js","../../node_modules/@sentry/browser-utils/build/esm/web-vitals/spans.js","../../node_modules/@sentry/browser-utils/build/esm/instrumentation/dom.js","../../node_modules/@sentry/browser-utils/build/esm/instrumentation/history.js","../../node_modules/@sentry/browser-utils/build/esm/getNativeImplementation.js","../../node_modules/@sentry/browser-utils/build/esm/instrumentation/xhr.js","../../node_modules/@sentry/browser-utils/build/esm/networkUtils.js","../../node_modules/@sentry/browser-utils/build/esm/is.js","../../node_modules/@sentry/browser/build/npm/esm/prod/helpers.js","../../node_modules/@sentry/browser/build/npm/esm/prod/eventbuilder.js","../../node_modules/@sentry/browser/build/npm/esm/prod/client.js","../../node_modules/@sentry/browser/build/npm/esm/prod/transports/fetch.js","../../node_modules/@sentry/browser/build/npm/esm/prod/stack-parsers.js","../../node_modules/@sentry/browser/build/npm/esm/prod/integrations/breadcrumbs.js","../../node_modules/@sentry/browser/build/npm/esm/prod/integrations/browserapierrors.js","../../node_modules/@sentry/browser/build/npm/esm/prod/integrations/browsersession.js","../../node_modules/@sentry/browser/build/npm/esm/prod/integrations/culturecontext.js","../../node_modules/@sentry/browser/build/npm/esm/prod/integrations/globalhandlers.js","../../node_modules/@sentry/browser/build/npm/esm/prod/integrations/httpcontext.js","../../node_modules/@sentry/browser/build/npm/esm/prod/integrations/linkederrors.js","../../node_modules/@sentry/browser/build/npm/esm/prod/normalizeStringifyValue.js","../../node_modules/@sentry/browser/build/npm/esm/prod/utils/detectBrowserExtension.js","../../node_modules/@sentry/browser/build/npm/esm/prod/sdk.js","../../node_modules/@sentry/browser/build/npm/esm/prod/report-dialog.js","../../node_modules/@sentry/replay/build/npm/esm/index.js","../../node_modules/@sentry/browser/build/npm/esm/prod/tracing/utils.js","../../node_modules/@sentry/browser/build/npm/esm/prod/tracing/request.js","../../node_modules/@sentry/browser/build/npm/esm/prod/integrations/webVitals.js","../../node_modules/@sentry/browser/build/npm/esm/prod/tracing/backgroundtab.js","../../node_modules/@sentry/browser/build/npm/esm/prod/tracing/linkedTraces.js","../../node_modules/@sentry/browser/build/npm/esm/prod/tracing/browserTracingIntegration.js","../../node_modules/react/cjs/react.production.js","../../node_modules/react/index.js","../../node_modules/@sentry/react/build/esm/isSyntheticEvent.js","../../node_modules/@sentry/react/build/esm/sdk.js","../../node_modules/@sentry/react/build/esm/error.js","../../node_modules/@sentry/react/build/esm/errorboundary.js","../../node_modules/lodash-es/_freeGlobal.js","../../node_modules/lodash-es/_root.js","../../node_modules/lodash-es/_Symbol.js","../../node_modules/lodash-es/_getRawTag.js","../../node_modules/lodash-es/_objectToString.js","../../node_modules/lodash-es/_baseGetTag.js","../../node_modules/lodash-es/isObjectLike.js","../../node_modules/lodash-es/isSymbol.js","../../node_modules/lodash-es/_arrayMap.js","../../node_modules/lodash-es/isArray.js","../../node_modules/lodash-es/_baseToString.js","../../node_modules/lodash-es/_trimmedEndIndex.js","../../node_modules/lodash-es/_baseTrim.js","../../node_modules/lodash-es/isObject.js","../../node_modules/lodash-es/toNumber.js","../../node_modules/lodash-es/toFinite.js","../../node_modules/lodash-es/toInteger.js","../../node_modules/lodash-es/identity.js","../../node_modules/lodash-es/isFunction.js","../../node_modules/lodash-es/_coreJsData.js","../../node_modules/lodash-es/_isMasked.js","../../node_modules/lodash-es/_toSource.js","../../node_modules/lodash-es/_baseIsNative.js","../../node_modules/lodash-es/_getValue.js","../../node_modules/lodash-es/_getNative.js","../../node_modules/lodash-es/_WeakMap.js","../../node_modules/lodash-es/_baseCreate.js","../../node_modules/lodash-es/_apply.js","../../node_modules/lodash-es/noop.js","../../node_modules/lodash-es/_copyArray.js","../../node_modules/lodash-es/_shortOut.js","../../node_modules/lodash-es/constant.js","../../node_modules/lodash-es/_defineProperty.js","../../node_modules/lodash-es/_setToString.js","../../node_modules/lodash-es/_baseSetToString.js","../../node_modules/lodash-es/_arrayEach.js","../../node_modules/lodash-es/_baseFindIndex.js","../../node_modules/lodash-es/_baseIsNaN.js","../../node_modules/lodash-es/_strictIndexOf.js","../../node_modules/lodash-es/_baseIndexOf.js","../../node_modules/lodash-es/_arrayIncludes.js","../../node_modules/lodash-es/_isIndex.js","../../node_modules/lodash-es/_baseAssignValue.js","../../node_modules/lodash-es/eq.js","../../node_modules/lodash-es/_assignValue.js","../../node_modules/lodash-es/_copyObject.js","../../node_modules/lodash-es/_overRest.js","../../node_modules/lodash-es/_baseRest.js","../../node_modules/lodash-es/isLength.js","../../node_modules/lodash-es/isArrayLike.js","../../node_modules/lodash-es/_isIterateeCall.js","../../node_modules/lodash-es/_createAssigner.js","../../node_modules/lodash-es/_isPrototype.js","../../node_modules/lodash-es/_baseTimes.js","../../node_modules/lodash-es/_baseIsArguments.js","../../node_modules/lodash-es/isArguments.js","../../node_modules/lodash-es/stubFalse.js","../../node_modules/lodash-es/isBuffer.js","../../node_modules/lodash-es/_baseIsTypedArray.js","../../node_modules/lodash-es/_baseUnary.js","../../node_modules/lodash-es/_nodeUtil.js","../../node_modules/lodash-es/isTypedArray.js","../../node_modules/lodash-es/_arrayLikeKeys.js","../../node_modules/lodash-es/_overArg.js","../../node_modules/lodash-es/_nativeKeys.js","../../node_modules/lodash-es/_baseKeys.js","../../node_modules/lodash-es/keys.js","../../node_modules/lodash-es/_nativeKeysIn.js","../../node_modules/lodash-es/_baseKeysIn.js","../../node_modules/lodash-es/keysIn.js","../../node_modules/lodash-es/assignIn.js","../../node_modules/lodash-es/_isKey.js","../../node_modules/lodash-es/_nativeCreate.js","../../node_modules/lodash-es/_hashClear.js","../../node_modules/lodash-es/_hashDelete.js","../../node_modules/lodash-es/_hashGet.js","../../node_modules/lodash-es/_hashHas.js","../../node_modules/lodash-es/_hashSet.js","../../node_modules/lodash-es/_Hash.js","../../node_modules/lodash-es/_listCacheClear.js","../../node_modules/lodash-es/_assocIndexOf.js","../../node_modules/lodash-es/_listCacheDelete.js","../../node_modules/lodash-es/_listCacheGet.js","../../node_modules/lodash-es/_listCacheHas.js","../../node_modules/lodash-es/_listCacheSet.js","../../node_modules/lodash-es/_ListCache.js","../../node_modules/lodash-es/_Map.js","../../node_modules/lodash-es/_mapCacheClear.js","../../node_modules/lodash-es/_isKeyable.js","../../node_modules/lodash-es/_getMapData.js","../../node_modules/lodash-es/_mapCacheDelete.js","../../node_modules/lodash-es/_mapCacheGet.js","../../node_modules/lodash-es/_mapCacheHas.js","../../node_modules/lodash-es/_mapCacheSet.js","../../node_modules/lodash-es/_MapCache.js","../../node_modules/lodash-es/memoize.js","../../node_modules/lodash-es/_memoizeCapped.js","../../node_modules/lodash-es/_stringToPath.js","../../node_modules/lodash-es/toString.js","../../node_modules/lodash-es/_castPath.js","../../node_modules/lodash-es/_toKey.js","../../node_modules/lodash-es/_baseGet.js","../../node_modules/lodash-es/get.js","../../node_modules/lodash-es/_arrayPush.js","../../node_modules/lodash-es/_isFlattenable.js","../../node_modules/lodash-es/_baseFlatten.js","../../node_modules/lodash-es/flatten.js","../../node_modules/lodash-es/_flatRest.js","../../node_modules/lodash-es/_getPrototype.js","../../node_modules/lodash-es/isPlainObject.js","../../node_modules/lodash-es/_baseSlice.js","../../node_modules/lodash-es/_castSlice.js","../../node_modules/lodash-es/_hasUnicode.js","../../node_modules/lodash-es/_asciiToArray.js","../../node_modules/lodash-es/_unicodeToArray.js","../../node_modules/lodash-es/_stringToArray.js","../../node_modules/lodash-es/_createCaseFirst.js","../../node_modules/lodash-es/upperFirst.js","../../node_modules/lodash-es/capitalize.js","../../node_modules/lodash-es/_createRound.js","../../node_modules/lodash-es/_baseClamp.js","../../node_modules/lodash-es/clamp.js","../../node_modules/lodash-es/_stackClear.js","../../node_modules/lodash-es/_stackDelete.js","../../node_modules/lodash-es/_stackGet.js","../../node_modules/lodash-es/_stackHas.js","../../node_modules/lodash-es/_stackSet.js","../../node_modules/lodash-es/_Stack.js","../../node_modules/lodash-es/_baseAssign.js","../../node_modules/lodash-es/_baseAssignIn.js","../../node_modules/lodash-es/_cloneBuffer.js","../../node_modules/lodash-es/_arrayFilter.js","../../node_modules/lodash-es/stubArray.js","../../node_modules/lodash-es/_getSymbols.js","../../node_modules/lodash-es/_copySymbols.js","../../node_modules/lodash-es/_getSymbolsIn.js","../../node_modules/lodash-es/_copySymbolsIn.js","../../node_modules/lodash-es/_baseGetAllKeys.js","../../node_modules/lodash-es/_getAllKeys.js","../../node_modules/lodash-es/_getAllKeysIn.js","../../node_modules/lodash-es/_DataView.js","../../node_modules/lodash-es/_Promise.js","../../node_modules/lodash-es/_Set.js","../../node_modules/lodash-es/_getTag.js","../../node_modules/lodash-es/_initCloneArray.js","../../node_modules/lodash-es/_Uint8Array.js","../../node_modules/lodash-es/_cloneArrayBuffer.js","../../node_modules/lodash-es/_cloneDataView.js","../../node_modules/lodash-es/_cloneRegExp.js","../../node_modules/lodash-es/_cloneSymbol.js","../../node_modules/lodash-es/_cloneTypedArray.js","../../node_modules/lodash-es/_initCloneByTag.js","../../node_modules/lodash-es/_initCloneObject.js","../../node_modules/lodash-es/_baseIsMap.js","../../node_modules/lodash-es/isMap.js","../../node_modules/lodash-es/_baseIsSet.js","../../node_modules/lodash-es/isSet.js","../../node_modules/lodash-es/_baseClone.js","../../node_modules/lodash-es/clone.js","../../node_modules/lodash-es/cloneDeep.js","../../node_modules/lodash-es/compact.js","../../node_modules/lodash-es/_setCacheAdd.js","../../node_modules/lodash-es/_setCacheHas.js","../../node_modules/lodash-es/_SetCache.js","../../node_modules/lodash-es/_arraySome.js","../../node_modules/lodash-es/_cacheHas.js","../../node_modules/lodash-es/_equalArrays.js","../../node_modules/lodash-es/_mapToArray.js","../../node_modules/lodash-es/_setToArray.js","../../node_modules/lodash-es/_equalByTag.js","../../node_modules/lodash-es/_equalObjects.js","../../node_modules/lodash-es/_baseIsEqualDeep.js","../../node_modules/lodash-es/_baseIsEqual.js","../../node_modules/lodash-es/_baseIsMatch.js","../../node_modules/lodash-es/_isStrictComparable.js","../../node_modules/lodash-es/_getMatchData.js","../../node_modules/lodash-es/_matchesStrictComparable.js","../../node_modules/lodash-es/_baseMatches.js","../../node_modules/lodash-es/_baseHasIn.js","../../node_modules/lodash-es/_hasPath.js","../../node_modules/lodash-es/hasIn.js","../../node_modules/lodash-es/_baseMatchesProperty.js","../../node_modules/lodash-es/_baseProperty.js","../../node_modules/lodash-es/_basePropertyDeep.js","../../node_modules/lodash-es/property.js","../../node_modules/lodash-es/_baseIteratee.js","../../node_modules/lodash-es/_arrayAggregator.js","../../node_modules/lodash-es/_createBaseFor.js","../../node_modules/lodash-es/_baseFor.js","../../node_modules/lodash-es/_baseForOwn.js","../../node_modules/lodash-es/_createBaseEach.js","../../node_modules/lodash-es/_baseEach.js","../../node_modules/lodash-es/_baseAggregator.js","../../node_modules/lodash-es/_createAggregator.js","../../node_modules/lodash-es/now.js","../../node_modules/lodash-es/debounce.js","../../node_modules/lodash-es/_assignMergeValue.js","../../node_modules/lodash-es/isArrayLikeObject.js","../../node_modules/lodash-es/_safeGet.js","../../node_modules/lodash-es/toPlainObject.js","../../node_modules/lodash-es/_baseMergeDeep.js","../../node_modules/lodash-es/_baseMerge.js","../../node_modules/lodash-es/mergeWith.js","../../node_modules/lodash-es/_arrayIncludesWith.js","../../node_modules/lodash-es/_baseDifference.js","../../node_modules/lodash-es/difference.js","../../node_modules/lodash-es/last.js","../../node_modules/lodash-es/_baseMap.js","../../node_modules/lodash-es/groupBy.js","../../node_modules/lodash-es/_baseGt.js","../../node_modules/lodash-es/_baseValues.js","../../node_modules/lodash-es/values.js","../../node_modules/lodash-es/_parent.js","../../node_modules/lodash-es/isEmpty.js","../../node_modules/lodash-es/isEqual.js","../../node_modules/lodash-es/isInteger.js","../../node_modules/lodash-es/isNumber.js","../../node_modules/lodash-es/keyBy.js","../../node_modules/lodash-es/_baseLt.js","../../node_modules/lodash-es/mapValues.js","../../node_modules/lodash-es/_baseExtremum.js","../../node_modules/lodash-es/max.js","../../node_modules/lodash-es/maxBy.js","../../node_modules/lodash-es/_baseSum.js","../../node_modules/lodash-es/merge.js","../../node_modules/lodash-es/min.js","../../node_modules/lodash-es/minBy.js","../../node_modules/lodash-es/_baseUnset.js","../../node_modules/lodash-es/_customOmitClone.js","../../node_modules/lodash-es/omit.js","../../node_modules/lodash-es/_baseSortBy.js","../../node_modules/lodash-es/_compareAscending.js","../../node_modules/lodash-es/_compareMultiple.js","../../node_modules/lodash-es/_baseOrderBy.js","../../node_modules/lodash-es/orderBy.js","../../node_modules/lodash-es/partition.js","../../node_modules/lodash-es/_baseRandom.js","../../node_modules/lodash-es/_baseRange.js","../../node_modules/lodash-es/_createRange.js","../../node_modules/lodash-es/range.js","../../node_modules/lodash-es/round.js","../../node_modules/lodash-es/_shuffleSelf.js","../../node_modules/lodash-es/_arrayShuffle.js","../../node_modules/lodash-es/_baseShuffle.js","../../node_modules/lodash-es/shuffle.js","../../node_modules/lodash-es/_baseSome.js","../../node_modules/lodash-es/some.js","../../node_modules/lodash-es/sortBy.js","../../node_modules/lodash-es/_baseSortedUniq.js","../../node_modules/lodash-es/sortedUniq.js","../../node_modules/lodash-es/sortedUniqBy.js","../../node_modules/lodash-es/sum.js","../../node_modules/lodash-es/sumBy.js","../../node_modules/lodash-es/throttle.js","../../node_modules/lodash-es/_createSet.js","../../node_modules/lodash-es/_baseUniq.js","../../node_modules/lodash-es/union.js","../../node_modules/lodash-es/uniq.js","../../node_modules/lodash-es/uniqBy.js","../../node_modules/lodash-es/uniqWith.js","../../node_modules/lodash-es/unzip.js","../../node_modules/lodash-es/without.js","../../node_modules/lodash-es/zip.js","../../node_modules/remeda/dist/dataLastImplementation-D-BXl-Tn.js","../../node_modules/remeda/dist/purry.js","../../node_modules/remeda/dist/withPrecision-DXRugSn5.js","../../node_modules/remeda/dist/chunk.js","../../node_modules/remeda/dist/clamp.js","../../node_modules/remeda/dist/concat.js","../../node_modules/remeda/dist/countBy.js","../../node_modules/remeda/dist/lazyControl-BA0LgJso.js","../../node_modules/remeda/dist/lazyDataLastImplementation-DFviQKyZ.js","../../node_modules/remeda/dist/purryWithLazy-CKUoTFu0.js","../../node_modules/remeda/dist/difference.js","../../node_modules/remeda/dist/hasAtLeast.js","../../node_modules/remeda/dist/swapInPlace-ubtnp8en.js","../../node_modules/remeda/dist/heap-DX5LMcnX.js","../../node_modules/remeda/dist/purryOrderRules-DEtRe7zN.js","../../node_modules/remeda/dist/dropLast.js","../../node_modules/remeda/dist/dropLastWhile.js","../../node_modules/remeda/dist/dropWhile.js","../../node_modules/remeda/dist/entries.js","../../node_modules/remeda/dist/requireData-CnnPAgxf.js","../../node_modules/remeda/dist/filter.js","../../node_modules/remeda/dist/toSingle-DiQSixar.js","../../node_modules/remeda/dist/first.js","../../node_modules/remeda/dist/firstBy.js","../../node_modules/remeda/dist/flatMap.js","../../node_modules/remeda/dist/groupBy.js","../../node_modules/remeda/dist/isDeepEqual.js","../../node_modules/remeda/dist/identity.js","../../node_modules/remeda/dist/intersection.js","../../node_modules/remeda/dist/invert.js","../../node_modules/remeda/dist/isDefined.js","../../node_modules/remeda/dist/isEmpty.js","../../node_modules/remeda/dist/isNumber.js","../../node_modules/remeda/dist/isPlainObject.js","../../node_modules/remeda/dist/isShallowEqual.js","../../node_modules/remeda/dist/isString.js","../../node_modules/remeda/dist/last.js","../../node_modules/remeda/dist/map.js","../../node_modules/remeda/dist/sum.js","../../node_modules/remeda/dist/omit.js","../../node_modules/remeda/dist/omitBy.js","../../node_modules/remeda/dist/partition.js","../../node_modules/remeda/dist/pick.js","../../node_modules/remeda/dist/pipe-D-eT-Ko7.js","../../node_modules/remeda/dist/prop.js","../../node_modules/remeda/dist/range.js","../../node_modules/remeda/dist/round.js","../../node_modules/remeda/dist/sample.js","../../node_modules/remeda/dist/sort.js","../../node_modules/remeda/dist/sortBy.js","../../node_modules/remeda/dist/binarySearchCutoffIndex-CRPy-dOJ.js","../../node_modules/remeda/dist/sortedIndex.js","../../node_modules/remeda/dist/sortedIndexBy.js","../../node_modules/remeda/dist/sortedIndexWith.js","../../node_modules/remeda/dist/sumBy.js","../../node_modules/remeda/dist/take.js","../../node_modules/remeda/dist/takeFirstBy.js","../../node_modules/remeda/dist/takeWhile.js","../../node_modules/remeda/dist/unique.js","../../node_modules/remeda/dist/uniqueBy.js","../../node_modules/remeda/dist/values.js","../../node_modules/remeda/dist/zip.js","../../node_modules/d3-array/src/ascending.js","../../node_modules/d3-array/src/descending.js","../../node_modules/d3-array/src/bisector.js","../../node_modules/d3-array/src/number.js","../../node_modules/d3-array/src/bisect.js","../../node_modules/d3-array/src/extent.js","../../node_modules/d3-array/src/fsum.js","../../node_modules/internmap/src/index.js","../../node_modules/d3-array/src/sort.js","../../node_modules/d3-array/src/ticks.js","../../node_modules/d3-array/src/max.js","../../node_modules/d3-array/src/min.js","../../node_modules/d3-array/src/quickselect.js","../../node_modules/d3-array/src/quantile.js","../../node_modules/d3-array/src/merge.js","../../node_modules/d3-array/src/pairs.js","../../node_modules/d3-array/src/range.js","../../node_modules/dayjs/dayjs.min.js","../../node_modules/dayjs/plugin/customParseFormat.js","../../node_modules/dayjs/plugin/isToday.js","../../node_modules/dayjs/plugin/isYesterday.js","../../node_modules/dayjs/plugin/relativeTime.js","../../node_modules/dayjs/plugin/utc.js","../../node_modules/dayjs/plugin/isoWeek.js","../../node_modules/dayjs/plugin/quarterOfYear.js","../../packages/@ourworldindata/utils/src/dayjs.ts","../../node_modules/d3-format/src/formatDecimal.js","../../node_modules/d3-format/src/exponent.js","../../node_modules/d3-format/src/formatGroup.js","../../node_modules/d3-format/src/formatNumerals.js","../../node_modules/d3-format/src/formatSpecifier.js","../../node_modules/d3-format/src/formatTrim.js","../../node_modules/d3-format/src/formatPrefixAuto.js","../../node_modules/d3-format/src/formatRounded.js","../../node_modules/d3-format/src/formatTypes.js","../../node_modules/d3-format/src/identity.js","../../node_modules/d3-format/src/locale.js","../../node_modules/d3-format/src/defaultLocale.js","../../node_modules/d3-format/src/precisionFixed.js","../../node_modules/d3-format/src/precisionPrefix.js","../../node_modules/d3-format/src/precisionRound.js","../../node_modules/striptags/src/striptags.js","../../node_modules/zod/v4/core/util.js","../../node_modules/zod/v4/core/core.js","../../node_modules/zod/v4/core/errors.js","../../node_modules/zod/v4/core/parse.js","../../node_modules/zod/v4/core/regexes.js","../../node_modules/zod/v4/core/checks.js","../../node_modules/zod/v4/core/versions.js","../../node_modules/zod/v4/core/schemas.js","../../node_modules/zod/v4/core/api.js","../../node_modules/zod/v4/mini/schemas.js","../../packages/@ourworldindata/types/src/EmailNotificationsTypes.ts","../../packages/@ourworldindata/types/src/domainTypes/Various.ts","../../packages/@ourworldindata/types/src/grapherTypes/GrapherConstants.ts","../../packages/@ourworldindata/types/src/grapherTypes/GrapherTypes.ts","../../packages/@ourworldindata/types/src/domainTypes/Layout.ts","../../packages/@ourworldindata/types/src/domainTypes/ContentGraph.ts","../../packages/@ourworldindata/types/src/gdocTypes/archieMLComponents/generic.ts","../../packages/@ourworldindata/types/src/gdocTypes/Gdoc.ts","../../packages/@ourworldindata/types/src/gdocTypes/GdocConstants.ts","../../packages/@ourworldindata/types/src/OwidVariable.ts","../../packages/@ourworldindata/types/src/OwidVariableDisplayConfigInterface.ts","../../packages/@ourworldindata/types/src/domainTypes/CoreTableTypes.ts","../../packages/@ourworldindata/types/src/domainTypes/Slideshow.ts","../../packages/@ourworldindata/types/src/domainTypes/StaticViz.ts","../../packages/@ourworldindata/types/src/siteTypes/SiteConstants.ts","../../packages/@ourworldindata/types/src/domainTypes/Archive.ts","../../packages/@ourworldindata/types/src/grapherTypes/BinningStrategyTypes.ts","../../packages/@ourworldindata/types/src/endpointTypes/GrapherSearchResultJson.ts","../../packages/@ourworldindata/types/src/analyticsTypes/analyticsTypes.ts","../../packages/@ourworldindata/types/src/domainTypes/Latest.ts","../../packages/@ourworldindata/types/src/domainTypes/Search.ts","../../packages/@ourworldindata/utils/src/PointVector.ts","../../node_modules/ts-pattern/dist/index.js","../../node_modules/url-slug/dist/index.mjs","../../packages/@ourworldindata/utils/src/Util.ts","../../packages/@ourworldindata/utils/src/archival/archivalDate.ts","../../packages/@ourworldindata/utils/src/metadataHelpers.ts","../../packages/@ourworldindata/utils/src/isPresent.ts","../../packages/@ourworldindata/utils/src/formatValue.ts","../../packages/@ourworldindata/utils/src/download.ts","../../packages/@ourworldindata/utils/src/TimeBounds.ts","../../packages/@ourworldindata/utils/src/regions/regions.ts","../../packages/@ourworldindata/utils/src/regions/regions.data.ts","../../packages/@ourworldindata/utils/src/regions/regionsUtils.ts","../../node_modules/requires-port/index.js","../../node_modules/querystringify/index.js","../../node_modules/url-parse/index.js","../../packages/@ourworldindata/utils/src/urls/UrlUtils.ts","../../packages/@ourworldindata/utils/src/urls/Url.ts","../../packages/@ourworldindata/utils/src/profiles.ts","../../packages/@ourworldindata/utils/src/fonts.ts","../../packages/@ourworldindata/utils/src/stringWidth.ts","../../packages/@ourworldindata/utils/src/Bounds.ts","../../node_modules/mobx/dist/mobx.esm.js","../../packages/@ourworldindata/utils/src/persistable/Persistable.ts","../../packages/@ourworldindata/utils/src/OwidVariable.ts","../../packages/@ourworldindata/utils/src/urls/gdocPaths.ts","../../packages/@ourworldindata/utils/src/urls/UrlMigration.ts","../../packages/@ourworldindata/utils/src/string.ts","../../packages/@ourworldindata/utils/src/serializers.ts","../../packages/@ourworldindata/utils/src/PromiseCache.ts","../../packages/@ourworldindata/utils/src/PromiseSwitcher.ts","../../packages/@ourworldindata/utils/src/image.ts","../../node_modules/@popperjs/core/lib/enums.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../../node_modules/@popperjs/core/lib/utils/math.js","../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../../node_modules/@popperjs/core/lib/dom-utils/contains.js","../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../../node_modules/@popperjs/core/lib/utils/within.js","../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../../node_modules/@popperjs/core/lib/modifiers/arrow.js","../../node_modules/@popperjs/core/lib/utils/getVariation.js","../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../../node_modules/@popperjs/core/lib/modifiers/flip.js","../../node_modules/@popperjs/core/lib/modifiers/hide.js","../../node_modules/@popperjs/core/lib/modifiers/offset.js","../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../../node_modules/@popperjs/core/lib/utils/debounce.js","../../node_modules/@popperjs/core/lib/utils/mergeByName.js","../../node_modules/@popperjs/core/lib/createPopper.js","../../node_modules/@popperjs/core/lib/popper.js","../../node_modules/tippy.js/dist/tippy.esm.js","../../node_modules/react-dom/cjs/react-dom.production.js","../../node_modules/react-dom/index.js","../../node_modules/@tippyjs/react/dist/tippy-react.esm.js","../../node_modules/react/cjs/react-jsx-runtime.production.js","../../node_modules/react/jsx-runtime.js","../../packages/@ourworldindata/utils/src/Tippy.tsx","../../node_modules/lodash.debounce/index.js","../../node_modules/usehooks-ts/dist/index.js","../../packages/@ourworldindata/utils/src/useSpinDelay.ts","../../packages/@ourworldindata/utils/src/DonateUtils.ts","../../packages/@ourworldindata/utils/src/BrowserUtils.ts","../../packages/@ourworldindata/utils/src/grapherConfigInheritance.ts","../../packages/@ourworldindata/utils/src/MultiDimDataPageConfig.ts","../../node_modules/fuzzysort/fuzzysort.js","../../packages/@ourworldindata/utils/src/FuzzySearch.ts","../../packages/@ourworldindata/utils/src/experiments/constants.ts","../../packages/@ourworldindata/utils/src/experiments/utils.ts","../../packages/@ourworldindata/utils/src/experiments/Experiment.ts","../../packages/@ourworldindata/utils/src/experiments/config.ts","../../node_modules/es-cookie/src/es-cookie.js","../../packages/@ourworldindata/utils/src/experiments/state.ts","../../packages/@ourworldindata/utils/src/search/SearchHelpers.ts","../../packages/@ourworldindata/utils/src/search/searchFacetFilters.ts","../../packages/@ourworldindata/utils/src/search/searchClosestMatches.ts","../../packages/@ourworldindata/utils/src/search/searchTopicPages.ts","../../packages/@ourworldindata/utils/src/search/emptyQuerySearchPayload.ts","../../packages/@ourworldindata/utils/src/search/MediumVariantRichDataHelpers.ts","../../packages/@ourworldindata/utils/src/sentry.ts","../../settings/clientSettings.mts","../../site/cookiePreferences.ts","../../site/SentryUtils.ts","../../site/instrument.ts","../../node_modules/scheduler/cjs/scheduler.production.js","../../node_modules/scheduler/index.js","../../node_modules/react-dom/cjs/react-dom-client.production.js","../../node_modules/react-dom/client.js","../../node_modules/@fortawesome/fontawesome-svg-core/index.mjs","../../node_modules/@fortawesome/react-fontawesome/dist/index.js","../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs","../../node_modules/clsx/dist/clsx.mjs","../../packages/@ourworldindata/grapher/src/color/ColorConstants.ts","../../packages/@ourworldindata/grapher/src/arrows/BezierArrow.tsx","../../packages/@ourworldindata/grapher/src/color/ColorScaleConfig.ts","../../packages/@ourworldindata/grapher/src/color/CustomSchemes.ts","../../node_modules/d3-color/src/define.js","../../node_modules/d3-color/src/color.js","../../node_modules/d3-interpolate/src/constant.js","../../node_modules/d3-interpolate/src/color.js","../../node_modules/d3-interpolate/src/rgb.js","../../node_modules/d3-interpolate/src/numberArray.js","../../node_modules/d3-interpolate/src/array.js","../../node_modules/d3-interpolate/src/date.js","../../node_modules/d3-interpolate/src/number.js","../../node_modules/d3-interpolate/src/object.js","../../node_modules/d3-interpolate/src/string.js","../../node_modules/d3-interpolate/src/value.js","../../node_modules/d3-interpolate/src/round.js","../../node_modules/d3-interpolate/src/transform/decompose.js","../../node_modules/d3-interpolate/src/transform/parse.js","../../node_modules/d3-interpolate/src/transform/index.js","../../node_modules/d3-interpolate/src/zoom.js","../../node_modules/d3-interpolate/src/quantize.js","../../packages/@ourworldindata/grapher/src/color/ColorUtils.ts","../../packages/@ourworldindata/grapher/src/color/ColorScheme.ts","../../node_modules/colorbrewer/index.js","../../packages/@ourworldindata/grapher/src/color/ColorBrewerSchemes.ts","../../packages/@ourworldindata/grapher/src/color/ColorSchemes.ts","../../node_modules/d3-dispatch/src/dispatch.js","../../node_modules/d3-selection/src/namespaces.js","../../node_modules/d3-selection/src/namespace.js","../../node_modules/d3-selection/src/creator.js","../../node_modules/d3-selection/src/selector.js","../../node_modules/d3-selection/src/selection/select.js","../../node_modules/d3-selection/src/array.js","../../node_modules/d3-selection/src/selectorAll.js","../../node_modules/d3-selection/src/selection/selectAll.js","../../node_modules/d3-selection/src/matcher.js","../../node_modules/d3-selection/src/selection/selectChild.js","../../node_modules/d3-selection/src/selection/selectChildren.js","../../node_modules/d3-selection/src/selection/filter.js","../../node_modules/d3-selection/src/selection/sparse.js","../../node_modules/d3-selection/src/selection/enter.js","../../node_modules/d3-selection/src/constant.js","../../node_modules/d3-selection/src/selection/data.js","../../node_modules/d3-selection/src/selection/exit.js","../../node_modules/d3-selection/src/selection/join.js","../../node_modules/d3-selection/src/selection/merge.js","../../node_modules/d3-selection/src/selection/order.js","../../node_modules/d3-selection/src/selection/sort.js","../../node_modules/d3-selection/src/selection/call.js","../../node_modules/d3-selection/src/selection/nodes.js","../../node_modules/d3-selection/src/selection/node.js","../../node_modules/d3-selection/src/selection/size.js","../../node_modules/d3-selection/src/selection/empty.js","../../node_modules/d3-selection/src/selection/each.js","../../node_modules/d3-selection/src/selection/attr.js","../../node_modules/d3-selection/src/window.js","../../node_modules/d3-selection/src/selection/style.js","../../node_modules/d3-selection/src/selection/property.js","../../node_modules/d3-selection/src/selection/classed.js","../../node_modules/d3-selection/src/selection/text.js","../../node_modules/d3-selection/src/selection/html.js","../../node_modules/d3-selection/src/selection/raise.js","../../node_modules/d3-selection/src/selection/lower.js","../../node_modules/d3-selection/src/selection/append.js","../../node_modules/d3-selection/src/selection/insert.js","../../node_modules/d3-selection/src/selection/remove.js","../../node_modules/d3-selection/src/selection/clone.js","../../node_modules/d3-selection/src/selection/datum.js","../../node_modules/d3-selection/src/selection/on.js","../../node_modules/d3-selection/src/selection/dispatch.js","../../node_modules/d3-selection/src/selection/iterator.js","../../node_modules/d3-selection/src/selection/index.js","../../node_modules/d3-selection/src/select.js","../../node_modules/d3-selection/src/sourceEvent.js","../../node_modules/d3-selection/src/pointer.js","../../node_modules/d3-drag/src/noevent.js","../../node_modules/d3-drag/src/nodrag.js","../../node_modules/d3-timer/src/timer.js","../../node_modules/d3-timer/src/timeout.js","../../node_modules/d3-transition/src/transition/schedule.js","../../node_modules/d3-transition/src/interrupt.js","../../node_modules/d3-transition/src/selection/interrupt.js","../../node_modules/d3-transition/src/transition/tween.js","../../node_modules/d3-transition/src/transition/interpolate.js","../../node_modules/d3-transition/src/transition/attr.js","../../node_modules/d3-transition/src/transition/attrTween.js","../../node_modules/d3-transition/src/transition/delay.js","../../node_modules/d3-transition/src/transition/duration.js","../../node_modules/d3-transition/src/transition/ease.js","../../node_modules/d3-transition/src/transition/easeVarying.js","../../node_modules/d3-transition/src/transition/filter.js","../../node_modules/d3-transition/src/transition/merge.js","../../node_modules/d3-transition/src/transition/on.js","../../node_modules/d3-transition/src/transition/remove.js","../../node_modules/d3-transition/src/transition/select.js","../../node_modules/d3-transition/src/transition/selectAll.js","../../node_modules/d3-transition/src/transition/selection.js","../../node_modules/d3-transition/src/transition/style.js","../../node_modules/d3-transition/src/transition/styleTween.js","../../node_modules/d3-transition/src/transition/text.js","../../node_modules/d3-transition/src/transition/textTween.js","../../node_modules/d3-transition/src/transition/transition.js","../../node_modules/d3-transition/src/transition/end.js","../../node_modules/d3-transition/src/transition/index.js","../../node_modules/d3-ease/src/cubic.js","../../node_modules/d3-transition/src/selection/transition.js","../../node_modules/d3-transition/src/selection/index.js","../../node_modules/d3-brush/src/brush.js","../../node_modules/d3-path/src/path.js","../../node_modules/robust-predicates/esm/util.js","../../node_modules/robust-predicates/esm/orient2d.js","../../node_modules/robust-predicates/esm/orient3d.js","../../node_modules/robust-predicates/esm/incircle.js","../../node_modules/robust-predicates/esm/insphere.js","../../node_modules/d3-quadtree/src/add.js","../../node_modules/d3-quadtree/src/cover.js","../../node_modules/d3-quadtree/src/data.js","../../node_modules/d3-quadtree/src/extent.js","../../node_modules/d3-quadtree/src/quad.js","../../node_modules/d3-quadtree/src/find.js","../../node_modules/d3-quadtree/src/remove.js","../../node_modules/d3-quadtree/src/root.js","../../node_modules/d3-quadtree/src/size.js","../../node_modules/d3-quadtree/src/visit.js","../../node_modules/d3-quadtree/src/visitAfter.js","../../node_modules/d3-quadtree/src/x.js","../../node_modules/d3-quadtree/src/y.js","../../node_modules/d3-quadtree/src/quadtree.js","../../node_modules/d3-force/src/constant.js","../../node_modules/d3-force/src/lcg.js","../../node_modules/d3-force/src/simulation.js","../../node_modules/d3-force/src/x.js","../../node_modules/d3-force/src/y.js","../../node_modules/d3-geo/src/math.js","../../node_modules/d3-geo/src/noop.js","../../node_modules/d3-geo/src/stream.js","../../node_modules/d3-geo/src/area.js","../../node_modules/d3-geo/src/cartesian.js","../../node_modules/d3-geo/src/bounds.js","../../node_modules/d3-geo/src/centroid.js","../../node_modules/d3-geo/src/compose.js","../../node_modules/d3-geo/src/rotation.js","../../node_modules/d3-geo/src/circle.js","../../node_modules/d3-geo/src/clip/buffer.js","../../node_modules/d3-geo/src/pointEqual.js","../../node_modules/d3-geo/src/clip/rejoin.js","../../node_modules/d3-geo/src/polygonContains.js","../../node_modules/d3-geo/src/clip/index.js","../../node_modules/d3-geo/src/clip/antimeridian.js","../../node_modules/d3-geo/src/clip/circle.js","../../node_modules/d3-geo/src/clip/line.js","../../node_modules/d3-geo/src/clip/rectangle.js","../../node_modules/d3-geo/src/length.js","../../node_modules/d3-geo/src/distance.js","../../node_modules/d3-geo/src/graticule.js","../../node_modules/d3-geo/src/interpolate.js","../../node_modules/d3-geo/src/identity.js","../../node_modules/d3-geo/src/path/area.js","../../node_modules/d3-geo/src/path/bounds.js","../../node_modules/d3-geo/src/path/centroid.js","../../node_modules/d3-geo/src/path/context.js","../../node_modules/d3-geo/src/path/measure.js","../../node_modules/d3-geo/src/path/string.js","../../node_modules/d3-geo/src/path/index.js","../../node_modules/d3-geo/src/transform.js","../../node_modules/d3-geo/src/projection/fit.js","../../node_modules/d3-geo/src/projection/resample.js","../../node_modules/d3-geo/src/projection/index.js","../../node_modules/d3-geo/src/projection/conic.js","../../node_modules/d3-geo/src/projection/azimuthal.js","../../node_modules/d3-geo/src/projection/azimuthalEqualArea.js","../../node_modules/d3-geo/src/projection/mercator.js","../../node_modules/d3-geo/src/projection/conicConformal.js","../../node_modules/d3-geo/src/projection/orthographic.js","../../node_modules/d3-scale/src/init.js","../../node_modules/d3-scale/src/ordinal.js","../../node_modules/d3-scale/src/band.js","../../node_modules/d3-scale/src/constant.js","../../node_modules/d3-scale/src/number.js","../../node_modules/d3-scale/src/continuous.js","../../node_modules/d3-scale/src/tickFormat.js","../../node_modules/d3-scale/src/linear.js","../../node_modules/d3-scale/src/nice.js","../../node_modules/d3-scale/src/log.js","../../node_modules/d3-scale/src/pow.js","../../node_modules/d3-shape/src/constant.js","../../node_modules/d3-shape/src/path.js","../../node_modules/d3-shape/src/array.js","../../node_modules/d3-shape/src/curve/linear.js","../../node_modules/d3-shape/src/point.js","../../node_modules/d3-shape/src/line.js","../../node_modules/d3-zoom/src/constant.js","../../node_modules/d3-zoom/src/event.js","../../node_modules/d3-zoom/src/transform.js","../../node_modules/d3-zoom/src/noevent.js","../../node_modules/d3-zoom/src/zoom.js","../../packages/@ourworldindata/grapher/src/color/BinningStrategyLogarithmic.ts","../../packages/@ourworldindata/grapher/src/color/BinningStrategyEqualSizeBins.ts","../../packages/@ourworldindata/grapher/src/color/BinningStrategies.ts","../../packages/@ourworldindata/grapher/src/color/ColorScale.ts","../../packages/@ourworldindata/grapher/src/color/ColorScaleBin.ts","../../packages/@ourworldindata/grapher/src/chart/ChartDimension.ts","../../packages/@ourworldindata/components/src/TextWrap/TextWrapUtils.ts","../../packages/@ourworldindata/components/src/TextWrap/TextWrap.ts","../../packages/@ourworldindata/components/src/TextWrap/TextWrapComponents.tsx","../../packages/@ourworldindata/components/src/MarkdownTextWrap/IRTokens.tsx","../../packages/@ourworldindata/components/src/MarkdownTextWrap/AbstractTokenTextWrap.tsx","../../node_modules/mdast-util-to-string/lib/index.js","../../node_modules/decode-named-character-reference/index.dom.js","../../node_modules/micromark-util-chunked/index.js","../../node_modules/micromark-util-combine-extensions/index.js","../../node_modules/micromark-util-decode-numeric-character-reference/index.js","../../node_modules/micromark-util-normalize-identifier/index.js","../../node_modules/micromark-util-character/index.js","../../node_modules/micromark-util-sanitize-uri/index.js","../../node_modules/micromark-factory-space/index.js","../../node_modules/micromark/lib/initialize/content.js","../../node_modules/micromark/lib/initialize/document.js","../../node_modules/micromark-util-classify-character/index.js","../../node_modules/micromark-util-resolve-all/index.js","../../node_modules/micromark-core-commonmark/lib/attention.js","../../node_modules/micromark-core-commonmark/lib/autolink.js","../../node_modules/micromark-core-commonmark/lib/blank-line.js","../../node_modules/micromark-core-commonmark/lib/block-quote.js","../../node_modules/micromark-core-commonmark/lib/character-escape.js","../../node_modules/micromark-core-commonmark/lib/character-reference.js","../../node_modules/micromark-core-commonmark/lib/code-fenced.js","../../node_modules/micromark-core-commonmark/lib/code-indented.js","../../node_modules/micromark-core-commonmark/lib/code-text.js","../../node_modules/micromark-util-subtokenize/lib/splice-buffer.js","../../node_modules/micromark-util-subtokenize/index.js","../../node_modules/micromark-core-commonmark/lib/content.js","../../node_modules/micromark-factory-destination/index.js","../../node_modules/micromark-factory-label/index.js","../../node_modules/micromark-factory-title/index.js","../../node_modules/micromark-factory-whitespace/index.js","../../node_modules/micromark-core-commonmark/lib/definition.js","../../node_modules/micromark-core-commonmark/lib/hard-break-escape.js","../../node_modules/micromark-core-commonmark/lib/heading-atx.js","../../node_modules/micromark-util-html-tag-name/index.js","../../node_modules/micromark-core-commonmark/lib/html-flow.js","../../node_modules/micromark-core-commonmark/lib/html-text.js","../../node_modules/micromark-core-commonmark/lib/label-end.js","../../node_modules/micromark-core-commonmark/lib/label-start-image.js","../../node_modules/micromark-core-commonmark/lib/label-start-link.js","../../node_modules/micromark-core-commonmark/lib/line-ending.js","../../node_modules/micromark-core-commonmark/lib/thematic-break.js","../../node_modules/micromark-core-commonmark/lib/list.js","../../node_modules/micromark-core-commonmark/lib/setext-underline.js","../../node_modules/micromark/lib/initialize/flow.js","../../node_modules/micromark/lib/initialize/text.js","../../node_modules/micromark/lib/constructs.js","../../node_modules/micromark/lib/create-tokenizer.js","../../node_modules/micromark/lib/parse.js","../../node_modules/micromark/lib/postprocess.js","../../node_modules/micromark/lib/preprocess.js","../../node_modules/micromark-util-decode-string/index.js","../../node_modules/unist-util-stringify-position/lib/index.js","../../node_modules/mdast-util-from-markdown/lib/index.js","../../node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp/index.js","../../node_modules/unist-util-is/lib/index.js","../../node_modules/unist-util-visit-parents/lib/color.js","../../node_modules/unist-util-visit-parents/lib/index.js","../../node_modules/mdast-util-find-and-replace/lib/index.js","../../packages/@ourworldindata/components/src/markdown/remarkPlainLinks.ts","../../packages/@ourworldindata/components/src/MarkdownTextWrap/MarkdownTextWrap.tsx","../../packages/@ourworldindata/components/src/MarkdownTextWrap/TextWrapGroup.tsx","../../packages/@ourworldindata/components/src/MarkdownTextWrap/MarkdownTextWrapComponents.tsx","../../node_modules/comma-separated-tokens/index.js","../../node_modules/estree-util-is-identifier-name/lib/index.js","../../node_modules/hast-util-whitespace/lib/index.js","../../node_modules/property-information/lib/util/schema.js","../../node_modules/property-information/lib/util/merge.js","../../node_modules/property-information/lib/normalize.js","../../node_modules/property-information/lib/util/info.js","../../node_modules/property-information/lib/util/types.js","../../node_modules/property-information/lib/util/defined-info.js","../../node_modules/property-information/lib/util/create.js","../../node_modules/property-information/lib/aria.js","../../node_modules/property-information/lib/util/case-sensitive-transform.js","../../node_modules/property-information/lib/util/case-insensitive-transform.js","../../node_modules/property-information/lib/html.js","../../node_modules/property-information/lib/svg.js","../../node_modules/property-information/lib/xlink.js","../../node_modules/property-information/lib/xmlns.js","../../node_modules/property-information/lib/xml.js","../../node_modules/property-information/lib/hast-to-react.js","../../node_modules/property-information/lib/find.js","../../node_modules/property-information/index.js","../../node_modules/space-separated-tokens/index.js","../../node_modules/inline-style-parser/index.js","../../node_modules/style-to-object/cjs/index.js","../../node_modules/style-to-js/cjs/utilities.js","../../node_modules/style-to-js/cjs/index.js","../../node_modules/unist-util-position/lib/index.js","../../node_modules/vfile-message/lib/index.js","../../node_modules/hast-util-to-jsx-runtime/lib/index.js","../../node_modules/html-url-attributes/lib/index.js","../../node_modules/remark-parse/lib/index.js","../../node_modules/mdast-util-to-hast/lib/handlers/blockquote.js","../../node_modules/mdast-util-to-hast/lib/handlers/break.js","../../node_modules/mdast-util-to-hast/lib/handlers/code.js","../../node_modules/mdast-util-to-hast/lib/handlers/delete.js","../../node_modules/mdast-util-to-hast/lib/handlers/emphasis.js","../../node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js","../../node_modules/mdast-util-to-hast/lib/handlers/heading.js","../../node_modules/mdast-util-to-hast/lib/handlers/html.js","../../node_modules/mdast-util-to-hast/lib/revert.js","../../node_modules/mdast-util-to-hast/lib/handlers/image-reference.js","../../node_modules/mdast-util-to-hast/lib/handlers/image.js","../../node_modules/mdast-util-to-hast/lib/handlers/inline-code.js","../../node_modules/mdast-util-to-hast/lib/handlers/link-reference.js","../../node_modules/mdast-util-to-hast/lib/handlers/link.js","../../node_modules/mdast-util-to-hast/lib/handlers/list-item.js","../../node_modules/mdast-util-to-hast/lib/handlers/list.js","../../node_modules/mdast-util-to-hast/lib/handlers/paragraph.js","../../node_modules/mdast-util-to-hast/lib/handlers/root.js","../../node_modules/mdast-util-to-hast/lib/handlers/strong.js","../../node_modules/mdast-util-to-hast/lib/handlers/table.js","../../node_modules/mdast-util-to-hast/lib/handlers/table-row.js","../../node_modules/mdast-util-to-hast/lib/handlers/table-cell.js","../../node_modules/trim-lines/index.js","../../node_modules/mdast-util-to-hast/lib/handlers/text.js","../../node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js","../../node_modules/mdast-util-to-hast/lib/handlers/index.js","../../node_modules/@ungap/structured-clone/esm/deserialize.js","../../node_modules/@ungap/structured-clone/esm/serialize.js","../../node_modules/@ungap/structured-clone/esm/index.js","../../node_modules/mdast-util-to-hast/lib/footer.js","../../node_modules/unist-util-visit/lib/index.js","../../node_modules/mdast-util-to-hast/lib/state.js","../../node_modules/mdast-util-to-hast/lib/index.js","../../node_modules/remark-rehype/lib/index.js","../../node_modules/bail/index.js","../../node_modules/extend/index.js","../../node_modules/is-plain-obj/index.js","../../node_modules/trough/lib/index.js","../../node_modules/vfile/lib/minpath.browser.js","../../node_modules/vfile/lib/minproc.browser.js","../../node_modules/vfile/lib/minurl.shared.js","../../node_modules/vfile/lib/minurl.browser.js","../../node_modules/vfile/lib/index.js","../../node_modules/unified/lib/callable-instance.js","../../node_modules/unified/lib/index.js","../../node_modules/react-markdown/lib/index.js","../../packages/@ourworldindata/components/src/SimpleMarkdownText.tsx","../../packages/@ourworldindata/components/src/reactUtil.ts","../../packages/@ourworldindata/components/src/detailsOnDemand.tsx","../../packages/@ourworldindata/components/src/GdocsUtils.ts","../../packages/@ourworldindata/components/src/ExpandableToggle/ExpandableToggle.tsx","../../packages/@ourworldindata/components/src/SharedDataPageConstants.ts","../../packages/@ourworldindata/components/src/IndicatorKeyData/IndicatorKeyData.tsx","../../packages/@ourworldindata/components/src/IndicatorProcessing/IndicatorProcessing.tsx","../../packages/@ourworldindata/components/src/MetadataBox/MetadataBoxExpander.tsx","../../packages/@ourworldindata/components/src/MetadataBox/MetadataBoxCollapseButton.tsx","../../packages/@ourworldindata/components/src/MetadataBox/MetadataBoxSection.tsx","../../packages/@ourworldindata/components/src/MetadataBox/MetadataBoxReuseNotice.tsx","../../packages/@ourworldindata/components/src/MetadataBox/MetadataBoxKeyData.tsx","../../packages/@ourworldindata/components/src/ChartLicenseNotice/ChartLicenseNotice.tsx","../../packages/@ourworldindata/components/src/BespokeMetadata/BespokeMetadataHeading.tsx","../../packages/@ourworldindata/components/src/BespokeMetadata/bespokeKeyDataRows.ts","../../packages/@ourworldindata/components/src/BespokeMetadata/BespokeMetadataKeyData.tsx","../../packages/@ourworldindata/components/src/CodeSnippet/CodeSnippet.tsx","../../packages/@ourworldindata/components/src/DataCitation/DataCitation.tsx","../../packages/@ourworldindata/components/src/IndicatorSources/IndicatorSources.tsx","../../packages/@ourworldindata/components/src/BespokeMetadata/BespokeMetadataSections.tsx","../../node_modules/react-aria/dist/private/utils/chain.mjs","../../node_modules/react-aria/dist/private/utils/useLayoutEffect.mjs","../../node_modules/react-aria/dist/private/ssr/SSRProvider.mjs","../../node_modules/react-aria/dist/private/utils/useValueEffect.mjs","../../node_modules/react-aria/dist/private/utils/useId.mjs","../../node_modules/react-aria/dist/private/utils/mergeRefs.mjs","../../node_modules/react-aria/dist/private/utils/mergeProps.mjs","../../node_modules/react-aria/dist/private/utils/useObjectRef.mjs","../../node_modules/react-aria-components/dist/private/utils.mjs","../../node_modules/react-aria/dist/private/utils/constants.mjs","../../node_modules/react-aria/dist/private/utils/domHelpers.mjs","../../node_modules/react-stately/dist/private/flags/flags.mjs","../../node_modules/react-aria/dist/private/utils/shadowdom/DOMFunctions.mjs","../../node_modules/react-aria/dist/private/focus/virtualFocus.mjs","../../node_modules/react-aria/dist/private/utils/focusWithoutScrolling.mjs","../../node_modules/react-aria/dist/private/utils/isElementVisible.mjs","../../node_modules/react-aria/dist/private/utils/isFocusable.mjs","../../node_modules/react-aria/dist/private/interactions/utils.mjs","../../node_modules/react-aria/dist/private/utils/platform.mjs","../../node_modules/react-aria/dist/private/utils/isVirtualEvent.mjs","../../node_modules/react-aria/dist/private/utils/openLink.mjs","../../node_modules/react-aria/dist/private/interactions/useFocusVisible.mjs","../../node_modules/react-aria/dist/private/intl/autocomplete/en-US.mjs","../../node_modules/react-aria/dist/private/autocomplete/intlStrings.mjs","../../node_modules/react-aria/dist/private/utils/getMetaValue.mjs","../../node_modules/react-aria/dist/private/utils/keyboard.mjs","../../node_modules/react-aria/dist/private/utils/useEffectEvent.mjs","../../node_modules/react-aria/dist/private/utils/useEvent.mjs","../../node_modules/react-aria/dist/private/utils/useLabels.mjs","../../node_modules/react-aria/dist/private/i18n/utils.mjs","../../node_modules/react-aria/dist/private/i18n/useDefaultLocale.mjs","../../node_modules/react-aria/dist/private/i18n/I18nProvider.mjs","../../node_modules/@internationalized/string/dist/private/LocalizedStringDictionary.mjs","../../node_modules/@internationalized/string/dist/private/LocalizedStringFormatter.mjs","../../node_modules/react-aria/dist/private/i18n/useLocalizedStringFormatter.mjs","../../node_modules/react-aria/dist/private/autocomplete/useAutocomplete.mjs","../../node_modules/react-stately/dist/private/utils/useControlledState.mjs","../../node_modules/react-stately/dist/private/autocomplete/useAutocompleteState.mjs","../../node_modules/react-aria-components/dist/private/Autocomplete.mjs","../../node_modules/react-aria/dist/private/collections/BaseCollection.mjs","../../node_modules/react-aria/dist/private/collections/Document.mjs","../../node_modules/react-aria/dist/private/collections/useCachedChildren.mjs","../../node_modules/react-aria/dist/private/utils/runAfterTransition.mjs","../../node_modules/react-aria/dist/private/interactions/focusSafely.mjs","../../node_modules/react-aria/dist/private/interactions/useFocus.mjs","../../node_modules/react-aria/dist/private/interactions/createEventHandler.mjs","../../node_modules/react-aria/dist/private/interactions/createKeyboardShortcutHandler.mjs","../../node_modules/react-aria/dist/private/interactions/useKeyboard.mjs","../../node_modules/react-aria/dist/private/utils/useSyncRef.mjs","../../node_modules/react-aria/dist/private/interactions/useFocusable.mjs","../../node_modules/react-aria/dist/private/collections/Hidden.mjs","../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../../node_modules/use-sync-external-store/shim/index.js","../../node_modules/react-aria/dist/private/collections/CollectionBuilder.mjs","../../node_modules/react-aria-components/dist/private/Collection.mjs","../../node_modules/react-aria/dist/private/utils/filterDOMProps.mjs","../../node_modules/react-aria/dist/private/interactions/textSelection.mjs","../../node_modules/react-aria/dist/private/utils/getNonce.mjs","../../node_modules/react-aria/dist/private/interactions/context.mjs","../../node_modules/react-aria/dist/private/utils/useGlobalListeners.mjs","../../node_modules/react-aria/dist/private/interactions/usePress.mjs","../../node_modules/react-aria/dist/private/interactions/useFocusWithin.mjs","../../node_modules/react-aria/dist/private/focus/useFocusRing.mjs","../../node_modules/react-aria/dist/private/interactions/useHover.mjs","../../node_modules/react-aria-components/dist/private/Label.mjs","../../node_modules/react-aria/dist/private/label/useLabel.mjs","../../node_modules/@internationalized/number/dist/private/NumberFormatter.mjs","../../node_modules/@internationalized/number/dist/private/NumberParser.mjs","../../node_modules/react-stately/dist/private/utils/number.mjs","../../node_modules/react-aria-components/dist/private/ProgressBar.mjs","../../node_modules/react-aria/dist/private/live-announcer/LiveAnnouncer.mjs","../../node_modules/react-aria/dist/private/button/useButton.mjs","../../node_modules/react-aria-components/dist/private/Button.mjs","../../node_modules/react-aria-components/dist/private/Heading.mjs","../../node_modules/react-aria-components/dist/private/Text.mjs","../../node_modules/react-aria/dist/private/utils/useDeepMemo.mjs","../../node_modules/@internationalized/date/dist/private/utils.mjs","../../node_modules/@internationalized/date/dist/private/calendars/GregorianCalendar.mjs","../../node_modules/@internationalized/date/dist/private/queries.mjs","../../node_modules/@internationalized/date/dist/private/conversion.mjs","../../node_modules/@internationalized/date/dist/private/manipulation.mjs","../../node_modules/@internationalized/date/dist/private/string.mjs","../../node_modules/@internationalized/date/dist/private/CalendarDate.mjs","../../node_modules/@internationalized/date/dist/private/calendars/JapaneseCalendar.mjs","../../node_modules/@internationalized/date/dist/private/calendars/BuddhistCalendar.mjs","../../node_modules/@internationalized/date/dist/private/calendars/TaiwanCalendar.mjs","../../node_modules/@internationalized/date/dist/private/calendars/PersianCalendar.mjs","../../node_modules/@internationalized/date/dist/private/calendars/IndianCalendar.mjs","../../node_modules/@internationalized/date/dist/private/calendars/IslamicCalendar.mjs","../../node_modules/@internationalized/date/dist/private/calendars/HebrewCalendar.mjs","../../node_modules/@internationalized/date/dist/private/calendars/EthiopicCalendar.mjs","../../node_modules/@internationalized/date/dist/private/createCalendar.mjs","../../node_modules/@internationalized/date/dist/private/DateFormatter.mjs","../../node_modules/react-aria/dist/private/i18n/useDateFormatter.mjs","../../node_modules/react-aria/dist/private/utils/isScrollable.mjs","../../node_modules/react-aria/dist/private/utils/getScrollParent.mjs","../../node_modules/react-aria/dist/private/utils/getScrollParents.mjs","../../node_modules/react-aria/dist/private/utils/scrollIntoView.mjs","../../node_modules/react-aria/dist/private/utils/useDescription.mjs","../../node_modules/react-aria/dist/private/visually-hidden/VisuallyHidden.mjs","../../node_modules/react-aria-components/dist/private/FieldError.mjs","../../node_modules/react-stately/dist/private/form/useFormValidationState.mjs","../../node_modules/react-aria-components/dist/private/Form.mjs","../../node_modules/react-aria/dist/private/label/useField.mjs","../../node_modules/react-aria/dist/private/utils/useFormReset.mjs","../../node_modules/react-aria/dist/private/form/useFormValidation.mjs","../../node_modules/react-aria/dist/private/utils/useSlot.mjs","../../node_modules/react-stately/dist/private/toggle/useToggleState.mjs","../../node_modules/react-aria-components/dist/private/Group.mjs","../../node_modules/react-aria-components/dist/private/Input.mjs","../../node_modules/react-aria/dist/private/textfield/useTextField.mjs","../../node_modules/react-aria/dist/private/intl/spinbutton/en-US.mjs","../../node_modules/react-aria/dist/private/spinbutton/intlStrings.mjs","../../node_modules/react-aria/dist/private/spinbutton/useSpinButton.mjs","../../node_modules/react-aria-components/dist/private/intl/en-US.mjs","../../node_modules/react-aria-components/dist/private/intlStrings.mjs","../../node_modules/react-aria-components/dist/private/DragAndDrop.mjs","../../node_modules/react-aria-components/dist/private/Header.mjs","../../node_modules/react-aria-components/dist/private/SharedElementTransition.mjs","../../node_modules/react-aria-components/dist/private/SelectionIndicator.mjs","../../node_modules/react-aria-components/dist/private/Separator.mjs","../../node_modules/react-aria/dist/private/listbox/utils.mjs","../../node_modules/react-aria/dist/private/utils/shadowdom/ShadowTreeWalker.mjs","../../node_modules/react-aria/dist/private/focus/FocusScope.mjs","../../node_modules/react-aria/dist/private/selection/utils.mjs","../../node_modules/react-aria/dist/private/selection/useTypeSelect.mjs","../../node_modules/react-aria/dist/private/utils/useUpdateLayoutEffect.mjs","../../node_modules/react-aria/dist/private/selection/useSelectableCollection.mjs","../../node_modules/react-aria/dist/private/selection/DOMLayoutDelegate.mjs","../../node_modules/react-aria/dist/private/selection/ListKeyboardDelegate.mjs","../../node_modules/react-aria/dist/private/i18n/useCollator.mjs","../../node_modules/react-aria/dist/private/selection/useSelectableList.mjs","../../node_modules/react-aria/dist/private/listbox/useListBox.mjs","../../node_modules/react-aria/dist/private/interactions/useLongPress.mjs","../../node_modules/react-aria/dist/private/selection/useSelectableItem.mjs","../../node_modules/react-stately/dist/private/collections/getChildNodes.mjs","../../node_modules/react-stately/dist/private/collections/getItemCount.mjs","../../node_modules/react-aria/dist/private/listbox/useOption.mjs","../../node_modules/react-aria/dist/private/listbox/useListBoxSection.mjs","../../node_modules/react-aria/dist/private/utils/inertValue.mjs","../../node_modules/react-stately/dist/private/list/ListCollection.mjs","../../node_modules/react-stately/dist/private/selection/Selection.mjs","../../node_modules/react-stately/dist/private/selection/useMultipleSelectionState.mjs","../../node_modules/react-stately/dist/private/selection/SelectionManager.mjs","../../node_modules/react-stately/dist/private/collections/CollectionBuilder.mjs","../../node_modules/react-stately/dist/private/collections/useCollection.mjs","../../node_modules/react-stately/dist/private/list/useListState.mjs","../../node_modules/react-aria/dist/private/utils/useLoadMoreSentinel.mjs","../../node_modules/react-aria-components/dist/private/ListBox.mjs","../../node_modules/react-aria-components/dist/private/OverlayArrow.mjs","../../node_modules/react-aria/dist/private/overlays/ariaHideOutside.mjs","../../node_modules/react-aria/dist/private/overlays/calculatePosition.mjs","../../node_modules/react-aria/dist/private/overlays/useCloseOnScroll.mjs","../../node_modules/react-aria/dist/private/utils/useResizeObserver.mjs","../../node_modules/react-aria/dist/private/overlays/useOverlayPosition.mjs","../../node_modules/react-aria/dist/private/interactions/useInteractOutside.mjs","../../node_modules/react-aria/dist/private/overlays/useOverlay.mjs","../../node_modules/react-aria/dist/private/utils/runAfterKeyboard.mjs","../../node_modules/react-aria/dist/private/overlays/usePreventScroll.mjs","../../node_modules/react-aria/dist/private/overlays/usePopover.mjs","../../node_modules/react-aria/dist/private/intl/overlays/en-US.mjs","../../node_modules/react-aria/dist/private/overlays/intlStrings.mjs","../../node_modules/react-aria/dist/private/overlays/DismissButton.mjs","../../node_modules/react-aria/dist/private/interactions/PressResponder.mjs","../../node_modules/react-aria/dist/private/overlays/PortalProvider.mjs","../../node_modules/react-aria/dist/private/overlays/Overlay.mjs","../../node_modules/react-stately/dist/private/overlays/useOverlayTriggerState.mjs","../../node_modules/react-aria/dist/private/utils/animation.mjs","../../node_modules/react-aria-components/dist/private/Popover.mjs","../../node_modules/react-aria-components/dist/private/Keyboard.mjs","../../node_modules/react-aria/dist/private/intl/menu/en-US.mjs","../../node_modules/react-aria/dist/private/menu/intlStrings.mjs","../../node_modules/react-aria/dist/private/interactions/useContextMenu.mjs","../../node_modules/react-aria/dist/private/overlays/useOverlayTrigger.mjs","../../node_modules/react-aria/dist/private/menu/useMenuTrigger.mjs","../../node_modules/react-aria/dist/private/menu/utils.mjs","../../node_modules/react-aria/dist/private/menu/useMenu.mjs","../../node_modules/react-aria/dist/private/menu/useMenuItem.mjs","../../node_modules/react-aria/dist/private/menu/useMenuSection.mjs","../../node_modules/react-stately/dist/private/menu/useMenuTriggerState.mjs","../../node_modules/react-stately/dist/private/tree/TreeCollection.mjs","../../node_modules/react-stately/dist/private/tree/useTreeState.mjs","../../node_modules/react-aria-components/dist/private/Menu.mjs","../../node_modules/react-aria/dist/private/dialog/useDialog.mjs","../../node_modules/react-aria-components/dist/private/Dialog.mjs","../../node_modules/react-aria/dist/private/i18n/useFilter.mjs","../../node_modules/react-aria/dist/private/i18n/useListFormatter.mjs","../../node_modules/react-aria-components/dist/private/HiddenDateInput.mjs","../../node_modules/react-aria/dist/private/intl/datepicker/en-US.mjs","../../node_modules/react-aria/dist/private/datepicker/intlStrings.mjs","../../node_modules/react-aria/dist/private/datepicker/useDatePickerGroup.mjs","../../node_modules/react-aria/dist/private/datepicker/useDateField.mjs","../../node_modules/react-aria/dist/private/datepicker/useDisplayNames.mjs","../../node_modules/react-aria/dist/private/datepicker/useDateSegment.mjs","../../node_modules/react-stately/dist/private/intl/datepicker/en-US.mjs","../../node_modules/react-stately/dist/private/datepicker/intlStrings.mjs","../../node_modules/react-stately/dist/private/datepicker/utils.mjs","../../node_modules/react-stately/dist/private/datepicker/placeholders.mjs","../../node_modules/react-stately/dist/private/datepicker/IncompleteDate.mjs","../../node_modules/react-stately/dist/private/datepicker/useDateFieldState.mjs","../../node_modules/react-aria-components/dist/private/DateField.mjs","../../node_modules/react-aria/dist/private/disclosure/useDisclosure.mjs","../../node_modules/react-stately/dist/private/disclosure/useDisclosureGroupState.mjs","../../node_modules/react-stately/dist/private/disclosure/useDisclosureState.mjs","../../node_modules/react-aria-components/dist/private/Disclosure.mjs","../../node_modules/react-aria/dist/private/focus/useHasTabbableChild.mjs","../../node_modules/react-stately/dist/private/tooltip/useTooltipTriggerState.mjs","../../node_modules/react-aria/dist/private/overlays/useModalOverlay.mjs","../../node_modules/react-aria/dist/private/utils/useViewportSize.mjs","../../node_modules/react-aria-components/dist/private/Modal.mjs","../../node_modules/react-aria/dist/private/radio/utils.mjs","../../node_modules/react-aria/dist/private/radio/useRadio.mjs","../../node_modules/react-aria/dist/private/radio/useRadioGroup.mjs","../../node_modules/react-stately/dist/private/radio/useRadioGroupState.mjs","../../node_modules/react-aria-components/dist/private/RadioGroup.mjs","../../node_modules/react-aria/dist/private/intl/searchfield/en-US.mjs","../../node_modules/react-aria/dist/private/searchfield/intlStrings.mjs","../../node_modules/react-aria/dist/private/searchfield/useSearchField.mjs","../../node_modules/react-stately/dist/private/searchfield/useSearchFieldState.mjs","../../node_modules/react-aria-components/dist/private/SearchField.mjs","../../node_modules/react-aria/dist/private/select/useSelect.mjs","../../node_modules/react-aria/dist/private/select/HiddenSelect.mjs","../../node_modules/react-stately/dist/private/select/useSelectState.mjs","../../node_modules/react-aria-components/dist/private/Select.mjs","../../node_modules/react-aria/dist/private/tabs/utils.mjs","../../node_modules/react-aria/dist/private/tabs/useTab.mjs","../../node_modules/react-aria/dist/private/tabs/useTabPanel.mjs","../../node_modules/react-aria/dist/private/tabs/TabsKeyboardDelegate.mjs","../../node_modules/react-aria/dist/private/tabs/useTabList.mjs","../../node_modules/react-stately/dist/private/list/useSingleSelectListState.mjs","../../node_modules/react-stately/dist/private/tabs/useTabListState.mjs","../../node_modules/react-aria-components/dist/private/Tabs.mjs","../../node_modules/react-aria/dist/private/button/useToggleButton.mjs","../../node_modules/react-aria/dist/private/toolbar/useToolbar.mjs","../../node_modules/react-aria/dist/private/button/useToggleButtonGroup.mjs","../../node_modules/react-stately/dist/private/toggle/useToggleGroupState.mjs","../../node_modules/react-aria-components/dist/private/ToggleButtonGroup.mjs","../../node_modules/react-aria-components/dist/private/ToggleButton.mjs","../../node_modules/react-aria/dist/private/overlays/useModal.mjs","../../node_modules/react-aria/dist/private/tooltip/useTooltip.mjs","../../node_modules/react-aria/dist/private/tooltip/useTooltipTrigger.mjs","../../node_modules/react-aria-components/dist/private/Tooltip.mjs","../../packages/@ourworldindata/components/src/LabeledSwitch/LabeledSwitch.tsx","../../packages/@ourworldindata/components/src/Checkbox.tsx","../../packages/@ourworldindata/components/src/RadioButton.tsx","../../packages/@ourworldindata/components/src/closeButton/CloseButton.tsx","../../packages/@ourworldindata/components/src/OverlayHeader.tsx","../../packages/@ourworldindata/components/src/TextInput.tsx","../../packages/@ourworldindata/components/src/CodeSnippet/hydrateCodeSnippets.tsx","../../packages/@ourworldindata/components/src/icons/DownloadIconFull.tsx","../../packages/@ourworldindata/components/src/icons/DownloadIconSelected.tsx","../../packages/@ourworldindata/components/src/DownloadButton/DownloadButton.tsx","../../packages/@ourworldindata/components/src/DownloadButton/DownloadButtonLink.tsx","../../packages/@ourworldindata/components/src/DownloadApiOptions/DownloadApiOptions.tsx","../../packages/@ourworldindata/components/src/Button/Button.tsx","../../packages/@ourworldindata/components/src/Halo/Halo.tsx","../../packages/@ourworldindata/components/src/BodyPortal/BodyPortal.tsx","../../packages/@ourworldindata/components/src/loadingIndicator/LoadingIndicator.tsx","../../packages/@ourworldindata/components/src/NonRedistributableDataNotice/NonRedistributableDataNotice.tsx","../../packages/@ourworldindata/components/src/GrapherTabIcon.tsx","../../packages/@ourworldindata/components/src/GrapherTrendArrow.tsx","../../packages/@ourworldindata/components/src/usePrefersReducedMotion.ts","../../packages/@ourworldindata/grapher/src/schema/defaultGrapherConfig.ts","../../packages/@ourworldindata/grapher/src/core/GrapherConstants.ts","../../node_modules/mobx-react-lite/es/utils/assertEnvironment.js","../../node_modules/mobx-react-lite/es/utils/observerBatching.js","../../node_modules/mobx-react-lite/es/utils/printDebugValue.js","../../node_modules/mobx-react-lite/es/utils/UniversalFinalizationRegistry.js","../../node_modules/mobx-react-lite/es/utils/observerFinalizationRegistry.js","../../node_modules/mobx-react-lite/es/staticRendering.js","../../node_modules/mobx-react-lite/es/useObserver.js","../../node_modules/mobx-react-lite/es/observer.js","../../node_modules/mobx-react-lite/es/index.js","../../node_modules/mobx-react/dist/mobxreact.esm.js","../../packages/@ourworldindata/grapher/src/selection/SelectionArray.ts","../../packages/@ourworldindata/core-table/src/ErrorValues.ts","../../packages/@ourworldindata/core-table/src/OwidTableUtil.ts","../../packages/@ourworldindata/core-table/src/CoreTableColumns.ts","../../node_modules/papaparse/papaparse.min.js","../../packages/@ourworldindata/core-table/src/CoreTableUtils.ts","../../packages/@ourworldindata/core-table/src/Transforms.ts","../../packages/@ourworldindata/core-table/src/CoreTable.ts","../../packages/@ourworldindata/core-table/src/OwidTable.ts","../../packages/@ourworldindata/grapher/src/interaction/InteractionState.ts","../../packages/@ourworldindata/grapher/src/chart/ChartUtils.tsx","../../packages/@ourworldindata/grapher/src/fullScreen/FullScreen.tsx","../../packages/@ourworldindata/grapher/src/tooltip/TooltipProps.ts","../../packages/@ourworldindata/grapher/src/axis/AxisUtils.ts","../../packages/@ourworldindata/grapher/src/tooltip/TooltipContents.tsx","../../packages/@ourworldindata/grapher/src/tooltip/TooltipState.ts","../../packages/@ourworldindata/grapher/src/tooltip/TooltipCard.tsx","../../packages/@ourworldindata/grapher/src/tooltip/TooltipContainer.tsx","../../packages/@ourworldindata/grapher/src/modal/Modal.tsx","../../node_modules/indefinite/dist/indefinite.js","../../node_modules/rematrix/dist/rematrix.es.js","../../node_modules/flip-toolkit/lib/index.es.js","../../node_modules/react-flip-toolkit/lib/index.es.js","../../packages/@ourworldindata/grapher/src/controls/SortIcon.tsx","../../packages/@ourworldindata/grapher/src/controls/Dropdown.tsx","../../packages/@ourworldindata/grapher/src/selection/MapSelectionArray.ts","../../packages/@ourworldindata/grapher/src/mapCharts/MapChartConstants.ts","../../packages/@ourworldindata/grapher/src/mapCharts/MapConfig.ts","../../packages/@ourworldindata/grapher/src/core/RegionGroups.ts","../../packages/@ourworldindata/grapher/src/controls/SearchField.tsx","../../packages/@ourworldindata/grapher/src/core/loadCatalogData.ts","../../packages/@ourworldindata/grapher/src/entitySelector/EntitySelectorConstants.ts","../../packages/@ourworldindata/grapher/src/entitySelector/EntitySelector.tsx","../../packages/@ourworldindata/grapher/src/modal/EntitySelectorModal.tsx","../../packages/@ourworldindata/grapher/src/download.ts","../../packages/@ourworldindata/grapher/src/hooks.ts","../../packages/@ourworldindata/grapher/src/tabs/Tabs.tsx","../../packages/@ourworldindata/grapher/src/modal/DownloadModal.tsx","../../packages/@ourworldindata/grapher/src/modal/SourcesKeyDataTable.tsx","../../packages/@ourworldindata/grapher/src/modal/SourcesDescriptions.tsx","../../packages/@ourworldindata/grapher/src/controls/PortaledPopover.tsx","../../packages/@ourworldindata/grapher/src/tabs/TabsWithDropdown.tsx","../../packages/@ourworldindata/grapher/src/modal/SourcesModal.tsx","../../packages/@ourworldindata/grapher/src/controls/CommandPalette.tsx","../../packages/@ourworldindata/grapher/src/modal/EmbedModal.tsx","../../node_modules/tinykeys/dist/tinykeys.mjs","../../packages/@ourworldindata/grapher/src/core/applyDisplayAndConversionFactor.ts","../../packages/@ourworldindata/grapher/src/core/LegacyToOwidTable.ts","../../packages/@ourworldindata/grapher/src/sidePanel/SidePanel.tsx","../../packages/@ourworldindata/grapher/src/slideInDrawer/SlideInDrawer.tsx","../../packages/@ourworldindata/grapher/src/captionedChart/LogosSVG.tsx","../../packages/@ourworldindata/grapher/src/captionedChart/Logos.tsx","../../packages/@ourworldindata/grapher/src/header/Header.tsx","../../packages/@ourworldindata/grapher/src/controls/ShareMenu.tsx","../../packages/@ourworldindata/grapher/src/controls/ActionButtons.tsx","../../packages/@ourworldindata/grapher/src/footer/Footer.tsx","../../packages/@ourworldindata/grapher/src/timeline/TimelineController.ts","../../packages/@ourworldindata/grapher/src/timeline/TimelineComponent.tsx","../../packages/@ourworldindata/grapher/src/chart/ChartTabs.ts","../../packages/@ourworldindata/grapher/src/controls/ContentSwitchers.tsx","../../packages/@ourworldindata/grapher/src/controls/EntitySelectionToggle.tsx","../../packages/@ourworldindata/grapher/src/controls/MapRegionDropdown.tsx","../../packages/@ourworldindata/grapher/src/controls/settings/AxisScaleToggle.tsx","../../packages/@ourworldindata/grapher/src/controls/settings/AbsRelToggle.tsx","../../packages/@ourworldindata/grapher/src/controls/settings/ZoomToggle.tsx","../../packages/@ourworldindata/grapher/src/controls/settings/FacetStrategySelector.tsx","../../packages/@ourworldindata/grapher/src/controls/settings/FacetYDomainToggle.tsx","../../packages/@ourworldindata/grapher/src/controls/settings/NoDataAreaToggle.tsx","../../packages/@ourworldindata/grapher/src/controls/SettingsMenu.tsx","../../packages/@ourworldindata/grapher/src/controls/MapResetButton.tsx","../../packages/@ourworldindata/grapher/src/dataTable/DataTableHelpers.ts","../../packages/@ourworldindata/grapher/src/controls/DataTableFilterDropdown.tsx","../../packages/@ourworldindata/grapher/src/controls/DataTableSearchField.tsx","../../packages/@ourworldindata/grapher/src/controls/MapZoomToSelectionButton.tsx","../../packages/@ourworldindata/grapher/src/controls/MapZoomDropdown.tsx","../../packages/@ourworldindata/grapher/src/controls/controlsRow/ControlsRow.tsx","../../packages/@ourworldindata/grapher/src/noDataMessage/NoDataMessage.tsx","../../packages/@ourworldindata/grapher/src/dataTable/DataTableConstants.ts","../../packages/@ourworldindata/grapher/src/sparkline/Sparkline.tsx","../../packages/@ourworldindata/grapher/src/dataTable/DataTable.tsx","../../packages/@ourworldindata/grapher/src/interaction/Emphasis.ts","../../packages/@ourworldindata/grapher/src/lineCharts/LineChartConstants.ts","../../packages/@ourworldindata/grapher/src/color/CategoricalColorAssigner.ts","../../packages/@ourworldindata/grapher/src/lineCharts/LineChartHelpers.ts","../../packages/@ourworldindata/grapher/src/focus/FocusArray.ts","../../packages/@ourworldindata/grapher/src/lineCharts/LineChartState.ts","../../packages/@ourworldindata/grapher/src/chart/ToleranceNotice.ts","../../packages/@ourworldindata/grapher/src/slopeCharts/SlopeChartState.ts","../../packages/@ourworldindata/grapher/src/barCharts/DiscreteBarChartConstants.ts","../../packages/@ourworldindata/grapher/src/barCharts/DiscreteBarChartState.ts","../../packages/@ourworldindata/grapher/src/stackedCharts/AbstractStackedChartState.ts","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedUtils.ts","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedAreaChartState.ts","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedBarChartState.ts","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedDiscreteBarChartConstants.ts","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedDiscreteBarChartState.ts","../../packages/@ourworldindata/grapher/src/scatterCharts/ScatterPlotChartConstants.ts","../../packages/@ourworldindata/grapher/src/axis/timeAxisTicks.ts","../../packages/@ourworldindata/grapher/src/comparisonLine/ComparisonLineHelpers.ts","../../packages/@ourworldindata/grapher/src/comparisonLine/ComparisonLines.ts","../../packages/@ourworldindata/grapher/src/axis/Axis.ts","../../packages/@ourworldindata/grapher/src/axis/AxisConfig.ts","../../packages/@ourworldindata/grapher/src/scatterCharts/ScatterUtils.ts","../../packages/@ourworldindata/grapher/src/scatterCharts/ScatterPlotChartState.ts","../../packages/@ourworldindata/grapher/src/marimekko/MarimekkoChartState.ts","../../packages/@ourworldindata/grapher/src/dumbbellCharts/DumbbellChartConstants.ts","../../packages/@ourworldindata/grapher/src/dumbbellCharts/DumbbellChartConfig.ts","../../packages/@ourworldindata/grapher/src/dumbbellCharts/DumbbellChartState.ts","../../packages/@ourworldindata/grapher/src/swimlaneCharts/SwimlaneChartConstants.ts","../../packages/@ourworldindata/grapher/src/mapCharts/MapTopology.ts","../../packages/@ourworldindata/grapher/src/mapCharts/MapHelpers.ts","../../packages/@ourworldindata/grapher/src/seriesLabel/RegionTooltipData.ts","../../packages/@ourworldindata/grapher/src/seriesLabel/SeriesLabelState.ts","../../packages/@ourworldindata/grapher/src/rowSeriesLabels/RowSeriesLabelHelpers.ts","../../packages/@ourworldindata/grapher/src/swimlaneCharts/SwimlaneChartHelpers.ts","../../packages/@ourworldindata/grapher/src/swimlaneCharts/SwimlaneChartConfig.ts","../../packages/@ourworldindata/grapher/src/swimlaneCharts/SwimlaneChartState.ts","../../packages/@ourworldindata/grapher/src/mapCharts/MapChartState.ts","../../packages/@ourworldindata/grapher/src/comparisonLine/ComparisonLineConstants.ts","../../packages/@ourworldindata/grapher/src/comparisonLine/VerticalComparisonLine.tsx","../../node_modules/fparser/dist/fparser.js","../../packages/@ourworldindata/grapher/src/comparisonLine/ComparisonLineGenerator.ts","../../packages/@ourworldindata/grapher/src/comparisonLine/CustomComparisonLine.tsx","../../packages/@ourworldindata/grapher/src/comparisonLine/ComparisonLine.tsx","../../packages/@ourworldindata/grapher/src/axis/AxisViews.tsx","../../node_modules/topojson-client/src/identity.js","../../node_modules/topojson-client/src/transform.js","../../node_modules/topojson-client/src/reverse.js","../../node_modules/topojson-client/src/feature.js","../../packages/@ourworldindata/grapher/src/mapCharts/d3-geo-projection.ts","../../packages/@ourworldindata/grapher/src/mapCharts/MapProjections.ts","../../packages/@ourworldindata/grapher/src/mapCharts/GeoFeatures.ts","../../packages/@ourworldindata/grapher/src/seriesLabel/RegionMap.tsx","../../packages/@ourworldindata/grapher/src/seriesLabel/RegionTooltip.tsx","../../packages/@ourworldindata/grapher/src/seriesLabel/SeriesLabel.tsx","../../packages/@ourworldindata/grapher/src/verticalLabels/VerticalLabelsConstants.ts","../../packages/@ourworldindata/grapher/src/verticalLabels/VerticalLabelsHelpers.ts","../../packages/@ourworldindata/grapher/src/verticalLabels/VerticalLabels.tsx","../../packages/@ourworldindata/grapher/src/verticalLabels/VerticalLabelsFilterAlgorithms.ts","../../packages/@ourworldindata/grapher/src/verticalLabels/VerticalLabelsState.ts","../../packages/@ourworldindata/grapher/src/lineCharts/LineChartTooltip.tsx","../../packages/@ourworldindata/grapher/src/legend/LegendStyleConfig.ts","../../packages/@ourworldindata/grapher/src/legend/HorizontalColorLegendConstants.ts","../../packages/@ourworldindata/grapher/src/legend/HorizontalNumericColorLegend.tsx","../../packages/@ourworldindata/grapher/src/legend/HorizontalNumericColorLegendState.ts","../../packages/@ourworldindata/grapher/src/lineCharts/LineChartActiveTimeMarkers.tsx","../../packages/@ourworldindata/grapher/src/scatterCharts/MultiColorPolyline.tsx","../../packages/@ourworldindata/grapher/src/lineCharts/Lines.tsx","../../packages/@ourworldindata/grapher/src/lineCharts/LineChart.tsx","../../packages/@ourworldindata/grapher/src/scatterCharts/NoDataSection.tsx","../../packages/@ourworldindata/grapher/src/slopeCharts/SlopeChartHelpers.ts","../../packages/@ourworldindata/grapher/src/slopeCharts/Slope.tsx","../../packages/@ourworldindata/grapher/src/slopeCharts/SlopeChartXAxis.tsx","../../packages/@ourworldindata/grapher/src/slopeCharts/SlopeChart.tsx","../../packages/@ourworldindata/grapher/src/barCharts/DiscreteBarChartHelpers.ts","../../node_modules/@react-spring/rafz/dist/react-spring_rafz.modern.mjs","../../node_modules/@react-spring/shared/dist/react-spring_shared.modern.mjs","../../node_modules/@react-spring/animated/dist/react-spring_animated.modern.mjs","../../node_modules/@react-spring/core/dist/react-spring_core.modern.mjs","../../node_modules/@react-spring/web/dist/react-spring_web.modern.mjs","../../packages/@ourworldindata/grapher/src/animation/AnimatedRows.tsx","../../packages/@ourworldindata/grapher/src/barCharts/DiscreteBarChart.tsx","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedConstants.ts","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedAreas.tsx","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedAreaChart.tsx","../../packages/@ourworldindata/grapher/src/legend/VerticalColorLegend.tsx","../../packages/@ourworldindata/grapher/src/legend/VerticalColorLegendState.ts","../../packages/@ourworldindata/grapher/src/legend/HorizontalCategoricalColorLegend.tsx","../../packages/@ourworldindata/grapher/src/legend/HorizontalCategoricalColorLegendState.ts","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedBars.tsx","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedBarChart.tsx","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedDiscreteBarRow.tsx","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedDiscreteBarChart.tsx","../../packages/@ourworldindata/grapher/src/scatterCharts/Triangle.tsx","../../packages/@ourworldindata/grapher/src/scatterCharts/ConnectedScatterLegend.tsx","../../packages/@ourworldindata/grapher/src/scatterCharts/ScatterPoints.tsx","../../packages/@ourworldindata/grapher/src/scatterCharts/ScatterPointsWithLabels.tsx","../../packages/@ourworldindata/grapher/src/scatterCharts/ScatterSizeLegend.tsx","../../packages/@ourworldindata/grapher/src/scatterCharts/ScatterPlotTooltip.tsx","../../packages/@ourworldindata/grapher/src/scatterCharts/ScatterPlotChart.tsx","../../packages/@ourworldindata/grapher/src/marimekko/MarimekkoChartConstants.ts","../../packages/@ourworldindata/grapher/src/marimekko/MarimekkoBars.tsx","../../packages/@ourworldindata/grapher/src/marimekko/MarimekkoChartHelpers.ts","../../packages/@ourworldindata/grapher/src/marimekko/MarimekkoChart.tsx","../../packages/@ourworldindata/grapher/src/arrows/Arrows.tsx","../../packages/@ourworldindata/grapher/src/dumbbellCharts/Dumbbell.tsx","../../packages/@ourworldindata/grapher/src/dumbbellCharts/DumbbellChartHelpers.ts","../../packages/@ourworldindata/grapher/src/dumbbellCharts/DumbbellChartRow.tsx","../../packages/@ourworldindata/grapher/src/horizontalLabelPair/HorizontalLabelPair.tsx","../../packages/@ourworldindata/grapher/src/horizontalLabelPair/HorizontalLabelPairState.ts","../../packages/@ourworldindata/grapher/src/dumbbellCharts/DumbbellTooltips.tsx","../../packages/@ourworldindata/grapher/src/dumbbellCharts/DumbbellChart.tsx","../../packages/@ourworldindata/grapher/src/legend/HorizontalOrdinalColorLegend.tsx","../../packages/@ourworldindata/grapher/src/legend/OrdinalLabelLayout.ts","../../packages/@ourworldindata/grapher/src/legend/HorizontalOrdinalColorLegendState.ts","../../packages/@ourworldindata/grapher/src/swimlaneCharts/SwimlaneSegments.tsx","../../packages/@ourworldindata/grapher/src/swimlaneCharts/SwimlaneRow.tsx","../../packages/@ourworldindata/grapher/src/swimlaneCharts/SwimlaneChartTooltip.tsx","../../packages/@ourworldindata/grapher/src/swimlaneCharts/SwimlaneChart.tsx","../../packages/@ourworldindata/grapher/src/mapCharts/MapSparkline.tsx","../../packages/@ourworldindata/grapher/src/mapCharts/MapTooltip.tsx","../../packages/@ourworldindata/grapher/src/mapCharts/d3-bboxCollide.js","../../node_modules/point-in-polygon-hao/dist/esm/index.js","../../node_modules/@turf/helpers/dist/esm/index.js","../../node_modules/@turf/invariant/dist/esm/index.js","../../node_modules/@turf/boolean-point-in-polygon/dist/esm/index.js","../../node_modules/sweepline-intersections/dist/sweeplineIntersections.esm.js","../../node_modules/@turf/line-intersect/dist/esm/index.js","../../node_modules/@turf/meta/dist/esm/index.js","../../node_modules/@turf/polygon-to-line/dist/esm/index.js","../../node_modules/@turf/boolean-disjoint/dist/esm/index.js","../../node_modules/@turf/boolean-intersects/dist/esm/index.js","../../packages/@ourworldindata/grapher/src/mapCharts/MapAnnotationPlacements.ts","../../packages/@ourworldindata/grapher/src/mapCharts/MapAnnotations.ts","../../packages/@ourworldindata/grapher/src/mapCharts/MapComponents.tsx","../../packages/@ourworldindata/grapher/src/mapCharts/ChoroplethMap.tsx","../../node_modules/versor/src/index.js","../../packages/@ourworldindata/grapher/src/mapCharts/GlobeController.ts","../../packages/@ourworldindata/grapher/src/mapCharts/ChoroplethGlobe.tsx","../../packages/@ourworldindata/grapher/src/mapCharts/MapChart.tsx","../../packages/@ourworldindata/grapher/src/anchoredLabels/AnchoredLabelsState.ts","../../packages/@ourworldindata/grapher/src/anchoredLabels/AnchoredLabelsConstants.ts","../../packages/@ourworldindata/grapher/src/anchoredLabels/AnchoredLabels.tsx","../../packages/@ourworldindata/grapher/src/lineCharts/LineChartThumbnail.tsx","../../packages/@ourworldindata/grapher/src/slopeCharts/SlopeChartThumbnail.tsx","../../packages/@ourworldindata/grapher/src/barCharts/DiscreteBarChartThumbnail.tsx","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedAreaChartThumbnail.tsx","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedBarChartThumbnail.tsx","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedDiscreteBarChartThumbnail.tsx","../../packages/@ourworldindata/grapher/src/scatterCharts/ScatterPlotChartThumbnail.tsx","../../packages/@ourworldindata/grapher/src/marimekko/MarimekkoInternalLabels.tsx","../../packages/@ourworldindata/grapher/src/marimekko/MarimekkoChartThumbnail.tsx","../../packages/@ourworldindata/grapher/src/dumbbellCharts/DumbbellChartThumbnail.tsx","../../packages/@ourworldindata/grapher/src/swimlaneCharts/SwimlaneChartThumbnail.tsx","../../packages/@ourworldindata/grapher/src/mapCharts/MapChartThumbnail.tsx","../../packages/@ourworldindata/grapher/src/chart/ChartTypeMap.tsx","../../packages/@ourworldindata/grapher/src/facet/FacetChartUtils.ts","../../packages/@ourworldindata/grapher/src/facet/FacetChart.tsx","../../packages/@ourworldindata/grapher/src/facet/FacetMap.tsx","../../packages/@ourworldindata/grapher/src/chart/ChartAreaContent.tsx","../../packages/@ourworldindata/grapher/src/chart/StaticChartWrapper.tsx","../../packages/@ourworldindata/grapher/src/captionedChart/CaptionedChart.tsx","../../packages/@ourworldindata/grapher/src/chart/Chart.tsx","../../packages/@ourworldindata/grapher/src/core/Grapher.tsx","../../node_modules/url-join/lib/url-join.js","../../packages/@ourworldindata/grapher/src/core/loadVariable.ts","../../packages/@ourworldindata/grapher/src/core/loadGrapherTableHelpers.ts","../../packages/@ourworldindata/grapher/src/core/EntityCodes.ts","../../packages/@ourworldindata/grapher/src/core/EntityUrlBuilder.ts","../../packages/@ourworldindata/grapher/src/core/GrapherUrlMigrations.ts","../../packages/@ourworldindata/grapher/src/schema/migrations/helpers.ts","../../packages/@ourworldindata/grapher/src/schema/migrations/migrations.ts","../../packages/@ourworldindata/grapher/src/schema/migrations/migrate.ts","../../packages/@ourworldindata/grapher/src/captionedChart/StaticChartRasterizer.tsx","../../packages/@ourworldindata/grapher/src/chart/DimensionSlot.ts","../../packages/@ourworldindata/grapher/src/core/GrapherAnalytics.ts","../../packages/@ourworldindata/grapher/src/core/GrapherUrl.ts","../../packages/@ourworldindata/grapher/src/core/PeerCountrySelection.ts","../../packages/@ourworldindata/grapher/src/core/GrapherQueryParamParser.ts","../../packages/@ourworldindata/grapher/src/core/relatedQuestion.ts","../../packages/@ourworldindata/grapher/src/core/staffControls.ts","../../packages/@ourworldindata/grapher/src/core/sourcesLine.ts","../../packages/@ourworldindata/grapher/src/core/GrapherState.tsx","../../packages/@ourworldindata/grapher/src/chart/guidedChartUtils.ts","../../packages/@ourworldindata/grapher/src/core/FetchingGrapher.tsx","../../packages/@ourworldindata/grapher/src/controls/VerticalScrollContainer.tsx","../../packages/@ourworldindata/grapher/src/controls/entityPicker/EntityPicker.tsx","../../packages/@ourworldindata/grapher/src/slideshowController/SlideShowController.tsx","../../packages/@ourworldindata/grapher/src/core/GrapherUseHelpers.tsx","../../site/search/searchClient.ts","../../packages/@ourworldindata/explorer/src/ExplorerConstants.ts","../../packages/@ourworldindata/explorer/src/gridLang/GridLangConstants.ts","../../packages/@ourworldindata/explorer/src/ExplorerControls.tsx","../../packages/@ourworldindata/explorer/src/gridLang/GrammarUtils.ts","../../packages/@ourworldindata/explorer/src/gridLang/GridCell.ts","../../packages/@ourworldindata/explorer/src/gridLang/GridProgram.ts","../../packages/@ourworldindata/explorer/src/ColumnGrammar.ts","../../packages/@ourworldindata/explorer/src/GrapherGrammar.ts","../../packages/@ourworldindata/explorer/src/ExplorerDecisionMatrix.ts","../../packages/@ourworldindata/explorer/src/ExplorerGrammar.ts","../../packages/@ourworldindata/explorer/src/ExplorerProgram.ts","../../packages/@ourworldindata/explorer/src/urlMigrations/LegacyCovidUrlMigration.ts","../../packages/@ourworldindata/explorer/src/urlMigrations/ExplorerUrlMigrationUtils.ts","../../packages/@ourworldindata/explorer/src/urlMigrations/CO2UrlMigration.ts","../../packages/@ourworldindata/explorer/src/urlMigrations/EnergyUrlMigration.ts","../../packages/@ourworldindata/explorer/src/urlMigrations/CovidUrlMigration.ts","../../packages/@ourworldindata/explorer/src/urlMigrations/ExplorerUrlMigrations.ts","../../packages/@ourworldindata/explorer/src/Explorer.tsx","../../packages/@ourworldindata/explorer/src/ExplorerUtils.ts","../../site/search/searchUtils.tsx","../../site/NotFoundPageForm.tsx","../../site/SiteAnalytics.ts","../../site/NotFoundPageMain.tsx","../../site/SiteToolsButton.tsx","../../site/Feedback.tsx","../../site/FeedbackPageMain.tsx","../../node_modules/@marsidev/react-turnstile/dist/index.js","../../site/DonateForm.tsx","../../site/runDonateForm.tsx","../../site/multiembedder/MultiEmbedder.tsx","../../site/hacks.ts","../../node_modules/@fortawesome/free-brands-svg-icons/index.mjs","../../site/SiteConstants.ts","../../site/blocks/GalleryArrow.tsx","../../site/GrapherImage.tsx","../../site/blocks/AllChartsListItem.tsx","../../site/GrapherFigureView.tsx","../../site/GrapherWithFallback.tsx","../../site/gdocs/DocumentContext.ts","../../site/blocks/RelatedCharts.tsx","../../node_modules/@tanstack/query-core/build/modern/subscribable.js","../../node_modules/@tanstack/query-core/build/modern/timeoutManager.js","../../node_modules/@tanstack/query-core/build/modern/utils.js","../../node_modules/@tanstack/query-core/build/modern/focusManager.js","../../node_modules/@tanstack/query-core/build/modern/thenable.js","../../node_modules/@tanstack/query-core/build/modern/notifyManager.js","../../node_modules/@tanstack/query-core/build/modern/onlineManager.js","../../node_modules/@tanstack/query-core/build/modern/retryer.js","../../node_modules/@tanstack/query-core/build/modern/removable.js","../../node_modules/@tanstack/query-core/build/modern/query.js","../../node_modules/@tanstack/query-core/build/modern/queryObserver.js","../../node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js","../../node_modules/@tanstack/query-core/build/modern/infiniteQueryObserver.js","../../node_modules/@tanstack/query-core/build/modern/mutation.js","../../node_modules/@tanstack/query-core/build/modern/mutationCache.js","../../node_modules/@tanstack/query-core/build/modern/mutationObserver.js","../../node_modules/@tanstack/query-core/build/modern/queriesObserver.js","../../node_modules/@tanstack/query-core/build/modern/queryCache.js","../../node_modules/@tanstack/query-core/build/modern/queryClient.js","../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js","../../node_modules/@tanstack/react-query/build/modern/IsRestoringProvider.js","../../node_modules/@tanstack/react-query/build/modern/QueryErrorResetBoundary.js","../../node_modules/@tanstack/react-query/build/modern/errorBoundaryUtils.js","../../node_modules/@tanstack/react-query/build/modern/suspense.js","../../node_modules/@tanstack/react-query/build/modern/useQueries.js","../../node_modules/@tanstack/react-query/build/modern/useBaseQuery.js","../../node_modules/@tanstack/react-query/build/modern/useQuery.js","../../node_modules/@tanstack/react-query/build/modern/queryOptions.js","../../node_modules/@tanstack/react-query/build/modern/useIsFetching.js","../../node_modules/@tanstack/react-query/build/modern/useMutation.js","../../node_modules/@tanstack/react-query/build/modern/useInfiniteQuery.js","../../site/search/SearchChartHitDataDisplay.tsx","../../node_modules/@swc/helpers/esm/_define_property.js","../../node_modules/@swc/helpers/esm/_object_spread.js","../../node_modules/@swc/helpers/esm/_object_spread_props.js","../../node_modules/@swc/helpers/esm/_object_without_properties_loose.js","../../node_modules/@swc/helpers/esm/_object_without_properties.js","../../node_modules/instantsearch.js/es/lib/utils/escape-html.js","../../node_modules/instantsearch.js/es/lib/utils/escape-highlight.js","../../node_modules/instantsearch.js/es/lib/utils/getHighlightedParts.js","../../node_modules/instantsearch.js/es/lib/utils/getPropertyByPath.js","../../node_modules/instantsearch.js/es/lib/utils/safelyRunOnBrowser.js","../../node_modules/instantsearch-ui-components/dist/es/lib/cx.js","../../node_modules/instantsearch-ui-components/dist/es/components/Highlight.js","../../node_modules/react-instantsearch-core/dist/es/connectors/usePoweredBy.js","../../node_modules/react-instantsearch/dist/es/ui/InternalHighlight.js","../../node_modules/react-instantsearch/dist/es/ui/Highlight.js","../../node_modules/react-instantsearch/dist/es/widgets/Highlight.js","../../node_modules/react-instantsearch/dist/es/ui/PoweredBy.js","../../node_modules/react-instantsearch/dist/es/widgets/PoweredBy.js","../../node_modules/react-instantsearch/dist/es/ui/Snippet.js","../../node_modules/react-instantsearch/dist/es/widgets/Snippet.js","../../site/search/SearchChartHitHeader.tsx","../../site/search/queries.ts","../../site/search/SearchChartHitRichDataTypes.ts","../../site/search/SearchChartHitRichDataHelpers.ts","../../site/search/SearchChartHitSmallHelpers.ts","../../site/search/SearchChartHitSmall.tsx","../../site/search/SearchChartHitDataTable.tsx","../../site/search/SearchChartHitCaptionedLink.tsx","../../site/search/SearchChartHitCaptionedTable.tsx","../../site/search/SearchChartHitThumbnail.tsx","../../site/search/SearchChartHitCaptionedThumbnail.tsx","../../site/search/SearchChartHitRichDataFallback.tsx","../../site/search/SearchChartHitRichData.tsx","../../site/search/SearchChartHitComponent.tsx","../../node_modules/@remix-run/router/dist/router.js","../../node_modules/react-router-dom-v5-compat/node_modules/react-router/dist/index.js","../../node_modules/react-router-dom-v5-compat/dist/index.js","../../site/search/searchState.ts","../../node_modules/@algolia/client-common/dist/common.js","../../node_modules/@algolia/requester-browser-xhr/dist/requester.xhr.js","../../node_modules/algoliasearch/dist/lite/builds/browser.js","../../node_modules/@algolia/requester-fetch/dist/requester.fetch.browser.js","../../site/search/searchClients.ts","../../site/search/SearchResultHeaderSkeleton.tsx","../../site/search/SearchDataTopicsResultsSkeleton.tsx","../../site/search/SearchDataResultsSkeleton.tsx","../../site/FeaturedMetrics.tsx","../../site/queryClient.ts","../../site/SiteQueryClientProvider.tsx","../../site/RelatedDataCharts.tsx","../../site/DownloadSection.tsx","../../site/dataPage.ts","../../site/gdocs/AttachmentsContext.ts","../../site/hooks.ts","../../site/gdocs/utils.ts","../../site/gdocs/DebugContext.ts","../../site/gdocs/components/BlockErrorBoundary.tsx","../../node_modules/react-zoom-pan-pinch/dist/index.esm.js","../../site/Lightbox.tsx","../../site/gdocs/components/FloatingDownloadButton.tsx","../../site/gdocs/components/Image.tsx","../../site/gdocs/components/LinkedAuthor.tsx","../../site/gdocs/components/Byline.tsx","../../site/gdocs/components/Callout.tsx","../../site/gdocs/components/ChartPreview.tsx","../../site/gdocs/components/LinkedA.tsx","../../site/Footnote.tsx","../../site/gdocs/components/SpanElement.tsx","../../site/gdocs/components/SpanElements.tsx","../../site/multiDim/api.ts","../../site/multiDim/hooks.ts","../../site/multiDim/multiDimSettings.ts","../../site/multiDim/DimensionDropdown.tsx","../../site/multiDim/MultiDimDropdowns.tsx","../../site/multiDim/MultiDimEmbedSettingsPanel.tsx","../../site/multiDim/MultiDim.tsx","../../site/MultiDimEmbed.tsx","../../site/gdocs/components/Chart.tsx","../../site/gdocs/components/ChartStory.tsx","../../site/gdocs/components/Donors.tsx","../../site/gdocs/components/Paragraph.tsx","../../site/gdocs/components/layout.ts","../../site/gdocs/components/PullQuote.tsx","../../site/gdocs/components/ChartThumbnail.tsx","../../site/gdocs/components/ChartRows.tsx","../../site/gdocs/components/PullChart.tsx","../../site/AriaAnnouncerUtils.ts","../../site/gdocs/components/GuidedChart.tsx","../../site/gdocs/components/Thumbnail.tsx","../../site/gdocs/components/HybridLinkList.tsx","../../site/gdocs/components/Recirc.tsx","../../site/gdocs/components/SubscribeBanner.tsx","../../site/gdocs/components/List.tsx","../../site/gdocs/components/NumberedList.tsx","../../site/gdocs/components/SDGGrid.tsx","../../site/gdocs/components/People.tsx","../../site/gdocs/components/SDGTableOfContents.tsx","../../site/gdocs/components/MissingData.tsx","../../site/gdocs/components/AdditionalCharts.tsx","../../site/gdocs/components/ProminentLink.tsx","../../site/blocks/ExpandableParagraph.tsx","../../site/topicNewsletter.ts","../../site/TopicNewsletterCard.tsx","../../site/gdocs/components/TopicPageIntro.tsx","../../node_modules/react-horizontal-scrolling-menu/dist/index.mjs","../../site/gdocs/components/NarrativeChart.tsx","../../site/gdocs/components/KeyInsights.tsx","../../site/gdocs/components/ResearchAndWriting.tsx","../../site/gdocs/components/AllCharts.tsx","../../site/gdocs/components/Video.tsx","../../site/gdocs/components/StaticViz.tsx","../../site/gdocs/components/Table.tsx","../../site/gdocs/components/ExplorerTiles.tsx","../../site/gdocs/components/KeyIndicator.tsx","../../site/gdocs/components/KeyIndicatorCollection.tsx","../../site/gdocs/components/PillRow.tsx","../../site/gdocs/components/NewsletterIcon.tsx","../../site/Newsletter/mailchimpSignup.ts","../../site/Newsletter/useNewsletterSpamProtection.ts","../../site/Newsletter/NewsletterSpamProtection.tsx","../../site/Newsletter/emailNotificationsApi.ts","../../site/Newsletter/NewsletterOption.tsx","../../site/Newsletter/subscribePrefill.ts","../../site/Newsletter/newsletterCopy.tsx","../../site/Newsletter/NewsletterSignupForm.tsx","../../site/NewsletterSubscription.tsx","../../site/gdocs/components/AnnouncementsIcon.tsx","../../site/OwidSocials.tsx","../../site/newsletter.ts","../../site/latest/latestUtils.ts","../../site/gdocs/components/HomepageIntro.tsx","../../site/search/SearchContext.tsx","../../site/search/searchHooks.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/createRef.js","../../node_modules/@algolia/autocomplete-shared/dist/esm/debounce.js","../../node_modules/@algolia/autocomplete-shared/dist/esm/flatten.js","../../node_modules/@algolia/autocomplete-shared/dist/esm/generateAutocompleteId.js","../../node_modules/@algolia/autocomplete-shared/dist/esm/getAttributeValueByPath.js","../../node_modules/@algolia/autocomplete-shared/dist/esm/getItemsCount.js","../../node_modules/@algolia/autocomplete-shared/dist/esm/isEqual.js","../../node_modules/@algolia/autocomplete-shared/dist/esm/noop.js","../../node_modules/@algolia/autocomplete-shared/dist/esm/safelyRunOnBrowser.js","../../node_modules/@algolia/autocomplete-shared/dist/esm/version.js","../../node_modules/@algolia/autocomplete-shared/dist/esm/userAgents.js","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createClickedEvent.js","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/isModernInsightsClient.js","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createSearchInsightsApi.js","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createViewedEvents.js","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/isAlgoliaInsightsHit.js","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createAlgoliaInsightsPlugin.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/createCancelablePromise.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/createCancelablePromiseList.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/createConcurrentSafePromise.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getNextActiveItemId.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getNormalizedSources.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getPluginSubmitPromise.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getActiveItem.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getAutocompleteElementId.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/isOrContainsNode.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/isSamsung.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/mapToAlgoliaResponse.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getNativeEvent.js","../../node_modules/@algolia/autocomplete-core/dist/esm/createStore.js","../../node_modules/@algolia/autocomplete-core/dist/esm/getAutocompleteSetters.js","../../node_modules/@algolia/autocomplete-core/dist/esm/getDefaultProps.js","../../node_modules/@algolia/autocomplete-core/dist/esm/reshape.js","../../node_modules/@algolia/autocomplete-core/dist/esm/resolve.js","../../node_modules/@algolia/autocomplete-core/dist/esm/onInput.js","../../node_modules/@algolia/autocomplete-core/dist/esm/onKeyDown.js","../../node_modules/@algolia/autocomplete-core/dist/esm/getPropGetters.js","../../node_modules/@algolia/autocomplete-core/dist/esm/metadata.js","../../node_modules/@algolia/autocomplete-core/dist/esm/getCompletion.js","../../node_modules/@algolia/autocomplete-core/dist/esm/stateReducer.js","../../node_modules/@algolia/autocomplete-core/dist/esm/createAutocomplete.js","../../node_modules/htm/dist/htm.module.js","../../node_modules/@algolia/autocomplete-js/dist/esm/elements/ClearIcon.js","../../node_modules/@algolia/autocomplete-js/dist/esm/utils/getHTMLElement.js","../../node_modules/@algolia/autocomplete-js/dist/esm/utils/mergeClassNames.js","../../node_modules/@algolia/autocomplete-js/dist/esm/utils/mergeDeep.js","../../node_modules/@algolia/autocomplete-js/dist/esm/utils/pickBy.js","../../node_modules/@algolia/autocomplete-js/dist/esm/utils/setProperties.js","../../node_modules/@algolia/autocomplete-js/dist/esm/getCreateDomElement.js","../../node_modules/@algolia/autocomplete-js/dist/esm/elements/Input.js","../../node_modules/@algolia/autocomplete-js/dist/esm/elements/LoadingIcon.js","../../node_modules/@algolia/autocomplete-js/dist/esm/elements/SearchIcon.js","../../node_modules/@algolia/autocomplete-js/dist/esm/createAutocompleteDom.js","../../node_modules/@algolia/autocomplete-js/dist/esm/createEffectWrapper.js","../../node_modules/@algolia/autocomplete-js/dist/esm/createReactiveWrapper.js","../../node_modules/preact/dist/preact.module.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/constants/index.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/highlight/parseAttribute.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/highlight/parseAlgoliaHitHighlight.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/highlight/isPartHighlighted.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/highlight/reverseHighlightedParts.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/highlight/parseAlgoliaHitReverseHighlight.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/highlight/parseAlgoliaHitSnippet.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/highlight/parseAlgoliaHitReverseSnippet.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/requester/createRequester.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/utils/getAppIdAndApiKey.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/search/fetchAlgoliaResults.js","../../node_modules/@algolia/autocomplete-js/dist/esm/components/Highlight.js","../../node_modules/@algolia/autocomplete-js/dist/esm/components/ReverseHighlight.js","../../node_modules/@algolia/autocomplete-js/dist/esm/components/ReverseSnippet.js","../../node_modules/@algolia/autocomplete-js/dist/esm/components/Snippet.js","../../node_modules/@algolia/autocomplete-js/dist/esm/getDefaultOptions.js","../../node_modules/@algolia/autocomplete-js/dist/esm/getPanelPlacementStyle.js","../../node_modules/@algolia/autocomplete-js/dist/esm/render.js","../../node_modules/@algolia/autocomplete-js/dist/esm/userAgents.js","../../node_modules/@algolia/autocomplete-js/dist/esm/autocomplete.js","../../node_modules/@algolia/autocomplete-js/dist/esm/requesters/createAlgoliaRequester.js","../../node_modules/@algolia/autocomplete-js/dist/esm/requesters/getAlgoliaResults.js","../../node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/addHighlightedAttribute.js","../../node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/constants.js","../../node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/getLocalStorage.js","../../node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/createLocalStorage.js","../../node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/createStorageApi.js","../../node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/getTemplates.js","../../node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/createRecentSearchesPlugin.js","../../node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/search.js","../../node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/createLocalStorageRecentSearchesPlugin.js","../../site/search/synonymUtils.ts","../../site/search/SearchFilterPill.tsx","../../site/search/debouncePromise.ts","../../site/search/Autocomplete.tsx","../../site/gdocs/components/HomepageSearch.tsx","../../site/gdocs/components/DataInsightDateline.tsx","../../site/gdocs/components/LatestCarousel.tsx","../../site/gdocs/components/latestCarouselItems.ts","../../site/gdocs/components/LatestDataInsightsBlock.tsx","../../site/gdocs/components/Socials.tsx","../../site/gdocs/components/Person.tsx","../../bespoke/shared/bespokeComponentRegistry.ts","../../bespoke/shared/bespokeComponentTypes.ts","../../bespoke/shared/bespokeComponentShadowDom.ts","../../bespoke/shared/bespokeComponentUrls.ts","../../site/gdocs/components/BespokeComponent.tsx","../../site/gdocs/components/Expander.tsx","../../site/gdocs/components/ResourcePanel.tsx","../../site/gdocs/components/Cta.tsx","../../site/search/SearchDataInsightsResultsSkeleton.tsx","../../site/search/SearchDataInsightHit.tsx","../../site/FeaturedDataInsights.tsx","../../site/gdocs/components/ExploreDataSection.tsx","../../site/gdocs/components/LTPTableOfContents.tsx","../../site/gdocs/components/DataCallout.tsx","../../site/gdocs/components/DataCalloutGroup.tsx","../../site/gdocs/components/CountryProfileSelector.tsx","../../site/gdocs/components/ArticleBlock.tsx","../../site/gdocs/components/gdocComponentUtils.ts","../../site/gdocs/components/ArticleBlocks.tsx","../../site/datapageUtils.ts","../../site/IndicatorMetadataBox.tsx","../../site/KeyDataTable.tsx","../../site/AboutThisData.tsx","../../site/DataPageResearchAndWriting.tsx","../../site/MetadataSection.tsx","../../site/DataPageV2Content.tsx","../../site/gdocs/components/Credits.tsx","../../site/gdocs/components/Footnotes.tsx","../../site/Breadcrumb/Breadcrumb.tsx","../../site/gdocs/components/OwidGdocHeader.tsx","../../site/blocks/StickyNav.tsx","../../site/gdocs/components/CitationSection.tsx","../../site/SiteLogos.tsx","../../site/archive/queries.ts","../../site/archive/versions.ts","../../site/archive/ArchiveNavigation.tsx","../../site/archive/VersionsDrawer.tsx","../../site/gdocs/components/PastVersionsSection.tsx","../../site/gdocs/components/LicenseSection.tsx","../../site/useClearHashOnReturnToTop.ts","../../site/useKeepActiveTocRowInView.ts","../../site/useTocScrollSpy.ts","../../site/useWideBlockInView.ts","../../site/SidebarTableOfContents.tsx","../../site/gdocs/pages/GdocPost.tsx","../../site/gdocs/components/LatestBreadcrumb.tsx","../../site/gdocs/components/LatestCarouselSection.tsx","../../site/gdocs/components/CopyLinkButton.tsx","../../site/gdocs/components/RelatedTopicsList.tsx","../../site/gdocs/components/AvatarByline.tsx","../../site/gdocs/components/StandalonePostBody.tsx","../../site/gdocs/socialText.ts","../../site/gdocs/components/CopySocialButton.tsx","../../site/gdocs/pages/DataInsight.tsx","../../site/gdocs/pages/Fragment.tsx","../../site/gdocs/pages/Homepage.tsx","../../site/gdocs/pages/Author.tsx","../../site/gdocs/pages/AboutPage.tsx","../../site/gdocs/pages/Announcement.tsx","../../site/gdocs/pages/Profile.tsx","../../site/gdocs/components/BespokeMetadataBox.tsx","../../site/gdocs/pages/FeaturedViz.tsx","../../site/gdocs/OwidGdoc.tsx","../../site/SiteTools.tsx","../../site/detailsOnDemand.tsx","../../site/collections/DynamicCollection.tsx","../../site/collections/DynamicCollectionPageMain.tsx","../../site/latest/latestHooks.ts","../../site/latest/LatestTopicFacets.tsx","../../site/latest/LatestPageHeader.tsx","../../site/latest/LatestViewToggle.tsx","../../site/latest/latestState.ts","../../site/latest/LatestHitMetadata.tsx","../../site/latest/LatestContext.tsx","../../site/latest/LatestArticleHit.tsx","../../site/latest/LatestDataInsightExpanded.tsx","../../site/latest/LatestDataInsightHit.tsx","../../site/latest/ExpandableText.tsx","../../site/latest/AnnouncementContent.tsx","../../site/latest/LatestAnnouncementHit.tsx","../../site/latest/LatestDataUpdateHit.tsx","../../site/latest/LatestHit.tsx","../../site/NewsletterSignupBlock.tsx","../../site/latest/LatestNewsletterSlot.tsx","../../site/latest/LatestSearchSkeleton.tsx","../../site/search/SearchHorizontalDivider.tsx","../../site/search/SearchNoResults.tsx","../../site/latest/LatestSearch.tsx","../../site/latest/LatestSearchWrapper.tsx","../../site/ExplorerIndex.tsx","../../site/blocks/CookiePreferences.tsx","../../site/CookieNotice.tsx","../../site/CookiePreferencesManager.tsx","../../site/search/SearchAutocompleteContext.tsx","../../site/search/SearchInput.tsx","../../site/search/SearchActiveFilters.tsx","../../site/search/SearchAutocompleteItemContents.tsx","../../site/search/SearchAutocomplete.tsx","../../site/search/SearchCountrySelector.tsx","../../site/search/SearchAutocompleteContextProvider.tsx","../../site/search/SearchResetButton.tsx","../../site/search/Searchbar.tsx","../../site/search/SearchTopicsRefinementList.tsx","../../site/search/SearchResultTypeToggle.tsx","../../site/search/SearchDataTopic.tsx","../../site/search/SearchDataTopicsResults.tsx","../../site/search/SearchResultHeader.tsx","../../site/search/SearchClosestMatchesNotice.tsx","../../site/search/SearchDataResults.tsx","../../site/search/SearchFlatArticleHit.tsx","../../site/search/SearchTopicPageHit.tsx","../../site/search/SearchProfileHit.tsx","../../site/search/SearchWritingResultsSkeleton.tsx","../../site/search/SearchWritingResults.tsx","../../site/search/SearchDataInsightsResults.tsx","../../site/search/SearchTemplatesAll.tsx","../../site/search/SearchTemplatesData.tsx","../../site/search/SearchStackedArticleHit.tsx","../../site/search/SearchWritingTopic.tsx","../../site/search/SearchWritingTopicsResultsSkeleton.tsx","../../site/search/SearchWritingTopicsResults.tsx","../../site/search/SearchTemplatesWriting.tsx","../../site/search/Search.tsx","../../site/search/SearchWrapper.tsx","../../site/gdocs/DebugProvider.tsx","../../site/AriaAnnouncerContext.tsx","../../site/AriaAnnouncer.tsx","../../site/TopicTags.tsx","../../site/multiDim/MultiDimDataPageSettingsPanel.tsx","../../site/multiDim/MultiDimDataPageContent.tsx","../../site/SiteNavigationTopic.tsx","../../site/SiteNavigationTopics.tsx","../../site/SiteAbout.tsx","../../site/SiteResources.tsx","../../site/SiteSearchNavigation.tsx","../../site/SiteMobileArea.tsx","../../site/SiteMobileMenu.tsx","../../site/SiteNavigationToggle.tsx","../../site/SiteNavigation.tsx","../../site/SiteHeader.tsx","../../site/Newsletter/emailNotificationsValidation.ts","../../site/Newsletter/EmailNotificationsPreferenceFields.tsx","../../site/Newsletter/scrollAlertIntoView.ts","../../site/Newsletter/useNotificationPreferences.ts","../../site/Newsletter/EmailNotificationsSubscribeForm.tsx","../../site/Newsletter/SubscribePageLayout.tsx","../../site/Newsletter/SubscribeFlow.tsx","../../site/Newsletter/EmailNotificationsPreferencesForm.tsx","../../node_modules/uuid/dist/stringify.js","../../node_modules/uuid/dist/rng.js","../../node_modules/uuid/dist/v7.js","../../site/userSurvey.ts","../../site/gdocs/components/UserSurvey.tsx","../../site/slideshows/slideshowUtils.ts","../../site/slideshows/SlideLogo.tsx","../../site/slideshows/SlideRenderer.tsx","../../site/slideshows/SiteSlideGrapher.tsx","../../site/slideshows/SiteSlideExplorer.tsx","../../site/slideshows/SiteSlideChartEmbed.tsx","../../site/slideshows/SlideshowPresentation.tsx","../../site/runSiteFooterScripts.tsx","../../site/owid.entry.ts"],"sourcesContent":["'use strict';\nvar check = function (it) {\n  return it && it.Math === Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n  // eslint-disable-next-line es/no-global-this -- safe\n  check(typeof globalThis == 'object' && globalThis) ||\n  check(typeof window == 'object' && window) ||\n  // eslint-disable-next-line no-restricted-globals -- safe\n  check(typeof self == 'object' && self) ||\n  check(typeof global == 'object' && global) ||\n  check(typeof this == 'object' && this) ||\n  // eslint-disable-next-line no-new-func -- fallback\n  (function () { return this; })() || Function('return this')();\n","'use strict';\nmodule.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (error) {\n    return true;\n  }\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n});\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-function-prototype-bind -- safe\n  var test = function () { /* empty */ }.bind();\n  // eslint-disable-next-line no-prototype-builtins -- safe\n  return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n  return call.apply(call, arguments);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n  var descriptor = getOwnPropertyDescriptor(this, V);\n  return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","'use strict';\nmodule.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n  return function () {\n    return call.apply(fn, arguments);\n  };\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n  return stringSlice(toString(it), 8, -1);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar $Object = Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n  // eslint-disable-next-line no-prototype-builtins -- safe\n  return !$Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n  return classof(it) === 'String' ? split(it, '') : $Object(it);\n} : $Object;\n","'use strict';\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n  return it === null || it === undefined;\n};\n","'use strict';\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n  if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n  return it;\n};\n","'use strict';\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n  return IndexedObject(requireObjectCoercible(it));\n};\n","'use strict';\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\nvar documentAll = typeof document == 'object' && document.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nmodule.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) {\n  return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n  return typeof argument == 'function';\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n  return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n  return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n  return arguments.length < 2 ? aFunction(globalThis[namespace]) : globalThis[namespace] && globalThis[namespace][method];\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\nvar navigator = globalThis.navigator;\nvar userAgent = navigator && navigator.userAgent;\n\nmodule.exports = userAgent ? String(userAgent) : '';\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar userAgent = require('../internals/environment-user-agent');\n\nvar process = globalThis.process;\nvar Deno = globalThis.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n  match = v8.split('.');\n  // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n  // but their correct versions are not interesting for us\n  version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n  match = userAgent.match(/Edge\\/(\\d+)/);\n  if (!match || match[1] >= 74) {\n    match = userAgent.match(/Chrome\\/(\\d+)/);\n    if (match) version = +match[1];\n  }\n}\n\nmodule.exports = version;\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/environment-v8-version');\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\nvar $String = globalThis.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n  var symbol = Symbol('symbol detection');\n  // Chrome 38 Symbol has incorrect toString conversion\n  // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n  // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n  // of course, fail.\n  return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n    // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n    !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL &&\n  !Symbol.sham &&\n  typeof Symbol.iterator == 'symbol';\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  var $Symbol = getBuiltIn('Symbol');\n  return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","'use strict';\nvar $String = String;\n\nmodule.exports = function (argument) {\n  try {\n    return $String(argument);\n  } catch (error) {\n    return 'Object';\n  }\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n  if (isCallable(argument)) return argument;\n  throw new $TypeError(tryToString(argument) + ' is not a function');\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n  var func = V[P];\n  return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n  var fn, val;\n  if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n  if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  throw new $TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\nmodule.exports = false;\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n  try {\n    defineProperty(globalThis, key, { value: value, configurable: true, writable: true });\n  } catch (error) {\n    globalThis[key] = value;\n  } return value;\n};\n","'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar globalThis = require('../internals/global-this');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});\n\n(store.versions || (store.versions = [])).push({\n  version: '3.49.0',\n  mode: IS_PURE ? 'pure' : 'global',\n  copyright: '© 2013–2025 Denis Pushkarev (zloirock.ru), 2025–2026 CoreJS Company (core-js.io). All rights reserved.',\n  license: 'https://github.com/zloirock/core-js/blob/v3.49.0/LICENSE',\n  source: 'https://github.com/zloirock/core-js'\n});\n","'use strict';\nvar store = require('../internals/shared-store');\n\nmodule.exports = function (key, value) {\n  return store[key] || (store[key] = value || {});\n};\n","'use strict';\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n  return $Object(requireObjectCoercible(argument));\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n  return hasOwnProperty(toObject(it), key);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.1.toString);\n\nmodule.exports = function (key) {\n  return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = globalThis.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n  if (!hasOwn(WellKnownSymbolsStore, name)) {\n    WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n      ? Symbol[name]\n      : createWellKnownSymbol('Symbol.' + name);\n  } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n  if (!isObject(input) || isSymbol(input)) return input;\n  var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n  var result;\n  if (exoticToPrim) {\n    if (pref === undefined) pref = 'default';\n    result = call(exoticToPrim, input, pref);\n    if (!isObject(result) || isSymbol(result)) return result;\n    throw new $TypeError(\"Can't convert object to primitive value\");\n  }\n  if (pref === undefined) pref = 'number';\n  return ordinaryToPrimitive(input, pref);\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n  var key = toPrimitive(argument, 'string');\n  return isSymbol(key) ? key : key + '';\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\n\nvar document = globalThis.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n  return EXISTS ? document.createElement(it) : {};\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty(createElement('div'), 'a', {\n    get: function () { return 7; }\n  }).a !== 7;\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n  O = toIndexedObject(O);\n  P = toPropertyKey(P);\n  if (IE8_DOM_DEFINE) try {\n    return $getOwnPropertyDescriptor(O, P);\n  } catch (error) { /* empty */ }\n  if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n    value: 42,\n    writable: false\n  }).prototype !== 42;\n});\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n  if (isObject(argument)) return argument;\n  throw new $TypeError($String(argument) + ' is not an object');\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPropertyKey(P);\n  anObject(Attributes);\n  if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n    var current = $getOwnPropertyDescriptor(O, P);\n    if (current && current[WRITABLE]) {\n      O[P] = Attributes.value;\n      Attributes = {\n        configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n        enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n        writable: false\n      };\n    }\n  } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPropertyKey(P);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return $defineProperty(O, P, Attributes);\n  } catch (error) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && function something() { /* empty */ }.name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n  EXISTS: EXISTS,\n  PROPER: PROPER,\n  CONFIGURABLE: CONFIGURABLE\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n  store.inspectSource = function (it) {\n    return functionToString(it);\n  };\n}\n\nmodule.exports = store.inspectSource;\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = globalThis.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","'use strict';\nvar shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n  return keys[key] || (keys[key] = uid(key));\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = globalThis.TypeError;\nvar WeakMap = globalThis.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n  return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n  return function (it) {\n    var state;\n    if (!isObject(it) || (state = get(it)).type !== TYPE) {\n      throw new TypeError('Incompatible receiver, ' + TYPE + ' required');\n    } return state;\n  };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n  var store = shared.state || (shared.state = new WeakMap());\n  /* eslint-disable no-self-assign -- prototype methods protection */\n  store.get = store.get;\n  store.has = store.has;\n  store.set = store.set;\n  /* eslint-enable no-self-assign -- prototype methods protection */\n  set = function (it, metadata) {\n    if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    store.set(it, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return store.get(it) || {};\n  };\n  has = function (it) {\n    return store.has(it);\n  };\n} else {\n  var STATE = sharedKey('state');\n  hiddenKeys[STATE] = true;\n  set = function (it, metadata) {\n    if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    createNonEnumerableProperty(it, STATE, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return hasOwn(it, STATE) ? it[STATE] : {};\n  };\n  has = function (it) {\n    return hasOwn(it, STATE);\n  };\n}\n\nmodule.exports = {\n  set: set,\n  get: get,\n  has: has,\n  enforce: enforce,\n  getterFor: getterFor\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(''.slice);\nvar replace = uncurryThis(''.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n  return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n  if (stringSlice($String(name), 0, 7) === 'Symbol(') {\n    name = '[' + replace($String(name), /^Symbol\\(([^)]*)\\).*$/, '$1') + ']';\n  }\n  if (options && options.getter) name = 'get ' + name;\n  if (options && options.setter) name = 'set ' + name;\n  if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n    if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n    else value.name = name;\n  }\n  if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n    defineProperty(value, 'length', { value: options.arity });\n  }\n  try {\n    if (options && hasOwn(options, 'constructor') && options.constructor) {\n      if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n    // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n    } else if (value.prototype) value.prototype = undefined;\n  } catch (error) { /* empty */ }\n  var state = enforceInternalState(value);\n  if (!hasOwn(state, 'source')) {\n    state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\n  } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n  return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar definePropertyModule = require('../internals/object-define-property');\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nmodule.exports = function (O, key, value, options) {\n  if (!options) options = {};\n  var simple = options.enumerable;\n  var name = options.name !== undefined ? options.name : key;\n  if (isCallable(value)) makeBuiltIn(value, name, options);\n  if (options.global) {\n    if (simple) O[key] = value;\n    else defineGlobalProperty(key, value);\n  } else {\n    try {\n      if (!options.unsafe) delete O[key];\n      else if (O[key]) simple = true;\n    } catch (error) { /* empty */ }\n    if (simple) O[key] = value;\n    else definePropertyModule.f(O, key, {\n      value: value,\n      enumerable: false,\n      configurable: !options.nonConfigurable,\n      writable: !options.nonWritable\n    });\n  } return O;\n};\n","'use strict';\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n  var n = +x;\n  return (n > 0 ? floor : ceil)(n);\n};\n","'use strict';\nvar trunc = require('../internals/math-trunc');\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n  var number = +argument;\n  // eslint-disable-next-line no-self-compare -- NaN check\n  return number !== number || number === 0 ? 0 : trunc(number);\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n  var integer = toIntegerOrInfinity(index);\n  return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n  var len = toIntegerOrInfinity(argument);\n  return len > 0 ? min(len, 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","'use strict';\nvar toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n  return toLength(obj.length);\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIndexedObject($this);\n    var length = lengthOfArrayLike(O);\n    if (length === 0) return !IS_INCLUDES && -1;\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (IS_INCLUDES && el !== el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare -- NaN check\n      if (value !== value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) {\n      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.includes` method\n  // https://tc39.es/ecma262/#sec-array.prototype.includes\n  includes: createMethod(true),\n  // `Array.prototype.indexOf` method\n  // https://tc39.es/ecma262/#sec-array.prototype.indexof\n  indexOf: createMethod(false)\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n  var O = toIndexedObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (hasOwn(O, key = names[i++])) {\n    ~indexOf(result, key) || push(result, key);\n  }\n  return result;\n};\n","'use strict';\n// IE8- don't enum bug keys\nmodule.exports = [\n  'constructor',\n  'hasOwnProperty',\n  'isPrototypeOf',\n  'propertyIsEnumerable',\n  'toLocaleString',\n  'toString',\n  'valueOf'\n];\n","'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return internalObjectKeys(O, hiddenKeys);\n};\n","'use strict';\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n  var keys = getOwnPropertyNamesModule.f(anObject(it));\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n  var keys = ownKeys(source);\n  var defineProperty = definePropertyModule.f;\n  var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n      defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n    }\n  }\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n  var value = data[normalize(feature)];\n  return value === POLYFILL ? true\n    : value === NATIVE ? false\n    : isCallable(detection) ? fails(detection)\n    : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n  return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n  options.target         - name of the target object\n  options.global         - target is the global object\n  options.stat           - export as static methods of target\n  options.proto          - export as prototype methods of target\n  options.real           - real prototype method for the `pure` version\n  options.forced         - export even if the native feature is available\n  options.bind           - bind methods to the target, required for the `pure` version\n  options.wrap           - wrap constructors to preventing global pollution, required for the `pure` version\n  options.unsafe         - use the simple assignment of property instead of delete + defineProperty\n  options.sham           - add a flag to not completely full polyfills\n  options.enumerable     - export as enumerable property\n  options.dontCallGetSet - prevent calling a getter on target\n  options.name           - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n  var TARGET = options.target;\n  var GLOBAL = options.global;\n  var STATIC = options.stat;\n  var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n  if (GLOBAL) {\n    target = globalThis;\n  } else if (STATIC) {\n    target = globalThis[TARGET] || defineGlobalProperty(TARGET, {});\n  } else {\n    target = globalThis[TARGET] && globalThis[TARGET].prototype;\n  }\n  if (target) for (key in source) {\n    sourceProperty = source[key];\n    if (options.dontCallGetSet) {\n      descriptor = getOwnPropertyDescriptor(target, key);\n      targetProperty = descriptor && descriptor.value;\n    } else targetProperty = target[key];\n    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n    // contained in target\n    if (!FORCED && targetProperty !== undefined) {\n      if (typeof sourceProperty == typeof targetProperty) continue;\n      copyConstructorProperties(sourceProperty, targetProperty);\n    }\n    // add a flag to not completely full polyfills\n    if (options.sham || (targetProperty && targetProperty.sham)) {\n      createNonEnumerableProperty(sourceProperty, 'sham', true);\n    }\n    defineBuiltIn(target, key, sourceProperty, options);\n  }\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n// eslint-disable-next-line unicorn/no-immediate-mutation -- ES3 syntax limitation\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Object = Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n  var O, tag, result;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag\n    // builtinTag case\n    : CORRECT_ARGUMENTS ? classofRaw(O)\n    // ES3 arguments fallback\n    : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","'use strict';\nvar classof = require('../internals/classof');\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n  if (classof(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string');\n  return $String(argument);\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\n\nvar charAt = uncurryThis(''.charAt);\n\nvar FORCED = fails(function () {\n  // eslint-disable-next-line es/no-string-prototype-at -- safe\n  return '𠮷'.at(-2) !== '\\uD842';\n});\n\n// `String.prototype.at` method\n// https://tc39.es/ecma262/#sec-string.prototype.at\n$({ target: 'String', proto: true, forced: FORCED }, {\n  at: function at(index) {\n    var S = toString(requireObjectCoercible(this));\n    var len = S.length;\n    var relativeIndex = toIntegerOrInfinity(index);\n    var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;\n    return (k < 0 || k >= len) ? undefined : charAt(S, k);\n  }\n});\n","'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n  return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var props = toIndexedObject(Properties);\n  var keys = objectKeys(Properties);\n  var length = keys.length;\n  var index = 0;\n  var key;\n  while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n  return O;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","'use strict';\n/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n  activeXDocument.write(scriptTag(''));\n  activeXDocument.close();\n  var temp = activeXDocument.parentWindow.Object;\n  // eslint-disable-next-line no-useless-assignment -- avoid memory leak\n  activeXDocument = null;\n  return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = documentCreateElement('iframe');\n  var JS = 'java' + SCRIPT + ':';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  html.appendChild(iframe);\n  // https://github.com/zloirock/core-js/issues/475\n  iframe.src = String(JS);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(scriptTag('document.F=Object'));\n  iframeDocument.close();\n  return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n  try {\n    activeXDocument = new ActiveXObject('htmlfile');\n  } catch (error) { /* ignore */ }\n  NullProtoObject = typeof document != 'undefined'\n    ? document.domain && activeXDocument\n      ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n      : NullProtoObjectViaIFrame()\n    : NullProtoObjectViaActiveX(activeXDocument); // WSH\n  var length = enumBugKeys.length;\n  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n  return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n// eslint-disable-next-line es/no-object-create -- safe\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    EmptyConstructor[PROTOTYPE] = anObject(O);\n    result = new EmptyConstructor();\n    EmptyConstructor[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = NullProtoObject();\n  return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] === undefined) {\n  defineProperty(ArrayPrototype, UNSCOPABLES, {\n    configurable: true,\n    value: create(null)\n  });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n  ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.at` method\n// https://tc39.es/ecma262/#sec-array.prototype.at\n$({ target: 'Array', proto: true }, {\n  at: function at(index) {\n    var O = toObject(this);\n    var len = lengthOfArrayLike(O);\n    var relativeIndex = toIntegerOrInfinity(index);\n    var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;\n    return (k < 0 || k >= len) ? undefined : O[k];\n  }\n});\n\naddToUnscopables('at');\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.array.at');\n","'use strict';\n// eslint-disable-next-line es/no-typed-arrays -- safe\nmodule.exports = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';\n","'use strict';\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n  if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n  if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n  return defineProperty.f(target, name, descriptor);\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  function F() { /* empty */ }\n  F.prototype.constructor = null;\n  // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n  return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar $Object = Object;\nvar ObjectPrototype = $Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {\n  var object = toObject(O);\n  if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n  var constructor = object.constructor;\n  if (isCallable(constructor) && object instanceof constructor) {\n    return constructor.prototype;\n  } return object instanceof $Object ? ObjectPrototype : null;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nmodule.exports = function (object, key, method) {\n  try {\n    // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n    return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));\n  } catch (error) { /* empty */ }\n};\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nmodule.exports = function (argument) {\n  return isObject(argument) || argument === null;\n};\n","'use strict';\nvar isPossiblePrototype = require('../internals/is-possible-prototype');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument) {\n  if (isPossiblePrototype(argument)) return argument;\n  throw new $TypeError(\"Can't set \" + $String(argument) + ' as a prototype');\n};\n","'use strict';\n/* eslint-disable no-proto -- safe */\nvar uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');\nvar isObject = require('../internals/is-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n  var CORRECT_SETTER = false;\n  var test = {};\n  var setter;\n  try {\n    setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');\n    setter(test, []);\n    CORRECT_SETTER = test instanceof Array;\n  } catch (error) { /* empty */ }\n  return function setPrototypeOf(O, proto) {\n    requireObjectCoercible(O);\n    aPossiblePrototype(proto);\n    if (!isObject(O)) return O;\n    if (CORRECT_SETTER) setter(O, proto);\n    else O.__proto__ = proto;\n    return O;\n  };\n}() : undefined);\n","'use strict';\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-basic-detection');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar classof = require('../internals/classof');\nvar tryToString = require('../internals/try-to-string');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar uid = require('../internals/uid');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar Int8Array = globalThis.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar Uint8ClampedArray = globalThis.Uint8ClampedArray;\nvar Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;\nvar TypedArray = Int8Array && getPrototypeOf(Int8Array);\nvar TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\nvar ObjectPrototype = Object.prototype;\nvar TypeError = globalThis.TypeError;\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\nvar TYPED_ARRAY_CONSTRUCTOR = 'TypedArrayConstructor';\n// Fixing native typed arrays in Opera Presto crashes the browser, see #595\nvar NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(globalThis.opera) !== 'Opera';\nvar TYPED_ARRAY_TAG_REQUIRED = false;\nvar NAME, Constructor, Prototype;\n\nvar TypedArrayConstructorsList = {\n  Int8Array: 1,\n  Uint8Array: 1,\n  Uint8ClampedArray: 1,\n  Int16Array: 2,\n  Uint16Array: 2,\n  Int32Array: 4,\n  Uint32Array: 4,\n  Float32Array: 4,\n  Float64Array: 8\n};\n\nvar BigIntArrayConstructorsList = {\n  BigInt64Array: 8,\n  BigUint64Array: 8\n};\n\nvar isView = function isView(it) {\n  if (!isObject(it)) return false;\n  var klass = classof(it);\n  return klass === 'DataView'\n    || hasOwn(TypedArrayConstructorsList, klass)\n    || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar getTypedArrayConstructor = function (it) {\n  var proto = getPrototypeOf(it);\n  if (!isObject(proto)) return;\n  var state = getInternalState(proto);\n  return (state && hasOwn(state, TYPED_ARRAY_CONSTRUCTOR)) ? state[TYPED_ARRAY_CONSTRUCTOR] : getTypedArrayConstructor(proto);\n};\n\nvar isTypedArray = function (it) {\n  if (!isObject(it)) return false;\n  var klass = classof(it);\n  return hasOwn(TypedArrayConstructorsList, klass)\n    || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar aTypedArray = function (it) {\n  if (isTypedArray(it)) return it;\n  throw new TypeError('Target is not a typed array');\n};\n\nvar aTypedArrayConstructor = function (C) {\n  if (isCallable(C) && (!setPrototypeOf || isPrototypeOf(TypedArray, C))) return C;\n  throw new TypeError(tryToString(C) + ' is not a typed array constructor');\n};\n\nvar exportTypedArrayMethod = function (KEY, property, forced, options) {\n  if (!DESCRIPTORS) return;\n  if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n    var TypedArrayConstructor = globalThis[ARRAY];\n    if (TypedArrayConstructor && hasOwn(TypedArrayConstructor.prototype, KEY)) try {\n      delete TypedArrayConstructor.prototype[KEY];\n    } catch (error) {\n      // old WebKit bug - some methods are non-configurable\n      try {\n        TypedArrayConstructor.prototype[KEY] = property;\n      } catch (error2) { /* empty */ }\n    }\n  }\n  if (!TypedArrayPrototype[KEY] || forced) {\n    defineBuiltIn(TypedArrayPrototype, KEY, forced ? property\n      : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property, options);\n  }\n};\n\nvar exportTypedArrayStaticMethod = function (KEY, property, forced) {\n  var ARRAY, TypedArrayConstructor;\n  if (!DESCRIPTORS) return;\n  if (setPrototypeOf) {\n    if (forced) for (ARRAY in TypedArrayConstructorsList) {\n      TypedArrayConstructor = globalThis[ARRAY];\n      if (TypedArrayConstructor && hasOwn(TypedArrayConstructor, KEY)) try {\n        delete TypedArrayConstructor[KEY];\n      } catch (error) { /* empty */ }\n    }\n    if (!TypedArray[KEY] || forced) {\n      // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n      try {\n        return defineBuiltIn(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && TypedArray[KEY] || property);\n      } catch (error) { /* empty */ }\n    } else return;\n  }\n  for (ARRAY in TypedArrayConstructorsList) {\n    TypedArrayConstructor = globalThis[ARRAY];\n    if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\n      defineBuiltIn(TypedArrayConstructor, KEY, property);\n    }\n  }\n};\n\nfor (NAME in TypedArrayConstructorsList) {\n  Constructor = globalThis[NAME];\n  Prototype = Constructor && Constructor.prototype;\n  if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;\n  else NATIVE_ARRAY_BUFFER_VIEWS = false;\n}\n\nfor (NAME in BigIntArrayConstructorsList) {\n  Constructor = globalThis[NAME];\n  Prototype = Constructor && Constructor.prototype;\n  if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;\n}\n\n// WebKit bug - typed arrays constructors prototype is Object.prototype\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !isCallable(TypedArray) || TypedArray === Function.prototype) {\n  // eslint-disable-next-line no-shadow -- safe\n  TypedArray = function TypedArray() {\n    throw new TypeError('Incorrect invocation');\n  };\n  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n    if (globalThis[NAME]) setPrototypeOf(globalThis[NAME], TypedArray);\n  }\n}\n\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {\n  TypedArrayPrototype = TypedArray.prototype;\n  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n    if (globalThis[NAME]) setPrototypeOf(globalThis[NAME].prototype, TypedArrayPrototype);\n  }\n}\n\n// WebKit bug - one more object in Uint8ClampedArray prototype chain\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {\n  setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\n}\n\nif (DESCRIPTORS && !hasOwn(TypedArrayPrototype, TO_STRING_TAG)) {\n  TYPED_ARRAY_TAG_REQUIRED = true;\n  defineBuiltInAccessor(TypedArrayPrototype, TO_STRING_TAG, {\n    configurable: true,\n    get: function () {\n      return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n    }\n  });\n  for (NAME in TypedArrayConstructorsList) if (globalThis[NAME]) {\n    createNonEnumerableProperty(globalThis[NAME].prototype, TYPED_ARRAY_TAG, NAME);\n  }\n}\n\nmodule.exports = {\n  NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\n  TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQUIRED && TYPED_ARRAY_TAG,\n  aTypedArray: aTypedArray,\n  aTypedArrayConstructor: aTypedArrayConstructor,\n  exportTypedArrayMethod: exportTypedArrayMethod,\n  exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n  getTypedArrayConstructor: getTypedArrayConstructor,\n  isView: isView,\n  isTypedArray: isTypedArray,\n  TypedArray: TypedArray,\n  TypedArrayPrototype: TypedArrayPrototype\n};\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.at` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.at\nexportTypedArrayMethod('at', function at(index) {\n  var O = aTypedArray(this);\n  var len = lengthOfArrayLike(O);\n  var relativeIndex = toIntegerOrInfinity(index);\n  var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;\n  return (k < 0 || k >= len) ? undefined : O[k];\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.typed-array.at');\n","'use strict';\n// https://github.com/tc39/proposal-relative-indexing-method\nrequire('../modules/es.string.at-alternative');\nrequire('../modules/esnext.array.at');\nrequire('../modules/esnext.typed-array.at');\n","'use strict';\nvar $ = require('../internals/export');\nvar hasOwn = require('../internals/has-own-property');\n\n// `Object.hasOwn` method\n// https://tc39.es/ecma262/#sec-object.hasown\n$({ target: 'Object', stat: true }, {\n  hasOwn: hasOwn\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.object.has-own');\n","'use strict';\n// https://github.com/tc39/proposal-accessible-object-hasownproperty\nrequire('../modules/esnext.object.has-own');\n","'use strict';\nvar classofRaw = require('../internals/classof-raw');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = function (fn) {\n  // Nashorn bug:\n  //   https://github.com/zloirock/core-js/issues/1128\n  //   https://github.com/zloirock/core-js/issues/1130\n  if (classofRaw(fn) === 'Function') return uncurryThis(fn);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar aCallable = require('../internals/a-callable');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n  aCallable(fn);\n  return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ findLast, findLastIndex }` methods implementation\nvar createMethod = function (TYPE) {\n  var IS_FIND_LAST_INDEX = TYPE === 1;\n  return function ($this, callbackfn, that) {\n    var O = toObject($this);\n    var self = IndexedObject(O);\n    var index = lengthOfArrayLike(self);\n    var boundFunction = bind(callbackfn, that);\n    var value, result;\n    while (index-- > 0) {\n      value = self[index];\n      result = boundFunction(value, index, O);\n      if (result) switch (TYPE) {\n        case 0: return value; // findLast\n        case 1: return index; // findLastIndex\n      }\n    }\n    return IS_FIND_LAST_INDEX ? -1 : undefined;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.findLast` method\n  // https://github.com/tc39/proposal-array-find-from-last\n  findLast: createMethod(0),\n  // `Array.prototype.findLastIndex` method\n  // https://github.com/tc39/proposal-array-find-from-last\n  findLastIndex: createMethod(1)\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $findLast = require('../internals/array-iteration-from-last').findLast;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.findLast` method\n// https://tc39.es/ecma262/#sec-array.prototype.findlast\n$({ target: 'Array', proto: true }, {\n  findLast: function findLast(callbackfn /* , that = undefined */) {\n    return $findLast(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\naddToUnscopables('findLast');\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.array.find-last');\n","'use strict';\nvar $ = require('../internals/export');\nvar $findLastIndex = require('../internals/array-iteration-from-last').findLastIndex;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.findLastIndex` method\n// https://tc39.es/ecma262/#sec-array.prototype.findlastindex\n$({ target: 'Array', proto: true }, {\n  findLastIndex: function findLastIndex(callbackfn /* , that = undefined */) {\n    return $findLastIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\naddToUnscopables('findLastIndex');\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.array.find-last-index');\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $findLast = require('../internals/array-iteration-from-last').findLast;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findLast` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findlast\nexportTypedArrayMethod('findLast', function findLast(predicate /* , thisArg */) {\n  return $findLast(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.typed-array.find-last');\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $findLastIndex = require('../internals/array-iteration-from-last').findLastIndex;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findLastIndex` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findlastindex\nexportTypedArrayMethod('findLastIndex', function findLastIndex(predicate /* , thisArg */) {\n  return $findLastIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.typed-array.find-last-index');\n","'use strict';\n// https://github.com/tc39/proposal-array-find-from-last/\nrequire('../modules/esnext.array.find-last');\nrequire('../modules/esnext.array.find-last-index');\nrequire('../modules/esnext.typed-array.find-last');\nrequire('../modules/esnext.typed-array.find-last-index');\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n  if (DESCRIPTORS) definePropertyModule.f(object, key, createPropertyDescriptor(0, value));\n  else object[key] = value;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar $Array = Array;\n\n// `Array.prototype.toReversed` method\n// https://tc39.es/ecma262/#sec-array.prototype.toreversed\n$({ target: 'Array', proto: true }, {\n  toReversed: function toReversed() {\n    var O = toIndexedObject(this);\n    var len = lengthOfArrayLike(O);\n    var A = new $Array(len);\n    var k = 0;\n    for (; k < len; k++) createProperty(A, k, O[len - k - 1]);\n    return A;\n  }\n});\n\naddToUnscopables('toReversed');\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.array.to-reversed');\n","'use strict';\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\nmodule.exports = function (Constructor, list, $length) {\n  var index = 0;\n  var length = arguments.length > 2 ? $length : lengthOfArrayLike(list);\n  var result = new Constructor(length);\n  while (length > index) result[index] = list[index++];\n  return result;\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\nmodule.exports = function (CONSTRUCTOR, METHOD) {\n  var Constructor = globalThis[CONSTRUCTOR];\n  var Prototype = Constructor && Constructor.prototype;\n  return Prototype && Prototype[METHOD];\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar arrayFromConstructorAndList = require('../internals/array-from-constructor-and-list');\nvar getBuiltInPrototypeMethod = require('../internals/get-built-in-prototype-method');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar $Array = Array;\nvar sort = uncurryThis(getBuiltInPrototypeMethod('Array', 'sort'));\n\n// `Array.prototype.toSorted` method\n// https://tc39.es/ecma262/#sec-array.prototype.tosorted\n$({ target: 'Array', proto: true }, {\n  toSorted: function toSorted(compareFn) {\n    if (compareFn !== undefined) aCallable(compareFn);\n    var O = toIndexedObject(this);\n    var A = arrayFromConstructorAndList($Array, O);\n    return sort(A, compareFn);\n  }\n});\n\naddToUnscopables('toSorted');\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.array.to-sorted');\n","'use strict';\nvar $TypeError = TypeError;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991\n\nmodule.exports = function (it) {\n  if (it > MAX_SAFE_INTEGER) throw new $TypeError('Maximum allowed index exceeded');\n  return it;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar createProperty = require('../internals/create-property');\n\nvar $Array = Array;\nvar max = Math.max;\nvar min = Math.min;\n\n// `Array.prototype.toSpliced` method\n// https://tc39.es/ecma262/#sec-array.prototype.tospliced\n$({ target: 'Array', proto: true }, {\n  toSpliced: function toSpliced(start, deleteCount /* , ...items */) {\n    var O = toIndexedObject(this);\n    var len = lengthOfArrayLike(O);\n    var actualStart = toAbsoluteIndex(start, len);\n    var argumentsLength = arguments.length;\n    var k = 0;\n    var insertCount, actualDeleteCount, newLen, A;\n    if (argumentsLength === 0) {\n      insertCount = actualDeleteCount = 0;\n    } else if (argumentsLength === 1) {\n      insertCount = 0;\n      actualDeleteCount = len - actualStart;\n    } else {\n      insertCount = argumentsLength - 2;\n      actualDeleteCount = min(max(toIntegerOrInfinity(deleteCount), 0), len - actualStart);\n    }\n    newLen = doesNotExceedSafeInteger(len + insertCount - actualDeleteCount);\n    A = $Array(newLen);\n\n    for (; k < actualStart; k++) createProperty(A, k, O[k]);\n    for (; k < actualStart + insertCount; k++) createProperty(A, k, arguments[k - actualStart + 2]);\n    for (; k < newLen; k++) createProperty(A, k, O[k + actualDeleteCount - insertCount]);\n\n    return A;\n  }\n});\n\naddToUnscopables('toSpliced');\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.array.to-spliced');\n","'use strict';\nvar $ = require('../internals/export');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\n\nvar $Array = Array;\nvar $RangeError = RangeError;\n\n// Firefox bug\nvar INCORRECT_EXCEPTION_ON_COERCION_FAIL = (function () {\n  try {\n    // eslint-disable-next-line es/no-array-prototype-with, no-throw-literal -- needed for testing\n    []['with']({ valueOf: function () { throw 4; } }, null);\n  } catch (error) {\n    return error !== 4;\n  }\n})();\n\n// `Array.prototype.with` method\n// https://tc39.es/ecma262/#sec-array.prototype.with\n$({ target: 'Array', proto: true, forced: INCORRECT_EXCEPTION_ON_COERCION_FAIL }, {\n  'with': function (index, value) {\n    var O = toIndexedObject(this);\n    var len = lengthOfArrayLike(O);\n    var relativeIndex = toIntegerOrInfinity(index);\n    var actualIndex = relativeIndex < 0 ? len + relativeIndex : relativeIndex;\n    if (actualIndex >= len || actualIndex < 0) throw new $RangeError('Incorrect index');\n    var A = new $Array(len);\n    var k = 0;\n    for (; k < len; k++) createProperty(A, k, k === actualIndex ? value : O[k]);\n    return A;\n  }\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.array.with');\n","'use strict';\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;\n\n// `%TypedArray%.prototype.toReversed` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.toreversed\nexportTypedArrayMethod('toReversed', function toReversed() {\n  var O = aTypedArray(this);\n  var len = lengthOfArrayLike(O);\n  var A = new (getTypedArrayConstructor(O))(len);\n  var k = 0;\n  for (; k < len; k++) A[k] = O[len - k - 1];\n  return A;\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.typed-array.to-reversed');\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar arrayFromConstructorAndList = require('../internals/array-from-constructor-and-list');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar sort = uncurryThis(ArrayBufferViewCore.TypedArrayPrototype.sort);\n\n// `%TypedArray%.prototype.toSorted` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tosorted\nexportTypedArrayMethod('toSorted', function toSorted(compareFn) {\n  if (compareFn !== undefined) aCallable(compareFn);\n  var O = aTypedArray(this);\n  var A = arrayFromConstructorAndList(getTypedArrayConstructor(O), O);\n  return sort(A, compareFn);\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.typed-array.to-sorted');\n","'use strict';\nvar classof = require('../internals/classof');\n\nmodule.exports = function (it) {\n  var klass = classof(it);\n  return klass === 'BigInt64Array' || klass === 'BigUint64Array';\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\n\nvar $TypeError = TypeError;\n\n// `ToBigInt` abstract operation\n// https://tc39.es/ecma262/#sec-tobigint\nmodule.exports = function (argument) {\n  var prim = toPrimitive(argument, 'number');\n  if (typeof prim == 'number') throw new $TypeError(\"Can't convert number to bigint\");\n  // eslint-disable-next-line es/no-bigint -- safe\n  return BigInt(prim);\n};\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar isBigIntArray = require('../internals/is-big-int-array');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toBigInt = require('../internals/to-big-int');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar $RangeError = RangeError;\n\nvar PROPER_ORDER = function () {\n  try {\n    // eslint-disable-next-line no-throw-literal, es/no-typed-arrays, es/no-array-prototype-with -- required for testing\n    new Int8Array(1)['with'](2, { valueOf: function () { throw 8; } });\n  } catch (error) {\n    // some early implementations, like WebKit, does not follow the final semantic\n    // https://github.com/tc39/proposal-change-array-by-copy/pull/86\n    return error === 8;\n  }\n}();\n\n// Bug in WebKit. It should truncate a negative fractional index to zero, but instead throws an error\nvar THROW_ON_NEGATIVE_FRACTIONAL_INDEX = PROPER_ORDER && function () {\n  try {\n    // eslint-disable-next-line es/no-typed-arrays, es/no-array-prototype-with -- required for testing\n    new Int8Array(1)['with'](-0.5, 1);\n  } catch (error) {\n    return true;\n  }\n}();\n\n// `%TypedArray%.prototype.with` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.with\nexportTypedArrayMethod('with', { 'with': function (index, value) {\n  var O = aTypedArray(this);\n  var len = lengthOfArrayLike(O);\n  var relativeIndex = toIntegerOrInfinity(index);\n  var actualIndex = relativeIndex < 0 ? len + relativeIndex : relativeIndex;\n  var numericValue = isBigIntArray(O) ? toBigInt(value) : +value;\n  if (actualIndex >= len || actualIndex < 0) throw new $RangeError('Incorrect index');\n  var A = new (getTypedArrayConstructor(O))(len);\n  var k = 0;\n  for (; k < len; k++) A[k] = k === actualIndex ? numericValue : O[k];\n  return A;\n} }['with'], !PROPER_ORDER || THROW_ON_NEGATIVE_FRACTIONAL_INDEX);\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.typed-array.with');\n","'use strict';\n// https://github.com/tc39/proposal-change-array-by-copy\nrequire('../modules/esnext.array.to-reversed');\nrequire('../modules/esnext.array.to-sorted');\nrequire('../modules/esnext.array.to-spliced');\nrequire('../modules/esnext.array.with');\nrequire('../modules/esnext.typed-array.to-reversed');\nrequire('../modules/esnext.typed-array.to-sorted');\nrequire('../modules/esnext.typed-array.with');\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","'use strict';\nvar classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n  if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR)\n    || getMethod(it, '@@iterator')\n    || Iterators[classof(it)];\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n  var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n  if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n  throw new $TypeError(tryToString(argument) + ' is not iterable');\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n  var innerResult, innerError;\n  anObject(iterator);\n  try {\n    innerResult = getMethod(iterator, 'return');\n    if (!innerResult) {\n      if (kind === 'throw') throw value;\n      return value;\n    }\n    innerResult = call(innerResult, iterator);\n  } catch (error) {\n    innerError = true;\n    innerResult = error;\n  }\n  if (kind === 'throw') throw value;\n  if (innerError) throw innerResult;\n  anObject(innerResult);\n  return value;\n};\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar $TypeError = TypeError;\n\nvar Result = function (stopped, result) {\n  this.stopped = stopped;\n  this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n  var that = options && options.that;\n  var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n  var IS_RECORD = !!(options && options.IS_RECORD);\n  var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n  var INTERRUPTED = !!(options && options.INTERRUPTED);\n  var fn = bind(unboundFunction, that);\n  var iterator, iterFn, index, length, result, next, step;\n\n  var stop = function (condition) {\n    var $iterator = iterator;\n    iterator = undefined;\n    if ($iterator) iteratorClose($iterator, 'normal');\n    return new Result(true, condition);\n  };\n\n  var callFn = function (value) {\n    if (AS_ENTRIES) {\n      anObject(value);\n      return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n    } return INTERRUPTED ? fn(value, stop) : fn(value);\n  };\n\n  if (IS_RECORD) {\n    iterator = iterable.iterator;\n  } else if (IS_ITERATOR) {\n    iterator = iterable;\n  } else {\n    iterFn = getIteratorMethod(iterable);\n    if (!iterFn) throw new $TypeError(tryToString(iterable) + ' is not iterable');\n    // optimisation for array iterators\n    if (isArrayIteratorMethod(iterFn)) {\n      for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n        result = callFn(iterable[index]);\n        if (result && isPrototypeOf(ResultPrototype, result)) return result;\n      } return new Result(false);\n    }\n    iterator = getIterator(iterable, iterFn);\n  }\n\n  next = IS_RECORD ? iterable.next : iterator.next;\n  while (!(step = call(next, iterator)).done) {\n    // `IteratorValue` errors should propagate without closing the iterator\n    var value = step.value;\n    try {\n      result = callFn(value);\n    } catch (error) {\n      if (iterator) iteratorClose(iterator, 'throw', error);\n      else throw error;\n    }\n    if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n  } return new Result(false);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\n// eslint-disable-next-line es/no-map -- safe\nvar MapPrototype = Map.prototype;\n\nmodule.exports = {\n  // eslint-disable-next-line es/no-map -- safe\n  Map: Map,\n  set: uncurryThis(MapPrototype.set),\n  get: uncurryThis(MapPrototype.get),\n  has: uncurryThis(MapPrototype.has),\n  remove: uncurryThis(MapPrototype['delete']),\n  proto: MapPrototype\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar iterate = require('../internals/iterate');\nvar MapHelpers = require('../internals/map-helpers');\nvar IS_PURE = require('../internals/is-pure');\nvar fails = require('../internals/fails');\n\nvar Map = MapHelpers.Map;\nvar has = MapHelpers.has;\nvar get = MapHelpers.get;\nvar set = MapHelpers.set;\nvar push = uncurryThis([].push);\n\n// https://bugs.webkit.org/show_bug.cgi?id=271524\nvar DOES_NOT_WORK_WITH_PRIMITIVES = IS_PURE || fails(function () {\n  return Map.groupBy('ab', function (it) {\n    return it;\n  }).get('a').length !== 1;\n});\n\n// `Map.groupBy` method\n// https://tc39.es/ecma262/#sec-map.groupby\n$({ target: 'Map', stat: true, forced: IS_PURE || DOES_NOT_WORK_WITH_PRIMITIVES }, {\n  groupBy: function groupBy(items, callbackfn) {\n    requireObjectCoercible(items);\n    aCallable(callbackfn);\n    var map = new Map();\n    var k = 0;\n    iterate(items, function (value) {\n      var key = callbackfn(value, k++);\n      if (!has(map, key)) set(map, key, [value]);\n      else push(get(map, key), value);\n    });\n    return map;\n  }\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.map.group-by');\n","'use strict';\nvar $ = require('../internals/export');\nvar createProperty = require('../internals/create-property');\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toPropertyKey = require('../internals/to-property-key');\nvar iterate = require('../internals/iterate');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-groupby -- testing\nvar nativeGroupBy = Object.groupBy;\nvar create = getBuiltIn('Object', 'create');\nvar push = uncurryThis([].push);\n\n// https://bugs.webkit.org/show_bug.cgi?id=271524\nvar DOES_NOT_WORK_WITH_PRIMITIVES = !nativeGroupBy || fails(function () {\n  return nativeGroupBy('ab', function (it) {\n    return it;\n  }).a.length !== 1;\n});\n\n// `Object.groupBy` method\n// https://tc39.es/ecma262/#sec-object.groupby\n$({ target: 'Object', stat: true, forced: DOES_NOT_WORK_WITH_PRIMITIVES }, {\n  groupBy: function groupBy(items, callbackfn) {\n    requireObjectCoercible(items);\n    aCallable(callbackfn);\n    var obj = create(null);\n    var k = 0;\n    iterate(items, function (value) {\n      var key = toPropertyKey(callbackfn(value, k++));\n      // in some IE versions, `hasOwnProperty` returns incorrect result on integer keys\n      // but since it's a `null` prototype object, we can safely use `in`\n      if (key in obj) push(obj[key], value);\n      else createProperty(obj, key, [value]);\n    });\n    return obj;\n  }\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.object.group-by');\n","'use strict';\n// https://github.com/tc39/proposal-array-grouping\nrequire('../modules/esnext.map.group-by');\nrequire('../modules/esnext.object.group-by');\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\n// eslint-disable-next-line es/no-set -- safe\nvar SetPrototype = Set.prototype;\n\nmodule.exports = {\n  // eslint-disable-next-line es/no-set -- safe\n  Set: Set,\n  add: uncurryThis(SetPrototype.add),\n  has: uncurryThis(SetPrototype.has),\n  remove: uncurryThis(SetPrototype['delete']),\n  proto: SetPrototype\n};\n","'use strict';\nvar has = require('../internals/set-helpers').has;\n\n// Perform ? RequireInternalSlot(M, [[SetData]])\nmodule.exports = function (it) {\n  has(it);\n  return it;\n};\n","'use strict';\nvar call = require('../internals/function-call');\n\nmodule.exports = function (record, fn, ITERATOR_INSTEAD_OF_RECORD) {\n  var iterator = ITERATOR_INSTEAD_OF_RECORD ? record : record.iterator;\n  var next = record.next;\n  var step, result;\n  while (!(step = call(next, iterator)).done) {\n    result = fn(step.value);\n    if (result !== undefined) return result;\n  }\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar iterateSimple = require('../internals/iterate-simple');\nvar SetHelpers = require('../internals/set-helpers');\n\nvar Set = SetHelpers.Set;\nvar SetPrototype = SetHelpers.proto;\nvar forEach = uncurryThis(SetPrototype.forEach);\nvar keys = uncurryThis(SetPrototype.keys);\nvar next = keys(new Set()).next;\n\nmodule.exports = function (set, fn, interruptible) {\n  return interruptible ? iterateSimple({ iterator: keys(set), next: next }, fn) : forEach(set, fn);\n};\n","'use strict';\nvar SetHelpers = require('../internals/set-helpers');\nvar iterate = require('../internals/set-iterate');\n\nvar Set = SetHelpers.Set;\nvar add = SetHelpers.add;\n\nmodule.exports = function (set) {\n  var result = new Set();\n  iterate(set, function (it) {\n    add(result, it);\n  });\n  return result;\n};\n","'use strict';\nvar uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');\nvar SetHelpers = require('../internals/set-helpers');\n\nmodule.exports = uncurryThisAccessor(SetHelpers.proto, 'size', 'get') || function (set) {\n  return set.size;\n};\n","'use strict';\n// `GetIteratorDirect(obj)` abstract operation\n// https://tc39.es/ecma262/#sec-getiteratordirect\nmodule.exports = function (obj) {\n  return {\n    iterator: obj,\n    next: obj.next,\n    done: false\n  };\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar call = require('../internals/function-call');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\n\nvar INVALID_SIZE = 'Invalid size';\nvar $RangeError = RangeError;\nvar $TypeError = TypeError;\nvar max = Math.max;\n\nvar SetRecord = function (set, intSize) {\n  this.set = set;\n  this.size = max(intSize, 0);\n  this.has = aCallable(set.has);\n  this.keys = aCallable(set.keys);\n};\n\nSetRecord.prototype = {\n  getIterator: function () {\n    return getIteratorDirect(anObject(call(this.keys, this.set)));\n  },\n  includes: function (it) {\n    return call(this.has, this.set, it);\n  }\n};\n\n// `GetSetRecord` abstract operation\n// https://tc39.es/proposal-set-methods/#sec-getsetrecord\nmodule.exports = function (obj) {\n  anObject(obj);\n  var numSize = +obj.size;\n  // NOTE: If size is undefined, then numSize will be NaN\n  // eslint-disable-next-line no-self-compare -- NaN check\n  if (numSize !== numSize) throw new $TypeError(INVALID_SIZE);\n  var intSize = toIntegerOrInfinity(numSize);\n  if (intSize < 0) throw new $RangeError(INVALID_SIZE);\n  return new SetRecord(obj, intSize);\n};\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar SetHelpers = require('../internals/set-helpers');\nvar clone = require('../internals/set-clone');\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSet = require('../internals/set-iterate');\nvar iterateSimple = require('../internals/iterate-simple');\n\nvar has = SetHelpers.has;\nvar remove = SetHelpers.remove;\n\n// `Set.prototype.difference` method\n// https://tc39.es/ecma262/#sec-set.prototype.difference\nmodule.exports = function difference(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  var result = clone(O);\n  if (size(result) <= otherRec.size) iterateSet(result, function (e) {\n    if (otherRec.includes(e)) remove(result, e);\n  });\n  else iterateSimple(otherRec.getIterator(), function (e) {\n    if (has(result, e)) remove(result, e);\n  });\n  return result;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\n\nvar createSetLike = function (size) {\n  return {\n    size: size,\n    has: function () {\n      return false;\n    },\n    keys: function () {\n      return {\n        next: function () {\n          return { done: true };\n        }\n      };\n    }\n  };\n};\n\nvar createSetLikeWithInfinitySize = function (size) {\n  return {\n    size: size,\n    has: function () {\n      return true;\n    },\n    keys: function () {\n      throw new Error('e');\n    }\n  };\n};\n\nmodule.exports = function (name, callback) {\n  var Set = getBuiltIn('Set');\n  try {\n    new Set()[name](createSetLike(0));\n    try {\n      // late spec change, early WebKit ~ Safari 17 implementation does not pass it\n      // https://github.com/tc39/proposal-set-methods/pull/88\n      // also covered engines with\n      // https://bugs.webkit.org/show_bug.cgi?id=272679\n      new Set()[name](createSetLike(-1));\n      return false;\n    } catch (error2) {\n      if (!callback) return true;\n      // early V8 implementation bug\n      // https://issues.chromium.org/issues/351332634\n      try {\n        new Set()[name](createSetLikeWithInfinitySize(-Infinity));\n        return false;\n      } catch (error) {\n        var set = new Set([1, 2]);\n        return callback(set[name](createSetLikeWithInfinitySize(Infinity)));\n      }\n    }\n  } catch (error) {\n    return false;\n  }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar difference = require('../internals/set-difference');\nvar fails = require('../internals/fails');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar SET_LIKE_INCORRECT_BEHAVIOR = !setMethodAcceptSetLike('difference', function (result) {\n  return result.size === 0;\n});\n\nvar FORCED = SET_LIKE_INCORRECT_BEHAVIOR || fails(function () {\n  // https://bugs.webkit.org/show_bug.cgi?id=288595\n  var setLike = {\n    size: 1,\n    has: function () { return true; },\n    keys: function () {\n      var index = 0;\n      return {\n        next: function () {\n          var done = index++ > 1;\n          if (baseSet.has(1)) baseSet.clear();\n          return { done: done, value: 2 };\n        }\n      };\n    }\n  };\n  // eslint-disable-next-line es/no-set -- testing\n  var baseSet = new Set([1, 2, 3, 4]);\n  // eslint-disable-next-line es/no-set-prototype-difference -- testing\n  return baseSet.difference(setLike).size !== 3;\n});\n\n// `Set.prototype.difference` method\n// https://tc39.es/ecma262/#sec-set.prototype.difference\n$({ target: 'Set', proto: true, real: true, forced: FORCED }, {\n  difference: difference\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.set.difference.v2');\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar SetHelpers = require('../internals/set-helpers');\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSet = require('../internals/set-iterate');\nvar iterateSimple = require('../internals/iterate-simple');\n\nvar Set = SetHelpers.Set;\nvar add = SetHelpers.add;\nvar has = SetHelpers.has;\n\n// `Set.prototype.intersection` method\n// https://tc39.es/ecma262/#sec-set.prototype.intersection\nmodule.exports = function intersection(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  var result = new Set();\n\n  if (size(O) > otherRec.size) {\n    iterateSimple(otherRec.getIterator(), function (e) {\n      if (has(O, e)) add(result, e);\n    });\n  } else {\n    iterateSet(O, function (e) {\n      if (otherRec.includes(e)) add(result, e);\n    });\n  }\n\n  return result;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar intersection = require('../internals/set-intersection');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar INCORRECT = !setMethodAcceptSetLike('intersection', function (result) {\n  return result.size === 2 && result.has(1) && result.has(2);\n}) || fails(function () {\n  // eslint-disable-next-line es/no-array-from, es/no-set, es/no-set-prototype-intersection -- testing\n  return String(Array.from(new Set([1, 2, 3]).intersection(new Set([3, 2])))) !== '3,2';\n});\n\n// `Set.prototype.intersection` method\n// https://tc39.es/ecma262/#sec-set.prototype.intersection\n$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n  intersection: intersection\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.set.intersection.v2');\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar has = require('../internals/set-helpers').has;\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSet = require('../internals/set-iterate');\nvar iterateSimple = require('../internals/iterate-simple');\nvar iteratorClose = require('../internals/iterator-close');\n\n// `Set.prototype.isDisjointFrom` method\n// https://tc39.es/ecma262/#sec-set.prototype.isdisjointfrom\nmodule.exports = function isDisjointFrom(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  if (size(O) <= otherRec.size) return iterateSet(O, function (e) {\n    if (otherRec.includes(e)) return false;\n  }, true) !== false;\n  var iterator = otherRec.getIterator();\n  return iterateSimple(iterator, function (e) {\n    if (has(O, e)) return iteratorClose(iterator.iterator, 'normal', false);\n  }) !== false;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar isDisjointFrom = require('../internals/set-is-disjoint-from');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar INCORRECT = !setMethodAcceptSetLike('isDisjointFrom', function (result) {\n  return !result;\n});\n\n// `Set.prototype.isDisjointFrom` method\n// https://tc39.es/ecma262/#sec-set.prototype.isdisjointfrom\n$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n  isDisjointFrom: isDisjointFrom\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.set.is-disjoint-from.v2');\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar size = require('../internals/set-size');\nvar iterate = require('../internals/set-iterate');\nvar getSetRecord = require('../internals/get-set-record');\n\n// `Set.prototype.isSubsetOf` method\n// https://tc39.es/ecma262/#sec-set.prototype.issubsetof\nmodule.exports = function isSubsetOf(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  if (size(O) > otherRec.size) return false;\n  return iterate(O, function (e) {\n    if (!otherRec.includes(e)) return false;\n  }, true) !== false;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar isSubsetOf = require('../internals/set-is-subset-of');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar INCORRECT = !setMethodAcceptSetLike('isSubsetOf', function (result) {\n  return result;\n});\n\n// `Set.prototype.isSubsetOf` method\n// https://tc39.es/ecma262/#sec-set.prototype.issubsetof\n$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n  isSubsetOf: isSubsetOf\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.set.is-subset-of.v2');\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar has = require('../internals/set-helpers').has;\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSimple = require('../internals/iterate-simple');\nvar iteratorClose = require('../internals/iterator-close');\n\n// `Set.prototype.isSupersetOf` method\n// https://tc39.es/ecma262/#sec-set.prototype.issupersetof\nmodule.exports = function isSupersetOf(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  if (size(O) < otherRec.size) return false;\n  var iterator = otherRec.getIterator();\n  return iterateSimple(iterator, function (e) {\n    if (!has(O, e)) return iteratorClose(iterator.iterator, 'normal', false);\n  }) !== false;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar isSupersetOf = require('../internals/set-is-superset-of');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar INCORRECT = !setMethodAcceptSetLike('isSupersetOf', function (result) {\n  return !result;\n});\n\n// `Set.prototype.isSupersetOf` method\n// https://tc39.es/ecma262/#sec-set.prototype.issupersetof\n$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n  isSupersetOf: isSupersetOf\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.set.is-superset-of.v2');\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar add = require('../internals/set-helpers').add;\nvar clone = require('../internals/set-clone');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSimple = require('../internals/iterate-simple');\n\n// `Set.prototype.union` method\n// https://tc39.es/ecma262/#sec-set.prototype.union\nmodule.exports = function union(other) {\n  var O = aSet(this);\n  var keysIter = getSetRecord(other).getIterator();\n  var result = clone(O);\n  iterateSimple(keysIter, function (it) {\n    add(result, it);\n  });\n  return result;\n};\n","'use strict';\n// Should get iterator record of a set-like object before cloning this\n// https://bugs.webkit.org/show_bug.cgi?id=289430\nmodule.exports = function (METHOD_NAME) {\n  try {\n    // eslint-disable-next-line es/no-set -- needed for test\n    var baseSet = new Set();\n    var setLike = {\n      size: 0,\n      has: function () { return true; },\n      keys: function () {\n        // eslint-disable-next-line es/no-object-defineproperty -- needed for test\n        return Object.defineProperty({}, 'next', {\n          get: function () {\n            baseSet.clear();\n            baseSet.add(4);\n            return function () {\n              return { done: true };\n            };\n          }\n        });\n      }\n    };\n    var result = baseSet[METHOD_NAME](setLike);\n\n    return result.size === 1 && result.values().next().value === 4;\n  } catch (error) {\n    return false;\n  }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar union = require('../internals/set-union');\nvar setMethodGetKeysBeforeCloning = require('../internals/set-method-get-keys-before-cloning-detection');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar FORCED = !setMethodAcceptSetLike('union') || !setMethodGetKeysBeforeCloning('union');\n\n// `Set.prototype.union` method\n// https://tc39.es/ecma262/#sec-set.prototype.union\n$({ target: 'Set', proto: true, real: true, forced: FORCED }, {\n  union: union\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.set.union.v2');\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar SetHelpers = require('../internals/set-helpers');\nvar clone = require('../internals/set-clone');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSimple = require('../internals/iterate-simple');\n\nvar add = SetHelpers.add;\nvar has = SetHelpers.has;\nvar remove = SetHelpers.remove;\n\n// `Set.prototype.symmetricDifference` method\n// https://tc39.es/ecma262/#sec-set.prototype.symmetricdifference\nmodule.exports = function symmetricDifference(other) {\n  var O = aSet(this);\n  var keysIter = getSetRecord(other).getIterator();\n  var result = clone(O);\n  iterateSimple(keysIter, function (e) {\n    if (has(O, e)) remove(result, e);\n    else add(result, e);\n  });\n  return result;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar symmetricDifference = require('../internals/set-symmetric-difference');\nvar setMethodGetKeysBeforeCloning = require('../internals/set-method-get-keys-before-cloning-detection');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar FORCED = !setMethodAcceptSetLike('symmetricDifference') || !setMethodGetKeysBeforeCloning('symmetricDifference');\n\n// `Set.prototype.symmetricDifference` method\n// https://tc39.es/ecma262/#sec-set.prototype.symmetricdifference\n$({ target: 'Set', proto: true, real: true, forced: FORCED }, {\n  symmetricDifference: symmetricDifference\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.set.symmetric-difference.v2');\n","'use strict';\n// https://github.com/tc39/proposal-set-methods\nrequire('../modules/esnext.set.difference.v2');\nrequire('../modules/esnext.set.intersection.v2');\nrequire('../modules/esnext.set.is-disjoint-from.v2');\nrequire('../modules/esnext.set.is-subset-of.v2');\nrequire('../modules/esnext.set.is-superset-of.v2');\nrequire('../modules/esnext.set.union.v2');\nrequire('../modules/esnext.set.symmetric-difference.v2');\n","'use strict';\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (it, Prototype) {\n  if (isPrototypeOf(Prototype, it)) return it;\n  throw new $TypeError('Incorrect invocation');\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n  arrayIterator = [].keys();\n  // Safari 8 has buggy iterators w/o `next`\n  if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n  else {\n    PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n    if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n  }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function () {\n  var test = {};\n  // FF44- legacy iterators case\n  return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n  defineBuiltIn(IteratorPrototype, ITERATOR, function () {\n    return this;\n  });\n}\n\nmodule.exports = {\n  IteratorPrototype: IteratorPrototype,\n  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar globalThis = require('../internals/global-this');\nvar anInstance = require('../internals/an-instance');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar createProperty = require('../internals/create-property');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IS_PURE = require('../internals/is-pure');\n\nvar CONSTRUCTOR = 'constructor';\nvar ITERATOR = 'Iterator';\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nvar $TypeError = TypeError;\nvar NativeIterator = globalThis[ITERATOR];\n\n// FF56- have non-standard global helper `Iterator`\nvar FORCED = IS_PURE\n  || !isCallable(NativeIterator)\n  || NativeIterator.prototype !== IteratorPrototype\n  // FF44- non-standard `Iterator` passes previous tests\n  || !fails(function () { NativeIterator({}); });\n\nvar IteratorConstructor = function Iterator() {\n  anInstance(this, IteratorPrototype);\n  if (getPrototypeOf(this) === IteratorPrototype) throw new $TypeError('Abstract class Iterator not directly constructable');\n};\n\nvar defineIteratorPrototypeAccessor = function (key, value) {\n  if (DESCRIPTORS) {\n    defineBuiltInAccessor(IteratorPrototype, key, {\n      configurable: true,\n      get: function () {\n        return value;\n      },\n      set: function (replacement) {\n        anObject(this);\n        if (this === IteratorPrototype) throw new $TypeError(\"You can't redefine this property\");\n        if (hasOwn(this, key)) this[key] = replacement;\n        else createProperty(this, key, replacement);\n      }\n    });\n  } else IteratorPrototype[key] = value;\n};\n\nif (!hasOwn(IteratorPrototype, TO_STRING_TAG)) defineIteratorPrototypeAccessor(TO_STRING_TAG, ITERATOR);\n\nif (FORCED || !hasOwn(IteratorPrototype, CONSTRUCTOR) || IteratorPrototype[CONSTRUCTOR] === Object) {\n  defineIteratorPrototypeAccessor(CONSTRUCTOR, IteratorConstructor);\n}\n\nIteratorConstructor.prototype = IteratorPrototype;\n\n// `Iterator` constructor\n// https://tc39.es/ecma262/#sec-iterator\n$({ global: true, constructor: true, forced: FORCED }, {\n  Iterator: IteratorConstructor\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.iterator.constructor');\n","'use strict';\nvar $RangeError = RangeError;\n\nmodule.exports = function (it) {\n  // eslint-disable-next-line no-self-compare -- NaN check\n  if (it === it) return it;\n  throw new $RangeError('NaN is not allowed');\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar $RangeError = RangeError;\n\nmodule.exports = function (it) {\n  var result = toIntegerOrInfinity(it);\n  if (result < 0) throw new $RangeError(\"The argument can't be less than 0\");\n  return result;\n};\n","'use strict';\nvar defineBuiltIn = require('../internals/define-built-in');\n\nmodule.exports = function (target, src, options) {\n  for (var key in src) defineBuiltIn(target, key, src[key], options);\n  return target;\n};\n","'use strict';\n// `CreateIterResultObject` abstract operation\n// https://tc39.es/ecma262/#sec-createiterresultobject\nmodule.exports = function (value, done) {\n  return { value: value, done: done };\n};\n","'use strict';\nvar iteratorClose = require('../internals/iterator-close');\n\nmodule.exports = function (iters, kind, value) {\n  for (var i = iters.length - 1; i >= 0; i--) {\n    if (iters[i] === undefined) continue;\n    try {\n      value = iteratorClose(iters[i].iterator, kind, value);\n    } catch (error) {\n      kind = 'throw';\n      value = error;\n    }\n  }\n  if (kind === 'throw') throw value;\n  return value;\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar create = require('../internals/object-create');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar InternalStateModule = require('../internals/internal-state');\nvar getMethod = require('../internals/get-method');\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar createIterResultObject = require('../internals/create-iter-result-object');\nvar iteratorClose = require('../internals/iterator-close');\nvar iteratorCloseAll = require('../internals/iterator-close-all');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ITERATOR_HELPER = 'IteratorHelper';\nvar WRAP_FOR_VALID_ITERATOR = 'WrapForValidIterator';\nvar NORMAL = 'normal';\nvar THROW = 'throw';\nvar setInternalState = InternalStateModule.set;\n\nvar createIteratorProxyPrototype = function (IS_ITERATOR) {\n  var getInternalState = InternalStateModule.getterFor(IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER);\n\n  return defineBuiltIns(create(IteratorPrototype), {\n    next: function next() {\n      var state = getInternalState(this);\n      // for simplification:\n      //   for `%WrapForValidIteratorPrototype%.next` or with `state.returnHandlerResult` our `nextHandler` returns `IterResultObject`\n      //   for `%IteratorHelperPrototype%.next` - just a value\n      if (IS_ITERATOR) return state.nextHandler();\n      if (state.done) return createIterResultObject(undefined, true);\n      try {\n        var result = state.nextHandler();\n        return state.returnHandlerResult ? result : createIterResultObject(result, state.done);\n      } catch (error) {\n        state.done = true;\n        throw error;\n      }\n    },\n    'return': function () {\n      var state = getInternalState(this);\n      var iterator = state.iterator;\n      var done = state.done;\n      state.done = true;\n      if (IS_ITERATOR) {\n        var returnMethod = getMethod(iterator, 'return');\n        return returnMethod ? call(returnMethod, iterator) : createIterResultObject(undefined, true);\n      }\n      if (done) return createIterResultObject(undefined, true);\n      if (state.inner) try {\n        iteratorClose(state.inner.iterator, NORMAL);\n      } catch (error) {\n        return iteratorClose(iterator, THROW, error);\n      }\n      if (state.openIters) try {\n        iteratorCloseAll(state.openIters, NORMAL);\n      } catch (error) {\n        if (iterator) return iteratorClose(iterator, THROW, error);\n        throw error;\n      }\n      if (iterator) iteratorClose(iterator, NORMAL);\n      return createIterResultObject(undefined, true);\n    }\n  });\n};\n\nvar WrapForValidIteratorPrototype = createIteratorProxyPrototype(true);\nvar IteratorHelperPrototype = createIteratorProxyPrototype(false);\n\ncreateNonEnumerableProperty(IteratorHelperPrototype, TO_STRING_TAG, 'Iterator Helper');\n\nmodule.exports = function (nextHandler, IS_ITERATOR, RETURN_HANDLER_RESULT) {\n  var IteratorProxy = function Iterator(record, state) {\n    if (state) {\n      state.iterator = record.iterator;\n      state.next = record.next;\n    } else state = record;\n    state.type = IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER;\n    state.returnHandlerResult = !!RETURN_HANDLER_RESULT;\n    state.nextHandler = nextHandler;\n    state.counter = 0;\n    state.done = false;\n    setInternalState(this, state);\n  };\n\n  IteratorProxy.prototype = IS_ITERATOR ? WrapForValidIteratorPrototype : IteratorHelperPrototype;\n\n  return IteratorProxy;\n};\n","'use strict';\n// Should throw an error on invalid iterator\n// https://issues.chromium.org/issues/336839115\nmodule.exports = function (methodName, argument) {\n  // eslint-disable-next-line es/no-iterator -- required for testing\n  var method = typeof Iterator == 'function' && Iterator.prototype[methodName];\n  if (method) try {\n    method.call({ next: null }, argument).next();\n  } catch (error) {\n    return true;\n  }\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\n// https://github.com/tc39/ecma262/pull/3467\nmodule.exports = function (METHOD_NAME, ExpectedError) {\n  var Iterator = globalThis.Iterator;\n  var IteratorPrototype = Iterator && Iterator.prototype;\n  var method = IteratorPrototype && IteratorPrototype[METHOD_NAME];\n\n  var CLOSED = false;\n\n  if (method) try {\n    method.call({\n      next: function () { return { done: true }; },\n      'return': function () { CLOSED = true; }\n    }, -1);\n  } catch (error) {\n    // https://bugs.webkit.org/show_bug.cgi?id=291195\n    if (!(error instanceof ExpectedError)) CLOSED = false;\n  }\n\n  if (!CLOSED) return method;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar notANaN = require('../internals/not-a-nan');\nvar toPositiveInteger = require('../internals/to-positive-integer');\nvar iteratorClose = require('../internals/iterator-close');\nvar createIteratorProxy = require('../internals/iterator-create-proxy');\nvar iteratorHelperThrowsOnInvalidIterator = require('../internals/iterator-helper-throws-on-invalid-iterator');\nvar iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');\nvar IS_PURE = require('../internals/is-pure');\n\nvar DROP_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE && !iteratorHelperThrowsOnInvalidIterator('drop', 0);\nvar dropWithoutClosingOnEarlyError = !IS_PURE && !DROP_WITHOUT_THROWING_ON_INVALID_ITERATOR\n  && iteratorHelperWithoutClosingOnEarlyError('drop', RangeError);\n\nvar FORCED = IS_PURE || DROP_WITHOUT_THROWING_ON_INVALID_ITERATOR || dropWithoutClosingOnEarlyError;\n\nvar IteratorProxy = createIteratorProxy(function () {\n  var iterator = this.iterator;\n  var next = this.next;\n  var result, done;\n  while (this.remaining) {\n    this.remaining--;\n    result = anObject(call(next, iterator));\n    done = this.done = !!result.done;\n    if (done) return;\n  }\n  result = anObject(call(next, iterator));\n  done = this.done = !!result.done;\n  if (!done) return result.value;\n});\n\n// `Iterator.prototype.drop` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.drop\n$({ target: 'Iterator', proto: true, real: true, forced: FORCED }, {\n  drop: function drop(limit) {\n    anObject(this);\n    var remaining;\n    try {\n      remaining = toPositiveInteger(notANaN(+limit));\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (dropWithoutClosingOnEarlyError) return call(dropWithoutClosingOnEarlyError, this, remaining);\n\n    return new IteratorProxy(getIteratorDirect(this), {\n      remaining: remaining\n    });\n  }\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.iterator.drop');\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar iterate = require('../internals/iterate');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar iteratorClose = require('../internals/iterator-close');\nvar iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');\n\nvar everyWithoutClosingOnEarlyError = iteratorHelperWithoutClosingOnEarlyError('every', TypeError);\n\n// `Iterator.prototype.every` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.every\n$({ target: 'Iterator', proto: true, real: true, forced: everyWithoutClosingOnEarlyError }, {\n  every: function every(predicate) {\n    anObject(this);\n    try {\n      aCallable(predicate);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (everyWithoutClosingOnEarlyError) return call(everyWithoutClosingOnEarlyError, this, predicate);\n\n    var record = getIteratorDirect(this);\n    var counter = 0;\n    return !iterate(record, function (value, stop) {\n      if (!predicate(value, counter++)) return stop();\n    }, { IS_RECORD: true, INTERRUPTED: true }).stopped;\n  }\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.iterator.every');\n","'use strict';\nvar anObject = require('../internals/an-object');\nvar iteratorClose = require('../internals/iterator-close');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n  try {\n    return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n  } catch (error) {\n    iteratorClose(iterator, 'throw', error);\n  }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar createIteratorProxy = require('../internals/iterator-create-proxy');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar IS_PURE = require('../internals/is-pure');\nvar iteratorClose = require('../internals/iterator-close');\nvar iteratorHelperThrowsOnInvalidIterator = require('../internals/iterator-helper-throws-on-invalid-iterator');\nvar iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');\n\nvar FILTER_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE && !iteratorHelperThrowsOnInvalidIterator('filter', function () { /* empty */ });\nvar filterWithoutClosingOnEarlyError = !IS_PURE && !FILTER_WITHOUT_THROWING_ON_INVALID_ITERATOR\n  && iteratorHelperWithoutClosingOnEarlyError('filter', TypeError);\n\nvar FORCED = IS_PURE || FILTER_WITHOUT_THROWING_ON_INVALID_ITERATOR || filterWithoutClosingOnEarlyError;\n\nvar IteratorProxy = createIteratorProxy(function () {\n  var iterator = this.iterator;\n  var predicate = this.predicate;\n  var next = this.next;\n  var result, done, value;\n  while (true) {\n    result = anObject(call(next, iterator));\n    done = this.done = !!result.done;\n    if (done) return;\n    value = result.value;\n    if (callWithSafeIterationClosing(iterator, predicate, [value, this.counter++], true)) return value;\n  }\n});\n\n// `Iterator.prototype.filter` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.filter\n$({ target: 'Iterator', proto: true, real: true, forced: FORCED }, {\n  filter: function filter(predicate) {\n    anObject(this);\n    try {\n      aCallable(predicate);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (filterWithoutClosingOnEarlyError) return call(filterWithoutClosingOnEarlyError, this, predicate);\n\n    return new IteratorProxy(getIteratorDirect(this), {\n      predicate: predicate\n    });\n  }\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.iterator.filter');\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar iterate = require('../internals/iterate');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar iteratorClose = require('../internals/iterator-close');\nvar iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');\n\nvar findWithoutClosingOnEarlyError = iteratorHelperWithoutClosingOnEarlyError('find', TypeError);\n\n// `Iterator.prototype.find` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.find\n$({ target: 'Iterator', proto: true, real: true, forced: findWithoutClosingOnEarlyError }, {\n  find: function find(predicate) {\n    anObject(this);\n    try {\n      aCallable(predicate);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (findWithoutClosingOnEarlyError) return call(findWithoutClosingOnEarlyError, this, predicate);\n\n    var record = getIteratorDirect(this);\n    var counter = 0;\n    return iterate(record, function (value, stop) {\n      if (predicate(value, counter++)) return stop(value);\n    }, { IS_RECORD: true, INTERRUPTED: true }).result;\n  }\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.iterator.find');\n","'use strict';\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nmodule.exports = function (obj, stringHandling) {\n  if (!stringHandling || typeof obj !== 'string') anObject(obj);\n  var method = getIteratorMethod(obj);\n  return getIteratorDirect(anObject(method !== undefined ? call(method, obj) : obj));\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar getIteratorFlattenable = require('../internals/get-iterator-flattenable');\nvar createIteratorProxy = require('../internals/iterator-create-proxy');\nvar iteratorClose = require('../internals/iterator-close');\nvar IS_PURE = require('../internals/is-pure');\nvar iteratorHelperThrowsOnInvalidIterator = require('../internals/iterator-helper-throws-on-invalid-iterator');\nvar iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');\n\n// Should not throw an error for an iterator without `return` method. Fixed in Safari 26.2\n// https://bugs.webkit.org/show_bug.cgi?id=297532\nfunction throwsOnIteratorWithoutReturn() {\n  try {\n    // eslint-disable-next-line es/no-map, es/no-iterator, es/no-iterator-prototype-flatmap -- required for testing\n    var it = Iterator.prototype.flatMap.call(new Map([[4, 5]]).entries(), function (v) { return v; });\n    it.next();\n    it['return']();\n  } catch (error) {\n    return true;\n  }\n}\n\nvar FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE\n  && !iteratorHelperThrowsOnInvalidIterator('flatMap', function () { /* empty */ });\nvar flatMapWithoutClosingOnEarlyError = !IS_PURE && !FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR\n  && iteratorHelperWithoutClosingOnEarlyError('flatMap', TypeError);\n\nvar FORCED = IS_PURE || FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR || flatMapWithoutClosingOnEarlyError\n  || throwsOnIteratorWithoutReturn();\n\nvar IteratorProxy = createIteratorProxy(function () {\n  var iterator = this.iterator;\n  var mapper = this.mapper;\n  var result, inner;\n\n  while (true) {\n    if (inner = this.inner) try {\n      result = anObject(call(inner.next, inner.iterator));\n      if (!result.done) return result.value;\n      this.inner = null;\n    } catch (error) { iteratorClose(iterator, 'throw', error); }\n\n    result = anObject(call(this.next, iterator));\n\n    if (this.done = !!result.done) return;\n\n    try {\n      this.inner = getIteratorFlattenable(mapper(result.value, this.counter++), false);\n    } catch (error) { iteratorClose(iterator, 'throw', error); }\n  }\n});\n\n// `Iterator.prototype.flatMap` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.flatmap\n$({ target: 'Iterator', proto: true, real: true, forced: FORCED }, {\n  flatMap: function flatMap(mapper) {\n    anObject(this);\n    try {\n      aCallable(mapper);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (flatMapWithoutClosingOnEarlyError) return call(flatMapWithoutClosingOnEarlyError, this, mapper);\n\n    return new IteratorProxy(getIteratorDirect(this), {\n      mapper: mapper,\n      inner: null\n    });\n  }\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.iterator.flat-map');\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar iterate = require('../internals/iterate');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar iteratorClose = require('../internals/iterator-close');\nvar iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');\n\nvar forEachWithoutClosingOnEarlyError = iteratorHelperWithoutClosingOnEarlyError('forEach', TypeError);\n\n// `Iterator.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.foreach\n$({ target: 'Iterator', proto: true, real: true, forced: forEachWithoutClosingOnEarlyError }, {\n  forEach: function forEach(fn) {\n    anObject(this);\n    try {\n      aCallable(fn);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (forEachWithoutClosingOnEarlyError) return call(forEachWithoutClosingOnEarlyError, this, fn);\n\n    var record = getIteratorDirect(this);\n    var counter = 0;\n    iterate(record, function (value) {\n      fn(value, counter++);\n    }, { IS_RECORD: true });\n  }\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.iterator.for-each');\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar toObject = require('../internals/to-object');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar createIteratorProxy = require('../internals/iterator-create-proxy');\nvar getIteratorFlattenable = require('../internals/get-iterator-flattenable');\nvar IS_PURE = require('../internals/is-pure');\n\nvar FORCED = IS_PURE || function () {\n  // Should not throw when an underlying iterator's `return` method is null\n  // https://bugs.webkit.org/show_bug.cgi?id=288714\n  try {\n    // eslint-disable-next-line es/no-iterator -- required for testing\n    Iterator.from({ 'return': null })['return']();\n  } catch (error) {\n    return true;\n  }\n}();\n\nvar IteratorProxy = createIteratorProxy(function () {\n  return call(this.next, this.iterator);\n}, true);\n\n// `Iterator.from` method\n// https://tc39.es/ecma262/#sec-iterator.from\n$({ target: 'Iterator', stat: true, forced: FORCED }, {\n  from: function from(O) {\n    var iteratorRecord = getIteratorFlattenable(typeof O == 'string' ? toObject(O) : O, true);\n    return isPrototypeOf(IteratorPrototype, iteratorRecord.iterator)\n      ? iteratorRecord.iterator\n      : new IteratorProxy(iteratorRecord);\n  }\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.iterator.from');\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar createIteratorProxy = require('../internals/iterator-create-proxy');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar iteratorClose = require('../internals/iterator-close');\nvar iteratorHelperThrowsOnInvalidIterator = require('../internals/iterator-helper-throws-on-invalid-iterator');\nvar iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');\nvar IS_PURE = require('../internals/is-pure');\n\nvar MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE && !iteratorHelperThrowsOnInvalidIterator('map', function () { /* empty */ });\nvar mapWithoutClosingOnEarlyError = !IS_PURE && !MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR\n  && iteratorHelperWithoutClosingOnEarlyError('map', TypeError);\n\nvar FORCED = IS_PURE || MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR || mapWithoutClosingOnEarlyError;\n\nvar IteratorProxy = createIteratorProxy(function () {\n  var iterator = this.iterator;\n  var result = anObject(call(this.next, iterator));\n  var done = this.done = !!result.done;\n  if (!done) return callWithSafeIterationClosing(iterator, this.mapper, [result.value, this.counter++], true);\n});\n\n// `Iterator.prototype.map` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.map\n$({ target: 'Iterator', proto: true, real: true, forced: FORCED }, {\n  map: function map(mapper) {\n    anObject(this);\n    try {\n      aCallable(mapper);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (mapWithoutClosingOnEarlyError) return call(mapWithoutClosingOnEarlyError, this, mapper);\n\n    return new IteratorProxy(getIteratorDirect(this), {\n      mapper: mapper\n    });\n  }\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.iterator.map');\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-function-prototype-bind, es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n  return call.apply(apply, arguments);\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar iteratorClose = require('../internals/iterator-close');\nvar iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');\nvar apply = require('../internals/function-apply');\nvar fails = require('../internals/fails');\n\nvar $TypeError = TypeError;\n\n// https://bugs.webkit.org/show_bug.cgi?id=291651\nvar FAILS_ON_INITIAL_UNDEFINED = fails(function () {\n  // eslint-disable-next-line es/no-iterator-prototype-reduce, es/no-array-prototype-keys, array-callback-return -- required for testing\n  [].keys().reduce(function () { /* empty */ }, undefined);\n});\n\nvar reduceWithoutClosingOnEarlyError = !FAILS_ON_INITIAL_UNDEFINED && iteratorHelperWithoutClosingOnEarlyError('reduce', $TypeError);\n\n// `Iterator.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.reduce\n$({ target: 'Iterator', proto: true, real: true, forced: FAILS_ON_INITIAL_UNDEFINED || reduceWithoutClosingOnEarlyError }, {\n  reduce: function reduce(reducer /* , initialValue */) {\n    anObject(this);\n    try {\n      aCallable(reducer);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    var noInitial = arguments.length < 2;\n    var accumulator = noInitial ? undefined : arguments[1];\n    if (reduceWithoutClosingOnEarlyError) {\n      return apply(reduceWithoutClosingOnEarlyError, this, noInitial ? [reducer] : [reducer, accumulator]);\n    }\n    var record = getIteratorDirect(this);\n    var counter = 0;\n    iterate(record, function (value) {\n      if (noInitial) {\n        noInitial = false;\n        accumulator = value;\n      } else {\n        accumulator = reducer(accumulator, value, counter);\n      }\n      counter++;\n    }, { IS_RECORD: true });\n    if (noInitial) throw new $TypeError('Reduce of empty iterator with no initial value');\n    return accumulator;\n  }\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.iterator.reduce');\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar iterate = require('../internals/iterate');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar iteratorClose = require('../internals/iterator-close');\nvar iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');\n\nvar someWithoutClosingOnEarlyError = iteratorHelperWithoutClosingOnEarlyError('some', TypeError);\n\n// `Iterator.prototype.some` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.some\n$({ target: 'Iterator', proto: true, real: true, forced: someWithoutClosingOnEarlyError }, {\n  some: function some(predicate) {\n    anObject(this);\n    try {\n      aCallable(predicate);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (someWithoutClosingOnEarlyError) return call(someWithoutClosingOnEarlyError, this, predicate);\n\n    var record = getIteratorDirect(this);\n    var counter = 0;\n    return iterate(record, function (value, stop) {\n      if (predicate(value, counter++)) return stop();\n    }, { IS_RECORD: true, INTERRUPTED: true }).stopped;\n  }\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.iterator.some');\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar notANaN = require('../internals/not-a-nan');\nvar toPositiveInteger = require('../internals/to-positive-integer');\nvar createIteratorProxy = require('../internals/iterator-create-proxy');\nvar iteratorClose = require('../internals/iterator-close');\nvar iteratorHelperThrowsOnInvalidIterator = require('../internals/iterator-helper-throws-on-invalid-iterator');\nvar iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');\nvar IS_PURE = require('../internals/is-pure');\n\nvar TAKE_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE && !iteratorHelperThrowsOnInvalidIterator('take', 1);\nvar takeWithoutClosingOnEarlyError = !IS_PURE && !TAKE_WITHOUT_THROWING_ON_INVALID_ITERATOR\n  && iteratorHelperWithoutClosingOnEarlyError('take', RangeError);\n\nvar FORCED = IS_PURE || TAKE_WITHOUT_THROWING_ON_INVALID_ITERATOR || takeWithoutClosingOnEarlyError;\n\nvar IteratorProxy = createIteratorProxy(function () {\n  var iterator = this.iterator;\n  if (!this.remaining--) {\n    this.done = true;\n    return iteratorClose(iterator, 'normal', undefined);\n  }\n  var result = anObject(call(this.next, iterator));\n  var done = this.done = !!result.done;\n  if (!done) return result.value;\n});\n\n// `Iterator.prototype.take` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.take\n$({ target: 'Iterator', proto: true, real: true, forced: FORCED }, {\n  take: function take(limit) {\n    anObject(this);\n    var remaining;\n    try {\n      remaining = toPositiveInteger(notANaN(+limit));\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (takeWithoutClosingOnEarlyError) return call(takeWithoutClosingOnEarlyError, this, remaining);\n\n    return new IteratorProxy(getIteratorDirect(this), {\n      remaining: remaining\n    });\n  }\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.iterator.take');\n","'use strict';\nvar $ = require('../internals/export');\nvar anObject = require('../internals/an-object');\nvar createProperty = require('../internals/create-property');\nvar iterate = require('../internals/iterate');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\n\n// `Iterator.prototype.toArray` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.toarray\n$({ target: 'Iterator', proto: true, real: true }, {\n  toArray: function toArray() {\n    var result = [];\n    var index = 0;\n    iterate(getIteratorDirect(anObject(this)), function (element) {\n      createProperty(result, index++, element);\n    }, { IS_RECORD: true });\n    return result;\n  }\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.iterator.to-array');\n","'use strict';\n// https://github.com/tc39/proposal-iterator-helpers\nrequire('../modules/esnext.iterator.constructor');\nrequire('../modules/esnext.iterator.drop');\nrequire('../modules/esnext.iterator.every');\nrequire('../modules/esnext.iterator.filter');\nrequire('../modules/esnext.iterator.find');\nrequire('../modules/esnext.iterator.flat-map');\nrequire('../modules/esnext.iterator.for-each');\nrequire('../modules/esnext.iterator.from');\nrequire('../modules/esnext.iterator.map');\nrequire('../modules/esnext.iterator.reduce');\nrequire('../modules/esnext.iterator.some');\nrequire('../modules/esnext.iterator.take');\nrequire('../modules/esnext.iterator.to-array');\n","const GLOBAL_OBJ = globalThis;\n\nexport { GLOBAL_OBJ };\n//# sourceMappingURL=worldwide.js.map\n","const SDK_VERSION = \"11.8.0\" ;\n\nexport { SDK_VERSION };\n//# sourceMappingURL=version.js.map\n","import { SDK_VERSION } from './utils/version.js';\nimport { GLOBAL_OBJ } from './utils/worldwide.js';\n\nfunction getMainCarrier() {\n  getSentryCarrier(GLOBAL_OBJ);\n  return GLOBAL_OBJ;\n}\nfunction getSentryCarrier(carrier) {\n  const __SENTRY__ = carrier.__SENTRY__ = carrier.__SENTRY__ || {};\n  __SENTRY__.version = __SENTRY__.version || SDK_VERSION;\n  return __SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {};\n}\nfunction getGlobalSingleton(name, creator, obj = GLOBAL_OBJ) {\n  const __SENTRY__ = obj.__SENTRY__ = obj.__SENTRY__ || {};\n  const carrier = __SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {};\n  return carrier[name] || (carrier[name] = creator());\n}\n\nexport { getGlobalSingleton, getMainCarrier, getSentryCarrier };\n//# sourceMappingURL=carrier.js.map\n","import { getGlobalSingleton } from '../carrier.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nconst CONSOLE_LEVELS = [\n  \"debug\",\n  \"info\",\n  \"warn\",\n  \"error\",\n  \"log\",\n  \"assert\",\n  \"trace\"\n];\nconst PREFIX = \"Sentry Logger \";\nconst originalConsoleMethods = {};\nfunction consoleSandbox(callback) {\n  if (!(\"console\" in GLOBAL_OBJ)) {\n    return callback();\n  }\n  const console = GLOBAL_OBJ.console;\n  const wrappedFuncs = {};\n  const wrappedLevels = Object.keys(originalConsoleMethods);\n  wrappedLevels.forEach((level) => {\n    const originalConsoleMethod = originalConsoleMethods[level];\n    wrappedFuncs[level] = console[level];\n    console[level] = originalConsoleMethod;\n  });\n  try {\n    return callback();\n  } finally {\n    wrappedLevels.forEach((level) => {\n      console[level] = wrappedFuncs[level];\n    });\n  }\n}\nfunction enable() {\n  _getLoggerSettings().enabled = true;\n}\nfunction disable() {\n  _getLoggerSettings().enabled = false;\n}\nfunction isEnabled() {\n  return _getLoggerSettings().enabled;\n}\nfunction log(...args) {\n  _maybeLog(\"log\", ...args);\n}\nfunction warn(...args) {\n  _maybeLog(\"warn\", ...args);\n}\nfunction error(...args) {\n  _maybeLog(\"error\", ...args);\n}\nfunction _maybeLog(level, ...args) {\n  if (!DEBUG_BUILD) {\n    return;\n  }\n  if (isEnabled()) {\n    consoleSandbox(() => {\n      GLOBAL_OBJ.console[level](`${PREFIX}[${level}]:`, ...args);\n    });\n  }\n}\nfunction _getLoggerSettings() {\n  if (!DEBUG_BUILD) {\n    return { enabled: false };\n  }\n  return getGlobalSingleton(\"loggerSettings\", () => ({ enabled: false }));\n}\nconst debug = {\n  /** Enable logging. */\n  enable,\n  /** Disable logging. */\n  disable,\n  /** Check if logging is enabled. */\n  isEnabled,\n  /** Log a message. */\n  log,\n  /** Log a warning. */\n  warn,\n  /** Log an error. */\n  error\n};\n\nexport { CONSOLE_LEVELS, consoleSandbox, debug, originalConsoleMethods };\n//# sourceMappingURL=debug-logger.js.map\n","const STACKTRACE_FRAME_LIMIT = 50;\nconst UNKNOWN_FUNCTION = \"?\";\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/;\nconst STRIP_FRAME_REGEXP = /captureMessage|captureException/;\nfunction createStackParser(...parsers) {\n  const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map((p) => p[1]);\n  return (stack, skipFirstLines = 0, framesToPop = 0) => {\n    const frames = [];\n    const lines = stack.split(\"\\n\");\n    for (let i = skipFirstLines; i < lines.length; i++) {\n      let line = lines[i];\n      if (line.length > 1024) {\n        line = line.slice(0, 1024);\n      }\n      const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, \"$1\") : line;\n      if (cleanedLine.includes(\"Error: \")) {\n        continue;\n      }\n      for (const parser of sortedParsers) {\n        const frame = parser(cleanedLine);\n        if (frame) {\n          frames.push(frame);\n          break;\n        }\n      }\n      if (frames.length >= STACKTRACE_FRAME_LIMIT + framesToPop) {\n        break;\n      }\n    }\n    return stripSentryFramesAndReverse(frames.slice(framesToPop));\n  };\n}\nfunction stackParserFromStackParserOptions(stackParser) {\n  if (Array.isArray(stackParser)) {\n    return createStackParser(...stackParser);\n  }\n  return stackParser;\n}\nfunction stripSentryFramesAndReverse(stack) {\n  if (!stack.length) {\n    return [];\n  }\n  const localStack = Array.from(stack);\n  if (/sentryWrapped/.test(getLastStackFrame(localStack).function || \"\")) {\n    localStack.pop();\n  }\n  localStack.reverse();\n  if (STRIP_FRAME_REGEXP.test(getLastStackFrame(localStack).function || \"\")) {\n    localStack.pop();\n    if (STRIP_FRAME_REGEXP.test(getLastStackFrame(localStack).function || \"\")) {\n      localStack.pop();\n    }\n  }\n  return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map((frame) => ({\n    ...frame,\n    filename: frame.filename || getLastStackFrame(localStack).filename,\n    function: frame.function || UNKNOWN_FUNCTION\n  }));\n}\nfunction getLastStackFrame(arr) {\n  return arr[arr.length - 1] || {};\n}\nconst defaultFunctionName = \"<anonymous>\";\nfunction getFunctionName(fn) {\n  try {\n    if (!fn || typeof fn !== \"function\") {\n      return defaultFunctionName;\n    }\n    return fn.name || defaultFunctionName;\n  } catch {\n    return defaultFunctionName;\n  }\n}\nfunction getFramesFromEvent(event) {\n  const exception = event.exception;\n  if (exception) {\n    const frames = [];\n    try {\n      exception.values.forEach((value) => {\n        if (value.stacktrace.frames) {\n          frames.push(...value.stacktrace.frames);\n        }\n      });\n      return frames;\n    } catch {\n      return void 0;\n    }\n  }\n  return void 0;\n}\nfunction normalizeStackTracePath(path) {\n  let filename = path?.startsWith(\"file://\") ? path.slice(7) : path;\n  if (filename?.match(/\\/[A-Z]:/)) {\n    filename = filename.slice(1);\n  }\n  return filename;\n}\n\nexport { UNKNOWN_FUNCTION, createStackParser, getFramesFromEvent, getFunctionName, normalizeStackTracePath, stackParserFromStackParserOptions, stripSentryFramesAndReverse };\n//# sourceMappingURL=stacktrace.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from '../utils/debug-logger.js';\nimport { getFunctionName } from '../utils/stacktrace.js';\n\nconst handlers = {};\nconst instrumented = {};\nfunction addHandler(type, handler) {\n  handlers[type] = handlers[type] || [];\n  handlers[type].push(handler);\n  return () => {\n    const typeHandlers = handlers[type];\n    if (typeHandlers) {\n      const index = typeHandlers.indexOf(handler);\n      if (index !== -1) {\n        typeHandlers.splice(index, 1);\n      }\n    }\n  };\n}\nfunction resetInstrumentationHandlers() {\n  Object.keys(handlers).forEach((key) => {\n    handlers[key] = void 0;\n  });\n}\nfunction maybeInstrument(type, instrumentFn) {\n  if (!instrumented[type]) {\n    instrumented[type] = true;\n    try {\n      instrumentFn();\n    } catch (e) {\n      DEBUG_BUILD && debug.error(`Error while instrumenting ${type}`, e);\n    }\n  }\n}\nfunction triggerHandlers(type, data) {\n  const typeHandlers = type && handlers[type];\n  if (!typeHandlers) {\n    return;\n  }\n  for (const handler of typeHandlers) {\n    try {\n      handler(data);\n    } catch (e) {\n      DEBUG_BUILD && debug.error(\n        `Error while triggering instrumentation handler.\nType: ${type}\nName: ${getFunctionName(handler)}\nError:`,\n        e\n      );\n    }\n  }\n}\n\nexport { addHandler, maybeInstrument, resetInstrumentationHandlers, triggerHandlers };\n//# sourceMappingURL=handlers.js.map\n","import { GLOBAL_OBJ } from '../utils/worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\nlet _oldOnErrorHandler = null;\nfunction addGlobalErrorInstrumentationHandler(handler) {\n  const type = \"error\";\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentError);\n}\nfunction instrumentError() {\n  _oldOnErrorHandler = GLOBAL_OBJ.onerror;\n  GLOBAL_OBJ.onerror = function(msg, url, line, column, error) {\n    const handlerData = {\n      column,\n      error,\n      line,\n      msg,\n      url\n    };\n    triggerHandlers(\"error\", handlerData);\n    if (_oldOnErrorHandler) {\n      return _oldOnErrorHandler.apply(this, arguments);\n    }\n    return false;\n  };\n  GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__ = true;\n}\n\nexport { addGlobalErrorInstrumentationHandler };\n//# sourceMappingURL=globalError.js.map\n","import { GLOBAL_OBJ } from '../utils/worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\nlet _oldOnUnhandledRejectionHandler = null;\nfunction addGlobalUnhandledRejectionInstrumentationHandler(handler) {\n  const type = \"unhandledrejection\";\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentUnhandledRejection);\n}\nfunction instrumentUnhandledRejection() {\n  _oldOnUnhandledRejectionHandler = GLOBAL_OBJ.onunhandledrejection;\n  GLOBAL_OBJ.onunhandledrejection = function(e) {\n    const handlerData = e;\n    triggerHandlers(\"unhandledrejection\", handlerData);\n    if (_oldOnUnhandledRejectionHandler) {\n      return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n    }\n    return true;\n  };\n  GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__ = true;\n}\n\nexport { addGlobalUnhandledRejectionInstrumentationHandler };\n//# sourceMappingURL=globalUnhandledRejection.js.map\n","const objectToString = Object.prototype.toString;\nfunction isError(wat) {\n  switch (objectToString.call(wat)) {\n    case \"[object Error]\":\n    case \"[object Exception]\":\n    case \"[object DOMException]\":\n    case \"[object WebAssembly.Exception]\":\n      return true;\n    default:\n      return isInstanceOf(wat, Error);\n  }\n}\nfunction isBuiltin(wat, className) {\n  return objectToString.call(wat) === `[object ${className}]`;\n}\nfunction isErrorEvent(wat) {\n  return isBuiltin(wat, \"ErrorEvent\");\n}\nfunction isDOMError(wat) {\n  return isBuiltin(wat, \"DOMError\");\n}\nfunction isDOMException(wat) {\n  return isBuiltin(wat, \"DOMException\");\n}\nfunction isString(wat) {\n  return isBuiltin(wat, \"String\");\n}\nfunction isParameterizedString(wat) {\n  return typeof wat === \"object\" && wat !== null && \"__sentry_template_string__\" in wat && \"__sentry_template_values__\" in wat;\n}\nfunction isPrimitive(wat) {\n  return wat === null || isParameterizedString(wat) || typeof wat !== \"object\" && typeof wat !== \"function\";\n}\nfunction isPlainObject(wat) {\n  return isBuiltin(wat, \"Object\");\n}\nfunction isObjectLike(wat) {\n  return typeof wat === \"object\" && wat !== null;\n}\nfunction isEvent(wat) {\n  return typeof Event !== \"undefined\" && isInstanceOf(wat, Event);\n}\nfunction isElement(wat) {\n  return typeof Element !== \"undefined\" && isInstanceOf(wat, Element);\n}\nfunction isRegExp(wat) {\n  return isBuiltin(wat, \"RegExp\");\n}\nfunction isThenable(wat) {\n  return Boolean(wat?.then && typeof wat.then === \"function\");\n}\nfunction isSyntheticEvent(wat) {\n  return isPlainObject(wat) && \"nativeEvent\" in wat && \"preventDefault\" in wat && \"stopPropagation\" in wat;\n}\nfunction isInstanceOf(wat, base) {\n  try {\n    return wat instanceof base;\n  } catch {\n    return false;\n  }\n}\nfunction isVueViewModel(wat) {\n  return !!(typeof wat === \"object\" && wat !== null && (wat.__isVue || wat._isVue || wat.__v_isVNode));\n}\nfunction isRequest(request) {\n  return typeof Request !== \"undefined\" && isInstanceOf(request, Request);\n}\n\nexport { isDOMError, isDOMException, isElement, isError, isErrorEvent, isEvent, isInstanceOf, isObjectLike, isParameterizedString, isPlainObject, isPrimitive, isRegExp, isRequest, isString, isSyntheticEvent, isThenable, isVueViewModel };\n//# sourceMappingURL=is.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from './debug-logger.js';\nimport { isError, isEvent, isPrimitive, isObjectLike } from './is.js';\n\nfunction fill(source, name, replacementFactory) {\n  if (!(name in source)) {\n    return;\n  }\n  const original = source[name];\n  if (typeof original !== \"function\") {\n    return;\n  }\n  const wrapped = replacementFactory(original);\n  if (typeof wrapped === \"function\") {\n    markFunctionWrapped(wrapped, original);\n  }\n  try {\n    source[name] = wrapped;\n  } catch {\n    DEBUG_BUILD && debug.log(`Failed to replace method \"${name}\" in object`, source);\n  }\n}\nfunction addNonEnumerableProperty(obj, name, value) {\n  try {\n    Object.defineProperty(obj, name, {\n      // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n      value,\n      writable: true,\n      configurable: true\n    });\n  } catch {\n    DEBUG_BUILD && debug.log(`Failed to add non-enumerable property \"${String(name)}\" to object`, obj);\n  }\n}\nfunction markFunctionWrapped(wrapped, original) {\n  try {\n    const proto = original.prototype || {};\n    wrapped.prototype = original.prototype = proto;\n    addNonEnumerableProperty(wrapped, \"__sentry_original__\", original);\n  } catch {\n  }\n}\nfunction wrapMethod(obj, field, wrapped, enumerable = true) {\n  const original = obj[field];\n  if (typeof original !== \"function\") {\n    throw new Error(`Cannot wrap method: ${field} is not a function`);\n  }\n  if (getOriginalFunction(original)) {\n    throw new Error(`Attempting to wrap method ${field} multiple times`);\n  }\n  markFunctionWrapped(wrapped, original);\n  Object.defineProperty(obj, field, {\n    writable: true,\n    configurable: true,\n    enumerable,\n    value: wrapped\n  });\n}\nfunction getOriginalFunction(func) {\n  return func.__sentry_original__;\n}\nfunction convertToPlainObject(value) {\n  if (isError(value)) {\n    return {\n      message: value.message,\n      name: value.name,\n      stack: value.stack,\n      ...getOwnProperties(value)\n    };\n  }\n  if (isEvent(value)) {\n    const { type, target, currentTarget, detail } = value;\n    return {\n      type,\n      target,\n      currentTarget,\n      ...detail ? { detail } : {},\n      ...getOwnProperties(value)\n    };\n  }\n  return value;\n}\nfunction getOwnProperties(obj) {\n  if (isObjectLike(obj)) {\n    return Object.fromEntries(Object.entries(obj));\n  }\n  return {};\n}\nfunction extractExceptionKeysForMessage(exception) {\n  const keys = Object.keys(convertToPlainObject(exception));\n  keys.sort();\n  return !keys[0] ? \"[object has no keys]\" : keys.join(\", \");\n}\nfunction dropUndefinedKeys(inputValue) {\n  const memoizationMap = /* @__PURE__ */ new Map();\n  return _dropUndefinedKeys(inputValue, memoizationMap);\n}\nfunction _dropUndefinedKeys(inputValue, memoizationMap) {\n  if (inputValue === null || typeof inputValue !== \"object\") {\n    return inputValue;\n  }\n  const memoVal = memoizationMap.get(inputValue);\n  if (memoVal !== void 0) {\n    return memoVal;\n  }\n  if (Array.isArray(inputValue)) {\n    const returnValue = [];\n    memoizationMap.set(inputValue, returnValue);\n    inputValue.forEach((value) => {\n      returnValue.push(_dropUndefinedKeys(value, memoizationMap));\n    });\n    return returnValue;\n  }\n  if (isPojo(inputValue)) {\n    const returnValue = {};\n    memoizationMap.set(inputValue, returnValue);\n    const keys = Object.keys(inputValue);\n    keys.forEach((key) => {\n      const val = inputValue[key];\n      if (val !== void 0) {\n        returnValue[key] = _dropUndefinedKeys(val, memoizationMap);\n      }\n    });\n    return returnValue;\n  }\n  return inputValue;\n}\nfunction isPojo(input) {\n  const constructor = input.constructor;\n  return constructor === Object || constructor === void 0;\n}\nfunction objectify(wat) {\n  let objectified;\n  switch (true) {\n    // this will catch both undefined and null\n    case wat == void 0:\n      objectified = new String(wat);\n      break;\n    // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n    // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n    // an object in order to wrap it.\n    case (typeof wat === \"symbol\" || typeof wat === \"bigint\"):\n      objectified = Object(wat);\n      break;\n    // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n    case isPrimitive(wat):\n      objectified = new wat.constructor(wat);\n      break;\n    // by process of elimination, at this point we know that `wat` must already be an object\n    default:\n      objectified = wat;\n      break;\n  }\n  return objectified;\n}\n\nexport { addNonEnumerableProperty, convertToPlainObject, dropUndefinedKeys, extractExceptionKeysForMessage, fill, getOriginalFunction, markFunctionWrapped, objectify, wrapMethod };\n//# sourceMappingURL=object.js.map\n","import { GLOBAL_OBJ } from './worldwide.js';\n\nlet RESOLVED_RUNNER;\nfunction withRandomSafeContext(cb) {\n  if (RESOLVED_RUNNER !== void 0) {\n    return RESOLVED_RUNNER ? RESOLVED_RUNNER(cb) : cb();\n  }\n  const sym = /* @__PURE__ */ Symbol.for(\"__SENTRY_SAFE_RANDOM_ID_WRAPPER__\");\n  const globalWithSymbol = GLOBAL_OBJ;\n  if (sym in globalWithSymbol && typeof globalWithSymbol[sym] === \"function\") {\n    RESOLVED_RUNNER = globalWithSymbol[sym];\n    return RESOLVED_RUNNER(cb);\n  }\n  RESOLVED_RUNNER = null;\n  return cb();\n}\nfunction safeMathRandom() {\n  return withRandomSafeContext(() => Math.random());\n}\nfunction safeDateNow() {\n  return withRandomSafeContext(() => Date.now());\n}\n\nexport { safeDateNow, safeMathRandom, withRandomSafeContext };\n//# sourceMappingURL=randomSafeContext.js.map\n","import { addNonEnumerableProperty } from './object.js';\n\nconst SENTRY_SKIP_NORMALIZATION = /* @__PURE__ */ Symbol.for(\"sentry.skipNormalization\");\nconst SENTRY_OVERRIDE_NORMALIZATION_DEPTH = /* @__PURE__ */ Symbol.for(\"sentry.overrideNormalizationDepth\");\nfunction setSkipNormalizationHint(obj) {\n  addNonEnumerableProperty(obj, SENTRY_SKIP_NORMALIZATION, true);\n}\nfunction setNormalizationDepthOverrideHint(obj, depth) {\n  addNonEnumerableProperty(obj, SENTRY_OVERRIDE_NORMALIZATION_DEPTH, depth);\n}\nfunction hasSkipNormalizationHint(value) {\n  return Boolean(value[SENTRY_SKIP_NORMALIZATION]);\n}\nfunction getNormalizationDepthOverrideHint(value) {\n  const v = value[SENTRY_OVERRIDE_NORMALIZATION_DEPTH];\n  return typeof v === \"number\" ? v : void 0;\n}\n\nexport { getNormalizationDepthOverrideHint, hasSkipNormalizationHint, setNormalizationDepthOverrideHint, setSkipNormalizationHint };\n//# sourceMappingURL=normalizationHints.js.map\n","import { hasSkipNormalizationHint, getNormalizationDepthOverrideHint } from './normalizationHints.js';\nimport { convertToPlainObject } from './object.js';\nimport { getFunctionName } from './stacktrace.js';\n\nlet stringifier;\nfunction setNormalizeStringifier(newStringifier) {\n  stringifier = newStringifier;\n}\nfunction normalize(input, depth = 100, maxProperties = Infinity) {\n  try {\n    return visit(\"\", input, depth, maxProperties);\n  } catch (err) {\n    return { ERROR: `**non-serializable** (${err})` };\n  }\n}\nfunction normalizeToSize(object, depth = 3, maxSize = 100 * 1024) {\n  const normalized = normalize(object, depth);\n  if (jsonSize(normalized) > maxSize) {\n    return normalizeToSize(object, depth - 1, maxSize);\n  }\n  return normalized;\n}\nfunction visit(key, value, depth = Infinity, maxProperties = Infinity, memo = memoBuilder()) {\n  const [memoize, unmemoize] = memo;\n  if (value == null || // this matches null and undefined -> eqeq not eqeqeq\n  [\"boolean\", \"string\"].includes(typeof value) || typeof value === \"number\" && Number.isFinite(value)) {\n    return value;\n  }\n  const stringified = stringifyValue(key, value);\n  if (!stringified.startsWith(\"[object \")) {\n    return stringified;\n  }\n  if (hasSkipNormalizationHint(value)) {\n    return value;\n  }\n  const overrideDepth = getNormalizationDepthOverrideHint(value);\n  const remainingDepth = overrideDepth !== void 0 ? overrideDepth : depth;\n  if (remainingDepth === 0) {\n    return stringified.replace(\"object \", \"\");\n  }\n  if (memoize(value)) {\n    return \"[Circular ~]\";\n  }\n  const valueWithToJSON = value;\n  if (valueWithToJSON && typeof valueWithToJSON.toJSON === \"function\") {\n    try {\n      const jsonValue = valueWithToJSON.toJSON();\n      return visit(\"\", jsonValue, remainingDepth - 1, maxProperties, memo);\n    } catch {\n    }\n  }\n  const normalized = Array.isArray(value) ? [] : {};\n  let numAdded = 0;\n  const visitable = convertToPlainObject(value);\n  for (const visitKey in visitable) {\n    if (!Object.prototype.hasOwnProperty.call(visitable, visitKey)) {\n      continue;\n    }\n    if (numAdded >= maxProperties) {\n      normalized[visitKey] = \"[MaxProperties ~]\";\n      break;\n    }\n    const visitValue = visitable[visitKey];\n    normalized[visitKey] = visit(visitKey, visitValue, remainingDepth - 1, maxProperties, memo);\n    numAdded++;\n  }\n  unmemoize(value);\n  return normalized;\n}\nfunction stringifyValue(key, value) {\n  try {\n    if (stringifier) {\n      const stringified = stringifier(value);\n      if (stringified) {\n        return stringified;\n      }\n    }\n    if (typeof global !== \"undefined\" && value === global) {\n      return \"[Global]\";\n    }\n    if (typeof value === \"number\" && !Number.isFinite(value)) {\n      return `[${value}]`;\n    }\n    if (typeof value === \"function\") {\n      return `[Function: ${getFunctionName(value)}]`;\n    }\n    if (typeof value === \"symbol\") {\n      return `[${String(value)}]`;\n    }\n    if (typeof value === \"bigint\") {\n      return `[BigInt: ${String(value)}]`;\n    }\n    const objName = getConstructorName(value);\n    return `[object ${objName}]`;\n  } catch (err) {\n    return `**non-serializable** (${err})`;\n  }\n}\nfunction getConstructorName(value) {\n  const prototype = Object.getPrototypeOf(value);\n  return prototype?.constructor ? prototype.constructor.name : \"null prototype\";\n}\nfunction utf8Length(value) {\n  return ~-encodeURI(value).split(/%..|./).length;\n}\nfunction jsonSize(value) {\n  return utf8Length(JSON.stringify(value));\n}\nfunction normalizeUrlToBase(url, basePath) {\n  const escapedBase = basePath.replace(/\\\\/g, \"/\").replace(/[|\\\\{}()[\\]^$+*?.]/g, \"\\\\$&\");\n  let newUrl = url;\n  try {\n    newUrl = decodeURI(url);\n  } catch {\n  }\n  return newUrl.replace(/\\\\/g, \"/\").replace(/webpack:\\/?/g, \"\").replace(new RegExp(`(file://)?/*${escapedBase}/*`, \"ig\"), \"app:///\");\n}\nfunction memoBuilder() {\n  const inner = /* @__PURE__ */ new WeakSet();\n  function memoize(obj) {\n    if (inner.has(obj)) {\n      return true;\n    }\n    inner.add(obj);\n    return false;\n  }\n  function unmemoize(obj) {\n    inner.delete(obj);\n  }\n  return [memoize, unmemoize];\n}\n\nexport { normalize, normalizeToSize, normalizeUrlToBase, setNormalizeStringifier, stringifyValue };\n//# sourceMappingURL=normalize.js.map\n","import { isString, isRegExp, isPrimitive } from './is.js';\nimport { stringifyValue } from './normalize.js';\n\nfunction stringify(value, fallback = \"[unserializable]\") {\n  if (typeof value === \"string\") {\n    return value;\n  }\n  try {\n    return JSON.stringify(value);\n  } catch {\n    return typeof fallback === \"function\" ? fallback(value) : fallback;\n  }\n}\nfunction truncate(str, max = 0) {\n  if (typeof str !== \"string\" || max === 0) {\n    return str;\n  }\n  return str.length <= max ? str : `${str.slice(0, max)}...`;\n}\nfunction snipLine(line, colno) {\n  let newLine = line;\n  const lineLength = newLine.length;\n  if (lineLength <= 150) {\n    return newLine;\n  }\n  if (colno > lineLength) {\n    colno = lineLength;\n  }\n  let start = Math.max(colno - 60, 0);\n  if (start < 5) {\n    start = 0;\n  }\n  let end = Math.min(start + 140, lineLength);\n  if (end > lineLength - 5) {\n    end = lineLength;\n  }\n  if (end === lineLength) {\n    start = Math.max(end - 140, 0);\n  }\n  newLine = newLine.slice(start, end);\n  if (start > 0) {\n    newLine = `'{snip} ${newLine}`;\n  }\n  if (end < lineLength) {\n    newLine += \" {snip}\";\n  }\n  return newLine;\n}\nfunction safeJoin(input, delimiter) {\n  if (!Array.isArray(input)) {\n    return \"\";\n  }\n  const output = [];\n  for (let i = 0; i < input.length; i++) {\n    const value = input[i];\n    if (isPrimitive(value)) {\n      output.push(String(value));\n    } else if (value instanceof Error) {\n      output.push(value.message ? `${value.name}: ${value.message}` : value.name);\n    } else {\n      output.push(stringifyValue(void 0, value));\n    }\n  }\n  return output.join(delimiter);\n}\nfunction isMatchingPattern(value, pattern, requireExactStringMatch = false) {\n  if (!isString(value)) {\n    return false;\n  }\n  if (isRegExp(pattern)) {\n    return pattern.test(value);\n  }\n  if (isString(pattern)) {\n    return requireExactStringMatch ? value === pattern : value.includes(pattern);\n  }\n  if (typeof pattern === \"function\") {\n    return pattern(value);\n  }\n  return false;\n}\nfunction stringMatchesSomePattern(testString, patterns = [], requireExactStringMatch = false) {\n  for (const pattern of patterns) {\n    if (isMatchingPattern(testString, pattern, requireExactStringMatch)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport { isMatchingPattern, safeJoin, snipLine, stringMatchesSomePattern, stringify, truncate };\n//# sourceMappingURL=string.js.map\n","import { addNonEnumerableProperty } from './object.js';\nimport { withRandomSafeContext, safeMathRandom } from './randomSafeContext.js';\nimport { snipLine } from './string.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nfunction getCrypto() {\n  const gbl = GLOBAL_OBJ;\n  return gbl.crypto || gbl.msCrypto;\n}\nlet emptyUuid;\nfunction getRandomByte() {\n  return safeMathRandom() * 16;\n}\nfunction uuid4(crypto = getCrypto()) {\n  try {\n    if (crypto?.randomUUID) {\n      return withRandomSafeContext(() => crypto.randomUUID()).replace(/-/g, \"\");\n    }\n  } catch {\n  }\n  if (!emptyUuid) {\n    emptyUuid = \"10000000100040008000\" + 1e11;\n  }\n  return emptyUuid.replace(\n    /[018]/g,\n    (c) => (\n      // eslint-disable-next-line no-bitwise\n      (c ^ (getRandomByte() & 15) >> c / 4).toString(16)\n    )\n  );\n}\nfunction getFirstException(event) {\n  return event.exception?.values?.[0];\n}\nfunction getEventDescription(event) {\n  const { message, event_id: eventId } = event;\n  if (message) {\n    return message;\n  }\n  const firstException = getFirstException(event);\n  if (firstException) {\n    if (firstException.type && firstException.value) {\n      return `${firstException.type}: ${firstException.value}`;\n    }\n    return firstException.type || firstException.value || eventId || \"<unknown>\";\n  }\n  return eventId || \"<unknown>\";\n}\nfunction addExceptionTypeValue(event, value, type) {\n  const exception = event.exception = event.exception || {};\n  const values = exception.values = exception.values || [];\n  const firstException = values[0] = values[0] || {};\n  if (!firstException.value) {\n    firstException.value = value || \"\";\n  }\n  if (!firstException.type) {\n    firstException.type = type || \"Error\";\n  }\n}\nfunction addExceptionMechanism(event, newMechanism) {\n  const firstException = getFirstException(event);\n  if (!firstException) {\n    return;\n  }\n  applyExceptionMechanism(firstException, newMechanism);\n}\nfunction addExceptionMechanismToCapturedException(event, newMechanism) {\n  const exceptions = event.exception?.values;\n  const capturedException = exceptions?.find((exception) => exception.mechanism?.exception_id === 0) ?? exceptions?.[0];\n  if (!capturedException) {\n    return;\n  }\n  applyExceptionMechanism(capturedException, newMechanism);\n}\nfunction applyExceptionMechanism(exception, newMechanism) {\n  const defaultMechanism = { type: \"generic\", handled: true };\n  const currentMechanism = exception.mechanism;\n  exception.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n  if (newMechanism && \"data\" in newMechanism) {\n    exception.mechanism.data = { ...currentMechanism?.data, ...newMechanism.data };\n  }\n}\nconst SEMVER_REGEXP = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\nfunction _parseInt(input) {\n  return parseInt(input || \"\", 10);\n}\nfunction parseSemver(input) {\n  const match = input.match(SEMVER_REGEXP) || [];\n  const major = _parseInt(match[1]);\n  const minor = _parseInt(match[2]);\n  const patch = _parseInt(match[3]);\n  return {\n    buildmetadata: match[5],\n    major: isNaN(major) ? void 0 : major,\n    minor: isNaN(minor) ? void 0 : minor,\n    patch: isNaN(patch) ? void 0 : patch,\n    prerelease: match[4]\n  };\n}\nfunction addContextToFrame(lines, frame, linesOfContext = 5) {\n  if (frame.lineno === void 0) {\n    return;\n  }\n  const maxLines = lines.length;\n  const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0);\n  frame.pre_context = lines.slice(Math.max(0, sourceLine - linesOfContext), sourceLine).map((line) => snipLine(line, 0));\n  const lineIndex = Math.min(maxLines - 1, sourceLine);\n  frame.context_line = snipLine(lines[lineIndex], frame.colno || 0);\n  frame.post_context = lines.slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext).map((line) => snipLine(line, 0));\n}\nfunction checkOrSetAlreadyCaught(exception) {\n  if (isAlreadyCaptured(exception)) {\n    return true;\n  }\n  try {\n    addNonEnumerableProperty(exception, \"__sentry_captured__\", true);\n  } catch {\n  }\n  return false;\n}\nfunction isAlreadyCaptured(exception) {\n  try {\n    return exception.__sentry_captured__;\n  } catch {\n  }\n}\n\nexport { addContextToFrame, addExceptionMechanism, addExceptionMechanismToCapturedException, addExceptionTypeValue, checkOrSetAlreadyCaught, getEventDescription, isAlreadyCaptured, parseSemver, uuid4 };\n//# sourceMappingURL=misc.js.map\n","import { safeDateNow, withRandomSafeContext } from './randomSafeContext.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nconst ONE_SECOND_IN_MS = 1e3;\nconst CLOCK_DRIFT_THRESHOLD_MS = 1e3;\nconst MAX_TIME_ORIGIN_SEGMENTS = 100;\nfunction dateTimestampInSeconds() {\n  return safeDateNow() / ONE_SECOND_IN_MS;\n}\nlet _timeOriginSegments = [];\nfunction createUnixTimestampInSecondsFunc() {\n  const { performance } = GLOBAL_OBJ;\n  if (!performance?.now || !performance.timeOrigin) {\n    if (performance?.now) {\n      _timeOriginSegments = [{ from: 0, origin: safeDateNow() - withRandomSafeContext(() => performance.now()) }];\n    }\n    return dateTimestampInSeconds;\n  }\n  let correctedTimeOrigin = performance.timeOrigin;\n  _timeOriginSegments = [{ from: 0, origin: correctedTimeOrigin }];\n  let isFirstCall = true;\n  let lastCheckedPerformanceNow = 0;\n  return () => {\n    return withRandomSafeContext(() => {\n      const performanceNow = performance.now();\n      const dateNow = Date.now();\n      if (Math.abs(correctedTimeOrigin + performanceNow - dateNow) > CLOCK_DRIFT_THRESHOLD_MS) {\n        correctedTimeOrigin = dateNow - performanceNow;\n        if (isFirstCall) {\n          _timeOriginSegments = [{ from: 0, origin: correctedTimeOrigin }];\n        } else {\n          _timeOriginSegments.push({ from: lastCheckedPerformanceNow, origin: correctedTimeOrigin });\n          if (_timeOriginSegments.length > MAX_TIME_ORIGIN_SEGMENTS) {\n            _timeOriginSegments.splice(1, 1);\n          }\n        }\n      }\n      isFirstCall = false;\n      lastCheckedPerformanceNow = performanceNow;\n      return (correctedTimeOrigin + performanceNow) / ONE_SECOND_IN_MS;\n    });\n  };\n}\nfunction safePerformanceNow() {\n  const { performance } = GLOBAL_OBJ;\n  return performance?.now ? withRandomSafeContext(() => performance.now()) : void 0;\n}\nlet _cachedTimestampInSecondsFn;\nlet _checkedForDriftInThisTask = false;\nfunction performanceTimeToSeconds(monotonicTimeInMs, entryStartTimeInMs = monotonicTimeInMs) {\n  const origin = browserPerformanceTimeOrigin(entryStartTimeInMs);\n  return origin == null ? void 0 : (origin + monotonicTimeInMs) / ONE_SECOND_IN_MS;\n}\nfunction timestampInSeconds() {\n  const func = _cachedTimestampInSecondsFn ?? (_cachedTimestampInSecondsFn = createUnixTimestampInSecondsFunc());\n  return func();\n}\nfunction browserPerformanceTimeOrigin(monotonicTimeInMs = 0) {\n  if (!_checkedForDriftInThisTask) {\n    _checkedForDriftInThisTask = true;\n    void Promise.resolve().then(() => {\n      _checkedForDriftInThisTask = false;\n    });\n    timestampInSeconds();\n  }\n  let segment;\n  for (const candidate of _timeOriginSegments) {\n    if (segment && candidate.from > monotonicTimeInMs) {\n      break;\n    }\n    segment = candidate;\n  }\n  return segment?.origin;\n}\n\nexport { browserPerformanceTimeOrigin, dateTimestampInSeconds, performanceTimeToSeconds, safePerformanceNow, timestampInSeconds };\n//# sourceMappingURL=time.js.map\n","import { uuid4 } from './utils/misc.js';\nimport { timestampInSeconds } from './utils/time.js';\n\nfunction makeSession(context) {\n  const startingTime = timestampInSeconds();\n  const session = {\n    sid: uuid4(),\n    init: true,\n    timestamp: startingTime,\n    started: startingTime,\n    duration: 0,\n    status: \"ok\",\n    errors: 0,\n    ignoreDuration: false,\n    toJSON: () => sessionToJSON(session)\n  };\n  if (context) {\n    updateSession(session, context);\n  }\n  return session;\n}\nfunction updateSession(session, context = {}) {\n  if (context.user) {\n    if (!session.ipAddress && context.user.ip_address) {\n      session.ipAddress = context.user.ip_address;\n    }\n    if (!session.did && !context.did) {\n      session.did = context.user.id || context.user.email || context.user.username;\n    }\n  }\n  session.timestamp = context.timestamp || timestampInSeconds();\n  if (context.abnormal_mechanism) {\n    session.abnormal_mechanism = context.abnormal_mechanism;\n  }\n  if (context.ignoreDuration) {\n    session.ignoreDuration = context.ignoreDuration;\n  }\n  if (context.sid) {\n    session.sid = context.sid.length === 32 ? context.sid : uuid4();\n  }\n  if (context.init !== void 0) {\n    session.init = context.init;\n  }\n  if (!session.did && context.did) {\n    session.did = `${context.did}`;\n  }\n  if (typeof context.started === \"number\") {\n    session.started = context.started;\n  }\n  if (session.ignoreDuration) {\n    session.duration = void 0;\n  } else if (typeof context.duration === \"number\") {\n    session.duration = context.duration;\n  } else {\n    const duration = session.timestamp - session.started;\n    session.duration = duration >= 0 ? duration : 0;\n  }\n  if (context.release) {\n    session.release = context.release;\n  }\n  if (context.environment) {\n    session.environment = context.environment;\n  }\n  if (!session.ipAddress && context.ipAddress) {\n    session.ipAddress = context.ipAddress;\n  }\n  if (!session.userAgent && context.userAgent) {\n    session.userAgent = context.userAgent;\n  }\n  if (typeof context.errors === \"number\") {\n    session.errors = context.errors;\n  }\n  if (context.status) {\n    session.status = context.status;\n  }\n}\nfunction closeSession(session, status) {\n  let context = {};\n  if (status) {\n    context = { status };\n  } else if (session.status === \"ok\") {\n    context = { status: \"exited\" };\n  }\n  updateSession(session, context);\n}\nfunction sessionToJSON(session) {\n  return {\n    sid: `${session.sid}`,\n    init: session.init,\n    // Make sure that sec is converted to ms for date constructor\n    started: new Date(session.started * 1e3).toISOString(),\n    timestamp: new Date(session.timestamp * 1e3).toISOString(),\n    status: session.status,\n    errors: session.errors,\n    did: typeof session.did === \"number\" || typeof session.did === \"string\" ? `${session.did}` : void 0,\n    duration: session.duration,\n    abnormal_mechanism: session.abnormal_mechanism,\n    attrs: {\n      release: session.release,\n      environment: session.environment,\n      ip_address: session.ipAddress,\n      user_agent: session.userAgent\n    }\n  };\n}\n\nexport { closeSession, makeSession, updateSession };\n//# sourceMappingURL=session.js.map\n","function merge(initialObj, mergeObj, levels = 2) {\n  if (!mergeObj || typeof mergeObj !== \"object\" || levels <= 0) {\n    return mergeObj;\n  }\n  if (initialObj && Object.keys(mergeObj).length === 0) {\n    return initialObj;\n  }\n  const output = { ...initialObj };\n  for (const key in mergeObj) {\n    if (Object.prototype.hasOwnProperty.call(mergeObj, key)) {\n      output[key] = merge(output[key], mergeObj[key], levels - 1);\n    }\n  }\n  return output;\n}\n\nexport { merge };\n//# sourceMappingURL=merge.js.map\n","import { uuid4 } from './misc.js';\n\nfunction generateTraceId() {\n  return uuid4();\n}\nfunction generateSpanId() {\n  return uuid4().substring(16);\n}\n\nexport { generateSpanId, generateTraceId };\n//# sourceMappingURL=propagationContext.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { updateSession } from './session.js';\nimport { debug } from './utils/debug-logger.js';\nimport { isPlainObject } from './utils/is.js';\nimport { addNonEnumerableProperty } from './utils/object.js';\nimport { merge } from './utils/merge.js';\nimport { uuid4 } from './utils/misc.js';\nimport { generateTraceId } from './utils/propagationContext.js';\nimport { safeMathRandom } from './utils/randomSafeContext.js';\nimport { truncate } from './utils/string.js';\nimport { dateTimestampInSeconds } from './utils/time.js';\n\nconst DEFAULT_MAX_BREADCRUMBS = 100;\nclass Scope {\n  // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.\n  constructor() {\n    this._notifyingListeners = false;\n    this._scopeListeners = [];\n    this._eventProcessors = [];\n    this._breadcrumbs = [];\n    this._attachments = [];\n    this._user = {};\n    this._tags = {};\n    this._attributes = {};\n    this._extra = {};\n    this._contexts = {};\n    this._sdkProcessingMetadata = {};\n    addNonEnumerableProperty(this, \"refs\", {});\n    this._propagationContext = {\n      traceId: generateTraceId(),\n      sampleRand: safeMathRandom()\n    };\n  }\n  /**\n   * Clone all data from this scope into a new scope.\n   */\n  clone() {\n    const newScope = new Scope();\n    newScope._breadcrumbs = [...this._breadcrumbs];\n    newScope._tags = { ...this._tags };\n    newScope._attributes = { ...this._attributes };\n    newScope._extra = { ...this._extra };\n    newScope._contexts = { ...this._contexts };\n    if (this._contexts.flags) {\n      newScope._contexts.flags = {\n        values: [...this._contexts.flags.values]\n      };\n    }\n    newScope._user = this._user;\n    newScope._level = this._level;\n    newScope._session = this._session;\n    newScope._transactionName = this._transactionName;\n    newScope._fingerprint = this._fingerprint;\n    newScope._eventProcessors = [...this._eventProcessors];\n    newScope._attachments = [...this._attachments];\n    newScope._sdkProcessingMetadata = { ...this._sdkProcessingMetadata };\n    newScope._propagationContext = { ...this._propagationContext };\n    newScope._client = this._client;\n    newScope._lastEventId = this._lastEventId;\n    newScope._conversationId = this._conversationId;\n    newScope.refs = { ...this.refs };\n    return newScope;\n  }\n  /**\n   * Update the client assigned to this scope.\n   * Note that not every scope will have a client assigned - isolation scopes & the global scope will generally not have a client,\n   * as well as manually created scopes.\n   */\n  setClient(client) {\n    this._client = client;\n  }\n  /**\n   * Set the ID of the last captured error event.\n   * This is generally only captured on the isolation scope.\n   */\n  setLastEventId(lastEventId) {\n    this._lastEventId = lastEventId;\n  }\n  /**\n   * Get the client assigned to this scope.\n   */\n  getClient() {\n    return this._client;\n  }\n  /**\n   * Get the ID of the last captured error event.\n   * This is generally only available on the isolation scope.\n   */\n  lastEventId() {\n    return this._lastEventId;\n  }\n  /**\n   * @inheritDoc\n   */\n  addScopeListener(callback) {\n    this._scopeListeners.push(callback);\n  }\n  /**\n   * Add an event processor that will be called before an event is sent.\n   */\n  addEventProcessor(callback) {\n    this._eventProcessors.push(callback);\n    return this;\n  }\n  /**\n   * Set the user for this scope.\n   * Set to `null` to unset the user.\n   */\n  setUser(user) {\n    this._user = user || {\n      email: void 0,\n      id: void 0,\n      ip_address: void 0,\n      username: void 0\n    };\n    if (this._session) {\n      updateSession(this._session, { user });\n    }\n    this._notifyScopeListeners();\n    return this;\n  }\n  /**\n   * Get the user from this scope.\n   */\n  getUser() {\n    return this._user;\n  }\n  /**\n   * Set the conversation ID for this scope.\n   * Set to `null` to unset the conversation ID.\n   */\n  setConversationId(conversationId) {\n    this._conversationId = conversationId || void 0;\n    this._notifyScopeListeners();\n    return this;\n  }\n  /**\n   * Set an object that will be merged into existing tags on the scope,\n   * and will be sent as tags data with the event.\n   */\n  setTags(tags) {\n    this._tags = {\n      ...this._tags,\n      ...tags\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n  /**\n   * Set a single tag that will be sent as tags data with the event.\n   */\n  setTag(key, value) {\n    return this.setTags({ [key]: value });\n  }\n  /**\n   * Sets attributes onto the scope.\n   *\n   * These attributes are applied to logs, metrics and streamed spans.\n   *\n   * Supported attribute value types are `string`, `number`, `boolean`, `string[]`, `number[]` and `boolean[]`.\n   *\n   * @param newAttributes - The attributes to set on the scope, as key-value pairs.\n   *\n   * @example\n   * ```typescript\n   * scope.setAttributes({\n   *   is_admin: true,\n   *   payment_selection: 'credit_card',\n   *   render_duration: 150,\n   * });\n   * ```\n   */\n  setAttributes(newAttributes) {\n    this._attributes = {\n      ...this._attributes,\n      ...newAttributes\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n  /**\n   * Sets an attribute onto the scope.\n   *\n   * These attributes are applied to logs, metrics and streamed spans.\n   *\n   * Supported attribute value types are `string`, `number`, `boolean`, `string[]`, `number[]` and `boolean[]`.\n   *\n   * @param key - The attribute key.\n   * @param value - The attribute value.\n   *\n   * @example\n   * ```typescript\n   * scope.setAttribute('is_admin', true);\n   * scope.setAttribute('render_duration', 150);\n   * ```\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  setAttribute(key, value) {\n    return this.setAttributes({ [key]: value });\n  }\n  /**\n   * Removes the attribute with the given key from the scope.\n   *\n   * @param key - The attribute key.\n   *\n   * @example\n   * ```typescript\n   * scope.removeAttribute('is_admin');\n   * ```\n   */\n  removeAttribute(key) {\n    if (key in this._attributes) {\n      delete this._attributes[key];\n      this._notifyScopeListeners();\n    }\n    return this;\n  }\n  /**\n   * Set an object that will be merged into existing extra on the scope,\n   * and will be sent as extra data with the event.\n   */\n  setExtras(extras) {\n    this._extra = {\n      ...this._extra,\n      ...extras\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n  /**\n   * Set a single key:value extra entry that will be sent as extra data with the event.\n   */\n  setExtra(key, extra) {\n    this._extra = { ...this._extra, [key]: extra };\n    this._notifyScopeListeners();\n    return this;\n  }\n  /**\n   * Sets the fingerprint on the scope to send with the events.\n   * @param {string[]} fingerprint Fingerprint to group events in Sentry.\n   */\n  setFingerprint(fingerprint) {\n    this._fingerprint = fingerprint;\n    this._notifyScopeListeners();\n    return this;\n  }\n  /**\n   * Sets the level on the scope for future events.\n   */\n  setLevel(level) {\n    this._level = level;\n    this._notifyScopeListeners();\n    return this;\n  }\n  /**\n   * Sets the transaction name on the scope so that the name of e.g. taken server route or\n   * the page location is attached to future events.\n   *\n   * IMPORTANT: Calling this function does NOT change the name of the currently active\n   * root span. If you want to change the name of the active root span, use\n   * `Sentry.updateSpanName(rootSpan, 'new name')` instead.\n   *\n   * By default, the SDK updates the scope's transaction name automatically on sensible\n   * occasions, such as a page navigation or when handling a new request on the server.\n   */\n  setTransactionName(name) {\n    this._transactionName = name;\n    this._notifyScopeListeners();\n    return this;\n  }\n  /**\n   * Sets context data with the given name.\n   * Data passed as context will be normalized. You can also pass `null` to unset the context.\n   * Note that context data will not be merged - calling `setContext` will overwrite an existing context with the same key.\n   */\n  setContext(key, context) {\n    if (context === null) {\n      delete this._contexts[key];\n    } else {\n      this._contexts[key] = context;\n    }\n    this._notifyScopeListeners();\n    return this;\n  }\n  /**\n   * Set the session for the scope.\n   */\n  setSession(session) {\n    if (!session) {\n      delete this._session;\n    } else {\n      this._session = session;\n    }\n    this._notifyScopeListeners();\n    return this;\n  }\n  /**\n   * Get the session from the scope.\n   */\n  getSession() {\n    return this._session;\n  }\n  /**\n   * Updates the scope with provided data. Can work in three variations:\n   * - plain object containing updatable attributes\n   * - Scope instance that'll extract the attributes from\n   * - callback function that'll receive the current scope as an argument and allow for modifications\n   */\n  update(captureContext) {\n    if (!captureContext) {\n      return this;\n    }\n    const scopeToMerge = typeof captureContext === \"function\" ? captureContext(this) : captureContext;\n    const scopeInstance = scopeToMerge instanceof Scope ? scopeToMerge.getScopeData() : isPlainObject(scopeToMerge) ? captureContext : void 0;\n    const {\n      tags,\n      attributes,\n      extra,\n      user,\n      contexts,\n      level,\n      fingerprint = [],\n      propagationContext,\n      conversationId\n    } = scopeInstance || {};\n    this._tags = { ...this._tags, ...tags };\n    this._attributes = { ...this._attributes, ...attributes };\n    this._extra = { ...this._extra, ...extra };\n    this._contexts = { ...this._contexts, ...contexts };\n    if (user && Object.keys(user).length) {\n      this._user = user;\n    }\n    if (level) {\n      this._level = level;\n    }\n    if (fingerprint.length) {\n      this._fingerprint = fingerprint;\n    }\n    if (propagationContext) {\n      this._propagationContext = propagationContext;\n    }\n    if (conversationId) {\n      this._conversationId = conversationId;\n    }\n    return this;\n  }\n  /**\n   * Adds a breadcrumb to the scope.\n   * By default, the last 100 breadcrumbs are kept.\n   */\n  addBreadcrumb(breadcrumb, maxBreadcrumbs) {\n    const maxCrumbs = typeof maxBreadcrumbs === \"number\" ? maxBreadcrumbs : DEFAULT_MAX_BREADCRUMBS;\n    if (maxCrumbs <= 0) {\n      return this;\n    }\n    const mergedBreadcrumb = {\n      timestamp: dateTimestampInSeconds(),\n      ...breadcrumb,\n      // Breadcrumb messages can theoretically be infinitely large and they're held in memory so we truncate them not to leak (too much) memory\n      message: breadcrumb.message ? truncate(breadcrumb.message, 2048) : breadcrumb.message\n    };\n    this._breadcrumbs.push(mergedBreadcrumb);\n    if (this._breadcrumbs.length > maxCrumbs) {\n      this._breadcrumbs = this._breadcrumbs.slice(-maxCrumbs);\n    }\n    this._notifyScopeListeners();\n    return this;\n  }\n  /**\n   * Get the last breadcrumb of the scope.\n   */\n  getLastBreadcrumb() {\n    return this._breadcrumbs[this._breadcrumbs.length - 1];\n  }\n  /**\n   * Clear all breadcrumbs from the scope.\n   */\n  clearBreadcrumbs() {\n    this._breadcrumbs = [];\n    this._notifyScopeListeners();\n    return this;\n  }\n  /**\n   * Add an attachment to the scope.\n   */\n  addAttachment(attachment) {\n    this._attachments.push(attachment);\n    return this;\n  }\n  /**\n   * Clear all attachments from the scope.\n   */\n  clearAttachments() {\n    this._attachments = [];\n    return this;\n  }\n  /**\n   * Get the data of this scope, which should be applied to an event during processing.\n   */\n  getScopeData() {\n    return {\n      breadcrumbs: this._breadcrumbs,\n      attachments: this._attachments,\n      contexts: this._contexts,\n      tags: this._tags,\n      attributes: this._attributes,\n      extra: this._extra,\n      user: this._user,\n      level: this._level,\n      fingerprint: this._fingerprint || [],\n      eventProcessors: this._eventProcessors,\n      propagationContext: this._propagationContext,\n      sdkProcessingMetadata: this._sdkProcessingMetadata,\n      transactionName: this._transactionName,\n      conversationId: this._conversationId\n    };\n  }\n  /**\n   * Add data which will be accessible during event processing but won't get sent to Sentry.\n   */\n  setSDKProcessingMetadata(newData) {\n    this._sdkProcessingMetadata = merge(this._sdkProcessingMetadata, newData, 2);\n    return this;\n  }\n  /**\n   * Add propagation context to the scope, used for distributed tracing\n   */\n  setPropagationContext(context) {\n    this._propagationContext = context;\n    return this;\n  }\n  /**\n   * Get propagation context from the scope, used for distributed tracing\n   */\n  getPropagationContext() {\n    return this._propagationContext;\n  }\n  /**\n   * Capture an exception for this scope.\n   *\n   * @returns {string} The id of the captured Sentry event.\n   */\n  captureException(exception, hint) {\n    const eventId = hint?.event_id || uuid4();\n    if (!this._client) {\n      DEBUG_BUILD && debug.warn(\"No client configured on scope - will not capture exception!\");\n      return eventId;\n    }\n    const syntheticException = new Error(\"Sentry syntheticException\");\n    this._client.captureException(\n      exception,\n      {\n        originalException: exception,\n        syntheticException,\n        ...hint,\n        event_id: eventId\n      },\n      this\n    );\n    return eventId;\n  }\n  /**\n   * Capture a message for this scope.\n   *\n   * @returns {string} The id of the captured message.\n   */\n  captureMessage(message, level, hint) {\n    const eventId = hint?.event_id || uuid4();\n    if (!this._client) {\n      DEBUG_BUILD && debug.warn(\"No client configured on scope - will not capture message!\");\n      return eventId;\n    }\n    const syntheticException = hint?.syntheticException ?? new Error(message);\n    this._client.captureMessage(\n      message,\n      level,\n      {\n        originalException: message,\n        syntheticException,\n        ...hint,\n        event_id: eventId\n      },\n      this\n    );\n    return eventId;\n  }\n  /**\n   * Capture a Sentry event for this scope.\n   *\n   * @returns {string} The id of the captured event.\n   */\n  captureEvent(event, hint) {\n    const eventId = event.event_id || hint?.event_id || uuid4();\n    if (!this._client) {\n      DEBUG_BUILD && debug.warn(\"No client configured on scope - will not capture event!\");\n      return eventId;\n    }\n    this._client.captureEvent(event, { ...hint, event_id: eventId }, this);\n    return eventId;\n  }\n  /**\n   * This will be called on every set call.\n   */\n  _notifyScopeListeners() {\n    if (!this._notifyingListeners) {\n      this._notifyingListeners = true;\n      this._scopeListeners.forEach((callback) => {\n        callback(this);\n      });\n      this._notifyingListeners = false;\n    }\n  }\n}\n\nexport { Scope };\n//# sourceMappingURL=scope.js.map\n","import { getGlobalSingleton } from './carrier.js';\nimport { Scope } from './scope.js';\n\nfunction getDefaultCurrentScope() {\n  return getGlobalSingleton(\"defaultCurrentScope\", () => new Scope());\n}\nfunction getDefaultIsolationScope() {\n  return getGlobalSingleton(\"defaultIsolationScope\", () => new Scope());\n}\n\nexport { getDefaultCurrentScope, getDefaultIsolationScope };\n//# sourceMappingURL=defaultScopes.js.map\n","const SUPPRESS_TRACING_KEY = \"__SENTRY_SUPPRESS_TRACING__\";\n\nexport { SUPPRESS_TRACING_KEY };\n//# sourceMappingURL=constants.js.map\n","const isActualPromise = (p) => p instanceof Promise && !p[kChainedCopy];\nconst kChainedCopy = /* @__PURE__ */ Symbol(\"chained PromiseLike\");\nconst chainAndCopyPromiseLike = (original, onSuccess, onError) => {\n  const chained = original.then(\n    (value) => {\n      onSuccess(value);\n      return value;\n    },\n    (err) => {\n      onError(err);\n      throw err;\n    }\n  );\n  return isActualPromise(chained) && isActualPromise(original) ? chained : copyProps(original, chained);\n};\nconst copyProps = (original, chained) => {\n  if (!chained) return original;\n  let mutated = false;\n  for (const key in original) {\n    if (key in chained) continue;\n    mutated = true;\n    const value = original[key];\n    if (typeof value === \"function\") {\n      Object.defineProperty(chained, key, {\n        value: (...args) => value.apply(original, args),\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      chained[key] = value;\n    }\n  }\n  if (mutated) Object.assign(chained, { [kChainedCopy]: true });\n  return chained;\n};\n\nexport { chainAndCopyPromiseLike };\n//# sourceMappingURL=chain-and-copy-promiselike.js.map\n","import { getDefaultCurrentScope, getDefaultIsolationScope } from '../defaultScopes.js';\nimport { Scope } from '../scope.js';\nimport { SUPPRESS_TRACING_KEY } from '../tracing/constants.js';\nimport { chainAndCopyPromiseLike } from '../utils/chain-and-copy-promiselike.js';\nimport { isThenable } from '../utils/is.js';\nimport { getMainCarrier, getSentryCarrier } from '../carrier.js';\n\nclass AsyncContextStack {\n  constructor(scope, isolationScope) {\n    let assignedScope;\n    if (!scope) {\n      assignedScope = new Scope();\n    } else {\n      assignedScope = scope;\n    }\n    let assignedIsolationScope;\n    if (!isolationScope) {\n      assignedIsolationScope = new Scope();\n    } else {\n      assignedIsolationScope = isolationScope;\n    }\n    this._stack = [{ scope: assignedScope }];\n    this._isolationScope = assignedIsolationScope;\n  }\n  /**\n   * Fork a scope for the stack.\n   */\n  withScope(callback) {\n    const scope = this._pushScope();\n    let maybePromiseResult;\n    try {\n      maybePromiseResult = callback(scope);\n    } catch (e) {\n      this._popScope();\n      throw e;\n    }\n    if (isThenable(maybePromiseResult)) {\n      return chainAndCopyPromiseLike(\n        maybePromiseResult,\n        () => this._popScope(),\n        () => this._popScope()\n      );\n    }\n    this._popScope();\n    return maybePromiseResult;\n  }\n  /**\n   * Get the client of the stack.\n   */\n  getClient() {\n    return this.getStackTop().client;\n  }\n  /**\n   * Returns the scope of the top stack.\n   */\n  getScope() {\n    return this.getStackTop().scope;\n  }\n  /**\n   * Get the isolation scope for the stack.\n   */\n  getIsolationScope() {\n    return this._isolationScope;\n  }\n  /**\n   * Returns the topmost scope layer in the order domain > local > process.\n   */\n  getStackTop() {\n    return this._stack[this._stack.length - 1];\n  }\n  /**\n   * Push a scope to the stack.\n   */\n  _pushScope() {\n    const scope = this.getScope().clone();\n    this._stack.push({\n      client: this.getClient(),\n      scope\n    });\n    return scope;\n  }\n  /**\n   * Pop a scope from the stack.\n   */\n  _popScope() {\n    if (this._stack.length <= 1) return false;\n    return !!this._stack.pop();\n  }\n}\nfunction getAsyncContextStack() {\n  const registry = getMainCarrier();\n  const sentry = getSentryCarrier(registry);\n  return sentry.stack = sentry.stack || new AsyncContextStack(getDefaultCurrentScope(), getDefaultIsolationScope());\n}\nfunction withScope(callback) {\n  return getAsyncContextStack().withScope(callback);\n}\nfunction withSetScope(scope, callback) {\n  const stack = getAsyncContextStack();\n  return stack.withScope(() => {\n    stack.getStackTop().scope = scope;\n    return callback(scope);\n  });\n}\nfunction withIsolationScope(callback) {\n  return getAsyncContextStack().withScope(() => {\n    return callback(getAsyncContextStack().getIsolationScope());\n  });\n}\nfunction getStackAsyncContextStrategy() {\n  return {\n    suppressTracing: suppressTracingInStack,\n    withIsolationScope,\n    withScope,\n    withSetScope,\n    withSetIsolationScope: (_isolationScope, callback) => {\n      return withIsolationScope(callback);\n    },\n    getCurrentScope: () => getAsyncContextStack().getScope(),\n    getIsolationScope: () => getAsyncContextStack().getIsolationScope()\n  };\n}\nfunction suppressTracingInStack(callback) {\n  return withScope((scope) => {\n    scope.setSDKProcessingMetadata({ [SUPPRESS_TRACING_KEY]: true });\n    const res = callback();\n    scope.setSDKProcessingMetadata({ [SUPPRESS_TRACING_KEY]: void 0 });\n    return res;\n  });\n}\n\nexport { AsyncContextStack, getStackAsyncContextStrategy };\n//# sourceMappingURL=stackStrategy.js.map\n","import { getSentryCarrier, getMainCarrier } from '../carrier.js';\nimport { getStackAsyncContextStrategy } from './stackStrategy.js';\n\nfunction setAsyncContextStrategy(strategy) {\n  const registry = getMainCarrier();\n  const sentry = getSentryCarrier(registry);\n  sentry.acs = strategy;\n}\nfunction getAsyncContextStrategy(carrier) {\n  const sentry = getSentryCarrier(carrier);\n  if (sentry.acs) {\n    return sentry.acs;\n  }\n  return getStackAsyncContextStrategy();\n}\n\nexport { getAsyncContextStrategy, setAsyncContextStrategy };\n//# sourceMappingURL=index.js.map\n","import { isPrimitive } from './utils/is.js';\n\nfunction isAttributeObject(maybeObj) {\n  return typeof maybeObj === \"object\" && maybeObj != null && !Array.isArray(maybeObj) && Object.keys(maybeObj).includes(\"value\");\n}\nfunction attributeValueToTypedAttributeValue(rawValue, useFallback) {\n  const { value, unit } = isAttributeObject(rawValue) ? rawValue : { value: rawValue, unit: void 0 };\n  const attributeValue = getTypedAttributeValue(value);\n  const checkedUnit = unit && typeof unit === \"string\" ? { unit } : {};\n  if (attributeValue) {\n    return { ...attributeValue, ...checkedUnit };\n  }\n  if (!useFallback || useFallback === \"skip-undefined\" && value === void 0) {\n    return;\n  }\n  let stringValue = \"\";\n  try {\n    stringValue = JSON.stringify(value) ?? \"\";\n  } catch {\n  }\n  return {\n    value: stringValue,\n    type: \"string\",\n    ...checkedUnit\n  };\n}\nfunction serializeAttributes(attributes, fallback = false) {\n  const serializedAttributes = {};\n  for (const [key, value] of Object.entries(attributes ?? {})) {\n    const typedValue = attributeValueToTypedAttributeValue(value, fallback);\n    if (typedValue) {\n      serializedAttributes[key] = typedValue;\n    }\n  }\n  return serializedAttributes;\n}\nfunction estimateTypedAttributesSizeInBytes(attributes) {\n  if (!attributes) {\n    return 0;\n  }\n  let weight = 0;\n  for (const [key, attr] of Object.entries(attributes)) {\n    weight += key.length * 2;\n    weight += attr.type.length * 2;\n    weight += (attr.unit?.length ?? 0) * 2;\n    const val = attr.value;\n    if (Array.isArray(val)) {\n      weight += estimatePrimitiveSizeInBytes(val[0]) * val.length;\n    } else if (isPrimitive(val)) {\n      weight += estimatePrimitiveSizeInBytes(val);\n    } else {\n      weight += 100;\n    }\n  }\n  return weight;\n}\nfunction estimatePrimitiveSizeInBytes(value) {\n  if (typeof value === \"string\") {\n    return value.length * 2;\n  } else if (typeof value === \"boolean\") {\n    return 4;\n  } else if (typeof value === \"number\") {\n    return 8;\n  }\n  return 0;\n}\nfunction getTypedAttributeValue(value) {\n  if (Array.isArray(value)) {\n    return { value, type: \"array\" };\n  }\n  const primitiveType = typeof value === \"string\" ? \"string\" : typeof value === \"boolean\" ? \"boolean\" : typeof value === \"number\" && !Number.isNaN(value) ? Number.isInteger(value) ? \"integer\" : \"double\" : null;\n  if (primitiveType) {\n    return { value, type: primitiveType };\n  }\n}\n\nexport { attributeValueToTypedAttributeValue, estimateTypedAttributesSizeInBytes, isAttributeObject, serializeAttributes };\n//# sourceMappingURL=attributes.js.map\n","import { getAsyncContextStrategy } from './asyncContext/index.js';\nimport { getMainCarrier, getSentryCarrier, getGlobalSingleton } from './carrier.js';\nimport { Scope } from './scope.js';\nimport { generateSpanId } from './utils/propagationContext.js';\n\nfunction registerExternalPropagationContext(fn) {\n  getSentryCarrier(getMainCarrier()).externalPropagationContextProvider = fn;\n}\nfunction getExternalPropagationContext() {\n  return getSentryCarrier(getMainCarrier()).externalPropagationContextProvider?.();\n}\nfunction hasExternalPropagationContext() {\n  return getSentryCarrier(getMainCarrier()).externalPropagationContextProvider !== void 0;\n}\nfunction getCurrentScope() {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n  return acs.getCurrentScope();\n}\nfunction getIsolationScope() {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n  return acs.getIsolationScope();\n}\nfunction getGlobalScope() {\n  return getGlobalSingleton(\"globalScope\", () => new Scope());\n}\nfunction withScope(...rest) {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n  if (rest.length === 2) {\n    const [scope, callback] = rest;\n    if (!scope) {\n      return acs.withScope(callback);\n    }\n    return acs.withSetScope(scope, callback);\n  }\n  return acs.withScope(rest[0]);\n}\nfunction withIsolationScope(...rest) {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n  if (rest.length === 2) {\n    const [isolationScope, callback] = rest;\n    if (!isolationScope) {\n      return acs.withIsolationScope(callback);\n    }\n    return acs.withSetIsolationScope(isolationScope, callback);\n  }\n  return acs.withIsolationScope(rest[0]);\n}\nfunction getClient() {\n  return getCurrentScope().getClient();\n}\nfunction getTraceContextFromScope(scope) {\n  const externalContext = getExternalPropagationContext();\n  if (externalContext) {\n    return { trace_id: externalContext.traceId, span_id: externalContext.spanId };\n  }\n  const propagationContext = scope.getPropagationContext();\n  const { traceId, parentSpanId, propagationSpanId } = propagationContext;\n  const traceContext = {\n    trace_id: traceId,\n    span_id: propagationSpanId || generateSpanId()\n  };\n  if (parentSpanId) {\n    traceContext.parent_span_id = parentSpanId;\n  }\n  return traceContext;\n}\n\nexport { getClient, getCurrentScope, getExternalPropagationContext, getGlobalScope, getIsolationScope, getTraceContextFromScope, hasExternalPropagationContext, registerExternalPropagationContext, withIsolationScope, withScope };\n//# sourceMappingURL=currentScopes.js.map\n","const e=\"address\",t=\"ai.citations\",i=\"ai.completion_tokens.used\",a=\"ai.documents\",s=\"ai.finish_reason\",r=\"ai.frequency_penalty\",n=\"ai.function_call\",o=\"ai.generation_id\",l=\"ai.input_messages\",p=\"ai.is_search_required\",c=\"ai.metadata\",u=\"ai.model.id\",d=\"ai.model_id\",m=\"ai.model.provider\",g=\"ai.pipeline.name\",b=\"ai.preamble\",y=\"ai.presence_penalty\",_=\"ai.prompt\",h=\"ai.prompt.messages\",f=\"ai.prompt_tokens.used\",v=\"ai.prompt.tools\",k=\"ai.raw_prompting\",T=\"ai.responses\",S=\"ai.response_format\",E=\"ai.response.id\",O=\"ai.response.model\",I=\"ai.response.object\",A=\"ai.response.text\",w=\"ai.response.timestamp\",x=\"ai.response.toolCalls\",R=\"ai.schema\",N=\"ai.search_queries\",C=\"ai.search_results\",P=\"ai.seed\",D=\"ai.streaming\",L=\"ai.tags\",q=\"ai.temperature\",M=\"ai.texts\",U=\"ai.toolCall.args\",G=\"ai.toolCall.result\",z=\"ai.tools\",Y=\"ai.tool_calls\",V=\"ai.top_k\",F=\"ai.top_p\",K=\"ai.total_cost\",B=\"ai.total_tokens.used\",W=\"ai.usage.tokens\",H=\"ai.values\",j=\"ai.warnings\",Q=\"angular.version\",J=\"anthropic.tool_result.content\",X=\"app.app_build\",Z=\"app.app_identifier\",$=\"app.app_name\",ee=\"app.app_start_time\",te=\"app.app_version\",ie=\"app.build\",ae=\"app.identifier\",se=\"app.in_foreground\",re=\"app.name\",ne=\"app_start_cold\",oe=\"app.start_time\",le=\"app_start_type\",pe=\"app_start_warm\",ce=\"app.version\",ue=\"app.vitals.frames.delay.value\",de=\"app.vitals.frames.frozen.count\",me=\"app.vitals.frames.frozen.rate\",ge=\"app.vitals.frames.slow.count\",be=\"app.vitals.frames.slow.rate\",ye=\"app.vitals.frames.total.count\",_e=\"app.vitals.stall.duration\",he=\"app.vitals.stall.percentage\",fe=\"app.vitals.start.cold.value\",ve=\"app.vitals.start.prewarmed\",ke=\"app.vitals.start.reason\",Te=\"app.vitals.start.screen\",Se=\"app.vitals.start.type\",Ee=\"app.vitals.start.warm.value\",Oe=\"app.vitals.ttfd.value\",Ie=\"app.vitals.ttid.value\",Ae=\"art.gc.blocking_count\",we=\"art.gc.blocking_time\",xe=\"art.gc.pre_oome_count\",Re=\"art.gc.total_count\",Ne=\"art.gc.total_time\",Ce=\"art.gc.waiting_time\",Pe=\"art.memory.free\",De=\"art.memory.free_until_gc\",Le=\"art.memory.free_until_oome\",qe=\"art.memory.max\",Me=\"art.memory.total\",Ue=\"aws.cloudwatch.logs.log_group\",Ge=\"aws.cloudwatch.logs.log_stream\",ze=\"aws.cloudwatch.logs.url\",Ye=\"aws.dynamodb.attributes_to_get\",Ve=\"aws.dynamodb.attribute_definitions\",Fe=\"aws.dynamodb.consistent_read\",Ke=\"aws.dynamodb.consumed_capacity\",Be=\"aws.dynamodb.count\",We=\"aws.dynamodb.exclusive_start_table\",He=\"aws.dynamodb.global_secondary_indexes\",je=\"aws.dynamodb.global_secondary_index_updates\",Qe=\"aws.dynamodb.index_name\",Je=\"aws.dynamodb.item_collection_metrics\",Xe=\"aws.dynamodb.limit\",Ze=\"aws.dynamodb.local_secondary_indexes\",$e=\"aws.dynamodb.projection\",et=\"aws.dynamodb.provisioned_read_capacity\",tt=\"aws.dynamodb.provisioned_write_capacity\",it=\"aws.dynamodb.scanned_count\",at=\"aws.dynamodb.scan_forward\",st=\"aws.dynamodb.segment\",rt=\"aws.dynamodb.select\",nt=\"aws.dynamodb.table_count\",ot=\"aws.dynamodb.table_names\",lt=\"aws.dynamodb.total_segments\",pt=\"aws.extended_request_id\",ct=\"aws.kinesis.stream_name\",ut=\"aws.kinesis.stream.name\",dt=\"aws.lambda.aws_request_id\",mt=\"aws.lambda.execution_duration_in_millis\",gt=\"aws.lambda.function_name\",bt=\"aws.lambda.function_version\",yt=\"aws.lambda.invoked_arn\",_t=\"aws.lambda.invoked_function_arn\",ht=\"aws.lambda.remaining_time_in_millis\",ft=\"aws.log.group.names\",vt=\"aws.log.stream.names\",kt=\"aws.operation_name\",Tt=\"aws_region\",St=\"aws.request.extended_id\",Et=\"aws.request_id\",Ot=\"aws.request.id\",It=\"aws.request.url\",At=\"aws.s3.bucket\",wt=\"aws.s3.copy_source\",xt=\"aws.s3.delete\",Rt=\"aws.s3.key\",Nt=\"aws.s3.part_number\",Ct=\"aws.s3.upload_id\",Pt=\"aws.secretsmanager.secret.arn\",Dt=\"aws.sns.topic.arn\",Lt=\"aws.sqs.queue.url\",qt=\"aws.step_functions.activity.arn\",Mt=\"aws.step_functions.execution.arn\",Ut=\"aws.step_functions.state_machine.arn\",Gt=\"blocked_main_thread\",zt=\"browser.bfcache.frame\",Yt=\"browser.bfcache.not_restored_reason_count\",Vt=\"browser.bfcache.outcome\",Ft=\"browser.bfcache.reason\",Kt=\"browser.name\",Bt=\"browser.navigation.id\",Wt=\"browser.navigation.type\",Ht=\"browser.paint.type\",jt=\"browser.performance.navigation.activation_start\",Qt=\"browser.performance.time_origin\",Jt=\"browser.report.type\",Xt=\"browser.script.invoker\",Zt=\"browser.script.invoker_type\",$t=\"browser.script.source_char_position\",ei=\"browser.version\",ti=\"browser.web_vital.cls.report_event\",ii=\"browser.web_vital.cls.source.<key>\",ai=\"browser.web_vital.cls.source\",si=\"browser.web_vital.cls.value\",ri=\"browser.web_vital.fcp.value\",ni=\"browser.web_vital.fp.value\",oi=\"browser.web_vital.inp.interaction_type\",li=\"browser.web_vital.inp.target\",pi=\"browser.web_vital.inp.value\",ci=\"browser.web_vital.lcp.element\",ui=\"browser.web_vital.lcp.id\",di=\"browser.web_vital.lcp.load_time\",mi=\"browser.web_vital.lcp.render_time\",gi=\"browser.web_vital.lcp.report_event\",bi=\"browser.web_vital.lcp.size\",yi=\"browser.web_vital.lcp.url\",_i=\"browser.web_vital.lcp.value\",hi=\"browser.web_vital.ttfb.request_time\",fi=\"browser.web_vital.ttfb.value\",vi=\"cache.hit\",ki=\"cache.item_age\",Ti=\"cache.item_size\",Si=\"cache.key\",Ei=\"cache.operation\",Oi=\"cache.tags\",Ii=\"cache.ttl\",Ai=\"cache.write\",wi=\"channel\",xi=\"client.address\",Ri=\"client.port\",Ni=\"cloudflare.d1.duration\",Ci=\"cloudflare.d1.query_type\",Pi=\"cloudflare.d1.rows_read\",Di=\"cloudflare.d1.rows_written\",Li=\"cloudflare.durable_object.query.bindings\",qi=\"cloudflare.durable_object.response.rows_read\",Mi=\"cloudflare.durable_object.response.rows_written\",Ui=\"cloudflare.r2.bucket\",Gi=\"cloudflare.r2.operation\",zi=\"cloudflare.r2.request.delimiter\",Yi=\"cloudflare.r2.request.key\",Vi=\"cloudflare.r2.request.part_number\",Fi=\"cloudflare.r2.request.prefix\",Ki=\"cloudflare.workflow.attempt\",Bi=\"cloudflare.workflow.retries.backoff\",Wi=\"cloudflare.workflow.retries.delay\",Hi=\"cloudflare.workflow.retries.limit\",ji=\"cloudflare.workflow.timeout\",Qi=\"cloud.account.id\",Ji=\"cloud.availability_zone\",Xi=\"cloud.platform\",Zi=\"cloud.provider\",$i=\"cloud.region\",ea=\"cloud.resource_id\",ta=\"cls\",ia=\"cls.source.<key>\",aa=\"cls.source\",sa=\"code\",ra=\"code.filepath\",na=\"code.file.path\",oa=\"code.function\",la=\"code.function.name\",pa=\"code.lineno\",ca=\"code.line.number\",ua=\"code.namespace\",da=\"connectionType\",ma=\"connection.rtt\",ga=\"culture.calendar\",ba=\"culture.display_name\",ya=\"culture.is_24_hour_format\",_a=\"culture.locale\",ha=\"culture.timezone\",fa=\"db.collection.name\",va=\"db.connection_string\",ka=\"db.driver.name\",Ta=\"db.mongodb.collection\",Sa=\"db.name\",Ea=\"db.namespace\",Oa=\"db.operation\",Ia=\"db.operation.batch.size\",Aa=\"db.operation.name\",wa=\"db.params\",xa=\"db.query.parameter.<key>\",Ra=\"db.query.parameter\",Na=\"db.query.summary\",Ca=\"db.query.text\",Pa=\"db.redis.connection\",Da=\"db.redis.key\",La=\"db.redis.parameters\",qa=\"db.response.status_code\",Ma=\"db.sql.bindings\",Ua=\"db.statement\",Ga=\"db.stored_procedure.name\",za=\"db.system\",Ya=\"db.system.name\",Va=\"db.user\",Fa=\"deviceMemory\",Ka=\"device.archs\",Ba=\"device.battery_level\",Wa=\"device.battery_temperature\",Ha=\"device.boot_time\",ja=\"device.brand\",Qa=\"device.charging\",Ja=\"device.chipset\",Xa=\"device.class\",Za=\"device.connection_type\",$a=\"device.cpu_description\",es=\"device.external_free_storage\",ts=\"device.external_storage_size\",is=\"device.family\",as=\"device.free_memory\",ss=\"device.free_storage\",rs=\"device.id\",ns=\"device.locale\",os=\"device.low_memory\",ls=\"device.low_power_mode\",ps=\"device.manufacturer\",cs=\"device.memory.estimated_capacity\",us=\"device.memory_size\",ds=\"device.model\",ms=\"device.model_id\",gs=\"device.name\",bs=\"device.online\",ys=\"device.orientation\",_s=\"device.processor_count\",hs=\"device.processor_frequency\",fs=\"device.screen_density\",vs=\"device.screen_dpi\",ks=\"device.screen_height_pixels\",Ts=\"device.screen_width_pixels\",Ss=\"device.simulator\",Es=\"device.storage_size\",Os=\"device.thermal_state\",Is=\"device.timezone\",As=\"device.usable_memory\",ws=\"dist\",xs=\"django.function_name\",Rs=\"django.middleware_name\",Ns=\"effectiveConnectionType\",Cs=\"environment\",Ps=\"error.type\",Ds=\"event.id\",Ls=\"event.name\",qs=\"exception.escaped\",Ms=\"exception.message\",Us=\"exception.stacktrace\",Gs=\"exception.type\",zs=\"faas.coldstart\",Ys=\"faas.cron\",Vs=\"faas.duration_in_ms\",Fs=\"faas.entry_point\",Ks=\"faas.execution\",Bs=\"faas.id\",Ws=\"faas.identity\",Hs=\"faas.invocation_id\",js=\"faas.invoked_name\",Qs=\"faas.invoked_provider\",Js=\"faas.invoked_region\",Xs=\"faas.name\",Zs=\"faas.time\",$s=\"faas.trigger\",er=\"faas.version\",tr=\"fcp\",ir=\"file.path\",ar=\"file.size\",sr=\"flag.evaluation.<key>\",rr=\"flag.evaluation\",nr=\"fp\",or=\"frames.delay\",lr=\"frames.frozen\",pr=\"frames_frozen_rate\",cr=\"frames.slow\",ur=\"frames_slow_rate\",dr=\"frames.total\",mr=\"fs_error\",gr=\"gcp.function.context.event_id\",br=\"gcp.function.context.event_type\",yr=\"gcp.function.context.id\",_r=\"gcp.function.context.resource\",hr=\"gcp.function.context.source\",fr=\"gcp.function.context.specversion\",vr=\"gcp.function.context.time\",kr=\"gcp.function.context.timestamp\",Tr=\"gcp.function.context.type\",Sr=\"gcp.project.id\",Er=\"gcp_region\",Or=\"gen_ai.agent.name\",Ir=\"gen_ai.context.utilization\",Ar=\"gen_ai.context.window_size\",wr=\"gen_ai.conversation.id\",xr=\"gen_ai.cost.cache_creation.input_tokens\",Rr=\"gen_ai.cost.cache_read.input_tokens\",Nr=\"gen_ai.cost.input_tokens\",Cr=\"gen_ai.cost.output_tokens\",Pr=\"gen_ai.cost.reasoning.output_tokens\",Dr=\"gen_ai.cost.total_tokens\",Lr=\"gen_ai.embeddings.input\",qr=\"gen_ai.function_id\",Mr=\"gen_ai.input.messages\",Ur=\"gen_ai.memory.query.text\",Gr=\"gen_ai.memory.records\",zr=\"gen_ai.memory.record.count\",Yr=\"gen_ai.memory.record.id\",Vr=\"gen_ai.memory.store.id\",Fr=\"gen_ai.operation.name\",Kr=\"gen_ai.operation.type\",Br=\"gen_ai.output.messages\",Wr=\"gen_ai.pipeline.name\",Hr=\"gen_ai.prompt\",jr=\"gen_ai.prompt.name\",Qr=\"gen_ai.prompt.variable.<key>\",Jr=\"gen_ai.prompt.variable\",Xr=\"gen_ai.provider.name\",Zr=\"gen_ai.request.available_tools\",$r=\"gen_ai.request.frequency_penalty\",en=\"gen_ai.request.max_tokens\",tn=\"gen_ai.request.messages\",an=\"gen_ai.request.model\",sn=\"gen_ai.request.presence_penalty\",rn=\"gen_ai.request.reasoning.level\",nn=\"gen_ai.request.schema\",on=\"gen_ai.request.seed\",ln=\"gen_ai.request.stop_sequences\",pn=\"gen_ai.request.temperature\",cn=\"gen_ai.request.top_k\",un=\"gen_ai.request.top_p\",dn=\"gen_ai.response.finish_reason\",mn=\"gen_ai.response.finish_reasons\",gn=\"gen_ai.response.id\",bn=\"gen_ai.response.model\",yn=\"gen_ai.response.object\",_n=\"gen_ai.response.streaming\",hn=\"gen_ai.response.text\",fn=\"gen_ai.response.time_to_first_chunk\",vn=\"gen_ai.response.time_to_first_token\",kn=\"gen_ai.response.tokens_per_second\",Tn=\"gen_ai.response.tool_calls\",Sn=\"gen_ai.system\",En=\"gen_ai.system_instructions\",On=\"gen_ai.system.message\",In=\"gen_ai.tool.call.arguments\",An=\"gen_ai.tool.call.result\",wn=\"gen_ai.tool.definitions\",xn=\"gen_ai.tool.description\",Rn=\"gen_ai.tool.input\",Nn=\"gen_ai.tool.message\",Cn=\"gen_ai.tool.name\",Pn=\"gen_ai.tool.output\",Dn=\"gen_ai.tool.type\",Ln=\"gen_ai.usage.cache_creation.input_tokens\",qn=\"gen_ai.usage.cache_creation_input_tokens\",Mn=\"gen_ai.usage.cache_read.input_tokens\",Un=\"gen_ai.usage.cache_read_input_tokens\",Gn=\"gen_ai.usage.completion_tokens\",zn=\"gen_ai.usage.input_tokens\",Yn=\"gen_ai.usage.input_tokens.cached\",Vn=\"gen_ai.usage.input_tokens.cache_write\",Fn=\"gen_ai.usage.output_tokens\",Kn=\"gen_ai.usage.output_tokens.reasoning\",Bn=\"gen_ai.usage.prompt_tokens\",Wn=\"gen_ai.usage.reasoning.output_tokens\",Hn=\"gen_ai.usage.total_tokens\",jn=\"graphql.document\",Qn=\"graphql.operation.name\",Jn=\"graphql.operation.type\",Xn=\"graphql.processing.type\",Zn=\"graphql.source\",$n=\"grpc.error.bad_request.field_violations\",eo=\"grpc.error.debug_info.detail\",to=\"grpc.error.debug_info.stack_entries\",io=\"grpc.error.error_info.domain\",ao=\"grpc.error.error_info.metadata.<key>\",so=\"grpc.error.error_info.metadata\",ro=\"grpc.error.error_info.reason\",no=\"grpc.error.precondition_failure.violations\",oo=\"grpc.error.quota_failure.violations\",lo=\"grpc.error.resource_info.description\",po=\"grpc.error.resource_info.owner\",co=\"grpc.error.resource_info.resource_name\",uo=\"grpc.error.resource_info.resource_type\",mo=\"grpc.error.retry_info.retry_delay_ms\",go=\"hardwareConcurrency\",bo=\"http.client_ip\",yo=\"http.decoded_response_content_length\",_o=\"http.flavor\",ho=\"http.fragment\",fo=\"http.host\",vo=\"http.method\",ko=\"http.query\",To=\"http.request.body.data\",So=\"http.request.body.decoded_size\",Eo=\"http.request.body.size\",Oo=\"http.request.connection_end\",Io=\"http.request.connect_start\",Ao=\"http.request_content_length\",wo=\"http.request_content_length_uncompressed\",xo=\"http.request.domain_lookup_end\",Ro=\"http.request.domain_lookup_start\",No=\"http.request.fetch_start\",Co=\"http.request.header.<key>\",Po=\"http.request.header\",Do=\"http.request.method\",Lo=\"http.request_method\",qo=\"http.request.redirect_end\",Mo=\"http.request.redirect_start\",Uo=\"http.request.request_start\",Go=\"http.request.resend_count\",zo=\"http.request.response_end\",Yo=\"http.request.response_start\",Vo=\"http.request.same_origin\",Fo=\"http.request.secure_connection_start\",Ko=\"http.request.time_to_first_byte\",Bo=\"http.request.worker_start\",Wo=\"http.response.body.decoded_size\",Ho=\"http.response.body.size\",jo=\"http.response_content_length\",Qo=\"http.response_content_length_uncompressed\",Jo=\"http.response.header.content-length\",Xo=\"http.response.header.<key>\",Zo=\"http.response.header\",$o=\"http.response.size\",el=\"http.response.status_code\",tl=\"http.response.status_text\",il=\"http.response_transfer_size\",al=\"http.route\",sl=\"http.scheme\",rl=\"http.server_name\",nl=\"http.server.request.time_in_queue\",ol=\"http.status_code\",ll=\"http.status_text\",pl=\"http.target\",cl=\"http.url\",ul=\"http.user_agent\",dl=\"id\",ml=\"inp\",gl=\"integrity.blocked_url\",bl=\"integrity.destination\",yl=\"integrity.document_url\",_l=\"integrity.report_only\",hl=\"jsonrpc.protocol.version\",fl=\"jsonrpc.request.id\",vl=\"jvm.gc.action\",kl=\"jvm.gc.name\",Tl=\"jvm.memory.pool.name\",Sl=\"jvm.memory.type\",El=\"jvm.thread.daemon\",Ol=\"jvm.thread.state\",Il=\"koa.name\",Al=\"koa.type\",wl=\"langchain.chain.name\",xl=\"lcp\",Rl=\"lcp.element\",Nl=\"lcp.id\",Cl=\"lcp.loadTime\",Pl=\"lcp.renderTime\",Dl=\"lcp.size\",Ll=\"lcp.url\",ql=\"litestar.middleware_name\",Ml=\"logger.name\",Ul=\"mcp.auth.client.name\",Gl=\"mcp.cancelled.reason\",zl=\"mcp.cancelled.request_id\",Yl=\"mcp.client.name\",Vl=\"mcp.client.title\",Fl=\"mcp.client.version\",Kl=\"mcp.lifecycle.phase\",Bl=\"mcp.logging.data_type\",Wl=\"mcp.logging.level\",Hl=\"mcp.logging.logger\",jl=\"mcp.logging.message\",Ql=\"mcp.method.name\",Jl=\"mcp.progress.current\",Xl=\"mcp.progress.message\",Zl=\"mcp.progress.percentage\",$l=\"mcp.progress.token\",ep=\"mcp.progress.total\",tp=\"mcp.prompt.name\",ip=\"mcp.prompt.result.description\",ap=\"mcp.prompt.result.<key>.content\",sp=\"mcp.prompt.result.<key>.role\",rp=\"mcp.prompt.result.message_content\",np=\"mcp.prompt.result.message_count\",op=\"mcp.prompt.result.message_role\",lp=\"mcp.protocol.ready\",pp=\"mcp.protocol.version\",cp=\"mcp.request.argument.<key>\",up=\"mcp.request.argument\",dp=\"mcp.request.argument.name\",mp=\"mcp.request.argument.uri\",gp=\"mcp.request.id\",bp=\"mcp.resource.protocol\",yp=\"mcp.resource.uri\",_p=\"mcp.server.name\",hp=\"mcp.server.title\",fp=\"mcp.server.version\",vp=\"mcp.session.id\",kp=\"mcp.tool.name\",Tp=\"mcp.tool.result.content\",Sp=\"mcp.tool.result.content_count\",Ep=\"mcp.tool.result.content_type\",Op=\"mcp.tool.result.data_size\",Ip=\"mcp.tool.result.is_error\",Ap=\"mcp.tool.result.<key>.content\",wp=\"mcp.tool.result.<key>.content_type\",xp=\"mcp.tool.result.<key>.data_size\",Rp=\"mcp.tool.result.<key>.mime_type\",Np=\"mcp.tool.result.<key>.name\",Cp=\"mcp.tool.result.<key>.resource_mime_type\",Pp=\"mcp.tool.result.<key>.resource_uri\",Dp=\"mcp.tool.result.<key>.uri\",Lp=\"mcp.tool.result.mime_type\",qp=\"mcp.tool.result.name\",Mp=\"mcp.tool.result.resource_mime_type\",Up=\"mcp.tool.result.resource_uri\",Gp=\"mcp.tool.result.uri\",zp=\"mcp.transport\",Yp=\"mdc.<key>\",Vp=\"mdc\",Fp=\"messaging.batch.message_count\",Kp=\"messaging.conversation_id\",Bp=\"messaging.destination\",Wp=\"messaging.destination.connection\",Hp=\"messaging.destination_kind\",jp=\"messaging.destination.name\",Qp=\"messaging.destination.partition.id\",Jp=\"messaging.kafka.message.key\",Xp=\"messaging.kafka.message.tombstone\",Zp=\"messaging.kafka.offset\",$p=\"messaging.message.body.size\",ec=\"messaging.message.conversation_id\",tc=\"messaging.message.envelope.size\",ic=\"messaging.message.id\",ac=\"messaging.message_id\",sc=\"messaging.message.receive.latency\",rc=\"messaging.message.retry.count\",nc=\"messaging.operation\",oc=\"messaging.operation.name\",lc=\"messaging.operation.type\",pc=\"messaging.protocol\",cc=\"messaging.protocol_version\",uc=\"messaging.rabbitmq.destination.routing_key\",dc=\"messaging.rabbitmq.routing_key\",mc=\"messaging.system\",gc=\"messaging.url\",bc=\"method\",yc=\"middleware.name\",_c=\"navigation.origin\",hc=\"navigation.route.id\",fc=\"navigation.type\",vc=\"nel.elapsed_time\",kc=\"nel.phase\",Tc=\"nel.referrer\",Sc=\"nel.sampling_fraction\",Ec=\"nel.sampling_function\",Oc=\"nel.type\",Ic=\"network.connection.effective_type\",Ac=\"network.connection.rtt\",wc=\"network.connection.type\",xc=\"network.local.address\",Rc=\"network.local.port\",Nc=\"network.peer.address\",Cc=\"network.peer.port\",Pc=\"network.protocol.name\",Dc=\"network.protocol.version\",Lc=\"network.transport\",qc=\"network.type\",Mc=\"net.host.ip\",Uc=\"net.host.name\",Gc=\"net.host.port\",zc=\"net.peer.ip\",Yc=\"net.peer.name\",Vc=\"net.peer.port\",Fc=\"net.protocol.name\",Kc=\"net.protocol.version\",Bc=\"net.sock.family\",Wc=\"net.sock.host.addr\",Hc=\"net.sock.host.port\",jc=\"net.sock.peer.addr\",Qc=\"net.sock.peer.name\",Jc=\"net.sock.peer.port\",Xc=\"net.transport\",Zc=\"os.build\",$c=\"os.build_id\",eu=\"os.description\",tu=\"os.kernel_version\",iu=\"os.name\",au=\"os.raw_description\",su=\"os.rooted\",ru=\"os.theme\",nu=\"os.type\",ou=\"os.version\",lu=\"otel.kind\",pu=\"otel.scope.name\",cu=\"otel.scope.version\",uu=\"otel.status_code\",du=\"otel.status_description\",mu=\"params.<key>\",gu=\"params\",bu=\"performance.activationStart\",yu=\"performance.timeOrigin\",_u=\"port\",hu=\"previous_route\",fu=\"process.command_args\",vu=\"process.executable.name\",ku=\"process.pid\",Tu=\"process.runtime.description\",Su=\"process.runtime.engine.name\",Eu=\"process.runtime.engine.version\",Ou=\"process.runtime.name\",Iu=\"process.runtime.version\",Au=\"profile_id\",wu=\"query\",xu=\"query.<key>\",Ru=\"query\",Nu=\"react_native.architecture\",Cu=\"react_native.module.call.count\",Pu=\"react_native.module.call.distinct_count\",Du=\"react_native.module.duration.max\",Lu=\"react_native.module.duration.total\",qu=\"react_native.module.error.count\",Mu=\"react_native.module.kind\",Uu=\"react_native.module.method\",Gu=\"react_native.module.name\",zu=\"react_native.module.top.duration\",Yu=\"react_native.module.top.name\",Vu=\"react.version\",Fu=\"redis.command\",Ku=\"redis.key\",Bu=\"release\",Wu=\"remix.action_form_data.<key>\",Hu=\"remix.action_form_data\",ju=\"replayId\",Qu=\"replay_id\",Ju=\"resource.deployment.environment\",Xu=\"resource.deployment.environment.name\",Zu=\"resource.render_blocking_status\",$u=\"route\",ed=\"router.navigation.origin\",td=\"router.navigation.route.id\",id=\"router.navigation.type\",ad=\"rpc.grpc.status_code\",sd=\"rpc.method\",rd=\"rpc.response.status_code\",nd=\"rpc.service\",od=\"rpc.system\",ld=\"rpc.system.name\",pd=\"runtime.build\",cd=\"runtime.name\",ud=\"runtime.raw_description\",dd=\"runtime.version\",md=\"score.<key>\",gd=\"score\",bd=\"score.ratio.<key>\",yd=\"score.ratio\",_d=\"score.total\",hd=\"score.weight.<key>\",fd=\"score.weight\",vd=\"sentry.action\",kd=\"sentry.browser.name\",Td=\"sentry.browser.version\",Sd=\"sentry.cancellation_reason\",Ed=\"sentry.category\",Od=\"sentry.client_sample_rate\",Id=\"sentry.description\",Ad=\"sentry.dist\",wd=\"sentry.domain\",xd=\"sentry.dsc.environment\",Rd=\"sentry.dsc.project_id\",Nd=\"sentry.dsc.public_key\",Cd=\"sentry.dsc.release\",Pd=\"sentry.dsc.sampled\",Dd=\"sentry.dsc.sample_rate\",Ld=\"sentry.dsc.trace_id\",qd=\"sentry.dsc.transaction\",Md=\"sentry.environment\",Ud=\"sentry.event.serialized_breadcrumbs\",Gd=\"sentry.event.serialized_contexts\",zd=\"sentry.event.serialized_extra\",Yd=\"sentry.event.serialized_meta\",Vd=\"sentry.exclusive_time\",Fd=\"sentry.frames.frozen\",Kd=\"sentry.frames.slow\",Bd=\"sentry.frames.total\",Wd=\"sentry.graphql.operation\",Hd=\"sentry.group\",jd=\"sentry.http.prefetch\",Qd=\"sentry.idle_span_finish_reason\",Jd=\"sentry.is_localhost\",Xd=\"sentry.is_remote\",Zd=\"sentry.kind\",$d=\"sentry.link.type\",em=\"sentry.main_thread\",tm=\"sentry.message.parameter.<key>\",im=\"sentry.message.template\",am=\"sentry.metric.source\",sm=\"sentry.mobile\",rm=\"sentry.module.<key>\",nm=\"sentry.module\",om=\"sentry.nextjs.ssr.function.route\",lm=\"sentry.nextjs.ssr.function.type\",pm=\"sentry.normalized_db_query\",cm=\"sentry.normalized_db_query.hash\",um=\"sentry.normalized_description\",dm=\"sentry.observed_timestamp_nanos\",mm=\"sentry.op\",gm=\"sentry.origin\",bm=\"sentry.pageload.span_id\",ym=\"sentry.platform\",_m=\"sentry.profiler_id\",hm=\"sentry.profile_id\",fm=\"sentry.relay.ingress\",vm=\"sentry.relay.pipeline\",km=\"sentry.release\",Tm=\"sentry.replay_id\",Sm=\"sentry.replay_is_buffering\",Em=\"sentry.report_event\",Om=\"sentry.sdk.integrations\",Im=\"sentry.sdk.name\",Am=\"sentry.sdk.version\",wm=\"sentry.segment.id\",xm=\"sentry.segment_id\",Rm=\"sentry.segment.name\",Nm=\"sentry.segment.name.source\",Cm=\"sentry.server_sample_rate\",Pm=\"sentry.source\",Dm=\"sentry.span.source\",Lm=\"sentry.status\",qm=\"sentry.status_code\",Mm=\"sentry.status.message\",Um=\"sentry.sveltekit.navigation.from\",Gm=\"sentry.sveltekit.navigation.to\",zm=\"sentry.sveltekit.navigation.type\",Ym=\"sentry.thread.id\",Vm=\"sentry.timestamp.sequence\",Fm=\"sentry.trace_lifecycle\",Km=\"sentry.trace.parent_span_id\",Bm=\"sentry.trace.status\",Wm=\"sentry.transaction\",Hm=\"sentry.user.email\",jm=\"sentry.user.geo.city\",Qm=\"sentry.user.geo.country_code\",Jm=\"sentry.user.geo.region\",Xm=\"sentry.user.geo.subdivision\",Zm=\"sentry.user.id\",$m=\"sentry.user.ip\",eg=\"sentry.user.username\",tg=\"server.address\",ig=\"server_name\",ag=\"server.port\",sg=\"service.name\",rg=\"service.version\",ng=\"session.id\",og=\"stall_percentage\",lg=\"stall_total_time\",pg=\"starlette.middleware_name\",cg=\"starlite.middleware_name\",ug=\"state.type\",dg=\"subprocess.pid\",mg=\"sveltekit.load.environment\",gg=\"sveltekit.load.node_id\",bg=\"sveltekit.load.node_type\",yg=\"sveltekit.tracing.original_name\",_g=\"thread.id\",hg=\"thread.name\",fg=\"timber.tag\",vg=\"time_to_full_display\",kg=\"time_to_initial_display\",Tg=\"transaction\",Sg=\"trpc.procedure_path\",Eg=\"trpc.procedure_type\",Og=\"ttfb\",Ig=\"ttfb.requestTime\",Ag=\"turbo_modules.total_call_count\",wg=\"turbo_modules.total_duration_ms\",xg=\"turbo_modules.total_error_count\",Rg=\"turbo_modules.unique_methods\",Ng=\"turbo_module.arch\",Cg=\"turbo_module.method\",Pg=\"turbo_module.name\",Dg=\"turbo_module.top_module\",Lg=\"turbo_module.top_module_duration_ms\",qg=\"turbo_module.total_call_count\",Mg=\"turbo_module.total_duration_ms\",Ug=\"turbo_module.total_error_count\",Gg=\"turbo_module.unique_methods\",zg=\"type\",Yg=\"ui.component_name\",Vg=\"ui.contributes_to_ttfd\",Fg=\"ui.contributes_to_ttid\",Kg=\"ui.element.height\",Bg=\"ui.element.id\",Wg=\"ui.element.identifier\",Hg=\"ui.element.load_time\",jg=\"ui.element.paint_type\",Qg=\"ui.element.render_time\",Jg=\"ui.element.type\",Xg=\"ui.element.url\",Zg=\"ui.element.width\",$g=\"url\",eb=\"url.domain\",tb=\"url.fragment\",ib=\"url.full\",ab=\"url.path\",sb=\"url.path.parameter.<key>\",rb=\"url.path.parameter\",nb=\"url.path.params.<key>\",ob=\"url.path.params\",lb=\"url.port\",pb=\"url.query\",cb=\"url.same_origin\",ub=\"url.scheme\",db=\"url.template\",mb=\"user_agent.original\",gb=\"user.email\",bb=\"user.full_name\",yb=\"user.geo.city\",_b=\"user.geo.country_code\",hb=\"user.geo.region\",fb=\"user.geo.subdivision\",vb=\"user.hash\",kb=\"user.id\",Tb=\"user.ip_address\",Sb=\"user.name\",Eb=\"user.roles\",Ob=\"vercel.ai.telemetry.metadata.<key>\",Ib=\"vercel.ai.telemetry.metadata\",Ab=\"vercel.branch\",wb=\"vercel.build_id\",xb=\"vercel.deployment_id\",Rb=\"vercel.destination\",Nb=\"vercel.edge_type\",Cb=\"vercel.entrypoint\",Pb=\"vercel.execution_region\",Db=\"vercel.id\",Lb=\"vercel.ja3_digest\",qb=\"vercel.ja4_digest\",Mb=\"vercel.log_type\",Ub=\"vercel.path\",Gb=\"vercel.project_id\",zb=\"vercel.project_name\",Yb=\"vercel.proxy.cache_id\",Vb=\"vercel.proxy.client_ip\",Fb=\"vercel.proxy.host\",Kb=\"vercel.proxy.lambda_region\",Bb=\"vercel.proxy.method\",Wb=\"vercel.proxy.path\",Hb=\"vercel.proxy.path_type\",jb=\"vercel.proxy.path_type_variant\",Qb=\"vercel.proxy.referer\",Jb=\"vercel.proxy.region\",Xb=\"vercel.proxy.response_byte_size\",Zb=\"vercel.proxy.scheme\",$b=\"vercel.proxy.status_code\",ey=\"vercel.proxy.timestamp\",ty=\"vercel.proxy.user_agent\",iy=\"vercel.proxy.vercel_cache\",ay=\"vercel.proxy.vercel_id\",sy=\"vercel.proxy.waf_action\",ry=\"vercel.proxy.waf_rule_id\",ny=\"vercel.request_id\",oy=\"vercel.source\",ly=\"vercel.status_code\",py={address:\"string\",\"ai.citations\":\"string[]\",\"ai.completion_tokens.used\":\"integer\",\"ai.documents\":\"string[]\",\"ai.finish_reason\":\"string\",\"ai.frequency_penalty\":\"double\",\"ai.function_call\":\"string\",\"ai.generation_id\":\"string\",\"ai.input_messages\":\"string\",\"ai.is_search_required\":\"boolean\",\"ai.metadata\":\"string\",\"ai.model.id\":\"string\",\"ai.model_id\":\"string\",\"ai.model.provider\":\"string\",\"ai.pipeline.name\":\"string\",\"ai.preamble\":\"string\",\"ai.presence_penalty\":\"double\",\"ai.prompt\":\"string\",\"ai.prompt.messages\":\"string\",\"ai.prompt_tokens.used\":\"integer\",\"ai.prompt.tools\":\"string[]\",\"ai.raw_prompting\":\"boolean\",\"ai.responses\":\"string[]\",\"ai.response_format\":\"string\",\"ai.response.id\":\"string\",\"ai.response.model\":\"string\",\"ai.response.object\":\"string\",\"ai.response.text\":\"string\",\"ai.response.timestamp\":\"string\",\"ai.response.toolCalls\":\"string\",\"ai.schema\":\"string\",\"ai.search_queries\":\"string[]\",\"ai.search_results\":\"string[]\",\"ai.seed\":\"string\",\"ai.streaming\":\"boolean\",\"ai.tags\":\"string\",\"ai.temperature\":\"double\",\"ai.texts\":\"string[]\",\"ai.toolCall.args\":\"string\",\"ai.toolCall.result\":\"string\",\"ai.tools\":\"string[]\",\"ai.tool_calls\":\"string[]\",\"ai.top_k\":\"integer\",\"ai.top_p\":\"double\",\"ai.total_cost\":\"double\",\"ai.total_tokens.used\":\"integer\",\"ai.usage.tokens\":\"integer\",\"ai.values\":\"string\",\"ai.warnings\":\"string[]\",\"angular.version\":\"string\",\"anthropic.tool_result.content\":\"string\",\"app.app_build\":\"string\",\"app.app_identifier\":\"string\",\"app.app_name\":\"string\",\"app.app_start_time\":\"string\",\"app.app_version\":\"string\",\"app.build\":\"string\",\"app.identifier\":\"string\",\"app.in_foreground\":\"boolean\",\"app.name\":\"string\",app_start_cold:\"double\",\"app.start_time\":\"string\",app_start_type:\"string\",app_start_warm:\"double\",\"app.version\":\"string\",\"app.vitals.frames.delay.value\":\"integer\",\"app.vitals.frames.frozen.count\":\"integer\",\"app.vitals.frames.frozen.rate\":\"double\",\"app.vitals.frames.slow.count\":\"integer\",\"app.vitals.frames.slow.rate\":\"double\",\"app.vitals.frames.total.count\":\"integer\",\"app.vitals.stall.duration\":\"double\",\"app.vitals.stall.percentage\":\"double\",\"app.vitals.start.cold.value\":\"double\",\"app.vitals.start.prewarmed\":\"boolean\",\"app.vitals.start.reason\":\"string\",\"app.vitals.start.screen\":\"string\",\"app.vitals.start.type\":\"string\",\"app.vitals.start.warm.value\":\"double\",\"app.vitals.ttfd.value\":\"double\",\"app.vitals.ttid.value\":\"double\",\"art.gc.blocking_count\":\"integer\",\"art.gc.blocking_time\":\"double\",\"art.gc.pre_oome_count\":\"integer\",\"art.gc.total_count\":\"integer\",\"art.gc.total_time\":\"double\",\"art.gc.waiting_time\":\"double\",\"art.memory.free\":\"integer\",\"art.memory.free_until_gc\":\"integer\",\"art.memory.free_until_oome\":\"integer\",\"art.memory.max\":\"integer\",\"art.memory.total\":\"integer\",\"aws.cloudwatch.logs.log_group\":\"string\",\"aws.cloudwatch.logs.log_stream\":\"string\",\"aws.cloudwatch.logs.url\":\"string\",\"aws.dynamodb.attributes_to_get\":\"string[]\",\"aws.dynamodb.attribute_definitions\":\"string[]\",\"aws.dynamodb.consistent_read\":\"boolean\",\"aws.dynamodb.consumed_capacity\":\"string[]\",\"aws.dynamodb.count\":\"integer\",\"aws.dynamodb.exclusive_start_table\":\"string\",\"aws.dynamodb.global_secondary_indexes\":\"string[]\",\"aws.dynamodb.global_secondary_index_updates\":\"string[]\",\"aws.dynamodb.index_name\":\"string\",\"aws.dynamodb.item_collection_metrics\":\"string\",\"aws.dynamodb.limit\":\"integer\",\"aws.dynamodb.local_secondary_indexes\":\"string[]\",\"aws.dynamodb.projection\":\"string\",\"aws.dynamodb.provisioned_read_capacity\":\"double\",\"aws.dynamodb.provisioned_write_capacity\":\"double\",\"aws.dynamodb.scanned_count\":\"integer\",\"aws.dynamodb.scan_forward\":\"boolean\",\"aws.dynamodb.segment\":\"integer\",\"aws.dynamodb.select\":\"string\",\"aws.dynamodb.table_count\":\"integer\",\"aws.dynamodb.table_names\":\"string[]\",\"aws.dynamodb.total_segments\":\"integer\",\"aws.extended_request_id\":\"string\",\"aws.kinesis.stream_name\":\"string\",\"aws.kinesis.stream.name\":\"string\",\"aws.lambda.aws_request_id\":\"string\",\"aws.lambda.execution_duration_in_millis\":\"double\",\"aws.lambda.function_name\":\"string\",\"aws.lambda.function_version\":\"string\",\"aws.lambda.invoked_arn\":\"string\",\"aws.lambda.invoked_function_arn\":\"string\",\"aws.lambda.remaining_time_in_millis\":\"double\",\"aws.log.group.names\":\"string[]\",\"aws.log.stream.names\":\"string[]\",\"aws.operation_name\":\"string\",aws_region:\"string\",\"aws.request.extended_id\":\"string\",\"aws.request_id\":\"string\",\"aws.request.id\":\"string\",\"aws.request.url\":\"string\",\"aws.s3.bucket\":\"string\",\"aws.s3.copy_source\":\"string\",\"aws.s3.delete\":\"string\",\"aws.s3.key\":\"string\",\"aws.s3.part_number\":\"integer\",\"aws.s3.upload_id\":\"string\",\"aws.secretsmanager.secret.arn\":\"string\",\"aws.sns.topic.arn\":\"string\",\"aws.sqs.queue.url\":\"string\",\"aws.step_functions.activity.arn\":\"string\",\"aws.step_functions.execution.arn\":\"string\",\"aws.step_functions.state_machine.arn\":\"string\",blocked_main_thread:\"boolean\",\"browser.bfcache.frame\":\"string\",\"browser.bfcache.not_restored_reason_count\":\"integer\",\"browser.bfcache.outcome\":\"string\",\"browser.bfcache.reason\":\"string\",\"browser.name\":\"string\",\"browser.navigation.id\":\"integer\",\"browser.navigation.type\":\"string\",\"browser.paint.type\":\"string\",\"browser.performance.navigation.activation_start\":\"double\",\"browser.performance.time_origin\":\"double\",\"browser.report.type\":\"string\",\"browser.script.invoker\":\"string\",\"browser.script.invoker_type\":\"string\",\"browser.script.source_char_position\":\"integer\",\"browser.version\":\"string\",\"browser.web_vital.cls.report_event\":\"string\",\"browser.web_vital.cls.source.<key>\":\"string\",\"browser.web_vital.cls.value\":\"double\",\"browser.web_vital.fcp.value\":\"double\",\"browser.web_vital.fp.value\":\"double\",\"browser.web_vital.inp.interaction_type\":\"string\",\"browser.web_vital.inp.target\":\"string\",\"browser.web_vital.inp.value\":\"double\",\"browser.web_vital.lcp.element\":\"string\",\"browser.web_vital.lcp.id\":\"string\",\"browser.web_vital.lcp.load_time\":\"integer\",\"browser.web_vital.lcp.render_time\":\"integer\",\"browser.web_vital.lcp.report_event\":\"string\",\"browser.web_vital.lcp.size\":\"integer\",\"browser.web_vital.lcp.url\":\"string\",\"browser.web_vital.lcp.value\":\"double\",\"browser.web_vital.ttfb.request_time\":\"double\",\"browser.web_vital.ttfb.value\":\"double\",\"cache.hit\":\"boolean\",\"cache.item_age\":\"integer\",\"cache.item_size\":\"integer\",\"cache.key\":\"string[]\",\"cache.operation\":\"string\",\"cache.tags\":\"string[]\",\"cache.ttl\":\"integer\",\"cache.write\":\"boolean\",channel:\"string\",\"client.address\":\"string\",\"client.port\":\"integer\",\"cloudflare.d1.duration\":\"integer\",\"cloudflare.d1.query_type\":\"string\",\"cloudflare.d1.rows_read\":\"integer\",\"cloudflare.d1.rows_written\":\"integer\",\"cloudflare.durable_object.query.bindings\":\"integer\",\"cloudflare.durable_object.response.rows_read\":\"integer\",\"cloudflare.durable_object.response.rows_written\":\"integer\",\"cloudflare.r2.bucket\":\"string\",\"cloudflare.r2.operation\":\"string\",\"cloudflare.r2.request.delimiter\":\"string\",\"cloudflare.r2.request.key\":\"string\",\"cloudflare.r2.request.part_number\":\"integer\",\"cloudflare.r2.request.prefix\":\"string\",\"cloudflare.workflow.attempt\":\"integer\",\"cloudflare.workflow.retries.backoff\":\"string\",\"cloudflare.workflow.retries.delay\":\"string\",\"cloudflare.workflow.retries.limit\":\"integer\",\"cloudflare.workflow.timeout\":\"string\",\"cloud.account.id\":\"string\",\"cloud.availability_zone\":\"string\",\"cloud.platform\":\"string\",\"cloud.provider\":\"string\",\"cloud.region\":\"string\",\"cloud.resource_id\":\"string\",cls:\"double\",\"cls.source.<key>\":\"string\",code:\"string\",\"code.filepath\":\"string\",\"code.file.path\":\"string\",\"code.function\":\"string\",\"code.function.name\":\"string\",\"code.lineno\":\"integer\",\"code.line.number\":\"integer\",\"code.namespace\":\"string\",connectionType:\"string\",\"connection.rtt\":\"integer\",\"culture.calendar\":\"string\",\"culture.display_name\":\"string\",\"culture.is_24_hour_format\":\"boolean\",\"culture.locale\":\"string\",\"culture.timezone\":\"string\",\"db.collection.name\":\"string\",\"db.connection_string\":\"string\",\"db.driver.name\":\"string\",\"db.mongodb.collection\":\"string\",\"db.name\":\"string\",\"db.namespace\":\"string\",\"db.operation\":\"string\",\"db.operation.batch.size\":\"integer\",\"db.operation.name\":\"string\",\"db.params\":\"string\",\"db.query.parameter.<key>\":\"string\",\"db.query.summary\":\"string\",\"db.query.text\":\"string\",\"db.redis.connection\":\"string\",\"db.redis.key\":\"string\",\"db.redis.parameters\":\"string[]\",\"db.response.status_code\":\"string\",\"db.sql.bindings\":\"string[]\",\"db.statement\":\"string\",\"db.stored_procedure.name\":\"string\",\"db.system\":\"string\",\"db.system.name\":\"string\",\"db.user\":\"string\",deviceMemory:\"string\",\"device.archs\":\"string[]\",\"device.battery_level\":\"double\",\"device.battery_temperature\":\"double\",\"device.boot_time\":\"string\",\"device.brand\":\"string\",\"device.charging\":\"boolean\",\"device.chipset\":\"string\",\"device.class\":\"string\",\"device.connection_type\":\"string\",\"device.cpu_description\":\"string\",\"device.external_free_storage\":\"integer\",\"device.external_storage_size\":\"integer\",\"device.family\":\"string\",\"device.free_memory\":\"integer\",\"device.free_storage\":\"integer\",\"device.id\":\"string\",\"device.locale\":\"string\",\"device.low_memory\":\"boolean\",\"device.low_power_mode\":\"boolean\",\"device.manufacturer\":\"string\",\"device.memory.estimated_capacity\":\"integer\",\"device.memory_size\":\"integer\",\"device.model\":\"string\",\"device.model_id\":\"string\",\"device.name\":\"string\",\"device.online\":\"boolean\",\"device.orientation\":\"string\",\"device.processor_count\":\"integer\",\"device.processor_frequency\":\"double\",\"device.screen_density\":\"double\",\"device.screen_dpi\":\"integer\",\"device.screen_height_pixels\":\"integer\",\"device.screen_width_pixels\":\"integer\",\"device.simulator\":\"boolean\",\"device.storage_size\":\"integer\",\"device.thermal_state\":\"string\",\"device.timezone\":\"string\",\"device.usable_memory\":\"integer\",dist:\"string\",\"django.function_name\":\"string\",\"django.middleware_name\":\"string\",effectiveConnectionType:\"string\",environment:\"string\",\"error.type\":\"string\",\"event.id\":\"integer\",\"event.name\":\"string\",\"exception.escaped\":\"boolean\",\"exception.message\":\"string\",\"exception.stacktrace\":\"string\",\"exception.type\":\"string\",\"faas.coldstart\":\"boolean\",\"faas.cron\":\"string\",\"faas.duration_in_ms\":\"integer\",\"faas.entry_point\":\"string\",\"faas.execution\":\"string\",\"faas.id\":\"string\",\"faas.identity\":\"string\",\"faas.invocation_id\":\"string\",\"faas.invoked_name\":\"string\",\"faas.invoked_provider\":\"string\",\"faas.invoked_region\":\"string\",\"faas.name\":\"string\",\"faas.time\":\"string\",\"faas.trigger\":\"string\",\"faas.version\":\"string\",fcp:\"double\",\"file.path\":\"string\",\"file.size\":\"integer\",\"flag.evaluation.<key>\":\"boolean\",fp:\"double\",\"frames.delay\":\"integer\",\"frames.frozen\":\"integer\",frames_frozen_rate:\"double\",\"frames.slow\":\"integer\",frames_slow_rate:\"double\",\"frames.total\":\"integer\",fs_error:\"string\",\"gcp.function.context.event_id\":\"string\",\"gcp.function.context.event_type\":\"string\",\"gcp.function.context.id\":\"string\",\"gcp.function.context.resource\":\"string\",\"gcp.function.context.source\":\"string\",\"gcp.function.context.specversion\":\"string\",\"gcp.function.context.time\":\"string\",\"gcp.function.context.timestamp\":\"string\",\"gcp.function.context.type\":\"string\",\"gcp.project.id\":\"string\",gcp_region:\"string\",\"gen_ai.agent.name\":\"string\",\"gen_ai.context.utilization\":\"double\",\"gen_ai.context.window_size\":\"integer\",\"gen_ai.conversation.id\":\"string\",\"gen_ai.cost.cache_creation.input_tokens\":\"double\",\"gen_ai.cost.cache_read.input_tokens\":\"double\",\"gen_ai.cost.input_tokens\":\"double\",\"gen_ai.cost.output_tokens\":\"double\",\"gen_ai.cost.reasoning.output_tokens\":\"double\",\"gen_ai.cost.total_tokens\":\"double\",\"gen_ai.embeddings.input\":\"string\",\"gen_ai.function_id\":\"string\",\"gen_ai.input.messages\":\"string\",\"gen_ai.memory.query.text\":\"string\",\"gen_ai.memory.records\":\"string\",\"gen_ai.memory.record.count\":\"integer\",\"gen_ai.memory.record.id\":\"string\",\"gen_ai.memory.store.id\":\"string\",\"gen_ai.operation.name\":\"string\",\"gen_ai.operation.type\":\"string\",\"gen_ai.output.messages\":\"string\",\"gen_ai.pipeline.name\":\"string\",\"gen_ai.prompt\":\"string\",\"gen_ai.prompt.name\":\"string\",\"gen_ai.prompt.variable.<key>\":\"string\",\"gen_ai.provider.name\":\"string\",\"gen_ai.request.available_tools\":\"string\",\"gen_ai.request.frequency_penalty\":\"double\",\"gen_ai.request.max_tokens\":\"integer\",\"gen_ai.request.messages\":\"string\",\"gen_ai.request.model\":\"string\",\"gen_ai.request.presence_penalty\":\"double\",\"gen_ai.request.reasoning.level\":\"string\",\"gen_ai.request.schema\":\"string\",\"gen_ai.request.seed\":\"string\",\"gen_ai.request.stop_sequences\":\"string[]\",\"gen_ai.request.temperature\":\"double\",\"gen_ai.request.top_k\":\"integer\",\"gen_ai.request.top_p\":\"double\",\"gen_ai.response.finish_reason\":\"string\",\"gen_ai.response.finish_reasons\":\"string\",\"gen_ai.response.id\":\"string\",\"gen_ai.response.model\":\"string\",\"gen_ai.response.object\":\"string\",\"gen_ai.response.streaming\":\"boolean\",\"gen_ai.response.text\":\"string\",\"gen_ai.response.time_to_first_chunk\":\"double\",\"gen_ai.response.time_to_first_token\":\"double\",\"gen_ai.response.tokens_per_second\":\"double\",\"gen_ai.response.tool_calls\":\"string\",\"gen_ai.system\":\"string\",\"gen_ai.system_instructions\":\"string\",\"gen_ai.system.message\":\"string\",\"gen_ai.tool.call.arguments\":\"string\",\"gen_ai.tool.call.result\":\"string\",\"gen_ai.tool.definitions\":\"string\",\"gen_ai.tool.description\":\"string\",\"gen_ai.tool.input\":\"string\",\"gen_ai.tool.message\":\"string\",\"gen_ai.tool.name\":\"string\",\"gen_ai.tool.output\":\"string\",\"gen_ai.tool.type\":\"string\",\"gen_ai.usage.cache_creation.input_tokens\":\"integer\",\"gen_ai.usage.cache_creation_input_tokens\":\"integer\",\"gen_ai.usage.cache_read.input_tokens\":\"integer\",\"gen_ai.usage.cache_read_input_tokens\":\"integer\",\"gen_ai.usage.completion_tokens\":\"integer\",\"gen_ai.usage.input_tokens\":\"integer\",\"gen_ai.usage.input_tokens.cached\":\"integer\",\"gen_ai.usage.input_tokens.cache_write\":\"integer\",\"gen_ai.usage.output_tokens\":\"integer\",\"gen_ai.usage.output_tokens.reasoning\":\"integer\",\"gen_ai.usage.prompt_tokens\":\"integer\",\"gen_ai.usage.reasoning.output_tokens\":\"integer\",\"gen_ai.usage.total_tokens\":\"integer\",\"graphql.document\":\"string\",\"graphql.operation.name\":\"string\",\"graphql.operation.type\":\"string\",\"graphql.processing.type\":\"string\",\"graphql.source\":\"string\",\"grpc.error.bad_request.field_violations\":\"string[]\",\"grpc.error.debug_info.detail\":\"string\",\"grpc.error.debug_info.stack_entries\":\"string[]\",\"grpc.error.error_info.domain\":\"string\",\"grpc.error.error_info.metadata.<key>\":\"string\",\"grpc.error.error_info.reason\":\"string\",\"grpc.error.precondition_failure.violations\":\"string[]\",\"grpc.error.quota_failure.violations\":\"string[]\",\"grpc.error.resource_info.description\":\"string\",\"grpc.error.resource_info.owner\":\"string\",\"grpc.error.resource_info.resource_name\":\"string\",\"grpc.error.resource_info.resource_type\":\"string\",\"grpc.error.retry_info.retry_delay_ms\":\"integer\",hardwareConcurrency:\"string\",\"http.client_ip\":\"string\",\"http.decoded_response_content_length\":\"integer\",\"http.flavor\":\"string\",\"http.fragment\":\"string\",\"http.host\":\"string\",\"http.method\":\"string\",\"http.query\":\"string\",\"http.request.body.data\":\"string\",\"http.request.body.decoded_size\":\"integer\",\"http.request.body.size\":\"integer\",\"http.request.connection_end\":\"double\",\"http.request.connect_start\":\"double\",\"http.request_content_length\":\"integer\",\"http.request_content_length_uncompressed\":\"integer\",\"http.request.domain_lookup_end\":\"double\",\"http.request.domain_lookup_start\":\"double\",\"http.request.fetch_start\":\"double\",\"http.request.header.<key>\":\"string[]\",\"http.request.method\":\"string\",\"http.request_method\":\"string\",\"http.request.redirect_end\":\"double\",\"http.request.redirect_start\":\"double\",\"http.request.request_start\":\"double\",\"http.request.resend_count\":\"integer\",\"http.request.response_end\":\"double\",\"http.request.response_start\":\"double\",\"http.request.same_origin\":\"boolean\",\"http.request.secure_connection_start\":\"double\",\"http.request.time_to_first_byte\":\"double\",\"http.request.worker_start\":\"double\",\"http.response.body.decoded_size\":\"integer\",\"http.response.body.size\":\"integer\",\"http.response_content_length\":\"integer\",\"http.response_content_length_uncompressed\":\"integer\",\"http.response.header.content-length\":\"string\",\"http.response.header.<key>\":\"string[]\",\"http.response.size\":\"integer\",\"http.response.status_code\":\"integer\",\"http.response.status_text\":\"string\",\"http.response_transfer_size\":\"integer\",\"http.route\":\"string\",\"http.scheme\":\"string\",\"http.server_name\":\"string\",\"http.server.request.time_in_queue\":\"double\",\"http.status_code\":\"integer\",\"http.status_text\":\"string\",\"http.target\":\"string\",\"http.url\":\"string\",\"http.user_agent\":\"string\",id:\"string\",inp:\"double\",\"integrity.blocked_url\":\"string\",\"integrity.destination\":\"string\",\"integrity.document_url\":\"string\",\"integrity.report_only\":\"boolean\",\"jsonrpc.protocol.version\":\"string\",\"jsonrpc.request.id\":\"string\",\"jvm.gc.action\":\"string\",\"jvm.gc.name\":\"string\",\"jvm.memory.pool.name\":\"string\",\"jvm.memory.type\":\"string\",\"jvm.thread.daemon\":\"boolean\",\"jvm.thread.state\":\"string\",\"koa.name\":\"string\",\"koa.type\":\"string\",\"langchain.chain.name\":\"string\",lcp:\"double\",\"lcp.element\":\"string\",\"lcp.id\":\"string\",\"lcp.loadTime\":\"integer\",\"lcp.renderTime\":\"integer\",\"lcp.size\":\"integer\",\"lcp.url\":\"string\",\"litestar.middleware_name\":\"string\",\"logger.name\":\"string\",\"mcp.auth.client.name\":\"string\",\"mcp.cancelled.reason\":\"string\",\"mcp.cancelled.request_id\":\"string\",\"mcp.client.name\":\"string\",\"mcp.client.title\":\"string\",\"mcp.client.version\":\"string\",\"mcp.lifecycle.phase\":\"string\",\"mcp.logging.data_type\":\"string\",\"mcp.logging.level\":\"string\",\"mcp.logging.logger\":\"string\",\"mcp.logging.message\":\"string\",\"mcp.method.name\":\"string\",\"mcp.progress.current\":\"double\",\"mcp.progress.message\":\"string\",\"mcp.progress.percentage\":\"double\",\"mcp.progress.token\":\"string\",\"mcp.progress.total\":\"double\",\"mcp.prompt.name\":\"string\",\"mcp.prompt.result.description\":\"string\",\"mcp.prompt.result.<key>.content\":\"string\",\"mcp.prompt.result.<key>.role\":\"string\",\"mcp.prompt.result.message_content\":\"string\",\"mcp.prompt.result.message_count\":\"integer\",\"mcp.prompt.result.message_role\":\"string\",\"mcp.protocol.ready\":\"integer\",\"mcp.protocol.version\":\"string\",\"mcp.request.argument.<key>\":\"string\",\"mcp.request.argument.name\":\"string\",\"mcp.request.argument.uri\":\"string\",\"mcp.request.id\":\"string\",\"mcp.resource.protocol\":\"string\",\"mcp.resource.uri\":\"string\",\"mcp.server.name\":\"string\",\"mcp.server.title\":\"string\",\"mcp.server.version\":\"string\",\"mcp.session.id\":\"string\",\"mcp.tool.name\":\"string\",\"mcp.tool.result.content\":\"string\",\"mcp.tool.result.content_count\":\"integer\",\"mcp.tool.result.content_type\":\"string\",\"mcp.tool.result.data_size\":\"integer\",\"mcp.tool.result.is_error\":\"boolean\",\"mcp.tool.result.<key>.content\":\"string\",\"mcp.tool.result.<key>.content_type\":\"string\",\"mcp.tool.result.<key>.data_size\":\"integer\",\"mcp.tool.result.<key>.mime_type\":\"string\",\"mcp.tool.result.<key>.name\":\"string\",\"mcp.tool.result.<key>.resource_mime_type\":\"string\",\"mcp.tool.result.<key>.resource_uri\":\"string\",\"mcp.tool.result.<key>.uri\":\"string\",\"mcp.tool.result.mime_type\":\"string\",\"mcp.tool.result.name\":\"string\",\"mcp.tool.result.resource_mime_type\":\"string\",\"mcp.tool.result.resource_uri\":\"string\",\"mcp.tool.result.uri\":\"string\",\"mcp.transport\":\"string\",\"mdc.<key>\":\"string\",\"messaging.batch.message_count\":\"integer\",\"messaging.conversation_id\":\"string\",\"messaging.destination\":\"string\",\"messaging.destination.connection\":\"string\",\"messaging.destination_kind\":\"string\",\"messaging.destination.name\":\"string\",\"messaging.destination.partition.id\":\"string\",\"messaging.kafka.message.key\":\"string\",\"messaging.kafka.message.tombstone\":\"boolean\",\"messaging.kafka.offset\":\"integer\",\"messaging.message.body.size\":\"integer\",\"messaging.message.conversation_id\":\"string\",\"messaging.message.envelope.size\":\"integer\",\"messaging.message.id\":\"string\",\"messaging.message_id\":\"string\",\"messaging.message.receive.latency\":\"integer\",\"messaging.message.retry.count\":\"integer\",\"messaging.operation\":\"string\",\"messaging.operation.name\":\"string\",\"messaging.operation.type\":\"string\",\"messaging.protocol\":\"string\",\"messaging.protocol_version\":\"string\",\"messaging.rabbitmq.destination.routing_key\":\"string\",\"messaging.rabbitmq.routing_key\":\"string\",\"messaging.system\":\"string\",\"messaging.url\":\"string\",method:\"string\",\"middleware.name\":\"string\",\"navigation.origin\":\"string\",\"navigation.route.id\":\"string\",\"navigation.type\":\"string\",\"nel.elapsed_time\":\"integer\",\"nel.phase\":\"string\",\"nel.referrer\":\"string\",\"nel.sampling_fraction\":\"double\",\"nel.sampling_function\":\"double\",\"nel.type\":\"string\",\"network.connection.effective_type\":\"string\",\"network.connection.rtt\":\"integer\",\"network.connection.type\":\"string\",\"network.local.address\":\"string\",\"network.local.port\":\"integer\",\"network.peer.address\":\"string\",\"network.peer.port\":\"integer\",\"network.protocol.name\":\"string\",\"network.protocol.version\":\"string\",\"network.transport\":\"string\",\"network.type\":\"string\",\"net.host.ip\":\"string\",\"net.host.name\":\"string\",\"net.host.port\":\"integer\",\"net.peer.ip\":\"string\",\"net.peer.name\":\"string\",\"net.peer.port\":\"integer\",\"net.protocol.name\":\"string\",\"net.protocol.version\":\"string\",\"net.sock.family\":\"string\",\"net.sock.host.addr\":\"string\",\"net.sock.host.port\":\"integer\",\"net.sock.peer.addr\":\"string\",\"net.sock.peer.name\":\"string\",\"net.sock.peer.port\":\"integer\",\"net.transport\":\"string\",\"os.build\":\"string\",\"os.build_id\":\"string\",\"os.description\":\"string\",\"os.kernel_version\":\"string\",\"os.name\":\"string\",\"os.raw_description\":\"string\",\"os.rooted\":\"boolean\",\"os.theme\":\"string\",\"os.type\":\"string\",\"os.version\":\"string\",\"otel.kind\":\"string\",\"otel.scope.name\":\"string\",\"otel.scope.version\":\"string\",\"otel.status_code\":\"string\",\"otel.status_description\":\"string\",\"params.<key>\":\"string\",\"performance.activationStart\":\"double\",\"performance.timeOrigin\":\"double\",port:\"integer\",previous_route:\"string\",\"process.command_args\":\"string[]\",\"process.executable.name\":\"string\",\"process.pid\":\"integer\",\"process.runtime.description\":\"string\",\"process.runtime.engine.name\":\"string\",\"process.runtime.engine.version\":\"string\",\"process.runtime.name\":\"string\",\"process.runtime.version\":\"string\",profile_id:\"string\",query:\"string\",\"query.<key>\":\"string\",\"react_native.architecture\":\"string\",\"react_native.module.call.count\":\"integer\",\"react_native.module.call.distinct_count\":\"integer\",\"react_native.module.duration.max\":\"double\",\"react_native.module.duration.total\":\"double\",\"react_native.module.error.count\":\"integer\",\"react_native.module.kind\":\"string\",\"react_native.module.method\":\"string\",\"react_native.module.name\":\"string\",\"react_native.module.top.duration\":\"double\",\"react_native.module.top.name\":\"string\",\"react.version\":\"string\",\"redis.command\":\"string\",\"redis.key\":\"string\",release:\"string\",\"remix.action_form_data.<key>\":\"string\",replayId:\"string\",replay_id:\"string\",\"resource.deployment.environment\":\"string\",\"resource.deployment.environment.name\":\"string\",\"resource.render_blocking_status\":\"string\",route:\"string\",\"router.navigation.origin\":\"string\",\"router.navigation.route.id\":\"string\",\"router.navigation.type\":\"string\",\"rpc.grpc.status_code\":\"integer\",\"rpc.method\":\"string\",\"rpc.response.status_code\":\"string\",\"rpc.service\":\"string\",\"rpc.system\":\"string\",\"rpc.system.name\":\"string\",\"runtime.build\":\"string\",\"runtime.name\":\"string\",\"runtime.raw_description\":\"string\",\"runtime.version\":\"string\",\"score.<key>\":\"double\",\"score.ratio.<key>\":\"double\",\"score.total\":\"double\",\"score.weight.<key>\":\"double\",\"sentry.action\":\"string\",\"sentry.browser.name\":\"string\",\"sentry.browser.version\":\"string\",\"sentry.cancellation_reason\":\"string\",\"sentry.category\":\"string\",\"sentry.client_sample_rate\":\"double\",\"sentry.description\":\"string\",\"sentry.dist\":\"string\",\"sentry.domain\":\"string\",\"sentry.dsc.environment\":\"string\",\"sentry.dsc.project_id\":\"string\",\"sentry.dsc.public_key\":\"string\",\"sentry.dsc.release\":\"string\",\"sentry.dsc.sampled\":\"boolean\",\"sentry.dsc.sample_rate\":\"string\",\"sentry.dsc.trace_id\":\"string\",\"sentry.dsc.transaction\":\"string\",\"sentry.environment\":\"string\",\"sentry.event.serialized_breadcrumbs\":\"string\",\"sentry.event.serialized_contexts\":\"string\",\"sentry.event.serialized_extra\":\"string\",\"sentry.event.serialized_meta\":\"string\",\"sentry.exclusive_time\":\"double\",\"sentry.frames.frozen\":\"integer\",\"sentry.frames.slow\":\"integer\",\"sentry.frames.total\":\"integer\",\"sentry.graphql.operation\":\"string\",\"sentry.group\":\"string\",\"sentry.http.prefetch\":\"boolean\",\"sentry.idle_span_finish_reason\":\"string\",\"sentry.is_localhost\":\"boolean\",\"sentry.is_remote\":\"boolean\",\"sentry.kind\":\"string\",\"sentry.link.type\":\"string\",\"sentry.main_thread\":\"boolean\",\"sentry.message.parameter.<key>\":\"string\",\"sentry.message.template\":\"string\",\"sentry.metric.source\":\"string\",\"sentry.mobile\":\"boolean\",\"sentry.module.<key>\":\"string\",\"sentry.nextjs.ssr.function.route\":\"string\",\"sentry.nextjs.ssr.function.type\":\"string\",\"sentry.normalized_db_query\":\"string\",\"sentry.normalized_db_query.hash\":\"string\",\"sentry.normalized_description\":\"string\",\"sentry.observed_timestamp_nanos\":\"string\",\"sentry.op\":\"string\",\"sentry.origin\":\"string\",\"sentry.pageload.span_id\":\"string\",\"sentry.platform\":\"string\",\"sentry.profiler_id\":\"string\",\"sentry.profile_id\":\"string\",\"sentry.relay.ingress\":\"string\",\"sentry.relay.pipeline\":\"string\",\"sentry.release\":\"string\",\"sentry.replay_id\":\"string\",\"sentry.replay_is_buffering\":\"boolean\",\"sentry.report_event\":\"string\",\"sentry.sdk.integrations\":\"string[]\",\"sentry.sdk.name\":\"string\",\"sentry.sdk.version\":\"string\",\"sentry.segment.id\":\"string\",\"sentry.segment_id\":\"string\",\"sentry.segment.name\":\"string\",\"sentry.segment.name.source\":\"string\",\"sentry.server_sample_rate\":\"double\",\"sentry.source\":\"string\",\"sentry.span.source\":\"string\",\"sentry.status\":\"string\",\"sentry.status_code\":\"integer\",\"sentry.status.message\":\"string\",\"sentry.sveltekit.navigation.from\":\"string\",\"sentry.sveltekit.navigation.to\":\"string\",\"sentry.sveltekit.navigation.type\":\"string\",\"sentry.thread.id\":\"integer\",\"sentry.timestamp.sequence\":\"integer\",\"sentry.trace_lifecycle\":\"string\",\"sentry.trace.parent_span_id\":\"string\",\"sentry.trace.status\":\"string\",\"sentry.transaction\":\"string\",\"sentry.user.email\":\"string\",\"sentry.user.geo.city\":\"string\",\"sentry.user.geo.country_code\":\"string\",\"sentry.user.geo.region\":\"string\",\"sentry.user.geo.subdivision\":\"string\",\"sentry.user.id\":\"string\",\"sentry.user.ip\":\"string\",\"sentry.user.username\":\"string\",\"server.address\":\"string\",server_name:\"string\",\"server.port\":\"integer\",\"service.name\":\"string\",\"service.version\":\"string\",\"session.id\":\"string\",stall_percentage:\"double\",stall_total_time:\"double\",\"starlette.middleware_name\":\"string\",\"starlite.middleware_name\":\"string\",\"state.type\":\"string\",\"subprocess.pid\":\"integer\",\"sveltekit.load.environment\":\"string\",\"sveltekit.load.node_id\":\"string\",\"sveltekit.load.node_type\":\"string\",\"sveltekit.tracing.original_name\":\"string\",\"thread.id\":\"integer\",\"thread.name\":\"string\",\"timber.tag\":\"string\",time_to_full_display:\"double\",time_to_initial_display:\"double\",transaction:\"string\",\"trpc.procedure_path\":\"string\",\"trpc.procedure_type\":\"string\",ttfb:\"double\",\"ttfb.requestTime\":\"double\",\"turbo_modules.total_call_count\":\"integer\",\"turbo_modules.total_duration_ms\":\"double\",\"turbo_modules.total_error_count\":\"integer\",\"turbo_modules.unique_methods\":\"integer\",\"turbo_module.arch\":\"string\",\"turbo_module.method\":\"string\",\"turbo_module.name\":\"string\",\"turbo_module.top_module\":\"string\",\"turbo_module.top_module_duration_ms\":\"double\",\"turbo_module.total_call_count\":\"integer\",\"turbo_module.total_duration_ms\":\"double\",\"turbo_module.total_error_count\":\"integer\",\"turbo_module.unique_methods\":\"integer\",type:\"string\",\"ui.component_name\":\"string\",\"ui.contributes_to_ttfd\":\"boolean\",\"ui.contributes_to_ttid\":\"boolean\",\"ui.element.height\":\"integer\",\"ui.element.id\":\"string\",\"ui.element.identifier\":\"string\",\"ui.element.load_time\":\"double\",\"ui.element.paint_type\":\"string\",\"ui.element.render_time\":\"double\",\"ui.element.type\":\"string\",\"ui.element.url\":\"string\",\"ui.element.width\":\"integer\",url:\"string\",\"url.domain\":\"string\",\"url.fragment\":\"string\",\"url.full\":\"string\",\"url.path\":\"string\",\"url.path.parameter.<key>\":\"string\",\"url.path.params.<key>\":\"string\",\"url.port\":\"integer\",\"url.query\":\"string\",\"url.same_origin\":\"boolean\",\"url.scheme\":\"string\",\"url.template\":\"string\",\"user_agent.original\":\"string\",\"user.email\":\"string\",\"user.full_name\":\"string\",\"user.geo.city\":\"string\",\"user.geo.country_code\":\"string\",\"user.geo.region\":\"string\",\"user.geo.subdivision\":\"string\",\"user.hash\":\"string\",\"user.id\":\"string\",\"user.ip_address\":\"string\",\"user.name\":\"string\",\"user.roles\":\"string[]\",\"vercel.ai.telemetry.metadata.<key>\":\"string\",\"vercel.branch\":\"string\",\"vercel.build_id\":\"string\",\"vercel.deployment_id\":\"string\",\"vercel.destination\":\"string\",\"vercel.edge_type\":\"string\",\"vercel.entrypoint\":\"string\",\"vercel.execution_region\":\"string\",\"vercel.id\":\"string\",\"vercel.ja3_digest\":\"string\",\"vercel.ja4_digest\":\"string\",\"vercel.log_type\":\"string\",\"vercel.path\":\"string\",\"vercel.project_id\":\"string\",\"vercel.project_name\":\"string\",\"vercel.proxy.cache_id\":\"string\",\"vercel.proxy.client_ip\":\"string\",\"vercel.proxy.host\":\"string\",\"vercel.proxy.lambda_region\":\"string\",\"vercel.proxy.method\":\"string\",\"vercel.proxy.path\":\"string\",\"vercel.proxy.path_type\":\"string\",\"vercel.proxy.path_type_variant\":\"string\",\"vercel.proxy.referer\":\"string\",\"vercel.proxy.region\":\"string\",\"vercel.proxy.response_byte_size\":\"integer\",\"vercel.proxy.scheme\":\"string\",\"vercel.proxy.status_code\":\"integer\",\"vercel.proxy.timestamp\":\"integer\",\"vercel.proxy.user_agent\":\"string[]\",\"vercel.proxy.vercel_cache\":\"string\",\"vercel.proxy.vercel_id\":\"string\",\"vercel.proxy.waf_action\":\"string\",\"vercel.proxy.waf_rule_id\":\"string\",\"vercel.request_id\":\"string\",\"vercel.source\":\"string\",\"vercel.status_code\":\"integer\"},cy={address:{brief:\"The destination hostname or IP address for a TCP connection.\",type:\"string\",keys:[\"server.address\",\"address\",\"http.server_name\",\"net.host.name\",\"server_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"example.com\",examples:[\"example.com\"],deprecation:{replacement:\"server.address\",reason:\"Old namespace-less attribute, to be replaced with server.address for span-first future\",status:\"backfill\"},aliases:[\"server.address\",\"http.server_name\",\"net.host.name\",\"http.host\",\"server_name\",\"net.peer.name\"],changelog:[{version:\"0.24.0\",prs:[647],description:\"Added server_name as an alias\"},{version:\"0.21.0\",prs:[588,602],description:\"Added net.peer.name as an alias\"},{version:\"0.19.0\",prs:[534],description:\"Added address attribute\"}]},\"ai.citations\":{brief:\"References or sources cited by the AI model in its response.\",type:\"string[]\",keys:[\"ai.citations\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"Citation 1\",\"Citation 2\"],deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.completion_tokens.used\":{brief:\"The number of tokens used to respond to the message.\",type:\"integer\",keys:[\"gen_ai.usage.output_tokens\",\"ai.completion_tokens.used\",\"gen_ai.usage.completion_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:10,deprecation:{replacement:\"gen_ai.usage.output_tokens\",status:\"backfill\"},aliases:[\"gen_ai.usage.output_tokens\",\"gen_ai.usage.completion_tokens\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57,61]},{version:\"0.0.0\"}]},\"ai.documents\":{brief:\"Documents or content chunks used as context for the AI model.\",type:\"string[]\",keys:[\"ai.documents\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"document1.txt\",\"document2.pdf\"],deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.finish_reason\":{brief:\"The reason why the model stopped generating.\",type:\"string\",keys:[\"gen_ai.response.finish_reasons\",\"ai.finish_reason\",\"gen_ai.response.finish_reason\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"COMPLETE\",deprecation:{replacement:\"gen_ai.response.finish_reasons\",status:\"backfill\"},aliases:[\"gen_ai.response.finish_reasons\"],changelog:[{version:\"0.1.0\",prs:[55,57,61,108,127]}]},\"ai.frequency_penalty\":{brief:\"Used to reduce repetitiveness of generated tokens. The higher the value, the stronger a penalty is applied to previously present tokens, proportional to how many times they have already appeared in the prompt or prior generation.\",type:\"double\",keys:[\"gen_ai.request.frequency_penalty\",\"ai.frequency_penalty\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.5,deprecation:{replacement:\"gen_ai.request.frequency_penalty\",status:\"backfill\"},aliases:[\"gen_ai.request.frequency_penalty\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[55,57,61,108]}]},\"ai.function_call\":{brief:\"For an AI model call, the function that was called. This is deprecated for OpenAI, and replaced by tool_calls\",type:\"string\",keys:[\"gen_ai.tool.name\",\"ai.function_call\",\"mcp.tool.name\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"function_name\",deprecation:{replacement:\"gen_ai.tool.name\",status:\"backfill\"},aliases:[\"gen_ai.tool.name\",\"mcp.tool.name\"],changelog:[{version:\"0.1.0\",prs:[55,57,61,108]}]},\"ai.generation_id\":{brief:\"Unique identifier for the completion.\",type:\"string\",keys:[\"gen_ai.response.id\",\"ai.generation_id\",\"ai.response.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"gen_123abc\",deprecation:{replacement:\"gen_ai.response.id\",status:\"backfill\"},aliases:[\"gen_ai.response.id\",\"ai.response.id\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.response.id as an alias\"},{version:\"0.1.0\",prs:[55,57,61,108,127]}]},\"ai.input_messages\":{brief:\"The input messages sent to the model\",type:\"string\",keys:[\"gen_ai.input.messages\",\"ai.input_messages\",\"ai.prompt\",\"ai.prompt.messages\",\"ai.texts\",\"gen_ai.prompt\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'[{\"role\": \"user\", \"message\": \"hello\"}]',deprecation:{replacement:\"gen_ai.input.messages\",status:\"backfill\"},aliases:[\"gen_ai.request.messages\"],changelog:[{version:\"0.1.0\",prs:[65,119]},{version:\"0.0.0\"}]},\"ai.is_search_required\":{brief:\"Boolean indicating if the model needs to perform a search.\",type:\"boolean\",keys:[\"ai.is_search_required\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!1,deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.metadata\":{brief:\"Extra metadata passed to an AI pipeline step.\",type:\"string\",keys:[\"ai.metadata\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'{\"user_id\": 123, \"session_id\": \"abc123\"}',deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55,127]}]},\"ai.model.id\":{brief:\"The id of the model used by the Vercel AI SDK.\",type:\"string\",keys:[\"gen_ai.request.model\",\"ai.model.id\",\"ai.model_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"gpt-4o\",examples:[\"gpt-4o\"],deprecation:{replacement:\"gen_ai.request.model\",reason:\"This attribute is being deprecated in favor of gen_ai.request.model.\",status:\"backfill\"},aliases:[\"gen_ai.request.model\",\"ai.model_id\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.model.id attribute\"}]},\"ai.model_id\":{brief:\"The vendor-specific ID of the model used.\",type:\"string\",keys:[\"gen_ai.request.model\",\"ai.model.id\",\"ai.model_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"gpt-4\",deprecation:{replacement:\"gen_ai.request.model\",status:\"backfill\"},aliases:[\"gen_ai.request.model\",\"ai.model.id\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.model.id as an alias\"},{version:\"0.1.0\",prs:[57,61,127]},{version:\"0.0.0\"}]},\"ai.model.provider\":{brief:\"The provider of the model.\",type:\"string\",keys:[\"gen_ai.provider.name\",\"ai.model.provider\",\"gen_ai.system\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"openai\",deprecation:{replacement:\"gen_ai.provider.name\",status:\"backfill\"},aliases:[\"gen_ai.provider.name\",\"gen_ai.system\"],changelog:[{version:\"0.4.0\",prs:[253]},{version:\"0.1.0\",prs:[57,61,108,127]}]},\"ai.pipeline.name\":{brief:\"The name of the AI pipeline.\",type:\"string\",keys:[\"gen_ai.pipeline.name\",\"ai.pipeline.name\",\"langchain.chain.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Autofix Pipeline\",deprecation:{replacement:\"gen_ai.pipeline.name\",status:\"backfill\"},aliases:[\"gen_ai.pipeline.name\",\"langchain.chain.name\"],changelog:[{version:\"0.22.0\",prs:[599],description:\"Added langchain.chain.name as an alias\"},{version:\"0.1.0\",prs:[53,76,108,127]}]},\"ai.preamble\":{brief:\"For an AI model call, the preamble parameter. Preambles are a part of the prompt used to adjust the model's overall behavior and conversation style.\",type:\"string\",keys:[\"gen_ai.system_instructions\",\"ai.preamble\",\"gen_ai.system.message\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"You are now a clown.\",deprecation:{replacement:\"gen_ai.system_instructions\",status:\"backfill\"},aliases:[\"gen_ai.system_instructions\"],changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.presence_penalty\":{brief:\"Used to reduce repetitiveness of generated tokens. Similar to frequency_penalty, except that this penalty is applied equally to all tokens that have already appeared, regardless of their exact frequencies.\",type:\"double\",keys:[\"gen_ai.request.presence_penalty\",\"ai.presence_penalty\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.5,deprecation:{replacement:\"gen_ai.request.presence_penalty\",status:\"backfill\"},aliases:[\"gen_ai.request.presence_penalty\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[55,57,61,108]}]},\"ai.prompt\":{brief:\"The prompt passed to the Vercel AI SDK, as a stringified object.\",type:\"string\",keys:[\"gen_ai.input.messages\",\"ai.input_messages\",\"ai.prompt\",\"ai.prompt.messages\",\"ai.texts\",\"gen_ai.prompt\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'{\"prompt\":\"What is the weather in Paris?\"}',examples:['{\"prompt\":\"What is the weather in Paris?\"}'],deprecation:{replacement:\"gen_ai.input.messages\",reason:\"This attribute is being deprecated in favor of gen_ai.input.messages.\",status:\"backfill\"},aliases:[\"gen_ai.input.messages\",\"ai.texts\",\"ai.prompt.messages\",\"gen_ai.prompt\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.prompt attribute\"}]},\"ai.prompt.messages\":{brief:\"The input messages sent to the AI model.\",type:\"string\",keys:[\"gen_ai.input.messages\",\"ai.input_messages\",\"ai.prompt\",\"ai.prompt.messages\",\"ai.texts\",\"gen_ai.prompt\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'[{\"role\": \"user\", \"message\": \"hello\"}]',deprecation:{replacement:\"gen_ai.input.messages\",status:\"backfill\"},aliases:[\"gen_ai.input.messages\",\"ai.texts\",\"gen_ai.prompt\",\"ai.prompt\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.prompt as an alias\"},{version:\"0.19.0\",prs:[498],description:\"Added ai.prompt.messages attribute\"}]},\"ai.prompt_tokens.used\":{brief:\"The number of tokens used to process just the prompt.\",type:\"integer\",keys:[\"gen_ai.usage.input_tokens\",\"ai.prompt_tokens.used\",\"gen_ai.usage.prompt_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:20,deprecation:{replacement:\"gen_ai.usage.input_tokens\",status:\"backfill\"},aliases:[\"gen_ai.usage.prompt_tokens\",\"gen_ai.usage.input_tokens\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57,61]},{version:\"0.0.0\"}]},\"ai.prompt.tools\":{brief:\"The tools made available to the model, as an array of stringified tool definitions.\",type:\"string[]\",keys:[\"gen_ai.tool.definitions\",\"ai.prompt.tools\",\"ai.tools\",\"gen_ai.request.available_tools\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:['{\"type\":\"function\",\"name\":\"get_weather\"}'],examples:[['{\"type\":\"function\",\"name\":\"get_weather\"}']],deprecation:{replacement:\"gen_ai.tool.definitions\",reason:\"This attribute is being deprecated in favor of gen_ai.tool.definitions.\",status:\"backfill\"},changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.prompt.tools attribute\"}]},\"ai.raw_prompting\":{brief:\"When enabled, the user\\u2019s prompt will be sent to the model without any pre-processing.\",type:\"boolean\",keys:[\"ai.raw_prompting\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.responses\":{brief:\"The response messages sent back by the AI model.\",type:\"string[]\",keys:[\"gen_ai.output.messages\",\"ai.response.text\",\"ai.response.toolCalls\",\"ai.responses\",\"ai.tool_calls\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:[\"hello\",\"world\"],deprecation:{replacement:\"gen_ai.output.messages\",status:\"backfill\"},changelog:[{version:\"0.1.0\",prs:[65,127]},{version:\"0.0.0\"}]},\"ai.response_format\":{brief:\"For an AI model call, the format of the response\",type:\"string\",keys:[\"ai.response_format\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"json_object\",deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55,127]}]},\"ai.response.id\":{brief:\"The id of the response returned by the model.\",type:\"string\",keys:[\"gen_ai.response.id\",\"ai.generation_id\",\"ai.response.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"chatcmpl-BuKJgVSKAMTUYbBSjHTMUuNGKzOPY\",examples:[\"chatcmpl-BuKJgVSKAMTUYbBSjHTMUuNGKzOPY\"],deprecation:{replacement:\"gen_ai.response.id\",reason:\"This attribute is being deprecated in favor of gen_ai.response.id.\",status:\"backfill\"},aliases:[\"gen_ai.response.id\",\"ai.generation_id\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.response.id attribute\"}]},\"ai.response.model\":{brief:\"The id of the model that produced the response.\",type:\"string\",keys:[\"gen_ai.response.model\",\"ai.response.model\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"gpt-4o-2024-08-06\",examples:[\"gpt-4o-2024-08-06\"],deprecation:{replacement:\"gen_ai.response.model\",reason:\"This attribute is being deprecated in favor of gen_ai.response.model.\",status:\"backfill\"},aliases:[\"gen_ai.response.model\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.response.model attribute\"}]},\"ai.response.object\":{brief:\"The type of the object returned by the model.\",type:\"string\",keys:[\"ai.response.object\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"chat.completion\",examples:[\"chat.completion\"],deprecation:{reason:\"This attribute is deprecated. The Sentry conventions have no replacement for the raw Vercel AI response object type.\"},changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.response.object attribute\"}]},\"ai.response.text\":{brief:\"The text response from the AI model.\",type:\"string\",keys:[\"gen_ai.output.messages\",\"ai.response.text\",\"ai.response.toolCalls\",\"ai.responses\",\"ai.tool_calls\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"The weather in Paris is currently rainy.\",deprecation:{replacement:\"gen_ai.output.messages\",status:\"backfill\"},aliases:[\"gen_ai.output.messages\",\"ai.response.toolCalls\"],changelog:[{version:\"0.19.0\",prs:[498],description:\"Added ai.response.text attribute\"}]},\"ai.response.timestamp\":{brief:\"The ISO 8601 timestamp at which the response was produced.\",type:\"string\",keys:[\"ai.response.timestamp\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"2026-02-19T15:32:11.000Z\",examples:[\"2026-02-19T15:32:11.000Z\"],deprecation:{reason:\"This attribute is deprecated. The span start and end timestamps carry the same information.\"},changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.response.timestamp attribute\"}]},\"ai.response.toolCalls\":{brief:\"The tool calls in the AI model response.\",type:\"string\",keys:[\"gen_ai.output.messages\",\"ai.response.text\",\"ai.response.toolCalls\",\"ai.responses\",\"ai.tool_calls\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'[{\"name\": \"get_weather\", \"arguments\": {\"location\": \"Paris\"}}]',deprecation:{replacement:\"gen_ai.output.messages\",status:\"backfill\"},aliases:[\"gen_ai.output.messages\",\"ai.response.text\"],changelog:[{version:\"0.19.0\",prs:[498],description:\"Added ai.response.toolCalls attribute\"}]},\"ai.schema\":{brief:\"The stringified JSON schema the model output must conform to.\",type:\"string\",keys:[\"ai.schema\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"}}}',examples:['{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"}}}'],deprecation:{reason:\"This attribute is deprecated. The Sentry conventions have no replacement for the requested output schema.\"},changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.schema attribute\"}]},\"ai.search_queries\":{brief:\"Queries used to search for relevant context or documents.\",type:\"string[]\",keys:[\"ai.search_queries\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"climate change effects\",\"renewable energy\"],deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.search_results\":{brief:\"Results returned from search queries for context.\",type:\"string[]\",keys:[\"ai.search_results\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"search_result_1, search_result_2\"],deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.seed\":{brief:\"The seed, ideally models given the same seed and same other parameters will produce the exact same output.\",type:\"string\",keys:[\"gen_ai.request.seed\",\"ai.seed\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1234567890\",deprecation:{replacement:\"gen_ai.request.seed\",status:\"backfill\"},aliases:[\"gen_ai.request.seed\"],changelog:[{version:\"0.1.0\",prs:[55,57,61,108,127]}]},\"ai.streaming\":{brief:\"Whether the request was streamed back.\",type:\"boolean\",keys:[\"gen_ai.response.streaming\",\"ai.streaming\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,deprecation:{replacement:\"gen_ai.response.streaming\",status:\"backfill\"},aliases:[\"gen_ai.response.streaming\"],changelog:[{version:\"0.1.0\",prs:[76,108]},{version:\"0.0.0\"}]},\"ai.tags\":{brief:\"Tags that describe an AI pipeline step.\",type:\"string\",keys:[\"ai.tags\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'{\"executed_function\": \"add_integers\"}',deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55,127]}]},\"ai.temperature\":{brief:\"For an AI model call, the temperature parameter. Temperature essentially means how random the output will be.\",type:\"double\",keys:[\"gen_ai.request.temperature\",\"ai.temperature\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.1,deprecation:{replacement:\"gen_ai.request.temperature\",status:\"backfill\"},aliases:[\"gen_ai.request.temperature\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[55,57,61,108]}]},\"ai.texts\":{brief:\"Raw text inputs provided to the model.\",type:\"string[]\",keys:[\"gen_ai.input.messages\",\"ai.input_messages\",\"ai.prompt\",\"ai.prompt.messages\",\"ai.texts\",\"gen_ai.prompt\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"Hello, how are you?\",\"What is the capital of France?\"],deprecation:{replacement:\"gen_ai.input.messages\",status:\"backfill\"},aliases:[\"gen_ai.input.messages\",\"ai.prompt.messages\",\"gen_ai.prompt\",\"ai.prompt\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.prompt as an alias\"},{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.toolCall.args\":{brief:\"The arguments of the tool call.\",type:\"string\",keys:[\"gen_ai.tool.call.arguments\",\"ai.toolCall.args\",\"gen_ai.tool.input\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'{\"location\": \"Paris\"}',deprecation:{replacement:\"gen_ai.tool.call.arguments\",status:\"backfill\"},aliases:[\"gen_ai.tool.call.arguments\",\"gen_ai.tool.input\"],changelog:[{version:\"0.19.0\",prs:[498],description:\"Added ai.toolCall.args attribute\"}]},\"ai.toolCall.result\":{brief:\"The result of the tool call.\",type:\"string\",keys:[\"gen_ai.tool.call.result\",\"ai.toolCall.result\",\"anthropic.tool_result.content\",\"gen_ai.tool.message\",\"gen_ai.tool.output\",\"mcp.tool.result.content\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"rainy, 57\\xB0F\",deprecation:{replacement:\"gen_ai.tool.call.result\",status:\"backfill\"},aliases:[\"gen_ai.tool.call.result\",\"gen_ai.tool.output\",\"gen_ai.tool.message\",\"mcp.tool.result.content\",\"anthropic.tool_result.content\"],changelog:[{version:\"0.19.0\",prs:[498],description:\"Added ai.toolCall.result attribute\"}]},\"ai.tools\":{brief:\"For an AI model call, the functions that are available\",type:\"string[]\",keys:[\"gen_ai.tool.definitions\",\"ai.prompt.tools\",\"ai.tools\",\"gen_ai.request.available_tools\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:[\"function_1\",\"function_2\"],deprecation:{replacement:\"gen_ai.tool.definitions\",status:\"backfill\"},changelog:[{version:\"0.1.0\",prs:[55,65,127]}]},\"ai.tool_calls\":{brief:\"For an AI model call, the tool calls that were made.\",type:\"string[]\",keys:[\"gen_ai.output.messages\",\"ai.response.text\",\"ai.response.toolCalls\",\"ai.responses\",\"ai.tool_calls\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"tool_call_1\",\"tool_call_2\"],deprecation:{replacement:\"gen_ai.output.messages\",status:\"backfill\"},changelog:[{version:\"0.1.0\",prs:[55,65]}]},\"ai.top_k\":{brief:\"Limits the model to only consider the K most likely next tokens, where K is an integer (e.g., top_k=20 means only the 20 highest probability tokens are considered).\",type:\"integer\",keys:[\"gen_ai.request.top_k\",\"ai.top_k\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:35,deprecation:{replacement:\"gen_ai.request.top_k\",status:\"backfill\"},aliases:[\"gen_ai.request.top_k\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[55,57,61,108]}]},\"ai.top_p\":{brief:\"Limits the model to only consider tokens whose cumulative probability mass adds up to p, where p is a float between 0 and 1 (e.g., top_p=0.7 means only tokens that sum up to 70% of the probability mass are considered).\",type:\"double\",keys:[\"gen_ai.request.top_p\",\"ai.top_p\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.7,deprecation:{replacement:\"gen_ai.request.top_p\",status:\"backfill\"},aliases:[\"gen_ai.request.top_p\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[55,57,61,108]}]},\"ai.total_cost\":{brief:\"The total cost for the tokens used.\",type:\"double\",keys:[\"gen_ai.cost.total_tokens\",\"ai.total_cost\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12.34,deprecation:{replacement:\"gen_ai.cost.total_tokens\",status:\"backfill\"},aliases:[\"gen_ai.cost.total_tokens\"],changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[53]}],searchAlias:{name:\"ai.total_cost\",type:\"currency\"}},\"ai.total_tokens.used\":{brief:\"The total number of tokens used to process the prompt.\",type:\"integer\",keys:[\"gen_ai.usage.total_tokens\",\"ai.total_tokens.used\",\"ai.usage.tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:30,deprecation:{replacement:\"gen_ai.usage.total_tokens\",status:\"backfill\"},aliases:[\"gen_ai.usage.total_tokens\",\"ai.usage.tokens\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.usage.tokens as an alias\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57,61,108]},{version:\"0.0.0\"}]},\"ai.usage.tokens\":{brief:\"The total number of tokens used for the request and the response.\",type:\"integer\",keys:[\"gen_ai.usage.total_tokens\",\"ai.total_tokens.used\",\"ai.usage.tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:150,examples:[150],deprecation:{replacement:\"gen_ai.usage.total_tokens\",reason:\"This attribute is being deprecated in favor of gen_ai.usage.total_tokens.\",status:\"backfill\"},aliases:[\"gen_ai.usage.total_tokens\",\"ai.total_tokens.used\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.usage.tokens attribute\"}]},\"ai.values\":{brief:\"The stringified values produced by a Vercel AI SDK object or array generation.\",type:\"string\",keys:[\"ai.values\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'[{\"city\":\"Paris\"}]',examples:['[{\"city\":\"Paris\"}]'],deprecation:{reason:\"This attribute is deprecated. Use gen_ai.output.messages for model output instead.\"},changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.values attribute\"}]},\"ai.warnings\":{brief:\"Warning messages generated during model execution.\",type:\"string[]\",keys:[\"ai.warnings\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"Token limit exceeded\"],deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"angular.version\":{brief:\"The version of the Angular framework\",type:\"string\",keys:[\"angular.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"17.1.0\",changelog:[{version:\"0.7.0\",prs:[367],description:\"Added angular.version attribute\"}]},\"anthropic.tool_result.content\":{brief:\"The content of the tool result.\",type:\"string\",keys:[\"gen_ai.tool.call.result\",\"ai.toolCall.result\",\"anthropic.tool_result.content\",\"gen_ai.tool.message\",\"gen_ai.tool.output\",\"mcp.tool.result.content\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"rainy, 57\\xB0F\",examples:[\"rainy, 57\\xB0F\"],deprecation:{replacement:\"gen_ai.tool.call.result\",reason:\"Use gen_ai.tool.call.result for tool results.\",status:\"backfill\"},aliases:[\"gen_ai.tool.call.result\",\"gen_ai.tool.output\",\"gen_ai.tool.message\",\"mcp.tool.result.content\",\"ai.toolCall.result\"],changelog:[{version:\"0.26.0\",prs:[660],description:\"Added anthropic.tool_result.content attribute, deprecated in favor of gen_ai.tool.call.result\"}]},\"app.app_build\":{brief:\"Internal build identifier, as it appears on the platform.\",type:\"string\",keys:[\"app.build\",\"app.app_build\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1\",deprecation:{replacement:\"app.build\",reason:\"Deprecated in favor of app.build\",status:\"backfill\"},aliases:[\"app.build\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added and deprecated app.app_build in favor of app.build\"}]},\"app.app_identifier\":{brief:\"Version-independent application identifier, often a dotted bundle ID.\",type:\"string\",keys:[\"app.identifier\",\"app.app_identifier\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"com.example.myapp\",deprecation:{replacement:\"app.identifier\",reason:\"Deprecated in favor of app.identifier\",status:\"backfill\"},aliases:[\"app.identifier\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added and deprecated app.app_identifier in favor of app.identifier\"}]},\"app.app_name\":{brief:\"Human readable application name, as it appears on the platform.\",type:\"string\",keys:[\"app.name\",\"app.app_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"My App\",deprecation:{replacement:\"app.name\",reason:\"Deprecated in favor of app.name\",status:\"backfill\"},aliases:[\"app.name\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added and deprecated app.app_name in favor of app.name\"}]},\"app.app_start_time\":{brief:\"Formatted UTC timestamp when the user started the application.\",type:\"string\",keys:[\"app.start_time\",\"app.app_start_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"2025-01-01T00:00:00.000Z\",deprecation:{replacement:\"app.start_time\",reason:\"Deprecated in favor of app.start_time\",status:\"backfill\"},aliases:[\"app.start_time\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added and deprecated app.app_start_time in favor of app.start_time\"}]},\"app.app_version\":{brief:\"Human readable application version, as it appears on the platform.\",type:\"string\",keys:[\"app.version\",\"app.app_version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1.0.0\",deprecation:{replacement:\"app.version\",reason:\"Deprecated in favor of app.version\",status:\"backfill\"},aliases:[\"app.version\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added and deprecated app.app_version in favor of app.version\"}]},\"app.build\":{brief:\"Internal build identifier, as it appears on the platform.\",type:\"string\",keys:[\"app.build\",\"app.app_build\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1\",aliases:[\"app.app_build\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added app.build attribute\"}]},\"app.identifier\":{brief:\"Version-independent application identifier, often a dotted bundle ID.\",type:\"string\",keys:[\"app.identifier\",\"app.app_identifier\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"com.example.myapp\",aliases:[\"app.app_identifier\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added app.identifier attribute\"}]},\"app.in_foreground\":{brief:\"Whether the application is currently in the foreground.\",type:\"boolean\",keys:[\"app.in_foreground\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.5.0\",prs:[296],description:\"Added app.in_foreground attribute\"}]},\"app.name\":{brief:\"Human readable application name, as it appears on the platform.\",type:\"string\",keys:[\"app.name\",\"app.app_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"My App\",aliases:[\"app.app_name\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added app.name attribute\"}]},app_start_cold:{brief:\"The duration of a cold app start in milliseconds\",type:\"double\",keys:[\"app.vitals.start.cold.value\",\"app_start_cold\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,deprecation:{replacement:\"app.vitals.start.cold.value\",reason:\"Replaced by app.vitals.start.cold.value to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.start.cold.value\"],changelog:[{version:\"0.5.0\",prs:[323],description:\"Added and deprecated in favor of app.vitals.start.cold.value\"}]},\"app.start_time\":{brief:\"Formatted UTC timestamp when the user started the application.\",type:\"string\",keys:[\"app.start_time\",\"app.app_start_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"2025-01-01T00:00:00.000Z\",aliases:[\"app.app_start_time\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added app.start_time attribute\"}]},app_start_type:{brief:\"Mobile app start variant. Either cold or warm.\",type:\"string\",keys:[\"app.vitals.start.type\",\"app_start_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"cold\",deprecation:{replacement:\"app.vitals.start.type\",reason:\"Replaced by app.vitals.start.type to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.start.type\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Deprecated in favor of app.vitals.start.type\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},app_start_warm:{brief:\"The duration of a warm app start in milliseconds\",type:\"double\",keys:[\"app.vitals.start.warm.value\",\"app_start_warm\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,deprecation:{replacement:\"app.vitals.start.warm.value\",reason:\"Replaced by app.vitals.start.warm.value to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.start.warm.value\"],changelog:[{version:\"0.5.0\",prs:[323],description:\"Added and deprecated in favor of app.vitals.start.warm.value\"}]},\"app.version\":{brief:\"Human readable application version, as it appears on the platform.\",type:\"string\",keys:[\"app.version\",\"app.app_version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1.0.0\",aliases:[\"app.app_version\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added app.version attribute\"}]},\"app.vitals.frames.delay.value\":{brief:\"The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/).\",type:\"integer\",keys:[\"app.vitals.frames.delay.value\",\"frames.delay\",\"mobile.frames_delay\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:5,aliases:[\"frames.delay\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.frames.delay.value to replace frames.delay\"}]},\"app.vitals.frames.frozen.count\":{brief:\"The number of frozen frames rendered during the lifetime of the span.\",type:\"integer\",keys:[\"app.vitals.frames.frozen.count\",\"frames.frozen\",\"mobile.frozen_frames\",\"sentry.frames.frozen\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:3,aliases:[\"frames.frozen\",\"sentry.frames.frozen\"],changelog:[{version:\"0.19.0\",prs:[500],description:\"Added sentry.frames.frozen as an alias\"},{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.frames.frozen.count to replace frames.frozen\"}]},\"app.vitals.frames.frozen.rate\":{brief:\"The fraction of rendered frames that were frozen, calculated as `app.vitals.frames.frozen.count` divided by `app.vitals.frames.total.count`. This is computed by Relay.\",type:\"double\",keys:[\"app.vitals.frames.frozen.rate\",\"frames_frozen_rate\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.5,aliases:[\"frames_frozen_rate\"],changelog:[{version:\"0.19.0\",prs:[493],description:\"Added app.vitals.frames.frozen.rate attribute\"}]},\"app.vitals.frames.slow.count\":{brief:\"The number of slow frames rendered during the lifetime of the span.\",type:\"integer\",keys:[\"app.vitals.frames.slow.count\",\"frames.slow\",\"mobile.slow_frames\",\"sentry.frames.slow\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,aliases:[\"frames.slow\",\"sentry.frames.slow\"],changelog:[{version:\"0.19.0\",prs:[500],description:\"Added sentry.frames.slow as an alias\"},{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.frames.slow.count to replace frames.slow\"}]},\"app.vitals.frames.slow.rate\":{brief:\"The fraction of rendered frames that were slow, calculated as `app.vitals.frames.slow.count` divided by `app.vitals.frames.total.count`. This is computed by Relay.\",type:\"double\",keys:[\"app.vitals.frames.slow.rate\",\"frames_slow_rate\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.25,aliases:[\"frames_slow_rate\"],changelog:[{version:\"0.19.0\",prs:[493],description:\"Added app.vitals.frames.slow.rate attribute\"}]},\"app.vitals.frames.total.count\":{brief:\"The number of total frames rendered during the lifetime of the span.\",type:\"integer\",keys:[\"app.vitals.frames.total.count\",\"frames.total\",\"mobile.total_frames\",\"sentry.frames.total\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:60,aliases:[\"frames.total\",\"sentry.frames.total\"],changelog:[{version:\"0.19.0\",prs:[500],description:\"Added sentry.frames.total as an alias\"},{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.frames.total.count to replace frames.total\"}]},\"app.vitals.stall.duration\":{brief:\"The combined duration of all stalls in milliseconds. Only applies to React Native. This is computed by Relay.\",type:\"double\",keys:[\"app.vitals.stall.duration\",\"stall_total_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:4e3,aliases:[\"stall_total_time\"],changelog:[{version:\"0.19.0\",prs:[493],description:\"Added app.vitals.stall.duration attribute\"}]},\"app.vitals.stall.percentage\":{brief:\"The fraction of transaction duration during which the app was stalled, between 0.0 and 1.0. For example, 0.8 represents 80%. Only applies to React Native. This is computed by Relay.\",type:\"double\",keys:[\"app.vitals.stall.percentage\",\"stall_percentage\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.8,aliases:[\"stall_percentage\"],changelog:[{version:\"0.19.0\",prs:[493],description:\"Added app.vitals.stall.percentage attribute\"}]},\"app.vitals.start.cold.value\":{brief:\"The duration of a cold app start in milliseconds\",type:\"double\",keys:[\"app.vitals.start.cold.value\",\"app_start_cold\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,aliases:[\"app_start_cold\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.start.cold.value attribute\"}]},\"app.vitals.start.prewarmed\":{brief:\"Whether the app start was prewarmed.\",type:\"boolean\",keys:[\"app.vitals.start.prewarmed\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.11.0\",prs:[379],description:\"Added app.vitals.start.prewarmed attribute\"}]},\"app.vitals.start.reason\":{brief:\"The reason that triggered the app start.\",type:\"string\",keys:[\"app.vitals.start.reason\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"push\",changelog:[{version:\"0.7.0\",prs:[353],description:\"Added app.vitals.start.reason attribute\"}]},\"app.vitals.start.screen\":{brief:\"The screen that is rendered when the app start is complete. This is the screen the user first sees and can interact with after launch. The absence of this attribute on the app start span indicates a background app start where no UI was rendered.\",type:\"string\",keys:[\"app.vitals.start.screen\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"MainActivity\",changelog:[{version:\"0.7.0\",prs:[353],description:\"Added app.vitals.start.screen attribute\"}]},\"app.vitals.start.type\":{brief:\"The type of app start, for example `cold` or `warm`\",type:\"string\",keys:[\"app.vitals.start.type\",\"app_start_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"cold\",aliases:[\"app_start_type\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.start.type attribute\"}]},\"app.vitals.start.warm.value\":{brief:\"The duration of a warm app start in milliseconds\",type:\"double\",keys:[\"app.vitals.start.warm.value\",\"app_start_warm\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,aliases:[\"app_start_warm\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.start.warm.value attribute\"}]},\"app.vitals.ttfd.value\":{brief:\"The duration of time to full display in milliseconds\",type:\"double\",keys:[\"app.vitals.ttfd.value\",\"time_to_full_display\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,aliases:[\"time_to_full_display\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.ttfd.value attribute\"}]},\"app.vitals.ttid.value\":{brief:\"The duration of time to initial display in milliseconds\",type:\"double\",keys:[\"app.vitals.ttid.value\",\"time_to_initial_display\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,aliases:[\"time_to_initial_display\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.ttid.value attribute\"}]},\"art.gc.blocking_count\":{brief:\"Total number of blocking (stop-the-world) garbage collections performed by the Android Runtime\",type:\"integer\",keys:[\"art.gc.blocking_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.gc.blocking_count attribute\"}]},\"art.gc.blocking_time\":{brief:\"Total time spent in blocking (stop-the-world) garbage collections by the Android Runtime, in milliseconds\",type:\"double\",keys:[\"art.gc.blocking_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:11.873,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.gc.blocking_time attribute\"}]},\"art.gc.pre_oome_count\":{brief:\"Total number of garbage collections triggered as a last resort before an OutOfMemoryError by the Android Runtime\",type:\"integer\",keys:[\"art.gc.pre_oome_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:0,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.gc.pre_oome_count attribute\"}]},\"art.gc.total_count\":{brief:\"Total number of garbage collections performed by the Android Runtime\",type:\"integer\",keys:[\"art.gc.total_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.gc.total_count attribute\"}]},\"art.gc.total_time\":{brief:\"Total time spent in garbage collection by the Android Runtime, in milliseconds\",type:\"double\",keys:[\"art.gc.total_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:11.807,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.gc.total_time attribute\"}]},\"art.gc.waiting_time\":{brief:\"Total time threads spent waiting for garbage collection to complete in the Android Runtime, in milliseconds\",type:\"double\",keys:[\"art.gc.waiting_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:8.054,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.gc.waiting_time attribute\"}]},\"art.memory.free\":{brief:\"Free memory available to the process as reported by the Android Runtime, in bytes\",type:\"integer\",keys:[\"art.memory.free\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:3181568,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.memory.free attribute\"}]},\"art.memory.free_until_gc\":{brief:\"Free memory available before a garbage collection would be triggered by the Android Runtime, in bytes\",type:\"integer\",keys:[\"art.memory.free_until_gc\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:3181568,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.memory.free_until_gc attribute\"}]},\"art.memory.free_until_oome\":{brief:\"Free memory available before an OutOfMemoryError would be thrown by the Android Runtime, in bytes\",type:\"integer\",keys:[\"art.memory.free_until_oome\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:196083712,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.memory.free_until_oome attribute\"}]},\"art.memory.max\":{brief:\"Maximum memory the process is allowed to use as reported by the Android Runtime, in bytes\",type:\"integer\",keys:[\"art.memory.max\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:201326592,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.memory.max attribute\"}]},\"art.memory.total\":{brief:\"Total memory currently allocated to the process by the Android Runtime, in bytes\",type:\"integer\",keys:[\"art.memory.total\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:7774208,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.memory.total attribute\"}]},\"aws.cloudwatch.logs.log_group\":{brief:\"The name of the CloudWatch Logs log group\",type:\"string\",keys:[\"aws.cloudwatch.logs.log_group\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"/aws/lambda/my-function\",changelog:[{version:\"0.7.0\",prs:[369],description:\"Added aws.cloudwatch.logs.log_group attribute\"}]},\"aws.cloudwatch.logs.log_stream\":{brief:\"The name of the CloudWatch Logs log stream\",type:\"string\",keys:[\"aws.cloudwatch.logs.log_stream\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"2024/01/01/[$LATEST]abcdef1234567890\",changelog:[{version:\"0.7.0\",prs:[369],description:\"Added aws.cloudwatch.logs.log_stream attribute\"}]},\"aws.cloudwatch.logs.url\":{brief:\"The URL to the CloudWatch Logs log group\",type:\"string\",keys:[\"aws.cloudwatch.logs.url\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#logsV2:log-groups/log-group/my-log-group\",changelog:[{version:\"0.7.0\",prs:[369],description:\"Added aws.cloudwatch.logs.url attribute\"}]},\"aws.dynamodb.attributes_to_get\":{brief:\"The value of the `AttributesToGet` request parameter.\",type:\"string[]\",keys:[\"aws.dynamodb.attributes_to_get\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:[\"lives\",\"id\"],examples:[[\"lives\",\"id\"]],changelog:[{version:\"0.27.0\",prs:[672],description:\"Added aws.dynamodb.attributes_to_get attribute\"}]},\"aws.dynamodb.attribute_definitions\":{brief:\"The JSON-serialized value of each item in the `AttributeDefinitions` request field.\",type:\"string[]\",keys:[\"aws.dynamodb.attribute_definitions\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:['{ \"AttributeName\": \"string\", \"AttributeType\": \"string\" }'],changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.attribute_definitions attribute\"}]},\"aws.dynamodb.consistent_read\":{brief:\"The value of the `ConsistentRead` request parameter.\",type:\"boolean\",keys:[\"aws.dynamodb.consistent_read\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:!0,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.consistent_read attribute\"}]},\"aws.dynamodb.consumed_capacity\":{brief:\"The JSON-serialized value of each item in the `ConsumedCapacity` response field.\",type:\"string[]\",keys:[\"aws.dynamodb.consumed_capacity\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:['{ \"CapacityUnits\": number, \"GlobalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"LocalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"ReadCapacityUnits\": number, \"Table\": { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number }, \"TableName\": \"string\", \"WriteCapacityUnits\": number }'],changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.consumed_capacity attribute\"}]},\"aws.dynamodb.count\":{brief:\"The value of the `Count` response parameter.\",type:\"integer\",keys:[\"aws.dynamodb.count\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:10,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.count attribute\"}]},\"aws.dynamodb.exclusive_start_table\":{brief:\"The value of the `ExclusiveStartTableName` request parameter.\",type:\"string\",keys:[\"aws.dynamodb.exclusive_start_table\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Users\",changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.exclusive_start_table attribute\"}]},\"aws.dynamodb.global_secondary_indexes\":{brief:\"The JSON-serialized value of each item of the `GlobalSecondaryIndexes` request field.\",type:\"string[]\",keys:[\"aws.dynamodb.global_secondary_indexes\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:['{ \"IndexName\": \"string\", \"KeySchema\": [ { \"AttributeName\": \"string\", \"KeyType\": \"string\" } ], \"Projection\": { \"NonKeyAttributes\": [ \"string\" ], \"ProjectionType\": \"string\" }, \"ProvisionedThroughput\": { \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }'],changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.global_secondary_indexes attribute\"}]},\"aws.dynamodb.global_secondary_index_updates\":{brief:\"The JSON-serialized value of each item in the `GlobalSecondaryIndexUpdates` request field.\",type:\"string[]\",keys:[\"aws.dynamodb.global_secondary_index_updates\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:['{ \"Create\": { \"IndexName\": \"string\", \"KeySchema\": [ { \"AttributeName\": \"string\", \"KeyType\": \"string\" } ], \"Projection\": { \"NonKeyAttributes\": [ \"string\" ], \"ProjectionType\": \"string\" }, \"ProvisionedThroughput\": { \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }'],changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.global_secondary_index_updates attribute\"}]},\"aws.dynamodb.index_name\":{brief:\"The value of the `IndexName` request parameter.\",type:\"string\",keys:[\"aws.dynamodb.index_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"name_to_group\",changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.index_name attribute\"}]},\"aws.dynamodb.item_collection_metrics\":{brief:\"The JSON-serialized value of the `ItemCollectionMetrics` response field.\",type:\"string\",keys:[\"aws.dynamodb.item_collection_metrics\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:'{ \"string\" : [ { \"ItemCollectionKey\": { \"string\" : { \"B\": blob, \"BOOL\": boolean, \"BS\": [ blob ], \"L\": [ \"AttributeValue\" ], \"M\": { \"string\" : \"AttributeValue\" }, \"N\": \"string\", \"NS\": [ \"string\" ], \"NULL\": boolean, \"S\": \"string\", \"SS\": [ \"string\" ] } }, \"SizeEstimateRangeGB\": [ number ] } ] }',changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.item_collection_metrics attribute\"}]},\"aws.dynamodb.limit\":{brief:\"The value of the `Limit` request parameter.\",type:\"integer\",keys:[\"aws.dynamodb.limit\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:10,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.limit attribute\"}]},\"aws.dynamodb.local_secondary_indexes\":{brief:\"The JSON-serialized value of each item of the `LocalSecondaryIndexes` request field.\",type:\"string[]\",keys:[\"aws.dynamodb.local_secondary_indexes\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:['{ \"IndexArn\": \"string\", \"IndexName\": \"string\", \"IndexSizeBytes\": number, \"ItemCount\": number, \"KeySchema\": [ { \"AttributeName\": \"string\", \"KeyType\": \"string\" } ], \"Projection\": { \"NonKeyAttributes\": [ \"string\" ], \"ProjectionType\": \"string\" } }'],changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.local_secondary_indexes attribute\"}]},\"aws.dynamodb.projection\":{brief:\"The value of the `ProjectionExpression` request parameter.\",type:\"string\",keys:[\"aws.dynamodb.projection\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Title, Price, Color\",changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.projection attribute\"}]},\"aws.dynamodb.provisioned_read_capacity\":{brief:\"The value of the `ProvisionedThroughput.ReadCapacityUnits` request parameter.\",type:\"double\",keys:[\"aws.dynamodb.provisioned_read_capacity\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:1,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.provisioned_read_capacity attribute\"}]},\"aws.dynamodb.provisioned_write_capacity\":{brief:\"The value of the `ProvisionedThroughput.WriteCapacityUnits` request parameter.\",type:\"double\",keys:[\"aws.dynamodb.provisioned_write_capacity\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:2,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.provisioned_write_capacity attribute\"}]},\"aws.dynamodb.scanned_count\":{brief:\"The value of the `ScannedCount` response parameter.\",type:\"integer\",keys:[\"aws.dynamodb.scanned_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:50,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.scanned_count attribute\"}]},\"aws.dynamodb.scan_forward\":{brief:\"The value of the `ScanIndexForward` request parameter.\",type:\"boolean\",keys:[\"aws.dynamodb.scan_forward\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:!0,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.scan_forward attribute\"}]},\"aws.dynamodb.segment\":{brief:\"The value of the `Segment` request parameter.\",type:\"integer\",keys:[\"aws.dynamodb.segment\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:10,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.segment attribute\"}]},\"aws.dynamodb.select\":{brief:\"The value of the `Select` request parameter.\",type:\"string\",keys:[\"aws.dynamodb.select\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"ALL_ATTRIBUTES\",changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.select attribute\"}]},\"aws.dynamodb.table_count\":{brief:\"The number of items in the `TableNames` response parameter.\",type:\"integer\",keys:[\"aws.dynamodb.table_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:20,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.table_count attribute\"}]},\"aws.dynamodb.table_names\":{brief:\"The keys in the `RequestItems` object field.\",type:\"string[]\",keys:[\"aws.dynamodb.table_names\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:[\"Users\",\"Cats\"],changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.table_names attribute\"}]},\"aws.dynamodb.total_segments\":{brief:\"The value of the `TotalSegments` request parameter.\",type:\"integer\",keys:[\"aws.dynamodb.total_segments\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:100,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.total_segments attribute\"}]},\"aws.extended_request_id\":{brief:\"The AWS extended request ID as returned in the response headers.\",type:\"string\",keys:[\"aws.extended_request_id\",\"aws.request.extended_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=\",aliases:[\"aws.request.extended_id\"],changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.extended_request_id attribute\"}]},\"aws.kinesis.stream_name\":{brief:\"The name of the AWS Kinesis stream the request refers to.\",type:\"string\",keys:[\"aws.kinesis.stream_name\",\"aws.kinesis.stream.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"some-stream-name\",aliases:[\"aws.kinesis.stream.name\"],changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.kinesis.stream_name attribute\"}]},\"aws.kinesis.stream.name\":{brief:\"The name of the AWS Kinesis stream the request refers to.\",type:\"string\",keys:[\"aws.kinesis.stream_name\",\"aws.kinesis.stream.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"some-stream-name\",deprecation:{replacement:\"aws.kinesis.stream_name\",reason:\"This attribute is being deprecated in favor of aws.kinesis.stream_name, which is the OTel-aligned replacement.\",status:\"backfill\"},aliases:[\"aws.kinesis.stream_name\"],changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.kinesis.stream.name attribute, deprecated in favor of aws.kinesis.stream_name\"}]},\"aws.lambda.aws_request_id\":{brief:\"The AWS request ID as received by the Lambda function runtime\",type:\"string\",keys:[\"faas.invocation_id\",\"aws.lambda.aws_request_id\",\"faas.execution\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"8476a536-e9f4-11e8-9739-2dfe598c3fcd\",deprecation:{replacement:\"faas.invocation_id\",reason:\"This attribute is being deprecated in favor of faas.invocation_id\",status:\"backfill\"},aliases:[\"faas.invocation_id\",\"faas.execution\"],changelog:[{version:\"0.16.0\",prs:[473],description:\"Added faas.execution as an alias\"},{version:\"0.11.1\",prs:[414,424],description:\"Deprecated aws.lambda.aws_request_id in favor of faas.invocation_id\"},{version:\"0.7.0\",prs:[369],description:\"Added aws.lambda.aws_request_id attribute\"}]},\"aws.lambda.execution_duration_in_millis\":{brief:\"The execution duration of the Lambda function invocation in milliseconds\",type:\"double\",keys:[\"aws.lambda.execution_duration_in_millis\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,changelog:[{version:\"0.7.0\",prs:[369],description:\"Added aws.lambda.execution_duration_in_millis attribute\"}]},\"aws.lambda.function_name\":{brief:\"The name of the Lambda function\",type:\"string\",keys:[\"faas.name\",\"aws.lambda.function_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"my-function\",deprecation:{replacement:\"faas.name\",reason:\"Use the OTel-aligned faas.name attribute instead\",status:\"backfill\"},aliases:[\"faas.name\"],changelog:[{version:\"0.11.1\",prs:[414],description:\"Deprecated aws.lambda.function_name in favor of faas.name\"},{version:\"0.7.0\",prs:[369],description:\"Added aws.lambda.function_name attribute\"}]},\"aws.lambda.function_version\":{brief:\"The version of the Lambda function\",type:\"string\",keys:[\"faas.version\",\"aws.lambda.function_version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"$LATEST\",deprecation:{replacement:\"faas.version\",reason:\"Use the OTel-aligned faas.version attribute instead\",status:\"backfill\"},aliases:[\"faas.version\"],changelog:[{version:\"0.11.1\",prs:[414,424],description:\"Deprecated aws.lambda.function_version in favor of faas.version\"},{version:\"0.7.0\",prs:[369],description:\"Added aws.lambda.function_version attribute\"}]},\"aws.lambda.invoked_arn\":{brief:\"The full ARN of the Lambda function that was invoked\",type:\"string\",keys:[\"aws.lambda.invoked_arn\",\"aws.lambda.invoked_function_arn\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"arn:aws:lambda:us-east-1:123456789012:function:my-function\",aliases:[\"aws.lambda.invoked_function_arn\"],changelog:[{version:\"0.11.1\",prs:[414]}]},\"aws.lambda.invoked_function_arn\":{brief:\"The full ARN of the Lambda function that was invoked\",type:\"string\",keys:[\"aws.lambda.invoked_arn\",\"aws.lambda.invoked_function_arn\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"arn:aws:lambda:us-east-1:123456789012:function:my-function\",deprecation:{replacement:\"aws.lambda.invoked_arn\",reason:\"This attribute is being deprecated in favor of aws.lambda.invoked_arn\",status:\"backfill\"},aliases:[\"aws.lambda.invoked_arn\"],changelog:[{version:\"0.11.1\",prs:[414],description:\"Deprecated aws.lambda.invoked_function_arn in favor of aws.lambda.invoked_arn\"},{version:\"0.7.0\",prs:[369],description:\"Added aws.lambda.invoked_function_arn attribute\"}]},\"aws.lambda.remaining_time_in_millis\":{brief:\"The remaining time in milliseconds before the Lambda function times out\",type:\"double\",keys:[\"aws.lambda.remaining_time_in_millis\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:5e3,changelog:[{version:\"0.7.0\",prs:[369],description:\"Added aws.lambda.remaining_time_in_millis attribute\"}]},\"aws.log.group.names\":{brief:\"The name(s) of the AWS log group(s) an application is writing to.\",type:\"string[]\",keys:[\"aws.log.group.names\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:[\"/aws/lambda/my-function\",\"opentelemetry-service\"],changelog:[{version:\"0.11.1\",prs:[414]}]},\"aws.log.stream.names\":{brief:\"The name(s) of the AWS log stream(s) an application is writing to.\",type:\"string[]\",keys:[\"aws.log.stream.names\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:[\"logs/main/10838bed-421f-43ef-870a-f43feacbbb5b\"],changelog:[{version:\"0.11.1\",prs:[414]}]},\"aws.operation_name\":{brief:\"The name of the API operation invoked on an AWS service.\",type:\"string\",keys:[\"rpc.method\",\"aws.operation_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"PutObject\",examples:[\"PutObject\"],deprecation:{replacement:\"rpc.method\",reason:\"This attribute is being deprecated in favor of rpc.method, which is the framework-agnostic replacement.\",status:\"backfill\"},aliases:[\"rpc.method\"],changelog:[{version:\"0.19.0\",prs:[536],description:\"Added aws.operation_name attribute\"}]},aws_region:{brief:\"The geographical region the AWS resource is running\",type:\"string\",keys:[\"cloud.region\",\"aws_region\",\"gcp_region\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"us-east-1\",examples:[\"us-east-1\"],deprecation:{replacement:\"cloud.region\",status:\"backfill\"},aliases:[\"cloud.region\",\"gcp_region\"],changelog:[{version:\"0.19.0\",prs:[537],description:\"Added aws_region attribute\"}]},\"aws.request.extended_id\":{brief:\"The AWS extended request ID as returned in the response headers.\",type:\"string\",keys:[\"aws.extended_request_id\",\"aws.request.extended_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=\",deprecation:{replacement:\"aws.extended_request_id\",reason:\"This attribute is being deprecated in favor of aws.extended_request_id, which is the OTel-aligned replacement.\",status:\"backfill\"},aliases:[\"aws.extended_request_id\"],changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.request.extended_id attribute, deprecated in favor of aws.extended_request_id\"}]},\"aws.request_id\":{brief:\"The AWS request ID as returned in the response headers.\",type:\"string\",keys:[\"aws.request_id\",\"aws.request.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"79b9da39-b7ae-508a-a6bc-864b2829c622\",aliases:[\"aws.request.id\"],changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.request_id attribute\"}]},\"aws.request.id\":{brief:\"The AWS request ID as returned in the response headers.\",type:\"string\",keys:[\"aws.request_id\",\"aws.request.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"79b9da39-b7ae-508a-a6bc-864b2829c622\",deprecation:{replacement:\"aws.request_id\",reason:\"This attribute is being deprecated in favor of aws.request_id, which is the OTel-aligned replacement.\",status:\"backfill\"},aliases:[\"aws.request_id\"],changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.request.id attribute, deprecated in favor of aws.request_id\"}]},\"aws.request.url\":{brief:\"The URL of the AWS API request.\",type:\"string\",keys:[\"url.full\",\"aws.request.url\",\"http.url\",\"messaging.url\",\"url\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"https://sqs.us-east-1.amazonaws.com/123456789/my-queue\",deprecation:{replacement:\"url.full\",reason:\"This attribute is being deprecated in favor of url.full, which is the OTel-aligned replacement.\",status:\"backfill\"},aliases:[\"url.full\",\"http.url\",\"url\",\"messaging.url\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.url as an alias\"},{version:\"0.19.0\",prs:[488],description:\"Added aws.request.url attribute, deprecated in favor of url.full\"}]},\"aws.s3.bucket\":{brief:\"The S3 bucket name the request refers to.\",type:\"string\",keys:[\"aws.s3.bucket\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"ot-demo-test\",changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.s3.bucket attribute\"}]},\"aws.s3.copy_source\":{brief:\"The source object (in the form bucket/key) for the copy operation.\",type:\"string\",keys:[\"aws.s3.copy_source\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"someFile.yml\",examples:[\"someFile.yml\"],changelog:[{version:\"0.27.0\",prs:[672],description:\"Added aws.s3.copy_source attribute\"}],additionalContext:[\"Applicable to the copy-object and upload-part-copy operations, corresponding to the CopySource parameter.\"]},\"aws.s3.delete\":{brief:\"The delete request container that specifies the objects to be deleted.\",type:\"string\",keys:[\"aws.s3.delete\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Objects=[{Key=string,VersionId=string},{Key=string,VersionId=string}],Quiet=boolean\",examples:[\"Objects=[{Key=string,VersionId=string},{Key=string,VersionId=string}],Quiet=boolean\"],changelog:[{version:\"0.27.0\",prs:[672],description:\"Added aws.s3.delete attribute\"}],additionalContext:[\"Applicable only to the delete-objects operation, corresponding to its Delete parameter.\"]},\"aws.s3.key\":{brief:\"The S3 object key the request refers to. Corresponds to the --key parameter of the S3 API operations.\",type:\"string\",keys:[\"aws.s3.key\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"someFile.yml\",examples:[\"someFile.yml\"],changelog:[{version:\"0.27.0\",prs:[672],description:\"Added aws.s3.key attribute\"}]},\"aws.s3.part_number\":{brief:\"The part number of the part being uploaded in a multipart-upload operation. This is a positive integer between 1 and 10,000.\",type:\"integer\",keys:[\"aws.s3.part_number\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:3456,examples:[3456],changelog:[{version:\"0.27.0\",prs:[672],description:\"Added aws.s3.part_number attribute\"}],additionalContext:[\"Applicable only to the upload-part and upload-part-copy operations.\"]},\"aws.s3.upload_id\":{brief:\"Upload ID that identifies the multipart upload.\",type:\"string\",keys:[\"aws.s3.upload_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"dfRtDYWFbkRONycy.Yxwh66Yjlx.cph0gtNBtJ\",examples:[\"dfRtDYWFbkRONycy.Yxwh66Yjlx.cph0gtNBtJ\"],changelog:[{version:\"0.27.0\",prs:[672],description:\"Added aws.s3.upload_id attribute\"}]},\"aws.secretsmanager.secret.arn\":{brief:\"The ARN of the Secret stored in Secrets Manager.\",type:\"string\",keys:[\"aws.secretsmanager.secret.arn\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"arn:aws:secretsmanager:us-east-1:123456789012:secret:SecretName-6RandomCharacters\",changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.secretsmanager.secret.arn attribute\"}]},\"aws.sns.topic.arn\":{brief:\"The ARN of the AWS SNS Topic. An Amazon SNS topic is a logical access point that acts as a communication channel.\",type:\"string\",keys:[\"aws.sns.topic.arn\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"arn:aws:sns:us-east-1:123456789012:mystack-mytopic-NZJ5JSMVGFIE\",changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.sns.topic.arn attribute\"}]},\"aws.sqs.queue.url\":{brief:\"The URL of the AWS SQS Queue. It\\u2019s a unique identifier for a queue in Amazon Simple Queue Service (SQS) and is used to access the queue and perform actions on it.\",type:\"string\",keys:[\"aws.sqs.queue.url\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"https://sqs.us-east-1.amazonaws.com/123456789012/MyQueue\",examples:[\"https://sqs.us-east-1.amazonaws.com/123456789012/MyQueue\"],changelog:[{version:\"0.27.0\",prs:[672],description:\"Added aws.sqs.queue.url attribute\"}]},\"aws.step_functions.activity.arn\":{brief:\"The ARN of the AWS Step Functions Activity.\",type:\"string\",keys:[\"aws.step_functions.activity.arn\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"arn:aws:states:us-east-1:123456789012:activity:get-greeting\",changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.step_functions.activity.arn attribute\"}]},\"aws.step_functions.execution.arn\":{brief:\"The ARN of the AWS Step Functions Execution.\",type:\"string\",keys:[\"aws.step_functions.execution.arn\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"arn:aws:states:us-east-1:123456789012:execution:myStateMachine:myExecution\",examples:[\"arn:aws:states:us-east-1:123456789012:execution:myStateMachine:myExecution\"],changelog:[{version:\"0.27.0\",prs:[672],description:\"Added aws.step_functions.execution.arn attribute\"}]},\"aws.step_functions.state_machine.arn\":{brief:\"The ARN of the AWS Step Functions State Machine.\",type:\"string\",keys:[\"aws.step_functions.state_machine.arn\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"arn:aws:states:us-east-1:123456789012:stateMachine:myStateMachine:1\",changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.step_functions.state_machine.arn attribute\"}]},blocked_main_thread:{brief:\"Whether the main thread was blocked by the span.\",type:\"boolean\",keys:[\"blocked_main_thread\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"browser.bfcache.frame\":{brief:\"Which frame in the page's frame tree a back/forward cache not-restored reason originated from: the top document or a child frame.\",type:\"string\",keys:[\"browser.bfcache.frame\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"top\",examples:[\"top\",\"child\"],changelog:[{version:\"0.19.0\",prs:[513],description:\"Added browser.bfcache.frame attribute\"}]},\"browser.bfcache.not_restored_reason_count\":{brief:\"The number of reported reasons a page was not restored from the back/forward cache on a back/forward navigation. 0 when the browser reported no reasons (e.g. non-Chromium browsers).\",type:\"integer\",keys:[\"browser.bfcache.not_restored_reason_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2,examples:[2],changelog:[{version:\"0.19.0\",prs:[513],description:\"Added browser.bfcache.not_restored_reason_count attribute\"}]},\"browser.bfcache.outcome\":{brief:\"Whether a back/forward navigation was restored from the browser's back/forward cache (bfcache). 'hit' means the page was restored; 'miss' means it was reloaded.\",type:\"string\",keys:[\"browser.bfcache.outcome\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"hit\",examples:[\"hit\",\"miss\"],changelog:[{version:\"0.19.0\",prs:[513],description:\"Added browser.bfcache.outcome attribute\"}]},\"browser.bfcache.reason\":{brief:\"A browser-reported reason a page was not restored from the back/forward cache on a back/forward navigation, taken from the notRestoredReasons API. Reported per reason (a single miss can have several). Currently Chromium-only.\",type:\"string\",keys:[\"browser.bfcache.reason\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"unload-listener\",examples:[\"unload-listener\",\"websocket\",\"idbversionchangeevent\",\"response-cache-control-no-store\"],changelog:[{version:\"0.19.0\",prs:[513],description:\"Added browser.bfcache.reason attribute\"}]},\"browser.name\":{brief:\"The name of the browser.\",type:\"string\",keys:[\"browser.name\",\"sentry.browser.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Chrome\",aliases:[\"sentry.browser.name\"],changelog:[{version:\"0.1.0\",prs:[127,139]},{version:\"0.0.0\"}]},\"browser.navigation.id\":{brief:\"The identifier of the navigation the measurement belongs to, incremented by the browser for each navigation within a page's lifetime.\",type:\"integer\",keys:[\"browser.navigation.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,examples:[1,3,0],changelog:[{version:\"0.24.0\",prs:[640],description:\"Document 0 as the fallback value when the browser does not support `navigationId`\"},{version:\"0.22.0\",prs:[634],description:\"Added browser.navigation.id attribute\"}],additionalContext:[\"Sourced from `PerformanceEntry.navigationId`, defined by the Soft Navigations spec. Despite its origin it is not soft-navigation specific: the field is set on the `PerformanceNavigationTiming` entry of a hard navigation too.\",\"The value starts at 1 for the initial page load and increments for each subsequent navigation. It is only unique within a single page lifetime, not globally.\",\"A value of 0 is a fallback rather than a real navigation id: web-vitals reports 0 when the browser does not expose `PerformanceEntry.navigationId`, so 0 means the id is unknown.\",\"Pairs with `browser.navigation.type`: the type says how the browser arrived at the page, the id says which navigation of that page a measurement belongs to.\",\"Not to be confused with the Navigation API's `NavigationHistoryEntry.id`, which is an opaque string identifying a history entry rather than a counter, and is not interchangeable with this value.\",\"Also distinct from the `router.navigation.*` attributes, which describe the client-side router's own view of a navigation. Those come from the framework, this one comes from the browser, and both can be set on the same span.\"]},\"browser.navigation.type\":{brief:\"The type of navigation the browser performed to arrive at the page the metrics were measured on.\",type:\"string\",keys:[\"browser.navigation.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"navigate\",examples:[\"navigate\",\"reload\",\"back-forward\",\"back-forward-cache\",\"prerender\",\"restore\",\"soft-navigation\"],changelog:[{version:\"0.24.0\",prs:[640],description:\"Use the web-vitals navigation types as-is: `bfcache` is now `back-forward-cache`, and `back-forward` and `restore` are no longer reported as `navigate`\"},{version:\"0.22.0\",prs:[600],description:\"Added browser.navigation.type attribute\"}],additionalContext:[\"Carries the `navigationType` value reported by the web-vitals library verbatim. web-vitals hyphenates the Navigation Timing `PerformanceNavigationTiming.type` value (`back_forward` becomes `back-forward`) and adds states that API does not cover: `back-forward-cache` for a restore from the back/forward cache, `prerender`, `restore` for a discarded tab being reloaded, and `soft-navigation`.\",\"`back-forward-cache` is only set when the page was actually restored from the back/forward cache. A back/forward navigation that missed the cache is a full document load and reports `back-forward`. Use the `browser.bfcache.*` attributes to diagnose misses.\",\"`prerender` pages finish painting before activation, so their paint timings are offset by `browser.performance.navigation.activation_start`. Keep them separate when aggregating web vitals.\",\"Not to be confused with `router.navigation.type`, which holds the client-side router's own vocabulary (`link`, `goto`, `router.push`). The two are independent and can both be set on the same span.\"]},\"browser.paint.type\":{brief:\"The type of paint timing entry reported by the browser.\",type:\"string\",keys:[\"browser.paint.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"first-paint\",examples:[\"first-paint\",\"first-contentful-paint\"],changelog:[{version:\"0.22.0\",prs:[606],description:\"Added browser.paint.type attribute\"}]},\"browser.performance.navigation.activation_start\":{brief:\"The time between initiating a navigation to a page and the browser activating the page\",type:\"double\",keys:[\"browser.performance.navigation.activation_start\",\"performance.activationStart\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1.983,aliases:[\"performance.activationStart\"],changelog:[{version:\"0.5.0\",prs:[321],description:\"Added browser.performance.navigation.activation_start attribute\"}]},\"browser.performance.time_origin\":{brief:\"The browser's performance.timeOrigin timestamp representing the time when the pageload was initiated\",type:\"double\",keys:[\"browser.performance.time_origin\",\"performance.timeOrigin\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1776185678886e-3,aliases:[\"performance.timeOrigin\"],changelog:[{version:\"0.5.0\",prs:[321],description:\"Added browser.performance.time_origin attribute attribute\"}]},\"browser.report.type\":{brief:\"A browser report sent via reporting API..\",type:\"string\",keys:[\"browser.report.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"network-error\",changelog:[{version:\"0.1.0\",prs:[68,127]}]},\"browser.script.invoker\":{brief:\"How a script was called in the browser.\",type:\"string\",keys:[\"browser.script.invoker\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Window.requestAnimationFrame\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"browser.script.invoker_type\":{brief:\"Browser script entry point type.\",type:\"string\",keys:[\"browser.script.invoker_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"event-listener\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"browser.script.source_char_position\":{brief:\"A number representing the script character position of the script.\",type:\"integer\",keys:[\"browser.script.source_char_position\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:678,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"browser.version\":{brief:\"The version of the browser.\",type:\"string\",keys:[\"browser.version\",\"sentry.browser.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"120.0.6099.130\",aliases:[\"sentry.browser.version\"],changelog:[{version:\"0.1.0\",prs:[59,127,139]}]},\"browser.web_vital.cls.report_event\":{brief:\"The event that caused the SDK to report CLS (pagehide or navigation)\",type:\"string\",keys:[\"browser.web_vital.cls.report_event\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"navigation\",deprecation:{reason:\"The JavaScript SDK stopped setting this in v11. With per-navigation web vitals, web-vitals decides when the CLS value is final, so there is no report event to record. No replacement.\"},changelog:[{version:\"0.24.0\",prs:[642],description:\"Deprecated browser.web_vital.cls.report_event, which has no replacement\"},{version:\"0.5.0\",prs:[319],description:\"Added browser.web_vital.cls.report_event attribute\"}]},\"browser.web_vital.cls.source.<key>\":{brief:\"The HTML elements or components responsible for the layout shift. <key> is a numeric index from 1 to N\",type:\"string\",keys:[\"browser.web_vital.cls.source.<key>\",\"cls.source.<key>\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"body > div#app\",aliases:[\"cls.source.<key>\"],changelog:[{version:\"0.5.0\",prs:[234]}]},\"browser.web_vital.cls.value\":{brief:\"The value of the recorded Cumulative Layout Shift (CLS) web vital\",type:\"double\",keys:[\"browser.web_vital.cls.value\",\"cls\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.2361,aliases:[\"cls\"],changelog:[{version:\"0.5.0\",prs:[229],description:\"Added browser.web_vital.cls.value attribute\"}]},\"browser.web_vital.fcp.value\":{brief:\"The time it takes for the browser to render the first piece of meaningful content on the screen\",type:\"double\",keys:[\"browser.web_vital.fcp.value\",\"fcp\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:547.6951,aliases:[\"fcp\"],changelog:[{version:\"0.5.0\",prs:[235]}]},\"browser.web_vital.fp.value\":{brief:\"The time in milliseconds it takes for the browser to render the first pixel on the screen\",type:\"double\",keys:[\"browser.web_vital.fp.value\",\"fp\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:477.1926,aliases:[\"fp\"],changelog:[{version:\"0.5.0\",prs:[235]}]},\"browser.web_vital.inp.interaction_type\":{brief:\"The kind of user interaction INP was reported on\",type:\"string\",keys:[\"browser.web_vital.inp.interaction_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"click\",examples:[\"click\",\"hover\",\"drag\",\"press\"],changelog:[{version:\"0.24.0\",prs:[641],description:\"Added browser.web_vital.inp.interaction_type attribute\"}],additionalContext:[\"One of `click`, `hover`, `drag` or `press`, derived from the DOM event name of the Event Timing entry: pointer, mouse and touch events map to `click`, `mouseover` and similar to `hover`, drag and drop events to `drag`, and keyboard and `input` events to `press`. The same value forms the suffix of the span's `ui.interaction.*` op.\",\"Not to be confused with the `interactionType` of the web-vitals attribution build, which only distinguishes `pointer` and `keyboard`.\",\"Omitted when INP is reported without an interaction to attribute it to, see `browser.web_vital.inp.target`. The op of such a span still falls into `ui.interaction.click` so that it stays within the interaction span family, which makes this attribute, not the op, the way to tell a real click from a value with no interaction.\"]},\"browser.web_vital.inp.target\":{brief:\"The HTML element selector or component name of the element the user interacted with, for the interaction INP was reported on\",type:\"string\",keys:[\"browser.web_vital.inp.target\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"body > div#app > button.submit\",examples:[\"body > div#app > button.submit\",\"SubmitButton\"],changelog:[{version:\"0.24.0\",prs:[641],description:\"Added browser.web_vital.inp.target attribute\"}],additionalContext:[\"Named after `PerformanceEventTiming.target`, the way `browser.web_vital.lcp.element` is named after `LargestContentfulPaint.element`. The value uses the same format as that attribute.\",\"Omitted when INP is reported without an interaction to attribute it to. web-vitals reports such a value for a soft navigation whose interactions all stayed below the Event Timing duration threshold, so there is no element to name. The span is still named and still carries `browser.web_vital.inp.value`.\"]},\"browser.web_vital.inp.value\":{brief:\"The value of the recorded Interaction to Next Paint (INP) web vital\",type:\"double\",keys:[\"browser.web_vital.inp.value\",\"inp\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:200,aliases:[\"inp\"],changelog:[{version:\"0.5.0\",prs:[229],description:\"Added browser.web_vital.inp.value attribute\"}]},\"browser.web_vital.lcp.element\":{brief:\"The HTML element selector or component name for which LCP was reported\",type:\"string\",keys:[\"browser.web_vital.lcp.element\",\"lcp.element\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"body > div#app > div#container > div\",aliases:[\"lcp.element\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"browser.web_vital.lcp.id\":{brief:\"The id of the dom element responsible for the largest contentful paint\",type:\"string\",keys:[\"browser.web_vital.lcp.id\",\"lcp.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"#gero\",aliases:[\"lcp.id\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"browser.web_vital.lcp.load_time\":{brief:\"The time it took for the LCP element to be loaded\",type:\"integer\",keys:[\"browser.web_vital.lcp.load_time\",\"lcp.loadTime\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1402,aliases:[\"lcp.loadTime\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"browser.web_vital.lcp.render_time\":{brief:\"The time it took for the LCP element to be rendered\",type:\"integer\",keys:[\"browser.web_vital.lcp.render_time\",\"lcp.renderTime\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1685,aliases:[\"lcp.renderTime\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"browser.web_vital.lcp.report_event\":{brief:\"The event that caused the SDK to report LCP (pagehide or navigation)\",type:\"string\",keys:[\"browser.web_vital.lcp.report_event\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"pagehide\",deprecation:{reason:\"The JavaScript SDK stopped setting this in v11. With per-navigation web vitals, web-vitals decides when the LCP value is final, so there is no report event to record. No replacement.\"},changelog:[{version:\"0.24.0\",prs:[642],description:\"Deprecated browser.web_vital.lcp.report_event, which has no replacement\"},{version:\"0.5.0\",prs:[319],description:\"Added browser.web_vital.lcp.report_event attribute\"}]},\"browser.web_vital.lcp.size\":{brief:\"The size of the largest contentful paint element\",type:\"integer\",keys:[\"browser.web_vital.lcp.size\",\"lcp.size\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1024,aliases:[\"lcp.size\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"browser.web_vital.lcp.url\":{brief:\"The url of the dom element responsible for the largest contentful paint\",type:\"string\",keys:[\"browser.web_vital.lcp.url\",\"lcp.url\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"https://example.com/static/img.png\",aliases:[\"lcp.url\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"browser.web_vital.lcp.value\":{brief:\"The value of the recorded Largest Contentful Paint (LCP) web vital\",type:\"double\",keys:[\"browser.web_vital.lcp.value\",\"lcp\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2500,aliases:[\"lcp\"],changelog:[{version:\"0.5.0\",prs:[229],description:\"Added browser.web_vital.lcp.value attribute\"}]},\"browser.web_vital.ttfb.request_time\":{brief:\"The time it takes for the server to process the initial request and send the first byte of a response to the user's browser\",type:\"double\",keys:[\"browser.web_vital.ttfb.request_time\",\"ttfb.requestTime\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1554.5814,aliases:[\"ttfb.requestTime\"],changelog:[{version:\"0.5.0\",prs:[235]}]},\"browser.web_vital.ttfb.value\":{brief:\"The value of the recorded Time To First Byte (TTFB) web vital in Milliseconds\",type:\"double\",keys:[\"browser.web_vital.ttfb.value\",\"ttfb\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:194.3322,aliases:[\"ttfb\"],changelog:[{version:\"0.5.0\",prs:[235]}]},\"cache.hit\":{brief:\"If the cache was hit during this span.\",type:\"boolean\",keys:[\"cache.hit\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"cache.item_age\":{brief:\"The age of the cache entry in seconds, measured at read time.\",type:\"integer\",keys:[\"cache.item_age\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:5,examples:[5,3600],changelog:[{version:\"0.23.0\",prs:[637],description:\"Added cache.item_age attribute\"}],additionalContext:[\"Set on reads that return an entry. Absent on a miss, or when the cache does not report a write time.\",\"Clamped to 0. On a shared cache, the writer's clock and the reader's clock can drift far enough to make the age negative.\",\"Can exceed `cache.ttl`. A cache that discards an expired entry on read still reports the age of that entry, with `cache.hit: false`.\"],searchAlias:{name:\"cache.item_age\",type:\"second\"}},\"cache.item_size\":{brief:\"The size of the requested item in the cache. In bytes.\",type:\"integer\",keys:[\"cache.item_size\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:58,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}],searchAlias:{name:\"cache.item_size\",type:\"byte\"}},\"cache.key\":{brief:\"The key of the cache accessed.\",type:\"string[]\",keys:[\"cache.key\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:[\"my-cache-key\",\"my-other-cache-key\"],changelog:[{version:\"0.0.0\"}]},\"cache.operation\":{brief:\"The operation being performed on the cache.\",type:\"string\",keys:[\"cache.operation\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"get\",examples:[\"get\",\"put\",\"remove\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"cache.tags\":{brief:\"The tags attached to the cache entry. Tags group entries so a cache can invalidate them together.\",type:\"string[]\",keys:[\"cache.tags\"],applyScrubbing:{key:\"auto\",reason:\"Applications pick tag values freely and often build them from record identifiers such as a user id.\"},isInOtel:!1,visibility:\"public\",example:[\"blog-posts\",\"post-42\"],examples:[[\"blog-posts\",\"post-42\"],[\"products\"]],changelog:[{version:\"0.23.0\",prs:[637],description:\"Added cache.tags attribute\"}],additionalContext:[\"Cache library examples that support tags: Next.js `cacheTag()`, Symfony `ItemInterface::tag()`, Laravel `Cache::tags()`.\",\"HTTP caches take tags from a response header. Cloudflare reads `Cache-Tag`, Fastly reads `Surrogate-Key`.\",\"Record only the tags the application declared. Leave out implicit tags that the framework adds itself, for example one tag per route.\",\"The tags describe the entry, not the operation. Take them from the entry the cache returned or stored.\"]},\"cache.ttl\":{brief:\"The ttl (maximum lifetime) of the cache in seconds\",type:\"integer\",keys:[\"cache.ttl\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:120,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"cache.write\":{brief:\"If the cache operation resulted in a write to the cache.\",type:\"boolean\",keys:[\"cache.write\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.5.0\"}]},channel:{brief:\"The channel name that is being used.\",type:\"string\",keys:[\"channel\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"mail\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"client.address\":{brief:\"Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\",type:\"string\",keys:[\"client.address\",\"http.client_ip\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",aliases:[\"http.client_ip\"],changelog:[{version:\"0.1.0\",prs:[106,127]},{version:\"0.0.0\"}]},\"client.port\":{brief:\"Client port number.\",type:\"integer\",keys:[\"client.port\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:5432,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"cloudflare.d1.duration\":{brief:\"The duration of a Cloudflare D1 operation.\",type:\"integer\",keys:[\"cloudflare.d1.duration\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:543,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"cloudflare.d1.query_type\":{brief:\"The type of query executed in a Cloudflare D1 operation\",type:\"string\",keys:[\"db.operation.name\",\"cloudflare.d1.query_type\",\"db.operation\",\"redis.command\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"run\",deprecation:{replacement:\"db.operation.name\",status:\"backfill\"},aliases:[\"db.operation.name\",\"db.operation\",\"redis.command\"],changelog:[{version:\"0.19.0\",prs:[531],description:\"Added redis.command as an alias\"},{version:\"0.11.0\",prs:[392],description:\"Added cloudflare.d1.query_type attribute\"}]},\"cloudflare.d1.rows_read\":{brief:\"The number of rows read in a Cloudflare D1 operation.\",type:\"integer\",keys:[\"cloudflare.d1.rows_read\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"cloudflare.d1.rows_written\":{brief:\"The number of rows written in a Cloudflare D1 operation.\",type:\"integer\",keys:[\"cloudflare.d1.rows_written\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"cloudflare.durable_object.query.bindings\":{brief:\"The number of bound parameters passed to the SQL exec call.\",type:\"integer\",keys:[\"cloudflare.durable_object.query.bindings\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2,changelog:[{version:\"0.13.0\",prs:[435],description:\"Added cloudflare.durable_object.query.bindings attribute\"}]},\"cloudflare.durable_object.response.rows_read\":{brief:\"The number of rows read by a Cloudflare Durable Object SQL operation.\",type:\"integer\",keys:[\"cloudflare.durable_object.response.rows_read\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12,changelog:[{version:\"0.13.0\",prs:[435],description:\"Added cloudflare.durable_object.response.rows_read attribute\"}]},\"cloudflare.durable_object.response.rows_written\":{brief:\"The number of rows written by a Cloudflare Durable Object SQL operation.\",type:\"integer\",keys:[\"cloudflare.durable_object.response.rows_written\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,changelog:[{version:\"0.13.0\",prs:[435],description:\"Added cloudflare.durable_object.response.rows_written attribute\"}]},\"cloudflare.r2.bucket\":{brief:\"The name of the Cloudflare R2 bucket binding\",type:\"string\",keys:[\"cloudflare.r2.bucket\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"MY_BUCKET\",changelog:[{version:\"0.11.1\",prs:[413],description:\"Added cloudflare.r2.bucket attribute\"}]},\"cloudflare.r2.operation\":{brief:\"The R2 API operation being performed\",type:\"string\",keys:[\"cloudflare.r2.operation\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"GetObject\",changelog:[{version:\"0.11.1\",prs:[413],description:\"Added cloudflare.r2.operation attribute\"}]},\"cloudflare.r2.request.delimiter\":{brief:\"The delimiter used to group objects in an R2 list operation\",type:\"string\",keys:[\"cloudflare.r2.request.delimiter\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"/\",changelog:[{version:\"0.11.1\",prs:[413],description:\"Added cloudflare.r2.request.delimiter attribute\"}]},\"cloudflare.r2.request.key\":{brief:\"The object key used in the R2 operation\",type:\"string\",keys:[\"cloudflare.r2.request.key\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"my-file.txt\",changelog:[{version:\"0.11.1\",prs:[413],description:\"Added cloudflare.r2.request.key attribute\"}]},\"cloudflare.r2.request.part_number\":{brief:\"The part number in a multipart upload operation\",type:\"integer\",keys:[\"cloudflare.r2.request.part_number\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,changelog:[{version:\"0.11.1\",prs:[413],description:\"Added cloudflare.r2.request.part_number attribute\"}]},\"cloudflare.r2.request.prefix\":{brief:\"The prefix used to filter objects in an R2 list operation\",type:\"string\",keys:[\"cloudflare.r2.request.prefix\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"images/\",changelog:[{version:\"0.11.1\",prs:[413],description:\"Added cloudflare.r2.request.prefix attribute\"}]},\"cloudflare.workflow.attempt\":{brief:\"The current attempt number for a Cloudflare Workflow step\",type:\"integer\",keys:[\"cloudflare.workflow.attempt\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,changelog:[{version:\"0.11.0\",prs:[392],description:\"Added cloudflare.workflow.attempt attribute\"}]},\"cloudflare.workflow.retries.backoff\":{brief:\"The backoff strategy for Cloudflare Workflow step retries\",type:\"string\",keys:[\"cloudflare.workflow.retries.backoff\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"exponential\",changelog:[{version:\"0.11.0\",prs:[392],description:\"Added cloudflare.workflow.retries.backoff attribute\"}]},\"cloudflare.workflow.retries.delay\":{brief:\"The delay between Cloudflare Workflow step retries\",type:\"string\",keys:[\"cloudflare.workflow.retries.delay\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"5 seconds\",changelog:[{version:\"0.11.0\",prs:[392],description:\"Added cloudflare.workflow.retries.delay attribute\"}]},\"cloudflare.workflow.retries.limit\":{brief:\"The maximum number of retries for a Cloudflare Workflow step\",type:\"integer\",keys:[\"cloudflare.workflow.retries.limit\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:3,changelog:[{version:\"0.11.0\",prs:[392],description:\"Added cloudflare.workflow.retries.limit attribute\"}]},\"cloudflare.workflow.timeout\":{brief:\"The timeout duration for a Cloudflare Workflow step\",type:\"string\",keys:[\"cloudflare.workflow.timeout\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1 minute\",changelog:[{version:\"0.11.0\",prs:[392],description:\"Added cloudflare.workflow.timeout attribute\"}]},\"cloud.account.id\":{brief:\"The cloud account ID the resource is assigned to\",type:\"string\",keys:[\"cloud.account.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"123456789012\",changelog:[{version:\"0.7.0\",prs:[364],description:\"Added cloud.account.id attribute\"}]},\"cloud.availability_zone\":{brief:\"Cloud regions often have multiple, isolated locations known as zones to increase availability\",type:\"string\",keys:[\"cloud.availability_zone\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"us-east-1c\",changelog:[{version:\"0.7.0\",prs:[364],description:\"Added cloud.availability_zone attribute\"}]},\"cloud.platform\":{brief:\"The cloud platform in use\",type:\"string\",keys:[\"cloud.platform\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"aws_lambda\",changelog:[{version:\"0.7.0\",prs:[364],description:\"Added cloud.platform attribute\"}]},\"cloud.provider\":{brief:\"Name of the cloud provider\",type:\"string\",keys:[\"cloud.provider\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"aws\",changelog:[{version:\"0.7.0\",prs:[364],description:\"Added cloud.provider attribute\"}]},\"cloud.region\":{brief:\"The geographical region the resource is running\",type:\"string\",keys:[\"cloud.region\",\"aws_region\",\"gcp_region\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"us-east-1\",aliases:[\"aws_region\",\"gcp_region\"],changelog:[{version:\"0.19.0\",prs:[535,537],description:\"Added aws_region and gcp_region as aliases\"},{version:\"0.7.0\",prs:[364],description:\"Added cloud.region attribute\"}]},\"cloud.resource_id\":{brief:\"Cloud provider-specific native identifier of the monitored cloud resource\",type:\"string\",keys:[\"cloud.resource_id\",\"faas.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function\",aliases:[\"faas.id\"],changelog:[{version:\"0.16.0\",prs:[475],description:\"Added faas.id as an alias\"},{version:\"0.11.1\",prs:[414]}],additionalContext:[\"This can be an identifier for a resource in AWS, GCP, or Azure. There may be some overlap in values found here with other attributes. For instance, an AWS lambda ARN may be found here as well as in `aws.lambda.invoked_arn`. OTEL recommends setting them alongside each other.\"]},cls:{brief:\"The value of the recorded Cumulative Layout Shift (CLS) web vital\",type:\"double\",keys:[\"browser.web_vital.cls.value\",\"cls\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.2361,deprecation:{replacement:\"browser.web_vital.cls.value\",reason:\"The CLS web vital is now recorded as a browser.web_vital.cls.value attribute.\",status:\"backfill\"},aliases:[\"browser.web_vital.cls.value\"],changelog:[{version:\"0.5.0\",prs:[229],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},\"cls.source.<key>\":{brief:\"The HTML elements or components responsible for the layout shift. <key> is a numeric index from 1 to N\",type:\"string\",keys:[\"browser.web_vital.cls.source.<key>\",\"cls.source.<key>\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"body > div#app\",deprecation:{replacement:\"browser.web_vital.cls.source.<key>\",reason:\"The CLS source is now recorded as a browser.web_vital.cls.source.<key> attribute.\",status:\"backfill\"},aliases:[\"browser.web_vital.cls.source.<key>\"],changelog:[{version:\"0.5.0\",prs:[234]}]},code:{brief:\"Status code of the RPC returned by the RPC server or generated by the client.\",type:\"string\",keys:[\"rpc.response.status_code\",\"code\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"DEADLINE_EXCEEDED\",examples:[\"DEADLINE_EXCEEDED\"],deprecation:{replacement:\"rpc.response.status_code\",status:\"backfill\"},aliases:[\"rpc.grpc.status_code\",\"rpc.response.status_code\"],changelog:[{version:\"0.19.0\",prs:[533],description:\"Added code attribute\"}]},\"code.filepath\":{brief:\"The source code file name that identifies the code unit as uniquely as possible (preferably an absolute file path).\",type:\"string\",keys:[\"code.file.path\",\"sveltekit.load.node_id\",\"code.filepath\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"/app/myapplication/http/handler/server.py\",deprecation:{replacement:\"code.file.path\",status:\"backfill\"},aliases:[\"code.file.path\",\"sveltekit.load.node_id\"],changelog:[{version:\"0.22.0\",prs:[611],description:\"Added sveltekit.load.node_id as an alias\"},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"code.file.path\":{brief:\"The source code file name that identifies the code unit as uniquely as possible (preferably an absolute file path).\",type:\"string\",keys:[\"code.file.path\",\"sveltekit.load.node_id\",\"code.filepath\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"/app/myapplication/http/handler/server.py\",aliases:[\"code.filepath\",\"sveltekit.load.node_id\"],changelog:[{version:\"0.22.0\",prs:[611],description:\"Added sveltekit.load.node_id as an alias\"},{version:\"0.0.0\"}]},\"code.function\":{brief:\"The method or function name, or equivalent (usually rightmost part of the code unit's name).\",type:\"string\",keys:[\"code.function\",\"code.function.name\",\"django.function_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"server_request\",aliases:[\"code.function.name\",\"django.function_name\"],changelog:[{version:\"0.19.0\",prs:[538],description:\"Added django.function_name as an alias\"},{version:\"0.1.0\",prs:[61,74]},{version:\"0.0.0\"}]},\"code.function.name\":{brief:\"The method or function fully-qualified name without arguments.\",type:\"string\",keys:[\"code.function.name\",\"code.function\",\"django.function_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"server_request\",aliases:[\"code.function\",\"django.function_name\"],changelog:[{version:\"0.19.0\",prs:[538],description:\"Added django.function_name as an alias\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"code.lineno\":{brief:\"The line number in code.filepath best representing the operation. It SHOULD point within the code unit named in code.function\",type:\"integer\",keys:[\"code.line.number\",\"code.lineno\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:42,deprecation:{replacement:\"code.line.number\",status:\"backfill\"},aliases:[\"code.line.number\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61,108]},{version:\"0.0.0\"}]},\"code.line.number\":{brief:\"The line number in code.filepath best representing the operation. It SHOULD point within the code unit named in code.function\",type:\"integer\",keys:[\"code.line.number\",\"code.lineno\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:42,aliases:[\"code.lineno\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"code.namespace\":{brief:\"The 'namespace' within which code.function is defined. Usually the qualified class or module name, such that code.namespace + some separator + code.function form a unique identifier for the code unit.\",type:\"string\",keys:[\"code.namespace\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"http.handler\",changelog:[{version:\"0.1.0\",prs:[61,74]},{version:\"0.0.0\"}]},connectionType:{brief:\"Specifies the type of the current connection (e.g. wifi, ethernet, cellular , etc).\",type:\"string\",keys:[\"network.connection.type\",\"connectionType\",\"device.connection_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"wifi\",deprecation:{replacement:\"network.connection.type\",reason:\"Old namespace-less attribute, to be replaced with network.connection.type for span-first future\",status:\"backfill\"},aliases:[\"network.connection.type\",\"device.connection_type\"],changelog:[{version:\"0.5.0\",prs:[279],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},\"connection.rtt\":{brief:\"Specifies the estimated effective round-trip time of the current connection, in milliseconds.\",type:\"integer\",keys:[\"network.connection.rtt\",\"connection.rtt\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:100,deprecation:{replacement:\"network.connection.rtt\",reason:\"Old attribute name (no official namespace), to be replaced with network.connection.rtt for span-first future\",status:\"backfill\"},aliases:[\"network.connection.rtt\"],changelog:[{version:\"0.5.0\",prs:[279],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},\"culture.calendar\":{brief:\"The calendar system used by the culture.\",type:\"string\",keys:[\"culture.calendar\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"GregorianCalendar\",changelog:[{version:\"0.4.0\",prs:[243]}]},\"culture.display_name\":{brief:\"Human readable name of the culture.\",type:\"string\",keys:[\"culture.display_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"English (United States)\",changelog:[{version:\"0.4.0\",prs:[243]}]},\"culture.is_24_hour_format\":{brief:\"Whether the culture uses 24-hour time format.\",type:\"boolean\",keys:[\"culture.is_24_hour_format\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.4.0\",prs:[243]}]},\"culture.locale\":{brief:\"The locale identifier following RFC 4646.\",type:\"string\",keys:[\"culture.locale\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"en-US\",changelog:[{version:\"0.4.0\",prs:[243]}]},\"culture.timezone\":{brief:\"The timezone of the culture, as a geographic timezone identifier.\",type:\"string\",keys:[\"culture.timezone\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Europe/Vienna\",changelog:[{version:\"0.4.0\",prs:[243]}]},\"db.collection.name\":{brief:\"The name of a collection (table, container) within the database.\",type:\"string\",keys:[\"db.collection.name\",\"db.mongodb.collection\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"users\",aliases:[\"db.mongodb.collection\"],changelog:[{version:\"0.19.0\",prs:[483],description:\"Added db.mongodb.collection as an alias\"},{version:\"0.1.0\",prs:[106,127]},{version:\"0.0.0\"}]},\"db.connection_string\":{brief:\"The connection string used to connect to the database.\",type:\"string\",keys:[\"db.connection_string\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"redis://localhost:6379\",examples:[\"redis://localhost:6379\"],deprecation:{reason:\"This attribute is deprecated. The connection is described by server.address and server.port instead, so the value cannot be copied to a single replacement attribute.\"},changelog:[{version:\"0.21.0\",prs:[581],description:\"Added db.connection_string attribute\"}]},\"db.driver.name\":{brief:\"The name of the driver used for the database connection.\",type:\"string\",keys:[\"db.driver.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"psycopg2\",changelog:[{version:\"0.5.0\",prs:[297],description:\"Added db.driver.name attribute\"}]},\"db.mongodb.collection\":{brief:\"The MongoDB collection being accessed.\",type:\"string\",keys:[\"db.collection.name\",\"db.mongodb.collection\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"users\",deprecation:{replacement:\"db.collection.name\",reason:\"This attribute is being deprecated in favor of db.collection.name, which is the OTel-aligned replacement.\",status:\"backfill\"},aliases:[\"db.collection.name\"],changelog:[{version:\"0.19.0\",prs:[483],description:\"Added db.mongodb.collection attribute, deprecated in favor of db.collection.name\"}]},\"db.name\":{brief:\"The name of the database being accessed.\",type:\"string\",keys:[\"db.namespace\",\"db.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"customers\",deprecation:{replacement:\"db.namespace\",status:\"backfill\"},aliases:[\"db.namespace\"],changelog:[{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"db.namespace\":{brief:\"The name of the database being accessed.\",type:\"string\",keys:[\"db.namespace\",\"db.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"customers\",aliases:[\"db.name\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"db.operation\":{brief:\"The name of the operation being executed.\",type:\"string\",keys:[\"db.operation.name\",\"cloudflare.d1.query_type\",\"db.operation\",\"redis.command\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"SELECT\",deprecation:{replacement:\"db.operation.name\",status:\"normalize\"},aliases:[\"db.operation.name\",\"cloudflare.d1.query_type\",\"redis.command\"],changelog:[{version:\"0.19.0\",prs:[531],description:\"Added redis.command as an alias\"},{version:\"0.4.0\",prs:[199]},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"db.operation.batch.size\":{brief:\"The number of queries included in a batch operation. Operations are only considered batches when they contain two or more operations, and so db.operation.batch.size SHOULD never be 1.\",type:\"integer\",keys:[\"db.operation.batch.size\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:3,changelog:[{version:\"0.11.0\",prs:[407],description:\"Added db.operation.batch.size attribute\"}]},\"db.operation.name\":{brief:\"The name of the operation being executed.\",type:\"string\",keys:[\"db.operation.name\",\"cloudflare.d1.query_type\",\"db.operation\",\"redis.command\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"SELECT\",aliases:[\"db.operation\",\"cloudflare.d1.query_type\",\"redis.command\"],changelog:[{version:\"0.19.0\",prs:[531],description:\"Added redis.command as an alias\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"db.params\":{brief:\"The query bindings for a database request.\",type:\"string\",keys:[\"db.params\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:'[{\"x\": 100}]',examples:['[{\"x\": 100}]'],deprecation:{replacement:\"db.query.parameter.<key>\",reason:\"Instead of adding every binding in the db.params attribute, add them as individual entries with db.query.parameter.<key>.\"},changelog:[{version:\"0.19.0\",prs:[529],description:\"Added db.params attribute\"}]},\"db.query.parameter.<key>\":{brief:\"A query parameter used in db.query.text, with <key> being the parameter name, and the attribute value being a string representation of the parameter value.\",type:\"string\",keys:[\"db.query.parameter.<key>\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",hasDynamicSuffix:!0,example:\"db.query.parameter.foo='123'\",changelog:[{version:\"0.1.0\",prs:[103,127]}]},\"db.query.summary\":{brief:\"A shortened representation of operation(s) in the full query. This attribute must be low-cardinality and should only contain the operation table names.\",type:\"string\",keys:[\"db.query.summary\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"SELECT users\",examples:[\"SELECT users\",\"INSERT products; UPDATE orders\"],changelog:[{version:\"0.19.0\",prs:[505],description:\"Added multiple examples\"},{version:\"0.4.0\",prs:[208]},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"db.query.text\":{brief:\"The database parameterized query being executed. Any parameter values (filters, insertion values, etc) should be replaced with parameter placeholders. If applicable, use `db.query.parameter.<key>` to add the parameter value.\",type:\"string\",keys:[\"db.query.text\",\"db.statement\",\"query\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"SELECT * FROM users WHERE id = $1\",aliases:[\"db.statement\",\"query\"],changelog:[{version:\"0.19.0\",prs:[530],description:\"Added query as an alias\"},{version:\"0.4.0\",prs:[208]},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"db.redis.connection\":{brief:\"The redis connection name.\",type:\"string\",keys:[\"db.redis.connection\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"my-redis-instance\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"db.redis.key\":{brief:\"The key the Redis command is operating on.\",type:\"string\",keys:[\"db.redis.key\",\"redis.key\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"user:2047:city\",aliases:[\"redis.key\"],changelog:[{version:\"0.19.0\",prs:[484],description:\"Added redis.key as an alias\"},{version:\"0.6.0\",prs:[326],description:\"Added db.redis.key attribute\"}]},\"db.redis.parameters\":{brief:\"The array of command parameters given to a redis command.\",type:\"string[]\",keys:[\"db.redis.parameters\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"test\",\"*\"],changelog:[{version:\"0.0.0\"}]},\"db.response.status_code\":{brief:\"Database response status code. The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\",type:\"string\",keys:[\"db.response.status_code\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"ORA-17002\",changelog:[{version:\"0.16.0\",prs:[462],description:\"Added db.response.status_code attribute\"}]},\"db.sql.bindings\":{brief:\"The array of query bindings.\",type:\"string[]\",keys:[\"db.sql.bindings\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"1\",\"foo\"],deprecation:{replacement:\"db.query.parameter.<key>\",reason:\"Instead of adding every binding in the db.sql.bindings attribute, add them as individual entires with db.query.parameter.<key>.\"},changelog:[{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"db.statement\":{brief:\"The database statement being executed.\",type:\"string\",keys:[\"db.query.text\",\"db.statement\",\"query\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"SELECT * FROM users WHERE id = $1\",deprecation:{replacement:\"db.query.text\",reason:\"While this attribute never specifically required parameterization, the replacement, db.query.text, does.\",status:\"normalize\"},aliases:[\"db.query.text\",\"query\"],changelog:[{version:\"0.19.0\",prs:[501],description:\"Improved example, added deprecation reason, and added query as an alias\"},{version:\"0.4.0\",prs:[199]},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"db.stored_procedure.name\":{brief:\"The name of a stored procedure being called.\",type:\"string\",keys:[\"db.stored_procedure.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"GetUserById\",changelog:[{version:\"0.11.0\",prs:[398]}]},\"db.system\":{brief:\"An identifier for the database management system (DBMS) product being used. See [OpenTelemetry docs](https://github.com/open-telemetry/semantic-conventions/blob/main/docs/database/database-spans.md#notes-and-well-known-identifiers-for-dbsystem) for a list of well-known identifiers.\",type:\"string\",keys:[\"db.system.name\",\"db.system\",\"span.system\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"postgresql\",deprecation:{replacement:\"db.system.name\",status:\"backfill\"},aliases:[\"db.system.name\"],changelog:[{version:\"0.4.0\",prs:[199,224]},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}],searchAlias:{name:\"db.system\",deprecatedAliases:[\"span.system\"]}},\"db.system.name\":{brief:\"An identifier for the database management system (DBMS) product being used. See [OpenTelemetry docs](https://github.com/open-telemetry/semantic-conventions/blob/main/docs/database/database-spans.md#notes-and-well-known-identifiers-for-dbsystem) for a list of well-known identifiers.\",type:\"string\",keys:[\"db.system.name\",\"db.system\",\"span.system\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"postgresql\",aliases:[\"db.system\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"db.user\":{brief:\"The database user.\",type:\"string\",keys:[\"db.user\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"fancy_user\",changelog:[{version:\"0.0.0\"}]},deviceMemory:{brief:\"The estimated total memory capacity of the device, only a rough estimation in gigabytes.\",type:\"string\",keys:[\"device.memory.estimated_capacity\",\"deviceMemory\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"8 GB\",deprecation:{replacement:\"device.memory.estimated_capacity\",reason:\"Old namespace-less attribute, to be replaced with device.memory.estimated_capacity for span-first future\",status:\"backfill\"},aliases:[\"device.memory.estimated_capacity\"],changelog:[{version:\"0.5.0\",prs:[281],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},\"device.archs\":{brief:\"The CPU architectures of the device.\",type:\"string[]\",keys:[\"device.archs\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:[\"arm64-v8a\",\"armeabi-v7a\",\"armeabi\"],changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.archs attribute\"}]},\"device.battery_level\":{brief:\"The battery level of the device as a percentage (0-100).\",type:\"double\",keys:[\"device.battery_level\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:100,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.battery_level attribute\"}]},\"device.battery_temperature\":{brief:\"The battery temperature of the device in Celsius.\",type:\"double\",keys:[\"device.battery_temperature\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:25,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.battery_temperature attribute\"}]},\"device.boot_time\":{brief:\"A formatted UTC timestamp when the system was booted.\",type:\"string\",keys:[\"device.boot_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"2018-02-08T12:52:12Z\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.boot_time attribute\"}]},\"device.brand\":{brief:\"The brand of the device.\",type:\"string\",keys:[\"device.brand\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Apple\",changelog:[{version:\"0.1.0\",prs:[116,127]}]},\"device.charging\":{brief:\"Whether the device was charging or not.\",type:\"boolean\",keys:[\"device.charging\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!1,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.charging attribute\"}]},\"device.chipset\":{brief:\"The chipset of the device.\",type:\"string\",keys:[\"device.chipset\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Qualcomm SM8550\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.chipset attribute\"}]},\"device.class\":{brief:\"The classification of the device. For example, `low`, `medium`, or `high`. Typically inferred by Relay - SDKs generally do not need to set this directly.\",type:\"string\",keys:[\"device.class\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"medium\",changelog:[{version:\"0.5.0\",prs:[300],description:\"Added device.class attribute\"}]},\"device.connection_type\":{brief:\"The internet connection type currently being used by the device.\",type:\"string\",keys:[\"network.connection.type\",\"connectionType\",\"device.connection_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"wifi\",deprecation:{replacement:\"network.connection.type\",reason:\"This attribute is being deprecated in favor of network.connection.type\",status:\"backfill\"},aliases:[\"network.connection.type\",\"connectionType\"],changelog:[{version:\"0.5.0\",prs:[303],description:\"Added and deprecated device.connection_type in favor of network.connection.type\"}]},\"device.cpu_description\":{brief:\"A description of the CPU of the device.\",type:\"string\",keys:[\"device.cpu_description\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.cpu_description attribute\"}]},\"device.external_free_storage\":{brief:\"External storage free size in bytes.\",type:\"integer\",keys:[\"device.external_free_storage\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:67108864e3,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.external_free_storage attribute\"}]},\"device.external_storage_size\":{brief:\"External storage total size in bytes.\",type:\"integer\",keys:[\"device.external_storage_size\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:134217728e3,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.external_storage_size attribute\"}]},\"device.family\":{brief:\"The family of the device.\",type:\"string\",keys:[\"device.family\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"iPhone\",changelog:[{version:\"0.1.0\",prs:[116,127]}]},\"device.free_memory\":{brief:\"Free system memory in bytes.\",type:\"integer\",keys:[\"device.free_memory\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2147483648,changelog:[{version:\"0.5.0\",prs:[300],description:\"Added device.free_memory attribute\"}]},\"device.free_storage\":{brief:\"Free device storage in bytes.\",type:\"integer\",keys:[\"device.free_storage\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:107374182400,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.free_storage attribute\"}]},\"device.id\":{brief:\"Unique device identifier.\",type:\"string\",keys:[\"device.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.id attribute\"}]},\"device.locale\":{brief:\"The locale of the device.\",type:\"string\",keys:[\"device.locale\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"en-US\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.locale attribute\"}]},\"device.low_memory\":{brief:\"Whether the device was low on memory.\",type:\"boolean\",keys:[\"device.low_memory\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!1,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.low_memory attribute\"}]},\"device.low_power_mode\":{brief:\"Whether the device is in Low Power Mode.\",type:\"boolean\",keys:[\"device.low_power_mode\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.6.0\",prs:[314],description:\"Added device.low_power_mode attribute\"}]},\"device.manufacturer\":{brief:\"The manufacturer of the device.\",type:\"string\",keys:[\"device.manufacturer\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Google\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.manufacturer attribute\"}]},\"device.memory.estimated_capacity\":{brief:\"The estimated total memory capacity of the device, only a rough estimation in gigabytes. Browsers report estimations in buckets of powers of 2, mostly capped at 8 GB\",type:\"integer\",keys:[\"device.memory.estimated_capacity\",\"deviceMemory\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:8,aliases:[\"deviceMemory\"],changelog:[{version:\"0.5.0\",prs:[281],description:\"Added attribute device.memory.estimated_capacity to be used instead of deviceMemory\"}]},\"device.memory_size\":{brief:\"Total system memory available in bytes.\",type:\"integer\",keys:[\"device.memory_size\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:17179869184,changelog:[{version:\"0.5.0\",prs:[300],description:\"Added device.memory_size attribute\"}]},\"device.model\":{brief:\"The model of the device.\",type:\"string\",keys:[\"device.model\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"iPhone 15 Pro Max\",changelog:[{version:\"0.1.0\",prs:[116,127]}]},\"device.model_id\":{brief:\"An internal hardware revision to identify the device exactly.\",type:\"string\",keys:[\"device.model_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"N861AP\",changelog:[{version:\"0.5.0\",prs:[300],description:\"Added device.model_id attribute\"}]},\"device.name\":{brief:\"The user-assigned name of the mobile device.\",type:\"string\",keys:[\"device.name\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"localhost\",changelog:[{version:\"0.24.0\",prs:[647],description:\"Limit brief to mobile attributes and remove server_name alias\"},{version:\"0.21.0\",prs:[602],description:\"Added server_name as an alias\"},{version:\"0.5.0\",prs:[303],description:\"Added device.name attribute\"}]},\"device.online\":{brief:\"Whether the device was online or not.\",type:\"boolean\",keys:[\"device.online\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.online attribute\"}]},\"device.orientation\":{brief:'The orientation of the device, either \"portrait\" or \"landscape\".',type:\"string\",keys:[\"device.orientation\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"portrait\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.orientation attribute\"}]},\"device.processor_count\":{brief:'Number of \"logical processors\".',type:\"integer\",keys:[\"device.processor_count\",\"hardwareConcurrency\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:8,aliases:[\"hardwareConcurrency\"],changelog:[{version:\"0.5.0\",prs:[300],description:\"Added and deprecated attribute device.processor_count in favor of device.cpu.logical_core_count\"}]},\"device.processor_frequency\":{brief:\"Processor frequency in MHz.\",type:\"double\",keys:[\"device.processor_frequency\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2400,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.processor_frequency attribute\"}]},\"device.screen_density\":{brief:\"The screen density of the device.\",type:\"double\",keys:[\"device.screen_density\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2.625,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.screen_density attribute\"}]},\"device.screen_dpi\":{brief:\"The screen density in dots-per-inch (DPI) of the device.\",type:\"integer\",keys:[\"device.screen_dpi\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:420,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.screen_dpi attribute\"}]},\"device.screen_height_pixels\":{brief:\"The height of the device screen in pixels.\",type:\"integer\",keys:[\"device.screen_height_pixels\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2400,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.screen_height_pixels attribute\"}]},\"device.screen_width_pixels\":{brief:\"The width of the device screen in pixels.\",type:\"integer\",keys:[\"device.screen_width_pixels\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1080,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.screen_width_pixels attribute\"}]},\"device.simulator\":{brief:\"Whether the device is a simulator or an actual device.\",type:\"boolean\",keys:[\"device.simulator\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!1,changelog:[{version:\"0.5.0\",prs:[300],description:\"Added device.simulator attribute\"}]},\"device.storage_size\":{brief:\"Total device storage in bytes.\",type:\"integer\",keys:[\"device.storage_size\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:274877906944,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.storage_size attribute\"}]},\"device.thermal_state\":{brief:\"The thermal state of the device. Based on Apple's `ProcessInfo.ThermalState` enum.\",type:\"string\",keys:[\"device.thermal_state\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"nominal\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.thermal_state attribute\"}]},\"device.timezone\":{brief:\"The timezone of the device.\",type:\"string\",keys:[\"device.timezone\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Europe/Vienna\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.timezone attribute\"}]},\"device.usable_memory\":{brief:\"Memory usable for the app in bytes.\",type:\"integer\",keys:[\"device.usable_memory\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2147483648,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.usable_memory attribute\"}]},dist:{brief:\"The sentry dist.\",type:\"string\",keys:[\"sentry.dist\",\"dist\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"1.0\",deprecation:{replacement:\"sentry.dist\",reason:\"This attribute is being deprecated in favor of sentry.dist.\",status:\"backfill\"},aliases:[\"sentry.dist\"],changelog:[{version:\"0.16.0\",prs:[489],description:\"Added dist attribute\"}]},\"django.function_name\":{brief:\"The fully qualified name of a function used in a Django context.\",type:\"string\",keys:[\"code.function.name\",\"code.function\",\"django.function_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"django.contrib.sessions.middleware.SessionMiddleware\",examples:[\"django.contrib.sessions.middleware.SessionMiddleware\"],deprecation:{replacement:\"code.function.name\",reason:\"This attribute is being deprecated in favor of code.function.name, which is the framework-agnostic replacement.\",status:\"backfill\"},aliases:[\"code.function.name\",\"code.function\"],changelog:[{version:\"0.19.0\",prs:[538],description:\"Added django.function_name attribute\"}]},\"django.middleware_name\":{brief:\"The name of the Django middleware.\",type:\"string\",keys:[\"middleware.name\",\"django.middleware_name\",\"litestar.middleware_name\",\"starlette.middleware_name\",\"starlite.middleware_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"AuthenticationMiddleware\",examples:[\"AuthenticationMiddleware\"],deprecation:{replacement:\"middleware.name\",reason:\"This attribute is being deprecated in favor of middleware.name, which is the framework-agnostic replacement.\",status:\"backfill\"},aliases:[\"middleware.name\"],changelog:[{version:\"0.19.0\",prs:[520],description:\"Added django.middleware_name attribute\"}]},effectiveConnectionType:{brief:\"Specifies the estimated effective type of the current connection (e.g. slow-2g, 2g, 3g, 4g).\",type:\"string\",keys:[\"network.connection.effective_type\",\"effectiveConnectionType\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"4g\",deprecation:{replacement:\"network.connection.effective_type\",reason:\"Old namespace-less attribute, to be replaced with network.connection.effective_type for span-first future\",status:\"backfill\"},aliases:[\"network.connection.effective_type\"],changelog:[{version:\"0.5.0\",prs:[279],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},environment:{brief:\"The sentry environment.\",type:\"string\",keys:[\"sentry.environment\",\"environment\",\"resource.deployment.environment\",\"resource.deployment.environment.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"production\",deprecation:{replacement:\"sentry.environment\",status:\"normalize\"},aliases:[\"sentry.environment\"],changelog:[{version:\"0.19.0\",prs:[427],description:\"Configured normalization\"},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"error.type\":{brief:\"Describes a class of error the operation ended with.\",type:\"string\",keys:[\"error.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"timeout\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"event.id\":{brief:\"The unique identifier for this event (log record)\",type:\"integer\",keys:[\"event.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234567890,changelog:[{version:\"0.1.0\",prs:[101]}]},\"event.name\":{brief:\"The name that uniquely identifies this event (log record)\",type:\"string\",keys:[\"event.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Process Payload\",changelog:[{version:\"0.1.0\",prs:[101,127]}]},\"exception.escaped\":{brief:\"SHOULD be set to true if the exception event is recorded at a point where it is known that the exception is escaping the scope of the span.\",type:\"boolean\",keys:[\"exception.escaped\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"exception.message\":{brief:\"The error message.\",type:\"string\",keys:[\"exception.message\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"ENOENT: no such file or directory\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"exception.stacktrace\":{brief:\"A stacktrace as a string in the natural representation for the language runtime. The representation is to be determined and documented by each language SIG.\",type:\"string\",keys:[\"exception.stacktrace\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:`Exception in thread \"main\" java.lang.RuntimeException: Test exception\n at com.example.GenerateTrace.methodB(GenerateTrace.java:13)\n at com.example.GenerateTrace.methodA(GenerateTrace.java:9)\n at com.example.GenerateTrace.main(GenerateTrace.java:5)`,changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"exception.type\":{brief:\"The type of the exception (its fully-qualified class name, if applicable). The dynamic type of the exception should be preferred over the static type in languages that support it.\",type:\"string\",keys:[\"exception.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"OSError\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"faas.coldstart\":{brief:\"A boolean that is true if the serverless function is executed for the first time (aka cold-start).\",type:\"boolean\",keys:[\"faas.coldstart\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"faas.cron\":{brief:\"A string containing the schedule period as Cron Expression.\",type:\"string\",keys:[\"faas.cron\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"0/5 * * * ? *\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"faas.duration_in_ms\":{brief:\"The duration a function took to run, in milliseconds.\",type:\"integer\",keys:[\"faas.duration_in_ms\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:120,changelog:[{version:\"0.11.0\",prs:[403]}]},\"faas.entry_point\":{brief:\"The code that's run when the cloud provider invokes your function.\",type:\"string\",keys:[\"faas.entry_point\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"my_main_function\",changelog:[{version:\"0.11.0\",prs:[403,415]}]},\"faas.execution\":{brief:\"The execution ID of the current function execution.\",type:\"string\",keys:[\"faas.invocation_id\",\"aws.lambda.aws_request_id\",\"faas.execution\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"af9d5aa4-a685-4c5f-a22b-444f80b3cc28\",deprecation:{replacement:\"faas.invocation_id\",reason:\"This attribute is being deprecated in favor of faas.invocation_id, which is the OTel-aligned replacement.\",status:\"backfill\"},aliases:[\"faas.invocation_id\",\"aws.lambda.aws_request_id\"],changelog:[{version:\"0.16.0\",prs:[473],description:\"Added faas.execution attribute, deprecated in favor of faas.invocation_id\"}]},\"faas.id\":{brief:\"The unique ID of the single function that this runtime instance executes.\",type:\"string\",keys:[\"cloud.resource_id\",\"faas.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function\",deprecation:{replacement:\"cloud.resource_id\",reason:\"This attribute is being deprecated in favor of cloud.resource_id, which is the OTel-aligned replacement (renamed in OTel semantic conventions v1.19.0).\",status:\"backfill\"},aliases:[\"cloud.resource_id\"],changelog:[{version:\"0.16.0\",prs:[475],description:\"Added faas.id attribute, deprecated in favor of cloud.resource_id\"}]},\"faas.identity\":{brief:\"The Service Account (GCP), IAM Execution Role (AWS), or Managed Identity (Azure) used by the serverless function when interacting with other cloud services\",type:\"string\",keys:[\"faas.identity\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"name@project.iam.gserviceaccount.com (GCP), arn:aws:iam::123456789012:role/role-name (AWS), 00000000-0000-0000-0000-000000000000 (Azure)\",changelog:[{version:\"0.11.0\",prs:[403]}]},\"faas.invocation_id\":{brief:\"The invocation ID of the current function invocation.\",type:\"string\",keys:[\"faas.invocation_id\",\"aws.lambda.aws_request_id\",\"faas.execution\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"af9d5aa4-a685-4c5f-a22b-444f80b3cc28\",aliases:[\"aws.lambda.aws_request_id\",\"faas.execution\"],changelog:[{version:\"0.16.0\",prs:[473],description:\"Added faas.execution as an alias\"},{version:\"0.11.1\",prs:[414,424]}]},\"faas.invoked_name\":{brief:\"The name of the invoked function.\",type:\"string\",keys:[\"faas.invoked_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"my-function\",changelog:[{version:\"0.16.0\",prs:[481],description:\"Added faas.invoked_name attribute\"}]},\"faas.invoked_provider\":{brief:\"The cloud provider of the invoked function.\",type:\"string\",keys:[\"faas.invoked_provider\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"aws\",changelog:[{version:\"0.16.0\",prs:[481],description:\"Added faas.invoked_provider attribute\"}]},\"faas.invoked_region\":{brief:\"The cloud region of the invoked function.\",type:\"string\",keys:[\"faas.invoked_region\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"eu-central-1\",changelog:[{version:\"0.16.0\",prs:[481],description:\"Added faas.invoked_region attribute\"}]},\"faas.name\":{brief:\"The name of the serverless function\",type:\"string\",keys:[\"faas.name\",\"aws.lambda.function_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"my_function\",aliases:[\"aws.lambda.function_name\"],changelog:[{version:\"0.11.0\",prs:[403,415]}]},\"faas.time\":{brief:\"A string containing the function invocation time in the ISO 8601 format expressed in UTC.\",type:\"string\",keys:[\"faas.time\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"2020-01-23T13:47:06Z\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"faas.trigger\":{brief:\"Type of the trigger which caused this function invocation.\",type:\"string\",keys:[\"faas.trigger\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"timer\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"faas.version\":{brief:\"The version of the function that was invoked\",type:\"string\",keys:[\"faas.version\",\"aws.lambda.function_version\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"$LATEST\",aliases:[\"aws.lambda.function_version\"],changelog:[{version:\"0.11.1\",prs:[414,424]}]},fcp:{brief:\"The time it takes for the browser to render the first piece of meaningful content on the screen\",type:\"double\",keys:[\"browser.web_vital.fcp.value\",\"fcp\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:547.6951,deprecation:{replacement:\"browser.web_vital.fcp.value\",reason:\"This attribute is being deprecated in favor of browser.web_vital.fcp.value\",status:\"backfill\"},aliases:[\"browser.web_vital.fcp.value\"],changelog:[{version:\"0.5.0\",prs:[235]}]},\"file.path\":{brief:\"Path to the file.\",type:\"string\",keys:[\"file.path\"],applyScrubbing:{key:\"auto\",reason:\"File paths can contain end-user paths (e.g. from stack traces) that may be sensitive.\"},isInOtel:!0,visibility:\"public\",example:\"/home/user/example.txt\",changelog:[{version:\"0.17.0\",prs:[458],description:\"Added file.path attribute\"}]},\"file.size\":{brief:\"File size in bytes.\",type:\"integer\",keys:[\"file.size\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:1024,changelog:[{version:\"0.17.0\",prs:[458],description:\"Added file.size attribute\"}]},\"flag.evaluation.<key>\":{brief:\"An instance of a feature flag evaluation. The value of this attribute is the boolean representing the evaluation result. The <key> suffix is the name of the feature flag.\",type:\"boolean\",keys:[\"flag.evaluation.<key>\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"flag.evaluation.is_new_ui=true\",changelog:[{version:\"0.1.0\",prs:[103]}]},fp:{brief:\"The time it takes for the browser to render the first pixel on the screen\",type:\"double\",keys:[\"browser.web_vital.fp.value\",\"fp\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:477.1926,deprecation:{replacement:\"browser.web_vital.fp.value\",reason:\"This attribute is being deprecated in favor of browser.web_vital.fp.value\",status:\"backfill\"},aliases:[\"browser.web_vital.fp.value\"],changelog:[{version:\"0.5.0\",prs:[235]}]},\"frames.delay\":{brief:\"The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/).\",type:\"integer\",keys:[\"app.vitals.frames.delay.value\",\"frames.delay\",\"mobile.frames_delay\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:5,deprecation:{replacement:\"app.vitals.frames.delay.value\",reason:\"Replaced by app.vitals.frames.delay.value to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.frames.delay.value\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Deprecated in favor of app.vitals.frames.delay.value\"},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}],searchAlias:{name:\"mobile.frames_delay\",type:\"second\"}},\"frames.frozen\":{brief:\"The number of frozen frames rendered during the lifetime of the span.\",type:\"integer\",keys:[\"app.vitals.frames.frozen.count\",\"frames.frozen\",\"mobile.frozen_frames\",\"sentry.frames.frozen\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:3,deprecation:{replacement:\"app.vitals.frames.frozen.count\",reason:\"Replaced by app.vitals.frames.frozen.count to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.frames.frozen.count\",\"sentry.frames.frozen\"],changelog:[{version:\"0.19.0\",prs:[500],description:\"Added sentry.frames.frozen as an alias\"},{version:\"0.5.0\",prs:[313],description:\"Deprecated in favor of app.vitals.frames.frozen.count\"},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}],searchAlias:{name:\"mobile.frozen_frames\"}},frames_frozen_rate:{brief:\"The rate of frozen frames, or `app.vitals.frames.frozen.count` divided by `app.vitals.frames.total.count`. This is computed by Relay.\",type:\"double\",keys:[\"app.vitals.frames.frozen.rate\",\"frames_frozen_rate\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"app.vitals.frames.frozen.rate\",reason:\"Replaced by app.vitals.frames.frozen.rate to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.frames.frozen.rate\"],changelog:[{version:\"0.19.0\",prs:[493],description:\"Deprecated in favor of app.vitals.frames.frozen.rate\"},{version:\"0.7.0\",prs:[362],description:\"Added frames_frozen_rate attribute\"}]},\"frames.slow\":{brief:\"The number of slow frames rendered during the lifetime of the span.\",type:\"integer\",keys:[\"app.vitals.frames.slow.count\",\"frames.slow\",\"mobile.slow_frames\",\"sentry.frames.slow\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,deprecation:{replacement:\"app.vitals.frames.slow.count\",reason:\"Replaced by app.vitals.frames.slow.count to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.frames.slow.count\",\"sentry.frames.slow\"],changelog:[{version:\"0.19.0\",prs:[500],description:\"Added sentry.frames.slow as an alias\"},{version:\"0.5.0\",prs:[313],description:\"Deprecated in favor of app.vitals.frames.slow.count\"},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}],searchAlias:{name:\"mobile.slow_frames\"}},frames_slow_rate:{brief:\"The rate of slow frames, or `app.vitals.frames.slow.count` divided by `app.vitals.frames.total.count`. This is computed by Relay.\",type:\"double\",keys:[\"app.vitals.frames.slow.rate\",\"frames_slow_rate\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"app.vitals.frames.slow.rate\",reason:\"Replaced by app.vitals.frames.slow.rate to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.frames.slow.rate\"],changelog:[{version:\"0.19.0\",prs:[493],description:\"Deprecated in favor of app.vitals.frames.slow.rate\"},{version:\"0.7.0\",prs:[362],description:\"Added frames_slow_rate attribute\"}]},\"frames.total\":{brief:\"The number of total frames rendered during the lifetime of the span.\",type:\"integer\",keys:[\"app.vitals.frames.total.count\",\"frames.total\",\"mobile.total_frames\",\"sentry.frames.total\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:60,deprecation:{replacement:\"app.vitals.frames.total.count\",reason:\"Replaced by app.vitals.frames.total.count to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.frames.total.count\",\"sentry.frames.total\"],changelog:[{version:\"0.19.0\",prs:[500],description:\"Added sentry.frames.total as an alias\"},{version:\"0.5.0\",prs:[313],description:\"Deprecated in favor of app.vitals.frames.total.count\"},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}],searchAlias:{name:\"mobile.total_frames\"}},fs_error:{brief:\"The error message of a file system error.\",type:\"string\",keys:[\"fs_error\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"ENOENT: no such file or directory\",deprecation:{replacement:\"error.type\",reason:\"This attribute is not part of the OpenTelemetry specification and error.type fits much better. The value changes from the full error message to the syscall error code, so the old value cannot be copied over.\"},changelog:[{version:\"0.23.0\",prs:[638],description:\"Remove unnecessary transformation and change deprecation status to null.\"},{version:\"0.22.0\",prs:[589],description:\"Transform fs_error into error.type\"},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"gcp.function.context.event_id\":{brief:\"The event ID from the legacy GCP Cloud Function context (1st gen)\",type:\"string\",keys:[\"gcp.function.context.event_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1234567890\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.event_id attribute\"}]},\"gcp.function.context.event_type\":{brief:\"The type of the GCP Cloud Function event\",type:\"string\",keys:[\"gcp.function.context.event_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"google.pubsub.topic.publish\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.event_type attribute\"}]},\"gcp.function.context.id\":{brief:\"The unique event ID from the GCP CloudEvents context (2nd gen Cloud Functions)\",type:\"string\",keys:[\"gcp.function.context.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1234567890\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.id attribute\"}]},\"gcp.function.context.resource\":{brief:\"The resource that triggered the GCP Cloud Function event\",type:\"string\",keys:[\"gcp.function.context.resource\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"projects/my-project/topics/my-topic\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.resource attribute\"}]},\"gcp.function.context.source\":{brief:\"The source of the GCP Cloud Function event\",type:\"string\",keys:[\"gcp.function.context.source\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"//pubsub.googleapis.com/projects/my-project/topics/my-topic\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.source attribute\"}]},\"gcp.function.context.specversion\":{brief:\"The CloudEvents specification version of the GCP Cloud Function event\",type:\"string\",keys:[\"gcp.function.context.specversion\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1.0\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.specversion attribute\"}]},\"gcp.function.context.time\":{brief:\"The timestamp of the GCP Cloud Function event\",type:\"string\",keys:[\"gcp.function.context.time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"2024-01-01T00:00:00.000Z\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.time attribute\"}]},\"gcp.function.context.timestamp\":{brief:\"The legacy timestamp of the GCP Cloud Function event\",type:\"string\",keys:[\"gcp.function.context.timestamp\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"2024-01-01T00:00:00.000Z\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.timestamp attribute\"}]},\"gcp.function.context.type\":{brief:\"The type of the GCP Cloud Function event context\",type:\"string\",keys:[\"gcp.function.context.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"cloud_functions.context\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.type attribute\"}]},\"gcp.project.id\":{brief:\"The ID of the project in GCP that this resource is associated with\",type:\"string\",keys:[\"gcp.project.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"my-project-123\",changelog:[{version:\"0.11.0\",prs:[403]}]},gcp_region:{brief:\"The geographical region the GCP resource is running\",type:\"string\",keys:[\"cloud.region\",\"aws_region\",\"gcp_region\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"us-east-1\",examples:[\"us-east-1\"],deprecation:{replacement:\"cloud.region\",status:\"backfill\"},aliases:[\"cloud.region\",\"aws_region\"],changelog:[{version:\"0.19.0\",prs:[535],description:\"Added gcp_region attribute\"}]},\"gen_ai.agent.name\":{brief:\"The name of the agent being used.\",type:\"string\",keys:[\"gen_ai.agent.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"ResearchAssistant\",changelog:[{version:\"0.1.0\",prs:[62,127]}]},\"gen_ai.context.utilization\":{brief:\"The fraction of the model context window utilized by this generation.\",type:\"double\",keys:[\"gen_ai.context.utilization\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.75,changelog:[{version:\"0.5.0\",prs:[315],description:\"Added gen_ai.context.utilization attribute\"}]},\"gen_ai.context.window_size\":{brief:\"The maximum context window size supported by the model for this generation.\",type:\"integer\",keys:[\"gen_ai.context.window_size\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:128e3,changelog:[{version:\"0.5.0\",prs:[315],description:\"Added gen_ai.context.window_size attribute\"}]},\"gen_ai.conversation.id\":{brief:\"The unique identifier for a conversation (session, thread), used to store and correlate messages within this conversation.\",type:\"string\",keys:[\"gen_ai.conversation.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"conv_5j66UpCpwteGg4YSxUnt7lPY\",changelog:[{version:\"0.4.0\",prs:[250]}]},\"gen_ai.cost.cache_creation.input_tokens\":{brief:\"The cost of input tokens written to cache in USD.\",type:\"double\",keys:[\"gen_ai.cost.cache_creation.input_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12.34,changelog:[{version:\"0.16.0\",description:\"Added gen_ai.cost.cache_creation.input_tokens attribute\"}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to calculate total cost, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"Despite the name 'cost.cache_creation.input_tokens', this value is cost in USD, not a token count. For token counts, use gen_ai.usage.cache_creation.input_tokens.\",\"This is a subset of gen_ai.cost.input_tokens, not an independent cost. Do not sum this with gen_ai.cost.input_tokens \\u2014 it is already included.\"]},\"gen_ai.cost.cache_read.input_tokens\":{brief:\"The cost of cached input tokens in USD.\",type:\"double\",keys:[\"gen_ai.cost.cache_read.input_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12.34,changelog:[{version:\"0.16.0\",description:\"Added gen_ai.cost.cache_read.input_tokens attribute\"}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to calculate total cost, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"Despite the name 'cost.cache_read.input_tokens', this value is cost in USD, not a token count. For token counts, use gen_ai.usage.cache_read.input_tokens.\",\"This is a subset of gen_ai.cost.input_tokens, not an independent cost. Do not sum this with gen_ai.cost.input_tokens \\u2014 it is already included.\"]},\"gen_ai.cost.input_tokens\":{brief:\"The total cost of all input tokens in USD (includes cached and cache creation tokens).\",type:\"double\",keys:[\"gen_ai.cost.input_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:123.45,changelog:[{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[112]}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to calculate total cost, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"Despite the name 'cost.input_tokens', this value is cost in USD, not a token count. For token counts, use gen_ai.usage.input_tokens.\",\"This is the total cost of all input tokens, including cached and cache creation tokens at their respective rates. For the cached portion, see gen_ai.cost.cache_read.input_tokens. For the cache creation portion, see gen_ai.cost.cache_creation.input_tokens.\"]},\"gen_ai.cost.output_tokens\":{brief:\"The total cost of all output tokens in USD (includes reasoning tokens).\",type:\"double\",keys:[\"gen_ai.cost.output_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:123.45,changelog:[{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[112]}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to calculate total cost, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"Despite the name 'cost.output_tokens', this value is cost in USD, not a token count. For token counts, use gen_ai.usage.output_tokens.\",\"This is the total cost of all output tokens, including reasoning tokens at their respective rate. For the reasoning portion, see gen_ai.cost.reasoning.output_tokens.\"]},\"gen_ai.cost.reasoning.output_tokens\":{brief:\"The cost of reasoning output tokens in USD.\",type:\"double\",keys:[\"gen_ai.cost.reasoning.output_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12.34,changelog:[{version:\"0.16.0\",description:\"Added gen_ai.cost.reasoning.output_tokens attribute\"}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to calculate total cost, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"Despite the name 'cost.reasoning.output_tokens', this value is cost in USD, not a token count. For token counts, use gen_ai.usage.reasoning.output_tokens.\",\"This is a subset of gen_ai.cost.output_tokens, not an independent cost. Do not sum this with gen_ai.cost.output_tokens \\u2014 it is already included.\"]},\"gen_ai.cost.total_tokens\":{brief:\"The total cost for the tokens used.\",type:\"double\",keys:[\"gen_ai.cost.total_tokens\",\"ai.total_cost\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12.34,aliases:[\"ai.total_cost\"],changelog:[{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.5.0\",prs:[264]},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[126]}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to calculate total cost, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"Despite the name 'cost.total_tokens', this value is cost in USD, not a token count. For token counts, use gen_ai.usage.total_tokens.\"]},\"gen_ai.embeddings.input\":{brief:\"The input to the embeddings model.\",type:\"string\",keys:[\"gen_ai.embeddings.input\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"What's the weather in Paris?\",changelog:[{version:\"0.3.1\",prs:[195]}]},\"gen_ai.function_id\":{brief:\"Framework-specific tracing label for the execution of a function or other unit of execution in a generative AI system.\",type:\"string\",keys:[\"gen_ai.function_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"my-awesome-function\",changelog:[{version:\"0.5.0\",prs:[308],description:\"Added gen_ai.function_id attribute\"}]},\"gen_ai.input.messages\":{brief:'The messages passed to the model. It has to be a stringified version of an array of objects. The `role` attribute of each object must be `\"user\"`, `\"assistant\"`, `\"tool\"`, or `\"system\"`. For messages of the role `\"tool\"`, the `content` can be a string or an arbitrary object with information about the tool call. For other messages the `content` can be either a string or a list of objects in the format `{type: \"text\", text:\"...\"}`. For `gen_ai.decide` operations, the array holds one object `{type: \"evaluation\", state: ..., questions: {...}}` with the evaluated state and the questions keyed by name, as the caller passed them.',type:\"string\",keys:[\"gen_ai.input.messages\",\"ai.input_messages\",\"ai.prompt\",\"ai.prompt.messages\",\"ai.texts\",\"gen_ai.prompt\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:'[{\"role\": \"user\", \"parts\": [{\"type\": \"text\", \"content\": \"Weather in Paris?\"}]}, {\"role\": \"assistant\", \"parts\": [{\"type\": \"tool_call\", \"id\": \"call_VSPygqKTWdrhaFErNvMV18Yl\", \"name\": \"get_weather\", \"arguments\": {\"location\": \"Paris\"}}]}, {\"role\": \"tool\", \"parts\": [{\"type\": \"tool_call_response\", \"id\": \"call_VSPygqKTWdrhaFErNvMV18Yl\", \"result\": \"rainy, 57\\xB0F\"}]}]',aliases:[\"ai.texts\",\"ai.prompt.messages\",\"gen_ai.prompt\",\"ai.prompt\"],changelog:[{version:\"0.26.0\",prs:[650],description:\"Describe the evaluation message shape for gen_ai.evaluate\"},{version:\"0.21.0\",prs:[583],description:\"Added ai.prompt as an alias\"},{version:\"0.5.0\",prs:[264]},{version:\"0.4.0\",prs:[221]}]},\"gen_ai.memory.query.text\":{brief:\"The search query used to retrieve memories. Only applicable to 'search_memory'. Opt-in: instrumentations SHOULD NOT capture this by default and SHOULD gate it behind explicit user opt-in, as it may contain sensitive information.\",type:\"string\",keys:[\"gen_ai.memory.query.text\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"user dietary preferences\",examples:[\"user dietary preferences\",\"past flight bookings\"],changelog:[{version:\"0.27.0\",prs:[653],description:\"Added gen_ai.memory.query.text attribute\"}]},\"gen_ai.memory.records\":{brief:\"The memory records stored or retrieved in a memory operation. Stringified JSON array; each element follows the OTel MemoryRecord schema: {content (required), id, metadata, score}. Opt-in: instrumentations SHOULD NOT capture this by default and SHOULD gate it behind explicit user opt-in, as it may contain sensitive information including user/PII data.\",type:\"string\",keys:[\"gen_ai.memory.records\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:'[{\"content\": \"User prefers dark mode\", \"id\": \"mem_123\", \"score\": 0.95}, {\"content\": {\"preference\": \"vegetarian meals\", \"confidence\": 0.9}, \"metadata\": {\"source\": \"profile\"}}]',examples:['[{\"content\": \"User prefers dark mode\", \"id\": \"mem_123\", \"score\": 0.95}, {\"content\": {\"preference\": \"vegetarian meals\", \"confidence\": 0.9}, \"metadata\": {\"source\": \"profile\"}}]'],changelog:[{version:\"0.27.0\",prs:[653],description:\"Added gen_ai.memory.records attribute\"}]},\"gen_ai.memory.record.count\":{brief:\"The number of memory records relevant to the operation. For 'search_memory' this is the number returned; for 'create_memory', 'update_memory', 'upsert_memory' and 'delete_memory' it is the number the operation attempted to create, modify, create-or-update, or delete respectively.\",type:\"integer\",keys:[\"gen_ai.memory.record.count\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:3,examples:[3],changelog:[{version:\"0.27.0\",prs:[653],description:\"Added gen_ai.memory.record.count attribute\"}]},\"gen_ai.memory.record.id\":{brief:\"The unique identifier of the memory record. Set when the operation applies to a specific memory record. For 'delete_memory', its absence may indicate the operation intends to delete all memory records in the store.\",type:\"string\",keys:[\"gen_ai.memory.record.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"mem_5j66UpCpwteGg4YSxUnt7lPY\",examples:[\"mem_5j66UpCpwteGg4YSxUnt7lPY\"],changelog:[{version:\"0.27.0\",prs:[653],description:\"Added gen_ai.memory.record.id attribute\"}]},\"gen_ai.memory.store.id\":{brief:\"The unique identifier of the memory store the operation targets. What this maps to is implementation-specific (e.g. a collection, namespace, or vector index) and SHOULD be documented per integration.\",type:\"string\",keys:[\"gen_ai.memory.store.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"ms_abc123\",examples:[\"ms_abc123\",\"user-preferences-store\",\"seer-knowledge\"],changelog:[{version:\"0.27.0\",prs:[653],description:\"Added gen_ai.memory.store.id attribute\"}]},\"gen_ai.operation.name\":{brief:\"The name of the operation being performed.\",type:\"string\",keys:[\"gen_ai.operation.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"chat\",changelog:[{version:\"0.27.0\",prs:[653,680],description:\"Added memory operation values, 'evaluate', and 'decide' to the well-known values; deprecated 'evaluate' in favor of 'decide'\"},{version:\"0.4.0\",prs:[225]},{version:\"0.1.0\",prs:[62,127]}]},\"gen_ai.operation.type\":{brief:\"The type of AI operation. Added during ingestion based on span.op and gen_ai.operation.type. Used to filter and aggregate data in the UI\",type:\"string\",keys:[\"gen_ai.operation.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"tool\",changelog:[{version:\"0.27.0\",prs:[653],description:\"Added 'memory' value\"},{version:\"0.4.0\",prs:[257]},{version:\"0.1.0\",prs:[113,127]}]},\"gen_ai.output.messages\":{brief:'The model\\'s response messages. It has to be a stringified version of an array of message objects, which can include text responses and tool calls. For `gen_ai.decide` operations, the array holds one object `{type: \"evaluation\", answers: {...}}` with the answers keyed by question name, as the provider returned them.',type:\"string\",keys:[\"gen_ai.output.messages\",\"ai.response.text\",\"ai.response.toolCalls\",\"ai.responses\",\"ai.tool_calls\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:'[{\"role\": \"assistant\", \"parts\": [{\"type\": \"text\", \"content\": \"The weather in Paris is currently rainy with a temperature of 57\\xB0F.\"}], \"finish_reason\": \"stop\"}]',aliases:[\"ai.response.toolCalls\",\"ai.response.text\"],changelog:[{version:\"0.26.0\",prs:[650],description:\"Describe the evaluation message shape for gen_ai.evaluate\"},{version:\"0.4.0\",prs:[221]}]},\"gen_ai.pipeline.name\":{brief:\"Name of the AI pipeline or chain being executed.\",type:\"string\",keys:[\"gen_ai.pipeline.name\",\"ai.pipeline.name\",\"langchain.chain.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Autofix Pipeline\",aliases:[\"ai.pipeline.name\",\"langchain.chain.name\"],changelog:[{version:\"0.22.0\",prs:[599],description:\"Added langchain.chain.name as an alias\"},{version:\"0.1.0\",prs:[76,127]}]},\"gen_ai.prompt\":{brief:\"The input messages sent to the model\",type:\"string\",keys:[\"gen_ai.input.messages\",\"ai.input_messages\",\"ai.prompt\",\"ai.prompt.messages\",\"ai.texts\",\"gen_ai.prompt\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:'[{\"role\": \"user\", \"message\": \"hello\"}]',deprecation:{replacement:\"gen_ai.input.messages\",reason:\"Deprecated from OTEL, use gen_ai.input.messages with the new format instead.\",status:\"backfill\"},aliases:[\"gen_ai.input.messages\",\"ai.texts\",\"ai.prompt.messages\",\"ai.prompt\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.prompt as an alias\"},{version:\"0.1.0\",prs:[74,108,119]},{version:\"0.0.0\"}]},\"gen_ai.prompt.name\":{brief:\"The name of the prompt that uniquely identifies it.\",type:\"string\",keys:[\"gen_ai.prompt.name\",\"mcp.prompt.name\"],applyScrubbing:{key:\"manual\",reason:\"Prompt names may reveal user behavior patterns or sensitive operations\"},isInOtel:!0,visibility:\"public\",example:\"summarize_text\",aliases:[\"mcp.prompt.name\"],changelog:[{version:\"0.12.0\",prs:[420],description:\"Added gen_ai.prompt.name attribute\"}]},\"gen_ai.prompt.variable.<key>\":{brief:\"Variables supplied to the prompt template. The <key> is the variable name, and the value is the variable value serialized as a string.\",type:\"string\",keys:[\"gen_ai.prompt.variable.<key>\"],applyScrubbing:{key:\"auto\",reason:\"Prompt variables contain user input and may include sensitive information\"},isInOtel:!0,visibility:\"public\",hasDynamicSuffix:!0,example:\"gen_ai.prompt.variable.language='French'\",examples:[\"gen_ai.prompt.variable.language='French'\",\"gen_ai.prompt.variable.topic='weather'\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Added the OpenTelemetry convention for prompt variables\"}],additionalContext:[\"Capture only when the user explicitly opts in to recording prompt inputs. In MCP, these values are the arguments supplied in prompts/get requests.\"]},\"gen_ai.provider.name\":{brief:\"The Generative AI provider as identified by the client or server instrumentation.\",type:\"string\",keys:[\"gen_ai.provider.name\",\"ai.model.provider\",\"gen_ai.system\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"openai\",aliases:[\"ai.model.provider\",\"gen_ai.system\"],changelog:[{version:\"0.4.0\",prs:[253]}]},\"gen_ai.request.available_tools\":{brief:\"The available tools for the model. It has to be a stringified version of an array of objects.\",type:\"string\",keys:[\"gen_ai.tool.definitions\",\"ai.prompt.tools\",\"ai.tools\",\"gen_ai.request.available_tools\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'[{\"name\": \"get_weather\", \"description\": \"Get the weather for a given location\"}, {\"name\": \"get_news\", \"description\": \"Get the news for a given topic\"}]',deprecation:{replacement:\"gen_ai.tool.definitions\",status:\"normalize\"},aliases:[\"gen_ai.tool.definitions\"],changelog:[{version:\"0.22.0\",prs:[595],description:\"Added gen_ai.tool.definitions as an alias\"},{version:\"0.4.0\",prs:[221]},{version:\"0.1.0\",prs:[63,127]}]},\"gen_ai.request.frequency_penalty\":{brief:\"Used to reduce repetitiveness of generated tokens. The higher the value, the stronger a penalty is applied to previously present tokens, proportional to how many times they have already appeared in the prompt or prior generation.\",type:\"double\",keys:[\"gen_ai.request.frequency_penalty\",\"ai.frequency_penalty\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:.5,aliases:[\"ai.frequency_penalty\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57]}]},\"gen_ai.request.max_tokens\":{brief:\"The maximum number of tokens to generate in the response.\",type:\"integer\",keys:[\"gen_ai.request.max_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:2048,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[62]}]},\"gen_ai.request.messages\":{brief:'The messages passed to the model. It has to be a stringified version of an array of objects. The `role` attribute of each object must be `\"user\"`, `\"assistant\"`, `\"tool\"`, or `\"system\"`. For messages of the role `\"tool\"`, the `content` can be a string or an arbitrary object with information about the tool call. For other messages the `content` can be either a string or a list of objects in the format `{type: \"text\", text:\"...\"}`.',type:\"string\",keys:[\"gen_ai.request.messages\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'[{\"role\": \"system\", \"content\": \"Generate a random number.\"}, {\"role\": \"user\", \"content\": [{\"text\": \"Generate a random number between 0 and 10.\", \"type\": \"text\"}]}, {\"role\": \"tool\", \"content\": {\"toolCallId\": \"1\", \"toolName\": \"Weather\", \"output\": \"rainy\"}}]',deprecation:{replacement:\"gen_ai.input.messages\",status:\"transform\",transformation:\"gen_ai_request_messages_to_input_messages\"},aliases:[\"ai.input_messages\"],changelog:[{version:\"0.4.0\",prs:[221]},{version:\"0.1.0\",prs:[63,74,108,119,122]}]},\"gen_ai.request.model\":{brief:\"The model identifier being used for the request.\",type:\"string\",keys:[\"gen_ai.request.model\",\"ai.model.id\",\"ai.model_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"gpt-4-turbo-preview\",aliases:[\"ai.model_id\",\"ai.model.id\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.model.id as an alias\"},{version:\"0.1.0\",prs:[62,127]}]},\"gen_ai.request.presence_penalty\":{brief:\"Used to reduce repetitiveness of generated tokens. Similar to frequency_penalty, except that this penalty is applied equally to all tokens that have already appeared, regardless of their exact frequencies.\",type:\"double\",keys:[\"gen_ai.request.presence_penalty\",\"ai.presence_penalty\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:.5,aliases:[\"ai.presence_penalty\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57]}]},\"gen_ai.request.reasoning.level\":{brief:\"The reasoning or thinking effort level requested for a GenAI model.\",type:\"string\",keys:[\"gen_ai.request.reasoning.level\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"high\",changelog:[{version:\"0.17.0\",prs:[502],description:\"Added gen_ai.request.reasoning.level attribute\"}]},\"gen_ai.request.schema\":{brief:\"The stringified JSON schema the model output must conform to.\",type:\"string\",keys:[\"gen_ai.request.schema\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"}}}',examples:['{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"}}}'],deprecation:{reason:\"This attribute is deprecated. The Sentry conventions have no replacement for the requested output schema.\"},changelog:[{version:\"0.21.0\",prs:[583],description:\"Added gen_ai.request.schema attribute\"}]},\"gen_ai.request.seed\":{brief:\"The seed, ideally models given the same seed and same other parameters will produce the exact same output.\",type:\"string\",keys:[\"gen_ai.request.seed\",\"ai.seed\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"1234567890\",aliases:[\"ai.seed\"],changelog:[{version:\"0.1.0\",prs:[57,127]}]},\"gen_ai.request.stop_sequences\":{brief:\"List of sequences that the model will use to stop generating further tokens.\",type:\"string[]\",keys:[\"gen_ai.request.stop_sequences\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:[\"forest\",\"lived\"],changelog:[{version:\"0.16.0\",prs:[482],description:\"Added gen_ai.request.stop_sequences attribute\"}]},\"gen_ai.request.temperature\":{brief:\"For an AI model call, the temperature parameter. Temperature essentially means how random the output will be.\",type:\"double\",keys:[\"gen_ai.request.temperature\",\"ai.temperature\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:.1,aliases:[\"ai.temperature\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57]}]},\"gen_ai.request.top_k\":{brief:\"Limits the model to only consider the K most likely next tokens, where K is an integer (e.g., top_k=20 means only the 20 highest probability tokens are considered).\",type:\"integer\",keys:[\"gen_ai.request.top_k\",\"ai.top_k\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:35,aliases:[\"ai.top_k\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57]}]},\"gen_ai.request.top_p\":{brief:\"Limits the model to only consider tokens whose cumulative probability mass adds up to p, where p is a float between 0 and 1 (e.g., top_p=0.7 means only tokens that sum up to 70% of the probability mass are considered).\",type:\"double\",keys:[\"gen_ai.request.top_p\",\"ai.top_p\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:.7,aliases:[\"ai.top_p\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57]}]},\"gen_ai.response.finish_reason\":{brief:\"The reason why the model stopped generating (singular form).\",type:\"string\",keys:[\"gen_ai.response.finish_reasons\",\"ai.finish_reason\",\"gen_ai.response.finish_reason\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"COMPLETE\",deprecation:{replacement:\"gen_ai.response.finish_reasons\",status:\"normalize\"},aliases:[\"gen_ai.response.finish_reasons\"],changelog:[{version:\"0.19.0\",prs:[498],description:\"Added gen_ai.response.finish_reason attribute\"}]},\"gen_ai.response.finish_reasons\":{brief:\"The reason why the model stopped generating.\",type:\"string\",keys:[\"gen_ai.response.finish_reasons\",\"ai.finish_reason\",\"gen_ai.response.finish_reason\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"COMPLETE\",aliases:[\"ai.finish_reason\",\"gen_ai.response.finish_reason\"],changelog:[{version:\"0.1.0\",prs:[57,127]}]},\"gen_ai.response.id\":{brief:\"Unique identifier for the completion.\",type:\"string\",keys:[\"gen_ai.response.id\",\"ai.generation_id\",\"ai.response.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"gen_123abc\",aliases:[\"ai.generation_id\",\"ai.response.id\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.response.id as an alias\"},{version:\"0.1.0\",prs:[57,127]}]},\"gen_ai.response.model\":{brief:\"The vendor-specific ID of the model used.\",type:\"string\",keys:[\"gen_ai.response.model\",\"ai.response.model\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"gpt-4\",aliases:[\"ai.response.model\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.response.model as an alias\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"gen_ai.response.object\":{brief:\"The type of the object returned by the model.\",type:\"string\",keys:[\"gen_ai.response.object\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"chat.completion\",examples:[\"chat.completion\"],deprecation:{reason:\"This attribute is deprecated. The Sentry conventions have no replacement for the raw response object type.\"},changelog:[{version:\"0.21.0\",prs:[583],description:\"Added gen_ai.response.object attribute\"}]},\"gen_ai.response.streaming\":{brief:\"Whether or not the AI model call's response was streamed back asynchronously\",type:\"boolean\",keys:[\"gen_ai.response.streaming\",\"ai.streaming\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,aliases:[\"ai.streaming\"],changelog:[{version:\"0.1.0\",prs:[76]}]},\"gen_ai.response.text\":{brief:\"The model's response text messages. It has to be a stringified version of an array of response text messages.\",type:\"string\",keys:[\"gen_ai.response.text\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'[\"The weather in Paris is rainy and overcast, with temperatures around 57\\xB0F\", \"The weather in London is sunny and warm, with temperatures around 65\\xB0F\"]',deprecation:{replacement:\"gen_ai.output.messages\",status:\"transform\",transformation:\"gen_ai_response_to_output_messages\"},changelog:[{version:\"0.4.0\",prs:[221]},{version:\"0.1.0\",prs:[63,74]}]},\"gen_ai.response.time_to_first_chunk\":{brief:\"Time in seconds when the first response content chunk arrived in streaming responses.\",type:\"double\",keys:[\"gen_ai.response.time_to_first_chunk\",\"gen_ai.response.time_to_first_token\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:.6853435,aliases:[\"gen_ai.response.time_to_first_token\"],changelog:[{version:\"0.11.0\",prs:[418],description:\"Added gen_ai.response.time_to_first_chunk attribute\"}]},\"gen_ai.response.time_to_first_token\":{brief:\"Time in seconds when the first response content chunk arrived in streaming responses.\",type:\"double\",keys:[\"gen_ai.response.time_to_first_chunk\",\"gen_ai.response.time_to_first_token\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.6853435,deprecation:{replacement:\"gen_ai.response.time_to_first_chunk\",status:\"backfill\"},aliases:[\"gen_ai.response.time_to_first_chunk\"],changelog:[{version:\"0.11.0\",prs:[418],description:\"Deprecate in favor of gen_ai.response.time_to_first_chunk\"},{version:\"0.4.0\",prs:[227]}]},\"gen_ai.response.tokens_per_second\":{brief:\"The total output tokens per seconds throughput\",type:\"double\",keys:[\"gen_ai.response.tokens_per_second\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12345.67,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[66]}]},\"gen_ai.response.tool_calls\":{brief:\"The tool calls in the model's response. It has to be a stringified version of an array of objects.\",type:\"string\",keys:[\"gen_ai.response.tool_calls\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'[{\"name\": \"get_weather\", \"arguments\": {\"location\": \"Paris\"}}]',deprecation:{replacement:\"gen_ai.output.messages\",status:\"transform\",transformation:\"gen_ai_response_to_output_messages\"},changelog:[{version:\"0.4.0\",prs:[221]},{version:\"0.1.0\",prs:[63,74]}]},\"gen_ai.system\":{brief:\"The provider of the model.\",type:\"string\",keys:[\"gen_ai.provider.name\",\"ai.model.provider\",\"gen_ai.system\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"openai\",deprecation:{replacement:\"gen_ai.provider.name\",status:\"normalize\"},aliases:[\"ai.model.provider\",\"gen_ai.provider.name\"],changelog:[{version:\"0.4.0\",prs:[253]},{version:\"0.1.0\",prs:[57,127]}]},\"gen_ai.system_instructions\":{brief:\"The system instructions passed to the model.\",type:\"string\",keys:[\"gen_ai.system_instructions\",\"ai.preamble\",\"gen_ai.system.message\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"You are a helpful assistant\",aliases:[\"ai.preamble\"],changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.4.0\",prs:[221]}]},\"gen_ai.system.message\":{brief:\"The system instructions passed to the model.\",type:\"string\",keys:[\"gen_ai.system_instructions\",\"ai.preamble\",\"gen_ai.system.message\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"You are a helpful assistant\",deprecation:{replacement:\"gen_ai.system_instructions\",status:\"backfill\"},changelog:[{version:\"0.4.0\",prs:[221]},{version:\"0.1.0\",prs:[62]}]},\"gen_ai.tool.call.arguments\":{brief:\"The arguments of the tool call. It has to be a stringified version of the arguments to the tool.\",type:\"string\",keys:[\"gen_ai.tool.call.arguments\",\"ai.toolCall.args\",\"gen_ai.tool.input\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:'{\"location\": \"Paris\"}',aliases:[\"gen_ai.tool.input\",\"ai.toolCall.args\"],changelog:[{version:\"0.5.0\",prs:[265]},{version:\"0.4.0\",prs:[221]}]},\"gen_ai.tool.call.result\":{brief:\"The result of the tool call. It has to be a stringified version of the result of the tool.\",type:\"string\",keys:[\"gen_ai.tool.call.result\",\"ai.toolCall.result\",\"anthropic.tool_result.content\",\"gen_ai.tool.message\",\"gen_ai.tool.output\",\"mcp.tool.result.content\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"rainy, 57\\xB0F\",aliases:[\"gen_ai.tool.output\",\"gen_ai.tool.message\",\"mcp.tool.result.content\",\"ai.toolCall.result\",\"anthropic.tool_result.content\"],changelog:[{version:\"0.5.0\",prs:[265]},{version:\"0.4.0\",prs:[221]}]},\"gen_ai.tool.definitions\":{brief:\"The list of source system tool definitions available to the GenAI agent or model.\",type:\"string\",keys:[\"gen_ai.tool.definitions\",\"ai.prompt.tools\",\"ai.tools\",\"gen_ai.request.available_tools\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:'[{\"type\": \"function\", \"name\": \"get_current_weather\", \"description\": \"Get the current weather in a given location\", \"parameters\": {\"type\": \"object\", \"properties\": {\"location\": {\"type\": \"string\", \"description\": \"The city and state, e.g. San Francisco, CA\"}, \"unit\": {\"type\": \"string\", \"enum\": [\"celsius\", \"fahrenheit\"]}}, \"required\": [\"location\", \"unit\"]}}]',aliases:[\"gen_ai.request.available_tools\"],changelog:[{version:\"0.22.0\",prs:[595],description:\"Added gen_ai.request.available_tools as an alias\"},{version:\"0.4.0\",prs:[221]}]},\"gen_ai.tool.description\":{brief:\"The description of the tool being used.\",type:\"string\",keys:[\"gen_ai.tool.description\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Searches the web for current information about a topic\",changelog:[{version:\"0.1.0\",prs:[62,127]}]},\"gen_ai.tool.input\":{brief:\"The input of the tool being used. It has to be a stringified version of the input to the tool.\",type:\"string\",keys:[\"gen_ai.tool.call.arguments\",\"ai.toolCall.args\",\"gen_ai.tool.input\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'{\"location\": \"Paris\"}',deprecation:{replacement:\"gen_ai.tool.call.arguments\",status:\"normalize\"},aliases:[\"gen_ai.tool.call.arguments\",\"ai.toolCall.args\"],changelog:[{version:\"0.5.0\",prs:[265]},{version:\"0.1.0\",prs:[63,74]}]},\"gen_ai.tool.message\":{brief:\"The response from a tool or function call passed to the model.\",type:\"string\",keys:[\"gen_ai.tool.call.result\",\"ai.toolCall.result\",\"anthropic.tool_result.content\",\"gen_ai.tool.message\",\"gen_ai.tool.output\",\"mcp.tool.result.content\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"rainy, 57\\xB0F\",deprecation:{replacement:\"gen_ai.tool.call.result\",status:\"normalize\"},aliases:[\"gen_ai.tool.call.result\",\"gen_ai.tool.output\",\"mcp.tool.result.content\",\"ai.toolCall.result\",\"anthropic.tool_result.content\"],changelog:[{version:\"0.5.0\",prs:[265]},{version:\"0.1.0\",prs:[62]}]},\"gen_ai.tool.name\":{brief:\"Name of the tool utilized by the agent.\",type:\"string\",keys:[\"gen_ai.tool.name\",\"ai.function_call\",\"mcp.tool.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Flights\",aliases:[\"ai.function_call\",\"mcp.tool.name\"],changelog:[{version:\"0.1.0\",prs:[57,127]}]},\"gen_ai.tool.output\":{brief:\"The output of the tool being used. It has to be a stringified version of the output of the tool.\",type:\"string\",keys:[\"gen_ai.tool.call.result\",\"ai.toolCall.result\",\"anthropic.tool_result.content\",\"gen_ai.tool.message\",\"gen_ai.tool.output\",\"mcp.tool.result.content\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"rainy, 57\\xB0F\",deprecation:{replacement:\"gen_ai.tool.call.result\",status:\"normalize\"},aliases:[\"gen_ai.tool.call.result\",\"gen_ai.tool.message\",\"mcp.tool.result.content\",\"ai.toolCall.result\",\"anthropic.tool_result.content\"],changelog:[{version:\"0.5.0\",prs:[265]},{version:\"0.1.0\",prs:[63,74]}]},\"gen_ai.tool.type\":{brief:\"The type of tool being used.\",type:\"string\",keys:[\"gen_ai.tool.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"function\",deprecation:{reason:\"The gen_ai.tool.type attribute is deprecated and should no longer be set.\"},changelog:[{version:\"0.1.0\",prs:[62,127]}]},\"gen_ai.usage.cache_creation.input_tokens\":{brief:\"The number of tokens written to the cache when processing the AI input (prompt).\",type:\"integer\",keys:[\"gen_ai.usage.cache_creation.input_tokens\",\"gen_ai.usage.cache_creation_input_tokens\",\"gen_ai.usage.input_tokens.cache_write\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:100,aliases:[\"gen_ai.usage.input_tokens.cache_write\",\"gen_ai.usage.cache_creation_input_tokens\"],changelog:[{version:\"0.24.0\",prs:[582],description:\"Added gen_ai.usage.cache_creation_input_tokens as an alias\"},{version:\"0.11.0\",prs:[418],description:\"Added gen_ai.usage.cache_creation.input_tokens attribute\"}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\"]},\"gen_ai.usage.cache_creation_input_tokens\":{brief:\"The number of tokens written to the cache when processing the AI input (prompt).\",type:\"integer\",keys:[\"gen_ai.usage.cache_creation.input_tokens\",\"gen_ai.usage.cache_creation_input_tokens\",\"gen_ai.usage.input_tokens.cache_write\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:100,examples:[100],deprecation:{replacement:\"gen_ai.usage.cache_creation.input_tokens\",reason:\"This attribute is being deprecated in favor of gen_ai.usage.cache_creation.input_tokens.\",status:\"backfill\"},aliases:[\"gen_ai.usage.cache_creation.input_tokens\",\"gen_ai.usage.input_tokens.cache_write\"],changelog:[{version:\"0.24.0\",prs:[582],description:\"Added gen_ai.usage.cache_creation_input_tokens attribute\"}]},\"gen_ai.usage.cache_read.input_tokens\":{brief:\"The number of cached tokens used to process the AI input (prompt).\",type:\"integer\",keys:[\"gen_ai.usage.cache_read.input_tokens\",\"gen_ai.usage.cache_read_input_tokens\",\"gen_ai.usage.input_tokens.cached\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:50,aliases:[\"gen_ai.usage.input_tokens.cached\",\"gen_ai.usage.cache_read_input_tokens\"],changelog:[{version:\"0.24.0\",prs:[582],description:\"Added gen_ai.usage.cache_read_input_tokens as an alias\"},{version:\"0.11.0\",prs:[418],description:\"Added gen_ai.usage.cache_read.input_tokens attribute\"}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"This is a subset of gen_ai.usage.input_tokens, not an independent count. Do not sum this with gen_ai.usage.input_tokens \\u2014 it is already included.\"]},\"gen_ai.usage.cache_read_input_tokens\":{brief:\"The number of cached tokens used to process the AI input (prompt).\",type:\"integer\",keys:[\"gen_ai.usage.cache_read.input_tokens\",\"gen_ai.usage.cache_read_input_tokens\",\"gen_ai.usage.input_tokens.cached\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:50,examples:[50],deprecation:{replacement:\"gen_ai.usage.cache_read.input_tokens\",reason:\"This attribute is being deprecated in favor of gen_ai.usage.cache_read.input_tokens.\",status:\"backfill\"},aliases:[\"gen_ai.usage.cache_read.input_tokens\",\"gen_ai.usage.input_tokens.cached\"],changelog:[{version:\"0.24.0\",prs:[582],description:\"Added gen_ai.usage.cache_read_input_tokens attribute\"}]},\"gen_ai.usage.completion_tokens\":{brief:\"The number of tokens used in the GenAI response (completion).\",type:\"integer\",keys:[\"gen_ai.usage.output_tokens\",\"ai.completion_tokens.used\",\"gen_ai.usage.completion_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:10,deprecation:{replacement:\"gen_ai.usage.output_tokens\",status:\"backfill\"},aliases:[\"ai.completion_tokens.used\",\"gen_ai.usage.output_tokens\"],changelog:[{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\"]},\"gen_ai.usage.input_tokens\":{brief:\"The number of tokens used to process the AI input (prompt) including cached input tokens.\",type:\"integer\",keys:[\"gen_ai.usage.input_tokens\",\"ai.prompt_tokens.used\",\"gen_ai.usage.prompt_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:10,aliases:[\"ai.prompt_tokens.used\",\"gen_ai.usage.prompt_tokens\"],changelog:[{version:\"0.11.0\",prs:[418],description:\"Update additional_context to reference gen_ai.usage.cache_read.input_tokens\"},{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.5.0\",prs:[261]},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[112]},{version:\"0.0.0\"}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"This count includes cached input tokens. gen_ai.usage.cache_read.input_tokens is a subset of this value, not an independent count \\u2014 do not sum them together.\"]},\"gen_ai.usage.input_tokens.cached\":{brief:\"The number of cached tokens used to process the AI input (prompt).\",type:\"integer\",keys:[\"gen_ai.usage.cache_read.input_tokens\",\"gen_ai.usage.cache_read_input_tokens\",\"gen_ai.usage.input_tokens.cached\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:50,deprecation:{replacement:\"gen_ai.usage.cache_read.input_tokens\",status:\"backfill\"},aliases:[\"gen_ai.usage.cache_read.input_tokens\",\"gen_ai.usage.cache_read_input_tokens\"],changelog:[{version:\"0.24.0\",prs:[582],description:\"Added gen_ai.usage.cache_read_input_tokens as an alias\"},{version:\"0.11.0\",prs:[418],description:\"Deprecate in favor of gen_ai.usage.cache_read.input_tokens\"},{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[62,112]}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"This is a subset of gen_ai.usage.input_tokens, not an independent count. Do not sum this with gen_ai.usage.input_tokens \\u2014 it is already included.\"]},\"gen_ai.usage.input_tokens.cache_write\":{brief:\"The number of tokens written to the cache when processing the AI input (prompt).\",type:\"integer\",keys:[\"gen_ai.usage.cache_creation.input_tokens\",\"gen_ai.usage.cache_creation_input_tokens\",\"gen_ai.usage.input_tokens.cache_write\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:100,deprecation:{replacement:\"gen_ai.usage.cache_creation.input_tokens\",status:\"backfill\"},aliases:[\"gen_ai.usage.cache_creation.input_tokens\",\"gen_ai.usage.cache_creation_input_tokens\"],changelog:[{version:\"0.24.0\",prs:[582],description:\"Added gen_ai.usage.cache_creation_input_tokens as an alias\"},{version:\"0.11.0\",prs:[418],description:\"Deprecate in favor of gen_ai.usage.cache_creation.input_tokens\"},{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[217,228]}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\"]},\"gen_ai.usage.output_tokens\":{brief:\"The number of tokens used for creating the AI output (including reasoning tokens).\",type:\"integer\",keys:[\"gen_ai.usage.output_tokens\",\"ai.completion_tokens.used\",\"gen_ai.usage.completion_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:10,aliases:[\"ai.completion_tokens.used\",\"gen_ai.usage.completion_tokens\"],changelog:[{version:\"0.11.0\",prs:[418],description:\"Update additional_context to reference gen_ai.usage.reasoning.output_tokens\"},{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.5.0\",prs:[261]},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[112]},{version:\"0.0.0\"}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"This count includes reasoning tokens. gen_ai.usage.reasoning.output_tokens is a subset of this value, not an independent count \\u2014 do not sum them together.\"]},\"gen_ai.usage.output_tokens.reasoning\":{brief:\"The number of tokens used for reasoning to create the AI output.\",type:\"integer\",keys:[\"gen_ai.usage.reasoning.output_tokens\",\"gen_ai.usage.output_tokens.reasoning\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:75,deprecation:{replacement:\"gen_ai.usage.reasoning.output_tokens\",status:\"backfill\"},aliases:[\"gen_ai.usage.reasoning.output_tokens\"],changelog:[{version:\"0.11.0\",prs:[418],description:\"Deprecate in favor of gen_ai.usage.reasoning.output_tokens\"},{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[62,112]}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"This is a subset of gen_ai.usage.output_tokens, not an independent count. Do not sum this with gen_ai.usage.output_tokens \\u2014 it is already included.\"]},\"gen_ai.usage.prompt_tokens\":{brief:\"The number of tokens used in the GenAI input (prompt).\",type:\"integer\",keys:[\"gen_ai.usage.input_tokens\",\"ai.prompt_tokens.used\",\"gen_ai.usage.prompt_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:20,deprecation:{replacement:\"gen_ai.usage.input_tokens\",status:\"backfill\"},aliases:[\"ai.prompt_tokens.used\",\"gen_ai.usage.input_tokens\"],changelog:[{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\"]},\"gen_ai.usage.reasoning.output_tokens\":{brief:\"The number of tokens used for reasoning to create the AI output.\",type:\"integer\",keys:[\"gen_ai.usage.reasoning.output_tokens\",\"gen_ai.usage.output_tokens.reasoning\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:75,aliases:[\"gen_ai.usage.output_tokens.reasoning\"],changelog:[{version:\"0.11.0\",prs:[418],description:\"Added gen_ai.usage.reasoning.output_tokens attribute\"}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"This is a subset of gen_ai.usage.output_tokens, not an independent count. Do not sum this with gen_ai.usage.output_tokens \\u2014 it is already included.\"]},\"gen_ai.usage.total_tokens\":{brief:\"The total number of tokens used to process the prompt. (input tokens plus output todkens)\",type:\"integer\",keys:[\"gen_ai.usage.total_tokens\",\"ai.total_tokens.used\",\"ai.usage.tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:20,aliases:[\"ai.total_tokens.used\",\"ai.usage.tokens\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.usage.tokens as an alias\"},{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57]}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"This is the sum of gen_ai.usage.input_tokens and gen_ai.usage.output_tokens. Do not sum this with either of them \\u2014 they are already included.\"]},\"graphql.document\":{brief:\"The GraphQL document being executed.\",type:\"string\",keys:[\"graphql.document\",\"graphql.source\"],applyScrubbing:{key:\"auto\",reason:\"The document may contain sensitive information in arguments or variables. Instrumentation should redact sensitive information when possible.\"},isInOtel:!0,visibility:\"public\",example:\"query findBookById { bookById(id: ?) { name } }\",aliases:[\"graphql.source\"],changelog:[{version:\"0.21.0\",prs:[584],description:\"Added graphql.source as an alias\"},{version:\"0.7.0\",description:\"Adds the `graphql.document` attribute to track the GraphQL document being executed.\"}]},\"graphql.operation.name\":{brief:\"The name of the operation being executed.\",type:\"string\",keys:[\"graphql.operation.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"findBookById\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"graphql.operation.type\":{brief:\"The type of the operation being executed.\",type:\"string\",keys:[\"graphql.operation.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"query\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"graphql.processing.type\":{brief:\"The type of processing represented by this span.\",type:\"string\",keys:[\"graphql.processing.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"parse\",examples:[\"parse\",\"validate\",\"execute\",\"resolve\"],changelog:[{version:\"0.21.0\",prs:[572],description:\"Added graphql.processing.type attribute\"}],additionalContext:[\"Well-known values are request, parse, validate, variable_coercion, plan, execute, subscription_event, step_execute, resolve, dataloader_dispatch, dataloader_batch and _OTHER. Use one of these if it applies, otherwise a custom value.\",\"Not to be confused with graphql.operation.type, which holds the GraphQL operation type (query, mutation, subscription) and only applies to spans that run an operation.\"]},\"graphql.source\":{brief:\"The GraphQL document being executed.\",type:\"string\",keys:[\"graphql.document\",\"graphql.source\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"query findBookById { bookById(id: ?) { name } }\",examples:[\"query findBookById { bookById(id: ?) { name } }\"],deprecation:{replacement:\"graphql.document\",reason:\"This attribute is being deprecated in favor of graphql.document, which is the OpenTelemetry name for the same value.\",status:\"backfill\"},aliases:[\"graphql.document\"],changelog:[{version:\"0.21.0\",prs:[584],description:\"Added graphql.source attribute\"}]},\"grpc.error.bad_request.field_violations\":{brief:\"The individual field violations from a google.rpc.BadRequest error detail. Each entry is a JSON-encoded object with field, description, reason, and (optional) localized_message keys, mirroring google.rpc.BadRequest.FieldViolation.\",type:\"string[]\",keys:[\"grpc.error.bad_request.field_violations\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:['{\"field\":\"email\",\"description\":\"must be a valid email address\",\"reason\":\"FIELD_INVALID\",\"localized_message\":{\"locale\":\"en-US\",\"message\":\"Must be a valid email address\"}}'],changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.bad_request.field_violations attribute\"}]},\"grpc.error.debug_info.detail\":{brief:\"Additional debugging information, such as a server-side stack trace, from a google.rpc.DebugInfo error detail. SDKs should only send this attribute when sendDefaultPii is enabled or dataCollection is configured accordingly.\",type:\"string\",keys:[\"grpc.error.debug_info.detail\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"at com.example.Service.method(Service.java:42)\",changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.debug_info.detail attribute\"}]},\"grpc.error.debug_info.stack_entries\":{brief:\"The server-side stack trace entries from a google.rpc.DebugInfo error detail. SDKs should only send this attribute when sendDefaultPii is enabled or dataCollection is configured accordingly.\",type:\"string[]\",keys:[\"grpc.error.debug_info.stack_entries\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"com.example.Service.method(Service.java:42)\",\"com.example.Server.handle(Server.java:100)\"],changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.debug_info.stack_entries attribute\"}]},\"grpc.error.error_info.domain\":{brief:\"The logical grouping to which the gRPC error reason belongs, from the google.rpc.ErrorInfo error detail.\",type:\"string\",keys:[\"grpc.error.error_info.domain\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"example.sentry.io\",changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.error_info.domain attribute\"}]},\"grpc.error.error_info.metadata.<key>\":{brief:\"Additional structured metadata attached to a google.rpc.ErrorInfo error detail, with <key> being the metadata key name. SDKs should only send this attribute when sendDefaultPii is enabled or dataCollection is configured accordingly.\",type:\"string\",keys:[\"grpc.error.error_info.metadata.<key>\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"grpc.error.error_info.metadata.user_id='123'\",changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.error_info.metadata.<key> attribute\"}]},\"grpc.error.error_info.reason\":{brief:\"The reason for the gRPC error, as defined by the service that generated it, from the google.rpc.ErrorInfo error detail.\",type:\"string\",keys:[\"grpc.error.error_info.reason\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"FIELD_INVALID\",changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.error_info.reason attribute\"}]},\"grpc.error.precondition_failure.violations\":{brief:\"The individual precondition violations from a google.rpc.PreconditionFailure error detail. Each entry is a JSON-encoded object with type, subject, and description keys. SDKs should only send this attribute when sendDefaultPii is enabled or dataCollection is configured accordingly, since violation subjects may identify specific resources or users.\",type:\"string[]\",keys:[\"grpc.error.precondition_failure.violations\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:['{\"type\":\"TOS\",\"subject\":\"example.com/user/123\",\"description\":\"User must accept the terms of service\"}'],changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.precondition_failure.violations attribute\"}]},\"grpc.error.quota_failure.violations\":{brief:\"The individual quota violations from a google.rpc.QuotaFailure error detail. Each entry is a JSON-encoded object with subject, description, api_service, quota_metric, quota_id, quota_dimensions, quota_value, and (optional) future_quota_value keys, mirroring google.rpc.QuotaFailure.Violation. SDKs should only send this attribute when sendDefaultPii is enabled or dataCollection is configured accordingly, since violation subjects may identify specific resources or users.\",type:\"string[]\",keys:[\"grpc.error.quota_failure.violations\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:['{\"subject\":\"clientip:127.0.0.1\",\"description\":\"Limit checks failed.\",\"api_service\":\"example.googleapis.com\",\"quota_metric\":\"example.googleapis.com/read_requests\",\"quota_id\":\"ReadRequestsPerMinutePerProject\",\"quota_dimensions\":{\"region\":\"us-central1\"},\"quota_value\":1000}'],changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.quota_failure.violations attribute\"}]},\"grpc.error.resource_info.description\":{brief:\"A description of the error that occurred while accessing the resource, from a google.rpc.ResourceInfo error detail.\",type:\"string\",keys:[\"grpc.error.resource_info.description\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Instance is not ready for the request.\",changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.resource_info.description attribute\"}]},\"grpc.error.resource_info.owner\":{brief:\"The owner of the resource being accessed (e.g. project or account owning it), from a google.rpc.ResourceInfo error detail. SDKs should only send this attribute when sendDefaultPii is enabled or dataCollection is configured accordingly.\",type:\"string\",keys:[\"grpc.error.resource_info.owner\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"user@example.com\",changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.resource_info.owner attribute\"}]},\"grpc.error.resource_info.resource_name\":{brief:\"The name of the resource being accessed, from a google.rpc.ResourceInfo error detail. SDKs should only send this attribute when sendDefaultPii is enabled or dataCollection is configured accordingly.\",type:\"string\",keys:[\"grpc.error.resource_info.resource_name\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"projects/example/instances/example-instance\",changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.resource_info.resource_name attribute\"}]},\"grpc.error.resource_info.resource_type\":{brief:\"The type of resource being accessed, from a google.rpc.ResourceInfo error detail.\",type:\"string\",keys:[\"grpc.error.resource_info.resource_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"database\",changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.resource_info.resource_type attribute\"}]},\"grpc.error.retry_info.retry_delay_ms\":{brief:\"How long the client should wait before retrying the gRPC call, in milliseconds, from the google.rpc.RetryInfo error detail.\",type:\"integer\",keys:[\"grpc.error.retry_info.retry_delay_ms\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:5e3,changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.retry_info.retry_delay_ms attribute\"}]},hardwareConcurrency:{brief:\"The number of logical CPU cores available.\",type:\"string\",keys:[\"device.processor_count\",\"hardwareConcurrency\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"14\",deprecation:{replacement:\"device.processor_count\",reason:\"Old namespace-less attribute, to be replaced with device.processor_count for span-first future\",status:\"backfill\"},aliases:[\"device.processor_count\"],changelog:[{version:\"0.5.0\",prs:[281,300],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},\"http.client_ip\":{brief:\"Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\",type:\"string\",keys:[\"client.address\",\"http.client_ip\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",deprecation:{replacement:\"client.address\",status:\"backfill\"},aliases:[\"client.address\"],changelog:[{version:\"0.1.0\",prs:[61,106,127]},{version:\"0.0.0\"}]},\"http.decoded_response_content_length\":{brief:\"The decoded body size of the response (in bytes).\",type:\"integer\",keys:[\"http.response.body.decoded_size\",\"http.decoded_response_content_length\",\"http.response_content_length_uncompressed\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:456,deprecation:{replacement:\"http.response.body.decoded_size\",status:\"backfill\"},aliases:[\"http.response.body.decoded_size\",\"http.response_content_length_uncompressed\"],changelog:[{version:\"0.21.0\",prs:[574],description:\"Deprecated in favor of http.response.body.decoded_size\"},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}],searchAlias:{name:\"http.decoded_response_content_length\",type:\"byte\"}},\"http.flavor\":{brief:\"The actual version of the protocol used for network communication.\",type:\"string\",keys:[\"network.protocol.version\",\"http.flavor\",\"messaging.protocol_version\",\"net.protocol.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"1.1\",deprecation:{replacement:\"network.protocol.version\",status:\"backfill\"},aliases:[\"network.protocol.version\",\"net.protocol.version\",\"messaging.protocol_version\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.protocol_version as an alias\"},{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"http.fragment\":{brief:\"The fragments present in the URI. Note that this contains the leading # character, while the `url.fragment` attribute does not.\",type:\"string\",keys:[\"http.fragment\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"#details\",changelog:[{version:\"0.0.0\"}]},\"http.host\":{brief:\"The domain name.\",type:\"string\",keys:[\"http.host\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",deprecation:{replacement:\"server.address\",reason:\"Deprecated, use one of `server.address` or `client.address`, depending on the usage\"},aliases:[\"address\",\"server.address\",\"client.address\",\"http.server_name\",\"net.host.name\",\"server_name\",\"net.peer.name\"],changelog:[{version:\"0.24.0\",prs:[647],description:\"Added server_name as an alias\"},{version:\"0.21.0\",prs:[588,602],description:\"Added net.peer.name as an alias\"},{version:\"0.19.0\",prs:[534],description:\"Added address as an alias\"},{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"http.method\":{brief:\"The HTTP method used.\",type:\"string\",keys:[\"http.request.method\",\"http.method\",\"http.request_method\",\"method\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"GET\",deprecation:{replacement:\"http.request.method\",status:\"backfill\"},aliases:[\"http.request.method\",\"http.request_method\",\"method\"],changelog:[{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"http.query\":{brief:\"The query string present in the URL. Note that this contains the leading ? character, while the `url.query` attribute does not.\",type:\"string\",keys:[\"http.query\"],applyScrubbing:{key:\"auto\",reason:\"Query string values can contain sensitive information. Clients should attempt to scrub parameters that might contain sensitive information.\"},isInOtel:!1,visibility:\"public\",example:\"?foo=bar&bar=baz\",changelog:[{version:\"0.0.0\"}]},\"http.request.body.data\":{brief:\"HTTP request body data. Can be given as string or structural data of any format.\",type:\"string\",keys:[\"http.request.body.data\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:'[{\"role\": \"user\", \"message\": \"hello\"}]',changelog:[{version:\"0.6.0\",prs:[336],description:\"Added http.request.body.data attribute\"}]},\"http.request.body.decoded_size\":{brief:\"The decoded body size of the request (in bytes).\",type:\"integer\",keys:[\"http.request.body.decoded_size\",\"http.request_content_length_uncompressed\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:456,aliases:[\"http.request_content_length_uncompressed\"],changelog:[{version:\"0.21.0\",prs:[574],description:\"Added http.request.body.decoded_size attribute\"}],additionalContext:[\"This is the size after content decoding. Set it only when the decoded size is actually known, for example by measuring a decompressed request stream.\",\"Do not derive this from the `content-length` header, which always carries the encoded size. Use `http.request.body.size` for that.\"]},\"http.request.body.size\":{brief:\"The encoded body size of the request (in bytes).\",type:\"integer\",keys:[\"http.request.body.size\",\"http.request_content_length\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:123,aliases:[\"http.request_content_length\"],changelog:[{version:\"0.21.0\",prs:[574],description:\"Added http.request.body.size attribute\"}],additionalContext:[\"This is the on-the-wire (encoded) size. The `content-length` header always carries the encoded size, so set this attribute whenever `content-length` is known, regardless of whether `content-encoding` is present.\"]},\"http.request.connection_end\":{brief:\"The UNIX timestamp representing the time immediately after the browser finishes establishing the connection to the server to retrieve the resource. The timestamp value includes the time interval to establish the transport connection, as well as other time intervals such as TLS handshake and SOCKS authentication.\",type:\"double\",keys:[\"http.request.connection_end\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:173282955515e-2,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.connect_start\":{brief:\"The UNIX timestamp representing the time immediately before the user agent starts establishing the connection to the server to retrieve the resource.\",type:\"double\",keys:[\"http.request.connect_start\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1732829555111e-3,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request_content_length\":{brief:\"The encoded body size of the request (in bytes).\",type:\"integer\",keys:[\"http.request.body.size\",\"http.request_content_length\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:123,deprecation:{replacement:\"http.request.body.size\",status:\"backfill\"},aliases:[\"http.request.body.size\"],changelog:[{version:\"0.21.0\",prs:[574],description:\"Added http.request_content_length attribute, deprecated in favor of http.request.body.size\"}]},\"http.request_content_length_uncompressed\":{brief:\"The decoded body size of the request (in bytes).\",type:\"integer\",keys:[\"http.request.body.decoded_size\",\"http.request_content_length_uncompressed\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:456,deprecation:{replacement:\"http.request.body.decoded_size\",status:\"backfill\"},aliases:[\"http.request.body.decoded_size\"],changelog:[{version:\"0.21.0\",prs:[574],description:\"Added http.request_content_length_uncompressed attribute, deprecated in favor of http.request.body.decoded_size\"}]},\"http.request.domain_lookup_end\":{brief:\"The UNIX timestamp representing the time immediately after the browser finishes the domain-name lookup for the resource.\",type:\"double\",keys:[\"http.request.domain_lookup_end\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1732829555201e-3,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.domain_lookup_start\":{brief:\"The UNIX timestamp representing the time immediately before the browser starts the domain name lookup for the resource.\",type:\"double\",keys:[\"http.request.domain_lookup_start\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1732829555322e-3,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.fetch_start\":{brief:\"The UNIX timestamp representing the time immediately before the browser starts to fetch the resource.\",type:\"double\",keys:[\"http.request.fetch_start\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1732829555389e-3,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.header.<key>\":{brief:\"HTTP request headers, <key> being the lower-cased, but otherwise unchanged HTTP Header name, the value being the header values.\",type:\"string[]\",keys:[\"http.request.header.<key>\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",hasDynamicSuffix:!0,example:\"http.request.header.custom-header=['foo', 'bar']\",examples:[\"http.request.header.custom-header=['foo', 'bar']\",\"http.request.header.content-length=['123']\"],changelog:[{version:\"0.4.0\",prs:[201,204]},{version:\"0.1.0\",prs:[103]}]},\"http.request.method\":{brief:\"The HTTP method used.\",type:\"string\",keys:[\"http.request.method\",\"http.method\",\"http.request_method\",\"method\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"GET\",aliases:[\"method\",\"http.method\",\"http.request_method\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"http.request_method\":{brief:\"The HTTP method used.\",type:\"string\",keys:[\"http.request.method\",\"http.method\",\"http.request_method\",\"method\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"GET\",deprecation:{replacement:\"http.request.method\",status:\"backfill\"},aliases:[\"method\",\"http.method\",\"http.request.method\"],changelog:[{version:\"0.6.0\",prs:[343],description:\"Added http.request_method attribute\"}]},\"http.request.redirect_end\":{brief:\"The UNIX timestamp representing the timestamp immediately after receiving the last byte of the response of the last redirect\",type:\"double\",keys:[\"http.request.redirect_end\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1732829558502e-3,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[130,134]}]},\"http.request.redirect_start\":{brief:\"The UNIX timestamp representing the start time of the fetch which that initiates the redirect.\",type:\"double\",keys:[\"http.request.redirect_start\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1732829555495e-3,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.request_start\":{brief:\"The UNIX timestamp representing the time immediately before the browser starts requesting the resource from the server, cache, or local resource. If the transport connection fails and the browser retires the request, the value returned will be the start of the retry request.\",type:\"double\",keys:[\"http.request.request_start\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:173282955551e-2,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.resend_count\":{brief:\"The ordinal number of request resending attempt (for any reason, including redirects).\",type:\"integer\",keys:[\"http.request.resend_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"http.request.response_end\":{brief:\"The UNIX timestamp representing the time immediately after the browser receives the last byte of the resource or immediately before the transport connection is closed, whichever comes first.\",type:\"double\",keys:[\"http.request.response_end\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:173282955589e-2,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.response_start\":{brief:\"The UNIX timestamp representing the time immediately before the browser starts requesting the resource from the server, cache, or local resource. If the transport connection fails and the browser retires the request, the value returned will be the start of the retry request.\",type:\"double\",keys:[\"http.request.response_start\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:17328295557e-1,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.same_origin\":{brief:\"Indicates that a URL has the same origin as the current page's origin in the browser.\",type:\"boolean\",keys:[\"http.request.same_origin\",\"url.same_origin\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,aliases:[\"url.same_origin\"],changelog:[{version:\"0.16.0\",prs:[456],description:\"Added http.request.same_origin attribute\"}]},\"http.request.secure_connection_start\":{brief:\"The UNIX timestamp representing the time immediately before the browser starts the handshake process to secure the current connection. If a secure connection is not used, the property returns zero.\",type:\"double\",keys:[\"http.request.secure_connection_start\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:173282955573e-2,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.time_to_first_byte\":{brief:\"The time in seconds from the browser's timeorigin to when the first byte of the request's response was received. See https://web.dev/articles/ttfb#measure-resource-requests\",type:\"double\",keys:[\"http.request.time_to_first_byte\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1.032,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[131]}]},\"http.request.worker_start\":{brief:\"The UNIX timestamp representing the timestamp immediately before dispatching the FetchEvent if a Service Worker thread is already running, or immediately before starting the Service Worker thread if it is not already running.\",type:\"double\",keys:[\"http.request.worker_start\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:173282955368e-2,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[130,134]}]},\"http.response.body.decoded_size\":{brief:\"The decoded body size of the response (in bytes).\",type:\"integer\",keys:[\"http.response.body.decoded_size\",\"http.decoded_response_content_length\",\"http.response_content_length_uncompressed\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:456,aliases:[\"http.decoded_response_content_length\",\"http.response_content_length_uncompressed\"],changelog:[{version:\"0.21.0\",prs:[574],description:\"Added http.response.body.decoded_size attribute\"}],additionalContext:[\"This is the size after content decoding. Set it only when the decoded size is actually known, for example from the browser Resource Timing `decodedBodySize` or by measuring a decompressed response stream.\",\"Do not derive this from the `content-length` header, which always carries the encoded size. Use `http.response.body.size` for that.\"]},\"http.response.body.size\":{brief:\"The encoded body size of the response (in bytes).\",type:\"integer\",keys:[\"http.response.body.size\",\"http.response.header.content-length\",\"http.response_content_length\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:123,aliases:[\"http.response_content_length\",\"http.response.header.content-length\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[106]},{version:\"0.0.0\"}]},\"http.response_content_length\":{brief:\"The encoded body size of the response (in bytes).\",type:\"integer\",keys:[\"http.response.body.size\",\"http.response.header.content-length\",\"http.response_content_length\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:123,deprecation:{replacement:\"http.response.body.size\",status:\"backfill\"},aliases:[\"http.response.body.size\",\"http.response.header.content-length\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61,106]},{version:\"0.0.0\"}],searchAlias:{name:\"http.response_content_length\",type:\"byte\"}},\"http.response_content_length_uncompressed\":{brief:\"The decoded body size of the response (in bytes).\",type:\"integer\",keys:[\"http.response.body.decoded_size\",\"http.decoded_response_content_length\",\"http.response_content_length_uncompressed\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:456,deprecation:{replacement:\"http.response.body.decoded_size\",status:\"backfill\"},aliases:[\"http.response.body.decoded_size\",\"http.decoded_response_content_length\"],changelog:[{version:\"0.21.0\",prs:[574],description:\"Added http.response_content_length_uncompressed attribute, deprecated in favor of http.response.body.decoded_size\"}]},\"http.response.header.content-length\":{brief:\"The size of the message body sent to the recipient (in bytes)\",type:\"string\",keys:[\"http.response.header.content-length\",\"http.response.body.size\",\"http.response_content_length\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"http.response.header.custom-header=['foo', 'bar']\",aliases:[\"http.response_content_length\",\"http.response.body.size\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"http.response.header.<key>\":{brief:\"HTTP response headers, <key> being the lower-cased, but otherwise unchanged HTTP Header name, the value being the header values.\",type:\"string[]\",keys:[\"http.response.header.<key>\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",hasDynamicSuffix:!0,example:\"http.response.header.custom-header=['foo', 'bar']\",examples:[\"http.response.header.custom-header=['foo', 'bar']\",\"http.response.header.content-length=['123']\"],changelog:[{version:\"0.4.0\",prs:[201,204]},{version:\"0.1.0\",prs:[103]}]},\"http.response.size\":{brief:\"The transfer size of the response (in bytes).\",type:\"integer\",keys:[\"http.response.size\",\"http.response_transfer_size\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:456,aliases:[\"http.response_transfer_size\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"http.response.status_code\":{brief:\"The status code of the HTTP response.\",type:\"integer\",keys:[\"http.response.status_code\",\"http.response_status_code\",\"http.status_code\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:404,aliases:[\"http.status_code\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}],searchAlias:{name:\"http.response_status_code\"}},\"http.response.status_text\":{brief:\"The reason phrase of the HTTP response.\",type:\"string\",keys:[\"http.response.status_text\",\"http.status_text\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"NOT FOUND\",aliases:[\"http.status_text\"],changelog:[{version:\"0.21.0\",prs:[574],description:\"Added http.response.status_text attribute\"}],additionalContext:[\"HTTP/2 and HTTP/3 do not carry a reason phrase. Do not set this attribute when the protocol provides none; use `http.response.status_code` instead.\"]},\"http.response_transfer_size\":{brief:\"The transfer size of the response (in bytes).\",type:\"integer\",keys:[\"http.response.size\",\"http.response_transfer_size\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:456,deprecation:{replacement:\"http.response.size\",status:\"backfill\"},aliases:[\"http.response.size\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}],searchAlias:{name:\"http.response_transfer_size\",type:\"byte\"}},\"http.route\":{brief:\"The matched route, that is, the path template in the format used by the respective server framework.\",type:\"string\",keys:[\"http.route\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"/users/:id\",examples:[\"/users/:id\",\"my-controller/my-action/{id}\",\"/posts\"],aliases:[\"route\"],changelog:[{version:\"0.19.0\",prs:[505,521],description:\"Added multiple examples, removed alias to `url.template`, added additional context\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}],additionalContext:[\"This attribute should primarily be set by server-side instrumentation that captures the framework route of an incoming request.\",\"For `http.client` spans and client-side routing, use `url.template` instead.\"]},\"http.scheme\":{brief:\"The URI scheme component identifying the used protocol.\",type:\"string\",keys:[\"url.scheme\",\"http.scheme\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"https\",deprecation:{replacement:\"url.scheme\",status:\"backfill\"},aliases:[\"url.scheme\"],changelog:[{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"http.server_name\":{brief:\"The server domain name\",type:\"string\",keys:[\"server.address\",\"address\",\"http.server_name\",\"net.host.name\",\"server_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",deprecation:{replacement:\"server.address\",status:\"backfill\"},aliases:[\"address\",\"server.address\",\"net.host.name\",\"http.host\",\"server_name\",\"net.peer.name\"],changelog:[{version:\"0.24.0\",prs:[647],description:\"Added server_name as an alias\"},{version:\"0.21.0\",prs:[588,602],description:\"Added net.peer.name as an alias\"},{version:\"0.19.0\",prs:[534],description:\"Added address as an alias\"},{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"http.server.request.time_in_queue\":{brief:\"The time in milliseconds the request spent in the server queue before processing began. Measured from the X-Request-Start header set by reverse proxies (e.g., Nginx, HAProxy, Heroku) to when the application started handling the request.\",type:\"double\",keys:[\"http.server.request.time_in_queue\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:50,changelog:[{version:\"0.5.0\",prs:[267]}]},\"http.status_code\":{brief:\"The status code of the HTTP response.\",type:\"integer\",keys:[\"http.response.status_code\",\"http.response_status_code\",\"http.status_code\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:404,deprecation:{replacement:\"http.response.status_code\",status:\"backfill\"},aliases:[\"http.response.status_code\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"http.status_text\":{brief:\"The reason phrase of the HTTP response\",type:\"string\",keys:[\"http.response.status_text\",\"http.status_text\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"NOT FOUND\",examples:[\"NOT FOUND\"],deprecation:{replacement:\"http.response.status_text\",status:\"backfill\"},aliases:[\"http.response.status_text\"],changelog:[{version:\"0.21.0\",prs:[574],description:\"Added http.status_text attribute, deprecated in favor of http.response.status_text\"}]},\"http.target\":{brief:\"The pathname and query string of the URL.\",type:\"string\",keys:[\"http.target\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"/test?foo=bar#buzz\",deprecation:{reason:\"This attribute is being deprecated in favor of url.path, url.query and url.fragment. The value holds all three parts at once, so it has no single replacement.\"},changelog:[{version:\"0.21.0\",prs:[587],description:\"Documented url.path, url.query and url.fragment as the replacements for http.target\"},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"http.url\":{brief:\"The URL of the resource that was fetched.\",type:\"string\",keys:[\"url.full\",\"aws.request.url\",\"http.url\",\"messaging.url\",\"url\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"https://example.com/test?foo=bar#buzz\",deprecation:{replacement:\"url.full\",status:\"backfill\"},aliases:[\"url.full\",\"url\",\"aws.request.url\",\"messaging.url\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.url as an alias\"},{version:\"0.1.0\",prs:[61,108]},{version:\"0.0.0\"}]},\"http.user_agent\":{brief:\"Value of the HTTP User-Agent header sent by the client.\",type:\"string\",keys:[\"user_agent.original\",\"http.user_agent\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1\",deprecation:{replacement:\"user_agent.original\",status:\"backfill\"},aliases:[\"user_agent.original\"],changelog:[{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},id:{brief:\"A unique identifier for the span.\",type:\"string\",keys:[\"id\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"f47ac10b58cc4372a5670e02b2c3d479\",changelog:[{version:\"0.0.0\"}]},inp:{brief:\"The value of the recorded Interaction to Next Paint (INP) web vital\",type:\"double\",keys:[\"browser.web_vital.inp.value\",\"inp\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:200,deprecation:{replacement:\"browser.web_vital.inp.value\",reason:\"The INP web vital is now recorded as a browser.web_vital.inp.value attribute.\",status:\"backfill\"},aliases:[\"browser.web_vital.inp.value\"],changelog:[{version:\"0.5.0\",prs:[229],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},\"integrity.blocked_url\":{brief:\"The URL of the resource blocked by the integrity policy.\",type:\"string\",keys:[\"integrity.blocked_url\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"https://example.com/app.js\",changelog:[{version:\"0.27.0\",prs:[691]}]},\"integrity.destination\":{brief:\"The destination type of the resource affected by the integrity policy.\",type:\"string\",keys:[\"integrity.destination\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"script\",changelog:[{version:\"0.27.0\",prs:[691]}]},\"integrity.document_url\":{brief:\"The URL of the document where the integrity violation occurred.\",type:\"string\",keys:[\"integrity.document_url\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"https://example.com/index.html\",changelog:[{version:\"0.27.0\",prs:[691]}]},\"integrity.report_only\":{brief:\"Whether the integrity violation was generated by a report-only policy.\",type:\"boolean\",keys:[\"integrity.report_only\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.27.0\",prs:[691]}]},\"jsonrpc.protocol.version\":{brief:\"The version of the JSON-RPC protocol used.\",type:\"string\",keys:[\"jsonrpc.protocol.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"2.0\",changelog:[{version:\"0.12.0\",prs:[420],description:\"Added jsonrpc.protocol.version attribute\"}]},\"jsonrpc.request.id\":{brief:\"The JSON-RPC request identifier, used to correlate a request with its response.\",type:\"string\",keys:[\"jsonrpc.request.id\",\"mcp.request.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"1\",examples:[\"1\"],aliases:[\"mcp.request.id\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Removed the session-scoped uniqueness requirement from the request identifier\"},{version:\"0.12.0\",prs:[420],description:\"Added jsonrpc.request.id attribute\"}]},\"jvm.gc.action\":{brief:\"Name of the garbage collector action.\",type:\"string\",keys:[\"jvm.gc.action\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"end of minor GC\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"jvm.gc.name\":{brief:\"Name of the garbage collector.\",type:\"string\",keys:[\"jvm.gc.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"G1 Young Generation\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"jvm.memory.pool.name\":{brief:\"Name of the memory pool.\",type:\"string\",keys:[\"jvm.memory.pool.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"G1 Old Gen\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"jvm.memory.type\":{brief:\"Name of the memory pool.\",type:\"string\",keys:[\"jvm.memory.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"G1 Old Gen\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"jvm.thread.daemon\":{brief:\"Whether the thread is daemon or not.\",type:\"boolean\",keys:[\"jvm.thread.daemon\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"jvm.thread.state\":{brief:\"State of the thread.\",type:\"string\",keys:[\"jvm.thread.state\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"blocked\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"koa.name\":{brief:\"The name of the Koa middleware or matched route that handled the request.\",type:\"string\",keys:[\"koa.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"/users/:id\",deprecation:{reason:\"No single replacement. SDKs should use http.route for router layers and code.function.name for middleware layers instead.\"},changelog:[{version:\"0.16.0\",prs:[490],description:\"Added koa.name attribute as deprecated\"}]},\"koa.type\":{brief:\"The type of the Koa layer that handled the request.\",type:\"string\",keys:[\"koa.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"router\",changelog:[{version:\"0.16.0\",prs:[471],description:\"Added koa.type attribute\"}]},\"langchain.chain.name\":{brief:\"The name of the LangChain chain being executed.\",type:\"string\",keys:[\"gen_ai.pipeline.name\",\"ai.pipeline.name\",\"langchain.chain.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"format_prompt\",examples:[\"format_prompt\",\"RunnableSequence\"],deprecation:{replacement:\"gen_ai.pipeline.name\",reason:\"This attribute is being deprecated in favor of gen_ai.pipeline.name, which is the SDK-agnostic replacement for the name of the AI pipeline or chain being executed.\",status:\"backfill\"},aliases:[\"gen_ai.pipeline.name\",\"ai.pipeline.name\"],changelog:[{version:\"0.22.0\",prs:[599],description:\"Added langchain.chain.name attribute\"}]},lcp:{brief:\"The value of the recorded Largest Contentful Paint (LCP) web vital\",type:\"double\",keys:[\"browser.web_vital.lcp.value\",\"lcp\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2500,deprecation:{replacement:\"browser.web_vital.lcp.value\",reason:\"The LCP web vital is now recorded as a browser.web_vital.lcp.value attribute.\",status:\"backfill\"},aliases:[\"browser.web_vital.lcp.value\"],changelog:[{version:\"0.5.0\",prs:[229],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},\"lcp.element\":{brief:\"The dom element responsible for the largest contentful paint.\",type:\"string\",keys:[\"browser.web_vital.lcp.element\",\"lcp.element\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"img\",deprecation:{replacement:\"browser.web_vital.lcp.element\",reason:\"The LCP element is now recorded as a browser.web_vital.lcp.element attribute.\",status:\"backfill\"},aliases:[\"browser.web_vital.lcp.element\"],changelog:[{version:\"0.5.0\",prs:[233]},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"lcp.id\":{brief:\"The id of the dom element responsible for the largest contentful paint.\",type:\"string\",keys:[\"browser.web_vital.lcp.id\",\"lcp.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"#hero\",deprecation:{replacement:\"browser.web_vital.lcp.id\",reason:\"The LCP id is now recorded as a browser.web_vital.lcp.id attribute.\",status:\"backfill\"},aliases:[\"browser.web_vital.lcp.id\"],changelog:[{version:\"0.5.0\",prs:[233]},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"lcp.loadTime\":{brief:\"The time it took for the LCP element to be loaded\",type:\"integer\",keys:[\"browser.web_vital.lcp.load_time\",\"lcp.loadTime\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1402,deprecation:{replacement:\"browser.web_vital.lcp.load_time\",reason:\"The LCP load time is now recorded as a browser.web_vital.lcp.load_time attribute.\",status:\"backfill\"},aliases:[\"browser.web_vital.lcp.load_time\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"lcp.renderTime\":{brief:\"The time it took for the LCP element to be rendered\",type:\"integer\",keys:[\"browser.web_vital.lcp.render_time\",\"lcp.renderTime\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1685,deprecation:{replacement:\"browser.web_vital.lcp.render_time\",reason:\"The LCP render time is now recorded as a browser.web_vital.lcp.render_time attribute.\",status:\"backfill\"},aliases:[\"browser.web_vital.lcp.render_time\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"lcp.size\":{brief:\"The size of the largest contentful paint element.\",type:\"integer\",keys:[\"browser.web_vital.lcp.size\",\"lcp.size\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234,deprecation:{replacement:\"browser.web_vital.lcp.size\",reason:\"The LCP size is now recorded as a browser.web_vital.lcp.size attribute.\",status:\"backfill\"},aliases:[\"browser.web_vital.lcp.size\"],changelog:[{version:\"0.5.0\",prs:[233]},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"lcp.url\":{brief:\"The url of the dom element responsible for the largest contentful paint.\",type:\"string\",keys:[\"browser.web_vital.lcp.url\",\"lcp.url\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"https://example.com\",deprecation:{replacement:\"browser.web_vital.lcp.url\",reason:\"The LCP url is now recorded as a browser.web_vital.lcp.url attribute.\",status:\"backfill\"},aliases:[\"browser.web_vital.lcp.url\"],changelog:[{version:\"0.5.0\",prs:[233]},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"litestar.middleware_name\":{brief:\"The name of the Litestar middleware.\",type:\"string\",keys:[\"middleware.name\",\"django.middleware_name\",\"litestar.middleware_name\",\"starlette.middleware_name\",\"starlite.middleware_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"AuthenticationMiddleware\",deprecation:{replacement:\"middleware.name\",reason:\"This attribute is being deprecated in favor of middleware.name, which is the framework-agnostic replacement.\",status:\"backfill\"},aliases:[\"middleware.name\"],changelog:[{version:\"0.19.0\",prs:[486],description:\"Added litestar.middleware_name attribute, deprecated in favor of middleware.name\"}]},\"logger.name\":{brief:\"The name of the logger that generated this event.\",type:\"string\",keys:[\"logger.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"myLogger\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"mcp.auth.client.name\":{brief:\"Registered OAuth client application name associated with the authenticated MCP request. Taken from OAuth client registration metadata (client_name) made available by the authentication layer. This is distinct from the MCP implementation name in mcp.client.name; omit it when the OAuth client name is unavailable.\",type:\"string\",keys:[\"mcp.auth.client.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Example Desktop\",examples:[\"Example Desktop\",\"Example CLI\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Added mcp.auth.client.name attribute\"}]},\"mcp.cancelled.reason\":{brief:\"Reason for the cancellation of an MCP operation.\",type:\"string\",keys:[\"mcp.cancelled.reason\"],applyScrubbing:{key:\"manual\",reason:\"Cancellation reasons may contain user-specific or sensitive information\"},isInOtel:!1,visibility:\"public\",example:\"User cancelled the request\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.cancelled.request_id\":{brief:\"Request ID of the cancelled MCP operation.\",type:\"string\",keys:[\"mcp.cancelled.request_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"123\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.client.name\":{brief:\"Name of the MCP client implementation, as declared in clientInfo. This is distinct from the registered OAuth application name in mcp.auth.client.name.\",type:\"string\",keys:[\"mcp.client.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"example-mcp-client\",examples:[\"example-mcp-client\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Clarified that the attribute describes declared MCP implementation metadata\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.client.title\":{brief:\"Display title of the MCP client implementation, as declared in clientInfo.\",type:\"string\",keys:[\"mcp.client.title\"],applyScrubbing:{key:\"manual\",reason:\"Client titles may reveal user-specific application configurations or custom setups\"},isInOtel:!1,visibility:\"public\",example:\"Example MCP Client\",examples:[\"Example MCP Client\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Clarified that the attribute describes declared MCP implementation metadata\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.client.version\":{brief:\"Version of the MCP client implementation, as declared in clientInfo.\",type:\"string\",keys:[\"mcp.client.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1.0.0\",examples:[\"1.0.0\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Clarified that the attribute describes declared MCP implementation metadata\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.lifecycle.phase\":{brief:\"Lifecycle phase indicator for MCP operations.\",type:\"string\",keys:[\"mcp.lifecycle.phase\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"initialization_complete\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.logging.data_type\":{brief:\"Data type of the logged message content.\",type:\"string\",keys:[\"mcp.logging.data_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"string\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.logging.level\":{brief:\"Log level for MCP logging operations.\",type:\"string\",keys:[\"mcp.logging.level\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"info\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.logging.logger\":{brief:\"Logger name for MCP logging operations.\",type:\"string\",keys:[\"mcp.logging.logger\"],applyScrubbing:{key:\"manual\",reason:\"Logger names may be user-defined and could contain sensitive information\"},isInOtel:!1,visibility:\"public\",example:\"mcp_server\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.logging.message\":{brief:\"Log message content from MCP logging operations.\",type:\"string\",keys:[\"mcp.logging.message\"],applyScrubbing:{key:\"auto\",reason:\"Log messages can contain user data\"},isInOtel:!1,visibility:\"public\",example:\"Tool execution completed successfully\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.method.name\":{brief:\"The name of the MCP request or notification method being called.\",type:\"string\",keys:[\"mcp.method.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"tools/call\",changelog:[{version:\"0.12.0\",prs:[420],description:\"Set is_in_otel=true, attribute exists in OTel MCP registry\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.progress.current\":{brief:\"Current progress value of an MCP operation.\",type:\"double\",keys:[\"mcp.progress.current\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.2,examples:[.2,50],changelog:[{version:\"0.27.0\",prs:[671],description:\"Changed the type to double to support fractional MCP progress values\"},{version:\"0.4.0\",prs:[228]},{version:\"0.3.0\",prs:[171]}]},\"mcp.progress.message\":{brief:\"Progress message describing the current state of an MCP operation.\",type:\"string\",keys:[\"mcp.progress.message\"],applyScrubbing:{key:\"manual\",reason:\"Progress messages may contain user-specific or sensitive information\"},isInOtel:!1,visibility:\"public\",example:\"Processing 50 of 100 items\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.progress.percentage\":{brief:\"Calculated progress percentage of an MCP operation. Computed from current/total * 100.\",type:\"double\",keys:[\"mcp.progress.percentage\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:50,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.3.0\",prs:[171]}]},\"mcp.progress.token\":{brief:\"Token for tracking progress of an MCP operation.\",type:\"string\",keys:[\"mcp.progress.token\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"progress-token-123\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.progress.total\":{brief:\"Total progress target value of an MCP operation.\",type:\"double\",keys:[\"mcp.progress.total\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,examples:[1,100],changelog:[{version:\"0.27.0\",prs:[671],description:\"Changed the type to double to support fractional MCP progress values\"},{version:\"0.4.0\",prs:[228]},{version:\"0.3.0\",prs:[171]}]},\"mcp.prompt.name\":{brief:\"Name of the MCP prompt template being used.\",type:\"string\",keys:[\"gen_ai.prompt.name\",\"mcp.prompt.name\"],applyScrubbing:{key:\"manual\",reason:\"Prompt names may reveal user behavior patterns or sensitive operations\"},isInOtel:!1,visibility:\"public\",example:\"summarize\",deprecation:{replacement:\"gen_ai.prompt.name\",reason:\"OTel uses gen_ai.prompt.name for MCP prompt names\",status:\"backfill\"},aliases:[\"gen_ai.prompt.name\"],changelog:[{version:\"0.12.0\",prs:[420],description:\"Deprecated in favor of gen_ai.prompt.name\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.prompt.result.description\":{brief:\"Description of the prompt result.\",type:\"string\",keys:[\"mcp.prompt.result.description\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"A summary of the requested information\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.prompt.result.<key>.content\":{brief:\"Legacy text content of an indexed message in a multi-message MCP prompt result.\",type:\"string\",keys:[\"mcp.prompt.result.<key>.content\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"Summarize the document.\",examples:[\"Summarize the document.\"],changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted for results with multiple messages. <key> is the zero-based position in the original messages array; absent fields do not renumber later messages.\",\"Recorded only when output capture is enabled.\"]},\"mcp.prompt.result.<key>.role\":{brief:\"Legacy role of an indexed message in a multi-message MCP prompt result.\",type:\"string\",keys:[\"mcp.prompt.result.<key>.role\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"user\",examples:[\"user\",\"assistant\"],changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted for results with multiple messages. <key> is the zero-based position in the original messages array; absent fields do not renumber later messages.\",\"Recorded only when output capture is enabled.\"]},\"mcp.prompt.result.message_content\":{brief:\"Content of the message in the prompt result. Used for single message results only.\",type:\"string\",keys:[\"mcp.prompt.result.message_content\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"Please provide a summary of the document\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.prompt.result.message_count\":{brief:\"Number of messages in the prompt result.\",type:\"integer\",keys:[\"mcp.prompt.result.message_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:3,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.3.0\",prs:[171]}]},\"mcp.prompt.result.message_role\":{brief:\"Role of the message in the prompt result. Used for single message results only.\",type:\"string\",keys:[\"mcp.prompt.result.message_role\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"user\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.protocol.ready\":{brief:\"Readiness indicator for the legacy MCP initialization handshake. A non-zero value indicates that notifications/initialized has completed initialization. Omit for protocol versions without this handshake.\",type:\"integer\",keys:[\"mcp.protocol.ready\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,examples:[1],changelog:[{version:\"0.27.0\",prs:[671],description:\"Clarified that readiness describes the legacy MCP initialization handshake\"},{version:\"0.4.0\",prs:[228]},{version:\"0.3.0\",prs:[171]}]},\"mcp.protocol.version\":{brief:\"Version of the Model Context Protocol used for the operation.\",type:\"string\",keys:[\"mcp.protocol.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"2024-11-05\",examples:[\"2024-11-05\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Clarified that the protocol version applies to an operation without requiring a session\"},{version:\"0.12.0\",prs:[420],description:\"Set is_in_otel=true, attribute exists in OTel MCP registry\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.request.argument.<key>\":{brief:\"MCP request argument with dynamic key suffix. The <key> is replaced with the actual argument name. The value is a JSON-stringified representation of the argument value.\",type:\"string\",keys:[\"mcp.request.argument.<key>\"],applyScrubbing:{key:\"auto\",reason:\"Arguments contain user input\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"mcp.request.argument.query='weather in Paris'\",changelog:[{version:\"0.3.0\",prs:[176]}]},\"mcp.request.argument.name\":{brief:\"Name argument from prompts/get MCP request.\",type:\"string\",keys:[\"mcp.request.argument.name\"],applyScrubbing:{key:\"auto\",reason:\"Prompt names can contain user input\"},isInOtel:!1,visibility:\"public\",example:\"summarize\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.request.argument.uri\":{brief:\"URI argument from resources/read MCP request.\",type:\"string\",keys:[\"mcp.request.argument.uri\"],applyScrubbing:{key:\"auto\",reason:\"URIs can contain user file paths\"},isInOtel:!1,visibility:\"public\",example:\"file:///path/to/resource\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.request.id\":{brief:\"JSON-RPC request identifier for the MCP request, used to correlate the request with its response.\",type:\"string\",keys:[\"jsonrpc.request.id\",\"mcp.request.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1\",examples:[\"1\"],deprecation:{replacement:\"jsonrpc.request.id\",reason:\"OTel models MCP as JSON-RPC, uses jsonrpc.request.id\",status:\"backfill\"},aliases:[\"jsonrpc.request.id\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Removed the session-scoped uniqueness requirement from the request identifier\"},{version:\"0.12.0\",prs:[420],description:\"Deprecated in favor of jsonrpc.request.id\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.resource.protocol\":{brief:\"URI scheme of the MCP resource being accessed, extracted from its URI. This is distinct from the network protocol used to communicate with the MCP server.\",type:\"string\",keys:[\"mcp.resource.protocol\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"file\",examples:[\"file\",\"postgres\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Clarified Sentry-specific semantics and removed the incorrect network attribute alias and deprecation\"},{version:\"0.21.0\",prs:[581],description:\"Added messaging.protocol as an alias\"},{version:\"0.12.0\",prs:[420],description:\"Deprecated in favor of network.protocol.name\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.resource.uri\":{brief:\"The resource URI being accessed in an MCP operation.\",type:\"string\",keys:[\"mcp.resource.uri\"],applyScrubbing:{key:\"auto\",reason:\"URIs can contain sensitive file paths\"},isInOtel:!0,visibility:\"public\",example:\"file:///path/to/file.txt\",changelog:[{version:\"0.12.0\",prs:[420],description:\"Set is_in_otel=true, attribute exists in OTel MCP registry\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.server.name\":{brief:\"Name of the MCP server implementation, as declared in serverInfo.\",type:\"string\",keys:[\"mcp.server.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"example-mcp-server\",examples:[\"example-mcp-server\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Clarified that the attribute describes declared MCP implementation metadata\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.server.title\":{brief:\"Display title of the MCP server implementation, as declared in serverInfo.\",type:\"string\",keys:[\"mcp.server.title\"],applyScrubbing:{key:\"manual\",reason:\"Server titles may reveal user-specific application configurations or custom setups\"},isInOtel:!1,visibility:\"public\",example:\"Example MCP Server\",examples:[\"Example MCP Server\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Clarified that the attribute describes declared MCP implementation metadata\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.server.version\":{brief:\"Version of the MCP server implementation, as declared in serverInfo.\",type:\"string\",keys:[\"mcp.server.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"0.1.0\",examples:[\"0.1.0\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Clarified that the attribute describes declared MCP implementation metadata\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.session.id\":{brief:\"Identifier for an MCP protocol session, when the operation belongs to a session.\",type:\"string\",keys:[\"mcp.session.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"550e8400-e29b-41d4-a716-446655440000\",examples:[\"550e8400-e29b-41d4-a716-446655440000\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Clarified that the identifier requires a real MCP protocol session\"},{version:\"0.12.0\",prs:[420],description:\"Set is_in_otel=true, attribute exists in OTel MCP registry\"},{version:\"0.3.0\",prs:[171]}],additionalContext:[\"Applies to protocol versions and transports that provide MCP session management, including legacy Streamable HTTP sessions. Omit for operations without a protocol session; do not synthesize a session identifier from a request, connection, or conversation.\"]},\"mcp.tool.name\":{brief:\"Name of the MCP tool being called.\",type:\"string\",keys:[\"gen_ai.tool.name\",\"ai.function_call\",\"mcp.tool.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"calculator\",deprecation:{replacement:\"gen_ai.tool.name\",reason:\"OTel uses gen_ai.tool.name for MCP tool names\",status:\"backfill\"},aliases:[\"gen_ai.tool.name\",\"ai.function_call\"],changelog:[{version:\"0.12.0\",prs:[420],description:\"Deprecated in favor of gen_ai.tool.name\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.tool.result.content\":{brief:\"The content of the tool result.\",type:\"string\",keys:[\"gen_ai.tool.call.result\",\"ai.toolCall.result\",\"anthropic.tool_result.content\",\"gen_ai.tool.message\",\"gen_ai.tool.output\",\"mcp.tool.result.content\"],applyScrubbing:{key:\"auto\",reason:\"Tool results can contain user data\"},isInOtel:!1,visibility:\"public\",example:'{\"output\": \"rainy\", \"toolCallId\": \"1\"}',deprecation:{replacement:\"gen_ai.tool.call.result\",reason:\"OTel uses gen_ai.tool.call.result for MCP tool results\",status:\"backfill\"},aliases:[\"gen_ai.tool.call.result\",\"gen_ai.tool.message\",\"gen_ai.tool.output\",\"ai.toolCall.result\",\"anthropic.tool_result.content\"],changelog:[{version:\"0.12.0\",prs:[420],description:\"Deprecated in favor of gen_ai.tool.call.result\"},{version:\"0.3.0\",prs:[171]},{version:\"0.2.0\",prs:[164]}]},\"mcp.tool.result.content_count\":{brief:\"Number of content items in the tool result.\",type:\"integer\",keys:[\"mcp.tool.result.content_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,deprecation:{reason:\"A count can be calculcated from the value of the gen_ai.tool.call.result attribute.\"},changelog:[{version:\"0.27.0\",prs:[669],description:\"Deprecate the attribute since it is redundant given gen_ai.tool.call.result.\"},{version:\"0.4.0\",prs:[228]},{version:\"0.3.0\",prs:[171]}]},\"mcp.tool.result.content_type\":{brief:\"Legacy content type of the content item in a single-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.content_type\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"text\",examples:[\"text\",\"image\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted only when the result contains exactly one content item.\",\"Recorded even when output capture is disabled.\"]},\"mcp.tool.result.data_size\":{brief:\"Legacy length of the data string in UTF-16 code units of the content item in a single-item MCP tool result.\",type:\"integer\",keys:[\"mcp.tool.result.data_size\"],applyScrubbing:{key:\"manual\",reason:\"The length contains no result content.\"},isInOtel:!1,visibility:\"public\",example:4,examples:[4,1024],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted only when the result contains exactly one content item.\",\"Recorded only when output capture is enabled.\",\"The JavaScript SDK records data.length. For base64-encoded image or audio data, this counts encoded characters, not decoded bytes.\"]},\"mcp.tool.result.is_error\":{brief:\"Whether a tool execution resulted in an error.\",type:\"boolean\",keys:[\"mcp.tool.result.is_error\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!1,deprecation:{replacement:\"error.type\",reason:\"OTel uses error.type set to 'tool_error' when isError is true. Cannot be automatically backfilled due to type mismatch (boolean vs string).\"},changelog:[{version:\"0.12.0\",prs:[420],description:\"Deprecated in favor of error.type\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.tool.result.<key>.content\":{brief:\"Legacy text content of an indexed content item in a multi-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.<key>.content\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"The operation completed.\",examples:[\"The operation completed.\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted for results with multiple content items. <key> is the zero-based position in the original content array; absent fields do not renumber later items.\",\"Recorded only when output capture is enabled.\",\"This is one item's text, not the complete tool result. It must not be aliased or directly backfilled to gen_ai.tool.call.result; reconstructing the complete result requires aggregation.\"]},\"mcp.tool.result.<key>.content_type\":{brief:\"Legacy content type of an indexed content item in a multi-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.<key>.content_type\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"text\",examples:[\"text\",\"image\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted for results with multiple content items. <key> is the zero-based position in the original content array; absent fields do not renumber later items.\",\"Recorded even when output capture is disabled.\"]},\"mcp.tool.result.<key>.data_size\":{brief:\"Legacy length of the data string in UTF-16 code units of an indexed content item in a multi-item MCP tool result.\",type:\"integer\",keys:[\"mcp.tool.result.<key>.data_size\"],applyScrubbing:{key:\"manual\",reason:\"The length contains no result content.\"},isInOtel:!1,visibility:\"public\",example:4,examples:[4,1024],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted for results with multiple content items. <key> is the zero-based position in the original content array; absent fields do not renumber later items.\",\"Recorded only when output capture is enabled.\",\"The JavaScript SDK records data.length. For base64-encoded image or audio data, this counts encoded characters, not decoded bytes.\"]},\"mcp.tool.result.<key>.mime_type\":{brief:\"Legacy MIME type of an indexed content item in a multi-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.<key>.mime_type\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"image/png\",examples:[\"image/png\",\"audio/wav\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted for results with multiple content items. <key> is the zero-based position in the original content array; absent fields do not renumber later items.\",\"Recorded only when output capture is enabled.\"]},\"mcp.tool.result.<key>.name\":{brief:\"Legacy resource link name of an indexed content item in a multi-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.<key>.name\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"report.txt\",examples:[\"report.txt\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted for results with multiple content items. <key> is the zero-based position in the original content array; absent fields do not renumber later items.\",\"Recorded only when output capture is enabled.\"]},\"mcp.tool.result.<key>.resource_mime_type\":{brief:\"Legacy embedded resource MIME type of an indexed content item in a multi-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.<key>.resource_mime_type\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"text/plain\",examples:[\"text/plain\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted for results with multiple content items. <key> is the zero-based position in the original content array; absent fields do not renumber later items.\",\"Recorded only when output capture is enabled.\"]},\"mcp.tool.result.<key>.resource_uri\":{brief:\"Legacy embedded resource URI of an indexed content item in a multi-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.<key>.resource_uri\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"file:///project/report.txt\",examples:[\"file:///project/report.txt\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted for results with multiple content items. <key> is the zero-based position in the original content array; absent fields do not renumber later items.\",\"Recorded only when output capture is enabled.\"]},\"mcp.tool.result.<key>.uri\":{brief:\"Legacy resource link URI of an indexed content item in a multi-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.<key>.uri\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"file:///project/report.txt\",examples:[\"file:///project/report.txt\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted for results with multiple content items. <key> is the zero-based position in the original content array; absent fields do not renumber later items.\",\"Recorded only when output capture is enabled.\"]},\"mcp.tool.result.mime_type\":{brief:\"Legacy MIME type of the content item in a single-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.mime_type\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"image/png\",examples:[\"image/png\",\"audio/wav\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted only when the result contains exactly one content item.\",\"Recorded only when output capture is enabled.\"]},\"mcp.tool.result.name\":{brief:\"Legacy resource link name of the content item in a single-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.name\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"report.txt\",examples:[\"report.txt\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted only when the result contains exactly one content item.\",\"Recorded only when output capture is enabled.\"]},\"mcp.tool.result.resource_mime_type\":{brief:\"Legacy embedded resource MIME type of the content item in a single-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.resource_mime_type\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"text/plain\",examples:[\"text/plain\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted only when the result contains exactly one content item.\",\"Recorded only when output capture is enabled.\"]},\"mcp.tool.result.resource_uri\":{brief:\"Legacy embedded resource URI of the content item in a single-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.resource_uri\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"file:///project/report.txt\",examples:[\"file:///project/report.txt\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted only when the result contains exactly one content item.\",\"Recorded only when output capture is enabled.\"]},\"mcp.tool.result.uri\":{brief:\"Legacy resource link URI of the content item in a single-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.uri\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"file:///project/report.txt\",examples:[\"file:///project/report.txt\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted only when the result contains exactly one content item.\",\"Recorded only when output capture is enabled.\"]},\"mcp.transport\":{brief:\"MCP transport implementation name, such as the transport class name. This identifies the implementation, not the network transport or application protocol.\",type:\"string\",keys:[\"mcp.transport\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"StdioServerTransport\",examples:[\"StdioServerTransport\",\"CustomHTTPTransport\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Clarified Sentry-specific semantics and removed the incorrect network attribute alias and deprecation\"},{version:\"0.12.0\",prs:[420],description:\"Deprecated in favor of network.transport\"},{version:\"0.3.0\",prs:[171]}]},\"mdc.<key>\":{brief:\"Attributes from the Mapped Diagnostic Context (MDC) present at the moment the log record was created. The MDC is supported by all the most popular logging solutions in the Java ecosystem, and it's usually implemented as a thread-local map that stores context for e.g. a specific request.\",type:\"string\",keys:[\"mdc.<key>\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"mdc.some_key='some_value'\",changelog:[{version:\"0.3.0\",prs:[176]}]},\"messaging.batch.message_count\":{brief:\"The number of messages sent, received, or processed in the scope of the batching operation.\",type:\"integer\",keys:[\"messaging.batch.message_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:10,changelog:[{version:\"0.6.0\",prs:[341],description:\"Added messaging.batch.message_count attribute\"}]},\"messaging.conversation_id\":{brief:'The conversation ID identifying the conversation to which the message belongs, represented as a string. Sometimes called \"Correlation ID\".',type:\"string\",keys:[\"messaging.message.conversation_id\",\"messaging.conversation_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"MyConversationId\",examples:[\"MyConversationId\"],deprecation:{replacement:\"messaging.message.conversation_id\",reason:\"This attribute is being deprecated in favor of messaging.message.conversation_id.\",status:\"backfill\"},aliases:[\"messaging.message.conversation_id\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.conversation_id attribute\"}]},\"messaging.destination\":{brief:\"The message destination name.\",type:\"string\",keys:[\"messaging.destination.name\",\"messaging.destination\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"BestTopic\",deprecation:{replacement:\"messaging.destination.name\",reason:\"This attribute is being deprecated in favor of messaging.destination.name, which is the OTel-aligned replacement.\",status:\"backfill\"},aliases:[\"messaging.destination.name\"],changelog:[{version:\"0.16.0\",prs:[482],description:\"Added messaging.destination attribute, deprecated in favor of messaging.destination.name\"}]},\"messaging.destination.connection\":{brief:\"The message destination connection.\",type:\"string\",keys:[\"messaging.destination.connection\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"BestTopic\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"messaging.destination_kind\":{brief:\"The kind of message destination.\",type:\"string\",keys:[\"messaging.destination_kind\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"topic\",deprecation:{reason:\"Deprecated from OTEL, which now models the destination kind via messaging.operation.type and messaging.destination.name.\"},changelog:[{version:\"0.19.0\",prs:[509],description:\"Added deprecated messaging.destination_kind attribute for parity with legacy OTel instrumentations.\"}]},\"messaging.destination.name\":{brief:\"The message destination name.\",type:\"string\",keys:[\"messaging.destination.name\",\"messaging.destination\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"BestTopic\",aliases:[\"messaging.destination\"],changelog:[{version:\"0.16.0\",prs:[482],description:\"Added messaging.destination as an alias\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"messaging.destination.partition.id\":{brief:\"The identifier of the partition messages are sent to or received from, unique within the messaging.destination.name.\",type:\"string\",keys:[\"messaging.destination.partition.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"1\",changelog:[{version:\"0.19.0\",prs:[474],description:\"Added messaging.destination.partition.id attribute\"}]},\"messaging.kafka.message.key\":{brief:\"Message keys in Kafka are used for grouping alike messages to ensure they're processed on the same partition. They differ from messaging.message.id in that they're not unique. If the key is null, the attribute MUST NOT be set.\",type:\"string\",keys:[\"messaging.kafka.message.key\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"myKey\",changelog:[{version:\"0.19.0\",prs:[474],description:\"Added messaging.kafka.message.key attribute\"}]},\"messaging.kafka.message.tombstone\":{brief:\"A boolean that is true if the message is a tombstone.\",type:\"boolean\",keys:[\"messaging.kafka.message.tombstone\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:!0,changelog:[{version:\"0.19.0\",prs:[474],description:\"Added messaging.kafka.message.tombstone attribute\"}]},\"messaging.kafka.offset\":{brief:\"The offset of a record in the corresponding Kafka partition.\",type:\"integer\",keys:[\"messaging.kafka.offset\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:42,changelog:[{version:\"0.19.0\",prs:[474],description:\"Added messaging.kafka.offset attribute\"}]},\"messaging.message.body.size\":{brief:\"The size of the message body in bytes.\",type:\"integer\",keys:[\"messaging.message.body.size\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:839,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}],searchAlias:{name:\"messaging.message.body.size\",type:\"byte\"}},\"messaging.message.conversation_id\":{brief:'The conversation ID identifying the conversation to which the message belongs, represented as a string. Sometimes called \"Correlation ID\".',type:\"string\",keys:[\"messaging.message.conversation_id\",\"messaging.conversation_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"MyConversationId\",aliases:[\"messaging.conversation_id\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.conversation_id as an alias\"},{version:\"0.16.0\",prs:[468],description:\"Added messaging.message.conversation_id attribute\"}]},\"messaging.message.envelope.size\":{brief:\"The size of the message body and metadata in bytes.\",type:\"integer\",keys:[\"messaging.message.envelope.size\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:1045,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"messaging.message.id\":{brief:\"A value used by the messaging system as an identifier for the message, represented as a string.\",type:\"string\",keys:[\"messaging.message.id\",\"messaging.message_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"f47ac10b58cc4372a5670e02b2c3d479\",aliases:[\"messaging.message_id\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.message_id as an alias\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"messaging.message_id\":{brief:\"A value used by the messaging system as an identifier for the message, represented as a string.\",type:\"string\",keys:[\"messaging.message.id\",\"messaging.message_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"452a7c7c7c7048c2f887f0e7\",examples:[\"452a7c7c7c7048c2f887f0e7\"],deprecation:{replacement:\"messaging.message.id\",reason:\"This attribute is being deprecated in favor of messaging.message.id.\",status:\"backfill\"},aliases:[\"messaging.message.id\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.message_id attribute\"}]},\"messaging.message.receive.latency\":{brief:\"The latency between when the message was published and received.\",type:\"integer\",keys:[\"messaging.message.receive.latency\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1732847252,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}],searchAlias:{name:\"messaging.message.receive.latency\",type:\"millisecond\"}},\"messaging.message.retry.count\":{brief:\"The amount of attempts to send the message.\",type:\"integer\",keys:[\"messaging.message.retry.count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"messaging.operation\":{brief:\"The name of the messaging operation being performed.\",type:\"string\",keys:[\"messaging.operation.name\",\"messaging.operation\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"publish\",examples:[\"publish\"],deprecation:{replacement:\"messaging.operation.name\",reason:\"This attribute is being deprecated in favor of messaging.operation.name.\",status:\"backfill\"},aliases:[\"messaging.operation.name\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.operation attribute\"}]},\"messaging.operation.name\":{brief:\"The name of the messaging operation being performed\",type:\"string\",keys:[\"messaging.operation.name\",\"messaging.operation\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"send\",aliases:[\"messaging.operation\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.operation as an alias\"},{version:\"0.11.0\",prs:[392],description:\"Added messaging.operation.name attribute\"}]},\"messaging.operation.type\":{brief:\"A string identifying the type of the messaging operation\",type:\"string\",keys:[\"messaging.operation.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"create\",changelog:[{version:\"0.1.0\",prs:[51,127]}]},\"messaging.protocol\":{brief:\"OSI application layer or non-OSI equivalent.\",type:\"string\",keys:[\"network.protocol.name\",\"messaging.protocol\",\"net.protocol.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"AMQP\",examples:[\"AMQP\"],deprecation:{replacement:\"network.protocol.name\",reason:\"This attribute is being deprecated in favor of network.protocol.name.\",status:\"backfill\"},aliases:[\"network.protocol.name\",\"net.protocol.name\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Removed the semantically distinct mcp.resource.protocol alias\"},{version:\"0.21.0\",prs:[581],description:\"Added messaging.protocol attribute\"}]},\"messaging.protocol_version\":{brief:\"The actual version of the protocol used for network communication.\",type:\"string\",keys:[\"network.protocol.version\",\"http.flavor\",\"messaging.protocol_version\",\"net.protocol.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"0.9.1\",examples:[\"0.9.1\"],deprecation:{replacement:\"network.protocol.version\",reason:\"This attribute is being deprecated in favor of network.protocol.version.\",status:\"backfill\"},aliases:[\"network.protocol.version\",\"http.flavor\",\"net.protocol.version\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.protocol_version attribute\"}]},\"messaging.rabbitmq.destination.routing_key\":{brief:\"RabbitMQ message routing key.\",type:\"string\",keys:[\"messaging.rabbitmq.destination.routing_key\",\"messaging.rabbitmq.routing_key\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"myKey\",aliases:[\"messaging.rabbitmq.routing_key\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.rabbitmq.routing_key as an alias\"},{version:\"0.16.0\",prs:[468],description:\"Added messaging.rabbitmq.destination.routing_key attribute\"}]},\"messaging.rabbitmq.routing_key\":{brief:\"RabbitMQ message routing key.\",type:\"string\",keys:[\"messaging.rabbitmq.destination.routing_key\",\"messaging.rabbitmq.routing_key\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"myKey\",examples:[\"myKey\"],deprecation:{replacement:\"messaging.rabbitmq.destination.routing_key\",reason:\"This attribute is being deprecated in favor of messaging.rabbitmq.destination.routing_key.\",status:\"backfill\"},aliases:[\"messaging.rabbitmq.destination.routing_key\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.rabbitmq.routing_key attribute\"}]},\"messaging.system\":{brief:\"The messaging system as identified by the client instrumentation.\",type:\"string\",keys:[\"messaging.system\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"activemq\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"messaging.url\":{brief:\"The connection string of the messaging broker.\",type:\"string\",keys:[\"url.full\",\"aws.request.url\",\"http.url\",\"messaging.url\",\"url\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"amqp://guest:guest@localhost:5672\",examples:[\"amqp://guest:guest@localhost:5672\"],deprecation:{replacement:\"url.full\",reason:\"This attribute is being deprecated in favor of url.full.\",status:\"backfill\"},aliases:[\"url.full\",\"http.url\",\"url\",\"aws.request.url\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.url attribute\"}]},method:{brief:\"The HTTP method used.\",type:\"string\",keys:[\"http.request.method\",\"http.method\",\"http.request_method\",\"method\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"GET\",deprecation:{replacement:\"http.request.method\",status:\"normalize\"},aliases:[\"http.request.method\",\"http.request_method\",\"http.method\"],changelog:[{version:\"0.19.0\",prs:[497],description:\"Configured normalization\"},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"middleware.name\":{brief:\"The name of the middleware.\",type:\"string\",keys:[\"middleware.name\",\"django.middleware_name\",\"litestar.middleware_name\",\"starlette.middleware_name\",\"starlite.middleware_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"AuthenticationMiddleware\",aliases:[\"django.middleware_name\",\"starlite.middleware_name\",\"litestar.middleware_name\",\"starlette.middleware_name\"],changelog:[{version:\"0.19.0\",prs:[485,486,519,520],description:\"Added django.middleware_name, starlite.middleware_name, litestar.middleware_name and starlette.middleware_name as aliases\"},{version:\"0.6.0\",prs:[336],description:\"Added middleware.name attribute\"}]},\"navigation.origin\":{brief:\"The origin of the navigation (usually client side router navigations). Should preferrably parameterized template (like url.template) or a URL path otherwise.\",type:\"string\",keys:[\"router.navigation.origin\",\"navigation.origin\",\"sentry.sveltekit.navigation.from\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"/users/:id\",deprecation:{replacement:\"router.navigation.origin\",reason:\"Moved to the router.* namespace to separate client-side router navigations from browser navigations.\",status:\"backfill\"},aliases:[\"router.navigation.origin\",\"sentry.sveltekit.navigation.from\"],changelog:[{version:\"0.22.0\",prs:[600],description:\"Deprecated in favor of router.navigation.origin\"},{version:\"0.16.0\",prs:[467],description:\"Added navigation.origin attribute\"}]},\"navigation.route.id\":{brief:\"The identifier of the matched client-side route, as assigned by the routing framework (e.g., vue-router name, react-router id).\",type:\"string\",keys:[\"router.navigation.route.id\",\"navigation.route.id\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"AboutView\",deprecation:{replacement:\"router.navigation.route.id\",reason:\"Moved to the router.* namespace to separate client-side router navigations from browser navigations.\",status:\"backfill\"},aliases:[\"router.navigation.route.id\"],changelog:[{version:\"0.22.0\",prs:[600],description:\"Deprecated in favor of router.navigation.route.id\"},{version:\"0.16.0\",prs:[468],description:\"Added navigation.route.id attribute\"}]},\"navigation.type\":{brief:\"The type of navigation done by a client-side router.\",type:\"string\",keys:[\"router.navigation.type\",\"navigation.type\",\"sentry.sveltekit.navigation.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"router.push\",deprecation:{replacement:\"router.navigation.type\",reason:\"Moved to the router.* namespace to separate client-side router navigations from browser navigations.\",status:\"backfill\"},aliases:[\"router.navigation.type\",\"sentry.sveltekit.navigation.type\"],changelog:[{version:\"0.22.0\",prs:[600],description:\"Deprecated in favor of router.navigation.type\"},{version:\"0.16.0\",prs:[467],description:\"Added new deprecated alias\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"nel.elapsed_time\":{brief:\"The elapsed number of milliseconds between the start of the resource fetch and when it was completed or aborted by the user agent.\",type:\"integer\",keys:[\"nel.elapsed_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:100,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[68]}]},\"nel.phase\":{brief:'If request failed, the phase of its network error. If request succeeded, \"application\".',type:\"string\",keys:[\"nel.phase\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"application\",changelog:[{version:\"0.1.0\",prs:[68,127]}]},\"nel.referrer\":{brief:\"request's referrer, as determined by the referrer policy associated with its client.\",type:\"string\",keys:[\"nel.referrer\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"https://example.com/foo?bar=baz\",changelog:[{version:\"0.1.0\",prs:[68,127]}]},\"nel.sampling_fraction\":{brief:\"The sampling fraction used to determine if the request should be sampled.\",type:\"double\",keys:[\"nel.sampling_fraction\",\"nel.sampling_function\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.5,examples:[.5],aliases:[\"nel.sampling_function\"],changelog:[{version:\"0.26.0\",prs:[668],description:\"Added nel.sampling_fraction attribute\"}]},\"nel.sampling_function\":{brief:\"The sampling function used to determine if the request should be sampled.\",type:\"double\",keys:[\"nel.sampling_fraction\",\"nel.sampling_function\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.5,deprecation:{replacement:\"nel.sampling_fraction\",reason:\"The correct name of this attribute is nel.sampling_fraction\",status:\"backfill\"},aliases:[\"nel.sampling_fraction\"],changelog:[{version:\"0.26.0\",prs:[668],description:\"Deprecated in favor of nel.sampling_fraction\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[68]}]},\"nel.type\":{brief:'If request failed, the type of its network error. If request succeeded, \"ok\".',type:\"string\",keys:[\"nel.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"dns.unreachable\",changelog:[{version:\"0.1.0\",prs:[68,127]}]},\"network.connection.effective_type\":{brief:\"Specifies the effective type of the current connection (e.g. slow-2g, 2g, 3g, 4g).\",type:\"string\",keys:[\"network.connection.effective_type\",\"effectiveConnectionType\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"4g\",aliases:[\"effectiveConnectionType\"],changelog:[{version:\"0.5.0\",prs:[279],description:\"Added attribute network.connection.effective_type to be used instead of effectiveConnectionType\"}]},\"network.connection.rtt\":{brief:\"Specifies the estimated effective round-trip time of the current connection, in milliseconds.\",type:\"integer\",keys:[\"network.connection.rtt\",\"connection.rtt\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:100,aliases:[\"connection.rtt\"],changelog:[{version:\"0.5.0\",prs:[279],description:\"Added attribute network.connection.rtt to be used instead of connection.rtt\"}]},\"network.connection.type\":{brief:\"Specifies the type of the current connection (e.g. wifi, ethernet, cellular , etc).\",type:\"string\",keys:[\"network.connection.type\",\"connectionType\",\"device.connection_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"wifi\",aliases:[\"device.connection_type\",\"connectionType\"],changelog:[{version:\"0.5.0\",prs:[279],description:\"Added attribute network.connection.type to be used instead of connectionType\"}]},\"network.local.address\":{brief:\"Local address of the network connection - IP address or Unix domain socket name.\",type:\"string\",keys:[\"network.local.address\",\"net.host.ip\",\"net.sock.host.addr\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"10.1.2.80\",examples:[\"10.1.2.80\",\"/var/run/my.sock\"],aliases:[\"net.host.ip\",\"net.sock.host.addr\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"network.local.port\":{brief:\"Local port number of the network connection.\",type:\"integer\",keys:[\"network.local.port\",\"net.sock.host.port\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:65400,aliases:[\"net.sock.host.port\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"network.peer.address\":{brief:\"Peer address of the network connection - IP address or Unix domain socket name.\",type:\"string\",keys:[\"network.peer.address\",\"net.peer.ip\",\"net.sock.peer.addr\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"10.1.2.80\",aliases:[\"net.peer.ip\",\"net.sock.peer.addr\"],changelog:[{version:\"0.1.0\",prs:[108,127]},{version:\"0.0.0\"}]},\"network.peer.port\":{brief:\"Peer port number of the network connection.\",type:\"integer\",keys:[\"network.peer.port\",\"net.sock.peer.port\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:65400,aliases:[\"net.sock.peer.port\"],changelog:[{version:\"0.21.0\",prs:[588],description:\"Added net.sock.peer.port as an alias\"},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"network.protocol.name\":{brief:\"OSI application layer or non-OSI equivalent.\",type:\"string\",keys:[\"network.protocol.name\",\"messaging.protocol\",\"net.protocol.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"http\",examples:[\"http\"],aliases:[\"net.protocol.name\",\"messaging.protocol\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Removed the semantically distinct mcp.resource.protocol alias\"},{version:\"0.21.0\",prs:[581],description:\"Added messaging.protocol as an alias\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"network.protocol.version\":{brief:\"The actual version of the protocol used for network communication.\",type:\"string\",keys:[\"network.protocol.version\",\"http.flavor\",\"messaging.protocol_version\",\"net.protocol.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"1.1\",aliases:[\"http.flavor\",\"net.protocol.version\",\"messaging.protocol_version\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.protocol_version as an alias\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"network.transport\":{brief:\"OSI transport layer or inter-process communication method.\",type:\"string\",keys:[\"network.transport\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"tcp\",examples:[\"tcp\"],aliases:[\"net.transport\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Removed the semantically distinct mcp.transport alias\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"network.type\":{brief:\"OSI network layer or non-OSI equivalent.\",type:\"string\",keys:[\"network.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"ipv4\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"net.host.ip\":{brief:\"Local address of the network connection - IP address or Unix domain socket name.\",type:\"string\",keys:[\"network.local.address\",\"net.host.ip\",\"net.sock.host.addr\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"192.168.0.1\",deprecation:{replacement:\"network.local.address\",status:\"backfill\"},aliases:[\"network.local.address\",\"net.sock.host.addr\"],changelog:[{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"net.host.name\":{brief:\"Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\",type:\"string\",keys:[\"server.address\",\"address\",\"http.server_name\",\"net.host.name\",\"server_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",deprecation:{replacement:\"server.address\",status:\"backfill\"},aliases:[\"address\",\"server.address\",\"http.server_name\",\"http.host\",\"server_name\",\"net.peer.name\"],changelog:[{version:\"0.24.0\",prs:[647],description:\"Added server_name as an alias\"},{version:\"0.21.0\",prs:[588,602],description:\"Added net.peer.name as an alias\"},{version:\"0.19.0\",prs:[534],description:\"Added address as an alias\"},{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"net.host.port\":{brief:\"Server port number.\",type:\"integer\",keys:[\"server.port\",\"net.host.port\",\"port\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:1337,deprecation:{replacement:\"server.port\",status:\"backfill\"},aliases:[\"server.port\",\"port\"],changelog:[{version:\"0.19.0\",prs:[532],description:\"Added port as an alias\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"net.peer.ip\":{brief:\"Peer address of the network connection - IP address or Unix domain socket name.\",type:\"string\",keys:[\"network.peer.address\",\"net.peer.ip\",\"net.sock.peer.addr\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"192.168.0.1\",deprecation:{replacement:\"network.peer.address\",status:\"backfill\"},aliases:[\"network.peer.address\",\"net.sock.peer.addr\"],changelog:[{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"net.peer.name\":{brief:\"Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\",type:\"string\",keys:[\"net.peer.name\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",deprecation:{replacement:\"server.address\",reason:\"Deprecated, use server.address on client spans and client.address on server spans.\"},aliases:[\"address\",\"server.address\",\"http.server_name\",\"net.host.name\",\"http.host\",\"server_name\"],changelog:[{version:\"0.24.0\",prs:[647],description:\"Added server_name as an alias\"},{version:\"0.21.0\",prs:[588,602],description:\"Added the server.address alias group to net.peer.name\"},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"net.peer.port\":{brief:\"Peer port number.\",type:\"integer\",keys:[\"net.peer.port\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:1337,deprecation:{replacement:\"server.port\",reason:\"Deprecated, use server.port on client spans and client.port on server spans.\"},changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"net.protocol.name\":{brief:\"OSI application layer or non-OSI equivalent.\",type:\"string\",keys:[\"network.protocol.name\",\"messaging.protocol\",\"net.protocol.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"http\",examples:[\"http\"],deprecation:{replacement:\"network.protocol.name\",status:\"backfill\"},aliases:[\"network.protocol.name\",\"messaging.protocol\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Removed the semantically distinct mcp.resource.protocol alias\"},{version:\"0.21.0\",prs:[581],description:\"Added messaging.protocol as an alias\"},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"net.protocol.version\":{brief:\"The actual version of the protocol used for network communication.\",type:\"string\",keys:[\"network.protocol.version\",\"http.flavor\",\"messaging.protocol_version\",\"net.protocol.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"1.1\",deprecation:{replacement:\"network.protocol.version\",status:\"backfill\"},aliases:[\"network.protocol.version\",\"http.flavor\",\"messaging.protocol_version\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.protocol_version as an alias\"},{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"net.sock.family\":{brief:\"OSI transport and network layer\",type:\"string\",keys:[\"net.sock.family\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"inet\",deprecation:{replacement:\"network.transport\",reason:\"Deprecated, use network.transport and network.type.\"},changelog:[{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"net.sock.host.addr\":{brief:\"Local address of the network connection mapping to Unix domain socket name.\",type:\"string\",keys:[\"network.local.address\",\"net.host.ip\",\"net.sock.host.addr\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"/var/my.sock\",deprecation:{replacement:\"network.local.address\",status:\"backfill\"},aliases:[\"network.local.address\",\"net.host.ip\"],changelog:[{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"net.sock.host.port\":{brief:\"Local port number of the network connection.\",type:\"integer\",keys:[\"network.local.port\",\"net.sock.host.port\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:8080,deprecation:{replacement:\"network.local.port\",status:\"backfill\"},aliases:[\"network.local.port\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"net.sock.peer.addr\":{brief:\"Peer address of the network connection - IP address\",type:\"string\",keys:[\"network.peer.address\",\"net.peer.ip\",\"net.sock.peer.addr\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"192.168.0.1\",deprecation:{replacement:\"network.peer.address\",status:\"backfill\"},aliases:[\"network.peer.address\",\"net.peer.ip\"],changelog:[{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"net.sock.peer.name\":{brief:\"Peer address of the network connection - Unix domain socket name\",type:\"string\",keys:[\"net.sock.peer.name\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"/var/my.sock\",deprecation:{reason:\"Deprecated from OTEL, no replacement at this time\"},changelog:[{version:\"0.1.0\",prs:[61,119,127]},{version:\"0.0.0\"}]},\"net.sock.peer.port\":{brief:\"Peer port number of the network connection.\",type:\"integer\",keys:[\"network.peer.port\",\"net.sock.peer.port\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:8080,deprecation:{replacement:\"network.peer.port\",status:\"backfill\"},aliases:[\"network.peer.port\"],changelog:[{version:\"0.21.0\",prs:[588],description:\"Added network.peer.port as an alias\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"net.transport\":{brief:\"OSI transport layer or inter-process communication method.\",type:\"string\",keys:[\"net.transport\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"tcp\",examples:[\"tcp\"],deprecation:{replacement:\"network.transport\",reason:\"This attribute is being deprecated in favor of network.transport. The values change from ip_tcp and ip_udp to tcp and udp, so the old value cannot be copied over.\"},aliases:[\"network.transport\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Removed the semantically distinct mcp.transport alias\"},{version:\"0.21.0\",prs:[588],description:\"Set net.transport to _status null, because its values change on the replacement\"},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"os.build\":{brief:\"The build ID of the operating system.\",type:\"string\",keys:[\"os.build_id\",\"os.build\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1234567890\",deprecation:{replacement:\"os.build_id\",status:\"backfill\"},aliases:[\"os.build_id\"],changelog:[{version:\"0.5.0\",prs:[301],description:\"Added os.build attribute, deprecated in favor of os.build_id\"}]},\"os.build_id\":{brief:\"The build ID of the operating system.\",type:\"string\",keys:[\"os.build_id\",\"os.build\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"1234567890\",aliases:[\"os.build\"],changelog:[{version:\"0.5.0\",prs:[301],description:\"Added os.build as alias\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"os.description\":{brief:\"Human readable (not intended to be parsed) OS version information, like e.g. reported by ver or lsb_release -a commands.\",type:\"string\",keys:[\"os.description\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Ubuntu 18.04.1 LTS\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"os.kernel_version\":{brief:\"An independent kernel version string. Typically the entire output of the `uname` syscall.\",type:\"string\",keys:[\"os.kernel_version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"20.2.0\",changelog:[{version:\"0.5.0\",prs:[301],description:\"Added os.kernel_version attribute\"}]},\"os.name\":{brief:\"Human readable operating system name.\",type:\"string\",keys:[\"os.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Ubuntu\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"os.raw_description\":{brief:\"An unprocessed description string obtained by the operating system. For some well-known runtimes, Sentry will attempt to parse `name` and `version` from this string, if they are not explicitly given.\",type:\"string\",keys:[\"os.raw_description\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Ubuntu 22.04.4 LTS (Jammy Jellyfish)\",changelog:[{version:\"0.5.0\",prs:[301],description:\"Added os.raw_description attribute\"}]},\"os.rooted\":{brief:\"Whether the operating system has been jailbroken or rooted.\",type:\"boolean\",keys:[\"os.rooted\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.5.0\",prs:[301],description:\"Added os.rooted attribute\"}]},\"os.theme\":{brief:\"Whether the OS runs in dark mode or light mode.\",type:\"string\",keys:[\"os.theme\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"dark\",changelog:[{version:\"0.5.0\",prs:[301],description:\"Added os.theme attribute\"}]},\"os.type\":{brief:\"The operating system type.\",type:\"string\",keys:[\"os.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"linux\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"os.version\":{brief:\"The version of the operating system.\",type:\"string\",keys:[\"os.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"18.04.2\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"otel.kind\":{brief:\"The span kind (https://opentelemetry.io/docs/concepts/signals/traces/#span-kind). Deprecated, use `sentry.kind` instead.\",type:\"string\",keys:[\"sentry.kind\",\"span.kind\",\"otel.kind\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"SERVER\",deprecation:{replacement:\"sentry.kind\",reason:\"Deprecated in favor of sentry.kind\",status:\"backfill\"},aliases:[\"sentry.kind\"],changelog:[{version:\"0.13.0\",prs:[440],description:\"Added otel.kind attribute\"}]},\"otel.scope.name\":{brief:\"The name of the instrumentation scope - (InstrumentationScope.Name in OTLP).\",type:\"string\",keys:[\"otel.scope.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"io.opentelemetry.contrib.mongodb\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"otel.scope.version\":{brief:\"The version of the instrumentation scope - (InstrumentationScope.Version in OTLP).\",type:\"string\",keys:[\"otel.scope.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"2.4.5\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"otel.status_code\":{brief:\"Name of the code, either \\u201COK\\u201D or \\u201CERROR\\u201D. MUST NOT be set if the status code is UNSET.\",type:\"string\",keys:[\"otel.status_code\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"OK\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"otel.status_description\":{brief:\"Description of the Status if it has a value, otherwise not set.\",type:\"string\",keys:[\"otel.status_description\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"resource not found\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"params.<key>\":{brief:\"Decoded parameters extracted from a URL path. Usually added by client-side routing frameworks like vue-router.\",type:\"string\",keys:[\"params.<key>\",\"url.path.parameter.<key>\",\"url.path.params.<key>\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"params.id='123'\",aliases:[\"url.path.parameter.<key>\",\"url.path.params.<key>\"],changelog:[{version:\"0.21.0\",prs:[586],description:\"Added url.path.params.<key> as an alias\"},{version:\"0.1.0\",prs:[103]}]},\"performance.activationStart\":{brief:\"The time between initiating a navigation to a page and the browser activating the page\",type:\"double\",keys:[\"browser.performance.navigation.activation_start\",\"performance.activationStart\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1.983,deprecation:{replacement:\"browser.performance.navigation.activation_start\",reason:\"The activationStart is now recorded as the browser.performance.navigation.activation_start attribute.\",status:\"backfill\"},aliases:[\"browser.performance.navigation.activation_start\"],changelog:[{version:\"0.5.0\",prs:[321],description:\"Added performance.activationStart attribute\"}]},\"performance.timeOrigin\":{brief:\"The browser's performance.timeOrigin timestamp representing the time when the pageload was initiated\",type:\"double\",keys:[\"browser.performance.time_origin\",\"performance.timeOrigin\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1776185678886e-3,deprecation:{replacement:\"browser.performance.time_origin\",reason:\"The timeOrigin is now recorded as the browser.performance.time_origin attribute.\",status:\"backfill\"},aliases:[\"browser.performance.time_origin\"],changelog:[{version:\"0.5.0\",prs:[321],description:\"Added performance.timeOrigin attribute\"}]},port:{brief:\"The destination port for a TCP connection.\",type:\"integer\",keys:[\"server.port\",\"net.host.port\",\"port\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1337,examples:[1337],deprecation:{replacement:\"server.port\",reason:\"Old namespace-less attribute, to be replaced with server.port for span-first future\",status:\"backfill\"},aliases:[\"server.port\",\"net.host.port\"],changelog:[{version:\"0.19.0\",prs:[532],description:\"Added port attribute\"}]},previous_route:{brief:\"Also used by mobile SDKs to indicate the previous route in the application.\",type:\"string\",keys:[\"previous_route\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"HomeScreen\",changelog:[{version:\"0.1.0\",prs:[74]},{version:\"0.0.0\"}]},\"process.command_args\":{brief:\"All the command arguments (including the command/executable itself) as received by the process.\",type:\"string[]\",keys:[\"process.command_args\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:[\"cmd/otecol\",\"--config=config.yaml\"],changelog:[{version:\"0.6.0\",prs:[327],description:\"Added process.command_args attribute\"}]},\"process.executable.name\":{brief:\"The name of the executable that started the process.\",type:\"string\",keys:[\"process.executable.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"getsentry\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"process.pid\":{brief:\"The process ID of the running process.\",type:\"integer\",keys:[\"process.pid\",\"subprocess.pid\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:12345,aliases:[\"subprocess.pid\"],changelog:[{version:\"0.19.0\",prs:[487],description:\"Added subprocess.pid as an alias\"},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"process.runtime.description\":{brief:\"An additional description about the runtime of the process, for example a specific vendor customization of the runtime environment. Equivalent to `raw_description` in the Sentry runtime context.\",type:\"string\",keys:[\"process.runtime.description\",\"runtime.raw_description\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Eclipse OpenJ9 VM openj9-0.21.0\",aliases:[\"runtime.raw_description\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"process.runtime.engine.name\":{brief:\"The name of the runtime engine.\",type:\"string\",keys:[\"process.runtime.engine.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"v8\",changelog:[{version:\"0.0.0\"}]},\"process.runtime.engine.version\":{brief:\"The version of the runtime engine.\",type:\"string\",keys:[\"process.runtime.engine.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"12.9.202.13-rusty\",changelog:[{version:\"0.0.0\"}]},\"process.runtime.name\":{brief:\"The name of the runtime. Equivalent to `name` in the Sentry runtime context.\",type:\"string\",keys:[\"process.runtime.name\",\"runtime.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"node\",aliases:[\"runtime.name\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"process.runtime.version\":{brief:\"The version of the runtime of this process, as returned by the runtime without modification. Equivalent to `version` in the Sentry runtime context.\",type:\"string\",keys:[\"process.runtime.version\",\"runtime.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"18.04.2\",aliases:[\"runtime.version\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},profile_id:{brief:\"The ID of the Sentry profile the span is associated with. This is only meaningful for transaction-based profiling.\",type:\"string\",keys:[\"sentry.profile_id\",\"profile.id\",\"profile_id\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"123e4567e89b12d3a456426614174000\",deprecation:{replacement:\"sentry.profile_id\",status:\"normalize\"},aliases:[\"sentry.profile_id\"],changelog:[{version:\"0.19.0\",prs:[497],description:\"Added profile_id attribute\"}]},query:{brief:\"The database query being executed.\",type:\"string\",keys:[\"db.query.text\",\"db.statement\",\"query\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"SELECT * FROM users WHERE id = $1\",examples:[\"SELECT * FROM users WHERE id = $1\"],deprecation:{replacement:\"db.query.text\",reason:\"While this attribute never specifically required parameterization, the replacement, db.query.text, does.\",status:\"backfill\"},aliases:[\"db.query.text\",\"db.statement\"],changelog:[{version:\"0.19.0\",prs:[530],description:\"Added query attribute\"}]},\"query.<key>\":{brief:\"An item in a query string. Usually added by client-side routing frameworks like vue-router.\",type:\"string\",keys:[\"query.<key>\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"query.id='123'\",deprecation:{replacement:\"url.query\",reason:\"Instead of sending items individually in query.<key>, they should be sent all together with url.query.\"},changelog:[{version:\"0.1.0\",prs:[103]}]},\"react_native.architecture\":{brief:\"The React Native architecture the app is running on. `new` for the New Architecture, where native modules are resolved as TurboModules through `TurboModuleRegistry`, `legacy` for the Old Architecture bridge.\",type:\"string\",keys:[\"react_native.architecture\",\"turbo_module.arch\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"new\",examples:[\"new\",\"legacy\"],aliases:[\"turbo_module.arch\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added react_native.architecture attribute\"}]},\"react_native.module.call.count\":{brief:\"The number of native module calls observed during the lifetime of the span.\",type:\"integer\",keys:[\"react_native.module.call.count\",\"turbo_module.total_call_count\",\"turbo_modules.total_call_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:42,examples:[42],aliases:[\"turbo_module.total_call_count\",\"turbo_modules.total_call_count\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added react_native.module.call.count attribute\"}]},\"react_native.module.call.distinct_count\":{brief:\"The number of distinct native module and method pairs called during the lifetime of the span. Useful as a cardinality signal when the per-method breakdown has been truncated.\",type:\"integer\",keys:[\"react_native.module.call.distinct_count\",\"turbo_module.unique_methods\",\"turbo_modules.unique_methods\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:7,examples:[7],aliases:[\"turbo_module.unique_methods\",\"turbo_modules.unique_methods\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added react_native.module.call.distinct_count attribute\"}]},\"react_native.module.duration.max\":{brief:\"The duration of the slowest single native module call observed during the lifetime of the span, in milliseconds.\",type:\"double\",keys:[\"react_native.module.duration.max\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:512.5,examples:[512.5],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added react_native.module.duration.max attribute\"}]},\"react_native.module.duration.total\":{brief:\"The combined wall-clock duration of all native module calls observed during the lifetime of the span, in milliseconds. Calls overlap, so this can exceed the span duration.\",type:\"double\",keys:[\"react_native.module.duration.total\",\"turbo_module.total_duration_ms\",\"turbo_modules.total_duration_ms\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:128.45,examples:[128.45],aliases:[\"turbo_module.total_duration_ms\",\"turbo_modules.total_duration_ms\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added react_native.module.duration.total attribute\"}]},\"react_native.module.error.count\":{brief:\"The number of native module calls that failed during the lifetime of the span. A call counts as failed when it threw, rejected, or \\u2014 on the Old Architecture bridge only \\u2014 invoked its failure callback.\",type:\"integer\",keys:[\"react_native.module.error.count\",\"turbo_module.total_error_count\",\"turbo_modules.total_error_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2,examples:[2],aliases:[\"turbo_module.total_error_count\",\"turbo_modules.total_error_count\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added react_native.module.error.count attribute\"}]},\"react_native.module.kind\":{brief:\"Whether the native module call completed synchronously or reported completion later through a Promise or a callback. One of `sync` or `async`.\",type:\"string\",keys:[\"react_native.module.kind\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"sync\",examples:[\"sync\",\"async\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added react_native.module.kind attribute\"}]},\"react_native.module.method\":{brief:\"The name of the native module method that was called.\",type:\"string\",keys:[\"react_native.module.method\",\"turbo_module.method\"],applyScrubbing:{key:\"manual\",reason:\"Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable\"},isInOtel:!1,visibility:\"public\",example:\"getUniqueId\",examples:[\"getUniqueId\"],aliases:[\"turbo_module.method\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added react_native.module.method attribute\"}]},\"react_native.module.name\":{brief:\"The name of the native module the call was dispatched to. On the New Architecture this is the TurboModule name, on the Old Architecture the `NativeModules` key.\",type:\"string\",keys:[\"react_native.module.name\",\"turbo_module.name\"],applyScrubbing:{key:\"manual\",reason:\"Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable\"},isInOtel:!1,visibility:\"public\",example:\"RNDeviceInfo\",examples:[\"RNDeviceInfo\"],aliases:[\"turbo_module.name\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added react_native.module.name attribute\"}]},\"react_native.module.top.duration\":{brief:\"The total duration attributed to `react_native.module.top.name`, in milliseconds.\",type:\"double\",keys:[\"react_native.module.top.duration\",\"turbo_module.top_module_duration_ms\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:87.25,examples:[87.25],aliases:[\"turbo_module.top_module_duration_ms\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added react_native.module.top.duration attribute\"}]},\"react_native.module.top.name\":{brief:\"The native module and method that accounted for the most total duration during the lifetime of the span, formatted as `<module>.<method>`.\",type:\"string\",keys:[\"react_native.module.top.name\",\"turbo_module.top_module\"],applyScrubbing:{key:\"manual\",reason:\"Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable\"},isInOtel:!1,visibility:\"public\",example:\"RNDeviceInfo.getUniqueId\",examples:[\"RNDeviceInfo.getUniqueId\"],aliases:[\"turbo_module.top_module\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added react_native.module.top.name attribute\"}]},\"react.version\":{brief:\"The version of the React framework\",type:\"string\",keys:[\"react.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"18.2.0\",changelog:[{version:\"0.7.0\",prs:[368],description:\"Added react.version attribute\"}]},\"redis.command\":{brief:\"The name of the Redis operation being executed.\",type:\"string\",keys:[\"db.operation.name\",\"cloudflare.d1.query_type\",\"db.operation\",\"redis.command\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"SELECT\",examples:[\"SELECT\"],deprecation:{replacement:\"db.operation.name\",status:\"backfill\"},aliases:[\"cloudflare.d1.query_type\",\"db.operation.name\",\"db.operation\"],changelog:[{version:\"0.19.0\",prs:[531],description:\"Added redis.command attribute\"}]},\"redis.key\":{brief:\"The key the Redis command is operating on.\",type:\"string\",keys:[\"db.redis.key\",\"redis.key\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"user:2047:city\",deprecation:{replacement:\"db.redis.key\",reason:\"This attribute is being deprecated in favor of db.redis.key, which is the preferred replacement.\",status:\"backfill\"},aliases:[\"db.redis.key\"],changelog:[{version:\"0.19.0\",prs:[484],description:\"Added redis.key attribute, deprecated in favor of db.redis.key\"}]},release:{brief:\"The sentry release.\",type:\"string\",keys:[\"sentry.release\",\"release\",\"service.version\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"production\",deprecation:{replacement:\"sentry.release\",status:\"normalize\"},aliases:[\"sentry.release\"],changelog:[{version:\"0.19.0\",prs:[497],description:\"Configured normalization\"},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"remix.action_form_data.<key>\":{brief:\"Remix form data, <key> being the form data key, the value being the form data value.\",type:\"string\",keys:[\"remix.action_form_data.<key>\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"http.response.header.text='test'\",changelog:[{version:\"0.1.0\",prs:[103]}]},replayId:{brief:\"The id of the sentry replay.\",type:\"string\",keys:[\"replayId\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"123e4567e89b12d3a456426614174000\",deprecation:{replacement:\"sentry.replay_id\"},aliases:[\"sentry.replay_id\"],changelog:[{version:\"0.24.0\",prs:[401]}]},replay_id:{brief:\"The id of the sentry replay.\",type:\"string\",keys:[\"sentry.replay_id\",\"replay.id\",\"replay_id\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"123e4567e89b12d3a456426614174000\",deprecation:{replacement:\"sentry.replay_id\",status:\"normalize\"},aliases:[\"sentry.replay_id\"],changelog:[{version:\"0.19.0\",prs:[497],description:\"Configured normalization\"},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"resource.deployment.environment\":{brief:\"The software deployment environment name.\",type:\"string\",keys:[\"sentry.environment\",\"environment\",\"resource.deployment.environment\",\"resource.deployment.environment.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"production\",deprecation:{replacement:\"sentry.environment\",status:\"backfill\"},changelog:[{version:\"0.5.0\",prs:[266]}]},\"resource.deployment.environment.name\":{brief:\"The software deployment environment name.\",type:\"string\",keys:[\"sentry.environment\",\"environment\",\"resource.deployment.environment\",\"resource.deployment.environment.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"production\",deprecation:{replacement:\"sentry.environment\",status:\"backfill\"},changelog:[{version:\"0.3.1\",prs:[196]}]},\"resource.render_blocking_status\":{brief:\"The render blocking status of the resource.\",type:\"string\",keys:[\"resource.render_blocking_status\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"non-blocking\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},route:{brief:\"The matched route, that is, the path template in the format used by the respective server framework. Also used by mobile SDKs to indicate the current route in the application.\",type:\"string\",keys:[\"route\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"App\\\\Controller::indexAction\",deprecation:{replacement:\"http.route\"},aliases:[\"http.route\"],changelog:[{version:\"0.1.0\",prs:[61,74]},{version:\"0.0.0\"}]},\"router.navigation.origin\":{brief:\"The origin of the navigation (usually client side router navigations). Should preferably be a parameterized template (like url.template) or a URL path otherwise.\",type:\"string\",keys:[\"router.navigation.origin\",\"navigation.origin\",\"sentry.sveltekit.navigation.from\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"/users/:id\",aliases:[\"navigation.origin\",\"sentry.sveltekit.navigation.from\"],changelog:[{version:\"0.22.0\",prs:[600],description:\"Added router.navigation.origin attribute, replacing navigation.origin\"}]},\"router.navigation.route.id\":{brief:\"The identifier of the matched client-side route, as assigned by the routing framework (e.g., vue-router name, react-router id).\",type:\"string\",keys:[\"router.navigation.route.id\",\"navigation.route.id\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"AboutView\",aliases:[\"navigation.route.id\"],changelog:[{version:\"0.22.0\",prs:[600],description:\"Added router.navigation.route.id attribute, replacing navigation.route.id\"}]},\"router.navigation.type\":{brief:\"The type of navigation done by a client-side router.\",type:\"string\",keys:[\"router.navigation.type\",\"navigation.type\",\"sentry.sveltekit.navigation.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"router.push\",aliases:[\"navigation.type\",\"sentry.sveltekit.navigation.type\"],changelog:[{version:\"0.22.0\",prs:[600],description:\"Added router.navigation.type attribute, replacing navigation.type\"}]},\"rpc.grpc.status_code\":{brief:\"The numeric status code of the gRPC request.\",type:\"integer\",keys:[\"rpc.grpc.status_code\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:2,deprecation:{replacement:\"rpc.response.status_code\",reason:\"Cannot be automatically backfilled due to type mismatch (integer vs string); rpc.grpc.status_code is a numeric gRPC status code while rpc.response.status_code is the string status name.\"},aliases:[\"code\",\"rpc.response.status_code\"],changelog:[{version:\"0.19.0\",prs:[494,533],description:\"Deprecated rpc.grpc.status_code in favor of rpc.response.status_code\"},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"rpc.method\":{brief:\"The fully-qualified logical name of the method from the RPC interface perspective.\",type:\"string\",keys:[\"rpc.method\",\"aws.operation_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"com.example.ExampleService/exampleMethod\",aliases:[\"aws.operation_name\"],changelog:[{version:\"0.19.0\",prs:[536],description:\"Added aws.operation_name as an alias\"},{version:\"0.7.0\",prs:[351],description:\"Added rpc.method attribute\"}]},\"rpc.response.status_code\":{brief:\"Status code of the RPC returned by the RPC server or generated by the client.\",type:\"string\",keys:[\"rpc.response.status_code\",\"code\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"DEADLINE_EXCEEDED\",aliases:[\"code\",\"rpc.grpc.status_code\"],changelog:[{version:\"0.19.0\",prs:[494,533],description:\"Added code and rpc.grpc.status_code as aliases\"},{version:\"0.7.0\",prs:[352],description:\"Added rpc.response.status_code attribute\"}]},\"rpc.service\":{brief:\"The full (logical) name of the service being called, including its package name, if applicable.\",type:\"string\",keys:[\"rpc.service\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"myService.BestService\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"rpc.system\":{brief:\"A string identifying the remoting system.\",type:\"string\",keys:[\"rpc.system.name\",\"rpc.system\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"aws-api\",deprecation:{replacement:\"rpc.system.name\",reason:\"This attribute is being deprecated in favor of rpc.system.name, which is the OTel-aligned replacement.\",status:\"backfill\"},aliases:[\"rpc.system.name\"],changelog:[{version:\"0.16.0\",prs:[482],description:\"Added rpc.system attribute, deprecated in favor of rpc.system.name\"}]},\"rpc.system.name\":{brief:\"A string identifying the remoting system.\",type:\"string\",keys:[\"rpc.system.name\",\"rpc.system\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"aws-api\",aliases:[\"rpc.system\"],changelog:[{version:\"0.16.0\",prs:[482],description:\"Added rpc.system.name attribute\"}]},\"runtime.build\":{brief:\"The application build string, when it is separate from the version.\",type:\"string\",keys:[\"runtime.build\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"stable\",deprecation:{reason:\"The runtime.* namespace is deprecated in favor of process.runtime.*. No direct OTel equivalent exists for this attribute.\"},changelog:[{version:\"0.11.0\",prs:[383],description:\"Added and deprecated runtime.build attribute\"}]},\"runtime.name\":{brief:\"The name of the runtime. For example node, CPython, or rustc.\",type:\"string\",keys:[\"process.runtime.name\",\"runtime.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"node\",deprecation:{replacement:\"process.runtime.name\",reason:\"Prefer OTel-aligned process.runtime.name\",status:\"backfill\"},aliases:[\"process.runtime.name\"],changelog:[{version:\"0.11.0\",prs:[383],description:\"Added and deprecated runtime.name attribute in favor of process.runtime.name\"}]},\"runtime.raw_description\":{brief:\"Unprocessed description string as obtained from the runtime. Used to extract name and version for well-known runtimes.\",type:\"string\",keys:[\"process.runtime.description\",\"runtime.raw_description\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Eclipse OpenJ9 VM openj9-0.21.0\",deprecation:{replacement:\"process.runtime.description\",reason:\"Prefer OTel-aligned process.runtime.description\",status:\"backfill\"},aliases:[\"process.runtime.description\"],changelog:[{version:\"0.11.0\",prs:[383],description:\"Added and deprecated runtime.raw_description attribute in favor of process.runtime.description\"}]},\"runtime.version\":{brief:\"The version of the runtime.\",type:\"string\",keys:[\"process.runtime.version\",\"runtime.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"18.04.2\",deprecation:{replacement:\"process.runtime.version\",reason:\"Prefer OTel-aligned process.runtime.version\",status:\"backfill\"},aliases:[\"process.runtime.version\"],changelog:[{version:\"0.11.0\",prs:[383],description:\"Added and deprecated runtime.version attribute in favor of process.runtime.version\"}]},\"score.<key>\":{brief:\"The weighted performance score for a web vital. This is defined as `score.weight.<key>` * `score.ratio.<key>`.\",type:\"double\",keys:[\"score.<key>\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"score.cls=0.1723\",changelog:[{version:\"0.7.0\",prs:[355],description:\"Added score.<key> attribute\"}]},\"score.ratio.<key>\":{brief:\"The score for a web vital, normalized to a number between 0 and 1.\",type:\"double\",keys:[\"score.ratio.<key>\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"score.ratio.inp=0.7748\",changelog:[{version:\"0.7.0\",prs:[355],description:\"Added score.ratio.<key> attribute\"}]},\"score.total\":{brief:\"The total performance score of a span. This is the sum of individual weighted web vital scores (see `score.<key>`).\",type:\"double\",keys:[\"score.total\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",changelog:[{version:\"0.7.0\",prs:[355],description:\"Added score.total attribute\"}]},\"score.weight.<key>\":{brief:\"The relative weight of a web vital in a span's performance score.\",type:\"double\",keys:[\"score.weight.<key>\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"score.weight.fcp=0.25\",changelog:[{version:\"0.7.0\",prs:[355],description:\"Added score.weight.<key> attribute\"}]},\"sentry.action\":{brief:\"Used as a generic attribute representing the action depending on the type of span. For instance, this is the database query operation for DB spans, and the request method for HTTP spans.\",type:\"string\",keys:[\"sentry.action\",\"span.action\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"SELECT\",changelog:[{version:\"0.4.0\",prs:[212]}],searchAlias:{name:\"span.action\"}},\"sentry.browser.name\":{brief:\"The name of the browser.\",type:\"string\",keys:[\"browser.name\",\"sentry.browser.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Chrome\",deprecation:{replacement:\"browser.name\",status:\"backfill\"},aliases:[\"browser.name\"],changelog:[{version:\"0.1.0\",prs:[139]}],searchAlias:{name:\"browser.name\"}},\"sentry.browser.version\":{brief:\"The version of the browser.\",type:\"string\",keys:[\"browser.version\",\"sentry.browser.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"120.0.6099.130\",deprecation:{replacement:\"browser.version\",status:\"backfill\"},aliases:[\"browser.version\"],changelog:[{version:\"0.1.0\",prs:[139]}]},\"sentry.cancellation_reason\":{brief:\"The reason why a span ended early.\",type:\"string\",keys:[\"sentry.cancellation_reason\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"document.hidden\",changelog:[{version:\"0.0.0\"}]},\"sentry.category\":{brief:\"The high-level category of a span, derived from the span operation or span attributes. This categorizes spans by their general purpose (e.g., database, HTTP, UI).\",type:\"string\",keys:[\"sentry.category\",\"span.category\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"db\",changelog:[{version:\"0.4.0\",prs:[218]}],searchAlias:{name:\"span.category\"}},\"sentry.client_sample_rate\":{brief:\"Rate at which a span was sampled in the SDK.\",type:\"double\",keys:[\"sentry.client_sample_rate\",\"client_sample_rate\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:.5,changelog:[{version:\"0.1.0\",prs:[102]}],searchAlias:{name:\"client_sample_rate\"}},\"sentry.description\":{brief:\"The human-readable description of a span.\",type:\"string\",keys:[\"sentry.description\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"index view query\",changelog:[{version:\"0.1.0\",prs:[135]}]},\"sentry.dist\":{brief:\"The sentry dist.\",type:\"string\",keys:[\"sentry.dist\",\"dist\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"1.0\",aliases:[\"dist\"],changelog:[{version:\"0.16.0\",prs:[489],description:\"Added dist as an alias\"},{version:\"0.0.0\"}]},\"sentry.domain\":{brief:\"Used as a generic attribute representing the domain depending on the type of span. For instance, this is the collection/table name for database spans, and the server address for HTTP spans.\",type:\"string\",keys:[\"sentry.domain\",\"span.domain\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"example.com\",changelog:[{version:\"0.4.0\",prs:[212]}],searchAlias:{name:\"span.domain\"}},\"sentry.dsc.environment\":{brief:\"The environment from the dynamic sampling context.\",type:\"string\",keys:[\"sentry.dsc.environment\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",example:\"prod\",changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.dsc.project_id\":{brief:\"The ID of the project where the trace originated (i.e. the project of the SDK that started the trace). Propagated through the dynamic sampling context and set by Relay during ingestion.\",type:\"string\",keys:[\"sentry.dsc.project_id\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",example:\"12345\",changelog:[{version:\"0.7.0\",prs:[358],description:\"Add sentry.dsc.project_id as an attribute\"}]},\"sentry.dsc.public_key\":{brief:\"The public key from the dynamic sampling context.\",type:\"string\",keys:[\"sentry.dsc.public_key\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"internal\",example:\"c51734c603c4430eb57cb0a5728a479d\",changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.dsc.release\":{brief:\"The release identifier from the dynamic sampling context.\",type:\"string\",keys:[\"sentry.dsc.release\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",example:\"frontend@e8211be71b214afab5b85de4b4c54be3714952bb\",changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.dsc.sampled\":{brief:\"Whether the event was sampled according to the dynamic sampling context.\",type:\"boolean\",keys:[\"sentry.dsc.sampled\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",example:!0,changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.dsc.sample_rate\":{brief:\"The sample rate from the dynamic sampling context.\",type:\"string\",keys:[\"sentry.dsc.sample_rate\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",example:\"1.0\",changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.dsc.trace_id\":{brief:\"The trace ID from the dynamic sampling context.\",type:\"string\",keys:[\"sentry.dsc.trace_id\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",example:\"047372980460430cbc78d9779df33a46\",changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.dsc.transaction\":{brief:\"The transaction name from the dynamic sampling context.\",type:\"string\",keys:[\"sentry.dsc.transaction\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",example:\"/issues/errors-outages/\",changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.environment\":{brief:\"The sentry environment.\",type:\"string\",keys:[\"sentry.environment\",\"environment\",\"resource.deployment.environment\",\"resource.deployment.environment.name\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"production\",aliases:[\"environment\"],changelog:[{version:\"0.0.0\"}],searchAlias:{name:\"environment\"}},\"sentry.event.serialized_breadcrumbs\":{brief:\"JSON-serialized `breadcrumbs` property from a Sentry event.\",type:\"string\",keys:[\"sentry.event.serialized_breadcrumbs\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",changelog:[{version:\"0.19.0\",prs:[556]}]},\"sentry.event.serialized_contexts\":{brief:\"JSON-serialized `contexts` property from a Sentry event.\",type:\"string\",keys:[\"sentry.event.serialized_contexts\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",changelog:[{version:\"0.19.0\",prs:[556]}]},\"sentry.event.serialized_extra\":{brief:\"JSON-serialized `extra` property from a Sentry event.\",type:\"string\",keys:[\"sentry.event.serialized_extra\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",changelog:[{version:\"0.19.0\",prs:[556]}]},\"sentry.event.serialized_meta\":{brief:\"JSON-serialized `_meta` for the `sentry.event.serialized_*` properties from a Sentry event.\",type:\"string\",keys:[\"sentry.event.serialized_meta\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",changelog:[{version:\"0.20.0\",prs:[566]}]},\"sentry.exclusive_time\":{brief:\"The exclusive time duration of the span in milliseconds.\",type:\"double\",keys:[\"sentry.exclusive_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.3.0\",prs:[160]},{version:\"0.0.0\"}]},\"sentry.frames.frozen\":{brief:\"The number of frozen frames rendered during the lifetime of the span.\",type:\"integer\",keys:[\"app.vitals.frames.frozen.count\",\"frames.frozen\",\"mobile.frozen_frames\",\"sentry.frames.frozen\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:3,deprecation:{replacement:\"app.vitals.frames.frozen.count\",reason:\"Replaced by app.vitals.frames.frozen.count to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.frames.frozen.count\",\"frames.frozen\"],changelog:[{version:\"0.19.0\",prs:[500],description:\"Added sentry.frames.frozen attribute\"}]},\"sentry.frames.slow\":{brief:\"The number of slow frames rendered during the lifetime of the span.\",type:\"integer\",keys:[\"app.vitals.frames.slow.count\",\"frames.slow\",\"mobile.slow_frames\",\"sentry.frames.slow\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,deprecation:{replacement:\"app.vitals.frames.slow.count\",reason:\"Replaced by app.vitals.frames.slow.count to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.frames.slow.count\",\"frames.slow\"],changelog:[{version:\"0.19.0\",prs:[500],description:\"Added sentry.frames.slow attribute\"}]},\"sentry.frames.total\":{brief:\"The number of total frames rendered during the lifetime of the span.\",type:\"integer\",keys:[\"app.vitals.frames.total.count\",\"frames.total\",\"mobile.total_frames\",\"sentry.frames.total\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:60,deprecation:{replacement:\"app.vitals.frames.total.count\",reason:\"Replaced by app.vitals.frames.total.count to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.frames.total.count\",\"frames.total\"],changelog:[{version:\"0.19.0\",prs:[500],description:\"Added sentry.frames.total attribute\"}]},\"sentry.graphql.operation\":{brief:\"Indicates the type of graphql operation, emitted by the Javascript SDK.\",type:\"string\",keys:[\"sentry.graphql.operation\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"getUserById\",changelog:[{version:\"0.3.1\",prs:[190]}]},\"sentry.group\":{brief:\"Stores the hash of `sentry.normalized_description`. This is primarily used for grouping spans in the product end.\",type:\"string\",keys:[\"sentry.group\",\"span.group\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",changelog:[{version:\"0.4.0\",prs:[212]}],searchAlias:{name:\"span.group\"}},\"sentry.http.prefetch\":{brief:\"If an http request was a prefetch request.\",type:\"boolean\",keys:[\"sentry.http.prefetch\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"sentry.idle_span_finish_reason\":{brief:\"The reason why an idle span ended early.\",type:\"string\",keys:[\"sentry.idle_span_finish_reason\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"idleTimeout\",changelog:[{version:\"0.0.0\"}]},\"sentry.is_localhost\":{brief:\"Indicates whether a telemetry item was sent on a host, device or browser on a localhost URL or IP address.\",type:\"boolean\",keys:[\"sentry.is_localhost\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"internal\",example:!0,examples:[!0,!1],changelog:[{version:\"0.24.0\",prs:[646],description:\"Added sentry.is_localhost attribute\"}],additionalContext:['This attribute is used for the Sentry \"Filter telemetry from localhost\" inbound filter feature.',\"SDKs must set this attribute on every span, as well as every other telemetry item supporting attribuztes.\"]},\"sentry.is_remote\":{brief:\"Indicates whether a span's parent is remote.\",type:\"boolean\",keys:[\"sentry.is_remote\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.3.1\",prs:[190]}]},\"sentry.kind\":{brief:\"Used to clarify the relationship between parents and children, or to distinguish between spans, e.g. a `server` and `client` span with the same name.\",type:\"string\",keys:[\"sentry.kind\",\"span.kind\",\"otel.kind\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"client\",examples:[\"client\",\"server\",\"producer\",\"consumer\",\"internal\"],aliases:[\"otel.kind\"],changelog:[{version:\"0.19.0\",prs:[517],description:\"Added more examples and additional_context to the attribute\"},{version:\"0.3.1\",prs:[190]}],additionalContext:['Valid attribute values are: \"client\", \"server\", \"producer\", \"consumer\" and \"internal\"'],searchAlias:{name:\"span.kind\"}},\"sentry.link.type\":{brief:\"Set on a span link. Describes the relationship between the span and the linked span.\",type:\"string\",keys:[\"sentry.link.type\",\"link.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"previous_trace\",examples:[\"previous_trace\",\"next_trace\",\"cache_origin\"],changelog:[{version:\"0.27.0\",prs:[687],description:\"Added search alias link.type\"},{version:\"0.25.0\",prs:[656],description:\"Added sentry.link.type attribute\"}],additionalContext:[\"This attribute is exclusively set on span links.\",\"Sentry instrumentation setting span links, sets it to describe the relationship between the span and the linked span.\",\"For known values, see Examples. Add new values to Examples.\"],searchAlias:{name:\"link.type\"}},\"sentry.main_thread\":{brief:\"Whether the span or event occurred on the main thread. Computed by Relay and should not be set by SDKs.\",type:\"boolean\",keys:[\"sentry.main_thread\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.5.0\"}]},\"sentry.message.parameter.<key>\":{brief:\"A parameter used in the message template. <key> can either be the number that represent the parameter's position in the template string (sentry.message.parameter.0, sentry.message.parameter.1, etc) or the parameter's name (sentry.message.parameter.item_id, sentry.message.parameter.user_id, etc)\",type:\"string\",keys:[\"sentry.message.parameter.<key>\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"sentry.message.parameter.0='123'\",changelog:[{version:\"0.1.0\",prs:[116]}]},\"sentry.message.template\":{brief:\"The parameterized template string.\",type:\"string\",keys:[\"sentry.message.template\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Hello, {name}!\",changelog:[{version:\"0.1.0\",prs:[116]}]},\"sentry.metric.source\":{brief:\"The provenance of a metric.  For example, this can be set to indicate if a metric was generated by Relay from a span.\",type:\"string\",keys:[\"sentry.metric.source\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"span\",changelog:[{version:\"0.16.0\",prs:[476],description:\"Added sentry.metric.source attribute\"}]},\"sentry.mobile\":{brief:\"Whether the application is using a mobile SDK. Computed by Relay and should not be set by SDKs.\",type:\"boolean\",keys:[\"sentry.mobile\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.5.0\"}]},\"sentry.module.<key>\":{brief:\"A module that was loaded in the process. The key is the name of the module.\",type:\"string\",keys:[\"sentry.module.<key>\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"sentry.module.brianium/paratest='v7.7.0'\",changelog:[{version:\"0.1.0\",prs:[103]}]},\"sentry.nextjs.ssr.function.route\":{brief:\"A parameterized route for a function in Next.js that contributes to Server-Side Rendering. Should be present on spans that track such functions when the file location of the function is known.\",type:\"string\",keys:[\"sentry.nextjs.ssr.function.route\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"/posts/[id]/layout\",changelog:[{version:\"0.1.0\",prs:[54,106]}]},\"sentry.nextjs.ssr.function.type\":{brief:\"A descriptor for a for a function in Next.js that contributes to Server-Side Rendering. Should be present on spans that track such functions.\",type:\"string\",keys:[\"sentry.nextjs.ssr.function.type\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"generateMetadata\",changelog:[{version:\"0.1.0\",prs:[54,106]}]},\"sentry.normalized_db_query\":{brief:\"The normalized version of `db.query.text`.\",type:\"string\",keys:[\"sentry.normalized_db_query\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"SELECT .. FROM sentry_project WHERE (project_id = %s)\",changelog:[{version:\"0.3.1\",prs:[194]}]},\"sentry.normalized_db_query.hash\":{brief:\"The hash of `sentry.normalized_db_query`.\",type:\"string\",keys:[\"sentry.normalized_db_query.hash\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",changelog:[{version:\"0.4.0\",prs:[200]}]},\"sentry.normalized_description\":{brief:\"Used as a generic attribute representing the normalized `sentry.description`. This refers to the legacy use case of `sentry.description` where it holds relevant data depending on the type of span (e.g. database query, resource url, http request description, etc).\",type:\"string\",keys:[\"sentry.normalized_description\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"SELECT .. FROM sentry_project WHERE (project_id = %s)\",changelog:[{version:\"0.4.0\",prs:[212]}]},\"sentry.observed_timestamp_nanos\":{brief:\"The timestamp at which an envelope was received by Relay, in nanoseconds.\",type:\"string\",keys:[\"sentry.observed_timestamp_nanos\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"1544712660300000000\",changelog:[{version:\"0.3.0\",prs:[174]},{version:\"0.2.0\",prs:[137]}]},\"sentry.op\":{brief:\"The operation of a span.\",type:\"string\",keys:[\"sentry.op\",\"span.op\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"http.client\",changelog:[{version:\"0.0.0\"}],searchAlias:{name:\"span.op\"}},\"sentry.origin\":{brief:\"The origin of the instrumentation (e.g. span, log, etc.)\",type:\"string\",keys:[\"sentry.origin\",\"origin\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"auto.http.otel.fastify\",changelog:[{version:\"0.1.0\",prs:[68]},{version:\"0.0.0\"}],searchAlias:{name:\"origin\"}},\"sentry.pageload.span_id\":{brief:\"The id of the pageload span, set by web vital spans and metrics\",type:\"string\",keys:[\"sentry.pageload.span_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"bf2c8d3df84524de\",changelog:[{version:\"0.17.0\",prs:[495],description:\"Added sentry.pageload.span_id attribute\"}]},\"sentry.platform\":{brief:\"The sdk platform that generated the event.\",type:\"string\",keys:[\"sentry.platform\",\"platform\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"php\",changelog:[{version:\"0.0.0\"}],searchAlias:{name:\"platform\"}},\"sentry.profiler_id\":{brief:\"The id of the currently running profiler (continuous profiling)\",type:\"string\",keys:[\"sentry.profiler_id\",\"profiler.id\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"18779b64dd35d1a538e7ce2dd2d3fad3\",changelog:[{version:\"0.4.0\",prs:[242]}],searchAlias:{name:\"profiler.id\"}},\"sentry.profile_id\":{brief:\"The ID of the Sentry profile the span is associated with. This is only meaningful for transaction-based profiling.\",type:\"string\",keys:[\"sentry.profile_id\",\"profile.id\",\"profile_id\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"123e4567e89b12d3a456426614174000\",aliases:[\"profile_id\"],changelog:[{version:\"0.19.0\",prs:[497],description:\"Added profile_id as an alias\"},{version:\"0.6.0\",prs:[344],description:\"Added sentry.profile_id attribute\"}],searchAlias:{name:\"profile.id\"}},\"sentry.relay.ingress\":{brief:\"How an item (span, log, &c.) entered Relay.\",type:\"string\",keys:[\"sentry.relay.ingress\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"internal\",example:\"OTEL\",changelog:[{version:\"0.17.0\",prs:[491],description:\"Added sentry.relay.ingress attribute\"}]},\"sentry.relay.pipeline\":{brief:\"An internal descriptor of which processing pipeline an item went through in Relay.\",type:\"string\",keys:[\"sentry.relay.pipeline\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"internal\",example:\"span v2\",changelog:[{version:\"0.17.0\",prs:[491],description:\"Added sentry.relay.pipeline attribute\"}]},\"sentry.release\":{brief:\"The sentry release.\",type:\"string\",keys:[\"sentry.release\",\"release\",\"service.version\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"7.0.0\",aliases:[\"service.version\",\"release\"],changelog:[{version:\"0.0.0\"}],searchAlias:{name:\"release\"}},\"sentry.replay_id\":{brief:\"The id of the sentry replay.\",type:\"string\",keys:[\"sentry.replay_id\",\"replay.id\",\"replay_id\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"123e4567e89b12d3a456426614174000\",aliases:[\"replay_id\",\"replayId\"],changelog:[{version:\"0.0.0\"}],searchAlias:{name:\"replay.id\",deprecatedAliases:[\"replay_id\"]}},\"sentry.replay_is_buffering\":{brief:\"A sentinel attribute on log events indicating whether the current Session Replay is being buffered (onErrorSampleRate).\",type:\"boolean\",keys:[\"sentry.replay_is_buffering\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.report_event\":{brief:\"(Deprecated) The event that caused the SDK to report CLS or LCP (pagehide or navigation)\",type:\"string\",keys:[\"sentry.report_event\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"pagehide\",deprecation:{reason:\"The report event moved to browser.web_vital.lcp.report_event and browser.web_vital.cls.report_event, which are themselves deprecated without a replacement. No backfill required.\"},changelog:[{version:\"0.24.0\",prs:[642],description:\"Updated the deprecation reason now that the browser.web_vital.*.report_event attributes are deprecated\"},{version:\"0.5.0\",prs:[320],description:\"Added sentry.report_event attribute\"}]},\"sentry.sdk.integrations\":{brief:\"A list of names identifying enabled integrations. The list shouldhave all enabled integrations, including default integrations. Defaultintegrations are included because different SDK releases may contain differentdefault integrations.\",type:\"string[]\",keys:[\"sentry.sdk.integrations\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:[\"InboundFilters\",\"FunctionToString\",\"BrowserApiErrors\",\"Breadcrumbs\"],changelog:[{version:\"0.0.0\",prs:[42]}]},\"sentry.sdk.name\":{brief:\"The sentry sdk name.\",type:\"string\",keys:[\"sentry.sdk.name\",\"sdk.name\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"@sentry/react\",changelog:[{version:\"0.0.0\"}],searchAlias:{name:\"sdk.name\"}},\"sentry.sdk.version\":{brief:\"The sentry sdk version.\",type:\"string\",keys:[\"sentry.sdk.version\",\"sdk.version\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"7.0.0\",changelog:[{version:\"0.0.0\"}],searchAlias:{name:\"sdk.version\"}},\"sentry.segment.id\":{brief:\"The segment ID of a span\",type:\"string\",keys:[\"sentry.segment.id\",\"sentry.segment_id\",\"transaction.span_id\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"051581bf3cb55c13\",aliases:[\"sentry.segment_id\"],changelog:[{version:\"0.1.0\",prs:[107,124]}]},\"sentry.segment_id\":{brief:\"The segment ID of a span\",type:\"string\",keys:[\"sentry.segment.id\",\"sentry.segment_id\",\"transaction.span_id\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"051581bf3cb55c13\",deprecation:{replacement:\"sentry.segment.id\",status:\"backfill\"},aliases:[\"sentry.segment.id\"],changelog:[{version:\"0.1.0\",prs:[124]}],searchAlias:{name:\"transaction.span_id\"}},\"sentry.segment.name\":{brief:\"The segment name of a span\",type:\"string\",keys:[\"sentry.segment.name\",\"transaction\",\"sentry.transaction\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"GET /user\",aliases:[\"sentry.transaction\",\"transaction\"],changelog:[{version:\"0.6.0\",prs:[345],description:\"Added sentry.transaction and transaction aliases\"},{version:\"0.1.0\",prs:[104]}],searchAlias:{name:\"transaction\"}},\"sentry.segment.name.source\":{brief:\"The source of the segment span name. Should only be set on segment spans.\",type:\"string\",keys:[\"sentry.segment.name.source\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"internal\",example:\"route\",examples:[\"route\",\"component\",\"view\",\"task\",\"custom\",\"url\"],changelog:[{version:\"0.19.0\",prs:[466],description:\"Added sentry.segment.name.source\"}],additionalContext:[\"This attribute is the replacement for `transaction_info.source` on transactions.\",\"Should we bring back clustering for segment names (like we do for transaction names), this attribute will be used to determine if a segment name should be clustered.\"]},\"sentry.server_sample_rate\":{brief:\"Rate at which a span was sampled in Relay.\",type:\"double\",keys:[\"sentry.server_sample_rate\",\"server_sample_rate\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:.5,changelog:[{version:\"0.1.0\",prs:[102]}],searchAlias:{name:\"server_sample_rate\"}},\"sentry.source\":{brief:\"The source of a span, also referred to as transaction source.\",type:\"string\",keys:[\"sentry.source\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"route\",deprecation:{reason:\"This attribute is superseded by sentry.segment.name.source, which only needs to be set on segment spans.\"},changelog:[{version:\"0.19.0\",prs:[510],description:\"Removed the sentry.span.source replacement\"},{version:\"0.5.0\"}]},\"sentry.span.source\":{brief:\"The source of a span, also referred to as transaction source.\",type:\"string\",keys:[\"sentry.span.source\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"route\",deprecation:{reason:\"This attribute is superseded by sentry.segment.name.source, which only needs to be set on segment spans.\"},changelog:[{version:\"0.19.0\",prs:[510],description:\"Deprecated; superseded by sentry.segment.name.source on segment spans\"},{version:\"0.4.0\",prs:[214]},{version:\"0.0.0\"}]},\"sentry.status\":{brief:`The span's status (either \"ok\" or \"error\"). Older SDKs may set this to a more specific error, but this behaviour is deprecated.`,type:\"string\",keys:[\"sentry.status\",\"span.status\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"ok\",changelog:[{version:\"0.14.0\",prs:[453]}],searchAlias:{name:\"span.status\"}},\"sentry.status_code\":{brief:\"The HTTP status code used in Sentry Insights. Typically set by Sentry during ingestion, rather than by clients.\",type:\"integer\",keys:[\"sentry.status_code\",\"span.status_code\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:200,changelog:[{version:\"0.4.0\",prs:[223,228]}],searchAlias:{name:\"span.status_code\"}},\"sentry.status.message\":{brief:\"The from OTLP extracted status message.\",type:\"string\",keys:[\"sentry.status.message\",\"span.status.message\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"foobar\",changelog:[{version:\"0.3.1\",prs:[190]}],searchAlias:{name:\"span.status.message\"}},\"sentry.sveltekit.navigation.from\":{brief:\"the navigation origin (sveltekit router)\",type:\"string\",keys:[\"router.navigation.origin\",\"navigation.origin\",\"sentry.sveltekit.navigation.from\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"/home\",deprecation:{replacement:\"router.navigation.origin\",reason:\"Use the more generic attribute instead\",status:\"backfill\"},aliases:[\"navigation.origin\",\"router.navigation.origin\"],changelog:[{version:\"0.22.0\",prs:[600],description:\"Re-pointed deprecation from navigation.origin to router.navigation.origin\"},{version:\"0.16.0\",prs:[467],description:\"Added sentry.sveltekit.navigation.from attribute\"}]},\"sentry.sveltekit.navigation.to\":{brief:\"the navigation destination\",type:\"string\",keys:[\"sentry.sveltekit.navigation.to\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"/users/:id\",deprecation:{reason:\"the navigation destination is already covered by url.* attributes\"},changelog:[{version:\"0.16.0\",prs:[467],description:\"Added sentry.sveltekit.navigation.to attribute\"}]},\"sentry.sveltekit.navigation.type\":{brief:\"The type of navigation event emitted from the sveltekit client router\",type:\"string\",keys:[\"router.navigation.type\",\"navigation.type\",\"sentry.sveltekit.navigation.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"link\",deprecation:{replacement:\"router.navigation.type\",reason:\"Use the more generic attribute instead\",status:\"backfill\"},aliases:[\"navigation.type\",\"router.navigation.type\"],changelog:[{version:\"0.22.0\",prs:[600],description:\"Re-pointed deprecation from navigation.type to router.navigation.type\"},{version:\"0.16.0\",prs:[467],description:\"Added sentry.sveltekit.navigation.type attribute\"}]},\"sentry.thread.id\":{brief:'Current \"managed\" thread ID.',type:\"integer\",keys:[\"thread.id\",\"sentry.thread.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:56,deprecation:{replacement:\"thread.id\",reason:\"This attribute is being deprecated in favor of the OTel-standard thread.id\",status:\"backfill\"},changelog:[{version:\"0.13.0\",prs:[451]}],searchAlias:{name:\"thread.id\"}},\"sentry.timestamp.sequence\":{brief:\"A sequencing counter for deterministic ordering of logs or metrics when timestamps share the same integer millisecond. Starts at 0 on SDK initialization, increments by 1 for each captured item, and resets to 0 when the integer millisecond of the current item differs from the previous one.\",type:\"integer\",keys:[\"sentry.timestamp.sequence\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:0,changelog:[{version:\"0.5.0\",prs:[262]}]},\"sentry.trace_lifecycle\":{brief:\"Indicates the chosen trace lifecycle mode of the SDK (stream or static)\",type:\"string\",keys:[\"sentry.trace_lifecycle\",\"trace_lifecycle\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"stream\",changelog:[{version:\"0.13.0\",prs:[442],description:\"Added sentry.trace_lifecycle attribute\"}],searchAlias:{name:\"trace_lifecycle\"}},\"sentry.trace.parent_span_id\":{brief:\"The span id of the span that was active when the log was collected. This should not be set if there was no active span.\",type:\"string\",keys:[\"sentry.trace.parent_span_id\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"b0e6f15b45c36b12\",deprecation:{},changelog:[{version:\"0.5.0\",prs:[287],description:\"Deprecate `sentry.trace.parent_span_id`\"},{version:\"0.1.0\",prs:[116]}]},\"sentry.trace.status\":{brief:`The segment's status (either \"ok\" or \"error\"). Older SDKs may set this to a more specific error, but this behaviour is deprecated.`,type:\"string\",keys:[\"sentry.trace.status\",\"trace.status\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"ok\",changelog:[{version:\"0.14.0\",prs:[453]}],searchAlias:{name:\"trace.status\"}},\"sentry.transaction\":{brief:\"The sentry transaction (segment name).\",type:\"string\",keys:[\"sentry.segment.name\",\"transaction\",\"sentry.transaction\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"GET /\",deprecation:{replacement:\"sentry.segment.name\",reason:\"This attribute is being deprecated in favor of sentry.segment.name\",status:\"backfill\"},aliases:[\"sentry.segment.name\",\"transaction\"],changelog:[{version:\"0.6.0\",prs:[345],description:\"Deprecated sentry.transaction in favor of sentry.segment.name\"},{version:\"0.0.0\"}]},\"sentry.user.email\":{brief:\"User email address.\",type:\"string\",keys:[\"user.email\",\"sentry.user.email\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.email\",status:\"backfill\"},aliases:[\"user.email\"],changelog:[{version:\"0.10.0\",prs:[406]}],searchAlias:{name:\"user.email\"}},\"sentry.user.geo.city\":{brief:\"Human readable city name.\",type:\"string\",keys:[\"user.geo.city\",\"sentry.user.geo.city\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.geo.city\",status:\"backfill\"},aliases:[\"user.geo.city\"],changelog:[{version:\"0.10.0\",prs:[406]}],searchAlias:{name:\"user.geo.city\"}},\"sentry.user.geo.country_code\":{brief:\"Two-letter country code (ISO 3166-1 alpha-2).\",type:\"string\",keys:[\"user.geo.country_code\",\"sentry.user.geo.country_code\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.geo.country_code\",status:\"backfill\"},aliases:[\"user.geo.country_code\"],changelog:[{version:\"0.10.0\",prs:[406]}],searchAlias:{name:\"user.geo.country_code\"}},\"sentry.user.geo.region\":{brief:\"Human readable region name or code.\",type:\"string\",keys:[\"user.geo.region\",\"sentry.user.geo.region\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.geo.region\",status:\"backfill\"},aliases:[\"user.geo.region\"],changelog:[{version:\"0.10.0\",prs:[406]}],searchAlias:{name:\"user.geo.region\"}},\"sentry.user.geo.subdivision\":{brief:\"Human readable subdivision name.\",type:\"string\",keys:[\"user.geo.subdivision\",\"sentry.user.geo.subdivision\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.geo.subdivision\",status:\"backfill\"},aliases:[\"user.geo.subdivision\"],changelog:[{version:\"0.10.0\",prs:[406]}],searchAlias:{name:\"user.geo.subdivision\"}},\"sentry.user.id\":{brief:\"Unique identifier of the user.\",type:\"string\",keys:[\"user.id\",\"sentry.user.id\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.id\",status:\"backfill\"},aliases:[\"user.id\"],changelog:[{version:\"0.10.0\",prs:[406]}],searchAlias:{name:\"user.id\"}},\"sentry.user.ip\":{brief:\"The IP address of the user.\",type:\"string\",keys:[\"user.ip_address\",\"sentry.user.ip\",\"user.ip\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.ip_address\",status:\"backfill\"},aliases:[\"user.ip_address\"],changelog:[{version:\"0.10.0\",prs:[406]}],searchAlias:{name:\"user.ip\"}},\"sentry.user.username\":{brief:\"Short name or login/username of the user.\",type:\"string\",keys:[\"user.name\",\"sentry.user.username\",\"user.username\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.name\",status:\"backfill\"},aliases:[\"user.name\"],changelog:[{version:\"0.10.0\",prs:[406]}],searchAlias:{name:\"user.username\"}},\"server.address\":{brief:\"Preferably the server domain name if available without reverse DNS lookup, or an IP address or Unix domain socket name. For compatibility, it may contain what the hostname command returns on UNIX systems, the fully qualified hostname, or another name specified by the user.\",type:\"string\",keys:[\"server.address\",\"address\",\"http.server_name\",\"net.host.name\",\"server_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",aliases:[\"address\",\"http.server_name\",\"net.host.name\",\"http.host\",\"server_name\",\"net.peer.name\"],changelog:[{version:\"0.24.0\",prs:[645,647],description:\"Broaden brief to allow hostnames\"},{version:\"0.21.0\",prs:[588,602],description:\"Added net.peer.name as an alias\"},{version:\"0.19.0\",prs:[534],description:\"Added address as an alias\"},{version:\"0.1.0\",prs:[108,127]},{version:\"0.0.0\"}]},server_name:{brief:\"The name of the device. On servers and desktops, this is typically the hostname.\",type:\"string\",keys:[\"server.address\",\"address\",\"http.server_name\",\"net.host.name\",\"server_name\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"example.com\",deprecation:{replacement:\"server.address\",reason:\"This attribute is being deprecated in favor of server.address.\",status:\"backfill\"},aliases:[\"address\",\"server.address\",\"http.server_name\",\"net.host.name\",\"http.host\",\"net.peer.name\"],changelog:[{version:\"0.24.0\",prs:[647],description:\"Alias the server.address alias group\"},{version:\"0.21.0\",prs:[588,602],description:\"Alias device.name instead of the server.address alias group\"},{version:\"0.19.0\",prs:[534],description:\"Added address as an alias\"},{version:\"0.16.0\",prs:[477],description:\"Added server_name attribute, deprecated in favor of server.address\"}]},\"server.port\":{brief:\"Server port number.\",type:\"integer\",keys:[\"server.port\",\"net.host.port\",\"port\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:1337,aliases:[\"net.host.port\",\"port\"],changelog:[{version:\"0.19.0\",prs:[532],description:\"Added port as an alias\"},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"service.name\":{brief:\"Logical name of the service.\",type:\"string\",keys:[\"service.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"omegastar\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"service.version\":{brief:\"The version string of the service API or implementation. The format is not defined by these conventions.\",type:\"string\",keys:[\"service.version\",\"sentry.release\",\"release\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"5.0.0\",aliases:[\"sentry.release\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"session.id\":{brief:\"A unique id identifying the active session at the time of setting this attribute\",type:\"string\",keys:[\"session.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"00112233-4455-6677-8899-aabbccddeeff\",changelog:[{version:\"0.11.0\",prs:[412],description:\"Added session.id attribute\"}]},stall_percentage:{brief:\"The fraction of time the app was stalled. Only applies to React Native. This is computed by Relay.\",type:\"double\",keys:[\"app.vitals.stall.percentage\",\"stall_percentage\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"app.vitals.stall.percentage\",reason:\"Replaced by app.vitals.stall.percentage to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.stall.percentage\"],changelog:[{version:\"0.19.0\",prs:[493],description:\"Deprecated in favor of app.vitals.stall.percentage\"},{version:\"0.7.0\",prs:[362],description:\"Added stall_percentage attribute\"}]},stall_total_time:{brief:\"The combined duration of all stalls in milliseconds. Only applies to React Native. This is computed by Relay.\",type:\"double\",keys:[\"app.vitals.stall.duration\",\"stall_total_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"app.vitals.stall.duration\",reason:\"Replaced by app.vitals.stall.duration to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.stall.duration\"],changelog:[{version:\"0.19.0\",prs:[493],description:\"Deprecated in favor of app.vitals.stall.duration\"},{version:\"0.7.0\",prs:[362],description:\"Added stall_total_time attribute\"}]},\"starlette.middleware_name\":{brief:\"The name of the Starlette middleware.\",type:\"string\",keys:[\"middleware.name\",\"django.middleware_name\",\"litestar.middleware_name\",\"starlette.middleware_name\",\"starlite.middleware_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"AuthenticationMiddleware\",deprecation:{replacement:\"middleware.name\",reason:\"This attribute is being deprecated in favor of middleware.name, which is the framework-agnostic replacement.\",status:\"backfill\"},aliases:[\"middleware.name\"],changelog:[{version:\"0.19.0\",prs:[485],description:\"Added starlette.middleware_name attribute, deprecated in favor of middleware.name\"}]},\"starlite.middleware_name\":{brief:\"The name of the Starlite middleware.\",type:\"string\",keys:[\"middleware.name\",\"django.middleware_name\",\"litestar.middleware_name\",\"starlette.middleware_name\",\"starlite.middleware_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"AuthenticationMiddleware\",examples:[\"AuthenticationMiddleware\"],deprecation:{replacement:\"middleware.name\",reason:\"This attribute is being deprecated in favor of middleware.name, which is the framework-agnostic replacement.\",status:\"backfill\"},aliases:[\"middleware.name\"],changelog:[{version:\"0.19.0\",prs:[519],description:\"Added starlite.middleware_name attribute\"}]},\"state.type\":{brief:\"The type of state management library\",type:\"string\",keys:[\"state.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"redux\",changelog:[{version:\"0.7.0\",prs:[365],description:\"Added state.type attribute\"}]},\"subprocess.pid\":{brief:\"The process ID of a subprocess.\",type:\"integer\",keys:[\"process.pid\",\"subprocess.pid\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12345,deprecation:{replacement:\"process.pid\",reason:\"This attribute is being deprecated in favor of process.pid, which is the OTel-aligned replacement.\",status:\"backfill\"},aliases:[\"process.pid\"],changelog:[{version:\"0.19.0\",prs:[487],description:\"Added subprocess.pid attribute, deprecated in favor of process.pid\"}]},\"sveltekit.load.environment\":{brief:\"The runtime environment in which the SvelteKit load function was executed. Known values are `'server'` and `'client'`.\",type:\"string\",keys:[\"sveltekit.load.environment\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"server\",examples:[\"server\",\"client\"],changelog:[{version:\"0.22.0\",prs:[611],description:\"Added sveltekit.load.environment attribute\"}],additionalContext:[\"Added by the SvelteKit framework itself. The Sentry SDK only forwards the attribute to Sentry.\"]},\"sveltekit.load.node_id\":{brief:\"The path to the SvelteKit load function.\",type:\"string\",keys:[\"sveltekit.load.node_id\",\"code.file.path\",\"code.filepath\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"src/routes/users/:id/+page.server.ts\",examples:[\"src/routes/users/:id/+page.server.ts\"],aliases:[\"code.file.path\",\"code.filepath\"],changelog:[{version:\"0.22.0\",prs:[611],description:\"Added sveltekit.load.node_id attribute\"}],additionalContext:[\"Added by the SvelteKit framework itself. The Sentry SDK only forwards the attribute to Sentry.\"]},\"sveltekit.load.node_type\":{brief:\"The kind of SvelteKit load function that was executed, distinguishing page from layout and universal from server load functions.\",type:\"string\",keys:[\"sveltekit.load.node_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"+page.server\",examples:[\"+page.server\",\"+layout\",\"+layout.server\"],changelog:[{version:\"0.22.0\",prs:[611],description:\"Added sveltekit.load.node_type attribute\"}],additionalContext:[\"Added by the SvelteKit framework itself. The Sentry SDK only forwards the attribute to Sentry.\"]},\"sveltekit.tracing.original_name\":{brief:\"The original span name as emitted by SvelteKit.\",type:\"string\",keys:[\"sveltekit.tracing.original_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"sveltekit.handle.root\",examples:[\"sveltekit.handle.root\"],changelog:[{version:\"0.22.0\",prs:[611],description:\"Added sveltekit.tracing.original_name attribute\"}],additionalContext:[\"The Sentry SDK renames SvelteKit-emitted spans to match Sentry's span name semantics, and preserves the name SvelteKit originally set in this attribute.\"]},\"thread.id\":{brief:\"Current \\u201Cmanaged\\u201D thread ID.\",type:\"integer\",keys:[\"thread.id\",\"sentry.thread.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:56,changelog:[{version:\"0.0.0\"}]},\"thread.name\":{brief:\"Current thread name.\",type:\"string\",keys:[\"thread.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"main\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"timber.tag\":{brief:\"The log tag provided by the timber logging framework.\",type:\"string\",keys:[\"timber.tag\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"MyTag\",changelog:[{version:\"0.3.0\",prs:[183]}]},time_to_full_display:{brief:\"The duration of time to full display in milliseconds\",type:\"double\",keys:[\"app.vitals.ttfd.value\",\"time_to_full_display\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,deprecation:{replacement:\"app.vitals.ttfd.value\",reason:\"Replaced by app.vitals.ttfd.value to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.ttfd.value\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added and deprecated in favor of app.vitals.ttfd.value\"}]},time_to_initial_display:{brief:\"The duration of time to initial display in milliseconds\",type:\"double\",keys:[\"app.vitals.ttid.value\",\"time_to_initial_display\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,deprecation:{replacement:\"app.vitals.ttid.value\",reason:\"Replaced by app.vitals.ttid.value to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.ttid.value\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added and deprecated in favor of app.vitals.ttid.value\"}]},transaction:{brief:\"The sentry transaction (segment name).\",type:\"string\",keys:[\"sentry.segment.name\",\"transaction\",\"sentry.transaction\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"GET /\",deprecation:{replacement:\"sentry.segment.name\",status:\"normalize\"},aliases:[\"sentry.segment.name\",\"sentry.transaction\"],changelog:[{version:\"0.19.0\",prs:[497],description:\"Change deprecation from backfill to normalize\"},{version:\"0.6.0\",prs:[345],description:\"Updated transaction deprecation replacement to sentry.segment.name\"},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"trpc.procedure_path\":{brief:\"The path of the tRPC procedure being called\",type:\"string\",keys:[\"trpc.procedure_path\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"user.getById\",changelog:[{version:\"0.7.0\",prs:[370],description:\"Added trpc.procedure_path attribute\"}]},\"trpc.procedure_type\":{brief:\"The type of the tRPC procedure\",type:\"string\",keys:[\"trpc.procedure_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"query\",changelog:[{version:\"0.7.0\",prs:[370],description:\"Added trpc.procedure_type attribute\"}]},ttfb:{brief:\"The value of the recorded Time To First Byte (TTFB) web vital in milliseconds\",type:\"double\",keys:[\"browser.web_vital.ttfb.value\",\"ttfb\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:194,deprecation:{replacement:\"browser.web_vital.ttfb.value\",reason:\"This attribute is being deprecated in favor of browser.web_vital.ttfb.value\",status:\"backfill\"},aliases:[\"browser.web_vital.ttfb.value\"],changelog:[{version:\"0.5.0\",prs:[235]}]},\"ttfb.requestTime\":{brief:\"The time it takes for the server to process the initial request and send the first byte of a response to the user's browser\",type:\"double\",keys:[\"browser.web_vital.ttfb.request_time\",\"ttfb.requestTime\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1554.5814,deprecation:{replacement:\"browser.web_vital.ttfb.request_time\",reason:\"This attribute is being deprecated in favor of browser.web_vital.ttfb.request_time\",status:\"backfill\"},aliases:[\"browser.web_vital.ttfb.request_time\"],changelog:[{version:\"0.5.0\",prs:[235]}]},\"turbo_modules.total_call_count\":{brief:\"The number of native module calls in the flushed call aggregate. Only applies to React Native.\",type:\"integer\",keys:[\"react_native.module.call.count\",\"turbo_module.total_call_count\",\"turbo_modules.total_call_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:42,examples:[42],deprecation:{replacement:\"react_native.module.call.count\",reason:\"Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix\",status:\"backfill\"},aliases:[\"react_native.module.call.count\",\"turbo_module.total_call_count\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_modules.total_call_count and deprecated it in favor of react_native.module.call.count\"}]},\"turbo_modules.total_duration_ms\":{brief:\"The combined duration of all native module calls in the flushed call aggregate, in milliseconds. Only applies to React Native.\",type:\"double\",keys:[\"react_native.module.duration.total\",\"turbo_module.total_duration_ms\",\"turbo_modules.total_duration_ms\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:128.45,examples:[128.45],deprecation:{replacement:\"react_native.module.duration.total\",reason:\"Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix\",status:\"backfill\"},aliases:[\"react_native.module.duration.total\",\"turbo_module.total_duration_ms\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_modules.total_duration_ms and deprecated it in favor of react_native.module.duration.total\"}]},\"turbo_modules.total_error_count\":{brief:\"The number of failed native module calls in the flushed call aggregate. Only applies to React Native.\",type:\"integer\",keys:[\"react_native.module.error.count\",\"turbo_module.total_error_count\",\"turbo_modules.total_error_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2,examples:[2],deprecation:{replacement:\"react_native.module.error.count\",reason:\"Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix\",status:\"backfill\"},aliases:[\"react_native.module.error.count\",\"turbo_module.total_error_count\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_modules.total_error_count and deprecated it in favor of react_native.module.error.count\"}]},\"turbo_modules.unique_methods\":{brief:\"The number of distinct native module and method pairs in the flushed call aggregate. Only applies to React Native.\",type:\"integer\",keys:[\"react_native.module.call.distinct_count\",\"turbo_module.unique_methods\",\"turbo_modules.unique_methods\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:7,examples:[7],deprecation:{replacement:\"react_native.module.call.distinct_count\",reason:\"Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix\",status:\"backfill\"},aliases:[\"react_native.module.call.distinct_count\",\"turbo_module.unique_methods\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_modules.unique_methods and deprecated it in favor of react_native.module.call.distinct_count\"}]},\"turbo_module.arch\":{brief:\"The React Native architecture the call was observed on. `new` for a TurboModule resolved through `TurboModuleRegistry`, `legacy` for a module reached over the Old Architecture bridge. Only applies to React Native.\",type:\"string\",keys:[\"react_native.architecture\",\"turbo_module.arch\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"new\",examples:[\"new\",\"legacy\"],deprecation:{replacement:\"react_native.architecture\",reason:\"Replaced by the `react_native.*` namespace, which also covers native module calls made over the Old Architecture bridge, which are not TurboModules\",status:\"backfill\"},aliases:[\"react_native.architecture\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_module.arch and deprecated it in favor of react_native.architecture\"}]},\"turbo_module.method\":{brief:\"The name of the native module method that was called. Only applies to React Native.\",type:\"string\",keys:[\"react_native.module.method\",\"turbo_module.method\"],applyScrubbing:{key:\"manual\",reason:\"Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable\"},isInOtel:!1,visibility:\"public\",example:\"getUniqueId\",examples:[\"getUniqueId\"],deprecation:{replacement:\"react_native.module.method\",reason:\"Replaced by the `react_native.*` namespace, which also covers native module calls made over the Old Architecture bridge, which are not TurboModules\",status:\"backfill\"},aliases:[\"react_native.module.method\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_module.method and deprecated it in favor of react_native.module.method\"}]},\"turbo_module.name\":{brief:\"The name of the native module the call was dispatched to. On the New Architecture this is the TurboModule name, on the Old Architecture the `NativeModules` key. Only applies to React Native.\",type:\"string\",keys:[\"react_native.module.name\",\"turbo_module.name\"],applyScrubbing:{key:\"manual\",reason:\"Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable\"},isInOtel:!1,visibility:\"public\",example:\"RNDeviceInfo\",examples:[\"RNDeviceInfo\"],deprecation:{replacement:\"react_native.module.name\",reason:\"Replaced by the `react_native.*` namespace, which also covers native module calls made over the Old Architecture bridge, which are not TurboModules\",status:\"backfill\"},aliases:[\"react_native.module.name\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_module.name and deprecated it in favor of react_native.module.name\"}]},\"turbo_module.top_module\":{brief:\"The native module and method that accounted for the most total duration during the lifetime of the span. Only applies to React Native.\",type:\"string\",keys:[\"react_native.module.top.name\",\"turbo_module.top_module\"],applyScrubbing:{key:\"manual\",reason:\"Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable\"},isInOtel:!1,visibility:\"public\",example:\"RNDeviceInfo.getUniqueId\",examples:[\"RNDeviceInfo.getUniqueId\"],deprecation:{replacement:\"react_native.module.top.name\",reason:\"Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping\",status:\"backfill\"},aliases:[\"react_native.module.top.name\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_module.top_module and deprecated it in favor of react_native.module.top.name\"}]},\"turbo_module.top_module_duration_ms\":{brief:\"The total duration attributed to the top native module method, in milliseconds. Only applies to React Native.\",type:\"double\",keys:[\"react_native.module.top.duration\",\"turbo_module.top_module_duration_ms\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:87.25,examples:[87.25],deprecation:{replacement:\"react_native.module.top.duration\",reason:\"Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping\",status:\"backfill\"},aliases:[\"react_native.module.top.duration\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_module.top_module_duration_ms and deprecated it in favor of react_native.module.top.duration\"}]},\"turbo_module.total_call_count\":{brief:\"The number of native module calls observed during the lifetime of the span. Only applies to React Native.\",type:\"integer\",keys:[\"react_native.module.call.count\",\"turbo_module.total_call_count\",\"turbo_modules.total_call_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:42,examples:[42],deprecation:{replacement:\"react_native.module.call.count\",reason:\"Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping\",status:\"backfill\"},aliases:[\"react_native.module.call.count\",\"turbo_modules.total_call_count\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_module.total_call_count and deprecated it in favor of react_native.module.call.count\"}]},\"turbo_module.total_duration_ms\":{brief:\"The combined duration of all native module calls observed during the lifetime of the span, in milliseconds. Only applies to React Native.\",type:\"double\",keys:[\"react_native.module.duration.total\",\"turbo_module.total_duration_ms\",\"turbo_modules.total_duration_ms\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:128.45,examples:[128.45],deprecation:{replacement:\"react_native.module.duration.total\",reason:\"Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping\",status:\"backfill\"},aliases:[\"react_native.module.duration.total\",\"turbo_modules.total_duration_ms\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_module.total_duration_ms and deprecated it in favor of react_native.module.duration.total\"}]},\"turbo_module.total_error_count\":{brief:\"The number of native module calls that failed during the lifetime of the span. Only applies to React Native.\",type:\"integer\",keys:[\"react_native.module.error.count\",\"turbo_module.total_error_count\",\"turbo_modules.total_error_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2,examples:[2],deprecation:{replacement:\"react_native.module.error.count\",reason:\"Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping\",status:\"backfill\"},aliases:[\"react_native.module.error.count\",\"turbo_modules.total_error_count\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_module.total_error_count and deprecated it in favor of react_native.module.error.count\"}]},\"turbo_module.unique_methods\":{brief:\"The number of distinct native module and method pairs called during the lifetime of the span. Only applies to React Native.\",type:\"integer\",keys:[\"react_native.module.call.distinct_count\",\"turbo_module.unique_methods\",\"turbo_modules.unique_methods\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:7,examples:[7],deprecation:{replacement:\"react_native.module.call.distinct_count\",reason:\"Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping\",status:\"backfill\"},aliases:[\"react_native.module.call.distinct_count\",\"turbo_modules.unique_methods\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_module.unique_methods and deprecated it in favor of react_native.module.call.distinct_count\"}]},type:{brief:\"More granular type of the operation happening.\",type:\"string\",keys:[\"type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"fetch\",changelog:[{version:\"0.0.0\"}]},\"ui.component_name\":{brief:\"The name of the associated component.\",type:\"string\",keys:[\"ui.component_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"HomeButton\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"ui.contributes_to_ttfd\":{brief:\"Whether the span execution contributed to the TTFD (time to fully drawn) metric.\",type:\"boolean\",keys:[\"ui.contributes_to_ttfd\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"ui.contributes_to_ttid\":{brief:\"Whether the span execution contributed to the TTID (time to initial display) metric.\",type:\"boolean\",keys:[\"ui.contributes_to_ttid\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"ui.element.height\":{brief:\"The height of the UI element (for Html in pixels)\",type:\"integer\",keys:[\"ui.element.height\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:256,changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.height attribute\"}]},\"ui.element.id\":{brief:\"The id of the UI element\",type:\"string\",keys:[\"ui.element.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"btn-login\",changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.id attribute\"}]},\"ui.element.identifier\":{brief:\"The identifier used to measure the UI element timing\",type:\"string\",keys:[\"ui.element.identifier\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"heroImage\",changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.identifier attribute\"}]},\"ui.element.load_time\":{brief:\"The loading time of a UI element (from time origin to finished loading)\",type:\"double\",keys:[\"ui.element.load_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:998.2234,changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.load_time attribute\"}]},\"ui.element.paint_type\":{brief:\"The type of element paint. Can either be 'image-paint' or 'text-paint'\",type:\"string\",keys:[\"ui.element.paint_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"image-paint\",changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.paint_type attribute\"}]},\"ui.element.render_time\":{brief:\"The rendering time of the UI element (from time origin to finished rendering)\",type:\"double\",keys:[\"ui.element.render_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1023.1124,changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.render_time attribute\"}]},\"ui.element.type\":{brief:\"type of the UI element\",type:\"string\",keys:[\"ui.element.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"img\",changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.type attribute\"}]},\"ui.element.url\":{brief:\"The URL of the UI element (e.g. an img src)\",type:\"string\",keys:[\"ui.element.url\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"https://assets.myapp.com/hero.png\",changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.url attribute\"}]},\"ui.element.width\":{brief:\"The width of the UI element (for HTML in pixels)\",type:\"integer\",keys:[\"ui.element.width\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:512,changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.width attribute\"}]},url:{brief:\"The URL of the resource that was fetched.\",type:\"string\",keys:[\"url.full\",\"aws.request.url\",\"http.url\",\"messaging.url\",\"url\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"https://example.com/test?foo=bar#buzz\",deprecation:{replacement:\"url.full\",status:\"backfill\"},aliases:[\"url.full\",\"http.url\",\"aws.request.url\",\"messaging.url\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.url as an alias\"},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"url.domain\":{brief:\"Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\",type:\"string\",keys:[\"url.domain\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"url.fragment\":{brief:\"The fragments present in the URI. Note that this does not contain the leading # character, while the `http.fragment` attribute does.\",type:\"string\",keys:[\"url.fragment\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"details\",changelog:[{version:\"0.0.0\"}]},\"url.full\":{brief:\"The URL of the resource that was fetched.\",type:\"string\",keys:[\"url.full\",\"aws.request.url\",\"http.url\",\"messaging.url\",\"url\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"https://example.com/test?foo=bar#buzz\",aliases:[\"http.url\",\"url\",\"aws.request.url\",\"messaging.url\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.url as an alias\"},{version:\"0.19.0\",prs:[488],description:\"Added aws.request.url as an alias\"},{version:\"0.1.0\",prs:[108]},{version:\"0.0.0\"}]},\"url.path\":{brief:\"The URI path component.\",type:\"string\",keys:[\"url.path\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"/foo\",changelog:[{version:\"0.0.0\"}]},\"url.path.parameter.<key>\":{brief:\"Decoded parameters extracted from a URL path. Usually added by client-side routing frameworks like vue-router.\",type:\"string\",keys:[\"url.path.parameter.<key>\",\"params.<key>\",\"url.path.params.<key>\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"url.path.parameter.id='123'\",aliases:[\"params.<key>\",\"url.path.params.<key>\"],changelog:[{version:\"0.21.0\",prs:[586],description:\"Added url.path.params.<key> as an alias\"},{version:\"0.1.0\",prs:[103]}]},\"url.path.params.<key>\":{brief:\"Decoded parameters extracted from a URL path. Usually added by client-side routing frameworks like vue-router.\",type:\"string\",keys:[\"url.path.parameter.<key>\",\"params.<key>\",\"url.path.params.<key>\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"url.path.params.id='123'\",examples:[\"url.path.params.id='123'\"],deprecation:{replacement:\"url.path.parameter.<key>\",reason:\"This attribute is being deprecated in favor of url.path.parameter.<key>.\",status:\"backfill\"},aliases:[\"url.path.parameter.<key>\",\"params.<key>\"],changelog:[{version:\"0.21.0\",prs:[586],description:\"Added url.path.params.<key> attribute\"}]},\"url.port\":{brief:\"Server port number.\",type:\"integer\",keys:[\"url.port\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:1337,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"url.query\":{brief:\"The query string present in the URL. Note that this does not contain the leading ? character, while the `http.query` attribute does.\",type:\"string\",keys:[\"url.query\"],applyScrubbing:{key:\"auto\",reason:\"Query string values can contain sensitive information. Clients should attempt to scrub parameters that might contain sensitive information.\"},isInOtel:!0,visibility:\"public\",example:\"foo=bar&bar=baz\",changelog:[{version:\"0.0.0\"}]},\"url.same_origin\":{brief:\"Indicates that a URL has the same origin as the current page's origin in the browser.\",type:\"boolean\",keys:[\"http.request.same_origin\",\"url.same_origin\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,deprecation:{replacement:\"http.request.same_origin\",reason:\"This attribute is being deprecated in favor of http.request.same_origin.\",status:\"backfill\"},aliases:[\"http.request.same_origin\"],changelog:[{version:\"0.16.0\",prs:[456],description:\"Added url.same_origin attribute, deprecated in favor of http.request.same_origin\"}]},\"url.scheme\":{brief:\"The URI scheme component identifying the used protocol.\",type:\"string\",keys:[\"url.scheme\",\"http.scheme\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"https\",aliases:[\"http.scheme\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"url.template\":{brief:\"The low-cardinality template of an absolute URL path reference.\",type:\"string\",keys:[\"url.template\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"/users/{id}\",examples:[\"/users/{id}\",\"/users/:id\",\"/about\"],changelog:[{version:\"0.19.0\",prs:[505,521],description:\"Added multiple examples, removed alias to `http.route`, added additional context\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}],additionalContext:[\"This attribute should primarily be set by client-side routing instrumentation, or `http.client` spans (if applicable).\",\"Use `http.route` for server-side instrumentation that captures the framework route of an incoming request.\"]},\"user_agent.original\":{brief:\"Value of the HTTP User-Agent header sent by the client.\",type:\"string\",keys:[\"user_agent.original\",\"http.user_agent\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1\",aliases:[\"http.user_agent\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"user.email\":{brief:\"User email address.\",type:\"string\",keys:[\"user.email\",\"sentry.user.email\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"test@example.com\",aliases:[\"sentry.user.email\"],changelog:[{version:\"0.0.0\"}]},\"user.full_name\":{brief:\"User's full name.\",type:\"string\",keys:[\"user.full_name\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"John Smith\",changelog:[{version:\"0.0.0\"}]},\"user.geo.city\":{brief:\"Human readable city name.\",type:\"string\",keys:[\"user.geo.city\",\"sentry.user.geo.city\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Toronto\",aliases:[\"sentry.user.geo.city\"],changelog:[{version:\"0.0.0\"}]},\"user.geo.country_code\":{brief:\"Two-letter country code (ISO 3166-1 alpha-2).\",type:\"string\",keys:[\"user.geo.country_code\",\"sentry.user.geo.country_code\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"CA\",aliases:[\"sentry.user.geo.country_code\"],changelog:[{version:\"0.0.0\"}]},\"user.geo.region\":{brief:\"Human readable region name or code.\",type:\"string\",keys:[\"user.geo.region\",\"sentry.user.geo.region\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Canada\",aliases:[\"sentry.user.geo.region\"],changelog:[{version:\"0.0.0\"}]},\"user.geo.subdivision\":{brief:\"Human readable subdivision name.\",type:\"string\",keys:[\"user.geo.subdivision\",\"sentry.user.geo.subdivision\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Ontario\",aliases:[\"sentry.user.geo.subdivision\"],changelog:[{version:\"0.0.0\"}]},\"user.hash\":{brief:\"Unique user hash to correlate information for a user in anonymized form.\",type:\"string\",keys:[\"user.hash\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"8ae4c2993e0f4f3b8b2d1b1f3b5e8f4d\",changelog:[{version:\"0.0.0\"}]},\"user.id\":{brief:\"Unique identifier of the user.\",type:\"string\",keys:[\"user.id\",\"sentry.user.id\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"S-1-5-21-202424912787-2692429404-2351956786-1000\",aliases:[\"sentry.user.id\"],changelog:[{version:\"0.0.0\"}]},\"user.ip_address\":{brief:\"The IP address of the user.\",type:\"string\",keys:[\"user.ip_address\",\"sentry.user.ip\",\"user.ip\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"192.168.1.1\",aliases:[\"sentry.user.ip\"],changelog:[{version:\"0.1.0\",prs:[75]}]},\"user.name\":{brief:\"Short name or login/username of the user.\",type:\"string\",keys:[\"user.name\",\"sentry.user.username\",\"user.username\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"j.smith\",aliases:[\"sentry.user.username\"],changelog:[{version:\"0.0.0\"}]},\"user.roles\":{brief:\"Array of user roles at the time of the event.\",type:\"string[]\",keys:[\"user.roles\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:[\"admin\",\"editor\"],changelog:[{version:\"0.0.0\"}]},\"vercel.ai.telemetry.metadata.<key>\":{brief:\"Metadata passed to a Vercel AI SDK call through `experimental_telemetry.metadata`, with <key> being the metadata key name.\",type:\"string\",keys:[\"vercel.ai.telemetry.metadata.<key>\"],applyScrubbing:{key:\"auto\",reason:\"Metadata is user-defined and can contain user data\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"vercel.ai.telemetry.metadata.tenantId='acme'\",examples:[\"vercel.ai.telemetry.metadata.tenantId='acme'\"],changelog:[{version:\"0.26.0\",prs:[662],description:\"Added vercel.ai.telemetry.metadata.<key> attribute\"}],additionalContext:[\"Set on `gen_ai` spans for `invoke_agent`, `generate_content` and `embeddings` operations. Not set on `execute_tool` spans.\",\"The Vercel AI SDK's own OpenTelemetry spans emit the same data as `ai.telemetry.metadata.<key>`.\",\"The Vercel AI SDK also allows numbers, booleans and arrays as metadata values. SDKs MUST convert these values to strings.\",\"This attribute is open-ended on purpose. The Vercel AI SDK does not define the metadata keys. If Vercel defines a stricter spec for this metadata, consider moving it into `gen_ai.*` attributes.\"]},\"vercel.branch\":{brief:\"Git branch name for Vercel project\",type:\"string\",keys:[\"vercel.branch\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"main\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.build_id\":{brief:\"Identifier for the Vercel build (only present on build logs)\",type:\"string\",keys:[\"vercel.build_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"bld_cotnkcr76\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.deployment_id\":{brief:\"Identifier for the Vercel deployment\",type:\"string\",keys:[\"vercel.deployment_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"dpl_233NRGRjVZX1caZrXWtz5g1TAksD\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.destination\":{brief:\"Origin of the external content in Vercel (only on external logs)\",type:\"string\",keys:[\"vercel.destination\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"https://vitals.vercel-insights.com/v1\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.edge_type\":{brief:\"Type of edge runtime in Vercel\",type:\"string\",keys:[\"vercel.edge_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"edge-function\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.entrypoint\":{brief:\"Entrypoint for the request in Vercel\",type:\"string\",keys:[\"vercel.entrypoint\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"api/index.js\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.execution_region\":{brief:\"Region where the request is executed\",type:\"string\",keys:[\"vercel.execution_region\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"sfo1\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.id\":{brief:\"Unique identifier for the log entry in Vercel\",type:\"string\",keys:[\"vercel.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1573817187330377061717300000\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.ja3_digest\":{brief:\"JA3 fingerprint digest of Vercel request\",type:\"string\",keys:[\"vercel.ja3_digest\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"769,47-53-5-10-49161-49162-49171-49172-50-56-19-4,0-10-11,23-24-25,0\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.ja4_digest\":{brief:\"JA4 fingerprint digest\",type:\"string\",keys:[\"vercel.ja4_digest\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"t13d1516h2_8daaf6152771_02713d6af862\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.log_type\":{brief:\"Vercel log output type\",type:\"string\",keys:[\"vercel.log_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"stdout\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.path\":{brief:\"Function or dynamic path of the request in Vercel.\",type:\"string\",keys:[\"vercel.path\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"/dynamic/[route].json\",changelog:[{version:\"0.6.0\",prs:[349],description:\"Added vercel.path attribute\"}]},\"vercel.project_id\":{brief:\"Identifier for the Vercel project\",type:\"string\",keys:[\"vercel.project_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"gdufoJxB6b9b1fEqr1jUtFkyavUU\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.project_name\":{brief:\"Name of the Vercel project\",type:\"string\",keys:[\"vercel.project_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"my-app\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.cache_id\":{brief:\"Original request ID when request is served from cache\",type:\"string\",keys:[\"vercel.proxy.cache_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"pdx1::v8g4b-1744143786684-93dafbc0f70d\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.client_ip\":{brief:\"Client IP address\",type:\"string\",keys:[\"vercel.proxy.client_ip\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"120.75.16.101\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.host\":{brief:\"Hostname of the request\",type:\"string\",keys:[\"vercel.proxy.host\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"test.vercel.app\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.lambda_region\":{brief:\"Region where lambda function executed\",type:\"string\",keys:[\"vercel.proxy.lambda_region\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"sfo1\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.method\":{brief:\"HTTP method of the request\",type:\"string\",keys:[\"vercel.proxy.method\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"GET\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.path\":{brief:\"Request path with query parameters\",type:\"string\",keys:[\"vercel.proxy.path\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"/dynamic/some-value.json?route=some-value\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.path_type\":{brief:\"How the request was served based on its path and project configuration\",type:\"string\",keys:[\"vercel.proxy.path_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"func\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.path_type_variant\":{brief:\"Variant of the path type\",type:\"string\",keys:[\"vercel.proxy.path_type_variant\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"api\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.referer\":{brief:\"Referer of the request\",type:\"string\",keys:[\"vercel.proxy.referer\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"*.vercel.app\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.region\":{brief:\"Region where the request is processed\",type:\"string\",keys:[\"vercel.proxy.region\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"sfo1\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.response_byte_size\":{brief:\"Size of the response in bytes\",type:\"integer\",keys:[\"vercel.proxy.response_byte_size\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1024,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.scheme\":{brief:\"Protocol of the request\",type:\"string\",keys:[\"vercel.proxy.scheme\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"https\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.status_code\":{brief:\"HTTP status code of the proxy request\",type:\"integer\",keys:[\"vercel.proxy.status_code\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:200,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.timestamp\":{brief:\"Unix timestamp when the proxy request was made\",type:\"integer\",keys:[\"vercel.proxy.timestamp\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1573817250172,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.user_agent\":{brief:\"User agent strings of the request\",type:\"string[]\",keys:[\"vercel.proxy.user_agent\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:[\"Mozilla/5.0...\"],changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.vercel_cache\":{brief:\"Cache status sent to the browser\",type:\"string\",keys:[\"vercel.proxy.vercel_cache\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"REVALIDATED\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.vercel_id\":{brief:\"Vercel-specific identifier\",type:\"string\",keys:[\"vercel.proxy.vercel_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"sfo1::abc123\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.waf_action\":{brief:\"Action taken by firewall rules\",type:\"string\",keys:[\"vercel.proxy.waf_action\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"deny\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.waf_rule_id\":{brief:\"ID of the firewall rule that matched\",type:\"string\",keys:[\"vercel.proxy.waf_rule_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"rule_gAHz8jtSB1Gy\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.request_id\":{brief:\"Identifier of the Vercel request\",type:\"string\",keys:[\"vercel.request_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"643af4e3-975a-4cc7-9e7a-1eda11539d90\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.source\":{brief:\"Origin of the Vercel log (build, edge, lambda, static, external, or firewall)\",type:\"string\",keys:[\"vercel.source\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"build\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.status_code\":{brief:\"HTTP status code of the request (-1 means no response returned and the lambda crashed)\",type:\"integer\",keys:[\"vercel.status_code\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:200,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.2.0\",prs:[163]}]}};export{e as ADDRESS,t as AI_CITATIONS,i as AI_COMPLETION_TOKENS_USED,a as AI_DOCUMENTS,s as AI_FINISH_REASON,r as AI_FREQUENCY_PENALTY,n as AI_FUNCTION_CALL,o as AI_GENERATION_ID,l as AI_INPUT_MESSAGES,p as AI_IS_SEARCH_REQUIRED,c as AI_METADATA,u as AI_MODEL_ID,m as AI_MODEL_PROVIDER,g as AI_PIPELINE_NAME,b as AI_PREAMBLE,y as AI_PRESENCE_PENALTY,_ as AI_PROMPT,h as AI_PROMPT_MESSAGES,f as AI_PROMPT_TOKENS_USED,v as AI_PROMPT_TOOLS,k as AI_RAW_PROMPTING,T as AI_RESPONSES,S as AI_RESPONSE_FORMAT,E as AI_RESPONSE_ID,O as AI_RESPONSE_MODEL,I as AI_RESPONSE_OBJECT,A as AI_RESPONSE_TEXT,w as AI_RESPONSE_TIMESTAMP,x as AI_RESPONSE_TOOLCALLS,R as AI_SCHEMA,N as AI_SEARCH_QUERIES,C as AI_SEARCH_RESULTS,P as AI_SEED,D as AI_STREAMING,L as AI_TAGS,q as AI_TEMPERATURE,M as AI_TEXTS,U as AI_TOOLCALL_ARGS,G as AI_TOOLCALL_RESULT,z as AI_TOOLS,Y as AI_TOOL_CALLS,V as AI_TOP_K,F as AI_TOP_P,K as AI_TOTAL_COST,B as AI_TOTAL_TOKENS_USED,W as AI_USAGE_TOKENS,H as AI_VALUES,j as AI_WARNINGS,Q as ANGULAR_VERSION,J as ANTHROPIC_TOOL_RESULT_CONTENT,X as APP_APP_BUILD,Z as APP_APP_IDENTIFIER,$ as APP_APP_NAME,ee as APP_APP_START_TIME,te as APP_APP_VERSION,ie as APP_BUILD,ae as APP_IDENTIFIER,se as APP_IN_FOREGROUND,re as APP_NAME,ne as APP_START_COLD,oe as APP_START_TIME,le as APP_START_TYPE,pe as APP_START_WARM,ce as APP_VERSION,ue as APP_VITALS_FRAMES_DELAY_VALUE,de as APP_VITALS_FRAMES_FROZEN_COUNT,me as APP_VITALS_FRAMES_FROZEN_RATE,ge as APP_VITALS_FRAMES_SLOW_COUNT,be as APP_VITALS_FRAMES_SLOW_RATE,ye as APP_VITALS_FRAMES_TOTAL_COUNT,_e as APP_VITALS_STALL_DURATION,he as APP_VITALS_STALL_PERCENTAGE,fe as APP_VITALS_START_COLD_VALUE,ve as APP_VITALS_START_PREWARMED,ke as APP_VITALS_START_REASON,Te as APP_VITALS_START_SCREEN,Se as APP_VITALS_START_TYPE,Ee as APP_VITALS_START_WARM_VALUE,Oe as APP_VITALS_TTFD_VALUE,Ie as APP_VITALS_TTID_VALUE,Ae as ART_GC_BLOCKING_COUNT,we as ART_GC_BLOCKING_TIME,xe as ART_GC_PRE_OOME_COUNT,Re as ART_GC_TOTAL_COUNT,Ne as ART_GC_TOTAL_TIME,Ce as ART_GC_WAITING_TIME,Pe as ART_MEMORY_FREE,De as ART_MEMORY_FREE_UNTIL_GC,Le as ART_MEMORY_FREE_UNTIL_OOME,qe as ART_MEMORY_MAX,Me as ART_MEMORY_TOTAL,cy as ATTRIBUTE_METADATA,py as ATTRIBUTE_TYPE,Ue as AWS_CLOUDWATCH_LOGS_LOG_GROUP,Ge as AWS_CLOUDWATCH_LOGS_LOG_STREAM,ze as AWS_CLOUDWATCH_LOGS_URL,Ye as AWS_DYNAMODB_ATTRIBUTES_TO_GET,Ve as AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS,Fe as AWS_DYNAMODB_CONSISTENT_READ,Ke as AWS_DYNAMODB_CONSUMED_CAPACITY,Be as AWS_DYNAMODB_COUNT,We as AWS_DYNAMODB_EXCLUSIVE_START_TABLE,He as AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES,je as AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES,Qe as AWS_DYNAMODB_INDEX_NAME,Je as AWS_DYNAMODB_ITEM_COLLECTION_METRICS,Xe as AWS_DYNAMODB_LIMIT,Ze as AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES,$e as AWS_DYNAMODB_PROJECTION,et as AWS_DYNAMODB_PROVISIONED_READ_CAPACITY,tt as AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY,it as AWS_DYNAMODB_SCANNED_COUNT,at as AWS_DYNAMODB_SCAN_FORWARD,st as AWS_DYNAMODB_SEGMENT,rt as AWS_DYNAMODB_SELECT,nt as AWS_DYNAMODB_TABLE_COUNT,ot as AWS_DYNAMODB_TABLE_NAMES,lt as AWS_DYNAMODB_TOTAL_SEGMENTS,pt as AWS_EXTENDED_REQUEST_ID,ct as AWS_KINESIS_STREAM_NAME,dt as AWS_LAMBDA_AWS_REQUEST_ID,mt as AWS_LAMBDA_EXECUTION_DURATION_IN_MILLIS,gt as AWS_LAMBDA_FUNCTION_NAME,bt as AWS_LAMBDA_FUNCTION_VERSION,yt as AWS_LAMBDA_INVOKED_ARN,_t as AWS_LAMBDA_INVOKED_FUNCTION_ARN,ht as AWS_LAMBDA_REMAINING_TIME_IN_MILLIS,ft as AWS_LOG_GROUP_NAMES,vt as AWS_LOG_STREAM_NAMES,kt as AWS_OPERATION_NAME,Tt as AWS_REGION,St as AWS_REQUEST_EXTENDED_ID,Et as AWS_REQUEST_ID,It as AWS_REQUEST_URL,At as AWS_S3_BUCKET,wt as AWS_S3_COPY_SOURCE,xt as AWS_S3_DELETE,Rt as AWS_S3_KEY,Nt as AWS_S3_PART_NUMBER,Ct as AWS_S3_UPLOAD_ID,Pt as AWS_SECRETSMANAGER_SECRET_ARN,Dt as AWS_SNS_TOPIC_ARN,Lt as AWS_SQS_QUEUE_URL,qt as AWS_STEP_FUNCTIONS_ACTIVITY_ARN,Mt as AWS_STEP_FUNCTIONS_EXECUTION_ARN,Ut as AWS_STEP_FUNCTIONS_STATE_MACHINE_ARN,Gt as BLOCKED_MAIN_THREAD,zt as BROWSER_BFCACHE_FRAME,Yt as BROWSER_BFCACHE_NOT_RESTORED_REASON_COUNT,Vt as BROWSER_BFCACHE_OUTCOME,Ft as BROWSER_BFCACHE_REASON,Kt as BROWSER_NAME,Bt as BROWSER_NAVIGATION_ID,Wt as BROWSER_NAVIGATION_TYPE,Ht as BROWSER_PAINT_TYPE,jt as BROWSER_PERFORMANCE_NAVIGATION_ACTIVATION_START,Qt as BROWSER_PERFORMANCE_TIME_ORIGIN,Jt as BROWSER_REPORT_TYPE,Xt as BROWSER_SCRIPT_INVOKER,Zt as BROWSER_SCRIPT_INVOKER_TYPE,$t as BROWSER_SCRIPT_SOURCE_CHAR_POSITION,ei as BROWSER_VERSION,ti as BROWSER_WEB_VITAL_CLS_REPORT_EVENT,ii as BROWSER_WEB_VITAL_CLS_SOURCE_KEY,ai as BROWSER_WEB_VITAL_CLS_SOURCE_KEY_BASE,si as BROWSER_WEB_VITAL_CLS_VALUE,ri as BROWSER_WEB_VITAL_FCP_VALUE,ni as BROWSER_WEB_VITAL_FP_VALUE,oi as BROWSER_WEB_VITAL_INP_INTERACTION_TYPE,li as BROWSER_WEB_VITAL_INP_TARGET,pi as BROWSER_WEB_VITAL_INP_VALUE,ci as BROWSER_WEB_VITAL_LCP_ELEMENT,ui as BROWSER_WEB_VITAL_LCP_ID,di as BROWSER_WEB_VITAL_LCP_LOAD_TIME,mi as BROWSER_WEB_VITAL_LCP_RENDER_TIME,gi as BROWSER_WEB_VITAL_LCP_REPORT_EVENT,bi as BROWSER_WEB_VITAL_LCP_SIZE,yi as BROWSER_WEB_VITAL_LCP_URL,_i as BROWSER_WEB_VITAL_LCP_VALUE,hi as BROWSER_WEB_VITAL_TTFB_REQUEST_TIME,fi as BROWSER_WEB_VITAL_TTFB_VALUE,vi as CACHE_HIT,ki as CACHE_ITEM_AGE,Ti as CACHE_ITEM_SIZE,Si as CACHE_KEY,Ei as CACHE_OPERATION,Oi as CACHE_TAGS,Ii as CACHE_TTL,Ai as CACHE_WRITE,wi as CHANNEL,xi as CLIENT_ADDRESS,Ri as CLIENT_PORT,Ni as CLOUDFLARE_D1_DURATION,Ci as CLOUDFLARE_D1_QUERY_TYPE,Pi as CLOUDFLARE_D1_ROWS_READ,Di as CLOUDFLARE_D1_ROWS_WRITTEN,Li as CLOUDFLARE_DURABLE_OBJECT_QUERY_BINDINGS,qi as CLOUDFLARE_DURABLE_OBJECT_RESPONSE_ROWS_READ,Mi as CLOUDFLARE_DURABLE_OBJECT_RESPONSE_ROWS_WRITTEN,Ui as CLOUDFLARE_R2_BUCKET,Gi as CLOUDFLARE_R2_OPERATION,zi as CLOUDFLARE_R2_REQUEST_DELIMITER,Yi as CLOUDFLARE_R2_REQUEST_KEY,Vi as CLOUDFLARE_R2_REQUEST_PART_NUMBER,Fi as CLOUDFLARE_R2_REQUEST_PREFIX,Ki as CLOUDFLARE_WORKFLOW_ATTEMPT,Bi as CLOUDFLARE_WORKFLOW_RETRIES_BACKOFF,Wi as CLOUDFLARE_WORKFLOW_RETRIES_DELAY,Hi as CLOUDFLARE_WORKFLOW_RETRIES_LIMIT,ji as CLOUDFLARE_WORKFLOW_TIMEOUT,Qi as CLOUD_ACCOUNT_ID,Ji as CLOUD_AVAILABILITY_ZONE,Xi as CLOUD_PLATFORM,Zi as CLOUD_PROVIDER,$i as CLOUD_REGION,ea as CLOUD_RESOURCE_ID,ta as CLS,ia as CLS_SOURCE_KEY,aa as CLS_SOURCE_KEY_BASE,sa as CODE,ra as CODE_FILEPATH,na as CODE_FILE_PATH,oa as CODE_FUNCTION,la as CODE_FUNCTION_NAME,pa as CODE_LINENO,ca as CODE_LINE_NUMBER,ua as CODE_NAMESPACE,da as CONNECTIONTYPE,ma as CONNECTION_RTT,ga as CULTURE_CALENDAR,ba as CULTURE_DISPLAY_NAME,ya as CULTURE_IS_24_HOUR_FORMAT,_a as CULTURE_LOCALE,ha as CULTURE_TIMEZONE,fa as DB_COLLECTION_NAME,va as DB_CONNECTION_STRING,ka as DB_DRIVER_NAME,Ta as DB_MONGODB_COLLECTION,Sa as DB_NAME,Ea as DB_NAMESPACE,Oa as DB_OPERATION,Ia as DB_OPERATION_BATCH_SIZE,Aa as DB_OPERATION_NAME,wa as DB_PARAMS,xa as DB_QUERY_PARAMETER_KEY,Ra as DB_QUERY_PARAMETER_KEY_BASE,Na as DB_QUERY_SUMMARY,Ca as DB_QUERY_TEXT,Pa as DB_REDIS_CONNECTION,Da as DB_REDIS_KEY,La as DB_REDIS_PARAMETERS,qa as DB_RESPONSE_STATUS_CODE,Ma as DB_SQL_BINDINGS,Ua as DB_STATEMENT,Ga as DB_STORED_PROCEDURE_NAME,za as DB_SYSTEM,Ya as DB_SYSTEM_NAME,Va as DB_USER,Fa as DEVICEMEMORY,Ka as DEVICE_ARCHS,Ba as DEVICE_BATTERY_LEVEL,Wa as DEVICE_BATTERY_TEMPERATURE,Ha as DEVICE_BOOT_TIME,ja as DEVICE_BRAND,Qa as DEVICE_CHARGING,Ja as DEVICE_CHIPSET,Xa as DEVICE_CLASS,Za as DEVICE_CONNECTION_TYPE,$a as DEVICE_CPU_DESCRIPTION,es as DEVICE_EXTERNAL_FREE_STORAGE,ts as DEVICE_EXTERNAL_STORAGE_SIZE,is as DEVICE_FAMILY,as as DEVICE_FREE_MEMORY,ss as DEVICE_FREE_STORAGE,rs as DEVICE_ID,ns as DEVICE_LOCALE,os as DEVICE_LOW_MEMORY,ls as DEVICE_LOW_POWER_MODE,ps as DEVICE_MANUFACTURER,cs as DEVICE_MEMORY_ESTIMATED_CAPACITY,us as DEVICE_MEMORY_SIZE,ds as DEVICE_MODEL,ms as DEVICE_MODEL_ID,gs as DEVICE_NAME,bs as DEVICE_ONLINE,ys as DEVICE_ORIENTATION,_s as DEVICE_PROCESSOR_COUNT,hs as DEVICE_PROCESSOR_FREQUENCY,fs as DEVICE_SCREEN_DENSITY,vs as DEVICE_SCREEN_DPI,ks as DEVICE_SCREEN_HEIGHT_PIXELS,Ts as DEVICE_SCREEN_WIDTH_PIXELS,Ss as DEVICE_SIMULATOR,Es as DEVICE_STORAGE_SIZE,Os as DEVICE_THERMAL_STATE,Is as DEVICE_TIMEZONE,As as DEVICE_USABLE_MEMORY,ws as DIST,xs as DJANGO_FUNCTION_NAME,Rs as DJANGO_MIDDLEWARE_NAME,Ns as EFFECTIVECONNECTIONTYPE,Cs as ENVIRONMENT,Ps as ERROR_TYPE,Ds as EVENT_ID,Ls as EVENT_NAME,qs as EXCEPTION_ESCAPED,Ms as EXCEPTION_MESSAGE,Us as EXCEPTION_STACKTRACE,Gs as EXCEPTION_TYPE,zs as FAAS_COLDSTART,Ys as FAAS_CRON,Vs as FAAS_DURATION_IN_MS,Fs as FAAS_ENTRY_POINT,Ks as FAAS_EXECUTION,Bs as FAAS_ID,Ws as FAAS_IDENTITY,Hs as FAAS_INVOCATION_ID,js as FAAS_INVOKED_NAME,Qs as FAAS_INVOKED_PROVIDER,Js as FAAS_INVOKED_REGION,Xs as FAAS_NAME,Zs as FAAS_TIME,$s as FAAS_TRIGGER,er as FAAS_VERSION,tr as FCP,ir as FILE_PATH,ar as FILE_SIZE,sr as FLAG_EVALUATION_KEY,rr as FLAG_EVALUATION_KEY_BASE,nr as FP,or as FRAMES_DELAY,lr as FRAMES_FROZEN,pr as FRAMES_FROZEN_RATE,cr as FRAMES_SLOW,ur as FRAMES_SLOW_RATE,dr as FRAMES_TOTAL,mr as FS_ERROR,gr as GCP_FUNCTION_CONTEXT_EVENT_ID,br as GCP_FUNCTION_CONTEXT_EVENT_TYPE,yr as GCP_FUNCTION_CONTEXT_ID,_r as GCP_FUNCTION_CONTEXT_RESOURCE,hr as GCP_FUNCTION_CONTEXT_SOURCE,fr as GCP_FUNCTION_CONTEXT_SPECVERSION,vr as GCP_FUNCTION_CONTEXT_TIME,kr as GCP_FUNCTION_CONTEXT_TIMESTAMP,Tr as GCP_FUNCTION_CONTEXT_TYPE,Sr as GCP_PROJECT_ID,Er as GCP_REGION,Or as GEN_AI_AGENT_NAME,Ir as GEN_AI_CONTEXT_UTILIZATION,Ar as GEN_AI_CONTEXT_WINDOW_SIZE,wr as GEN_AI_CONVERSATION_ID,xr as GEN_AI_COST_CACHE_CREATION_INPUT_TOKENS,Rr as GEN_AI_COST_CACHE_READ_INPUT_TOKENS,Nr as GEN_AI_COST_INPUT_TOKENS,Cr as GEN_AI_COST_OUTPUT_TOKENS,Pr as GEN_AI_COST_REASONING_OUTPUT_TOKENS,Dr as GEN_AI_COST_TOTAL_TOKENS,Lr as GEN_AI_EMBEDDINGS_INPUT,qr as GEN_AI_FUNCTION_ID,Mr as GEN_AI_INPUT_MESSAGES,Ur as GEN_AI_MEMORY_QUERY_TEXT,Gr as GEN_AI_MEMORY_RECORDS,zr as GEN_AI_MEMORY_RECORD_COUNT,Yr as GEN_AI_MEMORY_RECORD_ID,Vr as GEN_AI_MEMORY_STORE_ID,Fr as GEN_AI_OPERATION_NAME,Kr as GEN_AI_OPERATION_TYPE,Br as GEN_AI_OUTPUT_MESSAGES,Wr as GEN_AI_PIPELINE_NAME,Hr as GEN_AI_PROMPT,jr as GEN_AI_PROMPT_NAME,Qr as GEN_AI_PROMPT_VARIABLE_KEY,Jr as GEN_AI_PROMPT_VARIABLE_KEY_BASE,Xr as GEN_AI_PROVIDER_NAME,Zr as GEN_AI_REQUEST_AVAILABLE_TOOLS,$r as GEN_AI_REQUEST_FREQUENCY_PENALTY,en as GEN_AI_REQUEST_MAX_TOKENS,tn as GEN_AI_REQUEST_MESSAGES,an as GEN_AI_REQUEST_MODEL,sn as GEN_AI_REQUEST_PRESENCE_PENALTY,rn as GEN_AI_REQUEST_REASONING_LEVEL,nn as GEN_AI_REQUEST_SCHEMA,on as GEN_AI_REQUEST_SEED,ln as GEN_AI_REQUEST_STOP_SEQUENCES,pn as GEN_AI_REQUEST_TEMPERATURE,cn as GEN_AI_REQUEST_TOP_K,un as GEN_AI_REQUEST_TOP_P,dn as GEN_AI_RESPONSE_FINISH_REASON,mn as GEN_AI_RESPONSE_FINISH_REASONS,gn as GEN_AI_RESPONSE_ID,bn as GEN_AI_RESPONSE_MODEL,yn as GEN_AI_RESPONSE_OBJECT,_n as GEN_AI_RESPONSE_STREAMING,hn as GEN_AI_RESPONSE_TEXT,fn as GEN_AI_RESPONSE_TIME_TO_FIRST_CHUNK,vn as GEN_AI_RESPONSE_TIME_TO_FIRST_TOKEN,kn as GEN_AI_RESPONSE_TOKENS_PER_SECOND,Tn as GEN_AI_RESPONSE_TOOL_CALLS,Sn as GEN_AI_SYSTEM,En as GEN_AI_SYSTEM_INSTRUCTIONS,On as GEN_AI_SYSTEM_MESSAGE,In as GEN_AI_TOOL_CALL_ARGUMENTS,An as GEN_AI_TOOL_CALL_RESULT,wn as GEN_AI_TOOL_DEFINITIONS,xn as GEN_AI_TOOL_DESCRIPTION,Rn as GEN_AI_TOOL_INPUT,Nn as GEN_AI_TOOL_MESSAGE,Cn as GEN_AI_TOOL_NAME,Pn as GEN_AI_TOOL_OUTPUT,Dn as GEN_AI_TOOL_TYPE,Ln as GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS,Mn as GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS,Gn as GEN_AI_USAGE_COMPLETION_TOKENS,zn as GEN_AI_USAGE_INPUT_TOKENS,Yn as GEN_AI_USAGE_INPUT_TOKENS_CACHED,Vn as GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE,Fn as GEN_AI_USAGE_OUTPUT_TOKENS,Kn as GEN_AI_USAGE_OUTPUT_TOKENS_REASONING,Bn as GEN_AI_USAGE_PROMPT_TOKENS,Wn as GEN_AI_USAGE_REASONING_OUTPUT_TOKENS,Hn as GEN_AI_USAGE_TOTAL_TOKENS,jn as GRAPHQL_DOCUMENT,Qn as GRAPHQL_OPERATION_NAME,Jn as GRAPHQL_OPERATION_TYPE,Xn as GRAPHQL_PROCESSING_TYPE,Zn as GRAPHQL_SOURCE,$n as GRPC_ERROR_BAD_REQUEST_FIELD_VIOLATIONS,eo as GRPC_ERROR_DEBUG_INFO_DETAIL,to as GRPC_ERROR_DEBUG_INFO_STACK_ENTRIES,io as GRPC_ERROR_ERROR_INFO_DOMAIN,ao as GRPC_ERROR_ERROR_INFO_METADATA_KEY,so as GRPC_ERROR_ERROR_INFO_METADATA_KEY_BASE,ro as GRPC_ERROR_ERROR_INFO_REASON,no as GRPC_ERROR_PRECONDITION_FAILURE_VIOLATIONS,oo as GRPC_ERROR_QUOTA_FAILURE_VIOLATIONS,lo as GRPC_ERROR_RESOURCE_INFO_DESCRIPTION,po as GRPC_ERROR_RESOURCE_INFO_OWNER,co as GRPC_ERROR_RESOURCE_INFO_RESOURCE_NAME,uo as GRPC_ERROR_RESOURCE_INFO_RESOURCE_TYPE,mo as GRPC_ERROR_RETRY_INFO_RETRY_DELAY_MS,go as HARDWARECONCURRENCY,bo as HTTP_CLIENT_IP,yo as HTTP_DECODED_RESPONSE_CONTENT_LENGTH,_o as HTTP_FLAVOR,ho as HTTP_FRAGMENT,fo as HTTP_HOST,vo as HTTP_METHOD,ko as HTTP_QUERY,To as HTTP_REQUEST_BODY_DATA,So as HTTP_REQUEST_BODY_DECODED_SIZE,Eo as HTTP_REQUEST_BODY_SIZE,Oo as HTTP_REQUEST_CONNECTION_END,Io as HTTP_REQUEST_CONNECT_START,Ao as HTTP_REQUEST_CONTENT_LENGTH,wo as HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED,xo as HTTP_REQUEST_DOMAIN_LOOKUP_END,Ro as HTTP_REQUEST_DOMAIN_LOOKUP_START,No as HTTP_REQUEST_FETCH_START,Co as HTTP_REQUEST_HEADER_KEY,Po as HTTP_REQUEST_HEADER_KEY_BASE,Do as HTTP_REQUEST_METHOD,qo as HTTP_REQUEST_REDIRECT_END,Mo as HTTP_REQUEST_REDIRECT_START,Uo as HTTP_REQUEST_REQUEST_START,Go as HTTP_REQUEST_RESEND_COUNT,zo as HTTP_REQUEST_RESPONSE_END,Yo as HTTP_REQUEST_RESPONSE_START,Vo as HTTP_REQUEST_SAME_ORIGIN,Fo as HTTP_REQUEST_SECURE_CONNECTION_START,Ko as HTTP_REQUEST_TIME_TO_FIRST_BYTE,Bo as HTTP_REQUEST_WORKER_START,Wo as HTTP_RESPONSE_BODY_DECODED_SIZE,Ho as HTTP_RESPONSE_BODY_SIZE,jo as HTTP_RESPONSE_CONTENT_LENGTH,Qo as HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED,Jo as HTTP_RESPONSE_HEADER_CONTENT_LENGTH,Xo as HTTP_RESPONSE_HEADER_KEY,Zo as HTTP_RESPONSE_HEADER_KEY_BASE,$o as HTTP_RESPONSE_SIZE,el as HTTP_RESPONSE_STATUS_CODE,tl as HTTP_RESPONSE_STATUS_TEXT,il as HTTP_RESPONSE_TRANSFER_SIZE,al as HTTP_ROUTE,sl as HTTP_SCHEME,rl as HTTP_SERVER_NAME,nl as HTTP_SERVER_REQUEST_TIME_IN_QUEUE,ol as HTTP_STATUS_CODE,ll as HTTP_STATUS_TEXT,pl as HTTP_TARGET,cl as HTTP_URL,ul as HTTP_USER_AGENT,dl as ID,ml as INP,gl as INTEGRITY_BLOCKED_URL,bl as INTEGRITY_DESTINATION,yl as INTEGRITY_DOCUMENT_URL,_l as INTEGRITY_REPORT_ONLY,hl as JSONRPC_PROTOCOL_VERSION,fl as JSONRPC_REQUEST_ID,vl as JVM_GC_ACTION,kl as JVM_GC_NAME,Tl as JVM_MEMORY_POOL_NAME,Sl as JVM_MEMORY_TYPE,El as JVM_THREAD_DAEMON,Ol as JVM_THREAD_STATE,Il as KOA_NAME,Al as KOA_TYPE,wl as LANGCHAIN_CHAIN_NAME,xl as LCP,Rl as LCP_ELEMENT,Nl as LCP_ID,Cl as LCP_LOADTIME,Pl as LCP_RENDERTIME,Dl as LCP_SIZE,Ll as LCP_URL,ql as LITESTAR_MIDDLEWARE_NAME,Ml as LOGGER_NAME,Ul as MCP_AUTH_CLIENT_NAME,Gl as MCP_CANCELLED_REASON,zl as MCP_CANCELLED_REQUEST_ID,Yl as MCP_CLIENT_NAME,Vl as MCP_CLIENT_TITLE,Fl as MCP_CLIENT_VERSION,Kl as MCP_LIFECYCLE_PHASE,Bl as MCP_LOGGING_DATA_TYPE,Wl as MCP_LOGGING_LEVEL,Hl as MCP_LOGGING_LOGGER,jl as MCP_LOGGING_MESSAGE,Ql as MCP_METHOD_NAME,Jl as MCP_PROGRESS_CURRENT,Xl as MCP_PROGRESS_MESSAGE,Zl as MCP_PROGRESS_PERCENTAGE,$l as MCP_PROGRESS_TOKEN,ep as MCP_PROGRESS_TOTAL,tp as MCP_PROMPT_NAME,ip as MCP_PROMPT_RESULT_DESCRIPTION,ap as MCP_PROMPT_RESULT_KEY_CONTENT,sp as MCP_PROMPT_RESULT_KEY_ROLE,rp as MCP_PROMPT_RESULT_MESSAGE_CONTENT,np as MCP_PROMPT_RESULT_MESSAGE_COUNT,op as MCP_PROMPT_RESULT_MESSAGE_ROLE,lp as MCP_PROTOCOL_READY,pp as MCP_PROTOCOL_VERSION,cp as MCP_REQUEST_ARGUMENT_KEY,up as MCP_REQUEST_ARGUMENT_KEY_BASE,dp as MCP_REQUEST_ARGUMENT_NAME,mp as MCP_REQUEST_ARGUMENT_URI,gp as MCP_REQUEST_ID,bp as MCP_RESOURCE_PROTOCOL,yp as MCP_RESOURCE_URI,_p as MCP_SERVER_NAME,hp as MCP_SERVER_TITLE,fp as MCP_SERVER_VERSION,vp as MCP_SESSION_ID,kp as MCP_TOOL_NAME,Tp as MCP_TOOL_RESULT_CONTENT,Sp as MCP_TOOL_RESULT_CONTENT_COUNT,Ep as MCP_TOOL_RESULT_CONTENT_TYPE,Op as MCP_TOOL_RESULT_DATA_SIZE,Ip as MCP_TOOL_RESULT_IS_ERROR,Ap as MCP_TOOL_RESULT_KEY_CONTENT,wp as MCP_TOOL_RESULT_KEY_CONTENT_TYPE,xp as MCP_TOOL_RESULT_KEY_DATA_SIZE,Rp as MCP_TOOL_RESULT_KEY_MIME_TYPE,Np as MCP_TOOL_RESULT_KEY_NAME,Cp as MCP_TOOL_RESULT_KEY_RESOURCE_MIME_TYPE,Pp as MCP_TOOL_RESULT_KEY_RESOURCE_URI,Dp as MCP_TOOL_RESULT_KEY_URI,Lp as MCP_TOOL_RESULT_MIME_TYPE,qp as MCP_TOOL_RESULT_NAME,Mp as MCP_TOOL_RESULT_RESOURCE_MIME_TYPE,Up as MCP_TOOL_RESULT_RESOURCE_URI,Gp as MCP_TOOL_RESULT_URI,zp as MCP_TRANSPORT,Yp as MDC_KEY,Vp as MDC_KEY_BASE,Fp as MESSAGING_BATCH_MESSAGE_COUNT,Kp as MESSAGING_CONVERSATION_ID,Bp as MESSAGING_DESTINATION,Wp as MESSAGING_DESTINATION_CONNECTION,Hp as MESSAGING_DESTINATION_KIND,jp as MESSAGING_DESTINATION_NAME,Qp as MESSAGING_DESTINATION_PARTITION_ID,Jp as MESSAGING_KAFKA_MESSAGE_KEY,Xp as MESSAGING_KAFKA_MESSAGE_TOMBSTONE,Zp as MESSAGING_KAFKA_OFFSET,$p as MESSAGING_MESSAGE_BODY_SIZE,ec as MESSAGING_MESSAGE_CONVERSATION_ID,tc as MESSAGING_MESSAGE_ENVELOPE_SIZE,ic as MESSAGING_MESSAGE_ID,sc as MESSAGING_MESSAGE_RECEIVE_LATENCY,rc as MESSAGING_MESSAGE_RETRY_COUNT,nc as MESSAGING_OPERATION,oc as MESSAGING_OPERATION_NAME,lc as MESSAGING_OPERATION_TYPE,pc as MESSAGING_PROTOCOL,cc as MESSAGING_PROTOCOL_VERSION,uc as MESSAGING_RABBITMQ_DESTINATION_ROUTING_KEY,dc as MESSAGING_RABBITMQ_ROUTING_KEY,mc as MESSAGING_SYSTEM,gc as MESSAGING_URL,bc as METHOD,yc as MIDDLEWARE_NAME,_c as NAVIGATION_ORIGIN,hc as NAVIGATION_ROUTE_ID,fc as NAVIGATION_TYPE,vc as NEL_ELAPSED_TIME,kc as NEL_PHASE,Tc as NEL_REFERRER,Sc as NEL_SAMPLING_FRACTION,Ec as NEL_SAMPLING_FUNCTION,Oc as NEL_TYPE,Ic as NETWORK_CONNECTION_EFFECTIVE_TYPE,Ac as NETWORK_CONNECTION_RTT,wc as NETWORK_CONNECTION_TYPE,xc as NETWORK_LOCAL_ADDRESS,Rc as NETWORK_LOCAL_PORT,Nc as NETWORK_PEER_ADDRESS,Cc as NETWORK_PEER_PORT,Pc as NETWORK_PROTOCOL_NAME,Dc as NETWORK_PROTOCOL_VERSION,Lc as NETWORK_TRANSPORT,qc as NETWORK_TYPE,Mc as NET_HOST_IP,Uc as NET_HOST_NAME,Gc as NET_HOST_PORT,zc as NET_PEER_IP,Yc as NET_PEER_NAME,Vc as NET_PEER_PORT,Fc as NET_PROTOCOL_NAME,Kc as NET_PROTOCOL_VERSION,Bc as NET_SOCK_FAMILY,Wc as NET_SOCK_HOST_ADDR,Hc as NET_SOCK_HOST_PORT,jc as NET_SOCK_PEER_ADDR,Qc as NET_SOCK_PEER_NAME,Jc as NET_SOCK_PEER_PORT,Xc as NET_TRANSPORT,Zc as OS_BUILD,$c as OS_BUILD_ID,eu as OS_DESCRIPTION,tu as OS_KERNEL_VERSION,iu as OS_NAME,au as OS_RAW_DESCRIPTION,su as OS_ROOTED,ru as OS_THEME,nu as OS_TYPE,ou as OS_VERSION,lu as OTEL_KIND,pu as OTEL_SCOPE_NAME,cu as OTEL_SCOPE_VERSION,uu as OTEL_STATUS_CODE,du as OTEL_STATUS_DESCRIPTION,mu as PARAMS_KEY,gu as PARAMS_KEY_BASE,bu as PERFORMANCE_ACTIVATIONSTART,yu as PERFORMANCE_TIMEORIGIN,_u as PORT,hu as PREVIOUS_ROUTE,fu as PROCESS_COMMAND_ARGS,vu as PROCESS_EXECUTABLE_NAME,ku as PROCESS_PID,Tu as PROCESS_RUNTIME_DESCRIPTION,Su as PROCESS_RUNTIME_ENGINE_NAME,Eu as PROCESS_RUNTIME_ENGINE_VERSION,Ou as PROCESS_RUNTIME_NAME,Iu as PROCESS_RUNTIME_VERSION,Au as PROFILE_ID,wu as QUERY,xu as QUERY_KEY,Ru as QUERY_KEY_BASE,Nu as REACT_NATIVE_ARCHITECTURE,Cu as REACT_NATIVE_MODULE_CALL_COUNT,Pu as REACT_NATIVE_MODULE_CALL_DISTINCT_COUNT,Du as REACT_NATIVE_MODULE_DURATION_MAX,Lu as REACT_NATIVE_MODULE_DURATION_TOTAL,qu as REACT_NATIVE_MODULE_ERROR_COUNT,Mu as REACT_NATIVE_MODULE_KIND,Uu as REACT_NATIVE_MODULE_METHOD,Gu as REACT_NATIVE_MODULE_NAME,zu as REACT_NATIVE_MODULE_TOP_DURATION,Yu as REACT_NATIVE_MODULE_TOP_NAME,Vu as REACT_VERSION,Fu as REDIS_COMMAND,Ku as REDIS_KEY,Bu as RELEASE,Wu as REMIX_ACTION_FORM_DATA_KEY,Hu as REMIX_ACTION_FORM_DATA_KEY_BASE,ju as REPLAYID,Qu as REPLAY_ID,Ju as RESOURCE_DEPLOYMENT_ENVIRONMENT,Xu as RESOURCE_DEPLOYMENT_ENVIRONMENT_NAME,Zu as RESOURCE_RENDER_BLOCKING_STATUS,$u as ROUTE,ed as ROUTER_NAVIGATION_ORIGIN,td as ROUTER_NAVIGATION_ROUTE_ID,id as ROUTER_NAVIGATION_TYPE,ad as RPC_GRPC_STATUS_CODE,sd as RPC_METHOD,rd as RPC_RESPONSE_STATUS_CODE,nd as RPC_SERVICE,od as RPC_SYSTEM,ld as RPC_SYSTEM_NAME,pd as RUNTIME_BUILD,cd as RUNTIME_NAME,ud as RUNTIME_RAW_DESCRIPTION,dd as RUNTIME_VERSION,md as SCORE_KEY,gd as SCORE_KEY_BASE,bd as SCORE_RATIO_KEY,yd as SCORE_RATIO_KEY_BASE,_d as SCORE_TOTAL,hd as SCORE_WEIGHT_KEY,fd as SCORE_WEIGHT_KEY_BASE,vd as SENTRY_ACTION,kd as SENTRY_BROWSER_NAME,Td as SENTRY_BROWSER_VERSION,Sd as SENTRY_CANCELLATION_REASON,Ed as SENTRY_CATEGORY,Od as SENTRY_CLIENT_SAMPLE_RATE,Id as SENTRY_DESCRIPTION,Ad as SENTRY_DIST,wd as SENTRY_DOMAIN,xd as SENTRY_DSC_ENVIRONMENT,Rd as SENTRY_DSC_PROJECT_ID,Nd as SENTRY_DSC_PUBLIC_KEY,Cd as SENTRY_DSC_RELEASE,Pd as SENTRY_DSC_SAMPLED,Dd as SENTRY_DSC_SAMPLE_RATE,Ld as SENTRY_DSC_TRACE_ID,qd as SENTRY_DSC_TRANSACTION,Md as SENTRY_ENVIRONMENT,Ud as SENTRY_EVENT_SERIALIZED_BREADCRUMBS,Gd as SENTRY_EVENT_SERIALIZED_CONTEXTS,zd as SENTRY_EVENT_SERIALIZED_EXTRA,Yd as SENTRY_EVENT_SERIALIZED_META,Vd as SENTRY_EXCLUSIVE_TIME,Fd as SENTRY_FRAMES_FROZEN,Kd as SENTRY_FRAMES_SLOW,Bd as SENTRY_FRAMES_TOTAL,Wd as SENTRY_GRAPHQL_OPERATION,Hd as SENTRY_GROUP,jd as SENTRY_HTTP_PREFETCH,Qd as SENTRY_IDLE_SPAN_FINISH_REASON,Jd as SENTRY_IS_LOCALHOST,Xd as SENTRY_IS_REMOTE,Zd as SENTRY_KIND,$d as SENTRY_LINK_TYPE,em as SENTRY_MAIN_THREAD,tm as SENTRY_MESSAGE_PARAMETER_KEY,im as SENTRY_MESSAGE_TEMPLATE,am as SENTRY_METRIC_SOURCE,sm as SENTRY_MOBILE,rm as SENTRY_MODULE_KEY,nm as SENTRY_MODULE_KEY_BASE,om as SENTRY_NEXTJS_SSR_FUNCTION_ROUTE,lm as SENTRY_NEXTJS_SSR_FUNCTION_TYPE,pm as SENTRY_NORMALIZED_DB_QUERY,cm as SENTRY_NORMALIZED_DB_QUERY_HASH,um as SENTRY_NORMALIZED_DESCRIPTION,dm as SENTRY_OBSERVED_TIMESTAMP_NANOS,mm as SENTRY_OP,gm as SENTRY_ORIGIN,bm as SENTRY_PAGELOAD_SPAN_ID,ym as SENTRY_PLATFORM,_m as SENTRY_PROFILER_ID,hm as SENTRY_PROFILE_ID,fm as SENTRY_RELAY_INGRESS,vm as SENTRY_RELAY_PIPELINE,km as SENTRY_RELEASE,Tm as SENTRY_REPLAY_ID,Sm as SENTRY_REPLAY_IS_BUFFERING,Em as SENTRY_REPORT_EVENT,Om as SENTRY_SDK_INTEGRATIONS,Im as SENTRY_SDK_NAME,Am as SENTRY_SDK_VERSION,wm as SENTRY_SEGMENT_ID,Rm as SENTRY_SEGMENT_NAME,Nm as SENTRY_SEGMENT_NAME_SOURCE,Cm as SENTRY_SERVER_SAMPLE_RATE,Pm as SENTRY_SOURCE,Dm as SENTRY_SPAN_SOURCE,Lm as SENTRY_STATUS,qm as SENTRY_STATUS_CODE,Mm as SENTRY_STATUS_MESSAGE,Um as SENTRY_SVELTEKIT_NAVIGATION_FROM,Gm as SENTRY_SVELTEKIT_NAVIGATION_TO,zm as SENTRY_SVELTEKIT_NAVIGATION_TYPE,Ym as SENTRY_THREAD_ID,Vm as SENTRY_TIMESTAMP_SEQUENCE,Fm as SENTRY_TRACE_LIFECYCLE,Km as SENTRY_TRACE_PARENT_SPAN_ID,Bm as SENTRY_TRACE_STATUS,Wm as SENTRY_TRANSACTION,Hm as SENTRY_USER_EMAIL,jm as SENTRY_USER_GEO_CITY,Qm as SENTRY_USER_GEO_COUNTRY_CODE,Jm as SENTRY_USER_GEO_REGION,Xm as SENTRY_USER_GEO_SUBDIVISION,Zm as SENTRY_USER_ID,$m as SENTRY_USER_IP,eg as SENTRY_USER_USERNAME,tg as SERVER_ADDRESS,ig as SERVER_NAME,ag as SERVER_PORT,sg as SERVICE_NAME,rg as SERVICE_VERSION,ng as SESSION_ID,og as STALL_PERCENTAGE,lg as STALL_TOTAL_TIME,pg as STARLETTE_MIDDLEWARE_NAME,cg as STARLITE_MIDDLEWARE_NAME,ug as STATE_TYPE,dg as SUBPROCESS_PID,mg as SVELTEKIT_LOAD_ENVIRONMENT,gg as SVELTEKIT_LOAD_NODE_ID,bg as SVELTEKIT_LOAD_NODE_TYPE,yg as SVELTEKIT_TRACING_ORIGINAL_NAME,_g as THREAD_ID,hg as THREAD_NAME,fg as TIMBER_TAG,vg as TIME_TO_FULL_DISPLAY,kg as TIME_TO_INITIAL_DISPLAY,Tg as TRANSACTION,Sg as TRPC_PROCEDURE_PATH,Eg as TRPC_PROCEDURE_TYPE,Og as TTFB,Ig as TTFB_REQUESTTIME,Ag as TURBO_MODULES_TOTAL_CALL_COUNT,wg as TURBO_MODULES_TOTAL_DURATION_MS,xg as TURBO_MODULES_TOTAL_ERROR_COUNT,Rg as TURBO_MODULES_UNIQUE_METHODS,Ng as TURBO_MODULE_ARCH,Cg as TURBO_MODULE_METHOD,Pg as TURBO_MODULE_NAME,Dg as TURBO_MODULE_TOP_MODULE,Lg as TURBO_MODULE_TOP_MODULE_DURATION_MS,qg as TURBO_MODULE_TOTAL_CALL_COUNT,Mg as TURBO_MODULE_TOTAL_DURATION_MS,Ug as TURBO_MODULE_TOTAL_ERROR_COUNT,Gg as TURBO_MODULE_UNIQUE_METHODS,zg as TYPE,Yg as UI_COMPONENT_NAME,Vg as UI_CONTRIBUTES_TO_TTFD,Fg as UI_CONTRIBUTES_TO_TTID,Kg as UI_ELEMENT_HEIGHT,Bg as UI_ELEMENT_ID,Wg as UI_ELEMENT_IDENTIFIER,Hg as UI_ELEMENT_LOAD_TIME,jg as UI_ELEMENT_PAINT_TYPE,Qg as UI_ELEMENT_RENDER_TIME,Jg as UI_ELEMENT_TYPE,Xg as UI_ELEMENT_URL,Zg as UI_ELEMENT_WIDTH,$g as URL,eb as URL_DOMAIN,tb as URL_FRAGMENT,ib as URL_FULL,ab as URL_PATH,sb as URL_PATH_PARAMETER_KEY,rb as URL_PATH_PARAMETER_KEY_BASE,nb as URL_PATH_PARAMS_KEY,ob as URL_PATH_PARAMS_KEY_BASE,lb as URL_PORT,pb as URL_QUERY,cb as URL_SAME_ORIGIN,ub as URL_SCHEME,db as URL_TEMPLATE,mb as USER_AGENT_ORIGINAL,gb as USER_EMAIL,bb as USER_FULL_NAME,yb as USER_GEO_CITY,_b as USER_GEO_COUNTRY_CODE,hb as USER_GEO_REGION,fb as USER_GEO_SUBDIVISION,vb as USER_HASH,kb as USER_ID,Tb as USER_IP_ADDRESS,Sb as USER_NAME,Eb as USER_ROLES,Ob as VERCEL_AI_TELEMETRY_METADATA_KEY,Ib as VERCEL_AI_TELEMETRY_METADATA_KEY_BASE,Ab as VERCEL_BRANCH,wb as VERCEL_BUILD_ID,xb as VERCEL_DEPLOYMENT_ID,Rb as VERCEL_DESTINATION,Nb as VERCEL_EDGE_TYPE,Cb as VERCEL_ENTRYPOINT,Pb as VERCEL_EXECUTION_REGION,Db as VERCEL_ID,Lb as VERCEL_JA3_DIGEST,qb as VERCEL_JA4_DIGEST,Mb as VERCEL_LOG_TYPE,Ub as VERCEL_PATH,Gb as VERCEL_PROJECT_ID,zb as VERCEL_PROJECT_NAME,Yb as VERCEL_PROXY_CACHE_ID,Vb as VERCEL_PROXY_CLIENT_IP,Fb as VERCEL_PROXY_HOST,Kb as VERCEL_PROXY_LAMBDA_REGION,Bb as VERCEL_PROXY_METHOD,Wb as VERCEL_PROXY_PATH,Hb as VERCEL_PROXY_PATH_TYPE,jb as VERCEL_PROXY_PATH_TYPE_VARIANT,Qb as VERCEL_PROXY_REFERER,Jb as VERCEL_PROXY_REGION,Xb as VERCEL_PROXY_RESPONSE_BYTE_SIZE,Zb as VERCEL_PROXY_SCHEME,$b as VERCEL_PROXY_STATUS_CODE,ey as VERCEL_PROXY_TIMESTAMP,ty as VERCEL_PROXY_USER_AGENT,iy as VERCEL_PROXY_VERCEL_CACHE,ay as VERCEL_PROXY_VERCEL_ID,sy as VERCEL_PROXY_WAF_ACTION,ry as VERCEL_PROXY_WAF_RULE_ID,ny as VERCEL_REQUEST_ID,oy as VERCEL_SOURCE,ly as VERCEL_STATUS_CODE,d as _AI_MODEL_ID,ut as _AWS_KINESIS_STREAM_NAME,Ot as _AWS_REQUEST_ID,qn as _GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS,Un as _GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS,Lo as _HTTP_REQUEST_METHOD,ac as _MESSAGING_MESSAGE_ID,xm as _SENTRY_SEGMENT_ID};\n//# sourceMappingURL=attributes.mjs.map\n","const SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = \"sentry.sample_rate\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE = \"sentry.previous_trace_sample_rate\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_OP = \"sentry.op\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = \"sentry.origin\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_STATUS_MESSAGE = \"sentry.status.message\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON = \"sentry.idle_span_finish_reason\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT = \"sentry.measurement_unit\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE = \"sentry.measurement_value\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_RELEASE = \"sentry.release\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_ENVIRONMENT = \"sentry.environment\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_NAME = \"sentry.segment.name\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_ID = \"sentry.segment.id\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_SDK_NAME = \"sentry.sdk.name\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_SDK_VERSION = \"sentry.sdk.version\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_SDK_INTEGRATIONS = \"sentry.sdk.integrations\";\nconst SEMANTIC_ATTRIBUTE_USER_ID = \"user.id\";\nconst SEMANTIC_ATTRIBUTE_USER_EMAIL = \"user.email\";\nconst SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS = \"user.ip_address\";\nconst SEMANTIC_ATTRIBUTE_USER_USERNAME = \"user.name\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME = \"sentry.custom_span_name\";\nconst SEMANTIC_ATTRIBUTE_PROFILE_ID = \"sentry.profile_id\";\nconst SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME = \"sentry.exclusive_time\";\nconst SEMANTIC_ATTRIBUTE_CACHE_HIT = \"cache.hit\";\nconst SEMANTIC_ATTRIBUTE_CACHE_KEY = \"cache.key\";\nconst SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE = \"cache.item_size\";\nconst SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD = \"http.request.method\";\nconst SEMANTIC_ATTRIBUTE_URL_FULL = \"url.full\";\nconst SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE = \"sentry.link.type\";\nconst GEN_AI_CONVERSATION_ID_ATTRIBUTE = \"gen_ai.conversation.id\";\n\nexport { GEN_AI_CONVERSATION_ID_ATTRIBUTE, SEMANTIC_ATTRIBUTE_CACHE_HIT, SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE, SEMANTIC_ATTRIBUTE_CACHE_KEY, SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD, SEMANTIC_ATTRIBUTE_PROFILE_ID, SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME, SEMANTIC_ATTRIBUTE_SENTRY_ENVIRONMENT, SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_RELEASE, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SDK_INTEGRATIONS, SEMANTIC_ATTRIBUTE_SENTRY_SDK_NAME, SEMANTIC_ATTRIBUTE_SENTRY_SDK_VERSION, SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_ID, SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_NAME, SEMANTIC_ATTRIBUTE_SENTRY_STATUS_MESSAGE, SEMANTIC_ATTRIBUTE_URL_FULL, SEMANTIC_ATTRIBUTE_USER_EMAIL, SEMANTIC_ATTRIBUTE_USER_ID, SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS, SEMANTIC_ATTRIBUTE_USER_USERNAME, SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE };\n//# sourceMappingURL=semanticAttributes.js.map\n","const SPAN_STATUS_TYPES = [\n  /** The operation completed successfully. */\n  \"ok\",\n  /** Deadline expired before operation could complete. */\n  \"deadline_exceeded\",\n  /** 401 Unauthorized (actually does mean unauthenticated according to RFC 7235) */\n  \"unauthenticated\",\n  /** 403 Forbidden */\n  \"permission_denied\",\n  /** 404 Not Found. Some requested entity (file or directory) was not found. */\n  \"not_found\",\n  /** 429 Too Many Requests */\n  \"resource_exhausted\",\n  /** Client specified an invalid argument. 4xx. */\n  \"invalid_argument\",\n  /** 501 Not Implemented */\n  \"unimplemented\",\n  /** 503 Service Unavailable */\n  \"unavailable\",\n  /** Other/generic 5xx. */\n  \"internal_error\",\n  /** Unknown. Any non-standard HTTP status code. */\n  \"unknown_error\",\n  /** The operation was cancelled (typically by the user). */\n  \"cancelled\",\n  /** Already exists (409) */\n  \"already_exists\",\n  /** Operation was rejected because the system is not in a state required for the operation's */\n  \"failed_precondition\",\n  /** The operation was aborted, typically due to a concurrency issue. */\n  \"aborted\",\n  /** Operation was attempted past the valid range. */\n  \"out_of_range\",\n  /** Unrecoverable data loss or corruption */\n  \"data_loss\"\n];\n\nexport { SPAN_STATUS_TYPES };\n//# sourceMappingURL=spanStatus.js.map\n","import { SPAN_STATUS_TYPES } from '../types/spanStatus.js';\n\nconst SPAN_STATUS_UNSET = 0;\nconst SPAN_STATUS_OK = 1;\nconst SPAN_STATUS_ERROR = 2;\nfunction isStatusErrorMessageValid(message) {\n  return message !== \"ok\" && SPAN_STATUS_TYPES.includes(message);\n}\nfunction getSpanStatusFromHttpCode(httpStatus) {\n  if (httpStatus < 400 && httpStatus >= 100) {\n    return { code: SPAN_STATUS_OK };\n  }\n  if (httpStatus >= 400 && httpStatus < 500) {\n    switch (httpStatus) {\n      case 401:\n        return { code: SPAN_STATUS_ERROR, message: \"unauthenticated\" };\n      case 403:\n        return { code: SPAN_STATUS_ERROR, message: \"permission_denied\" };\n      case 404:\n        return { code: SPAN_STATUS_ERROR, message: \"not_found\" };\n      case 409:\n        return { code: SPAN_STATUS_ERROR, message: \"already_exists\" };\n      case 413:\n        return { code: SPAN_STATUS_ERROR, message: \"failed_precondition\" };\n      case 429:\n        return { code: SPAN_STATUS_ERROR, message: \"resource_exhausted\" };\n      case 499:\n        return { code: SPAN_STATUS_ERROR, message: \"cancelled\" };\n      default:\n        return { code: SPAN_STATUS_ERROR, message: \"invalid_argument\" };\n    }\n  }\n  if (httpStatus >= 500 && httpStatus < 600) {\n    switch (httpStatus) {\n      case 501:\n        return { code: SPAN_STATUS_ERROR, message: \"unimplemented\" };\n      case 503:\n        return { code: SPAN_STATUS_ERROR, message: \"unavailable\" };\n      case 504:\n        return { code: SPAN_STATUS_ERROR, message: \"deadline_exceeded\" };\n      default:\n        return { code: SPAN_STATUS_ERROR, message: \"internal_error\" };\n    }\n  }\n  return { code: SPAN_STATUS_ERROR, message: \"internal_error\" };\n}\nfunction setHttpStatus(span, httpStatus) {\n  span.setAttribute(\"http.response.status_code\", httpStatus);\n  const spanStatus = getSpanStatusFromHttpCode(httpStatus);\n  if (spanStatus.message !== \"unknown_error\") {\n    span.setStatus(spanStatus);\n  }\n}\n\nexport { SPAN_STATUS_ERROR, SPAN_STATUS_OK, SPAN_STATUS_UNSET, getSpanStatusFromHttpCode, isStatusErrorMessageValid, setHttpStatus };\n//# sourceMappingURL=spanstatus.js.map\n","import { GLOBAL_OBJ } from './worldwide.js';\n\nfunction makeWeakRef(value) {\n  try {\n    const WeakRefImpl = GLOBAL_OBJ.WeakRef;\n    if (typeof WeakRefImpl === \"function\") {\n      return new WeakRefImpl(value);\n    }\n  } catch {\n  }\n  return value;\n}\nfunction derefWeakRef(ref) {\n  if (!ref) {\n    return void 0;\n  }\n  if (typeof ref === \"object\" && \"deref\" in ref && typeof ref.deref === \"function\") {\n    try {\n      return ref.deref();\n    } catch {\n      return void 0;\n    }\n  }\n  return ref;\n}\n\nexport { derefWeakRef, makeWeakRef };\n//# sourceMappingURL=weakRef.js.map\n","import { addNonEnumerableProperty } from '../utils/object.js';\nimport { derefWeakRef, makeWeakRef } from '../utils/weakRef.js';\n\nconst SCOPE_ON_START_SPAN_FIELD = \"_sentryScope\";\nconst ISOLATION_SCOPE_ON_START_SPAN_FIELD = \"_sentryIsolationScope\";\nconst TRACER_PROVIDER_SPAN_FIELD = /* @__PURE__ */ Symbol.for(\"sentry.tracerProviderSpan\");\nfunction setCapturedScopesOnSpan(span, scope, isolationScope) {\n  if (span) {\n    addNonEnumerableProperty(span, ISOLATION_SCOPE_ON_START_SPAN_FIELD, makeWeakRef(isolationScope));\n    addNonEnumerableProperty(span, SCOPE_ON_START_SPAN_FIELD, scope);\n  }\n}\nfunction getCapturedScopesOnSpan(span) {\n  const spanWithScopes = span;\n  return {\n    scope: spanWithScopes[SCOPE_ON_START_SPAN_FIELD],\n    isolationScope: derefWeakRef(spanWithScopes[ISOLATION_SCOPE_ON_START_SPAN_FIELD])\n  };\n}\nfunction markSpanAsTracerProviderSpan(span) {\n  addNonEnumerableProperty(span, TRACER_PROVIDER_SPAN_FIELD, true);\n}\nfunction spanIsTracerProviderSpan(span) {\n  return span[TRACER_PROVIDER_SPAN_FIELD] === true;\n}\n\nexport { getCapturedScopesOnSpan, markSpanAsTracerProviderSpan, setCapturedScopesOnSpan, spanIsTracerProviderSpan };\n//# sourceMappingURL=utils.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from './debug-logger.js';\nimport { isString } from './is.js';\n\nconst SENTRY_BAGGAGE_KEY_PREFIX = \"sentry-\";\nconst SENTRY_BAGGAGE_KEY_PREFIX_REGEX = /^sentry-/;\nconst MAX_BAGGAGE_STRING_LENGTH = 8192;\nfunction baggageHeaderToDynamicSamplingContext(baggageHeader) {\n  const baggageObject = parseBaggageHeader(baggageHeader);\n  if (!baggageObject) {\n    return void 0;\n  }\n  const dynamicSamplingContext = Object.entries(baggageObject).reduce((acc, [key, value]) => {\n    if (key.startsWith(SENTRY_BAGGAGE_KEY_PREFIX)) {\n      const nonPrefixedKey = key.slice(SENTRY_BAGGAGE_KEY_PREFIX.length);\n      acc[nonPrefixedKey] = value;\n    }\n    return acc;\n  }, {});\n  if (Object.keys(dynamicSamplingContext).length > 0) {\n    return dynamicSamplingContext;\n  } else {\n    return void 0;\n  }\n}\nfunction dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext) {\n  if (!dynamicSamplingContext) {\n    return void 0;\n  }\n  const sentryPrefixedDSC = Object.entries(dynamicSamplingContext).reduce(\n    (acc, [dscKey, dscValue]) => {\n      if (dscValue) {\n        acc[`${SENTRY_BAGGAGE_KEY_PREFIX}${dscKey}`] = dscValue;\n      }\n      return acc;\n    },\n    {}\n  );\n  return objectToBaggageHeader(sentryPrefixedDSC);\n}\nfunction parseBaggageHeader(baggageHeader) {\n  if (!baggageHeader || !isString(baggageHeader) && !Array.isArray(baggageHeader)) {\n    return void 0;\n  }\n  if (Array.isArray(baggageHeader)) {\n    return baggageHeader.reduce((acc, curr) => {\n      const currBaggageObject = baggageHeaderToObject(curr);\n      Object.entries(currBaggageObject).forEach(([key, value]) => {\n        acc[key] = value;\n      });\n      return acc;\n    }, {});\n  }\n  return baggageHeaderToObject(baggageHeader);\n}\nfunction baggageHeaderToObject(baggageHeader) {\n  return baggageHeader.split(\",\").map((baggageEntry) => {\n    const eqIdx = baggageEntry.indexOf(\"=\");\n    if (eqIdx === -1) {\n      return [];\n    }\n    const key = baggageEntry.slice(0, eqIdx);\n    const value = baggageEntry.slice(eqIdx + 1);\n    return [key, value].map((keyOrValue) => {\n      try {\n        return decodeURIComponent(keyOrValue.trim());\n      } catch {\n        return;\n      }\n    });\n  }).reduce((acc, [key, value]) => {\n    if (key && value) {\n      acc[key] = value;\n    }\n    return acc;\n  }, {});\n}\nfunction objectToBaggageHeader(object) {\n  if (Object.keys(object).length === 0) {\n    return void 0;\n  }\n  return Object.entries(object).reduce((baggageHeader, [objectKey, objectValue], currentIndex) => {\n    const baggageEntry = `${encodeURIComponent(objectKey)}=${encodeURIComponent(objectValue)}`;\n    const newBaggageHeader = currentIndex === 0 ? baggageEntry : `${baggageHeader},${baggageEntry}`;\n    if (newBaggageHeader.length > MAX_BAGGAGE_STRING_LENGTH) {\n      DEBUG_BUILD && debug.warn(\n        `Not adding key: ${objectKey} with val: ${objectValue} to baggage header due to exceeding baggage size limits.`\n      );\n      return baggageHeader;\n    } else {\n      return newBaggageHeader;\n    }\n  }, \"\");\n}\nfunction mergeBaggageHeaders(existing, incoming) {\n  if (!existing) {\n    return incoming;\n  }\n  const existingEntries = parseBaggageHeader(existing);\n  const incomingEntries = parseBaggageHeader(incoming);\n  if (!incomingEntries) {\n    return existing;\n  }\n  const merged = {};\n  let hasNewSentryEntries = false;\n  const newSentryEntries = {};\n  const newNonSentryEntries = {};\n  for (const [key, value] of Object.entries(incomingEntries)) {\n    if (key.startsWith(SENTRY_BAGGAGE_KEY_PREFIX)) {\n      newSentryEntries[key] = value;\n      hasNewSentryEntries = true;\n    } else {\n      newNonSentryEntries[key] = value;\n    }\n  }\n  if (existingEntries) {\n    for (const [key, value] of Object.entries(existingEntries)) {\n      if (!hasNewSentryEntries || !key.startsWith(SENTRY_BAGGAGE_KEY_PREFIX)) {\n        merged[key] = value;\n      }\n    }\n  }\n  if (hasNewSentryEntries) {\n    Object.assign(merged, newSentryEntries);\n  }\n  for (const [key, value] of Object.entries(newNonSentryEntries)) {\n    merged[key] ?? (merged[key] = value);\n  }\n  return objectToBaggageHeader(merged);\n}\n\nexport { MAX_BAGGAGE_STRING_LENGTH, SENTRY_BAGGAGE_KEY_PREFIX, SENTRY_BAGGAGE_KEY_PREFIX_REGEX, baggageHeaderToDynamicSamplingContext, dynamicSamplingContextToSentryBaggageHeader, mergeBaggageHeaders, objectToBaggageHeader, parseBaggageHeader };\n//# sourceMappingURL=baggage.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { consoleSandbox, debug } from './debug-logger.js';\n\nconst ORG_ID_REGEX = /^o(\\d+)\\./;\nconst DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+)?)?@)((?:\\[[:.%\\w]+\\]|[\\w.-]+))(?::(\\d+))?\\/(.+)/;\nfunction isValidProtocol(protocol) {\n  return protocol === \"http\" || protocol === \"https\";\n}\nfunction dsnToString(dsn, withPassword = false) {\n  const { host, path, pass, port, projectId, protocol, publicKey } = dsn;\n  return `${protocol}://${publicKey}${withPassword && pass ? `:${pass}` : \"\"}@${host}${port ? `:${port}` : \"\"}/${path ? `${path}/` : path}${projectId}`;\n}\nfunction dsnFromString(str) {\n  const match = DSN_REGEX.exec(str);\n  if (!match) {\n    consoleSandbox(() => {\n      console.error(`Invalid Sentry Dsn: ${str}`);\n    });\n    return void 0;\n  }\n  const [protocol, publicKey, pass = \"\", host = \"\", port = \"\", lastPath = \"\"] = match.slice(1);\n  let path = \"\";\n  let projectId = lastPath;\n  const split = projectId.split(\"/\");\n  if (split.length > 1) {\n    path = split.slice(0, -1).join(\"/\");\n    projectId = split.pop();\n  }\n  if (projectId) {\n    const projectMatch = projectId.match(/^\\d+/);\n    if (projectMatch) {\n      projectId = projectMatch[0];\n    }\n  }\n  return dsnFromComponents({ host, pass, path, projectId, port, protocol, publicKey });\n}\nfunction dsnFromComponents(components) {\n  return {\n    protocol: components.protocol,\n    publicKey: components.publicKey || \"\",\n    pass: components.pass || \"\",\n    host: components.host,\n    port: components.port || \"\",\n    path: components.path || \"\",\n    projectId: components.projectId\n  };\n}\nfunction validateDsn(dsn) {\n  if (!DEBUG_BUILD) {\n    return true;\n  }\n  const { port, projectId, protocol } = dsn;\n  const requiredComponents = [\"protocol\", \"publicKey\", \"host\", \"projectId\"];\n  const hasMissingRequiredComponent = requiredComponents.find((component) => {\n    if (!dsn[component]) {\n      debug.error(`Invalid Sentry Dsn: ${component} missing`);\n      return true;\n    }\n    return false;\n  });\n  if (hasMissingRequiredComponent) {\n    return false;\n  }\n  if (!projectId.match(/^\\d+$/)) {\n    debug.error(`Invalid Sentry Dsn: Invalid projectId ${projectId}`);\n    return false;\n  }\n  if (!isValidProtocol(protocol)) {\n    debug.error(`Invalid Sentry Dsn: Invalid protocol ${protocol}`);\n    return false;\n  }\n  if (port && isNaN(parseInt(port, 10))) {\n    debug.error(`Invalid Sentry Dsn: Invalid port ${port}`);\n    return false;\n  }\n  return true;\n}\nfunction extractOrgIdFromDsnHost(host) {\n  const match = host.match(ORG_ID_REGEX);\n  return match?.[1];\n}\nfunction extractOrgIdFromClient(client) {\n  const options = client.getOptions();\n  const { host } = client.getDsn() || {};\n  let org_id;\n  if (options.orgId) {\n    org_id = String(options.orgId);\n  } else if (host) {\n    org_id = extractOrgIdFromDsnHost(host);\n  }\n  return org_id;\n}\nfunction makeDsn(from) {\n  const components = typeof from === \"string\" ? dsnFromString(from) : dsnFromComponents(from);\n  if (!components || !validateDsn(components)) {\n    return void 0;\n  }\n  return components;\n}\n\nexport { dsnFromString, dsnToString, extractOrgIdFromClient, extractOrgIdFromDsnHost, makeDsn };\n//# sourceMappingURL=dsn.js.map\n","function parseSampleRate(sampleRate) {\n  if (typeof sampleRate === \"boolean\") {\n    return Number(sampleRate);\n  }\n  const rate = typeof sampleRate === \"string\" ? parseFloat(sampleRate) : sampleRate;\n  if (typeof rate !== \"number\" || isNaN(rate) || rate < 0 || rate > 1) {\n    return void 0;\n  }\n  return rate;\n}\n\nexport { parseSampleRate };\n//# sourceMappingURL=parseSampleRate.js.map\n","import { debug } from './debug-logger.js';\nimport { baggageHeaderToDynamicSamplingContext } from './baggage.js';\nimport { extractOrgIdFromClient } from './dsn.js';\nimport { parseSampleRate } from './parseSampleRate.js';\nimport { generateTraceId, generateSpanId } from './propagationContext.js';\nimport { safeMathRandom } from './randomSafeContext.js';\n\nconst TRACEPARENT_REGEXP = new RegExp(\n  \"^[ \\\\t]*([0-9a-f]{32})?-?([0-9a-f]{16})?-?([01])?[ \\\\t]*$\"\n  // whitespace\n);\nfunction extractTraceparentData(traceparent) {\n  if (!traceparent) {\n    return void 0;\n  }\n  const matches = traceparent.match(TRACEPARENT_REGEXP);\n  if (!matches) {\n    return void 0;\n  }\n  let parentSampled;\n  if (matches[3] === \"1\") {\n    parentSampled = true;\n  } else if (matches[3] === \"0\") {\n    parentSampled = false;\n  }\n  return {\n    traceId: matches[1],\n    parentSampled,\n    parentSpanId: matches[2]\n  };\n}\nfunction isContinuingTrace(propagationContext) {\n  return !!propagationContext.parentSpanId || !!propagationContext.dsc;\n}\nfunction propagationContextFromHeaders(sentryTrace, baggage) {\n  const traceparentData = extractTraceparentData(sentryTrace);\n  const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext(baggage);\n  if (!traceparentData?.traceId) {\n    return {\n      traceId: generateTraceId(),\n      sampleRand: safeMathRandom()\n    };\n  }\n  const sampleRand = getSampleRandFromTraceparentAndDsc(traceparentData, dynamicSamplingContext);\n  if (dynamicSamplingContext) {\n    dynamicSamplingContext.sample_rand = sampleRand.toString();\n  }\n  const { traceId, parentSpanId, parentSampled } = traceparentData;\n  return {\n    traceId,\n    parentSpanId,\n    sampled: parentSampled,\n    dsc: dynamicSamplingContext || {},\n    // If we have traceparent data but no DSC it means we are not head of trace and we must freeze it\n    sampleRand\n  };\n}\nfunction generateSentryTraceHeader(traceId = generateTraceId(), spanId = generateSpanId(), sampled) {\n  let sampledString = \"\";\n  if (sampled !== void 0) {\n    sampledString = sampled ? \"-1\" : \"-0\";\n  }\n  return `${traceId}-${spanId}${sampledString}`;\n}\nfunction generateTraceparentHeader(traceId = generateTraceId(), spanId = generateSpanId(), sampled) {\n  return `00-${traceId}-${spanId}-${sampled ? \"01\" : \"00\"}`;\n}\nfunction getSampleRandFromTraceparentAndDsc(traceparentData, dsc) {\n  const parsedSampleRand = parseSampleRate(dsc?.sample_rand);\n  if (parsedSampleRand !== void 0) {\n    return parsedSampleRand;\n  }\n  const parsedSampleRate = parseSampleRate(dsc?.sample_rate);\n  if (parsedSampleRate && traceparentData?.parentSampled !== void 0) {\n    return traceparentData.parentSampled ? (\n      // Returns a sample rand with positive sampling decision [0, sampleRate)\n      safeMathRandom() * parsedSampleRate\n    ) : (\n      // Returns a sample rand with negative sampling decision [sampleRate, 1)\n      parsedSampleRate + safeMathRandom() * (1 - parsedSampleRate)\n    );\n  } else {\n    return safeMathRandom();\n  }\n}\nfunction shouldContinueTrace(client, baggageOrgId) {\n  const clientOrgId = extractOrgIdFromClient(client);\n  if (baggageOrgId && clientOrgId && baggageOrgId !== clientOrgId) {\n    debug.log(\n      `Won't continue trace because org IDs don't match (incoming baggage: ${baggageOrgId}, SDK options: ${clientOrgId})`\n    );\n    return false;\n  }\n  const strictTraceContinuation = client.getOptions().strictTraceContinuation || false;\n  if (strictTraceContinuation) {\n    if (baggageOrgId && !clientOrgId || !baggageOrgId && clientOrgId) {\n      debug.log(\n        `Starting a new trace because strict trace continuation is enabled but one org ID is missing (incoming baggage: ${baggageOrgId}, Sentry client: ${clientOrgId})`\n      );\n      return false;\n    }\n  }\n  return true;\n}\n\nexport { TRACEPARENT_REGEXP, extractTraceparentData, generateSentryTraceHeader, generateTraceparentHeader, isContinuingTrace, propagationContextFromHeaders, shouldContinueTrace };\n//# sourceMappingURL=tracing.js.map\n","import { makeWeakRef, derefWeakRef } from './weakRef.js';\n\nconst SCOPE_SPAN_FIELD = \"span\";\nfunction _setSpanForScope(scope, span) {\n  if (span) {\n    scope.refs[SCOPE_SPAN_FIELD] = makeWeakRef(span);\n  } else {\n    delete scope.refs[SCOPE_SPAN_FIELD];\n  }\n}\nfunction _getSpanForScope(scope) {\n  return derefWeakRef(scope.refs[SCOPE_SPAN_FIELD]);\n}\n\nexport { _getSpanForScope, _setSpanForScope };\n//# sourceMappingURL=spanOnScope.js.map\n","import { getAsyncContextStrategy } from '../asyncContext/index.js';\nimport { serializeAttributes } from '../attributes.js';\nimport { getMainCarrier } from '../carrier.js';\nimport { getCurrentScope } from '../currentScopes.js';\nimport { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_ORIGIN, SENTRY_OP, SENTRY_STATUS_MESSAGE } from '@sentry/conventions/attributes';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME } from '../semanticAttributes.js';\nimport { SPAN_STATUS_UNSET, SPAN_STATUS_OK, isStatusErrorMessageValid } from '../tracing/spanstatus.js';\nimport { getCapturedScopesOnSpan } from '../tracing/utils.js';\nimport { addNonEnumerableProperty } from './object.js';\nimport { generateSpanId } from './propagationContext.js';\nimport { timestampInSeconds } from './time.js';\nimport { generateSentryTraceHeader, generateTraceparentHeader } from './tracing.js';\nimport { _getSpanForScope } from './spanOnScope.js';\n\nconst TRACE_FLAG_NONE = 0;\nconst TRACE_FLAG_SAMPLED = 1;\nfunction spanToTransactionTraceContext(span) {\n  const { spanId: span_id, traceId: trace_id } = span.spanContext();\n  const { data, op, parent_span_id, status, origin, links } = spanToStaticSpanJSON(span);\n  return {\n    parent_span_id,\n    span_id,\n    trace_id,\n    data,\n    op,\n    status,\n    origin,\n    links\n  };\n}\nfunction spanToTraceContext(span) {\n  const { spanId, traceId: trace_id, isRemote } = span.spanContext();\n  const parent_span_id = isRemote ? spanId : spanToStaticSpanJSON(span).parent_span_id;\n  const scope = getCapturedScopesOnSpan(span).scope;\n  const span_id = isRemote ? scope?.getPropagationContext().propagationSpanId || generateSpanId() : spanId;\n  return {\n    parent_span_id,\n    span_id,\n    trace_id\n  };\n}\nfunction spanToTraceHeader(span) {\n  const { traceId, spanId } = span.spanContext();\n  const sampled = spanIsSampled(span);\n  return generateSentryTraceHeader(traceId, spanId, sampled);\n}\nfunction spanToTraceparentHeader(span) {\n  const { traceId, spanId } = span.spanContext();\n  const sampled = spanIsSampled(span);\n  return generateTraceparentHeader(traceId, spanId, sampled);\n}\nfunction convertSpanLinksForEnvelope(links) {\n  if (links && links.length > 0) {\n    return links.map(({ context: { spanId, traceId, traceFlags, ...restContext }, attributes }) => ({\n      span_id: spanId,\n      trace_id: traceId,\n      sampled: traceFlags === TRACE_FLAG_SAMPLED,\n      attributes,\n      ...restContext\n    }));\n  } else {\n    return void 0;\n  }\n}\nfunction getStreamedSpanLinks(links) {\n  if (links?.length) {\n    return links.map(({ context: { spanId, traceId, traceFlags }, attributes }) => ({\n      span_id: spanId,\n      trace_id: traceId,\n      sampled: traceFlags === TRACE_FLAG_SAMPLED,\n      attributes\n    }));\n  } else {\n    return void 0;\n  }\n}\nfunction spanTimeInputToSeconds(input) {\n  if (typeof input === \"number\") {\n    return ensureTimestampInSeconds(input);\n  }\n  if (Array.isArray(input)) {\n    return input[0] + input[1] / 1e9;\n  }\n  if (input instanceof Date) {\n    return ensureTimestampInSeconds(input.getTime());\n  }\n  return timestampInSeconds();\n}\nfunction ensureTimestampInSeconds(timestamp) {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp / 1e3 : timestamp;\n}\nfunction spanToStaticSpanJSON(span) {\n  if (spanIsSentrySpan(span)) {\n    return span.getStaticSpanJSON();\n  }\n  const { spanId: span_id, traceId: trace_id } = span.spanContext();\n  if (spanIsOpenTelemetrySdkTraceBaseSpan(span)) {\n    const { attributes, startTime, name, endTime, status, links } = span;\n    return {\n      span_id,\n      trace_id,\n      data: attributes,\n      description: name,\n      parent_span_id: getOtelParentSpanId(span),\n      start_timestamp: spanTimeInputToSeconds(startTime),\n      // This is [0,0] by default in OTEL, in which case we want to interpret this as no end time\n      timestamp: spanTimeInputToSeconds(endTime) || void 0,\n      status: getStatusMessage(status),\n      op: attributes[SENTRY_OP],\n      origin: attributes[SENTRY_ORIGIN],\n      links: convertSpanLinksForEnvelope(links)\n    };\n  }\n  return {\n    span_id,\n    trace_id,\n    start_timestamp: 0,\n    status: \"ok\",\n    data: {}\n  };\n}\nfunction spanToJSON(span) {\n  if (spanIsSentrySpan(span)) {\n    return span.getSpanJSON();\n  }\n  const { spanId: span_id, traceId: trace_id } = span.spanContext();\n  if (spanIsOpenTelemetrySdkTraceBaseSpan(span)) {\n    const { attributes, startTime, name, endTime, status, links } = span;\n    return {\n      name,\n      span_id,\n      trace_id,\n      parent_span_id: getOtelParentSpanId(span),\n      start_timestamp: spanTimeInputToSeconds(startTime),\n      // This is [0,0] by default in OTEL, in which case we want to interpret this as no end time\n      end_timestamp: spanTimeInputToSeconds(endTime) || void 0,\n      is_segment: spanIsSegment(span),\n      status: getSimpleStatus(status),\n      attributes: addStatusMessageAttribute(attributes, status),\n      links: getStreamedSpanLinks(links)\n    };\n  }\n  return {\n    span_id,\n    trace_id,\n    start_timestamp: 0,\n    name: \"\",\n    status: \"ok\",\n    is_segment: spanIsSegment(span),\n    attributes: {}\n  };\n}\nfunction getOtelParentSpanId(span) {\n  return \"parentSpanId\" in span ? span.parentSpanId : \"parentSpanContext\" in span ? span.parentSpanContext?.spanId : void 0;\n}\nfunction streamedSpanJsonToSerializedSpan(spanJson) {\n  return {\n    ...spanJson,\n    // We only ever send ended spans, but fall back to the start time (i.e. duration 0) so that\n    // sent spans always carry an end timestamp.\n    end_timestamp: spanJson.end_timestamp ?? spanJson.start_timestamp,\n    attributes: serializeAttributes(spanJson.attributes),\n    links: spanJson.links?.map((link) => ({\n      ...link,\n      attributes: serializeAttributes(link.attributes)\n    }))\n  };\n}\nfunction spanIsOpenTelemetrySdkTraceBaseSpan(span) {\n  const castSpan = span;\n  return !!castSpan.attributes && !!castSpan.startTime && !!castSpan.name && !!castSpan.endTime && !!castSpan.status;\n}\nfunction spanIsSentrySpan(span) {\n  return typeof span.getSpanJSON === \"function\";\n}\nfunction spanIsSampled(span) {\n  const { traceFlags } = span.spanContext();\n  return traceFlags === TRACE_FLAG_SAMPLED;\n}\nfunction getStatusMessage(status) {\n  if (!status || status.code === SPAN_STATUS_UNSET) {\n    return \"ok\";\n  }\n  if (status.code === SPAN_STATUS_OK) {\n    return \"ok\";\n  }\n  return status.message && isStatusErrorMessageValid(status.message) ? status.message : \"internal_error\";\n}\nfunction getSimpleStatus(status) {\n  return !status || status.code === SPAN_STATUS_OK || status.code === SPAN_STATUS_UNSET || status.message === \"cancelled\" ? \"ok\" : \"error\";\n}\nfunction addStatusMessageAttribute(attributes, status) {\n  const statusMessage = getSimpleStatus(status) === \"error\" ? status?.message : void 0;\n  return {\n    ...statusMessage && { [SENTRY_STATUS_MESSAGE]: statusMessage },\n    ...attributes\n  };\n}\nconst CHILD_SPANS_FIELD = \"_sentryChildSpans\";\nconst ROOT_SPAN_FIELD = \"_sentryRootSpan\";\nfunction addChildSpanToSpan(span, childSpan) {\n  const rootSpan = span[ROOT_SPAN_FIELD] || span;\n  addNonEnumerableProperty(childSpan, ROOT_SPAN_FIELD, rootSpan);\n  childSpan.setAttribute(SENTRY_SEGMENT_NAME_SOURCE, void 0);\n  if (!spanIsSampled(span)) {\n    return;\n  }\n  if (!span.isRecording() && !rootSpan.isRecording()) {\n    return;\n  }\n  if (span[CHILD_SPANS_FIELD]) {\n    span[CHILD_SPANS_FIELD].add(childSpan);\n  } else {\n    addNonEnumerableProperty(span, CHILD_SPANS_FIELD, /* @__PURE__ */ new Set([childSpan]));\n  }\n}\nfunction removeChildSpanFromSpan(span, childSpan) {\n  if (span[CHILD_SPANS_FIELD]) {\n    span[CHILD_SPANS_FIELD].delete(childSpan);\n  }\n}\nfunction getSpanDescendants(span) {\n  const resultSet = /* @__PURE__ */ new Set();\n  function addSpanChildren(span2) {\n    if (resultSet.has(span2)) {\n      return;\n    } else if (spanIsSampled(span2)) {\n      resultSet.add(span2);\n      const childSpans = span2[CHILD_SPANS_FIELD] ? Array.from(span2[CHILD_SPANS_FIELD]) : [];\n      for (const childSpan of childSpans) {\n        addSpanChildren(childSpan);\n      }\n    }\n  }\n  addSpanChildren(span);\n  return Array.from(resultSet);\n}\nconst getRootSpan = INTERNAL_getSegmentSpan;\nfunction INTERNAL_getSegmentSpan(span) {\n  return span[ROOT_SPAN_FIELD] || span;\n}\nfunction spanIsSegment(span) {\n  return span === INTERNAL_getSegmentSpan(span);\n}\nfunction getActiveSpan(scope) {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n  if (acs.getActiveSpan) {\n    return acs.getActiveSpan(scope);\n  }\n  return _getSpanForScope(scope || getCurrentScope());\n}\nfunction updateSpanName(span, name) {\n  span.updateName(name);\n  span.setAttributes({\n    [SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME]: name\n  });\n  INTERNAL_setSegmentNameSourceIfSegment(span, \"custom\");\n}\nfunction INTERNAL_setSegmentNameSourceIfSegment(span, source) {\n  if (spanIsSegment(span)) {\n    span.setAttribute(SENTRY_SEGMENT_NAME_SOURCE, source);\n  }\n}\n\nexport { INTERNAL_getSegmentSpan, INTERNAL_setSegmentNameSourceIfSegment, TRACE_FLAG_NONE, TRACE_FLAG_SAMPLED, addChildSpanToSpan, addStatusMessageAttribute, convertSpanLinksForEnvelope, getActiveSpan, getRootSpan, getSimpleStatus, getSpanDescendants, getStatusMessage, getStreamedSpanLinks, removeChildSpanFromSpan, spanIsSampled, spanIsSegment, spanIsSentrySpan, spanTimeInputToSeconds, spanToJSON, spanToStaticSpanJSON, spanToTraceContext, spanToTraceHeader, spanToTraceparentHeader, spanToTransactionTraceContext, streamedSpanJsonToSerializedSpan, updateSpanName };\n//# sourceMappingURL=spanUtils.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { addGlobalErrorInstrumentationHandler } from '../instrument/globalError.js';\nimport { addGlobalUnhandledRejectionInstrumentationHandler } from '../instrument/globalUnhandledRejection.js';\nimport { debug } from '../utils/debug-logger.js';\nimport { getActiveSpan, getRootSpan } from '../utils/spanUtils.js';\nimport { SPAN_STATUS_ERROR } from './spanstatus.js';\n\nlet errorsInstrumented = false;\nfunction registerSpanErrorInstrumentation() {\n  if (errorsInstrumented) {\n    return;\n  }\n  function errorCallback() {\n    const activeSpan = getActiveSpan();\n    const rootSpan = activeSpan && getRootSpan(activeSpan);\n    if (rootSpan) {\n      const message = \"internal_error\";\n      DEBUG_BUILD && debug.log(`[Tracing] Root span: ${message} -> Global error occurred`);\n      rootSpan.setStatus({ code: SPAN_STATUS_ERROR, message });\n    }\n  }\n  errorsInstrumented = true;\n  addGlobalErrorInstrumentationHandler(errorCallback);\n  addGlobalUnhandledRejectionInstrumentationHandler(errorCallback);\n}\n\nexport { registerSpanErrorInstrumentation };\n//# sourceMappingURL=errors.js.map\n","import { getClient } from '../currentScopes.js';\n\nfunction hasSpansEnabled(maybeOptions) {\n  if (typeof __SENTRY_TRACING__ === \"boolean\" && !__SENTRY_TRACING__) {\n    return false;\n  }\n  const options = maybeOptions || getClient()?.getOptions();\n  return !!options && // Note: This check is `!= null`, meaning \"nullish\". `0` is not \"nullish\", `undefined` and `null` are. (This comment was brought to you by 15 minutes of questioning life)\n  (options.tracesSampleRate != null || !!options.tracesSampler);\n}\n\nexport { hasSpansEnabled };\n//# sourceMappingURL=hasSpansEnabled.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from './debug-logger.js';\nimport { isMatchingPattern } from './string.js';\n\nfunction logIgnoredSpan(droppedSpan) {\n  debug.log(`Ignoring span ${droppedSpan.op} - ${droppedSpan.description} because it matches \\`ignoreSpans\\`.`);\n}\nfunction shouldIgnoreSpan(span, ignoreSpans) {\n  if (!ignoreSpans?.length) {\n    return false;\n  }\n  for (const pattern of ignoreSpans) {\n    if (isStringOrRegExp(pattern)) {\n      if (span.description && isMatchingPattern(span.description, pattern)) {\n        DEBUG_BUILD && logIgnoredSpan(span);\n        return true;\n      }\n      continue;\n    }\n    const hasAttributes = !!pattern.attributes && Object.keys(pattern.attributes).length > 0;\n    if (!pattern.name && !pattern.op && !hasAttributes) {\n      continue;\n    }\n    const nameMatches = pattern.name ? span.description && isMatchingPattern(span.description, pattern.name) : true;\n    const opMatches = pattern.op ? span.op && isMatchingPattern(span.op, pattern.op) : true;\n    const attrsMatch = pattern.attributes ? Object.entries(pattern.attributes).every(\n      ([key, valuePattern]) => _matchesAttributeValue(span.attributes?.[key], valuePattern)\n    ) : true;\n    if (nameMatches && opMatches && attrsMatch) {\n      DEBUG_BUILD && logIgnoredSpan(span);\n      return true;\n    }\n  }\n  return false;\n}\nfunction _matchesAttributeValue(actual, pat) {\n  if (typeof actual === \"string\" && (typeof pat === \"string\" || pat instanceof RegExp)) {\n    return isMatchingPattern(actual, pat);\n  }\n  if (Array.isArray(actual) && Array.isArray(pat)) {\n    return actual.length === pat.length && actual.every((v, i) => v === pat[i]);\n  }\n  return actual === pat;\n}\nfunction reparentChildSpans(spans, dropSpan) {\n  const droppedSpanParentId = dropSpan.parent_span_id;\n  const droppedSpanId = dropSpan.span_id;\n  if (!droppedSpanParentId) {\n    return;\n  }\n  for (const span of spans) {\n    if (span.parent_span_id === droppedSpanId) {\n      span.parent_span_id = droppedSpanParentId;\n    }\n  }\n}\nfunction isStringOrRegExp(value) {\n  return typeof value === \"string\" || value instanceof RegExp;\n}\n\nexport { reparentChildSpans, shouldIgnoreSpan };\n//# sourceMappingURL=should-ignore-span.js.map\n","import { getClient } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { debug } from './utils/debug-logger.js';\n\nconst installedIntegrations = [];\nfunction filterDuplicates(integrations) {\n  const integrationsByName = {};\n  integrations.forEach((currentInstance) => {\n    const { name } = currentInstance;\n    const existingInstance = integrationsByName[name];\n    if (existingInstance && !existingInstance.isDefaultInstance && currentInstance.isDefaultInstance) {\n      return;\n    }\n    integrationsByName[name] = currentInstance;\n  });\n  return Object.values(integrationsByName);\n}\nfunction getIntegrationsToSetup(options) {\n  const defaultIntegrations = options.defaultIntegrations || [];\n  const userIntegrations = options.integrations;\n  defaultIntegrations.forEach((integration) => {\n    integration.isDefaultInstance = true;\n  });\n  let integrations;\n  if (Array.isArray(userIntegrations)) {\n    integrations = [...defaultIntegrations, ...userIntegrations];\n  } else if (typeof userIntegrations === \"function\") {\n    const resolvedUserIntegrations = userIntegrations(defaultIntegrations);\n    integrations = Array.isArray(resolvedUserIntegrations) ? resolvedUserIntegrations : [resolvedUserIntegrations];\n  } else {\n    integrations = defaultIntegrations;\n  }\n  return filterDuplicates(integrations);\n}\nfunction setupIntegrations(client, integrations) {\n  const integrationIndex = {};\n  integrations.forEach((integration) => {\n    if (integration?.beforeSetup) {\n      integration.beforeSetup(client);\n    }\n  });\n  integrations.forEach((integration) => {\n    if (integration) {\n      setupIntegration(client, integration, integrationIndex);\n    }\n  });\n  return integrationIndex;\n}\nfunction afterSetupIntegrations(client, integrations) {\n  for (const integration of integrations) {\n    if (integration?.afterAllSetup) {\n      integration.afterAllSetup(client);\n    }\n  }\n}\nfunction setupIntegration(client, integration, integrationIndex) {\n  if (integrationIndex[integration.name]) {\n    DEBUG_BUILD && debug.log(`Integration skipped because it was already installed: ${integration.name}`);\n    return;\n  }\n  integrationIndex[integration.name] = integration;\n  if (!installedIntegrations.includes(integration.name) && typeof integration.setupOnce === \"function\") {\n    integration.setupOnce();\n    installedIntegrations.push(integration.name);\n  }\n  if (integration.setup && typeof integration.setup === \"function\") {\n    integration.setup(client);\n  }\n  if (typeof integration.preprocessEvent === \"function\") {\n    const callback = integration.preprocessEvent.bind(integration);\n    client.on(\"preprocessEvent\", (event, hint) => callback(event, hint, client));\n  }\n  if (typeof integration.processEvent === \"function\") {\n    const callback = integration.processEvent.bind(integration);\n    const processor = Object.assign((event, hint) => callback(event, hint, client), {\n      id: integration.name\n    });\n    client.addEventProcessor(processor);\n  }\n  [\"processSpan\", \"processSegmentSpan\"].forEach((hook) => {\n    const callback = integration[hook];\n    if (typeof callback === \"function\") {\n      client.on(hook, (span) => callback.call(integration, span, client));\n    }\n  });\n  DEBUG_BUILD && debug.log(`Integration installed: ${integration.name}`);\n}\nfunction addIntegration(integration) {\n  const client = getClient();\n  if (!client) {\n    DEBUG_BUILD && debug.warn(`Cannot add integration \"${integration.name}\" because no SDK Client is available.`);\n    return;\n  }\n  client.addIntegration(integration);\n}\nfunction defineIntegration(fn) {\n  return fn;\n}\nfunction extendIntegration(integration, extendedIntegration) {\n  const wrappedIntegration = {\n    ...integration,\n    ...extendedIntegration\n  };\n  for (const key in extendedIntegration) {\n    const baseValue = integration[key];\n    const extendedValue = extendedIntegration[key];\n    if (typeof baseValue === \"function\" && typeof extendedValue === \"function\") {\n      const wrappedFunction = new Proxy(baseValue, {\n        apply: (target, thisArg, args) => {\n          Reflect.apply(target, thisArg, args);\n          return Reflect.apply(extendedValue, thisArg, args);\n        }\n      });\n      wrappedIntegration[key] = wrappedFunction;\n    }\n  }\n  return wrappedIntegration;\n}\n\nexport { addIntegration, afterSetupIntegrations, defineIntegration, extendIntegration, getIntegrationsToSetup, installedIntegrations, setupIntegration, setupIntegrations };\n//# sourceMappingURL=integration.js.map\n","const DEFAULT_ENVIRONMENT = \"production\";\nconst DEV_ENVIRONMENT = \"development\";\n\nexport { DEFAULT_ENVIRONMENT, DEV_ENVIRONMENT };\n//# sourceMappingURL=constants.js.map\n","import { addNonEnumerableProperty } from '../utils/object.js';\nimport { generateTraceId, generateSpanId } from '../utils/propagationContext.js';\nimport { TRACE_FLAG_NONE } from '../utils/spanUtils.js';\n\nconst NON_RECORDING_SPAN_FIELD = /* @__PURE__ */ Symbol.for(\"sentry.nonRecordingSpan\");\nclass SentryNonRecordingSpan {\n  constructor(spanContext = {}) {\n    this._traceId = spanContext.traceId || generateTraceId();\n    this._spanId = spanContext.spanId || generateSpanId();\n    this.dropReason = spanContext.dropReason;\n    addNonEnumerableProperty(this, NON_RECORDING_SPAN_FIELD, true);\n  }\n  /** @inheritdoc */\n  spanContext() {\n    return {\n      spanId: this._spanId,\n      traceId: this._traceId,\n      traceFlags: TRACE_FLAG_NONE\n    };\n  }\n  /** @inheritdoc */\n  end(_timestamp) {\n  }\n  /** @inheritdoc */\n  setAttribute(_key, _value) {\n    return this;\n  }\n  /** @inheritdoc */\n  setAttributes(_values) {\n    return this;\n  }\n  /** @inheritdoc */\n  setStatus(_status) {\n    return this;\n  }\n  /** @inheritdoc */\n  updateName(_name) {\n    return this;\n  }\n  /** @inheritdoc */\n  isRecording() {\n    return false;\n  }\n  /** @inheritdoc */\n  addEvent(_name, _attributesOrStartTime, _startTime) {\n    return this;\n  }\n  /** @inheritDoc */\n  addLink(_link) {\n    return this;\n  }\n  /** @inheritDoc */\n  addLinks(_links) {\n    return this;\n  }\n  /**\n   * This should generally not be used,\n   * but we need it for being compliant with the OTEL Span interface.\n   *\n   * @hidden\n   * @internal\n   */\n  recordException(_exception, _time) {\n  }\n}\nfunction spanIsNonRecordingSpan(span) {\n  return !!span && span[NON_RECORDING_SPAN_FIELD] === true;\n}\n\nexport { SentryNonRecordingSpan, spanIsNonRecordingSpan };\n//# sourceMappingURL=sentryNonRecordingSpan.js.map\n","import { DEFAULT_ENVIRONMENT } from '../constants.js';\nimport { getExternalPropagationContext, getClient } from '../currentScopes.js';\nimport { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE } from '../semanticAttributes.js';\nimport { baggageHeaderToDynamicSamplingContext, dynamicSamplingContextToSentryBaggageHeader } from '../utils/baggage.js';\nimport { extractOrgIdFromClient } from '../utils/dsn.js';\nimport { hasSpansEnabled } from '../utils/hasSpansEnabled.js';\nimport { addNonEnumerableProperty } from '../utils/object.js';\nimport { getRootSpan, spanToStaticSpanJSON, spanIsSampled } from '../utils/spanUtils.js';\nimport { spanIsNonRecordingSpan } from './sentryNonRecordingSpan.js';\nimport { getCapturedScopesOnSpan } from './utils.js';\n\nconst FROZEN_DSC_FIELD = \"_frozenDsc\";\nfunction freezeDscOnSpan(span, dsc) {\n  const spanWithMaybeDsc = span;\n  addNonEnumerableProperty(spanWithMaybeDsc, FROZEN_DSC_FIELD, dsc);\n}\nfunction getDynamicSamplingContextFromClient(trace_id, client) {\n  const options = client.getOptions();\n  const { publicKey: public_key } = client.getDsn() || {};\n  const dsc = {\n    environment: options.environment || DEFAULT_ENVIRONMENT,\n    release: options.release,\n    public_key,\n    trace_id,\n    org_id: extractOrgIdFromClient(client)\n  };\n  client.emit(\"createDsc\", dsc);\n  return dsc;\n}\nfunction getDynamicSamplingContextFromScope(client, scope) {\n  if (getExternalPropagationContext()) {\n    return void 0;\n  }\n  const propagationContext = scope.getPropagationContext();\n  return propagationContext.dsc || getDynamicSamplingContextFromClient(propagationContext.traceId, client);\n}\nfunction getDynamicSamplingContextFromSpan(span) {\n  const client = getClient();\n  if (!client) {\n    return {};\n  }\n  const rootSpan = getRootSpan(span);\n  const rootSpanJson = spanToStaticSpanJSON(rootSpan);\n  const rootSpanAttributes = rootSpanJson.data;\n  const traceState = rootSpan.spanContext().traceState;\n  const rootSpanSampleRate = traceState?.get(\"sentry.sample_rate\") ?? rootSpanAttributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] ?? rootSpanAttributes[SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE];\n  function applyLocalSampleRateToDsc(dsc2) {\n    if (typeof rootSpanSampleRate === \"number\" || typeof rootSpanSampleRate === \"string\") {\n      dsc2.sample_rate = `${rootSpanSampleRate}`;\n    }\n    return dsc2;\n  }\n  const frozenDsc = rootSpan[FROZEN_DSC_FIELD];\n  if (frozenDsc) {\n    return applyLocalSampleRateToDsc(frozenDsc);\n  }\n  const isNonRecordingRoot = spanIsNonRecordingSpan(rootSpan);\n  const isIgnoredRoot = isNonRecordingRoot && rootSpan.dropReason === \"ignored\";\n  if (isNonRecordingRoot && (!hasSpansEnabled(client.getOptions()) || isIgnoredRoot)) {\n    const capturedScope = getCapturedScopesOnSpan(rootSpan).scope;\n    const scopeDsc = capturedScope && getDynamicSamplingContextFromScope(client, capturedScope);\n    if (scopeDsc) {\n      const dsc2 = { ...scopeDsc };\n      if (isIgnoredRoot) {\n        dsc2.sampled = \"false\";\n      }\n      return applyLocalSampleRateToDsc(dsc2);\n    }\n  }\n  const traceStateDsc = traceState?.get(\"sentry.dsc\");\n  const dscOnTraceState = traceStateDsc && baggageHeaderToDynamicSamplingContext(traceStateDsc);\n  if (dscOnTraceState) {\n    return applyLocalSampleRateToDsc(dscOnTraceState);\n  }\n  const dsc = getDynamicSamplingContextFromClient(span.spanContext().traceId, client);\n  const source = rootSpanAttributes[SENTRY_SEGMENT_NAME_SOURCE];\n  const name = rootSpanJson.description;\n  if (source !== \"url\" && name) {\n    dsc.transaction = name;\n  }\n  if (hasSpansEnabled()) {\n    dsc.sampled = String(spanIsSampled(rootSpan));\n    dsc.sample_rand = // In OTEL we store the sample rand on the trace state because we cannot access scopes for NonRecordingSpans\n    // The Sentry OTEL SpanSampler takes care of writing the sample rand on the root span\n    traceState?.get(\"sentry.sample_rand\") ?? // On all other platforms we can actually get the scopes from a root span (we use this as a fallback)\n    getCapturedScopesOnSpan(rootSpan).scope?.getPropagationContext().sampleRand.toString();\n  }\n  applyLocalSampleRateToDsc(dsc);\n  client.emit(\"createDsc\", dsc, rootSpan);\n  return dsc;\n}\nfunction spanToBaggageHeader(span) {\n  const dsc = getDynamicSamplingContextFromSpan(span);\n  return dynamicSamplingContextToSentryBaggageHeader(dsc);\n}\n\nexport { freezeDscOnSpan, getDynamicSamplingContextFromClient, getDynamicSamplingContextFromScope, getDynamicSamplingContextFromSpan, spanToBaggageHeader };\n//# sourceMappingURL=dynamicSamplingContext.js.map\n","import { getGlobalScope } from '../currentScopes.js';\nimport { getDynamicSamplingContextFromSpan } from '../tracing/dynamicSamplingContext.js';\nimport { merge } from './merge.js';\nimport { spanToTraceContext, getRootSpan, spanToStaticSpanJSON } from './spanUtils.js';\n\nfunction applyScopeDataToEvent(event, data) {\n  const { fingerprint, breadcrumbs, sdkProcessingMetadata } = data;\n  applyDataToEvent(event, data);\n  applyFingerprintToEvent(event, fingerprint);\n  applyBreadcrumbsToEvent(event, breadcrumbs);\n  applySdkMetadataToEvent(event, sdkProcessingMetadata);\n}\nfunction mergeScopeData(data, mergeData) {\n  const {\n    extra,\n    tags,\n    attributes,\n    user,\n    contexts,\n    level,\n    sdkProcessingMetadata,\n    breadcrumbs,\n    fingerprint,\n    eventProcessors,\n    attachments,\n    propagationContext,\n    transactionName\n  } = mergeData;\n  mergeAndOverwriteScopeData(data, \"extra\", extra);\n  mergeAndOverwriteScopeData(data, \"tags\", tags);\n  mergeAndOverwriteScopeData(data, \"attributes\", attributes);\n  mergeAndOverwriteScopeData(data, \"user\", user);\n  mergeAndOverwriteScopeData(data, \"contexts\", contexts);\n  data.sdkProcessingMetadata = merge(data.sdkProcessingMetadata, sdkProcessingMetadata, 2);\n  if (level) {\n    data.level = level;\n  }\n  if (transactionName) {\n    data.transactionName = transactionName;\n  }\n  if (breadcrumbs.length) {\n    data.breadcrumbs = [...data.breadcrumbs, ...breadcrumbs];\n  }\n  if (fingerprint.length) {\n    data.fingerprint = [...data.fingerprint, ...fingerprint];\n  }\n  if (eventProcessors.length) {\n    data.eventProcessors = [...data.eventProcessors, ...eventProcessors];\n  }\n  if (attachments.length) {\n    data.attachments = [...data.attachments, ...attachments];\n  }\n  data.propagationContext = { ...data.propagationContext, ...propagationContext };\n}\nfunction mergeAndOverwriteScopeData(data, prop, mergeVal) {\n  data[prop] = merge(data[prop], mergeVal, 1);\n}\nfunction getCombinedScopeData(isolationScope, currentScope) {\n  const scopeData = getGlobalScope().getScopeData();\n  isolationScope && mergeScopeData(scopeData, isolationScope.getScopeData());\n  currentScope && mergeScopeData(scopeData, currentScope.getScopeData());\n  return scopeData;\n}\nfunction applyDataToEvent(event, data) {\n  const { extra, tags, user, contexts, level, transactionName } = data;\n  if (Object.keys(extra).length) {\n    event.extra = { ...extra, ...event.extra };\n  }\n  if (Object.keys(tags).length) {\n    event.tags = { ...tags, ...event.tags };\n  }\n  if (Object.keys(user).length) {\n    event.user = { ...user, ...event.user };\n  }\n  if (Object.keys(contexts).length) {\n    event.contexts = { ...contexts, ...event.contexts };\n  }\n  if (level) {\n    event.level = level;\n  }\n  if (transactionName && event.type !== \"transaction\") {\n    event.transaction = transactionName;\n  }\n}\nfunction applyBreadcrumbsToEvent(event, breadcrumbs) {\n  const mergedBreadcrumbs = [...event.breadcrumbs || [], ...breadcrumbs];\n  event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : void 0;\n}\nfunction applySdkMetadataToEvent(event, sdkProcessingMetadata) {\n  event.sdkProcessingMetadata = {\n    ...event.sdkProcessingMetadata,\n    ...sdkProcessingMetadata\n  };\n}\nfunction applySpanToEvent(event, span) {\n  event.contexts = {\n    trace: spanToTraceContext(span),\n    ...event.contexts\n  };\n  event.sdkProcessingMetadata = {\n    dynamicSamplingContext: getDynamicSamplingContextFromSpan(span),\n    ...event.sdkProcessingMetadata\n  };\n  const rootSpan = getRootSpan(span);\n  const transactionName = spanToStaticSpanJSON(rootSpan).description;\n  if (transactionName && !event.transaction && event.type === \"transaction\") {\n    event.transaction = transactionName;\n  }\n}\nfunction applyFingerprintToEvent(event, fingerprint) {\n  event.fingerprint = event.fingerprint ? Array.isArray(event.fingerprint) ? event.fingerprint : [event.fingerprint] : [];\n  if (fingerprint) {\n    event.fingerprint = event.fingerprint.concat(fingerprint);\n  }\n  if (!event.fingerprint.length) {\n    delete event.fingerprint;\n  }\n}\n\nexport { applyScopeDataToEvent, applySpanToEvent, getCombinedScopeData, mergeAndOverwriteScopeData, mergeScopeData };\n//# sourceMappingURL=scopeData.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from './debug-logger.js';\nimport { isThenable } from './is.js';\n\nconst CALLBACK_ERROR = /* @__PURE__ */ Symbol.for(\"SentryCallbackError\");\nfunction safeCallback(message, fn, fallback) {\n  let result;\n  try {\n    result = fn();\n  } catch (error) {\n    return recover(message, error, fallback);\n  }\n  if (isThenable(result)) {\n    return result.then(void 0, (error) => recover(message, error, fallback));\n  }\n  return result;\n}\nfunction recover(message, error, fallback) {\n  DEBUG_BUILD && debug.error(message, error);\n  return fallback(error);\n}\n\nexport { CALLBACK_ERROR, safeCallback };\n//# sourceMappingURL=safeCallback.js.map\n","import { DEBUG_BUILD } from '../../debug-build.js';\nimport { addNonEnumerableProperty } from '../../utils/object.js';\nimport { safeCallback } from '../../utils/safeCallback.js';\n\nfunction withStaticSpan(callback) {\n  addNonEnumerableProperty(callback, \"_static\", true);\n  return callback;\n}\nfunction withStreamedSpan(callback) {\n  return callback;\n}\nfunction isStaticBeforeSendSpanCallback(callback) {\n  return !!callback && typeof callback === \"function\" && \"_static\" in callback && !!callback._static;\n}\nfunction applyBeforeSendSpanCallback(span, beforeSendSpan) {\n  const modifiedSpan = safeCallback(\n    DEBUG_BUILD ? \"The `beforeSendSpan` callback threw an error, sending the span unmodified:\" : \"\",\n    () => beforeSendSpan(span),\n    () => span\n  );\n  return modifiedSpan || span;\n}\n\nexport { applyBeforeSendSpanCallback, isStaticBeforeSendSpanCallback, withStaticSpan, withStreamedSpan };\n//# sourceMappingURL=beforeSendSpan.js.map\n","import { streamedSpanJsonToSerializedSpan } from '../../utils/spanUtils.js';\n\nfunction spanJsonToSerializedStreamedSpan(span) {\n  const streamedSpan = {\n    trace_id: span.trace_id,\n    span_id: span.span_id,\n    parent_span_id: span.parent_span_id,\n    name: span.description || \"\",\n    start_timestamp: span.start_timestamp,\n    end_timestamp: span.timestamp,\n    status: !span.status || span.status === \"ok\" || span.status === \"cancelled\" ? \"ok\" : \"error\",\n    is_segment: false,\n    attributes: { ...span.data },\n    links: span.links\n  };\n  return streamedSpanJsonToSerializedSpan(streamedSpan);\n}\n\nexport { spanJsonToSerializedStreamedSpan };\n//# sourceMappingURL=spanJsonToStreamedSpan.js.map\n","function scopeContextsToSpanAttributes(contexts) {\n  const attrs = {};\n  const { response, profile, cloud_resource, culture, state } = contexts;\n  if (response) {\n    if (response.status_code != null) {\n      attrs[\"http.response.status_code\"] = response.status_code;\n    }\n    if (response.body_size != null) {\n      attrs[\"http.response.body.size\"] = response.body_size;\n    }\n  }\n  if (profile) {\n    if (profile.profile_id) {\n      attrs[\"sentry.profile_id\"] = profile.profile_id;\n    }\n    if (profile.profiler_id) {\n      attrs[\"sentry.profiler_id\"] = profile.profiler_id;\n    }\n  }\n  if (cloud_resource) {\n    for (const [key, value] of Object.entries(cloud_resource)) {\n      if (value != null) {\n        attrs[key] = value;\n      }\n    }\n  }\n  if (culture) {\n    if (culture.locale) {\n      attrs[\"culture.locale\"] = culture.locale;\n    }\n    if (culture.timezone) {\n      attrs[\"culture.timezone\"] = culture.timezone;\n    }\n  }\n  if (state?.state && typeof state.state.type === \"string\") {\n    attrs[\"state.type\"] = state.state.type;\n  }\n  const angular = contexts[\"angular\"];\n  if (angular) {\n    const version = angular[\"version\"];\n    if (typeof version === \"string\" || typeof version === \"number\") {\n      attrs[\"angular.version\"] = version;\n    }\n  }\n  const react = contexts[\"react\"];\n  if (react) {\n    const version = react[\"version\"];\n    if (typeof version === \"string\" || typeof version === \"number\") {\n      attrs[\"react.version\"] = version;\n    }\n  }\n  return attrs;\n}\n\nexport { scopeContextsToSpanAttributes };\n//# sourceMappingURL=scopeContextAttributes.js.map\n","import { SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME } from '../../semanticAttributes.js';\nimport { getCombinedScopeData } from '../../utils/scopeData.js';\nimport { spanToJSON, INTERNAL_getSegmentSpan, streamedSpanJsonToSerializedSpan, spanToStaticSpanJSON } from '../../utils/spanUtils.js';\nimport { getCapturedScopesOnSpan } from '../utils.js';\nimport { isStaticBeforeSendSpanCallback, applyBeforeSendSpanCallback } from './beforeSendSpan.js';\nimport { spanJsonToSerializedStreamedSpan } from './spanJsonToStreamedSpan.js';\nimport { scopeContextsToSpanAttributes } from './scopeContextAttributes.js';\nimport { DEFAULT_ENVIRONMENT } from '../../constants.js';\nimport { SENTRY_SDK_INTEGRATIONS, USER_NAME, USER_IP_ADDRESS, USER_EMAIL, USER_ID, SENTRY_ENVIRONMENT, SENTRY_RELEASE, SENTRY_SDK_VERSION, SENTRY_SDK_NAME, SENTRY_SEGMENT_ID, SENTRY_SEGMENT_NAME, SENTRY_TRACE_LIFECYCLE } from '@sentry/conventions/attributes';\n\nfunction captureSpan(span, client) {\n  const spanJSON = spanToJSON(span);\n  if (spanJSON.attributes) {\n    delete spanJSON.attributes[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n  }\n  const segmentSpan = INTERNAL_getSegmentSpan(span);\n  const serializedSegmentSpan = spanToJSON(segmentSpan);\n  const { isolationScope: spanIsolationScope, scope: spanScope } = getCapturedScopesOnSpan(span);\n  const finalScopeData = getCombinedScopeData(spanIsolationScope, spanScope);\n  applyCommonSpanAttributes(spanJSON, serializedSegmentSpan, client, finalScopeData);\n  client.emit(\"preprocessSpan\", spanJSON);\n  if (spanJSON.is_segment) {\n    applyScopeToSegmentSpan(spanJSON, finalScopeData);\n    applySdkMetadataToSegmentSpan(spanJSON, client);\n    client.emit(\"processSegmentSpan\", spanJSON);\n  }\n  client.emit(\"processSpan\", spanJSON);\n  const { beforeSendSpan, traceLifecycle } = client.getOptions();\n  const processedSpan = (\n    // check for traceLifecycle here because in static lifecycle,\n    // captureSpan is called for INP spans. If an unmigrated beforeSendSpan\n    // callback is run on these spans, it will throw an error.\n    traceLifecycle !== \"static\" && beforeSendSpan && !isStaticBeforeSendSpanCallback(beforeSendSpan) ? applyBeforeSendSpanCallback(spanJSON, beforeSendSpan) : spanJSON\n  );\n  return {\n    ...streamedSpanJsonToSerializedSpan(processedSpan),\n    _segmentSpan: segmentSpan\n  };\n}\nfunction applyScopeToSegmentSpan(segmentSpanJSON, scopeData) {\n  const contextAttributes = scopeContextsToSpanAttributes(scopeData.contexts);\n  safeSetSpanJSONAttributes(segmentSpanJSON, contextAttributes);\n}\nfunction safeSetSpanJSONAttributes(spanJSON, newAttributes) {\n  const originalAttributes = spanJSON.attributes ?? (spanJSON.attributes = {});\n  Object.entries(newAttributes).forEach(([key, value]) => {\n    if (value != null && !(key in originalAttributes)) {\n      originalAttributes[key] = value;\n    }\n  });\n}\nfunction applySdkMetadataToSegmentSpan(segmentSpanJSON, client) {\n  const integrationNames = client.getIntegrationNames();\n  if (!integrationNames.length) return;\n  safeSetSpanJSONAttributes(segmentSpanJSON, {\n    [SENTRY_SDK_INTEGRATIONS]: integrationNames\n  });\n}\nfunction commonSpanAttributes(serializedSegmentSpan, client, scopeData, includeScopeAttributes = true) {\n  const sdk = client.getSdkMetadata();\n  const { release, environment } = client.getOptions();\n  return {\n    [SENTRY_TRACE_LIFECYCLE]: \"stream\",\n    [SENTRY_SEGMENT_NAME]: serializedSegmentSpan.name,\n    [SENTRY_SEGMENT_ID]: serializedSegmentSpan.span_id,\n    [SENTRY_SDK_NAME]: sdk?.sdk?.name,\n    [SENTRY_SDK_VERSION]: sdk?.sdk?.version,\n    [SENTRY_RELEASE]: release,\n    [SENTRY_ENVIRONMENT]: environment || DEFAULT_ENVIRONMENT,\n    [USER_ID]: scopeData.user?.id,\n    [USER_EMAIL]: scopeData.user?.email,\n    [USER_IP_ADDRESS]: scopeData.user?.ip_address,\n    [USER_NAME]: scopeData.user?.username,\n    ...includeScopeAttributes ? scopeData.attributes : void 0\n  };\n}\nfunction applyCommonSpanAttributes(spanJSON, serializedSegmentSpan, client, scopeData) {\n  safeSetSpanJSONAttributes(spanJSON, commonSpanAttributes(serializedSegmentSpan, client, scopeData));\n}\nfunction captureStandaloneSpanWithStaticCallback(span, client, beforeSendSpan) {\n  const spanJSON = spanToStaticSpanJSON(span);\n  const segmentSpan = INTERNAL_getSegmentSpan(span);\n  const serializedSegmentSpan = spanToJSON(segmentSpan);\n  const { isolationScope: spanIsolationScope, scope: spanScope } = getCapturedScopesOnSpan(span);\n  const finalScopeData = getCombinedScopeData(spanIsolationScope, spanScope);\n  const commonAttributes = commonSpanAttributes(serializedSegmentSpan, client, finalScopeData, false);\n  Object.entries(commonAttributes).forEach(([key, value]) => {\n    if (value != null && !(key in spanJSON.data)) {\n      spanJSON.data[key] = value;\n    }\n  });\n  const processedSpan = applyBeforeSendSpanCallback(spanJSON, beforeSendSpan);\n  return spanJsonToSerializedStreamedSpan(processedSpan);\n}\n\nexport { captureSpan, captureStandaloneSpanWithStaticCallback, safeSetSpanJSONAttributes };\n//# sourceMappingURL=captureSpan.js.map\n","function hasSpanStreamingEnabled(client) {\n  return client.getOptions().traceLifecycle === \"stream\";\n}\n\nexport { hasSpanStreamingEnabled };\n//# sourceMappingURL=hasSpanStreamingEnabled.js.map\n","function safeUnref(timer) {\n  if (typeof timer === \"object\" && typeof timer.unref === \"function\") {\n    timer.unref();\n  }\n  return timer;\n}\n\nexport { safeUnref };\n//# sourceMappingURL=timer.js.map\n","import { getSentryCarrier } from '../carrier.js';\nimport { dsnToString } from './dsn.js';\nimport { normalize } from './normalize.js';\nimport { safeDateNow } from './randomSafeContext.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nfunction createEnvelope(headers, items = []) {\n  return [headers, items];\n}\nfunction addItemToEnvelope(envelope, newItem) {\n  const [headers, items] = envelope;\n  return [headers, [...items, newItem]];\n}\nfunction forEachEnvelopeItem(envelope, callback) {\n  const envelopeItems = envelope[1];\n  for (const envelopeItem of envelopeItems) {\n    const envelopeItemType = envelopeItem[0].type;\n    const result = callback(envelopeItem, envelopeItemType);\n    if (result) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction envelopeContainsItemType(envelope, types) {\n  return forEachEnvelopeItem(envelope, (_, type) => types.includes(type));\n}\nfunction encodeUTF8(input) {\n  const carrier = getSentryCarrier(GLOBAL_OBJ);\n  return carrier.encodePolyfill ? carrier.encodePolyfill(input) : new TextEncoder().encode(input);\n}\nfunction decodeUTF8(input) {\n  const carrier = getSentryCarrier(GLOBAL_OBJ);\n  return carrier.decodePolyfill ? carrier.decodePolyfill(input) : new TextDecoder().decode(input);\n}\nfunction serializeEnvelope(envelope) {\n  const [envHeaders, items] = envelope;\n  let parts = JSON.stringify(envHeaders);\n  function append(next) {\n    if (typeof parts === \"string\") {\n      parts = typeof next === \"string\" ? parts + next : [encodeUTF8(parts), next];\n    } else {\n      parts.push(typeof next === \"string\" ? encodeUTF8(next) : next);\n    }\n  }\n  for (const item of items) {\n    const [itemHeaders, payload] = item;\n    append(`\n${JSON.stringify(itemHeaders)}\n`);\n    if (typeof payload === \"string\" || payload instanceof Uint8Array) {\n      append(payload);\n    } else {\n      let stringifiedPayload;\n      try {\n        stringifiedPayload = JSON.stringify(payload);\n      } catch {\n        stringifiedPayload = JSON.stringify(normalize(payload));\n      }\n      append(stringifiedPayload);\n    }\n  }\n  return typeof parts === \"string\" ? parts : concatBuffers(parts);\n}\nfunction concatBuffers(buffers) {\n  const totalLength = buffers.reduce((acc, buf) => acc + buf.length, 0);\n  const merged = new Uint8Array(totalLength);\n  let offset = 0;\n  for (const buffer of buffers) {\n    merged.set(buffer, offset);\n    offset += buffer.length;\n  }\n  return merged;\n}\nfunction parseEnvelope(env) {\n  let buffer = typeof env === \"string\" ? encodeUTF8(env) : env;\n  function readBinary(length) {\n    const bin = buffer.subarray(0, length);\n    buffer = buffer.subarray(length + 1);\n    return bin;\n  }\n  function readJson() {\n    let i = buffer.indexOf(10);\n    if (i < 0) {\n      i = buffer.length;\n    }\n    return JSON.parse(decodeUTF8(readBinary(i)));\n  }\n  const envelopeHeader = readJson();\n  const items = [];\n  while (buffer.length) {\n    const itemHeader = readJson();\n    const binaryLength = typeof itemHeader.length === \"number\" ? itemHeader.length : void 0;\n    items.push([itemHeader, binaryLength ? readBinary(binaryLength) : readJson()]);\n  }\n  return [envelopeHeader, items];\n}\nfunction createAttachmentEnvelopeItem(attachment) {\n  const buffer = typeof attachment.data === \"string\" ? encodeUTF8(attachment.data) : attachment.data;\n  return [\n    {\n      type: \"attachment\",\n      length: buffer.length,\n      filename: attachment.filename,\n      content_type: attachment.contentType,\n      attachment_type: attachment.attachmentType\n    },\n    buffer\n  ];\n}\nconst DATA_CATEGORY_OVERRIDES = {\n  sessions: \"session\",\n  event: \"error\",\n  client_report: \"internal\",\n  user_report: \"default\",\n  profile_chunk: \"profile\",\n  replay_event: \"replay\",\n  replay_recording: \"replay\",\n  check_in: \"monitor\",\n  raw_security: \"security\",\n  log: \"log_item\",\n  trace_metric: \"metric\"\n};\nfunction _isOverriddenType(type) {\n  return type in DATA_CATEGORY_OVERRIDES;\n}\nfunction envelopeItemTypeToDataCategory(type) {\n  return _isOverriddenType(type) ? DATA_CATEGORY_OVERRIDES[type] : type;\n}\nfunction getSdkMetadataForEnvelopeHeader(metadataOrEvent) {\n  if (!metadataOrEvent?.sdk) {\n    return;\n  }\n  const { name, version } = metadataOrEvent.sdk;\n  return { name, version };\n}\nfunction createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn) {\n  const dynamicSamplingContext = event.sdkProcessingMetadata?.dynamicSamplingContext;\n  return {\n    event_id: event.event_id,\n    sent_at: new Date(safeDateNow()).toISOString(),\n    ...sdkInfo && { sdk: sdkInfo },\n    ...!!tunnel && dsn && { dsn: dsnToString(dsn) },\n    ...dynamicSamplingContext && {\n      trace: dynamicSamplingContext\n    }\n  };\n}\nfunction getDataCategoryByType(type) {\n  return type === \"replay_event\" ? \"replay\" : type || \"error\";\n}\n\nexport { addItemToEnvelope, createAttachmentEnvelopeItem, createEnvelope, createEventEnvelopeHeaders, envelopeContainsItemType, envelopeItemTypeToDataCategory, forEachEnvelopeItem, getDataCategoryByType, getSdkMetadataForEnvelopeHeader, parseEnvelope, serializeEnvelope };\n//# sourceMappingURL=envelope.js.map\n","function isBrowserBundle() {\n  return typeof __SENTRY_BROWSER_BUNDLE__ !== \"undefined\" && !!__SENTRY_BROWSER_BUNDLE__;\n}\nfunction getSDKSource() {\n  /*! __SENTRY_SDK_SOURCE__ */\n  return \"npm\";\n}\n\nexport { getSDKSource, isBrowserBundle };\n//# sourceMappingURL=env.js.map\n","import { isBrowserBundle } from './env.js';\n\nfunction isNodeEnv() {\n  return !isBrowserBundle() && Object.prototype.toString.call(typeof process !== \"undefined\" ? process : 0) === \"[object process]\";\n}\nfunction dynamicRequire(mod, request) {\n  return mod.require(request);\n}\nfunction loadModule(moduleName, existingModule = typeof module !== \"undefined\" ? module : void 0) {\n  let mod;\n  try {\n    mod = dynamicRequire(existingModule, moduleName);\n  } catch {\n  }\n  if (!mod) {\n    try {\n      const { cwd } = dynamicRequire(existingModule, \"process\");\n      mod = dynamicRequire(existingModule, `${cwd()}/node_modules/${moduleName}`);\n    } catch {\n    }\n  }\n  return mod;\n}\n\nexport { isNodeEnv, loadModule };\n//# sourceMappingURL=node.js.map\n","import { isNodeEnv } from './node.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nfunction isBrowser() {\n  return typeof window !== \"undefined\" && (!isNodeEnv() || isElectronNodeRenderer());\n}\nfunction isElectronNodeRenderer() {\n  const process = GLOBAL_OBJ.process;\n  return process?.type === \"renderer\";\n}\n\nexport { isBrowser };\n//# sourceMappingURL=isBrowser.js.map\n","import { dsnToString } from '../../utils/dsn.js';\nimport { getSdkMetadataForEnvelopeHeader, createEnvelope } from '../../utils/envelope.js';\nimport { isBrowser } from '../../utils/isBrowser.js';\nimport { safeDateNow } from '../../utils/randomSafeContext.js';\n\nfunction createStreamedSpanEnvelope(serializedSpans, dsc, client) {\n  const options = client.getOptions();\n  const dsn = client.getDsn();\n  const tunnel = options.tunnel;\n  const sdk = getSdkMetadataForEnvelopeHeader(options._metadata);\n  const headers = {\n    sent_at: new Date(safeDateNow()).toISOString(),\n    ...dscHasRequiredProps(dsc) && { trace: dsc },\n    ...sdk && { sdk },\n    ...!!tunnel && dsn && { dsn: dsnToString(dsn) }\n  };\n  return createEnvelope(headers, [createSpanContainerItem(serializedSpans, client)]);\n}\nfunction createSpanContainerItem(serializedSpans, client) {\n  const inferSetting = client.getDataCollectionOptions().userInfo ? \"auto\" : \"never\";\n  return [\n    { type: \"span\", item_count: serializedSpans.length, content_type: \"application/vnd.sentry.items.span.v2+json\" },\n    {\n      version: 2,\n      ingest_settings: isBrowser() ? { infer_ip: inferSetting, infer_user_agent: inferSetting } : void 0,\n      items: serializedSpans\n    }\n  ];\n}\nfunction dscHasRequiredProps(dsc) {\n  return !!dsc.trace_id && !!dsc.public_key;\n}\n\nexport { createSpanContainerItem, createStreamedSpanEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { estimateTypedAttributesSizeInBytes } from '../../attributes.js';\n\nfunction estimateSerializedSpanSizeInBytes(span) {\n  let weight = 156;\n  weight += span.name.length * 2;\n  weight += estimateTypedAttributesSizeInBytes(span.attributes);\n  if (span.links && span.links.length > 0) {\n    const firstLink = span.links[0];\n    const attributes = firstLink?.attributes;\n    const linkWeight = 100 + (attributes ? estimateTypedAttributesSizeInBytes(attributes) : 0);\n    weight += linkWeight * span.links.length;\n  }\n  return weight;\n}\n\nexport { estimateSerializedSpanSizeInBytes };\n//# sourceMappingURL=estimateSize.js.map\n","import { DEBUG_BUILD } from '../../debug-build.js';\nimport { debug } from '../../utils/debug-logger.js';\nimport { safeUnref } from '../../utils/timer.js';\nimport { getDynamicSamplingContextFromSpan } from '../dynamicSamplingContext.js';\nimport { createStreamedSpanEnvelope } from './envelope.js';\nimport { estimateSerializedSpanSizeInBytes } from './estimateSize.js';\n\nconst MAX_SPANS_PER_ENVELOPE = 1e3;\nconst MAX_TRACE_WEIGHT_IN_BYTES = 5e6;\nclass SpanBuffer {\n  constructor(client, options) {\n    this._traceBuckets = /* @__PURE__ */ new Map();\n    this._client = client;\n    const { maxSpanLimit, flushInterval, maxTraceWeightInBytes } = options ?? {};\n    this._maxSpanLimit = maxSpanLimit && maxSpanLimit > 0 && maxSpanLimit <= MAX_SPANS_PER_ENVELOPE ? maxSpanLimit : MAX_SPANS_PER_ENVELOPE;\n    this._flushInterval = flushInterval && flushInterval > 0 ? flushInterval : 5e3;\n    this._maxTraceWeight = maxTraceWeightInBytes && maxTraceWeightInBytes > 0 ? maxTraceWeightInBytes : MAX_TRACE_WEIGHT_IN_BYTES;\n    this._client.on(\"flush\", () => {\n      this.drain();\n    });\n    this._client.on(\"close\", () => {\n      this._traceBuckets.forEach((bucket) => {\n        clearTimeout(bucket.timeout);\n      });\n      this._traceBuckets.clear();\n    });\n  }\n  /**\n   * Add a span to the buffer.\n   */\n  add(spanJSON) {\n    const traceId = spanJSON.trace_id;\n    let bucket = this._traceBuckets.get(traceId);\n    if (!bucket) {\n      bucket = {\n        spans: /* @__PURE__ */ new Set(),\n        size: 0,\n        timeout: safeUnref(\n          setTimeout(() => {\n            this.flush(traceId);\n          }, this._flushInterval)\n        )\n      };\n      this._traceBuckets.set(traceId, bucket);\n    }\n    bucket.spans.add(spanJSON);\n    bucket.size += estimateSerializedSpanSizeInBytes(spanJSON);\n    if (bucket.spans.size >= this._maxSpanLimit || bucket.size >= this._maxTraceWeight) {\n      this.flush(traceId);\n    }\n  }\n  /**\n   * Drain and flush all buffered traces.\n   */\n  drain() {\n    if (!this._traceBuckets.size) {\n      return;\n    }\n    DEBUG_BUILD && debug.log(`Flushing span tree map with ${this._traceBuckets.size} traces`);\n    this._traceBuckets.forEach((_, traceId) => {\n      this.flush(traceId);\n    });\n  }\n  /**\n   * Flush spans of a specific trace.\n   * In contrast to {@link SpanBuffer.drain}, this method does not flush all traces, but only the one with the given traceId.\n   */\n  flush(traceId) {\n    const bucket = this._traceBuckets.get(traceId);\n    if (!bucket) {\n      return;\n    }\n    if (!bucket.spans.size) {\n      this._removeTrace(traceId);\n      return;\n    }\n    const spans = Array.from(bucket.spans);\n    const segmentSpan = spans[0]?._segmentSpan;\n    if (!segmentSpan) {\n      DEBUG_BUILD && debug.warn(\"No segment span reference found on span JSON, cannot compute DSC\");\n      this._removeTrace(traceId);\n      return;\n    }\n    const dsc = getDynamicSamplingContextFromSpan(segmentSpan);\n    const cleanedSpans = spans.map((spanJSON) => {\n      const { _segmentSpan, ...cleanSpanJSON } = spanJSON;\n      return cleanSpanJSON;\n    });\n    const envelope = createStreamedSpanEnvelope(cleanedSpans, dsc, this._client);\n    DEBUG_BUILD && debug.log(`Sending span envelope for trace ${traceId} with ${cleanedSpans.length} spans`);\n    this._client.sendEnvelope(envelope).then(null, (reason) => {\n      DEBUG_BUILD && debug.error(\"Error while sending streamed span envelope:\", reason);\n    });\n    this._removeTrace(traceId);\n  }\n  _removeTrace(traceId) {\n    const bucket = this._traceBuckets.get(traceId);\n    if (bucket) {\n      clearTimeout(bucket.timeout);\n    }\n    this._traceBuckets.delete(traceId);\n  }\n}\n\nexport { SpanBuffer };\n//# sourceMappingURL=spanBuffer.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { defineIntegration } from '../integration.js';\nimport { captureSpan } from '../tracing/spans/captureSpan.js';\nimport { hasSpanStreamingEnabled } from '../tracing/spans/hasSpanStreamingEnabled.js';\nimport { SpanBuffer } from '../tracing/spans/spanBuffer.js';\nimport { debug } from '../utils/debug-logger.js';\nimport { spanIsSampled } from '../utils/spanUtils.js';\nimport { safeUnref } from '../utils/timer.js';\n\nconst INTEGRATION_NAME = \"SpanStreaming\";\nconst spanStreamingIntegration = defineIntegration((options = {}) => {\n  const flushOnSegmentEnd = options.flushOnSegmentEnd ?? true;\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      if (!hasSpanStreamingEnabled(client)) {\n        DEBUG_BUILD && debug.log(`[${INTEGRATION_NAME}] \\`traceLifecycle\\` is \"static\", skipping setup.`);\n        return;\n      }\n      const buffer = new SpanBuffer(client);\n      client.on(\"afterSpanEnd\", (span) => {\n        if (!spanIsSampled(span)) {\n          return;\n        }\n        buffer.add(captureSpan(span, client));\n      });\n      client.on(\"flushTraceSpans\", (traceId) => {\n        buffer.flush(traceId);\n      });\n      if (flushOnSegmentEnd) {\n        client.on(\"afterSegmentSpanEnd\", (segmentSpan) => {\n          const traceId = segmentSpan.spanContext().traceId;\n          safeUnref(\n            setTimeout(() => {\n              buffer.flush(traceId);\n            }, 500)\n          );\n        });\n      }\n    }\n  };\n});\n\nexport { INTEGRATION_NAME, spanStreamingIntegration };\n//# sourceMappingURL=spanStreaming.js.map\n","import { getTraceContextFromScope } from '../currentScopes.js';\nimport { isPrimitive } from './is.js';\nimport { spanIsSampled, spanToTraceContext } from './spanUtils.js';\n\nconst escapedSpanTraceContexts = /* @__PURE__ */ new WeakMap();\nfunction toWeakMapKey(error) {\n  return isPrimitive(error) ? void 0 : error;\n}\nfunction recordEscapedErrorSpan(error, span) {\n  const key = toWeakMapKey(error);\n  if (!key || !spanIsSampled(span) || escapedSpanTraceContexts.has(key)) {\n    return;\n  }\n  escapedSpanTraceContexts.set(key, spanToTraceContext(span));\n}\nfunction applyEscapedErrorSpanToEvent(event, hint, scope) {\n  const key = toWeakMapKey(hint.originalException);\n  const traceContext = key && escapedSpanTraceContexts.get(key);\n  if (!traceContext) {\n    return;\n  }\n  const eventTraceContext = event.contexts?.trace;\n  const eventTraceId = eventTraceContext?.trace_id ?? (scope && getTraceContextFromScope(scope).trace_id);\n  if (eventTraceId !== traceContext.trace_id) {\n    return;\n  }\n  event.contexts = {\n    ...event.contexts,\n    trace: {\n      ...eventTraceContext,\n      ...traceContext\n    }\n  };\n}\n\nexport { applyEscapedErrorSpanToEvent, recordEscapedErrorSpan };\n//# sourceMappingURL=errorSpanAttribution.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from '../utils/debug-logger.js';\nimport { hasSpansEnabled } from '../utils/hasSpansEnabled.js';\nimport { parseSampleRate } from '../utils/parseSampleRate.js';\nimport { safeCallback } from '../utils/safeCallback.js';\n\nfunction sampleSpan(options, samplingContext, sampleRand) {\n  if (!hasSpansEnabled(options)) {\n    return [false];\n  }\n  const resolved = resolveSampleRate(options, samplingContext);\n  if (!resolved) {\n    return [false, void 0, void 0, \"callback_error\"];\n  }\n  const [sampleRate, localSampleRateWasApplied] = resolved;\n  const parsedSampleRate = parseSampleRate(sampleRate);\n  if (parsedSampleRate === void 0) {\n    DEBUG_BUILD && debug.warn(\n      `[Tracing] Discarding root span because of invalid sample rate. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(\n        sampleRate\n      )} of type ${JSON.stringify(typeof sampleRate)}.`\n    );\n    return [false];\n  }\n  if (!parsedSampleRate) {\n    DEBUG_BUILD && debug.log(\n      `[Tracing] Discarding transaction because ${typeof options.tracesSampler === \"function\" ? \"tracesSampler returned 0 or false\" : \"a negative sampling decision was inherited or tracesSampleRate is set to 0\"}`\n    );\n    return [false, parsedSampleRate, localSampleRateWasApplied];\n  }\n  const shouldSample = sampleRand < parsedSampleRate;\n  if (!shouldSample) {\n    DEBUG_BUILD && debug.log(\n      `[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number(\n        sampleRate\n      )})`\n    );\n  }\n  return [shouldSample, parsedSampleRate, localSampleRateWasApplied];\n}\nfunction resolveSampleRate(options, samplingContext) {\n  const { tracesSampler, tracesSampleRate } = options;\n  if (typeof tracesSampler === \"function\") {\n    const samplerResult = safeCallback(\n      DEBUG_BUILD ? \"The `tracesSampler` callback threw an error, falling back to the parent sampling decision or `tracesSampleRate`:\" : \"\",\n      () => [\n        tracesSampler({\n          ...samplingContext,\n          inheritOrSampleWith: (fallbackSampleRate) => {\n            if (typeof samplingContext.parentSampleRate === \"number\") {\n              return samplingContext.parentSampleRate;\n            }\n            if (typeof samplingContext.parentSampled === \"boolean\") {\n              return Number(samplingContext.parentSampled);\n            }\n            return fallbackSampleRate;\n          }\n        }),\n        true\n      ],\n      () => void 0\n    );\n    if (samplerResult) {\n      return samplerResult;\n    }\n  }\n  if (samplingContext.parentSampled !== void 0) {\n    return [samplingContext.parentSampled];\n  }\n  if (typeof tracesSampleRate !== \"undefined\") {\n    return [tracesSampleRate, true];\n  }\n  return void 0;\n}\n\nexport { sampleSpan };\n//# sourceMappingURL=sampling.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE } from '../semanticAttributes.js';\nimport { debug } from '../utils/debug-logger.js';\nimport { getRootSpan, getActiveSpan } from '../utils/spanUtils.js';\n\nfunction setMeasurement(name, value, unit, activeSpan = getActiveSpan()) {\n  const rootSpan = activeSpan && getRootSpan(activeSpan);\n  if (rootSpan) {\n    DEBUG_BUILD && debug.log(`[Measurement] Setting measurement on root span: ${name} = ${value} ${unit}`);\n    rootSpan.addEvent(name, {\n      [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: value,\n      [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: unit\n    });\n  }\n}\nfunction timedEventsToMeasurements(events) {\n  if (!events || events.length === 0) {\n    return void 0;\n  }\n  const measurements = {};\n  events.forEach((event) => {\n    const attributes = event.attributes || {};\n    const unit = attributes[SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT];\n    const value = attributes[SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE];\n    if (typeof unit === \"string\" && typeof value === \"number\") {\n      measurements[event.name] = { value, unit };\n    }\n  });\n  return measurements;\n}\n\nexport { setMeasurement, timedEventsToMeasurements };\n//# sourceMappingURL=measurement.js.map\n","import { getSentryCarrier, getMainCarrier } from '../carrier.js';\n\nfunction setSegmentSpanCaptureStrategy(strategy) {\n  getSentryCarrier(getMainCarrier()).segmentSpanCaptureStrategy = strategy;\n}\nfunction getSegmentSpanCaptureStrategy() {\n  return getSentryCarrier(getMainCarrier()).segmentSpanCaptureStrategy;\n}\n\nexport { getSegmentSpanCaptureStrategy, setSegmentSpanCaptureStrategy };\n//# sourceMappingURL=segmentSpanCaptureStrategy.js.map\n","import { getClient, getCurrentScope } from '../currentScopes.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { SENTRY_OP, SENTRY_ORIGIN, SENTRY_SEGMENT_NAME_SOURCE, SENTRY_EXCLUSIVE_TIME, SENTRY_PROFILE_ID } from '@sentry/conventions/attributes';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME } from '../semanticAttributes.js';\nimport { debug } from '../utils/debug-logger.js';\nimport { generateTraceId, generateSpanId } from '../utils/propagationContext.js';\nimport { TRACE_FLAG_SAMPLED, TRACE_FLAG_NONE, spanIsSegment, spanTimeInputToSeconds, INTERNAL_setSegmentNameSourceIfSegment, convertSpanLinksForEnvelope, getStatusMessage, getStreamedSpanLinks, addStatusMessageAttribute, getSimpleStatus, getRootSpan, spanToStaticSpanJSON, getSpanDescendants, spanToTransactionTraceContext } from '../utils/spanUtils.js';\nimport { timestampInSeconds, safePerformanceNow } from '../utils/time.js';\nimport { getDynamicSamplingContextFromSpan } from './dynamicSamplingContext.js';\nimport { logSpanEnd } from './logSpans.js';\nimport { timedEventsToMeasurements } from './measurement.js';\nimport { getSegmentSpanCaptureStrategy } from './segmentSpanCaptureStrategy.js';\nimport { isStaticBeforeSendSpanCallback } from './spans/beforeSendSpan.js';\nimport { captureStandaloneSpanWithStaticCallback, captureSpan } from './spans/captureSpan.js';\nimport { createStreamedSpanEnvelope } from './spans/envelope.js';\nimport { hasSpanStreamingEnabled } from './spans/hasSpanStreamingEnabled.js';\nimport { spanIsTracerProviderSpan, getCapturedScopesOnSpan } from './utils.js';\n\nconst MAX_SPAN_COUNT = 1e3;\nclass SentrySpan {\n  /**\n   * You should never call the constructor manually, always use `Sentry.startSpan()`\n   * or other span methods.\n   * @internal\n   * @hideconstructor\n   * @hidden\n   */\n  constructor(spanContext = {}) {\n    this._traceId = spanContext.traceId || generateTraceId();\n    this._spanId = spanContext.spanId || generateSpanId();\n    if (spanContext.startTimestamp) {\n      this._startTime = spanContext.startTimestamp;\n    } else {\n      this._startTime = timestampInSeconds();\n      this._startPerformanceNow = safePerformanceNow();\n    }\n    this._links = spanContext.links;\n    this._attributes = {};\n    this.setAttributes({\n      [SENTRY_ORIGIN]: \"manual\",\n      [SENTRY_OP]: spanContext.op,\n      ...spanContext.attributes\n    });\n    this._name = spanContext.name;\n    if (spanContext.parentSpanId) {\n      this._parentSpanId = spanContext.parentSpanId;\n    }\n    if (\"sampled\" in spanContext) {\n      this._sampled = spanContext.sampled;\n    }\n    this._events = [];\n    this._isStandaloneSpan = spanContext.isStandalone;\n  }\n  /** @inheritDoc */\n  addLink(link) {\n    if (this._frozen) {\n      return this;\n    }\n    if (this._links) {\n      this._links.push(link);\n    } else {\n      this._links = [link];\n    }\n    return this;\n  }\n  /** @inheritDoc */\n  addLinks(links) {\n    if (this._frozen) {\n      return this;\n    }\n    if (this._links) {\n      this._links.push(...links);\n    } else {\n      this._links = links;\n    }\n    return this;\n  }\n  /**\n   * This should generally not be used,\n   * but it is needed for being compliant with the OTEL Span interface.\n   *\n   * @hidden\n   * @internal\n   */\n  recordException(_exception, _time) {\n  }\n  /** @inheritdoc */\n  spanContext() {\n    const { _spanId: spanId, _traceId: traceId, _sampled: sampled } = this;\n    return {\n      spanId,\n      traceId,\n      traceFlags: sampled ? TRACE_FLAG_SAMPLED : TRACE_FLAG_NONE\n    };\n  }\n  /** @inheritdoc */\n  setAttribute(key, value) {\n    if (this._frozen) {\n      return this;\n    }\n    if (key === SENTRY_SEGMENT_NAME_SOURCE && value !== void 0 && !spanIsSegment(this)) {\n      DEBUG_BUILD && debug.warn(\"[Tracing] Ignoring name source on a child span: this attribute is only valid on the root span.\");\n      return this;\n    }\n    if (value === void 0) {\n      delete this._attributes[key];\n    } else {\n      this._attributes[key] = value;\n    }\n    return this;\n  }\n  /** @inheritdoc */\n  setAttributes(attributes) {\n    Object.keys(attributes).forEach((key) => this.setAttribute(key, attributes[key]));\n    return this;\n  }\n  /**\n   * This should generally not be used,\n   * but we need it for browser tracing where we want to adjust the start time afterwards.\n   * USE THIS WITH CAUTION!\n   *\n   * @hidden\n   * @internal\n   */\n  updateStartTime(timeInput) {\n    if (this._frozen) {\n      return;\n    }\n    this._startTime = spanTimeInputToSeconds(timeInput);\n    this._startPerformanceNow = void 0;\n  }\n  /**\n   * @inheritDoc\n   */\n  setStatus(value) {\n    if (this._frozen) {\n      return this;\n    }\n    this._status = value;\n    return this;\n  }\n  /**\n   * @inheritDoc\n   */\n  updateName(name) {\n    if (this._frozen) {\n      return this;\n    }\n    this._name = name;\n    INTERNAL_setSegmentNameSourceIfSegment(this, \"custom\");\n    return this;\n  }\n  /** @inheritdoc */\n  end(endTimestamp) {\n    if (this._endTime) {\n      return;\n    }\n    this._endTime = endTimestamp == null ? this._getEndTimeFromDuration() : spanTimeInputToSeconds(endTimestamp);\n    logSpanEnd(this);\n    this._onSpanEnded();\n    this._frozen = spanIsTracerProviderSpan(this);\n  }\n  /**\n   * Get JSON representation of this span.\n   *\n   * @hidden\n   * @internal This method is purely for internal purposes and should not be used outside\n   * of SDK code. If you need to get a JSON representation of a span,\n   * use `spanToJSON(span)` instead.\n   */\n  getStaticSpanJSON() {\n    return {\n      data: this._attributes,\n      description: this._name,\n      op: this._attributes[SENTRY_OP],\n      parent_span_id: this._parentSpanId,\n      span_id: this._spanId,\n      start_timestamp: this._startTime,\n      status: getStatusMessage(this._status),\n      timestamp: this._endTime,\n      trace_id: this._traceId,\n      origin: this._attributes[SENTRY_ORIGIN],\n      profile_id: this._attributes[SENTRY_PROFILE_ID],\n      exclusive_time: this._attributes[SENTRY_EXCLUSIVE_TIME],\n      measurements: timedEventsToMeasurements(this._events),\n      links: convertSpanLinksForEnvelope(this._links)\n    };\n  }\n  /**\n   * Get {@link StreamedSpanJSON} representation of this span.\n   *\n   * @hidden\n   * @internal This method is purely for internal purposes and should not be used outside\n   * of SDK code. If you need to get a JSON representation of a span,\n   * use `spanToJSON(span)` instead.\n   */\n  getSpanJSON() {\n    return {\n      name: this._name ?? \"\",\n      span_id: this._spanId,\n      trace_id: this._traceId,\n      parent_span_id: this._parentSpanId,\n      start_timestamp: this._startTime,\n      end_timestamp: this._endTime,\n      is_segment: spanIsSegment(this),\n      status: getSimpleStatus(this._status),\n      attributes: addStatusMessageAttribute(this._attributes, this._status),\n      links: getStreamedSpanLinks(this._links)\n    };\n  }\n  /** @inheritdoc */\n  isRecording() {\n    return !this._endTime && !!this._sampled;\n  }\n  /**\n   * @inheritdoc\n   */\n  addEvent(name, attributesOrStartTime, startTime) {\n    if (this._frozen) {\n      return this;\n    }\n    DEBUG_BUILD && debug.log(\"[Tracing] Adding an event to span:\", name);\n    const time = isSpanTimeInput(attributesOrStartTime) ? attributesOrStartTime : startTime || timestampInSeconds();\n    const attributes = isSpanTimeInput(attributesOrStartTime) ? {} : attributesOrStartTime || {};\n    const event = {\n      name,\n      time: spanTimeInputToSeconds(time),\n      attributes\n    };\n    this._events.push(event);\n    return this;\n  }\n  /**\n   * Whether this span is sent on its own (as a v2 streamed span) rather than as part of a\n   * transaction. Used internally; see `_isStandaloneSpan`.\n   * @internal\n   */\n  isStandaloneSpan() {\n    return !!this._isStandaloneSpan;\n  }\n  /**\n   * Returns the start time plus the `performance.now()` time since the span started.\n   *\n   * This way, the duration is correct even if the time origin was corrected while the span was running (e.g. after the\n   * device slept), and it can never be negative.\n   */\n  _getEndTimeFromDuration() {\n    const performanceNow = safePerformanceNow();\n    if (this._startPerformanceNow == null || performanceNow == null) {\n      return timestampInSeconds();\n    }\n    return this._startTime + (performanceNow - this._startPerformanceNow) / 1e3;\n  }\n  /** Emit `spanEnd` when the span is ended. */\n  _onSpanEnded() {\n    const client = getClient();\n    client?.emit(\"spanEnd\", this);\n    if (this._isStandaloneSpan) {\n      if (!client) return;\n      if (this._sampled) {\n        sendStandaloneSpan(this, client);\n        return;\n      }\n      DEBUG_BUILD && debug.log(\"[Tracing] Discarding standalone span because its trace was not chosen to be sampled.\");\n      return;\n    }\n    client?.emit(\"afterSpanEnd\", this);\n    const rootSpan = getRootSpan(this);\n    if (rootSpan !== this) {\n      const strategy2 = getSegmentSpanCaptureStrategy();\n      if (strategy2) {\n        const scope2 = getCapturedScopesOnSpan(this).scope || getCurrentScope();\n        strategy2.onChildSpanEnded(this, rootSpan, (options) => this._convertSpanToTransaction(options), scope2);\n      }\n      return;\n    }\n    if (client && hasSpanStreamingEnabled(client)) {\n      client.emit(\"afterSegmentSpanEnd\", this);\n      return;\n    }\n    const scope = getCapturedScopesOnSpan(this).scope || getCurrentScope();\n    const strategy = getSegmentSpanCaptureStrategy();\n    if (strategy) {\n      strategy.onSegmentSpanEnded((options) => this._convertSpanToTransaction(options), scope);\n    } else {\n      const transactionEvent = this._convertSpanToTransaction();\n      if (transactionEvent) {\n        scope.captureEvent(transactionEvent);\n      }\n    }\n  }\n  /**\n   * Finish the transaction & prepare the event to send to Sentry.\n   */\n  _convertSpanToTransaction(options = {}) {\n    if (!isFullFinishedSpan(spanToStaticSpanJSON(this))) {\n      return void 0;\n    }\n    if (!this._name) {\n      DEBUG_BUILD && debug.warn(\"Transaction has no name, falling back to `<unlabeled transaction>`.\");\n      this._name = \"<unlabeled transaction>\";\n    }\n    const { scope: capturedSpanScope, isolationScope: capturedSpanIsolationScope } = getCapturedScopesOnSpan(this);\n    const normalizedRequest = capturedSpanScope?.getScopeData().sdkProcessingMetadata?.normalizedRequest;\n    if (this._sampled !== true) {\n      return void 0;\n    }\n    options.onSpanCaptured?.(this);\n    const spans = [];\n    let droppedUnfinishedSpanCount = 0;\n    for (const descendant of getSpanDescendants(this)) {\n      if (descendant === this || isStandaloneSpan(descendant) || options.isSpanAlreadyCaptured?.(descendant)) {\n        continue;\n      }\n      const spanJSON = spanToStaticSpanJSON(descendant);\n      if (!isFullFinishedSpan(spanJSON)) {\n        if (!options.onSpanCaptured) {\n          droppedUnfinishedSpanCount++;\n        }\n        continue;\n      }\n      options.onSpanCaptured?.(descendant);\n      spans.push(spanJSON);\n    }\n    const client = capturedSpanScope?.getClient() || getClient();\n    if (droppedUnfinishedSpanCount) {\n      client?.recordDroppedEvent(\"invalid\", \"span\", droppedUnfinishedSpanCount);\n    }\n    if (spans.length > MAX_SPAN_COUNT) {\n      client?.recordDroppedEvent(\"buffer_overflow\", \"span\", spans.length - MAX_SPAN_COUNT);\n    }\n    const source = this._attributes[SENTRY_SEGMENT_NAME_SOURCE];\n    delete this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n    let hasGenAiSpans = false;\n    spans.forEach((span) => {\n      delete span.data[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n      if (span.op?.startsWith(\"gen_ai.\")) {\n        hasGenAiSpans = true;\n      }\n    });\n    const transaction = {\n      contexts: {\n        trace: spanToTransactionTraceContext(this)\n      },\n      spans: (\n        // spans.sort() mutates the array, but `spans` is already a copy so we can safely do this here\n        // we do not use spans anymore after this point\n        spans.length > MAX_SPAN_COUNT ? spans.sort((a, b) => a.start_timestamp - b.start_timestamp).slice(0, MAX_SPAN_COUNT) : spans\n      ),\n      start_timestamp: this._startTime,\n      timestamp: this._endTime,\n      transaction: this._name,\n      type: \"transaction\",\n      sdkProcessingMetadata: {\n        capturedSpanScope,\n        capturedSpanIsolationScope,\n        dynamicSamplingContext: getDynamicSamplingContextFromSpan(this),\n        hasGenAiSpans\n      },\n      request: normalizedRequest,\n      ...source && {\n        transaction_info: {\n          source\n        }\n      }\n    };\n    const measurements = timedEventsToMeasurements(this._events);\n    const hasMeasurements = measurements && Object.keys(measurements).length;\n    if (hasMeasurements) {\n      DEBUG_BUILD && debug.log(\n        \"[Measurements] Adding measurements to transaction event\",\n        JSON.stringify(measurements, void 0, 2)\n      );\n      transaction.measurements = measurements;\n    }\n    return transaction;\n  }\n}\nfunction isSpanTimeInput(value) {\n  return value && typeof value === \"number\" || value instanceof Date || Array.isArray(value);\n}\nfunction isFullFinishedSpan(input) {\n  return !!input.start_timestamp && !!input.timestamp && !!input.span_id && !!input.trace_id;\n}\nfunction isStandaloneSpan(span) {\n  return span instanceof SentrySpan && span.isStandaloneSpan();\n}\nfunction sendStandaloneSpan(span, client) {\n  const { beforeSendSpan, traceLifecycle } = client.getOptions();\n  if (traceLifecycle === \"static\" && isStaticBeforeSendSpanCallback(beforeSendSpan)) {\n    const serializedSpan2 = captureStandaloneSpanWithStaticCallback(span, client, beforeSendSpan);\n    const dsc2 = getDynamicSamplingContextFromSpan(span);\n    client.sendEnvelope(createStreamedSpanEnvelope([serializedSpan2], dsc2, client));\n    return;\n  }\n  const { _segmentSpan, ...serializedSpan } = captureSpan(span, client);\n  const dsc = getDynamicSamplingContextFromSpan(_segmentSpan);\n  client.sendEnvelope(createStreamedSpanEnvelope([serializedSpan], dsc, client));\n}\n\nexport { SentrySpan };\n//# sourceMappingURL=sentrySpan.js.map\n","import { getAsyncContextStrategy } from '../asyncContext/index.js';\nimport { getMainCarrier } from '../carrier.js';\nimport { getClient, withScope, getCurrentScope, getIsolationScope } from '../currentScopes.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { SENTRY_OP, SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '../semanticAttributes.js';\nimport { baggageHeaderToDynamicSamplingContext } from '../utils/baggage.js';\nimport { debug } from '../utils/debug-logger.js';\nimport { handleCallbackErrors } from '../utils/handleCallbackErrors.js';\nimport { recordEscapedErrorSpan } from '../utils/errorSpanAttribution.js';\nimport { hasSpansEnabled } from '../utils/hasSpansEnabled.js';\nimport { shouldIgnoreSpan } from '../utils/should-ignore-span.js';\nimport { hasSpanStreamingEnabled } from './spans/hasSpanStreamingEnabled.js';\nimport { parseSampleRate } from '../utils/parseSampleRate.js';\nimport { generateTraceId } from '../utils/propagationContext.js';\nimport { safeMathRandom } from '../utils/randomSafeContext.js';\nimport { _setSpanForScope } from '../utils/spanOnScope.js';\nimport { spanTimeInputToSeconds, addChildSpanToSpan, spanIsSampled, getActiveSpan, getRootSpan, spanToStaticSpanJSON } from '../utils/spanUtils.js';\nimport { shouldContinueTrace, propagationContextFromHeaders } from '../utils/tracing.js';\nimport { getDynamicSamplingContextFromSpan, freezeDscOnSpan } from './dynamicSamplingContext.js';\nimport { logSpanStart } from './logSpans.js';\nimport { sampleSpan } from './sampling.js';\nimport { spanIsNonRecordingSpan, SentryNonRecordingSpan } from './sentryNonRecordingSpan.js';\nimport { SentrySpan } from './sentrySpan.js';\nimport { SPAN_STATUS_ERROR } from './spanstatus.js';\nimport { setCapturedScopesOnSpan, getCapturedScopesOnSpan } from './utils.js';\nimport { SUPPRESS_TRACING_KEY } from './constants.js';\n\nfunction startSpan(options, callback) {\n  const spanArguments = parseSentrySpanArguments(options);\n  const { forceTransaction, parentSpan: customParentSpan, scope: customScope } = options;\n  const customForkedScope = customScope?.clone();\n  return withScope(customForkedScope, () => {\n    const wrapper = getActiveSpanWrapper(customParentSpan);\n    return wrapper(() => {\n      const scope = getCurrentScope();\n      const parentSpan = getParentSpan(customScope ?? scope, customParentSpan);\n      const client = getClient();\n      const missingRequiredParent = options.onlyIfParent && !parentSpan;\n      const activeSpan = missingRequiredParent ? startMissingRequiredParentSpan(scope, client) : createChildOrRootSpan({\n        parentSpan,\n        spanArguments,\n        forceTransaction,\n        scope\n      });\n      const makeSpanActive = !spanIsIgnored(activeSpan) || !parentSpan;\n      return runCallback(\n        activeSpan,\n        makeSpanActive,\n        () => callback(activeSpan),\n        () => activeSpan.end()\n      );\n    });\n  });\n}\nfunction startSpanManual(options, callback) {\n  const spanArguments = parseSentrySpanArguments(options);\n  const { forceTransaction, parentSpan: customParentSpan, scope: customScope } = options;\n  const customForkedScope = customScope?.clone();\n  return withScope(customForkedScope, () => {\n    const wrapper = getActiveSpanWrapper(customParentSpan);\n    return wrapper(() => {\n      const scope = getCurrentScope();\n      const parentSpan = getParentSpan(customScope ?? scope, customParentSpan);\n      const missingRequiredParent = options.onlyIfParent && !parentSpan;\n      const activeSpan = missingRequiredParent ? startMissingRequiredParentSpan(scope, getClient()) : createChildOrRootSpan({\n        parentSpan,\n        spanArguments,\n        forceTransaction,\n        scope\n      });\n      const makeSpanActive = !spanIsIgnored(activeSpan) || !parentSpan;\n      return runCallback(activeSpan, makeSpanActive, () => callback(activeSpan, () => activeSpan.end()));\n    });\n  });\n}\nfunction startInactiveSpan(options) {\n  const spanArguments = parseSentrySpanArguments(options);\n  const { forceTransaction, parentSpan: customParentSpan, scope: customScope } = options;\n  const wrapper = customScope ? (callback) => withScope(customScope, callback) : customParentSpan !== void 0 ? (callback) => withActiveSpan(customParentSpan, callback) : (callback) => callback();\n  return wrapper(() => {\n    const scope = getCurrentScope();\n    const parentSpan = getParentSpan(customScope ?? scope, customParentSpan);\n    const client = getClient();\n    const missingRequiredParent = options.onlyIfParent && !parentSpan;\n    if (missingRequiredParent) {\n      return startMissingRequiredParentSpan(scope, client);\n    }\n    return createChildOrRootSpan({\n      parentSpan,\n      spanArguments,\n      forceTransaction,\n      scope\n    });\n  });\n}\nconst continueTrace = (options, callback) => {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n  if (acs.continueTrace) {\n    return acs.continueTrace(options, callback);\n  }\n  const { sentryTrace, baggage } = options;\n  const client = getClient();\n  const incomingDsc = baggageHeaderToDynamicSamplingContext(baggage);\n  if (client && !shouldContinueTrace(client, incomingDsc?.org_id)) {\n    return startNewTrace(callback);\n  }\n  return withScope((scope) => {\n    const propagationContext = propagationContextFromHeaders(sentryTrace, baggage);\n    scope.setPropagationContext(propagationContext);\n    return withActiveSpan(null, callback);\n  });\n};\nfunction withActiveSpan(span, callback) {\n  const acs = getAcs();\n  if (acs.withActiveSpan) {\n    return acs.withActiveSpan(span, callback);\n  }\n  return withScope((scope) => {\n    _setSpanForScope(scope, span || void 0);\n    return callback(scope);\n  });\n}\nfunction suppressTracing(callback) {\n  const acs = getAcs();\n  if (acs.suppressTracing) {\n    return acs.suppressTracing(callback);\n  }\n  return withScope((scope) => {\n    scope.setSDKProcessingMetadata({ [SUPPRESS_TRACING_KEY]: true });\n    return callback();\n  });\n}\nfunction isTracingSuppressed(scope = getCurrentScope()) {\n  const acs = getAcs();\n  if (acs.isTracingSuppressed) {\n    return acs.isTracingSuppressed(scope);\n  }\n  return scope.getScopeData().sdkProcessingMetadata[SUPPRESS_TRACING_KEY] === true;\n}\nfunction startNewTrace(callback) {\n  const acs = getAcs();\n  if (acs.startNewTrace) {\n    return acs.startNewTrace(callback);\n  }\n  return withActiveSpan(null, () => {\n    return withScope((scope) => {\n      scope.setPropagationContext({\n        traceId: generateTraceId(),\n        sampleRand: safeMathRandom()\n      });\n      DEBUG_BUILD && debug.log(`Starting a new trace with id ${scope.getPropagationContext().traceId}`);\n      return callback();\n    });\n  });\n}\nfunction startMissingRequiredParentSpan(scope, client) {\n  client?.recordDroppedEvent(\"no_parent_span\", \"span\");\n  const span = new SentryNonRecordingSpan({\n    dropReason: \"no_parent_span\",\n    traceId: scope.getPropagationContext().traceId\n  });\n  setCapturedScopesOnSpan(span, scope, getIsolationScope());\n  return span;\n}\nfunction createChildOrRootSpan({\n  parentSpan: resolvedParentSpan,\n  spanArguments,\n  forceTransaction,\n  scope: currentScope\n}) {\n  const isolationScope = getIsolationScope();\n  const spanScope = {\n    scope: currentScope,\n    parentSpan: resolvedParentSpan\n  };\n  getClient()?.emit(\"prepareSpanScope\", spanScope);\n  const { scope, parentSpan } = spanScope;\n  if (!hasSpansEnabled()) {\n    const scopePropagationContext = scope.getPropagationContext();\n    const traceId = parentSpan ? parentSpan.spanContext().traceId : scopePropagationContext.traceId;\n    const span2 = new SentryNonRecordingSpan({ traceId });\n    if (parentSpan && !forceTransaction) {\n      addChildSpanToSpan(parentSpan, span2);\n    }\n    setCapturedScopesOnSpan(span2, scope, isolationScope);\n    return span2;\n  }\n  const client = getClient();\n  if (_shouldIgnoreStreamedSpan(client, spanArguments)) {\n    if (!isTracingSuppressed(scope)) {\n      client?.recordDroppedEvent(\"ignored\", \"span\");\n    }\n    const ignoredSpan = new SentryNonRecordingSpan({\n      dropReason: \"ignored\",\n      traceId: parentSpan?.spanContext().traceId ?? scope.getPropagationContext().traceId\n    });\n    if (parentSpan && !forceTransaction) {\n      addChildSpanToSpan(parentSpan, ignoredSpan);\n    }\n    setCapturedScopesOnSpan(ignoredSpan, scope, isolationScope);\n    return ignoredSpan;\n  }\n  let span;\n  if (parentSpan && !forceTransaction) {\n    span = _startChildSpan(parentSpan, scope, spanArguments, isolationScope);\n    addChildSpanToSpan(parentSpan, span);\n  } else if (parentSpan) {\n    const dsc = getDynamicSamplingContextFromSpan(parentSpan);\n    const { traceId, spanId: parentSpanId } = parentSpan.spanContext();\n    const parentSampled = spanIsSampled(parentSpan);\n    span = _startRootSpan(\n      {\n        traceId,\n        parentSpanId,\n        ...spanArguments\n      },\n      scope,\n      isolationScope,\n      parentSampled\n    );\n    freezeDscOnSpan(span, dsc);\n  } else {\n    const { traceId, dsc, parentSpanId, sampled: parentSampled, sampleRand } = scope.getPropagationContext();\n    span = _startRootSpan(\n      {\n        traceId,\n        parentSpanId,\n        ...spanArguments\n      },\n      scope,\n      isolationScope,\n      parentSampled\n    );\n    if (dsc) {\n      const dscWithSampleRand = Object.keys(dsc).length === 0 && sampleRand !== void 0 ? { sample_rand: sampleRand.toString() } : dsc;\n      freezeDscOnSpan(span, dscWithSampleRand);\n    }\n  }\n  logSpanStart(span);\n  return span;\n}\nfunction parseSentrySpanArguments(options) {\n  const initialCtx = {\n    // TODO(standalone): remove once the static (transaction) trace lifecycle is dropped.\n    // oxlint-disable-next-line typescript/no-deprecated\n    isStandalone: options.experimental?.standalone,\n    ...options\n  };\n  if (options.op) {\n    initialCtx.attributes = {\n      [SENTRY_OP]: options.op,\n      ...options.attributes\n    };\n  }\n  if (options.startTime) {\n    const ctx = { ...initialCtx };\n    ctx.startTimestamp = spanTimeInputToSeconds(options.startTime);\n    delete ctx.startTime;\n    return ctx;\n  }\n  return initialCtx;\n}\nfunction getAcs() {\n  const carrier = getMainCarrier();\n  return getAsyncContextStrategy(carrier);\n}\nfunction _startRootSpan(spanArguments, scope, isolationScope, parentSampled) {\n  const client = getClient();\n  const options = client?.getOptions() || {};\n  const { name = \"\" } = spanArguments;\n  const mutableSpanSamplingData = { spanAttributes: { ...spanArguments.attributes }, spanName: name, parentSampled };\n  client?.emit(\"beforeSampling\", mutableSpanSamplingData, { decision: false });\n  const finalParentSampled = mutableSpanSamplingData.parentSampled ?? parentSampled;\n  const finalAttributes = mutableSpanSamplingData.spanAttributes;\n  const currentPropagationContext = scope.getPropagationContext();\n  const _isTracingSuppressed = isTracingSuppressed(scope);\n  const [sampled, sampleRate, localSampleRateWasApplied, dropReason] = _isTracingSuppressed ? [false] : sampleSpan(\n    options,\n    {\n      name,\n      parentSampled: finalParentSampled,\n      attributes: finalAttributes,\n      normalizedRequest: isolationScope.getScopeData().sdkProcessingMetadata.normalizedRequest,\n      parentSampleRate: parseSampleRate(currentPropagationContext.dsc?.sample_rate)\n    },\n    currentPropagationContext.sampleRand\n  );\n  const rootSpan = new SentrySpan({\n    ...spanArguments,\n    attributes: {\n      [SENTRY_SEGMENT_NAME_SOURCE]: \"custom\",\n      [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: sampleRate !== void 0 && localSampleRateWasApplied ? sampleRate : void 0,\n      ...finalAttributes\n    },\n    sampled\n  });\n  if (!sampled && client && !_isTracingSuppressed) {\n    DEBUG_BUILD && debug.log(\"[Tracing] Discarding root span because its trace was not chosen to be sampled.\");\n    const outcomeReason = dropReason || \"sample_rate\";\n    if (!hasSpanStreamingEnabled(client) && !spanArguments.isStandalone) {\n      client.recordDroppedEvent(outcomeReason, \"transaction\");\n    }\n    client.recordDroppedEvent(outcomeReason, \"span\");\n  }\n  setCapturedScopesOnSpan(rootSpan, scope, isolationScope);\n  if (client) {\n    client.emit(\"spanStart\", rootSpan);\n  }\n  return rootSpan;\n}\nfunction _startChildSpan(parentSpan, scope, spanArguments, isolationScope) {\n  const { spanId, traceId } = parentSpan.spanContext();\n  const _isTracingSuppressed = isTracingSuppressed(scope);\n  const sampled = _isTracingSuppressed ? false : spanIsSampled(parentSpan);\n  const childSpan = sampled ? new SentrySpan({\n    ...spanArguments,\n    parentSpanId: spanId,\n    traceId,\n    sampled\n  }) : new SentryNonRecordingSpan({ traceId });\n  addChildSpanToSpan(parentSpan, childSpan);\n  setCapturedScopesOnSpan(childSpan, scope, isolationScope);\n  const client = getClient();\n  if (!client) {\n    return childSpan;\n  }\n  if (spanIsNonRecordingSpan(childSpan)) {\n    if (spanIsNonRecordingSpan(parentSpan) && parentSpan.dropReason) {\n      childSpan.dropReason = parentSpan.dropReason;\n      client.recordDroppedEvent(parentSpan.dropReason, \"span\");\n    } else if (!_isTracingSuppressed) {\n      childSpan.dropReason = \"sample_rate\";\n      client.recordDroppedEvent(\"sample_rate\", \"span\");\n    }\n  }\n  client.emit(\"spanStart\", childSpan);\n  return childSpan;\n}\nfunction getParentSpan(scope, customParentSpan) {\n  if (customParentSpan) {\n    return customParentSpan;\n  }\n  if (customParentSpan === null) {\n    return void 0;\n  }\n  const span = getActiveSpan(scope);\n  if (!span) {\n    return void 0;\n  }\n  const client = getClient();\n  const options = client ? client.getOptions() : {};\n  if (options.parentSpanIsAlwaysRootSpan) {\n    return getRootSpan(span);\n  }\n  return span;\n}\nfunction getActiveSpanWrapper(parentSpan) {\n  return parentSpan !== void 0 ? (callback) => {\n    return withActiveSpan(parentSpan, callback);\n  } : (callback) => callback();\n}\nfunction _shouldIgnoreStreamedSpan(client, spanArguments) {\n  const ignoreSpans = client?.getOptions().ignoreSpans;\n  if (!client || !hasSpanStreamingEnabled(client) || !ignoreSpans?.length) {\n    return false;\n  }\n  return shouldIgnoreSpan(\n    {\n      description: spanArguments.name || \"\",\n      op: spanArguments.attributes?.[SENTRY_OP] || spanArguments.op,\n      attributes: spanArguments.attributes\n    },\n    ignoreSpans\n  );\n}\nfunction spanIsIgnored(span) {\n  return spanIsNonRecordingSpan(span) && span.dropReason === \"ignored\";\n}\nfunction runCallback(span, makeSpanActive, callback, finallyCallback) {\n  const wrapper = makeSpanActive ? (callback2) => {\n    return withActiveSpan(span, () => {\n      const scope = getCurrentScope();\n      const creationScope = getCapturedScopesOnSpan(span).scope;\n      if (creationScope) {\n        scope.setPropagationContext(creationScope.getPropagationContext());\n      }\n      setCapturedScopesOnSpan(span, scope, getIsolationScope());\n      return callback2();\n    });\n  } : (callback2) => callback2();\n  return wrapper(\n    () => handleCallbackErrors(\n      () => callback(),\n      (error) => {\n        recordEscapedErrorSpan(error, span);\n        const { status } = spanToStaticSpanJSON(span);\n        if (span.isRecording() && status === \"ok\") {\n          span.setStatus({ code: SPAN_STATUS_ERROR, message: \"internal_error\" });\n        }\n      },\n      finallyCallback\n    )\n  );\n}\n\nexport { continueTrace, isTracingSuppressed, spanIsIgnored, startInactiveSpan, startNewTrace, startSpan, startSpanManual, suppressTracing, withActiveSpan };\n//# sourceMappingURL=trace.js.map\n","import { getClient } from '../currentScopes.js';\nimport { spanStreamingIntegration } from '../integrations/spanStreaming.js';\nimport { hasSpanStreamingEnabled } from './spans/hasSpanStreamingEnabled.js';\nimport { startInactiveSpan as startInactiveSpan$1, startSpan as startSpan$1, startSpanManual as startSpanManual$1 } from './trace.js';\n\nconst clientsWithIntegration = /* @__PURE__ */ new WeakSet();\nfunction _INTERNAL_ensureBrowserSpanStreaming(client = getClient()) {\n  if (!client || clientsWithIntegration.has(client) || !hasSpanStreamingEnabled(client)) {\n    return;\n  }\n  clientsWithIntegration.add(client);\n  client.addIntegration(spanStreamingIntegration());\n}\nfunction startSpan(options, callback) {\n  _INTERNAL_ensureBrowserSpanStreaming();\n  return startSpan$1(options, callback);\n}\nfunction startSpanManual(options, callback) {\n  _INTERNAL_ensureBrowserSpanStreaming();\n  return startSpanManual$1(options, callback);\n}\nfunction startInactiveSpan(options) {\n  _INTERNAL_ensureBrowserSpanStreaming();\n  return startInactiveSpan$1(options);\n}\n\nexport { _INTERNAL_ensureBrowserSpanStreaming, startInactiveSpan, startSpan, startSpanManual };\n//# sourceMappingURL=browserSpanApi.js.map\n","import { SENTRY_IDLE_SPAN_FINISH_REASON } from '@sentry/conventions/attributes';\nimport { getClient, getCurrentScope, getIsolationScope } from '../currentScopes.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from '../utils/debug-logger.js';\nimport { hasSpansEnabled } from '../utils/hasSpansEnabled.js';\nimport { shouldIgnoreSpan } from '../utils/should-ignore-span.js';\nimport { _setSpanForScope } from '../utils/spanOnScope.js';\nimport { getActiveSpan, spanTimeInputToSeconds, getSpanDescendants, spanToStaticSpanJSON, removeChildSpanFromSpan, spanToJSON } from '../utils/spanUtils.js';\nimport { timestampInSeconds } from '../utils/time.js';\nimport { _INTERNAL_ensureBrowserSpanStreaming } from './browserSpanApi.js';\nimport { SentryNonRecordingSpan, spanIsNonRecordingSpan } from './sentryNonRecordingSpan.js';\nimport { SentrySpan } from './sentrySpan.js';\nimport { SPAN_STATUS_OK, SPAN_STATUS_ERROR } from './spanstatus.js';\nimport { startInactiveSpan } from './trace.js';\nimport { setCapturedScopesOnSpan } from './utils.js';\n\nconst TRACING_DEFAULTS = {\n  idleTimeout: 1e3,\n  finalTimeout: 3e4,\n  childSpanTimeout: 15e3\n};\nconst FINISH_REASON_HEARTBEAT_FAILED = \"heartbeatFailed\";\nconst FINISH_REASON_IDLE_TIMEOUT = \"idleTimeout\";\nconst FINISH_REASON_FINAL_TIMEOUT = \"finalTimeout\";\nconst FINISH_REASON_EXTERNAL_FINISH = \"externalFinish\";\nfunction startIdleSpan(startSpanOptions, options = {}) {\n  const client = getClient();\n  _INTERNAL_ensureBrowserSpanStreaming(client);\n  const activities = /* @__PURE__ */ new Map();\n  let _finished = false;\n  let _idleTimeoutID;\n  let _childSpanTimeoutID;\n  let _finishReason = FINISH_REASON_EXTERNAL_FINISH;\n  let _autoFinishAllowed = !options.disableAutoFinish;\n  const _cleanupHooks = [];\n  const {\n    idleTimeout = TRACING_DEFAULTS.idleTimeout,\n    finalTimeout = TRACING_DEFAULTS.finalTimeout,\n    childSpanTimeout = TRACING_DEFAULTS.childSpanTimeout,\n    trimIdleSpanEndTimestamp = true\n  } = options;\n  const scope = getCurrentScope();\n  if (!client || !hasSpansEnabled()) {\n    const span2 = new SentryNonRecordingSpan({ traceId: scope.getPropagationContext().traceId });\n    setCapturedScopesOnSpan(span2, scope, getIsolationScope());\n    return span2;\n  }\n  const previousActiveSpan = getActiveSpan();\n  const span = startInactiveSpan(startSpanOptions);\n  _setSpanForScope(getCurrentScope(), span);\n  DEBUG_BUILD && debug.log(\"[Tracing] Started span is an idle span\");\n  span.end = new Proxy(span.end, {\n    apply(target, thisArg, args) {\n      client.emit(\"beforeIdleSpanEnd\", span);\n      if (spanIsNonRecordingSpan(thisArg)) {\n        return;\n      }\n      const [definedEndTimestamp, ...rest] = args;\n      const timestamp = definedEndTimestamp || timestampInSeconds();\n      const spanEndTimestamp = spanTimeInputToSeconds(timestamp);\n      const spans = getSpanDescendants(span).filter((child) => child !== span);\n      const spanJson = spanToStaticSpanJSON(span);\n      if (!spans.length || !trimIdleSpanEndTimestamp) {\n        onIdleSpanEnded(spanEndTimestamp);\n        return Reflect.apply(target, thisArg, [spanEndTimestamp, ...rest]);\n      }\n      const ignoreSpans = client.getOptions().ignoreSpans;\n      const latestSpanEndTimestamp = spans?.reduce((acc, current) => {\n        const currentSpanJson = spanToStaticSpanJSON(current);\n        if (!currentSpanJson.timestamp) {\n          return acc;\n        }\n        if (ignoreSpans && shouldIgnoreSpan(\n          { description: currentSpanJson.description, op: currentSpanJson.op, attributes: currentSpanJson.data },\n          ignoreSpans\n        )) {\n          return acc;\n        }\n        return acc ? Math.max(acc, currentSpanJson.timestamp) : currentSpanJson.timestamp;\n      }, void 0);\n      const spanStartTimestamp = spanJson.start_timestamp;\n      const endTimestamp = Math.min(\n        spanStartTimestamp ? spanStartTimestamp + finalTimeout / 1e3 : Infinity,\n        Math.max(spanStartTimestamp || -Infinity, Math.min(spanEndTimestamp, latestSpanEndTimestamp || Infinity))\n      );\n      onIdleSpanEnded(endTimestamp);\n      return Reflect.apply(target, thisArg, [endTimestamp, ...rest]);\n    }\n  });\n  function _cancelIdleTimeout() {\n    if (_idleTimeoutID) {\n      clearTimeout(_idleTimeoutID);\n      _idleTimeoutID = void 0;\n    }\n  }\n  function _cancelChildSpanTimeout() {\n    if (_childSpanTimeoutID) {\n      clearTimeout(_childSpanTimeoutID);\n      _childSpanTimeoutID = void 0;\n    }\n  }\n  function _restartIdleTimeout(endTimestamp) {\n    _cancelIdleTimeout();\n    _idleTimeoutID = setTimeout(() => {\n      if (!_finished && activities.size === 0 && _autoFinishAllowed) {\n        _finishReason = FINISH_REASON_IDLE_TIMEOUT;\n        span.end(endTimestamp);\n      }\n    }, idleTimeout);\n  }\n  function _restartChildSpanTimeout(endTimestamp) {\n    _cancelChildSpanTimeout();\n    _childSpanTimeoutID = setTimeout(() => {\n      if (!_finished && _autoFinishAllowed) {\n        _finishReason = FINISH_REASON_HEARTBEAT_FAILED;\n        span.end(endTimestamp);\n      }\n    }, childSpanTimeout);\n  }\n  function _pushActivity(spanId) {\n    _cancelIdleTimeout();\n    activities.set(spanId, true);\n    const endTimestamp = timestampInSeconds();\n    _restartChildSpanTimeout(endTimestamp + childSpanTimeout / 1e3);\n  }\n  function _popActivity(spanId) {\n    if (activities.has(spanId)) {\n      activities.delete(spanId);\n    }\n    if (activities.size === 0) {\n      const endTimestamp = timestampInSeconds();\n      _restartIdleTimeout(endTimestamp + idleTimeout / 1e3);\n      _cancelChildSpanTimeout();\n    }\n  }\n  function onIdleSpanEnded(endTimestamp) {\n    _finished = true;\n    activities.clear();\n    _cleanupHooks.forEach((cleanup) => cleanup());\n    _setSpanForScope(scope, previousActiveSpan);\n    const spanJSON = spanToStaticSpanJSON(span);\n    const { start_timestamp: startTimestamp } = spanJSON;\n    if (!startTimestamp) {\n      return;\n    }\n    const attributes = spanJSON.data;\n    if (!attributes[SENTRY_IDLE_SPAN_FINISH_REASON]) {\n      span.setAttribute(SENTRY_IDLE_SPAN_FINISH_REASON, _finishReason);\n    }\n    const currentStatus = spanJSON.status;\n    if (!currentStatus || currentStatus === \"unknown\") {\n      span.setStatus({ code: SPAN_STATUS_OK });\n    }\n    debug.log(`[Tracing] Idle span \"${spanJSON.op}\" finished`);\n    const childSpans = getSpanDescendants(span).filter((child) => child !== span);\n    let discardedSpans = 0;\n    childSpans.forEach((childSpan) => {\n      if (childSpan.isRecording()) {\n        childSpan.setStatus({ code: SPAN_STATUS_ERROR, message: \"cancelled\" });\n        childSpan.end(endTimestamp);\n        DEBUG_BUILD && debug.log(\"[Tracing] Cancelling span since span ended early\", JSON.stringify(childSpan, void 0, 2));\n      }\n      const childSpanJSON = spanToStaticSpanJSON(childSpan);\n      const { timestamp: childEndTimestamp = 0, start_timestamp: childStartTimestamp = 0 } = childSpanJSON;\n      const spanStartedBeforeIdleSpanEnd = childStartTimestamp <= endTimestamp;\n      const timeoutWithMarginOfError = (finalTimeout + idleTimeout) / 1e3;\n      const spanEndedBeforeFinalTimeout = childEndTimestamp - childStartTimestamp <= timeoutWithMarginOfError;\n      if (DEBUG_BUILD) {\n        const stringifiedSpan = JSON.stringify(childSpan, void 0, 2);\n        if (!spanStartedBeforeIdleSpanEnd) {\n          debug.log(\"[Tracing] Discarding span since it happened after idle span was finished\", stringifiedSpan);\n        } else if (!spanEndedBeforeFinalTimeout) {\n          debug.log(\"[Tracing] Discarding span since it finished after idle span final timeout\", stringifiedSpan);\n        }\n      }\n      if (!spanEndedBeforeFinalTimeout || !spanStartedBeforeIdleSpanEnd) {\n        removeChildSpanFromSpan(span, childSpan);\n        discardedSpans++;\n      }\n    });\n    if (discardedSpans > 0) {\n      span.setAttribute(\"sentry.idle_span_discarded_spans\", discardedSpans);\n    }\n  }\n  _cleanupHooks.push(\n    client.on(\"spanStart\", (startedSpan) => {\n      if (_finished || startedSpan === span || !!spanToJSON(startedSpan).end_timestamp || startedSpan instanceof SentrySpan && startedSpan.isStandaloneSpan()) {\n        return;\n      }\n      const allSpans = getSpanDescendants(span);\n      if (allSpans.includes(startedSpan)) {\n        _pushActivity(startedSpan.spanContext().spanId);\n      }\n    })\n  );\n  _cleanupHooks.push(\n    client.on(\"spanEnd\", (endedSpan) => {\n      if (_finished) {\n        return;\n      }\n      _popActivity(endedSpan.spanContext().spanId);\n    })\n  );\n  _cleanupHooks.push(\n    client.on(\"idleSpanEnableAutoFinish\", (spanToAllowAutoFinish) => {\n      if (spanToAllowAutoFinish === span) {\n        _autoFinishAllowed = true;\n        _restartIdleTimeout();\n        if (activities.size) {\n          _restartChildSpanTimeout();\n        }\n      }\n    })\n  );\n  if (!options.disableAutoFinish) {\n    _restartIdleTimeout();\n  }\n  setTimeout(() => {\n    if (!_finished) {\n      span.setStatus({ code: SPAN_STATUS_ERROR, message: \"deadline_exceeded\" });\n      _finishReason = FINISH_REASON_FINAL_TIMEOUT;\n      span.end();\n    }\n  }, finalTimeout);\n  return span;\n}\n\nexport { TRACING_DEFAULTS, startIdleSpan };\n//# sourceMappingURL=idleSpan.js.map\n","function debounce(func, wait, options) {\n  let callbackReturnValue;\n  let timerId;\n  let maxTimerId;\n  const maxWait = options?.maxWait ? Math.max(options.maxWait, wait) : 0;\n  const setTimeoutImpl = options?.setTimeoutImpl || setTimeout;\n  function invokeFunc() {\n    cancelTimers();\n    callbackReturnValue = func();\n    return callbackReturnValue;\n  }\n  function cancelTimers() {\n    timerId !== void 0 && clearTimeout(timerId);\n    maxTimerId !== void 0 && clearTimeout(maxTimerId);\n    timerId = maxTimerId = void 0;\n  }\n  function flush() {\n    if (timerId !== void 0 || maxTimerId !== void 0) {\n      return invokeFunc();\n    }\n    return callbackReturnValue;\n  }\n  function debounced() {\n    if (timerId) {\n      clearTimeout(timerId);\n    }\n    timerId = setTimeoutImpl(invokeFunc, wait);\n    if (maxWait && maxTimerId === void 0) {\n      maxTimerId = setTimeoutImpl(invokeFunc, maxWait);\n    }\n    return callbackReturnValue;\n  }\n  debounced.cancel = cancelTimers;\n  debounced.flush = flush;\n  return debounced;\n}\n\nexport { debounce };\n//# sourceMappingURL=debounce.js.map\n","const e=\"pageload\",E=\"navigation\",_=\"navigation.redirect\",r=\"resource\",R=\"resource.script\",t=\"resource.link\",T=\"resource.img\",u=\"resource.css\",U=\"resource.audio\",i=\"resource.video\",I=\"resource.iframe\",o=\"resource.other\",O=\"resource.worker\",a=\"resource.icon\",A=\"resource.frame\",c=\"resource.object\",C=\"resource.ping\",n=\"resource.track\",N=\"browser\",s=\"browser.paint\",S=\"browser.unload_event\",l=\"browser.redirect\",L=\"browser.dom_content_loaded_event\",p=\"browser.load_event\",P=\"browser.connect\",d=\"browser.tls_ssl\",D=\"browser.cache\",b=\"browser.dns\",B=\"browser.request\",m=\"browser.response\",M=\"ui\",g=\"ui.task\",G=\"ui.resolve\",v=\"ui.render\",V=\"ui.mount\",q=\"ui.update\",w=\"ui.unmount\",Q=\"ui.long_task\",W=\"ui.long_animation_frame\",h=\"ui.interaction.click\",H=\"ui.interaction.hover\",k=\"ui.interaction.drag\",K=\"ui.interaction.press\",f=\"ui.webvital.lcp\",F=\"ui.webvital.cls\",j=\"ui.action\",J=\"ui.action.click\",y=\"ui.react\",Y=\"ui.react.mount\",x=\"ui.react.render\",X=\"ui.react.update\",z=\"ui.vue\",Z=\"ui.svelte\",$=\"ui.angular\",ee=\"ui.ember\",Ee=\"ui.livewire\",_e=\"db\",re=\"db.query\",Re=\"cache\",te=\"cache.get\",Te=\"cache.put\",ue=\"cache.remove\",Ue=\"grpc\",ie=\"function.gcp\",Ie=\"function.aws\",oe=\"function.azure\",Oe=\"gen_ai.chat\",ae=\"gen_ai.execute_tool\",Ae=\"gen_ai.handoff\",ce=\"gen_ai.invoke_agent\",Ce=\"gen_ai.embeddings\",ne=\"gen_ai.generate_content\",Ne=\"gen_ai.rerank\",se=\"gen_ai.decide\",Se=\"gen_ai.evaluate\",le=\"gen_ai.create_agent\",Le=\"gen_ai.responses\",pe=\"gen_ai.text_completion\",Pe=\"gen_ai.memory.client\",de=\"mark\",De=\"function\",be=\"measure\",Be=\"mcp.server\",me=\"mcp.notification.client_to_server\",Me=\"mcp.notification.server_to_client\",ge=\"queue\",Ge=\"queue.publish\",ve=\"queue.create\",Ve=\"queue.receive\",qe=\"queue.process\",we=\"queue.settle\",Qe=\"queue.submit.arq\",We=\"queue.task.arq\",he=\"queue.submit.celery\",He=\"queue.task.celery\",ke=\"queue.task.dramatiq\",Ke=\"queue.submit.huey\",fe=\"queue.task.huey\",Fe=\"queue.task.rq\",je=\"app\",Je=\"app.update.check\",ye=\"app.update.download\",Ye=\"file\",xe=\"serialize\",Xe=\"turbo_module\",ze=\"object.get\",Ze=\"object.head\",$e=\"object.put\",eE=\"object.delete\",EE=\"object.list\",_E=\"object.upload_part\",rE=\"object.multipart_upload.abort\",RE=\"object.multipart_upload.create\",tE=\"object.multipart_upload.complete\",TE=\"router\",uE=\"http\",UE=\"http.client\",iE=\"http.client.stream\",IE=\"http.server\",oE=\"websocket\",OE=\"rpc\",aE=\"graphql\",AE=\"subprocess\",cE=\"middleware\",CE=\"handler\",nE=\"view\",NE=\"template\",sE=\"function.remix\",SE=\"function.nextjs\",lE=\"console\";export{je as APP,Je as APP_UPDATE_CHECK,ye as APP_UPDATE_DOWNLOAD,N as BROWSER,D as BROWSER_CACHE,P as BROWSER_CONNECT,b as BROWSER_DNS,L as BROWSER_DOM_CONTENT_LOADED_EVENT,p as BROWSER_LOAD_EVENT,s as BROWSER_PAINT,l as BROWSER_REDIRECT,B as BROWSER_REQUEST,m as BROWSER_RESPONSE,d as BROWSER_TLS_SSL,S as BROWSER_UNLOAD_EVENT,Re as CACHE,te as CACHE_GET,Te as CACHE_PUT,ue as CACHE_REMOVE,lE as CONSOLE,_e as DB,re as DB_QUERY,Ye as FILE,De as FUNCTION,Ie as FUNCTION_AWS,oe as FUNCTION_AZURE,ie as FUNCTION_GCP,SE as FUNCTION_NEXTJS,sE as FUNCTION_REMIX,Oe as GEN_AI_CHAT,le as GEN_AI_CREATE_AGENT,se as GEN_AI_DECIDE,Ce as GEN_AI_EMBEDDINGS,Se as GEN_AI_EVALUATE,ae as GEN_AI_EXECUTE_TOOL,ne as GEN_AI_GENERATE_CONTENT,Ae as GEN_AI_HANDOFF,ce as GEN_AI_INVOKE_AGENT,Pe as GEN_AI_MEMORY_CLIENT,Ne as GEN_AI_RERANK,Le as GEN_AI_RESPONSES,pe as GEN_AI_TEXT_COMPLETION,aE as GRAPHQL,Ue as GRPC,CE as HANDLER,uE as HTTP,UE as HTTP_CLIENT,iE as HTTP_CLIENT_STREAM,IE as HTTP_SERVER,de as MARK,me as MCP_NOTIFICATION_CLIENT_TO_SERVER,Me as MCP_NOTIFICATION_SERVER_TO_CLIENT,Be as MCP_SERVER,be as MEASURE,cE as MIDDLEWARE,E as NAVIGATION,_ as NAVIGATION_REDIRECT,eE as OBJECT_DELETE,ze as OBJECT_GET,Ze as OBJECT_HEAD,EE as OBJECT_LIST,rE as OBJECT_MULTIPART_UPLOAD_ABORT,tE as OBJECT_MULTIPART_UPLOAD_COMPLETE,RE as OBJECT_MULTIPART_UPLOAD_CREATE,$e as OBJECT_PUT,_E as OBJECT_UPLOAD_PART,e as PAGELOAD,ge as QUEUE,ve as QUEUE_CREATE,qe as QUEUE_PROCESS,Ge as QUEUE_PUBLISH,Ve as QUEUE_RECEIVE,we as QUEUE_SETTLE,Qe as QUEUE_SUBMIT_ARQ,he as QUEUE_SUBMIT_CELERY,Ke as QUEUE_SUBMIT_HUEY,We as QUEUE_TASK_ARQ,He as QUEUE_TASK_CELERY,ke as QUEUE_TASK_DRAMATIQ,fe as QUEUE_TASK_HUEY,Fe as QUEUE_TASK_RQ,r as RESOURCE,U as RESOURCE_AUDIO,u as RESOURCE_CSS,A as RESOURCE_FRAME,a as RESOURCE_ICON,I as RESOURCE_IFRAME,T as RESOURCE_IMG,t as RESOURCE_LINK,c as RESOURCE_OBJECT,o as RESOURCE_OTHER,C as RESOURCE_PING,R as RESOURCE_SCRIPT,n as RESOURCE_TRACK,i as RESOURCE_VIDEO,O as RESOURCE_WORKER,TE as ROUTER,OE as RPC,xe as SERIALIZE,AE as SUBPROCESS,NE as TEMPLATE,Xe as TURBO_MODULE,M as UI,j as UI_ACTION,J as UI_ACTION_CLICK,$ as UI_ANGULAR,ee as UI_EMBER,h as UI_INTERACTION_CLICK,k as UI_INTERACTION_DRAG,H as UI_INTERACTION_HOVER,K as UI_INTERACTION_PRESS,Ee as UI_LIVEWIRE,W as UI_LONG_ANIMATION_FRAME,Q as UI_LONG_TASK,V as UI_MOUNT,y as UI_REACT,Y as UI_REACT_MOUNT,x as UI_REACT_RENDER,X as UI_REACT_UPDATE,v as UI_RENDER,G as UI_RESOLVE,Z as UI_SVELTE,g as UI_TASK,w as UI_UNMOUNT,q as UI_UPDATE,z as UI_VUE,F as UI_WEBVITAL_CLS,f as UI_WEBVITAL_LCP,nE as VIEW,oE as WEBSOCKET};\n//# sourceMappingURL=op.mjs.map\n","import { BROWSER_LOAD_EVENT, BROWSER_DOM_CONTENT_LOADED_EVENT, BROWSER_UNLOAD_EVENT, BROWSER_RESPONSE, BROWSER_REQUEST, BROWSER_REDIRECT, BROWSER_TLS_SSL, BROWSER_CONNECT, BROWSER_DNS, BROWSER_CACHE, CACHE_REMOVE, CACHE_PUT, CACHE_GET } from '@sentry/conventions/op';\n\nconst PAGELOAD_SPAN_NAME_FALLBACK = \"Pageload\";\nconst NAVIGATION_SPAN_NAME_FALLBACK = \"Navigation\";\nconst DB_SPAN_NAME_FALLBACK = \"Database operation\";\nconst GEN_AI_AGENT_SPAN_NAME_FALLBACK = \"Generative AI agent operation\";\nconst GEN_AI_INFERENCE_SPAN_NAME_FALLBACK = \"Generative AI model operation\";\nconst GRAPHQL_SPAN_NAME_FALLBACK = \"GraphQL Operation\";\nconst HTTP_SPAN_NAME_FALLBACK = \"HTTP\";\nconst MESSAGING_SPAN_NAME_FALLBACK = \"Messaging\";\nconst MCP_SERVER_SPAN_NAME_FALLBACK = \"MCP server operation\";\nconst MCP_NOTIFICATION_SPAN_NAME_FALLBACK = \"MCP notification\";\nconst RESOURCE_SPAN_NAME_FALLBACK = \"Resource\";\nconst ROUTER_SPAN_NAME_FALLBACK = \"Router\";\nconst REQUEST_HANDLER_SPAN_NAME_FALLBACK = \"Request handler\";\nconst SERVERLESS_FUNCTION_SPAN_NAME_FALLBACK = \"Serverless function execution\";\nconst FUNCTION_SPAN_NAME_FALLBACK = \"Function execution\";\nconst UI_MOUNT_SPAN_NAME_FALLBACK = \"Component mount\";\nconst UI_UPDATE_SPAN_NAME_FALLBACK = \"Component update\";\nconst UI_RENDER_SPAN_NAME_FALLBACK = \"Component render\";\nconst UI_UNMOUNT_SPAN_NAME_FALLBACK = \"Component unmount\";\nconst UI_RESOLVE_SPAN_NAME_FALLBACK = \"Component resolve\";\nconst UI_TASK_SPAN_NAME_FALLBACK = \"UI task\";\nconst UI_LONG_TASK_SPAN_NAME_FALLBACK = \"Main UI thread blocked\";\nconst UI_ACTION_SPAN_NAME_FALLBACK = \"UI action\";\nconst UI_ACTION_CLICK_SPAN_NAME_FALLBACK = \"Click\";\nconst UI_INTERACTION_CLICK_SPAN_NAME_FALLBACK = \"Click\";\nconst UI_INTERACTION_HOVER_SPAN_NAME_FALLBACK = \"Hover\";\nconst UI_INTERACTION_DRAG_SPAN_NAME_FALLBACK = \"Drag\";\nconst UI_INTERACTION_PRESS_SPAN_NAME_FALLBACK = \"Key press\";\nconst UI_WEBVITAL_LCP_SPAN_NAME_FALLBACK = \"Largest contentful paint\";\nconst UI_WEBVITAL_CLS_SPAN_NAME_FALLBACK = \"Layout shift\";\nconst UI_SPAN_NAME_FALLBACK = \"UI\";\nconst CACHE_OPERATION_NAMES = {\n  [CACHE_GET]: \"get\",\n  [CACHE_PUT]: \"put\",\n  [CACHE_REMOVE]: \"remove\"\n};\nconst BROWSER_NAVIGATION_TIMING_SPAN_NAMES = {\n  [BROWSER_CACHE]: \"Cache lookup\",\n  [BROWSER_DNS]: \"DNS lookup\",\n  [BROWSER_CONNECT]: \"Connect\",\n  [BROWSER_TLS_SSL]: \"TLS handshake\",\n  [BROWSER_REDIRECT]: \"Redirect\",\n  [BROWSER_REQUEST]: \"Request\",\n  [BROWSER_RESPONSE]: \"Response\",\n  [BROWSER_UNLOAD_EVENT]: \"Unload event\",\n  [BROWSER_DOM_CONTENT_LOADED_EVENT]: \"DOMContentLoaded event\",\n  [BROWSER_LOAD_EVENT]: \"Load event\"\n};\n\nexport { BROWSER_NAVIGATION_TIMING_SPAN_NAMES, CACHE_OPERATION_NAMES, DB_SPAN_NAME_FALLBACK, FUNCTION_SPAN_NAME_FALLBACK, GEN_AI_AGENT_SPAN_NAME_FALLBACK, GEN_AI_INFERENCE_SPAN_NAME_FALLBACK, GRAPHQL_SPAN_NAME_FALLBACK, HTTP_SPAN_NAME_FALLBACK, MCP_NOTIFICATION_SPAN_NAME_FALLBACK, MCP_SERVER_SPAN_NAME_FALLBACK, MESSAGING_SPAN_NAME_FALLBACK, NAVIGATION_SPAN_NAME_FALLBACK, PAGELOAD_SPAN_NAME_FALLBACK, REQUEST_HANDLER_SPAN_NAME_FALLBACK, RESOURCE_SPAN_NAME_FALLBACK, ROUTER_SPAN_NAME_FALLBACK, SERVERLESS_FUNCTION_SPAN_NAME_FALLBACK, UI_ACTION_CLICK_SPAN_NAME_FALLBACK, UI_ACTION_SPAN_NAME_FALLBACK, UI_INTERACTION_CLICK_SPAN_NAME_FALLBACK, UI_INTERACTION_DRAG_SPAN_NAME_FALLBACK, UI_INTERACTION_HOVER_SPAN_NAME_FALLBACK, UI_INTERACTION_PRESS_SPAN_NAME_FALLBACK, UI_LONG_TASK_SPAN_NAME_FALLBACK, UI_MOUNT_SPAN_NAME_FALLBACK, UI_RENDER_SPAN_NAME_FALLBACK, UI_RESOLVE_SPAN_NAME_FALLBACK, UI_SPAN_NAME_FALLBACK, UI_TASK_SPAN_NAME_FALLBACK, UI_UNMOUNT_SPAN_NAME_FALLBACK, UI_UPDATE_SPAN_NAME_FALLBACK, UI_WEBVITAL_CLS_SPAN_NAME_FALLBACK, UI_WEBVITAL_LCP_SPAN_NAME_FALLBACK };\n//# sourceMappingURL=spanNames.js.map\n","import { dsnToString } from './utils/dsn.js';\nimport { getSdkMetadataForEnvelopeHeader, createEventEnvelopeHeaders, createEnvelope } from './utils/envelope.js';\nimport { safeDateNow } from './utils/randomSafeContext.js';\n\nfunction _enhanceEventWithSdkInfo(event, newSdkInfo) {\n  if (!newSdkInfo) {\n    return event;\n  }\n  const eventSdkInfo = event.sdk || {};\n  event.sdk = {\n    ...eventSdkInfo,\n    name: eventSdkInfo.name || newSdkInfo.name,\n    version: eventSdkInfo.version || newSdkInfo.version,\n    integrations: [...event.sdk?.integrations || [], ...newSdkInfo.integrations || []],\n    packages: [...event.sdk?.packages || [], ...newSdkInfo.packages || []],\n    settings: event.sdk?.settings || newSdkInfo.settings ? {\n      ...event.sdk?.settings,\n      ...newSdkInfo.settings\n    } : void 0\n  };\n  return event;\n}\nfunction createSessionEnvelope(session, dsn, metadata, tunnel) {\n  const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n  const envelopeHeaders = {\n    sent_at: new Date(safeDateNow()).toISOString(),\n    ...sdkInfo && { sdk: sdkInfo },\n    ...!!tunnel && dsn && { dsn: dsnToString(dsn) }\n  };\n  const envelopeItem = \"aggregates\" in session ? [{ type: \"sessions\" }, session] : [{ type: \"session\" }, session.toJSON()];\n  return createEnvelope(envelopeHeaders, [envelopeItem]);\n}\nfunction createEventEnvelope(event, dsn, metadata, tunnel) {\n  const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n  const eventType = event.type && event.type !== \"replay_event\" ? event.type : \"event\";\n  _enhanceEventWithSdkInfo(event, metadata?.sdk);\n  const envelopeHeaders = createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn);\n  delete event.sdkProcessingMetadata;\n  const eventItem = [{ type: eventType }, event];\n  return createEnvelope(envelopeHeaders, [eventItem]);\n}\n\nexport { _enhanceEventWithSdkInfo, createEventEnvelope, createSessionEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { isThenable } from './is.js';\n\nconst STATE_PENDING = 0;\nconst STATE_RESOLVED = 1;\nconst STATE_REJECTED = 2;\nfunction resolvedSyncPromise(value) {\n  return new SyncPromise((resolve) => {\n    resolve(value);\n  });\n}\nfunction rejectedSyncPromise(reason) {\n  return new SyncPromise((_, reject) => {\n    reject(reason);\n  });\n}\nclass SyncPromise {\n  constructor(executor) {\n    this._state = STATE_PENDING;\n    this._handlers = [];\n    this._runExecutor(executor);\n  }\n  /** @inheritdoc */\n  then(onfulfilled, onrejected) {\n    return new SyncPromise((resolve, reject) => {\n      this._handlers.push([\n        false,\n        (result) => {\n          if (!onfulfilled) {\n            resolve(result);\n          } else {\n            try {\n              resolve(onfulfilled(result));\n            } catch (e) {\n              reject(e);\n            }\n          }\n        },\n        (reason) => {\n          if (!onrejected) {\n            reject(reason);\n          } else {\n            try {\n              resolve(onrejected(reason));\n            } catch (e) {\n              reject(e);\n            }\n          }\n        }\n      ]);\n      this._executeHandlers();\n    });\n  }\n  /** @inheritdoc */\n  catch(onrejected) {\n    return this.then((val) => val, onrejected);\n  }\n  /** @inheritdoc */\n  finally(onfinally) {\n    return new SyncPromise((resolve, reject) => {\n      let val;\n      let isRejected;\n      return this.then(\n        (value) => {\n          isRejected = false;\n          val = value;\n          if (onfinally) {\n            onfinally();\n          }\n        },\n        (reason) => {\n          isRejected = true;\n          val = reason;\n          if (onfinally) {\n            onfinally();\n          }\n        }\n      ).then(() => {\n        if (isRejected) {\n          reject(val);\n          return;\n        }\n        resolve(val);\n      });\n    });\n  }\n  /** Excute the resolve/reject handlers. */\n  _executeHandlers() {\n    if (this._state === STATE_PENDING) {\n      return;\n    }\n    const cachedHandlers = this._handlers.slice();\n    this._handlers = [];\n    cachedHandlers.forEach((handler) => {\n      if (handler[0]) {\n        return;\n      }\n      if (this._state === STATE_RESOLVED) {\n        handler[1](this._value);\n      }\n      if (this._state === STATE_REJECTED) {\n        handler[2](this._value);\n      }\n      handler[0] = true;\n    });\n  }\n  /** Run the executor for the SyncPromise. */\n  _runExecutor(executor) {\n    const setResult = (state, value) => {\n      if (this._state !== STATE_PENDING) {\n        return;\n      }\n      if (isThenable(value)) {\n        void value.then(resolve, reject);\n        return;\n      }\n      this._state = state;\n      this._value = value;\n      this._executeHandlers();\n    };\n    const resolve = (value) => {\n      setResult(STATE_RESOLVED, value);\n    };\n    const reject = (reason) => {\n      setResult(STATE_REJECTED, reason);\n    };\n    try {\n      executor(resolve, reject);\n    } catch (e) {\n      reject(e);\n    }\n  }\n}\n\nexport { SyncPromise, rejectedSyncPromise, resolvedSyncPromise };\n//# sourceMappingURL=syncpromise.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { debug } from './utils/debug-logger.js';\nimport { isThenable } from './utils/is.js';\nimport { safeCallback } from './utils/safeCallback.js';\nimport { resolvedSyncPromise, rejectedSyncPromise } from './utils/syncpromise.js';\n\nfunction notifyEventProcessors(processors, event, hint, index = 0, onDrop) {\n  try {\n    const result = _notifyEventProcessors(event, hint, processors, index, onDrop);\n    return isThenable(result) ? result : resolvedSyncPromise(result);\n  } catch (error) {\n    return rejectedSyncPromise(error);\n  }\n}\nfunction _notifyEventProcessors(event, hint, processors, index, onDrop) {\n  const processor = processors[index];\n  if (!event || !processor) {\n    return event;\n  }\n  const processorName = `Event processor \"${processor.id || \"?\"}\"`;\n  let callbackError = false;\n  const result = safeCallback(\n    DEBUG_BUILD ? `${processorName} threw an error, dropping event:` : \"\",\n    () => processor({ ...event }, hint),\n    () => {\n      callbackError = true;\n      return null;\n    }\n  );\n  DEBUG_BUILD && result === null && debug.log(`${processorName} dropped event`);\n  if (isThenable(result)) {\n    return result.then((final) => {\n      if (!final) {\n        onDrop?.(callbackError ? \"callback_error\" : \"event_processor\");\n        return null;\n      }\n      return _notifyEventProcessors(final, hint, processors, index + 1, onDrop);\n    });\n  }\n  if (!result) {\n    onDrop?.(callbackError ? \"callback_error\" : \"event_processor\");\n    return null;\n  }\n  return _notifyEventProcessors(result, hint, processors, index + 1, onDrop);\n}\n\nexport { notifyEventProcessors };\n//# sourceMappingURL=eventProcessors.js.map\n","import { normalizeStackTracePath } from './stacktrace.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nlet parsedStackResults;\nlet lastSentryKeysCount;\nlet lastNativeKeysCount;\nlet cachedFilenameDebugIds;\nfunction getFilenameToDebugIdMap(stackParser) {\n  const sentryDebugIdMap = GLOBAL_OBJ._sentryDebugIds;\n  const nativeDebugIdMap = GLOBAL_OBJ._debugIds;\n  if (!sentryDebugIdMap && !nativeDebugIdMap) {\n    return {};\n  }\n  const sentryDebugIdKeys = sentryDebugIdMap ? Object.keys(sentryDebugIdMap) : [];\n  const nativeDebugIdKeys = nativeDebugIdMap ? Object.keys(nativeDebugIdMap) : [];\n  if (cachedFilenameDebugIds && sentryDebugIdKeys.length === lastSentryKeysCount && nativeDebugIdKeys.length === lastNativeKeysCount) {\n    return cachedFilenameDebugIds;\n  }\n  lastSentryKeysCount = sentryDebugIdKeys.length;\n  lastNativeKeysCount = nativeDebugIdKeys.length;\n  cachedFilenameDebugIds = {};\n  if (!parsedStackResults) {\n    parsedStackResults = {};\n  }\n  const processDebugIds = (debugIdKeys, debugIdMap) => {\n    for (const key of debugIdKeys) {\n      const debugId = debugIdMap[key];\n      const result = parsedStackResults?.[key];\n      if (result && cachedFilenameDebugIds && debugId) {\n        cachedFilenameDebugIds[result[0]] = debugId;\n        if (parsedStackResults) {\n          parsedStackResults[key] = [result[0], debugId];\n        }\n      } else if (debugId) {\n        const parsedStack = stackParser(key);\n        for (let i = parsedStack.length - 1; i >= 0; i--) {\n          const stackFrame = parsedStack[i];\n          const filename = stackFrame?.filename;\n          if (filename && cachedFilenameDebugIds && parsedStackResults) {\n            cachedFilenameDebugIds[filename] = debugId;\n            parsedStackResults[key] = [filename, debugId];\n            break;\n          }\n        }\n      }\n    }\n  };\n  if (sentryDebugIdMap) {\n    processDebugIds(sentryDebugIdKeys, sentryDebugIdMap);\n  }\n  if (nativeDebugIdMap) {\n    processDebugIds(nativeDebugIdKeys, nativeDebugIdMap);\n  }\n  return cachedFilenameDebugIds;\n}\nfunction getDebugImagesForResources(stackParser, resource_paths) {\n  const filenameDebugIdMap = getFilenameToDebugIdMap(stackParser);\n  if (!filenameDebugIdMap) {\n    return [];\n  }\n  const images = [];\n  for (const path of resource_paths) {\n    const normalizedPath = normalizeStackTracePath(path);\n    if (normalizedPath && filenameDebugIdMap[normalizedPath]) {\n      images.push({\n        type: \"sourcemap\",\n        code_file: path,\n        debug_id: filenameDebugIdMap[normalizedPath]\n      });\n    }\n  }\n  return images;\n}\n\nexport { getDebugImagesForResources, getFilenameToDebugIdMap };\n//# sourceMappingURL=debug-ids.js.map\n","function isInternalException(hint) {\n  return hint.data?.__sentry__ === true;\n}\nfunction getPossibleEventMessages(event) {\n  const possibleMessages = [];\n  if (event.message) {\n    possibleMessages.push(event.message);\n  }\n  try {\n    const lastException = event.exception.values[event.exception.values.length - 1];\n    if (lastException?.value) {\n      possibleMessages.push(lastException.value);\n      if (lastException.type) {\n        possibleMessages.push(`${lastException.type}: ${lastException.value}`);\n      }\n    }\n  } catch {\n  }\n  return possibleMessages;\n}\n\nexport { getPossibleEventMessages, isInternalException };\n//# sourceMappingURL=eventUtils.js.map\n","import { DEFAULT_ENVIRONMENT } from '../constants.js';\nimport { notifyEventProcessors } from '../eventProcessors.js';\nimport { Scope } from '../scope.js';\nimport { getFilenameToDebugIdMap } from './debug-ids.js';\nimport { getDataCategoryByType } from './envelope.js';\nimport { applyEscapedErrorSpanToEvent } from './errorSpanAttribution.js';\nimport { isInternalException } from './eventUtils.js';\nimport { uuid4, addExceptionMechanismToCapturedException } from './misc.js';\nimport { normalize } from './normalize.js';\nimport { getCombinedScopeData, applyScopeDataToEvent, applySpanToEvent } from './scopeData.js';\nimport { getActiveSpan } from './spanUtils.js';\nimport { truncate } from './string.js';\nimport { resolvedSyncPromise } from './syncpromise.js';\nimport { dateTimestampInSeconds } from './time.js';\n\nfunction prepareEvent(options, event, hint, scope, client, isolationScope) {\n  const { normalizeDepth = 3, normalizeMaxBreadth = 1e3 } = options;\n  const prepared = {\n    ...event,\n    event_id: event.event_id || hint.event_id || uuid4(),\n    timestamp: event.timestamp || dateTimestampInSeconds()\n  };\n  const integrations = hint.integrations || options.integrations.map((i) => i.name);\n  applyClientOptions(prepared, options);\n  applyIntegrationsMetadata(prepared, integrations);\n  if (client) {\n    client.emit(\"applyFrameMetadata\", event);\n  }\n  if (event.type === void 0) {\n    applyDebugIds(prepared, options.stackParser);\n  }\n  const finalScope = getFinalScope(scope, hint.captureContext);\n  if (hint.mechanism) {\n    addExceptionMechanismToCapturedException(prepared, hint.mechanism);\n  }\n  const clientEventProcessors = client ? client.getEventProcessors() : [];\n  const data = getCombinedScopeData(isolationScope, finalScope);\n  const attachments = [...hint.attachments || [], ...data.attachments];\n  if (attachments.length) {\n    hint.attachments = attachments;\n  }\n  applyScopeDataToEvent(prepared, data);\n  const span = getActiveSpan(finalScope);\n  if (span) {\n    applySpanToEvent(prepared, span);\n  }\n  applyEscapedErrorSpanToEvent(prepared, hint, finalScope);\n  const eventProcessors = [\n    ...clientEventProcessors,\n    // Run scope event processors _after_ all other processors\n    ...data.eventProcessors\n  ];\n  const isTransaction = event.type === \"transaction\";\n  const spanCountBeforeProcessing = event.spans?.length || 0;\n  const result = isInternalException(hint) ? resolvedSyncPromise(prepared) : notifyEventProcessors(eventProcessors, prepared, hint, 0, (reason) => {\n    if (!client) {\n      return;\n    }\n    client.recordDroppedEvent(reason, getDataCategoryByType(event.type));\n    if (isTransaction) {\n      client.recordDroppedEvent(reason, \"span\", 1 + spanCountBeforeProcessing);\n    }\n  });\n  return result.then((evt) => {\n    if (!evt) {\n      return null;\n    }\n    if (isTransaction && client) {\n      const droppedSpanCount = spanCountBeforeProcessing - (evt.spans?.length || 0);\n      if (droppedSpanCount > 0) {\n        client.recordDroppedEvent(\"event_processor\", \"span\", droppedSpanCount);\n      }\n    }\n    applyDebugMeta(evt);\n    if (typeof normalizeDepth === \"number\" && normalizeDepth > 0) {\n      return normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n    }\n    return evt;\n  });\n}\nfunction applyClientOptions(event, options) {\n  const { environment, release, dist, maxValueLength } = options;\n  event.environment = event.environment || environment || DEFAULT_ENVIRONMENT;\n  if (!event.release && release) {\n    event.release = release;\n  }\n  if (!event.dist && dist) {\n    event.dist = dist;\n  }\n  const request = event.request;\n  if (request?.url && maxValueLength) {\n    request.url = truncate(request.url, maxValueLength);\n  }\n  if (maxValueLength) {\n    event.exception?.values?.forEach((exception) => {\n      if (exception.value) {\n        exception.value = truncate(exception.value, maxValueLength);\n      }\n    });\n  }\n}\nfunction applyDebugIds(event, stackParser) {\n  const filenameDebugIdMap = getFilenameToDebugIdMap(stackParser);\n  event.exception?.values?.forEach((exception) => {\n    exception.stacktrace?.frames?.forEach((frame) => {\n      if (frame.filename) {\n        frame.debug_id = filenameDebugIdMap[frame.filename];\n      }\n    });\n  });\n}\nfunction applyDebugMeta(event) {\n  const filenameDebugIdMap = {};\n  event.exception?.values?.forEach((exception) => {\n    exception.stacktrace?.frames?.forEach((frame) => {\n      if (frame.debug_id) {\n        if (frame.abs_path) {\n          filenameDebugIdMap[frame.abs_path] = frame.debug_id;\n        } else if (frame.filename) {\n          filenameDebugIdMap[frame.filename] = frame.debug_id;\n        }\n        delete frame.debug_id;\n      }\n    });\n  });\n  if (Object.keys(filenameDebugIdMap).length === 0) {\n    return;\n  }\n  event.debug_meta = event.debug_meta || {};\n  event.debug_meta.images = event.debug_meta.images || [];\n  const images = event.debug_meta.images;\n  Object.entries(filenameDebugIdMap).forEach(([filename, debug_id]) => {\n    images.push({\n      type: \"sourcemap\",\n      code_file: filename,\n      debug_id\n    });\n  });\n}\nfunction applyIntegrationsMetadata(event, integrationNames) {\n  if (integrationNames.length > 0) {\n    event.sdk = event.sdk || {};\n    event.sdk.integrations = [...event.sdk.integrations || [], ...integrationNames];\n  }\n}\nfunction normalizeEvent(event, depth, maxBreadth) {\n  if (!event) {\n    return null;\n  }\n  const normalized = {\n    ...event,\n    ...event.breadcrumbs && {\n      breadcrumbs: event.breadcrumbs.map((b) => ({\n        ...b,\n        ...b.data && {\n          data: normalize(b.data, depth, maxBreadth)\n        }\n      }))\n    },\n    ...event.user && {\n      user: normalize(event.user, depth, maxBreadth)\n    },\n    ...event.contexts && {\n      contexts: normalize(event.contexts, depth, maxBreadth)\n    },\n    ...event.extra && {\n      extra: normalize(event.extra, depth, maxBreadth)\n    }\n  };\n  if (event.contexts?.trace && normalized.contexts) {\n    normalized.contexts.trace = event.contexts.trace;\n    if (event.contexts.trace.data) {\n      normalized.contexts.trace.data = normalize(event.contexts.trace.data, depth, maxBreadth);\n    }\n  }\n  if (event.spans) {\n    normalized.spans = event.spans.map((span) => {\n      return {\n        ...span,\n        ...span.data && {\n          data: normalize(span.data, depth, maxBreadth)\n        }\n      };\n    });\n  }\n  if (event.contexts?.flags && normalized.contexts) {\n    normalized.contexts.flags = normalize(event.contexts.flags, 3, maxBreadth);\n  }\n  return normalized;\n}\nfunction getFinalScope(scope, captureContext) {\n  if (!captureContext) {\n    return scope;\n  }\n  const finalScope = scope ? scope.clone() : new Scope();\n  finalScope.update(captureContext);\n  return finalScope;\n}\nfunction parseEventHintOrCaptureContext(hint) {\n  if (!hint) {\n    return void 0;\n  }\n  if (hintIsScopeOrFunction(hint)) {\n    return { captureContext: hint };\n  }\n  if (hintIsScopeContext(hint)) {\n    return {\n      captureContext: hint\n    };\n  }\n  return hint;\n}\nfunction hintIsScopeOrFunction(hint) {\n  return hint instanceof Scope || typeof hint === \"function\";\n}\nconst captureContextKeys = [\n  \"user\",\n  \"level\",\n  \"extra\",\n  \"contexts\",\n  \"tags\",\n  \"fingerprint\",\n  \"propagationContext\"\n];\nfunction hintIsScopeContext(hint) {\n  return Object.keys(hint).some((key) => captureContextKeys.includes(key));\n}\n\nexport { applyClientOptions, applyDebugIds, applyDebugMeta, parseEventHintOrCaptureContext, prepareEvent };\n//# sourceMappingURL=prepareEvent.js.map\n","import { getIsolationScope, getCurrentScope, getClient } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { closeSession, makeSession, updateSession } from './session.js';\nimport { debug } from './utils/debug-logger.js';\nimport { parseEventHintOrCaptureContext } from './utils/prepareEvent.js';\nimport { getCombinedScopeData } from './utils/scopeData.js';\nimport { GLOBAL_OBJ } from './utils/worldwide.js';\n\nfunction captureException(exception, hint) {\n  return getCurrentScope().captureException(exception, parseEventHintOrCaptureContext(hint));\n}\nfunction captureMessage(message, captureContext) {\n  const level = typeof captureContext === \"string\" ? captureContext : void 0;\n  const hint = typeof captureContext !== \"string\" ? { captureContext } : void 0;\n  return getCurrentScope().captureMessage(message, level, hint);\n}\nfunction captureEvent(event, hint) {\n  return getCurrentScope().captureEvent(event, hint);\n}\nfunction setContext(name, context) {\n  getIsolationScope().setContext(name, context);\n}\nfunction setExtras(extras) {\n  getIsolationScope().setExtras(extras);\n}\nfunction setExtra(key, extra) {\n  getIsolationScope().setExtra(key, extra);\n}\nfunction setTags(tags) {\n  getIsolationScope().setTags(tags);\n}\nfunction setTag(key, value) {\n  getIsolationScope().setTag(key, value);\n}\nfunction setAttributes(attributes) {\n  getIsolationScope().setAttributes(attributes);\n}\nfunction setAttribute(key, value) {\n  getIsolationScope().setAttribute(key, value);\n}\nfunction setUser(user) {\n  getIsolationScope().setUser(user);\n}\nfunction setConversationId(conversationId) {\n  getIsolationScope().setConversationId(conversationId);\n}\nfunction lastEventId() {\n  return getIsolationScope().lastEventId();\n}\nasync function flush(timeout) {\n  const client = getClient();\n  if (client) {\n    return client.flush(timeout);\n  }\n  DEBUG_BUILD && debug.warn(\"Cannot flush events. No client defined.\");\n  return Promise.resolve(false);\n}\nasync function close(timeout) {\n  const scope = getCurrentScope();\n  const client = scope.getClient();\n  if (client) {\n    const result = await client.close(timeout);\n    if (scope.getClient() === client) {\n      scope.setClient(void 0);\n    }\n    return result;\n  }\n  DEBUG_BUILD && debug.warn(\"Cannot flush events and disable SDK. No client defined.\");\n  return Promise.resolve(false);\n}\nfunction isInitialized() {\n  return !!getClient();\n}\nfunction isEnabled() {\n  const client = getClient();\n  return client?.getOptions().enabled !== false && !!client?.getTransport();\n}\nfunction addEventProcessor(callback) {\n  getIsolationScope().addEventProcessor(callback);\n}\nfunction startSession(context) {\n  const isolationScope = getIsolationScope();\n  const { user } = getCombinedScopeData(isolationScope, getCurrentScope());\n  const { userAgent } = GLOBAL_OBJ.navigator || {};\n  const session = makeSession({\n    user,\n    ...userAgent && { userAgent },\n    ...context\n  });\n  const currentSession = isolationScope.getSession();\n  if (currentSession?.status === \"ok\") {\n    updateSession(currentSession, { status: \"exited\" });\n  }\n  endSession();\n  isolationScope.setSession(session);\n  return session;\n}\nfunction endSession() {\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n  const session = currentScope.getSession() || isolationScope.getSession();\n  if (session) {\n    closeSession(session);\n  }\n  _sendSessionUpdate();\n  isolationScope.setSession();\n}\nfunction _sendSessionUpdate() {\n  const isolationScope = getIsolationScope();\n  const client = getClient();\n  const session = isolationScope.getSession();\n  if (session && client) {\n    client.captureSession(session);\n  }\n}\nfunction captureSession(end = false) {\n  if (end) {\n    endSession();\n    return;\n  }\n  _sendSessionUpdate();\n}\n\nexport { addEventProcessor, captureEvent, captureException, captureMessage, captureSession, close, endSession, flush, isEnabled, isInitialized, lastEventId, setAttribute, setAttributes, setContext, setConversationId, setExtra, setExtras, setTag, setTags, setUser, startSession };\n//# sourceMappingURL=exports.js.map\n","import { makeDsn, dsnToString } from './utils/dsn.js';\n\nconst SENTRY_API_VERSION = \"7\";\nfunction getBaseApiEndpoint(dsn) {\n  const protocol = dsn.protocol ? `${dsn.protocol}:` : \"\";\n  const port = dsn.port ? `:${dsn.port}` : \"\";\n  return `${protocol}//${dsn.host}${port}${dsn.path ? `/${dsn.path}` : \"\"}/api/`;\n}\nfunction _getIngestEndpoint(dsn) {\n  return `${getBaseApiEndpoint(dsn)}${dsn.projectId}/envelope/`;\n}\nfunction _encodedAuth(dsn, sdkInfo) {\n  const params = {\n    sentry_version: SENTRY_API_VERSION\n  };\n  if (dsn.publicKey) {\n    params.sentry_key = dsn.publicKey;\n  }\n  if (sdkInfo) {\n    params.sentry_client = `${sdkInfo.name}/${sdkInfo.version}`;\n  }\n  return new URLSearchParams(params).toString();\n}\nfunction getEnvelopeEndpointWithUrlEncodedAuth(dsn, tunnel, sdkInfo) {\n  return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, sdkInfo)}`;\n}\nfunction getReportDialogEndpoint(dsnLike, dialogOptions) {\n  const dsn = makeDsn(dsnLike);\n  if (!dsn) {\n    return \"\";\n  }\n  const endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`;\n  let encodedOptions = `dsn=${dsnToString(dsn)}`;\n  for (const key in dialogOptions) {\n    if (key === \"dsn\") {\n      continue;\n    }\n    if (key === \"onClose\" || key === \"onError\") {\n      continue;\n    }\n    if (key === \"user\") {\n      const user = dialogOptions.user;\n      if (!user) {\n        continue;\n      }\n      if (user.name) {\n        encodedOptions += `&name=${encodeURIComponent(user.name)}`;\n      }\n      if (user.email) {\n        encodedOptions += `&email=${encodeURIComponent(user.email)}`;\n      }\n    } else {\n      encodedOptions += `&${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key])}`;\n    }\n  }\n  return `${endpoint}?${encodedOptions}`;\n}\n\nexport { SENTRY_API_VERSION, getEnvelopeEndpointWithUrlEncodedAuth, getReportDialogEndpoint };\n//# sourceMappingURL=api.js.map\n","import { dsnToString } from '../utils/dsn.js';\nimport { createEnvelope } from '../utils/envelope.js';\nimport { isBrowser } from '../utils/isBrowser.js';\n\nfunction createLogContainerEnvelopeItem(items, inferUserData) {\n  const inferSetting = inferUserData ? \"auto\" : \"never\";\n  return [\n    {\n      type: \"log\",\n      item_count: items.length,\n      content_type: \"application/vnd.sentry.items.log+json\"\n    },\n    {\n      version: 2,\n      ...isBrowser() && {\n        ingest_settings: { infer_ip: inferSetting, infer_user_agent: inferSetting }\n      },\n      items\n    }\n  ];\n}\nfunction createLogEnvelope(logs, metadata, tunnel, dsn, inferUserData) {\n  const headers = {};\n  if (metadata?.sdk) {\n    headers.sdk = {\n      name: metadata.sdk.name,\n      version: metadata.sdk.version\n    };\n  }\n  if (!!tunnel && !!dsn) {\n    headers.dsn = dsnToString(dsn);\n  }\n  return createEnvelope(headers, [createLogContainerEnvelopeItem(logs, inferUserData)]);\n}\n\nexport { createLogContainerEnvelopeItem, createLogEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { serializeAttributes } from '../attributes.js';\nimport { getGlobalSingleton } from '../carrier.js';\nimport { getClient, getIsolationScope, getCurrentScope } from '../currentScopes.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { debug, consoleSandbox } from '../utils/debug-logger.js';\nimport { isParameterizedString } from '../utils/is.js';\nimport { safeCallback, CALLBACK_ERROR } from '../utils/safeCallback.js';\nimport { getCombinedScopeData } from '../utils/scopeData.js';\nimport { getActiveSpan } from '../utils/spanUtils.js';\nimport { timestampInSeconds } from '../utils/time.js';\nimport { getSequenceAttribute } from '../utils/timestampSequence.js';\nimport { _getTraceInfoFromScope } from '../utils/trace-info.js';\nimport { SEVERITY_TEXT_TO_SEVERITY_NUMBER } from './constants.js';\nimport { createLogEnvelope } from './envelope.js';\n\nconst MAX_LOG_BUFFER_SIZE = 100;\nfunction setLogAttribute(logAttributes, key, value, setEvenIfPresent = true) {\n  if (value && (!logAttributes[key] || setEvenIfPresent)) {\n    logAttributes[key] = value;\n  }\n}\nfunction _INTERNAL_captureSerializedLog(client, serializedLog) {\n  const bufferMap = _getBufferMap();\n  const logBuffer = _INTERNAL_getLogBuffer(client);\n  if (logBuffer === void 0) {\n    bufferMap.set(client, [serializedLog]);\n  } else {\n    if (logBuffer.length >= MAX_LOG_BUFFER_SIZE) {\n      _INTERNAL_flushLogsBuffer(client, logBuffer);\n      bufferMap.set(client, [serializedLog]);\n    } else {\n      bufferMap.set(client, [...logBuffer, serializedLog]);\n    }\n  }\n}\nfunction _INTERNAL_captureLog(beforeLog, currentScope = getCurrentScope(), captureSerializedLog = _INTERNAL_captureSerializedLog) {\n  const client = currentScope?.getClient() ?? getClient();\n  if (!client) {\n    DEBUG_BUILD && debug.warn(\"No client available to capture log.\");\n    return;\n  }\n  const { release, environment, beforeSendLog } = client.getOptions();\n  const [, traceContext] = _getTraceInfoFromScope(client, currentScope);\n  const processedLogAttributes = {\n    ...beforeLog.attributes\n  };\n  const {\n    user: { id, email, username },\n    attributes: scopeAttributes\n  } = getCombinedScopeData(getIsolationScope(), currentScope);\n  setLogAttribute(processedLogAttributes, \"user.id\", id, false);\n  setLogAttribute(processedLogAttributes, \"user.email\", email, false);\n  setLogAttribute(processedLogAttributes, \"user.name\", username, false);\n  setLogAttribute(processedLogAttributes, \"sentry.release\", release);\n  setLogAttribute(processedLogAttributes, \"sentry.environment\", environment);\n  const { name, version } = client.getSdkMetadata()?.sdk ?? {};\n  setLogAttribute(processedLogAttributes, \"sentry.sdk.name\", name);\n  setLogAttribute(processedLogAttributes, \"sentry.sdk.version\", version);\n  const replay = client.getIntegrationByName(\"Replay\");\n  const replayId = replay?.getReplayId(true);\n  setLogAttribute(processedLogAttributes, \"sentry.replay_id\", replayId);\n  if (replayId && replay?.getRecordingMode() === \"buffer\") {\n    setLogAttribute(processedLogAttributes, \"sentry._internal.replay_is_buffering\", true);\n  }\n  const beforeLogMessage = beforeLog.message;\n  if (isParameterizedString(beforeLogMessage)) {\n    const { __sentry_template_string__, __sentry_template_values__ = [] } = beforeLogMessage;\n    if (__sentry_template_values__?.length) {\n      processedLogAttributes[\"sentry.message.template\"] = __sentry_template_string__;\n    }\n    __sentry_template_values__.forEach((param, index) => {\n      processedLogAttributes[`sentry.message.parameter.${index}`] = param;\n    });\n  }\n  const span = getActiveSpan(currentScope);\n  setLogAttribute(processedLogAttributes, \"sentry.trace.parent_span_id\", span?.spanContext().spanId);\n  const processedLog = { ...beforeLog, attributes: processedLogAttributes };\n  client.emit(\"beforeCaptureLog\", processedLog);\n  const log = beforeSendLog ? safeCallback(\n    DEBUG_BUILD ? \"The `beforeSendLog` callback threw an error, dropping the log:\" : \"\",\n    // We need to wrap this in `consoleSandbox` to avoid recursive calls to `beforeSendLog`\n    () => consoleSandbox(() => beforeSendLog(processedLog)),\n    () => CALLBACK_ERROR\n  ) : processedLog;\n  if (log === CALLBACK_ERROR) {\n    client.recordDroppedEvent(\"callback_error\", \"log_item\", 1);\n    return;\n  }\n  if (!log) {\n    client.recordDroppedEvent(\"before_send\", \"log_item\", 1);\n    DEBUG_BUILD && debug.warn(\"beforeSendLog returned null, log will not be captured.\");\n    return;\n  }\n  const { level, message, attributes: logAttributes = {}, severityNumber } = log;\n  const timestamp = timestampInSeconds();\n  const sequenceAttr = getSequenceAttribute(timestamp);\n  const serializedLog = {\n    timestamp,\n    level,\n    body: _removeLoneSurrogates(String(message)),\n    trace_id: traceContext?.trace_id,\n    severity_number: severityNumber ?? SEVERITY_TEXT_TO_SEVERITY_NUMBER[level],\n    attributes: sanitizeLogAttributes({\n      ...serializeAttributes(scopeAttributes),\n      ...serializeAttributes(logAttributes, true),\n      [sequenceAttr.key]: sequenceAttr.value\n    })\n  };\n  captureSerializedLog(client, serializedLog);\n  client.emit(\"afterCaptureLog\", log);\n}\nfunction _INTERNAL_flushLogsBuffer(client, maybeLogBuffer) {\n  const logBuffer = maybeLogBuffer ?? _INTERNAL_getLogBuffer(client) ?? [];\n  if (logBuffer.length === 0) {\n    return;\n  }\n  const clientOptions = client.getOptions();\n  const envelope = createLogEnvelope(\n    logBuffer,\n    clientOptions._metadata,\n    clientOptions.tunnel,\n    client.getDsn(),\n    client.getDataCollectionOptions().userInfo\n  );\n  _getBufferMap().set(client, []);\n  client.emit(\"flushLogs\");\n  client.sendEnvelope(envelope);\n}\nfunction _INTERNAL_getLogBuffer(client) {\n  return _getBufferMap().get(client);\n}\nfunction _getBufferMap() {\n  return getGlobalSingleton(\"clientToLogBufferMap\", () => /* @__PURE__ */ new WeakMap());\n}\nfunction sanitizeLogAttributes(attributes) {\n  const sanitized = {};\n  for (const [key, attr] of Object.entries(attributes)) {\n    const sanitizedKey = _removeLoneSurrogates(key);\n    if (attr.type === \"string\") {\n      sanitized[sanitizedKey] = { ...attr, value: _removeLoneSurrogates(attr.value) };\n    } else {\n      sanitized[sanitizedKey] = attr;\n    }\n  }\n  return sanitized;\n}\nfunction _removeLoneSurrogates(str) {\n  const strObj = Object(str);\n  const isWellFormed = strObj[\"isWellFormed\"];\n  const toWellFormed = strObj[\"toWellFormed\"];\n  if (typeof isWellFormed === \"function\" && typeof toWellFormed === \"function\") {\n    return isWellFormed.call(str) ? str : toWellFormed.call(str);\n  }\n  return str;\n}\n\nexport { _INTERNAL_captureLog, _INTERNAL_captureSerializedLog, _INTERNAL_flushLogsBuffer, _INTERNAL_getLogBuffer, _removeLoneSurrogates };\n//# sourceMappingURL=internal.js.map\n","import { dsnToString } from '../utils/dsn.js';\nimport { createEnvelope } from '../utils/envelope.js';\nimport { isBrowser } from '../utils/isBrowser.js';\n\nfunction createMetricContainerEnvelopeItem(items, inferUserData) {\n  const inferSetting = inferUserData ? \"auto\" : \"never\";\n  return [\n    {\n      type: \"trace_metric\",\n      item_count: items.length,\n      content_type: \"application/vnd.sentry.items.trace-metric+json\"\n    },\n    {\n      version: 2,\n      ...isBrowser() && {\n        ingest_settings: { infer_ip: inferSetting, infer_user_agent: inferSetting }\n      },\n      items\n    }\n  ];\n}\nfunction createMetricEnvelope(metrics, metadata, tunnel, dsn, inferUserData) {\n  const headers = {};\n  if (metadata?.sdk) {\n    headers.sdk = {\n      name: metadata.sdk.name,\n      version: metadata.sdk.version\n    };\n  }\n  if (!!tunnel && !!dsn) {\n    headers.dsn = dsnToString(dsn);\n  }\n  return createEnvelope(headers, [createMetricContainerEnvelopeItem(metrics, inferUserData)]);\n}\n\nexport { createMetricContainerEnvelopeItem, createMetricEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { serializeAttributes } from '../attributes.js';\nimport { getGlobalSingleton } from '../carrier.js';\nimport { getCurrentScope, getClient, getIsolationScope } from '../currentScopes.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from '../utils/debug-logger.js';\nimport { safeCallback, CALLBACK_ERROR } from '../utils/safeCallback.js';\nimport { getCombinedScopeData } from '../utils/scopeData.js';\nimport { getActiveSpan } from '../utils/spanUtils.js';\nimport { timestampInSeconds } from '../utils/time.js';\nimport { getSequenceAttribute } from '../utils/timestampSequence.js';\nimport { _getTraceInfoFromScope } from '../utils/trace-info.js';\nimport { createMetricEnvelope } from './envelope.js';\n\nconst MAX_METRIC_BUFFER_SIZE = 1e3;\nfunction setMetricAttribute(metricAttributes, key, value, setEvenIfPresent = true) {\n  if (value && (setEvenIfPresent || !(key in metricAttributes))) {\n    metricAttributes[key] = value;\n  }\n}\nfunction _INTERNAL_captureSerializedMetric(client, serializedMetric) {\n  const bufferMap = _getBufferMap();\n  const metricBuffer = _INTERNAL_getMetricBuffer(client);\n  if (metricBuffer === void 0) {\n    bufferMap.set(client, [serializedMetric]);\n  } else {\n    if (metricBuffer.length >= MAX_METRIC_BUFFER_SIZE) {\n      _INTERNAL_flushMetricsBuffer(client, metricBuffer);\n      bufferMap.set(client, [serializedMetric]);\n    } else {\n      bufferMap.set(client, [...metricBuffer, serializedMetric]);\n    }\n  }\n}\nfunction _enrichMetricAttributes(beforeMetric, client, user) {\n  const { release, environment } = client.getOptions();\n  const processedMetricAttributes = {\n    ...beforeMetric.attributes\n  };\n  setMetricAttribute(processedMetricAttributes, \"user.id\", user.id, false);\n  setMetricAttribute(processedMetricAttributes, \"user.email\", user.email, false);\n  setMetricAttribute(processedMetricAttributes, \"user.name\", user.username, false);\n  setMetricAttribute(processedMetricAttributes, \"sentry.release\", release);\n  setMetricAttribute(processedMetricAttributes, \"sentry.environment\", environment);\n  const { name, version } = client.getSdkMetadata()?.sdk ?? {};\n  setMetricAttribute(processedMetricAttributes, \"sentry.sdk.name\", name);\n  setMetricAttribute(processedMetricAttributes, \"sentry.sdk.version\", version);\n  const replay = client.getIntegrationByName(\"Replay\");\n  const replayId = replay?.getReplayId(true);\n  setMetricAttribute(processedMetricAttributes, \"sentry.replay_id\", replayId);\n  if (replayId && replay?.getRecordingMode() === \"buffer\") {\n    setMetricAttribute(processedMetricAttributes, \"sentry._internal.replay_is_buffering\", true);\n  }\n  return {\n    ...beforeMetric,\n    attributes: processedMetricAttributes\n  };\n}\nfunction _buildSerializedMetric(metric, client, currentScope, scopeAttributes) {\n  const [, traceContext] = _getTraceInfoFromScope(client, currentScope);\n  const span = getActiveSpan(currentScope);\n  const traceId = span ? span.spanContext().traceId : traceContext?.trace_id;\n  const spanId = span ? span.spanContext().spanId : void 0;\n  const timestamp = timestampInSeconds();\n  const sequenceAttr = getSequenceAttribute(timestamp);\n  return {\n    timestamp,\n    trace_id: traceId ?? \"\",\n    span_id: spanId,\n    name: metric.name,\n    type: metric.type,\n    unit: metric.unit,\n    value: metric.value,\n    attributes: {\n      ...serializeAttributes(scopeAttributes),\n      ...serializeAttributes(metric.attributes, \"skip-undefined\"),\n      [sequenceAttr.key]: sequenceAttr.value\n    }\n  };\n}\nfunction _INTERNAL_captureMetric(beforeMetric, options) {\n  const currentScope = options?.scope ?? getCurrentScope();\n  const captureSerializedMetric = options?.captureSerializedMetric ?? _INTERNAL_captureSerializedMetric;\n  const client = currentScope?.getClient() ?? getClient();\n  if (!client) {\n    DEBUG_BUILD && debug.warn(\"No client available to capture metric.\");\n    return;\n  }\n  const { beforeSendMetric } = client.getOptions();\n  const { user, attributes: scopeAttributes } = getCombinedScopeData(getIsolationScope(), currentScope);\n  const enrichedMetric = _enrichMetricAttributes(beforeMetric, client, user);\n  client.emit(\"processMetric\", enrichedMetric);\n  const processedMetric = beforeSendMetric ? safeCallback(\n    DEBUG_BUILD ? \"The `beforeSendMetric` callback threw an error, dropping the metric:\" : \"\",\n    () => beforeSendMetric(enrichedMetric),\n    () => CALLBACK_ERROR\n  ) : enrichedMetric;\n  if (processedMetric === CALLBACK_ERROR) {\n    client.recordDroppedEvent(\"callback_error\", \"metric\", 1);\n    return;\n  }\n  if (!processedMetric) {\n    client.recordDroppedEvent(\"before_send\", \"metric\", 1);\n    DEBUG_BUILD && debug.log(\"`beforeSendMetric` returned `null`, will not send metric.\");\n    return;\n  }\n  const serializedMetric = _buildSerializedMetric(processedMetric, client, currentScope, scopeAttributes);\n  DEBUG_BUILD && debug.log(\"[Metric]\", serializedMetric);\n  captureSerializedMetric(client, serializedMetric);\n  client.emit(\"afterCaptureMetric\", processedMetric);\n}\nfunction _INTERNAL_flushMetricsBuffer(client, maybeMetricBuffer) {\n  const metricBuffer = maybeMetricBuffer ?? _INTERNAL_getMetricBuffer(client) ?? [];\n  if (metricBuffer.length === 0) {\n    return;\n  }\n  const clientOptions = client.getOptions();\n  const envelope = createMetricEnvelope(\n    metricBuffer,\n    clientOptions._metadata,\n    clientOptions.tunnel,\n    client.getDsn(),\n    client.getDataCollectionOptions().userInfo\n  );\n  _getBufferMap().set(client, []);\n  client.emit(\"flushMetrics\");\n  client.sendEnvelope(envelope);\n}\nfunction _INTERNAL_getMetricBuffer(client) {\n  return _getBufferMap().get(client);\n}\nfunction _getBufferMap() {\n  return getGlobalSingleton(\"clientToMetricBufferMap\", () => /* @__PURE__ */ new WeakMap());\n}\n\nexport { _INTERNAL_captureMetric, _INTERNAL_captureSerializedMetric, _INTERNAL_flushMetricsBuffer, _INTERNAL_getMetricBuffer };\n//# sourceMappingURL=internal.js.map\n","import { createSpanContainerItem } from './envelope.js';\nimport { hasSpanStreamingEnabled } from './hasSpanStreamingEnabled.js';\nimport { spanJsonToSerializedStreamedSpan } from './spanJsonToStreamedSpan.js';\n\nfunction extractGenAiSpansFromEvent(event, client) {\n  if (event.type !== \"transaction\" || !event.spans?.length || !event.sdkProcessingMetadata?.hasGenAiSpans || hasSpanStreamingEnabled(client)) {\n    return void 0;\n  }\n  const genAiSpans = [];\n  const remainingSpans = [];\n  for (const span of event.spans) {\n    if (span.op?.startsWith(\"gen_ai.\")) {\n      genAiSpans.push(spanJsonToSerializedStreamedSpan(span));\n    } else {\n      remainingSpans.push(span);\n    }\n  }\n  if (genAiSpans.length === 0) {\n    return void 0;\n  }\n  event.spans = remainingSpans;\n  return createSpanContainerItem(genAiSpans, client);\n}\n\nexport { extractGenAiSpansFromEvent };\n//# sourceMappingURL=extractGenAiSpans.js.map\n","import { resolvedSyncPromise, rejectedSyncPromise } from './syncpromise.js';\nimport { safeUnref } from './timer.js';\n\nconst SENTRY_BUFFER_FULL_ERROR = /* @__PURE__ */ Symbol.for(\"SentryBufferFullError\");\nfunction makePromiseBuffer(limit = 100) {\n  const buffer = /* @__PURE__ */ new Set();\n  function isReady() {\n    return buffer.size < limit;\n  }\n  function remove(task) {\n    buffer.delete(task);\n  }\n  function add(taskProducer) {\n    if (!isReady()) {\n      return rejectedSyncPromise(SENTRY_BUFFER_FULL_ERROR);\n    }\n    const task = taskProducer();\n    buffer.add(task);\n    void task.then(\n      () => remove(task),\n      () => remove(task)\n    );\n    return task;\n  }\n  function drain(timeout) {\n    if (!buffer.size) {\n      return resolvedSyncPromise(true);\n    }\n    const drainPromise = Promise.allSettled(Array.from(buffer)).then(() => true);\n    if (!timeout) {\n      return drainPromise;\n    }\n    const promises = [\n      drainPromise,\n      new Promise((resolve) => safeUnref(setTimeout(() => resolve(false), timeout)))\n    ];\n    return Promise.race(promises);\n  }\n  return {\n    get $() {\n      return Array.from(buffer);\n    },\n    add,\n    drain\n  };\n}\n\nexport { SENTRY_BUFFER_FULL_ERROR, makePromiseBuffer };\n//# sourceMappingURL=promisebuffer.js.map\n","import { safeDateNow } from './randomSafeContext.js';\n\nconst DEFAULT_RETRY_AFTER = 60 * 1e3;\nfunction parseRetryAfterHeader(header, now = safeDateNow()) {\n  const headerDelay = parseInt(`${header}`, 10);\n  if (!isNaN(headerDelay)) {\n    return headerDelay * 1e3;\n  }\n  const headerDate = Date.parse(`${header}`);\n  if (!isNaN(headerDate)) {\n    return headerDate - now;\n  }\n  return DEFAULT_RETRY_AFTER;\n}\nfunction disabledUntil(limits, dataCategory) {\n  return limits[dataCategory] || limits.all || 0;\n}\nfunction isRateLimited(limits, dataCategory, now = safeDateNow()) {\n  return disabledUntil(limits, dataCategory) > now;\n}\nfunction updateRateLimits(limits, { statusCode, headers }, now = safeDateNow()) {\n  const updatedRateLimits = {\n    ...limits\n  };\n  const rateLimitHeader = headers?.[\"x-sentry-rate-limits\"];\n  const retryAfterHeader = headers?.[\"retry-after\"];\n  if (rateLimitHeader) {\n    for (const limit of rateLimitHeader.trim().split(\",\")) {\n      const [retryAfter, categories, , , namespaces] = limit.split(\":\", 5);\n      const headerDelay = parseInt(retryAfter, 10);\n      const delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1e3;\n      if (!categories) {\n        updatedRateLimits.all = now + delay;\n      } else {\n        for (const category of categories.split(\";\")) {\n          if (category === \"metric_bucket\") {\n            if (!namespaces || namespaces.split(\";\").includes(\"custom\")) {\n              updatedRateLimits[category] = now + delay;\n            }\n          } else {\n            updatedRateLimits[category] = now + delay;\n          }\n        }\n      }\n    }\n  } else if (retryAfterHeader) {\n    updatedRateLimits.all = now + parseRetryAfterHeader(retryAfterHeader, now);\n  } else if (statusCode === 429) {\n    updatedRateLimits.all = now + 60 * 1e3;\n  }\n  return updatedRateLimits;\n}\n\nexport { DEFAULT_RETRY_AFTER, disabledUntil, isRateLimited, parseRetryAfterHeader, updateRateLimits };\n//# sourceMappingURL=ratelimit.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from '../utils/debug-logger.js';\nimport { forEachEnvelopeItem, envelopeItemTypeToDataCategory, createEnvelope, serializeEnvelope, envelopeContainsItemType } from '../utils/envelope.js';\nimport { makePromiseBuffer, SENTRY_BUFFER_FULL_ERROR } from '../utils/promisebuffer.js';\nimport { isRateLimited, updateRateLimits } from '../utils/ratelimit.js';\n\nconst DEFAULT_TRANSPORT_BUFFER_SIZE = 64;\nfunction createTransport(options, makeRequest, buffer = makePromiseBuffer(\n  options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE\n)) {\n  let rateLimits = {};\n  const flush = (timeout) => buffer.drain(timeout);\n  function recordItemLoss(reason, [headers, payload], type) {\n    const dataCategory = envelopeItemTypeToDataCategory(type);\n    if (type === \"transaction\") {\n      options.recordDroppedEvent(reason, \"span\", (payload.spans?.length ?? 0) + 1);\n    }\n    options.recordDroppedEvent(reason, dataCategory, typeof headers.item_count === \"number\" ? headers.item_count : 1);\n  }\n  function send(envelope) {\n    const filteredEnvelopeItems = [];\n    forEachEnvelopeItem(envelope, (item, type) => {\n      if (isRateLimited(rateLimits, envelopeItemTypeToDataCategory(type))) {\n        recordItemLoss(\"ratelimit_backoff\", item, type);\n      } else {\n        filteredEnvelopeItems.push(item);\n      }\n    });\n    if (filteredEnvelopeItems.length === 0) {\n      return Promise.resolve({});\n    }\n    const filteredEnvelope = createEnvelope(envelope[0], filteredEnvelopeItems);\n    const recordEnvelopeLoss = (reason) => {\n      if (envelopeContainsItemType(filteredEnvelope, [\"client_report\"])) {\n        DEBUG_BUILD && debug.warn(`Dropping client report. Will not send outcomes (reason: ${reason}).`);\n        return;\n      }\n      forEachEnvelopeItem(filteredEnvelope, (item, type) => {\n        recordItemLoss(reason, item, type);\n      });\n    };\n    const requestTask = () => makeRequest({ body: serializeEnvelope(filteredEnvelope) }).then(\n      (response) => {\n        if (response.statusCode === 413) {\n          DEBUG_BUILD && debug.error(\n            \"Sentry responded with status code 413. Envelope was discarded due to exceeding size limits.\"\n          );\n          recordEnvelopeLoss(\"send_error\");\n          return response;\n        }\n        if (DEBUG_BUILD && response.statusCode !== void 0 && (response.statusCode < 200 || response.statusCode >= 300)) {\n          debug.warn(`Sentry responded with status code ${response.statusCode} to sent event.`);\n        }\n        rateLimits = updateRateLimits(rateLimits, response);\n        return response;\n      },\n      (error) => {\n        recordEnvelopeLoss(\"network_error\");\n        DEBUG_BUILD && debug.error(\"Encountered error running transport request:\", error);\n        throw error;\n      }\n    );\n    return buffer.add(requestTask).then(\n      (result) => result,\n      (error) => {\n        if (error === SENTRY_BUFFER_FULL_ERROR) {\n          DEBUG_BUILD && debug.error(\"Skipped sending event because buffer is full.\");\n          recordEnvelopeLoss(\"queue_overflow\");\n          return Promise.resolve({});\n        } else {\n          throw error;\n        }\n      }\n    );\n  }\n  return {\n    send,\n    flush\n  };\n}\n\nexport { DEFAULT_TRANSPORT_BUFFER_SIZE, createTransport };\n//# sourceMappingURL=base.js.map\n","import { createEnvelope } from './envelope.js';\nimport { dateTimestampInSeconds } from './time.js';\n\nfunction createClientReportEnvelope(discarded_events, dsn, timestamp) {\n  const clientReportItem = [\n    { type: \"client_report\" },\n    {\n      timestamp: timestamp || dateTimestampInSeconds(),\n      discarded_events\n    }\n  ];\n  return createEnvelope(dsn ? { dsn } : {}, [clientReportItem]);\n}\n\nexport { createClientReportEnvelope };\n//# sourceMappingURL=clientreport.js.map\n","import { SENTRY_EXCLUSIVE_TIME, SENTRY_PROFILE_ID } from '@sentry/conventions/attributes';\n\nfunction convertTransactionEventToSpanJson(event) {\n  const { trace_id, parent_span_id, span_id, status, origin, data, op } = event.contexts?.trace ?? {};\n  return {\n    data: data ?? {},\n    description: event.transaction,\n    op,\n    parent_span_id,\n    span_id: span_id ?? \"\",\n    start_timestamp: event.start_timestamp ?? 0,\n    status: status ?? \"ok\",\n    timestamp: event.timestamp,\n    trace_id: trace_id ?? \"\",\n    origin,\n    profile_id: data?.[SENTRY_PROFILE_ID],\n    exclusive_time: data?.[SENTRY_EXCLUSIVE_TIME],\n    measurements: event.measurements,\n    is_segment: true\n  };\n}\nfunction convertSpanJsonToTransactionEvent(span) {\n  return {\n    type: \"transaction\",\n    timestamp: span.timestamp,\n    start_timestamp: span.start_timestamp,\n    transaction: span.description,\n    contexts: {\n      trace: {\n        trace_id: span.trace_id,\n        span_id: span.span_id,\n        parent_span_id: span.parent_span_id,\n        op: span.op,\n        status: span.status,\n        origin: span.origin,\n        data: {\n          ...span.data,\n          ...span.profile_id && { [SENTRY_PROFILE_ID]: span.profile_id },\n          ...span.exclusive_time && { [SENTRY_EXCLUSIVE_TIME]: span.exclusive_time }\n        }\n      }\n    },\n    measurements: span.measurements\n  };\n}\n\nexport { convertSpanJsonToTransactionEvent, convertTransactionEventToSpanJson };\n//# sourceMappingURL=transactionEvent.js.map\n","import { consoleSandbox } from './debug-logger.js';\n\nfunction maybeWarnAboutIgnoredTransactionOptions(options) {\n  if (options.traceLifecycle !== \"stream\" || // oxlint-disable-next-line typescript/no-deprecated\n  !(options.beforeSendTransaction || options.ignoreTransactions?.length)) {\n    return;\n  }\n  consoleSandbox(() => {\n    console.warn(\n      \"[Sentry] `beforeSendTransaction` and `ignoreTransactions` are ignored with `traceLifecycle: 'stream'` (enabled by default). Use `beforeSendSpan` and `ignoreSpans` instead, or set `traceLifecycle: 'static'`.\"\n    );\n  });\n}\n\nexport { maybeWarnAboutIgnoredTransactionOptions };\n//# sourceMappingURL=warnAboutIgnoredTransactionOptions.js.map\n","const DEFAULTS = {\n  userInfo: true,\n  cookies: true,\n  httpHeaders: { request: true, response: true },\n  httpBodies: [\"incomingRequest\", \"outgoingRequest\", \"incomingResponse\", \"outgoingResponse\"],\n  urlQueryParams: true,\n  graphQL: { document: true, variables: true },\n  genAI: { inputs: true, outputs: true },\n  databaseQueryData: true,\n  queues: true,\n  stackFrameVariables: true,\n  frameContextLines: 5\n};\nfunction isCollectBehavior(value) {\n  return typeof value === \"boolean\" || \"allow\" in value || \"deny\" in value;\n}\nfunction resolveHttpHeaders(httpHeaders) {\n  if (httpHeaders === void 0) {\n    return { ...DEFAULTS.httpHeaders };\n  }\n  if (isCollectBehavior(httpHeaders)) {\n    return { request: httpHeaders, response: httpHeaders };\n  }\n  return {\n    request: httpHeaders.request ?? DEFAULTS.httpHeaders.request,\n    response: httpHeaders.response ?? DEFAULTS.httpHeaders.response\n  };\n}\nfunction resolveDataCollectionOptions(options) {\n  const dc = options.dataCollection ?? {};\n  return {\n    userInfo: dc.userInfo ?? DEFAULTS.userInfo,\n    cookies: dc.cookies ?? DEFAULTS.cookies,\n    httpHeaders: resolveHttpHeaders(dc.httpHeaders),\n    httpBodies: dc.httpBodies ?? DEFAULTS.httpBodies,\n    urlQueryParams: dc.urlQueryParams ?? DEFAULTS.urlQueryParams,\n    graphQL: {\n      document: dc.graphQL?.document ?? DEFAULTS.graphQL.document,\n      variables: dc.graphQL?.variables ?? DEFAULTS.graphQL.variables\n    },\n    genAI: {\n      inputs: dc.genAI?.inputs ?? DEFAULTS.genAI.inputs,\n      outputs: dc.genAI?.outputs ?? DEFAULTS.genAI.outputs\n    },\n    databaseQueryData: dc.databaseQueryData ?? DEFAULTS.databaseQueryData,\n    queues: dc.queues ?? DEFAULTS.queues,\n    stackFrameVariables: dc.stackFrameVariables ?? DEFAULTS.stackFrameVariables,\n    frameContextLines: dc.frameContextLines ?? DEFAULTS.frameContextLines\n  };\n}\n\nexport { resolveDataCollectionOptions };\n//# sourceMappingURL=resolveDataCollectionOptions.js.map\n","import { getEnvelopeEndpointWithUrlEncodedAuth } from './api.js';\nimport { DEFAULT_ENVIRONMENT } from './constants.js';\nimport { getTraceContextFromScope, getCurrentScope, getIsolationScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { createEventEnvelope, createSessionEnvelope } from './envelope.js';\nimport { setupIntegration, afterSetupIntegrations, setupIntegrations } from './integration.js';\nimport { _INTERNAL_flushLogsBuffer } from './logs/internal.js';\nimport { _INTERNAL_flushMetricsBuffer } from './metrics/internal.js';\nimport { updateSession } from './session.js';\nimport { getDynamicSamplingContextFromScope } from './tracing/dynamicSamplingContext.js';\nimport { isStaticBeforeSendSpanCallback, applyBeforeSendSpanCallback } from './tracing/spans/beforeSendSpan.js';\nimport { extractGenAiSpansFromEvent } from './tracing/spans/extractGenAiSpans.js';\nimport { DEFAULT_TRANSPORT_BUFFER_SIZE } from './transports/base.js';\nimport { createClientReportEnvelope } from './utils/clientreport.js';\nimport { debug, consoleSandbox } from './utils/debug-logger.js';\nimport { makeDsn, dsnToString } from './utils/dsn.js';\nimport { getDataCategoryByType, addItemToEnvelope, createAttachmentEnvelopeItem } from './utils/envelope.js';\nimport { isInternalException, getPossibleEventMessages } from './utils/eventUtils.js';\nimport { isPlainObject, isParameterizedString, isPrimitive, isObjectLike } from './utils/is.js';\nimport { merge } from './utils/merge.js';\nimport { uuid4, checkOrSetAlreadyCaught } from './utils/misc.js';\nimport { parseSampleRate } from './utils/parseSampleRate.js';\nimport { prepareEvent } from './utils/prepareEvent.js';\nimport { makePromiseBuffer, SENTRY_BUFFER_FULL_ERROR } from './utils/promisebuffer.js';\nimport { safeMathRandom } from './utils/randomSafeContext.js';\nimport { safeCallback } from './utils/safeCallback.js';\nimport { shouldIgnoreSpan, reparentChildSpans } from './utils/should-ignore-span.js';\nimport { safeUnref } from './utils/timer.js';\nimport { convertTransactionEventToSpanJson, convertSpanJsonToTransactionEvent } from './utils/transactionEvent.js';\nimport { maybeWarnAboutIgnoredTransactionOptions } from './utils/warnAboutIgnoredTransactionOptions.js';\nimport { resolveDataCollectionOptions } from './utils/data-collection/resolveDataCollectionOptions.js';\n\nconst ALREADY_SEEN_ERROR = \"Not capturing exception because it's already been captured.\";\nconst MISSING_RELEASE_FOR_SESSION_ERROR = \"Discarded session because of missing or non-string release\";\nconst INTERNAL_ERROR_SYMBOL = /* @__PURE__ */ Symbol.for(\"SentryInternalError\");\nconst DO_NOT_SEND_EVENT_SYMBOL = /* @__PURE__ */ Symbol.for(\"SentryDoNotSendEventError\");\nconst DEFAULT_FLUSH_INTERVAL = 5e3;\nconst CLOSED_CLIENT_SYMBOL = /* @__PURE__ */ Symbol.for(\"SentryClosedClient\");\nfunction isClientClosed(client) {\n  return CLOSED_CLIENT_SYMBOL in client;\n}\nfunction _makeInternalError(message) {\n  return {\n    message,\n    [INTERNAL_ERROR_SYMBOL]: true\n  };\n}\nfunction _makeDoNotSendEventError(message) {\n  return {\n    message,\n    [DO_NOT_SEND_EVENT_SYMBOL]: true\n  };\n}\nfunction _isInternalError(error) {\n  return isObjectLike(error) && INTERNAL_ERROR_SYMBOL in error;\n}\nfunction _isDoNotSendEventError(error) {\n  return isObjectLike(error) && DO_NOT_SEND_EVENT_SYMBOL in error;\n}\nfunction setupWeightBasedFlushing(client, afterCaptureHook, flushHook, estimateSizeFn, flushFn) {\n  let weight = 0;\n  let flushTimeout;\n  let isTimerActive = false;\n  client.on(flushHook, () => {\n    weight = 0;\n    clearTimeout(flushTimeout);\n    isTimerActive = false;\n  });\n  client.on(afterCaptureHook, (item) => {\n    weight += estimateSizeFn(item);\n    if (weight >= 8e5) {\n      flushFn(client);\n    } else if (!isTimerActive) {\n      const flushInterval = client.getOptions()._flushInterval ?? DEFAULT_FLUSH_INTERVAL;\n      if (flushInterval > 0) {\n        isTimerActive = true;\n        flushTimeout = safeUnref(\n          setTimeout(() => {\n            flushFn(client);\n          }, flushInterval)\n        );\n      }\n    }\n  });\n  client.on(\"flush\", () => {\n    flushFn(client);\n  });\n}\nclass Client {\n  /**\n   * Initializes this client instance.\n   *\n   * @param options Options for the client.\n   */\n  constructor(options) {\n    this._options = {\n      attachStacktrace: true,\n      ...options,\n      traceLifecycle: options.traceLifecycle === \"static\" ? \"static\" : \"stream\"\n    };\n    this._integrations = {};\n    this._numProcessing = 0;\n    this._outcomes = {};\n    this._hooks = {};\n    this._eventProcessors = [];\n    this._promiseBuffer = makePromiseBuffer(options.transportOptions?.bufferSize ?? DEFAULT_TRANSPORT_BUFFER_SIZE);\n    this._dataCollection = resolveDataCollectionOptions(options);\n    this._unhandledSessionStatus = \"crashed\";\n    if (options.dsn) {\n      this._dsn = makeDsn(options.dsn);\n    } else {\n      DEBUG_BUILD && debug.warn(\"No DSN provided, client will not send events.\");\n    }\n    const { beforeSendSpan, traceLifecycle } = this._options;\n    if (DEBUG_BUILD && beforeSendSpan && isStaticBeforeSendSpanCallback(beforeSendSpan) !== (traceLifecycle === \"static\")) {\n      consoleSandbox(() => {\n        console.warn(\n          `Ignoring \\`beforeSendSpan\\`: ${traceLifecycle === \"static\" ? \"wrap it with\" : \"remove\"} \\`Sentry.withStaticSpan\\` to use it with \\`traceLifecycle: \"${traceLifecycle}\"\\`.`\n        );\n      });\n    }\n    if (this._dsn) {\n      const url = getEnvelopeEndpointWithUrlEncodedAuth(\n        this._dsn,\n        options.tunnel,\n        options._metadata ? options._metadata.sdk : void 0\n      );\n      this._transport = options.transport({\n        tunnel: this._options.tunnel,\n        recordDroppedEvent: this.recordDroppedEvent.bind(this),\n        ...options.transportOptions,\n        url\n      });\n    }\n    setupWeightBasedFlushing(this, \"afterCaptureLog\", \"flushLogs\", estimateLogSizeInBytes, _INTERNAL_flushLogsBuffer);\n    setupWeightBasedFlushing(\n      this,\n      \"afterCaptureMetric\",\n      \"flushMetrics\",\n      estimateMetricSizeInBytes,\n      _INTERNAL_flushMetricsBuffer\n    );\n  }\n  /**\n   * Captures an exception event and sends it to Sentry.\n   *\n   * Unlike `captureException` exported from every SDK, this method requires that you pass it the current scope.\n   */\n  captureException(exception, hint, scope) {\n    const eventId = uuid4();\n    if (checkOrSetAlreadyCaught(exception)) {\n      DEBUG_BUILD && debug.log(ALREADY_SEEN_ERROR);\n      return eventId;\n    }\n    const hintWithEventId = {\n      event_id: eventId,\n      ...hint\n    };\n    this._process(\n      () => this.eventFromException(exception, hintWithEventId).then((event) => this._captureEvent(event, hintWithEventId, scope)).then((res) => res),\n      \"error\"\n    );\n    return hintWithEventId.event_id;\n  }\n  /**\n   * Captures a message event and sends it to Sentry.\n   *\n   * Unlike `captureMessage` exported from every SDK, this method requires that you pass it the current scope.\n   */\n  captureMessage(message, level, hint, currentScope) {\n    const hintWithEventId = {\n      event_id: uuid4(),\n      ...hint\n    };\n    const eventMessage = isParameterizedString(message) ? message : String(message);\n    const isMessage = isPrimitive(message);\n    const promisedEvent = isMessage ? this.eventFromMessage(eventMessage, level, hintWithEventId) : this.eventFromException(message, hintWithEventId);\n    this._process(\n      () => promisedEvent.then((event) => this._captureEvent(event, hintWithEventId, currentScope)),\n      isMessage ? \"unknown\" : \"error\"\n    );\n    return hintWithEventId.event_id;\n  }\n  /**\n   * Captures a manually created event and sends it to Sentry.\n   *\n   * Unlike `captureEvent` exported from every SDK, this method requires that you pass it the current scope.\n   */\n  captureEvent(event, hint, currentScope) {\n    const eventId = uuid4();\n    if (hint?.originalException && checkOrSetAlreadyCaught(hint.originalException)) {\n      DEBUG_BUILD && debug.log(ALREADY_SEEN_ERROR);\n      return eventId;\n    }\n    const hintWithEventId = {\n      event_id: eventId,\n      ...hint\n    };\n    const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n    const capturedSpanScope = sdkProcessingMetadata.capturedSpanScope;\n    const capturedSpanIsolationScope = sdkProcessingMetadata.capturedSpanIsolationScope;\n    const dataCategory = getDataCategoryByType(event.type);\n    this._process(\n      () => this._captureEvent(event, hintWithEventId, capturedSpanScope || currentScope, capturedSpanIsolationScope),\n      dataCategory\n    );\n    return hintWithEventId.event_id;\n  }\n  /**\n   * Captures a session.\n   */\n  captureSession(session) {\n    this.sendSession(session);\n    updateSession(session, { init: false });\n  }\n  /**\n   * Get the current Dsn.\n   */\n  getDsn() {\n    return this._dsn;\n  }\n  /**\n   * Get the current options.\n   */\n  getOptions() {\n    return this._options;\n  }\n  /**\n   * Get the resolved data collection configuration.\n   */\n  getDataCollectionOptions() {\n    return this._dataCollection;\n  }\n  /**\n   * Get the SDK metadata.\n   * @see SdkMetadata\n   */\n  getSdkMetadata() {\n    return this._options._metadata;\n  }\n  /**\n   * Returns the transport that is used by the client.\n   * Please note that the transport gets lazy initialized so it will only be there once the first event has been sent.\n   */\n  getTransport() {\n    return this._transport;\n  }\n  /**\n   * Wait for all events to be sent or the timeout to expire, whichever comes first.\n   *\n   * @param timeout Maximum time in ms the client should wait for events to be flushed. Omitting this parameter will\n   *   cause the client to wait until all events are sent before resolving the promise.\n   * @returns A promise that will resolve with `true` if all events are sent before the timeout, or `false` if there are\n   * still events in the queue when the timeout is reached.\n   */\n  // @ts-expect-error - PromiseLike is a subset of Promise\n  async flush(timeout) {\n    const transport = this._transport;\n    this.emit(\"flush\");\n    if (!transport) {\n      return true;\n    }\n    const clientFinished = await this._isClientDoneProcessing(timeout);\n    const transportFlushed = await transport.flush(timeout);\n    return clientFinished && transportFlushed;\n  }\n  /**\n   * Flush the event queue and set the client to `enabled = false`. See {@link Client.flush}.\n   *\n   * @param {number} timeout Maximum time in ms the client should wait before shutting down. Omitting this parameter will cause\n   *   the client to wait until all events are sent before disabling itself.\n   * @returns {Promise<boolean>} A promise which resolves to `true` if the flush completes successfully before the timeout, or `false` if\n   * it doesn't.\n   */\n  // @ts-expect-error - PromiseLike is a subset of Promise\n  async close(timeout) {\n    Object.defineProperty(this, CLOSED_CLIENT_SYMBOL, { value: true });\n    const result = await this.flush(timeout);\n    this.getOptions().enabled = false;\n    this.emit(\"close\");\n    return result;\n  }\n  /**\n   * Get all installed event processors.\n   */\n  getEventProcessors() {\n    return this._eventProcessors;\n  }\n  /**\n   * Adds an event processor that applies to any event processed by this client.\n   */\n  addEventProcessor(eventProcessor) {\n    this._eventProcessors.push(eventProcessor);\n  }\n  /**\n   * Initialize this client.\n   * Call this after the client was set on a scope.\n   */\n  init() {\n    if (this._isEnabled() || // Force integrations to be setup even if no DSN was set when we have\n    // Spotlight enabled. This is particularly important for browser as we\n    // don't support the `spotlight` option there and rely on the users\n    // adding the `spotlightBrowserIntegration()` to their integrations which\n    // wouldn't get initialized with the check below when there's no DSN set.\n    this._options.integrations.some(({ name }) => name.startsWith(\"Spotlight\"))) {\n      this._setupIntegrations();\n      maybeWarnAboutIgnoredTransactionOptions(this._options);\n    }\n  }\n  /**\n   * Gets an installed integration by its name.\n   *\n   * @returns {Integration|undefined} The installed integration or `undefined` if no integration with that `name` was installed.\n   */\n  getIntegrationByName(integrationName) {\n    return this._integrations[integrationName];\n  }\n  /**\n   * Returns the names of all installed integrations.\n   */\n  getIntegrationNames() {\n    return Object.keys(this._integrations);\n  }\n  /**\n   * Add an integration to the client.\n   * This can be used to e.g. lazy load integrations.\n   * In most cases, this should not be necessary,\n   * and you're better off just passing the integrations via `integrations: []` at initialization time.\n   * However, if you find the need to conditionally load & add an integration, you can use `addIntegration` to do so.\n   */\n  addIntegration(integration) {\n    const isAlreadyInstalled = this._integrations[integration.name];\n    if (!isAlreadyInstalled && integration.beforeSetup) {\n      integration.beforeSetup(this);\n    }\n    setupIntegration(this, integration, this._integrations);\n    if (!isAlreadyInstalled) {\n      afterSetupIntegrations(this, [integration]);\n    }\n  }\n  /**\n   * Send a fully prepared event to Sentry.\n   */\n  sendEvent(event, hint = {}) {\n    this.emit(\"beforeSendEvent\", event, hint);\n    const genAiSpanItem = extractGenAiSpansFromEvent(event, this);\n    let env = createEventEnvelope(event, this._dsn, this._options._metadata, this._options.tunnel);\n    if (!isInternalException(hint)) {\n      for (const attachment of hint.attachments || []) {\n        env = addItemToEnvelope(env, createAttachmentEnvelopeItem(attachment));\n      }\n    }\n    if (genAiSpanItem) {\n      env = addItemToEnvelope(env, genAiSpanItem);\n    }\n    this.sendEnvelope(env).then((sendResponse) => this.emit(\"afterSendEvent\", event, sendResponse));\n  }\n  /**\n   * Send a session or session aggregrates to Sentry.\n   */\n  sendSession(session) {\n    const { release: clientReleaseOption, environment: clientEnvironmentOption = DEFAULT_ENVIRONMENT } = this._options;\n    if (\"aggregates\" in session) {\n      const sessionAttrs = session.attrs || {};\n      if (!sessionAttrs.release && !clientReleaseOption) {\n        DEBUG_BUILD && debug.warn(MISSING_RELEASE_FOR_SESSION_ERROR);\n        return;\n      }\n      sessionAttrs.release = sessionAttrs.release || clientReleaseOption;\n      sessionAttrs.environment = sessionAttrs.environment || clientEnvironmentOption;\n      session.attrs = sessionAttrs;\n    } else {\n      if (!session.release && !clientReleaseOption) {\n        DEBUG_BUILD && debug.warn(MISSING_RELEASE_FOR_SESSION_ERROR);\n        return;\n      }\n      session.release = session.release || clientReleaseOption;\n      session.environment = session.environment || clientEnvironmentOption;\n    }\n    this.emit(\"beforeSendSession\", session);\n    const env = createSessionEnvelope(session, this._dsn, this._options._metadata, this._options.tunnel);\n    this.sendEnvelope(env);\n  }\n  /**\n   * Record on the client that an event got dropped (ie, an event that will not be sent to Sentry).\n   */\n  recordDroppedEvent(reason, category, count = 1) {\n    if (this._options.sendClientReports) {\n      const key = `${reason}:${category}`;\n      DEBUG_BUILD && debug.log(`Recording outcome: \"${key}\"${count > 1 ? ` (${count} times)` : \"\"}`);\n      this._outcomes[key] = (this._outcomes[key] || 0) + count;\n    }\n  }\n  /**\n   * Register a hook on this client.\n   */\n  on(hook, callback) {\n    const hookCallbacks = this._hooks[hook] = this._hooks[hook] || /* @__PURE__ */ new Set();\n    const uniqueCallback = (...args) => callback(...args);\n    hookCallbacks.add(uniqueCallback);\n    return () => {\n      hookCallbacks.delete(uniqueCallback);\n    };\n  }\n  /**\n   * Emit a hook that was previously registered via `on()`.\n   */\n  emit(hook, ...rest) {\n    const callbacks = this._hooks[hook];\n    if (callbacks) {\n      callbacks.forEach((callback) => callback(...rest));\n    }\n  }\n  /**\n   * Send an envelope to Sentry.\n   */\n  // @ts-expect-error - PromiseLike is a subset of Promise\n  async sendEnvelope(envelope) {\n    this.emit(\"beforeEnvelope\", envelope);\n    if (this._isEnabled() && this._transport) {\n      try {\n        const result = await this._transport.send(envelope);\n        this.emit(\"afterEnvelope\", envelope);\n        return result;\n      } catch (reason) {\n        DEBUG_BUILD && debug.error(\"Error while sending envelope:\", reason);\n        return {};\n      }\n    }\n    DEBUG_BUILD && debug.error(\"Transport disabled\");\n    return {};\n  }\n  /**\n   * Register a cleanup function to be called when the client is disposed.\n   * This is useful for integrations that need to clean up global state.\n   *\n   * NOTE: This is a no-op in the base `Client` class. Subclasses like `ServerRuntimeClient`\n   * override this method to actually register and execute cleanup callbacks.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  registerCleanup(callback) {\n  }\n  /**\n   * Disposes of the client and releases all resources.\n   *\n   * Subclasses should override this method to clean up their own resources, including invoking\n   * any callbacks registered via {@link Client.registerCleanup}. The base implementation is a\n   * no-op and does NOT execute registered cleanup callbacks.\n   *\n   * After calling dispose(), the client should not be used anymore.\n   */\n  dispose() {\n  }\n  /* eslint-enable @typescript-eslint/unified-signatures */\n  /** Setup integrations for this client. */\n  _setupIntegrations() {\n    const { integrations } = this._options;\n    this._integrations = setupIntegrations(this, integrations);\n    afterSetupIntegrations(this, integrations);\n  }\n  /** Updates existing session based on the provided event */\n  _updateSessionFromEvent(session, event) {\n    let unhandled = event.level === \"fatal\";\n    let errored = false;\n    const exceptions = event.exception?.values;\n    if (exceptions) {\n      errored = true;\n      unhandled = false;\n      for (const ex of exceptions) {\n        if (ex.mechanism?.handled === false) {\n          unhandled = true;\n          break;\n        }\n      }\n    }\n    const sessionNonTerminal = session.status === \"ok\";\n    const shouldUpdateAndSend = sessionNonTerminal && session.errors === 0 || sessionNonTerminal && unhandled;\n    if (shouldUpdateAndSend) {\n      updateSession(session, {\n        ...unhandled && { status: this._unhandledSessionStatus },\n        errors: session.errors || Number(errored || unhandled)\n      });\n      this.captureSession(session);\n    }\n  }\n  /**\n   * Determine if the client is finished processing. Returns a promise because it will wait `timeout` ms before saying\n   * \"no\" (resolving to `false`) in order to give the client a chance to potentially finish first.\n   *\n   * @param timeout The time, in ms, after which to resolve to `false` if the client is still busy. Passing `0` (or not\n   * passing anything) will make the promise wait as long as it takes for processing to finish before resolving to\n   * `true`.\n   * @returns A promise which will resolve to `true` if processing is already done or finishes before the timeout, and\n   * `false` otherwise\n   */\n  async _isClientDoneProcessing(timeout) {\n    let ticked = 0;\n    while (!timeout || ticked < timeout) {\n      await new Promise((resolve) => setTimeout(resolve, 1));\n      if (!this._numProcessing) {\n        return true;\n      }\n      ticked++;\n    }\n    return false;\n  }\n  /** Determines whether this SDK is enabled and a transport is present. */\n  _isEnabled() {\n    return this.getOptions().enabled !== false && this._transport !== void 0;\n  }\n  /**\n   * Adds common information to events.\n   *\n   * The information includes release and environment from `options`,\n   * breadcrumbs and context (extra, tags and user) from the scope.\n   *\n   * Information that is already present in the event is never overwritten. For\n   * nested objects, such as the context, keys are merged.\n   *\n   * @param event The original event.\n   * @param hint May contain additional information about the original exception.\n   * @param currentScope A scope containing event metadata.\n   * @returns A new event with more information.\n   */\n  _prepareEvent(event, hint, currentScope, isolationScope) {\n    const options = this.getOptions();\n    const integrations = this.getIntegrationNames();\n    if (!hint.integrations && integrations.length) {\n      hint.integrations = integrations;\n    }\n    this.emit(\"preprocessEvent\", event, hint);\n    if (!event.type) {\n      isolationScope.setLastEventId(event.event_id || hint.event_id);\n    }\n    return prepareEvent(options, event, hint, currentScope, this, isolationScope).then((evt) => {\n      if (evt === null) {\n        return evt;\n      }\n      this.emit(\"postprocessEvent\", evt, hint);\n      evt.contexts = {\n        trace: { ...evt.contexts?.trace, ...getTraceContextFromScope(currentScope) },\n        ...evt.contexts\n      };\n      const dynamicSamplingContext = getDynamicSamplingContextFromScope(this, currentScope);\n      evt.sdkProcessingMetadata = {\n        dynamicSamplingContext,\n        ...evt.sdkProcessingMetadata\n      };\n      return evt;\n    });\n  }\n  /**\n   * Processes the event and logs an error in case of rejection\n   * @param event\n   * @param hint\n   * @param scope\n   */\n  _captureEvent(event, hint = {}, currentScope = getCurrentScope(), isolationScope = getIsolationScope()) {\n    if (DEBUG_BUILD && isErrorEvent(event)) {\n      debug.log(`Captured error event \\`${getPossibleEventMessages(event)[0] || \"<unknown>\"}\\``);\n    }\n    return this._processEvent(event, hint, currentScope, isolationScope).then(\n      (finalEvent) => {\n        return finalEvent.event_id;\n      },\n      (reason) => {\n        if (DEBUG_BUILD) {\n          if (_isDoNotSendEventError(reason)) {\n            debug.log(reason.message);\n          } else if (_isInternalError(reason)) {\n            debug.warn(reason.message);\n          } else {\n            debug.warn(reason);\n          }\n        }\n        return void 0;\n      }\n    );\n  }\n  /**\n   * Processes an event (either error or message) and sends it to Sentry.\n   *\n   * This also adds breadcrumbs and context information to the event. However,\n   * platform specific meta data (such as the User's IP address) must be added\n   * by the SDK implementor.\n   *\n   *\n   * @param event The event to send to Sentry.\n   * @param hint May contain additional information about the original exception.\n   * @param currentScope A scope containing event metadata.\n   * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.\n   */\n  _processEvent(event, hint, currentScope, isolationScope) {\n    const options = this.getOptions();\n    const { sampleRate } = options;\n    const isTransaction = isTransactionEvent(event);\n    const isError = isErrorEvent(event);\n    const eventType = event.type || \"error\";\n    const beforeSendLabel = `before send for type \\`${eventType}\\``;\n    let beforeSendDropReason = \"before_send\";\n    let ignoredSpanCount = 0;\n    const parsedSampleRate = typeof sampleRate === \"undefined\" ? void 0 : parseSampleRate(sampleRate);\n    const dataCategory = getDataCategoryByType(event.type);\n    let preparedSpanCount = 0;\n    return this._prepareEvent(event, hint, currentScope, isolationScope).then((prepared) => {\n      if (prepared === null) {\n        throw _makeDoNotSendEventError(\"An event processor returned `null`, will not send event.\");\n      }\n      preparedSpanCount = prepared.spans?.length || 0;\n      if (isInternalException(hint)) {\n        return prepared;\n      }\n      return processBeforeSend(\n        options,\n        prepared,\n        hint,\n        (reason) => {\n          beforeSendDropReason = reason;\n        },\n        (count) => {\n          ignoredSpanCount = count;\n        }\n      );\n    }).then((processedEvent) => {\n      if (ignoredSpanCount) {\n        this.recordDroppedEvent(\"ignored\", \"span\", ignoredSpanCount);\n      }\n      const isValidEvent = isPlainObject(processedEvent);\n      if (!isValidEvent || processedEvent === null) {\n        this.recordDroppedEvent(beforeSendDropReason, dataCategory);\n        if (isTransaction) {\n          this.recordDroppedEvent(beforeSendDropReason, \"span\", 1 + preparedSpanCount - ignoredSpanCount);\n        }\n        if (processedEvent !== null) {\n          throw _makeInternalError(`${beforeSendLabel} must return \\`null\\` or a valid event.`);\n        }\n        const dropMessage = beforeSendDropReason === \"ignored\" ? \"Transaction matched `ignoreSpans`\" : `${beforeSendLabel} ${beforeSendDropReason === \"callback_error\" ? \"threw an error\" : \"returned `null`\"}`;\n        throw _makeDoNotSendEventError(`${dropMessage}, will not send event.`);\n      }\n      const session = currentScope.getSession() || isolationScope.getSession();\n      if (isError && session) {\n        this._updateSessionFromEvent(session, processedEvent);\n      }\n      if (isError && typeof parsedSampleRate === \"number\" && safeMathRandom() > parsedSampleRate) {\n        this.recordDroppedEvent(\"sample_rate\", \"error\");\n        throw _makeDoNotSendEventError(\n          `Discarding event because it's not included in the random sample (sampling rate = ${sampleRate})`\n        );\n      }\n      if (isTransaction) {\n        const droppedSpanCount = preparedSpanCount - ignoredSpanCount - (processedEvent.spans?.length || 0);\n        if (droppedSpanCount > 0) {\n          this.recordDroppedEvent(\"before_send\", \"span\", droppedSpanCount);\n        }\n      }\n      const transactionInfo = processedEvent.transaction_info;\n      if (isTransaction && transactionInfo && processedEvent.transaction !== event.transaction) {\n        const source = \"custom\";\n        processedEvent.transaction_info = {\n          ...transactionInfo,\n          source\n        };\n      }\n      this.sendEvent(processedEvent, hint);\n      return processedEvent;\n    }).then(null, (reason) => {\n      if (_isDoNotSendEventError(reason) || _isInternalError(reason)) {\n        throw reason;\n      }\n      this.captureException(reason, {\n        mechanism: {\n          handled: false,\n          type: \"internal\"\n        },\n        data: {\n          __sentry__: true\n        },\n        originalException: reason\n      });\n      throw _makeInternalError(\n        `Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\nReason: ${reason}`\n      );\n    });\n  }\n  /**\n   * Occupies the client with processing and event\n   */\n  _process(taskProducer, dataCategory) {\n    this._numProcessing++;\n    void this._promiseBuffer.add(taskProducer).then(\n      (value) => {\n        this._numProcessing--;\n        return value;\n      },\n      (reason) => {\n        this._numProcessing--;\n        if (reason === SENTRY_BUFFER_FULL_ERROR) {\n          this.recordDroppedEvent(\"queue_overflow\", dataCategory);\n        }\n        return reason;\n      }\n    );\n  }\n  /**\n   * Clears outcomes on this client and returns them.\n   */\n  _clearOutcomes() {\n    const outcomes = this._outcomes;\n    this._outcomes = {};\n    return Object.entries(outcomes).map(([key, quantity]) => {\n      const [reason, category] = key.split(\":\");\n      return {\n        reason,\n        category,\n        quantity\n      };\n    });\n  }\n  /**\n   * Sends client reports as an envelope.\n   */\n  _flushOutcomes() {\n    DEBUG_BUILD && debug.log(\"Flushing outcomes...\");\n    const outcomes = this._clearOutcomes();\n    if (outcomes.length === 0) {\n      DEBUG_BUILD && debug.log(\"No outcomes to send\");\n      return;\n    }\n    if (!this._dsn) {\n      DEBUG_BUILD && debug.log(\"No dsn provided, will not send outcomes\");\n      return;\n    }\n    DEBUG_BUILD && debug.log(\"Sending outcomes:\", outcomes);\n    const envelope = createClientReportEnvelope(outcomes, this._options.tunnel && dsnToString(this._dsn));\n    this.sendEnvelope(envelope);\n  }\n}\nfunction processBeforeSend(options, event, hint, onDrop, onIgnoredSpans) {\n  const {\n    beforeSend,\n    ignoreSpans,\n    // oxlint-disable-next-line typescript/no-deprecated\n    beforeSendTransaction\n  } = options;\n  const beforeSendSpan = isStaticBeforeSendSpanCallback(options.beforeSendSpan) && options.beforeSendSpan;\n  let processedEvent = event;\n  if (isErrorEvent(processedEvent) && beforeSend) {\n    const errorEvent = processedEvent;\n    return safeCallback(\n      DEBUG_BUILD ? \"The `beforeSend` callback threw an error, dropping the event:\" : \"\",\n      () => beforeSend(errorEvent, hint),\n      () => {\n        onDrop(\"callback_error\");\n        return null;\n      }\n    );\n  }\n  if (isTransactionEvent(processedEvent)) {\n    if (beforeSendSpan || ignoreSpans) {\n      const rootSpanJson = convertTransactionEventToSpanJson(processedEvent);\n      if (ignoreSpans?.length && shouldIgnoreSpan(\n        { description: rootSpanJson.description, op: rootSpanJson.op, attributes: rootSpanJson.data },\n        ignoreSpans\n      )) {\n        onDrop(\"ignored\");\n        return null;\n      }\n      if (beforeSendSpan) {\n        const processedRootSpanJson = applyBeforeSendSpanCallback(rootSpanJson, beforeSendSpan);\n        processedEvent = merge(event, convertSpanJsonToTransactionEvent(processedRootSpanJson));\n      }\n      if (processedEvent.spans) {\n        const processedSpans = [];\n        const initialSpans = processedEvent.spans;\n        for (const span of initialSpans) {\n          if (ignoreSpans?.length && shouldIgnoreSpan({ description: span.description, op: span.op, attributes: span.data }, ignoreSpans)) {\n            reparentChildSpans(initialSpans, span);\n            continue;\n          }\n          if (beforeSendSpan) {\n            processedSpans.push(applyBeforeSendSpanCallback(span, beforeSendSpan));\n          } else {\n            processedSpans.push(span);\n          }\n        }\n        onIgnoredSpans(initialSpans.length - processedSpans.length);\n        processedEvent.spans = processedSpans;\n      }\n    }\n    if (beforeSendTransaction) {\n      return safeCallback(\n        DEBUG_BUILD ? \"The `beforeSendTransaction` callback threw an error, dropping the event:\" : \"\",\n        () => beforeSendTransaction(processedEvent, hint),\n        () => {\n          onDrop(\"callback_error\");\n          return null;\n        }\n      );\n    }\n  }\n  return processedEvent;\n}\nfunction isErrorEvent(event) {\n  return event.type === void 0;\n}\nfunction isTransactionEvent(event) {\n  return event.type === \"transaction\";\n}\nfunction estimateMetricSizeInBytes(metric) {\n  let weight = 0;\n  if (metric.name) {\n    weight += metric.name.length * 2;\n  }\n  weight += 8;\n  return weight + estimateAttributesSizeInBytes(metric.attributes);\n}\nfunction estimateLogSizeInBytes(log) {\n  let weight = 0;\n  if (log.message) {\n    weight += log.message.length * 2;\n  }\n  return weight + estimateAttributesSizeInBytes(log.attributes);\n}\nfunction estimateAttributesSizeInBytes(attributes) {\n  if (!attributes) {\n    return 0;\n  }\n  let weight = 0;\n  Object.values(attributes).forEach((value) => {\n    if (Array.isArray(value)) {\n      weight += value.length * estimatePrimitiveSizeInBytes(value[0]);\n    } else if (isPrimitive(value)) {\n      weight += estimatePrimitiveSizeInBytes(value);\n    } else {\n      weight += 100;\n    }\n  });\n  return weight;\n}\nfunction estimatePrimitiveSizeInBytes(value) {\n  if (typeof value === \"string\") {\n    return value.length * 2;\n  } else if (typeof value === \"number\") {\n    return 8;\n  } else if (typeof value === \"boolean\") {\n    return 4;\n  }\n  return 0;\n}\n\nexport { Client, isClientClosed };\n//# sourceMappingURL=client.js.map\n","import { isClientClosed } from './client.js';\nimport { getClient, getCurrentScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { consoleSandbox, debug } from './utils/debug-logger.js';\n\nfunction initAndBind(clientClass, options) {\n  if (options.debug === true) {\n    if (DEBUG_BUILD) {\n      debug.enable();\n    } else {\n      consoleSandbox(() => {\n        console.warn(\"[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.\");\n      });\n    }\n  }\n  warnIfClientIsActive();\n  const scope = getCurrentScope();\n  scope.update(options.initialScope);\n  const client = new clientClass(options);\n  setCurrentClient(client);\n  client.init();\n  return client;\n}\nfunction getActiveClient() {\n  const client = getClient();\n  return client && !isClientClosed(client) ? client : void 0;\n}\nfunction warnIfClientIsActive() {\n  if (getActiveClient()) {\n    consoleSandbox(() => {\n      console.warn(\n        \"[Sentry] `Sentry.init()` was called more than once. The new client replaces the active client, but the active client is not closed, so state from both can mix. Call `Sentry.init()` only once, or call `await Sentry.close()` before you call it again.\"\n      );\n    });\n  }\n}\nfunction setCurrentClient(client) {\n  getCurrentScope().setClient(client);\n}\n\nexport { getActiveClient, initAndBind, setCurrentClient, warnIfClientIsActive };\n//# sourceMappingURL=sdk.js.map\n","const FILTERED_VALUE = \"[Filtered]\";\nconst SENSITIVE_KEY_SNIPPETS = [\n  \"auth\",\n  \"token\",\n  \"secret\",\n  \"session\",\n  // for the user_session cookie\n  \"password\",\n  \"passwd\",\n  \"pwd\",\n  \"key\",\n  \"jwt\",\n  \"bearer\",\n  \"sso\",\n  \"saml\",\n  \"csrf\",\n  \"xsrf\",\n  \"credentials\",\n  \"sid\",\n  \"identity\",\n  // Always treat cookie headers as sensitive in case individual key-value cookie pairs cannot properly be extracted\n  \"set-cookie\",\n  \"cookie\"\n];\nconst SENSITIVE_COOKIE_NAME_SNIPPETS = [\n  // Express / Connect default session cookie\n  \".sid\",\n  // Opaque session ids (PHPSESSID, ASPSESSIONID*, BIGipServer*, *sessid*, …)\n  \"sessid\",\n  // Laravel etc. \"remember me\" tokens\n  \"remember\",\n  // OIDC / OAuth auxiliary (`oauth*` covered by header snippet `auth`)\n  \"oidc\",\n  \"pkce\",\n  \"nonce\",\n  // RFC 6265bis high-security cookie name prefixes\n  \"__secure-\",\n  \"__host-\",\n  // Load balancer / CDN sticky-session cookies (opaque routing tokens)\n  \"awsalb\",\n  \"awselb\",\n  \"akamai\",\n  // BaaS / IdP session cookies (names often omit \"session\")\n  \"__stripe\",\n  \"cognito\",\n  \"firebase\",\n  \"supabase\",\n  \"sb-\",\n  // Step-up / MFA cookies\n  \"mfa\",\n  \"2fa\"\n];\n\nexport { FILTERED_VALUE, SENSITIVE_COOKIE_NAME_SNIPPETS, SENSITIVE_KEY_SNIPPETS };\n//# sourceMappingURL=filtering-snippets.js.map\n","import { FILTERED_VALUE, SENSITIVE_KEY_SNIPPETS } from './filtering-snippets.js';\n\nfunction isSensitiveKey(lower, denySnippets) {\n  return denySnippets.some((snippet) => lower.includes(snippet));\n}\nfunction shouldFilterDataKey(key, behavior, additionalDenyTerms) {\n  if (behavior === false) {\n    return true;\n  }\n  const lowerKey = key.toLowerCase();\n  const denySnippets = additionalDenyTerms != null ? [...SENSITIVE_KEY_SNIPPETS, ...additionalDenyTerms] : SENSITIVE_KEY_SNIPPETS;\n  if (isSensitiveKey(lowerKey, denySnippets)) {\n    return true;\n  }\n  if (behavior === true) {\n    return false;\n  }\n  const terms = \"deny\" in behavior ? behavior.deny : behavior.allow;\n  const matchesConfiguredTerm = terms.some((term) => lowerKey.includes(term.toLowerCase()));\n  return \"deny\" in behavior ? matchesConfiguredTerm : !matchesConfiguredTerm;\n}\nfunction filterKeyValueData(data, behavior, additionalDenyTerms) {\n  if (behavior === false) {\n    return {};\n  }\n  const result = {};\n  for (const key of Object.keys(data)) {\n    result[key] = shouldFilterDataKey(key, behavior, additionalDenyTerms) ? FILTERED_VALUE : data[key];\n  }\n  return result;\n}\n\nexport { filterKeyValueData, shouldFilterDataKey };\n//# sourceMappingURL=filterKeyValueData.js.map\n","import { FILTERED_VALUE } from './filtering-snippets.js';\nimport { shouldFilterDataKey } from './filterKeyValueData.js';\n\nfunction filterQueryParams(queryString, behavior) {\n  if (!queryString || behavior === false) {\n    return void 0;\n  }\n  return queryString.split(\"&\").map((pair) => {\n    const separatorIndex = pair.indexOf(\"=\");\n    const encodedKey = separatorIndex === -1 ? pair : pair.slice(0, separatorIndex);\n    const key = new URLSearchParams(`${encodedKey}=`).keys().next().value;\n    return key !== void 0 && shouldFilterDataKey(key, behavior) ? `${encodedKey}=${FILTERED_VALUE}` : pair;\n  }).join(\"&\");\n}\n\nexport { filterQueryParams };\n//# sourceMappingURL=filterQueryParams.js.map\n","import { filterQueryParams } from './filterQueryParams.js';\n\nfunction filterUrlQuery(url, behavior) {\n  const fragmentStart = url.indexOf(\"#\");\n  const queryEnd = fragmentStart === -1 ? url.length : fragmentStart;\n  const queryStart = url.indexOf(\"?\");\n  if (queryStart === -1 || queryStart > queryEnd) {\n    return url;\n  }\n  const prefix = url.slice(0, queryStart);\n  const query = url.slice(queryStart + 1, queryEnd);\n  const suffix = url.slice(queryEnd);\n  const filtered = filterQueryParams(query, behavior);\n  return filtered ? `${prefix}?${filtered}${suffix}` : `${prefix}${suffix}`;\n}\n\nexport { filterUrlQuery };\n//# sourceMappingURL=filterUrlQuery.js.map\n","import { getClient } from '../../currentScopes.js';\nimport { filterQueryParams } from './filterQueryParams.js';\nimport { filterUrlQuery } from './filterUrlQuery.js';\n\nfunction urlQueryParamsBehavior(client) {\n  return (client ?? getClient())?.getDataCollectionOptions().urlQueryParams ?? true;\n}\nfunction filterCollectedUrl(url, client) {\n  return url === void 0 ? void 0 : filterUrlQuery(url, urlQueryParamsBehavior(client));\n}\nfunction filterCollectedUrlQuery(query, client) {\n  return query ? filterQueryParams(query, urlQueryParamsBehavior(client)) : void 0;\n}\n\nexport { filterCollectedUrl, filterCollectedUrlQuery };\n//# sourceMappingURL=filterCollectedUrl.js.map\n","import { HTTP_ROUTE, URL_TEMPLATE, HTTP_REQUEST_METHOD, URL_FULL, URL_QUERY, URL_FRAGMENT, URL_PATH, URL_PORT, URL_SCHEME, SERVER_ADDRESS, URL_DOMAIN, SENTRY_SEGMENT_NAME_SOURCE, SENTRY_ORIGIN } from '@sentry/conventions/attributes';\nimport { filterCollectedUrl, filterCollectedUrlQuery } from './data-collection/filterCollectedUrl.js';\n\nconst DEFAULT_BASE_URL = \"thismessage:/\";\nfunction isURLObjectRelative(url) {\n  return \"isRelative\" in url;\n}\nfunction parseStringToURLObject(url, urlBase) {\n  const isRelative = url.indexOf(\"://\") <= 0 && url.indexOf(\"//\") !== 0;\n  const base = urlBase ?? (isRelative ? DEFAULT_BASE_URL : void 0);\n  try {\n    if (\"canParse\" in URL && !URL.canParse(url, base)) {\n      return void 0;\n    }\n    const fullUrlObject = new URL(url, base);\n    if (isRelative) {\n      return {\n        isRelative,\n        pathname: fullUrlObject.pathname,\n        search: fullUrlObject.search,\n        hash: fullUrlObject.hash\n      };\n    }\n    return fullUrlObject;\n  } catch {\n  }\n  return void 0;\n}\nfunction getSanitizedUrlStringFromUrlObject(url) {\n  if (isURLObjectRelative(url)) {\n    return url.pathname;\n  }\n  const newUrl = new URL(url);\n  newUrl.search = \"\";\n  newUrl.hash = \"\";\n  if ([\"80\", \"443\"].includes(newUrl.port)) {\n    newUrl.port = \"\";\n  }\n  if (newUrl.password) {\n    newUrl.password = \"%filtered%\";\n  }\n  if (newUrl.username) {\n    newUrl.username = \"%filtered%\";\n  }\n  return newUrl.toString();\n}\nfunction getUrlQuery(query) {\n  return query?.replace(/^\\?/, \"\") || void 0;\n}\nfunction getUrlFragment(fragment) {\n  return fragment?.replace(/^#/, \"\") || void 0;\n}\nfunction getUrlDomain(url, base) {\n  try {\n    return new URL(url, base).hostname || void 0;\n  } catch {\n    return void 0;\n  }\n}\nfunction getHttpSpanNameFromUrlObject(urlObject, kind, request, routeName) {\n  const method = request?.method?.toUpperCase() ?? \"GET\";\n  const route = routeName ? routeName : urlObject ? kind === \"client\" ? getSanitizedUrlStringFromUrlObject(urlObject) : urlObject.pathname : \"/\";\n  return `${method} ${route}`;\n}\nfunction getHttpSpanDetailsFromUrlObject(urlObject, kind, spanOrigin, request, routeName, client) {\n  const attributes = {\n    [SENTRY_ORIGIN]: spanOrigin\n  };\n  let nameSource = \"url\";\n  if (routeName) {\n    attributes[kind === \"server\" ? HTTP_ROUTE : URL_TEMPLATE] = routeName;\n    nameSource = \"route\";\n  }\n  if (request?.method) {\n    attributes[HTTP_REQUEST_METHOD] = request.method.toUpperCase();\n  }\n  if (urlObject) {\n    attributes[URL_FULL] = filterCollectedUrl(\n      isURLObjectRelative(urlObject) ? getSanitizedUrlStringFromUrlObject(urlObject) : urlObject.href,\n      client\n    );\n    attributes[URL_QUERY] = filterCollectedUrlQuery(getUrlQuery(urlObject.search), client);\n    attributes[URL_FRAGMENT] = getUrlFragment(urlObject.hash);\n    if (urlObject.pathname) {\n      attributes[URL_PATH] = urlObject.pathname;\n      if (urlObject.pathname === \"/\") {\n        nameSource = \"route\";\n      }\n    }\n    if (!isURLObjectRelative(urlObject)) {\n      if (urlObject.port) {\n        attributes[URL_PORT] = urlObject.port;\n      }\n      if (urlObject.protocol) {\n        attributes[URL_SCHEME] = urlObject.protocol;\n      }\n      if (urlObject.hostname) {\n        attributes[kind === \"server\" ? SERVER_ADDRESS : URL_DOMAIN] = urlObject.hostname;\n      }\n    }\n  }\n  if (kind === \"server\") {\n    attributes[SENTRY_SEGMENT_NAME_SOURCE] = nameSource;\n  }\n  return [getHttpSpanNameFromUrlObject(urlObject, kind, request, routeName), attributes];\n}\nfunction parseUrl(url) {\n  if (!url) {\n    return {};\n  }\n  const match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n  if (!match) {\n    return {};\n  }\n  const query = match[6] || \"\";\n  const fragment = match[8] || \"\";\n  return {\n    host: match[4],\n    path: match[5],\n    protocol: match[2],\n    search: query,\n    hash: fragment,\n    relative: match[5] + query + fragment\n    // everything minus origin\n  };\n}\nfunction stripUrlQueryAndFragment(urlPath) {\n  return urlPath.split(/[?#]/, 1)[0];\n}\nfunction getSanitizedUrlString(url) {\n  const { protocol, host, path } = url;\n  const filteredHost = host?.replace(/^.*@/, \"[filtered]:[filtered]@\").replace(/(:80)$/, \"\").replace(/(:443)$/, \"\") || \"\";\n  return `${protocol ? `${protocol}://` : \"\"}${filteredHost}${path || \"\"}`;\n}\nfunction stripDataUrlContent(url, includeDataPrefix = true) {\n  if (url.startsWith(\"data:\")) {\n    const match = url.match(/^data:([^;,]+)/);\n    const mimeType = match ? match[1] : \"text/plain\";\n    const isBase64 = url.includes(\";base64,\");\n    const dataStart = url.indexOf(\",\");\n    let dataPrefix = \"\";\n    if (includeDataPrefix && dataStart !== -1) {\n      const data = url.slice(dataStart + 1);\n      dataPrefix = data.length > 10 ? `${data.slice(0, 10)}... [truncated]` : data;\n    }\n    return `data:${mimeType}${isBase64 ? \",base64\" : \"\"}${dataPrefix ? `,${dataPrefix}` : \"\"}`;\n  }\n  return url;\n}\n\nexport { getHttpSpanDetailsFromUrlObject, getSanitizedUrlString, getSanitizedUrlStringFromUrlObject, getUrlDomain, getUrlFragment, getUrlQuery, isURLObjectRelative, parseStringToURLObject, parseUrl, stripDataUrlContent, stripUrlQueryAndFragment };\n//# sourceMappingURL=url.js.map\n","import { parseStringToURLObject, isURLObjectRelative } from './url.js';\n\nfunction isSentryRequestUrl(url, client) {\n  const dsn = client?.getDsn();\n  const tunnel = client?.getOptions().tunnel;\n  return checkDsn(url, dsn) || checkTunnel(url, tunnel);\n}\nfunction checkTunnel(url, tunnel) {\n  if (!tunnel) {\n    return false;\n  }\n  return removeTrailingSlash(url) === removeTrailingSlash(tunnel);\n}\nfunction checkDsn(url, dsn) {\n  const urlParts = parseStringToURLObject(url);\n  if (!urlParts || isURLObjectRelative(urlParts)) {\n    return false;\n  }\n  if (!dsn) {\n    return false;\n  }\n  return hostnameMatchesDsnHost(urlParts.hostname, dsn.host) && /(^|&|\\?)sentry_key=/.test(urlParts.search);\n}\nfunction hostnameMatchesDsnHost(hostname, dsnHost) {\n  return hostname === dsnHost || dsnHost.length > 0 && hostname.endsWith(`.${dsnHost}`);\n}\nfunction removeTrailingSlash(str) {\n  return str[str.length - 1] === \"/\" ? str.slice(0, -1) : str;\n}\n\nexport { isSentryRequestUrl };\n//# sourceMappingURL=isSentryRequestUrl.js.map\n","function addAutoIpAddressToSession(session) {\n  if (\"aggregates\" in session) {\n    if (session.attrs?.[\"ip_address\"] === void 0) {\n      session.attrs = {\n        ...session.attrs,\n        ip_address: \"{{auto}}\"\n      };\n    }\n  } else {\n    if (session.ipAddress === void 0) {\n      session.ipAddress = \"{{auto}}\";\n    }\n  }\n}\n\nexport { addAutoIpAddressToSession };\n//# sourceMappingURL=ipAddress.js.map\n","import { SDK_VERSION } from './version.js';\n\nfunction applySdkMetadata(options, name, names = [name], source = \"npm\") {\n  const sdk = (options._metadata = options._metadata || {}).sdk = options._metadata.sdk || {};\n  if (!sdk.name) {\n    sdk.name = `sentry.javascript.${name}`;\n    sdk.packages = names.map((name2) => ({\n      name: `${source}:@sentry/${name2}`,\n      version: SDK_VERSION\n    }));\n    sdk.version = SDK_VERSION;\n  }\n}\n\nexport { applySdkMetadata };\n//# sourceMappingURL=sdkMetadata.js.map\n","import { getAsyncContextStrategy } from '../asyncContext/index.js';\nimport { getMainCarrier } from '../carrier.js';\nimport { getClient, getCurrentScope, hasExternalPropagationContext } from '../currentScopes.js';\nimport { isEnabled } from '../exports.js';\nimport { debug } from './debug-logger.js';\nimport { getActiveSpan, spanToTraceHeader, spanToTraceparentHeader } from './spanUtils.js';\nimport { hasSpansEnabled } from './hasSpansEnabled.js';\nimport { getDynamicSamplingContextFromSpan, getDynamicSamplingContextFromScope } from '../tracing/dynamicSamplingContext.js';\nimport { dynamicSamplingContextToSentryBaggageHeader } from './baggage.js';\nimport { TRACEPARENT_REGEXP, generateSentryTraceHeader, generateTraceparentHeader } from './tracing.js';\nimport { spanIsNonRecordingSpan } from '../tracing/sentryNonRecordingSpan.js';\n\nfunction getTraceData(options = {}) {\n  const client = options.client || getClient();\n  if (!isEnabled() || !client) {\n    return {};\n  }\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n  if (acs.getTraceData) {\n    return acs.getTraceData(options);\n  }\n  const scope = options.scope || getCurrentScope();\n  const span = options.span || getActiveSpan();\n  const isTwpPlaceholder = spanIsNonRecordingSpan(span) && !hasSpansEnabled(client.getOptions());\n  if (!span && hasExternalPropagationContext()) {\n    return {};\n  }\n  const sentryTrace = span && !isTwpPlaceholder ? spanToTraceHeader(span) : scopeToTraceHeader(scope);\n  const dsc = span ? getDynamicSamplingContextFromSpan(span) : getDynamicSamplingContextFromScope(client, scope);\n  const baggage = dynamicSamplingContextToSentryBaggageHeader(dsc);\n  const isValidSentryTraceHeader = TRACEPARENT_REGEXP.test(sentryTrace);\n  if (!isValidSentryTraceHeader) {\n    debug.warn(\"Invalid sentry-trace data. Cannot generate trace data\");\n    return {};\n  }\n  const traceData = {\n    \"sentry-trace\": sentryTrace,\n    baggage\n  };\n  if (options.propagateTraceparent) {\n    traceData.traceparent = span && !isTwpPlaceholder ? spanToTraceparentHeader(span) : scopeToTraceparentHeader(scope);\n  }\n  return traceData;\n}\nfunction scopeToTraceHeader(scope) {\n  const { traceId, sampled, propagationSpanId } = scope.getPropagationContext();\n  return generateSentryTraceHeader(traceId, propagationSpanId, sampled);\n}\nfunction scopeToTraceparentHeader(scope) {\n  const { traceId, sampled, propagationSpanId } = scope.getPropagationContext();\n  return generateTraceparentHeader(traceId, propagationSpanId, sampled);\n}\n\nexport { getTraceData };\n//# sourceMappingURL=traceData.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from './debug-logger.js';\nimport { isString, isRegExp } from './is.js';\n\nconst NOT_PROPAGATED_MESSAGE = \"[Tracing] Not injecting trace data for url because it does not match tracePropagationTargets:\";\nconst NORMALIZED_REGEXP_CACHE = /* @__PURE__ */ new WeakMap();\nfunction normalizeRegExpTarget(pattern) {\n  const flags = `${pattern.flags.replace(/[gy]/g, \"\")}${pattern.ignoreCase ? \"\" : \"i\"}`;\n  if (flags === pattern.flags) {\n    return pattern;\n  }\n  const cached = NORMALIZED_REGEXP_CACHE.get(pattern);\n  if (cached) {\n    return cached;\n  }\n  const normalizedPattern = new RegExp(pattern.source, flags);\n  NORMALIZED_REGEXP_CACHE.set(pattern, normalizedPattern);\n  return normalizedPattern;\n}\nfunction matchesTracePropagationTargets(value, tracePropagationTargets, requireExactStringMatch = false) {\n  const lowerCaseValue = value.toLowerCase();\n  for (const target of tracePropagationTargets) {\n    if (isString(target)) {\n      const lowerCaseTarget = target.toLowerCase();\n      if (requireExactStringMatch ? lowerCaseValue === lowerCaseTarget : lowerCaseValue.includes(lowerCaseTarget)) {\n        return true;\n      }\n    } else if (isRegExp(target) && normalizeRegExpTarget(target).test(value)) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction shouldPropagateTraceForUrl(url, tracePropagationTargets, decisionMap) {\n  if (typeof url !== \"string\" || !tracePropagationTargets) {\n    return true;\n  }\n  const cachedDecision = decisionMap?.get(url);\n  if (cachedDecision !== void 0) {\n    DEBUG_BUILD && !cachedDecision && debug.log(NOT_PROPAGATED_MESSAGE, url);\n    return cachedDecision;\n  }\n  const decision = matchesTracePropagationTargets(url, tracePropagationTargets);\n  decisionMap?.set(url, decision);\n  DEBUG_BUILD && !decision && debug.log(NOT_PROPAGATED_MESSAGE, url);\n  return decision;\n}\n\nexport { matchesTracePropagationTargets, shouldPropagateTraceForUrl };\n//# sourceMappingURL=tracePropagationTargets.js.map\n","import { getClient, getIsolationScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { consoleSandbox } from './utils/debug-logger.js';\nimport { safeCallback } from './utils/safeCallback.js';\nimport { dateTimestampInSeconds } from './utils/time.js';\n\nconst DEFAULT_BREADCRUMBS = 100;\nfunction addBreadcrumb(breadcrumb, hint) {\n  const client = getClient();\n  const isolationScope = getIsolationScope();\n  if (!client) return;\n  const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } = client.getOptions();\n  if (maxBreadcrumbs <= 0) return;\n  const timestamp = dateTimestampInSeconds();\n  const mergedBreadcrumb = { timestamp, ...breadcrumb };\n  const finalBreadcrumb = beforeBreadcrumb ? safeCallback(\n    DEBUG_BUILD ? \"The `beforeBreadcrumb` callback threw an error, dropping the breadcrumb:\" : \"\",\n    () => consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)),\n    () => null\n  ) : mergedBreadcrumb;\n  if (finalBreadcrumb === null) return;\n  if (client.emit) {\n    client.emit(\"beforeAddBreadcrumb\", finalBreadcrumb, hint);\n  }\n  isolationScope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n}\n\nexport { addBreadcrumb };\n//# sourceMappingURL=breadcrumbs.js.map\n","import { getClient } from '../currentScopes.js';\nimport { defineIntegration } from '../integration.js';\nimport { getOriginalFunction } from '../utils/object.js';\n\nconst INTEGRATION_NAME = \"FunctionToString\";\nconst SETUP_CLIENTS = /* @__PURE__ */ new WeakMap();\nconst _functionToStringIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      const originalFunctionToString = Function.prototype.toString;\n      try {\n        Function.prototype.toString = function(...args) {\n          const originalFunction = getOriginalFunction(this);\n          let unwrappedFunction;\n          try {\n            if (SETUP_CLIENTS.has(getClient()) && originalFunction !== void 0) {\n              unwrappedFunction = originalFunction;\n            }\n          } catch {\n          }\n          return originalFunctionToString.apply(unwrappedFunction ?? this, args);\n        };\n      } catch {\n      }\n    },\n    setup(client) {\n      SETUP_CLIENTS.set(client, true);\n    }\n  };\n});\nconst functionToStringIntegration = defineIntegration(_functionToStringIntegration);\n\nexport { functionToStringIntegration };\n//# sourceMappingURL=functiontostring.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { defineIntegration } from '../integration.js';\nimport { debug } from '../utils/debug-logger.js';\nimport { getPossibleEventMessages } from '../utils/eventUtils.js';\nimport { getEventDescription } from '../utils/misc.js';\nimport { stringMatchesSomePattern } from '../utils/string.js';\n\nconst DEFAULT_IGNORE_ERRORS = [\n  /^Script error\\.?$/,\n  /^Javascript error: Script error\\.? on line 0$/,\n  /^ResizeObserver loop completed with undelivered notifications.$/,\n  // The browser logs this when a ResizeObserver handler takes a bit longer. Usually this is not an actual issue though. It indicates slowness.\n  /^Cannot redefine property: googletag$/,\n  // This is thrown when google tag manager is used in combination with an ad blocker\n  /^Can't find variable: gmo$/,\n  // Error from Google Search App https://issuetracker.google.com/issues/396043331\n  /^undefined is not an object \\(evaluating 'a\\.[A-Z]'\\)$/,\n  // Random error that happens but not actionable or noticeable to end-users.\n  /can't redefine non-configurable property \"solana\"/,\n  // Probably a browser extension or custom browser (Brave) throwing this error\n  /vv\\(\\)\\.getRestrictions is not a function/,\n  // Error thrown by GTM, seemingly not affecting end-users\n  /Can't find variable: _AutofillCallbackHandler/,\n  // Unactionable error in instagram webview https://developers.facebook.com/community/threads/320013549791141/\n  /Object Not Found Matching Id:\\d+, MethodName:simulateEvent/,\n  // unactionable error from CEFSharp, a .NET library that embeds chromium in .NET apps\n  /Java exception was raised during method invocation$/,\n  // error from Facebook Mobile browser (https://github.com/getsentry/sentry-javascript/issues/15065, https://github.com/getsentry/sentry-javascript/issues/23733)\n  /Java object is gone$/\n  // error from Facebook Mobile browser (https://github.com/getsentry/sentry-javascript/issues/15065, https://github.com/getsentry/sentry-javascript/issues/23733)\n];\nconst INTEGRATION_NAME = \"EventFilters\";\nconst eventFiltersIntegration = defineIntegration((options = {}) => {\n  let mergedOptions;\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      const clientOptions = client.getOptions();\n      mergedOptions = _mergeOptions(options, clientOptions);\n    },\n    processEvent(event, _hint, client) {\n      if (!mergedOptions) {\n        const clientOptions = client.getOptions();\n        mergedOptions = _mergeOptions(options, clientOptions);\n      }\n      return _shouldDropEvent(event, mergedOptions) ? null : event;\n    }\n  };\n});\nfunction _mergeOptions(internalOptions = {}, clientOptions = {}) {\n  return {\n    allowUrls: [...internalOptions.allowUrls || [], ...clientOptions.allowUrls || []],\n    denyUrls: [...internalOptions.denyUrls || [], ...clientOptions.denyUrls || []],\n    ignoreErrors: [\n      ...internalOptions.ignoreErrors || [],\n      ...clientOptions.ignoreErrors || [],\n      ...internalOptions.disableErrorDefaults ? [] : DEFAULT_IGNORE_ERRORS\n    ],\n    ignoreTransactions: [...internalOptions.ignoreTransactions || [], ...clientOptions.ignoreTransactions || []]\n  };\n}\nfunction _shouldDropEvent(event, options) {\n  if (!event.type) {\n    if (_isIgnoredError(event, options.ignoreErrors)) {\n      DEBUG_BUILD && debug.warn(\n        `Event dropped due to being matched by \\`ignoreErrors\\` option.\nEvent: ${getEventDescription(event)}`\n      );\n      return true;\n    }\n    if (_isUselessError(event)) {\n      DEBUG_BUILD && debug.warn(\n        `Event dropped due to not having an error message, error type or stacktrace.\nEvent: ${getEventDescription(\n          event\n        )}`\n      );\n      return true;\n    }\n    if (_isDeniedUrl(event, options.denyUrls)) {\n      DEBUG_BUILD && debug.warn(\n        `Event dropped due to being matched by \\`denyUrls\\` option.\nEvent: ${getEventDescription(\n          event\n        )}.\nUrl: ${_getEventFilterUrl(event)}`\n      );\n      return true;\n    }\n    if (!_isAllowedUrl(event, options.allowUrls)) {\n      DEBUG_BUILD && debug.warn(\n        `Event dropped due to not being matched by \\`allowUrls\\` option.\nEvent: ${getEventDescription(\n          event\n        )}.\nUrl: ${_getEventFilterUrl(event)}`\n      );\n      return true;\n    }\n  } else if (event.type === \"transaction\") {\n    if (_isIgnoredTransaction(event, options.ignoreTransactions)) {\n      DEBUG_BUILD && debug.warn(\n        `Event dropped due to being matched by \\`ignoreTransactions\\` option.\nEvent: ${getEventDescription(event)}`\n      );\n      return true;\n    }\n  }\n  return false;\n}\nfunction _isIgnoredError(event, ignoreErrors) {\n  if (!ignoreErrors?.length) {\n    return false;\n  }\n  return getPossibleEventMessages(event).some((message) => stringMatchesSomePattern(message, ignoreErrors));\n}\nfunction _isIgnoredTransaction(event, ignoreTransactions) {\n  if (!ignoreTransactions?.length) {\n    return false;\n  }\n  const name = event.transaction;\n  return name ? stringMatchesSomePattern(name, ignoreTransactions) : false;\n}\nfunction _isDeniedUrl(event, denyUrls) {\n  if (!denyUrls?.length) {\n    return false;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? false : stringMatchesSomePattern(url, denyUrls);\n}\nfunction _isAllowedUrl(event, allowUrls) {\n  if (!allowUrls?.length) {\n    return true;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? true : stringMatchesSomePattern(url, allowUrls);\n}\nfunction _getLastValidUrl(frames = []) {\n  for (let i = frames.length - 1; i >= 0; i--) {\n    const frame = frames[i];\n    if (frame && frame.filename !== \"<anonymous>\" && frame.filename !== \"[native code]\") {\n      return frame.filename || null;\n    }\n  }\n  return null;\n}\nfunction _getEventFilterUrl(event) {\n  try {\n    const rootException = [...event.exception?.values ?? []].reverse().find((value) => value.mechanism?.parent_id === void 0 && value.stacktrace?.frames?.length);\n    const frames = rootException?.stacktrace?.frames;\n    return frames ? _getLastValidUrl(frames) : null;\n  } catch {\n    DEBUG_BUILD && debug.error(`Cannot extract url for event ${getEventDescription(event)}`);\n    return null;\n  }\n}\nfunction _isUselessError(event) {\n  if (!event.exception?.values?.length) {\n    return false;\n  }\n  return (\n    // No top-level message\n    !event.message && // There are no exception values that have a stacktrace, a non-generic-Error type or value\n    !event.exception.values.some((value) => value.stacktrace || value.type && value.type !== \"Error\" || value.value)\n  );\n}\n\nexport { eventFiltersIntegration };\n//# sourceMappingURL=eventFilters.js.map\n","import { isError } from './is.js';\n\nfunction applyAggregateErrorsToEvent(exceptionFromErrorImplementation, parser, key, limit, event, hint) {\n  if (!event.exception?.values || !hint || !isError(hint.originalException)) {\n    return;\n  }\n  const originalException = event.exception.values.length > 0 ? event.exception.values[event.exception.values.length - 1] : void 0;\n  if (originalException) {\n    event.exception.values = aggregateExceptionsFromError(\n      exceptionFromErrorImplementation,\n      parser,\n      limit,\n      hint.originalException,\n      key,\n      event.exception.values,\n      originalException,\n      0\n    );\n  }\n}\nfunction aggregateExceptionsFromError(exceptionFromErrorImplementation, parser, limit, error, key, prevExceptions, exception, exceptionId) {\n  if (prevExceptions.length >= limit + 1) {\n    return prevExceptions;\n  }\n  let newExceptions = [...prevExceptions];\n  if (isError(error[key])) {\n    applyExceptionGroupFieldsForParentException(exception, exceptionId, error);\n    const newException = exceptionFromErrorImplementation(parser, error[key]);\n    const newExceptionId = newExceptions.length;\n    applyExceptionGroupFieldsForChildException(newException, key, newExceptionId, exceptionId);\n    newExceptions = aggregateExceptionsFromError(\n      exceptionFromErrorImplementation,\n      parser,\n      limit,\n      error[key],\n      key,\n      [newException, ...newExceptions],\n      newException,\n      newExceptionId\n    );\n  }\n  if (isExceptionGroup(error)) {\n    error.errors.forEach((childError, i) => {\n      if (isError(childError)) {\n        applyExceptionGroupFieldsForParentException(exception, exceptionId, error);\n        const newException = exceptionFromErrorImplementation(parser, childError);\n        const newExceptionId = newExceptions.length;\n        applyExceptionGroupFieldsForChildException(newException, `errors[${i}]`, newExceptionId, exceptionId);\n        newExceptions = aggregateExceptionsFromError(\n          exceptionFromErrorImplementation,\n          parser,\n          limit,\n          childError,\n          key,\n          [newException, ...newExceptions],\n          newException,\n          newExceptionId\n        );\n      }\n    });\n  }\n  if (isSuppressedError(error)) {\n    [\"error\", \"suppressed\"].forEach((property) => {\n      const childError = error[property];\n      if (isError(childError)) {\n        applyExceptionGroupFieldsForParentException(exception, exceptionId, error);\n        const newException = exceptionFromErrorImplementation(parser, childError);\n        const newExceptionId = newExceptions.length;\n        applyExceptionGroupFieldsForChildException(newException, property, newExceptionId, exceptionId);\n        newExceptions = aggregateExceptionsFromError(\n          exceptionFromErrorImplementation,\n          parser,\n          limit,\n          childError,\n          key,\n          [newException, ...newExceptions],\n          newException,\n          newExceptionId\n        );\n      }\n    });\n  }\n  return newExceptions;\n}\nfunction isExceptionGroup(error) {\n  return Array.isArray(error.errors);\n}\nfunction isSuppressedError(error) {\n  return \"error\" in error && \"suppressed\" in error;\n}\nfunction applyExceptionGroupFieldsForParentException(exception, exceptionId, error) {\n  exception.mechanism = {\n    handled: true,\n    type: \"auto.core.linked_errors\",\n    ...isExceptionGroup(error) && { is_exception_group: true },\n    ...exception.mechanism,\n    exception_id: exceptionId\n  };\n}\nfunction applyExceptionGroupFieldsForChildException(exception, source, exceptionId, parentId) {\n  exception.mechanism = {\n    handled: true,\n    ...exception.mechanism,\n    type: \"chained\",\n    source,\n    exception_id: exceptionId,\n    parent_id: parentId\n  };\n}\n\nexport { applyAggregateErrorsToEvent };\n//# sourceMappingURL=aggregate-errors.js.map\n","import { isParameterizedString, isError, isPlainObject, isErrorEvent } from './is.js';\nimport { addExceptionMechanism, addExceptionTypeValue } from './misc.js';\nimport { normalizeToSize } from './normalize.js';\nimport { extractExceptionKeysForMessage } from './object.js';\n\nfunction parseStackFrames(stackParser, error) {\n  return stackParser(error.stack || \"\", 1);\n}\nfunction hasSentryFetchUrlHost(error) {\n  return isError(error) && \"__sentry_fetch_url_host__\" in error && typeof error.__sentry_fetch_url_host__ === \"string\";\n}\nfunction _enhanceErrorWithSentryInfo(error) {\n  if (hasSentryFetchUrlHost(error)) {\n    return `${error.message} (${error.__sentry_fetch_url_host__})`;\n  }\n  return error.message;\n}\nfunction exceptionFromError(stackParser, error) {\n  const exception = {\n    type: error.name || error.constructor.name,\n    value: _enhanceErrorWithSentryInfo(error)\n  };\n  const frames = parseStackFrames(stackParser, error);\n  if (frames.length) {\n    exception.stacktrace = { frames };\n  }\n  return exception;\n}\nfunction getErrorPropertyFromObject(obj) {\n  for (const prop in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n      const value = obj[prop];\n      if (isError(value)) {\n        return value;\n      }\n    }\n  }\n  return void 0;\n}\nfunction getMessageForObject(exception) {\n  if (\"name\" in exception && typeof exception.name === \"string\") {\n    let message = `'${exception.name}' captured as exception`;\n    if (\"message\" in exception && typeof exception.message === \"string\") {\n      message += ` with message '${exception.message}'`;\n    }\n    return message;\n  } else if (\"message\" in exception && typeof exception.message === \"string\") {\n    return exception.message;\n  }\n  const keys = extractExceptionKeysForMessage(exception);\n  if (isErrorEvent(exception)) {\n    return `Event \\`ErrorEvent\\` captured as exception with message \\`${exception.message}\\``;\n  }\n  const className = getObjectClassName(exception);\n  return `${className && className !== \"Object\" ? `'${className}'` : \"Object\"} captured as exception with keys: ${keys}`;\n}\nfunction getObjectClassName(obj) {\n  try {\n    const prototype = Object.getPrototypeOf(obj);\n    return prototype ? prototype.constructor.name : void 0;\n  } catch {\n  }\n}\nfunction getException(client, mechanism, exception, hint) {\n  if (isError(exception)) {\n    return [exception, void 0];\n  }\n  mechanism.synthetic = true;\n  if (isPlainObject(exception)) {\n    const normalizeDepth = client?.getOptions().normalizeDepth;\n    const extras = { [\"__serialized__\"]: normalizeToSize(exception, normalizeDepth) };\n    const errorFromProp = getErrorPropertyFromObject(exception);\n    if (errorFromProp) {\n      return [errorFromProp, extras];\n    }\n    const message = getMessageForObject(exception);\n    const ex2 = hint?.syntheticException || new Error(message);\n    ex2.message = message;\n    return [ex2, extras];\n  }\n  const ex = hint?.syntheticException || new Error(exception);\n  ex.message = `${exception}`;\n  return [ex, void 0];\n}\nfunction eventFromUnknownInput(client, stackParser, exception, hint) {\n  const providedMechanism = hint?.data && hint.data.mechanism;\n  const mechanism = providedMechanism || {\n    handled: true,\n    type: \"generic\"\n  };\n  const [ex, extras] = getException(client, mechanism, exception, hint);\n  const event = {\n    exception: {\n      values: [exceptionFromError(stackParser, ex)]\n    }\n  };\n  if (extras) {\n    event.extra = extras;\n  }\n  addExceptionTypeValue(event, void 0, void 0);\n  addExceptionMechanism(event, mechanism);\n  return {\n    ...event,\n    event_id: hint?.event_id\n  };\n}\nfunction eventFromMessage(stackParser, message, level = \"info\", hint, attachStacktrace) {\n  const event = {\n    event_id: hint?.event_id,\n    level\n  };\n  if (attachStacktrace && hint?.syntheticException) {\n    const frames = parseStackFrames(stackParser, hint.syntheticException);\n    if (frames.length) {\n      event.exception = {\n        values: [\n          {\n            value: message,\n            stacktrace: { frames }\n          }\n        ]\n      };\n      addExceptionMechanism(event, { synthetic: true });\n    }\n  }\n  if (isParameterizedString(message)) {\n    const { __sentry_template_string__, __sentry_template_values__ } = message;\n    event.logentry = {\n      message: __sentry_template_string__,\n      params: __sentry_template_values__\n    };\n    return event;\n  }\n  event.message = message;\n  return event;\n}\n\nexport { _enhanceErrorWithSentryInfo, eventFromMessage, eventFromUnknownInput, exceptionFromError, parseStackFrames };\n//# sourceMappingURL=eventbuilder.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { CONSOLE_LEVELS, originalConsoleMethods, debug } from '../utils/debug-logger.js';\nimport { fill } from '../utils/object.js';\nimport { stringMatchesSomePattern } from '../utils/string.js';\nimport { GLOBAL_OBJ } from '../utils/worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\nconst _filter = /* @__PURE__ */ new Set([]);\nfunction addConsoleInstrumentationHandler(handler) {\n  const type = \"console\";\n  const removeHandler = addHandler(type, handler);\n  maybeInstrument(type, instrumentConsole);\n  return removeHandler;\n}\nfunction addConsoleInstrumentationFilter(filter) {\n  for (const f of filter) {\n    _filter.add(f);\n  }\n  return () => {\n    for (const f of filter) {\n      _filter.delete(f);\n    }\n  };\n}\nconst instrumentedLevels = /* @__PURE__ */ new Set();\nfunction instrumentConsole() {\n  if (!(\"console\" in GLOBAL_OBJ)) {\n    return;\n  }\n  CONSOLE_LEVELS.forEach(function(level) {\n    if (instrumentedLevels.has(level) || !(level in GLOBAL_OBJ.console)) {\n      return;\n    }\n    instrumentedLevels.add(level);\n    fill(GLOBAL_OBJ.console, level, function(originalConsoleMethod) {\n      originalConsoleMethods[level] = originalConsoleMethod;\n      return function(...args) {\n        const firstArg = args[0];\n        const log = originalConsoleMethods[level];\n        const isFiltered = _filter.size && typeof firstArg === \"string\" && stringMatchesSomePattern(firstArg, _filter);\n        if (!isFiltered) {\n          triggerHandlers(\"console\", { args, level });\n        }\n        if (!isFiltered || DEBUG_BUILD && debug.isEnabled()) {\n          log?.apply(GLOBAL_OBJ.console, args);\n        }\n      };\n    });\n  });\n}\n\nexport { addConsoleInstrumentationFilter, addConsoleInstrumentationHandler, instrumentConsole };\n//# sourceMappingURL=console.js.map\n","function severityLevelFromString(level) {\n  return level === \"warn\" ? \"warning\" : [\"fatal\", \"error\", \"warning\", \"log\", \"info\", \"debug\"].includes(level) ? level : \"log\";\n}\n\nexport { severityLevelFromString };\n//# sourceMappingURL=severity.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { defineIntegration } from '../integration.js';\nimport { debug } from '../utils/debug-logger.js';\nimport { getFramesFromEvent } from '../utils/stacktrace.js';\n\nconst INTEGRATION_NAME = \"Dedupe\";\nconst _dedupeIntegration = (() => {\n  let previousEvent;\n  return {\n    name: INTEGRATION_NAME,\n    processEvent(currentEvent) {\n      if (currentEvent.type) {\n        return currentEvent;\n      }\n      try {\n        if (_shouldDropEvent(currentEvent, previousEvent)) {\n          DEBUG_BUILD && debug.warn(\"Event dropped due to being a duplicate of previously captured event.\");\n          return null;\n        }\n      } catch {\n      }\n      return previousEvent = currentEvent;\n    }\n  };\n});\nconst dedupeIntegration = defineIntegration(_dedupeIntegration);\nfunction _shouldDropEvent(currentEvent, previousEvent) {\n  if (!previousEvent) {\n    return false;\n  }\n  if (_isSameMessageEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n  if (_isSameExceptionEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n  return false;\n}\nfunction _isSameMessageEvent(currentEvent, previousEvent) {\n  const currentMessage = currentEvent.message;\n  const previousMessage = previousEvent.message;\n  if (!currentMessage && !previousMessage) {\n    return false;\n  }\n  if (currentMessage && !previousMessage || !currentMessage && previousMessage) {\n    return false;\n  }\n  if (currentMessage !== previousMessage) {\n    return false;\n  }\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n  return true;\n}\nfunction _isSameExceptionEvent(currentEvent, previousEvent) {\n  const previousException = _getExceptionFromEvent(previousEvent);\n  const currentException = _getExceptionFromEvent(currentEvent);\n  if (!previousException || !currentException) {\n    return false;\n  }\n  if (previousException.type !== currentException.type || previousException.value !== currentException.value) {\n    return false;\n  }\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n  return true;\n}\nfunction _isSameStacktrace(currentEvent, previousEvent) {\n  const currentFrames = getFramesFromEvent(currentEvent);\n  const previousFrames = getFramesFromEvent(previousEvent);\n  if (!currentFrames || !previousFrames) {\n    return !currentFrames && !previousFrames;\n  }\n  if (previousFrames.length !== currentFrames.length) {\n    return false;\n  }\n  for (let i = 0; i < previousFrames.length; i++) {\n    const frameA = previousFrames[i];\n    const frameB = currentFrames[i];\n    if (frameA.filename !== frameB.filename || frameA.lineno !== frameB.lineno || frameA.colno !== frameB.colno || frameA.function !== frameB.function) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction _isSameFingerprint(currentEvent, previousEvent) {\n  const currentFingerprint = currentEvent.fingerprint;\n  const previousFingerprint = previousEvent.fingerprint;\n  if (!currentFingerprint || !previousFingerprint) {\n    return !currentFingerprint && !previousFingerprint;\n  }\n  try {\n    return !!(currentFingerprint.join(\"\") === previousFingerprint.join(\"\"));\n  } catch {\n    return false;\n  }\n}\nfunction _getExceptionFromEvent(event) {\n  return event.exception?.values?.[0];\n}\n\nexport { _shouldDropEvent, dedupeIntegration };\n//# sourceMappingURL=dedupe.js.map\n","import { addBreadcrumb } from '../breadcrumbs.js';\nimport { getClient } from '../currentScopes.js';\nimport { addConsoleInstrumentationHandler, addConsoleInstrumentationFilter } from '../instrument/console.js';\nimport { defineIntegration } from '../integration.js';\nimport { CONSOLE_LEVELS } from '../utils/debug-logger.js';\nimport { severityLevelFromString } from '../utils/severity.js';\nimport { safeJoin } from '../utils/string.js';\nimport { GLOBAL_OBJ } from '../utils/worldwide.js';\n\nconst INTEGRATION_NAME = \"Console\";\nconst consoleIntegration = defineIntegration((options = {}) => {\n  const levels = new Set(options.levels || CONSOLE_LEVELS);\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      const unsubscribe = addConsoleInstrumentationHandler(({ args, level }) => {\n        if (getClient() !== client || !levels.has(level)) {\n          return;\n        }\n        addConsoleBreadcrumb(level, args);\n      });\n      client.registerCleanup(unsubscribe);\n      if (options.filter) {\n        const unsubscribe2 = addConsoleInstrumentationFilter(options.filter);\n        client.registerCleanup(unsubscribe2);\n      }\n    }\n  };\n});\nfunction addConsoleBreadcrumb(level, args) {\n  const breadcrumb = {\n    category: \"console\",\n    data: {\n      arguments: args,\n      logger: \"console\"\n    },\n    level: severityLevelFromString(level),\n    message: formatConsoleArgs(args)\n  };\n  if (level === \"assert\") {\n    if (args[0] === false) {\n      const assertionArgs = args.slice(1);\n      breadcrumb.message = assertionArgs.length > 0 ? `Assertion failed: ${formatConsoleArgs(assertionArgs)}` : \"Assertion failed\";\n      breadcrumb.data.arguments = assertionArgs;\n    } else {\n      return;\n    }\n  }\n  addBreadcrumb(breadcrumb, {\n    input: args,\n    level\n  });\n}\nfunction formatConsoleArgs(values) {\n  return \"util\" in GLOBAL_OBJ && typeof GLOBAL_OBJ.util.format === \"function\" ? GLOBAL_OBJ.util.format(...values) : safeJoin(values, \" \");\n}\n\nexport { addConsoleBreadcrumb, consoleIntegration };\n//# sourceMappingURL=console.js.map\n","import { GEN_AI_CONVERSATION_ID } from '@sentry/conventions/attributes';\nimport { getCurrentScope, getIsolationScope } from '../currentScopes.js';\nimport { defineIntegration } from '../integration.js';\nimport { spanToStaticSpanJSON } from '../utils/spanUtils.js';\n\nconst INTEGRATION_NAME = \"ConversationId\";\nconst _conversationIdIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      client.on(\"spanStart\", (span) => {\n        const scopeData = getCurrentScope().getScopeData();\n        const isolationScopeData = getIsolationScope().getScopeData();\n        const conversationId = scopeData.conversationId || isolationScopeData.conversationId;\n        if (conversationId) {\n          const { op, data: attributes, description: name } = spanToStaticSpanJSON(span);\n          if (!op?.startsWith(\"gen_ai.\") && !attributes[\"ai.operationId\"] && !name?.startsWith(\"ai.\")) {\n            return;\n          }\n          span.setAttribute(GEN_AI_CONVERSATION_ID, conversationId);\n        }\n      });\n    }\n  };\n});\nconst conversationIdIntegration = defineIntegration(_conversationIdIntegration);\n\nexport { conversationIdIntegration };\n//# sourceMappingURL=conversationId.js.map\n","import { HTTP_RESPONSE_BODY_SIZE, URL_FULL, SERVER_ADDRESS, SERVER_PORT, URL_QUERY, URL_FRAGMENT, URL_DOMAIN, SENTRY_OP, SENTRY_ORIGIN, HTTP_REQUEST_METHOD } from '@sentry/conventions/attributes';\nimport { HTTP_CLIENT } from '@sentry/conventions/op';\nimport { getClient } from './currentScopes.js';\nimport { getActiveSpan } from './utils/spanUtils.js';\nimport { setHttpStatus, SPAN_STATUS_ERROR } from './tracing/spanstatus.js';\nimport { isRequest, isInstanceOf } from './utils/is.js';\nimport { hasSpansEnabled } from './utils/hasSpansEnabled.js';\nimport { SENTRY_BAGGAGE_KEY_PREFIX } from './utils/baggage.js';\nimport { SentryNonRecordingSpan } from './tracing/sentryNonRecordingSpan.js';\nimport { hasSpanStreamingEnabled } from './tracing/spans/hasSpanStreamingEnabled.js';\nimport { startInactiveSpan, spanIsIgnored } from './tracing/trace.js';\nimport { filterCollectedUrl, filterCollectedUrlQuery } from './utils/data-collection/filterCollectedUrl.js';\nimport { getTraceData } from './utils/traceData.js';\nimport { getUrlDomain, stripDataUrlContent, parseStringToURLObject, getSanitizedUrlStringFromUrlObject, isURLObjectRelative, getUrlQuery, getUrlFragment } from './utils/url.js';\n\nfunction instrumentFetchRequest(handlerData, shouldCreateSpan, shouldAttachHeaders, spans, instrumentFetchRequestOptions) {\n  if (!handlerData.fetchData) {\n    return void 0;\n  }\n  const { method, url } = handlerData.fetchData;\n  const shouldCreateSpanResult = hasSpansEnabled() && shouldCreateSpan(url);\n  if (handlerData.endTimestamp) {\n    const spanId = handlerData.fetchData.__span;\n    if (!spanId) return;\n    const span2 = spans[spanId];\n    if (span2) {\n      if (shouldCreateSpanResult) {\n        endSpan(span2, handlerData);\n        _callOnRequestSpanEnd(span2, handlerData, instrumentFetchRequestOptions);\n      }\n      delete spans[spanId];\n    }\n    return void 0;\n  }\n  const {\n    spanOrigin = \"auto.http.browser\",\n    propagateTraceparent = false,\n    urlBase\n  } = instrumentFetchRequestOptions ?? {};\n  const client = getClient();\n  const hasParent = !!getActiveSpan();\n  const shouldEmitSpan = hasParent || !!client && hasSpanStreamingEnabled(client);\n  const span = shouldCreateSpanResult && shouldEmitSpan ? startInactiveSpan(getSpanStartOptions(url, method, spanOrigin, client, urlBase)) : new SentryNonRecordingSpan();\n  const spanForTraceHeaders = spanIsIgnored(span) && hasParent ? void 0 : span;\n  if (shouldCreateSpanResult && !shouldEmitSpan) {\n    client?.recordDroppedEvent(\"no_parent_span\", \"span\");\n  }\n  handlerData.fetchData.__span = span.spanContext().spanId;\n  spans[span.spanContext().spanId] = span;\n  if (shouldAttachHeaders(handlerData.fetchData.url)) {\n    const request = handlerData.args[0];\n    const options = { ...handlerData.args[1] || {} };\n    const headers = _INTERNAL_getTracingHeadersForFetchRequest(\n      request,\n      options,\n      // If performance is disabled (TWP) or there's no active root span (pageload/navigation/interaction),\n      // we do not want to use the span as base for the trace headers,\n      // which means that the headers will be generated from the scope and the sampling decision is deferred\n      hasSpansEnabled() && shouldEmitSpan ? spanForTraceHeaders : void 0,\n      propagateTraceparent\n    );\n    if (headers) {\n      handlerData.args[1] = options;\n      options.headers = headers;\n    }\n  }\n  if (client) {\n    const fetchHint = {\n      input: handlerData.args,\n      response: handlerData.response,\n      startTimestamp: handlerData.startTimestamp,\n      endTimestamp: handlerData.endTimestamp\n    };\n    client.emit(\"beforeOutgoingRequestSpan\", span, fetchHint);\n  }\n  return span;\n}\nfunction _callOnRequestSpanEnd(span, handlerData, instrumentFetchRequestOptions) {\n  instrumentFetchRequestOptions?.onRequestSpanEnd?.(span, {\n    headers: handlerData.response?.headers,\n    error: handlerData.error\n  });\n}\nfunction _INTERNAL_getTracingHeadersForFetchRequest(request, fetchOptionsObj, span, propagateTraceparent) {\n  const traceHeaders = getTraceData({ span, propagateTraceparent });\n  const sentryTrace = traceHeaders[\"sentry-trace\"];\n  const baggage = traceHeaders.baggage;\n  const traceparent = traceHeaders.traceparent;\n  if (!sentryTrace) {\n    return void 0;\n  }\n  const originalHeaders = fetchOptionsObj.headers || (isRequest(request) ? request.headers : void 0);\n  if (!originalHeaders) {\n    return {\n      \"sentry-trace\": sentryTrace,\n      ...baggage && { baggage },\n      ...traceparent && { traceparent }\n    };\n  } else if (isHeaders(originalHeaders)) {\n    const newHeaders = new Headers(originalHeaders);\n    if (!newHeaders.get(\"sentry-trace\")) {\n      newHeaders.set(\"sentry-trace\", sentryTrace);\n    }\n    if (propagateTraceparent && traceparent && !newHeaders.get(\"traceparent\")) {\n      newHeaders.set(\"traceparent\", traceparent);\n    }\n    if (baggage) {\n      const prevBaggageHeader = newHeaders.get(\"baggage\");\n      if (!prevBaggageHeader) {\n        newHeaders.set(\"baggage\", baggage);\n      } else if (!baggageHeaderHasSentryBaggageValues(prevBaggageHeader)) {\n        newHeaders.set(\"baggage\", `${prevBaggageHeader},${baggage}`);\n      }\n    }\n    return newHeaders;\n  } else if (isHeadersInitTupleArray(originalHeaders)) {\n    const newHeaders = [...originalHeaders];\n    if (!newHeaders.find((header) => header[0] === \"sentry-trace\")) {\n      newHeaders.push([\"sentry-trace\", sentryTrace]);\n    }\n    if (propagateTraceparent && traceparent && !newHeaders.find((header) => header[0] === \"traceparent\")) {\n      newHeaders.push([\"traceparent\", traceparent]);\n    }\n    const prevBaggageHeaderWithSentryValues = originalHeaders.find(\n      (header) => header[0] === \"baggage\" && typeof header[1] === \"string\" && baggageHeaderHasSentryBaggageValues(header[1])\n    );\n    if (baggage && !prevBaggageHeaderWithSentryValues) {\n      newHeaders.push([\"baggage\", baggage]);\n    }\n    return newHeaders;\n  } else {\n    const existingSentryTraceHeader = \"sentry-trace\" in originalHeaders ? originalHeaders[\"sentry-trace\"] : void 0;\n    const existingTraceparentHeader = \"traceparent\" in originalHeaders ? originalHeaders.traceparent : void 0;\n    const existingBaggageHeader = \"baggage\" in originalHeaders ? originalHeaders.baggage : void 0;\n    const newBaggageHeaders = existingBaggageHeader ? Array.isArray(existingBaggageHeader) ? [...existingBaggageHeader] : [existingBaggageHeader] : [];\n    const prevBaggageHeaderWithSentryValues = existingBaggageHeader && (Array.isArray(existingBaggageHeader) ? existingBaggageHeader.find((headerItem) => baggageHeaderHasSentryBaggageValues(headerItem)) : baggageHeaderHasSentryBaggageValues(existingBaggageHeader));\n    if (baggage && !prevBaggageHeaderWithSentryValues) {\n      newBaggageHeaders.push(baggage);\n    }\n    const newHeaders = Object.assign({}, originalHeaders, {\n      \"sentry-trace\": existingSentryTraceHeader ?? sentryTrace,\n      ...newBaggageHeaders.length > 0 && { baggage: newBaggageHeaders.join(\",\") }\n    });\n    if (propagateTraceparent && traceparent && !existingTraceparentHeader) {\n      newHeaders.traceparent = traceparent;\n    }\n    return newHeaders;\n  }\n}\nfunction endSpan(span, handlerData) {\n  if (handlerData.response) {\n    setHttpStatus(span, handlerData.response.status);\n    const contentLength = handlerData.response?.headers?.get(\"content-length\");\n    if (contentLength) {\n      const contentLengthNum = parseInt(contentLength);\n      if (contentLengthNum > 0) {\n        span.setAttribute(HTTP_RESPONSE_BODY_SIZE, contentLengthNum);\n      }\n    }\n  } else if (handlerData.error) {\n    span.setStatus({ code: SPAN_STATUS_ERROR, message: \"internal_error\" });\n  }\n  span.end();\n}\nfunction baggageHeaderHasSentryBaggageValues(baggageHeader) {\n  if (typeof baggageHeader !== \"string\") {\n    return false;\n  }\n  return baggageHeader.split(\",\").some((baggageEntry) => baggageEntry.trim().startsWith(SENTRY_BAGGAGE_KEY_PREFIX));\n}\nfunction isHeaders(headers) {\n  return typeof Headers !== \"undefined\" && isInstanceOf(headers, Headers);\n}\nfunction isHeadersInitTupleArray(headers) {\n  if (!Array.isArray(headers)) {\n    return false;\n  }\n  return headers.every(\n    (item) => Array.isArray(item) && item.length === 2 && typeof item[0] === \"string\"\n  );\n}\nfunction getSpanStartOptions(url, method, spanOrigin, client, urlBase) {\n  const isStreamed = !!client && hasSpanStreamingEnabled(client);\n  const domain = getUrlDomain(url, urlBase);\n  if (url.startsWith(\"data:\")) {\n    const sanitizedUrl2 = stripDataUrlContent(url);\n    return {\n      name: isStreamed ? method : `${method} ${sanitizedUrl2}`,\n      attributes: getFetchSpanAttributes(url, void 0, method, spanOrigin, client, domain)\n    };\n  }\n  const parsedUrl = parseStringToURLObject(url);\n  const sanitizedUrl = parsedUrl ? getSanitizedUrlStringFromUrlObject(parsedUrl) : url;\n  return {\n    name: isStreamed ? domain ? `${method} ${domain}` : method : `${method} ${sanitizedUrl}`,\n    attributes: getFetchSpanAttributes(url, parsedUrl, method, spanOrigin, client, domain)\n  };\n}\nfunction getFetchSpanAttributes(url, parsedUrl, method, spanOrigin, client, domain) {\n  const attributes = {\n    [URL_FULL]: filterCollectedUrl(stripDataUrlContent(url), client),\n    type: \"fetch\",\n    // oxlint-disable-next-line typescript/no-deprecated\n    [HTTP_REQUEST_METHOD]: method,\n    [SENTRY_ORIGIN]: spanOrigin,\n    [SENTRY_OP]: HTTP_CLIENT,\n    [URL_DOMAIN]: domain\n  };\n  if (parsedUrl) {\n    if (!isURLObjectRelative(parsedUrl)) {\n      attributes[URL_FULL] = filterCollectedUrl(stripDataUrlContent(parsedUrl.href), client);\n      attributes[SERVER_ADDRESS] = parsedUrl.hostname;\n      attributes[SERVER_PORT] = parsedUrl.port ? Number(parsedUrl.port) : void 0;\n    }\n    attributes[URL_QUERY] = filterCollectedUrlQuery(getUrlQuery(parsedUrl.search), client);\n    attributes[URL_FRAGMENT] = getUrlFragment(parsedUrl.hash);\n  }\n  return attributes;\n}\n\nexport { _INTERNAL_getTracingHeadersForFetchRequest, _callOnRequestSpanEnd, instrumentFetchRequest };\n//# sourceMappingURL=fetch.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from './debug-logger.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nconst WINDOW = GLOBAL_OBJ;\nfunction supportsErrorEvent() {\n  try {\n    new ErrorEvent(\"\");\n    return true;\n  } catch {\n    return false;\n  }\n}\nfunction supportsDOMException() {\n  try {\n    new DOMException(\"\");\n    return true;\n  } catch {\n    return false;\n  }\n}\nconst supportsFetch = _isFetchSupported;\nfunction _isFetchSupported() {\n  if (!(\"fetch\" in WINDOW)) {\n    return false;\n  }\n  try {\n    new Headers();\n    new Request(\"data:,\");\n    new Response();\n    return true;\n  } catch {\n    return false;\n  }\n}\nfunction isNativeFunction(func) {\n  return func && /^function\\s+\\w+\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\nfunction supportsNativeFetch() {\n  if (typeof EdgeRuntime === \"string\") {\n    return true;\n  }\n  if (!_isFetchSupported()) {\n    return false;\n  }\n  if (isNativeFunction(WINDOW.fetch)) {\n    return true;\n  }\n  let result = false;\n  const doc = WINDOW.document;\n  if (doc && typeof doc.createElement === \"function\") {\n    try {\n      const sandbox = doc.createElement(\"iframe\");\n      sandbox.hidden = true;\n      doc.head.appendChild(sandbox);\n      if (sandbox.contentWindow?.fetch) {\n        result = isNativeFunction(sandbox.contentWindow.fetch);\n      }\n      doc.head.removeChild(sandbox);\n    } catch (err) {\n      DEBUG_BUILD && debug.warn(\"Could not create sandbox iframe for pure fetch check, bailing to window.fetch: \", err);\n    }\n  }\n  return result;\n}\nfunction supportsReferrerPolicy() {\n  if (!_isFetchSupported()) {\n    return false;\n  }\n  try {\n    new Request(\"_\", {\n      referrerPolicy: \"origin\"\n    });\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport { isNativeFunction, supportsDOMException, supportsErrorEvent, supportsFetch, supportsNativeFetch, supportsReferrerPolicy };\n//# sourceMappingURL=supports.js.map\n","import { getClient } from '../currentScopes.js';\nimport { isError, isRequest, isObjectLike } from '../utils/is.js';\nimport { isBrowser } from '../utils/isBrowser.js';\nimport { fill, addNonEnumerableProperty } from '../utils/object.js';\nimport { supportsNativeFetch } from '../utils/supports.js';\nimport { timestampInSeconds } from '../utils/time.js';\nimport { GLOBAL_OBJ } from '../utils/worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\nfunction addFetchInstrumentationHandler(handler) {\n  const type = \"fetch\";\n  const removeHandler = addHandler(type, handler);\n  maybeInstrument(type, () => instrumentFetch());\n  return removeHandler;\n}\nfunction addFetchEndInstrumentationHandler(handler) {\n  const type = \"fetch-body-resolved\";\n  const removeHandler = addHandler(type, handler);\n  maybeInstrument(type, () => instrumentFetch(streamHandler));\n  return removeHandler;\n}\nfunction instrumentFetch(onFetchResolved) {\n  if (isBrowser() && !supportsNativeFetch()) {\n    return;\n  }\n  fill(GLOBAL_OBJ, \"fetch\", function(originalFetch) {\n    return new Proxy(originalFetch, {\n      apply(target, _thisArg, args) {\n        const virtualError = new Error();\n        const { method, url } = parseFetchArgs(args);\n        const handlerData = {\n          args,\n          fetchData: {\n            method,\n            url\n          },\n          startTimestamp: timestampInSeconds() * 1e3,\n          // // Adding the error to be able to fingerprint the failed fetch event in HttpClient instrumentation\n          virtualError,\n          headers: getHeadersFromFetchArgs(args)\n        };\n        if (!onFetchResolved) {\n          triggerHandlers(\"fetch\", {\n            ...handlerData\n          });\n        }\n        return Reflect.apply(target, GLOBAL_OBJ, args).then(\n          async (response) => {\n            if (onFetchResolved) {\n              onFetchResolved(response);\n            } else {\n              triggerHandlers(\"fetch\", {\n                ...handlerData,\n                endTimestamp: timestampInSeconds() * 1e3,\n                response\n              });\n            }\n            return response;\n          },\n          (error) => {\n            triggerHandlers(\"fetch\", {\n              ...handlerData,\n              endTimestamp: timestampInSeconds() * 1e3,\n              error\n            });\n            if (isError(error) && error.stack === void 0) {\n              error.stack = virtualError.stack;\n              addNonEnumerableProperty(error, \"framesToPop\", 1);\n            }\n            const client = getClient();\n            const enhanceOption = client?.getOptions().enhanceFetchErrorMessages ?? \"always\";\n            const shouldEnhance = enhanceOption !== false;\n            if (shouldEnhance && isError(error) && error.name === \"TypeError\" && (error.message === \"Failed to fetch\" || error.message === \"Load failed\" || error.message === \"NetworkError when attempting to fetch resource.\")) {\n              try {\n                const url2 = new URL(handlerData.fetchData.url);\n                const hostname = url2.host;\n                if (enhanceOption === \"always\") {\n                  error.message = `${error.message} (${hostname})`;\n                } else {\n                  addNonEnumerableProperty(error, \"__sentry_fetch_url_host__\", hostname);\n                }\n              } catch {\n              }\n            }\n            throw error;\n          }\n        );\n      }\n    });\n  });\n}\nasync function resolveResponse(res, onFinishedResolving) {\n  if (res?.body) {\n    const body = res.body;\n    const responseReader = body.getReader();\n    const maxFetchDurationTimeout = setTimeout(\n      () => {\n        body.cancel().then(null, () => {\n        });\n      },\n      90 * 1e3\n      // 90s\n    );\n    let readingActive = true;\n    while (readingActive) {\n      let chunkTimeout;\n      try {\n        chunkTimeout = setTimeout(() => {\n          body.cancel().then(null, () => {\n          });\n        }, 5e3);\n        const { done } = await responseReader.read();\n        clearTimeout(chunkTimeout);\n        if (done) {\n          onFinishedResolving();\n          readingActive = false;\n        }\n      } catch {\n        readingActive = false;\n      } finally {\n        clearTimeout(chunkTimeout);\n      }\n    }\n    clearTimeout(maxFetchDurationTimeout);\n    responseReader.releaseLock();\n    body.cancel().then(null, () => {\n    });\n  }\n}\nfunction streamHandler(response) {\n  let clonedResponseForResolving;\n  try {\n    clonedResponseForResolving = response.clone();\n  } catch {\n    return;\n  }\n  resolveResponse(clonedResponseForResolving, () => {\n    triggerHandlers(\"fetch-body-resolved\", {\n      endTimestamp: timestampInSeconds() * 1e3,\n      response\n    });\n  });\n}\nfunction hasProp(obj, prop) {\n  return isObjectLike(obj) && !!obj[prop];\n}\nfunction getUrlFromResource(resource) {\n  if (typeof resource === \"string\") {\n    return resource;\n  }\n  if (!resource) {\n    return \"\";\n  }\n  if (hasProp(resource, \"url\")) {\n    return resource.url;\n  }\n  if (resource.toString) {\n    return resource.toString();\n  }\n  return \"\";\n}\nfunction parseFetchArgs(fetchArgs) {\n  if (fetchArgs.length === 0) {\n    return { method: \"GET\", url: \"\" };\n  }\n  if (fetchArgs.length === 2) {\n    const [resource, options] = fetchArgs;\n    return {\n      url: getUrlFromResource(resource),\n      method: hasProp(options, \"method\") ? String(options.method).toUpperCase() : (\n        // Request object as first argument\n        isRequest(resource) && hasProp(resource, \"method\") ? String(resource.method).toUpperCase() : \"GET\"\n      )\n    };\n  }\n  const arg = fetchArgs[0];\n  return {\n    url: getUrlFromResource(arg),\n    method: hasProp(arg, \"method\") ? String(arg.method).toUpperCase() : \"GET\"\n  };\n}\nfunction getHeadersFromFetchArgs(fetchArgs) {\n  const [requestArgument, optionsArgument] = fetchArgs;\n  try {\n    if (typeof optionsArgument === \"object\" && optionsArgument !== null && \"headers\" in optionsArgument && optionsArgument.headers) {\n      return new Headers(optionsArgument.headers);\n    }\n    if (isRequest(requestArgument)) {\n      return new Headers(requestArgument.headers);\n    }\n  } catch {\n  }\n  return;\n}\n\nexport { addFetchEndInstrumentationHandler, addFetchInstrumentationHandler, parseFetchArgs };\n//# sourceMappingURL=fetch.js.map\n","function getBreadcrumbLogLevelFromHttpStatusCode(statusCode) {\n  if (statusCode === void 0) {\n    return void 0;\n  } else if (statusCode >= 400 && statusCode < 500) {\n    return \"warning\";\n  } else if (statusCode >= 500) {\n    return \"error\";\n  } else {\n    return void 0;\n  }\n}\n\nexport { getBreadcrumbLogLevelFromHttpStatusCode };\n//# sourceMappingURL=breadcrumb-log-level.js.map\n","class LRUMap {\n  constructor(_maxSize) {\n    this._maxSize = _maxSize;\n    this._cache = /* @__PURE__ */ new Map();\n  }\n  /** Get the current size of the cache */\n  get size() {\n    return this._cache.size;\n  }\n  /** Get an entry or undefined if it was not in the cache. Re-inserts to update the recently used order */\n  get(key) {\n    const value = this._cache.get(key);\n    if (value === void 0) {\n      return void 0;\n    }\n    this._cache.delete(key);\n    this._cache.set(key, value);\n    return value;\n  }\n  /** Insert an entry and evict an older entry if we've reached maxSize */\n  set(key, value) {\n    this._cache.delete(key);\n    if (this._cache.size >= this._maxSize) {\n      const nextKey = this._cache.keys().next().value;\n      this._cache.delete(nextKey);\n    }\n    this._cache.set(key, value);\n  }\n  /** Remove an entry and return the entry if it was in the cache */\n  remove(key) {\n    const value = this._cache.get(key);\n    if (value) {\n      this._cache.delete(key);\n    }\n    return value;\n  }\n  /** Clear all entries */\n  clear() {\n    this._cache.clear();\n  }\n  /** Get all the keys */\n  keys() {\n    return Array.from(this._cache.keys());\n  }\n  /** Get all the values */\n  values() {\n    const values = [];\n    this._cache.forEach((value) => values.push(value));\n    return values;\n  }\n}\n\nexport { LRUMap };\n//# sourceMappingURL=lru.js.map\n","let t=-1;const n=()=>t,e=n=>{addEventListener(\"pageshow\",e=>{e.persisted&&(t=e.timeStamp,n(e))},!0)},i=(t,n,e,i)=>{let o,s;return a=>{n.value>=0&&(a||i)&&(s=n.value-(o??0),(s||void 0===o)&&(o=n.value,n.delta=s,n.rating=((t,n)=>t>n[1]?\"poor\":t>n[0]?\"needs-improvement\":\"good\")(n.value,e),t(n)))}},o=t=>{requestAnimationFrame(()=>requestAnimationFrame(()=>t()))},s=()=>{const t=performance.getEntriesByType(\"navigation\")[0];if(t&&t.responseStart>0&&t.responseStart<performance.now())return t},a=()=>s()?.activationStart??0;let r=-1;const c=new Set,f=()=>\"hidden\"!==document.visibilityState||document.prerendering?1/0:0,h=t=>{if(\"hidden\"===document.visibilityState){if(\"visibilitychange\"===t.type)for(const t of c)t();isFinite(r)||(r=\"visibilitychange\"===t.type?t.timeStamp:0,removeEventListener(\"prerenderingchange\",h,!0))}},d=(t=!1)=>{if(t&&(r=1/0),r<0){const t=a(),n=document.prerendering?void 0:globalThis.performance.getEntriesByType(\"visibility-state\").find(n=>\"hidden\"===n.name&&n.startTime>=t)?.startTime;r=n??f(),addEventListener(\"visibilitychange\",h,!0),addEventListener(\"prerenderingchange\",h,!0),e(()=>{setTimeout(()=>{r=f()})})}return{get firstHiddenTime(){return r},onHidden(t){c.add(t)}}},l=(t,e=-1,i,o=0,r,c,f)=>{const h=s(),d=h?.navigationId||0;let l=\"navigate\";i?l=i:n()>=0?l=\"back-forward-cache\":h&&(document.prerendering||a()>0?l=\"prerender\":document.wasDiscarded?l=\"restore\":h.type&&(l=h.type.replace(/_/g,\"-\")));return{name:t,value:e,rating:\"good\",delta:0,entries:[],id:`v6-${Date.now()}-${Math.floor(8999999999999*Math.random())+1e12}`,navigationType:l,navigationId:o||d,navigationInteractionId:r,navigationURL:c||h?.name,navigationStartTime:f||0}},g=new WeakMap;function u(t,n){let e=g.get(n);return e||(e=new WeakMap,g.set(n,e)),e.get(t)||e.set(t,new n),e.get(t)}class v{t;i=0;o=[];h(t){if(t.hadRecentInput)return;const n=this.o[0],e=this.o.at(-1);this.i&&n&&e&&t.startTime-e.startTime<1e3&&t.startTime-n.startTime<5e3?(this.i+=t.value,this.o.push(t)):(this.i=t.value,this.o=[t]),this.t?.(t)}}const m=(t,n,e={})=>{try{const i=t.filter(t=>PerformanceObserver.supportedEntryTypes.includes(t));if(i.length>0){const t=new PerformanceObserver(t=>{queueMicrotask(()=>{const e=t.getEntries();i.length>1&&e.sort((t,n)=>t.startTime+t.duration-(n.startTime+n.duration)),n(e)})});for(const n of i)t.observe({type:n,buffered:!0,...e});return t}}catch{}},p=t=>globalThis.PerformanceObserver?.supportedEntryTypes?.includes(\"soft-navigation\")&&\"function\"==typeof globalThis.PerformanceSoftNavigation?.prototype?.getLargestInteractionContentfulPaint&&t&&t.reportSoftNavs,b=(t,n)=>{if(t.set(n.navigationId,n),t.size>2){const n=t.keys().next().value;void 0!==n&&t.delete(n)}},T=t=>{let n=!1;return()=>{n||(t(),n=!0)}};class y{l}const _=t=>{document.prerendering?addEventListener(\"prerenderingchange\",t,!0):t()},E=[1800,3e3],M=(t,s={})=>{const r=p(s);_(()=>{const c=u(s,y),f=d();let h,g=l(\"FCP\");const v=m([\"paint\"],t=>{for(const n of t)\"first-contentful-paint\"===n.name&&(v.disconnect(),n.startTime<f.firstHiddenTime&&(g.value=Math.max(n.startTime-a(),0),g.entries.push(n),g.navigationId=n.navigationId||g.navigationId,h(!0)))});if(v&&(h=i(t,g,E,s.reportAllChanges),e(e=>{g=l(\"FCP\",-1,\"back-forward-cache\",g.navigationId,g.navigationInteractionId,g.navigationURL,n()),h=i(t,g,E,s.reportAllChanges),o(()=>{g.value=performance.now()-e.timeStamp,h(!0)})})),r){m([\"soft-navigation\"],n=>{n.forEach(n=>{c.l&&n.navigationId&&b(c.l,n);const e=Math.max((n.presentationTime||n.paintTime||0)-n.startTime,0);g=l(\"FCP\",e,\"soft-navigation\",n.navigationId,n.interactionId,n.name,n.startTime),h=i(t,g,E,s.reportAllChanges),h(!0)})},s)}})},L=[.1,.25],P=(t,s={})=>{const a=d();M(T(()=>{let r,c=l(\"CLS\",0);const f=u(s,v),h=(n,e,o,a,h)=>{c=l(\"CLS\",0,n,e,o,a,h),f.i=0,r=i(t,c,L,s.reportAllChanges)},d=(t=!1)=>{f.i>c.value&&(c.value=f.i,c.entries=f.o),r(t)},g=t=>{d(!0),h(\"soft-navigation\",t.navigationId,t.interactionId,t.name,t.startTime)},b=t=>{for(const n of t)\"soft-navigation\"!==n.entryType?f.h(n):g(n);d()},T=[\"layout-shift\"];p(s)&&T.push(\"soft-navigation\");const y=m(T,b);y&&(r=i(t,c,L,s.reportAllChanges),a.onHidden(()=>{b(y.takeRecords()),r(!0)}),e(()=>{h(\"back-forward-cache\",c.navigationId,c.navigationInteractionId,c.navigationURL,n()),o(r)}),setTimeout(r))}))};let w=0,I=1/0,k=0;const C=t=>{for(const n of t)n.interactionId&&(I=Math.min(I,n.interactionId),k=Math.max(k,n.interactionId),w=k?(k-I)/7+1:0)};let F;const N=()=>F?w:performance.interactionCount??0,B=()=>{\"interactionCount\"in performance||F||(F=m([\"event\"],C,{durationThreshold:0}))};class S{u=0;v=[];m=new Map;p;T;_(){return N()-this.u}M(){this.u=N(),this.v.length=0,this.m.clear()}L(t){const n=this._(),e=Math.min(this.v.length-1,Math.floor(n/50));return!n||-1!==e||\"soft-navigation\"!==t&&\"back-forward-cache\"!==t?this.v[e]:{P:8,id:-1,entries:[]}}h(t){if(this.p?.(t),!t.interactionId)return;const n=this.v.at(-1);let e=this.m.get(t.interactionId);if(e||this.v.length<10||t.duration>n.P){if(e?t.duration>e.P?(e.entries=[t],e.P=t.duration):t.duration===e.P&&t.startTime===e.entries[0].startTime&&e.entries.push(t):(e={id:t.interactionId,entries:[t],P:t.duration},this.m.set(e.id,e),this.v.push(e)),this.v.sort((t,n)=>n.P-t.P),this.v.length>10){const t=this.v.splice(10);for(const n of t)this.m.delete(n.id)}this.T?.(e)}}}const q=t=>{const n=\"requestIdleCallback\"in globalThis?1e3:0,e=globalThis.requestIdleCallback||setTimeout,i=globalThis.cancelIdleCallback||clearTimeout;if(\"hidden\"===document.visibilityState)t();else{const o=T(t);let s=-1;const a=()=>{i(s),o()};addEventListener(\"visibilitychange\",a,{once:!0,capture:!0}),s=e(()=>{removeEventListener(\"visibilitychange\",a,{capture:!0}),o()},{timeout:n})}},A=[200,500],x=(t,o={})=>{if(!globalThis.PerformanceEventTiming||!(\"interactionId\"in PerformanceEventTiming.prototype))return;const s=d();_(()=>{B();let a,r=l(\"INP\");const c=u(o,S),f=(n,e,s,f,h)=>{c.M(),r=l(\"INP\",-1,n,e,s,f,h),a=i(t,r,A,o.reportAllChanges)},h=()=>{const t=c.L(r.navigationType);t&&t.P!==r.value&&(r.value=t.P,r.entries=t.entries,a())},d=t=>{h(),a(!0),f(\"soft-navigation\",t.navigationId,t.interactionId,t.name,t.startTime)},g=(t,n=!1)=>{q(()=>{for(const n of t)\"soft-navigation\"!==n.entryType?c.h(n):d(n);h(),n&&a(!0)})},v=[\"event\",\"first-input\"];p(o)&&v.push(\"soft-navigation\");const b=m(v,g,{...o,durationThreshold:o.durationThreshold??40});a=i(t,r,A,o.reportAllChanges),b&&(s.onHidden(()=>{g(b.takeRecords(),!0)}),e(()=>{f(\"back-forward-cache\",r.navigationId,r.navigationInteractionId,r.navigationURL,n())}))})};class H{p;l;h(t){this.p?.(t)}}const O=[2500,4e3],U=(t,s={})=>{let r=!1;const c=p(s);_(()=>{let f,h=d(),g=l(\"LCP\");const v=u(s,H),p=(n,e,o,a,c)=>{g=l(\"LCP\",-1,n,e,o,a,c),f=i(t,g,O,s.reportAllChanges),r=!1,\"soft-navigation\"===n&&(h=d(!0))},T=t=>{v.l&&t.navigationId&&b(v.l,t),r||f(!0),p(\"soft-navigation\",t.navigationId,t.interactionId,t.name,t.startTime);const n=t.getLargestInteractionContentfulPaint?.();n&&y([n])},y=t=>{s.reportAllChanges||c||(t=t.slice(-1));for(const n of t){if(!n)continue;if(\"soft-navigation\"===n.entryType){T(n);continue}let t=0,e=[],i=n.startTime;if(\"largest-contentful-paint\"===n.entryType)t=Math.max(n.startTime-a(),0),v.h(n),e=[n];else if(\"interaction-contentful-paint\"===n.entryType){const o=n;if(!g.navigationId)continue;if(\"interactionId\"in o&&o.interactionId!=g.navigationInteractionId)continue;i=o.largestContentfulPaint?.renderTime||0,t=Math.max(i-n.startTime,0),o.largestContentfulPaint&&(v.h(o.largestContentfulPaint),e=[o.largestContentfulPaint])}i<h.firstHiddenTime&&(g.value=t,g.entries=e,f())}},_=[\"largest-contentful-paint\"];c&&_.push(\"interaction-contentful-paint\",\"soft-navigation\");const E=m(_,y);if(E){f=i(t,g,O,s.reportAllChanges);const a=[\"keydown\",\"click\",\"visibilitychange\"],h=t=>{if(t.isTrusted&&!r){const t=g.id;q(()=>{if(!r){if(!c){E.disconnect();for(const t of a)removeEventListener(t,h,{capture:!0})}t===g.id&&(r=!0,f(!0))}})}};for(const t of a)addEventListener(t,h,{capture:!0});e(e=>{p(\"back-forward-cache\",g.navigationId,g.navigationInteractionId,g.navigationURL,n()),f=i(t,g,O,s.reportAllChanges),o(()=>{g.value=performance.now()-e.timeStamp,r=!0,f(!0)})})}})},W=[800,1800],$=t=>{document.prerendering?_(()=>$(t)):\"complete\"!==document.readyState?addEventListener(\"load\",()=>$(t),!0):setTimeout(t)},D=(t,o={})=>{const r=p(o);let c=l(\"TTFB\"),f=i(t,c,W,o.reportAllChanges);$(()=>{const h=s();if(h){const s=h.responseStart;if(c.value=Math.max(s-a(),0),c.entries=[h],f(!0),e(()=>{c=l(\"TTFB\",0,\"back-forward-cache\",c.navigationId,c.navigationInteractionId,c.navigationURL,n()),f=i(t,c,W,o.reportAllChanges),f(!0)}),r){m([\"soft-navigation\"],n=>{n.forEach(n=>{n.navigationId&&(c=l(\"TTFB\",0,\"soft-navigation\",n.navigationId,n.interactionId,n.name,n.startTime),c.entries=[n],f=i(t,c,W,o.reportAllChanges),f(!0))})},o)}}})};export{L as CLSThresholds,E as FCPThresholds,A as INPThresholds,O as LCPThresholds,W as TTFBThresholds,P as onCLS,M as onFCP,x as onINP,U as onLCP,D as onTTFB};\n//# sourceMappingURL=web-vitals.js.map\n","import { debug, getFunctionName } from '@sentry/core';\nimport { onCLS, onLCP, onTTFB, onFCP, onINP } from 'web-vitals';\nimport { DEBUG_BUILD } from '../debug-build.js';\n\nconst handlers = {};\nconst instrumented = {};\nlet _previousCls;\nlet _previousLcp;\nlet _previousTtfb;\nlet _previousInp;\nlet _previousFcp;\nconst stopListeners = {};\nlet _reportSoftNavs = false;\nlet _reportBfcache = false;\nfunction enableSoftNavigationReporting() {\n  _reportSoftNavs = true;\n}\nfunction enableBfcacheReporting() {\n  _reportBfcache = true;\n}\nfunction addClsInstrumentationHandler(callback, stopOnCallback = false) {\n  return addMetricObserver(\"cls\", callback, instrumentCls, _previousCls, stopOnCallback);\n}\nfunction addLcpInstrumentationHandler(callback, stopOnCallback = false) {\n  return addMetricObserver(\"lcp\", callback, instrumentLcp, _previousLcp, stopOnCallback);\n}\nfunction addTtfbInstrumentationHandler(callback) {\n  return addMetricObserver(\"ttfb\", callback, instrumentTtfb, _previousTtfb);\n}\nfunction addFcpInstrumentationHandler(callback) {\n  return addMetricObserver(\"fcp\", callback, instrumentFcp, _previousFcp);\n}\nfunction addInpInstrumentationHandler(callback) {\n  return addMetricObserver(\"inp\", callback, instrumentInp, _previousInp);\n}\nfunction addPerformanceInstrumentationHandler(type, callback) {\n  addHandler(type, callback);\n  if (!instrumented[type]) {\n    instrumentPerformanceObserver(type);\n    instrumented[type] = true;\n  }\n  return getCleanupCallback(type, callback);\n}\nfunction triggerHandlers(type, data) {\n  const typeHandlers = handlers[type];\n  if (!typeHandlers?.length) {\n    return;\n  }\n  for (const handler of typeHandlers) {\n    try {\n      handler(data);\n    } catch (e) {\n      DEBUG_BUILD && debug.error(\n        `Error while triggering instrumentation handler.\nType: ${type}\nName: ${getFunctionName(handler)}\nError:`,\n        e\n      );\n    }\n  }\n}\nfunction unlessBfcacheDisabled(callback) {\n  return (metric) => {\n    if (!_reportBfcache && metric.navigationType === \"back-forward-cache\") {\n      return;\n    }\n    callback(metric);\n  };\n}\nfunction instrumentCls() {\n  return onCLS(\n    unlessBfcacheDisabled((metric) => {\n      triggerHandlers(\"cls\", {\n        metric\n      });\n      _previousCls = metric;\n    }),\n    // We want the callback to be called whenever the CLS value updates.\n    // By default, the callback is only called when the tab goes to the background.\n    { reportAllChanges: !_reportSoftNavs && !_reportBfcache, reportSoftNavs: _reportSoftNavs }\n  );\n}\nfunction instrumentLcp() {\n  return onLCP(\n    unlessBfcacheDisabled((metric) => {\n      triggerHandlers(\"lcp\", {\n        metric\n      });\n      _previousLcp = metric;\n    }),\n    // We want the callback to be called whenever the LCP value updates.\n    // By default, the callback is only called when the tab goes to the background.\n    { reportAllChanges: !_reportSoftNavs && !_reportBfcache, reportSoftNavs: _reportSoftNavs }\n  );\n}\nfunction instrumentTtfb() {\n  return onTTFB(\n    unlessBfcacheDisabled((metric) => {\n      triggerHandlers(\"ttfb\", {\n        metric\n      });\n      _previousTtfb = metric;\n    })\n  );\n}\nfunction instrumentFcp() {\n  return onFCP(\n    unlessBfcacheDisabled((metric) => {\n      triggerHandlers(\"fcp\", {\n        metric\n      });\n      _previousFcp = metric;\n    })\n  );\n}\nfunction instrumentInp() {\n  return onINP(\n    unlessBfcacheDisabled((metric) => {\n      triggerHandlers(\"inp\", {\n        metric\n      });\n      _previousInp = metric;\n    }),\n    { reportSoftNavs: _reportSoftNavs }\n  );\n}\nfunction addMetricObserver(type, callback, instrumentFn, previousValue, stopOnCallback = false) {\n  addHandler(type, callback);\n  if (!instrumented[type]) {\n    instrumented[type] = true;\n    void Promise.resolve().then(() => {\n      stopListeners[type] = instrumentFn();\n    });\n  }\n  if (previousValue) {\n    callback({ metric: previousValue });\n  }\n  return getCleanupCallback(type, callback, stopOnCallback);\n}\nfunction instrumentPerformanceObserver(type) {\n  const options = { type, buffered: true };\n  if (type === \"event\") {\n    options.durationThreshold = 0;\n  }\n  try {\n    if (PerformanceObserver.supportedEntryTypes.includes(type)) {\n      const po = new PerformanceObserver((list) => {\n        void Promise.resolve().then(() => {\n          triggerHandlers(type, { entries: list.getEntries() });\n        });\n      });\n      po.observe(options);\n    }\n  } catch {\n  }\n}\nfunction addHandler(type, handler) {\n  handlers[type] = handlers[type] || [];\n  handlers[type].push(handler);\n}\nfunction getCleanupCallback(type, callback, stopOnCleanup = false) {\n  return () => {\n    if (stopOnCleanup) {\n      stopListeners[type]?.();\n    }\n    const typeHandlers = handlers[type];\n    if (!typeHandlers) {\n      return;\n    }\n    const index = typeHandlers.indexOf(callback);\n    if (index !== -1) {\n      typeHandlers.splice(index, 1);\n    }\n  };\n}\nfunction isPerformanceEventTiming(entry) {\n  return \"duration\" in entry;\n}\n\nexport { addClsInstrumentationHandler, addFcpInstrumentationHandler, addInpInstrumentationHandler, addLcpInstrumentationHandler, addPerformanceInstrumentationHandler, addTtfbInstrumentationHandler, enableBfcacheReporting, enableSoftNavigationReporting, isPerformanceEventTiming };\n//# sourceMappingURL=performanceObserver.js.map\n","import { GLOBAL_OBJ } from '@sentry/core';\n\nconst WINDOW = GLOBAL_OBJ;\n\nexport { WINDOW };\n//# sourceMappingURL=types.js.map\n","import { LRUMap, spanToJSON, debug } from '@sentry/core';\nimport { SENTRY_OP, BROWSER_NAVIGATION_ID } from '@sentry/conventions/attributes';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { addPerformanceInstrumentationHandler, isPerformanceEventTiming } from '../instrumentation/performanceObserver.js';\nimport { WINDOW } from '../types.js';\n\nconst MAX_TRACKED_NAVIGATIONS = 5;\nconst INTERACTION_MATCH_TOLERANCE_MS = 5;\nlet _pendingNavigation;\nlet _pendingInteraction;\nlet _lastInteractionTimestamp;\nconst _interactionIdToNavigationSpan = new LRUMap(MAX_TRACKED_NAVIGATIONS);\nconst _navigationIdToNavigationSpan = new LRUMap(MAX_TRACKED_NAVIGATIONS);\nlet _correlationStarted = false;\nfunction interactionMatches(entryStartTime, interactionTimestamp) {\n  return Math.abs(entryStartTime - interactionTimestamp) <= INTERACTION_MATCH_TOLERANCE_MS;\n}\nfunction supportsSoftNavigations() {\n  try {\n    return PerformanceObserver.supportedEntryTypes.includes(\"soft-navigation\") && // Older implementations exposed this as an attribute rather than a method. Only the method\n    // form shipped unflagged, so it's what web-vitals gates on.\n    typeof WINDOW.PerformanceSoftNavigation?.prototype?.getLargestInteractionContentfulPaint === \"function\";\n  } catch {\n    return false;\n  }\n}\nfunction startSoftNavigationCorrelation(client) {\n  if (_correlationStarted || !supportsSoftNavigations()) {\n    return;\n  }\n  _correlationStarted = true;\n  const onInteraction = (event) => {\n    if (event.isTrusted) {\n      _lastInteractionTimestamp = event.timeStamp;\n    }\n  };\n  WINDOW.addEventListener(\"click\", onInteraction, { capture: true, passive: true });\n  WINDOW.addEventListener(\"keydown\", onInteraction, { capture: true, passive: true });\n  client.on(\"spanStart\", (span) => {\n    if (spanToJSON(span).attributes?.[SENTRY_OP] !== \"navigation\") {\n      return;\n    }\n    _pendingNavigation = void 0;\n    const interactionTimestamp = _lastInteractionTimestamp;\n    if (interactionTimestamp == null) {\n      return;\n    }\n    if (_pendingInteraction?.interactionTimestamp === interactionTimestamp) {\n      _interactionIdToNavigationSpan.set(_pendingInteraction.interactionId, span);\n      _pendingInteraction = void 0;\n      return;\n    }\n    _pendingNavigation = { span, interactionTimestamp };\n  });\n  const bindInteractionToNavigationSpan = ({ entries }) => {\n    for (const entry of entries) {\n      if (!isPerformanceEventTiming(entry) || !entry.interactionId) {\n        continue;\n      }\n      const pending = _pendingNavigation;\n      if (pending && interactionMatches(entry.startTime, pending.interactionTimestamp)) {\n        _interactionIdToNavigationSpan.set(entry.interactionId, pending.span);\n        _pendingNavigation = void 0;\n        continue;\n      }\n      if (_interactionIdToNavigationSpan.get(entry.interactionId)) {\n        continue;\n      }\n      if (_lastInteractionTimestamp != null && interactionMatches(entry.startTime, _lastInteractionTimestamp)) {\n        _pendingInteraction = { interactionId: entry.interactionId, interactionTimestamp: _lastInteractionTimestamp };\n      }\n    }\n  };\n  addPerformanceInstrumentationHandler(\"event\", bindInteractionToNavigationSpan);\n  addPerformanceInstrumentationHandler(\"first-input\", bindInteractionToNavigationSpan);\n  addPerformanceInstrumentationHandler(\"soft-navigation\", ({ entries }) => {\n    for (const entry of entries) {\n      const span = _interactionIdToNavigationSpan.get(entry.interactionId);\n      if (!span) {\n        DEBUG_BUILD && debug.log(`[SoftNav] No navigation span found for soft navigation ${entry.navigationId}`, entry);\n        continue;\n      }\n      _navigationIdToNavigationSpan.set(entry.navigationId, span);\n      span.setAttribute(BROWSER_NAVIGATION_ID, entry.navigationId);\n    }\n  });\n}\nfunction getNavigationSpanForMetric(metric) {\n  if (metric.navigationType !== \"soft-navigation\") {\n    return void 0;\n  }\n  const span = _navigationIdToNavigationSpan.get(metric.navigationId);\n  if (span) {\n    return span;\n  }\n  return metric.navigationInteractionId != null ? _interactionIdToNavigationSpan.get(metric.navigationInteractionId) : void 0;\n}\n\nexport { getNavigationSpanForMetric, startSoftNavigationCorrelation, supportsSoftNavigations };\n//# sourceMappingURL=softNavs.js.map\n","import { spanToStaticSpanJSON, withActiveSpan } from '@sentry/core';\nimport { startInactiveSpan } from '@sentry/core/browser';\nimport { WINDOW } from '../types.js';\n\nfunction isMeasurementValue(value) {\n  return typeof value === \"number\" && isFinite(value);\n}\nfunction startAndEndSpan(parentSpan, startTimeInSeconds, endTime, { ...ctx }) {\n  const parentStartTime = spanToStaticSpanJSON(parentSpan).start_timestamp;\n  if (parentStartTime && parentStartTime > startTimeInSeconds) {\n    if (typeof parentSpan.updateStartTime === \"function\") {\n      parentSpan.updateStartTime(startTimeInSeconds);\n    }\n  }\n  return withActiveSpan(parentSpan, () => {\n    const span = startInactiveSpan({\n      startTime: startTimeInSeconds,\n      ...ctx\n    });\n    if (span) {\n      span.end(endTime);\n    }\n    return span;\n  });\n}\nfunction getBrowserPerformanceAPI() {\n  return WINDOW.addEventListener && WINDOW.performance;\n}\nfunction msToSec(time) {\n  return time / 1e3;\n}\nfunction extractNetworkProtocol(nextHopProtocol) {\n  let name = \"unknown\";\n  let version = \"unknown\";\n  let _name = \"\";\n  for (const char of nextHopProtocol) {\n    if (char === \"/\") {\n      [name, version] = nextHopProtocol.split(\"/\");\n      break;\n    }\n    if (!isNaN(Number(char))) {\n      name = _name === \"h\" ? \"http\" : _name;\n      version = nextHopProtocol.split(_name)[1];\n      break;\n    }\n    _name += char;\n  }\n  if (_name === nextHopProtocol) {\n    name = _name;\n  }\n  return { name, version };\n}\nfunction supportsWebVital(entryType) {\n  try {\n    return PerformanceObserver.supportedEntryTypes.includes(entryType);\n  } catch {\n    return false;\n  }\n}\n\nexport { extractNetworkProtocol, getBrowserPerformanceAPI, isMeasurementValue, msToSec, startAndEndSpan, supportsWebVital };\n//# sourceMappingURL=utils.js.map\n","import { _INTERNAL_performanceTimeToSeconds } from '@sentry/core';\nimport { extractNetworkProtocol, msToSec } from './utils.js';\n\nfunction resourceTimingToSpanAttributes(resourceTiming) {\n  const timingSpanData = {};\n  if (resourceTiming.nextHopProtocol != void 0) {\n    const { name, version } = extractNetworkProtocol(resourceTiming.nextHopProtocol);\n    timingSpanData[\"network.protocol.version\"] = version;\n    timingSpanData[\"network.protocol.name\"] = name;\n  }\n  if (_INTERNAL_performanceTimeToSeconds(resourceTiming.startTime) === void 0) {\n    return timingSpanData;\n  }\n  const getAbsoluteTime = (time) => (\n    // falsy values should be preserved so that we can later on drop undefined values and\n    // preserve 0 vals for cross-origin resources without proper `Timing-Allow-Origin` header.\n    time ? _INTERNAL_performanceTimeToSeconds(time, resourceTiming.startTime) : time\n  );\n  return dropUndefinedKeysFromObject({\n    ...timingSpanData,\n    \"http.request.redirect_start\": getAbsoluteTime(resourceTiming.redirectStart),\n    \"http.request.redirect_end\": getAbsoluteTime(resourceTiming.redirectEnd),\n    \"http.request.worker_start\": getAbsoluteTime(resourceTiming.workerStart),\n    \"http.request.fetch_start\": getAbsoluteTime(resourceTiming.fetchStart),\n    \"http.request.domain_lookup_start\": getAbsoluteTime(resourceTiming.domainLookupStart),\n    \"http.request.domain_lookup_end\": getAbsoluteTime(resourceTiming.domainLookupEnd),\n    \"http.request.connect_start\": getAbsoluteTime(resourceTiming.connectStart),\n    \"http.request.secure_connection_start\": getAbsoluteTime(resourceTiming.secureConnectionStart),\n    \"http.request.connection_end\": getAbsoluteTime(resourceTiming.connectEnd),\n    \"http.request.request_start\": getAbsoluteTime(resourceTiming.requestStart),\n    \"http.request.response_start\": getAbsoluteTime(resourceTiming.responseStart),\n    \"http.request.response_end\": getAbsoluteTime(resourceTiming.responseEnd),\n    // For TTFB we actually want the relative time from timeOrigin to responseStart\n    // This way, TTFB always measures the \"first page load\" experience.\n    // see: https://web.dev/articles/ttfb#measure-resource-requests\n    \"http.request.time_to_first_byte\": resourceTiming.responseStart != null ? msToSec(resourceTiming.responseStart) : void 0\n  });\n}\nfunction dropUndefinedKeysFromObject(attrs) {\n  return Object.fromEntries(Object.entries(attrs).filter(([, value]) => value != null));\n}\n\nexport { resourceTimingToSpanAttributes };\n//# sourceMappingURL=resourceTiming.js.map\n","import { spanToJSON, _INTERNAL_performanceTimeToSeconds, getActiveSpan, UI_LONG_TASK_SPAN_NAME_FALLBACK, parseUrl, filterCollectedUrl, RESOURCE_SPAN_NAME_FALLBACK, setMeasurement, BROWSER_NAVIGATION_TIMING_SPAN_NAMES } from '@sentry/core';\nimport { SENTRY_OP, CODE_FILE_PATH, CODE_FUNCTION_NAME, BROWSER_PAINT_TYPE, SENTRY_ORIGIN, NETWORK_CONNECTION_EFFECTIVE_TYPE, NETWORK_CONNECTION_TYPE, NETWORK_CONNECTION_RTT, URL_FULL, URL_SCHEME, SERVER_ADDRESS, URL_DOMAIN, HTTP_REQUEST_SAME_ORIGIN, HTTP_RESPONSE_STATUS_CODE, HTTP_RESPONSE_SIZE, HTTP_RESPONSE_BODY_SIZE } from '@sentry/conventions/attributes';\nimport { UI_LONG_ANIMATION_FRAME, RESOURCE_OTHER, BROWSER_PAINT, BROWSER_LOAD_EVENT, BROWSER_DOM_CONTENT_LOADED_EVENT, BROWSER_CONNECT, BROWSER_REDIRECT, BROWSER_UNLOAD_EVENT, BROWSER_DNS, BROWSER_CACHE, BROWSER_TLS_SSL, BROWSER_REQUEST, BROWSER_RESPONSE, UI_LONG_TASK } from '@sentry/conventions/op';\nimport { addPerformanceInstrumentationHandler } from '../instrumentation/performanceObserver.js';\nimport { WINDOW } from '../types.js';\nimport { resourceTimingToSpanAttributes } from './resourceTiming.js';\nimport { getBrowserPerformanceAPI, msToSec, startAndEndSpan, isMeasurementValue } from './utils.js';\n\nconst MAX_INT_AS_BYTES = 2147483647;\nlet _performanceCursor = 0;\nfunction startTrackingLongTasks() {\n  addPerformanceInstrumentationHandler(\"longtask\", ({ entries }) => {\n    const parent = getActiveSpan();\n    if (!parent) {\n      return;\n    }\n    const { attributes: parentAttributes, start_timestamp: parentStartTimestamp } = spanToJSON(parent);\n    for (const entry of entries) {\n      const startTime = _INTERNAL_performanceTimeToSeconds(entry.startTime);\n      if (!startTime) {\n        continue;\n      }\n      const duration = msToSec(entry.duration);\n      if (parentAttributes[SENTRY_OP] === \"navigation\" && parentStartTimestamp && startTime < parentStartTimestamp) {\n        continue;\n      }\n      startAndEndSpan(parent, startTime, startTime + duration, {\n        name: UI_LONG_TASK_SPAN_NAME_FALLBACK,\n        op: UI_LONG_TASK,\n        attributes: {\n          [SENTRY_ORIGIN]: \"auto.ui.browser.metrics\"\n        }\n      });\n    }\n  });\n}\nfunction startTrackingLongAnimationFrames() {\n  const observer = new PerformanceObserver((list) => {\n    const parent = getActiveSpan();\n    if (!parent) {\n      return;\n    }\n    for (const entry of list.getEntries()) {\n      const startTime = _INTERNAL_performanceTimeToSeconds(entry.startTime);\n      if (!startTime || !entry.scripts[0]) {\n        continue;\n      }\n      const {\n        start_timestamp: parentStartTimestamp,\n        attributes: { [SENTRY_OP]: parentOp }\n      } = spanToJSON(parent);\n      if (parentOp === \"navigation\" && parentStartTimestamp && startTime < parentStartTimestamp) {\n        continue;\n      }\n      const duration = msToSec(entry.duration);\n      const attributes = {\n        [SENTRY_ORIGIN]: \"auto.ui.browser.metrics\"\n      };\n      const initialScript = entry.scripts[0];\n      const { invoker, invokerType, sourceURL, sourceFunctionName, sourceCharPosition } = initialScript;\n      attributes[\"browser.script.invoker\"] = invoker;\n      attributes[\"browser.script.invoker_type\"] = invokerType;\n      if (sourceURL) {\n        attributes[CODE_FILE_PATH] = sourceURL;\n      }\n      if (sourceFunctionName) {\n        attributes[CODE_FUNCTION_NAME] = sourceFunctionName;\n      }\n      if (sourceCharPosition !== -1) {\n        attributes[\"browser.script.source_char_position\"] = sourceCharPosition;\n      }\n      startAndEndSpan(parent, startTime, startTime + duration, {\n        name: UI_LONG_TASK_SPAN_NAME_FALLBACK,\n        op: UI_LONG_ANIMATION_FRAME,\n        attributes\n      });\n    }\n  });\n  observer.observe({ type: \"long-animation-frame\", buffered: true });\n}\nfunction addPerformanceEntries(span, options) {\n  const performance = getBrowserPerformanceAPI();\n  if (!performance?.getEntries) {\n    return;\n  }\n  const { spanStreamingEnabled, ignoreResourceSpans } = options;\n  const performanceEntries = performance.getEntries();\n  const { attributes, start_timestamp: transactionStartTime } = spanToJSON(span);\n  performanceEntries.slice(_performanceCursor).forEach((entry) => {\n    const startTimestamp = _INTERNAL_performanceTimeToSeconds(entry.startTime);\n    if (!startTimestamp) {\n      return;\n    }\n    const duration = msToSec(\n      // Inexplicably, Chrome sometimes emits a negative duration. We need to work around this.\n      // There is a SO post attempting to explain this, but it leaves one with open questions: https://stackoverflow.com/questions/23191918/peformance-getentries-and-negative-duration-display\n      // The way we clamp the value is probably not accurate, since we have observed this happen for things that may take a while to load, like for example the replay worker.\n      // TODO: Investigate why this happens and how to properly mitigate. For now, this is a workaround to prevent transactions being dropped due to negative duration spans.\n      Math.max(0, entry.duration)\n    );\n    if (attributes[SENTRY_OP] === \"navigation\" && transactionStartTime && startTimestamp < transactionStartTime) {\n      return;\n    }\n    switch (entry.entryType) {\n      case \"navigation\": {\n        _addNavigationSpans(span, entry, spanStreamingEnabled);\n        break;\n      }\n      case \"paint\": {\n        _addPaintSpan(span, entry, startTimestamp, duration);\n        break;\n      }\n      case \"resource\": {\n        _addResourceSpans(\n          span,\n          entry,\n          entry.name,\n          startTimestamp,\n          duration,\n          ignoreResourceSpans,\n          spanStreamingEnabled\n        );\n        break;\n      }\n    }\n  });\n  _performanceCursor = Math.max(performanceEntries.length - 1, 0);\n  _trackNavigator(span, spanStreamingEnabled);\n}\nfunction _addPaintSpan(span, entry, startTimestamp, duration) {\n  startAndEndSpan(span, startTimestamp, startTimestamp + duration, {\n    // The entry name (`first-paint`, `first-contentful-paint`) is already the low-cardinality name\n    // the conventions ask for, so only the attribute backing it has to be added.\n    name: entry.name,\n    attributes: {\n      [SENTRY_OP]: BROWSER_PAINT,\n      [SENTRY_ORIGIN]: \"auto.resource.browser.metrics\",\n      [BROWSER_PAINT_TYPE]: entry.name\n    }\n  });\n}\nfunction _addNavigationSpans(span, entry, spanStreamingEnabled) {\n  _addPerformanceNavigationTiming(span, entry, \"unloadEvent\", spanStreamingEnabled);\n  _addPerformanceNavigationTiming(span, entry, \"redirect\", spanStreamingEnabled);\n  _addPerformanceNavigationTiming(span, entry, \"domContentLoadedEvent\", spanStreamingEnabled);\n  _addPerformanceNavigationTiming(span, entry, \"loadEvent\", spanStreamingEnabled);\n  _addPerformanceNavigationTiming(span, entry, \"connect\", spanStreamingEnabled);\n  _addPerformanceNavigationTiming(span, entry, \"secureConnection\", spanStreamingEnabled);\n  _addPerformanceNavigationTiming(span, entry, \"fetch\", spanStreamingEnabled);\n  _addPerformanceNavigationTiming(span, entry, \"domainLookup\", spanStreamingEnabled);\n  _addRequest(span, entry, spanStreamingEnabled);\n}\nfunction _navigationTimeToSeconds(entry, time) {\n  return _INTERNAL_performanceTimeToSeconds(time, entry.startTime);\n}\nconst NAVIGATION_TIMING_SPAN_OPS = {\n  secureConnection: BROWSER_TLS_SSL,\n  fetch: BROWSER_CACHE,\n  domainLookup: BROWSER_DNS,\n  unloadEvent: BROWSER_UNLOAD_EVENT,\n  redirect: BROWSER_REDIRECT,\n  connect: BROWSER_CONNECT,\n  domContentLoadedEvent: BROWSER_DOM_CONTENT_LOADED_EVENT,\n  loadEvent: BROWSER_LOAD_EVENT\n};\nfunction _addPerformanceNavigationTiming(span, entry, event, spanStreamingEnabled) {\n  const eventEnd = _getEndPropertyNameForNavigationTiming(event);\n  const end = entry[eventEnd];\n  const start = entry[`${event}Start`];\n  if (!start || !end) {\n    return;\n  }\n  const op = NAVIGATION_TIMING_SPAN_OPS[event];\n  const filteredUrl = filterCollectedUrl(entry.name);\n  startAndEndSpan(span, _navigationTimeToSeconds(entry, start), _navigationTimeToSeconds(entry, end), {\n    // With span streaming, span names have to be low cardinality, so we can't fall back to the\n    // document URL. `url.full` keeps it, and is what Relay derives the description from.\n    name: spanStreamingEnabled ? BROWSER_NAVIGATION_TIMING_SPAN_NAMES[op] : filteredUrl,\n    attributes: {\n      [SENTRY_OP]: op,\n      [SENTRY_ORIGIN]: \"auto.ui.browser.metrics\",\n      [URL_FULL]: filteredUrl,\n      ...event === \"redirect\" && entry.redirectCount != null ? { \"http.redirect_count\": entry.redirectCount } : {}\n    }\n  });\n}\nfunction _getEndPropertyNameForNavigationTiming(event) {\n  if (event === \"secureConnection\") {\n    return \"connectEnd\";\n  }\n  if (event === \"fetch\") {\n    return \"domainLookupStart\";\n  }\n  return `${event}End`;\n}\nfunction _addRequest(span, entry, spanStreamingEnabled) {\n  const requestStartTimestamp = _navigationTimeToSeconds(entry, entry.requestStart);\n  const responseEndTimestamp = _navigationTimeToSeconds(entry, entry.responseEnd);\n  const responseStartTimestamp = _navigationTimeToSeconds(entry, entry.responseStart);\n  if (entry.responseEnd) {\n    const filteredUrl = filterCollectedUrl(entry.name);\n    startAndEndSpan(span, requestStartTimestamp, responseEndTimestamp, {\n      name: spanStreamingEnabled ? BROWSER_NAVIGATION_TIMING_SPAN_NAMES[BROWSER_REQUEST] : filteredUrl,\n      attributes: {\n        [SENTRY_OP]: BROWSER_REQUEST,\n        [SENTRY_ORIGIN]: \"auto.ui.browser.metrics\",\n        [URL_FULL]: filteredUrl\n      }\n    });\n    startAndEndSpan(span, responseStartTimestamp, responseEndTimestamp, {\n      name: spanStreamingEnabled ? BROWSER_NAVIGATION_TIMING_SPAN_NAMES[BROWSER_RESPONSE] : filteredUrl,\n      attributes: {\n        [SENTRY_OP]: BROWSER_RESPONSE,\n        [SENTRY_ORIGIN]: \"auto.ui.browser.metrics\",\n        [URL_FULL]: filteredUrl\n      }\n    });\n  }\n}\nfunction _addResourceSpans(span, entry, resourceUrl, startTimestamp, duration, ignoredResourceSpanOps, spanStreamingEnabled) {\n  if (entry.initiatorType === \"xmlhttprequest\" || entry.initiatorType === \"fetch\") {\n    return;\n  }\n  const op = entry.initiatorType ? `resource.${entry.initiatorType}` : RESOURCE_OTHER;\n  if (ignoredResourceSpanOps?.includes(op)) {\n    return;\n  }\n  const attributes = {\n    [SENTRY_ORIGIN]: \"auto.resource.browser.metrics\"\n  };\n  const parsedUrl = parseUrl(resourceUrl);\n  if (parsedUrl.protocol) {\n    attributes[URL_SCHEME] = parsedUrl.protocol.split(\":\").pop();\n  }\n  const host = parsedUrl.host?.replace(/^.*@/, \"\");\n  if (host) {\n    attributes[SERVER_ADDRESS] = host;\n  }\n  const domain = host?.replace(/:\\d+$/, \"\");\n  if (domain) {\n    attributes[URL_DOMAIN] = domain;\n  }\n  attributes[HTTP_REQUEST_SAME_ORIGIN] = resourceUrl.includes(WINDOW.location.origin);\n  const filteredUrl = filterCollectedUrl(resourceUrl);\n  attributes[URL_FULL] = filteredUrl;\n  _setResourceRequestAttributes(entry, attributes, [\n    // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/responseStatus\n    [\"responseStatus\", HTTP_RESPONSE_STATUS_CODE],\n    [\"transferSize\", HTTP_RESPONSE_SIZE],\n    [\"encodedBodySize\", HTTP_RESPONSE_BODY_SIZE],\n    [\"decodedBodySize\", \"http.response.body.decoded_size\"],\n    // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/renderBlockingStatus\n    [\"renderBlockingStatus\", \"resource.render_blocking_status\"],\n    // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/deliveryType\n    [\"deliveryType\", \"http.response_delivery_type\"]\n  ]);\n  const attributesWithResourceTiming = { ...attributes, ...resourceTimingToSpanAttributes(entry) };\n  const endTimestamp = startTimestamp + duration;\n  startAndEndSpan(span, startTimestamp, endTimestamp, {\n    // With span streaming, span names have to be low cardinality, so we can't fall back to the URL.\n    name: spanStreamingEnabled ? domain || RESOURCE_SPAN_NAME_FALLBACK : filteredUrl.replace(WINDOW.location.origin, \"\"),\n    op,\n    attributes: attributesWithResourceTiming\n  });\n}\nfunction _trackNavigator(span, spanStreamingEnabled) {\n  const navigator = WINDOW.navigator;\n  if (!navigator) {\n    return;\n  }\n  const connection = navigator.connection;\n  if (connection) {\n    if (connection.effectiveType) {\n      span.setAttribute(\n        spanStreamingEnabled ? NETWORK_CONNECTION_EFFECTIVE_TYPE : \"effectiveConnectionType\",\n        connection.effectiveType\n      );\n    }\n    if (connection.type) {\n      span.setAttribute(spanStreamingEnabled ? NETWORK_CONNECTION_TYPE : \"connectionType\", connection.type);\n    }\n    if (isMeasurementValue(connection.rtt)) {\n      if (spanStreamingEnabled) {\n        span.setAttribute(NETWORK_CONNECTION_RTT, connection.rtt);\n      } else if (spanToJSON(span).attributes[SENTRY_OP] === \"pageload\") {\n        setMeasurement(\"connection.rtt\", connection.rtt, \"millisecond\");\n      }\n    }\n  }\n  if (isMeasurementValue(navigator.deviceMemory)) {\n    if (spanStreamingEnabled) {\n      span.setAttribute(\"device.memory.estimated_capacity\", navigator.deviceMemory);\n    } else {\n      span.setAttribute(\"deviceMemory\", `${navigator.deviceMemory} GB`);\n    }\n  }\n  if (isMeasurementValue(navigator.hardwareConcurrency)) {\n    if (spanStreamingEnabled) {\n      span.setAttribute(\"device.processor_count\", navigator.hardwareConcurrency);\n    } else {\n      span.setAttribute(\"hardwareConcurrency\", String(navigator.hardwareConcurrency));\n    }\n  }\n}\nfunction _setResourceRequestAttributes(entry, attributes, properties) {\n  properties.forEach(([entryKey, attributeKey]) => {\n    const entryVal = entry[entryKey];\n    if (entryVal != null && (typeof entryVal === \"number\" && entryVal < MAX_INT_AS_BYTES || typeof entryVal === \"string\")) {\n      attributes[attributeKey] = entryVal;\n    }\n  });\n}\n\nexport { _addNavigationSpans, _addPaintSpan, _addResourceSpans, _setResourceRequestAttributes, addPerformanceEntries, startTrackingLongAnimationFrames, startTrackingLongTasks };\n//# sourceMappingURL=entries.js.map\n","import { isString } from '@sentry/core';\n\nconst DEFAULT_MAX_STRING_LENGTH = 80;\nconst accessors = {};\ntry {\n  if (typeof Node !== \"undefined\") {\n    accessors.parentNode = Object.getOwnPropertyDescriptor(Node.prototype, \"parentNode\").get;\n  }\n  if (typeof Element !== \"undefined\") {\n    accessors.tagName = Object.getOwnPropertyDescriptor(Element.prototype, \"tagName\").get;\n    accessors.id = Object.getOwnPropertyDescriptor(Element.prototype, \"id\").get;\n    accessors.className = Object.getOwnPropertyDescriptor(Element.prototype, \"className\").get;\n    accessors.getAttribute = Element.prototype.getAttribute;\n  }\n  if (typeof HTMLElement !== \"undefined\") {\n    accessors.dataset = Object.getOwnPropertyDescriptor(HTMLElement.prototype, \"dataset\").get;\n  }\n} catch {\n}\nfunction _safeRead(el, prop, arg) {\n  const fn = accessors[prop];\n  if (fn) {\n    try {\n      return fn.call(el, arg);\n    } catch {\n    }\n  }\n  const val = el[prop];\n  return typeof val === \"function\" ? val.call(el, arg) : val;\n}\nfunction htmlTreeAsString(elem, options = {}) {\n  if (!elem) {\n    return \"<unknown>\";\n  }\n  try {\n    let currentElem = elem;\n    const MAX_TRAVERSE_HEIGHT = 5;\n    const out = [];\n    let height = 0;\n    let len = 0;\n    const separator = \" > \";\n    const sepLength = separator.length;\n    let nextStr;\n    const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;\n    const maxStringLength = !Array.isArray(options) && options.maxStringLength || DEFAULT_MAX_STRING_LENGTH;\n    while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n      nextStr = _htmlElementAsString(currentElem, keyAttrs);\n      if (nextStr === \"html\" || height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength) {\n        break;\n      }\n      out.push(nextStr);\n      len += nextStr.length;\n      currentElem = _safeRead(currentElem, \"parentNode\");\n    }\n    return out.reverse().join(separator);\n  } catch {\n    return \"<unknown>\";\n  }\n}\nfunction _htmlElementAsString(el, keyAttrs) {\n  const out = [];\n  const tagName = _safeRead(el, \"tagName\");\n  if (!tagName) {\n    return \"\";\n  }\n  if (typeof HTMLElement !== \"undefined\") {\n    if (el instanceof HTMLElement) {\n      const dataset = _safeRead(el, \"dataset\");\n      if (dataset) {\n        if (dataset[\"sentryComponent\"]) {\n          return dataset[\"sentryComponent\"];\n        }\n        if (dataset[\"sentryElement\"]) {\n          return dataset[\"sentryElement\"];\n        }\n      }\n    }\n  }\n  out.push(tagName.toLowerCase());\n  const keyAttrPairs = keyAttrs?.length ? keyAttrs.filter((keyAttr) => _safeRead(el, \"getAttribute\", keyAttr)).map((keyAttr) => [keyAttr, _safeRead(el, \"getAttribute\", keyAttr)]) : null;\n  if (keyAttrPairs?.length) {\n    keyAttrPairs.forEach((keyAttrPair) => {\n      out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n    });\n  } else {\n    const id = _safeRead(el, \"id\");\n    if (id) {\n      out.push(`#${id}`);\n    }\n    const className = _safeRead(el, \"className\");\n    if (className && isString(className)) {\n      const classes = className.split(/\\s+/);\n      for (const c of classes) {\n        out.push(`.${c}`);\n      }\n    }\n  }\n  for (const k of [\"aria-label\", \"type\", \"name\", \"title\", \"alt\"]) {\n    const attr = _safeRead(el, \"getAttribute\", k);\n    if (attr) {\n      out.push(`[${k}=\"${attr}\"]`);\n    }\n  }\n  return out.join(\"\");\n}\n\nexport { htmlTreeAsString };\n//# sourceMappingURL=htmlTreeAsString.js.map\n","const MAX_PLAUSIBLE_LCP_DURATION = 6e4;\nfunction isValidLcpMetric(lcpValue) {\n  return lcpValue != null && lcpValue > 0 && lcpValue <= MAX_PLAUSIBLE_LCP_DURATION;\n}\n\nexport { MAX_PLAUSIBLE_LCP_DURATION, isValidLcpMetric };\n//# sourceMappingURL=lcp.js.map\n","import { WINDOW } from '../types.js';\n\nfunction addPageListener(type, listener, options) {\n  if (WINDOW.document) {\n    WINDOW.addEventListener(type, listener, options);\n  }\n}\nfunction removePageListener(type, listener, options) {\n  if (WINDOW.document) {\n    WINDOW.removeEventListener(type, listener, options);\n  }\n}\nconst getNavigationEntry = (checkResponseStart = true) => {\n  const navigationEntry = WINDOW.performance?.getEntriesByType?.(\"navigation\")[0];\n  if (\n    // sentry-specific change:\n    // We don't want to check for responseStart for our own use of `getNavigationEntry`\n    !checkResponseStart || navigationEntry && navigationEntry.responseStart > 0 && navigationEntry.responseStart < performance.now()\n  ) {\n    return navigationEntry;\n  }\n};\nconst getActivationStart = () => {\n  const navEntry = getNavigationEntry();\n  return navEntry?.activationStart ?? 0;\n};\nconst onHidden = (cb) => {\n  const onHiddenCallback = (event) => {\n    if (WINDOW.document?.visibilityState === \"hidden\") {\n      cb(event);\n    }\n  };\n  addPageListener(\"visibilitychange\", onHiddenCallback, { capture: true });\n};\nlet firstHiddenTime = -1;\nconst onHiddenFunctions = /* @__PURE__ */ new Set();\nconst initHiddenTime = () => {\n  return WINDOW.document?.visibilityState === \"hidden\" && !WINDOW.document?.prerendering ? 0 : Infinity;\n};\nconst onVisibilityUpdate = (event) => {\n  if (WINDOW.document?.visibilityState === \"hidden\" && firstHiddenTime > -1) {\n    if (event.type === \"visibilitychange\") {\n      for (const onHiddenFunction of onHiddenFunctions) {\n        onHiddenFunction();\n      }\n    }\n    if (!isFinite(firstHiddenTime)) {\n      firstHiddenTime = event.type === \"visibilitychange\" ? event.timeStamp : 0;\n      removePageListener(\"prerenderingchange\", onVisibilityUpdate, true);\n    }\n  }\n};\nconst getVisibilityWatcher = () => {\n  if (WINDOW.document && firstHiddenTime < 0) {\n    const activationStart = getActivationStart();\n    const firstVisibilityStateHiddenTime = !WINDOW.document.prerendering ? globalThis.performance.getEntriesByType(\"visibility-state\").filter((e) => e.name === \"hidden\" && e.startTime > activationStart)[0]?.startTime : void 0;\n    firstHiddenTime = firstVisibilityStateHiddenTime ?? initHiddenTime();\n    addPageListener(\"visibilitychange\", onVisibilityUpdate, true);\n    addPageListener(\"prerenderingchange\", onVisibilityUpdate, true);\n  }\n  return {\n    get firstHiddenTime() {\n      return firstHiddenTime;\n    },\n    onHidden(cb) {\n      onHiddenFunctions.add(cb);\n    }\n  };\n};\nconst whenIdleOrHidden = (cb) => {\n  const rIC = WINDOW.requestIdleCallback || WINDOW.setTimeout;\n  if (WINDOW.document?.visibilityState === \"hidden\") {\n    cb();\n  } else {\n    let called = false;\n    const runOnce = () => {\n      if (!called) {\n        cb();\n        called = true;\n      }\n    };\n    addPageListener(\"visibilitychange\", runOnce, { once: true, capture: true });\n    rIC(() => {\n      runOnce();\n      removePageListener(\"visibilitychange\", runOnce, { capture: true });\n    });\n  }\n};\n\nexport { addPageListener, getActivationStart, getNavigationEntry, getVisibilityWatcher, onHidden, removePageListener, whenIdleOrHidden };\n//# sourceMappingURL=utils.js.map\n","import { browserPerformanceTimeOrigin, spanToJSON, setMeasurement, debug, filterCollectedUrl } from '@sentry/core';\nimport { SENTRY_OP, BROWSER_NAVIGATION_TYPE } from '@sentry/conventions/attributes';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { htmlTreeAsString } from '../htmlTreeAsString.js';\nimport { addLcpInstrumentationHandler, addClsInstrumentationHandler, addTtfbInstrumentationHandler, addFcpInstrumentationHandler, addPerformanceInstrumentationHandler } from '../instrumentation/performanceObserver.js';\nimport { getBrowserPerformanceAPI, msToSec } from '../performance/utils.js';\nimport { isValidLcpMetric } from './lcp.js';\nimport { getActivationStart, getNavigationEntry, getVisibilityWatcher } from './utils.js';\n\nlet _measurements = {};\nlet _lcpEntry;\nlet _clsEntry;\nlet _navigationType;\nfunction startTrackingWebVitals({ trackCls, trackLcp }) {\n  const performance = getBrowserPerformanceAPI();\n  if (performance && browserPerformanceTimeOrigin()) {\n    const lcpCleanupCallback = trackLcp ? _trackLCP() : void 0;\n    const clsCleanupCallback = trackCls ? _trackCLS() : void 0;\n    const ttfbCleanupCallback = _trackTtfb();\n    const fcpCleanupCallback = _trackFcp();\n    const fpCleanupCallback = _trackFp();\n    return () => {\n      ttfbCleanupCallback();\n      fcpCleanupCallback();\n      fpCleanupCallback();\n      lcpCleanupCallback?.();\n      clsCleanupCallback?.();\n    };\n  }\n  return () => void 0;\n}\nfunction _trackCLS() {\n  return addClsInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n    _measurements[\"cls\"] = { value: metric.value, unit: \"\" };\n    _clsEntry = entry;\n  }, true);\n}\nfunction _trackLCP() {\n  return addLcpInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry || !isValidLcpMetric(metric.value)) {\n      return;\n    }\n    _measurements[\"lcp\"] = { value: metric.value, unit: \"millisecond\" };\n    _lcpEntry = entry;\n  }, true);\n}\nfunction _trackTtfb() {\n  return addTtfbInstrumentationHandler(({ metric }) => {\n    _navigationType = metric.navigationType;\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n    _measurements[\"ttfb\"] = { value: metric.value, unit: \"millisecond\" };\n  });\n}\nfunction _trackFcp() {\n  return addFcpInstrumentationHandler(({ metric }) => {\n    _navigationType = metric.navigationType;\n    _measurements[\"fcp\"] = { value: metric.value, unit: \"millisecond\" };\n  });\n}\nfunction _trackFp() {\n  return addPerformanceInstrumentationHandler(\"paint\", ({ entries }) => {\n    const firstHidden = getVisibilityWatcher();\n    for (const entry of entries) {\n      if (entry.name === \"first-paint\" && entry.startTime < firstHidden.firstHiddenTime) {\n        _measurements[\"fp\"] = { value: entry.startTime, unit: \"millisecond\" };\n      }\n    }\n  });\n}\nfunction addWebVitalsToSpan(span, options) {\n  const origin = browserPerformanceTimeOrigin();\n  if (!getBrowserPerformanceAPI()?.getEntries || !origin) {\n    resetWebVitalState();\n    return;\n  }\n  const { spanStreamingEnabled, recordClsOnPageloadSpan, recordLcpOnPageloadSpan } = options;\n  const timeOrigin = msToSec(origin);\n  if (spanToJSON(span).attributes[SENTRY_OP] === \"pageload\") {\n    _addTtfbRequestTimeToMeasurements(_measurements);\n    _rebaseFpAgainstActivationStart(_measurements);\n    if (spanStreamingEnabled) {\n      const setAttr = (shortWebVitalName, value, customAttrName) => {\n        const attrKey = customAttrName ?? `browser.web_vital.${shortWebVitalName}.value`;\n        span.setAttribute(attrKey, value);\n        DEBUG_BUILD && debug.log(\"Setting web vital attribute\", { [attrKey]: value }, \"on pageload span\");\n      };\n      [\"ttfb\", \"fp\", \"fcp\"].forEach((measurementName) => {\n        if (_measurements[measurementName]) {\n          setAttr(measurementName, _measurements[measurementName].value);\n        }\n      });\n      if (_measurements[\"ttfb.requestTime\"]) {\n        setAttr(\"ttfb.requestTime\", _measurements[\"ttfb.requestTime\"].value, \"browser.web_vital.ttfb.request_time\");\n      }\n    } else {\n      if (!recordClsOnPageloadSpan) {\n        delete _measurements.cls;\n      }\n      if (!recordLcpOnPageloadSpan) {\n        delete _measurements.lcp;\n      }\n      Object.entries(_measurements).forEach(([measurementName, measurement]) => {\n        setMeasurement(measurementName, measurement.value, measurement.unit, span);\n      });\n      _setWebVitalAttributes(span, options);\n    }\n    if (_navigationType) {\n      span.setAttribute(BROWSER_NAVIGATION_TYPE, _navigationType);\n    }\n    span.setAttribute(spanStreamingEnabled ? \"browser.performance.time_origin\" : \"performance.timeOrigin\", timeOrigin);\n    span.setAttribute(\n      spanStreamingEnabled ? \"browser.performance.navigation.activation_start\" : \"performance.activationStart\",\n      getActivationStart()\n    );\n  }\n  resetWebVitalState();\n}\nfunction resetWebVitalState() {\n  _lcpEntry = void 0;\n  _clsEntry = void 0;\n  _navigationType = void 0;\n  _measurements = {};\n}\nfunction _setWebVitalAttributes(span, options) {\n  if (_lcpEntry && options.recordLcpOnPageloadSpan) {\n    if (_lcpEntry.element) {\n      span.setAttribute(\"lcp.element\", htmlTreeAsString(_lcpEntry.element));\n    }\n    if (_lcpEntry.id) {\n      span.setAttribute(\"lcp.id\", _lcpEntry.id);\n    }\n    if (_lcpEntry.url) {\n      span.setAttribute(\"lcp.url\", filterCollectedUrl(_lcpEntry.url.trim()).slice(0, 200));\n    }\n    if (_lcpEntry.loadTime != null) {\n      span.setAttribute(\"lcp.loadTime\", _lcpEntry.loadTime);\n    }\n    if (_lcpEntry.renderTime != null) {\n      span.setAttribute(\"lcp.renderTime\", _lcpEntry.renderTime);\n    }\n    span.setAttribute(\"lcp.size\", _lcpEntry.size);\n  }\n  if (_clsEntry?.sources && options.recordClsOnPageloadSpan) {\n    _clsEntry.sources.forEach(\n      (source, index) => span.setAttribute(`cls.source.${index + 1}`, htmlTreeAsString(source.node))\n    );\n  }\n}\nfunction _rebaseFpAgainstActivationStart(measurements) {\n  const fp = measurements[\"fp\"];\n  if (fp) {\n    fp.value = Math.max(fp.value - getActivationStart(), 0);\n  }\n}\nfunction _addTtfbRequestTimeToMeasurements(_measurements2) {\n  const navEntry = getNavigationEntry(false);\n  if (!navEntry) {\n    return;\n  }\n  const { responseStart, requestStart } = navEntry;\n  if (requestStart <= responseStart) {\n    _measurements2[\"ttfb.requestTime\"] = {\n      value: responseStart - requestStart,\n      unit: \"millisecond\"\n    };\n  }\n}\n\nexport { addWebVitalsToSpan, startTrackingWebVitals };\n//# sourceMappingURL=tracking.js.map\n","import { isBrowser, getActiveSpan, getRootSpan } from '@sentry/core';\nimport { htmlTreeAsString } from '../htmlTreeAsString.js';\nimport { WINDOW } from '../types.js';\nimport { addPerformanceInstrumentationHandler, isPerformanceEventTiming } from '../instrumentation/performanceObserver.js';\n\nconst LAST_INTERACTIONS = [];\nconst INTERACTIONS_SPAN_MAP = /* @__PURE__ */ new Map();\nconst UNKNOWN_ELEMENT_NAME = \"<unknown>\";\nconst ELEMENT_NAME_TIMESTAMP_MAP = /* @__PURE__ */ new Map();\nconst MAX_PLAUSIBLE_INP_DURATION = 60;\nconst INP_ENTRY_MAP = {\n  click: \"click\",\n  pointerdown: \"click\",\n  pointerup: \"click\",\n  mousedown: \"click\",\n  mouseup: \"click\",\n  touchstart: \"click\",\n  touchend: \"click\",\n  mouseover: \"hover\",\n  mouseout: \"hover\",\n  mouseenter: \"hover\",\n  mouseleave: \"hover\",\n  pointerover: \"hover\",\n  pointerout: \"hover\",\n  pointerenter: \"hover\",\n  pointerleave: \"hover\",\n  dragstart: \"drag\",\n  dragend: \"drag\",\n  drag: \"drag\",\n  dragenter: \"drag\",\n  dragleave: \"drag\",\n  dragover: \"drag\",\n  drop: \"drag\",\n  keydown: \"press\",\n  keyup: \"press\",\n  keypress: \"press\",\n  input: \"press\"\n};\nfunction getCachedInteractionContext(interactionId) {\n  return interactionId != null ? INTERACTIONS_SPAN_MAP.get(interactionId) : void 0;\n}\nfunction registerInpInteractionListener() {\n  const interactionEvents = Object.keys(INP_ENTRY_MAP);\n  if (isBrowser()) {\n    interactionEvents.forEach((eventType) => {\n      WINDOW.addEventListener(eventType, captureElementFromEvent, { capture: true, passive: true });\n    });\n  }\n  function captureElementFromEvent(event) {\n    const target = event.target;\n    if (!target) {\n      return;\n    }\n    const elementName = htmlTreeAsString(target);\n    const timestamp = Math.round(event.timeStamp);\n    if (!elementName || elementName === UNKNOWN_ELEMENT_NAME) {\n      return;\n    }\n    if (ELEMENT_NAME_TIMESTAMP_MAP.has(timestamp)) {\n      return;\n    }\n    ELEMENT_NAME_TIMESTAMP_MAP.set(timestamp, elementName);\n    if (ELEMENT_NAME_TIMESTAMP_MAP.size > 50) {\n      const firstKey = ELEMENT_NAME_TIMESTAMP_MAP.keys().next().value;\n      if (firstKey !== void 0) {\n        ELEMENT_NAME_TIMESTAMP_MAP.delete(firstKey);\n      }\n    }\n  }\n  function resolveElementNameFromEntry(entry) {\n    const timestamp = Math.round(entry.startTime);\n    let elementName = ELEMENT_NAME_TIMESTAMP_MAP.get(timestamp);\n    if (!elementName) {\n      for (let offset = -5; offset <= 5; offset++) {\n        const nearbyName = ELEMENT_NAME_TIMESTAMP_MAP.get(timestamp + offset);\n        if (nearbyName) {\n          elementName = nearbyName;\n          break;\n        }\n      }\n    }\n    return elementName || UNKNOWN_ELEMENT_NAME;\n  }\n  const handleEntries = ({ entries }) => {\n    const activeSpan = getActiveSpan();\n    const activeRootSpan = activeSpan && getRootSpan(activeSpan);\n    entries.forEach((entry) => {\n      if (!isPerformanceEventTiming(entry)) {\n        return;\n      }\n      const interactionId = entry.interactionId;\n      if (interactionId == null) {\n        return;\n      }\n      if (INTERACTIONS_SPAN_MAP.has(interactionId)) {\n        return;\n      }\n      const elementName = entry.target ? htmlTreeAsString(entry.target) : resolveElementNameFromEntry(entry);\n      if (LAST_INTERACTIONS.length > 10) {\n        const last = LAST_INTERACTIONS.shift();\n        INTERACTIONS_SPAN_MAP.delete(last);\n      }\n      LAST_INTERACTIONS.push(interactionId);\n      INTERACTIONS_SPAN_MAP.set(interactionId, {\n        span: activeRootSpan,\n        elementName\n      });\n    });\n  };\n  addPerformanceInstrumentationHandler(\"event\", handleEntries);\n  addPerformanceInstrumentationHandler(\"first-input\", handleEntries);\n}\n\nexport { INP_ENTRY_MAP, MAX_PLAUSIBLE_INP_DURATION, UNKNOWN_ELEMENT_NAME, getCachedInteractionContext, registerInpInteractionListener };\n//# sourceMappingURL=inp.js.map\n","import { WINDOW } from './types.js';\n\nconst BOT_USER_AGENT_RE = /Googlebot|Google-InspectionTool|Storebot-Google|Bingbot|Slurp|DuckDuckBot|Baiduspider|YandexBot|Facebot|facebookexternalhit|LinkedInBot|Twitterbot|Applebot/i;\nfunction isBotUserAgent() {\n  const nav = WINDOW.navigator;\n  if (!nav?.userAgent) {\n    return false;\n  }\n  return BOT_USER_AGENT_RE.test(nav.userAgent);\n}\n\nexport { isBotUserAgent };\n//# sourceMappingURL=isBotUserAgent.js.map\n","import { GLOBAL_OBJ } from '@sentry/core';\n\nfunction getComponentName(elem, maxTraverseHeight = 5) {\n  if (!GLOBAL_OBJ.HTMLElement) {\n    return null;\n  }\n  let currentElem = elem;\n  for (let i = 0; i < maxTraverseHeight; i++) {\n    if (!currentElem) {\n      return null;\n    }\n    if (currentElem instanceof HTMLElement) {\n      if (currentElem.dataset[\"sentryComponent\"]) {\n        return currentElem.dataset[\"sentryComponent\"];\n      }\n      if (currentElem.dataset[\"sentryElement\"]) {\n        return currentElem.dataset[\"sentryElement\"];\n      }\n    }\n    currentElem = currentElem.parentNode;\n  }\n  return null;\n}\n\nexport { getComponentName };\n//# sourceMappingURL=component-name.js.map\n","import { WINDOW } from './types.js';\n\nfunction getLocationHref() {\n  try {\n    return WINDOW.document?.location.href ?? \"\";\n  } catch {\n    return \"\";\n  }\n}\n\nexport { getLocationHref };\n//# sourceMappingURL=getLocationHref.js.map\n","import { LRUMap, getClient, safeCallback, debug, parseStringToURLObject } from '@sentry/core';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { getLocationHref } from './getLocationHref.js';\n\nconst CLIENT_ROUTE_PROVIDERS = /* @__PURE__ */ new WeakMap();\nfunction setRouteProvider(provider, client = getClient()) {\n  if (!client) {\n    DEBUG_BUILD && debug.warn(\"Cannot set a route provider without a client.\");\n    return;\n  }\n  if (DEBUG_BUILD && getRouteProvider(client)) {\n    debug.warn(\n      \"A route provider is already registered for this client and will be replaced. Routes only the previous provider knows about will no longer resolve.\"\n    );\n  }\n  CLIENT_ROUTE_PROVIDERS.set(client, provider);\n}\nfunction getRouteProvider(client = getClient()) {\n  return client && CLIENT_ROUTE_PROVIDERS.get(client);\n}\nfunction resolveRoute(url, client = getClient()) {\n  const provider = getRouteProvider(client);\n  if (!provider) {\n    return void 0;\n  }\n  const urlObject = typeof url === \"string\" ? parseLocation(url) : url;\n  if (!urlObject) {\n    return void 0;\n  }\n  return safeCallback(\n    DEBUG_BUILD ? \"Route provider threw while resolving a route:\" : \"\",\n    () => provider.resolveRoute(urlObject) || void 0,\n    () => void 0\n  );\n}\nfunction resolveCurrentRoute(client = getClient()) {\n  const provider = getRouteProvider(client);\n  return safeCallback(\n    DEBUG_BUILD ? \"Route provider threw while resolving a route:\" : \"\",\n    () => provider?.resolveCurrentRoute() || void 0,\n    () => void 0\n  );\n}\nfunction createUrlRouteProvider(resolveRouteFromUrl) {\n  return {\n    resolveRoute: resolveRouteFromUrl,\n    resolveCurrentRoute: () => {\n      const urlObject = parseLocation(getLocationHref());\n      return urlObject && resolveRouteFromUrl(urlObject);\n    }\n  };\n}\nfunction createCachedRouteProvider(maxEntries = 50) {\n  const routeNames = new LRUMap(maxEntries);\n  return {\n    ...createUrlRouteProvider((url) => routeNames.get(url.pathname)),\n    record(pathname, routeName) {\n      if (pathname && routeName) {\n        routeNames.set(pathname, routeName);\n      }\n    }\n  };\n}\nfunction parseLocation(url) {\n  return url ? parseStringToURLObject(url, getLocationHref() || void 0) : void 0;\n}\n\nexport { createCachedRouteProvider, createUrlRouteProvider, getRouteProvider, resolveCurrentRoute, resolveRoute, setRouteProvider };\n//# sourceMappingURL=routing.js.map\n","import { getRootSpan, spanToJSON, getCurrentScope, getClient } from '@sentry/core';\nimport { startInactiveSpan } from '@sentry/core/browser';\nimport { USER_AGENT_ORIGINAL, SENTRY_OP, BROWSER_NAVIGATION_ID, BROWSER_NAVIGATION_TYPE, SENTRY_SEGMENT_NAME, SENTRY_TRANSACTION, SENTRY_EXCLUSIVE_TIME, SENTRY_ORIGIN, SENTRY_REPLAY_ID } from '@sentry/conventions/attributes';\nimport { WINDOW } from '../types.js';\n\nfunction _emitWebVitalSpan(options) {\n  const {\n    name,\n    op,\n    origin,\n    metricName,\n    value,\n    attributes: passedAttributes,\n    parentSpan,\n    startTime,\n    endTime,\n    standalone,\n    softNavigationId,\n    navigationType\n  } = options;\n  const segmentSpan = parentSpan && getRootSpan(parentSpan);\n  const segmentName = segmentSpan ? spanToJSON(segmentSpan).name : getCurrentScope().getScopeData().transactionName;\n  const attributes = {\n    [SENTRY_ORIGIN]: origin,\n    [SENTRY_OP]: op,\n    [SENTRY_EXCLUSIVE_TIME]: 0,\n    [`browser.web_vital.${metricName}.value`]: value,\n    // oxlint-disable-next-line typescript-eslint/no-deprecated\n    [SENTRY_TRANSACTION]: segmentName,\n    [SENTRY_SEGMENT_NAME]: segmentName,\n    // Web vital score calculation relies on the user agent\n    [USER_AGENT_ORIGINAL]: WINDOW.navigator?.userAgent,\n    ...passedAttributes\n  };\n  if (parentSpan && spanToJSON(parentSpan).attributes[SENTRY_OP] === \"pageload\") {\n    attributes[\"sentry.pageload.span_id\"] = parentSpan.spanContext().spanId;\n  }\n  if (softNavigationId != null) {\n    attributes[BROWSER_NAVIGATION_ID] = softNavigationId;\n  }\n  if (navigationType) {\n    attributes[BROWSER_NAVIGATION_TYPE] = navigationType;\n  }\n  if (standalone) {\n    Object.assign(attributes, getReplayAttributes());\n  }\n  const span = startInactiveSpan({\n    name,\n    attributes,\n    startTime,\n    parentSpan,\n    // oxlint-disable-next-line typescript/no-deprecated -- intentional during the v1/v2 transition; see the TODO(standalone) above\n    experimental: standalone ? { standalone: true } : void 0\n  });\n  if (span) {\n    span.end(endTime ?? startTime);\n  }\n}\nfunction getReplayAttributes() {\n  const replay = getClient()?.getIntegrationByName(\"Replay\");\n  const replayId = replay?.getReplayId(true);\n  if (!replayId) {\n    return {};\n  }\n  return {\n    [SENTRY_REPLAY_ID]: replayId,\n    // Not the `SENTRY_REPLAY_IS_BUFFERING` convention: that one has no `sentry._internal.` prefix, and\n    // the rest of the SDK sets the prefixed key (see `logs/internal.ts`, `metrics/internal.ts`).\n    \"sentry._internal.replay_is_buffering\": replay.getRecordingMode() === \"buffer\" ? true : void 0\n  };\n}\n\nexport { _emitWebVitalSpan };\n//# sourceMappingURL=emitSpan.js.map\n","import { onHidden } from './utils.js';\n\nfunction listenForWebVitalReportEvents(client, collectorCallback) {\n  let pageloadSpan;\n  let collected = false;\n  function _runCollectorCallbackOnce() {\n    if (!collected && pageloadSpan) {\n      collectorCallback(pageloadSpan);\n    }\n    collected = true;\n  }\n  onHidden(() => {\n    _runCollectorCallbackOnce();\n  });\n  const unsubscribeStartNavigation = client.on(\"beforeStartNavigationSpan\", (_, options) => {\n    if (!options?.isRedirect) {\n      _runCollectorCallbackOnce();\n      unsubscribeStartNavigation();\n      unsubscribeAfterStartPageLoadSpan();\n    }\n  });\n  const unsubscribeAfterStartPageLoadSpan = client.on(\"afterStartPageLoadSpan\", (span) => {\n    pageloadSpan = span;\n    unsubscribeAfterStartPageLoadSpan();\n  });\n}\n\nexport { listenForWebVitalReportEvents };\n//# sourceMappingURL=reportEvents.js.map\n","import { browserPerformanceTimeOrigin, hasSpanStreamingEnabled, spanToJSON, debug, _INTERNAL_performanceTimeToSeconds, getClient, filterCollectedUrl, timestampInSeconds, getActiveSpan, getRootSpan, UI_WEBVITAL_CLS_SPAN_NAME_FALLBACK, UI_INTERACTION_PRESS_SPAN_NAME_FALLBACK, UI_INTERACTION_DRAG_SPAN_NAME_FALLBACK, UI_INTERACTION_HOVER_SPAN_NAME_FALLBACK, UI_INTERACTION_CLICK_SPAN_NAME_FALLBACK, UI_WEBVITAL_LCP_SPAN_NAME_FALLBACK } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { htmlTreeAsString } from '../htmlTreeAsString.js';\nimport { getComponentName } from '../component-name.js';\nimport { MAX_PLAUSIBLE_INP_DURATION, INP_ENTRY_MAP, getCachedInteractionContext, UNKNOWN_ELEMENT_NAME } from './inp.js';\nimport { addClsInstrumentationHandler, addInpInstrumentationHandler, addLcpInstrumentationHandler } from '../instrumentation/performanceObserver.js';\nimport { SENTRY_OP, BROWSER_NAVIGATION_TYPE, UI_COMPONENT_NAME, SENTRY_EXCLUSIVE_TIME, BROWSER_WEB_VITAL_INP_TARGET, BROWSER_WEB_VITAL_INP_INTERACTION_TYPE } from '@sentry/conventions/attributes';\nimport { _emitWebVitalSpan } from './emitSpan.js';\nimport { isValidLcpMetric } from './lcp.js';\nimport { listenForWebVitalReportEvents } from './reportEvents.js';\nimport { getNavigationSpanForMetric } from './softNavs.js';\nimport { supportsWebVital, getBrowserPerformanceAPI, msToSec } from '../performance/utils.js';\nimport { NAVIGATION, UI_WEBVITAL_CLS, UI_INTERACTION_PRESS, UI_INTERACTION_DRAG, UI_INTERACTION_HOVER, UI_INTERACTION_CLICK, UI_WEBVITAL_LCP } from '@sentry/conventions/op';\n\nconst INTERACTION_TYPE_TO_SPAN_OP = {\n  click: UI_INTERACTION_CLICK,\n  hover: UI_INTERACTION_HOVER,\n  drag: UI_INTERACTION_DRAG,\n  press: UI_INTERACTION_PRESS\n};\nconst INTERACTION_TYPE_TO_SPAN_NAME_FALLBACK = {\n  click: UI_INTERACTION_CLICK_SPAN_NAME_FALLBACK,\n  hover: UI_INTERACTION_HOVER_SPAN_NAME_FALLBACK,\n  drag: UI_INTERACTION_DRAG_SPAN_NAME_FALLBACK,\n  press: UI_INTERACTION_PRESS_SPAN_NAME_FALLBACK\n};\nfunction trackWebVitalPerNavigation(client, addInstrumentationHandler, send) {\n  let pageloadSpan;\n  client.on(\"afterStartPageLoadSpan\", (span) => {\n    pageloadSpan = span;\n  });\n  let bfcacheNavigationSpan;\n  client.on(\"spanStart\", (span) => {\n    const attributes = spanToJSON(span).attributes;\n    if (attributes?.[SENTRY_OP] === NAVIGATION && attributes[BROWSER_NAVIGATION_TYPE] === \"back-forward-cache\") {\n      bfcacheNavigationSpan = span;\n    }\n  });\n  addInstrumentationHandler(({ metric }) => {\n    const navigationSpan = getNavigationSpanForMetric(metric);\n    if (metric.navigationType === \"soft-navigation\") {\n      if (navigationSpan) {\n        send(metric, navigationSpan, metric.navigationId);\n      } else {\n        DEBUG_BUILD && debug.log(`[SoftNav] Dropping ${metric.name} for uncorrelated soft navigation ${metric.navigationId}`);\n      }\n      return;\n    }\n    if (metric.navigationType === \"back-forward-cache\") {\n      send(metric, bfcacheNavigationSpan, void 0);\n      return;\n    }\n    send(metric, pageloadSpan, void 0);\n  });\n}\nfunction trackLcpAsSpan(client, perNavigation = false) {\n  if (!supportsWebVital(\"largest-contentful-paint\")) {\n    return;\n  }\n  if (perNavigation) {\n    trackWebVitalPerNavigation(client, addLcpInstrumentationHandler, (metric, parentSpan, softNavigationId) => {\n      const entry = metric.entries[metric.entries.length - 1];\n      _sendLcpSpan(\n        metric.value,\n        entry,\n        parentSpan,\n        softNavigationId,\n        metric.navigationType,\n        metric.navigationStartTime\n      );\n    });\n    return;\n  }\n  let lcpValue = 0;\n  let lcpEntry;\n  let lcpNavigationType;\n  const cleanupLcpHandler = addLcpInstrumentationHandler(({ metric }) => {\n    lcpNavigationType = metric.navigationType;\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry || !isValidLcpMetric(metric.value)) {\n      return;\n    }\n    lcpValue = metric.value;\n    lcpEntry = entry;\n  }, true);\n  listenForWebVitalReportEvents(client, (pageloadSpan) => {\n    _sendLcpSpan(lcpValue, lcpEntry, pageloadSpan, void 0, lcpNavigationType);\n    cleanupLcpHandler();\n  });\n}\nfunction _sendLcpSpan(lcpValue, entry, pageloadSpan, softNavigationId, navigationType, navigationStartTime) {\n  if (!isValidLcpMetric(lcpValue)) {\n    return;\n  }\n  DEBUG_BUILD && debug.log(`Sending LCP span (${lcpValue})`);\n  const navigationStart = navigationStartTime || 0;\n  const startTime = _INTERNAL_performanceTimeToSeconds(navigationStart) ?? msToSec(navigationStart);\n  const endTime = entry ? _INTERNAL_performanceTimeToSeconds(entry.startTime, navigationStart) ?? msToSec(entry.startTime) : startTime + msToSec(lcpValue);\n  const selector = entry ? htmlTreeAsString(entry.element) : void 0;\n  const componentName = entry?.element ? getComponentName(entry.element) : null;\n  const client = getClient();\n  const hasSpanStreaming = !!client && hasSpanStreamingEnabled(client);\n  const name = hasSpanStreaming ? componentName || UI_WEBVITAL_LCP_SPAN_NAME_FALLBACK : selector ?? UI_WEBVITAL_LCP_SPAN_NAME_FALLBACK;\n  const attributes = {};\n  if (selector) {\n    attributes[\"browser.web_vital.lcp.element\"] = selector;\n  }\n  if (componentName) {\n    attributes[UI_COMPONENT_NAME] = componentName;\n  }\n  entry?.id && (attributes[\"browser.web_vital.lcp.id\"] = entry.id);\n  entry?.url && (attributes[\"browser.web_vital.lcp.url\"] = filterCollectedUrl(entry.url, client));\n  entry?.loadTime != null && (attributes[\"browser.web_vital.lcp.load_time\"] = entry.loadTime);\n  entry?.renderTime != null && (attributes[\"browser.web_vital.lcp.render_time\"] = entry.renderTime);\n  entry?.size != null && (attributes[\"browser.web_vital.lcp.size\"] = entry.size);\n  _emitWebVitalSpan({\n    name,\n    op: UI_WEBVITAL_LCP,\n    origin: \"auto.http.browser.lcp\",\n    metricName: \"lcp\",\n    value: lcpValue,\n    attributes,\n    parentSpan: pageloadSpan,\n    startTime,\n    endTime,\n    softNavigationId,\n    navigationType\n  });\n}\nfunction trackClsAsSpan(client, perNavigation = false) {\n  if (!supportsWebVital(\"layout-shift\")) {\n    return;\n  }\n  if (perNavigation) {\n    trackWebVitalPerNavigation(client, addClsInstrumentationHandler, (metric, parentSpan, softNavigationId) => {\n      const entry = metric.entries[metric.entries.length - 1];\n      _sendClsSpan(\n        metric.value,\n        entry,\n        parentSpan,\n        softNavigationId,\n        metric.navigationType,\n        metric.navigationStartTime\n      );\n    });\n    return;\n  }\n  let clsValue = 0;\n  let clsEntry;\n  let clsNavigationType;\n  const cleanupClsHandler = addClsInstrumentationHandler(({ metric }) => {\n    clsNavigationType = metric.navigationType;\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n    clsValue = metric.value;\n    clsEntry = entry;\n  }, true);\n  listenForWebVitalReportEvents(client, (pageloadSpan) => {\n    _sendClsSpan(clsValue, clsEntry, pageloadSpan, void 0, clsNavigationType);\n    cleanupClsHandler();\n  });\n}\nfunction _sendClsSpan(clsValue, entry, pageloadSpan, softNavigationId, navigationType, navigationStartTime) {\n  DEBUG_BUILD && debug.log(`Sending CLS span (${clsValue})`);\n  const offset = entry?.startTime ?? navigationStartTime ?? 0;\n  const startTime = _INTERNAL_performanceTimeToSeconds(offset) ?? timestampInSeconds();\n  const firstSourceNode = entry?.sources[0]?.node;\n  const selector = entry ? htmlTreeAsString(firstSourceNode) : void 0;\n  const componentName = firstSourceNode ? getComponentName(firstSourceNode) : null;\n  const client = getClient();\n  const hasSpanStreaming = !!client && hasSpanStreamingEnabled(client);\n  const name = hasSpanStreaming ? componentName || UI_WEBVITAL_CLS_SPAN_NAME_FALLBACK : selector ?? UI_WEBVITAL_CLS_SPAN_NAME_FALLBACK;\n  const attributes = {};\n  if (componentName) {\n    attributes[UI_COMPONENT_NAME] = componentName;\n  }\n  if (entry?.sources) {\n    entry.sources.forEach((source, index) => {\n      attributes[`browser.web_vital.cls.source.${index + 1}`] = htmlTreeAsString(source.node);\n    });\n  }\n  _emitWebVitalSpan({\n    name,\n    op: UI_WEBVITAL_CLS,\n    origin: \"auto.http.browser.cls\",\n    metricName: \"cls\",\n    value: clsValue,\n    attributes,\n    parentSpan: pageloadSpan,\n    startTime,\n    softNavigationId,\n    navigationType\n  });\n}\nfunction trackInpAsSpan(client, perNavigation = false) {\n  const performance = getBrowserPerformanceAPI();\n  if (!performance || !browserPerformanceTimeOrigin()) {\n    return;\n  }\n  const standalone = !hasSpanStreamingEnabled(client);\n  if (perNavigation) {\n    trackWebVitalPerNavigation(client, addInpInstrumentationHandler, (metric, parentSpan, softNavigationId) => {\n      if (isPlausibleInp(metric)) {\n        _sendInpSpan(metric.value, findInpEntry(metric), standalone, parentSpan, softNavigationId, metric);\n      }\n    });\n    return;\n  }\n  const onInp = ({ metric }) => {\n    if (isPlausibleInp(metric)) {\n      _sendInpSpan(metric.value, findInpEntry(metric), standalone, void 0, void 0, metric);\n    }\n  };\n  addInpInstrumentationHandler(onInp);\n}\nfunction isPlausibleInp(metric) {\n  return metric.value != null && msToSec(metric.value) <= MAX_PLAUSIBLE_INP_DURATION;\n}\nfunction findInpEntry(metric) {\n  return metric.entries.find((e) => e.duration === metric.value && INP_ENTRY_MAP[e.name]);\n}\nfunction _sendInpSpan(inpValue, entry, standalone = false, attributedSpan, softNavigationId, metric) {\n  DEBUG_BUILD && debug.log(`Sending INP span (${inpValue})`);\n  const startTime = _INTERNAL_performanceTimeToSeconds(entry?.startTime ?? metric?.navigationStartTime ?? 0);\n  if (!startTime) {\n    return;\n  }\n  const duration = msToSec(inpValue);\n  const entryInteractionType = entry && INP_ENTRY_MAP[entry.name];\n  const interactionType = entryInteractionType || \"click\";\n  const cachedContext = entry && getCachedInteractionContext(entry.interactionId);\n  const activeSpan = getActiveSpan();\n  const rootSpan = activeSpan ? getRootSpan(activeSpan) : void 0;\n  const spanToUse = attributedSpan || cachedContext?.span || rootSpan;\n  const selector = cachedContext?.elementName || (entry ? htmlTreeAsString(entry.target) : void 0);\n  const componentName = entry?.target ? getComponentName(entry.target) : null;\n  const client = getClient();\n  const hasSpanStreaming = !!client && hasSpanStreamingEnabled(client);\n  const fallbackName = INTERACTION_TYPE_TO_SPAN_NAME_FALLBACK[interactionType];\n  const name = hasSpanStreaming ? componentName || fallbackName : selector ?? \"Interaction to next paint\";\n  const attributes = {\n    [SENTRY_EXCLUSIVE_TIME]: entry?.duration ?? inpValue\n  };\n  selector && selector !== UNKNOWN_ELEMENT_NAME && (attributes[BROWSER_WEB_VITAL_INP_TARGET] = selector);\n  entryInteractionType && (attributes[BROWSER_WEB_VITAL_INP_INTERACTION_TYPE] = entryInteractionType);\n  if (componentName) {\n    attributes[UI_COMPONENT_NAME] = componentName;\n  }\n  _emitWebVitalSpan({\n    name,\n    op: INTERACTION_TYPE_TO_SPAN_OP[interactionType],\n    origin: \"auto.http.browser.inp\",\n    metricName: \"inp\",\n    value: inpValue,\n    attributes,\n    startTime,\n    endTime: startTime + duration,\n    navigationType: metric?.navigationType,\n    parentSpan: spanToUse,\n    standalone,\n    softNavigationId\n  });\n}\n\nexport { _sendClsSpan, _sendInpSpan, _sendLcpSpan, trackClsAsSpan, trackInpAsSpan, trackLcpAsSpan };\n//# sourceMappingURL=spans.js.map\n","import { addHandler, maybeInstrument, triggerHandlers, fill, addNonEnumerableProperty, uuid4 } from '@sentry/core';\nimport { WINDOW } from '../types.js';\n\nconst DEBOUNCE_DURATION = 1e3;\nlet debounceTimerID;\nlet lastCapturedEventType;\nlet lastCapturedEventTargetId;\nfunction getCapture(options) {\n  return typeof options === \"boolean\" ? options : !!options?.capture;\n}\nfunction addClickKeypressInstrumentationHandler(handler) {\n  const type = \"dom\";\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentDOM);\n}\nfunction instrumentDOM() {\n  if (!WINDOW.document) {\n    return;\n  }\n  const triggerDOMHandler = triggerHandlers.bind(null, \"dom\");\n  const globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n  WINDOW.document.addEventListener(\"click\", globalDOMEventHandler, false);\n  WINDOW.document.addEventListener(\"keypress\", globalDOMEventHandler, false);\n  [\"EventTarget\", \"Node\"].forEach((target) => {\n    const globalObject = WINDOW;\n    const proto = globalObject[target]?.prototype;\n    if (!proto?.hasOwnProperty?.(\"addEventListener\")) {\n      return;\n    }\n    fill(proto, \"addEventListener\", function(originalAddEventListener) {\n      return function(type, listener, options) {\n        if ((type === \"click\" || type == \"keypress\") && listener) {\n          try {\n            const handlers = this.__sentry_instrumentation_handlers__ = this.__sentry_instrumentation_handlers__ || {};\n            const handlerForType = handlers[type] = handlers[type] || {\n              captureListeners: /* @__PURE__ */ new WeakSet(),\n              bubbleListeners: /* @__PURE__ */ new WeakSet(),\n              listenerCount: 0\n            };\n            const capture = getCapture(options);\n            if (!handlerForType.handler) {\n              const handler = makeDOMEventHandler(triggerDOMHandler);\n              handlerForType.handler = handler;\n              handlerForType.capture = capture;\n              originalAddEventListener.call(this, type, handler, handlerForType.capture);\n            }\n            const listeners = handlerForType[capture ? \"captureListeners\" : \"bubbleListeners\"];\n            if (!listeners.has(listener)) {\n              if (typeof options === \"object\" && (options?.once || options?.signal)) {\n                handlerForType.sticky = true;\n              } else {\n                listeners.add(listener);\n                handlerForType.listenerCount++;\n              }\n            }\n          } catch {\n          }\n        }\n        return originalAddEventListener.call(this, type, listener, options);\n      };\n    });\n    fill(\n      proto,\n      \"removeEventListener\",\n      function(originalRemoveEventListener) {\n        return function(type, listener, options) {\n          if ((type === \"click\" || type == \"keypress\") && listener) {\n            try {\n              const handlers = this.__sentry_instrumentation_handlers__ || {};\n              const handlerForType = handlers[type];\n              if (handlerForType?.[getCapture(options) ? \"captureListeners\" : \"bubbleListeners\"].delete(listener)) {\n                if (!--handlerForType.listenerCount && !handlerForType.sticky) {\n                  originalRemoveEventListener.call(this, type, handlerForType.handler, handlerForType.capture);\n                  handlerForType.handler = void 0;\n                  delete handlers[type];\n                }\n                if (Object.keys(handlers).length === 0) {\n                  delete this.__sentry_instrumentation_handlers__;\n                }\n              }\n            } catch {\n            }\n          }\n          return originalRemoveEventListener.call(this, type, listener, options);\n        };\n      }\n    );\n  });\n}\nfunction isSimilarToLastCapturedEvent(event) {\n  if (event.type !== lastCapturedEventType) {\n    return false;\n  }\n  try {\n    if (!event.target || event.target._sentryId !== lastCapturedEventTargetId) {\n      return false;\n    }\n  } catch {\n  }\n  return true;\n}\nfunction shouldSkipDOMEvent(eventType, target) {\n  if (eventType !== \"keypress\") {\n    return false;\n  }\n  if (!target?.tagName) {\n    return true;\n  }\n  if (target.tagName === \"INPUT\" || target.tagName === \"TEXTAREA\" || target.isContentEditable) {\n    return false;\n  }\n  return true;\n}\nfunction makeDOMEventHandler(handler, globalListener = false) {\n  return (event) => {\n    if (!event || event[\"_sentryCaptured\"]) {\n      return;\n    }\n    const target = getEventTarget(event);\n    if (shouldSkipDOMEvent(event.type, target)) {\n      return;\n    }\n    addNonEnumerableProperty(event, \"_sentryCaptured\", true);\n    if (target && !target._sentryId) {\n      addNonEnumerableProperty(target, \"_sentryId\", uuid4());\n    }\n    const name = event.type === \"keypress\" ? \"input\" : event.type;\n    if (!isSimilarToLastCapturedEvent(event)) {\n      const handlerData = { event, name, global: globalListener };\n      handler(handlerData);\n      lastCapturedEventType = event.type;\n      lastCapturedEventTargetId = target ? target._sentryId : void 0;\n    }\n    clearTimeout(debounceTimerID);\n    debounceTimerID = WINDOW.setTimeout(() => {\n      lastCapturedEventTargetId = void 0;\n      lastCapturedEventType = void 0;\n    }, DEBOUNCE_DURATION);\n  };\n}\nfunction getEventTarget(event) {\n  try {\n    return event.target;\n  } catch {\n    return null;\n  }\n}\n\nexport { addClickKeypressInstrumentationHandler, instrumentDOM };\n//# sourceMappingURL=dom.js.map\n","import { addHandler, maybeInstrument, triggerHandlers, fill } from '@sentry/core';\nimport { WINDOW } from '../types.js';\n\nlet lastHref;\nfunction supportsHistory() {\n  return \"history\" in WINDOW && !!WINDOW.history;\n}\nfunction addHistoryInstrumentationHandler(handler) {\n  const type = \"history\";\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentHistory);\n}\nfunction instrumentHistory() {\n  WINDOW.addEventListener(\"popstate\", () => {\n    const to = WINDOW.location.href;\n    const from = lastHref;\n    lastHref = to;\n    if (from === to) {\n      return;\n    }\n    const handlerData = { from, to };\n    triggerHandlers(\"history\", handlerData);\n  });\n  if (!supportsHistory()) {\n    return;\n  }\n  function historyReplacementFunction(originalHistoryFunction) {\n    return function(...args) {\n      const url = args.length > 2 ? args[2] : void 0;\n      if (url) {\n        const from = lastHref;\n        const to = getAbsoluteUrl(String(url));\n        lastHref = to;\n        if (from === to) {\n          return originalHistoryFunction.apply(this, args);\n        }\n        const handlerData = { from, to };\n        triggerHandlers(\"history\", handlerData);\n      }\n      return originalHistoryFunction.apply(this, args);\n    };\n  }\n  fill(WINDOW.history, \"pushState\", historyReplacementFunction);\n  fill(WINDOW.history, \"replaceState\", historyReplacementFunction);\n}\nfunction getAbsoluteUrl(urlOrPath) {\n  try {\n    const url = new URL(urlOrPath, WINDOW.location.origin);\n    return url.toString();\n  } catch {\n    return urlOrPath;\n  }\n}\n\nexport { addHistoryInstrumentationHandler, instrumentHistory, supportsHistory };\n//# sourceMappingURL=history.js.map\n","import { isNativeFunction, debug } from '@sentry/core';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { WINDOW } from './types.js';\n\nconst cachedImplementations = {};\nfunction getNativeImplementation(name) {\n  const cached = cachedImplementations[name];\n  if (cached) {\n    return cached;\n  }\n  let impl = WINDOW[name];\n  if (isNativeFunction(impl)) {\n    return cachedImplementations[name] = impl.bind(WINDOW);\n  }\n  const document = WINDOW.document;\n  if (document && typeof document.createElement === \"function\") {\n    try {\n      const sandbox = document.createElement(\"iframe\");\n      sandbox.hidden = true;\n      document.head.appendChild(sandbox);\n      const contentWindow = sandbox.contentWindow;\n      if (contentWindow?.[name]) {\n        impl = contentWindow[name];\n      }\n      document.head.removeChild(sandbox);\n    } catch (e) {\n      DEBUG_BUILD && debug.warn(`Could not create sandbox iframe for ${name} check, bailing to window.${name}: `, e);\n    }\n  }\n  if (!impl) {\n    return impl;\n  }\n  return cachedImplementations[name] = impl.bind(WINDOW);\n}\nfunction clearCachedImplementation(name) {\n  cachedImplementations[name] = void 0;\n}\nfunction fetch(...rest) {\n  return getNativeImplementation(\"fetch\")(...rest);\n}\nfunction setTimeout(...rest) {\n  try {\n    return getNativeImplementation(\"setTimeout\")(...rest);\n  } catch (e) {\n    DEBUG_BUILD && debug.warn(\"Could not use native setTimeout implementation, falling back to window.setTimeout: \", e);\n    const fallback = WINDOW.setTimeout.bind(WINDOW);\n    cachedImplementations.setTimeout = fallback;\n    return fallback(...rest);\n  }\n}\n\nexport { clearCachedImplementation, fetch, getNativeImplementation, setTimeout };\n//# sourceMappingURL=getNativeImplementation.js.map\n","import { addHandler, maybeInstrument, timestampInSeconds, isString, triggerHandlers } from '@sentry/core';\nimport { WINDOW } from '../types.js';\n\nconst SENTRY_XHR_DATA_KEY = \"__sentry_xhr_v3__\";\nfunction addXhrInstrumentationHandler(handler) {\n  const type = \"xhr\";\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentXHR);\n}\nfunction instrumentXHR() {\n  if (!WINDOW.XMLHttpRequest) {\n    return;\n  }\n  const xhrproto = XMLHttpRequest.prototype;\n  xhrproto.open = new Proxy(xhrproto.open, {\n    apply(originalOpen, xhrOpenThisArg, xhrOpenArgArray) {\n      let virtualError = new Error();\n      const startTimestamp = timestampInSeconds() * 1e3;\n      const method = isString(xhrOpenArgArray[0]) ? xhrOpenArgArray[0].toUpperCase() : void 0;\n      const url = parseXhrUrlArg(xhrOpenArgArray[1]);\n      if (!method || !url) {\n        return originalOpen.apply(xhrOpenThisArg, xhrOpenArgArray);\n      }\n      xhrOpenThisArg[SENTRY_XHR_DATA_KEY] = {\n        method,\n        url,\n        request_headers: {}\n      };\n      if (method === \"POST\" && url.match(/sentry_key/)) {\n        xhrOpenThisArg.__sentry_own_request__ = true;\n      }\n      const onreadystatechangeHandler = () => {\n        const xhrInfo = xhrOpenThisArg[SENTRY_XHR_DATA_KEY];\n        if (!xhrInfo) {\n          return;\n        }\n        if (xhrOpenThisArg.readyState === 4) {\n          try {\n            xhrInfo.status_code = xhrOpenThisArg.status;\n          } catch {\n          }\n          const handlerData = {\n            endTimestamp: timestampInSeconds() * 1e3,\n            startTimestamp,\n            xhr: xhrOpenThisArg,\n            virtualError\n          };\n          triggerHandlers(\"xhr\", handlerData);\n          virtualError = void 0;\n          xhrOpenThisArg.removeEventListener(\"readystatechange\", onreadystatechangeHandler);\n        }\n      };\n      if (\"onreadystatechange\" in xhrOpenThisArg && typeof xhrOpenThisArg.onreadystatechange === \"function\") {\n        xhrOpenThisArg.onreadystatechange = new Proxy(xhrOpenThisArg.onreadystatechange, {\n          apply(originalOnreadystatechange, onreadystatechangeThisArg, onreadystatechangeArgArray) {\n            onreadystatechangeHandler();\n            return originalOnreadystatechange.apply(onreadystatechangeThisArg, onreadystatechangeArgArray);\n          }\n        });\n      } else {\n        xhrOpenThisArg.addEventListener(\"readystatechange\", onreadystatechangeHandler);\n      }\n      xhrOpenThisArg.setRequestHeader = new Proxy(xhrOpenThisArg.setRequestHeader, {\n        apply(originalSetRequestHeader, setRequestHeaderThisArg, setRequestHeaderArgArray) {\n          const [header, value] = setRequestHeaderArgArray;\n          const xhrInfo = setRequestHeaderThisArg[SENTRY_XHR_DATA_KEY];\n          if (xhrInfo && isString(header) && isString(value)) {\n            xhrInfo.request_headers[header.toLowerCase()] = value;\n          }\n          return originalSetRequestHeader.apply(setRequestHeaderThisArg, setRequestHeaderArgArray);\n        }\n      });\n      return originalOpen.apply(xhrOpenThisArg, xhrOpenArgArray);\n    }\n  });\n  xhrproto.send = new Proxy(xhrproto.send, {\n    apply(originalSend, sendThisArg, sendArgArray) {\n      const sentryXhrData = sendThisArg[SENTRY_XHR_DATA_KEY];\n      if (!sentryXhrData) {\n        return originalSend.apply(sendThisArg, sendArgArray);\n      }\n      if (sendArgArray[0] !== void 0) {\n        sentryXhrData.body = sendArgArray[0];\n      }\n      const handlerData = {\n        startTimestamp: timestampInSeconds() * 1e3,\n        xhr: sendThisArg\n      };\n      triggerHandlers(\"xhr\", handlerData);\n      return originalSend.apply(sendThisArg, sendArgArray);\n    }\n  });\n}\nfunction parseXhrUrlArg(url) {\n  if (isString(url)) {\n    return url;\n  }\n  try {\n    return url.toString();\n  } catch {\n  }\n  return void 0;\n}\n\nexport { SENTRY_XHR_DATA_KEY, addXhrInstrumentationHandler, instrumentXHR };\n//# sourceMappingURL=xhr.js.map\n","import { debug } from '@sentry/core';\nimport { DEBUG_BUILD } from './debug-build.js';\n\nconst ORIGINAL_REQ_BODY = /* @__PURE__ */ Symbol.for(\"sentry__originalRequestBody\");\nfunction serializeFormData(formData) {\n  return new URLSearchParams(formData).toString();\n}\nfunction getBodyString(body, _debug = debug) {\n  try {\n    if (typeof body === \"string\") {\n      return [body];\n    }\n    if (body instanceof URLSearchParams) {\n      return [body.toString()];\n    }\n    if (body instanceof FormData) {\n      return [serializeFormData(body)];\n    }\n    if (!body) {\n      return [void 0];\n    }\n  } catch (error) {\n    DEBUG_BUILD && _debug.error(error, \"Failed to serialize body\", body);\n    return [void 0, \"BODY_PARSE_ERROR\"];\n  }\n  DEBUG_BUILD && _debug.log(\"Skipping network body because of body type\", body);\n  return [void 0, \"UNPARSEABLE_BODY_TYPE\"];\n}\nfunction getFetchRequestArgBody(fetchArgs = []) {\n  if (fetchArgs.length >= 2 && fetchArgs[1] && typeof fetchArgs[1] === \"object\" && \"body\" in fetchArgs[1]) {\n    return fetchArgs[1].body;\n  }\n  if (fetchArgs.length >= 1 && fetchArgs[0] instanceof Request) {\n    const request = fetchArgs[0];\n    const originalBody = request[ORIGINAL_REQ_BODY];\n    if (originalBody !== void 0) {\n      return originalBody;\n    }\n    return void 0;\n  }\n  return void 0;\n}\nfunction parseXhrResponseHeaders(xhr) {\n  let headers;\n  try {\n    headers = xhr.getAllResponseHeaders();\n  } catch (error) {\n    DEBUG_BUILD && debug.error(error, \"Failed to get xhr response headers\", xhr);\n    return {};\n  }\n  if (!headers) {\n    return {};\n  }\n  return headers.split(\"\\r\\n\").reduce((acc, line) => {\n    const [key, value] = line.split(\": \");\n    if (value) {\n      acc[key.toLowerCase()] = value;\n    }\n    return acc;\n  }, {});\n}\n\nexport { ORIGINAL_REQ_BODY, getBodyString, getFetchRequestArgBody, parseXhrResponseHeaders, serializeFormData };\n//# sourceMappingURL=networkUtils.js.map\n","function isElement(wat) {\n  if (typeof Element === \"undefined\") {\n    return false;\n  }\n  try {\n    return wat instanceof Element;\n  } catch {\n    return false;\n  }\n}\n\nexport { isElement };\n//# sourceMappingURL=is.js.map\n","import { GLOBAL_OBJ, getOriginalFunction, markFunctionWrapped, addNonEnumerableProperty, withScope, addExceptionTypeValue, addExceptionMechanism, captureException, filterCollectedUrl } from '@sentry/core';\nimport { getLocationHref } from '@sentry/browser-utils';\n\nconst WINDOW = GLOBAL_OBJ;\nlet ignoreOnError = 0;\nconst ignoredErrorReports = [];\nfunction shouldIgnoreOnError(data) {\n  if (ignoreOnError > 0) {\n    return true;\n  }\n  const index = data ? ignoredErrorReports.findIndex((report) => isSameErrorReport(report, data)) : -1;\n  if (index === -1) {\n    return false;\n  }\n  ignoredErrorReports.splice(index, 1);\n  return true;\n}\nfunction ignoreNextOnErrorMatching(report) {\n  ignoredErrorReports.push(report);\n  setTimeout(() => {\n    const index = ignoredErrorReports.indexOf(report);\n    if (index !== -1) {\n      ignoredErrorReports.splice(index, 1);\n    }\n  });\n}\nfunction isSameErrorReport(a, b) {\n  return a.msg === b.msg && a.url === b.url && a.line === b.line && a.column === b.column;\n}\nfunction ignoreNextOnError() {\n  ignoreOnError++;\n  setTimeout(() => {\n    ignoreOnError--;\n  });\n}\nfunction wrap(fn, options = {}) {\n  function isFunction(fn2) {\n    return typeof fn2 === \"function\";\n  }\n  if (!isFunction(fn)) {\n    return fn;\n  }\n  try {\n    const hasOwnWrapper = Object.prototype.hasOwnProperty.call(fn, \"__sentry_wrapped__\");\n    if (hasOwnWrapper) {\n      const wrapper = fn.__sentry_wrapped__;\n      if (typeof wrapper === \"function\") {\n        return wrapper;\n      } else {\n        return fn;\n      }\n    }\n    if (getOriginalFunction(fn)) {\n      return fn;\n    }\n  } catch {\n    return fn;\n  }\n  const sentryWrapped = function(...args) {\n    GLOBAL_OBJ._sentryWrappedDepth = (GLOBAL_OBJ._sentryWrappedDepth || 0) + 1;\n    try {\n      const wrappedArguments = args.map((arg) => wrap(arg, options));\n      return fn.apply(this, wrappedArguments);\n    } catch (ex) {\n      ignoreNextOnError();\n      withScope((scope) => {\n        scope.addEventProcessor((event) => {\n          if (options.mechanism) {\n            addExceptionTypeValue(event, void 0, void 0);\n            addExceptionMechanism(event, options.mechanism);\n          }\n          event.extra = {\n            ...event.extra,\n            arguments: args\n          };\n          return event;\n        });\n        captureException(ex);\n      });\n      throw ex;\n    } finally {\n      GLOBAL_OBJ._sentryWrappedDepth = (GLOBAL_OBJ._sentryWrappedDepth || 0) - 1;\n    }\n  };\n  try {\n    for (const property in fn) {\n      if (Object.prototype.hasOwnProperty.call(fn, property)) {\n        sentryWrapped[property] = fn[property];\n      }\n    }\n  } catch {\n  }\n  markFunctionWrapped(sentryWrapped, fn);\n  addNonEnumerableProperty(fn, \"__sentry_wrapped__\", sentryWrapped);\n  try {\n    const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, \"name\");\n    if (descriptor.configurable) {\n      Object.defineProperty(sentryWrapped, \"name\", {\n        get() {\n          return fn.name;\n        }\n      });\n    }\n  } catch {\n  }\n  return sentryWrapped;\n}\nfunction getHttpRequestData(client) {\n  const url = getLocationHref();\n  const { referrer } = WINDOW.document || {};\n  const { userAgent } = WINDOW.navigator || {};\n  const headers = {\n    ...referrer && { Referer: filterCollectedUrl(referrer, client) },\n    ...userAgent && { \"User-Agent\": userAgent }\n  };\n  const request = {\n    url,\n    headers\n  };\n  return request;\n}\n\nexport { WINDOW, getHttpRequestData, ignoreNextOnError, ignoreNextOnErrorMatching, shouldIgnoreOnError, wrap };\n//# sourceMappingURL=helpers.js.map\n","import { isErrorEvent, isDOMError, isDOMException, addExceptionTypeValue, isError, isPlainObject, isEvent, addExceptionMechanism, isParameterizedString, getClient, normalizeToSize, extractExceptionKeysForMessage, _INTERNAL_enhanceErrorWithSentryInfo, resolvedSyncPromise } from '@sentry/core';\n\nfunction exceptionFromError(stackParser, ex) {\n  const frames = parseStackFrames(stackParser, ex);\n  const exception = {\n    type: extractType(ex),\n    value: extractMessage(ex)\n  };\n  if (frames.length) {\n    exception.stacktrace = { frames };\n  }\n  if (exception.type === void 0 && exception.value === \"\") {\n    exception.value = \"Unrecoverable error caught\";\n  }\n  return exception;\n}\nfunction eventFromPlainObject(stackParser, exception, syntheticException, isUnhandledRejection) {\n  const client = getClient();\n  const normalizeDepth = client?.getOptions().normalizeDepth;\n  const errorFromProp = getErrorPropertyFromObject(exception);\n  const extra = {\n    __serialized__: normalizeToSize(exception, normalizeDepth)\n  };\n  if (errorFromProp) {\n    return {\n      exception: {\n        values: [exceptionFromError(stackParser, errorFromProp)]\n      },\n      extra\n    };\n  }\n  const exceptionValue = {\n    type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? \"UnhandledRejection\" : \"Error\",\n    value: getNonErrorObjectExceptionValue(exception, { isUnhandledRejection })\n  };\n  const event = {\n    exception: {\n      values: [exceptionValue]\n    },\n    extra\n  };\n  if (syntheticException) {\n    const frames = parseStackFrames(stackParser, syntheticException);\n    if (frames.length) {\n      event.exception.values[0].stacktrace = { frames };\n    }\n  }\n  return event;\n}\nfunction eventFromError(stackParser, ex) {\n  return {\n    exception: {\n      values: [exceptionFromError(stackParser, ex)]\n    }\n  };\n}\nfunction parseStackFrames(stackParser, ex) {\n  const stacktrace = ex.stacktrace || ex.stack || \"\";\n  const skipLines = getSkipFirstStackStringLines(ex);\n  const framesToPop = getPopFirstTopFrames(ex);\n  try {\n    return stackParser(stacktrace, skipLines, framesToPop);\n  } catch {\n  }\n  return [];\n}\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\nfunction getSkipFirstStackStringLines(ex) {\n  if (ex && reactMinifiedRegexp.test(ex.message)) {\n    return 1;\n  }\n  return 0;\n}\nfunction getPopFirstTopFrames(ex) {\n  if (typeof ex.framesToPop === \"number\") {\n    return ex.framesToPop;\n  }\n  return 0;\n}\nfunction isWebAssemblyException(exception) {\n  if (typeof WebAssembly !== \"undefined\" && typeof WebAssembly.Exception !== \"undefined\") {\n    return exception instanceof WebAssembly.Exception;\n  } else {\n    return false;\n  }\n}\nfunction extractType(ex) {\n  const name = ex?.name;\n  if (!name && isWebAssemblyException(ex)) {\n    const hasTypeInMessage = ex.message && Array.isArray(ex.message) && ex.message.length == 2;\n    return hasTypeInMessage ? ex.message[0] : \"WebAssembly.Exception\";\n  }\n  return name;\n}\nfunction extractMessage(ex) {\n  const message = ex?.message;\n  if (isWebAssemblyException(ex)) {\n    if (Array.isArray(ex.message) && ex.message.length == 2) {\n      return ex.message[1];\n    }\n    return \"wasm exception\";\n  }\n  if (!message) {\n    return \"No error message\";\n  }\n  if (message.error && typeof message.error.message === \"string\") {\n    return _INTERNAL_enhanceErrorWithSentryInfo(message.error);\n  }\n  return _INTERNAL_enhanceErrorWithSentryInfo(ex);\n}\nfunction eventFromException(stackParser, exception, hint, attachStacktrace) {\n  const syntheticException = hint?.syntheticException || void 0;\n  const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);\n  addExceptionMechanism(event);\n  event.level = \"error\";\n  if (hint?.event_id) {\n    event.event_id = hint.event_id;\n  }\n  return resolvedSyncPromise(event);\n}\nfunction eventFromMessage(stackParser, message, level = \"info\", hint, attachStacktrace) {\n  const syntheticException = hint?.syntheticException || void 0;\n  const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n  event.level = level;\n  if (hint?.event_id) {\n    event.event_id = hint.event_id;\n  }\n  return resolvedSyncPromise(event);\n}\nfunction eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace, isUnhandledRejection) {\n  let event;\n  if (isErrorEvent(exception) && exception.error) {\n    const errorEvent = exception;\n    return eventFromError(stackParser, errorEvent.error);\n  }\n  if (isDOMError(exception) || isDOMException(exception)) {\n    const domException = exception;\n    if (\"stack\" in exception) {\n      event = eventFromError(stackParser, exception);\n      const firstException = event.exception?.values?.[0];\n      if (attachStacktrace && syntheticException && firstException && !firstException.stacktrace) {\n        const frames = parseStackFrames(stackParser, syntheticException);\n        if (frames.length) {\n          firstException.stacktrace = { frames };\n          addExceptionMechanism(event, { synthetic: true });\n        }\n      }\n    } else {\n      const name = domException.name || (isDOMError(domException) ? \"DOMError\" : \"DOMException\");\n      const message = domException.message ? `${name}: ${domException.message}` : name;\n      event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n      addExceptionTypeValue(event, message);\n    }\n    return event;\n  }\n  if (isError(exception)) {\n    return eventFromError(stackParser, exception);\n  }\n  if (isPlainObject(exception) || isEvent(exception)) {\n    const objectException = exception;\n    event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);\n    addExceptionMechanism(event, {\n      synthetic: true\n    });\n    return event;\n  }\n  const stringifiedException = String(exception);\n  event = eventFromString(stackParser, stringifiedException, syntheticException, attachStacktrace);\n  addExceptionTypeValue(event, stringifiedException, void 0);\n  addExceptionMechanism(event, {\n    synthetic: true\n  });\n  return event;\n}\nfunction eventFromString(stackParser, message, syntheticException, attachStacktrace) {\n  const event = {};\n  if (attachStacktrace && syntheticException) {\n    const frames = parseStackFrames(stackParser, syntheticException);\n    if (frames.length) {\n      event.exception = {\n        values: [{ value: message, stacktrace: { frames } }]\n      };\n    }\n    addExceptionMechanism(event, { synthetic: true });\n  }\n  if (isParameterizedString(message)) {\n    const { __sentry_template_string__, __sentry_template_values__ } = message;\n    event.logentry = {\n      message: __sentry_template_string__,\n      params: __sentry_template_values__\n    };\n    return event;\n  }\n  event.message = message;\n  return event;\n}\nfunction getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }) {\n  const keys = extractExceptionKeysForMessage(exception);\n  const captureType = isUnhandledRejection ? \"promise rejection\" : \"exception\";\n  if (isErrorEvent(exception)) {\n    return `Event \\`ErrorEvent\\` captured as ${captureType} with message \\`${exception.message}\\``;\n  }\n  if (isEvent(exception)) {\n    const className = getObjectClassName(exception);\n    return `Event \\`${className}\\` (type=${exception.type}) captured as ${captureType}`;\n  }\n  return `Object captured as ${captureType} with keys: ${keys}`;\n}\nfunction getObjectClassName(obj) {\n  try {\n    const prototype = Object.getPrototypeOf(obj);\n    return prototype ? prototype.constructor.name : void 0;\n  } catch {\n  }\n}\nfunction getErrorPropertyFromObject(obj) {\n  return Object.values(obj).find(isError);\n}\n\nexport { eventFromException, eventFromMessage, eventFromUnknownInput, exceptionFromError, extractMessage, extractType };\n//# sourceMappingURL=eventbuilder.js.map\n","import { setRouteProvider } from '@sentry/browser-utils';\nimport { Client, getSDKSource, applySdkMetadata, addAutoIpAddressToSession, timestampInSeconds } from '@sentry/core';\nimport { eventFromException, eventFromMessage } from './eventbuilder.js';\nimport { WINDOW } from './helpers.js';\n\nclass BrowserClient extends Client {\n  /**\n   * Creates a new Browser SDK instance.\n   *\n   * @param options Configuration options for this SDK.\n   */\n  constructor(options) {\n    const opts = applyDefaultOptions(options);\n    const sdkSource = WINDOW.SENTRY_SDK_SOURCE || getSDKSource();\n    applySdkMetadata(opts, \"browser\", [\"browser\"], sdkSource);\n    super(opts);\n    if (opts.routeProvider) {\n      setRouteProvider(opts.routeProvider, this);\n    }\n    this._unhandledSessionStatus = \"unhandled\";\n    const { userInfo } = this.getDataCollectionOptions();\n    if (opts._metadata?.sdk) {\n      opts._metadata.sdk.settings = {\n        // Only allow IP inferral by Relay if the user opted in via dataCollection\n        infer_ip: userInfo ? \"auto\" : \"never\",\n        // purposefully allowing already passed settings to override the default\n        ...opts._metadata.sdk.settings\n      };\n    }\n    const { sendClientReports } = this._options;\n    const checkDrift = () => {\n      timestampInSeconds();\n    };\n    const listeners = [\n      // Flush buffered data when the page becomes hidden (e.g. tab switch, navigation, or the page\n      // being discarded). `flush()` emits the `flush` hook, which drains the span (streaming), log and\n      // metric buffers and hands the resulting envelopes to the transport (which uses `keepalive`).\n      // Client report outcomes don't listen to the `flush` hook, so we flush them separately.\n      [\n        WINDOW.document,\n        \"visibilitychange\",\n        () => {\n          checkDrift();\n          if (WINDOW.document.visibilityState === \"hidden\") {\n            if (sendClientReports) {\n              this._flushOutcomes();\n            }\n            queueMicrotask(() => {\n              void this.flush();\n            });\n          }\n        }\n      ],\n      // `freeze` and `resume` are only fired by Chromium browsers. Other browsers never fire them, so these listeners\n      // are no-ops there.\n      [WINDOW.document, \"freeze\", checkDrift],\n      [WINDOW.document, \"resume\", checkDrift],\n      // Pages restored from the back/forward cache were paused while they were cached.\n      [WINDOW, \"pagehide\", checkDrift],\n      [WINDOW, \"pageshow\", checkDrift]\n    ];\n    listeners.forEach(([target, name, listener]) => target?.addEventListener?.(name, listener));\n    this.on(\n      \"close\",\n      () => listeners.forEach(([target, name, listener]) => target?.removeEventListener?.(name, listener))\n    );\n    if (userInfo) {\n      this.on(\"beforeSendSession\", addAutoIpAddressToSession);\n    }\n  }\n  /**\n   * @inheritDoc\n   */\n  eventFromException(exception, hint) {\n    return eventFromException(this._options.stackParser, exception, hint, this._options.attachStacktrace);\n  }\n  /**\n   * @inheritDoc\n   */\n  eventFromMessage(message, level = \"info\", hint) {\n    return eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace);\n  }\n  /**\n   * @inheritDoc\n   */\n  _prepareEvent(event, hint, currentScope, isolationScope) {\n    event.platform = event.platform || \"javascript\";\n    return super._prepareEvent(event, hint, currentScope, isolationScope);\n  }\n}\nfunction applyDefaultOptions(optionsArg) {\n  return {\n    release: typeof __SENTRY_RELEASE__ === \"string\" ? __SENTRY_RELEASE__ : WINDOW.SENTRY_RELEASE?.id,\n    // This supports the variable that sentry-webpack-plugin injects\n    sendClientReports: true,\n    // We default this to true, as it is the safer scenario\n    parentSpanIsAlwaysRootSpan: true,\n    ...optionsArg\n  };\n}\n\nexport { BrowserClient, applyDefaultOptions };\n//# sourceMappingURL=client.js.map\n","import { createTransport, makePromiseBuffer } from '@sentry/core';\nimport { getNativeImplementation, clearCachedImplementation } from '@sentry/browser-utils';\n\nconst DEFAULT_BROWSER_TRANSPORT_BUFFER_SIZE = 40;\nfunction makeFetchTransport(options, nativeFetch = getNativeImplementation(\"fetch\")) {\n  let pendingBodySize = 0;\n  let pendingCount = 0;\n  async function makeRequest(request) {\n    const requestSize = request.body.length;\n    pendingBodySize += requestSize;\n    pendingCount++;\n    const requestOptions = {\n      body: request.body,\n      method: \"POST\",\n      referrerPolicy: \"strict-origin\",\n      headers: options.headers,\n      // Outgoing requests are usually cancelled when navigating to a different page, causing a \"TypeError: Failed to\n      // fetch\" error and sending a \"network_error\" client-outcome - in Chrome, the request status shows \"(cancelled)\".\n      // The `keepalive` flag keeps outgoing requests alive, even when switching pages. We want this since we're\n      // frequently sending events right before the user is switching pages (eg. when finishing navigation transactions).\n      // Gotchas:\n      // - `keepalive` isn't supported by Firefox\n      // - As per spec (https://fetch.spec.whatwg.org/#http-network-or-cache-fetch):\n      //   If the sum of contentLength and inflightKeepaliveBytes is greater than 64 kibibytes, then return a network error.\n      //   We will therefore only activate the flag when we're below that limit.\n      // There is also a limit of requests that can be open at the same time, so we also limit this to 15\n      // See https://github.com/getsentry/sentry-javascript/pull/7553 for details\n      keepalive: pendingBodySize <= 6e4 && pendingCount < 15,\n      ...options.fetchOptions\n    };\n    try {\n      const response = await nativeFetch(options.url, requestOptions);\n      return {\n        statusCode: response.status,\n        headers: {\n          \"x-sentry-rate-limits\": response.headers.get(\"X-Sentry-Rate-Limits\"),\n          \"retry-after\": response.headers.get(\"Retry-After\")\n        }\n      };\n    } catch (e) {\n      clearCachedImplementation(\"fetch\");\n      throw e;\n    } finally {\n      pendingBodySize -= requestSize;\n      pendingCount--;\n    }\n  }\n  return createTransport(\n    options,\n    makeRequest,\n    makePromiseBuffer(options.bufferSize || DEFAULT_BROWSER_TRANSPORT_BUFFER_SIZE)\n  );\n}\n\nexport { makeFetchTransport };\n//# sourceMappingURL=fetch.js.map\n","import { createStackParser, UNKNOWN_FUNCTION } from '@sentry/core';\n\nconst OPERA10_PRIORITY = 10;\nconst OPERA11_PRIORITY = 20;\nconst CHROME_PRIORITY = 30;\nconst WINJS_PRIORITY = 40;\nconst GECKO_PRIORITY = 50;\nfunction createFrame(filename, func, lineno, colno) {\n  const frame = {\n    filename,\n    function: func === \"<anonymous>\" ? UNKNOWN_FUNCTION : func,\n    in_app: true\n    // All browser frames are considered in_app\n  };\n  if (lineno !== void 0) {\n    frame.lineno = lineno;\n  }\n  if (colno !== void 0) {\n    frame.colno = colno;\n  }\n  return frame;\n}\nconst chromeRegexNoFnName = /^\\s*at (\\S+?)(?::(\\d+))(?::(\\d+))\\s*$/i;\nconst chromeRegex = /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\nconst chromeDataUriRegex = /at (.+?) ?\\(data:(.+?),/;\nconst chromeStackParserFn = (line) => {\n  const dataUriMatch = line.match(chromeDataUriRegex);\n  if (dataUriMatch) {\n    return {\n      filename: `<data:${dataUriMatch[2]}>`,\n      function: dataUriMatch[1]\n    };\n  }\n  const noFnParts = chromeRegexNoFnName.exec(line);\n  if (noFnParts) {\n    const [, filename, line2, col] = noFnParts;\n    return createFrame(filename, UNKNOWN_FUNCTION, +line2, +col);\n  }\n  const parts = chromeRegex.exec(line);\n  if (parts) {\n    const isEval = parts[2]?.indexOf(\"eval\") === 0;\n    if (isEval) {\n      const subMatch = chromeEvalRegex.exec(parts[2]);\n      if (subMatch) {\n        parts[2] = subMatch[1];\n        parts[3] = subMatch[2];\n        parts[4] = subMatch[3];\n      }\n    }\n    const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);\n    return createFrame(filename, func, parts[3] ? +parts[3] : void 0, parts[4] ? +parts[4] : void 0);\n  }\n  return;\n};\nconst chromeStackLineParser = [CHROME_PRIORITY, chromeStackParserFn];\nconst geckoREgex = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\nconst gecko = (line) => {\n  const parts = geckoREgex.exec(line);\n  if (parts) {\n    const isEval = parts[3] && parts[3].indexOf(\" > eval\") > -1;\n    if (isEval) {\n      const subMatch = geckoEvalRegex.exec(parts[3]);\n      if (subMatch) {\n        parts[1] = parts[1] || \"eval\";\n        parts[3] = subMatch[1];\n        parts[4] = subMatch[2];\n        parts[5] = \"\";\n      }\n    }\n    let filename = parts[3];\n    let func = parts[1] || UNKNOWN_FUNCTION;\n    [func, filename] = extractSafariExtensionDetails(func, filename);\n    return createFrame(filename, func, parts[4] ? +parts[4] : void 0, parts[5] ? +parts[5] : void 0);\n  }\n  return;\n};\nconst geckoStackLineParser = [GECKO_PRIORITY, gecko];\nconst winjsRegex = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:[-a-z]+):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\nconst winjs = (line) => {\n  const parts = winjsRegex.exec(line);\n  return parts ? createFrame(parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : void 0) : void 0;\n};\nconst winjsStackLineParser = [WINJS_PRIORITY, winjs];\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\nconst opera10 = (line) => {\n  const parts = opera10Regex.exec(line);\n  return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : void 0;\n};\nconst opera10StackLineParser = [OPERA10_PRIORITY, opera10];\nconst opera11Regex = / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\nconst opera11 = (line) => {\n  const parts = opera11Regex.exec(line);\n  return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : void 0;\n};\nconst opera11StackLineParser = [OPERA11_PRIORITY, opera11];\nconst defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser];\nconst defaultStackParser = createStackParser(...defaultStackLineParsers);\nconst extractSafariExtensionDetails = (func, filename) => {\n  const isSafariExtension = func.indexOf(\"safari-extension\") !== -1;\n  const isSafariWebExtension = func.indexOf(\"safari-web-extension\") !== -1;\n  return isSafariExtension || isSafariWebExtension ? [\n    func.indexOf(\"@\") !== -1 ? func.split(\"@\")[0] : UNKNOWN_FUNCTION,\n    isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`\n  ] : [func, filename];\n};\n\nexport { chromeStackLineParser, defaultStackLineParsers, defaultStackParser, geckoStackLineParser, opera10StackLineParser, opera11StackLineParser, winjsStackLineParser };\n//# sourceMappingURL=stack-parsers.js.map\n","import { defineIntegration, addFetchInstrumentationHandler, getClient, debug, addBreadcrumb, filterCollectedUrl, getBreadcrumbLogLevelFromHttpStatusCode, parseUrl, getEventDescription } from '@sentry/core';\nimport { addClickKeypressInstrumentationHandler, addXhrInstrumentationHandler, addHistoryInstrumentationHandler, htmlTreeAsString, getComponentName, SENTRY_XHR_DATA_KEY } from '@sentry/browser-utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\nconst MAX_ALLOWED_STRING_LENGTH = 1024;\nconst INTEGRATION_NAME = \"Breadcrumbs\";\nconst _breadcrumbsIntegration = ((options = {}) => {\n  const _options = {\n    dom: true,\n    fetch: true,\n    history: true,\n    sentry: true,\n    xhr: true,\n    ...options\n  };\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      if (_options.dom) {\n        addClickKeypressInstrumentationHandler(_getDomBreadcrumbHandler(client, _options.dom));\n      }\n      if (_options.xhr) {\n        addXhrInstrumentationHandler(_getXhrBreadcrumbHandler(client));\n      }\n      if (_options.fetch) {\n        addFetchInstrumentationHandler(_getFetchBreadcrumbHandler(client));\n      }\n      if (_options.history) {\n        addHistoryInstrumentationHandler(_getHistoryBreadcrumbHandler(client));\n      }\n      if (_options.sentry) {\n        client.on(\"beforeSendEvent\", _getSentryBreadcrumbHandler(client));\n      }\n    }\n  };\n});\nconst breadcrumbsIntegration = defineIntegration(_breadcrumbsIntegration);\nfunction _getSentryBreadcrumbHandler(client) {\n  return function addSentryBreadcrumb(event) {\n    if (getClient() !== client) {\n      return;\n    }\n    addBreadcrumb(\n      {\n        category: `sentry.${event.type === \"transaction\" ? \"transaction\" : \"event\"}`,\n        event_id: event.event_id,\n        level: event.level,\n        message: getEventDescription(event)\n      },\n      {\n        event\n      }\n    );\n  };\n}\nfunction _getDomBreadcrumbHandler(client, dom) {\n  return function _innerDomBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n    let target;\n    let componentName;\n    let keyAttrs = typeof dom === \"object\" ? dom.serializeAttribute : void 0;\n    let maxStringLength = typeof dom === \"object\" && typeof dom.maxStringLength === \"number\" ? dom.maxStringLength : void 0;\n    if (maxStringLength && maxStringLength > MAX_ALLOWED_STRING_LENGTH) {\n      DEBUG_BUILD && debug.warn(\n        `\\`dom.maxStringLength\\` cannot exceed ${MAX_ALLOWED_STRING_LENGTH}, but a value of ${maxStringLength} was configured. Sentry will use ${MAX_ALLOWED_STRING_LENGTH} instead.`\n      );\n      maxStringLength = MAX_ALLOWED_STRING_LENGTH;\n    }\n    if (typeof keyAttrs === \"string\") {\n      keyAttrs = [keyAttrs];\n    }\n    try {\n      const event = handlerData.event;\n      const element = _isEvent(event) ? event.target : event;\n      target = htmlTreeAsString(element, { keyAttrs, maxStringLength });\n      componentName = getComponentName(element);\n    } catch {\n      target = \"<unknown>\";\n    }\n    if (target.length === 0) {\n      return;\n    }\n    const breadcrumb = {\n      category: `ui.${handlerData.name}`,\n      message: target\n    };\n    if (componentName) {\n      breadcrumb.data = { \"ui.component_name\": componentName };\n    }\n    addBreadcrumb(breadcrumb, {\n      event: handlerData.event,\n      name: handlerData.name,\n      global: handlerData.global\n    });\n  };\n}\nfunction _getXhrBreadcrumbHandler(client) {\n  return function _xhrBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n    const { startTimestamp, endTimestamp } = handlerData;\n    const sentryXhrData = handlerData.xhr[SENTRY_XHR_DATA_KEY];\n    if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n      return;\n    }\n    const { method, url, status_code, body } = sentryXhrData;\n    const data = {\n      method,\n      url: filterCollectedUrl(url),\n      status_code\n    };\n    const hint = {\n      xhr: handlerData.xhr,\n      input: body,\n      startTimestamp,\n      endTimestamp\n    };\n    const breadcrumb = {\n      category: \"xhr\",\n      data,\n      type: \"http\",\n      level: getBreadcrumbLogLevelFromHttpStatusCode(status_code)\n    };\n    client.emit(\"beforeOutgoingRequestBreadcrumb\", breadcrumb, hint);\n    addBreadcrumb(breadcrumb, hint);\n  };\n}\nfunction _getFetchBreadcrumbHandler(client) {\n  return function _fetchBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n    const { startTimestamp, endTimestamp } = handlerData;\n    if (!endTimestamp) {\n      return;\n    }\n    if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === \"POST\") {\n      return;\n    }\n    if (handlerData.error) {\n      const hint = {\n        data: handlerData.error,\n        input: handlerData.args,\n        startTimestamp,\n        endTimestamp\n      };\n      const breadcrumb = {\n        category: \"fetch\",\n        data: { ...handlerData.fetchData, url: filterCollectedUrl(handlerData.fetchData.url) },\n        level: \"error\",\n        type: \"http\"\n      };\n      client.emit(\"beforeOutgoingRequestBreadcrumb\", breadcrumb, hint);\n      addBreadcrumb(breadcrumb, hint);\n    } else {\n      const response = handlerData.response;\n      const data = {\n        ...handlerData.fetchData,\n        url: filterCollectedUrl(handlerData.fetchData.url),\n        status_code: response?.status\n      };\n      const hint = {\n        input: handlerData.args,\n        response,\n        startTimestamp,\n        endTimestamp\n      };\n      const breadcrumb = {\n        category: \"fetch\",\n        data,\n        type: \"http\",\n        level: getBreadcrumbLogLevelFromHttpStatusCode(data.status_code)\n      };\n      client.emit(\"beforeOutgoingRequestBreadcrumb\", breadcrumb, hint);\n      addBreadcrumb(breadcrumb, hint);\n    }\n  };\n}\nfunction _getHistoryBreadcrumbHandler(client) {\n  return function _historyBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n    let from = handlerData.from;\n    let to = handlerData.to;\n    const parsedLoc = parseUrl(WINDOW.location.href);\n    let parsedFrom = from ? parseUrl(from) : void 0;\n    const parsedTo = parseUrl(to);\n    if (!parsedFrom?.path) {\n      parsedFrom = parsedLoc;\n    }\n    if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n      to = parsedTo.relative;\n    }\n    if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n      from = parsedFrom.relative;\n    }\n    addBreadcrumb({\n      category: \"navigation\",\n      data: {\n        from: filterCollectedUrl(from),\n        to: filterCollectedUrl(to)\n      }\n    });\n  };\n}\nfunction _isEvent(event) {\n  return !!event && !!event.target;\n}\n\nexport { breadcrumbsIntegration };\n//# sourceMappingURL=breadcrumbs.js.map\n","import { defineIntegration, fill, getFunctionName, getOriginalFunction } from '@sentry/core';\nimport { WINDOW, wrap } from '../helpers.js';\n\nconst DEFAULT_EVENT_TARGET = \"EventTarget,Window,Node,ApplicationCache,AudioTrackList,BroadcastChannel,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload\".split(\n  \",\"\n);\nconst INTEGRATION_NAME = \"BrowserApiErrors\";\nconst _browserApiErrorsIntegration = ((options = {}) => {\n  const _options = {\n    XMLHttpRequest: true,\n    eventTarget: true,\n    requestAnimationFrame: true,\n    setInterval: true,\n    setTimeout: true,\n    unregisterOriginalCallbacks: false,\n    ...options\n  };\n  return {\n    name: INTEGRATION_NAME,\n    // TODO: This currently only works for the first client this is setup\n    // We may want to adjust this to check for client etc.\n    setupOnce() {\n      if (_options.setTimeout) {\n        fill(WINDOW, \"setTimeout\", _wrapTimeFunction);\n      }\n      if (_options.setInterval) {\n        fill(WINDOW, \"setInterval\", _wrapTimeFunction);\n      }\n      if (_options.requestAnimationFrame) {\n        fill(WINDOW, \"requestAnimationFrame\", _wrapRAF);\n      }\n      if (_options.XMLHttpRequest && \"XMLHttpRequest\" in WINDOW) {\n        fill(XMLHttpRequest.prototype, \"send\", _wrapXHR);\n      }\n      const eventTargetOption = _options.eventTarget;\n      if (eventTargetOption) {\n        const eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;\n        eventTarget.forEach((target) => _wrapEventTarget(target, _options));\n      }\n    }\n  };\n});\nconst browserApiErrorsIntegration = defineIntegration(_browserApiErrorsIntegration);\nfunction _wrapTimeFunction(original) {\n  return function(...args) {\n    const originalCallback = args[0];\n    args[0] = wrap(originalCallback, {\n      mechanism: {\n        handled: false,\n        type: `auto.browser.browserapierrors.${getFunctionName(original)}`\n      }\n    });\n    return original.apply(this, args);\n  };\n}\nfunction _wrapRAF(original) {\n  return function(callback) {\n    return original.apply(this, [\n      wrap(callback, {\n        mechanism: {\n          data: {\n            handler: getFunctionName(original)\n          },\n          handled: false,\n          type: \"auto.browser.browserapierrors.requestAnimationFrame\"\n        }\n      })\n    ]);\n  };\n}\nfunction _wrapXHR(originalSend) {\n  return function(...args) {\n    const xhr = this;\n    const xmlHttpRequestProps = [\"onload\", \"onerror\", \"onprogress\", \"onreadystatechange\"];\n    xmlHttpRequestProps.forEach((prop) => {\n      if (prop in xhr && typeof xhr[prop] === \"function\") {\n        fill(xhr, prop, function(original) {\n          const wrapOptions = {\n            mechanism: {\n              data: {\n                handler: getFunctionName(original)\n              },\n              handled: false,\n              type: `auto.browser.browserapierrors.xhr.${prop}`\n            }\n          };\n          const originalFunction = getOriginalFunction(original);\n          if (originalFunction) {\n            wrapOptions.mechanism.data.handler = getFunctionName(originalFunction);\n          }\n          return wrap(original, wrapOptions);\n        });\n      }\n    });\n    return originalSend.apply(this, args);\n  };\n}\nfunction _wrapEventTarget(target, integrationOptions) {\n  const globalObject = WINDOW;\n  const proto = globalObject[target]?.prototype;\n  if (!proto?.hasOwnProperty?.(\"addEventListener\")) {\n    return;\n  }\n  fill(proto, \"addEventListener\", function(original) {\n    return function(eventName, fn, options) {\n      try {\n        if (isEventListenerObject(fn)) {\n          fn.handleEvent = wrap(fn.handleEvent, {\n            mechanism: {\n              data: {\n                handler: getFunctionName(fn),\n                target\n              },\n              handled: false,\n              type: \"auto.browser.browserapierrors.handleEvent\"\n            }\n          });\n        }\n      } catch {\n      }\n      if (integrationOptions.unregisterOriginalCallbacks) {\n        unregisterOriginalCallback(this, eventName, fn);\n      }\n      return original.apply(this, [\n        eventName,\n        wrap(fn, {\n          mechanism: {\n            data: {\n              handler: getFunctionName(fn),\n              target\n            },\n            handled: false,\n            type: \"auto.browser.browserapierrors.addEventListener\"\n          }\n        }),\n        options\n      ]);\n    };\n  });\n  fill(proto, \"removeEventListener\", function(originalRemoveEventListener) {\n    return function(eventName, fn, options) {\n      try {\n        if (Object.prototype.hasOwnProperty.call(fn, \"__sentry_wrapped__\")) {\n          const originalEventHandler = fn.__sentry_wrapped__;\n          if (originalEventHandler) {\n            originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\n          }\n        }\n      } catch {\n      }\n      return originalRemoveEventListener.call(this, eventName, fn, options);\n    };\n  });\n}\nfunction isEventListenerObject(obj) {\n  return typeof obj.handleEvent === \"function\";\n}\nfunction unregisterOriginalCallback(target, eventName, fn) {\n  if (target && typeof target === \"object\" && \"removeEventListener\" in target && typeof target.removeEventListener === \"function\") {\n    target.removeEventListener(eventName, fn);\n  }\n}\n\nexport { browserApiErrorsIntegration };\n//# sourceMappingURL=browserapierrors.js.map\n","import { defineIntegration, debug, startSession, captureSession, getIsolationScope } from '@sentry/core';\nimport { whenIdleOrHidden, addHistoryInstrumentationHandler } from '@sentry/browser-utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\nconst browserSessionIntegration = defineIntegration((options = {}) => {\n  const lifecycle = options.lifecycle ?? \"page\";\n  return {\n    name: \"BrowserSession\",\n    setupOnce() {\n      if (typeof WINDOW.document === \"undefined\") {\n        DEBUG_BUILD && debug.warn(\"Using the `browserSessionIntegration` in non-browser environments is not supported.\");\n        return;\n      }\n      startSession({ ignoreDuration: true });\n      let initialSessionSent = false;\n      whenIdleOrHidden(() => {\n        if (!initialSessionSent) {\n          captureSession();\n          initialSessionSent = true;\n        }\n      });\n      const isolationScope = getIsolationScope();\n      let previousUser = isolationScope.getUser();\n      isolationScope.addScopeListener((scope) => {\n        const maybeNewUser = scope.getUser();\n        if (previousUser?.id !== maybeNewUser?.id || previousUser?.ip_address !== maybeNewUser?.ip_address) {\n          previousUser = maybeNewUser;\n          if (initialSessionSent) {\n            captureSession();\n          }\n        }\n      });\n      if (lifecycle === \"route\") {\n        addHistoryInstrumentationHandler(({ from, to }) => {\n          if (from !== to) {\n            startSession({ ignoreDuration: true });\n            captureSession();\n            initialSessionSent = true;\n          }\n        });\n      }\n    }\n  };\n});\n\nexport { browserSessionIntegration };\n//# sourceMappingURL=browsersession.js.map\n","import { defineIntegration, safeSetSpanJSONAttributes } from '@sentry/core';\nimport { WINDOW } from '../helpers.js';\n\nconst INTEGRATION_NAME = \"CultureContext\";\nconst _cultureContextIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    preprocessEvent(event) {\n      const culture = getCultureContext();\n      if (culture) {\n        event.contexts = {\n          ...event.contexts,\n          culture: { ...culture, ...event.contexts?.culture }\n        };\n      }\n    },\n    processSegmentSpan(span) {\n      const culture = getCultureContext();\n      if (culture) {\n        safeSetSpanJSONAttributes(span, {\n          \"culture.locale\": culture.locale,\n          \"culture.timezone\": culture.timezone,\n          \"culture.calendar\": culture.calendar\n        });\n      }\n    }\n  };\n});\nconst cultureContextIntegration = defineIntegration(_cultureContextIntegration);\nfunction getCultureContext() {\n  try {\n    const intl = WINDOW.Intl;\n    if (!intl) {\n      return void 0;\n    }\n    const options = intl.DateTimeFormat().resolvedOptions();\n    return {\n      locale: options.locale,\n      timezone: options.timeZone,\n      calendar: options.calendar\n    };\n  } catch {\n    return void 0;\n  }\n}\n\nexport { cultureContextIntegration };\n//# sourceMappingURL=culturecontext.js.map\n","import { defineIntegration, addGlobalErrorInstrumentationHandler, getClient, captureEvent, debug, addGlobalUnhandledRejectionInstrumentationHandler, isPrimitive, UNKNOWN_FUNCTION, isString, stripDataUrlContent } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { getLocationHref } from '@sentry/browser-utils';\nimport { eventFromUnknownInput } from '../eventbuilder.js';\nimport { shouldIgnoreOnError } from '../helpers.js';\n\nconst INTEGRATION_NAME = \"GlobalHandlers\";\nconst _globalHandlersIntegration = ((options = {}) => {\n  const _options = {\n    onerror: true,\n    onunhandledrejection: true,\n    ...options\n  };\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      Error.stackTraceLimit = 50;\n    },\n    setup(client) {\n      if (_options.onerror) {\n        _installGlobalOnErrorHandler(client);\n        globalHandlerLog(\"onerror\");\n      }\n      if (_options.onunhandledrejection) {\n        _installGlobalOnUnhandledRejectionHandler(client);\n        globalHandlerLog(\"onunhandledrejection\");\n      }\n    }\n  };\n});\nconst globalHandlersIntegration = defineIntegration(_globalHandlersIntegration);\nfunction _installGlobalOnErrorHandler(client) {\n  addGlobalErrorInstrumentationHandler((data) => {\n    const { stackParser, attachStacktrace } = getOptions();\n    if (getClient() !== client || shouldIgnoreOnError(data)) {\n      return;\n    }\n    const { msg, url, line, column, error } = data;\n    const event = _enhanceEventWithInitialFrame(\n      eventFromUnknownInput(stackParser, error || msg, void 0, attachStacktrace, false),\n      url,\n      line,\n      column\n    );\n    event.level = \"error\";\n    captureEvent(event, {\n      originalException: error,\n      mechanism: {\n        handled: false,\n        type: \"auto.browser.global_handlers.onerror\"\n      }\n    });\n  });\n}\nfunction _installGlobalOnUnhandledRejectionHandler(client) {\n  addGlobalUnhandledRejectionInstrumentationHandler((e) => {\n    const { stackParser, attachStacktrace } = getOptions();\n    if (getClient() !== client || shouldIgnoreOnError()) {\n      return;\n    }\n    const error = _getUnhandledRejectionError(e);\n    const event = isPrimitive(error) ? _eventFromRejectionWithPrimitive(error) : eventFromUnknownInput(stackParser, error, void 0, attachStacktrace, true);\n    event.level = \"error\";\n    captureEvent(event, {\n      originalException: error,\n      mechanism: {\n        handled: false,\n        type: \"auto.browser.global_handlers.onunhandledrejection\"\n      }\n    });\n  });\n}\nfunction _getUnhandledRejectionError(error) {\n  if (isPrimitive(error)) {\n    return error;\n  }\n  try {\n    if (\"reason\" in error) {\n      return error.reason;\n    }\n    if (\"detail\" in error && \"reason\" in error.detail) {\n      return error.detail.reason;\n    }\n  } catch {\n  }\n  return error;\n}\nfunction _eventFromRejectionWithPrimitive(reason) {\n  return {\n    exception: {\n      values: [\n        {\n          type: \"UnhandledRejection\",\n          // String() is needed because the Primitive type includes symbols (which can't be automatically stringified)\n          value: `Non-Error promise rejection captured with value: ${String(reason)}`\n        }\n      ]\n    }\n  };\n}\nfunction _enhanceEventWithInitialFrame(event, url, lineno, colno) {\n  const e = event.exception = event.exception || {};\n  const ev = e.values = e.values || [];\n  const ev0 = ev[0] = ev[0] || {};\n  const ev0s = ev0.stacktrace = ev0.stacktrace || {};\n  const ev0sf = ev0s.frames = ev0s.frames || [];\n  if (ev0sf.length === 0) {\n    ev0sf.push({\n      colno,\n      lineno,\n      filename: getFilenameFromUrl(url) ?? getLocationHref(),\n      function: UNKNOWN_FUNCTION,\n      in_app: true\n    });\n  }\n  return event;\n}\nfunction globalHandlerLog(type) {\n  DEBUG_BUILD && debug.log(`Global Handler attached: ${type}`);\n}\nfunction getOptions() {\n  const client = getClient();\n  const options = client?.getOptions() || {\n    stackParser: () => [],\n    attachStacktrace: false\n  };\n  return options;\n}\nfunction getFilenameFromUrl(url) {\n  if (!isString(url) || url.length === 0) {\n    return void 0;\n  }\n  if (url.startsWith(\"data:\")) {\n    return `<${stripDataUrlContent(url, false)}>`;\n  }\n  return url;\n}\n\nexport { _enhanceEventWithInitialFrame, _eventFromRejectionWithPrimitive, _getUnhandledRejectionError, globalHandlersIntegration };\n//# sourceMappingURL=globalhandlers.js.map\n","import { defineIntegration, _INTERNAL_filterKeyValueData, safeSetSpanJSONAttributes, filterCollectedUrl } from '@sentry/core';\nimport { WINDOW, getHttpRequestData } from '../helpers.js';\nimport { HTTP_REQUEST_HEADER_KEY_BASE, URL_FULL, SENTRY_OP, SENTRY_IS_LOCALHOST, USER_AGENT_ORIGINAL } from '@sentry/conventions/attributes';\n\nconst httpContextIntegration = defineIntegration(() => {\n  return {\n    name: \"HttpContext\",\n    preprocessEvent(event, _hint, client) {\n      if (!WINDOW.navigator && !WINDOW.location && !WINDOW.document) {\n        return;\n      }\n      const { url, headers: collectedHeaders } = getHttpRequestData(client);\n      const behavior = client.getDataCollectionOptions().httpHeaders.request;\n      const userHeaders = Object.entries(event.request?.headers ?? {}).filter(([key]) => !(key in collectedHeaders));\n      const headers = {\n        ..._INTERNAL_filterKeyValueData(collectedHeaders, behavior),\n        ...Object.fromEntries(userHeaders)\n      };\n      event.request = {\n        url: filterCollectedUrl(url, client),\n        ...event.request,\n        ...Object.keys(headers).length > 0 ? { headers } : { headers: void 0 }\n      };\n    },\n    processSpan(span, client) {\n      if (!WINDOW.navigator && !WINDOW.location && !WINDOW.document) {\n        return;\n      }\n      const reqData = getHttpRequestData(client);\n      const headers = _INTERNAL_filterKeyValueData(\n        reqData.headers,\n        client.getDataCollectionOptions().httpHeaders.request\n      );\n      const referer = headers[\"Referer\"];\n      const { hostname, protocol } = WINDOW.location || {};\n      safeSetSpanJSONAttributes(span, {\n        // This attribute is used by the \"Filter out events from legacy browsers and crawlers\" features on the Sentry backend.\n        // Therefore, it's set on every span.\n        [USER_AGENT_ORIGINAL]: headers[\"User-Agent\"],\n        // Likewise for the \"Filter out localhost events\" feature. Deliberately inlined rather than\n        // sharing the server-side helper, which costs bundle size for request headers and IPs that\n        // don't exist here. Mirrors Relay's localhost filter (relay-filter/src/localhost.rs).\n        [SENTRY_IS_LOCALHOST]: protocol === \"file:\" || hostname === \"localhost\" || hostname === \"127.0.0.1\" || // `location.hostname` keeps the brackets for IPv6 hosts, so this is `[::1]`, not `::1`.\n        hostname === \"[::1]\" || !!hostname?.endsWith(\".localhost\"),\n        // These attributes, we only need on the segment span (analogous to the `request` context for events)\n        ...span.is_segment && {\n          // Coerce empty string to undefined so the helper's nullish check drops it,\n          // rather than writing an empty `url.full` attribute onto the span.\n          [URL_FULL]: span.attributes?.[SENTRY_OP] !== \"http.client\" ? filterCollectedUrl(reqData.url) : void 0,\n          [`${HTTP_REQUEST_HEADER_KEY_BASE}.referer`]: referer ? [referer] : void 0\n        }\n      });\n    }\n  };\n});\n\nexport { httpContextIntegration };\n//# sourceMappingURL=httpcontext.js.map\n","import { defineIntegration, applyAggregateErrorsToEvent } from '@sentry/core';\nimport { exceptionFromError } from '../eventbuilder.js';\n\nconst DEFAULT_KEY = \"cause\";\nconst DEFAULT_LIMIT = 5;\nconst INTEGRATION_NAME = \"LinkedErrors\";\nconst _linkedErrorsIntegration = ((options = {}) => {\n  const limit = options.limit || DEFAULT_LIMIT;\n  const key = options.key || DEFAULT_KEY;\n  return {\n    name: INTEGRATION_NAME,\n    preprocessEvent(event, hint, client) {\n      const options2 = client.getOptions();\n      applyAggregateErrorsToEvent(\n        // This differs from the LinkedErrors integration in core by using a different exceptionFromError function\n        exceptionFromError,\n        options2.stackParser,\n        key,\n        limit,\n        event,\n        hint\n      );\n    }\n  };\n});\nconst linkedErrorsIntegration = defineIntegration(_linkedErrorsIntegration);\n\nexport { linkedErrorsIntegration };\n//# sourceMappingURL=linkederrors.js.map\n","import { isElement, htmlTreeAsString } from '@sentry/browser-utils';\n\nconst HTML_ELEMENT_CONSTRUCTOR_NAME_REGEX = /^HTML(\\w*)Element$/;\nfunction normalizeStringifyValue(value) {\n  if (typeof window !== \"undefined\" && value === window) {\n    return \"[Window]\";\n  }\n  if (typeof document !== \"undefined\" && value === document) {\n    return \"[Document]\";\n  }\n  if (isElement(value)) {\n    const objName = getConstructorName(value);\n    if (HTML_ELEMENT_CONSTRUCTOR_NAME_REGEX.test(objName)) {\n      return `[HTMLElement: ${htmlTreeAsString(value)}]`;\n    }\n  }\n  return void 0;\n}\nfunction getConstructorName(value) {\n  const prototype = Object.getPrototypeOf(value);\n  return prototype?.constructor ? prototype.constructor.name : \"null prototype\";\n}\n\nexport { normalizeStringifyValue };\n//# sourceMappingURL=normalizeStringifyValue.js.map\n","import { getLocationHref } from '@sentry/browser-utils';\nimport { consoleSandbox } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\nfunction checkAndWarnIfIsEmbeddedBrowserExtension() {\n  if (_isEmbeddedBrowserExtension()) {\n    if (DEBUG_BUILD) {\n      consoleSandbox(() => {\n        console.error(\n          \"[Sentry] You cannot use Sentry.init() in a browser extension, see: https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/\"\n        );\n      });\n    }\n    return true;\n  }\n  return false;\n}\nfunction _isEmbeddedBrowserExtension() {\n  if (typeof WINDOW.window === \"undefined\") {\n    return false;\n  }\n  const _window = WINDOW;\n  if (_window.nw) {\n    return false;\n  }\n  const extensionObject = _window[\"chrome\"] || _window[\"browser\"];\n  if (!extensionObject?.runtime?.id) {\n    return false;\n  }\n  const href = getLocationHref();\n  const isDedicatedExtensionPage = WINDOW === WINDOW.top && /^(?:chrome-extension|moz-extension|ms-browser-extension|safari-web-extension):\\/\\//.test(href);\n  return !isDedicatedExtensionPage;\n}\n\nexport { checkAndWarnIfIsEmbeddedBrowserExtension };\n//# sourceMappingURL=detectBrowserExtension.js.map\n","import { eventFiltersIntegration, functionToStringIntegration, conversationIdIntegration, consoleIntegration, dedupeIntegration, getIntegrationsToSetup, stackParserFromStackParserOptions, setNormalizeStringifier, initAndBind } from '@sentry/core';\nimport { BrowserClient } from './client.js';\nimport { breadcrumbsIntegration } from './integrations/breadcrumbs.js';\nimport { browserApiErrorsIntegration } from './integrations/browserapierrors.js';\nimport { browserSessionIntegration } from './integrations/browsersession.js';\nimport { cultureContextIntegration } from './integrations/culturecontext.js';\nimport { globalHandlersIntegration } from './integrations/globalhandlers.js';\nimport { httpContextIntegration } from './integrations/httpcontext.js';\nimport { linkedErrorsIntegration } from './integrations/linkederrors.js';\nimport { defaultStackParser } from './stack-parsers.js';\nimport { makeFetchTransport } from './transports/fetch.js';\nimport { normalizeStringifyValue } from './normalizeStringifyValue.js';\nimport { checkAndWarnIfIsEmbeddedBrowserExtension } from './utils/detectBrowserExtension.js';\n\nfunction getDefaultIntegrations(_options) {\n  return [\n    eventFiltersIntegration(),\n    functionToStringIntegration(),\n    conversationIdIntegration(),\n    browserApiErrorsIntegration(),\n    breadcrumbsIntegration(),\n    consoleIntegration(),\n    globalHandlersIntegration(),\n    linkedErrorsIntegration(),\n    dedupeIntegration(),\n    httpContextIntegration(),\n    cultureContextIntegration(),\n    browserSessionIntegration()\n  ];\n}\nfunction init(options = {}) {\n  const shouldDisableBecauseIsBrowserExtenstion = !options.skipBrowserExtensionCheck && checkAndWarnIfIsEmbeddedBrowserExtension();\n  let defaultIntegrations = options.defaultIntegrations == null ? getDefaultIntegrations() : options.defaultIntegrations;\n  const integrations = getIntegrationsToSetup({\n    integrations: options.integrations,\n    defaultIntegrations\n  });\n  const clientOptions = {\n    ...options,\n    enabled: shouldDisableBecauseIsBrowserExtenstion ? false : options.enabled,\n    stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),\n    integrations,\n    transport: options.transport || makeFetchTransport\n  };\n  setNormalizeStringifier(normalizeStringifyValue);\n  return initAndBind(BrowserClient, clientOptions);\n}\nfunction forceLoad() {\n}\nfunction onLoad(callback) {\n  callback();\n}\n\nexport { forceLoad, getDefaultIntegrations, init, onLoad };\n//# sourceMappingURL=sdk.js.map\n","import { debug, getCurrentScope, getClient, lastEventId, getReportDialogEndpoint } from '@sentry/core';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { WINDOW } from './helpers.js';\n\nfunction showReportDialog(options = {}) {\n  const optionalDocument = WINDOW.document;\n  const injectionPoint = optionalDocument?.head || optionalDocument?.body;\n  if (!injectionPoint) {\n    DEBUG_BUILD && debug.error(\"[showReportDialog] Global document not defined\");\n    return;\n  }\n  const scope = getCurrentScope();\n  const client = getClient();\n  const dsn = client?.getDsn();\n  if (!dsn) {\n    DEBUG_BUILD && debug.error(\"[showReportDialog] DSN not configured\");\n    return;\n  }\n  const mergedOptions = {\n    ...options,\n    user: {\n      ...scope.getUser(),\n      ...options.user\n    },\n    eventId: options.eventId || lastEventId()\n  };\n  const { onLoad, onClose, onError } = mergedOptions;\n  if (!mergedOptions.eventId) {\n    DEBUG_BUILD && debug.error(\"[showReportDialog] No event ID\");\n    onError?.(new Error(\"No event ID to show the report dialog for\"));\n    return;\n  }\n  const script = WINDOW.document.createElement(\"script\");\n  script.async = true;\n  script.crossOrigin = \"anonymous\";\n  script.src = getReportDialogEndpoint(dsn, mergedOptions);\n  if (onLoad) {\n    script.onload = onLoad;\n  }\n  if (onError) {\n    script.onerror = () => {\n      onError(new Error(\"Failed to load the report dialog script\"));\n    };\n  }\n  if (onClose) {\n    const reportDialogClosedMessageHandler = (event) => {\n      if (event.data === \"__sentry_reportdialog_closed__\") {\n        try {\n          onClose();\n        } finally {\n          WINDOW.removeEventListener(\"message\", reportDialogClosedMessageHandler);\n        }\n      }\n    };\n    WINDOW.addEventListener(\"message\", reportDialogClosedMessageHandler);\n    script.addEventListener(\"error\", () => {\n      WINDOW.removeEventListener(\"message\", reportDialogClosedMessageHandler);\n    });\n  }\n  injectionPoint.appendChild(script);\n}\n\nexport { showReportDialog };\n//# sourceMappingURL=report-dialog.js.map\n","import { GLOBAL_OBJ, normalize, isObjectLike, fill, _INTERNAL_performanceTimeToSeconds, debug as debug$1, severityLevelFromString, captureException, addBreadcrumb, uuid4, getClient, getCurrentScope, getActiveSpan, getDynamicSamplingContextFromSpan, isSentryRequestUrl, stringMatchesSomePattern, addEventProcessor, debounce as debounce$1, createEnvelope, createEventEnvelopeHeaders, getSdkMetadataForEnvelopeHeader, prepareEvent, getIsolationScope, updateRateLimits, isRateLimited, setContext, getRootSpan, spanToJSON, isBrowser, safeSetSpanJSONAttributes, parseSampleRate, consoleSandbox } from '@sentry/core';\nimport { setTimeout as setTimeout$3, htmlTreeAsString, addPerformanceInstrumentationHandler, addLcpInstrumentationHandler, addClsInstrumentationHandler, addInpInstrumentationHandler, getLocationHref, serializeFormData, getFetchRequestArgBody, getBodyString, SENTRY_XHR_DATA_KEY, parseXhrResponseHeaders, addClickKeypressInstrumentationHandler, addHistoryInstrumentationHandler } from '@sentry/browser-utils';\n\nconst WINDOW = GLOBAL_OBJ;\nconst REPLAY_SESSION_KEY = \"sentryReplaySession\";\nconst REPLAY_EVENT_NAME = \"replay_event\";\nconst UNABLE_TO_SEND_REPLAY = \"Unable to send Replay\";\nconst SESSION_IDLE_PAUSE_DURATION = 3e5;\nconst SESSION_IDLE_EXPIRE_DURATION = 9e5;\nconst DEFAULT_FLUSH_MIN_DELAY = 5e3;\nconst DEFAULT_FLUSH_MAX_DELAY = 5500;\nconst BUFFER_CHECKOUT_TIME = 6e4;\nconst RETRY_BASE_INTERVAL = 5e3;\nconst RETRY_MAX_COUNT = 3;\nconst NETWORK_BODY_MAX_SIZE = 15e4;\nconst CONSOLE_ARG_MAX_SIZE = 5e3;\nconst SLOW_CLICK_THRESHOLD = 3e3;\nconst SLOW_CLICK_SCROLL_TIMEOUT = 300;\nconst REPLAY_MAX_EVENT_BUFFER_SIZE = 2e7;\nconst MIN_REPLAY_DURATION = 4999;\nconst MIN_REPLAY_DURATION_LIMIT = 5e4;\nconst MAX_REPLAY_DURATION = 36e5;\n\nconst Nm=\"sentry.segment.name.source\";\n\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar NodeType$1 = /* @__PURE__ */ ((NodeType2) => {\n  NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n  NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n  NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n  NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n  NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n  NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n  return NodeType2;\n})(NodeType$1 || {});\nfunction isElement$1(n) {\n  return n.nodeType === n.ELEMENT_NODE;\n}\nfunction isShadowRoot(n) {\n  const host = n?.host;\n  return Boolean(host?.shadowRoot === n);\n}\nfunction isNativeShadowDom(shadowRoot) {\n  return Object.prototype.toString.call(shadowRoot) === \"[object ShadowRoot]\";\n}\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\n  if (cssText.includes(\" background-clip: text;\") && !cssText.includes(\" -webkit-background-clip: text;\")) {\n    cssText = cssText.replace(\n      /\\sbackground-clip:\\s*text;/g,\n      \" -webkit-background-clip: text; background-clip: text;\"\n    );\n  }\n  return cssText;\n}\nfunction escapeImportStatement(rule) {\n  const { cssText } = rule;\n  if (cssText.split('\"').length < 3) return cssText;\n  const statement = [\"@import\", `url(${JSON.stringify(rule.href)})`];\n  if (rule.layerName === \"\") {\n    statement.push(`layer`);\n  } else if (rule.layerName) {\n    statement.push(`layer(${rule.layerName})`);\n  }\n  if (rule.supportsText) {\n    statement.push(`supports(${rule.supportsText})`);\n  }\n  if (rule.media.length) {\n    statement.push(rule.media.mediaText);\n  }\n  return statement.join(\" \") + \";\";\n}\nfunction stringifyStylesheet(s) {\n  try {\n    const rules = s.rules || s.cssRules;\n    return rules ? fixBrowserCompatibilityIssuesInCSS(\n      Array.from(rules, stringifyRule).join(\"\")\n    ) : null;\n  } catch (error) {\n    return null;\n  }\n}\nfunction fixAllCssProperty(rule) {\n  let styles = \"\";\n  for (let i2 = 0; i2 < rule.style.length; i2++) {\n    const styleDeclaration = rule.style;\n    const attribute = styleDeclaration[i2];\n    const isImportant = styleDeclaration.getPropertyPriority(attribute);\n    styles += `${attribute}:${styleDeclaration.getPropertyValue(attribute)}${isImportant ? ` !important` : \"\"};`;\n  }\n  return `${rule.selectorText} { ${styles} }`;\n}\nfunction stringifyRule(rule) {\n  let importStringified;\n  if (isCSSImportRule(rule)) {\n    try {\n      importStringified = // for same-origin stylesheets,\n      // we can access the imported stylesheet rules directly\n      stringifyStylesheet(rule.styleSheet) || // work around browser issues with the raw string `@import url(...)` statement\n      escapeImportStatement(rule);\n    } catch (error) {\n    }\n  } else if (isCSSStyleRule(rule)) {\n    let cssText = rule.cssText;\n    const needsSafariColonFix = rule.selectorText.includes(\":\");\n    const needsAllFix = typeof rule.style[\"all\"] === \"string\" && rule.style[\"all\"];\n    if (needsAllFix) {\n      cssText = fixAllCssProperty(rule);\n    }\n    if (needsSafariColonFix) {\n      cssText = fixSafariColons(cssText);\n    }\n    if (needsSafariColonFix || needsAllFix) {\n      return cssText;\n    }\n  }\n  return importStringified || rule.cssText;\n}\nfunction fixSafariColons(cssStringified) {\n  const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\n  return cssStringified.replace(regex, \"$1\\\\$2\");\n}\nfunction isCSSImportRule(rule) {\n  return \"styleSheet\" in rule;\n}\nfunction isCSSStyleRule(rule) {\n  return \"selectorText\" in rule;\n}\nclass Mirror {\n  constructor() {\n    __publicField(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n    __publicField(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n  }\n  getId(n) {\n    if (!n) return -1;\n    const id = this.getMeta(n)?.id;\n    return id ?? -1;\n  }\n  getNode(id) {\n    return this.idNodeMap.get(id) || null;\n  }\n  getIds() {\n    return Array.from(this.idNodeMap.keys());\n  }\n  getMeta(n) {\n    return this.nodeMetaMap.get(n) || null;\n  }\n  // removes the node from idNodeMap\n  // doesn't remove the node from nodeMetaMap\n  removeNodeFromMap(n) {\n    const id = this.getId(n);\n    this.idNodeMap.delete(id);\n    if (n.childNodes) {\n      n.childNodes.forEach(\n        (childNode) => this.removeNodeFromMap(childNode)\n      );\n    }\n    if (isElement$1(n) && n.shadowRoot) {\n      this.removeNodeFromMap(n.shadowRoot);\n    }\n  }\n  has(id) {\n    return this.idNodeMap.has(id);\n  }\n  hasNode(node) {\n    return this.nodeMetaMap.has(node);\n  }\n  add(n, meta) {\n    const id = meta.id;\n    this.idNodeMap.set(id, n);\n    this.nodeMetaMap.set(n, meta);\n  }\n  replace(id, n) {\n    const oldNode = this.getNode(id);\n    if (oldNode) {\n      const meta = this.nodeMetaMap.get(oldNode);\n      if (meta) this.nodeMetaMap.set(n, meta);\n    }\n    this.idNodeMap.set(id, n);\n  }\n  reset() {\n    this.idNodeMap = /* @__PURE__ */ new Map();\n    this.nodeMetaMap = /* @__PURE__ */ new WeakMap();\n  }\n}\nfunction createMirror() {\n  return new Mirror();\n}\nfunction shouldMaskInput({\n  maskInputOptions,\n  tagName,\n  type\n}) {\n  if (tagName === \"OPTION\") {\n    tagName = \"SELECT\";\n  }\n  return Boolean(\n    maskInputOptions[tagName.toLowerCase()] || type && maskInputOptions[type] || type === \"password\" || // Default to \"text\" option for inputs without a \"type\" attribute defined\n    tagName === \"INPUT\" && !type && maskInputOptions[\"text\"]\n  );\n}\nfunction maskInputValue({\n  isMasked,\n  element,\n  value,\n  maskInputFn\n}) {\n  let text = value || \"\";\n  if (!isMasked) {\n    return text;\n  }\n  if (maskInputFn) {\n    text = maskInputFn(text, element);\n  }\n  return \"*\".repeat(text.length);\n}\nfunction toLowerCase(str) {\n  return str.toLowerCase();\n}\nfunction toUpperCase(str) {\n  return str.toUpperCase();\n}\nconst ORIGINAL_ATTRIBUTE_NAME = \"__rrweb_original__\";\nfunction is2DCanvasBlank(canvas) {\n  const ctx = canvas.getContext(\"2d\");\n  if (!ctx) return true;\n  const chunkSize = 50;\n  for (let x = 0; x < canvas.width; x += chunkSize) {\n    for (let y = 0; y < canvas.height; y += chunkSize) {\n      const getImageData = ctx.getImageData;\n      const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData ? getImageData[ORIGINAL_ATTRIBUTE_NAME] : getImageData;\n      const pixelBuffer = new Uint32Array(\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n        originalGetImageData.call(\n          ctx,\n          x,\n          y,\n          Math.min(chunkSize, canvas.width - x),\n          Math.min(chunkSize, canvas.height - y)\n        ).data.buffer\n      );\n      if (pixelBuffer.some((pixel) => pixel !== 0)) return false;\n    }\n  }\n  return true;\n}\nfunction getInputType(element) {\n  const type = element.type;\n  return element.hasAttribute(\"data-rr-is-password\") ? \"password\" : type ? (\n    // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n    toLowerCase(type)\n  ) : null;\n}\nfunction getInputValue(el, tagName, type) {\n  if (tagName === \"INPUT\" && (type === \"radio\" || type === \"checkbox\")) {\n    return el.getAttribute(\"value\") || \"\";\n  }\n  return el.value;\n}\nfunction extractFileExtension(path, baseURL) {\n  let url;\n  try {\n    url = new URL(path, baseURL ?? window.location.href);\n  } catch (err) {\n    return null;\n  }\n  const regex = /\\.([0-9a-z]+)(?:$)/i;\n  const match = url.pathname.match(regex);\n  return match?.[1] ?? null;\n}\nconst cachedImplementations$1 = {};\nfunction getImplementation$1(name) {\n  const cached = cachedImplementations$1[name];\n  if (cached) {\n    return cached;\n  }\n  const windowImpl = window[name].bind(window);\n  let impl = windowImpl;\n  const document2 = window.document;\n  if (document2 && typeof document2.createElement === \"function\") {\n    try {\n      const sandbox = document2.createElement(\"iframe\");\n      sandbox.hidden = true;\n      document2.head.appendChild(sandbox);\n      const contentWindow = sandbox.contentWindow;\n      if (contentWindow && contentWindow[name]) {\n        const sandboxImpl = contentWindow[name].bind(window);\n        impl = (...args) => {\n          try {\n            return sandboxImpl(...args);\n          } catch {\n            cachedImplementations$1[name] = windowImpl;\n            return windowImpl(...args);\n          }\n        };\n      }\n      document2.head.removeChild(sandbox);\n    } catch (e) {\n    }\n  }\n  return cachedImplementations$1[name] = impl;\n}\nfunction setTimeout$1(...rest) {\n  return getImplementation$1(\"setTimeout\")(...rest);\n}\nfunction clearTimeout$1(...rest) {\n  return getImplementation$1(\"clearTimeout\")(...rest);\n}\nfunction getIFrameContentDocument$1(iframe) {\n  try {\n    return iframe.contentDocument;\n  } catch {\n  }\n}\nfunction getIFrameContentWindow$1(iframe) {\n  try {\n    return iframe.contentWindow;\n  } catch {\n  }\n}\nlet _id = 1;\nconst tagNameRegex = new RegExp(\"[^a-z0-9-_:]\");\nconst IGNORED_NODE = -2;\nfunction genId() {\n  return _id++;\n}\nfunction getValidTagName(element) {\n  if (element instanceof HTMLFormElement) {\n    return \"form\";\n  }\n  const processedTagName = toLowerCase(element.tagName);\n  if (tagNameRegex.test(processedTagName)) {\n    return \"div\";\n  }\n  return processedTagName;\n}\nfunction extractOrigin(url) {\n  let origin = \"\";\n  if (url.indexOf(\"//\") > -1) {\n    origin = url.split(\"/\").slice(0, 3).join(\"/\");\n  } else {\n    origin = url.split(\"/\")[0];\n  }\n  origin = origin.split(\"?\")[0];\n  return origin;\n}\nlet canvasService;\nlet canvasCtx;\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\nconst URL_WWW_MATCH = /^www\\..*/i;\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\nfunction filterCSSPropertiesFromInlineStyle(cssText, ignoredProperties) {\n  if (!cssText || ignoredProperties.size === 0) {\n    return cssText;\n  }\n  try {\n    const properties = cssText.split(\";\");\n    const filteredProperties = [];\n    for (let property of properties) {\n      property = property.trim();\n      if (!property) continue;\n      const colonIndex = property.indexOf(\":\");\n      if (colonIndex === -1) {\n        filteredProperties.push(property);\n        continue;\n      }\n      const propertyName = property.slice(0, colonIndex).trim();\n      if (!ignoredProperties.has(propertyName)) {\n        filteredProperties.push(property);\n      }\n    }\n    return filteredProperties.join(\"; \") + (filteredProperties.length > 0 && cssText.endsWith(\";\") ? \";\" : \"\");\n  } catch (error) {\n    console.warn(\"Error filtering CSS properties:\", error);\n    return cssText;\n  }\n}\nfunction absoluteToStylesheet(cssText, href) {\n  return (cssText || \"\").replace(\n    URL_IN_CSS_REF,\n    (origin, quote1, path1, quote2, path2, path3) => {\n      const filePath = path1 || path2 || path3;\n      const maybeQuote = quote1 || quote2 || \"\";\n      if (!filePath) {\n        return origin;\n      }\n      if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\n        return `url(${maybeQuote}${filePath}${maybeQuote})`;\n      }\n      if (DATA_URI.test(filePath)) {\n        return `url(${maybeQuote}${filePath}${maybeQuote})`;\n      }\n      if (filePath[0] === \"/\") {\n        return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\n      }\n      const stack = href.split(\"/\");\n      const parts = filePath.split(\"/\");\n      stack.pop();\n      for (const part of parts) {\n        if (part === \".\") {\n          continue;\n        } else if (part === \"..\") {\n          stack.pop();\n        } else {\n          stack.push(part);\n        }\n      }\n      return `url(${maybeQuote}${stack.join(\"/\")}${maybeQuote})`;\n    }\n  );\n}\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\n  if (attributeValue.trim() === \"\") {\n    return attributeValue;\n  }\n  let pos = 0;\n  function collectCharacters(regEx) {\n    let chars2;\n    const match = regEx.exec(attributeValue.substring(pos));\n    if (match) {\n      chars2 = match[0];\n      pos += chars2.length;\n      return chars2;\n    }\n    return \"\";\n  }\n  const output = [];\n  while (true) {\n    collectCharacters(SRCSET_COMMAS_OR_SPACES);\n    if (pos >= attributeValue.length) {\n      break;\n    }\n    let url = collectCharacters(SRCSET_NOT_SPACES);\n    if (url.slice(-1) === \",\") {\n      url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n      output.push(url);\n    } else {\n      let descriptorsStr = \"\";\n      url = absoluteToDoc(doc, url);\n      let inParens = false;\n      while (true) {\n        const c = attributeValue.charAt(pos);\n        if (c === \"\") {\n          output.push((url + descriptorsStr).trim());\n          break;\n        } else if (!inParens) {\n          if (c === \",\") {\n            pos += 1;\n            output.push((url + descriptorsStr).trim());\n            break;\n          } else if (c === \"(\") {\n            inParens = true;\n          }\n        } else {\n          if (c === \")\") {\n            inParens = false;\n          }\n        }\n        descriptorsStr += c;\n        pos += 1;\n      }\n    }\n  }\n  return output.join(\", \");\n}\nconst cachedDocument = /* @__PURE__ */ new WeakMap();\nfunction absoluteToDoc(doc, attributeValue) {\n  if (!attributeValue || attributeValue.trim() === \"\") {\n    return attributeValue;\n  }\n  return getHref(doc, attributeValue);\n}\nfunction isSVGElement(el) {\n  return Boolean(el.tagName === \"svg\" || el.ownerSVGElement);\n}\nfunction getHref(doc, customHref) {\n  let a = cachedDocument.get(doc);\n  if (!a) {\n    a = doc.createElement(\"a\");\n    cachedDocument.set(doc, a);\n  }\n  if (!customHref) {\n    customHref = \"\";\n  } else if (customHref.startsWith(\"blob:\") || customHref.startsWith(\"data:\")) {\n    return customHref;\n  }\n  a.setAttribute(\"href\", customHref);\n  return a.href;\n}\nfunction transformAttribute(doc, tagName, name, value, element, maskAttributeFn, ignoreCSSAttributes) {\n  if (!value) {\n    return value;\n  }\n  if (name === \"src\" || name === \"href\" && !(tagName === \"use\" && value[0] === \"#\")) {\n    return absoluteToDoc(doc, value);\n  } else if (name === \"xlink:href\" && value[0] !== \"#\") {\n    return absoluteToDoc(doc, value);\n  } else if (name === \"background\" && (tagName === \"table\" || tagName === \"td\" || tagName === \"th\")) {\n    return absoluteToDoc(doc, value);\n  } else if (name === \"srcset\") {\n    return getAbsoluteSrcsetString(doc, value);\n  } else if (name === \"style\") {\n    let processedStyle = absoluteToStylesheet(value, getHref(doc));\n    if (ignoreCSSAttributes && ignoreCSSAttributes.size > 0) {\n      processedStyle = filterCSSPropertiesFromInlineStyle(\n        processedStyle,\n        ignoreCSSAttributes\n      );\n    }\n    return processedStyle;\n  } else if (tagName === \"object\" && name === \"data\") {\n    return absoluteToDoc(doc, value);\n  }\n  if (typeof maskAttributeFn === \"function\") {\n    return maskAttributeFn(name, value, element);\n  }\n  return value;\n}\nfunction ignoreAttribute(tagName, name, _value) {\n  return (tagName === \"video\" || tagName === \"audio\") && name === \"autoplay\";\n}\nfunction _isBlockedElement(element, blockClass, blockSelector, unblockSelector) {\n  try {\n    if (unblockSelector && element.matches(unblockSelector)) {\n      return false;\n    }\n    if (typeof blockClass === \"string\") {\n      if (element.classList.contains(blockClass)) {\n        return true;\n      }\n    } else {\n      for (let eIndex = element.classList.length; eIndex--; ) {\n        const className = element.classList[eIndex];\n        if (blockClass.test(className)) {\n          return true;\n        }\n      }\n    }\n    if (blockSelector) {\n      return element.matches(blockSelector);\n    }\n  } catch (e) {\n  }\n  return false;\n}\nfunction elementClassMatchesRegex(el, regex) {\n  for (let eIndex = el.classList.length; eIndex--; ) {\n    const className = el.classList[eIndex];\n    if (regex.test(className)) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction distanceToMatch(node, matchPredicate, limit = Infinity, distance = 0) {\n  if (!node) return -1;\n  if (isShadowRoot(node)) {\n    return distanceToMatch(node.host, matchPredicate, limit, distance + 1);\n  }\n  if (node.nodeType !== node.ELEMENT_NODE) return -1;\n  if (distance > limit) return -1;\n  if (matchPredicate(node)) return distance;\n  return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);\n}\nfunction createMatchPredicate(className, selector) {\n  return (node) => {\n    const el = node;\n    if (el === null) return false;\n    try {\n      if (className) {\n        if (typeof className === \"string\") {\n          if (el.matches(`.${className}`)) return true;\n        } else if (elementClassMatchesRegex(el, className)) {\n          return true;\n        }\n      }\n      if (selector && el.matches(selector)) return true;\n      return false;\n    } catch {\n      return false;\n    }\n  };\n}\nfunction needMaskingText(node, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) {\n  try {\n    const el = node.nodeType === node.ELEMENT_NODE ? node : node.parentElement;\n    if (el === null) return false;\n    if (el.tagName === \"INPUT\") {\n      const autocomplete = el.getAttribute(\"autocomplete\");\n      const disallowedAutocompleteValues = [\n        \"current-password\",\n        \"new-password\",\n        \"cc-number\",\n        \"cc-exp\",\n        \"cc-exp-month\",\n        \"cc-exp-year\",\n        \"cc-csc\"\n      ];\n      if (disallowedAutocompleteValues.includes(autocomplete)) {\n        return true;\n      }\n    }\n    let maskDistance = -1;\n    let unmaskDistance = -1;\n    if (maskAllText) {\n      unmaskDistance = distanceToMatch(\n        el,\n        createMatchPredicate(unmaskTextClass, unmaskTextSelector)\n      );\n      if (unmaskDistance < 0) {\n        return true;\n      }\n      maskDistance = distanceToMatch(\n        el,\n        createMatchPredicate(maskTextClass, maskTextSelector),\n        unmaskDistance >= 0 ? unmaskDistance : Infinity\n      );\n    } else {\n      maskDistance = distanceToMatch(\n        el,\n        createMatchPredicate(maskTextClass, maskTextSelector)\n      );\n      if (maskDistance < 0) {\n        return false;\n      }\n      unmaskDistance = distanceToMatch(\n        el,\n        createMatchPredicate(unmaskTextClass, unmaskTextSelector),\n        maskDistance >= 0 ? maskDistance : Infinity\n      );\n    }\n    return maskDistance >= 0 ? unmaskDistance >= 0 ? maskDistance <= unmaskDistance : true : unmaskDistance >= 0 ? false : !!maskAllText;\n  } catch (e) {\n  }\n  return !!maskAllText;\n}\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\n  const win = getIFrameContentWindow$1(iframeEl);\n  if (!win) {\n    return;\n  }\n  let fired = false;\n  let readyState;\n  try {\n    readyState = win.document.readyState;\n  } catch (error) {\n    return;\n  }\n  if (readyState !== \"complete\") {\n    const timer = setTimeout$1(() => {\n      if (!fired) {\n        listener();\n        fired = true;\n      }\n    }, iframeLoadTimeout);\n    iframeEl.addEventListener(\"load\", () => {\n      clearTimeout$1(timer);\n      fired = true;\n      listener();\n    });\n    return;\n  }\n  const blankUrl = \"about:blank\";\n  if (win.location.href !== blankUrl || iframeEl.src === blankUrl || iframeEl.src === \"\") {\n    setTimeout$1(listener, 0);\n    return iframeEl.addEventListener(\"load\", listener);\n  }\n  iframeEl.addEventListener(\"load\", listener);\n}\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\n  let fired = false;\n  let styleSheetLoaded;\n  try {\n    styleSheetLoaded = link.sheet;\n  } catch (error) {\n    styleSheetLoaded = null;\n  }\n  if (styleSheetLoaded) return;\n  const timer = setTimeout$1(() => {\n    if (!fired) {\n      listener();\n      fired = true;\n    }\n  }, styleSheetLoadTimeout);\n  link.addEventListener(\"load\", () => {\n    clearTimeout$1(timer);\n    fired = true;\n    listener();\n  });\n}\nfunction serializeNode(n, options) {\n  const {\n    doc,\n    mirror,\n    blockClass,\n    blockSelector,\n    unblockSelector,\n    maskAllText,\n    maskAttributeFn,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    inlineStylesheet,\n    maskInputOptions = {},\n    maskTextFn,\n    maskInputFn,\n    dataURLOptions = {},\n    inlineImages,\n    recordCanvas,\n    keepIframeSrcFn,\n    newlyAddedElement = false,\n    ignoreCSSAttributes\n  } = options;\n  const rootId = getRootId(doc, mirror);\n  switch (n.nodeType) {\n    case n.DOCUMENT_NODE:\n      if (n.compatMode !== \"CSS1Compat\") {\n        return {\n          type: NodeType$1.Document,\n          childNodes: [],\n          compatMode: n.compatMode\n          // probably \"BackCompat\"\n        };\n      } else {\n        return {\n          type: NodeType$1.Document,\n          childNodes: []\n        };\n      }\n    case n.DOCUMENT_TYPE_NODE:\n      return {\n        type: NodeType$1.DocumentType,\n        name: n.name,\n        publicId: n.publicId,\n        systemId: n.systemId,\n        rootId\n      };\n    case n.ELEMENT_NODE:\n      return serializeElementNode(n, {\n        doc,\n        blockClass,\n        blockSelector,\n        unblockSelector,\n        inlineStylesheet,\n        maskAttributeFn,\n        maskInputOptions,\n        maskInputFn,\n        dataURLOptions,\n        inlineImages,\n        recordCanvas,\n        keepIframeSrcFn,\n        newlyAddedElement,\n        rootId,\n        maskTextClass,\n        unmaskTextClass,\n        maskTextSelector,\n        unmaskTextSelector,\n        ignoreCSSAttributes\n      });\n    case n.TEXT_NODE:\n      return serializeTextNode(n, {\n        doc,\n        maskAllText,\n        maskTextClass,\n        unmaskTextClass,\n        maskTextSelector,\n        unmaskTextSelector,\n        maskTextFn,\n        maskInputOptions,\n        maskInputFn,\n        rootId\n      });\n    case n.CDATA_SECTION_NODE:\n      return {\n        type: NodeType$1.CDATA,\n        textContent: \"\",\n        rootId\n      };\n    case n.COMMENT_NODE:\n      return {\n        type: NodeType$1.Comment,\n        textContent: n.textContent || \"\",\n        rootId\n      };\n    default:\n      return false;\n  }\n}\nfunction getRootId(doc, mirror) {\n  if (!mirror.hasNode(doc)) return void 0;\n  const docId = mirror.getId(doc);\n  return docId === 1 ? void 0 : docId;\n}\nfunction serializeTextNode(n, options) {\n  const {\n    maskAllText,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    maskTextFn,\n    maskInputOptions,\n    maskInputFn,\n    rootId\n  } = options;\n  const parentTagName = n.parentNode && n.parentNode.tagName;\n  let textContent = n.textContent;\n  const isStyle = parentTagName === \"STYLE\" ? true : void 0;\n  const isScript = parentTagName === \"SCRIPT\" ? true : void 0;\n  const isTextarea = parentTagName === \"TEXTAREA\" ? true : void 0;\n  if (isStyle && textContent) {\n    try {\n      if (n.nextSibling || n.previousSibling) {\n      } else if (n.parentNode.sheet?.cssRules) {\n        textContent = stringifyStylesheet(\n          n.parentNode.sheet\n        );\n      }\n    } catch (err) {\n      console.warn(\n        `Cannot get CSS styles from text's parentNode. Error: ${err}`,\n        n\n      );\n    }\n    textContent = absoluteToStylesheet(textContent, getHref(options.doc));\n  }\n  if (isScript) {\n    textContent = \"SCRIPT_PLACEHOLDER\";\n  }\n  const forceMask = needMaskingText(\n    n,\n    maskTextClass,\n    maskTextSelector,\n    unmaskTextClass,\n    unmaskTextSelector,\n    maskAllText\n  );\n  if (!isStyle && !isScript && !isTextarea && textContent && forceMask) {\n    textContent = maskTextFn ? maskTextFn(textContent, n.parentElement) : textContent.replace(/[\\S]/g, \"*\");\n  }\n  if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) {\n    textContent = maskInputFn ? maskInputFn(textContent, n.parentNode) : textContent.replace(/[\\S]/g, \"*\");\n  }\n  if (parentTagName === \"OPTION\" && textContent) {\n    const isInputMasked = shouldMaskInput({\n      type: null,\n      tagName: parentTagName,\n      maskInputOptions\n    });\n    textContent = maskInputValue({\n      isMasked: needMaskingText(\n        n,\n        maskTextClass,\n        maskTextSelector,\n        unmaskTextClass,\n        unmaskTextSelector,\n        isInputMasked\n      ),\n      element: n,\n      value: textContent,\n      maskInputFn\n    });\n  }\n  return {\n    type: NodeType$1.Text,\n    textContent: textContent || \"\",\n    isStyle,\n    rootId\n  };\n}\nfunction serializeElementNode(n, options) {\n  const {\n    doc,\n    blockClass,\n    blockSelector,\n    unblockSelector,\n    inlineStylesheet,\n    maskInputOptions = {},\n    maskAttributeFn,\n    maskInputFn,\n    dataURLOptions = {},\n    inlineImages,\n    recordCanvas,\n    keepIframeSrcFn,\n    newlyAddedElement = false,\n    rootId,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    ignoreCSSAttributes\n  } = options;\n  const needBlock = _isBlockedElement(\n    n,\n    blockClass,\n    blockSelector,\n    unblockSelector\n  );\n  const tagName = getValidTagName(n);\n  let attributes2 = {};\n  const len = n.attributes.length;\n  for (let i2 = 0; i2 < len; i2++) {\n    const attr = n.attributes[i2];\n    if (attr.name && !ignoreAttribute(tagName, attr.name, attr.value)) {\n      attributes2[attr.name] = transformAttribute(\n        doc,\n        tagName,\n        toLowerCase(attr.name),\n        attr.value,\n        n,\n        maskAttributeFn,\n        ignoreCSSAttributes\n      );\n    }\n  }\n  if (tagName === \"link\" && inlineStylesheet) {\n    const stylesheet = Array.from(doc.styleSheets).find((s) => {\n      return s.href === n.href;\n    });\n    let cssText = null;\n    if (stylesheet) {\n      cssText = stringifyStylesheet(stylesheet);\n    }\n    if (cssText) {\n      attributes2.rel = null;\n      attributes2.href = null;\n      attributes2.crossorigin = null;\n      attributes2._cssText = absoluteToStylesheet(cssText, stylesheet.href);\n    }\n  }\n  if (tagName === \"style\" && n.sheet && // TODO: Currently we only try to get dynamic stylesheet when it is an empty style element\n  !(n.innerText || n.textContent || \"\").trim().length) {\n    const cssText = stringifyStylesheet(\n      n.sheet\n    );\n    if (cssText) {\n      attributes2._cssText = absoluteToStylesheet(cssText, getHref(doc));\n    }\n  }\n  if (tagName === \"input\" || tagName === \"textarea\" || tagName === \"select\" || tagName === \"option\") {\n    const el = n;\n    const type = getInputType(el);\n    const value = getInputValue(el, toUpperCase(tagName), type);\n    const checked = el.checked;\n    if (type !== \"submit\" && type !== \"button\" && value) {\n      const forceMask = needMaskingText(\n        el,\n        maskTextClass,\n        maskTextSelector,\n        unmaskTextClass,\n        unmaskTextSelector,\n        shouldMaskInput({\n          type,\n          tagName: toUpperCase(tagName),\n          maskInputOptions\n        })\n      );\n      attributes2.value = maskInputValue({\n        isMasked: forceMask,\n        element: el,\n        value,\n        maskInputFn\n      });\n    }\n    if (checked) {\n      attributes2.checked = checked;\n    }\n  }\n  if (tagName === \"option\") {\n    if (n.selected && !maskInputOptions[\"select\"]) {\n      attributes2.selected = true;\n    } else {\n      delete attributes2.selected;\n    }\n  }\n  if (tagName === \"canvas\" && recordCanvas) {\n    if (n.__context === \"2d\") {\n      if (!is2DCanvasBlank(n)) {\n        attributes2.rr_dataURL = n.toDataURL(\n          dataURLOptions.type,\n          dataURLOptions.quality\n        );\n      }\n    } else if (!(\"__context\" in n)) {\n      const canvasDataURL = n.toDataURL(\n        dataURLOptions.type,\n        dataURLOptions.quality\n      );\n      const blankCanvas = doc.createElement(\"canvas\");\n      blankCanvas.width = n.width;\n      blankCanvas.height = n.height;\n      const blankCanvasDataURL = blankCanvas.toDataURL(\n        dataURLOptions.type,\n        dataURLOptions.quality\n      );\n      if (canvasDataURL !== blankCanvasDataURL) {\n        attributes2.rr_dataURL = canvasDataURL;\n      }\n    }\n  }\n  if (tagName === \"img\" && inlineImages) {\n    if (!canvasService) {\n      canvasService = doc.createElement(\"canvas\");\n      canvasCtx = canvasService.getContext(\"2d\");\n    }\n    const image = n;\n    const imageSrc = image.currentSrc || image.getAttribute(\"src\") || \"<unknown-src>\";\n    const priorCrossOrigin = image.crossOrigin;\n    const recordInlineImage = () => {\n      image.removeEventListener(\"load\", recordInlineImage);\n      try {\n        canvasService.width = image.naturalWidth;\n        canvasService.height = image.naturalHeight;\n        canvasCtx.drawImage(image, 0, 0);\n        attributes2.rr_dataURL = canvasService.toDataURL(\n          dataURLOptions.type,\n          dataURLOptions.quality\n        );\n      } catch (err) {\n        if (image.crossOrigin !== \"anonymous\") {\n          image.crossOrigin = \"anonymous\";\n          if (image.complete && image.naturalWidth !== 0)\n            recordInlineImage();\n          else image.addEventListener(\"load\", recordInlineImage);\n          return;\n        } else {\n          console.warn(\n            `Cannot inline img src=${imageSrc}! Error: ${err}`\n          );\n        }\n      }\n      if (image.crossOrigin === \"anonymous\") {\n        priorCrossOrigin ? attributes2.crossOrigin = priorCrossOrigin : image.removeAttribute(\"crossorigin\");\n      }\n    };\n    if (image.complete && image.naturalWidth !== 0) recordInlineImage();\n    else image.addEventListener(\"load\", recordInlineImage);\n  }\n  if (tagName === \"audio\" || tagName === \"video\") {\n    attributes2.rr_mediaState = n.paused ? \"paused\" : \"played\";\n    attributes2.rr_mediaCurrentTime = n.currentTime;\n  }\n  if (!newlyAddedElement) {\n    if (n.scrollLeft) {\n      attributes2.rr_scrollLeft = n.scrollLeft;\n    }\n    if (n.scrollTop) {\n      attributes2.rr_scrollTop = n.scrollTop;\n    }\n  }\n  if (needBlock) {\n    const { width, height } = n.getBoundingClientRect();\n    attributes2 = {\n      class: attributes2.class,\n      rr_width: `${width}px`,\n      rr_height: `${height}px`\n    };\n  }\n  if (tagName === \"iframe\" && !keepIframeSrcFn(attributes2.src)) {\n    if (!needBlock && !getIFrameContentDocument$1(n)) {\n      attributes2.rr_src = attributes2.src;\n    }\n    delete attributes2.src;\n  }\n  let isCustomElement;\n  try {\n    if (customElements.get(tagName)) isCustomElement = true;\n  } catch (e) {\n  }\n  return {\n    type: NodeType$1.Element,\n    tagName,\n    attributes: attributes2,\n    childNodes: [],\n    isSVG: isSVGElement(n) || void 0,\n    needBlock,\n    rootId,\n    isCustom: isCustomElement\n  };\n}\nfunction lowerIfExists(maybeAttr) {\n  if (maybeAttr === void 0 || maybeAttr === null) {\n    return \"\";\n  } else {\n    return maybeAttr.toLowerCase();\n  }\n}\nfunction slimDOMExcluded(sn, slimDOMOptions) {\n  if (slimDOMOptions.comment && sn.type === NodeType$1.Comment) {\n    return true;\n  } else if (sn.type === NodeType$1.Element) {\n    if (slimDOMOptions.script && // script tag\n    (sn.tagName === \"script\" || // (module)preload link\n    sn.tagName === \"link\" && (sn.attributes.rel === \"preload\" || sn.attributes.rel === \"modulepreload\") || // prefetch link\n    sn.tagName === \"link\" && sn.attributes.rel === \"prefetch\" && typeof sn.attributes.href === \"string\" && extractFileExtension(sn.attributes.href) === \"js\")) {\n      return true;\n    } else if (slimDOMOptions.headFavicon && (sn.tagName === \"link\" && sn.attributes.rel === \"shortcut icon\" || sn.tagName === \"meta\" && (lowerIfExists(sn.attributes.name).match(\n      /^msapplication-tile(image|color)$/\n    ) || lowerIfExists(sn.attributes.name) === \"application-name\" || lowerIfExists(sn.attributes.rel) === \"icon\" || lowerIfExists(sn.attributes.rel) === \"apple-touch-icon\" || lowerIfExists(sn.attributes.rel) === \"shortcut icon\"))) {\n      return true;\n    } else if (sn.tagName === \"meta\") {\n      if (slimDOMOptions.headMetaDescKeywords && lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\n        return true;\n      } else if (slimDOMOptions.headMetaSocial && (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) || // og = opengraph (facebook)\n      lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) || lowerIfExists(sn.attributes.name) === \"pinterest\")) {\n        return true;\n      } else if (slimDOMOptions.headMetaRobots && (lowerIfExists(sn.attributes.name) === \"robots\" || lowerIfExists(sn.attributes.name) === \"googlebot\" || lowerIfExists(sn.attributes.name) === \"bingbot\")) {\n        return true;\n      } else if (slimDOMOptions.headMetaHttpEquiv && sn.attributes[\"http-equiv\"] !== void 0) {\n        return true;\n      } else if (slimDOMOptions.headMetaAuthorship && (lowerIfExists(sn.attributes.name) === \"author\" || lowerIfExists(sn.attributes.name) === \"generator\" || lowerIfExists(sn.attributes.name) === \"framework\" || lowerIfExists(sn.attributes.name) === \"publisher\" || lowerIfExists(sn.attributes.name) === \"progid\" || lowerIfExists(sn.attributes.property).match(/^article:/) || lowerIfExists(sn.attributes.property).match(/^product:/))) {\n        return true;\n      } else if (slimDOMOptions.headMetaVerification && (lowerIfExists(sn.attributes.name) === \"google-site-verification\" || lowerIfExists(sn.attributes.name) === \"yandex-verification\" || lowerIfExists(sn.attributes.name) === \"csrf-token\" || lowerIfExists(sn.attributes.name) === \"p:domain_verify\" || lowerIfExists(sn.attributes.name) === \"verify-v1\" || lowerIfExists(sn.attributes.name) === \"verification\" || lowerIfExists(sn.attributes.name) === \"shopify-checkout-api-token\")) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\nfunction serializeNodeWithId(n, options) {\n  const {\n    doc,\n    mirror,\n    blockClass,\n    blockSelector,\n    unblockSelector,\n    maskAllText,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    skipChild = false,\n    inlineStylesheet = true,\n    maskInputOptions = {},\n    maskAttributeFn,\n    maskTextFn,\n    maskInputFn,\n    slimDOMOptions,\n    dataURLOptions = {},\n    inlineImages = false,\n    recordCanvas = false,\n    onSerialize,\n    onIframeLoad,\n    iframeLoadTimeout = 5e3,\n    onBlockedImageLoad,\n    onStylesheetLoad,\n    stylesheetLoadTimeout = 5e3,\n    keepIframeSrcFn = () => false,\n    newlyAddedElement = false,\n    ignoreCSSAttributes\n  } = options;\n  let { preserveWhiteSpace = true } = options;\n  const _serializedNode = serializeNode(n, {\n    doc,\n    mirror,\n    blockClass,\n    blockSelector,\n    maskAllText,\n    unblockSelector,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    inlineStylesheet,\n    maskInputOptions,\n    maskAttributeFn,\n    maskTextFn,\n    maskInputFn,\n    dataURLOptions,\n    inlineImages,\n    recordCanvas,\n    keepIframeSrcFn,\n    newlyAddedElement,\n    ignoreCSSAttributes\n  });\n  if (!_serializedNode) {\n    console.warn(n, \"not serialized\");\n    return null;\n  }\n  let id;\n  if (mirror.hasNode(n)) {\n    id = mirror.getId(n);\n  } else if (slimDOMExcluded(_serializedNode, slimDOMOptions) || !preserveWhiteSpace && _serializedNode.type === NodeType$1.Text && !_serializedNode.isStyle && !_serializedNode.textContent.trim().length) {\n    id = IGNORED_NODE;\n  } else {\n    id = genId();\n  }\n  const serializedNode2 = Object.assign(_serializedNode, { id });\n  mirror.add(n, serializedNode2);\n  if (id === IGNORED_NODE) {\n    return null;\n  }\n  if (onSerialize) {\n    onSerialize(n);\n  }\n  let recordChild = !skipChild;\n  if (serializedNode2.type === NodeType$1.Element) {\n    recordChild = recordChild && !serializedNode2.needBlock;\n    const shadowRoot = n.shadowRoot;\n    if (shadowRoot && isNativeShadowDom(shadowRoot))\n      serializedNode2.isShadowHost = true;\n  }\n  if ((serializedNode2.type === NodeType$1.Document || serializedNode2.type === NodeType$1.Element) && recordChild) {\n    if (slimDOMOptions.headWhitespace && serializedNode2.type === NodeType$1.Element && serializedNode2.tagName === \"head\") {\n      preserveWhiteSpace = false;\n    }\n    const bypassOptions = {\n      doc,\n      mirror,\n      blockClass,\n      blockSelector,\n      maskAllText,\n      unblockSelector,\n      maskTextClass,\n      unmaskTextClass,\n      maskTextSelector,\n      unmaskTextSelector,\n      skipChild,\n      inlineStylesheet,\n      maskInputOptions,\n      maskAttributeFn,\n      maskTextFn,\n      maskInputFn,\n      slimDOMOptions,\n      dataURLOptions,\n      inlineImages,\n      recordCanvas,\n      preserveWhiteSpace,\n      onSerialize,\n      onIframeLoad,\n      iframeLoadTimeout,\n      onBlockedImageLoad,\n      onStylesheetLoad,\n      stylesheetLoadTimeout,\n      keepIframeSrcFn,\n      ignoreCSSAttributes\n    };\n    const childNodes = n.childNodes ? Array.from(n.childNodes) : [];\n    for (const childN of childNodes) {\n      const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n      if (serializedChildNode) {\n        serializedNode2.childNodes.push(serializedChildNode);\n      }\n    }\n    if (isElement$1(n) && n.shadowRoot) {\n      for (const childN of Array.from(n.shadowRoot.childNodes)) {\n        const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n        if (serializedChildNode) {\n          isNativeShadowDom(n.shadowRoot) && (serializedChildNode.isShadow = true);\n          serializedNode2.childNodes.push(serializedChildNode);\n        }\n      }\n    }\n  }\n  if (n.parentNode && isShadowRoot(n.parentNode) && isNativeShadowDom(n.parentNode)) {\n    serializedNode2.isShadow = true;\n  }\n  if (serializedNode2.type === NodeType$1.Element && serializedNode2.tagName === \"iframe\" && !serializedNode2.needBlock) {\n    onceIframeLoaded(\n      n,\n      () => {\n        const iframeDoc = getIFrameContentDocument$1(n);\n        if (iframeDoc && onIframeLoad) {\n          const serializedIframeNode = serializeNodeWithId(iframeDoc, {\n            doc: iframeDoc,\n            mirror,\n            blockClass,\n            blockSelector,\n            unblockSelector,\n            maskAllText,\n            maskTextClass,\n            unmaskTextClass,\n            maskTextSelector,\n            unmaskTextSelector,\n            skipChild: false,\n            inlineStylesheet,\n            maskInputOptions,\n            maskAttributeFn,\n            maskTextFn,\n            maskInputFn,\n            slimDOMOptions,\n            dataURLOptions,\n            inlineImages,\n            recordCanvas,\n            preserveWhiteSpace,\n            onSerialize,\n            onIframeLoad,\n            iframeLoadTimeout,\n            onStylesheetLoad,\n            stylesheetLoadTimeout,\n            keepIframeSrcFn,\n            ignoreCSSAttributes\n          });\n          if (serializedIframeNode) {\n            onIframeLoad(\n              n,\n              serializedIframeNode\n            );\n          }\n        }\n      },\n      iframeLoadTimeout\n    );\n  }\n  if (serializedNode2.type === NodeType$1.Element && serializedNode2.tagName === \"img\" && !n.complete && serializedNode2.needBlock) {\n    const image = n;\n    const updateImageDimensions = () => {\n      if (image.isConnected && !image.complete && onBlockedImageLoad) {\n        try {\n          const rect = image.getBoundingClientRect();\n          if (rect.width > 0 && rect.height > 0) {\n            onBlockedImageLoad(image, serializedNode2, rect);\n          }\n        } catch (error) {\n        }\n      }\n      image.removeEventListener(\"load\", updateImageDimensions);\n    };\n    if (image.isConnected) {\n      image.addEventListener(\"load\", updateImageDimensions);\n    }\n  }\n  if (serializedNode2.type === NodeType$1.Element && serializedNode2.tagName === \"link\" && typeof serializedNode2.attributes.rel === \"string\" && (serializedNode2.attributes.rel === \"stylesheet\" || serializedNode2.attributes.rel === \"preload\" && typeof serializedNode2.attributes.href === \"string\" && extractFileExtension(serializedNode2.attributes.href) === \"css\")) {\n    onceStylesheetLoaded(\n      n,\n      () => {\n        if (onStylesheetLoad) {\n          const serializedLinkNode = serializeNodeWithId(n, {\n            doc,\n            mirror,\n            blockClass,\n            blockSelector,\n            unblockSelector,\n            maskAllText,\n            maskTextClass,\n            unmaskTextClass,\n            maskTextSelector,\n            unmaskTextSelector,\n            skipChild: false,\n            inlineStylesheet,\n            maskInputOptions,\n            maskAttributeFn,\n            maskTextFn,\n            maskInputFn,\n            slimDOMOptions,\n            dataURLOptions,\n            inlineImages,\n            recordCanvas,\n            preserveWhiteSpace,\n            onSerialize,\n            onIframeLoad,\n            iframeLoadTimeout,\n            onStylesheetLoad,\n            stylesheetLoadTimeout,\n            keepIframeSrcFn,\n            ignoreCSSAttributes\n          });\n          if (serializedLinkNode) {\n            onStylesheetLoad(\n              n,\n              serializedLinkNode\n            );\n          }\n        }\n      },\n      stylesheetLoadTimeout\n    );\n  }\n  if (serializedNode2.type === NodeType$1.Element) {\n    delete serializedNode2.needBlock;\n  }\n  return serializedNode2;\n}\nfunction snapshot(n, options) {\n  const {\n    mirror = new Mirror(),\n    blockClass = \"rr-block\",\n    blockSelector = null,\n    unblockSelector = null,\n    maskAllText = false,\n    maskTextClass = \"rr-mask\",\n    unmaskTextClass = null,\n    maskTextSelector = null,\n    unmaskTextSelector = null,\n    inlineStylesheet = true,\n    inlineImages = false,\n    recordCanvas = false,\n    maskAllInputs = false,\n    maskAttributeFn,\n    maskTextFn,\n    maskInputFn,\n    slimDOM = false,\n    dataURLOptions,\n    preserveWhiteSpace,\n    onSerialize,\n    onIframeLoad,\n    iframeLoadTimeout,\n    onBlockedImageLoad,\n    onStylesheetLoad,\n    stylesheetLoadTimeout,\n    keepIframeSrcFn = () => false,\n    ignoreCSSAttributes = /* @__PURE__ */ new Set([])\n  } = options || {};\n  const maskInputOptions = maskAllInputs === true ? {\n    color: true,\n    date: true,\n    \"datetime-local\": true,\n    email: true,\n    month: true,\n    number: true,\n    range: true,\n    search: true,\n    tel: true,\n    text: true,\n    time: true,\n    url: true,\n    week: true,\n    textarea: true,\n    select: true\n  } : maskAllInputs === false ? {} : maskAllInputs;\n  const slimDOMOptions = slimDOM === true || slimDOM === \"all\" ? (\n    // if true: set of sensible options that should not throw away any information\n    {\n      script: true,\n      comment: true,\n      headFavicon: true,\n      headWhitespace: true,\n      headMetaDescKeywords: slimDOM === \"all\",\n      // destructive\n      headMetaSocial: true,\n      headMetaRobots: true,\n      headMetaHttpEquiv: true,\n      headMetaAuthorship: true,\n      headMetaVerification: true\n    }\n  ) : slimDOM === false ? {} : slimDOM;\n  return serializeNodeWithId(n, {\n    doc: n,\n    mirror,\n    blockClass,\n    blockSelector,\n    unblockSelector,\n    maskAllText,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    skipChild: false,\n    inlineStylesheet,\n    maskInputOptions,\n    maskAttributeFn,\n    maskTextFn,\n    maskInputFn,\n    slimDOMOptions,\n    dataURLOptions,\n    inlineImages,\n    recordCanvas,\n    preserveWhiteSpace,\n    onSerialize,\n    onIframeLoad,\n    iframeLoadTimeout,\n    onBlockedImageLoad,\n    onStylesheetLoad,\n    stylesheetLoadTimeout,\n    keepIframeSrcFn,\n    newlyAddedElement: false,\n    ignoreCSSAttributes\n  });\n}\nfunction on(type, fn, target = document) {\n  const options = { capture: true, passive: true };\n  target.addEventListener(type, fn, options);\n  return () => target.removeEventListener(type, fn, options);\n}\nconst DEPARTED_MIRROR_ACCESS_WARNING = \"Please stop import mirror directly. Instead of that,\\r\\nnow you can use replayer.getMirror() to access the mirror instance of a replayer,\\r\\nor you can use record.mirror to access the mirror instance during recording.\";\nlet _mirror = {\n  map: {},\n  getId() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n    return -1;\n  },\n  getNode() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n    return null;\n  },\n  removeNodeFromMap() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n  },\n  has() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n    return false;\n  },\n  reset() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n  }\n};\nif (typeof window !== \"undefined\" && window.Proxy && window.Reflect) {\n  _mirror = new Proxy(_mirror, {\n    get(target, prop, receiver) {\n      if (prop === \"map\") {\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction throttle$1(func, wait, options = {}) {\n  let timeout = null;\n  let previous = 0;\n  return function(...args) {\n    const now = Date.now();\n    if (!previous && options.leading === false) {\n      previous = now;\n    }\n    const remaining = wait - (now - previous);\n    const context = this;\n    if (remaining <= 0 || remaining > wait) {\n      if (timeout) {\n        clearTimeout$2(timeout);\n        timeout = null;\n      }\n      previous = now;\n      func.apply(context, args);\n    } else if (!timeout && options.trailing !== false) {\n      timeout = setTimeout$2(() => {\n        previous = options.leading === false ? 0 : Date.now();\n        timeout = null;\n        func.apply(context, args);\n      }, remaining);\n    }\n  };\n}\nfunction hookSetter(target, key, d, isRevoked, win = window) {\n  const original = win.Object.getOwnPropertyDescriptor(target, key);\n  win.Object.defineProperty(\n    target,\n    key,\n    isRevoked ? d : {\n      set(value) {\n        setTimeout$2(() => {\n          d.set.call(this, value);\n        }, 0);\n        if (original && original.set) {\n          original.set.call(this, value);\n        }\n      }\n    }\n  );\n  return () => hookSetter(target, key, original || {}, true);\n}\nfunction patch(source, name, replacement) {\n  try {\n    if (!(name in source)) {\n      return () => {\n      };\n    }\n    const original = source[name];\n    const wrapped = replacement(original);\n    if (typeof wrapped === \"function\") {\n      wrapped.prototype = wrapped.prototype || {};\n      Object.defineProperties(wrapped, {\n        __rrweb_original__: {\n          enumerable: false,\n          value: original\n        }\n      });\n    }\n    source[name] = wrapped;\n    return () => {\n      source[name] = original;\n    };\n  } catch {\n    return () => {\n    };\n  }\n}\nlet nowTimestamp = Date.now;\nif (!/* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString())) {\n  nowTimestamp = () => (/* @__PURE__ */ new Date()).getTime();\n}\nfunction getWindowScroll(win) {\n  const doc = win.document;\n  return {\n    left: doc.scrollingElement ? doc.scrollingElement.scrollLeft : win.pageXOffset !== void 0 ? win.pageXOffset : doc?.documentElement.scrollLeft || doc?.body?.parentElement?.scrollLeft || doc?.body?.scrollLeft || 0,\n    top: doc.scrollingElement ? doc.scrollingElement.scrollTop : win.pageYOffset !== void 0 ? win.pageYOffset : doc?.documentElement.scrollTop || doc?.body?.parentElement?.scrollTop || doc?.body?.scrollTop || 0\n  };\n}\nfunction getWindowHeight() {\n  return window.innerHeight || document.documentElement && document.documentElement.clientHeight || document.body && document.body.clientHeight;\n}\nfunction getWindowWidth() {\n  return window.innerWidth || document.documentElement && document.documentElement.clientWidth || document.body && document.body.clientWidth;\n}\nfunction closestElementOfNode$1(node) {\n  if (!node) {\n    return null;\n  }\n  try {\n    const el = node.nodeType === node.ELEMENT_NODE ? node : node.parentElement;\n    return el;\n  } catch (error) {\n    return null;\n  }\n}\nfunction isBlocked(node, blockClass, blockSelector, unblockSelector, checkAncestors) {\n  if (!node) {\n    return false;\n  }\n  const el = closestElementOfNode$1(node);\n  if (!el) {\n    return false;\n  }\n  const blockedPredicate = createMatchPredicate(blockClass, blockSelector);\n  if (!checkAncestors) {\n    const isUnblocked = unblockSelector && el.matches(unblockSelector);\n    return blockedPredicate(el) && !isUnblocked;\n  }\n  const blockDistance = distanceToMatch(el, blockedPredicate);\n  let unblockDistance = -1;\n  if (blockDistance < 0) {\n    return false;\n  }\n  if (unblockSelector) {\n    unblockDistance = distanceToMatch(\n      el,\n      createMatchPredicate(null, unblockSelector)\n    );\n  }\n  if (blockDistance > -1 && unblockDistance < 0) {\n    return true;\n  }\n  return blockDistance < unblockDistance;\n}\nfunction isSerialized(n, mirror) {\n  return mirror.getId(n) !== -1;\n}\nfunction isIgnored(n, mirror) {\n  return mirror.getId(n) === IGNORED_NODE;\n}\nfunction isAncestorRemoved(target, mirror) {\n  if (isShadowRoot(target)) {\n    return false;\n  }\n  const id = mirror.getId(target);\n  if (!mirror.has(id)) {\n    return true;\n  }\n  if (target.parentNode && target.parentNode.nodeType === target.DOCUMENT_NODE) {\n    return false;\n  }\n  if (!target.parentNode) {\n    return true;\n  }\n  return isAncestorRemoved(target.parentNode, mirror);\n}\nfunction legacy_isTouchEvent(event) {\n  return Boolean(event.changedTouches);\n}\nfunction polyfill(win = window) {\n  if (\"NodeList\" in win && !win.NodeList.prototype.forEach) {\n    win.NodeList.prototype.forEach = Array.prototype.forEach;\n  }\n  if (\"DOMTokenList\" in win && !win.DOMTokenList.prototype.forEach) {\n    win.DOMTokenList.prototype.forEach = Array.prototype.forEach;\n  }\n  if (!Node.prototype.contains) {\n    Node.prototype.contains = (...args) => {\n      let node = args[0];\n      if (!(0 in args)) {\n        throw new TypeError(\"1 argument is required\");\n      }\n      do {\n        if (this === node) {\n          return true;\n        }\n      } while (node = node && node.parentNode);\n      return false;\n    };\n  }\n}\nfunction isSerializedIframe(n, mirror) {\n  return Boolean(n.nodeName === \"IFRAME\" && mirror.getMeta(n));\n}\nfunction isSerializedStylesheet(n, mirror) {\n  return Boolean(\n    n.nodeName === \"LINK\" && n.nodeType === n.ELEMENT_NODE && n.getAttribute && n.getAttribute(\"rel\") === \"stylesheet\" && mirror.getMeta(n)\n  );\n}\nfunction hasShadowRoot(n) {\n  return Boolean(n?.shadowRoot);\n}\nclass StyleSheetMirror {\n  constructor() {\n    this.id = 1;\n    this.styleIDMap = /* @__PURE__ */ new WeakMap();\n    this.idStyleMap = /* @__PURE__ */ new Map();\n  }\n  getId(stylesheet) {\n    return this.styleIDMap.get(stylesheet) ?? -1;\n  }\n  has(stylesheet) {\n    return this.styleIDMap.has(stylesheet);\n  }\n  /**\n   * @returns If the stylesheet is in the mirror, returns the id of the stylesheet. If not, return the new assigned id.\n   */\n  add(stylesheet, id) {\n    if (this.has(stylesheet)) return this.getId(stylesheet);\n    let newId;\n    if (id === void 0) {\n      newId = this.id++;\n    } else newId = id;\n    this.styleIDMap.set(stylesheet, newId);\n    this.idStyleMap.set(newId, stylesheet);\n    return newId;\n  }\n  getStyle(id) {\n    return this.idStyleMap.get(id) || null;\n  }\n  reset() {\n    this.styleIDMap = /* @__PURE__ */ new WeakMap();\n    this.idStyleMap = /* @__PURE__ */ new Map();\n    this.id = 1;\n  }\n  generateId() {\n    return this.id++;\n  }\n}\nfunction getShadowHost(n) {\n  let shadowHost = null;\n  if (n.getRootNode?.()?.nodeType === Node.DOCUMENT_FRAGMENT_NODE && n.getRootNode().host)\n    shadowHost = n.getRootNode().host;\n  return shadowHost;\n}\nfunction getRootShadowHost(n) {\n  let rootShadowHost = n;\n  let shadowHost;\n  while (shadowHost = getShadowHost(rootShadowHost))\n    rootShadowHost = shadowHost;\n  return rootShadowHost;\n}\nfunction shadowHostInDom(n) {\n  const doc = n.ownerDocument;\n  if (!doc) return false;\n  const shadowHost = getRootShadowHost(n);\n  return doc.contains(shadowHost);\n}\nfunction inDom(n) {\n  const doc = n.ownerDocument;\n  if (!doc) return false;\n  return doc.contains(n) || shadowHostInDom(n);\n}\nconst cachedImplementations = {};\nfunction getImplementation(name) {\n  const cached = cachedImplementations[name];\n  if (cached) {\n    return cached;\n  }\n  const windowImpl = window[name].bind(window);\n  let impl = windowImpl;\n  const document2 = window.document;\n  if (document2 && typeof document2.createElement === \"function\") {\n    try {\n      const sandbox = document2.createElement(\"iframe\");\n      sandbox.hidden = true;\n      document2.head.appendChild(sandbox);\n      const contentWindow = sandbox.contentWindow;\n      if (contentWindow && contentWindow[name]) {\n        const sandboxImpl = contentWindow[name].bind(window);\n        impl = (...args) => {\n          try {\n            return sandboxImpl(...args);\n          } catch {\n            cachedImplementations[name] = windowImpl;\n            return windowImpl(...args);\n          }\n        };\n      }\n      document2.head.removeChild(sandbox);\n    } catch (e) {\n    }\n  }\n  return cachedImplementations[name] = impl;\n}\nfunction onRequestAnimationFrame(...rest) {\n  return getImplementation(\"requestAnimationFrame\")(...rest);\n}\nfunction setTimeout$2(...rest) {\n  return getImplementation(\"setTimeout\")(...rest);\n}\nfunction clearTimeout$2(...rest) {\n  return getImplementation(\"clearTimeout\")(...rest);\n}\nvar EventType = /* @__PURE__ */ ((EventType2) => {\n  EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n  EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n  EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n  EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n  EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n  EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n  EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n  return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n  IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n  IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n  IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n  IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n  IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n  IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n  IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n  IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n  IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n  IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n  IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n  IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n  IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n  IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n  IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n  IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n  IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n  return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n  MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n  MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n  MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n  MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n  MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n  MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n  MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n  MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n  MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n  MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n  MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n  return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n  PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n  PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n  PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n  return PointerTypes2;\n})(PointerTypes || {});\nvar MediaInteractions = /* @__PURE__ */ ((MediaInteractions2) => {\n  MediaInteractions2[MediaInteractions2[\"Play\"] = 0] = \"Play\";\n  MediaInteractions2[MediaInteractions2[\"Pause\"] = 1] = \"Pause\";\n  MediaInteractions2[MediaInteractions2[\"Seeked\"] = 2] = \"Seeked\";\n  MediaInteractions2[MediaInteractions2[\"VolumeChange\"] = 3] = \"VolumeChange\";\n  MediaInteractions2[MediaInteractions2[\"RateChange\"] = 4] = \"RateChange\";\n  return MediaInteractions2;\n})(MediaInteractions || {});\nlet errorHandler;\nfunction registerErrorHandler(handler) {\n  errorHandler = handler;\n}\nfunction unregisterErrorHandler() {\n  errorHandler = void 0;\n}\nconst callbackWrapper = (cb) => {\n  if (!errorHandler) {\n    return cb;\n  }\n  const rrwebWrapped = ((...rest) => {\n    try {\n      return cb(...rest);\n    } catch (error) {\n      if (errorHandler && errorHandler(error) === true) {\n        return () => {\n        };\n      }\n      throw error;\n    }\n  });\n  return rrwebWrapped;\n};\nvar chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar lookup = typeof Uint8Array === \"undefined\" ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n  lookup[chars.charCodeAt(i)] = i;\n}\nclass CanvasManagerNoop {\n  reset() {\n  }\n  freeze() {\n  }\n  unfreeze() {\n  }\n  lock() {\n  }\n  unlock() {\n  }\n  snapshot() {\n  }\n  addWindow() {\n  }\n  addShadowRoot() {\n  }\n  resetShadowRoots() {\n  }\n}\n\nfunction getIFrameContentDocument(iframe) {\n  try {\n    return iframe.contentDocument;\n  } catch (e2) {\n  }\n}\nfunction getIFrameContentWindow(iframe) {\n  try {\n    return iframe.contentWindow;\n  } catch (e2) {\n  }\n}\nclass StyleDeclarationParser {\n  constructor(doc) {\n    this.doc = doc;\n    this.unattachedDoc = null;\n  }\n  parse(styleText) {\n    return this.parseWithConstructableStylesheet(styleText) || this.parseWithDetachedElement(styleText);\n  }\n  parseWithConstructableStylesheet(styleText) {\n    if (typeof CSSStyleSheet === \"undefined\" || typeof CSSStyleSheet.prototype.replaceSync !== \"function\") {\n      return null;\n    }\n    try {\n      const sheet = new CSSStyleSheet();\n      sheet.replaceSync(`x { ${styleText} }`);\n      const rule = sheet.cssRules[0];\n      if (!rule || rule.type !== CSSRule.STYLE_RULE) {\n        return null;\n      }\n      return rule.style;\n    } catch {\n      return null;\n    }\n  }\n  parseWithDetachedElement(styleText) {\n    const old = this.getUnattachedDoc().createElement(\"span\");\n    old.setAttribute(\"style\", styleText);\n    return old.style;\n  }\n  getUnattachedDoc() {\n    if (!this.unattachedDoc) {\n      try {\n        this.unattachedDoc = document.implementation.createHTMLDocument();\n      } catch {\n        this.unattachedDoc = this.doc;\n      }\n    }\n    return this.unattachedDoc;\n  }\n}\nfunction isNodeInLinkedList(n2) {\n  return \"__ln\" in n2;\n}\nclass DoubleLinkedList {\n  constructor() {\n    this.length = 0;\n    this.head = null;\n    this.tail = null;\n  }\n  get(position) {\n    if (position >= this.length) {\n      throw new Error(\"Position outside of list range\");\n    }\n    let current = this.head;\n    for (let index = 0; index < position; index++) {\n      current = current?.next || null;\n    }\n    return current;\n  }\n  addNode(n2) {\n    const node = {\n      value: n2,\n      previous: null,\n      next: null\n    };\n    n2.__ln = node;\n    if (n2.previousSibling && isNodeInLinkedList(n2.previousSibling)) {\n      const current = n2.previousSibling.__ln.next;\n      node.next = current;\n      node.previous = n2.previousSibling.__ln;\n      n2.previousSibling.__ln.next = node;\n      if (current) {\n        current.previous = node;\n      }\n    } else if (n2.nextSibling && isNodeInLinkedList(n2.nextSibling) && n2.nextSibling.__ln.previous) {\n      const current = n2.nextSibling.__ln.previous;\n      node.previous = current;\n      node.next = n2.nextSibling.__ln;\n      n2.nextSibling.__ln.previous = node;\n      if (current) {\n        current.next = node;\n      }\n    } else {\n      if (this.head) {\n        this.head.previous = node;\n      }\n      node.next = this.head;\n      this.head = node;\n    }\n    if (node.next === null) {\n      this.tail = node;\n    }\n    this.length++;\n  }\n  removeNode(n2) {\n    const current = n2.__ln;\n    if (!this.head) {\n      return;\n    }\n    if (!current.previous) {\n      this.head = current.next;\n      if (this.head) {\n        this.head.previous = null;\n      } else {\n        this.tail = null;\n      }\n    } else {\n      current.previous.next = current.next;\n      if (current.next) {\n        current.next.previous = current.previous;\n      } else {\n        this.tail = current.previous;\n      }\n    }\n    if (n2.__ln) {\n      delete n2.__ln;\n    }\n    this.length--;\n  }\n}\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\nclass MutationBuffer {\n  constructor() {\n    this.frozen = false;\n    this.locked = false;\n    this.texts = [];\n    this.attributes = [];\n    this.attributeMap = /* @__PURE__ */ new WeakMap();\n    this.removes = [];\n    this.mapRemoves = [];\n    this.movedMap = {};\n    this.addedSet = /* @__PURE__ */ new Set();\n    this.movedSet = /* @__PURE__ */ new Set();\n    this.droppedSet = /* @__PURE__ */ new Set();\n    this.processMutations = (mutations) => {\n      mutations.forEach(this.processMutation);\n      this.emit();\n    };\n    this.emit = () => {\n      if (this.frozen || this.locked) {\n        return;\n      }\n      const adds = [];\n      const addedIds = /* @__PURE__ */ new Set();\n      const addList = new DoubleLinkedList();\n      const getNextId = (n2) => {\n        let ns = n2;\n        let nextId = IGNORED_NODE;\n        while (nextId === IGNORED_NODE) {\n          ns = ns && ns.nextSibling;\n          nextId = ns && this.mirror.getId(ns);\n        }\n        return nextId;\n      };\n      const pushAdd = (n2) => {\n        if (!n2.parentNode || !inDom(n2)) {\n          return;\n        }\n        const parentId = isShadowRoot(n2.parentNode) ? this.mirror.getId(getShadowHost(n2)) : this.mirror.getId(n2.parentNode);\n        const nextId = getNextId(n2);\n        if (parentId === -1 || nextId === -1) {\n          return addList.addNode(n2);\n        }\n        const sn = serializeNodeWithId(n2, {\n          doc: this.doc,\n          mirror: this.mirror,\n          blockClass: this.blockClass,\n          blockSelector: this.blockSelector,\n          maskAllText: this.maskAllText,\n          unblockSelector: this.unblockSelector,\n          maskTextClass: this.maskTextClass,\n          unmaskTextClass: this.unmaskTextClass,\n          maskTextSelector: this.maskTextSelector,\n          unmaskTextSelector: this.unmaskTextSelector,\n          skipChild: true,\n          newlyAddedElement: true,\n          inlineStylesheet: this.inlineStylesheet,\n          maskInputOptions: this.maskInputOptions,\n          maskAttributeFn: this.maskAttributeFn,\n          maskTextFn: this.maskTextFn,\n          maskInputFn: this.maskInputFn,\n          slimDOMOptions: this.slimDOMOptions,\n          dataURLOptions: this.dataURLOptions,\n          recordCanvas: this.recordCanvas,\n          inlineImages: this.inlineImages,\n          onSerialize: (currentN) => {\n            if (isSerializedIframe(currentN, this.mirror) && !isBlocked(\n              currentN,\n              this.blockClass,\n              this.blockSelector,\n              this.unblockSelector,\n              false\n            )) {\n              this.iframeManager.addIframe(currentN);\n            }\n            if (isSerializedStylesheet(currentN, this.mirror)) {\n              this.stylesheetManager.trackLinkElement(\n                currentN\n              );\n            }\n            if (hasShadowRoot(n2)) {\n              this.shadowDomManager.addShadowRoot(n2.shadowRoot, this.doc);\n            }\n          },\n          onIframeLoad: (iframe, childSn) => {\n            if (isBlocked(\n              iframe,\n              this.blockClass,\n              this.blockSelector,\n              this.unblockSelector,\n              false\n            )) {\n              return;\n            }\n            this.iframeManager.attachIframe(iframe, childSn);\n            const contentWindow = getIFrameContentWindow(iframe);\n            if (contentWindow) {\n              this.canvasManager.addWindow(contentWindow);\n            }\n            this.shadowDomManager.observeAttachShadow(iframe);\n          },\n          onStylesheetLoad: (link, childSn) => {\n            this.stylesheetManager.attachLinkElement(link, childSn);\n          },\n          onBlockedImageLoad: (_imageEl, serializedNode, { width, height }) => {\n            this.mutationCb({\n              adds: [],\n              removes: [],\n              texts: [],\n              attributes: [\n                {\n                  id: serializedNode.id,\n                  attributes: {\n                    style: {\n                      width: `${width}px`,\n                      height: `${height}px`\n                    }\n                  }\n                }\n              ]\n            });\n          },\n          ignoreCSSAttributes: this.ignoreCSSAttributes\n        });\n        if (sn) {\n          adds.push({\n            parentId,\n            nextId,\n            node: sn\n          });\n          addedIds.add(sn.id);\n        }\n      };\n      while (this.mapRemoves.length) {\n        this.mirror.removeNodeFromMap(this.mapRemoves.shift());\n      }\n      for (const n2 of this.movedSet) {\n        if (isParentRemoved(this.removes, n2, this.mirror) && !this.movedSet.has(n2.parentNode)) {\n          continue;\n        }\n        pushAdd(n2);\n      }\n      for (const n2 of this.addedSet) {\n        if (!isAncestorInSet(this.droppedSet, n2) && !isParentRemoved(this.removes, n2, this.mirror)) {\n          pushAdd(n2);\n        } else if (isAncestorInSet(this.movedSet, n2)) {\n          pushAdd(n2);\n        } else {\n          this.droppedSet.add(n2);\n        }\n      }\n      let candidate = null;\n      while (addList.length) {\n        let node = null;\n        if (candidate) {\n          const parentId = this.mirror.getId(candidate.value.parentNode);\n          const nextId = getNextId(candidate.value);\n          if (parentId !== -1 && nextId !== -1) {\n            node = candidate;\n          }\n        }\n        if (!node) {\n          let tailNode = addList.tail;\n          while (tailNode) {\n            const _node = tailNode;\n            tailNode = tailNode.previous;\n            if (_node) {\n              const parentId = this.mirror.getId(_node.value.parentNode);\n              const nextId = getNextId(_node.value);\n              if (nextId === -1) continue;\n              else if (parentId !== -1) {\n                node = _node;\n                break;\n              } else {\n                const unhandledNode = _node.value;\n                if (unhandledNode.parentNode && unhandledNode.parentNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n                  const shadowHost = unhandledNode.parentNode.host;\n                  const parentId2 = this.mirror.getId(shadowHost);\n                  if (parentId2 !== -1) {\n                    node = _node;\n                    break;\n                  }\n                }\n              }\n            }\n          }\n        }\n        if (!node) {\n          while (addList.head) {\n            addList.removeNode(addList.head.value);\n          }\n          break;\n        }\n        candidate = node.previous;\n        addList.removeNode(node.value);\n        pushAdd(node.value);\n      }\n      const payload = {\n        texts: this.texts.map((text) => ({\n          id: this.mirror.getId(text.node),\n          value: text.value\n        })).filter((text) => !addedIds.has(text.id)).filter((text) => this.mirror.has(text.id)),\n        attributes: this.attributes.map((attribute) => {\n          const { attributes } = attribute;\n          if (typeof attributes.style === \"string\") {\n            const diffAsStr = JSON.stringify(attribute.styleDiff);\n            const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\n            if (diffAsStr.length < attributes.style.length) {\n              if ((diffAsStr + unchangedAsStr).split(\"var(\").length === attributes.style.split(\"var(\").length) {\n                attributes.style = attribute.styleDiff;\n              }\n            }\n          }\n          return {\n            id: this.mirror.getId(attribute.node),\n            attributes\n          };\n        }).filter((attribute) => !addedIds.has(attribute.id)).filter((attribute) => this.mirror.has(attribute.id)),\n        removes: this.removes,\n        adds\n      };\n      if (!payload.texts.length && !payload.attributes.length && !payload.removes.length && !payload.adds.length) {\n        return;\n      }\n      this.texts = [];\n      this.attributes = [];\n      this.attributeMap = /* @__PURE__ */ new WeakMap();\n      this.removes = [];\n      this.addedSet = /* @__PURE__ */ new Set();\n      this.movedSet = /* @__PURE__ */ new Set();\n      this.droppedSet = /* @__PURE__ */ new Set();\n      this.movedMap = {};\n      this.mutationCb(payload);\n    };\n    this.processMutation = (m) => {\n      if (isIgnored(m.target, this.mirror)) {\n        return;\n      }\n      switch (m.type) {\n        case \"characterData\": {\n          const value = m.target.textContent;\n          if (!isBlocked(\n            m.target,\n            this.blockClass,\n            this.blockSelector,\n            this.unblockSelector,\n            false\n          ) && value !== m.oldValue) {\n            this.texts.push({\n              value: needMaskingText(\n                m.target,\n                this.maskTextClass,\n                this.maskTextSelector,\n                this.unmaskTextClass,\n                this.unmaskTextSelector,\n                this.maskAllText\n              ) && value ? this.maskTextFn ? this.maskTextFn(value, closestElementOfNode$1(m.target)) : value.replace(/[\\S]/g, \"*\") : value,\n              node: m.target\n            });\n          }\n          break;\n        }\n        case \"attributes\": {\n          const target = m.target;\n          let attributeName = m.attributeName;\n          let value = m.target.getAttribute(attributeName);\n          if (attributeName === \"value\") {\n            const type = getInputType(target);\n            const tagName = target.tagName;\n            value = getInputValue(target, tagName, type);\n            const isInputMasked = shouldMaskInput({\n              maskInputOptions: this.maskInputOptions,\n              tagName,\n              type\n            });\n            const forceMask = needMaskingText(\n              m.target,\n              this.maskTextClass,\n              this.maskTextSelector,\n              this.unmaskTextClass,\n              this.unmaskTextSelector,\n              isInputMasked\n            );\n            value = maskInputValue({\n              isMasked: forceMask,\n              element: target,\n              value,\n              maskInputFn: this.maskInputFn\n            });\n          }\n          if (isBlocked(\n            m.target,\n            this.blockClass,\n            this.blockSelector,\n            this.unblockSelector,\n            false\n          ) || value === m.oldValue) {\n            return;\n          }\n          let item = this.attributeMap.get(m.target);\n          if (target.tagName === \"IFRAME\" && attributeName === \"src\" && !this.keepIframeSrcFn(value)) {\n            const iframeDoc = getIFrameContentDocument(\n              target\n            );\n            if (!iframeDoc) {\n              attributeName = \"rr_src\";\n            } else {\n              return;\n            }\n          }\n          if (!item) {\n            item = {\n              node: m.target,\n              attributes: {},\n              styleDiff: {},\n              _unchangedStyles: {}\n            };\n            this.attributes.push(item);\n            this.attributeMap.set(m.target, item);\n          }\n          if (attributeName === \"type\" && target.tagName === \"INPUT\" && (m.oldValue || \"\").toLowerCase() === \"password\") {\n            target.setAttribute(\"data-rr-is-password\", \"true\");\n          }\n          if (!ignoreAttribute(target.tagName, attributeName)) {\n            item.attributes[attributeName] = transformAttribute(\n              this.doc,\n              toLowerCase(target.tagName),\n              toLowerCase(attributeName),\n              value,\n              target,\n              this.maskAttributeFn\n            );\n            if (attributeName === \"style\") {\n              const oldStyle = m.oldValue ? this.styleDeclarationParser.parse(m.oldValue) : null;\n              for (const pname of Array.from(target.style)) {\n                const newValue = target.style.getPropertyValue(pname);\n                const newPriority = target.style.getPropertyPriority(pname);\n                if (newValue !== (oldStyle?.getPropertyValue(pname) || \"\") || newPriority !== (oldStyle?.getPropertyPriority(pname) || \"\")) {\n                  if (newPriority === \"\") {\n                    item.styleDiff[pname] = newValue;\n                  } else {\n                    item.styleDiff[pname] = [newValue, newPriority];\n                  }\n                } else {\n                  item._unchangedStyles[pname] = [newValue, newPriority];\n                }\n              }\n              if (oldStyle) {\n                for (const pname of Array.from(oldStyle)) {\n                  if (target.style.getPropertyValue(pname) === \"\") {\n                    item.styleDiff[pname] = false;\n                  }\n                }\n              }\n            }\n          }\n          break;\n        }\n        case \"childList\": {\n          if (isBlocked(\n            m.target,\n            this.blockClass,\n            this.blockSelector,\n            this.unblockSelector,\n            true\n          )) {\n            return;\n          }\n          m.addedNodes.forEach((n2) => this.genAdds(n2, m.target));\n          m.removedNodes.forEach((n2) => {\n            const nodeId = this.mirror.getId(n2);\n            const parentId = isShadowRoot(m.target) ? this.mirror.getId(m.target.host) : this.mirror.getId(m.target);\n            if (isBlocked(\n              m.target,\n              this.blockClass,\n              this.blockSelector,\n              this.unblockSelector,\n              false\n            ) || isIgnored(n2, this.mirror) || !isSerialized(n2, this.mirror)) {\n              return;\n            }\n            if (this.addedSet.has(n2)) {\n              deepDelete(this.addedSet, n2);\n              this.droppedSet.add(n2);\n            } else if (this.addedSet.has(m.target) && nodeId === -1) ;\n            else if (isAncestorRemoved(m.target, this.mirror)) ;\n            else if (this.movedSet.has(n2) && this.movedMap[moveKey(nodeId, parentId)]) {\n              deepDelete(this.movedSet, n2);\n            } else {\n              this.removes.push({\n                parentId,\n                id: nodeId,\n                isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target) ? true : void 0\n              });\n            }\n            this.mapRemoves.push(n2);\n          });\n          break;\n        }\n      }\n    };\n    this.genAdds = (n2, target) => {\n      if (this.processedNodeManager.inOtherBuffer(n2, this)) return;\n      if (this.addedSet.has(n2) || this.movedSet.has(n2)) return;\n      if (this.mirror.hasNode(n2)) {\n        if (isIgnored(n2, this.mirror)) {\n          return;\n        }\n        this.movedSet.add(n2);\n        let targetId = null;\n        if (target && this.mirror.hasNode(target)) {\n          targetId = this.mirror.getId(target);\n        }\n        if (targetId && targetId !== -1) {\n          this.movedMap[moveKey(this.mirror.getId(n2), targetId)] = true;\n        }\n      } else {\n        this.addedSet.add(n2);\n        this.droppedSet.delete(n2);\n      }\n      if (!isBlocked(\n        n2,\n        this.blockClass,\n        this.blockSelector,\n        this.unblockSelector,\n        false\n      )) {\n        if (n2.childNodes) {\n          n2.childNodes.forEach((childN) => this.genAdds(childN));\n        }\n        if (hasShadowRoot(n2)) {\n          n2.shadowRoot.childNodes.forEach((childN) => {\n            this.processedNodeManager.add(childN, this);\n            this.genAdds(childN, n2);\n          });\n        }\n      }\n    };\n  }\n  init(options) {\n    [\n      \"mutationCb\",\n      \"blockClass\",\n      \"blockSelector\",\n      \"unblockSelector\",\n      \"maskAllText\",\n      \"maskTextClass\",\n      \"unmaskTextClass\",\n      \"maskTextSelector\",\n      \"unmaskTextSelector\",\n      \"inlineStylesheet\",\n      \"maskInputOptions\",\n      \"maskAttributeFn\",\n      \"maskTextFn\",\n      \"maskInputFn\",\n      \"keepIframeSrcFn\",\n      \"recordCanvas\",\n      \"inlineImages\",\n      \"slimDOMOptions\",\n      \"dataURLOptions\",\n      \"doc\",\n      \"mirror\",\n      \"iframeManager\",\n      \"stylesheetManager\",\n      \"shadowDomManager\",\n      \"canvasManager\",\n      \"processedNodeManager\",\n      \"ignoreCSSAttributes\"\n    ].forEach((key) => {\n      this[key] = options[key];\n    });\n    this.styleDeclarationParser = new StyleDeclarationParser(this.doc);\n  }\n  freeze() {\n    this.frozen = true;\n    this.canvasManager.freeze();\n  }\n  unfreeze() {\n    this.frozen = false;\n    this.canvasManager.unfreeze();\n    this.emit();\n  }\n  isFrozen() {\n    return this.frozen;\n  }\n  lock() {\n    this.locked = true;\n    this.canvasManager.lock();\n  }\n  unlock() {\n    this.locked = false;\n    this.canvasManager.unlock();\n    this.emit();\n  }\n  reset() {\n    this.shadowDomManager.reset();\n    this.canvasManager.reset();\n  }\n}\nfunction deepDelete(addsSet, n2) {\n  addsSet.delete(n2);\n  n2.childNodes?.forEach((childN) => deepDelete(addsSet, childN));\n}\nfunction isParentRemoved(removes, n2, mirror2) {\n  if (removes.length === 0) return false;\n  return _isParentRemoved(removes, n2, mirror2);\n}\nfunction _isParentRemoved(removes, n2, mirror2) {\n  let node = n2.parentNode;\n  while (node) {\n    const parentId = mirror2.getId(node);\n    if (removes.some((r2) => r2.id === parentId)) {\n      return true;\n    }\n    node = node.parentNode;\n  }\n  return false;\n}\nfunction isAncestorInSet(set, n2) {\n  if (set.size === 0) return false;\n  return _isAncestorInSet(set, n2);\n}\nfunction _isAncestorInSet(set, n2) {\n  const { parentNode } = n2;\n  if (!parentNode) {\n    return false;\n  }\n  if (set.has(parentNode)) {\n    return true;\n  }\n  return _isAncestorInSet(set, parentNode);\n}\nconst mutationBuffers = [];\nfunction getEventTarget(event) {\n  try {\n    if (\"composedPath\" in event) {\n      const path = event.composedPath();\n      if (path.length) {\n        return path[0];\n      }\n    } else if (\"path\" in event && event.path.length) {\n      return event.path[0];\n    }\n  } catch {\n  }\n  return event && event.target;\n}\nfunction initMutationObserver(options, rootEl) {\n  const mutationBuffer = new MutationBuffer();\n  mutationBuffers.push(mutationBuffer);\n  mutationBuffer.init(options);\n  let mutationObserverCtor = window.MutationObserver || /**\n  * Some websites may disable MutationObserver by removing it from the window object.\n  * If someone is using rrweb to build a browser extention or things like it, they\n  * could not change the website's code but can have an opportunity to inject some\n  * code before the website executing its JS logic.\n  * Then they can do this to store the native MutationObserver:\n  * window.__rrMutationObserver = MutationObserver\n  */\n  window.__rrMutationObserver;\n  const angularZoneSymbol = window?.Zone?.__symbol__?.(\"MutationObserver\");\n  if (angularZoneSymbol && window[angularZoneSymbol]) {\n    mutationObserverCtor = window[angularZoneSymbol];\n  }\n  const observer = new mutationObserverCtor(\n    callbackWrapper((mutations) => {\n      if (options.onMutation && options.onMutation(mutations) === false) {\n        return;\n      }\n      mutationBuffer.processMutations.bind(mutationBuffer)(mutations);\n    })\n  );\n  observer.observe(rootEl, {\n    attributes: true,\n    attributeOldValue: true,\n    characterData: true,\n    characterDataOldValue: true,\n    childList: true,\n    subtree: true\n  });\n  return observer;\n}\nfunction initMoveObserver({\n  mousemoveCb,\n  sampling,\n  doc,\n  mirror: mirror2\n}) {\n  if (sampling.mousemove === false) {\n    return () => {\n    };\n  }\n  const threshold = typeof sampling.mousemove === \"number\" ? sampling.mousemove : 50;\n  const callbackThreshold = typeof sampling.mousemoveCallback === \"number\" ? sampling.mousemoveCallback : 500;\n  let positions = [];\n  let timeBaseline;\n  const wrappedCb = throttle$1(\n    callbackWrapper(\n      (source) => {\n        const totalOffset = Date.now() - timeBaseline;\n        mousemoveCb(\n          positions.map((p) => {\n            p.timeOffset -= totalOffset;\n            return p;\n          }),\n          source\n        );\n        positions = [];\n        timeBaseline = null;\n      }\n    ),\n    callbackThreshold\n  );\n  const updatePosition = callbackWrapper(\n    throttle$1(\n      callbackWrapper((evt) => {\n        const target = getEventTarget(evt);\n        const { clientX, clientY } = legacy_isTouchEvent(evt) ? evt.changedTouches[0] : evt;\n        if (!timeBaseline) {\n          timeBaseline = nowTimestamp();\n        }\n        positions.push({\n          x: clientX,\n          y: clientY,\n          id: mirror2.getId(target),\n          timeOffset: nowTimestamp() - timeBaseline\n        });\n        wrappedCb(\n          typeof DragEvent !== \"undefined\" && evt instanceof DragEvent ? IncrementalSource.Drag : evt instanceof MouseEvent ? IncrementalSource.MouseMove : IncrementalSource.TouchMove\n        );\n      }),\n      threshold,\n      {\n        trailing: false\n      }\n    )\n  );\n  const handlers = [\n    on(\"mousemove\", updatePosition, doc),\n    on(\"touchmove\", updatePosition, doc),\n    on(\"drag\", updatePosition, doc)\n  ];\n  return callbackWrapper(() => {\n    handlers.forEach((h) => h());\n  });\n}\nfunction initMouseInteractionObserver({\n  mouseInteractionCb,\n  doc,\n  mirror: mirror2,\n  blockClass,\n  blockSelector,\n  unblockSelector,\n  sampling\n}) {\n  if (sampling.mouseInteraction === false) {\n    return () => {\n    };\n  }\n  const disableMap = sampling.mouseInteraction === true || sampling.mouseInteraction === void 0 ? {} : sampling.mouseInteraction;\n  const handlers = [];\n  let currentPointerType = null;\n  const getHandler = (eventKey) => {\n    return (event) => {\n      const target = getEventTarget(event);\n      if (isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n        return;\n      }\n      let pointerType = null;\n      let thisEventKey = eventKey;\n      if (\"pointerType\" in event) {\n        switch (event.pointerType) {\n          case \"mouse\":\n            pointerType = PointerTypes.Mouse;\n            break;\n          case \"touch\":\n            pointerType = PointerTypes.Touch;\n            break;\n          case \"pen\":\n            pointerType = PointerTypes.Pen;\n            break;\n        }\n        if (pointerType === PointerTypes.Touch) {\n          if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\n            thisEventKey = \"TouchStart\";\n          } else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\n            thisEventKey = \"TouchEnd\";\n          }\n        } else if (pointerType === PointerTypes.Pen) ;\n      } else if (legacy_isTouchEvent(event)) {\n        pointerType = PointerTypes.Touch;\n      }\n      if (pointerType !== null) {\n        currentPointerType = pointerType;\n        if (thisEventKey.startsWith(\"Touch\") && pointerType === PointerTypes.Touch || thisEventKey.startsWith(\"Mouse\") && pointerType === PointerTypes.Mouse) {\n          pointerType = null;\n        }\n      } else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\n        pointerType = currentPointerType;\n        currentPointerType = null;\n      }\n      const e2 = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\n      if (!e2) {\n        return;\n      }\n      const id = mirror2.getId(target);\n      const { clientX, clientY } = e2;\n      callbackWrapper(mouseInteractionCb)({\n        type: MouseInteractions[thisEventKey],\n        id,\n        x: clientX,\n        y: clientY,\n        ...pointerType !== null && { pointerType }\n      });\n    };\n  };\n  Object.keys(MouseInteractions).filter(\n    (key) => Number.isNaN(Number(key)) && !key.endsWith(\"_Departed\") && disableMap[key] !== false\n  ).forEach((eventKey) => {\n    let eventName = toLowerCase(eventKey);\n    const handler = getHandler(eventKey);\n    if (window.PointerEvent) {\n      switch (MouseInteractions[eventKey]) {\n        case MouseInteractions.MouseDown:\n        case MouseInteractions.MouseUp:\n          eventName = eventName.replace(\n            \"mouse\",\n            \"pointer\"\n          );\n          break;\n        case MouseInteractions.TouchStart:\n        case MouseInteractions.TouchEnd:\n          return;\n      }\n    }\n    handlers.push(on(eventName, handler, doc));\n  });\n  return callbackWrapper(() => {\n    handlers.forEach((h) => h());\n  });\n}\nfunction initScrollObserver({\n  scrollCb,\n  doc,\n  mirror: mirror2,\n  blockClass,\n  blockSelector,\n  unblockSelector,\n  sampling\n}) {\n  const updatePosition = callbackWrapper(\n    throttle$1(\n      callbackWrapper((evt) => {\n        const target = getEventTarget(evt);\n        if (!target || isBlocked(\n          target,\n          blockClass,\n          blockSelector,\n          unblockSelector,\n          true\n        )) {\n          return;\n        }\n        const id = mirror2.getId(target);\n        if (target === doc && doc.defaultView) {\n          const scrollLeftTop = getWindowScroll(doc.defaultView);\n          scrollCb({\n            id,\n            x: scrollLeftTop.left,\n            y: scrollLeftTop.top\n          });\n        } else {\n          scrollCb({\n            id,\n            x: target.scrollLeft,\n            y: target.scrollTop\n          });\n        }\n      }),\n      sampling.scroll || 100\n    )\n  );\n  return on(\"scroll\", updatePosition, doc);\n}\nfunction initViewportResizeObserver({ viewportResizeCb }, { win }) {\n  let lastH = -1;\n  let lastW = -1;\n  const updateDimension = callbackWrapper(\n    throttle$1(\n      callbackWrapper(() => {\n        const height = getWindowHeight();\n        const width = getWindowWidth();\n        if (lastH !== height || lastW !== width) {\n          viewportResizeCb({\n            width: Number(width),\n            height: Number(height)\n          });\n          lastH = height;\n          lastW = width;\n        }\n      }),\n      200\n    )\n  );\n  return on(\"resize\", updateDimension, win);\n}\nconst INPUT_TAGS = [\"INPUT\", \"TEXTAREA\", \"SELECT\"];\nconst lastInputValueMap = /* @__PURE__ */ new WeakMap();\nfunction initInputObserver({\n  inputCb,\n  doc,\n  mirror: mirror2,\n  blockClass,\n  blockSelector,\n  unblockSelector,\n  ignoreClass,\n  ignoreSelector,\n  maskInputOptions,\n  maskInputFn,\n  sampling,\n  userTriggeredOnInput,\n  maskTextClass,\n  unmaskTextClass,\n  maskTextSelector,\n  unmaskTextSelector\n}) {\n  function eventHandler(event) {\n    let target = getEventTarget(event);\n    const userTriggered = event.isTrusted;\n    const tagName = target && toUpperCase(target.tagName);\n    if (tagName === \"OPTION\") target = target.parentElement;\n    if (!target || !tagName || INPUT_TAGS.indexOf(tagName) < 0 || isBlocked(\n      target,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      true\n    )) {\n      return;\n    }\n    const el = target;\n    if (el.classList.contains(ignoreClass) || ignoreSelector && el.matches(ignoreSelector)) {\n      return;\n    }\n    const type = getInputType(target);\n    let text = getInputValue(el, tagName, type);\n    let isChecked = false;\n    const isInputMasked = shouldMaskInput({\n      maskInputOptions,\n      tagName,\n      type\n    });\n    const forceMask = needMaskingText(\n      target,\n      maskTextClass,\n      maskTextSelector,\n      unmaskTextClass,\n      unmaskTextSelector,\n      isInputMasked\n    );\n    if (type === \"radio\" || type === \"checkbox\") {\n      isChecked = target.checked;\n    }\n    text = maskInputValue({\n      isMasked: forceMask,\n      element: target,\n      value: text,\n      maskInputFn\n    });\n    cbWithDedup(\n      target,\n      userTriggeredOnInput ? { text, isChecked, userTriggered } : { text, isChecked }\n    );\n    const name = target.name;\n    if (type === \"radio\" && name && isChecked) {\n      doc.querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`).forEach((el2) => {\n        if (el2 !== target) {\n          const text2 = maskInputValue({\n            // share mask behavior of `target`\n            isMasked: forceMask,\n            element: el2,\n            value: getInputValue(el2, tagName, type),\n            maskInputFn\n          });\n          cbWithDedup(\n            el2,\n            userTriggeredOnInput ? { text: text2, isChecked: !isChecked, userTriggered: false } : { text: text2, isChecked: !isChecked }\n          );\n        }\n      });\n    }\n  }\n  function cbWithDedup(target, v2) {\n    const lastInputValue = lastInputValueMap.get(target);\n    if (!lastInputValue || lastInputValue.text !== v2.text || lastInputValue.isChecked !== v2.isChecked) {\n      lastInputValueMap.set(target, v2);\n      const id = mirror2.getId(target);\n      callbackWrapper(inputCb)({\n        ...v2,\n        id\n      });\n    }\n  }\n  const events = sampling.input === \"last\" ? [\"change\"] : [\"input\", \"change\"];\n  const handlers = events.map(\n    (eventName) => on(eventName, callbackWrapper(eventHandler), doc)\n  );\n  const currentWindow = doc.defaultView;\n  if (!currentWindow) {\n    return () => {\n      handlers.forEach((h) => h());\n    };\n  }\n  const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(\n    currentWindow.HTMLInputElement.prototype,\n    \"value\"\n  );\n  const hookProperties = [\n    [currentWindow.HTMLInputElement.prototype, \"value\"],\n    [currentWindow.HTMLInputElement.prototype, \"checked\"],\n    [currentWindow.HTMLSelectElement.prototype, \"value\"],\n    [currentWindow.HTMLTextAreaElement.prototype, \"value\"],\n    // Some UI library use selectedIndex to set select value\n    [currentWindow.HTMLSelectElement.prototype, \"selectedIndex\"],\n    [currentWindow.HTMLOptionElement.prototype, \"selected\"]\n  ];\n  if (propertyDescriptor && propertyDescriptor.set) {\n    handlers.push(\n      ...hookProperties.map(\n        (p) => hookSetter(\n          p[0],\n          p[1],\n          {\n            set() {\n              callbackWrapper(eventHandler)({\n                target: this,\n                isTrusted: false\n                // userTriggered to false as this could well be programmatic\n              });\n            }\n          },\n          false,\n          currentWindow\n        )\n      )\n    );\n  }\n  return callbackWrapper(() => {\n    handlers.forEach((h) => h());\n  });\n}\nfunction getNestedCSSRulePositions(rule) {\n  const positions = [];\n  function recurse(childRule, pos) {\n    if (hasNestedCSSRule(\"CSSGroupingRule\") && childRule.parentRule instanceof CSSGroupingRule || hasNestedCSSRule(\"CSSMediaRule\") && childRule.parentRule instanceof CSSMediaRule || hasNestedCSSRule(\"CSSSupportsRule\") && childRule.parentRule instanceof CSSSupportsRule || hasNestedCSSRule(\"CSSConditionRule\") && childRule.parentRule instanceof CSSConditionRule) {\n      const rules2 = Array.from(\n        childRule.parentRule.cssRules\n      );\n      const index = rules2.indexOf(childRule);\n      pos.unshift(index);\n    } else if (childRule.parentStyleSheet) {\n      const rules2 = Array.from(childRule.parentStyleSheet.cssRules);\n      const index = rules2.indexOf(childRule);\n      pos.unshift(index);\n    }\n    return pos;\n  }\n  return recurse(rule, positions);\n}\nfunction getIdAndStyleId(sheet, mirror2, styleMirror) {\n  let id, styleId;\n  if (!sheet) return {};\n  if (sheet.ownerNode) id = mirror2.getId(sheet.ownerNode);\n  else styleId = styleMirror.getId(sheet);\n  return {\n    styleId,\n    id\n  };\n}\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror: mirror2, stylesheetManager }, { win }) {\n  if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\n    return () => {\n    };\n  }\n  const insertRule = win.CSSStyleSheet.prototype.insertRule;\n  win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\n    apply: callbackWrapper(\n      (target, thisArg, argumentsList) => {\n        const [rule, index] = argumentsList;\n        const { id, styleId } = getIdAndStyleId(\n          thisArg,\n          mirror2,\n          stylesheetManager.styleMirror\n        );\n        if (id && id !== -1 || styleId && styleId !== -1) {\n          styleSheetRuleCb({\n            id,\n            styleId,\n            adds: [{ rule, index }]\n          });\n        }\n        return target.apply(thisArg, argumentsList);\n      }\n    )\n  });\n  const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\n  win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\n    apply: callbackWrapper(\n      (target, thisArg, argumentsList) => {\n        const [index] = argumentsList;\n        const { id, styleId } = getIdAndStyleId(\n          thisArg,\n          mirror2,\n          stylesheetManager.styleMirror\n        );\n        if (id && id !== -1 || styleId && styleId !== -1) {\n          styleSheetRuleCb({\n            id,\n            styleId,\n            removes: [{ index }]\n          });\n        }\n        return target.apply(thisArg, argumentsList);\n      }\n    )\n  });\n  let replace;\n  if (win.CSSStyleSheet.prototype.replace) {\n    replace = win.CSSStyleSheet.prototype.replace;\n    win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\n      apply: callbackWrapper(\n        (target, thisArg, argumentsList) => {\n          const [text] = argumentsList;\n          const { id, styleId } = getIdAndStyleId(\n            thisArg,\n            mirror2,\n            stylesheetManager.styleMirror\n          );\n          if (id && id !== -1 || styleId && styleId !== -1) {\n            styleSheetRuleCb({\n              id,\n              styleId,\n              replace: text\n            });\n          }\n          return target.apply(thisArg, argumentsList);\n        }\n      )\n    });\n  }\n  let replaceSync;\n  if (win.CSSStyleSheet.prototype.replaceSync) {\n    replaceSync = win.CSSStyleSheet.prototype.replaceSync;\n    win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\n      apply: callbackWrapper(\n        (target, thisArg, argumentsList) => {\n          const [text] = argumentsList;\n          const { id, styleId } = getIdAndStyleId(\n            thisArg,\n            mirror2,\n            stylesheetManager.styleMirror\n          );\n          if (id && id !== -1 || styleId && styleId !== -1) {\n            styleSheetRuleCb({\n              id,\n              styleId,\n              replaceSync: text\n            });\n          }\n          return target.apply(thisArg, argumentsList);\n        }\n      )\n    });\n  }\n  const supportedNestedCSSRuleTypes = {};\n  if (canMonkeyPatchNestedCSSRule(\"CSSGroupingRule\")) {\n    supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\n  } else {\n    if (canMonkeyPatchNestedCSSRule(\"CSSMediaRule\")) {\n      supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\n    }\n    if (canMonkeyPatchNestedCSSRule(\"CSSConditionRule\")) {\n      supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\n    }\n    if (canMonkeyPatchNestedCSSRule(\"CSSSupportsRule\")) {\n      supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\n    }\n  }\n  const unmodifiedFunctions = {};\n  Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n    unmodifiedFunctions[typeKey] = {\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      insertRule: type.prototype.insertRule,\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      deleteRule: type.prototype.deleteRule\n    };\n    type.prototype.insertRule = new Proxy(\n      unmodifiedFunctions[typeKey].insertRule,\n      {\n        apply: callbackWrapper(\n          (target, thisArg, argumentsList) => {\n            const [rule, index] = argumentsList;\n            const { id, styleId } = getIdAndStyleId(\n              thisArg.parentStyleSheet,\n              mirror2,\n              stylesheetManager.styleMirror\n            );\n            if (id && id !== -1 || styleId && styleId !== -1) {\n              styleSheetRuleCb({\n                id,\n                styleId,\n                adds: [\n                  {\n                    rule,\n                    index: [\n                      ...getNestedCSSRulePositions(thisArg),\n                      index || 0\n                      // defaults to 0\n                    ]\n                  }\n                ]\n              });\n            }\n            return target.apply(thisArg, argumentsList);\n          }\n        )\n      }\n    );\n    type.prototype.deleteRule = new Proxy(\n      unmodifiedFunctions[typeKey].deleteRule,\n      {\n        apply: callbackWrapper(\n          (target, thisArg, argumentsList) => {\n            const [index] = argumentsList;\n            const { id, styleId } = getIdAndStyleId(\n              thisArg.parentStyleSheet,\n              mirror2,\n              stylesheetManager.styleMirror\n            );\n            if (id && id !== -1 || styleId && styleId !== -1) {\n              styleSheetRuleCb({\n                id,\n                styleId,\n                removes: [\n                  { index: [...getNestedCSSRulePositions(thisArg), index] }\n                ]\n              });\n            }\n            return target.apply(thisArg, argumentsList);\n          }\n        )\n      }\n    );\n  });\n  return callbackWrapper(() => {\n    win.CSSStyleSheet.prototype.insertRule = insertRule;\n    win.CSSStyleSheet.prototype.deleteRule = deleteRule;\n    replace && (win.CSSStyleSheet.prototype.replace = replace);\n    replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\n    Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n      type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\n      type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\n    });\n  });\n}\nfunction initAdoptedStyleSheetObserver({\n  mirror: mirror2,\n  stylesheetManager\n}, host) {\n  let hostId = null;\n  if (host.nodeName === \"#document\") hostId = mirror2.getId(host);\n  else hostId = mirror2.getId(host.host);\n  const patchTarget = host.nodeName === \"#document\" ? host.defaultView?.Document : host.ownerDocument?.defaultView?.ShadowRoot;\n  const originalPropertyDescriptor = patchTarget?.prototype ? Object.getOwnPropertyDescriptor(\n    patchTarget?.prototype,\n    \"adoptedStyleSheets\"\n  ) : void 0;\n  if (hostId === null || hostId === -1 || !patchTarget || !originalPropertyDescriptor)\n    return () => {\n    };\n  Object.defineProperty(host, \"adoptedStyleSheets\", {\n    configurable: originalPropertyDescriptor.configurable,\n    enumerable: originalPropertyDescriptor.enumerable,\n    get() {\n      return originalPropertyDescriptor.get?.call(this);\n    },\n    set(sheets) {\n      const result = originalPropertyDescriptor.set?.call(this, sheets);\n      if (hostId !== null && hostId !== -1) {\n        try {\n          stylesheetManager.adoptStyleSheets(sheets, hostId);\n        } catch (e2) {\n        }\n      }\n      return result;\n    }\n  });\n  return callbackWrapper(() => {\n    Object.defineProperty(host, \"adoptedStyleSheets\", {\n      configurable: originalPropertyDescriptor.configurable,\n      enumerable: originalPropertyDescriptor.enumerable,\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      get: originalPropertyDescriptor.get,\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      set: originalPropertyDescriptor.set\n    });\n  });\n}\nfunction initStyleDeclarationObserver({\n  styleDeclarationCb,\n  mirror: mirror2,\n  ignoreCSSAttributes,\n  stylesheetManager\n}, { win }) {\n  const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\n  win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\n    apply: callbackWrapper(\n      (target, thisArg, argumentsList) => {\n        const [property, value, priority] = argumentsList;\n        if (ignoreCSSAttributes.has(property)) {\n          return setProperty.apply(thisArg, [property, value, priority]);\n        }\n        const { id, styleId } = getIdAndStyleId(\n          thisArg.parentRule?.parentStyleSheet,\n          mirror2,\n          stylesheetManager.styleMirror\n        );\n        if (id && id !== -1 || styleId && styleId !== -1) {\n          styleDeclarationCb({\n            id,\n            styleId,\n            set: {\n              property,\n              value,\n              priority\n            },\n            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n            index: getNestedCSSRulePositions(thisArg.parentRule)\n          });\n        }\n        return target.apply(thisArg, argumentsList);\n      }\n    )\n  });\n  const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\n  win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\n    apply: callbackWrapper(\n      (target, thisArg, argumentsList) => {\n        const [property] = argumentsList;\n        if (ignoreCSSAttributes.has(property)) {\n          return removeProperty.apply(thisArg, [property]);\n        }\n        const { id, styleId } = getIdAndStyleId(\n          thisArg.parentRule?.parentStyleSheet,\n          mirror2,\n          stylesheetManager.styleMirror\n        );\n        if (id && id !== -1 || styleId && styleId !== -1) {\n          styleDeclarationCb({\n            id,\n            styleId,\n            remove: {\n              property\n            },\n            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n            index: getNestedCSSRulePositions(thisArg.parentRule)\n          });\n        }\n        return target.apply(thisArg, argumentsList);\n      }\n    )\n  });\n  return callbackWrapper(() => {\n    win.CSSStyleDeclaration.prototype.setProperty = setProperty;\n    win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\n  });\n}\nfunction initMediaInteractionObserver({\n  mediaInteractionCb,\n  blockClass,\n  blockSelector,\n  unblockSelector,\n  mirror: mirror2,\n  sampling,\n  doc\n}) {\n  const handler = callbackWrapper(\n    (type) => throttle$1(\n      callbackWrapper((event) => {\n        const target = getEventTarget(event);\n        if (!target || isBlocked(\n          target,\n          blockClass,\n          blockSelector,\n          unblockSelector,\n          true\n        )) {\n          return;\n        }\n        const { currentTime, volume, muted, playbackRate } = target;\n        mediaInteractionCb({\n          type,\n          id: mirror2.getId(target),\n          currentTime,\n          volume,\n          muted,\n          playbackRate\n        });\n      }),\n      sampling.media || 500\n    )\n  );\n  const handlers = [\n    on(\"play\", handler(MediaInteractions.Play), doc),\n    on(\"pause\", handler(MediaInteractions.Pause), doc),\n    on(\"seeked\", handler(MediaInteractions.Seeked), doc),\n    on(\"volumechange\", handler(MediaInteractions.VolumeChange), doc),\n    on(\"ratechange\", handler(MediaInteractions.RateChange), doc)\n  ];\n  return callbackWrapper(() => {\n    handlers.forEach((h) => h());\n  });\n}\nfunction initFontObserver({ fontCb, doc }) {\n  const win = doc.defaultView;\n  if (!win) {\n    return () => {\n    };\n  }\n  const handlers = [];\n  const fontMap = /* @__PURE__ */ new WeakMap();\n  const originalFontFace = win.FontFace;\n  win.FontFace = function FontFace2(family, source, descriptors) {\n    const fontFace = new originalFontFace(family, source, descriptors);\n    fontMap.set(fontFace, {\n      family,\n      buffer: typeof source !== \"string\",\n      descriptors,\n      fontSource: typeof source === \"string\" ? source : JSON.stringify(Array.from(new Uint8Array(source)))\n    });\n    return fontFace;\n  };\n  const restoreHandler = patch(\n    doc.fonts,\n    \"add\",\n    function(original) {\n      return function(fontFace) {\n        setTimeout$2(\n          callbackWrapper(() => {\n            const p = fontMap.get(fontFace);\n            if (p) {\n              fontCb(p);\n              fontMap.delete(fontFace);\n            }\n          }),\n          0\n        );\n        return original.apply(this, [fontFace]);\n      };\n    }\n  );\n  handlers.push(() => {\n    win.FontFace = originalFontFace;\n  });\n  handlers.push(restoreHandler);\n  return callbackWrapper(() => {\n    handlers.forEach((h) => h());\n  });\n}\nfunction initSelectionObserver(param) {\n  const {\n    doc,\n    mirror: mirror2,\n    blockClass,\n    blockSelector,\n    unblockSelector,\n    selectionCb\n  } = param;\n  let collapsed = true;\n  const updateSelection = callbackWrapper(() => {\n    const selection = doc.getSelection();\n    if (!selection || collapsed && selection?.isCollapsed) return;\n    collapsed = selection.isCollapsed || false;\n    const ranges = [];\n    const count = selection.rangeCount || 0;\n    for (let i2 = 0; i2 < count; i2++) {\n      const range = selection.getRangeAt(i2);\n      const { startContainer, startOffset, endContainer, endOffset } = range;\n      const blocked = isBlocked(\n        startContainer,\n        blockClass,\n        blockSelector,\n        unblockSelector,\n        true\n      ) || isBlocked(\n        endContainer,\n        blockClass,\n        blockSelector,\n        unblockSelector,\n        true\n      );\n      if (blocked) continue;\n      ranges.push({\n        start: mirror2.getId(startContainer),\n        startOffset,\n        end: mirror2.getId(endContainer),\n        endOffset\n      });\n    }\n    selectionCb({ ranges });\n  });\n  updateSelection();\n  return on(\"selectionchange\", updateSelection);\n}\nfunction initCustomElementObserver({\n  doc,\n  customElementCb\n}) {\n  const win = doc.defaultView;\n  if (!win || !win.customElements) return () => {\n  };\n  const restoreHandler = patch(\n    win.customElements,\n    \"define\",\n    function(original) {\n      return function(name, constructor, options) {\n        try {\n          customElementCb({\n            define: {\n              name\n            }\n          });\n        } catch (e2) {\n        }\n        return original.apply(this, [name, constructor, options]);\n      };\n    }\n  );\n  return restoreHandler;\n}\nfunction initObservers(o2, _hooks = {}) {\n  const currentWindow = o2.doc.defaultView;\n  if (!currentWindow) {\n    return () => {\n    };\n  }\n  let mutationObserver;\n  if (o2.recordDOM) {\n    mutationObserver = initMutationObserver(o2, o2.doc);\n  }\n  const mousemoveHandler = initMoveObserver(o2);\n  const mouseInteractionHandler = initMouseInteractionObserver(o2);\n  const scrollHandler = initScrollObserver(o2);\n  const viewportResizeHandler = initViewportResizeObserver(o2, {\n    win: currentWindow\n  });\n  const inputHandler = initInputObserver(o2);\n  const mediaInteractionHandler = initMediaInteractionObserver(o2);\n  let styleSheetObserver = () => {\n  };\n  let adoptedStyleSheetObserver = () => {\n  };\n  let styleDeclarationObserver = () => {\n  };\n  let fontObserver = () => {\n  };\n  if (o2.recordDOM) {\n    styleSheetObserver = initStyleSheetObserver(o2, { win: currentWindow });\n    adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o2, o2.doc);\n    styleDeclarationObserver = initStyleDeclarationObserver(o2, {\n      win: currentWindow\n    });\n    if (o2.collectFonts) {\n      fontObserver = initFontObserver(o2);\n    }\n  }\n  const selectionObserver = initSelectionObserver(o2);\n  const customElementObserver = initCustomElementObserver(o2);\n  const pluginHandlers = [];\n  for (const plugin of o2.plugins) {\n    pluginHandlers.push(\n      plugin.observer(plugin.callback, currentWindow, plugin.options)\n    );\n  }\n  return callbackWrapper(() => {\n    mutationBuffers.forEach((b) => b.reset());\n    mutationObserver?.disconnect();\n    mousemoveHandler();\n    mouseInteractionHandler();\n    scrollHandler();\n    viewportResizeHandler();\n    inputHandler();\n    mediaInteractionHandler();\n    styleSheetObserver();\n    adoptedStyleSheetObserver();\n    styleDeclarationObserver();\n    fontObserver();\n    selectionObserver();\n    customElementObserver();\n    pluginHandlers.forEach((h) => h());\n  });\n}\nfunction hasNestedCSSRule(prop) {\n  return typeof window[prop] !== \"undefined\";\n}\nfunction canMonkeyPatchNestedCSSRule(prop) {\n  return Boolean(\n    typeof window[prop] !== \"undefined\" && // Note: Generally, this check _shouldn't_ be necessary\n    // However, in some scenarios (e.g. jsdom) this can sometimes fail, so we check for it here\n    window[prop].prototype && \"insertRule\" in window[prop].prototype && \"deleteRule\" in window[prop].prototype\n  );\n}\nclass CrossOriginIframeMirror {\n  constructor(generateIdFn) {\n    this.generateIdFn = generateIdFn;\n    this.iframeIdToRemoteIdMap = /* @__PURE__ */ new WeakMap();\n    this.iframeRemoteIdToIdMap = /* @__PURE__ */ new WeakMap();\n  }\n  getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\n    const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\n    const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\n    let id = idToRemoteIdMap.get(remoteId);\n    if (!id) {\n      id = this.generateIdFn();\n      idToRemoteIdMap.set(remoteId, id);\n      remoteIdToIdMap.set(id, remoteId);\n    }\n    return id;\n  }\n  getIds(iframe, remoteId) {\n    const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\n    const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n    return remoteId.map(\n      (id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap)\n    );\n  }\n  getRemoteId(iframe, id, map) {\n    const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\n    if (typeof id !== \"number\") return id;\n    const remoteId = remoteIdToIdMap.get(id);\n    if (!remoteId) return -1;\n    return remoteId;\n  }\n  getRemoteIds(iframe, ids) {\n    const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n    return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\n  }\n  reset(iframe) {\n    if (!iframe) {\n      this.iframeIdToRemoteIdMap = /* @__PURE__ */ new WeakMap();\n      this.iframeRemoteIdToIdMap = /* @__PURE__ */ new WeakMap();\n      return;\n    }\n    this.iframeIdToRemoteIdMap.delete(iframe);\n    this.iframeRemoteIdToIdMap.delete(iframe);\n  }\n  getIdToRemoteIdMap(iframe) {\n    let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\n    if (!idToRemoteIdMap) {\n      idToRemoteIdMap = /* @__PURE__ */ new Map();\n      this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\n    }\n    return idToRemoteIdMap;\n  }\n  getRemoteIdToIdMap(iframe) {\n    let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\n    if (!remoteIdToIdMap) {\n      remoteIdToIdMap = /* @__PURE__ */ new Map();\n      this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\n    }\n    return remoteIdToIdMap;\n  }\n}\nclass IframeManagerNoop {\n  constructor() {\n    this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\n    this.crossOriginIframeRootIdMap = /* @__PURE__ */ new WeakMap();\n  }\n  addIframe() {\n  }\n  addLoadListener() {\n  }\n  attachIframe() {\n  }\n}\nclass IframeManager {\n  constructor(options) {\n    this.iframes = /* @__PURE__ */ new WeakMap();\n    this.crossOriginIframeMap = /* @__PURE__ */ new WeakMap();\n    this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\n    this.crossOriginIframeRootIdMap = /* @__PURE__ */ new WeakMap();\n    this.mutationCb = options.mutationCb;\n    this.wrappedEmit = options.wrappedEmit;\n    this.stylesheetManager = options.stylesheetManager;\n    this.recordCrossOriginIframes = options.recordCrossOriginIframes;\n    this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(\n      this.stylesheetManager.styleMirror.generateId.bind(\n        this.stylesheetManager.styleMirror\n      )\n    );\n    this.mirror = options.mirror;\n    if (this.recordCrossOriginIframes) {\n      window.addEventListener(\"message\", this.handleMessage.bind(this));\n    }\n  }\n  addIframe(iframeEl) {\n    this.iframes.set(iframeEl, true);\n    const contentWindow = getIFrameContentWindow(iframeEl);\n    if (contentWindow) this.crossOriginIframeMap.set(contentWindow, iframeEl);\n  }\n  addLoadListener(cb) {\n    this.loadListener = cb;\n  }\n  attachIframe(iframeEl, childSn) {\n    this.mutationCb({\n      adds: [\n        {\n          parentId: this.mirror.getId(iframeEl),\n          nextId: null,\n          node: childSn\n        }\n      ],\n      removes: [],\n      texts: [],\n      attributes: [],\n      isAttachIframe: true\n    });\n    if (this.recordCrossOriginIframes) {\n      getIFrameContentWindow(iframeEl)?.addEventListener(\n        \"message\",\n        this.handleMessage.bind(this)\n      );\n    }\n    this.loadListener?.(iframeEl);\n    const iframeDoc = getIFrameContentDocument(iframeEl);\n    if (iframeDoc && iframeDoc.adoptedStyleSheets && iframeDoc.adoptedStyleSheets.length > 0)\n      this.stylesheetManager.adoptStyleSheets(\n        iframeDoc.adoptedStyleSheets,\n        this.mirror.getId(iframeDoc)\n      );\n  }\n  handleMessage(message) {\n    const crossOriginMessageEvent = message;\n    if (crossOriginMessageEvent.data.type !== \"rrweb\" || // To filter out the rrweb messages which are forwarded by some sites.\n    crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin)\n      return;\n    const iframeSourceWindow = message.source;\n    if (!iframeSourceWindow) return;\n    const iframeEl = this.crossOriginIframeMap.get(message.source);\n    if (!iframeEl) return;\n    const transformedEvent = this.transformCrossOriginEvent(\n      iframeEl,\n      crossOriginMessageEvent.data.event\n    );\n    if (transformedEvent)\n      this.wrappedEmit(\n        transformedEvent,\n        crossOriginMessageEvent.data.isCheckout\n      );\n  }\n  transformCrossOriginEvent(iframeEl, e2) {\n    switch (e2.type) {\n      case EventType.FullSnapshot: {\n        this.crossOriginIframeMirror.reset(iframeEl);\n        this.crossOriginIframeStyleMirror.reset(iframeEl);\n        this.replaceIdOnNode(e2.data.node, iframeEl);\n        const rootId = e2.data.node.id;\n        this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\n        this.patchRootIdOnNode(e2.data.node, rootId);\n        return {\n          timestamp: e2.timestamp,\n          type: EventType.IncrementalSnapshot,\n          data: {\n            source: IncrementalSource.Mutation,\n            adds: [\n              {\n                parentId: this.mirror.getId(iframeEl),\n                nextId: null,\n                node: e2.data.node\n              }\n            ],\n            removes: [],\n            texts: [],\n            attributes: [],\n            isAttachIframe: true\n          }\n        };\n      }\n      case EventType.Meta:\n      case EventType.Load:\n      case EventType.DomContentLoaded: {\n        return false;\n      }\n      case EventType.Plugin: {\n        return e2;\n      }\n      case EventType.Custom: {\n        this.replaceIds(\n          e2.data.payload,\n          iframeEl,\n          [\"id\", \"parentId\", \"previousId\", \"nextId\"]\n        );\n        return e2;\n      }\n      case EventType.IncrementalSnapshot: {\n        switch (e2.data.source) {\n          case IncrementalSource.Mutation: {\n            e2.data.adds.forEach((n2) => {\n              this.replaceIds(n2, iframeEl, [\n                \"parentId\",\n                \"nextId\",\n                \"previousId\"\n              ]);\n              this.replaceIdOnNode(n2.node, iframeEl);\n              const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);\n              rootId && this.patchRootIdOnNode(n2.node, rootId);\n            });\n            e2.data.removes.forEach((n2) => {\n              this.replaceIds(n2, iframeEl, [\"parentId\", \"id\"]);\n            });\n            e2.data.attributes.forEach((n2) => {\n              this.replaceIds(n2, iframeEl, [\"id\"]);\n            });\n            e2.data.texts.forEach((n2) => {\n              this.replaceIds(n2, iframeEl, [\"id\"]);\n            });\n            return e2;\n          }\n          case IncrementalSource.Drag:\n          case IncrementalSource.TouchMove:\n          case IncrementalSource.MouseMove: {\n            e2.data.positions.forEach((p) => {\n              this.replaceIds(p, iframeEl, [\"id\"]);\n            });\n            return e2;\n          }\n          case IncrementalSource.ViewportResize: {\n            return false;\n          }\n          case IncrementalSource.MediaInteraction:\n          case IncrementalSource.MouseInteraction:\n          case IncrementalSource.Scroll:\n          case IncrementalSource.CanvasMutation:\n          case IncrementalSource.Input: {\n            this.replaceIds(e2.data, iframeEl, [\"id\"]);\n            return e2;\n          }\n          case IncrementalSource.StyleSheetRule:\n          case IncrementalSource.StyleDeclaration: {\n            this.replaceIds(e2.data, iframeEl, [\"id\"]);\n            this.replaceStyleIds(e2.data, iframeEl, [\"styleId\"]);\n            return e2;\n          }\n          case IncrementalSource.Font: {\n            return e2;\n          }\n          case IncrementalSource.Selection: {\n            e2.data.ranges.forEach((range) => {\n              this.replaceIds(range, iframeEl, [\"start\", \"end\"]);\n            });\n            return e2;\n          }\n          case IncrementalSource.AdoptedStyleSheet: {\n            this.replaceIds(e2.data, iframeEl, [\"id\"]);\n            this.replaceStyleIds(e2.data, iframeEl, [\"styleIds\"]);\n            e2.data.styles?.forEach((style) => {\n              this.replaceStyleIds(style, iframeEl, [\"styleId\"]);\n            });\n            return e2;\n          }\n        }\n      }\n    }\n    return false;\n  }\n  replace(iframeMirror, obj, iframeEl, keys) {\n    for (const key of keys) {\n      if (!Array.isArray(obj[key]) && typeof obj[key] !== \"number\") continue;\n      if (Array.isArray(obj[key])) {\n        obj[key] = iframeMirror.getIds(\n          iframeEl,\n          obj[key]\n        );\n      } else {\n        obj[key] = iframeMirror.getId(iframeEl, obj[key]);\n      }\n    }\n    return obj;\n  }\n  replaceIds(obj, iframeEl, keys) {\n    return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\n  }\n  replaceStyleIds(obj, iframeEl, keys) {\n    return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\n  }\n  replaceIdOnNode(node, iframeEl) {\n    this.replaceIds(node, iframeEl, [\"id\", \"rootId\"]);\n    if (\"childNodes\" in node) {\n      node.childNodes.forEach((child) => {\n        this.replaceIdOnNode(child, iframeEl);\n      });\n    }\n  }\n  patchRootIdOnNode(node, rootId) {\n    if (node.type !== NodeType$1.Document && !node.rootId) node.rootId = rootId;\n    if (\"childNodes\" in node) {\n      node.childNodes.forEach((child) => {\n        this.patchRootIdOnNode(child, rootId);\n      });\n    }\n  }\n}\nclass ShadowDomManagerNoop {\n  init() {\n  }\n  addShadowRoot() {\n  }\n  observeAttachShadow() {\n  }\n  reset() {\n  }\n}\nclass ShadowDomManager {\n  constructor(options) {\n    this.shadowDoms = /* @__PURE__ */ new WeakSet();\n    this.restoreHandlers = [];\n    this.mutationCb = options.mutationCb;\n    this.scrollCb = options.scrollCb;\n    this.bypassOptions = options.bypassOptions;\n    this.mirror = options.mirror;\n    this.init();\n  }\n  init() {\n    this.reset();\n    this.patchAttachShadow(Element, document);\n  }\n  addShadowRoot(shadowRoot, doc) {\n    if (!isNativeShadowDom(shadowRoot)) return;\n    if (this.shadowDoms.has(shadowRoot)) return;\n    this.shadowDoms.add(shadowRoot);\n    this.bypassOptions.canvasManager.addShadowRoot(shadowRoot);\n    const observer = initMutationObserver(\n      {\n        ...this.bypassOptions,\n        doc,\n        mutationCb: this.mutationCb,\n        mirror: this.mirror,\n        shadowDomManager: this\n      },\n      shadowRoot\n    );\n    this.restoreHandlers.push(() => observer.disconnect());\n    this.restoreHandlers.push(\n      initScrollObserver({\n        ...this.bypassOptions,\n        scrollCb: this.scrollCb,\n        // https://gist.github.com/praveenpuglia/0832da687ed5a5d7a0907046c9ef1813\n        // scroll is not allowed to pass the boundary, so we need to listen the shadow document\n        doc: shadowRoot,\n        mirror: this.mirror\n      })\n    );\n    setTimeout$2(() => {\n      if (shadowRoot.adoptedStyleSheets && shadowRoot.adoptedStyleSheets.length > 0)\n        this.bypassOptions.stylesheetManager.adoptStyleSheets(\n          shadowRoot.adoptedStyleSheets,\n          this.mirror.getId(shadowRoot.host)\n        );\n      this.restoreHandlers.push(\n        initAdoptedStyleSheetObserver(\n          {\n            mirror: this.mirror,\n            stylesheetManager: this.bypassOptions.stylesheetManager\n          },\n          shadowRoot\n        )\n      );\n    }, 0);\n  }\n  /**\n   * Monkey patch 'attachShadow' of an IFrameElement to observe newly added shadow doms.\n   */\n  observeAttachShadow(iframeElement) {\n    const iframeDoc = getIFrameContentDocument(iframeElement);\n    const iframeWindow = getIFrameContentWindow(iframeElement);\n    if (!iframeDoc || !iframeWindow) return;\n    let iframeElementConstructor;\n    try {\n      iframeElementConstructor = iframeWindow.Element;\n    } catch (e2) {\n      return;\n    }\n    if (!iframeElementConstructor) return;\n    this.patchAttachShadow(iframeElementConstructor, iframeDoc);\n  }\n  /**\n   * Patch 'attachShadow' to observe newly added shadow doms.\n   */\n  patchAttachShadow(element, doc) {\n    const manager = this;\n    this.restoreHandlers.push(\n      patch(\n        element.prototype,\n        \"attachShadow\",\n        function(original) {\n          return function(option) {\n            const shadowRoot = original.call(this, option);\n            if (this.shadowRoot && inDom(this))\n              manager.addShadowRoot(this.shadowRoot, doc);\n            return shadowRoot;\n          };\n        }\n      )\n    );\n  }\n  reset() {\n    this.restoreHandlers.forEach((handler) => {\n      try {\n        handler();\n      } catch (e2) {\n      }\n    });\n    this.restoreHandlers = [];\n    this.shadowDoms = /* @__PURE__ */ new WeakSet();\n    this.bypassOptions.canvasManager.resetShadowRoots();\n  }\n}\nclass StylesheetManager {\n  constructor(options) {\n    this.trackedLinkElements = /* @__PURE__ */ new WeakSet();\n    this.styleMirror = new StyleSheetMirror();\n    this.mutationCb = options.mutationCb;\n    this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\n  }\n  attachLinkElement(linkEl, childSn) {\n    if (\"_cssText\" in childSn.attributes)\n      this.mutationCb({\n        adds: [],\n        removes: [],\n        texts: [],\n        attributes: [\n          {\n            id: childSn.id,\n            attributes: childSn.attributes\n          }\n        ]\n      });\n    this.trackLinkElement(linkEl);\n  }\n  trackLinkElement(linkEl) {\n    if (this.trackedLinkElements.has(linkEl)) return;\n    this.trackedLinkElements.add(linkEl);\n    this.trackStylesheetInLinkElement(linkEl);\n  }\n  adoptStyleSheets(sheets, hostId) {\n    if (sheets.length === 0) return;\n    const adoptedStyleSheetData = {\n      id: hostId,\n      styleIds: []\n    };\n    const styles = [];\n    for (const sheet of sheets) {\n      let styleId;\n      if (!this.styleMirror.has(sheet)) {\n        styleId = this.styleMirror.add(sheet);\n        styles.push({\n          styleId,\n          rules: Array.from(sheet.rules || CSSRule, (r2, index) => ({\n            rule: stringifyRule(r2),\n            index\n          }))\n        });\n      } else styleId = this.styleMirror.getId(sheet);\n      adoptedStyleSheetData.styleIds.push(styleId);\n    }\n    if (styles.length > 0) adoptedStyleSheetData.styles = styles;\n    this.adoptedStyleSheetCb(adoptedStyleSheetData);\n  }\n  reset() {\n    this.styleMirror.reset();\n    this.trackedLinkElements = /* @__PURE__ */ new WeakSet();\n  }\n  // TODO: take snapshot on stylesheet reload by applying event listener\n  trackStylesheetInLinkElement(_linkEl) {\n  }\n}\nclass ProcessedNodeManager {\n  constructor() {\n    this.nodeMap = /* @__PURE__ */ new WeakMap();\n    this.active = false;\n  }\n  inOtherBuffer(node, thisBuffer) {\n    const buffers = this.nodeMap.get(node);\n    return buffers && Array.from(buffers).some((buffer) => buffer !== thisBuffer);\n  }\n  add(node, buffer) {\n    if (!this.active) {\n      this.active = true;\n      onRequestAnimationFrame(() => {\n        this.nodeMap = /* @__PURE__ */ new WeakMap();\n        this.active = false;\n      });\n    }\n    this.nodeMap.set(node, (this.nodeMap.get(node) || /* @__PURE__ */ new Set()).add(buffer));\n  }\n  destroy() {\n  }\n}\nlet wrappedEmit;\nlet _takeFullSnapshot;\ntry {\n  if (Array.from([1], (x) => x * 2)[0] !== 2) {\n    const cleanFrame = document.createElement(\"iframe\");\n    document.body.appendChild(cleanFrame);\n    Array.from = cleanFrame.contentWindow?.Array.from || Array.from;\n    document.body.removeChild(cleanFrame);\n  }\n} catch (err) {\n  console.debug(\"Unable to override Array.from\", err);\n}\nconst mirror = createMirror();\nfunction record(options = {}) {\n  const {\n    emit,\n    checkoutEveryNms,\n    checkoutEveryNth,\n    blockClass = \"rr-block\",\n    blockSelector = null,\n    unblockSelector = null,\n    ignoreClass = \"rr-ignore\",\n    ignoreSelector = null,\n    maskAllText = false,\n    maskTextClass = \"rr-mask\",\n    unmaskTextClass = null,\n    maskTextSelector = null,\n    unmaskTextSelector = null,\n    inlineStylesheet = true,\n    maskAllInputs,\n    maskInputOptions: _maskInputOptions,\n    slimDOMOptions: _slimDOMOptions,\n    maskAttributeFn,\n    maskInputFn,\n    maskTextFn,\n    maxCanvasSize = null,\n    packFn,\n    sampling = {},\n    dataURLOptions = {},\n    mousemoveWait,\n    recordDOM = true,\n    recordCanvas = false,\n    recordCrossOriginIframes = false,\n    recordAfter = options.recordAfter === \"DOMContentLoaded\" ? options.recordAfter : \"load\",\n    userTriggeredOnInput = false,\n    collectFonts = false,\n    inlineImages = false,\n    plugins,\n    keepIframeSrcFn = () => false,\n    ignoreCSSAttributes = /* @__PURE__ */ new Set([]),\n    errorHandler,\n    onMutation,\n    getCanvasManager\n  } = options;\n  registerErrorHandler(errorHandler);\n  const inEmittingFrame = recordCrossOriginIframes ? window.parent === window : true;\n  let passEmitsToParent = false;\n  if (!inEmittingFrame) {\n    try {\n      if (window.parent.document) {\n        passEmitsToParent = false;\n      }\n    } catch (e2) {\n      passEmitsToParent = true;\n    }\n  }\n  if (inEmittingFrame && !emit) {\n    throw new Error(\"emit function is required\");\n  }\n  if (!inEmittingFrame && !passEmitsToParent) {\n    return () => {\n    };\n  }\n  if (mousemoveWait !== void 0 && sampling.mousemove === void 0) {\n    sampling.mousemove = mousemoveWait;\n  }\n  mirror.reset();\n  const maskInputOptions = maskAllInputs === true ? {\n    color: true,\n    date: true,\n    \"datetime-local\": true,\n    email: true,\n    month: true,\n    number: true,\n    range: true,\n    search: true,\n    tel: true,\n    text: true,\n    time: true,\n    url: true,\n    week: true,\n    textarea: true,\n    select: true,\n    radio: true,\n    checkbox: true\n  } : _maskInputOptions !== void 0 ? _maskInputOptions : {};\n  const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === \"all\" ? {\n    script: true,\n    comment: true,\n    headFavicon: true,\n    headWhitespace: true,\n    headMetaSocial: true,\n    headMetaRobots: true,\n    headMetaHttpEquiv: true,\n    headMetaVerification: true,\n    // the following are off for slimDOMOptions === true,\n    // as they destroy some (hidden) info:\n    headMetaAuthorship: _slimDOMOptions === \"all\",\n    headMetaDescKeywords: _slimDOMOptions === \"all\"\n  } : _slimDOMOptions ? _slimDOMOptions : {};\n  polyfill();\n  let lastFullSnapshotEvent;\n  let incrementalSnapshotCount = 0;\n  const eventProcessor = (e2) => {\n    for (const plugin of plugins || []) {\n      if (plugin.eventProcessor) {\n        e2 = plugin.eventProcessor(e2);\n      }\n    }\n    if (packFn && // Disable packing events which will be emitted to parent frames.\n    !passEmitsToParent) {\n      e2 = packFn(e2);\n    }\n    return e2;\n  };\n  wrappedEmit = (r2, isCheckout) => {\n    const e2 = r2;\n    e2.timestamp = nowTimestamp();\n    if (mutationBuffers[0]?.isFrozen() && e2.type !== EventType.FullSnapshot && !(e2.type === EventType.IncrementalSnapshot && e2.data.source === IncrementalSource.Mutation)) {\n      mutationBuffers.forEach((buf) => buf.unfreeze());\n    }\n    if (inEmittingFrame) {\n      emit?.(eventProcessor(e2), isCheckout);\n    } else if (passEmitsToParent) {\n      const message = {\n        type: \"rrweb\",\n        event: eventProcessor(e2),\n        origin: window.location.origin,\n        isCheckout\n      };\n      window.parent.postMessage(message, \"*\");\n    }\n    if (e2.type === EventType.FullSnapshot) {\n      lastFullSnapshotEvent = e2;\n      incrementalSnapshotCount = 0;\n    } else if (e2.type === EventType.IncrementalSnapshot) {\n      if (e2.data.source === IncrementalSource.Mutation && e2.data.isAttachIframe) {\n        return;\n      }\n      incrementalSnapshotCount++;\n      const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\n      const exceedTime = checkoutEveryNms && lastFullSnapshotEvent && e2.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\n      if (exceedCount || exceedTime) {\n        takeFullSnapshot2(true);\n      }\n    }\n  };\n  const wrappedMutationEmit = (m) => {\n    wrappedEmit({\n      type: EventType.IncrementalSnapshot,\n      data: {\n        source: IncrementalSource.Mutation,\n        ...m\n      }\n    });\n  };\n  const wrappedScrollEmit = (p) => wrappedEmit({\n    type: EventType.IncrementalSnapshot,\n    data: {\n      source: IncrementalSource.Scroll,\n      ...p\n    }\n  });\n  const wrappedCanvasMutationEmit = (p) => wrappedEmit({\n    type: EventType.IncrementalSnapshot,\n    data: {\n      source: IncrementalSource.CanvasMutation,\n      ...p\n    }\n  });\n  const wrappedAdoptedStyleSheetEmit = (a2) => wrappedEmit({\n    type: EventType.IncrementalSnapshot,\n    data: {\n      source: IncrementalSource.AdoptedStyleSheet,\n      ...a2\n    }\n  });\n  const stylesheetManager = new StylesheetManager({\n    mutationCb: wrappedMutationEmit,\n    adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit\n  });\n  const iframeManager = typeof __RRWEB_EXCLUDE_IFRAME__ === \"boolean\" && __RRWEB_EXCLUDE_IFRAME__ ? new IframeManagerNoop() : new IframeManager({\n    mirror,\n    mutationCb: wrappedMutationEmit,\n    stylesheetManager,\n    recordCrossOriginIframes,\n    wrappedEmit\n  });\n  for (const plugin of plugins || []) {\n    if (plugin.getMirror)\n      plugin.getMirror({\n        nodeMirror: mirror,\n        crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\n        crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror\n      });\n  }\n  const processedNodeManager = new ProcessedNodeManager();\n  const canvasManager = _getCanvasManager(\n    getCanvasManager,\n    {\n      mirror,\n      win: window,\n      mutationCb: (p) => wrappedEmit({\n        type: EventType.IncrementalSnapshot,\n        data: {\n          source: IncrementalSource.CanvasMutation,\n          ...p\n        }\n      }),\n      recordCanvas,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      maxCanvasSize,\n      sampling: sampling[\"canvas\"],\n      dataURLOptions,\n      errorHandler\n    }\n  );\n  const shadowDomManager = typeof __RRWEB_EXCLUDE_SHADOW_DOM__ === \"boolean\" && __RRWEB_EXCLUDE_SHADOW_DOM__ ? new ShadowDomManagerNoop() : new ShadowDomManager({\n    mutationCb: wrappedMutationEmit,\n    scrollCb: wrappedScrollEmit,\n    bypassOptions: {\n      onMutation,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      maskAllText,\n      maskTextClass,\n      unmaskTextClass,\n      maskTextSelector,\n      unmaskTextSelector,\n      inlineStylesheet,\n      maskInputOptions,\n      dataURLOptions,\n      maskAttributeFn,\n      maskTextFn,\n      maskInputFn,\n      recordCanvas,\n      inlineImages,\n      sampling,\n      slimDOMOptions,\n      iframeManager,\n      stylesheetManager,\n      canvasManager,\n      keepIframeSrcFn,\n      processedNodeManager,\n      ignoreCSSAttributes\n    },\n    mirror\n  });\n  const takeFullSnapshot2 = (isCheckout = false) => {\n    if (!recordDOM) {\n      return;\n    }\n    wrappedEmit(\n      {\n        type: EventType.Meta,\n        data: {\n          href: window.location.href,\n          width: getWindowWidth(),\n          height: getWindowHeight()\n        }\n      },\n      isCheckout\n    );\n    stylesheetManager.reset();\n    shadowDomManager.init();\n    mutationBuffers.forEach((buf) => buf.lock());\n    const node = snapshot(document, {\n      mirror,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      maskAllText,\n      maskTextClass,\n      unmaskTextClass,\n      maskTextSelector,\n      unmaskTextSelector,\n      inlineStylesheet,\n      maskAllInputs: maskInputOptions,\n      maskAttributeFn,\n      maskInputFn,\n      maskTextFn,\n      slimDOM: slimDOMOptions,\n      dataURLOptions,\n      recordCanvas,\n      inlineImages,\n      onSerialize: (n2) => {\n        if (isSerializedIframe(n2, mirror)) {\n          iframeManager.addIframe(n2);\n        }\n        if (isSerializedStylesheet(n2, mirror)) {\n          stylesheetManager.trackLinkElement(n2);\n        }\n        if (hasShadowRoot(n2)) {\n          shadowDomManager.addShadowRoot(n2.shadowRoot, document);\n        }\n      },\n      onIframeLoad: (iframe, childSn) => {\n        iframeManager.attachIframe(iframe, childSn);\n        const contentWindow = getIFrameContentWindow(iframe);\n        if (contentWindow) {\n          canvasManager.addWindow(contentWindow);\n        }\n        shadowDomManager.observeAttachShadow(iframe);\n      },\n      onStylesheetLoad: (linkEl, childSn) => {\n        stylesheetManager.attachLinkElement(linkEl, childSn);\n      },\n      onBlockedImageLoad: (_imageEl, serializedNode, { width, height }) => {\n        wrappedMutationEmit({\n          adds: [],\n          removes: [],\n          texts: [],\n          attributes: [\n            {\n              id: serializedNode.id,\n              attributes: {\n                style: {\n                  width: `${width}px`,\n                  height: `${height}px`\n                }\n              }\n            }\n          ]\n        });\n      },\n      keepIframeSrcFn,\n      ignoreCSSAttributes\n    });\n    if (!node) {\n      return console.warn(\"Failed to snapshot the document\");\n    }\n    wrappedEmit({\n      type: EventType.FullSnapshot,\n      data: {\n        node,\n        initialOffset: getWindowScroll(window)\n      }\n    });\n    mutationBuffers.forEach((buf) => buf.unlock());\n    if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\n      stylesheetManager.adoptStyleSheets(\n        document.adoptedStyleSheets,\n        mirror.getId(document)\n      );\n  };\n  _takeFullSnapshot = takeFullSnapshot2;\n  try {\n    const handlers = [];\n    const observe = (doc) => {\n      return callbackWrapper(initObservers)(\n        {\n          onMutation,\n          mutationCb: wrappedMutationEmit,\n          mousemoveCb: (positions, source) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source,\n              positions\n            }\n          }),\n          mouseInteractionCb: (d) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.MouseInteraction,\n              ...d\n            }\n          }),\n          scrollCb: wrappedScrollEmit,\n          viewportResizeCb: (d) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.ViewportResize,\n              ...d\n            }\n          }),\n          inputCb: (v2) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.Input,\n              ...v2\n            }\n          }),\n          mediaInteractionCb: (p) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.MediaInteraction,\n              ...p\n            }\n          }),\n          styleSheetRuleCb: (r2) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.StyleSheetRule,\n              ...r2\n            }\n          }),\n          styleDeclarationCb: (r2) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.StyleDeclaration,\n              ...r2\n            }\n          }),\n          canvasMutationCb: wrappedCanvasMutationEmit,\n          fontCb: (p) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.Font,\n              ...p\n            }\n          }),\n          selectionCb: (p) => {\n            wrappedEmit({\n              type: EventType.IncrementalSnapshot,\n              data: {\n                source: IncrementalSource.Selection,\n                ...p\n              }\n            });\n          },\n          customElementCb: (c2) => {\n            wrappedEmit({\n              type: EventType.IncrementalSnapshot,\n              data: {\n                source: IncrementalSource.CustomElement,\n                ...c2\n              }\n            });\n          },\n          blockClass,\n          ignoreClass,\n          ignoreSelector,\n          maskAllText,\n          maskTextClass,\n          unmaskTextClass,\n          maskTextSelector,\n          unmaskTextSelector,\n          maskInputOptions,\n          inlineStylesheet,\n          sampling,\n          recordDOM,\n          recordCanvas,\n          inlineImages,\n          userTriggeredOnInput,\n          collectFonts,\n          doc,\n          maskAttributeFn,\n          maskInputFn,\n          maskTextFn,\n          keepIframeSrcFn,\n          blockSelector,\n          unblockSelector,\n          slimDOMOptions,\n          dataURLOptions,\n          mirror,\n          iframeManager,\n          stylesheetManager,\n          shadowDomManager,\n          processedNodeManager,\n          canvasManager,\n          ignoreCSSAttributes,\n          plugins: plugins?.filter((p) => p.observer)?.map((p) => ({\n            observer: p.observer,\n            options: p.options,\n            callback: (payload) => wrappedEmit({\n              type: EventType.Plugin,\n              data: {\n                plugin: p.name,\n                payload\n              }\n            })\n          })) || []\n        },\n        {}\n      );\n    };\n    iframeManager.addLoadListener((iframeEl) => {\n      try {\n        handlers.push(observe(iframeEl.contentDocument));\n      } catch (error) {\n        console.warn(error);\n      }\n    });\n    const init = () => {\n      takeFullSnapshot2();\n      handlers.push(observe(document));\n    };\n    if (document.readyState === \"interactive\" || document.readyState === \"complete\") {\n      init();\n    } else {\n      handlers.push(\n        on(\"DOMContentLoaded\", () => {\n          wrappedEmit({\n            type: EventType.DomContentLoaded,\n            data: {}\n          });\n          if (recordAfter === \"DOMContentLoaded\") init();\n        })\n      );\n      handlers.push(\n        on(\n          \"load\",\n          () => {\n            wrappedEmit({\n              type: EventType.Load,\n              data: {}\n            });\n            if (recordAfter === \"load\") init();\n          },\n          window\n        )\n      );\n    }\n    return () => {\n      handlers.forEach((h) => h());\n      processedNodeManager.destroy();\n      _takeFullSnapshot = void 0;\n      unregisterErrorHandler();\n    };\n  } catch (error) {\n    console.warn(error);\n  }\n}\nfunction takeFullSnapshot(isCheckout) {\n  if (!_takeFullSnapshot) {\n    throw new Error(\"please take full snapshot after start recording\");\n  }\n  _takeFullSnapshot(isCheckout);\n}\nrecord.mirror = mirror;\nrecord.takeFullSnapshot = takeFullSnapshot;\nfunction _getCanvasManager(getCanvasManagerFn, options) {\n  try {\n    return getCanvasManagerFn ? getCanvasManagerFn(options) : new CanvasManagerNoop();\n  } catch {\n    console.warn(\"Unable to initialize CanvasManager\");\n    return new CanvasManagerNoop();\n  }\n}\nvar n;\n!(function(t2) {\n  t2[t2.NotStarted = 0] = \"NotStarted\", t2[t2.Running = 1] = \"Running\", t2[t2.Stopped = 2] = \"Stopped\";\n})(n || (n = {}));\n\nconst ReplayEventTypeIncrementalSnapshot = 3;\nconst ReplayEventTypeCustom = 5;\n\nfunction timestampToMs(timestamp) {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp : timestamp * 1e3;\n}\nfunction timestampToS(timestamp) {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp / 1e3 : timestamp;\n}\n\nfunction addBreadcrumbEvent(replay, breadcrumb) {\n  if (breadcrumb.category === \"sentry.transaction\") {\n    return;\n  }\n  if ([\"ui.click\", \"ui.input\"].includes(breadcrumb.category)) {\n    replay.triggerUserActivity();\n  } else {\n    replay.checkAndHandleExpiredSession();\n  }\n  replay.addUpdate(() => {\n    replay.throttledAddEvent({\n      type: EventType.Custom,\n      // TODO: We were converting from ms to seconds for breadcrumbs, spans,\n      // but maybe we should just keep them as milliseconds\n      timestamp: (breadcrumb.timestamp || 0) * 1e3,\n      data: {\n        tag: \"breadcrumb\",\n        // normalize to max. 10 depth and 1_000 properties per object\n        payload: normalize(breadcrumb, 10, 1e3)\n      }\n    });\n    return breadcrumb.category === \"console\";\n  });\n}\n\nconst INTERACTIVE_SELECTOR = \"button,a\";\nfunction getClosestInteractive(element) {\n  const closestInteractive = element.closest(INTERACTIVE_SELECTOR);\n  return closestInteractive || element;\n}\nfunction getClickTargetNode(event) {\n  const target = getTargetNode(event);\n  if (!target || !(target instanceof Element)) {\n    return target;\n  }\n  return getClosestInteractive(target);\n}\nfunction getTargetNode(event) {\n  if (isEventWithTarget(event)) {\n    return event.target;\n  }\n  return event;\n}\nfunction isEventWithTarget(event) {\n  return isObjectLike(event) && \"target\" in event;\n}\n\nlet handlers;\nfunction onWindowOpen(cb) {\n  if (!handlers) {\n    handlers = [];\n    monkeyPatchWindowOpen();\n  }\n  handlers.push(cb);\n  return () => {\n    const pos = handlers ? handlers.indexOf(cb) : -1;\n    if (pos > -1) {\n      handlers.splice(pos, 1);\n    }\n  };\n}\nfunction monkeyPatchWindowOpen() {\n  fill(WINDOW, \"open\", function(originalWindowOpen) {\n    return function(...args) {\n      if (handlers) {\n        try {\n          handlers.forEach((handler) => handler());\n        } catch {\n        }\n      }\n      return originalWindowOpen.apply(WINDOW, args);\n    };\n  });\n}\n\nconst IncrementalMutationSources = /* @__PURE__ */ new Set([\n  IncrementalSource.Mutation,\n  IncrementalSource.StyleSheetRule,\n  IncrementalSource.StyleDeclaration,\n  IncrementalSource.AdoptedStyleSheet,\n  IncrementalSource.CanvasMutation,\n  IncrementalSource.Selection,\n  IncrementalSource.MediaInteraction\n]);\nfunction handleClick(clickDetector, clickBreadcrumb, node) {\n  clickDetector.handleClick(clickBreadcrumb, node);\n}\nclass ClickDetector {\n  constructor(replay, slowClickConfig, _addBreadcrumbEvent = addBreadcrumbEvent) {\n    this._lastMutation = 0;\n    this._lastScroll = 0;\n    this._clicks = [];\n    this._timeout = slowClickConfig.timeout / 1e3;\n    this._threshold = slowClickConfig.threshold / 1e3;\n    this._scrollTimeout = slowClickConfig.scrollTimeout / 1e3;\n    this._replay = replay;\n    this._ignoreSelector = slowClickConfig.ignoreSelector;\n    this._addBreadcrumbEvent = _addBreadcrumbEvent;\n  }\n  /** Register click detection handlers on mutation or scroll. */\n  addListeners() {\n    const cleanupWindowOpen = onWindowOpen(() => {\n      this._lastMutation = nowInSeconds();\n    });\n    this._teardown = () => {\n      cleanupWindowOpen();\n      this._clicks = [];\n      this._lastMutation = 0;\n      this._lastScroll = 0;\n    };\n  }\n  /** Clean up listeners. */\n  removeListeners() {\n    if (this._teardown) {\n      this._teardown();\n    }\n    if (this._checkClickTimeout) {\n      clearTimeout(this._checkClickTimeout);\n    }\n  }\n  /** @inheritDoc */\n  handleClick(breadcrumb, node) {\n    if (ignoreElement(node, this._ignoreSelector) || !isClickBreadcrumb(breadcrumb)) {\n      return;\n    }\n    const newClick = {\n      timestamp: timestampToS(breadcrumb.timestamp),\n      clickBreadcrumb: breadcrumb,\n      // Set this to 0 so we know it originates from the click breadcrumb\n      clickCount: 0,\n      node\n    };\n    if (this._clicks.some((click) => click.node === newClick.node && Math.abs(click.timestamp - newClick.timestamp) < 1)) {\n      return;\n    }\n    this._clicks.push(newClick);\n    if (this._clicks.length === 1) {\n      this._scheduleCheckClicks();\n    }\n  }\n  /** @inheritDoc */\n  registerMutation(timestamp = Date.now()) {\n    this._lastMutation = timestampToS(timestamp);\n  }\n  /** @inheritDoc */\n  registerScroll(timestamp = Date.now()) {\n    this._lastScroll = timestampToS(timestamp);\n  }\n  /** @inheritDoc */\n  registerClick(element) {\n    const node = getClosestInteractive(element);\n    this._handleMultiClick(node);\n  }\n  /** Count multiple clicks on elements. */\n  _handleMultiClick(node) {\n    this._getClicks(node).forEach((click) => {\n      click.clickCount++;\n    });\n  }\n  /** Get all pending clicks for a given node. */\n  _getClicks(node) {\n    return this._clicks.filter((click) => click.node === node);\n  }\n  /** Check the clicks that happened. */\n  _checkClicks() {\n    const timedOutClicks = [];\n    const now = nowInSeconds();\n    this._clicks.forEach((click) => {\n      if (!click.mutationAfter && this._lastMutation) {\n        click.mutationAfter = click.timestamp <= this._lastMutation ? this._lastMutation - click.timestamp : void 0;\n      }\n      if (!click.scrollAfter && this._lastScroll) {\n        click.scrollAfter = click.timestamp <= this._lastScroll ? this._lastScroll - click.timestamp : void 0;\n      }\n      if (click.timestamp + this._timeout <= now) {\n        timedOutClicks.push(click);\n      }\n    });\n    for (const click of timedOutClicks) {\n      const pos = this._clicks.indexOf(click);\n      if (pos > -1) {\n        this._generateBreadcrumbs(click);\n        this._clicks.splice(pos, 1);\n      }\n    }\n    if (this._clicks.length) {\n      this._scheduleCheckClicks();\n    }\n  }\n  /** Generate matching breadcrumb(s) for the click. */\n  _generateBreadcrumbs(click) {\n    const replay = this._replay;\n    const hadScroll = click.scrollAfter && click.scrollAfter <= this._scrollTimeout;\n    const hadMutation = click.mutationAfter && click.mutationAfter <= this._threshold;\n    const isSlowClick = !hadScroll && !hadMutation;\n    const { clickCount, clickBreadcrumb } = click;\n    if (isSlowClick) {\n      const timeAfterClickMs = Math.min(click.mutationAfter || this._timeout, this._timeout) * 1e3;\n      const endReason = timeAfterClickMs < this._timeout * 1e3 ? \"mutation\" : \"timeout\";\n      const breadcrumb = {\n        type: \"default\",\n        message: clickBreadcrumb.message,\n        timestamp: clickBreadcrumb.timestamp,\n        category: \"ui.slowClickDetected\",\n        data: {\n          ...clickBreadcrumb.data,\n          url: WINDOW.location.href,\n          route: replay.getCurrentRoute(),\n          timeAfterClickMs,\n          endReason,\n          // If clickCount === 0, it means multiClick was not correctly captured here\n          // - we still want to send 1 in this case\n          clickCount: clickCount || 1\n        }\n      };\n      this._addBreadcrumbEvent(replay, breadcrumb);\n      return;\n    }\n    if (clickCount > 1) {\n      const breadcrumb = {\n        type: \"default\",\n        message: clickBreadcrumb.message,\n        timestamp: clickBreadcrumb.timestamp,\n        category: \"ui.multiClick\",\n        data: {\n          ...clickBreadcrumb.data,\n          url: WINDOW.location.href,\n          route: replay.getCurrentRoute(),\n          clickCount,\n          metric: true\n        }\n      };\n      this._addBreadcrumbEvent(replay, breadcrumb);\n    }\n  }\n  /** Schedule to check current clicks. */\n  _scheduleCheckClicks() {\n    if (this._checkClickTimeout) {\n      clearTimeout(this._checkClickTimeout);\n    }\n    this._checkClickTimeout = setTimeout$3(() => this._checkClicks(), 1e3);\n  }\n}\nconst SLOW_CLICK_TAGS = [\"A\", \"BUTTON\", \"INPUT\"];\nfunction ignoreElement(node, ignoreSelector) {\n  if (!SLOW_CLICK_TAGS.includes(node.tagName)) {\n    return true;\n  }\n  if (node.tagName === \"INPUT\" && ![\"submit\", \"button\"].includes(node.getAttribute(\"type\") || \"\")) {\n    return true;\n  }\n  if (node.tagName === \"A\" && (node.hasAttribute(\"download\") || node.hasAttribute(\"target\") && node.getAttribute(\"target\") !== \"_self\")) {\n    return true;\n  }\n  if (ignoreSelector && node.matches(ignoreSelector)) {\n    return true;\n  }\n  return false;\n}\nfunction isClickBreadcrumb(breadcrumb) {\n  return !!(breadcrumb.data && typeof breadcrumb.data.nodeId === \"number\" && breadcrumb.timestamp);\n}\nfunction nowInSeconds() {\n  return Date.now() / 1e3;\n}\nfunction updateClickDetectorForRecordingEvent(clickDetector, event) {\n  try {\n    if (!isIncrementalEvent(event)) {\n      return;\n    }\n    const { source } = event.data;\n    if (IncrementalMutationSources.has(source)) {\n      clickDetector.registerMutation(event.timestamp);\n    }\n    if (source === IncrementalSource.Scroll) {\n      clickDetector.registerScroll(event.timestamp);\n    }\n    if (isIncrementalMouseInteraction(event)) {\n      const { type, id } = event.data;\n      const node = record.mirror.getNode(id);\n      if (node instanceof HTMLElement && type === MouseInteractions.Click) {\n        clickDetector.registerClick(node);\n      }\n    }\n  } catch {\n  }\n}\nfunction isIncrementalEvent(event) {\n  return event.type === ReplayEventTypeIncrementalSnapshot;\n}\nfunction isIncrementalMouseInteraction(event) {\n  return event.data.source === IncrementalSource.MouseInteraction;\n}\n\nfunction createBreadcrumb(breadcrumb) {\n  return {\n    timestamp: Date.now() / 1e3,\n    type: \"default\",\n    ...breadcrumb\n  };\n}\n\nvar NodeType = /* @__PURE__ */ ((NodeType2) => {\n  NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n  NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n  NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n  NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n  NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n  NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n  return NodeType2;\n})(NodeType || {});\n\nconst ATTRIBUTES_TO_RECORD = /* @__PURE__ */ new Set([\n  \"id\",\n  \"class\",\n  \"aria-label\",\n  \"role\",\n  \"name\",\n  \"alt\",\n  \"title\",\n  \"data-test-id\",\n  \"data-testid\",\n  \"disabled\",\n  \"aria-disabled\",\n  \"data-sentry-component\"\n]);\nconst BREADCRUMB_RELEVANT_ATTRIBUTES = /* @__PURE__ */ new Set([...ATTRIBUTES_TO_RECORD, \"data-sentry-element\"]);\nfunction getAttributesToRecord(attributes) {\n  const obj = {};\n  for (const key in attributes) {\n    if (ATTRIBUTES_TO_RECORD.has(key)) {\n      let normalizedKey = key;\n      if (key === \"data-testid\" || key === \"data-test-id\") {\n        normalizedKey = \"testId\";\n      }\n      obj[normalizedKey] = attributes[key];\n    }\n  }\n  if (!obj[\"data-sentry-component\"] && attributes[\"data-sentry-element\"]) {\n    obj[\"data-sentry-component\"] = attributes[\"data-sentry-element\"];\n  }\n  return obj;\n}\n\nconst handleDomListener = (replay) => {\n  return (handlerData) => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n    const result = handleDom(handlerData);\n    if (!result) {\n      return;\n    }\n    const isClick = handlerData.name === \"click\";\n    const event = isClick ? handlerData.event : void 0;\n    if (isClick && replay.clickDetector && event?.target && !event.altKey && !event.metaKey && !event.ctrlKey && !event.shiftKey) {\n      handleClick(replay.clickDetector, result, getClickTargetNode(handlerData.event));\n    }\n    addBreadcrumbEvent(replay, result);\n  };\n};\nfunction getBaseDomBreadcrumb(target, message) {\n  const nodeId = record.mirror.getId(target);\n  const node = nodeId && record.mirror.getNode(nodeId);\n  const meta = node && record.mirror.getMeta(node);\n  const element = meta && isElement(meta) ? meta : null;\n  return {\n    message,\n    data: element ? {\n      nodeId,\n      node: {\n        id: nodeId,\n        tagName: element.tagName,\n        textContent: Array.from(element.childNodes).map((node2) => node2.type === NodeType.Text && node2.textContent).filter(Boolean).map((text) => text.trim()).join(\"\"),\n        attributes: getAttributesToRecord(element.attributes)\n      }\n    } : {}\n  };\n}\nfunction handleDom(handlerData) {\n  const { target, message } = getDomTarget(handlerData);\n  return createBreadcrumb({\n    category: `ui.${handlerData.name}`,\n    ...getBaseDomBreadcrumb(target, message)\n  });\n}\nfunction getDomTarget(handlerData) {\n  const isClick = handlerData.name === \"click\";\n  let message;\n  let target = null;\n  try {\n    target = isClick ? getClickTargetNode(handlerData.event) : getTargetNode(handlerData.event);\n    message = htmlTreeAsString(target, { maxStringLength: 200 }) || \"<unknown>\";\n  } catch {\n    message = \"<unknown>\";\n  }\n  return { target, message };\n}\nfunction isElement(node) {\n  return node.type === NodeType.Element;\n}\n\nfunction handleKeyboardEvent(replay, event) {\n  if (!replay.isEnabled()) {\n    return;\n  }\n  replay.updateUserActivity();\n  const breadcrumb = getKeyboardBreadcrumb(event);\n  if (!breadcrumb) {\n    return;\n  }\n  addBreadcrumbEvent(replay, breadcrumb);\n}\nfunction getKeyboardBreadcrumb(event) {\n  const { metaKey, shiftKey, ctrlKey, altKey, key, target } = event;\n  if (!target || isInputElement(target) || !key) {\n    return null;\n  }\n  const hasModifierKey = metaKey || ctrlKey || altKey;\n  const isCharacterKey = key.length === 1;\n  if (!hasModifierKey && isCharacterKey) {\n    return null;\n  }\n  const message = htmlTreeAsString(target, { maxStringLength: 200 }) || \"<unknown>\";\n  const baseBreadcrumb = getBaseDomBreadcrumb(target, message);\n  return createBreadcrumb({\n    category: \"ui.keyDown\",\n    message,\n    data: {\n      ...baseBreadcrumb.data,\n      metaKey,\n      shiftKey,\n      ctrlKey,\n      altKey,\n      key\n    }\n  });\n}\nfunction isInputElement(target) {\n  return target.tagName === \"INPUT\" || target.tagName === \"TEXTAREA\" || target.isContentEditable;\n}\n\nconst ENTRY_TYPES = {\n  // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n  resource: createResourceEntry,\n  // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n  paint: createPaintEntry,\n  // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n  navigation: createNavigationEntry\n};\nfunction webVitalHandler(getter, replay) {\n  return ({ metric }) => void replay.replayPerformanceEntries.push(getter(metric));\n}\nfunction createPerformanceEntries(entries) {\n  return entries.map(createPerformanceEntry).filter(Boolean);\n}\nfunction createPerformanceEntry(entry) {\n  const entryType = ENTRY_TYPES[entry.entryType];\n  if (!entryType) {\n    return null;\n  }\n  return entryType(entry);\n}\nfunction getAbsoluteTime(time, entryStartTime = time) {\n  return _INTERNAL_performanceTimeToSeconds(time, entryStartTime);\n}\nfunction createPaintEntry(entry) {\n  const { duration, entryType, name, startTime } = entry;\n  const start = getAbsoluteTime(startTime);\n  return {\n    type: entryType,\n    name,\n    start,\n    end: start + duration,\n    data: void 0\n  };\n}\nfunction createNavigationEntry(entry) {\n  const {\n    entryType,\n    name,\n    decodedBodySize,\n    duration,\n    domComplete,\n    encodedBodySize,\n    domContentLoadedEventStart,\n    domContentLoadedEventEnd,\n    domInteractive,\n    loadEventStart,\n    loadEventEnd,\n    redirectCount,\n    startTime,\n    transferSize,\n    type\n  } = entry;\n  if (duration === 0) {\n    return null;\n  }\n  return {\n    type: `${entryType}.${type}`,\n    start: getAbsoluteTime(startTime),\n    end: getAbsoluteTime(domComplete, startTime),\n    name,\n    data: {\n      size: transferSize,\n      decodedBodySize,\n      encodedBodySize,\n      duration,\n      domInteractive,\n      domContentLoadedEventStart,\n      domContentLoadedEventEnd,\n      loadEventStart,\n      loadEventEnd,\n      domComplete,\n      redirectCount\n    }\n  };\n}\nfunction createResourceEntry(entry) {\n  const {\n    entryType,\n    initiatorType,\n    name,\n    responseEnd,\n    startTime,\n    decodedBodySize,\n    encodedBodySize,\n    responseStatus,\n    transferSize\n  } = entry;\n  if ([\"fetch\", \"xmlhttprequest\"].includes(initiatorType)) {\n    return null;\n  }\n  return {\n    type: `${entryType}.${initiatorType}`,\n    start: getAbsoluteTime(startTime),\n    end: getAbsoluteTime(responseEnd, startTime),\n    name,\n    data: {\n      size: transferSize,\n      statusCode: responseStatus,\n      decodedBodySize,\n      encodedBodySize\n    }\n  };\n}\nfunction getLargestContentfulPaint(metric) {\n  const lastEntry = metric.entries[metric.entries.length - 1];\n  const node = lastEntry?.element ? [lastEntry.element] : void 0;\n  return getWebVital(metric, \"largest-contentful-paint\", node);\n}\nfunction isLayoutShift(entry) {\n  return entry.sources !== void 0;\n}\nfunction getCumulativeLayoutShift(metric) {\n  const layoutShifts = [];\n  const nodes = [];\n  for (const entry of metric.entries) {\n    if (isLayoutShift(entry)) {\n      const nodeIds = [];\n      for (const source of entry.sources) {\n        if (source.node) {\n          nodes.push(source.node);\n          const nodeId = record.mirror.getId(source.node);\n          if (nodeId) {\n            nodeIds.push(nodeId);\n          }\n        }\n      }\n      layoutShifts.push({ value: entry.value, nodeIds: nodeIds.length ? nodeIds : void 0 });\n    }\n  }\n  return getWebVital(metric, \"cumulative-layout-shift\", nodes, layoutShifts);\n}\nfunction getInteractionToNextPaint(metric) {\n  const lastEntry = metric.entries[metric.entries.length - 1];\n  const node = lastEntry?.target ? [lastEntry.target] : void 0;\n  return getWebVital(metric, \"interaction-to-next-paint\", node);\n}\nfunction getWebVital(metric, name, nodes, attributions) {\n  const value = metric.value;\n  const rating = metric.rating;\n  const lastEntry = metric.entries[metric.entries.length - 1];\n  const end = getAbsoluteTime(lastEntry?.startTime ?? (metric.navigationStartTime ?? 0) + value);\n  return {\n    type: \"web-vital\",\n    name,\n    start: end,\n    end,\n    data: {\n      value,\n      size: value,\n      rating,\n      nodeIds: nodes ? nodes.map((node) => record.mirror.getId(node)) : void 0,\n      attributions\n    }\n  };\n}\n\nfunction setupPerformanceObserver(replay) {\n  function addPerformanceEntry(entry) {\n    if (!replay.performanceEntries.includes(entry)) {\n      replay.performanceEntries.push(entry);\n    }\n  }\n  function onEntries({ entries }) {\n    entries.forEach(addPerformanceEntry);\n  }\n  const clearCallbacks = [];\n  [\"navigation\", \"paint\", \"resource\"].forEach((type) => {\n    clearCallbacks.push(addPerformanceInstrumentationHandler(type, onEntries));\n  });\n  clearCallbacks.push(\n    addLcpInstrumentationHandler(webVitalHandler(getLargestContentfulPaint, replay)),\n    addClsInstrumentationHandler(webVitalHandler(getCumulativeLayoutShift, replay)),\n    addInpInstrumentationHandler(webVitalHandler(getInteractionToNextPaint, replay))\n  );\n  return () => {\n    clearCallbacks.forEach((clearCallback) => clearCallback());\n  };\n}\n\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nconst t = `var t=Uint8Array,r=Uint16Array,n=Int32Array,e=new t([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),i=new t([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),s=new t([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var i=new r(31),s=0;s<31;++s)i[s]=e+=1<<t[s-1];var a=new n(i[30]);for(s=1;s<30;++s)for(var o=i[s];o<i[s+1];++o)a[o]=o-i[s]<<5|s;return{b:i,r:a}},o=a(e,2),h=o.b,f=o.r;h[28]=258,f[258]=28;for(var l=a(i,0).r,u=new r(32768),c=0;c<32768;++c){var v=(43690&c)>>1|(21845&c)<<1;v=(61680&(v=(52428&v)>>2|(13107&v)<<2))>>4|(3855&v)<<4,u[c]=((65280&v)>>8|(255&v)<<8)>>1}var d=function(t,n,e){for(var i=t.length,s=0,a=new r(n);s<i;++s)t[s]&&++a[t[s]-1];var o,h=new r(n);for(s=1;s<n;++s)h[s]=h[s-1]+a[s-1]<<1;if(e){o=new r(1<<n);var f=15-n;for(s=0;s<i;++s)if(t[s])for(var l=s<<4|t[s],c=n-t[s],v=h[t[s]-1]++<<c,d=v|(1<<c)-1;v<=d;++v)o[u[v]>>f]=l}else for(o=new r(i),s=0;s<i;++s)t[s]&&(o[s]=u[h[t[s]-1]++]>>15-t[s]);return o},p=new t(288);for(c=0;c<144;++c)p[c]=8;for(c=144;c<256;++c)p[c]=9;for(c=256;c<280;++c)p[c]=7;for(c=280;c<288;++c)p[c]=8;var g=new t(32);for(c=0;c<32;++c)g[c]=5;var w=d(p,9,0),y=d(g,5,0),m=function(t){return(t+7)/8|0},b=function(r,n,e){return(null==e||e>r.length)&&(e=r.length),new t(r.subarray(n,e))},M=[\"unexpected EOF\",\"invalid block type\",\"invalid length/literal\",\"invalid distance\",\"stream finished\",\"no stream handler\",,\"no callback\",\"invalid UTF-8 data\",\"extra field too long\",\"date not in range 1980-2099\",\"filename too long\",\"stream finishing\",\"invalid zip data\"],E=function(t,r,n){var e=new Error(r||M[t]);if(e.code=t,Error.captureStackTrace&&Error.captureStackTrace(e,E),!n)throw e;return e},z=function(t,r,n){n<<=7&r;var e=r/8|0;t[e]|=n,t[e+1]|=n>>8},_=function(t,r,n){n<<=7&r;var e=r/8|0;t[e]|=n,t[e+1]|=n>>8,t[e+2]|=n>>16},x=function(n,e){for(var i=[],s=0;s<n.length;++s)n[s]&&i.push({s:s,f:n[s]});var a=i.length,o=i.slice();if(!a)return{t:F,l:0};if(1==a){var h=new t(i[0].s+1);return h[i[0].s]=1,{t:h,l:1}}i.sort(function(t,r){return t.f-r.f}),i.push({s:-1,f:25001});var f=i[0],l=i[1],u=0,c=1,v=2;for(i[0]={s:-1,f:f.f+l.f,l:f,r:l};c!=a-1;)f=i[i[u].f<i[v].f?u++:v++],l=i[u!=c&&i[u].f<i[v].f?u++:v++],i[c++]={s:-1,f:f.f+l.f,l:f,r:l};var d=o[0].s;for(s=1;s<a;++s)o[s].s>d&&(d=o[s].s);var p=new r(d+1),g=A(i[c-1],p,0);if(g>e){s=0;var w=0,y=g-e,m=1<<y;for(o.sort(function(t,r){return p[r.s]-p[t.s]||t.f-r.f});s<a;++s){var b=o[s].s;if(!(p[b]>e))break;w+=m-(1<<g-p[b]),p[b]=e}for(w>>=y;w>0;){var M=o[s].s;p[M]<e?w-=1<<e-p[M]++-1:++s}for(;s>=0&&w;--s){var E=o[s].s;p[E]==e&&(--p[E],++w)}g=e}return{t:new t(p),l:g}},A=function(t,r,n){return-1==t.s?Math.max(A(t.l,r,n+1),A(t.r,r,n+1)):r[t.s]=n},D=function(t){for(var n=t.length;n&&!t[--n];);for(var e=new r(++n),i=0,s=t[0],a=1,o=function(t){e[i++]=t},h=1;h<=n;++h)if(t[h]==s&&h!=n)++a;else{if(!s&&a>2){for(;a>138;a-=138)o(32754);a>2&&(o(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(o(s),--a;a>6;a-=6)o(8304);a>2&&(o(a-3<<5|8208),a=0)}for(;a--;)o(s);a=1,s=t[h]}return{c:e.subarray(0,i),n:n}},T=function(t,r){for(var n=0,e=0;e<r.length;++e)n+=t[e]*r[e];return n},k=function(t,r,n){var e=n.length,i=m(r+2);t[i]=255&e,t[i+1]=e>>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var s=0;s<e;++s)t[i+s+4]=n[s];return 8*(i+4+e)},U=function(t,n,a,o,h,f,l,u,c,v,m){z(n,m++,a),++h[256];for(var b=x(h,15),M=b.t,E=b.l,A=x(f,15),U=A.t,C=A.l,F=D(M),I=F.c,S=F.n,L=D(U),O=L.c,j=L.n,q=new r(19),B=0;B<I.length;++B)++q[31&I[B]];for(B=0;B<O.length;++B)++q[31&O[B]];for(var G=x(q,7),H=G.t,J=G.l,K=19;K>4&&!H[s[K-1]];--K);var N,P,Q,R,V=v+5<<3,W=T(h,p)+T(f,g)+l,X=T(h,M)+T(f,U)+l+14+3*K+T(q,H)+2*q[16]+3*q[17]+7*q[18];if(c>=0&&V<=W&&V<=X)return k(n,m,t.subarray(c,c+v));if(z(n,m,1+(X<W)),m+=2,X<W){N=d(M,E,0),P=M,Q=d(U,C,0),R=U;var Y=d(H,J,0);z(n,m,S-257),z(n,m+5,j-1),z(n,m+10,K-4),m+=14;for(B=0;B<K;++B)z(n,m+3*B,H[s[B]]);m+=3*K;for(var Z=[I,O],$=0;$<2;++$){var tt=Z[$];for(B=0;B<tt.length;++B){var rt=31&tt[B];z(n,m,Y[rt]),m+=H[rt],rt>15&&(z(n,m,tt[B]>>5&127),m+=tt[B]>>12)}}}else N=w,P=p,Q=y,R=g;for(B=0;B<u;++B){var nt=o[B];if(nt>255){_(n,m,N[(rt=nt>>18&31)+257]),m+=P[rt+257],rt>7&&(z(n,m,nt>>23&31),m+=e[rt]);var et=31&nt;_(n,m,Q[et]),m+=R[et],et>3&&(_(n,m,nt>>5&8191),m+=i[et])}else _(n,m,N[nt]),m+=P[nt]}return _(n,m,N[256]),m+P[256]},C=new n([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),F=new t(0),I=function(){for(var t=new Int32Array(256),r=0;r<256;++r){for(var n=r,e=9;--e;)n=(1&n&&-306674912)^n>>>1;t[r]=n}return t}(),S=function(){var t=1,r=0;return{p:function(n){for(var e=t,i=r,s=0|n.length,a=0;a!=s;){for(var o=Math.min(a+2655,s);a<o;++a)i+=e+=n[a];e=(65535&e)+15*(e>>16),i=(65535&i)+15*(i>>16)}t=e,r=i},d:function(){return(255&(t%=65521))<<24|(65280&t)<<8|(255&(r%=65521))<<8|r>>8}}},L=function(s,a,o,h,u){if(!u&&(u={l:1},a.dictionary)){var c=a.dictionary.subarray(-32768),v=new t(c.length+s.length);v.set(c),v.set(s,c.length),s=v,u.w=c.length}return function(s,a,o,h,u,c){var v=c.z||s.length,d=new t(h+v+5*(1+Math.ceil(v/7e3))+u),p=d.subarray(h,d.length-u),g=c.l,w=7&(c.r||0);if(a){w&&(p[0]=c.r>>3);for(var y=C[a-1],M=y>>13,E=8191&y,z=(1<<o)-1,_=c.p||new r(32768),x=c.h||new r(z+1),A=Math.ceil(o/3),D=2*A,T=function(t){return(s[t]^s[t+1]<<A^s[t+2]<<D)&z},F=new n(25e3),I=new r(288),S=new r(32),L=0,O=0,j=c.i||0,q=0,B=c.w||0,G=0;j+2<v;++j){var H=T(j),J=32767&j,K=x[H];if(_[J]=K,x[H]=J,B<=j){var N=v-j;if((L>7e3||q>24576)&&(N>423||!g)){w=U(s,p,0,F,I,S,O,q,G,j-G,w),q=L=O=0,G=j;for(var P=0;P<286;++P)I[P]=0;for(P=0;P<30;++P)S[P]=0}var Q=2,R=0,V=E,W=J-K&32767;if(N>2&&H==T(j-W))for(var X=Math.min(M,N)-1,Y=Math.min(32767,j),Z=Math.min(258,N);W<=Y&&--V&&J!=K;){if(s[j+Q]==s[j+Q-W]){for(var $=0;$<Z&&s[j+$]==s[j+$-W];++$);if($>Q){if(Q=$,R=W,$>X)break;var tt=Math.min(W,$-2),rt=0;for(P=0;P<tt;++P){var nt=j-W+P&32767,et=nt-_[nt]&32767;et>rt&&(rt=et,K=nt)}}}W+=(J=K)-(K=_[J])&32767}if(R){F[q++]=268435456|f[Q]<<18|l[R];var it=31&f[Q],st=31&l[R];O+=e[it]+i[st],++I[257+it],++S[st],B=j+Q,++L}else F[q++]=s[j],++I[s[j]]}}for(j=Math.max(j,B);j<v;++j)F[q++]=s[j],++I[s[j]];w=U(s,p,g,F,I,S,O,q,G,j-G,w),g||(c.r=7&w|p[w/8|0]<<3,w-=7,c.h=x,c.p=_,c.i=j,c.w=B)}else{for(j=c.w||0;j<v+g;j+=65535){var at=j+65535;at>=v&&(p[w/8|0]=g,at=v),w=k(p,w+1,s.subarray(j,at))}c.i=v}return b(d,0,h+m(w)+u)}(s,null==a.level?6:a.level,null==a.mem?u.l?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(s.length)))):20:12+a.mem,o,h,u)},O=function(t,r,n){for(;n;++r)t[r]=n,n>>>=8},j=function(){function r(r,n){if(\"function\"==typeof r&&(n=r,r={}),this.ondata=n,this.o=r||{},this.s={l:0,i:32768,w:32768,z:32768},this.b=new t(98304),this.o.dictionary){var e=this.o.dictionary.subarray(-32768);this.b.set(e,32768-e.length),this.s.i=32768-e.length}}return r.prototype.p=function(t,r){this.ondata(L(t,this.o,0,0,this.s),r)},r.prototype.push=function(r,n){this.ondata||E(5),this.s.l&&E(4);var e=r.length+this.s.z;if(e>this.b.length){if(e>2*this.b.length-32768){var i=new t(-32768&e);i.set(this.b.subarray(0,this.s.z)),this.b=i}var s=this.b.length-this.s.z;this.b.set(r.subarray(0,s),this.s.z),this.s.z=this.b.length,this.p(this.b,!1),this.b.set(this.b.subarray(-32768)),this.b.set(r.subarray(s),32768),this.s.z=r.length-s+32768,this.s.i=32766,this.s.w=32768}else this.b.set(r,this.s.z),this.s.z+=r.length;this.s.l=1&n,(this.s.z>this.s.w+8191||n)&&(this.p(this.b,n||!1),this.s.w=this.s.i,this.s.i-=2),n&&(this.s=this.o={},this.b=F)},r.prototype.flush=function(r){if(this.ondata||E(5),this.s.l&&E(4),this.p(this.b,!1),this.s.w=this.s.i,this.s.i-=2,r){var n=new t(6);n[0]=this.s.r>>3;var e=k(n,this.s.r,F);this.s.r=0,this.ondata(n.subarray(0,e>>3),!1)}},r}();function q(t,r){r||(r={});var n=function(){var t=-1;return{p:function(r){for(var n=t,e=0;e<r.length;++e)n=I[255&n^r[e]]^n>>>8;t=n},d:function(){return~t}}}(),e=t.length;n.p(t);var i,s=L(t,r,10+((i=r).filename?i.filename.length+1:0),8),a=s.length;return function(t,r){var n=r.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=r.level<2?4:9==r.level?2:0,t[9]=3,0!=r.mtime&&O(t,4,Math.floor(new Date(r.mtime||Date.now())/1e3)),n){t[3]=8;for(var e=0;e<=n.length;++e)t[e+10]=n.charCodeAt(e)}}(s,r),O(s,a-8,n.d()),O(s,a-4,e),s}var B=function(){function t(t,r){this.c=S(),this.v=1,j.call(this,t,r)}return t.prototype.push=function(t,r){this.c.p(t),j.prototype.push.call(this,t,r)},t.prototype.p=function(t,r){var n=L(t,this.o,this.v&&(this.o.dictionary?6:2),r&&4,this.s);this.v&&(function(t,r){var n=r.level,e=0==n?0:n<6?1:9==n?3:2;if(t[0]=120,t[1]=e<<6|(r.dictionary&&32),t[1]|=31-(t[0]<<8|t[1])%31,r.dictionary){var i=S();i.p(r.dictionary),O(t,2,i.d())}}(n,this.o),this.v=0),r&&O(n,n.length-4,this.c.d()),this.ondata(n,r)},t.prototype.flush=function(t){j.prototype.flush.call(this,t)},t}(),G=\"undefined\"!=typeof TextEncoder&&new TextEncoder,H=\"undefined\"!=typeof TextDecoder&&new TextDecoder;try{H.decode(F,{stream:!0})}catch(t){}var J=function(){function t(t){this.ondata=t}return t.prototype.push=function(t,r){this.ondata||E(5),this.d&&E(4),this.ondata(K(t),this.d=r||!1)},t}();function K(r,n){if(G)return G.encode(r);for(var e=r.length,i=new t(r.length+(r.length>>1)),s=0,a=function(t){i[s++]=t},o=0;o<e;++o){if(s+5>i.length){var h=new t(s+8+(e-o<<1));h.set(i),i=h}var f=r.charCodeAt(o);f<128||n?a(f):f<2048?(a(192|f>>6),a(128|63&f)):f>55295&&f<57344?(a(240|(f=65536+(1047552&f)|1023&r.charCodeAt(++o))>>18),a(128|f>>12&63),a(128|f>>6&63),a(128|63&f)):(a(224|f>>12),a(128|f>>6&63),a(128|63&f))}return b(i,0,s)}const N=new class{constructor(){this._init()}clear(){this._init()}addEvent(t){if(!t)throw new Error(\"Adding invalid event\");const r=this._hasEvents?\",\":\"\";this.stream.push(r+t),this._hasEvents=!0}finish(){this.stream.push(\"]\",!0);const t=function(t){let r=0;for(const n of t)r+=n.length;const n=new Uint8Array(r);for(let r=0,e=0,i=t.length;r<i;r++){const i=t[r];n.set(i,e),e+=i.length}return n}(this._deflatedData);return this._init(),t}_init(){this._hasEvents=!1,this._deflatedData=[],this.deflate=new B,this.deflate.ondata=(t,r)=>{this._deflatedData.push(t)},this.stream=new J((t,r)=>{this.deflate.push(t,r)}),this.stream.push(\"[\")}},P={clear:()=>{N.clear()},addEvent:t=>N.addEvent(t),finish:()=>N.finish(),compress:t=>function(t){return q(K(t))}(t)};addEventListener(\"message\",function(t){const r=t.data.method,n=t.data.id,e=t.data.arg;if(r in P&&\"function\"==typeof P[r])try{const t=P[r](e);postMessage({id:n,method:r,success:!0,response:t})}catch(t){postMessage({id:n,method:r,success:!1,response:t.message}),console.error(t)}}),postMessage({id:void 0,method:\"init\",success:!0,response:void 0});`;\n\nfunction e() {\n  const e2 = new Blob([t], { type: \"text/javascript\" });\n  return URL.createObjectURL(e2);\n}\n\nconst CONSOLE_LEVELS = [\"log\", \"warn\", \"error\"];\nconst PREFIX = \"[Replay] \";\nfunction _addBreadcrumb(message, level = \"info\") {\n  addBreadcrumb(\n    {\n      category: \"console\",\n      data: {\n        logger: \"replay\"\n      },\n      level,\n      message: `${PREFIX}${message}`\n    },\n    { level }\n  );\n}\nfunction makeReplayDebugLogger() {\n  let _capture = false;\n  let _trace = false;\n  const _debug = {\n    exception: () => void 0,\n    infoTick: () => void 0,\n    setConfig: (opts) => {\n      _capture = !!opts.captureExceptions;\n      _trace = !!opts.traceInternals;\n    }\n  };\n  if (DEBUG_BUILD) {\n    CONSOLE_LEVELS.forEach((name) => {\n      _debug[name] = (...args) => {\n        debug$1[name](PREFIX, ...args);\n        if (_trace) {\n          _addBreadcrumb(args.join(\"\"), severityLevelFromString(name));\n        }\n      };\n    });\n    _debug.exception = (error, ...message) => {\n      if (message.length && _debug.error) {\n        _debug.error(...message);\n      }\n      debug$1.error(PREFIX, error);\n      if (_capture) {\n        captureException(error, {\n          mechanism: {\n            handled: true,\n            type: \"auto.function.replay.debug\"\n          }\n        });\n      } else if (_trace) {\n        _addBreadcrumb(error, \"error\");\n      }\n    };\n    _debug.infoTick = (...args) => {\n      debug$1.log(PREFIX, ...args);\n      if (_trace) {\n        setTimeout(() => _addBreadcrumb(args[0]), 0);\n      }\n    };\n  } else {\n    CONSOLE_LEVELS.forEach((name) => {\n      _debug[name] = () => void 0;\n    });\n  }\n  return _debug;\n}\nconst debug = makeReplayDebugLogger();\n\nclass EventBufferSizeExceededError extends Error {\n  constructor() {\n    super(`Event buffer exceeded maximum size of ${REPLAY_MAX_EVENT_BUFFER_SIZE}.`);\n  }\n}\nclass WorkerDestroyedError extends Error {\n  constructor() {\n    super(\"Worker destroyed\");\n  }\n}\n\nclass EventBufferArray {\n  constructor() {\n    this.events = [];\n    this._totalSize = 0;\n    this.hasCheckout = false;\n    this.waitForCheckout = false;\n  }\n  /** @inheritdoc */\n  get hasEvents() {\n    return this.events.length > 0;\n  }\n  /** @inheritdoc */\n  get type() {\n    return \"sync\";\n  }\n  /** @inheritdoc */\n  destroy() {\n    this.events = [];\n  }\n  /** @inheritdoc */\n  async addEvent(event) {\n    const eventSize = JSON.stringify(event).length;\n    this._totalSize += eventSize;\n    if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n      throw new EventBufferSizeExceededError();\n    }\n    this.events.push(event);\n  }\n  /** @inheritdoc */\n  finish() {\n    return new Promise((resolve) => {\n      const eventsRet = this.events;\n      this.clear();\n      resolve(JSON.stringify(eventsRet));\n    });\n  }\n  /** @inheritdoc */\n  clear() {\n    this.events = [];\n    this._totalSize = 0;\n    this.hasCheckout = false;\n  }\n  /** @inheritdoc */\n  getEarliestTimestamp() {\n    let ts = null;\n    for (const { timestamp } of this.events) {\n      if (ts === null || timestamp < ts) ts = timestamp;\n    }\n    return ts === null ? ts : timestampToMs(ts);\n  }\n}\n\nclass WorkerHandler {\n  constructor(worker) {\n    this._onMessage = ({ data }) => {\n      const response = data;\n      if (typeof response.id !== \"number\") {\n        return;\n      }\n      const pending = this._pending.get(response.id);\n      if (!pending || pending.method !== response.method) {\n        return;\n      }\n      this._pending.delete(response.id);\n      if (!response.success) {\n        DEBUG_BUILD && debug.error(\"Error in compression worker: \", response.response);\n        pending.reject(new Error(\"Error in compression worker\"));\n        return;\n      }\n      pending.resolve(response.response);\n    };\n    this._worker = worker;\n    this._id = 0;\n    this._pending = /* @__PURE__ */ new Map();\n    this._worker.addEventListener(\"message\", this._onMessage);\n  }\n  /**\n   * Ensure the worker is ready (or not).\n   * This will either resolve when the worker is ready, or reject if an error occurred.\n   */\n  ensureReady() {\n    if (this._ensureReadyPromise) {\n      return this._ensureReadyPromise;\n    }\n    this._ensureReadyPromise = new Promise((resolve, reject) => {\n      this._worker.addEventListener(\n        \"message\",\n        ({ data }) => {\n          if (data.success) {\n            resolve();\n          } else {\n            DEBUG_BUILD && debug.warn(\"Received worker message with unsuccessful status\", data);\n            reject(new Error(\"Received worker message with unsuccessful status\"));\n          }\n        },\n        { once: true }\n      );\n      this._worker.addEventListener(\n        \"error\",\n        (error) => {\n          DEBUG_BUILD && debug.warn(\"Failed to load Replay compression worker\", error);\n          reject(\n            new Error(\n              `Failed to load Replay compression worker: ${error instanceof ErrorEvent && error.message ? error.message : \"Unknown error. This can happen due to CSP policy restrictions, network issues, or the worker script failing to load.\"}`\n            )\n          );\n        },\n        { once: true }\n      );\n    });\n    return this._ensureReadyPromise;\n  }\n  /**\n   * Destroy the worker.\n   */\n  destroy() {\n    DEBUG_BUILD && debug.log(\"Destroying compression worker\");\n    this._worker.removeEventListener(\"message\", this._onMessage);\n    this._pending.forEach((pending) => pending.reject(new WorkerDestroyedError()));\n    this._pending.clear();\n    this._worker.terminate();\n  }\n  /**\n   * Post message to worker and wait for response before resolving promise.\n   */\n  postMessage(method, arg) {\n    const id = this._getAndIncrementId();\n    return new Promise((resolve, reject) => {\n      this._pending.set(id, {\n        method,\n        resolve,\n        reject\n      });\n      try {\n        this._worker.postMessage({ id, method, arg });\n      } catch (error) {\n        this._pending.delete(id);\n        reject(error);\n      }\n    });\n  }\n  /** Get the current ID and increment it for the next call. */\n  _getAndIncrementId() {\n    return this._id++;\n  }\n}\n\nclass EventBufferCompressionWorker {\n  constructor(worker) {\n    this._worker = new WorkerHandler(worker);\n    this._earliestTimestamp = null;\n    this._totalSize = 0;\n    this.hasCheckout = false;\n    this.waitForCheckout = false;\n  }\n  /** @inheritdoc */\n  get hasEvents() {\n    return !!this._earliestTimestamp;\n  }\n  /** @inheritdoc */\n  get type() {\n    return \"worker\";\n  }\n  /**\n   * Ensure the worker is ready (or not).\n   * This will either resolve when the worker is ready, or reject if an error occurred.\n   */\n  ensureReady() {\n    return this._worker.ensureReady();\n  }\n  /**\n   * Destroy the event buffer.\n   */\n  destroy() {\n    this._worker.destroy();\n  }\n  /**\n   * Add an event to the event buffer.\n   *\n   * Returns true if event was successfully received and processed by worker.\n   */\n  addEvent(event) {\n    const timestamp = timestampToMs(event.timestamp);\n    if (!this._earliestTimestamp || timestamp < this._earliestTimestamp) {\n      this._earliestTimestamp = timestamp;\n    }\n    const data = JSON.stringify(event);\n    this._totalSize += data.length;\n    if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n      return Promise.reject(new EventBufferSizeExceededError());\n    }\n    return this._sendEventToWorker(data);\n  }\n  /**\n   * Finish the event buffer and return the compressed data.\n   */\n  finish() {\n    return this._finishRequest();\n  }\n  /** @inheritdoc */\n  clear() {\n    this._earliestTimestamp = null;\n    this._totalSize = 0;\n    this.hasCheckout = false;\n    this._worker.postMessage(\"clear\").then(null, (e) => {\n      DEBUG_BUILD && debug.exception(e, 'Sending \"clear\" message to worker failed', e);\n    });\n  }\n  /** @inheritdoc */\n  getEarliestTimestamp() {\n    return this._earliestTimestamp;\n  }\n  /**\n   * Send the event to the worker.\n   */\n  _sendEventToWorker(data) {\n    return this._worker.postMessage(\"addEvent\", data);\n  }\n  /**\n   * Finish the request and return the compressed data from the worker.\n   */\n  async _finishRequest() {\n    const response = await this._worker.postMessage(\"finish\");\n    this._earliestTimestamp = null;\n    this._totalSize = 0;\n    return response;\n  }\n}\n\nclass EventBufferProxy {\n  constructor(worker) {\n    this._fallback = new EventBufferArray();\n    this._compression = new EventBufferCompressionWorker(worker);\n    this._used = this._fallback;\n    this._ensureWorkerIsLoadedPromise = this._ensureWorkerIsLoaded();\n  }\n  /** @inheritdoc */\n  get waitForCheckout() {\n    return this._used.waitForCheckout;\n  }\n  /** @inheritdoc */\n  get type() {\n    return this._used.type;\n  }\n  /** @inheritDoc */\n  get hasEvents() {\n    return this._used.hasEvents;\n  }\n  /** @inheritdoc */\n  get hasCheckout() {\n    return this._used.hasCheckout;\n  }\n  /** @inheritdoc */\n  set hasCheckout(value) {\n    this._used.hasCheckout = value;\n  }\n  /** @inheritdoc */\n  // eslint-disable-next-line @typescript-eslint/adjacent-overload-signatures\n  set waitForCheckout(value) {\n    this._used.waitForCheckout = value;\n  }\n  /** @inheritDoc */\n  destroy() {\n    this._fallback.destroy();\n    this._compression.destroy();\n  }\n  /** @inheritdoc */\n  clear() {\n    return this._used.clear();\n  }\n  /** @inheritdoc */\n  getEarliestTimestamp() {\n    return this._used.getEarliestTimestamp();\n  }\n  /**\n   * Add an event to the event buffer.\n   *\n   * Returns true if event was successfully added.\n   */\n  addEvent(event) {\n    return this._used.addEvent(event);\n  }\n  /** @inheritDoc */\n  async finish() {\n    await this.ensureWorkerIsLoaded();\n    return this._used.finish();\n  }\n  /** Ensure the worker has loaded. */\n  ensureWorkerIsLoaded() {\n    return this._ensureWorkerIsLoadedPromise;\n  }\n  /** Actually check if the worker has been loaded. */\n  async _ensureWorkerIsLoaded() {\n    try {\n      await this._compression.ensureReady();\n    } catch (error) {\n      DEBUG_BUILD && debug.exception(error, \"Failed to load the compression worker, falling back to simple buffer\");\n      return;\n    }\n    await this._switchToCompressionWorker();\n  }\n  /** Switch the used buffer to the compression worker. */\n  async _switchToCompressionWorker() {\n    const { events, hasCheckout, waitForCheckout } = this._fallback;\n    const addEventPromises = [];\n    for (const event of events) {\n      addEventPromises.push(this._compression.addEvent(event));\n    }\n    this._compression.hasCheckout = hasCheckout;\n    this._compression.waitForCheckout = waitForCheckout;\n    this._used = this._compression;\n    try {\n      await Promise.all(addEventPromises);\n      this._fallback.clear();\n    } catch (error) {\n      if (error instanceof WorkerDestroyedError) {\n        return;\n      }\n      DEBUG_BUILD && debug.exception(error, \"Failed to add events when switching buffers.\");\n    }\n  }\n}\n\nfunction createEventBuffer({\n  useCompression,\n  workerUrl: customWorkerUrl\n}) {\n  if (useCompression && // eslint-disable-next-line no-restricted-globals\n  window.Worker) {\n    const worker = _loadWorker(customWorkerUrl);\n    if (worker) {\n      return worker;\n    }\n  }\n  DEBUG_BUILD && debug.log(\"Using simple buffer\");\n  return new EventBufferArray();\n}\nfunction _loadWorker(customWorkerUrl) {\n  try {\n    const workerUrl = customWorkerUrl || _getWorkerUrl();\n    if (!workerUrl) {\n      return;\n    }\n    DEBUG_BUILD && debug.log(`Using compression worker${customWorkerUrl ? ` from ${customWorkerUrl}` : \"\"}`);\n    const worker = new Worker(workerUrl);\n    return new EventBufferProxy(worker);\n  } catch (error) {\n    DEBUG_BUILD && debug.exception(error, \"Failed to create compression worker\");\n  }\n}\nfunction _getWorkerUrl() {\n  if (typeof __SENTRY_EXCLUDE_REPLAY_WORKER__ === \"undefined\" || !__SENTRY_EXCLUDE_REPLAY_WORKER__) {\n    return e();\n  }\n  return \"\";\n}\n\nfunction hasSessionStorage() {\n  try {\n    return \"sessionStorage\" in WINDOW && !!WINDOW.sessionStorage;\n  } catch {\n    return false;\n  }\n}\n\nfunction clearSession(replay) {\n  deleteSession();\n  replay.session = void 0;\n}\nfunction deleteSession() {\n  if (!hasSessionStorage()) {\n    return;\n  }\n  try {\n    WINDOW.sessionStorage.removeItem(REPLAY_SESSION_KEY);\n  } catch {\n  }\n}\n\nfunction isSampled(sampleRate) {\n  if (sampleRate === void 0) {\n    return false;\n  }\n  return Math.random() < sampleRate;\n}\n\nfunction saveSession(session) {\n  if (!hasSessionStorage()) {\n    return;\n  }\n  try {\n    WINDOW.sessionStorage.setItem(REPLAY_SESSION_KEY, JSON.stringify(session));\n  } catch {\n  }\n}\n\nfunction makeSession(session) {\n  const now = Date.now();\n  const id = session.id || uuid4();\n  const started = session.started || now;\n  const lastActivity = session.lastActivity || now;\n  const segmentId = session.segmentId || 0;\n  const sampled = session.sampled;\n  const previousSessionId = session.previousSessionId;\n  const dirty = session.dirty || false;\n  return {\n    id,\n    started,\n    lastActivity,\n    segmentId,\n    sampled,\n    previousSessionId,\n    dirty\n  };\n}\n\nfunction getSessionSampleType(sessionSampleRate, allowBuffering) {\n  return isSampled(sessionSampleRate) ? \"session\" : allowBuffering ? \"buffer\" : false;\n}\nfunction createSession({ sessionSampleRate, allowBuffering, stickySession = false }, { previousSessionId } = {}) {\n  const sampled = getSessionSampleType(sessionSampleRate, allowBuffering);\n  const session = makeSession({\n    sampled,\n    previousSessionId\n  });\n  if (stickySession) {\n    saveSession(session);\n  }\n  return session;\n}\n\nfunction fetchSession() {\n  if (!hasSessionStorage()) {\n    return null;\n  }\n  try {\n    const sessionStringFromStorage = WINDOW.sessionStorage.getItem(REPLAY_SESSION_KEY);\n    if (!sessionStringFromStorage) {\n      return null;\n    }\n    const sessionObj = JSON.parse(sessionStringFromStorage);\n    DEBUG_BUILD && debug.infoTick(\"Loading existing session\");\n    return makeSession(sessionObj);\n  } catch {\n    return null;\n  }\n}\n\nfunction isExpired(initialTime, expiry, targetTime = +/* @__PURE__ */ new Date()) {\n  if (initialTime === null || expiry === void 0 || expiry < 0) {\n    return true;\n  }\n  if (expiry === 0) {\n    return false;\n  }\n  return initialTime + expiry <= targetTime;\n}\n\nfunction isSessionExpired(session, {\n  maxReplayDuration,\n  sessionIdleExpire,\n  targetTime = Date.now()\n}) {\n  return (\n    // First, check that maximum session length has not been exceeded\n    isExpired(session.started, maxReplayDuration, targetTime) || // check that the idle timeout has not been exceeded (i.e. user has\n    // performed an action within the last `sessionIdleExpire` ms)\n    isExpired(session.lastActivity, sessionIdleExpire, targetTime)\n  );\n}\n\nfunction shouldRefreshSession(session, { sessionIdleExpire, maxReplayDuration }) {\n  if (!isSessionExpired(session, { sessionIdleExpire, maxReplayDuration })) {\n    return false;\n  }\n  if (session.sampled === \"buffer\" && session.segmentId === 0) {\n    return false;\n  }\n  return true;\n}\n\nfunction loadOrCreateSession({\n  sessionIdleExpire,\n  maxReplayDuration,\n  previousSessionId\n}, sessionOptions) {\n  const existingSession = sessionOptions.stickySession && fetchSession();\n  if (!existingSession) {\n    DEBUG_BUILD && debug.infoTick(\"Creating new session\");\n    return createSession(sessionOptions, { previousSessionId });\n  }\n  if (!shouldRefreshSession(existingSession, { sessionIdleExpire, maxReplayDuration })) {\n    return existingSession;\n  }\n  DEBUG_BUILD && debug.infoTick(\"Session in sessionStorage is expired, creating new one...\");\n  return createSession(sessionOptions, { previousSessionId: existingSession.id });\n}\n\nfunction isCustomEvent(event) {\n  return event.type === EventType.Custom;\n}\nfunction addEventSync(replay, event, isCheckout) {\n  if (!shouldAddEvent(replay, event)) {\n    return false;\n  }\n  _addEvent(replay, event, isCheckout);\n  return true;\n}\nfunction addEvent(replay, event, isCheckout) {\n  if (!shouldAddEvent(replay, event)) {\n    return Promise.resolve(null);\n  }\n  return _addEvent(replay, event, isCheckout);\n}\nasync function _addEvent(replay, event, isCheckout) {\n  const { eventBuffer } = replay;\n  if (!eventBuffer || eventBuffer.waitForCheckout && !isCheckout) {\n    return null;\n  }\n  const isBufferMode = replay.recordingMode === \"buffer\";\n  try {\n    if (isCheckout && isBufferMode) {\n      eventBuffer.clear();\n    }\n    if (isCheckout) {\n      eventBuffer.hasCheckout = true;\n      eventBuffer.waitForCheckout = false;\n    }\n    const replayOptions = replay.getOptions();\n    const eventAfterPossibleCallback = maybeApplyCallback(event, replayOptions.beforeAddRecordingEvent);\n    if (!eventAfterPossibleCallback) {\n      return;\n    }\n    return await eventBuffer.addEvent(eventAfterPossibleCallback);\n  } catch (error) {\n    if (!replay.isEnabled()) {\n      replay.handleException(error);\n      return null;\n    }\n    const isExceeded = error && error instanceof EventBufferSizeExceededError;\n    const reason = isExceeded ? \"eventBufferOverflow\" : \"eventBufferError\";\n    const client = getClient();\n    if (client) {\n      const dropReason = isExceeded ? \"buffer_overflow\" : \"internal_sdk_error\";\n      client.recordDroppedEvent(dropReason, \"replay\");\n    }\n    if (isExceeded && isBufferMode) {\n      eventBuffer.clear();\n      eventBuffer.waitForCheckout = true;\n      return null;\n    }\n    replay.handleException(error);\n    await replay.stop({ reason });\n  }\n}\nfunction shouldAddEvent(replay, event) {\n  if (!replay.eventBuffer || replay.isPaused() || !replay.isEnabled()) {\n    return false;\n  }\n  const timestampInMs = timestampToMs(event.timestamp);\n  if (timestampInMs + replay.timeouts.sessionIdlePause < Date.now()) {\n    return false;\n  }\n  if (timestampInMs > replay.getContext().initialTimestamp + replay.getOptions().maxReplayDuration) {\n    DEBUG_BUILD && debug.infoTick(`Skipping event with timestamp ${timestampInMs} because it is after maxReplayDuration`);\n    return false;\n  }\n  return true;\n}\nfunction maybeApplyCallback(event, callback) {\n  try {\n    if (typeof callback === \"function\" && isCustomEvent(event)) {\n      return callback(event);\n    }\n  } catch (error) {\n    DEBUG_BUILD && debug.exception(error, \"An error occurred in the `beforeAddRecordingEvent` callback, skipping the event...\");\n    return null;\n  }\n  return event;\n}\n\nconst MAX_CONTEXT_VALUES = 100;\nfunction addSegmentDetailsToContext(replay, traceId, segmentName) {\n  const replayContext = replay.getContext();\n  if (traceId && replayContext.traceIds.size < MAX_CONTEXT_VALUES) {\n    replayContext.traceIds.add(traceId);\n  }\n  if (segmentName && replayContext.segmentNames.size < MAX_CONTEXT_VALUES) {\n    replayContext.segmentNames.add(segmentName);\n  }\n}\n\nfunction handleProcessSegmentSpan(replay) {\n  return (spanJSON) => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n    addSegmentDetailsToContext(replay, spanJSON.trace_id, spanJSON.name || void 0);\n  };\n}\n\nfunction isErrorEvent(event) {\n  return !event.type;\n}\nfunction isTransactionEvent(event) {\n  return event.type === \"transaction\";\n}\nfunction isReplayEvent(event) {\n  return event.type === \"replay_event\";\n}\nfunction isFeedbackEvent(event) {\n  return event.type === \"feedback\";\n}\n\nfunction handleAfterSendEvent(replay) {\n  return (event, sendResponse) => {\n    if (!replay.isEnabled() || !isErrorEvent(event) && !isTransactionEvent(event)) {\n      return;\n    }\n    const statusCode = sendResponse.statusCode;\n    if (!statusCode || statusCode < 200 || statusCode >= 300) {\n      return;\n    }\n    if (isTransactionEvent(event)) {\n      handleTransactionEvent(replay, event);\n      return;\n    }\n    handleErrorEvent(replay, event);\n  };\n}\nfunction handleTransactionEvent(replay, event) {\n  addSegmentDetailsToContext(replay, event.contexts?.trace?.trace_id, event.transaction);\n}\nfunction handleErrorEvent(replay, event) {\n  const replayContext = replay.getContext();\n  if (event.event_id && replayContext.errorIds.size < 100) {\n    replayContext.errorIds.add(event.event_id);\n  }\n  if (replay.recordingMode !== \"buffer\" || !event.tags?.replayId) {\n    return;\n  }\n  const { beforeErrorSampling } = replay.getOptions();\n  if (typeof beforeErrorSampling === \"function\" && !beforeErrorSampling(event)) {\n    return;\n  }\n  setTimeout$3(async () => {\n    try {\n      await replay.sendBufferedReplayOrFlush();\n    } catch (err) {\n      replay.handleException(err);\n    }\n  });\n}\n\nfunction handleBeforeSendEvent(replay) {\n  return (event) => {\n    if (!replay.isEnabled() || !isErrorEvent(event)) {\n      return;\n    }\n    handleHydrationError(replay, event);\n  };\n}\nfunction handleHydrationError(replay, event) {\n  const exceptionValue = event.exception?.values?.[0]?.value;\n  if (typeof exceptionValue !== \"string\") {\n    return;\n  }\n  if (\n    // Only matches errors in production builds of react-dom\n    // Example https://reactjs.org/docs/error-decoder.html?invariant=423\n    // With newer React versions, the messages changed to a different website https://react.dev/errors/418\n    exceptionValue.match(\n      /(reactjs\\.org\\/docs\\/error-decoder\\.html\\?invariant=|react\\.dev\\/errors\\/)(418|419|422|423|425)/\n    ) || // Development builds of react-dom\n    // Error 1: Hydration failed because the initial UI does not match what was rendered on the server.\n    // Error 2: Text content does not match server-rendered HTML. Warning: Text content did not match.\n    exceptionValue.match(/(does not match server-rendered HTML|Hydration failed because)/i)\n  ) {\n    const breadcrumb = createBreadcrumb({\n      category: \"replay.hydrate-error\",\n      data: {\n        url: getLocationHref()\n      }\n    });\n    addBreadcrumbEvent(replay, breadcrumb);\n  }\n}\n\nfunction handleBreadcrumbs(replay) {\n  const client = getClient();\n  if (!client) {\n    return;\n  }\n  client.on(\"beforeAddBreadcrumb\", (breadcrumb) => beforeAddBreadcrumb(replay, breadcrumb));\n}\nfunction beforeAddBreadcrumb(replay, breadcrumb) {\n  if (!replay.isEnabled() || !isBreadcrumbWithCategory(breadcrumb)) {\n    return;\n  }\n  const result = normalizeBreadcrumb(breadcrumb);\n  if (result) {\n    addBreadcrumbEvent(replay, result);\n  }\n}\nfunction normalizeBreadcrumb(breadcrumb) {\n  if (!isBreadcrumbWithCategory(breadcrumb) || [\n    // fetch & xhr are handled separately,in handleNetworkBreadcrumbs\n    \"fetch\",\n    \"xhr\",\n    // These two are breadcrumbs for emitted sentry events, we don't care about them\n    \"sentry.event\",\n    \"sentry.transaction\"\n  ].includes(breadcrumb.category) || // We capture UI breadcrumbs separately\n  breadcrumb.category.startsWith(\"ui.\")) {\n    return null;\n  }\n  if (breadcrumb.category === \"console\") {\n    return normalizeConsoleBreadcrumb(breadcrumb);\n  }\n  return createBreadcrumb(breadcrumb);\n}\nfunction normalizeConsoleBreadcrumb(breadcrumb) {\n  const args = breadcrumb.data?.arguments;\n  if (!Array.isArray(args) || args.length === 0) {\n    return createBreadcrumb(breadcrumb);\n  }\n  let isTruncated = false;\n  const normalizedArgs = args.map((arg) => {\n    if (!arg) {\n      return arg;\n    }\n    if (typeof arg === \"string\") {\n      if (arg.length > CONSOLE_ARG_MAX_SIZE) {\n        isTruncated = true;\n        return `${arg.slice(0, CONSOLE_ARG_MAX_SIZE)}\\u2026`;\n      }\n      return arg;\n    }\n    if (typeof arg === \"object\") {\n      try {\n        const normalizedArg = normalize(arg, 7);\n        const stringified = JSON.stringify(normalizedArg);\n        if (stringified.length > CONSOLE_ARG_MAX_SIZE) {\n          isTruncated = true;\n          return `${JSON.stringify(normalizedArg, null, 2).slice(0, CONSOLE_ARG_MAX_SIZE)}\\u2026`;\n        }\n        return normalizedArg;\n      } catch {\n      }\n    }\n    return arg;\n  });\n  return createBreadcrumb({\n    ...breadcrumb,\n    data: {\n      ...breadcrumb.data,\n      arguments: normalizedArgs,\n      ...isTruncated ? { _meta: { warnings: [\"CONSOLE_ARG_TRUNCATED\"] } } : {}\n    }\n  });\n}\nfunction isBreadcrumbWithCategory(breadcrumb) {\n  return !!breadcrumb.category;\n}\n\nfunction isRrwebError(event, hint) {\n  if (event.type || !event.exception?.values?.length) {\n    return false;\n  }\n  if (hint.originalException?.__rrweb__) {\n    return true;\n  }\n  return false;\n}\n\nfunction resetReplayIdOnDynamicSamplingContext() {\n  const dsc = getCurrentScope().getPropagationContext().dsc;\n  if (dsc) {\n    delete dsc.replay_id;\n  }\n  const activeSpan = getActiveSpan();\n  if (activeSpan) {\n    const dsc2 = getDynamicSamplingContextFromSpan(activeSpan);\n    delete dsc2.replay_id;\n  }\n}\nfunction setReplayIdOnDynamicSamplingContext(replayId) {\n  const dsc = getCurrentScope().getPropagationContext().dsc;\n  if (dsc) {\n    dsc.replay_id = replayId;\n  }\n  const activeSpan = getActiveSpan();\n  if (activeSpan) {\n    const dsc2 = getDynamicSamplingContextFromSpan(activeSpan);\n    dsc2.replay_id = replayId;\n  }\n}\n\nfunction addFeedbackBreadcrumb(replay, event) {\n  replay.triggerUserActivity();\n  replay.addUpdate(() => {\n    if (!event.timestamp) {\n      return true;\n    }\n    void replay.throttledAddEvent({\n      type: EventType.Custom,\n      timestamp: event.timestamp * 1e3,\n      data: {\n        tag: \"breadcrumb\",\n        payload: {\n          timestamp: event.timestamp,\n          type: \"default\",\n          category: \"sentry.feedback\",\n          data: {\n            feedbackId: event.event_id\n          }\n        }\n      }\n    });\n    return false;\n  });\n}\n\nfunction shouldSampleForBufferEvent(replay, event) {\n  if (replay.recordingMode !== \"buffer\") {\n    return false;\n  }\n  if (event.message === UNABLE_TO_SEND_REPLAY) {\n    return false;\n  }\n  if (!event.exception || event.type) {\n    return false;\n  }\n  return isSampled(replay.getOptions().errorSampleRate);\n}\n\nfunction handleGlobalEventListener(replay) {\n  return Object.assign(\n    (event, hint) => {\n      if (replay.session && shouldRefreshSession(replay.session, {\n        maxReplayDuration: replay.getOptions().maxReplayDuration,\n        sessionIdleExpire: replay.timeouts.sessionIdleExpire\n      })) {\n        resetReplayIdOnDynamicSamplingContext();\n      }\n      if (!replay.isEnabled() || replay.isPaused()) {\n        return event;\n      }\n      if (isReplayEvent(event)) {\n        delete event.breadcrumbs;\n        return event;\n      }\n      if (!isErrorEvent(event) && !isTransactionEvent(event) && !isFeedbackEvent(event)) {\n        return event;\n      }\n      const isSessionActive = replay.checkAndHandleExpiredSession();\n      if (!isSessionActive) {\n        resetReplayIdOnDynamicSamplingContext();\n        return event;\n      }\n      if (isFeedbackEvent(event)) {\n        const sessionId = replay.getSessionId();\n        const feedbackReplayId = event.contexts.feedback.replay_id;\n        if (feedbackReplayId && feedbackReplayId !== sessionId) {\n          return event;\n        }\n        replay.flush();\n        event.contexts.feedback.replay_id = sessionId;\n        addFeedbackBreadcrumb(replay, event);\n        return event;\n      }\n      if (isRrwebError(event, hint) && !replay.getOptions()._experiments.captureExceptions) {\n        DEBUG_BUILD && debug.log(\"Ignoring error from rrweb internals\", event);\n        return null;\n      }\n      const isErrorEventSampled = shouldSampleForBufferEvent(replay, event);\n      const shouldTagReplayId = isErrorEventSampled || replay.recordingMode === \"session\";\n      if (shouldTagReplayId) {\n        event.tags = { ...event.tags, replayId: replay.getSessionId() };\n      }\n      if (isErrorEventSampled && replay.recordingMode === \"buffer\" && replay.session?.sampled === \"buffer\") {\n        const session = replay.session;\n        session.dirty = true;\n        if (replay.getOptions().stickySession) {\n          saveSession(session);\n        }\n      }\n      return event;\n    },\n    { id: \"Replay\" }\n  );\n}\n\nfunction createPerformanceSpans(replay, entries) {\n  return entries.map(({ type, start, end, name, data }) => {\n    const response = replay.throttledAddEvent({\n      type: EventType.Custom,\n      timestamp: start,\n      data: {\n        tag: \"performanceSpan\",\n        payload: {\n          op: type,\n          description: name,\n          startTimestamp: start,\n          endTimestamp: end,\n          data\n        }\n      }\n    });\n    return typeof response === \"string\" ? Promise.resolve(null) : response;\n  });\n}\n\nfunction handleHistory(handlerData) {\n  const { from, to } = handlerData;\n  const now = Date.now() / 1e3;\n  return {\n    type: \"navigation.push\",\n    start: now,\n    end: now,\n    name: to,\n    data: {\n      previous: from\n    }\n  };\n}\nfunction handleHistorySpanListener(replay) {\n  return (handlerData) => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n    const result = handleHistory(handlerData);\n    if (result === null) {\n      return;\n    }\n    replay.getContext().urls.push(result.name);\n    replay.triggerUserActivity();\n    replay.addUpdate(() => {\n      createPerformanceSpans(replay, [result]);\n      return false;\n    });\n  };\n}\n\nfunction shouldFilterRequest(replay, url) {\n  if (DEBUG_BUILD && replay.getOptions()._experiments.traceInternals) {\n    return false;\n  }\n  return isSentryRequestUrl(url, getClient());\n}\n\nfunction addNetworkBreadcrumb(replay, result) {\n  if (!replay.isEnabled()) {\n    return;\n  }\n  if (result === null) {\n    return;\n  }\n  if (shouldFilterRequest(replay, result.name)) {\n    return;\n  }\n  replay.addUpdate(() => {\n    createPerformanceSpans(replay, [result]);\n    return true;\n  });\n}\n\nfunction getBodySize(body) {\n  if (!body) {\n    return void 0;\n  }\n  const textEncoder = new TextEncoder();\n  try {\n    if (typeof body === \"string\") {\n      return textEncoder.encode(body).length;\n    }\n    if (body instanceof URLSearchParams) {\n      return textEncoder.encode(body.toString()).length;\n    }\n    if (body instanceof FormData) {\n      const formDataStr = serializeFormData(body);\n      return textEncoder.encode(formDataStr).length;\n    }\n    if (body instanceof Blob) {\n      return body.size;\n    }\n    if (body instanceof ArrayBuffer) {\n      return body.byteLength;\n    }\n  } catch {\n  }\n  return void 0;\n}\nfunction parseContentLengthHeader(header) {\n  if (!header) {\n    return void 0;\n  }\n  const size = parseInt(header, 10);\n  return isNaN(size) ? void 0 : size;\n}\nfunction mergeWarning(info, warning) {\n  if (!info) {\n    return {\n      headers: {},\n      size: void 0,\n      _meta: {\n        warnings: [warning]\n      }\n    };\n  }\n  const newMeta = { ...info._meta };\n  const existingWarnings = newMeta.warnings || [];\n  newMeta.warnings = [...existingWarnings, warning];\n  info._meta = newMeta;\n  return info;\n}\nfunction makeNetworkReplayBreadcrumb(type, data) {\n  if (!data) {\n    return null;\n  }\n  const { startTimestamp, endTimestamp, url, method, statusCode, request, response } = data;\n  const result = {\n    type,\n    start: startTimestamp / 1e3,\n    end: endTimestamp / 1e3,\n    name: url,\n    data: {\n      method,\n      statusCode,\n      request,\n      response\n    }\n  };\n  return result;\n}\nfunction buildSkippedNetworkRequestOrResponse(bodySize) {\n  return {\n    headers: {},\n    size: bodySize,\n    _meta: {\n      warnings: [\"URL_SKIPPED\"]\n    }\n  };\n}\nfunction buildNetworkRequestOrResponse(headers, bodySize, body) {\n  if (!bodySize && Object.keys(headers).length === 0) {\n    return void 0;\n  }\n  if (!bodySize) {\n    return {\n      headers\n    };\n  }\n  if (!body) {\n    return {\n      headers,\n      size: bodySize\n    };\n  }\n  const info = {\n    headers,\n    size: bodySize\n  };\n  const { body: normalizedBody, warnings } = normalizeNetworkBody(body);\n  info.body = normalizedBody;\n  if (warnings?.length) {\n    info._meta = {\n      warnings\n    };\n  }\n  return info;\n}\nfunction getAllowedHeaders(headers, allowedHeaders) {\n  return Object.entries(headers).reduce((filteredHeaders, [key, value]) => {\n    const normalizedKey = key.toLowerCase();\n    if (allowedHeaders.includes(normalizedKey) && headers[key]) {\n      filteredHeaders[normalizedKey] = value;\n    }\n    return filteredHeaders;\n  }, {});\n}\nfunction normalizeNetworkBody(body) {\n  if (!body || typeof body !== \"string\") {\n    return {\n      body\n    };\n  }\n  const exceedsSizeLimit = body.length > NETWORK_BODY_MAX_SIZE;\n  const isProbablyJson = _strIsProbablyJson(body);\n  if (exceedsSizeLimit) {\n    const truncatedBody = body.slice(0, NETWORK_BODY_MAX_SIZE);\n    if (isProbablyJson) {\n      return {\n        body: truncatedBody,\n        warnings: [\"MAYBE_JSON_TRUNCATED\"]\n      };\n    }\n    return {\n      body: `${truncatedBody}\\u2026`,\n      warnings: [\"TEXT_TRUNCATED\"]\n    };\n  }\n  if (isProbablyJson) {\n    try {\n      const jsonBody = JSON.parse(body);\n      return {\n        body: jsonBody\n      };\n    } catch {\n    }\n  }\n  return {\n    body\n  };\n}\nfunction _strIsProbablyJson(str) {\n  const first = str[0];\n  const last = str[str.length - 1];\n  return first === \"[\" && last === \"]\" || first === \"{\" && last === \"}\";\n}\nfunction urlMatches(url, urls) {\n  const fullUrl = getFullUrl(url);\n  return stringMatchesSomePattern(fullUrl, urls);\n}\nfunction getFullUrl(url, baseURI = WINDOW.document.baseURI) {\n  if (url.startsWith(\"http://\") || url.startsWith(\"https://\") || url.startsWith(WINDOW.location.origin)) {\n    return url;\n  }\n  const fixedUrl = new URL(url, baseURI);\n  if (fixedUrl.origin !== new URL(baseURI).origin) {\n    return url;\n  }\n  const fullUrl = fixedUrl.href;\n  if (!url.endsWith(\"/\") && fullUrl.endsWith(\"/\")) {\n    return fullUrl.slice(0, -1);\n  }\n  return fullUrl;\n}\n\nasync function captureFetchBreadcrumbToReplay(breadcrumb, hint, options) {\n  try {\n    const data = await _prepareFetchData(breadcrumb, hint, options);\n    const result = makeNetworkReplayBreadcrumb(\"resource.fetch\", data);\n    addNetworkBreadcrumb(options.replay, result);\n  } catch (error) {\n    DEBUG_BUILD && debug.exception(error, \"Failed to capture fetch breadcrumb\");\n  }\n}\nfunction enrichFetchBreadcrumb(breadcrumb, hint) {\n  const { input, response } = hint;\n  const body = input ? getFetchRequestArgBody(input) : void 0;\n  const reqSize = getBodySize(body);\n  const resSize = response ? parseContentLengthHeader(response.headers.get(\"content-length\")) : void 0;\n  if (reqSize !== void 0) {\n    breadcrumb.data.request_body_size = reqSize;\n  }\n  if (resSize !== void 0) {\n    breadcrumb.data.response_body_size = resSize;\n  }\n}\nasync function _prepareFetchData(breadcrumb, hint, options) {\n  const now = Date.now();\n  const { startTimestamp = now, endTimestamp = now } = hint;\n  const {\n    url,\n    method,\n    status_code: statusCode = 0,\n    request_body_size: requestBodySize,\n    response_body_size: responseBodySize\n  } = breadcrumb.data;\n  const captureDetails = urlMatches(url, options.networkDetailAllowUrls) && !urlMatches(url, options.networkDetailDenyUrls);\n  const request = captureDetails ? _getRequestInfo(options, hint.input, requestBodySize) : buildSkippedNetworkRequestOrResponse(requestBodySize);\n  const response = await _getResponseInfo(captureDetails, options, hint.response, responseBodySize);\n  return {\n    startTimestamp,\n    endTimestamp,\n    url,\n    method,\n    statusCode,\n    request,\n    response\n  };\n}\nfunction _getRequestInfo({ networkCaptureBodies, networkRequestHeaders }, input, requestBodySize) {\n  const headers = input ? getRequestHeaders(input, networkRequestHeaders) : {};\n  if (!networkCaptureBodies) {\n    return buildNetworkRequestOrResponse(headers, requestBodySize, void 0);\n  }\n  const requestBody = getFetchRequestArgBody(input);\n  const [bodyStr, warning] = getBodyString(requestBody, debug);\n  const data = buildNetworkRequestOrResponse(headers, requestBodySize, bodyStr);\n  if (warning) {\n    return mergeWarning(data, warning);\n  }\n  return data;\n}\nasync function _getResponseInfo(captureDetails, {\n  networkCaptureBodies,\n  networkResponseHeaders\n}, response, responseBodySize) {\n  if (!captureDetails && responseBodySize !== void 0) {\n    return buildSkippedNetworkRequestOrResponse(responseBodySize);\n  }\n  const headers = response ? getAllHeaders(response.headers, networkResponseHeaders) : {};\n  if (!response || !networkCaptureBodies && responseBodySize !== void 0) {\n    return buildNetworkRequestOrResponse(headers, responseBodySize, void 0);\n  }\n  const [bodyText, warning] = await _parseFetchResponseBody(response);\n  const result = getResponseData(bodyText, {\n    networkCaptureBodies,\n    responseBodySize,\n    captureDetails,\n    headers\n  });\n  if (warning) {\n    return mergeWarning(result, warning);\n  }\n  return result;\n}\nfunction getResponseData(bodyText, {\n  networkCaptureBodies,\n  responseBodySize,\n  captureDetails,\n  headers\n}) {\n  try {\n    const size = bodyText?.length && responseBodySize === void 0 ? getBodySize(bodyText) : responseBodySize;\n    if (!captureDetails) {\n      return buildSkippedNetworkRequestOrResponse(size);\n    }\n    if (networkCaptureBodies) {\n      return buildNetworkRequestOrResponse(headers, size, bodyText);\n    }\n    return buildNetworkRequestOrResponse(headers, size, void 0);\n  } catch (error) {\n    DEBUG_BUILD && debug.exception(error, \"Failed to serialize response body\");\n    return buildNetworkRequestOrResponse(headers, responseBodySize, void 0);\n  }\n}\nasync function _parseFetchResponseBody(response) {\n  const res = _tryCloneResponse(response);\n  if (!res) {\n    return [void 0, \"BODY_PARSE_ERROR\"];\n  }\n  try {\n    const text = await _tryGetResponseText(res);\n    return [text];\n  } catch (error) {\n    if (error instanceof Error && error.message.indexOf(\"Timeout\") > -1) {\n      DEBUG_BUILD && debug.warn(\"Parsing text body from response timed out\");\n      return [void 0, \"BODY_PARSE_TIMEOUT\"];\n    }\n    DEBUG_BUILD && debug.exception(error, \"Failed to get text body from response\");\n    return [void 0, \"BODY_PARSE_ERROR\"];\n  }\n}\nfunction getAllHeaders(headers, allowedHeaders) {\n  const allHeaders = {};\n  allowedHeaders.forEach((header) => {\n    if (headers.get(header)) {\n      allHeaders[header] = headers.get(header);\n    }\n  });\n  return allHeaders;\n}\nfunction getRequestHeaders(fetchArgs, allowedHeaders) {\n  if (fetchArgs.length === 1 && typeof fetchArgs[0] !== \"string\") {\n    return getHeadersFromOptions(fetchArgs[0], allowedHeaders);\n  }\n  if (fetchArgs.length === 2) {\n    return getHeadersFromOptions(fetchArgs[1], allowedHeaders);\n  }\n  return {};\n}\nfunction getHeadersFromOptions(input, allowedHeaders) {\n  if (!input) {\n    return {};\n  }\n  const headers = input.headers;\n  if (!headers) {\n    return {};\n  }\n  if (headers instanceof Headers) {\n    return getAllHeaders(headers, allowedHeaders);\n  }\n  if (Array.isArray(headers)) {\n    return {};\n  }\n  return getAllowedHeaders(headers, allowedHeaders);\n}\nfunction _tryCloneResponse(response) {\n  try {\n    return response.clone();\n  } catch (error) {\n    DEBUG_BUILD && debug.exception(error, \"Failed to clone response body\");\n  }\n}\nfunction _tryGetResponseText(response) {\n  return new Promise((resolve, reject) => {\n    const timeout = setTimeout$3(() => reject(new Error(\"Timeout while trying to read response body\")), 500);\n    _getResponseText(response).then(\n      (txt) => resolve(txt),\n      (reason) => reject(reason)\n    ).finally(() => clearTimeout(timeout));\n  });\n}\nasync function _getResponseText(response) {\n  return response.text();\n}\n\nasync function captureXhrBreadcrumbToReplay(breadcrumb, hint, options) {\n  try {\n    const data = _prepareXhrData(breadcrumb, hint, options);\n    const result = makeNetworkReplayBreadcrumb(\"resource.xhr\", data);\n    addNetworkBreadcrumb(options.replay, result);\n  } catch (error) {\n    DEBUG_BUILD && debug.exception(error, \"Failed to capture xhr breadcrumb\");\n  }\n}\nfunction enrichXhrBreadcrumb(breadcrumb, hint) {\n  const { xhr, input } = hint;\n  if (!xhr) {\n    return;\n  }\n  const reqSize = getBodySize(input);\n  const resSize = xhr.getResponseHeader(\"content-length\") ? parseContentLengthHeader(xhr.getResponseHeader(\"content-length\")) : _getBodySize(xhr.response, xhr.responseType);\n  if (reqSize !== void 0) {\n    breadcrumb.data.request_body_size = reqSize;\n  }\n  if (resSize !== void 0) {\n    breadcrumb.data.response_body_size = resSize;\n  }\n}\nfunction _prepareXhrData(breadcrumb, hint, options) {\n  const now = Date.now();\n  const { startTimestamp = now, endTimestamp = now, input, xhr } = hint;\n  const {\n    url,\n    method,\n    status_code: statusCode = 0,\n    request_body_size: requestBodySize,\n    response_body_size: responseBodySize\n  } = breadcrumb.data;\n  if (!url) {\n    return null;\n  }\n  if (!xhr || !urlMatches(url, options.networkDetailAllowUrls) || urlMatches(url, options.networkDetailDenyUrls)) {\n    const request2 = buildSkippedNetworkRequestOrResponse(requestBodySize);\n    const response2 = buildSkippedNetworkRequestOrResponse(responseBodySize);\n    return {\n      startTimestamp,\n      endTimestamp,\n      url,\n      method,\n      statusCode,\n      request: request2,\n      response: response2\n    };\n  }\n  const xhrInfo = xhr[SENTRY_XHR_DATA_KEY];\n  const networkRequestHeaders = xhrInfo ? getAllowedHeaders(xhrInfo.request_headers, options.networkRequestHeaders) : {};\n  const networkResponseHeaders = getAllowedHeaders(parseXhrResponseHeaders(xhr), options.networkResponseHeaders);\n  const [requestBody, requestWarning] = options.networkCaptureBodies ? getBodyString(input, debug) : [void 0];\n  const [responseBody, responseWarning] = options.networkCaptureBodies ? _getXhrResponseBody(xhr) : [void 0];\n  const request = buildNetworkRequestOrResponse(networkRequestHeaders, requestBodySize, requestBody);\n  const response = buildNetworkRequestOrResponse(networkResponseHeaders, responseBodySize, responseBody);\n  return {\n    startTimestamp,\n    endTimestamp,\n    url,\n    method,\n    statusCode,\n    request: requestWarning ? mergeWarning(request, requestWarning) : request,\n    response: responseWarning ? mergeWarning(response, responseWarning) : response\n  };\n}\nfunction _getXhrResponseBody(xhr) {\n  const errors = [];\n  try {\n    return [xhr.responseText];\n  } catch (e) {\n    errors.push(e);\n  }\n  try {\n    return _parseXhrResponse(xhr.response, xhr.responseType);\n  } catch (e) {\n    errors.push(e);\n  }\n  DEBUG_BUILD && debug.warn(\"Failed to get xhr response body\", ...errors);\n  return [void 0];\n}\nfunction _parseXhrResponse(body, responseType) {\n  try {\n    if (typeof body === \"string\") {\n      return [body];\n    }\n    if (body instanceof Document) {\n      return [body.body.outerHTML];\n    }\n    if (responseType === \"json\" && isObjectLike(body)) {\n      return [JSON.stringify(body)];\n    }\n    if (!body) {\n      return [void 0];\n    }\n  } catch (error) {\n    DEBUG_BUILD && debug.exception(error, \"Failed to serialize body\", body);\n    return [void 0, \"BODY_PARSE_ERROR\"];\n  }\n  DEBUG_BUILD && debug.log(\"Skipping network body because of body type\", body);\n  return [void 0, \"UNPARSEABLE_BODY_TYPE\"];\n}\nfunction _getBodySize(body, responseType) {\n  try {\n    const bodyStr = responseType === \"json\" && isObjectLike(body) ? JSON.stringify(body) : body;\n    return getBodySize(bodyStr);\n  } catch {\n    return void 0;\n  }\n}\n\nfunction handleNetworkBreadcrumbs(replay) {\n  const client = getClient();\n  try {\n    const {\n      networkDetailAllowUrls,\n      networkDetailDenyUrls,\n      networkCaptureBodies,\n      networkRequestHeaders,\n      networkResponseHeaders\n    } = replay.getOptions();\n    const options = {\n      replay,\n      networkDetailAllowUrls,\n      networkDetailDenyUrls,\n      networkCaptureBodies,\n      networkRequestHeaders,\n      networkResponseHeaders\n    };\n    if (client) {\n      client.on(\"beforeAddBreadcrumb\", (breadcrumb, hint) => beforeAddNetworkBreadcrumb(options, breadcrumb, hint));\n    }\n  } catch {\n  }\n}\nfunction beforeAddNetworkBreadcrumb(options, breadcrumb, hint) {\n  if (!breadcrumb.data) {\n    return;\n  }\n  try {\n    if (_isXhrBreadcrumb(breadcrumb) && _isXhrHint(hint)) {\n      enrichXhrBreadcrumb(breadcrumb, hint);\n      captureXhrBreadcrumbToReplay(breadcrumb, hint, options);\n    }\n    if (_isFetchBreadcrumb(breadcrumb) && _isFetchHint(hint)) {\n      enrichFetchBreadcrumb(breadcrumb, hint);\n      captureFetchBreadcrumbToReplay(breadcrumb, hint, options);\n    }\n  } catch (e) {\n    DEBUG_BUILD && debug.exception(e, \"Error when enriching network breadcrumb\");\n  }\n}\nfunction _isXhrBreadcrumb(breadcrumb) {\n  return breadcrumb.category === \"xhr\";\n}\nfunction _isFetchBreadcrumb(breadcrumb) {\n  return breadcrumb.category === \"fetch\";\n}\nfunction _isXhrHint(hint) {\n  return hint?.xhr;\n}\nfunction _isFetchHint(hint) {\n  return hint?.input !== void 0;\n}\n\nfunction addGlobalListeners(replay) {\n  const client = getClient();\n  addClickKeypressInstrumentationHandler(handleDomListener(replay));\n  addHistoryInstrumentationHandler(handleHistorySpanListener(replay));\n  handleBreadcrumbs(replay);\n  handleNetworkBreadcrumbs(replay);\n  const eventProcessor = handleGlobalEventListener(replay);\n  addEventProcessor(eventProcessor);\n  if (client) {\n    client.on(\"beforeSendEvent\", handleBeforeSendEvent(replay));\n    client.on(\"afterSendEvent\", handleAfterSendEvent(replay));\n    client.on(\"createDsc\", (dsc) => {\n      const replayId = replay.getSessionId();\n      if (replayId && replay.isEnabled() && replay.recordingMode === \"session\") {\n        const isSessionActive = replay.checkAndHandleExpiredSession();\n        if (isSessionActive) {\n          dsc.replay_id = replayId;\n        }\n      }\n    });\n    client.on(\"processSegmentSpan\", handleProcessSegmentSpan(replay));\n    client.on(\"spanStart\", (span) => {\n      replay.lastActiveSpan = span;\n    });\n    client.on(\"spanEnd\", (span) => {\n      replay.lastActiveSpan = span;\n    });\n    let replayIdOnFeedbackOpen;\n    client.on(\"beforeSendFeedback\", async (feedbackEvent, options) => {\n      const feedbackContext = feedbackEvent.contexts?.feedback;\n      if (!options?.includeReplay || !feedbackContext) {\n        return;\n      }\n      if (feedbackContext.source === \"widget\" && replayIdOnFeedbackOpen) {\n        feedbackContext.replay_id = replayIdOnFeedbackOpen;\n        replayIdOnFeedbackOpen = void 0;\n        return;\n      }\n      const replayId = replay.getSessionId();\n      if (replay.isEnabled() && replayId) {\n        if (feedbackContext.source === \"api\") {\n          await replay.sendBufferedReplayOrFlush();\n        }\n        feedbackContext.replay_id = replayId;\n      }\n    });\n    client.on(\"openFeedbackWidget\", async () => {\n      replayIdOnFeedbackOpen = void 0;\n      await replay.sendBufferedReplayOrFlush();\n      replayIdOnFeedbackOpen = replay.isEnabled() ? replay.getSessionId() : void 0;\n    });\n  }\n}\n\nasync function addMemoryEntry(replay) {\n  try {\n    return await Promise.all(\n      createPerformanceSpans(replay, [\n        // @ts-expect-error memory doesn't exist on type Performance as the API is non-standard (we check that it exists above)\n        createMemoryEntry(WINDOW.performance.memory)\n      ])\n    );\n  } catch {\n    return [];\n  }\n}\nfunction createMemoryEntry(memoryEntry) {\n  const { jsHeapSizeLimit, totalJSHeapSize, usedJSHeapSize } = memoryEntry;\n  const time = Date.now() / 1e3;\n  return {\n    type: \"memory\",\n    name: \"memory\",\n    start: time,\n    end: time,\n    data: {\n      memory: {\n        jsHeapSizeLimit,\n        totalJSHeapSize,\n        usedJSHeapSize\n      }\n    }\n  };\n}\n\nfunction debounce(func, wait, options) {\n  return debounce$1(func, wait, {\n    ...options,\n    // @ts-expect-error - Not quite sure why these types do not match, but this is fine\n    setTimeoutImpl: setTimeout$3\n  });\n}\n\nconst NAVIGATOR = GLOBAL_OBJ.navigator;\nfunction getRecordingSamplingOptions() {\n  if (/iPhone|iPad|iPod/i.test(NAVIGATOR?.userAgent ?? \"\") || /Macintosh/i.test(NAVIGATOR?.userAgent ?? \"\") && NAVIGATOR?.maxTouchPoints && NAVIGATOR?.maxTouchPoints > 1) {\n    return {\n      sampling: {\n        mousemove: false\n      }\n    };\n  }\n  return {};\n}\n\nfunction getHandleRecordingEmit(replay) {\n  let hadFirstEvent = false;\n  return (event, _isCheckout) => {\n    try {\n      if (!replay.checkAndHandleExpiredSession()) {\n        DEBUG_BUILD && debug.warn(\"Received replay event after session expired.\");\n        return;\n      }\n      const isCheckout = _isCheckout || !hadFirstEvent;\n      hadFirstEvent = true;\n      syncMirrorAttributesFromMutationEvent(event);\n      if (replay.clickDetector) {\n        updateClickDetectorForRecordingEvent(replay.clickDetector, event);\n      }\n      replay.addUpdate(() => {\n        if (replay.recordingMode === \"buffer\" && isCheckout) {\n          replay.setInitialState();\n        }\n        if (!addEventSync(replay, event, isCheckout)) {\n          return true;\n        }\n        if (!isCheckout) {\n          return false;\n        }\n        const session = replay.session;\n        addSettingsEvent(replay, isCheckout);\n        if (replay.recordingMode === \"buffer\" && session && replay.eventBuffer && !session.dirty) {\n          const earliestEvent = replay.eventBuffer.getEarliestTimestamp();\n          if (earliestEvent) {\n            DEBUG_BUILD && debug.log(`Updating session start time to earliest event in buffer to ${new Date(earliestEvent)}`);\n            session.started = earliestEvent;\n            if (replay.getOptions().stickySession) {\n              saveSession(session);\n            }\n          }\n        }\n        if (session?.previousSessionId) {\n          return true;\n        }\n        if (replay.recordingMode === \"session\") {\n          void replay.flush();\n        }\n        return true;\n      });\n    } catch (error) {\n      replay.handleException(error);\n    }\n  };\n}\nfunction syncMirrorAttributesFromMutationEvent(event) {\n  const data = event.data;\n  if (event.type !== EventType.IncrementalSnapshot || !data || typeof data !== \"object\" || !(\"source\" in data) || data.source !== IncrementalSource.Mutation || !(\"attributes\" in data) || !Array.isArray(data.attributes)) {\n    return;\n  }\n  for (const mutation of data.attributes) {\n    const node = record.mirror.getNode(mutation.id);\n    const meta = node && record.mirror.getMeta(node);\n    if (!node || meta?.type !== NodeType.Element) {\n      continue;\n    }\n    const attributes = { ...meta.attributes };\n    let changed = false;\n    for (const [attributeName, value] of Object.entries(mutation.attributes)) {\n      if (!BREADCRUMB_RELEVANT_ATTRIBUTES.has(attributeName)) {\n        continue;\n      }\n      if (value === null) {\n        delete attributes[attributeName];\n      } else {\n        attributes[attributeName] = value;\n      }\n      changed = true;\n    }\n    if (changed) {\n      record.mirror.add(node, { ...meta, attributes });\n    }\n  }\n}\nfunction createOptionsEvent(replay) {\n  const options = replay.getOptions();\n  return {\n    type: EventType.Custom,\n    timestamp: Date.now(),\n    data: {\n      tag: \"options\",\n      payload: {\n        shouldRecordCanvas: replay.isRecordingCanvas(),\n        sessionSampleRate: options.sessionSampleRate,\n        errorSampleRate: options.errorSampleRate,\n        useCompressionOption: options.useCompression,\n        blockAllMedia: options.blockAllMedia,\n        maskAllText: options.maskAllText,\n        maskAllInputs: options.maskAllInputs,\n        useCompression: replay.eventBuffer ? replay.eventBuffer.type === \"worker\" : false,\n        networkDetailHasUrls: options.networkDetailAllowUrls.length > 0,\n        networkCaptureBodies: options.networkCaptureBodies,\n        networkRequestHasHeaders: options.networkRequestHeaders.length > 0,\n        networkResponseHasHeaders: options.networkResponseHeaders.length > 0\n      }\n    }\n  };\n}\nfunction addSettingsEvent(replay, isCheckout) {\n  if (!isCheckout || replay.session?.segmentId !== 0) {\n    return;\n  }\n  addEventSync(replay, createOptionsEvent(replay), false);\n}\n\nfunction closestElementOfNode(node) {\n  if (!node) {\n    return null;\n  }\n  try {\n    const el = node.nodeType === node.ELEMENT_NODE ? node : node.parentElement;\n    return el;\n  } catch {\n    return null;\n  }\n}\n\nfunction createReplayEnvelope(replayEvent, recordingData, dsn, tunnel) {\n  return createEnvelope(\n    createEventEnvelopeHeaders(replayEvent, getSdkMetadataForEnvelopeHeader(replayEvent), tunnel, dsn),\n    [\n      [{ type: \"replay_event\" }, replayEvent],\n      [\n        {\n          type: \"replay_recording\",\n          // If string then we need to encode to UTF8, otherwise will have\n          // wrong size. TextEncoder has similar browser support to\n          // MutationObserver, although it does not accept IE11.\n          length: typeof recordingData === \"string\" ? new TextEncoder().encode(recordingData).length : recordingData.length\n        },\n        recordingData\n      ]\n    ]\n  );\n}\n\nfunction prepareRecordingData({\n  recordingData,\n  headers\n}) {\n  let payloadWithSequence;\n  const replayHeaders = `${JSON.stringify(headers)}\n`;\n  if (typeof recordingData === \"string\") {\n    payloadWithSequence = `${replayHeaders}${recordingData}`;\n  } else {\n    const enc = new TextEncoder();\n    const sequence = enc.encode(replayHeaders);\n    payloadWithSequence = new Uint8Array(sequence.length + recordingData.length);\n    payloadWithSequence.set(sequence);\n    payloadWithSequence.set(recordingData, sequence.length);\n  }\n  return payloadWithSequence;\n}\n\nasync function prepareReplayEvent({\n  client,\n  scope,\n  replayId: event_id,\n  event\n}) {\n  const integrations = typeof client[\"_integrations\"] === \"object\" && client[\"_integrations\"] !== null && !Array.isArray(client[\"_integrations\"]) ? Object.keys(client[\"_integrations\"]) : void 0;\n  const eventHint = { event_id, integrations };\n  client.emit(\"preprocessEvent\", event, eventHint);\n  const preparedEvent = await prepareEvent(\n    client.getOptions(),\n    event,\n    eventHint,\n    scope,\n    client,\n    getIsolationScope()\n  );\n  if (!preparedEvent) {\n    return null;\n  }\n  client.emit(\"postprocessEvent\", preparedEvent, eventHint);\n  preparedEvent.platform = preparedEvent.platform || \"javascript\";\n  const metadata = client.getSdkMetadata();\n  const { name, version, settings } = metadata?.sdk || {};\n  preparedEvent.sdk = {\n    ...preparedEvent.sdk,\n    name: name || \"sentry.javascript.unknown\",\n    version: version || \"0.0.0\",\n    settings\n  };\n  return preparedEvent;\n}\n\nasync function sendReplayRequest({\n  recordingData,\n  replayId,\n  segmentId: segment_id,\n  eventContext,\n  timestamp,\n  session\n}) {\n  const preparedRecordingData = prepareRecordingData({\n    recordingData,\n    headers: {\n      segment_id\n    }\n  });\n  const { urls, errorIds, traceIds, segmentNames, initialTimestamp } = eventContext;\n  const client = getClient();\n  const scope = getCurrentScope();\n  const transport = client?.getTransport();\n  const dsn = client?.getDsn();\n  if (!client || !transport || !dsn || !session.sampled) {\n    return Promise.resolve({});\n  }\n  const baseEvent = {\n    type: REPLAY_EVENT_NAME,\n    replay_start_timestamp: initialTimestamp / 1e3,\n    timestamp: timestamp / 1e3,\n    error_ids: errorIds,\n    trace_ids: traceIds,\n    segment_names: segmentNames,\n    urls,\n    replay_id: replayId,\n    segment_id,\n    replay_type: session.sampled\n  };\n  const replayEvent = await prepareReplayEvent({ scope, client, replayId, event: baseEvent });\n  if (!replayEvent) {\n    DEBUG_BUILD && debug.log(\"An event processor returned `null`, will not send event.\");\n    return Promise.resolve({});\n  }\n  delete replayEvent.sdkProcessingMetadata;\n  const envelope = createReplayEnvelope(replayEvent, preparedRecordingData, dsn, client.getOptions().tunnel);\n  let response;\n  try {\n    response = await transport.send(envelope);\n  } catch (err) {\n    const error = new Error(UNABLE_TO_SEND_REPLAY);\n    try {\n      error.cause = err;\n    } catch {\n    }\n    throw error;\n  }\n  const rateLimits = updateRateLimits({}, response);\n  if (isRateLimited(rateLimits, \"replay\")) {\n    throw new RateLimitError(rateLimits);\n  }\n  if (typeof response.statusCode === \"number\" && (response.statusCode < 200 || response.statusCode >= 300)) {\n    throw new TransportStatusCodeError(response.statusCode);\n  }\n  return response;\n}\nclass TransportStatusCodeError extends Error {\n  constructor(statusCode) {\n    super(`Transport returned status code ${statusCode}`);\n  }\n}\nclass RateLimitError extends Error {\n  constructor(rateLimits) {\n    super(\"Rate limit hit\");\n    this.rateLimits = rateLimits;\n  }\n}\nclass ReplayDurationLimitError extends Error {\n  constructor() {\n    super(\"Session is too long, not sending replay\");\n  }\n}\n\nasync function sendReplay(replayData, retryConfig = {\n  count: 0,\n  interval: RETRY_BASE_INTERVAL\n}) {\n  const { recordingData, onError } = replayData;\n  if (!recordingData.length) {\n    return;\n  }\n  try {\n    await sendReplayRequest(replayData);\n    return true;\n  } catch (err) {\n    if (err instanceof TransportStatusCodeError || err instanceof RateLimitError) {\n      throw err;\n    }\n    setContext(\"Replays\", {\n      _retryCount: retryConfig.count\n    });\n    if (onError) {\n      onError(err);\n    }\n    if (retryConfig.count >= RETRY_MAX_COUNT) {\n      const error = new Error(`${UNABLE_TO_SEND_REPLAY} - max retries exceeded`);\n      try {\n        error.cause = err;\n      } catch {\n      }\n      throw error;\n    }\n    retryConfig.interval *= ++retryConfig.count;\n    return new Promise((resolve, reject) => {\n      setTimeout$3(async () => {\n        try {\n          await sendReplay(replayData, retryConfig);\n          resolve(true);\n        } catch (err2) {\n          reject(err2);\n        }\n      }, retryConfig.interval);\n    });\n  }\n}\n\nconst THROTTLED = \"__THROTTLED\";\nconst SKIPPED = \"__SKIPPED\";\nfunction throttle(fn, maxCount, durationSeconds) {\n  const counter = /* @__PURE__ */ new Map();\n  const _cleanup = (now) => {\n    const threshold = now - durationSeconds;\n    counter.forEach((_value, key) => {\n      if (key < threshold) {\n        counter.delete(key);\n      }\n    });\n  };\n  const _getTotalCount = () => {\n    return [...counter.values()].reduce((a, b) => a + b, 0);\n  };\n  let isThrottled = false;\n  return (...rest) => {\n    const now = Math.floor(Date.now() / 1e3);\n    _cleanup(now);\n    if (_getTotalCount() >= maxCount) {\n      const wasThrottled = isThrottled;\n      isThrottled = true;\n      return wasThrottled ? SKIPPED : THROTTLED;\n    }\n    isThrottled = false;\n    const count = counter.get(now) || 0;\n    counter.set(now, count + 1);\n    return fn(...rest);\n  };\n}\n\nclass ReplayContainer {\n  constructor({\n    options,\n    recordingOptions\n  }) {\n    this.eventBuffer = null;\n    this.performanceEntries = [];\n    this.replayPerformanceEntries = [];\n    this.recordingMode = \"session\";\n    this.timeouts = {\n      sessionIdlePause: SESSION_IDLE_PAUSE_DURATION,\n      sessionIdleExpire: SESSION_IDLE_EXPIRE_DURATION\n    };\n    this._lastActivity = Date.now();\n    this._isEnabled = false;\n    this._isPaused = false;\n    this._requiresManualStart = false;\n    this._hasInitializedCoreListeners = false;\n    this._context = {\n      errorIds: /* @__PURE__ */ new Set(),\n      traceIds: /* @__PURE__ */ new Set(),\n      segmentNames: /* @__PURE__ */ new Set(),\n      urls: [],\n      initialTimestamp: Date.now(),\n      initialUrl: \"\"\n    };\n    this._recordingOptions = recordingOptions;\n    this._options = options;\n    this._debouncedFlush = debounce(() => this._flush(), this._options.flushMinDelay, {\n      maxWait: this._options.flushMaxDelay\n    });\n    this._throttledAddEvent = throttle(\n      (event, isCheckout) => addEvent(this, event, isCheckout),\n      // Max 300 events...\n      300,\n      // ... per 5s\n      5\n    );\n    const { slowClickTimeout, slowClickIgnoreSelectors } = this.getOptions();\n    const slowClickConfig = slowClickTimeout ? {\n      threshold: Math.min(SLOW_CLICK_THRESHOLD, slowClickTimeout),\n      timeout: slowClickTimeout,\n      scrollTimeout: SLOW_CLICK_SCROLL_TIMEOUT,\n      ignoreSelector: slowClickIgnoreSelectors ? slowClickIgnoreSelectors.join(\",\") : \"\"\n    } : void 0;\n    if (slowClickConfig) {\n      this.clickDetector = new ClickDetector(this, slowClickConfig);\n    }\n    if (DEBUG_BUILD) {\n      const experiments = options._experiments;\n      debug.setConfig({\n        captureExceptions: !!experiments.captureExceptions,\n        traceInternals: !!experiments.traceInternals\n      });\n    }\n    this._handleVisibilityChange = () => {\n      if (WINDOW.document.visibilityState === \"visible\") {\n        this._doChangeToForegroundTasks();\n      } else {\n        this._doChangeToBackgroundTasks();\n      }\n    };\n    this._handleWindowBlur = () => {\n      const breadcrumb = createBreadcrumb({\n        category: \"ui.blur\"\n      });\n      this._doChangeToBackgroundTasks(breadcrumb);\n    };\n    this._handleWindowFocus = () => {\n      const breadcrumb = createBreadcrumb({\n        category: \"ui.focus\"\n      });\n      this._doChangeToForegroundTasks(breadcrumb);\n    };\n    this._handleKeyboardEvent = (event) => {\n      handleKeyboardEvent(this, event);\n    };\n  }\n  /** Get the event context. */\n  getContext() {\n    return this._context;\n  }\n  /** If recording is currently enabled. */\n  isEnabled() {\n    return this._isEnabled;\n  }\n  /** If recording is currently paused. */\n  isPaused() {\n    return this._isPaused;\n  }\n  /**\n   * Determine if canvas recording is enabled\n   */\n  isRecordingCanvas() {\n    return Boolean(this._canvas);\n  }\n  /** Get the replay integration options. */\n  getOptions() {\n    return this._options;\n  }\n  /** A wrapper to conditionally capture exceptions. */\n  handleException(error) {\n    DEBUG_BUILD && debug.exception(error);\n    if (this._options.onError) {\n      this._options.onError(error);\n    }\n  }\n  /**\n   * Initializes the plugin based on sampling configuration. Should not be\n   * called outside of constructor.\n   */\n  initializeSampling(previousSessionId) {\n    const { errorSampleRate, sessionSampleRate } = this._options;\n    const requiresManualStart = errorSampleRate <= 0 && sessionSampleRate <= 0;\n    this._requiresManualStart = requiresManualStart;\n    if (requiresManualStart) {\n      return;\n    }\n    this._initializeSessionForSampling(previousSessionId);\n    if (!this.session) {\n      DEBUG_BUILD && debug.exception(new Error(\"Unable to initialize and create session\"));\n      return;\n    }\n    if (this.session.sampled === false) {\n      return;\n    }\n    this.recordingMode = this.session.sampled === \"buffer\" && this.session.segmentId === 0 ? \"buffer\" : \"session\";\n    DEBUG_BUILD && debug.infoTick(`Starting replay in ${this.recordingMode} mode`);\n    this._initializeRecording();\n  }\n  /**\n   * Start a replay regardless of sampling rate. Calling this will always\n   * create a new session. Will log a message if replay is already in progress.\n   *\n   * Creates or loads a session, attaches listeners to varying events (DOM,\n   * _performanceObserver, Recording, Sentry SDK, etc)\n   */\n  start() {\n    if (this._isEnabled && this.recordingMode === \"session\") {\n      DEBUG_BUILD && debug.log(\"Recording is already in progress\");\n      return;\n    }\n    if (this._isEnabled && this.recordingMode === \"buffer\") {\n      DEBUG_BUILD && debug.log(\"Buffering is in progress, call `flush()` to save the replay\");\n      return;\n    }\n    DEBUG_BUILD && debug.infoTick(\"Starting replay in session mode\");\n    this._updateUserActivity();\n    const session = loadOrCreateSession(\n      {\n        maxReplayDuration: this._options.maxReplayDuration,\n        sessionIdleExpire: this.timeouts.sessionIdleExpire\n      },\n      {\n        stickySession: this._options.stickySession,\n        // This is intentional: create a new session-based replay when calling `start()`\n        sessionSampleRate: 1,\n        allowBuffering: false\n      }\n    );\n    this.session = session;\n    this.recordingMode = \"session\";\n    this._initializeRecording();\n  }\n  /**\n   * Start replay buffering. Buffers until `flush()` is called or, if\n   * `replaysOnErrorSampleRate` > 0, an error occurs.\n   */\n  startBuffering() {\n    if (this._isEnabled) {\n      DEBUG_BUILD && debug.log(\"Buffering is in progress, call `flush()` to save the replay\");\n      return;\n    }\n    DEBUG_BUILD && debug.infoTick(\"Starting replay in buffer mode\");\n    const session = loadOrCreateSession(\n      {\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        maxReplayDuration: this._options.maxReplayDuration\n      },\n      {\n        stickySession: this._options.stickySession,\n        sessionSampleRate: 0,\n        allowBuffering: true\n      }\n    );\n    this.session = session;\n    this.recordingMode = \"buffer\";\n    this._initializeRecording();\n  }\n  /**\n   * Start recording.\n   *\n   * Note that this will cause a new DOM checkout\n   */\n  startRecording() {\n    try {\n      const canvasOptions = this._canvas;\n      this._stopRecording = record({\n        ...this._recordingOptions,\n        // When running in error sampling mode, we need to overwrite `checkoutEveryNms`\n        // Without this, it would record forever, until an error happens, which we don't want\n        // instead, we'll always keep the last 60 seconds of replay before an error happened\n        ...this.recordingMode === \"buffer\" ? { checkoutEveryNms: BUFFER_CHECKOUT_TIME } : (\n          // Otherwise, use experimental option w/ min checkout time of 6 minutes\n          // This is to improve playback seeking as there could potentially be\n          // less mutations to process in the worse cases.\n          //\n          // checkout by \"N\" events is probably ideal, but means we have less\n          // control about the number of checkouts we make (which generally\n          // increases replay size)\n          this._options._experiments.continuousCheckout && {\n            // Minimum checkout time is 6 minutes\n            checkoutEveryNms: Math.max(36e4, this._options._experiments.continuousCheckout)\n          }\n        ),\n        emit: getHandleRecordingEmit(this),\n        ...getRecordingSamplingOptions(),\n        onMutation: this._onMutationHandler.bind(this),\n        ...canvasOptions ? {\n          recordCanvas: canvasOptions.recordCanvas,\n          getCanvasManager: canvasOptions.getCanvasManager,\n          sampling: canvasOptions.sampling,\n          dataURLOptions: canvasOptions.dataURLOptions\n        } : {}\n      });\n    } catch (err) {\n      this.handleException(err);\n    }\n  }\n  /**\n   * Stops the recording, if it was running.\n   *\n   * Returns true if it was previously stopped, or is now stopped,\n   * otherwise false.\n   */\n  stopRecording() {\n    try {\n      if (this._stopRecording) {\n        this._stopRecording();\n        this._stopRecording = void 0;\n      }\n      return true;\n    } catch (err) {\n      this.handleException(err);\n      return false;\n    }\n  }\n  /**\n   * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n   * does not support a teardown\n   */\n  async stop({\n    forceFlush = false,\n    reason\n  } = {}) {\n    if (!this._isEnabled) {\n      return;\n    }\n    this._isEnabled = false;\n    this.recordingMode = \"buffer\";\n    const stopReason = reason ?? \"manual\";\n    getClient()?.emit(\"replayEnd\", { sessionId: this.session?.id, reason: stopReason });\n    try {\n      DEBUG_BUILD && debug.log(`Stopping Replay triggered by ${stopReason}`);\n      resetReplayIdOnDynamicSamplingContext();\n      this._removeListeners();\n      this.stopRecording();\n      this._debouncedFlush.cancel();\n      if (forceFlush) {\n        await this._flush({ force: true });\n      }\n      this.eventBuffer?.destroy();\n      this.eventBuffer = null;\n      clearSession(this);\n    } catch (err) {\n      this.handleException(err);\n    }\n  }\n  /**\n   * Pause some replay functionality. See comments for `_isPaused`.\n   * This differs from stop as this only stops DOM recording, it is\n   * not as thorough of a shutdown as `stop()`.\n   */\n  pause() {\n    if (this._isPaused) {\n      return;\n    }\n    this._isPaused = true;\n    this.stopRecording();\n    DEBUG_BUILD && debug.log(\"Pausing replay\");\n  }\n  /**\n   * Resumes recording, see notes for `pause().\n   *\n   * Note that calling `startRecording()` here will cause a\n   * new DOM checkout.`\n   */\n  resume() {\n    if (!this._isPaused || !this._checkSession()) {\n      return;\n    }\n    this._isPaused = false;\n    this.startRecording();\n    DEBUG_BUILD && debug.log(\"Resuming replay\");\n  }\n  /**\n   * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n   * Unless `continueRecording` is false, the replay will continue to record and\n   * behave as a \"session\"-based replay.\n   *\n   * Otherwise, queue up a flush.\n   */\n  async sendBufferedReplayOrFlush({ continueRecording = true } = {}) {\n    if (this.recordingMode === \"session\") {\n      return this.flushImmediate();\n    }\n    const activityTime = Date.now();\n    DEBUG_BUILD && debug.log(\"Converting buffer to session\");\n    await this.flushImmediate();\n    const hasStoppedRecording = this.stopRecording();\n    if (!continueRecording || !hasStoppedRecording) {\n      return;\n    }\n    if (this.recordingMode === \"session\") {\n      return;\n    }\n    this.recordingMode = \"session\";\n    if (this.session) {\n      this.session.dirty = false;\n      this._updateUserActivity(activityTime);\n      this._updateSessionActivity(activityTime);\n      this._maybeSaveSession();\n      setReplayIdOnDynamicSamplingContext(this.session.id);\n    }\n    this.startRecording();\n  }\n  /**\n   * We want to batch uploads of replay events. Save events only if\n   * `<flushMinDelay>` milliseconds have elapsed since the last event\n   * *OR* if `<flushMaxDelay>` milliseconds have elapsed.\n   *\n   * Accepts a callback to perform side-effects and returns true to stop batch\n   * processing and hand back control to caller.\n   */\n  addUpdate(cb) {\n    const cbResult = cb();\n    if (this.recordingMode === \"buffer\" || !this._isEnabled) {\n      return;\n    }\n    if (cbResult === true) {\n      return;\n    }\n    this._debouncedFlush();\n  }\n  /**\n   * Updates the user activity timestamp and resumes recording. This should be\n   * called in an event handler for a user action that we consider as the user\n   * being \"active\" (e.g. a mouse click).\n   */\n  triggerUserActivity() {\n    this._updateUserActivity();\n    if (!this._stopRecording) {\n      if (!this._checkSession()) {\n        return;\n      }\n      this.resume();\n      return;\n    }\n    this.checkAndHandleExpiredSession();\n    this._updateSessionActivity();\n  }\n  /**\n   * Updates the user activity timestamp *without* resuming\n   * recording. Some user events (e.g. keydown) can be create\n   * low-value replays that only contain the keypress as a\n   * breadcrumb. Instead this would require other events to\n   * create a new replay after a session has expired.\n   */\n  updateUserActivity() {\n    this._updateUserActivity();\n    this._updateSessionActivity();\n  }\n  /**\n   * Only flush if `this.recordingMode === 'session'`\n   */\n  conditionalFlush() {\n    if (this.recordingMode === \"buffer\") {\n      return Promise.resolve();\n    }\n    return this.flushImmediate();\n  }\n  /**\n   * Flush using debounce flush\n   */\n  flush() {\n    return this._debouncedFlush();\n  }\n  /**\n   * Always flush via `_debouncedFlush` so that we do not have flushes triggered\n   * from calling both `flush` and `_debouncedFlush`. Otherwise, there could be\n   * cases of multiple flushes happening closely together.\n   */\n  flushImmediate() {\n    this._debouncedFlush();\n    return this._debouncedFlush.flush();\n  }\n  /**\n   * Cancels queued up flushes.\n   */\n  cancelFlush() {\n    this._debouncedFlush.cancel();\n  }\n  /** Get the current session (=replay) ID\n   *\n   * @param onlyIfSampled - If true, will only return the session ID if the session is sampled.\n   */\n  getSessionId(onlyIfSampled) {\n    if (onlyIfSampled && this.session?.sampled === false) {\n      return void 0;\n    }\n    return this.session?.id;\n  }\n  /**\n   * Checks if recording should be stopped due to user inactivity. Otherwise\n   * check if session is expired and create a new session if so. Triggers a new\n   * full snapshot on new session.\n   *\n   * Returns true if session is not expired, false otherwise.\n   * @hidden\n   */\n  checkAndHandleExpiredSession() {\n    if (this._lastActivity && isExpired(this._lastActivity, this.timeouts.sessionIdlePause) && this.session?.sampled === \"session\") {\n      this.pause();\n      return;\n    }\n    if (!this._checkSession()) {\n      return false;\n    }\n    return true;\n  }\n  /**\n   * Capture some initial state that can change throughout the lifespan of the\n   * replay. This is required because otherwise they would be captured at the\n   * first flush.\n   */\n  setInitialState() {\n    const urlPath = `${WINDOW.location.pathname}${WINDOW.location.hash}${WINDOW.location.search}`;\n    const url = `${WINDOW.location.origin}${urlPath}`;\n    this.performanceEntries = [];\n    this.replayPerformanceEntries = [];\n    this._clearContext();\n    this._context.initialUrl = url;\n    this._context.initialTimestamp = Date.now();\n    this._context.urls.push(url);\n  }\n  /**\n   * Add a breadcrumb event, that may be throttled.\n   * If it was throttled, we add a custom breadcrumb to indicate that.\n   */\n  throttledAddEvent(event, isCheckout) {\n    const res = this._throttledAddEvent(event, isCheckout);\n    if (res === THROTTLED) {\n      const breadcrumb = createBreadcrumb({\n        category: \"replay.throttled\"\n      });\n      this.addUpdate(() => {\n        return !addEventSync(this, {\n          type: ReplayEventTypeCustom,\n          timestamp: breadcrumb.timestamp || 0,\n          data: {\n            tag: \"breadcrumb\",\n            payload: breadcrumb,\n            metric: true\n          }\n        });\n      });\n    }\n    return res;\n  }\n  /**\n   * This will get the parametrized route name of the current page.\n   * This is only available if performance is enabled, and if an instrumented router is used.\n   */\n  getCurrentRoute() {\n    const lastActiveSpan = this.lastActiveSpan || getActiveSpan();\n    const lastRootSpan = lastActiveSpan && getRootSpan(lastActiveSpan);\n    if (!lastRootSpan) {\n      return void 0;\n    }\n    const spanJson = spanToJSON(lastRootSpan);\n    const source = spanJson.attributes[Nm];\n    if (!source || ![\"route\", \"custom\"].includes(source)) {\n      return void 0;\n    }\n    return spanJson.name;\n  }\n  /**\n   * Initialize and start all listeners to varying events (DOM,\n   * Performance Observer, Recording, Sentry SDK, etc)\n   */\n  _initializeRecording() {\n    this.setInitialState();\n    this._updateSessionActivity();\n    this.eventBuffer = createEventBuffer({\n      useCompression: this._options.useCompression,\n      workerUrl: this._options.workerUrl\n    });\n    this._removeListeners();\n    this._addListeners();\n    this._isEnabled = true;\n    this._isPaused = false;\n    if (this.session) {\n      getClient()?.emit(\"replayStart\", {\n        sessionId: this.session.id,\n        recordingMode: this.recordingMode\n      });\n    }\n    this.startRecording();\n    if (this.recordingMode === \"session\" && this.session) {\n      setReplayIdOnDynamicSamplingContext(this.session.id);\n    }\n  }\n  /**\n   * Loads (or refreshes) the current session.\n   */\n  _initializeSessionForSampling(previousSessionId) {\n    const allowBuffering = this._options.errorSampleRate > 0;\n    const session = loadOrCreateSession(\n      {\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        maxReplayDuration: this._options.maxReplayDuration,\n        previousSessionId\n      },\n      {\n        stickySession: this._options.stickySession,\n        sessionSampleRate: this._options.sessionSampleRate,\n        allowBuffering\n      }\n    );\n    this.session = session;\n  }\n  /**\n   * Checks and potentially refreshes the current session.\n   * Returns false if session is not recorded.\n   */\n  _checkSession() {\n    if (!this.session) {\n      return false;\n    }\n    const currentSession = this.session;\n    if (shouldRefreshSession(currentSession, {\n      sessionIdleExpire: this.timeouts.sessionIdleExpire,\n      maxReplayDuration: this._options.maxReplayDuration\n    })) {\n      this._refreshSession(currentSession);\n      return false;\n    }\n    return true;\n  }\n  /**\n   * Refresh a session with a new one.\n   * This stops the current session (without forcing a flush, as that would never work since we are expired),\n   * and then does a new sampling based on the refreshed session.\n   */\n  async _refreshSession(session) {\n    if (!this._isEnabled) {\n      return;\n    }\n    await this.stop({ reason: \"sessionExpired\" });\n    this.initializeSampling(session.id);\n  }\n  /**\n   * Adds listeners to record events for the replay\n   */\n  _addListeners() {\n    try {\n      WINDOW.document.addEventListener(\"visibilitychange\", this._handleVisibilityChange);\n      WINDOW.addEventListener(\"blur\", this._handleWindowBlur);\n      WINDOW.addEventListener(\"focus\", this._handleWindowFocus);\n      WINDOW.addEventListener(\"keydown\", this._handleKeyboardEvent);\n      if (this.clickDetector) {\n        this.clickDetector.addListeners();\n      }\n      if (!this._hasInitializedCoreListeners) {\n        addGlobalListeners(this);\n        this._hasInitializedCoreListeners = true;\n      }\n    } catch (err) {\n      this.handleException(err);\n    }\n    this._performanceCleanupCallback = setupPerformanceObserver(this);\n  }\n  /**\n   * Cleans up listeners that were created in `_addListeners`\n   */\n  _removeListeners() {\n    try {\n      WINDOW.document.removeEventListener(\"visibilitychange\", this._handleVisibilityChange);\n      WINDOW.removeEventListener(\"blur\", this._handleWindowBlur);\n      WINDOW.removeEventListener(\"focus\", this._handleWindowFocus);\n      WINDOW.removeEventListener(\"keydown\", this._handleKeyboardEvent);\n      if (this.clickDetector) {\n        this.clickDetector.removeListeners();\n      }\n      if (this._performanceCleanupCallback) {\n        this._performanceCleanupCallback();\n      }\n    } catch (err) {\n      this.handleException(err);\n    }\n  }\n  /**\n   * Tasks to run when we consider a page to be hidden (via blurring and/or visibility)\n   */\n  _doChangeToBackgroundTasks(breadcrumb) {\n    if (!this.session) {\n      return;\n    }\n    const expired = shouldRefreshSession(this.session, {\n      maxReplayDuration: this._options.maxReplayDuration,\n      sessionIdleExpire: this.timeouts.sessionIdleExpire\n    });\n    if (expired) {\n      resetReplayIdOnDynamicSamplingContext();\n      return;\n    }\n    if (breadcrumb) {\n      this._createCustomBreadcrumb(breadcrumb);\n    }\n    void this.conditionalFlush();\n  }\n  /**\n   * Tasks to run when we consider a page to be visible (via focus and/or visibility)\n   */\n  _doChangeToForegroundTasks(breadcrumb) {\n    if (!this.session) {\n      return;\n    }\n    const isSessionActive = this.checkAndHandleExpiredSession();\n    if (!isSessionActive) {\n      DEBUG_BUILD && debug.log(\"Document has become active, but session has expired\");\n      return;\n    }\n    if (breadcrumb) {\n      this._createCustomBreadcrumb(breadcrumb);\n    }\n  }\n  /**\n   * Update user activity (across session lifespans)\n   */\n  _updateUserActivity(_lastActivity = Date.now()) {\n    this._lastActivity = _lastActivity;\n  }\n  /**\n   * Updates the session's last activity timestamp\n   */\n  _updateSessionActivity(_lastActivity = Date.now()) {\n    if (this.session) {\n      this.session.lastActivity = _lastActivity;\n      this._maybeSaveSession();\n    }\n  }\n  /**\n   * Helper to create (and buffer) a replay breadcrumb from a core SDK breadcrumb\n   */\n  _createCustomBreadcrumb(breadcrumb) {\n    this.addUpdate(() => {\n      this.throttledAddEvent({\n        type: EventType.Custom,\n        timestamp: breadcrumb.timestamp || 0,\n        data: {\n          tag: \"breadcrumb\",\n          payload: breadcrumb\n        }\n      });\n    });\n  }\n  /**\n   * Observed performance events are added to `this.performanceEntries`. These\n   * are included in the replay event before it is finished and sent to Sentry.\n   */\n  _addPerformanceEntries() {\n    let performanceEntries = createPerformanceEntries(this.performanceEntries).concat(this.replayPerformanceEntries);\n    this.performanceEntries = [];\n    this.replayPerformanceEntries = [];\n    if (this._requiresManualStart) {\n      const initialTimestampInSeconds = this._context.initialTimestamp / 1e3;\n      performanceEntries = performanceEntries.filter((entry) => entry.start >= initialTimestampInSeconds);\n    }\n    return Promise.all(createPerformanceSpans(this, performanceEntries));\n  }\n  /**\n   * Clear _context\n   */\n  _clearContext() {\n    this._context.errorIds.clear();\n    this._context.traceIds.clear();\n    this._context.segmentNames.clear();\n    this._context.urls = [];\n  }\n  /** Update the initial timestamp based on the buffer content. */\n  _updateInitialTimestampFromEventBuffer() {\n    const { session, eventBuffer } = this;\n    if (!session || !eventBuffer || this._requiresManualStart) {\n      return;\n    }\n    if (session.segmentId) {\n      return;\n    }\n    const earliestEvent = eventBuffer.getEarliestTimestamp();\n    if (earliestEvent && earliestEvent < this._context.initialTimestamp) {\n      this._context.initialTimestamp = earliestEvent;\n    }\n  }\n  /**\n   * Return and clear _context\n   */\n  _popEventContext() {\n    const _context = {\n      initialTimestamp: this._context.initialTimestamp,\n      initialUrl: this._context.initialUrl,\n      errorIds: Array.from(this._context.errorIds),\n      traceIds: Array.from(this._context.traceIds),\n      segmentNames: Array.from(this._context.segmentNames),\n      urls: this._context.urls\n    };\n    this._clearContext();\n    return _context;\n  }\n  /**\n   * Flushes replay event buffer to Sentry.\n   *\n   * Performance events are only added right before flushing - this is\n   * due to the buffered performance observer events.\n   *\n   * Should never be called directly, only by `flush`\n   */\n  async _runFlush() {\n    const replayId = this.getSessionId();\n    if (!this.session || !this.eventBuffer || !replayId) {\n      DEBUG_BUILD && debug.error(\"No session or eventBuffer found to flush.\");\n      return;\n    }\n    await this._addPerformanceEntries();\n    if (!this.eventBuffer?.hasEvents) {\n      return;\n    }\n    await addMemoryEntry(this);\n    if (!this.eventBuffer) {\n      return;\n    }\n    if (replayId !== this.getSessionId()) {\n      return;\n    }\n    try {\n      this._updateInitialTimestampFromEventBuffer();\n      const timestamp = Date.now();\n      if (timestamp - this._context.initialTimestamp > this._options.maxReplayDuration + 3e4) {\n        throw new ReplayDurationLimitError();\n      }\n      const eventContext = this._popEventContext();\n      const segmentId = this.session.segmentId++;\n      this._maybeSaveSession();\n      const recordingData = await this.eventBuffer.finish();\n      await sendReplay({\n        replayId,\n        recordingData,\n        segmentId,\n        eventContext,\n        session: this.session,\n        timestamp,\n        onError: (err) => this.handleException(err)\n      });\n    } catch (err) {\n      this.handleException(err);\n      this.stop({ reason: \"sendError\" });\n      const client = getClient();\n      if (client) {\n        let dropReason;\n        if (err instanceof RateLimitError) {\n          dropReason = \"ratelimit_backoff\";\n        } else if (err instanceof ReplayDurationLimitError) {\n          dropReason = \"invalid\";\n        } else {\n          dropReason = \"send_error\";\n        }\n        client.recordDroppedEvent(dropReason, \"replay\");\n      }\n    }\n  }\n  /**\n   * Flush recording data to Sentry. Creates a lock so that only a single flush\n   * can be active at a time. Do not call this directly.\n   */\n  async _flush({\n    force = false\n  } = {}) {\n    if (!this._isEnabled && !force) {\n      return;\n    }\n    if (!this.checkAndHandleExpiredSession()) {\n      DEBUG_BUILD && debug.error(\"Attempting to finish replay event after session expired.\");\n      return;\n    }\n    if (!this.session) {\n      return;\n    }\n    const start = this.session.started;\n    const now = Date.now();\n    const duration = now - start;\n    this._debouncedFlush.cancel();\n    const tooShort = duration < this._options.minReplayDuration;\n    const tooLong = duration > this._options.maxReplayDuration + 5e3;\n    if (tooShort || tooLong) {\n      DEBUG_BUILD && debug.log(\n        `Session duration (${Math.floor(duration / 1e3)}s) is too ${tooShort ? \"short\" : \"long\"}, not sending replay.`\n      );\n      if (tooShort) {\n        this._debouncedFlush();\n      }\n      return;\n    }\n    const eventBuffer = this.eventBuffer;\n    if (eventBuffer && this.session.segmentId === 0 && !eventBuffer.hasCheckout) {\n      DEBUG_BUILD && debug.log(\"Flushing initial segment without checkout.\");\n    }\n    const _flushInProgress = !!this._flushLock;\n    if (!this._flushLock) {\n      this._flushLock = this._runFlush();\n    }\n    try {\n      await this._flushLock;\n    } catch (err) {\n      this.handleException(err);\n    } finally {\n      this._flushLock = void 0;\n      if (_flushInProgress) {\n        this._debouncedFlush();\n      }\n    }\n  }\n  /** Save the session, if it is sticky */\n  _maybeSaveSession() {\n    if (this.session && this._options.stickySession) {\n      saveSession(this.session);\n    }\n  }\n  /** Handler for rrweb.record.onMutation */\n  _onMutationHandler(mutations) {\n    const { ignoreMutations } = this._options._experiments;\n    if (ignoreMutations?.length) {\n      if (mutations.some((mutation) => {\n        const el = closestElementOfNode(mutation.target);\n        const selector = ignoreMutations.join(\",\");\n        return el?.matches(selector);\n      })) {\n        return false;\n      }\n    }\n    const count = mutations.length;\n    const mutationLimit = this._options.mutationLimit;\n    const mutationBreadcrumbLimit = this._options.mutationBreadcrumbLimit;\n    const overMutationLimit = mutationLimit && count > mutationLimit;\n    if (count > mutationBreadcrumbLimit || overMutationLimit) {\n      const breadcrumb = createBreadcrumb({\n        category: \"replay.mutations\",\n        data: {\n          count,\n          limit: overMutationLimit\n        }\n      });\n      this._createCustomBreadcrumb(breadcrumb);\n    }\n    if (overMutationLimit) {\n      this.stop({ reason: \"mutationLimit\", forceFlush: this.recordingMode === \"session\" });\n      return false;\n    }\n    return true;\n  }\n}\n\nfunction getOption(selectors, defaultSelectors) {\n  return [\n    ...selectors,\n    // sentry defaults\n    ...defaultSelectors\n  ].join(\",\");\n}\nfunction getPrivacyOptions({ mask, unmask, block, unblock, ignore }) {\n  const defaultBlockedElements = [\"base\", \"iframe[srcdoc]:not([src])\"];\n  const maskSelector = getOption(mask, [\".sentry-mask\", \"[data-sentry-mask]\"]);\n  const unmaskSelector = getOption(unmask, []);\n  const options = {\n    // We are making the decision to make text and input selectors the same\n    maskTextSelector: maskSelector,\n    unmaskTextSelector: unmaskSelector,\n    blockSelector: getOption(block, [\".sentry-block\", \"[data-sentry-block]\", ...defaultBlockedElements]),\n    unblockSelector: getOption(unblock, []),\n    ignoreSelector: getOption(ignore, [\".sentry-ignore\", \"[data-sentry-ignore]\", 'input[type=\"file\"]'])\n  };\n  return options;\n}\n\nfunction maskAttribute({\n  el,\n  key,\n  maskAttributes,\n  maskAllText,\n  privacyOptions,\n  value\n}) {\n  if (privacyOptions.unmaskTextSelector && el.matches(privacyOptions.unmaskTextSelector)) {\n    return value;\n  }\n  const masksNamedAttribute = maskAttributes.includes(key);\n  const masksSubmitButtonValue = maskAllText && key === \"value\" && el.tagName === \"INPUT\" && [\"submit\", \"button\"].includes(el.getAttribute(\"type\") || \"\");\n  if (masksNamedAttribute || masksSubmitButtonValue) {\n    return value.replace(/[\\S]/g, \"*\");\n  }\n  return value;\n}\n\nconst MEDIA_SELECTORS = 'img,image,svg,video,object,picture,embed,map,audio,link[rel=\"icon\"],link[rel=\"apple-touch-icon\"]';\nconst DEFAULT_NETWORK_HEADERS = [\"content-length\", \"content-type\", \"accept\"];\nconst ORIGINAL_BODY = /* @__PURE__ */ Symbol.for(\"sentry__originalRequestBody\");\nlet _initialized = false;\nlet _isRequestInstrumented = false;\nfunction _INTERNAL_instrumentRequestInterface() {\n  if (typeof Request === \"undefined\" || _isRequestInstrumented) {\n    return;\n  }\n  const OriginalRequest = Request;\n  try {\n    const SentryRequest = function(input, init) {\n      const request = new OriginalRequest(input, init);\n      if (init?.body != null) {\n        request[ORIGINAL_BODY] = init.body;\n      }\n      return request;\n    };\n    SentryRequest.prototype = OriginalRequest.prototype;\n    GLOBAL_OBJ.Request = SentryRequest;\n    _isRequestInstrumented = true;\n  } catch {\n  }\n}\nconst replayIntegration = ((options) => {\n  return new Replay(options);\n});\nclass Replay {\n  constructor({\n    flushMinDelay = DEFAULT_FLUSH_MIN_DELAY,\n    flushMaxDelay = DEFAULT_FLUSH_MAX_DELAY,\n    minReplayDuration = MIN_REPLAY_DURATION,\n    maxReplayDuration = MAX_REPLAY_DURATION,\n    stickySession = true,\n    useCompression = true,\n    workerUrl,\n    _experiments = {},\n    maskAllText = true,\n    maskAllInputs = true,\n    blockAllMedia = true,\n    mutationBreadcrumbLimit = 750,\n    mutationLimit = 1e4,\n    slowClickTimeout = 7e3,\n    slowClickIgnoreSelectors = [],\n    networkDetailAllowUrls = [],\n    networkDetailDenyUrls = [],\n    networkCaptureBodies = true,\n    networkRequestHeaders = [],\n    networkResponseHeaders = [],\n    mask = [],\n    maskAttributes = [\"title\", \"placeholder\", \"aria-label\"],\n    unmask = [],\n    block = [],\n    unblock = [],\n    ignore = [],\n    maskFn,\n    beforeAddRecordingEvent,\n    beforeErrorSampling,\n    onError,\n    attachRawBodyFromRequest = false\n  } = {}) {\n    this.name = \"Replay\";\n    const privacyOptions = getPrivacyOptions({\n      mask,\n      unmask,\n      block,\n      unblock,\n      ignore\n    });\n    this._recordingOptions = {\n      maskAllInputs,\n      maskAllText,\n      maskInputOptions: { password: true },\n      maskTextFn: maskFn,\n      maskInputFn: maskFn,\n      maskAttributeFn: (key, value, el) => maskAttribute({\n        maskAttributes,\n        maskAllText,\n        privacyOptions,\n        key,\n        value,\n        el\n      }),\n      ...privacyOptions,\n      // Our defaults\n      slimDOMOptions: \"all\",\n      inlineStylesheet: true,\n      // Disable inline images as it will increase segment/replay size\n      inlineImages: false,\n      // collect fonts, but be aware that `sentry.io` needs to be an allowed\n      // origin for playback\n      collectFonts: true,\n      errorHandler: (err) => {\n        try {\n          err.__rrweb__ = true;\n        } catch {\n        }\n      },\n      // experimental support for recording iframes from different origins\n      recordCrossOriginIframes: Boolean(_experiments.recordCrossOriginIframes)\n    };\n    this._initialOptions = {\n      flushMinDelay,\n      flushMaxDelay,\n      minReplayDuration: Math.min(minReplayDuration, MIN_REPLAY_DURATION_LIMIT),\n      maxReplayDuration: Math.min(maxReplayDuration, MAX_REPLAY_DURATION),\n      stickySession,\n      useCompression,\n      workerUrl,\n      blockAllMedia,\n      maskAllInputs,\n      maskAllText,\n      mutationBreadcrumbLimit,\n      mutationLimit,\n      slowClickTimeout,\n      slowClickIgnoreSelectors,\n      networkDetailAllowUrls,\n      networkDetailDenyUrls,\n      networkCaptureBodies,\n      networkRequestHeaders: _getMergedNetworkHeaders(networkRequestHeaders),\n      networkResponseHeaders: _getMergedNetworkHeaders(networkResponseHeaders),\n      beforeAddRecordingEvent,\n      beforeErrorSampling,\n      onError,\n      attachRawBodyFromRequest,\n      _experiments\n    };\n    if (this._initialOptions.blockAllMedia) {\n      this._recordingOptions.blockSelector = !this._recordingOptions.blockSelector ? MEDIA_SELECTORS : `${this._recordingOptions.blockSelector},${MEDIA_SELECTORS}`;\n      this._recordingOptions.ignoreCSSAttributes = /* @__PURE__ */ new Set([\"background-image\"]);\n    }\n    if (this._isInitialized && isBrowser()) {\n      throw new Error(\"Multiple Sentry Session Replay instances are not supported\");\n    }\n    this._isInitialized = true;\n  }\n  /** If replay has already been initialized */\n  get _isInitialized() {\n    return _initialized;\n  }\n  /** Update _isInitialized */\n  set _isInitialized(value) {\n    _initialized = value;\n  }\n  /**\n   * Setup and initialize replay container\n   */\n  afterAllSetup(client) {\n    if (!isBrowser() || this._replay) {\n      return;\n    }\n    if (this._initialOptions.attachRawBodyFromRequest) {\n      _INTERNAL_instrumentRequestInterface();\n    }\n    this._setup(client);\n    this._initialize(client);\n  }\n  /**\n   * Start a replay regardless of sampling rate. Calling this will always\n   * create a new session. Will log a message if replay is already in progress.\n   *\n   * Creates or loads a session, attaches listeners to varying events (DOM,\n   * PerformanceObserver, Recording, Sentry SDK, etc)\n   */\n  start() {\n    if (!this._replay) {\n      return;\n    }\n    this._replay.start();\n  }\n  /**\n   * Start replay buffering. Buffers until `flush()` is called or, if\n   * `replaysOnErrorSampleRate` > 0, until an error occurs.\n   */\n  startBuffering() {\n    if (!this._replay) {\n      return;\n    }\n    this._replay.startBuffering();\n  }\n  /**\n   * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n   * does not support a teardown\n   *\n   * @param options.flush - Whether to flush the pending replay segment when stopping.\n   * When recording in `session` mode, `stop()` flushes the buffered-but-unsent segment by\n   * default (`flush: true`), matching the previous behavior. Pass `flush: false` to stop\n   * recording without sending that pending segment — useful when a user withdraws consent\n   * and no further data should leave the browser.\n   *\n   * Note: `flush: false` only prevents the *pending* (final) segment from being sent. It does\n   * **not** retract segments that were already sent earlier during `session` recording.\n   */\n  stop(options) {\n    if (!this._replay) {\n      return Promise.resolve();\n    }\n    return this._replay.stop({\n      forceFlush: options?.flush ?? this._replay.recordingMode === \"session\",\n      reason: \"manual\"\n    });\n  }\n  /**\n   * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n   * If replay is not enabled, a new session replay is started.\n   * Unless `continueRecording` is false, the replay will continue to record and\n   * behave as a \"session\"-based replay.\n   *\n   * Otherwise, queue up a flush.\n   */\n  flush(options) {\n    if (!this._replay) {\n      return Promise.resolve();\n    }\n    if (!this._replay.isEnabled()) {\n      this._replay.start();\n      return Promise.resolve();\n    }\n    return this._replay.sendBufferedReplayOrFlush(options);\n  }\n  /**\n   * Get the current session ID.\n   *\n   * @param onlyIfSampled - If true, will only return the session ID if the session is sampled.\n   *\n   */\n  getReplayId(onlyIfSampled) {\n    if (!this._replay?.isEnabled()) {\n      return;\n    }\n    return this._replay.getSessionId(onlyIfSampled);\n  }\n  /**\n   * Get the current recording mode. This can be either `session` or `buffer`.\n   *\n   * `session`: Recording the whole session, sending it continuously\n   * `buffer`: Always keeping the last 60s of recording, requires:\n   *   - having replaysOnErrorSampleRate > 0 to capture replay when an error occurs\n   *   - or calling `flush()` to send the replay\n   */\n  getRecordingMode() {\n    if (!this._replay?.isEnabled()) {\n      return;\n    }\n    return this._replay.recordingMode;\n  }\n  processSpan(span) {\n    const replayId = this.getReplayId(true);\n    if (replayId) {\n      safeSetSpanJSONAttributes(span, { \"sentry.replay_id\": replayId });\n      if (this.getRecordingMode() === \"buffer\") {\n        safeSetSpanJSONAttributes(span, { \"sentry._internal.replay_is_buffering\": true });\n      }\n    }\n  }\n  /**\n   * Initializes replay.\n   */\n  _initialize(client) {\n    if (!this._replay) {\n      return;\n    }\n    this._maybeLoadFromReplayCanvasIntegration(client);\n    this._replay.initializeSampling();\n  }\n  /** Setup the integration. */\n  _setup(client) {\n    const finalOptions = loadReplayOptionsFromClient(this._initialOptions, client);\n    this._replay = new ReplayContainer({\n      options: finalOptions,\n      recordingOptions: this._recordingOptions\n    });\n  }\n  /** Get canvas options from ReplayCanvas integration, if it is also added. */\n  _maybeLoadFromReplayCanvasIntegration(client) {\n    try {\n      const canvasIntegration = client.getIntegrationByName(\"ReplayCanvas\");\n      if (!canvasIntegration) {\n        return;\n      }\n      this._replay[\"_canvas\"] = canvasIntegration.getOptions();\n    } catch {\n    }\n  }\n}\nfunction loadReplayOptionsFromClient(initialOptions, client) {\n  const opt = client.getOptions();\n  const finalOptions = {\n    sessionSampleRate: 0,\n    errorSampleRate: 0,\n    ...initialOptions\n  };\n  const replaysSessionSampleRate = parseSampleRate(opt.replaysSessionSampleRate);\n  const replaysOnErrorSampleRate = parseSampleRate(opt.replaysOnErrorSampleRate);\n  if (replaysSessionSampleRate == null && replaysOnErrorSampleRate == null) {\n    consoleSandbox(() => {\n      console.warn(\n        \"Replay is disabled because neither `replaysSessionSampleRate` nor `replaysOnErrorSampleRate` are set.\"\n      );\n    });\n  }\n  if (replaysSessionSampleRate != null) {\n    finalOptions.sessionSampleRate = replaysSessionSampleRate;\n  }\n  if (replaysOnErrorSampleRate != null) {\n    finalOptions.errorSampleRate = replaysOnErrorSampleRate;\n  }\n  return finalOptions;\n}\nfunction _getMergedNetworkHeaders(headers) {\n  return [...DEFAULT_NETWORK_HEADERS, ...headers.map((header) => header.toLowerCase())];\n}\n\nfunction getReplay() {\n  const client = getClient();\n  return client?.getIntegrationByName(\"Replay\");\n}\n\nexport { getReplay, replayIntegration };\n//# sourceMappingURL=index.js.map\n","import { WINDOW } from '../helpers.js';\n\nfunction baggageHeaderHasSentryValues(baggageHeader) {\n  return baggageHeader.split(\",\").some((value) => value.trim().startsWith(\"sentry-\"));\n}\nfunction getFullURL(url) {\n  try {\n    const parsed = new URL(url, WINDOW.location.origin);\n    return parsed.href;\n  } catch {\n    return void 0;\n  }\n}\nfunction isPerformanceResourceTiming(entry) {\n  return entry.entryType === \"resource\" && \"initiatorType\" in entry && typeof entry.nextHopProtocol === \"string\" && (entry.initiatorType === \"fetch\" || entry.initiatorType === \"xmlhttprequest\");\n}\nfunction createHeadersSafely(headers) {\n  try {\n    return new Headers(headers);\n  } catch {\n    return void 0;\n  }\n}\n\nexport { baggageHeaderHasSentryValues, createHeadersSafely, getFullURL, isPerformanceResourceTiming };\n//# sourceMappingURL=utils.js.map\n","import { addFetchInstrumentationHandler, instrumentFetchRequest, parseUrl, stripDataUrlContent, filterCollectedUrl, spanToJSON, hasSpanStreamingEnabled, timestampInSeconds, hasSpansEnabled, setHttpStatus, stripUrlQueryAndFragment, getClient, getActiveSpan, getUrlDomain, getUrlFragment, filterCollectedUrlQuery, getUrlQuery, SentryNonRecordingSpan, spanIsIgnored, matchesTracePropagationTargets, getTraceData } from '@sentry/core';\nimport { startInactiveSpan } from '@sentry/core/browser';\nimport { addXhrInstrumentationHandler, addPerformanceInstrumentationHandler, resourceTimingToSpanAttributes, SENTRY_XHR_DATA_KEY, parseXhrResponseHeaders, getLocationHref } from '@sentry/browser-utils';\nimport { WINDOW } from '../helpers.js';\nimport { getFullURL, createHeadersSafely, isPerformanceResourceTiming, baggageHeaderHasSentryValues } from './utils.js';\nimport { SERVER_ADDRESS, URL_FULL, URL_FRAGMENT, URL_QUERY, SENTRY_OP, SENTRY_ORIGIN, URL_DOMAIN, HTTP_REQUEST_METHOD } from '@sentry/conventions/attributes';\nimport { HTTP_CLIENT } from '@sentry/conventions/op';\n\nconst defaultRequestInstrumentationOptions = {\n  traceFetch: true,\n  traceXHR: true,\n  enableHTTPTimings: true\n};\nfunction instrumentOutgoingRequests(client, _options) {\n  const {\n    traceFetch,\n    traceXHR,\n    shouldCreateSpanForRequest,\n    enableHTTPTimings,\n    tracePropagationTargets,\n    onRequestSpanStart,\n    onRequestSpanEnd\n  } = {\n    ...defaultRequestInstrumentationOptions,\n    ..._options\n  };\n  const shouldCreateSpan = typeof shouldCreateSpanForRequest === \"function\" ? shouldCreateSpanForRequest : (_) => true;\n  const shouldAttachHeadersWithTargets = (url) => shouldAttachHeaders(url, tracePropagationTargets);\n  const spans = {};\n  const propagateTraceparent = client.getOptions().propagateTraceparent;\n  if (traceFetch) {\n    addFetchInstrumentationHandler((handlerData) => {\n      const createdSpan = instrumentFetchRequest(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans, {\n        propagateTraceparent,\n        onRequestSpanEnd,\n        // The generic fetch instrumentation has no page origin to resolve relative URLs against.\n        urlBase: WINDOW.location?.origin\n      });\n      if (createdSpan) {\n        const fullUrl = getFullURL(handlerData.fetchData.url);\n        const host = fullUrl ? parseUrl(fullUrl).host?.replace(/^.*@/, \"\") : void 0;\n        const sanitizedFullUrl = fullUrl ? stripDataUrlContent(fullUrl) : void 0;\n        createdSpan.setAttributes({\n          [URL_FULL]: filterCollectedUrl(sanitizedFullUrl),\n          [SERVER_ADDRESS]: host\n        });\n        if (enableHTTPTimings) {\n          addHTTPTimings(createdSpan, client);\n        }\n        onRequestSpanStart?.(createdSpan, { headers: handlerData.headers });\n      }\n    });\n  }\n  if (traceXHR) {\n    addXhrInstrumentationHandler((handlerData) => {\n      const createdSpan = xhrCallback(\n        handlerData,\n        shouldCreateSpan,\n        shouldAttachHeadersWithTargets,\n        spans,\n        propagateTraceparent,\n        onRequestSpanEnd\n      );\n      if (createdSpan) {\n        if (enableHTTPTimings) {\n          addHTTPTimings(createdSpan, client);\n        }\n        onRequestSpanStart?.(createdSpan, {\n          headers: createHeadersSafely(handlerData.xhr.__sentry_xhr_v3__?.request_headers)\n        });\n      }\n    });\n  }\n}\nconst HTTP_TIMING_WAIT_MS = 300;\nfunction addHTTPTimings(span, client) {\n  const url = spanToJSON(span).attributes[URL_FULL];\n  if (!url || typeof url !== \"string\") {\n    return;\n  }\n  let onEntryFound = () => void setTimeout(unsubscribePerformanceObsever);\n  if (hasSpanStreamingEnabled(client)) {\n    const originalEnd = span.end.bind(span);\n    span.end = (endTimestamp) => {\n      const capturedEndTimestamp = endTimestamp ?? timestampInSeconds();\n      let isEnded = false;\n      const endSpanAndCleanup = () => {\n        if (isEnded) {\n          return;\n        }\n        isEnded = true;\n        setTimeout(unsubscribePerformanceObsever);\n        originalEnd(capturedEndTimestamp);\n        clearTimeout(fallbackTimeout);\n      };\n      onEntryFound = endSpanAndCleanup;\n      const fallbackTimeout = setTimeout(endSpanAndCleanup, HTTP_TIMING_WAIT_MS);\n    };\n  }\n  const unsubscribePerformanceObsever = addPerformanceInstrumentationHandler(\"resource\", ({ entries }) => {\n    entries.forEach((entry) => {\n      if (isPerformanceResourceTiming(entry) && entry.name.endsWith(url)) {\n        span.setAttributes(resourceTimingToSpanAttributes(entry));\n        onEntryFound();\n      }\n    });\n  });\n}\nfunction shouldAttachHeaders(targetUrl, tracePropagationTargets) {\n  const href = getLocationHref();\n  if (!href) {\n    const isRelativeSameOriginRequest = !!targetUrl.match(/^\\/(?!\\/)/);\n    if (!tracePropagationTargets) {\n      return isRelativeSameOriginRequest;\n    } else {\n      return matchesTracePropagationTargets(targetUrl, tracePropagationTargets);\n    }\n  } else {\n    let resolvedUrl;\n    let currentOrigin;\n    try {\n      resolvedUrl = new URL(targetUrl, href);\n      currentOrigin = new URL(href).origin;\n    } catch {\n      return false;\n    }\n    const isSameOriginRequest = resolvedUrl.origin === currentOrigin;\n    if (!tracePropagationTargets) {\n      return isSameOriginRequest;\n    } else {\n      return matchesTracePropagationTargets(resolvedUrl.toString(), tracePropagationTargets) || isSameOriginRequest && matchesTracePropagationTargets(resolvedUrl.pathname, tracePropagationTargets);\n    }\n  }\n}\nfunction xhrCallback(handlerData, shouldCreateSpan, shouldAttachHeaders2, spans, propagateTraceparent, onRequestSpanEnd) {\n  const xhr = handlerData.xhr;\n  const sentryXhrData = xhr?.[SENTRY_XHR_DATA_KEY];\n  if (!xhr || xhr.__sentry_own_request__ || !sentryXhrData) {\n    return void 0;\n  }\n  const { url, method } = sentryXhrData;\n  const shouldCreateSpanResult = hasSpansEnabled() && shouldCreateSpan(url);\n  if (handlerData.endTimestamp) {\n    const spanId = xhr.__sentry_xhr_span_id__;\n    if (!spanId) return;\n    const span2 = spans[spanId];\n    if (span2) {\n      if (shouldCreateSpanResult && sentryXhrData.status_code !== void 0) {\n        setHttpStatus(span2, sentryXhrData.status_code);\n        span2.end();\n        onRequestSpanEnd?.(span2, {\n          headers: createHeadersSafely(parseXhrResponseHeaders(xhr)),\n          error: handlerData.error\n        });\n      }\n      delete spans[spanId];\n    }\n    return void 0;\n  }\n  const fullUrl = getFullURL(url);\n  const parsedUrl = fullUrl ? parseUrl(fullUrl) : parseUrl(url);\n  const sanitizedFullUrl = fullUrl ? stripDataUrlContent(fullUrl) : void 0;\n  const urlForSpanName = stripDataUrlContent(stripUrlQueryAndFragment(url));\n  const client = getClient();\n  const hasParent = !!getActiveSpan();\n  const shouldEmitSpan = hasParent || !!client && hasSpanStreamingEnabled(client);\n  const host = parsedUrl?.host?.replace(/^.*@/, \"\");\n  const domain = getUrlDomain(fullUrl || url);\n  const streamedName = domain ? `${method} ${domain}` : method;\n  const span = shouldCreateSpanResult && shouldEmitSpan ? startInactiveSpan({\n    name: !!client && hasSpanStreamingEnabled(client) ? streamedName : `${method} ${urlForSpanName}`,\n    attributes: {\n      type: \"xhr\",\n      // eslint-disable-next-line typescript/no-deprecated\n      [HTTP_REQUEST_METHOD]: method,\n      [URL_FULL]: filterCollectedUrl(sanitizedFullUrl),\n      [SERVER_ADDRESS]: host,\n      [URL_DOMAIN]: domain,\n      [SENTRY_ORIGIN]: \"auto.http.browser\",\n      [SENTRY_OP]: HTTP_CLIENT,\n      [URL_QUERY]: filterCollectedUrlQuery(getUrlQuery(parsedUrl?.search)),\n      [URL_FRAGMENT]: getUrlFragment(parsedUrl?.hash)\n    }\n  }) : new SentryNonRecordingSpan();\n  const spanForTraceHeaders = spanIsIgnored(span) && hasParent ? void 0 : span;\n  if (shouldCreateSpanResult && !shouldEmitSpan) {\n    client?.recordDroppedEvent(\"no_parent_span\", \"span\");\n  }\n  xhr.__sentry_xhr_span_id__ = span.spanContext().spanId;\n  spans[xhr.__sentry_xhr_span_id__] = span;\n  if (shouldAttachHeaders2(url)) {\n    addTracingHeadersToXhrRequest(\n      xhr,\n      // If performance is disabled (TWP) or there's no active root span (pageload/navigation/interaction),\n      // we do not want to use the span as base for the trace headers,\n      // which means that the headers will be generated from the scope and the sampling decision is deferred\n      hasSpansEnabled() && shouldEmitSpan ? spanForTraceHeaders : void 0,\n      propagateTraceparent\n    );\n  }\n  if (client) {\n    client.emit(\"beforeOutgoingRequestSpan\", span, handlerData);\n  }\n  return span;\n}\nfunction addTracingHeadersToXhrRequest(xhr, span, propagateTraceparent) {\n  const { \"sentry-trace\": sentryTrace, baggage, traceparent } = getTraceData({ span, propagateTraceparent });\n  if (sentryTrace) {\n    setHeaderOnXhr(xhr, sentryTrace, baggage, traceparent);\n  }\n}\nfunction setHeaderOnXhr(xhr, sentryTraceHeader, sentryBaggageHeader, traceparentHeader) {\n  const originalHeaders = xhr.__sentry_xhr_v3__?.request_headers;\n  if (originalHeaders?.[\"sentry-trace\"] || !xhr.setRequestHeader) {\n    return;\n  }\n  try {\n    xhr.setRequestHeader(\"sentry-trace\", sentryTraceHeader);\n    if (traceparentHeader && !originalHeaders?.[\"traceparent\"]) {\n      xhr.setRequestHeader(\"traceparent\", traceparentHeader);\n    }\n    if (sentryBaggageHeader) {\n      const originalBaggageHeader = originalHeaders?.[\"baggage\"];\n      if (!originalBaggageHeader || !baggageHeaderHasSentryValues(originalBaggageHeader)) {\n        xhr.setRequestHeader(\"baggage\", sentryBaggageHeader);\n      }\n    }\n  } catch {\n  }\n}\n\nexport { defaultRequestInstrumentationOptions, instrumentOutgoingRequests, shouldAttachHeaders };\n//# sourceMappingURL=request.js.map\n","import { defineIntegration, hasSpanStreamingEnabled } from '@sentry/core';\nimport { registerInpInteractionListener, supportsSoftNavigations, enableSoftNavigationReporting, startSoftNavigationCorrelation, enableBfcacheReporting, startTrackingWebVitals, addWebVitalsToSpan, trackLcpAsSpan, trackClsAsSpan, trackInpAsSpan } from '@sentry/browser-utils';\n\nconst WEB_VITALS_INTEGRATION_NAME = \"WebVitals\";\nconst webVitalsIntegration = defineIntegration((options = {}) => {\n  const { ignore = [], softNavigations = true, bfcacheNavigations = true } = options;\n  const ignored = new Set(ignore);\n  return {\n    name: WEB_VITALS_INTEGRATION_NAME,\n    setup(client) {\n      const spanStreamingEnabled = hasSpanStreamingEnabled(client);\n      const reportSoftNavs = softNavigations && spanStreamingEnabled && supportsSoftNavigations();\n      const reportBfcache = bfcacheNavigations && spanStreamingEnabled;\n      const perNavigation = reportSoftNavs || reportBfcache;\n      if (reportSoftNavs) {\n        enableSoftNavigationReporting();\n        startSoftNavigationCorrelation(client);\n      }\n      if (reportBfcache) {\n        enableBfcacheReporting();\n      }\n      const trackClsOnPageloadSpan = !spanStreamingEnabled && !ignored.has(\"cls\");\n      const trackLcpOnPageloadSpan = !spanStreamingEnabled && !ignored.has(\"lcp\");\n      const finalizeWebVitals = startTrackingWebVitals({\n        trackCls: trackClsOnPageloadSpan,\n        trackLcp: trackLcpOnPageloadSpan,\n        client\n      });\n      const pageloadSpans = /* @__PURE__ */ new WeakSet();\n      client.on(\"afterStartPageLoadSpan\", (span) => {\n        pageloadSpans.add(span);\n      });\n      client.on(\"spanEnd\", (span) => {\n        if (!pageloadSpans.delete(span)) {\n          return;\n        }\n        finalizeWebVitals();\n        addWebVitalsToSpan(span, {\n          recordClsOnPageloadSpan: trackClsOnPageloadSpan,\n          recordLcpOnPageloadSpan: trackLcpOnPageloadSpan,\n          spanStreamingEnabled\n        });\n      });\n      if (spanStreamingEnabled) {\n        if (!ignored.has(\"lcp\")) {\n          trackLcpAsSpan(client, perNavigation);\n        }\n        if (!ignored.has(\"cls\")) {\n          trackClsAsSpan(client, perNavigation);\n        }\n      }\n      if (!ignored.has(\"inp\")) {\n        trackInpAsSpan(client, perNavigation);\n      }\n    },\n    afterAllSetup() {\n      if (!ignored.has(\"inp\")) {\n        registerInpInteractionListener();\n      }\n    }\n  };\n});\n\nexport { WEB_VITALS_INTEGRATION_NAME, webVitalsIntegration };\n//# sourceMappingURL=webVitals.js.map\n","import { getActiveSpan, getRootSpan, spanToJSON, debug, SPAN_STATUS_ERROR } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\nimport { SENTRY_OP } from '@sentry/conventions/attributes';\n\nfunction registerBackgroundTabDetection() {\n  if (WINDOW.document) {\n    WINDOW.document.addEventListener(\"visibilitychange\", () => {\n      const activeSpan = getActiveSpan();\n      if (!activeSpan) {\n        return;\n      }\n      const rootSpan = getRootSpan(activeSpan);\n      if (WINDOW.document.hidden && rootSpan) {\n        const cancelledStatus = \"cancelled\";\n        const {\n          attributes: { [SENTRY_OP]: op },\n          status\n        } = spanToJSON(rootSpan);\n        if (DEBUG_BUILD) {\n          debug.log(`[Tracing] Transaction: ${cancelledStatus} -> since tab moved to the background, op: ${op}`);\n        }\n        if (status === \"ok\") {\n          rootSpan.setStatus({ code: SPAN_STATUS_ERROR, message: cancelledStatus });\n        }\n        rootSpan.setAttribute(\"sentry.cancellation_reason\", \"document.hidden\");\n        rootSpan.end();\n      }\n    });\n  } else {\n    DEBUG_BUILD && debug.warn(\"[Tracing] Could not set up background tab detection due to lack of global document\");\n  }\n}\n\nexport { registerBackgroundTabDetection };\n//# sourceMappingURL=backgroundtab.js.map\n","import { getRootSpan, getCurrentScope, SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE, spanToJSON, debug, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\nimport '../stack-parsers.js';\nimport '../integrations/breadcrumbs.js';\nimport '../integrations/browserapierrors.js';\nimport '../integrations/browsersession.js';\nimport '../integrations/culturecontext.js';\nimport '../integrations/globalhandlers.js';\nimport '../integrations/httpcontext.js';\nimport '../integrations/linkederrors.js';\nimport { SENTRY_OP, SENTRY_LINK_TYPE } from '@sentry/conventions/attributes';\n\nconst PREVIOUS_TRACE_MAX_DURATION = 3600;\nconst PREVIOUS_TRACE_KEY = \"sentry_previous_trace\";\nconst PREVIOUS_TRACE_TMP_SPAN_ATTRIBUTE = \"sentry.previous_trace\";\nfunction linkTraces(client, {\n  linkPreviousTrace,\n  consistentTraceSampling\n}) {\n  const useSessionStorage = linkPreviousTrace === \"session-storage\";\n  let inMemoryPreviousTraceInfo = useSessionStorage ? getPreviousTraceFromSessionStorage() : void 0;\n  client.on(\"spanStart\", (span) => {\n    if (getRootSpan(span) !== span) {\n      return;\n    }\n    const oldPropagationContext = getCurrentScope().getPropagationContext();\n    inMemoryPreviousTraceInfo = addPreviousTraceSpanLink(inMemoryPreviousTraceInfo, span, oldPropagationContext);\n    if (useSessionStorage) {\n      storePreviousTraceInSessionStorage(inMemoryPreviousTraceInfo);\n    }\n  });\n  let isFirstTraceOnPageload = true;\n  if (consistentTraceSampling) {\n    client.on(\"beforeSampling\", (mutableSamplingContextData) => {\n      if (!inMemoryPreviousTraceInfo) {\n        return;\n      }\n      const scope = getCurrentScope();\n      const currentPropagationContext = scope.getPropagationContext();\n      if (isFirstTraceOnPageload && currentPropagationContext.parentSpanId) {\n        isFirstTraceOnPageload = false;\n        return;\n      }\n      scope.setPropagationContext({\n        ...currentPropagationContext,\n        dsc: {\n          ...currentPropagationContext.dsc,\n          sample_rate: String(inMemoryPreviousTraceInfo.sampleRate),\n          sampled: String(spanContextSampled(inMemoryPreviousTraceInfo.spanContext))\n        },\n        sampleRand: inMemoryPreviousTraceInfo.sampleRand\n      });\n      mutableSamplingContextData.parentSampled = spanContextSampled(inMemoryPreviousTraceInfo.spanContext);\n      mutableSamplingContextData.parentSampleRate = inMemoryPreviousTraceInfo.sampleRate;\n      mutableSamplingContextData.spanAttributes = {\n        ...mutableSamplingContextData.spanAttributes,\n        [SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE]: inMemoryPreviousTraceInfo.sampleRate\n      };\n    });\n  }\n}\nfunction addPreviousTraceSpanLink(previousTraceInfo, span, oldPropagationContext) {\n  const spanJson = spanToJSON(span);\n  function getSampleRate() {\n    try {\n      const oldSampleRate = Number(\n        spanJson.attributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] ?? oldPropagationContext.dsc?.sample_rate\n      );\n      return Number.isNaN(oldSampleRate) ? 0 : oldSampleRate;\n    } catch {\n      return 0;\n    }\n  }\n  const updatedPreviousTraceInfo = {\n    spanContext: span.spanContext(),\n    startTimestamp: spanJson.start_timestamp,\n    sampleRate: getSampleRate(),\n    sampleRand: oldPropagationContext.sampleRand\n  };\n  if (!previousTraceInfo) {\n    return updatedPreviousTraceInfo;\n  }\n  const previousTraceSpanCtx = previousTraceInfo.spanContext;\n  if (previousTraceSpanCtx.traceId === spanJson.trace_id) {\n    return previousTraceInfo;\n  }\n  if (Date.now() / 1e3 - previousTraceInfo.startTimestamp <= PREVIOUS_TRACE_MAX_DURATION) {\n    if (DEBUG_BUILD) {\n      debug.log(\n        `Adding previous_trace \\`${JSON.stringify(previousTraceSpanCtx)}\\` link to span \\`${JSON.stringify({\n          op: spanJson.attributes[SENTRY_OP],\n          ...span.spanContext()\n        })}\\``\n      );\n    }\n    span.addLink({\n      context: previousTraceSpanCtx,\n      attributes: {\n        [SENTRY_LINK_TYPE]: \"previous_trace\"\n      }\n    });\n    span.setAttribute(\n      PREVIOUS_TRACE_TMP_SPAN_ATTRIBUTE,\n      `${previousTraceSpanCtx.traceId}-${previousTraceSpanCtx.spanId}-${spanContextSampled(previousTraceSpanCtx) ? 1 : 0}`\n    );\n  }\n  return updatedPreviousTraceInfo;\n}\nfunction storePreviousTraceInSessionStorage(previousTraceInfo) {\n  try {\n    WINDOW.sessionStorage.setItem(PREVIOUS_TRACE_KEY, JSON.stringify(previousTraceInfo));\n  } catch (e) {\n    DEBUG_BUILD && debug.warn(\"Could not store previous trace in sessionStorage\", e);\n  }\n}\nfunction getPreviousTraceFromSessionStorage() {\n  try {\n    const previousTraceInfo = WINDOW.sessionStorage?.getItem(PREVIOUS_TRACE_KEY);\n    return JSON.parse(previousTraceInfo);\n  } catch {\n    return void 0;\n  }\n}\nfunction spanContextSampled(ctx) {\n  return ctx.traceFlags === 1;\n}\n\nexport { PREVIOUS_TRACE_KEY, PREVIOUS_TRACE_MAX_DURATION, PREVIOUS_TRACE_TMP_SPAN_ATTRIBUTE, addPreviousTraceSpanLink, getPreviousTraceFromSessionStorage, linkTraces, spanContextSampled, storePreviousTraceInSessionStorage };\n//# sourceMappingURL=linkedTraces.js.map\n","import { TRACING_DEFAULTS, consoleSandbox, hasSpanStreamingEnabled, PAGELOAD_SPAN_NAME_FALLBACK, parseStringToURLObject, NAVIGATION_SPAN_NAME_FALLBACK, debug, registerSpanErrorInstrumentation, GLOBAL_OBJ, getCurrentScope, getDynamicSamplingContextFromSpan, spanIsSampled, getClient, hasSpansEnabled, generateSpanId, generateTraceId, propagationContextFromHeaders, filterCollectedUrl, spanToJSON, browserPerformanceTimeOrigin, dateTimestampInSeconds, timestampInSeconds, addNonEnumerableProperty, isURLObjectRelative } from '@sentry/core';\nimport { _INTERNAL_ensureBrowserSpanStreaming, startInactiveSpan, startIdleSpan } from '@sentry/core/browser';\nimport { isBotUserAgent, getLocationHref, addHistoryInstrumentationHandler, startTrackingLongAnimationFrames, startTrackingLongTasks, addPerformanceEntries } from '@sentry/browser-utils';\nimport { SENTRY_IDLE_SPAN_FINISH_REASON, URL_FULL, URL_PATH, SENTRY_OP, SENTRY_SEGMENT_NAME_SOURCE, SENTRY_ORIGIN, BROWSER_NAVIGATION_TYPE } from '@sentry/conventions/attributes';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW, getHttpRequestData } from '../helpers.js';\nimport { WEB_VITALS_INTEGRATION_NAME, webVitalsIntegration } from '../integrations/webVitals.js';\nimport { registerBackgroundTabDetection } from './backgroundtab.js';\nimport { linkTraces } from './linkedTraces.js';\nimport { defaultRequestInstrumentationOptions, instrumentOutgoingRequests } from './request.js';\nimport { NAVIGATION_REDIRECT, NAVIGATION, PAGELOAD } from '@sentry/conventions/op';\n\nconst BROWSER_TRACING_INTEGRATION_ID = \"BrowserTracing\";\nconst DEFAULT_BROWSER_TRACING_OPTIONS = {\n  ...TRACING_DEFAULTS,\n  instrumentNavigation: true,\n  instrumentBfcacheRestore: true,\n  instrumentPageLoad: true,\n  markBackgroundSpan: true,\n  enableLongTask: true,\n  enableLongAnimationFrame: true,\n  // oxlint-disable-next-line typescript/no-deprecated -- still honoured until it is removed\n  enableInp: true,\n  ignoreResourceSpans: [],\n  detectRedirects: true,\n  linkPreviousTrace: \"in-memory\",\n  consistentTraceSampling: false,\n  enableReportPageLoaded: false,\n  ...defaultRequestInstrumentationOptions\n};\nconst browserTracingIntegration = ((options = {}) => {\n  if (\"enableElementTiming\" in options) {\n    consoleSandbox(() => {\n      console.warn(\n        \"[Sentry] `enableElementTiming` is deprecated and no longer has any effect. Use the standalone `elementTimingIntegration` instead.\"\n      );\n    });\n  }\n  const optionalWindowDocument = WINDOW.document;\n  const {\n    // oxlint-disable-next-line typescript/no-deprecated -- still honoured until it is removed\n    enableInp,\n    enableLongTask,\n    enableLongAnimationFrame,\n    webVitals,\n    beforeStartSpan,\n    idleTimeout,\n    finalTimeout,\n    childSpanTimeout,\n    markBackgroundSpan,\n    traceFetch,\n    traceXHR,\n    shouldCreateSpanForRequest,\n    enableHTTPTimings,\n    ignoreResourceSpans,\n    instrumentPageLoad,\n    instrumentNavigation,\n    instrumentBfcacheRestore,\n    detectRedirects,\n    linkPreviousTrace,\n    consistentTraceSampling,\n    enableReportPageLoaded,\n    onRequestSpanStart,\n    onRequestSpanEnd\n  } = {\n    ...DEFAULT_BROWSER_TRACING_OPTIONS,\n    ...options\n  };\n  const _isBot = isBotUserAgent();\n  let lastInteractionTimestamp;\n  let _pageloadSpan;\n  function _createRouteSpan(client, startSpanOptions, makeActive = true, url) {\n    const isPageloadSpan = startSpanOptions.op === \"pageload\";\n    const initialSpanName = startSpanOptions.name;\n    const finalStartSpanOptions = beforeStartSpan ? beforeStartSpan(startSpanOptions) : startSpanOptions;\n    const urlObject = parseStringToURLObject(url || getLocationHref());\n    const attributes = {\n      ...urlObject?.pathname && { [URL_PATH]: urlObject.pathname },\n      ...urlObject && !isURLObjectRelative(urlObject) && { [URL_FULL]: filterCollectedUrl(urlObject.href) },\n      ...finalStartSpanOptions.attributes\n    };\n    if (initialSpanName !== finalStartSpanOptions.name) {\n      attributes[SENTRY_SEGMENT_NAME_SOURCE] = \"custom\";\n    }\n    finalStartSpanOptions.attributes = attributes;\n    if (!makeActive) {\n      const now = dateTimestampInSeconds();\n      startInactiveSpan({\n        ...finalStartSpanOptions,\n        startTime: now\n      }).end(now);\n      return;\n    }\n    const idleSpan = startIdleSpan(finalStartSpanOptions, {\n      idleTimeout,\n      finalTimeout,\n      childSpanTimeout,\n      // should wait for finish signal if it's a pageload transaction\n      disableAutoFinish: isPageloadSpan,\n      trimIdleSpanEndTimestamp: !enableReportPageLoaded\n    });\n    if (isPageloadSpan && enableReportPageLoaded) {\n      _pageloadSpan = idleSpan;\n    }\n    setActiveIdleSpan(client, idleSpan);\n    function emitFinish() {\n      if (optionalWindowDocument && [\"interactive\", \"complete\"].includes(optionalWindowDocument.readyState)) {\n        client.emit(\"idleSpanEnableAutoFinish\", idleSpan);\n        optionalWindowDocument.removeEventListener(\"readystatechange\", emitFinish);\n      }\n    }\n    if (isPageloadSpan && !enableReportPageLoaded && optionalWindowDocument) {\n      optionalWindowDocument.addEventListener(\"readystatechange\", emitFinish);\n      emitFinish();\n    }\n  }\n  return {\n    name: BROWSER_TRACING_INTEGRATION_ID,\n    setup(client) {\n      if (_isBot) {\n        DEBUG_BUILD && debug.log(\"[Tracing] Skipping browserTracingIntegration setup for bot user agent.\");\n        return;\n      }\n      registerSpanErrorInstrumentation();\n      if (enableLongAnimationFrame && GLOBAL_OBJ.PerformanceObserver && PerformanceObserver.supportedEntryTypes?.includes(\"long-animation-frame\")) {\n        startTrackingLongAnimationFrames();\n      } else if (enableLongTask) {\n        startTrackingLongTasks();\n      }\n      if (detectRedirects && optionalWindowDocument) {\n        const interactionHandler = () => {\n          lastInteractionTimestamp = timestampInSeconds();\n        };\n        addEventListener(\"click\", interactionHandler, { capture: true });\n        addEventListener(\"keydown\", interactionHandler, { capture: true, passive: true });\n      }\n      function maybeEndActiveSpan() {\n        const activeSpan = getActiveIdleSpan(client);\n        if (activeSpan && !spanToJSON(activeSpan).end_timestamp) {\n          DEBUG_BUILD && debug.log(\n            `[Tracing] Finishing current active span with op: ${spanToJSON(activeSpan).attributes[SENTRY_OP]}`\n          );\n          activeSpan.setAttribute(SENTRY_IDLE_SPAN_FINISH_REASON, \"cancelled\");\n          activeSpan.end();\n        }\n      }\n      client.on(\"beforeIdleSpanEnd\", (span) => {\n        if (getActiveIdleSpan(client) !== span) {\n          return;\n        }\n        addPerformanceEntries(span, {\n          ignoreResourceSpans,\n          spanStreamingEnabled: hasSpanStreamingEnabled(client)\n        });\n        setActiveIdleSpan(client, void 0);\n        const scope = getCurrentScope();\n        const oldPropagationContext = scope.getPropagationContext();\n        scope.setPropagationContext({\n          ...oldPropagationContext,\n          traceId: span.spanContext().traceId,\n          sampled: spanIsSampled(span),\n          dsc: getDynamicSamplingContextFromSpan(span)\n        });\n        if (_pageloadSpan === span) {\n          _pageloadSpan = void 0;\n        }\n      });\n      client.on(\"startNavigationSpan\", (startSpanOptions, navigationOptions) => {\n        if (getClient() !== client) {\n          return;\n        }\n        if (navigationOptions?.isRedirect) {\n          DEBUG_BUILD && debug.warn(\"[Tracing] Detected redirect, navigation span will not be the root span, but a child span.\");\n          _createRouteSpan(\n            client,\n            {\n              op: NAVIGATION_REDIRECT,\n              ...startSpanOptions\n            },\n            false,\n            navigationOptions.url\n          );\n          return;\n        }\n        lastInteractionTimestamp = void 0;\n        maybeEndActiveSpan();\n        const scope = getCurrentScope();\n        scope.setPropagationContext({\n          traceId: generateTraceId(),\n          sampleRand: Math.random(),\n          propagationSpanId: hasSpansEnabled() ? void 0 : generateSpanId()\n        });\n        scope.setSDKProcessingMetadata({\n          normalizedRequest: void 0\n        });\n        _createRouteSpan(\n          client,\n          {\n            op: NAVIGATION,\n            ...startSpanOptions,\n            // Navigation starts a new trace and is NOT parented under any active interaction (e.g. ui.action.click)\n            parentSpan: null\n          },\n          true,\n          navigationOptions?.url\n        );\n      });\n      client.on(\"startPageLoadSpan\", (startSpanOptions, traceOptions = {}) => {\n        if (getClient() !== client) {\n          return;\n        }\n        maybeEndActiveSpan();\n        const sentryTrace = traceOptions.sentryTrace || getMetaContent(\"sentry-trace\") || getServerTiming(\"sentry-trace\");\n        const baggage = traceOptions.baggage || getMetaContent(\"baggage\") || getServerTiming(\"baggage\");\n        const propagationContext = propagationContextFromHeaders(sentryTrace, baggage);\n        const scope = getCurrentScope();\n        scope.setPropagationContext(propagationContext);\n        if (!hasSpansEnabled()) {\n          scope.getPropagationContext().propagationSpanId = generateSpanId();\n        }\n        const requestData = getHttpRequestData(client);\n        scope.setSDKProcessingMetadata({\n          normalizedRequest: { ...requestData, url: filterCollectedUrl(requestData.url, client) }\n        });\n        _createRouteSpan(client, {\n          op: PAGELOAD,\n          ...startSpanOptions\n        });\n      });\n      client.on(\"endPageloadSpan\", () => {\n        if (enableReportPageLoaded && _pageloadSpan) {\n          _pageloadSpan.setAttribute(SENTRY_IDLE_SPAN_FINISH_REASON, \"reportPageLoaded\");\n          _pageloadSpan.end();\n        }\n      });\n      WINDOW.addEventListener?.(\"pagehide\", () => {\n        const activeSpan = getActiveIdleSpan(client);\n        if (activeSpan && !spanToJSON(activeSpan).end_timestamp) {\n          activeSpan.setAttribute(SENTRY_IDLE_SPAN_FINISH_REASON, \"documentHidden\");\n          activeSpan.end();\n        }\n        void client.flush();\n      });\n    },\n    afterAllSetup(client) {\n      if (_isBot) {\n        return;\n      }\n      _INTERNAL_ensureBrowserSpanStreaming(client);\n      if (client.addIntegration && !client.getIntegrationByName?.(WEB_VITALS_INTEGRATION_NAME)) {\n        const ignore = webVitals?.ignore ?? [];\n        client.addIntegration(\n          webVitalsIntegration({\n            ...webVitals,\n            ignore: enableInp || ignore.includes(\"inp\") ? ignore : [...ignore, \"inp\"]\n          })\n        );\n      }\n      let startingUrl = getLocationHref();\n      if (linkPreviousTrace !== \"off\") {\n        linkTraces(client, { linkPreviousTrace, consistentTraceSampling });\n      }\n      if (WINDOW.location) {\n        if (instrumentPageLoad) {\n          startBrowserTracingPageLoadSpan(client, {\n            // With span streaming, span names have to be low cardinality, and there is no route\n            // information available here.\n            name: hasSpanStreamingEnabled(client) ? PAGELOAD_SPAN_NAME_FALLBACK : WINDOW.location.pathname,\n            attributes: {\n              [SENTRY_SEGMENT_NAME_SOURCE]: \"url\",\n              [SENTRY_ORIGIN]: \"auto.pageload.browser\"\n            }\n          });\n        }\n        if (instrumentNavigation) {\n          addHistoryInstrumentationHandler(({ to, from }) => {\n            if (from === void 0 && startingUrl !== void 0 && startingUrl.indexOf(to) !== -1) {\n              startingUrl = void 0;\n              return;\n            }\n            startingUrl = void 0;\n            const parsed = parseStringToURLObject(to);\n            const activeSpan = getActiveIdleSpan(client);\n            const navigationIsRedirect = activeSpan && detectRedirects && isRedirect(activeSpan, lastInteractionTimestamp);\n            startBrowserTracingNavigationSpan(\n              client,\n              {\n                // With span streaming, span names have to be low cardinality, and there is no route\n                // information available here.\n                name: hasSpanStreamingEnabled(client) ? NAVIGATION_SPAN_NAME_FALLBACK : parsed?.pathname || WINDOW.location.pathname,\n                attributes: {\n                  [SENTRY_SEGMENT_NAME_SOURCE]: \"url\",\n                  [SENTRY_ORIGIN]: \"auto.navigation.browser\"\n                }\n              },\n              { url: to, isRedirect: navigationIsRedirect }\n            );\n          });\n        }\n        if (instrumentBfcacheRestore) {\n          WINDOW.addEventListener?.(\"pageshow\", (event) => {\n            if (!event.persisted) {\n              return;\n            }\n            startingUrl = void 0;\n            startBrowserTracingNavigationSpan(\n              client,\n              {\n                // Deliberately no `startTime`: the span starts now, at the restore. The\n                // `PerformanceNavigationTiming` entry still describes the original document load and\n                // would date the span to before the page was frozen.\n                //\n                // TODO(routing): resolve the parameterized route via the route provider (#23551) and set\n                // the source from it. No router event fires on a restore, so in a framework app this is\n                // the only navigation span still named from a raw pathname.\n                name: hasSpanStreamingEnabled(client) ? NAVIGATION_SPAN_NAME_FALLBACK : WINDOW.location?.pathname || \"/\",\n                attributes: {\n                  [SENTRY_SEGMENT_NAME_SOURCE]: \"url\",\n                  [SENTRY_ORIGIN]: \"auto.navigation.browser.bfcache\",\n                  // A bfcache restore is near-instant, so these spans would otherwise drag\n                  // navigation duration percentiles down with no way to tell them apart.\n                  [BROWSER_NAVIGATION_TYPE]: \"back-forward-cache\"\n                }\n              },\n              { url: WINDOW.location?.href }\n            );\n          });\n        }\n      }\n      if (markBackgroundSpan) {\n        registerBackgroundTabDetection();\n      }\n      instrumentOutgoingRequests(client, {\n        traceFetch,\n        traceXHR,\n        tracePropagationTargets: client.getOptions().tracePropagationTargets,\n        shouldCreateSpanForRequest,\n        enableHTTPTimings,\n        onRequestSpanStart,\n        onRequestSpanEnd\n      });\n    }\n  };\n});\nfunction startBrowserTracingPageLoadSpan(client, spanOptions, traceOptions) {\n  const isFallbackSpanName = spanOptions.name === PAGELOAD_SPAN_NAME_FALLBACK;\n  getCurrentScope().setTransactionName(isFallbackSpanName ? WINDOW.location?.pathname : spanOptions.name);\n  const timeOrigin = browserPerformanceTimeOrigin();\n  const pageloadSpanOptions = {\n    ...spanOptions,\n    // startTime needs to be in seconds, not ms\n    startTime: spanOptions.startTime ?? (timeOrigin ? timeOrigin / 1e3 : void 0)\n  };\n  client.emit(\"startPageLoadSpan\", pageloadSpanOptions, traceOptions);\n  const pageloadSpan = getActiveIdleSpan(client);\n  if (pageloadSpan) {\n    client.emit(\"afterStartPageLoadSpan\", pageloadSpan);\n  }\n  return pageloadSpan;\n}\nfunction startBrowserTracingNavigationSpan(client, spanOptions, options) {\n  const { url, isRedirect: isRedirect2 } = options || {};\n  client.emit(\"beforeStartNavigationSpan\", spanOptions, { isRedirect: isRedirect2, url });\n  client.emit(\"startNavigationSpan\", spanOptions, { isRedirect: isRedirect2, url });\n  const scope = getCurrentScope();\n  const isFallbackSpanName = spanOptions.name === NAVIGATION_SPAN_NAME_FALLBACK;\n  scope.setTransactionName(\n    isFallbackSpanName ? url && parseStringToURLObject(url)?.pathname || WINDOW.location?.pathname : spanOptions.name\n  );\n  if (url && !isRedirect2) {\n    scope.setSDKProcessingMetadata({\n      normalizedRequest: {\n        ...getHttpRequestData(client),\n        url: filterCollectedUrl(url, client)\n      }\n    });\n  }\n  return getActiveIdleSpan(client);\n}\nfunction getMetaContent(metaName) {\n  const optionalWindowDocument = WINDOW.document;\n  const metaTag = optionalWindowDocument?.querySelector(`meta[name=${metaName}]`);\n  return metaTag?.getAttribute(\"content\") || void 0;\n}\nfunction getServerTiming(name) {\n  const navigation = WINDOW.performance?.getEntriesByType?.(\"navigation\")[0];\n  const entry = navigation?.serverTiming?.find((entry2) => entry2.name === name);\n  return entry?.description;\n}\nconst ACTIVE_IDLE_SPAN_PROPERTY = \"_sentry_idleSpan\";\nfunction getActiveIdleSpan(client) {\n  return client[ACTIVE_IDLE_SPAN_PROPERTY];\n}\nfunction setActiveIdleSpan(client, span) {\n  addNonEnumerableProperty(client, ACTIVE_IDLE_SPAN_PROPERTY, span);\n}\nconst REDIRECT_THRESHOLD = 1.5;\nfunction isRedirect(activeSpan, lastInteractionTimestamp) {\n  const spanData = spanToJSON(activeSpan);\n  const now = dateTimestampInSeconds();\n  const startTimestamp = spanData.start_timestamp;\n  if (now - startTimestamp > REDIRECT_THRESHOLD) {\n    return false;\n  }\n  if (lastInteractionTimestamp && now - lastInteractionTimestamp <= REDIRECT_THRESHOLD) {\n    return false;\n  }\n  return true;\n}\n\nexport { BROWSER_TRACING_INTEGRATION_ID, browserTracingIntegration, getMetaContent, getServerTiming, startBrowserTracingNavigationSpan, startBrowserTracingPageLoadSpan };\n//# sourceMappingURL=browserTracingIntegration.js.map\n","/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n  REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n  REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n  MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n    isMounted: function () {\n      return !1;\n    },\n    enqueueForceUpdate: function () {},\n    enqueueReplaceState: function () {},\n    enqueueSetState: function () {}\n  },\n  assign = Object.assign,\n  emptyObject = {};\nfunction Component(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n  if (\n    \"object\" !== typeof partialState &&\n    \"function\" !== typeof partialState &&\n    null != partialState\n  )\n    throw Error(\n      \"takes an object of state variables to update or a function which returns an object of state variables.\"\n    );\n  this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n  this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray;\nfunction noop() {}\nvar ReactSharedInternals = { H: null, A: null, T: null, S: null },\n  hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, props) {\n  var refProp = props.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== refProp ? refProp : null,\n    props: props\n  };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n  return ReactElement(oldElement.type, newKey, oldElement.props);\n}\nfunction isValidElement(object) {\n  return (\n    \"object\" === typeof object &&\n    null !== object &&\n    object.$$typeof === REACT_ELEMENT_TYPE\n  );\n}\nfunction escape(key) {\n  var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n  return (\n    \"$\" +\n    key.replace(/[=:]/g, function (match) {\n      return escaperLookup[match];\n    })\n  );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n  return \"object\" === typeof element && null !== element && null != element.key\n    ? escape(\"\" + element.key)\n    : index.toString(36);\n}\nfunction resolveThenable(thenable) {\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      throw thenable.reason;\n    default:\n      switch (\n        (\"string\" === typeof thenable.status\n          ? thenable.then(noop, noop)\n          : ((thenable.status = \"pending\"),\n            thenable.then(\n              function (fulfilledValue) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"fulfilled\"),\n                  (thenable.value = fulfilledValue));\n              },\n              function (error) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"rejected\"), (thenable.reason = error));\n              }\n            )),\n        thenable.status)\n      ) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw thenable.reason;\n      }\n  }\n  throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n  var type = typeof children;\n  if (\"undefined\" === type || \"boolean\" === type) children = null;\n  var invokeCallback = !1;\n  if (null === children) invokeCallback = !0;\n  else\n    switch (type) {\n      case \"bigint\":\n      case \"string\":\n      case \"number\":\n        invokeCallback = !0;\n        break;\n      case \"object\":\n        switch (children.$$typeof) {\n          case REACT_ELEMENT_TYPE:\n          case REACT_PORTAL_TYPE:\n            invokeCallback = !0;\n            break;\n          case REACT_LAZY_TYPE:\n            return (\n              (invokeCallback = children._init),\n              mapIntoArray(\n                invokeCallback(children._payload),\n                array,\n                escapedPrefix,\n                nameSoFar,\n                callback\n              )\n            );\n        }\n    }\n  if (invokeCallback)\n    return (\n      (callback = callback(children)),\n      (invokeCallback =\n        \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n      isArrayImpl(callback)\n        ? ((escapedPrefix = \"\"),\n          null != invokeCallback &&\n            (escapedPrefix =\n              invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n          mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n            return c;\n          }))\n        : null != callback &&\n          (isValidElement(callback) &&\n            (callback = cloneAndReplaceKey(\n              callback,\n              escapedPrefix +\n                (null == callback.key ||\n                (children && children.key === callback.key)\n                  ? \"\"\n                  : (\"\" + callback.key).replace(\n                      userProvidedKeyEscapeRegex,\n                      \"$&/\"\n                    ) + \"/\") +\n                invokeCallback\n            )),\n          array.push(callback)),\n      1\n    );\n  invokeCallback = 0;\n  var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n  if (isArrayImpl(children))\n    for (var i = 0; i < children.length; i++)\n      (nameSoFar = children[i]),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n    for (\n      children = i.call(children), i = 0;\n      !(nameSoFar = children.next()).done;\n\n    )\n      (nameSoFar = nameSoFar.value),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (\"object\" === type) {\n    if (\"function\" === typeof children.then)\n      return mapIntoArray(\n        resolveThenable(children),\n        array,\n        escapedPrefix,\n        nameSoFar,\n        callback\n      );\n    array = String(children);\n    throw Error(\n      \"Objects are not valid as a React child (found: \" +\n        (\"[object Object]\" === array\n          ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n          : array) +\n        \"). If you meant to render a collection of children, use an array instead.\"\n    );\n  }\n  return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n  if (null == children) return children;\n  var result = [],\n    count = 0;\n  mapIntoArray(children, result, \"\", \"\", function (child) {\n    return func.call(context, child, count++);\n  });\n  return result;\n}\nfunction lazyInitializer(payload) {\n  if (-1 === payload._status) {\n    var ctor = payload._result,\n      thenable = ctor();\n    thenable.then(\n      function (moduleObject) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 1),\n            (payload._result = moduleObject),\n            void 0 === thenable.status &&\n              ((thenable.status = \"fulfilled\"),\n              (thenable.value = moduleObject));\n      },\n      function (error) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 2),\n            (payload._result = error),\n            void 0 === thenable.status &&\n              ((thenable.status = \"rejected\"), (thenable.reason = error));\n      }\n    );\n    -1 === payload._status &&\n      ((payload._status = 0), (payload._result = thenable));\n  }\n  if (1 === payload._status) return payload._result.default;\n  throw payload._result;\n}\nvar reportGlobalError =\n  \"function\" === typeof reportError\n    ? reportError\n    : function (error) {\n        if (\n          \"object\" === typeof window &&\n          \"function\" === typeof window.ErrorEvent\n        ) {\n          var event = new window.ErrorEvent(\"error\", {\n            bubbles: !0,\n            cancelable: !0,\n            message:\n              \"object\" === typeof error &&\n              null !== error &&\n              \"string\" === typeof error.message\n                ? String(error.message)\n                : String(error),\n            error: error\n          });\n          if (!window.dispatchEvent(event)) return;\n        } else if (\n          \"object\" === typeof process &&\n          \"function\" === typeof process.emit\n        ) {\n          process.emit(\"uncaughtException\", error);\n          return;\n        }\n        console.error(error);\n      };\nfunction startTransition(scope) {\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  currentTransition.types =\n    null !== prevTransition ? prevTransition.types : null;\n  ReactSharedInternals.T = currentTransition;\n  try {\n    var returnValue = scope(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    \"object\" === typeof returnValue &&\n      null !== returnValue &&\n      \"function\" === typeof returnValue.then &&\n      returnValue.then(noop, reportGlobalError);\n  } catch (error) {\n    reportGlobalError(error);\n  } finally {\n    null !== prevTransition &&\n      null !== currentTransition.types &&\n      (prevTransition.types = currentTransition.types),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction addTransitionType(type) {\n  var transition = ReactSharedInternals.T;\n  if (null !== transition) {\n    var transitionTypes = transition.types;\n    null === transitionTypes\n      ? (transition.types = [type])\n      : -1 === transitionTypes.indexOf(type) && transitionTypes.push(type);\n  } else startTransition(addTransitionType.bind(null, type));\n}\nvar Children = {\n  map: mapChildren,\n  forEach: function (children, forEachFunc, forEachContext) {\n    mapChildren(\n      children,\n      function () {\n        forEachFunc.apply(this, arguments);\n      },\n      forEachContext\n    );\n  },\n  count: function (children) {\n    var n = 0;\n    mapChildren(children, function () {\n      n++;\n    });\n    return n;\n  },\n  toArray: function (children) {\n    return (\n      mapChildren(children, function (child) {\n        return child;\n      }) || []\n    );\n  },\n  only: function (children) {\n    if (!isValidElement(children))\n      throw Error(\n        \"React.Children.only expected to receive a single React element child.\"\n      );\n    return children;\n  }\n};\nexports.Activity = REACT_ACTIVITY_TYPE;\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.ViewTransition = REACT_VIEW_TRANSITION_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n  __proto__: null,\n  c: function (size) {\n    return ReactSharedInternals.H.useMemoCache(size);\n  }\n};\nexports.addTransitionType = addTransitionType;\nexports.cache = function (fn) {\n  return function () {\n    return fn.apply(null, arguments);\n  };\n};\nexports.cacheSignal = function () {\n  return null;\n};\nexports.cloneElement = function (element, config, children) {\n  if (null === element || void 0 === element)\n    throw Error(\n      \"The argument must be a React element, but you passed \" + element + \".\"\n    );\n  var props = assign({}, element.props),\n    key = element.key;\n  if (null != config)\n    for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n      !hasOwnProperty.call(config, propName) ||\n        \"key\" === propName ||\n        \"__self\" === propName ||\n        \"__source\" === propName ||\n        (\"ref\" === propName && void 0 === config.ref) ||\n        (props[propName] = config[propName]);\n  var propName = arguments.length - 2;\n  if (1 === propName) props.children = children;\n  else if (1 < propName) {\n    for (var childArray = Array(propName), i = 0; i < propName; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  return ReactElement(element.type, key, props);\n};\nexports.createContext = function (defaultValue) {\n  defaultValue = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    _currentValue: defaultValue,\n    _currentValue2: defaultValue,\n    _threadCount: 0,\n    Provider: null,\n    Consumer: null\n  };\n  defaultValue.Provider = defaultValue;\n  defaultValue.Consumer = {\n    $$typeof: REACT_CONSUMER_TYPE,\n    _context: defaultValue\n  };\n  return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n  var propName,\n    props = {},\n    key = null;\n  if (null != config)\n    for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n      hasOwnProperty.call(config, propName) &&\n        \"key\" !== propName &&\n        \"__self\" !== propName &&\n        \"__source\" !== propName &&\n        (props[propName] = config[propName]);\n  var childrenLength = arguments.length - 2;\n  if (1 === childrenLength) props.children = children;\n  else if (1 < childrenLength) {\n    for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  if (type && type.defaultProps)\n    for (propName in ((childrenLength = type.defaultProps), childrenLength))\n      void 0 === props[propName] &&\n        (props[propName] = childrenLength[propName]);\n  return ReactElement(type, key, props);\n};\nexports.createRef = function () {\n  return { current: null };\n};\nexports.forwardRef = function (render) {\n  return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n  return {\n    $$typeof: REACT_LAZY_TYPE,\n    _payload: { _status: -1, _result: ctor },\n    _init: lazyInitializer\n  };\n};\nexports.memo = function (type, compare) {\n  return {\n    $$typeof: REACT_MEMO_TYPE,\n    type: type,\n    compare: void 0 === compare ? null : compare\n  };\n};\nexports.startTransition = startTransition;\nexports.unstable_useCacheRefresh = function () {\n  return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n  return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n  return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n  return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n  return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, deps) {\n  return ReactSharedInternals.H.useEffect(create, deps);\n};\nexports.useEffectEvent = function (callback) {\n  return ReactSharedInternals.H.useEffectEvent(callback);\n};\nexports.useId = function () {\n  return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n  return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n  return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n  return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n  return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n  return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n  return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n  return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n  return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n  subscribe,\n  getSnapshot,\n  getServerSnapshot\n) {\n  return ReactSharedInternals.H.useSyncExternalStore(\n    subscribe,\n    getSnapshot,\n    getServerSnapshot\n  );\n};\nexports.useTransition = function () {\n  return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.3.1\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","import { isPlainObject } from '@sentry/core';\n\nfunction isSyntheticEvent(wat) {\n  return isPlainObject(wat) && \"nativeEvent\" in wat && \"preventDefault\" in wat && \"stopPropagation\" in wat;\n}\n\nexport { isSyntheticEvent };\n//# sourceMappingURL=isSyntheticEvent.js.map\n","import { setContext, init as init$1, normalizeStringifyValue as normalizeStringifyValue$1 } from '@sentry/browser';\nimport { applySdkMetadata, setNormalizeStringifier } from '@sentry/core';\nimport { version } from 'react';\nimport { isSyntheticEvent } from './isSyntheticEvent.js';\n\nfunction init(options) {\n  const opts = {\n    ...options\n  };\n  applySdkMetadata(opts, \"react\");\n  setContext(\"react\", { version });\n  const client = init$1(opts);\n  setNormalizeStringifier(normalizeStringifyValue);\n  return client;\n}\nfunction normalizeStringifyValue(value) {\n  if (isSyntheticEvent(value)) {\n    return \"[SyntheticEvent]\";\n  }\n  return normalizeStringifyValue$1(value);\n}\n\nexport { init };\n//# sourceMappingURL=sdk.js.map\n","import { captureException } from '@sentry/browser';\nimport { isError } from '@sentry/core';\n\nfunction setCause(error, cause) {\n  const seenErrors = /* @__PURE__ */ new WeakSet();\n  function recurse(error2, cause2) {\n    if (seenErrors.has(error2)) {\n      return;\n    }\n    if (error2.cause) {\n      seenErrors.add(error2);\n      return recurse(error2.cause, cause2);\n    }\n    error2.cause = cause2;\n  }\n  recurse(error, cause);\n}\nfunction captureReactException(error, { componentStack }, hint) {\n  if (isError(error) && componentStack) {\n    const errorBoundaryError = new Error(error.message);\n    errorBoundaryError.name = `React ErrorBoundary ${error.name}`;\n    errorBoundaryError.stack = componentStack;\n    setCause(error, errorBoundaryError);\n  }\n  return captureException(error, hint);\n}\nfunction reactErrorHandler(callback) {\n  return (error, errorInfo) => {\n    const hasCallback = !!callback;\n    const eventId = captureReactException(error, errorInfo, {\n      mechanism: { handled: hasCallback, type: \"auto.function.react.error_handler\" }\n    });\n    if (hasCallback) {\n      callback(error, errorInfo, eventId);\n    }\n  };\n}\n\nexport { captureReactException, reactErrorHandler, setCause };\n//# sourceMappingURL=error.js.map\n","import { getClient, showReportDialog, withScope } from '@sentry/browser';\nimport { debug } from '@sentry/core';\nimport * as React from 'react';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { captureReactException } from './error.js';\nimport { hoistNonReactStatics } from './hoist-non-react-statics.js';\n\nconst UNKNOWN_COMPONENT = \"unknown\";\nconst INITIAL_STATE = {\n  componentStack: null,\n  error: null,\n  eventId: null\n};\nclass ErrorBoundary extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = INITIAL_STATE;\n    this._openFallbackReportDialog = true;\n    const client = getClient();\n    if (client && props.showDialog) {\n      this._openFallbackReportDialog = false;\n      this._cleanupHook = client.on(\"afterSendEvent\", (event) => {\n        if (!event.type && this._lastEventId && event.event_id === this._lastEventId) {\n          showReportDialog({ ...props.dialogOptions, eventId: this._lastEventId });\n        }\n      });\n    }\n  }\n  componentDidCatch(error, errorInfo) {\n    const { componentStack } = errorInfo;\n    const { beforeCapture, onError, showDialog, dialogOptions } = this.props;\n    withScope((scope) => {\n      if (beforeCapture) {\n        beforeCapture(scope, error, componentStack);\n      }\n      const handled = this.props.handled != null ? this.props.handled : !!this.props.fallback;\n      const eventId = captureReactException(error, errorInfo, {\n        mechanism: { handled, type: \"auto.function.react.error_boundary\" }\n      });\n      if (onError) {\n        onError(error, componentStack, eventId);\n      }\n      if (showDialog) {\n        this._lastEventId = eventId;\n        if (this._openFallbackReportDialog) {\n          showReportDialog({ ...dialogOptions, eventId });\n        }\n      }\n      this.setState({ error, componentStack, eventId });\n    });\n  }\n  componentDidMount() {\n    const { onMount } = this.props;\n    if (onMount) {\n      onMount();\n    }\n  }\n  componentWillUnmount() {\n    const { error, componentStack, eventId } = this.state;\n    const { onUnmount } = this.props;\n    if (onUnmount) {\n      if (this.state === INITIAL_STATE) {\n        onUnmount(null, null, null);\n      } else {\n        onUnmount(error, componentStack, eventId);\n      }\n    }\n    if (this._cleanupHook) {\n      this._cleanupHook();\n      this._cleanupHook = void 0;\n    }\n  }\n  resetErrorBoundary() {\n    const { onReset } = this.props;\n    const { error, componentStack, eventId } = this.state;\n    if (onReset) {\n      onReset(error, componentStack, eventId);\n    }\n    this.setState(INITIAL_STATE);\n  }\n  render() {\n    const { fallback, children } = this.props;\n    const state = this.state;\n    if (state.componentStack === null) {\n      return typeof children === \"function\" ? children() : children;\n    }\n    const element = typeof fallback === \"function\" ? React.createElement(fallback, {\n      error: state.error,\n      componentStack: state.componentStack,\n      resetError: () => this.resetErrorBoundary(),\n      eventId: state.eventId\n    }) : fallback;\n    if (React.isValidElement(element)) {\n      return element;\n    }\n    if (fallback) {\n      DEBUG_BUILD && debug.warn(\"fallback did not produce a valid ReactElement\");\n    }\n    return null;\n  }\n}\nfunction withErrorBoundary(WrappedComponent, errorBoundaryOptions) {\n  const componentDisplayName = WrappedComponent.displayName || WrappedComponent.name || UNKNOWN_COMPONENT;\n  const Wrapped = React.memo((props) => /* @__PURE__ */ React.createElement(ErrorBoundary, { ...errorBoundaryOptions }, /* @__PURE__ */ React.createElement(WrappedComponent, { ...props })));\n  Wrapped.displayName = `errorBoundary(${componentDisplayName})`;\n  hoistNonReactStatics(Wrapped, WrappedComponent);\n  return Wrapped;\n}\n\nexport { ErrorBoundary, UNKNOWN_COMPONENT, withErrorBoundary };\n//# sourceMappingURL=errorboundary.js.map\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nexport default arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nexport default baseTrim;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n  if (!value) {\n    return value === 0 ? value : 0;\n  }\n  value = toNumber(value);\n  if (value === INFINITY || value === -INFINITY) {\n    var sign = (value < 0 ? -1 : 1);\n    return sign * MAX_INTEGER;\n  }\n  return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n  var result = toFinite(value),\n      remainder = result % 1;\n\n  return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nexport default identity;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nexport default baseCreate;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\nexport default apply;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n  // No operation performed.\n}\n\nexport default noop;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nexport default copyArray;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\nexport default shortOut;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\nexport default constant;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nexport default defineProperty;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\nexport default baseSetToString;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nexport default arrayEach;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n  var length = array.length,\n      index = fromIndex + (fromRight ? 1 : -1);\n\n  while ((fromRight ? index-- : ++index < length)) {\n    if (predicate(array[index], index, array)) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nexport default baseFindIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n  return value !== value;\n}\n\nexport default baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n  var index = fromIndex - 1,\n      length = array.length;\n\n  while (++index < length) {\n    if (array[index] === value) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nexport default strictIndexOf;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n  return value === value\n    ? strictIndexOf(array, value, fromIndex)\n    : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nexport default baseIndexOf;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n  var length = array == null ? 0 : array.length;\n  return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nexport default arrayIncludes;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nexport default baseAssignValue;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nexport default copyObject;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\nexport default overRest;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\nexport default isIterateeCall;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return baseRest(function(object, sources) {\n    var index = -1,\n        length = sources.length,\n        customizer = length > 1 ? sources[length - 1] : undefined,\n        guard = length > 2 ? sources[2] : undefined;\n\n    customizer = (assigner.length > 3 && typeof customizer == 'function')\n      ? (length--, customizer)\n      : undefined;\n\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\n\nexport default createAssigner;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import copyObject from './_copyObject.js';\nimport createAssigner from './_createAssigner.js';\nimport keysIn from './keysIn.js';\n\n/**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * function Bar() {\n *   this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\nvar assignIn = createAssigner(function(object, source) {\n  copyObject(source, keysIn(source), object);\n});\n\nexport default assignIn;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\nexport default isKey;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nexport default listCacheClear;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n\n  var cache = result.cache;\n  return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46 /* . */) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\nexport default stringToPath;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n  if (isArray(value)) {\n    return value;\n  }\n  return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = castPath(path, object);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n","import baseGet from './_baseGet.js';\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n  var result = object == null ? undefined : baseGet(object, path);\n  return result === undefined ? defaultValue : result;\n}\n\nexport default get;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nexport default arrayPush;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n  return isArray(value) || isArguments(value) ||\n    !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n  var index = -1,\n      length = array.length;\n\n  predicate || (predicate = isFlattenable);\n  result || (result = []);\n\n  while (++index < length) {\n    var value = array[index];\n    if (depth > 0 && predicate(value)) {\n      if (depth > 1) {\n        // Recursively flatten arrays (susceptible to call stack limits).\n        baseFlatten(value, depth - 1, predicate, isStrict, result);\n      } else {\n        arrayPush(result, value);\n      }\n    } else if (!isStrict) {\n      result[result.length] = value;\n    }\n  }\n  return result;\n}\n\nexport default baseFlatten;\n","import baseFlatten from './_baseFlatten.js';\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? baseFlatten(array, 1) : [];\n}\n\nexport default flatten;\n","import flatten from './flatten.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n  return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nexport default flatRest;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\nexport default baseSlice;\n","import baseSlice from './_baseSlice.js';\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n  var length = array.length;\n  end = end === undefined ? length : end;\n  return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nexport default castSlice;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n  return reHasUnicode.test(string);\n}\n\nexport default hasUnicode;\n","/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n  return string.split('');\n}\n\nexport default asciiToArray;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n    rsCombo = '[' + rsComboRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n  return string.match(reUnicode) || [];\n}\n\nexport default unicodeToArray;\n","import asciiToArray from './_asciiToArray.js';\nimport hasUnicode from './_hasUnicode.js';\nimport unicodeToArray from './_unicodeToArray.js';\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n  return hasUnicode(string)\n    ? unicodeToArray(string)\n    : asciiToArray(string);\n}\n\nexport default stringToArray;\n","import castSlice from './_castSlice.js';\nimport hasUnicode from './_hasUnicode.js';\nimport stringToArray from './_stringToArray.js';\nimport toString from './toString.js';\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n  return function(string) {\n    string = toString(string);\n\n    var strSymbols = hasUnicode(string)\n      ? stringToArray(string)\n      : undefined;\n\n    var chr = strSymbols\n      ? strSymbols[0]\n      : string.charAt(0);\n\n    var trailing = strSymbols\n      ? castSlice(strSymbols, 1).join('')\n      : string.slice(1);\n\n    return chr[methodName]() + trailing;\n  };\n}\n\nexport default createCaseFirst;\n","import createCaseFirst from './_createCaseFirst.js';\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nexport default upperFirst;\n","import toString from './toString.js';\nimport upperFirst from './upperFirst.js';\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n  return upperFirst(toString(string).toLowerCase());\n}\n\nexport default capitalize;\n","import root from './_root.js';\nimport toInteger from './toInteger.js';\nimport toNumber from './toNumber.js';\nimport toString from './toString.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsFinite = root.isFinite,\n    nativeMin = Math.min;\n\n/**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\nfunction createRound(methodName) {\n  var func = Math[methodName];\n  return function(number, precision) {\n    number = toNumber(number);\n    precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n    if (precision && nativeIsFinite(number)) {\n      // Shift with exponential notation to avoid floating-point issues.\n      // See [MDN](https://mdn.io/round#Examples) for more details.\n      var pair = (toString(number) + 'e').split('e'),\n          value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n      pair = (toString(value) + 'e').split('e');\n      return +(pair[0] + 'e' + (+pair[1] - precision));\n    }\n    return func(number);\n  };\n}\n\nexport default createRound;\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n  if (number === number) {\n    if (upper !== undefined) {\n      number = number <= upper ? number : upper;\n    }\n    if (lower !== undefined) {\n      number = number >= lower ? number : lower;\n    }\n  }\n  return number;\n}\n\nexport default baseClamp;\n","import baseClamp from './_baseClamp.js';\nimport toNumber from './toNumber.js';\n\n/**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\nfunction clamp(number, lower, upper) {\n  if (upper === undefined) {\n    upper = lower;\n    lower = undefined;\n  }\n  if (upper !== undefined) {\n    upper = toNumber(upper);\n    upper = upper === upper ? upper : 0;\n  }\n  if (lower !== undefined) {\n    lower = toNumber(lower);\n    lower = lower === lower ? lower : 0;\n  }\n  return baseClamp(toNumber(number), lower, upper);\n}\n\nexport default clamp;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import copyObject from './_copyObject.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nexport default cloneBuffer;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nexport default getSymbols;\n","import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush(result, getSymbols(object));\n    object = getPrototype(object);\n  }\n  return result;\n};\n\nexport default getSymbolsIn;\n","import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nexport default getTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = new array.constructor(length);\n\n  // Add properties assigned by `RegExp#exec`.\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\n\nexport default initCloneArray;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return new Ctor;\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return new Ctor;\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\n\nexport default initCloneByTag;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nexport default initCloneObject;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Deep clone\n *  2 - Flatten inherited properties\n *  4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result,\n      isDeep = bitmask & CLONE_DEEP_FLAG,\n      isFlat = bitmask & CLONE_FLAT_FLAG,\n      isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      result = (isFlat || isFunc) ? {} : initCloneObject(value);\n      if (!isDeep) {\n        return isFlat\n          ? copySymbolsIn(value, baseAssignIn(result, value))\n          : copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  // Check for circular references and return its corresponding clone.\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key) {\n      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n    });\n  }\n\n  var keysFunc = isFull\n    ? (isFlat ? getAllKeysIn : getAllKeys)\n    : (isFlat ? keysIn : keys);\n\n  var props = isArr ? undefined : keysFunc(value);\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    // Recursively populate clone (susceptible to call stack limits).\n    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n  });\n  return result;\n}\n\nexport default baseClone;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n  return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nexport default clone;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nexport default cloneDeep;\n","/**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `-0`, `0n`, `\"\"`, `undefined`, and `NaN` are falsy.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\nfunction compact(array) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (value) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nexport default compact;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport default arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\n\nexport default cacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Check that cyclic values are equal.\n  var arrStacked = stack.get(array);\n  var othStacked = stack.get(other);\n  if (arrStacked && othStacked) {\n    return arrStacked == other && othStacked == array;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!cacheHas(seen, othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, bitmask, customizer, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\nexport default equalArrays;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      objProps = getAllKeys(object),\n      objLength = objProps.length,\n      othProps = getAllKeys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Check that cyclic values are equal.\n  var objStacked = stack.get(object);\n  var othStacked = stack.get(other);\n  if (objStacked && othStacked) {\n    return objStacked == other && othStacked == object;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = objIsArr ? arrayTag : getTag(object),\n      othTag = othIsArr ? arrayTag : getTag(other);\n\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && isBuffer(object)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Unordered comparison\n *  2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = Object(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var stack = new Stack;\n      if (customizer) {\n        var result = customizer(objValue, srcValue, key, object, source, stack);\n      }\n      if (!(result === undefined\n            ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n            : result\n          )) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\nexport default baseIsMatch;\n","import isObject from './isObject.js';\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\nexport default isStrictComparable;\n","import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = keys(object),\n      length = result.length;\n\n  while (length--) {\n    var key = result[length],\n        value = object[key];\n\n    result[length] = [key, value, isStrictComparable(value)];\n  }\n  return result;\n}\n\nexport default getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    return object[key] === srcValue &&\n      (srcValue !== undefined || (key in Object(object)));\n  };\n}\n\nexport default matchesStrictComparable;\n","import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n  }\n  return function(object) {\n    return object === source || baseIsMatch(object, source, matchData);\n  };\n}\n\nexport default baseMatches;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n  return object != null && key in Object(object);\n}\n\nexport default baseHasIn;\n","import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      result = false;\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n    if (!(result = object != null && hasFunc(object, key))) {\n      break;\n    }\n    object = object[key];\n  }\n  if (result || ++index != length) {\n    return result;\n  }\n  length = object == null ? 0 : object.length;\n  return !!length && isLength(length) && isIndex(key, length) &&\n    (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n","import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n  return object != null && hasPath(object, path, baseHasIn);\n}\n\nexport default hasIn;\n","import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  if (isKey(path) && isStrictComparable(srcValue)) {\n    return matchesStrictComparable(toKey(path), srcValue);\n  }\n  return function(object) {\n    var objValue = get(object, path);\n    return (objValue === undefined && objValue === srcValue)\n      ? hasIn(object, path)\n      : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n  };\n}\n\nexport default baseMatchesProperty;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nexport default baseProperty;\n","import baseGet from './_baseGet.js';\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n  return function(object) {\n    return baseGet(object, path);\n  };\n}\n\nexport default basePropertyDeep;\n","import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': 2 } },\n *   { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nexport default property;\n","import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n  if (typeof value == 'function') {\n    return value;\n  }\n  if (value == null) {\n    return identity;\n  }\n  if (typeof value == 'object') {\n    return isArray(value)\n      ? baseMatchesProperty(value[0], value[1])\n      : baseMatches(value);\n  }\n  return property(value);\n}\n\nexport default baseIteratee;\n","/**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction arrayAggregator(array, setter, iteratee, accumulator) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    var value = array[index];\n    setter(accumulator, value, iteratee(value), array);\n  }\n  return accumulator;\n}\n\nexport default arrayAggregator;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","import baseFor from './_baseFor.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return object && baseFor(object, iteratee, keys);\n}\n\nexport default baseForOwn;\n","import isArrayLike from './isArrayLike.js';\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    if (collection == null) {\n      return collection;\n    }\n    if (!isArrayLike(collection)) {\n      return eachFunc(collection, iteratee);\n    }\n    var length = collection.length,\n        index = fromRight ? length : -1,\n        iterable = Object(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\nexport default createBaseEach;\n","import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nexport default baseEach;\n","import baseEach from './_baseEach.js';\n\n/**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction baseAggregator(collection, setter, iteratee, accumulator) {\n  baseEach(collection, function(value, key, collection) {\n    setter(accumulator, value, iteratee(value), collection);\n  });\n  return accumulator;\n}\n\nexport default baseAggregator;\n","import arrayAggregator from './_arrayAggregator.js';\nimport baseAggregator from './_baseAggregator.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\nfunction createAggregator(setter, initializer) {\n  return function(collection, iteratee) {\n    var func = isArray(collection) ? arrayAggregator : baseAggregator,\n        accumulator = initializer ? initializer() : {};\n\n    return func(collection, setter, baseIteratee(iteratee, 2), accumulator);\n  };\n}\n\nexport default createAggregator;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\nexport default now;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\nexport default debounce;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n  if ((value !== undefined && !eq(object[key], value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nexport default assignMergeValue;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n  if (key === 'constructor' && typeof object[key] === 'function') {\n    return;\n  }\n\n  if (key == '__proto__') {\n    return;\n  }\n\n  return object[key];\n}\n\nexport default safeGet;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n  return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n","import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = safeGet(object, key),\n      srcValue = safeGet(source, key),\n      stacked = stack.get(srcValue);\n\n  if (stacked) {\n    assignMergeValue(object, key, stacked);\n    return;\n  }\n  var newValue = customizer\n    ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n    : undefined;\n\n  var isCommon = newValue === undefined;\n\n  if (isCommon) {\n    var isArr = isArray(srcValue),\n        isBuff = !isArr && isBuffer(srcValue),\n        isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray(objValue)) {\n        newValue = objValue;\n      }\n      else if (isArrayLikeObject(objValue)) {\n        newValue = copyArray(objValue);\n      }\n      else if (isBuff) {\n        isCommon = false;\n        newValue = cloneBuffer(srcValue, true);\n      }\n      else if (isTyped) {\n        isCommon = false;\n        newValue = cloneTypedArray(srcValue, true);\n      }\n      else {\n        newValue = [];\n      }\n    }\n    else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      newValue = objValue;\n      if (isArguments(objValue)) {\n        newValue = toPlainObject(objValue);\n      }\n      else if (!isObject(objValue) || isFunction(objValue)) {\n        newValue = initCloneObject(srcValue);\n      }\n    }\n    else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    // Recursively merge objects and arrays (susceptible to call stack limits).\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack['delete'](srcValue);\n  }\n  assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n","import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n  if (object === source) {\n    return;\n  }\n  baseFor(source, function(srcValue, key) {\n    stack || (stack = new Stack);\n    if (isObject(srcValue)) {\n      baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n    }\n    else {\n      var newValue = customizer\n        ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      if (newValue === undefined) {\n        newValue = srcValue;\n      }\n      assignMergeValue(object, key, newValue);\n    }\n  }, keysIn);\n}\n\nexport default baseMerge;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n *   if (_.isArray(objValue)) {\n *     return objValue.concat(srcValue);\n *   }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\nvar mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n  baseMerge(object, source, srcIndex, customizer);\n});\n\nexport default mergeWith;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (comparator(value, array[index])) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport default arrayIncludesWith;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport arrayMap from './_arrayMap.js';\nimport baseUnary from './_baseUnary.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n  var index = -1,\n      includes = arrayIncludes,\n      isCommon = true,\n      length = array.length,\n      result = [],\n      valuesLength = values.length;\n\n  if (!length) {\n    return result;\n  }\n  if (iteratee) {\n    values = arrayMap(values, baseUnary(iteratee));\n  }\n  if (comparator) {\n    includes = arrayIncludesWith;\n    isCommon = false;\n  }\n  else if (values.length >= LARGE_ARRAY_SIZE) {\n    includes = cacheHas;\n    isCommon = false;\n    values = new SetCache(values);\n  }\n  outer:\n  while (++index < length) {\n    var value = array[index],\n        computed = iteratee == null ? value : iteratee(value);\n\n    value = (comparator || value !== 0) ? value : 0;\n    if (isCommon && computed === computed) {\n      var valuesIndex = valuesLength;\n      while (valuesIndex--) {\n        if (values[valuesIndex] === computed) {\n          continue outer;\n        }\n      }\n      result.push(value);\n    }\n    else if (!includes(values, computed, comparator)) {\n      result.push(value);\n    }\n  }\n  return result;\n}\n\nexport default baseDifference;\n","import baseDifference from './_baseDifference.js';\nimport baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\nvar difference = baseRest(function(array, values) {\n  return isArrayLikeObject(array)\n    ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n    : [];\n});\n\nexport default difference;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n","import baseEach from './_baseEach.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n  var index = -1,\n      result = isArrayLike(collection) ? Array(collection.length) : [];\n\n  baseEach(collection, function(value, key, collection) {\n    result[++index] = iteratee(value, key, collection);\n  });\n  return result;\n}\n\nexport default baseMap;\n","import baseAssignValue from './_baseAssignValue.js';\nimport createAggregator from './_createAggregator.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\nvar groupBy = createAggregator(function(result, value, key) {\n  if (hasOwnProperty.call(result, key)) {\n    result[key].push(value);\n  } else {\n    baseAssignValue(result, key, [value]);\n  }\n});\n\nexport default groupBy;\n","/**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n *  else `false`.\n */\nfunction baseGt(value, other) {\n  return value > other;\n}\n\nexport default baseGt;\n","import arrayMap from './_arrayMap.js';\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n  return arrayMap(props, function(key) {\n    return object[key];\n  });\n}\n\nexport default baseValues;\n","import baseValues from './_baseValues.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n  return object == null ? [] : baseValues(object, keys(object));\n}\n\nexport default values;\n","import baseGet from './_baseGet.js';\nimport baseSlice from './_baseSlice.js';\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n  return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nexport default parent;\n","import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLike from './isArrayLike.js';\nimport isBuffer from './isBuffer.js';\nimport isPrototype from './_isPrototype.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n  if (value == null) {\n    return true;\n  }\n  if (isArrayLike(value) &&\n      (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n        isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n    return !value.length;\n  }\n  var tag = getTag(value);\n  if (tag == mapTag || tag == setTag) {\n    return !value.size;\n  }\n  if (isPrototype(value)) {\n    return !baseKeys(value).length;\n  }\n  for (var key in value) {\n    if (hasOwnProperty.call(value, key)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport default isEmpty;\n","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n  return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n","import toInteger from './toInteger.js';\n\n/**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\nfunction isInteger(value) {\n  return typeof value == 'number' && value == toInteger(value);\n}\n\nexport default isInteger;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n  return typeof value == 'number' ||\n    (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nexport default isNumber;\n","import baseAssignValue from './_baseAssignValue.js';\nimport createAggregator from './_createAggregator.js';\n\n/**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n *   { 'dir': 'left', 'code': 97 },\n *   { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n *   return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\nvar keyBy = createAggregator(function(result, value, key) {\n  baseAssignValue(result, key, value);\n});\n\nexport default keyBy;\n","/**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n *  else `false`.\n */\nfunction baseLt(value, other) {\n  return value < other;\n}\n\nexport default baseLt;\n","import baseAssignValue from './_baseAssignValue.js';\nimport baseForOwn from './_baseForOwn.js';\nimport baseIteratee from './_baseIteratee.js';\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n *   'fred':    { 'user': 'fred',    'age': 40 },\n *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n  var result = {};\n  iteratee = baseIteratee(iteratee, 3);\n\n  baseForOwn(object, function(value, key, object) {\n    baseAssignValue(result, key, iteratee(value, key, object));\n  });\n  return result;\n}\n\nexport default mapValues;\n","import isSymbol from './isSymbol.js';\n\n/**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n  var index = -1,\n      length = array.length;\n\n  while (++index < length) {\n    var value = array[index],\n        current = iteratee(value);\n\n    if (current != null && (computed === undefined\n          ? (current === current && !isSymbol(current))\n          : comparator(current, computed)\n        )) {\n      var computed = current,\n          result = value;\n    }\n  }\n  return result;\n}\n\nexport default baseExtremum;\n","import baseExtremum from './_baseExtremum.js';\nimport baseGt from './_baseGt.js';\nimport identity from './identity.js';\n\n/**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\nfunction max(array) {\n  return (array && array.length)\n    ? baseExtremum(array, identity, baseGt)\n    : undefined;\n}\n\nexport default max;\n","import baseExtremum from './_baseExtremum.js';\nimport baseGt from './_baseGt.js';\nimport baseIteratee from './_baseIteratee.js';\n\n/**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\nfunction maxBy(array, iteratee) {\n  return (array && array.length)\n    ? baseExtremum(array, baseIteratee(iteratee, 2), baseGt)\n    : undefined;\n}\n\nexport default maxBy;\n","/**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\nfunction baseSum(array, iteratee) {\n  var result,\n      index = -1,\n      length = array.length;\n\n  while (++index < length) {\n    var current = iteratee(array[index]);\n    if (current !== undefined) {\n      result = result === undefined ? current : (result + current);\n    }\n  }\n  return result;\n}\n\nexport default baseSum;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n *   'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n *   'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n  baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n","import baseExtremum from './_baseExtremum.js';\nimport baseLt from './_baseLt.js';\nimport identity from './identity.js';\n\n/**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\nfunction min(array) {\n  return (array && array.length)\n    ? baseExtremum(array, identity, baseLt)\n    : undefined;\n}\n\nexport default min;\n","import baseExtremum from './_baseExtremum.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseLt from './_baseLt.js';\n\n/**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\nfunction minBy(array, iteratee) {\n  return (array && array.length)\n    ? baseExtremum(array, baseIteratee(iteratee, 2), baseLt)\n    : undefined;\n}\n\nexport default minBy;\n","import castPath from './_castPath.js';\nimport last from './last.js';\nimport parent from './_parent.js';\nimport toKey from './_toKey.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n  path = castPath(path, object);\n\n  // Prevent prototype pollution:\n  // https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg\n  // https://github.com/lodash/lodash/security/advisories/GHSA-f23m-r3pf-42rh\n  var index = -1,\n      length = path.length;\n\n  if (!length) {\n    return true;\n  }\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n\n    // Always block \"__proto__\" anywhere in the path if it's not expected\n    if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) {\n      return false;\n    }\n\n    // Block constructor/prototype as non-terminal traversal keys to prevent\n    // escaping the object graph into built-in constructors and prototypes.\n    if ((key === 'constructor' || key === 'prototype') && index < length - 1) {\n      return false;\n    }\n  }\n\n  var obj = parent(object, path);\n  return obj == null || delete obj[toKey(last(path))];\n}\n\nexport default baseUnset;\n","import isPlainObject from './isPlainObject.js';\n\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\nfunction customOmitClone(value) {\n  return isPlainObject(value) ? undefined : value;\n}\n\nexport default customOmitClone;\n","import arrayMap from './_arrayMap.js';\nimport baseClone from './_baseClone.js';\nimport baseUnset from './_baseUnset.js';\nimport castPath from './_castPath.js';\nimport copyObject from './_copyObject.js';\nimport customOmitClone from './_customOmitClone.js';\nimport flatRest from './_flatRest.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = flatRest(function(object, paths) {\n  var result = {};\n  if (object == null) {\n    return result;\n  }\n  var isDeep = false;\n  paths = arrayMap(paths, function(path) {\n    path = castPath(path, object);\n    isDeep || (isDeep = path.length > 1);\n    return path;\n  });\n  copyObject(object, getAllKeysIn(object), result);\n  if (isDeep) {\n    result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n  }\n  var length = paths.length;\n  while (length--) {\n    baseUnset(result, paths[length]);\n  }\n  return result;\n});\n\nexport default omit;\n","/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n  var length = array.length;\n\n  array.sort(comparer);\n  while (length--) {\n    array[length] = array[length].value;\n  }\n  return array;\n}\n\nexport default baseSortBy;\n","import isSymbol from './isSymbol.js';\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n  if (value !== other) {\n    var valIsDefined = value !== undefined,\n        valIsNull = value === null,\n        valIsReflexive = value === value,\n        valIsSymbol = isSymbol(value);\n\n    var othIsDefined = other !== undefined,\n        othIsNull = other === null,\n        othIsReflexive = other === other,\n        othIsSymbol = isSymbol(other);\n\n    if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n        (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n        (valIsNull && othIsDefined && othIsReflexive) ||\n        (!valIsDefined && othIsReflexive) ||\n        !valIsReflexive) {\n      return 1;\n    }\n    if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n        (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n        (othIsNull && valIsDefined && valIsReflexive) ||\n        (!othIsDefined && valIsReflexive) ||\n        !othIsReflexive) {\n      return -1;\n    }\n  }\n  return 0;\n}\n\nexport default compareAscending;\n","import compareAscending from './_compareAscending.js';\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n  var index = -1,\n      objCriteria = object.criteria,\n      othCriteria = other.criteria,\n      length = objCriteria.length,\n      ordersLength = orders.length;\n\n  while (++index < length) {\n    var result = compareAscending(objCriteria[index], othCriteria[index]);\n    if (result) {\n      if (index >= ordersLength) {\n        return result;\n      }\n      var order = orders[index];\n      return result * (order == 'desc' ? -1 : 1);\n    }\n  }\n  // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n  // that causes it, under certain circumstances, to provide the same value for\n  // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n  // for more details.\n  //\n  // This also ensures a stable sort in V8 and other engines.\n  // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n  return object.index - other.index;\n}\n\nexport default compareMultiple;\n","import arrayMap from './_arrayMap.js';\nimport baseGet from './_baseGet.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport baseSortBy from './_baseSortBy.js';\nimport baseUnary from './_baseUnary.js';\nimport compareMultiple from './_compareMultiple.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n  if (iteratees.length) {\n    iteratees = arrayMap(iteratees, function(iteratee) {\n      if (isArray(iteratee)) {\n        return function(value) {\n          return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n        };\n      }\n      return iteratee;\n    });\n  } else {\n    iteratees = [identity];\n  }\n\n  var index = -1;\n  iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\n\n  var result = baseMap(collection, function(value, key, collection) {\n    var criteria = arrayMap(iteratees, function(iteratee) {\n      return iteratee(value);\n    });\n    return { 'criteria': criteria, 'index': ++index, 'value': value };\n  });\n\n  return baseSortBy(result, function(object, other) {\n    return compareMultiple(object, other, orders);\n  });\n}\n\nexport default baseOrderBy;\n","import baseOrderBy from './_baseOrderBy.js';\nimport isArray from './isArray.js';\n\n/**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n *  The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n *   { 'user': 'fred',   'age': 48 },\n *   { 'user': 'barney', 'age': 34 },\n *   { 'user': 'fred',   'age': 40 },\n *   { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\nfunction orderBy(collection, iteratees, orders, guard) {\n  if (collection == null) {\n    return [];\n  }\n  if (!isArray(iteratees)) {\n    iteratees = iteratees == null ? [] : [iteratees];\n  }\n  orders = guard ? undefined : orders;\n  if (!isArray(orders)) {\n    orders = orders == null ? [] : [orders];\n  }\n  return baseOrderBy(collection, iteratees, orders);\n}\n\nexport default orderBy;\n","import createAggregator from './_createAggregator.js';\n\n/**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'age': 36, 'active': false },\n *   { 'user': 'fred',    'age': 40, 'active': true },\n *   { 'user': 'pebbles', 'age': 1,  'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\nvar partition = createAggregator(function(result, value, key) {\n  result[key ? 0 : 1].push(value);\n}, function() { return [[], []]; });\n\nexport default partition;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeFloor = Math.floor,\n    nativeRandom = Math.random;\n\n/**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\nfunction baseRandom(lower, upper) {\n  return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n}\n\nexport default baseRandom;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n    nativeMax = Math.max;\n\n/**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n  var index = -1,\n      length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n      result = Array(length);\n\n  while (length--) {\n    result[fromRight ? length : ++index] = start;\n    start += step;\n  }\n  return result;\n}\n\nexport default baseRange;\n","import baseRange from './_baseRange.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport toFinite from './toFinite.js';\n\n/**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\nfunction createRange(fromRight) {\n  return function(start, end, step) {\n    if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n      end = step = undefined;\n    }\n    // Ensure the sign of `-0` is preserved.\n    start = toFinite(start);\n    if (end === undefined) {\n      end = start;\n      start = 0;\n    } else {\n      end = toFinite(end);\n    }\n    step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n    return baseRange(start, end, step, fromRight);\n  };\n}\n\nexport default createRange;\n","import createRange from './_createRange.js';\n\n/**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\nvar range = createRange();\n\nexport default range;\n","import createRound from './_createRound.js';\n\n/**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\nvar round = createRound('round');\n\nexport default round;\n","import baseRandom from './_baseRandom.js';\n\n/**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\nfunction shuffleSelf(array, size) {\n  var index = -1,\n      length = array.length,\n      lastIndex = length - 1;\n\n  size = size === undefined ? length : size;\n  while (++index < size) {\n    var rand = baseRandom(index, lastIndex),\n        value = array[rand];\n\n    array[rand] = array[index];\n    array[index] = value;\n  }\n  array.length = size;\n  return array;\n}\n\nexport default shuffleSelf;\n","import copyArray from './_copyArray.js';\nimport shuffleSelf from './_shuffleSelf.js';\n\n/**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\nfunction arrayShuffle(array) {\n  return shuffleSelf(copyArray(array));\n}\n\nexport default arrayShuffle;\n","import shuffleSelf from './_shuffleSelf.js';\nimport values from './values.js';\n\n/**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\nfunction baseShuffle(collection) {\n  return shuffleSelf(values(collection));\n}\n\nexport default baseShuffle;\n","import arrayShuffle from './_arrayShuffle.js';\nimport baseShuffle from './_baseShuffle.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\nfunction shuffle(collection) {\n  var func = isArray(collection) ? arrayShuffle : baseShuffle;\n  return func(collection);\n}\n\nexport default shuffle;\n","import baseEach from './_baseEach.js';\n\n/**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction baseSome(collection, predicate) {\n  var result;\n\n  baseEach(collection, function(value, index, collection) {\n    result = predicate(value, index, collection);\n    return !result;\n  });\n  return !!result;\n}\n\nexport default baseSome;\n","import arraySome from './_arraySome.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseSome from './_baseSome.js';\nimport isArray from './isArray.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n *   { 'user': 'barney', 'active': true },\n *   { 'user': 'fred',   'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\nfunction some(collection, predicate, guard) {\n  var func = isArray(collection) ? arraySome : baseSome;\n  if (guard && isIterateeCall(collection, predicate, guard)) {\n    predicate = undefined;\n  }\n  return func(collection, baseIteratee(predicate, 3));\n}\n\nexport default some;\n","import baseFlatten from './_baseFlatten.js';\nimport baseOrderBy from './_baseOrderBy.js';\nimport baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n *  The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n *   { 'user': 'fred',   'age': 48 },\n *   { 'user': 'barney', 'age': 36 },\n *   { 'user': 'fred',   'age': 30 },\n *   { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n  if (collection == null) {\n    return [];\n  }\n  var length = iteratees.length;\n  if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n    iteratees = [];\n  } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n    iteratees = [iteratees[0]];\n  }\n  return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nexport default sortBy;\n","import eq from './eq.js';\n\n/**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseSortedUniq(array, iteratee) {\n  var index = -1,\n      length = array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index],\n        computed = iteratee ? iteratee(value) : value;\n\n    if (!index || !eq(computed, seen)) {\n      var seen = computed;\n      result[resIndex++] = value === 0 ? 0 : value;\n    }\n  }\n  return result;\n}\n\nexport default baseSortedUniq;\n","import baseSortedUniq from './_baseSortedUniq.js';\n\n/**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\nfunction sortedUniq(array) {\n  return (array && array.length)\n    ? baseSortedUniq(array)\n    : [];\n}\n\nexport default sortedUniq;\n","import baseIteratee from './_baseIteratee.js';\nimport baseSortedUniq from './_baseSortedUniq.js';\n\n/**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\nfunction sortedUniqBy(array, iteratee) {\n  return (array && array.length)\n    ? baseSortedUniq(array, baseIteratee(iteratee, 2))\n    : [];\n}\n\nexport default sortedUniqBy;\n","import baseSum from './_baseSum.js';\nimport identity from './identity.js';\n\n/**\n * Computes the sum of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the sum.\n * @example\n *\n * _.sum([4, 2, 8, 6]);\n * // => 20\n */\nfunction sum(array) {\n  return (array && array.length)\n    ? baseSum(array, identity)\n    : 0;\n}\n\nexport default sum;\n","import baseIteratee from './_baseIteratee.js';\nimport baseSum from './_baseSum.js';\n\n/**\n * This method is like `_.sum` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be summed.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the sum.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.sumBy(objects, function(o) { return o.n; });\n * // => 20\n *\n * // The `_.property` iteratee shorthand.\n * _.sumBy(objects, 'n');\n * // => 20\n */\nfunction sumBy(array, iteratee) {\n  return (array && array.length)\n    ? baseSum(array, baseIteratee(iteratee, 2))\n    : 0;\n}\n\nexport default sumBy;\n","import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n *  Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n  var leading = true,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  if (isObject(options)) {\n    leading = 'leading' in options ? !!options.leading : leading;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n  return debounce(func, wait, {\n    'leading': leading,\n    'maxWait': wait,\n    'trailing': trailing\n  });\n}\n\nexport default throttle;\n","import Set from './_Set.js';\nimport noop from './noop.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n  return new Set(values);\n};\n\nexport default createSet;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport cacheHas from './_cacheHas.js';\nimport createSet from './_createSet.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n  var index = -1,\n      includes = arrayIncludes,\n      length = array.length,\n      isCommon = true,\n      result = [],\n      seen = result;\n\n  if (comparator) {\n    isCommon = false;\n    includes = arrayIncludesWith;\n  }\n  else if (length >= LARGE_ARRAY_SIZE) {\n    var set = iteratee ? null : createSet(array);\n    if (set) {\n      return setToArray(set);\n    }\n    isCommon = false;\n    includes = cacheHas;\n    seen = new SetCache;\n  }\n  else {\n    seen = iteratee ? [] : result;\n  }\n  outer:\n  while (++index < length) {\n    var value = array[index],\n        computed = iteratee ? iteratee(value) : value;\n\n    value = (comparator || value !== 0) ? value : 0;\n    if (isCommon && computed === computed) {\n      var seenIndex = seen.length;\n      while (seenIndex--) {\n        if (seen[seenIndex] === computed) {\n          continue outer;\n        }\n      }\n      if (iteratee) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n    else if (!includes(seen, computed, comparator)) {\n      if (seen !== result) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n  }\n  return result;\n}\n\nexport default baseUniq;\n","import baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport baseUniq from './_baseUniq.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\nvar union = baseRest(function(arrays) {\n  return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n});\n\nexport default union;\n","import baseUniq from './_baseUniq.js';\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n  return (array && array.length) ? baseUniq(array) : [];\n}\n\nexport default uniq;\n","import baseIteratee from './_baseIteratee.js';\nimport baseUniq from './_baseUniq.js';\n\n/**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\nfunction uniqBy(array, iteratee) {\n  return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : [];\n}\n\nexport default uniqBy;\n","import baseUniq from './_baseUniq.js';\n\n/**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\nfunction uniqWith(array, comparator) {\n  comparator = typeof comparator == 'function' ? comparator : undefined;\n  return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n}\n\nexport default uniqWith;\n","import arrayFilter from './_arrayFilter.js';\nimport arrayMap from './_arrayMap.js';\nimport baseProperty from './_baseProperty.js';\nimport baseTimes from './_baseTimes.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\nfunction unzip(array) {\n  if (!(array && array.length)) {\n    return [];\n  }\n  var length = 0;\n  array = arrayFilter(array, function(group) {\n    if (isArrayLikeObject(group)) {\n      length = nativeMax(group.length, length);\n      return true;\n    }\n  });\n  return baseTimes(length, function(index) {\n    return arrayMap(array, baseProperty(index));\n  });\n}\n\nexport default unzip;\n","import baseDifference from './_baseDifference.js';\nimport baseRest from './_baseRest.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\nvar without = baseRest(function(array, values) {\n  return isArrayLikeObject(array)\n    ? baseDifference(array, values)\n    : [];\n});\n\nexport default without;\n","import baseRest from './_baseRest.js';\nimport unzip from './unzip.js';\n\n/**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\nvar zip = baseRest(unzip);\n\nexport default zip;\n","const e=(e,t)=>t.length===1?n=>e(n,t[0]):n=>e(n,...t);export{e as t};\n//# sourceMappingURL=dataLastImplementation-D-BXl-Tn.js.map","import{t as e}from\"./dataLastImplementation-D-BXl-Tn.js\";const t=(t,n)=>n.length>=t.length?t(...n):e(t,n);export{t as purry};\n//# sourceMappingURL=purry.js.map","const e=e=>(n,r)=>{if(r===0)return e(n);if(Math.abs(r)>15)throw RangeError(`precision must be between -15 and 15`);if(!Number.isSafeInteger(r))throw TypeError(`precision must be an integer: ${r.toString()}`);return Number.isNaN(n)||!Number.isFinite(n)?e(n):t(e(t(n,r)),-r)};function t(e,t){let[n,r]=e.toString().split(`e`,2),i=`${n}e${((r===void 0?0:Number(r))+t).toString()}`;return Number(i)}export{e as t};\n//# sourceMappingURL=withPrecision-DXRugSn5.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}function n(e,t){if(t<1)throw RangeError(`chunk: A chunk size of '${t.toString()}' would result in an infinite array`);if(e.length===0)return[];if(t>=e.length)return[[...e]];let n=Math.ceil(e.length/t),r=Array(n);if(t===1)for(let[t,n]of e.entries())r[t]=[n];else for(let i=0;i<n;i+=1){let n=i*t;r[i]=e.slice(n,n+t)}return r}export{t as chunk};\n//# sourceMappingURL=chunk.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}const n=(e,{min:t,max:n})=>t!==void 0&&e<t?t:n!==void 0&&e>n?n:e;export{t as clamp};\n//# sourceMappingURL=clamp.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}const n=(e,t)=>[...e,...t];export{t as concat};\n//# sourceMappingURL=concat.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}const n=(e,t)=>{let n=new Map;for(let[r,i]of e.entries()){let a=t(i,r,e);if(a!==void 0){let e=n.get(a);e===void 0?n.set(a,1):n.set(a,e+1)}}return Object.fromEntries(n)};export{t as countBy};\n//# sourceMappingURL=countBy.js.map","const e=Symbol.for(`remeda/lazy/skip`),t=Symbol.for(`remeda/lazy/stop`),n=Symbol.for(`remeda/lazy/last`),r=Symbol.for(`remeda/lazy/many`),i=[],a=()=>({value:void 0,values:i}),o=()=>t;function s(e,t){return t.value=e,n}function c(e,t){return t.values=e,r}export{a,c,t as i,r as n,s as o,e as r,o as s,n as t};\n//# sourceMappingURL=lazyControl-BA0LgJso.js.map","import{t as e}from\"./dataLastImplementation-D-BXl-Tn.js\";function t(t,n,r){let i=e(t,n);return i.lazy=r,i.lazyArgs=n,i}export{t};\n//# sourceMappingURL=lazyDataLastImplementation-DFviQKyZ.js.map","import{t as e}from\"./lazyDataLastImplementation-DFviQKyZ.js\";const t=(t,n,r)=>n.length>=t.length?t(...n):e(t,n,r);export{t};\n//# sourceMappingURL=purryWithLazy-CKUoTFu0.js.map","import{r as e}from\"./lazyControl-BA0LgJso.js\";import{t}from\"./purryWithLazy-CKUoTFu0.js\";function n(...e){return t(r,e,i)}function r(e,t){let n=new Map;for(let e of t)n.set(e,(n.get(e)??0)+1);let r=[];for(let t of e){let e=n.get(t);e===void 0||e===0?r.push(t):n.set(t,e-1)}return r}function i(t){if(t.length===0)return e=>e;let n=new Map;for(let e of t)n.set(e,(n.get(e)??0)+1);return t=>{let r=n.get(t);return r===void 0||r===0?t:(n.set(t,r-1),e)}}export{n as difference};\n//# sourceMappingURL=difference.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}const n=(e,t)=>e.length>=t;export{t as hasAtLeast};\n//# sourceMappingURL=hasAtLeast.js.map","function e(e,t,n){[e[t],e[n]]=[e[n],e[t]]}export{e as t};\n//# sourceMappingURL=swapInPlace-ubtnp8en.js.map","import{hasAtLeast as e}from\"./hasAtLeast.js\";import{t}from\"./swapInPlace-ubtnp8en.js\";function n(e,t){for(let n=Math.floor(e.length/2)-1;n>=0;n--)i(e,n,t)}function r(t,n,r){if(!e(t,1))return;let[a]=t;if(!(n(r,a)>=0))return t[0]=r,i(t,0,n),a}function i(e,n,r){let i=n;for(;i*2+1<e.length;){let n=i*2+1,a=r(e[i],e[n])<0?n:i,o=n+1;if(o<e.length&&r(e[a],e[o])<0&&(a=o),a===i)return;t(e,i,a),i=a}}export{n,r as t};\n//# sourceMappingURL=heap-DX5LMcnX.js.map","const e={asc:(e,t)=>e>t,desc:(e,t)=>e<t};function t(e,t){let[n,...a]=t;if(!i(n))return e(n,r(...a));let o=r(n,...a);return t=>e(t,o)}function n(e,[n,r,...a]){let o,s;return i(r)?(o=n,s=[r,...a]):(o=r,s=[n,...a]),t((...t)=>e(...t,o),s)}function r(t,n,...i){let a=typeof t==`function`?t:t[0],o=typeof t==`function`?`asc`:t[1],s=e[o],c=n===void 0?void 0:r(n,...i);return(e,t)=>{let n=a(e),r=a(t);return s(n,r)?1:s(r,n)?-1:c?.(e,t)??0}}function i(t){if(a(t))return!0;if(typeof t!=`object`||!Array.isArray(t))return!1;let[n,r,...i]=t;return a(n)&&typeof r==`string`&&Object.hasOwn(e,r)&&i.length===0}const a=e=>typeof e==`function`&&e.length<=1;export{n,t};\n//# sourceMappingURL=purryOrderRules-DEtRe7zN.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}const n=(e,t)=>t>0?e.slice(0,Math.max(0,e.length-t)):[...e];export{t as dropLast};\n//# sourceMappingURL=dropLast.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}function n(e,t){for(let n=e.length-1;n>=0;n--)if(!t(e[n],n,e))return e.slice(0,n+1);return[]}export{t as dropLastWhile};\n//# sourceMappingURL=dropLastWhile.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}function n(e,t){for(let[n,r]of e.entries())if(!t(r,n,e))return e.slice(n);return[]}export{t as dropWhile};\n//# sourceMappingURL=dropWhile.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(Object.entries,t)}export{t as entries};\n//# sourceMappingURL=entries.js.map","const e=e=>(e.requiresData=!0,e),t=(t,r,{dataParameterIndex:i=2}={})=>n(t,i)?e(r):r,n=({length:e},t=2)=>e===0||e>t;export{e as n,t as r,n as t};\n//# sourceMappingURL=requireData-CnnPAgxf.js.map","import{r as e}from\"./lazyControl-BA0LgJso.js\";import{t}from\"./purryWithLazy-CKUoTFu0.js\";import{r as n}from\"./requireData-CnnPAgxf.js\";function r(...e){return t(i,e,a)}const i=(e,t)=>e.filter(t),a=t=>n(t,(n,r,i)=>t(n,r,i)?n:e);export{r as filter};\n//# sourceMappingURL=filter.js.map","const e=e=>Object.assign(e,{single:!0});export{e as t};\n//# sourceMappingURL=toSingle-DiQSixar.js.map","import{o as e}from\"./lazyControl-BA0LgJso.js\";import{t}from\"./purryWithLazy-CKUoTFu0.js\";import{t as n}from\"./toSingle-DiQSixar.js\";function r(...e){return t(i,e,a)}const i=([e])=>e,a=n(()=>o),o=(t,n,r,i)=>e(t,i);export{r as first};\n//# sourceMappingURL=first.js.map","import{hasAtLeast as e}from\"./hasAtLeast.js\";import{t}from\"./purryOrderRules-DEtRe7zN.js\";function n(...e){return t(r,e)}function r(t,n){if(!e(t,2))return t[0];let[r]=t,[,...i]=t;for(let e of i)n(e,r)<0&&(r=e);return r}export{n as firstBy};\n//# sourceMappingURL=firstBy.js.map","import{c as e}from\"./lazyControl-BA0LgJso.js\";import{t}from\"./purryWithLazy-CKUoTFu0.js\";import{r as n}from\"./requireData-CnnPAgxf.js\";function r(...e){return t(i,e,a)}const i=(e,t)=>e.flatMap(t),a=t=>n(t,(n,r,i,a)=>{let o=t(n,r,i);return Array.isArray(o)?e(o,a):o});export{r as flatMap};\n//# sourceMappingURL=flatMap.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}const n=(e,t)=>{let n=Object.create(null);for(let r=0;r<e.length;r++){let i=e[r],a=t(i,r,e);if(a!==void 0){let e=n[a];e===void 0?n[a]=[i]:e.push(i)}}return Object.setPrototypeOf(n,Object.prototype),n};export{t as groupBy};\n//# sourceMappingURL=groupBy.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}function n(e,t){if(e===t||Object.is(e,t))return!0;if(typeof e!=`object`||typeof t!=`object`||e===null||t===null||!r(e,t))return!1;if(Array.isArray(e))return i(e,t);if(e instanceof Map)return a(e,t);if(e instanceof Set)return o(e,t);if(e instanceof Date)return e.getTime()===t.getTime();if(e instanceof RegExp)return e.toString()===t.toString();if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let[r,i]of Object.entries(e))if(!Object.hasOwn(t,r)||!n(i,t[r]))return!1;return!0}function r(e,t){let n=Object.getPrototypeOf(e),r=Object.getPrototypeOf(t);return n===r?!0:n===null?r===Object.prototype:n===Object.prototype&&r===null}function i(e,t){if(e.length!==t.length)return!1;for(let[r,i]of e.entries())if(!n(i,t[r]))return!1;return!0}function a(e,t){if(e.size!==t.size)return!1;for(let[r,i]of e)if(!t.has(r)||!n(i,t.get(r)))return!1;return!0}function o(e,t){if(e.size!==t.size)return!1;let r=[...t];for(let t of e){let e=r.findIndex(e=>n(t,e));if(e===-1)return!1;r.splice(e,1)}return!0}export{t as isDeepEqual};\n//# sourceMappingURL=isDeepEqual.js.map","function e(){return t}const t=e=>e;export{e as identity};\n//# sourceMappingURL=identity.js.map","import{o as e,r as t,s as n}from\"./lazyControl-BA0LgJso.js\";import{t as r}from\"./purryWithLazy-CKUoTFu0.js\";function i(...e){return r(a,e,o)}function a(e,t){let n=new Map;for(let e of t)n.set(e,(n.get(e)??0)+1);let r=[];for(let t of e){if(n.size===0)return r;let e=n.get(t);e!==void 0&&(r.push(t),e===1?n.delete(t):n.set(t,e-1))}return r}function o(r){if(r.length===0)return n;let i=new Map;for(let e of r)i.set(e,(i.get(e)??0)+1);return(n,r,a,o)=>{let s=i.get(n);return s===void 0?t:(s===1?i.delete(n):i.set(n,s-1),i.size===0?e(n,o):n)}}export{i as intersection};\n//# sourceMappingURL=intersection.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}function n(e){let t={};for(let[n,r]of Object.entries(e))t[r]=n;return t}export{t as invert};\n//# sourceMappingURL=invert.js.map","function e(e){return e!==void 0}export{e as isDefined};\n//# sourceMappingURL=isDefined.js.map","function e(e){return e===``||e===void 0?!0:Array.isArray(e)?e.length===0:Object.keys(e).length===0}export{e as isEmpty};\n//# sourceMappingURL=isEmpty.js.map","function e(e){return typeof e==`number`&&!Number.isNaN(e)}export{e as isNumber};\n//# sourceMappingURL=isNumber.js.map","function e(e){if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype}export{e as isPlainObject};\n//# sourceMappingURL=isPlainObject.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}function n(e,t){if(e===t||Object.is(e,t))return!0;if(typeof e!=`object`||!e||typeof t!=`object`||!t)return!1;if(e instanceof Map&&t instanceof Map)return r(e,t);if(e instanceof Set&&t instanceof Set)return i(e,t);let n=Object.keys(e);if(n.length!==Object.keys(t).length)return!1;for(let r of n){if(!Object.hasOwn(t,r))return!1;let n=e[r],i=t[r];if(n!==i&&!Object.is(n,i))return!1}return!0}function r(e,t){if(e.size!==t.size)return!1;for(let[n,r]of e){let e=t.get(n);if(r!==e&&!Object.is(r,e))return!1}return!0}function i(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}export{t as isShallowEqual};\n//# sourceMappingURL=isShallowEqual.js.map","function e(e){return typeof e==`string`}export{e as isString};\n//# sourceMappingURL=isString.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}const n=e=>e.at(-1);export{t as last};\n//# sourceMappingURL=last.js.map","import{t as e}from\"./purryWithLazy-CKUoTFu0.js\";import{n as t,t as n}from\"./requireData-CnnPAgxf.js\";function r(...t){return e(i,t,a)}const i=(e,t)=>e.map(t),a=e=>n(e)?t((t,n,r)=>e(t,n,r)):e;export{r as map};\n//# sourceMappingURL=map.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}function n(e){let t=typeof e[0]==`bigint`?0n:0;for(let n of e)t+=n;return t}export{t as sum};\n//# sourceMappingURL=sum.js.map","import{purry as e}from\"./purry.js\";import{hasAtLeast as t}from\"./hasAtLeast.js\";function n(...t){return e(r,t)}function r(e,n){if(!t(n,1))return{...e};if(!t(n,2)){let{[n[0]]:t,...r}=e;return r}let r={...e};for(let e of n)delete r[e];return r}export{n as omit};\n//# sourceMappingURL=omit.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}function n(e,t){let n={...e};for(let[r,i]of Object.entries(n))t(i,r,e)&&delete n[r];return n}export{t as omitBy};\n//# sourceMappingURL=omitBy.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}const n=(e,t)=>{let n=[[],[]];for(let[r,i]of e.entries())t(i,r,e)?n[0].push(i):n[1].push(i);return n};export{t as partition};\n//# sourceMappingURL=partition.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}function n(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}export{t as pick};\n//# sourceMappingURL=pick.js.map","import{a as e,i as t,n,r,t as i}from\"./lazyControl-BA0LgJso.js\";const a=\"Remeda: unexpected access to a callback's `data` argument during lazy evaluation.\",o=/^(?:0|[1-9]\\d*)$/u,s=new Proxy([{error:a}],{get:c,getOwnPropertyDescriptor:c,has:c,ownKeys:l,defineProperty:l,deleteProperty:l,preventExtensions:l,set:l,setPrototypeOf:l});function c(e,t){(t in Array.prototype||o.test(String(t)))&&l()}function l(){throw Error(a)}function u(t,n,r){let i=n(...r),a=i.requiresData?[]:void 0,o=a??s,c=e(),l=[],u=0;if(Array.isArray(t))for(let e of t){a?.push(e);let t=d(i(e,u,o,c),l,c);if(u+=1,t)break}else for(let e of t){a?.push(e);let t=d(i(e,u,o,c),l,c);if(u+=1,t)break}return n.single?l[0]:l}function d(e,a,o){if(typeof e==`symbol`){if(e===r)return!1;if(e===n){for(let e of o.values)a.push(e);return!1}if(e===i)return a.push(o.value),!0;if(e===t)return!0}return a.push(e),!1}function f(e,...t){if(t.length===0)return e;if(t.length===1){let n=t[0];return`lazy`in n?u(e,n.lazy,n.lazyArgs):n(e)}let n=e,r=0;for(;r<t.length;){let e=t[r];if(!(`lazy`in e)){n=e(n),r+=1;continue}let i=t[r+1];if(i===void 0||!(`lazy`in i)||e.lazy.single){n=u(n,e.lazy,e.lazyArgs),r+=1;continue}let a=p(t,r);n=m(n,a),r+=a.length,t[r-1].lazy.single&&(n=n[0])}return n}function p(e,t){let n=[];for(let r=t;r<e.length;r++){let t=e[r];if(!(`lazy`in t))break;let i=t.lazy(...t.lazyArgs);if(n.push(i.requiresData?{lazyEvaluator:i,index:0,requiresData:!0,items:[]}:{lazyEvaluator:i,index:0,requiresData:!1,items:s}),t.lazy.single)break}return n}function m(t,n){let r=[],i=e();if(Array.isArray(t)){for(let e of t)if(h(n,r,e,i,0))break}else for(let e of t)if(h(n,r,e,i,0))break;return r}function h(e,a,o,s,c){let l=o,u=!1;for(let o=c;o<e.length;o++){let c=e[o];c.requiresData&&c.items.push(l);let{lazyEvaluator:d}=c,f=d(l,c.index,c.items,s);if(c.index+=1,typeof f==`symbol`){if(f===r)return u;if(f===n){for(let t of s.values)if(h(e,a,t,s,o+1))return!0;return u}if(f===i){l=s.value,u=!0;continue}if(f===t)return!0}l=f}return a.push(l),u}export{f as t};\n//# sourceMappingURL=pipe-D-eT-Ko7.js.map","function e(e,...n){return typeof e==`string`||typeof e==`number`||typeof e==`symbol`?r=>t(r,e,...n):t(e,...n)}function t(e,...t){let n=e;for(let e of t){if(n==null)return;n=n[e]}return n}export{e as prop};\n//# sourceMappingURL=prop.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}function n(e,t){let n=typeof t==`object`?t.step:1;if(n===0)throw RangeError(`range: step cannot be zero (0)!`);let i=r(((typeof t==`object`?t.end:t)-e)/n);return i<=0?[]:Array.from({length:i},(t,r)=>r===0?e:e+r*n)}function r(e){if(e===0)return 0;let t=Math.round(e);return Math.abs(e-t)/Math.abs(e)<1e-12?t:Math.ceil(e)}export{t as range};\n//# sourceMappingURL=range.js.map","import{purry as e}from\"./purry.js\";import{t}from\"./withPrecision-DXRugSn5.js\";function n(...n){return e(t(Math.round),n)}export{n as round};\n//# sourceMappingURL=round.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}function n(e,t){if(t<=0)return[];if(t>=e.length)return[...e];let n=Math.min(t,e.length-t),r=new Set;for(;r.size<n;){let t=Math.floor(Math.random()*e.length);r.add(t)}return t===n?[...r].sort((e,t)=>e-t).map(t=>e[t]):e.filter((e,t)=>!r.has(t))}export{t as sample};\n//# sourceMappingURL=sample.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}function n(e,t){let n=[...e];return n.sort(t),n}export{t as sort};\n//# sourceMappingURL=sort.js.map","import{t as e}from\"./purryOrderRules-DEtRe7zN.js\";function t(...t){return e(n,t)}const n=(e,t)=>[...e].sort(t);export{t as sortBy};\n//# sourceMappingURL=sortBy.js.map","function e(e,t){let n=0,r=e.length;for(;n<r;){let i=n+r>>>1,a=e[i];t(a,i,e)?n=i+1:r=i}return r}export{e as t};\n//# sourceMappingURL=binarySearchCutoffIndex-CRPy-dOJ.js.map","import{purry as e}from\"./purry.js\";import{t}from\"./binarySearchCutoffIndex-CRPy-dOJ.js\";function n(...t){return e(r,t)}const r=(e,n)=>t(e,e=>e<n);export{n as sortedIndex};\n//# sourceMappingURL=sortedIndex.js.map","import{purry as e}from\"./purry.js\";import{t}from\"./binarySearchCutoffIndex-CRPy-dOJ.js\";function n(...t){return e(r,t)}function r(e,n,r){let i=r(n,void 0,e);return t(e,(t,n)=>r(t,n,e)<i)}export{n as sortedIndexBy};\n//# sourceMappingURL=sortedIndexBy.js.map","import{purry as e}from\"./purry.js\";import{t}from\"./binarySearchCutoffIndex-CRPy-dOJ.js\";function n(...n){return e(t,n)}export{n as sortedIndexWith};\n//# sourceMappingURL=sortedIndexWith.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}const n=(e,t)=>{let n=e.entries(),r=n.next();if(`done`in r&&r.done)return 0;let{value:i}=r,a=t(i[1],0,e);for(let[r,i]of n){let n=t(i,r,e);a+=n}return a};export{t as sumBy};\n//# sourceMappingURL=sumBy.js.map","import{o as e,s as t}from\"./lazyControl-BA0LgJso.js\";import{t as n}from\"./purryWithLazy-CKUoTFu0.js\";function r(...e){return n(i,e,a)}const i=(e,t)=>t<0?[]:e.slice(0,t);function a(n){if(n<=0)return t;let r=n;return(t,n,i,a)=>(--r,r<=0?e(t,a):t)}export{r as take};\n//# sourceMappingURL=take.js.map","import{n as e,t}from\"./heap-DX5LMcnX.js\";import{n}from\"./purryOrderRules-DEtRe7zN.js\";function r(...e){return n(i,e)}function i(n,r,i){if(i<=0)return[];if(i>=n.length)return[...n];let a=n.slice(0,i);e(a,r);let o=n.slice(i);for(let e of o)t(a,r,e);return a}export{r as takeFirstBy};\n//# sourceMappingURL=takeFirstBy.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}function n(e,t){let n=[];for(let[r,i]of e.entries()){if(!t(i,r,e))break;n.push(i)}return n}export{t as takeWhile};\n//# sourceMappingURL=takeWhile.js.map","import{r as e}from\"./lazyControl-BA0LgJso.js\";import{t}from\"./purryWithLazy-CKUoTFu0.js\";function n(...e){return t(r,e,i)}function r(e){let t=new Set,n=[];for(let r of e){let e=t.size;t.add(r),t.size>e&&n.push(r)}return n}function i(){let t=new Set;return n=>{let r=t.size;return t.add(n),t.size===r?e:n}}export{n as unique};\n//# sourceMappingURL=unique.js.map","import{r as e}from\"./lazyControl-BA0LgJso.js\";import{t}from\"./purryWithLazy-CKUoTFu0.js\";import{r as n}from\"./requireData-CnnPAgxf.js\";function r(...e){return t(i,e,a)}function i(e,t){let n=new Set,r=[],i=0;for(let a of e){let o=t(a,i,e),s=n.size;n.add(o),n.size>s&&r.push(a),i+=1}return r}function a(t){let r=new Set;return n(t,(n,i,a)=>{let o=t(n,i,a),s=r.size;return r.add(o),r.size===s?e:n})}export{r as uniqueBy};\n//# sourceMappingURL=uniqueBy.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(Object.values,t)}export{t as values};\n//# sourceMappingURL=values.js.map","import{o as e,s as t}from\"./lazyControl-BA0LgJso.js\";import{t as n}from\"./purryWithLazy-CKUoTFu0.js\";function r(...e){return n(i,e,a)}const i=(e,t)=>e.length<t.length?e.map((e,n)=>[e,t[n]]):t.map((t,n)=>[e[n],t]),a=n=>n.length===0?t:(t,r,i,a)=>{let o=[t,n[r]];return r>=n.length-1?e(o,a):o};export{r as zip};\n//# sourceMappingURL=zip.js.map","export default function ascending(a, b) {\n  return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n  return a == null || b == null ? NaN\n    : b < a ? -1\n    : b > a ? 1\n    : b >= a ? 0\n    : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n  let compare1, compare2, delta;\n\n  // If an accessor is specified, promote it to a comparator. In this case we\n  // can test whether the search value is (self-) comparable. We can’t do this\n  // for a comparator (except for specific, known comparators) because we can’t\n  // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n  // used to test whether a single value is comparable.\n  if (f.length !== 2) {\n    compare1 = ascending;\n    compare2 = (d, x) => ascending(f(d), x);\n    delta = (d, x) => f(d) - x;\n  } else {\n    compare1 = f === ascending || f === descending ? f : zero;\n    compare2 = f;\n    delta = f;\n  }\n\n  function left(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function right(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) <= 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function center(a, x, lo = 0, hi = a.length) {\n    const i = left(a, x, lo, hi - 1);\n    return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n  }\n\n  return {left, center, right};\n}\n\nfunction zero() {\n  return 0;\n}\n","export default function number(x) {\n  return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export default function extent(values, valueof) {\n  let min;\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  }\n  return [min, max];\n}\n","// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n  constructor() {\n    this._partials = new Float64Array(32);\n    this._n = 0;\n  }\n  add(x) {\n    const p = this._partials;\n    let i = 0;\n    for (let j = 0; j < this._n && j < 32; j++) {\n      const y = p[j],\n        hi = x + y,\n        lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n      if (lo) p[i++] = lo;\n      x = hi;\n    }\n    p[i] = x;\n    this._n = i + 1;\n    return this;\n  }\n  valueOf() {\n    const p = this._partials;\n    let n = this._n, x, y, lo, hi = 0;\n    if (n > 0) {\n      hi = p[--n];\n      while (n > 0) {\n        x = hi;\n        y = p[--n];\n        hi = x + y;\n        lo = y - (hi - x);\n        if (lo) break;\n      }\n      if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n        y = lo * 2;\n        x = hi + y;\n        if (y == x - hi) hi = x;\n      }\n    }\n    return hi;\n  }\n}\n\nexport function fsum(values, valueof) {\n  const adder = new Adder();\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value = +value) {\n        adder.add(value);\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if (value = +valueof(value, ++index, values)) {\n        adder.add(value);\n      }\n    }\n  }\n  return +adder;\n}\n\nexport function fcumsum(values, valueof) {\n  const adder = new Adder();\n  let index = -1;\n  return Float64Array.from(values, valueof === undefined\n      ? v => adder.add(+v || 0)\n      : v => adder.add(+valueof(v, ++index, values) || 0)\n  );\n}\n","export class InternMap extends Map {\n  constructor(entries, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (entries != null) for (const [key, value] of entries) this.set(key, value);\n  }\n  get(key) {\n    return super.get(intern_get(this, key));\n  }\n  has(key) {\n    return super.has(intern_get(this, key));\n  }\n  set(key, value) {\n    return super.set(intern_set(this, key), value);\n  }\n  delete(key) {\n    return super.delete(intern_delete(this, key));\n  }\n}\n\nexport class InternSet extends Set {\n  constructor(values, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (values != null) for (const value of values) this.add(value);\n  }\n  has(value) {\n    return super.has(intern_get(this, value));\n  }\n  add(value) {\n    return super.add(intern_set(this, value));\n  }\n  delete(value) {\n    return super.delete(intern_delete(this, value));\n  }\n}\n\nfunction intern_get({_intern, _key}, value) {\n  const key = _key(value);\n  return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) return _intern.get(key);\n  _intern.set(key, value);\n  return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) {\n    value = _intern.get(key);\n    _intern.delete(key);\n  }\n  return value;\n}\n\nfunction keyof(value) {\n  return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","import ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n  values = Array.from(values);\n  let [f] = F;\n  if ((f && f.length !== 2) || F.length > 1) {\n    const index = Uint32Array.from(values, (d, i) => i);\n    if (F.length > 1) {\n      F = F.map(f => values.map(f));\n      index.sort((i, j) => {\n        for (const f of F) {\n          const c = ascendingDefined(f[i], f[j]);\n          if (c) return c;\n        }\n      });\n    } else {\n      f = values.map(f);\n      index.sort((i, j) => ascendingDefined(f[i], f[j]));\n    }\n    return permute(values, index);\n  }\n  return values.sort(compareDefined(f));\n}\n\nexport function compareDefined(compare = ascending) {\n  if (compare === ascending) return ascendingDefined;\n  if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n  return (a, b) => {\n    const x = compare(a, b);\n    if (x || x === 0) return x;\n    return (compare(b, b) === 0) - (compare(a, a) === 0);\n  };\n}\n\nexport function ascendingDefined(a, b) {\n  return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n","const e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n  const step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log10(step)),\n      error = step / Math.pow(10, power),\n      factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n  let i1, i2, inc;\n  if (power < 0) {\n    inc = Math.pow(10, -power) / factor;\n    i1 = Math.round(start * inc);\n    i2 = Math.round(stop * inc);\n    if (i1 / inc < start) ++i1;\n    if (i2 / inc > stop) --i2;\n    inc = -inc;\n  } else {\n    inc = Math.pow(10, power) * factor;\n    i1 = Math.round(start / inc);\n    i2 = Math.round(stop / inc);\n    if (i1 * inc < start) ++i1;\n    if (i2 * inc > stop) --i2;\n  }\n  if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n  return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  if (!(count > 0)) return [];\n  if (start === stop) return [start];\n  const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n  if (!(i2 >= i1)) return [];\n  const n = i2 - i1 + 1, ticks = new Array(n);\n  if (reverse) {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n  } else {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n  }\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n  return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","export default function max(values, valueof) {\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  }\n  return max;\n}\n","export default function min(values, valueof) {\n  let min;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  }\n  return min;\n}\n","import {ascendingDefined, compareDefined} from \"./sort.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = Infinity, compare) {\n  k = Math.floor(k);\n  left = Math.floor(Math.max(0, left));\n  right = Math.floor(Math.min(array.length - 1, right));\n\n  if (!(left <= k && k <= right)) return array;\n\n  compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n  while (right > left) {\n    if (right - left > 600) {\n      const n = right - left + 1;\n      const m = k - left + 1;\n      const z = Math.log(n);\n      const s = 0.5 * Math.exp(2 * z / 3);\n      const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n      const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n      const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n      quickselect(array, k, newLeft, newRight, compare);\n    }\n\n    const t = array[k];\n    let i = left;\n    let j = right;\n\n    swap(array, left, k);\n    if (compare(array[right], t) > 0) swap(array, left, right);\n\n    while (i < j) {\n      swap(array, i, j), ++i, --j;\n      while (compare(array[i], t) < 0) ++i;\n      while (compare(array[j], t) > 0) --j;\n    }\n\n    if (compare(array[left], t) === 0) swap(array, left, j);\n    else ++j, swap(array, j, right);\n\n    if (j <= k) left = j + 1;\n    if (k <= j) right = j - 1;\n  }\n\n  return array;\n}\n\nfunction swap(array, i, j) {\n  const t = array[i];\n  array[i] = array[j];\n  array[j] = t;\n}\n","import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n  values = Float64Array.from(numbers(values, valueof));\n  if (!(n = values.length) || isNaN(p = +p)) return;\n  if (p <= 0 || n < 2) return min(values);\n  if (p >= 1) return max(values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n      value1 = min(values.subarray(i0 + 1));\n  return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n  if (!(n = values.length) || isNaN(p = +p)) return;\n  if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n  if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = +valueof(values[i0], i0, values),\n      value1 = +valueof(values[i0 + 1], i0 + 1, values);\n  return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof = number) {\n  if (isNaN(p = +p)) return;\n  numbers = Float64Array.from(values, (_, i) => number(valueof(values[i], i, values)));\n  if (p <= 0) return minIndex(numbers);\n  if (p >= 1) return maxIndex(numbers);\n  var numbers,\n      index = Uint32Array.from(values, (_, i) => i),\n      j = numbers.length - 1,\n      i = Math.floor(j * p);\n  quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));\n  i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);\n  return i >= 0 ? i : -1;\n}\n","function* flatten(arrays) {\n  for (const array of arrays) {\n    yield* array;\n  }\n}\n\nexport default function merge(arrays) {\n  return Array.from(flatten(arrays));\n}\n","export default function pairs(values, pairof = pair) {\n  const pairs = [];\n  let previous;\n  let first = false;\n  for (const value of values) {\n    if (first) pairs.push(pairof(previous, value));\n    previous = value;\n    first = true;\n  }\n  return pairs;\n}\n\nexport function pair(a, b) {\n  return [a, b];\n}\n","export default function range(start, stop, step) {\n  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n  var i = -1,\n      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n      range = new Array(n);\n\n  while (++i < n) {\n    range[i] = start + i * step;\n  }\n\n  return range;\n}\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|YYYY|YY|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),Y=_.prototype;return O.prototype=Y,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){Y[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d/,r=/\\d\\d/,i=/\\d\\d?/,o=/\\d*[^-_:/,()\\s\\d]+/,s={},a=function(e){return(e=+e)+(e>68?1900:2e3)};var f=function(e){return function(t){this[e]=+t}},h=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],u=function(e){var t=s[e];return t&&(t.indexOf?t:t.s.concat(t.f))},d=function(e,t){var n,r=s.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},c={A:[o,function(e){this.afternoon=d(e,!1)}],a:[o,function(e){this.afternoon=d(e,!0)}],Q:[n,function(e){this.month=3*(e-1)+1}],S:[n,function(e){this.milliseconds=100*+e}],SS:[r,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[i,f(\"seconds\")],ss:[i,f(\"seconds\")],m:[i,f(\"minutes\")],mm:[i,f(\"minutes\")],H:[i,f(\"hours\")],h:[i,f(\"hours\")],HH:[i,f(\"hours\")],hh:[i,f(\"hours\")],D:[i,f(\"day\")],DD:[r,f(\"day\")],Do:[o,function(e){var t=s.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],w:[i,f(\"week\")],ww:[r,f(\"week\")],M:[i,f(\"month\")],MM:[r,f(\"month\")],MMM:[o,function(e){var t=u(\"months\"),n=(u(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[o,function(e){var t=u(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,f(\"year\")],YY:[r,function(e){this.year=a(e)}],YYYY:[/\\d{4}/,f(\"year\")],Z:h,ZZ:h};function l(n){var r,i;r=n,i=s&&s.formats;for(var o=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=o.length,f=0;f<a;f+=1){var h=o[f],u=c[h],d=u&&u[0],l=u&&u[1];o[f]=l?{regex:d,parser:l}:h.replace(/^\\[|\\]$/g,\"\")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=o[n];if(\"string\"==typeof i)r+=i.length;else{var s=i.regex,f=i.parser,h=e.slice(r),u=s.exec(h)[0];f.call(t,u),e=e.replace(u,\"\")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(a=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,o=e.args;this.$u=r;var a=o[1];if(\"string\"==typeof a){var f=!0===o[2],h=!0===o[3],u=f||h,d=o[2];h&&(d=o[2]),s=this.$locale(),!f&&d&&(s=n.Ls[d]),this.$d=function(e,t,n,r){try{if([\"x\",\"X\"].indexOf(t)>-1)return new Date((\"X\"===t?1e3:1)*e);var i=l(t)(e),o=i.year,s=i.month,a=i.day,f=i.hours,h=i.minutes,u=i.seconds,d=i.milliseconds,c=i.zone,m=i.week,M=new Date,Y=a||(o||s?1:M.getDate()),p=o||M.getFullYear(),v=0;o&&!s||(v=s>0?s-1:M.getMonth());var D,w=f||0,g=h||0,y=u||0,L=d||0;return c?new Date(Date.UTC(p,v,Y,w,g,y,L+60*c.offset*1e3)):n?new Date(Date.UTC(p,v,Y,w,g,y,L)):(D=new Date(p,v,Y,w,g,y,L),m&&(D=r(D).week(m).toDate()),D)}catch(e){return new Date(\"\")}}(t,a,r,n),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),s={}}else if(a instanceof Array)for(var c=a.length,m=1;m<=c;m+=1){o[1]=a[m-1];var M=n.apply(this,o);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===c&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));","!function(e,o){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=o():\"function\"==typeof define&&define.amd?define(o):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isToday=o()}(this,(function(){\"use strict\";return function(e,o,t){o.prototype.isToday=function(){var e=\"YYYY-MM-DD\",o=t();return this.format(e)===o.format(e)}}}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isYesterday=t()}(this,(function(){\"use strict\";return function(e,t,n){t.prototype.isYesterday=function(){var e=\"YYYY-MM-DD\",t=n().subtract(1,\"day\");return this.format(e)===t.format(e)}}}));","!function(r,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(r=\"undefined\"!=typeof globalThis?globalThis:r||self).dayjs_plugin_relativeTime=e()}(this,(function(){\"use strict\";return function(r,e,t){r=r||{};var n=e.prototype,o={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};function i(r,e,t,o){return n.fromToBase(r,e,t,o)}t.en.relativeTime=o,n.fromToBase=function(e,n,i,d,u){for(var f,a,s,l=i.$locale().relativeTime||o,h=r.thresholds||[{l:\"s\",r:44,d:\"second\"},{l:\"m\",r:89},{l:\"mm\",r:44,d:\"minute\"},{l:\"h\",r:89},{l:\"hh\",r:21,d:\"hour\"},{l:\"d\",r:35},{l:\"dd\",r:25,d:\"day\"},{l:\"M\",r:45},{l:\"MM\",r:10,d:\"month\"},{l:\"y\",r:17},{l:\"yy\",d:\"year\"}],m=h.length,c=0;c<m;c+=1){var y=h[c];y.d&&(f=d?t(e).diff(i,y.d,!0):i.diff(e,y.d,!0));var p=(r.rounding||Math.round)(Math.abs(f));if(s=f>0,p<=y.r||!y.r){p<=1&&c>0&&(y=h[c-1]);var v=l[y.l];u&&(p=u(\"\"+p)),a=\"string\"==typeof v?v.replace(\"%d\",p):v(p,n,y.l,s);break}}if(n)return a;var M=s?l.future:l.past;return\"function\"==typeof M?M(a):M.replace(\"%s\",a)},n.to=function(r,e){return i(r,e,this,!0)},n.from=function(r,e){return i(r,e,this)};var d=function(r){return r.$u?t.utc():t()};n.toNow=function(r){return this.to(d(this),r)},n.fromNow=function(r){return this.from(d(this),r)}}}));","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){\"use strict\";var t=\"minute\",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var r=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),r.call(this,t)};var o=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else o.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if(\"string\"==typeof s&&(s=function(t){void 0===t&&(t=\"\");var s=t.match(i);if(!s)return null;var f=(\"\"+s[0]).match(e)||[\"-\",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:\"+\"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s;if(0===u)return this.utc(f);var r=this.clone();if(f)return r.$offset=u,r.$u=!1,r;var o=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(r=this.local().add(u+o,t)).$offset=u,r.$x.$localOffset=o,r};var h=u.format;u.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return\"s\"===t&&this.$offset?n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isoWeek=t()}(this,(function(){\"use strict\";var e=\"day\";return function(t,i,s){var a=function(t){return t.add(4-t.isoWeekday(),e)},d=i.prototype;d.isoWeekYear=function(){return a(this).year()},d.isoWeek=function(t){if(!this.$utils().u(t))return this.add(7*(t-this.isoWeek()),e);var i,d,n,o,r=a(this),u=(i=this.isoWeekYear(),d=this.$u,n=(d?s.utc:s)().year(i).startOf(\"year\"),o=4-n.isoWeekday(),n.isoWeekday()>4&&(o+=7),n.add(o,e));return r.diff(u,\"week\")+1},d.isoWeekday=function(e){return this.$utils().u(e)?this.day()||7:this.day(this.day()%7?e:e-7)};var n=d.startOf;d.startOf=function(e,t){var i=this.$utils(),s=!!i.u(t)||t;return\"isoweek\"===i.p(e)?s?this.date(this.date()-(this.isoWeekday()-1)).startOf(\"day\"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf(\"day\"):n.bind(this)(e,t)}}}));","!function(t,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_quarterOfYear=n()}(this,(function(){\"use strict\";var t=\"month\",n=\"quarter\";return function(e,i){var r=i.prototype;r.quarter=function(t){return this.$utils().u(t)?Math.ceil((this.month()+1)/3):this.month(this.month()%3+3*(t-1))};var s=r.add;r.add=function(e,i){return e=Number(e),this.$utils().p(i)===n?this.add(3*e,t):s.bind(this)(e,i)};var u=r.startOf;r.startOf=function(e,i){var r=this.$utils(),s=!!r.u(i)||i;if(r.p(e)===n){var o=this.quarter()-1;return s?this.month(3*o).startOf(t).startOf(\"day\"):this.month(3*o+2).endOf(t).endOf(\"day\")}return u.bind(this)(e,i)}}}));","// Imports dayjs and loads the plugins we need. Then exports it with the correct types.\n\nimport dayjs, { Dayjs } from \"dayjs\"\nimport customParseFormat from \"dayjs/plugin/customParseFormat.js\"\nimport isToday from \"dayjs/plugin/isToday.js\"\nimport isYesterday from \"dayjs/plugin/isYesterday.js\"\nimport relativeTime from \"dayjs/plugin/relativeTime.js\"\nimport utc from \"dayjs/plugin/utc.js\"\nimport isoWeek from \"dayjs/plugin/isoWeek.js\"\nimport quarterOfYear from \"dayjs/plugin/quarterOfYear.js\"\n\ndayjs.extend(customParseFormat)\ndayjs.extend(isToday)\ndayjs.extend(isYesterday)\ndayjs.extend(relativeTime)\ndayjs.extend(utc)\ndayjs.extend(isoWeek)\ndayjs.extend(quarterOfYear)\n\nexport default dayjs\n\n// We need these explicit plugin type imports _and exports_ to get the right Dayjs type down the line\nimport type customParseFormatType from \"dayjs/plugin/customParseFormat.js\"\nimport type isTodayType from \"dayjs/plugin/isToday.js\"\nimport type isYesterdayType from \"dayjs/plugin/isYesterday.js\"\nimport type relativeTimeType from \"dayjs/plugin/relativeTime.js\"\nimport type utcType from \"dayjs/plugin/utc.js\"\nimport type isoWeekType from \"dayjs/plugin/isoWeek.js\"\nimport type quarterOfYearType from \"dayjs/plugin/quarterOfYear.js\"\n\nexport type {\n    Dayjs,\n    customParseFormatType,\n    isTodayType,\n    isYesterdayType,\n    relativeTimeType,\n    utcType,\n    isoWeekType,\n    quarterOfYearType,\n}\n","export default function(x) {\n  return Math.abs(x = Math.round(x)) >= 1e21\n      ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n      : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n  if (!isFinite(x) || x === 0) return null; // NaN, ±Infinity, ±0\n  var i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\"), coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n","export default function(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  return new FormatSpecifier({\n    fill: match[1],\n    align: match[2],\n    sign: match[3],\n    symbol: match[4],\n    zero: match[5],\n    width: match[6],\n    comma: match[7],\n    precision: match[8] && match[8].slice(1),\n    trim: match[9],\n    type: match[10]\n  });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n  this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n  this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n  this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n  this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n  this.zero = !!specifier.zero;\n  this.width = specifier.width === undefined ? undefined : +specifier.width;\n  this.comma = !!specifier.comma;\n  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n  this.trim = !!specifier.trim;\n  this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return prefixExponent = undefined, x.toPrecision(p);\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n  \"%\": (x, p) => (x * 100).toFixed(p),\n  \"b\": (x) => Math.round(x).toString(2),\n  \"c\": (x) => x + \"\",\n  \"d\": formatDecimal,\n  \"e\": (x, p) => x.toExponential(p),\n  \"f\": (x, p) => x.toFixed(p),\n  \"g\": (x, p) => x.toPrecision(p),\n  \"o\": (x) => Math.round(x).toString(8),\n  \"p\": (x, p) => formatRounded(x * 100, p),\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n  \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n  return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n    prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n      currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n      currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n      decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n      percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n      minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n      nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n  function newFormat(specifier, options) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = (options && options.prefix !== undefined ? options.prefix : \"\") + (symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\"),\n        suffix = (symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\") + (options && options.suffix !== undefined ? options.suffix : \"\");\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision === undefined ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n        var valueNegative = value < 0 || 1 / value < 0;\n\n        // Perform the initial formatting.\n        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n        if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" && !isNaN(value) && prefixExponent !== undefined ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer “value” part that can be\n        // grouped, and fractional or exponential “suffix” part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier), {suffix: prefixes[8 + e / 3]});\n    return function(value) {\n      return f(k * value);\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  format = locale.format;\n  formatPrefix = locale.formatPrefix;\n  return locale;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","'use strict';\n\n(function (global) {\n\n    // minimal symbol polyfill for IE11 and others\n    if (typeof Symbol !== 'function') {\n        var Symbol = function(name) {\n            return name;\n        }\n\n        Symbol.nonNative = true;\n    }\n\n    const STATE_PLAINTEXT = Symbol('plaintext');\n    const STATE_HTML      = Symbol('html');\n    const STATE_COMMENT   = Symbol('comment');\n\n    const ALLOWED_TAGS_REGEX  = /<(\\w*)>/g;\n    const NORMALIZE_TAG_REGEX = /<\\/?([^\\s\\/>]+)/;\n\n    function striptags(html, allowable_tags, tag_replacement) {\n        html            = html || '';\n        allowable_tags  = allowable_tags || [];\n        tag_replacement = tag_replacement || '';\n\n        let context = init_context(allowable_tags, tag_replacement);\n\n        return striptags_internal(html, context);\n    }\n\n    function init_striptags_stream(allowable_tags, tag_replacement) {\n        allowable_tags  = allowable_tags || [];\n        tag_replacement = tag_replacement || '';\n\n        let context = init_context(allowable_tags, tag_replacement);\n\n        return function striptags_stream(html) {\n            return striptags_internal(html || '', context);\n        };\n    }\n\n    striptags.init_streaming_mode = init_striptags_stream;\n\n    function init_context(allowable_tags, tag_replacement) {\n        allowable_tags = parse_allowable_tags(allowable_tags);\n\n        return {\n            allowable_tags : allowable_tags,\n            tag_replacement: tag_replacement,\n\n            state         : STATE_PLAINTEXT,\n            tag_buffer    : '',\n            depth         : 0,\n            in_quote_char : ''\n        };\n    }\n\n    function striptags_internal(html, context) {\n        if (typeof html != \"string\") {\n            throw new TypeError(\"'html' parameter must be a string\");\n        }\n\n        let allowable_tags  = context.allowable_tags;\n        let tag_replacement = context.tag_replacement;\n\n        let state         = context.state;\n        let tag_buffer    = context.tag_buffer;\n        let depth         = context.depth;\n        let in_quote_char = context.in_quote_char;\n        let output        = '';\n\n        for (let idx = 0, length = html.length; idx < length; idx++) {\n            let char = html[idx];\n\n            if (state === STATE_PLAINTEXT) {\n                switch (char) {\n                    case '<':\n                        state       = STATE_HTML;\n                        tag_buffer += char;\n                        break;\n\n                    default:\n                        output += char;\n                        break;\n                }\n            }\n\n            else if (state === STATE_HTML) {\n                switch (char) {\n                    case '<':\n                        // ignore '<' if inside a quote\n                        if (in_quote_char) {\n                            break;\n                        }\n\n                        // we're seeing a nested '<'\n                        depth++;\n                        break;\n\n                    case '>':\n                        // ignore '>' if inside a quote\n                        if (in_quote_char) {\n                            break;\n                        }\n\n                        // something like this is happening: '<<>>'\n                        if (depth) {\n                            depth--;\n\n                            break;\n                        }\n\n                        // this is closing the tag in tag_buffer\n                        in_quote_char = '';\n                        state         = STATE_PLAINTEXT;\n                        tag_buffer   += '>';\n\n                        if (allowable_tags.has(normalize_tag(tag_buffer))) {\n                            output += tag_buffer;\n                        } else {\n                            output += tag_replacement;\n                        }\n\n                        tag_buffer = '';\n                        break;\n\n                    case '\"':\n                    case '\\'':\n                        // catch both single and double quotes\n\n                        if (char === in_quote_char) {\n                            in_quote_char = '';\n                        } else {\n                            in_quote_char = in_quote_char || char;\n                        }\n\n                        tag_buffer += char;\n                        break;\n\n                    case '-':\n                        if (tag_buffer === '<!-') {\n                            state = STATE_COMMENT;\n                        }\n\n                        tag_buffer += char;\n                        break;\n\n                    case ' ':\n                    case '\\n':\n                        if (tag_buffer === '<') {\n                            state      = STATE_PLAINTEXT;\n                            output    += '< ';\n                            tag_buffer = '';\n\n                            break;\n                        }\n\n                        tag_buffer += char;\n                        break;\n\n                    default:\n                        tag_buffer += char;\n                        break;\n                }\n            }\n\n            else if (state === STATE_COMMENT) {\n                switch (char) {\n                    case '>':\n                        if (tag_buffer.slice(-2) == '--') {\n                            // close the comment\n                            state = STATE_PLAINTEXT;\n                        }\n\n                        tag_buffer = '';\n                        break;\n\n                    default:\n                        tag_buffer += char;\n                        break;\n                }\n            }\n        }\n\n        // save the context for future iterations\n        context.state         = state;\n        context.tag_buffer    = tag_buffer;\n        context.depth         = depth;\n        context.in_quote_char = in_quote_char;\n\n        return output;\n    }\n\n    function parse_allowable_tags(allowable_tags) {\n        let tag_set = new Set();\n\n        if (typeof allowable_tags === 'string') {\n            let match;\n\n            while ((match = ALLOWED_TAGS_REGEX.exec(allowable_tags))) {\n                tag_set.add(match[1]);\n            }\n        }\n\n        else if (!Symbol.nonNative &&\n                 typeof allowable_tags[Symbol.iterator] === 'function') {\n\n            tag_set = new Set(allowable_tags);\n        }\n\n        else if (typeof allowable_tags.forEach === 'function') {\n            // IE11 compatible\n            allowable_tags.forEach(tag_set.add, tag_set);\n        }\n\n        return tag_set;\n    }\n\n    function normalize_tag(tag_buffer) {\n        let match = NORMALIZE_TAG_REGEX.exec(tag_buffer);\n\n        return match ? match[1].toLowerCase() : null;\n    }\n\n    if (typeof define === 'function' && define.amd) {\n        // AMD\n        define(function module_factory() { return striptags; });\n    }\n\n    else if (typeof module === 'object' && module.exports) {\n        // Node\n        module.exports = striptags;\n    }\n\n    else {\n        // Browser\n        global.striptags = striptags;\n    }\n}(this));\n","import { globalConfig } from \"./core.js\";\n// functions\nexport function assertEqual(val) {\n    return val;\n}\nexport function assertNotEqual(val) {\n    return val;\n}\nexport function toZod() {\n    return (schema) => schema;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n    throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n    const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n    const values = Object.entries(entries)\n        .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n        .map(([_, v]) => v);\n    return values;\n}\nexport function joinValues(array, separator = \"|\") {\n    return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n    if (typeof value === \"bigint\")\n        return value.toString();\n    return value;\n}\n// the accessor lives on a shared prototype: an own accessor makes every box a dictionary-mode object (~360 B and a slow load per read against ~100 B and an inlined getter here)\nclass Cached {\n    constructor(getter) {\n        this._getter = getter;\n        this._value = undefined;\n    }\n    get value() {\n        const getter = this._getter;\n        if (getter !== undefined) {\n            this._value = getter();\n            this._getter = undefined;\n        }\n        return this._value;\n    }\n}\nexport function cached(getter) {\n    return new Cached(getter);\n}\nexport function nullish(input) {\n    return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n    const start = source.startsWith(\"^\") ? 1 : 0;\n    const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n    return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n    const ratio = val / step;\n    const roundedRatio = Math.round(ratio);\n    // `val` and `step` each round to a double before the division rounds again, so a true decimal multiple's quotient can sit up to 1.5 of these scaled epsilons from the integer. A 1x tolerance therefore rejected 2.03 as a multiple of 0.07; 4x covers the worst case with margin.\n    const tolerance = 4 * Number.EPSILON * Math.max(Math.abs(ratio), 1);\n    if (Math.abs(ratio - roundedRatio) < tolerance)\n        return 0;\n    return ratio - roundedRatio;\n}\nconst EVALUATING = /* @__PURE__*/ Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n    let value = undefined;\n    Object.defineProperty(object, key, {\n        get() {\n            if (value === EVALUATING) {\n                // Circular reference detected, return undefined to break the cycle\n                return undefined;\n            }\n            if (value === undefined) {\n                value = EVALUATING;\n                value = getter();\n            }\n            return value;\n        },\n        set(v) {\n            Object.defineProperty(object, key, {\n                value: v,\n                // configurable: true,\n            });\n            // object[key] = v;\n        },\n        configurable: true,\n    });\n}\nexport function objectClone(obj) {\n    return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n    Object.defineProperty(target, prop, {\n        value,\n        writable: true,\n        enumerable: true,\n        configurable: true,\n    });\n}\n/**\n * Whichever object a def's `shape` currently answers from: the one the caller passed until the first read, the frozen copy after it.\n *\n * Its keys and descriptors read without invoking anything, which is what lets a discriminated union check its discriminator, and the cycle walk read a shape, without resolving a getter that references the schema being constructed. A def that answers `shape` from an accessor of its own has none.\n */\nexport function rawShape(def) {\n    const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n    return desc?.get ? desc.get.raw : desc?.value;\n}\n// where a builder reads its source's keys and descriptors, resolving only a shape a def answers for itself. A shape resolves by object spread, so only its enumerable keys are ever part of it.\nfunction sourceShape(schema) {\n    return rawShape(schema._zod.def) ?? schema._zod.def.shape;\n}\n// a key whose value is not settled yet, self-caching so every read after the first gets the same one\nfunction deferProp(target, key, getter) {\n    Object.defineProperty(target, key, {\n        get() {\n            const value = getter();\n            assignProp(this, key, value);\n            return value;\n        },\n        enumerable: true,\n        configurable: true,\n    });\n}\n// Writes a settled key. A plain assignment is much cheaper than `defineProperty` and produces the same descriptor, but it runs whatever setter already answers to the key — an accessor this shape deferred, or an inherited one, which `__proto__` has on every object and prototype pollution can add for any name.\nfunction putProp(target, key, value) {\n    if (key in target)\n        assignProp(target, key, value);\n    else\n        target[key] = value;\n}\n/**\n * Copies `keys` of `source`'s shape onto `target`, each value passed through `wrap`.\n *\n * A key the source has resolved is copied through now, so the derived shape states it outright and nothing has to resolve it to learn what it holds. A key the source still defers stays deferred, and reads back through the source's own `shape`, so it resolves once and both shapes get that one schema.\n */\nfunction mirrorShape(target, source, keys, wrap) {\n    const raw = sourceShape(source);\n    for (const key of keys) {\n        const desc = Object.getOwnPropertyDescriptor(raw, key);\n        if (!desc.enumerable)\n            continue;\n        if (desc.get) {\n            deferProp(target, key, () => {\n                const value = source._zod.def.shape[key];\n                return wrap ? wrap(value, key) : value;\n            });\n        }\n        else\n            putProp(target, key, wrap ? wrap(desc.value, key) : desc.value);\n    }\n}\n// same, for a plain shape a caller passed rather than a schema's\nfunction mirrorProps(target, source) {\n    for (const key of Reflect.ownKeys(source)) {\n        const desc = Object.getOwnPropertyDescriptor(source, key);\n        if (!desc.enumerable)\n            continue;\n        if (desc.get)\n            deferProp(target, key, () => source[key]);\n        else\n            putProp(target, key, desc.value);\n    }\n}\nexport function mergeDefs(...defs) {\n    const mergedDescriptors = {};\n    for (const def of defs) {\n        const descriptors = Object.getOwnPropertyDescriptors(def);\n        Object.assign(mergedDescriptors, descriptors);\n    }\n    return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n    return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n    if (!path)\n        return obj;\n    return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n    const keys = Object.keys(promisesObj);\n    const promises = keys.map((key) => promisesObj[key]);\n    return Promise.all(promises).then((results) => {\n        const resolvedObj = {};\n        for (let i = 0; i < keys.length; i++) {\n            resolvedObj[keys[i]] = results[i];\n        }\n        return resolvedObj;\n    });\n}\nexport function randomString(length = 10) {\n    const chars = \"abcdefghijklmnopqrstuvwxyz\";\n    let str = \"\";\n    for (let i = 0; i < length; i++) {\n        str += chars[Math.floor(Math.random() * chars.length)];\n    }\n    return str;\n}\nexport function esc(str) {\n    return JSON.stringify(str);\n}\nexport function slugify(input) {\n    return input\n        .toLowerCase()\n        .trim()\n        .replace(/[^\\w\\s-]/g, \"\")\n        .replace(/[\\s_-]+/g, \"-\")\n        .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n    return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = /* @__PURE__*/ cached(() => {\n    // Skip the probe under `jitless`: strict CSPs report the caught `new Function` as a `securitypolicyviolation` even though the throw is swallowed.\n    if (globalConfig.jitless) {\n        return false;\n    }\n    // @ts-ignore\n    if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n        return false;\n    }\n    try {\n        const F = Function;\n        new F(\"\");\n        return true;\n    }\n    catch (_) {\n        return false;\n    }\n});\nexport function isPlainObject(o) {\n    if (isObject(o) === false)\n        return false;\n    // modified constructor\n    const ctor = o.constructor;\n    if (ctor === undefined)\n        return true;\n    if (typeof ctor !== \"function\")\n        return true;\n    // modified prototype\n    const prot = ctor.prototype;\n    if (isObject(prot) === false)\n        return false;\n    // ctor doesn't have static `isPrototypeOf`\n    if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n        return false;\n    }\n    return true;\n}\nexport function shallowClone(o) {\n    if (isPlainObject(o))\n        return { ...o };\n    if (Array.isArray(o))\n        return [...o];\n    if (o instanceof Map)\n        return new Map(o);\n    if (o instanceof Set)\n        return new Set(o);\n    return o;\n}\nexport function numKeys(data) {\n    let keyCount = 0;\n    for (const key in data) {\n        if (Object.prototype.hasOwnProperty.call(data, key)) {\n            keyCount++;\n        }\n    }\n    return keyCount;\n}\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return \"undefined\";\n        case \"string\":\n            return \"string\";\n        case \"number\":\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        case \"boolean\":\n            return \"boolean\";\n        case \"function\":\n            return \"function\";\n        case \"bigint\":\n            return \"bigint\";\n        case \"symbol\":\n            return \"symbol\";\n        case \"object\":\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return \"promise\";\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return \"map\";\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return \"set\";\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return \"date\";\n            }\n            // @ts-ignore\n            if (typeof File !== \"undefined\" && data instanceof File) {\n                return \"file\";\n            }\n            return \"object\";\n        default:\n            throw new Error(`Unknown data type: ${t}`);\n    }\n};\nexport const propertyKeyTypes = /* @__PURE__*/ new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = /* @__PURE__*/ new Set([\n    \"string\",\n    \"number\",\n    \"bigint\",\n    \"boolean\",\n    \"symbol\",\n    \"undefined\",\n]);\nexport function escapeRegex(str) {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n    const cl = new inst._zod.constr(def ?? inst._zod.def);\n    if (!def || params?.parent)\n        cl._zod.parent = inst;\n    return cl;\n}\nexport function normalizeParams(_params) {\n    const params = _params;\n    if (!params)\n        return {};\n    if (typeof params === \"string\")\n        return { error: () => params };\n    if (params?.message !== undefined) {\n        if (params?.error !== undefined)\n            throw new Error(\"Cannot specify both `message` and `error` params\");\n        params.error = params.message;\n    }\n    delete params.message;\n    if (typeof params.error === \"string\")\n        return { ...params, error: () => params.error };\n    return params;\n}\nexport function createTransparentProxy(getter) {\n    let target;\n    return new Proxy({}, {\n        get(_, prop, receiver) {\n            target ?? (target = getter());\n            return Reflect.get(target, prop, receiver);\n        },\n        set(_, prop, value, receiver) {\n            target ?? (target = getter());\n            return Reflect.set(target, prop, value, receiver);\n        },\n        has(_, prop) {\n            target ?? (target = getter());\n            return Reflect.has(target, prop);\n        },\n        deleteProperty(_, prop) {\n            target ?? (target = getter());\n            return Reflect.deleteProperty(target, prop);\n        },\n        ownKeys(_) {\n            target ?? (target = getter());\n            return Reflect.ownKeys(target);\n        },\n        getOwnPropertyDescriptor(_, prop) {\n            target ?? (target = getter());\n            return Reflect.getOwnPropertyDescriptor(target, prop);\n        },\n        defineProperty(_, prop, descriptor) {\n            target ?? (target = getter());\n            return Reflect.defineProperty(target, prop, descriptor);\n        },\n    });\n}\nexport function stringifyPrimitive(value) {\n    if (typeof value === \"bigint\")\n        return value.toString() + \"n\";\n    if (typeof value === \"string\")\n        return `\"${value}\"`;\n    return `${value}`;\n}\nexport function optionalKeys(shape) {\n    return Object.keys(shape).filter((k) => {\n        return shape[k]._zod.optin !== undefined && shape[k]._zod.optout === \"optional\";\n    });\n}\n// Wrapped in a `@__PURE__` IIFE: esbuild never tree-shakes a top-level initializer that contains a member access on `Number`, so the bare object literal survived into every bundle.\nexport const NUMBER_FORMAT_RANGES = /*@__PURE__*/ (() => ({\n    safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n    int32: [-2147483648, 2147483647],\n    uint32: [0, 4294967295],\n    float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n    float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n}))();\nexport const BIGINT_FORMAT_RANGES = {\n    int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n    uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n    }\n    const newShape = {};\n    mirrorShape(newShape, schema, maskedKeys(schema, mask));\n    return clone(schema, mergeDefs(currDef, { shape: newShape, checks: [] }));\n}\n// the mask keys that select something, checked against the source's shape without resolving it\nfunction maskedKeys(schema, mask) {\n    const raw = sourceShape(schema);\n    const keys = [];\n    // `for...in` skips symbols, so a symbol in the mask would select nothing\n    for (const key of Reflect.ownKeys(mask)) {\n        if (!Object.getOwnPropertyDescriptor(raw, key)?.enumerable) {\n            throw new Error(`Unrecognized key: \"${String(key)}\"`);\n        }\n        if (mask[key])\n            keys.push(key);\n    }\n    return keys;\n}\nexport function omit(schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n    }\n    const omitted = new Set(maskedKeys(schema, mask));\n    const newShape = {};\n    mirrorShape(newShape, schema, Reflect.ownKeys(sourceShape(schema)).filter((key) => !omitted.has(key)));\n    return clone(schema, mergeDefs(currDef, { shape: newShape, checks: [] }));\n}\nexport function extend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to extend: expected a plain object\");\n    }\n    const checks = schema._zod.def.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        // Only throw if new shape overlaps with existing shape. Use getOwnPropertyDescriptor to check key existence without accessing values\n        const existingShape = sourceShape(schema);\n        for (const key of Reflect.ownKeys(shape)) {\n            if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n                throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n            }\n        }\n    }\n    return clone(schema, mergeDefs(schema._zod.def, { shape: extended(schema, shape) }));\n}\n// the source's keys, then the caller's overlaid on top\nfunction extended(schema, shape) {\n    const newShape = {};\n    mirrorShape(newShape, schema, Reflect.ownKeys(sourceShape(schema)));\n    mirrorProps(newShape, shape);\n    return newShape;\n}\nexport function safeExtend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n    }\n    return clone(schema, mergeDefs(schema._zod.def, { shape: extended(schema, shape) }));\n}\nexport function merge(a, b) {\n    if (!b?._zod?.def) {\n        throw new Error(\"Invalid input to merge: expected an object schema. To merge a plain shape, use `.extend()`.\");\n    }\n    if (a._zod.def.checks?.length) {\n        throw new Error(\".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.\");\n    }\n    const newShape = {};\n    mirrorShape(newShape, a, Reflect.ownKeys(sourceShape(a)));\n    mirrorShape(newShape, b, Reflect.ownKeys(sourceShape(b)));\n    const def = mergeDefs(a._zod.def, {\n        shape: newShape,\n        get catchall() {\n            return b._zod.def.catchall;\n        },\n        checks: b._zod.def.checks ?? [],\n    });\n    return clone(a, def);\n}\nexport function partial(Class, schema, mask, name = \"partial\") {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(`.${name}() cannot be used on object schemas containing refinements`);\n    }\n    const selected = mask ? new Set(maskedKeys(schema, mask)) : undefined;\n    const newShape = {};\n    mirrorShape(newShape, schema, Reflect.ownKeys(sourceShape(schema)), Class &&\n        ((value, key) => (selected && !selected.has(key) ? value : new Class({ type: \"optional\", innerType: value }))));\n    return clone(schema, mergeDefs(schema._zod.def, { shape: newShape, checks: [] }));\n}\nexport function required(Class, schema, mask) {\n    const selected = mask ? new Set(maskedKeys(schema, mask)) : undefined;\n    const newShape = {};\n    mirrorShape(newShape, schema, Reflect.ownKeys(sourceShape(schema)), (value, key) => \n    // overwrite with non-optional\n    selected && !selected.has(key) ? value : new Class({ type: \"nonoptional\", innerType: value }));\n    return clone(schema, mergeDefs(schema._zod.def, { shape: newShape }));\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n    if (x.aborted === true)\n        return true;\n    for (let i = startIndex; i < x.issues.length; i++) {\n        if (x.issues[i]?.continue !== true) {\n            return true;\n        }\n    }\n    return false;\n}\n// Checks for explicit abort (continue === false), as opposed to implicit abort (continue === undefined). Used to respect `abort: true` in .refine() even for checks that have a `when` function.\nexport function explicitlyAborted(x, startIndex = 0) {\n    if (x.aborted === true)\n        return true;\n    for (let i = startIndex; i < x.issues.length; i++) {\n        if (x.issues[i]?.continue === false) {\n            return true;\n        }\n    }\n    return false;\n}\nexport function prefixIssues(path, issues) {\n    return issues.map((iss) => {\n        var _a;\n        (_a = iss).path ?? (_a.path = []);\n        iss.path.unshift(path);\n        return iss;\n    });\n}\nexport function unwrapMessage(message) {\n    return typeof message === \"string\" ? message : message?.message;\n}\n/* A check holds no link back to the schema it is attached to — the same check instance is shared by every clone of that schema — so the owner is stamped onto the issues a check just raised, at the only point where both are in scope. Runs on the failure path only; `start` is the issue count from before the check ran. */\n/** The leading size checks of `defChecks` that set an upper bound, each paired with it. */\nexport function sizeCaps(defChecks) {\n    const caps = [];\n    for (const ch of defChecks ?? []) {\n        const d = ch._zod.def;\n        // a later check may rewrite the value\n        if (!/_(length|size)$|_equals$/.test(d.check))\n            break;\n        const max = d.maximum ?? d.length ?? d.size;\n        if (max >= 0)\n            caps.push([max, ch]);\n    }\n    return caps;\n}\nexport function attachSchema(issues, start, inst) {\n    var _a;\n    for (let i = start; i < issues.length; i++) {\n        (_a = issues[i]).schema ?? (_a.schema = inst);\n    }\n}\nexport function finalizeIssue(iss, ctx, config) {\n    var _a;\n    // A schema that raised an issue itself owns it outright, and outranks any stamp an enclosing check left in `attachSchema`. String formats and z.custom() are schema and check at once, so when they act as a check they defer to that stamp instead.\n    const traits = iss.inst?._zod?.traits;\n    if (traits?.has(\"$ZodType\")) {\n        if (traits.has(\"$ZodCheck\"))\n            (_a = iss).schema ?? (_a.schema = iss.inst);\n        else\n            iss.schema = iss.inst;\n    }\n    // Decreasing specificity, first map to return a message wins. `inst` is whatever raised the issue, so a check's own map outranks the owning schema's.\n    const schemaError = iss.schema !== iss.inst ? iss.schema?._zod.def?.error : undefined;\n    const message = iss.message\n        ? iss.message\n        : (unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n            unwrapMessage(schemaError?.(iss)) ??\n            unwrapMessage(ctx?.error?.(iss)) ??\n            unwrapMessage(config.customError?.(iss)) ??\n            unwrapMessage(config.localeError?.(iss)) ??\n            \"Invalid input\");\n    // an explicit own-key copy beats object rest with excluded keys, which v8 routes through a generic runtime call; Object.keys rather than for-in so an issue pushed with a prototype does not leak inherited keys, and an own __proto__ key is dropped rather than assigned through the setter\n    const full = {};\n    for (const k of Object.keys(iss)) {\n        if (k === \"inst\" || k === \"schema\" || k === \"continue\" || k === \"input\" || k === \"__proto__\")\n            continue;\n        full[k] = iss[k];\n    }\n    full.path ?? (full.path = []);\n    full.message = message;\n    if (ctx?.reportInput) {\n        full.input = iss.input;\n    }\n    return full;\n}\nexport function getSizableOrigin(input) {\n    if (input instanceof Set)\n        return \"set\";\n    if (input instanceof Map)\n        return \"map\";\n    // @ts-ignore\n    if (input instanceof File)\n        return \"file\";\n    return \"unknown\";\n}\nconst highSurrogate = /[\\uD800-\\uDBFF]/;\n// Code points in `str`: a surrogate pair counts once, a lone surrogate as itself. Hand-rolled because the string iterator allocates and runs ~250x slower on this path; the regex probe exits ~50x quicker for a string with no astral characters.\nexport function codePointLength(str) {\n    const units = str.length;\n    if (!highSurrogate.test(str))\n        return units;\n    let count = units;\n    for (let i = 0; i < units - 1; i++) {\n        if ((str.charCodeAt(i) & 0xfc00) === 0xd800 && (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {\n            count--;\n            i++;\n        }\n    }\n    return count;\n}\nexport function getLengthableOrigin(input) {\n    if (Array.isArray(input))\n        return \"array\";\n    if (typeof input === \"string\")\n        return \"string\";\n    return \"unknown\";\n}\nexport function parsedType(data) {\n    const t = typeof data;\n    switch (t) {\n        case \"number\": {\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        }\n        case \"object\": {\n            if (data === null) {\n                return \"null\";\n            }\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            const obj = data;\n            if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n                return obj.constructor.name;\n            }\n        }\n    }\n    return t;\n}\nexport function issue(...args) {\n    const [iss, input, inst] = args;\n    if (typeof iss === \"string\") {\n        return {\n            message: iss,\n            code: \"custom\",\n            input,\n            inst,\n        };\n    }\n    return { ...iss };\n}\nexport function cleanEnum(obj) {\n    return Object.entries(obj)\n        .filter(([k, _]) => {\n        // return true if NaN, meaning it's not a number, thus a string key\n        return Number.isNaN(Number.parseInt(k, 10));\n    })\n        .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n    const binaryString = atob(base64);\n    const bytes = new Uint8Array(binaryString.length);\n    for (let i = 0; i < binaryString.length; i++) {\n        bytes[i] = binaryString.charCodeAt(i);\n    }\n    return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n    let binaryString = \"\";\n    for (let i = 0; i < bytes.length; i++) {\n        binaryString += String.fromCharCode(bytes[i]);\n    }\n    return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n    const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n    const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n    return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n    return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n    const cleanHex = hex.replace(/^0x/, \"\");\n    if (cleanHex.length % 2 !== 0) {\n        throw new Error(\"Invalid hex string length\");\n    }\n    const bytes = new Uint8Array(cleanHex.length / 2);\n    for (let i = 0; i < cleanHex.length; i += 2) {\n        bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n    }\n    return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n    return Array.from(bytes)\n        .map((b) => b.toString(16).padStart(2, \"0\"))\n        .join(\"\");\n}\n// instanceof\nexport class Class {\n    constructor(..._args) { }\n}\n//////////    PROTOTYPE INSTALLERS     //////////\n//\n// Members live on the prototype and materialize per instance on first read, which keeps own-property count under the step where V8 stops using inline slots. Changing anything here means re-measuring runtime, memory and bundle size together — see \"The three axes\" in AGENTS.md.\n/**\n * Installs a trait's members on its prototype. Each value builds that member for the instance on first read; the built value shadows the accessor as an own property, so a detached `const { parse } = schema` keeps working.\n *\n * Call this from a `proto` initializer, which runs once per prototype — never per instance.\n */\nexport function members(proto, table) {\n    for (const key in table) {\n        const desc = Object.getOwnPropertyDescriptor(table, key);\n        // a getter installs as written, so it stays live: `description` reads through to the registry on every access. not enumerable: an object literal's is, and a prototype member never was\n        if (desc.get)\n            Object.defineProperty(proto, key, { ...desc, enumerable: false });\n        // a method materializes bound on first read, which is what keeps a detached member working: `const opt = schema.optional; opt()`\n        else\n            defineBound(proto, key, desc.value);\n    }\n}\n/** Shadows a prototype member with an own value, so a getter that builds from the instance runs once. */\nexport function own(inst, key, value, enumerable = true) {\n    Object.defineProperty(inst, key, { configurable: true, writable: true, enumerable, value });\n    return value;\n}\n/** Like {@link own}, for a member that was never an own data property and has to stay out of `Object.keys`. */\nexport function hide(inst, key, value) {\n    return own(inst, key, value, false);\n}\n/** Adds members a table derives from the instance: each builds on first read and shadows as own data, and assignment shadows the same way, as when these were own properties. */\nexport /*@__NO_SIDE_EFFECTS__*/ function derived(computes, table) {\n    for (const key in computes) {\n        const compute = computes[key];\n        // an object literal's accessor is configurable and enumerable, and `members` copies the descriptor as written\n        Object.defineProperty(table, key, {\n            configurable: true,\n            enumerable: true,\n            get() {\n                return own(this, key, compute(this));\n            },\n            set(value) {\n                own(this, key, value);\n            },\n        });\n    }\n    return table;\n}\nfunction defineBound(proto, key, fn) {\n    Object.defineProperty(proto, key, {\n        configurable: true,\n        get() {\n            // vitest's spyOn calls a prototype getter bare to find the function it wraps, so a nullish receiver answers the raw method\n            return this == null ? fn : own(this, key, fn.bind(this));\n        },\n        set(value) {\n            own(this, key, value);\n        },\n    });\n}\n/** Returns the prototype to install on, or `undefined` if this group is already installed on it. */\nfunction claim(inst, sentinel) {\n    const proto = Object.getPrototypeOf(inst);\n    // Runs on every construction, so `in` rather than the costlier `hasOwnProperty.call`. Sentinels are keys the group itself defines.\n    return sentinel in proto ? undefined : proto;\n}\n// The internals whose init chain is installing. A second call for the same one is a derived constructor overriding its base, so it must not construct another schema in between or the override is dropped.\nlet installing;\n// Set while a getter is running, so a value that resolved through a recursion break is not memoized. One shared descriptor shadows the key for the duration, which costs no per-key allocation.\nlet broke = false;\nconst breaker = {\n    configurable: true,\n    get() {\n        broke = true;\n        return undefined;\n    },\n};\n/**\n * Installs a lazily-derived internal on the `_zod` prototype of `inst`'s\n * constructor, computed from the internals object itself and cached there on\n * first read. One accessor per constructor rather than one per instance.\n */\nexport function defineLazyInternal(inst, key, compute) {\n    const proto = Object.getPrototypeOf(inst._zod);\n    if (key in proto && installing !== inst._zod) {\n        // A repeat construction: everything is installed already. Cleared here so the reference is not held past the first construction of every type.\n        installing = undefined;\n        return;\n    }\n    installing = inst._zod;\n    Object.defineProperty(proto, key, {\n        configurable: true,\n        get() {\n            // Shadowed before computing so a re-entrant read from a recursive schema resolves to undefined instead of running the getter again.\n            Object.defineProperty(this, key, breaker);\n            const outer = broke;\n            broke = false;\n            try {\n                const value = compute(this);\n                // A result that resolved through a recursion break is recomputed once the graph is complete; everything else memoizes, undefined included.\n                if (broke)\n                    delete this[key];\n                else\n                    Object.defineProperty(this, key, { configurable: true, writable: true, value });\n                broke = broke || outer;\n                return value;\n            }\n            catch (err) {\n                // A compute that threw memoizes nothing, so a later read runs it again and fails the same way. The shadow goes with it, since leaving it installed would answer undefined for every later read.\n                delete this[key];\n                broke = broke || outer;\n                throw err;\n            }\n        },\n        set(value) {\n            Object.defineProperty(this, key, { configurable: true, writable: true, value });\n        },\n    });\n}\n/**\n * Installs `key` on `inst`'s prototype, computed by `make` on first read and cached there as an own\n * data property. One accessor per constructor rather than one per instance, because an own accessor\n * puts every instance after the first into v8 dictionary mode. The key doubles as the sentinel.\n */\nexport function installLazyProp(inst, key, make, enumerable) {\n    const proto = claim(inst, key);\n    if (!proto)\n        return;\n    Object.defineProperty(proto, key, {\n        configurable: true,\n        get() {\n            // Shadowed before computing, so a re-entrant read from a self-referential shape resolves to undefined instead of running the getter again. A data property rather than an accessor: an own accessor is the dictionary-mode transition this exists to avoid.\n            const desc = { configurable: true, writable: true, enumerable, value: undefined };\n            Object.defineProperty(this, key, desc);\n            // a compute that throws leaves the shadow behind, so later reads answer undefined instead of re-throwing; `defineLazy` did the same, and `defineLazyInternal`'s delete-on-catch would cost bytes in every bundle for a case only a throwing user getter reaches\n            desc.value = make(this);\n            Object.defineProperty(this, key, desc);\n            return desc.value;\n        },\n        set(value) {\n            Object.defineProperty(this, key, { configurable: true, writable: true, enumerable, value });\n        },\n    });\n}\n/** Marks the thunk `_catch` synthesises for a constant catch value. `Function.length` cannot tell that thunk from a user callback — rest and defaulted parameters both report arity 0 — and a user callback reads `ctx.error`, whose issues only finalize correctly against the caller's per-parse error map. Provenance can say what arity cannot. A plain string key rather than `Symbol.for`, whose call at module scope no bundler can prove pure — the same shape that anchored `urlCanParse` into every build. */\nexport const CONSTANT_CATCH = \"~constantCatch\";\n/** Wraps a constant catch value in a thunk tagged with {@link CONSTANT_CATCH}. */\nexport function constantCatch(value) {\n    const fn = () => value;\n    fn[CONSTANT_CATCH] = true;\n    return fn;\n}\n","var _a;\nimport { members as installMembers } from \"./util.js\";\n/** A special constant with type `never` */\nexport const NEVER = /*@__PURE__*/ Object.freeze({\n    status: \"aborted\",\n});\n/* Shared descriptor for installing `_zod`; defineProperty reads it\n * synchronously, so reusing one object avoids a per-instance allocation. */\nconst _zodDesc = { value: undefined, enumerable: false };\n// null where suppressing the capture would be unrecoverable: `parse()` puts the frames back with `captureStackTrace`, so without it the throw would lose its stack. also latched to null once `stackTraceLimit` proves unassignable, which a realm can do at any point by hardening Error\nlet _E = \"captureStackTrace\" in Error ? Error : null;\n// v8 captures a stack trace inside the Error constructor, which dominates a failed parse; costs only the frames, and parse() restores those. the constructor must RUN: Object.create is cheaper and passes instanceof, but Error.isError and util.types.isNativeError check an internal slot\nfunction newError(Definition) {\n    const E = _E;\n    if (E) {\n        const saved = E.stackTraceLimit;\n        if (typeof saved === \"number\") {\n            try {\n                E.stackTraceLimit = 0;\n            }\n            catch {\n                _E = null;\n                return new Definition();\n            }\n            try {\n                return new Definition();\n            }\n            finally {\n                E.stackTraceLimit = saved;\n            }\n        }\n    }\n    return new Definition();\n}\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, \n/** This trait's members, installed once on every prototype that composes it. They cannot be declared in the initializer above: that runs per instance, and the prototype is shared. */\nproto, params) {\n    // Prototype for this constructor's `_zod` internals. Lazily-derived fields (`values`, `pattern`, `optin`, …) install here once rather than as an accessor on every instance.\n    const zodProto = {};\n    // Assigning the fields in the constructor body is what gives instances in-object slots; building the object literally and reparenting it costs a second allocation and a generic property copy.\n    function Internals(def) {\n        this.def = def;\n        this.constr = _;\n        this.traits = new Set();\n    }\n    Internals.prototype = zodProto;\n    const protoMembers = proto;\n    // One trait's members land on every prototype whose chain composes it, so the answer is per prototype rather than per trait.\n    const initialized = protoMembers && new WeakSet();\n    function init(inst, def) {\n        if (!inst._zod) {\n            _zodDesc.value = new Internals(def);\n            try {\n                Object.defineProperty(inst, \"_zod\", _zodDesc);\n            }\n            finally {\n                // Cleared even on throw, so the shared descriptor never leaks one instance's internals into the next.\n                _zodDesc.value = undefined;\n            }\n        }\n        else if (inst._zod.traits.has(name)) {\n            return;\n        }\n        inst._zod.traits.add(name);\n        initializer(inst, def);\n        if (initialized) {\n            // `super(def)` from a user subclass gives `this` a prototype the subclass owns, and installing there would overwrite whatever the subclass declared. `constr` built the instance, so its prototype is the one below the subclass's that should carry the members. A receiver whose chain never reaches that prototype installs on its own, which for a plain object handed straight to `init` means `Object.prototype` — unchanged from before.\n            const own = Object.getPrototypeOf(inst);\n            const ctorProto = inst._zod.constr.prototype;\n            let up = own;\n            while (up && up !== ctorProto)\n                up = Object.getPrototypeOf(up);\n            const target = up ?? own;\n            if (!initialized.has(target)) {\n                initialized.add(target);\n                installMembers(target, protoMembers);\n            }\n        }\n        // support prototype modifications; for-in avoids the array allocation of Object.keys on the (usually empty) prototype\n        const proto = _.prototype;\n        for (const k in proto) {\n            if (!Object.prototype.hasOwnProperty.call(proto, k))\n                continue;\n            if (!(k in inst)) {\n                inst[k] = proto[k].bind(inst);\n            }\n        }\n    }\n    // doesn't work if Parent has a constructor with arguments\n    const Parent = params?.Parent ?? Object;\n    class Definition extends Parent {\n    }\n    Object.defineProperty(Definition, \"name\", { value: name });\n    function _(def) {\n        const inst = params?.Parent ? newError(Definition) : this;\n        init(inst, def);\n        const deferred = inst._zod.deferred;\n        if (deferred) {\n            for (const fn of deferred) {\n                fn();\n            }\n            // Released: initializers run once, and the list would otherwise be retained for the schema's lifetime.\n            inst._zod.deferred = undefined;\n        }\n        // Global post-processor hook. Internal: installed by `import \"zod/compile\"` to enable AOT compilation for every constructed schema. Runs last, once the instance is fully built, because it hands the instance to compile(). The post-processor is expected to be reentrancy-guarded by its own implementation.\n        const pp = globalThis.__zod_globalConfig?.postProcessor;\n        if (pp)\n            pp(inst);\n        return inst;\n    }\n    Object.defineProperty(_, \"init\", { value: init });\n    Object.defineProperty(_, Symbol.hasInstance, {\n        value: (inst) => {\n            if (params?.Parent && inst instanceof params.Parent)\n                return true;\n            return inst?._zod?.traits?.has(name);\n        },\n    });\n    Object.defineProperty(_, \"name\", { value: name });\n    return _;\n}\n//////////////////////////////   UTILITIES   ///////////////////////////////////////\nexport const $brand = /*@__PURE__*/ Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n    constructor() {\n        super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n    }\n}\nexport class $ZodEncodeError extends Error {\n    constructor(name) {\n        super(`Encountered unidirectional transform during encode: ${name}`);\n        this.name = \"ZodEncodeError\";\n    }\n}\n(_a = globalThis).__zod_globalConfig ?? (_a.__zod_globalConfig = {});\nexport const globalConfig = globalThis.__zod_globalConfig;\nexport function config(newConfig) {\n    if (newConfig)\n        Object.assign(globalConfig, newConfig);\n    return globalConfig;\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\n/* Computing the message eagerly is expensive (pretty-printed JSON of all\n * issues), so defer it until first read. The accessor functions and\n * descriptors are shared across instances to keep error construction\n * cheap; the computed message is cached on the internals object. The\n * setter preserves plain assignment semantics for consumers that\n * overwrite `message`. */\nfunction _getMessage() {\n    const internals = this._zod;\n    internals.message ?? (internals.message = JSON.stringify(internals.def, util.jsonStringifyReplacer, 2));\n    return internals.message;\n}\nfunction _setMessage(value) {\n    this._zod.message = value;\n}\nconst _messageDesc = {\n    get: _getMessage,\n    set: _setMessage,\n    enumerable: true,\n    configurable: true,\n};\nconst _issuesDesc = { value: undefined, enumerable: false };\n/* Prototypes that already carry the lazy `toString`. Seeded with the\n * intrinsics so that `init` on a foreign object — it accepts any object —\n * can never install an accessor onto a prototype we do not own. */\nconst _installedToString = /* @__PURE__ */ new WeakSet([Object.prototype, Error.prototype]);\nconst initializer = (inst, def) => {\n    inst.name = \"$ZodError\";\n    // `_zod` is already non-enumerable: $constructor's init defined it with this same descriptor\n    _issuesDesc.value = def;\n    Object.defineProperty(inst, \"issues\", _issuesDesc);\n    // Clear the shared slot; a retained `value` pins the last error's issues.\n    _issuesDesc.value = undefined;\n    Object.defineProperty(inst, \"message\", _messageDesc);\n    /* `toString` lives as a non-enumerable lazy getter on the shared\n     * prototype; on first access it caches a per-instance closure so\n     * detached usage still works. */\n    const proto = Object.getPrototypeOf(inst);\n    if (!_installedToString.has(proto)) {\n        _installedToString.add(proto);\n        Object.defineProperty(proto, \"toString\", {\n            configurable: true,\n            enumerable: false,\n            get() {\n                const value = () => this.message;\n                Object.defineProperty(this, \"toString\", { value, configurable: true, writable: true });\n                return value;\n            },\n            set(value) {\n                Object.defineProperty(this, \"toString\", { value, configurable: true, writable: true });\n            },\n        });\n    }\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, undefined, {\n    Parent: Error,\n});\n/** Get-or-create `obj[key]` as an own data property. A path segment naming an inherited member\n * (\"toString\", \"constructor\") would otherwise read through to the prototype, and assigning\n * \"__proto__\" would hit the setter instead of creating a key. */\nfunction node(obj, key, make) {\n    if (!Object.prototype.hasOwnProperty.call(obj, key)) {\n        if (key === \"__proto__\") {\n            Object.defineProperty(obj, key, { value: make(), writable: true, enumerable: true, configurable: true });\n        }\n        else {\n            obj[key] = make();\n        }\n    }\n    return obj[key];\n}\nexport function flattenError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = {};\n    const formErrors = [];\n    for (const sub of error.issues) {\n        if (sub.path.length > 0) {\n            node(fieldErrors, sub.path[0], () => []).push(mapper(sub));\n        }\n        else {\n            formErrors.push(mapper(sub));\n        }\n    }\n    return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = { _errors: [] };\n    const processError = (error, path = []) => {\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else {\n                const fullpath = [...path, ...issue.path];\n                if (fullpath.length === 0) {\n                    fieldErrors._errors.push(mapper(issue));\n                }\n                else {\n                    let curr = fieldErrors;\n                    let i = 0;\n                    while (i < fullpath.length) {\n                        const el = fullpath[i];\n                        const terminal = i === fullpath.length - 1;\n                        // `_errors` is reserved by this legacy format, so merge a matching path segment into the current node instead of treating its array as a child.\n                        if (el === \"_errors\") {\n                            if (terminal)\n                                curr._errors.push(mapper(issue));\n                            i++;\n                            continue;\n                        }\n                        // A path element may collide with an inherited property name such as\n                        // \"__proto__\" or \"constructor\". Truthiness checks read the prototype\n                        // (so no node is created, then ._errors.push throws), and bracket\n                        // assignment of \"__proto__\" hits the setter instead of creating an\n                        // own key. Guard the read with hasOwnProperty and create the node\n                        // with defineProperty so any path element becomes a real own key.\n                        if (!Object.prototype.hasOwnProperty.call(curr, el)) {\n                            Object.defineProperty(curr, el, {\n                                value: { _errors: [] },\n                                enumerable: true,\n                                writable: true,\n                                configurable: true,\n                            });\n                        }\n                        const node = curr[el];\n                        if (terminal) {\n                            node._errors.push(mapper(issue));\n                        }\n                        curr = node;\n                        i++;\n                    }\n                }\n            }\n        }\n    };\n    processError(error);\n    return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n    const result = { errors: [] };\n    const processError = (error, path = []) => {\n        var _a;\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                // regular union error\n                issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else {\n                const fullpath = [...path, ...issue.path];\n                if (fullpath.length === 0) {\n                    result.errors.push(mapper(issue));\n                    continue;\n                }\n                let curr = result;\n                let i = 0;\n                while (i < fullpath.length) {\n                    const el = fullpath[i];\n                    const terminal = i === fullpath.length - 1;\n                    if (typeof el === \"string\") {\n                        curr.properties ?? (curr.properties = {});\n                        // el may collide with an inherited property name (\"__proto__\",\n                        // \"constructor\", ...); ??= reads the prototype so the node is never\n                        // created and curr.errors.push throws. Guard with hasOwnProperty and\n                        // create the node with defineProperty so \"__proto__\" becomes a real\n                        // own key rather than invoking the prototype setter.\n                        if (!Object.prototype.hasOwnProperty.call(curr.properties, el)) {\n                            Object.defineProperty(curr.properties, el, {\n                                value: { errors: [] },\n                                enumerable: true,\n                                writable: true,\n                                configurable: true,\n                            });\n                        }\n                        curr = curr.properties[el];\n                    }\n                    else {\n                        curr.items ?? (curr.items = []);\n                        (_a = curr.items)[el] ?? (_a[el] = { errors: [] });\n                        curr = curr.items[el];\n                    }\n                    if (terminal) {\n                        curr.errors.push(mapper(issue));\n                    }\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n *   issues: [\n *     {\n *       expected: 'string',\n *       code: 'invalid_type',\n *       path: [ 'username' ],\n *       message: 'Invalid input: expected string'\n *     },\n *     {\n *       expected: 'number',\n *       code: 'invalid_type',\n *       path: [ 'favoriteNumbers', 1 ],\n *       message: 'Invalid input: expected number'\n *     }\n *   ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n *   ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n *   ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n    const segs = [];\n    const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n    for (const seg of path) {\n        if (typeof seg === \"number\")\n            segs.push(`[${seg}]`);\n        else if (typeof seg === \"symbol\")\n            segs.push(`[${JSON.stringify(String(seg))}]`);\n        else if (/[^\\w$]/.test(seg))\n            segs.push(`[${JSON.stringify(seg)}]`);\n        else {\n            if (segs.length)\n                segs.push(\".\");\n            segs.push(seg);\n        }\n    }\n    return segs.join(\"\");\n}\nexport function prettifyError(error) {\n    const lines = [];\n    // sort by path length\n    const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n    // Process each issue\n    for (const issue of issues) {\n        lines.push(`✖ ${issue.message}`);\n        if (issue.path?.length)\n            lines.push(`  → at ${toDotPath(issue.path)}`);\n    }\n    // Convert Map to formatted string\n    return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\n// Always both keys, so the `_params` read site in `_parse` sees one object shape rather than two.\nfunction finalizeParams(callee, params) {\n    return { callee: params?.callee ?? callee, Err: params?.Err };\n}\nexport const _parse = (_Err) => {\n    const fn = (schema, value, _ctx, _params) => {\n        const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n        const result = schema._zod.run({ value, issues: [] }, ctx);\n        if (result instanceof Promise) {\n            throw new core.$ZodAsyncError();\n        }\n        if (result.issues.length) {\n            const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n            util.captureStackTrace(e, _params?.callee ?? fn);\n            throw e;\n        }\n        return result.value;\n    };\n    return fn;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => {\n    const fn = async (schema, value, _ctx, params) => {\n        const ctx = _ctx ? { ..._ctx, async: true } : { async: true };\n        let result = schema._zod.run({ value, issues: [] }, ctx);\n        if (result instanceof Promise)\n            result = await result;\n        if (result.issues.length) {\n            const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n            util.captureStackTrace(e, params?.callee ?? fn);\n            throw e;\n        }\n        return result.value;\n    };\n    return fn;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    return result.issues.length ? failure(_Err, result.issues, ctx) : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\n// the error is built on the first read of `error`: finalizing the issues and constructing the instance is most of a failing parse, and a caller that only branches on `success` never pays it. a getter in the literal keeps this small; the alternative, one shared accessor descriptor plus a hidden state slot, reads ~15% faster but costs ~75 B gzipped in every bundle\nfunction failure(Err, issues, ctx) {\n    let error;\n    return {\n        success: false,\n        get error() {\n            if (!error) {\n                error = new Err(issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n                // finalizeIssue drops `input`, so the built error holds nothing; keeping the raw issues past this point pins the parsed value for the life of the result\n                issues = undefined;\n                ctx = undefined;\n            }\n            return error;\n        },\n        set error(e) {\n            error = e;\n            // a replacement makes the getter's branch unreachable, so the captures have to go here too\n            issues = undefined;\n            ctx = undefined;\n        },\n    };\n}\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, async: true } : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    return result.issues.length ? failure(_Err, result.issues, ctx) : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\n// registry mirrors of the compiler's sentinels, so this module never imports the compiler\nconst COMPILE_INVALID = /* @__PURE__ */ Symbol.for(\"zod.compile.invalid\");\nconst COMPILE_FALLBACK = /* @__PURE__ */ Symbol.for(\"zod.compile.fallback\");\n// Deliberately tiny, because v8 will not inline a body carrying the fallback's object literals and throw. Everything that is not the compiled happy path lives in validateFallback, and that split is worth ~35% on a compiled schema.\nexport const validate = ((schema, value, _ctx) => {\n    const validator = schema._zod.bag.validator;\n    if (validator !== undefined) {\n        if (validator(value) !== COMPILE_INVALID)\n            return true;\n        // a definite sentinel means the runtime would reject, so skip the re-parse; a ctx can still change the answer\n        if (validator.definite === true && _ctx === undefined)\n            return false;\n    }\n    return validateFallback(schema, value, _ctx);\n});\nfunction validateFallback(schema, value, _ctx) {\n    const ctx = _ctx\n        ? { ..._ctx, async: false, abortEarly: true }\n        : { async: false, abortEarly: true };\n    const fallbackRun = schema._zod.bag.fallbackRun;\n    let result;\n    if (fallbackRun) {\n        // skip nested fast paths on the fallback, so user callbacks keep the at-most-twice bound\n        ctx[COMPILE_FALLBACK] = true;\n        result = fallbackRun({ value, issues: [] }, ctx);\n    }\n    else {\n        result = schema._zod.run({ value, issues: [] }, ctx);\n    }\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    return result.issues.length === 0;\n}\n// no fast path: the compiler keeps async parses on the runtime, because a promise-returning callback that is not declared async compiles to a throw\nexport const validateAsync = async (schema, value, _ctx) => {\n    const ctx = _ctx\n        ? { ..._ctx, async: true, abortEarly: true }\n        : { async: true, abortEarly: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    return result.issues.length === 0;\n};\nexport const _encode = (_Err) => {\n    const parse = _parse(_Err);\n    const fn = (schema, value, _ctx, _params) => {\n        const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n        return parse(schema, value, ctx, finalizeParams(fn, _params));\n    };\n    return fn;\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => {\n    const parse = _parse(_Err);\n    const fn = (schema, value, _ctx, _params) => {\n        return parse(schema, value, _ctx, finalizeParams(fn, _params));\n    };\n    return fn;\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => {\n    const parseAsync = _parseAsync(_Err);\n    const fn = async (schema, value, _ctx, _params) => {\n        const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n        return (await parseAsync(schema, value, ctx, finalizeParams(fn, _params)));\n    };\n    return fn;\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => {\n    const parseAsync = _parseAsync(_Err);\n    const fn = async (schema, value, _ctx, _params) => {\n        return await parseAsync(schema, value, _ctx, finalizeParams(fn, _params));\n    };\n    return fn;\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n    return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n    return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n    return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n    return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n","import * as util from \"./util.js\";\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const cuid = /^[cC][0-9a-z]{6,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\nexport function nanoidOfLength(length) {\n    return new RegExp(`^[a-zA-Z0-9_-]{${length}}$`);\n}\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n    if (!version)\n        return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n    return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\n// Single character class, not an alternation: the two properties overlap (U+1F9B0-U+1F9B3), so `(A|B)+` backtracks exponentially on a failed match. The leading lookahead then demands one anchor — a pictograph, a regional indicator, or the enclosing keycap — because `\\p{Emoji_Component}` on its own covers ASCII digits, `#`, `*`, ZWJ, variation selectors and skin tone modifiers, none of which is an emoji without a base.\nconst _emoji = `^(?=[\\\\s\\\\S]*[\\\\p{Extended_Pictographic}\\\\p{Regional_Indicator}\\\\u20E3])[\\\\p{Extended_Pictographic}\\\\p{Emoji_Component}]+$`;\nexport function emoji() {\n    return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const mac = (delimiter) => {\n    const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n    return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2,3})?$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^(?=.{1,253}$)([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,63}$/;\nexport const httpProtocol = /^https?$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces) E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\n// Credit card shape: 12–19 digits, optionally separated by single spaces or single hyphens. ISO/IEC 7812 caps the PAN at 19 digits; 12 is the shortest issued length (Maestro).\nexport const creditCard = /^\\d(?:[ -]?\\d){11,18}$/;\n// ISO 4217 alpha codes from the SIX list, regenerated by scripts/update-iso-4217.ts\nexport const currencyCode = /^(?:AED|AFN|ALL|AMD|AOA|ARS|AUD|AWG|AZN|BAM|BBD|BDT|BHD|BIF|BMD|BND|BOB|BOV|BRL|BSD|BTN|BWP|BYN|BZD|CAD|CDF|CHE|CHF|CHW|CLF|CLP|CNY|COP|COU|CRC|CUP|CVE|CZK|DJF|DKK|DOP|DZD|EGP|ERN|ETB|EUR|FJD|FKP|GBP|GEL|GHS|GIP|GMD|GNF|GTQ|GYD|HKD|HNL|HTG|HUF|IDR|ILS|INR|IQD|IRR|ISK|JMD|JOD|JPY|KES|KGS|KHR|KMF|KPW|KRW|KWD|KYD|KZT|LAK|LBP|LKR|LRD|LSL|LYD|MAD|MDL|MGA|MKD|MMK|MNT|MOP|MRU|MUR|MVR|MWK|MXN|MXV|MYR|MZN|NAD|NGN|NIO|NOK|NPR|NZD|OMR|PAB|PEN|PGK|PHP|PKR|PLN|PYG|QAR|RON|RSD|RUB|RWF|SAR|SBD|SCR|SDG|SEK|SGD|SHP|SLE|SOS|SRD|SSP|STN|SVC|SYP|SZL|THB|TJS|TMT|TND|TOP|TRY|TTD|TWD|TZS|UAH|UGX|USD|USN|UYI|UYU|UYW|UZS|VED|VES|VND|VUV|WST|XAD|XAF|XAG|XAU|XBA|XBB|XBC|XBD|XCD|XCG|XDR|XOF|XPD|XPF|XPT|XSU|XTS|XUA|XXX|YER|ZAR|ZMW|ZWG)$/;\n// iban electronic format: 2-letter country, check digits 02-98 (the only values `98 - remainder` can produce), 11-30 bban characters\nexport const iban = /^[A-Z]{2}(?!00|01|99)\\d{2}[A-Z0-9]{11,30}$/;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\n/** Anchors a pattern source. The interpolation lives here rather than at the call site because\n * esbuild will not drop a `@__PURE__` call whose own argument interpolates a variable, but it\n * will drop `anchor(dateSource)`. Keeping it inline pinned `date` into every bundle. */\nfunction anchor(source) {\n    return new RegExp(`^${source}$`);\n}\nexport const date = /*@__PURE__*/ anchor(dateSource);\nfunction timeSource(args) {\n    const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n    const regex = typeof args.precision === \"number\"\n        ? args.precision === -1\n            ? `${hhmm}`\n            : args.precision === 0\n                ? `${hhmm}:[0-5]\\\\d`\n                : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n        : args.seconds\n            ? `${hhmm}:[0-5]\\\\d(?:\\\\.\\\\d+)?`\n            : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n    return regex;\n}\nexport function time(args) {\n    return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n    const opts = [\"Z\"];\n    // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n    if (args.offset)\n        opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n    // RFC 3339 mandates seconds wherever the time carries a `Z` or an offset, so only the unqualified form `local` adds may omit them\n    const qualified = `${timeSource({ precision: args.precision, seconds: true })}(?:${opts.join(\"|\")})`;\n    const timeRegex = args.local ? `${qualified}|${timeSource({ precision: args.precision })}` : qualified;\n    return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\n// the unbounded form of `string()` as a literal, so every plain string shares one instance instead of building its own\nexport const anyString = /^[\\s\\S]{0,}$/;\nexport const string = (params) => {\n    const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n    return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?$/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n    return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n    return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n","// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n    var _a;\n    inst._zod ?? (inst._zod = {});\n    inst._zod.def = def;\n    (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\n/** Default `when` for size-based checks: run only on non-nullish values with a `size`. */\nconst _whenHasSize = (payload) => {\n    const val = payload.value;\n    return !util.nullish(val) && val.size !== undefined;\n};\n/** Default `when` for length-based checks: run only on non-nullish values with a `length`. */\nconst _whenHasLength = (payload) => {\n    const val = payload.value;\n    return !util.nullish(val) && val.length !== undefined;\n};\nconst numericOriginMap = {\n    number: \"number\",\n    bigint: \"bigint\",\n    object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin: numericOriginMap[typeof payload.value] ?? origin,\n            code: \"too_big\",\n            maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin: numericOriginMap[typeof payload.value] ?? origin,\n            code: \"too_small\",\n            minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (typeof payload.value !== typeof def.value)\n            throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n        const isMultiple = typeof payload.value === \"bigint\"\n            ? // `value % 0n` throws, and nothing is a multiple of zero — the number branch already fails this way via NaN\n                def.value !== BigInt(0) && payload.value % def.value === BigInt(0)\n            : util.floatSafeRemainder(payload.value, def.value) === 0;\n        if (isMultiple)\n            return;\n        payload.issues.push({\n            origin: typeof payload.value,\n            code: \"not_multiple_of\",\n            divisor: def.value,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    def.format = def.format || \"float64\";\n    const isInt = def.format?.includes(\"int\");\n    const origin = isInt ? \"int\" : \"number\";\n    const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (isInt) {\n            if (!Number.isInteger(input)) {\n                // invalid_format issue\n                // payload.issues.push({\n                //   expected: def.format,\n                //   format: def.format,\n                //   code: \"invalid_format\",\n                //   input,\n                //   inst,\n                // });\n                // invalid_type issue\n                payload.issues.push({\n                    expected: origin,\n                    format: def.format,\n                    code: \"invalid_type\",\n                    continue: false,\n                    input,\n                    inst,\n                });\n                return;\n                // not_multiple_of issue\n                // payload.issues.push({\n                //   code: \"not_multiple_of\",\n                //   origin: \"number\",\n                //   input,\n                //   inst,\n                //   divisor: 1,\n                // });\n            }\n            if (!Number.isSafeInteger(input)) {\n                if (input > 0) {\n                    // too_big\n                    payload.issues.push({\n                        input,\n                        code: \"too_big\",\n                        maximum: Number.MAX_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        inclusive: true,\n                        continue: !def.abort,\n                    });\n                }\n                else {\n                    // too_small\n                    payload.issues.push({\n                        input,\n                        code: \"too_small\",\n                        minimum: Number.MIN_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        inclusive: true,\n                        continue: !def.abort,\n                    });\n                }\n                return;\n            }\n        }\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_small\",\n                minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_small\",\n                minimum: minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = _whenHasSize);\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size <= def.maximum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = _whenHasSize);\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size >= def.minimum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = _whenHasSize);\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size === def.size)\n            return;\n        const tooBig = size > def.size;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = _whenHasLength);\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const units = input.length;\n        // Strings are measured in Unicode code points, not UTF-16 units. A code point is at most two units, so a string that already fits in units fits in code points; only an overflow has to be counted.\n        const length = typeof input === \"string\" && units > def.maximum ? util.codePointLength(input) : units;\n        if (length <= def.maximum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = _whenHasLength);\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const units = input.length;\n        // A code point is one or two UTF-16 units, so fewer units than the floor can never reach it and twice the floor always clears it. Only in between is the exact count in doubt.\n        const length = typeof input === \"string\" && units >= def.minimum && units < def.minimum * 2\n            ? util.codePointLength(input)\n            : units;\n        if (length >= def.minimum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = _whenHasLength);\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const units = input.length;\n        // A code point is one or two UTF-16 units, so outside `[length, length * 2]` units the target is missed either way — and missed in the same direction in both measures.\n        const length = typeof input === \"string\" && units >= def.length && units <= def.length * 2\n            ? util.codePointLength(input)\n            : units;\n        if (length === def.length)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        const tooBig = length > def.length;\n        payload.issues.push({\n            origin,\n            ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n    var _a, _b;\n    $ZodCheck.init(inst, def);\n    if (def.pattern)\n        (_a = inst._zod).check ?? (_a.check = (payload) => {\n            def.pattern.lastIndex = 0;\n            if (def.pattern.test(payload.value))\n                return;\n            payload.issues.push({\n                origin: \"string\",\n                code: \"invalid_format\",\n                format: def.format,\n                input: payload.value,\n                ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n                inst,\n                continue: !def.abort,\n            });\n        });\n    else\n        (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n    $ZodCheckStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        def.pattern.lastIndex = 0;\n        if (def.pattern.test(payload.value))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"regex\",\n            input: payload.value,\n            pattern: def.pattern.toString(),\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.lowercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.uppercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const escapedRegex = util.escapeRegex(def.includes);\n    // `String.prototype.includes(sub, position)` matches `sub` at `position`\n    // OR LATER, so the pattern must allow at least `position` leading chars\n    // (`{N,}`), not exactly `position` chars (`{N}`).\n    const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position},}${escapedRegex}` : escapedRegex);\n    def.pattern = pattern;\n    inst._zod.check = (payload) => {\n        if (payload.value.includes(def.includes, def.position))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"includes\",\n            includes: def.includes,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.check = (payload) => {\n        if (payload.value.startsWith(def.prefix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"starts_with\",\n            prefix: def.prefix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.check = (payload) => {\n        if (payload.value.endsWith(def.suffix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"ends_with\",\n            suffix: def.suffix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n///////////////////////////////////\n/////    $ZodCheckProperty    /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n    if (result.issues.length) {\n        payload.issues.push(...util.prefixIssues(property, result.issues));\n    }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        const result = def.schema._zod.run({\n            value: payload.value[def.property],\n            issues: [],\n        }, {});\n        if (result instanceof Promise) {\n            return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n        }\n        handleCheckPropertyResult(result, payload, def.property);\n        return;\n    };\n});\nexport const $ZodCheckProperties = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperties\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    util.hide(inst, Symbol.iterator, function* () {\n        yield inst;\n    });\n    // key and schema snapshotted together: reading one live and the other cached lets a later mutation of the caller's shape object pair a stale key with a missing schema\n    let entries;\n    inst._zod.check = (payload) => {\n        // the base schema already typed the value, so only a nullish one is rejected here: the properties read on a primitive too, matching z.property() on a string's length\n        if (payload.value == null) {\n            payload.issues.push({ expected: \"object\", code: \"invalid_type\", input: payload.value, inst });\n            return undefined;\n        }\n        entries ?? (entries = Reflect.ownKeys(def.shape).map((key) => [key, def.shape[key]]));\n        const input = payload.value;\n        let proms;\n        for (const [key, schema] of entries) {\n            const result = schema._zod.run({ value: input[key], issues: [] }, {});\n            if (result instanceof Promise) {\n                proms ?? (proms = []);\n                proms.push(result.then((result) => handleCheckPropertyResult(result, payload, key)));\n            }\n            else {\n                handleCheckPropertyResult(result, payload, key);\n            }\n        }\n        if (proms)\n            return Promise.all(proms).then(() => undefined);\n        return undefined;\n    };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const mimeSet = new Set(def.mime);\n    inst._zod.check = (payload) => {\n        if (mimeSet.has(payload.value.type))\n            return;\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.mime,\n            input: payload.value.type,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        payload.value = def.tx(payload.value);\n    };\n});\n","export const version = {\n    major: 4,\n    minor: 6,\n    patch: 7,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n    var _a;\n    inst ?? (inst = {});\n    inst._zod.def = def; // set _def property\n    inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n    inst._zod.version = version;\n    const defChecks = inst._zod.def.checks;\n    // if inst is itself a checks.$ZodCheck, run it as a check\n    const checks = inst._zod.traits.has(\"$ZodCheck\")\n        ? [inst, ...(defChecks ?? [])]\n        : defChecks?.length\n            ? [...defChecks]\n            : [];\n    for (const ch of checks) {\n        for (const fn of ch._zod.onattach) {\n            fn(inst);\n        }\n    }\n    if (checks.length === 0) {\n        // deferred initializer inst._zod.parse is not yet defined\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        inst._zod.deferred?.push(() => {\n            inst._zod.run = inst._zod.parse;\n        });\n    }\n    else {\n        const runChecks = (payload, checks, ctx) => {\n            if (payload.memo)\n                return payload;\n            let isAborted = util.aborted(payload);\n            let asyncResult;\n            for (const ch of checks) {\n                if (ch._zod.def.when) {\n                    if (util.explicitlyAborted(payload))\n                        continue;\n                    const shouldRun = ch._zod.def.when(payload);\n                    if (!shouldRun)\n                        continue;\n                }\n                else if (isAborted) {\n                    continue;\n                }\n                const currLen = payload.issues.length;\n                const _ = ch._zod.check(payload);\n                if (_ instanceof Promise && ctx?.async === false) {\n                    throw new core.$ZodAsyncError();\n                }\n                if (asyncResult || _ instanceof Promise) {\n                    asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n                        await _;\n                        const nextLen = payload.issues.length;\n                        if (nextLen === currLen)\n                            return;\n                        util.attachSchema(payload.issues, currLen, inst);\n                        if (!isAborted)\n                            isAborted = util.aborted(payload, currLen);\n                    });\n                }\n                else {\n                    const nextLen = payload.issues.length;\n                    if (nextLen === currLen)\n                        continue;\n                    util.attachSchema(payload.issues, currLen, inst);\n                    if (!isAborted)\n                        isAborted = util.aborted(payload, currLen);\n                }\n            }\n            if (asyncResult) {\n                return asyncResult.then(() => {\n                    return payload;\n                });\n            }\n            return payload;\n        };\n        const handleCanaryResult = (canary, payload, ctx) => {\n            // abort if the canary is aborted\n            if (util.aborted(canary)) {\n                canary.aborted = true;\n                return canary;\n            }\n            // run checks first, then\n            const checkResult = runChecks(payload, checks, ctx);\n            if (checkResult instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n            }\n            return inst._zod.parse(checkResult, ctx);\n        };\n        inst._zod.run = (payload, ctx) => {\n            if (ctx.skipChecks) {\n                return inst._zod.parse(payload, ctx);\n            }\n            if (ctx.direction === \"backward\") {\n                // run canary initial pass (no checks)\n                const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n                if (canary instanceof Promise) {\n                    return canary.then((canary) => {\n                        return handleCanaryResult(canary, payload, ctx);\n                    });\n                }\n                return handleCanaryResult(canary, payload, ctx);\n            }\n            // forward\n            const result = inst._zod.parse(payload, ctx);\n            if (result instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return result.then((result) => runChecks(result, checks, ctx));\n            }\n            return runChecks(result, checks, ctx);\n        };\n    }\n}, {\n    // Wrappers extend this by installing a richer factory over it; reading it eagerly would defeat the laziness.\n    get \"~standard\"() {\n        return util.hide(this, \"~standard\", standardProps(this));\n    },\n    set \"~standard\"(value) {\n        util.own(this, \"~standard\", value);\n    },\n});\n/** The Standard Schema surface for `inst`. Shared so wrappers can extend it without forcing it. */\n// a Standard Schema result only reports issues, so a failure finalizes them straight off the raw payload: no ZodError, and no lazy result to read through\nconst toStandardResult = (r, ctx) => r.issues.length ? { issues: r.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())) } : { value: r.value };\nasync function validateAsync(inst, value) {\n    const ctx = { async: true };\n    return toStandardResult((await inst._zod.run({ value, issues: [] }, ctx)), ctx);\n}\nexport function standardProps(inst) {\n    return {\n        validate: (value) => {\n            const ctx = { async: false };\n            try {\n                const r = inst._zod.run({ value, issues: [] }, ctx);\n                if (!(r instanceof Promise))\n                    return toStandardResult(r, ctx);\n            }\n            catch (_) { }\n            // async function so a synchronously throwing check rejects instead of escaping validate\n            return validateAsync(inst, value);\n        },\n        vendor: \"zod\",\n        version: 1,\n    };\n}\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // a format's own pattern, else unbounded; a template literal derives the check-aware form itself\n    inst._zod.pattern = def.pattern ?? regexes.anyString;\n    inst._zod.parse = (payload, _) => {\n        if (def.coerce)\n            try {\n                payload.value = String(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"string\")\n            return payload;\n        payload.issues.push({\n            expected: \"string\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n    // check initialization must come first\n    checks.$ZodCheckStringFormat.init(inst, def);\n    $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.guid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n    if (def.version) {\n        const versionMap = {\n            v1: 1,\n            v2: 2,\n            v3: 3,\n            v4: 4,\n            v5: 5,\n            v6: 6,\n            v7: 7,\n            v8: 8,\n        };\n        const v = versionMap[def.version];\n        if (v === undefined)\n            throw new Error(`Invalid UUID version: \"${def.version}\"`);\n        def.pattern ?? (def.pattern = regexes.uuid(v));\n    }\n    else\n        def.pattern ?? (def.pattern = regexes.uuid());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.email);\n    $ZodStringFormat.init(inst, def);\n});\n/** The `://` guard rejected the input before the URL constructor saw it. */\nexport const URL_BAD_FORMAT = 1;\n/** The URL parser rejected the input. */\nexport const URL_UNPARSEABLE = 2;\nexport function canParseURL(input) {\n    try {\n        if (typeof URL !== \"undefined\" && typeof URL.canParse === \"function\")\n            return URL.canParse(input);\n        new URL(input);\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport function validateURL(trimmed, def) {\n    if (!(\"normalize\" in def) && !(\"hostname\" in def) && !(\"protocol\" in def)) {\n        return canParseURL(trimmed) || URL_UNPARSEABLE;\n    }\n    return parseURLObject(trimmed, def);\n}\n/** Parses a URL while preserving the non-normalizing HTTP guard. */\nexport function parseURLObject(trimmed, def) {\n    // When normalize is off, require :// for http/https URLs. This prevents strings like \"http:example.com\" or \"https:/path\" from being silently accepted\n    if (!def.normalize && def.protocol?.source === regexes.httpProtocol.source && !/^https?:\\/\\//i.test(trimmed)) {\n        return URL_BAD_FORMAT;\n    }\n    try {\n        if (typeof URL !== \"undefined\") {\n            const URLStatic = URL;\n            if (typeof URLStatic.parse === \"function\")\n                return URLStatic.parse(trimmed) ?? URL_UNPARSEABLE;\n        }\n        // @ts-ignore\n        return new URL(trimmed);\n    }\n    catch {\n        return URL_UNPARSEABLE;\n    }\n}\nconst asciiTabOrNewline = /[\\t\\n\\r]/g;\n/** The URL parser deletes every ASCII tab, LF and CR from its input before it parses, so `new URL(\"https://exa\\nmple.com\")` reports on `example.com`. Applying the same deletion to the returned value closes the half of that divergence which can move the host; the parser's other rewrite, stripping C0 controls at the edges, cannot. */\nexport function stripTabAndNewline(value) {\n    return value.replace(asciiTabOrNewline, \"\");\n}\nexport function urlHostnameOk(url, hostname) {\n    hostname.lastIndex = 0;\n    return hostname.test(url.hostname);\n}\nexport function urlProtocolOk(url, protocol) {\n    protocol.lastIndex = 0;\n    return protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol);\n}\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        try {\n            // Trim whitespace from input\n            const trimmed = payload.value.trim();\n            const url = validateURL(trimmed, def);\n            if (url === URL_BAD_FORMAT) {\n                payload.issues.push({\n                    code: \"invalid_format\",\n                    format: \"url\",\n                    note: \"Invalid URL format\",\n                    input: payload.value,\n                    inst,\n                    continue: !def.abort,\n                });\n                return;\n            }\n            if (url === URL_UNPARSEABLE) {\n                payload.issues.push({\n                    code: \"invalid_format\",\n                    format: \"url\",\n                    input: payload.value,\n                    inst,\n                    continue: !def.abort,\n                });\n                return;\n            }\n            if (url === true) {\n                payload.value = stripTabAndNewline(trimmed);\n                return;\n            }\n            if (def.hostname && !urlHostnameOk(url, def.hostname)) {\n                payload.issues.push({\n                    code: \"invalid_format\",\n                    format: \"url\",\n                    note: \"Invalid hostname\",\n                    pattern: def.hostname.source,\n                    input: payload.value,\n                    inst,\n                    continue: !def.abort,\n                });\n            }\n            if (def.protocol && !urlProtocolOk(url, def.protocol)) {\n                payload.issues.push({\n                    code: \"invalid_format\",\n                    format: \"url\",\n                    note: \"Invalid protocol\",\n                    pattern: def.protocol.source,\n                    input: payload.value,\n                    inst,\n                    continue: !def.abort,\n                });\n            }\n            // Set the output value based on normalize flag\n            payload.value = def.normalize ? url.href : stripTabAndNewline(trimmed);\n            return;\n        }\n        catch (_) {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"url\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.emoji());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n    if (def.length !== undefined && (!Number.isInteger(def.length) || def.length < 1))\n        throw new Error(`Invalid nanoid length: ${def.length}`);\n    def.pattern ?? (def.pattern = def.length === undefined ? regexes.nanoid : regexes.nanoidOfLength(def.length));\n    $ZodStringFormat.init(inst, def);\n});\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link $ZodCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid2);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ulid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.xid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ksuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.datetime(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.date);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.time(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.duration);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv4);\n    $ZodStringFormat.init(inst, def);\n});\n/** An IPv6 address is written with hex digits, colons and dots, and nothing else. The guard is what makes the check below an IPv6 check: `new URL(\"http://[...]\")` parses an authority, not an address, so `@` and `\\` re-delimit it and `\"::@1\\\\\"` validates against the host `0.0.0.1`. The URL parser also deletes ASCII tab, LF and CR rather than failing, which is how `\"::1\\n\"` validated as `::1`. */\nconst ipv6Alphabet = /^[0-9a-fA-F:.]+$/;\nexport function isValidIPv6(value) {\n    if (!ipv6Alphabet.test(value))\n        return false;\n    return canParseURL(`http://[${value}]`);\n}\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv6);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (!isValidIPv6(payload.value)) {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"ipv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv4);\n    $ZodStringFormat.init(inst, def);\n});\nexport function isValidCIDRv6(value) {\n    const parts = value.split(\"/\");\n    if (parts.length !== 2)\n        return false;\n    const [address, prefix] = parts;\n    if (!prefix)\n        return false;\n    const prefixNum = Number(prefix);\n    if (`${prefixNum}` !== prefix)\n        return false;\n    if (prefixNum < 0 || prefixNum > 128)\n        return false;\n    return isValidIPv6(address);\n}\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (!isValidCIDRv6(payload.value)) {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"cidrv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64(data) {\n    if (data === \"\")\n        return true;\n    // atob ignores whitespace, so reject it up front.\n    if (/\\s/.test(data))\n        return false;\n    if (data.length % 4 !== 0)\n        return false;\n    try {\n        // @ts-ignore\n        atob(data);\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\n// lax on purpose: the quantified regexes.base64 overflows the regex stack on multi-MB input and its leading ^$| alternation leaks through template-literal composition; isValidBase64 enforces length and padding\nexport const base64Charset = /^[0-9a-zA-Z+/]*={0,2}$/;\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n    def.pattern ?? (def.pattern = base64Charset);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidBase64(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n//////////////////////////////   ZodBase64URL   //////////////////////////////\n// lax on purpose: the quantified regexes.base64url overflows the regex stack on multi-MB input; isValidBase64 enforces length on the padded string\nexport const base64urlCharset = /^[A-Za-z0-9_-]*$/;\nexport function isValidBase64URL(data) {\n    if (!base64urlCharset.test(data))\n        return false;\n    const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n    const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n    return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n    def.pattern ?? (def.pattern = base64urlCharset);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidBase64URL(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64url\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.e164);\n    $ZodStringFormat.init(inst, def);\n});\n//////////////////////////////   ZodCreditCard   //////////////////////////////\nconst CC_SANITIZE = /[- ]/g;\n/** Luhn checksum on a digit-only string. Adapted from valibot (MIT). */\nfunction isLuhnAlgo(digits) {\n    let length = digits.length;\n    let bit = 1;\n    let sum = 0;\n    while (length) {\n        const value = digits.charCodeAt(--length) - 48;\n        bit ^= 1;\n        sum += bit ? [0, 2, 4, 6, 8, 1, 3, 5, 7, 9][value] : value;\n    }\n    return sum % 10 === 0;\n}\nexport function isValidCreditCard(input) {\n    if (!regexes.creditCard.test(input))\n        return false;\n    return isLuhnAlgo(input.replace(CC_SANITIZE, \"\"));\n}\nexport const $ZodCreditCard = /*@__PURE__*/ core.$constructor(\"$ZodCreditCard\", (inst, def) => {\n    // Shape only — the Luhn check below is not expressible as a pattern, so consumers of `pattern` (JSON Schema, template literals) get the length and separator rules alone.\n    def.pattern ?? (def.pattern = regexes.creditCard);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidCreditCard(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"credit_card\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n//////////////////////////////   ZodIBAN   //////////////////////////////\n// iso 7064 mod 97-10 checksum without BigInt\nfunction isIso7064Mod97(iban) {\n    let remainder = 0;\n    const len = iban.length;\n    for (let i = 4; i < len; i++) {\n        const code = iban.charCodeAt(i);\n        remainder = (code >= 65 ? remainder * 100 + (code - 55) : remainder * 10 + (code - 48)) % 97;\n    }\n    for (let i = 0; i < 4; i++) {\n        const code = iban.charCodeAt(i);\n        remainder = (code >= 65 ? remainder * 100 + (code - 55) : remainder * 10 + (code - 48)) % 97;\n    }\n    return remainder === 1;\n}\nexport function isValidIBAN(input) {\n    if (!regexes.iban.test(input))\n        return false;\n    return isIso7064Mod97(input);\n}\nexport const $ZodIBAN = /*@__PURE__*/ core.$constructor(\"$ZodIBAN\", (inst, def) => {\n    // shape only — checksum is not expressible as a pattern\n    def.pattern ?? (def.pattern = regexes.iban);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidIBAN(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"iban\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n//////////////////////////////   ZodJWT   //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n    try {\n        const tokensParts = token.split(\".\");\n        if (tokensParts.length !== 3)\n            return false;\n        const [header] = tokensParts;\n        if (!header)\n            return false;\n        // @ts-ignore\n        const parsedHeader = JSON.parse(atob(header));\n        if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n            return false;\n        if (!parsedHeader.alg)\n            return false;\n        if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidJWT(payload.value, def.alg))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"jwt\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (def.fn(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: def.format,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.number;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Number(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n            return payload;\n        }\n        const received = typeof input === \"number\"\n            ? Number.isNaN(input)\n                ? \"NaN\"\n                : !Number.isFinite(input)\n                    ? String(input)\n                    : undefined\n            : undefined;\n        payload.issues.push({\n            expected: \"number\",\n            code: \"invalid_type\",\n            input,\n            inst,\n            ...(received ? { received } : {}),\n        });\n        return payload;\n    };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n    checks.$ZodCheckNumberFormat.init(inst, def);\n    $ZodNumber.init(inst, def); // no format checks\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.boolean;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Boolean(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"boolean\")\n            return payload;\n        payload.issues.push({\n            expected: \"boolean\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.bigint;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = BigInt(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"bigint\")\n            return payload;\n        payload.issues.push({\n            expected: \"bigint\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n    checks.$ZodCheckBigIntFormat.init(inst, def);\n    $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"symbol\")\n            return payload;\n        payload.issues.push({\n            expected: \"symbol\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.undefined;\n    inst._zod.values = new Set([undefined]);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"undefined\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.null;\n    inst._zod.values = new Set([null]);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (input === null)\n            return payload;\n        payload.issues.push({\n            expected: \"null\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        payload.issues.push({\n            expected: \"never\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"void\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce) {\n            try {\n                payload.value = new Date(payload.value);\n            }\n            catch (_err) { }\n        }\n        const input = payload.value;\n        const isDate = input instanceof Date;\n        const isValidDate = isDate && !Number.isNaN(input.getTime());\n        if (isValidDate)\n            return payload;\n        payload.issues.push({\n            expected: \"date\",\n            code: \"invalid_type\",\n            input,\n            ...(isDate ? { received: \"Invalid Date\" } : {}),\n            inst,\n        });\n        return payload;\n    };\n});\n// an oversized container fails its leading size checks before any element is parsed\nfunction capSize(inst, size) {\n    const caps = util.sizeCaps(inst._zod.def.checks);\n    if (!caps.length)\n        return;\n    const cap = Math.min(...caps.map((c) => c[0]));\n    const parse = inst._zod.parse;\n    inst._zod.parse = (payload, ctx) => {\n        const n = size(payload.value);\n        if (n > cap && !ctx?.skipChecks && ctx?.direction !== \"backward\") {\n            for (const [max, ch] of util.sizeCaps(inst._zod.def.checks)) {\n                if (n > max && ch._zod.def.when(payload)) {\n                    const start = payload.issues.length;\n                    ch._zod.check(payload);\n                    // the value is still the raw input, so no later check may read it\n                    payload.issues[start].continue = false;\n                    util.attachSchema(payload.issues, start, inst);\n                    return payload;\n                }\n            }\n        }\n        return parse(payload, ctx);\n    };\n}\nconst arraySize = (input) => (Array.isArray(input) ? input.length : -1);\nconst mapSize = (input) => (input instanceof Map ? input.size : -1);\nconst setSize = (input) => (input instanceof Set ? input.size : -1);\nfunction handleArrayResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const memo = core.globalConfig.memoizer;\n    memo?.attach(inst);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                expected: \"array\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = memo ? memo.alloc(inst, payload, Array(input.length), ctx) : Array(input.length);\n        const proms = [];\n        const abortEarly = ctx?.abortEarly;\n        for (let i = 0; i < input.length; i++) {\n            const item = input[i];\n            const result = def.element._zod.run({\n                value: item,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n            }\n            else {\n                handleArrayResult(result, payload, i);\n                // the element's payload is authoritative here, since handleArrayResult forwards every issue; an object's is not, because it drops a failed absent optional\n                if (abortEarly && result.issues.length !== 0 && util.aborted(result))\n                    break;\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload; //handleArrayResultsAsync(parseResults, final);\n    };\n    capSize(inst, arraySize);\n});\nfunction handlePropertyResult(result, final, key, input, optin, optout) {\n    const isPresent = key in input;\n    const isOptionalOut = optout === \"optional\";\n    // The middle rung means \"absence permitted, nothing supplied in its place\", so an absent key contributes nothing — whatever the schema made of `undefined` is invented, not substituted. Only `optional` reaches this with a value: `defaulted` substitutes, and a schema that isn't optional-out has to keep the key.\n    if (!isPresent && isOptionalOut && optin === \"optional\") {\n        return;\n    }\n    if (result.issues.length) {\n        // For optional-in/out schemas, ignore errors on absent keys.\n        if (optin !== undefined && isOptionalOut && !isPresent) {\n            return;\n        }\n        final.issues.push(...util.prefixIssues(key, result.issues));\n    }\n    if (!isPresent && optin === undefined) {\n        if (!result.issues.length) {\n            final.issues.push({\n                code: \"invalid_type\",\n                expected: \"nonoptional\",\n                input: undefined,\n                path: [key],\n            });\n        }\n        return;\n    }\n    if (result.value === undefined) {\n        if (isPresent || (optin === \"defaulted\" && !isOptionalOut)) {\n            final.value[key] = undefined;\n        }\n    }\n    else {\n        final.value[key] = result.value;\n    }\n}\n// one shared instance; a fresh [] per schema cost 56 bytes retained\nconst NO_SYMBOL_KEYS = [];\nfunction normalizeDef(def) {\n    const keys = Object.keys(def.shape);\n    const ownSymbols = Object.getOwnPropertySymbols(def.shape);\n    const symbolKeys = ownSymbols.length ? ownSymbols : NO_SYMBOL_KEYS;\n    // aliases `keys` when there are no symbols, so a string-only shape keeps one array\n    const allKeys = symbolKeys.length ? [...keys, ...symbolKeys] : keys;\n    for (const k of allKeys) {\n        if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n            throw new Error(`Invalid element at key \"${String(k)}\": expected a Zod schema`);\n        }\n    }\n    const okeys = util.optionalKeys(def.shape);\n    return {\n        ...def,\n        allKeys,\n        symbolKeys,\n        // string-only: handleCatchall matches it against `for...in`, which never yields a symbol\n        keySet: new Set(keys),\n        numKeys: keys.length,\n        optionalKeys: new Set(okeys),\n    };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst, abortEarly) {\n    const unrecognized = [];\n    const keySet = def.keySet;\n    const _catchall = def.catchall._zod;\n    const t = _catchall.def.type;\n    const optin = _catchall.optin;\n    const optout = _catchall.optout;\n    // starts at 0, not the current length: the shape phase already ran and may have aborted\n    let seen = 0;\n    for (const key in input) {\n        if (abortEarly && payload.issues.length !== seen) {\n            if (util.aborted(payload, seen))\n                break;\n            seen = payload.issues.length;\n        }\n        // Must precede the __proto__ branch: a declared key is not unrecognized, even though the shape loop deliberately strips __proto__ from the parsed output.\n        if (keySet.has(key))\n            continue;\n        // Don't copy an undeclared __proto__ into the result; assignment to a plain {} would replace the result prototype. But in strict mode it is still an unknown key, so report it before skipping.\n        if (key === \"__proto__\") {\n            if (t === \"never\")\n                unrecognized.push(key);\n            continue;\n        }\n        if (t === \"never\") {\n            unrecognized.push(key);\n            continue;\n        }\n        const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n        if (r instanceof Promise) {\n            proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, optin, optout)));\n        }\n        else {\n            handlePropertyResult(r, payload, key, input, optin, optout);\n        }\n    }\n    if (unrecognized.length) {\n        payload.issues.push({\n            code: \"unrecognized_keys\",\n            keys: unrecognized,\n            input,\n            inst,\n            // Describes the shape of the input, not the validity of the parsed value, so it never aborts. The parse still fails; the schema's own checks just get to run first, and an enclosing intersection can reconcile the key against a sibling operand.\n            continue: true,\n        });\n    }\n    if (!proms.length)\n        return payload;\n    return Promise.all(proms).then(() => {\n        return payload;\n    });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodType.init(inst, def);\n    const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n    // a cloned def carries its source's accessor, which knows the shape it answers from; adopting that keeps the clone's keys readable without running it\n    const sh = desc?.get ? desc.get.raw : (def.shape ?? {});\n    if (sh) {\n        // Freezes the shape on first read, so its getters resolve once and every later read sees the same schemas.\n        const get = () => {\n            const newSh = { ...sh };\n            Object.defineProperty(def, \"shape\", { value: newSh });\n            get.raw = newSh;\n            return newSh;\n        };\n        get.raw = sh;\n        Object.defineProperty(def, \"shape\", { get });\n    }\n    const _normalized = util.cached(() => normalizeDef(def));\n    util.defineLazyInternal(inst, \"propValues\", (zod) => {\n        const shape = zod.def.shape;\n        const propValues = {};\n        for (const key in shape) {\n            const field = shape[key]._zod;\n            if (field.values) {\n                if (!Object.prototype.hasOwnProperty.call(propValues, key)) {\n                    util.assignProp(propValues, key, new Set());\n                }\n                for (const v of field.values)\n                    propValues[key].add(v);\n                // An omittable slot reads back as undefined at a discriminator lookup, so it has to claim undefined: two options that can both omit the key are not discriminable on it.\n                if (field.optin !== undefined)\n                    propValues[key].add(undefined);\n            }\n        }\n        return propValues;\n    });\n    const isObject = util.isObject;\n    const catchall = def.catchall;\n    let value;\n    const memo = core.globalConfig.memoizer;\n    memo?.attach(inst);\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = memo ? memo.alloc(inst, payload, {}, ctx) : {};\n        const proms = [];\n        const shape = value.shape;\n        const abortEarly = ctx?.abortEarly;\n        let seen = payload.issues.length;\n        for (const key of value.allKeys) {\n            if (abortEarly && payload.issues.length !== seen) {\n                if (util.aborted(payload, seen))\n                    break;\n                seen = payload.issues.length;\n            }\n            if (key === \"__proto__\")\n                continue;\n            const el = shape[key];\n            const optin = el._zod.optin;\n            const optout = el._zod.optout;\n            const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n            if (r instanceof Promise) {\n                proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, optin, optout)));\n            }\n            else {\n                handlePropertyResult(r, payload, key, input, optin, optout);\n            }\n        }\n        if (!catchall) {\n            return proms.length ? Promise.all(proms).then(() => payload) : payload;\n        }\n        return handleCatchall(proms, input, payload, ctx, _normalized.value, inst, abortEarly === true);\n    };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodObject.init(inst, def);\n    const superParse = inst._zod.parse;\n    const _normalized = util.cached(() => normalizeDef(def));\n    const memo = core.globalConfig.memoizer;\n    const generateFastpass = (shape) => {\n        const normalized = _normalized.value;\n        const syms = normalized.symbolKeys;\n        // a symbol has no source literal, so it is read as `syms[i]` off the closed-over scope\n        const doc = new Doc([\"payload\", \"ctx\"], { shape, inst, memo, syms });\n        const parseStr = (k) => `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n        // prefixes in place, like util.prefixIssues. newResult must land before the early return: a catchall runs after this and would otherwise write onto the caller's input\n        const prefixStr = (id, k) => `\n          let ${id}_ab = false;\n          for (let i = 0; i < ${id}.issues.length; i++) {\n            const iss = ${id}.issues[i];\n            iss.path = iss.path ? [${k}, ...iss.path] : [${k}];\n            payload.issues.push(iss);\n            if (iss.continue !== true) ${id}_ab = true;\n          }\n          if (${id}_ab && ctx && ctx.abortEarly) {\n            payload.value = newResult;\n            return payload;\n          }`;\n        doc.write(`const input = payload.value;`);\n        const ids = Object.create(null);\n        let counter = 0;\n        for (const key of normalized.allKeys) {\n            ids[key] = `key_${counter++}`;\n        }\n        // A: preserve key order {\n        doc.write(memo ? `const newResult = memo.alloc(inst, payload, {}, ctx);` : `const newResult = {};`);\n        for (const key of normalized.allKeys) {\n            if (key === \"__proto__\")\n                continue;\n            const id = ids[key];\n            const k = typeof key === \"symbol\" ? `syms[${syms.indexOf(key)}]` : util.esc(key);\n            const isPresent = `${k} in input`;\n            const schema = shape[key];\n            const optin = schema?._zod?.optin;\n            const isOptionalIn = optin !== undefined;\n            const isOptionalOut = schema?._zod?.optout === \"optional\";\n            doc.write(`const ${id} = ${parseStr(k)};`);\n            if (isOptionalIn && isOptionalOut) {\n                // For optional-in/out schemas, ignore errors on absent keys — and, like the interpreted path, drop the value produced alongside them. The middle rung goes further: it permits absence without supplying anything in its place, so an absent key contributes nothing at all.\n                const assign = optin === \"optional\" ? `${id}_present` : `${id}.value !== undefined || ${id}_present`;\n                doc.write(`\n        const ${id}_present = ${isPresent};\n        if (!${id}.issues.length || ${id}_present) {\n          if (${id}.issues.length) {${prefixStr(id, k)}\n          }\n\n          if (${assign}) {\n            newResult[${k}] = ${id}.value;\n          }\n        }\n\n      `);\n            }\n            else if (!isOptionalIn) {\n                doc.write(`\n        const ${id}_present = ${isPresent};\n        if (${id}.issues.length) {${prefixStr(id, k)}\n        }\n        if (!${id}_present && !${id}.issues.length) {\n          payload.issues.push({\n            code: \"invalid_type\",\n            expected: \"nonoptional\",\n            input: undefined,\n            path: [${k}]\n          });\n          if (ctx && ctx.abortEarly) {\n            payload.value = newResult;\n            return payload;\n          }\n        }\n\n        if (${id}_present) {\n          newResult[${k}] = ${id}.value;\n        }\n\n      `);\n            }\n            else {\n                doc.write(`\n        if (${id}.issues.length) {${prefixStr(id, k)}\n        }\n      `);\n                if (optin === \"defaulted\") {\n                    doc.write(`newResult[${k}] = ${id}.value;`);\n                }\n                else {\n                    doc.write(`\n        if (${id}.value !== undefined || ${isPresent}) {\n          newResult[${k}] = ${id}.value;\n        }\n      `);\n                }\n            }\n        }\n        doc.write(`payload.value = newResult;`);\n        doc.write(`return payload;`);\n        // closing `shape` in is what pays: turbofan specializes the parser against that one shape object, so every `shape[k]._zod.run` folds to a known callee. as a parameter it stays a generic load and measures 13% slower even with the forwarding frame gone\n        return doc.compile();\n    };\n    let fastpass;\n    const isObject = util.isObject;\n    const jit = !core.globalConfig.jitless;\n    const allowsEval = util.allowsEval;\n    const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n            // always synchronous\n            if (!fastpass)\n                fastpass = generateFastpass(def.shape);\n            payload = fastpass(payload, ctx);\n            if (!catchall)\n                return payload;\n            return handleCatchall([], input, payload, ctx, value, inst, ctx?.abortEarly === true);\n        }\n        return superParse(payload, ctx);\n    };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n    for (const result of results) {\n        if (result.issues.length === 0) {\n            final.value = result.value;\n            return final;\n        }\n    }\n    const nonaborted = results.filter((r) => !util.aborted(r));\n    if (nonaborted.length === 1) {\n        final.value = nonaborted[0].value;\n        return nonaborted[0];\n    }\n    final.issues.push({\n        code: \"invalid_union\",\n        input: final.value,\n        inst,\n        errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n    });\n    return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.options.some((o) => o._zod.optin === \"defaulted\")\n        ? \"defaulted\"\n        : zod.def.options.some((o) => o._zod.optin !== undefined)\n            ? \"optional\"\n            : undefined);\n    util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n    util.defineLazyInternal(inst, \"values\", (zod) => {\n        if (zod.def.options.every((o) => o._zod.values)) {\n            return new Set(zod.def.options.flatMap((option) => Array.from(option._zod.values)));\n        }\n        return undefined;\n    });\n    util.defineLazyInternal(inst, \"pattern\", (zod) => {\n        if (zod.def.options.every((o) => o._zod.pattern)) {\n            const patterns = zod.def.options.map((o) => o._zod.pattern);\n            return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n        }\n        return undefined;\n    });\n    const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n    inst._zod.parse = (payload, ctx) => {\n        if (first) {\n            return first(payload, ctx);\n        }\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                if (result.issues.length === 0)\n                    return result;\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n    const matches = [];\n    for (let i = 0; i < results.length; i++) {\n        if (results[i].issues.length === 0)\n            matches.push(i);\n    }\n    if (matches.length === 1) {\n        final.value = results[matches[0]].value;\n        return final;\n    }\n    if (matches.length === 0) {\n        // No matches - same as regular union\n        final.issues.push({\n            code: \"invalid_union\",\n            input: final.value,\n            inst,\n            errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        });\n    }\n    else {\n        // Multiple matches - exclusive union failure\n        final.issues.push({\n            code: \"invalid_union\",\n            input: final.value,\n            inst,\n            errors: [],\n            inclusive: false,\n            matches,\n        });\n    }\n    return final;\n}\nexport const $ZodXor = /*@__PURE__*/ core.$constructor(\"$ZodXor\", (inst, def) => {\n    $ZodUnion.init(inst, def);\n    def.inclusive = false;\n    const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n    inst._zod.parse = (payload, ctx) => {\n        if (first) {\n            return first(payload, ctx);\n        }\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleExclusiveUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleExclusiveUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\n/** Returns the option whose discriminator claims `value`, or throws if ambiguous. */\nexport function getDiscriminatedOption(union, value) {\n    const internals = union._zod;\n    let map = internals.bag.optionsMap;\n    if (!map) {\n        map = discriminatorMap(internals.def);\n        internals.bag.optionsMap = map;\n    }\n    const option = map.get(value);\n    if (option === null)\n        throw new Error(`Ambiguous discriminator value \"${String(value)}\"`);\n    return option;\n}\nfunction discriminatorMap(def) {\n    const map = new Map();\n    for (const option of def.options) {\n        const values = option._zod.propValues?.[def.discriminator];\n        if (!values || values.size === 0)\n            throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n        for (const value of values) {\n            if (map.has(value)) {\n                if (value !== undefined)\n                    throw new Error(`Duplicate discriminator value \"${String(value)}\"`);\n                // keep the collision marked so a later member cannot reclaim it\n                map.set(value, null);\n            }\n            else {\n                map.set(value, option);\n            }\n        }\n    }\n    return map;\n}\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n    def.inclusive = false;\n    $ZodUnion.init(inst, def);\n    const _super = inst._zod.parse;\n    util.defineLazyInternal(inst, \"propValues\", (zod) => {\n        const propValues = {};\n        let undefinedCount = 0;\n        for (const option of zod.def.options) {\n            const pv = option._zod.propValues;\n            if (!pv || Object.keys(pv).length === 0)\n                throw new Error(`Invalid discriminated union option at index \"${zod.def.options.indexOf(option)}\"`);\n            if (pv[zod.def.discriminator]?.has(undefined))\n                undefinedCount++;\n            for (const [k, v] of Object.entries(pv)) {\n                if (!Object.prototype.hasOwnProperty.call(propValues, k)) {\n                    util.assignProp(propValues, k, new Set());\n                }\n                for (const val of v) {\n                    propValues[k].add(val);\n                }\n            }\n        }\n        if (!zod.def.unionFallback && undefinedCount > 1)\n            propValues[zod.def.discriminator]?.delete(undefined);\n        return propValues;\n    });\n    // Checked now rather than in the lookup map below, so an option that lacks the discriminator fails at the `discriminatedUnion` call instead of on the first object parsed. Options whose shape cannot be enumerated without resolving it — pipes and lazies — are left to the map.\n    def.options.forEach((option, i) => {\n        const propShape = util.rawShape(option._zod.def);\n        if (propShape && !Object.prototype.hasOwnProperty.call(propShape, def.discriminator)) {\n            throw new Error(`Invalid discriminated union option at index \"${i}\"`);\n        }\n    });\n    const disc = util.cached(() => discriminatorMap(def));\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isObject(input)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"object\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const value = input?.[def.discriminator];\n        const opt = disc.value.get(value);\n        // forward metadata cannot choose an encoder for an absent tag\n        if (opt && (value !== undefined || ctx.direction !== \"backward\")) {\n            return opt._zod.run(payload, ctx);\n        }\n        // Fall back to union matching when the fast discriminator path fails:\n        // - explicitly enabled via unionFallback, or\n        // - during backward direction (encode), since codec-based discriminators have different values in forward vs backward directions\n        if (def.unionFallback || ctx.direction === \"backward\") {\n            return _super(payload, ctx);\n        }\n        // no matching discriminator\n        payload.issues.push({\n            code: \"invalid_union\",\n            errors: [],\n            note: \"No matching discriminator\",\n            discriminator: def.discriminator,\n            options: Array.from(disc.value.keys()).filter((value) => disc.value.get(value) !== null),\n            input,\n            path: [def.discriminator],\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n        const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n        const async = left instanceof Promise || right instanceof Promise;\n        if (async) {\n            return Promise.all([left, right]).then(([left, right]) => {\n                return handleIntersectionResults(payload, left, right);\n            });\n        }\n        return handleIntersectionResults(payload, left, right);\n    };\n});\nexport function mergeValues(a, b) {\n    // const aType = parse.t(a);\n    // const bType = parse.t(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    if (a instanceof Date && b instanceof Date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    if (util.isPlainObject(a) && util.isPlainObject(b)) {\n        const bKeys = Object.keys(b);\n        const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        if (Object.prototype.hasOwnProperty.call(newObj, \"__proto__\"))\n            delete newObj.__proto__;\n        for (const key of sharedKeys) {\n            if (key === \"__proto__\")\n                continue;\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    if (Array.isArray(a) && Array.isArray(b)) {\n        if (a.length !== b.length) {\n            return { valid: false, mergeErrorPath: [] };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n    // Track which side(s) reject each key. A key rejection is reported only when BOTH sides reject it, so a key owned by one branch survives the other's key schema. strictObject reports these as unrecognized_keys; a record with an open key schema reports one invalid_key per key.\n    const unrecKeys = new Map();\n    let unrecIssue;\n    const keyIssues = new Map();\n    const collect = (iss, side) => {\n        let keys;\n        if (iss.code === \"unrecognized_keys\" && !iss.path?.length) {\n            unrecIssue ?? (unrecIssue = iss);\n            keys = iss.keys;\n        }\n        else if (iss.code === \"invalid_key\" && iss.origin === \"record\" && iss.path?.length === 1) {\n            const k = String(iss.path[0]);\n            if (!keyIssues.has(k))\n                keyIssues.set(k, iss);\n            keys = [k];\n        }\n        else {\n            return false;\n        }\n        for (const k of keys) {\n            if (!unrecKeys.has(k))\n                unrecKeys.set(k, {});\n            unrecKeys.get(k)[side] = true;\n        }\n        return true;\n    };\n    for (const iss of left.issues) {\n        if (!collect(iss, \"l\"))\n            result.issues.push(iss);\n    }\n    for (const iss of right.issues) {\n        if (!collect(iss, \"r\"))\n            result.issues.push(iss);\n    }\n    // Report only keys rejected by BOTH sides\n    const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n    if (bothKeys.length) {\n        const aggregated = unrecIssue ? bothKeys.filter((k) => unrecIssue.keys.includes(k)) : [];\n        if (aggregated.length)\n            result.issues.push({ ...unrecIssue, keys: aggregated });\n        for (const k of bothKeys) {\n            if (!aggregated.includes(k) && keyIssues.has(k))\n                result.issues.push(keyIssues.get(k));\n        }\n    }\n    const merged = mergeValues(left.value, right.value);\n    if (!merged.valid) {\n        if (util.aborted(result))\n            return result;\n        throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n    }\n    result.value = merged.data;\n    return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const items = def.items;\n    const memo = core.globalConfig.memoizer;\n    memo?.attach(inst);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"tuple\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        payload.value = memo ? memo.alloc(inst, payload, [], ctx) : [];\n        const proms = [];\n        const optinStart = getTupleOptStart(items, \"optin\");\n        const optoutStart = getTupleOptStart(items, \"optout\");\n        if (!def.rest) {\n            if (input.length < optinStart) {\n                payload.issues.push({\n                    code: \"too_small\",\n                    minimum: optinStart,\n                    inclusive: true,\n                    input,\n                    inst,\n                    origin: \"array\",\n                });\n                return payload;\n            }\n            if (input.length > items.length) {\n                payload.issues.push({\n                    code: \"too_big\",\n                    maximum: items.length,\n                    inclusive: true,\n                    input,\n                    inst,\n                    origin: \"array\",\n                });\n            }\n        }\n        // Run every item in parallel, collecting results into an indexed array. The post-processing in `handleTupleResults` walks them in order so it can decide whether an absent optional-output error can truncate the tail or must be reported to preserve required output.\n        const itemResults = new Array(items.length);\n        // only tracked when there is a rest loop to skip\n        const abortEarly = def.rest ? ctx?.abortEarly : undefined;\n        let itemAborted = false;\n        for (let i = 0; i < items.length; i++) {\n            const r = items[i]._zod.run({ value: input[i], issues: [] }, ctx);\n            if (r instanceof Promise) {\n                proms.push(r.then((rr) => {\n                    itemResults[i] = rr;\n                }));\n            }\n            else {\n                itemResults[i] = r;\n                if (abortEarly && !itemAborted && r.issues.length)\n                    itemAborted = util.aborted(r);\n            }\n        }\n        // sound because rest is non-empty exactly when every fixed index is present, the one case handleTupleResults cannot discard an item's issues\n        if (def.rest && !itemAborted) {\n            let i = items.length - 1;\n            const rest = input.slice(items.length);\n            let seen = payload.issues.length;\n            for (const el of rest) {\n                if (abortEarly && payload.issues.length !== seen) {\n                    if (util.aborted(payload, seen))\n                        break;\n                    seen = payload.issues.length;\n                }\n                i++;\n                const result = def.rest._zod.run({ value: el, issues: [] }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((r) => handleTupleResult(r, payload, i)));\n                }\n                else {\n                    handleTupleResult(result, payload, i);\n                }\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => handleTupleResults(itemResults, payload, items, input, optoutStart));\n        }\n        return handleTupleResults(itemResults, payload, items, input, optoutStart);\n    };\n});\nfunction getTupleOptStart(items, key) {\n    for (let i = items.length - 1; i >= 0; i--) {\n        // optin is a three-rung ladder so any rung above `undefined` permits an absent slot; optout stays two-valued.\n        const omittable = key === \"optin\" ? items[i]._zod.optin !== undefined : items[i]._zod.optout === \"optional\";\n        if (!omittable)\n            return i + 1;\n    }\n    return 0;\n}\nfunction handleTupleResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nfunction handleTupleResults(itemResults, final, items, input, optoutStart) {\n    // Walk results in order. Mirror $ZodObject's swallow-on-absent-optional rule, but only after `optoutStart`: the first index where the output tuple tail can be absent.\n    for (let i = 0; i < items.length; i++) {\n        const r = itemResults[i];\n        const isPresent = i < input.length;\n        // The array analog of `handlePropertyResult`'s absent-key early return: the middle rung permits absence without supplying anything in its place, so the tail truncates here instead of materializing whatever the item made of `undefined`.\n        if (!isPresent && i >= optoutStart && items[i]._zod.optin === \"optional\") {\n            final.value.length = i;\n            break;\n        }\n        if (r.issues.length) {\n            if (!isPresent && i >= optoutStart) {\n                final.value.length = i;\n                break;\n            }\n            final.issues.push(...util.prefixIssues(i, r.issues));\n        }\n        final.value[i] = r.value;\n    }\n    // Drop trailing slots that produced `undefined` for absent input\n    // (the array analog of an absent optional key on an object). The\n    // `i >= input.length` floor is critical: an explicit `undefined`\n    // *inside* the input must be preserved even when the schema is\n    // optional-out (e.g. `z.string().or(z.undefined())` accepting an\n    // explicit undefined value).\n    for (let i = final.value.length - 1; i >= input.length; i--) {\n        if (items[i]._zod.optout === \"optional\" && final.value[i] === undefined) {\n            final.value.length = i;\n        }\n        else {\n            break;\n        }\n    }\n    return final;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const memo = core.globalConfig.memoizer;\n    memo?.attach(inst);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isPlainObject(input)) {\n            payload.issues.push({\n                expected: \"record\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        // no guard in either loop below: a record's invalid_key aborts but an enclosing intersection can reconcile it, so a stopped loop hides keys the sibling does not own and the intersection then rejects nothing\n        const proms = [];\n        const values = def.keyType._zod.values;\n        if (values && !def.partial) {\n            payload.value = memo ? memo.alloc(inst, payload, {}, ctx) : {};\n            const recordKeys = new Set();\n            for (const key of values) {\n                if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n                    recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n                    // A declared __proto__ is stripped but is not an unrecognized key.\n                    if (key === \"__proto__\")\n                        continue;\n                    const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n                    if (keyResult instanceof Promise) {\n                        throw new Error(\"Async schemas not supported in object keys currently\");\n                    }\n                    if (keyResult.issues.length) {\n                        payload.issues.push({\n                            code: \"invalid_key\",\n                            origin: \"record\",\n                            issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                            input: key,\n                            path: [key],\n                            inst,\n                        });\n                        continue;\n                    }\n                    const outKey = keyResult.value;\n                    if (outKey === \"__proto__\")\n                        continue;\n                    const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                    if (result instanceof Promise) {\n                        proms.push(result.then((result) => {\n                            if (result.issues.length) {\n                                payload.issues.push(...util.prefixIssues(key, result.issues));\n                            }\n                            payload.value[outKey] = result.value;\n                        }));\n                    }\n                    else {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[outKey] = result.value;\n                    }\n                }\n            }\n            let unrecognized;\n            for (const key in input) {\n                if (!recordKeys.has(key)) {\n                    if (def.mode === \"loose\") {\n                        // skip __proto__ so it can't replace the result prototype via the assignment setter on the plain {} we build into\n                        if (key === \"__proto__\")\n                            continue;\n                        payload.value[key] = input[key];\n                    }\n                    else {\n                        unrecognized = unrecognized ?? [];\n                        unrecognized.push(key);\n                    }\n                }\n            }\n            if (unrecognized && unrecognized.length > 0) {\n                payload.issues.push({\n                    code: \"unrecognized_keys\",\n                    input,\n                    inst,\n                    keys: unrecognized,\n                    continue: true,\n                });\n            }\n        }\n        else {\n            payload.value = memo ? memo.alloc(inst, payload, {}, ctx) : {};\n            // An enumerable key schema declares which keys the record owns, so a key outside the set is unrecognized. A non-enumerable one (regex, refine) is a constraint every key must satisfy, so a failing key is invalid. Only the former is reconcilable against the other side of an intersection.\n            let unrecognized;\n            // Reflect.ownKeys for Symbol-key support; filter non-enumerable to match z.object()\n            for (const key of Reflect.ownKeys(input)) {\n                if (key === \"__proto__\")\n                    continue;\n                if (!Object.prototype.propertyIsEnumerable.call(input, key))\n                    continue;\n                let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n                if (keyResult instanceof Promise) {\n                    throw new Error(\"Async schemas not supported in object keys currently\");\n                }\n                // Numeric string fallback: if key is a numeric string and failed, retry with Number(key). This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals\n                const checkNumericKey = typeof key === \"string\" && regexes.number.test(key) && keyResult.issues.length;\n                if (checkNumericKey) {\n                    const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n                    if (retryResult instanceof Promise) {\n                        throw new Error(\"Async schemas not supported in object keys currently\");\n                    }\n                    if (retryResult.issues.length === 0) {\n                        keyResult = retryResult;\n                    }\n                }\n                if (keyResult.issues.length) {\n                    if (def.mode === \"loose\") {\n                        // Pass through unchanged\n                        payload.value[key] = input[key];\n                    }\n                    else if (values) {\n                        unrecognized = unrecognized ?? [];\n                        unrecognized.push(key);\n                    }\n                    else {\n                        // Default \"strict\" behavior: error on invalid key\n                        payload.issues.push({\n                            code: \"invalid_key\",\n                            origin: \"record\",\n                            issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                            input: key,\n                            path: [key],\n                            inst,\n                        });\n                    }\n                    continue;\n                }\n                // the guard above tests the raw input key, but the key schema can normalize an ordinary key into __proto__; re-check the key we actually write under\n                const outKey = keyResult.value;\n                if (outKey === \"__proto__\")\n                    continue;\n                const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[outKey] = result.value;\n                    }));\n                }\n                else {\n                    if (result.issues.length) {\n                        payload.issues.push(...util.prefixIssues(key, result.issues));\n                    }\n                    payload.value[outKey] = result.value;\n                }\n            }\n            if (unrecognized && unrecognized.length > 0) {\n                payload.issues.push({\n                    code: \"unrecognized_keys\",\n                    input,\n                    inst,\n                    keys: unrecognized,\n                    continue: true,\n                });\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload;\n    };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const memo = core.globalConfig.memoizer;\n    memo?.attach(inst);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Map)) {\n            payload.issues.push({\n                expected: \"map\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = memo ? memo.alloc(inst, payload, new Map(), ctx) : new Map();\n        const abortEarly = ctx?.abortEarly;\n        let seen = payload.issues.length;\n        for (const [key, value] of input) {\n            if (abortEarly && payload.issues.length !== seen) {\n                if (util.aborted(payload, seen))\n                    break;\n                seen = payload.issues.length;\n            }\n            const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n            const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n            if (keyResult instanceof Promise || valueResult instanceof Promise) {\n                proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n                    handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n                }));\n            }\n            else {\n                handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n    capSize(inst, mapSize);\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n    if (keyResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, keyResult.issues));\n        }\n        else {\n            final.issues.push({\n                code: \"invalid_key\",\n                origin: \"map\",\n                input,\n                inst,\n                issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    if (valueResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, valueResult.issues));\n        }\n        else {\n            final.issues.push({\n                origin: \"map\",\n                code: \"invalid_element\",\n                input,\n                inst,\n                key: key,\n                issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const memo = core.globalConfig.memoizer;\n    memo?.attach(inst);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Set)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"set\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = memo ? memo.alloc(inst, payload, new Set(), ctx) : new Set();\n        const abortEarly = ctx?.abortEarly;\n        let seen = payload.issues.length;\n        for (const item of input) {\n            if (abortEarly && payload.issues.length !== seen) {\n                if (util.aborted(payload, seen))\n                    break;\n                seen = payload.issues.length;\n            }\n            const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleSetResult(result, payload)));\n            }\n            else\n                handleSetResult(result, payload);\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n    capSize(inst, setSize);\n});\nfunction handleSetResult(result, final) {\n    if (result.issues.length) {\n        final.issues.push(...result.issues);\n    }\n    final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const values = util.getEnumValues(def.entries);\n    const valuesSet = new Set(values);\n    inst._zod.values = valuesSet;\n    util.defineLazyInternal(inst, \"pattern\", (zod) => {\n        const patternValues = util.getEnumValues(zod.def.entries).filter((k) => util.propertyKeyTypes.has(typeof k));\n        // unmatchable fallback, RE2-safe: an empty alternation would compile to /^()$/, which matches \"\"\n        return new RegExp(patternValues.length ? `^(${patternValues.map((o) => util.escapeRegex(o.toString())).join(\"|\")})$` : \"^[^\\\\s\\\\S]$\");\n    });\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (valuesSet.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const values = new Set(def.values);\n    inst._zod.values = values;\n    util.defineLazyInternal(inst, \"pattern\", (zod) => {\n        const vals = zod.def.values;\n        // unmatchable fallback, RE2-safe: an empty alternation would compile to /^()$/, which matches \"\"\n        return new RegExp(vals.length\n            ? `^(${vals\n                .map((o) => typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o))\n                .join(\"|\")})$`\n            : \"^[^\\\\s\\\\S]$\");\n    });\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (values.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        // @ts-ignore\n        if (input instanceof File)\n            return payload;\n        payload.issues.push({\n            expected: \"file\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    core.globalConfig.memoizer?.guard(inst);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        const _out = def.transform(payload.value, payload);\n        if (ctx.async) {\n            const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        if (_out instanceof Promise) {\n            throw new core.$ZodAsyncError();\n        }\n        payload.value = _out;\n        return payload;\n    };\n});\nfunction handleOptionalResult(payload, result) {\n    // A substituting schema that still failed has no usable answer; yield undefined. Its issues are simply dropped: it ran on a payload of its own, so there is no shared array to truncate and nothing of the caller's to lose with it.\n    payload.value = result.issues.length ? undefined : result.value;\n    return payload;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // .optional() propagates absence rather than substituting for it, so a defaulted inner keeps its rung.\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.innerType._zod.optin === \"defaulted\" ? \"defaulted\" : \"optional\");\n    inst._zod.optout = \"optional\";\n    util.defineLazyInternal(inst, \"values\", (zod) => {\n        const values = zod.def.innerType._zod.values;\n        return values ? new Set([...values, undefined]) : undefined;\n    });\n    util.defineLazyInternal(inst, \"pattern\", (zod) => {\n        const pattern = zod.def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        if (payload.value === undefined) {\n            // Only the top rung substitutes a value for absence; everything else leaves it intact, which is what .optional() means.\n            if (def.innerType._zod.optin !== \"defaulted\")\n                return payload;\n            // Its own payload, for the same reason $ZodCatch gets one: a pipe forwards an unrecognized key through the caller's issues array, and this must not read that as the substituting schema failing and drop it.\n            const result = def.innerType._zod.run({ value: payload.value, issues: [] }, ctx);\n            if (result instanceof Promise)\n                return result.then((result) => handleOptionalResult(payload, result));\n            return handleOptionalResult(payload, result);\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodExactOptional = /*@__PURE__*/ core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n    // Call parent init - inherits optin/optout = \"optional\"\n    $ZodOptional.init(inst, def);\n    // Override values/pattern to NOT add undefined\n    util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n    util.defineLazyInternal(inst, \"pattern\", (zod) => zod.def.innerType._zod.pattern);\n    // Override parse to just delegate (no undefined handling)\n    inst._zod.parse = (payload, ctx) => {\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.innerType._zod.optin);\n    util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.innerType._zod.optout);\n    util.defineLazyInternal(inst, \"pattern\", (zod) => {\n        const pattern = zod.def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n    });\n    util.defineLazyInternal(inst, \"values\", (zod) => {\n        return zod.def.innerType._zod.values ? new Set([...zod.def.innerType._zod.values, null]) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        // Forward direction (decode): allow null to pass through\n        if (payload.value === null)\n            return payload;\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // inst._zod.qin = \"true\";\n    inst._zod.optin = \"defaulted\";\n    util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply defaults for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n            /**\n             * $ZodDefault returns the default value immediately in forward direction.\n             * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe.   */\n            return payload;\n        }\n        // Forward direction: continue with default handling\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleDefaultResult(result, def));\n        }\n        return handleDefaultResult(result, def);\n    };\n});\nfunction handleDefaultResult(payload, def) {\n    if (payload.value === undefined) {\n        payload.value = def.defaultValue;\n    }\n    return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"defaulted\";\n    util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply prefault for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazyInternal(inst, \"values\", (zod) => {\n        const v = zod.def.innerType._zod.values;\n        return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleNonOptionalResult(result, inst));\n        }\n        return handleNonOptionalResult(result, inst);\n    };\n});\nfunction handleNonOptionalResult(payload, inst) {\n    if (!payload.issues.length && payload.value === undefined) {\n        payload.issues.push({\n            code: \"invalid_type\",\n            expected: \"nonoptional\",\n            input: payload.value,\n            inst,\n        });\n    }\n    return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(\"ZodSuccess\");\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.issues.length === 0;\n                return payload;\n            });\n        }\n        payload.value = result.issues.length === 0;\n        return payload;\n    };\n});\nfunction handleCatchResult(payload, result, def, ctx) {\n    if (!result.issues.length) {\n        payload.value = result.value;\n        // The value carries up, so the flag describing it has to carry with it: a back-edge into a node still being parsed must not be frozen by an enclosing readonly, and its checks belong to the node itself. Guarded so the ordinary case adds no own property.\n        if (result.memo)\n            payload.memo = true;\n        return payload;\n    }\n    // Spread the inner's own payload, not ours: `value` has to stay the input the catch was handed, and the inner ran on a payload of its own so its issues are already private to this call.\n    payload.value = def.catchValue({\n        ...result,\n        value: payload.value,\n        error: {\n            issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n        },\n        input: payload.value,\n    });\n    return payload;\n}\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.innerType._zod.optin === \"defaulted\" ? \"defaulted\" : \"optional\");\n    util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.innerType._zod.optout);\n    util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply catch logic\n        const result = def.innerType._zod.run({ value: payload.value, issues: [] }, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleCatchResult(payload, result, def, ctx));\n        }\n        return handleCatchResult(payload, result, def, ctx);\n    };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"nan\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazyInternal(inst, \"values\", (zod) => zod.def.in._zod.values);\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.in._zod.optin);\n    util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.out._zod.optout);\n    util.defineLazyInternal(inst, \"propValues\", (zod) => zod.def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handlePipeResult(right, def.in, ctx));\n            }\n            return handlePipeResult(right, def.in, ctx);\n        }\n        const left = def.in._zod.run(payload, ctx);\n        if (left instanceof Promise) {\n            return left.then((left) => handlePipeResult(left, def.out, ctx));\n        }\n        return handlePipeResult(left, def.out, ctx);\n    };\n});\nfunction handlePipeResult(left, next, ctx) {\n    // Any issue stops the pipe, so a failing refinement never feeds its transform. An unrecognized key is the exception: it describes the input's extra properties, not the value being piped, and an enclosing intersection may yet reconcile it.\n    if (left.issues.some((iss) => iss.code !== \"unrecognized_keys\")) {\n        // prevent further checks\n        left.aborted = true;\n        return left;\n    }\n    return next._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazyInternal(inst, \"values\", (zod) => zod.def.in._zod.values);\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.in._zod.optin);\n    util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.out._zod.optout);\n    util.defineLazyInternal(inst, \"propValues\", (zod) => zod.def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        const direction = ctx.direction || \"forward\";\n        if (direction === \"forward\") {\n            const left = def.in._zod.run(payload, ctx);\n            if (left instanceof Promise) {\n                return left.then((left) => handleCodecAResult(left, def, ctx));\n            }\n            return handleCodecAResult(left, def, ctx);\n        }\n        else {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handleCodecAResult(right, def, ctx));\n            }\n            return handleCodecAResult(right, def, ctx);\n        }\n    };\n});\nfunction handleCodecAResult(result, def, ctx) {\n    if (result.issues.length) {\n        // prevent further checks\n        result.aborted = true;\n        return result;\n    }\n    const direction = ctx.direction || \"forward\";\n    if (direction === \"forward\") {\n        const transformed = def.transform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.out, ctx);\n    }\n    else {\n        const transformed = def.reverseTransform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.in, ctx);\n    }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n    // Check if transform added any issues\n    if (left.issues.length) {\n        left.aborted = true;\n        return left;\n    }\n    return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodPreprocess = /*@__PURE__*/ core.$constructor(\"$ZodPreprocess\", (inst, def) => {\n    $ZodPipe.init(inst, def);\n});\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazyInternal(inst, \"propValues\", (zod) => zod.def.innerType._zod.propValues);\n    util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.innerType?._zod?.optin);\n    util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.innerType?._zod?.optout);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then(handleReadonlyResult);\n        }\n        return handleReadonlyResult(result);\n    };\n});\nfunction handleReadonlyResult(payload) {\n    // A repeat visit hands back a node that is still being built; freezing it here would make the rest of its keys fail to assign.\n    if (!payload.memo)\n        payload.value = Object.freeze(payload.value);\n    return payload;\n}\n// a leaf's pattern source with its own checks folded in: the last pattern-carrying check wins, else length bounds narrow the catch-all, else an integer format narrows the number form. the fold lives here instead of on `_zod.pattern` so a bundle without template literals never pays for it\nfunction leafPattern(schema) {\n    const def = schema._zod.def;\n    let pattern = def.pattern;\n    let isInt = !!def.format?.includes(\"int\");\n    let minimum;\n    let maximum;\n    for (const ch of def.checks ?? []) {\n        const d = ch._zod.def;\n        if (d.pattern)\n            pattern = d.pattern;\n        isInt || (isInt = !!d.format?.includes(\"int\"));\n        const lo = d.minimum ?? d.length;\n        const hi = d.maximum ?? d.length;\n        if (lo !== undefined && (minimum === undefined || lo > minimum))\n            minimum = lo;\n        if (hi !== undefined && (maximum === undefined || hi < maximum))\n            maximum = hi;\n    }\n    if (pattern)\n        return pattern.source;\n    // an empty range matches nothing at runtime, and `{8,5}` is not a legal quantifier\n    if (minimum !== undefined && maximum !== undefined && minimum > maximum)\n        return \"(?!)\";\n    if (minimum !== undefined || maximum !== undefined)\n        return regexes.string({ minimum, maximum }).source;\n    const own = schema._zod.pattern;\n    return (isInt && own === regexes.number ? regexes.integer : own)?.source;\n}\n// a part's pattern source. a wrapper's pattern embeds its inner pattern's source verbatim, so the folded form is substituted in place without knowing the wrapper's own composition; a union's options are joined the way the union builds its own pattern\nfunction partPattern(schema) {\n    const def = schema._zod.def;\n    const own = schema._zod.pattern?.source;\n    // lazy resolves its inner on the internals, not the def\n    const inner = def.innerType ?? schema._zod.innerType;\n    if (inner) {\n        const before = inner._zod.pattern?.source;\n        const after = partPattern(inner);\n        if (own && before && after && after !== before) {\n            return own.replace(util.cleanRegex(before), () => util.cleanRegex(after));\n        }\n        return own;\n    }\n    if (def.options) {\n        const sources = def.options.map(partPattern);\n        if (sources.every(Boolean))\n            return `^(${sources.map((s) => util.cleanRegex(s)).join(\"|\")})$`;\n    }\n    return leafPattern(schema);\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const regexParts = [];\n    for (const part of def.parts) {\n        if (typeof part === \"object\" && part !== null) {\n            // is Zod schema\n            const source = partPattern(part);\n            if (!source) {\n                throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n            }\n            regexParts.push(util.cleanRegex(source));\n        }\n        else if (part === null || util.primitiveTypes.has(typeof part)) {\n            regexParts.push(util.escapeRegex(`${part}`));\n        }\n        else {\n            throw new Error(`Invalid template literal part: ${part}`);\n        }\n    }\n    inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"string\") {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"string\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        inst._zod.pattern.lastIndex = 0;\n        if (!inst._zod.pattern.test(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                code: \"invalid_format\",\n                format: def.format ?? \"template_literal\",\n                pattern: inst._zod.pattern.source,\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // Defined, not assigned: the classic prototype exposes `_def` as a getter with no setter.\n    Object.defineProperty(inst, \"_def\", { value: def });\n    inst._zod.def = def;\n    inst.implement = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implement() must be called with a function\");\n        }\n        // Defined inline so the closure stays anonymous: binding it to a `const` first names it, which costs 256 bytes per implemented function.\n        return Object.defineProperty(function (...args) {\n            const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n            const result = Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return parse(inst._def.output, result);\n            }\n            return result;\n        }, \"_zod\", { value: inst._zod, enumerable: false });\n    };\n    inst.implementAsync = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implementAsync() must be called with a function\");\n        }\n        return Object.defineProperty(async function (...args) {\n            const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n            const result = await Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return await parseAsync(inst._def.output, result);\n            }\n            return result;\n        }, \"_zod\", { value: inst._zod, enumerable: false });\n    };\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"function\") {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"function\",\n                input: payload.value,\n                inst,\n            });\n            return payload;\n        }\n        // Check if output is a promise type to determine if we should use async implementation\n        const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n        if (hasPromiseOutput) {\n            payload.value = inst.implementAsync(payload.value);\n        }\n        else {\n            payload.value = inst.implement(payload.value);\n        }\n        return payload;\n    };\n    inst.input = (...args) => {\n        const F = inst.constructor;\n        if (Array.isArray(args[0])) {\n            return new F({\n                type: \"function\",\n                input: new $ZodTuple({\n                    type: \"tuple\",\n                    items: args[0],\n                    rest: args[1],\n                }),\n                output: inst._def.output,\n            });\n        }\n        return new F({\n            type: \"function\",\n            input: args[0],\n            output: inst._def.output,\n        });\n    };\n    inst.output = (output) => {\n        const F = inst.constructor;\n        return new F({\n            type: \"function\",\n            input: inst._def.input,\n            output,\n        });\n    };\n    return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n    };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // Cache the resolved inner type on the shared `def` so all clones of this lazy (e.g. via `.describe()`/`.meta()`) share the same inner instance, preserving identity for cycle detection on recursive schemas.\n    util.defineLazy(inst._zod, \"innerType\", () => {\n        const d = def;\n        if (!d._cachedInner)\n            d._cachedInner = def.getter();\n        return d._cachedInner;\n    });\n    util.defineLazyInternal(inst, \"pattern\", (zod) => zod.innerType?._zod?.pattern);\n    util.defineLazyInternal(inst, \"propValues\", (zod) => zod.innerType?._zod?.propValues);\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.innerType?._zod?.optin ?? undefined);\n    util.defineLazyInternal(inst, \"optout\", (zod) => zod.innerType?._zod?.optout ?? undefined);\n    inst._zod.parse = (payload, ctx) => {\n        const inner = inst._zod.innerType;\n        return inner._zod.run(payload, ctx);\n    };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n    checks.$ZodCheck.init(inst, def);\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _) => {\n        return payload;\n    };\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const r = def.fn(input);\n        if (r instanceof Promise) {\n            return r.then((r) => handleRefineResult(r, payload, input, inst));\n        }\n        handleRefineResult(r, payload, input, inst);\n        return;\n    };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n    if (!result) {\n        const _iss = {\n            code: \"custom\",\n            input,\n            inst, // incorporates params.error into issue reporting\n            path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n            continue: !inst._zod.def.abort,\n            // params: inst._zod.def.params,\n        };\n        if (inst._zod.def.params)\n            _iss.params = inst._zod.def.params;\n        payload.issues.push(util.issue(_iss));\n    }\n}\n","import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\nfunction snapshotChecks(def) {\n    if (def.checks)\n        def.checks = [...def.checks];\n    return def;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n    return new Class(snapshotChecks({ type: \"string\", ...util.normalizeParams(params) }));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n    return new Class(snapshotChecks({ type: \"string\", coerce: true, ...util.normalizeParams(params) }));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"email\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"guid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v4\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v6\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v7\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"emoji\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"nanoid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link _cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid2\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ulid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"xid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ksuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"mac\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"e164\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _creditCard(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"credit_card\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _iban(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"iban\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"jwt\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const TimePrecision = {\n    Any: null,\n    Minute: -1,\n    Second: 0,\n    Millisecond: 3,\n    Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"datetime\",\n        check: \"string_format\",\n        offset: false,\n        local: false,\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"date\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"time\",\n        check: \"string_format\",\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"duration\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n    return new Class(snapshotChecks({ type: \"number\", checks: [], ...util.normalizeParams(params) }));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n    return new Class(snapshotChecks({ type: \"number\", coerce: true, checks: [], ...util.normalizeParams(params) }));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"safeint\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"int32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"uint32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"int64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"uint64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n    return new Class({\n        type: \"symbol\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n    return new Class({\n        type: \"undefined\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n    return new Class({\n        type: \"null\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n    return new Class({\n        type: \"any\",\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n    return new Class({\n        type: \"unknown\",\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n    return new Class({\n        type: \"never\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n    return new Class({\n        type: \"void\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n    return new Class({\n        type: \"date\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n    return new Class({\n        type: \"date\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n    return new Class({\n        type: \"nan\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n    return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n    return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n    return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n    return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n    return new checks.$ZodCheckMultipleOf({\n        check: \"multiple_of\",\n        ...util.normalizeParams(params),\n        value,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n    return new checks.$ZodCheckMaxSize({\n        check: \"max_size\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n    return new checks.$ZodCheckMinSize({\n        check: \"min_size\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n    return new checks.$ZodCheckSizeEquals({\n        check: \"size_equals\",\n        ...util.normalizeParams(params),\n        size,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n    const ch = new checks.$ZodCheckMaxLength({\n        check: \"max_length\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n    return new checks.$ZodCheckMinLength({\n        check: \"min_length\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n    return new checks.$ZodCheckLengthEquals({\n        check: \"length_equals\",\n        ...util.normalizeParams(params),\n        length,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n    return new checks.$ZodCheckRegex({\n        check: \"string_format\",\n        format: \"regex\",\n        ...util.normalizeParams(params),\n        pattern,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n    return new checks.$ZodCheckLowerCase({\n        check: \"string_format\",\n        format: \"lowercase\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n    return new checks.$ZodCheckUpperCase({\n        check: \"string_format\",\n        format: \"uppercase\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n    return new checks.$ZodCheckIncludes({\n        check: \"string_format\",\n        format: \"includes\",\n        ...util.normalizeParams(params),\n        includes,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n    return new checks.$ZodCheckStartsWith({\n        check: \"string_format\",\n        format: \"starts_with\",\n        ...util.normalizeParams(params),\n        prefix,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n    return new checks.$ZodCheckEndsWith({\n        check: \"string_format\",\n        format: \"ends_with\",\n        ...util.normalizeParams(params),\n        suffix,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n    return new checks.$ZodCheckProperty({\n        check: \"property\",\n        property,\n        schema,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _properties(shape, params) {\n    return new checks.$ZodCheckProperties({\n        check: \"properties\",\n        shape,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n    return new checks.$ZodCheckMimeType({\n        check: \"mime_type\",\n        mime: types,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n    return new checks.$ZodCheckOverwrite({\n        check: \"overwrite\",\n        tx,\n    });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n    return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n    return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n    return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n    return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n    return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n    return new Class({\n        type: \"array\",\n        element,\n        // get element() {\n        //   return element;\n        // },\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _xor(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        inclusive: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n    return new Class({\n        type: \"union\",\n        options: options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n    return new Class({\n        type: \"intersection\",\n        left,\n        right,\n    });\n}\n// export function _tuple(\n//   Class: util.SchemaClass<schemas.$ZodTuple>,\n//   items: [],\n//   params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new Class({\n        type: \"tuple\",\n        items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"record\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"map\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n    return new Class({\n        type: \"set\",\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    // if (Array.isArray(values)) {\n    //   for (const value of values) {\n    //     entries[value] = value;\n    //   }\n    // } else {\n    //   Object.assign(entries, values);\n    // }\n    // const entries: util.EnumLike = {};\n    // for (const val of values) {\n    //   entries[val] = val;\n    // }\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n    return new Class({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n    return new Class({\n        type: \"file\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n    return new Class({\n        type: \"transform\",\n        transform: fn,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n    return new Class({\n        type: \"optional\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n    return new Class({\n        type: \"nullable\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n    return new Class({\n        type: \"default\",\n        innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n    return new Class({\n        type: \"nonoptional\",\n        innerType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n    return new Class({\n        type: \"success\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n    return new Class({\n        type: \"catch\",\n        innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : util.constantCatch(catchValue)),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n    return new Class({\n        type: \"pipe\",\n        in: in_,\n        out,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n    return new Class({\n        type: \"readonly\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n    return new Class({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n    return new Class({\n        type: \"lazy\",\n        getter,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n    return new Class({\n        type: \"promise\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n    const norm = util.normalizeParams(_params);\n    norm.abort ?? (norm.abort = true); // default to abort:false\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...norm,\n    });\n    return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...util.normalizeParams(_params),\n    });\n    return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn, params) {\n    const ch = _check((payload) => {\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                if (!(\"input\" in _issue))\n                    _issue.input = payload.value;\n                _issue.inst ?? (_issue.inst = ch);\n                _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        return fn(payload.value, payload);\n    }, params);\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n    const ch = new checks.$ZodCheck({\n        check: \"custom\",\n        ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n    const ch = new checks.$ZodCheck({ check: \"describe\" });\n    ch._zod.onattach = [\n        (inst) => {\n            const existing = registries.globalRegistry.get(inst) ?? {};\n            registries.globalRegistry.add(inst, { ...existing, description });\n        },\n    ];\n    ch._zod.check = () => { }; // no-op check\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n    const ch = new checks.$ZodCheck({ check: \"meta\" });\n    ch._zod.onattach = [\n        (inst) => {\n            const existing = registries.globalRegistry.get(inst) ?? {};\n            registries.globalRegistry.add(inst, { ...existing, ...metadata });\n        },\n    ];\n    ch._zod.check = () => { }; // no-op check\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n    const params = util.normalizeParams(_params);\n    let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n    let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n    if (params.case !== \"sensitive\") {\n        truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n        falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n    }\n    const truthySet = new Set(truthyArray);\n    const falsySet = new Set(falsyArray);\n    const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n    const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n    const _String = Classes.String ?? schemas.$ZodString;\n    const stringSchema = new _String({ type: \"string\", error: params.error });\n    const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n    const codec = new _Codec({\n        type: \"pipe\",\n        in: stringSchema,\n        out: booleanSchema,\n        transform: ((input, payload) => {\n            let data = input;\n            if (params.case !== \"sensitive\")\n                data = data.toLowerCase();\n            if (truthySet.has(data)) {\n                return true;\n            }\n            else if (falsySet.has(data)) {\n                return false;\n            }\n            else {\n                payload.issues.push({\n                    code: \"invalid_value\",\n                    expected: \"stringbool\",\n                    values: [...truthySet, ...falsySet],\n                    input: payload.value,\n                    inst: codec,\n                    continue: false,\n                });\n                return {};\n            }\n        }),\n        reverseTransform: ((input, _payload) => {\n            if (input === true) {\n                return truthyArray[0] || \"true\";\n            }\n            else {\n                return falsyArray[0] || \"false\";\n            }\n        }),\n        error: params.error,\n    });\n    codec._zod.bag.truthy = truthyArray;\n    codec._zod.bag.falsy = falsyArray;\n    codec._zod.bag.case = params.case ?? \"insensitive\";\n    return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n    const params = util.normalizeParams(_params);\n    const def = {\n        check: \"string_format\",\n        type: \"string\",\n        format,\n        fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n        ...params,\n    };\n    if (fnOrRegex instanceof RegExp) {\n        def.pattern = fnOrRegex;\n    }\n    const inst = new Class(def);\n    return inst;\n}\n","import * as core from \"../core/index.js\";\nimport * as regexes from \"../core/regexes.js\";\nimport * as util from \"../core/util.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodMiniType = /*@__PURE__*/ core.$constructor(\"ZodMiniType\", (inst, def) => {\n    if (!inst._zod)\n        throw new Error(\"Uninitialized schema in ZodMiniType.\");\n    core.$ZodType.init(inst, def);\n    inst.def = def;\n    inst.type = def.type;\n}, {\n    // `with` is an alias for `check`: the same function object, not a wrapper.\n    get with() {\n        return this.check;\n    },\n    set with(value) {\n        util.own(this, \"with\", value);\n    },\n    parse(data, params) {\n        return parse.parse(this, data, params, { callee: this.parse });\n    },\n    parseAsync(data, params) {\n        return parse.parseAsync(this, data, params, { callee: this.parseAsync });\n    },\n    safeParse(data, params) {\n        return parse.safeParse(this, data, params);\n    },\n    safeParseAsync(data, params) {\n        return parse.safeParseAsync(this, data, params);\n    },\n    check(...checks) {\n        const def = this.def;\n        return this.clone({\n            ...def,\n            checks: [\n                ...(def.checks ?? []),\n                ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n            ],\n        }, { parent: true });\n    },\n    clone(_def, params) {\n        return core.clone(this, _def, params);\n    },\n    brand() {\n        return this;\n    },\n    register(reg, meta) {\n        reg.add(this, meta);\n        return this;\n    },\n    apply(fn, ...args) {\n        return args.length === 0 ? fn(this) : fn(this, ...args);\n    },\n});\nexport const ZodMiniString = /*@__PURE__*/ core.$constructor(\"ZodMiniString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function string(params) {\n    return core._string(ZodMiniString, params);\n}\nexport const ZodMiniStringFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniStringFormat\", (inst, def) => {\n    core.$ZodStringFormat.init(inst, def);\n    ZodMiniString.init(inst, def);\n});\nexport const ZodMiniEmail = /*@__PURE__*/ core.$constructor(\"ZodMiniEmail\", (inst, def) => {\n    core.$ZodEmail.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function email(params) {\n    return core._email(ZodMiniEmail, params);\n}\nexport const ZodMiniGUID = /*@__PURE__*/ core.$constructor(\"ZodMiniGUID\", (inst, def) => {\n    core.$ZodGUID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function guid(params) {\n    return core._guid(ZodMiniGUID, params);\n}\nexport const ZodMiniUUID = /*@__PURE__*/ core.$constructor(\"ZodMiniUUID\", (inst, def) => {\n    core.$ZodUUID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function uuid(params) {\n    return core._uuid(ZodMiniUUID, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function uuidv4(params) {\n    return core._uuidv4(ZodMiniUUID, params);\n}\n// ZodMiniUUIDv6\n// @__NO_SIDE_EFFECTS__\nexport function uuidv6(params) {\n    return core._uuidv6(ZodMiniUUID, params);\n}\n// ZodMiniUUIDv7\n// @__NO_SIDE_EFFECTS__\nexport function uuidv7(params) {\n    return core._uuidv7(ZodMiniUUID, params);\n}\nexport const ZodMiniURL = /*@__PURE__*/ core.$constructor(\"ZodMiniURL\", (inst, def) => {\n    core.$ZodURL.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function url(params) {\n    return core._url(ZodMiniURL, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function httpUrl(params) {\n    return core._url(ZodMiniURL, {\n        protocol: regexes.httpProtocol,\n        hostname: regexes.domain,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniEmoji = /*@__PURE__*/ core.$constructor(\"ZodMiniEmoji\", (inst, def) => {\n    core.$ZodEmoji.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function emoji(params) {\n    return core._emoji(ZodMiniEmoji, params);\n}\nexport const ZodMiniNanoID = /*@__PURE__*/ core.$constructor(\"ZodMiniNanoID\", (inst, def) => {\n    core.$ZodNanoID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function nanoid(params) {\n    return core._nanoid(ZodMiniNanoID, params);\n}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link ZodMiniCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const ZodMiniCUID = /*@__PURE__*/ core.$constructor(\"ZodMiniCUID\", (inst, def) => {\n    core.$ZodCUID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\n/**\n * Validates a CUID v1 string.\n *\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2 | `z.cuid2()`} instead.\n * See https://github.com/paralleldrive/cuid.\n */\n// @__NO_SIDE_EFFECTS__\nexport function cuid(params) {\n    return core._cuid(ZodMiniCUID, params);\n}\nexport const ZodMiniCUID2 = /*@__PURE__*/ core.$constructor(\"ZodMiniCUID2\", (inst, def) => {\n    core.$ZodCUID2.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function cuid2(params) {\n    return core._cuid2(ZodMiniCUID2, params);\n}\nexport const ZodMiniULID = /*@__PURE__*/ core.$constructor(\"ZodMiniULID\", (inst, def) => {\n    core.$ZodULID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function ulid(params) {\n    return core._ulid(ZodMiniULID, params);\n}\nexport const ZodMiniXID = /*@__PURE__*/ core.$constructor(\"ZodMiniXID\", (inst, def) => {\n    core.$ZodXID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function xid(params) {\n    return core._xid(ZodMiniXID, params);\n}\nexport const ZodMiniKSUID = /*@__PURE__*/ core.$constructor(\"ZodMiniKSUID\", (inst, def) => {\n    core.$ZodKSUID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function ksuid(params) {\n    return core._ksuid(ZodMiniKSUID, params);\n}\nexport const ZodMiniIPv4 = /*@__PURE__*/ core.$constructor(\"ZodMiniIPv4\", (inst, def) => {\n    core.$ZodIPv4.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function ipv4(params) {\n    return core._ipv4(ZodMiniIPv4, params);\n}\nexport const ZodMiniIPv6 = /*@__PURE__*/ core.$constructor(\"ZodMiniIPv6\", (inst, def) => {\n    core.$ZodIPv6.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function ipv6(params) {\n    return core._ipv6(ZodMiniIPv6, params);\n}\nexport const ZodMiniCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodMiniCIDRv4\", (inst, def) => {\n    core.$ZodCIDRv4.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function cidrv4(params) {\n    return core._cidrv4(ZodMiniCIDRv4, params);\n}\nexport const ZodMiniCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodMiniCIDRv6\", (inst, def) => {\n    core.$ZodCIDRv6.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function cidrv6(params) {\n    return core._cidrv6(ZodMiniCIDRv6, params);\n}\nexport const ZodMiniMAC = /*@__PURE__*/ core.$constructor(\"ZodMiniMAC\", (inst, def) => {\n    core.$ZodMAC.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function mac(params) {\n    return core._mac(ZodMiniMAC, params);\n}\nexport const ZodMiniBase64 = /*@__PURE__*/ core.$constructor(\"ZodMiniBase64\", (inst, def) => {\n    core.$ZodBase64.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function base64(params) {\n    return core._base64(ZodMiniBase64, params);\n}\nexport const ZodMiniBase64URL = /*@__PURE__*/ core.$constructor(\"ZodMiniBase64URL\", (inst, def) => {\n    core.$ZodBase64URL.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function base64url(params) {\n    return core._base64url(ZodMiniBase64URL, params);\n}\nexport const ZodMiniE164 = /*@__PURE__*/ core.$constructor(\"ZodMiniE164\", (inst, def) => {\n    core.$ZodE164.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function e164(params) {\n    return core._e164(ZodMiniE164, params);\n}\nexport const ZodMiniCreditCard = /*@__PURE__*/ core.$constructor(\"ZodMiniCreditCard\", (inst, def) => {\n    core.$ZodCreditCard.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function creditCard(params) {\n    return core._creditCard(ZodMiniCreditCard, params);\n}\nexport const ZodMiniIBAN = /*@__PURE__*/ core.$constructor(\"ZodMiniIBAN\", (inst, def) => {\n    core.$ZodIBAN.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function iban(params) {\n    return core._iban(ZodMiniIBAN, params);\n}\nexport const ZodMiniJWT = /*@__PURE__*/ core.$constructor(\"ZodMiniJWT\", (inst, def) => {\n    core.$ZodJWT.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function jwt(params) {\n    return core._jwt(ZodMiniJWT, params);\n}\nexport const ZodMiniCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniCustomStringFormat\", (inst, def) => {\n    core.$ZodCustomStringFormat.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n    return core._stringFormat(ZodMiniCustomStringFormat, format, fnOrRegex, _params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function hostname(_params) {\n    return core._stringFormat(ZodMiniCustomStringFormat, \"hostname\", regexes.hostname, _params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function hex(_params) {\n    return core._stringFormat(ZodMiniCustomStringFormat, \"hex\", regexes.hex, _params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function currencyCode(_params) {\n    return core._stringFormat(ZodMiniCustomStringFormat, \"currency_code\", regexes.currencyCode, _params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function hash(alg, params) {\n    const enc = params?.enc ?? \"hex\";\n    const format = `${alg}_${enc}`;\n    const regex = core.regexes[format];\n    // check for unrecognized format\n    if (!regex)\n        throw new Error(`Unrecognized hash format: ${format}`);\n    return core._stringFormat(ZodMiniCustomStringFormat, format, regex, params);\n}\nexport const ZodMiniNumber = /*@__PURE__*/ core.$constructor(\"ZodMiniNumber\", (inst, def) => {\n    core.$ZodNumber.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function number(params) {\n    return core._number(ZodMiniNumber, params);\n}\nexport const ZodMiniNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniNumberFormat\", (inst, def) => {\n    core.$ZodNumberFormat.init(inst, def);\n    ZodMiniNumber.init(inst, def);\n});\nexport function int(params) {\n    return core._int(ZodMiniNumberFormat, params);\n}\nexport function float32(params) {\n    return core._float32(ZodMiniNumberFormat, params);\n}\nexport function float64(params) {\n    return core._float64(ZodMiniNumberFormat, params);\n}\nexport function int32(params) {\n    return core._int32(ZodMiniNumberFormat, params);\n}\nexport function uint32(params) {\n    return core._uint32(ZodMiniNumberFormat, params);\n}\nexport const ZodMiniBoolean = /*@__PURE__*/ core.$constructor(\"ZodMiniBoolean\", (inst, def) => {\n    core.$ZodBoolean.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function boolean(params) {\n    return core._boolean(ZodMiniBoolean, params);\n}\nexport const ZodMiniBigInt = /*@__PURE__*/ core.$constructor(\"ZodMiniBigInt\", (inst, def) => {\n    core.$ZodBigInt.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function bigint(params) {\n    return core._bigint(ZodMiniBigInt, params);\n}\nexport const ZodMiniBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniBigIntFormat\", (inst, def) => {\n    core.$ZodBigIntFormat.init(inst, def);\n    ZodMiniBigInt.init(inst, def);\n});\nexport function int64(params) {\n    return core._int64(ZodMiniBigIntFormat, params);\n}\nexport function uint64(params) {\n    return core._uint64(ZodMiniBigIntFormat, params);\n}\nexport const ZodMiniSymbol = /*@__PURE__*/ core.$constructor(\"ZodMiniSymbol\", (inst, def) => {\n    core.$ZodSymbol.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function symbol(params) {\n    return core._symbol(ZodMiniSymbol, params);\n}\nexport const ZodMiniUndefined = /*@__PURE__*/ core.$constructor(\"ZodMiniUndefined\", (inst, def) => {\n    core.$ZodUndefined.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nfunction _undefined(params) {\n    return core._undefined(ZodMiniUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodMiniNull = /*@__PURE__*/ core.$constructor(\"ZodMiniNull\", (inst, def) => {\n    core.$ZodNull.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nfunction _null(params) {\n    return core._null(ZodMiniNull, params);\n}\nexport { _null as null };\nexport const ZodMiniAny = /*@__PURE__*/ core.$constructor(\"ZodMiniAny\", (inst, def) => {\n    core.$ZodAny.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function any() {\n    return core._any(ZodMiniAny);\n}\nexport const ZodMiniUnknown = /*@__PURE__*/ core.$constructor(\"ZodMiniUnknown\", (inst, def) => {\n    core.$ZodUnknown.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function unknown() {\n    return core._unknown(ZodMiniUnknown);\n}\nexport const ZodMiniNever = /*@__PURE__*/ core.$constructor(\"ZodMiniNever\", (inst, def) => {\n    core.$ZodNever.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function never(params) {\n    return core._never(ZodMiniNever, params);\n}\nexport const ZodMiniVoid = /*@__PURE__*/ core.$constructor(\"ZodMiniVoid\", (inst, def) => {\n    core.$ZodVoid.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nfunction _void(params) {\n    return core._void(ZodMiniVoid, params);\n}\nexport { _void as void };\nexport const ZodMiniDate = /*@__PURE__*/ core.$constructor(\"ZodMiniDate\", (inst, def) => {\n    core.$ZodDate.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function date(params) {\n    return core._date(ZodMiniDate, params);\n}\nexport const ZodMiniArray = /*@__PURE__*/ core.$constructor(\"ZodMiniArray\", (inst, def) => {\n    core.$ZodArray.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function array(element, params) {\n    return new ZodMiniArray({\n        type: \"array\",\n        element: element,\n        ...util.normalizeParams(params),\n    });\n}\n// .keyof\n// @__NO_SIDE_EFFECTS__\nexport function keyof(schema) {\n    const shape = schema._zod.def.shape;\n    return _enum(Object.keys(shape));\n}\nexport const ZodMiniObject = /*@__PURE__*/ core.$constructor(\"ZodMiniObject\", (inst, def) => {\n    core.$ZodObject.init(inst, def);\n    ZodMiniType.init(inst, def);\n    util.installLazyProp(inst, \"shape\", (self) => self._zod.def.shape, false);\n});\n// @__NO_SIDE_EFFECTS__\nexport function object(shape, params) {\n    const def = {\n        type: \"object\",\n        shape: shape ?? {},\n        ...util.normalizeParams(params),\n    };\n    return new ZodMiniObject(def);\n}\n// strictObject\n// @__NO_SIDE_EFFECTS__\nexport function strictObject(shape, params) {\n    return new ZodMiniObject({\n        type: \"object\",\n        shape,\n        catchall: never(),\n        ...util.normalizeParams(params),\n    });\n}\n// looseObject\n// @__NO_SIDE_EFFECTS__\nexport function looseObject(shape, params) {\n    return new ZodMiniObject({\n        type: \"object\",\n        shape,\n        catchall: unknown(),\n        ...util.normalizeParams(params),\n    });\n}\n// object methods\n// @__NO_SIDE_EFFECTS__\nexport function extend(schema, shape) {\n    return util.extend(schema, shape);\n}\n// @__NO_SIDE_EFFECTS__\nexport function safeExtend(schema, shape) {\n    return util.safeExtend(schema, shape);\n}\n/**\n * @deprecated Use [`z.extend(A, B.shape)`](https://zod.dev/api?id=extend) instead.\n */\n// @__NO_SIDE_EFFECTS__\nexport function merge(a, b) {\n    return util.merge(a, b);\n}\n// @__NO_SIDE_EFFECTS__\nexport function pick(schema, mask) {\n    return util.pick(schema, mask);\n}\n// .omit\n// @__NO_SIDE_EFFECTS__\nexport function omit(schema, mask) {\n    return util.omit(schema, mask);\n}\n// @__NO_SIDE_EFFECTS__\nexport function partial(schema, mask) {\n    const def = schema._zod.def;\n    if (def.type !== \"tuple\")\n        return util.partial(ZodMiniOptional, schema, mask);\n    // a refinement was authored against the full arity; partialing would run it on a shorter array\n    if (def.checks?.length)\n        throw new Error(\".partial() cannot be used on tuple schemas containing refinements\");\n    return util.clone(schema, {\n        ...def,\n        items: def.items.map((item) => new ZodMiniOptional({ type: \"optional\", innerType: item })),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function exactPartial(schema, mask) {\n    return util.partial(ZodMiniExactOptional, schema, mask, \"exactPartial\");\n}\n// @__NO_SIDE_EFFECTS__\nexport function required(schema, mask) {\n    return util.required(ZodMiniNonOptional, schema, mask);\n}\n// @__NO_SIDE_EFFECTS__\nexport function catchall(inst, catchall) {\n    // `mergeDefs` rather than a spread: spreading reads `shape`, and resolving it can mint a whole fresh subtree\n    return inst.clone(util.mergeDefs(inst._zod.def, { catchall: catchall }));\n}\nexport const ZodMiniUnion = /*@__PURE__*/ core.$constructor(\"ZodMiniUnion\", (inst, def) => {\n    core.$ZodUnion.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function union(options, params) {\n    return new ZodMiniUnion({\n        type: \"union\",\n        options: options,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniXor = /*@__PURE__*/ core.$constructor(\"ZodMiniXor\", (inst, def) => {\n    ZodMiniUnion.init(inst, def);\n    core.$ZodXor.init(inst, def);\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n    return new ZodMiniXor({\n        type: \"union\",\n        options: options,\n        inclusive: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodMiniDiscriminatedUnion\", (inst, def) => {\n    core.$ZodDiscriminatedUnion.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function discriminatedUnion(discriminator, options, params) {\n    return new ZodMiniDiscriminatedUnion({\n        type: \"union\",\n        options: options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniIntersection = /*@__PURE__*/ core.$constructor(\"ZodMiniIntersection\", (inst, def) => {\n    core.$ZodIntersection.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function intersection(left, right) {\n    return new ZodMiniIntersection({\n        type: \"intersection\",\n        left: left,\n        right: right,\n    });\n}\nexport const ZodMiniTuple = /*@__PURE__*/ core.$constructor(\"ZodMiniTuple\", (inst, def) => {\n    core.$ZodTuple.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function tuple(items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof core.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new ZodMiniTuple({\n        type: \"tuple\",\n        items: items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniRecord = /*@__PURE__*/ core.$constructor(\"ZodMiniRecord\", (inst, def) => {\n    core.$ZodRecord.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function record(keyType, valueType, params) {\n    // v3-compat: z.record(valueType, params?) — defaults keyType to z.string()\n    if (!valueType || !valueType._zod) {\n        return new ZodMiniRecord({\n            type: \"record\",\n            keyType: string(),\n            valueType: keyType,\n            ...util.normalizeParams(valueType),\n        });\n    }\n    return new ZodMiniRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function partialRecord(keyType, valueType, params) {\n    return new ZodMiniRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n        partial: true,\n    });\n}\nexport function looseRecord(keyType, valueType, params) {\n    return new ZodMiniRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        mode: \"loose\",\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniMap = /*@__PURE__*/ core.$constructor(\"ZodMiniMap\", (inst, def) => {\n    core.$ZodMap.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function map(keyType, valueType, params) {\n    return new ZodMiniMap({\n        type: \"map\",\n        keyType: keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniSet = /*@__PURE__*/ core.$constructor(\"ZodMiniSet\", (inst, def) => {\n    core.$ZodSet.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function set(valueType, params) {\n    return new ZodMiniSet({\n        type: \"set\",\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniEnum = /*@__PURE__*/ core.$constructor(\"ZodMiniEnum\", (inst, def) => {\n    core.$ZodEnum.init(inst, def);\n    ZodMiniType.init(inst, def);\n    // reuse the parsed value set so a numeric TS enum's reverse-mapping keys stay out\n    inst.options = [...inst._zod.values];\n});\n// @__NO_SIDE_EFFECTS__\nfunction _enum(values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    return new ZodMiniEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport { _enum as enum };\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n    return new ZodMiniEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniLiteral = /*@__PURE__*/ core.$constructor(\"ZodMiniLiteral\", (inst, def) => {\n    core.$ZodLiteral.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function literal(value, params) {\n    return new ZodMiniLiteral({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniFile = /*@__PURE__*/ core.$constructor(\"ZodMiniFile\", (inst, def) => {\n    core.$ZodFile.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function file(params) {\n    return core._file(ZodMiniFile, params);\n}\nexport const ZodMiniTransform = /*@__PURE__*/ core.$constructor(\"ZodMiniTransform\", (inst, def) => {\n    core.$ZodTransform.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function transform(fn) {\n    return new ZodMiniTransform({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport const ZodMiniOptional = /*@__PURE__*/ core.$constructor(\"ZodMiniOptional\", (inst, def) => {\n    core.$ZodOptional.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function optional(innerType) {\n    return new ZodMiniOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodMiniExactOptional = /*@__PURE__*/ core.$constructor(\"ZodMiniExactOptional\", (inst, def) => {\n    core.$ZodExactOptional.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function exactOptional(innerType) {\n    return new ZodMiniExactOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodMiniNullable = /*@__PURE__*/ core.$constructor(\"ZodMiniNullable\", (inst, def) => {\n    core.$ZodNullable.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function nullable(innerType) {\n    return new ZodMiniNullable({\n        type: \"nullable\",\n        innerType: innerType,\n    });\n}\n// nullish\n// @__NO_SIDE_EFFECTS__\nexport function nullish(innerType) {\n    return optional(nullable(innerType));\n}\nexport const ZodMiniDefault = /*@__PURE__*/ core.$constructor(\"ZodMiniDefault\", (inst, def) => {\n    core.$ZodDefault.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function _default(innerType, defaultValue) {\n    return new ZodMiniDefault({\n        type: \"default\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodMiniPrefault = /*@__PURE__*/ core.$constructor(\"ZodMiniPrefault\", (inst, def) => {\n    core.$ZodPrefault.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function prefault(innerType, defaultValue) {\n    return new ZodMiniPrefault({\n        type: \"prefault\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodMiniNonOptional = /*@__PURE__*/ core.$constructor(\"ZodMiniNonOptional\", (inst, def) => {\n    core.$ZodNonOptional.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function nonoptional(innerType, params) {\n    return new ZodMiniNonOptional({\n        type: \"nonoptional\",\n        innerType: innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniSuccess = /*@__PURE__*/ core.$constructor(\"ZodMiniSuccess\", (inst, def) => {\n    core.$ZodSuccess.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function success(innerType) {\n    return new ZodMiniSuccess({\n        type: \"success\",\n        innerType: innerType,\n    });\n}\nexport const ZodMiniCatch = /*@__PURE__*/ core.$constructor(\"ZodMiniCatch\", (inst, def) => {\n    core.$ZodCatch.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nfunction _catch(innerType, catchValue) {\n    return new ZodMiniCatch({\n        type: \"catch\",\n        innerType: innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : core.util.constantCatch(catchValue)),\n    });\n}\nexport { _catch as catch };\nexport const ZodMiniNaN = /*@__PURE__*/ core.$constructor(\"ZodMiniNaN\", (inst, def) => {\n    core.$ZodNaN.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function nan(params) {\n    return core._nan(ZodMiniNaN, params);\n}\nexport const ZodMiniPipe = /*@__PURE__*/ core.$constructor(\"ZodMiniPipe\", (inst, def) => {\n    core.$ZodPipe.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function pipe(in_, out) {\n    return new ZodMiniPipe({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n    });\n}\nexport const ZodMiniCodec = /*@__PURE__*/ core.$constructor(\"ZodMiniCodec\", (inst, def) => {\n    ZodMiniPipe.init(inst, def);\n    core.$ZodCodec.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function codec(in_, out, params) {\n    return new ZodMiniCodec({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        transform: params.decode,\n        reverseTransform: params.encode,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function invertCodec(codec) {\n    const def = codec._zod.def;\n    return new ZodMiniCodec({\n        type: \"pipe\",\n        in: def.out,\n        out: def.in,\n        transform: def.reverseTransform,\n        reverseTransform: def.transform,\n    });\n}\nexport const ZodMiniReadonly = /*@__PURE__*/ core.$constructor(\"ZodMiniReadonly\", (inst, def) => {\n    core.$ZodReadonly.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function readonly(innerType) {\n    return new ZodMiniReadonly({\n        type: \"readonly\",\n        innerType: innerType,\n    });\n}\nexport const ZodMiniTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodMiniTemplateLiteral\", (inst, def) => {\n    core.$ZodTemplateLiteral.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function templateLiteral(parts, params) {\n    return new ZodMiniTemplateLiteral({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniLazy = /*@__PURE__*/ core.$constructor(\"ZodMiniLazy\", (inst, def) => {\n    core.$ZodLazy.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// export function lazy<T extends object>(getter: () => T): T {\n//   return util.createTransparentProxy<T>(getter);\n// }\n// @__NO_SIDE_EFFECTS__\nfunction _lazy(getter) {\n    return new ZodMiniLazy({\n        type: \"lazy\",\n        getter: getter,\n    });\n}\nexport { _lazy as lazy };\nexport const ZodMiniPromise = /*@__PURE__*/ core.$constructor(\"ZodMiniPromise\", (inst, def) => {\n    core.$ZodPromise.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function promise(innerType) {\n    return new ZodMiniPromise({\n        type: \"promise\",\n        innerType: innerType,\n    });\n}\nexport const ZodMiniCustom = /*@__PURE__*/ core.$constructor(\"ZodMiniCustom\", (inst, def) => {\n    core.$ZodCustom.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// custom checks\n// @__NO_SIDE_EFFECTS__\nexport function check(fn, params) {\n    const ch = new core.$ZodCheck({\n        check: \"custom\",\n        ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\n// ZodCustom custom schema\n// @__NO_SIDE_EFFECTS__\nexport function custom(fn, _params) {\n    return core._custom(ZodMiniCustom, fn ?? (() => true), _params);\n}\n// refine\n// @__NO_SIDE_EFFECTS__\nexport function refine(fn, _params = {}) {\n    return core._refine(ZodMiniCustom, fn, _params);\n}\n// superRefine\n// @__NO_SIDE_EFFECTS__\nexport function superRefine(fn, params) {\n    return core._superRefine(fn, params);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\n// instanceof\nclass Class {\n    constructor(..._args) { }\n}\n// @__NO_SIDE_EFFECTS__\nfunction _instanceof(cls, params = {}) {\n    const inst = custom((data) => data instanceof cls, params);\n    inst._zod.bag.Class = cls;\n    // Override check to emit invalid_type instead of custom\n    inst._zod.check = (payload) => {\n        if (!(payload.value instanceof cls)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: cls.name,\n                input: payload.value,\n                inst,\n                path: [...(inst._zod.def.path ?? [])],\n            });\n        }\n    };\n    return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n    Codec: ZodMiniCodec,\n    Boolean: ZodMiniBoolean,\n    String: ZodMiniString,\n}, ...args);\n// @__NO_SIDE_EFFECTS__\nexport function json() {\n    const jsonSchema = _lazy(() => {\n        return union([string(), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n    });\n    return jsonSchema;\n}\nexport const ZodMiniFunction = /*@__PURE__*/ core.$constructor(\"ZodMiniFunction\", (inst, def) => {\n    core.$ZodFunction.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// @__NO_SIDE_EFFECTS__\nexport function _function(params) {\n    return new ZodMiniFunction({\n        type: \"function\",\n        input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n        output: params?.output ?? unknown(),\n    });\n}\nexport { _function as function };\n","import type { LatestType } from \"./domainTypes/Latest.js\"\nimport type { EmailNotificationsPreferences } from \"./EmailNotificationsSchemas.js\"\n\nexport type {\n    EmailNotificationsPreferences,\n    EmailNotificationsRequestLinkRequest,\n    EmailNotificationsSubscribeRequest,\n    EmailNotificationsUpdatePreferencesRequest,\n} from \"./EmailNotificationsSchemas.js\"\n\nexport const EMAIL_NOTIFICATIONS_FREQUENCIES = [\"weekly\", \"daily\"] as const\n\n// Transactional emails (e.g. welcome, magic links) are sent from their own\n// subdomain, so bulk-mail reputation can't affect their delivery. The name\n// doesn't mention the email provider or a specific kind of email, so the\n// address survives switching providers and adding new emails.\nexport const EMAIL_TRANSACTIONAL_FROM_ADDRESS =\n    \"Our World in Data <hello@mail.ourworldindata.org>\"\n// Broadcast emails (e.g. digests) are sent from the root domain, like the\n// newsletter, so they benefit from its established reputation. Moving the\n// newsletter to Postmark later then only changes the sending IPs.\nexport const EMAIL_BROADCAST_FROM_ADDRESS =\n    \"Our World in Data <updates@ourworldindata.org>\"\n// Replies to both kinds of email go to our inbox (the transactional subdomain\n// doesn't receive mail at all).\nexport const EMAIL_REPLY_TO_ADDRESS = \"info@ourworldindata.org\"\n\nexport type EmailNotificationsFrequency =\n    (typeof EMAIL_NOTIFICATIONS_FREQUENCIES)[number]\n\nexport const EMAIL_NOTIFICATIONS_STATUSES = [\n    \"subscribed\",\n    \"unsubscribed\",\n] as const\n\nexport type EmailNotificationsStatus =\n    (typeof EMAIL_NOTIFICATIONS_STATUSES)[number]\n\n// Lifetime of the magic-link tokens (tokens table). The short expiry is\n// cheap because the expired-link page offers to email a fresh link.\nexport const EMAIL_NOTIFICATIONS_MAGIC_LINK_TTL_MS = 30 * 60 * 1000\n\n// User-facing labels for the subscription and preferences forms and the\n// welcome email.\nexport const EMAIL_NOTIFICATIONS_FREQUENCY_LABELS: Record<\n    EmailNotificationsFrequency,\n    string\n> = {\n    daily: \"One email a day\",\n    weekly: \"One email a week\",\n}\n\n/**\n * The content-type dimension of a notification subscription. Mostly mirrors\n * the gdoc types of the latest feed, except announcement gdocs are split by\n * their kicker: \"data-update\" / \"topic-update\" kickers are topic-tagged\n * content updates and ship under \"data-update\", while \"announcement\" /\n * \"website-upgrade\" kickers are news about Our World in Data itself —\n * usually untagged, so the \"announcement\" content type is topic-independent.\n */\nexport const EMAIL_NOTIFICATIONS_CONTENT_TYPES = [\n    \"article\",\n    \"data-insight\",\n    \"data-update\",\n    \"announcement\",\n] as const\n\nexport type EmailNotificationsContentType =\n    (typeof EMAIL_NOTIFICATIONS_CONTENT_TYPES)[number]\n\n/** Which subscription content type an item's LatestType falls under. */\nexport const EMAIL_NOTIFICATIONS_CONTENT_TYPE_BY_LATEST_TYPE: Record<\n    LatestType,\n    EmailNotificationsContentType\n> = {\n    article: \"article\",\n    \"data-insight\": \"data-insight\",\n    \"data-update\": \"data-update\",\n    \"topic-update\": \"data-update\",\n    \"website-upgrade\": \"announcement\",\n    announcement: \"announcement\",\n}\n\nexport const EMAIL_NOTIFICATIONS_CONTENT_TYPE_LABELS: Record<\n    EmailNotificationsContentType,\n    string\n> = {\n    article: \"Articles\",\n    \"data-insight\": \"Data insights\",\n    \"data-update\": \"Data updates\",\n    announcement: \"Announcements\",\n}\n\n/**\n * Union of two sets of preferences, used when the public subscribe form is\n * submitted for an address that already exists: the form is tokenless, so it\n * may only ever broaden a subscription, never narrow one — otherwise anyone\n * who knows an address could silently strip its preferences.\n * - topicTags: union, where an empty array means \"all topics\" and therefore\n *   absorbs everything — if either side is empty, the result is empty.\n * - contentTypes: union.\n * - frequency: the incoming one — cadence is a setting, not subscription\n *   scope, so the form's explicit choice wins.\n */\nexport function mergeEmailNotificationsPreferences(\n    existing: EmailNotificationsPreferences,\n    incoming: EmailNotificationsPreferences\n): EmailNotificationsPreferences {\n    return {\n        topicTags:\n            existing.topicTags.length === 0 || incoming.topicTags.length === 0\n                ? []\n                : [...new Set([...existing.topicTags, ...incoming.topicTags])],\n        contentTypes: [\n            ...new Set([...existing.contentTypes, ...incoming.contentTypes]),\n        ],\n        frequency: incoming.frequency,\n    }\n}\n\n/** Whether the opt-in is active or awaits Mailchimp confirmation. */\nexport type OwidBriefOptInResult = \"active\" | \"pending\"\n\nexport interface EmailNotificationsSubscribeResponse {\n    ok?: boolean\n    error?: string\n}\n\nexport interface EmailNotificationsUpdatePreferencesResponse {\n    ok?: boolean\n    owidBriefOptIn?: OwidBriefOptInResult\n    error?: string\n}\n\nexport interface EmailNotificationsPreferencesResponse {\n    email?: string\n    emailNotificationsStatus?: EmailNotificationsStatus\n    // null when the identity has never configured notification preferences.\n    // The page uses defaults if the reader chooses to enable notifications.\n    preferences?: EmailNotificationsPreferences | null\n    // Whether the user is subscribed to the OWID Brief in Mailchimp; null when\n    // that can't be determined (Mailchimp unavailable or unconfigured), in\n    // which case the page disables Brief changes and explains why.\n    subscribedToOwidBrief?: boolean | null\n    // \"expired\" (HTTP 410) drives the expired-magic-link state of the\n    // preferences page, which offers to email a new link.\n    error?: \"expired\" | \"invalid\" | string\n}\n","import type { z } from \"zod/mini\"\nimport { Nominal } from \"../NominalType\"\n\n/**\n * Pins a zod schema to a hand-written interface. A schema declared\n * `satisfies SchemaFor<T>` fails to compile if it misses a field of `T`, adds\n * one, or gives one the wrong type.\n */\nexport type SchemaFor<T> = {\n    [K in keyof Required<T>]: z.ZodMiniType<T[K]>\n}\n\nexport type Integer = number\n\nexport type OwidVariableId = Integer // remove.\n\nexport type JsonString = string\nexport type Base64String = Nominal<string, \"Base64\">\nexport type HexString = Nominal<string, \"Hex\">\n\n/**\n * Pageview information about a single URL\n */\nexport interface RawPageview {\n    day: Date\n    url: string\n    views_7d: number\n    views_14d: number\n    views_365d: number\n}\n\nexport interface UserCountryInformation {\n    code: string\n    name: string\n    short_code: string\n    slug: string\n    regions: string[] | null\n}\n\nexport enum SiteFooterContext {\n    gdocsDocument = \"gdocsDocument\", // the rendered version (on the site)\n    grapherPage = \"grapherPage\",\n    dataPageV2 = \"dataPageV2\",\n    multiDimDataPage = \"multiDimDataPage\",\n    dynamicCollectionPage = \"dynamicCollectionPage\",\n    explorerPage = \"explorerPage\",\n    explorerIndexPage = \"explorerIndexPage\",\n    default = \"default\",\n    latestPage = \"latestPage\",\n    searchPage = \"search-page\",\n    subscribePage = \"subscribe-page\",\n    slideshowPage = \"slideshow-page\",\n}\n\nexport interface GitCommit {\n    author_email: string\n    author_name: string\n    body: string\n    date: string\n    hash: string\n    message: string\n}\nexport interface SerializedGridProgram {\n    slug: string\n    program: string\n    lastCommit?: GitCommit\n}\n\nexport enum TaggableType {\n    Charts = \"charts\",\n}\n\n// Exception format that can be easily given as an API error\nexport class JsonError extends Error {\n    status: number\n    constructor(message: string, status?: number, options?: ErrorOptions) {\n        super(message, options)\n        this.status = status ?? 400\n    }\n}\n\nexport interface QueryParams {\n    [key: string]: string | undefined\n}\n\nexport enum R2GrapherConfigDirectory {\n    byUuid = \"config/by-uuid\",\n    publishedGrapherBySlug = \"config/by-slug-published\",\n    multiDim = \"multi-dim-config\",\n}\n","export const EPOCH_DATE = \"2020-01-21\"\n\n/** The \"plot\" is a chart without any header, footer or controls */\nexport const IDEAL_PLOT_ASPECT_RATIO = 1.8\n\nexport const GRAPHER_MAP_TYPE = \"WorldMap\"\n\nexport const GRAPHER_CHART_TYPES = {\n    LineChart: \"LineChart\",\n    ScatterPlot: \"ScatterPlot\",\n    StackedArea: \"StackedArea\",\n    DiscreteBar: \"DiscreteBar\",\n    StackedDiscreteBar: \"StackedDiscreteBar\",\n    SlopeChart: \"SlopeChart\",\n    StackedBar: \"StackedBar\",\n    Marimekko: \"Marimekko\",\n    Dumbbell: \"Dumbbell\",\n    Swimlane: \"Swimlane\",\n} as const\n\nexport const ALL_GRAPHER_CHART_TYPES = Object.values(GRAPHER_CHART_TYPES)\n\n/**\n * Grapher tab specified in the config that determines the default tab to show.\n * If `chart` is selected and Grapher has more than one chart tab, then the\n * first chart tab will be active.\n */\nexport const GRAPHER_TAB_CONFIG_OPTIONS = {\n    // general\n    table: \"table\",\n    map: \"map\",\n    chart: \"chart\",\n\n    // chart types\n    line: \"line\",\n    scatter: \"scatter\",\n    \"stacked-area\": \"stacked-area\",\n    \"discrete-bar\": \"discrete-bar\",\n    \"stacked-discrete-bar\": \"stacked-discrete-bar\",\n    slope: \"slope\",\n    \"stacked-bar\": \"stacked-bar\",\n    marimekko: \"marimekko\",\n    dumbbell: \"dumbbell\",\n    swimlane: \"swimlane\",\n} as const\n\n/** Internal tab names used in Grapher */\nexport const GRAPHER_TAB_NAMES = {\n    Table: \"Table\",\n    WorldMap: \"WorldMap\",\n\n    ...GRAPHER_CHART_TYPES,\n} as const\n\n/** Valid values for the `tab` query parameter in Grapher */\nexport const GRAPHER_TAB_QUERY_PARAMS = GRAPHER_TAB_CONFIG_OPTIONS\n\n/**\n * Validation regex patterns for originUrl field.\n * The origin url can either be a full URL (with optional https protocol),\n * or a relative URL starting with /.\n * We use separate regex patterns rather than combining them for readability.\n */\nexport const ORIGIN_URL_REGEX_PATTERNS = [\n    /^(https?:\\/\\/)?[^/.]+\\.[^/].+$/, // absolute URL, optionally starting with https\n    /^\\/.+$/, // relative URL, starting with /\n] as const\n","import {\n    OwidChartDimensionInterface,\n    OwidVariableRoundingMode,\n} from \"../OwidVariableDisplayConfigInterface.js\"\nimport { ColumnSlugs, EntityName } from \"../domainTypes/CoreTableTypes.js\"\nimport { AxisAlign, Position } from \"../domainTypes/Layout.js\"\nimport { Integer } from \"../domainTypes/Various.js\"\nimport { DetailDictionary } from \"../gdocTypes/Gdoc.js\"\nimport {\n    GRAPHER_CHART_TYPES,\n    GRAPHER_MAP_TYPE,\n    GRAPHER_TAB_NAMES,\n    GRAPHER_TAB_CONFIG_OPTIONS,\n    GRAPHER_TAB_QUERY_PARAMS,\n} from \"./GrapherConstants.js\"\nimport { ArchiveContext } from \"../domainTypes/Archive.js\"\nimport {\n    BinningStrategyIncludingManual,\n    MidpointMode,\n} from \"./BinningStrategyTypes.js\"\nimport { CatalogDataForKey, CatalogKey } from \"../CatalogTypes.js\"\n\n// Utility type that marks all properties of T that may be undefined as optional.\nexport type UndefinedToOptional<T> = Partial<T> & {\n    [K in keyof T as undefined extends T[K] ? never : K]: T[K]\n}\n\nexport interface Box {\n    x: number\n    y: number\n    width: number\n    height: number\n}\n\nexport enum SortOrder {\n    asc = \"asc\",\n    desc = \"desc\",\n}\n\nexport enum SortBy {\n    /** Preserve the specified entity order */\n    custom = \"custom\",\n    /** Sort alphabetically by entity name */\n    entityName = \"entityName\",\n    /** Sort by the value of a specific column, identified by sortColumnSlug */\n    column = \"column\",\n    /** Sort by the total across all columns */\n    total = \"total\",\n    /** Sort by the change between the start and end values (dumbbell charts) */\n    change = \"change\",\n    /** Sort by the start value (dumbbell charts) */\n    startValue = \"startValue\",\n    /** Sort by the end value (dumbbell charts) */\n    endValue = \"endValue\",\n}\n\nexport interface SortConfig {\n    sortBy?: SortBy\n    sortOrder?: SortOrder\n    sortColumnSlug?: string\n}\n\nexport type Year = Integer\nexport type Color = string\n\n/**\n * A concrete point in time (year or date). It's always supposed to be a finite number, but we\n * cannot enforce this in TypeScript.\n */\nexport type Time = Integer\nexport type TimeRange = [Time, Time]\n\nexport type PrimitiveType = number | string | boolean\nexport type ValueRange = [number, number]\n\nexport enum ScaleType {\n    linear = \"linear\",\n    log = \"log\",\n}\n\nexport enum KeyChartLevel {\n    None = 0, // not a key chart, will not show in the all charts block of the related topic page\n    Bottom = 1, // chart will show at the bottom of the all charts block\n    Middle = 2, // chart will show in the middle of the all charts block\n    Top = 3, // chart will show at the top of the all charts block\n}\n\n/**\n * How to mark a detail on demand:\n * - superscript: add a superscript reference number\n * - underline: underline the text\n * - none: don't mark it\n */\nexport type DetailsMarker = \"superscript\" | \"underline\" | \"none\"\n\nexport interface BasicChartInformation {\n    title: string\n    slug: string\n    variantName?: string | null\n}\nexport interface RelatedChart extends BasicChartInformation {\n    chartId: number\n    keyChartLevel?: KeyChartLevel\n    archiveContext?: ArchiveContext | undefined\n}\nexport enum DimensionProperty {\n    y = \"y\",\n    x = \"x\",\n    size = \"size\",\n    color = \"color\",\n    table = \"table\",\n}\n\n// see CoreTableConstants.ts\nexport type ColumnSlug = string // a url friendly name for a column in a table. cannot have spaces\n\n/**\n * An unbounded value (±Infinity) or a concrete point in time (year or date).\n */\nexport type TimeBound = number\n\nexport type TimeBounds = [TimeBound, TimeBound]\n\n/**\n * The two special TimeBound values: unbounded left & unbounded right.\n */\nexport enum TimeBoundValue {\n    negativeInfinity = -Infinity,\n    positiveInfinity = Infinity,\n}\n\nexport enum TimeBoundValueStr {\n    unboundedLeft = \"earliest\",\n    unboundedRight = \"latest\",\n}\n\n/**\n * Time tolerance strategy used for maps\n */\nexport enum ToleranceStrategy {\n    closest = \"closest\",\n    backwards = \"backwards\",\n    forwards = \"forwards\",\n}\n\nexport interface ToleranceOptions {\n    toleranceOverride?: number\n    toleranceStrategyOverride?: ToleranceStrategy\n}\n\nexport enum AxisMinMaxValueStr {\n    auto = \"auto\",\n}\n\n// We currently have the notion of \"modes\", where you can either select 1 entity, or select multiple entities, or not change the selection at all.\n// Todo: can we remove?\nexport enum EntitySelectionMode {\n    MultipleEntities = \"add-country\",\n    SingleEntity = \"change-country\",\n    Disabled = \"disabled\",\n}\n\nexport enum StackMode {\n    absolute = \"absolute\",\n    relative = \"relative\",\n}\n\nexport enum FacetStrategy {\n    none = \"none\", // No facets\n    entity = \"entity\", // One chart for each country/entity\n    metric = \"metric\", // One chart for each Y column\n}\n\nexport enum FacetAxisDomain {\n    independent = \"independent\", // all facets have their own y domain\n    // TODO: rename to \"uniform\", since \"shared\" has a different meaning when\n    // axes are being plotted (it means the axis is omitted).\n    // Need to migrate Grapher & Explorer configs.\n    shared = \"shared\", // all facets share the same y domain\n}\n\nexport enum SeriesStrategy {\n    column = \"column\", // One line per column\n    entity = \"entity\", // One line per entity\n}\n\nexport interface ChartErrorInfo {\n    reason: string // no chart error if set to the empty string\n    help?: string\n}\n\nexport type SeriesName = string\n\nexport type SeriesColorMap = Map<SeriesName, Color>\n\nexport type GrapherMapType = typeof GRAPHER_MAP_TYPE\nexport type GrapherChartType = keyof typeof GRAPHER_CHART_TYPES\nexport type GrapherChartOrMapType = GrapherChartType | GrapherMapType\n\nexport type GrapherTabConfigOption = keyof typeof GRAPHER_TAB_CONFIG_OPTIONS\nexport type GrapherTabQueryParam = keyof typeof GRAPHER_TAB_QUERY_PARAMS\nexport type GrapherTabName = keyof typeof GRAPHER_TAB_NAMES\n\nexport interface RelatedQuestionsConfig {\n    text: string\n    url: string\n}\n\nexport enum MissingDataStrategy {\n    auto = \"auto\", // pick default strategy based on chart type\n    hide = \"hide\", // hide entities with missing data\n    show = \"show\", // show entities with missing data\n}\n\n// When a user hovers over a connected series line in a ScatterPlot we show\n// a label for each point. By default that value will be from the \"year\" column\n// but by changing this option the column used for the x or y axis could be used instead.\nexport enum ScatterPointLabelStrategy {\n    year = \"year\",\n    x = \"x\",\n    y = \"y\",\n}\n\nexport enum PeerCountryStrategy {\n    /** Use the containing continent, income group and World as peers */\n    ParentRegions = \"parentRegions\",\n    /** Use countries with similar GDP per capita as peers */\n    GdpPerCapita = \"gdpPerCapita\",\n    /** Use countries with similar population as peers */\n    Population = \"population\",\n    /** Use countries that represent the full data range */\n    DataRange = \"dataRange\",\n    /** Use the chart's default selection as peers */\n    DefaultSelection = \"defaultSelection\",\n    /** Use geographically neighboring countries as peers */\n    Neighbors = \"neighbors\",\n    /** Don't automatically add any peer countries (useful in search) */\n    None = \"none\",\n}\n\nexport type PeerCountryStrategyQueryParam = PeerCountryStrategy | \"auto\"\n\n/** Valid values for the peerCountries query parameter */\nexport const VALID_PEER_COUNTRY_STRATEGY_QUERY_PARAMS: PeerCountryStrategyQueryParam[] =\n    [\"auto\", ...Object.values(PeerCountryStrategy)]\n\n/** Check if the given string is a valid PeerCountryStrategy */\nfunction isValidPeerCountryStrategy(\n    candidate: string\n): candidate is PeerCountryStrategy {\n    return Object.values(PeerCountryStrategy).includes(\n        candidate as PeerCountryStrategy\n    )\n}\n\n/** Check if the given string is a valid PeerCountryStrategyQueryParam */\nexport function isValidPeerCountryStrategyQueryParam(\n    candidate: string\n): candidate is PeerCountryStrategyQueryParam {\n    return candidate === \"auto\" || isValidPeerCountryStrategy(candidate)\n}\n\nexport enum GrapherTooltipAnchor {\n    /** The tooltip is positioned relative to the mouse cursor */\n    Mouse = \"mouse\",\n    /** The tooltip is pinned to the bottom of the screen */\n    Bottom = \"bottom\",\n}\n\nexport interface AnnotationFieldsInTitle {\n    entity?: boolean\n    time?: boolean\n    changeInPrefix?: boolean\n}\n\nexport interface Tickmark {\n    value: number\n    priority: number\n    faint?: boolean\n    gridLineOnly?: boolean\n    solid?: boolean // mostly for labelling domain start (e.g. 0)\n    label?: string\n}\nexport interface TickFormattingOptions {\n    roundingMode?: OwidVariableRoundingMode\n    numDecimalPlaces?: number\n    numSignificantFigures?: number\n    unit?: string\n    trailingZeroes?: boolean\n    spaceBeforeUnit?: boolean\n    useNoBreakSpace?: boolean\n    showPlus?: boolean\n    numberAbbreviation?: \"short\" | \"long\" | false\n    /** The magnitude at which abbreviation starts (defaults to 1 million) */\n    abbreviationThreshold?: number\n    /** Minimum precision of abbreviated values (defaults to 3) */\n    abbreviationSignificantFigures?: number\n}\n// Represents the actual entered configuration state in the editor\nexport interface AxisConfigInterface {\n    scaleType?: ScaleType\n    label?: string\n    min?: number | AxisMinMaxValueStr.auto\n    max?: number | AxisMinMaxValueStr.auto\n    canChangeScaleType?: boolean\n    removePointsOutsideDomain?: boolean\n    hideAxis?: boolean\n    hideTickLabels?: boolean\n\n    /** Hide the faint lines that are shown inside the plot (axis ticks may still be visible). */\n    hideGridlines?: boolean\n\n    /**\n     * The *preferred* orientation of the axis.\n     * If the orientation is not supported by the axis, this parameter will be ignored.\n     */\n    orient?: Position\n\n    /**\n     * Whether the axis domain should be the same across faceted charts (if possible)\n     */\n    facetDomain?: FacetAxisDomain\n\n    /**\n     * Minimum pixels to take up.\n     * Dictates the minimum height for a HorizontalAxis, minimum width for a VerticalAxis.\n     */\n    minSize?: number\n\n    /**\n     * The padding between an axis label and an axis tick\n     */\n    labelPadding?: number\n\n    /**\n     * The padding between an axis tick and an axis gridline\n     */\n    tickPadding?: number\n\n    /**\n     * Extend scale to start & end on \"nicer\" round values.\n     * See: https://github.com/d3/d3-scale#continuous_nice\n     */\n    nice?: boolean\n\n    /**\n     * The (rough) maximum number of ticks to show. Not a strict limit, more ticks may be shown.\n     * See: https://github.com/d3/d3-scale#continuous_ticks\n     */\n    maxTicks?: number\n\n    /**\n     * Custom ticks to use. Any automatic ticks are omitted.\n     * Note that the ticks will be omitted if they are outside the axis domain.\n     * To control the domain, use `min` and `max`.\n     */\n    ticks?: Tickmark[]\n\n    /**\n     * Tick formatting overrides. Allows things like omitting the unit and using\n     * short number abbreviations.\n     */\n    tickFormattingOptions?: TickFormattingOptions\n\n    /**\n     * What to do when .place() is called on an axis that only contains a single\n     * domain value.\n     * Should the point be placed at the start, middle or end of the axis?\n     */\n    singleValueAxisPointAlign?: AxisAlign\n\n    /**\n     * If given, treat the axis as a band scale: each value occupies a fixed\n     * width and the axis is padded on both sides to reserve space for the\n     * outermost values.\n     *\n     * These values also become the default tick positions (one tick per band),\n     * unless `ticks` is set explicitly or a calendar-aware tick layout applies\n     * (e.g. monthly time axes).\n     */\n    bandValues?: number[]\n\n    /**\n     * Whether to offset the leftmost tick label so it doesn't overflow the axis start.\n     * Defaults to true.\n     */\n    shouldOffsetTickLabelAtStart?: boolean\n\n    /**\n     * Whether to offset the rightmost tick label so it doesn't overflow the axis end.\n     * Defaults to true.\n     */\n    shouldOffsetTickLabelAtEnd?: boolean\n\n    /**\n     * Whether the domain is half-open, `[min, max)`, so that `max` itself gets\n     * no tick. Defaults to false.\n     */\n    isDomainEndExclusive?: boolean\n}\n\nexport interface VerticalComparisonLineConfig {\n    xEquals: number // x-coordinate of the vertical line\n    label?: string\n}\n\nexport interface CustomComparisonLineConfig {\n    yEquals?: string // line equation like \"2*x^2\" or \"sqrt(x)\"; defaults to \"x\"\n    label?: string\n}\n\nexport type ComparisonLineConfig =\n    | VerticalComparisonLineConfig\n    | CustomComparisonLineConfig\n\nexport interface VerticalComparisonLineLabelPlacement {\n    x: number\n    anchor: \"start\" | \"end\"\n}\n\nexport enum LogoOption {\n    owid = \"owid\",\n    \"core+owid\" = \"core+owid\",\n    wordmark = \"wordmark\",\n}\n\nexport enum LicenseOption {\n    \"cc-by\" = \"cc-by\",\n    \"cc-by-sa\" = \"cc-by-sa\",\n    \"cc-by-nc\" = \"cc-by-nc\",\n    \"cc-by-nc-sa\" = \"cc-by-nc-sa\",\n    \"cc-by-nd\" = \"cc-by-nd\",\n    \"cc-by-nc-nd\" = \"cc-by-nc-nd\",\n}\n\nexport const CHART_LICENSES: Record<\n    LicenseOption,\n    { name: string; url: string }\n> = {\n    [LicenseOption[\"cc-by\"]]: {\n        name: \"CC BY\",\n        url: \"https://creativecommons.org/licenses/by/4.0/\",\n    },\n    [LicenseOption[\"cc-by-sa\"]]: {\n        name: \"CC BY-SA\",\n        url: \"https://creativecommons.org/licenses/by-sa/4.0/\",\n    },\n    [LicenseOption[\"cc-by-nc\"]]: {\n        name: \"CC BY-NC\",\n        url: \"https://creativecommons.org/licenses/by-nc/4.0/\",\n    },\n    [LicenseOption[\"cc-by-nc-sa\"]]: {\n        name: \"CC BY-NC-SA\",\n        url: \"https://creativecommons.org/licenses/by-nc-sa/4.0/\",\n    },\n    [LicenseOption[\"cc-by-nd\"]]: {\n        name: \"CC BY-ND\",\n        url: \"https://creativecommons.org/licenses/by-nd/4.0/\",\n    },\n    [LicenseOption[\"cc-by-nc-nd\"]]: {\n        name: \"CC BY-NC-ND\",\n        url: \"https://creativecommons.org/licenses/by-nc-nd/4.0/\",\n    },\n}\n\nexport const DEFAULT_CHART_LICENSE = LicenseOption[\"cc-by\"]\n\nexport interface ProjectionColumnInfo {\n    projectedSlug: ColumnSlug\n    historicalSlug: ColumnSlug\n    combinedSlug: ColumnSlug\n    slugForIsProjectionColumn: ColumnSlug\n}\n\nexport interface ColorScaleConfigInterface {\n    baseColorScheme?: ColorSchemeName\n    colorSchemeInvert?: boolean\n    binningStrategy: BinningStrategyIncludingManual\n    createBinForMidpoint?: boolean\n    minValue?: number\n    maxValue?: number\n    midpoint?: number\n    midpointMode?: MidpointMode\n    customNumericValues: number[]\n    customNumericLabels: (string | undefined | null)[]\n    customNumericColorsActive?: boolean\n    customNumericColors: (Color | undefined | null)[]\n\n    customCategoryColors: Record<string, string | undefined>\n    customCategoryLabels: Record<string, string | undefined>\n    customHiddenCategories: Record<string, true | undefined>\n    legendDescription?: string\n}\n\nexport const colorScaleConfigDefaults = {\n    binningStrategy: \"auto\",\n    customNumericValues: [],\n    customNumericLabels: [],\n    customNumericColors: [],\n\n    customCategoryColors: {},\n    customCategoryLabels: {},\n    customHiddenCategories: {},\n} satisfies ColorScaleConfigInterface\n\nexport interface ColorSchemeInterface {\n    name: string\n    colorSets: Color[][] // Different color sets depending on how many distinct colors you want\n    singleColorScale?: boolean\n    isDistinct?: boolean\n    displayName?: string\n    colorMap?: Record<string, Color> // Optional mapping from categorical values to specific colors\n}\n\n// Note: TypeScript does not currently support extending or merging enums. Ideally we would have 2 enums here (one for custom and one for brewer) and then just merge them.\n// https://github.com/microsoft/TypeScript/issues/17592\nexport enum ColorSchemeName {\n    // Brewer schemes:\n    YlGn = \"YlGn\",\n    YlGnBu = \"YlGnBu\",\n    GnBu = \"GnBu\",\n    BuGn = \"BuGn\",\n    PuBuGn = \"PuBuGn\",\n    BuPu = \"BuPu\",\n    RdPu = \"RdPu\",\n    PuRd = \"PuRd\",\n    OrRd = \"OrRd\",\n    YlOrRd = \"YlOrRd\",\n    YlOrBr = \"YlOrBr\",\n    Purples = \"Purples\",\n    Blues = \"Blues\",\n    Greens = \"Greens\",\n    Oranges = \"Oranges\",\n    Reds = \"Reds\",\n    Greys = \"Greys\",\n    PuOr = \"PuOr\",\n    BrBG = \"BrBG\",\n    PRGn = \"PRGn\",\n    PiYG = \"PiYG\",\n    RdBu = \"RdBu\",\n    RdGy = \"RdGy\",\n    RdYlBu = \"RdYlBu\",\n    Spectral = \"Spectral\",\n    RdYlGn = \"RdYlGn\",\n    Accent = \"Accent\",\n    Dark2 = \"Dark2\",\n    Paired = \"Paired\",\n    Pastel1 = \"Pastel1\",\n    Pastel2 = \"Pastel2\",\n    Set1 = \"Set1\",\n    Set2 = \"Set2\",\n    Set3 = \"Set3\",\n    PuBu = \"PuBu\",\n\n    // Custom schemes:\n    Magma = \"Magma\",\n    Inferno = \"Inferno\",\n    Plasma = \"Plasma\",\n    Viridis = \"Viridis\",\n    continents = \"continents\",\n    stackedAreaDefault = \"stackedAreaDefault\",\n    \"owid-distinct\" = \"owid-distinct\",\n    SingleColorDenim = \"SingleColorDenim\",\n    SingleColorTeal = \"SingleColorTeal\",\n    SingleColorPurple = \"SingleColorPurple\",\n    SingleColorDustyCoral = \"SingleColorDustyCoral\",\n    SingleColorDarkCopper = \"SingleColorDarkCopper\",\n    OwidCategoricalA = \"OwidCategoricalA\",\n    OwidCategoricalB = \"OwidCategoricalB\",\n    OwidCategoricalC = \"OwidCategoricalC\",\n    OwidCategoricalD = \"OwidCategoricalD\",\n    OwidCategoricalE = \"OwidCategoricalE\",\n    OwidCategoricalMap = \"OwidCategoricalMap\",\n    OwidEnergy = \"OwidEnergy\",\n    OwidEnergyLines = \"OwidEnergyLines\",\n    OwidDistinctLines = \"OwidDistinctLines\",\n    BinaryMapPaletteA = \"BinaryMapPaletteA\",\n    BinaryMapPaletteB = \"BinaryMapPaletteB\",\n    BinaryMapPaletteC = \"BinaryMapPaletteC\",\n    BinaryMapPaletteD = \"BinaryMapPaletteD\",\n    BinaryMapPaletteE = \"BinaryMapPaletteE\",\n    SingleColorGradientDenim = \"SingleColorGradientDenim\",\n    SingleColorGradientTeal = \"SingleColorGradientTeal\",\n    SingleColorGradientPurple = \"SingleColorGradientPurple\",\n    SingleColorGradientDustyCoral = \"SingleColorGradientDustyCoral\",\n    SingleColorGradientDarkCopper = \"SingleColorGradientDarkCopper\",\n}\n\nexport enum MapRegionName {\n    World = \"World\",\n    Africa = \"Africa\",\n    NorthAmerica = \"NorthAmerica\",\n    SouthAmerica = \"SouthAmerica\",\n    Asia = \"Asia\",\n    Europe = \"Europe\",\n    Oceania = \"Oceania\",\n}\n\n// 'World' doesn't make sense as a region for the globe\nexport type GlobeRegionName = Exclude<MapRegionName, MapRegionName.World>\n\nexport interface GlobeConfig {\n    isActive: boolean\n    rotation: [number, number]\n    zoom: number\n    focusCountry?: EntityName\n}\n\nexport enum DumbbellConnectorStyle {\n    Arrow = \"arrow\",\n    Line = \"line\",\n}\n\nexport enum DumbbellValueLabelMode {\n    Absolute = \"absolute\",\n    Change = \"change\",\n    PercentChange = \"percentChange\",\n    None = \"none\",\n}\n\nexport interface DumbbellTrendColorMap {\n    /** Color for dumbbells whose value increased over time */\n    increase?: Color\n    /** Color for dumbbells whose value decreased over time */\n    decrease?: Color\n}\n\nexport interface DumbbellChartConfigInterface {\n    connectorStyle?: DumbbellConnectorStyle\n    valueLabelMode?: DumbbellValueLabelMode\n    /** Custom colors for the time-range encoding */\n    trendColorMap?: DumbbellTrendColorMap\n}\n\nexport enum SwimlaneSegmentLabelMode {\n    CategoryAndTimeRange = \"categoryAndTimeRange\",\n    None = \"none\",\n}\n\nexport interface SwimlaneChartConfigInterface {\n    segmentLabelMode?: SwimlaneSegmentLabelMode\n}\n\nexport interface MapConfigInterface {\n    columnSlug?: ColumnSlug\n    time?: TimeBound | TimeBoundValueStr\n    startTime?: TimeBound | TimeBoundValueStr\n    timeTolerance?: number\n    toleranceStrategy?: ToleranceStrategy\n    hideTimeline?: boolean\n    region?: MapRegionName\n    globe?: GlobeConfig\n    colorScale?: Partial<ColorScaleConfigInterface>\n    tooltipUseCustomLabels?: boolean\n    selectedEntityNames?: EntityName[]\n}\n\nexport type SelectedEntityColors = Record<EntityName, string | undefined>\n\n// This configuration represents the entire persistent state of a grapher\n// Ideally, this is also all of the interaction state: when a grapher is saved and loaded again\n// under the same rendering conditions it ought to remain visually identical\nexport interface GrapherInterface extends SortConfig {\n    $schema?: string\n    chartTypes?: GrapherChartType[]\n    id?: number\n    version?: number\n    slug?: string\n    title?: string\n    subtitle?: string\n    sourceDesc?: string\n    note?: string\n    hideAnnotationFieldsInTitle?: AnnotationFieldsInTitle\n    minTime?: TimeBound | TimeBoundValueStr\n    maxTime?: TimeBound | TimeBoundValueStr\n    timelineMinTime?: Time | TimeBoundValueStr\n    timelineMaxTime?: Time | TimeBoundValueStr\n    dimensions?: OwidChartDimensionInterface[]\n    addCountryMode?: EntitySelectionMode\n    comparisonLines?: ComparisonLineConfig[]\n    stackMode?: StackMode\n\n    showNoDataArea?: boolean\n    hideSeriesLabels?: boolean\n    logo?: LogoOption\n    hideLogo?: boolean\n    hideRelativeToggle?: boolean\n    entityType?: string\n    entityTypePlural?: string\n    hideTimeline?: boolean\n    zoomToSelection?: boolean\n    showYearLabels?: boolean // Always show year in labels for bar charts\n    hasMapTab?: boolean\n    tab?: GrapherTabConfigOption\n    relatedQuestions?: RelatedQuestionsConfig[]\n    details?: DetailDictionary\n    internalNotes?: string\n    variantName?: string\n    originUrl?: string\n    license?: LicenseOption\n    isPublished?: boolean\n    baseColorScheme?: ColorSchemeName\n    invertColorScheme?: boolean\n    hideConnectedScatterLines?: boolean // Hides lines between points when timeline spans multiple years. Requested by core-econ for certain charts\n    hideScatterLabels?: boolean\n    scatterPointLabelStrategy?: ScatterPointLabelStrategy\n    compareEndPointsOnly?: boolean\n    matchingEntitiesOnly?: boolean\n    hideTotalValueLabel?: boolean\n    excludedEntityNames?: EntityName[]\n    includedEntityNames?: EntityName[]\n    inapplicableEntityNames?: EntityName[]\n    selectedEntityNames?: EntityName[]\n    selectedEntityColors?: SelectedEntityColors\n    focusedSeriesNames?: SeriesName[]\n    peerCountryStrategy?: PeerCountryStrategy\n    missingDataStrategy?: MissingDataStrategy\n    hideFacetControl?: boolean\n    facettingLabelByYVariables?: string\n    selectedFacetStrategy?: FacetStrategy\n\n    xAxis?: Partial<AxisConfigInterface>\n    yAxis?: Partial<AxisConfigInterface>\n    colorScale?: Partial<ColorScaleConfigInterface>\n    map?: Partial<MapConfigInterface>\n    dumbbell?: Partial<DumbbellChartConfigInterface>\n    swimlane?: Partial<SwimlaneChartConfigInterface>\n\n    // When we move graphers to Git, and remove dimensions, we can clean this up.\n    ySlugs?: ColumnSlugs\n    xSlug?: ColumnSlug\n    sizeSlug?: ColumnSlug\n    colorSlug?: ColumnSlug\n    tableSlugs?: ColumnSlugs\n}\n\nexport interface LegacyGrapherInterface extends GrapherInterface {\n    data: any\n}\n\n// This is intentionally a `type` and not an `interface`, because the TS semantics make it so that this here can be assigned to a `Record<string, string>`.\n// See https://stackoverflow.com/q/64970414\nexport type GrapherQueryParams = {\n    country?: string\n    focus?: string\n    tab?: string\n    overlay?: string\n    stackMode?: string\n    zoomToSelection?: string\n    xScale?: string\n    yScale?: string\n    time?: string\n    region?: string\n    endpointsOnly?: string\n    facet?: string\n    uniformYAxis?: string\n    showSelectionOnlyInTable?: string\n    showNoDataArea?: string\n    globe?: string\n    globeRotation?: string\n    globeZoom?: string\n    mapSelect?: string\n    tableFilter?: string\n    tableSearch?: string\n    peerCountries?: string\n}\n\nexport type LegacyGrapherQueryParams = GrapherQueryParams & {\n    year?: string\n}\n\nexport type DownloadRewriteTarget =\n    | \"download-full-data\"\n    | \"download-filtered-data\"\n    | \"api-csv\"\n    | \"api-metadata\"\n    | \"api-example-excel\"\n    | \"api-example-python\"\n    | \"api-example-r\"\n    | \"api-example-stata\"\n\n// We don't use this anywhere, but this is a way to ensure that we have an object with all keys present\n// ... so GRAPHER_QUERY_PARAM_KEYS below is guaranteed to have all keys of LegacyGrapherQueryParams\nconst GRAPHER_ALL_QUERY_PARAMS: Required<LegacyGrapherQueryParams> = {\n    country: \"\",\n    focus: \"\",\n    tab: \"\",\n    overlay: \"\",\n    stackMode: \"\",\n    zoomToSelection: \"\",\n    xScale: \"\",\n    yScale: \"\",\n    time: \"\",\n    region: \"\",\n    endpointsOnly: \"\",\n    facet: \"\",\n    uniformYAxis: \"\",\n    showSelectionOnlyInTable: \"\",\n    showNoDataArea: \"\",\n    year: \"\",\n    globe: \"\",\n    globeRotation: \"\",\n    globeZoom: \"\",\n    mapSelect: \"\",\n    tableFilter: \"\",\n    tableSearch: \"\",\n    peerCountries: \"\",\n}\n\nexport const GRAPHER_QUERY_PARAM_KEYS = Object.keys(\n    GRAPHER_ALL_QUERY_PARAMS\n) as (keyof LegacyGrapherQueryParams)[]\n\n// Another approach we may want to try is this: https://github.com/mobxjs/serializr\nexport const grapherKeysToSerialize = [\n    \"$schema\",\n    \"chartTypes\",\n    \"id\",\n    \"version\",\n    \"slug\",\n    \"title\",\n    \"subtitle\",\n    \"sourceDesc\",\n    \"note\",\n    \"hideAnnotationFieldsInTitle\",\n    \"minTime\",\n    \"maxTime\",\n    \"timelineMinTime\",\n    \"timelineMaxTime\",\n    \"addCountryMode\",\n    \"stackMode\",\n    \"showNoDataArea\",\n    \"hideSeriesLabels\",\n    \"logo\",\n    \"hideLogo\",\n    \"hideRelativeToggle\",\n    \"entityType\",\n    \"entityTypePlural\",\n    \"facettingLabelByYVariables\",\n    \"hideTimeline\",\n    \"zoomToSelection\",\n    \"showYearLabels\",\n    \"hasMapTab\",\n    \"tab\",\n    \"internalNotes\",\n    \"variantName\",\n    \"originUrl\",\n    \"license\",\n    \"isPublished\",\n    \"baseColorScheme\",\n    \"invertColorScheme\",\n    \"hideConnectedScatterLines\",\n    \"hideScatterLabels\",\n    \"scatterPointLabelStrategy\",\n    \"compareEndPointsOnly\",\n    \"matchingEntitiesOnly\",\n    \"hideTotalValueLabel\",\n    \"xAxis\",\n    \"yAxis\",\n    \"colorScale\",\n    \"map\",\n    \"dimensions\",\n    \"selectedEntityNames\",\n    \"selectedEntityColors\",\n    \"focusedSeriesNames\",\n    \"sortBy\",\n    \"sortOrder\",\n    \"sortColumnSlug\",\n    \"excludedEntityNames\",\n    \"includedEntityNames\",\n    \"inapplicableEntityNames\",\n    \"selectedFacetStrategy\",\n    \"hideFacetControl\",\n    \"comparisonLines\",\n    \"relatedQuestions\",\n    \"missingDataStrategy\",\n    \"peerCountryStrategy\",\n    \"dumbbell\",\n    \"swimlane\",\n\n    // Internals\n    \"adminBaseUrl\",\n    \"bakedGrapherURL\",\n]\n\nexport enum GrapherVariant {\n    /**\n     * Default rendering, with header and footer\n     */\n    Default = \"default\",\n\n    /**\n     * Default rendering, chart area only\n     */\n    Uncaptioned = \"uncaptioned\",\n\n    /**\n     * Simplified rendering, suitable for thumbnails.\n     * Less noisy visualization, but should be understandable on its own\n     */\n    Thumbnail = \"thumbnail\",\n}\n\nexport interface ChartRedirect {\n    id: number\n    slug: string\n    chartId: number\n    targetQueryParam: string | null\n}\n\nexport enum GrapherWindowType {\n    panel = \"panel\",\n    modal = \"modal\",\n    drawer = \"drawer\",\n}\n\nexport type GrapherTrendArrowDirection = \"up\" | \"right\" | \"down\"\n\nexport type SideWidths = { left: number; right: number }\n\n/** Function type for loading additional indicator data from the catalog */\nexport type AdditionalGrapherDataFetchFn = <K extends CatalogKey>(\n    catalogKey: K\n) => Promise<CatalogDataForKey<K>>\n","export enum Position {\n    top = \"top\",\n    right = \"right\",\n    bottom = \"bottom\",\n    left = \"left\",\n}\n\nexport type PositionMap<Value> = {\n    [key in Position]?: Value\n}\n\nexport enum HorizontalAlign {\n    left = \"left\",\n    center = \"center\",\n    right = \"right\",\n}\n\nexport enum VerticalAlign {\n    top = \"top\",\n    middle = \"middle\",\n    bottom = \"bottom\",\n}\n\nexport enum AxisAlign {\n    start = \"start\",\n    middle = \"middle\",\n    end = \"end\",\n}\n\nexport interface GridParameters {\n    rows: number\n    columns: number\n    count: number\n}\n","import { DbPlainTag } from \"../dbTypes/Tags.js\"\nimport { OwidGdocType } from \"../gdocTypes/Gdoc.js\"\n\nexport interface EntryMeta {\n    slug: string\n    title: string\n}\n\nexport interface CategoryWithEntries {\n    name: string\n    slug: string\n    entries: EntryMeta[]\n    subcategories?: CategoryWithEntries[]\n}\n\nexport const TagGraphTableName = \"tag_graph\"\n\nexport type DbInsertTagGraphNode = {\n    parentId: number\n    childId: number\n    weight?: number\n    updatedAt?: string\n}\n\nexport type DbPlainTagGraphNode = Required<DbInsertTagGraphNode>\n\nexport const TagGraphRootName = \"tag-graph-root\" as const\n\nexport const TOPIC_AREA_NAMES = [\n    \"Population and Demographic Change\",\n    \"Health\",\n    \"Energy and Environment\",\n    \"Food and Agriculture\",\n    \"Poverty and Economic Development\",\n    \"Education and Knowledge\",\n    \"Innovation and Technological Change\",\n    \"Living Conditions, Community and Wellbeing\",\n    \"Human Rights and Democracy\",\n    \"Violence and War\",\n] as const\n\nexport type TopicAreaName = (typeof TOPIC_AREA_NAMES)[number]\n\nexport type FlatTagGraphNode = Pick<DbPlainTag, \"name\" | \"slug\"> & {\n    weight: number\n    isTopic: boolean\n    isSearchable: boolean\n    parentId: number\n    childId: number\n    slug: string | null\n}\n\nexport type FlatTagGraph = Record<number, FlatTagGraphNode[]>\n\nexport interface TagGraphNode {\n    children: TagGraphNode[]\n    id: number\n    isTopic: boolean\n    isSearchable: boolean\n    name: string\n    path: number[]\n    slug: string | null\n    weight: number\n}\n\nexport type TagGraphRoot = TagGraphNode & {\n    children: TagGraphNode[]\n    id: number\n    isTopic: false\n    isSearchable: false\n    name: typeof TagGraphRootName\n    path: [number]\n    slug: null\n    weight: 0\n}\n\nexport interface PostReference {\n    id: string\n    title: string\n    slug: string\n    url: string\n    type: OwidGdocType\n}\n\nexport enum ContentGraphLinkType {\n    Gdoc = \"gdoc\",\n    Url = \"url\",\n    Grapher = \"grapher\",\n    Explorer = \"explorer\",\n    NarrativeChart = \"narrative-chart\",\n    StaticViz = \"static-viz\",\n    Dod = \"dod\",\n    GuidedChart = \"guided-chart\",\n}\n","import type { OwidEnrichedGdocBlock } from \"../ArchieMlComponents.js\"\nexport type ArchieMLUnexpectedNonObjectValue = string\n\nexport type ParseError = {\n    message: string\n    isWarning?: boolean\n}\n\nexport type EnrichedBlockWithParseErrors = {\n    parseErrors: ParseError[]\n}\n\nexport enum BlockSize {\n    Narrow = \"narrow\",\n    Wide = \"wide\",\n    Widest = \"widest\",\n}\n\nexport function checkIsBlockSize(size: unknown): size is BlockSize {\n    if (typeof size !== \"string\") return false\n    return Object.values(BlockSize).includes(size as any)\n}\n\nexport const blockVisibilitys = [\"desktop\", \"mobile\"] as const\n\nexport type BlockVisibility = (typeof blockVisibilitys)[number]\n\nexport const blockAlignments = [\"left\", \"center\", \"right\"] as const\n\nexport type BlockAlignment = (typeof blockAlignments)[number]\n\n/* This can either be a link to a gdoc/grapher/explorer or external URL */\nexport type RawHybridLink = {\n    url?: string\n    title?: string\n    subtitle?: string\n}\n\n/* This can either be a link to a gdoc/grapher/explorer or external URL */\nexport type EnrichedHybridLink = {\n    url: string\n    title?: string\n    subtitle?: string\n    thumbnail?: string\n    type: \"hybrid-link\"\n}\n\nexport type Ref = {\n    id: string\n    // Can be -1\n    index: number\n    content: OwidEnrichedGdocBlock[]\n    parseErrors: ParseError[]\n}\n\nexport type RefDictionary = {\n    [refId: string]: Ref\n}\n","import {\n    GrapherChartOrMapType,\n    GrapherTabConfigOption,\n    RelatedChart,\n} from \"../grapherTypes/GrapherTypes.js\"\nimport { BespokeMetadata } from \"../domainTypes/BespokeMetadata.js\"\nimport { BreadcrumbItem } from \"../domainTypes/Site.js\"\nimport { TocHeadingWithSupertitle } from \"../domainTypes/Toc.js\"\nimport { ImageMetadata } from \"./Image.js\"\nimport {\n    EnrichedBlockSocials,\n    EnrichedBlockText,\n    EnrichedBlockWithParseErrors,\n    OwidEnrichedGdocBlock,\n    OwidRawGdocBlock,\n    RefDictionary,\n} from \"./ArchieMlComponents.js\"\nimport { DbPlainTag, MinimalTag } from \"../dbTypes/Tags.js\"\nimport { DbEnrichedLatestWork } from \"../domainTypes/Author.js\"\nimport { QueryParams } from \"../domainTypes/Various.js\"\nimport { TagGraphRoot } from \"../domainTypes/ContentGraph.js\"\nimport { DbRawImage } from \"../dbTypes/Images.js\"\nimport { DbPlainNarrativeChart } from \"../dbTypes/NarrativeCharts.js\"\nimport { ArchivedPageVersion } from \"../domainTypes/Archive.js\"\nimport { GrapherValuesJson } from \"../endpointTypes/GrapherValuesJson.js\"\n\nexport enum OwidGdocPublicationContext {\n    unlisted = \"unlisted\",\n    listed = \"listed\",\n}\n\nexport interface LatestDataInsight {\n    id: string\n    slug: string\n    publishedAt: Date | null\n    content: OwidGdocDataInsightContent\n}\n\nexport interface LatestAnnouncement {\n    id: string\n    slug: string\n    publishedAt: Date | null\n    content: OwidGdocAnnouncementContent\n}\n\nexport interface LinkedAuthor {\n    name: string\n    slug: string\n    featuredImage: string | null\n    updatedAt: Date\n}\n\nexport enum ChartConfigType {\n    Grapher = \"grapher\",\n    Explorer = \"explorer\",\n    MultiDim = \"multi-dim\",\n}\n\n// A minimal object containing metadata needed for rendering prominent links etc in the client\nexport interface LinkedChart {\n    configType: ChartConfigType\n    originalSlug: string\n    resolvedUrl: string\n    title: string\n    subtitle?: string\n    thumbnail?: string\n    tags: string[]\n    tab?: GrapherTabConfigOption\n    indicatorId?: number // in case of a datapage\n    archivedPageVersion?: ArchivedPageVersion | undefined\n    dimensionSlugs?: string[] // for validating mdim links, to make sure the query params are correct\n}\n\n// An object containing metadata needed for embedded narrative charts\nexport interface NarrativeChartInfo {\n    name: string\n    title: string\n    chartConfigId: string\n    parentChartSlug: string\n    queryParamsForParentChart: QueryParams\n    latestArchivedParent?: ArchivedPageVersion\n}\n\n// An object containing metadata needed for embedded static visualizations\nexport interface LinkedStaticViz {\n    desktop: ImageMetadata\n    mobile?: ImageMetadata\n    name: string\n    grapherUrl?: string\n    sourceUrl?: string\n    description: string\n}\n\n/**\n * A linked indicator is derived from a linked grapher's config (see: getVariableOfDatapageIfApplicable)\n * e.g. https://ourworldindata.org/grapher/tomato-production -> config for grapher with { slug: \"tomato-production\" } -> indicator metadata\n * currently we only attach a small amount of metadata that we need for key-indicator blocks.\n * In the future we might want to attach more metadata, e.g. the indicator's description, source, etc\n */\nexport interface LinkedIndicator {\n    id: number\n    title: string\n    attributionShort?: string\n}\n\n/**\n * A linked callout stores the data values needed to populate a data-callout block.\n * The key is generated from the normalized URL + entity name.\n */\nexport interface LinkedCallout {\n    url: string\n    /** The data values for this chart/entity combination */\n    values: GrapherValuesJson\n}\n\nexport type LinkedCallouts = Record<string, LinkedCallout>\n\nexport enum OwidGdocType {\n    Article = \"article\",\n    TopicPage = \"topic-page\",\n    Fragment = \"fragment\",\n    LinearTopicPage = \"linear-topic-page\",\n    DataInsight = \"data-insight\",\n    Homepage = \"homepage\",\n    AboutPage = \"about-page\",\n    Author = \"author\",\n    Announcement = \"announcement\",\n    Profile = \"profile\",\n    FeaturedViz = \"featured-viz\",\n}\n\nexport const ALL_GDOC_TYPES: OwidGdocType[] = Object.values(OwidGdocType)\n\nexport interface OwidGdocBaseInterface {\n    id: string\n    slug: string\n    // TODO: should we type this as a union of the possible content types instead?\n    content: OwidGdocContent\n    contentMd5: string\n    published: boolean\n    createdAt: Date\n    publishedAt: Date | null\n    updatedAt: Date\n    revisionId: string | null\n    publicationContext: OwidGdocPublicationContext\n    manualBreadcrumbs: BreadcrumbItem[] | null\n    linkedAuthors?: LinkedAuthor[]\n    linkedDocuments?: Record<string, OwidGdocMinimalPostInterface>\n    linkedCharts?: Record<string, LinkedChart>\n    linkedNarrativeCharts?: Record<string, NarrativeChartInfo>\n    linkedStaticViz?: Record<string, LinkedStaticViz>\n    linkedIndicators?: Record<number, LinkedIndicator>\n    linkedCallouts?: LinkedCallouts\n    imageMetadata?: Record<string, ImageMetadata>\n    relatedCharts?: RelatedChart[]\n    tags?: MinimalTag[] | null\n    errors?: OwidGdocErrorMessage[]\n    breadcrumbs?: BreadcrumbItem[] | null\n    topicArea?: string\n    markdown: string | null\n}\n\nexport interface OwidGdocPostInterface extends OwidGdocBaseInterface {\n    content: OwidGdocPostContent\n}\n\n// Used for linkedDocuments attachments, instead of attaching the entire gdoc model\nexport interface OwidGdocMinimalPostInterface {\n    id: string\n    title: string // used in prominent links, topic-page-intro related topics, etc\n    slug: string\n    authors: string[] // used in research & writing block\n    publishedAt: string | null // used in research & writing block\n    published: boolean // used in preview to validate whether or not the post will display\n    subtitle: string // used in prominent links & research & writing block\n    excerpt: string // used in prominent links\n    type: OwidGdocType // used in useLinkedDocument to prepend /data-insights/ to the slug\n    \"featured-image\"?: string // used in prominent links and research & writing block\n    kicker?: string // used in homepage announcements\n    availableEntityCodes?: string[] // used for profile-type docs to resolve ?country=X links\n}\n\n/** Minimal-shape announcement: the SQL in `getHomepageAnnouncements`\n *  guarantees `type === Announcement` for every row, so we promote that to\n *  the static type for the homepage announcement carousel. */\nexport type OwidGdocMinimalAnnouncementInterface =\n    OwidGdocMinimalPostInterface & {\n        type: OwidGdocType.Announcement\n    }\n\nexport type OwidGdocIndexTag = Pick<DbPlainTag, \"id\" | \"name\"> &\n    Partial<Omit<DbPlainTag, \"id\" | \"name\">>\n\nexport type OwidGdocIndexItem = Pick<\n    OwidGdocBaseInterface,\n    \"id\" | \"slug\" | \"published\" | \"publishedAt\"\n> &\n    Pick<OwidGdocContent, \"title\" | \"authors\" | \"type\"> & {\n        subtitle?: string\n        tags: OwidGdocIndexTag[]\n    }\n\nexport function extractGdocIndexItem(\n    gdoc: OwidGdocBaseInterface\n): OwidGdocIndexItem {\n    return {\n        id: gdoc.id,\n        slug: gdoc.slug,\n        tags: gdoc.tags ?? [],\n        published: gdoc.published,\n        publishedAt: gdoc.publishedAt,\n        title: gdoc.content.title ?? \"\",\n        subtitle:\n            \"subtitle\" in gdoc.content ? gdoc.content.subtitle : undefined,\n        authors: gdoc.content.authors,\n        type: gdoc.content.type,\n    }\n}\n\n/** A published article that is tagged to a topic but not linked from the\n    topic page's research-and-writing section. */\nexport interface OrphanedTopicArticle {\n    id: string\n    slug: string\n    title: string\n    authors: string[]\n    publishedAt: Date | null\n}\n\n/** Coverage report for a single topic page: how many of its tagged articles\n    are linked from its research-and-writing section, and which are orphaned. */\nexport interface TopicPageOrphanReport {\n    tagId: number\n    tagName: string\n    slug: string\n    gdocId: string\n    taggedCount: number\n    coveredCount: number\n    orphanedCount: number\n    coveragePercent: number\n    orphans: OrphanedTopicArticle[]\n}\n\nexport interface OwidGdocDataInsightContent {\n    title: string\n    authors: string[]\n    authorRoles?: Record<string, string>\n    [\"narrative-chart\"]?: string\n    [\"grapher-url\"]?: string\n    [\"figma-url\"]?: string\n    body: OwidEnrichedGdocBlock[]\n    type: OwidGdocType.DataInsight\n}\n\nexport type OwidGdocDataInsightIndexItem = Pick<\n    OwidGdocBaseInterface,\n    \"id\" | \"slug\" | \"tags\" | \"published\" | \"publishedAt\" | \"markdown\"\n> &\n    Pick<OwidGdocDataInsightContent, \"title\" | \"authors\"> & {\n        grapherUrl?: OwidGdocDataInsightContent[\"grapher-url\"]\n        explorerUrl?: OwidGdocDataInsightContent[\"grapher-url\"]\n        narrativeChart?: Pick<\n            DbPlainNarrativeChart,\n            \"id\" | \"name\" | \"chartConfigId\"\n        >\n        chartType?: GrapherChartOrMapType\n        figmaUrl?: OwidGdocDataInsightContent[\"figma-url\"]\n        image?: {\n            id: NonNullable<DbRawImage[\"id\"]>\n            filename: NonNullable<DbRawImage[\"filename\"]>\n            cloudflareId: NonNullable<DbRawImage[\"cloudflareId\"]>\n            originalWidth: NonNullable<DbRawImage[\"originalWidth\"]>\n        }\n    }\n\nexport interface OwidGdocDataInsightInterface extends OwidGdocBaseInterface {\n    content: OwidGdocDataInsightContent\n    latestDataInsights?: LatestDataInsight[]\n}\n\nexport type MinimalDataInsightInterface = Pick<\n    OwidGdocDataInsightContent,\n    \"title\"\n> & {\n    publishedAt: string\n    updatedAt: string\n    slug: string\n    // Not used in any UI, only needed for the data insights atom feed\n    authors: string[]\n    // We select the 5 most recently published insights\n    // We only display 4, but if you're on the DI page for one of them we hide it and show the next most recent\n    index: 0 | 1 | 2 | 3 | 4\n}\n\nexport interface OwidGdocAnnouncementContent {\n    title: string\n    excerpt: string\n    authors: string[]\n    authorRoles?: Record<string, string>\n    \"featured-image\"?: string\n    kicker?: string\n    body: OwidEnrichedGdocBlock[]\n    type: OwidGdocType.Announcement\n}\n\nexport interface OwidGdocAnnouncementInterface extends OwidGdocBaseInterface {\n    content: OwidGdocAnnouncementContent\n    latestAnnouncements?: LatestAnnouncement[]\n}\n\nexport type OwidGdocProfileScope = \"countries\" | \"continents\" | \"all\"\n\nexport interface OwidGdocProfileContent {\n    type: OwidGdocType.Profile\n    title: string\n    authors: string[]\n    authorRoles?: Record<string, string>\n    scope: OwidGdocProfileScope\n    exclude?: string\n    subtitle?: string\n    excerpt?: string\n    \"featured-image\"?: string\n    \"sidebar-toc\"?: boolean\n    \"sidebar-toc-h1-only\"?: boolean\n    toc?: TocHeadingWithSupertitle[]\n    body: OwidEnrichedGdocBlock[]\n    refs?: { definitions: RefDictionary; errors: OwidGdocErrorMessage[] }\n    instantiatedEntity?: OwidGdocProfileEntitySummary\n}\n\nexport interface OwidGdocProfileEntitySummary {\n    name: string\n    code: string\n    slug?: string\n    regionType?: string\n    isCountry: boolean\n}\n\nexport interface OwidGdocProfileInterface extends OwidGdocBaseInterface {\n    content: OwidGdocProfileContent\n}\n\nexport interface OwidGdocFeaturedVizContent {\n    type: OwidGdocType.FeaturedViz\n    title: string\n    subtitle?: string\n    authors: string[]\n    authorRoles?: Record<string, string>\n    contributors?: string[]\n    contributorRoles?: Record<string, string>\n    acknowledgements?: EnrichedBlockText[]\n    dateline?: string\n    excerpt?: string\n    \"featured-image\"?: string\n    \"hide-citation\"?: boolean\n    body: OwidEnrichedGdocBlock[]\n    refs?: { definitions: RefDictionary; errors: OwidGdocErrorMessage[] }\n}\n\nexport interface OwidGdocFeaturedVizInterface extends OwidGdocBaseInterface {\n    content: OwidGdocFeaturedVizContent\n    bespokeMetadata?: BespokeMetadata\n}\n\nexport interface OwidGdocHomepageContent {\n    type: OwidGdocType.Homepage\n    title?: string\n    authors: string[]\n    authorRoles?: Record<string, string>\n    body: OwidEnrichedGdocBlock[]\n}\n\nexport interface OwidGdocHomepageMetadata {\n    chartCount?: number\n    topicCount?: number\n    explorerCount?: number\n    articleCount?: number\n    tagGraph?: TagGraphRoot\n    announcements?: OwidGdocMinimalAnnouncementInterface[]\n}\n\nexport interface OwidGdocHomepageInterface extends OwidGdocBaseInterface {\n    content: OwidGdocHomepageContent\n    linkedDocuments?: Record<string, OwidGdocMinimalPostInterface>\n    homepageMetadata?: OwidGdocHomepageMetadata\n    latestDataInsights?: LatestDataInsight[]\n}\n\nexport interface OwidGdocAuthorContent {\n    type: OwidGdocType.Author\n    title?: string\n    role: string\n    bio?: EnrichedBlockText[]\n    socials?: EnrichedBlockSocials\n    \"featured-image\"?: string\n    authors: string[]\n    authorRoles?: Record<string, string>\n    body: OwidEnrichedGdocBlock[]\n}\n\nexport interface OwidGdocAuthorInterface extends OwidGdocBaseInterface {\n    content: OwidGdocAuthorContent\n    latestWorkLinks?: DbEnrichedLatestWork[]\n}\n\nexport interface OwidGdocAboutContent {\n    type: OwidGdocType.AboutPage\n    title: string\n    excerpt?: string\n    \"featured-image\"?: string\n    authors: string[]\n    authorRoles?: Record<string, string>\n    \"hide-nav\"?: boolean\n    // By default, all about pages render with the title \"About\" even if they have a title set\n    // (which we use in the gdocs index page in the admin)\n    // This boolean makes it so that the title is used in *both* locations\n    \"override-title\"?: boolean\n    body: OwidEnrichedGdocBlock[]\n    refs?: { definitions: RefDictionary; errors: OwidGdocErrorMessage[] }\n}\n\nexport interface OwidGdocAboutInterface extends OwidGdocBaseInterface {\n    content: OwidGdocAboutContent\n    donors?: string[]\n}\n\nexport type OwidGdocContent =\n    | OwidGdocPostContent\n    | OwidGdocDataInsightContent\n    | OwidGdocHomepageContent\n    | OwidGdocAuthorContent\n    | OwidGdocAboutContent\n    | OwidGdocAnnouncementContent\n    | OwidGdocProfileContent\n    | OwidGdocFeaturedVizContent\n\nexport type OwidGdoc =\n    | OwidGdocPostInterface\n    | OwidGdocDataInsightInterface\n    | OwidGdocHomepageInterface\n    | OwidGdocAuthorInterface\n    | OwidGdocAboutInterface\n    | OwidGdocAnnouncementInterface\n    | OwidGdocProfileInterface\n    | OwidGdocFeaturedVizInterface\n\nexport const CHRONOLOGICAL_INDEX_TYPE_VALUES = [\n    OwidGdocType.Article,\n    OwidGdocType.LinearTopicPage,\n    OwidGdocType.TopicPage,\n    OwidGdocType.DataInsight,\n    OwidGdocType.Announcement,\n] as const\n\nexport const LATEST_FEED_TYPE_VALUES = [\n    OwidGdocType.Article,\n    OwidGdocType.DataInsight,\n    OwidGdocType.Announcement,\n] as const satisfies readonly (typeof CHRONOLOGICAL_INDEX_TYPE_VALUES)[number][]\n\nexport const CHRONOLOGICAL_INDEX_TYPES = new Set<string>(\n    CHRONOLOGICAL_INDEX_TYPE_VALUES\n)\nexport const LATEST_FEED_TYPES = new Set<string>(LATEST_FEED_TYPE_VALUES)\n\n/**\n * The subset of OwidGdoc that is indexed in the `pages-chronological` Algolia\n * index, and so is eligible to appear on:\n *   - the `/latest` SPA feed (filterable by topic and type), and\n *   - the dynamic `/atom.xml` feed served by a Cloudflare Function when called\n *     with `?topics=` or `?type=` query params (the bare `/atom.xml` URL is\n *     served from the static bake instead).\n *\n * Matches the narrowing performed by `checkIsChronologicalGdoc`.\n */\nexport type ChronologicalGdoc =\n    | OwidGdocDataInsightInterface\n    | OwidGdocAnnouncementInterface\n    | (OwidGdocPostInterface & {\n          content: {\n              type:\n                  | OwidGdocType.Article\n                  | OwidGdocType.TopicPage\n                  | OwidGdocType.LinearTopicPage\n          }\n      })\n\n/**\n * The subset of `ChronologicalGdoc` shown on /latest. Excludes\n * `TopicPage` / `LinearTopicPage` (indexed in `pages-chronological` for the\n * atom feed but filtered out of /latest by `LATEST_BASE_FILTER`).\n *\n * Matches the narrowing performed by `checkIsLatestFeedGdoc`.\n */\nexport type LatestFeedGdoc = ChronologicalGdoc & {\n    content: { type: (typeof LATEST_FEED_TYPE_VALUES)[number] }\n}\n\nexport enum OwidGdocErrorMessageType {\n    Error = \"error\",\n    Warning = \"warning\",\n}\n\nexport type OwidGdocProperty =\n    | keyof OwidGdocPostInterface\n    | keyof OwidGdocPostContent\n    | keyof OwidGdocDataInsightInterface\n    | keyof OwidGdocDataInsightContent\n    | keyof OwidGdocAnnouncementInterface\n    | keyof OwidGdocAnnouncementContent\n    | keyof OwidGdocAuthorInterface\n    | keyof OwidGdocAuthorContent\n    | keyof OwidGdocAboutInterface\n    | keyof OwidGdocAboutContent\n    | keyof OwidGdocProfileInterface\n    | keyof OwidGdocProfileContent\n    | keyof OwidGdocFeaturedVizInterface\n    | keyof OwidGdocFeaturedVizContent\n\nexport type OwidGdocErrorMessageProperty =\n    | OwidGdocProperty\n    | `${OwidGdocProperty}${string}` // also allows for nesting, like `breadcrumbs[0].label`\nexport interface OwidGdocErrorMessage {\n    property: OwidGdocErrorMessageProperty\n    type: OwidGdocErrorMessageType\n    message: string\n}\n\n// see also: getOwidGdocFromJSON()\nexport interface OwidGdocJSON extends Omit<\n    OwidGdocPostInterface,\n    \"createdAt\" | \"publishedAt\" | \"updatedAt\"\n> {\n    createdAt: string\n    publishedAt: string | null\n    updatedAt: string | null\n}\n\nexport interface OwidGdocPostContent {\n    body?: OwidEnrichedGdocBlock[]\n    type?:\n        | OwidGdocType.Article\n        | OwidGdocType.TopicPage\n        | OwidGdocType.LinearTopicPage\n        // TODO: Fragments need their own OwidGdocFragment interface and flow in the UI\n        // Historically they were treated the same as GdocPosts but not baked\n        // In reality, they have multiple possible data structures in their content (details, faqs, etc)\n        // We should be able to render these in the preview before publishing\n        // We're keeping them in this union until we have time to sort this out\n        | OwidGdocType.Fragment\n    title?: string\n    supertitle?: string\n    subtitle?: string\n    authors: string[]\n    authorRoles?: Record<string, string>\n    contributors?: string[]\n    contributorRoles?: Record<string, string>\n    acknowledgements?: EnrichedBlockText[]\n    dateline?: string\n    excerpt?: string\n    refs?: { definitions: RefDictionary; errors: OwidGdocErrorMessage[] }\n    \"deprecation-notice\"?: EnrichedBlockText[]\n    \"latest-feed-featured-image\"?: string\n    \"latest-feed-excerpt\"?: EnrichedBlockText[]\n    \"hide-citation\"?: boolean\n    toc?: TocHeadingWithSupertitle[]\n    \"cover-image\"?: string\n    \"featured-image\"?: string\n    \"atom-title\"?: string\n    \"atom-excerpt\"?: string\n    \"sidebar-toc\"?: boolean\n    \"sidebar-toc-h1-only\"?: boolean\n    \"heading-variant\"?: \"heavy\" | \"light\"\n    \"hide-subscribe-banner\"?: boolean\n    \"cover-color\"?:\n        | \"sdg-color-1\"\n        | \"sdg-color-2\"\n        | \"sdg-color-3\"\n        | \"sdg-color-4\"\n        | \"sdg-color-5\"\n        | \"sdg-color-6\"\n        | \"sdg-color-7\"\n        | \"sdg-color-8\"\n        | \"sdg-color-9\"\n        | \"sdg-color-10\"\n        | \"sdg-color-11\"\n        | \"sdg-color-12\"\n        | \"sdg-color-13\"\n        | \"sdg-color-14\"\n        | \"sdg-color-15\"\n        | \"sdg-color-16\"\n        | \"sdg-color-17\"\n        | \"amber\"\n    \"sticky-nav\"?: OwidGdocStickyNavItem[]\n    details?: DetailDictionary\n    // TODO: having both the unparsed and parsed variant on the same type is pretty crude\n    // Consider moving faqs into body or splitting the types and creating\n    // a parsed and an unparsed gdoc variant.\n    faqs?: RawFaq[]\n    parsedFaqs?: FaqDictionary\n}\n\nexport type OwidGdocStickyNavItem = { target: string; text: string }\n\n/**\n * Whether a content key is authored in the Google Doc or computed during\n * enrichment:\n * - \"authored\": written by the document's author (front matter or body)\n * - \"computed\": derived from other content at parse time, never authored\n */\nexport type GdocContentKeyKind = \"authored\" | \"computed\"\n\n/** Kind of every OwidGdocPostContent key. The `satisfies` clause breaks the\n *  build when the interface gains a key that has not been classified here,\n *  keeping the writing reference's field documentation complete. */\nexport const OWID_GDOC_POST_CONTENT_KEY_KINDS = {\n    body: \"authored\",\n    type: \"authored\",\n    title: \"authored\",\n    supertitle: \"authored\",\n    subtitle: \"authored\",\n    authors: \"authored\",\n    dateline: \"authored\",\n    excerpt: \"authored\",\n    refs: \"authored\",\n    \"deprecation-notice\": \"authored\",\n    \"latest-feed-featured-image\": \"authored\",\n    \"latest-feed-excerpt\": \"authored\",\n    \"hide-citation\": \"authored\",\n    \"cover-image\": \"authored\",\n    \"featured-image\": \"authored\",\n    \"atom-title\": \"authored\",\n    \"atom-excerpt\": \"authored\",\n    \"sidebar-toc\": \"authored\",\n    \"sidebar-toc-h1-only\": \"authored\",\n    \"heading-variant\": \"authored\",\n    \"hide-subscribe-banner\": \"authored\",\n    \"cover-color\": \"authored\",\n    \"sticky-nav\": \"authored\",\n    details: \"authored\",\n    faqs: \"authored\",\n    contributors: \"authored\",\n    acknowledgements: \"authored\",\n    authorRoles: \"computed\", // from authors\n    contributorRoles: \"computed\", // from contributors\n    toc: \"computed\", // from body\n    parsedFaqs: \"computed\", // from faqs\n} as const satisfies Record<keyof OwidGdocPostContent, GdocContentKeyKind>\n\n/** Kind of every OwidGdocDataInsightContent key. */\nexport const OWID_GDOC_DATA_INSIGHT_CONTENT_KEY_KINDS = {\n    body: \"authored\",\n    type: \"authored\",\n    title: \"authored\",\n    authors: \"authored\",\n    \"narrative-chart\": \"authored\",\n    \"grapher-url\": \"authored\",\n    \"figma-url\": \"authored\",\n    authorRoles: \"computed\", // from authors\n} as const satisfies Record<\n    keyof OwidGdocDataInsightContent,\n    GdocContentKeyKind\n>\n\n/** Kind of every OwidGdocAnnouncementContent key. */\nexport const OWID_GDOC_ANNOUNCEMENT_CONTENT_KEY_KINDS = {\n    body: \"authored\",\n    type: \"authored\",\n    title: \"authored\",\n    excerpt: \"authored\",\n    authors: \"authored\",\n    \"featured-image\": \"authored\",\n    kicker: \"authored\",\n    authorRoles: \"computed\", // from authors\n} as const satisfies Record<\n    keyof OwidGdocAnnouncementContent,\n    GdocContentKeyKind\n>\n\n/** Kind of every OwidGdocAuthorContent key. */\nexport const OWID_GDOC_AUTHOR_CONTENT_KEY_KINDS = {\n    type: \"authored\",\n    title: \"authored\",\n    role: \"authored\",\n    bio: \"authored\",\n    socials: \"authored\",\n    \"featured-image\": \"authored\",\n    authors: \"authored\",\n    body: \"authored\",\n    authorRoles: \"computed\", // from authors\n} as const satisfies Record<keyof OwidGdocAuthorContent, GdocContentKeyKind>\n\n/** Kind of every OwidGdocProfileContent key. */\nexport const OWID_GDOC_PROFILE_CONTENT_KEY_KINDS = {\n    type: \"authored\",\n    title: \"authored\",\n    authors: \"authored\",\n    scope: \"authored\",\n    exclude: \"authored\",\n    subtitle: \"authored\",\n    excerpt: \"authored\",\n    \"featured-image\": \"authored\",\n    \"sidebar-toc\": \"authored\",\n    \"sidebar-toc-h1-only\": \"authored\",\n    body: \"authored\",\n    refs: \"authored\",\n    authorRoles: \"computed\", // from authors\n    toc: \"computed\", // from body\n    instantiatedEntity: \"computed\", // set when the profile is instantiated for one entity\n} as const satisfies Record<keyof OwidGdocProfileContent, GdocContentKeyKind>\n\n/** Kind of every OwidGdocAboutContent key. */\nexport const OWID_GDOC_ABOUT_CONTENT_KEY_KINDS = {\n    type: \"authored\",\n    title: \"authored\",\n    excerpt: \"authored\",\n    \"featured-image\": \"authored\",\n    authors: \"authored\",\n    \"hide-nav\": \"authored\",\n    \"override-title\": \"authored\",\n    body: \"authored\",\n    refs: \"authored\",\n    authorRoles: \"computed\", // from authors\n} as const satisfies Record<keyof OwidGdocAboutContent, GdocContentKeyKind>\n\n/** Kind of every OwidGdocHomepageContent key. */\nexport const OWID_GDOC_HOMEPAGE_CONTENT_KEY_KINDS = {\n    type: \"authored\",\n    title: \"authored\",\n    authors: \"authored\",\n    body: \"authored\",\n    authorRoles: \"computed\", // from authors\n} as const satisfies Record<keyof OwidGdocHomepageContent, GdocContentKeyKind>\n\n/** Kind of every OwidGdocFeaturedVizContent key. */\nexport const OWID_GDOC_FEATURED_VIZ_CONTENT_KEY_KINDS = {\n    body: \"authored\",\n    type: \"authored\",\n    title: \"authored\",\n    subtitle: \"authored\",\n    authors: \"authored\",\n    dateline: \"authored\",\n    excerpt: \"authored\",\n    refs: \"authored\",\n    \"hide-citation\": \"authored\",\n    \"featured-image\": \"authored\",\n    contributors: \"authored\",\n    acknowledgements: \"authored\",\n    authorRoles: \"computed\", // from authors\n    contributorRoles: \"computed\", // from contributors\n} as const satisfies Record<\n    keyof OwidGdocFeaturedVizContent,\n    GdocContentKeyKind\n>\n\n/** The gdoc types the writing reference documents with a template page,\n *  mapped to the content interface behind each. Every OwidGdocType has an\n *  entry — the `satisfies` clause breaks the build until a new type is\n *  documented. */\nexport const GDOC_TEMPLATE_CONTENT_INTERFACES = {\n    [OwidGdocType.Article]: {\n        interfaceName: \"OwidGdocPostContent\",\n        keyKinds: OWID_GDOC_POST_CONTENT_KEY_KINDS,\n    },\n    [OwidGdocType.TopicPage]: {\n        interfaceName: \"OwidGdocPostContent\",\n        keyKinds: OWID_GDOC_POST_CONTENT_KEY_KINDS,\n    },\n    [OwidGdocType.LinearTopicPage]: {\n        interfaceName: \"OwidGdocPostContent\",\n        keyKinds: OWID_GDOC_POST_CONTENT_KEY_KINDS,\n    },\n    [OwidGdocType.Fragment]: {\n        interfaceName: \"OwidGdocPostContent\",\n        keyKinds: OWID_GDOC_POST_CONTENT_KEY_KINDS,\n    },\n    [OwidGdocType.DataInsight]: {\n        interfaceName: \"OwidGdocDataInsightContent\",\n        keyKinds: OWID_GDOC_DATA_INSIGHT_CONTENT_KEY_KINDS,\n    },\n    [OwidGdocType.Announcement]: {\n        interfaceName: \"OwidGdocAnnouncementContent\",\n        keyKinds: OWID_GDOC_ANNOUNCEMENT_CONTENT_KEY_KINDS,\n    },\n    [OwidGdocType.Author]: {\n        interfaceName: \"OwidGdocAuthorContent\",\n        keyKinds: OWID_GDOC_AUTHOR_CONTENT_KEY_KINDS,\n    },\n    [OwidGdocType.Profile]: {\n        interfaceName: \"OwidGdocProfileContent\",\n        keyKinds: OWID_GDOC_PROFILE_CONTENT_KEY_KINDS,\n    },\n    [OwidGdocType.AboutPage]: {\n        interfaceName: \"OwidGdocAboutContent\",\n        keyKinds: OWID_GDOC_ABOUT_CONTENT_KEY_KINDS,\n    },\n    [OwidGdocType.Homepage]: {\n        interfaceName: \"OwidGdocHomepageContent\",\n        keyKinds: OWID_GDOC_HOMEPAGE_CONTENT_KEY_KINDS,\n    },\n    [OwidGdocType.FeaturedViz]: {\n        interfaceName: \"OwidGdocFeaturedVizContent\",\n        keyKinds: OWID_GDOC_FEATURED_VIZ_CONTENT_KEY_KINDS,\n    },\n} as const satisfies Record<\n    OwidGdocType,\n    {\n        interfaceName: string\n        keyKinds: Record<string, GdocContentKeyKind>\n    }\n>\n\n/** Gdoc properties that live on the posts_gdocs row rather than in the\n *  document's content — managed in the admin UI, never authored as front\n *  matter. Documented so the writing reference can list them. */\nexport const OWID_GDOC_ADMIN_MANAGED_KEYS = [\n    \"slug\",\n    \"published\",\n    \"publishedAt\",\n    \"publicationContext\",\n    \"manualBreadcrumbs\",\n    \"tags\",\n] as const satisfies readonly (keyof OwidGdocBaseInterface)[]\n\nexport type GdocsPatch = Partial<OwidGdocPostInterface>\n\nexport enum GdocsContentSource {\n    Internal = \"internal\",\n    Gdocs = \"gdocs\",\n}\n\nexport const DYNAMIC_COLLECTION_PAGE_CONTAINER_ID = \"dynamic-collection-page\"\n\nexport type EnrichedDetail = {\n    id: string\n    text: string\n}\n\nexport type DetailDictionary = Record<string, EnrichedDetail>\n\nexport type RawFaq = {\n    id: string\n    content: OwidRawGdocBlock[]\n}\nexport type EnrichedFaq = {\n    id: string\n    content: OwidEnrichedGdocBlock[]\n} & EnrichedBlockWithParseErrors\n\nexport type FaqDictionary = Record<string, EnrichedFaq>\n","// For use in the sticky nav and the component implementation\n\nexport const ALL_CHARTS_ID = \"all-charts\"\nexport const KEY_INSIGHTS_ID = \"key-insights\"\nexport const LICENSE_ID = \"article-licence\"\nexport const CITATION_ID = \"article-citation\"\nexport const PAST_VERSIONS_ID = \"article-past-versions\"\nexport const CREDITS_ID = \"article-credits\"\nexport const ENDNOTES_ID = \"article-endnotes\"\nexport const RESEARCH_AND_WRITING_ID = \"research-writing\"\nexport const FEATURED_METRICS_ID = \"featured-metrics\"\nexport const FEATURED_DATA_INSIGHTS_ID = \"featured-data-insights\"\nexport const EXPLORE_DATA_SECTION_ID = \"explore-data-section\"\n\nexport const RESEARCH_AND_WRITING_DEFAULT_HEADING = \"Research & Writing\"\nexport const EXPLORE_DATA_SECTION_DEFAULT_TITLE = \"Explore the data\"\n\n/** Works for:\n * https://docs.google.com/document/d/abcd1234\n * https://docs.google.com/document/d/abcd1234/\n * https://docs.google.com/document/d/abcd1234/edit\n * https://docs.google.com/document/d/abcd-1234/edit\n * https://docs.google.com/document/u/0/d/abcd-1234/edit\n * https://docs.google.com/document/u/0/d/abcd-1234/edit?usp=sharing\n * Excludes:\n * https://docs.google.com/spreadsheets/d/abcd1234\n */\nexport const gdocUrlRegex =\n    // Disable the lint because the regex is compiled using the v flag in newer\n    // browsers when used in the pattern attribute, which requires escaping\n    // additional characters.\n    // https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/pattern\n    // eslint-disable-next-line no-useless-escape\n    /https:\\/\\/docs\\.google\\.com\\/document(?:\\/u\\/\\d)?\\/d\\/([\\-\\w]+)\\/?(edit)?(\\?tab=[\\w.]+)?#?/\n\nexport const GDOCS_BASE_URL = \"https://docs.google.com\"\nexport const GDOCS_URL_PLACEHOLDER = `${GDOCS_BASE_URL}/document/d/****/edit`\n\nexport const gdocIdRegex = /^[0-9A-Za-z\\-_]{44}$/\n\n// Stored in this repo and served\nexport const DEFAULT_GDOC_FEATURED_IMAGE = \"default-featured-image.png\"\n\n// Stored in this repo and served\nexport const DEFAULT_THUMBNAIL_FILENAME = \"default-thumbnail.png\"\n\n// Stored in this repo and served\nexport const ARCHIVED_THUMBNAIL_FILENAME = \"archived-thumbnail.jpg\"\n","import { z } from \"zod/mini\"\nimport type { OwidOrigin } from \"./OwidOrigin.js\"\nimport type { SchemaFor } from \"./domainTypes/Various.js\"\nimport { OwidSource } from \"./OwidSource.js\"\nimport { OwidVariableDisplayConfigInterface } from \"./OwidVariableDisplayConfigInterface.js\"\n\nconst MARKDOWN_LIST_MARKER = /^([-*+]|\\d+[.)])\\s/\n\n// Collapse a multi-line bullet item into a single line, the way the old\n// renderer effectively did (it unwrapped paragraphs inside list items, so line\n// and paragraph breaks displayed as plain spaces). Lines starting a markdown\n// list are kept and indented, as those rendered as nested lists.\nfunction collapseDescriptionKeyItem(item: string): string {\n    const parts: string[] = []\n    for (const rawLine of item.split(\"\\n\")) {\n        const line = rawLine.trim()\n        if (!line) continue\n        if (parts.length === 0) parts.push(line)\n        else if (MARKDOWN_LIST_MARKER.test(line)) parts.push(\"\\n  \" + line)\n        else parts.push(\" \" + line)\n    }\n    return parts.join(\"\")\n}\n\n/**\n * Convert a legacy descriptionKey array into a single markdown string.\n *\n * descriptionKey used to be an array of bullet points and is now free-form\n * markdown. Persisted metadata (indicator metadata JSON files on R2, database\n * rows and multi-dim configs written before the migration) may still carry\n * arrays, so every ingress point normalizes through this function.\n *\n * The conversion preserves the legacy rendering exactly: a single entry was\n * rendered as prose (full markdown, paragraphs included), multiple entries as\n * a bulleted list with line breaks inside items flattened.\n */\nexport function normalizeDescriptionKey(\n    value: string | string[] | undefined | null\n): string | undefined {\n    if (value === undefined || value === null) return undefined\n    if (typeof value === \"string\") return value.trim() || undefined\n    const items = value.map((item) => item.trim()).filter((item) => item)\n    if (items.length === 0) return undefined\n    if (items.length === 1) return items[0]\n    return items\n        .map((item) => `- ${collapseDescriptionKeyItem(item)}`)\n        .join(\"\\n\")\n}\n\nexport interface OwidVariableWithSource {\n    id: number\n    name?: string\n    description?: string\n    descriptionShort?: string\n    descriptionFromProducer?: string\n    descriptionKey?: string\n    descriptionProcessing?: string\n    unit?: string\n    display?: OwidVariableDisplayConfigInterface\n    shortUnit?: string\n    datasetName?: string\n    datasetId?: number\n    coverage?: string\n    nonRedistributable?: boolean\n    source?: OwidSource\n    origins?: OwidOrigin[]\n    schemaVersion?: number\n    processingLevel?: OwidProcessingLevel\n    presentation?: OwidVariablePresentation\n    shortName?: string\n    timespan?: string\n    catalogPath?: string\n    license?: OwidLicense\n    updatePeriodDays?: number\n    datasetVersion?: string\n    licenses?: OwidLicense[]\n    type?: OwidVariableType\n\n    // omitted:\n    // code\n    // coverage\n    // dataPath\n    // metadataPath\n}\n\nexport interface IndicatorTitleWithFragments {\n    title: string\n    attributionShort?: string\n    titleVariant?: string\n}\n\nexport function joinTitleFragments(\n    attributionShort: string | undefined,\n    titleVariant: string | undefined\n): string | undefined {\n    if (attributionShort && titleVariant && attributionShort !== titleVariant) {\n        return `${titleVariant} – ${attributionShort}`\n    }\n    if (attributionShort) {\n        return attributionShort\n    }\n    if (titleVariant) {\n        return titleVariant\n    }\n    return undefined\n}\n\nexport interface OwidLicense {\n    name: string\n    url: string\n}\n\nexport const OwidLicenseSchema = z.object({\n    name: z.string(),\n    url: z.string(),\n} satisfies SchemaFor<OwidLicense>)\n\nexport interface OwidVariablePresentation {\n    titlePublic?: string\n    titleVariant?: string\n    attributionShort?: string\n    attribution?: string\n    topicTagsLinks?: string[]\n    faqs?: FaqLink[]\n}\n\nexport type OwidProcessingLevel = \"minor\" | \"major\"\n\nexport interface FaqLink {\n    gdocId: string\n    fragmentId: string\n}\n\nexport type OwidVariableWithSourceAndDimension = OwidVariableWithSource & {\n    dimensions: OwidVariableDimensions\n}\n\nexport type OwidVariableWithSourceAndDimensionWithoutId = Omit<\n    OwidVariableWithSourceAndDimension,\n    \"id\"\n>\n\nexport interface OwidVariableMixedData {\n    years: number[]\n    entities: number[]\n    values: (string | number)[]\n}\n\nexport type OwidVariableWithDataAndSource = OwidVariableWithSource &\n    OwidVariableMixedData\n\nexport interface OwidVariableDimension {\n    values: OwidVariableDimensionValuePartial[]\n}\n\nexport interface OwidVariableDimensions {\n    years: OwidVariableDimension\n    entities: OwidVariableDimension\n    values?: OwidVariableDimension\n}\n\nexport type OwidVariableDataMetadataDimensions = {\n    data: OwidVariableMixedData\n    metadata: OwidVariableWithSourceAndDimension\n}\nexport type MultipleOwidVariableDataDimensionsMap = Map<\n    number,\n    OwidVariableDataMetadataDimensions\n>\n\nexport interface OwidVariableDimensionValuePartial {\n    id: number\n    name?: string\n    code?: string\n}\nexport type OwidVariableDimensionValueFull =\n    Required<OwidVariableDimensionValuePartial>\n\nexport interface OwidEntityKey {\n    [id: string]: OwidVariableDimensionValuePartial\n}\n\nexport type OwidVariableType = \"string\" | \"float\" | \"int\" | \"mixed\" | \"ordinal\"\n","import { OwidVariableId } from \"./domainTypes/Various.js\"\nimport {\n    ColumnSlug,\n    DimensionProperty,\n    Time,\n} from \"./grapherTypes/GrapherTypes.js\"\n\nexport interface OwidVariableDisplayConfigInterface {\n    name?: string\n    unit?: string\n    shortUnit?: string\n    isProjection?: boolean\n    conversionFactor?: number\n    roundingMode?: OwidVariableRoundingMode\n    numDecimalPlaces?: number\n    numSignificantFigures?: number\n    tolerance?: number\n    timeInterval?: TimeInterval\n    zeroDay?: string\n    entityAnnotationsMap?: string\n    includeInTable?: boolean\n    tableDisplay?: OwidVariableDataTableConfigInterface\n    color?: string\n    plotMarkersOnlyInLineChart?: boolean\n}\n\n// todo: flatten onto the above\nexport interface OwidVariableDataTableConfigInterface {\n    hideAbsoluteChange?: boolean\n    hideRelativeChange?: boolean\n}\n\nexport enum OwidVariableRoundingMode {\n    decimalPlaces = \"decimalPlaces\",\n    significantFigures = \"significantFigures\",\n}\n\n/**\n * Time resolution at which an indicator's time values should be interpreted and\n * formatted. Sub-yearly intervals (day/week/month/quarter) are encoded as\n * days-since-epoch; `year` and `decade` values are literal years.\n */\nexport enum TimeInterval {\n    Day = \"day\",\n    Week = \"week\",\n    Month = \"month\",\n    Quarter = \"quarter\",\n    Year = \"year\",\n    Decade = \"decade\",\n}\n\n/** Sub-yearly intervals, finest first */\nexport const SUB_YEARLY_TIME_INTERVALS = [\n    TimeInterval.Day,\n    TimeInterval.Week,\n    TimeInterval.Month,\n    TimeInterval.Quarter,\n] as const\n\n/** All time intervals, finest first */\nexport const TIME_INTERVALS = [\n    ...SUB_YEARLY_TIME_INTERVALS,\n    TimeInterval.Year,\n    TimeInterval.Decade,\n] as const\n\nexport type SubYearlyTimeInterval = (typeof SUB_YEARLY_TIME_INTERVALS)[number]\n\ninterface OwidChartDimensionBaseInterface {\n    property: DimensionProperty\n    display?: OwidVariableDisplayConfigInterface\n}\n\n/** A slot filled by an OWID indicator, fetched from the data API */\nexport interface IndicatorDimensionInterface extends OwidChartDimensionBaseInterface {\n    variableId: OwidVariableId\n    slug?: never\n    /** Pins the slot to a single year */\n    targetYear?: Time\n}\n\n/** A slot filled by a column of a supplied table */\nexport interface SlugDimensionInterface extends OwidChartDimensionBaseInterface {\n    slug: ColumnSlug\n    variableId?: never\n    targetYear?: never\n}\n\nexport type OwidChartDimensionInterface =\n    | IndicatorDimensionInterface\n    | SlugDimensionInterface\n\nexport const isIndicatorDimension = (\n    dimension: OwidChartDimensionInterface\n): dimension is IndicatorDimensionInterface =>\n    dimension.variableId !== undefined\n","import { OwidOrigin } from \"../OwidOrigin.js\"\nimport {\n    OwidProcessingLevel,\n    OwidVariablePresentation,\n} from \"../OwidVariable.js\"\nimport { OwidVariableDisplayConfigInterface } from \"../OwidVariableDisplayConfigInterface.js\"\nimport {\n    Color,\n    ColumnSlug,\n    PrimitiveType,\n    Time,\n    ToleranceStrategy,\n    Year,\n} from \"../grapherTypes/GrapherTypes.js\"\nimport { Integer } from \"./Various.js\"\n\nexport type TableSlug = string // a url friendly name for a table\nexport type ColumnSlugs = string // slugs cannot have spaces, so this is a space delimited array of ColumnSlugs\n\n/**\n * A concrete point in time (year or date). It's always supposed to be a finite number, but we\n * cannot enforce this in TypeScript.\n */\nexport type TimeRange = [Time, Time]\n\nexport type ValueRange = [number, number]\n\nexport type TimeTolerance = Integer\n\nexport interface CoreRow {\n    [columnSlug: string]: any\n}\n\nexport enum InputType {\n    Delimited = \"Delimited\",\n    RowStore = \"RowStore\",\n    ColumnStore = \"ColumnStore\",\n    Matrix = \"Matrix\",\n}\n\nexport enum TransformType {\n    // Table level ops\n    LoadFromDelimited = \"LoadFromDelimited\",\n    LoadFromRowStore = \"LoadFromRowStore\",\n    LoadFromColumnStore = \"LoadFromColumnStore\",\n    LoadFromMatrix = \"LoadFromMatrix\",\n    Concat = \"Concat\",\n    Noop = \"Noop\", // for when we notice that we can skip a transform\n\n    // Row ops\n    FilterRows = \"FilterRows\",\n    SortRows = \"SortRows\",\n    UpdateRows = \"UpdateRows\", // replace values in a row. For example: to prep columns for log scale, or testing messy runtime data scenarios.\n\n    // Column ops\n    FilterColumns = \"FilterColumns\",\n    AppendColumns = \"AppendColumns\", // This will run column transform fns.\n    UpdateColumnDefs = \"UpdateColumnDefs\", // do not use for updates that add a column transform fn.\n    UpdateColumnDefsAndApply = \"UpdateColumnDefsAndApply\", // use this for updates that add a column transform fn.\n    RenameColumns = \"RenameColumns\",\n    CombineColumns = \"CombineColumns\",\n}\n\nexport enum JsTypes {\n    string = \"string\",\n    boolean = \"boolean\",\n    number = \"number\",\n}\n\nexport abstract class ErrorValue {\n    toString(): string {\n        return \"\"\n    }\n    toErrorString(): string {\n        return this.constructor.name\n    }\n}\n\nexport type CsvString = string\n\nexport type CoreValueType = PrimitiveType | ErrorValue\n\n/**\n * An Object Literal of Column Slugs and Primitives of the same type:\n * {\n *  score: [1, 2, 3],\n *  year: [2000, 2001]\n * }\n */\nexport type CoreColumnStore = {\n    [columnSlug: string]: CoreValueType[]\n}\n\nexport type CoreTableInputOption =\n    | CoreRow[]\n    | CoreColumnStore\n    | CsvString\n    | CoreMatrix\n\n// Every row will be checked against each column/value(s) pair.\nexport interface CoreQuery {\n    [columnSlug: string]: PrimitiveType | PrimitiveType[]\n}\n\ntype CoreVector = any[]\n\n/**\n * This is just an array of arrays where the first array is the header and the rest are rows. An example is:\n * [[\"country\", \"gdp\"],\n * [\"usa\", 123],\n * [\"can\", 456]]\n * Having this type is just to provide a common unique name for the basic structure used by HandsOnTable\n * and some other popular JS data libraries.\n */\nexport type CoreMatrix = CoreVector[]\n\nexport enum OwidTableSlugs {\n    EntityName = \"entityName\",\n    EntityColor = \"entityColor\",\n    EntityId = \"entityId\",\n    EntityCode = \"entityCode\",\n    Time = \"time\",\n    Day = \"day\",\n    Year = \"year\",\n    Date = \"date\",\n}\n\nenum OwidTableNames {\n    Entity = \"Entity\",\n    Code = \"Code\",\n}\n\nexport type EntityName = string\nexport type EntityCode = string\nexport type EntityId = number\n\nexport interface Entity {\n    entityName: EntityName\n    entityId?: EntityId\n    entityCode?: EntityCode\n}\n\nexport enum ColumnTypeNames {\n    NumberOrString = \"NumberOrString\",\n    Numeric = \"Numeric\",\n    String = \"String\",\n    Region = \"Region\",\n    SeriesAnnotation = \"SeriesAnnotation\",\n    Categorical = \"Categorical\",\n    Ordinal = \"Ordinal\",\n    Continent = \"Continent\",\n    EntityName = \"EntityName\",\n    EntityId = \"EntityId\",\n    EntityCode = \"EntityCode\",\n    Boolean = \"Boolean\",\n    Currency = \"Currency\",\n    Percentage = \"Percentage\",\n    RelativePercentage = \"RelativePercentage\",\n    DecimalPercentage = \"DecimalPercentage\",\n    Integer = \"Integer\",\n    PercentChangeOverTime = \"PercentChangeOverTime\",\n    Ratio = \"Ratio\",\n    Year = \"Year\",\n    Day = \"Day\",\n    Date = \"Date\",\n    Color = \"Color\",\n    Population = \"Population\",\n    PopulationDensity = \"PopulationDensity\",\n    Age = \"Age\",\n    Quarter = \"Quarter\",\n    Month = \"Month\",\n    Week = \"Week\",\n    Decade = \"Decade\",\n}\n\nexport interface ColumnColorScale {\n    // Color scales\n    colorScaleScheme?: string\n    colorScaleInvert?: boolean\n    colorScaleBinningStrategy?: string\n    colorScaleNumericMinValue?: number\n    colorScaleNumericBins?: string\n    colorScaleCategoricalBins?: string\n    colorScaleNoDataLabel?: string\n    colorScaleLegendDescription?: string\n}\n\nexport interface CoreColumnDef extends ColumnColorScale {\n    // Core\n    slug: ColumnSlug\n    type?: ColumnTypeNames\n\n    // Computational\n    transform?: string // Code that maps to a CoreTable transform\n    transformHasRun?: boolean // If true, the transform has been applied\n    tolerance?: number // If set, some charts can use this for an interpolation strategy.\n    toleranceStrategy?: ToleranceStrategy // Tolerance strategy to use for interpolation\n    skipParsing?: boolean // If set, the values will never run through the type parser\n    // Denotes the relationship of this column to another column\n    derivedFrom?: {\n        columnSlug: ColumnSlug\n        relationship:\n            | \"annotations\"\n            | \"originalTime\"\n            | \"originalStartTime\"\n            | \"originalValue\"\n    }\n\n    // Column information used for display only\n    name?: string // The display name for the column\n    description?: string\n    descriptionShort?: string\n    descriptionProcessing?: string\n    descriptionKey?: string\n    descriptionFromProducer?: string\n    note?: string // Any internal notes the author wants to record for display in admin interfaces\n\n    // Sorted values (in case of ordinal data)\n    sort?: string[]\n\n    // Color\n    color?: Color // A column can have a fixed color for use in charts where the columns are series\n\n    // Source information used for display only\n    sourceName?: string\n    sourceLink?: string\n    dataPublishedBy?: string\n    dataPublisherSource?: string\n    retrievedDate?: string\n    additionalInfo?: string\n    timespan?: string\n\n    // Metadata v2\n    origins?: OwidOrigin[]\n    presentation?: OwidVariablePresentation\n    updatePeriodDays?: number\n\n    // Dataset information\n    datasetId?: number\n    datasetName?: string\n\n    // Informational only\n    targetTime?: number\n\n    // For developer internal use only.\n    values?: CoreValueType[]\n    generator?: () => number // A function for generating synthetic data for testing\n    growthRateGenerator?: () => number // A function for generating synthetic data for testing. Can probably combine with the above.\n\n    // DEPRECATED\n    unit?: string // DEPRECATED: use an existing column type or create a new one instead.\n    shortUnit?: string // DEPRECATED: use an existing column type or create a new one instead.\n    display?: OwidVariableDisplayConfigInterface // DEPRECATED: use an existing column type or create a new one instead, or migrate any properties you need onto this interface.\n}\n\n// Todo: coverage, datasetId, and datasetName can just be on source, right? or should we flatten source onto this?\nexport interface OwidColumnDef extends CoreColumnDef {\n    owidVariableId?: number\n    coverage?: string\n    datasetId?: number\n    datasetName?: string\n    annotationsColumnSlug?: ColumnSlug\n    nonRedistributable?: boolean\n    skipParsing?: boolean\n    catalogPath?: string\n    owidProcessingLevel?: OwidProcessingLevel\n    owidSchemaVersion?: number\n    shortName?: string\n}\n\nexport const OwidEntityNameColumnDef = {\n    name: OwidTableNames.Entity,\n    slug: OwidTableSlugs.EntityName,\n    type: ColumnTypeNames.EntityName,\n}\n\nexport const OwidEntityIdColumnDef = {\n    slug: OwidTableSlugs.EntityId,\n    type: ColumnTypeNames.EntityId,\n}\n\nexport const OwidEntityCodeColumnDef = {\n    name: OwidTableNames.Code,\n    slug: OwidTableSlugs.EntityCode,\n    type: ColumnTypeNames.EntityCode,\n}\n\nexport const StandardOwidColumnDefs: OwidColumnDef[] = [\n    OwidEntityNameColumnDef,\n    OwidEntityIdColumnDef,\n    OwidEntityCodeColumnDef,\n]\n\n// This is a row with the additional columns specific to our OWID data model\nexport interface OwidRow extends CoreRow {\n    entityName: EntityName\n    time: Time\n    entityCode?: EntityCode\n    entityId?: EntityId\n    year?: Year\n    day?: Integer\n    date?: string\n}\n\nexport interface OwidVariableRow<ValueType extends PrimitiveType> {\n    entityName: EntityName\n    time: Time\n    value: ValueType\n    originalTime: Time\n    originalValue?: ValueType\n}\n","import { z } from \"zod/mini\"\n\nexport enum SlideTemplate {\n    Image = \"image\",\n    Chart = \"chart\",\n    TwoCharts = \"two-charts\",\n    Cover = \"cover\",\n    Statement = \"statement\",\n    Outline = \"outline\",\n    Text = \"text\",\n}\n\nexport const SLIDE_TEMPLATE_LABELS: Record<SlideTemplate, string> = {\n    [SlideTemplate.Cover]: \"Cover\",\n    [SlideTemplate.Outline]: \"Outline\",\n    [SlideTemplate.Image]: \"Image\",\n    [SlideTemplate.Chart]: \"Chart\",\n    [SlideTemplate.TwoCharts]: \"Two Charts\",\n    [SlideTemplate.Statement]: \"Statement\",\n    [SlideTemplate.Text]: \"Text\",\n}\n\nconst SlideImageOnlySchema = z.object({\n    template: z.literal(SlideTemplate.Image),\n    filename: z.nullable(z.string()),\n    title: z.optional(z.string()),\n    text: z.optional(z.string()),\n    largeText: z.optional(z.boolean()),\n    hideLogo: z.optional(z.boolean()),\n    blueBackground: z.optional(z.boolean()),\n    /**\n     * Layout variant. \"imageText\" (default, when absent) gives the image\n     * most of the space; \"textImage\" makes the text the dominant column with\n     * a smaller image as an accent on the right.\n     */\n    variant: z.optional(z.enum([\"imageText\", \"textImage\"])),\n    /**\n     * Shrink the image so the text column can take up more of the slide's\n     * width. Only has an effect when the slide also has text.\n     */\n    smallImage: z.optional(z.boolean()),\n})\n\nconst SlideChartOnlySchema = z.object({\n    template: z.literal(SlideTemplate.Chart),\n    /** Relative URL path, e.g. \"/grapher/life-expectancy?tab=table\" or \"/explorers/population\" */\n    url: z.string().check(z.minLength(1)),\n    title: z.optional(z.string()),\n    subtitle: z.optional(z.string()),\n    text: z.optional(z.string()),\n    largeText: z.optional(z.boolean()),\n    hideLogo: z.optional(z.boolean()),\n    blueBackground: z.optional(z.boolean()),\n})\n\nconst SlideCoverSchema = z.object({\n    template: z.literal(SlideTemplate.Cover),\n    title: z.string(),\n    subtitle: z.optional(z.string()),\n    author: z.optional(z.string()),\n    date: z.optional(z.string()),\n    hideLogo: z.optional(z.boolean()),\n})\n\nconst SlideStatementSchema = z.object({\n    template: z.literal(SlideTemplate.Statement),\n    text: z.string(),\n    attribution: z.optional(z.string()),\n    hideLogo: z.optional(z.boolean()),\n    blueBackground: z.optional(z.boolean()),\n    /**\n     * Layout variant. \"standard\" (default, when absent) keeps the text aligned\n     * to the top-left; \"sectionDivider\" centers the text both vertically and\n     * horizontally so the slide reads as a section break.\n     */\n    variant: z.optional(z.enum([\"standard\", \"sectionDivider\"])),\n})\n\nconst SlideContentsSchema = z.object({\n    template: z.literal(SlideTemplate.Outline),\n    title: z.optional(z.string()),\n    text: z.string(),\n    hideLogo: z.optional(z.boolean()),\n    blueBackground: z.optional(z.boolean()),\n})\n\nconst SlideTextSchema = z.object({\n    template: z.literal(SlideTemplate.Text),\n    title: z.optional(z.string()),\n    text: z.string(),\n    largeText: z.optional(z.boolean()),\n    hideLogo: z.optional(z.boolean()),\n    blueBackground: z.optional(z.boolean()),\n})\n\nconst SlideTwoChartsSchema = z.object({\n    template: z.literal(SlideTemplate.TwoCharts),\n    url1: z.string().check(z.minLength(1)),\n    url2: z.string().check(z.minLength(1)),\n    title: z.optional(z.string()),\n    subtitle: z.optional(z.string()),\n    hideLogo: z.optional(z.boolean()),\n    blueBackground: z.optional(z.boolean()),\n})\n\nexport const SlideSchema = z.discriminatedUnion(\"template\", [\n    SlideImageOnlySchema,\n    SlideChartOnlySchema,\n    SlideTwoChartsSchema,\n    SlideCoverSchema,\n    SlideStatementSchema,\n    SlideContentsSchema,\n    SlideTextSchema,\n])\n\n/**\n * The valid field names for each slide template, derived from the per-template\n * zod schemas above. Kept adjacent to the schemas so it stays in sync when a\n * field is added or removed. Used by slide-conversion logic to know which\n * fields can be carried over when changing a slide's template.\n */\nexport const SLIDE_TEMPLATE_FIELDS: Record<SlideTemplate, string[]> = {\n    [SlideTemplate.Image]: Object.keys(SlideImageOnlySchema.shape),\n    [SlideTemplate.Chart]: Object.keys(SlideChartOnlySchema.shape),\n    [SlideTemplate.TwoCharts]: Object.keys(SlideTwoChartsSchema.shape),\n    [SlideTemplate.Cover]: Object.keys(SlideCoverSchema.shape),\n    [SlideTemplate.Statement]: Object.keys(SlideStatementSchema.shape),\n    [SlideTemplate.Outline]: Object.keys(SlideContentsSchema.shape),\n    [SlideTemplate.Text]: Object.keys(SlideTextSchema.shape),\n}\n\nexport const SlideshowConfigSchema = z.object({\n    slides: z.array(SlideSchema),\n    authors: z.optional(z.string()),\n    /** If true, charts show timeline/controls in presentation mode. If false (default), charts are minimal. */\n    interactiveCharts: z.optional(z.boolean()),\n})\n\nexport const SlideshowCreateSchema = z.object({\n    slug: z.string().check(z.minLength(1)),\n    title: z.string().check(z.minLength(1)),\n    config: z.optional(SlideshowConfigSchema),\n    isPublished: z.optional(z.boolean()),\n})\n\nexport const SlideshowUpdateSchema = z.object({\n    slug: z.optional(z.string().check(z.minLength(1))),\n    title: z.optional(z.string().check(z.minLength(1))),\n    config: z.optional(SlideshowConfigSchema),\n    isPublished: z.optional(z.boolean()),\n})\n\nexport type SlideImageOnly = z.infer<typeof SlideImageOnlySchema>\nexport type SlideChartOnly = z.infer<typeof SlideChartOnlySchema>\nexport type SlideCover = z.infer<typeof SlideCoverSchema>\nexport type SlideStatement = z.infer<typeof SlideStatementSchema>\nexport type SlideContents = z.infer<typeof SlideContentsSchema>\nexport type SlideText = z.infer<typeof SlideTextSchema>\nexport type SlideTwoCharts = z.infer<typeof SlideTwoChartsSchema>\nexport type Slide = z.infer<typeof SlideSchema>\nexport type SlideshowConfig = z.infer<typeof SlideshowConfigSchema>\n\n/**\n * Pre-resolved chart info computed at bake time so the client\n * doesn't need to probe multiple endpoints to determine the chart type.\n * Keyed by the slide URL (e.g. \"/grapher/life-expectancy?tab=table\").\n */\nexport type ResolvedSlideChartInfo =\n    | { type: \"grapher\" }\n    | { type: \"multi-dim\"; configId: string }\n    | { type: \"explorer\" }\n","import { z } from \"zod/mini\"\n\nexport const StaticVizTableName = \"static_viz\"\n\nexport interface DbRawStaticViz {\n    id: number\n    name: string\n    description: string | null\n    grapherSlug: string | null\n    sourceUrl: string | null\n    imageId: number\n    mobileImageId: number | null\n    createdBy: number | null\n    updatedBy: number | null\n    createdAt: Date\n    updatedAt: Date\n}\n\ntype StaticVizImage = {\n    id: number\n    cloudflareId: string\n    filename: string\n    originalHeight: number\n    originalWidth: number\n}\n\n// A type for rendering the static viz admin, with images resolved and user names instead of numeric IDs\nexport type DbEnrichedStaticViz = Omit<\n    DbRawStaticViz,\n    \"createdBy\" | \"updatedBy\" | \"imageId\" | \"mobileImageId\"\n> & {\n    desktop?: StaticVizImage\n    mobile?: StaticVizImage\n    name: string\n    grapherSlug?: string\n    chartId?: number\n    sourceUrl?: string\n    description?: string\n    createdBy: string\n    updatedBy: string\n}\n\nexport const StaticVizInsertSchema = z.object({\n    name: z.string().check(z.minLength(1)),\n    description: z.nullable(z.optional(z.string())),\n    grapherSlug: z.nullable(z.optional(z.string())),\n    sourceUrl: z.nullable(z.optional(z.string())),\n    imageId: z.number().check(z.minimum(1)),\n    mobileImageId: z.optional(z.nullable(z.number().check(z.minimum(1)))),\n    createdBy: z.optional(z.nullable(z.number().check(z.minimum(1)))),\n    updatedBy: z.optional(z.nullable(z.number().check(z.minimum(1)))),\n})\n\nexport const StaticVizUpdateSchema = z.object({\n    name: z.optional(z.string().check(z.minLength(1))),\n    description: z.nullable(z.optional(z.string())),\n    grapherSlug: z.nullable(z.optional(z.string())),\n    sourceUrl: z.nullable(z.optional(z.string())),\n    imageId: z.optional(z.number().check(z.minimum(1))),\n    mobileImageId: z.optional(z.nullable(z.number().check(z.minimum(1)))),\n    updatedBy: z.optional(z.nullable(z.number().check(z.minimum(1)))),\n})\n\nexport type StaticVizUpdate = z.infer<typeof StaticVizUpdateSchema>\n","// Used in GrapherPage.tsx\nexport const HIDE_IF_JS_ENABLED_CLASSNAME = \"js--hide-if-js-enabled\"\n\nexport const HIDE_IF_JS_DISABLED_CLASSNAME = \"js--hide-if-js-disabled\"\n\n// Used in GrapherWithFallback.tsx\nexport const GRAPHER_PREVIEW_CLASS = \"grapherPreview\"\n\nexport const MAILCHIMP_API_SERVER = \"us8\"\nexport const MAILCHIMP_DONOR_LIST_ID = \"c713e5a741\"\nexport const MAILCHIMP_NEWSLETTER_LIST_ID = \"2e166c1fc1\"\nexport const MAILCHIMP_OWID_BRIEF_INTEREST_ID = \"7aa5a63b3f\"\n\n// Sentry constants\nexport const SENTRY_DEFAULT_REPLAYS_SESSION_SAMPLE_RATE = 0.05\nexport const SENTRY_SESSION_STORAGE_KEY = \"sentryReplaySession\"\nexport const SENTRY_SAMPLED_RATE_KEY = \"sentrySampledRate\"\n\n// The subscribe page is baked in its initial state and hydrated as a whole, so\n// that submitting the form can swap out the hero and aside as well as the form.\nexport const SUBSCRIBE_PAGE_ROOT_ID = \"subscribe-page-root\"\nexport const OLD_SUBSCRIBE_PAGE_FORM_CONTAINER_ID =\n    \"old-subscribe-page-form-container\"\nexport const PREFERENCES_PAGE_ROOT_ID = \"email-notifications-preferences-root\"\n","export type ArchivalDateString = `${number}-${number}`\nexport const ARCHIVE_DATE_TIME_FORMAT = \"YYYYMMDD-HHmmss\" // e.g. 20250414-074331, always UTC\n\nexport type AssetMap = Record<string, string>\n\nexport type IndicatorChecksums = {\n    [id: string]: { metadataChecksum: string; dataChecksum: string }\n}\n\nexport interface UrlAndMaybeDate {\n    url: string\n    date?: Date | ArchivalDateString\n}\n\nexport type ArchiveContentType = \"data\" | \"writing\"\n\nexport interface ArchiveSiteNavigationInfo {\n    contentType: ArchiveContentType\n    liveUrl?: string\n    previousVersion?: UrlAndMaybeDate\n    nextVersion?: UrlAndMaybeDate\n    versionsFileUrl?: string\n}\n\n// Information about an archived page version that is available, i.e. we can point to from the live site\nexport interface ArchivedPageVersion {\n    archivalDate: ArchivalDateString\n    archiveUrl: string\n    versionsFileUrl?: string\n    type: \"archived-page-version\"\n}\n\n// Information about an archived chart that is necessary for rendering the archived page, incl. navigation and assets\nexport interface ArchiveMetaInformation extends Omit<\n    ArchivedPageVersion,\n    \"type\"\n> {\n    archiveNavigation: ArchiveSiteNavigationInfo\n    assets: {\n        runtime: AssetMap\n        static?: AssetMap\n    }\n    type: \"archive-page\"\n}\n\nexport type ArchiveContext = ArchivedPageVersion | ArchiveMetaInformation\n\nexport interface ArchiveVersions {\n    chartId: number\n    versions: Array<{\n        archivalDate: ArchivalDateString\n        slug: string\n        url: string\n    }>\n}\n\nexport interface GrapherChecksums {\n    chartConfigMd5: string\n    indicators: IndicatorChecksums\n}\n\nexport interface GrapherChecksumsObjectWithHash {\n    chartId: number\n    chartSlug: string\n    checksums: GrapherChecksums\n    checksumsHashed: string\n}\n\nexport interface MultiDimChecksums {\n    multiDimConfigMd5: string\n    chartConfigs: {\n        [id: string]: string // chartConfigId -> MD5\n    }\n    indicators: IndicatorChecksums\n}\n\nexport interface MultiDimChecksumsObjectWithHash {\n    multiDimId: number\n    multiDimSlug: string\n    checksums: MultiDimChecksums\n    checksumsHashed: string\n}\n\nexport interface ExplorerChecksums {\n    explorerConfigMd5: string\n    chartConfigs: {\n        [id: string]: string // chartId -> chart_configs.configMd5 of explorer view configs\n    }\n    indicators: IndicatorChecksums\n}\n\nexport interface ExplorerChecksumsObjectWithHash {\n    explorerSlug: string\n    checksums: ExplorerChecksums\n    checksumsHashed: string\n}\n\nexport interface NarrativeChartChecksums {\n    chartConfigMd5: string\n    queryParamsForParentChartMd5: string\n    indicators: IndicatorChecksums\n}\n\nexport interface NarrativeChartChecksumsResult {\n    narrativeChartId: number\n    narrativeChartName: string\n    checksums: NarrativeChartChecksums\n}\n\nexport interface PostChecksums {\n    postContentMd5: string\n    indicators: IndicatorChecksums // Shared across all chart types\n    graphers: {\n        [chartId: string]: {\n            slug: string\n            chartConfigMd5: string\n        }\n    }\n    explorers: {\n        [slug: string]: {\n            explorerConfigMd5: string\n            chartConfigs: {\n                [id: string]: string // chartConfigId -> MD5\n            }\n        }\n    }\n    multiDims: {\n        [multiDimId: string]: {\n            slug: string\n            multiDimConfigMd5: string\n            chartConfigs: {\n                [id: string]: string // chartConfigId -> MD5\n            }\n        }\n    }\n    narrativeCharts: {\n        [narrativeChartId: string]: {\n            name: string\n            chartConfigMd5: string\n            queryParamsForParentChartMd5: string\n        }\n    }\n    images: {\n        [imageId: string]: { filename: string; hash: string }\n    }\n}\n\nexport interface PostChecksumsObjectWithHash {\n    postId: string\n    postSlug: string\n    checksums: PostChecksums\n    checksumsHashed: string\n}\n","export const logBinningStrategies = [\n    \"log-auto\",\n    \"log-1-2-5\",\n    \"log-1-3\",\n    \"log-10\",\n] as const\n\nexport const equalSizeBinningStrategies = [\n    \"equalSizeBins-normal\",\n    \"equalSizeBins-few-bins\",\n    \"equalSizeBins-many-bins\",\n    \"equalSizeBins-percent\",\n] as const\n\nexport const automaticBinningStrategies = [\n    \"auto\",\n    ...logBinningStrategies,\n    ...equalSizeBinningStrategies,\n] as const\n\nexport const binningStrategiesIncludingManual = [\n    \"manual\",\n    ...automaticBinningStrategies,\n] as const\n\nexport type LogBinningStrategy = (typeof logBinningStrategies)[number]\nexport type EqualSizeBinningStrategy =\n    (typeof equalSizeBinningStrategies)[number]\n\nexport type ResolvedLogBinningStrategy = Exclude<LogBinningStrategy, \"log-auto\">\n\nexport type AutomaticBinningStrategy =\n    (typeof automaticBinningStrategies)[number]\n\nexport type ResolvedBinningStrategy = Exclude<AutomaticBinningStrategy, \"auto\">\nexport type BinningStrategyIncludingManual =\n    (typeof binningStrategiesIncludingManual)[number]\n\nexport const binningMidpointModes = [\n    undefined, // Automatic\n    \"none\", // No midpoint\n    \"symmetric\", // Symmetric bins around a midpoint, with negBins = -1 * posBins\n    \"same-num-bins\", // Symmetric bins around a midpoint, with negBins.length = posBins.length\n    \"asymmetric\", // Bins around a midpoint, with negBins.length not necessarily equal to posBins.length\n] as const\nexport type MidpointMode = (typeof binningMidpointModes)[number]\n","import {\n    GrapherQueryParams,\n    GrapherTabName,\n    GrapherTrendArrowDirection,\n} from \"../grapherTypes/GrapherTypes\"\n\n/** Type definition for data retrieved from the `/grapher/slug.search-result.json` endpoint */\nexport type GrapherSearchResultJson = {\n    title: string\n    subtitle?: string\n    source: string\n    grapherQueryParams: GrapherQueryParams\n    layout: LayoutSlot[]\n    dataTable: SearchChartHitDataTableProps\n    valueDisplay?: SearchChartHitDataDisplayProps\n    entityType: string\n    entityTypePlural: string\n    unit?: string\n    numAvailableEntities?: number\n}\n\nexport interface SearchChartHitDataTableProps {\n    rows: TableRow[]\n    title: string\n}\n\ninterface TableRow {\n    seriesName?: string\n    label: string\n    color?: string\n    value?: string\n    valueColor?: string\n    startValue?: string\n    startValueColor?: string\n    time?: string\n    timePreposition?: string\n    muted?: boolean\n    striped?: boolean | \"no-data\"\n    outlined?: boolean\n    rounded?: boolean\n    trend?: GrapherTrendArrowDirection // only relevant if startValue is given\n}\n\nexport interface LayoutSlot<TSlotKey extends GridSlotKey = GridSlotKey> {\n    slotKey: TSlotKey\n    grapherTab: GrapherTabName\n    chartParams?: GrapherQueryParams\n    previewParams?: GrapherQueryParams\n}\n\nexport type GridSlotKey = MediumVariantGridSlotKey | LargeVariantGridSlotKey\n\n// The medium variant is a one-dimensional grid layout\n// where the last quarter might contain two smaller slots\nexport enum MediumVariantGridSlotKey {\n    Single = \"single-slot\",\n    Double = \"double-slot\",\n    Triple = \"triple-slot\",\n    Quad = \"quad-slot\",\n    SmallLeft = \"small-slot-left\",\n    SmallRight = \"small-slot-right\",\n}\n\n// The large variant occupies a 4x2 grid layout:\n// -----------------\n// │ 1 │ 2 │ 3 │ 4 │\n// -----------------\n// │ 5 │ 6 │ 7 │ 8 │\n// -----------------\nexport enum LargeVariantGridSlotKey {\n    // Full grid (all cells)\n    Full = \"full\",\n    // Cell numbers 1, 2, 5, 6\n    LeftQuad = \"left-quad\",\n    // Cell numbers 3, 4, 7, 8\n    RightQuad = \"right-quad\",\n    // Cell numbers 3, 7\n    RightQuadLeftColumn = \"right-quad-left-column\",\n    // Cell number 4\n    TopRightCell = \"top-right-cell\",\n    // Cell number 8\n    BottomRightCell = \"bottom-right-cell\",\n    // Any cell, no specific number\n    SingleCell = \"single-cell\",\n}\n\nexport interface SearchChartHitDataDisplayProps {\n    entityName: string\n    endValue: string\n    time: string\n    unit?: string\n    startValue?: string // if given, display as a range\n    trend?: GrapherTrendArrowDirection // only relevant if startValue is given\n    showLocationIcon?: boolean\n    className?: string\n    numericEndTime?: number // not displayed, but useful to know\n}\n","// Analytics Type System\n//\n// This file defines the complete contract between the frontend and analytics backend.\n// Each event category has exactly one corresponding parameter interface.\n// TypeScript enforces you can't send wrong parameters for an event.\n//\n// IMPORTANT GUIDELINES FOR ANALYTICS BACKEND:\n//\n// 1. GA4 100-Character Limit:\n//    - GA4 truncates ALL string parameters at exactly 100 characters\n//    - Use separate typed parameters instead of JSON in eventContext\n//    - Example: searchQuery, searchTopics (separate params)\n//      is better than eventContext: JSON.stringify({query, topics})\n//\n// 2. Register Custom Parameters in Google Tag Manager:\n//    - After adding new parameters, you MUST register them in GTM\n//    - Go to: https://tagmanager.google.com/#/container/accounts/4702630479/containers/12712743/workspaces/50/tags\n//    - Without registration, custom parameters won't be collected by GA4\n//\n// 3. This file is the single source of truth for the analytics contract\n\nimport { JsonString } from \"../domainTypes/Various.js\"\n\n// =============================================================================\n// EVENT CATEGORIES\n// =============================================================================\n\nexport enum EventCategory {\n    Filter = \"owid.filter\",\n    GrapherView = \"owid.grapher_view\",\n    GrapherClick = \"owid.grapher_click\",\n    GrapherHover = \"owid.grapher_hover\",\n    GrapherError = \"owid.grapher_error\",\n    GrapherEntitySelector = \"owid.grapher_entity_selector\",\n    ExplorerView = \"owid.explorer_view\",\n    Expander = \"owid.expander\",\n    ExplorerCountrySelector = \"owid.explorer_country_selector\",\n    KeyboardShortcut = \"owid.keyboard_shortcut\",\n    SiteClick = \"owid.site_click\",\n    SiteError = \"owid.site_error\",\n    SiteInstantSearchClick = \"owid.site_instantsearch_click\",\n    SiteLatest = \"owid.site_latest\",\n    SiteLatestAnnouncementExpand = \"owid.site_latest_announcement_expand\",\n    SiteLatestResultClick = \"owid.site_latest_result_click\",\n    SitePrint = \"owid.site_print\",\n    SiteSearch = \"owid.site_search\",\n    SiteSearchAutocompleteClick = \"owid.site_search_autocomplete_click\",\n    SiteSearchResultClick = \"owid.site_search_result_click\",\n    SiteFormSubmit = \"owid.site_form_submit\",\n    SiteFindInPage = \"owid.site_find_in_page\",\n    DetailOnDemand = \"owid.detail_on_demand\",\n    SiteGuidedChartLinkClick = \"owid.site_guided_chart_link_click\",\n    SiteChartPreviewMouseover = \"owid.site_chart_preview_mouseover\",\n    SiteStaticVizDownload = \"owid.site_static_viz_download\",\n    SiteUserSurvey = \"owid.site_user_survey\",\n    TranslatePage = \"owid.translate_page\",\n}\n\n// =============================================================================\n// EVENT-TO-PARAMETER MAPPING\n// =============================================================================\n\nexport type EventParamsMap = {\n    [EventCategory.SiteLatest]: SiteLatestParams\n    [EventCategory.SiteLatestAnnouncementExpand]: SiteLatestAnnouncementExpandParams\n    [EventCategory.SiteLatestResultClick]: SiteLatestResultClickParams\n    [EventCategory.SiteSearch]: SiteSearchParams\n    [EventCategory.SiteSearchAutocompleteClick]: SiteSearchAutocompleteClickParams\n    [EventCategory.SiteSearchResultClick]: SiteSearchResultClickParams\n    [EventCategory.GrapherView]: GrapherViewParams\n    [EventCategory.GrapherClick]: GrapherClickParams\n    [EventCategory.GrapherHover]: GrapherHoverParams\n    [EventCategory.GrapherError]: GrapherErrorParams\n    [EventCategory.GrapherEntitySelector]: GrapherEntitySelectorParams\n    [EventCategory.ExplorerView]: ExplorerViewParams\n    [EventCategory.ExplorerCountrySelector]: ExplorerCountrySelectorParams\n    [EventCategory.DetailOnDemand]: DetailOnDemandParams\n    [EventCategory.Expander]: ExpanderParams\n    [EventCategory.KeyboardShortcut]: KeyboardShortcutParams\n    [EventCategory.SiteGuidedChartLinkClick]: SiteGuidedChartLinkClickParams\n    [EventCategory.SiteChartPreviewMouseover]: SiteChartPreviewMouseoverParams\n    [EventCategory.SiteStaticVizDownload]: SiteStaticVizDownloadParams\n    [EventCategory.SiteUserSurvey]: SiteUserSurveyParams\n    [EventCategory.SiteClick]: SiteClickParams\n    [EventCategory.SiteFormSubmit]: SiteFormSubmitParams\n    [EventCategory.SiteFindInPage]: SiteFindInPageParams\n    [EventCategory.SiteInstantSearchClick]: SiteInstantSearchClickParams\n    [EventCategory.SiteError]: SiteErrorParams\n    [EventCategory.SitePrint]: SitePrintParams\n    [EventCategory.Filter]: FilterParams\n    [EventCategory.TranslatePage]: TranslatePageParams\n}\n\nexport type GAEvent = {\n    [K in EventCategory]: { event: K } & EventParamsMap[K]\n}[EventCategory]\n\n// =============================================================================\n// EVENT PARAMETER INTERFACES\n// =============================================================================\n\n// Site Events\n\nexport interface SiteSearchParams {\n    /** Always 'search' for this event */\n    eventAction: \"search\"\n    /** Search query entered by user */\n    searchQuery: string\n    /** Whether 'all countries' filter is enabled */\n    searchRequireAllCountries: boolean\n    /** Type of results displayed ('all', 'data', 'articles', etc.) */\n    searchResultType: string\n    /** Tilde-separated list of selected topic names */\n    searchTopics: string\n    /** Tilde-separated list of selected country names */\n    searchSelectedCountries: string\n}\n\nexport interface SiteLatestParams {\n    /** Always 'filter' for this event */\n    eventAction: \"filter\"\n    /** Tilde-separated list of selected topic names. Omitted when no topics\n     * are selected. */\n    latestTopics?: string\n    /** Selected content type. Omitted when the user hasn't picked a type\n     * (the \"all\" filter). */\n    latestType?: string\n    /** Arm of the /latest sticky filters experiment the visitor is in, if\n     * assigned (`exp-latest-sticky-filters-v1` cookie). */\n    experimentArm?: string\n}\n\n/**\n * Records opening the content represented by a feed preview. Excludes body,\n * author, and CTA links within content already displayed in the feed.\n */\nexport interface SiteLatestResultClickParams {\n    /** Always 'click' for this event */\n    eventAction: \"click\"\n    /** Slug of the clicked result */\n    eventTarget: string\n    /** 1-indexed position of the clicked result in the /latest feed\n     * (chronological order, includes all hit types). */\n    latestPosition: number\n    /** Content type of the clicked result. Always set in practice — only\n     * topic/linear-topic pages lack `latestType`, and those never render\n     * on /latest. */\n    latestType?: string\n    /** Arm of the /latest sticky filters experiment the visitor is in, if\n     * assigned (`exp-latest-sticky-filters-v1` cookie). */\n    experimentArm?: string\n}\n\nexport interface SiteSearchAutocompleteClickParams {\n    /** Always 'click' for this event */\n    eventAction: \"click\"\n    /** Search query when autocomplete was clicked */\n    autocompleteQuery: string\n    /** Position of selected suggestion (0-indexed) */\n    autocompletePosition: number\n    /** Type of selected filter ('topic' | 'country' | 'query') */\n    autocompleteFilterType: string\n    /** Name of the selected filter (e.g., 'France', 'Health') */\n    autocompleteFilterName: string\n    /** Tilde-separated list of all suggestions shown */\n    autocompleteSuggestions: string\n    /** Tilde-separated list of suggestion types */\n    autocompleteSuggestionsTypes: string\n    /** Total number of suggestions displayed */\n    autocompleteSuggestionsCount: number\n}\n\nexport interface SiteSearchResultClickParams {\n    /** Always 'click' for this event */\n    eventAction: \"click\"\n    /** JSON string with context about the clicked result */\n    eventContext: string\n    /** Target URL of the clicked result */\n    eventTarget: string\n}\n\nexport interface SiteClickParams {\n    /** Action type */\n    eventAction: string\n    /** Target element or label */\n    eventTarget?: string\n}\n\nexport interface SiteFormSubmitParams {\n    /** Action type - form submission type */\n    eventAction: \"newsletter-subscribe\" | \"donate\"\n    /** Target element or label */\n    eventTarget?: string\n}\n\nexport interface SiteFindInPageParams {\n    /** Always 'open': the browser's find shortcut was pressed (logged at most\n     * once per page view). The browser never exposes the searched text. */\n    eventAction: \"open\"\n    /** The shortcut pressed ('mod+f' or 'f3') */\n    eventContext: \"mod+f\" | \"f3\"\n}\n\nexport interface SiteInstantSearchClickParams {\n    /** Always 'click' for this event */\n    eventAction: \"click\"\n    /** JSON context with query and position */\n    eventContext: string\n    /** Target URL */\n    eventTarget: string\n}\n\nexport interface SiteErrorParams {\n    /** Action type (e.g., 'not_found') */\n    eventAction: string\n    /** Target element or label */\n    eventTarget?: string\n    /** Error details or URL */\n    eventContext: string\n}\n\nexport interface SitePrintParams {\n    /** Always 'beforeprint' for this event; fired when the browser is about to\n     * print the page or open its print preview */\n    eventAction: \"beforeprint\"\n}\n\nexport interface SiteGuidedChartLinkClickParams {\n    /** Always 'click' for this event */\n    eventAction: \"click\"\n    /** Target URL or chart path */\n    eventTarget: string\n    /** Continuation of eventTarget for URLs > 100 chars (characters 101-200) */\n    eventTargetNext?: string\n    /** Grapher path of the linked chart (optional - may use eventTarget instead) */\n    grapherPath?: string\n}\n\nexport interface SiteChartPreviewMouseoverParams {\n    /** Always 'mouseover' for this event */\n    eventAction: \"mouseover\"\n    /** Target chart URL */\n    eventTarget: string\n    /** Continuation of eventTarget for URLs > 100 chars (characters 101-200) */\n    eventTargetNext?: string\n    /** Explorer path if in explorer */\n    explorerPath?: string\n    /** Grapher path being previewed */\n    grapherPath?: string\n}\n\nexport interface SiteStaticVizDownloadParams {\n    /** Type of download action */\n    eventAction: \"image_download\" | \"data_download\" | \"source_link_click\"\n    /** Name of the static viz */\n    eventTarget: string\n    /** Additional context (e.g., 'desktop' or 'mobile' for images, URL for data/source) */\n    eventContext?: string\n}\n\nexport type UserSurveyExperimentArm = \"long-list\" | \"short-list\" | \"free-form\"\n\nexport type UserSurveyRoleAnswer =\n    | {\n          experimentArm: \"free-form\"\n          freeFormInput: string\n      }\n    | {\n          experimentArm: \"long-list\" | \"short-list\"\n          optionId: string\n          optionLabel: string\n          optionIndex: number\n          freeFormInput?: string\n      }\n\nexport type SiteUserSurveyParams =\n    | {\n          /** Always 'user_role_show' for this event */\n          eventAction: \"user_role_show\"\n          /** Survey name identifier */\n          surveyName: string\n          /** Survey instance identifier generated with uuidv7 */\n          responseId: string\n          /** First-screen arm for this survey */\n          experimentArm: UserSurveyExperimentArm\n      }\n    | {\n          /** Always 'thank_you_show' for this event */\n          eventAction: \"thank_you_show\"\n          /** Survey name identifier */\n          surveyName: string\n          /** Survey instance identifier generated with uuidv7 */\n          responseId: string\n          /** First-screen arm for this survey */\n          experimentArm: UserSurveyExperimentArm\n      }\n    | {\n          /** Always 'user_role_submit' for this event */\n          eventAction: \"user_role_submit\"\n          /** Survey name identifier */\n          surveyName: string\n          /** Survey instance identifier generated with uuidv7 */\n          responseId: string\n          /** Free-form arm name */\n          experimentArm: \"free-form\"\n          /** Text field input from the first screen */\n          freeFormInput: string\n      }\n    | {\n          /** Always 'user_role_submit' for this event */\n          eventAction: \"user_role_submit\"\n          /** Survey name identifier */\n          surveyName: string\n          /** Survey instance identifier generated with uuidv7 */\n          responseId: string\n          /** Choice-based arm names */\n          experimentArm: \"long-list\" | \"short-list\"\n          /** Option id from predefined options */\n          optionId: string\n          /** Option label from predefined options */\n          optionLabel: string\n          /** 0-based index of selected option in randomized list */\n          optionIndex: number\n          /** Optional text field input from the \"other\" option */\n          freeFormInput?: string\n      }\n    | {\n          /** Always 'feedback_submit' for this event */\n          eventAction: \"feedback_submit\"\n          /** Survey name identifier */\n          surveyName: string\n          /** Survey instance identifier generated with uuidv7 */\n          responseId: string\n          /** First-screen arm for this survey */\n          experimentArm: UserSurveyExperimentArm\n      }\n    | {\n          /** Always 'user_role_dismiss' for this event */\n          eventAction: \"user_role_dismiss\"\n          /** Survey name identifier */\n          surveyName: string\n          /** Survey instance identifier generated with uuidv7 */\n          responseId: string\n          /** First-screen arm for this survey */\n          experimentArm: UserSurveyExperimentArm\n      }\n    | {\n          /** Always 'thank_you_dismiss' for this event */\n          eventAction: \"thank_you_dismiss\"\n          /** Survey name identifier */\n          surveyName: string\n          /** Survey instance identifier generated with uuidv7 */\n          responseId: string\n          /** First-screen arm for this survey */\n          experimentArm: UserSurveyExperimentArm\n      }\n\n// Grapher Events\n\nexport interface GrapherViewParams {\n    /** Grapher chart path (e.g., '/grapher/life-expectancy') */\n    grapherPath?: string\n    /** Continuation of grapherPath for URLs > 100 chars (characters 101-200) */\n    grapherPathNext?: string\n    /** View configuration ID for multi-dimensional data pages */\n    viewConfigId?: string\n    /** Name of the narrative chart if embedded */\n    narrativeChartName?: string\n}\n\nexport interface GrapherClickParams {\n    /** Action type - image downloads or generic clicks */\n    eventAction: GrapherImageDownloadEvent | string\n    /** Grapher chart path */\n    grapherPath?: string\n    /** Continuation of grapherPath for URLs > 100 chars (characters 101-200) */\n    grapherPathNext?: string\n    /** View configuration ID */\n    viewConfigId?: string\n    /** Name of narrative chart */\n    narrativeChartName?: string\n    /** Target element label */\n    eventTarget?: string\n    /** Additional context as JSON */\n    eventContext?: string\n}\n\nexport interface GrapherHoverParams {\n    /** Type of hover interaction */\n    eventAction: GrapherInteractionEvent\n    /** Grapher chart path */\n    grapherPath?: string\n    /** Continuation of grapherPath for URLs > 100 chars (characters 101-200) */\n    grapherPathNext?: string\n    /** View configuration ID */\n    viewConfigId?: string\n    /** Name of narrative chart */\n    narrativeChartName?: string\n    /** Target element (e.g., country name) */\n    eventTarget?: string\n}\n\nexport interface GrapherErrorParams {\n    /** Type of error */\n    eventAction: \"grapher_view_error\" | \"entities_not_found\"\n    /** Error message or details */\n    eventContext: string\n    /** Grapher chart path */\n    grapherPath?: string\n    /** Continuation of grapherPath for URLs > 100 chars (characters 101-200) */\n    grapherPathNext?: string\n    /** View configuration ID */\n    viewConfigId?: string\n    /** Name of narrative chart */\n    narrativeChartName?: string\n}\n\nexport interface GrapherEntitySelectorParams {\n    /** Entity selector action */\n    eventAction: EntitySelectorEvent\n    /** Grapher chart path */\n    grapherPath?: string\n    /** Continuation of grapherPath for URLs > 100 chars (characters 101-200) */\n    grapherPathNext?: string\n    /** View configuration ID */\n    viewConfigId?: string\n    /** Name of narrative chart */\n    narrativeChartName?: string\n    /** Target entity or note */\n    eventTarget?: string\n}\n\n// Explorer Events\n\nexport interface ExplorerViewParams {\n    /** Explorer path (e.g., '/explorers/migration') */\n    explorerPath: string\n    /** JSON string of the explorer view state */\n    explorerView: string\n    /** Chart config ID of the explorer view */\n    viewConfigId?: string\n}\n\nexport interface ExplorerCountrySelectorParams {\n    /** Entity selector action */\n    eventAction: EntitySelectorEvent\n    /** Additional context */\n    eventContext?: string\n    /** Explorer path */\n    explorerPath?: string\n    /** Chart config ID of the explorer view */\n    viewConfigId?: string\n}\n\n// Shared Events\n\nexport interface DetailOnDemandParams {\n    /** Action type - typically 'show' */\n    eventAction: \"show\" | string\n    /** Target element ID */\n    eventTarget: string\n    /** Page region of the DoD span (data pages only, e.g. \"wysk\", \"faqs\") */\n    eventContext?: string\n    /** Explorer path if triggered from explorer */\n    explorerPath?: string\n    /** Grapher path if triggered from grapher */\n    grapherPath?: string\n}\n\nexport interface ExpanderParams {\n    /** Action type - 'open' or 'close' */\n    eventAction: \"open\" | \"close\"\n    /** Target element ID */\n    eventTarget: string\n    /** Explorer path if in explorer */\n    explorerPath?: string\n    /** Grapher path if in grapher */\n    grapherPath?: string\n}\n\nexport interface SiteLatestAnnouncementExpandParams {\n    /** Always 'expand' for this event — the announcement card's Read more\n     * toggle is one-way (no collapse), so there's no 'open'/'close'\n     * distinction the way Expander has. */\n    eventAction: \"expand\"\n    /** Slug of the announcement that was expanded */\n    eventTarget: string\n    /** 1-indexed position of the announcement in the /latest feed at the\n     * time of expansion (chronological order, includes all hit types). */\n    latestPosition: number\n    /** Content type of the announcement. One of the announcement\n     * `LatestType` subtypes (announcement / data-update / website-upgrade)\n     * since only announcement hits render the Read more toggle. */\n    latestType?: string\n    /** Arm of the /latest sticky filters experiment the visitor is in, if\n     * assigned (`exp-latest-sticky-filters-v1` cookie). */\n    experimentArm?: string\n}\n\nexport interface KeyboardShortcutParams {\n    /** The keyboard shortcut name */\n    eventAction: string\n    /** The key combination (e.g., 'Ctrl+K') */\n    eventContext: string\n    /** Explorer path if in explorer */\n    explorerPath?: string\n    /** Grapher path if in grapher */\n    grapherPath?: string\n}\n\nexport interface FilterParams {\n    /** Always 'country_page_search' for this event */\n    eventAction: \"country_page_search\"\n    /** Search query or filter context */\n    eventContext: string\n}\n\nexport interface TranslatePageParams {\n    /** Information about the translation event, in the form { from: string | null, to: string | null } */\n    eventTarget: JsonString\n    /** Comma-separated list of browser languages, e.g.: `es-ES,de-DE,en` */\n    eventContext: string\n}\n\n// =============================================================================\n// EVENT ACTION TYPES & HELPERS\n// =============================================================================\n\nexport type EntitySelectorEvent =\n    | \"enter\"\n    | \"select\"\n    | \"deselect\"\n    | \"sortBy\"\n    | \"sortOrder\"\n    | \"filterBy\"\n    | \"clear\"\n\nexport type GrapherImageDownloadEvent =\n    | \"chart_download_png\"\n    | \"chart_download_svg\"\n\nexport type GrapherInteractionEvent =\n    | \"map_country_hover\" // hover over a country in the map or on the globe\n    | \"map_legend_hover\" // hover over a legend item on the map tab\n\nexport enum GrapherErrorAction {\n    GrapherViewError = \"grapher_view_error\",\n    EntitiesNotFound = \"entities_not_found\",\n}\n\nexport interface GrapherAnalyticsContext {\n    slug?: string\n    viewConfigId?: string\n    narrativeChartName?: string\n}\n","import {\n    LinkedAuthor,\n    LinkedChart,\n    OwidGdocMinimalPostInterface,\n    OwidGdocType,\n} from \"../gdocTypes/Gdoc.js\"\nimport { OwidEnrichedGdocBlock } from \"../gdocTypes/ArchieMlComponents.js\"\nimport { ImageMetadata } from \"../gdocTypes/Image.js\"\nimport * as z from \"zod/mini\"\n\n/* Latest filter state */\n\n/**\n * The flat content-category dimension used by /latest. For articles and\n * data insights this mirrors the gdoc type; for announcements it reflects\n * the (slugified) kicker. Absent for gdoc types that are indexed but not\n * shown on /latest (topic pages, linear topic pages).\n *\n * Ordered as displayed in the /latest \"Filter by type\" dropdown so callers\n * can iterate this tuple directly to render the dropdown.\n */\nexport const LATEST_TYPE_VALUES = [\n    \"data-insight\",\n    \"article\",\n    \"data-update\",\n    \"topic-update\",\n    \"website-upgrade\",\n    \"announcement\",\n] as const\nexport type LatestType = (typeof LATEST_TYPE_VALUES)[number]\n\n// Subset of LATEST_TYPE_VALUES that announcement gdocs can map to via their\n// (slugified) kicker. Validated upstream in GdocAnnouncement._validateSubclass\n// so unrecognized kickers can't reach a published announcement.\nexport const ANNOUNCEMENT_LATEST_TYPES = [\n    \"data-update\",\n    \"topic-update\",\n    \"website-upgrade\",\n    \"announcement\",\n] as const satisfies readonly LatestType[]\nexport type AnnouncementLatestType = (typeof ANNOUNCEMENT_LATEST_TYPES)[number]\n\n/** Singular display labels for a LatestType. Iterate LATEST_TYPE_VALUES to\n * get the dropdown display order; append \"s\" for the plural form used as\n * the dropdown label. Used wherever a per-item kicker is rendered\n * (announcement page, homepage announcement card, /latest hit metadata). */\nexport const LATEST_TYPE_LABELS: Record<LatestType, string> = {\n    \"data-insight\": \"Data Insight\",\n    article: \"Article\",\n    \"data-update\": \"Data update\",\n    \"topic-update\": \"Topic update\",\n    \"website-upgrade\": \"Website upgrade\",\n    announcement: \"Announcement\",\n}\n\nexport const LATEST_PATH = \"/latest\"\n\nexport enum LatestUrlParam {\n    TOPICS = \"topics\",\n    TYPE = \"type\",\n}\n\nexport interface LatestState {\n    topics: string[]\n    latestType: LatestType | null\n}\n\nexport const DEFAULT_LATEST_STATE: LatestState = {\n    topics: [],\n    latestType: null,\n}\n\n/* Shared schema helpers */\n\n// OwidEnrichedGdocBlock and the linked attachment types don't have zod schemas\n// yet, but consumers should keep their existing TypeScript types for those\n// fields.\nconst castSchemaOutput = <T>(schema: z.ZodMiniType) =>\n    z.pipe(\n        schema,\n        z.transform((value) => value as T)\n    )\n\nconst OwidEnrichedGdocBlocksSchema = castSchemaOutput<OwidEnrichedGdocBlock[]>(\n    z.array(z.any())\n)\n\nconst LinkedAttachmentsShape = {\n    linkedCharts: z.optional(\n        castSchemaOutput<Record<string, LinkedChart>>(\n            z.record(z.string(), z.any())\n        )\n    ),\n    linkedDocuments: z.optional(\n        castSchemaOutput<Record<string, OwidGdocMinimalPostInterface>>(\n            z.record(z.string(), z.any())\n        )\n    ),\n}\n\n// Only the renderable variants (DataInsight, Article, Announcement) carry\n// imageMetadata — topic pages can't, by type-level construction. Mirrors how\n// LinkedAttachmentsShape is spread only into the variants that need it.\nconst ImageAttachmentShape = {\n    imageMetadata: z.optional(\n        castSchemaOutput<Record<string, ImageMetadata>>(\n            z.record(z.string(), z.any())\n        )\n    ),\n}\n\n/* Chronological record base */\n\nconst ChronologicalRecordBaseShape = {\n    objectID: z.string(),\n    slug: z.string(),\n    title: z.string(),\n    excerpt: z.string(),\n    date: z.string(),\n    modifiedDate: z.string(),\n    authors: z.array(z.string()),\n    tags: z.array(z.string()),\n    thumbnailUrl: z.string(),\n}\n\nconst PageChronologicalRecordBaseSchema = z.strictObject(\n    ChronologicalRecordBaseShape\n)\nexport type PageChronologicalRecordBase = z.infer<\n    typeof PageChronologicalRecordBaseSchema\n>\n\n/* Chronological record variants */\n\n// Data insight\n\n// linkedCharts / linkedDocuments resolve the CTA and inline links when the\n// insight is read in place on /latest; linkedAuthors feed the avatar byline.\nconst PageChronologicalDataInsightRecordPayloadSchema = z.strictObject({\n    ...LinkedAttachmentsShape,\n    ...ImageAttachmentShape,\n    type: z.literal(OwidGdocType.DataInsight),\n    latestType: z.literal(\"data-insight\"),\n    body: OwidEnrichedGdocBlocksSchema,\n    linkedAuthors: z.optional(\n        castSchemaOutput<LinkedAuthor[]>(z.array(z.any()))\n    ),\n    authorRoles: z.optional(z.record(z.string(), z.string())),\n})\nexport type PageChronologicalDataInsightRecordPayload = z.infer<\n    typeof PageChronologicalDataInsightRecordPayloadSchema\n>\nconst PageChronologicalDataInsightRecordSchema = z.strictObject({\n    ...ChronologicalRecordBaseShape,\n    ...PageChronologicalDataInsightRecordPayloadSchema.shape,\n})\nexport type PageChronologicalDataInsightRecord = z.infer<\n    typeof PageChronologicalDataInsightRecordSchema\n>\n\n// Article\n\nconst PageChronologicalArticleRecordPayloadSchema = z.strictObject({\n    ...LinkedAttachmentsShape,\n    ...ImageAttachmentShape,\n    type: z.literal(OwidGdocType.Article),\n    latestType: z.literal(\"article\"),\n    featuredImage: z.optional(z.string()),\n    latestFeedFeaturedImage: z.optional(z.string()),\n    latestFeedExcerpt: z.optional(OwidEnrichedGdocBlocksSchema),\n})\nexport type PageChronologicalArticleRecordPayload = z.infer<\n    typeof PageChronologicalArticleRecordPayloadSchema\n>\nconst PageChronologicalArticleRecordSchema = z.strictObject({\n    ...ChronologicalRecordBaseShape,\n    ...PageChronologicalArticleRecordPayloadSchema.shape,\n})\nexport type PageChronologicalArticleRecord = z.infer<\n    typeof PageChronologicalArticleRecordSchema\n>\n\n// Announcement\n\nconst PageChronologicalAnnouncementRecordPayloadSchema = z.strictObject({\n    ...LinkedAttachmentsShape,\n    ...ImageAttachmentShape,\n    type: z.literal(OwidGdocType.Announcement),\n    latestType: z.enum(ANNOUNCEMENT_LATEST_TYPES),\n    body: OwidEnrichedGdocBlocksSchema,\n    linkedAuthors: z.optional(\n        castSchemaOutput<LinkedAuthor[]>(z.array(z.any()))\n    ),\n    authorRoles: z.optional(z.record(z.string(), z.string())),\n})\nexport type PageChronologicalAnnouncementRecordPayload = z.infer<\n    typeof PageChronologicalAnnouncementRecordPayloadSchema\n>\nconst PageChronologicalAnnouncementRecordSchema = z.strictObject({\n    ...ChronologicalRecordBaseShape,\n    ...PageChronologicalAnnouncementRecordPayloadSchema.shape,\n})\nexport type PageChronologicalAnnouncementRecord = z.infer<\n    typeof PageChronologicalAnnouncementRecordSchema\n>\n\n// Topic page\n\nconst PageChronologicalTopicPageRecordPayloadSchema = z.strictObject({\n    type: z.literal(OwidGdocType.TopicPage),\n})\nexport type PageChronologicalTopicPageRecordPayload = z.infer<\n    typeof PageChronologicalTopicPageRecordPayloadSchema\n>\nconst PageChronologicalTopicPageRecordSchema = z.strictObject({\n    ...ChronologicalRecordBaseShape,\n    ...PageChronologicalTopicPageRecordPayloadSchema.shape,\n})\nexport type PageChronologicalTopicPageRecord = z.infer<\n    typeof PageChronologicalTopicPageRecordSchema\n>\n\n// Linear topic page\n\nconst PageChronologicalLinearTopicPageRecordPayloadSchema = z.strictObject({\n    type: z.literal(OwidGdocType.LinearTopicPage),\n})\nexport type PageChronologicalLinearTopicPageRecordPayload = z.infer<\n    typeof PageChronologicalLinearTopicPageRecordPayloadSchema\n>\nconst PageChronologicalLinearTopicPageRecordSchema = z.strictObject({\n    ...ChronologicalRecordBaseShape,\n    ...PageChronologicalLinearTopicPageRecordPayloadSchema.shape,\n})\nexport type PageChronologicalLinearTopicPageRecord = z.infer<\n    typeof PageChronologicalLinearTopicPageRecordSchema\n>\n\n/* Chronological record unions */\n\n// Lightweight record for the chronological pages index (one per page, no\n// chunked content). Strict objects reject unknown keys, so fields from another\n// variant fail validation instead of being silently stripped before indexing.\nexport const PageChronologicalRecordSchema = z.discriminatedUnion(\"type\", [\n    PageChronologicalDataInsightRecordSchema,\n    PageChronologicalArticleRecordSchema,\n    PageChronologicalAnnouncementRecordSchema,\n    PageChronologicalTopicPageRecordSchema,\n    PageChronologicalLinearTopicPageRecordSchema,\n])\n\nexport type PageChronologicalRecord = z.infer<\n    typeof PageChronologicalRecordSchema\n>\n\nexport type LatestPageChronologicalRecord =\n    | PageChronologicalArticleRecord\n    | PageChronologicalDataInsightRecord\n    | PageChronologicalAnnouncementRecord\n\nexport type PageChronologicalRecordVariantPayload =\n    | PageChronologicalDataInsightRecordPayload\n    | PageChronologicalArticleRecordPayload\n    | PageChronologicalAnnouncementRecordPayload\n    | PageChronologicalTopicPageRecordPayload\n    | PageChronologicalLinearTopicPageRecordPayload\n\nexport type PageChronologicalLinkedAttachments = Pick<\n    PageChronologicalArticleRecord,\n    \"linkedCharts\" | \"linkedDocuments\"\n>\n","import { OwidGdocType } from \"../gdocTypes/Gdoc.js\"\nimport { GrapherTabName } from \"../grapherTypes/GrapherTypes.js\"\nimport * as z from \"zod/mini\"\n\n// Structural copies of algoliasearch's HighlightResultOption and\n// SnippetResultOption. This package doesn't declare algoliasearch as a\n// dependency (and downstream packages that bundle these types shouldn't have\n// to either), so the two small interfaces are inlined instead of imported.\ntype AlgoliaMatchLevel = \"none\" | \"partial\" | \"full\"\n\ntype HighlightResultOption = {\n    /** Highlighted attribute value, including HTML tags. */\n    value: string\n    matchLevel: AlgoliaMatchLevel\n    /** List of matched words from the search query. */\n    matchedWords: Array<string>\n    /** Whether the entire attribute value is highlighted. */\n    fullyHighlighted?: boolean | undefined\n}\n\ntype SnippetResultOption = {\n    /** Highlighted attribute value, including HTML tags. */\n    value: string\n    matchLevel: AlgoliaMatchLevel\n}\n\nexport const PagesIndexRecordSchema = z.object({\n    objectID: z.string(),\n    importance: z.number(),\n    type: z.enum(OwidGdocType),\n    slug: z.string(),\n    // Full path to the record's page (e.g. `/data-insights/foo` vs `/foo`).\n    // Used for `attributeForDistinct` instead of `slug`, since a data\n    // insight and an article (or other gdoc) can share the same bare slug\n    // while still resolving to different pages.\n    path: z.string(),\n    title: z.string(),\n    content: z.string(),\n    views_7d: z.number(),\n    score: z.number(),\n    excerpt: z.optional(z.string()),\n    excerptLong: z.optional(z.array(z.string())),\n    authors: z.optional(z.array(z.string())),\n    date: z.optional(z.string()),\n    modifiedDate: z.optional(z.string()),\n    tags: z.optional(z.array(z.string())),\n    thumbnailUrl: z.string(),\n    availableEntities: z.optional(z.array(z.string())),\n})\n\nexport type PageRecord = z.infer<typeof PagesIndexRecordSchema>\n\nexport const PagesIndexRecordsResponseSchema = z.object({\n    records: z.array(PagesIndexRecordSchema),\n    count: z.number(),\n    message: z.optional(z.string()),\n})\n\nexport type PagesIndexRecordsResponse = z.infer<\n    typeof PagesIndexRecordsResponseSchema\n>\n\nexport enum ChartRecordType {\n    Chart = \"chart\",\n    ExplorerView = \"explorerView\",\n    MultiDimView = \"multiDimView\",\n}\n\nexport enum ExplorerType {\n    Grapher = \"grapher\",\n    Indicator = \"indicator\",\n    Csv = \"csv\",\n}\n\nexport interface ChartRecord {\n    type: ChartRecordType\n    objectID: string\n    chartId: number\n    chartConfigId?: string\n    slug: string\n    queryParams?: string\n    title: string\n    containerTitle?: string\n    subtitle: string | undefined\n    variantName: string\n    titleVariant?: string\n    availableTabs: GrapherTabName[]\n    keyChartForTags: string[]\n    tags: string[]\n    availableEntities: string[]\n    /** ETL namespace/provider of the variables used in this chart (e.g., \"who\", \"faostat\") */\n    datasetNamespaces: string[]\n    /** ETL version dates of the variables used in this chart (e.g., \"2024-08-06\") */\n    datasetVersions: string[]\n    /** ETL dataset product names of the variables used in this chart (e.g., \"ghe\", \"faostat_tcl\") */\n    datasetProducts: string[]\n    /** Data producers of the variables used in this chart (e.g., \"World Bank\") */\n    datasetProducers: string[]\n    /**\n     * Only present for income group-specific FMs: availableEntities before it gets filtered down.\n     * Without this, searching for charts with data for \"Uganda\" OR \"United States\" would return\n     * the FM version of the chart that only has Uganda in its available entities, and thus we\n     * wouldn't plot the data for the US, even though the chart has data for the US.\n     */\n    originalAvailableEntities?: string[]\n    /**\n     * Also only set for FMs: used so that we can filter out income group-specific FMs on a plain data catalog view.\n     */\n    isIncomeGroupSpecificFM: boolean\n    isFM: boolean\n    publishedAt: string\n    updatedAt: string\n    numDimensions: number\n    titleLength: number\n    numRelatedArticles: number\n    views_7d: number\n    score: number\n    // we set attributeForDistinct on this, so we can use it to deduplicate\n    // when we have multiple records for the same chart (e.g. with featured metrics)\n    id: string\n}\n\nexport enum SearchIndexName {\n    Pages = \"pages\",\n    PagesChronological = \"pages-chronological\",\n    ExplorerViewsMdimViewsAndCharts = \"explorer-views-and-charts\",\n}\n\ninterface BaseSearchChartHit {\n    title: string\n    containerTitle?: string\n    slug: string\n    availableEntities: string[]\n    originalAvailableEntities?: string[]\n    objectID: string\n    variantName?: string\n    titleVariant?: string\n    subtitle?: string\n    availableTabs: GrapherTabName[]\n    /**\n     * Required by react-instantsearch's `<Highlight>`/`<Snippet>` components:\n     * their `hit` prop must satisfy instantsearch.js's `Hit<BaseHit>` type,\n     * which mandates `__position` (a hit's 1-based rank within an InstantSearch\n     * result set). We query Algolia with the algoliasearch lite client instead\n     * of letting InstantSearch do the fetching, so this is never populated at\n     * runtime — it exists purely to satisfy those components' types. Kept only\n     * on the hit types we actually pass to them.\n     */\n    __position: number\n    _highlightResult?: Record<string, HighlightResultOption>\n    _snippetResult?: Record<string, SnippetResultOption>\n}\n\ntype SearchChartViewHit = BaseSearchChartHit & {\n    type: ChartRecordType.Chart\n}\n\ntype SearchExplorerViewHit = BaseSearchChartHit & {\n    type: ChartRecordType.ExplorerView\n    explorerType: ExplorerType\n    queryParams: string\n}\n\ntype SearchMultiDimViewHit = BaseSearchChartHit & {\n    type: ChartRecordType.MultiDimView\n    queryParams: string\n    chartConfigId: string\n}\n\n/**\n * This is the type for the hits that we get back from algolia when we search\n * response.results[0].hits is an array of these\n */\nexport type SearchChartHit =\n    | SearchChartViewHit\n    | SearchExplorerViewHit\n    | SearchMultiDimViewHit\n\nexport interface SearchChartHitComponentProps {\n    hit: SearchChartHit\n    selectedRegionNames?: string[] | undefined\n    // Search uses a global onClick handler to track analytics\n    // But the data catalog passes a function to this component explicitly\n    onClick: (vizType: string | null) => void\n}\n\nexport type SearchChartHitComponentVariant = \"large\" | \"medium\" | \"small\"\n\nexport type ScoredFilter = Filter & {\n    name: string\n    score: number\n}\n\nexport type ScoredFilterPositioned = ScoredFilter & {\n    positions: number[]\n}\n\nexport type DataInsightHit = {\n    title: string\n    thumbnailUrl: string\n    date: string\n    slug: string\n    type: OwidGdocType.DataInsight\n    objectID: string\n}\n\nexport type FlatArticleHit = {\n    title: string\n    thumbnailUrl: string\n    date: string\n    slug: string\n    type: OwidGdocType.Article | OwidGdocType.AboutPage\n    content?: string\n    excerpt?: string\n    authors: string[]\n    objectID: string\n    // Required by react-instantsearch's `<Snippet>`; see the note on\n    // `BaseSearchChartHit.__position`.\n    __position: number\n}\n\nexport type StackedArticleHit = {\n    title: string\n    thumbnailUrl: string\n    slug: string\n    type: OwidGdocType.Article | OwidGdocType.AboutPage\n    excerpt: string\n    objectID: string\n}\n\nexport type TopicPageHit = {\n    title: string\n    type: OwidGdocType.TopicPage | OwidGdocType.LinearTopicPage\n    slug: string\n    excerpt: string\n    excerptLong?: string[]\n    objectID: string\n}\n\nexport type ProfileHit = {\n    title: string\n    thumbnailUrl: string\n    slug: string\n    excerpt: string\n    type: OwidGdocType.Profile\n    availableEntities: string[]\n    objectID: string\n}\n\nexport enum FilterType {\n    COUNTRY = \"country\",\n    TOPIC = \"topic\",\n    QUERY = \"query\",\n    DATASET_PRODUCT = \"datasetProduct\",\n    DATASET_NAMESPACE = \"datasetNamespace\",\n    DATASET_VERSION = \"datasetVersion\",\n    DATASET_PRODUCER = \"datasetProducer\",\n}\n\nexport enum SearchResultType {\n    ALL = \"all\",\n    DATA = \"data\",\n    WRITING = \"writing\",\n}\n\nexport type Filter = {\n    type: FilterType\n    name: string\n}\n\nexport enum SearchUrlParam {\n    COUNTRY = \"countries\",\n    TOPIC = \"topics\",\n    QUERY = \"q\",\n    REQUIRE_ALL_COUNTRIES = \"requireAllCountries\",\n    RESULT_TYPE = \"resultType\",\n    DATASET_PRODUCT = \"datasetProducts\",\n    DATASET_NAMESPACE = \"datasetNamespaces\",\n    DATASET_VERSION = \"datasetVersions\",\n    DATASET_PRODUCER = \"datasetProducers\",\n}\n\nexport type SearchState = Readonly<{\n    query: string\n    filters: Filter[]\n    requireAllCountries: boolean\n    resultType: SearchResultType\n}>\n\nexport interface SearchActions {\n    setQuery: (query: string) => void\n    addCountry: (country: string) => void\n    addCountryAndSetQuery: (country: string, query: string) => void\n    removeCountry: (country: string) => void\n    setTopic: (topic: string) => void\n    setTopicAndClearQuery: (topic: string) => void\n    removeTopic: (topic: string) => void\n    addFilter: (filter: Filter) => void\n    removeFilter: (filter: Filter) => void\n    toggleRequireAllCountries: () => void\n    setResultType: (resultType: SearchResultType) => void\n    reset: () => void\n}\n\nexport enum SearchTopicType {\n    Topic = \"topic\",\n    Area = \"area\",\n}\n\nexport interface TemplateConfig {\n    resultType: SearchResultType\n    topicType: SearchTopicType | null\n    hasCountry: boolean\n    hasQuery: boolean\n    hasDatasetFilters: boolean\n}\n\nexport type SearchFacetFilters = (string | string[])[]\n\nexport type SynonymMap = Map<string, string[]>\n\nexport interface WordPositioned {\n    word: string\n    position: number\n}\n\nexport type Ngram = WordPositioned[]\n\nexport type ChartViewsMap = {\n    byConfigId: Map<string, number>\n    byGrapherSlug: Map<string, number>\n}\n\n/**\n * Context object containing shared enrichment data needed for Algolia indexing of chart, explorer and multi-dim views.\n */\nexport interface IndexingContext {\n    /**\n     * Topic tag hierarchies for computing parent topic tags.\n     * Maps tag name -> array of parent tag paths (each path is an array of tags with id, name, slug).\n     */\n    topicHierarchies: Record<\n        string,\n        Array<Array<{ id: number; name: string; slug: string | null }>>\n    >\n    chartViewsMap: ChartViewsMap\n}\n\nexport type ChartsIndexingContext = IndexingContext & {\n    redirectsByChartId: Map<number, string[]>\n}\n\nexport type ExplorerIndexingContext = IndexingContext\n","/*\n * Vector utility class\n * Partly based on the Unity vector: https://docs.unity3d.com/ScriptReference/Vector2.html\n * Wraps the Victor library, mainly so we can do type hinting\n *\n * @project Our World In Data\n * @author  Jaiden Mispy\n * @created 2017-03-15\n */\n\nexport interface Point {\n    x: number\n    y: number\n}\n\nexport class PointVector {\n    x: number\n    y: number\n\n    constructor(x: number, y: number) {\n        this.x = x\n        this.y = y\n    }\n\n    subtract(v: PointVector): PointVector {\n        return new PointVector(this.x - v.x, this.y - v.y)\n    }\n\n    add(v: PointVector): PointVector {\n        return new PointVector(this.x + v.x, this.y + v.y)\n    }\n\n    times(n: number): PointVector {\n        return new PointVector(this.x * n, this.y * n)\n    }\n\n    get magnitude(): number {\n        return Math.sqrt(this.x ** 2 + this.y ** 2)\n    }\n\n    normalize(): PointVector {\n        const magnitude = this.magnitude\n        if (magnitude > 1e-5)\n            return new PointVector(this.x / magnitude, this.y / magnitude)\n\n        return new PointVector(0, 0)\n    }\n\n    normals(): [PointVector, PointVector] {\n        return [\n            new PointVector(-this.y, this.x),\n            new PointVector(this.y, -this.x),\n        ]\n    }\n\n    toString(): string {\n        return `PointVector<${this.x}, ${this.y}>`\n    }\n\n    static up = new PointVector(0, -1)\n    static zero = new PointVector(0, 0)\n\n    static distanceSq(a: PointVector, b: PointVector): number {\n        return (b.x - a.x) ** 2 + (b.y - a.y) ** 2\n    }\n\n    static distance(a: PointVector, b: PointVector): number {\n        return Math.sqrt(PointVector.distanceSq(a, b))\n    }\n\n    static angle(a: PointVector, b: PointVector): number {\n        return (\n            Math.acos(\n                Math.max(\n                    Math.min(PointVector.dot(a.normalize(), b.normalize()), 1),\n                    -1\n                )\n            ) * 57.29578 // this is 180/pi, used to convert radians to degrees\n        )\n    }\n\n    private static dot(lhs: PointVector, rhs: PointVector): number {\n        return lhs.x * rhs.x + lhs.y * rhs.y\n    }\n\n    // From: http://stackoverflow.com/a/1501725/1983739\n    static distanceFromPointToLineSegmentSq(\n        p: PointVector,\n        v: PointVector, // start of line segment\n        w: PointVector // end of line segment\n    ): number {\n        const l2 = PointVector.distanceSq(v, w)\n        if (l2 === 0) return PointVector.distanceSq(p, v)\n\n        let t = ((p.x - v.x) * (w.x - v.x) + (p.y - v.y) * (w.y - v.y)) / l2\n        t = Math.max(0, Math.min(1, t))\n        return PointVector.distanceSq(\n            p,\n            new PointVector(v.x + t * (w.x - v.x), v.y + t * (w.y - v.y))\n        )\n    }\n}\n","const t=Symbol.for(\"@ts-pattern/matcher\"),e=Symbol.for(\"@ts-pattern/isVariadic\"),n=\"@ts-pattern/anonymous-select-key\",r=t=>Boolean(t&&\"object\"==typeof t),i=e=>e&&!!e[t],o=(n,s,c)=>{if(i(n)){const e=n[t](),{matched:r,selections:i}=e.match(s);return r&&i&&Object.keys(i).forEach(t=>c(t,i[t])),r}if(r(n)){if(!r(s))return!1;if(Array.isArray(n)){if(!Array.isArray(s))return!1;let t=[],r=[],a=[];for(const o of n.keys()){const s=n[o];i(s)&&s[e]?a.push(s):a.length?r.push(s):t.push(s)}if(a.length){if(a.length>1)throw new Error(\"Pattern error: Using `...P.array(...)` several times in a single pattern is not allowed.\");if(s.length<t.length+r.length)return!1;const e=s.slice(0,t.length),n=0===r.length?[]:s.slice(-r.length),i=s.slice(t.length,0===r.length?Infinity:-r.length);return t.every((t,n)=>o(t,e[n],c))&&r.every((t,e)=>o(t,n[e],c))&&(0===a.length||o(a[0],i,c))}return n.length===s.length&&n.every((t,e)=>o(t,s[e],c))}return Reflect.ownKeys(n).every(e=>{const r=n[e];return(e in s||i(a=r)&&\"optional\"===a[t]().matcherType)&&o(r,s[e],c);var a})}return Object.is(s,n)},s=e=>{var n,o,a;return r(e)?i(e)?null!=(n=null==(o=(a=e[t]()).getSelectionKeys)?void 0:o.call(a))?n:[]:Array.isArray(e)?c(e,s):c(Object.values(e),s):[]},c=(t,e)=>t.reduce((t,n)=>t.concat(e(n)),[]);function a(...t){if(1===t.length){const[e]=t;return t=>o(e,t,()=>{})}if(2===t.length){const[e,n]=t;return o(e,n,()=>{})}throw new Error(`isMatching wasn't given the right number of arguments: expected 1 or 2, received ${t.length}.`)}function u(t){return Object.assign(t,{optional:()=>l(t),and:e=>m(t,e),or:e=>d(t,e),select:e=>void 0===e?y(t):y(e,t)})}function h(t){return Object.assign((t=>Object.assign(t,{[Symbol.iterator](){let n=0;const r=[{value:Object.assign(t,{[e]:!0}),done:!1},{done:!0,value:void 0}];return{next:()=>{var t;return null!=(t=r[n++])?t:r.at(-1)}}}}))(t),{optional:()=>h(l(t)),select:e=>h(void 0===e?y(t):y(e,t))})}function l(e){return u({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return void 0===t?(s(e).forEach(t=>r(t,void 0)),{matched:!0,selections:n}):{matched:o(e,t,r),selections:n}},getSelectionKeys:()=>s(e),matcherType:\"optional\"})})}const f=(t,e)=>{for(const n of t)if(!e(n))return!1;return!0},g=(t,e)=>{for(const[n,r]of t.entries())if(!e(r,n))return!1;return!0};function m(...e){return u({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return{matched:e.every(e=>o(e,t,r)),selections:n}},getSelectionKeys:()=>c(e,s),matcherType:\"and\"})})}function d(...e){return u({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return c(e,s).forEach(t=>r(t,void 0)),{matched:e.some(e=>o(e,t,r)),selections:n}},getSelectionKeys:()=>c(e,s),matcherType:\"or\"})})}function p(e){return{[t]:()=>({match:t=>({matched:Boolean(e(t))})})}}function y(...e){const r=\"string\"==typeof e[0]?e[0]:void 0,i=2===e.length?e[1]:\"string\"==typeof e[0]?void 0:e[0];return u({[t]:()=>({match:t=>{let e={[null!=r?r:n]:t};return{matched:void 0===i||o(i,t,(t,n)=>{e[t]=n}),selections:e}},getSelectionKeys:()=>[null!=r?r:n].concat(void 0===i?[]:s(i))})})}function v(t){return\"number\"==typeof t}function b(t){return\"string\"==typeof t}function w(t){return\"bigint\"==typeof t}const S=u(p(function(t){return!0})),O=S,j=t=>Object.assign(u(t),{startsWith:e=>{return j(m(t,(n=e,p(t=>b(t)&&t.startsWith(n)))));var n},endsWith:e=>{return j(m(t,(n=e,p(t=>b(t)&&t.endsWith(n)))));var n},minLength:e=>j(m(t,(t=>p(e=>b(e)&&e.length>=t))(e))),length:e=>j(m(t,(t=>p(e=>b(e)&&e.length===t))(e))),maxLength:e=>j(m(t,(t=>p(e=>b(e)&&e.length<=t))(e))),includes:e=>{return j(m(t,(n=e,p(t=>b(t)&&t.includes(n)))));var n},regex:e=>{return j(m(t,(n=e,p(t=>b(t)&&Boolean(t.match(n))))));var n}}),K=j(p(b)),x=t=>Object.assign(u(t),{between:(e,n)=>x(m(t,((t,e)=>p(n=>v(n)&&t<=n&&e>=n))(e,n))),lt:e=>x(m(t,(t=>p(e=>v(e)&&e<t))(e))),gt:e=>x(m(t,(t=>p(e=>v(e)&&e>t))(e))),lte:e=>x(m(t,(t=>p(e=>v(e)&&e<=t))(e))),gte:e=>x(m(t,(t=>p(e=>v(e)&&e>=t))(e))),int:()=>x(m(t,p(t=>v(t)&&Number.isInteger(t)))),finite:()=>x(m(t,p(t=>v(t)&&Number.isFinite(t)))),positive:()=>x(m(t,p(t=>v(t)&&t>0))),negative:()=>x(m(t,p(t=>v(t)&&t<0)))}),E=x(p(v)),A=t=>Object.assign(u(t),{between:(e,n)=>A(m(t,((t,e)=>p(n=>w(n)&&t<=n&&e>=n))(e,n))),lt:e=>A(m(t,(t=>p(e=>w(e)&&e<t))(e))),gt:e=>A(m(t,(t=>p(e=>w(e)&&e>t))(e))),lte:e=>A(m(t,(t=>p(e=>w(e)&&e<=t))(e))),gte:e=>A(m(t,(t=>p(e=>w(e)&&e>=t))(e))),positive:()=>A(m(t,p(t=>w(t)&&t>0))),negative:()=>A(m(t,p(t=>w(t)&&t<0)))}),P=A(p(w)),T=u(p(function(t){return\"boolean\"==typeof t})),B=u(p(function(t){return\"symbol\"==typeof t})),_=u(p(function(t){return null==t})),k=u(p(function(t){return null!=t}));var N={__proto__:null,matcher:t,optional:l,array:function(...e){return h({[t]:()=>({match:t=>{if(!Array.isArray(t))return{matched:!1};if(0===e.length)return{matched:!0};const n=e[0];let r={};if(0===t.length)return s(n).forEach(t=>{r[t]=[]}),{matched:!0,selections:r};const i=(t,e)=>{r[t]=(r[t]||[]).concat([e])};return{matched:t.every(t=>o(n,t,i)),selections:r}},getSelectionKeys:()=>0===e.length?[]:s(e[0])})})},set:function(...e){return u({[t]:()=>({match:t=>{if(!(t instanceof Set))return{matched:!1};let n={};if(0===t.size)return{matched:!0,selections:n};if(0===e.length)return{matched:!0};const r=(t,e)=>{n[t]=(n[t]||[]).concat([e])},i=e[0];return{matched:f(t,t=>o(i,t,r)),selections:n}},getSelectionKeys:()=>0===e.length?[]:s(e[0])})})},map:function(...e){return u({[t]:()=>({match:t=>{if(!(t instanceof Map))return{matched:!1};let n={};if(0===t.size)return{matched:!0,selections:n};const r=(t,e)=>{n[t]=(n[t]||[]).concat([e])};if(0===e.length)return{matched:!0};var i;if(1===e.length)throw new Error(`\\`P.map\\` wasn't given enough arguments. Expected (key, value), received ${null==(i=e[0])?void 0:i.toString()}`);const[s,c]=e;return{matched:g(t,(t,e)=>{const n=o(s,e,r),i=o(c,t,r);return n&&i}),selections:n}},getSelectionKeys:()=>0===e.length?[]:[...s(e[0]),...s(e[1])]})})},intersection:m,union:d,not:function(e){return u({[t]:()=>({match:t=>({matched:!o(e,t,()=>{})}),getSelectionKeys:()=>[],matcherType:\"not\"})})},when:p,select:y,any:S,_:O,string:K,number:E,bigint:P,boolean:T,symbol:B,nullish:_,nonNullable:k,instanceOf:function(t){return u(p(function(t){return e=>e instanceof t}(t)))},shape:function(t){return u(p(a(t)))}};class W extends Error{constructor(t){let e;try{e=JSON.stringify(t)}catch(n){e=t}super(`Pattern matching error: no pattern matches value ${e}`),this.input=void 0,this.input=t}}const $={matched:!1,value:void 0};function z(t){return new I(t,$)}class I{constructor(t,e){this.input=void 0,this.state=void 0,this.input=t,this.state=e}with(...t){if(this.state.matched)return this;const e=t[t.length-1],r=[t[0]];let i;3===t.length&&\"function\"==typeof t[1]?i=t[1]:t.length>2&&r.push(...t.slice(1,t.length-1));let s=!1,c={};const a=(t,e)=>{s=!0,c[t]=e},u=!r.some(t=>o(t,this.input,a))||i&&!Boolean(i(this.input))?$:{matched:!0,value:e(s?n in c?c[n]:c:this.input,this.input)};return new I(this.input,u)}when(t,e){if(this.state.matched)return this;const n=Boolean(t(this.input));return new I(this.input,n?{matched:!0,value:e(this.input,this.input)}:$)}otherwise(t){return this.state.matched?this.state.value:t(this.input)}exhaustive(t=L){return this.state.matched?this.state.value:t(this.input)}run(){return this.exhaustive()}returnType(){return this}narrow(){return this}}function L(t){throw new W(t)}export{W as NonExhaustiveError,N as P,N as Pattern,a as isMatching,z as match};\n//# sourceMappingURL=index.js.map\n","const CAMELCASE_REGEXP_PATTERN = '(?:[a-z](?=[A-Z])|[A-Z](?=[A-Z][a-z]))';\nfunction replace(value, dictionary) {\n    for (let index = 0, length = value.length; index < length; index++) {\n        const char = value[index];\n        const replacement = dictionary[char] && String(dictionary[char]);\n        if (replacement !== undefined) {\n            value = value.slice(0, index) + replacement + value.slice(index + 1);\n            const addedCharsCount = replacement.length - 1;\n            index += addedCharsCount;\n            length += addedCharsCount;\n        }\n    }\n    return value;\n}\n\nconst LOWERCASE_TRANSFORMER = (fragments, separator) => {\n    return fragments.join(separator).toLowerCase();\n};\nconst SENTENCECASE_TRANSFORMER = (fragments, separator) => {\n    const sentence = fragments.join(separator);\n    return sentence.charAt(0).toUpperCase() + sentence.slice(1).toLowerCase();\n};\nconst TITLECASE_TRANSFORMER = (fragments, separator) => {\n    const buffer = [];\n    for (let index = 0; index < fragments.length; index++) {\n        buffer.push(fragments[index].charAt(0).toUpperCase() +\n            fragments[index].slice(1).toLowerCase());\n    }\n    return buffer.join(separator);\n};\nconst UPPERCASE_TRANSFORMER = (fragments, separator) => {\n    return fragments.join(separator).toUpperCase();\n};\n\n// eslint-disable-next-line no-misleading-character-class\nconst COMBINING_CHARS = /[\\u0300-\\u036F\\u1AB0-\\u1AFF\\u1DC0-\\u1DFF]+/g;\nconst CONVERT = /[A-Za-z\\d]+/g;\nconst CONVERT_CAMELCASE = new RegExp('[A-Za-z\\\\d]*?' + CAMELCASE_REGEXP_PATTERN + '|[A-Za-z\\\\d]+', 'g');\nfunction convert(value, { camelCase = true, dictionary, separator = '-', transformer = LOWERCASE_TRANSFORMER, } = {}) {\n    const fragments = (dictionary ? replace(String(value), dictionary) : String(value))\n        .normalize('NFKD')\n        .replace(COMBINING_CHARS, '')\n        .match(camelCase ? CONVERT_CAMELCASE : CONVERT);\n    if (!fragments) {\n        return '';\n    }\n    return transformer\n        ? transformer(fragments, String(separator))\n        : fragments.join(String(separator));\n}\n\nconst REVERT = /[^-._~!$&'()*+,;=]+/g;\nconst REVERT_CAMELCASE = new RegExp(\"[^-._~!$&'()*+,;=]*?\" + CAMELCASE_REGEXP_PATTERN + \"|[^-._~!$&'()*+,;=]+\", 'g');\nconst REVERT_CAMELCASE_ONLY = new RegExp('.*?' + CAMELCASE_REGEXP_PATTERN + '|.+', 'g');\nfunction revert(value, { camelCase = false, separator = null, transformer = null, } = {}) {\n    let fragments;\n    value = String(value);\n    /* Determine which method will be used to split the slug */\n    if (separator === '') {\n        fragments = camelCase ? value.match(REVERT_CAMELCASE_ONLY) : [value];\n    }\n    else if (typeof separator === 'string') {\n        fragments = value.split(separator);\n    }\n    else {\n        fragments = value.match(camelCase ? REVERT_CAMELCASE : REVERT);\n    }\n    if (!fragments) {\n        return '';\n    }\n    return transformer ? transformer(fragments, ' ') : fragments.join(' ');\n}\n\nexport { LOWERCASE_TRANSFORMER, SENTENCECASE_TRANSFORMER, TITLECASE_TRANSFORMER, UPPERCASE_TRANSFORMER, convert, convert as default, revert };\n//# sourceMappingURL=index.mjs.map\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport { extent } from \"d3-array\"\nimport dayjs from \"./dayjs.js\"\nimport { formatLocale, FormatLocaleObject } from \"d3-format\"\nimport striptags from \"striptags\"\nimport {\n    ANNOUNCEMENT_LATEST_TYPES,\n    type AnnouncementLatestType,\n    type Integer,\n    IDEAL_PLOT_ASPECT_RATIO,\n    EPOCH_DATE,\n    SortOrder,\n    TimeBoundValue,\n    ScaleType,\n    VerticalAlign,\n    type GridParameters,\n    HorizontalAlign,\n    type OwidEnrichedGdocBlock,\n    type EnrichedBlockKeyInsightsSlide,\n    type EnrichedTopicPageIntroRelatedTopic,\n    type EnrichedTopicPageIntroDownloadButton,\n    type EnrichedHybridLink,\n    type OwidGdocPostInterface,\n    type OwidGdocDataInsightInterface,\n    type ChronologicalGdoc,\n    type LatestFeedGdoc,\n    type OwidGdocAuthorInterface,\n    type OwidGdoc,\n    OwidGdocType,\n    type OwidGdocErrorMessage,\n    OwidGdocErrorMessageType,\n    type OwidGdocPostContent,\n    type OwidGdocJSON,\n    type Span,\n    UserCountryInformation,\n    Time,\n    TimeBound,\n    TagGraphRoot,\n    TagGraphRootName,\n    TagGraphNode,\n    GrapherInterface,\n    DimensionProperty,\n    GRAPHER_CHART_TYPES,\n    DbPlainTag,\n    AssetMap,\n    OwidGdocAnnouncementInterface,\n    OwidGdocAboutInterface,\n    OwidGdocFeaturedVizInterface,\n    OwidGdocHomepageInterface,\n    PrimitiveType,\n    GrapherTrendArrowDirection,\n    TocHeadingWithSupertitle,\n    TocSidebarSection,\n    ALL_CHARTS_ID,\n    FEATURED_DATA_INSIGHTS_ID,\n    EXPLORE_DATA_SECTION_DEFAULT_TITLE,\n    EXPLORE_DATA_SECTION_ID,\n    FEATURED_METRICS_ID,\n    RESEARCH_AND_WRITING_ID,\n    RESEARCH_AND_WRITING_DEFAULT_HEADING,\n    CHRONOLOGICAL_INDEX_TYPES,\n    LATEST_FEED_TYPES,\n    SUB_YEARLY_TIME_INTERVALS,\n    TIME_INTERVALS,\n    TimeInterval,\n    type SubYearlyTimeInterval,\n    type OwidVariableDisplayConfigInterface,\n} from \"@ourworldindata/types\"\nimport { Point, PointVector } from \"./PointVector.js\"\nimport * as React from \"react\"\nimport { match, P } from \"ts-pattern\"\nimport urlSlug from \"url-slug\"\n\nexport type NoUndefinedValues<T> = {\n    [P in keyof T]: Required<NonNullable<T[P]>>\n}\n\ntype OptionalKeysOf<T> = Exclude<\n    {\n        [K in keyof T]: T extends Record<K, T[K]> ? never : K\n    }[keyof T],\n    undefined\n>\n\ntype AllowUndefinedValues<T> = {\n    [K in keyof T]: T[K] | undefined\n}\n\n/**\n * This generic makes every (top-level) optional property in an interface required,\n * but with `undefined` as an allowed value.\n *\n * For example:\n *     AllKeysRequired<{\n *         a: number\n *         b?: number\n *     }>\n * becomes:\n *     {\n *         a: number\n *         b: number | undefined\n *     }\n */\n// This was tricky to construct.\n// It seems like the initial, elegant approach is:\n//\n// export type AllKeysRequired<T> = {\n//     [K in keyof T]-?: T extends Record<K, T[K]> ? T[K] : T[K] | undefined\n// }\n//\n// But TypeScript will omit `undefined` from the value type whenever you\n// make the key required with `-?`. So we have this ugly workaround.\n//\n// -@danielgavrilov, 2022-02-15\nexport type AllKeysRequired<T> = AllowUndefinedValues<\n    Required<Pick<T, OptionalKeysOf<T>>>\n> &\n    Exclude<T, OptionalKeysOf<T>>\n\nexport type PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport type RequiredBy<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>\n\n// doesn't do anything fancy, but makes it a bit more readable by skipping one layer of angle brackets:\n// PartialRecord<A, B> = Partial<Record<A, B>>\nexport type PartialRecord<K extends keyof any, V> = Partial<Record<K, V>>\n\nexport type Pair<T> = [T, T]\n\n// d3 v6 changed the default minus sign used in d3-format to \"−\" (Unicode minus sign), which looks\n// nicer but can cause issues when copy-pasting values into a spreadsheet or script.\n// For that reason we change that back to a plain old hyphen.\n// See https://observablehq.com/@d3/d3v6-migration-guide#minus\nexport const createFormatter = (\n    currency: string = \"$\"\n): FormatLocaleObject[\"format\"] =>\n    formatLocale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        minus: \"-\",\n        currency: [currency, \"\"],\n    }).format\n\nconst getRootSVG = (\n    element: Element | SVGGraphicsElement | SVGSVGElement\n): SVGSVGElement | undefined => {\n    if (\"createSVGPoint\" in element) return element\n    if (\"ownerSVGElement\" in element)\n        return element.ownerSVGElement || undefined\n    return undefined\n}\n\nexport const getRelativeMouse = (\n    node: Element | SVGGraphicsElement | SVGSVGElement,\n    event:\n        | React.TouchEvent\n        | TouchEvent\n        | PointerEvent\n        | { clientX: number; clientY: number }\n): PointVector => {\n    // Touchend events have no active target touches, but changedTouches still\n    // contains the touch point that ended the gesture.\n    const eventOwner = checkIsTouchEvent(event)\n        ? (event.targetTouches[0] ?? event.changedTouches[0])\n        : event\n\n    if (!eventOwner) return new PointVector(0, 0)\n\n    const { clientX, clientY } = eventOwner\n\n    const svg = getRootSVG(node)\n    if (svg && \"getScreenCTM\" in node) {\n        const svgPoint = svg.createSVGPoint()\n        svgPoint.x = clientX\n        svgPoint.y = clientY\n        const point = svgPoint.matrixTransform(node.getScreenCTM()?.inverse())\n        return new PointVector(point.x, point.y)\n    }\n\n    const rect = node.getBoundingClientRect()\n    return new PointVector(\n        clientX - rect.left - node.clientLeft,\n        clientY - rect.top - node.clientTop\n    )\n}\n\n// Just a quick and dirty way to expose window.chart/explorer/etc for debugging. Last caller wins.\nexport const exposeInstanceOnWindow = (\n    component: unknown,\n    name = \"chart\",\n    alsoOnTopWindow?: boolean\n): void => {\n    if (typeof window === \"undefined\") return\n    const win = window as any\n    win[name] = component\n    if (alsoOnTopWindow && win !== win.top) win.top[name] = component\n}\n\n// Make an arbitrary string workable as a css class name\nexport const makeSafeForCSS = (name: string): string =>\n    name.replace(/[^a-z0-9]/g, (str) => {\n        const char = str.charCodeAt(0)\n        if (char === 32 || char === 45) return \"-\"\n        if (char === 95) return \"_\"\n        if (char >= 65 && char <= 90) return str\n        return \"__\" + (\"000\" + char.toString(16)).slice(-4)\n    })\n\nfunction makeSafeForFigma(name: string): string {\n    return name.replace(/\\s/g, \"-\")\n}\n\n/**\n * Make a human-readable string meant to be be used as the ID of a SVG chart\n * element. This is useful when a static chart is manually edited in a SVG\n * editor since SVG manipulation software like Figma often show the element's\n * id as its title.\n *\n * Note that these IDs are not meant to be used in CSS!\n */\nexport function makeFigmaId(...unsafeKeys: (string | undefined)[]): string {\n    return makeSafeForFigma(unsafeKeys.filter((key) => key).join(\"__\"))\n}\n\n// The epoch, parsed once (lazily) as a dayjs object and reused across the\n// codebase so we don't repeatedly re-parse the ISO string. Uses dayjs' UTC\n// mode, which forces dayjs to format in UTC time instead of local time, making\n// dates consistent no matter what timezone the user is in.\n//\n// Parsing is deferred via `lazy` rather than done at module load so the object\n// isn't created before the `timezone-mock` used in tests is registered (a dayjs\n// object backed by a native Date created outside the mock can't be cloned once\n// the mock is active).\n\nexport const epochDate = lazy(() => dayjs.utc(EPOCH_DATE))\n\n// The epoch as milliseconds since the Unix epoch, for plain date arithmetic\nconst epochTimestamp = lazy(() => epochDate().valueOf())\n\nconst MS_PER_DAY = 86_400_000\nexport const toStartOfDayUtc = (date: dayjs.Dayjs): dayjs.Dayjs =>\n    date.valueOf() % MS_PER_DAY === 0 ? date : date.utc().startOf(\"day\")\n\nexport function convertDaysSinceEpochToDate(dayAsYear: number): dayjs.Dayjs {\n    // Same as epochDate().add(dayAsYear, \"days\"), but faster!\n    return dayjs.utc(epochTimestamp() + Math.round(dayAsYear) * MS_PER_DAY)\n}\n\n// Inverse of convertDaysSinceEpochToDate.\nexport function convertDateToDaysSinceEpoch(date: dayjs.Dayjs): number {\n    return diffDatesInDays(date, epochDate())\n}\n\n/**\n * Like Date.UTC, but without its legacy quirk of mapping years 0–99 to\n * 1900–1999: plainUtcTimestamp(50, 2, 1) is 1 March of year 50, not of 1950.\n * Out-of-range months and days roll over, as with Date.UTC.\n */\nexport function plainUtcTimestamp(\n    year: number,\n    monthIndex: number, // 0-based\n    day = 1\n): number {\n    const date = new Date(0)\n    date.setUTCFullYear(year, monthIndex, day)\n    return date.getTime()\n}\n\nexport function formatDay(\n    dayAsYear: number,\n    options?: { format?: string }\n): string {\n    const format = options?.format ?? \"MMM D, YYYY\"\n    return convertDaysSinceEpochToDate(dayAsYear).format(format)\n}\n\n/**\n * Resolves the time interval of an indicator from its display config,\n * defaulting to `year` when not set.\n */\nexport function getTimeInterval(\n    display?: OwidVariableDisplayConfigInterface\n): TimeInterval {\n    return display?.timeInterval ?? TimeInterval.Year\n}\n\n/**\n * Whether the interval is finer than a year and therefore encoded as\n * days-since-epoch (day/week/month/quarter)\n */\nexport function isSubYearly(\n    interval: TimeInterval\n): interval is SubYearlyTimeInterval {\n    return SUB_YEARLY_TIME_INTERVALS.some((subYearly) => subYearly === interval)\n}\n\n/**\n * The finest interval that can represent every one of the given intervals'\n * times, e.g. `day` for day + month. Weeks start on ISO Mondays and\n * months/quarters on period starts, so those grids don't nest: a mix of them\n * falls back to `day`, the grid that contains every other.\n */\nexport function findFinestCommonTimeInterval(\n    intervals: TimeInterval[]\n): TimeInterval {\n    const finest =\n        TIME_INTERVALS.find((interval) => intervals.includes(interval)) ??\n        TimeInterval.Year\n    const mixesWeeksWithLongerPeriods =\n        finest === TimeInterval.Week &&\n        intervals.some(\n            (interval) =>\n                interval === TimeInterval.Month ||\n                interval === TimeInterval.Quarter\n        )\n    return mixesWeeksWithLongerPeriods ? TimeInterval.Day : finest\n}\n\n/**\n * Snap a time to the start of its interval, so indicators that pick different\n * representative days for the same period still align: month → first of the\n * month, quarter → first of the quarter, week → the ISO-week Monday, decade →\n * the decade's first year. Day and year are returned unchanged.\n */\nexport function snapToIntervalStart(\n    time: number,\n    interval: TimeInterval\n): number {\n    if (!Number.isFinite(time)) return time\n    // Plain arithmetic and a native Date instead of dayjs, since this runs\n    // once per data point\n    const day = Math.round(time)\n    switch (interval) {\n        case TimeInterval.Day:\n        case TimeInterval.Year:\n            return time\n        case TimeInterval.Week: {\n            // Our epoch is a Tuesday, i.e. one day after an ISO-week Monday.\n            // We need the +1 below to align the epoch with the ISO-week Monday.\n            const daysSinceMonday = positiveModulo(day + 1, 7)\n            return day - daysSinceMonday\n        }\n        case TimeInterval.Month:\n        case TimeInterval.Quarter: {\n            const date = new Date(epochTimestamp() + day * MS_PER_DAY)\n            // Set the day before the month so the month change can't overflow\n            date.setUTCDate(1)\n            if (interval === TimeInterval.Quarter) {\n                const month = date.getUTCMonth()\n                date.setUTCMonth(month - (month % 3))\n            }\n            return Math.round((date.getTime() - epochTimestamp()) / MS_PER_DAY)\n        }\n        case TimeInterval.Decade:\n            return time - positiveModulo(time, 10)\n    }\n}\n\n/**\n * Like `n % m`, but always in the range [0, m) for positive `m`, whereas\n * JavaScript's `%` takes the sign of `n` (e.g. `-2 % 7` is `-2`, not `5`)\n */\nexport const positiveModulo = (n: number, m: number): number =>\n    ((n % m) + m) % m\n\nexport const formatYear = (year: number): string => {\n    if (isNaN(year)) {\n        console.warn(`Invalid year '${year}'`)\n        return \"\"\n    }\n\n    return year < 0\n        ? `${createFormatter()(\",.0f\")(Math.abs(year))} BCE`\n        : year.toString()\n}\n\n/**\n *  Computes the base-10 magnitude of a number, which can be useful for rounding by sigfigs etc.\n * Formally, numberMagnitude computes `m` such that `10^(m-1) <= abs(num) < 10^m`.\n * Equivalently, `num / 10^(numberMagnitude(num))` is always in the range ±[0.1, 1[.\n *\n * - numberMagnitude(0.5) = 0\n * - numberMagnitude(1) = 1\n * - numberMagnitude(-2) = 1\n * - numberMagnitude(100) = 3\n */\nexport const numberMagnitude = (num: number): number => {\n    if (num === 0) return 0\n    const magnitude = Math.floor(Math.log10(Math.abs(num))) + 1\n    return Number.isFinite(magnitude) ? magnitude : 0\n}\n\n// Turns every number except 0 to a number in the range [1, 9.9999] or [-9.9999, -1] for negative inputs\n// Also returns the factor needed to un-normalise the value back to its original scale\n// Turns 100 -> 1 (factor 100), 0.2 -> 2 (factor 0.1), -100 -> -1 (factor -100), 35 -> 3.5 (factor 10)\nexport const normaliseToSingleDigitNumber = (\n    num: number\n): { normalised: number; factor: number } => {\n    if (num === 0) return { normalised: 0, factor: 1 }\n    const magnitude = numberMagnitude(num)\n    const factor = Math.pow(10, magnitude - 1)\n\n    const normalised = num / factor\n    return { normalised, factor }\n}\n\nexport const roundSigFig = (num: number, sigfigs: number = 1): number => {\n    if (num === 0) return 0\n    const magnitude = numberMagnitude(num)\n    return _.round(num, -magnitude + sigfigs)\n}\n\nexport const excludeUndefined = <T>(arr: (T | undefined)[]): T[] =>\n    arr.filter((x) => x !== undefined)\n\nexport const excludeNull = <T>(arr: (T | null)[]): T[] =>\n    arr.filter((x) => x !== null)\n\nexport const excludeNullish = <T>(arr: (T | null | undefined | void)[]): T[] =>\n    arr.filter((x) => x !== null && x !== undefined)\n\nexport const firstOfNonEmptyArray = <T>(arr: T[]): T => {\n    if (arr.length < 1) throw new Error(\"array is empty\")\n    return R.first(arr) as T\n}\n\nexport const lastOfNonEmptyArray = <T>(arr: T[]): T => {\n    if (arr.length < 1) throw new Error(\"array is empty\")\n    return R.last(arr) as T\n}\n\nexport function next<T>(set: T[], current: T): T {\n    let nextIndex = set.indexOf(current) + 1\n    nextIndex = nextIndex === -1 ? 0 : nextIndex\n    return set[nextIndex === set.length ? 0 : nextIndex]\n}\n\nexport const previous = <T>(set: T[], current: T): T => {\n    const nextIndex = set.indexOf(current) - 1\n    return set[nextIndex < 0 ? set.length - 1 : nextIndex]\n}\n\n// Calculate the extents of a set of numbers, with safeguards for log scales\nexport const domainExtent = (\n    numValues: number[],\n    scaleType: ScaleType,\n    maxValueMultiplierForPadding = 1\n): [number, number] | undefined => {\n    const filterValues =\n        scaleType === ScaleType.log ? numValues.filter((v) => v > 0) : numValues\n    const [minValue, maxValue] = extent(filterValues)\n\n    if (\n        minValue !== undefined &&\n        maxValue !== undefined &&\n        isFinite(minValue) &&\n        isFinite(maxValue)\n    ) {\n        if (minValue !== maxValue) {\n            return [minValue, maxValue * maxValueMultiplierForPadding]\n        } else {\n            // Only one value, make up a reasonable default\n            return scaleType === ScaleType.log\n                ? [minValue / 10, minValue * 10]\n                : [minValue - 1, maxValue + 1]\n        }\n    }\n\n    return undefined\n}\n\n// Compound annual growth rate\n// cagr = ((new_value - old_value) ** (1 / Δt)) - 1\n// see https://en.wikipedia.org/wiki/Compound_annual_growth_rate\nexport const cagr = (\n    startValue: number,\n    endValue: number,\n    yearsElapsed: number\n): number => {\n    const ratio = endValue / startValue\n    return (\n        Math.sign(ratio) *\n        (Math.pow(Math.abs(ratio), 1 / yearsElapsed) - 1) *\n        100\n    )\n}\n\n// Take an arbitrary string and turn it into a nice url slug\nexport const slugify = (str: string, allowSlashes?: boolean): string => {\n    // Convert subscript and superscript numbers to regular numbers\n    const normalizedStr = str.replace(/[₀₁₂₃₄₅₆₇₈₉⁰¹²³⁴⁵⁶⁷⁸⁹]/g, (match) => {\n        // Subscript characters (₀₁₂₃₄₅₆₇₈₉)\n        const subscriptMap: { [key: string]: string } = {\n            \"₀\": \"0\",\n            \"₁\": \"1\",\n            \"₂\": \"2\",\n            \"₃\": \"3\",\n            \"₄\": \"4\",\n            \"₅\": \"5\",\n            \"₆\": \"6\",\n            \"₇\": \"7\",\n            \"₈\": \"8\",\n            \"₉\": \"9\",\n        }\n        // Superscript characters (⁰¹²³⁴⁵⁶⁷⁸⁹)\n        const superscriptMap: { [key: string]: string } = {\n            \"⁰\": \"0\",\n            \"¹\": \"1\",\n            \"²\": \"2\",\n            \"³\": \"3\",\n            \"⁴\": \"4\",\n            \"⁵\": \"5\",\n            \"⁶\": \"6\",\n            \"⁷\": \"7\",\n            \"⁸\": \"8\",\n            \"⁹\": \"9\",\n        }\n        return subscriptMap[match] || superscriptMap[match] || match\n    })\n    return slugifySameCase(normalizedStr.toLowerCase(), allowSlashes)\n}\n\nexport const slugifySameCase = (\n    str: string,\n    allowSlashes: boolean = false\n): string => {\n    let slug = str\n        .trim()\n        .replace(/\\s*\\*.+\\*/, \"\")\n        .replace(/[^\\w\\- /]+/g, \"\")\n        .replace(/ +/g, \"-\")\n    if (!allowSlashes) {\n        slug = slug.replace(/\\//g, \"\")\n    }\n    return slug\n}\n\n// Unique number for this execution context\n// Useful for coordinating between embeds to avoid conflicts in their ids\nlet _guid = 0\nlet _guidsDisabledForTesting = false\nexport const guid = (): number => (_guidsDisabledForTesting ? 1 : ++_guid)\nexport const TESTING_ONLY_disable_guid = (): boolean =>\n    (_guidsDisabledForTesting = true)\n\n/** Decimal places a number keeps when it is written into an SVG attribute */\nexport const SVG_PRECISION = 2\n\nexport function roundForSvg(value: number): number {\n    return _.round(value, SVG_PRECISION)\n}\n\n/** Create an SVG path from an array of points */\nexport const pointsToPath = (points: Point[]): string => {\n    let path = \"\"\n    for (let i = 0; i < points.length; i++) {\n        const x = roundForSvg(points[i].x)\n        const y = roundForSvg(points[i].y)\n        path += i === 0 ? `M${x} ${y}` : `L${x} ${y}`\n    }\n    return path\n}\n\n// Based on https://stackoverflow.com/a/30245398/1983739\n// In case of tie returns higher value\n// todo: add unit tests\nexport const sortedFindClosestIndex = (\n    array: number[],\n    value: number,\n    startIndex: number = 0,\n    // non-inclusive end\n    endIndex: number = array.length\n): number => {\n    if (startIndex >= endIndex) return -1\n\n    if (value < array[startIndex]) return startIndex\n\n    if (value > array[endIndex - 1]) return endIndex - 1\n\n    let lo = startIndex\n    let hi = endIndex - 1\n\n    while (lo <= hi) {\n        const mid = Math.round((hi + lo) / 2)\n\n        if (value < array[mid]) {\n            hi = mid - 1\n        } else if (value > array[mid]) {\n            lo = mid + 1\n        } else {\n            return mid\n        }\n    }\n\n    // lo == hi + 1\n    return array[lo] - value < value - array[hi] ? lo : hi\n}\n\nexport const sortedFindClosest = (\n    array: number[],\n    value: number,\n    startIndex?: number,\n    endIndex?: number\n): number | undefined => {\n    const index = sortedFindClosestIndex(array, value, startIndex, endIndex)\n    return index !== -1 ? array[index] : undefined\n}\n\nexport const isMobile = (): boolean =>\n    typeof window === \"undefined\"\n        ? false\n        : !!window?.navigator?.userAgent.toLowerCase().includes(\"mobi\")\n\nexport const isTouchDevice = (): boolean =>\n    typeof window === \"undefined\" ? false : !!(\"ontouchstart\" in window)\n\n// General type representing arbitrary json data; basically a non-nullable 'any'\nexport interface Json {\n    [x: string]: any\n}\n\n// Escape a function for storage in a csv cell\nexport const csvEscape = (value: unknown): string => {\n    const valueStr = _.toString(value)\n    return valueStr.includes(\",\")\n        ? `\"${valueStr.replace(/\"/g, '\"\"')}\"`\n        : valueStr\n}\n\n// Removes all undefineds from an object.\nexport const trimObject = <Obj>(\n    obj: Obj,\n    trimStringEmptyStrings = false\n): NoUndefinedValues<Obj> => {\n    const clone: any = {}\n    for (const key in obj) {\n        const val = obj[key] as any\n        if (_.isObject(val) && _.isEmpty(val)) {\n            // Drop empty objects\n        } else if (trimStringEmptyStrings && val === \"\") {\n            // ignore\n        } else if (val !== undefined) clone[key] = obj[key]\n    }\n    return clone\n}\n\nexport const fetchText = async (url: string): Promise<string> => {\n    return await fetchWithRetry(url).then((res) => {\n        if (!res.ok)\n            throw new Error(`Fetch failed: ${res.status} ${res.statusText}`)\n        return res.text()\n    })\n}\n\nexport async function fetchJson<TResult>(\n    url: string,\n    options?: { timeoutMs?: number }\n): Promise<TResult> {\n    const response =\n        options?.timeoutMs !== undefined\n            ? await fetchWithTimeout(url, options.timeoutMs)\n            : await fetch(url)\n\n    if (!response.ok) {\n        throw new Error(`Failed to fetch ${url}: ${response.statusText}`)\n    }\n\n    return response.json()\n}\n\nexport class TimeoutError extends Error {}\n\n// Adapted from https://github.com/sindresorhus/ky/blob/main/source/utils/timeout.ts\nexport async function fetchWithTimeout(\n    url: string,\n    timeoutMs: number,\n    options?: RequestInit\n): Promise<Response> {\n    const abortController = new AbortController()\n\n    return new Promise((resolve, reject) => {\n        const timeoutId = setTimeout(() => {\n            abortController.abort()\n            reject(new TimeoutError(`Request timed out: ${url}`))\n        }, timeoutMs)\n\n        void fetch(url, { ...options, signal: abortController.signal })\n            .then(resolve)\n            .catch(reject)\n            .finally(() => clearTimeout(timeoutId))\n    })\n}\n\nconst _getUserCountryInformation = async (): Promise<\n    UserCountryInformation | undefined\n> =>\n    await fetchWithRetry(\"https://ourworldindata.org/api/detect-country\")\n        .then((res) => res.json())\n        .then((res) => res.country)\n        .catch(() => undefined)\n\n// Memoized because this will pretty much never change during a session.\n// The memoization, however, also means that any failures will also be cached.\n// This is okay currently, because currently this information is very much an optional nice-to-have.\nexport const getUserCountryInformation: () => Promise<\n    UserCountryInformation | undefined\n> = _.memoize(_getUserCountryInformation)\n\nexport const stripHTML = (html: string): string => striptags(html)\n\n// Math.rand doesn't have between nor seed. Lodash's Random doesn't take a seed, making it bad for testing.\n// So we have our own *very* psuedo-RNG.\nexport const getRandomNumberGenerator =\n    (min: Integer = 0, max: Integer = 100, seed = Date.now()) =>\n    (): Integer => {\n        const semiRand = Math.sin(seed++) * 10000\n        return Math.floor(min + (max - min) * (semiRand - Math.floor(semiRand)))\n    }\n\nexport const sampleFrom = <T>(\n    collection: T[],\n    howMany: number,\n    seed: number\n): T[] => shuffleArray(collection, seed).slice(0, howMany)\n\n// A seeded array shuffle\n// https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array\nconst shuffleArray = <T>(array: T[], seed = Date.now()): T[] => {\n    const rand = getRandomNumberGenerator(0, 100, seed)\n    const clonedArr = array.slice()\n    for (let index = clonedArr.length - 1; index > 0; index--) {\n        const replacerIndex = Math.floor((rand() / 100) * (index + 1))\n        ;[clonedArr[index], clonedArr[replacerIndex]] = [\n            clonedArr[replacerIndex],\n            clonedArr[index],\n        ]\n    }\n    return clonedArr\n}\n\nexport const getIdealGridParams = ({\n    count,\n    containerAspectRatio,\n    idealAspectRatio = IDEAL_PLOT_ASPECT_RATIO,\n}: {\n    count: number\n    containerAspectRatio: number\n    idealAspectRatio?: number\n}): GridParameters => {\n    // See Observable notebook: https://observablehq.com/@danielgavrilov/pack-rectangles-of-a-preferred-aspect-ratio\n    // Also Desmos graph: https://www.desmos.com/calculator/tmajzuq5tm\n    const ratio = containerAspectRatio / idealAspectRatio\n    // Prefer vertical grid for count=2.\n    if (count === 2 && containerAspectRatio < 2.8)\n        return { rows: 2, columns: 1, count }\n    // Otherwise, optimize for closest to the ideal aspect ratio.\n    const initialColumns = Math.min(Math.round(Math.sqrt(count * ratio)), count)\n    const rows = Math.ceil(count / initialColumns)\n    // Remove extra columns if we can fit everything in fewer.\n    // This will result in wider aspect ratios than ideal, which is ok.\n    const columns = Math.ceil(count / rows)\n    return {\n        rows,\n        columns,\n        count,\n    }\n}\n\nexport const findClosestTimeIndex = (\n    timesAsc: Time[],\n    targetTime: Time,\n    tolerance?: number // When not specified, the tolerance is infinite\n): Time | undefined => {\n    const closestIndex = R.sortedIndex(timesAsc, targetTime)\n\n    // This value is >= targetTime, or undefined in case there is no such value in the arr\n    const higherOrEqualVal = timesAsc.at(closestIndex)\n    if (higherOrEqualVal === targetTime) return closestIndex\n\n    // if tolerance is set to 0, and no exact match was found, return undefined\n    if (tolerance === 0) return undefined\n\n    // This value is < targetTime, or undefined in case there is no such value in the arr\n    const lowerVal = timesAsc[closestIndex - 1] as Time | undefined\n    const lowerDiff = lowerVal !== undefined ? targetTime - lowerVal : Infinity\n    const higherDiff =\n        higherOrEqualVal !== undefined\n            ? higherOrEqualVal - targetTime\n            : Infinity\n\n    if (lowerDiff === Infinity && higherDiff === Infinity) return undefined\n\n    // Prefer later times, e.g. if targetTime is 2010, prefer 2011 to 2009\n    if (higherDiff <= lowerDiff) {\n        if (tolerance !== undefined && higherDiff > tolerance) return undefined\n        return closestIndex\n    } else {\n        if (tolerance !== undefined && lowerDiff > tolerance) return undefined\n        return closestIndex - 1\n    }\n}\n\nexport const isNegativeInfinity = (\n    timeBound: TimeBound\n): timeBound is TimeBoundValue => timeBound === TimeBoundValue.negativeInfinity\n\nexport const isPositiveInfinity = (\n    timeBound: TimeBound\n): timeBound is TimeBoundValue => timeBound === TimeBoundValue.positiveInfinity\n\nexport const findClosestTime = (\n    timesAsc: Time[],\n    targetTime: Time,\n    tolerance?: number\n): Time | undefined => {\n    if (isNegativeInfinity(targetTime)) return timesAsc.at(0)\n    if (isPositiveInfinity(targetTime)) return timesAsc.at(-1)\n    const index = findClosestTimeIndex(timesAsc, targetTime, tolerance)\n    return index !== undefined ? timesAsc[index] : undefined\n}\n\n// _.mapValues() equivalent for ES6 Maps\nexport const es6mapValues = <K, V, M>(\n    input: Map<K, V>,\n    mapper: (value: V, key: K) => M\n): Map<K, M> =>\n    new Map(\n        input.entries().map(([key, value]) => {\n            return [key, mapper(value, key)]\n        })\n    )\n\nexport interface DataValue {\n    time: Time | undefined\n    value: number | string | undefined\n}\n\nconst valuesAtTimes = (\n    valueByTime: Map<number, string | number>,\n    targetTimes: Time[],\n    tolerance = 0\n): { time: number | undefined; value: string | number | undefined }[] => {\n    const timesAsc = sortNumeric(Array.from(valueByTime.keys()))\n    return targetTimes.map((targetTime) => {\n        const time = findClosestTime(timesAsc, targetTime, tolerance)\n        const value = time === undefined ? undefined : valueByTime.get(time)\n        return {\n            time,\n            value,\n        }\n    })\n}\n\nexport const valuesByEntityAtTimes = (\n    valueByEntityAndTime: Map<string, Map<number, string | number>>,\n    targetTimes: Time[],\n    tolerance = 0\n): Map<string, DataValue[]> =>\n    es6mapValues(valueByEntityAndTime, (valueByTime) =>\n        valuesAtTimes(valueByTime, targetTimes, tolerance)\n    )\n\nexport const diffDatesInDays = (a: dayjs.Dayjs, b: dayjs.Dayjs): number => {\n    const aUtc = toStartOfDayUtc(a)\n    const bUtc = toStartOfDayUtc(b)\n    return Math.trunc((aUtc.valueOf() - bUtc.valueOf()) / MS_PER_DAY)\n}\n\nexport const getYearFromISOStringAndDayOffset = (\n    epoch: string,\n    daysOffset: number\n): number => {\n    const date = dayjs.utc(epoch).add(daysOffset, \"day\")\n    return date.year()\n}\n\nexport const sleep = (ms: number): Promise<void> =>\n    new Promise((resolve) => setTimeout(resolve, ms))\n\ninterface RetryOptions {\n    maxRetries?: number\n    exponentialBackoff?: boolean\n    initialDelay?: number\n}\n\nexport async function fetchWithRetry(\n    url: string,\n    fetchOptions?: RequestInit,\n    retryOptions?: RetryOptions\n): Promise<Response> {\n    const defaultRetryOptions: RetryOptions = {\n        maxRetries: 5,\n        exponentialBackoff: true,\n        initialDelay: 250,\n    }\n    return retryPromise(\n        () => fetch(url, fetchOptions),\n        retryOptions ?? defaultRetryOptions\n    )\n}\n\n// Identify our own server-side calls to the OWID data API (e.g. the baker\n// fetching indicator data while baking, or the grapher Cloudflare functions\n// generating downloads/thumbnails) so analytics can attribute them to us rather\n// than counting them as anonymous external traffic.\n//\n// We *extend* the runtime's own identity rather than replacing it: the UA embeds\n// `navigator.userAgent` (\"Node.js/<version>\" in the baker, \"Cloudflare-Workers\"\n// in CF functions) so the two server origins stay distinguishable, and it\n// contains \"Our World In Data\" so the existing Cloudflare bot-classification\n// rule tags it as internal.\n//\n// Returns undefined in the browser: `User-Agent` is a forbidden header name there\n// and is mostly ignored, but Firefox does send a settable value, which would\n// mislabel real user chart loads as internal and could force a CORS preflight on\n// the cross-origin data API. `typeof window === \"undefined\"` is true in Node and\n// in Cloudflare Workers, false in browsers.\nexport function getOwidDataFetchUserAgent(): string | undefined {\n    if (typeof window !== \"undefined\") return undefined\n    const runtime =\n        typeof navigator !== \"undefined\" && navigator.userAgent\n            ? navigator.userAgent\n            : \"unknown\"\n    return `owid-grapher/1.0 (Our World In Data; +https://ourworldindata.org; ${runtime})`\n}\nexport async function retryPromise<T>(\n    promiseGetter: () => Promise<T>,\n    {\n        maxRetries = 3,\n        exponentialBackoff = false,\n        initialDelay = 200,\n    }: RetryOptions = {}\n): Promise<T> {\n    let retried = 0\n    let lastError\n    let delay = initialDelay\n\n    while (retried++ < maxRetries) {\n        try {\n            return await promiseGetter()\n        } catch (error) {\n            lastError = error\n            if (exponentialBackoff && retried < maxRetries) {\n                await sleep(delay)\n                delay *= 2 // Double the delay for next retry\n            }\n        }\n    }\n    throw lastError\n}\n\nexport function parseIntOrUndefined(s: string | undefined): number | undefined {\n    if (s === undefined) return undefined\n    const value = parseInt(s)\n    return isNaN(value) ? undefined : value\n}\n\nexport function parseFloatOrUndefined(\n    s: string | undefined\n): number | undefined {\n    if (s === undefined) return undefined\n    const value = parseFloat(s)\n    return isNaN(value) ? undefined : value\n}\n\nexport const anyToString = (value: unknown): string => {\n    if (typeof value === \"undefined\" || value === null) return \"\"\n    return String(value)\n}\n\nfunction isDocumentElement(el: HTMLElement): boolean {\n    return [document.documentElement, document.body].includes(el)\n}\n\nfunction scrollTo(el: HTMLElement, top: number): void {\n    // with a scroll distance, we perform scroll on the element\n    if (isDocumentElement(el)) {\n        window.scrollTo(0, top)\n        return\n    }\n\n    el.scrollTop = top\n}\n\nexport function scrollIntoViewIfNeeded(\n    containerEl: HTMLElement,\n    focusedEl: HTMLElement\n): void {\n    const menuRect = containerEl.getBoundingClientRect()\n    const focusedRect = focusedEl.getBoundingClientRect()\n    const overScroll = focusedEl.offsetHeight / 3\n\n    if (focusedRect.bottom + overScroll > menuRect.bottom) {\n        scrollTo(\n            containerEl,\n            Math.min(\n                focusedEl.offsetTop +\n                    focusedEl.clientHeight -\n                    containerEl.offsetHeight +\n                    overScroll,\n                containerEl.scrollHeight\n            )\n        )\n    } else if (focusedRect.top - overScroll < menuRect.top) {\n        scrollTo(containerEl, Math.max(focusedEl.offsetTop - overScroll, 0))\n    }\n}\n\nexport function rollingMap<T, U>(array: T[], mapper: (a: T, b: T) => U): U[] {\n    const result: U[] = []\n    if (array.length <= 1) return result\n    for (let i = 0; i < array.length - 1; i++) {\n        result.push(mapper(array[i], array[i + 1]))\n    }\n    return result\n}\n\nexport function keyMap<Key, Value>(\n    array: Value[],\n    accessor: (v: Value) => Key\n): Map<Key, Value> {\n    const result = new Map<Key, Value>()\n    array.forEach((item) => {\n        const key = accessor(item)\n        if (!result.has(key)) {\n            result.set(key, item)\n        }\n    })\n    return result\n}\n\nexport const intersectionOfSets = <T>(sets: Set<T>[]): Set<T> => {\n    if (!sets.length) return new Set<T>()\n    return sets.reduce((a, b) => a.intersection(b))\n}\n\nexport const areSetsEqual = <T>(setA: Set<T>, setB: Set<T>): boolean =>\n    setA.size === setB.size && setA.isSubsetOf(setB)\n\n// ES6 is now significantly faster than lodash's intersection\nexport const intersection = <T>(...arrs: T[][]): T[] => {\n    if (arrs.length === 0) return []\n    if (arrs.length === 1) return arrs[0]\n    if (arrs.length === 2) {\n        const set = new Set(arrs[0])\n        return arrs[1].filter((value) => set.has(value))\n    }\n    return intersection(arrs[0], intersection(...arrs.slice(1)))\n}\n\nexport function sortByUndefinedLast<T>(\n    array: T[],\n    accessor: (t: T) => string | number | undefined,\n    order: SortOrder = SortOrder.asc\n): T[] {\n    const sorted = _.sortBy(array, (value) => {\n        const mapped = accessor(value)\n        if (mapped === undefined) {\n            return order === SortOrder.asc ? Infinity : -Infinity\n        }\n        return mapped\n    })\n    return order === SortOrder.asc ? sorted : sorted.reverse()\n}\n\nexport const mapNullToUndefined = <T>(\n    array: (T | undefined | null)[]\n): (T | undefined)[] => array.map((v) => (v === null ? undefined : v))\n\n// A word is treated as an abbreviation, and keeps its casing, if its second\n// character is uppercase (e.g. \"CO2\", \"HIV/AIDS\", \"SDG\").\nconst isAbbreviation = (word: string): boolean => /[A-Z]/.test(word.charAt(1))\n\nexport const lowerCaseFirstLetterUnlessAbbreviation = (str: string): string =>\n    isAbbreviation(str) ? str : str.charAt(0).toLowerCase() + str.slice(1)\n\n/**\n * Use with caution - please note that this sort function only sorts on numeric data, and that sorts\n * **in-place** and **not stable**.\n * If you need a more general sort function that is stable and leaves the original array untouched,\n * please use lodash's `sortBy` instead. This function is faster, though.\n */\nexport const sortNumeric = <T>(\n    arr: T[],\n    sortByFn: (el: T) => number = _.identity,\n    sortOrder: SortOrder = SortOrder.asc\n): T[] =>\n    arr.sort(\n        sortOrder === SortOrder.asc\n            ? (a: T, b: T): number => sortByFn(a) - sortByFn(b)\n            : (a: T, b: T): number => sortByFn(b) - sortByFn(a)\n    )\n\nexport function getClosestTimePairs(\n    sortedTimesA: Time[],\n    sortedTimesB: Time[],\n    maxDiff: Integer = Infinity\n): [number, number][] {\n    if (sortedTimesA.length === 0 || sortedTimesB.length === 0) return []\n\n    const decidedPairs: [Time, Time][] = []\n    const undecidedPairs: [Time, Time][] = []\n\n    let indexB = 0\n\n    // eslint-disable-next-line @typescript-eslint/prefer-for-of\n    for (let indexA = 0; indexA < sortedTimesA.length; indexA++) {\n        const timeA = sortedTimesA[indexA]\n\n        const closestIndexInB = sortedFindClosestIndex(\n            sortedTimesB,\n            timeA,\n            indexB\n        )\n\n        /**\n         * the index that holds the value that is definitely lower than timeA, the candidate time\n         */\n        const lowCandidateIndexB =\n            sortedTimesB[closestIndexInB] < timeA\n                ? closestIndexInB\n                : closestIndexInB > indexB\n                  ? closestIndexInB - 1\n                  : undefined\n\n        /**\n         * the index that holds the value that is definitely equal to or greater than timeA, the candidate time\n         */\n        const highCandidateIndexB =\n            sortedTimesB[closestIndexInB] >= timeA ? closestIndexInB : undefined\n\n        if (\n            lowCandidateIndexB !== undefined &&\n            highCandidateIndexB !== undefined &&\n            timeA - sortedTimesB[lowCandidateIndexB] <= maxDiff &&\n            timeA - sortedTimesB[lowCandidateIndexB] <\n                sortedTimesB[highCandidateIndexB] - timeA\n        ) {\n            decidedPairs.push([timeA, sortedTimesB[lowCandidateIndexB]])\n        } else if (\n            highCandidateIndexB !== undefined &&\n            timeA === sortedTimesB[highCandidateIndexB]\n        ) {\n            decidedPairs.push([timeA, sortedTimesB[highCandidateIndexB]])\n        } else {\n            if (\n                lowCandidateIndexB !== undefined &&\n                timeA - sortedTimesB[lowCandidateIndexB] <= maxDiff\n            ) {\n                undecidedPairs.push([timeA, sortedTimesB[lowCandidateIndexB]])\n            }\n            if (\n                highCandidateIndexB !== undefined &&\n                sortedTimesB[highCandidateIndexB] - timeA <= maxDiff\n            ) {\n                undecidedPairs.push([timeA, sortedTimesB[highCandidateIndexB]])\n            }\n        }\n\n        indexB = closestIndexInB\n    }\n\n    const seenTimes = new Set(decidedPairs.flat())\n\n    sortNumeric(undecidedPairs, (pair) => Math.abs(pair[0] - pair[1])).forEach(\n        (pair) => {\n            if (!seenTimes.has(pair[0]) && !seenTimes.has(pair[1])) {\n                decidedPairs.push(pair)\n                seenTimes.add(pair[0])\n                seenTimes.add(pair[1])\n            }\n        }\n    )\n\n    return decidedPairs\n}\n\nexport const omitUndefinedValues = <T>(object: T): NoUndefinedValues<T> => {\n    const result: any = {}\n    for (const key in object) {\n        if (object[key] !== undefined) result[key] = object[key]\n    }\n    return result\n}\n\nexport function omitUndefinedValuesRecursive<T extends Record<string, any>>(\n    obj: T\n): NoUndefinedValues<T> {\n    const result: any = {}\n    for (const key in obj) {\n        if (R.isPlainObject(obj[key])) {\n            // re-apply the function if we encounter a non-empty object\n            result[key] = omitUndefinedValuesRecursive(obj[key])\n        } else if (obj[key] === undefined) {\n            // omit undefined values\n        } else {\n            // otherwise, keep the value\n            result[key] = obj[key]\n        }\n    }\n    return result\n}\n\nexport function omitEmptyObjectsRecursive<T extends Record<string, any>>(\n    obj: T\n): Partial<T> {\n    const result: any = {}\n    for (const key in obj) {\n        if (R.isPlainObject(obj[key])) {\n            const isObjectEmpty = _.isEmpty(omitEmptyObjectsRecursive(obj[key]))\n            if (!isObjectEmpty) result[key] = obj[key]\n        } else {\n            result[key] = obj[key]\n        }\n    }\n    return result\n}\n\nexport const isInIFrame = (): boolean => {\n    try {\n        return window.self !== window.top\n    } catch {\n        return false\n    }\n}\n\n/**\n * Attributes that make a link open in a new tab, to spread onto an `<a>`.\n * Only puts them when `openInNewTab` is truthy.\n *\n * Mainly for links rendered inside an iframe: the host page may forbid\n * navigating the frame to another origin.\n */\nexport const openLinkInNewTabAttrs = (\n    openInNewTab: boolean | undefined\n): { target: \"_blank\"; rel: \"noopener\" } | undefined =>\n    openInNewTab ? { target: \"_blank\", rel: \"noopener\" } : undefined\n\nexport const differenceObj = <A extends Record<string, unknown>>(\n    obj: A,\n    defaultObj: Record<string, unknown>\n): Partial<A> => {\n    const result: Partial<A> = {}\n    for (const key in obj) {\n        if (defaultObj[key] !== obj[key]) {\n            result[key] = obj[key]\n        }\n    }\n    return result\n}\n\nexport const findDOMParent = (\n    el: HTMLElement,\n    condition: (el: HTMLElement) => boolean\n): HTMLElement | null => {\n    let current: HTMLElement | null = el\n    while (current) {\n        if (condition(current)) return current\n        current = current.parentElement\n    }\n    return null\n}\n\nexport const textAnchorFromAlign = (\n    align: HorizontalAlign\n): \"start\" | \"middle\" | \"end\" => {\n    if (align === HorizontalAlign.center) return \"middle\"\n    if (align === HorizontalAlign.right) return \"end\"\n    return \"start\"\n}\n\nexport const dyFromAlign = (align: VerticalAlign): string => {\n    if (align === VerticalAlign.middle) return \".32em\"\n    if (align === VerticalAlign.bottom) return \".71em\"\n    return \"0\"\n}\n\nexport function stringifyUnknownError(error: unknown): string | undefined {\n    if (error === undefined || error === null) return undefined\n    if (error instanceof Error) {\n        return `${error.name}: ${error.message}`\n    }\n    if (typeof error === \"function\") {\n        // Within this branch, `error` has type `Function`,\n        // so we can access the function's `name` property\n        const functionName = error.name || \"(anonymous)\"\n        return `[function ${functionName}]`\n    }\n\n    if (error instanceof Date) {\n        // Within this branch, `error` has type `Date`,\n        // so we can call the `toISOString` method\n        return error.toISOString()\n    }\n\n    if (typeof error === \"object\" && !Array.isArray(error) && error !== null) {\n        if (Object.prototype.hasOwnProperty.call(error, \"message\")) {\n            // Within this branch, `error` is an object with the `message`\n            // property, so we can access the object's `message` property.\n            return (error as any).message\n        } else {\n            // Otherwise, `error` is an object with an unknown structure, so\n            // we stringify it.\n            return JSON.stringify(error)\n        }\n    }\n\n    return String(error)\n}\n\n/**\n * Turns a 2D array that is not necessarily rectangular into a rectangular array\n * by appending missing values and filling them with `fill`.\n */\nexport function toRectangularMatrix<T, F>(arr: T[][], fill: F): (T | F)[][] {\n    if (arr.length === 0) return []\n    const width = _.max(arr.map((row) => row.length)) as number\n\n    return arr.map((row) => {\n        if (row.length < width)\n            return [...row, ...Array(width - row.length).fill(fill)]\n        else return row\n    })\n}\n\nexport function checkIsStringIndexable(\n    x: unknown\n): x is Record<string, unknown> {\n    return R.isPlainObject(x) || Array.isArray(x)\n}\n\nexport function checkIsTouchEvent(\n    event: unknown\n): event is React.TouchEvent | TouchEvent {\n    if (_.isObject(event)) {\n        return \"targetTouches\" in event\n    }\n    return false\n}\n\nexport const removeAllWhitespace = (text: string): string => {\n    return text.replace(/\\s+|\\n/g, \"\")\n}\n\nexport function moveArrayItemToIndex<Item>(\n    arr: Item[],\n    fromIndex: number,\n    toIndex: number\n): Item[] {\n    const newArray = Array.from(arr)\n    const [removed] = newArray.splice(fromIndex, 1)\n    newArray.splice(toIndex, 0, removed)\n    return newArray\n}\n\nexport const getIndexableKeys = Object.keys as <T extends object>(\n    obj: T\n) => Array<keyof T>\n\n/** Formats a date like this: \"October 6, 2024\"\n */\nexport const formatDate = (date: Date): string => {\n    return date.toLocaleDateString(\"en-US\", {\n        year: \"numeric\",\n        month: \"long\",\n        day: \"numeric\",\n    })\n}\n\n/**\n *\n * Parses a gdoc article JSON with non-primitive types (Date)\n *\n * Note: if dates could also be found deeper in the JSON, it could make sense to\n * write a custom JSON parser to handle that automatically for all keys. At this\n * stage, the manual approach is probably simpler.\n */\nexport const getOwidGdocFromJSON = (json: OwidGdocJSON): OwidGdoc => {\n    const createdAt = new Date(json.createdAt)\n    return {\n        ...json,\n        createdAt,\n        publishedAt: json.publishedAt ? new Date(json.publishedAt) : null,\n        updatedAt: json.updatedAt ? new Date(json.updatedAt) : createdAt,\n    }\n}\n\n// We want to infer the return type from the existing types instead of having to\n// manually specify it.\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type, @typescript-eslint/explicit-module-boundary-types\nexport function extractGdocPageData(gdoc: OwidGdoc) {\n    // Generic properties every gdoc has\n    const gdocProps = R.pick(gdoc, [\n        \"id\",\n        \"slug\",\n        \"content\",\n        \"contentMd5\",\n        \"createdAt\",\n        \"updatedAt\",\n        \"published\",\n        \"publishedAt\",\n        \"breadcrumbs\",\n        \"manualBreadcrumbs\",\n        \"tags\",\n        \"topicArea\",\n    ])\n\n    // Also generic properties. A separate function call because R.pick can only take so many arguments before TS complains\n    const attachmentProps = R.pick(gdoc, [\n        \"linkedAuthors\",\n        \"linkedDocuments\",\n        \"linkedStaticViz\",\n        \"linkedCharts\",\n        \"linkedNarrativeCharts\",\n        \"linkedIndicators\",\n        \"linkedCallouts\",\n        \"imageMetadata\",\n        \"relatedCharts\",\n    ])\n\n    const commonProps = {\n        ...gdocProps,\n        ...attachmentProps,\n    }\n\n    return match(gdoc)\n        .when(checkIsAboutPage, (aboutGdoc) => {\n            return {\n                ...commonProps,\n                ...R.pick(aboutGdoc, [\"donors\"]),\n            }\n        })\n        .when(checkIsHomepage, (homepageGdoc) => {\n            return {\n                ...commonProps,\n                ...R.pick(homepageGdoc, [\n                    \"homepageMetadata\",\n                    \"latestDataInsights\",\n                ]),\n            }\n        })\n        .when(checkIsDataInsight, (dataInsightGdoc) => {\n            return {\n                ...commonProps,\n                ...R.pick(dataInsightGdoc, [\"latestDataInsights\"]),\n            }\n        })\n        .when(checkIsAnnouncement, (announcementGdoc) => {\n            return {\n                ...commonProps,\n                ...R.pick(announcementGdoc, [\"latestAnnouncements\"]),\n            }\n        })\n        .when(checkIsAuthor, (authorGdoc) => {\n            return {\n                ...commonProps,\n                ...R.pick(authorGdoc, [\"latestWorkLinks\"]),\n            }\n        })\n        .when(checkIsFeaturedViz, (featuredVizGdoc) => {\n            return {\n                ...commonProps,\n                ...R.pick(featuredVizGdoc, [\"bespokeMetadata\"]),\n            }\n        })\n        .otherwise(() => commonProps)\n}\n\nexport type OwidGdocPageProps = ReturnType<typeof extractGdocPageData>\n\nexport type OwidGdocPageData = Omit<\n    OwidGdocPageProps,\n    \"createdAt\" | \"publishedAt\" | \"updatedAt\"\n> & {\n    createdAt: string\n    publishedAt: string | null\n    updatedAt: string | null\n}\n\nexport function deserializeOwidGdocPageData(\n    json: OwidGdocPageData\n): OwidGdocPageProps {\n    // NOTE: We have to do manual type casting around the content.type property\n    // because it can be undefined in OwidGdocPostContent. That makes sense\n    // during the gdoc creation, where we do manual validation for various\n    // properties. But at some point we should only pass around a valid gdoc\n    // where content.type can't be undefined anymore. So we should likely create\n    // a new type for that use case and use the less strict type only until we\n    // do the validation.\n    return {\n        ...json,\n        createdAt: new Date(json.createdAt),\n        publishedAt: json.publishedAt ? new Date(json.publishedAt) : null,\n        updatedAt: json.updatedAt ? new Date(json.updatedAt) : null,\n    } as OwidGdocPageProps\n}\n\n// Checking whether we have clipboard write access is surprisingly complicated.\n// For example, if a chart is embedded in an iframe, then Chrome will prevent the\n// use of clipboard.writeText() unless the iframe has allow=\"clipboard-write\".\n// On the other hand, Firefox and Safari haven't implemented the Permissions API\n// for \"clipboard-write\", so we need to handle that case gracefully.\n// See https://developer.mozilla.org/en-US/docs/Web/API/Permissions_API#browser_compatibility\nexport const canWriteToClipboard = async (): Promise<boolean> => {\n    if (!(\"clipboard\" in navigator)) return false\n\n    if (\"permissions\" in navigator) {\n        // Is Permissions API implemented?\n\n        try {\n            // clipboard-write permission is not supported in all browsers - need to catch that case\n            const res = await navigator.permissions.query({\n                name: \"clipboard-write\" as PermissionName,\n            })\n\n            // Asking permission was successful, we may use clipboard-write methods if permission wasn't denied.\n            return [\"granted\", \"prompt\"].includes(res.state)\n        } catch {\n            // ignore\n        }\n    }\n    // navigator.clipboard is available, but we couldn't check for permissions -- assume we can use it.\n    return true\n}\n\n/** Function to copy to clipboard. This uses the new Clipboard API if it is available.\n */\nexport async function copyToClipboard(text: string): Promise<boolean> {\n    const useModernClipboardApi = await canWriteToClipboard()\n    if (useModernClipboardApi) {\n        // We can use the new clipboard API\n        return navigator.clipboard\n            .writeText(text)\n            .then(() => true)\n            .catch((err) => {\n                console.error(\"Failed to copy text to clipboard\", err)\n                return false\n            })\n    } else {\n        // GPT 4 suggested attempt to work around the lack of clipboard API\n        const textarea = document.createElement(\"textarea\")\n        textarea.value = text\n        textarea.style.position = \"fixed\"\n        textarea.style.opacity = \"0\"\n        document.body.appendChild(textarea)\n        textarea.focus()\n        textarea.select()\n\n        try {\n            // oxlint-disable-next-line typescript/no-deprecated -- we're using a deprecated API only as a fallback here\n            return document.execCommand(\"copy\")\n        } catch (err) {\n            console.error(\"Failed to copy text to clipboard\", err)\n            return false\n        } finally {\n            document.body.removeChild(textarea)\n        }\n    }\n}\n\n// Memoization for immutable getters. Run the function once for this instance and cache the result.\nexport const imemo = <Type, This extends Record<string, any>>(\n    target: () => Type,\n    context: ClassGetterDecoratorContext<This, Type>\n) => {\n    const { name } = context\n    const propName = `${String(name)}_memoized`\n\n    return function (this: This): Type {\n        if (propName in this) {\n            return this[propName]\n        }\n        const value = target.call(this)\n        Object.defineProperty(this, propName, {\n            configurable: false,\n            enumerable: false,\n            writable: false,\n            value,\n        })\n        return value\n    }\n}\n\n// A decorator to log the evaluation time of a class method or class getter.\nexport function logPerf(\n    target: ((...args: any[]) => any) | ClassAccessorDecoratorTarget<any, any>,\n    context:\n        | ClassMethodDecoratorContext\n        | ClassAccessorDecoratorContext\n        | ClassGetterDecoratorContext\n): ((...args: any[]) => any) | ClassAccessorDecoratorResult<any, any> {\n    const { name, kind } = context\n    const propertyKey = String(name)\n\n    const logPerfWrapper = (fn: () => unknown, ...log: unknown[]): unknown => {\n        // eslint-disable-next-line no-console\n        console.log(\"⏱︎▶️ logging\", propertyKey, ...log)\n        const start = performance.now()\n        const result = fn()\n        const end = performance.now()\n        // eslint-disable-next-line no-console\n        console.log(\n            `⏱︎🏁 Perf: ${propertyKey} took ${(end - start).toFixed(3)}ms`\n        )\n        return result\n    }\n\n    if (kind === \"method\") {\n        const methodTarget = target as (...args: any[]) => any\n        return function (this: any, ...args: unknown[]): unknown {\n            return logPerfWrapper(() => methodTarget.apply(this, args), args)\n        }\n    } else if (kind === \"getter\") {\n        const getterTarget = target as () => any\n        return function (this: any): unknown {\n            return logPerfWrapper(() => getterTarget.call(this))\n        }\n    } else if (kind === \"accessor\") {\n        const accessorTarget = target as ClassAccessorDecoratorTarget<any, any>\n        return {\n            get(this: any): unknown {\n                return logPerfWrapper(() => accessorTarget.get.call(this))\n            },\n            set: accessorTarget.set,\n        }\n    }\n\n    return target\n}\n\n// A decorator to bind methods to the class instance, ensuring 'this' is always correct\nexport function bind<This, Args extends any[], Return>(\n    target: (this: This, ...args: Args) => Return,\n    context: ClassMethodDecoratorContext<\n        This,\n        (this: This, ...args: Args) => Return\n    >\n): (this: This, ...args: Args) => Return {\n    const { name } = context\n\n    context.addInitializer(function (this: This) {\n        const boundMethod = target.bind(this)\n        // Store the bound method on the instance\n        Object.defineProperty(this, name, {\n            value: boundMethod,\n            writable: false,\n            enumerable: false,\n            configurable: true,\n        })\n    })\n\n    return target\n}\n\n// These are all the types that we need to be able to iterate through to extract their URLs/filenames.\n// It's more than just the EnrichedBlocks and Spans, because some EnrichedBlocks have nested children\n// that contain URLs/filenames\nexport type NodeWithUrl =\n    | OwidEnrichedGdocBlock\n    | Span\n    | EnrichedHybridLink\n    | EnrichedTopicPageIntroRelatedTopic\n    | EnrichedTopicPageIntroDownloadButton\n    | EnrichedBlockKeyInsightsSlide\n\nexport function recursivelyMapArticleContent(\n    node: NodeWithUrl,\n    callback: (node: NodeWithUrl) => NodeWithUrl\n): NodeWithUrl {\n    if (checkNodeIsSpan(node)) {\n        if (\"children\" in node) {\n            node.children.map((node) =>\n                recursivelyMapArticleContent(node, callback)\n            )\n        }\n    } else if (node.type === \"gray-section\") {\n        node.items.map((block) => recursivelyMapArticleContent(block, callback))\n    } else if (node.type === \"conditional-section\") {\n        node.content.map((block) =>\n            recursivelyMapArticleContent(block, callback)\n        )\n    } else if (\n        node.type === \"sticky-left\" ||\n        node.type === \"sticky-right\" ||\n        node.type === \"side-by-side\"\n    ) {\n        node.left.map((node) => recursivelyMapArticleContent(node, callback))\n        node.right.map((node) => recursivelyMapArticleContent(node, callback))\n    } else if (node.type === \"text\") {\n        node.value.map((node) => recursivelyMapArticleContent(node, callback))\n    } else if (node.type === \"additional-charts\") {\n        node.items.map((spans) =>\n            spans.map((span) => recursivelyMapArticleContent(span, callback))\n        )\n    } else if (node.type === \"chart-story\") {\n        node.items.map((item) =>\n            recursivelyMapArticleContent(item.chart, callback)\n        )\n    } else if (node.type === \"recirc\") {\n        node.links.map((link) => callback(link))\n    } else if (node.type === \"topic-page-intro\") {\n        const { downloadButton, relatedTopics, content } = node\n        if (downloadButton) callback(downloadButton)\n        if (relatedTopics) relatedTopics.forEach(callback)\n        content.forEach(callback)\n    } else if (node.type === \"key-insights\") {\n        node.insights.forEach((insight) => {\n            callback(insight)\n            insight.asset?.forEach(callback)\n            insight.content.forEach(callback)\n        })\n    }\n\n    return callback(node)\n}\n\nexport function traverseEnrichedSpan(\n    span: Span,\n    callback: (x: Span) => void\n): void {\n    match(span)\n        .with({ children: P.any }, (span) => {\n            callback(span)\n            span.children.forEach((child) =>\n                traverseEnrichedSpan(child, callback)\n            )\n        })\n        .with({ spanType: \"span-simple-text\" }, (simpleSpan) => {\n            callback(simpleSpan)\n        })\n        .with({ spanType: \"span-newline\" }, (newlineSpan) => {\n            callback(newlineSpan)\n        })\n        .exhaustive()\n}\n\n// If your node is a OwidEnrichedGdocBlock, the callback will apply to it\n// If your node has children that are Spans, the spanCallback will apply to them\n// If your node has children that aren't OwidEnrichedGdocBlocks or Spans\n// you'll have to handle those children yourself in your callback\nexport function traverseEnrichedBlock(\n    node: OwidEnrichedGdocBlock,\n    callback: (x: OwidEnrichedGdocBlock) => void,\n    spanCallback?: (x: Span) => void\n): void {\n    match(node)\n        .with(\n            { type: P.union(\"sticky-right\", \"sticky-left\", \"side-by-side\") },\n            (container) => {\n                callback(container)\n                container.left.forEach((leftNode) =>\n                    traverseEnrichedBlock(leftNode, callback, spanCallback)\n                )\n                container.right.forEach((rightNode) =>\n                    traverseEnrichedBlock(rightNode, callback, spanCallback)\n                )\n            }\n        )\n        .with({ type: \"gray-section\" }, (graySection) => {\n            callback(graySection)\n            graySection.items.forEach((node) =>\n                traverseEnrichedBlock(node, callback, spanCallback)\n            )\n        })\n        .with({ type: \"explore-data-section\" }, (exploreDataSection) => {\n            callback(exploreDataSection)\n            exploreDataSection.content.forEach((node) =>\n                traverseEnrichedBlock(node, callback, spanCallback)\n            )\n        })\n        .with({ type: \"conditional-section\" }, (conditional) => {\n            callback(conditional)\n            conditional.content.forEach((node) =>\n                traverseEnrichedBlock(node, callback, spanCallback)\n            )\n        })\n        .with({ type: \"key-insights\" }, (keyInsights) => {\n            callback(keyInsights)\n            keyInsights.insights.forEach((insight) => {\n                insight.asset?.forEach((node) =>\n                    traverseEnrichedBlock(node, callback, spanCallback)\n                )\n                insight.content.forEach((node) =>\n                    traverseEnrichedBlock(node, callback, spanCallback)\n                )\n            })\n        })\n        .with({ type: \"expander\" }, (expander) => {\n            callback(expander)\n            expander.content.forEach((block) =>\n                traverseEnrichedBlock(block, callback, spanCallback)\n            )\n        })\n        .with({ type: \"callout\" }, (callout) => {\n            callback(callout)\n            if (spanCallback) {\n                callout.text.forEach((textBlock) =>\n                    traverseEnrichedBlock(textBlock, callback, spanCallback)\n                )\n            }\n        })\n        .with({ type: \"aside\" }, (aside) => {\n            callback(aside)\n            if (spanCallback) {\n                aside.caption.forEach((span) =>\n                    traverseEnrichedSpan(span, spanCallback)\n                )\n            }\n        })\n        .with({ type: \"list\" }, (list) => {\n            callback(list)\n            if (spanCallback) {\n                list.items.forEach((textBlock) =>\n                    traverseEnrichedBlock(textBlock, callback, spanCallback)\n                )\n            }\n        })\n        .with({ type: \"numbered-list\" }, (numberedList) => {\n            callback(numberedList)\n            if (spanCallback) {\n                numberedList.items.forEach((textBlock) =>\n                    traverseEnrichedBlock(textBlock, callback, spanCallback)\n                )\n            }\n        })\n        .with({ type: \"text\" }, (textNode) => {\n            callback(textNode)\n            if (spanCallback) {\n                textNode.value.forEach((span) => {\n                    traverseEnrichedSpan(span, spanCallback)\n                })\n            }\n        })\n        .with({ type: \"simple-text\" }, (simpleTextNode) => {\n            if (spanCallback) {\n                spanCallback(simpleTextNode.value)\n            }\n        })\n        .with({ type: \"additional-charts\" }, (additionalCharts) => {\n            callback(additionalCharts)\n            if (spanCallback) {\n                additionalCharts.items.forEach((spans) => {\n                    spans.forEach((span) =>\n                        traverseEnrichedSpan(span, spanCallback)\n                    )\n                })\n            }\n        })\n        .with({ type: \"heading\" }, (heading) => {\n            callback(heading)\n            if (spanCallback) {\n                heading.text.forEach((span) => {\n                    traverseEnrichedSpan(span, spanCallback)\n                })\n            }\n        })\n        .with({ type: \"expandable-paragraph\" }, (expandableParagraph) => {\n            callback(expandableParagraph)\n            expandableParagraph.items.forEach((textBlock) => {\n                traverseEnrichedBlock(textBlock, callback, spanCallback)\n            })\n        })\n        .with({ type: \"guided-chart\" }, (guidedChart) => {\n            callback(guidedChart)\n            guidedChart.content.forEach((block) => {\n                traverseEnrichedBlock(block, callback, spanCallback)\n            })\n        })\n        .with({ type: \"align\" }, (align) => {\n            callback(align)\n            align.content.forEach((node) => {\n                traverseEnrichedBlock(node, callback, spanCallback)\n            })\n        })\n        .with({ type: \"table\" }, (table) => {\n            callback(table)\n            table.rows.forEach((row) => {\n                row.cells.forEach((cell) => {\n                    cell.content.forEach((node) => {\n                        traverseEnrichedBlock(node, callback, spanCallback)\n                    })\n                })\n            })\n        })\n        .with({ type: \"blockquote\" }, (blockquote) => {\n            callback(blockquote)\n            blockquote.text.forEach((node) => {\n                traverseEnrichedBlock(node, callback, spanCallback)\n            })\n        })\n        .with(\n            {\n                type: \"key-indicator\",\n            },\n            (keyIndicator) => {\n                callback(keyIndicator)\n                keyIndicator.text.forEach((node) => {\n                    traverseEnrichedBlock(node, callback, spanCallback)\n                })\n            }\n        )\n        .with(\n            { type: \"key-indicator-collection\" },\n            (keyIndicatorCollection) => {\n                callback(keyIndicatorCollection)\n                keyIndicatorCollection.blocks.forEach((node) =>\n                    traverseEnrichedBlock(node, callback, spanCallback)\n                )\n            }\n        )\n        .with({ type: \"people\" }, (people) => {\n            callback(people)\n            for (const item of people.items) {\n                traverseEnrichedBlock(item, callback, spanCallback)\n            }\n        })\n        .with({ type: \"people-rows\" }, (peopleRows) => {\n            callback(peopleRows)\n            for (const person of peopleRows.people) {\n                traverseEnrichedBlock(person, callback, spanCallback)\n            }\n        })\n        .with({ type: \"person\" }, (person) => {\n            callback(person)\n            for (const node of person.text) {\n                traverseEnrichedBlock(node, callback, spanCallback)\n            }\n        })\n        .with({ type: \"data-callout\" }, (dataCallout) => {\n            callback(dataCallout)\n            for (const node of dataCallout.content) {\n                traverseEnrichedBlock(node, callback, spanCallback)\n            }\n        })\n        .with({ type: \"data-callout-group\" }, (dataCalloutGroup) => {\n            callback(dataCalloutGroup)\n            for (const node of dataCalloutGroup.content) {\n                traverseEnrichedBlock(node, callback, spanCallback)\n            }\n        })\n        .with({ type: \"chart-rows\" }, (block) => {\n            callback(block)\n            for (const row of block.rows) {\n                for (const node of row.content) {\n                    traverseEnrichedBlock(node, callback, spanCallback)\n                }\n            }\n        })\n        .with({ type: \"pull-chart\" }, (block) => {\n            callback(block)\n            for (const node of block.content) {\n                traverseEnrichedBlock(node, callback, spanCallback)\n            }\n        })\n        .with(\n            {\n                type: P.union(\n                    \"chart-story\",\n                    \"chart\",\n                    \"narrative-chart\",\n                    \"code\",\n                    \"cookie-notice\",\n                    \"cta\",\n                    \"donors\",\n                    \"horizontal-rule\",\n                    \"html\",\n                    \"image\",\n                    \"video\",\n                    \"missing-data\",\n                    \"prominent-link\",\n                    \"pull-quote\",\n                    \"recirc\",\n                    \"subscribe-banner\",\n                    \"resource-panel\",\n                    \"research-and-writing\",\n                    \"sdg-grid\",\n                    \"sdg-toc\",\n                    \"ltp-toc\",\n                    \"topic-page-intro\",\n                    \"all-charts\",\n                    \"explorer-tiles\",\n                    \"pill-row\",\n                    \"homepage-search\",\n                    \"homepage-intro\",\n                    \"featured-metrics\",\n                    \"featured-data-insights\",\n                    \"latest-data-insights\",\n                    \"socials\",\n                    \"static-viz\",\n                    \"country-profile-selector\",\n                    \"bespoke-component\"\n                ),\n            },\n            callback\n        )\n        .exhaustive()\n}\n\n/**\n * Transcribes the findings the ArchieML parser recorded while parsing —\n * `parseErrors` on blocks (body and ref contents) and `refs.errors` — into\n * OwidGdocErrorMessages. Body findings are labelled with the block type\n * (`[chart] Missing url`) and ref-content findings with the ref id, so the\n * reader can tell which block a message is about. This function performs NO\n * judgments of its own: new validation rules belong in `getErrors`'s check\n * functions (advisory, shown in the admin), not here. Shared by the admin and\n * the writing reference generator so they can never diverge on what the\n * parser reported.\n *\n * `visitBodyNode` lets a caller collect its own findings from the body walk\n * this function already performs, rather than walking the body a second time.\n * It is called per body node, interleaved with that node's parse errors, so\n * the findings come back in document order. Ref contents are not visited:\n * the caller's checks are about the document body.\n */\nexport function getParseFindings(\n    content: {\n        body?: OwidEnrichedGdocBlock[]\n        refs?: OwidGdocPostContent[\"refs\"]\n    },\n    visitBodyNode?: (node: OwidEnrichedGdocBlock) => OwidGdocErrorMessage[]\n): OwidGdocErrorMessage[] {\n    const findings: OwidGdocErrorMessage[] = []\n    const transcribe = (\n        property: OwidGdocErrorMessage[\"property\"],\n        blocks: OwidEnrichedGdocBlock[] | undefined,\n        refId?: string,\n        visit?: (node: OwidEnrichedGdocBlock) => OwidGdocErrorMessage[]\n    ): void => {\n        for (const block of blocks ?? []) {\n            traverseEnrichedBlock(block, (node) => {\n                for (const parseError of node.parseErrors ?? []) {\n                    findings.push({\n                        property,\n                        type: parseError.isWarning\n                            ? OwidGdocErrorMessageType.Warning\n                            : OwidGdocErrorMessageType.Error,\n                        message:\n                            refId !== undefined\n                                ? `Parse error in \"${refId}\" ref content: ${parseError.message}`\n                                : `[${node.type}] ${parseError.message}`,\n                    })\n                }\n                if (visit) findings.push(...visit(node))\n            })\n        }\n    }\n\n    transcribe(\"body\", content.body, undefined, visitBodyNode)\n    for (const ref of Object.values(content.refs?.definitions ?? {})) {\n        transcribe(\"refs\", ref.content, ref.id)\n    }\n    findings.push(...(content.refs?.errors ?? []))\n    return findings\n}\n\nexport function checkNodeIsSpan(node: NodeWithUrl): node is Span {\n    return \"spanType\" in node\n}\n\nexport function spansToUnformattedPlainText(spans: Span[]): string {\n    return spans\n        .map((span) =>\n            match(span)\n                .with({ spanType: \"span-simple-text\" }, (span) => span.text)\n                .with(\n                    {\n                        spanType: P.union(\n                            \"span-link\",\n                            \"span-callout\",\n                            \"span-italic\",\n                            \"span-bold\",\n                            \"span-fallback\",\n                            \"span-quote\",\n                            \"span-superscript\",\n                            \"span-subscript\",\n                            \"span-underline\",\n                            \"span-ref\",\n                            \"span-dod\",\n                            \"span-guided-chart-link\"\n                        ),\n                    },\n                    (span) => spansToUnformattedPlainText(span.children)\n                )\n                .with({ spanType: \"span-newline\" }, () => \"\")\n                .exhaustive()\n        )\n        .join(\"\")\n}\n\nexport function getResearchAndWritingId(heading?: string): string {\n    return heading ? slugify(heading) : RESEARCH_AND_WRITING_ID\n}\n\n// Proper nouns that should keep their Title Case even in sentence-case (LTP)\n// headings. Compared case-insensitively against the whole string.\nconst CASE_PRESERVED_PHRASES = new Set(\n    [\"Human Development Index (HDI)\", \"SDG Tracker\"].map((phrase) =>\n        phrase.toLowerCase()\n    )\n)\n\n// Sentence-cases a heading while preserving abbreviations and known proper\n// nouns. `capitalizeFirstWord` is false for text interpolated mid-heading,\n// e.g. the topic name in \"Featured data on economic inequality\".\nexport function toSentenceCase(\n    str: string,\n    capitalizeFirstWord = true\n): string {\n    if (CASE_PRESERVED_PHRASES.has(str.trim().toLowerCase())) return str\n    return str\n        .split(\" \")\n        .map((word, i) => {\n            if (isAbbreviation(word)) return word\n            const lower = word.toLowerCase()\n            return capitalizeFirstWord && i === 0\n                ? lower.charAt(0).toUpperCase() + lower.slice(1)\n                : lower\n        })\n        .join(\" \")\n}\n\n// Topic page components have headings written in Title Case (both authored\n// custom titles and our defaults). Only modular topic pages keep Title Case;\n// every other context (linear topic pages, and the fallback when the gdoc type\n// is unknown) renders them in sentence case. Mirrors getTopicPageHeading.\nexport function sentenceCaseIfNotTopicPage(\n    title: string | undefined,\n    gdocType?: OwidGdocType,\n    capitalizeFirstWord = true\n): string {\n    if (!title) return \"\"\n    return gdocType === OwidGdocType.TopicPage\n        ? title\n        : toSentenceCase(title, capitalizeFirstWord)\n}\n\nconst topicPageTitleHeadings = {\n    keyCharts: \"Key Charts\",\n    featuredData: \"Featured Data\",\n    dataInsights: \"Data Insights\",\n    researchAndWriting: RESEARCH_AND_WRITING_DEFAULT_HEADING,\n    countryProfiles: \"Country Profiles\",\n    relatedTopics: \"Related Topics\",\n}\n\n// Returns the default heading for a topic page component, in Title Case on\n// modular topic pages and sentence case everywhere else.\nexport function getTopicPageHeading(\n    key: keyof typeof topicPageTitleHeadings,\n    gdocType: OwidGdocType | undefined\n): string {\n    return sentenceCaseIfNotTopicPage(topicPageTitleHeadings[key], gdocType)\n}\n\nexport function generateToc(\n    body: OwidEnrichedGdocBlock[] | undefined,\n    isTocForSidebar: boolean = false,\n    gdocType?: OwidGdocType\n): TocHeadingWithSupertitle[] {\n    if (!body) return []\n\n    // For linear topic pages, we record h1s and h2s\n    // For the sdg-toc, we record h2s & h3s (as it was developed before we decided to use h1s as our top level heading)\n    // It would be nice to standardise this but it would require a migration, updating CSS, updating Gdocs, etc.\n    const [primary, secondary] = isTocForSidebar ? [1, 2] : [2, 3]\n    const toc: TocHeadingWithSupertitle[] = []\n\n    body.forEach((block) =>\n        traverseEnrichedBlock(block, (child) => {\n            if (child.type === \"heading\") {\n                const { level, text, supertitle } = child\n                const titleString = spansToUnformattedPlainText(text)\n                const supertitleString = supertitle\n                    ? spansToUnformattedPlainText(supertitle)\n                    : \"\"\n                if (titleString && (level === primary || level === secondary)) {\n                    toc.push({\n                        title: titleString,\n                        supertitle: supertitleString,\n                        slug: urlSlug(`${supertitleString} ${titleString}`),\n                        isSubheading: level === secondary,\n                    })\n                }\n            }\n            if (!isTocForSidebar) return\n\n            if (child.type === \"all-charts\") {\n                toc.push({\n                    title: getTopicPageHeading(\"keyCharts\", gdocType),\n                    slug: ALL_CHARTS_ID,\n                    isSubheading: false,\n                })\n                return\n            }\n\n            if (child.type === \"featured-metrics\") {\n                toc.push({\n                    title: getTopicPageHeading(\"featuredData\", gdocType),\n                    slug: FEATURED_METRICS_ID,\n                    isSubheading: false,\n                })\n                return\n            }\n\n            if (child.type === \"research-and-writing\") {\n                const { heading } = child\n                const customHeadingCaseCorrected = sentenceCaseIfNotTopicPage(\n                    heading,\n                    gdocType\n                )\n                toc.push({\n                    title:\n                        customHeadingCaseCorrected ||\n                        getTopicPageHeading(\"researchAndWriting\", gdocType),\n                    slug: getResearchAndWritingId(heading),\n                    isSubheading: false,\n                })\n                return\n            }\n\n            if (child.type === \"featured-data-insights\") {\n                toc.push({\n                    title: getTopicPageHeading(\"dataInsights\", gdocType),\n                    slug: FEATURED_DATA_INSIGHTS_ID,\n                    isSubheading: false,\n                })\n                return\n            }\n\n            if (child.type === \"explore-data-section\") {\n                const title = child.title || EXPLORE_DATA_SECTION_DEFAULT_TITLE\n                toc.push({\n                    title: sentenceCaseIfNotTopicPage(title, gdocType),\n                    slug: EXPLORE_DATA_SECTION_ID,\n                    isSubheading: false,\n                })\n                return\n            }\n        })\n    )\n\n    return toc\n}\n\n// The TOC arrives flat and document-ordered, with `isSubheading` marking the\n// h2s. Group it so each h1 carries its following h2s: every non-subheading\n// opens a new section, every subheading attaches to the enclosing h1's\n// section. Leading subheadings with no preceding h1 (editorially unusual)\n// each become their own section so none are dropped.\nexport function groupTocIntoSections(\n    headings: TocHeadingWithSupertitle[]\n): TocSidebarSection[] {\n    const sections: TocSidebarSection[] = []\n    for (const heading of headings) {\n        const current = sections.at(-1)\n        const currentIsH1Section = current && !current.heading.isSubheading\n        if (heading.isSubheading && currentIsH1Section) {\n            current.subheadings.push(heading)\n        } else {\n            sections.push({ heading, subheadings: [] })\n        }\n    }\n    return sections\n}\n\nexport function checkIsOwidGdocType(\n    gdocType: unknown\n): gdocType is OwidGdocType {\n    return Object.values(OwidGdocType).includes(gdocType as any)\n}\n\nexport function isArrayOfNumbers(arr: unknown[]): arr is number[] {\n    return arr.every((item) => typeof item === \"number\")\n}\n\nexport function greatestCommonDivisor(a: number, b: number): number {\n    if (a === 0) return Math.abs(b)\n    return greatestCommonDivisor(b % a, a)\n}\n\nexport function findGreatestCommonDivisorOfArray(arr: number[]): number | null {\n    if (arr.length === 0) return null\n    if (arr.includes(1)) return 1\n    return new Set(arr)\n        .values()\n        .reduce((acc, num) => greatestCommonDivisor(acc, num))\n}\n\n// Makes sure that values are evenly spaced by inserting values at the greatest\n// common divisor of the gaps between consecutive values.\nexport function withUniformSpacing(values: number[]): number[] {\n    const deltas = rollingMap(values, (a, b) => b - a)\n    const gcd = findGreatestCommonDivisorOfArray(deltas)\n    if (gcd === null) return values\n    return _.range(values[0], values[values.length - 1] + gcd, gcd)\n}\n\nexport function lowercaseObjectKeys(\n    obj: Record<string, unknown>\n): Record<string, unknown> {\n    return Object.fromEntries(\n        Object.entries(obj).map(([key, value]) => [key.toLowerCase(), value])\n    )\n}\n\n/** Works for:\n * #dod:text\n * #dod:text-hyphenated\n * #dod:text_underscored\n * #dod:text_underscored-and-hyphenated\n * Duplicated in parser.ts\n */\nexport const detailOnDemandRegex = /#dod:([A-Za-z0-9_-]+)/\n\nexport const detailOnDemandLinkRegex = /\\[([^\\]]+)\\]\\(#dod:([A-Za-z0-9_-]+)\\)/g\n\nexport const guidedChartRegex = /#guide:(https?:\\/\\/[^\\s]+)/\n\n/**\n * Matches plaintext callout token syntax:\n * $latestTime(shortName)\n * $latestValue(shortName)\n *\n * Group 1: function name (e.g., \"latestTime\", \"latestValue\")\n * Group 2: parameters (e.g., \"shortName\")\n */\nexport const plaintextCalloutRegex =\n    /\\$(latestValueWithUnit|latestValue|latestTime)\\(([^)]*)\\)/g\n\nexport function extractDetailsFromSyntax(str: string): string[] {\n    return [...str.matchAll(new RegExp(detailOnDemandRegex, \"g\"))].map(\n        ([_, term]) => term\n    )\n}\n\nexport function stripDetailOnDemandLinks(str: string): string {\n    return str.replace(detailOnDemandLinkRegex, \"$1\")\n}\n\n/**\n * If you're using this type guard, make sure you're okay with Fragments\n * See https://github.com/owid/owid-grapher/issues/3426\n */\nexport function checkIsGdocPost(x: unknown): x is OwidGdocPostInterface {\n    const type = _.get(x, \"content.type\") as OwidGdocType | undefined\n    return [\n        OwidGdocType.Article,\n        OwidGdocType.TopicPage,\n        OwidGdocType.LinearTopicPage,\n        OwidGdocType.Fragment,\n        OwidGdocType.AboutPage,\n    ].includes(type as any)\n}\n\n/**\n * Fragments were developed before we had a robust gdoc type system in place\n * Use this function when you want to be sure you're dealing with published editorial content\n * and not just content that has the right shape\n * See https://github.com/owid/owid-grapher/issues/3426\n */\nexport function checkIsGdocPostExcludingFragments(\n    x: unknown\n): x is OwidGdocPostInterface {\n    const type = _.get(x, \"content.type\") as OwidGdocType | undefined\n    return [\n        OwidGdocType.Article,\n        OwidGdocType.TopicPage,\n        OwidGdocType.LinearTopicPage,\n        OwidGdocType.AboutPage,\n    ].includes(type as any)\n}\n\nexport function checkIsDataInsight(\n    gdoc: OwidGdoc\n): gdoc is OwidGdocDataInsightInterface {\n    return gdoc.content.type === OwidGdocType.DataInsight\n}\n\nexport function checkIsAnnouncement(\n    gdoc: OwidGdoc\n): gdoc is OwidGdocAnnouncementInterface {\n    return gdoc.content.type === OwidGdocType.Announcement\n}\n\n/**\n * Resolve an Announcement's LatestType from its kicker. Slugifies so\n * case/spacing variants (\"Data Update\", \"Data update\") still map to the\n * canonical slug. Anything else — missing, blank, or unrecognized — falls\n * back to \"announcement\". The save-side validator\n * (GdocAnnouncement._validateSubclass) only accepts the canonical slugs,\n * so any edit forces legacy values into shape.\n */\nexport function deriveAnnouncementLatestType(\n    kicker?: string\n): AnnouncementLatestType {\n    const slug = slugify(kicker ?? \"\")\n    return (ANNOUNCEMENT_LATEST_TYPES as readonly string[]).includes(slug)\n        ? (slug as AnnouncementLatestType)\n        : \"announcement\"\n}\n\nexport function checkIsAboutPage(\n    gdoc: OwidGdoc\n): gdoc is OwidGdocAboutInterface {\n    return gdoc.content.type === OwidGdocType.AboutPage\n}\n\nexport function checkIsFeaturedViz(\n    gdoc: OwidGdoc\n): gdoc is OwidGdocFeaturedVizInterface {\n    return gdoc.content.type === OwidGdocType.FeaturedViz\n}\n\nexport function checkIsAuthor(gdoc: OwidGdoc): gdoc is OwidGdocAuthorInterface {\n    return gdoc.content.type === OwidGdocType.Author\n}\n\nexport function checkIsHomepage(\n    gdoc: OwidGdoc\n): gdoc is OwidGdocHomepageInterface {\n    return gdoc.content.type === OwidGdocType.Homepage\n}\n\n/**\n * Posts that should show up in the chronological algolia index\n * for dynamic RSS feeds & /latest page.\n *\n * See `isChronologicalGdocInstance` for a class-narrowing variant used by\n * the bulk indexer.\n */\nexport function checkIsChronologicalGdoc(gdoc: {\n    content: { type?: OwidGdocType }\n}): gdoc is ChronologicalGdoc {\n    return CHRONOLOGICAL_INDEX_TYPES.has(gdoc.content.type as string)\n}\n\n/**\n * Posts that should show up on /latest. Subset of `checkIsChronologicalGdoc`\n * that excludes topic pages (which are indexed for the atom feed but\n * filtered out of /latest by `LATEST_BASE_FILTER`).\n */\nexport function checkIsLatestFeedGdoc(gdoc: {\n    content: { type?: OwidGdocType }\n}): gdoc is LatestFeedGdoc {\n    return LATEST_FEED_TYPES.has(gdoc.content.type as string)\n}\n\n/**\n * Returns the cartesian product of the given arrays.\n *\n * For example, `cartesian([[\"a\", \"b\"], [\"x\", \"y\"]])` returns `[[\"a\", \"x\"], [\"a\", \"y\"], [\"b\", \"x\"], [\"b\", \"y\"]]`\n */\nexport function cartesian<T>(matrix: T[][]): T[][] {\n    if (matrix.length === 0) return []\n    if (matrix.length === 1) return matrix[0].map((i) => [i])\n    return matrix.reduce<T[][]>(\n        (acc, curr) => acc.flatMap((i) => curr.map((j) => [...i, j])),\n        [[]]\n    )\n}\n\n// Remove any parenthetical content from _the end_ of a string\n// E.g. \"Africa (UN)\" -> \"Africa\"\nexport function removeTrailingParenthetical(str: string): string {\n    return str.replace(/\\s*\\(.*\\)$/, \"\")\n}\n\nconst commafyFormatter = lazy(() => new Intl.NumberFormat(\"en-US\"))\n/**\n * Example: 12000 -> \"12,000\"\n */\nexport function commafyNumber(value: number): string {\n    return commafyFormatter().format(value)\n}\n\nexport function isFiniteWithGuard(value: unknown): value is number {\n    return isFinite(value as any)\n}\n\n/**\n * Collect unique tag names from every supplied path for the requested tags.\n * Includes the original tags when they are present in those paths; no path is\n * ranked or selected. Used for search facets and notification matching.\n * Use getTagHierarchiesByChildName for full paths, or\n * getTopicHierarchiesByChildName to retain only areas and topics.\n */\nexport const getUniqueNamesFromTagHierarchies = (\n    tagNames: string[],\n    tagHierarchiesByChildName: Record<\n        string,\n        Pick<DbPlainTag, \"id\" | \"name\" | \"slug\">[][]\n    >\n): string[] => {\n    return R.unique(\n        tagNames.flatMap((tagName) =>\n            (tagHierarchiesByChildName[tagName] ?? []) // Skip tags without paths.\n                .flatMap((tagHierarchy) => tagHierarchy.map((tag) => tag.name))\n        )\n    )\n}\n\nexport function createTagGraph(\n    tagGraphByParentId: Record<number, any>,\n    rootId: number\n): TagGraphRoot {\n    const tagGraph: TagGraphRoot = {\n        id: rootId,\n        name: TagGraphRootName,\n        slug: null,\n        isTopic: false,\n        isSearchable: false,\n        path: [rootId],\n        weight: 0,\n        children: [],\n    }\n\n    function recursivelySetChildren(node: TagGraphNode): TagGraphNode {\n        const children = tagGraphByParentId[node.id]\n        if (!children) return node\n\n        for (const child of children) {\n            const childNode: TagGraphNode = {\n                id: child.childId,\n                path: [...node.path, child.childId],\n                name: child.name,\n                slug: child.slug,\n                isTopic: child.isTopic,\n                isSearchable: child.isSearchable,\n                weight: child.weight,\n                children: [],\n            }\n\n            node.children.push(recursivelySetChildren(childNode))\n        }\n        return node\n    }\n\n    return recursivelySetChildren(tagGraph) as TagGraphRoot\n}\n\nexport const getAllChildrenOfArea = (area: TagGraphNode): TagGraphNode[] => {\n    const children = []\n    for (const child of area.children) {\n        children.push(child)\n        children.push(...getAllChildrenOfArea(child))\n    }\n    return children\n}\n\n/**\n * topicTagGraph.json includes sub-areas: non-searchable tags that have searchable children\n * e.g. \"Health\" is an area, \"Life & Death\" is a sub-area, and \"Life Expectancy\" is a topic,\n * This function flattens the graph by removing sub-areas and moving their children up to the area level\n * e.g. \"Life Expectancy\" becomes a child of \"Health\" instead of \"Life & Death\"\n * We need this because the all-topics section on the homepage renders sub-areas, but the site nav doesn't\n * Note that topics can have children (e.g. \"Air Pollution\" is a topic, and \"Indoor Air Pollution\" is a sub-topic)\n * Such cases are not flattened here, but in the frontend with getAllChildrenOfArea\n * Searchable tags include both topics (tags with a topic page) and tags with searchableInAlgolia set\n */\nexport function flattenNonTopicNodes(tagGraph: TagGraphRoot): TagGraphRoot {\n    const flattenNodes = (nodes: TagGraphNode[]): TagGraphNode[] =>\n        nodes.flatMap((node) =>\n            !node.isSearchable && node.children.length\n                ? flattenNodes(node.children)\n                : node.isSearchable\n                  ? [{ ...node, children: flattenNodes(node.children) }]\n                  : []\n        )\n\n    return {\n        ...tagGraph,\n        children: tagGraph.children.map((area) => ({\n            ...area,\n            children: flattenNodes(area.children),\n        })),\n    }\n}\n\nexport function formatInlineList(\n    array: unknown[],\n    {\n        connector = \"and\",\n        oxfordComma = false,\n    }: { connector?: \"and\" | \"or\"; oxfordComma?: boolean } = {}\n): string {\n    if (array.length === 0) return \"\"\n    if (array.length === 1) return `${array[0]}`\n    const comma = oxfordComma && array.length > 2 ? \",\" : \"\"\n    return `${array.slice(0, -1).join(\", \")}${comma} ${connector} ${R.last(array)}`\n}\n\nexport function formatAuthors(authors: string[]): string {\n    return formatInlineList(authors, { oxfordComma: true })\n}\n\nexport function formatAuthorsForBibtex(authors: string[]): string {\n    return authors.join(\" and \")\n}\n\n// The below comment marks this function as side-effect free, meaning that the bundler\n// can safely remove it if it is not used.\n// This is useful for e.g. constants that are only used in some parts of the codebase.\n// See https://rollupjs.org/configuration-options/#no-side-effects\n// @__NO_SIDE_EFFECTS__\n// Other than that, this function is like lodash's once, in that it'll run fn at most once\n// and then save the result for future calls.\nexport function lazy<T>(fn: () => T): () => T {\n    let hasRun = false\n    let _value: T\n    return () => {\n        if (!hasRun) {\n            _value = fn()\n            hasRun = true\n        }\n        return _value\n    }\n}\n\nexport function traverseObjects<T extends Record<string, any>>(\n    obj: T,\n    ref: Record<string, any>,\n    cb: (objValue: unknown, refValue: unknown, key: string) => unknown\n): Partial<T> {\n    const result: any = {}\n    for (const key in obj) {\n        if (R.isPlainObject(obj[key]) && R.isPlainObject(ref[key])) {\n            result[key] = traverseObjects(obj[key], ref[key], cb)\n        } else {\n            result[key] = cb(obj[key], ref[key], key)\n        }\n    }\n    return result\n}\n\nexport function getParentIndicatorIdFromChartConfig(\n    config: GrapherInterface\n): number | undefined {\n    const { chartTypes, dimensions } = config\n\n    const chartType = chartTypes?.[0] ?? GRAPHER_CHART_TYPES.LineChart\n    if (chartType === GRAPHER_CHART_TYPES.ScatterPlot) return undefined\n    if (!dimensions) return undefined\n\n    const yVariableIds = dimensions\n        .filter((d) => d.property === DimensionProperty.y)\n        .map((d) => d.variableId)\n\n    if (yVariableIds.length !== 1) return undefined\n\n    return yVariableIds[0]\n}\n\nexport function extractLinksFromMarkdown(markdown: string): [string, string][] {\n    return [...markdown.matchAll(/\\[(.*?)\\]\\((.*?)\\)/g)].map((match) => [\n        match[1],\n        match[2],\n    ])\n}\n\nexport function getPaginationPageNumbers(\n    currentPageNumber: number,\n    totalPageCount: number,\n    size: number = 5\n): number[] {\n    let start = Math.max(1, currentPageNumber - Math.floor(size / 2))\n\n    if (start + size > totalPageCount) {\n        start = Math.max(1, totalPageCount - size + 1)\n    }\n\n    const pageNumbers = []\n\n    for (let i = start; i <= Math.min(start + size - 1, totalPageCount); i++) {\n        pageNumbers.push(i)\n    }\n\n    return pageNumbers\n}\n\n/**\n * Checks for content equality, but doesn't care about the order of elements.\n *\n * For example, `isArrayDifferentFromReference([1, 2], [2, 1])` returns `false`.\n */\nexport function isArrayDifferentFromReference<T>(\n    array: T[],\n    referenceArray: T[]\n): boolean {\n    if (array.length !== referenceArray.length) return true\n    return _.difference(array, referenceArray).length > 0\n}\n\n// When reading from an asset map, we want a very particular behavior:\n// If the asset map is entirely undefined, then we want to just fail silently and return the fallback.\n// If the asset map is defined but the asset is not found, however, then we want to throw an error.\n// This is to avoid invisible errors that'll lead to runtime errors or 404s.\n\nexport function readFromAssetMap(\n    assetMap: AssetMap | undefined,\n    { path, fallback }: { path: string; fallback: string }\n): string\n\nexport function readFromAssetMap(\n    assetMap: AssetMap | undefined,\n    { path, fallback }: { path: string; fallback?: string }\n): string | undefined\n\nexport function readFromAssetMap(\n    assetMap: AssetMap | undefined,\n    { path, fallback }: { path: string; fallback?: string }\n): string | undefined {\n    if (!assetMap) return fallback\n\n    const assetValue = assetMap[path]\n    if (assetValue === undefined)\n        throw new Error(`Entry for asset not found in asset map: ${path}`)\n    return assetValue\n}\n\nexport const getUserNavigatorLanguages = (): readonly string[] => {\n    return navigator.languages ?? [navigator.language]\n}\n\nexport const getUserNavigatorLanguagesNonEnglish = (): readonly string[] => {\n    return getUserNavigatorLanguages().filter((lang) => !lang.startsWith(\"en\"))\n}\n\n/**\n * Merge multiple objects into a single object.\n * Arrays are overwritten completely instead of merged.\n */\nexport const merge: typeof _.merge = (\n    ...objects: Parameters<typeof _.merge>\n) => {\n    return _.mergeWith(\n        {}, // merge mutates the first argument\n        ...objects,\n        // Overwrite arrays completely instead of merging them.\n        // Otherwise fall back to the default merge behavior.\n        (_: unknown, srcValue: unknown) => {\n            return Array.isArray(srcValue) ? srcValue : undefined\n        }\n    )\n}\n\nexport function calculateTrendDirection(\n    startValue?: PrimitiveType,\n    endValue?: PrimitiveType,\n    formatValue?: (value: PrimitiveType) => string\n): GrapherTrendArrowDirection | undefined {\n    if (\n        startValue === undefined ||\n        endValue === undefined ||\n        typeof startValue !== \"number\" ||\n        typeof endValue !== \"number\"\n    )\n        return undefined\n\n    if (formatValue && formatValue(startValue) === formatValue(endValue))\n        return \"right\"\n\n    return endValue > startValue\n        ? \"up\"\n        : endValue < startValue\n          ? \"down\"\n          : \"right\"\n}\n\n/**\n * Removes a single pair of outer parentheses from a string, if present.\n *\n * For example:\n *   \"(example)\" => \"example\"\n *   \"no parentheses\" => \"no parentheses\"\n *   \"(example (with inner))\" => \"example (with inner)\"\n *\n * Leading and trailing whitespace is trimmed before checking for parentheses.\n */\nexport function stripOuterParentheses(input: string): string {\n    return input.trim().replace(/^\\((.*)\\)$/, \"$1\")\n}\n\nexport function getDisplayUnit(\n    column: { unit?: string; shortUnit?: string },\n    { allowTrivial = false }: { allowTrivial?: boolean } = {}\n): string | undefined {\n    if (!column.unit) return undefined\n\n    // The unit is considered trivial if it is the same as the short unit\n    const isTrivial = column.unit === column.shortUnit\n    const unit = allowTrivial || !isTrivial ? column.unit : undefined\n\n    // Remove parentheses from the beginning and end of the unit\n    const strippedUnit = unit ? stripOuterParentheses(unit) : undefined\n\n    return strippedUnit\n}\n\nexport function dimensionsToViewId(\n    dimensions: Record<string, string> // Keys: dimension slugs, values: choice slugs\n): string {\n    return Object.entries(dimensions)\n        .sort(([keyA], [keyB]) => keyA.localeCompare(keyB))\n        .map(([key, value]) => `${slugify(key)}=${slugify(value)}`)\n        .join(\"__\")\n        .toLowerCase()\n}\n","import {\n    ARCHIVE_DATE_TIME_FORMAT,\n    ArchivalDateString,\n} from \"@ourworldindata/types\"\nimport dayjs from \"../dayjs.js\"\n\nexport interface ArchivalTimestamp {\n    date: Date\n    formattedDate: ArchivalDateString\n}\n\nexport type DateInput = Date | ArchivalDateString | string | dayjs.Dayjs\n\nexport const parseArchivalDate = (dateInput: DateInput): dayjs.Dayjs => {\n    if (typeof dateInput === \"string\") {\n        if (dateInput.length === ARCHIVE_DATE_TIME_FORMAT.length)\n            return dayjs.utc(dateInput, ARCHIVE_DATE_TIME_FORMAT)\n        else return dayjs.utc(dateInput)\n    }\n    return dayjs.utc(dateInput)\n}\n\nexport const formatAsArchivalDate = (date: dayjs.Dayjs): ArchivalDateString =>\n    date.format(ARCHIVE_DATE_TIME_FORMAT) as ArchivalDateString\n\nexport const convertToArchivalDateStringIfNecessary = (\n    dateInput: DateInput\n): ArchivalDateString => {\n    if (\n        typeof dateInput === \"string\" &&\n        dateInput.length === ARCHIVE_DATE_TIME_FORMAT.length\n    )\n        return dateInput as ArchivalDateString\n\n    return formatAsArchivalDate(parseArchivalDate(dateInput))\n}\n\nexport const getDateForArchival = (): ArchivalTimestamp => {\n    const date = dayjs\n        .utc()\n        // it's important here that we explicitly set the milliseconds to 0 -\n        // otherwise we run the risk of MySQL rounding up to the next second,\n        // which then breaks the archival URL\n        .millisecond(0)\n    const formattedDate = formatAsArchivalDate(date)\n\n    return { date: date.toDate(), formattedDate }\n}\n\nexport const formatDateForCitation = (date: dayjs.Dayjs): string =>\n    date.format(\"MMMM D, YYYY\")\n\nexport const getPhraseForArchivalDate = (\n    archivalDate: string | undefined\n): string | undefined => {\n    if (!archivalDate) return undefined\n\n    const parsedDate = parseArchivalDate(archivalDate)\n    if (!parsedDate.isValid()) return \"(archived).\"\n\n    const formatted = formatDateForCitation(parsedDate)\n    return `(archived on ${formatted}).`\n}\n","import {\n    OwidOrigin,\n    OwidVariableWithSource,\n    OwidProcessingLevel,\n    DisplaySource,\n    IndicatorTitleWithFragments,\n    OwidSource,\n    PrimaryTopic,\n    type BespokeMetadata,\n} from \"@ourworldindata/types\"\nimport * as _ from \"lodash-es\"\nimport { excludeUndefined } from \"./Util\"\nimport dayjs from \"./dayjs.js\"\nimport {\n    formatDateForCitation,\n    getPhraseForArchivalDate,\n} from \"./archival/archivalDate.js\"\n\nexport interface OriginAttribution {\n    label: string\n    url?: string\n}\n\nconst getOriginAttributionLabel = (origin: OwidOrigin): string | undefined => {\n    if (origin.attribution) return origin.attribution\n\n    const name = origin.producer ?? origin.title ?? origin.urlMain\n    if (!name) return undefined\n\n    const yearPublished = origin.datePublished\n        ? dayjs(origin.datePublished, [\"YYYY-MM-DD\", \"YYYY\"]).year()\n        : undefined\n\n    return yearPublished ? `${name} (${yearPublished})` : name\n}\n\nexport function getOriginAttributions(\n    origins: OwidOrigin[] | undefined\n): OriginAttribution[] {\n    if (!origins) return []\n\n    return excludeUndefined(\n        origins.map((origin) => {\n            const label = getOriginAttributionLabel(origin)\n            return label ? { label, url: origin.urlMain } : undefined\n        })\n    )\n}\n\nexport function getAttributionFragmentsFromVariable(\n    variable: Pick<\n        OwidVariableWithSource,\n        \"presentation\" | \"origins\" | \"source\"\n    >\n): string[] {\n    if (\n        variable.presentation?.attribution &&\n        variable.presentation?.attribution !== \"\"\n    )\n        return [variable.presentation?.attribution]\n\n    const originAttributions = excludeUndefined(\n        (variable.origins ?? []).map(getOriginAttributionLabel)\n    )\n    const name = variable.source?.name\n    return _.uniq(_.compact([name, ...originAttributions]))\n}\n\nexport function getAttributionFragmentsFromBespokeMetadata(\n    metadata: Pick<BespokeMetadata, \"attribution\" | \"origins\">\n): string[] {\n    return getAttributionFragmentsFromVariable({\n        presentation: { attribution: metadata.attribution },\n        origins: metadata.origins,\n    })\n}\n\nexport const formatAttributions = (attributions: string[]): string =>\n    attributions.join(\"; \")\n\nexport const formatAttributionsShortened = (attributions: string[]): string =>\n    attributions.length > 3\n        ? `${attributions[0]} and other sources`\n        : formatAttributions(attributions)\n\ninterface ETLPathComponents {\n    channel: string\n    producer: string\n    version: string\n    dataset: string\n    table: string\n    indicator: string\n}\n\nexport const getETLPathComponents = (path: string): ETLPathComponents => {\n    const [channel, producer, version, dataset, table, indicator] =\n        path.split(/[/#]/)\n    return { channel, producer, version, dataset, table, indicator }\n}\n\nconst isFullDate = (date: string): boolean => {\n    const fullDateRegex = /^\\d{4}-\\d{2}-\\d{2}$/\n    return !!date.match(fullDateRegex)\n}\n\nexport const getLastUpdatedFromVariable = (\n    variable: Pick<OwidVariableWithSource, \"catalogPath\" | \"origins\">\n): string | undefined => {\n    // if possible, extract date from the catalog path\n    const version = getETLPathComponents(variable.catalogPath ?? \"\")?.version\n    if (version && isFullDate(version)) return version\n\n    const { origins = [] } = variable\n    const isoDatesAccessed = excludeUndefined(\n        origins.map((origin) => origin.dateAccessed)\n    )\n\n    return _.max(isoDatesAccessed)\n}\n\nexport const getNextUpdateFromVariable = (\n    variable: Pick<OwidVariableWithSource, \"catalogPath\" | \"updatePeriodDays\">\n): string | undefined => {\n    const lastUpdated = getLastUpdatedFromVariable(variable)\n    let nextUpdate = undefined\n    if (variable.updatePeriodDays) {\n        const lastUpdatedDate = dayjs(lastUpdated)\n        const scheduledUpdate = lastUpdatedDate.add(\n            variable.updatePeriodDays,\n            \"day\"\n        )\n        // If the next update date is in the past, we set it to the next month\n        if (scheduledUpdate.isBefore(dayjs()))\n            nextUpdate = dayjs().add(1, \"month\")\n        else nextUpdate = scheduledUpdate\n    }\n    return nextUpdate?.format(\"YYYY-MM-DD\")\n}\n\nconst OWID_ATTRIBUTION = \"Our World in Data\"\n\nconst getPhraseForProcessingLevel = (\n    processingLevel: OwidProcessingLevel | undefined\n): string => {\n    switch (processingLevel) {\n        case \"major\":\n            return \"with major processing\"\n        case \"minor\":\n            return \"with minor processing\"\n        default:\n            return \"processed\"\n    }\n}\n\nconst isOwidTheSoleAttribution = (attribution: string | string[]): boolean => {\n    const fragments = Array.isArray(attribution) ? attribution : [attribution]\n    return (\n        fragments.length === 1 &&\n        fragments[0].toLowerCase() === OWID_ATTRIBUTION.toLowerCase()\n    )\n}\n\nexport const getProcessingPhraseForAttribution = (\n    attribution: string | string[],\n    owidProcessingLevel: OwidProcessingLevel | undefined\n): string | undefined =>\n    isOwidTheSoleAttribution(attribution)\n        ? undefined\n        : getPhraseForProcessingLevel(owidProcessingLevel)\n\nconst prepareOriginForDisplay = (origin: OwidOrigin): DisplaySource => {\n    const title = origin.title !== origin.producer ? origin.title : undefined\n    const label = excludeUndefined([origin.producer, title]).join(\" – \")\n\n    return {\n        label,\n        description: origin.description,\n        retrievedOn: origin.dateAccessed,\n        retrievedFrom: origin.urlMain,\n        citation: origin.citationFull,\n        // Read only by the data-download readme, which lists each source once and\n        // has room to say more about it than the Sources UIs do.\n        producer: origin.producer,\n        datePublished: origin.datePublished,\n        urlDownload: origin.urlDownload,\n        license: origin.license,\n    }\n}\n\nexport const prepareSourcesForDisplay = (\n    variable: Pick<OwidVariableWithSource, \"origins\" | \"source\">\n): DisplaySource[] => {\n    const { origins, source } = variable\n\n    const sourcesForDisplay: DisplaySource[] = []\n\n    if (\n        source?.name &&\n        (source?.dataPublishedBy || source?.retrievedDate || source?.link)\n    ) {\n        sourcesForDisplay.push({\n            label: source?.name,\n            dataPublishedBy: source?.dataPublishedBy,\n            retrievedOn: source?.retrievedDate,\n            retrievedFrom: source?.link,\n        })\n    }\n\n    if (origins && origins.length > 0) {\n        sourcesForDisplay.push(\n            ...origins.map((origin) => prepareOriginForDisplay(origin))\n        )\n    }\n\n    return sourcesForDisplay\n}\n\nexport const getAttributionWithProcessing = (\n    attribution: string,\n    owidProcessingLevel: OwidProcessingLevel | undefined\n): string => {\n    const processingPhrase = getProcessingPhraseForAttribution(\n        attribution,\n        owidProcessingLevel\n    )\n\n    return processingPhrase\n        ? `${attribution} – ${processingPhrase} by ${OWID_ATTRIBUTION}`\n        : attribution\n}\n\nconst getCitationShort = ({\n    attributions,\n    owidProcessingLevel,\n}: {\n    attributions: string[]\n    owidProcessingLevel?: OwidProcessingLevel\n}): string => {\n    return getAttributionWithProcessing(\n        formatAttributionsShortened(attributions),\n        owidProcessingLevel\n    )\n}\n\nconst getCitationLong = ({\n    indicatorTitle,\n    origins,\n    source,\n    attributions,\n    attributionShort,\n    titleVariant,\n    owidProcessingLevel,\n    citationUrl,\n    archivalDate,\n}: {\n    indicatorTitle: IndicatorTitleWithFragments\n    origins: OwidOrigin[]\n    source?: OwidSource\n    attributions: string[]\n    attributionShort?: string\n    titleVariant?: string\n    owidProcessingLevel?: OwidProcessingLevel\n    citationUrl?: string\n    archivalDate?: string\n}): string => {\n    const citationTitleFragments =\n        attributionShort && titleVariant\n            ? `${attributionShort} – ${titleVariant}`\n            : attributionShort || titleVariant\n    const attributionWithProcessing = getAttributionWithProcessing(\n        formatAttributions(attributions),\n        owidProcessingLevel\n    )\n    const titleWithFragments = excludeUndefined([\n        indicatorTitle.title,\n        citationTitleFragments,\n    ]).join(\" – \")\n    const originCitations = _.uniq(\n        origins.map((origin) => {\n            const title = origin.title ?? origin.titleSnapshot\n            const versionProducer = origin.versionProducer\n                ? \" \" + origin.versionProducer\n                : \"\"\n            return excludeUndefined([\n                origin.producer,\n                title ? `“${title}${versionProducer}”` : undefined,\n            ]).join(\", \")\n        })\n    ).join(\"; \")\n    const today = formatDateForCitation(dayjs())\n    const archivalPhrase = getPhraseForArchivalDate(archivalDate)\n    return excludeUndefined([\n        `${attributionWithProcessing}.`,\n        `“${titleWithFragments}” [dataset].`,\n        originCitations\n            ? `${originCitations} [original data].`\n            : source?.name\n              ? `${source?.name} [original data].`\n              : undefined,\n        citationUrl\n            ? `Retrieved ${today} from ${citationUrl}${archivalPhrase ? ` ${archivalPhrase}` : \"\"}`\n            : undefined,\n    ]).join(\" \")\n}\n\nconst getCitationDatapage = ({\n    indicatorTitle,\n    origins,\n    source,\n    primaryTopic,\n    citationUrl,\n    archivalDate,\n}: {\n    indicatorTitle: IndicatorTitleWithFragments\n    origins: OwidOrigin[]\n    source?: OwidSource\n    primaryTopic?: PrimaryTopic\n    citationUrl: string\n    archivalDate?: string\n}): string => {\n    const currentYear = dayjs().year()\n    const producers = _.uniq(origins.map((origin) => `${origin.producer}`))\n    const adaptedFrom =\n        producers.length > 0 ? producers.join(\", \") : source?.name\n\n    // Add a period to the primary topic citation unless it already ends with a\n    // period or question mark.\n    const maybeAddPeriod = (s: string): string =>\n        s.endsWith(\"?\") || s.endsWith(\".\") ? s : `${s}.`\n    const primaryTopicCitation = maybeAddPeriod(primaryTopic?.citation ?? \"\")\n    const archivalPhrase = getPhraseForArchivalDate(archivalDate)\n    return excludeUndefined([\n        primaryTopic\n            ? `“Data Page: ${indicatorTitle.title}”, part of the following publication: ${primaryTopicCitation}`\n            : `“Data Page: ${indicatorTitle.title}”. Our World in Data (${currentYear}).`,\n        adaptedFrom ? `Data adapted from ${adaptedFrom}.` : undefined,\n        `Retrieved from ${citationUrl} [online resource]${\n            archivalPhrase ? ` ${archivalPhrase}` : \"\"\n        }`,\n    ]).join(\" \")\n}\n\nexport const getIndicatorCitations = ({\n    indicatorTitle,\n    origins,\n    source,\n    attributions,\n    attributionShort,\n    titleVariant,\n    owidProcessingLevel,\n    citationUrl,\n    archivalDate,\n    primaryTopic,\n}: {\n    indicatorTitle: IndicatorTitleWithFragments\n    origins: OwidOrigin[]\n    source?: OwidSource\n    attributions: string[]\n    attributionShort?: string\n    titleVariant?: string\n    owidProcessingLevel?: OwidProcessingLevel\n    citationUrl?: string\n    archivalDate?: string\n    primaryTopic?: PrimaryTopic\n}): { short: string; long: string; datapage?: string } => ({\n    short: getCitationShort({ attributions, owidProcessingLevel }),\n    long: getCitationLong({\n        indicatorTitle,\n        origins,\n        source,\n        attributions,\n        attributionShort,\n        titleVariant,\n        owidProcessingLevel,\n        citationUrl,\n        archivalDate,\n    }),\n    datapage: citationUrl\n        ? getCitationDatapage({\n              indicatorTitle,\n              origins,\n              source,\n              primaryTopic,\n              citationUrl,\n              archivalDate,\n          })\n        : undefined,\n})\n\nexport const formatSourceDate = (\n    date: string | undefined,\n    format: string\n): string | null => {\n    const parsedDate = dayjs(date ?? \"\", [\"YYYY-MM-DD\", \"DD/MM/YYYY\"])\n    if (!parsedDate.isValid()) return date || null\n    return parsedDate.format(format)\n}\n\nexport const getDateRange = (timespan: string): string | null => {\n    // This regex matches:\n    //   Beginning of string\n    //   Ignore whitespace\n    //   a named group called start that matches:\n    //     hyphen aka minus\n    //     1 or more digits\n    //   Ignore whitespace\n    //   hyphen aka minus OR en dash\n    //   Ignore whitespace\n    //   a named group called end that matches:\n    //     hyphen aka minus\n    //     1 or more digits\n    //   Ignore whitespace\n    //   End of string\n    const timespanRegex = /^\\s*(?<start>(-)?\\d+)\\s*(-|–)\\s*(?<end>(-)?\\d+)\\s*$/\n    const match = timespan.match(timespanRegex)\n    if (match) {\n        const firstYearString = match.groups?.start\n        const lastYearString = match.groups?.end\n        if (!firstYearString || !lastYearString) return null\n\n        const firstYear = parseInt(firstYearString, 10)\n        const lastYear = parseInt(lastYearString, 10)\n        let formattedFirstYear\n\n        // if start year is before year 0, add BCE to the end\n        if (firstYear < 0) formattedFirstYear = `${Math.abs(firstYear)} BCE`\n        else formattedFirstYear = firstYear\n\n        // if end year is before year 0, add BCE to the end or, if start year is after year 0, add CE to the end\n        let formattedLastYear\n        if (lastYear < 0) formattedLastYear = `${Math.abs(lastYear)} BCE`\n        else if (firstYear < 0) formattedLastYear = `${lastYear} CE`\n        else formattedLastYear = lastYear\n\n        if (lastYear < 0 || firstYear < 0)\n            return `${formattedFirstYear} – ${formattedLastYear}`\n        else return `${formattedFirstYear}–${formattedLastYear}`\n    }\n    return null\n}\n","// https://github.com/robertmassaioli/ts-is-present\n// A predicate for filtering an array of nulls and undefineds that returns the correct type\n\nexport const isPresent = <T>(t: T | undefined | null | void): t is T =>\n    t !== undefined && t !== null\n","import { format, FormatSpecifier } from \"d3-format\"\nimport { createFormatter } from \"./Util.js\"\nimport {\n    OwidVariableRoundingMode,\n    TickFormattingOptions,\n} from \"@ourworldindata/types\"\n\nconst DEFAULT_ABBREVIATION_THRESHOLD = 1e6\n\n// Used outside this module to figure out if the unit will be joined with the number.\nexport function checkIsVeryShortUnit(unit: string): unit is \"$\" | \"£\" | \"%\" {\n    return [\"%\", \"$\", \"£\"].includes(unit)\n}\n\nfunction checkIsUnitCurrency(unit: string): unit is \"$\" | \"£\" {\n    return [\"$\", \"£\"].includes(unit)\n}\n\nfunction checkIsUnitPercent(unit: string): unit is \"%\" {\n    return unit[0] === \"%\"\n}\n\nfunction getTrim({\n    roundingMode,\n    trailingZeroes,\n    numberAbbreviation,\n    type,\n}: {\n    roundingMode: OwidVariableRoundingMode\n    trailingZeroes: boolean\n    numberAbbreviation: \"long\" | \"short\" | false\n    type: \"f\" | \"s\" | \"r\"\n}): \"~\" | \"\" {\n    if (roundingMode === OwidVariableRoundingMode.significantFigures) {\n        // sig-fig columns keep trailing zeroes (\"1.50\") but not abbreviated\n        // values (\"1k\" instead of \"1.00k\")\n        return type === \"s\" && numberAbbreviation === \"short\" ? \"~\" : \"\"\n    }\n    return trailingZeroes ? \"\" : \"~\"\n}\n\nfunction getSign({ showPlus }: { showPlus: boolean }): \"+\" | \"\" {\n    return showPlus ? \"+\" : \"\"\n}\n\nfunction getSymbol({ unit }: { unit: string }): \"$\" | \"\" {\n    return checkIsUnitCurrency(unit) ? \"$\" : \"\"\n}\n\nfunction getType({\n    roundingMode,\n    numberAbbreviation,\n    abbreviationThreshold,\n    numSignificantFigures,\n    roundedMagnitude,\n    unit,\n}: {\n    roundingMode: OwidVariableRoundingMode\n    numberAbbreviation: \"long\" | \"short\" | false\n    abbreviationThreshold?: number\n    numSignificantFigures: number\n    roundedMagnitude: number\n    unit: string\n}): \"f\" | \"s\" | \"r\" {\n    // f: fixed-point notation (i.e. fixed number of decimal points)\n    // r: decimal notation, rounded to significant digits\n    // s: decimal notation with an SI prefix, rounded to significant digits\n\n    const typeMap: Record<OwidVariableRoundingMode, \"f\" | \"r\"> = {\n        [OwidVariableRoundingMode.decimalPlaces]: \"f\",\n        [OwidVariableRoundingMode.significantFigures]: \"r\",\n    }\n    const type = typeMap[roundingMode]\n\n    if (checkIsUnitPercent(unit)) {\n        return type\n    }\n    if (numberAbbreviation) {\n        // Compact labels of sig-fig columns are written out only as long as\n        // every digit shown is significant; from 10^sf on, writing out would\n        // pad with placeholder zeroes, and the abbreviation is both shorter and\n        // more honest (\"12.3k\" rather than \"12,300\"). At the default of 3 sig\n        // figs that's 1,000. Above 1 million everything abbreviates anyway\n        const defaultThreshold =\n            numberAbbreviation === \"short\" &&\n            roundingMode === OwidVariableRoundingMode.significantFigures\n                ? Math.min(\n                      10 ** numSignificantFigures,\n                      DEFAULT_ABBREVIATION_THRESHOLD\n                  )\n                : DEFAULT_ABBREVIATION_THRESHOLD\n        const threshold = abbreviationThreshold ?? defaultThreshold\n        return roundedMagnitude < threshold ? type : \"s\"\n    }\n\n    return type\n}\n\n// The magnitude of the value as the formatter will render it, i.e. rounded to\n// the precision that applies. Threshold decisions are made on this rather than\n// on the raw value, since rounding can push a value across a threshold: written\n// out with no decimals, 999,999.99 becomes 1,000,000, which belongs on the\n// abbreviated side of the 1 million mark\nfunction getRoundedMagnitude({\n    value,\n    roundingMode,\n    numDecimalPlaces,\n    numSignificantFigures,\n}: {\n    value: number\n    roundingMode: OwidVariableRoundingMode\n    numDecimalPlaces: number\n    numSignificantFigures: number\n}): number {\n    const specifier =\n        roundingMode === OwidVariableRoundingMode.significantFigures\n            ? `.${numSignificantFigures}r`\n            : `.${numDecimalPlaces}f`\n    // d3 renders negative numbers with a Unicode minus that doesn't parse back,\n    // so round the magnitude — that's all the thresholds care about\n    return +format(specifier)(Math.abs(value))\n}\n\n// For values below 1, rounding to significant figures is capped at\n// numDecimalPlaces decimal places: when sig-fig rounding would show more\n// decimals than that, the value is rounded to numDecimalPlaces instead.\n// This keeps small values from being spuriously precise, e.g. \"0.902\" deaths\n// when whole numbers are configured. Values of 1 or more always round to\n// significant figures\nfunction getEffectiveRoundingMode({\n    value,\n    roundingMode,\n    numDecimalPlaces,\n    numSignificantFigures,\n}: {\n    value: number\n    roundingMode: OwidVariableRoundingMode\n    numDecimalPlaces: number\n    numSignificantFigures: number\n}): OwidVariableRoundingMode {\n    if (roundingMode !== OwidVariableRoundingMode.significantFigures)\n        return roundingMode\n\n    // Only values below 1 are ever capped\n    if (Math.abs(value) >= 1) return roundingMode\n\n    // Keep sig figs when they show no more decimals than the cap allows\n    const roundedToSigFigs = format(`.${numSignificantFigures}r`)(\n        Math.abs(value)\n    )\n    const sigFigDecimals = roundedToSigFigs.split(\".\")[1]?.length ?? 0\n    if (sigFigDecimals <= numDecimalPlaces) return roundingMode\n\n    return OwidVariableRoundingMode.decimalPlaces\n}\n\nfunction getPrecision({\n    roundingMode,\n    numDecimalPlaces,\n    numSignificantFigures,\n    abbreviationSignificantFigures,\n    type,\n}: {\n    roundingMode: OwidVariableRoundingMode\n    numDecimalPlaces: number\n    numSignificantFigures: number\n    abbreviationSignificantFigures?: number\n    type: \"f\" | \"s\" | \"r\"\n}): string {\n    if (type === \"f\") {\n        return `${numDecimalPlaces}`\n    }\n\n    // \"r\" and \"s\" count significant digits\n    if (roundingMode === OwidVariableRoundingMode.significantFigures) {\n        // an abbreviated tick may need more precision than the column's own sig\n        // figs to stay apart from its neighbours (see the comment below); it\n        // never gets less\n        if (type === \"s\" && abbreviationSignificantFigures)\n            return `${Math.max(numSignificantFigures, abbreviationSignificantFigures)}`\n        return `${numSignificantFigures}`\n    }\n\n    // abbreviated numbers (\"s\") in decimal-places mode: fixed decimal places\n    // aren't meaningful for an abbreviated mantissa, so round to a hard-coded\n    // 3 significant figures — numSignificantFigures deliberately has no\n    // effect outside sig-fig mode. The axis may request more precision via\n    // abbreviationSignificantFigures to keep neighbouring ticks apart\n    return `${abbreviationSignificantFigures ?? 3}`\n}\n\nfunction replaceSIPrefixes({\n    string,\n    numberAbbreviation,\n}: {\n    string: string\n    numberAbbreviation: \"short\" | \"long\"\n}): string {\n    const prefix = string[string.length - 1]\n\n    const prefixMap: Record<string, Record<string, string>> = {\n        short: {\n            k: \"k\",\n            M: \"M\",\n            G: \"B\",\n            T: \"T\",\n            P: \"quad\",\n            E: \"quint\",\n            Z: \"sext\",\n            Y: \"sept\",\n        },\n        long: {\n            k: \"k\",\n            M: \" million\",\n            G: \" billion\",\n            T: \" trillion\",\n            P: \" quadrillion\",\n            E: \" quintillion\",\n            Z: \" sextillion\",\n            Y: \" septillion\",\n        },\n    }\n\n    if (prefixMap[numberAbbreviation][prefix]) {\n        return string.replace(prefix, prefixMap[numberAbbreviation][prefix])\n    }\n    return string\n}\n\nfunction postprocessString({\n    string,\n    roundingMode,\n    effectiveRoundingMode,\n    numberAbbreviation,\n    spaceBeforeUnit,\n    useNoBreakSpace,\n    unit,\n    value,\n    numDecimalPlaces,\n}: {\n    string: string\n    roundingMode: OwidVariableRoundingMode\n    effectiveRoundingMode: OwidVariableRoundingMode\n    numberAbbreviation: \"long\" | \"short\" | false\n    spaceBeforeUnit: boolean\n    useNoBreakSpace: boolean\n    unit: string\n    value: number\n    numDecimalPlaces: number\n}): string {\n    let output = string\n\n    // handling infinitesimal values\n    if (effectiveRoundingMode !== OwidVariableRoundingMode.significantFigures) {\n        // true when a sig-fig value was rounded to decimal places instead\n        const sigFigCapApplied =\n            roundingMode === OwidVariableRoundingMode.significantFigures\n        const tooSmallThreshold = Math.pow(10, -numDecimalPlaces).toPrecision(1)\n        if (\n            (numberAbbreviation || sigFigCapApplied) &&\n            0 < value &&\n            value < +tooSmallThreshold\n        ) {\n            output = \"<\" + output.replace(/0\\.?(\\d+)?/, tooSmallThreshold)\n        }\n    }\n\n    if (numberAbbreviation) {\n        output = replaceSIPrefixes({\n            string: output,\n            numberAbbreviation,\n        })\n    }\n\n    if (unit && !checkIsUnitCurrency(unit)) {\n        const spaceCharacter = useNoBreakSpace ? \"\\u00a0\" : \" \"\n        const appendage = spaceBeforeUnit ? spaceCharacter + unit : unit\n        output += appendage\n    }\n\n    return output\n}\n\nexport function formatValue(\n    value: number,\n    {\n        roundingMode = OwidVariableRoundingMode.decimalPlaces,\n        trailingZeroes = false, // only applies to fixed-point notation\n        unit = \"\",\n        spaceBeforeUnit = !checkIsUnitPercent(unit),\n        useNoBreakSpace = false,\n        showPlus = false,\n        numDecimalPlaces = 2, // only applies to fixed-point notation\n        numSignificantFigures = 3, // only applies to sig fig rounding\n        numberAbbreviation = \"long\",\n        abbreviationThreshold,\n        abbreviationSignificantFigures,\n    }: TickFormattingOptions\n): string {\n    const formatter = createFormatter(unit)\n\n    // in \"short\" contexts, written-out values of 1,000 or more drop their\n    // decimals: the fraction is noise at that magnitude, and full-precision\n    // surfaces (tooltips, the data table) don't use \"short\". The cutoff is\n    // 10^3 — where fractional digits fall below the same 3-significant-digit\n    // budget that abbreviated values use (see getPrecision). Percent values\n    // are exempt: they were never abbreviated, so their configured decimals\n    // are honored at any magnitude — the drop only replaces abbreviation,\n    // it never overrides numDecimalPlaces where it used to be respected\n    const effectiveNumDecimalPlaces =\n        numberAbbreviation === \"short\" &&\n        !checkIsUnitPercent(unit) &&\n        getRoundedMagnitude({\n            value,\n            roundingMode,\n            numDecimalPlaces,\n            numSignificantFigures,\n        }) >= 1e3\n            ? 0\n            : numDecimalPlaces\n\n    const effectiveRoundingMode = getEffectiveRoundingMode({\n        value,\n        roundingMode,\n        numDecimalPlaces: effectiveNumDecimalPlaces,\n        numSignificantFigures,\n    })\n    const type = getType({\n        roundingMode: effectiveRoundingMode,\n        numberAbbreviation,\n        abbreviationThreshold,\n        numSignificantFigures,\n        roundedMagnitude: getRoundedMagnitude({\n            value,\n            roundingMode: effectiveRoundingMode,\n            numDecimalPlaces: effectiveNumDecimalPlaces,\n            numSignificantFigures,\n        }),\n        unit,\n    })\n\n    // Explore how specifiers work here\n    // https://observablehq.com/@ikesau/d3-format-interactive-demo\n    const specifier = new FormatSpecifier({\n        zero: \"0\",\n        trim: getTrim({\n            roundingMode,\n            trailingZeroes,\n            numberAbbreviation,\n            type,\n        }),\n        sign: getSign({ showPlus }),\n        symbol: getSymbol({ unit }),\n        comma: \",\",\n        precision: getPrecision({\n            roundingMode,\n            numDecimalPlaces: effectiveNumDecimalPlaces,\n            numSignificantFigures,\n            abbreviationSignificantFigures,\n            type,\n        }),\n        type,\n    }).toString()\n\n    const formattedString = formatter(specifier)(value)\n\n    const postprocessedString = postprocessString({\n        string: formattedString,\n        roundingMode,\n        effectiveRoundingMode,\n        numberAbbreviation,\n        spaceBeforeUnit,\n        useNoBreakSpace,\n        unit,\n        value,\n        numDecimalPlaces: effectiveNumDecimalPlaces,\n    })\n\n    return postprocessedString\n}\n","import { formatValue } from \"./formatValue.js\"\n\nexport const SERVER_SIDE_DOWNLOAD_HELP_TEXT =\n    \"Download the data shown in this chart as a ZIP file containing a CSV \" +\n    \"file, metadata in JSON format, and a README. The CSV file can be opened \" +\n    \"in Excel, Google Sheets, and other data analysis tools.\"\n\nexport const triggerDownloadFromBlob = (filename: string, blob: Blob): void => {\n    const objectUrl = URL.createObjectURL(blob)\n    triggerDownloadFromUrl(filename, objectUrl)\n    URL.revokeObjectURL(objectUrl)\n}\n\nexport const triggerDownloadFromUrl = (filename: string, url: string): void => {\n    const downloadLink = document.createElement(\"a\")\n    downloadLink.setAttribute(\"href\", url)\n    downloadLink.setAttribute(\"download\", filename)\n    downloadLink.click()\n}\n\nexport async function downloadImage(\n    url: string,\n    filename: string\n): Promise<void> {\n    const response = await fetch(url)\n    const blob = await response.blob()\n    triggerDownloadFromBlob(filename, blob)\n}\n\nexport function makeDownloadCodeExamples(\n    csvUrl: string,\n    metadataUrl: string\n): Record<string, string> {\n    return {\n        \"Excel / Google Sheets\": `=IMPORTDATA(\"${csvUrl}\")`,\n        \"Python with Pandas\": `import pandas as pd\nimport requests\n\n# Fetch the data.\ndf = pd.read_csv(\"${csvUrl}\", storage_options = {'User-Agent': 'Our World In Data data fetch/1.0'})\n\n# Fetch the metadata\nmetadata = requests.get(\"${metadataUrl}\").json()`,\n        R: `library(jsonlite)\n\n# Fetch the data\ndf <- read.csv(\"${csvUrl}\")\n\n# Fetch the metadata\nmetadata <- fromJSON(\"${metadataUrl}\")`,\n        Stata: `import delimited \"${csvUrl}\", encoding(\"utf-8\") clear`,\n    }\n}\n\nexport function makeNumberOfRowsSnippet(numRows: number | undefined): string {\n    if (numRows === undefined) return \"\"\n    if (numRows <= 0) return \" (empty)\"\n    if (numRows === 1) return \" (1 row)\"\n    return ` (${formatValue(numRows, { numDecimalPlaces: 0 })} rows)`\n}\n\nexport function makeFullDownloadDescription(\n    numRows: number | undefined\n): string {\n    return `Includes all entities and time points${makeNumberOfRowsSnippet(\n        numRows\n    )}`\n}\n\nexport function makeFilteredDownloadDescription({\n    visibleIn = \"chart\",\n    numRows,\n}: {\n    visibleIn?: string\n    numRows: number | undefined\n}): string {\n    return `Includes only the entities and time points currently visible in the ${visibleIn}${makeNumberOfRowsSnippet(\n        numRows\n    )}`\n}\n","import {\n    Time,\n    TimeBound,\n    TimeBoundValue,\n    TimeBoundValueStr,\n} from \"@ourworldindata/types\"\nimport {\n    parseIntOrUndefined,\n    diffDatesInDays,\n    epochDate,\n    formatDay,\n    isNegativeInfinity,\n    isPositiveInfinity,\n} from \"./Util.js\"\nimport dayjs from \"./dayjs.js\"\nimport * as R from \"remeda\"\n\nexport const timeFromTimebounds = (\n    timeBound: TimeBound,\n    minTime: Time,\n    maxTime: Time\n): number => {\n    switch (timeBound) {\n        case -Infinity:\n            return minTime\n        case Infinity:\n            return maxTime\n        default:\n            return timeBound\n    }\n}\n\nconst hasAnInfinity = (timeBound: TimeBound): timeBound is TimeBoundValue =>\n    isNegativeInfinity(timeBound) || isPositiveInfinity(timeBound)\n\nconst formatTimeBound = (timeBound: TimeBound): string => {\n    if (isNegativeInfinity(timeBound)) return TimeBoundValueStr.unboundedLeft\n    if (isPositiveInfinity(timeBound)) return TimeBoundValueStr.unboundedRight\n    return `${timeBound}`\n}\n\nconst parseTimeBound = (str: string): TimeBound | undefined => {\n    if (str === TimeBoundValueStr.unboundedLeft)\n        return TimeBoundValue.negativeInfinity\n\n    if (str === TimeBoundValueStr.unboundedRight)\n        return TimeBoundValue.positiveInfinity\n\n    return parseIntOrUndefined(str)\n}\n\n// Use this to not repeat logic\nconst fromJSON = (value: TimeBound | string | undefined): number | undefined =>\n    R.isString(value) ? parseTimeBound(value) : value\n\nconst toJSON = (\n    bound: TimeBound | undefined\n): TimeBoundValueStr | number | undefined => {\n    if (bound === undefined) return undefined\n    if (isNegativeInfinity(bound)) return TimeBoundValueStr.unboundedLeft\n    if (isPositiveInfinity(bound)) return TimeBoundValueStr.unboundedRight\n    return bound\n}\n\nexport const minTimeBoundFromJSONOrNegativeInfinity = (\n    minTime: TimeBound | string | undefined\n): TimeBound => fromJSON(minTime) ?? TimeBoundValue.negativeInfinity\n\nexport const maxTimeBoundFromJSONOrPositiveInfinity = (\n    maxTime: TimeBound | string | undefined\n): TimeBound => fromJSON(maxTime) ?? TimeBoundValue.positiveInfinity\n\nexport const minTimeToJSON = toJSON\nexport const maxTimeToJSON = toJSON\n\nconst reISODateComponent = new RegExp(\"\\\\d{4}-[01]\\\\d-[0-3]\\\\d\")\nconst reISODate = new RegExp(`^(${reISODateComponent.source})$`)\n\nexport const timeBoundToTimeBoundString = (\n    timeBound: TimeBound,\n    isDate: boolean\n): string => {\n    if (hasAnInfinity(timeBound)) return formatTimeBound(timeBound)\n    return isDate\n        ? formatDay(timeBound, { format: \"YYYY-MM-DD\" })\n        : `${timeBound}`\n}\n\nconst parseTimeURIComponent = (param: string): TimeBound | undefined =>\n    reISODate.test(param)\n        ? diffDatesInDays(dayjs.utc(param), epochDate())\n        : parseTimeBound(param)\n\nconst upgradeLegacyTimeString = (time: string): string => {\n    // In the past we supported unbounded time parameters like time=2015.. which would be\n    // equivalent to time=2015..latest. We don't actively generate these kinds of URL any\n    // more because URLs ending with dots are not interpreted correctly by many services\n    // (Twitter, Facebook and others) - but we still want to recognize incoming requests\n    // for these \"legacy\" URLs!\n    if (time === \"..\") return \"earliest..latest\"\n    return time.endsWith(\"..\")\n        ? time + \"latest\"\n        : time.startsWith(\"..\")\n          ? \"earliest\" + time\n          : time\n}\n\nexport const getTimeDomainFromQueryString = (\n    time: string\n): [number, number] => {\n    time = upgradeLegacyTimeString(time)\n\n    const reIntComponent = new RegExp(\"\\\\-?\\\\d+\")\n    const reIntRange = new RegExp(\n        `^(${reIntComponent.source}|earliest)\\\\.\\\\.(${reIntComponent.source}|latest)$`\n    )\n    const reDateRange = new RegExp(\n        `^(${reISODateComponent.source}|earliest)\\\\.\\\\.(${reISODateComponent.source}|latest)$`\n    )\n    if (reIntRange.test(time) || reDateRange.test(time)) {\n        const [start, end] = time.split(\"..\")\n        return [\n            parseTimeURIComponent(start) ?? TimeBoundValue.negativeInfinity,\n            parseTimeURIComponent(end) ?? TimeBoundValue.positiveInfinity,\n        ]\n    }\n\n    const timebound =\n        parseTimeURIComponent(time) ?? TimeBoundValue.positiveInfinity\n    return [timebound, timebound]\n}\n","import { regionsData } from \"./regions.data.js\"\nimport type { Region } from \"./regionsTypes.js\"\n\nexport const regions: readonly Region[] =\n    regionsData satisfies readonly Region[]\n","// This file is auto-generated by devTools/regionsUpdater/update.ts\n// Do not edit manually. Run `yarn runRegionsUpdater` to regenerate.\n\nexport const regionsData = [\n    {\n        code: \"ABW\",\n        shortCode: \"AW\",\n        name: \"Aruba\",\n        slug: \"aruba\",\n        regionType: \"country\",\n    },\n    {\n        code: \"AFG\",\n        shortCode: \"AF\",\n        name: \"Afghanistan\",\n        slug: \"afghanistan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"AGO\",\n        shortCode: \"AO\",\n        name: \"Angola\",\n        slug: \"angola\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"AIA\",\n        shortCode: \"AI\",\n        name: \"Anguilla\",\n        slug: \"anguilla\",\n        regionType: \"country\",\n    },\n    {\n        code: \"ALA\",\n        shortCode: \"AX\",\n        name: \"Aland Islands\",\n        slug: \"aland-islands\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"ALB\",\n        shortCode: \"AL\",\n        name: \"Albania\",\n        slug: \"albania\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"AND\",\n        shortCode: \"AD\",\n        name: \"Andorra\",\n        slug: \"andorra\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ANT\",\n        shortCode: \"AN\",\n        name: \"Netherlands Antilles\",\n        slug: \"netherlands-antilles\",\n        regionType: \"country\",\n        isHistorical: true,\n        isUnlisted: true,\n    },\n    {\n        code: \"ARE\",\n        shortCode: \"AE\",\n        name: \"United Arab Emirates\",\n        slug: \"united-arab-emirates\",\n        regionType: \"country\",\n        isMappable: true,\n        variantNames: [\"UAE\"],\n    },\n    {\n        code: \"ARG\",\n        shortCode: \"AR\",\n        name: \"Argentina\",\n        slug: \"argentina\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ARM\",\n        shortCode: \"AM\",\n        name: \"Armenia\",\n        slug: \"armenia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ASM\",\n        shortCode: \"AS\",\n        name: \"American Samoa\",\n        slug: \"american-samoa\",\n        regionType: \"country\",\n    },\n    {\n        code: \"ATA\",\n        shortCode: \"AQ\",\n        name: \"Antarctica\",\n        slug: \"antarctica\",\n        regionType: \"other\",\n        isMappable: true,\n        isUnlisted: true,\n    },\n    {\n        code: \"ATF\",\n        shortCode: \"TF\",\n        name: \"French Southern Territories\",\n        slug: \"french-southern-territories\",\n        regionType: \"country\",\n        isMappable: true,\n        isUnlisted: true,\n    },\n    {\n        code: \"ATG\",\n        shortCode: \"AG\",\n        name: \"Antigua and Barbuda\",\n        slug: \"antigua-and-barbuda\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"AUS\",\n        shortCode: \"AU\",\n        name: \"Australia\",\n        slug: \"australia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"AUT\",\n        shortCode: \"AT\",\n        name: \"Austria\",\n        slug: \"austria\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"AZE\",\n        shortCode: \"AZ\",\n        name: \"Azerbaijan\",\n        slug: \"azerbaijan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BDI\",\n        shortCode: \"BI\",\n        name: \"Burundi\",\n        slug: \"burundi\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BEL\",\n        shortCode: \"BE\",\n        name: \"Belgium\",\n        slug: \"belgium\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BEN\",\n        shortCode: \"BJ\",\n        name: \"Benin\",\n        slug: \"benin\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BES\",\n        shortCode: \"BQ\",\n        name: \"Bonaire Sint Eustatius and Saba\",\n        slug: \"bonaire-sint-eustatius-and-saba\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"BFA\",\n        shortCode: \"BF\",\n        name: \"Burkina Faso\",\n        slug: \"burkina-faso\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BGD\",\n        shortCode: \"BD\",\n        name: \"Bangladesh\",\n        slug: \"bangladesh\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BGR\",\n        shortCode: \"BG\",\n        name: \"Bulgaria\",\n        slug: \"bulgaria\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BHR\",\n        shortCode: \"BH\",\n        name: \"Bahrain\",\n        slug: \"bahrain\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BHS\",\n        shortCode: \"BS\",\n        name: \"Bahamas\",\n        slug: \"bahamas\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BIH\",\n        shortCode: \"BA\",\n        name: \"Bosnia and Herzegovina\",\n        shortName: \"Bosnia and Herz.\",\n        slug: \"bosnia-and-herzegovina\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BLM\",\n        shortCode: \"BL\",\n        name: \"Saint Barthelemy\",\n        slug: \"saint-barthelemy\",\n        regionType: \"country\",\n    },\n    {\n        code: \"BLR\",\n        shortCode: \"BY\",\n        name: \"Belarus\",\n        slug: \"belarus\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BLZ\",\n        shortCode: \"BZ\",\n        name: \"Belize\",\n        slug: \"belize\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BMU\",\n        shortCode: \"BM\",\n        name: \"Bermuda\",\n        slug: \"bermuda\",\n        regionType: \"country\",\n    },\n    {\n        code: \"BOL\",\n        shortCode: \"BO\",\n        name: \"Bolivia\",\n        slug: \"bolivia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BRA\",\n        shortCode: \"BR\",\n        name: \"Brazil\",\n        slug: \"brazil\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BRB\",\n        shortCode: \"BB\",\n        name: \"Barbados\",\n        slug: \"barbados\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BRN\",\n        shortCode: \"BN\",\n        name: \"Brunei\",\n        slug: \"brunei\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BTN\",\n        shortCode: \"BT\",\n        name: \"Bhutan\",\n        slug: \"bhutan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BVT\",\n        shortCode: \"BV\",\n        name: \"Bouvet Island\",\n        slug: \"bouvet-island\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"BWA\",\n        shortCode: \"BW\",\n        name: \"Botswana\",\n        slug: \"botswana\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CAF\",\n        shortCode: \"CF\",\n        name: \"Central African Republic\",\n        slug: \"central-african-republic\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CAN\",\n        shortCode: \"CA\",\n        name: \"Canada\",\n        slug: \"canada\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CCK\",\n        shortCode: \"CC\",\n        name: \"Cocos Islands\",\n        slug: \"cocos-islands\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"CHE\",\n        shortCode: \"CH\",\n        name: \"Switzerland\",\n        slug: \"switzerland\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CHL\",\n        shortCode: \"CL\",\n        name: \"Chile\",\n        slug: \"chile\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CHN\",\n        shortCode: \"CN\",\n        name: \"China\",\n        slug: \"china\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CIV\",\n        shortCode: \"CI\",\n        name: \"Cote d'Ivoire\",\n        slug: \"cote-divoire\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CMR\",\n        shortCode: \"CM\",\n        name: \"Cameroon\",\n        slug: \"cameroon\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"COD\",\n        shortCode: \"CD\",\n        name: \"Democratic Republic of Congo\",\n        shortName: \"DR Congo\",\n        slug: \"democratic-republic-of-congo\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"COG\",\n        shortCode: \"CG\",\n        name: \"Congo\",\n        slug: \"congo\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"COK\",\n        shortCode: \"CK\",\n        name: \"Cook Islands\",\n        slug: \"cook-islands\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"COL\",\n        shortCode: \"CO\",\n        name: \"Colombia\",\n        slug: \"colombia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"COM\",\n        shortCode: \"KM\",\n        name: \"Comoros\",\n        slug: \"comoros\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CPV\",\n        shortCode: \"CV\",\n        name: \"Cape Verde\",\n        slug: \"cape-verde\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CRI\",\n        shortCode: \"CR\",\n        name: \"Costa Rica\",\n        slug: \"costa-rica\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CUB\",\n        shortCode: \"CU\",\n        name: \"Cuba\",\n        slug: \"cuba\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CUW\",\n        shortCode: \"CW\",\n        name: \"Curacao\",\n        slug: \"curacao\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"CXR\",\n        shortCode: \"CX\",\n        name: \"Christmas Island\",\n        slug: \"christmas-island\",\n        regionType: \"country\",\n    },\n    {\n        code: \"CYM\",\n        shortCode: \"KY\",\n        name: \"Cayman Islands\",\n        slug: \"cayman-islands\",\n        regionType: \"country\",\n    },\n    {\n        code: \"CYP\",\n        shortCode: \"CY\",\n        name: \"Cyprus\",\n        slug: \"cyprus\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CZE\",\n        shortCode: \"CZ\",\n        name: \"Czechia\",\n        slug: \"czechia\",\n        regionType: \"country\",\n        isMappable: true,\n        variantNames: [\"Czech Republic\"],\n    },\n    {\n        code: \"DEU\",\n        shortCode: \"DE\",\n        name: \"Germany\",\n        slug: \"germany\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"DJI\",\n        shortCode: \"DJ\",\n        name: \"Djibouti\",\n        slug: \"djibouti\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"DMA\",\n        shortCode: \"DM\",\n        name: \"Dominica\",\n        slug: \"dominica\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"DNK\",\n        shortCode: \"DK\",\n        name: \"Denmark\",\n        slug: \"denmark\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"DOM\",\n        shortCode: \"DO\",\n        name: \"Dominican Republic\",\n        slug: \"dominican-republic\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"DZA\",\n        shortCode: \"DZ\",\n        name: \"Algeria\",\n        slug: \"algeria\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ECU\",\n        shortCode: \"EC\",\n        name: \"Ecuador\",\n        slug: \"ecuador\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"EGY\",\n        shortCode: \"EG\",\n        name: \"Egypt\",\n        slug: \"egypt\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"EI_AFR\",\n        name: \"Africa (EI)\",\n        slug: \"africa-ei\",\n        regionType: \"aggregate\",\n        definedBy: \"ei\",\n        publisher: \"ei\",\n        members: [\n            \"AGO\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DJI\",\n            \"DZA\",\n            \"EGY\",\n            \"ERI\",\n            \"ESH\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"KEN\",\n            \"LBR\",\n            \"LBY\",\n            \"LSO\",\n            \"MAR\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"MYT\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"REU\",\n            \"RWA\",\n            \"SDN\",\n            \"SEN\",\n            \"SHN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TUN\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"EI_APAC\",\n        name: \"Asia Pacific (EI)\",\n        slug: \"asia-pacific-ei\",\n        regionType: \"aggregate\",\n        definedBy: \"ei\",\n        publisher: \"ei\",\n        members: [\n            \"AFG\",\n            \"ASM\",\n            \"AUS\",\n            \"BGD\",\n            \"BRN\",\n            \"BTN\",\n            \"CCK\",\n            \"CHN\",\n            \"COK\",\n            \"CXR\",\n            \"FJI\",\n            \"FSM\",\n            \"GUM\",\n            \"HKG\",\n            \"IDN\",\n            \"IND\",\n            \"JPN\",\n            \"KHM\",\n            \"KIR\",\n            \"KOR\",\n            \"LAO\",\n            \"LKA\",\n            \"MAC\",\n            \"MDV\",\n            \"MHL\",\n            \"MMR\",\n            \"MNG\",\n            \"MNP\",\n            \"MYS\",\n            \"NCL\",\n            \"NFK\",\n            \"NIU\",\n            \"NPL\",\n            \"NRU\",\n            \"NZL\",\n            \"PAK\",\n            \"PCN\",\n            \"PHL\",\n            \"PLW\",\n            \"PNG\",\n            \"PRK\",\n            \"PYF\",\n            \"SGP\",\n            \"SLB\",\n            \"THA\",\n            \"TKL\",\n            \"TLS\",\n            \"TON\",\n            \"TUV\",\n            \"TWN\",\n            \"VNM\",\n            \"VUT\",\n            \"WLF\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"EI_CIS\",\n        name: \"CIS (EI)\",\n        slug: \"cis-ei\",\n        regionType: \"aggregate\",\n        definedBy: \"ei\",\n        publisher: \"ei\",\n        members: [\n            \"ARM\",\n            \"AZE\",\n            \"BLR\",\n            \"KAZ\",\n            \"KGZ\",\n            \"MDA\",\n            \"RUS\",\n            \"TJK\",\n            \"TKM\",\n            \"UZB\",\n        ],\n    },\n    {\n        code: \"EI_EUR\",\n        name: \"Europe (EI)\",\n        slug: \"europe-ei\",\n        regionType: \"aggregate\",\n        definedBy: \"ei\",\n        publisher: \"ei\",\n        members: [\n            \"ALA\",\n            \"ALB\",\n            \"AND\",\n            \"AUT\",\n            \"BEL\",\n            \"BGR\",\n            \"BIH\",\n            \"CHE\",\n            \"CYP\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"FRO\",\n            \"GBR\",\n            \"GEO\",\n            \"GGY\",\n            \"GIB\",\n            \"GRC\",\n            \"HRV\",\n            \"HUN\",\n            \"IMN\",\n            \"IRL\",\n            \"ISL\",\n            \"ITA\",\n            \"JEY\",\n            \"LIE\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MCO\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"NLD\",\n            \"NOR\",\n            \"OWID_KOS\",\n            \"POL\",\n            \"PRT\",\n            \"ROU\",\n            \"SMR\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"TUR\",\n            \"UKR\",\n            \"VAT\",\n        ],\n    },\n    {\n        code: \"EI_MEA\",\n        name: \"Middle East (EI)\",\n        slug: \"middle-east-ei\",\n        regionType: \"aggregate\",\n        definedBy: \"ei\",\n        publisher: \"ei\",\n        members: [\n            \"ARE\",\n            \"BHR\",\n            \"IRN\",\n            \"IRQ\",\n            \"ISR\",\n            \"JOR\",\n            \"KWT\",\n            \"LBN\",\n            \"OMN\",\n            \"PSE\",\n            \"QAT\",\n            \"SAU\",\n            \"SYR\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"EI_NAM\",\n        name: \"North America (EI)\",\n        slug: \"north-america-ei\",\n        regionType: \"aggregate\",\n        definedBy: \"ei\",\n        publisher: \"ei\",\n        members: [\"CAN\", \"MEX\", \"USA\"],\n    },\n    {\n        code: \"EI_SCA\",\n        name: \"South and Central America (EI)\",\n        slug: \"south-and-central-america-ei\",\n        regionType: \"aggregate\",\n        definedBy: \"ei\",\n        publisher: \"ei\",\n        members: [\n            \"ABW\",\n            \"AIA\",\n            \"ARG\",\n            \"ATG\",\n            \"BES\",\n            \"BHS\",\n            \"BLM\",\n            \"BLZ\",\n            \"BMU\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"FLK\",\n            \"GLP\",\n            \"GRD\",\n            \"GTM\",\n            \"GUF\",\n            \"GUY\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MAF\",\n            \"MSR\",\n            \"MTQ\",\n            \"NIC\",\n            \"PAN\",\n            \"PER\",\n            \"PRI\",\n            \"PRY\",\n            \"SLV\",\n            \"SUR\",\n            \"SXM\",\n            \"TCA\",\n            \"TTO\",\n            \"URY\",\n            \"VCT\",\n            \"VEN\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"EMBER_AFR\",\n        name: \"Africa (Ember)\",\n        slug: \"africa-ember\",\n        regionType: \"aggregate\",\n        definedBy: \"ember\",\n        publisher: \"ember\",\n        members: [\n            \"AGO\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DJI\",\n            \"DZA\",\n            \"EGY\",\n            \"ERI\",\n            \"ESH\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"KEN\",\n            \"LBR\",\n            \"LBY\",\n            \"LSO\",\n            \"MAR\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"REU\",\n            \"RWA\",\n            \"SDN\",\n            \"SEN\",\n            \"SHN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TUN\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"EMBER_ASIA\",\n        name: \"Asia (Ember)\",\n        slug: \"asia-ember\",\n        regionType: \"aggregate\",\n        definedBy: \"ember\",\n        publisher: \"ember\",\n        members: [\n            \"AFG\",\n            \"ARM\",\n            \"AZE\",\n            \"BGD\",\n            \"BRN\",\n            \"BTN\",\n            \"CHN\",\n            \"GEO\",\n            \"HKG\",\n            \"IDN\",\n            \"IND\",\n            \"JPN\",\n            \"KAZ\",\n            \"KGZ\",\n            \"KHM\",\n            \"KOR\",\n            \"LAO\",\n            \"LKA\",\n            \"MAC\",\n            \"MDV\",\n            \"MMR\",\n            \"MNG\",\n            \"MYS\",\n            \"NPL\",\n            \"PAK\",\n            \"PHL\",\n            \"PRK\",\n            \"SGP\",\n            \"THA\",\n            \"TJK\",\n            \"TKM\",\n            \"TLS\",\n            \"TWN\",\n            \"UZB\",\n            \"VNM\",\n        ],\n    },\n    {\n        code: \"EMBER_EUR\",\n        name: \"Europe (Ember)\",\n        slug: \"europe-ember\",\n        regionType: \"aggregate\",\n        definedBy: \"ember\",\n        publisher: \"ember\",\n        members: [\n            \"ALB\",\n            \"AUT\",\n            \"BEL\",\n            \"BGR\",\n            \"BIH\",\n            \"BLR\",\n            \"CHE\",\n            \"CYP\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"FRO\",\n            \"GBR\",\n            \"GIB\",\n            \"GRC\",\n            \"HRV\",\n            \"HUN\",\n            \"IRL\",\n            \"ISL\",\n            \"ITA\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MDA\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"NLD\",\n            \"NOR\",\n            \"OWID_KOS\",\n            \"POL\",\n            \"PRT\",\n            \"ROU\",\n            \"RUS\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"TUR\",\n            \"UKR\",\n        ],\n    },\n    {\n        code: \"EMBER_LAC\",\n        name: \"Latin America and Caribbean (Ember)\",\n        slug: \"latin-america-and-caribbean-ember\",\n        regionType: \"aggregate\",\n        definedBy: \"ember\",\n        publisher: \"ember\",\n        members: [\n            \"ABW\",\n            \"ARG\",\n            \"ATG\",\n            \"BHS\",\n            \"BLZ\",\n            \"BMU\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"FLK\",\n            \"GLP\",\n            \"GRD\",\n            \"GTM\",\n            \"GUF\",\n            \"GUY\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MEX\",\n            \"MSR\",\n            \"MTQ\",\n            \"NIC\",\n            \"PAN\",\n            \"PER\",\n            \"PRI\",\n            \"PRY\",\n            \"SLV\",\n            \"SPM\",\n            \"SUR\",\n            \"TCA\",\n            \"TTO\",\n            \"URY\",\n            \"VCT\",\n            \"VEN\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"EMBER_MEA\",\n        name: \"Middle East (Ember)\",\n        slug: \"middle-east-ember\",\n        regionType: \"aggregate\",\n        definedBy: \"ember\",\n        publisher: \"ember\",\n        members: [\n            \"ARE\",\n            \"BHR\",\n            \"IRN\",\n            \"IRQ\",\n            \"ISR\",\n            \"JOR\",\n            \"KWT\",\n            \"LBN\",\n            \"OMN\",\n            \"PSE\",\n            \"QAT\",\n            \"SAU\",\n            \"SYR\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"EMBER_NAM\",\n        name: \"North America (Ember)\",\n        slug: \"north-america-ember\",\n        regionType: \"aggregate\",\n        definedBy: \"ember\",\n        publisher: \"ember\",\n        members: [\"CAN\", \"GRL\", \"USA\"],\n    },\n    {\n        code: \"EMBER_OCE\",\n        name: \"Oceania (Ember)\",\n        slug: \"oceania-ember\",\n        regionType: \"aggregate\",\n        definedBy: \"ember\",\n        publisher: \"ember\",\n        members: [\n            \"ASM\",\n            \"AUS\",\n            \"COK\",\n            \"FJI\",\n            \"GUM\",\n            \"KIR\",\n            \"NCL\",\n            \"NIU\",\n            \"NRU\",\n            \"NZL\",\n            \"PNG\",\n            \"PYF\",\n            \"SLB\",\n            \"TON\",\n            \"VUT\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"ERI\",\n        shortCode: \"ER\",\n        name: \"Eritrea\",\n        slug: \"eritrea\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ESH\",\n        shortCode: \"EH\",\n        name: \"Western Sahara\",\n        slug: \"western-sahara\",\n        regionType: \"country\",\n        isMappable: true,\n        isUnlisted: true,\n    },\n    {\n        code: \"ESP\",\n        shortCode: \"ES\",\n        name: \"Spain\",\n        slug: \"spain\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"EST\",\n        shortCode: \"EE\",\n        name: \"Estonia\",\n        slug: \"estonia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ETH\",\n        shortCode: \"ET\",\n        name: \"Ethiopia\",\n        slug: \"ethiopia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"FAO_AFR\",\n        name: \"Africa (FAO)\",\n        slug: \"africa-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_1\",\n        publisher: \"fao\",\n        members: [\n            \"AGO\",\n            \"ATF\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DJI\",\n            \"DZA\",\n            \"EGY\",\n            \"ERI\",\n            \"ESH\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"IOT\",\n            \"KEN\",\n            \"LBR\",\n            \"LBY\",\n            \"LSO\",\n            \"MAR\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"MYT\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"OWID_ERE\",\n            \"OWID_SDN\",\n            \"REU\",\n            \"RWA\",\n            \"SDN\",\n            \"SEN\",\n            \"SHN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TUN\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"FAO_AME\",\n        name: \"Americas (FAO)\",\n        slug: \"americas-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_1\",\n        publisher: \"fao\",\n        members: [\n            \"ABW\",\n            \"AIA\",\n            \"ANT\",\n            \"ARG\",\n            \"ATG\",\n            \"BES\",\n            \"BHS\",\n            \"BLM\",\n            \"BLZ\",\n            \"BMU\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"BVT\",\n            \"CAN\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"FLK\",\n            \"GLP\",\n            \"GRD\",\n            \"GRL\",\n            \"GTM\",\n            \"GUF\",\n            \"GUY\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MAF\",\n            \"MEX\",\n            \"MSR\",\n            \"MTQ\",\n            \"NIC\",\n            \"PAN\",\n            \"PER\",\n            \"PRI\",\n            \"PRY\",\n            \"SGS\",\n            \"SLV\",\n            \"SPM\",\n            \"SUR\",\n            \"SXM\",\n            \"TCA\",\n            \"TTO\",\n            \"URY\",\n            \"USA\",\n            \"VCT\",\n            \"VEN\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"FAO_ANZ\",\n        name: \"Australia and New Zealand (FAO)\",\n        slug: \"australia-and-new-zealand-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_2\",\n        publisher: \"fao\",\n        members: [\"AUS\", \"CCK\", \"CXR\", \"HMD\", \"NFK\", \"NZL\"],\n    },\n    {\n        code: \"FAO_ASI\",\n        name: \"Asia (FAO)\",\n        slug: \"asia-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_1\",\n        publisher: \"fao\",\n        members: [\n            \"AFG\",\n            \"ARE\",\n            \"ARM\",\n            \"AZE\",\n            \"BGD\",\n            \"BHR\",\n            \"BRN\",\n            \"BTN\",\n            \"CHN\",\n            \"CYP\",\n            \"GEO\",\n            \"HKG\",\n            \"IDN\",\n            \"IND\",\n            \"IRN\",\n            \"IRQ\",\n            \"ISR\",\n            \"JOR\",\n            \"JPN\",\n            \"KAZ\",\n            \"KGZ\",\n            \"KHM\",\n            \"KOR\",\n            \"KWT\",\n            \"LAO\",\n            \"LBN\",\n            \"LKA\",\n            \"MAC\",\n            \"MDV\",\n            \"MMR\",\n            \"MNG\",\n            \"MYS\",\n            \"NPL\",\n            \"OMN\",\n            \"OWID_YAR\",\n            \"OWID_YPR\",\n            \"PAK\",\n            \"PHL\",\n            \"PRK\",\n            \"PSE\",\n            \"QAT\",\n            \"SAU\",\n            \"SGP\",\n            \"SYR\",\n            \"THA\",\n            \"TJK\",\n            \"TKM\",\n            \"TLS\",\n            \"TUR\",\n            \"TWN\",\n            \"UZB\",\n            \"VNM\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"FAO_CAM\",\n        name: \"Central America (FAO)\",\n        slug: \"central-america-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_2\",\n        publisher: \"fao\",\n        members: [\"BLZ\", \"CRI\", \"GTM\", \"HND\", \"MEX\", \"NIC\", \"PAN\", \"SLV\"],\n    },\n    {\n        code: \"FAO_CAR\",\n        name: \"Caribbean (FAO)\",\n        slug: \"caribbean-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_2\",\n        publisher: \"fao\",\n        members: [\n            \"ABW\",\n            \"AIA\",\n            \"ANT\",\n            \"ATG\",\n            \"BES\",\n            \"BHS\",\n            \"BLM\",\n            \"BRB\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"GLP\",\n            \"GRD\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MAF\",\n            \"MSR\",\n            \"MTQ\",\n            \"PRI\",\n            \"SXM\",\n            \"TCA\",\n            \"TTO\",\n            \"VCT\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"FAO_CAS\",\n        name: \"Central Asia (FAO)\",\n        slug: \"central-asia-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_2\",\n        publisher: \"fao\",\n        members: [\"KAZ\", \"KGZ\", \"TJK\", \"TKM\", \"UZB\"],\n    },\n    {\n        code: \"FAO_CSA\",\n        name: \"Central Asia and Southern Asia (FAO)\",\n        slug: \"central-asia-and-southern-asia-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_sdg\",\n        publisher: \"fao\",\n        members: [\n            \"AFG\",\n            \"BGD\",\n            \"BTN\",\n            \"IND\",\n            \"IRN\",\n            \"KAZ\",\n            \"KGZ\",\n            \"LKA\",\n            \"MDV\",\n            \"NPL\",\n            \"PAK\",\n            \"TJK\",\n            \"TKM\",\n            \"UZB\",\n        ],\n    },\n    {\n        code: \"FAO_EAF\",\n        name: \"Eastern Africa (FAO)\",\n        slug: \"eastern-africa-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_2\",\n        publisher: \"fao\",\n        members: [\n            \"ATF\",\n            \"BDI\",\n            \"COM\",\n            \"DJI\",\n            \"ERI\",\n            \"ETH\",\n            \"IOT\",\n            \"KEN\",\n            \"MDG\",\n            \"MOZ\",\n            \"MUS\",\n            \"MWI\",\n            \"MYT\",\n            \"OWID_ERE\",\n            \"REU\",\n            \"RWA\",\n            \"SOM\",\n            \"SSD\",\n            \"SYC\",\n            \"TZA\",\n            \"UGA\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"FAO_EAS\",\n        name: \"Eastern Asia (FAO)\",\n        slug: \"eastern-asia-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_2\",\n        publisher: \"fao\",\n        members: [\"CHN\", \"HKG\", \"JPN\", \"KOR\", \"MAC\", \"MNG\", \"PRK\", \"TWN\"],\n    },\n    {\n        code: \"FAO_EEU\",\n        name: \"Eastern Europe (FAO)\",\n        slug: \"eastern-europe-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_2\",\n        publisher: \"fao\",\n        members: [\n            \"BGR\",\n            \"BLR\",\n            \"CZE\",\n            \"HUN\",\n            \"MDA\",\n            \"OWID_CZS\",\n            \"OWID_USS\",\n            \"POL\",\n            \"ROU\",\n            \"RUS\",\n            \"SVK\",\n            \"UKR\",\n        ],\n    },\n    {\n        code: \"FAO_ESEA\",\n        name: \"Eastern Asia and South-eastern Asia (FAO)\",\n        slug: \"eastern-asia-and-south-eastern-asia-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_sdg\",\n        publisher: \"fao\",\n        members: [\n            \"BRN\",\n            \"CHN\",\n            \"HKG\",\n            \"IDN\",\n            \"JPN\",\n            \"KHM\",\n            \"KOR\",\n            \"LAO\",\n            \"MAC\",\n            \"MMR\",\n            \"MNG\",\n            \"MYS\",\n            \"PHL\",\n            \"PRK\",\n            \"SGP\",\n            \"THA\",\n            \"TLS\",\n            \"TWN\",\n            \"VNM\",\n        ],\n    },\n    {\n        code: \"FAO_EUR\",\n        name: \"Europe (FAO)\",\n        slug: \"europe-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_1\",\n        publisher: \"fao\",\n        members: [\n            \"ALA\",\n            \"ALB\",\n            \"AND\",\n            \"AUT\",\n            \"BEL\",\n            \"BGR\",\n            \"BIH\",\n            \"BLR\",\n            \"CHE\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"FRO\",\n            \"GBR\",\n            \"GGY\",\n            \"GIB\",\n            \"GRC\",\n            \"HRV\",\n            \"HUN\",\n            \"IMN\",\n            \"IRL\",\n            \"ISL\",\n            \"ITA\",\n            \"JEY\",\n            \"LIE\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MCO\",\n            \"MDA\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"NLD\",\n            \"NOR\",\n            \"OWID_CZS\",\n            \"OWID_SRM\",\n            \"OWID_USS\",\n            \"OWID_YGS\",\n            \"POL\",\n            \"PRT\",\n            \"ROU\",\n            \"RUS\",\n            \"SJM\",\n            \"SMR\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"UKR\",\n            \"VAT\",\n        ],\n    },\n    {\n        code: \"FAO_LAC\",\n        name: \"Latin America and the Caribbean (FAO)\",\n        slug: \"latin-america-and-the-caribbean-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_sdg\",\n        publisher: \"fao\",\n        members: [\n            \"ABW\",\n            \"AIA\",\n            \"ANT\",\n            \"ARG\",\n            \"ATG\",\n            \"BES\",\n            \"BHS\",\n            \"BLM\",\n            \"BLZ\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"BVT\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"FLK\",\n            \"GLP\",\n            \"GRD\",\n            \"GTM\",\n            \"GUF\",\n            \"GUY\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MAF\",\n            \"MEX\",\n            \"MSR\",\n            \"MTQ\",\n            \"NIC\",\n            \"PAN\",\n            \"PER\",\n            \"PRI\",\n            \"PRY\",\n            \"SGS\",\n            \"SLV\",\n            \"SUR\",\n            \"SXM\",\n            \"TCA\",\n            \"TTO\",\n            \"URY\",\n            \"VCT\",\n            \"VEN\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"FAO_MAF\",\n        name: \"Middle Africa (FAO)\",\n        slug: \"middle-africa-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_2\",\n        publisher: \"fao\",\n        members: [\n            \"AGO\",\n            \"CAF\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"GAB\",\n            \"GNQ\",\n            \"STP\",\n            \"TCD\",\n        ],\n    },\n    {\n        code: \"FAO_MEL\",\n        name: \"Melanesia (FAO)\",\n        slug: \"melanesia-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_2\",\n        publisher: \"fao\",\n        members: [\"FJI\", \"NCL\", \"PNG\", \"SLB\", \"VUT\"],\n    },\n    {\n        code: \"FAO_MIC\",\n        name: \"Micronesia (FAO)\",\n        slug: \"micronesia-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_2\",\n        publisher: \"fao\",\n        members: [\"FSM\", \"GUM\", \"KIR\", \"MHL\", \"MNP\", \"NRU\", \"PLW\", \"UMI\"],\n    },\n    {\n        code: \"FAO_NAE\",\n        name: \"Northern America and Europe (FAO)\",\n        slug: \"northern-america-and-europe-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_sdg\",\n        publisher: \"fao\",\n        members: [\n            \"ALA\",\n            \"ALB\",\n            \"AND\",\n            \"AUT\",\n            \"BEL\",\n            \"BGR\",\n            \"BIH\",\n            \"BLR\",\n            \"BMU\",\n            \"CAN\",\n            \"CHE\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"FRO\",\n            \"GBR\",\n            \"GGY\",\n            \"GIB\",\n            \"GRC\",\n            \"GRL\",\n            \"HRV\",\n            \"HUN\",\n            \"IMN\",\n            \"IRL\",\n            \"ISL\",\n            \"ITA\",\n            \"JEY\",\n            \"LIE\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MCO\",\n            \"MDA\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"NLD\",\n            \"NOR\",\n            \"OWID_CZS\",\n            \"OWID_SRM\",\n            \"OWID_USS\",\n            \"OWID_YGS\",\n            \"POL\",\n            \"PRT\",\n            \"ROU\",\n            \"RUS\",\n            \"SJM\",\n            \"SMR\",\n            \"SPM\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"UKR\",\n            \"USA\",\n            \"VAT\",\n        ],\n    },\n    {\n        code: \"FAO_NAF\",\n        name: \"Northern Africa (FAO)\",\n        slug: \"northern-africa-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_2\",\n        publisher: \"fao\",\n        members: [\"DZA\", \"EGY\", \"ESH\", \"LBY\", \"MAR\", \"OWID_SDN\", \"SDN\", \"TUN\"],\n    },\n    {\n        code: \"FAO_NAM\",\n        name: \"Northern America (FAO)\",\n        slug: \"northern-america-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_2\",\n        publisher: \"fao\",\n        members: [\"BMU\", \"CAN\", \"GRL\", \"SPM\", \"USA\"],\n    },\n    {\n        code: \"FAO_NEU\",\n        name: \"Northern Europe (FAO)\",\n        slug: \"northern-europe-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_2\",\n        publisher: \"fao\",\n        members: [\n            \"ALA\",\n            \"DNK\",\n            \"EST\",\n            \"FIN\",\n            \"FRO\",\n            \"GBR\",\n            \"GGY\",\n            \"IMN\",\n            \"IRL\",\n            \"ISL\",\n            \"JEY\",\n            \"LTU\",\n            \"LVA\",\n            \"NOR\",\n            \"SJM\",\n            \"SWE\",\n        ],\n    },\n    {\n        code: \"FAO_OCE\",\n        name: \"Oceania (FAO)\",\n        slug: \"oceania-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_1\",\n        publisher: \"fao\",\n        members: [\n            \"ASM\",\n            \"AUS\",\n            \"CCK\",\n            \"COK\",\n            \"CXR\",\n            \"FJI\",\n            \"FSM\",\n            \"GUM\",\n            \"HMD\",\n            \"KIR\",\n            \"MHL\",\n            \"MNP\",\n            \"NCL\",\n            \"NFK\",\n            \"NIU\",\n            \"NRU\",\n            \"NZL\",\n            \"PCN\",\n            \"PLW\",\n            \"PNG\",\n            \"PYF\",\n            \"SLB\",\n            \"TKL\",\n            \"TON\",\n            \"TUV\",\n            \"UMI\",\n            \"VUT\",\n            \"WLF\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"FAO_OCX\",\n        name: \"Oceania excluding Australia and New Zealand (FAO)\",\n        slug: \"oceania-excluding-australia-and-new-zealand-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_sdg\",\n        publisher: \"fao\",\n        members: [\n            \"ASM\",\n            \"COK\",\n            \"FJI\",\n            \"FSM\",\n            \"GUM\",\n            \"KIR\",\n            \"MHL\",\n            \"MNP\",\n            \"NCL\",\n            \"NIU\",\n            \"NRU\",\n            \"PCN\",\n            \"PLW\",\n            \"PNG\",\n            \"PYF\",\n            \"SLB\",\n            \"TKL\",\n            \"TON\",\n            \"TUV\",\n            \"UMI\",\n            \"VUT\",\n            \"WLF\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"FAO_POL\",\n        name: \"Polynesia (FAO)\",\n        slug: \"polynesia-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_2\",\n        publisher: \"fao\",\n        members: [\n            \"ASM\",\n            \"COK\",\n            \"NIU\",\n            \"PCN\",\n            \"PYF\",\n            \"TKL\",\n            \"TON\",\n            \"TUV\",\n            \"WLF\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"FAO_SAF\",\n        name: \"Southern Africa (FAO)\",\n        slug: \"southern-africa-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_2\",\n        publisher: \"fao\",\n        members: [\"BWA\", \"LSO\", \"NAM\", \"SWZ\", \"ZAF\"],\n    },\n    {\n        code: \"FAO_SAM\",\n        name: \"South America (FAO)\",\n        slug: \"south-america-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_2\",\n        publisher: \"fao\",\n        members: [\n            \"ARG\",\n            \"BOL\",\n            \"BRA\",\n            \"BVT\",\n            \"CHL\",\n            \"COL\",\n            \"ECU\",\n            \"FLK\",\n            \"GUF\",\n            \"GUY\",\n            \"PER\",\n            \"PRY\",\n            \"SGS\",\n            \"SUR\",\n            \"URY\",\n            \"VEN\",\n        ],\n    },\n    {\n        code: \"FAO_SAS\",\n        name: \"Southern Asia (FAO)\",\n        slug: \"southern-asia-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_2\",\n        publisher: \"fao\",\n        members: [\n            \"AFG\",\n            \"BGD\",\n            \"BTN\",\n            \"IND\",\n            \"IRN\",\n            \"LKA\",\n            \"MDV\",\n            \"NPL\",\n            \"PAK\",\n        ],\n    },\n    {\n        code: \"FAO_SEA\",\n        name: \"South-eastern Asia (FAO)\",\n        slug: \"south-eastern-asia-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_2\",\n        publisher: \"fao\",\n        members: [\n            \"BRN\",\n            \"IDN\",\n            \"KHM\",\n            \"LAO\",\n            \"MMR\",\n            \"MYS\",\n            \"PHL\",\n            \"SGP\",\n            \"THA\",\n            \"TLS\",\n            \"VNM\",\n        ],\n    },\n    {\n        code: \"FAO_SEU\",\n        name: \"Southern Europe (FAO)\",\n        slug: \"southern-europe-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_2\",\n        publisher: \"fao\",\n        members: [\n            \"ALB\",\n            \"AND\",\n            \"BIH\",\n            \"ESP\",\n            \"GIB\",\n            \"GRC\",\n            \"HRV\",\n            \"ITA\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"OWID_SRM\",\n            \"OWID_YGS\",\n            \"PRT\",\n            \"SMR\",\n            \"SRB\",\n            \"SVN\",\n            \"VAT\",\n        ],\n    },\n    {\n        code: \"FAO_SSA\",\n        name: \"Sub-Saharan Africa (FAO)\",\n        slug: \"sub-saharan-africa-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_sdg\",\n        publisher: \"fao\",\n        members: [\n            \"AGO\",\n            \"ATF\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DJI\",\n            \"ERI\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"IOT\",\n            \"KEN\",\n            \"LBR\",\n            \"LSO\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"MYT\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"OWID_ERE\",\n            \"REU\",\n            \"RWA\",\n            \"SEN\",\n            \"SHN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"FAO_WAF\",\n        name: \"Western Africa (FAO)\",\n        slug: \"western-africa-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_2\",\n        publisher: \"fao\",\n        members: [\n            \"BEN\",\n            \"BFA\",\n            \"CIV\",\n            \"CPV\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"LBR\",\n            \"MLI\",\n            \"MRT\",\n            \"NER\",\n            \"NGA\",\n            \"SEN\",\n            \"SHN\",\n            \"SLE\",\n            \"TGO\",\n        ],\n    },\n    {\n        code: \"FAO_WANA\",\n        name: \"Western Asia and Northern Africa (FAO)\",\n        slug: \"western-asia-and-northern-africa-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_sdg\",\n        publisher: \"fao\",\n        members: [\n            \"ARE\",\n            \"ARM\",\n            \"AZE\",\n            \"BHR\",\n            \"CYP\",\n            \"DZA\",\n            \"EGY\",\n            \"ESH\",\n            \"GEO\",\n            \"IRQ\",\n            \"ISR\",\n            \"JOR\",\n            \"KWT\",\n            \"LBN\",\n            \"LBY\",\n            \"MAR\",\n            \"OMN\",\n            \"OWID_SDN\",\n            \"OWID_YAR\",\n            \"OWID_YPR\",\n            \"PSE\",\n            \"QAT\",\n            \"SAU\",\n            \"SDN\",\n            \"SYR\",\n            \"TUN\",\n            \"TUR\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"FAO_WAS\",\n        name: \"Western Asia (FAO)\",\n        slug: \"western-asia-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_2\",\n        publisher: \"fao\",\n        members: [\n            \"ARE\",\n            \"ARM\",\n            \"AZE\",\n            \"BHR\",\n            \"CYP\",\n            \"GEO\",\n            \"IRQ\",\n            \"ISR\",\n            \"JOR\",\n            \"KWT\",\n            \"LBN\",\n            \"OMN\",\n            \"OWID_YAR\",\n            \"OWID_YPR\",\n            \"PSE\",\n            \"QAT\",\n            \"SAU\",\n            \"SYR\",\n            \"TUR\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"FAO_WEU\",\n        name: \"Western Europe (FAO)\",\n        slug: \"western-europe-fao\",\n        regionType: \"aggregate\",\n        definedBy: \"fao_2\",\n        publisher: \"fao\",\n        members: [\n            \"AUT\",\n            \"BEL\",\n            \"CHE\",\n            \"DEU\",\n            \"FRA\",\n            \"LIE\",\n            \"LUX\",\n            \"MCO\",\n            \"NLD\",\n        ],\n    },\n    {\n        code: \"FIN\",\n        shortCode: \"FI\",\n        name: \"Finland\",\n        slug: \"finland\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"FJI\",\n        shortCode: \"FJ\",\n        name: \"Fiji\",\n        slug: \"fiji\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"FLK\",\n        shortCode: \"FK\",\n        name: \"Falkland Islands\",\n        slug: \"falkland-islands\",\n        regionType: \"country\",\n    },\n    {\n        code: \"FRA\",\n        shortCode: \"FR\",\n        name: \"France\",\n        slug: \"france\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"FRO\",\n        shortCode: \"FO\",\n        name: \"Faroe Islands\",\n        slug: \"faroe-islands\",\n        regionType: \"country\",\n    },\n    {\n        code: \"FSM\",\n        shortCode: \"FM\",\n        name: \"Micronesia (country)\",\n        slug: \"micronesia-country\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GAB\",\n        shortCode: \"GA\",\n        name: \"Gabon\",\n        slug: \"gabon\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GBR\",\n        shortCode: \"GB\",\n        name: \"United Kingdom\",\n        slug: \"united-kingdom\",\n        regionType: \"country\",\n        isMappable: true,\n        variantNames: [\"UK\"],\n    },\n    {\n        code: \"GEO\",\n        shortCode: \"GE\",\n        name: \"Georgia\",\n        slug: \"georgia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GGY\",\n        shortCode: \"GG\",\n        name: \"Guernsey\",\n        slug: \"guernsey\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"GHA\",\n        shortCode: \"GH\",\n        name: \"Ghana\",\n        slug: \"ghana\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GIB\",\n        shortCode: \"GI\",\n        name: \"Gibraltar\",\n        slug: \"gibraltar\",\n        regionType: \"country\",\n    },\n    {\n        code: \"GIN\",\n        shortCode: \"GN\",\n        name: \"Guinea\",\n        slug: \"guinea\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GLP\",\n        shortCode: \"GP\",\n        name: \"Guadeloupe\",\n        slug: \"guadeloupe\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"GMB\",\n        shortCode: \"GM\",\n        name: \"Gambia\",\n        slug: \"gambia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GNB\",\n        shortCode: \"GW\",\n        name: \"Guinea-Bissau\",\n        slug: \"guinea-bissau\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GNQ\",\n        shortCode: \"GQ\",\n        name: \"Equatorial Guinea\",\n        slug: \"equatorial-guinea\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GRC\",\n        shortCode: \"GR\",\n        name: \"Greece\",\n        slug: \"greece\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GRD\",\n        shortCode: \"GD\",\n        name: \"Grenada\",\n        slug: \"grenada\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GRL\",\n        shortCode: \"GL\",\n        name: \"Greenland\",\n        slug: \"greenland\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GTM\",\n        shortCode: \"GT\",\n        name: \"Guatemala\",\n        slug: \"guatemala\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GUF\",\n        shortCode: \"GF\",\n        name: \"French Guiana\",\n        slug: \"french-guiana\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GUM\",\n        shortCode: \"GU\",\n        name: \"Guam\",\n        slug: \"guam\",\n        regionType: \"country\",\n    },\n    {\n        code: \"GUY\",\n        shortCode: \"GY\",\n        name: \"Guyana\",\n        slug: \"guyana\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"HKG\",\n        shortCode: \"HK\",\n        name: \"Hong Kong\",\n        slug: \"hong-kong\",\n        regionType: \"country\",\n    },\n    {\n        code: \"HMD\",\n        shortCode: \"HM\",\n        name: \"Heard Island and McDonald Islands\",\n        slug: \"heard-island-and-mcdonald-islands\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"HND\",\n        shortCode: \"HN\",\n        name: \"Honduras\",\n        slug: \"honduras\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"HRV\",\n        shortCode: \"HR\",\n        name: \"Croatia\",\n        slug: \"croatia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"HTI\",\n        shortCode: \"HT\",\n        name: \"Haiti\",\n        slug: \"haiti\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"HUN\",\n        shortCode: \"HU\",\n        name: \"Hungary\",\n        slug: \"hungary\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"IDN\",\n        shortCode: \"ID\",\n        name: \"Indonesia\",\n        slug: \"indonesia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"IEA_AFR\",\n        name: \"Africa (IEA)\",\n        slug: \"africa-iea\",\n        regionType: \"aggregate\",\n        definedBy: \"iea\",\n        publisher: \"iea\",\n        members: [\n            \"AGO\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DJI\",\n            \"DZA\",\n            \"EGY\",\n            \"ERI\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"KEN\",\n            \"LBR\",\n            \"LBY\",\n            \"LSO\",\n            \"MAR\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"RWA\",\n            \"SDN\",\n            \"SEN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TUN\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"IEA_ASP\",\n        name: \"Asia Pacific (IEA)\",\n        slug: \"asia-pacific-iea\",\n        regionType: \"aggregate\",\n        definedBy: \"iea\",\n        publisher: \"iea\",\n        members: [\n            \"AUS\",\n            \"BGD\",\n            \"BRN\",\n            \"CHN\",\n            \"HKG\",\n            \"IDN\",\n            \"IND\",\n            \"JPN\",\n            \"KHM\",\n            \"KOR\",\n            \"LAO\",\n            \"LKA\",\n            \"MMR\",\n            \"MNG\",\n            \"MYS\",\n            \"NPL\",\n            \"NZL\",\n            \"PAK\",\n            \"PHL\",\n            \"SGP\",\n            \"THA\",\n            \"TWN\",\n            \"VNM\",\n        ],\n    },\n    {\n        code: \"IEA_CSA\",\n        name: \"Central and South America (IEA)\",\n        slug: \"central-and-south-america-iea\",\n        regionType: \"aggregate\",\n        definedBy: \"iea\",\n        publisher: \"iea\",\n        members: [\n            \"ARG\",\n            \"BOL\",\n            \"BRA\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"DOM\",\n            \"ECU\",\n            \"GTM\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"NIC\",\n            \"PAN\",\n            \"PER\",\n            \"PRY\",\n            \"SLV\",\n            \"SUR\",\n            \"TTO\",\n            \"URY\",\n            \"VEN\",\n        ],\n    },\n    {\n        code: \"IEA_EUR\",\n        name: \"Europe (IEA)\",\n        slug: \"europe-iea\",\n        regionType: \"aggregate\",\n        definedBy: \"iea\",\n        publisher: \"iea\",\n        members: [\n            \"ALB\",\n            \"AUT\",\n            \"BEL\",\n            \"BGR\",\n            \"BIH\",\n            \"BLR\",\n            \"CHE\",\n            \"CYP\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"GBR\",\n            \"GIB\",\n            \"GRC\",\n            \"HRV\",\n            \"HUN\",\n            \"IRL\",\n            \"ISL\",\n            \"ISR\",\n            \"ITA\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MDA\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"NLD\",\n            \"NOR\",\n            \"OWID_KOS\",\n            \"POL\",\n            \"PRT\",\n            \"ROU\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"TUR\",\n            \"UKR\",\n        ],\n    },\n    {\n        code: \"IEA_EUR_ASIA\",\n        name: \"Eurasia (IEA)\",\n        slug: \"eurasia-iea\",\n        regionType: \"aggregate\",\n        definedBy: \"iea\",\n        publisher: \"iea\",\n        members: [\n            \"ARM\",\n            \"AZE\",\n            \"GEO\",\n            \"KAZ\",\n            \"KGZ\",\n            \"RUS\",\n            \"TJK\",\n            \"TKM\",\n            \"UZB\",\n        ],\n    },\n    {\n        code: \"IEA_MEA\",\n        name: \"Middle East (IEA)\",\n        slug: \"middle-east-iea\",\n        regionType: \"aggregate\",\n        definedBy: \"iea\",\n        publisher: \"iea\",\n        members: [\n            \"ARE\",\n            \"BHR\",\n            \"IRN\",\n            \"IRQ\",\n            \"JOR\",\n            \"KWT\",\n            \"LBN\",\n            \"OMN\",\n            \"QAT\",\n            \"SAU\",\n            \"SYR\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"IEA_NAM\",\n        name: \"North America (IEA)\",\n        slug: \"north-america-iea\",\n        regionType: \"aggregate\",\n        definedBy: \"iea\",\n        publisher: \"iea\",\n        members: [\"CAN\", \"MEX\", \"USA\"],\n    },\n    {\n        code: \"IHME_ALA\",\n        name: \"Andean Latin America (IHME GBD)\",\n        slug: \"andean-latin-america-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_2\",\n        publisher: \"ihme_gbd\",\n        members: [\"BOL\", \"ECU\", \"PER\"],\n    },\n    {\n        code: \"IHME_ANZ\",\n        name: \"Australasia (IHME GBD)\",\n        slug: \"australasia-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_2\",\n        publisher: \"ihme_gbd\",\n        members: [\"AUS\", \"NZL\"],\n    },\n    {\n        code: \"IHME_CAR\",\n        name: \"Caribbean (IHME GBD)\",\n        slug: \"caribbean-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_2\",\n        publisher: \"ihme_gbd\",\n        members: [\n            \"ATG\",\n            \"BHS\",\n            \"BLZ\",\n            \"BMU\",\n            \"BRB\",\n            \"CUB\",\n            \"DMA\",\n            \"DOM\",\n            \"GRD\",\n            \"GUY\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"PRI\",\n            \"SUR\",\n            \"TTO\",\n            \"VCT\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"IHME_CAS\",\n        name: \"Central Asia (IHME GBD)\",\n        slug: \"central-asia-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_2\",\n        publisher: \"ihme_gbd\",\n        members: [\n            \"ARM\",\n            \"AZE\",\n            \"GEO\",\n            \"KAZ\",\n            \"KGZ\",\n            \"MNG\",\n            \"TJK\",\n            \"TKM\",\n            \"UZB\",\n        ],\n    },\n    {\n        code: \"IHME_CEECA\",\n        name: \"Central Europe, Eastern Europe, and Central Asia (IHME GBD)\",\n        slug: \"central-europe-eastern-europe-and-central-asia-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_1\",\n        publisher: \"ihme_gbd\",\n        members: [\n            \"ALB\",\n            \"ARM\",\n            \"AZE\",\n            \"BGR\",\n            \"BIH\",\n            \"BLR\",\n            \"CZE\",\n            \"EST\",\n            \"GEO\",\n            \"HRV\",\n            \"HUN\",\n            \"KAZ\",\n            \"KGZ\",\n            \"LTU\",\n            \"LVA\",\n            \"MDA\",\n            \"MKD\",\n            \"MNE\",\n            \"MNG\",\n            \"POL\",\n            \"ROU\",\n            \"RUS\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"TJK\",\n            \"TKM\",\n            \"UKR\",\n            \"UZB\",\n        ],\n    },\n    {\n        code: \"IHME_CEU\",\n        name: \"Central Europe (IHME GBD)\",\n        slug: \"central-europe-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_2\",\n        publisher: \"ihme_gbd\",\n        members: [\n            \"ALB\",\n            \"BGR\",\n            \"BIH\",\n            \"CZE\",\n            \"HRV\",\n            \"HUN\",\n            \"MKD\",\n            \"MNE\",\n            \"POL\",\n            \"ROU\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n        ],\n    },\n    {\n        code: \"IHME_CLA\",\n        name: \"Central Latin America (IHME GBD)\",\n        slug: \"central-latin-america-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_2\",\n        publisher: \"ihme_gbd\",\n        members: [\n            \"COL\",\n            \"CRI\",\n            \"GTM\",\n            \"HND\",\n            \"MEX\",\n            \"NIC\",\n            \"PAN\",\n            \"SLV\",\n            \"VEN\",\n        ],\n    },\n    {\n        code: \"IHME_CSSA\",\n        name: \"Central Sub-Saharan Africa (IHME GBD)\",\n        slug: \"central-sub-saharan-africa-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_2\",\n        publisher: \"ihme_gbd\",\n        members: [\"AGO\", \"CAF\", \"COD\", \"COG\", \"GAB\", \"GNQ\"],\n    },\n    {\n        code: \"IHME_EAS\",\n        name: \"East Asia (IHME GBD)\",\n        slug: \"east-asia-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_2\",\n        publisher: \"ihme_gbd\",\n        members: [\"CHN\", \"PRK\", \"TWN\"],\n    },\n    {\n        code: \"IHME_EEU\",\n        name: \"Eastern Europe (IHME GBD)\",\n        slug: \"eastern-europe-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_2\",\n        publisher: \"ihme_gbd\",\n        members: [\"BLR\", \"EST\", \"LTU\", \"LVA\", \"MDA\", \"RUS\", \"UKR\"],\n    },\n    {\n        code: \"IHME_ESSA\",\n        name: \"Eastern Sub-Saharan Africa (IHME GBD)\",\n        slug: \"eastern-sub-saharan-africa-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_2\",\n        publisher: \"ihme_gbd\",\n        members: [\n            \"BDI\",\n            \"COM\",\n            \"DJI\",\n            \"ERI\",\n            \"ETH\",\n            \"KEN\",\n            \"MDG\",\n            \"MOZ\",\n            \"MWI\",\n            \"RWA\",\n            \"SOM\",\n            \"SSD\",\n            \"TZA\",\n            \"UGA\",\n            \"ZMB\",\n        ],\n    },\n    {\n        code: \"IHME_HI\",\n        name: \"High-income (IHME GBD)\",\n        slug: \"high-income-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_1\",\n        publisher: \"ihme_gbd\",\n        members: [\n            \"AND\",\n            \"ARG\",\n            \"AUS\",\n            \"AUT\",\n            \"BEL\",\n            \"BRN\",\n            \"CAN\",\n            \"CHE\",\n            \"CHL\",\n            \"CYP\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"FIN\",\n            \"FRA\",\n            \"GBR\",\n            \"GRC\",\n            \"GRL\",\n            \"IRL\",\n            \"ISL\",\n            \"ISR\",\n            \"ITA\",\n            \"JPN\",\n            \"KOR\",\n            \"LUX\",\n            \"MCO\",\n            \"MLT\",\n            \"NLD\",\n            \"NOR\",\n            \"NZL\",\n            \"PRT\",\n            \"SGP\",\n            \"SMR\",\n            \"SWE\",\n            \"URY\",\n            \"USA\",\n        ],\n    },\n    {\n        code: \"IHME_HIAP\",\n        name: \"High-income Asia Pacific (IHME GBD)\",\n        slug: \"high-income-asia-pacific-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_2\",\n        publisher: \"ihme_gbd\",\n        members: [\"BRN\", \"JPN\", \"KOR\", \"SGP\"],\n    },\n    {\n        code: \"IHME_HINA\",\n        name: \"High-income North America (IHME GBD)\",\n        slug: \"high-income-north-america-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_2\",\n        publisher: \"ihme_gbd\",\n        members: [\"CAN\", \"GRL\", \"USA\"],\n    },\n    {\n        code: \"IHME_LAC\",\n        name: \"Latin America and Caribbean (IHME GBD)\",\n        slug: \"latin-america-and-caribbean-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_1\",\n        publisher: \"ihme_gbd\",\n        members: [\n            \"ATG\",\n            \"BHS\",\n            \"BLZ\",\n            \"BMU\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"GRD\",\n            \"GTM\",\n            \"GUY\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MEX\",\n            \"NIC\",\n            \"PAN\",\n            \"PER\",\n            \"PRI\",\n            \"PRY\",\n            \"SLV\",\n            \"SUR\",\n            \"TTO\",\n            \"VCT\",\n            \"VEN\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"IHME_NAFME\",\n        name: \"North Africa and Middle East (IHME GBD)\",\n        slug: \"north-africa-and-middle-east-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_1\",\n        publisher: \"ihme_gbd\",\n        members: [\n            \"AFG\",\n            \"ARE\",\n            \"BHR\",\n            \"DZA\",\n            \"EGY\",\n            \"IRN\",\n            \"IRQ\",\n            \"JOR\",\n            \"KWT\",\n            \"LBN\",\n            \"LBY\",\n            \"MAR\",\n            \"OMN\",\n            \"PSE\",\n            \"QAT\",\n            \"SAU\",\n            \"SDN\",\n            \"SYR\",\n            \"TUN\",\n            \"TUR\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"IHME_OCE\",\n        name: \"Oceania (IHME GBD)\",\n        slug: \"oceania-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_2\",\n        publisher: \"ihme_gbd\",\n        members: [\n            \"ASM\",\n            \"COK\",\n            \"FJI\",\n            \"FSM\",\n            \"GUM\",\n            \"KIR\",\n            \"MHL\",\n            \"MNP\",\n            \"NIU\",\n            \"NRU\",\n            \"PLW\",\n            \"PNG\",\n            \"SLB\",\n            \"TKL\",\n            \"TON\",\n            \"TUV\",\n            \"VUT\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"IHME_SAS\",\n        name: \"South Asia (IHME GBD)\",\n        slug: \"south-asia-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_1\",\n        publisher: \"ihme_gbd\",\n        members: [\"BGD\", \"BTN\", \"IND\", \"NPL\", \"PAK\"],\n    },\n    {\n        code: \"IHME_SEA\",\n        name: \"Southeast Asia (IHME GBD)\",\n        slug: \"southeast-asia-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_2\",\n        publisher: \"ihme_gbd\",\n        members: [\n            \"IDN\",\n            \"KHM\",\n            \"LAO\",\n            \"LKA\",\n            \"MDV\",\n            \"MMR\",\n            \"MUS\",\n            \"MYS\",\n            \"PHL\",\n            \"SYC\",\n            \"THA\",\n            \"TLS\",\n            \"VNM\",\n        ],\n    },\n    {\n        code: \"IHME_SEAEAO\",\n        name: \"Southeast Asia, East Asia, and Oceania (IHME GBD)\",\n        slug: \"southeast-asia-east-asia-and-oceania-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_1\",\n        publisher: \"ihme_gbd\",\n        members: [\n            \"ASM\",\n            \"CHN\",\n            \"COK\",\n            \"FJI\",\n            \"FSM\",\n            \"GUM\",\n            \"IDN\",\n            \"KHM\",\n            \"KIR\",\n            \"LAO\",\n            \"LKA\",\n            \"MDV\",\n            \"MHL\",\n            \"MMR\",\n            \"MNP\",\n            \"MUS\",\n            \"MYS\",\n            \"NIU\",\n            \"NRU\",\n            \"PHL\",\n            \"PLW\",\n            \"PNG\",\n            \"PRK\",\n            \"SLB\",\n            \"SYC\",\n            \"THA\",\n            \"TKL\",\n            \"TLS\",\n            \"TON\",\n            \"TUV\",\n            \"TWN\",\n            \"VNM\",\n            \"VUT\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"IHME_SLA\",\n        name: \"Southern Latin America (IHME GBD)\",\n        slug: \"southern-latin-america-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_2\",\n        publisher: \"ihme_gbd\",\n        members: [\"ARG\", \"CHL\", \"URY\"],\n    },\n    {\n        code: \"IHME_SSA\",\n        name: \"Sub-Saharan Africa (IHME GBD)\",\n        slug: \"sub-saharan-africa-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_1\",\n        publisher: \"ihme_gbd\",\n        members: [\n            \"AGO\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DJI\",\n            \"ERI\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"KEN\",\n            \"LBR\",\n            \"LSO\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MWI\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"RWA\",\n            \"SEN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"TCD\",\n            \"TGO\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"IHME_SSSA\",\n        name: \"Southern Sub-Saharan Africa (IHME GBD)\",\n        slug: \"southern-sub-saharan-africa-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_2\",\n        publisher: \"ihme_gbd\",\n        members: [\"BWA\", \"LSO\", \"NAM\", \"SWZ\", \"ZAF\", \"ZWE\"],\n    },\n    {\n        code: \"IHME_TLA\",\n        name: \"Tropical Latin America (IHME GBD)\",\n        slug: \"tropical-latin-america-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_2\",\n        publisher: \"ihme_gbd\",\n        members: [\"BRA\", \"PRY\"],\n    },\n    {\n        code: \"IHME_WEU\",\n        name: \"Western Europe (IHME GBD)\",\n        slug: \"western-europe-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_2\",\n        publisher: \"ihme_gbd\",\n        members: [\n            \"AND\",\n            \"AUT\",\n            \"BEL\",\n            \"CHE\",\n            \"CYP\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"FIN\",\n            \"FRA\",\n            \"GBR\",\n            \"GRC\",\n            \"IRL\",\n            \"ISL\",\n            \"ISR\",\n            \"ITA\",\n            \"LUX\",\n            \"MCO\",\n            \"MLT\",\n            \"NLD\",\n            \"NOR\",\n            \"PRT\",\n            \"SMR\",\n            \"SWE\",\n        ],\n    },\n    {\n        code: \"IHME_WSSA\",\n        name: \"Western Sub-Saharan Africa (IHME GBD)\",\n        slug: \"western-sub-saharan-africa-ihme-gbd\",\n        regionType: \"aggregate\",\n        definedBy: \"ihme_gbd_2\",\n        publisher: \"ihme_gbd\",\n        members: [\n            \"BEN\",\n            \"BFA\",\n            \"CIV\",\n            \"CMR\",\n            \"CPV\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"LBR\",\n            \"MLI\",\n            \"MRT\",\n            \"NER\",\n            \"NGA\",\n            \"SEN\",\n            \"SLE\",\n            \"STP\",\n            \"TCD\",\n            \"TGO\",\n        ],\n    },\n    {\n        code: \"ILO_AFR\",\n        name: \"Africa (ILO)\",\n        slug: \"africa-ilo\",\n        regionType: \"aggregate\",\n        definedBy: \"ilo_1\",\n        publisher: \"ilo\",\n        members: [\n            \"AGO\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DJI\",\n            \"DZA\",\n            \"EGY\",\n            \"ERI\",\n            \"ESH\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"KEN\",\n            \"LBR\",\n            \"LBY\",\n            \"LSO\",\n            \"MAR\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"REU\",\n            \"RWA\",\n            \"SDN\",\n            \"SEN\",\n            \"SHN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TUN\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"ILO_AMR\",\n        name: \"Americas (ILO)\",\n        slug: \"americas-ilo\",\n        regionType: \"aggregate\",\n        definedBy: \"ilo_1\",\n        publisher: \"ilo\",\n        members: [\n            \"ABW\",\n            \"AIA\",\n            \"ANT\",\n            \"ARG\",\n            \"ATG\",\n            \"BHS\",\n            \"BLZ\",\n            \"BMU\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"CAN\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"FLK\",\n            \"GLP\",\n            \"GRD\",\n            \"GRL\",\n            \"GTM\",\n            \"GUF\",\n            \"GUY\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MEX\",\n            \"MSR\",\n            \"MTQ\",\n            \"NIC\",\n            \"PAN\",\n            \"PER\",\n            \"PRI\",\n            \"PRY\",\n            \"SLV\",\n            \"SPM\",\n            \"SUR\",\n            \"TCA\",\n            \"TTO\",\n            \"URY\",\n            \"USA\",\n            \"VCT\",\n            \"VEN\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"ILO_ARB\",\n        name: \"Arab States (ILO)\",\n        slug: \"arab-states-ilo\",\n        regionType: \"aggregate\",\n        definedBy: \"ilo_1\",\n        publisher: \"ilo\",\n        members: [\n            \"ARE\",\n            \"BHR\",\n            \"IRQ\",\n            \"JOR\",\n            \"KWT\",\n            \"LBN\",\n            \"OMN\",\n            \"PSE\",\n            \"QAT\",\n            \"SAU\",\n            \"SYR\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"ILO_ASP\",\n        name: \"Asia and the Pacific (ILO)\",\n        slug: \"asia-and-the-pacific-ilo\",\n        regionType: \"aggregate\",\n        definedBy: \"ilo_1\",\n        publisher: \"ilo\",\n        members: [\n            \"AFG\",\n            \"ASM\",\n            \"AUS\",\n            \"BGD\",\n            \"BRN\",\n            \"BTN\",\n            \"CHN\",\n            \"COK\",\n            \"FJI\",\n            \"FSM\",\n            \"GUM\",\n            \"HKG\",\n            \"IDN\",\n            \"IND\",\n            \"IRN\",\n            \"JPN\",\n            \"KHM\",\n            \"KIR\",\n            \"KOR\",\n            \"LAO\",\n            \"LKA\",\n            \"MAC\",\n            \"MDV\",\n            \"MHL\",\n            \"MMR\",\n            \"MNG\",\n            \"MNP\",\n            \"MYS\",\n            \"NCL\",\n            \"NFK\",\n            \"NIU\",\n            \"NPL\",\n            \"NRU\",\n            \"NZL\",\n            \"PAK\",\n            \"PHL\",\n            \"PLW\",\n            \"PNG\",\n            \"PRK\",\n            \"PYF\",\n            \"SGP\",\n            \"SLB\",\n            \"THA\",\n            \"TKL\",\n            \"TLS\",\n            \"TON\",\n            \"TUV\",\n            \"TWN\",\n            \"VNM\",\n            \"VUT\",\n            \"WLF\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"ILO_CWA\",\n        name: \"Central and Western Asia (ILO)\",\n        slug: \"central-and-western-asia-ilo\",\n        regionType: \"aggregate\",\n        definedBy: \"ilo_2\",\n        publisher: \"ilo\",\n        members: [\n            \"ARM\",\n            \"AZE\",\n            \"CYP\",\n            \"GEO\",\n            \"ISR\",\n            \"KAZ\",\n            \"KGZ\",\n            \"TJK\",\n            \"TKM\",\n            \"TUR\",\n            \"UZB\",\n        ],\n    },\n    {\n        code: \"ILO_EAS\",\n        name: \"Eastern Asia (ILO)\",\n        slug: \"eastern-asia-ilo\",\n        regionType: \"aggregate\",\n        definedBy: \"ilo_2\",\n        publisher: \"ilo\",\n        members: [\"CHN\", \"HKG\", \"JPN\", \"KOR\", \"MAC\", \"MNG\", \"PRK\", \"TWN\"],\n    },\n    {\n        code: \"ILO_ECA\",\n        name: \"Europe and Central Asia (ILO)\",\n        slug: \"europe-and-central-asia-ilo\",\n        regionType: \"aggregate\",\n        definedBy: \"ilo_1\",\n        publisher: \"ilo\",\n        members: [\n            \"ALB\",\n            \"AND\",\n            \"ARM\",\n            \"AUT\",\n            \"AZE\",\n            \"BEL\",\n            \"BGR\",\n            \"BIH\",\n            \"BLR\",\n            \"CHE\",\n            \"CYP\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"FRO\",\n            \"GBR\",\n            \"GEO\",\n            \"GGY\",\n            \"GIB\",\n            \"GRC\",\n            \"HRV\",\n            \"HUN\",\n            \"IMN\",\n            \"IRL\",\n            \"ISL\",\n            \"ISR\",\n            \"ITA\",\n            \"JEY\",\n            \"KAZ\",\n            \"KGZ\",\n            \"LIE\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MCO\",\n            \"MDA\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"NLD\",\n            \"NOR\",\n            \"OWID_KOS\",\n            \"POL\",\n            \"PRT\",\n            \"ROU\",\n            \"RUS\",\n            \"SMR\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"TJK\",\n            \"TKM\",\n            \"TUR\",\n            \"UKR\",\n            \"UZB\",\n        ],\n    },\n    {\n        code: \"ILO_EEU\",\n        name: \"Eastern Europe (ILO)\",\n        slug: \"eastern-europe-ilo\",\n        regionType: \"aggregate\",\n        definedBy: \"ilo_2\",\n        publisher: \"ilo\",\n        members: [\n            \"BGR\",\n            \"BLR\",\n            \"CZE\",\n            \"HUN\",\n            \"MDA\",\n            \"POL\",\n            \"ROU\",\n            \"RUS\",\n            \"SVK\",\n            \"UKR\",\n        ],\n    },\n    {\n        code: \"ILO_LAC\",\n        name: \"Latin America and the Caribbean (ILO)\",\n        slug: \"latin-america-and-the-caribbean-ilo\",\n        regionType: \"aggregate\",\n        definedBy: \"ilo_2\",\n        publisher: \"ilo\",\n        members: [\n            \"ABW\",\n            \"AIA\",\n            \"ANT\",\n            \"ARG\",\n            \"ATG\",\n            \"BHS\",\n            \"BLZ\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"FLK\",\n            \"GLP\",\n            \"GRD\",\n            \"GTM\",\n            \"GUF\",\n            \"GUY\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MEX\",\n            \"MSR\",\n            \"MTQ\",\n            \"NIC\",\n            \"PAN\",\n            \"PER\",\n            \"PRI\",\n            \"PRY\",\n            \"SLV\",\n            \"SUR\",\n            \"TCA\",\n            \"TTO\",\n            \"URY\",\n            \"VCT\",\n            \"VEN\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"ILO_NAF\",\n        name: \"Northern Africa (ILO)\",\n        slug: \"northern-africa-ilo\",\n        regionType: \"aggregate\",\n        definedBy: \"ilo_2\",\n        publisher: \"ilo\",\n        members: [\"DZA\", \"EGY\", \"ESH\", \"LBY\", \"MAR\", \"SDN\", \"TUN\"],\n    },\n    {\n        code: \"ILO_NAM\",\n        name: \"Northern America (ILO)\",\n        slug: \"northern-america-ilo\",\n        regionType: \"aggregate\",\n        definedBy: \"ilo_2\",\n        publisher: \"ilo\",\n        members: [\"BMU\", \"CAN\", \"GRL\", \"SPM\", \"USA\"],\n    },\n    {\n        code: \"ILO_NSWE\",\n        name: \"Northern, Southern and Western Europe (ILO)\",\n        slug: \"northern-southern-and-western-europe-ilo\",\n        regionType: \"aggregate\",\n        definedBy: \"ilo_2\",\n        publisher: \"ilo\",\n        members: [\n            \"ALB\",\n            \"AND\",\n            \"AUT\",\n            \"BEL\",\n            \"BIH\",\n            \"CHE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"FRO\",\n            \"GBR\",\n            \"GGY\",\n            \"GIB\",\n            \"GRC\",\n            \"HRV\",\n            \"IMN\",\n            \"IRL\",\n            \"ISL\",\n            \"ITA\",\n            \"JEY\",\n            \"LIE\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MCO\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"NLD\",\n            \"NOR\",\n            \"OWID_KOS\",\n            \"PRT\",\n            \"SMR\",\n            \"SRB\",\n            \"SVN\",\n            \"SWE\",\n        ],\n    },\n    {\n        code: \"ILO_SAS\",\n        name: \"Southern Asia (ILO)\",\n        slug: \"southern-asia-ilo\",\n        regionType: \"aggregate\",\n        definedBy: \"ilo_2\",\n        publisher: \"ilo\",\n        members: [\n            \"AFG\",\n            \"BGD\",\n            \"BTN\",\n            \"IND\",\n            \"IRN\",\n            \"LKA\",\n            \"MDV\",\n            \"NPL\",\n            \"PAK\",\n        ],\n    },\n    {\n        code: \"ILO_SEAP\",\n        name: \"South-Eastern Asia and the Pacific (ILO)\",\n        slug: \"south-eastern-asia-and-the-pacific-ilo\",\n        regionType: \"aggregate\",\n        definedBy: \"ilo_2\",\n        publisher: \"ilo\",\n        members: [\n            \"ASM\",\n            \"AUS\",\n            \"BRN\",\n            \"COK\",\n            \"FJI\",\n            \"FSM\",\n            \"GUM\",\n            \"IDN\",\n            \"KHM\",\n            \"KIR\",\n            \"LAO\",\n            \"MHL\",\n            \"MMR\",\n            \"MNP\",\n            \"MYS\",\n            \"NCL\",\n            \"NFK\",\n            \"NIU\",\n            \"NRU\",\n            \"NZL\",\n            \"PHL\",\n            \"PLW\",\n            \"PNG\",\n            \"PYF\",\n            \"SGP\",\n            \"SLB\",\n            \"THA\",\n            \"TKL\",\n            \"TLS\",\n            \"TON\",\n            \"TUV\",\n            \"VNM\",\n            \"VUT\",\n            \"WLF\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"ILO_SSA\",\n        name: \"Sub-Saharan Africa (ILO)\",\n        slug: \"sub-saharan-africa-ilo\",\n        regionType: \"aggregate\",\n        definedBy: \"ilo_2\",\n        publisher: \"ilo\",\n        members: [\n            \"AGO\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DJI\",\n            \"ERI\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"KEN\",\n            \"LBR\",\n            \"LSO\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"REU\",\n            \"RWA\",\n            \"SEN\",\n            \"SHN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"IMN\",\n        shortCode: \"IM\",\n        name: \"Isle of Man\",\n        slug: \"isle-of-man\",\n        regionType: \"country\",\n    },\n    {\n        code: \"IND\",\n        shortCode: \"IN\",\n        name: \"India\",\n        slug: \"india\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"IOT\",\n        shortCode: \"IO\",\n        name: \"British Indian Ocean Territory\",\n        slug: \"british-indian-ocean-territory\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"IRL\",\n        shortCode: \"IE\",\n        name: \"Ireland\",\n        slug: \"ireland\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"IRN\",\n        shortCode: \"IR\",\n        name: \"Iran\",\n        slug: \"iran\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"IRQ\",\n        shortCode: \"IQ\",\n        name: \"Iraq\",\n        slug: \"iraq\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ISL\",\n        shortCode: \"IS\",\n        name: \"Iceland\",\n        slug: \"iceland\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ISR\",\n        shortCode: \"IL\",\n        name: \"Israel\",\n        slug: \"israel\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ITA\",\n        shortCode: \"IT\",\n        name: \"Italy\",\n        slug: \"italy\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"JAM\",\n        shortCode: \"JM\",\n        name: \"Jamaica\",\n        slug: \"jamaica\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"JEY\",\n        shortCode: \"JE\",\n        name: \"Jersey\",\n        slug: \"jersey\",\n        regionType: \"country\",\n    },\n    {\n        code: \"JOR\",\n        shortCode: \"JO\",\n        name: \"Jordan\",\n        slug: \"jordan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"JPN\",\n        shortCode: \"JP\",\n        name: \"Japan\",\n        slug: \"japan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"KAZ\",\n        shortCode: \"KZ\",\n        name: \"Kazakhstan\",\n        slug: \"kazakhstan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"KEN\",\n        shortCode: \"KE\",\n        name: \"Kenya\",\n        slug: \"kenya\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"KGZ\",\n        shortCode: \"KG\",\n        name: \"Kyrgyzstan\",\n        slug: \"kyrgyzstan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"KHM\",\n        shortCode: \"KH\",\n        name: \"Cambodia\",\n        slug: \"cambodia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"KIR\",\n        shortCode: \"KI\",\n        name: \"Kiribati\",\n        slug: \"kiribati\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"KNA\",\n        shortCode: \"KN\",\n        name: \"Saint Kitts and Nevis\",\n        slug: \"saint-kitts-and-nevis\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"KOR\",\n        shortCode: \"KR\",\n        name: \"South Korea\",\n        slug: \"south-korea\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"KWT\",\n        shortCode: \"KW\",\n        name: \"Kuwait\",\n        slug: \"kuwait\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"LAO\",\n        shortCode: \"LA\",\n        name: \"Laos\",\n        slug: \"laos\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"LBN\",\n        shortCode: \"LB\",\n        name: \"Lebanon\",\n        slug: \"lebanon\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"LBR\",\n        shortCode: \"LR\",\n        name: \"Liberia\",\n        slug: \"liberia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"LBY\",\n        shortCode: \"LY\",\n        name: \"Libya\",\n        slug: \"libya\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"LCA\",\n        shortCode: \"LC\",\n        name: \"Saint Lucia\",\n        slug: \"saint-lucia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"LIE\",\n        shortCode: \"LI\",\n        name: \"Liechtenstein\",\n        slug: \"liechtenstein\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"LKA\",\n        shortCode: \"LK\",\n        name: \"Sri Lanka\",\n        slug: \"sri-lanka\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"LSO\",\n        shortCode: \"LS\",\n        name: \"Lesotho\",\n        slug: \"lesotho\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"LTU\",\n        shortCode: \"LT\",\n        name: \"Lithuania\",\n        slug: \"lithuania\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"LUX\",\n        shortCode: \"LU\",\n        name: \"Luxembourg\",\n        slug: \"luxembourg\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"LVA\",\n        shortCode: \"LV\",\n        name: \"Latvia\",\n        slug: \"latvia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MAC\",\n        shortCode: \"MO\",\n        name: \"Macao\",\n        slug: \"macao\",\n        regionType: \"country\",\n    },\n    {\n        code: \"MADDISON_EA\",\n        name: \"East Asia (Maddison)\",\n        slug: \"east-asia-maddison\",\n        regionType: \"aggregate\",\n        definedBy: \"maddison\",\n        publisher: \"maddison\",\n        members: [\"CHN\", \"HKG\", \"JPN\", \"KOR\", \"PRK\", \"TWN\"],\n    },\n    {\n        code: \"MADDISON_EE\",\n        name: \"Eastern Europe (Maddison)\",\n        slug: \"eastern-europe-maddison\",\n        regionType: \"aggregate\",\n        definedBy: \"maddison\",\n        publisher: \"maddison\",\n        members: [\n            \"ALB\",\n            \"ARM\",\n            \"AZE\",\n            \"BGR\",\n            \"BIH\",\n            \"BLR\",\n            \"CYP\",\n            \"CZE\",\n            \"EST\",\n            \"GEO\",\n            \"HRV\",\n            \"HUN\",\n            \"KAZ\",\n            \"KGZ\",\n            \"LTU\",\n            \"LVA\",\n            \"MDA\",\n            \"MKD\",\n            \"MNE\",\n            \"OWID_CZS\",\n            \"OWID_USS\",\n            \"OWID_YGS\",\n            \"POL\",\n            \"ROU\",\n            \"RUS\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"TJK\",\n            \"TKM\",\n            \"UKR\",\n            \"UZB\",\n        ],\n    },\n    {\n        code: \"MADDISON_LA\",\n        name: \"Latin America (Maddison)\",\n        slug: \"latin-america-maddison\",\n        regionType: \"aggregate\",\n        definedBy: \"maddison\",\n        publisher: \"maddison\",\n        members: [\n            \"ARG\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"GTM\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"LCA\",\n            \"MEX\",\n            \"NIC\",\n            \"PAN\",\n            \"PER\",\n            \"PRI\",\n            \"PRY\",\n            \"SLV\",\n            \"TTO\",\n            \"URY\",\n            \"VEN\",\n        ],\n    },\n    {\n        code: \"MADDISON_MENA\",\n        name: \"Middle East and North Africa (Maddison)\",\n        slug: \"middle-east-and-north-africa-maddison\",\n        regionType: \"aggregate\",\n        definedBy: \"maddison\",\n        publisher: \"maddison\",\n        members: [\n            \"ARE\",\n            \"BHR\",\n            \"DZA\",\n            \"EGY\",\n            \"IRN\",\n            \"IRQ\",\n            \"ISR\",\n            \"JOR\",\n            \"KWT\",\n            \"LBN\",\n            \"LBY\",\n            \"MAR\",\n            \"OMN\",\n            \"PSE\",\n            \"QAT\",\n            \"SAU\",\n            \"SYR\",\n            \"TUN\",\n            \"TUR\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"MADDISON_SSA\",\n        name: \"Sub Saharan Africa (Maddison)\",\n        slug: \"sub-saharan-africa-maddison\",\n        regionType: \"aggregate\",\n        definedBy: \"maddison\",\n        publisher: \"maddison\",\n        members: [\n            \"AGO\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DJI\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"KEN\",\n            \"LBR\",\n            \"LSO\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"OWID_SDN\",\n            \"RWA\",\n            \"SEN\",\n            \"SLE\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"MADDISON_SSEA\",\n        name: \"South and South East Asia (Maddison)\",\n        slug: \"south-and-south-east-asia-maddison\",\n        regionType: \"aggregate\",\n        definedBy: \"maddison\",\n        publisher: \"maddison\",\n        members: [\n            \"AFG\",\n            \"BGD\",\n            \"IDN\",\n            \"IND\",\n            \"KHM\",\n            \"LAO\",\n            \"LKA\",\n            \"MMR\",\n            \"MNG\",\n            \"MYS\",\n            \"NPL\",\n            \"PAK\",\n            \"PHL\",\n            \"SGP\",\n            \"THA\",\n            \"VNM\",\n        ],\n    },\n    {\n        code: \"MADDISON_WE\",\n        name: \"Western Europe (Maddison)\",\n        slug: \"western-europe-maddison\",\n        regionType: \"aggregate\",\n        definedBy: \"maddison\",\n        publisher: \"maddison\",\n        members: [\n            \"AUT\",\n            \"BEL\",\n            \"CHE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"FIN\",\n            \"FRA\",\n            \"GBR\",\n            \"GRC\",\n            \"IRL\",\n            \"ISL\",\n            \"ITA\",\n            \"LUX\",\n            \"MLT\",\n            \"NLD\",\n            \"NOR\",\n            \"PRT\",\n            \"SWE\",\n        ],\n    },\n    {\n        code: \"MADDISON_WO\",\n        name: \"Western offshoots (Maddison)\",\n        slug: \"western-offshoots-maddison\",\n        regionType: \"aggregate\",\n        definedBy: \"maddison\",\n        publisher: \"maddison\",\n        members: [\"AUS\", \"CAN\", \"NZL\", \"USA\"],\n    },\n    {\n        code: \"MAF\",\n        shortCode: \"MF\",\n        name: \"Saint Martin (French part)\",\n        slug: \"saint-martin-french-part\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"MAR\",\n        shortCode: \"MA\",\n        name: \"Morocco\",\n        slug: \"morocco\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MCO\",\n        shortCode: \"MC\",\n        name: \"Monaco\",\n        slug: \"monaco\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MDA\",\n        shortCode: \"MD\",\n        name: \"Moldova\",\n        slug: \"moldova\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MDG\",\n        shortCode: \"MG\",\n        name: \"Madagascar\",\n        slug: \"madagascar\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MDV\",\n        shortCode: \"MV\",\n        name: \"Maldives\",\n        slug: \"maldives\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MEX\",\n        shortCode: \"MX\",\n        name: \"Mexico\",\n        slug: \"mexico\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MHL\",\n        shortCode: \"MH\",\n        name: \"Marshall Islands\",\n        slug: \"marshall-islands\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MKD\",\n        shortCode: \"MK\",\n        name: \"North Macedonia\",\n        slug: \"north-macedonia\",\n        regionType: \"country\",\n        isMappable: true,\n        variantNames: [\"Macedonia\"],\n    },\n    {\n        code: \"MLI\",\n        shortCode: \"ML\",\n        name: \"Mali\",\n        slug: \"mali\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MLT\",\n        shortCode: \"MT\",\n        name: \"Malta\",\n        slug: \"malta\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MMR\",\n        shortCode: \"MM\",\n        name: \"Myanmar\",\n        slug: \"myanmar\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MNE\",\n        shortCode: \"ME\",\n        name: \"Montenegro\",\n        slug: \"montenegro\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MNG\",\n        shortCode: \"MN\",\n        name: \"Mongolia\",\n        slug: \"mongolia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MNP\",\n        shortCode: \"MP\",\n        name: \"Northern Mariana Islands\",\n        slug: \"northern-mariana-islands\",\n        regionType: \"country\",\n    },\n    {\n        code: \"MOZ\",\n        shortCode: \"MZ\",\n        name: \"Mozambique\",\n        slug: \"mozambique\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MRT\",\n        shortCode: \"MR\",\n        name: \"Mauritania\",\n        slug: \"mauritania\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MSR\",\n        shortCode: \"MS\",\n        name: \"Montserrat\",\n        slug: \"montserrat\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"MTQ\",\n        shortCode: \"MQ\",\n        name: \"Martinique\",\n        slug: \"martinique\",\n        regionType: \"country\",\n    },\n    {\n        code: \"MUS\",\n        shortCode: \"MU\",\n        name: \"Mauritius\",\n        slug: \"mauritius\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MWI\",\n        shortCode: \"MW\",\n        name: \"Malawi\",\n        slug: \"malawi\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MYS\",\n        shortCode: \"MY\",\n        name: \"Malaysia\",\n        slug: \"malaysia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MYT\",\n        shortCode: \"YT\",\n        name: \"Mayotte\",\n        slug: \"mayotte\",\n        regionType: \"country\",\n    },\n    {\n        code: \"NAM\",\n        shortCode: \"NA\",\n        name: \"Namibia\",\n        slug: \"namibia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"NCL\",\n        shortCode: \"NC\",\n        name: \"New Caledonia\",\n        slug: \"new-caledonia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"NER\",\n        shortCode: \"NE\",\n        name: \"Niger\",\n        slug: \"niger\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"NFK\",\n        shortCode: \"NF\",\n        name: \"Norfolk Island\",\n        slug: \"norfolk-island\",\n        regionType: \"country\",\n    },\n    {\n        code: \"NGA\",\n        shortCode: \"NG\",\n        name: \"Nigeria\",\n        slug: \"nigeria\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"NIC\",\n        shortCode: \"NI\",\n        name: \"Nicaragua\",\n        slug: \"nicaragua\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"NIU\",\n        shortCode: \"NU\",\n        name: \"Niue\",\n        slug: \"niue\",\n        regionType: \"country\",\n    },\n    {\n        code: \"NLD\",\n        shortCode: \"NL\",\n        name: \"Netherlands\",\n        slug: \"netherlands\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"NOR\",\n        shortCode: \"NO\",\n        name: \"Norway\",\n        slug: \"norway\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"NPL\",\n        shortCode: \"NP\",\n        name: \"Nepal\",\n        slug: \"nepal\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"NRU\",\n        shortCode: \"NR\",\n        name: \"Nauru\",\n        slug: \"nauru\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"NZL\",\n        shortCode: \"NZ\",\n        name: \"New Zealand\",\n        slug: \"new-zealand\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"OMN\",\n        shortCode: \"OM\",\n        name: \"Oman\",\n        slug: \"oman\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"OWID_ABK\",\n        name: \"Abkhazia\",\n        slug: \"abkhazia\",\n        regionType: \"other\",\n    },\n    {\n        code: \"OWID_AFR\",\n        name: \"Africa\",\n        slug: \"africa\",\n        regionType: \"continent\",\n        translationCodes: [\"002\"],\n        members: [\n            \"AGO\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DJI\",\n            \"DZA\",\n            \"EGY\",\n            \"ERI\",\n            \"ESH\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"KEN\",\n            \"LBR\",\n            \"LBY\",\n            \"LSO\",\n            \"MAR\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"MYT\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"OWID_ERE\",\n            \"OWID_OFS\",\n            \"OWID_SDN\",\n            \"OWID_SML\",\n            \"OWID_ZAN\",\n            \"REU\",\n            \"RWA\",\n            \"SDN\",\n            \"SEN\",\n            \"SHN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TUN\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"OWID_AKD\",\n        name: \"Akrotiri and Dhekelia\",\n        slug: \"akrotiri-and-dhekelia\",\n        regionType: \"other\",\n    },\n    {\n        code: \"OWID_ASI\",\n        name: \"Asia\",\n        slug: \"asia\",\n        regionType: \"continent\",\n        translationCodes: [\"142\"],\n        members: [\n            \"AFG\",\n            \"ARE\",\n            \"ARM\",\n            \"AZE\",\n            \"BGD\",\n            \"BHR\",\n            \"BRN\",\n            \"BTN\",\n            \"CCK\",\n            \"CHN\",\n            \"CXR\",\n            \"GEO\",\n            \"HKG\",\n            \"IDN\",\n            \"IND\",\n            \"IOT\",\n            \"IRN\",\n            \"IRQ\",\n            \"ISR\",\n            \"JOR\",\n            \"JPN\",\n            \"KAZ\",\n            \"KGZ\",\n            \"KHM\",\n            \"KOR\",\n            \"KWT\",\n            \"LAO\",\n            \"LBN\",\n            \"LKA\",\n            \"MAC\",\n            \"MDV\",\n            \"MMR\",\n            \"MNG\",\n            \"MYS\",\n            \"NPL\",\n            \"OMN\",\n            \"OWID_ABK\",\n            \"OWID_CYN\",\n            \"OWID_DRV\",\n            \"OWID_FPK\",\n            \"OWID_KRU\",\n            \"OWID_NAG\",\n            \"OWID_RVN\",\n            \"OWID_SOS\",\n            \"OWID_YAR\",\n            \"OWID_YPR\",\n            \"PAK\",\n            \"PHL\",\n            \"PRK\",\n            \"PSE\",\n            \"QAT\",\n            \"SAU\",\n            \"SGP\",\n            \"SYR\",\n            \"THA\",\n            \"TJK\",\n            \"TKM\",\n            \"TLS\",\n            \"TUR\",\n            \"TWN\",\n            \"UZB\",\n            \"VNM\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"OWID_AUH\",\n        name: \"Austria-Hungary\",\n        slug: \"austria-hungary\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_BAD\",\n        name: \"Grand Duchy of Baden\",\n        slug: \"grand-duchy-of-baden\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_BAV\",\n        name: \"Kingdom of Bavaria\",\n        slug: \"kingdom-of-bavaria\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_CIS\",\n        name: \"Channel Islands\",\n        slug: \"channel-islands\",\n        regionType: \"aggregate\",\n        members: [\"GGY\", \"JEY\"],\n    },\n    {\n        code: \"OWID_CYN\",\n        name: \"Northern Cyprus\",\n        slug: \"northern-cyprus\",\n        regionType: \"other\",\n    },\n    {\n        code: \"OWID_CZS\",\n        name: \"Czechoslovakia\",\n        slug: \"czechoslovakia\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_DRV\",\n        name: \"Democratic Republic of Vietnam\",\n        slug: \"democratic-republic-of-vietnam\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_DSI\",\n        name: \"Kingdom of the Two Sicilies\",\n        slug: \"kingdom-of-the-two-sicilies\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_ERE\",\n        name: \"Ethiopia (former)\",\n        slug: \"ethiopia-former\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_EU27\",\n        name: \"European Union (27)\",\n        slug: \"european-union-27\",\n        regionType: \"aggregate\",\n        members: [\n            \"AUT\",\n            \"BEL\",\n            \"BGR\",\n            \"CYP\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"GRC\",\n            \"HRV\",\n            \"HUN\",\n            \"IRL\",\n            \"ITA\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MLT\",\n            \"NLD\",\n            \"POL\",\n            \"PRT\",\n            \"ROU\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n        ],\n    },\n    {\n        code: \"OWID_EUR\",\n        name: \"Europe\",\n        slug: \"europe\",\n        regionType: \"continent\",\n        translationCodes: [\"150\"],\n        members: [\n            \"ALA\",\n            \"ALB\",\n            \"AND\",\n            \"AUT\",\n            \"BEL\",\n            \"BGR\",\n            \"BIH\",\n            \"BLR\",\n            \"CHE\",\n            \"CYP\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"FRO\",\n            \"GBR\",\n            \"GGY\",\n            \"GIB\",\n            \"GRC\",\n            \"HRV\",\n            \"HUN\",\n            \"IMN\",\n            \"IRL\",\n            \"ISL\",\n            \"ITA\",\n            \"JEY\",\n            \"LIE\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MCO\",\n            \"MDA\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"NLD\",\n            \"NOR\",\n            \"OWID_AKD\",\n            \"OWID_AUH\",\n            \"OWID_BAD\",\n            \"OWID_BAV\",\n            \"OWID_CZS\",\n            \"OWID_DSI\",\n            \"OWID_GDR\",\n            \"OWID_GFR\",\n            \"OWID_KOS\",\n            \"OWID_MOD\",\n            \"OWID_PAR\",\n            \"OWID_SAR\",\n            \"OWID_SAX\",\n            \"OWID_SEK\",\n            \"OWID_SRM\",\n            \"OWID_TRS\",\n            \"OWID_TSC\",\n            \"OWID_USS\",\n            \"OWID_WTB\",\n            \"OWID_YGS\",\n            \"POL\",\n            \"PRT\",\n            \"ROU\",\n            \"RUS\",\n            \"SJM\",\n            \"SMR\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"UKR\",\n            \"VAT\",\n        ],\n    },\n    {\n        code: \"OWID_FPK\",\n        name: \"Pakistan (former)\",\n        slug: \"pakistan-former\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_GCL\",\n        name: \"Great Colombia\",\n        slug: \"great-colombia\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_GDR\",\n        name: \"East Germany\",\n        slug: \"east-germany\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_GFR\",\n        name: \"West Germany\",\n        slug: \"west-germany\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_HIC\",\n        name: \"High-income countries\",\n        slug: \"high-income-countries\",\n        regionType: \"income_group\",\n        members: [\n            \"ABW\",\n            \"AND\",\n            \"ARE\",\n            \"ASM\",\n            \"ATF\",\n            \"ATG\",\n            \"AUS\",\n            \"AUT\",\n            \"BEL\",\n            \"BGR\",\n            \"BHR\",\n            \"BHS\",\n            \"BMU\",\n            \"BRB\",\n            \"BRN\",\n            \"CAN\",\n            \"CHE\",\n            \"CHL\",\n            \"CRI\",\n            \"CUW\",\n            \"CYM\",\n            \"CYP\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"FRO\",\n            \"GBR\",\n            \"GIB\",\n            \"GRC\",\n            \"GRL\",\n            \"GUF\",\n            \"GUM\",\n            \"GUY\",\n            \"HKG\",\n            \"HRV\",\n            \"HUN\",\n            \"IMN\",\n            \"IRL\",\n            \"ISL\",\n            \"ISR\",\n            \"ITA\",\n            \"JPN\",\n            \"KNA\",\n            \"KOR\",\n            \"KWT\",\n            \"LIE\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MAC\",\n            \"MAF\",\n            \"MCO\",\n            \"MLT\",\n            \"MNP\",\n            \"NCL\",\n            \"NLD\",\n            \"NOR\",\n            \"NRU\",\n            \"NZL\",\n            \"OMN\",\n            \"OWID_CIS\",\n            \"PAN\",\n            \"PLW\",\n            \"POL\",\n            \"PRI\",\n            \"PRT\",\n            \"PYF\",\n            \"QAT\",\n            \"ROU\",\n            \"RUS\",\n            \"SAU\",\n            \"SGP\",\n            \"SMR\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"SXM\",\n            \"SYC\",\n            \"TCA\",\n            \"TTO\",\n            \"TWN\",\n            \"URY\",\n            \"USA\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"OWID_KOS\",\n        name: \"Kosovo\",\n        slug: \"kosovo\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"OWID_KRU\",\n        name: \"Korea (former)\",\n        slug: \"korea-former\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_LIC\",\n        name: \"Low-income countries\",\n        slug: \"low-income-countries\",\n        regionType: \"income_group\",\n        members: [\n            \"AFG\",\n            \"BDI\",\n            \"BFA\",\n            \"CAF\",\n            \"COD\",\n            \"ERI\",\n            \"ETH\",\n            \"GMB\",\n            \"GNB\",\n            \"LBR\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MWI\",\n            \"NER\",\n            \"PRK\",\n            \"RWA\",\n            \"SDN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"SYR\",\n            \"TCD\",\n            \"UGA\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"OWID_LMC\",\n        name: \"Lower-middle-income countries\",\n        slug: \"lower-middle-income-countries\",\n        regionType: \"income_group\",\n        members: [\n            \"AGO\",\n            \"BEN\",\n            \"BGD\",\n            \"BOL\",\n            \"BTN\",\n            \"CIV\",\n            \"CMR\",\n            \"COG\",\n            \"COM\",\n            \"DJI\",\n            \"EGY\",\n            \"GHA\",\n            \"GIN\",\n            \"HND\",\n            \"HTI\",\n            \"IND\",\n            \"KEN\",\n            \"KGZ\",\n            \"KHM\",\n            \"KIR\",\n            \"LAO\",\n            \"LBN\",\n            \"LSO\",\n            \"MAR\",\n            \"MMR\",\n            \"MRT\",\n            \"NAM\",\n            \"NGA\",\n            \"NIC\",\n            \"NPL\",\n            \"PAK\",\n            \"PNG\",\n            \"PSE\",\n            \"SEN\",\n            \"SLB\",\n            \"STP\",\n            \"SWZ\",\n            \"TGO\",\n            \"TJK\",\n            \"TLS\",\n            \"TUN\",\n            \"TZA\",\n            \"UZB\",\n            \"VEN\",\n            \"VUT\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"OWID_MNS\",\n        name: \"Melanesia\",\n        slug: \"melanesia\",\n        regionType: \"aggregate\",\n        translationCodes: [\"054\"],\n        members: [\"FJI\", \"PNG\", \"SLB\", \"VUT\"],\n    },\n    {\n        code: \"OWID_MOD\",\n        name: \"Duchy of Modena and Reggio\",\n        slug: \"duchy-of-modena-and-reggio\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_NAG\",\n        name: \"Nagorno-Karabakh\",\n        slug: \"nagorno-karabakh\",\n        regionType: \"other\",\n    },\n    {\n        code: \"OWID_NAM\",\n        name: \"North America\",\n        slug: \"north-america\",\n        regionType: \"continent\",\n        translationCodes: [\"003\"],\n        members: [\n            \"ABW\",\n            \"AIA\",\n            \"ANT\",\n            \"ATG\",\n            \"BES\",\n            \"BHS\",\n            \"BLM\",\n            \"BLZ\",\n            \"BMU\",\n            \"BRB\",\n            \"CAN\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"GLP\",\n            \"GRD\",\n            \"GRL\",\n            \"GTM\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MAF\",\n            \"MEX\",\n            \"MSR\",\n            \"MTQ\",\n            \"NIC\",\n            \"OWID_RCA\",\n            \"PAN\",\n            \"PRI\",\n            \"SLV\",\n            \"SPM\",\n            \"SXM\",\n            \"TCA\",\n            \"TTO\",\n            \"USA\",\n            \"VCT\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"OWID_NH\",\n        name: \"Northern Hemisphere\",\n        slug: \"northern-hemisphere\",\n        regionType: \"aggregate\",\n        members: [\n            \"ABW\",\n            \"AFG\",\n            \"AIA\",\n            \"ALA\",\n            \"ALB\",\n            \"AND\",\n            \"ANT\",\n            \"ARE\",\n            \"ARM\",\n            \"ATG\",\n            \"AUT\",\n            \"AZE\",\n            \"BEL\",\n            \"BEN\",\n            \"BES\",\n            \"BFA\",\n            \"BGD\",\n            \"BGR\",\n            \"BHR\",\n            \"BHS\",\n            \"BIH\",\n            \"BLM\",\n            \"BLR\",\n            \"BLZ\",\n            \"BMU\",\n            \"BRB\",\n            \"BRN\",\n            \"BTN\",\n            \"CAF\",\n            \"CAN\",\n            \"CHE\",\n            \"CHN\",\n            \"CIV\",\n            \"CMR\",\n            \"COL\",\n            \"CPV\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"CYP\",\n            \"CZE\",\n            \"DEU\",\n            \"DJI\",\n            \"DMA\",\n            \"DNK\",\n            \"DOM\",\n            \"DZA\",\n            \"EGY\",\n            \"ERI\",\n            \"ESH\",\n            \"ESP\",\n            \"EST\",\n            \"ETH\",\n            \"FIN\",\n            \"FRA\",\n            \"FRO\",\n            \"FSM\",\n            \"GBR\",\n            \"GEO\",\n            \"GGY\",\n            \"GHA\",\n            \"GIB\",\n            \"GIN\",\n            \"GLP\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"GRC\",\n            \"GRD\",\n            \"GRL\",\n            \"GTM\",\n            \"GUF\",\n            \"GUM\",\n            \"GUY\",\n            \"HKG\",\n            \"HND\",\n            \"HRV\",\n            \"HTI\",\n            \"HUN\",\n            \"IMN\",\n            \"IND\",\n            \"IRL\",\n            \"IRN\",\n            \"IRQ\",\n            \"ISL\",\n            \"ISR\",\n            \"ITA\",\n            \"JAM\",\n            \"JEY\",\n            \"JOR\",\n            \"JPN\",\n            \"KAZ\",\n            \"KEN\",\n            \"KGZ\",\n            \"KHM\",\n            \"KIR\",\n            \"KNA\",\n            \"KOR\",\n            \"KWT\",\n            \"LAO\",\n            \"LBN\",\n            \"LBR\",\n            \"LBY\",\n            \"LCA\",\n            \"LIE\",\n            \"LKA\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MAC\",\n            \"MAF\",\n            \"MAR\",\n            \"MCO\",\n            \"MDA\",\n            \"MDV\",\n            \"MEX\",\n            \"MHL\",\n            \"MKD\",\n            \"MLI\",\n            \"MLT\",\n            \"MMR\",\n            \"MNE\",\n            \"MNG\",\n            \"MNP\",\n            \"MRT\",\n            \"MSR\",\n            \"MTQ\",\n            \"MYS\",\n            \"NER\",\n            \"NGA\",\n            \"NIC\",\n            \"NLD\",\n            \"NOR\",\n            \"NPL\",\n            \"OMN\",\n            \"OWID_AUH\",\n            \"OWID_BAD\",\n            \"OWID_BAV\",\n            \"OWID_CZS\",\n            \"OWID_DRV\",\n            \"OWID_DSI\",\n            \"OWID_ERE\",\n            \"OWID_FPK\",\n            \"OWID_GCL\",\n            \"OWID_GDR\",\n            \"OWID_GFR\",\n            \"OWID_KOS\",\n            \"OWID_KRU\",\n            \"OWID_MOD\",\n            \"OWID_PAR\",\n            \"OWID_RCA\",\n            \"OWID_RVN\",\n            \"OWID_SAR\",\n            \"OWID_SAX\",\n            \"OWID_SDN\",\n            \"OWID_SRM\",\n            \"OWID_TSC\",\n            \"OWID_USS\",\n            \"OWID_WTB\",\n            \"OWID_YAR\",\n            \"OWID_YGS\",\n            \"OWID_YPR\",\n            \"PAK\",\n            \"PAN\",\n            \"PHL\",\n            \"PLW\",\n            \"POL\",\n            \"PRI\",\n            \"PRK\",\n            \"PRT\",\n            \"PSE\",\n            \"PS_GZA\",\n            \"QAT\",\n            \"ROU\",\n            \"RUS\",\n            \"SAU\",\n            \"SDN\",\n            \"SEN\",\n            \"SGP\",\n            \"SLE\",\n            \"SLV\",\n            \"SMR\",\n            \"SOM\",\n            \"SPM\",\n            \"SRB\",\n            \"SSD\",\n            \"STP\",\n            \"SUR\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"SXM\",\n            \"SYR\",\n            \"TCA\",\n            \"TCD\",\n            \"TGO\",\n            \"THA\",\n            \"TJK\",\n            \"TKM\",\n            \"TTO\",\n            \"TUN\",\n            \"TUR\",\n            \"TWN\",\n            \"UGA\",\n            \"UKR\",\n            \"USA\",\n            \"UZB\",\n            \"VAT\",\n            \"VCT\",\n            \"VEN\",\n            \"VGB\",\n            \"VIR\",\n            \"VNM\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"OWID_OCE\",\n        name: \"Oceania\",\n        slug: \"oceania\",\n        regionType: \"continent\",\n        translationCodes: [\"009\"],\n        members: [\n            \"ASM\",\n            \"AUS\",\n            \"COK\",\n            \"FJI\",\n            \"FSM\",\n            \"GUM\",\n            \"KIR\",\n            \"MHL\",\n            \"MNP\",\n            \"NCL\",\n            \"NFK\",\n            \"NIU\",\n            \"NRU\",\n            \"NZL\",\n            \"PCN\",\n            \"PLW\",\n            \"PNG\",\n            \"PYF\",\n            \"SLB\",\n            \"TKL\",\n            \"TON\",\n            \"TUV\",\n            \"UMI\",\n            \"VUT\",\n            \"WLF\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"OWID_OFS\",\n        name: \"Orange Free State\",\n        slug: \"orange-free-state\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_PAR\",\n        name: \"Duchy of Parma and Piacenza\",\n        slug: \"duchy-of-parma-and-piacenza\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_PYA\",\n        name: \"Polynesia\",\n        slug: \"polynesia\",\n        regionType: \"aggregate\",\n        translationCodes: [\"061\"],\n        members: [\n            \"ASM\",\n            \"COK\",\n            \"NFK\",\n            \"NIU\",\n            \"NZL\",\n            \"PCN\",\n            \"PYF\",\n            \"TKL\",\n            \"TON\",\n            \"TUV\",\n            \"WLF\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"OWID_RCA\",\n        name: \"Federal Republic of Central America\",\n        slug: \"federal-republic-of-central-america\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_RVN\",\n        name: \"Republic of Vietnam\",\n        slug: \"republic-of-vietnam\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_SAM\",\n        name: \"South America\",\n        slug: \"south-america\",\n        regionType: \"continent\",\n        translationCodes: [\"005\"],\n        members: [\n            \"ARG\",\n            \"BOL\",\n            \"BRA\",\n            \"CHL\",\n            \"COL\",\n            \"ECU\",\n            \"FLK\",\n            \"GUF\",\n            \"GUY\",\n            \"OWID_GCL\",\n            \"PER\",\n            \"PRY\",\n            \"SGS\",\n            \"SUR\",\n            \"URY\",\n            \"VEN\",\n        ],\n    },\n    {\n        code: \"OWID_SAR\",\n        name: \"Kingdom of Sardinia\",\n        slug: \"kingdom-of-sardinia\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_SAX\",\n        name: \"Kingdom of Saxony\",\n        slug: \"kingdom-of-saxony\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_SDN\",\n        name: \"Sudan (former)\",\n        slug: \"sudan-former\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_SEK\",\n        name: \"Serbia excluding Kosovo\",\n        slug: \"serbia-excluding-kosovo\",\n        regionType: \"other\",\n    },\n    {\n        code: \"OWID_SH\",\n        name: \"Southern Hemisphere\",\n        slug: \"southern-hemisphere\",\n        regionType: \"aggregate\",\n        members: [\n            \"AGO\",\n            \"ARG\",\n            \"ASM\",\n            \"ATF\",\n            \"AUS\",\n            \"BDI\",\n            \"BOL\",\n            \"BRA\",\n            \"BVT\",\n            \"BWA\",\n            \"CCK\",\n            \"CHL\",\n            \"COD\",\n            \"COG\",\n            \"COK\",\n            \"COM\",\n            \"CXR\",\n            \"ECU\",\n            \"FJI\",\n            \"FLK\",\n            \"GAB\",\n            \"HMD\",\n            \"IDN\",\n            \"IOT\",\n            \"LSO\",\n            \"MDG\",\n            \"MOZ\",\n            \"MUS\",\n            \"MWI\",\n            \"MYT\",\n            \"NAM\",\n            \"NCL\",\n            \"NFK\",\n            \"NIU\",\n            \"NRU\",\n            \"NZL\",\n            \"OWID_OFS\",\n            \"PCN\",\n            \"PER\",\n            \"PNG\",\n            \"PRY\",\n            \"PYF\",\n            \"REU\",\n            \"RWA\",\n            \"SGS\",\n            \"SHN\",\n            \"SLB\",\n            \"SWZ\",\n            \"SYC\",\n            \"TKL\",\n            \"TLS\",\n            \"TON\",\n            \"TUV\",\n            \"TZA\",\n            \"URY\",\n            \"VUT\",\n            \"WLF\",\n            \"WSM\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"OWID_SML\",\n        name: \"Somaliland\",\n        slug: \"somaliland\",\n        regionType: \"other\",\n    },\n    {\n        code: \"OWID_SOS\",\n        name: \"South Ossetia\",\n        slug: \"south-ossetia\",\n        regionType: \"other\",\n    },\n    {\n        code: \"OWID_SRM\",\n        name: \"Serbia and Montenegro\",\n        slug: \"serbia-and-montenegro\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_TRS\",\n        name: \"Transnistria\",\n        slug: \"transnistria\",\n        regionType: \"other\",\n    },\n    {\n        code: \"OWID_TSC\",\n        name: \"Grand Duchy of Tuscany\",\n        slug: \"grand-duchy-of-tuscany\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_UMC\",\n        name: \"Upper-middle-income countries\",\n        slug: \"upper-middle-income-countries\",\n        regionType: \"income_group\",\n        members: [\n            \"ALB\",\n            \"ARG\",\n            \"ARM\",\n            \"AZE\",\n            \"BIH\",\n            \"BLR\",\n            \"BLZ\",\n            \"BRA\",\n            \"BWA\",\n            \"CHN\",\n            \"COL\",\n            \"CPV\",\n            \"CUB\",\n            \"DMA\",\n            \"DOM\",\n            \"DZA\",\n            \"ECU\",\n            \"FJI\",\n            \"FSM\",\n            \"GAB\",\n            \"GEO\",\n            \"GNQ\",\n            \"GRD\",\n            \"GTM\",\n            \"IDN\",\n            \"IRN\",\n            \"IRQ\",\n            \"JAM\",\n            \"JOR\",\n            \"KAZ\",\n            \"LBY\",\n            \"LCA\",\n            \"LKA\",\n            \"MDA\",\n            \"MDV\",\n            \"MEX\",\n            \"MHL\",\n            \"MKD\",\n            \"MNE\",\n            \"MNG\",\n            \"MUS\",\n            \"MYS\",\n            \"OWID_KOS\",\n            \"PER\",\n            \"PHL\",\n            \"PRY\",\n            \"SLV\",\n            \"SRB\",\n            \"SUR\",\n            \"THA\",\n            \"TKM\",\n            \"TON\",\n            \"TUR\",\n            \"TUV\",\n            \"UKR\",\n            \"VCT\",\n            \"VNM\",\n            \"WSM\",\n            \"ZAF\",\n        ],\n    },\n    {\n        code: \"OWID_USS\",\n        name: \"USSR\",\n        slug: \"ussr\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_WRL\",\n        name: \"World\",\n        slug: \"world\",\n        regionType: \"aggregate\",\n        translationCodes: [\"001\"],\n        members: [\n            \"OWID_AFR\",\n            \"OWID_ASI\",\n            \"OWID_EUR\",\n            \"OWID_NAM\",\n            \"OWID_OCE\",\n            \"OWID_SAM\",\n        ],\n    },\n    {\n        code: \"OWID_WTB\",\n        name: \"Kingdom of Wurttemberg\",\n        slug: \"kingdom-of-wurttemberg\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_YAR\",\n        name: \"Yemen Arab Republic\",\n        slug: \"yemen-arab-republic\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_YGS\",\n        name: \"Yugoslavia\",\n        slug: \"yugoslavia\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_YPR\",\n        name: \"Yemen People's Republic\",\n        slug: \"yemen-peoples-republic\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_ZAN\",\n        name: \"Zanzibar\",\n        slug: \"zanzibar\",\n        regionType: \"other\",\n    },\n    {\n        code: \"PAK\",\n        shortCode: \"PK\",\n        name: \"Pakistan\",\n        slug: \"pakistan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"PAN\",\n        shortCode: \"PA\",\n        name: \"Panama\",\n        slug: \"panama\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"PCN\",\n        shortCode: \"PN\",\n        name: \"Pitcairn\",\n        slug: \"pitcairn\",\n        regionType: \"country\",\n    },\n    {\n        code: \"PER\",\n        shortCode: \"PE\",\n        name: \"Peru\",\n        slug: \"peru\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"PEW_APA\",\n        name: \"Asia-Pacific (Pew)\",\n        slug: \"asia-pacific-pew\",\n        regionType: \"aggregate\",\n        definedBy: \"pew\",\n        publisher: \"pew\",\n        members: [\n            \"AFG\",\n            \"ARM\",\n            \"ASM\",\n            \"AUS\",\n            \"AZE\",\n            \"BGD\",\n            \"BRN\",\n            \"BTN\",\n            \"CHN\",\n            \"COK\",\n            \"CYP\",\n            \"FJI\",\n            \"FSM\",\n            \"GUM\",\n            \"HKG\",\n            \"IDN\",\n            \"IND\",\n            \"IRN\",\n            \"JPN\",\n            \"KAZ\",\n            \"KGZ\",\n            \"KHM\",\n            \"KIR\",\n            \"KOR\",\n            \"LAO\",\n            \"LKA\",\n            \"MAC\",\n            \"MDV\",\n            \"MHL\",\n            \"MMR\",\n            \"MNG\",\n            \"MNP\",\n            \"MYS\",\n            \"NCL\",\n            \"NIU\",\n            \"NPL\",\n            \"NRU\",\n            \"NZL\",\n            \"PAK\",\n            \"PHL\",\n            \"PLW\",\n            \"PNG\",\n            \"PRK\",\n            \"PYF\",\n            \"SGP\",\n            \"SLB\",\n            \"THA\",\n            \"TJK\",\n            \"TKL\",\n            \"TKM\",\n            \"TLS\",\n            \"TON\",\n            \"TUR\",\n            \"TUV\",\n            \"UZB\",\n            \"VNM\",\n            \"VUT\",\n            \"WLF\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"PEW_EUR\",\n        name: \"Europe (Pew)\",\n        slug: \"europe-pew\",\n        regionType: \"aggregate\",\n        definedBy: \"pew\",\n        publisher: \"pew\",\n        members: [\n            \"ALB\",\n            \"AND\",\n            \"AUT\",\n            \"BEL\",\n            \"BGR\",\n            \"BIH\",\n            \"BLR\",\n            \"CHE\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"FRO\",\n            \"GBR\",\n            \"GEO\",\n            \"GGY\",\n            \"GIB\",\n            \"GRC\",\n            \"HRV\",\n            \"HUN\",\n            \"IMN\",\n            \"IRL\",\n            \"ISL\",\n            \"ITA\",\n            \"JEY\",\n            \"LIE\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MCO\",\n            \"MDA\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"NLD\",\n            \"NOR\",\n            \"POL\",\n            \"PRT\",\n            \"ROU\",\n            \"RUS\",\n            \"SMR\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"UKR\",\n            \"VAT\",\n        ],\n    },\n    {\n        code: \"PEW_LAC\",\n        name: \"Latin America-Caribbean (Pew)\",\n        slug: \"latin-america-caribbean-pew\",\n        regionType: \"aggregate\",\n        definedBy: \"pew\",\n        publisher: \"pew\",\n        members: [\n            \"ABW\",\n            \"AIA\",\n            \"ARG\",\n            \"ATG\",\n            \"BES\",\n            \"BHS\",\n            \"BLZ\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"FLK\",\n            \"GLP\",\n            \"GRD\",\n            \"GTM\",\n            \"GUF\",\n            \"GUY\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MEX\",\n            \"MSR\",\n            \"MTQ\",\n            \"NIC\",\n            \"PAN\",\n            \"PER\",\n            \"PRI\",\n            \"PRY\",\n            \"SLV\",\n            \"SUR\",\n            \"SXM\",\n            \"TCA\",\n            \"TTO\",\n            \"URY\",\n            \"VCT\",\n            \"VEN\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"PEW_MENA\",\n        name: \"Middle East-North Africa (Pew)\",\n        slug: \"middle-east-north-africa-pew\",\n        regionType: \"aggregate\",\n        definedBy: \"pew\",\n        publisher: \"pew\",\n        members: [\n            \"ARE\",\n            \"BHR\",\n            \"DZA\",\n            \"EGY\",\n            \"ESH\",\n            \"IRQ\",\n            \"ISR\",\n            \"JOR\",\n            \"KWT\",\n            \"LBN\",\n            \"LBY\",\n            \"MAR\",\n            \"OMN\",\n            \"PSE\",\n            \"QAT\",\n            \"SAU\",\n            \"SDN\",\n            \"SYR\",\n            \"TUN\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"PEW_NAM\",\n        name: \"North America (Pew)\",\n        slug: \"north-america-pew\",\n        regionType: \"aggregate\",\n        definedBy: \"pew\",\n        publisher: \"pew\",\n        members: [\"BMU\", \"CAN\", \"GRL\", \"SPM\", \"USA\"],\n    },\n    {\n        code: \"PEW_SSA\",\n        name: \"Sub-Saharan Africa (Pew)\",\n        slug: \"sub-saharan-africa-pew\",\n        regionType: \"aggregate\",\n        definedBy: \"pew\",\n        publisher: \"pew\",\n        members: [\n            \"AGO\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DJI\",\n            \"ERI\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"KEN\",\n            \"LBR\",\n            \"LSO\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"MYT\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"REU\",\n            \"RWA\",\n            \"SEN\",\n            \"SHN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"PHL\",\n        shortCode: \"PH\",\n        name: \"Philippines\",\n        slug: \"philippines\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"PLW\",\n        shortCode: \"PW\",\n        name: \"Palau\",\n        slug: \"palau\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"PNG\",\n        shortCode: \"PG\",\n        name: \"Papua New Guinea\",\n        slug: \"papua-new-guinea\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"POL\",\n        shortCode: \"PL\",\n        name: \"Poland\",\n        slug: \"poland\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"PRI\",\n        shortCode: \"PR\",\n        name: \"Puerto Rico\",\n        slug: \"puerto-rico\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"PRK\",\n        shortCode: \"KP\",\n        name: \"North Korea\",\n        slug: \"north-korea\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"PRT\",\n        shortCode: \"PT\",\n        name: \"Portugal\",\n        slug: \"portugal\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"PRY\",\n        shortCode: \"PY\",\n        name: \"Paraguay\",\n        slug: \"paraguay\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"PSE\",\n        shortCode: \"PS\",\n        name: \"Palestine\",\n        slug: \"palestine\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"PS_GZA\",\n        shortCode: \"PS-GZA\",\n        name: \"Gaza Strip\",\n        slug: \"gaza-strip\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"PYF\",\n        shortCode: \"PF\",\n        name: \"French Polynesia\",\n        slug: \"french-polynesia\",\n        regionType: \"country\",\n    },\n    {\n        code: \"QAT\",\n        shortCode: \"QA\",\n        name: \"Qatar\",\n        slug: \"qatar\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"REU\",\n        shortCode: \"RE\",\n        name: \"Reunion\",\n        slug: \"reunion\",\n        regionType: \"country\",\n    },\n    {\n        code: \"ROU\",\n        shortCode: \"RO\",\n        name: \"Romania\",\n        slug: \"romania\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"RUS\",\n        shortCode: \"RU\",\n        name: \"Russia\",\n        slug: \"russia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"RWA\",\n        shortCode: \"RW\",\n        name: \"Rwanda\",\n        slug: \"rwanda\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SAU\",\n        shortCode: \"SA\",\n        name: \"Saudi Arabia\",\n        slug: \"saudi-arabia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SDN\",\n        shortCode: \"SD\",\n        name: \"Sudan\",\n        slug: \"sudan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SEN\",\n        shortCode: \"SN\",\n        name: \"Senegal\",\n        slug: \"senegal\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SGP\",\n        shortCode: \"SG\",\n        name: \"Singapore\",\n        slug: \"singapore\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SGS\",\n        shortCode: \"GS\",\n        name: \"South Georgia and the South Sandwich Islands\",\n        slug: \"south-georgia-and-the-south-sandwich-islands\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"SHN\",\n        shortCode: \"SH\",\n        name: \"Saint Helena\",\n        slug: \"saint-helena\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"SJM\",\n        shortCode: \"SJ\",\n        name: \"Svalbard and Jan Mayen\",\n        slug: \"svalbard-and-jan-mayen\",\n        regionType: \"other\",\n        isUnlisted: true,\n    },\n    {\n        code: \"SLB\",\n        shortCode: \"SB\",\n        name: \"Solomon Islands\",\n        slug: \"solomon-islands\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SLE\",\n        shortCode: \"SL\",\n        name: \"Sierra Leone\",\n        slug: \"sierra-leone\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SLV\",\n        shortCode: \"SV\",\n        name: \"El Salvador\",\n        slug: \"el-salvador\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SMR\",\n        shortCode: \"SM\",\n        name: \"San Marino\",\n        slug: \"san-marino\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SOM\",\n        shortCode: \"SO\",\n        name: \"Somalia\",\n        slug: \"somalia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SPM\",\n        shortCode: \"PM\",\n        name: \"Saint Pierre and Miquelon\",\n        slug: \"saint-pierre-and-miquelon\",\n        regionType: \"country\",\n    },\n    {\n        code: \"SRB\",\n        shortCode: \"RS\",\n        name: \"Serbia\",\n        slug: \"serbia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SSD\",\n        shortCode: \"SS\",\n        name: \"South Sudan\",\n        slug: \"south-sudan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"STP\",\n        shortCode: \"ST\",\n        name: \"Sao Tome and Principe\",\n        slug: \"sao-tome-and-principe\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SUR\",\n        shortCode: \"SR\",\n        name: \"Suriname\",\n        slug: \"suriname\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SVK\",\n        shortCode: \"SK\",\n        name: \"Slovakia\",\n        slug: \"slovakia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SVN\",\n        shortCode: \"SI\",\n        name: \"Slovenia\",\n        slug: \"slovenia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SWE\",\n        shortCode: \"SE\",\n        name: \"Sweden\",\n        slug: \"sweden\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SWZ\",\n        shortCode: \"SZ\",\n        name: \"Eswatini\",\n        slug: \"eswatini\",\n        regionType: \"country\",\n        isMappable: true,\n        variantNames: [\"Swaziland\"],\n    },\n    {\n        code: \"SXM\",\n        shortCode: \"SX\",\n        name: \"Sint Maarten (Dutch part)\",\n        slug: \"sint-maarten-dutch-part\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"SYC\",\n        shortCode: \"SC\",\n        name: \"Seychelles\",\n        slug: \"seychelles\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SYR\",\n        shortCode: \"SY\",\n        name: \"Syria\",\n        slug: \"syria\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TCA\",\n        shortCode: \"TC\",\n        name: \"Turks and Caicos Islands\",\n        shortName: \"Turks and Caicos\",\n        slug: \"turks-and-caicos-islands\",\n        regionType: \"country\",\n    },\n    {\n        code: \"TCD\",\n        shortCode: \"TD\",\n        name: \"Chad\",\n        slug: \"chad\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TGO\",\n        shortCode: \"TG\",\n        name: \"Togo\",\n        slug: \"togo\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"THA\",\n        shortCode: \"TH\",\n        name: \"Thailand\",\n        slug: \"thailand\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TJK\",\n        shortCode: \"TJ\",\n        name: \"Tajikistan\",\n        slug: \"tajikistan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TKL\",\n        shortCode: \"TK\",\n        name: \"Tokelau\",\n        slug: \"tokelau\",\n        regionType: \"country\",\n    },\n    {\n        code: \"TKM\",\n        shortCode: \"TM\",\n        name: \"Turkmenistan\",\n        slug: \"turkmenistan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TLS\",\n        shortCode: \"TL\",\n        name: \"East Timor\",\n        slug: \"east-timor\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TON\",\n        shortCode: \"TO\",\n        name: \"Tonga\",\n        slug: \"tonga\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TTO\",\n        shortCode: \"TT\",\n        name: \"Trinidad and Tobago\",\n        slug: \"trinidad-and-tobago\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TUN\",\n        shortCode: \"TN\",\n        name: \"Tunisia\",\n        slug: \"tunisia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TUR\",\n        shortCode: \"TR\",\n        name: \"Turkey\",\n        slug: \"turkey\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TUV\",\n        shortCode: \"TV\",\n        name: \"Tuvalu\",\n        slug: \"tuvalu\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TWN\",\n        shortCode: \"TW\",\n        name: \"Taiwan\",\n        slug: \"taiwan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TZA\",\n        shortCode: \"TZ\",\n        name: \"Tanzania\",\n        slug: \"tanzania\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"UCDP_AFR\",\n        name: \"Africa (UCDP)\",\n        slug: \"africa-ucdp\",\n        regionType: \"aggregate\",\n        definedBy: \"ucdp\",\n        publisher: \"ucdp\",\n        members: [\n            \"AGO\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DJI\",\n            \"DZA\",\n            \"ERI\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"KEN\",\n            \"LBR\",\n            \"LBY\",\n            \"LSO\",\n            \"MAR\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"OWID_ZAN\",\n            \"RWA\",\n            \"SDN\",\n            \"SEN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TUN\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"UCDP_AME\",\n        name: \"Americas (UCDP)\",\n        slug: \"americas-ucdp\",\n        regionType: \"aggregate\",\n        definedBy: \"ucdp\",\n        publisher: \"ucdp\",\n        members: [\n            \"ARG\",\n            \"ATG\",\n            \"BHS\",\n            \"BLZ\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"CAN\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"GRD\",\n            \"GTM\",\n            \"GUY\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MEX\",\n            \"NIC\",\n            \"PAN\",\n            \"PER\",\n            \"PRY\",\n            \"SLV\",\n            \"SUR\",\n            \"TTO\",\n            \"URY\",\n            \"USA\",\n            \"VCT\",\n            \"VEN\",\n        ],\n    },\n    {\n        code: \"UCDP_ASO\",\n        name: \"Asia and Oceania (UCDP)\",\n        slug: \"asia-and-oceania-ucdp\",\n        regionType: \"aggregate\",\n        definedBy: \"ucdp\",\n        publisher: \"ucdp\",\n        members: [\n            \"AFG\",\n            \"AUS\",\n            \"BGD\",\n            \"BRN\",\n            \"BTN\",\n            \"CHN\",\n            \"FJI\",\n            \"FSM\",\n            \"IDN\",\n            \"IND\",\n            \"JPN\",\n            \"KAZ\",\n            \"KGZ\",\n            \"KHM\",\n            \"KIR\",\n            \"KOR\",\n            \"LAO\",\n            \"LKA\",\n            \"MDV\",\n            \"MHL\",\n            \"MMR\",\n            \"MNG\",\n            \"MYS\",\n            \"NPL\",\n            \"NRU\",\n            \"NZL\",\n            \"OWID_RVN\",\n            \"PAK\",\n            \"PHL\",\n            \"PLW\",\n            \"PNG\",\n            \"PRK\",\n            \"SGP\",\n            \"SLB\",\n            \"THA\",\n            \"TJK\",\n            \"TKM\",\n            \"TLS\",\n            \"TON\",\n            \"TUV\",\n            \"TWN\",\n            \"UZB\",\n            \"VNM\",\n            \"VUT\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"UCDP_EUR\",\n        name: \"Europe (UCDP)\",\n        slug: \"europe-ucdp\",\n        regionType: \"aggregate\",\n        definedBy: \"ucdp\",\n        publisher: \"ucdp\",\n        members: [\n            \"ALB\",\n            \"AND\",\n            \"ARM\",\n            \"AUT\",\n            \"AZE\",\n            \"BEL\",\n            \"BGR\",\n            \"BIH\",\n            \"BLR\",\n            \"CHE\",\n            \"CYP\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"GBR\",\n            \"GEO\",\n            \"GRC\",\n            \"HRV\",\n            \"HUN\",\n            \"IRL\",\n            \"ISL\",\n            \"ITA\",\n            \"LIE\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MCO\",\n            \"MDA\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"NLD\",\n            \"NOR\",\n            \"OWID_ABK\",\n            \"OWID_CZS\",\n            \"OWID_GDR\",\n            \"OWID_GFR\",\n            \"OWID_KOS\",\n            \"OWID_SOS\",\n            \"OWID_YGS\",\n            \"POL\",\n            \"PRT\",\n            \"ROU\",\n            \"RUS\",\n            \"SMR\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"UKR\",\n        ],\n    },\n    {\n        code: \"UCDP_MEA\",\n        name: \"Middle East (UCDP)\",\n        slug: \"middle-east-ucdp\",\n        regionType: \"aggregate\",\n        definedBy: \"ucdp\",\n        publisher: \"ucdp\",\n        members: [\n            \"ARE\",\n            \"BHR\",\n            \"EGY\",\n            \"IRN\",\n            \"IRQ\",\n            \"ISR\",\n            \"JOR\",\n            \"KWT\",\n            \"LBN\",\n            \"OMN\",\n            \"OWID_YPR\",\n            \"QAT\",\n            \"SAU\",\n            \"SYR\",\n            \"TUR\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"UGA\",\n        shortCode: \"UG\",\n        name: \"Uganda\",\n        slug: \"uganda\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"UKR\",\n        shortCode: \"UA\",\n        name: \"Ukraine\",\n        slug: \"ukraine\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"UMI\",\n        shortCode: \"UM\",\n        name: \"United States Minor Outlying Islands\",\n        slug: \"united-states-minor-outlying-islands\",\n        regionType: \"other\",\n        isUnlisted: true,\n    },\n    {\n        code: \"UNM49_AFR\",\n        name: \"Africa (UN M49)\",\n        slug: \"africa-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_1\",\n        publisher: \"un_m49\",\n        translationCodes: [\"002\"],\n        members: [\n            \"AGO\",\n            \"ATF\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DJI\",\n            \"DZA\",\n            \"EGY\",\n            \"ERI\",\n            \"ESH\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"IOT\",\n            \"KEN\",\n            \"LBR\",\n            \"LBY\",\n            \"LSO\",\n            \"MAR\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"MYT\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"REU\",\n            \"RWA\",\n            \"SDN\",\n            \"SEN\",\n            \"SHN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TUN\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"UNM49_AMR\",\n        name: \"Americas (UN M49)\",\n        slug: \"americas-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_1\",\n        publisher: \"un_m49\",\n        translationCodes: [\"019\"],\n        members: [\n            \"ABW\",\n            \"AIA\",\n            \"ARG\",\n            \"ATG\",\n            \"BES\",\n            \"BHS\",\n            \"BLM\",\n            \"BLZ\",\n            \"BMU\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"BVT\",\n            \"CAN\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"FLK\",\n            \"GLP\",\n            \"GRD\",\n            \"GRL\",\n            \"GTM\",\n            \"GUF\",\n            \"GUY\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MAF\",\n            \"MEX\",\n            \"MSR\",\n            \"MTQ\",\n            \"NIC\",\n            \"PAN\",\n            \"PER\",\n            \"PRI\",\n            \"PRY\",\n            \"SGS\",\n            \"SLV\",\n            \"SPM\",\n            \"SUR\",\n            \"SXM\",\n            \"TCA\",\n            \"TTO\",\n            \"URY\",\n            \"USA\",\n            \"VCT\",\n            \"VEN\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"UNM49_ANZ\",\n        name: \"Australia and New Zealand (UN M49)\",\n        slug: \"australia-and-new-zealand-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        publisher: \"un_m49\",\n        translationCodes: [\"053\"],\n        members: [\"AUS\", \"CCK\", \"CXR\", \"HMD\", \"NFK\", \"NZL\"],\n    },\n    {\n        code: \"UNM49_ASI\",\n        name: \"Asia (UN M49)\",\n        slug: \"asia-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_1\",\n        publisher: \"un_m49\",\n        translationCodes: [\"142\"],\n        members: [\n            \"AFG\",\n            \"ARE\",\n            \"ARM\",\n            \"AZE\",\n            \"BGD\",\n            \"BHR\",\n            \"BRN\",\n            \"BTN\",\n            \"CHN\",\n            \"CYP\",\n            \"GEO\",\n            \"HKG\",\n            \"IDN\",\n            \"IND\",\n            \"IRN\",\n            \"IRQ\",\n            \"ISR\",\n            \"JOR\",\n            \"JPN\",\n            \"KAZ\",\n            \"KGZ\",\n            \"KHM\",\n            \"KOR\",\n            \"KWT\",\n            \"LAO\",\n            \"LBN\",\n            \"LKA\",\n            \"MAC\",\n            \"MDV\",\n            \"MMR\",\n            \"MNG\",\n            \"MYS\",\n            \"NPL\",\n            \"OMN\",\n            \"PAK\",\n            \"PHL\",\n            \"PRK\",\n            \"QAT\",\n            \"SAU\",\n            \"SGP\",\n            \"SYR\",\n            \"THA\",\n            \"TJK\",\n            \"TKM\",\n            \"TLS\",\n            \"TUR\",\n            \"UZB\",\n            \"VNM\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"UNM49_CAM\",\n        name: \"Central America (UN M49)\",\n        slug: \"central-america-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_3\",\n        publisher: \"un_m49\",\n        translationCodes: [\"013\"],\n        members: [\"BLZ\", \"CRI\", \"GTM\", \"HND\", \"MEX\", \"NIC\", \"PAN\", \"SLV\"],\n    },\n    {\n        code: \"UNM49_CAR\",\n        name: \"Caribbean (UN M49)\",\n        slug: \"caribbean-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_3\",\n        publisher: \"un_m49\",\n        translationCodes: [\"029\"],\n        members: [\n            \"ABW\",\n            \"AIA\",\n            \"ATG\",\n            \"BES\",\n            \"BHS\",\n            \"BLM\",\n            \"BRB\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"GLP\",\n            \"GRD\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MAF\",\n            \"MSR\",\n            \"MTQ\",\n            \"PRI\",\n            \"SXM\",\n            \"TCA\",\n            \"TTO\",\n            \"VCT\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"UNM49_CAS\",\n        name: \"Central Asia (UN M49)\",\n        slug: \"central-asia-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        publisher: \"un_m49\",\n        translationCodes: [\"143\"],\n        members: [\"KAZ\", \"KGZ\", \"TJK\", \"TKM\", \"UZB\"],\n    },\n    {\n        code: \"UNM49_EAF\",\n        name: \"Eastern Africa (UN M49)\",\n        slug: \"eastern-africa-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_3\",\n        publisher: \"un_m49\",\n        translationCodes: [\"014\"],\n        members: [\n            \"ATF\",\n            \"BDI\",\n            \"COM\",\n            \"DJI\",\n            \"ERI\",\n            \"ETH\",\n            \"IOT\",\n            \"KEN\",\n            \"MDG\",\n            \"MOZ\",\n            \"MUS\",\n            \"MWI\",\n            \"MYT\",\n            \"REU\",\n            \"RWA\",\n            \"SOM\",\n            \"SSD\",\n            \"SYC\",\n            \"TZA\",\n            \"UGA\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"UNM49_EAS\",\n        name: \"Eastern Asia (UN M49)\",\n        slug: \"eastern-asia-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        publisher: \"un_m49\",\n        translationCodes: [\"030\"],\n        members: [\"CHN\", \"HKG\", \"JPN\", \"KOR\", \"MAC\", \"MNG\", \"PRK\"],\n    },\n    {\n        code: \"UNM49_EEU\",\n        name: \"Eastern Europe (UN M49)\",\n        slug: \"eastern-europe-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        publisher: \"un_m49\",\n        translationCodes: [\"151\"],\n        members: [\n            \"BGR\",\n            \"BLR\",\n            \"CZE\",\n            \"HUN\",\n            \"MDA\",\n            \"POL\",\n            \"ROU\",\n            \"RUS\",\n            \"SVK\",\n            \"UKR\",\n        ],\n    },\n    {\n        code: \"UNM49_EUR\",\n        name: \"Europe (UN M49)\",\n        slug: \"europe-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_1\",\n        publisher: \"un_m49\",\n        translationCodes: [\"150\"],\n        members: [\n            \"ALA\",\n            \"ALB\",\n            \"AND\",\n            \"AUT\",\n            \"BEL\",\n            \"BGR\",\n            \"BIH\",\n            \"BLR\",\n            \"CHE\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"FRO\",\n            \"GBR\",\n            \"GGY\",\n            \"GIB\",\n            \"GRC\",\n            \"HRV\",\n            \"HUN\",\n            \"IMN\",\n            \"IRL\",\n            \"ISL\",\n            \"ITA\",\n            \"JEY\",\n            \"LIE\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MCO\",\n            \"MDA\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"NLD\",\n            \"NOR\",\n            \"POL\",\n            \"PRT\",\n            \"ROU\",\n            \"RUS\",\n            \"SJM\",\n            \"SMR\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"UKR\",\n            \"VAT\",\n        ],\n    },\n    {\n        code: \"UNM49_LAC\",\n        name: \"Latin America and the Caribbean (UN M49)\",\n        slug: \"latin-america-and-the-caribbean-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        publisher: \"un_m49\",\n        translationCodes: [\"419\", \"029\"],\n        members: [\n            \"ABW\",\n            \"AIA\",\n            \"ARG\",\n            \"ATG\",\n            \"BES\",\n            \"BHS\",\n            \"BLM\",\n            \"BLZ\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"BVT\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"FLK\",\n            \"GLP\",\n            \"GRD\",\n            \"GTM\",\n            \"GUF\",\n            \"GUY\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MAF\",\n            \"MEX\",\n            \"MSR\",\n            \"MTQ\",\n            \"NIC\",\n            \"PAN\",\n            \"PER\",\n            \"PRI\",\n            \"PRY\",\n            \"SGS\",\n            \"SLV\",\n            \"SUR\",\n            \"SXM\",\n            \"TCA\",\n            \"TTO\",\n            \"URY\",\n            \"VCT\",\n            \"VEN\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"UNM49_MAF\",\n        name: \"Middle Africa (UN M49)\",\n        slug: \"middle-africa-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_3\",\n        publisher: \"un_m49\",\n        translationCodes: [\"017\"],\n        members: [\n            \"AGO\",\n            \"CAF\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"GAB\",\n            \"GNQ\",\n            \"STP\",\n            \"TCD\",\n        ],\n    },\n    {\n        code: \"UNM49_MEL\",\n        name: \"Melanesia (UN M49)\",\n        slug: \"melanesia-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        publisher: \"un_m49\",\n        translationCodes: [\"054\"],\n        members: [\"FJI\", \"NCL\", \"PNG\", \"SLB\", \"VUT\"],\n    },\n    {\n        code: \"UNM49_MIC\",\n        name: \"Micronesia (UN M49)\",\n        slug: \"micronesia-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        publisher: \"un_m49\",\n        translationCodes: [\"057\"],\n        members: [\"FSM\", \"GUM\", \"KIR\", \"MHL\", \"MNP\", \"NRU\", \"PLW\", \"UMI\"],\n    },\n    {\n        code: \"UNM49_NAF\",\n        name: \"Northern Africa (UN M49)\",\n        slug: \"northern-africa-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        publisher: \"un_m49\",\n        translationCodes: [\"015\"],\n        members: [\"DZA\", \"EGY\", \"ESH\", \"LBY\", \"MAR\", \"SDN\", \"TUN\"],\n    },\n    {\n        code: \"UNM49_NAM\",\n        name: \"Northern America (UN M49)\",\n        slug: \"northern-america-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        publisher: \"un_m49\",\n        translationCodes: [\"003\"],\n        members: [\"BMU\", \"CAN\", \"GRL\", \"SPM\", \"USA\"],\n    },\n    {\n        code: \"UNM49_NEU\",\n        name: \"Northern Europe (UN M49)\",\n        slug: \"northern-europe-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        publisher: \"un_m49\",\n        translationCodes: [\"154\"],\n        members: [\n            \"ALA\",\n            \"DNK\",\n            \"EST\",\n            \"FIN\",\n            \"FRO\",\n            \"GBR\",\n            \"GGY\",\n            \"IMN\",\n            \"IRL\",\n            \"ISL\",\n            \"JEY\",\n            \"LTU\",\n            \"LVA\",\n            \"NOR\",\n            \"SJM\",\n            \"SWE\",\n        ],\n    },\n    {\n        code: \"UNM49_OCE\",\n        name: \"Oceania (UN M49)\",\n        slug: \"oceania-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_1\",\n        publisher: \"un_m49\",\n        translationCodes: [\"009\"],\n        members: [\n            \"ASM\",\n            \"AUS\",\n            \"CCK\",\n            \"COK\",\n            \"CXR\",\n            \"FJI\",\n            \"FSM\",\n            \"GUM\",\n            \"HMD\",\n            \"KIR\",\n            \"MHL\",\n            \"MNP\",\n            \"NCL\",\n            \"NFK\",\n            \"NIU\",\n            \"NRU\",\n            \"NZL\",\n            \"PCN\",\n            \"PLW\",\n            \"PNG\",\n            \"PYF\",\n            \"SLB\",\n            \"TKL\",\n            \"TON\",\n            \"TUV\",\n            \"UMI\",\n            \"VUT\",\n            \"WLF\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"UNM49_POL\",\n        name: \"Polynesia (UN M49)\",\n        slug: \"polynesia-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        publisher: \"un_m49\",\n        translationCodes: [\"061\"],\n        members: [\n            \"ASM\",\n            \"COK\",\n            \"NIU\",\n            \"PCN\",\n            \"PYF\",\n            \"TKL\",\n            \"TON\",\n            \"TUV\",\n            \"WLF\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"UNM49_SAF\",\n        name: \"Southern Africa (UN M49)\",\n        slug: \"southern-africa-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_3\",\n        publisher: \"un_m49\",\n        translationCodes: [\"018\"],\n        members: [\"BWA\", \"LSO\", \"NAM\", \"SWZ\", \"ZAF\"],\n    },\n    {\n        code: \"UNM49_SAM\",\n        name: \"South America (UN M49)\",\n        slug: \"south-america-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_3\",\n        publisher: \"un_m49\",\n        translationCodes: [\"005\"],\n        members: [\n            \"ARG\",\n            \"BOL\",\n            \"BRA\",\n            \"BVT\",\n            \"CHL\",\n            \"COL\",\n            \"ECU\",\n            \"FLK\",\n            \"GUF\",\n            \"GUY\",\n            \"PER\",\n            \"PRY\",\n            \"SGS\",\n            \"SUR\",\n            \"URY\",\n            \"VEN\",\n        ],\n    },\n    {\n        code: \"UNM49_SAS\",\n        name: \"Southern Asia (UN M49)\",\n        slug: \"southern-asia-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        publisher: \"un_m49\",\n        translationCodes: [\"034\"],\n        members: [\n            \"AFG\",\n            \"BGD\",\n            \"BTN\",\n            \"IND\",\n            \"IRN\",\n            \"LKA\",\n            \"MDV\",\n            \"NPL\",\n            \"PAK\",\n        ],\n    },\n    {\n        code: \"UNM49_SEA\",\n        name: \"South-eastern Asia (UN M49)\",\n        slug: \"south-eastern-asia-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        publisher: \"un_m49\",\n        translationCodes: [\"035\"],\n        members: [\n            \"BRN\",\n            \"IDN\",\n            \"KHM\",\n            \"LAO\",\n            \"MMR\",\n            \"MYS\",\n            \"PHL\",\n            \"SGP\",\n            \"THA\",\n            \"TLS\",\n            \"VNM\",\n        ],\n    },\n    {\n        code: \"UNM49_SEU\",\n        name: \"Southern Europe (UN M49)\",\n        slug: \"southern-europe-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        publisher: \"un_m49\",\n        translationCodes: [\"039\"],\n        members: [\n            \"ALB\",\n            \"AND\",\n            \"BIH\",\n            \"ESP\",\n            \"GIB\",\n            \"GRC\",\n            \"HRV\",\n            \"ITA\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"PRT\",\n            \"SMR\",\n            \"SRB\",\n            \"SVN\",\n            \"VAT\",\n        ],\n    },\n    {\n        code: \"UNM49_SSA\",\n        name: \"Sub-Saharan Africa (UN M49)\",\n        slug: \"sub-saharan-africa-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        publisher: \"un_m49\",\n        translationCodes: [\"202\"],\n        members: [\n            \"AGO\",\n            \"ATF\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DJI\",\n            \"ERI\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"IOT\",\n            \"KEN\",\n            \"LBR\",\n            \"LSO\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"MYT\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"REU\",\n            \"RWA\",\n            \"SEN\",\n            \"SHN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"UNM49_WAF\",\n        name: \"Western Africa (UN M49)\",\n        slug: \"western-africa-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_3\",\n        publisher: \"un_m49\",\n        translationCodes: [\"011\"],\n        members: [\n            \"BEN\",\n            \"BFA\",\n            \"CIV\",\n            \"CPV\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"LBR\",\n            \"MLI\",\n            \"MRT\",\n            \"NER\",\n            \"NGA\",\n            \"SEN\",\n            \"SHN\",\n            \"SLE\",\n            \"TGO\",\n        ],\n    },\n    {\n        code: \"UNM49_WAS\",\n        name: \"Western Asia (UN M49)\",\n        slug: \"western-asia-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        publisher: \"un_m49\",\n        translationCodes: [\"145\"],\n        members: [\n            \"ARE\",\n            \"ARM\",\n            \"AZE\",\n            \"BHR\",\n            \"CYP\",\n            \"GEO\",\n            \"IRQ\",\n            \"ISR\",\n            \"JOR\",\n            \"KWT\",\n            \"LBN\",\n            \"OMN\",\n            \"QAT\",\n            \"SAU\",\n            \"SYR\",\n            \"TUR\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"UNM49_WEU\",\n        name: \"Western Europe (UN M49)\",\n        slug: \"western-europe-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        publisher: \"un_m49\",\n        translationCodes: [\"155\"],\n        members: [\n            \"AUT\",\n            \"BEL\",\n            \"CHE\",\n            \"DEU\",\n            \"FRA\",\n            \"LIE\",\n            \"LUX\",\n            \"MCO\",\n            \"NLD\",\n        ],\n    },\n    {\n        code: \"UNSDG_ANZ\",\n        name: \"Australia and New Zealand (UN SDG)\",\n        slug: \"australia-and-new-zealand-un-sdg\",\n        regionType: \"aggregate\",\n        definedBy: \"unsdg\",\n        publisher: \"un_sdg\",\n        members: [\"AUS\", \"CCK\", \"CXR\", \"HMD\", \"NFK\", \"NZL\"],\n    },\n    {\n        code: \"UNSDG_CSA\",\n        name: \"Central and Southern Asia (UN SDG)\",\n        slug: \"central-and-southern-asia-un-sdg\",\n        regionType: \"aggregate\",\n        definedBy: \"unsdg\",\n        publisher: \"un_sdg\",\n        members: [\n            \"AFG\",\n            \"BGD\",\n            \"BTN\",\n            \"IND\",\n            \"IRN\",\n            \"KAZ\",\n            \"KGZ\",\n            \"LKA\",\n            \"MDV\",\n            \"NPL\",\n            \"PAK\",\n            \"TJK\",\n            \"TKM\",\n            \"UZB\",\n        ],\n    },\n    {\n        code: \"UNSDG_ENA\",\n        name: \"Europe and Northern America (UN SDG)\",\n        slug: \"europe-and-northern-america-un-sdg\",\n        regionType: \"aggregate\",\n        definedBy: \"unsdg\",\n        publisher: \"un_sdg\",\n        members: [\n            \"ALA\",\n            \"ALB\",\n            \"AND\",\n            \"AUT\",\n            \"BEL\",\n            \"BGR\",\n            \"BIH\",\n            \"BLR\",\n            \"BMU\",\n            \"CAN\",\n            \"CHE\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"FRO\",\n            \"GBR\",\n            \"GGY\",\n            \"GIB\",\n            \"GRC\",\n            \"GRL\",\n            \"HRV\",\n            \"HUN\",\n            \"IMN\",\n            \"IRL\",\n            \"ISL\",\n            \"ITA\",\n            \"JEY\",\n            \"LIE\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MCO\",\n            \"MDA\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"NLD\",\n            \"NOR\",\n            \"POL\",\n            \"PRT\",\n            \"ROU\",\n            \"RUS\",\n            \"SJM\",\n            \"SMR\",\n            \"SPM\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"UKR\",\n            \"USA\",\n            \"VAT\",\n        ],\n    },\n    {\n        code: \"UNSDG_ESEA\",\n        name: \"Eastern and South-Eastern Asia (UN SDG)\",\n        slug: \"eastern-and-south-eastern-asia-un-sdg\",\n        regionType: \"aggregate\",\n        definedBy: \"unsdg\",\n        publisher: \"un_sdg\",\n        members: [\n            \"BRN\",\n            \"CHN\",\n            \"HKG\",\n            \"IDN\",\n            \"JPN\",\n            \"KHM\",\n            \"KOR\",\n            \"LAO\",\n            \"MAC\",\n            \"MMR\",\n            \"MNG\",\n            \"MYS\",\n            \"PHL\",\n            \"PRK\",\n            \"SGP\",\n            \"THA\",\n            \"TLS\",\n            \"VNM\",\n        ],\n    },\n    {\n        code: \"UNSDG_LAC\",\n        name: \"Latin America and the Caribbean (UN SDG)\",\n        slug: \"latin-america-and-the-caribbean-un-sdg\",\n        regionType: \"aggregate\",\n        definedBy: \"unsdg\",\n        publisher: \"un_sdg\",\n        members: [\n            \"ABW\",\n            \"AIA\",\n            \"ARG\",\n            \"ATG\",\n            \"BES\",\n            \"BHS\",\n            \"BLM\",\n            \"BLZ\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"BVT\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"FLK\",\n            \"GLP\",\n            \"GRD\",\n            \"GTM\",\n            \"GUF\",\n            \"GUY\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MAF\",\n            \"MEX\",\n            \"MSR\",\n            \"MTQ\",\n            \"NIC\",\n            \"PAN\",\n            \"PER\",\n            \"PRI\",\n            \"PRY\",\n            \"SGS\",\n            \"SLV\",\n            \"SUR\",\n            \"SXM\",\n            \"TCA\",\n            \"TTO\",\n            \"URY\",\n            \"VCT\",\n            \"VEN\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"UNSDG_NAWA\",\n        name: \"Northern Africa and Western Asia (UN SDG)\",\n        slug: \"northern-africa-and-western-asia-un-sdg\",\n        regionType: \"aggregate\",\n        definedBy: \"unsdg\",\n        publisher: \"un_sdg\",\n        members: [\n            \"ARE\",\n            \"ARM\",\n            \"AZE\",\n            \"BHR\",\n            \"CYP\",\n            \"DZA\",\n            \"EGY\",\n            \"ESH\",\n            \"GEO\",\n            \"IRQ\",\n            \"ISR\",\n            \"JOR\",\n            \"KWT\",\n            \"LBN\",\n            \"LBY\",\n            \"MAR\",\n            \"OMN\",\n            \"PSE\",\n            \"QAT\",\n            \"SAU\",\n            \"SDN\",\n            \"SYR\",\n            \"TUN\",\n            \"TUR\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"UNSDG_OC\",\n        name: \"Oceania (UN SDG)\",\n        slug: \"oceania-un-sdg\",\n        regionType: \"aggregate\",\n        definedBy: \"unsdg\",\n        publisher: \"un_sdg\",\n        members: [\n            \"ASM\",\n            \"COK\",\n            \"FJI\",\n            \"FSM\",\n            \"GUM\",\n            \"KIR\",\n            \"MHL\",\n            \"MNP\",\n            \"NCL\",\n            \"NIU\",\n            \"NRU\",\n            \"PCN\",\n            \"PLW\",\n            \"PNG\",\n            \"PYF\",\n            \"SLB\",\n            \"TKL\",\n            \"TON\",\n            \"TUV\",\n            \"UMI\",\n            \"VUT\",\n            \"WLF\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"UNSDG_SSA\",\n        name: \"Sub-Saharan Africa (UN SDG)\",\n        slug: \"sub-saharan-africa-un-sdg\",\n        regionType: \"aggregate\",\n        definedBy: \"unsdg\",\n        publisher: \"un_sdg\",\n        members: [\n            \"AGO\",\n            \"ATF\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DJI\",\n            \"ERI\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"IOT\",\n            \"KEN\",\n            \"LBR\",\n            \"LSO\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"MYT\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"REU\",\n            \"RWA\",\n            \"SEN\",\n            \"SHN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"UN_AFR\",\n        name: \"Africa (UN)\",\n        slug: \"africa-un\",\n        regionType: \"aggregate\",\n        definedBy: \"un\",\n        publisher: \"un\",\n        translationCodes: [\"002\"],\n        members: [\n            \"AGO\",\n            \"ATF\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DJI\",\n            \"DZA\",\n            \"EGY\",\n            \"ERI\",\n            \"ESH\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"IOT\",\n            \"KEN\",\n            \"LBR\",\n            \"LBY\",\n            \"LSO\",\n            \"MAR\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"MYT\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"REU\",\n            \"RWA\",\n            \"SDN\",\n            \"SEN\",\n            \"SHN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TUN\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"UN_ASI\",\n        name: \"Asia (UN)\",\n        slug: \"asia-un\",\n        regionType: \"aggregate\",\n        definedBy: \"un\",\n        publisher: \"un\",\n        translationCodes: [\"142\"],\n        members: [\n            \"AFG\",\n            \"ARE\",\n            \"ARM\",\n            \"AZE\",\n            \"BGD\",\n            \"BHR\",\n            \"BRN\",\n            \"BTN\",\n            \"CHN\",\n            \"CYP\",\n            \"GEO\",\n            \"HKG\",\n            \"IDN\",\n            \"IND\",\n            \"IRN\",\n            \"IRQ\",\n            \"ISR\",\n            \"JOR\",\n            \"JPN\",\n            \"KAZ\",\n            \"KGZ\",\n            \"KHM\",\n            \"KOR\",\n            \"KWT\",\n            \"LAO\",\n            \"LBN\",\n            \"LKA\",\n            \"MAC\",\n            \"MDV\",\n            \"MMR\",\n            \"MNG\",\n            \"MYS\",\n            \"NPL\",\n            \"OMN\",\n            \"PAK\",\n            \"PHL\",\n            \"PRK\",\n            \"QAT\",\n            \"SAU\",\n            \"SGP\",\n            \"SYR\",\n            \"THA\",\n            \"TJK\",\n            \"TKM\",\n            \"TLS\",\n            \"TUR\",\n            \"UZB\",\n            \"VNM\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"UN_EUR\",\n        name: \"Europe (UN)\",\n        slug: \"europe-un\",\n        regionType: \"aggregate\",\n        definedBy: \"un\",\n        publisher: \"un\",\n        translationCodes: [\"150\"],\n        members: [\n            \"ALA\",\n            \"ALB\",\n            \"AND\",\n            \"AUT\",\n            \"BEL\",\n            \"BGR\",\n            \"BIH\",\n            \"BLR\",\n            \"CHE\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"FRO\",\n            \"GBR\",\n            \"GGY\",\n            \"GIB\",\n            \"GRC\",\n            \"HRV\",\n            \"HUN\",\n            \"IMN\",\n            \"IRL\",\n            \"ISL\",\n            \"ITA\",\n            \"JEY\",\n            \"LIE\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MCO\",\n            \"MDA\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"NLD\",\n            \"NOR\",\n            \"POL\",\n            \"PRT\",\n            \"ROU\",\n            \"RUS\",\n            \"SJM\",\n            \"SMR\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"UKR\",\n            \"VAT\",\n        ],\n    },\n    {\n        code: \"UN_LAC\",\n        name: \"Latin America and the Caribbean (UN)\",\n        slug: \"latin-america-and-the-caribbean-un\",\n        regionType: \"aggregate\",\n        definedBy: \"un\",\n        publisher: \"un\",\n        translationCodes: [\"419\", \"029\"],\n        members: [\n            \"ABW\",\n            \"AIA\",\n            \"ARG\",\n            \"ATG\",\n            \"BES\",\n            \"BHS\",\n            \"BLM\",\n            \"BLZ\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"BVT\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"FLK\",\n            \"GLP\",\n            \"GRD\",\n            \"GTM\",\n            \"GUF\",\n            \"GUY\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MAF\",\n            \"MEX\",\n            \"MSR\",\n            \"MTQ\",\n            \"NIC\",\n            \"PAN\",\n            \"PER\",\n            \"PRI\",\n            \"PRY\",\n            \"SGS\",\n            \"SLV\",\n            \"SUR\",\n            \"SXM\",\n            \"TCA\",\n            \"TTO\",\n            \"URY\",\n            \"VCT\",\n            \"VEN\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"UN_NAM\",\n        name: \"Northern America (UN)\",\n        slug: \"northern-america-un\",\n        regionType: \"aggregate\",\n        definedBy: \"un\",\n        publisher: \"un\",\n        translationCodes: [\"003\"],\n        members: [\"BMU\", \"CAN\", \"GRL\", \"SPM\", \"USA\"],\n    },\n    {\n        code: \"UN_OCE\",\n        name: \"Oceania (UN)\",\n        slug: \"oceania-un\",\n        regionType: \"aggregate\",\n        definedBy: \"un\",\n        publisher: \"un\",\n        translationCodes: [\"009\"],\n        members: [\n            \"ASM\",\n            \"AUS\",\n            \"CCK\",\n            \"COK\",\n            \"CXR\",\n            \"FJI\",\n            \"FSM\",\n            \"GUM\",\n            \"HMD\",\n            \"KIR\",\n            \"MHL\",\n            \"MNP\",\n            \"NCL\",\n            \"NFK\",\n            \"NIU\",\n            \"NRU\",\n            \"NZL\",\n            \"PCN\",\n            \"PLW\",\n            \"PNG\",\n            \"PYF\",\n            \"SLB\",\n            \"TKL\",\n            \"TON\",\n            \"TUV\",\n            \"UMI\",\n            \"VUT\",\n            \"WLF\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"URY\",\n        shortCode: \"UY\",\n        name: \"Uruguay\",\n        slug: \"uruguay\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"USA\",\n        shortCode: \"US\",\n        name: \"United States\",\n        slug: \"united-states\",\n        regionType: \"country\",\n        isMappable: true,\n        variantNames: [\"US\", \"USA\"],\n    },\n    {\n        code: \"UZB\",\n        shortCode: \"UZ\",\n        name: \"Uzbekistan\",\n        slug: \"uzbekistan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"VAT\",\n        shortCode: \"VA\",\n        name: \"Vatican\",\n        slug: \"vatican\",\n        regionType: \"country\",\n    },\n    {\n        code: \"VCT\",\n        shortCode: \"VC\",\n        name: \"Saint Vincent and the Grenadines\",\n        slug: \"saint-vincent-and-the-grenadines\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"VEN\",\n        shortCode: \"VE\",\n        name: \"Venezuela\",\n        slug: \"venezuela\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"VGB\",\n        shortCode: \"VG\",\n        name: \"British Virgin Islands\",\n        slug: \"british-virgin-islands\",\n        regionType: \"country\",\n    },\n    {\n        code: \"VIR\",\n        shortCode: \"VI\",\n        name: \"United States Virgin Islands\",\n        slug: \"united-states-virgin-islands\",\n        regionType: \"country\",\n    },\n    {\n        code: \"VNM\",\n        shortCode: \"VN\",\n        name: \"Vietnam\",\n        slug: \"vietnam\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"VUT\",\n        shortCode: \"VU\",\n        name: \"Vanuatu\",\n        slug: \"vanuatu\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"WB_EAP\",\n        name: \"East Asia and Pacific (WB)\",\n        slug: \"east-asia-and-pacific-wb\",\n        regionType: \"aggregate\",\n        definedBy: \"wb\",\n        publisher: \"wb\",\n        translationCodes: [\"030\", \"009\"],\n        members: [\n            \"ASM\",\n            \"AUS\",\n            \"BRN\",\n            \"CCK\",\n            \"CHN\",\n            \"COK\",\n            \"CXR\",\n            \"FJI\",\n            \"FSM\",\n            \"GUM\",\n            \"HKG\",\n            \"IDN\",\n            \"JPN\",\n            \"KHM\",\n            \"KIR\",\n            \"KOR\",\n            \"LAO\",\n            \"MAC\",\n            \"MHL\",\n            \"MMR\",\n            \"MNG\",\n            \"MNP\",\n            \"MYS\",\n            \"NCL\",\n            \"NFK\",\n            \"NIU\",\n            \"NRU\",\n            \"NZL\",\n            \"OWID_DRV\",\n            \"OWID_KRU\",\n            \"OWID_RVN\",\n            \"PCN\",\n            \"PHL\",\n            \"PLW\",\n            \"PNG\",\n            \"PRK\",\n            \"PYF\",\n            \"SGP\",\n            \"SLB\",\n            \"THA\",\n            \"TKL\",\n            \"TLS\",\n            \"TON\",\n            \"TUV\",\n            \"TWN\",\n            \"UMI\",\n            \"VNM\",\n            \"VUT\",\n            \"WLF\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"WB_ECA\",\n        name: \"Europe and Central Asia (WB)\",\n        slug: \"europe-and-central-asia-wb\",\n        regionType: \"aggregate\",\n        definedBy: \"wb\",\n        publisher: \"wb\",\n        translationCodes: [\"143\", \"150\"],\n        members: [\n            \"AIA\",\n            \"ALA\",\n            \"ALB\",\n            \"AND\",\n            \"ANT\",\n            \"ARM\",\n            \"AUT\",\n            \"AZE\",\n            \"BEL\",\n            \"BES\",\n            \"BGR\",\n            \"BIH\",\n            \"BLM\",\n            \"BLR\",\n            \"CHE\",\n            \"CYP\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"FRO\",\n            \"GBR\",\n            \"GEO\",\n            \"GGY\",\n            \"GIB\",\n            \"GLP\",\n            \"GRC\",\n            \"GRL\",\n            \"GUF\",\n            \"HRV\",\n            \"HUN\",\n            \"IMN\",\n            \"IRL\",\n            \"ISL\",\n            \"ITA\",\n            \"JEY\",\n            \"KAZ\",\n            \"KGZ\",\n            \"LIE\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MCO\",\n            \"MDA\",\n            \"MKD\",\n            \"MNE\",\n            \"MSR\",\n            \"MTQ\",\n            \"MYT\",\n            \"NLD\",\n            \"NOR\",\n            \"OWID_AUH\",\n            \"OWID_BAD\",\n            \"OWID_BAV\",\n            \"OWID_CYN\",\n            \"OWID_CZS\",\n            \"OWID_DSI\",\n            \"OWID_GDR\",\n            \"OWID_GFR\",\n            \"OWID_KOS\",\n            \"OWID_MOD\",\n            \"OWID_PAR\",\n            \"OWID_SAR\",\n            \"OWID_SAX\",\n            \"OWID_SEK\",\n            \"OWID_SRM\",\n            \"OWID_TSC\",\n            \"OWID_USS\",\n            \"OWID_WTB\",\n            \"OWID_YGS\",\n            \"POL\",\n            \"PRT\",\n            \"REU\",\n            \"ROU\",\n            \"RUS\",\n            \"SHN\",\n            \"SMR\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"TJK\",\n            \"TKM\",\n            \"TUR\",\n            \"UKR\",\n            \"UZB\",\n            \"VAT\",\n        ],\n    },\n    {\n        code: \"WB_LAC\",\n        name: \"Latin America and Caribbean (WB)\",\n        slug: \"latin-america-and-caribbean-wb\",\n        regionType: \"aggregate\",\n        definedBy: \"wb\",\n        publisher: \"wb\",\n        translationCodes: [\"419\", \"029\"],\n        members: [\n            \"ABW\",\n            \"ARG\",\n            \"ATG\",\n            \"BHS\",\n            \"BLZ\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"FLK\",\n            \"GRD\",\n            \"GTM\",\n            \"GUY\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MAF\",\n            \"MEX\",\n            \"NIC\",\n            \"OWID_GCL\",\n            \"OWID_RCA\",\n            \"PAN\",\n            \"PER\",\n            \"PRI\",\n            \"PRY\",\n            \"SGS\",\n            \"SLV\",\n            \"SUR\",\n            \"SXM\",\n            \"TCA\",\n            \"TTO\",\n            \"URY\",\n            \"VCT\",\n            \"VEN\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"WB_MENAP\",\n        name: \"Middle East, North Africa, Afghanistan and Pakistan (WB)\",\n        shortName: \"MENA, Afghanistan and Pakistan (WB)\",\n        slug: \"middle-east-north-africa-afghanistan-and-pakistan-wb\",\n        regionType: \"aggregate\",\n        definedBy: \"wb\",\n        publisher: \"wb\",\n        translationCodes: [\"145\", \"015\"],\n        members: [\n            \"AFG\",\n            \"ARE\",\n            \"BHR\",\n            \"DJI\",\n            \"DZA\",\n            \"EGY\",\n            \"IRN\",\n            \"IRQ\",\n            \"ISR\",\n            \"JOR\",\n            \"KWT\",\n            \"LBN\",\n            \"LBY\",\n            \"MAR\",\n            \"MLT\",\n            \"OMN\",\n            \"OWID_FPK\",\n            \"PAK\",\n            \"PSE\",\n            \"QAT\",\n            \"SAU\",\n            \"SYR\",\n            \"TUN\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"WB_NA\",\n        name: \"North America (WB)\",\n        slug: \"north-america-wb\",\n        regionType: \"aggregate\",\n        definedBy: \"wb\",\n        publisher: \"wb\",\n        translationCodes: [\"003\"],\n        members: [\"BMU\", \"CAN\", \"SPM\", \"USA\"],\n    },\n    {\n        code: \"WB_SA\",\n        name: \"South Asia (WB)\",\n        slug: \"south-asia-wb\",\n        regionType: \"aggregate\",\n        definedBy: \"wb\",\n        publisher: \"wb\",\n        translationCodes: [\"034\"],\n        members: [\"BGD\", \"BTN\", \"IND\", \"IOT\", \"LKA\", \"MDV\", \"NPL\"],\n    },\n    {\n        code: \"WB_SSA\",\n        name: \"Sub-Saharan Africa (WB)\",\n        slug: \"sub-saharan-africa-wb\",\n        regionType: \"aggregate\",\n        definedBy: \"wb\",\n        publisher: \"wb\",\n        translationCodes: [\"202\"],\n        members: [\n            \"AGO\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"ERI\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"KEN\",\n            \"LBR\",\n            \"LSO\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"OWID_ERE\",\n            \"OWID_OFS\",\n            \"RWA\",\n            \"SDN\",\n            \"SEN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"WHO_AFR\",\n        name: \"Africa (WHO)\",\n        slug: \"africa-who\",\n        regionType: \"aggregate\",\n        definedBy: \"who\",\n        publisher: \"who\",\n        translationCodes: [\"002\"],\n        members: [\n            \"AGO\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DZA\",\n            \"ERI\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"KEN\",\n            \"LBR\",\n            \"LSO\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"RWA\",\n            \"SEN\",\n            \"SLE\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"WHO_AMR\",\n        name: \"Americas (WHO)\",\n        slug: \"americas-who\",\n        regionType: \"aggregate\",\n        definedBy: \"who\",\n        publisher: \"who\",\n        translationCodes: [\"019\"],\n        members: [\n            \"ABW\",\n            \"AIA\",\n            \"ARG\",\n            \"ATG\",\n            \"BHS\",\n            \"BLZ\",\n            \"BMU\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"CAN\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"GLP\",\n            \"GRD\",\n            \"GTM\",\n            \"GUF\",\n            \"GUY\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MEX\",\n            \"MSR\",\n            \"MTQ\",\n            \"NIC\",\n            \"PAN\",\n            \"PER\",\n            \"PRI\",\n            \"PRY\",\n            \"SLV\",\n            \"SUR\",\n            \"SXM\",\n            \"TCA\",\n            \"TTO\",\n            \"URY\",\n            \"USA\",\n            \"VEN\",\n            \"VGB\",\n        ],\n    },\n    {\n        code: \"WHO_EMR\",\n        name: \"Eastern Mediterranean (WHO)\",\n        slug: \"eastern-mediterranean-who\",\n        regionType: \"aggregate\",\n        definedBy: \"who\",\n        publisher: \"who\",\n        translationCodes: [\"145\"],\n        members: [\n            \"AFG\",\n            \"ARE\",\n            \"BHR\",\n            \"DJI\",\n            \"EGY\",\n            \"IRN\",\n            \"IRQ\",\n            \"JOR\",\n            \"KWT\",\n            \"LBN\",\n            \"LBY\",\n            \"MAR\",\n            \"OMN\",\n            \"PAK\",\n            \"PSE\",\n            \"QAT\",\n            \"SAU\",\n            \"SDN\",\n            \"SOM\",\n            \"SYR\",\n            \"TUN\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"WHO_EUR\",\n        name: \"Europe (WHO)\",\n        slug: \"europe-who\",\n        regionType: \"aggregate\",\n        definedBy: \"who\",\n        publisher: \"who\",\n        translationCodes: [\"150\"],\n        members: [\n            \"ALB\",\n            \"AND\",\n            \"ARM\",\n            \"AUT\",\n            \"AZE\",\n            \"BEL\",\n            \"BGR\",\n            \"BIH\",\n            \"BLR\",\n            \"CHE\",\n            \"CYP\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"GBR\",\n            \"GEO\",\n            \"GRC\",\n            \"HRV\",\n            \"HUN\",\n            \"IRL\",\n            \"ISL\",\n            \"ISR\",\n            \"ITA\",\n            \"KAZ\",\n            \"KGZ\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MCO\",\n            \"MDA\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"NLD\",\n            \"NOR\",\n            \"POL\",\n            \"PRT\",\n            \"ROU\",\n            \"RUS\",\n            \"SMR\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"TJK\",\n            \"TKM\",\n            \"TUR\",\n            \"UKR\",\n            \"UZB\",\n        ],\n    },\n    {\n        code: \"WHO_SEAR\",\n        name: \"South-East Asia (WHO)\",\n        slug: \"south-east-asia-who\",\n        regionType: \"aggregate\",\n        definedBy: \"who\",\n        publisher: \"who\",\n        translationCodes: [\"035\"],\n        members: [\n            \"BGD\",\n            \"BTN\",\n            \"IND\",\n            \"LKA\",\n            \"MDV\",\n            \"MMR\",\n            \"NPL\",\n            \"PRK\",\n            \"THA\",\n            \"TLS\",\n        ],\n    },\n    {\n        code: \"WHO_WPAC\",\n        name: \"Western Pacific (WHO)\",\n        slug: \"western-pacific-who\",\n        regionType: \"aggregate\",\n        definedBy: \"who\",\n        publisher: \"who\",\n        translationCodes: [\"030\", \"035\", \"009\"],\n        members: [\n            \"ASM\",\n            \"AUS\",\n            \"BRN\",\n            \"CHN\",\n            \"COK\",\n            \"FJI\",\n            \"FSM\",\n            \"GUM\",\n            \"HKG\",\n            \"IDN\",\n            \"JPN\",\n            \"KHM\",\n            \"KIR\",\n            \"KOR\",\n            \"LAO\",\n            \"MAC\",\n            \"MHL\",\n            \"MNG\",\n            \"MNP\",\n            \"MYS\",\n            \"NCL\",\n            \"NIU\",\n            \"NRU\",\n            \"NZL\",\n            \"PCN\",\n            \"PHL\",\n            \"PLW\",\n            \"PNG\",\n            \"PYF\",\n            \"SGP\",\n            \"SLB\",\n            \"TKL\",\n            \"TON\",\n            \"TUV\",\n            \"VNM\",\n            \"VUT\",\n            \"WLF\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"WID_EA\",\n        name: \"East Asia (WID)\",\n        slug: \"east-asia-wid\",\n        regionType: \"aggregate\",\n        definedBy: \"wid\",\n        publisher: \"wid\",\n        members: [\"CHN\", \"HKG\", \"JPN\", \"KOR\", \"MAC\", \"MNG\", \"PRK\", \"TWN\"],\n    },\n    {\n        code: \"WID_EUR\",\n        name: \"Europe (WID)\",\n        slug: \"europe-wid\",\n        regionType: \"aggregate\",\n        definedBy: \"wid\",\n        publisher: \"wid\",\n        members: [\n            \"ALB\",\n            \"AND\",\n            \"AUT\",\n            \"BEL\",\n            \"BGR\",\n            \"BIH\",\n            \"CHE\",\n            \"CYP\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"GBR\",\n            \"GGY\",\n            \"GIB\",\n            \"GRC\",\n            \"HRV\",\n            \"HUN\",\n            \"IMN\",\n            \"IRL\",\n            \"ISL\",\n            \"ITA\",\n            \"JEY\",\n            \"LIE\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MCO\",\n            \"MDA\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"NLD\",\n            \"NOR\",\n            \"OWID_KOS\",\n            \"POL\",\n            \"PRT\",\n            \"ROU\",\n            \"SMR\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n        ],\n    },\n    {\n        code: \"WID_LA\",\n        name: \"Latin America (WID)\",\n        slug: \"latin-america-wid\",\n        regionType: \"aggregate\",\n        definedBy: \"wid\",\n        publisher: \"wid\",\n        members: [\n            \"ABW\",\n            \"AIA\",\n            \"ARG\",\n            \"ATG\",\n            \"BES\",\n            \"BHS\",\n            \"BLZ\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"GRD\",\n            \"GTM\",\n            \"GUY\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MEX\",\n            \"MSR\",\n            \"NIC\",\n            \"PAN\",\n            \"PER\",\n            \"PRI\",\n            \"PRY\",\n            \"SLV\",\n            \"SUR\",\n            \"SXM\",\n            \"TCA\",\n            \"TTO\",\n            \"URY\",\n            \"VCT\",\n            \"VEN\",\n            \"VGB\",\n        ],\n    },\n    {\n        code: \"WID_MENA\",\n        name: \"Middle East and North Africa (WID)\",\n        shortName: \"MENA (WID)\",\n        slug: \"middle-east-and-north-africa-wid\",\n        regionType: \"aggregate\",\n        definedBy: \"wid\",\n        publisher: \"wid\",\n        members: [\n            \"ARE\",\n            \"BHR\",\n            \"DZA\",\n            \"EGY\",\n            \"IRN\",\n            \"IRQ\",\n            \"ISR\",\n            \"JOR\",\n            \"KWT\",\n            \"LBN\",\n            \"LBY\",\n            \"MAR\",\n            \"OMN\",\n            \"PSE\",\n            \"QAT\",\n            \"SAU\",\n            \"SYR\",\n            \"TUN\",\n            \"TUR\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"WID_NA\",\n        name: \"North America (WID)\",\n        slug: \"north-america-wid\",\n        regionType: \"aggregate\",\n        definedBy: \"wid\",\n        publisher: \"wid\",\n        members: [\"BMU\", \"CAN\", \"GRL\", \"USA\"],\n    },\n    {\n        code: \"WID_OC\",\n        name: \"Oceania (WID)\",\n        slug: \"oceania-wid\",\n        regionType: \"aggregate\",\n        definedBy: \"wid\",\n        publisher: \"wid\",\n        members: [\n            \"AUS\",\n            \"FJI\",\n            \"FSM\",\n            \"KIR\",\n            \"MHL\",\n            \"NCL\",\n            \"NRU\",\n            \"NZL\",\n            \"PLW\",\n            \"PNG\",\n            \"PYF\",\n            \"SLB\",\n            \"TON\",\n            \"TUV\",\n            \"VUT\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"WID_RCA\",\n        name: \"Russia and Central Asia (WID)\",\n        slug: \"russia-and-central-asia-wid\",\n        regionType: \"aggregate\",\n        definedBy: \"wid\",\n        publisher: \"wid\",\n        members: [\n            \"ARM\",\n            \"AZE\",\n            \"BLR\",\n            \"GEO\",\n            \"KAZ\",\n            \"KGZ\",\n            \"RUS\",\n            \"TJK\",\n            \"TKM\",\n            \"UKR\",\n            \"UZB\",\n        ],\n    },\n    {\n        code: \"WID_SSA\",\n        name: \"Sub-Saharan Africa (WID)\",\n        slug: \"sub-saharan-africa-wid\",\n        regionType: \"aggregate\",\n        definedBy: \"wid\",\n        publisher: \"wid\",\n        members: [\n            \"AGO\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DJI\",\n            \"ERI\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"KEN\",\n            \"LBR\",\n            \"LSO\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"RWA\",\n            \"SDN\",\n            \"SEN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"WID_SSEA\",\n        name: \"South and South-East Asia (WID)\",\n        slug: \"south-and-south-east-asia-wid\",\n        regionType: \"aggregate\",\n        definedBy: \"wid\",\n        publisher: \"wid\",\n        members: [\n            \"AFG\",\n            \"BGD\",\n            \"BRN\",\n            \"BTN\",\n            \"IDN\",\n            \"IND\",\n            \"KHM\",\n            \"LAO\",\n            \"LKA\",\n            \"MDV\",\n            \"MMR\",\n            \"MYS\",\n            \"NPL\",\n            \"PAK\",\n            \"PHL\",\n            \"SGP\",\n            \"THA\",\n            \"TLS\",\n            \"VNM\",\n        ],\n    },\n    {\n        code: \"WLF\",\n        shortCode: \"WF\",\n        name: \"Wallis and Futuna\",\n        slug: \"wallis-and-futuna\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"WSM\",\n        shortCode: \"WS\",\n        name: \"Samoa\",\n        slug: \"samoa\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"YEM\",\n        shortCode: \"YE\",\n        name: \"Yemen\",\n        slug: \"yemen\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ZAF\",\n        shortCode: \"ZA\",\n        name: \"South Africa\",\n        slug: \"south-africa\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ZMB\",\n        shortCode: \"ZM\",\n        name: \"Zambia\",\n        slug: \"zambia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ZWE\",\n        shortCode: \"ZW\",\n        name: \"Zimbabwe\",\n        slug: \"zimbabwe\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n] as const\n","import * as _ from \"lodash-es\"\nimport { EntityName } from \"@ourworldindata/types\"\nimport { lazy } from \"../Util.js\"\nimport { regions } from \"./regions.js\"\nimport type {\n    Region,\n    Country,\n    Aggregate,\n    Continent,\n    IncomeGroup,\n    OwidIncomeGroupCode,\n    RegionSet,\n    SuffixedRegionName,\n    AggregateWithPublisher,\n    RegionNameSuffix,\n} from \"./regionsTypes.js\"\n\n/**\n * Captures the trailing \"(Publisher)\" of a region name,\n * e.g. \"Africa (WHO)\" -> name \"Africa\", suffix \"WHO\".\n *\n * Matches the *last* parenthetical, since a name can carry others,\n * e.g. \"Africa (non-OECD) (IHME GBD)\" -> name \"Africa (non-OECD)\", suffix \"IHME GBD\".\n *\n * `.*\\S` and `[^()]+` (not `.+` and `[^)]+`) keep the match linear: neither group\n * can compete with `\\s+` or the literal `\\(` for the same characters.\n */\nconst REGION_NAME_SUFFIX_RE = /^(.*\\S)\\s+\\(([^()]+)\\)$/\n\n// A region can belong to two of a publisher's region sets at once (e.g. ILO's\n// \"Arab States (ILO)\" is both a broad region and a subregion), but a region\n// carries a single `definedBy`. The ETL back-fills such a region into the\n// finer set's `*_region` indicator; mirror that here so that set is a complete\n// partition for *all* consumers (tooltips, entity presets, …), not just the ones\n// that special-case it.\nconst REGION_SET_BACKFILLS: Partial<Record<RegionSet, SuffixedRegionName[]>> = {\n    ilo_2: [\"Arab States (ILO)\"],\n    fao_sdg: [\"Australia and New Zealand (FAO)\"],\n    ihme_gbd_2: [\n        \"North Africa and Middle East (IHME GBD)\",\n        \"South Asia (IHME GBD)\",\n    ],\n}\n\nexport function checkIsCountry(region: Region): region is Country {\n    return region.regionType === \"country\" || region.regionType === \"other\"\n}\n\nexport function checkIsAggregate(region: Region): region is Aggregate {\n    return region.regionType === \"aggregate\"\n}\n\nexport function checkIsOwidContinent(region: Region): region is Continent {\n    return region.regionType === \"continent\"\n}\n\nexport function checkIsIncomeGroup(region: Region): region is IncomeGroup {\n    return region.regionType === \"income_group\"\n}\n\nexport function checkHasMembers(\n    region?: Region\n): region is Aggregate | Continent | IncomeGroup {\n    return region !== undefined && \"members\" in region\n}\n\nexport function checkIsOwidIncomeGroupCode(\n    code: string\n): code is OwidIncomeGroupCode {\n    return getIncomeGroups().some((incomeGroup) => incomeGroup.code === code)\n}\n\nexport const countries: Country[] = regions.filter(\n    (entity): entity is Country =>\n        entity.regionType === \"country\" &&\n        !entity.isUnlisted &&\n        !entity.isHistorical\n)\n\nexport const mappableCountries: Country[] = regions.filter(\n    (country): country is Country =>\n        checkIsCountry(country) && !!country.isMappable\n)\n\nexport const getContinents = lazy(() =>\n    regions.filter((entity): entity is Continent =>\n        checkIsOwidContinent(entity)\n    )\n)\n\nexport const getIncomeGroups = lazy(() =>\n    regions.filter((entity): entity is IncomeGroup =>\n        checkIsIncomeGroup(entity)\n    )\n)\n\nexport const getAggregates = lazy(() =>\n    regions.filter((entity): entity is Aggregate => checkIsAggregate(entity))\n)\n\nexport const listedRegionsNames = lazy(() =>\n    regions\n        .filter((entity) => checkIsCountry(entity) && !entity.isUnlisted)\n        .map((entity) => entity.name)\n)\n\nconst getAggregatesWithPublisher = lazy(() =>\n    getAggregates().filter(\n        (r): r is AggregateWithPublisher =>\n            r.definedBy !== undefined && r.publisher !== undefined\n    )\n)\n\nexport const getRegionSets = lazy(() =>\n    _.uniq(getAggregatesWithPublisher().map((r) => r.definedBy))\n)\n\n/**\n * The institutions that publish the regions in the file, e.g. \"ihme_gbd\".\n *\n * A publisher's regions may be split across several region sets (fao_1, fao_2, fao_sdg), so\n * this is coarser than `getRegionSets`, and it's the granularity at which an entity *name*\n * can be attributed — the key is the suffix its region names share.\n */\nexport const getRegionPublishers = lazy(() =>\n    _.uniq(getAggregatesWithPublisher().map((r) => r.publisher))\n)\n\n/** Splits a region name into its name and its \"(Publisher)\" suffix */\nexport function parseRegionNameSuffix(\n    rawName: string\n): RegionNameSuffix | undefined {\n    const match = rawName.trim().match(REGION_NAME_SUFFIX_RE)\n    if (!match) return undefined\n\n    const [, name, suffix] = match\n\n    const publisherKey = suffix.toLowerCase().replaceAll(\" \", \"_\")\n\n    return { name, suffix, publisherKey }\n}\n\n/**\n * The form a publisher key and a name's suffix are compared in: lowercased,\n * separators dropped. Suffixes aren't spelled consistently in the data,\n * e.g. \"(Maddison)\" and \"(maddison)\", \"(IHMEGBD)\" and \"(IHME GBD)\"\n */\nexport const toPublisherLookupKey = (key: string): string =>\n    key.toLowerCase().replaceAll(/[\\s_]/g, \"\")\n\nconst aggregatesWithPublisherByName = lazy(() =>\n    _.keyBy(getAggregatesWithPublisher(), (r) => r.name)\n)\n\nexport const getAggregatesInRegionSet = (\n    regionSet: RegionSet\n): AggregateWithPublisher[] => {\n    const direct = getAggregatesWithPublisher().filter(\n        (r) => r.definedBy === regionSet\n    )\n    const backfill = REGION_SET_BACKFILLS[regionSet]\n    if (!backfill) return direct\n    return [\n        ...direct,\n        ...backfill.map((name) => aggregatesWithPublisherByName()[name]),\n    ]\n}\n\nconst regionsByName = lazy(() =>\n    Object.fromEntries(regions.map((region) => [region.name, region]))\n)\n\nconst regionsBySlug = lazy(() =>\n    Object.fromEntries(regions.map((region) => [region.slug, region]))\n)\n\nconst regionsByCode = lazy(() =>\n    Object.fromEntries(regions.map((region) => [region.code, region]))\n)\n\nconst regionsByShortName = lazy(() =>\n    Object.fromEntries(\n        regions\n            .filter((region) => region.shortName)\n            .map((region) => [region.shortName, region])\n    )\n)\n\nconst regionsByNameOrVariantNameLowercase = lazy(\n    () =>\n        new Map(\n            regions.flatMap((region) => {\n                const names = [region.name.toLowerCase()]\n                if (\"variantNames\" in region && region.variantNames) {\n                    names.push(\n                        ...region.variantNames.map((variant) =>\n                            variant.toLowerCase()\n                        )\n                    )\n                }\n                return names.map((name) => [name, region])\n            })\n        )\n)\n\nexport const countriesByName = lazy(() =>\n    Object.fromEntries(countries.map((country) => [country.name, country]))\n)\n\nconst countriesBySlug = lazy(() =>\n    Object.fromEntries(countries.map((country) => [country.slug, country]))\n)\n\nexport const incomeGroupsByCode = lazy(\n    () =>\n        Object.fromEntries(\n            getIncomeGroups().map((region) => [region.code, region])\n        ) as Record<OwidIncomeGroupCode, IncomeGroup>\n)\n\nexport const getRegionByName = (name: string): Region | undefined =>\n    regionsByName()[name]\n\nexport const getRegionBySlug = (slug: string): Region | undefined =>\n    regionsBySlug()[slug]\n\nexport const getRegionByCode = (code: string): Region | undefined =>\n    regionsByCode()[code]\n\nexport const getRegionByShortName = (shortName: string): Region | undefined =>\n    regionsByShortName()[shortName]\n\nexport const getRegionByNameOrVariantName = (\n    nameOrVariantName: string\n): Region | undefined =>\n    regionsByNameOrVariantNameLowercase().get(nameOrVariantName.toLowerCase())\n\nexport const getCountryByName = (name: string): Country | undefined =>\n    countriesByName()[name]\n\nexport const getCountryBySlug = (slug: string): Country | undefined =>\n    countriesBySlug()[slug]\n\n/**\n * Lazy-loaded map of region names to their parent regions.\n *\n * This creates a reverse lookup from child regions to all the parent regions\n * that contain them. For example, if \"France\" is a member of both \"Europe\"\n * and \"European Union\", then parentRegions.get(\"France\") would return\n * both regions.\n */\nconst parentRegions = lazy(() => {\n    const parentRegions = new Map<string, Region[]>()\n    for (const region of regions) {\n        // Only process regions that can contain other regions\n        if (!checkHasMembers(region)) continue\n\n        for (const memberCode of region.members) {\n            const subRegion = getRegionByCode(memberCode)\n            if (!subRegion) continue\n            if (!parentRegions.has(subRegion.name))\n                parentRegions.set(subRegion.name, [])\n            parentRegions.get(subRegion.name)!.push(region)\n        }\n    }\n    return parentRegions\n})\n\n/**\n * Get all parent regions that contain the specified region as a member.\n *\n * For example, France's parent regions are 'Europe', 'European Union',\n * 'High-income countries', etc.\n */\nexport const getParentRegions = (regionName: string): Region[] => {\n    return parentRegions().get(regionName) ?? []\n}\n\n/**\n * Get all sibling regions that share the same parent(s) as the specified region.\n *\n * For example, returns other European countries for 'Germany' or other\n * continents for 'Europe'.\n */\nexport const getSiblingRegions = (regionName: string): Region[] => {\n    const parentRegions = getParentRegions(regionName)\n    const siblingCodes = new Set(\n        parentRegions.flatMap((region) =>\n            checkHasMembers(region) ? region.members : []\n        )\n    )\n    return siblingCodes\n        .values()\n        .map(getRegionByCode)\n        .filter(\n            (region): region is Region =>\n                region !== undefined && region.name !== regionName\n        )\n        .toArray()\n}\n\n/**\n * Gets the OWID continent name for a country.\n * Returns undefined if the entity is not a country or has no continent.\n */\nexport function getContinentForCountry(\n    countryName: EntityName\n): string | undefined {\n    const parentRegions = getParentRegions(countryName)\n    const continent = parentRegions.find((r) => checkIsOwidContinent(r))\n    return continent?.name\n}\n\nconst getCountryNamesForRegionRecursive = (region: Region): string[] => {\n    if (!checkHasMembers(region)) return [region.name]\n    return region.members.reduce<string[]>((countryNames, memberCode) => {\n        const subRegion = getRegionByCode(memberCode)\n        if (!subRegion) return countryNames\n        return [\n            ...countryNames,\n            ...getCountryNamesForRegionRecursive(subRegion),\n        ]\n    }, [])\n}\n\nexport const getCountryNamesForRegion = (\n    region: Exclude<Region, Country>\n): string[] => {\n    return getCountryNamesForRegionRecursive(region)\n}\n\nconst _IntlDisplayNamesInstances = new Map<string, Intl.DisplayNames>()\nconst getRegionTranslation = (\n    regionCode: string,\n    languageCode: string\n): string | undefined => {\n    try {\n        if (!_IntlDisplayNamesInstances.has(languageCode)) {\n            _IntlDisplayNamesInstances.set(\n                languageCode,\n                new Intl.DisplayNames([languageCode], {\n                    type: \"region\",\n                    fallback: \"none\",\n                })\n            )\n        }\n        return _IntlDisplayNamesInstances.get(languageCode)!.of(regionCode)\n    } catch {\n        return undefined\n    }\n}\n\nconst _regionAlternativeNames = new Map<string, string[] | undefined>()\nexport const getRegionAlternativeNames = (\n    regionName: string,\n    languages: readonly string[]\n): string[] | undefined => {\n    if (!_regionAlternativeNames.has(regionName)) {\n        const region = getRegionByNameOrVariantName(regionName)\n        if (region) {\n            const names = new Set<string>()\n            if (\"variantNames\" in region && region.variantNames) {\n                for (const variant of region.variantNames) {\n                    names.add(variant)\n                }\n            }\n\n            const translationCodes =\n                \"translationCodes\" in region\n                    ? region.translationCodes\n                    : undefined\n            const shortCode =\n                \"shortCode\" in region ? region.shortCode : undefined\n\n            const codes = translationCodes ?? (shortCode ? [shortCode] : [])\n            const translations = languages\n                .flatMap((lang) =>\n                    codes.map((code) => getRegionTranslation(code, lang))\n                )\n                .filter((name) => name !== undefined)\n\n            translations.forEach((translation) => names.add(translation))\n            _regionAlternativeNames.set(regionName, Array.from(names))\n        } else {\n            _regionAlternativeNames.set(regionName, undefined)\n        }\n    }\n    return _regionAlternativeNames.get(regionName)!\n}\n\n// Regions that require the definite article \"the\" before their name\n// Maintained here instead of in the ETL because it's such a specific piece of metadata.\nconst regionsWithArticles = new Set([\n    \"Aland Islands\",\n    \"Netherlands Antilles\",\n    \"United Arab Emirates\",\n    \"French Southern Territories\",\n    \"Bahrain\",\n    \"Bahamas\",\n    \"Central African Republic\",\n    \"Cocos Islands\",\n    \"Democratic Republic of Congo\",\n    \"Congo\",\n    \"Cook Islands\",\n    \"Comoros\",\n    \"Cayman Islands\",\n    \"Channel Islands\",\n    \"Dominican Republic\",\n    \"Western Sahara\",\n    \"Falkland Islands\",\n    \"Faroe Islands\",\n    \"United Kingdom\",\n    \"Gambia\",\n    \"Heard Island and McDonald Islands\",\n    \"Isle of Man\",\n    \"British Indian Ocean Territory\",\n    \"Maldives\",\n    \"Marshall Islands\",\n    \"Northern Mariana Islands\",\n    \"Netherlands\",\n    \"Grand Duchy of Baden\",\n    \"Kingdom of Bavaria\",\n    \"Democratic Republic of Vietnam\",\n    \"Kingdom of the Two Sicilies\",\n    \"Duchy of Modena and Reggio\",\n    \"Orange Free State\",\n    \"Duchy of Parma and Piacenza\",\n    \"Federal Republic of Central America\",\n    \"Republic of Vietnam\",\n    \"Kingdom of Sardinia\",\n    \"Kingdom of Saxony\",\n    \"Sudan (former)\",\n    \"Grand Duchy of Tuscany\",\n    \"USSR\",\n    \"Kingdom of Wurttemberg\",\n    \"Yemen Arab Republic\",\n    \"Yemen People's Republic\",\n    \"Philippines\",\n    \"Gaza Strip\",\n    \"South Georgia and the South Sandwich Islands\",\n    \"Solomon Islands\",\n    \"Seychelles\",\n    \"Turks and Caicos Islands\",\n    \"United States\",\n    \"Vatican\",\n    \"British Virgin Islands\",\n    \"United States Virgin Islands\",\n])\n\nexport const articulateEntity = (entityName: EntityName): string => {\n    return regionsWithArticles.has(entityName)\n        ? `the ${entityName}`\n        : entityName\n}\n","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n  protocol = protocol.split(':')[0];\n  port = +port;\n\n  if (!port) return false;\n\n  switch (protocol) {\n    case 'http':\n    case 'ws':\n    return port !== 80;\n\n    case 'https':\n    case 'wss':\n    return port !== 443;\n\n    case 'ftp':\n    return port !== 21;\n\n    case 'gopher':\n    return port !== 70;\n\n    case 'file':\n    return false;\n  }\n\n  return port !== 0;\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n  try {\n    return decodeURIComponent(input.replace(/\\+/g, ' '));\n  } catch (e) {\n    return null;\n  }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n  try {\n    return encodeURIComponent(input);\n  } catch (e) {\n    return null;\n  }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n  var parser = /([^=?&]+)=?([^&]*)/g\n    , result = {}\n    , part;\n\n  while (part = parser.exec(query)) {\n    var key = decode(part[1])\n      , value = decode(part[2]);\n\n    //\n    // Prevent overriding of existing properties. This ensures that build-in\n    // methods like `toString` or __proto__ are not overriden by malicious\n    // querystrings.\n    //\n    // In the case if failed decoding, we want to omit the key/value pairs\n    // from the result.\n    //\n    if (key === null || value === null || key in result) continue;\n    result[key] = value;\n  }\n\n  return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n  prefix = prefix || '';\n\n  var pairs = []\n    , value\n    , key;\n\n  //\n  // Optionally prefix with a '?' if needed\n  //\n  if ('string' !== typeof prefix) prefix = '?';\n\n  for (key in obj) {\n    if (has.call(obj, key)) {\n      value = obj[key];\n\n      //\n      // Edge cases where we actually want to encode the value to an empty\n      // string instead of the stringified value.\n      //\n      if (!value && (value === null || value === undef || isNaN(value))) {\n        value = '';\n      }\n\n      key = encodeURIComponent(key);\n      value = encodeURIComponent(value);\n\n      //\n      // If we failed to encode the strings, we should bail out as we don't\n      // want to add invalid strings to the query.\n      //\n      if (key === null || value === null) continue;\n      pairs.push(key +'='+ value);\n    }\n  }\n\n  return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","'use strict';\n\nvar required = require('requires-port')\n  , qs = require('querystringify')\n  , controlOrWhitespace = /^[\\x00-\\x20\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]+/\n  , CRHTLF = /[\\n\\r\\t]/g\n  , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n  , port = /:\\d+$/\n  , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\\\/]+)?([\\S\\s]*)/i\n  , windowsDriveLetter = /^[a-zA-Z]:/;\n\n/**\n * Remove control characters and whitespace from the beginning of a string.\n *\n * @param {Object|String} str String to trim.\n * @returns {String} A new string representing `str` stripped of control\n *     characters and whitespace from its beginning.\n * @public\n */\nfunction trimLeft(str) {\n  return (str ? str : '').toString().replace(controlOrWhitespace, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n *    indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n *    the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n  ['#', 'hash'],                        // Extract from the back.\n  ['?', 'query'],                       // Extract from the back.\n  function sanitize(address, url) {     // Sanitize what is left of the address\n    return isSpecial(url.protocol) ? address.replace(/\\\\/g, '/') : address;\n  },\n  ['/', 'pathname'],                    // Extract from the back.\n  ['@', 'auth', 1],                     // Extract from the front.\n  [NaN, 'host', undefined, 1, 1],       // Set left over value.\n  [/:(\\d*)$/, 'port', undefined, 1],    // RegExp the back.\n  [NaN, 'hostname', undefined, 1, 1]    // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n  var globalVar;\n\n  if (typeof window !== 'undefined') globalVar = window;\n  else if (typeof global !== 'undefined') globalVar = global;\n  else if (typeof self !== 'undefined') globalVar = self;\n  else globalVar = {};\n\n  var location = globalVar.location || {};\n  loc = loc || location;\n\n  var finaldestination = {}\n    , type = typeof loc\n    , key;\n\n  if ('blob:' === loc.protocol) {\n    finaldestination = new Url(unescape(loc.pathname), {});\n  } else if ('string' === type) {\n    finaldestination = new Url(loc, {});\n    for (key in ignore) delete finaldestination[key];\n  } else if ('object' === type) {\n    for (key in loc) {\n      if (key in ignore) continue;\n      finaldestination[key] = loc[key];\n    }\n\n    if (finaldestination.slashes === undefined) {\n      finaldestination.slashes = slashes.test(loc.href);\n    }\n  }\n\n  return finaldestination;\n}\n\n/**\n * Check whether a protocol scheme is special.\n *\n * @param {String} The protocol scheme of the URL\n * @return {Boolean} `true` if the protocol scheme is special, else `false`\n * @private\n */\nfunction isSpecial(scheme) {\n  return (\n    scheme === 'file:' ||\n    scheme === 'ftp:' ||\n    scheme === 'http:' ||\n    scheme === 'https:' ||\n    scheme === 'ws:' ||\n    scheme === 'wss:'\n  );\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @param {Object} location\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address, location) {\n  address = trimLeft(address);\n  address = address.replace(CRHTLF, '');\n  location = location || {};\n\n  var match = protocolre.exec(address);\n  var protocol = match[1] ? match[1].toLowerCase() : '';\n  var forwardSlashes = !!match[2];\n  var otherSlashes = !!match[3];\n  var slashesCount = 0;\n  var rest;\n\n  if (forwardSlashes) {\n    if (otherSlashes) {\n      rest = match[2] + match[3] + match[4];\n      slashesCount = match[2].length + match[3].length;\n    } else {\n      rest = match[2] + match[4];\n      slashesCount = match[2].length;\n    }\n  } else {\n    if (otherSlashes) {\n      rest = match[3] + match[4];\n      slashesCount = match[3].length;\n    } else {\n      rest = match[4]\n    }\n  }\n\n  if (protocol === 'file:') {\n    if (slashesCount >= 2) {\n      rest = rest.slice(2);\n    }\n  } else if (isSpecial(protocol)) {\n    rest = match[4];\n  } else if (protocol) {\n    if (forwardSlashes) {\n      rest = rest.slice(2);\n    }\n  } else if (slashesCount >= 2 && isSpecial(location.protocol)) {\n    rest = match[4];\n  }\n\n  return {\n    protocol: protocol,\n    slashes: forwardSlashes || isSpecial(protocol),\n    slashesCount: slashesCount,\n    rest: rest\n  };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n  if (relative === '') return base;\n\n  var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n    , i = path.length\n    , last = path[i - 1]\n    , unshift = false\n    , up = 0;\n\n  while (i--) {\n    if (path[i] === '.') {\n      path.splice(i, 1);\n    } else if (path[i] === '..') {\n      path.splice(i, 1);\n      up++;\n    } else if (up) {\n      if (i === 0) unshift = true;\n      path.splice(i, 1);\n      up--;\n    }\n  }\n\n  if (unshift) path.unshift('');\n  if (last === '.' || last === '..') path.push('');\n\n  return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n  address = trimLeft(address);\n  address = address.replace(CRHTLF, '');\n\n  if (!(this instanceof Url)) {\n    return new Url(address, location, parser);\n  }\n\n  var relative, extracted, parse, instruction, index, key\n    , instructions = rules.slice()\n    , type = typeof location\n    , url = this\n    , i = 0;\n\n  //\n  // The following if statements allows this module two have compatibility with\n  // 2 different API:\n  //\n  // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n  //    where the boolean indicates that the query string should also be parsed.\n  //\n  // 2. The `URL` interface of the browser which accepts a URL, object as\n  //    arguments. The supplied object will be used as default values / fall-back\n  //    for relative paths.\n  //\n  if ('object' !== type && 'string' !== type) {\n    parser = location;\n    location = null;\n  }\n\n  if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n  location = lolcation(location);\n\n  //\n  // Extract protocol information before running the instructions.\n  //\n  extracted = extractProtocol(address || '', location);\n  relative = !extracted.protocol && !extracted.slashes;\n  url.slashes = extracted.slashes || relative && location.slashes;\n  url.protocol = extracted.protocol || location.protocol || '';\n  address = extracted.rest;\n\n  //\n  // When the authority component is absent the URL starts with a path\n  // component.\n  //\n  if (\n    extracted.protocol === 'file:' && (\n      extracted.slashesCount !== 2 || windowsDriveLetter.test(address)) ||\n    (!extracted.slashes &&\n      (extracted.protocol ||\n        extracted.slashesCount < 2 ||\n        !isSpecial(url.protocol)))\n  ) {\n    instructions[3] = [/(.*)/, 'pathname'];\n  }\n\n  for (; i < instructions.length; i++) {\n    instruction = instructions[i];\n\n    if (typeof instruction === 'function') {\n      address = instruction(address, url);\n      continue;\n    }\n\n    parse = instruction[0];\n    key = instruction[1];\n\n    if (parse !== parse) {\n      url[key] = address;\n    } else if ('string' === typeof parse) {\n      index = parse === '@'\n        ? address.lastIndexOf(parse)\n        : address.indexOf(parse);\n\n      if (~index) {\n        if ('number' === typeof instruction[2]) {\n          url[key] = address.slice(0, index);\n          address = address.slice(index + instruction[2]);\n        } else {\n          url[key] = address.slice(index);\n          address = address.slice(0, index);\n        }\n      }\n    } else if ((index = parse.exec(address))) {\n      url[key] = index[1];\n      address = address.slice(0, index.index);\n    }\n\n    url[key] = url[key] || (\n      relative && instruction[3] ? location[key] || '' : ''\n    );\n\n    //\n    // Hostname, host and protocol should be lowercased so they can be used to\n    // create a proper `origin`.\n    //\n    if (instruction[4]) url[key] = url[key].toLowerCase();\n  }\n\n  //\n  // Also parse the supplied query string in to an object. If we're supplied\n  // with a custom parser as function use that instead of the default build-in\n  // parser.\n  //\n  if (parser) url.query = parser(url.query);\n\n  //\n  // If the URL is relative, resolve the pathname against the base URL.\n  //\n  if (\n      relative\n    && location.slashes\n    && url.pathname.charAt(0) !== '/'\n    && (url.pathname !== '' || location.pathname !== '')\n  ) {\n    url.pathname = resolve(url.pathname, location.pathname);\n  }\n\n  //\n  // Default to a / for pathname if none exists. This normalizes the URL\n  // to always have a /\n  //\n  if (url.pathname.charAt(0) !== '/' && isSpecial(url.protocol)) {\n    url.pathname = '/' + url.pathname;\n  }\n\n  //\n  // We should not add port numbers if they are already the default port number\n  // for a given protocol. As the host also contains the port number we're going\n  // override it with the hostname which contains no port number.\n  //\n  if (!required(url.port, url.protocol)) {\n    url.host = url.hostname;\n    url.port = '';\n  }\n\n  //\n  // Parse down the `auth` for the username and password.\n  //\n  url.username = url.password = '';\n\n  if (url.auth) {\n    index = url.auth.indexOf(':');\n\n    if (~index) {\n      url.username = url.auth.slice(0, index);\n      url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n      url.password = url.auth.slice(index + 1);\n      url.password = encodeURIComponent(decodeURIComponent(url.password))\n    } else {\n      url.username = encodeURIComponent(decodeURIComponent(url.auth));\n    }\n\n    url.auth = url.password ? url.username +':'+ url.password : url.username;\n  }\n\n  url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n    ? url.protocol +'//'+ url.host\n    : 'null';\n\n  //\n  // The href is just the compiled result.\n  //\n  url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part          Property we need to adjust.\n * @param {Mixed} value          The newly assigned value.\n * @param {Boolean|Function} fn  When setting the query, it will be the function\n *                               used to parse the query.\n *                               When setting the protocol, double slash will be\n *                               removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n  var url = this;\n\n  switch (part) {\n    case 'query':\n      if ('string' === typeof value && value.length) {\n        value = (fn || qs.parse)(value);\n      }\n\n      url[part] = value;\n      break;\n\n    case 'port':\n      url[part] = value;\n\n      if (!required(value, url.protocol)) {\n        url.host = url.hostname;\n        url[part] = '';\n      } else if (value) {\n        url.host = url.hostname +':'+ value;\n      }\n\n      break;\n\n    case 'hostname':\n      url[part] = value;\n\n      if (url.port) value += ':'+ url.port;\n      url.host = value;\n      break;\n\n    case 'host':\n      url[part] = value;\n\n      if (port.test(value)) {\n        value = value.split(':');\n        url.port = value.pop();\n        url.hostname = value.join(':');\n      } else {\n        url.hostname = value;\n        url.port = '';\n      }\n\n      break;\n\n    case 'protocol':\n      url.protocol = value.toLowerCase();\n      url.slashes = !fn;\n      break;\n\n    case 'pathname':\n    case 'hash':\n      if (value) {\n        var char = part === 'pathname' ? '/' : '#';\n        url[part] = value.charAt(0) !== char ? char + value : value;\n      } else {\n        url[part] = value;\n      }\n      break;\n\n    case 'username':\n    case 'password':\n      url[part] = encodeURIComponent(value);\n      break;\n\n    case 'auth':\n      var index = value.indexOf(':');\n\n      if (~index) {\n        url.username = value.slice(0, index);\n        url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n        url.password = value.slice(index + 1);\n        url.password = encodeURIComponent(decodeURIComponent(url.password));\n      } else {\n        url.username = encodeURIComponent(decodeURIComponent(value));\n      }\n  }\n\n  for (var i = 0; i < rules.length; i++) {\n    var ins = rules[i];\n\n    if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n  }\n\n  url.auth = url.password ? url.username +':'+ url.password : url.username;\n\n  url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n    ? url.protocol +'//'+ url.host\n    : 'null';\n\n  url.href = url.toString();\n\n  return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n  if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n  var query\n    , url = this\n    , host = url.host\n    , protocol = url.protocol;\n\n  if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n  var result =\n    protocol +\n    ((url.protocol && url.slashes) || isSpecial(url.protocol) ? '//' : '');\n\n  if (url.username) {\n    result += url.username;\n    if (url.password) result += ':'+ url.password;\n    result += '@';\n  } else if (url.password) {\n    result += ':'+ url.password;\n    result += '@';\n  } else if (\n    url.protocol !== 'file:' &&\n    isSpecial(url.protocol) &&\n    !host &&\n    url.pathname !== '/'\n  ) {\n    //\n    // Add back the empty userinfo, otherwise the original invalid URL\n    // might be transformed into a valid one with `url.pathname` as host.\n    //\n    result += '@';\n  }\n\n  //\n  // Trailing colon is removed from `url.host` when it is parsed. If it still\n  // ends with a colon, then add back the trailing colon that was removed. This\n  // prevents an invalid URL from being transformed into a valid one.\n  //\n  if (host[host.length - 1] === ':' || (port.test(url.hostname) && !url.port)) {\n    host += ':';\n  }\n\n  result += host + url.pathname;\n\n  query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n  if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n  if (url.hash) result += url.hash;\n\n  return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\n","import { MultiDimDimensionChoices, QueryParams } from \"@ourworldindata/types\"\nimport { omitUndefinedValues } from \"../Util.js\"\n\n/**\n * Converts a query string into an object of key-value pairs, with URI-decoded\n * keys and values. A leading `?` is ignored, a repeated key keeps its last\n * value, and a key without a value (`?foo`) maps to an empty string.\n */\nexport const strToQueryParams = (queryStr = \"\"): QueryParams =>\n    Object.fromEntries(new URLSearchParams(queryStr))\n\n/**\n * Like `strToQueryParams`, but leaves the values URI-encoded.\n * Only use when absolutely necessary, for example, to distinguish between\n * `+` and `%20` for legacy URLs.\n */\nexport const strToEncodedQueryParams = (queryStr = \"\"): QueryParams => {\n    if (queryStr[0] === \"?\") queryStr = queryStr.substring(1)\n\n    const params: QueryParams = {}\n    for (const param of queryStr.split(\"&\").filter((s) => s)) {\n        const [key, value] = param.split(\"=\", 2)\n        params[safeDecodeURIComponent(key.replace(/\\+/g, \"%20\"))] = value\n    }\n    return params\n}\n\n/**\n * `decodeURIComponent` that returns the input unchanged instead of throwing\n * on malformed escapes such as a lone `%`.\n */\nexport const safeDecodeURIComponent = (str: string): string => {\n    try {\n        return decodeURIComponent(str)\n    } catch {\n        return str\n    }\n}\n\n/**\n * Converts an object to a query string.\n * Expects the input object to not be encoded already, and handles the URI-encoding of the values.\n */\nexport const queryParamsToStr = (params: QueryParams): string => {\n    const queryParams = new URLSearchParams(omitUndefinedValues(params))\n\n    // we're relying on `~` (%7E) to not be encoded in some places, so make sure that it never is\n    const newQueryStr = queryParams.toString().replace(/%7E/g, \"~\")\n    return newQueryStr.length ? `?${newQueryStr}` : \"\"\n}\n\n/**\n * Serialize a multi-dim view's dimension choices into a canonical query\n * string, e.g. `antigen=hepb_bd&metric=vaccinated`. The parameters are sorted\n * so the same view always produces the same string; this is used as the\n * view's identifier.\n */\nexport function multiDimDimensionsToViewQueryStr(\n    dimensions: MultiDimDimensionChoices\n): string {\n    const searchParams = new URLSearchParams(dimensions)\n    searchParams.sort()\n    return searchParams.toString()\n}\n\nexport const getWindowQueryStr = (): string => window.location.search\n\nexport const setWindowQueryStr = (str: string): void =>\n    history.replaceState(\n        null,\n        document.title,\n        window.location.pathname + str + window.location.hash\n    )\n","import urlParseLib from \"url-parse\"\nimport { gdocUrlRegex, QueryParams } from \"@ourworldindata/types\"\n\nimport {\n    detailOnDemandRegex,\n    guidedChartRegex,\n    excludeUndefined,\n    omitUndefinedValues,\n} from \"../Util.js\"\n\nimport {\n    queryParamsToStr,\n    strToEncodedQueryParams,\n    strToQueryParams,\n} from \"./UrlUtils.js\"\nimport * as R from \"remeda\"\n\nconst parseUrl = (url: string): urlParseLib<string> => urlParseLib(url, {})\n\nconst ensureStartsWith = (str: string, start: string): string => {\n    if (str.startsWith(start)) return str\n    return `${start}${str}`\n}\n\nconst ensureQueryStrFormat = (queryStr: string): string =>\n    ensureStartsWith(queryStr, \"?\")\nconst ensureHashFormat = (queryStr: string): string =>\n    ensureStartsWith(queryStr, \"#\")\n\ninterface UrlProps {\n    readonly origin?: string // https://ourworldindata.org\n    readonly pathname?: string // /grapher/abc\n    readonly queryStr?: string // ?stackMode=relative\n    readonly hash?: string // #articles\n}\n\nexport class Url {\n    private readonly props: UrlProps\n\n    /**\n     * @param url Absolute or relative URL\n     */\n    static fromURL(url: string): Url {\n        const { origin, pathname, query, hash } = parseUrl(url)\n        return new Url({\n            origin:\n                origin !== undefined && origin !== \"null\" ? origin : undefined,\n            pathname,\n            queryStr: query,\n            hash,\n        })\n    }\n\n    static fromQueryStr(queryStr: string): Url {\n        return new Url({\n            queryStr: ensureQueryStrFormat(queryStr),\n        })\n    }\n\n    static fromQueryParams(queryParams: QueryParams): Url {\n        return new Url({\n            queryStr: queryParamsToStr(queryParams),\n        })\n    }\n\n    private constructor(props: UrlProps = {}) {\n        this.props = {\n            ...props,\n            pathname:\n                props.pathname !== undefined\n                    ? props.pathname\n                    : props.origin\n                      ? \"\"\n                      : undefined,\n        }\n    }\n\n    get origin(): string | undefined {\n        return this.props.origin\n    }\n\n    get pathname(): string | undefined {\n        return this.props.pathname\n    }\n\n    get slug(): string | undefined {\n        return this.props.pathname?.split(\"/\").pop()\n    }\n\n    get originAndPath(): string | undefined {\n        const strings = excludeUndefined([this.origin, this.pathname])\n        if (strings.length === 0) return undefined\n        return strings.join(\"\")\n    }\n\n    get queryStr(): string {\n        const { queryStr } = this.props\n        // Drop a single trailing `?`, if there is one\n        return queryStr && queryStr !== \"?\"\n            ? ensureQueryStrFormat(queryStr)\n            : \"\"\n    }\n\n    get hash(): string {\n        const { hash } = this.props\n        return hash ? ensureHashFormat(hash) : \"\"\n    }\n\n    get fullUrl(): string {\n        return excludeUndefined([\n            this.origin,\n            this.pathname,\n            this.queryStr,\n            this.hash,\n        ]).join(\"\")\n    }\n\n    get fullUrlNoTrailingSlash(): string {\n        return this.fullUrl.replace(/\\/$/, \"\") || \"/\"\n    }\n\n    get queryParams(): QueryParams {\n        return strToQueryParams(this.queryStr)\n    }\n\n    get encodedQueryParams(): QueryParams {\n        return strToEncodedQueryParams(this.queryStr)\n    }\n\n    get isGoogleDoc(): boolean {\n        return !!(this.pathname && gdocUrlRegex.test(this.fullUrl))\n    }\n\n    get isGrapher(): boolean {\n        return !!(this.pathname && /^\\/grapher\\/[\\w]+/.test(this.pathname))\n    }\n\n    get isDod(): boolean {\n        return !!(this.fullUrl && detailOnDemandRegex.test(this.fullUrl))\n    }\n    get isGuidedChart(): boolean {\n        return !!(this.fullUrl && guidedChartRegex.test(this.fullUrl))\n    }\n\n    get isUpload(): boolean {\n        return !!(this.pathname && /^\\/uploads\\/[\\w]+/.test(this.pathname))\n    }\n\n    // todo(refactor): move outisde of generic Url class\n    // see EXPLORERS_ROUTE_FOLDER\n    get isExplorer(): boolean {\n        return !!(this.pathname && /^\\/explorers\\/[\\w]+/.test(this.pathname))\n    }\n\n    update(props: UrlProps): Url {\n        return new Url({\n            ...this.props,\n            ...props,\n        })\n    }\n\n    setQueryParams(queryParams: QueryParams): Url {\n        return new Url({\n            ...this.props,\n            queryStr: queryParamsToStr(queryParams),\n        })\n    }\n\n    updateQueryParams(queryParams: QueryParams): Url {\n        return this.update({\n            queryStr: queryParamsToStr(\n                omitUndefinedValues({\n                    ...this.queryParams,\n                    ...queryParams,\n                })\n            ),\n        })\n    }\n\n    areQueryParamsEqual(otherUrl: Url): boolean {\n        const thisParams = this.queryParams\n        const otherParams = otherUrl.queryParams\n\n        return R.isShallowEqual(thisParams, otherParams)\n    }\n}\n\nexport const setWindowUrl = (url: Url): void => {\n    const pathname = url.pathname ?? window.location.pathname\n    window.history.replaceState(\n        null,\n        document.title,\n        excludeUndefined([pathname, url.queryStr, url.hash]).join(\"\")\n    )\n}\n\nexport const getWindowUrl = (): Url => {\n    return Url.fromURL(window.location.href)\n}\n","import * as _ from \"lodash-es\"\nimport { match } from \"ts-pattern\"\nimport {\n    articulateEntity,\n    checkHasMembers,\n    checkIsCountry,\n    countries,\n    getRegionByName,\n    getRegionByNameOrVariantName,\n    regions,\n    type Region,\n} from \"./regions/index.js\"\nimport {\n    CalloutFunction,\n    EnrichedBlockConditionalSection,\n    EnrichedBlockDataCallout,\n    GRAPHER_QUERY_PARAM_KEYS,\n    GrapherValuesJson,\n    GrapherValuesJsonDataPoint,\n    LinkedCallouts,\n    ParseError,\n    SpanCallout,\n    type OwidGdocProfileContent,\n} from \"@ourworldindata/types\"\n\nimport { traverseEnrichedBlock } from \"./Util.js\"\nimport { Url } from \"./urls/Url.js\"\n\nexport type ProfileEntity = Pick<Region, \"name\" | \"code\">\n\ntype ReplacementPair = [token: string, value: string]\n\nconst replaceTokens = (text: string, replacements: ReplacementPair[]): string =>\n    replacements.reduce(\n        (acc, [token, replacement]) =>\n            acc.includes(token) ? acc.split(token).join(replacement) : acc,\n        text\n    )\n\n/**\n * Recursively replaces strings in the given array based on the provided replacements.\n * e.g.\n * [\"Data for $entityName\", \"$entityName is a country\"] with [(\"$entityName\", \"Canada\")] → [\"Data for Canada\", \"Canada is a country\"]\n */\nconst replaceStringsInArray = (\n    items: any[],\n    replacements: ReplacementPair[]\n): void => {\n    for (let index = 0; index < items.length; index++) {\n        const item = items[index]\n        if (typeof item === \"string\") {\n            items[index] = replaceTokens(item, replacements)\n        } else if (Array.isArray(item)) {\n            replaceStringsInArray(item, replacements)\n        } else if (item && typeof item === \"object\") {\n            replaceStringsInObject(item as Record<string, any>, replacements)\n        }\n    }\n}\n\n/**\n * Recursively replaces strings in the given record based on the provided replacements.\n * e.g.\n * { title: \"Data for $entityName\" } with [(\"$entityName\", \"Canada\")] → { title: \"Data for Canada\" }\n * { list: [\"$entityName facts\", \"$entityName is a country\"] } → { list: [\"Canada facts\", \"Canada is a country\"] }\n */\nconst replaceStringsInObject = (\n    record: Record<string, any>,\n    replacements: ReplacementPair[]\n): void => {\n    for (const key of Object.keys(record)) {\n        const value = record[key]\n        if (typeof value === \"string\") {\n            record[key] = replaceTokens(value, replacements)\n        } else if (Array.isArray(value)) {\n            replaceStringsInArray(value, replacements)\n        } else if (value && typeof value === \"object\") {\n            replaceStringsInObject(value as Record<string, any>, replacements)\n        }\n    }\n}\n\nconst getEntityPossessive = (value: string): string => {\n    const trimmedValue = value.trim()\n    if (!trimmedValue) return trimmedValue\n    return /s$/i.test(trimmedValue) ? `${trimmedValue}’` : `${trimmedValue}’s`\n}\n\nconst capitalizeEntityName = (value: string): string => {\n    if (!value) return value\n    const [first, ...rest] = value\n    return first.toUpperCase() + rest.join(\"\")\n}\n\n/**\n * Instantiates a profile content by replacing tokens with entity-specific values.\n */\nexport const instantiateProfile = (\n    content: OwidGdocProfileContent,\n    entity: ProfileEntity\n): OwidGdocProfileContent => {\n    const entityNameWithArticle = articulateEntity(entity.name)\n    const capitalizedEntity = capitalizeEntityName(entityNameWithArticle)\n    const entityPossessiveWithArticle = getEntityPossessive(\n        entityNameWithArticle\n    )\n    const entityPossessiveCapitalized = getEntityPossessive(capitalizedEntity)\n    const entityPossessiveWithoutArticle = getEntityPossessive(entity.name)\n    const replacements: ReplacementPair[] = [\n        [\"$EntityName’s\", entityPossessiveCapitalized],\n        [\"$EntityName\", capitalizedEntity],\n        [\"$entityName’s\", entityPossessiveWithArticle],\n        [\"$entityName\", entityNameWithArticle],\n        [\"$entityCode\", entity.code],\n        [\"$noArticleEntityName’s\", entityPossessiveWithoutArticle],\n        [\"$noArticleEntityName\", entity.name],\n    ]\n\n    const clonedContent = _.cloneDeep(content)\n\n    replaceStringsInObject(clonedContent, replacements)\n\n    clonedContent.body.forEach((node) => {\n        traverseEnrichedBlock(node, (block) => {\n            if (block.type === \"conditional-section\") {\n                parseInstantiatedConditionalSection(block, entity.name)\n            }\n        })\n    })\n\n    const region = getRegionByNameOrVariantName(entity.name)\n    if (region) {\n        clonedContent.instantiatedEntity = {\n            ...region,\n            isCountry: checkIsCountry(region),\n        }\n    }\n\n    return clonedContent\n}\n\nexport function getEntitiesForProfile(\n    scopeRaw: string,\n    excludeRaw?: string\n): ProfileEntity[] {\n    if (!scopeRaw) return []\n\n    const scopeValues = scopeRaw\n        .split(\",\")\n        .map((value) => value.trim().toLowerCase())\n        .filter((value) => value.length > 0)\n\n    const entitiesByCode = new Map<string, ProfileEntity>()\n    const addEntity = (region?: { name?: string; code?: string }): void => {\n        if (!region?.code || !region?.name) return\n        if (!entitiesByCode.has(region.code)) {\n            entitiesByCode.set(region.code, {\n                name: region.name,\n                code: region.code,\n            })\n        }\n    }\n\n    const continents = regions.filter(\n        (region) => region.regionType === \"continent\"\n    )\n\n    for (const scopeValue of scopeValues) {\n        // Add all countries\n        if (scopeValue === \"countries\" || scopeValue === \"all\") {\n            for (const country of countries) addEntity(country)\n        }\n        // Add all continents\n        if (scopeValue === \"continents\" || scopeValue === \"all\") {\n            for (const region of continents) addEntity(region)\n        }\n        // Add specific entity by name or code\n        if (\n            scopeValue !== \"countries\" &&\n            scopeValue !== \"continents\" &&\n            scopeValue !== \"all\"\n        ) {\n            addEntity(getRegionByNameOrVariantName(scopeValue))\n        }\n    }\n\n    // Remove excluded entities\n    if (excludeRaw) {\n        const excludeValues = excludeRaw\n            .split(\",\")\n            .map((value) => value.trim().toLowerCase())\n            .filter((value) => value.length > 0)\n\n        for (const excludeValue of excludeValues) {\n            const region = getRegionByNameOrVariantName(excludeValue)\n            if (region?.code) entitiesByCode.delete(region.code)\n        }\n    }\n\n    return Array.from(entitiesByCode.values()).sort((a, b) =>\n        a.name.localeCompare(b.name)\n    )\n}\n\n/**\n * Conditional Section Parsing & Validation\n */\n\n/**\n * This is the second pass to parse conditional sections after instantiation.\n * It determines whether or not the profile is instantiated for an entity that\n * matches the include/exclude criteria, and removes the content if not.\n */\nfunction parseInstantiatedConditionalSection(\n    block: EnrichedBlockConditionalSection,\n    entity: string\n): void {\n    const shouldRender = checkShouldConditionalSectionRender({\n        entity,\n        include: block.include,\n        exclude: block.exclude,\n    })\n    if (!shouldRender) {\n        block.content = []\n        return\n    }\n}\n\nfunction resolveRegionList(names: string[]): {\n    resolved: { region: Region; raw: string }[]\n    errors: ParseError[]\n} {\n    const errors: ParseError[] = []\n    const resolved: { region: Region; raw: string }[] = []\n\n    for (const name of names) {\n        const region = getRegionByName(name)\n        if (!region) {\n            errors.push({ message: `Unknown region: ${name}` })\n        } else {\n            resolved.push({ region, raw: name })\n        }\n    }\n    return { resolved, errors }\n}\n\nconst validationRules = {\n    ensureHasEntries: function (\n        includeCount: number,\n        excludeCount: number\n    ): ParseError[] {\n        if (includeCount === 0 && excludeCount === 0) {\n            return [\n                {\n                    message:\n                        \"Conditional section must specify at least one include or exclude entry\",\n                },\n            ]\n        }\n        return []\n    },\n    ensureNoOverlap: function (\n        includeRegions: { region: Region; raw: string }[],\n        excludeRegions: { region: Region; raw: string }[]\n    ): { errors: ParseError[]; overlapNames: string[] } {\n        const includeCodes = new Map(\n            includeRegions.map(({ region }) => [region.code, region.name])\n        )\n\n        const overlapNames = excludeRegions\n            .map(({ region }) => includeCodes.get(region.code))\n            .filter((name): name is string => !!name)\n\n        if (overlapNames.length === 0) return { errors: [], overlapNames }\n\n        return {\n            overlapNames,\n            errors: [\n                {\n                    message: `Entities cannot be in both include and exclude lists: ${[\n                        ...new Set(overlapNames),\n                    ].join(\", \")}`,\n                },\n            ],\n        }\n    },\n    ensureIncludeListsAreRegionsWhenExcluding: function (\n        includeContainsCountry: boolean,\n        hasOverlap: boolean\n    ): ParseError[] {\n        if (!includeContainsCountry || hasOverlap) return []\n        return [\n            {\n                message:\n                    \"Include list must contain regions (not individual countries) when excludes are specified\",\n            },\n        ]\n    },\n    ensureExcludesAreCovered: function (\n        includeRegions: { region: Region; raw: string }[],\n        excludeRegions: { region: Region; raw: string }[],\n        includeContainsCountry: boolean,\n        hasOverlap: boolean\n    ): ParseError[] {\n        if (includeContainsCountry || hasOverlap) return []\n\n        const errors: ParseError[] = []\n        for (const { region: excludedRegion } of excludeRegions) {\n            const includedByAny = includeRegions.some(({ region }) => {\n                if (region.code === excludedRegion.code) return true\n                if (!checkHasMembers(region)) return false\n                return region.members.includes(excludedRegion.code)\n            })\n            if (!includedByAny) {\n                errors.push({\n                    message: `${excludedRegion.name} is not covered by the include list`,\n                })\n            }\n        }\n        return errors\n    },\n}\n\n/**\n * Validate that the include/exclude lists in a conditional section make sense.\n * e.g. include: \"Europe\", exclude: \"France\" is valid\n * e.g. include: \"South America\", exclude: \"Germany\" is invalid\n * See validationRules for more details.\n */\nexport function validateConditionalSectionLists(\n    include: string[],\n    exclude: string[]\n): ParseError[] {\n    const allErrors: ParseError[] = []\n    const entryRuleErrors = validationRules.ensureHasEntries(\n        include.length,\n        exclude.length\n    )\n    if (entryRuleErrors.length) {\n        return entryRuleErrors\n    }\n\n    const [\n        { resolved: includeRegions, errors: includeErrors },\n        { resolved: excludeRegions, errors: excludeErrors },\n    ] = [include, exclude].map(resolveRegionList)\n    allErrors.push(...includeErrors, ...excludeErrors)\n\n    // If only one list has entries, we can skip interaction checks\n    if (includeRegions.length === 0 || excludeRegions.length === 0) {\n        return allErrors\n    }\n\n    const { errors: overlapErrors, overlapNames } =\n        validationRules.ensureNoOverlap(includeRegions, excludeRegions)\n\n    const hasOverlap = overlapNames.length > 0\n    const includeContainsCountry = includeRegions.some(({ region }) =>\n        checkIsCountry(region)\n    )\n\n    const includeErrorsRule =\n        validationRules.ensureIncludeListsAreRegionsWhenExcluding(\n            includeContainsCountry,\n            hasOverlap\n        )\n\n    const coverageErrors = validationRules.ensureExcludesAreCovered(\n        includeRegions,\n        excludeRegions,\n        includeContainsCountry,\n        hasOverlap\n    )\n\n    allErrors.push(...overlapErrors, ...includeErrorsRule, ...coverageErrors)\n\n    return allErrors\n}\n\nfunction calculateRenderLogic(\n    entityRegion: Region,\n    includeRegions: { region: Region; raw: string }[],\n    excludeRegions: { region: Region; raw: string }[]\n): boolean {\n    // Helper to check if entity is in a given region (or is the region)\n    const matchesCondition = (condition: Region): boolean => {\n        if (condition.code === entityRegion.code) return true\n        if (checkHasMembers(condition)) {\n            return condition.members.includes(entityRegion.code)\n        }\n        return false\n    }\n\n    const isExcluded = excludeRegions.some(({ region }) =>\n        matchesCondition(region)\n    )\n\n    // An empty include list means \"include all\"\n    const isIncluded =\n        includeRegions.length === 0 ||\n        includeRegions.some(({ region }) => matchesCondition(region))\n\n    return !isExcluded && isIncluded\n}\n\nexport function checkShouldConditionalSectionRender({\n    entity,\n    include,\n    exclude,\n}: {\n    entity: string\n    include: string[]\n    exclude: string[]\n}): boolean {\n    const entityRegion = getRegionByName(entity)\n    if (!entityRegion) return false\n\n    const { resolved: includeRegions } = resolveRegionList(include)\n    const { resolved: excludeRegions } = resolveRegionList(exclude)\n\n    return calculateRenderLogic(entityRegion, includeRegions, excludeRegions)\n}\n\n/**\n * Data callout utils\n */\n\n// Remove all grapher query params from a URL string\n// What remains is the base URL without any grapher-specific query params\n// e.g. only indicator-specifying query params remain\nexport function stripGrapherQueryParams(url: string): string {\n    const urlObj = Url.fromURL(url)\n    const emptyParams = Object.fromEntries(\n        GRAPHER_QUERY_PARAM_KEYS.map((key) => [key, undefined])\n    )\n    const strippedUrl = urlObj.updateQueryParams(emptyParams)\n    return strippedUrl.fullUrl\n}\n\n// \"/grapher/life-expectancy?time=2022\" and \"/grapher/life-expectancy?time=2020\"\n// both refer to the same grapher state, so they should have the same key\nexport function makeCalloutGrapherStateKey(fullUrl: string): string {\n    const key = stripGrapherQueryParams(fullUrl)\n    return key\n}\n\n// Generate a key for LinkedCallouts based on full URL (including country param)\nexport function makeLinkedCalloutKey(fullUrl: string): string {\n    const url = Url.fromURL(fullUrl)\n    const key = url.pathname + url.queryStr\n    return key\n}\n\n/**\n * Check if a data-callout block has all required values available.\n * Returns true if all span-callout spans in the block have values in linkedCallouts.\n */\nexport function checkShouldDataCalloutRender(\n    block: EnrichedBlockDataCallout,\n    linkedCallouts: LinkedCallouts\n): boolean {\n    const key = makeLinkedCalloutKey(block.url)\n    const linkedCallout = linkedCallouts[key]\n\n    // If no callout data is available, we can't render\n    if (!linkedCallout?.values) return false\n\n    // Collect all span-callout spans from the content\n    const calloutSpans: SpanCallout[] = []\n    for (const contentBlock of block.content) {\n        traverseEnrichedBlock(contentBlock, _.noop, (span) => {\n            if (span.spanType === \"span-callout\") {\n                calloutSpans.push(span)\n            }\n        })\n    }\n\n    // Check if all callout values are available\n    const values = linkedCallout.values\n    for (const calloutSpan of calloutSpans) {\n        const value = getCalloutValue(\n            values,\n            calloutSpan.functionName,\n            calloutSpan.parameters\n        )\n        if (value === undefined) {\n            return false\n        }\n    }\n\n    return true\n}\n\n/**\n * Find the y-dimension data point matching the given shortName.\n * If shortName is omitted and there is exactly one y data point,\n * it is returned automatically — so single-indicator charts don't\n * require the column name in the callout syntax.\n */\nfunction findYDataPoint(\n    values: GrapherValuesJson,\n    shortName: string | undefined\n): GrapherValuesJsonDataPoint | undefined {\n    if (shortName) {\n        const columnSlug = values.columns\n            ? Object.entries(values.columns).find(\n                  ([_, col]) => col.shortName === shortName\n              )?.[0]\n            : undefined\n        if (!columnSlug) return undefined\n\n        return values.endValues?.y?.find(\n            (dp) => dp.columnSlug === String(columnSlug)\n        )\n    }\n\n    // No shortName provided: use the single y data point if unambiguous\n    const yValues = values.endValues?.y\n    if (yValues?.length === 1) return yValues[0]\n\n    return undefined\n}\n\n/**\n * Look up a value from GrapherValuesJson based on the callout function name.\n * Returns the formatted value or undefined if not found.\n */\nexport function getCalloutValue(\n    values: GrapherValuesJson,\n    functionName: CalloutFunction,\n    parameters: string[]\n): string | undefined {\n    return match(functionName)\n        .with(\"latestValue\", () => {\n            return findYDataPoint(values, parameters[0])?.formattedValue\n        })\n        .with(\"latestValueWithUnit\", () => {\n            return findYDataPoint(values, parameters[0])?.formattedValueShort\n        })\n        .with(\"latestTime\", () => {\n            return findYDataPoint(values, parameters[0])?.formattedTime\n        })\n        .exhaustive()\n}\n","import { match } from \"ts-pattern\"\n\nexport enum FontFamily {\n    Lato = \"Lato\",\n    PlayfairDisplay = \"PlayfairDisplay\",\n}\n\n/** Maps a FontFamily enum value to a CSS font stack */\nexport function cssFontFamily(fontFamily: FontFamily): string {\n    return match(fontFamily)\n        .with(\n            FontFamily.Lato,\n            () =>\n                \"Lato, 'Helvetica Neue', Helvetica, Arial, 'Liberation Sans', sans-serif\"\n        )\n        .with(\n            FontFamily.PlayfairDisplay,\n            () =>\n                \"'Playfair Display', Georgia, 'Times New Roman', 'Liberation Serif', serif\"\n        )\n        .exhaustive()\n}\n","import { FontFamily } from \"./fonts.js\"\n\n/**\n * This file contains hardcoded character widths for our two main fonts (Lato and\n * Playfair Display). It can be used to roughly estimate the width of a string in\n * pixels without needing a browser or canvas.\n *\n * To re-measure these metrics, open devTools/fonts/generate-widths.html in a browser.\n * It uses @chenglou/pretext to measure each character at 100px and outputs the\n * widthsMap code ready to paste here.\n */\n\n// We have pixel width data for all ASCII characters, plus the following:\n// ₀₁₂₃₄₅₆₇₈₉⁰¹²³⁴⁵⁶⁷⁸⁹\n// ‑–—…‘’“”°→≤≥£ºµ‰\n\n// Variant indices: 0=regular, 1=bold, 2=italic, 3=bold+italic\n// Pre-flattened maps: widthsMap[font][variant][char] -> width in pixels\nconst widthsMap: Record<FontFamily, Record<string, number>[]> = {\n    [FontFamily.Lato]: [\n        // regular\n        {\n            \" \": 26,\n            \"!\": 27,\n            '\"': 37,\n            \"#\": 58,\n            $: 58,\n            \"%\": 80,\n            \"&\": 71,\n            \"'\": 20,\n            \"(\": 27,\n            \")\": 27,\n            \"*\": 43,\n            \"+\": 58,\n            \",\": 23,\n            \"-\": 37,\n            \".\": 24,\n            \"/\": 45,\n            \"0\": 58,\n            \"1\": 58,\n            \"2\": 58,\n            \"3\": 58,\n            \"4\": 58,\n            \"5\": 58,\n            \"6\": 58,\n            \"7\": 58,\n            \"8\": 58,\n            \"9\": 58,\n            \":\": 25,\n            \";\": 26,\n            \"<\": 58,\n            \"=\": 58,\n            \">\": 58,\n            \"?\": 45,\n            \"@\": 84,\n            A: 68,\n            B: 65,\n            C: 67,\n            D: 76,\n            E: 58,\n            F: 57,\n            G: 73,\n            H: 76,\n            I: 28,\n            J: 42,\n            K: 66,\n            L: 51,\n            M: 93,\n            N: 76,\n            O: 80,\n            P: 60,\n            Q: 80,\n            R: 63,\n            S: 54,\n            T: 59,\n            U: 74,\n            V: 68,\n            W: 104,\n            X: 65,\n            Y: 62,\n            Z: 60,\n            \"[\": 31,\n            \"\\\\\": 45,\n            \"]\": 31,\n            \"^\": 58,\n            _: 46,\n            \"`\": 40,\n            a: 50,\n            b: 56,\n            c: 48,\n            d: 56,\n            e: 53,\n            f: 35,\n            g: 52,\n            h: 56,\n            i: 24,\n            j: 24,\n            k: 51,\n            l: 24,\n            m: 82,\n            n: 56,\n            o: 57,\n            p: 56,\n            q: 56,\n            r: 36,\n            s: 43,\n            t: 36,\n            u: 56,\n            v: 52,\n            w: 79,\n            x: 50,\n            y: 52,\n            z: 45,\n            \"{\": 30,\n            \"|\": 25,\n            \"}\": 30,\n            \"~\": 58,\n            \"£\": 58,\n            \"°\": 41,\n            \"²\": 33,\n            \"³\": 33,\n            µ: 65,\n            \"¹\": 33,\n            º: 40,\n            \"‑\": 37,\n            \"–\": 58,\n            \"—\": 79,\n            \"‘\": 21,\n            \"’\": 21,\n            \"“\": 37,\n            \"”\": 37,\n            \"…\": 75,\n            \"‰\": 116,\n            \"⁰\": 33,\n            \"⁴\": 33,\n            \"⁵\": 33,\n            \"⁶\": 33,\n            \"⁷\": 33,\n            \"⁸\": 33,\n            \"⁹\": 33,\n            \"₀\": 33,\n            \"₁\": 33,\n            \"₂\": 33,\n            \"₃\": 33,\n            \"₄\": 33,\n            \"₅\": 33,\n            \"₆\": 33,\n            \"₇\": 33,\n            \"₈\": 33,\n            \"₉\": 33,\n            \"→\": 100,\n            \"≤\": 58,\n            \"≥\": 58,\n        },\n        // bold\n        {\n            \" \": 24,\n            \"!\": 28,\n            '\"': 40,\n            \"#\": 58,\n            $: 58,\n            \"%\": 82,\n            \"&\": 72,\n            \"'\": 21,\n            \"(\": 27,\n            \")\": 27,\n            \"*\": 43,\n            \"+\": 58,\n            \",\": 23,\n            \"-\": 37,\n            \".\": 24,\n            \"/\": 47,\n            \"0\": 58,\n            \"1\": 58,\n            \"2\": 58,\n            \"3\": 58,\n            \"4\": 58,\n            \"5\": 58,\n            \"6\": 58,\n            \"7\": 58,\n            \"8\": 58,\n            \"9\": 58,\n            \":\": 26,\n            \";\": 27,\n            \"<\": 58,\n            \"=\": 58,\n            \">\": 58,\n            \"?\": 46,\n            \"@\": 84,\n            A: 69,\n            B: 66,\n            C: 66,\n            D: 76,\n            E: 58,\n            F: 57,\n            G: 73,\n            H: 77,\n            I: 30,\n            J: 43,\n            K: 69,\n            L: 52,\n            M: 95,\n            N: 77,\n            O: 81,\n            P: 62,\n            Q: 81,\n            R: 64,\n            S: 55,\n            T: 60,\n            U: 74,\n            V: 69,\n            W: 105,\n            X: 67,\n            Y: 65,\n            Z: 61,\n            \"[\": 31,\n            \"\\\\\": 47,\n            \"]\": 31,\n            \"^\": 58,\n            _: 47,\n            \"`\": 40,\n            a: 51,\n            b: 57,\n            c: 48,\n            d: 57,\n            e: 53,\n            f: 36,\n            g: 53,\n            h: 56,\n            i: 25,\n            j: 25,\n            k: 53,\n            l: 25,\n            m: 84,\n            n: 56,\n            o: 57,\n            p: 57,\n            q: 57,\n            r: 37,\n            s: 44,\n            t: 37,\n            u: 56,\n            v: 53,\n            w: 80,\n            x: 52,\n            y: 53,\n            z: 46,\n            \"{\": 31,\n            \"|\": 26,\n            \"}\": 31,\n            \"~\": 58,\n            \"£\": 58,\n            \"°\": 42,\n            \"²\": 33,\n            \"³\": 33,\n            µ: 66,\n            \"¹\": 33,\n            º: 40,\n            \"‑\": 37,\n            \"–\": 58,\n            \"—\": 80,\n            \"‘\": 22,\n            \"’\": 22,\n            \"“\": 39,\n            \"”\": 39,\n            \"…\": 77,\n            \"‰\": 119,\n            \"⁰\": 33,\n            \"⁴\": 33,\n            \"⁵\": 33,\n            \"⁶\": 33,\n            \"⁷\": 33,\n            \"⁸\": 33,\n            \"⁹\": 33,\n            \"₀\": 33,\n            \"₁\": 33,\n            \"₂\": 33,\n            \"₃\": 33,\n            \"₄\": 33,\n            \"₅\": 33,\n            \"₆\": 33,\n            \"₇\": 33,\n            \"₈\": 33,\n            \"₉\": 33,\n            \"→\": 100,\n            \"≤\": 58,\n            \"≥\": 58,\n        },\n        // italic\n        {\n            \" \": 23,\n            \"!\": 25,\n            '\"': 35,\n            \"#\": 58,\n            $: 58,\n            \"%\": 74,\n            \"&\": 66,\n            \"'\": 19,\n            \"(\": 26,\n            \")\": 26,\n            \"*\": 40,\n            \"+\": 58,\n            \",\": 22,\n            \"-\": 35,\n            \".\": 23,\n            \"/\": 42,\n            \"0\": 58,\n            \"1\": 58,\n            \"2\": 58,\n            \"3\": 58,\n            \"4\": 58,\n            \"5\": 58,\n            \"6\": 53,\n            \"7\": 58,\n            \"8\": 58,\n            \"9\": 58,\n            \":\": 25,\n            \";\": 26,\n            \"<\": 58,\n            \"=\": 58,\n            \">\": 58,\n            \"?\": 42,\n            \"@\": 77,\n            A: 63,\n            B: 60,\n            C: 62,\n            D: 71,\n            E: 54,\n            F: 53,\n            G: 68,\n            H: 71,\n            I: 27,\n            J: 40,\n            K: 62,\n            L: 48,\n            M: 86,\n            N: 71,\n            O: 75,\n            P: 56,\n            Q: 75,\n            R: 58,\n            S: 51,\n            T: 55,\n            U: 69,\n            V: 63,\n            W: 96,\n            X: 61,\n            Y: 58,\n            Z: 56,\n            \"[\": 29,\n            \"\\\\\": 41,\n            \"]\": 29,\n            \"^\": 58,\n            _: 44,\n            \"`\": 37,\n            a: 51,\n            b: 53,\n            c: 45,\n            d: 53,\n            e: 48,\n            f: 32,\n            g: 48,\n            h: 53,\n            i: 23,\n            j: 23,\n            k: 47,\n            l: 23,\n            m: 79,\n            n: 53,\n            o: 52,\n            p: 53,\n            q: 51,\n            r: 34,\n            s: 40,\n            t: 35,\n            u: 53,\n            v: 48,\n            w: 72,\n            x: 46,\n            y: 48,\n            z: 42,\n            \"{\": 28,\n            \"|\": 26,\n            \"}\": 28,\n            \"~\": 58,\n            \"£\": 58,\n            \"°\": 41,\n            \"²\": 33,\n            \"³\": 33,\n            µ: 61,\n            \"¹\": 33,\n            º: 38,\n            \"‑\": 35,\n            \"–\": 58,\n            \"—\": 74,\n            \"‘\": 20,\n            \"’\": 21,\n            \"“\": 34,\n            \"”\": 35,\n            \"…\": 75,\n            \"‰\": 108,\n            \"⁰\": 33,\n            \"⁴\": 33,\n            \"⁵\": 33,\n            \"⁶\": 33,\n            \"⁷\": 33,\n            \"⁸\": 33,\n            \"⁹\": 33,\n            \"₀\": 33,\n            \"₁\": 33,\n            \"₂\": 33,\n            \"₃\": 33,\n            \"₄\": 33,\n            \"₅\": 33,\n            \"₆\": 33,\n            \"₇\": 33,\n            \"₈\": 33,\n            \"₉\": 33,\n            \"→\": 100,\n            \"≤\": 58,\n            \"≥\": 58,\n        },\n        // bold+italic\n        {\n            \" \": 22,\n            \"!\": 27,\n            '\"': 37,\n            \"#\": 58,\n            $: 58,\n            \"%\": 76,\n            \"&\": 67,\n            \"'\": 20,\n            \"(\": 27,\n            \")\": 27,\n            \"*\": 40,\n            \"+\": 58,\n            \",\": 24,\n            \"-\": 35,\n            \".\": 24,\n            \"/\": 43,\n            \"0\": 58,\n            \"1\": 58,\n            \"2\": 58,\n            \"3\": 58,\n            \"4\": 58,\n            \"5\": 58,\n            \"6\": 53,\n            \"7\": 58,\n            \"8\": 58,\n            \"9\": 58,\n            \":\": 26,\n            \";\": 27,\n            \"<\": 58,\n            \"=\": 58,\n            \">\": 58,\n            \"?\": 43,\n            \"@\": 77,\n            A: 65,\n            B: 61,\n            C: 62,\n            D: 71,\n            E: 54,\n            F: 53,\n            G: 68,\n            H: 72,\n            I: 28,\n            J: 41,\n            K: 64,\n            L: 48,\n            M: 88,\n            N: 72,\n            O: 75,\n            P: 58,\n            Q: 75,\n            R: 60,\n            S: 52,\n            T: 56,\n            U: 69,\n            V: 65,\n            W: 97,\n            X: 63,\n            Y: 61,\n            Z: 56,\n            \"[\": 30,\n            \"\\\\\": 43,\n            \"]\": 30,\n            \"^\": 58,\n            _: 44,\n            \"`\": 37,\n            a: 52,\n            b: 54,\n            c: 45,\n            d: 54,\n            e: 49,\n            f: 33,\n            g: 50,\n            h: 54,\n            i: 25,\n            j: 24,\n            k: 50,\n            l: 24,\n            m: 79,\n            n: 54,\n            o: 52,\n            p: 54,\n            q: 52,\n            r: 35,\n            s: 41,\n            t: 37,\n            u: 54,\n            v: 49,\n            w: 74,\n            x: 49,\n            y: 49,\n            z: 43,\n            \"{\": 29,\n            \"|\": 27,\n            \"}\": 29,\n            \"~\": 58,\n            \"£\": 58,\n            \"°\": 41,\n            \"²\": 33,\n            \"³\": 33,\n            µ: 62,\n            \"¹\": 33,\n            º: 37,\n            \"‑\": 35,\n            \"–\": 58,\n            \"—\": 74,\n            \"‘\": 21,\n            \"’\": 21,\n            \"“\": 36,\n            \"”\": 36,\n            \"…\": 77,\n            \"‰\": 110,\n            \"⁰\": 33,\n            \"⁴\": 33,\n            \"⁵\": 33,\n            \"⁶\": 33,\n            \"⁷\": 33,\n            \"⁸\": 33,\n            \"⁹\": 33,\n            \"₀\": 33,\n            \"₁\": 33,\n            \"₂\": 33,\n            \"₃\": 33,\n            \"₄\": 33,\n            \"₅\": 33,\n            \"₆\": 33,\n            \"₇\": 33,\n            \"₈\": 33,\n            \"₉\": 33,\n            \"→\": 100,\n            \"≤\": 58,\n            \"≥\": 58,\n        },\n    ],\n    [FontFamily.PlayfairDisplay]: [\n        // regular\n        {\n            \" \": 25,\n            \"!\": 26,\n            '\"': 30,\n            \"#\": 64,\n            $: 52,\n            \"%\": 74,\n            \"&\": 84,\n            \"'\": 19,\n            \"(\": 29,\n            \")\": 29,\n            \"*\": 49,\n            \"+\": 59,\n            \",\": 26,\n            \"-\": 50,\n            \".\": 25,\n            \"/\": 37,\n            \"0\": 60,\n            \"1\": 37,\n            \"2\": 48,\n            \"3\": 45,\n            \"4\": 49,\n            \"5\": 42,\n            \"6\": 52,\n            \"7\": 41,\n            \"8\": 52,\n            \"9\": 51,\n            \":\": 27,\n            \";\": 29,\n            \"<\": 61,\n            \"=\": 65,\n            \">\": 61,\n            \"?\": 46,\n            \"@\": 88,\n            A: 63,\n            B: 62,\n            C: 69,\n            D: 72,\n            E: 61,\n            F: 57,\n            G: 70,\n            H: 76,\n            I: 34,\n            J: 33,\n            K: 66,\n            L: 59,\n            M: 87,\n            N: 71,\n            O: 74,\n            P: 59,\n            Q: 74,\n            R: 65,\n            S: 54,\n            T: 62,\n            U: 68,\n            V: 63,\n            W: 91,\n            X: 63,\n            Y: 59,\n            Z: 59,\n            \"[\": 30,\n            \"\\\\\": 37,\n            \"]\": 30,\n            \"^\": 54,\n            _: 59,\n            \"`\": 28,\n            a: 50,\n            b: 56,\n            c: 49,\n            d: 58,\n            e: 51,\n            f: 33,\n            g: 53,\n            h: 59,\n            i: 29,\n            j: 27,\n            k: 55,\n            l: 29,\n            m: 89,\n            n: 60,\n            o: 55,\n            p: 58,\n            q: 56,\n            r: 45,\n            s: 45,\n            t: 35,\n            u: 58,\n            v: 49,\n            w: 77,\n            x: 52,\n            y: 50,\n            z: 48,\n            \"{\": 30,\n            \"|\": 22,\n            \"}\": 30,\n            \"~\": 65,\n            \"£\": 60,\n            \"°\": 33,\n            \"²\": 34,\n            \"³\": 32,\n            µ: 58,\n            \"¹\": 26,\n            º: 45,\n            \"‑\": 50,\n            \"–\": 57,\n            \"—\": 86,\n            \"‘\": 25,\n            \"’\": 25,\n            \"“\": 42,\n            \"”\": 42,\n            \"…\": 81,\n            \"‰\": 109,\n            \"⁰\": 45,\n            \"⁴\": 36,\n            \"⁵\": 32,\n            \"⁶\": 38,\n            \"⁷\": 31,\n            \"⁸\": 37,\n            \"⁹\": 39,\n            \"₀\": 45,\n            \"₁\": 26,\n            \"₂\": 34,\n            \"₃\": 32,\n            \"₄\": 36,\n            \"₅\": 32,\n            \"₆\": 38,\n            \"₇\": 31,\n            \"₈\": 37,\n            \"₉\": 38,\n            \"→\": 68,\n            \"≤\": 64,\n            \"≥\": 64,\n        },\n        // bold\n        {\n            \" \": 23,\n            \"!\": 29,\n            '\"': 37,\n            \"#\": 62,\n            $: 57,\n            \"%\": 73,\n            \"&\": 90,\n            \"'\": 21,\n            \"(\": 32,\n            \")\": 32,\n            \"*\": 48,\n            \"+\": 57,\n            \",\": 27,\n            \"-\": 48,\n            \".\": 27,\n            \"/\": 37,\n            \"0\": 65,\n            \"1\": 38,\n            \"2\": 52,\n            \"3\": 49,\n            \"4\": 53,\n            \"5\": 46,\n            \"6\": 56,\n            \"7\": 46,\n            \"8\": 56,\n            \"9\": 55,\n            \":\": 29,\n            \";\": 30,\n            \"<\": 60,\n            \"=\": 64,\n            \">\": 60,\n            \"?\": 51,\n            \"@\": 88,\n            A: 67,\n            B: 67,\n            C: 71,\n            D: 78,\n            E: 63,\n            F: 59,\n            G: 74,\n            H: 80,\n            I: 38,\n            J: 36,\n            K: 71,\n            L: 61,\n            M: 93,\n            N: 72,\n            O: 79,\n            P: 64,\n            Q: 79,\n            R: 69,\n            S: 58,\n            T: 67,\n            U: 69,\n            V: 67,\n            W: 97,\n            X: 69,\n            Y: 62,\n            Z: 60,\n            \"[\": 32,\n            \"\\\\\": 37,\n            \"]\": 32,\n            \"^\": 53,\n            _: 59,\n            \"`\": 30,\n            a: 52,\n            b: 59,\n            c: 50,\n            d: 60,\n            e: 50,\n            f: 35,\n            g: 55,\n            h: 61,\n            i: 32,\n            j: 30,\n            k: 59,\n            l: 31,\n            m: 91,\n            n: 61,\n            o: 57,\n            p: 60,\n            q: 59,\n            r: 47,\n            s: 46,\n            t: 35,\n            u: 61,\n            v: 51,\n            w: 79,\n            x: 54,\n            y: 52,\n            z: 47,\n            \"{\": 33,\n            \"|\": 25,\n            \"}\": 33,\n            \"~\": 67,\n            \"£\": 66,\n            \"°\": 31,\n            \"²\": 35,\n            \"³\": 33,\n            µ: 58,\n            \"¹\": 28,\n            º: 47,\n            \"‑\": 48,\n            \"–\": 60,\n            \"—\": 90,\n            \"‘\": 26,\n            \"’\": 25,\n            \"“\": 46,\n            \"”\": 46,\n            \"…\": 83,\n            \"‰\": 112,\n            \"⁰\": 45,\n            \"⁴\": 37,\n            \"⁵\": 32,\n            \"⁶\": 39,\n            \"⁷\": 32,\n            \"⁸\": 38,\n            \"⁹\": 39,\n            \"₀\": 45,\n            \"₁\": 28,\n            \"₂\": 35,\n            \"₃\": 33,\n            \"₄\": 37,\n            \"₅\": 32,\n            \"₆\": 39,\n            \"₇\": 32,\n            \"₈\": 38,\n            \"₉\": 39,\n            \"→\": 68,\n            \"≤\": 62,\n            \"≥\": 62,\n        },\n        // italic\n        {\n            \" \": 25,\n            \"!\": 26,\n            '\"': 30,\n            \"#\": 64,\n            $: 55,\n            \"%\": 77,\n            \"&\": 82,\n            \"'\": 19,\n            \"(\": 36,\n            \")\": 36,\n            \"*\": 50,\n            \"+\": 59,\n            \",\": 25,\n            \"-\": 50,\n            \".\": 24,\n            \"/\": 47,\n            \"0\": 57,\n            \"1\": 34,\n            \"2\": 50,\n            \"3\": 49,\n            \"4\": 52,\n            \"5\": 46,\n            \"6\": 53,\n            \"7\": 49,\n            \"8\": 54,\n            \"9\": 51,\n            \":\": 28,\n            \";\": 29,\n            \"<\": 60,\n            \"=\": 66,\n            \">\": 60,\n            \"?\": 44,\n            \"@\": 85,\n            A: 63,\n            B: 63,\n            C: 67,\n            D: 73,\n            E: 61,\n            F: 57,\n            G: 71,\n            H: 76,\n            I: 34,\n            J: 64,\n            K: 68,\n            L: 59,\n            M: 87,\n            N: 77,\n            O: 73,\n            P: 59,\n            Q: 78,\n            R: 66,\n            S: 55,\n            T: 66,\n            U: 68,\n            V: 63,\n            W: 90,\n            X: 70,\n            Y: 67,\n            Z: 65,\n            \"[\": 30,\n            \"\\\\\": 49,\n            \"]\": 30,\n            \"^\": 54,\n            _: 74,\n            \"`\": 32,\n            a: 52,\n            b: 50,\n            c: 43,\n            d: 54,\n            e: 43,\n            f: 32,\n            g: 45,\n            h: 54,\n            i: 30,\n            j: 28,\n            k: 52,\n            l: 28,\n            m: 81,\n            n: 58,\n            o: 49,\n            p: 55,\n            q: 51,\n            r: 43,\n            s: 38,\n            t: 34,\n            u: 57,\n            v: 53,\n            w: 69,\n            x: 53,\n            y: 48,\n            z: 45,\n            \"{\": 31,\n            \"|\": 32,\n            \"}\": 31,\n            \"~\": 65,\n            \"£\": 62,\n            \"°\": 34,\n            \"²\": 34,\n            \"³\": 33,\n            µ: 58,\n            \"¹\": 25,\n            º: 41,\n            \"‑\": 50,\n            \"–\": 73,\n            \"—\": 100,\n            \"‘\": 24,\n            \"’\": 24,\n            \"“\": 40,\n            \"”\": 40,\n            \"…\": 81,\n            \"‰\": 113,\n            \"⁰\": 40,\n            \"⁴\": 34,\n            \"⁵\": 31,\n            \"⁶\": 34,\n            \"⁷\": 32,\n            \"⁸\": 35,\n            \"⁹\": 34,\n            \"₀\": 41,\n            \"₁\": 25,\n            \"₂\": 34,\n            \"₃\": 33,\n            \"₄\": 34,\n            \"₅\": 31,\n            \"₆\": 36,\n            \"₇\": 32,\n            \"₈\": 35,\n            \"₉\": 36,\n            \"→\": 68,\n            \"≤\": 65,\n            \"≥\": 64,\n        },\n        // bold+italic\n        {\n            \" \": 26,\n            \"!\": 31,\n            '\"': 39,\n            \"#\": 63,\n            $: 61,\n            \"%\": 80,\n            \"&\": 86,\n            \"'\": 23,\n            \"(\": 40,\n            \")\": 40,\n            \"*\": 48,\n            \"+\": 58,\n            \",\": 29,\n            \"-\": 51,\n            \".\": 28,\n            \"/\": 46,\n            \"0\": 62,\n            \"1\": 37,\n            \"2\": 54,\n            \"3\": 52,\n            \"4\": 54,\n            \"5\": 47,\n            \"6\": 57,\n            \"7\": 50,\n            \"8\": 58,\n            \"9\": 55,\n            \":\": 31,\n            \";\": 32,\n            \"<\": 59,\n            \"=\": 65,\n            \">\": 60,\n            \"?\": 49,\n            \"@\": 86,\n            A: 65,\n            B: 68,\n            C: 69,\n            D: 77,\n            E: 63,\n            F: 59,\n            G: 74,\n            H: 81,\n            I: 39,\n            J: 68,\n            K: 74,\n            L: 61,\n            M: 92,\n            N: 83,\n            O: 78,\n            P: 64,\n            Q: 83,\n            R: 71,\n            S: 59,\n            T: 68,\n            U: 69,\n            V: 66,\n            W: 98,\n            X: 74,\n            Y: 73,\n            Z: 66,\n            \"[\": 36,\n            \"\\\\\": 49,\n            \"]\": 36,\n            \"^\": 53,\n            _: 74,\n            \"`\": 32,\n            a: 56,\n            b: 55,\n            c: 46,\n            d: 58,\n            e: 47,\n            f: 34,\n            g: 47,\n            h: 57,\n            i: 32,\n            j: 30,\n            k: 55,\n            l: 30,\n            m: 86,\n            n: 60,\n            o: 53,\n            p: 58,\n            q: 55,\n            r: 47,\n            s: 42,\n            t: 35,\n            u: 60,\n            v: 53,\n            w: 68,\n            x: 57,\n            y: 48,\n            z: 46,\n            \"{\": 36,\n            \"|\": 37,\n            \"}\": 36,\n            \"~\": 65,\n            \"£\": 67,\n            \"°\": 33,\n            \"²\": 36,\n            \"³\": 34,\n            µ: 58,\n            \"¹\": 27,\n            º: 49,\n            \"‑\": 51,\n            \"–\": 69,\n            \"—\": 98,\n            \"‘\": 27,\n            \"’\": 27,\n            \"“\": 47,\n            \"”\": 46,\n            \"…\": 84,\n            \"‰\": 119,\n            \"⁰\": 44,\n            \"⁴\": 36,\n            \"⁵\": 32,\n            \"⁶\": 37,\n            \"⁷\": 34,\n            \"⁸\": 39,\n            \"⁹\": 37,\n            \"₀\": 44,\n            \"₁\": 27,\n            \"₂\": 36,\n            \"₃\": 34,\n            \"₄\": 36,\n            \"₅\": 33,\n            \"₆\": 38,\n            \"₇\": 33,\n            \"₈\": 39,\n            \"₉\": 38,\n            \"→\": 68,\n            \"≤\": 63,\n            \"≥\": 62,\n        },\n    ],\n}\n\ninterface StringWidthSettings {\n    font?: FontFamily\n    size?: number\n    bold?: boolean\n    italic?: boolean\n}\n\nconst getPixelWidth = (\n    string: string,\n    settings: StringWidthSettings\n): number => {\n    const font = settings.font ?? FontFamily.Lato\n    const size = settings.size ?? 100\n    const variant = (settings.bold ? 1 : 0) + (settings.italic ? 2 : 0)\n\n    const fontVariants = widthsMap[font]\n    if (!fontVariants) {\n        throw new Error(\n            `This font is not supported. Supported fonts are: ${Object.values(FontFamily).join(\", \")}`\n        )\n    }\n\n    // Get the map for this font+variant combination\n    const charWidths = fontVariants[variant]\n    let totalWidth = 0\n\n    // Normalize to decompose accented characters (é -> e + combining accent ´)\n    // then skip combining marks (U+0300-U+036F) and control characters\n    const normalized = string.normalize(\"NFD\")\n    const len = normalized.length\n\n    for (let i = 0; i < len; i++) {\n        const code = normalized.charCodeAt(i)\n\n        // Skip control characters (0x00-0x1F) and combining diacritical marks (0x0300-0x036F)\n        if (code <= 0x1f || (code >= 0x0300 && code <= 0x036f)) {\n            continue\n        }\n\n        // if we don't have a width for the character, use the width of 'x' as a fallback\n        totalWidth += charWidths[normalized[i]] ?? charWidths[\"x\"]\n    }\n\n    return totalWidth * (size / 100)\n}\n\nexport { getPixelWidth }\n","import * as _ from \"lodash-es\"\nimport { PointVector } from \"./PointVector.js\"\nimport { getPixelWidth } from \"./stringWidth.js\"\nimport { FontFamily } from \"./fonts.js\"\nimport {\n    Box,\n    GridParameters,\n    Position,\n    PositionMap,\n} from \"@ourworldindata/types\"\n\n// Important utility class for all visualizations\n// Since we want to be able to render charts headlessly and functionally, we\n// can't rely on the DOM to do these calculations for us, and instead must\n// calculate using geometry and first principles\n\nexport type PadObject = PositionMap<number>\n\nexport interface GridBounds {\n    col: number\n    row: number\n    cellEdges: Set<Position>\n    bounds: Bounds\n}\n\nexport class Bounds {\n    static fromProps(props: Box): Bounds {\n        const { x, y, width, height } = props\n        return new Bounds(x, y, width, height)\n    }\n\n    static fromBBox(bbox: Box): Bounds {\n        return this.fromProps(bbox)\n    }\n\n    static fromRect(rect: DOMRect): Bounds {\n        return new Bounds(rect.left, rect.top, rect.width, rect.height)\n    }\n\n    static fromElement(el: HTMLElement): Bounds {\n        return Bounds.fromRect(el.getBoundingClientRect())\n    }\n\n    static fromCorners(p1: PointVector, p2: PointVector): Bounds {\n        const x1 = Math.min(p1.x, p2.x)\n        const x2 = Math.max(p1.x, p2.x)\n        const y1 = Math.min(p1.y, p2.y)\n        const y2 = Math.max(p1.y, p2.y)\n\n        return new Bounds(x1, y1, x2 - x1, y2 - y1)\n    }\n\n    // Merge a collection of bounding boxes into a single encompassing Bounds\n    static merge(boundsList: Bounds[]): Bounds {\n        let x1 = Infinity,\n            y1 = Infinity,\n            x2 = -Infinity,\n            y2 = -Infinity\n        for (const b of boundsList) {\n            x1 = Math.min(x1, b.x)\n            y1 = Math.min(y1, b.y)\n            x2 = Math.max(x2, b.x + b.width)\n            y2 = Math.max(y2, b.y + b.height)\n        }\n        return Bounds.fromCorners(\n            new PointVector(x1, y1),\n            new PointVector(x2, y2)\n        )\n    }\n\n    static empty(): Bounds {\n        return new Bounds(0, 0, 0, 0)\n    }\n\n    static forText(\n        str: string = \"\",\n        {\n            x = 0,\n            y = 0,\n            fontSize = 16,\n            fontWeight = 400,\n            fontFamily = FontFamily.Lato,\n            isItalic = false,\n        }: {\n            x?: number\n            y?: number\n            fontSize?: number\n            fontWeight?: number\n            fontFamily?: FontFamily\n            isItalic?: boolean\n        } = {}\n    ): Bounds {\n        // Collapse contiguous spaces into one\n        str = str.replace(/ +/g, \" \")\n\n        const isBold = fontWeight >= 600\n\n        const height = fontSize\n        let bounds = new Bounds(x, y - height, 0, height)\n        if (str) {\n            // pixelWidth uses a precomputed character width table to quickly give a\n            // rough estimate of string width based on characters in a string - it is probably not\n            // worth caching further\n            const width = getPixelWidth(str, {\n                font: fontFamily,\n                size: fontSize,\n                bold: isBold,\n                italic: isItalic,\n            })\n            bounds = bounds.set({ width })\n        }\n\n        return bounds\n    }\n\n    static forDot(x: number, y: number, radius: number): Bounds {\n        return new Bounds(x - radius, y - radius, radius * 2, radius * 2)\n    }\n\n    readonly x: number\n    readonly y: number\n    readonly width: number\n    readonly height: number\n\n    constructor(x: number, y: number, width: number, height: number) {\n        this.x = x\n        this.y = y\n        this.width = Math.max(width, 0)\n        this.height = Math.max(height, 0)\n    }\n\n    get left(): number {\n        return this.x\n    }\n    get top(): number {\n        return this.y\n    }\n    get right(): number {\n        return this.x + this.width\n    }\n    get bottom(): number {\n        return this.y + this.height\n    }\n    get centerX(): number {\n        return this.x + this.width / 2\n    }\n    get centerY(): number {\n        return this.y + this.height / 2\n    }\n    get centerPos(): PointVector {\n        return new PointVector(this.centerX, this.centerY)\n    }\n    get area(): number {\n        return this.width * this.height\n    }\n\n    get topLeft(): PointVector {\n        return new PointVector(this.left, this.top)\n    }\n    get topRight(): PointVector {\n        return new PointVector(this.right, this.top)\n    }\n    get bottomLeft(): PointVector {\n        return new PointVector(this.left, this.bottom)\n    }\n    get bottomRight(): PointVector {\n        return new PointVector(this.right, this.bottom)\n    }\n\n    padLeft(amount: number): Bounds {\n        return new Bounds(\n            this.x + amount,\n            this.y,\n            this.width - amount,\n            this.height\n        )\n    }\n\n    padRight(amount: number): Bounds {\n        return new Bounds(this.x, this.y, this.width - amount, this.height)\n    }\n\n    padBottom(amount: number): Bounds {\n        return new Bounds(this.x, this.y, this.width, this.height - amount)\n    }\n\n    padTop(amount: number): Bounds {\n        return new Bounds(\n            this.x,\n            this.y + amount,\n            this.width,\n            this.height - amount\n        )\n    }\n\n    padWidth(amount: number): Bounds {\n        return new Bounds(\n            this.x + amount,\n            this.y,\n            this.width - amount * 2,\n            this.height\n        )\n    }\n\n    padHeight(amount: number): Bounds {\n        return new Bounds(\n            this.x,\n            this.y + amount,\n            this.width,\n            this.height - amount * 2\n        )\n    }\n\n    fromLeft(amount: number): Bounds {\n        return this.padRight(this.width - amount)\n    }\n\n    fromBottom(amount: number): Bounds {\n        return this.padTop(this.height - amount)\n    }\n\n    pad(amount: number | PadObject): Bounds {\n        if (_.isNumber(amount)) {\n            return new Bounds(\n                this.x + amount,\n                this.y + amount,\n                this.width - amount * 2,\n                this.height - amount * 2\n            )\n        }\n        return this.padTop(amount.top ?? 0)\n            .padRight(amount.right ?? 0)\n            .padBottom(amount.bottom ?? 0)\n            .padLeft(amount.left ?? 0)\n    }\n\n    expand(amount: number | PadObject): Bounds {\n        if (_.isNumber(amount)) return this.pad(-amount)\n        return this.pad(\n            _.mapValues(amount, (v) => (v !== undefined ? -v : undefined))\n        )\n    }\n\n    set(props: {\n        x?: number\n        y?: number\n        width?: number\n        height?: number\n    }): Bounds {\n        return Bounds.fromProps({ ...this, ...props })\n    }\n\n    scale(scale: number): Bounds {\n        return new Bounds(\n            this.x * scale,\n            this.y * scale,\n            this.width * scale,\n            this.height * scale\n        )\n    }\n\n    intersects(otherBounds: Bounds): boolean {\n        const r2 = otherBounds\n        return !(\n            r2.left > this.right ||\n            r2.right < this.left ||\n            r2.top > this.bottom ||\n            r2.bottom < this.top\n        )\n    }\n\n    hasVerticalOverlap(otherBounds: Bounds): boolean {\n        const r2 = otherBounds\n        return !(r2.top > this.bottom || r2.bottom < this.top)\n    }\n\n    hasHorizontalOverlap(otherBounds: Bounds): boolean {\n        const r2 = otherBounds\n        return !(r2.left > this.right || r2.right < this.left)\n    }\n\n    lines(): PointVector[][] {\n        return [\n            [this.topLeft, this.topRight],\n            [this.topRight, this.bottomRight],\n            [this.bottomRight, this.bottomLeft],\n            [this.bottomLeft, this.topLeft],\n        ]\n    }\n\n    boundedPoint(p: PointVector): PointVector {\n        return new PointVector(\n            Math.max(Math.min(p.x, this.right), this.left),\n            Math.max(Math.min(p.y, this.bottom), this.top)\n        )\n    }\n\n    containsPoint(x: number, y: number): boolean {\n        return (\n            x >= this.left &&\n            x <= this.right &&\n            y >= this.top &&\n            y <= this.bottom\n        )\n    }\n\n    contains(p: PointVector): boolean {\n        return this.containsPoint(p.x, p.y)\n    }\n\n    encloses(bounds: Bounds): boolean {\n        return (\n            this.containsPoint(bounds.left, bounds.top) &&\n            this.containsPoint(bounds.left, bounds.bottom) &&\n            this.containsPoint(bounds.right, bounds.top) &&\n            this.containsPoint(bounds.right, bounds.bottom)\n        )\n    }\n\n    toCSS(): { left: string; top: string; width: string; height: string } {\n        return {\n            left: `${this.left}px`,\n            top: `${this.top}px`,\n            width: `${this.width}px`,\n            height: `${this.height}px`,\n        }\n    }\n\n    toProps(): { x: number; y: number; width: number; height: number } {\n        return { x: this.x, y: this.y, width: this.width, height: this.height }\n    }\n\n    toArray(): [[number, number], [number, number]] {\n        return [\n            [this.left, this.top],\n            [this.right, this.bottom],\n        ]\n    }\n\n    toViewBox(): string {\n        return `${this.x} ${this.y} ${this.width} ${this.height}`\n    }\n\n    xRange(): [number, number] {\n        return [this.left, this.right]\n    }\n\n    grid(\n        gridParams: GridParameters,\n        padding: SplitBoundsPadding = {}\n    ): GridBounds[] {\n        const { columns, rows, count } = gridParams\n        const { columnPadding = 0, rowPadding = 0, outerPadding = 0 } = padding\n\n        const contentWidth =\n            this.width - columnPadding * (columns - 1) - outerPadding * 2\n        const contentHeight =\n            this.height - rowPadding * (rows - 1) - outerPadding * 2\n        const boxWidth = Math.floor(contentWidth / columns)\n        const boxHeight = Math.floor(contentHeight / rows)\n\n        const hasCell = (row: number, col: number): boolean => {\n            if (row < 0 || row >= rows) return false\n            if (col < 0 || col >= columns) return false\n            const index = row * columns + col\n            if (index >= count) return false\n            return true\n        }\n\n        const grid = _.range(0, count).map((index: number) => {\n            const col = index % columns\n            const row = Math.floor(index / columns)\n\n            // edges around the existing cells\n            const cellEdges = new Set<Position>()\n            if (!hasCell(row, col - 1)) cellEdges.add(Position.left)\n            if (!hasCell(row, col + 1)) cellEdges.add(Position.right)\n            if (!hasCell(row - 1, col)) cellEdges.add(Position.top)\n            if (!hasCell(row + 1, col)) cellEdges.add(Position.bottom)\n\n            return {\n                row,\n                col,\n                cellEdges,\n                bounds: new Bounds(\n                    this.x + outerPadding + col * (boxWidth + columnPadding),\n                    this.y + outerPadding + row * (boxHeight + rowPadding),\n                    boxWidth,\n                    boxHeight\n                ),\n            }\n        })\n\n        return grid\n    }\n\n    yRange(): [number, number] {\n        return [this.bottom, this.top]\n    }\n\n    equals(bounds: Bounds): boolean {\n        return (\n            this.x === bounds.x &&\n            this.y === bounds.y &&\n            this.width === bounds.width &&\n            this.height === bounds.height\n        )\n    }\n\n    // Calculate squared distance between a given point and the closest border of the bounds\n    // If the point is within the bounds, returns 0\n    private distanceToPointSq(p: PointVector): number {\n        if (this.contains(p)) return 0\n\n        const cx = Math.max(Math.min(p.x, this.x + this.width), this.x)\n        const cy = Math.max(Math.min(p.y, this.y + this.height), this.y)\n        return (p.x - cx) * (p.x - cx) + (p.y - cy) * (p.y - cy)\n    }\n\n    distanceToPoint(p: PointVector): number {\n        return Math.sqrt(this.distanceToPointSq(p))\n    }\n}\n\nexport interface SplitBoundsPadding {\n    columnPadding?: number\n    rowPadding?: number\n    outerPadding?: number\n}\n","var niceErrors = {\n  0: \"Invalid value for configuration 'enforceActions', expected 'never', 'always' or 'observed'\",\n  1: function _(annotationType, key) {\n    return \"Cannot apply '\" + annotationType + \"' to '\" + key.toString() + \"': Field not found.\";\n  },\n  /*\n  2(prop) {\n      return `invalid decorator for '${prop.toString()}'`\n  },\n  3(prop) {\n      return `Cannot decorate '${prop.toString()}': action can only be used on properties with a function value.`\n  },\n  4(prop) {\n      return `Cannot decorate '${prop.toString()}': computed can only be used on getter properties.`\n  },\n  */\n  5: \"'keys()' can only be used on observable objects, arrays, sets and maps\",\n  6: \"'values()' can only be used on observable objects, arrays, sets and maps\",\n  7: \"'entries()' can only be used on observable objects, arrays and maps\",\n  8: \"'set()' can only be used on observable objects, arrays and maps\",\n  9: \"'remove()' can only be used on observable objects, arrays and maps\",\n  10: \"'has()' can only be used on observable objects, arrays and maps\",\n  11: \"'get()' can only be used on observable objects, arrays and maps\",\n  12: \"Invalid annotation\",\n  13: \"Dynamic observable objects cannot be frozen. If you're passing observables to 3rd party component/function that calls Object.freeze, pass copy instead: toJS(observable)\",\n  14: \"Intercept handlers should return nothing or a change object\",\n  15: \"Observable arrays cannot be frozen. If you're passing observables to 3rd party component/function that calls Object.freeze, pass copy instead: toJS(observable)\",\n  16: \"Modification exception: the internal structure of an observable array was changed.\",\n  17: function _(index, length) {\n    return \"[mobx.array] Index out of bounds, \" + index + \" is larger than \" + length;\n  },\n  18: \"mobx.map requires Map polyfill for the current browser. Check babel-polyfill or core-js/es6/map.js\",\n  19: function _(other) {\n    return \"Cannot initialize from classes that inherit from Map: \" + other.constructor.name;\n  },\n  20: function _(other) {\n    return \"Cannot initialize map from \" + other;\n  },\n  21: function _(dataStructure) {\n    return \"Cannot convert to map from '\" + dataStructure + \"'\";\n  },\n  22: \"mobx.set requires Set polyfill for the current browser. Check babel-polyfill or core-js/es6/set.js\",\n  23: \"It is not possible to get index atoms from arrays\",\n  24: function _(thing) {\n    return \"Cannot obtain administration from \" + thing;\n  },\n  25: function _(property, name) {\n    return \"the entry '\" + property + \"' does not exist in the observable map '\" + name + \"'\";\n  },\n  26: \"please specify a property\",\n  27: function _(property, name) {\n    return \"no observable property '\" + property.toString() + \"' found on the observable object '\" + name + \"'\";\n  },\n  28: function _(thing) {\n    return \"Cannot obtain atom from \" + thing;\n  },\n  29: \"Expecting some object\",\n  30: \"invalid action stack. did you forget to finish an action?\",\n  31: \"missing option for computed: get\",\n  32: function _(name, derivation) {\n    return \"Cycle detected in computation \" + name + \": \" + derivation;\n  },\n  33: function _(name) {\n    return \"The setter of computed value '\" + name + \"' is trying to update itself. Did you intend to update an _observable_ value, instead of the computed property?\";\n  },\n  34: function _(name) {\n    return \"[ComputedValue '\" + name + \"'] It is not possible to assign a new value to a computed value.\";\n  },\n  35: \"There are multiple, different versions of MobX active. Make sure MobX is loaded only once or use `configure({ isolateGlobalState: true })`\",\n  36: \"isolateGlobalState should be called before MobX is running any reactions\",\n  37: function _(method) {\n    return \"[mobx] `observableArray.\" + method + \"()` mutates the array in-place, which is not allowed inside a derivation. Use `array.slice().\" + method + \"()` instead\";\n  },\n  38: \"'ownKeys()' can only be used on observable objects\",\n  39: \"'defineProperty()' can only be used on observable objects\"\n};\nvar errors = process.env.NODE_ENV !== \"production\" ? niceErrors : {};\nfunction die(error) {\n  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    args[_key - 1] = arguments[_key];\n  }\n  if (process.env.NODE_ENV !== \"production\") {\n    var e = typeof error === \"string\" ? error : errors[error];\n    if (typeof e === \"function\") e = e.apply(null, args);\n    throw new Error(\"[MobX] \" + e);\n  }\n  throw new Error(typeof error === \"number\" ? \"[MobX] minified error nr: \" + error + (args.length ? \" \" + args.map(String).join(\",\") : \"\") + \". Find the full error at: https://github.com/mobxjs/mobx/blob/main/packages/mobx/src/errors.ts\" : \"[MobX] \" + error);\n}\n\nvar mockGlobal = {};\nfunction getGlobal() {\n  if (typeof globalThis !== \"undefined\") {\n    return globalThis;\n  }\n  if (typeof window !== \"undefined\") {\n    return window;\n  }\n  if (typeof global !== \"undefined\") {\n    return global;\n  }\n  if (typeof self !== \"undefined\") {\n    return self;\n  }\n  return mockGlobal;\n}\n\n// We shorten anything used > 5 times\nvar assign = Object.assign;\nvar getDescriptor = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar objectPrototype = Object.prototype;\nvar EMPTY_ARRAY = [];\nObject.freeze(EMPTY_ARRAY);\nvar EMPTY_OBJECT = {};\nObject.freeze(EMPTY_OBJECT);\nvar hasProxy = typeof Proxy !== \"undefined\";\nvar plainObjectString = /*#__PURE__*/Object.toString();\nfunction assertProxies() {\n  if (!hasProxy) {\n    die(process.env.NODE_ENV !== \"production\" ? \"`Proxy` objects are not available in the current environment. Please configure MobX to enable a fallback implementation.`\" : \"Proxy not available\");\n  }\n}\nfunction warnAboutProxyRequirement(msg) {\n  if (process.env.NODE_ENV !== \"production\" && globalState.verifyProxies) {\n    die(\"MobX is currently configured to be able to run in ES5 mode, but in ES5 MobX won't be able to \" + msg);\n  }\n}\nfunction getNextId() {\n  return ++globalState.mobxGuid;\n}\n/**\n * Makes sure that the provided function is invoked at most once.\n */\nfunction once(func) {\n  var invoked = false;\n  return function () {\n    if (invoked) {\n      return;\n    }\n    invoked = true;\n    return func.apply(this, arguments);\n  };\n}\nvar noop = function noop() {};\nfunction isFunction(fn) {\n  return typeof fn === \"function\";\n}\nfunction isStringish(value) {\n  var t = typeof value;\n  switch (t) {\n    case \"string\":\n    case \"symbol\":\n    case \"number\":\n      return true;\n  }\n  return false;\n}\nfunction isObject(value) {\n  return value !== null && typeof value === \"object\";\n}\nfunction isPlainObject(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  var proto = Object.getPrototypeOf(value);\n  if (proto == null) {\n    return true;\n  }\n  var protoConstructor = Object.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n  return typeof protoConstructor === \"function\" && protoConstructor.toString() === plainObjectString;\n}\n// https://stackoverflow.com/a/37865170\nfunction isGenerator(obj) {\n  var constructor = obj == null ? void 0 : obj.constructor;\n  if (!constructor) {\n    return false;\n  }\n  if (\"GeneratorFunction\" === constructor.name || \"GeneratorFunction\" === constructor.displayName) {\n    return true;\n  }\n  return false;\n}\nfunction addHiddenProp(object, propName, value) {\n  defineProperty(object, propName, {\n    enumerable: false,\n    writable: true,\n    configurable: true,\n    value: value\n  });\n}\nfunction addHiddenFinalProp(object, propName, value) {\n  defineProperty(object, propName, {\n    enumerable: false,\n    writable: false,\n    configurable: true,\n    value: value\n  });\n}\nfunction createInstanceofPredicate(name, theClass) {\n  var propName = \"isMobX\" + name;\n  theClass.prototype[propName] = true;\n  return function (x) {\n    return isObject(x) && x[propName] === true;\n  };\n}\n/**\n * Yields true for both native and observable Map, even across different windows.\n */\nfunction isES6Map(thing) {\n  return thing != null && Object.prototype.toString.call(thing) === \"[object Map]\";\n}\n/**\n * Makes sure a Map is an instance of non-inherited native or observable Map.\n */\nfunction isPlainES6Map(thing) {\n  var mapProto = Object.getPrototypeOf(thing);\n  var objectProto = Object.getPrototypeOf(mapProto);\n  var nullProto = Object.getPrototypeOf(objectProto);\n  return nullProto === null;\n}\n/**\n * Yields true for both native and observable Set, even across different windows.\n */\nfunction isES6Set(thing) {\n  return thing != null && Object.prototype.toString.call(thing) === \"[object Set]\";\n}\nvar hasGetOwnPropertySymbols = typeof Object.getOwnPropertySymbols !== \"undefined\";\n/**\n * Returns the following: own enumerable keys and symbols.\n */\nfunction getPlainObjectKeys(object) {\n  var keys = Object.keys(object);\n  // Not supported in IE, so there are not going to be symbol props anyway...\n  if (!hasGetOwnPropertySymbols) {\n    return keys;\n  }\n  var symbols = Object.getOwnPropertySymbols(object);\n  if (!symbols.length) {\n    return keys;\n  }\n  return [].concat(keys, symbols.filter(function (s) {\n    return objectPrototype.propertyIsEnumerable.call(object, s);\n  }));\n}\n// From Immer utils\n// Returns all own keys, including non-enumerable and symbolic\nvar ownKeys = typeof Reflect !== \"undefined\" && Reflect.ownKeys ? Reflect.ownKeys : hasGetOwnPropertySymbols ? function (obj) {\n  return Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj));\n} : /* istanbul ignore next */Object.getOwnPropertyNames;\nfunction stringifyKey(key) {\n  if (typeof key === \"string\") {\n    return key;\n  }\n  if (typeof key === \"symbol\") {\n    return key.toString();\n  }\n  return new String(key).toString();\n}\nfunction toPrimitive(value) {\n  return value === null ? null : typeof value === \"object\" ? \"\" + value : value;\n}\nfunction hasProp(target, prop) {\n  return objectPrototype.hasOwnProperty.call(target, prop);\n}\n// From Immer utils\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors || function getOwnPropertyDescriptors(target) {\n  // Polyfill needed for Hermes and IE, see https://github.com/facebook/hermes/issues/274\n  var res = {};\n  // Note: without polyfill for ownKeys, symbols won't be picked up\n  ownKeys(target).forEach(function (key) {\n    res[key] = getDescriptor(target, key);\n  });\n  return res;\n};\nfunction getFlag(flags, mask) {\n  return !!(flags & mask);\n}\nfunction setFlag(flags, mask, newValue) {\n  if (newValue) {\n    flags |= mask;\n  } else {\n    flags &= ~mask;\n  }\n  return flags;\n}\n\nfunction _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nfunction _construct(t, e, r) {\n  if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments);\n  var o = [null];\n  o.push.apply(o, e);\n  var p = new (t.bind.apply(t, o))();\n  return r && _setPrototypeOf(p, r.prototype), p;\n}\nfunction _defineProperties(e, r) {\n  for (var t = 0; t < r.length; t++) {\n    var o = r[t];\n    o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o);\n  }\n}\nfunction _createClass(e, r, t) {\n  return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n    writable: !1\n  }), e;\n}\nfunction _createForOfIteratorHelperLoose(r, e) {\n  var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (t) return (t = t.call(r)).next.bind(t);\n  if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) {\n    t && (r = t);\n    var o = 0;\n    return function () {\n      return o >= r.length ? {\n        done: !0\n      } : {\n        done: !1,\n        value: r[o++]\n      };\n    };\n  }\n  throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _extends() {\n  return _extends = Object.assign ? Object.assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, _extends.apply(null, arguments);\n}\nfunction _getPrototypeOf(t) {\n  return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n    return t.__proto__ || Object.getPrototypeOf(t);\n  }, _getPrototypeOf(t);\n}\nfunction _inheritsLoose(t, o) {\n  t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o);\n}\nfunction _isNativeFunction(t) {\n  try {\n    return -1 !== Function.toString.call(t).indexOf(\"[native code]\");\n  } catch (n) {\n    return \"function\" == typeof t;\n  }\n}\nfunction _isNativeReflectConstruct() {\n  try {\n    var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n  } catch (t) {}\n  return (_isNativeReflectConstruct = function () {\n    return !!t;\n  })();\n}\nfunction _setPrototypeOf(t, e) {\n  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, _setPrototypeOf(t, e);\n}\nfunction _toPrimitive(t, r) {\n  if (\"object\" != typeof t || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != typeof i) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n  var i = _toPrimitive(t, \"string\");\n  return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n  }\n}\nfunction _wrapNativeSuper(t) {\n  var r = \"function\" == typeof Map ? new Map() : void 0;\n  return _wrapNativeSuper = function (t) {\n    if (null === t || !_isNativeFunction(t)) return t;\n    if (\"function\" != typeof t) throw new TypeError(\"Super expression must either be null or a function\");\n    if (void 0 !== r) {\n      if (r.has(t)) return r.get(t);\n      r.set(t, Wrapper);\n    }\n    function Wrapper() {\n      return _construct(t, arguments, _getPrototypeOf(this).constructor);\n    }\n    return Wrapper.prototype = Object.create(t.prototype, {\n      constructor: {\n        value: Wrapper,\n        enumerable: !1,\n        writable: !0,\n        configurable: !0\n      }\n    }), _setPrototypeOf(Wrapper, t);\n  }, _wrapNativeSuper(t);\n}\n\nvar storedAnnotationsSymbol = /*#__PURE__*/Symbol(\"mobx-stored-annotations\");\n/**\n * Creates a function that acts as\n * - decorator\n * - annotation object\n */\nfunction createDecoratorAnnotation(annotation) {\n  function decorator(target, property) {\n    if (is20223Decorator(property)) {\n      return annotation.decorate_20223_(target, property);\n    } else {\n      storeAnnotation(target, property, annotation);\n    }\n  }\n  return Object.assign(decorator, annotation);\n}\n/**\n * Stores annotation to prototype,\n * so it can be inspected later by `makeObservable` called from constructor\n */\nfunction storeAnnotation(prototype, key, annotation) {\n  if (!hasProp(prototype, storedAnnotationsSymbol)) {\n    addHiddenProp(prototype, storedAnnotationsSymbol, _extends({}, prototype[storedAnnotationsSymbol]));\n  }\n  // @override must override something\n  if (process.env.NODE_ENV !== \"production\" && isOverride(annotation) && !hasProp(prototype[storedAnnotationsSymbol], key)) {\n    var fieldName = prototype.constructor.name + \".prototype.\" + key.toString();\n    die(\"'\" + fieldName + \"' is decorated with 'override', \" + \"but no such decorated member was found on prototype.\");\n  }\n  // Cannot re-decorate\n  assertNotDecorated(prototype, annotation, key);\n  // Ignore override\n  if (!isOverride(annotation)) {\n    prototype[storedAnnotationsSymbol][key] = annotation;\n  }\n}\nfunction assertNotDecorated(prototype, annotation, key) {\n  if (process.env.NODE_ENV !== \"production\" && !isOverride(annotation) && hasProp(prototype[storedAnnotationsSymbol], key)) {\n    var fieldName = prototype.constructor.name + \".prototype.\" + key.toString();\n    var currentAnnotationType = prototype[storedAnnotationsSymbol][key].annotationType_;\n    var requestedAnnotationType = annotation.annotationType_;\n    die(\"Cannot apply '@\" + requestedAnnotationType + \"' to '\" + fieldName + \"':\" + (\"\\nThe field is already decorated with '@\" + currentAnnotationType + \"'.\") + \"\\nRe-decorating fields is not allowed.\" + \"\\nUse '@override' decorator for methods overridden by subclass.\");\n  }\n}\n/**\n * Collects annotations from prototypes and stores them on target (instance)\n */\nfunction collectStoredAnnotations(target) {\n  if (!hasProp(target, storedAnnotationsSymbol)) {\n    // if (__DEV__ && !target[storedAnnotationsSymbol]) {\n    //     die(\n    //         `No annotations were passed to makeObservable, but no decorated members have been found either`\n    //     )\n    // }\n    // We need a copy as we will remove annotation from the list once it's applied.\n    addHiddenProp(target, storedAnnotationsSymbol, _extends({}, target[storedAnnotationsSymbol]));\n  }\n  return target[storedAnnotationsSymbol];\n}\nfunction is20223Decorator(context) {\n  return typeof context == \"object\" && typeof context[\"kind\"] == \"string\";\n}\nfunction assert20223DecoratorType(context, types) {\n  if (process.env.NODE_ENV !== \"production\" && !types.includes(context.kind)) {\n    die(\"The decorator applied to '\" + String(context.name) + \"' cannot be used on a \" + context.kind + \" element\");\n  }\n}\n\nvar $mobx = /*#__PURE__*/Symbol(\"mobx administration\");\nvar Atom = /*#__PURE__*/function () {\n  /**\n   * Create a new atom. For debugging purposes it is recommended to give it a name.\n   * The onBecomeObserved and onBecomeUnobserved callbacks can be used for resource management.\n   */\n  function Atom(name_) {\n    if (name_ === void 0) {\n      name_ = process.env.NODE_ENV !== \"production\" ? \"Atom@\" + getNextId() : \"Atom\";\n    }\n    this.name_ = void 0;\n    this.flags_ = 0;\n    this.observers_ = new Set();\n    this.lastAccessedBy_ = 0;\n    this.lowestObserverState_ = IDerivationState_.NOT_TRACKING_;\n    // onBecomeObservedListeners\n    this.onBOL = void 0;\n    // onBecomeUnobservedListeners\n    this.onBUOL = void 0;\n    this.name_ = name_;\n  }\n  // for effective unobserving. BaseAtom has true, for extra optimization, so its onBecomeUnobserved never gets called, because it's not needed\n  var _proto = Atom.prototype;\n  _proto.onBO = function onBO() {\n    if (this.onBOL) {\n      this.onBOL.forEach(function (listener) {\n        return listener();\n      });\n    }\n  };\n  _proto.onBUO = function onBUO() {\n    if (this.onBUOL) {\n      this.onBUOL.forEach(function (listener) {\n        return listener();\n      });\n    }\n  }\n  /**\n   * Invoke this method to notify mobx that your atom has been used somehow.\n   * Returns true if there is currently a reactive context.\n   */;\n  _proto.reportObserved = function reportObserved$1() {\n    return reportObserved(this);\n  }\n  /**\n   * Invoke this method _after_ this method has changed to signal mobx that all its observers should invalidate.\n   */;\n  _proto.reportChanged = function reportChanged() {\n    startBatch();\n    propagateChanged(this);\n    endBatch();\n  };\n  _proto.toString = function toString() {\n    return this.name_;\n  };\n  return _createClass(Atom, [{\n    key: \"isBeingObserved\",\n    get: function get() {\n      return getFlag(this.flags_, Atom.isBeingObservedMask_);\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, Atom.isBeingObservedMask_, newValue);\n    }\n  }, {\n    key: \"isPendingUnobservation\",\n    get: function get() {\n      return getFlag(this.flags_, Atom.isPendingUnobservationMask_);\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, Atom.isPendingUnobservationMask_, newValue);\n    }\n  }, {\n    key: \"diffValue\",\n    get: function get() {\n      return getFlag(this.flags_, Atom.diffValueMask_) ? 1 : 0;\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, Atom.diffValueMask_, newValue === 1 ? true : false);\n    }\n  }]);\n}();\nAtom.isBeingObservedMask_ = 1;\nAtom.isPendingUnobservationMask_ = 2;\nAtom.diffValueMask_ = 4;\nvar isAtom = /*#__PURE__*/createInstanceofPredicate(\"Atom\", Atom);\nfunction createAtom(name, onBecomeObservedHandler, onBecomeUnobservedHandler) {\n  if (onBecomeObservedHandler === void 0) {\n    onBecomeObservedHandler = noop;\n  }\n  if (onBecomeUnobservedHandler === void 0) {\n    onBecomeUnobservedHandler = noop;\n  }\n  var atom = new Atom(name);\n  // default `noop` listener will not initialize the hook Set\n  if (onBecomeObservedHandler !== noop) {\n    onBecomeObserved(atom, onBecomeObservedHandler);\n  }\n  if (onBecomeUnobservedHandler !== noop) {\n    onBecomeUnobserved(atom, onBecomeUnobservedHandler);\n  }\n  return atom;\n}\n\nfunction identityComparer(a, b) {\n  return a === b;\n}\nfunction structuralComparer(a, b) {\n  return deepEqual(a, b);\n}\nfunction shallowComparer(a, b) {\n  return deepEqual(a, b, 1);\n}\nfunction defaultComparer(a, b) {\n  if (Object.is) {\n    return Object.is(a, b);\n  }\n  return a === b ? a !== 0 || 1 / a === 1 / b : a !== a && b !== b;\n}\nvar comparer = {\n  identity: identityComparer,\n  structural: structuralComparer,\n  \"default\": defaultComparer,\n  shallow: shallowComparer\n};\n\nfunction deepEnhancer(v, _, name) {\n  // it is an observable already, done\n  if (isObservable(v)) {\n    return v;\n  }\n  // something that can be converted and mutated?\n  if (Array.isArray(v)) {\n    return observable.array(v, {\n      name: name\n    });\n  }\n  if (isPlainObject(v)) {\n    return observable.object(v, undefined, {\n      name: name\n    });\n  }\n  if (isES6Map(v)) {\n    return observable.map(v, {\n      name: name\n    });\n  }\n  if (isES6Set(v)) {\n    return observable.set(v, {\n      name: name\n    });\n  }\n  if (typeof v === \"function\" && !isAction(v) && !isFlow(v)) {\n    if (isGenerator(v)) {\n      return flow(v);\n    } else {\n      return autoAction(name, v);\n    }\n  }\n  return v;\n}\nfunction shallowEnhancer(v, _, name) {\n  if (v === undefined || v === null) {\n    return v;\n  }\n  if (isObservableObject(v) || isObservableArray(v) || isObservableMap(v) || isObservableSet(v)) {\n    return v;\n  }\n  if (Array.isArray(v)) {\n    return observable.array(v, {\n      name: name,\n      deep: false\n    });\n  }\n  if (isPlainObject(v)) {\n    return observable.object(v, undefined, {\n      name: name,\n      deep: false\n    });\n  }\n  if (isES6Map(v)) {\n    return observable.map(v, {\n      name: name,\n      deep: false\n    });\n  }\n  if (isES6Set(v)) {\n    return observable.set(v, {\n      name: name,\n      deep: false\n    });\n  }\n  if (process.env.NODE_ENV !== \"production\") {\n    die(\"The shallow modifier / decorator can only used in combination with arrays, objects, maps and sets\");\n  }\n}\nfunction referenceEnhancer(newValue) {\n  // never turn into an observable\n  return newValue;\n}\nfunction refStructEnhancer(v, oldValue) {\n  if (process.env.NODE_ENV !== \"production\" && isObservable(v)) {\n    die(\"observable.struct should not be used with observable values\");\n  }\n  if (deepEqual(v, oldValue)) {\n    return oldValue;\n  }\n  return v;\n}\n\nvar OVERRIDE = \"override\";\nvar override = /*#__PURE__*/createDecoratorAnnotation({\n  annotationType_: OVERRIDE,\n  make_: make_,\n  extend_: extend_,\n  decorate_20223_: decorate_20223_\n});\nfunction isOverride(annotation) {\n  return annotation.annotationType_ === OVERRIDE;\n}\nfunction make_(adm, key) {\n  // Must not be plain object\n  if (process.env.NODE_ENV !== \"production\" && adm.isPlainObject_) {\n    die(\"Cannot apply '\" + this.annotationType_ + \"' to '\" + adm.name_ + \".\" + key.toString() + \"':\" + (\"\\n'\" + this.annotationType_ + \"' cannot be used on plain objects.\"));\n  }\n  // Must override something\n  if (process.env.NODE_ENV !== \"production\" && !hasProp(adm.appliedAnnotations_, key)) {\n    die(\"'\" + adm.name_ + \".\" + key.toString() + \"' is annotated with '\" + this.annotationType_ + \"', \" + \"but no such annotated member was found on prototype.\");\n  }\n  return 0 /* MakeResult.Cancel */;\n}\nfunction extend_(adm, key, descriptor, proxyTrap) {\n  die(\"'\" + this.annotationType_ + \"' can only be used with 'makeObservable'\");\n}\nfunction decorate_20223_(desc, context) {\n  console.warn(\"'\" + this.annotationType_ + \"' cannot be used with decorators - this is a no-op\");\n}\n\nfunction createActionAnnotation(name, options) {\n  return {\n    annotationType_: name,\n    options_: options,\n    make_: make_$1,\n    extend_: extend_$1,\n    decorate_20223_: decorate_20223_$1\n  };\n}\nfunction make_$1(adm, key, descriptor, source) {\n  var _this$options_;\n  // bound\n  if ((_this$options_ = this.options_) != null && _this$options_.bound) {\n    return this.extend_(adm, key, descriptor, false) === null ? 0 /* MakeResult.Cancel */ : 1 /* MakeResult.Break */;\n  }\n  // own\n  if (source === adm.target_) {\n    return this.extend_(adm, key, descriptor, false) === null ? 0 /* MakeResult.Cancel */ : 2 /* MakeResult.Continue */;\n  }\n  // prototype\n  if (isAction(descriptor.value)) {\n    // A prototype could have been annotated already by other constructor,\n    // rest of the proto chain must be annotated already\n    return 1 /* MakeResult.Break */;\n  }\n  var actionDescriptor = createActionDescriptor(adm, this, key, descriptor, false);\n  defineProperty(source, key, actionDescriptor);\n  return 2 /* MakeResult.Continue */;\n}\nfunction extend_$1(adm, key, descriptor, proxyTrap) {\n  var actionDescriptor = createActionDescriptor(adm, this, key, descriptor);\n  return adm.defineProperty_(key, actionDescriptor, proxyTrap);\n}\nfunction decorate_20223_$1(mthd, context) {\n  if (process.env.NODE_ENV !== \"production\") {\n    assert20223DecoratorType(context, [\"method\", \"field\"]);\n  }\n  var kind = context.kind,\n    name = context.name,\n    addInitializer = context.addInitializer;\n  var ann = this;\n  var _createAction = function _createAction(m) {\n    var _ann$options_$name, _ann$options_, _ann$options_$autoAct, _ann$options_2;\n    return createAction((_ann$options_$name = (_ann$options_ = ann.options_) == null ? void 0 : _ann$options_.name) != null ? _ann$options_$name : name.toString(), m, (_ann$options_$autoAct = (_ann$options_2 = ann.options_) == null ? void 0 : _ann$options_2.autoAction) != null ? _ann$options_$autoAct : false);\n  };\n  if (kind == \"field\") {\n    return function (initMthd) {\n      var _ann$options_3;\n      var mthd = initMthd;\n      if (!isAction(mthd)) {\n        mthd = _createAction(mthd);\n      }\n      if ((_ann$options_3 = ann.options_) != null && _ann$options_3.bound) {\n        mthd = mthd.bind(this);\n        mthd.isMobxAction = true;\n      }\n      return mthd;\n    };\n  }\n  if (kind == \"method\") {\n    var _this$options_2;\n    if (!isAction(mthd)) {\n      mthd = _createAction(mthd);\n    }\n    if ((_this$options_2 = this.options_) != null && _this$options_2.bound) {\n      addInitializer(function () {\n        var self = this;\n        var bound = self[name].bind(self);\n        bound.isMobxAction = true;\n        self[name] = bound;\n      });\n    }\n    return mthd;\n  }\n  die(\"Cannot apply '\" + ann.annotationType_ + \"' to '\" + String(name) + \"' (kind: \" + kind + \"):\" + (\"\\n'\" + ann.annotationType_ + \"' can only be used on properties with a function value.\"));\n}\nfunction assertActionDescriptor(adm, _ref, key, _ref2) {\n  var annotationType_ = _ref.annotationType_;\n  var value = _ref2.value;\n  if (process.env.NODE_ENV !== \"production\" && !isFunction(value)) {\n    die(\"Cannot apply '\" + annotationType_ + \"' to '\" + adm.name_ + \".\" + key.toString() + \"':\" + (\"\\n'\" + annotationType_ + \"' can only be used on properties with a function value.\"));\n  }\n}\nfunction createActionDescriptor(adm, annotation, key, descriptor,\n// provides ability to disable safeDescriptors for prototypes\nsafeDescriptors) {\n  var _annotation$options_, _annotation$options_$, _annotation$options_2, _annotation$options_$2, _annotation$options_3, _annotation$options_4, _adm$proxy_2;\n  if (safeDescriptors === void 0) {\n    safeDescriptors = globalState.safeDescriptors;\n  }\n  assertActionDescriptor(adm, annotation, key, descriptor);\n  var value = descriptor.value;\n  if ((_annotation$options_ = annotation.options_) != null && _annotation$options_.bound) {\n    var _adm$proxy_;\n    value = value.bind((_adm$proxy_ = adm.proxy_) != null ? _adm$proxy_ : adm.target_);\n  }\n  return {\n    value: createAction((_annotation$options_$ = (_annotation$options_2 = annotation.options_) == null ? void 0 : _annotation$options_2.name) != null ? _annotation$options_$ : key.toString(), value, (_annotation$options_$2 = (_annotation$options_3 = annotation.options_) == null ? void 0 : _annotation$options_3.autoAction) != null ? _annotation$options_$2 : false,\n    // https://github.com/mobxjs/mobx/discussions/3140\n    (_annotation$options_4 = annotation.options_) != null && _annotation$options_4.bound ? (_adm$proxy_2 = adm.proxy_) != null ? _adm$proxy_2 : adm.target_ : undefined),\n    // Non-configurable for classes\n    // prevents accidental field redefinition in subclass\n    configurable: safeDescriptors ? adm.isPlainObject_ : true,\n    // https://github.com/mobxjs/mobx/pull/2641#issuecomment-737292058\n    enumerable: false,\n    // Non-obsevable, therefore non-writable\n    // Also prevents rewriting in subclass constructor\n    writable: safeDescriptors ? false : true\n  };\n}\n\nfunction createFlowAnnotation(name, options) {\n  return {\n    annotationType_: name,\n    options_: options,\n    make_: make_$2,\n    extend_: extend_$2,\n    decorate_20223_: decorate_20223_$2\n  };\n}\nfunction make_$2(adm, key, descriptor, source) {\n  var _this$options_;\n  // own\n  if (source === adm.target_) {\n    return this.extend_(adm, key, descriptor, false) === null ? 0 /* MakeResult.Cancel */ : 2 /* MakeResult.Continue */;\n  }\n  // prototype\n  // bound - must annotate protos to support super.flow()\n  if ((_this$options_ = this.options_) != null && _this$options_.bound && (!hasProp(adm.target_, key) || !isFlow(adm.target_[key]))) {\n    if (this.extend_(adm, key, descriptor, false) === null) {\n      return 0 /* MakeResult.Cancel */;\n    }\n  }\n  if (isFlow(descriptor.value)) {\n    // A prototype could have been annotated already by other constructor,\n    // rest of the proto chain must be annotated already\n    return 1 /* MakeResult.Break */;\n  }\n  var flowDescriptor = createFlowDescriptor(adm, this, key, descriptor, false, false);\n  defineProperty(source, key, flowDescriptor);\n  return 2 /* MakeResult.Continue */;\n}\nfunction extend_$2(adm, key, descriptor, proxyTrap) {\n  var _this$options_2;\n  var flowDescriptor = createFlowDescriptor(adm, this, key, descriptor, (_this$options_2 = this.options_) == null ? void 0 : _this$options_2.bound);\n  return adm.defineProperty_(key, flowDescriptor, proxyTrap);\n}\nfunction decorate_20223_$2(mthd, context) {\n  var _this$options_3;\n  if (process.env.NODE_ENV !== \"production\") {\n    assert20223DecoratorType(context, [\"method\"]);\n  }\n  var name = context.name,\n    addInitializer = context.addInitializer;\n  if (!isFlow(mthd)) {\n    mthd = flow(mthd);\n  }\n  if ((_this$options_3 = this.options_) != null && _this$options_3.bound) {\n    addInitializer(function () {\n      var self = this;\n      var bound = self[name].bind(self);\n      bound.isMobXFlow = true;\n      self[name] = bound;\n    });\n  }\n  return mthd;\n}\nfunction assertFlowDescriptor(adm, _ref, key, _ref2) {\n  var annotationType_ = _ref.annotationType_;\n  var value = _ref2.value;\n  if (process.env.NODE_ENV !== \"production\" && !isFunction(value)) {\n    die(\"Cannot apply '\" + annotationType_ + \"' to '\" + adm.name_ + \".\" + key.toString() + \"':\" + (\"\\n'\" + annotationType_ + \"' can only be used on properties with a generator function value.\"));\n  }\n}\nfunction createFlowDescriptor(adm, annotation, key, descriptor, bound,\n// provides ability to disable safeDescriptors for prototypes\nsafeDescriptors) {\n  if (safeDescriptors === void 0) {\n    safeDescriptors = globalState.safeDescriptors;\n  }\n  assertFlowDescriptor(adm, annotation, key, descriptor);\n  var value = descriptor.value;\n  // In case of flow.bound, the descriptor can be from already annotated prototype\n  if (!isFlow(value)) {\n    value = flow(value);\n  }\n  if (bound) {\n    var _adm$proxy_;\n    // We do not keep original function around, so we bind the existing flow\n    value = value.bind((_adm$proxy_ = adm.proxy_) != null ? _adm$proxy_ : adm.target_);\n    // This is normally set by `flow`, but `bind` returns new function...\n    value.isMobXFlow = true;\n  }\n  return {\n    value: value,\n    // Non-configurable for classes\n    // prevents accidental field redefinition in subclass\n    configurable: safeDescriptors ? adm.isPlainObject_ : true,\n    // https://github.com/mobxjs/mobx/pull/2641#issuecomment-737292058\n    enumerable: false,\n    // Non-obsevable, therefore non-writable\n    // Also prevents rewriting in subclass constructor\n    writable: safeDescriptors ? false : true\n  };\n}\n\nfunction createComputedAnnotation(name, options) {\n  return {\n    annotationType_: name,\n    options_: options,\n    make_: make_$3,\n    extend_: extend_$3,\n    decorate_20223_: decorate_20223_$3\n  };\n}\nfunction make_$3(adm, key, descriptor) {\n  return this.extend_(adm, key, descriptor, false) === null ? 0 /* MakeResult.Cancel */ : 1 /* MakeResult.Break */;\n}\nfunction extend_$3(adm, key, descriptor, proxyTrap) {\n  assertComputedDescriptor(adm, this, key, descriptor);\n  return adm.defineComputedProperty_(key, _extends({}, this.options_, {\n    get: descriptor.get,\n    set: descriptor.set\n  }), proxyTrap);\n}\nfunction decorate_20223_$3(get, context) {\n  if (process.env.NODE_ENV !== \"production\") {\n    assert20223DecoratorType(context, [\"getter\"]);\n  }\n  var ann = this;\n  var key = context.name,\n    addInitializer = context.addInitializer;\n  addInitializer(function () {\n    var adm = asObservableObject(this)[$mobx];\n    var options = _extends({}, ann.options_, {\n      get: get,\n      context: this\n    });\n    options.name || (options.name = process.env.NODE_ENV !== \"production\" ? adm.name_ + \".\" + key.toString() : \"ObservableObject.\" + key.toString());\n    adm.values_.set(key, new ComputedValue(options));\n  });\n  return function () {\n    return this[$mobx].getObservablePropValue_(key);\n  };\n}\nfunction assertComputedDescriptor(adm, _ref, key, _ref2) {\n  var annotationType_ = _ref.annotationType_;\n  var get = _ref2.get;\n  if (process.env.NODE_ENV !== \"production\" && !get) {\n    die(\"Cannot apply '\" + annotationType_ + \"' to '\" + adm.name_ + \".\" + key.toString() + \"':\" + (\"\\n'\" + annotationType_ + \"' can only be used on getter(+setter) properties.\"));\n  }\n}\n\nfunction createObservableAnnotation(name, options) {\n  return {\n    annotationType_: name,\n    options_: options,\n    make_: make_$4,\n    extend_: extend_$4,\n    decorate_20223_: decorate_20223_$4\n  };\n}\nfunction make_$4(adm, key, descriptor) {\n  return this.extend_(adm, key, descriptor, false) === null ? 0 /* MakeResult.Cancel */ : 1 /* MakeResult.Break */;\n}\nfunction extend_$4(adm, key, descriptor, proxyTrap) {\n  var _this$options_$enhanc, _this$options_;\n  assertObservableDescriptor(adm, this, key, descriptor);\n  return adm.defineObservableProperty_(key, descriptor.value, (_this$options_$enhanc = (_this$options_ = this.options_) == null ? void 0 : _this$options_.enhancer) != null ? _this$options_$enhanc : deepEnhancer, proxyTrap);\n}\nfunction decorate_20223_$4(desc, context) {\n  if (process.env.NODE_ENV !== \"production\") {\n    if (context.kind === \"field\") {\n      throw die(\"Please use `@observable accessor \" + String(context.name) + \"` instead of `@observable \" + String(context.name) + \"`\");\n    }\n    assert20223DecoratorType(context, [\"accessor\"]);\n  }\n  var ann = this;\n  var kind = context.kind,\n    name = context.name;\n  // The laziness here is not ideal... It's a workaround to how 2022.3 Decorators are implemented:\n  //   `addInitializer` callbacks are executed _before_ any accessors are defined (instead of the ideal-for-us right after each).\n  //   This means that, if we were to do our stuff in an `addInitializer`, we'd attempt to read a private slot\n  //   before it has been initialized. The runtime doesn't like that and throws a `Cannot read private member\n  //   from an object whose class did not declare it` error.\n  // TODO: it seems that this will not be required anymore in the final version of the spec\n  // See TODO: link\n  var initializedObjects = new WeakSet();\n  function initializeObservable(target, value) {\n    var _ann$options_$enhance, _ann$options_;\n    var adm = asObservableObject(target)[$mobx];\n    var observable = new ObservableValue(value, (_ann$options_$enhance = (_ann$options_ = ann.options_) == null ? void 0 : _ann$options_.enhancer) != null ? _ann$options_$enhance : deepEnhancer, process.env.NODE_ENV !== \"production\" ? adm.name_ + \".\" + name.toString() : \"ObservableObject.\" + name.toString(), false);\n    adm.values_.set(name, observable);\n    initializedObjects.add(target);\n  }\n  if (kind == \"accessor\") {\n    return {\n      get: function get() {\n        if (!initializedObjects.has(this)) {\n          initializeObservable(this, desc.get.call(this));\n        }\n        return this[$mobx].getObservablePropValue_(name);\n      },\n      set: function set(value) {\n        if (!initializedObjects.has(this)) {\n          initializeObservable(this, value);\n        }\n        return this[$mobx].setObservablePropValue_(name, value);\n      },\n      init: function init(value) {\n        if (!initializedObjects.has(this)) {\n          initializeObservable(this, value);\n        }\n        return value;\n      }\n    };\n  }\n  return;\n}\nfunction assertObservableDescriptor(adm, _ref, key, descriptor) {\n  var annotationType_ = _ref.annotationType_;\n  if (process.env.NODE_ENV !== \"production\" && !(\"value\" in descriptor)) {\n    die(\"Cannot apply '\" + annotationType_ + \"' to '\" + adm.name_ + \".\" + key.toString() + \"':\" + (\"\\n'\" + annotationType_ + \"' cannot be used on getter/setter properties\"));\n  }\n}\n\nvar AUTO = \"true\";\nvar autoAnnotation = /*#__PURE__*/createAutoAnnotation();\nfunction createAutoAnnotation(options) {\n  return {\n    annotationType_: AUTO,\n    options_: options,\n    make_: make_$5,\n    extend_: extend_$5,\n    decorate_20223_: decorate_20223_$5\n  };\n}\nfunction make_$5(adm, key, descriptor, source) {\n  var _this$options_3, _this$options_4;\n  // getter -> computed\n  if (descriptor.get) {\n    return computed.make_(adm, key, descriptor, source);\n  }\n  // lone setter -> action setter\n  if (descriptor.set) {\n    // TODO make action applicable to setter and delegate to action.make_\n    var set = isAction(descriptor.set) ? descriptor.set // See #4553\n    : createAction(key.toString(), descriptor.set);\n    // own\n    if (source === adm.target_) {\n      return adm.defineProperty_(key, {\n        configurable: globalState.safeDescriptors ? adm.isPlainObject_ : true,\n        set: set\n      }) === null ? 0 /* MakeResult.Cancel */ : 2 /* MakeResult.Continue */;\n    }\n    // proto\n    defineProperty(source, key, {\n      configurable: true,\n      set: set\n    });\n    return 2 /* MakeResult.Continue */;\n  }\n  // function on proto -> autoAction/flow\n  if (source !== adm.target_ && typeof descriptor.value === \"function\") {\n    var _this$options_2;\n    if (isGenerator(descriptor.value)) {\n      var _this$options_;\n      var flowAnnotation = (_this$options_ = this.options_) != null && _this$options_.autoBind ? flow.bound : flow;\n      return flowAnnotation.make_(adm, key, descriptor, source);\n    }\n    var actionAnnotation = (_this$options_2 = this.options_) != null && _this$options_2.autoBind ? autoAction.bound : autoAction;\n    return actionAnnotation.make_(adm, key, descriptor, source);\n  }\n  // other -> observable\n  // Copy props from proto as well, see test:\n  // \"decorate should work with Object.create\"\n  var observableAnnotation = ((_this$options_3 = this.options_) == null ? void 0 : _this$options_3.deep) === false ? observable.ref : observable;\n  // if function respect autoBind option\n  if (typeof descriptor.value === \"function\" && (_this$options_4 = this.options_) != null && _this$options_4.autoBind) {\n    var _adm$proxy_;\n    descriptor.value = descriptor.value.bind((_adm$proxy_ = adm.proxy_) != null ? _adm$proxy_ : adm.target_);\n  }\n  return observableAnnotation.make_(adm, key, descriptor, source);\n}\nfunction extend_$5(adm, key, descriptor, proxyTrap) {\n  var _this$options_5, _this$options_6;\n  // getter -> computed\n  if (descriptor.get) {\n    return computed.extend_(adm, key, descriptor, proxyTrap);\n  }\n  // lone setter -> action setter\n  if (descriptor.set) {\n    // TODO make action applicable to setter and delegate to action.extend_\n    return adm.defineProperty_(key, {\n      configurable: globalState.safeDescriptors ? adm.isPlainObject_ : true,\n      set: createAction(key.toString(), descriptor.set)\n    }, proxyTrap);\n  }\n  // other -> observable\n  // if function respect autoBind option\n  if (typeof descriptor.value === \"function\" && (_this$options_5 = this.options_) != null && _this$options_5.autoBind) {\n    var _adm$proxy_2;\n    descriptor.value = descriptor.value.bind((_adm$proxy_2 = adm.proxy_) != null ? _adm$proxy_2 : adm.target_);\n  }\n  var observableAnnotation = ((_this$options_6 = this.options_) == null ? void 0 : _this$options_6.deep) === false ? observable.ref : observable;\n  return observableAnnotation.extend_(adm, key, descriptor, proxyTrap);\n}\nfunction decorate_20223_$5(desc, context) {\n  die(\"'\" + this.annotationType_ + \"' cannot be used as a decorator\");\n}\n\nvar OBSERVABLE = \"observable\";\nvar OBSERVABLE_REF = \"observable.ref\";\nvar OBSERVABLE_SHALLOW = \"observable.shallow\";\nvar OBSERVABLE_STRUCT = \"observable.struct\";\n// Predefined bags of create observable options, to avoid allocating temporarily option objects\n// in the majority of cases\nvar defaultCreateObservableOptions = {\n  deep: true,\n  name: undefined,\n  defaultDecorator: undefined,\n  proxy: true\n};\nObject.freeze(defaultCreateObservableOptions);\nfunction asCreateObservableOptions(thing) {\n  return thing || defaultCreateObservableOptions;\n}\nvar observableAnnotation = /*#__PURE__*/createObservableAnnotation(OBSERVABLE);\nvar observableRefAnnotation = /*#__PURE__*/createObservableAnnotation(OBSERVABLE_REF, {\n  enhancer: referenceEnhancer\n});\nvar observableShallowAnnotation = /*#__PURE__*/createObservableAnnotation(OBSERVABLE_SHALLOW, {\n  enhancer: shallowEnhancer\n});\nvar observableStructAnnotation = /*#__PURE__*/createObservableAnnotation(OBSERVABLE_STRUCT, {\n  enhancer: refStructEnhancer\n});\nvar observableDecoratorAnnotation = /*#__PURE__*/createDecoratorAnnotation(observableAnnotation);\nfunction getEnhancerFromOptions(options) {\n  return options.deep === true ? deepEnhancer : options.deep === false ? referenceEnhancer : getEnhancerFromAnnotation(options.defaultDecorator);\n}\nfunction getAnnotationFromOptions(options) {\n  var _options$defaultDecor;\n  return options ? (_options$defaultDecor = options.defaultDecorator) != null ? _options$defaultDecor : createAutoAnnotation(options) : undefined;\n}\nfunction getEnhancerFromAnnotation(annotation) {\n  var _annotation$options_$, _annotation$options_;\n  return !annotation ? deepEnhancer : (_annotation$options_$ = (_annotation$options_ = annotation.options_) == null ? void 0 : _annotation$options_.enhancer) != null ? _annotation$options_$ : deepEnhancer;\n}\n/**\n * Turns an object, array or function into a reactive structure.\n * @param v the value which should become observable.\n */\nfunction createObservable(v, arg2, arg3) {\n  // @observable someProp; (2022.3 Decorators)\n  if (is20223Decorator(arg2)) {\n    return observableAnnotation.decorate_20223_(v, arg2);\n  }\n  // @observable someProp;\n  if (isStringish(arg2)) {\n    storeAnnotation(v, arg2, observableAnnotation);\n    return;\n  }\n  // already observable - ignore\n  if (isObservable(v)) {\n    return v;\n  }\n  // plain object\n  if (isPlainObject(v)) {\n    return observable.object(v, arg2, arg3);\n  }\n  // Array\n  if (Array.isArray(v)) {\n    return observable.array(v, arg2);\n  }\n  // Map\n  if (isES6Map(v)) {\n    return observable.map(v, arg2);\n  }\n  // Set\n  if (isES6Set(v)) {\n    return observable.set(v, arg2);\n  }\n  // other object - ignore\n  if (typeof v === \"object\" && v !== null) {\n    return v;\n  }\n  // anything else\n  return observable.box(v, arg2);\n}\nassign(createObservable, observableDecoratorAnnotation);\nvar observableFactories = {\n  box: function box(value, options) {\n    var o = asCreateObservableOptions(options);\n    return new ObservableValue(value, getEnhancerFromOptions(o), o.name, true, o.equals);\n  },\n  array: function array(initialValues, options) {\n    var o = asCreateObservableOptions(options);\n    return (globalState.useProxies === false || o.proxy === false ? createLegacyArray : createObservableArray)(initialValues, getEnhancerFromOptions(o), o.name);\n  },\n  map: function map(initialValues, options) {\n    var o = asCreateObservableOptions(options);\n    return new ObservableMap(initialValues, getEnhancerFromOptions(o), o.name);\n  },\n  set: function set(initialValues, options) {\n    var o = asCreateObservableOptions(options);\n    return new ObservableSet(initialValues, getEnhancerFromOptions(o), o.name);\n  },\n  object: function object(props, decorators, options) {\n    return initObservable(function () {\n      return extendObservable(globalState.useProxies === false || (options == null ? void 0 : options.proxy) === false ? asObservableObject({}, options) : asDynamicObservableObject({}, options), props, decorators);\n    });\n  },\n  ref: /*#__PURE__*/createDecoratorAnnotation(observableRefAnnotation),\n  shallow: /*#__PURE__*/createDecoratorAnnotation(observableShallowAnnotation),\n  deep: observableDecoratorAnnotation,\n  struct: /*#__PURE__*/createDecoratorAnnotation(observableStructAnnotation)\n};\n// eslint-disable-next-line\nvar observable = /*#__PURE__*/assign(createObservable, observableFactories);\n\nvar COMPUTED = \"computed\";\nvar COMPUTED_STRUCT = \"computed.struct\";\nvar computedAnnotation = /*#__PURE__*/createComputedAnnotation(COMPUTED);\nvar computedStructAnnotation = /*#__PURE__*/createComputedAnnotation(COMPUTED_STRUCT, {\n  equals: comparer.structural\n});\n/**\n * Decorator for class properties: @computed get value() { return expr; }.\n * For legacy purposes also invokable as ES5 observable created: `computed(() => expr)`;\n */\nvar computed = function computed(arg1, arg2) {\n  if (is20223Decorator(arg2)) {\n    // @computed (2022.3 Decorators)\n    return computedAnnotation.decorate_20223_(arg1, arg2);\n  }\n  if (isStringish(arg2)) {\n    // @computed\n    return storeAnnotation(arg1, arg2, computedAnnotation);\n  }\n  if (isPlainObject(arg1)) {\n    // @computed({ options })\n    return createDecoratorAnnotation(createComputedAnnotation(COMPUTED, arg1));\n  }\n  // computed(expr, options?)\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isFunction(arg1)) {\n      die(\"First argument to `computed` should be an expression.\");\n    }\n    if (isFunction(arg2)) {\n      die(\"A setter as second argument is no longer supported, use `{ set: fn }` option instead\");\n    }\n  }\n  var opts = isPlainObject(arg2) ? arg2 : {};\n  opts.get = arg1;\n  opts.name || (opts.name = arg1.name || \"\"); /* for generated name */\n  return new ComputedValue(opts);\n};\nObject.assign(computed, computedAnnotation);\ncomputed.struct = /*#__PURE__*/createDecoratorAnnotation(computedStructAnnotation);\n\nvar _getDescriptor$config, _getDescriptor;\n// we don't use globalState for these in order to avoid possible issues with multiple\n// mobx versions\nvar currentActionId = 0;\nvar nextActionId = 1;\nvar isFunctionNameConfigurable = (_getDescriptor$config = (_getDescriptor = /*#__PURE__*/getDescriptor(function () {}, \"name\")) == null ? void 0 : _getDescriptor.configurable) != null ? _getDescriptor$config : false;\n// we can safely recycle this object\nvar tmpNameDescriptor = {\n  value: \"action\",\n  configurable: true,\n  writable: false,\n  enumerable: false\n};\nfunction createAction(actionName, fn, autoAction, ref) {\n  if (autoAction === void 0) {\n    autoAction = false;\n  }\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isFunction(fn)) {\n      die(\"`action` can only be invoked on functions\");\n    }\n    if (typeof actionName !== \"string\" || !actionName) {\n      die(\"actions should have valid names, got: '\" + actionName + \"'\");\n    }\n  }\n  function res() {\n    return executeAction(actionName, autoAction, fn, ref || this, arguments);\n  }\n  res.isMobxAction = true;\n  res.toString = function () {\n    return fn.toString();\n  };\n  if (isFunctionNameConfigurable) {\n    tmpNameDescriptor.value = actionName;\n    defineProperty(res, \"name\", tmpNameDescriptor);\n  }\n  return res;\n}\nfunction executeAction(actionName, canRunAsDerivation, fn, scope, args) {\n  var runInfo = _startAction(actionName, canRunAsDerivation, scope, args);\n  try {\n    return fn.apply(scope, args);\n  } catch (err) {\n    runInfo.error_ = err;\n    throw err;\n  } finally {\n    _endAction(runInfo);\n  }\n}\nfunction _startAction(actionName, canRunAsDerivation,\n// true for autoAction\nscope, args) {\n  var notifySpy_ = process.env.NODE_ENV !== \"production\" && isSpyEnabled() && !!actionName;\n  var startTime_ = 0;\n  if (process.env.NODE_ENV !== \"production\" && notifySpy_) {\n    startTime_ = Date.now();\n    var flattenedArgs = args ? Array.from(args) : EMPTY_ARRAY;\n    spyReportStart({\n      type: ACTION,\n      name: actionName,\n      object: scope,\n      arguments: flattenedArgs\n    });\n  }\n  var prevDerivation_ = globalState.trackingDerivation;\n  var runAsAction = !canRunAsDerivation || !prevDerivation_;\n  startBatch();\n  var prevAllowStateChanges_ = globalState.allowStateChanges; // by default preserve previous allow\n  if (runAsAction) {\n    untrackedStart();\n    prevAllowStateChanges_ = allowStateChangesStart(true);\n  }\n  var prevAllowStateReads_ = allowStateReadsStart(true);\n  var runInfo = {\n    runAsAction_: runAsAction,\n    prevDerivation_: prevDerivation_,\n    prevAllowStateChanges_: prevAllowStateChanges_,\n    prevAllowStateReads_: prevAllowStateReads_,\n    notifySpy_: notifySpy_,\n    startTime_: startTime_,\n    actionId_: nextActionId++,\n    parentActionId_: currentActionId\n  };\n  currentActionId = runInfo.actionId_;\n  return runInfo;\n}\nfunction _endAction(runInfo) {\n  if (currentActionId !== runInfo.actionId_) {\n    die(30);\n  }\n  currentActionId = runInfo.parentActionId_;\n  if (runInfo.error_ !== undefined) {\n    globalState.suppressReactionErrors = true;\n  }\n  allowStateChangesEnd(runInfo.prevAllowStateChanges_);\n  allowStateReadsEnd(runInfo.prevAllowStateReads_);\n  endBatch();\n  if (runInfo.runAsAction_) {\n    untrackedEnd(runInfo.prevDerivation_);\n  }\n  if (process.env.NODE_ENV !== \"production\" && runInfo.notifySpy_) {\n    spyReportEnd({\n      time: Date.now() - runInfo.startTime_\n    });\n  }\n  globalState.suppressReactionErrors = false;\n}\nfunction allowStateChanges(allowStateChanges, func) {\n  var prev = allowStateChangesStart(allowStateChanges);\n  try {\n    return func();\n  } finally {\n    allowStateChangesEnd(prev);\n  }\n}\nfunction allowStateChangesStart(allowStateChanges) {\n  var prev = globalState.allowStateChanges;\n  globalState.allowStateChanges = allowStateChanges;\n  return prev;\n}\nfunction allowStateChangesEnd(prev) {\n  globalState.allowStateChanges = prev;\n}\n\nvar CREATE = \"create\";\nvar ObservableValue = /*#__PURE__*/function (_Atom) {\n  function ObservableValue(value, enhancer, name_, notifySpy, equals) {\n    var _this;\n    if (name_ === void 0) {\n      name_ = process.env.NODE_ENV !== \"production\" ? \"ObservableValue@\" + getNextId() : \"ObservableValue\";\n    }\n    if (notifySpy === void 0) {\n      notifySpy = true;\n    }\n    if (equals === void 0) {\n      equals = comparer[\"default\"];\n    }\n    _this = _Atom.call(this, name_) || this;\n    _this.enhancer = void 0;\n    _this.name_ = void 0;\n    _this.equals = void 0;\n    _this.hasUnreportedChange_ = false;\n    _this.interceptors_ = void 0;\n    _this.changeListeners_ = void 0;\n    _this.value_ = void 0;\n    _this.dehancer = void 0;\n    _this.enhancer = enhancer;\n    _this.name_ = name_;\n    _this.equals = equals;\n    _this.value_ = enhancer(value, undefined, name_);\n    if (process.env.NODE_ENV !== \"production\" && notifySpy && isSpyEnabled()) {\n      var _this$value_;\n      // only notify spy if this is a stand-alone observable\n      spyReport({\n        type: CREATE,\n        object: _this,\n        observableKind: \"value\",\n        debugObjectName: _this.name_,\n        newValue: \"\" + ((_this$value_ = _this.value_) == null ? void 0 : _this$value_.toString())\n      });\n    }\n    return _this;\n  }\n  _inheritsLoose(ObservableValue, _Atom);\n  var _proto = ObservableValue.prototype;\n  _proto.dehanceValue = function dehanceValue(value) {\n    if (this.dehancer !== undefined) {\n      return this.dehancer(value);\n    }\n    return value;\n  };\n  _proto.set = function set(newValue) {\n    var oldValue = this.value_;\n    newValue = this.prepareNewValue_(newValue);\n    if (newValue !== globalState.UNCHANGED) {\n      var notifySpy = isSpyEnabled();\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportStart({\n          type: UPDATE,\n          object: this,\n          observableKind: \"value\",\n          debugObjectName: this.name_,\n          newValue: newValue,\n          oldValue: oldValue\n        });\n      }\n      this.setNewValue_(newValue);\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportEnd();\n      }\n    }\n  };\n  _proto.prepareNewValue_ = function prepareNewValue_(newValue) {\n    checkIfStateModificationsAreAllowed(this);\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        object: this,\n        type: UPDATE,\n        newValue: newValue\n      });\n      if (!change) {\n        return globalState.UNCHANGED;\n      }\n      newValue = change.newValue;\n    }\n    // apply modifier\n    newValue = this.enhancer(newValue, this.value_, this.name_);\n    return this.equals(this.value_, newValue) ? globalState.UNCHANGED : newValue;\n  };\n  _proto.setNewValue_ = function setNewValue_(newValue) {\n    var oldValue = this.value_;\n    this.value_ = newValue;\n    this.reportChanged();\n    if (hasListeners(this)) {\n      notifyListeners(this, {\n        type: UPDATE,\n        object: this,\n        newValue: newValue,\n        oldValue: oldValue\n      });\n    }\n  };\n  _proto.get = function get() {\n    this.reportObserved();\n    return this.dehanceValue(this.value_);\n  };\n  _proto.intercept_ = function intercept_(handler) {\n    return registerInterceptor(this, handler);\n  };\n  _proto.observe_ = function observe_(listener, fireImmediately) {\n    if (fireImmediately) {\n      listener({\n        observableKind: \"value\",\n        debugObjectName: this.name_,\n        object: this,\n        type: UPDATE,\n        newValue: this.value_,\n        oldValue: undefined\n      });\n    }\n    return registerListener(this, listener);\n  };\n  _proto.raw = function raw() {\n    // used by MST ot get undehanced value\n    return this.value_;\n  };\n  _proto.toJSON = function toJSON() {\n    return this.get();\n  };\n  _proto.toString = function toString() {\n    return this.name_ + \"[\" + this.value_ + \"]\";\n  };\n  _proto.valueOf = function valueOf() {\n    return toPrimitive(this.get());\n  };\n  _proto[Symbol.toPrimitive] = function () {\n    return this.valueOf();\n  };\n  return ObservableValue;\n}(Atom);\nvar isObservableValue = /*#__PURE__*/createInstanceofPredicate(\"ObservableValue\", ObservableValue);\n\n/**\n * A node in the state dependency root that observes other nodes, and can be observed itself.\n *\n * ComputedValue will remember the result of the computation for the duration of the batch, or\n * while being observed.\n *\n * During this time it will recompute only when one of its direct dependencies changed,\n * but only when it is being accessed with `ComputedValue.get()`.\n *\n * Implementation description:\n * 1. First time it's being accessed it will compute and remember result\n *    give back remembered result until 2. happens\n * 2. First time any deep dependency change, propagate POSSIBLY_STALE to all observers, wait for 3.\n * 3. When it's being accessed, recompute if any shallow dependency changed.\n *    if result changed: propagate STALE to all observers, that were POSSIBLY_STALE from the last step.\n *    go to step 2. either way\n *\n * If at any point it's outside batch and it isn't observed: reset everything and go to 1.\n */\nvar ComputedValue = /*#__PURE__*/function () {\n  /**\n   * Create a new computed value based on a function expression.\n   *\n   * The `name` property is for debug purposes only.\n   *\n   * The `equals` property specifies the comparer function to use to determine if a newly produced\n   * value differs from the previous value. Two comparers are provided in the library; `defaultComparer`\n   * compares based on identity comparison (===), and `structuralComparer` deeply compares the structure.\n   * Structural comparison can be convenient if you always produce a new aggregated object and\n   * don't want to notify observers if it is structurally the same.\n   * This is useful for working with vectors, mouse coordinates etc.\n   */\n  function ComputedValue(options) {\n    this.dependenciesState_ = IDerivationState_.NOT_TRACKING_;\n    this.observing_ = [];\n    // nodes we are looking at. Our value depends on these nodes\n    this.newObserving_ = null;\n    // during tracking it's an array with new observed observers\n    this.observers_ = new Set();\n    this.runId_ = 0;\n    this.lastAccessedBy_ = 0;\n    this.lowestObserverState_ = IDerivationState_.UP_TO_DATE_;\n    this.unboundDepsCount_ = 0;\n    this.value_ = new CaughtException(null);\n    this.name_ = void 0;\n    this.triggeredBy_ = void 0;\n    this.flags_ = 0;\n    this.derivation = void 0;\n    // N.B: unminified as it is used by MST\n    this.setter_ = void 0;\n    this.isTracing_ = TraceMode.NONE;\n    this.scope_ = void 0;\n    this.equals_ = void 0;\n    this.requiresReaction_ = void 0;\n    this.keepAlive_ = void 0;\n    this.onBOL = void 0;\n    this.onBUOL = void 0;\n    if (!options.get) {\n      die(31);\n    }\n    this.derivation = options.get;\n    this.name_ = options.name || (process.env.NODE_ENV !== \"production\" ? \"ComputedValue@\" + getNextId() : \"ComputedValue\");\n    if (options.set) {\n      this.setter_ = createAction(process.env.NODE_ENV !== \"production\" ? this.name_ + \"-setter\" : \"ComputedValue-setter\", options.set);\n    }\n    this.equals_ = options.equals || (options.compareStructural || options.struct ? comparer.structural : comparer[\"default\"]);\n    this.scope_ = options.context;\n    this.requiresReaction_ = options.requiresReaction;\n    this.keepAlive_ = !!options.keepAlive;\n  }\n  var _proto = ComputedValue.prototype;\n  _proto.onBecomeStale_ = function onBecomeStale_() {\n    propagateMaybeChanged(this);\n  };\n  _proto.onBO = function onBO() {\n    if (this.onBOL) {\n      this.onBOL.forEach(function (listener) {\n        return listener();\n      });\n    }\n  };\n  _proto.onBUO = function onBUO() {\n    if (this.onBUOL) {\n      this.onBUOL.forEach(function (listener) {\n        return listener();\n      });\n    }\n  }\n  // to check for cycles\n;\n  /**\n   * Returns the current value of this computed value.\n   * Will evaluate its computation first if needed.\n   */\n  _proto.get = function get() {\n    if (this.isComputing) {\n      die(32, this.name_, this.derivation);\n    }\n    if (globalState.inBatch === 0 &&\n    // !globalState.trackingDerivatpion &&\n    this.observers_.size === 0 && !this.keepAlive_) {\n      if (shouldCompute(this)) {\n        this.warnAboutUntrackedRead_();\n        startBatch(); // See perf test 'computed memoization'\n        this.value_ = this.computeValue_(false);\n        endBatch();\n      }\n    } else {\n      reportObserved(this);\n      if (shouldCompute(this)) {\n        var prevTrackingContext = globalState.trackingContext;\n        if (this.keepAlive_ && !prevTrackingContext) {\n          globalState.trackingContext = this;\n        }\n        if (this.trackAndCompute()) {\n          propagateChangeConfirmed(this);\n        }\n        globalState.trackingContext = prevTrackingContext;\n      }\n    }\n    var result = this.value_;\n    if (isCaughtException(result)) {\n      throw result.cause;\n    }\n    return result;\n  };\n  _proto.set = function set(value) {\n    if (this.setter_) {\n      if (this.isRunningSetter) {\n        die(33, this.name_);\n      }\n      this.isRunningSetter = true;\n      try {\n        this.setter_.call(this.scope_, value);\n      } finally {\n        this.isRunningSetter = false;\n      }\n    } else {\n      die(34, this.name_);\n    }\n  };\n  _proto.trackAndCompute = function trackAndCompute() {\n    // N.B: unminified as it is used by MST\n    var oldValue = this.value_;\n    var wasSuspended = /* see #1208 */this.dependenciesState_ === IDerivationState_.NOT_TRACKING_;\n    var newValue = this.computeValue_(true);\n    var changed = wasSuspended || isCaughtException(oldValue) || isCaughtException(newValue) || !this.equals_(oldValue, newValue);\n    if (changed) {\n      this.value_ = newValue;\n      if (process.env.NODE_ENV !== \"production\" && isSpyEnabled()) {\n        spyReport({\n          observableKind: \"computed\",\n          debugObjectName: this.name_,\n          object: this.scope_,\n          type: \"update\",\n          oldValue: oldValue,\n          newValue: newValue\n        });\n      }\n    }\n    return changed;\n  };\n  _proto.computeValue_ = function computeValue_(track) {\n    this.isComputing = true;\n    // don't allow state changes during computation\n    var prev = allowStateChangesStart(false);\n    var res;\n    if (track) {\n      res = trackDerivedFunction(this, this.derivation, this.scope_);\n    } else {\n      if (globalState.disableErrorBoundaries === true) {\n        res = this.derivation.call(this.scope_);\n      } else {\n        try {\n          res = this.derivation.call(this.scope_);\n        } catch (e) {\n          res = new CaughtException(e);\n        }\n      }\n    }\n    allowStateChangesEnd(prev);\n    this.isComputing = false;\n    return res;\n  };\n  _proto.suspend_ = function suspend_() {\n    if (!this.keepAlive_) {\n      clearObserving(this);\n      this.value_ = undefined; // don't hold on to computed value!\n      if (process.env.NODE_ENV !== \"production\" && this.isTracing_ !== TraceMode.NONE) {\n        console.log(\"[mobx.trace] Computed value '\" + this.name_ + \"' was suspended and it will recompute on the next access.\");\n      }\n    }\n  };\n  _proto.observe_ = function observe_(listener, fireImmediately) {\n    var _this = this;\n    var firstTime = true;\n    var prevValue = undefined;\n    return autorun(function () {\n      // TODO: why is this in a different place than the spyReport() function? in all other observables it's called in the same place\n      var newValue = _this.get();\n      if (!firstTime || fireImmediately) {\n        var prevU = untrackedStart();\n        listener({\n          observableKind: \"computed\",\n          debugObjectName: _this.name_,\n          type: UPDATE,\n          object: _this,\n          newValue: newValue,\n          oldValue: prevValue\n        });\n        untrackedEnd(prevU);\n      }\n      firstTime = false;\n      prevValue = newValue;\n    });\n  };\n  _proto.warnAboutUntrackedRead_ = function warnAboutUntrackedRead_() {\n    if (!(process.env.NODE_ENV !== \"production\")) {\n      return;\n    }\n    if (this.isTracing_ !== TraceMode.NONE) {\n      console.log(\"[mobx.trace] Computed value '\" + this.name_ + \"' is being read outside a reactive context. Doing a full recompute.\");\n    }\n    if (typeof this.requiresReaction_ === \"boolean\" ? this.requiresReaction_ : globalState.computedRequiresReaction) {\n      console.warn(\"[mobx] Computed value '\" + this.name_ + \"' is being read outside a reactive context. Doing a full recompute.\");\n    }\n  };\n  _proto.toString = function toString() {\n    return this.name_ + \"[\" + this.derivation.toString() + \"]\";\n  };\n  _proto.valueOf = function valueOf() {\n    return toPrimitive(this.get());\n  };\n  _proto[Symbol.toPrimitive] = function () {\n    return this.valueOf();\n  };\n  return _createClass(ComputedValue, [{\n    key: \"isComputing\",\n    get: function get() {\n      return getFlag(this.flags_, ComputedValue.isComputingMask_);\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, ComputedValue.isComputingMask_, newValue);\n    }\n  }, {\n    key: \"isRunningSetter\",\n    get: function get() {\n      return getFlag(this.flags_, ComputedValue.isRunningSetterMask_);\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, ComputedValue.isRunningSetterMask_, newValue);\n    }\n  }, {\n    key: \"isBeingObserved\",\n    get: function get() {\n      return getFlag(this.flags_, ComputedValue.isBeingObservedMask_);\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, ComputedValue.isBeingObservedMask_, newValue);\n    }\n  }, {\n    key: \"isPendingUnobservation\",\n    get: function get() {\n      return getFlag(this.flags_, ComputedValue.isPendingUnobservationMask_);\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, ComputedValue.isPendingUnobservationMask_, newValue);\n    }\n  }, {\n    key: \"diffValue\",\n    get: function get() {\n      return getFlag(this.flags_, ComputedValue.diffValueMask_) ? 1 : 0;\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, ComputedValue.diffValueMask_, newValue === 1 ? true : false);\n    }\n  }]);\n}();\nComputedValue.isComputingMask_ = 1;\nComputedValue.isRunningSetterMask_ = 2;\nComputedValue.isBeingObservedMask_ = 4;\nComputedValue.isPendingUnobservationMask_ = 8;\nComputedValue.diffValueMask_ = 16;\nvar isComputedValue = /*#__PURE__*/createInstanceofPredicate(\"ComputedValue\", ComputedValue);\n\nvar IDerivationState_;\n(function (IDerivationState_) {\n  // before being run or (outside batch and not being observed)\n  // at this point derivation is not holding any data about dependency tree\n  IDerivationState_[IDerivationState_[\"NOT_TRACKING_\"] = -1] = \"NOT_TRACKING_\";\n  // no shallow dependency changed since last computation\n  // won't recalculate derivation\n  // this is what makes mobx fast\n  IDerivationState_[IDerivationState_[\"UP_TO_DATE_\"] = 0] = \"UP_TO_DATE_\";\n  // some deep dependency changed, but don't know if shallow dependency changed\n  // will require to check first if UP_TO_DATE or POSSIBLY_STALE\n  // currently only ComputedValue will propagate POSSIBLY_STALE\n  //\n  // having this state is second big optimization:\n  // don't have to recompute on every dependency change, but only when it's needed\n  IDerivationState_[IDerivationState_[\"POSSIBLY_STALE_\"] = 1] = \"POSSIBLY_STALE_\";\n  // A shallow dependency has changed since last computation and the derivation\n  // will need to recompute when it's needed next.\n  IDerivationState_[IDerivationState_[\"STALE_\"] = 2] = \"STALE_\";\n})(IDerivationState_ || (IDerivationState_ = {}));\nvar TraceMode;\n(function (TraceMode) {\n  TraceMode[TraceMode[\"NONE\"] = 0] = \"NONE\";\n  TraceMode[TraceMode[\"LOG\"] = 1] = \"LOG\";\n  TraceMode[TraceMode[\"BREAK\"] = 2] = \"BREAK\";\n})(TraceMode || (TraceMode = {}));\nvar CaughtException = function CaughtException(cause) {\n  this.cause = void 0;\n  this.cause = cause;\n  // Empty\n};\nfunction isCaughtException(e) {\n  return e instanceof CaughtException;\n}\n/**\n * Finds out whether any dependency of the derivation has actually changed.\n * If dependenciesState is 1 then it will recalculate dependencies,\n * if any dependency changed it will propagate it by changing dependenciesState to 2.\n *\n * By iterating over the dependencies in the same order that they were reported and\n * stopping on the first change, all the recalculations are only called for ComputedValues\n * that will be tracked by derivation. That is because we assume that if the first x\n * dependencies of the derivation doesn't change then the derivation should run the same way\n * up until accessing x-th dependency.\n */\nfunction shouldCompute(derivation) {\n  switch (derivation.dependenciesState_) {\n    case IDerivationState_.UP_TO_DATE_:\n      return false;\n    case IDerivationState_.NOT_TRACKING_:\n    case IDerivationState_.STALE_:\n      return true;\n    case IDerivationState_.POSSIBLY_STALE_:\n      {\n        // state propagation can occur outside of action/reactive context #2195\n        var prevAllowStateReads = allowStateReadsStart(true);\n        var prevUntracked = untrackedStart(); // no need for those computeds to be reported, they will be picked up in trackDerivedFunction.\n        var obs = derivation.observing_,\n          l = obs.length;\n        for (var i = 0; i < l; i++) {\n          var obj = obs[i];\n          if (isComputedValue(obj)) {\n            if (globalState.disableErrorBoundaries) {\n              obj.get();\n            } else {\n              try {\n                obj.get();\n              } catch (e) {\n                // we are not interested in the value *or* exception at this moment, but if there is one, notify all\n                untrackedEnd(prevUntracked);\n                allowStateReadsEnd(prevAllowStateReads);\n                return true;\n              }\n            }\n            // if ComputedValue `obj` actually changed it will be computed and propagated to its observers.\n            // and `derivation` is an observer of `obj`\n            // invariantShouldCompute(derivation)\n            if (derivation.dependenciesState_ === IDerivationState_.STALE_) {\n              untrackedEnd(prevUntracked);\n              allowStateReadsEnd(prevAllowStateReads);\n              return true;\n            }\n          }\n        }\n        changeDependenciesStateTo0(derivation);\n        untrackedEnd(prevUntracked);\n        allowStateReadsEnd(prevAllowStateReads);\n        return false;\n      }\n  }\n}\nfunction isComputingDerivation() {\n  return globalState.trackingDerivation !== null; // filter out actions inside computations\n}\nfunction checkIfStateModificationsAreAllowed(atom) {\n  if (!(process.env.NODE_ENV !== \"production\")) {\n    return;\n  }\n  var hasObservers = atom.observers_.size > 0;\n  // Should not be possible to change observed state outside strict mode, except during initialization, see #563\n  if (!globalState.allowStateChanges && (hasObservers || globalState.enforceActions === \"always\")) {\n    console.warn(\"[MobX] \" + (globalState.enforceActions ? \"Since strict-mode is enabled, changing (observed) observable values without using an action is not allowed. Tried to modify: \" : \"Side effects like changing state are not allowed at this point. Are you trying to modify state from, for example, a computed value or the render function of a React component? You can wrap side effects in 'runInAction' (or decorate functions with 'action') if needed. Tried to modify: \") + atom.name_);\n  }\n}\nfunction checkIfStateReadsAreAllowed(observable) {\n  if (process.env.NODE_ENV !== \"production\" && !globalState.allowStateReads && globalState.observableRequiresReaction) {\n    console.warn(\"[mobx] Observable '\" + observable.name_ + \"' being read outside a reactive context.\");\n  }\n}\n/**\n * Executes the provided function `f` and tracks which observables are being accessed.\n * The tracking information is stored on the `derivation` object and the derivation is registered\n * as observer of any of the accessed observables.\n */\nfunction trackDerivedFunction(derivation, f, context) {\n  var prevAllowStateReads = allowStateReadsStart(true);\n  changeDependenciesStateTo0(derivation);\n  // Preallocate array; will be trimmed by bindDependencies.\n  derivation.newObserving_ = new Array(\n  // Reserve constant space for initial dependencies, dynamic space otherwise.\n  // See https://github.com/mobxjs/mobx/pull/3833\n  derivation.runId_ === 0 ? 100 : derivation.observing_.length);\n  derivation.unboundDepsCount_ = 0;\n  derivation.runId_ = ++globalState.runId;\n  var prevTracking = globalState.trackingDerivation;\n  globalState.trackingDerivation = derivation;\n  globalState.inBatch++;\n  var result;\n  if (globalState.disableErrorBoundaries === true) {\n    result = f.call(context);\n  } else {\n    try {\n      result = f.call(context);\n    } catch (e) {\n      result = new CaughtException(e);\n    }\n  }\n  globalState.inBatch--;\n  globalState.trackingDerivation = prevTracking;\n  bindDependencies(derivation);\n  warnAboutDerivationWithoutDependencies(derivation);\n  allowStateReadsEnd(prevAllowStateReads);\n  return result;\n}\nfunction warnAboutDerivationWithoutDependencies(derivation) {\n  if (!(process.env.NODE_ENV !== \"production\")) {\n    return;\n  }\n  if (derivation.observing_.length !== 0) {\n    return;\n  }\n  if (typeof derivation.requiresObservable_ === \"boolean\" ? derivation.requiresObservable_ : globalState.reactionRequiresObservable) {\n    console.warn(\"[mobx] Derivation '\" + derivation.name_ + \"' is created/updated without reading any observable value.\");\n  }\n}\n/**\n * diffs newObserving with observing.\n * update observing to be newObserving with unique observables\n * notify observers that become observed/unobserved\n */\nfunction bindDependencies(derivation) {\n  // invariant(derivation.dependenciesState !== IDerivationState.NOT_TRACKING, \"INTERNAL ERROR bindDependencies expects derivation.dependenciesState !== -1\");\n  var prevObserving = derivation.observing_;\n  var observing = derivation.observing_ = derivation.newObserving_;\n  var lowestNewObservingDerivationState = IDerivationState_.UP_TO_DATE_;\n  // Go through all new observables and check diffValue: (this list can contain duplicates):\n  //   0: first occurrence, change to 1 and keep it\n  //   1: extra occurrence, drop it\n  var i0 = 0,\n    l = derivation.unboundDepsCount_;\n  for (var i = 0; i < l; i++) {\n    var dep = observing[i];\n    if (dep.diffValue === 0) {\n      dep.diffValue = 1;\n      if (i0 !== i) {\n        observing[i0] = dep;\n      }\n      i0++;\n    }\n    // Upcast is 'safe' here, because if dep is IObservable, `dependenciesState` will be undefined,\n    // not hitting the condition\n    if (dep.dependenciesState_ > lowestNewObservingDerivationState) {\n      lowestNewObservingDerivationState = dep.dependenciesState_;\n    }\n  }\n  observing.length = i0;\n  derivation.newObserving_ = null; // newObserving shouldn't be needed outside tracking (statement moved down to work around FF bug, see #614)\n  // Go through all old observables and check diffValue: (it is unique after last bindDependencies)\n  //   0: it's not in new observables, unobserve it\n  //   1: it keeps being observed, don't want to notify it. change to 0\n  l = prevObserving.length;\n  while (l--) {\n    var _dep = prevObserving[l];\n    if (_dep.diffValue === 0) {\n      removeObserver(_dep, derivation);\n    }\n    _dep.diffValue = 0;\n  }\n  // Go through all new observables and check diffValue: (now it should be unique)\n  //   0: it was set to 0 in last loop. don't need to do anything.\n  //   1: it wasn't observed, let's observe it. set back to 0\n  while (i0--) {\n    var _dep2 = observing[i0];\n    if (_dep2.diffValue === 1) {\n      _dep2.diffValue = 0;\n      addObserver(_dep2, derivation);\n    }\n  }\n  // Some new observed derivations may become stale during this derivation computation\n  // so they have had no chance to propagate staleness (#916)\n  if (lowestNewObservingDerivationState !== IDerivationState_.UP_TO_DATE_) {\n    derivation.dependenciesState_ = lowestNewObservingDerivationState;\n    derivation.onBecomeStale_();\n  }\n}\nfunction clearObserving(derivation) {\n  // invariant(globalState.inBatch > 0, \"INTERNAL ERROR clearObserving should be called only inside batch\");\n  var obs = derivation.observing_;\n  derivation.observing_ = [];\n  var i = obs.length;\n  while (i--) {\n    removeObserver(obs[i], derivation);\n  }\n  derivation.dependenciesState_ = IDerivationState_.NOT_TRACKING_;\n}\nfunction untracked(action) {\n  var prev = untrackedStart();\n  try {\n    return action();\n  } finally {\n    untrackedEnd(prev);\n  }\n}\nfunction untrackedStart() {\n  var prev = globalState.trackingDerivation;\n  globalState.trackingDerivation = null;\n  return prev;\n}\nfunction untrackedEnd(prev) {\n  globalState.trackingDerivation = prev;\n}\nfunction allowStateReadsStart(allowStateReads) {\n  var prev = globalState.allowStateReads;\n  globalState.allowStateReads = allowStateReads;\n  return prev;\n}\nfunction allowStateReadsEnd(prev) {\n  globalState.allowStateReads = prev;\n}\n/**\n * needed to keep `lowestObserverState` correct. when changing from (2 or 1) to 0\n *\n */\nfunction changeDependenciesStateTo0(derivation) {\n  if (derivation.dependenciesState_ === IDerivationState_.UP_TO_DATE_) {\n    return;\n  }\n  derivation.dependenciesState_ = IDerivationState_.UP_TO_DATE_;\n  var obs = derivation.observing_;\n  var i = obs.length;\n  while (i--) {\n    obs[i].lowestObserverState_ = IDerivationState_.UP_TO_DATE_;\n  }\n}\n\n/**\n * These values will persist if global state is reset\n */\nvar persistentKeys = [\"mobxGuid\", \"spyListeners\", \"enforceActions\", \"computedRequiresReaction\", \"reactionRequiresObservable\", \"observableRequiresReaction\", \"allowStateReads\", \"disableErrorBoundaries\", \"runId\", \"UNCHANGED\", \"useProxies\"];\nvar MobXGlobals = function MobXGlobals() {\n  /**\n   * MobXGlobals version.\n   * MobX compatiblity with other versions loaded in memory as long as this version matches.\n   * It indicates that the global state still stores similar information\n   *\n   * N.B: this version is unrelated to the package version of MobX, and is only the version of the\n   * internal state storage of MobX, and can be the same across many different package versions\n   */\n  this.version = 6;\n  /**\n   * globally unique token to signal unchanged\n   */\n  this.UNCHANGED = {};\n  /**\n   * Currently running derivation\n   */\n  this.trackingDerivation = null;\n  /**\n   * Currently running reaction. This determines if we currently have a reactive context.\n   * (Tracking derivation is also set for temporal tracking of computed values inside actions,\n   * but trackingReaction can only be set by a form of Reaction)\n   */\n  this.trackingContext = null;\n  /**\n   * Each time a derivation is tracked, it is assigned a unique run-id\n   */\n  this.runId = 0;\n  /**\n   * 'guid' for general purpose. Will be persisted amongst resets.\n   */\n  this.mobxGuid = 0;\n  /**\n   * Are we in a batch block? (and how many of them)\n   */\n  this.inBatch = 0;\n  /**\n   * Observables that don't have observers anymore, and are about to be\n   * suspended, unless somebody else accesses it in the same batch\n   *\n   * @type {IObservable[]}\n   */\n  this.pendingUnobservations = [];\n  /**\n   * List of scheduled, not yet executed, reactions.\n   */\n  this.pendingReactions = [];\n  /**\n   * Are we currently processing reactions?\n   */\n  this.isRunningReactions = false;\n  /**\n   * Is it allowed to change observables at this point?\n   * In general, MobX doesn't allow that when running computations and React.render.\n   * To ensure that those functions stay pure.\n   */\n  this.allowStateChanges = false;\n  /**\n   * Is it allowed to read observables at this point?\n   * Used to hold the state needed for `observableRequiresReaction`\n   */\n  this.allowStateReads = true;\n  /**\n   * If strict mode is enabled, state changes are by default not allowed\n   */\n  this.enforceActions = true;\n  /**\n   * Spy callbacks\n   */\n  this.spyListeners = [];\n  /**\n   * Globally attached error handlers that react specifically to errors in reactions\n   */\n  this.globalReactionErrorHandlers = [];\n  /**\n   * Warn if computed values are accessed outside a reactive context\n   */\n  this.computedRequiresReaction = false;\n  /**\n   * (Experimental)\n   * Warn if you try to create to derivation / reactive context without accessing any observable.\n   */\n  this.reactionRequiresObservable = false;\n  /**\n   * (Experimental)\n   * Warn if observables are accessed outside a reactive context\n   */\n  this.observableRequiresReaction = false;\n  /*\n   * Don't catch and rethrow exceptions. This is useful for inspecting the state of\n   * the stack when an exception occurs while debugging.\n   */\n  this.disableErrorBoundaries = false;\n  /*\n   * If true, we are already handling an exception in an action. Any errors in reactions should be suppressed, as\n   * they are not the cause, see: https://github.com/mobxjs/mobx/issues/1836\n   */\n  this.suppressReactionErrors = false;\n  this.useProxies = true;\n  /*\n   * print warnings about code that would fail if proxies weren't available\n   */\n  this.verifyProxies = false;\n  /**\n   * False forces all object's descriptors to\n   * writable: true\n   * configurable: true\n   */\n  this.safeDescriptors = true;\n};\nvar canMergeGlobalState = true;\nvar isolateCalled = false;\nvar globalState = /*#__PURE__*/function () {\n  var global = /*#__PURE__*/getGlobal();\n  if (global.__mobxInstanceCount > 0 && !global.__mobxGlobals) {\n    canMergeGlobalState = false;\n  }\n  if (global.__mobxGlobals && global.__mobxGlobals.version !== new MobXGlobals().version) {\n    canMergeGlobalState = false;\n  }\n  if (!canMergeGlobalState) {\n    // Because this is a IIFE we need to let isolateCalled a chance to change\n    // so we run it after the event loop completed at least 1 iteration\n    setTimeout(function () {\n      if (!isolateCalled) {\n        die(35);\n      }\n    }, 1);\n    return new MobXGlobals();\n  } else if (global.__mobxGlobals) {\n    global.__mobxInstanceCount += 1;\n    if (!global.__mobxGlobals.UNCHANGED) {\n      global.__mobxGlobals.UNCHANGED = {};\n    } // make merge backward compatible\n    return global.__mobxGlobals;\n  } else {\n    global.__mobxInstanceCount = 1;\n    return global.__mobxGlobals = /*#__PURE__*/new MobXGlobals();\n  }\n}();\nfunction isolateGlobalState() {\n  if (globalState.pendingReactions.length || globalState.inBatch || globalState.isRunningReactions) {\n    die(36);\n  }\n  isolateCalled = true;\n  if (canMergeGlobalState) {\n    var global = getGlobal();\n    if (--global.__mobxInstanceCount === 0) {\n      global.__mobxGlobals = undefined;\n    }\n    globalState = new MobXGlobals();\n  }\n}\nfunction getGlobalState() {\n  return globalState;\n}\n/**\n * For testing purposes only; this will break the internal state of existing observables,\n * but can be used to get back at a stable state after throwing errors\n */\nfunction resetGlobalState() {\n  var defaultGlobals = new MobXGlobals();\n  for (var key in defaultGlobals) {\n    if (persistentKeys.indexOf(key) === -1) {\n      globalState[key] = defaultGlobals[key];\n    }\n  }\n  globalState.allowStateChanges = !globalState.enforceActions;\n}\n\nfunction hasObservers(observable) {\n  return observable.observers_ && observable.observers_.size > 0;\n}\nfunction getObservers(observable) {\n  return observable.observers_;\n}\n// function invariantObservers(observable: IObservable) {\n//     const list = observable.observers\n//     const map = observable.observersIndexes\n//     const l = list.length\n//     for (let i = 0; i < l; i++) {\n//         const id = list[i].__mapid\n//         if (i) {\n//             invariant(map[id] === i, \"INTERNAL ERROR maps derivation.__mapid to index in list\") // for performance\n//         } else {\n//             invariant(!(id in map), \"INTERNAL ERROR observer on index 0 shouldn't be held in map.\") // for performance\n//         }\n//     }\n//     invariant(\n//         list.length === 0 || Object.keys(map).length === list.length - 1,\n//         \"INTERNAL ERROR there is no junk in map\"\n//     )\n// }\nfunction addObserver(observable, node) {\n  // invariant(node.dependenciesState !== -1, \"INTERNAL ERROR, can add only dependenciesState !== -1\");\n  // invariant(observable._observers.indexOf(node) === -1, \"INTERNAL ERROR add already added node\");\n  // invariantObservers(observable);\n  observable.observers_.add(node);\n  if (observable.lowestObserverState_ > node.dependenciesState_) {\n    observable.lowestObserverState_ = node.dependenciesState_;\n  }\n  // invariantObservers(observable);\n  // invariant(observable._observers.indexOf(node) !== -1, \"INTERNAL ERROR didn't add node\");\n}\nfunction removeObserver(observable, node) {\n  // invariant(globalState.inBatch > 0, \"INTERNAL ERROR, remove should be called only inside batch\");\n  // invariant(observable._observers.indexOf(node) !== -1, \"INTERNAL ERROR remove already removed node\");\n  // invariantObservers(observable);\n  observable.observers_[\"delete\"](node);\n  if (observable.observers_.size === 0) {\n    // deleting last observer\n    queueForUnobservation(observable);\n  }\n  // invariantObservers(observable);\n  // invariant(observable._observers.indexOf(node) === -1, \"INTERNAL ERROR remove already removed node2\");\n}\nfunction queueForUnobservation(observable) {\n  if (observable.isPendingUnobservation === false) {\n    // invariant(observable._observers.length === 0, \"INTERNAL ERROR, should only queue for unobservation unobserved observables\");\n    observable.isPendingUnobservation = true;\n    globalState.pendingUnobservations.push(observable);\n  }\n}\n/**\n * Batch starts a transaction, at least for purposes of memoizing ComputedValues when nothing else does.\n * During a batch `onBecomeUnobserved` will be called at most once per observable.\n * Avoids unnecessary recalculations.\n */\nfunction startBatch() {\n  globalState.inBatch++;\n}\nfunction endBatch() {\n  if (--globalState.inBatch === 0) {\n    runReactions();\n    // the batch is actually about to finish, all unobserving should happen here.\n    var list = globalState.pendingUnobservations;\n    for (var i = 0; i < list.length; i++) {\n      var observable = list[i];\n      observable.isPendingUnobservation = false;\n      if (observable.observers_.size === 0) {\n        if (observable.isBeingObserved) {\n          // if this observable had reactive observers, trigger the hooks\n          observable.isBeingObserved = false;\n          observable.onBUO();\n        }\n        if (observable instanceof ComputedValue) {\n          // computed values are automatically teared down when the last observer leaves\n          // this process happens recursively, this computed might be the last observabe of another, etc..\n          observable.suspend_();\n        }\n      }\n    }\n    globalState.pendingUnobservations = [];\n  }\n}\nfunction reportObserved(observable) {\n  checkIfStateReadsAreAllowed(observable);\n  var derivation = globalState.trackingDerivation;\n  if (derivation !== null) {\n    /**\n     * Simple optimization, give each derivation run an unique id (runId)\n     * Check if last time this observable was accessed the same runId is used\n     * if this is the case, the relation is already known\n     */\n    if (derivation.runId_ !== observable.lastAccessedBy_) {\n      observable.lastAccessedBy_ = derivation.runId_;\n      // Tried storing newObserving, or observing, or both as Set, but performance didn't come close...\n      derivation.newObserving_[derivation.unboundDepsCount_++] = observable;\n      if (!observable.isBeingObserved && globalState.trackingContext) {\n        observable.isBeingObserved = true;\n        observable.onBO();\n      }\n    }\n    return observable.isBeingObserved;\n  } else if (observable.observers_.size === 0 && globalState.inBatch > 0) {\n    queueForUnobservation(observable);\n  }\n  return false;\n}\n// function invariantLOS(observable: IObservable, msg: string) {\n//     // it's expensive so better not run it in produciton. but temporarily helpful for testing\n//     const min = getObservers(observable).reduce((a, b) => Math.min(a, b.dependenciesState), 2)\n//     if (min >= observable.lowestObserverState) return // <- the only assumption about `lowestObserverState`\n//     throw new Error(\n//         \"lowestObserverState is wrong for \" +\n//             msg +\n//             \" because \" +\n//             min +\n//             \" < \" +\n//             observable.lowestObserverState\n//     )\n// }\n/**\n * NOTE: current propagation mechanism will in case of self reruning autoruns behave unexpectedly\n * It will propagate changes to observers from previous run\n * It's hard or maybe impossible (with reasonable perf) to get it right with current approach\n * Hopefully self reruning autoruns aren't a feature people should depend on\n * Also most basic use cases should be ok\n */\n// Called by Atom when its value changes\nfunction propagateChanged(observable) {\n  // invariantLOS(observable, \"changed start\");\n  if (observable.lowestObserverState_ === IDerivationState_.STALE_) {\n    return;\n  }\n  observable.lowestObserverState_ = IDerivationState_.STALE_;\n  // Ideally we use for..of here, but the downcompiled version is really slow...\n  observable.observers_.forEach(function (d) {\n    if (d.dependenciesState_ === IDerivationState_.UP_TO_DATE_) {\n      if (process.env.NODE_ENV !== \"production\" && d.isTracing_ !== TraceMode.NONE) {\n        logTraceInfo(d, observable);\n      }\n      d.onBecomeStale_();\n    }\n    d.dependenciesState_ = IDerivationState_.STALE_;\n  });\n  // invariantLOS(observable, \"changed end\");\n}\n// Called by ComputedValue when it recalculate and its value changed\nfunction propagateChangeConfirmed(observable) {\n  // invariantLOS(observable, \"confirmed start\");\n  if (observable.lowestObserverState_ === IDerivationState_.STALE_) {\n    return;\n  }\n  observable.lowestObserverState_ = IDerivationState_.STALE_;\n  observable.observers_.forEach(function (d) {\n    if (d.dependenciesState_ === IDerivationState_.POSSIBLY_STALE_) {\n      d.dependenciesState_ = IDerivationState_.STALE_;\n      if (process.env.NODE_ENV !== \"production\" && d.isTracing_ !== TraceMode.NONE) {\n        logTraceInfo(d, observable);\n      }\n    } else if (d.dependenciesState_ === IDerivationState_.UP_TO_DATE_ // this happens during computing of `d`, just keep lowestObserverState up to date.\n    ) {\n      observable.lowestObserverState_ = IDerivationState_.UP_TO_DATE_;\n    }\n  });\n  // invariantLOS(observable, \"confirmed end\");\n}\n// Used by computed when its dependency changed, but we don't wan't to immediately recompute.\nfunction propagateMaybeChanged(observable) {\n  // invariantLOS(observable, \"maybe start\");\n  if (observable.lowestObserverState_ !== IDerivationState_.UP_TO_DATE_) {\n    return;\n  }\n  observable.lowestObserverState_ = IDerivationState_.POSSIBLY_STALE_;\n  observable.observers_.forEach(function (d) {\n    if (d.dependenciesState_ === IDerivationState_.UP_TO_DATE_) {\n      d.dependenciesState_ = IDerivationState_.POSSIBLY_STALE_;\n      d.onBecomeStale_();\n    }\n  });\n  // invariantLOS(observable, \"maybe end\");\n}\nfunction logTraceInfo(derivation, observable) {\n  console.log(\"[mobx.trace] '\" + derivation.name_ + \"' is invalidated due to a change in: '\" + observable.name_ + \"'\");\n  if (derivation.isTracing_ === TraceMode.BREAK) {\n    var lines = [];\n    printDepTree(getDependencyTree(derivation), lines, 1);\n    // prettier-ignore\n    new Function(\"debugger;\\n/*\\nTracing '\" + derivation.name_ + \"'\\n\\nYou are entering this break point because derivation '\" + derivation.name_ + \"' is being traced and '\" + observable.name_ + \"' is now forcing it to update.\\nJust follow the stacktrace you should now see in the devtools to see precisely what piece of your code is causing this update\\nThe stackframe you are looking for is at least ~6-8 stack-frames up.\\n\\n\" + (derivation instanceof ComputedValue ? derivation.derivation.toString().replace(/[*]\\//g, \"/\") : \"\") + \"\\n\\nThe dependencies for this derivation are:\\n\\n\" + lines.join(\"\\n\") + \"\\n*/\\n    \")();\n  }\n}\nfunction printDepTree(tree, lines, depth) {\n  if (lines.length >= 1000) {\n    lines.push(\"(and many more)\");\n    return;\n  }\n  lines.push(\"\" + \"\\t\".repeat(depth - 1) + tree.name);\n  if (tree.dependencies) {\n    tree.dependencies.forEach(function (child) {\n      return printDepTree(child, lines, depth + 1);\n    });\n  }\n}\n\nvar Reaction = /*#__PURE__*/function () {\n  function Reaction(name_, onInvalidate_, errorHandler_, requiresObservable_) {\n    if (name_ === void 0) {\n      name_ = process.env.NODE_ENV !== \"production\" ? \"Reaction@\" + getNextId() : \"Reaction\";\n    }\n    this.name_ = void 0;\n    this.onInvalidate_ = void 0;\n    this.errorHandler_ = void 0;\n    this.requiresObservable_ = void 0;\n    this.observing_ = [];\n    // nodes we are looking at. Our value depends on these nodes\n    this.newObserving_ = [];\n    this.dependenciesState_ = IDerivationState_.NOT_TRACKING_;\n    this.runId_ = 0;\n    this.unboundDepsCount_ = 0;\n    this.flags_ = 0;\n    this.isTracing_ = TraceMode.NONE;\n    this.name_ = name_;\n    this.onInvalidate_ = onInvalidate_;\n    this.errorHandler_ = errorHandler_;\n    this.requiresObservable_ = requiresObservable_;\n  }\n  var _proto = Reaction.prototype;\n  _proto.onBecomeStale_ = function onBecomeStale_() {\n    this.schedule_();\n  };\n  _proto.schedule_ = function schedule_() {\n    if (!this.isScheduled) {\n      this.isScheduled = true;\n      globalState.pendingReactions.push(this);\n      runReactions();\n    }\n  }\n  /**\n   * internal, use schedule() if you intend to kick off a reaction\n   */;\n  _proto.runReaction_ = function runReaction_() {\n    if (!this.isDisposed) {\n      startBatch();\n      this.isScheduled = false;\n      var prev = globalState.trackingContext;\n      globalState.trackingContext = this;\n      if (shouldCompute(this)) {\n        this.isTrackPending = true;\n        try {\n          this.onInvalidate_();\n          if (process.env.NODE_ENV !== \"production\" && this.isTrackPending && isSpyEnabled()) {\n            // onInvalidate didn't trigger track right away..\n            spyReport({\n              name: this.name_,\n              type: \"scheduled-reaction\"\n            });\n          }\n        } catch (e) {\n          this.reportExceptionInDerivation_(e);\n        }\n      }\n      globalState.trackingContext = prev;\n      endBatch();\n    }\n  };\n  _proto.track = function track(fn) {\n    if (this.isDisposed) {\n      return;\n      // console.warn(\"Reaction already disposed\") // Note: Not a warning / error in mobx 4 either\n    }\n    startBatch();\n    var notify = isSpyEnabled();\n    var startTime;\n    if (process.env.NODE_ENV !== \"production\" && notify) {\n      startTime = Date.now();\n      spyReportStart({\n        name: this.name_,\n        type: \"reaction\"\n      });\n    }\n    this.isRunning = true;\n    var prevReaction = globalState.trackingContext; // reactions could create reactions...\n    globalState.trackingContext = this;\n    var result = trackDerivedFunction(this, fn, undefined);\n    globalState.trackingContext = prevReaction;\n    this.isRunning = false;\n    this.isTrackPending = false;\n    if (this.isDisposed) {\n      // disposed during last run. Clean up everything that was bound after the dispose call.\n      clearObserving(this);\n    }\n    if (isCaughtException(result)) {\n      this.reportExceptionInDerivation_(result.cause);\n    }\n    if (process.env.NODE_ENV !== \"production\" && notify) {\n      spyReportEnd({\n        time: Date.now() - startTime\n      });\n    }\n    endBatch();\n  };\n  _proto.reportExceptionInDerivation_ = function reportExceptionInDerivation_(error) {\n    var _this = this;\n    if (this.errorHandler_) {\n      this.errorHandler_(error, this);\n      return;\n    }\n    if (globalState.disableErrorBoundaries) {\n      throw error;\n    }\n    var message = process.env.NODE_ENV !== \"production\" ? \"[mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: '\" + this + \"'\" : \"[mobx] uncaught error in '\" + this + \"'\";\n    if (!globalState.suppressReactionErrors) {\n      console.error(message, error);\n      /** If debugging brought you here, please, read the above message :-). Tnx! */\n    } else if (process.env.NODE_ENV !== \"production\") {\n      console.warn(\"[mobx] (error in reaction '\" + this.name_ + \"' suppressed, fix error of causing action below)\");\n    } // prettier-ignore\n    if (process.env.NODE_ENV !== \"production\" && isSpyEnabled()) {\n      spyReport({\n        type: \"error\",\n        name: this.name_,\n        message: message,\n        error: \"\" + error\n      });\n    }\n    globalState.globalReactionErrorHandlers.forEach(function (f) {\n      return f(error, _this);\n    });\n  };\n  _proto.dispose = function dispose() {\n    if (!this.isDisposed) {\n      this.isDisposed = true;\n      if (!this.isRunning) {\n        // if disposed while running, clean up later. Maybe not optimal, but rare case\n        startBatch();\n        clearObserving(this);\n        endBatch();\n      }\n    }\n  };\n  _proto.getDisposer_ = function getDisposer_(abortSignal) {\n    var _this2 = this;\n    var dispose = function dispose() {\n      _this2.dispose();\n      abortSignal == null || abortSignal.removeEventListener == null || abortSignal.removeEventListener(\"abort\", dispose);\n    };\n    abortSignal == null || abortSignal.addEventListener == null || abortSignal.addEventListener(\"abort\", dispose);\n    dispose[$mobx] = this;\n    if (\"dispose\" in Symbol && typeof Symbol.dispose === \"symbol\") {\n      dispose[Symbol.dispose] = dispose;\n    }\n    return dispose;\n  };\n  _proto.toString = function toString() {\n    return \"Reaction[\" + this.name_ + \"]\";\n  };\n  _proto.trace = function trace$1(enterBreakPoint) {\n    if (enterBreakPoint === void 0) {\n      enterBreakPoint = false;\n    }\n    trace(this, enterBreakPoint);\n  };\n  return _createClass(Reaction, [{\n    key: \"isDisposed\",\n    get: function get() {\n      return getFlag(this.flags_, Reaction.isDisposedMask_);\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, Reaction.isDisposedMask_, newValue);\n    }\n  }, {\n    key: \"isScheduled\",\n    get: function get() {\n      return getFlag(this.flags_, Reaction.isScheduledMask_);\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, Reaction.isScheduledMask_, newValue);\n    }\n  }, {\n    key: \"isTrackPending\",\n    get: function get() {\n      return getFlag(this.flags_, Reaction.isTrackPendingMask_);\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, Reaction.isTrackPendingMask_, newValue);\n    }\n  }, {\n    key: \"isRunning\",\n    get: function get() {\n      return getFlag(this.flags_, Reaction.isRunningMask_);\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, Reaction.isRunningMask_, newValue);\n    }\n  }, {\n    key: \"diffValue\",\n    get: function get() {\n      return getFlag(this.flags_, Reaction.diffValueMask_) ? 1 : 0;\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, Reaction.diffValueMask_, newValue === 1 ? true : false);\n    }\n  }]);\n}();\nReaction.isDisposedMask_ = 1;\nReaction.isScheduledMask_ = 2;\nReaction.isTrackPendingMask_ = 4;\nReaction.isRunningMask_ = 8;\nReaction.diffValueMask_ = 16;\nfunction onReactionError(handler) {\n  globalState.globalReactionErrorHandlers.push(handler);\n  return function () {\n    var idx = globalState.globalReactionErrorHandlers.indexOf(handler);\n    if (idx >= 0) {\n      globalState.globalReactionErrorHandlers.splice(idx, 1);\n    }\n  };\n}\n/**\n * Magic number alert!\n * Defines within how many times a reaction is allowed to re-trigger itself\n * until it is assumed that this is gonna be a never ending loop...\n */\nvar MAX_REACTION_ITERATIONS = 100;\nvar reactionScheduler = function reactionScheduler(f) {\n  return f();\n};\nfunction runReactions() {\n  // Trampolining, if runReactions are already running, new reactions will be picked up\n  if (globalState.inBatch > 0 || globalState.isRunningReactions) {\n    return;\n  }\n  reactionScheduler(runReactionsHelper);\n}\nfunction runReactionsHelper() {\n  globalState.isRunningReactions = true;\n  var allReactions = globalState.pendingReactions;\n  var iterations = 0;\n  // While running reactions, new reactions might be triggered.\n  // Hence we work with two variables and check whether\n  // we converge to no remaining reactions after a while.\n  while (allReactions.length > 0) {\n    if (++iterations === MAX_REACTION_ITERATIONS) {\n      console.error(process.env.NODE_ENV !== \"production\" ? \"Reaction doesn't converge to a stable state after \" + MAX_REACTION_ITERATIONS + \" iterations.\" + (\" Probably there is a cycle in the reactive function: \" + allReactions[0]) : \"[mobx] cycle in reaction: \" + allReactions[0]);\n      allReactions.splice(0); // clear reactions\n    }\n    var remainingReactions = allReactions.splice(0);\n    for (var i = 0, l = remainingReactions.length; i < l; i++) {\n      remainingReactions[i].runReaction_();\n    }\n  }\n  globalState.isRunningReactions = false;\n}\nvar isReaction = /*#__PURE__*/createInstanceofPredicate(\"Reaction\", Reaction);\nfunction setReactionScheduler(fn) {\n  var baseScheduler = reactionScheduler;\n  reactionScheduler = function reactionScheduler(f) {\n    return fn(function () {\n      return baseScheduler(f);\n    });\n  };\n}\n\nfunction isSpyEnabled() {\n  return process.env.NODE_ENV !== \"production\" && !!globalState.spyListeners.length;\n}\nfunction spyReport(event) {\n  if (!(process.env.NODE_ENV !== \"production\")) {\n    return;\n  } // dead code elimination can do the rest\n  if (!globalState.spyListeners.length) {\n    return;\n  }\n  var listeners = globalState.spyListeners;\n  for (var i = 0, l = listeners.length; i < l; i++) {\n    listeners[i](event);\n  }\n}\nfunction spyReportStart(event) {\n  if (!(process.env.NODE_ENV !== \"production\")) {\n    return;\n  }\n  var change = _extends({}, event, {\n    spyReportStart: true\n  });\n  spyReport(change);\n}\nvar END_EVENT = {\n  type: \"report-end\",\n  spyReportEnd: true\n};\nfunction spyReportEnd(change) {\n  if (!(process.env.NODE_ENV !== \"production\")) {\n    return;\n  }\n  if (change) {\n    spyReport(_extends({}, change, {\n      type: \"report-end\",\n      spyReportEnd: true\n    }));\n  } else {\n    spyReport(END_EVENT);\n  }\n}\nfunction spy(listener) {\n  if (!(process.env.NODE_ENV !== \"production\")) {\n    console.warn(\"[mobx.spy] Is a no-op in production builds\");\n    return function () {};\n  } else {\n    globalState.spyListeners.push(listener);\n    return once(function () {\n      globalState.spyListeners = globalState.spyListeners.filter(function (l) {\n        return l !== listener;\n      });\n    });\n  }\n}\n\nvar ACTION = \"action\";\nvar ACTION_BOUND = \"action.bound\";\nvar AUTOACTION = \"autoAction\";\nvar AUTOACTION_BOUND = \"autoAction.bound\";\nvar DEFAULT_ACTION_NAME = \"<unnamed action>\";\nvar actionAnnotation = /*#__PURE__*/createActionAnnotation(ACTION);\nvar actionBoundAnnotation = /*#__PURE__*/createActionAnnotation(ACTION_BOUND, {\n  bound: true\n});\nvar autoActionAnnotation = /*#__PURE__*/createActionAnnotation(AUTOACTION, {\n  autoAction: true\n});\nvar autoActionBoundAnnotation = /*#__PURE__*/createActionAnnotation(AUTOACTION_BOUND, {\n  autoAction: true,\n  bound: true\n});\nfunction createActionFactory(autoAction) {\n  var res = function action(arg1, arg2) {\n    // action(fn() {})\n    if (isFunction(arg1)) {\n      return createAction(arg1.name || DEFAULT_ACTION_NAME, arg1, autoAction);\n    }\n    // action(\"name\", fn() {})\n    if (isFunction(arg2)) {\n      return createAction(arg1, arg2, autoAction);\n    }\n    // @action (2022.3 Decorators)\n    if (is20223Decorator(arg2)) {\n      return (autoAction ? autoActionAnnotation : actionAnnotation).decorate_20223_(arg1, arg2);\n    }\n    // @action\n    if (isStringish(arg2)) {\n      return storeAnnotation(arg1, arg2, autoAction ? autoActionAnnotation : actionAnnotation);\n    }\n    // action(\"name\") & @action(\"name\")\n    if (isStringish(arg1)) {\n      return createDecoratorAnnotation(createActionAnnotation(autoAction ? AUTOACTION : ACTION, {\n        name: arg1,\n        autoAction: autoAction\n      }));\n    }\n    if (process.env.NODE_ENV !== \"production\") {\n      die(\"Invalid arguments for `action`\");\n    }\n  };\n  return res;\n}\nvar action = /*#__PURE__*/createActionFactory(false);\nObject.assign(action, actionAnnotation);\nvar autoAction = /*#__PURE__*/createActionFactory(true);\nObject.assign(autoAction, autoActionAnnotation);\naction.bound = /*#__PURE__*/createDecoratorAnnotation(actionBoundAnnotation);\nautoAction.bound = /*#__PURE__*/createDecoratorAnnotation(autoActionBoundAnnotation);\nfunction runInAction(fn) {\n  return executeAction(fn.name || DEFAULT_ACTION_NAME, false, fn, this, undefined);\n}\nfunction isAction(thing) {\n  return isFunction(thing) && thing.isMobxAction === true;\n}\n\n/**\n * Creates a named reactive view and keeps it alive, so that the view is always\n * updated if one of the dependencies changes, even when the view is not further used by something else.\n * @param view The reactive view\n * @returns disposer function, which can be used to stop the view from being updated in the future.\n */\nfunction autorun(view, opts) {\n  var _opts$name, _opts, _opts2, _opts3;\n  if (opts === void 0) {\n    opts = EMPTY_OBJECT;\n  }\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isFunction(view)) {\n      die(\"Autorun expects a function as first argument\");\n    }\n    if (isAction(view)) {\n      die(\"Autorun does not accept actions since actions are untrackable\");\n    }\n  }\n  var name = (_opts$name = (_opts = opts) == null ? void 0 : _opts.name) != null ? _opts$name : process.env.NODE_ENV !== \"production\" ? view.name || \"Autorun@\" + getNextId() : \"Autorun\";\n  var runSync = !opts.scheduler && !opts.delay;\n  var reaction;\n  if (runSync) {\n    // normal autorun\n    reaction = new Reaction(name, function () {\n      this.track(reactionRunner);\n    }, opts.onError, opts.requiresObservable);\n  } else {\n    var scheduler = createSchedulerFromOptions(opts);\n    // debounced autorun\n    var isScheduled = false;\n    reaction = new Reaction(name, function () {\n      if (!isScheduled) {\n        isScheduled = true;\n        scheduler(function () {\n          isScheduled = false;\n          if (!reaction.isDisposed) {\n            reaction.track(reactionRunner);\n          }\n        });\n      }\n    }, opts.onError, opts.requiresObservable);\n  }\n  function reactionRunner() {\n    view(reaction);\n  }\n  if (!((_opts2 = opts) != null && (_opts2 = _opts2.signal) != null && _opts2.aborted)) {\n    reaction.schedule_();\n  }\n  return reaction.getDisposer_((_opts3 = opts) == null ? void 0 : _opts3.signal);\n}\nvar run = function run(f) {\n  return f();\n};\nfunction createSchedulerFromOptions(opts) {\n  return opts.scheduler ? opts.scheduler : opts.delay ? function (f) {\n    return setTimeout(f, opts.delay);\n  } : run;\n}\nfunction reaction(expression, effect, opts) {\n  var _opts$name2, _opts4, _opts5;\n  if (opts === void 0) {\n    opts = EMPTY_OBJECT;\n  }\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isFunction(expression) || !isFunction(effect)) {\n      die(\"First and second argument to reaction should be functions\");\n    }\n    if (!isPlainObject(opts)) {\n      die(\"Third argument of reactions should be an object\");\n    }\n  }\n  var name = (_opts$name2 = opts.name) != null ? _opts$name2 : process.env.NODE_ENV !== \"production\" ? \"Reaction@\" + getNextId() : \"Reaction\";\n  var effectAction = action(name, opts.onError ? wrapErrorHandler(opts.onError, effect) : effect);\n  var runSync = !opts.scheduler && !opts.delay;\n  var scheduler = createSchedulerFromOptions(opts);\n  var firstTime = true;\n  var isScheduled = false;\n  var value;\n  var equals = opts.compareStructural ? comparer.structural : opts.equals || comparer[\"default\"];\n  var r = new Reaction(name, function () {\n    if (firstTime || runSync) {\n      reactionRunner();\n    } else if (!isScheduled) {\n      isScheduled = true;\n      scheduler(reactionRunner);\n    }\n  }, opts.onError, opts.requiresObservable);\n  function reactionRunner() {\n    isScheduled = false;\n    if (r.isDisposed) {\n      return;\n    }\n    var changed = false;\n    var oldValue = value;\n    r.track(function () {\n      var nextValue = allowStateChanges(false, function () {\n        return expression(r);\n      });\n      changed = firstTime || !equals(value, nextValue);\n      value = nextValue;\n    });\n    if (firstTime && opts.fireImmediately) {\n      effectAction(value, oldValue, r);\n    } else if (!firstTime && changed) {\n      effectAction(value, oldValue, r);\n    }\n    firstTime = false;\n  }\n  if (!((_opts4 = opts) != null && (_opts4 = _opts4.signal) != null && _opts4.aborted)) {\n    r.schedule_();\n  }\n  return r.getDisposer_((_opts5 = opts) == null ? void 0 : _opts5.signal);\n}\nfunction wrapErrorHandler(errorHandler, baseFn) {\n  return function () {\n    try {\n      return baseFn.apply(this, arguments);\n    } catch (e) {\n      errorHandler.call(this, e);\n    }\n  };\n}\n\nvar ON_BECOME_OBSERVED = \"onBO\";\nvar ON_BECOME_UNOBSERVED = \"onBUO\";\nfunction onBecomeObserved(thing, arg2, arg3) {\n  return interceptHook(ON_BECOME_OBSERVED, thing, arg2, arg3);\n}\nfunction onBecomeUnobserved(thing, arg2, arg3) {\n  return interceptHook(ON_BECOME_UNOBSERVED, thing, arg2, arg3);\n}\nfunction interceptHook(hook, thing, arg2, arg3) {\n  var atom = typeof arg3 === \"function\" ? getAtom(thing, arg2) : getAtom(thing);\n  var cb = isFunction(arg3) ? arg3 : arg2;\n  var listenersKey = hook + \"L\";\n  if (atom[listenersKey]) {\n    atom[listenersKey].add(cb);\n  } else {\n    atom[listenersKey] = new Set([cb]);\n  }\n  return function () {\n    var hookListeners = atom[listenersKey];\n    if (hookListeners) {\n      hookListeners[\"delete\"](cb);\n      if (hookListeners.size === 0) {\n        delete atom[listenersKey];\n      }\n    }\n  };\n}\n\nvar NEVER = \"never\";\nvar ALWAYS = \"always\";\nvar OBSERVED = \"observed\";\n// const IF_AVAILABLE = \"ifavailable\"\nfunction configure(options) {\n  if (options.isolateGlobalState === true) {\n    isolateGlobalState();\n  }\n  var useProxies = options.useProxies,\n    enforceActions = options.enforceActions;\n  if (useProxies !== undefined) {\n    globalState.useProxies = useProxies === ALWAYS ? true : useProxies === NEVER ? false : typeof Proxy !== \"undefined\";\n  }\n  if (useProxies === \"ifavailable\") {\n    globalState.verifyProxies = true;\n  }\n  if (enforceActions !== undefined) {\n    var ea = enforceActions === ALWAYS ? ALWAYS : enforceActions === OBSERVED;\n    globalState.enforceActions = ea;\n    globalState.allowStateChanges = ea === true || ea === ALWAYS ? false : true;\n  }\n  [\"computedRequiresReaction\", \"reactionRequiresObservable\", \"observableRequiresReaction\", \"disableErrorBoundaries\", \"safeDescriptors\"].forEach(function (key) {\n    if (key in options) {\n      globalState[key] = !!options[key];\n    }\n  });\n  globalState.allowStateReads = !globalState.observableRequiresReaction;\n  if (process.env.NODE_ENV !== \"production\" && globalState.disableErrorBoundaries === true) {\n    console.warn(\"WARNING: Debug feature only. MobX will NOT recover from errors when `disableErrorBoundaries` is enabled.\");\n  }\n  if (options.reactionScheduler) {\n    setReactionScheduler(options.reactionScheduler);\n  }\n}\n\nfunction extendObservable(target, properties, annotations, options) {\n  if (process.env.NODE_ENV !== \"production\") {\n    if (arguments.length > 4) {\n      die(\"'extendObservable' expected 2-4 arguments\");\n    }\n    if (typeof target !== \"object\") {\n      die(\"'extendObservable' expects an object as first argument\");\n    }\n    if (isObservableMap(target)) {\n      die(\"'extendObservable' should not be used on maps, use map.merge instead\");\n    }\n    if (!isPlainObject(properties)) {\n      die(\"'extendObservable' only accepts plain objects as second argument\");\n    }\n    if (isObservable(properties) || isObservable(annotations)) {\n      die(\"Extending an object with another observable (object) is not supported\");\n    }\n  }\n  // Pull descriptors first, so we don't have to deal with props added by administration ($mobx)\n  var descriptors = getOwnPropertyDescriptors(properties);\n  initObservable(function () {\n    var adm = asObservableObject(target, options)[$mobx];\n    ownKeys(descriptors).forEach(function (key) {\n      adm.extend_(key, descriptors[key],\n      // must pass \"undefined\" for { key: undefined }\n      !annotations ? true : key in annotations ? annotations[key] : true);\n    });\n  });\n  return target;\n}\n\nfunction getDependencyTree(thing, property) {\n  return nodeToDependencyTree(getAtom(thing, property));\n}\nfunction nodeToDependencyTree(node) {\n  var result = {\n    name: node.name_\n  };\n  if (node.observing_ && node.observing_.length > 0) {\n    result.dependencies = unique(node.observing_).map(nodeToDependencyTree);\n  }\n  return result;\n}\nfunction getObserverTree(thing, property) {\n  return nodeToObserverTree(getAtom(thing, property));\n}\nfunction nodeToObserverTree(node) {\n  var result = {\n    name: node.name_\n  };\n  if (hasObservers(node)) {\n    result.observers = Array.from(getObservers(node)).map(nodeToObserverTree);\n  }\n  return result;\n}\nfunction unique(list) {\n  return Array.from(new Set(list));\n}\n\nvar generatorId = 0;\nvar FlowCancellationError = /*#__PURE__*/function (_Error) {\n  function FlowCancellationError() {\n    var _this;\n    _this = _Error.call(this, \"FLOW_CANCELLED\") || this;\n    Object.setPrototypeOf(_this, (this instanceof FlowCancellationError ? this.constructor : void 0).prototype);\n    _this.name = \"FlowCancellationError\";\n    return _this;\n  }\n  _inheritsLoose(FlowCancellationError, _Error);\n  var _proto = FlowCancellationError.prototype;\n  _proto.toString = function toString() {\n    return \"Error: \" + this.message;\n  };\n  return FlowCancellationError;\n}(/*#__PURE__*/_wrapNativeSuper(Error));\nfunction isFlowCancellationError(error) {\n  return error instanceof FlowCancellationError;\n}\nvar flowAnnotation = /*#__PURE__*/createFlowAnnotation(\"flow\");\nvar flowBoundAnnotation = /*#__PURE__*/createFlowAnnotation(\"flow.bound\", {\n  bound: true\n});\nvar flow = /*#__PURE__*/Object.assign(function flow(arg1, arg2) {\n  // @flow (2022.3 Decorators)\n  if (is20223Decorator(arg2)) {\n    return flowAnnotation.decorate_20223_(arg1, arg2);\n  }\n  // @flow\n  if (isStringish(arg2)) {\n    return storeAnnotation(arg1, arg2, flowAnnotation);\n  }\n  // flow(fn)\n  if (process.env.NODE_ENV !== \"production\" && arguments.length !== 1) {\n    die(\"Flow expects single argument with generator function\");\n  }\n  var generator = arg1;\n  var name = generator.name || \"<unnamed flow>\";\n  // Implementation based on https://github.com/tj/co/blob/master/index.js\n  var res = function res() {\n    var ctx = this;\n    var args = arguments;\n    var runId = ++generatorId;\n    var gen = action(name + \" - runid: \" + runId + \" - init\", generator).apply(ctx, args);\n    var rejector;\n    var pendingPromise = undefined;\n    var promise = new Promise(function (resolve, reject) {\n      var stepId = 0;\n      rejector = reject;\n      function onFulfilled(res) {\n        pendingPromise = undefined;\n        var ret;\n        try {\n          ret = action(name + \" - runid: \" + runId + \" - yield \" + stepId++, gen.next).call(gen, res);\n        } catch (e) {\n          return reject(e);\n        }\n        next(ret);\n      }\n      function onRejected(err) {\n        pendingPromise = undefined;\n        var ret;\n        try {\n          ret = action(name + \" - runid: \" + runId + \" - yield \" + stepId++, gen[\"throw\"]).call(gen, err);\n        } catch (e) {\n          return reject(e);\n        }\n        next(ret);\n      }\n      function next(ret) {\n        if (isFunction(ret == null ? void 0 : ret.then)) {\n          // an async iterator\n          ret.then(next, reject);\n          return;\n        }\n        if (ret.done) {\n          return resolve(ret.value);\n        }\n        pendingPromise = Promise.resolve(ret.value);\n        return pendingPromise.then(onFulfilled, onRejected);\n      }\n      onFulfilled(undefined); // kick off the process\n    });\n    promise.cancel = action(name + \" - runid: \" + runId + \" - cancel\", function () {\n      try {\n        if (pendingPromise) {\n          cancelPromise(pendingPromise);\n        }\n        // Finally block can return (or yield) stuff..\n        var _res = gen[\"return\"](undefined);\n        // eat anything that promise would do, it's cancelled!\n        var yieldedPromise = Promise.resolve(_res.value);\n        yieldedPromise.then(noop, noop);\n        cancelPromise(yieldedPromise); // maybe it can be cancelled :)\n        // reject our original promise\n        rejector(new FlowCancellationError());\n      } catch (e) {\n        rejector(e); // there could be a throwing finally block\n      }\n    });\n    return promise;\n  };\n  res.isMobXFlow = true;\n  return res;\n}, flowAnnotation);\nflow.bound = /*#__PURE__*/createDecoratorAnnotation(flowBoundAnnotation);\nfunction cancelPromise(promise) {\n  if (isFunction(promise.cancel)) {\n    promise.cancel();\n  }\n}\nfunction flowResult(result) {\n  return result; // just tricking TypeScript :)\n}\nfunction isFlow(fn) {\n  return (fn == null ? void 0 : fn.isMobXFlow) === true;\n}\n\nfunction interceptReads(thing, propOrHandler, handler) {\n  var target;\n  if (isObservableMap(thing) || isObservableArray(thing) || isObservableValue(thing)) {\n    target = getAdministration(thing);\n  } else if (isObservableObject(thing)) {\n    if (process.env.NODE_ENV !== \"production\" && !isStringish(propOrHandler)) {\n      return die(\"InterceptReads can only be used with a specific property, not with an object in general\");\n    }\n    target = getAdministration(thing, propOrHandler);\n  } else if (process.env.NODE_ENV !== \"production\") {\n    return die(\"Expected observable map, object or array as first array\");\n  }\n  if (process.env.NODE_ENV !== \"production\" && target.dehancer !== undefined) {\n    return die(\"An intercept reader was already established\");\n  }\n  target.dehancer = typeof propOrHandler === \"function\" ? propOrHandler : handler;\n  return function () {\n    target.dehancer = undefined;\n  };\n}\n\nfunction intercept(thing, propOrHandler, handler) {\n  if (isFunction(handler)) {\n    return interceptProperty(thing, propOrHandler, handler);\n  } else {\n    return interceptInterceptable(thing, propOrHandler);\n  }\n}\nfunction interceptInterceptable(thing, handler) {\n  return getAdministration(thing).intercept_(handler);\n}\nfunction interceptProperty(thing, property, handler) {\n  return getAdministration(thing, property).intercept_(handler);\n}\n\nfunction _isComputed(value, property) {\n  if (property === undefined) {\n    return isComputedValue(value);\n  }\n  if (isObservableObject(value) === false) {\n    return false;\n  }\n  if (!value[$mobx].values_.has(property)) {\n    return false;\n  }\n  var atom = getAtom(value, property);\n  return isComputedValue(atom);\n}\nfunction isComputed(value) {\n  if (process.env.NODE_ENV !== \"production\" && arguments.length > 1) {\n    return die(\"isComputed expects only 1 argument. Use isComputedProp to inspect the observability of a property\");\n  }\n  return _isComputed(value);\n}\nfunction isComputedProp(value, propName) {\n  if (process.env.NODE_ENV !== \"production\" && !isStringish(propName)) {\n    return die(\"isComputed expected a property name as second argument\");\n  }\n  return _isComputed(value, propName);\n}\n\nfunction _isObservable(value, property) {\n  if (!value) {\n    return false;\n  }\n  if (property !== undefined) {\n    if (process.env.NODE_ENV !== \"production\" && (isObservableMap(value) || isObservableArray(value))) {\n      return die(\"isObservable(object, propertyName) is not supported for arrays and maps. Use map.has or array.length instead.\");\n    }\n    if (isObservableObject(value)) {\n      return value[$mobx].values_.has(property);\n    }\n    return false;\n  }\n  // For first check, see #701\n  return isObservableObject(value) || !!value[$mobx] || isAtom(value) || isReaction(value) || isComputedValue(value);\n}\nfunction isObservable(value) {\n  if (process.env.NODE_ENV !== \"production\" && arguments.length !== 1) {\n    die(\"isObservable expects only 1 argument. Use isObservableProp to inspect the observability of a property\");\n  }\n  return _isObservable(value);\n}\nfunction isObservableProp(value, propName) {\n  if (process.env.NODE_ENV !== \"production\" && !isStringish(propName)) {\n    return die(\"expected a property name as second argument\");\n  }\n  return _isObservable(value, propName);\n}\n\nfunction keys(obj) {\n  if (isObservableObject(obj)) {\n    return obj[$mobx].keys_();\n  }\n  if (isObservableMap(obj) || isObservableSet(obj)) {\n    return Array.from(obj.keys());\n  }\n  if (isObservableArray(obj)) {\n    return obj.map(function (_, index) {\n      return index;\n    });\n  }\n  die(5);\n}\nfunction values(obj) {\n  if (isObservableObject(obj)) {\n    return keys(obj).map(function (key) {\n      return obj[key];\n    });\n  }\n  if (isObservableMap(obj)) {\n    return keys(obj).map(function (key) {\n      return obj.get(key);\n    });\n  }\n  if (isObservableSet(obj)) {\n    return Array.from(obj.values());\n  }\n  if (isObservableArray(obj)) {\n    return obj.slice();\n  }\n  die(6);\n}\nfunction entries(obj) {\n  if (isObservableObject(obj)) {\n    return keys(obj).map(function (key) {\n      return [key, obj[key]];\n    });\n  }\n  if (isObservableMap(obj)) {\n    return keys(obj).map(function (key) {\n      return [key, obj.get(key)];\n    });\n  }\n  if (isObservableSet(obj)) {\n    return Array.from(obj.entries());\n  }\n  if (isObservableArray(obj)) {\n    return obj.map(function (key, index) {\n      return [index, key];\n    });\n  }\n  die(7);\n}\nfunction set(obj, key, value) {\n  if (arguments.length === 2 && !isObservableSet(obj)) {\n    startBatch();\n    var _values = key;\n    try {\n      for (var _key in _values) {\n        set(obj, _key, _values[_key]);\n      }\n    } finally {\n      endBatch();\n    }\n    return;\n  }\n  if (isObservableObject(obj)) {\n    obj[$mobx].set_(key, value);\n  } else if (isObservableMap(obj)) {\n    obj.set(key, value);\n  } else if (isObservableSet(obj)) {\n    obj.add(key);\n  } else if (isObservableArray(obj)) {\n    if (typeof key !== \"number\") {\n      key = parseInt(key, 10);\n    }\n    if (key < 0) {\n      die(\"Invalid index: '\" + key + \"'\");\n    }\n    startBatch();\n    if (key >= obj.length) {\n      obj.length = key + 1;\n    }\n    obj[key] = value;\n    endBatch();\n  } else {\n    die(8);\n  }\n}\nfunction remove(obj, key) {\n  if (isObservableObject(obj)) {\n    obj[$mobx].delete_(key);\n  } else if (isObservableMap(obj)) {\n    obj[\"delete\"](key);\n  } else if (isObservableSet(obj)) {\n    obj[\"delete\"](key);\n  } else if (isObservableArray(obj)) {\n    if (typeof key !== \"number\") {\n      key = parseInt(key, 10);\n    }\n    obj.splice(key, 1);\n  } else {\n    die(9);\n  }\n}\nfunction has(obj, key) {\n  if (isObservableObject(obj)) {\n    return obj[$mobx].has_(key);\n  } else if (isObservableMap(obj)) {\n    return obj.has(key);\n  } else if (isObservableSet(obj)) {\n    return obj.has(key);\n  } else if (isObservableArray(obj)) {\n    return key >= 0 && key < obj.length;\n  }\n  die(10);\n}\nfunction get(obj, key) {\n  if (!has(obj, key)) {\n    return undefined;\n  }\n  if (isObservableObject(obj)) {\n    return obj[$mobx].get_(key);\n  } else if (isObservableMap(obj)) {\n    return obj.get(key);\n  } else if (isObservableArray(obj)) {\n    return obj[key];\n  }\n  die(11);\n}\nfunction apiDefineProperty(obj, key, descriptor) {\n  if (isObservableObject(obj)) {\n    return obj[$mobx].defineProperty_(key, descriptor);\n  }\n  die(39);\n}\nfunction apiOwnKeys(obj) {\n  if (isObservableObject(obj)) {\n    return obj[$mobx].ownKeys_();\n  }\n  die(38);\n}\n\nfunction observe(thing, propOrCb, cbOrFire, fireImmediately) {\n  if (isFunction(cbOrFire)) {\n    return observeObservableProperty(thing, propOrCb, cbOrFire, fireImmediately);\n  } else {\n    return observeObservable(thing, propOrCb, cbOrFire);\n  }\n}\nfunction observeObservable(thing, listener, fireImmediately) {\n  return getAdministration(thing).observe_(listener, fireImmediately);\n}\nfunction observeObservableProperty(thing, property, listener, fireImmediately) {\n  return getAdministration(thing, property).observe_(listener, fireImmediately);\n}\n\nfunction cache(map, key, value) {\n  map.set(key, value);\n  return value;\n}\nfunction toJSHelper(source, __alreadySeen) {\n  if (source == null || typeof source !== \"object\" || source instanceof Date || !isObservable(source)) {\n    return source;\n  }\n  if (isObservableValue(source) || isComputedValue(source)) {\n    return toJSHelper(source.get(), __alreadySeen);\n  }\n  if (__alreadySeen.has(source)) {\n    return __alreadySeen.get(source);\n  }\n  if (isObservableArray(source)) {\n    var res = cache(__alreadySeen, source, new Array(source.length));\n    source.forEach(function (value, idx) {\n      res[idx] = toJSHelper(value, __alreadySeen);\n    });\n    return res;\n  }\n  if (isObservableSet(source)) {\n    var _res = cache(__alreadySeen, source, new Set());\n    source.forEach(function (value) {\n      _res.add(toJSHelper(value, __alreadySeen));\n    });\n    return _res;\n  }\n  if (isObservableMap(source)) {\n    var _res2 = cache(__alreadySeen, source, new Map());\n    source.forEach(function (value, key) {\n      _res2.set(key, toJSHelper(value, __alreadySeen));\n    });\n    return _res2;\n  } else {\n    // must be observable object\n    var _res3 = cache(__alreadySeen, source, {});\n    apiOwnKeys(source).forEach(function (key) {\n      if (objectPrototype.propertyIsEnumerable.call(source, key)) {\n        _res3[key] = toJSHelper(source[key], __alreadySeen);\n      }\n    });\n    return _res3;\n  }\n}\n/**\n * Recursively converts an observable to it's non-observable native counterpart.\n * It does NOT recurse into non-observables, these are left as they are, even if they contain observables.\n * Computed and other non-enumerable properties are completely ignored.\n * Complex scenarios require custom solution, eg implementing `toJSON` or using `serializr` lib.\n */\nfunction toJS(source, options) {\n  if (process.env.NODE_ENV !== \"production\" && options) {\n    die(\"toJS no longer supports options\");\n  }\n  return toJSHelper(source, new Map());\n}\n\nfunction trace() {\n  if (!(process.env.NODE_ENV !== \"production\")) {\n    return;\n  }\n  var enterBreakPoint = false;\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n  if (typeof args[args.length - 1] === \"boolean\") {\n    enterBreakPoint = args.pop();\n  }\n  var derivation = getAtomFromArgs(args);\n  if (!derivation) {\n    return die(\"'trace(break?)' can only be used inside a tracked computed value or a Reaction. Consider passing in the computed value or reaction explicitly\");\n  }\n  if (derivation.isTracing_ === TraceMode.NONE) {\n    console.log(\"[mobx.trace] '\" + derivation.name_ + \"' tracing enabled\");\n  }\n  derivation.isTracing_ = enterBreakPoint ? TraceMode.BREAK : TraceMode.LOG;\n}\nfunction getAtomFromArgs(args) {\n  switch (args.length) {\n    case 0:\n      return globalState.trackingDerivation;\n    case 1:\n      return getAtom(args[0]);\n    case 2:\n      return getAtom(args[0], args[1]);\n  }\n}\n\n/**\n * During a transaction no views are updated until the end of the transaction.\n * The transaction will be run synchronously nonetheless.\n *\n * @param action a function that updates some reactive state\n * @returns any value that was returned by the 'action' parameter.\n */\nfunction transaction(action, thisArg) {\n  if (thisArg === void 0) {\n    thisArg = undefined;\n  }\n  startBatch();\n  try {\n    return action.apply(thisArg);\n  } finally {\n    endBatch();\n  }\n}\n\nfunction when(predicate, arg1, arg2) {\n  if (arguments.length === 1 || arg1 && typeof arg1 === \"object\") {\n    return whenPromise(predicate, arg1);\n  }\n  return _when(predicate, arg1, arg2 || {});\n}\nfunction _when(predicate, effect, opts) {\n  var timeoutHandle;\n  if (typeof opts.timeout === \"number\") {\n    var error = new Error(\"WHEN_TIMEOUT\");\n    timeoutHandle = setTimeout(function () {\n      if (!disposer[$mobx].isDisposed) {\n        disposer();\n        if (opts.onError) {\n          opts.onError(error);\n        } else {\n          throw error;\n        }\n      }\n    }, opts.timeout);\n  }\n  opts.name = process.env.NODE_ENV !== \"production\" ? opts.name || \"When@\" + getNextId() : \"When\";\n  var effectAction = createAction(process.env.NODE_ENV !== \"production\" ? opts.name + \"-effect\" : \"When-effect\", effect);\n  // eslint-disable-next-line\n  var disposer = autorun(function (r) {\n    // predicate should not change state\n    var cond = allowStateChanges(false, predicate);\n    if (cond) {\n      r.dispose();\n      if (timeoutHandle) {\n        clearTimeout(timeoutHandle);\n      }\n      effectAction();\n    }\n  }, opts);\n  return disposer;\n}\nfunction whenPromise(predicate, opts) {\n  var _opts$signal;\n  if (process.env.NODE_ENV !== \"production\" && opts && opts.onError) {\n    return die(\"the options 'onError' and 'promise' cannot be combined\");\n  }\n  if (opts != null && (_opts$signal = opts.signal) != null && _opts$signal.aborted) {\n    return Object.assign(Promise.reject(new Error(\"WHEN_ABORTED\")), {\n      cancel: function cancel() {\n        return null;\n      }\n    });\n  }\n  var cancel;\n  var abort;\n  var res = new Promise(function (resolve, reject) {\n    var _opts$signal2;\n    var disposer = _when(predicate, resolve, _extends({}, opts, {\n      onError: reject\n    }));\n    cancel = function cancel() {\n      disposer();\n      reject(new Error(\"WHEN_CANCELLED\"));\n    };\n    abort = function abort() {\n      disposer();\n      reject(new Error(\"WHEN_ABORTED\"));\n    };\n    opts == null || (_opts$signal2 = opts.signal) == null || _opts$signal2.addEventListener == null || _opts$signal2.addEventListener(\"abort\", abort);\n  })[\"finally\"](function () {\n    var _opts$signal3;\n    return opts == null || (_opts$signal3 = opts.signal) == null || _opts$signal3.removeEventListener == null ? void 0 : _opts$signal3.removeEventListener(\"abort\", abort);\n  });\n  res.cancel = cancel;\n  return res;\n}\n\nfunction getAdm(target) {\n  return target[$mobx];\n}\n// Optimization: we don't need the intermediate objects and could have a completely custom administration for DynamicObjects,\n// and skip either the internal values map, or the base object with its property descriptors!\nvar objectProxyTraps = {\n  has: function has(target, name) {\n    if (process.env.NODE_ENV !== \"production\" && globalState.trackingDerivation) {\n      warnAboutProxyRequirement(\"detect new properties using the 'in' operator. Use 'has' from 'mobx' instead.\");\n    }\n    return getAdm(target).has_(name);\n  },\n  get: function get(target, name) {\n    return getAdm(target).get_(name);\n  },\n  set: function set(target, name, value) {\n    var _getAdm$set_;\n    if (!isStringish(name)) {\n      return false;\n    }\n    if (process.env.NODE_ENV !== \"production\" && !getAdm(target).values_.has(name)) {\n      warnAboutProxyRequirement(\"add a new observable property through direct assignment. Use 'set' from 'mobx' instead.\");\n    }\n    // null (intercepted) -> true (success)\n    return (_getAdm$set_ = getAdm(target).set_(name, value, true)) != null ? _getAdm$set_ : true;\n  },\n  deleteProperty: function deleteProperty(target, name) {\n    var _getAdm$delete_;\n    if (process.env.NODE_ENV !== \"production\") {\n      warnAboutProxyRequirement(\"delete properties from an observable object. Use 'remove' from 'mobx' instead.\");\n    }\n    if (!isStringish(name)) {\n      return false;\n    }\n    // null (intercepted) -> true (success)\n    return (_getAdm$delete_ = getAdm(target).delete_(name, true)) != null ? _getAdm$delete_ : true;\n  },\n  defineProperty: function defineProperty(target, name, descriptor) {\n    var _getAdm$definePropert;\n    if (process.env.NODE_ENV !== \"production\") {\n      warnAboutProxyRequirement(\"define property on an observable object. Use 'defineProperty' from 'mobx' instead.\");\n    }\n    // null (intercepted) -> true (success)\n    return (_getAdm$definePropert = getAdm(target).defineProperty_(name, descriptor)) != null ? _getAdm$definePropert : true;\n  },\n  ownKeys: function ownKeys(target) {\n    if (process.env.NODE_ENV !== \"production\" && globalState.trackingDerivation) {\n      warnAboutProxyRequirement(\"iterate keys to detect added / removed properties. Use 'keys' from 'mobx' instead.\");\n    }\n    return getAdm(target).ownKeys_();\n  },\n  preventExtensions: function preventExtensions(target) {\n    die(13);\n  }\n};\nfunction asDynamicObservableObject(target, options) {\n  var _target$$mobx, _target$$mobx$proxy_;\n  assertProxies();\n  target = asObservableObject(target, options);\n  return (_target$$mobx$proxy_ = (_target$$mobx = target[$mobx]).proxy_) != null ? _target$$mobx$proxy_ : _target$$mobx.proxy_ = new Proxy(target, objectProxyTraps);\n}\n\nfunction hasInterceptors(interceptable) {\n  return interceptable.interceptors_ !== undefined && interceptable.interceptors_.length > 0;\n}\nfunction registerInterceptor(interceptable, handler) {\n  var interceptors = interceptable.interceptors_ || (interceptable.interceptors_ = []);\n  interceptors.push(handler);\n  return once(function () {\n    var idx = interceptors.indexOf(handler);\n    if (idx !== -1) {\n      interceptors.splice(idx, 1);\n    }\n  });\n}\nfunction interceptChange(interceptable, change) {\n  var prevU = untrackedStart();\n  try {\n    // Interceptor can modify the array, copy it to avoid concurrent modification, see #1950\n    var interceptors = [].concat(interceptable.interceptors_ || []);\n    for (var i = 0, l = interceptors.length; i < l; i++) {\n      change = interceptors[i](change);\n      if (change && !change.type) {\n        die(14);\n      }\n      if (!change) {\n        break;\n      }\n    }\n    return change;\n  } finally {\n    untrackedEnd(prevU);\n  }\n}\n\nfunction hasListeners(listenable) {\n  return listenable.changeListeners_ !== undefined && listenable.changeListeners_.length > 0;\n}\nfunction registerListener(listenable, handler) {\n  var listeners = listenable.changeListeners_ || (listenable.changeListeners_ = []);\n  listeners.push(handler);\n  return once(function () {\n    var idx = listeners.indexOf(handler);\n    if (idx !== -1) {\n      listeners.splice(idx, 1);\n    }\n  });\n}\nfunction notifyListeners(listenable, change) {\n  var prevU = untrackedStart();\n  var listeners = listenable.changeListeners_;\n  if (!listeners) {\n    return;\n  }\n  listeners = listeners.slice();\n  for (var i = 0, l = listeners.length; i < l; i++) {\n    listeners[i](change);\n  }\n  untrackedEnd(prevU);\n}\n\nfunction makeObservable(target, annotations, options) {\n  initObservable(function () {\n    var _annotations;\n    var adm = asObservableObject(target, options)[$mobx];\n    if (process.env.NODE_ENV !== \"production\" && annotations && target[storedAnnotationsSymbol]) {\n      die(\"makeObservable second arg must be nullish when using decorators. Mixing @decorator syntax with annotations is not supported.\");\n    }\n    // Default to decorators\n    (_annotations = annotations) != null ? _annotations : annotations = collectStoredAnnotations(target);\n    // Annotate\n    ownKeys(annotations).forEach(function (key) {\n      return adm.make_(key, annotations[key]);\n    });\n  });\n  return target;\n}\n// proto[keysSymbol] = new Set<PropertyKey>()\nvar keysSymbol = /*#__PURE__*/Symbol(\"mobx-keys\");\nfunction makeAutoObservable(target, overrides, options) {\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isPlainObject(target) && !isPlainObject(Object.getPrototypeOf(target))) {\n      die(\"'makeAutoObservable' can only be used for classes that don't have a superclass\");\n    }\n    if (isObservableObject(target)) {\n      die(\"makeAutoObservable can only be used on objects not already made observable\");\n    }\n  }\n  // Optimization: avoid visiting protos\n  // Assumes that annotation.make_/.extend_ works the same for plain objects\n  if (isPlainObject(target)) {\n    return extendObservable(target, target, overrides, options);\n  }\n  initObservable(function () {\n    var adm = asObservableObject(target, options)[$mobx];\n    // Optimization: cache keys on proto\n    // Assumes makeAutoObservable can be called only once per object and can't be used in subclass\n    if (!target[keysSymbol]) {\n      var proto = Object.getPrototypeOf(target);\n      var keys = new Set([].concat(ownKeys(target), ownKeys(proto)));\n      keys[\"delete\"](\"constructor\");\n      keys[\"delete\"]($mobx);\n      addHiddenProp(proto, keysSymbol, keys);\n    }\n    target[keysSymbol].forEach(function (key) {\n      return adm.make_(key,\n      // must pass \"undefined\" for { key: undefined }\n      !overrides ? true : key in overrides ? overrides[key] : true);\n    });\n  });\n  return target;\n}\n\nvar SPLICE = \"splice\";\nvar UPDATE = \"update\";\nvar MAX_SPLICE_SIZE = 10000; // See e.g. https://github.com/mobxjs/mobx/issues/859\nvar arrayTraps = {\n  get: function get(target, name) {\n    var adm = target[$mobx];\n    if (name === $mobx) {\n      return adm;\n    }\n    if (name === \"length\") {\n      return adm.getArrayLength_();\n    }\n    if (typeof name === \"string\" && !isNaN(name)) {\n      return adm.get_(parseInt(name));\n    }\n    if (hasProp(arrayExtensions, name)) {\n      return arrayExtensions[name];\n    }\n    return target[name];\n  },\n  set: function set(target, name, value) {\n    var adm = target[$mobx];\n    if (name === \"length\") {\n      adm.setArrayLength_(value);\n    }\n    if (typeof name === \"symbol\" || isNaN(name)) {\n      target[name] = value;\n    } else {\n      // numeric string\n      adm.set_(parseInt(name), value);\n    }\n    return true;\n  },\n  preventExtensions: function preventExtensions() {\n    die(15);\n  }\n};\nvar ObservableArrayAdministration = /*#__PURE__*/function () {\n  function ObservableArrayAdministration(name, enhancer, owned_, legacyMode_) {\n    if (name === void 0) {\n      name = process.env.NODE_ENV !== \"production\" ? \"ObservableArray@\" + getNextId() : \"ObservableArray\";\n    }\n    this.owned_ = void 0;\n    this.legacyMode_ = void 0;\n    this.atom_ = void 0;\n    this.values_ = [];\n    // this is the prop that gets proxied, so can't replace it!\n    this.interceptors_ = void 0;\n    this.changeListeners_ = void 0;\n    this.enhancer_ = void 0;\n    this.dehancer = void 0;\n    this.proxy_ = void 0;\n    this.lastKnownLength_ = 0;\n    this.owned_ = owned_;\n    this.legacyMode_ = legacyMode_;\n    this.atom_ = new Atom(name);\n    this.enhancer_ = function (newV, oldV) {\n      return enhancer(newV, oldV, process.env.NODE_ENV !== \"production\" ? name + \"[..]\" : \"ObservableArray[..]\");\n    };\n  }\n  var _proto = ObservableArrayAdministration.prototype;\n  _proto.dehanceValue_ = function dehanceValue_(value) {\n    if (this.dehancer !== undefined) {\n      return this.dehancer(value);\n    }\n    return value;\n  };\n  _proto.dehanceValues_ = function dehanceValues_(values) {\n    if (this.dehancer !== undefined && values.length > 0) {\n      return values.map(this.dehancer);\n    }\n    return values;\n  };\n  _proto.intercept_ = function intercept_(handler) {\n    return registerInterceptor(this, handler);\n  };\n  _proto.observe_ = function observe_(listener, fireImmediately) {\n    if (fireImmediately === void 0) {\n      fireImmediately = false;\n    }\n    if (fireImmediately) {\n      listener({\n        observableKind: \"array\",\n        object: this.proxy_,\n        debugObjectName: this.atom_.name_,\n        type: \"splice\",\n        index: 0,\n        added: this.values_.slice(),\n        addedCount: this.values_.length,\n        removed: [],\n        removedCount: 0\n      });\n    }\n    return registerListener(this, listener);\n  };\n  _proto.getArrayLength_ = function getArrayLength_() {\n    this.atom_.reportObserved();\n    return this.values_.length;\n  };\n  _proto.setArrayLength_ = function setArrayLength_(newLength) {\n    if (typeof newLength !== \"number\" || isNaN(newLength) || newLength < 0) {\n      die(\"Out of range: \" + newLength);\n    }\n    var currentLength = this.values_.length;\n    if (newLength === currentLength) {\n      return;\n    } else if (newLength > currentLength) {\n      var newItems = new Array(newLength - currentLength);\n      for (var i = 0; i < newLength - currentLength; i++) {\n        newItems[i] = undefined;\n      } // No Array.fill everywhere...\n      this.spliceWithArray_(currentLength, 0, newItems);\n    } else {\n      this.spliceWithArray_(newLength, currentLength - newLength);\n    }\n  };\n  _proto.updateArrayLength_ = function updateArrayLength_(oldLength, delta) {\n    if (oldLength !== this.lastKnownLength_) {\n      die(16);\n    }\n    this.lastKnownLength_ += delta;\n    if (this.legacyMode_ && delta > 0) {\n      reserveArrayBuffer(oldLength + delta + 1);\n    }\n  };\n  _proto.spliceWithArray_ = function spliceWithArray_(index, deleteCount, newItems) {\n    var _this = this;\n    checkIfStateModificationsAreAllowed(this.atom_);\n    var length = this.values_.length;\n    if (index === undefined) {\n      index = 0;\n    } else if (index > length) {\n      index = length;\n    } else if (index < 0) {\n      index = Math.max(0, length + index);\n    }\n    if (arguments.length === 1) {\n      deleteCount = length - index;\n    } else if (deleteCount === undefined || deleteCount === null) {\n      deleteCount = 0;\n    } else {\n      deleteCount = Math.max(0, Math.min(deleteCount, length - index));\n    }\n    if (newItems === undefined) {\n      newItems = EMPTY_ARRAY;\n    }\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        object: this.proxy_,\n        type: SPLICE,\n        index: index,\n        removedCount: deleteCount,\n        added: newItems\n      });\n      if (!change) {\n        return EMPTY_ARRAY;\n      }\n      deleteCount = change.removedCount;\n      newItems = change.added;\n    }\n    newItems = newItems.length === 0 ? newItems : newItems.map(function (v) {\n      return _this.enhancer_(v, undefined);\n    });\n    if (this.legacyMode_ || process.env.NODE_ENV !== \"production\") {\n      var lengthDelta = newItems.length - deleteCount;\n      this.updateArrayLength_(length, lengthDelta); // checks if internal array wasn't modified\n    }\n    var res = this.spliceItemsIntoValues_(index, deleteCount, newItems);\n    if (deleteCount !== 0 || newItems.length !== 0) {\n      this.notifyArraySplice_(index, newItems, res);\n    }\n    return this.dehanceValues_(res);\n  };\n  _proto.spliceItemsIntoValues_ = function spliceItemsIntoValues_(index, deleteCount, newItems) {\n    if (newItems.length < MAX_SPLICE_SIZE) {\n      var _this$values_;\n      return (_this$values_ = this.values_).splice.apply(_this$values_, [index, deleteCount].concat(newItems));\n    } else {\n      // The items removed by the splice\n      var res = this.values_.slice(index, index + deleteCount);\n      // The items that that should remain at the end of the array\n      var oldItems = this.values_.slice(index + deleteCount);\n      // New length is the previous length + addition count - deletion count\n      this.values_.length += newItems.length - deleteCount;\n      for (var i = 0; i < newItems.length; i++) {\n        this.values_[index + i] = newItems[i];\n      }\n      for (var _i = 0; _i < oldItems.length; _i++) {\n        this.values_[index + newItems.length + _i] = oldItems[_i];\n      }\n      return res;\n    }\n  };\n  _proto.notifyArrayChildUpdate_ = function notifyArrayChildUpdate_(index, newValue, oldValue) {\n    var notifySpy = !this.owned_ && isSpyEnabled();\n    var notify = hasListeners(this);\n    var change = notify || notifySpy ? {\n      observableKind: \"array\",\n      object: this.proxy_,\n      type: UPDATE,\n      debugObjectName: this.atom_.name_,\n      index: index,\n      newValue: newValue,\n      oldValue: oldValue\n    } : null;\n    // The reason why this is on right hand side here (and not above), is this way the uglifier will drop it, but it won't\n    // cause any runtime overhead in development mode without NODE_ENV set, unless spying is enabled\n    if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n      spyReportStart(change);\n    }\n    this.atom_.reportChanged();\n    if (notify) {\n      notifyListeners(this, change);\n    }\n    if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n      spyReportEnd();\n    }\n  };\n  _proto.notifyArraySplice_ = function notifyArraySplice_(index, added, removed) {\n    var notifySpy = !this.owned_ && isSpyEnabled();\n    var notify = hasListeners(this);\n    var change = notify || notifySpy ? {\n      observableKind: \"array\",\n      object: this.proxy_,\n      debugObjectName: this.atom_.name_,\n      type: SPLICE,\n      index: index,\n      removed: removed,\n      added: added,\n      removedCount: removed.length,\n      addedCount: added.length\n    } : null;\n    if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n      spyReportStart(change);\n    }\n    this.atom_.reportChanged();\n    // conform: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/observe\n    if (notify) {\n      notifyListeners(this, change);\n    }\n    if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n      spyReportEnd();\n    }\n  };\n  _proto.get_ = function get_(index) {\n    if (this.legacyMode_ && index >= this.values_.length) {\n      console.warn(process.env.NODE_ENV !== \"production\" ? \"[mobx.array] Attempt to read an array index (\" + index + \") that is out of bounds (\" + this.values_.length + \"). Please check length first. Out of bound indices will not be tracked by MobX\" : \"[mobx] Out of bounds read: \" + index);\n      return undefined;\n    }\n    this.atom_.reportObserved();\n    return this.dehanceValue_(this.values_[index]);\n  };\n  _proto.set_ = function set_(index, newValue) {\n    var values = this.values_;\n    if (this.legacyMode_ && index > values.length) {\n      // out of bounds\n      die(17, index, values.length);\n    }\n    if (index < values.length) {\n      // update at index in range\n      checkIfStateModificationsAreAllowed(this.atom_);\n      var oldValue = values[index];\n      if (hasInterceptors(this)) {\n        var change = interceptChange(this, {\n          type: UPDATE,\n          object: this.proxy_,\n          // since \"this\" is the real array we need to pass its proxy\n          index: index,\n          newValue: newValue\n        });\n        if (!change) {\n          return;\n        }\n        newValue = change.newValue;\n      }\n      newValue = this.enhancer_(newValue, oldValue);\n      var changed = newValue !== oldValue;\n      if (changed) {\n        values[index] = newValue;\n        this.notifyArrayChildUpdate_(index, newValue, oldValue);\n      }\n    } else {\n      // For out of bound index, we don't create an actual sparse array,\n      // but rather fill the holes with undefined (same as setArrayLength_).\n      // This could be considered a bug.\n      var newItems = new Array(index + 1 - values.length);\n      for (var i = 0; i < newItems.length - 1; i++) {\n        newItems[i] = undefined;\n      } // No Array.fill everywhere...\n      newItems[newItems.length - 1] = newValue;\n      this.spliceWithArray_(values.length, 0, newItems);\n    }\n  };\n  return ObservableArrayAdministration;\n}();\nfunction createObservableArray(initialValues, enhancer, name, owned) {\n  if (name === void 0) {\n    name = process.env.NODE_ENV !== \"production\" ? \"ObservableArray@\" + getNextId() : \"ObservableArray\";\n  }\n  if (owned === void 0) {\n    owned = false;\n  }\n  assertProxies();\n  return initObservable(function () {\n    var adm = new ObservableArrayAdministration(name, enhancer, owned, false);\n    addHiddenFinalProp(adm.values_, $mobx, adm);\n    var proxy = new Proxy(adm.values_, arrayTraps);\n    adm.proxy_ = proxy;\n    if (initialValues && initialValues.length) {\n      adm.spliceWithArray_(0, 0, initialValues);\n    }\n    return proxy;\n  });\n}\n// eslint-disable-next-line\nvar arrayExtensions = {\n  clear: function clear() {\n    return this.splice(0);\n  },\n  replace: function replace(newItems) {\n    var adm = this[$mobx];\n    return adm.spliceWithArray_(0, adm.values_.length, newItems);\n  },\n  // Used by JSON.stringify\n  toJSON: function toJSON() {\n    return this.slice();\n  },\n  /*\n   * functions that do alter the internal structure of the array, (based on lib.es6.d.ts)\n   * since these functions alter the inner structure of the array, the have side effects.\n   * Because the have side effects, they should not be used in computed function,\n   * and for that reason the do not call dependencyState.notifyObserved\n   */\n  splice: function splice(index, deleteCount) {\n    for (var _len = arguments.length, newItems = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n      newItems[_key - 2] = arguments[_key];\n    }\n    var adm = this[$mobx];\n    switch (arguments.length) {\n      case 0:\n        return [];\n      case 1:\n        return adm.spliceWithArray_(index);\n      case 2:\n        return adm.spliceWithArray_(index, deleteCount);\n    }\n    return adm.spliceWithArray_(index, deleteCount, newItems);\n  },\n  spliceWithArray: function spliceWithArray(index, deleteCount, newItems) {\n    return this[$mobx].spliceWithArray_(index, deleteCount, newItems);\n  },\n  push: function push() {\n    var adm = this[$mobx];\n    for (var _len2 = arguments.length, items = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      items[_key2] = arguments[_key2];\n    }\n    adm.spliceWithArray_(adm.values_.length, 0, items);\n    return adm.values_.length;\n  },\n  pop: function pop() {\n    return this.splice(Math.max(this[$mobx].values_.length - 1, 0), 1)[0];\n  },\n  shift: function shift() {\n    return this.splice(0, 1)[0];\n  },\n  unshift: function unshift() {\n    var adm = this[$mobx];\n    for (var _len3 = arguments.length, items = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      items[_key3] = arguments[_key3];\n    }\n    adm.spliceWithArray_(0, 0, items);\n    return adm.values_.length;\n  },\n  reverse: function reverse() {\n    // reverse by default mutates in place before returning the result\n    // which makes it both a 'derivation' and a 'mutation'.\n    if (globalState.trackingDerivation) {\n      die(37, \"reverse\");\n    }\n    this.replace(this.slice().reverse());\n    return this;\n  },\n  sort: function sort() {\n    // sort by default mutates in place before returning the result\n    // which goes against all good practices. Let's not change the array in place!\n    if (globalState.trackingDerivation) {\n      die(37, \"sort\");\n    }\n    var copy = this.slice();\n    copy.sort.apply(copy, arguments);\n    this.replace(copy);\n    return this;\n  },\n  remove: function remove(value) {\n    var adm = this[$mobx];\n    var idx = adm.dehanceValues_(adm.values_).indexOf(value);\n    if (idx > -1) {\n      this.splice(idx, 1);\n      return true;\n    }\n    return false;\n  }\n};\n/**\n * Wrap function from prototype\n * Without this, everything works as well, but this works\n * faster as everything works on unproxied values\n */\naddArrayExtension(\"at\", simpleFunc);\naddArrayExtension(\"concat\", simpleFunc);\naddArrayExtension(\"flat\", simpleFunc);\naddArrayExtension(\"includes\", simpleFunc);\naddArrayExtension(\"indexOf\", simpleFunc);\naddArrayExtension(\"join\", simpleFunc);\naddArrayExtension(\"lastIndexOf\", simpleFunc);\naddArrayExtension(\"slice\", simpleFunc);\naddArrayExtension(\"toString\", simpleFunc);\naddArrayExtension(\"toLocaleString\", simpleFunc);\naddArrayExtension(\"toSorted\", simpleFunc);\naddArrayExtension(\"toSpliced\", simpleFunc);\naddArrayExtension(\"with\", simpleFunc);\n// map\naddArrayExtension(\"every\", mapLikeFunc);\naddArrayExtension(\"filter\", mapLikeFunc);\naddArrayExtension(\"find\", mapLikeFunc);\naddArrayExtension(\"findIndex\", mapLikeFunc);\naddArrayExtension(\"findLast\", mapLikeFunc);\naddArrayExtension(\"findLastIndex\", mapLikeFunc);\naddArrayExtension(\"flatMap\", mapLikeFunc);\naddArrayExtension(\"forEach\", mapLikeFunc);\naddArrayExtension(\"map\", mapLikeFunc);\naddArrayExtension(\"some\", mapLikeFunc);\naddArrayExtension(\"toReversed\", mapLikeFunc);\n// reduce\naddArrayExtension(\"reduce\", reduceLikeFunc);\naddArrayExtension(\"reduceRight\", reduceLikeFunc);\nfunction addArrayExtension(funcName, funcFactory) {\n  if (typeof Array.prototype[funcName] === \"function\") {\n    arrayExtensions[funcName] = funcFactory(funcName);\n  }\n}\n// Report and delegate to dehanced array\nfunction simpleFunc(funcName) {\n  return function () {\n    var adm = this[$mobx];\n    adm.atom_.reportObserved();\n    var dehancedValues = adm.dehanceValues_(adm.values_);\n    return dehancedValues[funcName].apply(dehancedValues, arguments);\n  };\n}\n// Make sure callbacks receive correct array arg #2326\nfunction mapLikeFunc(funcName) {\n  return function (callback, thisArg) {\n    var _this2 = this;\n    var adm = this[$mobx];\n    adm.atom_.reportObserved();\n    var dehancedValues = adm.dehanceValues_(adm.values_);\n    return dehancedValues[funcName](function (element, index) {\n      return callback.call(thisArg, element, index, _this2);\n    });\n  };\n}\n// Make sure callbacks receive correct array arg #2326\nfunction reduceLikeFunc(funcName) {\n  return function () {\n    var _this3 = this;\n    var adm = this[$mobx];\n    adm.atom_.reportObserved();\n    var dehancedValues = adm.dehanceValues_(adm.values_);\n    // #2432 - reduce behavior depends on arguments.length\n    var callback = arguments[0];\n    arguments[0] = function (accumulator, currentValue, index) {\n      return callback(accumulator, currentValue, index, _this3);\n    };\n    return dehancedValues[funcName].apply(dehancedValues, arguments);\n  };\n}\nvar isObservableArrayAdministration = /*#__PURE__*/createInstanceofPredicate(\"ObservableArrayAdministration\", ObservableArrayAdministration);\nfunction isObservableArray(thing) {\n  return isObject(thing) && isObservableArrayAdministration(thing[$mobx]);\n}\n\nvar ObservableMapMarker = {};\nvar ADD = \"add\";\nvar DELETE = \"delete\";\n// just extend Map? See also https://gist.github.com/nestharus/13b4d74f2ef4a2f4357dbd3fc23c1e54\n// But: https://github.com/mobxjs/mobx/issues/1556\nvar ObservableMap = /*#__PURE__*/function () {\n  function ObservableMap(initialData, enhancer_, name_) {\n    var _this = this;\n    if (enhancer_ === void 0) {\n      enhancer_ = deepEnhancer;\n    }\n    if (name_ === void 0) {\n      name_ = process.env.NODE_ENV !== \"production\" ? \"ObservableMap@\" + getNextId() : \"ObservableMap\";\n    }\n    this.enhancer_ = void 0;\n    this.name_ = void 0;\n    this[$mobx] = ObservableMapMarker;\n    this.data_ = void 0;\n    this.hasMap_ = void 0;\n    // hasMap, not hashMap >-).\n    this.keysAtom_ = void 0;\n    this.interceptors_ = void 0;\n    this.changeListeners_ = void 0;\n    this.dehancer = void 0;\n    this.enhancer_ = enhancer_;\n    this.name_ = name_;\n    if (!isFunction(Map)) {\n      die(18);\n    }\n    initObservable(function () {\n      _this.keysAtom_ = createAtom(process.env.NODE_ENV !== \"production\" ? _this.name_ + \".keys()\" : \"ObservableMap.keys()\");\n      _this.data_ = new Map();\n      _this.hasMap_ = new Map();\n      if (initialData) {\n        _this.merge(initialData);\n      }\n    });\n  }\n  var _proto = ObservableMap.prototype;\n  _proto.has_ = function has_(key) {\n    return this.data_.has(key);\n  };\n  _proto.has = function has(key) {\n    var _this2 = this;\n    if (!globalState.trackingDerivation) {\n      return this.has_(key);\n    }\n    var entry = this.hasMap_.get(key);\n    if (!entry) {\n      var newEntry = entry = new ObservableValue(this.has_(key), referenceEnhancer, process.env.NODE_ENV !== \"production\" ? this.name_ + \".\" + stringifyKey(key) + \"?\" : \"ObservableMap.key?\", false);\n      this.hasMap_.set(key, newEntry);\n      onBecomeUnobserved(newEntry, function () {\n        return _this2.hasMap_[\"delete\"](key);\n      });\n    }\n    return entry.get();\n  };\n  _proto.set = function set(key, value) {\n    var hasKey = this.has_(key);\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        type: hasKey ? UPDATE : ADD,\n        object: this,\n        newValue: value,\n        name: key\n      });\n      if (!change) {\n        return this;\n      }\n      value = change.newValue;\n    }\n    if (hasKey) {\n      this.updateValue_(key, value);\n    } else {\n      this.addValue_(key, value);\n    }\n    return this;\n  };\n  _proto[\"delete\"] = function _delete(key) {\n    var _this3 = this;\n    checkIfStateModificationsAreAllowed(this.keysAtom_);\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        type: DELETE,\n        object: this,\n        name: key\n      });\n      if (!change) {\n        return false;\n      }\n    }\n    if (this.has_(key)) {\n      var notifySpy = isSpyEnabled();\n      var notify = hasListeners(this);\n      var _change = notify || notifySpy ? {\n        observableKind: \"map\",\n        debugObjectName: this.name_,\n        type: DELETE,\n        object: this,\n        oldValue: this.data_.get(key).value_,\n        name: key\n      } : null;\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportStart(_change);\n      } // TODO fix type\n      transaction(function () {\n        var _this3$hasMap_$get;\n        _this3.keysAtom_.reportChanged();\n        (_this3$hasMap_$get = _this3.hasMap_.get(key)) == null || _this3$hasMap_$get.setNewValue_(false);\n        var observable = _this3.data_.get(key);\n        observable.setNewValue_(undefined);\n        _this3.data_[\"delete\"](key);\n      });\n      if (notify) {\n        notifyListeners(this, _change);\n      }\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportEnd();\n      }\n      return true;\n    }\n    return false;\n  };\n  _proto.updateValue_ = function updateValue_(key, newValue) {\n    var observable = this.data_.get(key);\n    newValue = observable.prepareNewValue_(newValue);\n    if (newValue !== globalState.UNCHANGED) {\n      var notifySpy = isSpyEnabled();\n      var notify = hasListeners(this);\n      var change = notify || notifySpy ? {\n        observableKind: \"map\",\n        debugObjectName: this.name_,\n        type: UPDATE,\n        object: this,\n        oldValue: observable.value_,\n        name: key,\n        newValue: newValue\n      } : null;\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportStart(change);\n      } // TODO fix type\n      observable.setNewValue_(newValue);\n      if (notify) {\n        notifyListeners(this, change);\n      }\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportEnd();\n      }\n    }\n  };\n  _proto.addValue_ = function addValue_(key, newValue) {\n    var _this4 = this;\n    checkIfStateModificationsAreAllowed(this.keysAtom_);\n    transaction(function () {\n      var _this4$hasMap_$get;\n      var observable = new ObservableValue(newValue, _this4.enhancer_, process.env.NODE_ENV !== \"production\" ? _this4.name_ + \".\" + stringifyKey(key) : \"ObservableMap.key\", false);\n      _this4.data_.set(key, observable);\n      newValue = observable.value_; // value might have been changed\n      (_this4$hasMap_$get = _this4.hasMap_.get(key)) == null || _this4$hasMap_$get.setNewValue_(true);\n      _this4.keysAtom_.reportChanged();\n    });\n    var notifySpy = isSpyEnabled();\n    var notify = hasListeners(this);\n    var change = notify || notifySpy ? {\n      observableKind: \"map\",\n      debugObjectName: this.name_,\n      type: ADD,\n      object: this,\n      name: key,\n      newValue: newValue\n    } : null;\n    if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n      spyReportStart(change);\n    } // TODO fix type\n    if (notify) {\n      notifyListeners(this, change);\n    }\n    if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n      spyReportEnd();\n    }\n  };\n  _proto.get = function get(key) {\n    if (this.has(key)) {\n      return this.dehanceValue_(this.data_.get(key).get());\n    }\n    return this.dehanceValue_(undefined);\n  };\n  _proto.dehanceValue_ = function dehanceValue_(value) {\n    if (this.dehancer !== undefined) {\n      return this.dehancer(value);\n    }\n    return value;\n  };\n  _proto.keys = function keys() {\n    this.keysAtom_.reportObserved();\n    return this.data_.keys();\n  };\n  _proto.values = function values() {\n    var self = this;\n    var keys = this.keys();\n    return makeIterableForMap({\n      next: function next() {\n        var _keys$next = keys.next(),\n          done = _keys$next.done,\n          value = _keys$next.value;\n        return {\n          done: done,\n          value: done ? undefined : self.get(value)\n        };\n      }\n    });\n  };\n  _proto.entries = function entries() {\n    var self = this;\n    var keys = this.keys();\n    return makeIterableForMap({\n      next: function next() {\n        var _keys$next2 = keys.next(),\n          done = _keys$next2.done,\n          value = _keys$next2.value;\n        return {\n          done: done,\n          value: done ? undefined : [value, self.get(value)]\n        };\n      }\n    });\n  };\n  _proto[Symbol.iterator] = function () {\n    return this.entries();\n  };\n  _proto.forEach = function forEach(callback, thisArg) {\n    for (var _iterator = _createForOfIteratorHelperLoose(this), _step; !(_step = _iterator()).done;) {\n      var _step$value = _step.value,\n        key = _step$value[0],\n        value = _step$value[1];\n      callback.call(thisArg, value, key, this);\n    }\n  }\n  /** Merge another object into this object, returns this. */;\n  _proto.merge = function merge(other) {\n    var _this5 = this;\n    if (isObservableMap(other)) {\n      other = new Map(other);\n    }\n    transaction(function () {\n      if (isPlainObject(other)) {\n        getPlainObjectKeys(other).forEach(function (key) {\n          return _this5.set(key, other[key]);\n        });\n      } else if (Array.isArray(other)) {\n        other.forEach(function (_ref) {\n          var key = _ref[0],\n            value = _ref[1];\n          return _this5.set(key, value);\n        });\n      } else if (isES6Map(other)) {\n        if (!isPlainES6Map(other)) {\n          die(19, other);\n        }\n        other.forEach(function (value, key) {\n          return _this5.set(key, value);\n        });\n      } else if (other !== null && other !== undefined) {\n        die(20, other);\n      }\n    });\n    return this;\n  };\n  _proto.clear = function clear() {\n    var _this6 = this;\n    transaction(function () {\n      untracked(function () {\n        for (var _iterator2 = _createForOfIteratorHelperLoose(_this6.keys()), _step2; !(_step2 = _iterator2()).done;) {\n          var key = _step2.value;\n          _this6[\"delete\"](key);\n        }\n      });\n    });\n  };\n  _proto.replace = function replace(values) {\n    var _this7 = this;\n    // Implementation requirements:\n    // - respect ordering of replacement map\n    // - allow interceptors to run and potentially prevent individual operations\n    // - don't recreate observables that already exist in original map (so we don't destroy existing subscriptions)\n    // - don't _keysAtom.reportChanged if the keys of resulting map are indentical (order matters!)\n    // - note that result map may differ from replacement map due to the interceptors\n    transaction(function () {\n      // Convert to map so we can do quick key lookups\n      var replacementMap = convertToMap(values);\n      var orderedData = new Map();\n      // Used for optimization\n      var keysReportChangedCalled = false;\n      // Delete keys that don't exist in replacement map\n      // if the key deletion is prevented by interceptor\n      // add entry at the beginning of the result map\n      for (var _iterator3 = _createForOfIteratorHelperLoose(_this7.data_.keys()), _step3; !(_step3 = _iterator3()).done;) {\n        var key = _step3.value;\n        // Concurrently iterating/deleting keys\n        // iterator should handle this correctly\n        if (!replacementMap.has(key)) {\n          var deleted = _this7[\"delete\"](key);\n          // Was the key removed?\n          if (deleted) {\n            // _keysAtom.reportChanged() was already called\n            keysReportChangedCalled = true;\n          } else {\n            // Delete prevented by interceptor\n            var value = _this7.data_.get(key);\n            orderedData.set(key, value);\n          }\n        }\n      }\n      // Merge entries\n      for (var _iterator4 = _createForOfIteratorHelperLoose(replacementMap.entries()), _step4; !(_step4 = _iterator4()).done;) {\n        var _step4$value = _step4.value,\n          _key = _step4$value[0],\n          _value = _step4$value[1];\n        // We will want to know whether a new key is added\n        var keyExisted = _this7.data_.has(_key);\n        // Add or update value\n        _this7.set(_key, _value);\n        // The addition could have been prevent by interceptor\n        if (_this7.data_.has(_key)) {\n          // The update could have been prevented by interceptor\n          // and also we want to preserve existing values\n          // so use value from _data map (instead of replacement map)\n          var _value2 = _this7.data_.get(_key);\n          orderedData.set(_key, _value2);\n          // Was a new key added?\n          if (!keyExisted) {\n            // _keysAtom.reportChanged() was already called\n            keysReportChangedCalled = true;\n          }\n        }\n      }\n      // Check for possible key order change\n      if (!keysReportChangedCalled) {\n        if (_this7.data_.size !== orderedData.size) {\n          // If size differs, keys are definitely modified\n          _this7.keysAtom_.reportChanged();\n        } else {\n          var iter1 = _this7.data_.keys();\n          var iter2 = orderedData.keys();\n          var next1 = iter1.next();\n          var next2 = iter2.next();\n          while (!next1.done) {\n            if (next1.value !== next2.value) {\n              _this7.keysAtom_.reportChanged();\n              break;\n            }\n            next1 = iter1.next();\n            next2 = iter2.next();\n          }\n        }\n      }\n      // Use correctly ordered map\n      _this7.data_ = orderedData;\n    });\n    return this;\n  };\n  _proto.toString = function toString() {\n    return \"[object ObservableMap]\";\n  };\n  _proto.toJSON = function toJSON() {\n    return Array.from(this);\n  };\n  /**\n   * Observes this object. Triggers for the events 'add', 'update' and 'delete'.\n   * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe\n   * for callback details\n   */\n  _proto.observe_ = function observe_(listener, fireImmediately) {\n    if (process.env.NODE_ENV !== \"production\" && fireImmediately === true) {\n      die(\"`observe` doesn't support fireImmediately=true in combination with maps.\");\n    }\n    return registerListener(this, listener);\n  };\n  _proto.intercept_ = function intercept_(handler) {\n    return registerInterceptor(this, handler);\n  };\n  return _createClass(ObservableMap, [{\n    key: \"size\",\n    get: function get() {\n      this.keysAtom_.reportObserved();\n      return this.data_.size;\n    }\n  }, {\n    key: Symbol.toStringTag,\n    get: function get() {\n      return \"Map\";\n    }\n  }]);\n}();\n// eslint-disable-next-line\nvar isObservableMap = /*#__PURE__*/createInstanceofPredicate(\"ObservableMap\", ObservableMap);\nfunction makeIterableForMap(iterator) {\n  iterator[Symbol.toStringTag] = \"MapIterator\";\n  return makeIterable(iterator);\n}\nfunction convertToMap(dataStructure) {\n  if (isES6Map(dataStructure) || isObservableMap(dataStructure)) {\n    return dataStructure;\n  } else if (Array.isArray(dataStructure)) {\n    return new Map(dataStructure);\n  } else if (isPlainObject(dataStructure)) {\n    var map = new Map();\n    for (var key in dataStructure) {\n      map.set(key, dataStructure[key]);\n    }\n    return map;\n  } else {\n    return die(21, dataStructure);\n  }\n}\n\nvar ObservableSetMarker = {};\nvar ObservableSet = /*#__PURE__*/function () {\n  function ObservableSet(initialData, enhancer, name_) {\n    var _this = this;\n    if (enhancer === void 0) {\n      enhancer = deepEnhancer;\n    }\n    if (name_ === void 0) {\n      name_ = process.env.NODE_ENV !== \"production\" ? \"ObservableSet@\" + getNextId() : \"ObservableSet\";\n    }\n    this.name_ = void 0;\n    this[$mobx] = ObservableSetMarker;\n    this.data_ = new Set();\n    this.atom_ = void 0;\n    this.changeListeners_ = void 0;\n    this.interceptors_ = void 0;\n    this.dehancer = void 0;\n    this.enhancer_ = void 0;\n    this.name_ = name_;\n    if (!isFunction(Set)) {\n      die(22);\n    }\n    this.enhancer_ = function (newV, oldV) {\n      return enhancer(newV, oldV, name_);\n    };\n    initObservable(function () {\n      _this.atom_ = createAtom(_this.name_);\n      if (initialData) {\n        _this.replace(initialData);\n      }\n    });\n  }\n  var _proto = ObservableSet.prototype;\n  _proto.dehanceValue_ = function dehanceValue_(value) {\n    if (this.dehancer !== undefined) {\n      return this.dehancer(value);\n    }\n    return value;\n  };\n  _proto.clear = function clear() {\n    var _this2 = this;\n    transaction(function () {\n      untracked(function () {\n        for (var _iterator = _createForOfIteratorHelperLoose(_this2.data_.values()), _step; !(_step = _iterator()).done;) {\n          var value = _step.value;\n          _this2[\"delete\"](value);\n        }\n      });\n    });\n  };\n  _proto.forEach = function forEach(callbackFn, thisArg) {\n    for (var _iterator2 = _createForOfIteratorHelperLoose(this), _step2; !(_step2 = _iterator2()).done;) {\n      var value = _step2.value;\n      callbackFn.call(thisArg, value, value, this);\n    }\n  };\n  _proto.add = function add(value) {\n    var _this3 = this;\n    checkIfStateModificationsAreAllowed(this.atom_);\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        type: ADD,\n        object: this,\n        newValue: value\n      });\n      if (!change) {\n        return this;\n      }\n      // implemented reassignment same as it's done for ObservableMap\n      value = change.newValue;\n    }\n    if (!this.has(value)) {\n      transaction(function () {\n        _this3.data_.add(_this3.enhancer_(value, undefined));\n        _this3.atom_.reportChanged();\n      });\n      var notifySpy = process.env.NODE_ENV !== \"production\" && isSpyEnabled();\n      var notify = hasListeners(this);\n      var _change = notify || notifySpy ? {\n        observableKind: \"set\",\n        debugObjectName: this.name_,\n        type: ADD,\n        object: this,\n        newValue: value\n      } : null;\n      if (notifySpy && process.env.NODE_ENV !== \"production\") {\n        spyReportStart(_change);\n      }\n      if (notify) {\n        notifyListeners(this, _change);\n      }\n      if (notifySpy && process.env.NODE_ENV !== \"production\") {\n        spyReportEnd();\n      }\n    }\n    return this;\n  };\n  _proto[\"delete\"] = function _delete(value) {\n    var _this4 = this;\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        type: DELETE,\n        object: this,\n        oldValue: value\n      });\n      if (!change) {\n        return false;\n      }\n    }\n    if (this.has(value)) {\n      var notifySpy = process.env.NODE_ENV !== \"production\" && isSpyEnabled();\n      var notify = hasListeners(this);\n      var _change2 = notify || notifySpy ? {\n        observableKind: \"set\",\n        debugObjectName: this.name_,\n        type: DELETE,\n        object: this,\n        oldValue: value\n      } : null;\n      if (notifySpy && process.env.NODE_ENV !== \"production\") {\n        spyReportStart(_change2);\n      }\n      transaction(function () {\n        _this4.atom_.reportChanged();\n        _this4.data_[\"delete\"](value);\n      });\n      if (notify) {\n        notifyListeners(this, _change2);\n      }\n      if (notifySpy && process.env.NODE_ENV !== \"production\") {\n        spyReportEnd();\n      }\n      return true;\n    }\n    return false;\n  };\n  _proto.has = function has(value) {\n    this.atom_.reportObserved();\n    return this.data_.has(this.dehanceValue_(value));\n  };\n  _proto.entries = function entries() {\n    var values = this.values();\n    return makeIterableForSet({\n      next: function next() {\n        var _values$next = values.next(),\n          value = _values$next.value,\n          done = _values$next.done;\n        return !done ? {\n          value: [value, value],\n          done: done\n        } : {\n          value: undefined,\n          done: done\n        };\n      }\n    });\n  };\n  _proto.keys = function keys() {\n    return this.values();\n  };\n  _proto.values = function values() {\n    this.atom_.reportObserved();\n    var self = this;\n    var values = this.data_.values();\n    return makeIterableForSet({\n      next: function next() {\n        var _values$next2 = values.next(),\n          value = _values$next2.value,\n          done = _values$next2.done;\n        return !done ? {\n          value: self.dehanceValue_(value),\n          done: done\n        } : {\n          value: undefined,\n          done: done\n        };\n      }\n    });\n  };\n  _proto.intersection = function intersection(otherSet) {\n    if (isES6Set(otherSet) && !isObservableSet(otherSet)) {\n      return otherSet.intersection(this);\n    } else {\n      var dehancedSet = new Set(this);\n      return dehancedSet.intersection(otherSet);\n    }\n  };\n  _proto.union = function union(otherSet) {\n    if (isES6Set(otherSet) && !isObservableSet(otherSet)) {\n      return otherSet.union(this);\n    } else {\n      var dehancedSet = new Set(this);\n      return dehancedSet.union(otherSet);\n    }\n  };\n  _proto.difference = function difference(otherSet) {\n    return new Set(this).difference(otherSet);\n  };\n  _proto.symmetricDifference = function symmetricDifference(otherSet) {\n    if (isES6Set(otherSet) && !isObservableSet(otherSet)) {\n      return otherSet.symmetricDifference(this);\n    } else {\n      var dehancedSet = new Set(this);\n      return dehancedSet.symmetricDifference(otherSet);\n    }\n  };\n  _proto.isSubsetOf = function isSubsetOf(otherSet) {\n    return new Set(this).isSubsetOf(otherSet);\n  };\n  _proto.isSupersetOf = function isSupersetOf(otherSet) {\n    return new Set(this).isSupersetOf(otherSet);\n  };\n  _proto.isDisjointFrom = function isDisjointFrom(otherSet) {\n    if (isES6Set(otherSet) && !isObservableSet(otherSet)) {\n      return otherSet.isDisjointFrom(this);\n    } else {\n      var dehancedSet = new Set(this);\n      return dehancedSet.isDisjointFrom(otherSet);\n    }\n  };\n  _proto.replace = function replace(other) {\n    var _this5 = this;\n    if (isObservableSet(other)) {\n      other = new Set(other);\n    }\n    transaction(function () {\n      if (Array.isArray(other)) {\n        _this5.clear();\n        other.forEach(function (value) {\n          return _this5.add(value);\n        });\n      } else if (isES6Set(other)) {\n        _this5.clear();\n        other.forEach(function (value) {\n          return _this5.add(value);\n        });\n      } else if (other !== null && other !== undefined) {\n        die(\"Cannot initialize set from \" + other);\n      }\n    });\n    return this;\n  };\n  _proto.observe_ = function observe_(listener, fireImmediately) {\n    // ... 'fireImmediately' could also be true?\n    if (process.env.NODE_ENV !== \"production\" && fireImmediately === true) {\n      die(\"`observe` doesn't support fireImmediately=true in combination with sets.\");\n    }\n    return registerListener(this, listener);\n  };\n  _proto.intercept_ = function intercept_(handler) {\n    return registerInterceptor(this, handler);\n  };\n  _proto.toJSON = function toJSON() {\n    return Array.from(this);\n  };\n  _proto.toString = function toString() {\n    return \"[object ObservableSet]\";\n  };\n  _proto[Symbol.iterator] = function () {\n    return this.values();\n  };\n  return _createClass(ObservableSet, [{\n    key: \"size\",\n    get: function get() {\n      this.atom_.reportObserved();\n      return this.data_.size;\n    }\n  }, {\n    key: Symbol.toStringTag,\n    get: function get() {\n      return \"Set\";\n    }\n  }]);\n}();\n// eslint-disable-next-line\nvar isObservableSet = /*#__PURE__*/createInstanceofPredicate(\"ObservableSet\", ObservableSet);\nfunction makeIterableForSet(iterator) {\n  iterator[Symbol.toStringTag] = \"SetIterator\";\n  return makeIterable(iterator);\n}\n\nvar descriptorCache = /*#__PURE__*/Object.create(null);\nvar REMOVE = \"remove\";\nvar ObservableObjectAdministration = /*#__PURE__*/function () {\n  function ObservableObjectAdministration(target_, values_, name_,\n  // Used anytime annotation is not explicitely provided\n  defaultAnnotation_) {\n    if (values_ === void 0) {\n      values_ = new Map();\n    }\n    if (defaultAnnotation_ === void 0) {\n      defaultAnnotation_ = autoAnnotation;\n    }\n    this.target_ = void 0;\n    this.values_ = void 0;\n    this.name_ = void 0;\n    this.defaultAnnotation_ = void 0;\n    this.keysAtom_ = void 0;\n    this.changeListeners_ = void 0;\n    this.interceptors_ = void 0;\n    this.proxy_ = void 0;\n    this.isPlainObject_ = void 0;\n    this.appliedAnnotations_ = void 0;\n    this.pendingKeys_ = void 0;\n    this.target_ = target_;\n    this.values_ = values_;\n    this.name_ = name_;\n    this.defaultAnnotation_ = defaultAnnotation_;\n    this.keysAtom_ = new Atom(process.env.NODE_ENV !== \"production\" ? this.name_ + \".keys\" : \"ObservableObject.keys\");\n    // Optimization: we use this frequently\n    this.isPlainObject_ = isPlainObject(this.target_);\n    if (process.env.NODE_ENV !== \"production\" && !isAnnotation(this.defaultAnnotation_)) {\n      die(\"defaultAnnotation must be valid annotation\");\n    }\n    if (process.env.NODE_ENV !== \"production\") {\n      // Prepare structure for tracking which fields were already annotated\n      this.appliedAnnotations_ = {};\n    }\n  }\n  var _proto = ObservableObjectAdministration.prototype;\n  _proto.getObservablePropValue_ = function getObservablePropValue_(key) {\n    return this.values_.get(key).get();\n  };\n  _proto.setObservablePropValue_ = function setObservablePropValue_(key, newValue) {\n    var observable = this.values_.get(key);\n    if (observable instanceof ComputedValue) {\n      observable.set(newValue);\n      return true;\n    }\n    // intercept\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        type: UPDATE,\n        object: this.proxy_ || this.target_,\n        name: key,\n        newValue: newValue\n      });\n      if (!change) {\n        return null;\n      }\n      newValue = change.newValue;\n    }\n    newValue = observable.prepareNewValue_(newValue);\n    // notify spy & observers\n    if (newValue !== globalState.UNCHANGED) {\n      var notify = hasListeners(this);\n      var notifySpy = process.env.NODE_ENV !== \"production\" && isSpyEnabled();\n      var _change = notify || notifySpy ? {\n        type: UPDATE,\n        observableKind: \"object\",\n        debugObjectName: this.name_,\n        object: this.proxy_ || this.target_,\n        oldValue: observable.value_,\n        name: key,\n        newValue: newValue\n      } : null;\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportStart(_change);\n      }\n      observable.setNewValue_(newValue);\n      if (notify) {\n        notifyListeners(this, _change);\n      }\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportEnd();\n      }\n    }\n    return true;\n  };\n  _proto.get_ = function get_(key) {\n    if (globalState.trackingDerivation && !hasProp(this.target_, key)) {\n      // Key doesn't exist yet, subscribe for it in case it's added later\n      this.has_(key);\n    }\n    return this.target_[key];\n  }\n  /**\n   * @param {PropertyKey} key\n   * @param {any} value\n   * @param {Annotation|boolean} annotation true - use default annotation, false - copy as is\n   * @param {boolean} proxyTrap whether it's called from proxy trap\n   * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor\n   */;\n  _proto.set_ = function set_(key, value, proxyTrap) {\n    if (proxyTrap === void 0) {\n      proxyTrap = false;\n    }\n    // Don't use .has(key) - we care about own\n    if (hasProp(this.target_, key)) {\n      // Existing prop\n      if (this.values_.has(key)) {\n        // Observable (can be intercepted)\n        return this.setObservablePropValue_(key, value);\n      } else if (proxyTrap) {\n        // Non-observable - proxy\n        return Reflect.set(this.target_, key, value);\n      } else {\n        // Non-observable\n        this.target_[key] = value;\n        return true;\n      }\n    } else {\n      // New prop\n      return this.extend_(key, {\n        value: value,\n        enumerable: true,\n        writable: true,\n        configurable: true\n      }, this.defaultAnnotation_, proxyTrap);\n    }\n  }\n  // Trap for \"in\"\n;\n  _proto.has_ = function has_(key) {\n    if (!globalState.trackingDerivation) {\n      // Skip key subscription outside derivation\n      return key in this.target_;\n    }\n    this.pendingKeys_ || (this.pendingKeys_ = new Map());\n    var entry = this.pendingKeys_.get(key);\n    if (!entry) {\n      entry = new ObservableValue(key in this.target_, referenceEnhancer, process.env.NODE_ENV !== \"production\" ? this.name_ + \".\" + stringifyKey(key) + \"?\" : \"ObservableObject.key?\", false);\n      this.pendingKeys_.set(key, entry);\n    }\n    return entry.get();\n  }\n  /**\n   * @param {PropertyKey} key\n   * @param {Annotation|boolean} annotation true - use default annotation, false - ignore prop\n   */;\n  _proto.make_ = function make_(key, annotation) {\n    if (annotation === true) {\n      annotation = this.defaultAnnotation_;\n    }\n    if (annotation === false) {\n      return;\n    }\n    assertAnnotable(this, annotation, key);\n    if (!(key in this.target_)) {\n      var _this$target_$storedA;\n      // Throw on missing key, except for decorators:\n      // Decorator annotations are collected from whole prototype chain.\n      // When called from super() some props may not exist yet.\n      // However we don't have to worry about missing prop,\n      // because the decorator must have been applied to something.\n      if ((_this$target_$storedA = this.target_[storedAnnotationsSymbol]) != null && _this$target_$storedA[key]) {\n        return; // will be annotated by subclass constructor\n      } else {\n        die(1, annotation.annotationType_, this.name_ + \".\" + key.toString());\n      }\n    }\n    var source = this.target_;\n    while (source && source !== objectPrototype) {\n      var descriptor = getDescriptor(source, key);\n      if (descriptor) {\n        var outcome = annotation.make_(this, key, descriptor, source);\n        if (outcome === 0 /* MakeResult.Cancel */) {\n          return;\n        }\n        if (outcome === 1 /* MakeResult.Break */) {\n          break;\n        }\n      }\n      source = Object.getPrototypeOf(source);\n    }\n    recordAnnotationApplied(this, annotation, key);\n  }\n  /**\n   * @param {PropertyKey} key\n   * @param {PropertyDescriptor} descriptor\n   * @param {Annotation|boolean} annotation true - use default annotation, false - copy as is\n   * @param {boolean} proxyTrap whether it's called from proxy trap\n   * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor\n   */;\n  _proto.extend_ = function extend_(key, descriptor, annotation, proxyTrap) {\n    if (proxyTrap === void 0) {\n      proxyTrap = false;\n    }\n    if (annotation === true) {\n      annotation = this.defaultAnnotation_;\n    }\n    if (annotation === false) {\n      return this.defineProperty_(key, descriptor, proxyTrap);\n    }\n    assertAnnotable(this, annotation, key);\n    var outcome = annotation.extend_(this, key, descriptor, proxyTrap);\n    if (outcome) {\n      recordAnnotationApplied(this, annotation, key);\n    }\n    return outcome;\n  }\n  /**\n   * @param {PropertyKey} key\n   * @param {PropertyDescriptor} descriptor\n   * @param {boolean} proxyTrap whether it's called from proxy trap\n   * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor\n   */;\n  _proto.defineProperty_ = function defineProperty_(key, descriptor, proxyTrap) {\n    if (proxyTrap === void 0) {\n      proxyTrap = false;\n    }\n    checkIfStateModificationsAreAllowed(this.keysAtom_);\n    try {\n      startBatch();\n      // Delete\n      var deleteOutcome = this.delete_(key);\n      if (!deleteOutcome) {\n        // Failure or intercepted\n        return deleteOutcome;\n      }\n      // ADD interceptor\n      if (hasInterceptors(this)) {\n        var change = interceptChange(this, {\n          object: this.proxy_ || this.target_,\n          name: key,\n          type: ADD,\n          newValue: descriptor.value\n        });\n        if (!change) {\n          return null;\n        }\n        var newValue = change.newValue;\n        if (descriptor.value !== newValue) {\n          descriptor = _extends({}, descriptor, {\n            value: newValue\n          });\n        }\n      }\n      // Define\n      if (proxyTrap) {\n        if (!Reflect.defineProperty(this.target_, key, descriptor)) {\n          return false;\n        }\n      } else {\n        defineProperty(this.target_, key, descriptor);\n      }\n      // Notify\n      this.notifyPropertyAddition_(key, descriptor.value);\n    } finally {\n      endBatch();\n    }\n    return true;\n  }\n  // If original descriptor becomes relevant, move this to annotation directly\n;\n  _proto.defineObservableProperty_ = function defineObservableProperty_(key, value, enhancer, proxyTrap) {\n    if (proxyTrap === void 0) {\n      proxyTrap = false;\n    }\n    checkIfStateModificationsAreAllowed(this.keysAtom_);\n    try {\n      startBatch();\n      // Delete\n      var deleteOutcome = this.delete_(key);\n      if (!deleteOutcome) {\n        // Failure or intercepted\n        return deleteOutcome;\n      }\n      // ADD interceptor\n      if (hasInterceptors(this)) {\n        var change = interceptChange(this, {\n          object: this.proxy_ || this.target_,\n          name: key,\n          type: ADD,\n          newValue: value\n        });\n        if (!change) {\n          return null;\n        }\n        value = change.newValue;\n      }\n      var cachedDescriptor = getCachedObservablePropDescriptor(key);\n      var descriptor = {\n        configurable: globalState.safeDescriptors ? this.isPlainObject_ : true,\n        enumerable: true,\n        get: cachedDescriptor.get,\n        set: cachedDescriptor.set\n      };\n      // Define\n      if (proxyTrap) {\n        if (!Reflect.defineProperty(this.target_, key, descriptor)) {\n          return false;\n        }\n      } else {\n        defineProperty(this.target_, key, descriptor);\n      }\n      var observable = new ObservableValue(value, enhancer, process.env.NODE_ENV !== \"production\" ? this.name_ + \".\" + key.toString() : \"ObservableObject.key\", false);\n      this.values_.set(key, observable);\n      // Notify (value possibly changed by ObservableValue)\n      this.notifyPropertyAddition_(key, observable.value_);\n    } finally {\n      endBatch();\n    }\n    return true;\n  }\n  // If original descriptor becomes relevant, move this to annotation directly\n;\n  _proto.defineComputedProperty_ = function defineComputedProperty_(key, options, proxyTrap) {\n    if (proxyTrap === void 0) {\n      proxyTrap = false;\n    }\n    checkIfStateModificationsAreAllowed(this.keysAtom_);\n    try {\n      startBatch();\n      // Delete\n      var deleteOutcome = this.delete_(key);\n      if (!deleteOutcome) {\n        // Failure or intercepted\n        return deleteOutcome;\n      }\n      // ADD interceptor\n      if (hasInterceptors(this)) {\n        var change = interceptChange(this, {\n          object: this.proxy_ || this.target_,\n          name: key,\n          type: ADD,\n          newValue: undefined\n        });\n        if (!change) {\n          return null;\n        }\n      }\n      options.name || (options.name = process.env.NODE_ENV !== \"production\" ? this.name_ + \".\" + key.toString() : \"ObservableObject.key\");\n      options.context = this.proxy_ || this.target_;\n      var cachedDescriptor = getCachedObservablePropDescriptor(key);\n      var descriptor = {\n        configurable: globalState.safeDescriptors ? this.isPlainObject_ : true,\n        enumerable: false,\n        get: cachedDescriptor.get,\n        set: cachedDescriptor.set\n      };\n      // Define\n      if (proxyTrap) {\n        if (!Reflect.defineProperty(this.target_, key, descriptor)) {\n          return false;\n        }\n      } else {\n        defineProperty(this.target_, key, descriptor);\n      }\n      this.values_.set(key, new ComputedValue(options));\n      // Notify\n      this.notifyPropertyAddition_(key, undefined);\n    } finally {\n      endBatch();\n    }\n    return true;\n  }\n  /**\n   * @param {PropertyKey} key\n   * @param {PropertyDescriptor} descriptor\n   * @param {boolean} proxyTrap whether it's called from proxy trap\n   * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor\n   */;\n  _proto.delete_ = function delete_(key, proxyTrap) {\n    if (proxyTrap === void 0) {\n      proxyTrap = false;\n    }\n    checkIfStateModificationsAreAllowed(this.keysAtom_);\n    // No such prop\n    if (!hasProp(this.target_, key)) {\n      return true;\n    }\n    // Intercept\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        object: this.proxy_ || this.target_,\n        name: key,\n        type: REMOVE\n      });\n      // Cancelled\n      if (!change) {\n        return null;\n      }\n    }\n    // Delete\n    try {\n      var _this$pendingKeys_;\n      startBatch();\n      var notify = hasListeners(this);\n      var notifySpy = process.env.NODE_ENV !== \"production\" && isSpyEnabled();\n      var observable = this.values_.get(key);\n      // Value needed for spies/listeners\n      var value = undefined;\n      // Optimization: don't pull the value unless we will need it\n      if (!observable && (notify || notifySpy)) {\n        var _getDescriptor;\n        value = (_getDescriptor = getDescriptor(this.target_, key)) == null ? void 0 : _getDescriptor.value;\n      }\n      // delete prop (do first, may fail)\n      if (proxyTrap) {\n        if (!Reflect.deleteProperty(this.target_, key)) {\n          return false;\n        }\n      } else {\n        delete this.target_[key];\n      }\n      // Allow re-annotating this field\n      if (process.env.NODE_ENV !== \"production\") {\n        delete this.appliedAnnotations_[key];\n      }\n      // Clear observable\n      if (observable) {\n        this.values_[\"delete\"](key);\n        // for computed, value is undefined\n        if (observable instanceof ObservableValue) {\n          value = observable.value_;\n        }\n        // Notify: autorun(() => obj[key]), see #1796\n        propagateChanged(observable);\n      }\n      // Notify \"keys/entries/values\" observers\n      this.keysAtom_.reportChanged();\n      // Notify \"has\" observers\n      // \"in\" as it may still exist in proto\n      (_this$pendingKeys_ = this.pendingKeys_) == null || (_this$pendingKeys_ = _this$pendingKeys_.get(key)) == null || _this$pendingKeys_.set(key in this.target_);\n      // Notify spies/listeners\n      if (notify || notifySpy) {\n        var _change2 = {\n          type: REMOVE,\n          observableKind: \"object\",\n          object: this.proxy_ || this.target_,\n          debugObjectName: this.name_,\n          oldValue: value,\n          name: key\n        };\n        if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n          spyReportStart(_change2);\n        }\n        if (notify) {\n          notifyListeners(this, _change2);\n        }\n        if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n          spyReportEnd();\n        }\n      }\n    } finally {\n      endBatch();\n    }\n    return true;\n  }\n  /**\n   * Observes this object. Triggers for the events 'add', 'update' and 'delete'.\n   * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe\n   * for callback details\n   */;\n  _proto.observe_ = function observe_(callback, fireImmediately) {\n    if (process.env.NODE_ENV !== \"production\" && fireImmediately === true) {\n      die(\"`observe` doesn't support the fire immediately property for observable objects.\");\n    }\n    return registerListener(this, callback);\n  };\n  _proto.intercept_ = function intercept_(handler) {\n    return registerInterceptor(this, handler);\n  };\n  _proto.notifyPropertyAddition_ = function notifyPropertyAddition_(key, value) {\n    var _this$pendingKeys_2;\n    var notify = hasListeners(this);\n    var notifySpy = process.env.NODE_ENV !== \"production\" && isSpyEnabled();\n    if (notify || notifySpy) {\n      var change = notify || notifySpy ? {\n        type: ADD,\n        observableKind: \"object\",\n        debugObjectName: this.name_,\n        object: this.proxy_ || this.target_,\n        name: key,\n        newValue: value\n      } : null;\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportStart(change);\n      }\n      if (notify) {\n        notifyListeners(this, change);\n      }\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportEnd();\n      }\n    }\n    (_this$pendingKeys_2 = this.pendingKeys_) == null || (_this$pendingKeys_2 = _this$pendingKeys_2.get(key)) == null || _this$pendingKeys_2.set(true);\n    // Notify \"keys/entries/values\" observers\n    this.keysAtom_.reportChanged();\n  };\n  _proto.ownKeys_ = function ownKeys_() {\n    this.keysAtom_.reportObserved();\n    return ownKeys(this.target_);\n  };\n  _proto.keys_ = function keys_() {\n    // Returns enumerable && own, but unfortunately keysAtom will report on ANY key change.\n    // There is no way to distinguish between Object.keys(object) and Reflect.ownKeys(object) - both are handled by ownKeys trap.\n    // We can either over-report in Object.keys(object) or under-report in Reflect.ownKeys(object)\n    // We choose to over-report in Object.keys(object), because:\n    // - typically it's used with simple data objects\n    // - when symbolic/non-enumerable keys are relevant Reflect.ownKeys works as expected\n    this.keysAtom_.reportObserved();\n    return Object.keys(this.target_);\n  };\n  return ObservableObjectAdministration;\n}();\nfunction asObservableObject(target, options) {\n  var _options$name;\n  if (process.env.NODE_ENV !== \"production\" && options && isObservableObject(target)) {\n    die(\"Options can't be provided for already observable objects.\");\n  }\n  if (hasProp(target, $mobx)) {\n    if (process.env.NODE_ENV !== \"production\" && !(getAdministration(target) instanceof ObservableObjectAdministration)) {\n      die(\"Cannot convert '\" + getDebugName(target) + \"' into observable object:\" + \"\\nThe target is already observable of different type.\" + \"\\nExtending builtins is not supported.\");\n    }\n    return target;\n  }\n  if (process.env.NODE_ENV !== \"production\" && !Object.isExtensible(target)) {\n    die(\"Cannot make the designated object observable; it is not extensible\");\n  }\n  var name = (_options$name = options == null ? void 0 : options.name) != null ? _options$name : process.env.NODE_ENV !== \"production\" ? (isPlainObject(target) ? \"ObservableObject\" : target.constructor.name) + \"@\" + getNextId() : \"ObservableObject\";\n  var adm = new ObservableObjectAdministration(target, new Map(), String(name), getAnnotationFromOptions(options));\n  addHiddenProp(target, $mobx, adm);\n  return target;\n}\nvar isObservableObjectAdministration = /*#__PURE__*/createInstanceofPredicate(\"ObservableObjectAdministration\", ObservableObjectAdministration);\nfunction getCachedObservablePropDescriptor(key) {\n  return descriptorCache[key] || (descriptorCache[key] = {\n    get: function get() {\n      return this[$mobx].getObservablePropValue_(key);\n    },\n    set: function set(value) {\n      return this[$mobx].setObservablePropValue_(key, value);\n    }\n  });\n}\nfunction isObservableObject(thing) {\n  if (isObject(thing)) {\n    return isObservableObjectAdministration(thing[$mobx]);\n  }\n  return false;\n}\nfunction recordAnnotationApplied(adm, annotation, key) {\n  var _adm$target_$storedAn;\n  if (process.env.NODE_ENV !== \"production\") {\n    adm.appliedAnnotations_[key] = annotation;\n  }\n  // Remove applied decorator annotation so we don't try to apply it again in subclass constructor\n  (_adm$target_$storedAn = adm.target_[storedAnnotationsSymbol]) == null || delete _adm$target_$storedAn[key];\n}\nfunction assertAnnotable(adm, annotation, key) {\n  // Valid annotation\n  if (process.env.NODE_ENV !== \"production\" && !isAnnotation(annotation)) {\n    die(\"Cannot annotate '\" + adm.name_ + \".\" + key.toString() + \"': Invalid annotation.\");\n  }\n  /*\n  // Configurable, not sealed, not frozen\n  // Possibly not needed, just a little better error then the one thrown by engine.\n  // Cases where this would be useful the most (subclass field initializer) are not interceptable by this.\n  if (__DEV__) {\n      const configurable = getDescriptor(adm.target_, key)?.configurable\n      const frozen = Object.isFrozen(adm.target_)\n      const sealed = Object.isSealed(adm.target_)\n      if (!configurable || frozen || sealed) {\n          const fieldName = `${adm.name_}.${key.toString()}`\n          const requestedAnnotationType = annotation.annotationType_\n          let error = `Cannot apply '${requestedAnnotationType}' to '${fieldName}':`\n          if (frozen) {\n              error += `\\nObject is frozen.`\n          }\n          if (sealed) {\n              error += `\\nObject is sealed.`\n          }\n          if (!configurable) {\n              error += `\\nproperty is not configurable.`\n              // Mention only if caused by us to avoid confusion\n              if (hasProp(adm.appliedAnnotations!, key)) {\n                  error += `\\nTo prevent accidental re-definition of a field by a subclass, `\n                  error += `all annotated fields of non-plain objects (classes) are not configurable.`\n              }\n          }\n          die(error)\n      }\n  }\n  */\n  // Not annotated\n  if (process.env.NODE_ENV !== \"production\" && !isOverride(annotation) && hasProp(adm.appliedAnnotations_, key)) {\n    var fieldName = adm.name_ + \".\" + key.toString();\n    var currentAnnotationType = adm.appliedAnnotations_[key].annotationType_;\n    var requestedAnnotationType = annotation.annotationType_;\n    die(\"Cannot apply '\" + requestedAnnotationType + \"' to '\" + fieldName + \"':\" + (\"\\nThe field is already annotated with '\" + currentAnnotationType + \"'.\") + \"\\nRe-annotating fields is not allowed.\" + \"\\nUse 'override' annotation for methods overridden by subclass.\");\n  }\n}\n\n// Bug in safari 9.* (or iOS 9 safari mobile). See #364\nvar ENTRY_0 = /*#__PURE__*/createArrayEntryDescriptor(0);\nvar safariPrototypeSetterInheritanceBug = /*#__PURE__*/function () {\n  var v = false;\n  var p = {};\n  Object.defineProperty(p, \"0\", {\n    set: function set() {\n      v = true;\n    }\n  });\n  /*#__PURE__*/Object.create(p)[\"0\"] = 1;\n  return v === false;\n}();\n/**\n * This array buffer contains two lists of properties, so that all arrays\n * can recycle their property definitions, which significantly improves performance of creating\n * properties on the fly.\n */\nvar OBSERVABLE_ARRAY_BUFFER_SIZE = 0;\n// Typescript workaround to make sure ObservableArray extends Array\nvar StubArray = function StubArray() {};\nfunction inherit(ctor, proto) {\n  if (Object.setPrototypeOf) {\n    Object.setPrototypeOf(ctor.prototype, proto);\n  } else if (ctor.prototype.__proto__ !== undefined) {\n    ctor.prototype.__proto__ = proto;\n  } else {\n    ctor.prototype = proto;\n  }\n}\ninherit(StubArray, Array.prototype);\n// Weex proto freeze protection was here,\n// but it is unclear why the hack is need as MobX never changed the prototype\n// anyway, so removed it in V6\nvar LegacyObservableArray = /*#__PURE__*/function (_StubArray) {\n  function LegacyObservableArray(initialValues, enhancer, name, owned) {\n    var _this;\n    if (name === void 0) {\n      name = process.env.NODE_ENV !== \"production\" ? \"ObservableArray@\" + getNextId() : \"ObservableArray\";\n    }\n    if (owned === void 0) {\n      owned = false;\n    }\n    _this = _StubArray.call(this) || this;\n    initObservable(function () {\n      var adm = new ObservableArrayAdministration(name, enhancer, owned, true);\n      adm.proxy_ = _this;\n      addHiddenFinalProp(_this, $mobx, adm);\n      if (initialValues && initialValues.length) {\n        // @ts-ignore\n        _this.spliceWithArray(0, 0, initialValues);\n      }\n      if (safariPrototypeSetterInheritanceBug) {\n        // Seems that Safari won't use numeric prototype setter until any * numeric property is\n        // defined on the instance. After that it works fine, even if this property is deleted.\n        Object.defineProperty(_this, \"0\", ENTRY_0);\n      }\n    });\n    return _this;\n  }\n  _inheritsLoose(LegacyObservableArray, _StubArray);\n  var _proto = LegacyObservableArray.prototype;\n  _proto.concat = function concat() {\n    this[$mobx].atom_.reportObserved();\n    for (var _len = arguments.length, arrays = new Array(_len), _key = 0; _key < _len; _key++) {\n      arrays[_key] = arguments[_key];\n    }\n    return Array.prototype.concat.apply(this.slice(),\n    //@ts-ignore\n    arrays.map(function (a) {\n      return isObservableArray(a) ? a.slice() : a;\n    }));\n  };\n  _proto[Symbol.iterator] = function () {\n    var self = this;\n    var nextIndex = 0;\n    return makeIterable({\n      next: function next() {\n        return nextIndex < self.length ? {\n          value: self[nextIndex++],\n          done: false\n        } : {\n          done: true,\n          value: undefined\n        };\n      }\n    });\n  };\n  return _createClass(LegacyObservableArray, [{\n    key: \"length\",\n    get: function get() {\n      return this[$mobx].getArrayLength_();\n    },\n    set: function set(newLength) {\n      this[$mobx].setArrayLength_(newLength);\n    }\n  }, {\n    key: Symbol.toStringTag,\n    get: function get() {\n      return \"Array\";\n    }\n  }]);\n}(StubArray);\nObject.entries(arrayExtensions).forEach(function (_ref) {\n  var prop = _ref[0],\n    fn = _ref[1];\n  if (prop !== \"concat\") {\n    addHiddenProp(LegacyObservableArray.prototype, prop, fn);\n  }\n});\nfunction createArrayEntryDescriptor(index) {\n  return {\n    enumerable: false,\n    configurable: true,\n    get: function get() {\n      return this[$mobx].get_(index);\n    },\n    set: function set(value) {\n      this[$mobx].set_(index, value);\n    }\n  };\n}\nfunction createArrayBufferItem(index) {\n  defineProperty(LegacyObservableArray.prototype, \"\" + index, createArrayEntryDescriptor(index));\n}\nfunction reserveArrayBuffer(max) {\n  if (max > OBSERVABLE_ARRAY_BUFFER_SIZE) {\n    for (var index = OBSERVABLE_ARRAY_BUFFER_SIZE; index < max + 100; index++) {\n      createArrayBufferItem(index);\n    }\n    OBSERVABLE_ARRAY_BUFFER_SIZE = max;\n  }\n}\nreserveArrayBuffer(1000);\nfunction createLegacyArray(initialValues, enhancer, name) {\n  return new LegacyObservableArray(initialValues, enhancer, name);\n}\n\nfunction getAtom(thing, property) {\n  if (typeof thing === \"object\" && thing !== null) {\n    if (isObservableArray(thing)) {\n      if (property !== undefined) {\n        die(23);\n      }\n      return thing[$mobx].atom_;\n    }\n    if (isObservableSet(thing)) {\n      return thing.atom_;\n    }\n    if (isObservableMap(thing)) {\n      if (property === undefined) {\n        return thing.keysAtom_;\n      }\n      var observable = thing.data_.get(property) || thing.hasMap_.get(property);\n      if (!observable) {\n        die(25, property, getDebugName(thing));\n      }\n      return observable;\n    }\n    if (isObservableObject(thing)) {\n      if (!property) {\n        return die(26);\n      }\n      var _observable = thing[$mobx].values_.get(property);\n      if (!_observable) {\n        die(27, property, getDebugName(thing));\n      }\n      return _observable;\n    }\n    if (isAtom(thing) || isComputedValue(thing) || isReaction(thing)) {\n      return thing;\n    }\n  } else if (isFunction(thing)) {\n    if (isReaction(thing[$mobx])) {\n      // disposer function\n      return thing[$mobx];\n    }\n  }\n  die(28);\n}\nfunction getAdministration(thing, property) {\n  if (!thing) {\n    die(29);\n  }\n  if (property !== undefined) {\n    return getAdministration(getAtom(thing, property));\n  }\n  if (isAtom(thing) || isComputedValue(thing) || isReaction(thing)) {\n    return thing;\n  }\n  if (isObservableMap(thing) || isObservableSet(thing)) {\n    return thing;\n  }\n  if (thing[$mobx]) {\n    return thing[$mobx];\n  }\n  die(24, thing);\n}\nfunction getDebugName(thing, property) {\n  var named;\n  if (property !== undefined) {\n    named = getAtom(thing, property);\n  } else if (isAction(thing)) {\n    return thing.name;\n  } else if (isObservableObject(thing) || isObservableMap(thing) || isObservableSet(thing)) {\n    named = getAdministration(thing);\n  } else {\n    // valid for arrays as well\n    named = getAtom(thing);\n  }\n  return named.name_;\n}\n/**\n * Helper function for initializing observable structures, it applies:\n * 1. allowStateChanges so we don't violate enforceActions.\n * 2. untracked so we don't accidentaly subscribe to anything observable accessed during init in case the observable is created inside derivation.\n * 3. batch to avoid state version updates\n */\nfunction initObservable(cb) {\n  var derivation = untrackedStart();\n  var allowStateChanges = allowStateChangesStart(true);\n  startBatch();\n  try {\n    return cb();\n  } finally {\n    endBatch();\n    allowStateChangesEnd(allowStateChanges);\n    untrackedEnd(derivation);\n  }\n}\n\nvar toString = objectPrototype.toString;\nfunction deepEqual(a, b, depth) {\n  if (depth === void 0) {\n    depth = -1;\n  }\n  return eq(a, b, depth);\n}\n// Copied from https://github.com/jashkenas/underscore/blob/5c237a7c682fb68fd5378203f0bf22dce1624854/underscore.js#L1186-L1289\n// Modified: \"Deep compare objects\" part to iterate over keys in forward order instead of reverse order.\n//\n// Internal recursive comparison function for `isEqual`.\nfunction eq(a, b, depth, aStack, bStack) {\n  // Identical objects are equal. `0 === -0`, but they aren't identical.\n  // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n  if (a === b) {\n    return a !== 0 || 1 / a === 1 / b;\n  }\n  // `null` or `undefined` only equal to itself (strict comparison).\n  if (a == null || b == null) {\n    return false;\n  }\n  // `NaN`s are equivalent, but non-reflexive.\n  if (a !== a) {\n    return b !== b;\n  }\n  // Exhaust primitive checks\n  var type = typeof a;\n  if (type !== \"function\" && type !== \"object\" && typeof b != \"object\") {\n    return false;\n  }\n  // Compare `[[Class]]` names.\n  var className = toString.call(a);\n  if (className !== toString.call(b)) {\n    return false;\n  }\n  switch (className) {\n    // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n    case \"[object RegExp]\":\n    // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n    case \"[object String]\":\n      // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n      // equivalent to `new String(\"5\")`.\n      return \"\" + a === \"\" + b;\n    case \"[object Number]\":\n      // `NaN`s are equivalent, but non-reflexive.\n      // Object(NaN) is equivalent to NaN.\n      if (+a !== +a) {\n        return +b !== +b;\n      }\n      // An `egal` comparison is performed for other numeric values.\n      return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n    case \"[object Date]\":\n    case \"[object Boolean]\":\n      // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n      // millisecond representations. Note that invalid dates with millisecond representations\n      // of `NaN` are not equivalent.\n      return +a === +b;\n    case \"[object Symbol]\":\n      return typeof Symbol !== \"undefined\" && Symbol.valueOf.call(a) === Symbol.valueOf.call(b);\n    case \"[object Map]\":\n    case \"[object Set]\":\n      // Maps and Sets are unwrapped to arrays of entry-pairs, adding an incidental level.\n      // Hide this extra level by increasing the depth.\n      if (depth >= 0) {\n        depth++;\n      }\n      break;\n  }\n  // Unwrap any wrapped objects.\n  a = unwrap(a);\n  b = unwrap(b);\n  var areArrays = className === \"[object Array]\";\n  if (!areArrays) {\n    if (typeof a != \"object\" || typeof b != \"object\") {\n      return false;\n    }\n    // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n    // from different frames are.\n    var aCtor = a.constructor,\n      bCtor = b.constructor;\n    if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor && isFunction(bCtor) && bCtor instanceof bCtor) && \"constructor\" in a && \"constructor\" in b) {\n      return false;\n    }\n  }\n  if (depth === 0) {\n    return false;\n  } else if (depth < 0) {\n    depth = -1;\n  }\n  // Assume equality for cyclic structures. The algorithm for detecting cyclic\n  // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n  // Initializing stack of traversed objects.\n  // It's done here since we only need them for objects and arrays comparison.\n  aStack = aStack || [];\n  bStack = bStack || [];\n  var length = aStack.length;\n  while (length--) {\n    // Linear search. Performance is inversely proportional to the number of\n    // unique nested structures.\n    if (aStack[length] === a) {\n      return bStack[length] === b;\n    }\n  }\n  // Add the first object to the stack of traversed objects.\n  aStack.push(a);\n  bStack.push(b);\n  // Recursively compare objects and arrays.\n  if (areArrays) {\n    // Compare array lengths to determine if a deep comparison is necessary.\n    length = a.length;\n    if (length !== b.length) {\n      return false;\n    }\n    // Deep compare the contents, ignoring non-numeric properties.\n    while (length--) {\n      if (!eq(a[length], b[length], depth - 1, aStack, bStack)) {\n        return false;\n      }\n    }\n  } else {\n    // Deep compare objects.\n    var keys = Object.keys(a);\n    var _length = keys.length;\n    // Ensure that both objects contain the same number of properties before comparing deep equality.\n    if (Object.keys(b).length !== _length) {\n      return false;\n    }\n    for (var i = 0; i < _length; i++) {\n      // Deep compare each member\n      var key = keys[i];\n      if (!(hasProp(b, key) && eq(a[key], b[key], depth - 1, aStack, bStack))) {\n        return false;\n      }\n    }\n  }\n  // Remove the first object from the stack of traversed objects.\n  aStack.pop();\n  bStack.pop();\n  return true;\n}\nfunction unwrap(a) {\n  if (isObservableArray(a)) {\n    return a.slice();\n  }\n  if (isES6Map(a) || isObservableMap(a)) {\n    return Array.from(a.entries());\n  }\n  if (isES6Set(a) || isObservableSet(a)) {\n    return Array.from(a.entries());\n  }\n  return a;\n}\n\nvar _global$Iterator;\n// safely get iterator prototype if available\nvar global$1 = /*#__PURE__*/getGlobal();\nvar maybeIteratorPrototype = ((_global$Iterator = global$1.Iterator) == null ? void 0 : _global$Iterator.prototype) || {};\nfunction makeIterable(iterator) {\n  iterator[Symbol.iterator] = getSelf;\n  return Object.assign(Object.create(maybeIteratorPrototype), iterator);\n}\nfunction getSelf() {\n  return this;\n}\n\nfunction isAnnotation(thing) {\n  return (\n    // Can be function\n    thing instanceof Object && typeof thing.annotationType_ === \"string\" && isFunction(thing.make_) && isFunction(thing.extend_)\n  );\n}\n\n/**\n * (c) Michel Weststrate 2015 - 2020\n * MIT Licensed\n *\n * Welcome to the mobx sources! To get a global overview of how MobX internally works,\n * this is a good place to start:\n * https://medium.com/@mweststrate/becoming-fully-reactive-an-in-depth-explanation-of-mobservable-55995262a254#.xvbh6qd74\n *\n * Source folders:\n * ===============\n *\n * - api/     Most of the public static methods exposed by the module can be found here.\n * - core/    Implementation of the MobX algorithm; atoms, derivations, reactions, dependency trees, optimizations. Cool stuff can be found here.\n * - types/   All the magic that is need to have observable objects, arrays and values is in this folder. Including the modifiers like `asFlat`.\n * - utils/   Utility stuff.\n *\n */\n[\"Symbol\", \"Map\", \"Set\"].forEach(function (m) {\n  var g = getGlobal();\n  if (typeof g[m] === \"undefined\") {\n    die(\"MobX requires global '\" + m + \"' to be available or polyfilled\");\n  }\n});\nif (typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__ === \"object\") {\n  // See: https://github.com/andykog/mobx-devtools/\n  __MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobx({\n    spy: spy,\n    extras: {\n      getDebugName: getDebugName\n    },\n    $mobx: $mobx\n  });\n}\n\nexport { $mobx, FlowCancellationError, ObservableMap, ObservableSet, Reaction, allowStateChanges as _allowStateChanges, runInAction as _allowStateChangesInsideComputed, allowStateReadsEnd as _allowStateReadsEnd, allowStateReadsStart as _allowStateReadsStart, autoAction as _autoAction, _endAction, getAdministration as _getAdministration, getGlobalState as _getGlobalState, interceptReads as _interceptReads, isComputingDerivation as _isComputingDerivation, resetGlobalState as _resetGlobalState, _startAction, action, autorun, comparer, computed, configure, createAtom, apiDefineProperty as defineProperty, entries, extendObservable, flow, flowResult, get, getAtom, getDebugName, getDependencyTree, getObserverTree, has, intercept, isAction, isObservableValue as isBoxedObservable, isComputed, isComputedProp, isFlow, isFlowCancellationError, isObservable, isObservableArray, isObservableMap, isObservableObject, isObservableProp, isObservableSet, keys, makeAutoObservable, makeObservable, observable, observe, onBecomeObserved, onBecomeUnobserved, onReactionError, override, apiOwnKeys as ownKeys, reaction, remove, runInAction, set, spy, toJS, trace, transaction, untracked, values, when };\n//# sourceMappingURL=mobx.esm.js.map\n","import { toJS } from \"mobx\"\nimport * as _ from \"lodash-es\"\n\n// Any classes that the user can edit, save, and then rehydrate should implement this interface\nexport interface Persistable {\n    toObject(): any // This should dehydrate any runtime instances to a plain object ready to be JSON stringified\n    updateFromObject(obj: unknown): any // This should parse an incoming object, extend the current instance, and create new instances for any non native class types\n}\n\n/**\n * The serialized type of one field:\n * - a persistable becomes its `toObject()` result\n * - an array of persistables becomes an array of those results\n * - anything else stays unchanged\n */\ntype PersistedValue<V> = V extends { toObject(): infer O }\n    ? O\n    : V extends readonly (infer Item)[]\n      ? (Item extends { toObject(): infer O } ? O : Item)[]\n      : V\n\n/** `T` with every persistable field replaced by what its `toObject()` returns */\nexport type PersistedObject<T> = { [K in keyof T]: PersistedValue<T[K]> }\n\n// Todo: see if there's a better way to do this with Mobx\nexport function objectWithPersistablesToObject<T>(\n    objWithPersistables: T,\n    keysToSerialize: string[] = []\n): PersistedObject<T> {\n    const obj = toJS(objWithPersistables) as any\n    const keysSet = new Set(keysToSerialize)\n    Object.keys(obj).forEach((key) => {\n        const val = (objWithPersistables as any)[key]\n        const valIsPersistable = !!val?.toObject\n\n        // Delete any keys we don't want to serialize, if a keep list is provided\n        if (keysToSerialize.length && !keysSet.has(key)) {\n            delete obj[key]\n            return\n        }\n\n        // Val is persistable, call toObject\n        if (valIsPersistable) obj[key] = val.toObject()\n        else if (Array.isArray(val))\n            // Scan array for persistables and serialize.\n            obj[key] = val.map((item) =>\n                item?.toObject ? item.toObject() : item\n            )\n        else obj[key] = val\n    })\n    return obj as PersistedObject<T>\n}\n\n// Basically does an Object.assign, except if the target is a Persistable, will call updateFromObject on\n// that Persistable. It does not recurse. Will only update top level Persistables.\nexport function updatePersistables(\n    target: Record<string, any>,\n    obj?: Record<string, any>\n): void {\n    if (obj === undefined) return\n    for (const key in target) {\n        if (key in obj) {\n            const currentVal = target[key]\n            const currentValIsPersistableObject = currentVal?.updateFromObject\n            const newVal = obj[key]\n            if (currentValIsPersistableObject)\n                currentVal.updateFromObject(newVal)\n            else target[key] = newVal\n        }\n    }\n}\n\n// Don't persist properties that haven't changed from the defaults, and don't\n// keep properties not on the comparable class\nexport function deleteRuntimeAndUnchangedProps<T>(\n    changedObj: T,\n    defaultObject: T\n): T {\n    const obj = toJS(changedObj) as Record<string, unknown>\n    const defaultObj = defaultObject as Record<string, unknown>\n    const defaultKeys = new Set(Object.keys(defaultObj))\n    Object.keys(obj).forEach((key) => {\n        if (!defaultKeys.has(key)) {\n            // Don't persist any runtime props not in the persistable instance\n            delete obj[key]\n            return\n        }\n\n        const currentValue = obj[key]\n        const defaultValue = defaultObj[key]\n        if (_.isEqual(currentValue, defaultValue)) {\n            // Don't persist any values that weren't changed from the default\n            delete obj[key]\n        }\n    })\n    return obj as T\n}\n","// todo: remove file\n\nimport { observable, makeObservable } from \"mobx\"\nimport {\n    Persistable,\n    updatePersistables,\n    objectWithPersistablesToObject,\n    deleteRuntimeAndUnchangedProps,\n} from \"./persistable/Persistable.js\"\nimport {\n    OwidVariableDataTableConfigInterface,\n    OwidVariableDisplayConfigInterface,\n    OwidVariableRoundingMode,\n    TimeInterval,\n} from \"@ourworldindata/types\"\n\nclass OwidVariableDisplayConfigDefaults {\n    name: string | undefined = undefined\n    unit: string | undefined = undefined\n    shortUnit: string | undefined = undefined\n    isProjection: boolean | undefined = undefined\n    conversionFactor: number | undefined = undefined\n    roundingMode: OwidVariableRoundingMode | undefined = undefined\n    numDecimalPlaces: number | undefined = undefined\n    numSignificantFigures: number | undefined = undefined\n    tolerance: number | undefined = undefined\n    timeInterval: TimeInterval | undefined = undefined\n    zeroDay: string | undefined = undefined\n    entityAnnotationsMap: string | undefined = undefined\n    includeInTable: boolean | undefined = true\n    tableDisplay: OwidVariableDataTableConfigInterface | undefined = undefined\n    color: string | undefined = undefined\n    plotMarkersOnlyInLineChart: boolean | undefined = undefined\n\n    constructor() {\n        makeObservable(this, {\n            name: observable,\n            unit: observable,\n            shortUnit: observable,\n            isProjection: observable,\n            conversionFactor: observable,\n            roundingMode: observable,\n            numDecimalPlaces: observable,\n            numSignificantFigures: observable,\n            tolerance: observable,\n            timeInterval: observable,\n            zeroDay: observable,\n            entityAnnotationsMap: observable,\n            includeInTable: observable,\n            tableDisplay: observable,\n            color: observable,\n            plotMarkersOnlyInLineChart: observable,\n        })\n    }\n}\n\nexport class OwidVariableDisplayConfig\n    extends OwidVariableDisplayConfigDefaults\n    implements Persistable\n{\n    updateFromObject(obj?: Partial<OwidVariableDisplayConfigInterface>): void {\n        if (obj) updatePersistables(this, obj)\n    }\n\n    toObject(): OwidVariableDisplayConfigDefaults {\n        return deleteRuntimeAndUnchangedProps(\n            objectWithPersistablesToObject(this),\n            new OwidVariableDisplayConfigDefaults()\n        )\n    }\n\n    constructor(obj?: Partial<OwidVariableDisplayConfigInterface>) {\n        super()\n        if (obj) this.updateFromObject(obj)\n    }\n}\n\n// export interface OwidVariablesAndEntityKey {\n//     variables: {\n//         [id: string]: OwidVariableWithDataAndSource\n//     }\n//     entityKey: OwidEntityKey\n// }\n","import { OwidGdocType } from \"@ourworldindata/types\"\nimport { P, match } from \"ts-pattern\"\n\n/** The path a gdoc bakes to, after `prefix` (a base URL, a directory, or \"\"). */\nexport function getPrefixedGdocPath(\n    prefix: string,\n    gdoc: { slug: string; content: { type?: OwidGdocType } }\n): string {\n    return match(gdoc)\n        .with(\n            {\n                content: { type: OwidGdocType.Homepage },\n            },\n            () => prefix\n        )\n        .with(\n            {\n                content: {\n                    type: P.union(\n                        OwidGdocType.Article,\n                        OwidGdocType.TopicPage,\n                        OwidGdocType.LinearTopicPage,\n                        OwidGdocType.AboutPage,\n                        OwidGdocType.Announcement,\n                        OwidGdocType.FeaturedViz\n                    ),\n                },\n            },\n            () => `${prefix}/${gdoc.slug}`\n        )\n        .with(\n            {\n                content: { type: OwidGdocType.Profile },\n            },\n            () => `${prefix}/profile/${gdoc.slug}`\n        )\n        .with(\n            {\n                content: { type: OwidGdocType.DataInsight },\n            },\n            () => `${prefix}/data-insights/${gdoc.slug}`\n        )\n        .with(\n            {\n                content: { type: OwidGdocType.Author },\n            },\n            () => `${prefix}/team/${gdoc.slug}`\n        )\n        .with(\n            {\n                content: {\n                    type: P.optional(P.union(OwidGdocType.Fragment)),\n                },\n            },\n            () => \"\"\n        )\n        .exhaustive()\n}\n","import { Url } from \"./Url.js\"\n\nexport type UrlMigration = (url: Url) => Url\n\nexport const performUrlMigrations = (\n    migrations: UrlMigration[],\n    url: Url\n): Url => {\n    return migrations.reduce((url, migration) => migration(url), url)\n}\n","const snakeToCamel = (str: string): string =>\n    str.replace(/(_\\w)/g, (char) => char[1].toUpperCase())\n\nexport const camelCaseProperties = (\n    obj: Record<string, unknown>\n): Record<string, unknown> => {\n    const newObj: any = {}\n    for (const key in obj) {\n        newObj[snakeToCamel(key)] = obj[key]\n    }\n    return newObj\n}\n\n/**\n * Converts a string to title case, with support for hyphenated words\n * e.g. 'WELCOME to jean-édouard' -> 'Welcome To Jean-Édouard!'\n */\nexport const titleCase = (str: string): string => {\n    return str\n        .split(\" \")\n        .map(function (word) {\n            return word\n                .split(\"-\")\n                .map(function (subWord) {\n                    return (\n                        subWord.charAt(0).toUpperCase() +\n                        subWord.substring(1).toLowerCase()\n                    )\n                })\n                .join(\"-\")\n        })\n        .join(\" \")\n}\n\nexport function toAsciiQuotes(str: string): string {\n    return str.replace(/[“”]/g, '\"').replace(/[‘’]/g, \"'\")\n}\n\n// https://stackoverflow.com/a/37511463/9846837\nexport function removeDiacritics(str: string): string {\n    return str.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\")\n}\n","const jsonCommentDelimiter = \"\\n//EMBEDDED_JSON\\n\"\n\nexport const escapeJSONStringForInlineScript = (json: string): string =>\n    json\n        .replace(/</g, \"\\\\u003c\")\n        .replace(/\\u2028/g, \"\\\\u2028\")\n        .replace(/\\u2029/g, \"\\\\u2029\")\n\n// Stringifies JSON for assigning to a variable inside an inline <script>. Escaping is not\n// optional here: an unescaped `</script>` anywhere in the data closes the tag early and\n// everything after it is parsed as HTML, which turns any free-text field into stored XSS.\n//\n// Prefer this over serializeJSONForHTML for inline scripts. That one pretty-prints and wraps\n// the payload in //EMBEDDED_JSON delimiters so it can be recovered from raw HTML later — only\n// the explorer needs that, and on a large payload the indentation is pure page weight.\nexport const serializeJSONForInlineScript = (obj: unknown): string =>\n    escapeJSONStringForInlineScript(JSON.stringify(obj))\n\n// Stringifies JSON for placing into an arbitrary doc, for later extraction without parsing the whole doc\nexport const serializeJSONForHTML = (\n    obj: unknown,\n    delimiter = jsonCommentDelimiter\n): string =>\n    `${delimiter}${\n        obj === undefined\n            ? \"\"\n            : escapeJSONStringForInlineScript(JSON.stringify(obj, null, 2))\n    }${delimiter}`\nexport const deserializeJSONFromHTML = (\n    html: string,\n    delimiter = jsonCommentDelimiter\n): any => {\n    const json = html.split(delimiter)[1]\n    return json === undefined || json === \"\" ? undefined : JSON.parse(json)\n}\n","/**\n * Prevents creating multiple promises for a single key.\n *\n * If an existing promise for a key is pending, that promise will be returned without\n * creating a new one.\n *\n * If a promise throws an error, it will be discarded, and a new one created the next\n * time a key is requested.\n *\n * For now it only supports primitive value keys, but we can extend it if necessary.\n */\nexport class PromiseCache<Key extends string | number | undefined, Result> {\n    constructor(\n        private readonly createPromiseFromKey: (key: Key) => Promise<Result>\n    ) {}\n\n    private readonly promisesByKey = new Map<Key, Promise<Result>>()\n\n    get(key: Key): Promise<Result> {\n        if (!this.promisesByKey.has(key)) {\n            this.promisesByKey.set(\n                key,\n                // Make sure to attach .catch() _before_ adding it to the cache.\n                // Otherwise external logic would be able to attach a catch() that\n                // could make this one unreachable.\n                this.createPromiseFromKey(key).catch((error) => {\n                    this.promisesByKey.delete(key)\n                    throw error\n                })\n            )\n        }\n        return this.promisesByKey.get(key)!\n    }\n\n    has(key: Key): boolean {\n        return this.promisesByKey.has(key)\n    }\n}\n","interface PromiseSelectorArg<Result> {\n    onResolve?: (result: Result) => void\n    onReject?: (error: any) => void\n}\n\n/**\n * An alternative to cancellable promises. Allows set()-ing a single promise,\n * discarding the results of any previous ones, regardless whether they\n * resolve or reject.\n *\n * The problem it solves:\n *\n * 1. User interacts with UI\n * 2. Request sent to fetch required data: `getViewData().then((data) => updateView(data))`\n * 3. But now what if the user navigates away? When the promise completes, it will\n *    update the view regardless.\n *\n * In order to solve this, we use `switcher = PromiseSwitcher({ onResolve: updateView })`\n * And then send off requests with `switcher.set(getViewData())`\n * If set() is called with a new Promise while the previous is still pending, the\n * pending promise is ignored – it doesn't call `onResolve` or `onReject`.\n *\n */\nexport class PromiseSwitcher<Result> {\n    private pendingPromise: Promise<Result> | undefined\n\n    private readonly onResolve?: (result: Result) => void\n    private readonly onReject?: (error: any) => void\n\n    constructor(arg: PromiseSelectorArg<Result>) {\n        this.onResolve = arg.onResolve\n        this.onReject = arg.onReject\n    }\n\n    async set(promise: Promise<Result>): Promise<void> {\n        this.pendingPromise = promise\n        try {\n            const result = await promise\n            if (this.pendingPromise === promise) {\n                this.onResolve?.(result)\n            }\n        } catch (error) {\n            if (this.pendingPromise === promise) {\n                this.onReject?.(error)\n            }\n        }\n    }\n\n    clear(): void {\n        this.pendingPromise = undefined\n    }\n}\n","/*\nCommon utlities for deriving properties from image metadata.\n*/\n\nimport { traverseEnrichedBlock } from \"./Util.js\"\nimport {\n    AssetMap,\n    OwidGdoc,\n    OwidGdocType,\n    ImageMetadata,\n} from \"@ourworldindata/types\"\nimport { match, P } from \"ts-pattern\"\n\nexport const AUTHOR_BYLINE_WIDTH = 48\nexport const THUMBNAIL_WIDTH = 100\nexport const LARGE_THUMBNAIL_WIDTH = 350\nexport const LARGEST_IMAGE_WIDTH = 1350\n\nexport function getArchivalSizes(\n    originalWidth: ImageMetadata[\"originalWidth\"]\n): number[] {\n    if (!originalWidth) return []\n    const widths: number[] = []\n    if (originalWidth > LARGE_THUMBNAIL_WIDTH) {\n        widths.push(LARGE_THUMBNAIL_WIDTH)\n    }\n    if (originalWidth > LARGEST_IMAGE_WIDTH) {\n        widths.push(LARGEST_IMAGE_WIDTH)\n    }\n    widths.push(originalWidth)\n    return widths\n}\n\nexport function getSizes(\n    originalWidth: ImageMetadata[\"originalWidth\"]\n): number[] {\n    if (!originalWidth) return []\n    // ensure a thumbnail and author byline is generated\n    const widths = [AUTHOR_BYLINE_WIDTH, THUMBNAIL_WIDTH]\n    // start at large thumbnail and go up by 500 to a max of 1350 before we just show the original image\n    let width = LARGE_THUMBNAIL_WIDTH\n    while (width < originalWidth && width <= LARGEST_IMAGE_WIDTH) {\n        widths.push(width)\n        width += 500\n    }\n    widths.push(originalWidth)\n    return widths\n}\n\nexport function generateSrcSet(\n    sizes: number[],\n    id: ImageMetadata[\"cloudflareId\"],\n    absoluteUrl: string = \"\"\n): string {\n    return sizes\n        .map((size) => {\n            const path = `${absoluteUrl}/${id}/w=${size}`\n            return `${path} ${size}w`\n        })\n        .join(\", \")\n}\n\nexport function getFilenameWithoutExtension(\n    filename: ImageMetadata[\"filename\"]\n): string {\n    return filename.slice(0, filename.indexOf(\".\"))\n}\n\nexport function getFilenameExtension(\n    filename: ImageMetadata[\"filename\"]\n): string {\n    return filename.slice(filename.lastIndexOf(\".\") + 1)\n}\n\nexport function getFilenameAsPng(filename: ImageMetadata[\"filename\"]): string {\n    return `${getFilenameWithoutExtension(filename)}.png`\n}\n\nexport function getFilenameMIMEType(filename: string): string | undefined {\n    const fileExtension = getFilenameExtension(filename)\n    const MIMEType = {\n        png: \"image/png\",\n        svg: \"image/svg+xml\",\n        jpg: \"image/jpg\",\n        jpeg: \"image/jpeg\",\n        webp: \"image/webp\",\n    }[fileExtension]\n\n    return MIMEType\n}\n\nexport type SourceProps = {\n    media: string | undefined\n    srcSet: string\n}\n\nexport function appendImageSizeSuffix(filename: string, size: number): string {\n    const extIndex = filename.lastIndexOf(\".\")\n    if (extIndex === -1) return `${filename}-${size}w`\n    const name = filename.slice(0, extIndex)\n    const ext = filename.slice(extIndex)\n    return `${name}-${size}w${ext}`\n}\n\nfunction generateArchivalSrcSet(\n    image: ImageMetadata,\n    sizes: number[],\n    assetMap: AssetMap\n): string {\n    return sizes\n        .map((size) => {\n            const filename =\n                size === image.originalWidth\n                    ? image.filename\n                    : appendImageSizeSuffix(image.filename, size)\n            const path = assetMap[filename]\n            if (!path) {\n                throw new Error(\n                    `Image ${image.filename} not found in asset map`\n                )\n            }\n            return `${path} ${size}w`\n        })\n        .filter(Boolean)\n        .join(\", \")\n}\n\n/**\n * When we have a small and large image, we want to generate two <source> elements.\n * The first will only be active at small screen sizes, due to its `media` property.\n * The second will be active at all screen sizes.\n * These props work in conjuction with a `sizes` attribute on the <source> element.\n */\nexport function generateSourceProps(\n    smallImage: ImageMetadata | undefined,\n    regularImage: ImageMetadata,\n    absoluteUrl: string = \"\",\n    assetMap?: AssetMap\n): SourceProps[] {\n    const props: SourceProps[] = []\n\n    function buildProps(image: ImageMetadata, media: string | undefined): void {\n        const sizes = assetMap\n            ? getArchivalSizes(image.originalWidth)\n            : getSizes(image.originalWidth)\n        if (sizes.length === 0) return\n\n        let srcSet: string | undefined\n        if (assetMap) {\n            srcSet = generateArchivalSrcSet(image, sizes, assetMap)\n        } else if (image.cloudflareId) {\n            const encodedId = encodeURIComponent(image.cloudflareId)\n            srcSet = generateSrcSet(sizes, encodedId, absoluteUrl)\n        }\n\n        if (!srcSet) return\n\n        props.push({\n            media,\n            srcSet,\n        })\n    }\n\n    if (smallImage) {\n        buildProps(smallImage, \"(max-width: 768px)\")\n    }\n    if (regularImage) {\n        buildProps(regularImage, undefined)\n    }\n\n    return props\n}\n\nexport function getFeaturedImageFilename(gdoc: OwidGdoc): string | undefined {\n    return match(gdoc)\n        .with(\n            {\n                content: {\n                    type: P.union(\n                        OwidGdocType.Article,\n                        OwidGdocType.TopicPage,\n                        OwidGdocType.LinearTopicPage,\n                        OwidGdocType.AboutPage,\n                        OwidGdocType.Author,\n                        OwidGdocType.FeaturedViz\n                    ),\n                },\n            },\n            (match) => {\n                const featuredImageFilename = match.content[\"featured-image\"]\n                return featuredImageFilename\n            }\n        )\n        .with(\n            {\n                content: {\n                    type: P.union(\n                        OwidGdocType.DataInsight,\n                        OwidGdocType.Announcement\n                    ),\n                },\n            },\n            (gdoc) => {\n                // Use the first image in the document as the featured image\n                let filename: string | undefined = undefined\n                for (const block of gdoc.content.body) {\n                    traverseEnrichedBlock(block, (block) => {\n                        if (!filename && block.type === \"image\") {\n                            filename = block.smallFilename || block.filename\n                        }\n                    })\n                }\n                return filename\n            }\n        )\n        .with(\n            {\n                content: { type: OwidGdocType.Profile },\n            },\n            (match) => match.content[\"featured-image\"]\n        )\n        .with(\n            {\n                content: {\n                    type: P.optional(\n                        P.union(OwidGdocType.Fragment, OwidGdocType.Homepage)\n                    ),\n                },\n            },\n            // This will fallback to DEFAULT_THUMBNAIL_FILENAME in Head.tsx\n            () => undefined\n        )\n        .exhaustive()\n}\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","import { isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nexport default function getBoundingClientRect(element, includeScale) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  var rect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (isHTMLElement(element) && includeScale) {\n    var offsetHeight = element.offsetHeight;\n    var offsetWidth = element.offsetWidth; // Do not attempt to divide by 0, otherwise we get `Infinity` as scale\n    // Fallback to 1 in case both values are `0`\n\n    if (offsetWidth > 0) {\n      scaleX = round(rect.width) / offsetWidth || 1;\n    }\n\n    if (offsetHeight > 0) {\n      scaleY = round(rect.height) / offsetHeight || 1;\n    }\n  }\n\n  return {\n    width: rect.width / scaleX,\n    height: rect.height / scaleY,\n    top: rect.top / scaleY,\n    right: rect.right / scaleX,\n    bottom: rect.bottom / scaleY,\n    left: rect.left / scaleX,\n    x: rect.left / scaleX,\n    y: rect.top / scaleY\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n  var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}","export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isHTMLElement(arrowElement)) {\n      console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n    }\n\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n  return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n  var x = _ref.x,\n      y = _ref.y;\n  var win = window;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n  var _offsets$x = offsets.x,\n      x = _offsets$x === void 0 ? 0 : _offsets$x,\n      _offsets$y = offsets.y,\n      y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref3.x;\n  y = _ref3.y;\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref4.x;\n  y = _ref4.y;\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n  var state = _ref5.state,\n      options = _ref5.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n  if (process.env.NODE_ENV !== \"production\") {\n    var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n    if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n      return transitionProperty.indexOf(property) >= 0;\n    })) {\n      console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n    }\n  }\n\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};","var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}","var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nexport default function getViewportRect(element) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n  // can be obscured underneath it.\n  // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n  // if it isn't open, so if this isn't available, the popper will be detected\n  // to overflow the bottom of the screen too early.\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n    // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n    // errors due to floating point numbers, so we need to check precision.\n    // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n    // Feature detection fails in mobile emulation mode in Chrome.\n    // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n    // 0.001\n    // Fallback here: \"Not Safari\" userAgent\n\n    if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element) {\n  var rect = getBoundingClientRect(element);\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n    }\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases – research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};","export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n    popperOffsets[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};","export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}","export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}","export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        }); // Validate the provided modifiers so that the consumer will get warned\n        // if one of the modifiers is invalid for any reason\n\n        if (process.env.NODE_ENV !== \"production\") {\n          var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n            var name = _ref.name;\n            return name;\n          });\n          validateModifiers(modifiers);\n\n          if (getBasePlacement(state.options.placement) === auto) {\n            var flipModifier = state.orderedModifiers.find(function (_ref2) {\n              var name = _ref2.name;\n              return name === 'flip';\n            });\n\n            if (!flipModifier) {\n              console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n            }\n          }\n\n          var _getComputedStyle = getComputedStyle(popper),\n              marginTop = _getComputedStyle.marginTop,\n              marginRight = _getComputedStyle.marginRight,\n              marginBottom = _getComputedStyle.marginBottom,\n              marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n          // cause bugs with positioning, so we'll warn the consumer\n\n\n          if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n            return parseFloat(margin);\n          })) {\n            console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n          }\n        }\n\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          if (process.env.NODE_ENV !== \"production\") {\n            console.error(INVALID_ELEMENT_ERROR);\n          }\n\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n        var __debug_loops__ = 0;\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (process.env.NODE_ENV !== \"production\") {\n            __debug_loops__ += 1;\n\n            if (__debug_loops__ > 100) {\n              console.error(INFINITE_LOOP_ERROR);\n              break;\n            }\n          }\n\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      if (process.env.NODE_ENV !== \"production\") {\n        console.error(INVALID_ELEMENT_ERROR);\n      }\n\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref3) {\n        var name = _ref3.name,\n            _ref3$options = _ref3.options,\n            options = _ref3$options === void 0 ? {} : _ref3$options,\n            effect = _ref3.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","/**!\n* tippy.js v6.3.7\n* (c) 2017-2021 atomiks\n* MIT License\n*/\nimport { createPopper, applyStyles } from '@popperjs/core';\n\nvar ROUND_ARROW = '<svg width=\"16\" height=\"6\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 6s1.796-.013 4.67-3.615C5.851.9 6.93.006 8 0c1.07-.006 2.148.887 3.343 2.385C14.233 6.005 16 6 16 6H0z\"></svg>';\nvar BOX_CLASS = \"tippy-box\";\nvar CONTENT_CLASS = \"tippy-content\";\nvar BACKDROP_CLASS = \"tippy-backdrop\";\nvar ARROW_CLASS = \"tippy-arrow\";\nvar SVG_ARROW_CLASS = \"tippy-svg-arrow\";\nvar TOUCH_OPTIONS = {\n  passive: true,\n  capture: true\n};\nvar TIPPY_DEFAULT_APPEND_TO = function TIPPY_DEFAULT_APPEND_TO() {\n  return document.body;\n};\n\nfunction hasOwnProperty(obj, key) {\n  return {}.hasOwnProperty.call(obj, key);\n}\nfunction getValueAtIndexOrReturn(value, index, defaultValue) {\n  if (Array.isArray(value)) {\n    var v = value[index];\n    return v == null ? Array.isArray(defaultValue) ? defaultValue[index] : defaultValue : v;\n  }\n\n  return value;\n}\nfunction isType(value, type) {\n  var str = {}.toString.call(value);\n  return str.indexOf('[object') === 0 && str.indexOf(type + \"]\") > -1;\n}\nfunction invokeWithArgsOrReturn(value, args) {\n  return typeof value === 'function' ? value.apply(void 0, args) : value;\n}\nfunction debounce(fn, ms) {\n  // Avoid wrapping in `setTimeout` if ms is 0 anyway\n  if (ms === 0) {\n    return fn;\n  }\n\n  var timeout;\n  return function (arg) {\n    clearTimeout(timeout);\n    timeout = setTimeout(function () {\n      fn(arg);\n    }, ms);\n  };\n}\nfunction removeProperties(obj, keys) {\n  var clone = Object.assign({}, obj);\n  keys.forEach(function (key) {\n    delete clone[key];\n  });\n  return clone;\n}\nfunction splitBySpaces(value) {\n  return value.split(/\\s+/).filter(Boolean);\n}\nfunction normalizeToArray(value) {\n  return [].concat(value);\n}\nfunction pushIfUnique(arr, value) {\n  if (arr.indexOf(value) === -1) {\n    arr.push(value);\n  }\n}\nfunction unique(arr) {\n  return arr.filter(function (item, index) {\n    return arr.indexOf(item) === index;\n  });\n}\nfunction getBasePlacement(placement) {\n  return placement.split('-')[0];\n}\nfunction arrayFrom(value) {\n  return [].slice.call(value);\n}\nfunction removeUndefinedProps(obj) {\n  return Object.keys(obj).reduce(function (acc, key) {\n    if (obj[key] !== undefined) {\n      acc[key] = obj[key];\n    }\n\n    return acc;\n  }, {});\n}\n\nfunction div() {\n  return document.createElement('div');\n}\nfunction isElement(value) {\n  return ['Element', 'Fragment'].some(function (type) {\n    return isType(value, type);\n  });\n}\nfunction isNodeList(value) {\n  return isType(value, 'NodeList');\n}\nfunction isMouseEvent(value) {\n  return isType(value, 'MouseEvent');\n}\nfunction isReferenceElement(value) {\n  return !!(value && value._tippy && value._tippy.reference === value);\n}\nfunction getArrayOfElements(value) {\n  if (isElement(value)) {\n    return [value];\n  }\n\n  if (isNodeList(value)) {\n    return arrayFrom(value);\n  }\n\n  if (Array.isArray(value)) {\n    return value;\n  }\n\n  return arrayFrom(document.querySelectorAll(value));\n}\nfunction setTransitionDuration(els, value) {\n  els.forEach(function (el) {\n    if (el) {\n      el.style.transitionDuration = value + \"ms\";\n    }\n  });\n}\nfunction setVisibilityState(els, state) {\n  els.forEach(function (el) {\n    if (el) {\n      el.setAttribute('data-state', state);\n    }\n  });\n}\nfunction getOwnerDocument(elementOrElements) {\n  var _element$ownerDocumen;\n\n  var _normalizeToArray = normalizeToArray(elementOrElements),\n      element = _normalizeToArray[0]; // Elements created via a <template> have an ownerDocument with no reference to the body\n\n\n  return element != null && (_element$ownerDocumen = element.ownerDocument) != null && _element$ownerDocumen.body ? element.ownerDocument : document;\n}\nfunction isCursorOutsideInteractiveBorder(popperTreeData, event) {\n  var clientX = event.clientX,\n      clientY = event.clientY;\n  return popperTreeData.every(function (_ref) {\n    var popperRect = _ref.popperRect,\n        popperState = _ref.popperState,\n        props = _ref.props;\n    var interactiveBorder = props.interactiveBorder;\n    var basePlacement = getBasePlacement(popperState.placement);\n    var offsetData = popperState.modifiersData.offset;\n\n    if (!offsetData) {\n      return true;\n    }\n\n    var topDistance = basePlacement === 'bottom' ? offsetData.top.y : 0;\n    var bottomDistance = basePlacement === 'top' ? offsetData.bottom.y : 0;\n    var leftDistance = basePlacement === 'right' ? offsetData.left.x : 0;\n    var rightDistance = basePlacement === 'left' ? offsetData.right.x : 0;\n    var exceedsTop = popperRect.top - clientY + topDistance > interactiveBorder;\n    var exceedsBottom = clientY - popperRect.bottom - bottomDistance > interactiveBorder;\n    var exceedsLeft = popperRect.left - clientX + leftDistance > interactiveBorder;\n    var exceedsRight = clientX - popperRect.right - rightDistance > interactiveBorder;\n    return exceedsTop || exceedsBottom || exceedsLeft || exceedsRight;\n  });\n}\nfunction updateTransitionEndListener(box, action, listener) {\n  var method = action + \"EventListener\"; // some browsers apparently support `transition` (unprefixed) but only fire\n  // `webkitTransitionEnd`...\n\n  ['transitionend', 'webkitTransitionEnd'].forEach(function (event) {\n    box[method](event, listener);\n  });\n}\n/**\n * Compared to xxx.contains, this function works for dom structures with shadow\n * dom\n */\n\nfunction actualContains(parent, child) {\n  var target = child;\n\n  while (target) {\n    var _target$getRootNode;\n\n    if (parent.contains(target)) {\n      return true;\n    }\n\n    target = target.getRootNode == null ? void 0 : (_target$getRootNode = target.getRootNode()) == null ? void 0 : _target$getRootNode.host;\n  }\n\n  return false;\n}\n\nvar currentInput = {\n  isTouch: false\n};\nvar lastMouseMoveTime = 0;\n/**\n * When a `touchstart` event is fired, it's assumed the user is using touch\n * input. We'll bind a `mousemove` event listener to listen for mouse input in\n * the future. This way, the `isTouch` property is fully dynamic and will handle\n * hybrid devices that use a mix of touch + mouse input.\n */\n\nfunction onDocumentTouchStart() {\n  if (currentInput.isTouch) {\n    return;\n  }\n\n  currentInput.isTouch = true;\n\n  if (window.performance) {\n    document.addEventListener('mousemove', onDocumentMouseMove);\n  }\n}\n/**\n * When two `mousemove` event are fired consecutively within 20ms, it's assumed\n * the user is using mouse input again. `mousemove` can fire on touch devices as\n * well, but very rarely that quickly.\n */\n\nfunction onDocumentMouseMove() {\n  var now = performance.now();\n\n  if (now - lastMouseMoveTime < 20) {\n    currentInput.isTouch = false;\n    document.removeEventListener('mousemove', onDocumentMouseMove);\n  }\n\n  lastMouseMoveTime = now;\n}\n/**\n * When an element is in focus and has a tippy, leaving the tab/window and\n * returning causes it to show again. For mouse users this is unexpected, but\n * for keyboard use it makes sense.\n * TODO: find a better technique to solve this problem\n */\n\nfunction onWindowBlur() {\n  var activeElement = document.activeElement;\n\n  if (isReferenceElement(activeElement)) {\n    var instance = activeElement._tippy;\n\n    if (activeElement.blur && !instance.state.isVisible) {\n      activeElement.blur();\n    }\n  }\n}\nfunction bindGlobalEventListeners() {\n  document.addEventListener('touchstart', onDocumentTouchStart, TOUCH_OPTIONS);\n  window.addEventListener('blur', onWindowBlur);\n}\n\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\nvar isIE11 = isBrowser ? // @ts-ignore\n!!window.msCrypto : false;\n\nfunction createMemoryLeakWarning(method) {\n  var txt = method === 'destroy' ? 'n already-' : ' ';\n  return [method + \"() was called on a\" + txt + \"destroyed instance. This is a no-op but\", 'indicates a potential memory leak.'].join(' ');\n}\nfunction clean(value) {\n  var spacesAndTabs = /[ \\t]{2,}/g;\n  var lineStartWithSpaces = /^[ \\t]*/gm;\n  return value.replace(spacesAndTabs, ' ').replace(lineStartWithSpaces, '').trim();\n}\n\nfunction getDevMessage(message) {\n  return clean(\"\\n  %ctippy.js\\n\\n  %c\" + clean(message) + \"\\n\\n  %c\\uD83D\\uDC77\\u200D This is a development-only message. It will be removed in production.\\n  \");\n}\n\nfunction getFormattedMessage(message) {\n  return [getDevMessage(message), // title\n  'color: #00C584; font-size: 1.3em; font-weight: bold;', // message\n  'line-height: 1.5', // footer\n  'color: #a6a095;'];\n} // Assume warnings and errors never have the same message\n\nvar visitedMessages;\n\nif (process.env.NODE_ENV !== \"production\") {\n  resetVisitedMessages();\n}\n\nfunction resetVisitedMessages() {\n  visitedMessages = new Set();\n}\nfunction warnWhen(condition, message) {\n  if (condition && !visitedMessages.has(message)) {\n    var _console;\n\n    visitedMessages.add(message);\n\n    (_console = console).warn.apply(_console, getFormattedMessage(message));\n  }\n}\nfunction errorWhen(condition, message) {\n  if (condition && !visitedMessages.has(message)) {\n    var _console2;\n\n    visitedMessages.add(message);\n\n    (_console2 = console).error.apply(_console2, getFormattedMessage(message));\n  }\n}\nfunction validateTargets(targets) {\n  var didPassFalsyValue = !targets;\n  var didPassPlainObject = Object.prototype.toString.call(targets) === '[object Object]' && !targets.addEventListener;\n  errorWhen(didPassFalsyValue, ['tippy() was passed', '`' + String(targets) + '`', 'as its targets (first) argument. Valid types are: String, Element,', 'Element[], or NodeList.'].join(' '));\n  errorWhen(didPassPlainObject, ['tippy() was passed a plain object which is not supported as an argument', 'for virtual positioning. Use props.getReferenceClientRect instead.'].join(' '));\n}\n\nvar pluginProps = {\n  animateFill: false,\n  followCursor: false,\n  inlinePositioning: false,\n  sticky: false\n};\nvar renderProps = {\n  allowHTML: false,\n  animation: 'fade',\n  arrow: true,\n  content: '',\n  inertia: false,\n  maxWidth: 350,\n  role: 'tooltip',\n  theme: '',\n  zIndex: 9999\n};\nvar defaultProps = Object.assign({\n  appendTo: TIPPY_DEFAULT_APPEND_TO,\n  aria: {\n    content: 'auto',\n    expanded: 'auto'\n  },\n  delay: 0,\n  duration: [300, 250],\n  getReferenceClientRect: null,\n  hideOnClick: true,\n  ignoreAttributes: false,\n  interactive: false,\n  interactiveBorder: 2,\n  interactiveDebounce: 0,\n  moveTransition: '',\n  offset: [0, 10],\n  onAfterUpdate: function onAfterUpdate() {},\n  onBeforeUpdate: function onBeforeUpdate() {},\n  onCreate: function onCreate() {},\n  onDestroy: function onDestroy() {},\n  onHidden: function onHidden() {},\n  onHide: function onHide() {},\n  onMount: function onMount() {},\n  onShow: function onShow() {},\n  onShown: function onShown() {},\n  onTrigger: function onTrigger() {},\n  onUntrigger: function onUntrigger() {},\n  onClickOutside: function onClickOutside() {},\n  placement: 'top',\n  plugins: [],\n  popperOptions: {},\n  render: null,\n  showOnCreate: false,\n  touch: true,\n  trigger: 'mouseenter focus',\n  triggerTarget: null\n}, pluginProps, renderProps);\nvar defaultKeys = Object.keys(defaultProps);\nvar setDefaultProps = function setDefaultProps(partialProps) {\n  /* istanbul ignore else */\n  if (process.env.NODE_ENV !== \"production\") {\n    validateProps(partialProps, []);\n  }\n\n  var keys = Object.keys(partialProps);\n  keys.forEach(function (key) {\n    defaultProps[key] = partialProps[key];\n  });\n};\nfunction getExtendedPassedProps(passedProps) {\n  var plugins = passedProps.plugins || [];\n  var pluginProps = plugins.reduce(function (acc, plugin) {\n    var name = plugin.name,\n        defaultValue = plugin.defaultValue;\n\n    if (name) {\n      var _name;\n\n      acc[name] = passedProps[name] !== undefined ? passedProps[name] : (_name = defaultProps[name]) != null ? _name : defaultValue;\n    }\n\n    return acc;\n  }, {});\n  return Object.assign({}, passedProps, pluginProps);\n}\nfunction getDataAttributeProps(reference, plugins) {\n  var propKeys = plugins ? Object.keys(getExtendedPassedProps(Object.assign({}, defaultProps, {\n    plugins: plugins\n  }))) : defaultKeys;\n  var props = propKeys.reduce(function (acc, key) {\n    var valueAsString = (reference.getAttribute(\"data-tippy-\" + key) || '').trim();\n\n    if (!valueAsString) {\n      return acc;\n    }\n\n    if (key === 'content') {\n      acc[key] = valueAsString;\n    } else {\n      try {\n        acc[key] = JSON.parse(valueAsString);\n      } catch (e) {\n        acc[key] = valueAsString;\n      }\n    }\n\n    return acc;\n  }, {});\n  return props;\n}\nfunction evaluateProps(reference, props) {\n  var out = Object.assign({}, props, {\n    content: invokeWithArgsOrReturn(props.content, [reference])\n  }, props.ignoreAttributes ? {} : getDataAttributeProps(reference, props.plugins));\n  out.aria = Object.assign({}, defaultProps.aria, out.aria);\n  out.aria = {\n    expanded: out.aria.expanded === 'auto' ? props.interactive : out.aria.expanded,\n    content: out.aria.content === 'auto' ? props.interactive ? null : 'describedby' : out.aria.content\n  };\n  return out;\n}\nfunction validateProps(partialProps, plugins) {\n  if (partialProps === void 0) {\n    partialProps = {};\n  }\n\n  if (plugins === void 0) {\n    plugins = [];\n  }\n\n  var keys = Object.keys(partialProps);\n  keys.forEach(function (prop) {\n    var nonPluginProps = removeProperties(defaultProps, Object.keys(pluginProps));\n    var didPassUnknownProp = !hasOwnProperty(nonPluginProps, prop); // Check if the prop exists in `plugins`\n\n    if (didPassUnknownProp) {\n      didPassUnknownProp = plugins.filter(function (plugin) {\n        return plugin.name === prop;\n      }).length === 0;\n    }\n\n    warnWhen(didPassUnknownProp, [\"`\" + prop + \"`\", \"is not a valid prop. You may have spelled it incorrectly, or if it's\", 'a plugin, forgot to pass it in an array as props.plugins.', '\\n\\n', 'All props: https://atomiks.github.io/tippyjs/v6/all-props/\\n', 'Plugins: https://atomiks.github.io/tippyjs/v6/plugins/'].join(' '));\n  });\n}\n\nvar innerHTML = function innerHTML() {\n  return 'innerHTML';\n};\n\nfunction dangerouslySetInnerHTML(element, html) {\n  element[innerHTML()] = html;\n}\n\nfunction createArrowElement(value) {\n  var arrow = div();\n\n  if (value === true) {\n    arrow.className = ARROW_CLASS;\n  } else {\n    arrow.className = SVG_ARROW_CLASS;\n\n    if (isElement(value)) {\n      arrow.appendChild(value);\n    } else {\n      dangerouslySetInnerHTML(arrow, value);\n    }\n  }\n\n  return arrow;\n}\n\nfunction setContent(content, props) {\n  if (isElement(props.content)) {\n    dangerouslySetInnerHTML(content, '');\n    content.appendChild(props.content);\n  } else if (typeof props.content !== 'function') {\n    if (props.allowHTML) {\n      dangerouslySetInnerHTML(content, props.content);\n    } else {\n      content.textContent = props.content;\n    }\n  }\n}\nfunction getChildren(popper) {\n  var box = popper.firstElementChild;\n  var boxChildren = arrayFrom(box.children);\n  return {\n    box: box,\n    content: boxChildren.find(function (node) {\n      return node.classList.contains(CONTENT_CLASS);\n    }),\n    arrow: boxChildren.find(function (node) {\n      return node.classList.contains(ARROW_CLASS) || node.classList.contains(SVG_ARROW_CLASS);\n    }),\n    backdrop: boxChildren.find(function (node) {\n      return node.classList.contains(BACKDROP_CLASS);\n    })\n  };\n}\nfunction render(instance) {\n  var popper = div();\n  var box = div();\n  box.className = BOX_CLASS;\n  box.setAttribute('data-state', 'hidden');\n  box.setAttribute('tabindex', '-1');\n  var content = div();\n  content.className = CONTENT_CLASS;\n  content.setAttribute('data-state', 'hidden');\n  setContent(content, instance.props);\n  popper.appendChild(box);\n  box.appendChild(content);\n  onUpdate(instance.props, instance.props);\n\n  function onUpdate(prevProps, nextProps) {\n    var _getChildren = getChildren(popper),\n        box = _getChildren.box,\n        content = _getChildren.content,\n        arrow = _getChildren.arrow;\n\n    if (nextProps.theme) {\n      box.setAttribute('data-theme', nextProps.theme);\n    } else {\n      box.removeAttribute('data-theme');\n    }\n\n    if (typeof nextProps.animation === 'string') {\n      box.setAttribute('data-animation', nextProps.animation);\n    } else {\n      box.removeAttribute('data-animation');\n    }\n\n    if (nextProps.inertia) {\n      box.setAttribute('data-inertia', '');\n    } else {\n      box.removeAttribute('data-inertia');\n    }\n\n    box.style.maxWidth = typeof nextProps.maxWidth === 'number' ? nextProps.maxWidth + \"px\" : nextProps.maxWidth;\n\n    if (nextProps.role) {\n      box.setAttribute('role', nextProps.role);\n    } else {\n      box.removeAttribute('role');\n    }\n\n    if (prevProps.content !== nextProps.content || prevProps.allowHTML !== nextProps.allowHTML) {\n      setContent(content, instance.props);\n    }\n\n    if (nextProps.arrow) {\n      if (!arrow) {\n        box.appendChild(createArrowElement(nextProps.arrow));\n      } else if (prevProps.arrow !== nextProps.arrow) {\n        box.removeChild(arrow);\n        box.appendChild(createArrowElement(nextProps.arrow));\n      }\n    } else if (arrow) {\n      box.removeChild(arrow);\n    }\n  }\n\n  return {\n    popper: popper,\n    onUpdate: onUpdate\n  };\n} // Runtime check to identify if the render function is the default one; this\n// way we can apply default CSS transitions logic and it can be tree-shaken away\n\nrender.$$tippy = true;\n\nvar idCounter = 1;\nvar mouseMoveListeners = []; // Used by `hideAll()`\n\nvar mountedInstances = [];\nfunction createTippy(reference, passedProps) {\n  var props = evaluateProps(reference, Object.assign({}, defaultProps, getExtendedPassedProps(removeUndefinedProps(passedProps)))); // ===========================================================================\n  // 🔒 Private members\n  // ===========================================================================\n\n  var showTimeout;\n  var hideTimeout;\n  var scheduleHideAnimationFrame;\n  var isVisibleFromClick = false;\n  var didHideDueToDocumentMouseDown = false;\n  var didTouchMove = false;\n  var ignoreOnFirstUpdate = false;\n  var lastTriggerEvent;\n  var currentTransitionEndListener;\n  var onFirstUpdate;\n  var listeners = [];\n  var debouncedOnMouseMove = debounce(onMouseMove, props.interactiveDebounce);\n  var currentTarget; // ===========================================================================\n  // 🔑 Public members\n  // ===========================================================================\n\n  var id = idCounter++;\n  var popperInstance = null;\n  var plugins = unique(props.plugins);\n  var state = {\n    // Is the instance currently enabled?\n    isEnabled: true,\n    // Is the tippy currently showing and not transitioning out?\n    isVisible: false,\n    // Has the instance been destroyed?\n    isDestroyed: false,\n    // Is the tippy currently mounted to the DOM?\n    isMounted: false,\n    // Has the tippy finished transitioning in?\n    isShown: false\n  };\n  var instance = {\n    // properties\n    id: id,\n    reference: reference,\n    popper: div(),\n    popperInstance: popperInstance,\n    props: props,\n    state: state,\n    plugins: plugins,\n    // methods\n    clearDelayTimeouts: clearDelayTimeouts,\n    setProps: setProps,\n    setContent: setContent,\n    show: show,\n    hide: hide,\n    hideWithInteractivity: hideWithInteractivity,\n    enable: enable,\n    disable: disable,\n    unmount: unmount,\n    destroy: destroy\n  }; // TODO: Investigate why this early return causes a TDZ error in the tests —\n  // it doesn't seem to happen in the browser\n\n  /* istanbul ignore if */\n\n  if (!props.render) {\n    if (process.env.NODE_ENV !== \"production\") {\n      errorWhen(true, 'render() function has not been supplied.');\n    }\n\n    return instance;\n  } // ===========================================================================\n  // Initial mutations\n  // ===========================================================================\n\n\n  var _props$render = props.render(instance),\n      popper = _props$render.popper,\n      onUpdate = _props$render.onUpdate;\n\n  popper.setAttribute('data-tippy-root', '');\n  popper.id = \"tippy-\" + instance.id;\n  instance.popper = popper;\n  reference._tippy = instance;\n  popper._tippy = instance;\n  var pluginsHooks = plugins.map(function (plugin) {\n    return plugin.fn(instance);\n  });\n  var hasAriaExpanded = reference.hasAttribute('aria-expanded');\n  addListeners();\n  handleAriaExpandedAttribute();\n  handleStyles();\n  invokeHook('onCreate', [instance]);\n\n  if (props.showOnCreate) {\n    scheduleShow();\n  } // Prevent a tippy with a delay from hiding if the cursor left then returned\n  // before it started hiding\n\n\n  popper.addEventListener('mouseenter', function () {\n    if (instance.props.interactive && instance.state.isVisible) {\n      instance.clearDelayTimeouts();\n    }\n  });\n  popper.addEventListener('mouseleave', function () {\n    if (instance.props.interactive && instance.props.trigger.indexOf('mouseenter') >= 0) {\n      getDocument().addEventListener('mousemove', debouncedOnMouseMove);\n    }\n  });\n  return instance; // ===========================================================================\n  // 🔒 Private methods\n  // ===========================================================================\n\n  function getNormalizedTouchSettings() {\n    var touch = instance.props.touch;\n    return Array.isArray(touch) ? touch : [touch, 0];\n  }\n\n  function getIsCustomTouchBehavior() {\n    return getNormalizedTouchSettings()[0] === 'hold';\n  }\n\n  function getIsDefaultRenderFn() {\n    var _instance$props$rende;\n\n    // @ts-ignore\n    return !!((_instance$props$rende = instance.props.render) != null && _instance$props$rende.$$tippy);\n  }\n\n  function getCurrentTarget() {\n    return currentTarget || reference;\n  }\n\n  function getDocument() {\n    var parent = getCurrentTarget().parentNode;\n    return parent ? getOwnerDocument(parent) : document;\n  }\n\n  function getDefaultTemplateChildren() {\n    return getChildren(popper);\n  }\n\n  function getDelay(isShow) {\n    // For touch or keyboard input, force `0` delay for UX reasons\n    // Also if the instance is mounted but not visible (transitioning out),\n    // ignore delay\n    if (instance.state.isMounted && !instance.state.isVisible || currentInput.isTouch || lastTriggerEvent && lastTriggerEvent.type === 'focus') {\n      return 0;\n    }\n\n    return getValueAtIndexOrReturn(instance.props.delay, isShow ? 0 : 1, defaultProps.delay);\n  }\n\n  function handleStyles(fromHide) {\n    if (fromHide === void 0) {\n      fromHide = false;\n    }\n\n    popper.style.pointerEvents = instance.props.interactive && !fromHide ? '' : 'none';\n    popper.style.zIndex = \"\" + instance.props.zIndex;\n  }\n\n  function invokeHook(hook, args, shouldInvokePropsHook) {\n    if (shouldInvokePropsHook === void 0) {\n      shouldInvokePropsHook = true;\n    }\n\n    pluginsHooks.forEach(function (pluginHooks) {\n      if (pluginHooks[hook]) {\n        pluginHooks[hook].apply(pluginHooks, args);\n      }\n    });\n\n    if (shouldInvokePropsHook) {\n      var _instance$props;\n\n      (_instance$props = instance.props)[hook].apply(_instance$props, args);\n    }\n  }\n\n  function handleAriaContentAttribute() {\n    var aria = instance.props.aria;\n\n    if (!aria.content) {\n      return;\n    }\n\n    var attr = \"aria-\" + aria.content;\n    var id = popper.id;\n    var nodes = normalizeToArray(instance.props.triggerTarget || reference);\n    nodes.forEach(function (node) {\n      var currentValue = node.getAttribute(attr);\n\n      if (instance.state.isVisible) {\n        node.setAttribute(attr, currentValue ? currentValue + \" \" + id : id);\n      } else {\n        var nextValue = currentValue && currentValue.replace(id, '').trim();\n\n        if (nextValue) {\n          node.setAttribute(attr, nextValue);\n        } else {\n          node.removeAttribute(attr);\n        }\n      }\n    });\n  }\n\n  function handleAriaExpandedAttribute() {\n    if (hasAriaExpanded || !instance.props.aria.expanded) {\n      return;\n    }\n\n    var nodes = normalizeToArray(instance.props.triggerTarget || reference);\n    nodes.forEach(function (node) {\n      if (instance.props.interactive) {\n        node.setAttribute('aria-expanded', instance.state.isVisible && node === getCurrentTarget() ? 'true' : 'false');\n      } else {\n        node.removeAttribute('aria-expanded');\n      }\n    });\n  }\n\n  function cleanupInteractiveMouseListeners() {\n    getDocument().removeEventListener('mousemove', debouncedOnMouseMove);\n    mouseMoveListeners = mouseMoveListeners.filter(function (listener) {\n      return listener !== debouncedOnMouseMove;\n    });\n  }\n\n  function onDocumentPress(event) {\n    // Moved finger to scroll instead of an intentional tap outside\n    if (currentInput.isTouch) {\n      if (didTouchMove || event.type === 'mousedown') {\n        return;\n      }\n    }\n\n    var actualTarget = event.composedPath && event.composedPath()[0] || event.target; // Clicked on interactive popper\n\n    if (instance.props.interactive && actualContains(popper, actualTarget)) {\n      return;\n    } // Clicked on the event listeners target\n\n\n    if (normalizeToArray(instance.props.triggerTarget || reference).some(function (el) {\n      return actualContains(el, actualTarget);\n    })) {\n      if (currentInput.isTouch) {\n        return;\n      }\n\n      if (instance.state.isVisible && instance.props.trigger.indexOf('click') >= 0) {\n        return;\n      }\n    } else {\n      invokeHook('onClickOutside', [instance, event]);\n    }\n\n    if (instance.props.hideOnClick === true) {\n      instance.clearDelayTimeouts();\n      instance.hide(); // `mousedown` event is fired right before `focus` if pressing the\n      // currentTarget. This lets a tippy with `focus` trigger know that it\n      // should not show\n\n      didHideDueToDocumentMouseDown = true;\n      setTimeout(function () {\n        didHideDueToDocumentMouseDown = false;\n      }); // The listener gets added in `scheduleShow()`, but this may be hiding it\n      // before it shows, and hide()'s early bail-out behavior can prevent it\n      // from being cleaned up\n\n      if (!instance.state.isMounted) {\n        removeDocumentPress();\n      }\n    }\n  }\n\n  function onTouchMove() {\n    didTouchMove = true;\n  }\n\n  function onTouchStart() {\n    didTouchMove = false;\n  }\n\n  function addDocumentPress() {\n    var doc = getDocument();\n    doc.addEventListener('mousedown', onDocumentPress, true);\n    doc.addEventListener('touchend', onDocumentPress, TOUCH_OPTIONS);\n    doc.addEventListener('touchstart', onTouchStart, TOUCH_OPTIONS);\n    doc.addEventListener('touchmove', onTouchMove, TOUCH_OPTIONS);\n  }\n\n  function removeDocumentPress() {\n    var doc = getDocument();\n    doc.removeEventListener('mousedown', onDocumentPress, true);\n    doc.removeEventListener('touchend', onDocumentPress, TOUCH_OPTIONS);\n    doc.removeEventListener('touchstart', onTouchStart, TOUCH_OPTIONS);\n    doc.removeEventListener('touchmove', onTouchMove, TOUCH_OPTIONS);\n  }\n\n  function onTransitionedOut(duration, callback) {\n    onTransitionEnd(duration, function () {\n      if (!instance.state.isVisible && popper.parentNode && popper.parentNode.contains(popper)) {\n        callback();\n      }\n    });\n  }\n\n  function onTransitionedIn(duration, callback) {\n    onTransitionEnd(duration, callback);\n  }\n\n  function onTransitionEnd(duration, callback) {\n    var box = getDefaultTemplateChildren().box;\n\n    function listener(event) {\n      if (event.target === box) {\n        updateTransitionEndListener(box, 'remove', listener);\n        callback();\n      }\n    } // Make callback synchronous if duration is 0\n    // `transitionend` won't fire otherwise\n\n\n    if (duration === 0) {\n      return callback();\n    }\n\n    updateTransitionEndListener(box, 'remove', currentTransitionEndListener);\n    updateTransitionEndListener(box, 'add', listener);\n    currentTransitionEndListener = listener;\n  }\n\n  function on(eventType, handler, options) {\n    if (options === void 0) {\n      options = false;\n    }\n\n    var nodes = normalizeToArray(instance.props.triggerTarget || reference);\n    nodes.forEach(function (node) {\n      node.addEventListener(eventType, handler, options);\n      listeners.push({\n        node: node,\n        eventType: eventType,\n        handler: handler,\n        options: options\n      });\n    });\n  }\n\n  function addListeners() {\n    if (getIsCustomTouchBehavior()) {\n      on('touchstart', onTrigger, {\n        passive: true\n      });\n      on('touchend', onMouseLeave, {\n        passive: true\n      });\n    }\n\n    splitBySpaces(instance.props.trigger).forEach(function (eventType) {\n      if (eventType === 'manual') {\n        return;\n      }\n\n      on(eventType, onTrigger);\n\n      switch (eventType) {\n        case 'mouseenter':\n          on('mouseleave', onMouseLeave);\n          break;\n\n        case 'focus':\n          on(isIE11 ? 'focusout' : 'blur', onBlurOrFocusOut);\n          break;\n\n        case 'focusin':\n          on('focusout', onBlurOrFocusOut);\n          break;\n      }\n    });\n  }\n\n  function removeListeners() {\n    listeners.forEach(function (_ref) {\n      var node = _ref.node,\n          eventType = _ref.eventType,\n          handler = _ref.handler,\n          options = _ref.options;\n      node.removeEventListener(eventType, handler, options);\n    });\n    listeners = [];\n  }\n\n  function onTrigger(event) {\n    var _lastTriggerEvent;\n\n    var shouldScheduleClickHide = false;\n\n    if (!instance.state.isEnabled || isEventListenerStopped(event) || didHideDueToDocumentMouseDown) {\n      return;\n    }\n\n    var wasFocused = ((_lastTriggerEvent = lastTriggerEvent) == null ? void 0 : _lastTriggerEvent.type) === 'focus';\n    lastTriggerEvent = event;\n    currentTarget = event.currentTarget;\n    handleAriaExpandedAttribute();\n\n    if (!instance.state.isVisible && isMouseEvent(event)) {\n      // If scrolling, `mouseenter` events can be fired if the cursor lands\n      // over a new target, but `mousemove` events don't get fired. This\n      // causes interactive tooltips to get stuck open until the cursor is\n      // moved\n      mouseMoveListeners.forEach(function (listener) {\n        return listener(event);\n      });\n    } // Toggle show/hide when clicking click-triggered tooltips\n\n\n    if (event.type === 'click' && (instance.props.trigger.indexOf('mouseenter') < 0 || isVisibleFromClick) && instance.props.hideOnClick !== false && instance.state.isVisible) {\n      shouldScheduleClickHide = true;\n    } else {\n      scheduleShow(event);\n    }\n\n    if (event.type === 'click') {\n      isVisibleFromClick = !shouldScheduleClickHide;\n    }\n\n    if (shouldScheduleClickHide && !wasFocused) {\n      scheduleHide(event);\n    }\n  }\n\n  function onMouseMove(event) {\n    var target = event.target;\n    var isCursorOverReferenceOrPopper = getCurrentTarget().contains(target) || popper.contains(target);\n\n    if (event.type === 'mousemove' && isCursorOverReferenceOrPopper) {\n      return;\n    }\n\n    var popperTreeData = getNestedPopperTree().concat(popper).map(function (popper) {\n      var _instance$popperInsta;\n\n      var instance = popper._tippy;\n      var state = (_instance$popperInsta = instance.popperInstance) == null ? void 0 : _instance$popperInsta.state;\n\n      if (state) {\n        return {\n          popperRect: popper.getBoundingClientRect(),\n          popperState: state,\n          props: props\n        };\n      }\n\n      return null;\n    }).filter(Boolean);\n\n    if (isCursorOutsideInteractiveBorder(popperTreeData, event)) {\n      cleanupInteractiveMouseListeners();\n      scheduleHide(event);\n    }\n  }\n\n  function onMouseLeave(event) {\n    var shouldBail = isEventListenerStopped(event) || instance.props.trigger.indexOf('click') >= 0 && isVisibleFromClick;\n\n    if (shouldBail) {\n      return;\n    }\n\n    if (instance.props.interactive) {\n      instance.hideWithInteractivity(event);\n      return;\n    }\n\n    scheduleHide(event);\n  }\n\n  function onBlurOrFocusOut(event) {\n    if (instance.props.trigger.indexOf('focusin') < 0 && event.target !== getCurrentTarget()) {\n      return;\n    } // If focus was moved to within the popper\n\n\n    if (instance.props.interactive && event.relatedTarget && popper.contains(event.relatedTarget)) {\n      return;\n    }\n\n    scheduleHide(event);\n  }\n\n  function isEventListenerStopped(event) {\n    return currentInput.isTouch ? getIsCustomTouchBehavior() !== event.type.indexOf('touch') >= 0 : false;\n  }\n\n  function createPopperInstance() {\n    destroyPopperInstance();\n    var _instance$props2 = instance.props,\n        popperOptions = _instance$props2.popperOptions,\n        placement = _instance$props2.placement,\n        offset = _instance$props2.offset,\n        getReferenceClientRect = _instance$props2.getReferenceClientRect,\n        moveTransition = _instance$props2.moveTransition;\n    var arrow = getIsDefaultRenderFn() ? getChildren(popper).arrow : null;\n    var computedReference = getReferenceClientRect ? {\n      getBoundingClientRect: getReferenceClientRect,\n      contextElement: getReferenceClientRect.contextElement || getCurrentTarget()\n    } : reference;\n    var tippyModifier = {\n      name: '$$tippy',\n      enabled: true,\n      phase: 'beforeWrite',\n      requires: ['computeStyles'],\n      fn: function fn(_ref2) {\n        var state = _ref2.state;\n\n        if (getIsDefaultRenderFn()) {\n          var _getDefaultTemplateCh = getDefaultTemplateChildren(),\n              box = _getDefaultTemplateCh.box;\n\n          ['placement', 'reference-hidden', 'escaped'].forEach(function (attr) {\n            if (attr === 'placement') {\n              box.setAttribute('data-placement', state.placement);\n            } else {\n              if (state.attributes.popper[\"data-popper-\" + attr]) {\n                box.setAttribute(\"data-\" + attr, '');\n              } else {\n                box.removeAttribute(\"data-\" + attr);\n              }\n            }\n          });\n          state.attributes.popper = {};\n        }\n      }\n    };\n    var modifiers = [{\n      name: 'offset',\n      options: {\n        offset: offset\n      }\n    }, {\n      name: 'preventOverflow',\n      options: {\n        padding: {\n          top: 2,\n          bottom: 2,\n          left: 5,\n          right: 5\n        }\n      }\n    }, {\n      name: 'flip',\n      options: {\n        padding: 5\n      }\n    }, {\n      name: 'computeStyles',\n      options: {\n        adaptive: !moveTransition\n      }\n    }, tippyModifier];\n\n    if (getIsDefaultRenderFn() && arrow) {\n      modifiers.push({\n        name: 'arrow',\n        options: {\n          element: arrow,\n          padding: 3\n        }\n      });\n    }\n\n    modifiers.push.apply(modifiers, (popperOptions == null ? void 0 : popperOptions.modifiers) || []);\n    instance.popperInstance = createPopper(computedReference, popper, Object.assign({}, popperOptions, {\n      placement: placement,\n      onFirstUpdate: onFirstUpdate,\n      modifiers: modifiers\n    }));\n  }\n\n  function destroyPopperInstance() {\n    if (instance.popperInstance) {\n      instance.popperInstance.destroy();\n      instance.popperInstance = null;\n    }\n  }\n\n  function mount() {\n    var appendTo = instance.props.appendTo;\n    var parentNode; // By default, we'll append the popper to the triggerTargets's parentNode so\n    // it's directly after the reference element so the elements inside the\n    // tippy can be tabbed to\n    // If there are clipping issues, the user can specify a different appendTo\n    // and ensure focus management is handled correctly manually\n\n    var node = getCurrentTarget();\n\n    if (instance.props.interactive && appendTo === TIPPY_DEFAULT_APPEND_TO || appendTo === 'parent') {\n      parentNode = node.parentNode;\n    } else {\n      parentNode = invokeWithArgsOrReturn(appendTo, [node]);\n    } // The popper element needs to exist on the DOM before its position can be\n    // updated as Popper needs to read its dimensions\n\n\n    if (!parentNode.contains(popper)) {\n      parentNode.appendChild(popper);\n    }\n\n    instance.state.isMounted = true;\n    createPopperInstance();\n    /* istanbul ignore else */\n\n    if (process.env.NODE_ENV !== \"production\") {\n      // Accessibility check\n      warnWhen(instance.props.interactive && appendTo === defaultProps.appendTo && node.nextElementSibling !== popper, ['Interactive tippy element may not be accessible via keyboard', 'navigation because it is not directly after the reference element', 'in the DOM source order.', '\\n\\n', 'Using a wrapper <div> or <span> tag around the reference element', 'solves this by creating a new parentNode context.', '\\n\\n', 'Specifying `appendTo: document.body` silences this warning, but it', 'assumes you are using a focus management solution to handle', 'keyboard navigation.', '\\n\\n', 'See: https://atomiks.github.io/tippyjs/v6/accessibility/#interactivity'].join(' '));\n    }\n  }\n\n  function getNestedPopperTree() {\n    return arrayFrom(popper.querySelectorAll('[data-tippy-root]'));\n  }\n\n  function scheduleShow(event) {\n    instance.clearDelayTimeouts();\n\n    if (event) {\n      invokeHook('onTrigger', [instance, event]);\n    }\n\n    addDocumentPress();\n    var delay = getDelay(true);\n\n    var _getNormalizedTouchSe = getNormalizedTouchSettings(),\n        touchValue = _getNormalizedTouchSe[0],\n        touchDelay = _getNormalizedTouchSe[1];\n\n    if (currentInput.isTouch && touchValue === 'hold' && touchDelay) {\n      delay = touchDelay;\n    }\n\n    if (delay) {\n      showTimeout = setTimeout(function () {\n        instance.show();\n      }, delay);\n    } else {\n      instance.show();\n    }\n  }\n\n  function scheduleHide(event) {\n    instance.clearDelayTimeouts();\n    invokeHook('onUntrigger', [instance, event]);\n\n    if (!instance.state.isVisible) {\n      removeDocumentPress();\n      return;\n    } // For interactive tippies, scheduleHide is added to a document.body handler\n    // from onMouseLeave so must intercept scheduled hides from mousemove/leave\n    // events when trigger contains mouseenter and click, and the tip is\n    // currently shown as a result of a click.\n\n\n    if (instance.props.trigger.indexOf('mouseenter') >= 0 && instance.props.trigger.indexOf('click') >= 0 && ['mouseleave', 'mousemove'].indexOf(event.type) >= 0 && isVisibleFromClick) {\n      return;\n    }\n\n    var delay = getDelay(false);\n\n    if (delay) {\n      hideTimeout = setTimeout(function () {\n        if (instance.state.isVisible) {\n          instance.hide();\n        }\n      }, delay);\n    } else {\n      // Fixes a `transitionend` problem when it fires 1 frame too\n      // late sometimes, we don't want hide() to be called.\n      scheduleHideAnimationFrame = requestAnimationFrame(function () {\n        instance.hide();\n      });\n    }\n  } // ===========================================================================\n  // 🔑 Public methods\n  // ===========================================================================\n\n\n  function enable() {\n    instance.state.isEnabled = true;\n  }\n\n  function disable() {\n    // Disabling the instance should also hide it\n    // https://github.com/atomiks/tippy.js-react/issues/106\n    instance.hide();\n    instance.state.isEnabled = false;\n  }\n\n  function clearDelayTimeouts() {\n    clearTimeout(showTimeout);\n    clearTimeout(hideTimeout);\n    cancelAnimationFrame(scheduleHideAnimationFrame);\n  }\n\n  function setProps(partialProps) {\n    /* istanbul ignore else */\n    if (process.env.NODE_ENV !== \"production\") {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('setProps'));\n    }\n\n    if (instance.state.isDestroyed) {\n      return;\n    }\n\n    invokeHook('onBeforeUpdate', [instance, partialProps]);\n    removeListeners();\n    var prevProps = instance.props;\n    var nextProps = evaluateProps(reference, Object.assign({}, prevProps, removeUndefinedProps(partialProps), {\n      ignoreAttributes: true\n    }));\n    instance.props = nextProps;\n    addListeners();\n\n    if (prevProps.interactiveDebounce !== nextProps.interactiveDebounce) {\n      cleanupInteractiveMouseListeners();\n      debouncedOnMouseMove = debounce(onMouseMove, nextProps.interactiveDebounce);\n    } // Ensure stale aria-expanded attributes are removed\n\n\n    if (prevProps.triggerTarget && !nextProps.triggerTarget) {\n      normalizeToArray(prevProps.triggerTarget).forEach(function (node) {\n        node.removeAttribute('aria-expanded');\n      });\n    } else if (nextProps.triggerTarget) {\n      reference.removeAttribute('aria-expanded');\n    }\n\n    handleAriaExpandedAttribute();\n    handleStyles();\n\n    if (onUpdate) {\n      onUpdate(prevProps, nextProps);\n    }\n\n    if (instance.popperInstance) {\n      createPopperInstance(); // Fixes an issue with nested tippies if they are all getting re-rendered,\n      // and the nested ones get re-rendered first.\n      // https://github.com/atomiks/tippyjs-react/issues/177\n      // TODO: find a cleaner / more efficient solution(!)\n\n      getNestedPopperTree().forEach(function (nestedPopper) {\n        // React (and other UI libs likely) requires a rAF wrapper as it flushes\n        // its work in one\n        requestAnimationFrame(nestedPopper._tippy.popperInstance.forceUpdate);\n      });\n    }\n\n    invokeHook('onAfterUpdate', [instance, partialProps]);\n  }\n\n  function setContent(content) {\n    instance.setProps({\n      content: content\n    });\n  }\n\n  function show() {\n    /* istanbul ignore else */\n    if (process.env.NODE_ENV !== \"production\") {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('show'));\n    } // Early bail-out\n\n\n    var isAlreadyVisible = instance.state.isVisible;\n    var isDestroyed = instance.state.isDestroyed;\n    var isDisabled = !instance.state.isEnabled;\n    var isTouchAndTouchDisabled = currentInput.isTouch && !instance.props.touch;\n    var duration = getValueAtIndexOrReturn(instance.props.duration, 0, defaultProps.duration);\n\n    if (isAlreadyVisible || isDestroyed || isDisabled || isTouchAndTouchDisabled) {\n      return;\n    } // Normalize `disabled` behavior across browsers.\n    // Firefox allows events on disabled elements, but Chrome doesn't.\n    // Using a wrapper element (i.e. <span>) is recommended.\n\n\n    if (getCurrentTarget().hasAttribute('disabled')) {\n      return;\n    }\n\n    invokeHook('onShow', [instance], false);\n\n    if (instance.props.onShow(instance) === false) {\n      return;\n    }\n\n    instance.state.isVisible = true;\n\n    if (getIsDefaultRenderFn()) {\n      popper.style.visibility = 'visible';\n    }\n\n    handleStyles();\n    addDocumentPress();\n\n    if (!instance.state.isMounted) {\n      popper.style.transition = 'none';\n    } // If flipping to the opposite side after hiding at least once, the\n    // animation will use the wrong placement without resetting the duration\n\n\n    if (getIsDefaultRenderFn()) {\n      var _getDefaultTemplateCh2 = getDefaultTemplateChildren(),\n          box = _getDefaultTemplateCh2.box,\n          content = _getDefaultTemplateCh2.content;\n\n      setTransitionDuration([box, content], 0);\n    }\n\n    onFirstUpdate = function onFirstUpdate() {\n      var _instance$popperInsta2;\n\n      if (!instance.state.isVisible || ignoreOnFirstUpdate) {\n        return;\n      }\n\n      ignoreOnFirstUpdate = true; // reflow\n\n      void popper.offsetHeight;\n      popper.style.transition = instance.props.moveTransition;\n\n      if (getIsDefaultRenderFn() && instance.props.animation) {\n        var _getDefaultTemplateCh3 = getDefaultTemplateChildren(),\n            _box = _getDefaultTemplateCh3.box,\n            _content = _getDefaultTemplateCh3.content;\n\n        setTransitionDuration([_box, _content], duration);\n        setVisibilityState([_box, _content], 'visible');\n      }\n\n      handleAriaContentAttribute();\n      handleAriaExpandedAttribute();\n      pushIfUnique(mountedInstances, instance); // certain modifiers (e.g. `maxSize`) require a second update after the\n      // popper has been positioned for the first time\n\n      (_instance$popperInsta2 = instance.popperInstance) == null ? void 0 : _instance$popperInsta2.forceUpdate();\n      invokeHook('onMount', [instance]);\n\n      if (instance.props.animation && getIsDefaultRenderFn()) {\n        onTransitionedIn(duration, function () {\n          instance.state.isShown = true;\n          invokeHook('onShown', [instance]);\n        });\n      }\n    };\n\n    mount();\n  }\n\n  function hide() {\n    /* istanbul ignore else */\n    if (process.env.NODE_ENV !== \"production\") {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('hide'));\n    } // Early bail-out\n\n\n    var isAlreadyHidden = !instance.state.isVisible;\n    var isDestroyed = instance.state.isDestroyed;\n    var isDisabled = !instance.state.isEnabled;\n    var duration = getValueAtIndexOrReturn(instance.props.duration, 1, defaultProps.duration);\n\n    if (isAlreadyHidden || isDestroyed || isDisabled) {\n      return;\n    }\n\n    invokeHook('onHide', [instance], false);\n\n    if (instance.props.onHide(instance) === false) {\n      return;\n    }\n\n    instance.state.isVisible = false;\n    instance.state.isShown = false;\n    ignoreOnFirstUpdate = false;\n    isVisibleFromClick = false;\n\n    if (getIsDefaultRenderFn()) {\n      popper.style.visibility = 'hidden';\n    }\n\n    cleanupInteractiveMouseListeners();\n    removeDocumentPress();\n    handleStyles(true);\n\n    if (getIsDefaultRenderFn()) {\n      var _getDefaultTemplateCh4 = getDefaultTemplateChildren(),\n          box = _getDefaultTemplateCh4.box,\n          content = _getDefaultTemplateCh4.content;\n\n      if (instance.props.animation) {\n        setTransitionDuration([box, content], duration);\n        setVisibilityState([box, content], 'hidden');\n      }\n    }\n\n    handleAriaContentAttribute();\n    handleAriaExpandedAttribute();\n\n    if (instance.props.animation) {\n      if (getIsDefaultRenderFn()) {\n        onTransitionedOut(duration, instance.unmount);\n      }\n    } else {\n      instance.unmount();\n    }\n  }\n\n  function hideWithInteractivity(event) {\n    /* istanbul ignore else */\n    if (process.env.NODE_ENV !== \"production\") {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('hideWithInteractivity'));\n    }\n\n    getDocument().addEventListener('mousemove', debouncedOnMouseMove);\n    pushIfUnique(mouseMoveListeners, debouncedOnMouseMove);\n    debouncedOnMouseMove(event);\n  }\n\n  function unmount() {\n    /* istanbul ignore else */\n    if (process.env.NODE_ENV !== \"production\") {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('unmount'));\n    }\n\n    if (instance.state.isVisible) {\n      instance.hide();\n    }\n\n    if (!instance.state.isMounted) {\n      return;\n    }\n\n    destroyPopperInstance(); // If a popper is not interactive, it will be appended outside the popper\n    // tree by default. This seems mainly for interactive tippies, but we should\n    // find a workaround if possible\n\n    getNestedPopperTree().forEach(function (nestedPopper) {\n      nestedPopper._tippy.unmount();\n    });\n\n    if (popper.parentNode) {\n      popper.parentNode.removeChild(popper);\n    }\n\n    mountedInstances = mountedInstances.filter(function (i) {\n      return i !== instance;\n    });\n    instance.state.isMounted = false;\n    invokeHook('onHidden', [instance]);\n  }\n\n  function destroy() {\n    /* istanbul ignore else */\n    if (process.env.NODE_ENV !== \"production\") {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('destroy'));\n    }\n\n    if (instance.state.isDestroyed) {\n      return;\n    }\n\n    instance.clearDelayTimeouts();\n    instance.unmount();\n    removeListeners();\n    delete reference._tippy;\n    instance.state.isDestroyed = true;\n    invokeHook('onDestroy', [instance]);\n  }\n}\n\nfunction tippy(targets, optionalProps) {\n  if (optionalProps === void 0) {\n    optionalProps = {};\n  }\n\n  var plugins = defaultProps.plugins.concat(optionalProps.plugins || []);\n  /* istanbul ignore else */\n\n  if (process.env.NODE_ENV !== \"production\") {\n    validateTargets(targets);\n    validateProps(optionalProps, plugins);\n  }\n\n  bindGlobalEventListeners();\n  var passedProps = Object.assign({}, optionalProps, {\n    plugins: plugins\n  });\n  var elements = getArrayOfElements(targets);\n  /* istanbul ignore else */\n\n  if (process.env.NODE_ENV !== \"production\") {\n    var isSingleContentElement = isElement(passedProps.content);\n    var isMoreThanOneReferenceElement = elements.length > 1;\n    warnWhen(isSingleContentElement && isMoreThanOneReferenceElement, ['tippy() was passed an Element as the `content` prop, but more than', 'one tippy instance was created by this invocation. This means the', 'content element will only be appended to the last tippy instance.', '\\n\\n', 'Instead, pass the .innerHTML of the element, or use a function that', 'returns a cloned version of the element instead.', '\\n\\n', '1) content: element.innerHTML\\n', '2) content: () => element.cloneNode(true)'].join(' '));\n  }\n\n  var instances = elements.reduce(function (acc, reference) {\n    var instance = reference && createTippy(reference, passedProps);\n\n    if (instance) {\n      acc.push(instance);\n    }\n\n    return acc;\n  }, []);\n  return isElement(targets) ? instances[0] : instances;\n}\n\ntippy.defaultProps = defaultProps;\ntippy.setDefaultProps = setDefaultProps;\ntippy.currentInput = currentInput;\nvar hideAll = function hideAll(_temp) {\n  var _ref = _temp === void 0 ? {} : _temp,\n      excludedReferenceOrInstance = _ref.exclude,\n      duration = _ref.duration;\n\n  mountedInstances.forEach(function (instance) {\n    var isExcluded = false;\n\n    if (excludedReferenceOrInstance) {\n      isExcluded = isReferenceElement(excludedReferenceOrInstance) ? instance.reference === excludedReferenceOrInstance : instance.popper === excludedReferenceOrInstance.popper;\n    }\n\n    if (!isExcluded) {\n      var originalDuration = instance.props.duration;\n      instance.setProps({\n        duration: duration\n      });\n      instance.hide();\n\n      if (!instance.state.isDestroyed) {\n        instance.setProps({\n          duration: originalDuration\n        });\n      }\n    }\n  });\n};\n\n// every time the popper is destroyed (i.e. a new target), removing the styles\n// and causing transitions to break for singletons when the console is open, but\n// most notably for non-transform styles being used, `gpuAcceleration: false`.\n\nvar applyStylesModifier = Object.assign({}, applyStyles, {\n  effect: function effect(_ref) {\n    var state = _ref.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    } // intentionally return no cleanup function\n    // return () => { ... }\n\n  }\n});\n\nvar createSingleton = function createSingleton(tippyInstances, optionalProps) {\n  var _optionalProps$popper;\n\n  if (optionalProps === void 0) {\n    optionalProps = {};\n  }\n\n  /* istanbul ignore else */\n  if (process.env.NODE_ENV !== \"production\") {\n    errorWhen(!Array.isArray(tippyInstances), ['The first argument passed to createSingleton() must be an array of', 'tippy instances. The passed value was', String(tippyInstances)].join(' '));\n  }\n\n  var individualInstances = tippyInstances;\n  var references = [];\n  var triggerTargets = [];\n  var currentTarget;\n  var overrides = optionalProps.overrides;\n  var interceptSetPropsCleanups = [];\n  var shownOnCreate = false;\n\n  function setTriggerTargets() {\n    triggerTargets = individualInstances.map(function (instance) {\n      return normalizeToArray(instance.props.triggerTarget || instance.reference);\n    }).reduce(function (acc, item) {\n      return acc.concat(item);\n    }, []);\n  }\n\n  function setReferences() {\n    references = individualInstances.map(function (instance) {\n      return instance.reference;\n    });\n  }\n\n  function enableInstances(isEnabled) {\n    individualInstances.forEach(function (instance) {\n      if (isEnabled) {\n        instance.enable();\n      } else {\n        instance.disable();\n      }\n    });\n  }\n\n  function interceptSetProps(singleton) {\n    return individualInstances.map(function (instance) {\n      var originalSetProps = instance.setProps;\n\n      instance.setProps = function (props) {\n        originalSetProps(props);\n\n        if (instance.reference === currentTarget) {\n          singleton.setProps(props);\n        }\n      };\n\n      return function () {\n        instance.setProps = originalSetProps;\n      };\n    });\n  } // have to pass singleton, as it maybe undefined on first call\n\n\n  function prepareInstance(singleton, target) {\n    var index = triggerTargets.indexOf(target); // bail-out\n\n    if (target === currentTarget) {\n      return;\n    }\n\n    currentTarget = target;\n    var overrideProps = (overrides || []).concat('content').reduce(function (acc, prop) {\n      acc[prop] = individualInstances[index].props[prop];\n      return acc;\n    }, {});\n    singleton.setProps(Object.assign({}, overrideProps, {\n      getReferenceClientRect: typeof overrideProps.getReferenceClientRect === 'function' ? overrideProps.getReferenceClientRect : function () {\n        var _references$index;\n\n        return (_references$index = references[index]) == null ? void 0 : _references$index.getBoundingClientRect();\n      }\n    }));\n  }\n\n  enableInstances(false);\n  setReferences();\n  setTriggerTargets();\n  var plugin = {\n    fn: function fn() {\n      return {\n        onDestroy: function onDestroy() {\n          enableInstances(true);\n        },\n        onHidden: function onHidden() {\n          currentTarget = null;\n        },\n        onClickOutside: function onClickOutside(instance) {\n          if (instance.props.showOnCreate && !shownOnCreate) {\n            shownOnCreate = true;\n            currentTarget = null;\n          }\n        },\n        onShow: function onShow(instance) {\n          if (instance.props.showOnCreate && !shownOnCreate) {\n            shownOnCreate = true;\n            prepareInstance(instance, references[0]);\n          }\n        },\n        onTrigger: function onTrigger(instance, event) {\n          prepareInstance(instance, event.currentTarget);\n        }\n      };\n    }\n  };\n  var singleton = tippy(div(), Object.assign({}, removeProperties(optionalProps, ['overrides']), {\n    plugins: [plugin].concat(optionalProps.plugins || []),\n    triggerTarget: triggerTargets,\n    popperOptions: Object.assign({}, optionalProps.popperOptions, {\n      modifiers: [].concat(((_optionalProps$popper = optionalProps.popperOptions) == null ? void 0 : _optionalProps$popper.modifiers) || [], [applyStylesModifier])\n    })\n  }));\n  var originalShow = singleton.show;\n\n  singleton.show = function (target) {\n    originalShow(); // first time, showOnCreate or programmatic call with no params\n    // default to showing first instance\n\n    if (!currentTarget && target == null) {\n      return prepareInstance(singleton, references[0]);\n    } // triggered from event (do nothing as prepareInstance already called by onTrigger)\n    // programmatic call with no params when already visible (do nothing again)\n\n\n    if (currentTarget && target == null) {\n      return;\n    } // target is index of instance\n\n\n    if (typeof target === 'number') {\n      return references[target] && prepareInstance(singleton, references[target]);\n    } // target is a child tippy instance\n\n\n    if (individualInstances.indexOf(target) >= 0) {\n      var ref = target.reference;\n      return prepareInstance(singleton, ref);\n    } // target is a ReferenceElement\n\n\n    if (references.indexOf(target) >= 0) {\n      return prepareInstance(singleton, target);\n    }\n  };\n\n  singleton.showNext = function () {\n    var first = references[0];\n\n    if (!currentTarget) {\n      return singleton.show(0);\n    }\n\n    var index = references.indexOf(currentTarget);\n    singleton.show(references[index + 1] || first);\n  };\n\n  singleton.showPrevious = function () {\n    var last = references[references.length - 1];\n\n    if (!currentTarget) {\n      return singleton.show(last);\n    }\n\n    var index = references.indexOf(currentTarget);\n    var target = references[index - 1] || last;\n    singleton.show(target);\n  };\n\n  var originalSetProps = singleton.setProps;\n\n  singleton.setProps = function (props) {\n    overrides = props.overrides || overrides;\n    originalSetProps(props);\n  };\n\n  singleton.setInstances = function (nextInstances) {\n    enableInstances(true);\n    interceptSetPropsCleanups.forEach(function (fn) {\n      return fn();\n    });\n    individualInstances = nextInstances;\n    enableInstances(false);\n    setReferences();\n    setTriggerTargets();\n    interceptSetPropsCleanups = interceptSetProps(singleton);\n    singleton.setProps({\n      triggerTarget: triggerTargets\n    });\n  };\n\n  interceptSetPropsCleanups = interceptSetProps(singleton);\n  return singleton;\n};\n\nvar BUBBLING_EVENTS_MAP = {\n  mouseover: 'mouseenter',\n  focusin: 'focus',\n  click: 'click'\n};\n/**\n * Creates a delegate instance that controls the creation of tippy instances\n * for child elements (`target` CSS selector).\n */\n\nfunction delegate(targets, props) {\n  /* istanbul ignore else */\n  if (process.env.NODE_ENV !== \"production\") {\n    errorWhen(!(props && props.target), ['You must specity a `target` prop indicating a CSS selector string matching', 'the target elements that should receive a tippy.'].join(' '));\n  }\n\n  var listeners = [];\n  var childTippyInstances = [];\n  var disabled = false;\n  var target = props.target;\n  var nativeProps = removeProperties(props, ['target']);\n  var parentProps = Object.assign({}, nativeProps, {\n    trigger: 'manual',\n    touch: false\n  });\n  var childProps = Object.assign({\n    touch: defaultProps.touch\n  }, nativeProps, {\n    showOnCreate: true\n  });\n  var returnValue = tippy(targets, parentProps);\n  var normalizedReturnValue = normalizeToArray(returnValue);\n\n  function onTrigger(event) {\n    if (!event.target || disabled) {\n      return;\n    }\n\n    var targetNode = event.target.closest(target);\n\n    if (!targetNode) {\n      return;\n    } // Get relevant trigger with fallbacks:\n    // 1. Check `data-tippy-trigger` attribute on target node\n    // 2. Fallback to `trigger` passed to `delegate()`\n    // 3. Fallback to `defaultProps.trigger`\n\n\n    var trigger = targetNode.getAttribute('data-tippy-trigger') || props.trigger || defaultProps.trigger; // @ts-ignore\n\n    if (targetNode._tippy) {\n      return;\n    }\n\n    if (event.type === 'touchstart' && typeof childProps.touch === 'boolean') {\n      return;\n    }\n\n    if (event.type !== 'touchstart' && trigger.indexOf(BUBBLING_EVENTS_MAP[event.type]) < 0) {\n      return;\n    }\n\n    var instance = tippy(targetNode, childProps);\n\n    if (instance) {\n      childTippyInstances = childTippyInstances.concat(instance);\n    }\n  }\n\n  function on(node, eventType, handler, options) {\n    if (options === void 0) {\n      options = false;\n    }\n\n    node.addEventListener(eventType, handler, options);\n    listeners.push({\n      node: node,\n      eventType: eventType,\n      handler: handler,\n      options: options\n    });\n  }\n\n  function addEventListeners(instance) {\n    var reference = instance.reference;\n    on(reference, 'touchstart', onTrigger, TOUCH_OPTIONS);\n    on(reference, 'mouseover', onTrigger);\n    on(reference, 'focusin', onTrigger);\n    on(reference, 'click', onTrigger);\n  }\n\n  function removeEventListeners() {\n    listeners.forEach(function (_ref) {\n      var node = _ref.node,\n          eventType = _ref.eventType,\n          handler = _ref.handler,\n          options = _ref.options;\n      node.removeEventListener(eventType, handler, options);\n    });\n    listeners = [];\n  }\n\n  function applyMutations(instance) {\n    var originalDestroy = instance.destroy;\n    var originalEnable = instance.enable;\n    var originalDisable = instance.disable;\n\n    instance.destroy = function (shouldDestroyChildInstances) {\n      if (shouldDestroyChildInstances === void 0) {\n        shouldDestroyChildInstances = true;\n      }\n\n      if (shouldDestroyChildInstances) {\n        childTippyInstances.forEach(function (instance) {\n          instance.destroy();\n        });\n      }\n\n      childTippyInstances = [];\n      removeEventListeners();\n      originalDestroy();\n    };\n\n    instance.enable = function () {\n      originalEnable();\n      childTippyInstances.forEach(function (instance) {\n        return instance.enable();\n      });\n      disabled = false;\n    };\n\n    instance.disable = function () {\n      originalDisable();\n      childTippyInstances.forEach(function (instance) {\n        return instance.disable();\n      });\n      disabled = true;\n    };\n\n    addEventListeners(instance);\n  }\n\n  normalizedReturnValue.forEach(applyMutations);\n  return returnValue;\n}\n\nvar animateFill = {\n  name: 'animateFill',\n  defaultValue: false,\n  fn: function fn(instance) {\n    var _instance$props$rende;\n\n    // @ts-ignore\n    if (!((_instance$props$rende = instance.props.render) != null && _instance$props$rende.$$tippy)) {\n      if (process.env.NODE_ENV !== \"production\") {\n        errorWhen(instance.props.animateFill, 'The `animateFill` plugin requires the default render function.');\n      }\n\n      return {};\n    }\n\n    var _getChildren = getChildren(instance.popper),\n        box = _getChildren.box,\n        content = _getChildren.content;\n\n    var backdrop = instance.props.animateFill ? createBackdropElement() : null;\n    return {\n      onCreate: function onCreate() {\n        if (backdrop) {\n          box.insertBefore(backdrop, box.firstElementChild);\n          box.setAttribute('data-animatefill', '');\n          box.style.overflow = 'hidden';\n          instance.setProps({\n            arrow: false,\n            animation: 'shift-away'\n          });\n        }\n      },\n      onMount: function onMount() {\n        if (backdrop) {\n          var transitionDuration = box.style.transitionDuration;\n          var duration = Number(transitionDuration.replace('ms', '')); // The content should fade in after the backdrop has mostly filled the\n          // tooltip element. `clip-path` is the other alternative but is not\n          // well-supported and is buggy on some devices.\n\n          content.style.transitionDelay = Math.round(duration / 10) + \"ms\";\n          backdrop.style.transitionDuration = transitionDuration;\n          setVisibilityState([backdrop], 'visible');\n        }\n      },\n      onShow: function onShow() {\n        if (backdrop) {\n          backdrop.style.transitionDuration = '0ms';\n        }\n      },\n      onHide: function onHide() {\n        if (backdrop) {\n          setVisibilityState([backdrop], 'hidden');\n        }\n      }\n    };\n  }\n};\n\nfunction createBackdropElement() {\n  var backdrop = div();\n  backdrop.className = BACKDROP_CLASS;\n  setVisibilityState([backdrop], 'hidden');\n  return backdrop;\n}\n\nvar mouseCoords = {\n  clientX: 0,\n  clientY: 0\n};\nvar activeInstances = [];\n\nfunction storeMouseCoords(_ref) {\n  var clientX = _ref.clientX,\n      clientY = _ref.clientY;\n  mouseCoords = {\n    clientX: clientX,\n    clientY: clientY\n  };\n}\n\nfunction addMouseCoordsListener(doc) {\n  doc.addEventListener('mousemove', storeMouseCoords);\n}\n\nfunction removeMouseCoordsListener(doc) {\n  doc.removeEventListener('mousemove', storeMouseCoords);\n}\n\nvar followCursor = {\n  name: 'followCursor',\n  defaultValue: false,\n  fn: function fn(instance) {\n    var reference = instance.reference;\n    var doc = getOwnerDocument(instance.props.triggerTarget || reference);\n    var isInternalUpdate = false;\n    var wasFocusEvent = false;\n    var isUnmounted = true;\n    var prevProps = instance.props;\n\n    function getIsInitialBehavior() {\n      return instance.props.followCursor === 'initial' && instance.state.isVisible;\n    }\n\n    function addListener() {\n      doc.addEventListener('mousemove', onMouseMove);\n    }\n\n    function removeListener() {\n      doc.removeEventListener('mousemove', onMouseMove);\n    }\n\n    function unsetGetReferenceClientRect() {\n      isInternalUpdate = true;\n      instance.setProps({\n        getReferenceClientRect: null\n      });\n      isInternalUpdate = false;\n    }\n\n    function onMouseMove(event) {\n      // If the instance is interactive, avoid updating the position unless it's\n      // over the reference element\n      var isCursorOverReference = event.target ? reference.contains(event.target) : true;\n      var followCursor = instance.props.followCursor;\n      var clientX = event.clientX,\n          clientY = event.clientY;\n      var rect = reference.getBoundingClientRect();\n      var relativeX = clientX - rect.left;\n      var relativeY = clientY - rect.top;\n\n      if (isCursorOverReference || !instance.props.interactive) {\n        instance.setProps({\n          // @ts-ignore - unneeded DOMRect properties\n          getReferenceClientRect: function getReferenceClientRect() {\n            var rect = reference.getBoundingClientRect();\n            var x = clientX;\n            var y = clientY;\n\n            if (followCursor === 'initial') {\n              x = rect.left + relativeX;\n              y = rect.top + relativeY;\n            }\n\n            var top = followCursor === 'horizontal' ? rect.top : y;\n            var right = followCursor === 'vertical' ? rect.right : x;\n            var bottom = followCursor === 'horizontal' ? rect.bottom : y;\n            var left = followCursor === 'vertical' ? rect.left : x;\n            return {\n              width: right - left,\n              height: bottom - top,\n              top: top,\n              right: right,\n              bottom: bottom,\n              left: left\n            };\n          }\n        });\n      }\n    }\n\n    function create() {\n      if (instance.props.followCursor) {\n        activeInstances.push({\n          instance: instance,\n          doc: doc\n        });\n        addMouseCoordsListener(doc);\n      }\n    }\n\n    function destroy() {\n      activeInstances = activeInstances.filter(function (data) {\n        return data.instance !== instance;\n      });\n\n      if (activeInstances.filter(function (data) {\n        return data.doc === doc;\n      }).length === 0) {\n        removeMouseCoordsListener(doc);\n      }\n    }\n\n    return {\n      onCreate: create,\n      onDestroy: destroy,\n      onBeforeUpdate: function onBeforeUpdate() {\n        prevProps = instance.props;\n      },\n      onAfterUpdate: function onAfterUpdate(_, _ref2) {\n        var followCursor = _ref2.followCursor;\n\n        if (isInternalUpdate) {\n          return;\n        }\n\n        if (followCursor !== undefined && prevProps.followCursor !== followCursor) {\n          destroy();\n\n          if (followCursor) {\n            create();\n\n            if (instance.state.isMounted && !wasFocusEvent && !getIsInitialBehavior()) {\n              addListener();\n            }\n          } else {\n            removeListener();\n            unsetGetReferenceClientRect();\n          }\n        }\n      },\n      onMount: function onMount() {\n        if (instance.props.followCursor && !wasFocusEvent) {\n          if (isUnmounted) {\n            onMouseMove(mouseCoords);\n            isUnmounted = false;\n          }\n\n          if (!getIsInitialBehavior()) {\n            addListener();\n          }\n        }\n      },\n      onTrigger: function onTrigger(_, event) {\n        if (isMouseEvent(event)) {\n          mouseCoords = {\n            clientX: event.clientX,\n            clientY: event.clientY\n          };\n        }\n\n        wasFocusEvent = event.type === 'focus';\n      },\n      onHidden: function onHidden() {\n        if (instance.props.followCursor) {\n          unsetGetReferenceClientRect();\n          removeListener();\n          isUnmounted = true;\n        }\n      }\n    };\n  }\n};\n\nfunction getProps(props, modifier) {\n  var _props$popperOptions;\n\n  return {\n    popperOptions: Object.assign({}, props.popperOptions, {\n      modifiers: [].concat((((_props$popperOptions = props.popperOptions) == null ? void 0 : _props$popperOptions.modifiers) || []).filter(function (_ref) {\n        var name = _ref.name;\n        return name !== modifier.name;\n      }), [modifier])\n    })\n  };\n}\n\nvar inlinePositioning = {\n  name: 'inlinePositioning',\n  defaultValue: false,\n  fn: function fn(instance) {\n    var reference = instance.reference;\n\n    function isEnabled() {\n      return !!instance.props.inlinePositioning;\n    }\n\n    var placement;\n    var cursorRectIndex = -1;\n    var isInternalUpdate = false;\n    var triedPlacements = [];\n    var modifier = {\n      name: 'tippyInlinePositioning',\n      enabled: true,\n      phase: 'afterWrite',\n      fn: function fn(_ref2) {\n        var state = _ref2.state;\n\n        if (isEnabled()) {\n          if (triedPlacements.indexOf(state.placement) !== -1) {\n            triedPlacements = [];\n          }\n\n          if (placement !== state.placement && triedPlacements.indexOf(state.placement) === -1) {\n            triedPlacements.push(state.placement);\n            instance.setProps({\n              // @ts-ignore - unneeded DOMRect properties\n              getReferenceClientRect: function getReferenceClientRect() {\n                return _getReferenceClientRect(state.placement);\n              }\n            });\n          }\n\n          placement = state.placement;\n        }\n      }\n    };\n\n    function _getReferenceClientRect(placement) {\n      return getInlineBoundingClientRect(getBasePlacement(placement), reference.getBoundingClientRect(), arrayFrom(reference.getClientRects()), cursorRectIndex);\n    }\n\n    function setInternalProps(partialProps) {\n      isInternalUpdate = true;\n      instance.setProps(partialProps);\n      isInternalUpdate = false;\n    }\n\n    function addModifier() {\n      if (!isInternalUpdate) {\n        setInternalProps(getProps(instance.props, modifier));\n      }\n    }\n\n    return {\n      onCreate: addModifier,\n      onAfterUpdate: addModifier,\n      onTrigger: function onTrigger(_, event) {\n        if (isMouseEvent(event)) {\n          var rects = arrayFrom(instance.reference.getClientRects());\n          var cursorRect = rects.find(function (rect) {\n            return rect.left - 2 <= event.clientX && rect.right + 2 >= event.clientX && rect.top - 2 <= event.clientY && rect.bottom + 2 >= event.clientY;\n          });\n          var index = rects.indexOf(cursorRect);\n          cursorRectIndex = index > -1 ? index : cursorRectIndex;\n        }\n      },\n      onHidden: function onHidden() {\n        cursorRectIndex = -1;\n      }\n    };\n  }\n};\nfunction getInlineBoundingClientRect(currentBasePlacement, boundingRect, clientRects, cursorRectIndex) {\n  // Not an inline element, or placement is not yet known\n  if (clientRects.length < 2 || currentBasePlacement === null) {\n    return boundingRect;\n  } // There are two rects and they are disjoined\n\n\n  if (clientRects.length === 2 && cursorRectIndex >= 0 && clientRects[0].left > clientRects[1].right) {\n    return clientRects[cursorRectIndex] || boundingRect;\n  }\n\n  switch (currentBasePlacement) {\n    case 'top':\n    case 'bottom':\n      {\n        var firstRect = clientRects[0];\n        var lastRect = clientRects[clientRects.length - 1];\n        var isTop = currentBasePlacement === 'top';\n        var top = firstRect.top;\n        var bottom = lastRect.bottom;\n        var left = isTop ? firstRect.left : lastRect.left;\n        var right = isTop ? firstRect.right : lastRect.right;\n        var width = right - left;\n        var height = bottom - top;\n        return {\n          top: top,\n          bottom: bottom,\n          left: left,\n          right: right,\n          width: width,\n          height: height\n        };\n      }\n\n    case 'left':\n    case 'right':\n      {\n        var minLeft = Math.min.apply(Math, clientRects.map(function (rects) {\n          return rects.left;\n        }));\n        var maxRight = Math.max.apply(Math, clientRects.map(function (rects) {\n          return rects.right;\n        }));\n        var measureRects = clientRects.filter(function (rect) {\n          return currentBasePlacement === 'left' ? rect.left === minLeft : rect.right === maxRight;\n        });\n        var _top = measureRects[0].top;\n        var _bottom = measureRects[measureRects.length - 1].bottom;\n        var _left = minLeft;\n        var _right = maxRight;\n\n        var _width = _right - _left;\n\n        var _height = _bottom - _top;\n\n        return {\n          top: _top,\n          bottom: _bottom,\n          left: _left,\n          right: _right,\n          width: _width,\n          height: _height\n        };\n      }\n\n    default:\n      {\n        return boundingRect;\n      }\n  }\n}\n\nvar sticky = {\n  name: 'sticky',\n  defaultValue: false,\n  fn: function fn(instance) {\n    var reference = instance.reference,\n        popper = instance.popper;\n\n    function getReference() {\n      return instance.popperInstance ? instance.popperInstance.state.elements.reference : reference;\n    }\n\n    function shouldCheck(value) {\n      return instance.props.sticky === true || instance.props.sticky === value;\n    }\n\n    var prevRefRect = null;\n    var prevPopRect = null;\n\n    function updatePosition() {\n      var currentRefRect = shouldCheck('reference') ? getReference().getBoundingClientRect() : null;\n      var currentPopRect = shouldCheck('popper') ? popper.getBoundingClientRect() : null;\n\n      if (currentRefRect && areRectsDifferent(prevRefRect, currentRefRect) || currentPopRect && areRectsDifferent(prevPopRect, currentPopRect)) {\n        if (instance.popperInstance) {\n          instance.popperInstance.update();\n        }\n      }\n\n      prevRefRect = currentRefRect;\n      prevPopRect = currentPopRect;\n\n      if (instance.state.isMounted) {\n        requestAnimationFrame(updatePosition);\n      }\n    }\n\n    return {\n      onMount: function onMount() {\n        if (instance.props.sticky) {\n          updatePosition();\n        }\n      }\n    };\n  }\n};\n\nfunction areRectsDifferent(rectA, rectB) {\n  if (rectA && rectB) {\n    return rectA.top !== rectB.top || rectA.right !== rectB.right || rectA.bottom !== rectB.bottom || rectA.left !== rectB.left;\n  }\n\n  return true;\n}\n\ntippy.setDefaultProps({\n  render: render\n});\n\nexport default tippy;\nexport { animateFill, createSingleton, delegate, followCursor, hideAll, inlinePositioning, ROUND_ARROW as roundArrow, sticky };\n//# sourceMappingURL=tippy.esm.js.map\n","/**\n * @license React\n * react-dom.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction noop() {}\nvar Internals = {\n    d: {\n      f: noop,\n      r: function () {\n        throw Error(formatProdErrorMessage(522));\n      },\n      D: noop,\n      C: noop,\n      L: noop,\n      m: noop,\n      X: noop,\n      S: noop,\n      M: noop\n    },\n    p: 0,\n    findDOMNode: null\n  },\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_RECOVERABLE_TYPE = Symbol.for(\"react.recoverable\"),\n  REACT_OPTIMISTIC_KEY = Symbol.for(\"react.optimistic_key\");\nfunction createPortal$1(children, containerInfo, implementation) {\n  var key =\n    3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n  return {\n    $$typeof: REACT_PORTAL_TYPE,\n    key:\n      null == key\n        ? null\n        : key === REACT_OPTIMISTIC_KEY\n          ? REACT_OPTIMISTIC_KEY\n          : \"\" + key,\n    children: children,\n    containerInfo: containerInfo,\n    implementation: implementation\n  };\n}\nvar ReactSharedInternals =\n  React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nfunction getCrossOriginStringAs(as, input) {\n  if (\"font\" === as) return \"\";\n  if (\"string\" === typeof input)\n    return \"use-credentials\" === input ? input : \"\";\n}\nexports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  Internals;\nexports.browser = function (reason) {\n  return { $$typeof: REACT_RECOVERABLE_TYPE, _reason: reason };\n};\nexports.createPortal = function (children, container) {\n  var key =\n    2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n  if (\n    !container ||\n    (1 !== container.nodeType &&\n      9 !== container.nodeType &&\n      11 !== container.nodeType)\n  )\n    throw Error(formatProdErrorMessage(299));\n  return createPortal$1(children, container, null, key);\n};\nexports.flushSync = function (fn) {\n  var previousTransition = ReactSharedInternals.T,\n    previousUpdatePriority = Internals.p;\n  try {\n    if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn();\n  } finally {\n    (ReactSharedInternals.T = previousTransition),\n      (Internals.p = previousUpdatePriority),\n      Internals.d.f();\n  }\n};\nexports.preconnect = function (href, options) {\n  \"string\" === typeof href &&\n    (options\n      ? ((options = options.crossOrigin),\n        (options =\n          \"string\" === typeof options\n            ? \"use-credentials\" === options\n              ? options\n              : \"\"\n            : void 0))\n      : (options = null),\n    Internals.d.C(href, options));\n};\nexports.prefetchDNS = function (href) {\n  \"string\" === typeof href && Internals.d.D(href);\n};\nexports.preinit = function (href, options) {\n  if (\"string\" === typeof href && options && \"string\" === typeof options.as) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n      integrity =\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      fetchPriority =\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0;\n    \"style\" === as\n      ? Internals.d.S(\n          href,\n          \"string\" === typeof options.precedence ? options.precedence : void 0,\n          {\n            crossOrigin: crossOrigin,\n            integrity: integrity,\n            fetchPriority: fetchPriority\n          }\n        )\n      : \"script\" === as &&\n        Internals.d.X(href, {\n          crossOrigin: crossOrigin,\n          integrity: integrity,\n          fetchPriority: fetchPriority,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n        });\n  }\n};\nexports.preinitModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (\"object\" === typeof options && null !== options) {\n      if (null == options.as || \"script\" === options.as) {\n        var crossOrigin = getCrossOriginStringAs(\n          options.as,\n          options.crossOrigin\n        );\n        Internals.d.M(href, {\n          crossOrigin: crossOrigin,\n          integrity:\n            \"string\" === typeof options.integrity ? options.integrity : void 0,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n          fetchPriority:\n            \"string\" === typeof options.fetchPriority\n              ? options.fetchPriority\n              : void 0\n        });\n      }\n    } else null == options && Internals.d.M(href);\n};\nexports.preload = function (href, options) {\n  if (\n    \"string\" === typeof href &&\n    \"object\" === typeof options &&\n    null !== options &&\n    \"string\" === typeof options.as\n  ) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n    Internals.d.L(href, as, {\n      crossOrigin: crossOrigin,\n      integrity:\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n      type: \"string\" === typeof options.type ? options.type : void 0,\n      fetchPriority:\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0,\n      referrerPolicy:\n        \"string\" === typeof options.referrerPolicy\n          ? options.referrerPolicy\n          : void 0,\n      imageSrcSet:\n        \"string\" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,\n      imageSizes:\n        \"string\" === typeof options.imageSizes ? options.imageSizes : void 0,\n      media: \"string\" === typeof options.media ? options.media : void 0\n    });\n  }\n};\nexports.preloadModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (options) {\n      var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n      Internals.d.m(href, {\n        as:\n          \"string\" === typeof options.as && \"script\" !== options.as\n            ? options.as\n            : void 0,\n        crossOrigin: crossOrigin,\n        integrity:\n          \"string\" === typeof options.integrity ? options.integrity : void 0,\n        nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n        fetchPriority:\n          \"string\" === typeof options.fetchPriority\n            ? options.fetchPriority\n            : void 0\n      });\n    } else Internals.d.m(href);\n};\nexports.requestFormReset = function (form) {\n  Internals.d.r(form);\n};\nexports.unstable_batchedUpdates = function (fn, a) {\n  return fn(a);\n};\nexports.useFormState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useFormState(action, initialState, permalink);\n};\nexports.useFormStatus = function () {\n  return ReactSharedInternals.H.useHostTransitionStatus();\n};\nexports.version = \"19.3.1\";\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom.production.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n","import tippy, { createSingleton } from 'tippy.js';\nexport { default as tippy } from 'tippy.js';\nimport React, { useLayoutEffect, useEffect, useRef, useState, cloneElement, useMemo, forwardRef as forwardRef$1 } from 'react';\nimport { createPortal } from 'react-dom';\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\nfunction preserveRef(ref, node) {\n  if (ref) {\n    if (typeof ref === 'function') {\n      ref(node);\n    }\n\n    if ({}.hasOwnProperty.call(ref, 'current')) {\n      ref.current = node;\n    }\n  }\n}\nfunction ssrSafeCreateDiv() {\n  return isBrowser && document.createElement('div');\n}\nfunction toDataAttributes(attrs) {\n  var dataAttrs = {\n    'data-placement': attrs.placement\n  };\n\n  if (attrs.referenceHidden) {\n    dataAttrs['data-reference-hidden'] = '';\n  }\n\n  if (attrs.escaped) {\n    dataAttrs['data-escaped'] = '';\n  }\n\n  return dataAttrs;\n}\n\nfunction deepEqual(x, y) {\n  if (x === y) {\n    return true;\n  } else if (typeof x === 'object' && x != null && typeof y === 'object' && y != null) {\n    if (Object.keys(x).length !== Object.keys(y).length) {\n      return false;\n    }\n\n    for (var prop in x) {\n      if (y.hasOwnProperty(prop)) {\n        if (!deepEqual(x[prop], y[prop])) {\n          return false;\n        }\n      } else {\n        return false;\n      }\n    }\n\n    return true;\n  } else {\n    return false;\n  }\n}\n\nfunction uniqueByShape(arr) {\n  var output = [];\n  arr.forEach(function (item) {\n    if (!output.find(function (outputItem) {\n      return deepEqual(item, outputItem);\n    })) {\n      output.push(item);\n    }\n  });\n  return output;\n}\nfunction deepPreserveProps(instanceProps, componentProps) {\n  var _instanceProps$popper, _componentProps$poppe;\n\n  return Object.assign({}, componentProps, {\n    popperOptions: Object.assign({}, instanceProps.popperOptions, componentProps.popperOptions, {\n      modifiers: uniqueByShape([].concat(((_instanceProps$popper = instanceProps.popperOptions) == null ? void 0 : _instanceProps$popper.modifiers) || [], ((_componentProps$poppe = componentProps.popperOptions) == null ? void 0 : _componentProps$poppe.modifiers) || []))\n    })\n  });\n}\n\nvar useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;\nfunction useMutableBox(initialValue) {\n  // Using refs instead of state as it's recommended to not store imperative\n  // values in state due to memory problems in React(?)\n  var ref = useRef();\n\n  if (!ref.current) {\n    ref.current = typeof initialValue === 'function' ? initialValue() : initialValue;\n  }\n\n  return ref.current;\n}\n\nfunction updateClassName(box, action, classNames) {\n  classNames.split(/\\s+/).forEach(function (name) {\n    if (name) {\n      box.classList[action](name);\n    }\n  });\n}\n\nvar classNamePlugin = {\n  name: 'className',\n  defaultValue: '',\n  fn: function fn(instance) {\n    var box = instance.popper.firstElementChild;\n\n    var isDefaultRenderFn = function isDefaultRenderFn() {\n      var _instance$props$rende;\n\n      return !!((_instance$props$rende = instance.props.render) == null ? void 0 : _instance$props$rende.$$tippy);\n    };\n\n    function add() {\n      if (instance.props.className && !isDefaultRenderFn()) {\n        if (process.env.NODE_ENV !== 'production') {\n          console.warn(['@tippyjs/react: Cannot use `className` prop in conjunction with', '`render` prop. Place the className on the element you are', 'rendering.'].join(' '));\n        }\n\n        return;\n      }\n\n      updateClassName(box, 'add', instance.props.className);\n    }\n\n    function remove() {\n      if (isDefaultRenderFn()) {\n        updateClassName(box, 'remove', instance.props.className);\n      }\n    }\n\n    return {\n      onCreate: add,\n      onBeforeUpdate: remove,\n      onAfterUpdate: add\n    };\n  }\n};\n\nfunction TippyGenerator(tippy) {\n  function Tippy(_ref) {\n    var children = _ref.children,\n        content = _ref.content,\n        visible = _ref.visible,\n        singleton = _ref.singleton,\n        render = _ref.render,\n        reference = _ref.reference,\n        _ref$disabled = _ref.disabled,\n        disabled = _ref$disabled === void 0 ? false : _ref$disabled,\n        _ref$ignoreAttributes = _ref.ignoreAttributes,\n        ignoreAttributes = _ref$ignoreAttributes === void 0 ? true : _ref$ignoreAttributes,\n        __source = _ref.__source,\n        __self = _ref.__self,\n        restOfNativeProps = _objectWithoutPropertiesLoose(_ref, [\"children\", \"content\", \"visible\", \"singleton\", \"render\", \"reference\", \"disabled\", \"ignoreAttributes\", \"__source\", \"__self\"]);\n\n    var isControlledMode = visible !== undefined;\n    var isSingletonMode = singleton !== undefined;\n\n    var _useState = useState(false),\n        mounted = _useState[0],\n        setMounted = _useState[1];\n\n    var _useState2 = useState({}),\n        attrs = _useState2[0],\n        setAttrs = _useState2[1];\n\n    var _useState3 = useState(),\n        singletonContent = _useState3[0],\n        setSingletonContent = _useState3[1];\n\n    var mutableBox = useMutableBox(function () {\n      return {\n        container: ssrSafeCreateDiv(),\n        renders: 1\n      };\n    });\n    var props = Object.assign({\n      ignoreAttributes: ignoreAttributes\n    }, restOfNativeProps, {\n      content: mutableBox.container\n    });\n\n    if (isControlledMode) {\n      if (process.env.NODE_ENV !== 'production') {\n        ['trigger', 'hideOnClick', 'showOnCreate'].forEach(function (nativeStateProp) {\n          if (props[nativeStateProp] !== undefined) {\n            console.warn([\"@tippyjs/react: Cannot specify `\" + nativeStateProp + \"` prop in\", \"controlled mode (`visible` prop)\"].join(' '));\n          }\n        });\n      }\n\n      props.trigger = 'manual';\n      props.hideOnClick = false;\n    }\n\n    if (isSingletonMode) {\n      disabled = true;\n    }\n\n    var computedProps = props;\n    var plugins = props.plugins || [];\n\n    if (render) {\n      computedProps = Object.assign({}, props, {\n        plugins: isSingletonMode && singleton.data != null ? [].concat(plugins, [{\n          fn: function fn() {\n            return {\n              onTrigger: function onTrigger(instance, event) {\n                var node = singleton.data.children.find(function (_ref2) {\n                  var instance = _ref2.instance;\n                  return instance.reference === event.currentTarget;\n                });\n                instance.state.$$activeSingletonInstance = node.instance;\n                setSingletonContent(node.content);\n              }\n            };\n          }\n        }]) : plugins,\n        render: function render() {\n          return {\n            popper: mutableBox.container\n          };\n        }\n      });\n    }\n\n    var deps = [reference].concat(children ? [children.type] : []); // CREATE\n\n    useIsomorphicLayoutEffect(function () {\n      var element = reference;\n\n      if (reference && reference.hasOwnProperty('current')) {\n        element = reference.current;\n      }\n\n      var instance = tippy(element || mutableBox.ref || ssrSafeCreateDiv(), Object.assign({}, computedProps, {\n        plugins: [classNamePlugin].concat(props.plugins || [])\n      }));\n      mutableBox.instance = instance;\n\n      if (disabled) {\n        instance.disable();\n      }\n\n      if (visible) {\n        instance.show();\n      }\n\n      if (isSingletonMode) {\n        singleton.hook({\n          instance: instance,\n          content: content,\n          props: computedProps,\n          setSingletonContent: setSingletonContent\n        });\n      }\n\n      setMounted(true);\n      return function () {\n        instance.destroy();\n        singleton == null ? void 0 : singleton.cleanup(instance);\n      };\n    }, deps); // UPDATE\n\n    useIsomorphicLayoutEffect(function () {\n      var _instance$popperInsta;\n\n      // Prevent this effect from running on 1st render\n      if (mutableBox.renders === 1) {\n        mutableBox.renders++;\n        return;\n      }\n\n      var instance = mutableBox.instance;\n      instance.setProps(deepPreserveProps(instance.props, computedProps)); // Fixes #264\n\n      (_instance$popperInsta = instance.popperInstance) == null ? void 0 : _instance$popperInsta.forceUpdate();\n\n      if (disabled) {\n        instance.disable();\n      } else {\n        instance.enable();\n      }\n\n      if (isControlledMode) {\n        if (visible) {\n          instance.show();\n        } else {\n          instance.hide();\n        }\n      }\n\n      if (isSingletonMode) {\n        singleton.hook({\n          instance: instance,\n          content: content,\n          props: computedProps,\n          setSingletonContent: setSingletonContent\n        });\n      }\n    });\n    useIsomorphicLayoutEffect(function () {\n      var _instance$props$poppe;\n\n      if (!render) {\n        return;\n      }\n\n      var instance = mutableBox.instance;\n      instance.setProps({\n        popperOptions: Object.assign({}, instance.props.popperOptions, {\n          modifiers: [].concat((((_instance$props$poppe = instance.props.popperOptions) == null ? void 0 : _instance$props$poppe.modifiers) || []).filter(function (_ref3) {\n            var name = _ref3.name;\n            return name !== '$$tippyReact';\n          }), [{\n            name: '$$tippyReact',\n            enabled: true,\n            phase: 'beforeWrite',\n            requires: ['computeStyles'],\n            fn: function fn(_ref4) {\n              var _state$modifiersData;\n\n              var state = _ref4.state;\n              var hideData = (_state$modifiersData = state.modifiersData) == null ? void 0 : _state$modifiersData.hide; // WARNING: this is a high-risk path that can cause an infinite\n              // loop. This expression _must_ evaluate to false when required\n\n              if (attrs.placement !== state.placement || attrs.referenceHidden !== (hideData == null ? void 0 : hideData.isReferenceHidden) || attrs.escaped !== (hideData == null ? void 0 : hideData.hasPopperEscaped)) {\n                setAttrs({\n                  placement: state.placement,\n                  referenceHidden: hideData == null ? void 0 : hideData.isReferenceHidden,\n                  escaped: hideData == null ? void 0 : hideData.hasPopperEscaped\n                });\n              }\n\n              state.attributes.popper = {};\n            }\n          }])\n        })\n      });\n    }, [attrs.placement, attrs.referenceHidden, attrs.escaped].concat(deps));\n    return /*#__PURE__*/React.createElement(React.Fragment, null, children ? /*#__PURE__*/cloneElement(children, {\n      ref: function ref(node) {\n        mutableBox.ref = node;\n        preserveRef(children.ref, node);\n      }\n    }) : null, mounted && /*#__PURE__*/createPortal(render ? render(toDataAttributes(attrs), singletonContent, mutableBox.instance) : content, mutableBox.container));\n  }\n\n  return Tippy;\n}\n\nfunction useSingletonGenerator(createSingleton) {\n  return function useSingleton(_temp) {\n    var _ref = _temp === void 0 ? {} : _temp,\n        _ref$disabled = _ref.disabled,\n        disabled = _ref$disabled === void 0 ? false : _ref$disabled,\n        _ref$overrides = _ref.overrides,\n        overrides = _ref$overrides === void 0 ? [] : _ref$overrides;\n\n    var _useState = useState(false),\n        mounted = _useState[0],\n        setMounted = _useState[1];\n\n    var mutableBox = useMutableBox({\n      children: [],\n      renders: 1\n    });\n    useIsomorphicLayoutEffect(function () {\n      if (!mounted) {\n        setMounted(true);\n        return;\n      }\n\n      var children = mutableBox.children,\n          sourceData = mutableBox.sourceData;\n\n      if (!sourceData) {\n        if (process.env.NODE_ENV !== 'production') {\n          console.error(['@tippyjs/react: The `source` variable from `useSingleton()` has', 'not been passed to a <Tippy /> component.'].join(' '));\n        }\n\n        return;\n      }\n\n      var instance = createSingleton(children.map(function (child) {\n        return child.instance;\n      }), Object.assign({}, sourceData.props, {\n        popperOptions: sourceData.instance.props.popperOptions,\n        overrides: overrides,\n        plugins: [classNamePlugin].concat(sourceData.props.plugins || [])\n      }));\n      mutableBox.instance = instance;\n\n      if (disabled) {\n        instance.disable();\n      }\n\n      return function () {\n        instance.destroy();\n        mutableBox.children = children.filter(function (_ref2) {\n          var instance = _ref2.instance;\n          return !instance.state.isDestroyed;\n        });\n      };\n    }, [mounted]);\n    useIsomorphicLayoutEffect(function () {\n      if (!mounted) {\n        return;\n      }\n\n      if (mutableBox.renders === 1) {\n        mutableBox.renders++;\n        return;\n      }\n\n      var children = mutableBox.children,\n          instance = mutableBox.instance,\n          sourceData = mutableBox.sourceData;\n\n      if (!(instance && sourceData)) {\n        return;\n      }\n\n      var _sourceData$props = sourceData.props,\n          content = _sourceData$props.content,\n          props = _objectWithoutPropertiesLoose(_sourceData$props, [\"content\"]);\n\n      instance.setProps(deepPreserveProps(instance.props, Object.assign({}, props, {\n        overrides: overrides\n      })));\n      instance.setInstances(children.map(function (child) {\n        return child.instance;\n      }));\n\n      if (disabled) {\n        instance.disable();\n      } else {\n        instance.enable();\n      }\n    });\n    return useMemo(function () {\n      var source = {\n        data: mutableBox,\n        hook: function hook(data) {\n          mutableBox.sourceData = data;\n          mutableBox.setSingletonContent = data.setSingletonContent;\n        },\n        cleanup: function cleanup() {\n          mutableBox.sourceData = null;\n        }\n      };\n      var target = {\n        hook: function hook(data) {\n          var _mutableBox$instance, _mutableBox$instance2;\n\n          mutableBox.children = mutableBox.children.filter(function (_ref3) {\n            var instance = _ref3.instance;\n            return data.instance !== instance;\n          });\n          mutableBox.children.push(data);\n\n          if (((_mutableBox$instance = mutableBox.instance) == null ? void 0 : _mutableBox$instance.state.isMounted) && ((_mutableBox$instance2 = mutableBox.instance) == null ? void 0 : _mutableBox$instance2.state.$$activeSingletonInstance) === data.instance) {\n            mutableBox.setSingletonContent == null ? void 0 : mutableBox.setSingletonContent(data.content);\n          }\n\n          if (mutableBox.instance && !mutableBox.instance.state.isDestroyed) {\n            mutableBox.instance.setInstances(mutableBox.children.map(function (child) {\n              return child.instance;\n            }));\n          }\n        },\n        cleanup: function cleanup(instance) {\n          mutableBox.children = mutableBox.children.filter(function (data) {\n            return data.instance !== instance;\n          });\n\n          if (mutableBox.instance && !mutableBox.instance.state.isDestroyed) {\n            mutableBox.instance.setInstances(mutableBox.children.map(function (child) {\n              return child.instance;\n            }));\n          }\n        }\n      };\n      return [source, target];\n    }, []);\n  };\n}\n\nvar forwardRef = (function (Tippy, defaultProps) {\n  return /*#__PURE__*/forwardRef$1(function TippyWrapper(_ref, _ref2) {\n    var children = _ref.children,\n        props = _objectWithoutPropertiesLoose(_ref, [\"children\"]);\n\n    return (\n      /*#__PURE__*/\n      // If I spread them separately here, Babel adds the _extends ponyfill for\n      // some reason\n      React.createElement(Tippy, Object.assign({}, defaultProps, props), children ? /*#__PURE__*/cloneElement(children, {\n        ref: function ref(node) {\n          preserveRef(_ref2, node);\n          preserveRef(children.ref, node);\n        }\n      }) : null)\n    );\n  });\n});\n\nvar useSingleton = /*#__PURE__*/useSingletonGenerator(createSingleton);\nvar index = /*#__PURE__*/forwardRef( /*#__PURE__*/TippyGenerator(tippy));\n\nexport default index;\nexport { useSingleton };\n//# sourceMappingURL=tippy-react.esm.js.map\n","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n  var key = null;\n  void 0 !== maybeKey && (key = \"\" + maybeKey);\n  void 0 !== config.key && (key = \"\" + config.key);\n  if (\"key\" in config) {\n    maybeKey = {};\n    for (var propName in config)\n      \"key\" !== propName && (maybeKey[propName] = config[propName]);\n  } else maybeKey = config;\n  config = maybeKey.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== config ? config : null,\n    props: maybeKey\n  };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import * as React from \"react\"\nimport { default as OriginalTippy, TippyProps } from \"@tippyjs/react\"\n\ninterface CustomTippyProps extends TippyProps {\n    lazy?: boolean\n}\n\nexport const Tippy = (props: CustomTippyProps): React.ReactElement => {\n    const { lazy, ...tippyProps } = props\n\n    const TippyInstance = lazy ? LazyTippy : OriginalTippy\n    return <TippyInstance theme=\"light\" {...tippyProps} />\n}\n\n// A Tippy instance that only evaluates `content` when the tooltip is shown.\n// Taken from https://gist.github.com/atomiks/520f4b0c7b537202a23a3059d4eec908\n// This will hopefully become supported in Tippy itself someday: See https://github.com/atomiks/tippyjs-react/issues/209\nexport const LazyTippy = (props: TippyProps): React.ReactElement => {\n    const [mounted, setMounted] = React.useState(false)\n\n    const lazyPlugin = {\n        fn: (): { onMount: () => void; onHidden: () => void } => ({\n            onMount: (): void => setMounted(true),\n            onHidden: (): void => setMounted(false),\n        }),\n    }\n\n    const computedProps = { ...props }\n\n    computedProps.plugins = [lazyPlugin, ...(props.plugins || [])]\n\n    if (props.render) {\n        const render = props.render // let TypeScript safely derive that render is not undefined\n        computedProps.render = (...args): React.ReactNode =>\n            mounted ? render(...args) : \"\"\n    } else {\n        computedProps.content = mounted ? props.content : \"\"\n    }\n\n    return <Tippy {...computedProps} />\n}\n\ninterface TippyIfInteractiveProps extends CustomTippyProps {\n    isInteractive: boolean\n}\n\n// We sometimes need a conditional Tippy instance, i.e. a Tippy that is only hooked up to\n// interactive charts (and not in static SVG exports etc.). This is that: If `isInteractive=false`,\n// then it bypasses Tippy and just renders the children.\nexport const TippyIfInteractive = (\n    props: TippyIfInteractiveProps\n): React.ReactElement => {\n    const { isInteractive, ...tippyProps } = props\n\n    if (isInteractive) return <Tippy {...tippyProps} />\n    else return <>{props.children}</>\n}\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        result = wait - timeSinceLastCall;\n\n    return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = value.replace(reTrim, '');\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","import { useState, useCallback, useLayoutEffect, useEffect, useRef, useMemo } from 'react';\nimport debounce from 'lodash.debounce';\n\n// src/useBoolean/useBoolean.ts\nfunction useBoolean(defaultValue = false) {\n  if (typeof defaultValue !== \"boolean\") {\n    throw new Error(\"defaultValue must be `true` or `false`\");\n  }\n  const [value, setValue] = useState(defaultValue);\n  const setTrue = useCallback(() => {\n    setValue(true);\n  }, []);\n  const setFalse = useCallback(() => {\n    setValue(false);\n  }, []);\n  const toggle = useCallback(() => {\n    setValue((x) => !x);\n  }, []);\n  return { value, setValue, setTrue, setFalse, toggle };\n}\nvar useIsomorphicLayoutEffect = typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n\n// src/useEventListener/useEventListener.ts\nfunction useEventListener(eventName, handler, element, options) {\n  const savedHandler = useRef(handler);\n  useIsomorphicLayoutEffect(() => {\n    savedHandler.current = handler;\n  }, [handler]);\n  useEffect(() => {\n    const targetElement = (element == null ? void 0 : element.current) ?? window;\n    if (!(targetElement && targetElement.addEventListener))\n      return;\n    const listener = (event) => {\n      savedHandler.current(event);\n    };\n    targetElement.addEventListener(eventName, listener, options);\n    return () => {\n      targetElement.removeEventListener(eventName, listener, options);\n    };\n  }, [eventName, element, options]);\n}\n\n// src/useClickAnyWhere/useClickAnyWhere.ts\nfunction useClickAnyWhere(handler) {\n  useEventListener(\"click\", (event) => {\n    handler(event);\n  });\n}\nfunction useCopyToClipboard() {\n  const [copiedText, setCopiedText] = useState(null);\n  const copy = useCallback(async (text) => {\n    if (!(navigator == null ? void 0 : navigator.clipboard)) {\n      console.warn(\"Clipboard not supported\");\n      return false;\n    }\n    try {\n      await navigator.clipboard.writeText(text);\n      setCopiedText(text);\n      return true;\n    } catch (error) {\n      console.warn(\"Copy failed\", error);\n      setCopiedText(null);\n      return false;\n    }\n  }, []);\n  return [copiedText, copy];\n}\nfunction useCounter(initialValue) {\n  const [count, setCount] = useState(initialValue ?? 0);\n  const increment = useCallback(() => {\n    setCount((x) => x + 1);\n  }, []);\n  const decrement = useCallback(() => {\n    setCount((x) => x - 1);\n  }, []);\n  const reset = useCallback(() => {\n    setCount(initialValue ?? 0);\n  }, [initialValue]);\n  return {\n    count,\n    increment,\n    decrement,\n    reset,\n    setCount\n  };\n}\nfunction useInterval(callback, delay) {\n  const savedCallback = useRef(callback);\n  useIsomorphicLayoutEffect(() => {\n    savedCallback.current = callback;\n  }, [callback]);\n  useEffect(() => {\n    if (delay === null) {\n      return;\n    }\n    const id = setInterval(() => {\n      savedCallback.current();\n    }, delay);\n    return () => {\n      clearInterval(id);\n    };\n  }, [delay]);\n}\n\n// src/useCountdown/useCountdown.ts\nfunction useCountdown({\n  countStart,\n  countStop = 0,\n  intervalMs = 1e3,\n  isIncrement = false\n}) {\n  const {\n    count,\n    increment,\n    decrement,\n    reset: resetCounter\n  } = useCounter(countStart);\n  const {\n    value: isCountdownRunning,\n    setTrue: startCountdown,\n    setFalse: stopCountdown\n  } = useBoolean(false);\n  const resetCountdown = useCallback(() => {\n    stopCountdown();\n    resetCounter();\n  }, [stopCountdown, resetCounter]);\n  const countdownCallback = useCallback(() => {\n    if (count === countStop) {\n      stopCountdown();\n      return;\n    }\n    if (isIncrement) {\n      increment();\n    } else {\n      decrement();\n    }\n  }, [count, countStop, decrement, increment, isIncrement, stopCountdown]);\n  useInterval(countdownCallback, isCountdownRunning ? intervalMs : null);\n  return [count, { startCountdown, stopCountdown, resetCountdown }];\n}\nfunction useEventCallback(fn) {\n  const ref = useRef(() => {\n    throw new Error(\"Cannot call an event handler while rendering.\");\n  });\n  useIsomorphicLayoutEffect(() => {\n    ref.current = fn;\n  }, [fn]);\n  return useCallback((...args) => {\n    var _a;\n    return (_a = ref.current) == null ? void 0 : _a.call(ref, ...args);\n  }, [ref]);\n}\n\n// src/useLocalStorage/useLocalStorage.ts\nvar IS_SERVER = typeof window === \"undefined\";\nfunction useLocalStorage(key, initialValue, options = {}) {\n  const { initializeWithValue = true } = options;\n  const serializer = useCallback(\n    (value) => {\n      if (options.serializer) {\n        return options.serializer(value);\n      }\n      return JSON.stringify(value);\n    },\n    [options]\n  );\n  const deserializer = useCallback(\n    (value) => {\n      if (options.deserializer) {\n        return options.deserializer(value);\n      }\n      if (value === \"undefined\") {\n        return void 0;\n      }\n      const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n      let parsed;\n      try {\n        parsed = JSON.parse(value);\n      } catch (error) {\n        console.error(\"Error parsing JSON:\", error);\n        return defaultValue;\n      }\n      return parsed;\n    },\n    [options, initialValue]\n  );\n  const readValue = useCallback(() => {\n    const initialValueToUse = initialValue instanceof Function ? initialValue() : initialValue;\n    if (IS_SERVER) {\n      return initialValueToUse;\n    }\n    try {\n      const raw = window.localStorage.getItem(key);\n      return raw ? deserializer(raw) : initialValueToUse;\n    } catch (error) {\n      console.warn(`Error reading localStorage key \\u201C${key}\\u201D:`, error);\n      return initialValueToUse;\n    }\n  }, [initialValue, key, deserializer]);\n  const [storedValue, setStoredValue] = useState(() => {\n    if (initializeWithValue) {\n      return readValue();\n    }\n    return initialValue instanceof Function ? initialValue() : initialValue;\n  });\n  const setValue = useEventCallback((value) => {\n    if (IS_SERVER) {\n      console.warn(\n        `Tried setting localStorage key \\u201C${key}\\u201D even though environment is not a client`\n      );\n    }\n    try {\n      const newValue = value instanceof Function ? value(readValue()) : value;\n      window.localStorage.setItem(key, serializer(newValue));\n      setStoredValue(newValue);\n      window.dispatchEvent(new StorageEvent(\"local-storage\", { key }));\n    } catch (error) {\n      console.warn(`Error setting localStorage key \\u201C${key}\\u201D:`, error);\n    }\n  });\n  const removeValue = useEventCallback(() => {\n    if (IS_SERVER) {\n      console.warn(\n        `Tried removing localStorage key \\u201C${key}\\u201D even though environment is not a client`\n      );\n    }\n    const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n    window.localStorage.removeItem(key);\n    setStoredValue(defaultValue);\n    window.dispatchEvent(new StorageEvent(\"local-storage\", { key }));\n  });\n  useEffect(() => {\n    setStoredValue(readValue());\n  }, [key]);\n  const handleStorageChange = useCallback(\n    (event) => {\n      if (event.key && event.key !== key) {\n        return;\n      }\n      setStoredValue(readValue());\n    },\n    [key, readValue]\n  );\n  useEventListener(\"storage\", handleStorageChange);\n  useEventListener(\"local-storage\", handleStorageChange);\n  return [storedValue, setValue, removeValue];\n}\nvar IS_SERVER2 = typeof window === \"undefined\";\nfunction useMediaQuery(query, {\n  defaultValue = false,\n  initializeWithValue = true\n} = {}) {\n  const getMatches = (query2) => {\n    if (IS_SERVER2) {\n      return defaultValue;\n    }\n    return window.matchMedia(query2).matches;\n  };\n  const [matches, setMatches] = useState(() => {\n    if (initializeWithValue) {\n      return getMatches(query);\n    }\n    return defaultValue;\n  });\n  function handleChange() {\n    setMatches(getMatches(query));\n  }\n  useIsomorphicLayoutEffect(() => {\n    const matchMedia = window.matchMedia(query);\n    handleChange();\n    if (matchMedia.addListener) {\n      matchMedia.addListener(handleChange);\n    } else {\n      matchMedia.addEventListener(\"change\", handleChange);\n    }\n    return () => {\n      if (matchMedia.removeListener) {\n        matchMedia.removeListener(handleChange);\n      } else {\n        matchMedia.removeEventListener(\"change\", handleChange);\n      }\n    };\n  }, [query]);\n  return matches;\n}\n\n// src/useDarkMode/useDarkMode.ts\nvar COLOR_SCHEME_QUERY = \"(prefers-color-scheme: dark)\";\nvar LOCAL_STORAGE_KEY = \"usehooks-ts-dark-mode\";\nfunction useDarkMode(options = {}) {\n  const {\n    defaultValue,\n    localStorageKey = LOCAL_STORAGE_KEY,\n    initializeWithValue = true\n  } = options;\n  const isDarkOS = useMediaQuery(COLOR_SCHEME_QUERY, {\n    initializeWithValue,\n    defaultValue\n  });\n  const [isDarkMode, setDarkMode] = useLocalStorage(\n    localStorageKey,\n    defaultValue ?? isDarkOS ?? false,\n    { initializeWithValue }\n  );\n  useIsomorphicLayoutEffect(() => {\n    if (isDarkOS !== isDarkMode) {\n      setDarkMode(isDarkOS);\n    }\n  }, [isDarkOS]);\n  return {\n    isDarkMode,\n    toggle: () => {\n      setDarkMode((prev) => !prev);\n    },\n    enable: () => {\n      setDarkMode(true);\n    },\n    disable: () => {\n      setDarkMode(false);\n    },\n    set: (value) => {\n      setDarkMode(value);\n    }\n  };\n}\nfunction useUnmount(func) {\n  const funcRef = useRef(func);\n  funcRef.current = func;\n  useEffect(\n    () => () => {\n      funcRef.current();\n    },\n    []\n  );\n}\n\n// src/useDebounceCallback/useDebounceCallback.ts\nfunction useDebounceCallback(func, delay = 500, options) {\n  const debouncedFunc = useRef();\n  useUnmount(() => {\n    if (debouncedFunc.current) {\n      debouncedFunc.current.cancel();\n    }\n  });\n  const debounced = useMemo(() => {\n    const debouncedFuncInstance = debounce(func, delay, options);\n    const wrappedFunc = (...args) => {\n      return debouncedFuncInstance(...args);\n    };\n    wrappedFunc.cancel = () => {\n      debouncedFuncInstance.cancel();\n    };\n    wrappedFunc.isPending = () => {\n      return !!debouncedFunc.current;\n    };\n    wrappedFunc.flush = () => {\n      return debouncedFuncInstance.flush();\n    };\n    return wrappedFunc;\n  }, [func, delay, options]);\n  useEffect(() => {\n    debouncedFunc.current = debounce(func, delay, options);\n  }, [func, delay, options]);\n  return debounced;\n}\nfunction useDebounceValue(initialValue, delay, options) {\n  const eq = (options == null ? void 0 : options.equalityFn) ?? ((left, right) => left === right);\n  const unwrappedInitialValue = initialValue instanceof Function ? initialValue() : initialValue;\n  const [debouncedValue, setDebouncedValue] = useState(unwrappedInitialValue);\n  const previousValueRef = useRef(unwrappedInitialValue);\n  const updateDebouncedValue = useDebounceCallback(\n    setDebouncedValue,\n    delay,\n    options\n  );\n  if (!eq(previousValueRef.current, unwrappedInitialValue)) {\n    updateDebouncedValue(unwrappedInitialValue);\n    previousValueRef.current = unwrappedInitialValue;\n  }\n  return [debouncedValue, updateDebouncedValue];\n}\nfunction useDocumentTitle(title, options = {}) {\n  const { preserveTitleOnUnmount = true } = options;\n  const defaultTitle = useRef(null);\n  useIsomorphicLayoutEffect(() => {\n    defaultTitle.current = window.document.title;\n  }, []);\n  useIsomorphicLayoutEffect(() => {\n    window.document.title = title;\n  }, [title]);\n  useUnmount(() => {\n    if (!preserveTitleOnUnmount && defaultTitle.current) {\n      window.document.title = defaultTitle.current;\n    }\n  });\n}\nfunction useHover(elementRef) {\n  const [value, setValue] = useState(false);\n  const handleMouseEnter = () => {\n    setValue(true);\n  };\n  const handleMouseLeave = () => {\n    setValue(false);\n  };\n  useEventListener(\"mouseenter\", handleMouseEnter, elementRef);\n  useEventListener(\"mouseleave\", handleMouseLeave, elementRef);\n  return value;\n}\nfunction useIntersectionObserver({\n  threshold = 0,\n  root = null,\n  rootMargin = \"0%\",\n  freezeOnceVisible = false,\n  initialIsIntersecting = false,\n  onChange\n} = {}) {\n  var _a;\n  const [ref, setRef] = useState(null);\n  const [state, setState] = useState(() => ({\n    isIntersecting: initialIsIntersecting,\n    entry: void 0\n  }));\n  const callbackRef = useRef();\n  callbackRef.current = onChange;\n  const frozen = ((_a = state.entry) == null ? void 0 : _a.isIntersecting) && freezeOnceVisible;\n  useEffect(() => {\n    if (!ref)\n      return;\n    if (!(\"IntersectionObserver\" in window))\n      return;\n    if (frozen)\n      return;\n    let unobserve;\n    const observer = new IntersectionObserver(\n      (entries) => {\n        const thresholds = Array.isArray(observer.thresholds) ? observer.thresholds : [observer.thresholds];\n        entries.forEach((entry) => {\n          const isIntersecting = entry.isIntersecting && thresholds.some((threshold2) => entry.intersectionRatio >= threshold2);\n          setState({ isIntersecting, entry });\n          if (callbackRef.current) {\n            callbackRef.current(isIntersecting, entry);\n          }\n          if (isIntersecting && freezeOnceVisible && unobserve) {\n            unobserve();\n            unobserve = void 0;\n          }\n        });\n      },\n      { threshold, root, rootMargin }\n    );\n    observer.observe(ref);\n    return () => {\n      observer.disconnect();\n    };\n  }, [\n    ref,\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    JSON.stringify(threshold),\n    root,\n    rootMargin,\n    frozen,\n    freezeOnceVisible\n  ]);\n  const prevRef = useRef(null);\n  useEffect(() => {\n    var _a2;\n    if (!ref && ((_a2 = state.entry) == null ? void 0 : _a2.target) && !freezeOnceVisible && !frozen && prevRef.current !== state.entry.target) {\n      prevRef.current = state.entry.target;\n      setState({ isIntersecting: initialIsIntersecting, entry: void 0 });\n    }\n  }, [ref, state.entry, freezeOnceVisible, frozen, initialIsIntersecting]);\n  const result = [\n    setRef,\n    !!state.isIntersecting,\n    state.entry\n  ];\n  result.ref = result[0];\n  result.isIntersecting = result[1];\n  result.entry = result[2];\n  return result;\n}\nfunction useIsClient() {\n  const [isClient, setClient] = useState(false);\n  useEffect(() => {\n    setClient(true);\n  }, []);\n  return isClient;\n}\nfunction useIsMounted() {\n  const isMounted = useRef(false);\n  useEffect(() => {\n    isMounted.current = true;\n    return () => {\n      isMounted.current = false;\n    };\n  }, []);\n  return useCallback(() => isMounted.current, []);\n}\nfunction useMap(initialState = /* @__PURE__ */ new Map()) {\n  const [map, setMap] = useState(new Map(initialState));\n  const actions = {\n    set: useCallback((key, value) => {\n      setMap((prev) => {\n        const copy = new Map(prev);\n        copy.set(key, value);\n        return copy;\n      });\n    }, []),\n    setAll: useCallback((entries) => {\n      setMap(() => new Map(entries));\n    }, []),\n    remove: useCallback((key) => {\n      setMap((prev) => {\n        const copy = new Map(prev);\n        copy.delete(key);\n        return copy;\n      });\n    }, []),\n    reset: useCallback(() => {\n      setMap(() => /* @__PURE__ */ new Map());\n    }, [])\n  };\n  return [map, actions];\n}\n\n// src/useOnClickOutside/useOnClickOutside.ts\nfunction useOnClickOutside(ref, handler, eventType = \"mousedown\", eventListenerOptions = {}) {\n  useEventListener(\n    eventType,\n    (event) => {\n      const target = event.target;\n      if (!target || !target.isConnected) {\n        return;\n      }\n      const isOutside = Array.isArray(ref) ? ref.filter((r) => Boolean(r.current)).every((r) => r.current && !r.current.contains(target)) : ref.current && !ref.current.contains(target);\n      if (isOutside) {\n        handler(event);\n      }\n    },\n    void 0,\n    eventListenerOptions\n  );\n}\nvar IS_SERVER3 = typeof window === \"undefined\";\nfunction useReadLocalStorage(key, options = {}) {\n  let { initializeWithValue = true } = options;\n  if (IS_SERVER3) {\n    initializeWithValue = false;\n  }\n  const deserializer = useCallback(\n    (value) => {\n      if (options.deserializer) {\n        return options.deserializer(value);\n      }\n      if (value === \"undefined\") {\n        return void 0;\n      }\n      let parsed;\n      try {\n        parsed = JSON.parse(value);\n      } catch (error) {\n        console.error(\"Error parsing JSON:\", error);\n        return null;\n      }\n      return parsed;\n    },\n    [options]\n  );\n  const readValue = useCallback(() => {\n    if (IS_SERVER3) {\n      return null;\n    }\n    try {\n      const raw = window.localStorage.getItem(key);\n      return raw ? deserializer(raw) : null;\n    } catch (error) {\n      console.warn(`Error reading localStorage key \\u201C${key}\\u201D:`, error);\n      return null;\n    }\n  }, [key, deserializer]);\n  const [storedValue, setStoredValue] = useState(() => {\n    if (initializeWithValue) {\n      return readValue();\n    }\n    return void 0;\n  });\n  useEffect(() => {\n    setStoredValue(readValue());\n  }, [key]);\n  const handleStorageChange = useCallback(\n    (event) => {\n      if (event.key && event.key !== key) {\n        return;\n      }\n      setStoredValue(readValue());\n    },\n    [key, readValue]\n  );\n  useEventListener(\"storage\", handleStorageChange);\n  useEventListener(\"local-storage\", handleStorageChange);\n  return storedValue;\n}\nvar initialSize = {\n  width: void 0,\n  height: void 0\n};\nfunction useResizeObserver(options) {\n  const { ref, box = \"content-box\" } = options;\n  const [{ width, height }, setSize] = useState(initialSize);\n  const isMounted = useIsMounted();\n  const previousSize = useRef({ ...initialSize });\n  const onResize = useRef(void 0);\n  onResize.current = options.onResize;\n  useEffect(() => {\n    if (!ref.current)\n      return;\n    if (typeof window === \"undefined\" || !(\"ResizeObserver\" in window))\n      return;\n    const observer = new ResizeObserver(([entry]) => {\n      const boxProp = box === \"border-box\" ? \"borderBoxSize\" : box === \"device-pixel-content-box\" ? \"devicePixelContentBoxSize\" : \"contentBoxSize\";\n      const newWidth = extractSize(entry, boxProp, \"inlineSize\");\n      const newHeight = extractSize(entry, boxProp, \"blockSize\");\n      const hasChanged = previousSize.current.width !== newWidth || previousSize.current.height !== newHeight;\n      if (hasChanged) {\n        const newSize = { width: newWidth, height: newHeight };\n        previousSize.current.width = newWidth;\n        previousSize.current.height = newHeight;\n        if (onResize.current) {\n          onResize.current(newSize);\n        } else {\n          if (isMounted()) {\n            setSize(newSize);\n          }\n        }\n      }\n    });\n    observer.observe(ref.current, { box });\n    return () => {\n      observer.disconnect();\n    };\n  }, [box, ref, isMounted]);\n  return { width, height };\n}\nfunction extractSize(entry, box, sizeType) {\n  if (!entry[box]) {\n    if (box === \"contentBoxSize\") {\n      return entry.contentRect[sizeType === \"inlineSize\" ? \"width\" : \"height\"];\n    }\n    return void 0;\n  }\n  return Array.isArray(entry[box]) ? entry[box][0][sizeType] : (\n    // @ts-ignore Support Firefox's non-standard behavior\n    entry[box][sizeType]\n  );\n}\nvar IS_SERVER4 = typeof window === \"undefined\";\nfunction useScreen(options = {}) {\n  let { initializeWithValue = true } = options;\n  if (IS_SERVER4) {\n    initializeWithValue = false;\n  }\n  const readScreen = () => {\n    if (IS_SERVER4) {\n      return void 0;\n    }\n    return window.screen;\n  };\n  const [screen, setScreen] = useState(() => {\n    if (initializeWithValue) {\n      return readScreen();\n    }\n    return void 0;\n  });\n  const debouncedSetScreen = useDebounceCallback(\n    setScreen,\n    options.debounceDelay\n  );\n  function handleSize() {\n    const newScreen = readScreen();\n    const setSize = options.debounceDelay ? debouncedSetScreen : setScreen;\n    if (newScreen) {\n      const {\n        width,\n        height,\n        availHeight,\n        availWidth,\n        colorDepth,\n        orientation,\n        pixelDepth\n      } = newScreen;\n      setSize({\n        width,\n        height,\n        availHeight,\n        availWidth,\n        colorDepth,\n        orientation,\n        pixelDepth\n      });\n    }\n  }\n  useEventListener(\"resize\", handleSize);\n  useIsomorphicLayoutEffect(() => {\n    handleSize();\n  }, []);\n  return screen;\n}\nvar cachedScriptStatuses = /* @__PURE__ */ new Map();\nfunction getScriptNode(src) {\n  const node = document.querySelector(\n    `script[src=\"${src}\"]`\n  );\n  const status = node == null ? void 0 : node.getAttribute(\"data-status\");\n  return {\n    node,\n    status\n  };\n}\nfunction useScript(src, options) {\n  const [status, setStatus] = useState(() => {\n    if (!src || (options == null ? void 0 : options.shouldPreventLoad)) {\n      return \"idle\";\n    }\n    if (typeof window === \"undefined\") {\n      return \"loading\";\n    }\n    return cachedScriptStatuses.get(src) ?? \"loading\";\n  });\n  useEffect(() => {\n    if (!src || (options == null ? void 0 : options.shouldPreventLoad)) {\n      return;\n    }\n    const cachedScriptStatus = cachedScriptStatuses.get(src);\n    if (cachedScriptStatus === \"ready\" || cachedScriptStatus === \"error\") {\n      setStatus(cachedScriptStatus);\n      return;\n    }\n    const script = getScriptNode(src);\n    let scriptNode = script.node;\n    if (!scriptNode) {\n      scriptNode = document.createElement(\"script\");\n      scriptNode.src = src;\n      scriptNode.async = true;\n      if (options == null ? void 0 : options.id) {\n        scriptNode.id = options.id;\n      }\n      scriptNode.setAttribute(\"data-status\", \"loading\");\n      document.body.appendChild(scriptNode);\n      const setAttributeFromEvent = (event) => {\n        const scriptStatus = event.type === \"load\" ? \"ready\" : \"error\";\n        scriptNode == null ? void 0 : scriptNode.setAttribute(\"data-status\", scriptStatus);\n      };\n      scriptNode.addEventListener(\"load\", setAttributeFromEvent);\n      scriptNode.addEventListener(\"error\", setAttributeFromEvent);\n    } else {\n      setStatus(script.status ?? cachedScriptStatus ?? \"loading\");\n    }\n    const setStateFromEvent = (event) => {\n      const newStatus = event.type === \"load\" ? \"ready\" : \"error\";\n      setStatus(newStatus);\n      cachedScriptStatuses.set(src, newStatus);\n    };\n    scriptNode.addEventListener(\"load\", setStateFromEvent);\n    scriptNode.addEventListener(\"error\", setStateFromEvent);\n    return () => {\n      if (scriptNode) {\n        scriptNode.removeEventListener(\"load\", setStateFromEvent);\n        scriptNode.removeEventListener(\"error\", setStateFromEvent);\n      }\n      if (scriptNode && (options == null ? void 0 : options.removeOnUnmount)) {\n        scriptNode.remove();\n        cachedScriptStatuses.delete(src);\n      }\n    };\n  }, [src, options == null ? void 0 : options.shouldPreventLoad, options == null ? void 0 : options.removeOnUnmount, options == null ? void 0 : options.id]);\n  return status;\n}\nvar IS_SERVER5 = typeof window === \"undefined\";\nfunction useScrollLock(options = {}) {\n  const { autoLock = true, lockTarget, widthReflow = true } = options;\n  const [isLocked, setIsLocked] = useState(false);\n  const target = useRef(null);\n  const originalStyle = useRef(null);\n  const lock = () => {\n    if (target.current) {\n      const { overflow, paddingRight } = target.current.style;\n      originalStyle.current = { overflow, paddingRight };\n      if (widthReflow) {\n        const offsetWidth = target.current === document.body ? window.innerWidth : target.current.offsetWidth;\n        const currentPaddingRight = parseInt(window.getComputedStyle(target.current).paddingRight, 10) || 0;\n        const scrollbarWidth = offsetWidth - target.current.scrollWidth;\n        target.current.style.paddingRight = `${scrollbarWidth + currentPaddingRight}px`;\n      }\n      target.current.style.overflow = \"hidden\";\n      setIsLocked(true);\n    }\n  };\n  const unlock = () => {\n    if (target.current && originalStyle.current) {\n      target.current.style.overflow = originalStyle.current.overflow;\n      if (widthReflow) {\n        target.current.style.paddingRight = originalStyle.current.paddingRight;\n      }\n    }\n    setIsLocked(false);\n  };\n  useIsomorphicLayoutEffect(() => {\n    if (IS_SERVER5)\n      return;\n    if (lockTarget) {\n      target.current = typeof lockTarget === \"string\" ? document.querySelector(lockTarget) : lockTarget;\n    }\n    if (!target.current) {\n      target.current = document.body;\n    }\n    if (autoLock) {\n      lock();\n    }\n    return () => {\n      unlock();\n    };\n  }, [autoLock, lockTarget, widthReflow]);\n  return { isLocked, lock, unlock };\n}\nvar IS_SERVER6 = typeof window === \"undefined\";\nfunction useSessionStorage(key, initialValue, options = {}) {\n  const { initializeWithValue = true } = options;\n  const serializer = useCallback(\n    (value) => {\n      if (options.serializer) {\n        return options.serializer(value);\n      }\n      return JSON.stringify(value);\n    },\n    [options]\n  );\n  const deserializer = useCallback(\n    (value) => {\n      if (options.deserializer) {\n        return options.deserializer(value);\n      }\n      if (value === \"undefined\") {\n        return void 0;\n      }\n      const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n      let parsed;\n      try {\n        parsed = JSON.parse(value);\n      } catch (error) {\n        console.error(\"Error parsing JSON:\", error);\n        return defaultValue;\n      }\n      return parsed;\n    },\n    [options, initialValue]\n  );\n  const readValue = useCallback(() => {\n    const initialValueToUse = initialValue instanceof Function ? initialValue() : initialValue;\n    if (IS_SERVER6) {\n      return initialValueToUse;\n    }\n    try {\n      const raw = window.sessionStorage.getItem(key);\n      return raw ? deserializer(raw) : initialValueToUse;\n    } catch (error) {\n      console.warn(`Error reading sessionStorage key \\u201C${key}\\u201D:`, error);\n      return initialValueToUse;\n    }\n  }, [initialValue, key, deserializer]);\n  const [storedValue, setStoredValue] = useState(() => {\n    if (initializeWithValue) {\n      return readValue();\n    }\n    return initialValue instanceof Function ? initialValue() : initialValue;\n  });\n  const setValue = useEventCallback((value) => {\n    if (IS_SERVER6) {\n      console.warn(\n        `Tried setting sessionStorage key \\u201C${key}\\u201D even though environment is not a client`\n      );\n    }\n    try {\n      const newValue = value instanceof Function ? value(readValue()) : value;\n      window.sessionStorage.setItem(key, serializer(newValue));\n      setStoredValue(newValue);\n      window.dispatchEvent(new StorageEvent(\"session-storage\", { key }));\n    } catch (error) {\n      console.warn(`Error setting sessionStorage key \\u201C${key}\\u201D:`, error);\n    }\n  });\n  const removeValue = useEventCallback(() => {\n    if (IS_SERVER6) {\n      console.warn(\n        `Tried removing sessionStorage key \\u201C${key}\\u201D even though environment is not a client`\n      );\n    }\n    const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n    window.sessionStorage.removeItem(key);\n    setStoredValue(defaultValue);\n    window.dispatchEvent(new StorageEvent(\"session-storage\", { key }));\n  });\n  useEffect(() => {\n    setStoredValue(readValue());\n  }, [key]);\n  const handleStorageChange = useCallback(\n    (event) => {\n      if (event.key && event.key !== key) {\n        return;\n      }\n      setStoredValue(readValue());\n    },\n    [key, readValue]\n  );\n  useEventListener(\"storage\", handleStorageChange);\n  useEventListener(\"session-storage\", handleStorageChange);\n  return [storedValue, setValue, removeValue];\n}\nfunction useStep(maxStep) {\n  const [currentStep, setCurrentStep] = useState(1);\n  const canGoToNextStep = currentStep + 1 <= maxStep;\n  const canGoToPrevStep = currentStep - 1 > 0;\n  const setStep = useCallback(\n    (step) => {\n      const newStep = step instanceof Function ? step(currentStep) : step;\n      if (newStep >= 1 && newStep <= maxStep) {\n        setCurrentStep(newStep);\n        return;\n      }\n      throw new Error(\"Step not valid\");\n    },\n    [maxStep, currentStep]\n  );\n  const goToNextStep = useCallback(() => {\n    if (canGoToNextStep) {\n      setCurrentStep((step) => step + 1);\n    }\n  }, [canGoToNextStep]);\n  const goToPrevStep = useCallback(() => {\n    if (canGoToPrevStep) {\n      setCurrentStep((step) => step - 1);\n    }\n  }, [canGoToPrevStep]);\n  const reset = useCallback(() => {\n    setCurrentStep(1);\n  }, []);\n  return [\n    currentStep,\n    {\n      goToNextStep,\n      goToPrevStep,\n      canGoToNextStep,\n      canGoToPrevStep,\n      setStep,\n      reset\n    }\n  ];\n}\n\n// src/useTernaryDarkMode/useTernaryDarkMode.ts\nvar COLOR_SCHEME_QUERY2 = \"(prefers-color-scheme: dark)\";\nvar LOCAL_STORAGE_KEY2 = \"usehooks-ts-ternary-dark-mode\";\nfunction useTernaryDarkMode({\n  defaultValue = \"system\",\n  localStorageKey = LOCAL_STORAGE_KEY2,\n  initializeWithValue = true\n} = {}) {\n  const isDarkOS = useMediaQuery(COLOR_SCHEME_QUERY2, { initializeWithValue });\n  const [mode, setMode] = useLocalStorage(localStorageKey, defaultValue, {\n    initializeWithValue\n  });\n  const isDarkMode = mode === \"dark\" || mode === \"system\" && isDarkOS;\n  const toggleTernaryDarkMode = () => {\n    const modes = [\"light\", \"system\", \"dark\"];\n    setMode((prevMode) => {\n      const nextIndex = (modes.indexOf(prevMode) + 1) % modes.length;\n      return modes[nextIndex];\n    });\n  };\n  return {\n    isDarkMode,\n    ternaryDarkMode: mode,\n    setTernaryDarkMode: setMode,\n    toggleTernaryDarkMode\n  };\n}\nfunction useTimeout(callback, delay) {\n  const savedCallback = useRef(callback);\n  useIsomorphicLayoutEffect(() => {\n    savedCallback.current = callback;\n  }, [callback]);\n  useEffect(() => {\n    if (!delay && delay !== 0) {\n      return;\n    }\n    const id = setTimeout(() => {\n      savedCallback.current();\n    }, delay);\n    return () => {\n      clearTimeout(id);\n    };\n  }, [delay]);\n}\nfunction useToggle(defaultValue) {\n  const [value, setValue] = useState(!!defaultValue);\n  const toggle = useCallback(() => {\n    setValue((x) => !x);\n  }, []);\n  return [value, toggle, setValue];\n}\nvar IS_SERVER7 = typeof window === \"undefined\";\nfunction useWindowSize(options = {}) {\n  let { initializeWithValue = true } = options;\n  if (IS_SERVER7) {\n    initializeWithValue = false;\n  }\n  const [windowSize, setWindowSize] = useState(() => {\n    if (initializeWithValue) {\n      return {\n        width: window.innerWidth,\n        height: window.innerHeight\n      };\n    }\n    return {\n      width: void 0,\n      height: void 0\n    };\n  });\n  const debouncedSetWindowSize = useDebounceCallback(\n    setWindowSize,\n    options.debounceDelay\n  );\n  function handleSize() {\n    const setSize = options.debounceDelay ? debouncedSetWindowSize : setWindowSize;\n    setSize({\n      width: window.innerWidth,\n      height: window.innerHeight\n    });\n  }\n  useEventListener(\"resize\", handleSize);\n  useIsomorphicLayoutEffect(() => {\n    handleSize();\n  }, []);\n  return windowSize;\n}\n\nexport { useBoolean, useClickAnyWhere, useCopyToClipboard, useCountdown, useCounter, useDarkMode, useDebounceCallback, useDebounceValue, useDocumentTitle, useEventCallback, useEventListener, useHover, useIntersectionObserver, useInterval, useIsClient, useIsMounted, useIsomorphicLayoutEffect, useLocalStorage, useMap, useMediaQuery, useOnClickOutside, useReadLocalStorage, useResizeObserver, useScreen, useScript, useScrollLock, useSessionStorage, useStep, useTernaryDarkMode, useTimeout, useToggle, useUnmount, useWindowSize };\n","import { useEffect, useRef, useState } from \"react\"\nimport { useIsClient } from \"usehooks-ts\"\n\n// Vendored from spin-delay v2.0.1 (MIT):\n// https://github.com/smeijer/spin-delay/blob/v2.0.1/src/index.ts\n// We keep an ESM copy here because the package only publishes a UMD build,\n// which leaves a runtime `require(\"react\")` in Grapher's published ESM bundle.\n\ntype SpinDelayOptions = {\n    delay?: number\n    minDuration?: number\n    ssr?: boolean\n}\n\ntype SpinDelayState = \"IDLE\" | \"DELAY\" | \"DISPLAY\" | \"EXPIRE\"\n\nconst defaultOptions = {\n    delay: 500,\n    minDuration: 200,\n    ssr: true,\n}\n\nexport function useSpinDelay(\n    loading: boolean,\n    options: SpinDelayOptions = {}\n): boolean {\n    const resolvedOptions = { ...defaultOptions, ...options }\n    const isSsr = !useIsClient() && resolvedOptions.ssr\n    const initialState = isSsr && loading ? \"DISPLAY\" : \"IDLE\"\n    const [state, setState] = useState<SpinDelayState>(initialState)\n    const timeout = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n\n    // A timer-driven state machine, so it transitions from within the effect\n    /* oxlint-disable react/set-state-in-effect */\n    useEffect(() => {\n        if (loading && (state === \"IDLE\" || isSsr)) {\n            clearTimeout(timeout.current)\n            const delay = isSsr ? 0 : resolvedOptions.delay\n            timeout.current = setTimeout(() => {\n                if (!loading) {\n                    setState(\"IDLE\")\n                    return\n                }\n\n                timeout.current = setTimeout(() => {\n                    setState(\"EXPIRE\")\n                }, resolvedOptions.minDuration)\n                setState(\"DISPLAY\")\n            }, delay)\n\n            if (!isSsr) setState(\"DELAY\")\n        }\n\n        if (!loading && state !== \"DISPLAY\") {\n            clearTimeout(timeout.current)\n            setState(\"IDLE\")\n        }\n    }, [\n        loading,\n        state,\n        resolvedOptions.delay,\n        resolvedOptions.minDuration,\n        isSsr,\n    ])\n    /* oxlint-enable react/set-state-in-effect */\n\n    useEffect((): (() => void) => {\n        return (): void => clearTimeout(timeout.current)\n    }, [])\n\n    return state === \"DISPLAY\" || state === \"EXPIRE\"\n}\n","/**\n * This file cointains code shared by the DonateForm component on the client and\n * the donate Cloudflare function on the server.\n */\n\nimport { DonationCurrencyCode, DonationRequest } from \"@ourworldindata/types\"\n\nconst CURRENCY_SYMBOLS: Record<DonationCurrencyCode, string> = {\n    GBP: \"£\",\n    EUR: \"€\",\n    USD: \"$\",\n}\nexport const getCurrencySymbol = (currency: DonationCurrencyCode): string => {\n    return CURRENCY_SYMBOLS[currency]\n}\n\nexport const SUPPORTED_CURRENCY_CODES: DonationCurrencyCode[] = [\n    \"GBP\",\n    \"EUR\",\n    \"USD\",\n]\n\nexport const MIN_DONATION_AMOUNT = 5\nexport const MAX_DONATION_AMOUNT = 10_000\n\nexport const PLEASE_GET_IN_TOUCH =\n    \"If the problem persists, please get in touch with us at donate@ourworldindata.org.\"\nexport const PLEASE_TRY_AGAIN = `Please try again. ${PLEASE_GET_IN_TOUCH}`\n\nexport const getErrorMessageDonation = (\n    donation: DonationRequest\n): string | undefined => {\n    const symbol = getCurrencySymbol(donation.currency)\n\n    if (donation.amount === undefined || Number.isNaN(donation.amount))\n        return \"Please enter a valid amount or select a preset amount.\"\n\n    if (\n        donation.amount < MIN_DONATION_AMOUNT ||\n        donation.amount > MAX_DONATION_AMOUNT\n    ) {\n        return `You can only donate between ${symbol}${MIN_DONATION_AMOUNT} and ${symbol}${MAX_DONATION_AMOUNT}. For other amounts, please get in touch with us at donate@ourwourldindata.org.`\n    }\n\n    if (donation.showOnList && !donation.name) {\n        return \"Please enter your full name if you would like to be included on our public list of donors.\"\n    }\n\n    return\n}\n","export const isAndroid = (): boolean => {\n    return /Android/i.test(navigator.userAgent)\n}\n\nexport const isIOS = (): boolean => {\n    return (\n        /iPhone|iPad|iPod/.test(navigator.userAgent) ||\n        // iPadOS 13+ reports itself as Macintosh, see https://stackoverflow.com/a/9039885\n        (navigator.userAgent.includes(\"Intel Mac OS X\") &&\n            navigator.maxTouchPoints > 1)\n    )\n}\n","import { GrapherInterface } from \"@ourworldindata/types\"\nimport * as _ from \"lodash-es\"\nimport {\n    excludeUndefined,\n    omitUndefinedValuesRecursive,\n    omitEmptyObjectsRecursive,\n    traverseObjects,\n    merge,\n} from \"./Util\"\nimport * as Sentry from \"@sentry/browser\"\n\n// Identity and publishing keys. These are never inherited from a parent\n// layer, so a child config always carries its own — they're kept in a patch\n// even when they happen to match the parent stack. Every other field,\n// `dimensions` included, is an ordinary inherited property: it survives in the\n// patch only as a genuine override.\nexport const KEYS_EXCLUDED_FROM_INHERITANCE = [\n    \"$schema\",\n    \"id\",\n    \"slug\",\n    \"version\",\n    \"isPublished\",\n] as const satisfies readonly (keyof GrapherInterface)[]\n\nexport function mergeGrapherConfigs(\n    ...grapherConfigs: GrapherInterface[]\n): GrapherInterface {\n    const configsToMerge = grapherConfigs.filter((c) => !_.isEmpty(c))\n\n    // return early if there are no configs to merge\n    if (configsToMerge.length === 0) return {}\n    if (configsToMerge.length === 1) return configsToMerge[0]\n\n    // warn if one of the configs is missing a schema version\n    const configsWithoutSchema = configsToMerge.filter(\n        (c) => c[\"$schema\"] === undefined\n    )\n    if (configsWithoutSchema.length > 0) {\n        const configsJson = JSON.stringify(configsWithoutSchema, null, 2)\n        console.warn(\n            `About to merge Grapher configs with missing schema information: ${configsJson}`\n        )\n    }\n\n    // abort if the grapher configs have different schema versions\n    const uniqueSchemas = _.uniq(\n        excludeUndefined(configsToMerge.map((c) => c[\"$schema\"]))\n    )\n    if (uniqueSchemas.length > 1) {\n        const message = `Merging Grapher configs with different schema versions. This may lead to unexpected behavior. Found: ${uniqueSchemas.join(\n            \", \"\n        )}`\n        console.warn(message)\n        Sentry.captureMessage(message, {\n            level: \"warning\",\n        })\n    }\n\n    // keys that should not be inherited are removed from all but the last config\n    const cleanedConfigs = configsToMerge.map((config, index) => {\n        if (index === configsToMerge.length - 1) return config\n        return _.omit(config, KEYS_EXCLUDED_FROM_INHERITANCE)\n    })\n\n    return merge(\n        ...(cleanedConfigs as [GrapherInterface, ...GrapherInterface[]])\n    )\n}\n\nexport function diffGrapherConfigs(\n    config: GrapherInterface,\n    reference: GrapherInterface\n): GrapherInterface {\n    const keep = _.pick(config, KEYS_EXCLUDED_FROM_INHERITANCE)\n\n    const diffed = omitEmptyObjectsRecursive(\n        omitUndefinedValuesRecursive(\n            traverseObjects(config, reference, (value, refValue) => {\n                if (refValue === undefined) return value\n                if (!_.isEqual(value, refValue)) return value\n                return undefined\n            })\n        )\n    )\n\n    return { ...diffed, ...keep }\n}\n","import {\n    Choice,\n    ChoicesEnriched,\n    DimensionEnriched,\n    IndicatorsAfterPreProcessing,\n    IndicatorTitleWithFragments,\n    joinTitleFragments,\n    MultiDimDimensionChoices,\n    View,\n    ViewEnriched,\n    OwidChartDimensionInterface,\n    DimensionProperty,\n    MultiDimDataPageConfigEnriched,\n    normalizeDescriptionKey,\n    OwidVariableWithSourceAndDimension,\n} from \"@ourworldindata/types\"\nimport * as _ from \"lodash-es\"\nimport { merge } from \"./Util\"\n\ninterface FilterToAvailableResult {\n    selectedChoices: MultiDimDimensionChoices\n    dimensionsWithAvailableChoices: Record<string, DimensionEnriched>\n}\n\nexport class MultiDimDataPageConfig {\n    private constructor(\n        public readonly config: MultiDimDataPageConfigEnriched\n    ) {}\n\n    static fromJson(jsonString: string): MultiDimDataPageConfig {\n        return new MultiDimDataPageConfig(JSON.parse(jsonString))\n    }\n\n    static fromObject(\n        obj: MultiDimDataPageConfigEnriched\n    ): MultiDimDataPageConfig {\n        return new MultiDimDataPageConfig(obj)\n    }\n\n    private static getEnrichedChoicesFields(\n        choices: Choice[]\n    ): ChoicesEnriched {\n        return {\n            choices,\n            choicesBySlug: _.keyBy(choices, \"slug\"),\n            choicesByGroup: _.groupBy(choices, \"group\"),\n        }\n    }\n\n    get dimensions(): Record<string, DimensionEnriched> {\n        const dimensionsEnriched = this.config.dimensions.map((dimension) => ({\n            ...dimension,\n            ...MultiDimDataPageConfig.getEnrichedChoicesFields(\n                dimension.choices\n            ),\n        }))\n        return _.keyBy(dimensionsEnriched, \"slug\")\n    }\n\n    filterViewsByDimensions(\n        dimensions: MultiDimDimensionChoices\n    ): ViewEnriched[] {\n        return this.config.views.filter((view) => {\n            for (const [dimensionSlug, choiceSlug] of Object.entries(\n                dimensions\n            )) {\n                if (view.dimensions[dimensionSlug] !== choiceSlug) return false\n            }\n            return true\n        })\n    }\n\n    // This'll only ever find one or zero views, and will throw an error\n    // if more than one matching views were found\n    findViewByDimensions(\n        dimensions: MultiDimDimensionChoices\n    ): ViewEnriched | undefined {\n        const matchingViews = this.filterViewsByDimensions(dimensions)\n        if (matchingViews.length === 0) return undefined\n        if (matchingViews.length > 1) {\n            throw new Error(\n                `Multiple views found for dimensions ${JSON.stringify(\n                    dimensions\n                )}`\n            )\n        }\n        return matchingViews[0]\n    }\n\n    /**\n     * This checks if matching views are available for the selected choices, and otherwise\n     * adapts them in such a way that they are available, in the following way:\n     * - Go through the choices left-to-right. The current dimension we're looking at is called `cur`.\n     * - If there is at least one available view for choices[leftmost, ..., cur], continue.\n     * - Otherwise, for dimension `cur`, find the first choice that has at least one available view.\n     *\n     * The method returns two values:\n     * - `selectedChoices` is the updated version of the input `selectedChoices`, where choices have been adapted to make sure there are available views. It is fully-qualified, i.e. it has choices for all dimensions.\n     * - `dimensionsWithAvailableChoices` indicates for each dimension which choices are available, and excludes the ones that are excluded by choices left of it.\n     *\n     * - @marcelgerber, 2024-07-22\n     */\n    filterToAvailableChoices(\n        selectedChoices: MultiDimDimensionChoices\n    ): FilterToAvailableResult {\n        const updatedSelectedChoices: MultiDimDimensionChoices = {}\n        const dimensionsWithAvailableChoices: Record<\n            string,\n            DimensionEnriched\n        > = {}\n        for (const [currentDimSlug, currentDim] of Object.entries(\n            this.dimensions\n        )) {\n            const availableViewsBeforeSelection = this.filterViewsByDimensions(\n                updatedSelectedChoices\n            )\n            if (\n                selectedChoices[currentDimSlug] &&\n                currentDim.choicesBySlug[selectedChoices[currentDimSlug]]\n            ) {\n                updatedSelectedChoices[currentDimSlug] =\n                    selectedChoices[currentDimSlug]\n            } else {\n                updatedSelectedChoices[currentDimSlug] =\n                    availableViewsBeforeSelection[0].dimensions[currentDimSlug]\n            }\n\n            const availableViewsAfterSelection = this.filterViewsByDimensions(\n                updatedSelectedChoices\n            )\n            if (availableViewsAfterSelection.length === 0) {\n                // If there are no views available after this selection, choose the first available view before this choice and update to its choice\n                updatedSelectedChoices[currentDimSlug] =\n                    availableViewsBeforeSelection[0].dimensions[currentDimSlug]\n            }\n\n            // Find all the available choices we can show for this dimension - these are all\n            // the ones that are possible for this dimension with all of the previous choices\n            // (i.e., left of this dimension) in mind.\n            const availableChoicesForDimension = Object.values(\n                currentDim.choices\n            ).filter((choice) =>\n                availableViewsBeforeSelection.some(\n                    (view) => view.dimensions[currentDimSlug] === choice.slug\n                )\n            )\n            dimensionsWithAvailableChoices[currentDimSlug] = {\n                ...currentDim,\n                ...MultiDimDataPageConfig.getEnrichedChoicesFields(\n                    availableChoicesForDimension\n                ),\n            }\n        }\n\n        return {\n            selectedChoices: updatedSelectedChoices,\n            dimensionsWithAvailableChoices,\n        }\n    }\n\n    getDefaultSelectedChoices(): MultiDimDimensionChoices {\n        return this.filterToAvailableChoices({}).selectedChoices\n    }\n\n    getDefaultView(): ViewEnriched | undefined {\n        return this.findViewByDimensions(this.getDefaultSelectedChoices())\n    }\n\n    mergeViewMetadata(\n        dimensions: MultiDimDimensionChoices,\n        variableMetadata: OwidVariableWithSourceAndDimension\n    ): OwidVariableWithSourceAndDimension {\n        const mdimConfigView = this.findViewByDimensions(dimensions)\n\n        const merged = merge(\n            variableMetadata,\n            this.config.metadata ?? {},\n            mdimConfigView?.metadata ?? {}\n        )\n        // Configs written before the string migration hold descriptionKey arrays.\n        merged.descriptionKey = normalizeDescriptionKey(merged.descriptionKey)\n        return merged\n    }\n\n    findViewDimensionsByConfigId(\n        viewConfigId: string\n    ): MultiDimDimensionChoices | null {\n        const view = this.config.views.find(\n            (v) => v.fullConfigId === viewConfigId\n        )\n        return view?.dimensions ?? null\n    }\n\n    static viewToDimensionsConfig(\n        view?: View<IndicatorsAfterPreProcessing>\n    ): OwidChartDimensionInterface[] {\n        const dimensions: OwidChartDimensionInterface[] = []\n        if (!view?.indicators) return dimensions\n        if (view.indicators.y) {\n            dimensions.push(\n                ...view.indicators.y.map(({ id, display }) => ({\n                    property: DimensionProperty.y,\n                    variableId: id,\n                    display,\n                }))\n            )\n        }\n        if (view.indicators.x) {\n            dimensions.push({\n                property: DimensionProperty.x,\n                variableId: view.indicators.x.id,\n                display: view.indicators.x.display,\n            })\n        }\n        if (view.indicators.size) {\n            dimensions.push({\n                property: DimensionProperty.size,\n                variableId: view.indicators.size.id,\n                display: view.indicators.size.display,\n            })\n        }\n        if (view.indicators.color) {\n            dimensions.push({\n                property: DimensionProperty.color,\n                variableId: view.indicators.color.id,\n                display: view.indicators.color.display,\n            })\n        }\n        return dimensions\n    }\n}\n\n/**\n * The page title of a multi-dim data page: the title plus its fragments\n * (title variant, short attribution), without the site-name suffix, e.g.\n * \"Childhood vaccination coverage - by vaccine\".\n */\nexport function getMultiDimPageTitle(\n    title: IndicatorTitleWithFragments\n): string {\n    const fragments = joinTitleFragments(\n        title.attributionShort,\n        title.titleVariant\n    )\n    return fragments ? `${title.title} - ${fragments}` : title.title\n}\n\nexport const extractMultiDimChoicesFromSearchParams = (\n    searchParams: URLSearchParams,\n    config: MultiDimDataPageConfig\n): MultiDimDimensionChoices => {\n    const dimensions = config.dimensions\n    const dimensionChoices: MultiDimDimensionChoices = {}\n    for (const [key, value] of searchParams.entries()) {\n        if (key in dimensions) {\n            dimensionChoices[key] = value\n        }\n    }\n    return dimensionChoices\n}\n\nexport function searchParamsToMultiDimView(\n    config: MultiDimDataPageConfigEnriched,\n    searchParams: URLSearchParams\n): ViewEnriched {\n    const multiDimConfig = MultiDimDataPageConfig.fromObject(config)\n    let dimensions = extractMultiDimChoicesFromSearchParams(\n        searchParams,\n        multiDimConfig\n    )\n    if (_.isEmpty(dimensions)) {\n        // Get the default dimensions.\n        dimensions = multiDimConfig.getDefaultSelectedChoices()\n    }\n    const view = multiDimConfig.findViewByDimensions(dimensions)\n    if (!view) {\n        throw new Error(\n            `No view found for dimensions ${JSON.stringify(dimensions)}`\n        )\n    }\n    return view\n}\n","// https://github.com/farzher/fuzzysort v3.0.2\r\n\r\n// UMD (Universal Module Definition) for fuzzysort\r\n;((root, UMD) => {\r\n  if(typeof define === 'function' && define.amd) define([], UMD)\r\n  else if(typeof module === 'object' && module.exports) module.exports = UMD()\r\n  else root['fuzzysort'] = UMD()\r\n})(this, _ => {\r\n  'use strict'\r\n\r\n  var single = (search, target) => {\r\n    if(!search || !target) return NULL\r\n\r\n    var preparedSearch = getPreparedSearch(search)\r\n    if(!isPrepared(target)) target = getPrepared(target)\r\n\r\n    var searchBitflags = preparedSearch.bitflags\r\n    if((searchBitflags & target._bitflags) !== searchBitflags) return NULL\r\n\r\n    return algorithm(preparedSearch, target)\r\n  }\r\n\r\n  var go = (search, targets, options) => {\r\n    if(!search) return options?.all ? all(targets, options) : noResults\r\n\r\n    var preparedSearch = getPreparedSearch(search)\r\n    var searchBitflags = preparedSearch.bitflags\r\n    var containsSpace  = preparedSearch.containsSpace\r\n\r\n    var threshold = denormalizeScore( options?.threshold || 0 )\r\n    var limit     = options?.limit || INFINITY\r\n\r\n    var resultsLen = 0; var limitedCount = 0\r\n    var targetsLen = targets.length\r\n\r\n    function push_result(result) {\r\n      if(resultsLen < limit) { q.add(result); ++resultsLen }\r\n      else {\r\n        ++limitedCount\r\n        if(result._score > q.peek()._score) q.replaceTop(result)\r\n      }\r\n    }\r\n\r\n    // This code is copy/pasted 3 times for performance reasons [options.key, options.keys, no keys]\r\n\r\n    // options.key\r\n    if(options?.key) {\r\n      var key = options.key\r\n      for(var i = 0; i < targetsLen; ++i) { var obj = targets[i]\r\n        var target = getValue(obj, key)\r\n        if(!target) continue\r\n        if(!isPrepared(target)) target = getPrepared(target)\r\n\r\n        if((searchBitflags & target._bitflags) !== searchBitflags) continue\r\n        var result = algorithm(preparedSearch, target)\r\n        if(result === NULL) continue\r\n        if(result._score < threshold) continue\r\n\r\n        result.obj = obj\r\n        push_result(result)\r\n      }\r\n\r\n    // options.keys\r\n    } else if(options?.keys) {\r\n      var keys = options.keys\r\n      var keysLen = keys.length\r\n\r\n      outer: for(var i = 0; i < targetsLen; ++i) { var obj = targets[i]\r\n\r\n        { // early out based on bitflags\r\n          var keysBitflags = 0\r\n          for (var keyI = 0; keyI < keysLen; ++keyI) {\r\n            var key = keys[keyI]\r\n            var target = getValue(obj, key)\r\n            if(!target) { tmpTargets[keyI] = noTarget; continue }\r\n            if(!isPrepared(target)) target = getPrepared(target)\r\n            tmpTargets[keyI] = target\r\n\r\n            keysBitflags |= target._bitflags\r\n          }\r\n\r\n          if((searchBitflags & keysBitflags) !== searchBitflags) continue\r\n        }\r\n\r\n        if(containsSpace) for(let i=0; i<preparedSearch.spaceSearches.length; i++) keysSpacesBestScores[i] = NEGATIVE_INFINITY\r\n\r\n        for (var keyI = 0; keyI < keysLen; ++keyI) {\r\n          target = tmpTargets[keyI]\r\n          if(target === noTarget) { tmpResults[keyI] = noTarget; continue }\r\n\r\n          tmpResults[keyI] = algorithm(preparedSearch, target, /*allowSpaces=*/false, /*allowPartialMatch=*/containsSpace)\r\n          if(tmpResults[keyI] === NULL) { tmpResults[keyI] = noTarget; continue }\r\n\r\n          // todo: this seems weird and wrong. like what if our first match wasn't good. this should just replace it instead of averaging with it\r\n          // if our second match isn't good we ignore it instead of averaging with it\r\n          if(containsSpace) for(let i=0; i<preparedSearch.spaceSearches.length; i++) {\r\n            if(allowPartialMatchScores[i] > -1000) {\r\n              if(keysSpacesBestScores[i] > NEGATIVE_INFINITY) {\r\n                var tmp = (keysSpacesBestScores[i] + allowPartialMatchScores[i]) / 4/*bonus score for having multiple matches*/\r\n                if(tmp > keysSpacesBestScores[i]) keysSpacesBestScores[i] = tmp\r\n              }\r\n            }\r\n            if(allowPartialMatchScores[i] > keysSpacesBestScores[i]) keysSpacesBestScores[i] = allowPartialMatchScores[i]\r\n          }\r\n        }\r\n\r\n        if(containsSpace) {\r\n          for(let i=0; i<preparedSearch.spaceSearches.length; i++) { if(keysSpacesBestScores[i] === NEGATIVE_INFINITY) continue outer }\r\n        } else {\r\n          var hasAtLeast1Match = false\r\n          for(let i=0; i < keysLen; i++) { if(tmpResults[i]._score !== NEGATIVE_INFINITY) { hasAtLeast1Match = true; break } }\r\n          if(!hasAtLeast1Match) continue\r\n        }\r\n\r\n        var objResults = new KeysResult(keysLen)\r\n        for(let i=0; i < keysLen; i++) { objResults[i] = tmpResults[i] }\r\n\r\n        if(containsSpace) {\r\n          var score = 0\r\n          for(let i=0; i<preparedSearch.spaceSearches.length; i++) score += keysSpacesBestScores[i]\r\n        } else {\r\n          // todo could rewrite this scoring to be more similar to when there's spaces\r\n          // if we match multiple keys give us bonus points\r\n          var score = NEGATIVE_INFINITY\r\n          for(let i=0; i<keysLen; i++) {\r\n            var result = objResults[i]\r\n            if(result._score > -1000) {\r\n              if(score > NEGATIVE_INFINITY) {\r\n                var tmp = (score + result._score) / 4/*bonus score for having multiple matches*/\r\n                if(tmp > score) score = tmp\r\n              }\r\n            }\r\n            if(result._score > score) score = result._score\r\n          }\r\n        }\r\n\r\n        objResults.obj = obj\r\n        objResults._score = score\r\n        if(options?.scoreFn) {\r\n          score = options.scoreFn(objResults)\r\n          if(!score) continue\r\n          score = denormalizeScore(score)\r\n          objResults._score = score\r\n        }\r\n\r\n        if(score < threshold) continue\r\n        push_result(objResults)\r\n      }\r\n\r\n    // no keys\r\n    } else {\r\n      for(var i = 0; i < targetsLen; ++i) { var target = targets[i]\r\n        if(!target) continue\r\n        if(!isPrepared(target)) target = getPrepared(target)\r\n\r\n        if((searchBitflags & target._bitflags) !== searchBitflags) continue\r\n        var result = algorithm(preparedSearch, target)\r\n        if(result === NULL) continue\r\n        if(result._score < threshold) continue\r\n\r\n        push_result(result)\r\n      }\r\n    }\r\n\r\n    if(resultsLen === 0) return noResults\r\n    var results = new Array(resultsLen)\r\n    for(var i = resultsLen - 1; i >= 0; --i) results[i] = q.poll()\r\n    results.total = resultsLen + limitedCount\r\n    return results\r\n  }\r\n\r\n\r\n  // this is written as 1 function instead of 2 for minification. perf seems fine ...\r\n  // except when minified. the perf is very slow\r\n  var highlight = (result, open='<b>', close='</b>') => {\r\n    var callback = typeof open === 'function' ? open : undefined\r\n\r\n    var target      = result.target\r\n    var targetLen   = target.length\r\n    var indexes     = result.indexes\r\n    var highlighted = ''\r\n    var matchI      = 0\r\n    var indexesI    = 0\r\n    var opened      = false\r\n    var parts       = []\r\n\r\n    for(var i = 0; i < targetLen; ++i) { var char = target[i]\r\n      if(indexes[indexesI] === i) {\r\n        ++indexesI\r\n        if(!opened) { opened = true\r\n          if(callback) {\r\n            parts.push(highlighted); highlighted = ''\r\n          } else {\r\n            highlighted += open\r\n          }\r\n        }\r\n\r\n        if(indexesI === indexes.length) {\r\n          if(callback) {\r\n            highlighted += char\r\n            parts.push(callback(highlighted, matchI++)); highlighted = ''\r\n            parts.push(target.substr(i+1))\r\n          } else {\r\n            highlighted += char + close + target.substr(i+1)\r\n          }\r\n          break\r\n        }\r\n      } else {\r\n        if(opened) { opened = false\r\n          if(callback) {\r\n            parts.push(callback(highlighted, matchI++)); highlighted = ''\r\n          } else {\r\n            highlighted += close\r\n          }\r\n        }\r\n      }\r\n      highlighted += char\r\n    }\r\n\r\n    return callback ? parts : highlighted\r\n  }\r\n\r\n\r\n  var prepare = (target) => {\r\n    if(typeof target === 'number') target = ''+target\r\n    else if(typeof target !== 'string') target = ''\r\n    var info = prepareLowerInfo(target)\r\n    return new_result(target, {_targetLower:info._lower, _targetLowerCodes:info.lowerCodes, _bitflags:info.bitflags})\r\n  }\r\n\r\n  var cleanup = () => { preparedCache.clear(); preparedSearchCache.clear() }\r\n\r\n\r\n  // Below this point is only internal code\r\n  // Below this point is only internal code\r\n  // Below this point is only internal code\r\n  // Below this point is only internal code\r\n\r\n\r\n  class Result {\r\n    get ['indexes']() { return this._indexes.slice(0, this._indexes.len).sort((a,b)=>a-b) }\r\n    set ['indexes'](indexes) { return this._indexes = indexes }\r\n    ['highlight'](open, close) { return highlight(this, open, close) }\r\n    get ['score']() { return normalizeScore(this._score) }\r\n    set ['score'](score) { this._score = denormalizeScore(score) }\r\n  }\r\n\r\n  class KeysResult extends Array {\r\n    get ['score']() { return normalizeScore(this._score) }\r\n    set ['score'](score) { this._score = denormalizeScore(score) }\r\n  }\r\n\r\n  var new_result = (target, options) => {\r\n    const result = new Result()\r\n    result['target']             = target\r\n    result['obj']                = options.obj                   ?? NULL\r\n    result._score                = options._score                ?? NEGATIVE_INFINITY\r\n    result._indexes              = options._indexes              ?? []\r\n    result._targetLower          = options._targetLower          ?? ''\r\n    result._targetLowerCodes     = options._targetLowerCodes     ?? NULL\r\n    result._nextBeginningIndexes = options._nextBeginningIndexes ?? NULL\r\n    result._bitflags             = options._bitflags             ?? 0\r\n    return result\r\n  }\r\n\r\n\r\n  var normalizeScore = score => {\r\n    if(score === NEGATIVE_INFINITY) return 0\r\n    if(score > 1) return score\r\n    return Math.E ** ( ((-score + 1)**.04307 - 1) * -2)\r\n  }\r\n  var denormalizeScore = normalizedScore => {\r\n    if(normalizedScore === 0) return NEGATIVE_INFINITY\r\n    if(normalizedScore > 1) return normalizedScore\r\n    return 1 - Math.pow((Math.log(normalizedScore) / -2 + 1), 1 / 0.04307)\r\n  }\r\n\r\n\r\n  var prepareSearch = (search) => {\r\n    if(typeof search === 'number') search = ''+search\r\n    else if(typeof search !== 'string') search = ''\r\n    search = search.trim()\r\n    var info = prepareLowerInfo(search)\r\n\r\n    var spaceSearches = []\r\n    if(info.containsSpace) {\r\n      var searches = search.split(/\\s+/)\r\n      searches = [...new Set(searches)] // distinct\r\n      for(var i=0; i<searches.length; i++) {\r\n        if(searches[i] === '') continue\r\n        var _info = prepareLowerInfo(searches[i])\r\n        spaceSearches.push({lowerCodes:_info.lowerCodes, _lower:searches[i].toLowerCase(), containsSpace:false})\r\n      }\r\n    }\r\n\r\n    return {lowerCodes: info.lowerCodes, _lower: info._lower, containsSpace: info.containsSpace, bitflags: info.bitflags, spaceSearches: spaceSearches}\r\n  }\r\n\r\n\r\n\r\n  var getPrepared = (target) => {\r\n    if(target.length > 999) return prepare(target) // don't cache huge targets\r\n    var targetPrepared = preparedCache.get(target)\r\n    if(targetPrepared !== undefined) return targetPrepared\r\n    targetPrepared = prepare(target)\r\n    preparedCache.set(target, targetPrepared)\r\n    return targetPrepared\r\n  }\r\n  var getPreparedSearch = (search) => {\r\n    if(search.length > 999) return prepareSearch(search) // don't cache huge searches\r\n    var searchPrepared = preparedSearchCache.get(search)\r\n    if(searchPrepared !== undefined) return searchPrepared\r\n    searchPrepared = prepareSearch(search)\r\n    preparedSearchCache.set(search, searchPrepared)\r\n    return searchPrepared\r\n  }\r\n\r\n\r\n  var all = (targets, options) => {\r\n    var results = []; results.total = targets.length // this total can be wrong if some targets are skipped\r\n\r\n    var limit = options?.limit || INFINITY\r\n\r\n    if(options?.key) {\r\n      for(var i=0;i<targets.length;i++) { var obj = targets[i]\r\n        var target = getValue(obj, options.key)\r\n        if(target == NULL) continue\r\n        if(!isPrepared(target)) target = getPrepared(target)\r\n        var result = new_result(target.target, {_score: target._score, obj: obj})\r\n        results.push(result); if(results.length >= limit) return results\r\n      }\r\n    } else if(options?.keys) {\r\n      for(var i=0;i<targets.length;i++) { var obj = targets[i]\r\n        var objResults = new KeysResult(options.keys.length)\r\n        for (var keyI = options.keys.length - 1; keyI >= 0; --keyI) {\r\n          var target = getValue(obj, options.keys[keyI])\r\n          if(!target) { objResults[keyI] = noTarget; continue }\r\n          if(!isPrepared(target)) target = getPrepared(target)\r\n          target._score = NEGATIVE_INFINITY\r\n          target._indexes.len = 0\r\n          objResults[keyI] = target\r\n        }\r\n        objResults.obj = obj\r\n        objResults._score = NEGATIVE_INFINITY\r\n        results.push(objResults); if(results.length >= limit) return results\r\n      }\r\n    } else {\r\n      for(var i=0;i<targets.length;i++) { var target = targets[i]\r\n        if(target == NULL) continue\r\n        if(!isPrepared(target)) target = getPrepared(target)\r\n        target._score = NEGATIVE_INFINITY\r\n        target._indexes.len = 0\r\n        results.push(target); if(results.length >= limit) return results\r\n      }\r\n    }\r\n\r\n    return results\r\n  }\r\n\r\n\r\n  var algorithm = (preparedSearch, prepared, allowSpaces=false, allowPartialMatch=false) => {\r\n    if(allowSpaces===false && preparedSearch.containsSpace) return algorithmSpaces(preparedSearch, prepared, allowPartialMatch)\r\n\r\n    var searchLower      = preparedSearch._lower\r\n    var searchLowerCodes = preparedSearch.lowerCodes\r\n    var searchLowerCode  = searchLowerCodes[0]\r\n    var targetLowerCodes = prepared._targetLowerCodes\r\n    var searchLen        = searchLowerCodes.length\r\n    var targetLen        = targetLowerCodes.length\r\n    var searchI          = 0 // where we at\r\n    var targetI          = 0 // where you at\r\n    var matchesSimpleLen = 0\r\n\r\n    // very basic fuzzy match; to remove non-matching targets ASAP!\r\n    // walk through target. find sequential matches.\r\n    // if all chars aren't found then exit\r\n    for(;;) {\r\n      var isMatch = searchLowerCode === targetLowerCodes[targetI]\r\n      if(isMatch) {\r\n        matchesSimple[matchesSimpleLen++] = targetI\r\n        ++searchI; if(searchI === searchLen) break\r\n        searchLowerCode = searchLowerCodes[searchI]\r\n      }\r\n      ++targetI; if(targetI >= targetLen) return NULL // Failed to find searchI\r\n    }\r\n\r\n    var searchI = 0\r\n    var successStrict = false\r\n    var matchesStrictLen = 0\r\n\r\n    var nextBeginningIndexes = prepared._nextBeginningIndexes\r\n    if(nextBeginningIndexes === NULL) nextBeginningIndexes = prepared._nextBeginningIndexes = prepareNextBeginningIndexes(prepared.target)\r\n    targetI = matchesSimple[0]===0 ? 0 : nextBeginningIndexes[matchesSimple[0]-1]\r\n\r\n    // Our target string successfully matched all characters in sequence!\r\n    // Let's try a more advanced and strict test to improve the score\r\n    // only count it as a match if it's consecutive or a beginning character!\r\n    var backtrackCount = 0\r\n    if(targetI !== targetLen) for(;;) {\r\n      if(targetI >= targetLen) {\r\n        // We failed to find a good spot for this search char, go back to the previous search char and force it forward\r\n        if(searchI <= 0) break // We failed to push chars forward for a better match\r\n\r\n        ++backtrackCount; if(backtrackCount > 200) break // exponential backtracking is taking too long, just give up and return a bad match\r\n\r\n        --searchI\r\n        var lastMatch = matchesStrict[--matchesStrictLen]\r\n        targetI = nextBeginningIndexes[lastMatch]\r\n\r\n      } else {\r\n        var isMatch = searchLowerCodes[searchI] === targetLowerCodes[targetI]\r\n        if(isMatch) {\r\n          matchesStrict[matchesStrictLen++] = targetI\r\n          ++searchI; if(searchI === searchLen) { successStrict = true; break }\r\n          ++targetI\r\n        } else {\r\n          targetI = nextBeginningIndexes[targetI]\r\n        }\r\n      }\r\n    }\r\n\r\n    // check if it's a substring match\r\n    var substringIndex = searchLen <= 1 ? -1 : prepared._targetLower.indexOf(searchLower, matchesSimple[0]) // perf: this is slow\r\n    var isSubstring = !!~substringIndex\r\n    var isSubstringBeginning = !isSubstring ? false : substringIndex===0 || prepared._nextBeginningIndexes[substringIndex-1] === substringIndex\r\n\r\n    // if it's a substring match but not at a beginning index, let's try to find a substring starting at a beginning index for a better score\r\n    if(isSubstring && !isSubstringBeginning) {\r\n      for(var i=0; i<nextBeginningIndexes.length; i=nextBeginningIndexes[i]) {\r\n        if(i <= substringIndex) continue\r\n\r\n        for(var s=0; s<searchLen; s++) if(searchLowerCodes[s] !== prepared._targetLowerCodes[i+s]) break\r\n        if(s === searchLen) { substringIndex = i; isSubstringBeginning = true; break }\r\n      }\r\n    }\r\n\r\n    // tally up the score & keep track of matches for highlighting later\r\n    // if it's a simple match, we'll switch to a substring match if a substring exists\r\n    // if it's a strict match, we'll switch to a substring match only if that's a better score\r\n\r\n    var calculateScore = matches => {\r\n      var score = 0\r\n\r\n      var extraMatchGroupCount = 0\r\n      for(var i = 1; i < searchLen; ++i) {\r\n        if(matches[i] - matches[i-1] !== 1) {score -= matches[i]; ++extraMatchGroupCount}\r\n      }\r\n      var unmatchedDistance = matches[searchLen-1] - matches[0] - (searchLen-1)\r\n\r\n      score -= (12+unmatchedDistance) * extraMatchGroupCount // penality for more groups\r\n\r\n      if(matches[0] !== 0) score -= matches[0]*matches[0]*.2 // penality for not starting near the beginning\r\n\r\n      if(!successStrict) {\r\n        score *= 1000\r\n      } else {\r\n        // successStrict on a target with too many beginning indexes loses points for being a bad target\r\n        var uniqueBeginningIndexes = 1\r\n        for(var i = nextBeginningIndexes[0]; i < targetLen; i=nextBeginningIndexes[i]) ++uniqueBeginningIndexes\r\n\r\n        if(uniqueBeginningIndexes > 24) score *= (uniqueBeginningIndexes-24)*10 // quite arbitrary numbers here ...\r\n      }\r\n\r\n      score -= (targetLen - searchLen)/2 // penality for longer targets\r\n\r\n      if(isSubstring)          score /= 1+searchLen*searchLen*1 // bonus for being a full substring\r\n      if(isSubstringBeginning) score /= 1+searchLen*searchLen*1 // bonus for substring starting on a beginningIndex\r\n\r\n      score -= (targetLen - searchLen)/2 // penality for longer targets\r\n\r\n      return score\r\n    }\r\n\r\n    if(!successStrict) {\r\n      if(isSubstring) for(var i=0; i<searchLen; ++i) matchesSimple[i] = substringIndex+i // at this point it's safe to overwrite matchehsSimple with substr matches\r\n      var matchesBest = matchesSimple\r\n      var score = calculateScore(matchesBest)\r\n    } else {\r\n      if(isSubstringBeginning) {\r\n        for(var i=0; i<searchLen; ++i) matchesSimple[i] = substringIndex+i // at this point it's safe to overwrite matchehsSimple with substr matches\r\n        var matchesBest = matchesSimple\r\n        var score = calculateScore(matchesSimple)\r\n      } else {\r\n        var matchesBest = matchesStrict\r\n        var score = calculateScore(matchesStrict)\r\n      }\r\n    }\r\n\r\n    prepared._score = score\r\n\r\n    for(var i = 0; i < searchLen; ++i) prepared._indexes[i] = matchesBest[i]\r\n    prepared._indexes.len = searchLen\r\n\r\n    const result    = new Result()\r\n    result.target   = prepared.target\r\n    result._score   = prepared._score\r\n    result._indexes = prepared._indexes\r\n    return result\r\n  }\r\n  var algorithmSpaces = (preparedSearch, target, allowPartialMatch) => {\r\n    var seen_indexes = new Set()\r\n    var score = 0\r\n    var result = NULL\r\n\r\n    var first_seen_index_last_search = 0\r\n    var searches = preparedSearch.spaceSearches\r\n    var searchesLen = searches.length\r\n    var changeslen = 0\r\n\r\n    // Return _nextBeginningIndexes back to its normal state\r\n    var resetNextBeginningIndexes = () => {\r\n      for(let i=changeslen-1; i>=0; i--) target._nextBeginningIndexes[nextBeginningIndexesChanges[i*2 + 0]] = nextBeginningIndexesChanges[i*2 + 1]\r\n    }\r\n\r\n    var hasAtLeast1Match = false\r\n    for(var i=0; i<searchesLen; ++i) {\r\n      allowPartialMatchScores[i] = NEGATIVE_INFINITY\r\n      var search = searches[i]\r\n\r\n      result = algorithm(search, target)\r\n      if(allowPartialMatch) {\r\n        if(result === NULL) continue\r\n        hasAtLeast1Match = true\r\n      } else {\r\n        if(result === NULL) {resetNextBeginningIndexes(); return NULL}\r\n      }\r\n\r\n      // if not the last search, we need to mutate _nextBeginningIndexes for the next search\r\n      var isTheLastSearch = i === searchesLen - 1\r\n      if(!isTheLastSearch) {\r\n        var indexes = result._indexes\r\n\r\n        var indexesIsConsecutiveSubstring = true\r\n        for(let i=0; i<indexes.len-1; i++) {\r\n          if(indexes[i+1] - indexes[i] !== 1) {\r\n            indexesIsConsecutiveSubstring = false; break;\r\n          }\r\n        }\r\n\r\n        if(indexesIsConsecutiveSubstring) {\r\n          var newBeginningIndex = indexes[indexes.len-1] + 1\r\n          var toReplace = target._nextBeginningIndexes[newBeginningIndex-1]\r\n          for(let i=newBeginningIndex-1; i>=0; i--) {\r\n            if(toReplace !== target._nextBeginningIndexes[i]) break\r\n            target._nextBeginningIndexes[i] = newBeginningIndex\r\n            nextBeginningIndexesChanges[changeslen*2 + 0] = i\r\n            nextBeginningIndexesChanges[changeslen*2 + 1] = toReplace\r\n            changeslen++\r\n          }\r\n        }\r\n      }\r\n\r\n      score += result._score / searchesLen\r\n      allowPartialMatchScores[i] = result._score / searchesLen\r\n\r\n      // dock points based on order otherwise \"c man\" returns Manifest.cpp instead of CheatManager.h\r\n      if(result._indexes[0] < first_seen_index_last_search) {\r\n        score -= (first_seen_index_last_search - result._indexes[0]) * 2\r\n      }\r\n      first_seen_index_last_search = result._indexes[0]\r\n\r\n      for(var j=0; j<result._indexes.len; ++j) seen_indexes.add(result._indexes[j])\r\n    }\r\n\r\n    if(allowPartialMatch && !hasAtLeast1Match) return NULL\r\n\r\n    resetNextBeginningIndexes()\r\n\r\n    // allows a search with spaces that's an exact substring to score well\r\n    var allowSpacesResult = algorithm(preparedSearch, target, /*allowSpaces=*/true)\r\n    if(allowSpacesResult !== NULL && allowSpacesResult._score > score) {\r\n      if(allowPartialMatch) {\r\n        for(var i=0; i<searchesLen; ++i) {\r\n          allowPartialMatchScores[i] = allowSpacesResult._score / searchesLen\r\n        }\r\n      }\r\n      return allowSpacesResult\r\n    }\r\n\r\n    if(allowPartialMatch) result = target\r\n    result._score = score\r\n\r\n    var i = 0\r\n    for (let index of seen_indexes) result._indexes[i++] = index\r\n    result._indexes.len = i\r\n\r\n    return result\r\n  }\r\n\r\n  // we use this instead of just .normalize('NFD').replace(/[\\u0300-\\u036f]/g, '') because that screws with japanese characters\r\n  var remove_accents = (str) => str.replace(/\\p{Script=Latin}+/gu, match => match.normalize('NFD')).replace(/[\\u0300-\\u036f]/g, '')\r\n\r\n  var prepareLowerInfo = (str) => {\r\n    str = remove_accents(str)\r\n    var strLen = str.length\r\n    var lower = str.toLowerCase()\r\n    var lowerCodes = [] // new Array(strLen)    sparse array is too slow\r\n    var bitflags = 0\r\n    var containsSpace = false // space isn't stored in bitflags because of how searching with a space works\r\n\r\n    for(var i = 0; i < strLen; ++i) {\r\n      var lowerCode = lowerCodes[i] = lower.charCodeAt(i)\r\n\r\n      if(lowerCode === 32) {\r\n        containsSpace = true\r\n        continue // it's important that we don't set any bitflags for space\r\n      }\r\n\r\n      var bit = lowerCode>=97&&lowerCode<=122 ? lowerCode-97 // alphabet\r\n              : lowerCode>=48&&lowerCode<=57  ? 26           // numbers\r\n                                                             // 3 bits available\r\n              : lowerCode<=127                ? 30           // other ascii\r\n              :                                 31           // other utf8\r\n      bitflags |= 1<<bit\r\n    }\r\n\r\n    return {lowerCodes:lowerCodes, bitflags:bitflags, containsSpace:containsSpace, _lower:lower}\r\n  }\r\n  var prepareBeginningIndexes = (target) => {\r\n    var targetLen = target.length\r\n    var beginningIndexes = []; var beginningIndexesLen = 0\r\n    var wasUpper = false\r\n    var wasAlphanum = false\r\n    for(var i = 0; i < targetLen; ++i) {\r\n      var targetCode = target.charCodeAt(i)\r\n      var isUpper = targetCode>=65&&targetCode<=90\r\n      var isAlphanum = isUpper || targetCode>=97&&targetCode<=122 || targetCode>=48&&targetCode<=57\r\n      var isBeginning = isUpper && !wasUpper || !wasAlphanum || !isAlphanum\r\n      wasUpper = isUpper\r\n      wasAlphanum = isAlphanum\r\n      if(isBeginning) beginningIndexes[beginningIndexesLen++] = i\r\n    }\r\n    return beginningIndexes\r\n  }\r\n  var prepareNextBeginningIndexes = (target) => {\r\n    target = remove_accents(target)\r\n    var targetLen = target.length\r\n    var beginningIndexes = prepareBeginningIndexes(target)\r\n    var nextBeginningIndexes = [] // new Array(targetLen)     sparse array is too slow\r\n    var lastIsBeginning = beginningIndexes[0]\r\n    var lastIsBeginningI = 0\r\n    for(var i = 0; i < targetLen; ++i) {\r\n      if(lastIsBeginning > i) {\r\n        nextBeginningIndexes[i] = lastIsBeginning\r\n      } else {\r\n        lastIsBeginning = beginningIndexes[++lastIsBeginningI]\r\n        nextBeginningIndexes[i] = lastIsBeginning===undefined ? targetLen : lastIsBeginning\r\n      }\r\n    }\r\n    return nextBeginningIndexes\r\n  }\r\n\r\n  var preparedCache       = new Map()\r\n  var preparedSearchCache = new Map()\r\n\r\n  // the theory behind these being globals is to reduce garbage collection by not making new arrays\r\n  var matchesSimple = []; var matchesStrict = []\r\n  var nextBeginningIndexesChanges = [] // allows straw berry to match strawberry well, by modifying the end of a substring to be considered a beginning index for the rest of the search\r\n  var keysSpacesBestScores = []; var allowPartialMatchScores = []\r\n  var tmpTargets = []; var tmpResults = []\r\n\r\n  // prop = 'key'                  2.5ms optimized for this case, seems to be about as fast as direct obj[prop]\r\n  // prop = 'key1.key2'            10ms\r\n  // prop = ['key1', 'key2']       27ms\r\n  // prop = obj => obj.tags.join() ??ms\r\n  var getValue = (obj, prop) => {\r\n    var tmp = obj[prop]; if(tmp !== undefined) return tmp\r\n    if(typeof prop === 'function') return prop(obj) // this should run first. but that makes string props slower\r\n    var segs = prop\r\n    if(!Array.isArray(prop)) segs = prop.split('.')\r\n    var len = segs.length\r\n    var i = -1\r\n    while (obj && (++i < len)) obj = obj[segs[i]]\r\n    return obj\r\n  }\r\n\r\n  var isPrepared = (x) => { return typeof x === 'object' && typeof x._bitflags === 'number' }\r\n  var INFINITY = Infinity; var NEGATIVE_INFINITY = -INFINITY\r\n  var noResults = []; noResults.total = 0\r\n  var NULL = null\r\n\r\n  var noTarget = prepare('')\r\n\r\n  // Hacked version of https://github.com/lemire/FastPriorityQueue.js\r\n  var fastpriorityqueue=r=>{var e=[],o=0,a={},v=r=>{for(var a=0,v=e[a],c=1;c<o;){var s=c+1;a=c,s<o&&e[s]._score<e[c]._score&&(a=s),e[a-1>>1]=e[a],c=1+(a<<1)}for(var f=a-1>>1;a>0&&v._score<e[f]._score;f=(a=f)-1>>1)e[a]=e[f];e[a]=v};return a.add=(r=>{var a=o;e[o++]=r;for(var v=a-1>>1;a>0&&r._score<e[v]._score;v=(a=v)-1>>1)e[a]=e[v];e[a]=r}),a.poll=(r=>{if(0!==o){var a=e[0];return e[0]=e[--o],v(),a}}),a.peek=(r=>{if(0!==o)return e[0]}),a.replaceTop=(r=>{e[0]=r,v()}),a}\r\n  var q = fastpriorityqueue() // reuse this\r\n\r\n  // fuzzysort is written this way for minification. all names are mangeled unless quoted\r\n  return {'single':single, 'go':go, 'prepare':prepare, 'cleanup':cleanup}\r\n}) // UMD\r\n","import { PrimitiveType } from \"@ourworldindata/types\"\nimport * as _ from \"lodash-es\"\nimport fuzzysort from \"fuzzysort\"\n\n// Structural mirrors of fuzzysort's types: fuzzysort only declares a global\n// `Fuzzysort` ambient namespace, which isn't in scope for consumers of our\n// published packages, so the exported API surface must not reference it.\nexport interface FuzzySearchResult {\n    /** 1 is a perfect match. 0.5 is a good match. 0 is no match. */\n    readonly score: number\n    /** Your original target string */\n    readonly target: string\n    readonly indexes: ReadonlyArray<number>\n    highlight(highlightOpen?: string, highlightClose?: string): string\n    highlight<T>(callback: (match: string, index: number) => T): (string | T)[]\n}\n\nexport interface FuzzySearchResults extends ReadonlyArray<FuzzySearchResult> {\n    /** Total matches before limit */\n    readonly total: number\n}\n\nexport interface FuzzySearchOptions {\n    /** Don't return matches worse than this (higher is faster) */\n    threshold?: number\n    /** Don't return more results than this (lower is faster) */\n    limit?: number\n    /** If true, returns all results for an empty search */\n    all?: boolean\n}\n\nexport interface FuzzySearchPrepared {\n    /** Your original target string */\n    readonly target: string\n}\n\nexport class FuzzySearch<T> {\n    strings: FuzzySearchPrepared[]\n    datamap: Record<string, T[]>\n    uniqByFn: ((obj: T) => PrimitiveType) | undefined\n    opts: FuzzySearchOptions | undefined\n\n    private constructor(\n        datamap: Record<string, T[]>,\n        uniqByFn?: (obj: T) => PrimitiveType,\n        opts?: FuzzySearchOptions\n    ) {\n        const rawStrings = Object.keys(datamap)\n        this.strings = rawStrings.map((s) => fuzzysort.prepare(s))\n        this.datamap = datamap\n        this.uniqByFn = uniqByFn\n        this.opts = opts\n    }\n\n    static withKey<T>(\n        data: T[],\n        keyFn: (obj: T) => string,\n        opts?: FuzzySearchOptions\n    ): FuzzySearch<T> {\n        const datamap = _.groupBy(data, keyFn)\n        return new FuzzySearch(datamap, undefined, opts)\n    }\n\n    // Allows for multiple keys per object, e.g. aliases:\n    // [\n    //     { name: \"Netherlands\", \"keys\": [\"Netherlands\", \"Nederland\"] },\n    //     { name: \"Spain\", \"keys\": [\"Spain\", \"España\"] },\n    // ]\n    static withKeyArray<T>(\n        data: T[],\n        keysFn: (obj: T) => string[],\n        uniqByFn?: (obj: T) => PrimitiveType,\n        opts?: FuzzySearchOptions\n    ): FuzzySearch<T> {\n        const datamap: Record<string, T[]> = {}\n        data.forEach((d) => {\n            keysFn(d).forEach((key) => {\n                if (!datamap[key]) datamap[key] = [d]\n                else datamap[key].push(d)\n            })\n        })\n        return new FuzzySearch(datamap, uniqByFn, opts)\n    }\n\n    search(input: string): T[] {\n        const results = fuzzysort\n            .go(input, this.strings, this.opts)\n            .flatMap((result) => this.datamap[result.target])\n\n        if (this.uniqByFn) {\n            return _.uniqBy(results, this.uniqByFn)\n        }\n        return results\n    }\n\n    searchResults(input: string): FuzzySearchResults {\n        return fuzzysort.go(input, this.strings, this.opts)\n    }\n\n    single(input: string, target: string): FuzzySearchResult | null {\n        return fuzzysort.single(input, target)\n    }\n}\n","// Constants for a/b experiments\n\nexport const EXPERIMENT_ARM_SEPARATOR = \"--\"\nexport const EXPERIMENT_PREFIX = \"exp\"\n\n// Raw id (without the `exp-` prefix) of the data page metadata box experiment.\n// Shared between the baker (to decide which charts get the extra per-indicator\n// metadata loaded) and the data page React component (to gate the dual-arm\n// markup), so the experiment's `paths` list is the single source of truth for\n// which graphers are enrolled.\nexport const DATA_PAGE_METADATA_EXPERIMENT_ID = \"data-page-metadata-v1\"\nexport const DATA_PAGE_METADATA_EXPERIMENT_TREATMENT_ARM = \"treatment\"\n\n// Randomised follow-up to v1 (disjoint page sets; v1's pages stay in v1).\nexport const DATA_PAGE_METADATA_V2_EXPERIMENT_ID = \"data-page-metadata-v2\"\n\n// Raw id (without the `exp-` prefix) of the /latest sticky filters experiment.\n// Shared between the experiment config, the /latest React components (to\n// gate the reveal-on-scroll behaviour) and the analytics layer (to tag the\n// /latest events with the visitor's arm).\nexport const LATEST_STICKY_FILTERS_EXPERIMENT_ID = \"latest-sticky-filters-v1\"\nexport const LATEST_STICKY_FILTERS_ARMS = {\n    notSticky: \"not-sticky\",\n    revealOnScrollUp: \"reveal-on-scroll-up\",\n    fullySticky: \"fully-sticky\",\n} as const\n","/*\n * Checks whether all strings in an array are unique.\n *\n * Iterates through the provided array and returns `false` if any duplicate strings are found.\n * Returns `true` if all values are distinct.\n *\n * @param values - An array of strings to check for uniqueness.\n * @returns `true` if all strings are unique, `false` otherwise.\n *\n * @example\n * validateUniqueStrings([\"a\", \"b\", \"c\"]) // true\n * validateUniqueStrings([\"a\", \"b\", \"a\"]) // false\n */\nexport function validateUniqueStrings(values: string[]): boolean {\n    const seen = new Set<string>()\n    for (const value of values) {\n        if (seen.has(value)) return false\n        seen.add(value)\n    }\n    return true\n}\n","import { validateUniqueStrings } from \"./utils.js\"\nimport { EXPERIMENT_ARM_SEPARATOR, EXPERIMENT_PREFIX } from \"./constants.js\"\n\nconst DEFAULT_COOKIE_EXPIRY = new Date(Date.now() + 7 * (24 * 60 * 60 * 1000)) // cookie expires in 7 days\n\n/**\n * Represents an experiment with multiple arms (variants) for A/B testing or feature experimentation.\n *\n * The `Experiment` class provides configuration and validation logic for an experiment,\n * including the experiment's unique identifier, expiration date, arms (variants), and applicable cookie paths.\n *\n *\n * @property {ExperimentId} id - Unique identifier for the experiment.\n * @property {Date} expires - The expiration date of the experiment.\n * @property {ExperimentArm[]} arms - The list of arms (variants) in the experiment, each with its own fraction.\n * @property {CookiePath[]} paths - The list of cookie paths where the experiment applies.\n *\n * @method getArmById - Retrieves an arm by its unique identifier.\n * @method isExpired - Determines if the experiment has expired.\n *\n * @throws {Error} If the sum of arm fractions does not equal 1, if arm IDs are not unique, or if\n * any `${experimentId}-${armId}` exceeds 100 characters.\n */\nexport class Experiment {\n    id: ExperimentId\n    expires: Date\n    arms: ExperimentArm[]\n    paths: string[]\n\n    constructor(data: RawExperiment) {\n        this.id = asExperimentId(`${EXPERIMENT_PREFIX}-${data.id}`)\n        this.expires =\n            data.expires !== undefined\n                ? new Date(data.expires)\n                : DEFAULT_COOKIE_EXPIRY\n        this.arms = data.arms.map((a) => ({\n            id: asArmId(a.id),\n            fraction: a.fraction,\n            replaysSessionSampleRate: a.replaysSessionSampleRate,\n        }))\n        this.paths = data.paths\n\n        this.validate()\n    }\n\n    private validate(): void {\n        if (!this.validateArmFractions()) {\n            throw new Error(\n                `Arm fractions in experiment \"${this.id}\" do not sum to 1`\n            )\n        }\n        if (!this.validateUniqueArmIds()) {\n            throw new Error(`Arm IDs in experiment \"${this.id}\" are not unique`)\n        }\n\n        if (!this.validateArmIdLengths()) {\n            throw new Error(\n                `One or more arms in experiment \"${this.id}\" are >100 characters when concatenated with experiment id`\n            )\n        }\n    }\n\n    private validateArmFractions(): boolean {\n        const total = this.arms.reduce((sum, arm) => sum + arm.fraction, 0)\n        return Math.abs(total - 1) < 1e-6\n    }\n\n    private validateUniqueArmIds(): boolean {\n        const ids = this.arms.map((a) => a.id)\n        return validateUniqueStrings(ids)\n    }\n\n    private validateArmIdLengths(): boolean {\n        return this.arms.every(\n            (arm) =>\n                `${this.id}${EXPERIMENT_ARM_SEPARATOR}${arm.id}`.length <= 100\n        )\n    }\n\n    getArmById(id: string): ExperimentArm | undefined {\n        return this.arms.find((a) => a.id === id)\n    }\n\n    isExpired(): boolean {\n        return new Date(this.expires).getTime() < Date.now()\n    }\n\n    /*\n     * Check if a URL matches any of the experiment paths.\n     *\n     * Checks if the given URL matches any of the cookie paths defined for the\n     * experiment, following the path-matching rules in https://datatracker.ietf.org/doc/html/rfc6265#section-5.1.4.\n     *\n     * @param url - The URL to check.\n     *\n     * @returns `true` if the URL matches any of the experiment paths, `false` otherwise.\n     */\n    isUrlInPaths(url: string): boolean {\n        return this.paths.some((path) => {\n            // Case 1: Exact match\n            if (url === path) {\n                return true\n            }\n\n            // Case 2: Cookie path is a prefix and ends with \"/\"\n            if (path.endsWith(\"/\") && url.startsWith(path)) {\n                return true\n            }\n\n            // Case 3: Cookie path is a prefix and the next character in request path is \"/\"\n            if (url.startsWith(path) && url.charAt(path.length) === \"/\") {\n                return true\n            }\n\n            // If none of the above, return false\n            return false\n        })\n    }\n}\n\nexport type ExperimentArm = {\n    id: ArmId // unique arm id\n    fraction: number // fraction of visitors to assign to this arm\n    replaysSessionSampleRate?: number // session replay sample rate for this arm\n}\n\ntype RawArm = {\n    id: string\n    fraction: number\n    replaysSessionSampleRate?: number\n}\n\ntype RawExperiment = {\n    id: string\n    expires: string\n    arms: RawArm[]\n    paths: string[]\n}\n\ntype ExperimentId = string & { readonly __brand: \"ExperimentId\" }\n\nfunction asExperimentId(value: string): ExperimentId {\n    if (value.length > 32) {\n        throw new Error(\"Experiment ID exceeds maximum length of 32 characters\")\n    }\n\n    // Check if the value contains only allowed characters for Sentry tag keys:\n    // https://docs.sentry.io/platforms/javascript/guides/nextjs/enriching-events/tags\n    const allowedPattern = /^[a-zA-Z0-9_.:-]+$/\n    if (!allowedPattern.test(value)) {\n        throw new Error(\n            \"Experiment ID contains invalid characters. Only letters (a-zA-Z), numbers (0-9), underscores (_), periods (.), colons (:), and dashes (-) are allowed\"\n        )\n    }\n\n    return value as ExperimentId\n}\n\ntype ArmId = string & { readonly __brand: \"ArmId\" }\n\nfunction asArmId(value: string): ArmId {\n    if (value.length > 200) {\n        throw new Error(\"Arm ID exceeds maximum length of 200 characters\")\n    }\n\n    // Check if the value contains newline characters (not allowed for Sentry tag values)\n    if (value.includes(\"\\n\")) {\n        throw new Error(\n            \"Arm ID contains invalid characters. Newline characters (\\\\n) are not allowed\"\n        )\n    }\n\n    return value as ArmId\n}\n\nexport function validateUniqueExperimentIds(\n    experiments: Experiment[]\n): boolean {\n    const ids = experiments.map((e) => e.id)\n    return validateUniqueStrings(ids)\n}\n","import {\n    DATA_PAGE_METADATA_EXPERIMENT_ID,\n    DATA_PAGE_METADATA_EXPERIMENT_TREATMENT_ARM,\n    DATA_PAGE_METADATA_V2_EXPERIMENT_ID,\n    EXPERIMENT_PREFIX,\n    LATEST_STICKY_FILTERS_ARMS,\n    LATEST_STICKY_FILTERS_EXPERIMENT_ID,\n} from \"./constants.js\"\nimport { Experiment } from \"./Experiment.js\"\n\n/*\n * Hard-coded active experiments.\n */\nexport const experiments: Experiment[] = [\n    /*\n     * Experiment: all-charts-vs-featured-v1\n     *\n     * This experiment trials the \"Featured metrics\" block in place of the \"All Charts\" block on\n     * a sample of modular topic pages and data pages. The goal of the experiment is to\n     * get a feel for differences in user engagement, controlling for the the location it appears.\n     *\n     * Conditions:\n     * - (a) status quo (all charts block)\n     * - (b) featured metrics block (treatment)\n     *\n     */\n    new Experiment({\n        id: \"all-charts-vs-featured-v1\",\n        expires: \"2026-03-24T00:00:00.000Z\",\n        arms: [\n            {\n                id: \"all-charts\",\n                fraction: 0.7,\n                replaysSessionSampleRate: 0.2,\n            },\n            {\n                id: \"featured-metrics\",\n                fraction: 0.3,\n                replaysSessionSampleRate: 0.33,\n            },\n        ],\n        paths: [\n            // modular topic pages\n            \"/population-growth\",\n            \"/poverty\",\n            \"/co2-and-greenhouse-gas-emissions\",\n            \"/life-expectancy\",\n            \"/agricultural-production\",\n            \"/natural-disasters\",\n            \"/causes-of-death\",\n            \"/war-and-peace\",\n            \"/migration\",\n            \"/artificial-intelligence\",\n            \"/child-mortality\",\n            \"/economic-growth\",\n            \"/economic-inequality\",\n            \"/democracy\",\n            \"/climate-change\",\n            // data pages\n            \"/grapher/democracy-index-eiu\",\n            \"/grapher/gdp-per-capita-worldbank\",\n            \"/grapher/co-emissions-per-capita\",\n            \"/grapher/life-expectancy\",\n            \"/grapher/child-mortality\",\n            \"/grapher/population\",\n            \"/grapher/human-rights-index-vdem\",\n            \"/grapher/share-of-population-in-extreme-poverty\",\n            \"/grapher/economic-inequality-gini-index\",\n            \"/grapher/per-capita-energy-use\",\n            \"/grapher/children-born-per-woman\",\n            \"/grapher/nuclear-warhead-stockpiles-lines\",\n            \"/grapher/daily-per-capita-caloric-supply\",\n            \"/grapher/eating-disorders-prevalence\",\n            \"/grapher/share-electricity-nuclear\",\n            \"/grapher/mean-years-of-schooling-long-run\",\n            \"/grapher/female-homicide-victims\",\n            \"/grapher/share-of-individuals-using-the-internet\",\n            \"/grapher/prevalence-of-undernourishment\",\n            \"/grapher/incidence-of-hivaids\",\n        ],\n    }),\n    new Experiment({\n        id: \"user-survey-role-v1\",\n        expires: \"2026-03-20T00:00:00.000Z\",\n        arms: [\n            { id: \"long-list\", fraction: 1 / 3 },\n            { id: \"short-list\", fraction: 1 / 3 },\n            { id: \"free-form\", fraction: 1 / 3 },\n        ],\n        paths: [\"/\"],\n    }),\n    /*\n     * Experiment: data-page-metadata-v1\n     *\n     * Trials a redesigned \"metadata box\" beneath the chart on data pages. The\n     * box consolidates \"What you should know about this indicator\", FAQs, data\n     * sources, and citation guidance into a single collapsible block, with an\n     * indicator switcher for charts that plot multiple Y-indicators.\n     *\n     * Conditions:\n     * - (a) control: the current data page (AboutThisData + Sources/Reuse sections)\n     * - (b) treatment: the new metadata box in place of those sections\n     */\n    new Experiment({\n        id: DATA_PAGE_METADATA_EXPERIMENT_ID,\n        expires: \"2026-12-31T00:00:00.000Z\",\n        arms: [\n            { id: \"control\", fraction: 0.0 },\n            { id: \"treatment\", fraction: 1.0, replaysSessionSampleRate: 0.33 },\n        ],\n        paths: [\n            // single indicator data pages (multi-indicator data pages aren't supported yet)\n            \"/grapher/gdp-per-capita-maddison-project-database\",\n            \"/grapher/co-emissions-per-capita\",\n            \"/grapher/democracy-index-eiu\",\n            \"/grapher/life-expectancy\",\n            \"/grapher/cross-country-literacy-rates\",\n            \"/grapher/human-development-index\",\n            \"/grapher/share-of-population-in-extreme-poverty\",\n            \"/grapher/human-rights-index-vdem\",\n            \"/grapher/daily-per-capita-caloric-supply\",\n            \"/grapher/per-capita-energy-use\",\n        ],\n    }),\n    /*\n     * Experiment: data-page-metadata-v2\n     *\n     * Randomised follow-up to v1: 330 data pages, 165 treatment (metadata box)\n     * / 165 control (current design), cluster randomised by page.\n     *\n     * Only the treatment pages are listed here, v1-style. The full pre-registered\n     * assignment (both arms, pairs, seed) lives in owid/analytics#1038\n     * (experiments/briefs/data_page_metadata_v2_20260803/). Don't edit this\n     * list mid-run without updating that record; a control page must never\n     * appear here. Arms are identified in the analysis by slug, not by the\n     * GA4 experiment param (the cookie follows visitors onto other pages).\n     *\n     * To end the experiment, edit this config and rebake in the same step.\n     */\n    new Experiment({\n        id: DATA_PAGE_METADATA_V2_EXPERIMENT_ID,\n        expires: \"2026-12-31T00:00:00.000Z\",\n        arms: [\n            { id: \"control\", fraction: 0.0 },\n            { id: DATA_PAGE_METADATA_EXPERIMENT_TREATMENT_ARM, fraction: 1.0 },\n        ],\n        paths: [\n            \"/grapher/age-dependency-ratio-of-working-age-population\",\n            \"/grapher/age-dependency-ratio-old\",\n            \"/grapher/agricultural-output-dollars\",\n            \"/grapher/agriculture-share-gdp\",\n            \"/grapher/air-passengers-carried\",\n            \"/grapher/annual-area-burnt-by-wildfires\",\n            \"/grapher/annual-carbon-dioxide-emissions\",\n            \"/grapher/annual-co2-cement\",\n            \"/grapher/annual-co2-emissions-per-country\",\n            \"/grapher/annual-healthcare-expenditure-per-capita\",\n            \"/grapher/annual-temperature-anomalies\",\n            \"/grapher/average-annual-surface-temperature\",\n            \"/grapher/average-height-of-men-by-year-of-birth\",\n            \"/grapher/bipolar-disorder-prevalence\",\n            \"/grapher/burden-of-disease\",\n            \"/grapher/carbon-dioxide-emissions-factor\",\n            \"/grapher/cereal-production\",\n            \"/grapher/child-mortality\",\n            \"/grapher/children-born-per-woman\",\n            \"/grapher/chocolate-consumption-per-person\",\n            \"/grapher/civil-society-participation-index\",\n            \"/grapher/co2-emissions-transport\",\n            \"/grapher/coffee-production-by-region\",\n            \"/grapher/consumer-price-index\",\n            \"/grapher/covid-world-unvaccinated-people\",\n            \"/grapher/crude-birth-rate\",\n            \"/grapher/crude-death-rate\",\n            \"/grapher/cumulative-co-emissions\",\n            \"/grapher/cumulative-co2-emissions-region\",\n            \"/grapher/cumulative-covid-deaths-region\",\n            \"/grapher/cumulative-covid-vaccinations\",\n            \"/grapher/data-centers-share-electricity-demand\",\n            \"/grapher/death-rate-from-malnutrition\",\n            \"/grapher/deaths-due-to-measles-gbd\",\n            \"/grapher/deaths-from-conflict-and-terrorism\",\n            \"/grapher/deaths-from-diarrheal-diseases\",\n            \"/grapher/deaths-in-armed-conflicts-by-country\",\n            \"/grapher/deliberative-democracy-index-vdem\",\n            \"/grapher/dengue-incidence\",\n            \"/grapher/diabetes-prevalence\",\n            \"/grapher/drowning-death-rates\",\n            \"/grapher/earthquake-deaths\",\n            \"/grapher/electoral-democracy-index\",\n            \"/grapher/energy-intensity\",\n            \"/grapher/excess-mortality-p-scores-projected-baseline\",\n            \"/grapher/female-homicide-rate\",\n            \"/grapher/fire-death-rates\",\n            \"/grapher/foreign-aid-received-net\",\n            \"/grapher/foreign-direct-investment-net-inflows-as-share-of-gdp\",\n            \"/grapher/forest-area-as-share-of-land-area\",\n            \"/grapher/free-and-fair-elections-index\",\n            \"/grapher/freedom-of-expression-index\",\n            \"/grapher/freedom-score-fh\",\n            \"/grapher/fruit-consumption-per-capita\",\n            \"/grapher/future-life-expectancy-projections\",\n            \"/grapher/gdp-maddison-project-database\",\n            \"/grapher/gdp-penn-world-table\",\n            \"/grapher/gdp-per-capita-worldbank-constant-usd\",\n            \"/grapher/gdp-per-person-employed-constant-ppp\",\n            \"/grapher/gdp-world-regions-stacked-area\",\n            \"/grapher/gender-inequality-index-from-the-human-development-report\",\n            \"/grapher/ghg-per-kg-poore\",\n            \"/grapher/global-gdp-over-the-long-run\",\n            \"/grapher/global-plastics-production\",\n            \"/grapher/global-precipitation-anomaly\",\n            \"/grapher/health-expenditure-and-financing-per-capita\",\n            \"/grapher/healthy-life-expectancy-at-birth\",\n            \"/grapher/homicide-rate\",\n            \"/grapher/homicide-rate-unodc\",\n            \"/grapher/homicide-rates-from-firearms\",\n            \"/grapher/households-air-conditioning\",\n            \"/grapher/human-papillomavirus-vaccine-immunization-schedule\",\n            \"/grapher/incidence-of-malaria\",\n            \"/grapher/inequality-adjusted-human-development-index\",\n            \"/grapher/infant-mortality\",\n            \"/grapher/inflation-of-consumer-prices\",\n            \"/grapher/installed-solar-pv-capacity\",\n            \"/grapher/international-tourist-trips\",\n            \"/grapher/international-tourist-trips-per-1000-people\",\n            \"/grapher/labor-productivity-per-hour-pennworldtable\",\n            \"/grapher/labor-share-of-gdp\",\n            \"/grapher/land-area-km\",\n            \"/grapher/land-use-protein-poore\",\n            \"/grapher/life-expectancy-hmd-unwpp\",\n            \"/grapher/lithium-production\",\n            \"/grapher/living-languages\",\n            \"/grapher/locations-of-ongoing-armed-conflicts\",\n            \"/grapher/maternal-mortality\",\n            \"/grapher/mean-years-of-schooling-long-run\",\n            \"/grapher/median-income-after-tax-lis\",\n            \"/grapher/methane-emissions\",\n            \"/grapher/migrant-stock-total\",\n            \"/grapher/military-spending-as-a-share-of-gdp-sipri\",\n            \"/grapher/milk-production-tonnes\",\n            \"/grapher/mobile-cellular-subscriptions-per-100-people\",\n            \"/grapher/monthly-spending-data-center-us\",\n            \"/grapher/monthly-temperature-anomalies\",\n            \"/grapher/multidimensional-poverty-index-mpi\",\n            \"/grapher/net-zero-targets\",\n            \"/grapher/number-airline-passengers\",\n            \"/grapher/number-of-natural-disaster-events\",\n            \"/grapher/number-species-threatened\",\n            \"/grapher/oil-prices-inflation-adjusted\",\n            \"/grapher/outdoor-air-pollution-exposure\",\n            \"/grapher/parameters-in-notable-artificial-intelligence-systems\",\n            \"/grapher/parkinsons-disease-prevalence-ihme\",\n            \"/grapher/per-capita-egg-consumption-kilograms-per-year\",\n            \"/grapher/per-capita-ghg-emissions\",\n            \"/grapher/per-capita-milk-consumption\",\n            \"/grapher/period-average-age-of-mothers\",\n            \"/grapher/pesticide-use-per-hectare-of-cropland\",\n            \"/grapher/political-corruption-index\",\n            \"/grapher/political-polarization-score\",\n            \"/grapher/population-density\",\n            \"/grapher/population-of-the-worlds-largest-cities\",\n            \"/grapher/population-unwpp\",\n            \"/grapher/potato-production\",\n            \"/grapher/poultry-production-tonnes\",\n            \"/grapher/prison-population-rate\",\n            \"/grapher/projections-extreme-poverty-wb\",\n            \"/grapher/refugee-population-by-country-or-territory-of-asylum\",\n            \"/grapher/refugee-population-by-country-or-territory-of-origin\",\n            \"/grapher/reported-rabies-deaths\",\n            \"/grapher/rice-production\",\n            \"/grapher/road-accident-deaths-per-passenger-kilometers\",\n            \"/grapher/schizophrenia-prevalence\",\n            \"/grapher/self-reported-trust-attitudes\",\n            \"/grapher/share-companies-using-artificial-intelligence\",\n            \"/grapher/share-living-with-less-than-1-int--per-day\",\n            \"/grapher/share-living-with-less-than-10-int--per-day\",\n            \"/grapher/share-living-with-less-than-320-int--per-day\",\n            \"/grapher/share-living-with-less-than-upper-middle-income-poverty-line\",\n            \"/grapher/share-of-adults-defined-as-obese\",\n            \"/grapher/share-of-adults-who-smoke\",\n            \"/grapher/share-of-births-outside-marriage\",\n            \"/grapher/share-of-consumer-expenditure-spent-on-food\",\n            \"/grapher/share-of-cumulative-co2\",\n            \"/grapher/share-of-government-expenditure-going-to-interest-payments\",\n            \"/grapher/share-of-individuals-using-the-internet\",\n            \"/grapher/share-of-out-of-pocket-expenditure-on-healthcare\",\n            \"/grapher/share-of-population-urban\",\n            \"/grapher/share-of-the-population-with-access-to-electricity\",\n            \"/grapher/share-people-vaccinated-covid\",\n            \"/grapher/share-with-drug-use-disorders\",\n            \"/grapher/so-emissions-by-world-region-in-million-tonnes\",\n            \"/grapher/social-spending-oecd-longrun\",\n            \"/grapher/solar-pv-prices\",\n            \"/grapher/soybean-production\",\n            \"/grapher/test-scores-ai-capabilities-relative-human-performance\",\n            \"/grapher/tomato-production\",\n            \"/grapher/total-alcohol-consumption-per-capita-litres-of-pure-alcohol\",\n            \"/grapher/total-ghg-emissions\",\n            \"/grapher/total-gov-expenditure-percapita-oecd\",\n            \"/grapher/tourism-gdp-proportion-of-total-gdp\",\n            \"/grapher/unemployment-rate\",\n            \"/grapher/universal-health-coverage-index\",\n            \"/grapher/urban-population-share-2050\",\n            \"/grapher/voter-turnout-of-registered-voters\",\n            \"/grapher/weekly-covid-deaths\",\n            \"/grapher/weekly-growth-covid-deaths\",\n            \"/grapher/wheat-production\",\n            \"/grapher/wheat-yields\",\n            \"/grapher/wine-consumption-per-capita\",\n            \"/grapher/world-bank-income-groups\",\n            \"/grapher/yearly-number-of-objects-launched-into-outer-space\",\n        ],\n    }),\n    // Compare normal scrolling, reveal-on-scroll-up, and fully sticky filters.\n    // Mobile pins only the topic pills.\n    // Layout and testing instructions: site/latest/README.md.\n    new Experiment({\n        id: LATEST_STICKY_FILTERS_EXPERIMENT_ID,\n        expires: \"2026-11-30T00:00:00.000Z\",\n        arms: [\n            { id: LATEST_STICKY_FILTERS_ARMS.notSticky, fraction: 1 / 3 },\n            {\n                id: LATEST_STICKY_FILTERS_ARMS.revealOnScrollUp,\n                fraction: 1 / 3,\n            },\n            { id: LATEST_STICKY_FILTERS_ARMS.fullySticky, fraction: 1 / 3 },\n        ],\n        paths: [\"/latest\"],\n    }),\n]\n\n/**\n * True if an experiment with the given raw id (i.e. without the `exp-`\n * prefix the `Experiment` constructor adds) is registered, not expired, and\n * the given url is in its `paths` list. Centralises the lookup so callers\n * don't need to know about the prefix convention or the expiry semantics.\n * The actual path-matching is delegated to `Experiment.isUrlInPaths`.\n */\nexport function isUrlInActiveExperiment(rawId: string, url: string): boolean {\n    const id = `${EXPERIMENT_PREFIX}-${rawId}`\n    const exp = experiments.find((e) => e.id === id)\n    return !!exp && !exp.isExpired() && exp.isUrlInPaths(url)\n}\n\n/**\n * Whether a data page renders the redesigned metadata layout: true for v1's\n * pages and v2's treatment pages. Used by both the baker and the page component.\n */\nexport function isDataPageMetadataRedesignActive(url: string): boolean {\n    return (\n        isUrlInActiveExperiment(DATA_PAGE_METADATA_EXPERIMENT_ID, url) ||\n        isUrlInActiveExperiment(DATA_PAGE_METADATA_V2_EXPERIMENT_ID, url)\n    )\n}\n","function stringifyAttribute(name, value) {\n    if (!value) {\n        return '';\n    }\n    let stringified = '; ' + name;\n    if (value === true) {\n        return stringified; // boolean attributes shouldn't have a value\n    }\n    return stringified + '=' + value;\n}\nfunction stringifyAttributes(attributes) {\n    if (typeof attributes.expires === 'number') {\n        const milliseconds = Math.min(Date.now() + attributes.expires * 864e+5, 864e+13);\n        attributes.expires = new Date(milliseconds);\n    }\n    return stringifyAttribute('Expires', attributes.expires ? attributes.expires.toUTCString() : '')\n        + stringifyAttribute('Domain', attributes.domain)\n        + stringifyAttribute('Path', attributes.path)\n        + stringifyAttribute('Secure', attributes.secure)\n        + stringifyAttribute('Partitioned', attributes.partitioned)\n        + stringifyAttribute('SameSite', attributes.sameSite);\n}\nexport function encode(name, value, attributes) {\n    return encodeURIComponent(name)\n        .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent) // allowed special characters\n        .replace(/\\(/g, '%28').replace(/\\)/g, '%29') // replace opening and closing parens\n        + '=' + encodeURIComponent(value)\n        // allowed special characters\n        .replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g, decodeURIComponent)\n        + stringifyAttributes(attributes);\n}\nexport function parse(cookieString) {\n    let result = {};\n    const cookies = cookieString ? cookieString.split('; ') : [];\n    for (let cookie of cookies) {\n        const parts = cookie.split('=');\n        let value = parts.slice(1).join('=');\n        if (value[0] === '\"') {\n            value = value.slice(1, -1);\n        }\n        try {\n            const name = decodeURIComponent(parts[0]);\n            result[name] = value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent);\n        }\n        catch (e) {\n            // ignore cookies with invalid name/value encoding\n        }\n    }\n    return result;\n}\nexport function getAll() {\n    return parse(document.cookie);\n}\nexport function get(name) {\n    return getAll()[name];\n}\nexport function set(name, value, attributes) {\n    document.cookie = encode(name, value, { path: '/', ...attributes });\n}\nexport function remove(name, attributes) {\n    set(name, '', { ...attributes, expires: -1 });\n}\n","import { getAll as getAllCookies } from \"es-cookie\"\nimport { EXPERIMENT_PREFIX } from \"./constants.js\"\nimport { experiments } from \"./config.js\"\n\nexport type ExperimentState = Record<\n    string,\n    { arm: string; isPageInExperiment: boolean }\n>\n\nexport const defaultExperimentState: ExperimentState = {}\n\n/**\n * Gets the experiment state for the current page.\n *\n * This function should be called once when the module loads.\n *\n * @returns {ExperimentState} The experiment state for the current page.\n */\nexport function getExperimentState(): ExperimentState {\n    if (typeof window === \"undefined\") {\n        return defaultExperimentState\n    }\n\n    const activeExperiments = experiments.filter((exp) => !exp.isExpired())\n    const activeExperimentMap = new Map(\n        activeExperiments.map((exp) => [exp.id as string, exp])\n    )\n\n    const assignedExperiments = getAssignedExperiments() ?? {}\n    const currentPath =\n        typeof window !== \"undefined\" ? window.location.pathname : \"\"\n\n    const state = {} as ExperimentState\n    for (const [expId, armId] of Object.entries(assignedExperiments)) {\n        const experiment = activeExperimentMap.get(expId)\n        state[expId] = {\n            arm: armId,\n            isPageInExperiment: experiment?.isUrlInPaths(currentPath) ?? false,\n        }\n    }\n\n    return state\n}\n\n/**\n * Gets the assigned experiments for the current user session.\n *\n * Only works on client, i.e. when cookies are available.\n *\n * @returns {Record<string, string> | undefined} A mapping of experiment IDs to their assigned arm IDs.\n *      Returns undefined if called on the server or cookies are unavailable.\n */\nfunction getAssignedExperiments(): Record<string, string> | undefined {\n    if (typeof window === \"undefined\") return undefined\n\n    let allCookies: ReturnType<typeof getAllCookies>\n    try {\n        allCookies = getAllCookies()\n    } catch {\n        // Cookies may be unavailable in a sandboxed iframe.\n        return undefined\n    }\n\n    const filteredCookies = Object.fromEntries(\n        Object.entries(allCookies).filter(([cookieName]) =>\n            cookieName.startsWith(`${EXPERIMENT_PREFIX}-`)\n        )\n    )\n\n    return filteredCookies\n}\n","import {\n    EntityName,\n    GRAPHER_CHART_TYPES,\n    GrapherChartType,\n    GrapherValuesJson,\n    GrapherValuesJsonDataPoint,\n    GridSlotKey,\n    LargeVariantGridSlotKey,\n    MediumVariantGridSlotKey,\n    SearchChartHitDataDisplayProps,\n} from \"@ourworldindata/types\"\nimport { match } from \"ts-pattern\"\nimport { getRegionByName } from \"../regions/index.js\"\nimport { calculateTrendDirection, getDisplayUnit } from \"../Util.js\"\n\nexport function buildChartHitDataDisplayProps({\n    chartInfo,\n    chartType,\n    entity,\n    isEntityPickedByUser,\n}: {\n    chartInfo?: GrapherValuesJson | null\n    chartType?: GrapherChartType\n    entity: EntityName\n    isEntityPickedByUser?: boolean\n}): SearchChartHitDataDisplayProps | undefined {\n    if (!chartInfo) return undefined\n\n    // Showing a time range only makes sense for charts that compare two time\n    // points: slope charts, connected scatter plots, and time-range dumbbells\n    const showTimeRange =\n        chartType === GRAPHER_CHART_TYPES.SlopeChart ||\n        chartType === GRAPHER_CHART_TYPES.ScatterPlot ||\n        chartType === GRAPHER_CHART_TYPES.Dumbbell\n\n    const endDatapoint = findDatapoint(chartInfo, \"end\")\n    const startDatapoint = showTimeRange\n        ? findDatapoint(chartInfo, \"start\")\n        : undefined\n    const columnInfo = endDatapoint?.columnSlug\n        ? chartInfo?.columns?.[endDatapoint?.columnSlug]\n        : undefined\n\n    if (!endDatapoint?.formattedValueShort || !endDatapoint?.formattedTime)\n        return undefined\n\n    // For scatter plots, displaying a single data value is ambiguous since\n    // they have two dimensions. But we do show a data value if the x axis\n    // is GDP since then it's sufficiently clear\n    const xSlug = chartInfo?.endValues?.x?.columnSlug\n    const xColumnInfo = chartInfo?.columns?.[xSlug ?? \"\"]\n    const hasDataDisplay =\n        chartType !== GRAPHER_CHART_TYPES.ScatterPlot ||\n        /GDP/.test(xColumnInfo?.name ?? \"\")\n\n    if (!hasDataDisplay) return undefined\n\n    const endValue = endDatapoint.valueLabel ?? endDatapoint.formattedValueShort\n    const startValue =\n        startDatapoint?.valueLabel ?? startDatapoint?.formattedValueShort\n    const unit = columnInfo ? getDisplayUnit(columnInfo) : undefined\n    const time = startDatapoint?.formattedTime\n        ? `${startDatapoint?.formattedTime}–${endDatapoint.formattedTime}`\n        : endDatapoint.formattedTime\n    const trend =\n        // If both labels are the same, trivially show a right arrow\n        startValue !== undefined && startValue === endValue\n            ? \"right\"\n            : // Otherwise, calculate based on numeric values\n              calculateTrendDirection(\n                  startDatapoint?.value,\n                  endDatapoint?.value\n              )\n    const showLocationIcon =\n        isEntityPickedByUser && getRegionByName(entity) !== undefined\n\n    return {\n        entityName: entity,\n        endValue,\n        startValue,\n        time,\n        unit,\n        trend,\n        showLocationIcon,\n        numericEndTime: endDatapoint.time,\n    }\n}\n\nfunction findDatapoint(\n    chartInfo: GrapherValuesJson | undefined,\n    time: \"end\" | \"start\" = \"end\"\n): GrapherValuesJsonDataPoint | undefined {\n    if (!chartInfo) return undefined\n\n    const yDims = match(time)\n        .with(\"end\", () => chartInfo.endValues?.y)\n        .with(\"start\", () => chartInfo.startValues?.y)\n        .exhaustive()\n    if (!yDims) return undefined\n\n    // Make sure we're not showing a projected data point\n    const historicalDims = yDims.filter(\n        (dim) => !chartInfo.columns?.[dim.columnSlug]?.isProjection\n    )\n\n    // Don't show a data value for charts with multiple y-indicators\n    if (historicalDims.length > 1) return undefined\n\n    return historicalDims[0]\n}\n\nexport function getTableColumnCountForGridSlotKey(slot: GridSlotKey): number {\n    return (\n        match(slot)\n            // medium variant grid slots\n            .with(MediumVariantGridSlotKey.Single, () => 1)\n            .with(MediumVariantGridSlotKey.Double, () => 2)\n            .with(MediumVariantGridSlotKey.Triple, () => 3)\n            .with(MediumVariantGridSlotKey.Quad, () => 4)\n            .with(MediumVariantGridSlotKey.SmallLeft, () => 1)\n            .with(MediumVariantGridSlotKey.SmallRight, () => 1)\n\n            // large variant grid slots\n            .with(LargeVariantGridSlotKey.LeftQuad, () => 2)\n            .with(LargeVariantGridSlotKey.RightQuad, () => 2)\n            .with(LargeVariantGridSlotKey.RightQuadLeftColumn, () => 1)\n            .with(LargeVariantGridSlotKey.SingleCell, () => 0.5)\n            .with(LargeVariantGridSlotKey.TopRightCell, () => 0.5)\n            .with(LargeVariantGridSlotKey.BottomRightCell, () => 0.5)\n            .with(LargeVariantGridSlotKey.Full, () => 4)\n            .exhaustive()\n    )\n}\n","import { Filter, FilterType, SearchFacetFilters } from \"@ourworldindata/types\"\n\n// Shared by the site's search page and /api/search — see ./README.md.\n\n/**\n * What to pass as `maxValuesPerFacet` when a search needs the *complete* list of\n * a facet's values rather than a sample. Algolia caps facet values at 100 unless\n * asked for more, which silently truncates any facet with more values than that\n * — our `tags` facet among them — and a truncated list reads as \"these topics\n * have no content\". 1000 is Algolia's documented maximum.\n */\nexport const MAX_FACET_VALUES = 1000\n\nexport type SearchFacetAttribute =\n    | \"tags\" // also used on /latest\n    | \"latestType\" // used on /latest only\n    | \"path\" // pages index only, filterOnly: look up specific pages\n    | \"availableEntities\"\n    | \"datasetProducts\"\n    | \"datasetNamespaces\"\n    | \"datasetVersions\"\n    | \"datasetProducers\"\n\nexport function getFilterNamesOfType(\n    filters: Filter[],\n    type: FilterType\n): Set<string> {\n    return new Set(\n        filters\n            .filter((filter) => filter.type === type)\n            .map((filter) => filter.name)\n    )\n}\n\nexport function setToFacetFilters(\n    facetSet: Set<string>,\n    attribute: SearchFacetAttribute\n): string[] {\n    return Array.from(facetSet).map((facet) => `${attribute}:${facet}`)\n}\n\nexport const formatDisjunctiveFacetFilters = (\n    facets: Set<string>,\n    attribute: SearchFacetAttribute\n): SearchFacetFilters => {\n    // disjunction mode (A OR B): [[attribute:\"A\", attribute:\"B\"]]\n    return [setToFacetFilters(facets, attribute)]\n}\n\nexport const formatConjunctiveFacetFilters = (\n    facets: Set<string>,\n    attribute: SearchFacetAttribute\n): SearchFacetFilters => {\n    // conjunction mode (A AND B): [attribute:\"A\", attribute:\"B\"]\n    return setToFacetFilters(facets, attribute)\n}\n\n/**\n * Returns a facet filter that excludes Featured Metric records when a\n * free-text query is present. When there is no query (e.g. browsing by\n * topic), FMs are kept so they can surface at the top of topic pages.\n */\nexport function formatFeaturedMetricFacetFilter(\n    query: string\n): SearchFacetFilters {\n    return query.trim() ? [\"isFM:false\"] : []\n}\n\nexport function formatCountryFacetFilters(\n    countries: Set<string>,\n    requireAllCountries: boolean\n): SearchFacetFilters {\n    const facetFilters: SearchFacetFilters = []\n    if (requireAllCountries) {\n        facetFilters.push(\n            ...formatConjunctiveFacetFilters(countries, \"availableEntities\")\n        )\n    } else {\n        facetFilters.push(\n            ...formatDisjunctiveFacetFilters(countries, \"availableEntities\")\n        )\n    }\n    // Don't show income group-specific FMs if no countries are selected\n    if (!countries.size) {\n        facetFilters.push(\"isIncomeGroupSpecificFM:false\")\n    }\n    return facetFilters\n}\n\nexport const formatTopicFacetFilters = (\n    topics: Set<string>\n): SearchFacetFilters => {\n    return formatDisjunctiveFacetFilters(topics, \"tags\")\n}\n\n/**\n * Builds the full facetFilters array for a charts-index search: country,\n * topic, dataset facets (site-only for now — the public API doesn't expose\n * dataset filters), then the Featured Metric exclusion, in that fixed order.\n * Both the site's queryCharts and /api/search's searchCharts call this, so\n * they can't silently drift apart on filter composition.\n */\nexport function buildChartsFacetFilters(params: {\n    query: string\n    filters: Filter[]\n    requireAllCountries: boolean\n    datasetFacetFilters?: SearchFacetFilters\n}): SearchFacetFilters {\n    const countryFacetFilters = formatCountryFacetFilters(\n        getFilterNamesOfType(params.filters, FilterType.COUNTRY),\n        params.requireAllCountries\n    )\n    const topicFacetFilters = formatTopicFacetFilters(\n        getFilterNamesOfType(params.filters, FilterType.TOPIC)\n    )\n    const fmFacetFilter = formatFeaturedMetricFacetFilter(params.query)\n    return [\n        ...countryFacetFilters,\n        ...topicFacetFilters,\n        ...(params.datasetFacetFilters ?? []),\n        ...fmFacetFilter,\n    ]\n}\n","import { type SearchResponse } from \"algoliasearch\"\nimport {\n    type LiteClient,\n    type SearchForHitsOptions,\n    type SearchParamsObject,\n} from \"algoliasearch/lite\"\n\n// Shared by the site's search page and /api/search — see ./README.md.\n\n/** A single search request, as the underlying batch API describes one. */\nexport type SingleSearchRequest = SearchParamsObject & SearchForHitsOptions\n\nexport async function searchSingleForHits<T>(\n    liteSearchClient: LiteClient,\n    searchParams: SingleSearchRequest\n): Promise<SearchResponse<T>> {\n    const response = await liteSearchClient.searchForHits<T>([searchParams])\n    return response.results[0]\n}\n\n// Above this many index-wide hits, a single shared word is treated as too\n// common to be a distinctive match (see rationale below).\nconst DISTINCTIVE_SINGLE_WORD_MAX_HITS = 100\n\ntype RankedHit = { _rankingInfo?: { words?: number } }\n\n/**\n * \"Closest matches\" fallback: when a query returns nothing, retry it with\n * Algolia's removeWordsIfNoResults=allOptional and show only the hits that\n * matched as many query words as the best hit did.\n *\n * - The fallback fires ONLY when the normal search comes back empty, so every\n *   search that works today is completely untouched (and pays no extra\n *   request).\n * - Algolia ranks relaxed hits by number of matched words first, so the best\n *   tier is a prefix of the hit list — we cut where match quality drops,\n *   instead of reporting hundreds of one-word matches (\"182 results\").\n * - If even the best hit shares only a single word with the query, that's not\n *   a \"closest match\", it's noise (\"world cup\" matching everything with\n *   \"world\") — keep the honest empty state.\n *\n * The returned response carries closestMatches=true so callers can label the\n * result accordingly, and nbHits/nbPages describe the trimmed tier (the\n * result count and pagination stay truthful).\n */\nexport async function searchSingleForHitsWithClosestMatches<T>(\n    liteSearchClient: LiteClient,\n    searchParams: SingleSearchRequest\n): Promise<SearchResponse<T> & { closestMatches?: boolean }> {\n    const primary = await searchSingleForHits<T>(liteSearchClient, searchParams)\n    const isFirstPage = !searchParams.page && !searchParams.offset\n    const hasQuery = Boolean(searchParams.query?.trim())\n    if (primary.hits.length > 0 || !isFirstPage || !hasQuery) return primary\n\n    const relaxed = await searchSingleForHits<T>(liteSearchClient, {\n        ...searchParams,\n        removeWordsIfNoResults: \"allOptional\",\n        getRankingInfo: true,\n    })\n\n    const getWords = (hit: T): number =>\n        (hit as RankedHit)._rankingInfo?.words ?? 0\n    const topWords = relaxed.hits.length ? getWords(relaxed.hits[0]) : 0\n    // A single shared word is usually noise (\"world cup\" matching everything\n    // that mentions \"world\") — but a distinctive word is a real signal\n    // (\"malaria worldwide\": \"worldwide\" matches nothing, yet the \"malaria\"\n    // charts are exactly what the user wants). Distinctiveness proxy: how many\n    // documents that one word matches — common words match hundreds.\n    if (topWords === 0) return primary\n    if (\n        topWords === 1 &&\n        (relaxed.nbHits ?? 0) > DISTINCTIVE_SINGLE_WORD_MAX_HITS\n    )\n        return primary\n\n    // Algolia ranks relaxed hits by how many query words they matched, so the\n    // best-matching hits come first. Keep that leading run and drop everything\n    // after it, which is where match quality falls off.\n    //\n    // Example — \"child mortality forecast\" has no exact results. The relaxed\n    // search reports 180 hits; of the 9 on the page we fetched, the first 5\n    // matched 2 of the 3 words (\"child mortality\") and the rest matched only 1.\n    // So topWords = 2 and tier = those 5 hits.\n    const tier = relaxed.hits.filter((hit) => getWords(hit) === topWords)\n\n    // Report the tier as one complete page — in the example above: nbHits: 5,\n    // nbPages: 1, page: 0, i.e. \"5 results, nothing after them\".\n    //\n    // Passing Algolia's 180 through as nbHits instead would give the user a\n    // \"load more\" button that can never load anything: the pagination hooks\n    // would keep asking for the next page (5 of 180 loaded), but every\n    // follow-up request has page/offset > 0, which the early return at the top\n    // of this function treats as \"not the first page\" — so it would re-run the\n    // exact search that already came back empty.\n    return {\n        ...relaxed,\n        hits: tier,\n        nbHits: tier.length,\n        nbPages: 1,\n        page: 0,\n        closestMatches: true,\n    }\n}\n","import {\n    FilterType,\n    OwidGdocType,\n    SearchFacetFilters,\n    SearchState,\n    TagGraphNode,\n    TagGraphRoot,\n} from \"@ourworldindata/types\"\nimport { type SearchResponse } from \"algoliasearch\"\nimport { type LiteClient } from \"algoliasearch/lite\"\nimport {\n    buildChartsFacetFilters,\n    formatDisjunctiveFacetFilters,\n    formatTopicFacetFilters,\n    getFilterNamesOfType,\n} from \"./searchFacetFilters.js\"\nimport { searchSingleForHits } from \"./searchClosestMatches.js\"\nimport { getPrefixedGdocPath } from \"../urls/gdocPaths.js\"\n\n// Shared by the site's search page and /api/search — see ./README.md.\n\nconst TOPIC_PAGE_TYPES: readonly OwidGdocType[] = [\n    OwidGdocType.TopicPage,\n    OwidGdocType.LinearTopicPage,\n]\n\n/** An Algolia `filters` expression for both layouts of topic page. */\nexport const TOPIC_PAGE_TYPE_FILTER = TOPIC_PAGE_TYPES.map(\n    (type) => `type:${type}`\n).join(\" OR \")\n\n/**\n * How many of the best-ranked chart hits vote for the topics to recommend:\n * roughly the first few pages of chart results, i.e. the charts a searcher\n * would actually look at.\n */\nexport const TOPIC_VOTING_CHART_HITS = 50\n\n/**\n * Ranks the topics behind a list of chart hits, best first. Each hit votes\n * for its topic tags with a weight that decays with its rank (reciprocal\n * rank), so the topics of the charts a searcher sees first win; a topic with\n * hundreds of poorly-ranked matches does not. Facet counts over every match\n * would do exactly that: \"population\" matches thousands of explorer views\n * about migration and natural disasters, which would outvote the Population\n * Growth charts ranked at the top.\n *\n * Only tags that are topics with a topic page count; areas are skipped even\n * though every chart carries one (they have no page of their own), and so\n * are searchable tags without a page.\n *\n * This is how search picks the topic pages to show for a query: charts\n * describe their subject in their titles (\"GDP per capita\"), while topic\n * pages are mostly charts and key indicators whose text isn't indexed, so a\n * full-text search over topic pages misses the very page a query is about\n * and surfaces pages that mention the term in passing instead.\n */\nexport function rankTopicsOfChartHits(\n    hits: { tags?: string[] }[],\n    tagGraph: TagGraphRoot\n): { name: string; slug: string }[] {\n    const areaNames = new Set(tagGraph.children.map((area) => area.name))\n    const slugByTopicName = new Map<string, string>()\n    const collectTopics = (node: TagGraphNode): void => {\n        for (const child of node.children) {\n            if (child.isTopic && child.slug && !areaNames.has(child.name))\n                slugByTopicName.set(child.name, child.slug)\n            collectTopics(child)\n        }\n    }\n    collectTopics(tagGraph)\n\n    // Map insertion order is first appearance, which breaks ties in favour\n    // of the topic seen higher up.\n    const scores = new Map<string, number>()\n    hits.forEach((hit, rank) => {\n        for (const tag of hit.tags ?? []) {\n            if (!slugByTopicName.has(tag)) continue\n            scores.set(tag, (scores.get(tag) ?? 0) + 1 / (rank + 1))\n        }\n    })\n\n    return [...scores.entries()]\n        .sort(([, a], [, b]) => b - a)\n        .map(([name]) => ({ name, slug: slugByTopicName.get(name)! }))\n}\n\n/**\n * The topic pages behind the charts matching a query, most common topic\n * first, or undefined when no chart matches (see recommendTopicPages for the\n * fallback). `chartsFacetFilters` are the filters of the chart search proper,\n * so country and topic filters carry over.\n */\nexport async function searchTopicPagesOfMatchingCharts<\n    THit extends { slug: string },\n>(\n    liteSearchClient: LiteClient,\n    params: {\n        chartsIndexName: string\n        pagesIndexName: string\n        query: string\n        chartsFacetFilters: SearchFacetFilters\n        /** Only called once a chart has matched. */\n        loadTagGraph: () => Promise<TagGraphRoot>\n        attributesToRetrieve: string[]\n        offset: number\n        length: number\n    }\n): Promise<SearchResponse<THit> | undefined> {\n    const searchCharts = (\n        queryType: \"prefixNone\" | \"prefixLast\"\n    ): Promise<SearchResponse<{ tags?: string[] }>> =>\n        searchSingleForHits<{ tags?: string[] }>(liteSearchClient, {\n            indexName: params.chartsIndexName,\n            query: params.query,\n            facetFilters: params.chartsFacetFilters,\n            attributesToRetrieve: [\"tags\"],\n            hitsPerPage: TOPIC_VOTING_CHART_HITS,\n            queryType,\n        })\n\n    // The words of a submitted search are whole words: \"ai\" means AI, not\n    // the beginning of \"air\" or \"aid\". Algolia's default (prefixLast) treats\n    // the last word as a prefix, which lets the many charts about air\n    // pollution and foreign aid outvote the AI charts. So match whole words\n    // first (Algolia's synonyms, e.g. ai → artificial intelligence, still\n    // apply) and only fall back to prefix matching when that finds nothing,\n    // i.e. when the word really is unfinished (\"popul\").\n    let chartsResponse = await searchCharts(\"prefixNone\")\n    if (chartsResponse.hits.length === 0)\n        chartsResponse = await searchCharts(\"prefixLast\")\n    if (chartsResponse.hits.length === 0) return undefined\n    const rankedTopics = rankTopicsOfChartHits(\n        chartsResponse.hits,\n        await params.loadTagGraph()\n    )\n    if (rankedTopics.length === 0) return undefined\n\n    // The topic list is short (a few dozen at most), so fetch every page in\n    // one request and paginate locally. Algolia returns them in its own\n    // order; the ranking is what we want. Both layouts of topic page are\n    // always returned: which one a topic uses is a presentation detail.\n    // The paths are sorted because this request goes through the search\n    // cache (api/search/cached-queries), whose key would otherwise depend on\n    // the order of the topics.\n    const paths = rankedTopics.flatMap((topic) =>\n        TOPIC_PAGE_TYPES.map((type) =>\n            getPrefixedGdocPath(\"\", { slug: topic.slug, content: { type } })\n        )\n    )\n    const pagesResponse = await searchSingleForHits<THit>(liteSearchClient, {\n        indexName: params.pagesIndexName,\n        query: \"\",\n        filters: TOPIC_PAGE_TYPE_FILTER,\n        facetFilters: formatDisjunctiveFacetFilters(\n            new Set(paths.sort()),\n            \"path\"\n        ),\n        attributesToRetrieve: params.attributesToRetrieve,\n        hitsPerPage: rankedTopics.length,\n    })\n    const hitBySlug = new Map(pagesResponse.hits.map((hit) => [hit.slug, hit]))\n    const orderedHits = rankedTopics.flatMap(\n        (topic) => hitBySlug.get(topic.slug) ?? []\n    )\n\n    return {\n        ...pagesResponse,\n        hits: orderedHits.slice(params.offset, params.offset + params.length),\n        nbHits: orderedHits.length,\n        offset: params.offset,\n        length: params.length,\n    }\n}\n\n/**\n * The topic pages to recommend for a search. With a query, they come from the\n * charts matching it (searchTopicPagesOfMatchingCharts), with the search's\n * country and topic filters. Without a query, or when no chart matches, the\n * topic pages are searched by their own text, so a query that only matches\n * prose (an author's name, say) still finds pages; the topic filter applies\n * there too. The text search has no closest-matches fallback.\n */\nexport async function recommendTopicPages<THit extends { slug: string }>(\n    liteSearchClient: LiteClient,\n    params: {\n        chartsIndexName: string\n        pagesIndexName: string\n        state: Pick<SearchState, \"query\" | \"filters\" | \"requireAllCountries\">\n        /** Only called once a chart has matched the query. */\n        loadTagGraph: () => Promise<TagGraphRoot>\n        attributesToRetrieve: string[]\n        offset: number\n        length: number\n    }\n): Promise<SearchResponse<THit>> {\n    const { state, ...rest } = params\n    if (state.query.trim()) {\n        const response = await searchTopicPagesOfMatchingCharts<THit>(\n            liteSearchClient,\n            {\n                ...rest,\n                query: state.query,\n                chartsFacetFilters: buildChartsFacetFilters(state),\n            }\n        )\n        if (response) return response\n    }\n    return searchSingleForHits<THit>(liteSearchClient, {\n        indexName: params.pagesIndexName,\n        query: state.query,\n        filters: TOPIC_PAGE_TYPE_FILTER,\n        facetFilters: formatTopicFacetFilters(\n            getFilterNamesOfType(state.filters, FilterType.TOPIC)\n        ),\n        attributesToRetrieve: params.attributesToRetrieve,\n        highlightPreTag: \"<mark>\",\n        highlightPostTag: \"</mark>\",\n        offset: params.offset,\n        length: params.length,\n    })\n}\n","/**\n * Helper for deciding whether an Algolia multi-query request payload (the\n * body POSTed to Algolia's multi-query \"queries\" endpoint) consists\n * exclusively of searches with an empty query string. These are the \"browse\"\n * requests issued by default states — the search landing page, the empty\n * autocomplete panel, /latest, featured metrics — and are highly cacheable\n * since they don't depend on user input.\n *\n * Used on both sides of our caching proxy: the site's search client routes\n * such payloads to the proxy (`site/search/searchClients.ts`), and the\n * Cloudflare function only accepts payloads that pass this check\n * (`functions/api/search/cached-queries.ts`).\n */\n\n// Attributes that make a request depend on user input. Depending on the\n// client, these live at the top level of each request (algoliasearch v5), in\n// a `params` object (autocomplete), or in a URL-encoded `params` string\n// (algoliasearch v4 legacy format).\nconst QUERY_ATTRIBUTES = [\"query\", \"similarQuery\", \"facetQuery\"] as const\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n    typeof value === \"object\" && value !== null && !Array.isArray(value)\n\nconst hasOnlyEmptyQueryAttributes = (\n    params: Record<string, unknown>\n): boolean =>\n    QUERY_ATTRIBUTES.every((attribute) => {\n        const value = params[attribute]\n        return value === undefined || value === \"\"\n    })\n\nconst isEmptyQuerySearchRequest = (request: unknown): boolean => {\n    if (!isRecord(request)) return false\n    if (!hasOnlyEmptyQueryAttributes(request)) return false\n\n    const params = request.params\n    if (params === undefined) return true\n    if (typeof params === \"string\") {\n        const parsedParams = Object.fromEntries(new URLSearchParams(params))\n        return hasOnlyEmptyQueryAttributes(parsedParams)\n    }\n    if (isRecord(params)) return hasOnlyEmptyQueryAttributes(params)\n    return false\n}\n\n/**\n * Returns true if `payload` looks like an Algolia multi-query request body\n * (`{ requests: [...] }`) where every request has an empty query string.\n */\nexport function isEmptyQuerySearchPayload(payload: unknown): boolean {\n    if (!isRecord(payload)) return false\n    const requests = payload.requests\n    if (!Array.isArray(requests) || requests.length === 0) return false\n    return requests.every(isEmptyQuerySearchRequest)\n}\n","import * as _ from \"lodash-es\"\nimport {\n    GRAPHER_TAB_NAMES,\n    GrapherTabName,\n    MediumVariantGridSlotKey,\n    LayoutSlot,\n} from \"@ourworldindata/types\"\nimport { getTableColumnCountForGridSlotKey } from \"./SearchHelpers.js\"\n\ntype PlacingOptions =\n    | { hasDataTable: false }\n    | {\n          hasDataTable: true\n          numDataTableRows: number\n          numDataTableRowsPerColumn: number\n      }\n\nexport function placeGrapherTabsInMediumVariantGridLayout(\n    tabs: GrapherTabName[],\n    options: {\n        hasDataDisplay: boolean\n        prioritizeTableOverDiscreteBar?: boolean\n    } & PlacingOptions\n): LayoutSlot<MediumVariantGridSlotKey>[] {\n    // If there is a data display, then three equally-sized slots are available,\n    // plus two smaller slots below the data display. If there is no data display,\n    // then four equally-sized slots are available.\n\n    if (options.hasDataDisplay) {\n        const placedMainTabs = assignTabsToGridSlotKeys(tabs, {\n            numAvailableGridSlotKeys: 3,\n            ...options,\n        })\n\n        const remainingTabs = tabs.slice(placedMainTabs.length)\n        const placedRemainingTabs = remainingTabs\n            .slice(0, 2)\n            .map((tab, tabIndex) => ({\n                grapherTab: tab,\n                slotKey:\n                    tabIndex === 0\n                        ? MediumVariantGridSlotKey.SmallLeft\n                        : MediumVariantGridSlotKey.SmallRight,\n            }))\n        return [...placedMainTabs, ...placedRemainingTabs]\n    } else {\n        return assignTabsToGridSlotKeys(tabs, {\n            numAvailableGridSlotKeys: 4,\n            ...options,\n        })\n    }\n}\n\n/**\n * Assigns Grapher tabs to grid slots with special handling for the DiscreteBar tab.\n */\nfunction assignTabsToGridSlotKeys(\n    tabs: GrapherTabName[],\n    options: {\n        numAvailableGridSlotKeys: number\n        prioritizeTableOverDiscreteBar?: boolean\n    } & PlacingOptions\n): LayoutSlot<MediumVariantGridSlotKey>[] {\n    // No special handling for discrete bar charts\n    if (!options.prioritizeTableOverDiscreteBar)\n        return placeTabsInUniformGrid(tabs, options)\n\n    const hasSecondaryDiscreteBarTab =\n        tabs[0] !== GRAPHER_TAB_NAMES.DiscreteBar &&\n        tabs.includes(GRAPHER_TAB_NAMES.DiscreteBar)\n\n    // No need for special handling if there's no DiscreteBar tab\n    if (!hasSecondaryDiscreteBarTab)\n        return placeTabsInUniformGrid(tabs, options)\n\n    // Place tabs without the discrete bar tab\n    const placedMainTabs = placeTabsInUniformGrid(\n        tabs.filter((tab) => tab !== GRAPHER_TAB_NAMES.DiscreteBar),\n        options\n    )\n\n    // Check if there's space for the discrete bar tab\n    const numOccupiedSlots = _.sumBy(placedMainTabs, ({ slotKey }) =>\n        getTableColumnCountForGridSlotKey(slotKey)\n    )\n    if (numOccupiedSlots < options.numAvailableGridSlotKeys) {\n        placedMainTabs.push({\n            grapherTab: GRAPHER_TAB_NAMES.DiscreteBar,\n            slotKey: MediumVariantGridSlotKey.Single,\n        })\n    }\n\n    return placedMainTabs\n}\n\n/**\n * Place Grapher tabs in a uniform grid layout.\n *\n * Chart tabs always occupy a single slots. The table tab might occupy more\n * than one slot if there is space and enough data to fill it.\n */\nfunction placeTabsInUniformGrid(\n    tabs: GrapherTabName[],\n    options: { numAvailableGridSlotKeys: number } & PlacingOptions\n): LayoutSlot<MediumVariantGridSlotKey>[] {\n    const maxNumTabs = options.numAvailableGridSlotKeys\n\n    // If none of the tabs display a table, then all tabs trivially take up one slot each\n    if (!tabs.some((tab) => tab === GRAPHER_TAB_NAMES.Table)) {\n        return tabs.slice(0, maxNumTabs).map((tab) => ({\n            grapherTab: tab,\n            slotKey: MediumVariantGridSlotKey.Single,\n        }))\n    }\n\n    const numTabs = Math.min(tabs.length, maxNumTabs)\n    const numCharts = numTabs - 1 // without the table tab\n\n    const numAvailableSlotsForTable =\n        options.numAvailableGridSlotKeys - numCharts // >= 1\n\n    if (numAvailableSlotsForTable <= 1) {\n        return tabs.slice(0, maxNumTabs).map((tab) => ({\n            grapherTab: tab,\n            slotKey: MediumVariantGridSlotKey.Single,\n        }))\n    }\n\n    let numSlotsForTable = 0\n    if (options.hasDataTable) {\n        const numNeededSlotsForTable = Math.ceil(\n            options.numDataTableRows / options.numDataTableRowsPerColumn\n        )\n\n        numSlotsForTable = Math.min(\n            numAvailableSlotsForTable,\n            numNeededSlotsForTable\n        )\n    }\n\n    const tableSlot = getGridSlotKeyForCount(numSlotsForTable)\n\n    return tabs.map((tab) => ({\n        grapherTab: tab,\n        slotKey:\n            tab === GRAPHER_TAB_NAMES.Table\n                ? tableSlot\n                : MediumVariantGridSlotKey.Single,\n    }))\n}\n\nfunction getGridSlotKeyForCount(slotCount: number): MediumVariantGridSlotKey {\n    if (slotCount <= 1) return MediumVariantGridSlotKey.Single\n    else if (slotCount === 2) return MediumVariantGridSlotKey.Double\n    else if (slotCount === 3) return MediumVariantGridSlotKey.Triple\n    else return MediumVariantGridSlotKey.Quad\n}\n","import type { BrowserOptions } from \"@sentry/browser\"\n\n// (Mostly) preserve v10's data collection defaults; v11 enables broader collection by default.\n// See https://blog.sentry.io/datacollection-control-panel/#2-previous-senddefaultpii-false-or-unset-5\nexport const SENTRY_DATA_COLLECTION: BrowserOptions[\"dataCollection\"] = {\n    userInfo: false,\n    cookies: false,\n    httpHeaders: {\n        request: { deny: [\"forwarded\", \"-ip\", \"remote-\", \"via\", \"-user\"] },\n        response: { deny: [\"forwarded\", \"-ip\", \"remote-\", \"via\", \"-user\"] },\n    },\n    httpBodies: [],\n    urlQueryParams: { deny: [\"forwarded\", \"-ip\", \"remote-\", \"via\", \"-user\"] },\n}\n","// All of this information is available to the client-side code\n// DO NOT retrieve sensitive information from the environment in here! :O\n// Settings in here will be made available to the client-side code that is\n// bundled and shipped out to our users.\n\nimport \"./loadDotenv.mts\"\n\nconst parseIntOrUndefined = (value: string | undefined): number | undefined => {\n    try {\n        return value ? parseInt(value) : undefined\n    } catch {\n        return undefined\n    }\n}\n\ntype Environment = \"development\" | \"staging\" | \"production\"\nexport const ENV: Environment = (process.env.ENV as Environment) || \"production\"\nexport const IS_ARCHIVE: boolean = process.env.IS_ARCHIVE === \"true\"\nexport const COMMIT_SHA = process.env.COMMIT_SHA\n\nexport const SENTRY_DSN: string | undefined = process.env.SENTRY_DSN\nexport const SENTRY_ADMIN_DSN: string | undefined = process.env.SENTRY_ADMIN_DSN\nexport const ADMIN_SERVER_PORT: number =\n    parseIntOrUndefined(process.env.ADMIN_SERVER_PORT) ?? 3030\nexport const ADMIN_SERVER_HOST: string =\n    process.env.ADMIN_SERVER_HOST ?? \"localhost\"\nexport const BAKED_BASE_URL: string =\n    process.env.BAKED_BASE_URL ??\n    `http://${ADMIN_SERVER_HOST}:${ADMIN_SERVER_PORT}`\n\nexport const ARCHIVE_BASE_URL: string | null =\n    process.env.ARCHIVE_BASE_URL || null\n\nexport const BAKED_GRAPHER_URL: string =\n    process.env.BAKED_GRAPHER_URL ?? `${BAKED_BASE_URL}/grapher`\n\n// Thumbnails are rendered by Cloudflare functions, which the admin server doesn't\n// serve, so in development they come from production unless set (e.g. to the\n// local functions server, http://localhost:<WRANGLER_PORT>/grapher).\nexport const GRAPHER_DYNAMIC_THUMBNAIL_URL: string =\n    process.env.GRAPHER_DYNAMIC_THUMBNAIL_URL ??\n    (ENV === \"development\"\n        ? \"https://ourworldindata.org/grapher\"\n        : BAKED_GRAPHER_URL)\n\nexport const EXPLORER_DYNAMIC_THUMBNAIL_URL: string =\n    process.env.EXPLORER_DYNAMIC_THUMBNAIL_URL ??\n    (ENV === \"development\"\n        ? \"https://ourworldindata.org/explorers\"\n        : `${BAKED_BASE_URL}/explorers`)\n\nexport const GRAPHER_DYNAMIC_CONFIG_URL: string =\n    process.env.GRAPHER_DYNAMIC_CONFIG_URL ?? `${BAKED_GRAPHER_URL}`\n\nexport const EXPLORER_DYNAMIC_CONFIG_URL: string =\n    process.env.EXPLORER_DYNAMIC_CONFIG_URL ?? `${BAKED_BASE_URL}/explorers`\n\nexport const MULTI_DIM_DYNAMIC_CONFIG_URL: string =\n    process.env.MULTI_DIM_DYNAMIC_CONFIG_URL ?? `${BAKED_BASE_URL}/multi-dim`\n\nexport const ADMIN_BASE_URL: string =\n    process.env.ADMIN_BASE_URL ??\n    `http://${ADMIN_SERVER_HOST}:${ADMIN_SERVER_PORT}`\n// e.g. \"https://api.ourworldindata.org/v1/indicators\" or \"https://api-staging.owid.io/user/v1/indicators\"\nexport const DATA_API_URL: string =\n    process.env.DATA_API_URL ?? \"https://api.ourworldindata.org/v1/indicators\"\n\nexport const CATALOG_URL: string =\n    process.env.CATALOG_URL ?? \"https://catalog.ourworldindata.org\"\n\nexport const ALGOLIA_ID: string = process.env.ALGOLIA_ID ?? \"\"\nexport const ALGOLIA_SEARCH_KEY: string = process.env.ALGOLIA_SEARCH_KEY ?? \"\"\nexport const ALGOLIA_INDEX_PREFIX: string =\n    process.env.ALGOLIA_INDEX_PREFIX ?? \"\"\n\n// Endpoint of the Cloudflare function that proxies empty-query Algolia\n// searches and caches their results aggressively (see\n// functions/api/search/cached-queries.ts).\n// Set it to http://localhost:8788/api/search/cached-queries to test against\n// `yarn startLocalCloudflareFunctions`.\nexport const ALGOLIA_CACHED_QUERIES_URL: string =\n    process.env.ALGOLIA_CACHED_QUERIES_URL ??\n    (ENV === \"development\" ? \"\" : `${BAKED_BASE_URL}/api/search/cached-queries`)\n\n// Cloudflare Images has one store shared by all environments, so in development\n// images come from the production delivery URL unless set. `||` rather than `??`\n// because .env.example-full sets it to an empty value.\nexport const CLOUDFLARE_IMAGES_URL: string =\n    process.env.CLOUDFLARE_IMAGES_URL ||\n    (ENV === \"development\"\n        ? \"https://ourworldindata.org/cdn-cgi/imagedelivery/qLq-8BTgXU8yG0N6HnOy8g\"\n        : \"\")\n\nexport const DONATE_API_URL: string =\n    process.env.DONATE_API_URL ?? \"http://localhost:8788/donation/donate\"\n\n// The email notifications API (Cloudflare Functions) is served on the same\n// host as the site in every deployed environment, so a relative URL works —\n// except in local development, where the site and the functions dev server\n// run on different ports.\nexport const EMAIL_NOTIFICATIONS_API_BASE_URL: string =\n    ENV === \"development\"\n        ? \"http://localhost:8788/api/email-notifications\"\n        : \"/api/email-notifications\"\n\nexport const TURNSTILE_SITE_KEY: string =\n    process.env.TURNSTILE_SITE_KEY ??\n    (ENV === \"development\"\n        ? \"1x00000000000000000000AA\" // Test key, always passes.\n        : \"0x4AAAAAADh7N4W5ajeRXkYb\")\n\n// e.g. \"GTM-N2D4V8S\" (our production GTM container)\nexport const GOOGLE_TAG_MANAGER_ID: string =\n    process.env.GOOGLE_TAG_MANAGER_ID ?? \"\"\n\nexport const TOPICS_CONTENT_GRAPH: boolean =\n    process.env.TOPICS_CONTENT_GRAPH === \"true\"\n\nexport const GDOCS_CLIENT_EMAIL: string = process.env.GDOCS_CLIENT_EMAIL ?? \"\"\nexport const GDOCS_ARTICLE_DUPLICATION_TEMPLATE_ID: string =\n    process.env.GDOCS_ARTICLE_DUPLICATION_TEMPLATE_ID ?? \"\"\nexport const GDOCS_DATA_INSIGHT_DUPLICATION_TEMPLATE_ID: string =\n    process.env.GDOCS_DATA_INSIGHT_DUPLICATION_TEMPLATE_ID ?? \"\"\nexport const GDOCS_ANNOUNCEMENT_DUPLICATION_TEMPLATE_ID: string =\n    process.env.GDOCS_ANNOUNCEMENT_DUPLICATION_TEMPLATE_ID ?? \"\"\nexport const GDOCS_DATA_INSIGHT_API_TEMPLATE_ID: string =\n    process.env.GDOCS_DATA_INSIGHT_API_TEMPLATE_ID ?? \"\"\n\n// Link to production wizard.  You need Tailscale to access it in production.\nexport const ETL_WIZARD_URL: string =\n    process.env.ETL_WIZARD_URL ?? `http://${ADMIN_SERVER_HOST}:8053`\n\nexport const PUBLISHED_AT_FORMAT = \"ddd, MMM D, YYYY HH:mm\"\n\n/** A map of possible features which can be enabled or disabled. */\nexport const Features = {\n    ExampleFeature: \"ExampleFeature\",\n    EmailNotifications: \"EmailNotifications\",\n} as const\n\ntype Feature = (typeof Features)[keyof typeof Features]\n\n// process.env.FEATURE_FLAGS is a comma-separated list of flags, and they need\n// to be a valid value in the Features object to be considered.\nconst featureFlagsRaw =\n    (typeof process.env.FEATURE_FLAGS === \"string\" &&\n        process.env.FEATURE_FLAGS.trim()?.split(\",\")) ||\n    []\nexport const FEATURE_FLAGS: Array<Feature> = Object.values(Features).filter(\n    (feature) => featureFlagsRaw.includes(feature)\n)\n\nexport const SLACK_DI_PITCHES_CHANNEL_ID: string =\n    process.env.SLACK_DI_PITCHES_CHANNEL_ID ?? \"\"\n\nexport const IS_RUNNING_INSIDE_VITEST: boolean = !!process.env.VITEST\n\n// Port of the bespoke dev server (bespoke/server/devServer.ts)\nexport const BESPOKE_PORT: number =\n    parseIntOrUndefined(process.env.BESPOKE_PORT) ?? 8089\n\n// Base URL for bespoke component assets. When set, the scriptUrl from the\n// bespoke component registry is resolved relative to this URL instead of\n// the current origin. Defaults to the local bespoke dev server.\nexport const BESPOKE_BASE_URL: string =\n    process.env.BESPOKE_BASE_URL ?? `http://localhost:${BESPOKE_PORT}`\n\n// Root of the data feeds ETL builds for bespoke components, passed to each component's mount().\n// ETL writes a feed to the API bucket of the environment it is building, so a staging server sets\n// this to its own (owid/ops), and anything that server's ETL build didn't produce falls back to\n// production's in the api-staging worker.\nexport const BESPOKE_DATA_URL: string =\n    process.env.BESPOKE_DATA_URL ?? \"https://api.ourworldindata.org/v1/bespoke\"\n\n/// Generated properties only, these cannot be overridden directly\n// Whether to only enable cookie-less tracking & never show the cookie notice\nexport const REDUCED_TRACKING = IS_ARCHIVE\nexport const LOAD_SENTRY = !REDUCED_TRACKING && !IS_RUNNING_INSIDE_VITEST\n","import { dayjs } from \"@ourworldindata/utils\"\nimport { get as getCookie } from \"es-cookie\"\nimport { REDUCED_TRACKING } from \"../settings/clientSettings.mjs\"\n\nexport enum PreferenceType {\n    Analytics = \"a\",\n    Marketing = \"m\", // not used\n}\n\nexport enum Action {\n    Accept,\n    TogglePreference,\n    Reset,\n    Persist,\n    Reject,\n}\n\nexport interface Preference {\n    type: PreferenceType\n    value: boolean\n}\n\nexport const POLICY_DATE: number = 20201009\nexport const DATE_FORMAT = \"YYYYMMDD\"\nexport const COOKIE_PREFERENCES_COOKIE_NAME = \"cookie_preferences\"\nexport const PREFERENCES_SEPARATOR = \"|\"\nexport const DATE_SEPARATOR = \"-\"\nexport const PREFERENCE_KEY_VALUE_SEPARATOR = \":\"\n// e.g. p:1-20200910\n\nexport interface State {\n    date?: number\n    preferences: Preference[]\n}\n\nexport const defaultState: State = {\n    preferences: [\n        {\n            type: PreferenceType.Analytics,\n            value: false,\n        },\n    ],\n}\n\nexport const getInitialState = (): State => {\n    let cookieValue = undefined\n    try {\n        // Cookie access can be restricted by iframe sandboxing, in which case the below code will throw an error\n        // see https://github.com/owid/owid-grapher/pull/2452\n\n        cookieValue = parseRawCookieValue(\n            getCookie(COOKIE_PREFERENCES_COOKIE_NAME)\n        )\n    } catch {\n        // ignore\n    }\n\n    if (!cookieValue || arePreferencesOutdated(cookieValue.date, POLICY_DATE))\n        return defaultState\n    return cookieValue\n}\n\nexport const parseRawCookieValue = (cookieValue?: string) => {\n    if (!cookieValue) return\n\n    const [preferencesRaw, dateRaw] = cookieValue.split(DATE_SEPARATOR)\n    const date = parseDate(dateRaw)\n    if (!date) return\n\n    const preferences = parsePreferences(preferencesRaw)\n    if (!preferences.length) return\n\n    return {\n        preferences,\n        date,\n    }\n}\n\nexport const parsePreferences = (preferences?: string): Preference[] => {\n    if (!preferences) return []\n\n    return preferences\n        .split(PREFERENCES_SEPARATOR)\n        .map((preference) => {\n            const [type, , value] = preference // only supports 1 digit values\n            return {\n                type: type as PreferenceType,\n                value: value === \"1\",\n            }\n        })\n        .filter((preference) => isValidPreference(preference))\n}\n\nexport const isValidPreference = ({ type, value }: Preference) => {\n    return (\n        Object.values(PreferenceType).includes(type) &&\n        typeof value === \"boolean\"\n    )\n}\n\nexport const parseDate = (date?: string): number | undefined => {\n    if (!date) return\n\n    return dayjs(date, DATE_FORMAT, true).isValid()\n        ? parseInt(date, 10)\n        : undefined\n}\n\nexport const getPreferenceValue = (\n    type: PreferenceType,\n    preferences: Preference[] = getInitialState().preferences\n) => {\n    // The REDUCED_TRACKING env setting can be used to disable analytics tracking entirely, regardless of user preferences or cookies\n    if (type === PreferenceType.Analytics && REDUCED_TRACKING) return false\n\n    return (\n        preferences.find((preference) => {\n            return preference.type === type\n        })?.value ?? false\n    )\n}\n\n// The rule doesn't support class components in the same file.\n\nexport const updatePreference = (\n    type: PreferenceType,\n    value: boolean,\n    preferences: Preference[]\n) => {\n    return preferences.map((preference) => {\n        if (preference.type !== type) return preference\n\n        return {\n            ...preference,\n            value,\n        }\n    })\n}\n\nexport const arePreferencesOutdated = (\n    preferencesDate: number | undefined,\n    policyDate: number\n) => {\n    if (!preferencesDate) return false\n    return preferencesDate < policyDate\n}\n\nexport const serializeState = (state: State) => {\n    const serializedPreferences = state.preferences\n        .map((preference) => {\n            return `${preference.type}${PREFERENCE_KEY_VALUE_SEPARATOR}${\n                preference.value ? 1 : 0\n            }`\n        })\n        .join(PREFERENCES_SEPARATOR)\n\n    return `${serializedPreferences}${DATE_SEPARATOR}${state.date}`\n}\n\nexport const getTodayDate = () => dayjs().format(DATE_FORMAT)\n","import * as Sentry from \"@sentry/react\"\nimport { get as getCookie, getAll as getAllCookies } from \"es-cookie\"\nimport { getPreferenceValue, PreferenceType } from \"./cookiePreferences.js\"\nimport {\n    experiments,\n    isInIFrame,\n    getExperimentState,\n} from \"@ourworldindata/utils\"\nimport {\n    SENTRY_DEFAULT_REPLAYS_SESSION_SAMPLE_RATE,\n    SENTRY_SESSION_STORAGE_KEY,\n    SENTRY_SAMPLED_RATE_KEY,\n} from \"@ourworldindata/types\"\n\n/**\n * Checks whether the session should be (re)sampled for recording, and (re)samples\n * if so.\n *\n * If recording is not allowed for this session (e.g. user denied consent), stops\n * the recording immediately.\n */\nexport function maybeSampleSession(sampleRate: number) {\n    try {\n        if (!allowRecording()) {\n            void stopSessionRecording()\n            return\n        }\n\n        // no need to do anything if session is already recording\n        if (isSessionRecording()) return\n\n        const lastSampleRate = getSessionLastSampleRate()\n        const shouldResample =\n            sampleRate > 0 &&\n            !hasSessionBeenRecorded() &&\n            (lastSampleRate === undefined || sampleRate > lastSampleRate)\n\n        if (shouldResample) {\n            setSessionLastSampleRate(sampleRate)\n            if (Math.random() < sampleRate) {\n                startSessionRecording()\n            }\n        }\n    } catch {\n        // failed to maybe start session replay\n    }\n}\n/**\n * Checks if the current session has been sampled for Sentry replay recording.\n *\n * This does NOT check if the sampling was successful or not (i.e. if the session\n * was actually recorded or not). It just checks whether sampling was conducted.\n *\n * @returns {boolean} True if sampling has been conducted for this session, false otherwise.\n */\nexport function hasSessionBeenSampled(): boolean {\n    if (getSentrySessionStorage() !== undefined) {\n        return true\n    }\n\n    const lastSampleRate = getSessionLastSampleRate()\n    if (lastSampleRate) {\n        return true\n    }\n\n    return false\n}\n\n/**\n * Checks if the current session was recording (as of the previous page load).\n *\n * Usable before Sentry is initialized.\n *\n * @returns {boolean} True if sampling was recording, False otherwise.\n */\nfunction hasSessionBeenRecorded(): boolean {\n    const replaySession = getSentrySessionStorage()\n    if (replaySession === undefined) return false\n    return replaySession.sampled === \"session\"\n}\n\nfunction isSessionRecording(): boolean {\n    const replay = Sentry.getReplay()\n    return !!replay?.getReplayId()\n}\n\n/**\n * Checks if the current session is allowed to be recorded.\n *\n * Returns true if the user has given consent for analytics cookies and the page\n * is not in an iframe.\n *\n * @returns {boolean} True if the session is allowed to be recorded, false otherwise.\n */\nfunction allowRecording(): boolean {\n    const analyticsConsent = getPreferenceValue(PreferenceType.Analytics)\n    if (analyticsConsent && !isInIFrame()) {\n        return true\n    }\n    return false\n}\n\n/**\n * Computes Sentry replay session sample rate based on user consent and experiment configuration.\n *\n * This function determines the sample rate for Sentry session replays by checking:\n * 1. Whether the user has granted analytics consent\n * 2. Whether the page is embedded in an iframe (replays disabled in iframes)\n * 3. Any experiment-specific sample rates from cookies\n *\n * The returned sample rate is the rate that should be used to determine whether\n * this session is sampled for recording.\n *\n * @returns {number} The sample rate to use for session replays:\n *   - A number between 0 and 1 representing the probability of recording a session:\n *     - 0 = never record\n *     - 0.1 = record 10% of sessions\n *     - 1 = record 100% of sessions\n *   - Uses experiment cookie value if available, otherwise defaults to 0.1\n *\n */\nexport function getSessionSampleRate(): number {\n    let p = 0\n    if (allowRecording()) {\n        p =\n            parseExperimentsSampleRate() ||\n            SENTRY_DEFAULT_REPLAYS_SESSION_SAMPLE_RATE\n    }\n    return p\n}\n\n/**\n * Parses experiment cookies to extract Sentry replay session sample rates.\n *\n * This function searches through browser cookies for experiment configurations that contain\n * Sentry replay sample rate overrides.\n *\n * If multiple experiments specify different sample rates, the highest rate is returned.\n *\n * @returns {number | undefined} The experiment sample rate:\n *   - `undefined` if no experiment cookie exists or the experiment does not define\n *      a sample rate.\n *   - A number between 0 and 1 representing the sample rate from experiments:\n *     - 0 = never record sessions\n *     - 0.5 = record 50% of sessions\n *     - 1 = record 100% of sessions\n *   - If multiple experiments specify rates, returns the maximum value\n */\nfunction parseExperimentsSampleRate(): number | undefined {\n    const allCookies = getAllCookies()\n    const expSentrySampleRates: number[] = []\n\n    for (const [cookieName, cookieValue] of Object.entries(allCookies)) {\n        const exp = experiments\n            .filter((e) => !e.isExpired())\n            .find((e) => e.id === cookieName)\n        if (!exp || !cookieValue) continue\n\n        const pathname = window.location.pathname\n        if (!exp.isUrlInPaths(pathname)) continue\n\n        const arm = exp.arms.find((a) => a.id === cookieValue)\n        if (!arm) continue\n\n        if (arm.replaysSessionSampleRate !== undefined) {\n            expSentrySampleRates.push(arm.replaysSessionSampleRate)\n        }\n    }\n\n    // Return the maximum sample rate if any were found\n    return expSentrySampleRates.length > 0\n        ? Math.max(...expSentrySampleRates)\n        : undefined\n}\n\n/**\n * Gets the Sentry session storage object from sessionStorage.\n *\n * @returns {Record<string, any> | undefined} The Sentry session storage object or undefined if not found.\n */\nfunction getSentrySessionStorage(): Record<string, any> | undefined {\n    try {\n        const raw = sessionStorage.getItem(SENTRY_SESSION_STORAGE_KEY)\n        return raw ? JSON.parse(raw) : undefined\n    } catch {\n        return undefined\n    }\n}\n\n/**\n * Gets the last recorded sample rate for the current session.\n *\n * @returns {number | undefined} The last sample rate (or undefined if not set).\n */\nfunction getSessionLastSampleRate(): number | undefined {\n    let raw: string | null\n    try {\n        raw = sessionStorage.getItem(SENTRY_SAMPLED_RATE_KEY)\n    } catch {\n        // Storage may be unavailable in a sandboxed iframe.\n        return undefined\n    }\n\n    // Return undefined if no value is stored\n    if (raw === null || raw === undefined || raw === \"\") {\n        return undefined\n    }\n\n    const num = parseFloat(raw)\n\n    if (isNaN(num) || num < 0 || num > 1) {\n        // Clean up invalid value from sessionStorage\n        setSessionLastSampleRate(null)\n        return undefined\n    }\n\n    return num\n}\n\nfunction setSessionLastSampleRate(p: number | null | undefined) {\n    try {\n        if (p === null || p === undefined) {\n            sessionStorage.removeItem(SENTRY_SAMPLED_RATE_KEY)\n        } else {\n            sessionStorage.setItem(SENTRY_SAMPLED_RATE_KEY, p.toString())\n        }\n    } catch {\n        // Storage may be unavailable in a sandboxed iframe.\n    }\n}\n\n/**\n * Records the user session in Sentry.\n *\n * This implementation relies on directly changing sessionStorage managed by Sentry, which is\n * as an unofficial workaround to ensure recording continues on subsequent page loads.\n * As of @sentry/react 10.0.0, the official solutions (e.g. using replay.start()) are\n * not working for our build, b/c they either do not continue the recording across\n * page loads or do not record page change breadcrumbs in the Sentry session replays UI.\n */\nfunction startSessionRecording(): void {\n    const replaySession = getSentrySessionStorage()\n    if (replaySession !== undefined) {\n        replaySession.sampled = \"session\"\n        sessionStorage.setItem(\n            SENTRY_SESSION_STORAGE_KEY,\n            JSON.stringify(replaySession)\n        )\n    }\n    if (isSentryInitialized() && !isSessionRecording()) {\n        const replay = Sentry.getReplay()\n        replay?.start()\n    }\n}\n\nasync function stopSessionRecording(): Promise<void> {\n    setSessionLastSampleRate(null)\n    if (isSentryInitialized() && isSessionRecording()) {\n        const replay = Sentry.getReplay()\n        await replay?.stop()\n    }\n}\n\nfunction isSentryInitialized(): boolean {\n    return !!Sentry.getClient()\n}\n\nexport function updateSentryTags() {\n    updateSentryReferrerTag()\n    updateSentryExperimentTags()\n}\n\nexport function setSentryTagsAndAttributes(tags: Record<string, string>): void {\n    // Tags annotate error events and session replays; Sentry v11's streamed\n    // spans only carry attributes, so set both to keep the same context\n    // searchable in each.\n    Sentry.setTags(tags)\n    Sentry.setAttributes(tags)\n}\n\n/**\n * Updates the Sentry experiment tags from the current experiment state.\n */\nexport function updateSentryExperimentTags() {\n    const experimentState = getExperimentState()\n    if (isSentryInitialized() && Object.keys(experimentState).length > 0) {\n        const tags = Object.fromEntries(\n            Object.entries(experimentState).map(([key, value]) => [\n                key,\n                value.arm,\n            ])\n        )\n        setSentryTagsAndAttributes(tags)\n    }\n}\n\n/**\n * Updates the Sentry user ID from Google Analytics client ID.\n *\n * If analytics consent is given, the user ID is set to the Google Analytics 4\n * client ID. If not, the Sentry user is cleared.\n */\nexport function updateSentryUser() {\n    let user: Sentry.User | null = null // by default, clear Sentry user\n    if (allowRecording()) {\n        const clientId = extractGaClientIdFromCookie()\n        if (clientId) {\n            user = { id: clientId }\n        }\n    }\n    Sentry.setUser(user)\n}\n\nfunction extractGaClientIdFromCookie(): string | undefined {\n    const gaCookie = getCookie(\"_ga\")\n    if (!gaCookie) {\n        return\n    }\n\n    // Extract client ID from GA cookie (format: GA1.1.clientId.timestamp)\n    const parts = gaCookie.split(\".\")\n    if (parts.length >= 4) {\n        const clientId = `${parts[2]}.${parts[3]}`\n        return clientId\n    }\n    return\n}\n\nfunction updateSentryReferrerTag() {\n    if (document.referrer) {\n        const ref = new URL(document.referrer).hostname\n        setSentryTagsAndAttributes({ referrer: ref })\n    }\n}\n","/** Initializes Sentry for error tracking and session replay\n *\n * Configures Sentry with the appropriate settings and either samples a session\n * to be recorded (if consent provided) or starts the recording if sampling has\n * already been conducted this session.\n */\n\nimport * as Sentry from \"@sentry/react\"\nimport { TimeoutError, SENTRY_DATA_COLLECTION } from \"@ourworldindata/utils\"\nimport {\n    COMMIT_SHA,\n    ENV,\n    SENTRY_DSN,\n    LOAD_SENTRY,\n} from \"../settings/clientSettings.mjs\"\nimport {\n    getSessionSampleRate,\n    hasSessionBeenSampled,\n    maybeSampleSession,\n    updateSentryUser,\n    updateSentryTags,\n} from \"./SentryUtils.js\"\n\nif (LOAD_SENTRY) {\n    const sampleRate = getSessionSampleRate()\n\n    // note: if hasSessionBeenSampled() is false, then Sentry.init(...) will do\n    // the initial sampling (if consent provided). If hasSessionBeenSampled() is\n    // true, we want to give this session a chance to be re-sampled before Sentry\n    // initialization, using the logic in maybeSampleSession.\n    if (hasSessionBeenSampled()) {\n        maybeSampleSession(sampleRate)\n    }\n\n    Sentry.init({\n        dataCollection: SENTRY_DATA_COLLECTION,\n        dsn: SENTRY_DSN,\n        environment: ENV,\n        release: COMMIT_SHA,\n        integrations: [\n            Sentry.browserTracingIntegration(),\n            Sentry.replayIntegration({\n                maskAllText: false,\n                maskAllInputs: false,\n                blockAllMedia: false,\n                mask: [\".sentry-mask\"],\n            }),\n        ],\n        tracesSampleRate: 0.1,\n        replaysSessionSampleRate: sampleRate,\n        replaysOnErrorSampleRate: 0,\n        beforeSend(event, hint) {\n            if (hint.originalException instanceof TimeoutError) return null\n            return event\n        },\n    })\n    updateSentryTags()\n    updateSentryUser()\n}\n","/**\n * @license React\n * scheduler.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nfunction push(heap, node) {\n  var index = heap.length;\n  heap.push(node);\n  a: for (; 0 < index; ) {\n    var parentIndex = (index - 1) >>> 1,\n      parent = heap[parentIndex];\n    if (0 < compare(parent, node))\n      (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);\n    else break a;\n  }\n}\nfunction peek(heap) {\n  return 0 === heap.length ? null : heap[0];\n}\nfunction pop(heap) {\n  if (0 === heap.length) return null;\n  var first = heap[0],\n    last = heap.pop();\n  if (last !== first) {\n    heap[0] = last;\n    a: for (\n      var index = 0, length = heap.length, halfLength = length >>> 1;\n      index < halfLength;\n\n    ) {\n      var leftIndex = 2 * (index + 1) - 1,\n        left = heap[leftIndex],\n        rightIndex = leftIndex + 1,\n        right = heap[rightIndex];\n      if (0 > compare(left, last))\n        rightIndex < length && 0 > compare(right, left)\n          ? ((heap[index] = right),\n            (heap[rightIndex] = last),\n            (index = rightIndex))\n          : ((heap[index] = left),\n            (heap[leftIndex] = last),\n            (index = leftIndex));\n      else if (rightIndex < length && 0 > compare(right, last))\n        (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);\n      else break a;\n    }\n  }\n  return first;\n}\nfunction compare(a, b) {\n  var diff = a.sortIndex - b.sortIndex;\n  return 0 !== diff ? diff : a.id - b.id;\n}\nexports.unstable_now = void 0;\nif (\"object\" === typeof performance && \"function\" === typeof performance.now) {\n  var localPerformance = performance;\n  exports.unstable_now = function () {\n    return localPerformance.now();\n  };\n} else {\n  var localDate = Date,\n    initialTime = localDate.now();\n  exports.unstable_now = function () {\n    return localDate.now() - initialTime;\n  };\n}\nvar taskQueue = [],\n  timerQueue = [],\n  taskIdCounter = 1,\n  currentTask = null,\n  currentPriorityLevel = 3,\n  isPerformingWork = !1,\n  isHostCallbackScheduled = !1,\n  isHostTimeoutScheduled = !1,\n  needsPaint = !1,\n  localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n  localClearTimeout = \"function\" === typeof clearTimeout ? clearTimeout : null,\n  localSetImmediate = \"undefined\" !== typeof setImmediate ? setImmediate : null;\nfunction advanceTimers(currentTime) {\n  for (var timer = peek(timerQueue); null !== timer; ) {\n    if (null === timer.callback) pop(timerQueue);\n    else if (timer.startTime <= currentTime)\n      pop(timerQueue),\n        (timer.sortIndex = timer.expirationTime),\n        push(taskQueue, timer);\n    else break;\n    timer = peek(timerQueue);\n  }\n}\nfunction handleTimeout(currentTime) {\n  isHostTimeoutScheduled = !1;\n  advanceTimers(currentTime);\n  if (!isHostCallbackScheduled)\n    if (null !== peek(taskQueue))\n      (isHostCallbackScheduled = !0),\n        isMessageLoopRunning ||\n          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n    else {\n      var firstTimer = peek(timerQueue);\n      null !== firstTimer &&\n        requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n    }\n}\nvar isMessageLoopRunning = !1,\n  taskTimeoutID = -1,\n  frameInterval = 5,\n  startTime = -1;\nfunction shouldYieldToHost() {\n  return needsPaint\n    ? !0\n    : exports.unstable_now() - startTime < frameInterval\n      ? !1\n      : !0;\n}\nfunction performWorkUntilDeadline() {\n  needsPaint = !1;\n  if (isMessageLoopRunning) {\n    var currentTime = exports.unstable_now();\n    startTime = currentTime;\n    var hasMoreWork = !0;\n    try {\n      a: {\n        isHostCallbackScheduled = !1;\n        isHostTimeoutScheduled &&\n          ((isHostTimeoutScheduled = !1),\n          localClearTimeout(taskTimeoutID),\n          (taskTimeoutID = -1));\n        isPerformingWork = !0;\n        var previousPriorityLevel = currentPriorityLevel;\n        try {\n          b: {\n            advanceTimers(currentTime);\n            for (\n              currentTask = peek(taskQueue);\n              null !== currentTask &&\n              !(\n                currentTask.expirationTime > currentTime && shouldYieldToHost()\n              );\n\n            ) {\n              var callback = currentTask.callback;\n              if (\"function\" === typeof callback) {\n                currentTask.callback = null;\n                currentPriorityLevel = currentTask.priorityLevel;\n                var continuationCallback = callback(\n                  currentTask.expirationTime <= currentTime\n                );\n                currentTime = exports.unstable_now();\n                if (\"function\" === typeof continuationCallback) {\n                  currentTask.callback = continuationCallback;\n                  advanceTimers(currentTime);\n                  hasMoreWork = !0;\n                  break b;\n                }\n                currentTask === peek(taskQueue) && pop(taskQueue);\n                advanceTimers(currentTime);\n              } else pop(taskQueue);\n              currentTask = peek(taskQueue);\n            }\n            if (null !== currentTask) hasMoreWork = !0;\n            else {\n              var firstTimer = peek(timerQueue);\n              null !== firstTimer &&\n                requestHostTimeout(\n                  handleTimeout,\n                  firstTimer.startTime - currentTime\n                );\n              hasMoreWork = !1;\n            }\n          }\n          break a;\n        } finally {\n          (currentTask = null),\n            (currentPriorityLevel = previousPriorityLevel),\n            (isPerformingWork = !1);\n        }\n        hasMoreWork = void 0;\n      }\n    } finally {\n      hasMoreWork\n        ? schedulePerformWorkUntilDeadline()\n        : (isMessageLoopRunning = !1);\n    }\n  }\n}\nvar schedulePerformWorkUntilDeadline;\nif (\"function\" === typeof localSetImmediate)\n  schedulePerformWorkUntilDeadline = function () {\n    localSetImmediate(performWorkUntilDeadline);\n  };\nelse if (\"undefined\" !== typeof MessageChannel) {\n  var channel = new MessageChannel(),\n    port = channel.port2;\n  channel.port1.onmessage = performWorkUntilDeadline;\n  schedulePerformWorkUntilDeadline = function () {\n    port.postMessage(null);\n  };\n} else\n  schedulePerformWorkUntilDeadline = function () {\n    localSetTimeout(performWorkUntilDeadline, 0);\n  };\nfunction requestHostTimeout(callback, ms) {\n  taskTimeoutID = localSetTimeout(function () {\n    callback(exports.unstable_now());\n  }, ms);\n}\nexports.unstable_IdlePriority = 5;\nexports.unstable_ImmediatePriority = 1;\nexports.unstable_LowPriority = 4;\nexports.unstable_NormalPriority = 3;\nexports.unstable_Profiling = null;\nexports.unstable_UserBlockingPriority = 2;\nexports.unstable_cancelCallback = function (task) {\n  task.callback = null;\n};\nexports.unstable_forceFrameRate = function (fps) {\n  0 > fps || 125 < fps\n    ? console.error(\n        \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n      )\n    : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n};\nexports.unstable_getCurrentPriorityLevel = function () {\n  return currentPriorityLevel;\n};\nexports.unstable_next = function (eventHandler) {\n  switch (currentPriorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n      var priorityLevel = 3;\n      break;\n    default:\n      priorityLevel = currentPriorityLevel;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_requestPaint = function () {\n  needsPaint = !0;\n};\nexports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n  switch (priorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n    case 4:\n    case 5:\n      break;\n    default:\n      priorityLevel = 3;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_scheduleCallback = function (\n  priorityLevel,\n  callback,\n  options\n) {\n  var currentTime = exports.unstable_now();\n  \"object\" === typeof options && null !== options\n    ? ((options = options.delay),\n      (options =\n        \"number\" === typeof options && 0 < options\n          ? currentTime + options\n          : currentTime))\n    : (options = currentTime);\n  switch (priorityLevel) {\n    case 1:\n      var timeout = -1;\n      break;\n    case 2:\n      timeout = 250;\n      break;\n    case 5:\n      timeout = 1073741823;\n      break;\n    case 4:\n      timeout = 1e4;\n      break;\n    default:\n      timeout = 5e3;\n  }\n  timeout = options + timeout;\n  priorityLevel = {\n    id: taskIdCounter++,\n    callback: callback,\n    priorityLevel: priorityLevel,\n    startTime: options,\n    expirationTime: timeout,\n    sortIndex: -1\n  };\n  options > currentTime\n    ? ((priorityLevel.sortIndex = options),\n      push(timerQueue, priorityLevel),\n      null === peek(taskQueue) &&\n        priorityLevel === peek(timerQueue) &&\n        (isHostTimeoutScheduled\n          ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n          : (isHostTimeoutScheduled = !0),\n        requestHostTimeout(handleTimeout, options - currentTime)))\n    : ((priorityLevel.sortIndex = timeout),\n      push(taskQueue, priorityLevel),\n      isHostCallbackScheduled ||\n        isPerformingWork ||\n        ((isHostCallbackScheduled = !0),\n        isMessageLoopRunning ||\n          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline())));\n  return priorityLevel;\n};\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = function (callback) {\n  var parentPriorityLevel = currentPriorityLevel;\n  return function () {\n    var previousPriorityLevel = currentPriorityLevel;\n    currentPriorityLevel = parentPriorityLevel;\n    try {\n      return callback.apply(this, arguments);\n    } finally {\n      currentPriorityLevel = previousPriorityLevel;\n    }\n  };\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * @license React\n * react-dom-client.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\"use strict\";\nvar Scheduler = require(\"scheduler\"),\n  React = require(\"react\"),\n  ReactDOM = require(\"react-dom\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction isValidContainer(node) {\n  return !(\n    !node ||\n    (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n  );\n}\nfunction getNearestMountedFiber(fiber) {\n  for (var node = fiber, nextNode = node; nextNode && !nextNode.alternate; )\n    (node = nextNode),\n      0 !== (node.flags & 4098) && (fiber = node.return),\n      (nextNode = node.return);\n  for (; node.return; ) node = node.return;\n  return 3 === node.tag ? fiber : null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n  if (13 === fiber.tag) {\n    var suspenseState = fiber.memoizedState;\n    null === suspenseState &&\n      ((fiber = fiber.alternate),\n      null !== fiber && (suspenseState = fiber.memoizedState));\n    if (null !== suspenseState) return suspenseState.dehydrated;\n  }\n  return null;\n}\nfunction getActivityInstanceFromFiber(fiber) {\n  if (31 === fiber.tag) {\n    var activityState = fiber.memoizedState;\n    null === activityState &&\n      ((fiber = fiber.alternate),\n      null !== fiber && (activityState = fiber.memoizedState));\n    if (null !== activityState) return activityState.dehydrated;\n  }\n  return null;\n}\nfunction assertIsMounted(fiber) {\n  if (getNearestMountedFiber(fiber) !== fiber)\n    throw Error(formatProdErrorMessage(188));\n}\nfunction findCurrentFiberUsingSlowPath(fiber) {\n  var alternate = fiber.alternate;\n  if (!alternate) {\n    alternate = getNearestMountedFiber(fiber);\n    if (null === alternate) throw Error(formatProdErrorMessage(188));\n    return alternate !== fiber ? null : fiber;\n  }\n  for (var a = fiber, b = alternate; ; ) {\n    var parentA = a.return;\n    if (null === parentA) break;\n    var parentB = parentA.alternate;\n    if (null === parentB) {\n      b = parentA.return;\n      if (null !== b) {\n        a = b;\n        continue;\n      }\n      break;\n    }\n    if (parentA.child === parentB.child) {\n      for (parentB = parentA.child; parentB; ) {\n        if (parentB === a) return assertIsMounted(parentA), fiber;\n        if (parentB === b) return assertIsMounted(parentA), alternate;\n        parentB = parentB.sibling;\n      }\n      throw Error(formatProdErrorMessage(188));\n    }\n    if (a.return !== b.return) (a = parentA), (b = parentB);\n    else {\n      for (var didFindChild = !1, child$0 = parentA.child; child$0; ) {\n        if (child$0 === a) {\n          didFindChild = !0;\n          a = parentA;\n          b = parentB;\n          break;\n        }\n        if (child$0 === b) {\n          didFindChild = !0;\n          b = parentA;\n          a = parentB;\n          break;\n        }\n        child$0 = child$0.sibling;\n      }\n      if (!didFindChild) {\n        for (child$0 = parentB.child; child$0; ) {\n          if (child$0 === a) {\n            didFindChild = !0;\n            a = parentB;\n            b = parentA;\n            break;\n          }\n          if (child$0 === b) {\n            didFindChild = !0;\n            b = parentB;\n            a = parentA;\n            break;\n          }\n          child$0 = child$0.sibling;\n        }\n        if (!didFindChild) throw Error(formatProdErrorMessage(189));\n      }\n    }\n    if (a.alternate !== b) throw Error(formatProdErrorMessage(190));\n  }\n  if (3 !== a.tag) throw Error(formatProdErrorMessage(188));\n  return a.stateNode.current === a ? fiber : alternate;\n}\nfunction findCurrentHostFiberImpl(node) {\n  var tag = node.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n  for (node = node.child; null !== node; ) {\n    tag = findCurrentHostFiberImpl(node);\n    if (null !== tag) return tag;\n    node = node.sibling;\n  }\n  return null;\n}\nfunction traverseVisibleInstancesAndTextInstances(\n  child,\n  searchWithinHosts,\n  fn,\n  a,\n  b,\n  c\n) {\n  for (; null !== child; ) {\n    if (\n      ((5 === child.tag || 27 === child.tag || 6 === child.tag) &&\n        fn(child, a, b, c)) ||\n      ((22 !== child.tag || null === child.memoizedState) &&\n        (searchWithinHosts || (5 !== child.tag && 27 !== child.tag)) &&\n        traverseVisibleInstancesAndTextInstances(\n          child.child,\n          searchWithinHosts,\n          fn,\n          a,\n          b,\n          c\n        ))\n    )\n      return !0;\n    child = child.sibling;\n  }\n  return !1;\n}\nfunction getFragmentParentInstanceOrContainerFiber(fiber) {\n  for (fiber = fiber.return; null !== fiber; ) {\n    if (3 === fiber.tag || 5 === fiber.tag || 27 === fiber.tag) return fiber;\n    fiber = fiber.return;\n  }\n  return null;\n}\nfunction fiberIsPortaledIntoHost(fiber) {\n  var foundPortalParent = !1;\n  for (fiber = fiber.return; null !== fiber; ) {\n    4 === fiber.tag && (foundPortalParent = !0);\n    if (3 === fiber.tag || 5 === fiber.tag || 27 === fiber.tag) break;\n    fiber = fiber.return;\n  }\n  return foundPortalParent;\n}\nfunction getFragmentInstanceOrTextInstanceSiblings(fiber) {\n  var result = [null, null],\n    parentHostFiber = getFragmentParentInstanceOrContainerFiber(fiber);\n  if (null === parentHostFiber) return result;\n  findFragmentInstanceOrTextInstanceSiblings(\n    result,\n    fiber,\n    parentHostFiber.child,\n    { foundSelf: !1 }\n  );\n  return result;\n}\nfunction findFragmentInstanceOrTextInstanceSiblings(\n  result,\n  self,\n  child,\n  state\n) {\n  for (; null !== child; ) {\n    if (child === self) state.foundSelf = !0;\n    else if (5 === child.tag || 27 === child.tag || 6 === child.tag) {\n      if (state.foundSelf) return (result[1] = child), !0;\n      result[0] = child;\n    } else if (\n      (22 !== child.tag || null === child.memoizedState) &&\n      findFragmentInstanceOrTextInstanceSiblings(\n        result,\n        self,\n        child.child,\n        state\n      )\n    )\n      return !0;\n    child = child.sibling;\n  }\n  return !1;\n}\nfunction getInstanceFromHostFiber(fiber) {\n  switch (fiber.tag) {\n    case 5:\n    case 27:\n    case 6:\n      return fiber.stateNode;\n    case 3:\n      return fiber.stateNode.containerInfo;\n    default:\n      throw Error(formatProdErrorMessage(559));\n  }\n}\nvar searchTarget = null,\n  searchBoundary = null;\nfunction isFiberPrecedingCheck(child, target, boundary) {\n  return child === boundary\n    ? !0\n    : child === target\n      ? ((searchTarget = child), !0)\n      : !1;\n}\nfunction isFiberFollowingCheck(child, target, boundary) {\n  return child === boundary\n    ? ((searchBoundary = child), !1)\n    : child === target\n      ? (null !== searchBoundary && (searchTarget = child), !0)\n      : !1;\n}\nfunction getParentForFragmentAncestors(inst) {\n  if (null === inst) return null;\n  do inst = null === inst ? null : inst.return;\n  while (inst && 5 !== inst.tag && 27 !== inst.tag && 3 !== inst.tag);\n  return inst ? inst : null;\n}\nfunction getLowestCommonAncestor(instA, instB, getParent) {\n  for (var depthA = 0, tempA = instA; tempA; tempA = getParent(tempA)) depthA++;\n  tempA = 0;\n  for (var tempB = instB; tempB; tempB = getParent(tempB)) tempA++;\n  for (; 0 < depthA - tempA; ) (instA = getParent(instA)), depthA--;\n  for (; 0 < tempA - depthA; ) (instB = getParent(instB)), tempA--;\n  for (; depthA--; ) {\n    if (instA === instB || (null !== instB && instA === instB.alternate))\n      return instA;\n    instA = getParent(instA);\n    instB = getParent(instB);\n  }\n  return null;\n}\nvar assign = Object.assign,\n  REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n  REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nSymbol.for(\"react.scope\");\nvar REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n  REACT_LEGACY_HIDDEN_TYPE = Symbol.for(\"react.legacy_hidden\");\nSymbol.for(\"react.tracing_marker\");\nvar REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\"),\n  REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n  REACT_RECOVERABLE_TYPE = Symbol.for(\"react.recoverable\"),\n  MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction getComponentNameFromType(type) {\n  if (null == type) return null;\n  if (\"function\" === typeof type)\n    return type.$$typeof === REACT_CLIENT_REFERENCE\n      ? null\n      : type.displayName || type.name || null;\n  if (\"string\" === typeof type) return type;\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return \"Fragment\";\n    case REACT_PROFILER_TYPE:\n      return \"Profiler\";\n    case REACT_STRICT_MODE_TYPE:\n      return \"StrictMode\";\n    case REACT_SUSPENSE_TYPE:\n      return \"Suspense\";\n    case REACT_SUSPENSE_LIST_TYPE:\n      return \"SuspenseList\";\n    case REACT_ACTIVITY_TYPE:\n      return \"Activity\";\n    case REACT_VIEW_TRANSITION_TYPE:\n      return \"ViewTransition\";\n  }\n  if (\"object\" === typeof type)\n    switch (type.$$typeof) {\n      case REACT_PORTAL_TYPE:\n        return \"Portal\";\n      case REACT_CONTEXT_TYPE:\n        return type.displayName || \"Context\";\n      case REACT_CONSUMER_TYPE:\n        return (type._context.displayName || \"Context\") + \".Consumer\";\n      case REACT_FORWARD_REF_TYPE:\n        var innerType = type.render;\n        type = type.displayName;\n        type ||\n          ((type = innerType.displayName || innerType.name || \"\"),\n          (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n        return type;\n      case REACT_MEMO_TYPE:\n        return (\n          (innerType = type.displayName || null),\n          null !== innerType\n            ? innerType\n            : getComponentNameFromType(type.type) || \"Memo\"\n        );\n      case REACT_LAZY_TYPE:\n        innerType = type._payload;\n        type = type._init;\n        try {\n          return getComponentNameFromType(type(innerType));\n        } catch (x) {}\n    }\n  return null;\n}\nvar isArrayImpl = Array.isArray,\n  ReactSharedInternals =\n    React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  ReactDOMSharedInternals =\n    ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  sharedNotPendingObject = {\n    pending: !1,\n    data: null,\n    method: null,\n    action: null\n  },\n  valueStack = [],\n  index = -1;\nfunction createCursor(defaultValue) {\n  return { current: defaultValue };\n}\nfunction pop(cursor) {\n  0 > index ||\n    ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);\n}\nfunction push(cursor, value) {\n  index++;\n  valueStack[index] = cursor.current;\n  cursor.current = value;\n}\nvar contextStackCursor = createCursor(null),\n  contextFiberStackCursor = createCursor(null),\n  rootInstanceStackCursor = createCursor(null),\n  hostTransitionProviderCursor = createCursor(null);\nfunction pushHostContainer(fiber, nextRootInstance) {\n  push(rootInstanceStackCursor, nextRootInstance);\n  push(contextFiberStackCursor, fiber);\n  push(contextStackCursor, null);\n  switch (nextRootInstance.nodeType) {\n    case 9:\n    case 11:\n      fiber = (fiber = nextRootInstance.documentElement)\n        ? (fiber = fiber.namespaceURI)\n          ? getOwnHostContext(fiber)\n          : 0\n        : 0;\n      break;\n    default:\n      if (\n        ((fiber = nextRootInstance.tagName),\n        (nextRootInstance = nextRootInstance.namespaceURI))\n      )\n        (nextRootInstance = getOwnHostContext(nextRootInstance)),\n          (fiber = getChildHostContextProd(nextRootInstance, fiber));\n      else\n        switch (fiber) {\n          case \"svg\":\n            fiber = 1;\n            break;\n          case \"math\":\n            fiber = 2;\n            break;\n          default:\n            fiber = 0;\n        }\n  }\n  pop(contextStackCursor);\n  push(contextStackCursor, fiber);\n}\nfunction popHostContainer() {\n  pop(contextStackCursor);\n  pop(contextFiberStackCursor);\n  pop(rootInstanceStackCursor);\n}\nfunction pushHostContext(fiber) {\n  var stateHook = fiber.memoizedState;\n  null !== stateHook &&\n    ((HostTransitionContext._currentValue = stateHook.memoizedState),\n    push(hostTransitionProviderCursor, fiber));\n  stateHook = contextStackCursor.current;\n  var JSCompiler_inline_result = getChildHostContextProd(stateHook, fiber.type);\n  stateHook !== JSCompiler_inline_result &&\n    (push(contextFiberStackCursor, fiber),\n    push(contextStackCursor, JSCompiler_inline_result));\n}\nfunction popHostContext(fiber) {\n  contextFiberStackCursor.current === fiber &&\n    (pop(contextStackCursor), pop(contextFiberStackCursor));\n  hostTransitionProviderCursor.current === fiber &&\n    (pop(hostTransitionProviderCursor),\n    (HostTransitionContext._currentValue = sharedNotPendingObject));\n}\nvar prefix, suffix;\nfunction describeBuiltInComponentFrame(name) {\n  if (void 0 === prefix)\n    try {\n      throw Error();\n    } catch (x) {\n      var match = x.stack.trim().match(/\\n( *(at )?)/);\n      prefix = (match && match[1]) || \"\";\n      suffix =\n        -1 < x.stack.indexOf(\"\\n    at\")\n          ? \" (<anonymous>)\"\n          : -1 < x.stack.indexOf(\"@\")\n            ? \"@unknown:0:0\"\n            : \"\";\n    }\n  return \"\\n\" + prefix + name + suffix;\n}\nvar reentry = !1;\nfunction describeNativeComponentFrame(fn, construct) {\n  if (!fn || reentry) return \"\";\n  reentry = !0;\n  var previousPrepareStackTrace = Error.prepareStackTrace;\n  Error.prepareStackTrace = void 0;\n  try {\n    var RunInRootFrame = {\n      DetermineComponentFrameRoot: function () {\n        try {\n          if (construct) {\n            var Fake = function () {\n              throw Error();\n            };\n            Object.defineProperty(Fake.prototype, \"props\", {\n              set: function () {\n                throw Error();\n              }\n            });\n            if (\"object\" === typeof Reflect && Reflect.construct) {\n              try {\n                Reflect.construct(Fake, []);\n              } catch (x) {\n                var control = x;\n              }\n              Reflect.construct(fn, [], Fake);\n            } else {\n              try {\n                Fake.call();\n              } catch (x$1) {\n                control = x$1;\n              }\n              Fake = !1;\n              try {\n                var prevProps = Object.getOwnPropertyDescriptor(\n                  fn.prototype,\n                  \"props\"\n                );\n                Object.defineProperty(fn.prototype, \"props\", {\n                  configurable: !0,\n                  set: function () {\n                    throw Error();\n                  }\n                });\n                Fake = !0;\n                new fn();\n              } finally {\n                Fake &&\n                  (void 0 !== prevProps\n                    ? Object.defineProperty(fn.prototype, \"props\", prevProps)\n                    : delete fn.prototype.props);\n              }\n            }\n          } else {\n            try {\n              throw Error();\n            } catch (x$2) {\n              control = x$2;\n            }\n            (Fake = fn()) &&\n              \"function\" === typeof Fake.catch &&\n              Fake.catch(function () {});\n          }\n        } catch (sample) {\n          if (sample && control && \"string\" === typeof sample.stack)\n            return [sample.stack, control.stack];\n        }\n        return [null, null];\n      }\n    };\n    RunInRootFrame.DetermineComponentFrameRoot.displayName =\n      \"DetermineComponentFrameRoot\";\n    var namePropDescriptor = Object.getOwnPropertyDescriptor(\n      RunInRootFrame.DetermineComponentFrameRoot,\n      \"name\"\n    );\n    namePropDescriptor &&\n      namePropDescriptor.configurable &&\n      Object.defineProperty(\n        RunInRootFrame.DetermineComponentFrameRoot,\n        \"name\",\n        { value: \"DetermineComponentFrameRoot\" }\n      );\n    var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n      sampleStack = _RunInRootFrame$Deter[0],\n      controlStack = _RunInRootFrame$Deter[1];\n    if (sampleStack && controlStack) {\n      var sampleLines = sampleStack.split(\"\\n\"),\n        controlLines = controlStack.split(\"\\n\");\n      for (\n        namePropDescriptor = RunInRootFrame = 0;\n        RunInRootFrame < sampleLines.length &&\n        !sampleLines[RunInRootFrame].includes(\"DetermineComponentFrameRoot\");\n\n      )\n        RunInRootFrame++;\n      for (\n        ;\n        namePropDescriptor < controlLines.length &&\n        !controlLines[namePropDescriptor].includes(\n          \"DetermineComponentFrameRoot\"\n        );\n\n      )\n        namePropDescriptor++;\n      if (\n        RunInRootFrame === sampleLines.length ||\n        namePropDescriptor === controlLines.length\n      )\n        for (\n          RunInRootFrame = sampleLines.length - 1,\n            namePropDescriptor = controlLines.length - 1;\n          1 <= RunInRootFrame &&\n          0 <= namePropDescriptor &&\n          sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];\n\n        )\n          namePropDescriptor--;\n      for (\n        ;\n        1 <= RunInRootFrame && 0 <= namePropDescriptor;\n        RunInRootFrame--, namePropDescriptor--\n      )\n        if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {\n          if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {\n            do\n              if (\n                (RunInRootFrame--,\n                namePropDescriptor--,\n                0 > namePropDescriptor ||\n                  sampleLines[RunInRootFrame] !==\n                    controlLines[namePropDescriptor])\n              ) {\n                var frame =\n                  \"\\n\" +\n                  sampleLines[RunInRootFrame].replace(\" at new \", \" at \");\n                fn.displayName &&\n                  frame.includes(\"<anonymous>\") &&\n                  (frame = frame.replace(\"<anonymous>\", fn.displayName));\n                return frame;\n              }\n            while (1 <= RunInRootFrame && 0 <= namePropDescriptor);\n          }\n          break;\n        }\n    }\n  } finally {\n    (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);\n  }\n  return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : \"\")\n    ? describeBuiltInComponentFrame(previousPrepareStackTrace)\n    : \"\";\n}\nfunction describeFiber(fiber, childFiber) {\n  switch (fiber.tag) {\n    case 26:\n    case 27:\n    case 5:\n      return describeBuiltInComponentFrame(fiber.type);\n    case 16:\n      return describeBuiltInComponentFrame(\"Lazy\");\n    case 13:\n      return fiber.child !== childFiber && null !== childFiber\n        ? describeBuiltInComponentFrame(\"Suspense Fallback\")\n        : describeBuiltInComponentFrame(\"Suspense\");\n    case 19:\n      return describeBuiltInComponentFrame(\"SuspenseList\");\n    case 0:\n    case 15:\n      return describeNativeComponentFrame(fiber.type, !1);\n    case 11:\n      return describeNativeComponentFrame(fiber.type.render, !1);\n    case 1:\n      return describeNativeComponentFrame(fiber.type, !0);\n    case 31:\n      return describeBuiltInComponentFrame(\"Activity\");\n    case 30:\n      return describeBuiltInComponentFrame(\"ViewTransition\");\n    default:\n      return \"\";\n  }\n}\nfunction getStackByFiberInDevAndProd(workInProgress) {\n  try {\n    var info = \"\",\n      previous = null;\n    do\n      (info += describeFiber(workInProgress, previous)),\n        (previous = workInProgress),\n        (workInProgress = workInProgress.return);\n    while (workInProgress);\n    return info;\n  } catch (x) {\n    return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n  }\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n  scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n  cancelCallback$1 = Scheduler.unstable_cancelCallback,\n  shouldYield = Scheduler.unstable_shouldYield,\n  requestPaint = Scheduler.unstable_requestPaint,\n  now = Scheduler.unstable_now,\n  getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n  ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n  UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n  NormalPriority$1 = Scheduler.unstable_NormalPriority,\n  LowPriority = Scheduler.unstable_LowPriority,\n  IdlePriority = Scheduler.unstable_IdlePriority,\n  log$1 = Scheduler.log,\n  unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n  rendererID = null,\n  injectedHook = null;\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n  \"function\" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);\n  if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n    try {\n      injectedHook.setStrictMode(rendererID, newIsStrictMode);\n    } catch (err) {}\n}\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n  log = Math.log,\n  LN2 = Math.LN2;\nfunction clz32Fallback(x) {\n  x >>>= 0;\n  return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n}\nvar nextTransitionUpdateLane = 256,\n  nextTransitionDeferredLane = 262144,\n  nextRetryLane = 4194304;\nfunction getHighestPriorityLanes(lanes) {\n  var pendingSyncLanes = lanes & 42;\n  if (0 !== pendingSyncLanes) return pendingSyncLanes;\n  switch (lanes & -lanes) {\n    case 1:\n      return 1;\n    case 2:\n      return 2;\n    case 4:\n      return 4;\n    case 8:\n      return 8;\n    case 16:\n      return 16;\n    case 32:\n      return 32;\n    case 64:\n      return 64;\n    case 128:\n      return 128;\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n      return lanes & -lanes;\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return lanes & 3932160;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return lanes & 62914560;\n    case 67108864:\n      return 67108864;\n    case 134217728:\n      return 134217728;\n    case 268435456:\n      return 268435456;\n    case 536870912:\n      return 536870912;\n    case 1073741824:\n      return 0;\n    default:\n      return lanes;\n  }\n}\nfunction getNextLanes(root, wipLanes, rootHasPendingCommit) {\n  var pendingLanes = root.pendingLanes;\n  if (0 === pendingLanes) return 0;\n  var nextLanes = 0,\n    suspendedLanes = root.suspendedLanes,\n    pingedLanes = root.pingedLanes;\n  root = root.warmLanes;\n  var nonIdlePendingLanes = pendingLanes & 134217727;\n  0 !== nonIdlePendingLanes\n    ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n      0 !== pendingLanes\n        ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n        : ((pingedLanes &= nonIdlePendingLanes),\n          0 !== pingedLanes\n            ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n            : rootHasPendingCommit ||\n              ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n              0 !== rootHasPendingCommit &&\n                (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))))\n    : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n      0 !== nonIdlePendingLanes\n        ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n        : 0 !== pingedLanes\n          ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n          : rootHasPendingCommit ||\n            ((rootHasPendingCommit = pendingLanes & ~root),\n            0 !== rootHasPendingCommit &&\n              (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n  return 0 === nextLanes\n    ? 0\n    : 0 !== wipLanes &&\n        wipLanes !== nextLanes &&\n        0 === (wipLanes & suspendedLanes) &&\n        ((suspendedLanes = nextLanes & -nextLanes),\n        (rootHasPendingCommit = wipLanes & -wipLanes),\n        suspendedLanes >= rootHasPendingCommit ||\n          (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n      ? wipLanes\n      : nextLanes;\n}\nfunction checkIfRootIsPrerendering(root, renderLanes) {\n  return (\n    0 ===\n    (root.pendingLanes &\n      ~(root.suspendedLanes & ~root.pingedLanes) &\n      renderLanes)\n  );\n}\nfunction getEntangledLanes(root, renderLanes) {\n  0 !== (renderLanes & 8) && (renderLanes |= renderLanes & 32);\n  var allEntangledLanes = root.entangledLanes;\n  if (0 !== allEntangledLanes)\n    for (\n      root = root.entanglements, allEntangledLanes &= renderLanes;\n      0 < allEntangledLanes;\n\n    ) {\n      var index$4 = 31 - clz32(allEntangledLanes),\n        lane = 1 << index$4;\n      renderLanes |= root[index$4];\n      allEntangledLanes &= ~lane;\n    }\n  return renderLanes;\n}\nfunction computeExpirationTime(lane, currentTime) {\n  switch (lane) {\n    case 1:\n    case 2:\n    case 4:\n    case 8:\n    case 64:\n      return currentTime + 250;\n    case 16:\n    case 32:\n    case 128:\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return currentTime + 5e3;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return -1;\n    case 67108864:\n    case 134217728:\n    case 268435456:\n    case 536870912:\n    case 1073741824:\n      return -1;\n    default:\n      return -1;\n  }\n}\nfunction claimNextRetryLane() {\n  var lane = nextRetryLane;\n  nextRetryLane <<= 1;\n  0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n  return lane;\n}\nfunction createLaneMap(initial) {\n  for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n  return laneMap;\n}\nfunction markRootUpdated$1(root, updateLane) {\n  root.pendingLanes |= updateLane;\n  268435456 !== updateLane &&\n    ((root.suspendedLanes = 0), (root.pingedLanes = 0), (root.warmLanes = 0));\n}\nfunction markRootFinished(\n  root,\n  finishedLanes,\n  remainingLanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  var previouslyPendingLanes = root.pendingLanes;\n  root.pendingLanes = remainingLanes;\n  root.suspendedLanes = 0;\n  root.pingedLanes = 0;\n  root.warmLanes = 0;\n  root.expiredLanes &= remainingLanes;\n  root.entangledLanes &= remainingLanes;\n  root.errorRecoveryDisabledLanes &= remainingLanes;\n  root.shellSuspendCounter = 0;\n  var entanglements = root.entanglements,\n    expirationTimes = root.expirationTimes,\n    hiddenUpdates = root.hiddenUpdates;\n  for (\n    remainingLanes = previouslyPendingLanes & ~remainingLanes;\n    0 < remainingLanes;\n\n  ) {\n    var index$7 = 31 - clz32(remainingLanes),\n      lane = 1 << index$7;\n    entanglements[index$7] = 0;\n    expirationTimes[index$7] = -1;\n    var hiddenUpdatesForLane = hiddenUpdates[index$7];\n    if (null !== hiddenUpdatesForLane)\n      for (\n        hiddenUpdates[index$7] = null, index$7 = 0;\n        index$7 < hiddenUpdatesForLane.length;\n        index$7++\n      ) {\n        var update = hiddenUpdatesForLane[index$7];\n        null !== update && (update.lane &= -536870913);\n      }\n    remainingLanes &= ~lane;\n  }\n  0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n  0 !== suspendedRetryLanes &&\n    0 === updatedLanes &&\n    0 !== root.tag &&\n    (root.suspendedLanes |=\n      suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n}\nfunction markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n  root.pendingLanes |= spawnedLane;\n  root.suspendedLanes &= ~spawnedLane;\n  var spawnedLaneIndex = 31 - clz32(spawnedLane);\n  root.entangledLanes |= spawnedLane;\n  root.entanglements[spawnedLaneIndex] =\n    root.entanglements[spawnedLaneIndex] |\n    1073741824 |\n    (entangledLanes & 261930);\n}\nfunction markRootEntangled(root, entangledLanes) {\n  var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n  for (root = root.entanglements; rootEntangledLanes; ) {\n    var index$8 = 31 - clz32(rootEntangledLanes),\n      lane = 1 << index$8;\n    (lane & entangledLanes) | (root[index$8] & entangledLanes) &&\n      (root[index$8] |= entangledLanes);\n    rootEntangledLanes &= ~lane;\n  }\n}\nfunction getBumpedLaneForHydration(root, renderLanes) {\n  var renderLane = renderLanes & -renderLanes;\n  renderLane =\n    0 !== (renderLane & 42) ? 1 : getBumpedLaneForHydrationByLane(renderLane);\n  return 0 !== (renderLane & (root.suspendedLanes | renderLanes))\n    ? 0\n    : renderLane;\n}\nfunction getBumpedLaneForHydrationByLane(lane) {\n  switch (lane) {\n    case 2:\n      lane = 1;\n      break;\n    case 8:\n      lane = 4;\n      break;\n    case 32:\n      lane = 16;\n      break;\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      lane = 128;\n      break;\n    case 268435456:\n      lane = 134217728;\n      break;\n    default:\n      lane = 0;\n  }\n  return lane;\n}\nfunction lanesToEventPriority(lanes) {\n  lanes &= -lanes;\n  return 2 < lanes\n    ? 8 < lanes\n      ? 0 !== (lanes & 134217727)\n        ? 32\n        : 268435456\n      : 8\n    : 2;\n}\nfunction resolveUpdatePriority() {\n  var updatePriority = ReactDOMSharedInternals.p;\n  if (0 !== updatePriority) return updatePriority;\n  updatePriority = window.event;\n  return void 0 === updatePriority ? 32 : getEventPriority(updatePriority.type);\n}\nfunction runWithPriority(priority, fn) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    return (ReactDOMSharedInternals.p = priority), fn();\n  } finally {\n    ReactDOMSharedInternals.p = previousPriority;\n  }\n}\nvar randomKey = Math.random().toString(36).slice(2),\n  internalInstanceKey = \"__reactFiber$\" + randomKey,\n  internalPropsKey = \"__reactProps$\" + randomKey,\n  internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n  internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n  internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n  internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n  internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n  internalHoistableMarker = \"__reactMarker$\" + randomKey,\n  internalLoadPendingKey = \"__reactLoad$\" + randomKey;\nfunction detachDeletedInstance(node) {\n  delete node[internalInstanceKey];\n  delete node[internalPropsKey];\n  delete node[internalEventHandlerListenersKey];\n  delete node[internalEventHandlesSetKey];\n}\nfunction getClosestInstanceFromNode(targetNode) {\n  var targetInst;\n  if ((targetInst = targetNode[internalInstanceKey])) return targetInst;\n  for (var parentNode = targetNode.parentNode; parentNode; ) {\n    if (\n      (targetInst =\n        parentNode[internalContainerInstanceKey] ||\n        parentNode[internalInstanceKey])\n    ) {\n      parentNode = targetInst.alternate;\n      if (\n        null !== targetInst.child ||\n        (null !== parentNode && null !== parentNode.child)\n      )\n        for (\n          targetNode = getParentHydrationBoundary(targetNode);\n          null !== targetNode;\n\n        ) {\n          if ((parentNode = targetNode[internalInstanceKey])) return parentNode;\n          targetNode = getParentHydrationBoundary(targetNode);\n        }\n      return targetInst;\n    }\n    targetNode = parentNode;\n    parentNode = targetNode.parentNode;\n  }\n  return null;\n}\nfunction getInstanceFromNode(node) {\n  if (\n    (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n  ) {\n    var tag = node.tag;\n    if (\n      5 === tag ||\n      6 === tag ||\n      13 === tag ||\n      31 === tag ||\n      26 === tag ||\n      27 === tag ||\n      3 === tag\n    )\n      return node;\n  }\n  return null;\n}\nfunction getNodeFromInstance(inst) {\n  var tag = inst.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;\n  throw Error(formatProdErrorMessage(33));\n}\nfunction getResourcesFromRoot(root) {\n  var resources = root[internalRootNodeResourcesKey];\n  resources ||\n    (resources = root[internalRootNodeResourcesKey] =\n      { hoistableStyles: new Map(), hoistableScripts: new Map() });\n  return resources;\n}\nfunction markNodeAsHoistable(node) {\n  node[internalHoistableMarker] = !0;\n}\nfunction clearPendingLoadOnNode(node) {\n  node[internalLoadPendingKey] = void 0;\n}\nvar allNativeEvents = new Set(),\n  registrationNameDependencies = {};\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n  registerDirectEvent(registrationName, dependencies);\n  registerDirectEvent(registrationName + \"Capture\", dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n  registrationNameDependencies[registrationName] = dependencies;\n  for (\n    registrationName = 0;\n    registrationName < dependencies.length;\n    registrationName++\n  )\n    allNativeEvents.add(dependencies[registrationName]);\n}\nvar VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n    \"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n  ),\n  illegalAttributeNameCache = {},\n  validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n    return !0;\n  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;\n  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n    return (validatedAttributeNameCache[attributeName] = !0);\n  illegalAttributeNameCache[attributeName] = !0;\n  return !1;\n}\nvar viewTransitionMutationContext = !1;\nfunction pushMutationContext() {\n  var prev = viewTransitionMutationContext;\n  viewTransitionMutationContext = !1;\n  return prev;\n}\nfunction setValueForAttribute(node, name, value) {\n  if (isAttributeNameSafe(name))\n    if (null === value) node.removeAttribute(name);\n    else {\n      switch (typeof value) {\n        case \"undefined\":\n        case \"function\":\n        case \"symbol\":\n          node.removeAttribute(name);\n          return;\n        case \"boolean\":\n          var prefix$10 = name.toLowerCase().slice(0, 5);\n          if (\"data-\" !== prefix$10 && \"aria-\" !== prefix$10) {\n            node.removeAttribute(name);\n            return;\n          }\n      }\n      node.setAttribute(name, value);\n    }\n}\nfunction setValueForKnownAttribute(node, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttribute(name, value);\n  }\n}\nfunction setValueForNamespacedAttribute(node, namespace, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttributeNS(namespace, name, value);\n  }\n}\nfunction getToStringValue(value) {\n  switch (typeof value) {\n    case \"bigint\":\n    case \"boolean\":\n    case \"number\":\n    case \"string\":\n    case \"undefined\":\n      return value;\n    case \"object\":\n      return value;\n    default:\n      return \"\";\n  }\n}\nfunction isCheckable(elem) {\n  var type = elem.type;\n  return (\n    (elem = elem.nodeName) &&\n    \"input\" === elem.toLowerCase() &&\n    (\"checkbox\" === type || \"radio\" === type)\n  );\n}\nfunction trackValueOnNode(node, valueField, currentValue) {\n  var descriptor = Object.getOwnPropertyDescriptor(\n    node.constructor.prototype,\n    valueField\n  );\n  if (\n    !node.hasOwnProperty(valueField) &&\n    \"undefined\" !== typeof descriptor &&\n    \"function\" === typeof descriptor.get &&\n    \"function\" === typeof descriptor.set\n  ) {\n    var get = descriptor.get,\n      set = descriptor.set;\n    Object.defineProperty(node, valueField, {\n      configurable: !0,\n      get: function () {\n        return get.call(this);\n      },\n      set: function (value) {\n        currentValue = \"\" + value;\n        set.call(this, value);\n      }\n    });\n    Object.defineProperty(node, valueField, {\n      enumerable: descriptor.enumerable\n    });\n    return {\n      getValue: function () {\n        return currentValue;\n      },\n      setValue: function (value) {\n        currentValue = \"\" + value;\n      },\n      stopTracking: function () {\n        node._valueTracker = null;\n        delete node[valueField];\n      }\n    };\n  }\n}\nfunction track(node) {\n  if (!node._valueTracker) {\n    var valueField = isCheckable(node) ? \"checked\" : \"value\";\n    node._valueTracker = trackValueOnNode(\n      node,\n      valueField,\n      \"\" + node[valueField]\n    );\n  }\n}\nfunction updateValueIfChanged(node) {\n  if (!node) return !1;\n  var tracker = node._valueTracker;\n  if (!tracker) return !0;\n  var lastValue = tracker.getValue();\n  var value = \"\";\n  node &&\n    (value = isCheckable(node)\n      ? node.checked\n        ? \"true\"\n        : \"false\"\n      : node.value);\n  node = value;\n  return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n}\nvar escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g;\nfunction escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n  return value.replace(\n    escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n    function (ch) {\n      return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n    }\n  );\n}\nfunction updateInput(\n  element,\n  value,\n  defaultValue,\n  lastDefaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name\n) {\n  element.name = \"\";\n  null != type &&\n  \"function\" !== typeof type &&\n  \"symbol\" !== typeof type &&\n  \"boolean\" !== typeof type\n    ? (element.type = type)\n    : element.removeAttribute(\"type\");\n  if (null != value)\n    if (\"number\" === type) {\n      if ((0 === value && \"\" === element.value) || element.value != value)\n        element.value = \"\" + getToStringValue(value);\n    } else\n      element.value !== \"\" + getToStringValue(value) &&\n        (element.value = \"\" + getToStringValue(value));\n  else\n    (\"submit\" !== type && \"reset\" !== type) || element.removeAttribute(\"value\");\n  null != value\n    ? \"number\" === type && element.value == value\n      ? setDefaultValue(element, getToStringValue(element.value))\n      : setDefaultValue(element, getToStringValue(value))\n    : null != defaultValue\n      ? setDefaultValue(element, getToStringValue(defaultValue))\n      : null != lastDefaultValue && element.removeAttribute(\"value\");\n  null == checked &&\n    null != defaultChecked &&\n    (element.defaultChecked = !!defaultChecked);\n  null != checked &&\n    (element.checked =\n      checked && \"function\" !== typeof checked && \"symbol\" !== typeof checked);\n  null != name &&\n  \"function\" !== typeof name &&\n  \"symbol\" !== typeof name &&\n  \"boolean\" !== typeof name\n    ? (element.name = \"\" + getToStringValue(name))\n    : element.removeAttribute(\"name\");\n}\nfunction initInput(\n  element,\n  value,\n  defaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name,\n  isHydrating\n) {\n  null != type &&\n    \"function\" !== typeof type &&\n    \"symbol\" !== typeof type &&\n    \"boolean\" !== typeof type &&\n    (element.type = type);\n  if (null != value || null != defaultValue) {\n    if (\n      !(\n        (\"submit\" !== type && \"reset\" !== type) ||\n        (void 0 !== value && null !== value)\n      )\n    ) {\n      track(element);\n      return;\n    }\n    defaultValue =\n      null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n    value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n    isHydrating || value === element.value || (element.value = value);\n    element.defaultValue = value;\n  }\n  checked = null != checked ? checked : defaultChecked;\n  checked =\n    \"function\" !== typeof checked && \"symbol\" !== typeof checked && !!checked;\n  element.checked = isHydrating ? element.checked : !!checked;\n  element.defaultChecked = !!checked;\n  null != name &&\n    \"function\" !== typeof name &&\n    \"symbol\" !== typeof name &&\n    \"boolean\" !== typeof name &&\n    (element.name = name);\n  track(element);\n}\nfunction setDefaultValue(node, value) {\n  node.defaultValue !== \"\" + value && (node.defaultValue = \"\" + value);\n}\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n  node = node.options;\n  if (multiple) {\n    multiple = {};\n    for (var i = 0; i < propValue.length; i++)\n      multiple[\"$\" + propValue[i]] = !0;\n    for (propValue = 0; propValue < node.length; propValue++)\n      (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n        node[propValue].selected !== i && (node[propValue].selected = i),\n        i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n  } else {\n    propValue = \"\" + getToStringValue(propValue);\n    multiple = null;\n    for (i = 0; i < node.length; i++) {\n      if (node[i].value === propValue) {\n        node[i].selected = !0;\n        setDefaultSelected && (node[i].defaultSelected = !0);\n        return;\n      }\n      null !== multiple || node[i].disabled || (multiple = node[i]);\n    }\n    null !== multiple && (multiple.selected = !0);\n  }\n}\nfunction updateTextarea(element, value, defaultValue) {\n  if (\n    null != value &&\n    ((value = \"\" + getToStringValue(value)),\n    value !== element.value && (element.value = value),\n    null == defaultValue)\n  ) {\n    element.defaultValue !== value && (element.defaultValue = value);\n    return;\n  }\n  element.defaultValue =\n    null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n}\nfunction initTextarea(element, value, defaultValue, children) {\n  if (null == value) {\n    if (null != children) {\n      if (null != defaultValue) throw Error(formatProdErrorMessage(92));\n      if (isArrayImpl(children)) {\n        if (1 < children.length) throw Error(formatProdErrorMessage(93));\n        children = children[0];\n      }\n      defaultValue = children;\n    }\n    null == defaultValue && (defaultValue = \"\");\n    value = defaultValue;\n  }\n  defaultValue = getToStringValue(value);\n  element.defaultValue = defaultValue;\n  children = element.textContent;\n  children === defaultValue &&\n    \"\" !== children &&\n    null !== children &&\n    (element.value = children);\n  track(element);\n}\nfunction setTextContent(node, text) {\n  if (text) {\n    var firstChild = node.firstChild;\n    if (\n      firstChild &&\n      firstChild === node.lastChild &&\n      3 === firstChild.nodeType\n    ) {\n      firstChild.nodeValue = text;\n      return;\n    }\n  }\n  node.textContent = text;\n}\nvar unitlessNumbers = new Set(\n  \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n    \" \"\n  )\n);\nfunction setValueForStyle(style, styleName, value) {\n  var isCustomProperty = 0 === styleName.indexOf(\"--\");\n  null == value || \"boolean\" === typeof value || \"\" === value\n    ? isCustomProperty\n      ? style.setProperty(styleName, \"\")\n      : \"float\" === styleName\n        ? (style.cssFloat = \"\")\n        : (style[styleName] = \"\")\n    : isCustomProperty\n      ? style.setProperty(styleName, value)\n      : \"number\" !== typeof value ||\n          0 === value ||\n          unitlessNumbers.has(styleName)\n        ? \"float\" === styleName\n          ? (style.cssFloat = value)\n          : (style[styleName] = (\"\" + value).trim())\n        : (style[styleName] = value + \"px\");\n}\nfunction setValueForStyles(node, styles, prevStyles) {\n  if (null != styles && \"object\" !== typeof styles)\n    throw Error(formatProdErrorMessage(62));\n  node = node.style;\n  if (null != prevStyles) {\n    for (var styleName in prevStyles)\n      !prevStyles.hasOwnProperty(styleName) ||\n        (null != styles && styles.hasOwnProperty(styleName)) ||\n        (0 === styleName.indexOf(\"--\")\n          ? node.setProperty(styleName, \"\")\n          : \"float\" === styleName\n            ? (node.cssFloat = \"\")\n            : (node[styleName] = \"\"),\n        (viewTransitionMutationContext = !0));\n    for (var styleName$16 in styles)\n      (styleName = styles[styleName$16]),\n        styles.hasOwnProperty(styleName$16) &&\n          prevStyles[styleName$16] !== styleName &&\n          (setValueForStyle(node, styleName$16, styleName),\n          (viewTransitionMutationContext = !0));\n  } else\n    for (var styleName$17 in styles)\n      styles.hasOwnProperty(styleName$17) &&\n        setValueForStyle(node, styleName$17, styles[styleName$17]);\n}\nfunction isCustomElement(tagName) {\n  if (-1 === tagName.indexOf(\"-\")) return !1;\n  switch (tagName) {\n    case \"annotation-xml\":\n    case \"color-profile\":\n    case \"font-face\":\n    case \"font-face-src\":\n    case \"font-face-uri\":\n    case \"font-face-format\":\n    case \"font-face-name\":\n    case \"missing-glyph\":\n      return !1;\n    default:\n      return !0;\n  }\n}\nvar aliases = new Map([\n    [\"acceptCharset\", \"accept-charset\"],\n    [\"htmlFor\", \"for\"],\n    [\"httpEquiv\", \"http-equiv\"],\n    [\"crossOrigin\", \"crossorigin\"],\n    [\"accentHeight\", \"accent-height\"],\n    [\"alignmentBaseline\", \"alignment-baseline\"],\n    [\"arabicForm\", \"arabic-form\"],\n    [\"baselineShift\", \"baseline-shift\"],\n    [\"capHeight\", \"cap-height\"],\n    [\"clipPath\", \"clip-path\"],\n    [\"clipRule\", \"clip-rule\"],\n    [\"colorInterpolation\", \"color-interpolation\"],\n    [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n    [\"colorProfile\", \"color-profile\"],\n    [\"colorRendering\", \"color-rendering\"],\n    [\"dominantBaseline\", \"dominant-baseline\"],\n    [\"enableBackground\", \"enable-background\"],\n    [\"fillOpacity\", \"fill-opacity\"],\n    [\"fillRule\", \"fill-rule\"],\n    [\"floodColor\", \"flood-color\"],\n    [\"floodOpacity\", \"flood-opacity\"],\n    [\"fontFamily\", \"font-family\"],\n    [\"fontSize\", \"font-size\"],\n    [\"fontSizeAdjust\", \"font-size-adjust\"],\n    [\"fontStretch\", \"font-stretch\"],\n    [\"fontStyle\", \"font-style\"],\n    [\"fontVariant\", \"font-variant\"],\n    [\"fontWeight\", \"font-weight\"],\n    [\"glyphName\", \"glyph-name\"],\n    [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n    [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n    [\"horizAdvX\", \"horiz-adv-x\"],\n    [\"horizOriginX\", \"horiz-origin-x\"],\n    [\"imageRendering\", \"image-rendering\"],\n    [\"letterSpacing\", \"letter-spacing\"],\n    [\"lightingColor\", \"lighting-color\"],\n    [\"markerEnd\", \"marker-end\"],\n    [\"markerMid\", \"marker-mid\"],\n    [\"markerStart\", \"marker-start\"],\n    [\"maskType\", \"mask-type\"],\n    [\"overlinePosition\", \"overline-position\"],\n    [\"overlineThickness\", \"overline-thickness\"],\n    [\"paintOrder\", \"paint-order\"],\n    [\"panose-1\", \"panose-1\"],\n    [\"pointerEvents\", \"pointer-events\"],\n    [\"renderingIntent\", \"rendering-intent\"],\n    [\"shapeRendering\", \"shape-rendering\"],\n    [\"stopColor\", \"stop-color\"],\n    [\"stopOpacity\", \"stop-opacity\"],\n    [\"strikethroughPosition\", \"strikethrough-position\"],\n    [\"strikethroughThickness\", \"strikethrough-thickness\"],\n    [\"strokeDasharray\", \"stroke-dasharray\"],\n    [\"strokeDashoffset\", \"stroke-dashoffset\"],\n    [\"strokeLinecap\", \"stroke-linecap\"],\n    [\"strokeLinejoin\", \"stroke-linejoin\"],\n    [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n    [\"strokeOpacity\", \"stroke-opacity\"],\n    [\"strokeWidth\", \"stroke-width\"],\n    [\"textAnchor\", \"text-anchor\"],\n    [\"textDecoration\", \"text-decoration\"],\n    [\"textRendering\", \"text-rendering\"],\n    [\"transformOrigin\", \"transform-origin\"],\n    [\"underlinePosition\", \"underline-position\"],\n    [\"underlineThickness\", \"underline-thickness\"],\n    [\"unicodeBidi\", \"unicode-bidi\"],\n    [\"unicodeRange\", \"unicode-range\"],\n    [\"unitsPerEm\", \"units-per-em\"],\n    [\"vAlphabetic\", \"v-alphabetic\"],\n    [\"vHanging\", \"v-hanging\"],\n    [\"vIdeographic\", \"v-ideographic\"],\n    [\"vMathematical\", \"v-mathematical\"],\n    [\"vectorEffect\", \"vector-effect\"],\n    [\"vertAdvY\", \"vert-adv-y\"],\n    [\"vertOriginX\", \"vert-origin-x\"],\n    [\"vertOriginY\", \"vert-origin-y\"],\n    [\"wordSpacing\", \"word-spacing\"],\n    [\"writingMode\", \"writing-mode\"],\n    [\"xmlnsXlink\", \"xmlns:xlink\"],\n    [\"xHeight\", \"x-height\"]\n  ]),\n  isJavaScriptProtocol =\n    /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;\nfunction sanitizeURL(url) {\n  return isJavaScriptProtocol.test(\"\" + url)\n    ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n    : url;\n}\nfunction noop$1() {}\nvar currentReplayingEvent = null;\nfunction getEventTarget(nativeEvent) {\n  nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n  nativeEvent.correspondingUseElement &&\n    (nativeEvent = nativeEvent.correspondingUseElement);\n  return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n}\nvar restoreTarget = null,\n  restoreQueue = null;\nfunction restoreStateOfTarget(target) {\n  var internalInstance = getInstanceFromNode(target);\n  if (internalInstance && (target = internalInstance.stateNode)) {\n    var props = target[internalPropsKey] || null;\n    a: switch (((target = internalInstance.stateNode), internalInstance.type)) {\n      case \"input\":\n        updateInput(\n          target,\n          props.value,\n          props.defaultValue,\n          props.defaultValue,\n          props.checked,\n          props.defaultChecked,\n          props.type,\n          props.name\n        );\n        internalInstance = props.name;\n        if (\"radio\" === props.type && null != internalInstance) {\n          for (props = target; props.parentNode; ) props = props.parentNode;\n          props = props.querySelectorAll(\n            'input[name=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                \"\" + internalInstance\n              ) +\n              '\"][type=\"radio\"]'\n          );\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          ) {\n            var otherNode = props[internalInstance];\n            if (otherNode !== target && otherNode.form === target.form) {\n              var otherProps = otherNode[internalPropsKey] || null;\n              if (!otherProps) throw Error(formatProdErrorMessage(90));\n              updateInput(\n                otherNode,\n                otherProps.value,\n                otherProps.defaultValue,\n                otherProps.defaultValue,\n                otherProps.checked,\n                otherProps.defaultChecked,\n                otherProps.type,\n                otherProps.name\n              );\n            }\n          }\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          )\n            (otherNode = props[internalInstance]),\n              otherNode.form === target.form && updateValueIfChanged(otherNode);\n        }\n        break a;\n      case \"textarea\":\n        updateTextarea(target, props.value, props.defaultValue);\n        break a;\n      case \"select\":\n        (internalInstance = props.value),\n          null != internalInstance &&\n            updateOptions(target, !!props.multiple, internalInstance, !1);\n    }\n  }\n}\nvar isInsideEventHandler = !1;\nfunction batchedUpdates$1(fn, a, b) {\n  if (isInsideEventHandler) return fn(a, b);\n  isInsideEventHandler = !0;\n  try {\n    var JSCompiler_inline_result = fn(a);\n    return JSCompiler_inline_result;\n  } finally {\n    if (\n      ((isInsideEventHandler = !1),\n      null !== restoreTarget || null !== restoreQueue)\n    )\n      if (\n        (flushSyncWork$1(),\n        restoreTarget &&\n          ((a = restoreTarget),\n          (fn = restoreQueue),\n          (restoreQueue = restoreTarget = null),\n          restoreStateOfTarget(a),\n          fn))\n      )\n        for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n  }\n}\nfunction getListener(inst, registrationName) {\n  var stateNode = inst.stateNode;\n  if (null === stateNode) return null;\n  var props = stateNode[internalPropsKey] || null;\n  if (null === props) return null;\n  stateNode = props[registrationName];\n  a: switch (registrationName) {\n    case \"onClick\":\n    case \"onClickCapture\":\n    case \"onDoubleClick\":\n    case \"onDoubleClickCapture\":\n    case \"onMouseDown\":\n    case \"onMouseDownCapture\":\n    case \"onMouseMove\":\n    case \"onMouseMoveCapture\":\n    case \"onMouseUp\":\n    case \"onMouseUpCapture\":\n    case \"onMouseEnter\":\n      (props = !props.disabled) ||\n        ((inst = inst.type),\n        (props = !(\n          \"button\" === inst ||\n          \"input\" === inst ||\n          \"select\" === inst ||\n          \"textarea\" === inst\n        )));\n      inst = !props;\n      break a;\n    default:\n      inst = !1;\n  }\n  if (inst) return null;\n  if (stateNode && \"function\" !== typeof stateNode)\n    throw Error(\n      formatProdErrorMessage(231, registrationName, typeof stateNode)\n    );\n  return stateNode;\n}\nvar canUseDOM = !(\n    \"undefined\" === typeof window ||\n    \"undefined\" === typeof window.document ||\n    \"undefined\" === typeof window.document.createElement\n  ),\n  passiveBrowserEventsSupported = !1;\nif (canUseDOM)\n  try {\n    var options = {};\n    Object.defineProperty(options, \"passive\", {\n      get: function () {\n        passiveBrowserEventsSupported = !0;\n      }\n    });\n    window.addEventListener(\"test\", options, options);\n    window.removeEventListener(\"test\", options, options);\n  } catch (e) {\n    passiveBrowserEventsSupported = !1;\n  }\nvar root = null,\n  startText = null,\n  fallbackText = null;\nfunction getData() {\n  if (fallbackText) return fallbackText;\n  var start,\n    startValue = startText,\n    startLength = startValue.length,\n    end,\n    endValue = \"value\" in root ? root.value : root.textContent,\n    endLength = endValue.length;\n  for (\n    start = 0;\n    start < startLength && startValue[start] === endValue[start];\n    start++\n  );\n  var minEnd = startLength - start;\n  for (\n    end = 1;\n    end <= minEnd &&\n    startValue[startLength - end] === endValue[endLength - end];\n    end++\n  );\n  return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n}\nfunction getEventCharCode(nativeEvent) {\n  var keyCode = nativeEvent.keyCode;\n  \"charCode\" in nativeEvent\n    ? ((nativeEvent = nativeEvent.charCode),\n      0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n    : (nativeEvent = keyCode);\n  10 === nativeEvent && (nativeEvent = 13);\n  return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n}\nfunction functionThatReturnsTrue() {\n  return !0;\n}\nfunction functionThatReturnsFalse() {\n  return !1;\n}\nfunction createSyntheticEvent(Interface) {\n  function SyntheticBaseEvent(\n    reactName,\n    reactEventType,\n    targetInst,\n    nativeEvent,\n    nativeEventTarget\n  ) {\n    this._reactName = reactName;\n    this._targetInst = targetInst;\n    this.type = reactEventType;\n    this.nativeEvent = nativeEvent;\n    this.target = nativeEventTarget;\n    this.currentTarget = null;\n    for (var propName in Interface)\n      Interface.hasOwnProperty(propName) &&\n        ((reactName = Interface[propName]),\n        (this[propName] = reactName\n          ? reactName(nativeEvent)\n          : nativeEvent[propName]));\n    this.isDefaultPrevented = (\n      null != nativeEvent.defaultPrevented\n        ? nativeEvent.defaultPrevented\n        : !1 === nativeEvent.returnValue\n    )\n      ? functionThatReturnsTrue\n      : functionThatReturnsFalse;\n    this.isPropagationStopped = functionThatReturnsFalse;\n    return this;\n  }\n  assign(SyntheticBaseEvent.prototype, {\n    preventDefault: function () {\n      this.defaultPrevented = !0;\n      var event = this.nativeEvent;\n      event &&\n        (event.preventDefault\n          ? event.preventDefault()\n          : \"unknown\" !== typeof event.returnValue && (event.returnValue = !1),\n        (this.isDefaultPrevented = functionThatReturnsTrue));\n    },\n    stopPropagation: function () {\n      var event = this.nativeEvent;\n      event &&\n        (event.stopPropagation\n          ? event.stopPropagation()\n          : \"unknown\" !== typeof event.cancelBubble &&\n            (event.cancelBubble = !0),\n        (this.isPropagationStopped = functionThatReturnsTrue));\n    },\n    persist: function () {},\n    isPersistent: functionThatReturnsTrue\n  });\n  return SyntheticBaseEvent;\n}\nvar EventInterface = {\n    eventPhase: 0,\n    bubbles: 0,\n    cancelable: 0,\n    timeStamp: function (event) {\n      return event.timeStamp || Date.now();\n    },\n    defaultPrevented: 0,\n    isTrusted: 0\n  },\n  SyntheticEvent = createSyntheticEvent(EventInterface),\n  UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n  SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n  lastMovementX,\n  lastMovementY,\n  lastMouseEvent,\n  MouseEventInterface = assign({}, UIEventInterface, {\n    screenX: 0,\n    screenY: 0,\n    clientX: 0,\n    clientY: 0,\n    pageX: 0,\n    pageY: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    getModifierState: getEventModifierState,\n    button: 0,\n    buttons: 0,\n    relatedTarget: function (event) {\n      return void 0 === event.relatedTarget\n        ? event.fromElement === event.srcElement\n          ? event.toElement\n          : event.fromElement\n        : event.relatedTarget;\n    },\n    movementX: function (event) {\n      if (\"movementX\" in event) return event.movementX;\n      event !== lastMouseEvent &&\n        (lastMouseEvent && \"mousemove\" === event.type\n          ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n            (lastMovementY = event.screenY - lastMouseEvent.screenY))\n          : (lastMovementY = lastMovementX = 0),\n        (lastMouseEvent = event));\n      return lastMovementX;\n    },\n    movementY: function (event) {\n      return \"movementY\" in event ? event.movementY : lastMovementY;\n    }\n  }),\n  SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n  DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n  SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n  FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n  SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n  AnimationEventInterface = assign({}, EventInterface, {\n    animationName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n  ClipboardEventInterface = assign({}, EventInterface, {\n    clipboardData: function (event) {\n      return \"clipboardData\" in event\n        ? event.clipboardData\n        : window.clipboardData;\n    }\n  }),\n  SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n  CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n  SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface),\n  normalizeKey = {\n    Esc: \"Escape\",\n    Spacebar: \" \",\n    Left: \"ArrowLeft\",\n    Up: \"ArrowUp\",\n    Right: \"ArrowRight\",\n    Down: \"ArrowDown\",\n    Del: \"Delete\",\n    Win: \"OS\",\n    Menu: \"ContextMenu\",\n    Apps: \"ContextMenu\",\n    Scroll: \"ScrollLock\",\n    MozPrintableKey: \"Unidentified\"\n  },\n  translateToKey = {\n    8: \"Backspace\",\n    9: \"Tab\",\n    12: \"Clear\",\n    13: \"Enter\",\n    16: \"Shift\",\n    17: \"Control\",\n    18: \"Alt\",\n    19: \"Pause\",\n    20: \"CapsLock\",\n    27: \"Escape\",\n    32: \" \",\n    33: \"PageUp\",\n    34: \"PageDown\",\n    35: \"End\",\n    36: \"Home\",\n    37: \"ArrowLeft\",\n    38: \"ArrowUp\",\n    39: \"ArrowRight\",\n    40: \"ArrowDown\",\n    45: \"Insert\",\n    46: \"Delete\",\n    112: \"F1\",\n    113: \"F2\",\n    114: \"F3\",\n    115: \"F4\",\n    116: \"F5\",\n    117: \"F6\",\n    118: \"F7\",\n    119: \"F8\",\n    120: \"F9\",\n    121: \"F10\",\n    122: \"F11\",\n    123: \"F12\",\n    144: \"NumLock\",\n    145: \"ScrollLock\",\n    224: \"Meta\"\n  },\n  modifierKeyToProp = {\n    Alt: \"altKey\",\n    Control: \"ctrlKey\",\n    Meta: \"metaKey\",\n    Shift: \"shiftKey\"\n  };\nfunction modifierStateGetter(keyArg) {\n  var nativeEvent = this.nativeEvent;\n  return nativeEvent.getModifierState\n    ? nativeEvent.getModifierState(keyArg)\n    : (keyArg = modifierKeyToProp[keyArg])\n      ? !!nativeEvent[keyArg]\n      : !1;\n}\nfunction getEventModifierState() {\n  return modifierStateGetter;\n}\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n    key: function (nativeEvent) {\n      if (nativeEvent.key) {\n        var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n        if (\"Unidentified\" !== key) return key;\n      }\n      return \"keypress\" === nativeEvent.type\n        ? ((nativeEvent = getEventCharCode(nativeEvent)),\n          13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n        : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n          ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n          : \"\";\n    },\n    code: 0,\n    location: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    repeat: 0,\n    locale: 0,\n    getModifierState: getEventModifierState,\n    charCode: function (event) {\n      return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n    },\n    keyCode: function (event) {\n      return \"keydown\" === event.type || \"keyup\" === event.type\n        ? event.keyCode\n        : 0;\n    },\n    which: function (event) {\n      return \"keypress\" === event.type\n        ? getEventCharCode(event)\n        : \"keydown\" === event.type || \"keyup\" === event.type\n          ? event.keyCode\n          : 0;\n    }\n  }),\n  SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n  PointerEventInterface = assign({}, MouseEventInterface, {\n    pointerId: 0,\n    width: 0,\n    height: 0,\n    pressure: 0,\n    tangentialPressure: 0,\n    tiltX: 0,\n    tiltY: 0,\n    twist: 0,\n    pointerType: 0,\n    isPrimary: 0\n  }),\n  SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n  SubmitEventInterface = assign({}, EventInterface, { submitter: 0 }),\n  SyntheticSubmitEvent = createSyntheticEvent(SubmitEventInterface),\n  TouchEventInterface = assign({}, UIEventInterface, {\n    touches: 0,\n    targetTouches: 0,\n    changedTouches: 0,\n    altKey: 0,\n    metaKey: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    getModifierState: getEventModifierState\n  }),\n  SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n  TransitionEventInterface = assign({}, EventInterface, {\n    propertyName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n  WheelEventInterface = assign({}, MouseEventInterface, {\n    deltaX: function (event) {\n      return \"deltaX\" in event\n        ? event.deltaX\n        : \"wheelDeltaX\" in event\n          ? -event.wheelDeltaX\n          : 0;\n    },\n    deltaY: function (event) {\n      return \"deltaY\" in event\n        ? event.deltaY\n        : \"wheelDeltaY\" in event\n          ? -event.wheelDeltaY\n          : \"wheelDelta\" in event\n            ? -event.wheelDelta\n            : 0;\n    },\n    deltaZ: 0,\n    deltaMode: 0\n  }),\n  SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n  ToggleEventInterface = assign({}, EventInterface, {\n    newState: 0,\n    oldState: 0,\n    source: 0\n  }),\n  SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n  END_KEYCODES = [9, 13, 27, 32],\n  canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n  documentMode = null;\ncanUseDOM &&\n  \"documentMode\" in document &&\n  (documentMode = document.documentMode);\nvar canUseTextInputEvent = canUseDOM && \"TextEvent\" in window && !documentMode,\n  useFallbackCompositionData =\n    canUseDOM &&\n    (!canUseCompositionEvent ||\n      (documentMode && 8 < documentMode && 11 >= documentMode)),\n  SPACEBAR_CHAR = String.fromCharCode(32),\n  hasSpaceKeypress = !1;\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"keyup\":\n      return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n    case \"keydown\":\n      return 229 !== nativeEvent.keyCode;\n    case \"keypress\":\n    case \"mousedown\":\n    case \"focusout\":\n      return !0;\n    default:\n      return !1;\n  }\n}\nfunction getDataFromCustomEvent(nativeEvent) {\n  nativeEvent = nativeEvent.detail;\n  return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n    ? nativeEvent.data\n    : null;\n}\nvar isComposing = !1;\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"compositionend\":\n      return getDataFromCustomEvent(nativeEvent);\n    case \"keypress\":\n      if (32 !== nativeEvent.which) return null;\n      hasSpaceKeypress = !0;\n      return SPACEBAR_CHAR;\n    case \"textInput\":\n      return (\n        (domEventName = nativeEvent.data),\n        domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName\n      );\n    default:\n      return null;\n  }\n}\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n  if (isComposing)\n    return \"compositionend\" === domEventName ||\n      (!canUseCompositionEvent &&\n        isFallbackCompositionEnd(domEventName, nativeEvent))\n      ? ((domEventName = getData()),\n        (fallbackText = startText = root = null),\n        (isComposing = !1),\n        domEventName)\n      : null;\n  switch (domEventName) {\n    case \"paste\":\n      return null;\n    case \"keypress\":\n      if (\n        !(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) ||\n        (nativeEvent.ctrlKey && nativeEvent.altKey)\n      ) {\n        if (nativeEvent.char && 1 < nativeEvent.char.length)\n          return nativeEvent.char;\n        if (nativeEvent.which) return String.fromCharCode(nativeEvent.which);\n      }\n      return null;\n    case \"compositionend\":\n      return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n        ? null\n        : nativeEvent.data;\n    default:\n      return null;\n  }\n}\nvar supportedInputTypes = {\n  color: !0,\n  date: !0,\n  datetime: !0,\n  \"datetime-local\": !0,\n  email: !0,\n  month: !0,\n  number: !0,\n  password: !0,\n  range: !0,\n  search: !0,\n  tel: !0,\n  text: !0,\n  time: !0,\n  url: !0,\n  week: !0\n};\nfunction isTextInputElement(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return \"input\" === nodeName\n    ? !!supportedInputTypes[elem.type]\n    : \"textarea\" === nodeName\n      ? !0\n      : !1;\n}\nfunction createAndAccumulateChangeEvent(\n  dispatchQueue,\n  inst,\n  nativeEvent,\n  target\n) {\n  restoreTarget\n    ? restoreQueue\n      ? restoreQueue.push(target)\n      : (restoreQueue = [target])\n    : (restoreTarget = target);\n  inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n  0 < inst.length &&\n    ((nativeEvent = new SyntheticEvent(\n      \"onChange\",\n      \"change\",\n      null,\n      nativeEvent,\n      target\n    )),\n    dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n}\nvar activeElement$1 = null,\n  activeElementInst$1 = null;\nfunction runEventInBatch(dispatchQueue) {\n  processDispatchQueue(dispatchQueue, 0);\n}\nfunction getInstIfValueChanged(targetInst) {\n  var targetNode = getNodeFromInstance(targetInst);\n  if (updateValueIfChanged(targetNode)) return targetInst;\n}\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n  if (\"change\" === domEventName) return targetInst;\n}\nvar isInputEventSupported = !1;\nif (canUseDOM) {\n  var JSCompiler_inline_result$jscomp$318;\n  if (canUseDOM) {\n    var isSupported$jscomp$inline_474 = \"oninput\" in document;\n    if (!isSupported$jscomp$inline_474) {\n      var element$jscomp$inline_475 = document.createElement(\"div\");\n      element$jscomp$inline_475.setAttribute(\"oninput\", \"return;\");\n      isSupported$jscomp$inline_474 =\n        \"function\" === typeof element$jscomp$inline_475.oninput;\n    }\n    JSCompiler_inline_result$jscomp$318 = isSupported$jscomp$inline_474;\n  } else JSCompiler_inline_result$jscomp$318 = !1;\n  isInputEventSupported =\n    JSCompiler_inline_result$jscomp$318 &&\n    (!document.documentMode || 9 < document.documentMode);\n}\nfunction stopWatchingForValueChange() {\n  activeElement$1 &&\n    (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n    (activeElementInst$1 = activeElement$1 = null));\n}\nfunction handlePropertyChange(nativeEvent) {\n  if (\n    \"value\" === nativeEvent.propertyName &&\n    getInstIfValueChanged(activeElementInst$1)\n  ) {\n    var dispatchQueue = [];\n    createAndAccumulateChangeEvent(\n      dispatchQueue,\n      activeElementInst$1,\n      nativeEvent,\n      getEventTarget(nativeEvent)\n    );\n    batchedUpdates$1(runEventInBatch, dispatchQueue);\n  }\n}\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n  \"focusin\" === domEventName\n    ? (stopWatchingForValueChange(),\n      (activeElement$1 = target),\n      (activeElementInst$1 = targetInst),\n      activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n    : \"focusout\" === domEventName && stopWatchingForValueChange();\n}\nfunction getTargetInstForInputEventPolyfill(domEventName) {\n  if (\n    \"selectionchange\" === domEventName ||\n    \"keyup\" === domEventName ||\n    \"keydown\" === domEventName\n  )\n    return getInstIfValueChanged(activeElementInst$1);\n}\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n  if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n}\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n  if (\"input\" === domEventName || \"change\" === domEventName)\n    return getInstIfValueChanged(targetInst);\n}\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is;\nfunction shallowEqual(objA, objB) {\n  if (objectIs(objA, objB)) return !0;\n  if (\n    \"object\" !== typeof objA ||\n    null === objA ||\n    \"object\" !== typeof objB ||\n    null === objB\n  )\n    return !1;\n  var keysA = Object.keys(objA),\n    keysB = Object.keys(objB);\n  if (keysA.length !== keysB.length) return !1;\n  for (keysB = 0; keysB < keysA.length; keysB++) {\n    var currentKey = keysA[keysB];\n    if (\n      !hasOwnProperty.call(objB, currentKey) ||\n      !objectIs(objA[currentKey], objB[currentKey])\n    )\n      return !1;\n  }\n  return !0;\n}\nfunction getActiveElement(doc) {\n  doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n  if (\"undefined\" === typeof doc) return null;\n  try {\n    return doc.activeElement || doc.body;\n  } catch (e$20) {\n    return doc.body;\n  }\n}\nfunction getLeafNode(node) {\n  for (; node && node.firstChild; ) node = node.firstChild;\n  return node;\n}\nfunction getNodeForCharacterOffset(root, offset) {\n  var node = getLeafNode(root);\n  root = 0;\n  for (var nodeEnd; node; ) {\n    if (3 === node.nodeType) {\n      nodeEnd = root + node.textContent.length;\n      if (root <= offset && nodeEnd >= offset)\n        return { node: node, offset: offset - root };\n      root = nodeEnd;\n    }\n    a: {\n      for (; node; ) {\n        if (node.nextSibling) {\n          node = node.nextSibling;\n          break a;\n        }\n        node = node.parentNode;\n      }\n      node = void 0;\n    }\n    node = getLeafNode(node);\n  }\n}\nfunction containsNode(outerNode, innerNode) {\n  return outerNode && innerNode\n    ? outerNode === innerNode\n      ? !0\n      : outerNode && 3 === outerNode.nodeType\n        ? !1\n        : innerNode && 3 === innerNode.nodeType\n          ? containsNode(outerNode, innerNode.parentNode)\n          : \"contains\" in outerNode\n            ? outerNode.contains(innerNode)\n            : outerNode.compareDocumentPosition\n              ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n              : !1\n    : !1;\n}\nfunction getActiveElementDeep(containerInfo) {\n  containerInfo =\n    null != containerInfo &&\n    null != containerInfo.ownerDocument &&\n    null != containerInfo.ownerDocument.defaultView\n      ? containerInfo.ownerDocument.defaultView\n      : window;\n  for (\n    var element = getActiveElement(containerInfo.document);\n    element instanceof containerInfo.HTMLIFrameElement;\n\n  ) {\n    try {\n      var JSCompiler_inline_result =\n        \"string\" === typeof element.contentWindow.location.href;\n    } catch (err) {\n      JSCompiler_inline_result = !1;\n    }\n    if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n    else break;\n    element = getActiveElement(containerInfo.document);\n  }\n  return element;\n}\nfunction hasSelectionCapabilities(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return (\n    nodeName &&\n    ((\"input\" === nodeName &&\n      (\"text\" === elem.type ||\n        \"search\" === elem.type ||\n        \"tel\" === elem.type ||\n        \"url\" === elem.type ||\n        \"password\" === elem.type)) ||\n      \"textarea\" === nodeName ||\n      \"true\" === elem.contentEditable)\n  );\n}\nvar skipSelectionChangeEvent =\n    canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n  activeElement = null,\n  activeElementInst = null,\n  lastSelection = null,\n  mouseDown = !1;\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n  var doc =\n    nativeEventTarget.window === nativeEventTarget\n      ? nativeEventTarget.document\n      : 9 === nativeEventTarget.nodeType\n        ? nativeEventTarget\n        : nativeEventTarget.ownerDocument;\n  mouseDown ||\n    null == activeElement ||\n    activeElement !== getActiveElement(doc) ||\n    ((doc = activeElement),\n    \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n      ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n      : ((doc = (\n          (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n          window\n        ).getSelection()),\n        (doc = {\n          anchorNode: doc.anchorNode,\n          anchorOffset: doc.anchorOffset,\n          focusNode: doc.focusNode,\n          focusOffset: doc.focusOffset\n        })),\n    (lastSelection && shallowEqual(lastSelection, doc)) ||\n      ((lastSelection = doc),\n      (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n      0 < doc.length &&\n        ((nativeEvent = new SyntheticEvent(\n          \"onSelect\",\n          \"select\",\n          null,\n          nativeEvent,\n          nativeEventTarget\n        )),\n        dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n        (nativeEvent.target = activeElement))));\n}\nfunction makePrefixMap(styleProp, eventName) {\n  var prefixes = {};\n  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n  prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n  prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n  return prefixes;\n}\nvar vendorPrefixes = {\n    animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n    animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n    animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n    transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n    transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n    transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n    transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n  },\n  prefixedEventNames = {},\n  style = {};\ncanUseDOM &&\n  ((style = document.createElement(\"div\").style),\n  \"AnimationEvent\" in window ||\n    (delete vendorPrefixes.animationend.animation,\n    delete vendorPrefixes.animationiteration.animation,\n    delete vendorPrefixes.animationstart.animation),\n  \"TransitionEvent\" in window ||\n    delete vendorPrefixes.transitionend.transition);\nfunction getVendorPrefixedEventName(eventName) {\n  if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n  if (!vendorPrefixes[eventName]) return eventName;\n  var prefixMap = vendorPrefixes[eventName],\n    styleProp;\n  for (styleProp in prefixMap)\n    if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n      return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n  return eventName;\n}\nvar ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n  ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n  ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n  TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n  TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n  TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n  TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n  topLevelEventsToReactNames = new Map(),\n  simpleEventPluginEvents =\n    \"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error fullscreenChange fullscreenError gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\n      \" \"\n    );\nsimpleEventPluginEvents.push(\"scrollEnd\");\nfunction registerSimpleEvent(domEventName, reactName) {\n  topLevelEventsToReactNames.set(domEventName, reactName);\n  registerTwoPhaseEvent(reactName, [domEventName]);\n}\nvar globalClientIdCounter$1 = 0;\nfunction getViewTransitionName(props, instance) {\n  if (null != props.name && \"auto\" !== props.name) return props.name;\n  if (null !== instance.autoName) return instance.autoName;\n  props = pendingEffectsRoot.identifierPrefix;\n  var globalClientId = globalClientIdCounter$1++;\n  props = \"_\" + props + \"t_\" + globalClientId.toString(32) + \"_\";\n  return (instance.autoName = props);\n}\nfunction getClassNameByType(classByType) {\n  if (null == classByType || \"string\" === typeof classByType)\n    return classByType;\n  var className = null,\n    activeTypes = pendingTransitionTypes;\n  if (null !== activeTypes)\n    for (var i = 0; i < activeTypes.length; i++) {\n      var match = classByType[activeTypes[i]];\n      if (null != match) {\n        if (\"none\" === match) return \"none\";\n        className = null == className ? match : className + (\" \" + match);\n      }\n    }\n  return null == className ? classByType.default : className;\n}\nfunction getViewTransitionClassName(defaultClass, eventClass) {\n  defaultClass = getClassNameByType(defaultClass);\n  eventClass = getClassNameByType(eventClass);\n  return null == eventClass\n    ? \"auto\" === defaultClass\n      ? null\n      : defaultClass\n    : \"auto\" === eventClass\n      ? null\n      : eventClass;\n}\nvar reportGlobalError =\n    \"function\" === typeof reportError\n      ? reportError\n      : function (error) {\n          if (\n            \"object\" === typeof window &&\n            \"function\" === typeof window.ErrorEvent\n          ) {\n            var event = new window.ErrorEvent(\"error\", {\n              bubbles: !0,\n              cancelable: !0,\n              message:\n                \"object\" === typeof error &&\n                null !== error &&\n                \"string\" === typeof error.message\n                  ? String(error.message)\n                  : String(error),\n              error: error\n            });\n            if (!window.dispatchEvent(event)) return;\n          } else if (\n            \"object\" === typeof process &&\n            \"function\" === typeof process.emit\n          ) {\n            process.emit(\"uncaughtException\", error);\n            return;\n          }\n          console.error(error);\n        },\n  concurrentQueues = [],\n  concurrentQueuesIndex = 0,\n  concurrentlyUpdatedLanes = 0;\nfunction finishQueueingConcurrentUpdates() {\n  for (\n    var endIndex = concurrentQueuesIndex,\n      i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n    i < endIndex;\n\n  ) {\n    var fiber = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var queue = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var update = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var lane = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    if (null !== queue && null !== update) {\n      var pending = queue.pending;\n      null === pending\n        ? (update.next = update)\n        : ((update.next = pending.next), (pending.next = update));\n      queue.pending = update;\n    }\n    0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n  }\n}\nfunction enqueueUpdate$1(fiber, queue, update, lane) {\n  concurrentQueues[concurrentQueuesIndex++] = fiber;\n  concurrentQueues[concurrentQueuesIndex++] = queue;\n  concurrentQueues[concurrentQueuesIndex++] = update;\n  concurrentQueues[concurrentQueuesIndex++] = lane;\n  concurrentlyUpdatedLanes |= lane;\n  fiber.lanes |= lane;\n  fiber = fiber.alternate;\n  null !== fiber && (fiber.lanes |= lane);\n}\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n  enqueueUpdate$1(fiber, queue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n  enqueueUpdate$1(fiber, null, null, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n  sourceFiber.lanes |= lane;\n  var alternate = sourceFiber.alternate;\n  null !== alternate && (alternate.lanes |= lane);\n  for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n    (parent.childLanes |= lane),\n      (alternate = parent.alternate),\n      null !== alternate && (alternate.childLanes |= lane),\n      22 === parent.tag &&\n        ((sourceFiber = parent.stateNode),\n        null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)),\n      (sourceFiber = parent),\n      (parent = parent.return);\n  return 3 === sourceFiber.tag\n    ? ((parent = sourceFiber.stateNode),\n      isHidden &&\n        null !== update &&\n        ((isHidden = 31 - clz32(lane)),\n        (sourceFiber = parent.hiddenUpdates),\n        (alternate = sourceFiber[isHidden]),\n        null === alternate\n          ? (sourceFiber[isHidden] = [update])\n          : alternate.push(update),\n        (update.lane = lane | 536870912)),\n      parent)\n    : null;\n}\nfunction getRootForUpdatedFiber(sourceFiber) {\n  if (50 < nestedUpdateCount)\n    throw (\n      ((nestedUpdateCount = 0),\n      (rootWithNestedUpdates = null),\n      Error(formatProdErrorMessage(185)))\n    );\n  for (var parent = sourceFiber.return; null !== parent; )\n    (sourceFiber = parent), (parent = sourceFiber.return);\n  return 3 === sourceFiber.tag ? sourceFiber.stateNode : null;\n}\nvar emptyContextObject = {};\nfunction FiberNode(tag, pendingProps, key, mode) {\n  this.tag = tag;\n  this.key = key;\n  this.sibling =\n    this.child =\n    this.return =\n    this.stateNode =\n    this.type =\n    this.elementType =\n      null;\n  this.index = 0;\n  this.refCleanup = this.ref = null;\n  this.pendingProps = pendingProps;\n  this.dependencies =\n    this.memoizedState =\n    this.updateQueue =\n    this.memoizedProps =\n      null;\n  this.mode = mode;\n  this.subtreeFlags = this.flags = 0;\n  this.deletions = null;\n  this.childLanes = this.lanes = 0;\n  this.alternate = null;\n}\nfunction createFiberImplClass(tag, pendingProps, key, mode) {\n  return new FiberNode(tag, pendingProps, key, mode);\n}\nfunction shouldConstruct(Component) {\n  Component = Component.prototype;\n  return !(!Component || !Component.isReactComponent);\n}\nfunction createWorkInProgress(current, pendingProps) {\n  var workInProgress = current.alternate;\n  null === workInProgress\n    ? ((workInProgress = createFiberImplClass(\n        current.tag,\n        pendingProps,\n        current.key,\n        current.mode\n      )),\n      (workInProgress.elementType = current.elementType),\n      (workInProgress.type = current.type),\n      (workInProgress.stateNode = current.stateNode),\n      (workInProgress.alternate = current),\n      (current.alternate = workInProgress))\n    : ((workInProgress.pendingProps = pendingProps),\n      (workInProgress.type = current.type),\n      (workInProgress.flags = 0),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null));\n  workInProgress.flags = current.flags & 1206910976;\n  workInProgress.childLanes = current.childLanes;\n  workInProgress.lanes = current.lanes;\n  workInProgress.child = current.child;\n  workInProgress.memoizedProps = current.memoizedProps;\n  workInProgress.memoizedState = current.memoizedState;\n  workInProgress.updateQueue = current.updateQueue;\n  pendingProps = current.dependencies;\n  workInProgress.dependencies =\n    null === pendingProps\n      ? null\n      : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };\n  workInProgress.sibling = current.sibling;\n  workInProgress.index = current.index;\n  workInProgress.ref = current.ref;\n  workInProgress.refCleanup = current.refCleanup;\n  return workInProgress;\n}\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n  workInProgress.flags &= 1206910978;\n  var current = workInProgress.alternate;\n  null === current\n    ? ((workInProgress.childLanes = 0),\n      (workInProgress.lanes = renderLanes),\n      (workInProgress.child = null),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.memoizedProps = null),\n      (workInProgress.memoizedState = null),\n      (workInProgress.updateQueue = null),\n      (workInProgress.dependencies = null),\n      (workInProgress.stateNode = null))\n    : ((workInProgress.childLanes = current.childLanes),\n      (workInProgress.lanes = current.lanes),\n      (workInProgress.child = current.child),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null),\n      (workInProgress.memoizedProps = current.memoizedProps),\n      (workInProgress.memoizedState = current.memoizedState),\n      (workInProgress.updateQueue = current.updateQueue),\n      (workInProgress.type = current.type),\n      (renderLanes = current.dependencies),\n      (workInProgress.dependencies =\n        null === renderLanes\n          ? null\n          : {\n              lanes: renderLanes.lanes,\n              firstContext: renderLanes.firstContext\n            }));\n  return workInProgress;\n}\nfunction createFiberFromTypeAndProps(\n  type,\n  key,\n  pendingProps,\n  owner,\n  mode,\n  lanes\n) {\n  var fiberTag = 0;\n  owner = type;\n  if (\"function\" === typeof owner) shouldConstruct(owner) && (fiberTag = 1);\n  else if (\"string\" === typeof owner)\n    fiberTag = isHostHoistableType(\n      type,\n      pendingProps,\n      contextStackCursor.current\n    )\n      ? 26\n      : \"html\" === type || \"head\" === type || \"body\" === type\n        ? 27\n        : 5;\n  else\n    a: switch (owner) {\n      case REACT_ACTIVITY_TYPE:\n        return (\n          (type = createFiberImplClass(31, pendingProps, key, mode)),\n          (type.elementType = REACT_ACTIVITY_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_FRAGMENT_TYPE:\n        return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n      case REACT_STRICT_MODE_TYPE:\n        fiberTag = 8;\n        mode |= 24;\n        break;\n      case REACT_PROFILER_TYPE:\n        return (\n          (type = createFiberImplClass(12, pendingProps, key, mode | 2)),\n          (type.elementType = REACT_PROFILER_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_TYPE:\n        return (\n          (type = createFiberImplClass(13, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_LIST_TYPE:\n        return (\n          (type = createFiberImplClass(19, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_LIST_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_LEGACY_HIDDEN_TYPE:\n      case REACT_VIEW_TRANSITION_TYPE:\n        return (\n          (type = mode | 32),\n          (type = createFiberImplClass(30, pendingProps, key, type)),\n          (type.elementType = REACT_VIEW_TRANSITION_TYPE),\n          (type.lanes = lanes),\n          (type.stateNode = {\n            autoName: null,\n            paired: null,\n            clones: null,\n            ref: null\n          }),\n          type\n        );\n      default:\n        if (\"object\" === typeof owner && null !== owner)\n          switch (owner.$$typeof) {\n            case REACT_CONTEXT_TYPE:\n              fiberTag = 10;\n              break a;\n            case REACT_CONSUMER_TYPE:\n              fiberTag = 9;\n              break a;\n            case REACT_FORWARD_REF_TYPE:\n              fiberTag = 11;\n              break a;\n            case REACT_MEMO_TYPE:\n              fiberTag = 14;\n              break a;\n            case REACT_LAZY_TYPE:\n              fiberTag = 16;\n              owner = null;\n              break a;\n          }\n        fiberTag = 29;\n        pendingProps = Error(\n          formatProdErrorMessage(130, null === type ? \"null\" : typeof type, \"\")\n        );\n        owner = null;\n    }\n  key = createFiberImplClass(fiberTag, pendingProps, key, mode);\n  key.elementType = type;\n  key.type = owner;\n  key.lanes = lanes;\n  return key;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n  elements = createFiberImplClass(7, elements, key, mode);\n  elements.lanes = lanes;\n  return elements;\n}\nfunction createFiberFromText(content, mode, lanes) {\n  content = createFiberImplClass(6, content, null, mode);\n  content.lanes = lanes;\n  return content;\n}\nfunction createFiberFromDehydratedFragment(dehydratedNode) {\n  var fiber = createFiberImplClass(18, null, null, 0);\n  fiber.stateNode = dehydratedNode;\n  return fiber;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n  mode = createFiberImplClass(\n    4,\n    null !== portal.children ? portal.children : [],\n    portal.key,\n    mode\n  );\n  mode.lanes = lanes;\n  mode.stateNode = {\n    containerInfo: portal.containerInfo,\n    pendingChildren: null,\n    implementation: portal.implementation\n  };\n  return mode;\n}\nvar CapturedStacks = new WeakMap();\nfunction createCapturedValueAtFiber(value, source) {\n  if (\"object\" === typeof value && null !== value) {\n    var existing = CapturedStacks.get(value);\n    if (void 0 !== existing) return existing;\n    source = {\n      value: value,\n      source: source,\n      stack: getStackByFiberInDevAndProd(source)\n    };\n    CapturedStacks.set(value, source);\n    return source;\n  }\n  return {\n    value: value,\n    source: source,\n    stack: getStackByFiberInDevAndProd(source)\n  };\n}\nvar forkStack = [],\n  forkStackIndex = 0,\n  treeForkProvider = null,\n  treeForkCount = 0,\n  idStack = [],\n  idStackIndex = 0,\n  treeContextProvider = null,\n  treeContextId = 1,\n  treeContextOverflow = \"\";\nfunction pushTreeFork(workInProgress, totalChildren) {\n  forkStack[forkStackIndex++] = treeForkCount;\n  forkStack[forkStackIndex++] = treeForkProvider;\n  treeForkProvider = workInProgress;\n  treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n  idStack[idStackIndex++] = treeContextId;\n  idStack[idStackIndex++] = treeContextOverflow;\n  idStack[idStackIndex++] = treeContextProvider;\n  treeContextProvider = workInProgress;\n  var baseIdWithLeadingBit = treeContextId;\n  workInProgress = treeContextOverflow;\n  var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n  baseIdWithLeadingBit &= ~(1 << baseLength);\n  index += 1;\n  var length = 32 - clz32(totalChildren) + baseLength;\n  if (30 < length) {\n    var numberOfOverflowBits = baseLength - (baseLength % 5);\n    length = (\n      baseIdWithLeadingBit &\n      ((1 << numberOfOverflowBits) - 1)\n    ).toString(32);\n    baseIdWithLeadingBit >>= numberOfOverflowBits;\n    baseLength -= numberOfOverflowBits;\n    treeContextId =\n      (1 << (32 - clz32(totalChildren) + baseLength)) |\n      (index << baseLength) |\n      baseIdWithLeadingBit;\n    treeContextOverflow = length + workInProgress;\n  } else\n    (treeContextId =\n      (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n      (treeContextOverflow = workInProgress);\n}\nfunction pushMaterializedTreeId(workInProgress) {\n  null !== workInProgress.return &&\n    (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n}\nfunction popTreeContext(workInProgress) {\n  for (; workInProgress === treeForkProvider; )\n    (treeForkProvider = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null),\n      (treeForkCount = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null);\n  for (; workInProgress === treeContextProvider; )\n    (treeContextProvider = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextOverflow = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextId = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null);\n}\nfunction restoreSuspendedTreeContext(workInProgress, suspendedContext) {\n  idStack[idStackIndex++] = treeContextId;\n  idStack[idStackIndex++] = treeContextOverflow;\n  idStack[idStackIndex++] = treeContextProvider;\n  treeContextId = suspendedContext.id;\n  treeContextOverflow = suspendedContext.overflow;\n  treeContextProvider = workInProgress;\n}\nvar hydrationParentFiber = null,\n  nextHydratableInstance = null,\n  isHydrating = !1,\n  hydrationErrors = null,\n  rootOrSingletonContext = !1,\n  HydrationMismatchException = Error(formatProdErrorMessage(519));\nfunction throwOnHydrationMismatch(fiber) {\n  var error = Error(\n    formatProdErrorMessage(\n      418,\n      1 < arguments.length && void 0 !== arguments[1] && arguments[1]\n        ? \"text\"\n        : \"HTML\",\n      \"\"\n    )\n  );\n  queueHydrationError(createCapturedValueAtFiber(error, fiber));\n  throw HydrationMismatchException;\n}\nfunction prepareToHydrateHostInstance(fiber) {\n  var instance = fiber.stateNode,\n    type = fiber.type,\n    props = fiber.memoizedProps;\n  instance[internalInstanceKey] = fiber;\n  instance[internalPropsKey] = props;\n  switch (type) {\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"cancel\", instance);\n      listenToNonDelegatedEvent(\"close\", instance);\n      break;\n    case \"iframe\":\n    case \"object\":\n    case \"embed\":\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (type = 0; type < mediaEventTypes.length; type++)\n        listenToNonDelegatedEvent(mediaEventTypes[type], instance);\n      break;\n    case \"source\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      break;\n    case \"img\":\n    case \"image\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", instance);\n      break;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      initInput(\n        instance,\n        props.value,\n        props.defaultValue,\n        props.checked,\n        props.defaultChecked,\n        props.type,\n        props.name,\n        !0\n      );\n      break;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      break;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", instance),\n        initTextarea(instance, props.value, props.defaultValue, props.children);\n  }\n  type = props.children;\n  (\"string\" !== typeof type &&\n    \"number\" !== typeof type &&\n    \"bigint\" !== typeof type) ||\n  instance.textContent === \"\" + type ||\n  !0 === props.suppressHydrationWarning ||\n  checkForUnmatchedText(instance.textContent, type)\n    ? (null != props.popover &&\n        (listenToNonDelegatedEvent(\"beforetoggle\", instance),\n        listenToNonDelegatedEvent(\"toggle\", instance)),\n      null != props.onScroll && listenToNonDelegatedEvent(\"scroll\", instance),\n      null != props.onScrollEnd &&\n        listenToNonDelegatedEvent(\"scrollend\", instance),\n      null != props.onClick && (instance.onclick = noop$1),\n      (instance = !0))\n    : (instance = !1);\n  instance || throwOnHydrationMismatch(fiber, !0);\n}\nfunction popToNextHostParent(fiber) {\n  for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n    switch (hydrationParentFiber.tag) {\n      case 5:\n      case 31:\n      case 13:\n        rootOrSingletonContext = !1;\n        return;\n      case 27:\n      case 3:\n        rootOrSingletonContext = !0;\n        return;\n      default:\n        hydrationParentFiber = hydrationParentFiber.return;\n    }\n}\nfunction popHydrationState(fiber) {\n  if (fiber !== hydrationParentFiber) return !1;\n  if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1;\n  var tag = fiber.tag,\n    JSCompiler_temp;\n  if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n    if ((JSCompiler_temp = 5 === tag))\n      (JSCompiler_temp = fiber.type),\n        (JSCompiler_temp =\n          !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n          shouldSetTextContent(fiber.type, fiber.memoizedProps));\n    JSCompiler_temp = !JSCompiler_temp;\n  }\n  JSCompiler_temp && nextHydratableInstance && throwOnHydrationMismatch(fiber);\n  popToNextHostParent(fiber);\n  if (13 === tag) {\n    fiber = fiber.memoizedState;\n    fiber = null !== fiber ? fiber.dehydrated : null;\n    if (!fiber) throw Error(formatProdErrorMessage(317));\n    nextHydratableInstance =\n      getNextHydratableInstanceAfterHydrationBoundary(fiber);\n  } else if (31 === tag) {\n    fiber = fiber.memoizedState;\n    fiber = null !== fiber ? fiber.dehydrated : null;\n    if (!fiber) throw Error(formatProdErrorMessage(317));\n    nextHydratableInstance =\n      getNextHydratableInstanceAfterHydrationBoundary(fiber);\n  } else\n    27 === tag\n      ? ((tag = nextHydratableInstance),\n        isSingletonScope(fiber.type)\n          ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n            (previousHydratableOnEnteringScopedSingleton = null),\n            (nextHydratableInstance = fiber))\n          : (nextHydratableInstance = tag))\n      : (nextHydratableInstance = hydrationParentFiber\n          ? getNextHydratable(fiber.stateNode.nextSibling)\n          : null);\n  return !0;\n}\nfunction resetHydrationState() {\n  nextHydratableInstance = hydrationParentFiber = null;\n  isHydrating = !1;\n}\nfunction upgradeHydrationErrorsToRecoverable() {\n  var queuedErrors = hydrationErrors;\n  null !== queuedErrors &&\n    (null === workInProgressRootRecoverableErrors\n      ? (workInProgressRootRecoverableErrors = queuedErrors)\n      : workInProgressRootRecoverableErrors.push.apply(\n          workInProgressRootRecoverableErrors,\n          queuedErrors\n        ),\n    (hydrationErrors = null));\n  return queuedErrors;\n}\nfunction queueHydrationError(error) {\n  null === hydrationErrors\n    ? (hydrationErrors = [error])\n    : hydrationErrors.push(error);\n}\nvar valueCursor = createCursor(null),\n  currentlyRenderingFiber$1 = null,\n  lastContextDependency = null;\nfunction pushProvider(providerFiber, context, nextValue) {\n  push(valueCursor, context._currentValue);\n  context._currentValue = nextValue;\n}\nfunction popProvider(context) {\n  context._currentValue = valueCursor.current;\n  pop(valueCursor);\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n  for (; null !== parent; ) {\n    var alternate = parent.alternate;\n    (parent.childLanes & renderLanes) !== renderLanes\n      ? ((parent.childLanes |= renderLanes),\n        null !== alternate && (alternate.childLanes |= renderLanes))\n      : null !== alternate &&\n        (alternate.childLanes & renderLanes) !== renderLanes &&\n        (alternate.childLanes |= renderLanes);\n    if (parent === propagationRoot) break;\n    parent = parent.return;\n  }\n}\nfunction propagateContextChanges(\n  workInProgress,\n  contexts,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  var fiber = workInProgress.child;\n  null !== fiber && (fiber.return = workInProgress);\n  for (; null !== fiber; ) {\n    var list = fiber.dependencies;\n    if (null !== list) {\n      var nextFiber = fiber.child;\n      list = list.firstContext;\n      a: for (; null !== list; ) {\n        var dependency = list;\n        list = fiber;\n        for (var i = 0; i < contexts.length; i++)\n          if (dependency.context === contexts[i]) {\n            list.lanes |= renderLanes;\n            dependency = list.alternate;\n            null !== dependency && (dependency.lanes |= renderLanes);\n            scheduleContextWorkOnParentPath(\n              list.return,\n              renderLanes,\n              workInProgress\n            );\n            forcePropagateEntireTree || (nextFiber = null);\n            break a;\n          }\n        list = dependency.next;\n      }\n    } else if (18 === fiber.tag) {\n      nextFiber = fiber.return;\n      if (null === nextFiber) throw Error(formatProdErrorMessage(341));\n      nextFiber.lanes |= renderLanes;\n      list = nextFiber.alternate;\n      null !== list && (list.lanes |= renderLanes);\n      scheduleContextWorkOnParentPath(nextFiber, renderLanes, workInProgress);\n      nextFiber = null;\n    } else\n      13 === fiber.tag &&\n      null !== fiber.memoizedState &&\n      null === fiber.memoizedState.dehydrated\n        ? ((fiber.lanes |= renderLanes),\n          (nextFiber = fiber.alternate),\n          null !== nextFiber && (nextFiber.lanes |= renderLanes),\n          scheduleContextWorkOnParentPath(\n            fiber.return,\n            renderLanes,\n            workInProgress\n          ),\n          (nextFiber = fiber.child),\n          (nextFiber = null !== nextFiber ? nextFiber.sibling : null))\n        : (nextFiber = fiber.child);\n    if (null !== nextFiber) nextFiber.return = fiber;\n    else\n      for (nextFiber = fiber; null !== nextFiber; ) {\n        if (nextFiber === workInProgress) {\n          nextFiber = null;\n          break;\n        }\n        fiber = nextFiber.sibling;\n        if (null !== fiber) {\n          fiber.return = nextFiber.return;\n          nextFiber = fiber;\n          break;\n        }\n        nextFiber = nextFiber.return;\n      }\n    fiber = nextFiber;\n  }\n}\nfunction propagateParentContextChanges(\n  current,\n  workInProgress,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  current = null;\n  for (\n    var parent = workInProgress, isInsidePropagationBailout = !1;\n    null !== parent;\n\n  ) {\n    if (!isInsidePropagationBailout)\n      if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n      else if (0 !== (parent.flags & 262144)) break;\n    if (10 === parent.tag) {\n      var currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent = currentParent.memoizedProps;\n      if (null !== currentParent) {\n        var context = parent.type;\n        objectIs(parent.pendingProps.value, currentParent.value) ||\n          (null !== current ? current.push(context) : (current = [context]));\n      }\n    } else if (parent === hostTransitionProviderCursor.current) {\n      currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent.memoizedState.memoizedState !==\n        parent.memoizedState.memoizedState &&\n        (null !== current\n          ? current.push(HostTransitionContext)\n          : (current = [HostTransitionContext]));\n    }\n    parent = parent.return;\n  }\n  null !== current &&\n    propagateContextChanges(\n      workInProgress,\n      current,\n      renderLanes,\n      forcePropagateEntireTree\n    );\n  workInProgress.flags |= 262144;\n  return null !== current;\n}\nfunction checkIfContextChanged(currentDependencies) {\n  for (\n    currentDependencies = currentDependencies.firstContext;\n    null !== currentDependencies;\n\n  ) {\n    if (\n      !objectIs(\n        currentDependencies.context._currentValue,\n        currentDependencies.memoizedValue\n      )\n    )\n      return !0;\n    currentDependencies = currentDependencies.next;\n  }\n  return !1;\n}\nfunction prepareToReadContext(workInProgress) {\n  currentlyRenderingFiber$1 = workInProgress;\n  lastContextDependency = null;\n  workInProgress = workInProgress.dependencies;\n  null !== workInProgress && (workInProgress.firstContext = null);\n}\nfunction readContext(context) {\n  return readContextForConsumer(currentlyRenderingFiber$1, context);\n}\nfunction readContextDuringReconciliation(consumer, context) {\n  null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n  return readContextForConsumer(consumer, context);\n}\nfunction readContextForConsumer(consumer, context) {\n  var value = context._currentValue;\n  context = { context: context, memoizedValue: value, next: null };\n  if (null === lastContextDependency) {\n    if (null === consumer) throw Error(formatProdErrorMessage(308));\n    lastContextDependency = context;\n    consumer.dependencies = { lanes: 0, firstContext: context };\n    consumer.flags |= 524288;\n  } else lastContextDependency = lastContextDependency.next = context;\n  return value;\n}\nvar AbortControllerLocal =\n    \"undefined\" !== typeof AbortController\n      ? AbortController\n      : function () {\n          var listeners = [],\n            signal = (this.signal = {\n              aborted: !1,\n              addEventListener: function (type, listener) {\n                listeners.push(listener);\n              }\n            });\n          this.abort = function () {\n            signal.aborted = !0;\n            listeners.forEach(function (listener) {\n              return listener();\n            });\n          };\n        },\n  scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n  NormalPriority = Scheduler.unstable_NormalPriority,\n  CacheContext = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    Consumer: null,\n    Provider: null,\n    _currentValue: null,\n    _currentValue2: null,\n    _threadCount: 0\n  };\nfunction createCache() {\n  return {\n    controller: new AbortControllerLocal(),\n    data: new Map(),\n    refCount: 0\n  };\n}\nfunction releaseCache(cache) {\n  cache.refCount--;\n  0 === cache.refCount &&\n    scheduleCallback$2(NormalPriority, function () {\n      cache.controller.abort();\n    });\n}\nfunction queueTransitionTypes(root, transitionTypes) {\n  if (0 !== (root.pendingLanes & 4194048)) {\n    var queued = root.transitionTypes;\n    null === queued && (queued = root.transitionTypes = []);\n    for (root = 0; root < transitionTypes.length; root++) {\n      var transitionType = transitionTypes[root];\n      -1 === queued.indexOf(transitionType) && queued.push(transitionType);\n    }\n  }\n}\nvar entangledTransitionTypes = null;\nfunction claimQueuedTransitionTypes(root) {\n  var claimed = root.transitionTypes;\n  root.transitionTypes = null;\n  return claimed;\n}\nvar currentEntangledListeners = null,\n  currentEntangledPendingCount = 0,\n  currentEntangledLane = 0,\n  currentEntangledActionThenable = null;\nfunction entangleAsyncAction(transition, thenable) {\n  if (null === currentEntangledListeners) {\n    var entangledListeners = (currentEntangledListeners = []);\n    currentEntangledPendingCount = 0;\n    currentEntangledLane = requestTransitionLane();\n    currentEntangledActionThenable = {\n      status: \"pending\",\n      value: void 0,\n      then: function (resolve) {\n        entangledListeners.push(resolve);\n      }\n    };\n  }\n  currentEntangledPendingCount++;\n  thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n  return thenable;\n}\nfunction pingEngtangledActionScope() {\n  if (\n    0 === --currentEntangledPendingCount &&\n    ((entangledTransitionTypes = null), null !== currentEntangledListeners)\n  ) {\n    null !== currentEntangledActionThenable &&\n      (currentEntangledActionThenable.status = \"fulfilled\");\n    var listeners = currentEntangledListeners;\n    currentEntangledListeners = null;\n    currentEntangledLane = 0;\n    currentEntangledActionThenable = null;\n    for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n  }\n}\nfunction chainThenableValue(thenable, result) {\n  var listeners = [],\n    thenableWithOverride = {\n      status: \"pending\",\n      value: null,\n      reason: null,\n      then: function (resolve) {\n        listeners.push(resolve);\n      }\n    };\n  thenable.then(\n    function () {\n      thenableWithOverride.status = \"fulfilled\";\n      thenableWithOverride.value = result;\n      for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n    },\n    function (error) {\n      thenableWithOverride.status = \"rejected\";\n      thenableWithOverride.reason = error;\n      for (error = 0; error < listeners.length; error++)\n        (0, listeners[error])(void 0);\n    }\n  );\n  return thenableWithOverride;\n}\nvar prevOnStartTransitionFinish = ReactSharedInternals.S;\nReactSharedInternals.S = function (transition, returnValue) {\n  globalMostRecentTransitionTime = now();\n  \"object\" === typeof returnValue &&\n    null !== returnValue &&\n    \"function\" === typeof returnValue.then &&\n    entangleAsyncAction(transition, returnValue);\n  if (null !== entangledTransitionTypes)\n    for (var root$28 = firstScheduledRoot; null !== root$28; )\n      queueTransitionTypes(root$28, entangledTransitionTypes),\n        (root$28 = root$28.next);\n  root$28 = transition.types;\n  if (null !== root$28) {\n    for (var root$29 = firstScheduledRoot; null !== root$29; )\n      queueTransitionTypes(root$29, root$28), (root$29 = root$29.next);\n    if (0 !== currentEntangledLane) {\n      root$29 = entangledTransitionTypes;\n      null === root$29 && (root$29 = entangledTransitionTypes = []);\n      for (var i = 0; i < root$28.length; i++) {\n        var transitionType = root$28[i];\n        -1 === root$29.indexOf(transitionType) && root$29.push(transitionType);\n      }\n    }\n  }\n  null !== prevOnStartTransitionFinish &&\n    prevOnStartTransitionFinish(transition, returnValue);\n};\nvar resumedCache = createCursor(null);\nfunction peekCacheFromPool() {\n  var cacheResumedFromPreviousRender = resumedCache.current;\n  return null !== cacheResumedFromPreviousRender\n    ? cacheResumedFromPreviousRender\n    : workInProgressRoot.pooledCache;\n}\nfunction pushTransition(offscreenWorkInProgress, prevCachePool) {\n  null === prevCachePool\n    ? push(resumedCache, resumedCache.current)\n    : push(resumedCache, prevCachePool.pool);\n}\nfunction getSuspendedCache() {\n  var cacheFromPool = peekCacheFromPool();\n  return null === cacheFromPool\n    ? null\n    : { parent: CacheContext._currentValue, pool: cacheFromPool };\n}\nvar SuspenseException = Error(formatProdErrorMessage(460)),\n  SuspenseyCommitException = Error(formatProdErrorMessage(474)),\n  SuspenseActionException = Error(formatProdErrorMessage(542)),\n  noopSuspenseyCommitThenable = { then: function () {} };\nfunction isThenableResolved(thenable) {\n  thenable = thenable.status;\n  return \"fulfilled\" === thenable || \"rejected\" === thenable;\n}\nfunction trackUsedThenable(thenableState, thenable, index) {\n  index = thenableState[index];\n  void 0 === index\n    ? thenableState.push(thenable)\n    : index !== thenable && (thenable.then(noop$1, noop$1), (thenable = index));\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      thenableState = thenable.reason;\n      checkIfUseWrappedInAsyncCatch(thenableState);\n      if (void 0 === thenableState && !(\"reason\" in thenable))\n        throw Error(formatProdErrorMessage(600));\n      throw thenableState;\n    default:\n      if (\"string\" === typeof thenable.status) thenable.then(noop$1, noop$1);\n      else {\n        thenableState = workInProgressRoot;\n        if (null !== thenableState && 100 < thenableState.shellSuspendCounter)\n          throw Error(formatProdErrorMessage(482));\n        thenableState = thenable;\n        thenableState.status = \"pending\";\n        thenableState.then(\n          function (fulfilledValue) {\n            if (\"pending\" === thenable.status) {\n              var fulfilledThenable = thenable;\n              fulfilledThenable.status = \"fulfilled\";\n              fulfilledThenable.value = fulfilledValue;\n            }\n          },\n          function (error) {\n            if (\"pending\" === thenable.status) {\n              var rejectedThenable = thenable;\n              rejectedThenable.status = \"rejected\";\n              rejectedThenable.reason = error;\n            }\n          }\n        );\n      }\n      switch (thenable.status) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw (\n            ((thenableState = thenable.reason),\n            checkIfUseWrappedInAsyncCatch(thenableState),\n            thenableState)\n          );\n      }\n      suspendedThenable = thenable;\n      throw SuspenseException;\n  }\n}\nfunction resolveLazy(lazyType) {\n  try {\n    var init = lazyType._init;\n    return init(lazyType._payload);\n  } catch (x) {\n    if (null !== x && \"object\" === typeof x && \"function\" === typeof x.then)\n      throw ((suspendedThenable = x), SuspenseException);\n    throw x;\n  }\n}\nvar suspendedThenable = null;\nfunction getSuspendedThenable() {\n  if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));\n  var thenable = suspendedThenable;\n  suspendedThenable = null;\n  return thenable;\n}\nfunction checkIfUseWrappedInAsyncCatch(rejectedReason) {\n  if (\n    rejectedReason === SuspenseException ||\n    rejectedReason === SuspenseActionException\n  )\n    throw Error(formatProdErrorMessage(483));\n}\nvar thenableState$1 = null,\n  thenableIndexCounter$1 = 0;\nfunction unwrapThenable(thenable) {\n  var index = thenableIndexCounter$1;\n  thenableIndexCounter$1 += 1;\n  null === thenableState$1 && (thenableState$1 = []);\n  return trackUsedThenable(thenableState$1, thenable, index);\n}\nfunction coerceRef(workInProgress, element) {\n  element = element.props.ref;\n  workInProgress.ref = void 0 !== element ? element : null;\n}\nfunction throwOnInvalidObjectTypeImpl(returnFiber, newChild) {\n  if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n    throw Error(formatProdErrorMessage(525));\n  returnFiber = Object.prototype.toString.call(newChild);\n  throw Error(\n    formatProdErrorMessage(\n      31,\n      \"[object Object]\" === returnFiber\n        ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n        : returnFiber\n    )\n  );\n}\nfunction createChildReconciler(shouldTrackSideEffects) {\n  function deleteChild(returnFiber, childToDelete) {\n    if (shouldTrackSideEffects) {\n      var deletions = returnFiber.deletions;\n      null === deletions\n        ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))\n        : deletions.push(childToDelete);\n    }\n  }\n  function deleteRemainingChildren(returnFiber, currentFirstChild) {\n    if (!shouldTrackSideEffects) return null;\n    for (; null !== currentFirstChild; )\n      deleteChild(returnFiber, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return null;\n  }\n  function mapRemainingChildren(currentFirstChild) {\n    for (var existingChildren = new Map(); null !== currentFirstChild; )\n      null === currentFirstChild.key\n        ? existingChildren.set(currentFirstChild.index, currentFirstChild)\n        : existingChildren.set(currentFirstChild.key, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return existingChildren;\n  }\n  function useFiber(fiber, pendingProps) {\n    fiber = createWorkInProgress(fiber, pendingProps);\n    fiber.index = 0;\n    fiber.sibling = null;\n    return fiber;\n  }\n  function placeChild(newFiber, lastPlacedIndex, newIndex) {\n    newFiber.index = newIndex;\n    if (!shouldTrackSideEffects)\n      return (newFiber.flags |= 1048576), lastPlacedIndex;\n    newIndex = newFiber.alternate;\n    if (null !== newIndex)\n      return (\n        (newIndex = newIndex.index),\n        newIndex < lastPlacedIndex\n          ? ((newFiber.flags |= 2), lastPlacedIndex)\n          : newIndex\n      );\n    newFiber.flags |= 134217730;\n    return lastPlacedIndex;\n  }\n  function placeSingleChild(newFiber) {\n    shouldTrackSideEffects &&\n      null === newFiber.alternate &&\n      (newFiber.flags |= 134217730);\n    return newFiber;\n  }\n  function updateTextNode(returnFiber, current, textContent, lanes) {\n    if (null === current || 6 !== current.tag)\n      return (\n        (current = createFiberFromText(textContent, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, textContent);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateElement(returnFiber, current, element, lanes) {\n    var elementType = element.type;\n    if (elementType === REACT_FRAGMENT_TYPE)\n      return (\n        (returnFiber = updateFragment(\n          returnFiber,\n          current,\n          element.props.children,\n          lanes,\n          element.key\n        )),\n        coerceRef(returnFiber, element),\n        returnFiber\n      );\n    if (\n      null !== current &&\n      (current.elementType === elementType ||\n        (\"object\" === typeof elementType &&\n          null !== elementType &&\n          elementType.$$typeof === REACT_LAZY_TYPE &&\n          resolveLazy(elementType) === current.type))\n    )\n      return (\n        (current = useFiber(current, element.props)),\n        coerceRef(current, element),\n        (current.return = returnFiber),\n        current\n      );\n    current = createFiberFromTypeAndProps(\n      element.type,\n      element.key,\n      element.props,\n      null,\n      returnFiber.mode,\n      lanes\n    );\n    coerceRef(current, element);\n    current.return = returnFiber;\n    return current;\n  }\n  function updatePortal(returnFiber, current, portal, lanes) {\n    if (\n      null === current ||\n      4 !== current.tag ||\n      current.stateNode.containerInfo !== portal.containerInfo ||\n      current.stateNode.implementation !== portal.implementation\n    )\n      return (\n        (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, portal.children || []);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateFragment(returnFiber, current, fragment, lanes, key) {\n    if (null === current || 7 !== current.tag)\n      return (\n        (current = createFiberFromFragment(\n          fragment,\n          returnFiber.mode,\n          lanes,\n          key\n        )),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, fragment);\n    current.return = returnFiber;\n    return current;\n  }\n  function createChild(returnFiber, newChild, lanes) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (newChild = createFiberFromText(\n          \"\" + newChild,\n          returnFiber.mode,\n          lanes\n        )),\n        (newChild.return = returnFiber),\n        newChild\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (lanes = createFiberFromTypeAndProps(\n              newChild.type,\n              newChild.key,\n              newChild.props,\n              null,\n              returnFiber.mode,\n              lanes\n            )),\n            coerceRef(lanes, newChild),\n            (lanes.return = returnFiber),\n            lanes\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (newChild = createFiberFromPortal(\n              newChild,\n              returnFiber.mode,\n              lanes\n            )),\n            (newChild.return = returnFiber),\n            newChild\n          );\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            createChild(returnFiber, newChild, lanes)\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (newChild = createFiberFromFragment(\n            newChild,\n            returnFiber.mode,\n            lanes,\n            null\n          )),\n          (newChild.return = returnFiber),\n          newChild\n        );\n      if (\"function\" === typeof newChild.then)\n        return createChild(returnFiber, unwrapThenable(newChild), lanes);\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return createChild(\n          returnFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n    var key = null !== oldFiber ? oldFiber.key : null;\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return null !== key\n        ? null\n        : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return newChild.key === key\n            ? updateElement(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_PORTAL_TYPE:\n          return newChild.key === key\n            ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            updateSlot(returnFiber, oldFiber, newChild, lanes)\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return null !== key\n          ? null\n          : updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n      if (\"function\" === typeof newChild.then)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateFromMap(\n    existingChildren,\n    returnFiber,\n    newIdx,\n    newChild,\n    lanes\n  ) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (existingChildren = existingChildren.get(newIdx) || null),\n        updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updateElement(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updatePortal(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            updateFromMap(\n              existingChildren,\n              returnFiber,\n              newIdx,\n              newChild,\n              lanes\n            )\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (existingChildren = existingChildren.get(newIdx) || null),\n          updateFragment(returnFiber, existingChildren, newChild, lanes, null)\n        );\n      if (\"function\" === typeof newChild.then)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return null;\n  }\n  function reconcileChildrenArray(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null;\n      null !== oldFiber && newIdx < newChildren.length;\n      newIdx++\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(\n        returnFiber,\n        oldFiber,\n        newChildren[newIdx],\n        lanes\n      );\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (newIdx === newChildren.length)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; newIdx < newChildren.length; newIdx++)\n        (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n          null !== oldFiber &&\n            ((currentFirstChild = placeChild(\n              oldFiber,\n              currentFirstChild,\n              newIdx\n            )),\n            null === previousNewFiber\n              ? (resultingFirstChild = oldFiber)\n              : (previousNewFiber.sibling = oldFiber),\n            (previousNewFiber = oldFiber));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      newIdx < newChildren.length;\n      newIdx++\n    )\n      (nextOldFiber = updateFromMap(\n        oldFiber,\n        returnFiber,\n        newIdx,\n        newChildren[newIdx],\n        lanes\n      )),\n        null !== nextOldFiber &&\n          (shouldTrackSideEffects &&\n            ((newFiber = nextOldFiber.alternate),\n            null !== newFiber &&\n              oldFiber.delete(null === newFiber.key ? newIdx : newFiber.key)),\n          (currentFirstChild = placeChild(\n            nextOldFiber,\n            currentFirstChild,\n            newIdx\n          )),\n          null === previousNewFiber\n            ? (resultingFirstChild = nextOldFiber)\n            : (previousNewFiber.sibling = nextOldFiber),\n          (previousNewFiber = nextOldFiber));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildrenIterator(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    if (null == newChildren) throw Error(formatProdErrorMessage(151));\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null,\n        step = newChildren.next();\n      null !== oldFiber && !step.done;\n      newIdx++, step = newChildren.next()\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (step.done)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; !step.done; newIdx++, step = newChildren.next())\n        (step = createChild(returnFiber, step.value, lanes)),\n          null !== step &&\n            ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n            null === previousNewFiber\n              ? (resultingFirstChild = step)\n              : (previousNewFiber.sibling = step),\n            (previousNewFiber = step));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      !step.done;\n      newIdx++, step = newChildren.next()\n    )\n      (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),\n        null !== step &&\n          (shouldTrackSideEffects &&\n            ((nextOldFiber = step.alternate),\n            null !== nextOldFiber &&\n              oldFiber.delete(\n                null === nextOldFiber.key ? newIdx : nextOldFiber.key\n              )),\n          (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n          null === previousNewFiber\n            ? (resultingFirstChild = step)\n            : (previousNewFiber.sibling = step),\n          (previousNewFiber = step));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildFibersImpl(\n    returnFiber,\n    currentFirstChild,\n    newChild,\n    lanes\n  ) {\n    \"object\" === typeof newChild &&\n      null !== newChild &&\n      newChild.type === REACT_FRAGMENT_TYPE &&\n      null === newChild.key &&\n      void 0 === newChild.props.ref &&\n      (newChild = newChild.props.children);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          a: {\n            for (var key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key) {\n                key = newChild.type;\n                if (key === REACT_FRAGMENT_TYPE) {\n                  if (7 === currentFirstChild.tag) {\n                    deleteRemainingChildren(\n                      returnFiber,\n                      currentFirstChild.sibling\n                    );\n                    lanes = useFiber(\n                      currentFirstChild,\n                      newChild.props.children\n                    );\n                    coerceRef(lanes, newChild);\n                    lanes.return = returnFiber;\n                    returnFiber = lanes;\n                    break a;\n                  }\n                } else if (\n                  currentFirstChild.elementType === key ||\n                  (\"object\" === typeof key &&\n                    null !== key &&\n                    key.$$typeof === REACT_LAZY_TYPE &&\n                    resolveLazy(key) === currentFirstChild.type)\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.props);\n                  coerceRef(lanes, newChild);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                }\n                deleteRemainingChildren(returnFiber, currentFirstChild);\n                break;\n              } else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            newChild.type === REACT_FRAGMENT_TYPE\n              ? ((lanes = createFiberFromFragment(\n                  newChild.props.children,\n                  returnFiber.mode,\n                  lanes,\n                  newChild.key\n                )),\n                coerceRef(lanes, newChild),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes))\n              : ((lanes = createFiberFromTypeAndProps(\n                  newChild.type,\n                  newChild.key,\n                  newChild.props,\n                  null,\n                  returnFiber.mode,\n                  lanes\n                )),\n                coerceRef(lanes, newChild),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes));\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_PORTAL_TYPE:\n          a: {\n            for (key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key)\n                if (\n                  4 === currentFirstChild.tag &&\n                  currentFirstChild.stateNode.containerInfo ===\n                    newChild.containerInfo &&\n                  currentFirstChild.stateNode.implementation ===\n                    newChild.implementation\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.children || []);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                } else {\n                  deleteRemainingChildren(returnFiber, currentFirstChild);\n                  break;\n                }\n              else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            lanes = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n            lanes.return = returnFiber;\n            returnFiber = lanes;\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            reconcileChildFibersImpl(\n              returnFiber,\n              currentFirstChild,\n              newChild,\n              lanes\n            )\n          );\n      }\n      if (isArrayImpl(newChild))\n        return reconcileChildrenArray(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      if (getIteratorFn(newChild)) {\n        key = getIteratorFn(newChild);\n        if (\"function\" !== typeof key) throw Error(formatProdErrorMessage(150));\n        newChild = key.call(newChild);\n        return reconcileChildrenIterator(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      }\n      if (\"function\" === typeof newChild.then)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n      ? ((newChild = \"\" + newChild),\n        null !== currentFirstChild && 6 === currentFirstChild.tag\n          ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),\n            (lanes = useFiber(currentFirstChild, newChild)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes))\n          : (deleteRemainingChildren(returnFiber, currentFirstChild),\n            (lanes = createFiberFromText(newChild, returnFiber.mode, lanes)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes)),\n        placeSingleChild(returnFiber))\n      : deleteRemainingChildren(returnFiber, currentFirstChild);\n  }\n  return function (returnFiber, currentFirstChild, newChild, lanes) {\n    try {\n      thenableIndexCounter$1 = 0;\n      var firstChildFiber = reconcileChildFibersImpl(\n        returnFiber,\n        currentFirstChild,\n        newChild,\n        lanes\n      );\n      thenableState$1 = null;\n      return firstChildFiber;\n    } catch (x) {\n      if (x === SuspenseException || x === SuspenseActionException) throw x;\n      var fiber = createFiberImplClass(29, x, null, returnFiber.mode);\n      fiber.lanes = lanes;\n      fiber.return = returnFiber;\n      return fiber;\n    } finally {\n    }\n  };\n}\nvar reconcileChildFibers = createChildReconciler(!0),\n  mountChildFibers = createChildReconciler(!1),\n  hasForceUpdate = !1;\nfunction initializeUpdateQueue(fiber) {\n  fiber.updateQueue = {\n    baseState: fiber.memoizedState,\n    firstBaseUpdate: null,\n    lastBaseUpdate: null,\n    shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n    callbacks: null\n  };\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n  current = current.updateQueue;\n  workInProgress.updateQueue === current &&\n    (workInProgress.updateQueue = {\n      baseState: current.baseState,\n      firstBaseUpdate: current.firstBaseUpdate,\n      lastBaseUpdate: current.lastBaseUpdate,\n      shared: current.shared,\n      callbacks: null\n    });\n}\nfunction createUpdate(lane) {\n  return { lane: lane, tag: 0, payload: null, callback: null, next: null };\n}\nfunction enqueueUpdate(fiber, update, lane) {\n  var updateQueue = fiber.updateQueue;\n  if (null === updateQueue) return null;\n  updateQueue = updateQueue.shared;\n  if (0 !== (executionContext & 2)) {\n    var pending = updateQueue.pending;\n    null === pending\n      ? (update.next = update)\n      : ((update.next = pending.next), (pending.next = update));\n    updateQueue.pending = update;\n    update = getRootForUpdatedFiber(fiber);\n    markUpdateLaneFromFiberToRoot(fiber, null, lane);\n    return update;\n  }\n  enqueueUpdate$1(fiber, updateQueue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction entangleTransitions(root, fiber, lane) {\n  fiber = fiber.updateQueue;\n  if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n    var queueLanes = fiber.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    fiber.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n  var queue = workInProgress.updateQueue,\n    current = workInProgress.alternate;\n  if (\n    null !== current &&\n    ((current = current.updateQueue), queue === current)\n  ) {\n    var newFirst = null,\n      newLast = null;\n    queue = queue.firstBaseUpdate;\n    if (null !== queue) {\n      do {\n        var clone = {\n          lane: queue.lane,\n          tag: queue.tag,\n          payload: queue.payload,\n          callback: null,\n          next: null\n        };\n        null === newLast\n          ? (newFirst = newLast = clone)\n          : (newLast = newLast.next = clone);\n        queue = queue.next;\n      } while (null !== queue);\n      null === newLast\n        ? (newFirst = newLast = capturedUpdate)\n        : (newLast = newLast.next = capturedUpdate);\n    } else newFirst = newLast = capturedUpdate;\n    queue = {\n      baseState: current.baseState,\n      firstBaseUpdate: newFirst,\n      lastBaseUpdate: newLast,\n      shared: current.shared,\n      callbacks: current.callbacks\n    };\n    workInProgress.updateQueue = queue;\n    return;\n  }\n  workInProgress = queue.lastBaseUpdate;\n  null === workInProgress\n    ? (queue.firstBaseUpdate = capturedUpdate)\n    : (workInProgress.next = capturedUpdate);\n  queue.lastBaseUpdate = capturedUpdate;\n}\nvar didReadFromEntangledAsyncAction = !1;\nfunction suspendIfUpdateReadFromEntangledAsyncAction() {\n  if (didReadFromEntangledAsyncAction) {\n    var entangledActionThenable = currentEntangledActionThenable;\n    if (null !== entangledActionThenable) throw entangledActionThenable;\n  }\n}\nfunction processUpdateQueue(\n  workInProgress$jscomp$0,\n  props,\n  instance$jscomp$0,\n  renderLanes\n) {\n  didReadFromEntangledAsyncAction = !1;\n  var queue = workInProgress$jscomp$0.updateQueue;\n  hasForceUpdate = !1;\n  var firstBaseUpdate = queue.firstBaseUpdate,\n    lastBaseUpdate = queue.lastBaseUpdate,\n    pendingQueue = queue.shared.pending;\n  if (null !== pendingQueue) {\n    queue.shared.pending = null;\n    var lastPendingUpdate = pendingQueue,\n      firstPendingUpdate = lastPendingUpdate.next;\n    lastPendingUpdate.next = null;\n    null === lastBaseUpdate\n      ? (firstBaseUpdate = firstPendingUpdate)\n      : (lastBaseUpdate.next = firstPendingUpdate);\n    lastBaseUpdate = lastPendingUpdate;\n    var current = workInProgress$jscomp$0.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      (pendingQueue = current.lastBaseUpdate),\n      pendingQueue !== lastBaseUpdate &&\n        (null === pendingQueue\n          ? (current.firstBaseUpdate = firstPendingUpdate)\n          : (pendingQueue.next = firstPendingUpdate),\n        (current.lastBaseUpdate = lastPendingUpdate)));\n  }\n  if (null !== firstBaseUpdate) {\n    var newState = queue.baseState;\n    lastBaseUpdate = 0;\n    current = firstPendingUpdate = lastPendingUpdate = null;\n    pendingQueue = firstBaseUpdate;\n    do {\n      var updateLane = pendingQueue.lane & -536870913,\n        isHiddenUpdate = updateLane !== pendingQueue.lane;\n      if (\n        isHiddenUpdate\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        0 !== updateLane &&\n          updateLane === currentEntangledLane &&\n          (didReadFromEntangledAsyncAction = !0);\n        null !== current &&\n          (current = current.next =\n            {\n              lane: 0,\n              tag: pendingQueue.tag,\n              payload: pendingQueue.payload,\n              callback: null,\n              next: null\n            });\n        a: {\n          var workInProgress = workInProgress$jscomp$0,\n            update = pendingQueue;\n          updateLane = props;\n          var instance = instance$jscomp$0;\n          switch (update.tag) {\n            case 1:\n              workInProgress = update.payload;\n              if (\"function\" === typeof workInProgress) {\n                newState = workInProgress.call(instance, newState, updateLane);\n                break a;\n              }\n              newState = workInProgress;\n              break a;\n            case 3:\n              workInProgress.flags = (workInProgress.flags & -65537) | 128;\n            case 0:\n              workInProgress = update.payload;\n              updateLane =\n                \"function\" === typeof workInProgress\n                  ? workInProgress.call(instance, newState, updateLane)\n                  : workInProgress;\n              if (null === updateLane || void 0 === updateLane) break a;\n              newState = assign({}, newState, updateLane);\n              break a;\n            case 2:\n              hasForceUpdate = !0;\n          }\n        }\n        updateLane = pendingQueue.callback;\n        null !== updateLane &&\n          ((workInProgress$jscomp$0.flags |= 64),\n          isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192),\n          (isHiddenUpdate = queue.callbacks),\n          null === isHiddenUpdate\n            ? (queue.callbacks = [updateLane])\n            : isHiddenUpdate.push(updateLane));\n      } else\n        (isHiddenUpdate = {\n          lane: updateLane,\n          tag: pendingQueue.tag,\n          payload: pendingQueue.payload,\n          callback: pendingQueue.callback,\n          next: null\n        }),\n          null === current\n            ? ((firstPendingUpdate = current = isHiddenUpdate),\n              (lastPendingUpdate = newState))\n            : (current = current.next = isHiddenUpdate),\n          (lastBaseUpdate |= updateLane);\n      pendingQueue = pendingQueue.next;\n      if (null === pendingQueue)\n        if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n          break;\n        else\n          (isHiddenUpdate = pendingQueue),\n            (pendingQueue = isHiddenUpdate.next),\n            (isHiddenUpdate.next = null),\n            (queue.lastBaseUpdate = isHiddenUpdate),\n            (queue.shared.pending = null);\n    } while (1);\n    null === current && (lastPendingUpdate = newState);\n    queue.baseState = lastPendingUpdate;\n    queue.firstBaseUpdate = firstPendingUpdate;\n    queue.lastBaseUpdate = current;\n    null === firstBaseUpdate && (queue.shared.lanes = 0);\n    workInProgressRootSkippedLanes |= lastBaseUpdate;\n    workInProgress$jscomp$0.lanes = lastBaseUpdate;\n    workInProgress$jscomp$0.memoizedState = newState;\n  }\n}\nfunction callCallback(callback, context) {\n  if (\"function\" !== typeof callback)\n    throw Error(formatProdErrorMessage(191, callback));\n  callback.call(context);\n}\nfunction commitCallbacks(updateQueue, context) {\n  var callbacks = updateQueue.callbacks;\n  if (null !== callbacks)\n    for (\n      updateQueue.callbacks = null, updateQueue = 0;\n      updateQueue < callbacks.length;\n      updateQueue++\n    )\n      callCallback(callbacks[updateQueue], context);\n}\nvar currentTreeHiddenStackCursor = createCursor(null),\n  prevEntangledRenderLanesCursor = createCursor(0);\nfunction pushHiddenContext(fiber, context) {\n  fiber = entangledRenderLanes;\n  push(prevEntangledRenderLanesCursor, fiber);\n  push(currentTreeHiddenStackCursor, context);\n  entangledRenderLanes = fiber | context.baseLanes;\n}\nfunction reuseHiddenContextOnStack() {\n  push(prevEntangledRenderLanesCursor, entangledRenderLanes);\n  push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current);\n}\nfunction popHiddenContext() {\n  entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n  pop(currentTreeHiddenStackCursor);\n  pop(prevEntangledRenderLanesCursor);\n}\nvar suspenseHandlerStackCursor = createCursor(null),\n  shellBoundary = null;\nfunction pushPrimaryTreeSuspenseHandler(handler) {\n  var current = handler.alternate;\n  push(suspenseStackCursor, suspenseStackCursor.current & 1);\n  push(suspenseHandlerStackCursor, handler);\n  null === shellBoundary &&\n    (null === current || null !== currentTreeHiddenStackCursor.current\n      ? (shellBoundary = handler)\n      : null !== current.memoizedState && (shellBoundary = handler));\n}\nfunction pushDehydratedActivitySuspenseHandler(fiber) {\n  push(suspenseStackCursor, suspenseStackCursor.current);\n  push(suspenseHandlerStackCursor, fiber);\n  null === shellBoundary && (shellBoundary = fiber);\n}\nfunction pushOffscreenSuspenseHandler(fiber) {\n  22 === fiber.tag\n    ? (push(suspenseStackCursor, suspenseStackCursor.current),\n      push(suspenseHandlerStackCursor, fiber),\n      null === shellBoundary && (shellBoundary = fiber))\n    : reuseSuspenseHandlerOnStack();\n}\nfunction reuseSuspenseHandlerOnStack() {\n  push(suspenseStackCursor, suspenseStackCursor.current);\n  push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n}\nfunction popSuspenseHandler(fiber) {\n  pop(suspenseHandlerStackCursor);\n  shellBoundary === fiber && (shellBoundary = null);\n  pop(suspenseStackCursor);\n}\nvar suspenseStackCursor = createCursor(0);\nfunction pushSuspenseListContext(fiber, newContext) {\n  push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n  push(suspenseStackCursor, newContext);\n}\nfunction popSuspenseListContext(fiber) {\n  pop(suspenseStackCursor);\n  pop(suspenseHandlerStackCursor);\n  shellBoundary === fiber && (shellBoundary = null);\n}\nfunction findFirstSuspended(row) {\n  for (var node = row; null !== node; ) {\n    if (13 === node.tag) {\n      var state = node.memoizedState;\n      if (\n        null !== state &&\n        ((state = state.dehydrated),\n        null === state ||\n          isSuspenseInstancePending(state) ||\n          isSuspenseInstanceFallback(state))\n      )\n        return node;\n    } else if (\n      19 === node.tag &&\n      \"independent\" !== node.memoizedProps.revealOrder\n    ) {\n      if (0 !== (node.flags & 128)) return node;\n    } else if (null !== node.child) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n    if (node === row) break;\n    for (; null === node.sibling; ) {\n      if (null === node.return || node.return === row) return null;\n      node = node.return;\n    }\n    node.sibling.return = node.return;\n    node = node.sibling;\n  }\n  return null;\n}\nvar renderLanes = 0,\n  currentlyRenderingFiber = null,\n  currentHook = null,\n  workInProgressHook = null,\n  didScheduleRenderPhaseUpdate = !1,\n  didScheduleRenderPhaseUpdateDuringThisPass = !1,\n  shouldDoubleInvokeUserFnsInHooksDEV = !1,\n  localIdCounter = 0,\n  thenableIndexCounter = 0,\n  thenableState = null,\n  globalClientIdCounter = 0;\nfunction throwInvalidHookError() {\n  throw Error(formatProdErrorMessage(321));\n}\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n  if (null === prevDeps) return !1;\n  for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n    if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n  return !0;\n}\nfunction renderWithHooks(\n  current,\n  workInProgress,\n  Component,\n  props,\n  secondArg,\n  nextRenderLanes\n) {\n  renderLanes = nextRenderLanes;\n  currentlyRenderingFiber = workInProgress;\n  workInProgress.memoizedState = null;\n  workInProgress.updateQueue = null;\n  workInProgress.lanes = 0;\n  ReactSharedInternals.H =\n    null === current || null === current.memoizedState\n      ? HooksDispatcherOnMount\n      : HooksDispatcherOnUpdate;\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  nextRenderLanes = Component(props, secondArg);\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  didScheduleRenderPhaseUpdateDuringThisPass &&\n    (nextRenderLanes = renderWithHooksAgain(\n      workInProgress,\n      Component,\n      props,\n      secondArg\n    ));\n  finishRenderingHooks(current);\n  return nextRenderLanes;\n}\nfunction finishRenderingHooks(current) {\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next;\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber = null;\n  didScheduleRenderPhaseUpdate = !1;\n  thenableIndexCounter = 0;\n  thenableState = null;\n  if (didRenderTooFewHooks) throw Error(formatProdErrorMessage(300));\n  null === current ||\n    didReceiveUpdate ||\n    ((current = current.dependencies),\n    null !== current &&\n      checkIfContextChanged(current) &&\n      (didReceiveUpdate = !0));\n}\nfunction renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n  currentlyRenderingFiber = workInProgress;\n  var numberOfReRenders = 0;\n  do {\n    didScheduleRenderPhaseUpdateDuringThisPass && (thenableState = null);\n    thenableIndexCounter = 0;\n    didScheduleRenderPhaseUpdateDuringThisPass = !1;\n    if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));\n    numberOfReRenders += 1;\n    workInProgressHook = currentHook = null;\n    if (null != workInProgress.updateQueue) {\n      var children = workInProgress.updateQueue;\n      children.lastEffect = null;\n      children.events = null;\n      children.stores = null;\n      null != children.memoCache && (children.memoCache.index = 0);\n    }\n    ReactSharedInternals.H = HooksDispatcherOnRerender;\n    children = Component(props, secondArg);\n  } while (didScheduleRenderPhaseUpdateDuringThisPass);\n  return children;\n}\nfunction TransitionAwareHostComponent() {\n  var dispatcher = ReactSharedInternals.H,\n    maybeThenable = dispatcher.useState()[0];\n  maybeThenable =\n    \"function\" === typeof maybeThenable.then\n      ? useThenable(maybeThenable)\n      : maybeThenable;\n  dispatcher = dispatcher.useState()[0];\n  (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher &&\n    (currentlyRenderingFiber.flags |= 1024);\n  return maybeThenable;\n}\nfunction checkDidRenderIdHook() {\n  var didRenderIdHook = 0 !== localIdCounter;\n  localIdCounter = 0;\n  return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n  workInProgress.updateQueue = current.updateQueue;\n  workInProgress.flags &= -2053;\n  current.lanes &= ~lanes;\n}\nfunction resetHooksOnUnwind(workInProgress) {\n  if (didScheduleRenderPhaseUpdate) {\n    for (\n      workInProgress = workInProgress.memoizedState;\n      null !== workInProgress;\n\n    ) {\n      var queue = workInProgress.queue;\n      null !== queue && (queue.pending = null);\n      workInProgress = workInProgress.next;\n    }\n    didScheduleRenderPhaseUpdate = !1;\n  }\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber = null;\n  didScheduleRenderPhaseUpdateDuringThisPass = !1;\n  thenableIndexCounter = localIdCounter = 0;\n  thenableState = null;\n}\nfunction mountWorkInProgressHook() {\n  var hook = {\n    memoizedState: null,\n    baseState: null,\n    baseQueue: null,\n    queue: null,\n    next: null\n  };\n  null === workInProgressHook\n    ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n    : (workInProgressHook = workInProgressHook.next = hook);\n  return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n  if (null === currentHook) {\n    var nextCurrentHook = currentlyRenderingFiber.alternate;\n    nextCurrentHook =\n      null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n  } else nextCurrentHook = currentHook.next;\n  var nextWorkInProgressHook =\n    null === workInProgressHook\n      ? currentlyRenderingFiber.memoizedState\n      : workInProgressHook.next;\n  if (null !== nextWorkInProgressHook)\n    (workInProgressHook = nextWorkInProgressHook),\n      (currentHook = nextCurrentHook);\n  else {\n    if (null === nextCurrentHook) {\n      if (null === currentlyRenderingFiber.alternate)\n        throw Error(formatProdErrorMessage(467));\n      throw Error(formatProdErrorMessage(310));\n    }\n    currentHook = nextCurrentHook;\n    nextCurrentHook = {\n      memoizedState: currentHook.memoizedState,\n      baseState: currentHook.baseState,\n      baseQueue: currentHook.baseQueue,\n      queue: currentHook.queue,\n      next: null\n    };\n    null === workInProgressHook\n      ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n          nextCurrentHook)\n      : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n  }\n  return workInProgressHook;\n}\nfunction createFunctionComponentUpdateQueue() {\n  return { lastEffect: null, events: null, stores: null, memoCache: null };\n}\nfunction useThenable(thenable) {\n  var index = thenableIndexCounter;\n  thenableIndexCounter += 1;\n  null === thenableState && (thenableState = []);\n  thenable = trackUsedThenable(thenableState, thenable, index);\n  index = currentlyRenderingFiber;\n  null ===\n    (null === workInProgressHook\n      ? index.memoizedState\n      : workInProgressHook.next) &&\n    ((index = index.alternate),\n    (ReactSharedInternals.H =\n      null === index || null === index.memoizedState\n        ? HooksDispatcherOnMount\n        : HooksDispatcherOnUpdate));\n  return thenable;\n}\nfunction use(usable) {\n  if (null !== usable && \"object\" === typeof usable) {\n    if (\"function\" === typeof usable.then) return useThenable(usable);\n    if (usable.$$typeof === REACT_RECOVERABLE_TYPE) return;\n    if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n  }\n  throw Error(formatProdErrorMessage(438, String(usable)));\n}\nfunction useMemoCache(size) {\n  var memoCache = null,\n    updateQueue = currentlyRenderingFiber.updateQueue;\n  null !== updateQueue && (memoCache = updateQueue.memoCache);\n  if (null == memoCache) {\n    var current = currentlyRenderingFiber.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      null !== current &&\n        ((current = current.memoCache),\n        null != current &&\n          (memoCache = {\n            data: current.data.map(function (array) {\n              return array.slice();\n            }),\n            index: 0\n          })));\n  }\n  null == memoCache && (memoCache = { data: [], index: 0 });\n  null === updateQueue &&\n    ((updateQueue = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber.updateQueue = updateQueue));\n  updateQueue.memoCache = memoCache;\n  updateQueue = memoCache.data[memoCache.index];\n  if (void 0 === updateQueue)\n    for (\n      updateQueue = memoCache.data[memoCache.index] = Array(size), current = 0;\n      current < size;\n      current++\n    )\n      updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n  memoCache.index++;\n  return updateQueue;\n}\nfunction basicStateReducer(state, action) {\n  return \"function\" === typeof action ? action(state) : action;\n}\nfunction updateReducer(reducer) {\n  var hook = updateWorkInProgressHook();\n  return updateReducerImpl(hook, currentHook, reducer);\n}\nfunction updateReducerImpl(hook, current, reducer) {\n  var queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var baseQueue = hook.baseQueue,\n    pendingQueue = queue.pending;\n  if (null !== pendingQueue) {\n    if (null !== baseQueue) {\n      var baseFirst = baseQueue.next;\n      baseQueue.next = pendingQueue.next;\n      pendingQueue.next = baseFirst;\n    }\n    current.baseQueue = baseQueue = pendingQueue;\n    queue.pending = null;\n  }\n  pendingQueue = hook.baseState;\n  if (null === baseQueue) hook.memoizedState = pendingQueue;\n  else {\n    current = baseQueue.next;\n    var newBaseQueueFirst = (baseFirst = null),\n      newBaseQueueLast = null,\n      update = current,\n      didReadFromEntangledAsyncAction$64 = !1;\n    do {\n      var updateLane = update.lane & -536870913;\n      if (\n        updateLane !== update.lane\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        var revertLane = update.revertLane;\n        if (0 === revertLane)\n          null !== newBaseQueueLast &&\n            (newBaseQueueLast = newBaseQueueLast.next =\n              {\n                lane: 0,\n                revertLane: 0,\n                gesture: null,\n                action: update.action,\n                hasEagerState: update.hasEagerState,\n                eagerState: update.eagerState,\n                next: null\n              }),\n            updateLane === currentEntangledLane &&\n              (didReadFromEntangledAsyncAction$64 = !0);\n        else if ((renderLanes & revertLane) === revertLane) {\n          update = update.next;\n          revertLane === currentEntangledLane &&\n            (didReadFromEntangledAsyncAction$64 = !0);\n          continue;\n        } else\n          (updateLane = {\n            lane: 0,\n            revertLane: update.revertLane,\n            gesture: null,\n            action: update.action,\n            hasEagerState: update.hasEagerState,\n            eagerState: update.eagerState,\n            next: null\n          }),\n            null === newBaseQueueLast\n              ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n                (baseFirst = pendingQueue))\n              : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n            (currentlyRenderingFiber.lanes |= revertLane),\n            (workInProgressRootSkippedLanes |= revertLane);\n        updateLane = update.action;\n        shouldDoubleInvokeUserFnsInHooksDEV &&\n          reducer(pendingQueue, updateLane);\n        pendingQueue = update.hasEagerState\n          ? update.eagerState\n          : reducer(pendingQueue, updateLane);\n      } else\n        (revertLane = {\n          lane: updateLane,\n          revertLane: update.revertLane,\n          gesture: update.gesture,\n          action: update.action,\n          hasEagerState: update.hasEagerState,\n          eagerState: update.eagerState,\n          next: null\n        }),\n          null === newBaseQueueLast\n            ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n              (baseFirst = pendingQueue))\n            : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n          (currentlyRenderingFiber.lanes |= updateLane),\n          (workInProgressRootSkippedLanes |= updateLane);\n      update = update.next;\n    } while (null !== update && update !== current);\n    null === newBaseQueueLast\n      ? (baseFirst = pendingQueue)\n      : (newBaseQueueLast.next = newBaseQueueFirst);\n    if (\n      !objectIs(pendingQueue, hook.memoizedState) &&\n      ((didReceiveUpdate = !0),\n      didReadFromEntangledAsyncAction$64 &&\n        ((reducer = currentEntangledActionThenable), null !== reducer))\n    )\n      throw reducer;\n    hook.memoizedState = pendingQueue;\n    hook.baseState = baseFirst;\n    hook.baseQueue = newBaseQueueLast;\n    queue.lastRenderedState = pendingQueue;\n  }\n  null === baseQueue && (queue.lanes = 0);\n  return [hook.memoizedState, queue.dispatch];\n}\nfunction rerenderReducer(reducer) {\n  var hook = updateWorkInProgressHook(),\n    queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var dispatch = queue.dispatch,\n    lastRenderPhaseUpdate = queue.pending,\n    newState = hook.memoizedState;\n  if (null !== lastRenderPhaseUpdate) {\n    queue.pending = null;\n    var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n    do (newState = reducer(newState, update.action)), (update = update.next);\n    while (update !== lastRenderPhaseUpdate);\n    objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n    hook.memoizedState = newState;\n    null === hook.baseQueue && (hook.baseState = newState);\n    queue.lastRenderedState = newState;\n  }\n  return [newState, dispatch];\n}\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n  var fiber = currentlyRenderingFiber,\n    hook = updateWorkInProgressHook(),\n    isHydrating$jscomp$0 = isHydrating;\n  if (isHydrating$jscomp$0) {\n    if (void 0 === getServerSnapshot) throw Error(formatProdErrorMessage(407));\n    getServerSnapshot = getServerSnapshot();\n  } else getServerSnapshot = getSnapshot();\n  var snapshotChanged = !objectIs(\n    (currentHook || hook).memoizedState,\n    getServerSnapshot\n  );\n  snapshotChanged &&\n    ((hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0));\n  hook = hook.queue;\n  updateEffect(subscribeToStore.bind(null, fiber, hook, subscribe), [\n    subscribe\n  ]);\n  subscribe =\n    hook.getSnapshot !== getSnapshot ||\n    snapshotChanged ||\n    (null !== workInProgressHook &&\n      0 !== (workInProgressHook.memoizedState.tag & 1));\n  pushSimpleEffect(\n    subscribe ? 9 : 8,\n    { destroy: void 0 },\n    updateStoreInstance.bind(null, fiber, hook, getServerSnapshot, getSnapshot),\n    null\n  );\n  if (subscribe) {\n    fiber.flags |= 2048;\n    if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));\n    isHydrating$jscomp$0 ||\n      0 !== (renderLanes & 127) ||\n      pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n  }\n  return getServerSnapshot;\n}\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n  fiber.flags |= 16384;\n  fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n  getSnapshot = currentlyRenderingFiber.updateQueue;\n  null === getSnapshot\n    ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n      (currentlyRenderingFiber.updateQueue = getSnapshot),\n      (getSnapshot.stores = [fiber]))\n    : ((renderedSnapshot = getSnapshot.stores),\n      null === renderedSnapshot\n        ? (getSnapshot.stores = [fiber])\n        : renderedSnapshot.push(fiber));\n}\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n  inst.value = nextSnapshot;\n  inst.getSnapshot = getSnapshot;\n  checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n}\nfunction subscribeToStore(fiber, inst, subscribe) {\n  return subscribe(function () {\n    checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n  });\n}\nfunction checkIfSnapshotChanged(inst) {\n  var latestGetSnapshot = inst.getSnapshot;\n  inst = inst.value;\n  try {\n    var nextValue = latestGetSnapshot();\n    return !objectIs(inst, nextValue);\n  } catch (error) {\n    return !0;\n  }\n}\nfunction forceStoreRerender(fiber) {\n  var root = enqueueConcurrentRenderForLane(fiber, 2);\n  null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n}\nfunction mountStateImpl(initialState) {\n  var hook = mountWorkInProgressHook();\n  if (\"function\" === typeof initialState) {\n    var initialStateInitializer = initialState;\n    initialState = initialStateInitializer();\n    if (shouldDoubleInvokeUserFnsInHooksDEV) {\n      setIsStrictModeForDevtools(!0);\n      try {\n        initialStateInitializer();\n      } finally {\n        setIsStrictModeForDevtools(!1);\n      }\n    }\n  }\n  hook.memoizedState = hook.baseState = initialState;\n  hook.queue = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: basicStateReducer,\n    lastRenderedState: initialState\n  };\n  return hook;\n}\nfunction updateOptimisticImpl(hook, current, passthrough, reducer) {\n  hook.baseState = passthrough;\n  return updateReducerImpl(\n    hook,\n    currentHook,\n    \"function\" === typeof reducer ? reducer : basicStateReducer\n  );\n}\nfunction dispatchActionState(\n  fiber,\n  actionQueue,\n  setPendingState,\n  setState,\n  payload\n) {\n  if (isRenderPhaseUpdate(fiber)) throw Error(formatProdErrorMessage(485));\n  fiber = actionQueue.action;\n  if (null !== fiber) {\n    var actionNode = {\n      payload: payload,\n      action: fiber,\n      next: null,\n      isTransition: !0,\n      status: \"pending\",\n      value: null,\n      reason: null,\n      listeners: [],\n      then: function (listener) {\n        actionNode.listeners.push(listener);\n      }\n    };\n    null !== ReactSharedInternals.T\n      ? setPendingState(!0)\n      : (actionNode.isTransition = !1);\n    setState(actionNode);\n    setPendingState = actionQueue.pending;\n    null === setPendingState\n      ? ((actionNode.next = actionQueue.pending = actionNode),\n        runActionStateAction(actionQueue, actionNode))\n      : ((actionNode.next = setPendingState.next),\n        (actionQueue.pending = setPendingState.next = actionNode));\n  }\n}\nfunction runActionStateAction(actionQueue, node) {\n  var action = node.action,\n    payload = node.payload,\n    prevState = actionQueue.state;\n  if (node.isTransition) {\n    var prevTransition = ReactSharedInternals.T,\n      currentTransition = {};\n    currentTransition.types =\n      null !== prevTransition ? prevTransition.types : null;\n    ReactSharedInternals.T = currentTransition;\n    try {\n      var returnValue = action(prevState, payload),\n        onStartTransitionFinish = ReactSharedInternals.S;\n      null !== onStartTransitionFinish &&\n        onStartTransitionFinish(currentTransition, returnValue);\n      handleActionReturnValue(actionQueue, node, returnValue);\n    } catch (error) {\n      onActionError(actionQueue, node, error);\n    } finally {\n      null !== prevTransition &&\n        null !== currentTransition.types &&\n        (prevTransition.types = currentTransition.types),\n        (ReactSharedInternals.T = prevTransition);\n    }\n  } else\n    try {\n      (prevTransition = action(prevState, payload)),\n        handleActionReturnValue(actionQueue, node, prevTransition);\n    } catch (error$70) {\n      onActionError(actionQueue, node, error$70);\n    }\n}\nfunction handleActionReturnValue(actionQueue, node, returnValue) {\n  null !== returnValue &&\n  \"object\" === typeof returnValue &&\n  \"function\" === typeof returnValue.then\n    ? returnValue.then(\n        function (nextState) {\n          onActionSuccess(actionQueue, node, nextState);\n        },\n        function (error) {\n          return onActionError(actionQueue, node, error);\n        }\n      )\n    : onActionSuccess(actionQueue, node, returnValue);\n}\nfunction onActionSuccess(actionQueue, actionNode, nextState) {\n  actionNode.status = \"fulfilled\";\n  actionNode.value = nextState;\n  notifyActionListeners(actionNode);\n  actionQueue.state = nextState;\n  actionNode = actionQueue.pending;\n  null !== actionNode &&\n    ((nextState = actionNode.next),\n    nextState === actionNode\n      ? (actionQueue.pending = null)\n      : ((nextState = nextState.next),\n        (actionNode.next = nextState),\n        runActionStateAction(actionQueue, nextState)));\n}\nfunction onActionError(actionQueue, actionNode, error) {\n  var last = actionQueue.pending;\n  actionQueue.pending = null;\n  if (null !== last) {\n    last = last.next;\n    do\n      (actionNode.status = \"rejected\"),\n        (actionNode.reason = error),\n        notifyActionListeners(actionNode),\n        (actionNode = actionNode.next);\n    while (actionNode !== last);\n  }\n  actionQueue.action = null;\n}\nfunction notifyActionListeners(actionNode) {\n  actionNode = actionNode.listeners;\n  for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n}\nfunction actionStateReducer(oldState, newState) {\n  return newState;\n}\nfunction mountActionState(action, initialStateProp) {\n  if (isHydrating) {\n    var ssrFormState = workInProgressRoot.formState;\n    if (null !== ssrFormState) {\n      a: {\n        var JSCompiler_inline_result = currentlyRenderingFiber;\n        if (isHydrating) {\n          if (nextHydratableInstance) {\n            b: {\n              var JSCompiler_inline_result$jscomp$0 = nextHydratableInstance;\n              for (\n                var inRootOrSingleton = rootOrSingletonContext;\n                8 !== JSCompiler_inline_result$jscomp$0.nodeType;\n\n              ) {\n                if (!inRootOrSingleton) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n                JSCompiler_inline_result$jscomp$0 = getNextHydratable(\n                  JSCompiler_inline_result$jscomp$0.nextSibling\n                );\n                if (null === JSCompiler_inline_result$jscomp$0) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n              }\n              inRootOrSingleton = JSCompiler_inline_result$jscomp$0.data;\n              JSCompiler_inline_result$jscomp$0 =\n                \"F!\" === inRootOrSingleton || \"F\" === inRootOrSingleton\n                  ? JSCompiler_inline_result$jscomp$0\n                  : null;\n            }\n            if (JSCompiler_inline_result$jscomp$0) {\n              nextHydratableInstance = getNextHydratable(\n                JSCompiler_inline_result$jscomp$0.nextSibling\n              );\n              JSCompiler_inline_result =\n                \"F!\" === JSCompiler_inline_result$jscomp$0.data;\n              break a;\n            }\n          }\n          throwOnHydrationMismatch(JSCompiler_inline_result);\n        }\n        JSCompiler_inline_result = !1;\n      }\n      JSCompiler_inline_result && (initialStateProp = ssrFormState[0]);\n    }\n  }\n  ssrFormState = mountWorkInProgressHook();\n  ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n  JSCompiler_inline_result = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: actionStateReducer,\n    lastRenderedState: initialStateProp\n  };\n  ssrFormState.queue = JSCompiler_inline_result;\n  ssrFormState = dispatchSetState.bind(\n    null,\n    currentlyRenderingFiber,\n    JSCompiler_inline_result\n  );\n  JSCompiler_inline_result.dispatch = ssrFormState;\n  JSCompiler_inline_result = mountStateImpl(!1);\n  inRootOrSingleton = dispatchOptimisticSetState.bind(\n    null,\n    currentlyRenderingFiber,\n    !1,\n    JSCompiler_inline_result.queue\n  );\n  JSCompiler_inline_result = mountWorkInProgressHook();\n  JSCompiler_inline_result$jscomp$0 = {\n    state: initialStateProp,\n    dispatch: null,\n    action: action,\n    pending: null\n  };\n  JSCompiler_inline_result.queue = JSCompiler_inline_result$jscomp$0;\n  ssrFormState = dispatchActionState.bind(\n    null,\n    currentlyRenderingFiber,\n    JSCompiler_inline_result$jscomp$0,\n    inRootOrSingleton,\n    ssrFormState\n  );\n  JSCompiler_inline_result$jscomp$0.dispatch = ssrFormState;\n  JSCompiler_inline_result.memoizedState = action;\n  return [initialStateProp, ssrFormState, !1];\n}\nfunction updateActionState(action) {\n  var stateHook = updateWorkInProgressHook();\n  return updateActionStateImpl(stateHook, currentHook, action);\n}\nfunction updateActionStateImpl(stateHook, currentStateHook, action) {\n  currentStateHook = updateReducerImpl(\n    stateHook,\n    currentStateHook,\n    actionStateReducer\n  )[0];\n  stateHook = updateReducer(basicStateReducer)[0];\n  if (\n    \"object\" === typeof currentStateHook &&\n    null !== currentStateHook &&\n    \"function\" === typeof currentStateHook.then\n  )\n    try {\n      var state = useThenable(currentStateHook);\n    } catch (x) {\n      if (x === SuspenseException) throw SuspenseActionException;\n      throw x;\n    }\n  else state = currentStateHook;\n  currentStateHook = updateWorkInProgressHook();\n  var actionQueue = currentStateHook.queue,\n    dispatch = actionQueue.dispatch;\n  action !== currentStateHook.memoizedState &&\n    ((currentlyRenderingFiber.flags |= 2048),\n    pushSimpleEffect(\n      9,\n      { destroy: void 0 },\n      actionStateActionEffect.bind(null, actionQueue, action),\n      null\n    ));\n  return [state, dispatch, stateHook];\n}\nfunction actionStateActionEffect(actionQueue, action) {\n  actionQueue.action = action;\n}\nfunction rerenderActionState(action) {\n  var stateHook = updateWorkInProgressHook(),\n    currentStateHook = currentHook;\n  if (null !== currentStateHook)\n    return updateActionStateImpl(stateHook, currentStateHook, action);\n  updateWorkInProgressHook();\n  stateHook = stateHook.memoizedState;\n  currentStateHook = updateWorkInProgressHook();\n  var dispatch = currentStateHook.queue.dispatch;\n  currentStateHook.memoizedState = action;\n  return [stateHook, dispatch, !1];\n}\nfunction pushSimpleEffect(tag, inst, create, deps) {\n  tag = { tag: tag, create: create, deps: deps, inst: inst, next: null };\n  inst = currentlyRenderingFiber.updateQueue;\n  null === inst &&\n    ((inst = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber.updateQueue = inst));\n  create = inst.lastEffect;\n  null === create\n    ? (inst.lastEffect = tag.next = tag)\n    : ((deps = create.next),\n      (create.next = tag),\n      (tag.next = deps),\n      (inst.lastEffect = tag));\n  return tag;\n}\nfunction updateRef() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n  var hook = mountWorkInProgressHook();\n  currentlyRenderingFiber.flags |= fiberFlags;\n  hook.memoizedState = pushSimpleEffect(\n    1 | hookFlags,\n    { destroy: void 0 },\n    create,\n    void 0 === deps ? null : deps\n  );\n}\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var inst = hook.memoizedState.inst;\n  null !== currentHook &&\n  null !== deps &&\n  areHookInputsEqual(deps, currentHook.memoizedState.deps)\n    ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n    : ((currentlyRenderingFiber.flags |= fiberFlags),\n      (hook.memoizedState = pushSimpleEffect(\n        1 | hookFlags,\n        inst,\n        create,\n        deps\n      )));\n}\nfunction mountEffect(create, deps) {\n  mountEffectImpl(8390656, 8, create, deps);\n}\nfunction updateEffect(create, deps) {\n  updateEffectImpl(2048, 8, create, deps);\n}\nfunction useEffectEventImpl(payload) {\n  currentlyRenderingFiber.flags |= 4;\n  var componentUpdateQueue = currentlyRenderingFiber.updateQueue;\n  if (null === componentUpdateQueue)\n    (componentUpdateQueue = createFunctionComponentUpdateQueue()),\n      (currentlyRenderingFiber.updateQueue = componentUpdateQueue),\n      (componentUpdateQueue.events = [payload]);\n  else {\n    var events = componentUpdateQueue.events;\n    null === events\n      ? (componentUpdateQueue.events = [payload])\n      : events.push(payload);\n  }\n}\nfunction updateEvent(callback) {\n  var ref = updateWorkInProgressHook().memoizedState;\n  useEffectEventImpl({ ref: ref, nextImpl: callback });\n  return function () {\n    if (0 !== (executionContext & 2)) throw Error(formatProdErrorMessage(440));\n    return ref.impl.apply(void 0, arguments);\n  };\n}\nfunction updateInsertionEffect(create, deps) {\n  return updateEffectImpl(4, 2, create, deps);\n}\nfunction updateLayoutEffect(create, deps) {\n  return updateEffectImpl(4, 4, create, deps);\n}\nfunction imperativeHandleEffect(create, ref) {\n  if (\"function\" === typeof ref) {\n    create = create();\n    var refCleanup = ref(create);\n    return function () {\n      \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n    };\n  }\n  if (null !== ref && void 0 !== ref)\n    return (\n      (create = create()),\n      (ref.current = create),\n      function () {\n        ref.current = null;\n      }\n    );\n}\nfunction updateImperativeHandle(ref, create, deps) {\n  deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n  updateEffectImpl(4, 4, imperativeHandleEffect.bind(null, create, ref), deps);\n}\nfunction mountDebugValue() {}\nfunction updateCallback(callback, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  hook.memoizedState = [callback, deps];\n  return callback;\n}\nfunction updateMemo(nextCreate, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  prevState = nextCreate();\n  if (shouldDoubleInvokeUserFnsInHooksDEV) {\n    setIsStrictModeForDevtools(!0);\n    try {\n      nextCreate();\n    } finally {\n      setIsStrictModeForDevtools(!1);\n    }\n  }\n  hook.memoizedState = [prevState, deps];\n  return prevState;\n}\nfunction mountDeferredValueImpl(hook, value, initialValue) {\n  if (\n    void 0 === initialValue ||\n    (0 !== (renderLanes & 1073741824) &&\n      0 === (workInProgressRootRenderLanes & 261930))\n  )\n    return (hook.memoizedState = value);\n  hook.memoizedState = initialValue;\n  hook = requestDeferredLane();\n  currentlyRenderingFiber.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return initialValue;\n}\nfunction updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n  if (objectIs(value, prevValue)) return value;\n  if (null !== currentTreeHiddenStackCursor.current)\n    return (\n      (hook = mountDeferredValueImpl(hook, value, initialValue)),\n      objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n      hook\n    );\n  if (\n    0 === (renderLanes & 106) ||\n    (0 !== (renderLanes & 1073741824) &&\n      0 === (workInProgressRootRenderLanes & 261930))\n  )\n    return (didReceiveUpdate = !0), (hook.memoizedState = value);\n  hook = requestDeferredLane();\n  currentlyRenderingFiber.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return prevValue;\n}\nfunction startTransition(fiber, queue, pendingState, finishedState, callback) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  ReactDOMSharedInternals.p =\n    0 !== previousPriority && 8 > previousPriority ? previousPriority : 8;\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  currentTransition.types =\n    null !== prevTransition ? prevTransition.types : null;\n  ReactSharedInternals.T = currentTransition;\n  dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n  try {\n    var returnValue = callback(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    if (\n      null !== returnValue &&\n      \"object\" === typeof returnValue &&\n      \"function\" === typeof returnValue.then\n    ) {\n      var thenableForFinishedState = chainThenableValue(\n        returnValue,\n        finishedState\n      );\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        thenableForFinishedState,\n        requestUpdateLane(fiber)\n      );\n    } else\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        finishedState,\n        requestUpdateLane(fiber)\n      );\n  } catch (error) {\n    dispatchSetStateInternal(\n      fiber,\n      queue,\n      { then: function () {}, status: \"rejected\", reason: error },\n      requestUpdateLane()\n    );\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      null !== prevTransition &&\n        null !== currentTransition.types &&\n        (prevTransition.types = currentTransition.types),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction noop() {}\nfunction startHostTransition(formFiber, pendingState, action, formData) {\n  if (5 !== formFiber.tag) throw Error(formatProdErrorMessage(476));\n  var queue = ensureFormComponentIsStateful(formFiber).queue;\n  startTransition(\n    formFiber,\n    queue,\n    pendingState,\n    sharedNotPendingObject,\n    null === action\n      ? noop\n      : function () {\n          requestFormReset$1(formFiber);\n          return action(formData);\n        }\n  );\n}\nfunction ensureFormComponentIsStateful(formFiber) {\n  var existingStateHook = formFiber.memoizedState;\n  if (null !== existingStateHook) return existingStateHook;\n  existingStateHook = {\n    memoizedState: sharedNotPendingObject,\n    baseState: sharedNotPendingObject,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: sharedNotPendingObject\n    },\n    next: null\n  };\n  var initialResetState = {};\n  existingStateHook.next = {\n    memoizedState: initialResetState,\n    baseState: initialResetState,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: initialResetState\n    },\n    next: null\n  };\n  formFiber.memoizedState = existingStateHook;\n  formFiber = formFiber.alternate;\n  null !== formFiber && (formFiber.memoizedState = existingStateHook);\n  return existingStateHook;\n}\nfunction requestFormReset$1(formFiber) {\n  var stateHook = ensureFormComponentIsStateful(formFiber);\n  null === stateHook.next && (stateHook = formFiber.alternate.memoizedState);\n  dispatchSetStateInternal(\n    formFiber,\n    stateHook.next.queue,\n    {},\n    requestUpdateLane()\n  );\n}\nfunction useHostTransitionStatus() {\n  return readContext(HostTransitionContext);\n}\nfunction updateId() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction updateRefresh() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction refreshCache(fiber) {\n  for (var provider = fiber.return; null !== provider; ) {\n    switch (provider.tag) {\n      case 24:\n      case 3:\n        var lane = requestUpdateLane();\n        fiber = createUpdate(lane);\n        var root$73 = enqueueUpdate(provider, fiber, lane);\n        null !== root$73 &&\n          (scheduleUpdateOnFiber(root$73, provider, lane),\n          entangleTransitions(root$73, provider, lane));\n        provider = { cache: createCache() };\n        fiber.payload = provider;\n        return;\n    }\n    provider = provider.return;\n  }\n}\nfunction dispatchReducerAction(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  action = {\n    lane: lane,\n    revertLane: 0,\n    gesture: null,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  isRenderPhaseUpdate(fiber)\n    ? enqueueRenderPhaseUpdate(queue, action)\n    : ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)),\n      null !== action &&\n        (scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane)));\n}\nfunction dispatchSetState(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  dispatchSetStateInternal(fiber, queue, action, lane);\n}\nfunction dispatchSetStateInternal(fiber, queue, action, lane) {\n  var update = {\n    lane: lane,\n    revertLane: 0,\n    gesture: null,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n  else {\n    var alternate = fiber.alternate;\n    if (\n      0 === fiber.lanes &&\n      (null === alternate || 0 === alternate.lanes) &&\n      ((alternate = queue.lastRenderedReducer), null !== alternate)\n    )\n      try {\n        var currentState = queue.lastRenderedState,\n          eagerState = alternate(currentState, action);\n        update.hasEagerState = !0;\n        update.eagerState = eagerState;\n        if (objectIs(eagerState, currentState))\n          return (\n            enqueueUpdate$1(fiber, queue, update, 0),\n            null === workInProgressRoot && finishQueueingConcurrentUpdates(),\n            !1\n          );\n      } catch (error) {\n      } finally {\n      }\n    action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n    if (null !== action)\n      return (\n        scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane),\n        !0\n      );\n  }\n  return !1;\n}\nfunction dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {\n  action = {\n    lane: 2,\n    revertLane: requestTransitionLane(),\n    gesture: null,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) {\n    if (throwIfDuringRender) throw Error(formatProdErrorMessage(479));\n  } else\n    (throwIfDuringRender = enqueueConcurrentHookUpdate(\n      fiber,\n      queue,\n      action,\n      2\n    )),\n      null !== throwIfDuringRender &&\n        scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n}\nfunction isRenderPhaseUpdate(fiber) {\n  var alternate = fiber.alternate;\n  return (\n    fiber === currentlyRenderingFiber ||\n    (null !== alternate && alternate === currentlyRenderingFiber)\n  );\n}\nfunction enqueueRenderPhaseUpdate(queue, update) {\n  didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate =\n    !0;\n  var pending = queue.pending;\n  null === pending\n    ? (update.next = update)\n    : ((update.next = pending.next), (pending.next = update));\n  queue.pending = update;\n}\nfunction entangleTransitionUpdate(root, queue, lane) {\n  if (0 !== (lane & 4194048)) {\n    var queueLanes = queue.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    queue.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nvar ContextOnlyDispatcher = {\n    readContext: readContext,\n    use: use,\n    useCallback: throwInvalidHookError,\n    useContext: throwInvalidHookError,\n    useEffect: throwInvalidHookError,\n    useImperativeHandle: throwInvalidHookError,\n    useLayoutEffect: throwInvalidHookError,\n    useInsertionEffect: throwInvalidHookError,\n    useMemo: throwInvalidHookError,\n    useReducer: throwInvalidHookError,\n    useRef: throwInvalidHookError,\n    useState: throwInvalidHookError,\n    useDebugValue: throwInvalidHookError,\n    useDeferredValue: throwInvalidHookError,\n    useTransition: throwInvalidHookError,\n    useSyncExternalStore: throwInvalidHookError,\n    useId: throwInvalidHookError,\n    useHostTransitionStatus: throwInvalidHookError,\n    useFormState: throwInvalidHookError,\n    useActionState: throwInvalidHookError,\n    useOptimistic: throwInvalidHookError,\n    useMemoCache: throwInvalidHookError,\n    useCacheRefresh: throwInvalidHookError,\n    useEffectEvent: throwInvalidHookError\n  },\n  HooksDispatcherOnMount = {\n    readContext: readContext,\n    use: use,\n    useCallback: function (callback, deps) {\n      mountWorkInProgressHook().memoizedState = [\n        callback,\n        void 0 === deps ? null : deps\n      ];\n      return callback;\n    },\n    useContext: readContext,\n    useEffect: mountEffect,\n    useImperativeHandle: function (ref, create, deps) {\n      deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n      mountEffectImpl(\n        4194308,\n        4,\n        imperativeHandleEffect.bind(null, create, ref),\n        deps\n      );\n    },\n    useLayoutEffect: function (create, deps) {\n      return mountEffectImpl(4194308, 4, create, deps);\n    },\n    useInsertionEffect: function (create, deps) {\n      mountEffectImpl(4, 2, create, deps);\n    },\n    useMemo: function (nextCreate, deps) {\n      var hook = mountWorkInProgressHook();\n      deps = void 0 === deps ? null : deps;\n      var nextValue = nextCreate();\n      if (shouldDoubleInvokeUserFnsInHooksDEV) {\n        setIsStrictModeForDevtools(!0);\n        try {\n          nextCreate();\n        } finally {\n          setIsStrictModeForDevtools(!1);\n        }\n      }\n      hook.memoizedState = [nextValue, deps];\n      return nextValue;\n    },\n    useReducer: function (reducer, initialArg, init) {\n      var hook = mountWorkInProgressHook();\n      if (void 0 !== init) {\n        var initialState = init(initialArg);\n        if (shouldDoubleInvokeUserFnsInHooksDEV) {\n          setIsStrictModeForDevtools(!0);\n          try {\n            init(initialArg);\n          } finally {\n            setIsStrictModeForDevtools(!1);\n          }\n        }\n      } else initialState = initialArg;\n      hook.memoizedState = hook.baseState = initialState;\n      reducer = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: reducer,\n        lastRenderedState: initialState\n      };\n      hook.queue = reducer;\n      reducer = reducer.dispatch = dispatchReducerAction.bind(\n        null,\n        currentlyRenderingFiber,\n        reducer\n      );\n      return [hook.memoizedState, reducer];\n    },\n    useRef: function (initialValue) {\n      var hook = mountWorkInProgressHook();\n      initialValue = { current: initialValue };\n      return (hook.memoizedState = initialValue);\n    },\n    useState: function (initialState) {\n      initialState = mountStateImpl(initialState);\n      var queue = initialState.queue,\n        dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n      queue.dispatch = dispatch;\n      return [initialState.memoizedState, dispatch];\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = mountWorkInProgressHook();\n      return mountDeferredValueImpl(hook, value, initialValue);\n    },\n    useTransition: function () {\n      var stateHook = mountStateImpl(!1);\n      stateHook = startTransition.bind(\n        null,\n        currentlyRenderingFiber,\n        stateHook.queue,\n        !0,\n        !1\n      );\n      mountWorkInProgressHook().memoizedState = stateHook;\n      return [!1, stateHook];\n    },\n    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n      var fiber = currentlyRenderingFiber,\n        hook = mountWorkInProgressHook();\n      if (isHydrating) {\n        if (void 0 === getServerSnapshot)\n          throw Error(formatProdErrorMessage(407));\n        getServerSnapshot = getServerSnapshot();\n      } else {\n        getServerSnapshot = getSnapshot();\n        if (null === workInProgressRoot)\n          throw Error(formatProdErrorMessage(349));\n        0 !== (workInProgressRootRenderLanes & 127) ||\n          pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n      }\n      hook.memoizedState = getServerSnapshot;\n      var inst = { value: getServerSnapshot, getSnapshot: getSnapshot };\n      hook.queue = inst;\n      mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [\n        subscribe\n      ]);\n      fiber.flags |= 2048;\n      pushSimpleEffect(\n        9,\n        { destroy: void 0 },\n        updateStoreInstance.bind(\n          null,\n          fiber,\n          inst,\n          getServerSnapshot,\n          getSnapshot\n        ),\n        null\n      );\n      return getServerSnapshot;\n    },\n    useId: function () {\n      var hook = mountWorkInProgressHook(),\n        identifierPrefix = workInProgressRoot.identifierPrefix;\n      if (isHydrating) {\n        var JSCompiler_inline_result = treeContextOverflow;\n        var idWithLeadingBit = treeContextId;\n        JSCompiler_inline_result =\n          (\n            idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n          ).toString(32) + JSCompiler_inline_result;\n        identifierPrefix =\n          \"_\" + identifierPrefix + \"R_\" + JSCompiler_inline_result;\n        JSCompiler_inline_result = localIdCounter++;\n        0 < JSCompiler_inline_result &&\n          (identifierPrefix += \"H\" + JSCompiler_inline_result.toString(32));\n        identifierPrefix += \"_\";\n      } else\n        (JSCompiler_inline_result = globalClientIdCounter++),\n          (identifierPrefix =\n            \"_\" +\n            identifierPrefix +\n            \"r_\" +\n            JSCompiler_inline_result.toString(32) +\n            \"_\");\n      return (hook.memoizedState = identifierPrefix);\n    },\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: mountActionState,\n    useActionState: mountActionState,\n    useOptimistic: function (passthrough) {\n      var hook = mountWorkInProgressHook();\n      hook.memoizedState = hook.baseState = passthrough;\n      var queue = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: null,\n        lastRenderedState: null\n      };\n      hook.queue = queue;\n      hook = dispatchOptimisticSetState.bind(\n        null,\n        currentlyRenderingFiber,\n        !0,\n        queue\n      );\n      queue.dispatch = hook;\n      return [passthrough, hook];\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: function () {\n      return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n        null,\n        currentlyRenderingFiber\n      ));\n    },\n    useEffectEvent: function (callback) {\n      var hook = mountWorkInProgressHook(),\n        ref = { impl: callback };\n      hook.memoizedState = ref;\n      return function () {\n        if (0 !== (executionContext & 2))\n          throw Error(formatProdErrorMessage(440));\n        return ref.impl.apply(void 0, arguments);\n      };\n    }\n  },\n  HooksDispatcherOnUpdate = {\n    readContext: readContext,\n    use: use,\n    useCallback: updateCallback,\n    useContext: readContext,\n    useEffect: updateEffect,\n    useImperativeHandle: updateImperativeHandle,\n    useInsertionEffect: updateInsertionEffect,\n    useLayoutEffect: updateLayoutEffect,\n    useMemo: updateMemo,\n    useReducer: updateReducer,\n    useRef: updateRef,\n    useState: function () {\n      return updateReducer(basicStateReducer);\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = updateWorkInProgressHook();\n      return updateDeferredValueImpl(\n        hook,\n        currentHook.memoizedState,\n        value,\n        initialValue\n      );\n    },\n    useTransition: function () {\n      var booleanOrThenable = updateReducer(basicStateReducer)[0],\n        start = updateWorkInProgressHook().memoizedState;\n      return [\n        \"boolean\" === typeof booleanOrThenable\n          ? booleanOrThenable\n          : useThenable(booleanOrThenable),\n        start\n      ];\n    },\n    useSyncExternalStore: updateSyncExternalStore,\n    useId: updateId,\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: updateActionState,\n    useActionState: updateActionState,\n    useOptimistic: function (passthrough, reducer) {\n      var hook = updateWorkInProgressHook();\n      return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: updateRefresh,\n    useEffectEvent: updateEvent\n  },\n  HooksDispatcherOnRerender = {\n    readContext: readContext,\n    use: use,\n    useCallback: updateCallback,\n    useContext: readContext,\n    useEffect: updateEffect,\n    useImperativeHandle: updateImperativeHandle,\n    useInsertionEffect: updateInsertionEffect,\n    useLayoutEffect: updateLayoutEffect,\n    useMemo: updateMemo,\n    useReducer: rerenderReducer,\n    useRef: updateRef,\n    useState: function () {\n      return rerenderReducer(basicStateReducer);\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = updateWorkInProgressHook();\n      return null === currentHook\n        ? mountDeferredValueImpl(hook, value, initialValue)\n        : updateDeferredValueImpl(\n            hook,\n            currentHook.memoizedState,\n            value,\n            initialValue\n          );\n    },\n    useTransition: function () {\n      var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n        start = updateWorkInProgressHook().memoizedState;\n      return [\n        \"boolean\" === typeof booleanOrThenable\n          ? booleanOrThenable\n          : useThenable(booleanOrThenable),\n        start\n      ];\n    },\n    useSyncExternalStore: updateSyncExternalStore,\n    useId: updateId,\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: rerenderActionState,\n    useActionState: rerenderActionState,\n    useOptimistic: function (passthrough, reducer) {\n      var hook = updateWorkInProgressHook();\n      if (null !== currentHook)\n        return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n      hook.baseState = passthrough;\n      return [passthrough, hook.queue.dispatch];\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: updateRefresh,\n    useEffectEvent: updateEvent\n  };\nfunction applyDerivedStateFromProps(\n  workInProgress,\n  ctor,\n  getDerivedStateFromProps,\n  nextProps\n) {\n  ctor = workInProgress.memoizedState;\n  getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);\n  getDerivedStateFromProps =\n    null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps\n      ? ctor\n      : assign({}, ctor, getDerivedStateFromProps);\n  workInProgress.memoizedState = getDerivedStateFromProps;\n  0 === workInProgress.lanes &&\n    (workInProgress.updateQueue.baseState = getDerivedStateFromProps);\n}\nvar classComponentUpdater = {\n  enqueueSetState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueReplaceState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 1;\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueForceUpdate: function (inst, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 2;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    callback = enqueueUpdate(inst, update, lane);\n    null !== callback &&\n      (scheduleUpdateOnFiber(callback, inst, lane),\n      entangleTransitions(callback, inst, lane));\n  }\n};\nfunction checkShouldComponentUpdate(\n  workInProgress,\n  ctor,\n  oldProps,\n  newProps,\n  oldState,\n  newState,\n  nextContext\n) {\n  workInProgress = workInProgress.stateNode;\n  return \"function\" === typeof workInProgress.shouldComponentUpdate\n    ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)\n    : ctor.prototype && ctor.prototype.isPureReactComponent\n      ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n      : !0;\n}\nfunction callComponentWillReceiveProps(\n  workInProgress,\n  instance,\n  newProps,\n  nextContext\n) {\n  workInProgress = instance.state;\n  \"function\" === typeof instance.componentWillReceiveProps &&\n    instance.componentWillReceiveProps(newProps, nextContext);\n  \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n    instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n  instance.state !== workInProgress &&\n    classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n}\nfunction resolveClassComponentProps(Component, baseProps) {\n  var newProps = baseProps;\n  if (\"ref\" in baseProps) {\n    newProps = {};\n    for (var propName in baseProps)\n      \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n  }\n  if ((Component = Component.defaultProps)) {\n    newProps === baseProps && (newProps = assign({}, newProps));\n    for (var propName$77 in Component)\n      void 0 === newProps[propName$77] &&\n        (newProps[propName$77] = Component[propName$77]);\n  }\n  return newProps;\n}\nfunction defaultOnUncaughtError(error) {\n  reportGlobalError(error);\n}\nfunction defaultOnCaughtError(error) {\n  console.error(error);\n}\nfunction defaultOnRecoverableError(error) {\n  reportGlobalError(error);\n}\nfunction logUncaughtError(root, errorInfo) {\n  try {\n    var onUncaughtError = root.onUncaughtError;\n    onUncaughtError(errorInfo.value, { componentStack: errorInfo.stack });\n  } catch (e$78) {\n    setTimeout(function () {\n      throw e$78;\n    });\n  }\n}\nfunction logCaughtError(root, boundary, errorInfo) {\n  try {\n    var onCaughtError = root.onCaughtError;\n    onCaughtError(errorInfo.value, {\n      componentStack: errorInfo.stack,\n      errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n    });\n  } catch (e$79) {\n    setTimeout(function () {\n      throw e$79;\n    });\n  }\n}\nfunction createRootErrorUpdate(root, errorInfo, lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  lane.payload = { element: null };\n  lane.callback = function () {\n    logUncaughtError(root, errorInfo);\n  };\n  return lane;\n}\nfunction createClassErrorUpdate(lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  return lane;\n}\nfunction initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n  var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n  if (\"function\" === typeof getDerivedStateFromError) {\n    var error = errorInfo.value;\n    update.payload = function () {\n      return getDerivedStateFromError(error);\n    };\n    update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n    };\n  }\n  var inst = fiber.stateNode;\n  null !== inst &&\n    \"function\" === typeof inst.componentDidCatch &&\n    (update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n      \"function\" !== typeof getDerivedStateFromError &&\n        (null === legacyErrorBoundariesThatAlreadyFailed\n          ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n          : legacyErrorBoundariesThatAlreadyFailed.add(this));\n      var stack = errorInfo.stack;\n      this.componentDidCatch(errorInfo.value, {\n        componentStack: null !== stack ? stack : \"\"\n      });\n    });\n}\nfunction throwException(\n  root,\n  returnFiber,\n  sourceFiber,\n  value,\n  rootRenderLanes\n) {\n  sourceFiber.flags |= 32768;\n  if (\n    null !== value &&\n    \"object\" === typeof value &&\n    \"function\" === typeof value.then\n  ) {\n    returnFiber = sourceFiber.alternate;\n    null !== returnFiber &&\n      propagateParentContextChanges(\n        returnFiber,\n        sourceFiber,\n        rootRenderLanes,\n        !0\n      );\n    sourceFiber = suspenseHandlerStackCursor.current;\n    if (null !== sourceFiber) {\n      switch (sourceFiber.tag) {\n        case 31:\n        case 13:\n        case 19:\n          return (\n            null === shellBoundary\n              ? renderDidSuspendDelayIfPossible()\n              : null === sourceFiber.alternate &&\n                0 === workInProgressRootExitStatus &&\n                (workInProgressRootExitStatus = 3),\n            (sourceFiber.flags &= -257),\n            (sourceFiber.flags |= 65536),\n            (sourceFiber.lanes = rootRenderLanes),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? (sourceFiber.updateQueue = new Set([value]))\n                  : returnFiber.add(value),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n        case 22:\n          return (\n            (sourceFiber.flags |= 65536),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? ((returnFiber = {\n                      transitions: null,\n                      markerInstances: null,\n                      retryQueue: new Set([value])\n                    }),\n                    (sourceFiber.updateQueue = returnFiber))\n                  : ((sourceFiber = returnFiber.retryQueue),\n                    null === sourceFiber\n                      ? (returnFiber.retryQueue = new Set([value]))\n                      : sourceFiber.add(value)),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n      }\n      throw Error(formatProdErrorMessage(435, sourceFiber.tag));\n    }\n    attachPingListener(root, value, rootRenderLanes);\n    renderDidSuspendDelayIfPossible();\n    return !1;\n  }\n  if (isHydrating)\n    return (\n      (returnFiber = suspenseHandlerStackCursor.current),\n      null !== returnFiber\n        ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n          (returnFiber.flags |= 65536),\n          (returnFiber.lanes = rootRenderLanes),\n          value !== HydrationMismatchException &&\n            ((root = Error(formatProdErrorMessage(422), { cause: value })),\n            queueHydrationError(createCapturedValueAtFiber(root, sourceFiber))))\n        : (value !== HydrationMismatchException &&\n            ((returnFiber = Error(formatProdErrorMessage(423), {\n              cause: value\n            })),\n            queueHydrationError(\n              createCapturedValueAtFiber(returnFiber, sourceFiber)\n            )),\n          (root = root.current.alternate),\n          (root.flags |= 65536),\n          (rootRenderLanes &= -rootRenderLanes),\n          (root.lanes |= rootRenderLanes),\n          (value = createCapturedValueAtFiber(value, sourceFiber)),\n          (rootRenderLanes = createRootErrorUpdate(\n            root.stateNode,\n            value,\n            rootRenderLanes\n          )),\n          enqueueCapturedUpdate(root, rootRenderLanes),\n          4 !== workInProgressRootExitStatus &&\n            (workInProgressRootExitStatus = 2)),\n      !1\n    );\n  var wrapperError = Error(formatProdErrorMessage(520), { cause: value });\n  wrapperError = createCapturedValueAtFiber(wrapperError, sourceFiber);\n  null === workInProgressRootConcurrentErrors\n    ? (workInProgressRootConcurrentErrors = [wrapperError])\n    : workInProgressRootConcurrentErrors.push(wrapperError);\n  4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2);\n  if (null === returnFiber) return !0;\n  value = createCapturedValueAtFiber(value, sourceFiber);\n  sourceFiber = returnFiber;\n  do {\n    switch (sourceFiber.tag) {\n      case 3:\n        return (\n          (sourceFiber.flags |= 65536),\n          (root = rootRenderLanes & -rootRenderLanes),\n          (sourceFiber.lanes |= root),\n          (root = createRootErrorUpdate(sourceFiber.stateNode, value, root)),\n          enqueueCapturedUpdate(sourceFiber, root),\n          !1\n        );\n      case 1:\n        returnFiber = sourceFiber.type;\n        wrapperError = sourceFiber.stateNode;\n        if (\n          0 === (sourceFiber.flags & 128) &&\n          (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n            (null !== wrapperError &&\n              \"function\" === typeof wrapperError.componentDidCatch &&\n              (null === legacyErrorBoundariesThatAlreadyFailed ||\n                !legacyErrorBoundariesThatAlreadyFailed.has(wrapperError))))\n        )\n          return (\n            (sourceFiber.flags |= 65536),\n            (rootRenderLanes &= -rootRenderLanes),\n            (sourceFiber.lanes |= rootRenderLanes),\n            (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n            initializeClassErrorUpdate(\n              rootRenderLanes,\n              root,\n              sourceFiber,\n              value\n            ),\n            enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n            !1\n          );\n        break;\n      case 22:\n        if (null !== sourceFiber.memoizedState)\n          return (sourceFiber.flags |= 65536), !1;\n    }\n    sourceFiber = sourceFiber.return;\n  } while (null !== sourceFiber);\n  return !1;\n}\nvar SelectiveHydrationException = Error(formatProdErrorMessage(461)),\n  didReceiveUpdate = !1;\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n  workInProgress.child =\n    null === current\n      ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n      : reconcileChildFibers(\n          workInProgress,\n          current.child,\n          nextChildren,\n          renderLanes\n        );\n}\nfunction updateForwardRef(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  Component = Component.render;\n  var ref = workInProgress.ref;\n  if (\"ref\" in nextProps) {\n    var propsWithoutRef = {};\n    for (var key in nextProps)\n      \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n  } else propsWithoutRef = nextProps;\n  prepareToReadContext(workInProgress);\n  nextProps = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    propsWithoutRef,\n    ref,\n    renderLanes\n  );\n  key = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && key && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null === current) {\n    var type = Component.type;\n    if (\n      \"function\" === typeof type &&\n      !shouldConstruct(type) &&\n      void 0 === type.defaultProps &&\n      null === Component.compare\n    )\n      return (\n        (workInProgress.tag = 15),\n        (workInProgress.type = type),\n        updateSimpleMemoComponent(\n          current,\n          workInProgress,\n          type,\n          nextProps,\n          renderLanes\n        )\n      );\n    current = createFiberFromTypeAndProps(\n      Component.type,\n      null,\n      nextProps,\n      workInProgress,\n      workInProgress.mode,\n      renderLanes\n    );\n    current.ref = workInProgress.ref;\n    current.return = workInProgress;\n    return (workInProgress.child = current);\n  }\n  type = current.child;\n  if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n    var prevProps = type.memoizedProps;\n    Component = Component.compare;\n    Component = null !== Component ? Component : shallowEqual;\n    if (Component(prevProps, nextProps) && current.ref === workInProgress.ref)\n      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n  }\n  workInProgress.flags |= 1;\n  current = createWorkInProgress(type, nextProps);\n  current.ref = workInProgress.ref;\n  current.return = workInProgress;\n  return (workInProgress.child = current);\n}\nfunction updateSimpleMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null !== current) {\n    var prevProps = current.memoizedProps;\n    if (\n      shallowEqual(prevProps, nextProps) &&\n      current.ref === workInProgress.ref\n    )\n      if (\n        ((didReceiveUpdate = !1),\n        (workInProgress.pendingProps = nextProps = prevProps),\n        checkScheduledUpdateOrContext(current, renderLanes))\n      )\n        0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n      else\n        return (\n          (workInProgress.lanes = current.lanes),\n          bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n        );\n  }\n  return updateFunctionComponent(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    renderLanes\n  );\n}\nfunction updateOffscreenComponent(\n  current,\n  workInProgress,\n  renderLanes,\n  nextProps\n) {\n  var nextChildren = nextProps.children,\n    prevState = null !== current ? current.memoizedState : null;\n  null === current &&\n    null === workInProgress.stateNode &&\n    (workInProgress.stateNode = {\n      _visibility: 1,\n      _pendingMarkers: null,\n      _retryCache: null,\n      _transitions: null\n    });\n  if (\"hidden\" === nextProps.mode) {\n    if (0 !== (workInProgress.flags & 128)) {\n      prevState =\n        null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;\n      if (null !== current) {\n        nextProps = workInProgress.child = current.child;\n        for (nextChildren = 0; null !== nextProps; )\n          (nextChildren =\n            nextChildren | nextProps.lanes | nextProps.childLanes),\n            (nextProps = nextProps.sibling);\n        nextProps = nextChildren & ~prevState;\n      } else (nextProps = 0), (workInProgress.child = null);\n      return deferHiddenOffscreenComponent(\n        current,\n        workInProgress,\n        prevState,\n        renderLanes,\n        nextProps\n      );\n    }\n    if (0 !== (renderLanes & 536870912))\n      (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n        null !== current &&\n          pushTransition(\n            workInProgress,\n            null !== prevState ? prevState.cachePool : null\n          ),\n        null !== prevState\n          ? pushHiddenContext(workInProgress, prevState)\n          : reuseHiddenContextOnStack(),\n        pushOffscreenSuspenseHandler(workInProgress);\n    else\n      return (\n        (nextProps = workInProgress.lanes = 536870912),\n        deferHiddenOffscreenComponent(\n          current,\n          workInProgress,\n          null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,\n          renderLanes,\n          nextProps\n        )\n      );\n  } else\n    null !== prevState\n      ? (pushTransition(workInProgress, prevState.cachePool),\n        pushHiddenContext(workInProgress, prevState),\n        reuseSuspenseHandlerOnStack(),\n        (workInProgress.memoizedState = null))\n      : (null !== current && pushTransition(workInProgress, null),\n        reuseHiddenContextOnStack(),\n        reuseSuspenseHandlerOnStack());\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nfunction bailoutOffscreenComponent(current, workInProgress) {\n  (null !== current && 22 === current.tag) ||\n    null !== workInProgress.stateNode ||\n    (workInProgress.stateNode = {\n      _visibility: 1,\n      _pendingMarkers: null,\n      _retryCache: null,\n      _transitions: null\n    });\n  return workInProgress.sibling;\n}\nfunction deferHiddenOffscreenComponent(\n  current,\n  workInProgress,\n  nextBaseLanes,\n  renderLanes,\n  remainingChildLanes\n) {\n  var JSCompiler_inline_result = peekCacheFromPool();\n  JSCompiler_inline_result =\n    null === JSCompiler_inline_result\n      ? null\n      : { parent: CacheContext._currentValue, pool: JSCompiler_inline_result };\n  workInProgress.memoizedState = {\n    baseLanes: nextBaseLanes,\n    cachePool: JSCompiler_inline_result\n  };\n  null !== current && pushTransition(workInProgress, null);\n  reuseHiddenContextOnStack();\n  pushOffscreenSuspenseHandler(workInProgress);\n  null !== current &&\n    propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n  workInProgress.childLanes = remainingChildLanes;\n  return null;\n}\nfunction mountActivityChildren(workInProgress, nextProps) {\n  nextProps = mountWorkInProgressOffscreenFiber(\n    { mode: nextProps.mode, children: nextProps.children },\n    workInProgress.mode\n  );\n  nextProps.ref = workInProgress.ref;\n  workInProgress.child = nextProps;\n  nextProps.return = workInProgress;\n  return nextProps;\n}\nfunction retryActivityComponentWithoutHydrating(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n  current = mountActivityChildren(workInProgress, workInProgress.pendingProps);\n  current.flags |= 2;\n  popSuspenseHandler(workInProgress);\n  workInProgress.memoizedState = null;\n  return current;\n}\nfunction updateActivityComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    didSuspend = 0 !== (workInProgress.flags & 128);\n  workInProgress.flags &= -129;\n  if (null === current) {\n    if (isHydrating) {\n      if (\"hidden\" === nextProps.mode)\n        return (\n          (current = mountActivityChildren(workInProgress, nextProps)),\n          (workInProgress.lanes = 536870912),\n          (current.memoizedState = { baseLanes: 0, cachePool: null }),\n          bailoutOffscreenComponent(null, current)\n        );\n      pushDehydratedActivitySuspenseHandler(workInProgress);\n      (current = nextHydratableInstance)\n        ? ((current = canHydrateHydrationBoundary(\n            current,\n            rootOrSingletonContext\n          )),\n          (current = null !== current && \"&\" === current.data ? current : null),\n          null !== current &&\n            ((workInProgress.memoizedState = {\n              dehydrated: current,\n              treeContext:\n                null !== treeContextProvider\n                  ? { id: treeContextId, overflow: treeContextOverflow }\n                  : null,\n              retryLane: 536870912,\n              hydrationErrors: null\n            }),\n            (renderLanes = createFiberFromDehydratedFragment(current)),\n            (renderLanes.return = workInProgress),\n            (workInProgress.child = renderLanes),\n            (hydrationParentFiber = workInProgress),\n            (nextHydratableInstance = null)))\n        : (current = null);\n      if (null === current) throw throwOnHydrationMismatch(workInProgress);\n      workInProgress.lanes = 536870912;\n      return null;\n    }\n    return mountActivityChildren(workInProgress, nextProps);\n  }\n  var prevState = current.memoizedState;\n  if (null !== prevState) {\n    var dehydrated = prevState.dehydrated;\n    pushDehydratedActivitySuspenseHandler(workInProgress);\n    if (didSuspend)\n      if (workInProgress.flags & 256)\n        (workInProgress.flags &= -257),\n          (workInProgress = retryActivityComponentWithoutHydrating(\n            current,\n            workInProgress,\n            renderLanes\n          ));\n      else if (null !== workInProgress.memoizedState)\n        (workInProgress.child = current.child),\n          (workInProgress.flags |= 128),\n          (workInProgress = null);\n      else throw Error(formatProdErrorMessage(558));\n    else if (\n      (didReceiveUpdate ||\n        propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n      (didSuspend = 0 !== (renderLanes & current.childLanes)),\n      didReceiveUpdate || didSuspend)\n    ) {\n      if (null === currentTreeHiddenStackCursor.current) {\n        nextProps = workInProgressRoot;\n        if (\n          null !== nextProps &&\n          ((dehydrated = getBumpedLaneForHydration(nextProps, renderLanes)),\n          0 !== dehydrated && dehydrated !== prevState.retryLane)\n        )\n          throw (\n            ((prevState.retryLane = dehydrated),\n            enqueueConcurrentRenderForLane(current, dehydrated),\n            scheduleUpdateOnFiber(nextProps, current, dehydrated),\n            SelectiveHydrationException)\n          );\n        renderDidSuspendDelayIfPossible();\n      }\n      workInProgress = retryActivityComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else\n      (current = prevState.treeContext),\n        (nextHydratableInstance = getNextHydratable(dehydrated.nextSibling)),\n        (hydrationParentFiber = workInProgress),\n        (isHydrating = !0),\n        (hydrationErrors = null),\n        (rootOrSingletonContext = !1),\n        null !== current &&\n          restoreSuspendedTreeContext(workInProgress, current),\n        (workInProgress = mountActivityChildren(workInProgress, nextProps)),\n        (workInProgress.flags |= 134221824);\n    return workInProgress;\n  }\n  current = createWorkInProgress(current.child, {\n    mode: nextProps.mode,\n    children: nextProps.children\n  });\n  current.ref = workInProgress.ref;\n  workInProgress.child = current;\n  current.return = workInProgress;\n  return current;\n}\nfunction markRef(current, workInProgress) {\n  var ref = workInProgress.ref;\n  if (null === ref)\n    null !== current &&\n      null !== current.ref &&\n      (workInProgress.flags |= 4194816);\n  else {\n    if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n      throw Error(formatProdErrorMessage(284));\n    if (null === current || current.ref !== ref)\n      workInProgress.flags |= 4194816;\n  }\n}\nfunction updateFunctionComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  Component = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    void 0,\n    renderLanes\n  );\n  nextProps = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, Component, renderLanes);\n  return workInProgress.child;\n}\nfunction replayFunctionComponent(\n  current,\n  workInProgress,\n  nextProps,\n  Component,\n  secondArg,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  workInProgress.updateQueue = null;\n  nextProps = renderWithHooksAgain(\n    workInProgress,\n    Component,\n    nextProps,\n    secondArg\n  );\n  finishRenderingHooks(current);\n  Component = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && Component && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateClassComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  if (null === workInProgress.stateNode) {\n    var context = emptyContextObject,\n      contextType = Component.contextType;\n    \"object\" === typeof contextType &&\n      null !== contextType &&\n      (context = readContext(contextType));\n    context = new Component(nextProps, context);\n    workInProgress.memoizedState =\n      null !== context.state && void 0 !== context.state ? context.state : null;\n    context.updater = classComponentUpdater;\n    workInProgress.stateNode = context;\n    context._reactInternals = workInProgress;\n    context = workInProgress.stateNode;\n    context.props = nextProps;\n    context.state = workInProgress.memoizedState;\n    context.refs = {};\n    initializeUpdateQueue(workInProgress);\n    contextType = Component.contextType;\n    context.context =\n      \"object\" === typeof contextType && null !== contextType\n        ? readContext(contextType)\n        : emptyContextObject;\n    context.state = workInProgress.memoizedState;\n    contextType = Component.getDerivedStateFromProps;\n    \"function\" === typeof contextType &&\n      (applyDerivedStateFromProps(\n        workInProgress,\n        Component,\n        contextType,\n        nextProps\n      ),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof Component.getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate ||\n      (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n        \"function\" !== typeof context.componentWillMount) ||\n      ((contextType = context.state),\n      \"function\" === typeof context.componentWillMount &&\n        context.componentWillMount(),\n      \"function\" === typeof context.UNSAFE_componentWillMount &&\n        context.UNSAFE_componentWillMount(),\n      contextType !== context.state &&\n        classComponentUpdater.enqueueReplaceState(context, context.state, null),\n      processUpdateQueue(workInProgress, nextProps, context, renderLanes),\n      suspendIfUpdateReadFromEntangledAsyncAction(),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof context.componentDidMount &&\n      (workInProgress.flags |= 4194308);\n    nextProps = !0;\n  } else if (null === current) {\n    context = workInProgress.stateNode;\n    var unresolvedOldProps = workInProgress.memoizedProps,\n      oldProps = resolveClassComponentProps(Component, unresolvedOldProps);\n    context.props = oldProps;\n    var oldContext = context.context,\n      contextType$jscomp$0 = Component.contextType;\n    contextType = emptyContextObject;\n    \"object\" === typeof contextType$jscomp$0 &&\n      null !== contextType$jscomp$0 &&\n      (contextType = readContext(contextType$jscomp$0));\n    var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n    contextType$jscomp$0 =\n      \"function\" === typeof getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate;\n    unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n    contextType$jscomp$0 ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((unresolvedOldProps || oldContext !== contextType) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          contextType\n        ));\n    hasForceUpdate = !1;\n    var oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    oldContext = workInProgress.memoizedState;\n    unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n      ? (\"function\" === typeof getDerivedStateFromProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            getDerivedStateFromProps,\n            nextProps\n          ),\n          (oldContext = workInProgress.memoizedState)),\n        (oldProps =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            oldProps,\n            nextProps,\n            oldState,\n            oldContext,\n            contextType\n          ))\n          ? (contextType$jscomp$0 ||\n              (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n                \"function\" !== typeof context.componentWillMount) ||\n              (\"function\" === typeof context.componentWillMount &&\n                context.componentWillMount(),\n              \"function\" === typeof context.UNSAFE_componentWillMount &&\n                context.UNSAFE_componentWillMount()),\n            \"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308))\n          : (\"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = oldContext)),\n        (context.props = nextProps),\n        (context.state = oldContext),\n        (context.context = contextType),\n        (nextProps = oldProps))\n      : (\"function\" === typeof context.componentDidMount &&\n          (workInProgress.flags |= 4194308),\n        (nextProps = !1));\n  } else {\n    context = workInProgress.stateNode;\n    cloneUpdateQueue(current, workInProgress);\n    contextType = workInProgress.memoizedProps;\n    contextType$jscomp$0 = resolveClassComponentProps(Component, contextType);\n    context.props = contextType$jscomp$0;\n    getDerivedStateFromProps = workInProgress.pendingProps;\n    oldState = context.context;\n    oldContext = Component.contextType;\n    oldProps = emptyContextObject;\n    \"object\" === typeof oldContext &&\n      null !== oldContext &&\n      (oldProps = readContext(oldContext));\n    unresolvedOldProps = Component.getDerivedStateFromProps;\n    (oldContext =\n      \"function\" === typeof unresolvedOldProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate) ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((contextType !== getDerivedStateFromProps || oldState !== oldProps) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          oldProps\n        ));\n    hasForceUpdate = !1;\n    oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    var newState = workInProgress.memoizedState;\n    contextType !== getDerivedStateFromProps ||\n    oldState !== newState ||\n    hasForceUpdate ||\n    (null !== current &&\n      null !== current.dependencies &&\n      checkIfContextChanged(current.dependencies))\n      ? (\"function\" === typeof unresolvedOldProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            unresolvedOldProps,\n            nextProps\n          ),\n          (newState = workInProgress.memoizedState)),\n        (contextType$jscomp$0 =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            contextType$jscomp$0,\n            nextProps,\n            oldState,\n            newState,\n            oldProps\n          ) ||\n          (null !== current &&\n            null !== current.dependencies &&\n            checkIfContextChanged(current.dependencies)))\n          ? (oldContext ||\n              (\"function\" !== typeof context.UNSAFE_componentWillUpdate &&\n                \"function\" !== typeof context.componentWillUpdate) ||\n              (\"function\" === typeof context.componentWillUpdate &&\n                context.componentWillUpdate(nextProps, newState, oldProps),\n              \"function\" === typeof context.UNSAFE_componentWillUpdate &&\n                context.UNSAFE_componentWillUpdate(\n                  nextProps,\n                  newState,\n                  oldProps\n                )),\n            \"function\" === typeof context.componentDidUpdate &&\n              (workInProgress.flags |= 4),\n            \"function\" === typeof context.getSnapshotBeforeUpdate &&\n              (workInProgress.flags |= 1024))\n          : (\"function\" !== typeof context.componentDidUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 4),\n            \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 1024),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = newState)),\n        (context.props = nextProps),\n        (context.state = newState),\n        (context.context = oldProps),\n        (nextProps = contextType$jscomp$0))\n      : (\"function\" !== typeof context.componentDidUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 4),\n        \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 1024),\n        (nextProps = !1));\n  }\n  context = nextProps;\n  markRef(current, workInProgress);\n  nextProps = 0 !== (workInProgress.flags & 128);\n  context || nextProps\n    ? ((context = workInProgress.stateNode),\n      (Component =\n        nextProps && \"function\" !== typeof Component.getDerivedStateFromError\n          ? null\n          : context.render()),\n      (workInProgress.flags |= 1),\n      null !== current && nextProps\n        ? ((workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            current.child,\n            null,\n            renderLanes\n          )),\n          (workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            null,\n            Component,\n            renderLanes\n          )))\n        : reconcileChildren(current, workInProgress, Component, renderLanes),\n      (workInProgress.memoizedState = context.state),\n      (current = workInProgress.child))\n    : (current = bailoutOnAlreadyFinishedWork(\n        current,\n        workInProgress,\n        renderLanes\n      ));\n  return current;\n}\nfunction mountHostRootWithoutHydrating(\n  current,\n  workInProgress,\n  nextChildren,\n  renderLanes\n) {\n  resetHydrationState();\n  workInProgress.flags |= 256;\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nvar SUSPENDED_MARKER = {\n  dehydrated: null,\n  treeContext: null,\n  retryLane: 0,\n  hydrationErrors: null\n};\nfunction mountSuspenseOffscreenState(renderLanes) {\n  return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n}\nfunction getRemainingWorkInPrimaryTree(\n  current,\n  primaryTreeDidDefer,\n  renderLanes\n) {\n  current = null !== current ? current.childLanes & ~renderLanes : 0;\n  primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n  return current;\n}\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    showFallback = !1,\n    didSuspend = 0 !== (workInProgress.flags & 128),\n    JSCompiler_temp;\n  (JSCompiler_temp = didSuspend) ||\n    (JSCompiler_temp =\n      null !== current && null === current.memoizedState\n        ? !1\n        : 0 !== (suspenseStackCursor.current & 2));\n  JSCompiler_temp && ((showFallback = !0), (workInProgress.flags &= -129));\n  JSCompiler_temp = 0 !== (workInProgress.flags & 32);\n  workInProgress.flags &= -33;\n  if (null === current) {\n    if (isHydrating) {\n      showFallback\n        ? pushPrimaryTreeSuspenseHandler(workInProgress)\n        : reuseSuspenseHandlerOnStack();\n      (current = nextHydratableInstance)\n        ? ((current = canHydrateHydrationBoundary(\n            current,\n            rootOrSingletonContext\n          )),\n          (current = null !== current && \"&\" !== current.data ? current : null),\n          null !== current &&\n            ((workInProgress.memoizedState = {\n              dehydrated: current,\n              treeContext:\n                null !== treeContextProvider\n                  ? { id: treeContextId, overflow: treeContextOverflow }\n                  : null,\n              retryLane: 536870912,\n              hydrationErrors: null\n            }),\n            (renderLanes = createFiberFromDehydratedFragment(current)),\n            (renderLanes.return = workInProgress),\n            (workInProgress.child = renderLanes),\n            (hydrationParentFiber = workInProgress),\n            (nextHydratableInstance = null)))\n        : (current = null);\n      if (null === current) throw throwOnHydrationMismatch(workInProgress);\n      isSuspenseInstanceFallback(current)\n        ? (workInProgress.lanes = 32)\n        : (workInProgress.lanes = 536870912);\n      return null;\n    }\n    didSuspend = nextProps.children;\n    nextProps = nextProps.fallback;\n    if (showFallback)\n      return (\n        reuseSuspenseHandlerOnStack(),\n        (showFallback = workInProgress.mode),\n        (didSuspend = mountWorkInProgressOffscreenFiber(\n          { mode: \"hidden\", children: didSuspend },\n          showFallback\n        )),\n        (nextProps = createFiberFromFragment(\n          nextProps,\n          showFallback,\n          renderLanes,\n          null\n        )),\n        (didSuspend.return = workInProgress),\n        (nextProps.return = workInProgress),\n        (didSuspend.sibling = nextProps),\n        (workInProgress.child = didSuspend),\n        (nextProps = workInProgress.child),\n        (nextProps.memoizedState = mountSuspenseOffscreenState(renderLanes)),\n        (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n          current,\n          JSCompiler_temp,\n          renderLanes\n        )),\n        (workInProgress.memoizedState = SUSPENDED_MARKER),\n        bailoutOffscreenComponent(null, nextProps)\n      );\n    pushPrimaryTreeSuspenseHandler(workInProgress);\n    return mountSuspensePrimaryChildren(workInProgress, didSuspend);\n  }\n  var prevState = current.memoizedState;\n  if (null !== prevState) {\n    var dehydrated$96 = prevState.dehydrated;\n    if (null !== dehydrated$96)\n      return updateDehydratedSuspenseComponent(\n        current,\n        workInProgress,\n        didSuspend,\n        JSCompiler_temp,\n        nextProps,\n        dehydrated$96,\n        prevState,\n        renderLanes\n      );\n  }\n  if (showFallback)\n    return (\n      reuseSuspenseHandlerOnStack(),\n      (showFallback = nextProps.fallback),\n      (didSuspend = workInProgress.mode),\n      (prevState = current.child),\n      (dehydrated$96 = prevState.sibling),\n      (nextProps = createWorkInProgress(prevState, {\n        mode: \"hidden\",\n        children: nextProps.children\n      })),\n      (nextProps.subtreeFlags = prevState.subtreeFlags & 1206910976),\n      null !== dehydrated$96\n        ? (showFallback = createWorkInProgress(dehydrated$96, showFallback))\n        : ((showFallback = createFiberFromFragment(\n            showFallback,\n            didSuspend,\n            renderLanes,\n            null\n          )),\n          (showFallback.flags |= 2)),\n      (showFallback.return = workInProgress),\n      (nextProps.return = workInProgress),\n      (nextProps.sibling = showFallback),\n      (workInProgress.child = nextProps),\n      bailoutOffscreenComponent(null, nextProps),\n      (nextProps = workInProgress.child),\n      (showFallback = current.child.memoizedState),\n      null === showFallback\n        ? (showFallback = mountSuspenseOffscreenState(renderLanes))\n        : ((didSuspend = showFallback.cachePool),\n          null !== didSuspend\n            ? ((prevState = CacheContext._currentValue),\n              (didSuspend =\n                didSuspend.parent !== prevState\n                  ? { parent: prevState, pool: prevState }\n                  : didSuspend))\n            : (didSuspend = getSuspendedCache()),\n          (showFallback = {\n            baseLanes: showFallback.baseLanes | renderLanes,\n            cachePool: didSuspend\n          })),\n      (nextProps.memoizedState = showFallback),\n      (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n        current,\n        JSCompiler_temp,\n        renderLanes\n      )),\n      (workInProgress.memoizedState = SUSPENDED_MARKER),\n      bailoutOffscreenComponent(current.child, nextProps)\n    );\n  pushPrimaryTreeSuspenseHandler(workInProgress);\n  renderLanes = current.child;\n  current = renderLanes.sibling;\n  renderLanes = createWorkInProgress(renderLanes, {\n    mode: \"visible\",\n    children: nextProps.children\n  });\n  renderLanes.return = workInProgress;\n  renderLanes.sibling = null;\n  null !== current &&\n    ((JSCompiler_temp = workInProgress.deletions),\n    null === JSCompiler_temp\n      ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))\n      : JSCompiler_temp.push(current));\n  workInProgress.child = renderLanes;\n  workInProgress.memoizedState = null;\n  return renderLanes;\n}\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n  primaryChildren = mountWorkInProgressOffscreenFiber(\n    { mode: \"visible\", children: primaryChildren },\n    workInProgress.mode\n  );\n  primaryChildren.return = workInProgress;\n  return (workInProgress.child = primaryChildren);\n}\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n  offscreenProps = createFiberImplClass(22, offscreenProps, null, mode);\n  offscreenProps.lanes = 0;\n  return offscreenProps;\n}\nfunction retrySuspenseComponentWithoutHydrating(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n  current = mountSuspensePrimaryChildren(\n    workInProgress,\n    workInProgress.pendingProps.children\n  );\n  current.flags |= 2;\n  workInProgress.memoizedState = null;\n  return current;\n}\nfunction updateDehydratedSuspenseComponent(\n  current,\n  workInProgress,\n  didSuspend,\n  didPrimaryChildrenDefer,\n  nextProps,\n  suspenseInstance,\n  suspenseState,\n  renderLanes\n) {\n  if (didSuspend) {\n    if (workInProgress.flags & 256)\n      return (\n        pushPrimaryTreeSuspenseHandler(workInProgress),\n        (workInProgress.flags &= -257),\n        retrySuspenseComponentWithoutHydrating(\n          current,\n          workInProgress,\n          renderLanes\n        )\n      );\n    if (null !== workInProgress.memoizedState)\n      return (\n        reuseSuspenseHandlerOnStack(),\n        (workInProgress.child = current.child),\n        (workInProgress.flags |= 128),\n        null\n      );\n    reuseSuspenseHandlerOnStack();\n    suspenseInstance = nextProps.fallback;\n    suspenseState = workInProgress.mode;\n    nextProps = mountWorkInProgressOffscreenFiber(\n      { mode: \"visible\", children: nextProps.children },\n      suspenseState\n    );\n    suspenseInstance = createFiberFromFragment(\n      suspenseInstance,\n      suspenseState,\n      renderLanes,\n      null\n    );\n    suspenseInstance.flags |= 2;\n    nextProps.return = workInProgress;\n    suspenseInstance.return = workInProgress;\n    nextProps.sibling = suspenseInstance;\n    workInProgress.child = nextProps;\n    reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n    nextProps = workInProgress.child;\n    nextProps.memoizedState = mountSuspenseOffscreenState(renderLanes);\n    nextProps.childLanes = getRemainingWorkInPrimaryTree(\n      current,\n      didPrimaryChildrenDefer,\n      renderLanes\n    );\n    workInProgress.memoizedState = SUSPENDED_MARKER;\n    return bailoutOffscreenComponent(null, nextProps);\n  }\n  pushPrimaryTreeSuspenseHandler(workInProgress);\n  if (isSuspenseInstanceFallback(suspenseInstance)) {\n    didPrimaryChildrenDefer =\n      suspenseInstance.nextSibling && suspenseInstance.nextSibling.dataset;\n    if (didPrimaryChildrenDefer) var digest = didPrimaryChildrenDefer.dgst;\n    didPrimaryChildrenDefer = digest;\n    \"\" !== didPrimaryChildrenDefer &&\n      ((nextProps = Error(formatProdErrorMessage(419))),\n      (nextProps.stack = \"\"),\n      (nextProps.digest = didPrimaryChildrenDefer),\n      queueHydrationError({ value: nextProps, source: null, stack: null }));\n    return retrySuspenseComponentWithoutHydrating(\n      current,\n      workInProgress,\n      renderLanes\n    );\n  }\n  didReceiveUpdate ||\n    propagateParentContextChanges(current, workInProgress, renderLanes, !1);\n  didPrimaryChildrenDefer = 0 !== (renderLanes & current.childLanes);\n  if (didReceiveUpdate || didPrimaryChildrenDefer) {\n    if (null !== currentTreeHiddenStackCursor.current)\n      return retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    didPrimaryChildrenDefer = workInProgressRoot;\n    if (\n      null !== didPrimaryChildrenDefer &&\n      ((nextProps = getBumpedLaneForHydration(\n        didPrimaryChildrenDefer,\n        renderLanes\n      )),\n      0 !== nextProps && nextProps !== suspenseState.retryLane)\n    )\n      throw (\n        ((suspenseState.retryLane = nextProps),\n        enqueueConcurrentRenderForLane(current, nextProps),\n        scheduleUpdateOnFiber(didPrimaryChildrenDefer, current, nextProps),\n        SelectiveHydrationException)\n      );\n    isSuspenseInstancePending(suspenseInstance) ||\n      renderDidSuspendDelayIfPossible();\n    return retrySuspenseComponentWithoutHydrating(\n      current,\n      workInProgress,\n      renderLanes\n    );\n  }\n  if (isSuspenseInstancePending(suspenseInstance))\n    return (\n      (workInProgress.flags |= 192),\n      (workInProgress.child = current.child),\n      null\n    );\n  current = suspenseState.treeContext;\n  nextHydratableInstance = getNextHydratable(suspenseInstance.nextSibling);\n  hydrationParentFiber = workInProgress;\n  isHydrating = !0;\n  hydrationErrors = null;\n  rootOrSingletonContext = !1;\n  null !== current && restoreSuspendedTreeContext(workInProgress, current);\n  workInProgress = mountSuspensePrimaryChildren(\n    workInProgress,\n    nextProps.children\n  );\n  workInProgress.flags |= 134221824;\n  return workInProgress;\n}\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n  fiber.lanes |= renderLanes;\n  var alternate = fiber.alternate;\n  null !== alternate && (alternate.lanes |= renderLanes);\n  scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\nfunction findLastContentRow(firstChild) {\n  for (var lastContentRow = null; null !== firstChild; ) {\n    var currentRow = firstChild.alternate;\n    null !== currentRow &&\n      null === findFirstSuspended(currentRow) &&\n      (lastContentRow = firstChild);\n    firstChild = firstChild.sibling;\n  }\n  return lastContentRow;\n}\nfunction initSuspenseListRenderState(\n  workInProgress,\n  isBackwards,\n  tail,\n  lastContentRow,\n  tailMode,\n  treeForkCount\n) {\n  var renderState = workInProgress.memoizedState;\n  null === renderState\n    ? (workInProgress.memoizedState = {\n        isBackwards: isBackwards,\n        rendering: null,\n        renderingStartTime: 0,\n        last: lastContentRow,\n        tail: tail,\n        tailMode: tailMode,\n        treeForkCount: treeForkCount\n      })\n    : ((renderState.isBackwards = isBackwards),\n      (renderState.rendering = null),\n      (renderState.renderingStartTime = 0),\n      (renderState.last = lastContentRow),\n      (renderState.tail = tail),\n      (renderState.tailMode = tailMode),\n      (renderState.treeForkCount = treeForkCount));\n}\nfunction reverseChildren(fiber) {\n  var row = fiber.child;\n  for (fiber.child = null; null !== row; ) {\n    var nextRow = row.sibling;\n    row.sibling = fiber.child;\n    fiber.child = row;\n    row = nextRow;\n  }\n}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    revealOrder = nextProps.revealOrder,\n    tailMode = nextProps.tail;\n  nextProps = nextProps.children;\n  var suspenseContext = suspenseStackCursor.current;\n  if (workInProgress.flags & 128)\n    return pushSuspenseListContext(workInProgress, suspenseContext), null;\n  var shouldForceFallback = 0 !== (suspenseContext & 2);\n  shouldForceFallback\n    ? ((suspenseContext = (suspenseContext & 1) | 2),\n      (workInProgress.flags |= 128))\n    : (suspenseContext &= 1);\n  pushSuspenseListContext(workInProgress, suspenseContext);\n  \"backwards\" === revealOrder && null !== current\n    ? (reverseChildren(current),\n      reconcileChildren(current, workInProgress, nextProps, renderLanes),\n      reverseChildren(current))\n    : reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  nextProps = isHydrating ? treeForkCount : 0;\n  if (!shouldForceFallback && null !== current && 0 !== (current.flags & 128))\n    a: for (current = workInProgress.child; null !== current; ) {\n      if (13 === current.tag)\n        null !== current.memoizedState &&\n          scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n      else if (19 === current.tag)\n        scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n      else if (null !== current.child) {\n        current.child.return = current;\n        current = current.child;\n        continue;\n      }\n      if (current === workInProgress) break a;\n      for (; null === current.sibling; ) {\n        if (null === current.return || current.return === workInProgress)\n          break a;\n        current = current.return;\n      }\n      current.sibling.return = current.return;\n      current = current.sibling;\n    }\n  switch (revealOrder) {\n    case \"backwards\":\n      renderLanes = findLastContentRow(workInProgress.child);\n      null === renderLanes\n        ? ((revealOrder = workInProgress.child), (workInProgress.child = null))\n        : ((revealOrder = renderLanes.sibling),\n          (renderLanes.sibling = null),\n          reverseChildren(workInProgress));\n      initSuspenseListRenderState(\n        workInProgress,\n        !0,\n        revealOrder,\n        null,\n        tailMode,\n        nextProps\n      );\n      break;\n    case \"unstable_legacy-backwards\":\n      renderLanes = null;\n      revealOrder = workInProgress.child;\n      for (workInProgress.child = null; null !== revealOrder; ) {\n        current = revealOrder.alternate;\n        if (null !== current && null === findFirstSuspended(current)) {\n          workInProgress.child = revealOrder;\n          break;\n        }\n        current = revealOrder.sibling;\n        revealOrder.sibling = renderLanes;\n        renderLanes = revealOrder;\n        revealOrder = current;\n      }\n      initSuspenseListRenderState(\n        workInProgress,\n        !0,\n        renderLanes,\n        null,\n        tailMode,\n        nextProps\n      );\n      break;\n    case \"together\":\n      initSuspenseListRenderState(\n        workInProgress,\n        !1,\n        null,\n        null,\n        void 0,\n        nextProps\n      );\n      break;\n    case \"independent\":\n      workInProgress.memoizedState = null;\n      break;\n    default:\n      (renderLanes = findLastContentRow(workInProgress.child)),\n        null === renderLanes\n          ? ((revealOrder = workInProgress.child),\n            (workInProgress.child = null))\n          : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null)),\n        initSuspenseListRenderState(\n          workInProgress,\n          !1,\n          revealOrder,\n          renderLanes,\n          tailMode,\n          nextProps\n        );\n  }\n  return workInProgress.child;\n}\nfunction updateContextProvider(current, workInProgress, renderLanes) {\n  var newProps = workInProgress.pendingProps;\n  pushProvider(workInProgress, workInProgress.type, newProps.value);\n  reconcileChildren(current, workInProgress, newProps.children, renderLanes);\n  return workInProgress.child;\n}\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n  null !== current && (workInProgress.dependencies = current.dependencies);\n  workInProgressRootSkippedLanes |= workInProgress.lanes;\n  if (0 === (renderLanes & workInProgress.childLanes))\n    if (null !== current) {\n      if (\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        0 === (renderLanes & workInProgress.childLanes))\n      )\n        return null;\n    } else return null;\n  if (null !== current && workInProgress.child !== current.child)\n    throw Error(formatProdErrorMessage(153));\n  if (null !== workInProgress.child) {\n    current = workInProgress.child;\n    renderLanes = createWorkInProgress(current, current.pendingProps);\n    workInProgress.child = renderLanes;\n    for (renderLanes.return = workInProgress; null !== current.sibling; )\n      (current = current.sibling),\n        (renderLanes = renderLanes.sibling =\n          createWorkInProgress(current, current.pendingProps)),\n        (renderLanes.return = workInProgress);\n    renderLanes.sibling = null;\n  }\n  return workInProgress.child;\n}\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n  if (0 !== (current.lanes & renderLanes)) return !0;\n  current = current.dependencies;\n  return null !== current && checkIfContextChanged(current) ? !0 : !1;\n}\nfunction attemptEarlyBailoutIfNoScheduledUpdate(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  switch (workInProgress.tag) {\n    case 3:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n      resetHydrationState();\n      break;\n    case 27:\n    case 5:\n      pushHostContext(workInProgress);\n      break;\n    case 4:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      break;\n    case 10:\n      pushProvider(\n        workInProgress,\n        workInProgress.type,\n        workInProgress.memoizedProps.value\n      );\n      break;\n    case 31:\n      if (null !== workInProgress.memoizedState)\n        return (\n          (workInProgress.flags |= 128),\n          pushDehydratedActivitySuspenseHandler(workInProgress),\n          null\n        );\n      break;\n    case 13:\n      var state$108 = workInProgress.memoizedState;\n      if (null !== state$108) {\n        if (null !== state$108.dehydrated)\n          return (\n            pushPrimaryTreeSuspenseHandler(workInProgress),\n            (workInProgress.flags |= 128),\n            null\n          );\n        state$108 = propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        );\n        var primaryChildLanes = workInProgress.child.childLanes;\n        if (state$108 || 0 !== (renderLanes & primaryChildLanes))\n          return updateSuspenseComponent(current, workInProgress, renderLanes);\n        pushPrimaryTreeSuspenseHandler(workInProgress);\n        current = bailoutOnAlreadyFinishedWork(\n          current,\n          workInProgress,\n          renderLanes\n        );\n        return null !== current ? current.sibling : null;\n      }\n      pushPrimaryTreeSuspenseHandler(workInProgress);\n      break;\n    case 19:\n      if (workInProgress.flags & 128)\n        return updateSuspenseListComponent(\n          current,\n          workInProgress,\n          renderLanes\n        );\n      primaryChildLanes = 0 !== (current.flags & 128);\n      state$108 = 0 !== (renderLanes & workInProgress.childLanes);\n      state$108 ||\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        (state$108 = 0 !== (renderLanes & workInProgress.childLanes)));\n      if (primaryChildLanes) {\n        if (state$108)\n          return updateSuspenseListComponent(\n            current,\n            workInProgress,\n            renderLanes\n          );\n        workInProgress.flags |= 128;\n      }\n      primaryChildLanes = workInProgress.memoizedState;\n      null !== primaryChildLanes &&\n        ((primaryChildLanes.rendering = null),\n        (primaryChildLanes.tail = null),\n        (primaryChildLanes.lastEffect = null));\n      pushSuspenseListContext(workInProgress, suspenseStackCursor.current);\n      if (state$108) break;\n      else return null;\n    case 22:\n      return (\n        (workInProgress.lanes = 0),\n        updateOffscreenComponent(\n          current,\n          workInProgress,\n          renderLanes,\n          workInProgress.pendingProps\n        )\n      );\n    case 24:\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n  }\n  return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\nfunction beginWork(current, workInProgress, renderLanes) {\n  if (null !== current)\n    if (current.memoizedProps !== workInProgress.pendingProps)\n      didReceiveUpdate = !0;\n    else {\n      if (\n        !checkScheduledUpdateOrContext(current, renderLanes) &&\n        0 === (workInProgress.flags & 128)\n      )\n        return (\n          (didReceiveUpdate = !1),\n          attemptEarlyBailoutIfNoScheduledUpdate(\n            current,\n            workInProgress,\n            renderLanes\n          )\n        );\n      didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n    }\n  else\n    (didReceiveUpdate = !1),\n      isHydrating &&\n        0 !== (workInProgress.flags & 1048576) &&\n        pushTreeId(workInProgress, treeForkCount, workInProgress.index);\n  workInProgress.lanes = 0;\n  switch (workInProgress.tag) {\n    case 16:\n      a: {\n        var props = workInProgress.pendingProps;\n        current = resolveLazy(workInProgress.elementType);\n        workInProgress.type = current;\n        if (\"function\" === typeof current)\n          shouldConstruct(current)\n            ? ((props = resolveClassComponentProps(current, props)),\n              (workInProgress.tag = 1),\n              (workInProgress = updateClassComponent(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              )))\n            : ((workInProgress.tag = 0),\n              (workInProgress = updateFunctionComponent(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              )));\n        else {\n          if (void 0 !== current && null !== current) {\n            var $$typeof = current.$$typeof;\n            if ($$typeof === REACT_FORWARD_REF_TYPE) {\n              workInProgress.tag = 11;\n              workInProgress = updateForwardRef(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              );\n              break a;\n            } else if ($$typeof === REACT_MEMO_TYPE) {\n              workInProgress.tag = 14;\n              workInProgress = updateMemoComponent(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              );\n              break a;\n            } else if ($$typeof === REACT_CONTEXT_TYPE) {\n              workInProgress.tag = 10;\n              workInProgress.type = current;\n              workInProgress = updateContextProvider(\n                null,\n                workInProgress,\n                renderLanes\n              );\n              break a;\n            }\n          }\n          workInProgress = getComponentNameFromType(current) || current;\n          throw Error(formatProdErrorMessage(306, workInProgress, \"\"));\n        }\n      }\n      return workInProgress;\n    case 0:\n      return updateFunctionComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 1:\n      return (\n        (props = workInProgress.type),\n        ($$typeof = resolveClassComponentProps(\n          props,\n          workInProgress.pendingProps\n        )),\n        updateClassComponent(\n          current,\n          workInProgress,\n          props,\n          $$typeof,\n          renderLanes\n        )\n      );\n    case 3:\n      a: {\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        );\n        if (null === current) throw Error(formatProdErrorMessage(387));\n        props = workInProgress.pendingProps;\n        var prevState = workInProgress.memoizedState;\n        $$typeof = prevState.element;\n        cloneUpdateQueue(current, workInProgress);\n        processUpdateQueue(workInProgress, props, null, renderLanes);\n        var nextState = workInProgress.memoizedState;\n        props = nextState.cache;\n        pushProvider(workInProgress, CacheContext, props);\n        props !== prevState.cache &&\n          propagateContextChanges(\n            workInProgress,\n            [CacheContext],\n            renderLanes,\n            !0\n          );\n        suspendIfUpdateReadFromEntangledAsyncAction();\n        props = nextState.element;\n        if (prevState.isDehydrated)\n          if (\n            ((prevState = {\n              element: props,\n              isDehydrated: !1,\n              cache: nextState.cache\n            }),\n            (workInProgress.updateQueue.baseState = prevState),\n            (workInProgress.memoizedState = prevState),\n            workInProgress.flags & 256)\n          ) {\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              props,\n              renderLanes\n            );\n            break a;\n          } else if (props !== $$typeof) {\n            $$typeof = createCapturedValueAtFiber(\n              Error(formatProdErrorMessage(424)),\n              workInProgress\n            );\n            queueHydrationError($$typeof);\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              props,\n              renderLanes\n            );\n            break a;\n          } else {\n            current = workInProgress.stateNode.containerInfo;\n            switch (current.nodeType) {\n              case 9:\n                current = current.body;\n                break;\n              default:\n                current =\n                  \"HTML\" === current.nodeName\n                    ? current.ownerDocument.body\n                    : current;\n            }\n            nextHydratableInstance = getNextHydratable(current.firstChild);\n            hydrationParentFiber = workInProgress;\n            isHydrating = !0;\n            hydrationErrors = null;\n            rootOrSingletonContext = !0;\n            renderLanes = mountChildFibers(\n              workInProgress,\n              null,\n              props,\n              renderLanes\n            );\n            for (workInProgress.child = renderLanes; renderLanes; )\n              (renderLanes.flags = (renderLanes.flags & -3) | 134221824),\n                (renderLanes = renderLanes.sibling);\n          }\n        else {\n          resetHydrationState();\n          if (props === $$typeof) {\n            workInProgress = bailoutOnAlreadyFinishedWork(\n              current,\n              workInProgress,\n              renderLanes\n            );\n            break a;\n          }\n          reconcileChildren(current, workInProgress, props, renderLanes);\n        }\n        workInProgress = workInProgress.child;\n      }\n      return workInProgress;\n    case 26:\n      return (\n        markRef(current, workInProgress),\n        null === current\n          ? (renderLanes = getResource(\n              workInProgress.type,\n              null,\n              workInProgress.pendingProps,\n              null\n            ))\n            ? (workInProgress.memoizedState = renderLanes)\n            : isHydrating ||\n              (workInProgress.stateNode = createHoistableInstance(\n                workInProgress.type,\n                workInProgress.pendingProps,\n                rootInstanceStackCursor.current,\n                workInProgress\n              ))\n          : (workInProgress.memoizedState = getResource(\n              workInProgress.type,\n              current.memoizedProps,\n              workInProgress.pendingProps,\n              current.memoizedState\n            )),\n        null\n      );\n    case 27:\n      return (\n        pushHostContext(workInProgress),\n        null === current &&\n          isHydrating &&\n          ((props = workInProgress.stateNode =\n            resolveSingletonInstance(\n              workInProgress.type,\n              workInProgress.pendingProps,\n              rootInstanceStackCursor.current\n            )),\n          (hydrationParentFiber = workInProgress),\n          (rootOrSingletonContext = !0),\n          ($$typeof = nextHydratableInstance),\n          isSingletonScope(workInProgress.type)\n            ? ((previousHydratableOnEnteringScopedSingleton = $$typeof),\n              (nextHydratableInstance = getNextHydratable(props.firstChild)))\n            : (nextHydratableInstance = $$typeof)),\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        markRef(current, workInProgress),\n        null === current && (workInProgress.flags |= 4194304),\n        workInProgress.child\n      );\n    case 5:\n      if (null === current && isHydrating) {\n        if (($$typeof = props = nextHydratableInstance))\n          (props = canHydrateInstance(\n            props,\n            workInProgress.type,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== props\n              ? ((workInProgress.stateNode = props),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = getNextHydratable(props.firstChild)),\n                (rootOrSingletonContext = !1),\n                ($$typeof = !0))\n              : ($$typeof = !1);\n        $$typeof || throwOnHydrationMismatch(workInProgress);\n      }\n      pushHostContext(workInProgress);\n      $$typeof = workInProgress.type;\n      prevState = workInProgress.pendingProps;\n      nextState = null !== current ? current.memoizedProps : null;\n      props = prevState.children;\n      shouldSetTextContent($$typeof, prevState)\n        ? (props = null)\n        : null !== nextState &&\n          shouldSetTextContent($$typeof, nextState) &&\n          (workInProgress.flags |= 32);\n      null !== workInProgress.memoizedState &&\n        (($$typeof = renderWithHooks(\n          current,\n          workInProgress,\n          TransitionAwareHostComponent,\n          null,\n          null,\n          renderLanes\n        )),\n        (HostTransitionContext._currentValue = $$typeof));\n      markRef(current, workInProgress);\n      reconcileChildren(current, workInProgress, props, renderLanes);\n      return workInProgress.child;\n    case 6:\n      if (null === current && isHydrating) {\n        if ((current = renderLanes = nextHydratableInstance))\n          (renderLanes = canHydrateTextInstance(\n            renderLanes,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== renderLanes\n              ? ((workInProgress.stateNode = renderLanes),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = null),\n                (current = !0))\n              : (current = !1);\n        current || throwOnHydrationMismatch(workInProgress);\n      }\n      return null;\n    case 13:\n      return updateSuspenseComponent(current, workInProgress, renderLanes);\n    case 4:\n      return (\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        ),\n        (props = workInProgress.pendingProps),\n        null === current\n          ? (workInProgress.child = reconcileChildFibers(\n              workInProgress,\n              null,\n              props,\n              renderLanes\n            ))\n          : reconcileChildren(current, workInProgress, props, renderLanes),\n        workInProgress.child\n      );\n    case 11:\n      return updateForwardRef(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 7:\n      return (\n        (props = workInProgress.pendingProps),\n        markRef(current, workInProgress),\n        reconcileChildren(current, workInProgress, props, renderLanes),\n        workInProgress.child\n      );\n    case 8:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 12:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 10:\n      return updateContextProvider(current, workInProgress, renderLanes);\n    case 9:\n      return (\n        ($$typeof = workInProgress.type._context),\n        (props = workInProgress.pendingProps.children),\n        prepareToReadContext(workInProgress),\n        ($$typeof = readContext($$typeof)),\n        (props = props($$typeof)),\n        (workInProgress.flags |= 1),\n        reconcileChildren(current, workInProgress, props, renderLanes),\n        workInProgress.child\n      );\n    case 14:\n      return updateMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 15:\n      return updateSimpleMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 19:\n      return updateSuspenseListComponent(current, workInProgress, renderLanes);\n    case 31:\n      return updateActivityComponent(current, workInProgress, renderLanes);\n    case 22:\n      return updateOffscreenComponent(\n        current,\n        workInProgress,\n        renderLanes,\n        workInProgress.pendingProps\n      );\n    case 24:\n      return (\n        prepareToReadContext(workInProgress),\n        (props = readContext(CacheContext)),\n        null === current\n          ? (($$typeof = peekCacheFromPool()),\n            null === $$typeof &&\n              (($$typeof = workInProgressRoot),\n              (prevState = createCache()),\n              ($$typeof.pooledCache = prevState),\n              prevState.refCount++,\n              null !== prevState && ($$typeof.pooledCacheLanes |= renderLanes),\n              ($$typeof = prevState)),\n            (workInProgress.memoizedState = { parent: props, cache: $$typeof }),\n            initializeUpdateQueue(workInProgress),\n            pushProvider(workInProgress, CacheContext, $$typeof))\n          : (0 !== (current.lanes & renderLanes) &&\n              (cloneUpdateQueue(current, workInProgress),\n              processUpdateQueue(workInProgress, null, null, renderLanes),\n              suspendIfUpdateReadFromEntangledAsyncAction()),\n            ($$typeof = current.memoizedState),\n            (prevState = workInProgress.memoizedState),\n            $$typeof.parent !== props\n              ? (($$typeof = { parent: props, cache: props }),\n                (workInProgress.memoizedState = $$typeof),\n                0 === workInProgress.lanes &&\n                  (workInProgress.memoizedState =\n                    workInProgress.updateQueue.baseState =\n                      $$typeof),\n                pushProvider(workInProgress, CacheContext, props))\n              : ((props = prevState.cache),\n                pushProvider(workInProgress, CacheContext, props),\n                props !== $$typeof.cache &&\n                  propagateContextChanges(\n                    workInProgress,\n                    [CacheContext],\n                    renderLanes,\n                    !0\n                  ))),\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 30:\n      return (\n        null === workInProgress.stateNode &&\n          (workInProgress.stateNode = {\n            autoName: null,\n            paired: null,\n            clones: null,\n            ref: null\n          }),\n        (props = workInProgress.pendingProps),\n        null != props.name && \"auto\" !== props.name\n          ? (workInProgress.flags |= null === current ? 18882560 : 18874368)\n          : isHydrating && pushMaterializedTreeId(workInProgress),\n        null !== current && current.memoizedProps.name !== props.name\n          ? (workInProgress.flags |= 4194816)\n          : markRef(current, workInProgress),\n        reconcileChildren(current, workInProgress, props.children, renderLanes),\n        workInProgress.child\n      );\n    case 29:\n      throw workInProgress.pendingProps;\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction markUpdate(workInProgress) {\n  workInProgress.flags |= 4;\n}\nfunction preloadInstanceAndSuspendIfNeeded(\n  workInProgress,\n  type,\n  oldProps,\n  newProps,\n  renderLanes\n) {\n  var JSCompiler_temp;\n  if ((JSCompiler_temp = 0 !== (workInProgress.mode & 32)))\n    JSCompiler_temp =\n      null === oldProps\n        ? maySuspendCommit(type, newProps)\n        : maySuspendCommit(type, newProps) &&\n          (newProps.src !== oldProps.src ||\n            newProps.srcSet !== oldProps.srcSet);\n  if (JSCompiler_temp) {\n    if (\n      ((workInProgress.flags |= 16777216),\n      (renderLanes & 335544128) === renderLanes)\n    )\n      if (workInProgress.stateNode.complete) workInProgress.flags |= 8192;\n      else if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n      else\n        throw (\n          ((suspendedThenable = noopSuspenseyCommitThenable),\n          SuspenseyCommitException)\n        );\n  } else workInProgress.flags &= -16777217;\n}\nfunction preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n  if (\"stylesheet\" !== resource.type || 0 !== (resource.state.loading & 4))\n    workInProgress.flags &= -16777217;\n  else if (((workInProgress.flags |= 16777216), !preloadResource(resource)))\n    if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n    else\n      throw (\n        ((suspendedThenable = noopSuspenseyCommitThenable),\n        SuspenseyCommitException)\n      );\n}\nfunction scheduleRetryEffect(workInProgress, retryQueue) {\n  null !== retryQueue && (workInProgress.flags |= 4);\n  workInProgress.flags & 16384 &&\n    ((retryQueue =\n      22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n    (workInProgress.lanes |= retryQueue),\n    (workInProgressSuspendedRetryLanes |= retryQueue));\n}\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n  if (!isHydrating)\n    switch (renderState.tailMode) {\n      case \"visible\":\n        break;\n      case \"collapsed\":\n        for (\n          var tailNode = renderState.tail, lastTailNode = null;\n          null !== tailNode;\n\n        )\n          null !== tailNode.alternate && (lastTailNode = tailNode),\n            (tailNode = tailNode.sibling);\n        null === lastTailNode\n          ? hasRenderedATailFallback || null === renderState.tail\n            ? (renderState.tail = null)\n            : (renderState.tail.sibling = null)\n          : (lastTailNode.sibling = null);\n        break;\n      default:\n        hasRenderedATailFallback = renderState.tail;\n        for (tailNode = null; null !== hasRenderedATailFallback; )\n          null !== hasRenderedATailFallback.alternate &&\n            (tailNode = hasRenderedATailFallback),\n            (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n        null === tailNode\n          ? (renderState.tail = null)\n          : (tailNode.sibling = null);\n    }\n}\nfunction bubbleProperties(completedWork) {\n  var didBailout =\n      null !== completedWork.alternate &&\n      completedWork.alternate.child === completedWork.child,\n    newChildLanes = 0,\n    subtreeFlags = 0;\n  if (didBailout)\n    for (var child$113 = completedWork.child; null !== child$113; )\n      (newChildLanes |= child$113.lanes | child$113.childLanes),\n        (subtreeFlags |= child$113.subtreeFlags & 1206910976),\n        (subtreeFlags |= child$113.flags & 1206910976),\n        (child$113.return = completedWork),\n        (child$113 = child$113.sibling);\n  else\n    for (child$113 = completedWork.child; null !== child$113; )\n      (newChildLanes |= child$113.lanes | child$113.childLanes),\n        (subtreeFlags |= child$113.subtreeFlags),\n        (subtreeFlags |= child$113.flags),\n        (child$113.return = completedWork),\n        (child$113 = child$113.sibling);\n  completedWork.subtreeFlags |= subtreeFlags;\n  completedWork.childLanes = newChildLanes;\n  return didBailout;\n}\nfunction completeWork(current, workInProgress, renderLanes) {\n  var newProps = workInProgress.pendingProps;\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 16:\n    case 15:\n    case 0:\n    case 11:\n    case 7:\n    case 8:\n    case 12:\n    case 9:\n    case 14:\n      return bubbleProperties(workInProgress), null;\n    case 1:\n      return bubbleProperties(workInProgress), null;\n    case 3:\n      renderLanes = workInProgress.stateNode;\n      newProps = null;\n      null !== current && (newProps = current.memoizedState.cache);\n      workInProgress.memoizedState.cache !== newProps &&\n        (workInProgress.flags |= 2048);\n      popProvider(CacheContext);\n      popHostContainer();\n      renderLanes.pendingContext &&\n        ((renderLanes.context = renderLanes.pendingContext),\n        (renderLanes.pendingContext = null));\n      if (null === current || null === current.child)\n        popHydrationState(workInProgress)\n          ? markUpdate(workInProgress)\n          : null === current ||\n            (current.memoizedState.isDehydrated &&\n              0 === (workInProgress.flags & 256)) ||\n            ((workInProgress.flags |= 1024),\n            upgradeHydrationErrorsToRecoverable());\n      bubbleProperties(workInProgress);\n      return null;\n    case 26:\n      var type = workInProgress.type,\n        nextResource = workInProgress.memoizedState;\n      null === current\n        ? (markUpdate(workInProgress),\n          null !== nextResource\n            ? (bubbleProperties(workInProgress),\n              preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n            : (bubbleProperties(workInProgress),\n              preloadInstanceAndSuspendIfNeeded(\n                workInProgress,\n                type,\n                null,\n                newProps,\n                renderLanes\n              )))\n        : nextResource\n          ? nextResource !== current.memoizedState\n            ? (markUpdate(workInProgress),\n              bubbleProperties(workInProgress),\n              preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n            : (bubbleProperties(workInProgress),\n              (workInProgress.flags &= -16777217))\n          : ((current = current.memoizedProps),\n            current !== newProps && markUpdate(workInProgress),\n            bubbleProperties(workInProgress),\n            preloadInstanceAndSuspendIfNeeded(\n              workInProgress,\n              type,\n              current,\n              newProps,\n              renderLanes\n            ));\n      return null;\n    case 27:\n      popHostContext(workInProgress);\n      renderLanes = rootInstanceStackCursor.current;\n      type = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          workInProgress.subtreeFlags &= -33554433;\n          return null;\n        }\n        current = contextStackCursor.current;\n        popHydrationState(workInProgress)\n          ? prepareToHydrateHostInstance(workInProgress, current)\n          : ((current = resolveSingletonInstance(type, newProps, renderLanes)),\n            (workInProgress.stateNode = current),\n            markUpdate(workInProgress));\n      }\n      bubbleProperties(workInProgress);\n      workInProgress.subtreeFlags &= -33554433;\n      return null;\n    case 5:\n      popHostContext(workInProgress);\n      type = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          workInProgress.subtreeFlags &= -33554433;\n          return null;\n        }\n        nextResource = contextStackCursor.current;\n        if (popHydrationState(workInProgress))\n          prepareToHydrateHostInstance(workInProgress, nextResource);\n        else {\n          var ownerDocument = getOwnerDocumentFromRootContainer(\n            rootInstanceStackCursor.current\n          );\n          switch (nextResource) {\n            case 1:\n              nextResource = ownerDocument.createElementNS(\n                \"http://www.w3.org/2000/svg\",\n                type\n              );\n              break;\n            case 2:\n              nextResource = ownerDocument.createElementNS(\n                \"http://www.w3.org/1998/Math/MathML\",\n                type\n              );\n              break;\n            default:\n              switch (type) {\n                case \"svg\":\n                  nextResource = ownerDocument.createElementNS(\n                    \"http://www.w3.org/2000/svg\",\n                    type\n                  );\n                  break;\n                case \"math\":\n                  nextResource = ownerDocument.createElementNS(\n                    \"http://www.w3.org/1998/Math/MathML\",\n                    type\n                  );\n                  break;\n                case \"script\":\n                  nextResource = ownerDocument.createElement(\"div\");\n                  nextResource.innerHTML = \"<script>\\x3c/script>\";\n                  nextResource = nextResource.removeChild(\n                    nextResource.firstChild\n                  );\n                  break;\n                case \"select\":\n                  nextResource =\n                    \"string\" === typeof newProps.is\n                      ? ownerDocument.createElement(\"select\", {\n                          is: newProps.is\n                        })\n                      : ownerDocument.createElement(\"select\");\n                  newProps.multiple\n                    ? (nextResource.multiple = !0)\n                    : newProps.size && (nextResource.size = newProps.size);\n                  break;\n                default:\n                  nextResource =\n                    \"string\" === typeof newProps.is\n                      ? ownerDocument.createElement(type, { is: newProps.is })\n                      : ownerDocument.createElement(type);\n              }\n          }\n          nextResource[internalInstanceKey] = workInProgress;\n          nextResource[internalPropsKey] = newProps;\n          a: for (\n            ownerDocument = workInProgress.child;\n            null !== ownerDocument;\n\n          ) {\n            if (5 === ownerDocument.tag || 6 === ownerDocument.tag)\n              nextResource.appendChild(ownerDocument.stateNode);\n            else if (\n              4 !== ownerDocument.tag &&\n              27 !== ownerDocument.tag &&\n              null !== ownerDocument.child\n            ) {\n              ownerDocument.child.return = ownerDocument;\n              ownerDocument = ownerDocument.child;\n              continue;\n            }\n            if (ownerDocument === workInProgress) break a;\n            for (; null === ownerDocument.sibling; ) {\n              if (\n                null === ownerDocument.return ||\n                ownerDocument.return === workInProgress\n              )\n                break a;\n              ownerDocument = ownerDocument.return;\n            }\n            ownerDocument.sibling.return = ownerDocument.return;\n            ownerDocument = ownerDocument.sibling;\n          }\n          workInProgress.stateNode = nextResource;\n          a: switch (\n            (setInitialProperties(nextResource, type, newProps), type)\n          ) {\n            case \"button\":\n            case \"input\":\n            case \"select\":\n            case \"textarea\":\n              newProps = !!newProps.autoFocus;\n              break a;\n            case \"img\":\n              newProps = !0;\n              break a;\n            default:\n              newProps = !1;\n          }\n          newProps && markUpdate(workInProgress);\n        }\n      }\n      bubbleProperties(workInProgress);\n      workInProgress.subtreeFlags &= -33554433;\n      preloadInstanceAndSuspendIfNeeded(\n        workInProgress,\n        workInProgress.type,\n        null === current ? null : current.memoizedProps,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n      return null;\n    case 6:\n      if (current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (\"string\" !== typeof newProps && null === workInProgress.stateNode)\n          throw Error(formatProdErrorMessage(166));\n        current = rootInstanceStackCursor.current;\n        if (popHydrationState(workInProgress)) {\n          current = workInProgress.stateNode;\n          renderLanes = workInProgress.memoizedProps;\n          newProps = null;\n          type = hydrationParentFiber;\n          if (null !== type)\n            switch (type.tag) {\n              case 27:\n              case 5:\n                newProps = type.memoizedProps;\n            }\n          current[internalInstanceKey] = workInProgress;\n          current =\n            current.nodeValue === renderLanes ||\n            (null !== newProps && !0 === newProps.suppressHydrationWarning) ||\n            checkForUnmatchedText(current.nodeValue, renderLanes)\n              ? !0\n              : !1;\n          current || throwOnHydrationMismatch(workInProgress, !0);\n        } else\n          (current =\n            getOwnerDocumentFromRootContainer(current).createTextNode(\n              newProps\n            )),\n            (current[internalInstanceKey] = workInProgress),\n            (workInProgress.stateNode = current);\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 31:\n      renderLanes = workInProgress.memoizedState;\n      if (null === current || null !== current.memoizedState) {\n        newProps = popHydrationState(workInProgress);\n        if (null !== renderLanes) {\n          if (null === current) {\n            if (!newProps) throw Error(formatProdErrorMessage(318));\n            current = workInProgress.memoizedState;\n            current = null !== current ? current.dehydrated : null;\n            if (!current) throw Error(formatProdErrorMessage(557));\n            current[internalInstanceKey] = workInProgress;\n          } else\n            resetHydrationState(),\n              0 === (workInProgress.flags & 128) &&\n                (workInProgress.memoizedState = null),\n              (workInProgress.flags |= 4);\n          bubbleProperties(workInProgress);\n          current = !1;\n        } else\n          (renderLanes = upgradeHydrationErrorsToRecoverable()),\n            null !== current &&\n              null !== current.memoizedState &&\n              (current.memoizedState.hydrationErrors = renderLanes),\n            (current = !0);\n        if (!current) {\n          if (workInProgress.flags & 256)\n            return popSuspenseHandler(workInProgress), workInProgress;\n          popSuspenseHandler(workInProgress);\n          return null;\n        }\n        if (0 !== (workInProgress.flags & 128))\n          throw Error(formatProdErrorMessage(558));\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 13:\n      newProps = workInProgress.memoizedState;\n      if (\n        null === current ||\n        (null !== current.memoizedState &&\n          null !== current.memoizedState.dehydrated)\n      ) {\n        type = popHydrationState(workInProgress);\n        if (null !== newProps && null !== newProps.dehydrated) {\n          if (null === current) {\n            if (!type) throw Error(formatProdErrorMessage(318));\n            type = workInProgress.memoizedState;\n            type = null !== type ? type.dehydrated : null;\n            if (!type) throw Error(formatProdErrorMessage(317));\n            type[internalInstanceKey] = workInProgress;\n          } else\n            resetHydrationState(),\n              0 === (workInProgress.flags & 128) &&\n                (workInProgress.memoizedState = null),\n              (workInProgress.flags |= 4);\n          bubbleProperties(workInProgress);\n          type = !1;\n        } else\n          (type = upgradeHydrationErrorsToRecoverable()),\n            null !== current &&\n              null !== current.memoizedState &&\n              (current.memoizedState.hydrationErrors = type),\n            (type = !0);\n        if (!type) {\n          if (workInProgress.flags & 256)\n            return popSuspenseHandler(workInProgress), workInProgress;\n          popSuspenseHandler(workInProgress);\n          return null;\n        }\n      }\n      popSuspenseHandler(workInProgress);\n      if (0 !== (workInProgress.flags & 128))\n        return (workInProgress.lanes = renderLanes), workInProgress;\n      renderLanes = null !== newProps;\n      current = null !== current && null !== current.memoizedState;\n      renderLanes &&\n        ((newProps = workInProgress.child),\n        (type = null),\n        null !== newProps.alternate &&\n          null !== newProps.alternate.memoizedState &&\n          null !== newProps.alternate.memoizedState.cachePool &&\n          (type = newProps.alternate.memoizedState.cachePool.pool),\n        (nextResource = null),\n        null !== newProps.memoizedState &&\n          null !== newProps.memoizedState.cachePool &&\n          (nextResource = newProps.memoizedState.cachePool.pool),\n        nextResource !== type && (newProps.flags |= 2048));\n      renderLanes !== current &&\n        renderLanes &&\n        (workInProgress.child.flags |= 8192);\n      scheduleRetryEffect(workInProgress, workInProgress.updateQueue);\n      bubbleProperties(workInProgress);\n      return null;\n    case 4:\n      return (\n        popHostContainer(),\n        null === current &&\n          listenToAllSupportedEvents(workInProgress.stateNode.containerInfo),\n        (workInProgress.flags |= 67108864),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 10:\n      return (\n        popProvider(workInProgress.type), bubbleProperties(workInProgress), null\n      );\n    case 19:\n      popSuspenseListContext(workInProgress);\n      newProps = workInProgress.memoizedState;\n      if (null === newProps) return bubbleProperties(workInProgress), null;\n      type = 0 !== (workInProgress.flags & 128);\n      nextResource = newProps.rendering;\n      if (null === nextResource)\n        if (type) cutOffTailIfNeeded(newProps, !1);\n        else {\n          if (\n            0 !== workInProgressRootExitStatus ||\n            (null !== current && 0 !== (current.flags & 128))\n          )\n            for (current = workInProgress.child; null !== current; ) {\n              nextResource = findFirstSuspended(current);\n              if (null !== nextResource) {\n                workInProgress.flags |= 128;\n                cutOffTailIfNeeded(newProps, !1);\n                current = nextResource.updateQueue;\n                workInProgress.updateQueue = current;\n                scheduleRetryEffect(workInProgress, current);\n                workInProgress.subtreeFlags = 0;\n                current = renderLanes;\n                for (renderLanes = workInProgress.child; null !== renderLanes; )\n                  resetWorkInProgress(renderLanes, current),\n                    (renderLanes = renderLanes.sibling);\n                pushSuspenseListContext(\n                  workInProgress,\n                  (suspenseStackCursor.current & 1) | 2\n                );\n                isHydrating &&\n                  pushTreeFork(workInProgress, newProps.treeForkCount);\n                return workInProgress.child;\n              }\n              current = current.sibling;\n            }\n          null !== newProps.tail &&\n            now() > workInProgressRootRenderTargetTime &&\n            ((workInProgress.flags |= 128),\n            (type = !0),\n            cutOffTailIfNeeded(newProps, !1),\n            (workInProgress.lanes = 4194304));\n        }\n      else {\n        if (!type)\n          if (\n            ((current = findFirstSuspended(nextResource)), null !== current)\n          ) {\n            if (\n              ((workInProgress.flags |= 128),\n              (type = !0),\n              (current = current.updateQueue),\n              (workInProgress.updateQueue = current),\n              scheduleRetryEffect(workInProgress, current),\n              cutOffTailIfNeeded(newProps, !0),\n              null === newProps.tail &&\n                \"collapsed\" !== newProps.tailMode &&\n                \"visible\" !== newProps.tailMode &&\n                !nextResource.alternate &&\n                !isHydrating)\n            )\n              return bubbleProperties(workInProgress), null;\n          } else\n            2 * now() - newProps.renderingStartTime >\n              workInProgressRootRenderTargetTime &&\n              536870912 !== renderLanes &&\n              ((workInProgress.flags |= 128),\n              (type = !0),\n              cutOffTailIfNeeded(newProps, !1),\n              (workInProgress.lanes = 4194304));\n        newProps.isBackwards\n          ? ((nextResource.sibling = workInProgress.child),\n            (workInProgress.child = nextResource))\n          : ((current = newProps.last),\n            null !== current\n              ? (current.sibling = nextResource)\n              : (workInProgress.child = nextResource),\n            (newProps.last = nextResource));\n      }\n      if (null !== newProps.tail) {\n        current = newProps.tail;\n        a: {\n          for (renderLanes = current; null !== renderLanes; ) {\n            if (null !== renderLanes.alternate) {\n              renderLanes = !1;\n              break a;\n            }\n            renderLanes = renderLanes.sibling;\n          }\n          renderLanes = !0;\n        }\n        newProps.rendering = current;\n        newProps.tail = current.sibling;\n        newProps.renderingStartTime = now();\n        current.sibling = null;\n        nextResource = suspenseStackCursor.current;\n        nextResource = type ? (nextResource & 1) | 2 : nextResource & 1;\n        \"visible\" === newProps.tailMode ||\n        \"collapsed\" === newProps.tailMode ||\n        !renderLanes ||\n        isHydrating\n          ? pushSuspenseListContext(workInProgress, nextResource)\n          : ((renderLanes = nextResource),\n            push(suspenseHandlerStackCursor, workInProgress),\n            push(suspenseStackCursor, renderLanes),\n            null === shellBoundary && (shellBoundary = workInProgress));\n        isHydrating && pushTreeFork(workInProgress, newProps.treeForkCount);\n        return current;\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        (newProps = null !== workInProgress.memoizedState),\n        null !== current\n          ? (null !== current.memoizedState) !== newProps &&\n            (workInProgress.flags |= 8192)\n          : newProps && (workInProgress.flags |= 8192),\n        newProps\n          ? 0 !== (renderLanes & 536870912) &&\n            0 === (workInProgress.flags & 128) &&\n            (bubbleProperties(workInProgress),\n            workInProgress.subtreeFlags & 6 && (workInProgress.flags |= 8192))\n          : bubbleProperties(workInProgress),\n        (renderLanes = workInProgress.updateQueue),\n        null !== renderLanes &&\n          scheduleRetryEffect(workInProgress, renderLanes.retryQueue),\n        (renderLanes = null),\n        null !== current &&\n          null !== current.memoizedState &&\n          null !== current.memoizedState.cachePool &&\n          (renderLanes = current.memoizedState.cachePool.pool),\n        (newProps = null),\n        null !== workInProgress.memoizedState &&\n          null !== workInProgress.memoizedState.cachePool &&\n          (newProps = workInProgress.memoizedState.cachePool.pool),\n        newProps !== renderLanes && (workInProgress.flags |= 2048),\n        null !== current && pop(resumedCache),\n        null\n      );\n    case 24:\n      return (\n        (renderLanes = null),\n        null !== current && (renderLanes = current.memoizedState.cache),\n        workInProgress.memoizedState.cache !== renderLanes &&\n          (workInProgress.flags |= 2048),\n        popProvider(CacheContext),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 25:\n      return null;\n    case 30:\n      return (\n        (workInProgress.flags |= 33554432),\n        bubbleProperties(workInProgress),\n        null\n      );\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction unwindWork(current, workInProgress) {\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 1:\n      return (\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 3:\n      return (\n        popProvider(CacheContext),\n        popHostContainer(),\n        (current = workInProgress.flags),\n        0 !== (current & 65536) && 0 === (current & 128)\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 26:\n    case 27:\n    case 5:\n      return popHostContext(workInProgress), null;\n    case 31:\n      if (null !== workInProgress.memoizedState) {\n        popSuspenseHandler(workInProgress);\n        if (null === workInProgress.alternate)\n          throw Error(formatProdErrorMessage(340));\n        resetHydrationState();\n      }\n      current = workInProgress.flags;\n      return current & 65536\n        ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n        : null;\n    case 13:\n      popSuspenseHandler(workInProgress);\n      current = workInProgress.memoizedState;\n      if (null !== current && null !== current.dehydrated) {\n        if (null === workInProgress.alternate)\n          throw Error(formatProdErrorMessage(340));\n        resetHydrationState();\n      }\n      current = workInProgress.flags;\n      return current & 65536\n        ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n        : null;\n    case 19:\n      return (\n        popSuspenseListContext(workInProgress),\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128),\n            (current = workInProgress.memoizedState),\n            null !== current &&\n              ((current.rendering = null), (current.tail = null)),\n            (workInProgress.flags |= 4),\n            workInProgress)\n          : null\n      );\n    case 4:\n      return popHostContainer(), null;\n    case 10:\n      return popProvider(workInProgress.type), null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        null !== current && pop(resumedCache),\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 24:\n      return popProvider(CacheContext), null;\n    case 25:\n      return null;\n    default:\n      return null;\n  }\n}\nfunction unwindInterruptedWork(current, interruptedWork) {\n  popTreeContext(interruptedWork);\n  switch (interruptedWork.tag) {\n    case 3:\n      popProvider(CacheContext);\n      popHostContainer();\n      break;\n    case 26:\n    case 27:\n    case 5:\n      popHostContext(interruptedWork);\n      break;\n    case 4:\n      popHostContainer();\n      break;\n    case 31:\n      null !== interruptedWork.memoizedState &&\n        popSuspenseHandler(interruptedWork);\n      break;\n    case 13:\n      popSuspenseHandler(interruptedWork);\n      break;\n    case 19:\n      popSuspenseListContext(interruptedWork);\n      break;\n    case 10:\n      popProvider(interruptedWork.type);\n      break;\n    case 22:\n    case 23:\n      popSuspenseHandler(interruptedWork);\n      popHiddenContext();\n      null !== current && pop(resumedCache);\n      break;\n    case 24:\n      popProvider(CacheContext);\n  }\n}\nfunction commitHookEffectListMount(flags, finishedWork) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          lastEffect = void 0;\n          var create = updateQueue.create,\n            inst = updateQueue.inst;\n          lastEffect = create();\n          inst.destroy = lastEffect;\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHookEffectListUnmount(\n  flags,\n  finishedWork,\n  nearestMountedAncestor$jscomp$0\n) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          var inst = updateQueue.inst,\n            destroy = inst.destroy;\n          if (void 0 !== destroy) {\n            inst.destroy = void 0;\n            lastEffect = finishedWork;\n            var nearestMountedAncestor = nearestMountedAncestor$jscomp$0,\n              destroy_ = destroy;\n            try {\n              destroy_();\n            } catch (error) {\n              captureCommitPhaseError(\n                lastEffect,\n                nearestMountedAncestor,\n                error\n              );\n            }\n          }\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitClassCallbacks(finishedWork) {\n  var updateQueue = finishedWork.updateQueue;\n  if (null !== updateQueue) {\n    var instance = finishedWork.stateNode;\n    try {\n      commitCallbacks(updateQueue, instance);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n  }\n}\nfunction safelyCallComponentWillUnmount(\n  current,\n  nearestMountedAncestor,\n  instance\n) {\n  instance.props = resolveClassComponentProps(\n    current.type,\n    current.memoizedProps\n  );\n  instance.state = current.memoizedState;\n  try {\n    instance.componentWillUnmount();\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyAttachRef(current, nearestMountedAncestor) {\n  try {\n    var ref = current.ref;\n    if (null !== ref) {\n      switch (current.tag) {\n        case 26:\n        case 27:\n        case 5:\n          var instanceToUse = current.stateNode;\n          break;\n        case 30:\n          var instance = current.stateNode,\n            name = getViewTransitionName(current.memoizedProps, instance);\n          if (null === instance.ref || instance.ref.name !== name)\n            instance.ref = createViewTransitionInstance(name);\n          instanceToUse = instance.ref;\n          break;\n        case 7:\n          if (null === current.stateNode) {\n            var fragmentInstance = new FragmentInstance(current);\n            traverseVisibleInstancesAndTextInstances(\n              current.child,\n              !1,\n              addFragmentHandleToFiber,\n              fragmentInstance,\n              void 0,\n              void 0\n            );\n            current.stateNode = fragmentInstance;\n          }\n          instanceToUse = current.stateNode;\n          break;\n        default:\n          instanceToUse = current.stateNode;\n      }\n      \"function\" === typeof ref\n        ? (current.refCleanup = ref(instanceToUse))\n        : (ref.current = instanceToUse);\n    }\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyDetachRef(current, nearestMountedAncestor) {\n  var ref = current.ref,\n    refCleanup = current.refCleanup;\n  if (null !== ref)\n    if (\"function\" === typeof refCleanup)\n      try {\n        refCleanup();\n      } catch (error) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error);\n      } finally {\n        (current.refCleanup = null),\n          (current = current.alternate),\n          null != current && (current.refCleanup = null);\n      }\n    else if (\"function\" === typeof ref)\n      try {\n        ref(null);\n      } catch (error$148) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error$148);\n      }\n    else ref.current = null;\n}\nfunction commitNewChildToFragmentInstances(fiber, parentFragmentInstances) {\n  if (\n    (5 === fiber.tag || 27 === fiber.tag || 6 === fiber.tag) &&\n    null === fiber.alternate &&\n    null !== parentFragmentInstances\n  )\n    for (var i = 0; i < parentFragmentInstances.length; i++)\n      commitNewChildToFragmentInstance(\n        fiber.stateNode,\n        parentFragmentInstances[i]\n      );\n}\nfunction commitFragmentInstanceInsertionEffects(fiber) {\n  for (var parent = fiber.return; null !== parent; ) {\n    isFragmentInstanceParent(parent) &&\n      commitNewChildToFragmentInstance(fiber.stateNode, parent.stateNode);\n    if (isFragmentInstanceHostBoundary(parent)) break;\n    parent = parent.return;\n  }\n}\nfunction commitFragmentInstanceDeletionEffects(fiber) {\n  for (var parent = fiber.return; null !== parent; ) {\n    isFragmentInstanceParent(parent) &&\n      deleteChildFromFragmentInstance(fiber.stateNode, parent.stateNode);\n    if (isFragmentInstanceHostBoundary(parent)) break;\n    parent = parent.return;\n  }\n}\nfunction isFragmentInstanceHostBoundary(fiber) {\n  return 5 === fiber.tag || 3 === fiber.tag || 27 === fiber.tag;\n}\nfunction isFragmentInstanceParent(fiber) {\n  return fiber && 7 === fiber.tag && null !== fiber.stateNode;\n}\nfunction commitHostMount(finishedWork) {\n  var type = finishedWork.type,\n    props = finishedWork.memoizedProps,\n    instance = finishedWork.stateNode;\n  try {\n    a: switch (type) {\n      case \"button\":\n      case \"input\":\n      case \"select\":\n      case \"textarea\":\n        props.autoFocus && instance.focus();\n        break a;\n      case \"img\":\n        props.src\n          ? (instance.src = props.src)\n          : props.srcSet && (instance.srcset = props.srcSet);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHostUpdate(finishedWork, newProps, oldProps) {\n  try {\n    var domElement = finishedWork.stateNode;\n    updateProperties(domElement, finishedWork.type, oldProps, newProps);\n    domElement[internalPropsKey] = newProps;\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction isHostParent(fiber) {\n  return (\n    5 === fiber.tag ||\n    3 === fiber.tag ||\n    26 === fiber.tag ||\n    (27 === fiber.tag && isSingletonScope(fiber.type)) ||\n    4 === fiber.tag\n  );\n}\nfunction getHostSibling(fiber) {\n  a: for (;;) {\n    for (; null === fiber.sibling; ) {\n      if (null === fiber.return || isHostParent(fiber.return)) return null;\n      fiber = fiber.return;\n    }\n    fiber.sibling.return = fiber.return;\n    for (\n      fiber = fiber.sibling;\n      5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag;\n\n    ) {\n      if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a;\n      if (fiber.flags & 2) continue a;\n      if (null === fiber.child || 4 === fiber.tag) continue a;\n      else (fiber.child.return = fiber), (fiber = fiber.child);\n    }\n    if (!(fiber.flags & 2)) return fiber.stateNode;\n  }\n}\nfunction insertOrAppendPlacementNodeIntoContainer(\n  node,\n  before,\n  parent,\n  parentFragmentInstances\n) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (tag = node.stateNode),\n      before\n        ? (9 === parent.nodeType\n            ? parent.body\n            : \"HTML\" === parent.nodeName\n              ? parent.ownerDocument.body\n              : parent\n          ).insertBefore(tag, before)\n        : ((before =\n            9 === parent.nodeType\n              ? parent.body\n              : \"HTML\" === parent.nodeName\n                ? parent.ownerDocument.body\n                : parent),\n          before.appendChild(tag),\n          (parent = parent._reactRootContainer),\n          (null !== parent && void 0 !== parent) ||\n            null !== before.onclick ||\n            (before.onclick = noop$1)),\n      commitNewChildToFragmentInstances(node, parentFragmentInstances),\n      (viewTransitionMutationContext = !0);\n  else if (\n    4 !== tag &&\n    (27 === tag &&\n      (commitNewChildToFragmentInstances(node, parentFragmentInstances),\n      (parentFragmentInstances = null),\n      isSingletonScope(node.type) &&\n        ((parent = node.stateNode), (before = null))),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNodeIntoContainer(\n        node,\n        before,\n        parent,\n        parentFragmentInstances\n      ),\n        node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNodeIntoContainer(\n        node,\n        before,\n        parent,\n        parentFragmentInstances\n      ),\n        (node = node.sibling);\n}\nfunction insertOrAppendPlacementNode(\n  node,\n  before,\n  parent,\n  parentFragmentInstances\n) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (tag = node.stateNode),\n      before ? parent.insertBefore(tag, before) : parent.appendChild(tag),\n      commitNewChildToFragmentInstances(node, parentFragmentInstances),\n      (viewTransitionMutationContext = !0);\n  else if (\n    4 !== tag &&\n    (27 === tag &&\n      (commitNewChildToFragmentInstances(node, parentFragmentInstances),\n      (parentFragmentInstances = null),\n      isSingletonScope(node.type) && (parent = node.stateNode)),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNode(\n        node,\n        before,\n        parent,\n        parentFragmentInstances\n      ),\n        node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNode(\n        node,\n        before,\n        parent,\n        parentFragmentInstances\n      ),\n        (node = node.sibling);\n}\nfunction commitHostSingletonAcquisition(finishedWork) {\n  var singleton = finishedWork.stateNode,\n    props = finishedWork.memoizedProps;\n  try {\n    for (\n      var type = finishedWork.type, attributes = singleton.attributes;\n      attributes.length;\n\n    )\n      singleton.removeAttributeNode(attributes[0]);\n    setInitialProperties(singleton, type, props);\n    singleton[internalInstanceKey] = finishedWork;\n    singleton[internalPropsKey] = props;\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nvar shouldStartViewTransition = !1,\n  appearingViewTransitions = null;\nfunction trackEnterViewTransitions(placement) {\n  if (30 === placement.tag || 0 !== (placement.subtreeFlags & 33554432))\n    shouldStartViewTransition = !0;\n}\nvar viewTransitionCancelableChildren = null;\nfunction pushViewTransitionCancelableScope() {\n  var prevChildren = viewTransitionCancelableChildren;\n  viewTransitionCancelableChildren = null;\n  return prevChildren;\n}\nvar viewTransitionHostInstanceIdx = 0;\nfunction applyViewTransitionToHostInstances(\n  fiber,\n  name,\n  className,\n  collectMeasurements,\n  stopAtNestedViewTransitions\n) {\n  viewTransitionHostInstanceIdx = 0;\n  return applyViewTransitionToHostInstancesRecursive(\n    fiber.child,\n    name,\n    className,\n    collectMeasurements,\n    stopAtNestedViewTransitions\n  );\n}\nfunction applyViewTransitionToHostInstancesRecursive(\n  child,\n  name,\n  className,\n  collectMeasurements,\n  stopAtNestedViewTransitions\n) {\n  for (var inViewport = !1; null !== child; ) {\n    if (5 === child.tag) {\n      var instance = child.stateNode;\n      if (null !== collectMeasurements) {\n        var measurement = measureInstance(instance);\n        collectMeasurements.push(measurement);\n        measurement.view && (inViewport = !0);\n      } else\n        inViewport || (measureInstance(instance).view && (inViewport = !0));\n      shouldStartViewTransition = !0;\n      applyViewTransitionName(\n        instance,\n        0 === viewTransitionHostInstanceIdx\n          ? name\n          : name + \"_\" + viewTransitionHostInstanceIdx,\n        className\n      );\n      viewTransitionHostInstanceIdx++;\n    } else if (22 !== child.tag || null === child.memoizedState)\n      (30 === child.tag && stopAtNestedViewTransitions) ||\n        (applyViewTransitionToHostInstancesRecursive(\n          child.child,\n          name,\n          className,\n          collectMeasurements,\n          stopAtNestedViewTransitions\n        ) &&\n          (inViewport = !0));\n    child = child.sibling;\n  }\n  return inViewport;\n}\nfunction restoreViewTransitionOnHostInstances(\n  child,\n  stopAtNestedViewTransitions\n) {\n  for (; null !== child; ) {\n    if (5 === child.tag)\n      restoreViewTransitionName(child.stateNode, child.memoizedProps);\n    else if (22 !== child.tag || null === child.memoizedState)\n      (30 === child.tag && stopAtNestedViewTransitions) ||\n        restoreViewTransitionOnHostInstances(\n          child.child,\n          stopAtNestedViewTransitions\n        );\n    child = child.sibling;\n  }\n}\nfunction commitAppearingPairViewTransitions(placement) {\n  if (0 !== (placement.subtreeFlags & 18874368))\n    for (placement = placement.child; null !== placement; ) {\n      if (22 !== placement.tag || null === placement.memoizedState)\n        if (\n          (commitAppearingPairViewTransitions(placement),\n          30 === placement.tag &&\n            0 !== (placement.flags & 18874368) &&\n            placement.stateNode.paired)\n        ) {\n          var props = placement.memoizedProps;\n          if (null == props.name || \"auto\" === props.name)\n            throw Error(formatProdErrorMessage(544));\n          var name = props.name;\n          props = getViewTransitionClassName(props.default, props.share);\n          \"none\" !== props &&\n            (applyViewTransitionToHostInstances(\n              placement,\n              name,\n              props,\n              null,\n              !1\n            ) ||\n              restoreViewTransitionOnHostInstances(placement.child, !1));\n        }\n      placement = placement.sibling;\n    }\n}\nfunction commitEnterViewTransitions(placement, gesture) {\n  if (30 === placement.tag) {\n    var state = placement.stateNode,\n      props = placement.memoizedProps,\n      name = getViewTransitionName(props, state),\n      className = getViewTransitionClassName(\n        props.default,\n        state.paired ? props.share : props.enter\n      );\n    \"none\" !== className\n      ? applyViewTransitionToHostInstances(placement, name, className, null, !1)\n        ? (commitAppearingPairViewTransitions(placement),\n          state.paired ||\n            gesture ||\n            scheduleViewTransitionEvent(placement, props.onEnter))\n        : restoreViewTransitionOnHostInstances(placement.child, !1)\n      : commitAppearingPairViewTransitions(placement);\n  } else if (0 !== (placement.subtreeFlags & 33554432))\n    for (placement = placement.child; null !== placement; )\n      commitEnterViewTransitions(placement, gesture),\n        (placement = placement.sibling);\n  else commitAppearingPairViewTransitions(placement);\n}\nfunction commitDeletedPairViewTransitions(deletion) {\n  if (\n    null !== appearingViewTransitions &&\n    0 !== appearingViewTransitions.size\n  ) {\n    var pairs = appearingViewTransitions;\n    if (0 !== (deletion.subtreeFlags & 18874368))\n      for (deletion = deletion.child; null !== deletion; ) {\n        if (22 !== deletion.tag || null === deletion.memoizedState) {\n          if (30 === deletion.tag && 0 !== (deletion.flags & 18874368)) {\n            var props = deletion.memoizedProps,\n              name = props.name;\n            if (null != name && \"auto\" !== name) {\n              var pair = pairs.get(name);\n              if (void 0 !== pair) {\n                var className = getViewTransitionClassName(\n                  props.default,\n                  props.share\n                );\n                \"none\" !== className &&\n                  (applyViewTransitionToHostInstances(\n                    deletion,\n                    name,\n                    className,\n                    null,\n                    !1\n                  )\n                    ? ((className = deletion.stateNode),\n                      (pair.paired = className),\n                      (className.paired = pair),\n                      scheduleViewTransitionEvent(deletion, props.onShare))\n                    : restoreViewTransitionOnHostInstances(deletion.child, !1));\n                pairs.delete(name);\n                if (0 === pairs.size) break;\n              }\n            }\n          }\n          commitDeletedPairViewTransitions(deletion);\n        }\n        deletion = deletion.sibling;\n      }\n  }\n}\nfunction commitExitViewTransitions(deletion) {\n  if (30 === deletion.tag) {\n    var props = deletion.memoizedProps,\n      name = getViewTransitionName(props, deletion.stateNode),\n      pair =\n        null !== appearingViewTransitions\n          ? appearingViewTransitions.get(name)\n          : void 0,\n      className = getViewTransitionClassName(\n        props.default,\n        void 0 !== pair ? props.share : props.exit\n      );\n    \"none\" !== className &&\n      (applyViewTransitionToHostInstances(deletion, name, className, null, !1)\n        ? void 0 !== pair\n          ? ((className = deletion.stateNode),\n            (pair.paired = className),\n            (className.paired = pair),\n            appearingViewTransitions.delete(name),\n            scheduleViewTransitionEvent(deletion, props.onShare))\n          : scheduleViewTransitionEvent(deletion, props.onExit)\n        : restoreViewTransitionOnHostInstances(deletion.child, !1));\n    null !== appearingViewTransitions &&\n      commitDeletedPairViewTransitions(deletion);\n  } else if (0 !== (deletion.subtreeFlags & 33554432))\n    for (deletion = deletion.child; null !== deletion; )\n      commitExitViewTransitions(deletion), (deletion = deletion.sibling);\n  else\n    null !== appearingViewTransitions &&\n      commitDeletedPairViewTransitions(deletion);\n}\nfunction commitNestedViewTransitions(changedParent) {\n  for (changedParent = changedParent.child; null !== changedParent; ) {\n    if (30 === changedParent.tag) {\n      var props = changedParent.memoizedProps,\n        name = getViewTransitionName(props, changedParent.stateNode);\n      props = getViewTransitionClassName(props.default, props.update);\n      changedParent.flags &= -5;\n      \"none\" !== props &&\n        applyViewTransitionToHostInstances(\n          changedParent,\n          name,\n          props,\n          (changedParent.memoizedState = []),\n          !1\n        );\n    } else\n      0 !== (changedParent.subtreeFlags & 33554432) &&\n        commitNestedViewTransitions(changedParent);\n    changedParent = changedParent.sibling;\n  }\n}\nfunction restorePairedViewTransitions(parent) {\n  if (0 !== (parent.subtreeFlags & 18874368))\n    for (parent = parent.child; null !== parent; ) {\n      if (22 !== parent.tag || null === parent.memoizedState) {\n        if (30 === parent.tag && 0 !== (parent.flags & 18874368)) {\n          var instance = parent.stateNode;\n          null !== instance.paired &&\n            ((instance.paired = null),\n            restoreViewTransitionOnHostInstances(parent.child, !1));\n        }\n        restorePairedViewTransitions(parent);\n      }\n      parent = parent.sibling;\n    }\n}\nfunction restoreEnterOrExitViewTransitions(fiber) {\n  if (30 === fiber.tag)\n    (fiber.stateNode.paired = null),\n      restoreViewTransitionOnHostInstances(fiber.child, !1),\n      restorePairedViewTransitions(fiber);\n  else if (0 !== (fiber.subtreeFlags & 33554432))\n    for (fiber = fiber.child; null !== fiber; )\n      restoreEnterOrExitViewTransitions(fiber), (fiber = fiber.sibling);\n  else restorePairedViewTransitions(fiber);\n}\nfunction restoreNestedViewTransitions(changedParent) {\n  for (changedParent = changedParent.child; null !== changedParent; )\n    30 === changedParent.tag\n      ? restoreViewTransitionOnHostInstances(changedParent.child, !1)\n      : 0 !== (changedParent.subtreeFlags & 33554432) &&\n        restoreNestedViewTransitions(changedParent),\n      (changedParent = changedParent.sibling);\n}\nfunction measureViewTransitionHostInstancesRecursive(\n  parentViewTransition,\n  child,\n  newName,\n  oldName,\n  className,\n  previousMeasurements,\n  stopAtNestedViewTransitions\n) {\n  for (var inViewport = !1; null !== child; ) {\n    if (5 === child.tag) {\n      var instance = child.stateNode;\n      if (\n        null !== previousMeasurements &&\n        viewTransitionHostInstanceIdx < previousMeasurements.length\n      ) {\n        var previousMeasurement =\n            previousMeasurements[viewTransitionHostInstanceIdx],\n          nextMeasurement = measureInstance(instance);\n        if (previousMeasurement.view || nextMeasurement.view) inViewport = !0;\n        var JSCompiler_temp;\n        if ((JSCompiler_temp = 0 === (parentViewTransition.flags & 4)))\n          if (nextMeasurement.clip) JSCompiler_temp = !0;\n          else {\n            JSCompiler_temp = previousMeasurement.rect;\n            var newRect = nextMeasurement.rect;\n            JSCompiler_temp =\n              JSCompiler_temp.y !== newRect.y ||\n              JSCompiler_temp.x !== newRect.x ||\n              JSCompiler_temp.height !== newRect.height ||\n              JSCompiler_temp.width !== newRect.width;\n          }\n        JSCompiler_temp && (parentViewTransition.flags |= 4);\n        nextMeasurement.abs\n          ? (nextMeasurement = !previousMeasurement.abs)\n          : ((previousMeasurement = previousMeasurement.rect),\n            (nextMeasurement = nextMeasurement.rect),\n            (nextMeasurement =\n              previousMeasurement.height !== nextMeasurement.height ||\n              previousMeasurement.width !== nextMeasurement.width));\n        nextMeasurement && (parentViewTransition.flags |= 32);\n      } else parentViewTransition.flags |= 32;\n      0 !== (parentViewTransition.flags & 4) &&\n        applyViewTransitionName(\n          instance,\n          0 === viewTransitionHostInstanceIdx\n            ? newName\n            : newName + \"_\" + viewTransitionHostInstanceIdx,\n          className\n        );\n      (inViewport && 0 !== (parentViewTransition.flags & 4)) ||\n        (null === viewTransitionCancelableChildren &&\n          (viewTransitionCancelableChildren = []),\n        viewTransitionCancelableChildren.push(\n          instance,\n          0 === viewTransitionHostInstanceIdx\n            ? oldName\n            : oldName + \"_\" + viewTransitionHostInstanceIdx,\n          child.memoizedProps\n        ));\n      viewTransitionHostInstanceIdx++;\n    } else if (22 !== child.tag || null === child.memoizedState)\n      30 === child.tag && stopAtNestedViewTransitions\n        ? (parentViewTransition.flags |= child.flags & 32)\n        : measureViewTransitionHostInstancesRecursive(\n            parentViewTransition,\n            child.child,\n            newName,\n            oldName,\n            className,\n            previousMeasurements,\n            stopAtNestedViewTransitions\n          ) && (inViewport = !0);\n    child = child.sibling;\n  }\n  return inViewport;\n}\nfunction measureNestedViewTransitions(changedParent, gesture) {\n  for (changedParent = changedParent.child; null !== changedParent; ) {\n    if (30 === changedParent.tag) {\n      var props = changedParent.memoizedProps,\n        state = changedParent.stateNode,\n        name = getViewTransitionName(props, state),\n        className = getViewTransitionClassName(props.default, props.update);\n      if (gesture) {\n        state = state.clones;\n        var previousMeasurements =\n          null === state ? null : state.map(measureClonedInstance);\n      } else\n        (previousMeasurements = changedParent.memoizedState),\n          (changedParent.memoizedState = null);\n      state = changedParent;\n      var child = changedParent.child;\n      viewTransitionHostInstanceIdx = 0;\n      name = measureViewTransitionHostInstancesRecursive(\n        state,\n        child,\n        name,\n        name,\n        className,\n        previousMeasurements,\n        !1\n      );\n      0 !== (changedParent.flags & 4) &&\n        name &&\n        (gesture || scheduleViewTransitionEvent(changedParent, props.onUpdate));\n    } else\n      0 !== (changedParent.subtreeFlags & 33554432) &&\n        measureNestedViewTransitions(changedParent, gesture);\n    changedParent = changedParent.sibling;\n  }\n}\nvar offscreenSubtreeIsHidden = !1,\n  offscreenSubtreeWasHidden = !1,\n  offscreenDirectParentIsHidden = !1,\n  needsFormReset = !1,\n  PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n  nextEffect = null,\n  viewTransitionContextChanged = !1,\n  inUpdateViewTransition = !1,\n  rootViewTransitionAffected = !1,\n  rootViewTransitionNameCanceled = !1;\nfunction commitBeforeMutationEffects(root, firstChild, committedLanes) {\n  root = root.containerInfo;\n  eventsEnabled = _enabled;\n  root = getActiveElementDeep(root);\n  if (hasSelectionCapabilities(root)) {\n    if (\"selectionStart\" in root)\n      var JSCompiler_temp = {\n        start: root.selectionStart,\n        end: root.selectionEnd\n      };\n    else\n      a: {\n        JSCompiler_temp =\n          ((JSCompiler_temp = root.ownerDocument) &&\n            JSCompiler_temp.defaultView) ||\n          window;\n        var selection =\n          JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();\n        if (selection && 0 !== selection.rangeCount) {\n          JSCompiler_temp = selection.anchorNode;\n          var anchorOffset = selection.anchorOffset,\n            focusNode = selection.focusNode;\n          selection = selection.focusOffset;\n          try {\n            JSCompiler_temp.nodeType, focusNode.nodeType;\n          } catch (e$21) {\n            JSCompiler_temp = null;\n            break a;\n          }\n          var length = 0,\n            start = -1,\n            end = -1,\n            indexWithinAnchor = 0,\n            indexWithinFocus = 0,\n            node = root,\n            parentNode = null;\n          b: for (;;) {\n            for (var next; ; ) {\n              node !== JSCompiler_temp ||\n                (0 !== anchorOffset && 3 !== node.nodeType) ||\n                (start = length + anchorOffset);\n              node !== focusNode ||\n                (0 !== selection && 3 !== node.nodeType) ||\n                (end = length + selection);\n              3 === node.nodeType && (length += node.nodeValue.length);\n              if (null === (next = node.firstChild)) break;\n              parentNode = node;\n              node = next;\n            }\n            for (;;) {\n              if (node === root) break b;\n              parentNode === JSCompiler_temp &&\n                ++indexWithinAnchor === anchorOffset &&\n                (start = length);\n              parentNode === focusNode &&\n                ++indexWithinFocus === selection &&\n                (end = length);\n              if (null !== (next = node.nextSibling)) break;\n              node = parentNode;\n              parentNode = node.parentNode;\n            }\n            node = next;\n          }\n          JSCompiler_temp =\n            -1 === start || -1 === end ? null : { start: start, end: end };\n        } else JSCompiler_temp = null;\n      }\n    JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };\n  } else JSCompiler_temp = null;\n  selectionInformation = { focusedElem: root, selectionRange: JSCompiler_temp };\n  _enabled = !1;\n  committedLanes = (committedLanes & 335544064) === committedLanes;\n  nextEffect = firstChild;\n  for (firstChild = committedLanes ? 9270 : 1024; null !== nextEffect; ) {\n    root = nextEffect;\n    if (\n      committedLanes &&\n      ((JSCompiler_temp = root.deletions), null !== JSCompiler_temp)\n    )\n      for (\n        anchorOffset = 0;\n        anchorOffset < JSCompiler_temp.length;\n        anchorOffset++\n      )\n        committedLanes &&\n          commitExitViewTransitions(JSCompiler_temp[anchorOffset]);\n    if (null === root.alternate && 0 !== (root.flags & 2))\n      committedLanes && trackEnterViewTransitions(root),\n        commitBeforeMutationEffects_complete(committedLanes);\n    else {\n      if (22 === root.tag)\n        if (((JSCompiler_temp = root.alternate), null !== root.memoizedState)) {\n          null !== JSCompiler_temp &&\n            null === JSCompiler_temp.memoizedState &&\n            committedLanes &&\n            commitExitViewTransitions(JSCompiler_temp);\n          commitBeforeMutationEffects_complete(committedLanes);\n          continue;\n        } else if (\n          null !== JSCompiler_temp &&\n          null !== JSCompiler_temp.memoizedState\n        ) {\n          committedLanes && trackEnterViewTransitions(root);\n          commitBeforeMutationEffects_complete(committedLanes);\n          continue;\n        }\n      JSCompiler_temp = root.child;\n      0 !== (root.subtreeFlags & firstChild) && null !== JSCompiler_temp\n        ? ((JSCompiler_temp.return = root), (nextEffect = JSCompiler_temp))\n        : (committedLanes && commitNestedViewTransitions(root),\n          commitBeforeMutationEffects_complete(committedLanes));\n    }\n  }\n  appearingViewTransitions = null;\n}\nfunction commitBeforeMutationEffects_complete(\n  isViewTransitionEligible$jscomp$0\n) {\n  for (; null !== nextEffect; ) {\n    var fiber = nextEffect,\n      isViewTransitionEligible = isViewTransitionEligible$jscomp$0,\n      current = fiber.alternate,\n      flags = fiber.flags;\n    switch (fiber.tag) {\n      case 0:\n      case 11:\n      case 15:\n        break;\n      case 1:\n        if (0 !== (flags & 1024) && null !== current) {\n          isViewTransitionEligible = void 0;\n          flags = current.memoizedProps;\n          current = current.memoizedState;\n          var instance = fiber.stateNode;\n          try {\n            var resolvedPrevProps = resolveClassComponentProps(\n              fiber.type,\n              flags\n            );\n            isViewTransitionEligible = instance.getSnapshotBeforeUpdate(\n              resolvedPrevProps,\n              current\n            );\n            instance.__reactInternalSnapshotBeforeUpdate =\n              isViewTransitionEligible;\n          } catch (error) {\n            captureCommitPhaseError(fiber, fiber.return, error);\n          }\n        }\n        break;\n      case 3:\n        if (0 !== (flags & 1024))\n          if (\n            ((current = fiber.stateNode.containerInfo),\n            (isViewTransitionEligible = current.nodeType),\n            9 === isViewTransitionEligible)\n          )\n            clearContainerSparingly(current);\n          else if (1 === isViewTransitionEligible)\n            switch (current.nodeName) {\n              case \"HEAD\":\n              case \"HTML\":\n              case \"BODY\":\n                clearContainerSparingly(current);\n                break;\n              default:\n                current.textContent = \"\";\n            }\n        break;\n      case 5:\n      case 26:\n      case 27:\n      case 6:\n      case 4:\n      case 17:\n        break;\n      case 30:\n        isViewTransitionEligible &&\n          null !== current &&\n          ((isViewTransitionEligible = getViewTransitionName(\n            current.memoizedProps,\n            current.stateNode\n          )),\n          (flags = fiber.memoizedProps),\n          (flags = getViewTransitionClassName(flags.default, flags.update)),\n          \"none\" !== flags &&\n            applyViewTransitionToHostInstances(\n              current,\n              isViewTransitionEligible,\n              flags,\n              (current.memoizedState = []),\n              !0\n            ));\n        break;\n      default:\n        if (0 !== (flags & 1024)) throw Error(formatProdErrorMessage(163));\n    }\n    current = fiber.sibling;\n    if (null !== current) {\n      current.return = fiber.return;\n      nextEffect = current;\n      break;\n    }\n    nextEffect = fiber.return;\n  }\n}\nfunction commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitHookEffectListMount(5, finishedWork);\n      break;\n    case 1:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (flags & 4)\n        if (((finishedRoot = finishedWork.stateNode), null === current))\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(finishedWork, finishedWork.return, error);\n          }\n        else {\n          var prevProps = resolveClassComponentProps(\n            finishedWork.type,\n            current.memoizedProps\n          );\n          current = current.memoizedState;\n          try {\n            finishedRoot.componentDidUpdate(\n              prevProps,\n              current,\n              finishedRoot.__reactInternalSnapshotBeforeUpdate\n            );\n          } catch (error$146) {\n            captureCommitPhaseError(\n              finishedWork,\n              finishedWork.return,\n              error$146\n            );\n          }\n        }\n      flags & 64 && commitClassCallbacks(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (\n        flags & 64 &&\n        ((finishedRoot = finishedWork.updateQueue), null !== finishedRoot)\n      ) {\n        current = null;\n        if (null !== finishedWork.child)\n          switch (finishedWork.child.tag) {\n            case 27:\n            case 5:\n              current = finishedWork.child.stateNode;\n              break;\n            case 1:\n              current = finishedWork.child.stateNode;\n          }\n        try {\n          commitCallbacks(finishedRoot, current);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 27:\n      null === current &&\n        flags & 4 &&\n        commitHostSingletonAcquisition(finishedWork);\n    case 26:\n    case 5:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      null === current && flags & 4 && commitHostMount(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 12:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      break;\n    case 31:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n      break;\n    case 13:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n      flags & 64 &&\n        ((finishedRoot = finishedWork.memoizedState),\n        null !== finishedRoot &&\n          ((finishedRoot = finishedRoot.dehydrated),\n          null !== finishedRoot &&\n            ((finishedWork = retryDehydratedSuspenseBoundary.bind(\n              null,\n              finishedWork\n            )),\n            registerSuspenseInstanceRetry(finishedRoot, finishedWork))));\n      break;\n    case 22:\n      flags = null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;\n      if (!flags) {\n        var newOffscreenSubtreeWasHidden =\n          (null !== current && null !== current.memoizedState) ||\n          offscreenSubtreeWasHidden;\n        current = offscreenSubtreeIsHidden;\n        prevProps = offscreenSubtreeWasHidden;\n        offscreenSubtreeIsHidden = flags;\n        (offscreenSubtreeWasHidden = newOffscreenSubtreeWasHidden) && !prevProps\n          ? ((flags = 2),\n            0 !== (finishedWork.subtreeFlags & 8772) && (flags |= 1),\n            recursivelyTraverseReappearLayoutEffects(\n              finishedRoot,\n              finishedWork,\n              flags\n            ))\n          : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n        offscreenSubtreeIsHidden = current;\n        offscreenSubtreeWasHidden = prevProps;\n      }\n      break;\n    case 30:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 7:\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n    default:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n  }\n}\nfunction hideOrUnhideAllChildren(parentFiber, isHidden) {\n  for (parentFiber = parentFiber.child; null !== parentFiber; )\n    hideOrUnhideAllChildrenOnFiber(parentFiber, isHidden),\n      (parentFiber = parentFiber.sibling);\n}\nfunction hideOrUnhideAllChildrenOnFiber(fiber, isHidden) {\n  switch (fiber.tag) {\n    case 5:\n    case 26:\n      try {\n        var instance = fiber.stateNode;\n        if (isHidden) {\n          var style = instance.style;\n          \"function\" === typeof style.setProperty\n            ? style.setProperty(\"display\", \"none\", \"important\")\n            : (style.display = \"none\");\n        } else {\n          var instance$jscomp$0 = fiber.stateNode,\n            styleProp = fiber.memoizedProps.style,\n            display =\n              void 0 !== styleProp &&\n              null !== styleProp &&\n              styleProp.hasOwnProperty(\"display\")\n                ? styleProp.display\n                : null;\n          instance$jscomp$0.style.display =\n            null == display || \"boolean\" === typeof display\n              ? \"\"\n              : (\"\" + display).trim();\n        }\n      } catch (error) {\n        captureCommitPhaseError(fiber, fiber.return, error);\n      }\n      hideOrUnhideNearestPortals(fiber, isHidden);\n      break;\n    case 6:\n      try {\n        (fiber.stateNode.nodeValue = isHidden ? \"\" : fiber.memoizedProps),\n          (viewTransitionMutationContext = !0);\n      } catch (error) {\n        captureCommitPhaseError(fiber, fiber.return, error);\n      }\n      break;\n    case 18:\n      try {\n        var instance$jscomp$1 = fiber.stateNode;\n        isHidden\n          ? hideOrUnhideDehydratedBoundary(instance$jscomp$1, !0)\n          : hideOrUnhideDehydratedBoundary(fiber.stateNode, !1);\n      } catch (error) {\n        captureCommitPhaseError(fiber, fiber.return, error);\n      }\n      break;\n    case 22:\n    case 23:\n      null === fiber.memoizedState && hideOrUnhideAllChildren(fiber, isHidden);\n      break;\n    default:\n      hideOrUnhideAllChildren(fiber, isHidden);\n  }\n}\nfunction hideOrUnhideNearestPortals(parentFiber, isHidden$jscomp$0) {\n  if (parentFiber.subtreeFlags & 67108864)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      a: {\n        var fiber = parentFiber,\n          isHidden = isHidden$jscomp$0;\n        switch (fiber.tag) {\n          case 4:\n            hideOrUnhideAllChildrenOnFiber(fiber, isHidden);\n            break a;\n          case 22:\n            null === fiber.memoizedState &&\n              hideOrUnhideNearestPortals(fiber, isHidden);\n            break a;\n          default:\n            hideOrUnhideNearestPortals(fiber, isHidden);\n        }\n      }\n      parentFiber = parentFiber.sibling;\n    }\n}\nfunction detachFiberAfterEffects(fiber) {\n  var alternate = fiber.alternate;\n  null !== alternate &&\n    ((fiber.alternate = null), detachFiberAfterEffects(alternate));\n  fiber.child = null;\n  fiber.deletions = null;\n  fiber.sibling = null;\n  5 === fiber.tag &&\n    ((alternate = fiber.stateNode),\n    null !== alternate && detachDeletedInstance(alternate));\n  fiber.stateNode = null;\n  fiber.return = null;\n  fiber.dependencies = null;\n  fiber.memoizedProps = null;\n  fiber.memoizedState = null;\n  fiber.pendingProps = null;\n  fiber.stateNode = null;\n  fiber.updateQueue = null;\n}\nvar hostParent = null,\n  hostParentIsContainer = !1;\nfunction recursivelyTraverseDeletionEffects(\n  finishedRoot,\n  nearestMountedAncestor,\n  parent\n) {\n  for (parent = parent.child; null !== parent; )\n    commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, parent),\n      (parent = parent.sibling);\n}\nfunction commitDeletionEffectsOnFiber(\n  finishedRoot,\n  nearestMountedAncestor,\n  deletedFiber\n) {\n  if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberUnmount)\n    try {\n      injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);\n    } catch (err) {}\n  switch (deletedFiber.tag) {\n    case 26:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      deletedFiber.memoizedState\n        ? deletedFiber.memoizedState.count--\n        : deletedFiber.stateNode &&\n          !offscreenSubtreeWasHidden &&\n          ((deletedFiber = deletedFiber.stateNode),\n          deletedFiber.parentNode.removeChild(deletedFiber));\n      break;\n    case 27:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      commitFragmentInstanceDeletionEffects(deletedFiber);\n      var prevHostParent = hostParent,\n        prevHostParentIsContainer = hostParentIsContainer;\n      isSingletonScope(deletedFiber.type) &&\n        ((hostParent = deletedFiber.stateNode), (hostParentIsContainer = !1));\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      releaseSingletonInstance(\n        deletedFiber.stateNode,\n        deletedFiber.type,\n        deletedFiber.memoizedProps\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 5:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor),\n        commitFragmentInstanceDeletionEffects(deletedFiber);\n    case 6:\n      6 === deletedFiber.tag &&\n        commitFragmentInstanceDeletionEffects(deletedFiber);\n      prevHostParent = hostParent;\n      prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = null;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      if (null !== hostParent)\n        if (hostParentIsContainer)\n          try {\n            (9 === hostParent.nodeType\n              ? hostParent.body\n              : \"HTML\" === hostParent.nodeName\n                ? hostParent.ownerDocument.body\n                : hostParent\n            ).removeChild(deletedFiber.stateNode),\n              (viewTransitionMutationContext = !0);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n        else\n          try {\n            hostParent.removeChild(deletedFiber.stateNode),\n              (viewTransitionMutationContext = !0);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n      break;\n    case 18:\n      null !== hostParent &&\n        (hostParentIsContainer\n          ? ((finishedRoot = hostParent),\n            clearHydrationBoundary(\n              9 === finishedRoot.nodeType\n                ? finishedRoot.body\n                : \"HTML\" === finishedRoot.nodeName\n                  ? finishedRoot.ownerDocument.body\n                  : finishedRoot,\n              deletedFiber.stateNode\n            ),\n            retryIfBlockedOn(finishedRoot))\n          : clearHydrationBoundary(hostParent, deletedFiber.stateNode));\n      break;\n    case 4:\n      prevHostParent = hostParent;\n      prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = deletedFiber.stateNode.containerInfo;\n      hostParentIsContainer = !0;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      commitHookEffectListUnmount(2, deletedFiber, nearestMountedAncestor);\n      offscreenSubtreeWasHidden ||\n        commitHookEffectListUnmount(4, deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 1:\n      offscreenSubtreeWasHidden ||\n        (safelyDetachRef(deletedFiber, nearestMountedAncestor),\n        (prevHostParent = deletedFiber.stateNode),\n        \"function\" === typeof prevHostParent.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            deletedFiber,\n            nearestMountedAncestor,\n            prevHostParent\n          ));\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 21:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 22:\n      offscreenSubtreeWasHidden =\n        (prevHostParent = offscreenSubtreeWasHidden) ||\n        null !== deletedFiber.memoizedState;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      offscreenSubtreeWasHidden = prevHostParent;\n      break;\n    case 30:\n      safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 7:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    default:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n  }\n}\nfunction commitActivityHydrationCallbacks(finishedRoot, finishedWork) {\n  if (\n    null === finishedWork.memoizedState &&\n    ((finishedRoot = finishedWork.alternate),\n    null !== finishedRoot &&\n      ((finishedRoot = finishedRoot.memoizedState), null !== finishedRoot))\n  ) {\n    finishedRoot = finishedRoot.dehydrated;\n    try {\n      retryIfBlockedOn(finishedRoot);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n  }\n}\nfunction commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n  if (\n    null === finishedWork.memoizedState &&\n    ((finishedRoot = finishedWork.alternate),\n    null !== finishedRoot &&\n      ((finishedRoot = finishedRoot.memoizedState),\n      null !== finishedRoot &&\n        ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))\n  )\n    try {\n      retryIfBlockedOn(finishedRoot);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n}\nfunction getRetryCache(finishedWork) {\n  switch (finishedWork.tag) {\n    case 31:\n    case 13:\n    case 19:\n      var retryCache = finishedWork.stateNode;\n      null === retryCache &&\n        (retryCache = finishedWork.stateNode = new PossiblyWeakSet());\n      return retryCache;\n    case 22:\n      return (\n        (finishedWork = finishedWork.stateNode),\n        (retryCache = finishedWork._retryCache),\n        null === retryCache &&\n          (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),\n        retryCache\n      );\n    default:\n      throw Error(formatProdErrorMessage(435, finishedWork.tag));\n  }\n}\nfunction attachSuspenseRetryListeners(finishedWork, wakeables) {\n  var retryCache = getRetryCache(finishedWork);\n  wakeables.forEach(function (wakeable) {\n    if (!retryCache.has(wakeable)) {\n      retryCache.add(wakeable);\n      var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n      wakeable.then(retry, retry);\n    }\n  });\n}\nfunction recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber, lanes) {\n  var deletions = parentFiber.deletions;\n  if (null !== deletions)\n    for (var i = 0; i < deletions.length; i++) {\n      var childToDelete = deletions[i],\n        root = root$jscomp$0,\n        returnFiber = parentFiber,\n        parent = returnFiber;\n      a: for (; null !== parent; ) {\n        switch (parent.tag) {\n          case 27:\n            if (isSingletonScope(parent.type)) {\n              hostParent = parent.stateNode;\n              hostParentIsContainer = !1;\n              break a;\n            }\n            break;\n          case 5:\n            hostParent = parent.stateNode;\n            hostParentIsContainer = !1;\n            break a;\n          case 3:\n          case 4:\n            hostParent = parent.stateNode.containerInfo;\n            hostParentIsContainer = !0;\n            break a;\n        }\n        parent = parent.return;\n      }\n      if (null === hostParent) throw Error(formatProdErrorMessage(160));\n      commitDeletionEffectsOnFiber(root, returnFiber, childToDelete);\n      hostParent = null;\n      hostParentIsContainer = !1;\n      root = childToDelete.alternate;\n      null !== root && (root.return = null);\n      childToDelete.return = null;\n    }\n  if (parentFiber.subtreeFlags & 13886)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitMutationEffectsOnFiber(parentFiber, root$jscomp$0, lanes),\n        (parentFiber = parentFiber.sibling);\n}\nvar currentHoistableRoot = null;\nfunction commitMutationEffectsOnFiber(finishedWork, root, lanes) {\n  var current = finishedWork.alternate,\n    flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      if (\n        flags & 4 &&\n        ((current = finishedWork.updateQueue),\n        (current = null !== current ? current.events : null),\n        null !== current)\n      )\n        for (var ii = 0; ii < current.length; ii++) {\n          var _eventPayloads$ii2 = current[ii];\n          _eventPayloads$ii2.ref.impl = _eventPayloads$ii2.nextImpl;\n        }\n      recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        (commitHookEffectListUnmount(3, finishedWork, finishedWork.return),\n        commitHookEffectListMount(3, finishedWork),\n        commitHookEffectListUnmount(5, finishedWork, finishedWork.return));\n      break;\n    case 1:\n      recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      flags & 64 &&\n        offscreenSubtreeIsHidden &&\n        ((finishedWork = finishedWork.updateQueue),\n        null !== finishedWork &&\n          ((root = finishedWork.callbacks),\n          null !== root &&\n            ((lanes = finishedWork.shared.hiddenCallbacks),\n            (finishedWork.shared.hiddenCallbacks =\n              null === lanes ? root : lanes.concat(root)))));\n      break;\n    case 26:\n      ii = currentHoistableRoot;\n      recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (flags & 4)\n        if (\n          ((flags = null !== current ? current.memoizedState : null),\n          (lanes = finishedWork.memoizedState),\n          null === current)\n        )\n          if (null === lanes)\n            if (null === finishedWork.stateNode)\n              if (offscreenSubtreeIsHidden)\n                finishedWork.stateNode = createHoistableInstance(\n                  finishedWork.type,\n                  finishedWork.memoizedProps,\n                  root.containerInfo,\n                  finishedWork\n                );\n              else {\n                a: {\n                  root = finishedWork.type;\n                  lanes = finishedWork.memoizedProps;\n                  flags = ii.ownerDocument || ii;\n                  b: switch (root) {\n                    case \"title\":\n                      current = flags.getElementsByTagName(\"title\")[0];\n                      if (\n                        !current ||\n                        current[internalHoistableMarker] ||\n                        current[internalInstanceKey] ||\n                        \"http://www.w3.org/2000/svg\" === current.namespaceURI ||\n                        current.hasAttribute(\"itemprop\")\n                      )\n                        (current = flags.createElement(root)),\n                          flags.head.insertBefore(\n                            current,\n                            flags.querySelector(\"head > title\")\n                          );\n                      setInitialProperties(current, root, lanes);\n                      current[internalInstanceKey] = finishedWork;\n                      markNodeAsHoistable(current);\n                      root = current;\n                      break a;\n                    case \"link\":\n                      if (\n                        (ii = getHydratableHoistableCache(\n                          \"link\",\n                          \"href\",\n                          flags\n                        ).get(root + (lanes.href || \"\")))\n                      )\n                        for (\n                          _eventPayloads$ii2 = 0;\n                          _eventPayloads$ii2 < ii.length;\n                          _eventPayloads$ii2++\n                        )\n                          if (\n                            ((current = ii[_eventPayloads$ii2]),\n                            current.getAttribute(\"href\") ===\n                              (null == lanes.href || \"\" === lanes.href\n                                ? null\n                                : lanes.href) &&\n                              current.getAttribute(\"rel\") ===\n                                (null == lanes.rel ? null : lanes.rel) &&\n                              current.getAttribute(\"title\") ===\n                                (null == lanes.title ? null : lanes.title) &&\n                              current.getAttribute(\"crossorigin\") ===\n                                (null == lanes.crossOrigin\n                                  ? null\n                                  : lanes.crossOrigin))\n                          ) {\n                            ii.splice(_eventPayloads$ii2, 1);\n                            break b;\n                          }\n                      current = flags.createElement(root);\n                      setInitialProperties(current, root, lanes);\n                      flags.head.appendChild(current);\n                      break;\n                    case \"meta\":\n                      if (\n                        (ii = getHydratableHoistableCache(\n                          \"meta\",\n                          \"content\",\n                          flags\n                        ).get(root + (lanes.content || \"\")))\n                      )\n                        for (\n                          _eventPayloads$ii2 = 0;\n                          _eventPayloads$ii2 < ii.length;\n                          _eventPayloads$ii2++\n                        )\n                          if (\n                            ((current = ii[_eventPayloads$ii2]),\n                            current.getAttribute(\"content\") ===\n                              (null == lanes.content\n                                ? null\n                                : \"\" + lanes.content) &&\n                              current.getAttribute(\"name\") ===\n                                (null == lanes.name ? null : lanes.name) &&\n                              current.getAttribute(\"property\") ===\n                                (null == lanes.property\n                                  ? null\n                                  : lanes.property) &&\n                              current.getAttribute(\"http-equiv\") ===\n                                (null == lanes.httpEquiv\n                                  ? null\n                                  : lanes.httpEquiv) &&\n                              current.getAttribute(\"charset\") ===\n                                (null == lanes.charSet ? null : lanes.charSet))\n                          ) {\n                            ii.splice(_eventPayloads$ii2, 1);\n                            break b;\n                          }\n                      current = flags.createElement(root);\n                      setInitialProperties(current, root, lanes);\n                      flags.head.appendChild(current);\n                      break;\n                    default:\n                      throw Error(formatProdErrorMessage(468, root));\n                  }\n                  current[internalInstanceKey] = finishedWork;\n                  markNodeAsHoistable(current);\n                  root = current;\n                }\n                finishedWork.stateNode = root;\n              }\n            else\n              offscreenSubtreeIsHidden ||\n                mountHoistable(ii, finishedWork.type, finishedWork.stateNode);\n          else\n            finishedWork.stateNode = acquireResource(\n              ii,\n              lanes,\n              finishedWork.memoizedProps\n            );\n        else\n          flags !== lanes\n            ? (null === flags\n                ? ((root = current.stateNode),\n                  null === root ||\n                    offscreenSubtreeWasHidden ||\n                    root.parentNode.removeChild(root))\n                : flags.count--,\n              null === lanes\n                ? offscreenSubtreeIsHidden ||\n                  mountHoistable(ii, finishedWork.type, finishedWork.stateNode)\n                : acquireResource(ii, lanes, finishedWork.memoizedProps))\n            : null === lanes &&\n              null !== finishedWork.stateNode &&\n              commitHostUpdate(\n                finishedWork,\n                finishedWork.memoizedProps,\n                current.memoizedProps\n              );\n      break;\n    case 27:\n      recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      null !== current &&\n        flags & 4 &&\n        commitHostUpdate(\n          finishedWork,\n          finishedWork.memoizedProps,\n          current.memoizedProps\n        );\n      break;\n    case 5:\n      ii = offscreenDirectParentIsHidden;\n      offscreenDirectParentIsHidden = !1;\n      recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n      offscreenDirectParentIsHidden = ii;\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (finishedWork.flags & 32) {\n        root = finishedWork.stateNode;\n        try {\n          setTextContent(root, \"\"), (viewTransitionMutationContext = !0);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      flags & 4 &&\n        null != finishedWork.stateNode &&\n        ((root = finishedWork.memoizedProps),\n        commitHostUpdate(\n          finishedWork,\n          root,\n          null !== current ? current.memoizedProps : root\n        ));\n      flags & 1024 && (needsFormReset = !0);\n      break;\n    case 6:\n      recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4) {\n        if (null === finishedWork.stateNode)\n          throw Error(formatProdErrorMessage(162));\n        root = finishedWork.memoizedProps;\n        lanes = finishedWork.stateNode;\n        try {\n          (lanes.nodeValue = root), (viewTransitionMutationContext = !0);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 3:\n      viewTransitionMutationContext = !1;\n      tagCaches = null;\n      ii = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(root.containerInfo);\n      recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n      currentHoistableRoot = ii;\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4 && null !== current && current.memoizedState.isDehydrated)\n        try {\n          retryIfBlockedOn(root.containerInfo);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      needsFormReset &&\n        ((needsFormReset = !1), recursivelyResetForms(finishedWork));\n      viewTransitionMutationContext = !1;\n      break;\n    case 4:\n      flags = offscreenDirectParentIsHidden;\n      offscreenDirectParentIsHidden = offscreenSubtreeIsHidden;\n      current = pushMutationContext();\n      ii = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(\n        finishedWork.stateNode.containerInfo\n      );\n      recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n      commitReconciliationEffects(finishedWork);\n      currentHoistableRoot = ii;\n      viewTransitionMutationContext &&\n        inUpdateViewTransition &&\n        (rootViewTransitionAffected = !0);\n      viewTransitionMutationContext = current;\n      offscreenDirectParentIsHidden = flags;\n      break;\n    case 12:\n      recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n      commitReconciliationEffects(finishedWork);\n      break;\n    case 31:\n      recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        ((root = finishedWork.updateQueue),\n        null !== root &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, root)));\n      break;\n    case 13:\n      recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n      commitReconciliationEffects(finishedWork);\n      finishedWork.child.flags & 8192 &&\n        (null !== finishedWork.memoizedState) !==\n          (null !== current && null !== current.memoizedState) &&\n        (globalMostRecentFallbackTime = now());\n      flags & 4 &&\n        ((root = finishedWork.updateQueue),\n        null !== root &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, root)));\n      break;\n    case 22:\n      ii = null !== finishedWork.memoizedState;\n      _eventPayloads$ii2 = null !== current && null !== current.memoizedState;\n      var prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,\n        prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden,\n        prevOffscreenDirectParentIsHidden$166 = offscreenDirectParentIsHidden;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden || ii;\n      offscreenDirectParentIsHidden =\n        prevOffscreenDirectParentIsHidden$166 || ii;\n      offscreenSubtreeWasHidden =\n        prevOffscreenSubtreeWasHidden || _eventPayloads$ii2;\n      recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      offscreenDirectParentIsHidden = prevOffscreenDirectParentIsHidden$166;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n      commitReconciliationEffects(finishedWork);\n      flags & 8192 &&\n        ((root = finishedWork.stateNode),\n        (root._visibility = ii ? root._visibility & -2 : root._visibility | 1),\n        !ii ||\n          null === current ||\n          _eventPayloads$ii2 ||\n          offscreenSubtreeIsHidden ||\n          offscreenSubtreeWasHidden ||\n          ((root = _eventPayloads$ii2 || offscreenSubtreeWasHidden),\n          (lanes = offscreenSubtreeIsHidden),\n          (current = offscreenSubtreeWasHidden),\n          (offscreenSubtreeIsHidden = ii || offscreenSubtreeIsHidden),\n          (offscreenSubtreeWasHidden = root),\n          recursivelyTraverseDisappearLayoutEffects(finishedWork, 2),\n          (offscreenSubtreeIsHidden = lanes),\n          (offscreenSubtreeWasHidden = current)),\n        (!ii && offscreenDirectParentIsHidden) ||\n          hideOrUnhideAllChildren(finishedWork, ii));\n      flags & 4 &&\n        ((root = finishedWork.updateQueue),\n        null !== root &&\n          ((lanes = root.retryQueue),\n          null !== lanes &&\n            ((root.retryQueue = null),\n            attachSuspenseRetryListeners(finishedWork, lanes))));\n      break;\n    case 19:\n      recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        ((root = finishedWork.updateQueue),\n        null !== root &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, root)));\n      break;\n    case 30:\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      flags = pushMutationContext();\n      ii = inUpdateViewTransition;\n      _eventPayloads$ii2 = (lanes & 335544064) === lanes;\n      prevOffscreenSubtreeIsHidden = finishedWork.memoizedProps;\n      inUpdateViewTransition =\n        _eventPayloads$ii2 &&\n        \"none\" !==\n          getViewTransitionClassName(\n            prevOffscreenSubtreeIsHidden.default,\n            prevOffscreenSubtreeIsHidden.update\n          );\n      recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n      commitReconciliationEffects(finishedWork);\n      _eventPayloads$ii2 &&\n        null !== current &&\n        viewTransitionMutationContext &&\n        (finishedWork.flags |= 4);\n      inUpdateViewTransition = ii;\n      viewTransitionMutationContext = flags;\n      break;\n    case 21:\n      break;\n    case 7:\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return)),\n        current &&\n          null !== current.stateNode &&\n          (current.stateNode._fragmentFiber = finishedWork);\n    default:\n      recursivelyTraverseMutationEffects(root, finishedWork, lanes),\n        commitReconciliationEffects(finishedWork);\n  }\n}\nfunction commitReconciliationEffects(finishedWork) {\n  var flags = finishedWork.flags;\n  if (flags & 2) {\n    try {\n      for (\n        var hostParentFiber, parentFiber = finishedWork.return;\n        null !== parentFiber;\n\n      ) {\n        if (isHostParent(parentFiber)) {\n          hostParentFiber = parentFiber;\n          break;\n        }\n        parentFiber = parentFiber.return;\n      }\n      parentFiber = null;\n      for (var parent = finishedWork.return; null !== parent; ) {\n        if (isFragmentInstanceParent(parent)) {\n          var fragmentInstance = parent.stateNode;\n          null === parentFiber\n            ? (parentFiber = [fragmentInstance])\n            : parentFiber.push(fragmentInstance);\n        }\n        if (isFragmentInstanceHostBoundary(parent)) break;\n        parent = parent.return;\n      }\n      var JSCompiler_inline_result = parentFiber;\n      if (null == hostParentFiber) throw Error(formatProdErrorMessage(160));\n      switch (hostParentFiber.tag) {\n        case 27:\n          var parent$jscomp$0 = hostParentFiber.stateNode,\n            before = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(\n            finishedWork,\n            before,\n            parent$jscomp$0,\n            JSCompiler_inline_result\n          );\n          break;\n        case 5:\n          var parent$149 = hostParentFiber.stateNode;\n          hostParentFiber.flags & 32 &&\n            (setTextContent(parent$149, \"\"), (hostParentFiber.flags &= -33));\n          var before$150 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(\n            finishedWork,\n            before$150,\n            parent$149,\n            JSCompiler_inline_result\n          );\n          break;\n        case 3:\n        case 4:\n          var parent$151 = hostParentFiber.stateNode.containerInfo,\n            before$152 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNodeIntoContainer(\n            finishedWork,\n            before$152,\n            parent$151,\n            JSCompiler_inline_result\n          );\n          break;\n        default:\n          throw Error(formatProdErrorMessage(161));\n      }\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n    finishedWork.flags &= -3;\n  }\n  flags & 4096 && (finishedWork.flags &= -4097);\n}\nfunction recursivelyResetForms(parentFiber) {\n  if (parentFiber.subtreeFlags & 1024)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var fiber = parentFiber;\n      recursivelyResetForms(fiber);\n      5 === fiber.tag &&\n        fiber.flags & 1024 &&\n        ((fiber = fiber.stateNode),\n        (_enabled = !0),\n        fiber.reset(),\n        (_enabled = !1));\n      parentFiber = parentFiber.sibling;\n    }\n}\nfunction recursivelyTraverseAfterMutationEffects(root, parentFiber) {\n  if (parentFiber.subtreeFlags & 9270)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitAfterMutationEffectsOnFiber(parentFiber, root),\n        (parentFiber = parentFiber.sibling);\n  else measureNestedViewTransitions(parentFiber, !1);\n}\nfunction commitAfterMutationEffectsOnFiber(finishedWork, root) {\n  var current = finishedWork.alternate;\n  if (null === current) commitEnterViewTransitions(finishedWork, !1);\n  else\n    switch (finishedWork.tag) {\n      case 3:\n        rootViewTransitionNameCanceled = viewTransitionContextChanged = !1;\n        pushViewTransitionCancelableScope();\n        recursivelyTraverseAfterMutationEffects(root, finishedWork);\n        if (!viewTransitionContextChanged && !rootViewTransitionAffected) {\n          finishedWork = viewTransitionCancelableChildren;\n          if (null !== finishedWork)\n            for (var i = 0; i < finishedWork.length; i += 3) {\n              current = finishedWork[i];\n              var oldName = finishedWork[i + 1];\n              restoreViewTransitionName(current, finishedWork[i + 2]);\n              current = current.ownerDocument.documentElement;\n              null !== current &&\n                current.animate(\n                  { opacity: [0, 0], pointerEvents: [\"none\", \"none\"] },\n                  {\n                    duration: 0,\n                    fill: \"forwards\",\n                    pseudoElement: \"::view-transition-group(\" + oldName + \")\"\n                  }\n                );\n            }\n          finishedWork = root.containerInfo;\n          finishedWork =\n            9 === finishedWork.nodeType\n              ? finishedWork.documentElement\n              : finishedWork.ownerDocument.documentElement;\n          null !== finishedWork &&\n            \"\" === finishedWork.style.viewTransitionName &&\n            ((finishedWork.style.viewTransitionName = \"none\"),\n            finishedWork.animate(\n              { opacity: [0, 0], pointerEvents: [\"none\", \"none\"] },\n              {\n                duration: 0,\n                fill: \"forwards\",\n                pseudoElement: \"::view-transition-group(root)\"\n              }\n            ),\n            finishedWork.animate(\n              { width: [0, 0], height: [0, 0] },\n              {\n                duration: 0,\n                fill: \"forwards\",\n                pseudoElement: \"::view-transition\"\n              }\n            ));\n          rootViewTransitionNameCanceled = !0;\n        }\n        viewTransitionCancelableChildren = null;\n        break;\n      case 5:\n        recursivelyTraverseAfterMutationEffects(root, finishedWork);\n        break;\n      case 4:\n        i = viewTransitionContextChanged;\n        viewTransitionContextChanged = !1;\n        recursivelyTraverseAfterMutationEffects(root, finishedWork);\n        viewTransitionContextChanged && (rootViewTransitionAffected = !0);\n        viewTransitionContextChanged = i;\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          (null !== current.memoizedState\n            ? commitEnterViewTransitions(finishedWork, !1)\n            : recursivelyTraverseAfterMutationEffects(root, finishedWork));\n        break;\n      case 30:\n        i = viewTransitionContextChanged;\n        oldName = pushViewTransitionCancelableScope();\n        viewTransitionContextChanged = !1;\n        recursivelyTraverseAfterMutationEffects(root, finishedWork);\n        viewTransitionContextChanged && (finishedWork.flags |= 4);\n        var props = finishedWork.memoizedProps,\n          state = finishedWork.stateNode;\n        root = getViewTransitionName(props, state);\n        state = getViewTransitionName(current.memoizedProps, state);\n        var className = getViewTransitionClassName(props.default, props.update);\n        \"none\" === className\n          ? (root = !1)\n          : ((props = current.memoizedState),\n            (current.memoizedState = null),\n            (current = finishedWork.child),\n            (viewTransitionHostInstanceIdx = 0),\n            (root = measureViewTransitionHostInstancesRecursive(\n              finishedWork,\n              current,\n              root,\n              state,\n              className,\n              props,\n              !0\n            )),\n            viewTransitionHostInstanceIdx !==\n              (null === props ? 0 : props.length) &&\n              (finishedWork.flags |= 32));\n        0 !== (finishedWork.flags & 4) && root\n          ? (scheduleViewTransitionEvent(\n              finishedWork,\n              finishedWork.memoizedProps.onUpdate\n            ),\n            (viewTransitionCancelableChildren = oldName))\n          : null !== oldName &&\n            (oldName.push.apply(oldName, viewTransitionCancelableChildren),\n            (viewTransitionCancelableChildren = oldName));\n        viewTransitionContextChanged = 0 !== (finishedWork.flags & 32) ? !0 : i;\n        break;\n      default:\n        recursivelyTraverseAfterMutationEffects(root, finishedWork);\n    }\n}\nfunction recursivelyTraverseLayoutEffects(root, parentFiber) {\n  if (parentFiber.subtreeFlags & 8772)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction recursivelyTraverseDisappearLayoutEffects(\n  parentFiber,\n  layoutEffectTraversalFlags$jscomp$0\n) {\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedWork = parentFiber,\n      layoutEffectTraversalFlags = layoutEffectTraversalFlags$jscomp$0;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 14:\n      case 15:\n        commitHookEffectListUnmount(4, finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(\n          finishedWork,\n          layoutEffectTraversalFlags\n        );\n        break;\n      case 1:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        var instance = finishedWork.stateNode;\n        \"function\" === typeof instance.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            finishedWork,\n            finishedWork.return,\n            instance\n          );\n        recursivelyTraverseDisappearLayoutEffects(\n          finishedWork,\n          layoutEffectTraversalFlags\n        );\n        break;\n      case 27:\n        0 !== (layoutEffectTraversalFlags & 2) &&\n          releaseSingletonInstance(\n            finishedWork.stateNode,\n            finishedWork.type,\n            finishedWork.memoizedProps\n          );\n      case 5:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        (5 !== finishedWork.tag && 27 !== finishedWork.tag) ||\n          commitFragmentInstanceDeletionEffects(finishedWork);\n        recursivelyTraverseDisappearLayoutEffects(\n          finishedWork,\n          layoutEffectTraversalFlags\n        );\n        break;\n      case 6:\n        commitFragmentInstanceDeletionEffects(finishedWork);\n        break;\n      case 26:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        instance = finishedWork.stateNode;\n        null !== finishedWork.memoizedState ||\n          null === instance ||\n          offscreenSubtreeWasHidden ||\n          instance.parentNode.removeChild(instance);\n        recursivelyTraverseDisappearLayoutEffects(\n          finishedWork,\n          layoutEffectTraversalFlags\n        );\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseDisappearLayoutEffects(\n            finishedWork,\n            layoutEffectTraversalFlags\n          );\n        break;\n      case 30:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(\n          finishedWork,\n          layoutEffectTraversalFlags\n        );\n        break;\n      case 7:\n        safelyDetachRef(finishedWork, finishedWork.return);\n      default:\n        recursivelyTraverseDisappearLayoutEffects(\n          finishedWork,\n          layoutEffectTraversalFlags\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseReappearLayoutEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  layoutEffectTraversalFlags\n) {\n  layoutEffectTraversalFlags =\n    0 !== (parentFiber.subtreeFlags & 8772)\n      ? layoutEffectTraversalFlags\n      : layoutEffectTraversalFlags & -2;\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var current = parentFiber.alternate,\n      finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      flags = finishedWork.flags,\n      includeWorkInProgressEffects = 0 !== (layoutEffectTraversalFlags & 1);\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          layoutEffectTraversalFlags\n        );\n        commitHookEffectListMount(4, finishedWork);\n        break;\n      case 1:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          layoutEffectTraversalFlags\n        );\n        current = finishedWork;\n        finishedRoot = current.stateNode;\n        if (\"function\" === typeof finishedRoot.componentDidMount)\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        current = finishedWork;\n        finishedRoot = current.updateQueue;\n        if (null !== finishedRoot) {\n          var instance = current.stateNode;\n          try {\n            var hiddenCallbacks = finishedRoot.shared.hiddenCallbacks;\n            if (null !== hiddenCallbacks)\n              for (\n                finishedRoot.shared.hiddenCallbacks = null, finishedRoot = 0;\n                finishedRoot < hiddenCallbacks.length;\n                finishedRoot++\n              )\n                callCallback(hiddenCallbacks[finishedRoot], instance);\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        }\n        includeWorkInProgressEffects &&\n          flags & 64 &&\n          commitClassCallbacks(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 27:\n        0 !== (layoutEffectTraversalFlags & 2) &&\n          commitHostSingletonAcquisition(finishedWork);\n      case 5:\n        (5 !== finishedWork.tag && 27 !== finishedWork.tag) ||\n          commitFragmentInstanceInsertionEffects(finishedWork);\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          layoutEffectTraversalFlags\n        );\n        includeWorkInProgressEffects &&\n          null === current &&\n          flags & 4 &&\n          commitHostMount(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 6:\n        commitFragmentInstanceInsertionEffects(finishedWork);\n        break;\n      case 26:\n        instance = finishedWork.stateNode;\n        null !== finishedWork.memoizedState ||\n          null === instance ||\n          offscreenSubtreeIsHidden ||\n          mountHoistable(\n            getHoistableRoot(instance.ownerDocument),\n            finishedWork.type,\n            instance\n          );\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          layoutEffectTraversalFlags\n        );\n        includeWorkInProgressEffects &&\n          null === current &&\n          flags & 4 &&\n          commitHostMount(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 12:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          layoutEffectTraversalFlags\n        );\n        break;\n      case 31:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          layoutEffectTraversalFlags\n        );\n        includeWorkInProgressEffects &&\n          flags & 4 &&\n          commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n        break;\n      case 13:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          layoutEffectTraversalFlags\n        );\n        includeWorkInProgressEffects &&\n          flags & 4 &&\n          commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseReappearLayoutEffects(\n            finishedRoot,\n            finishedWork,\n            layoutEffectTraversalFlags\n          );\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 30:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          layoutEffectTraversalFlags\n        );\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 7:\n        safelyAttachRef(finishedWork, finishedWork.return);\n      default:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          layoutEffectTraversalFlags\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitOffscreenPassiveMountEffects(current, finishedWork) {\n  var previousCache = null;\n  null !== current &&\n    null !== current.memoizedState &&\n    null !== current.memoizedState.cachePool &&\n    (previousCache = current.memoizedState.cachePool.pool);\n  current = null;\n  null !== finishedWork.memoizedState &&\n    null !== finishedWork.memoizedState.cachePool &&\n    (current = finishedWork.memoizedState.cachePool.pool);\n  current !== previousCache &&\n    (null != current && current.refCount++,\n    null != previousCache && releaseCache(previousCache));\n}\nfunction commitCachePassiveMountEffect(current, finishedWork) {\n  current = null;\n  null !== finishedWork.alternate &&\n    (current = finishedWork.alternate.memoizedState.cache);\n  finishedWork = finishedWork.memoizedState.cache;\n  finishedWork !== current &&\n    (finishedWork.refCount++, null != current && releaseCache(current));\n}\nfunction recursivelyTraversePassiveMountEffects(\n  root,\n  parentFiber,\n  committedLanes,\n  committedTransitions\n) {\n  var isViewTransitionEligible =\n    (committedLanes & 335544064) === committedLanes;\n  if (parentFiber.subtreeFlags & (isViewTransitionEligible ? 10262 : 10256))\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveMountOnFiber(\n        root,\n        parentFiber,\n        committedLanes,\n        committedTransitions\n      ),\n        (parentFiber = parentFiber.sibling);\n  else isViewTransitionEligible && restoreNestedViewTransitions(parentFiber);\n}\nfunction commitPassiveMountOnFiber(\n  finishedRoot,\n  finishedWork,\n  committedLanes,\n  committedTransitions\n) {\n  var isViewTransitionEligible =\n    (committedLanes & 335544064) === committedLanes;\n  isViewTransitionEligible &&\n    null === finishedWork.alternate &&\n    null !== finishedWork.return &&\n    null !== finishedWork.return.alternate &&\n    restoreEnterOrExitViewTransitions(finishedWork);\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 && commitHookEffectListMount(9, finishedWork);\n      break;\n    case 1:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 3:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      isViewTransitionEligible &&\n        rootViewTransitionNameCanceled &&\n        ((finishedRoot = finishedRoot.containerInfo),\n        (finishedRoot =\n          9 === finishedRoot.nodeType\n            ? finishedRoot.body\n            : \"HTML\" === finishedRoot.nodeName\n              ? finishedRoot.ownerDocument.body\n              : finishedRoot),\n        \"root\" === finishedRoot.style.viewTransitionName &&\n          (finishedRoot.style.viewTransitionName = \"\"),\n        (finishedRoot = finishedRoot.ownerDocument.documentElement),\n        null !== finishedRoot &&\n          \"none\" === finishedRoot.style.viewTransitionName &&\n          (finishedRoot.style.viewTransitionName = \"\"));\n      flags & 2048 &&\n        ((flags = null),\n        null !== finishedWork.alternate &&\n          (flags = finishedWork.alternate.memoizedState.cache),\n        (finishedWork = finishedWork.memoizedState.cache),\n        finishedWork !== flags &&\n          (finishedWork.refCount++, null != flags && releaseCache(flags)));\n      break;\n    case 12:\n      if (flags & 2048) {\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n        flags = finishedWork.stateNode;\n        try {\n          var _finishedWork$memoize2 = finishedWork.memoizedProps,\n            id = _finishedWork$memoize2.id,\n            onPostCommit = _finishedWork$memoize2.onPostCommit;\n          \"function\" === typeof onPostCommit &&\n            onPostCommit(\n              id,\n              null === finishedWork.alternate ? \"mount\" : \"update\",\n              flags.passiveEffectDuration,\n              -0\n            );\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      } else\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n      break;\n    case 31:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 13:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 23:\n      break;\n    case 22:\n      _finishedWork$memoize2 = finishedWork.stateNode;\n      id = finishedWork.alternate;\n      null !== finishedWork.memoizedState\n        ? (isViewTransitionEligible &&\n            null !== id &&\n            null === id.memoizedState &&\n            restoreEnterOrExitViewTransitions(id),\n          _finishedWork$memoize2._visibility & 2\n            ? recursivelyTraversePassiveMountEffects(\n                finishedRoot,\n                finishedWork,\n                committedLanes,\n                committedTransitions\n              )\n            : recursivelyTraverseAtomicPassiveEffects(\n                finishedRoot,\n                finishedWork\n              ))\n        : (isViewTransitionEligible &&\n            null !== id &&\n            null !== id.memoizedState &&\n            restoreEnterOrExitViewTransitions(finishedWork),\n          _finishedWork$memoize2._visibility & 2\n            ? recursivelyTraversePassiveMountEffects(\n                finishedRoot,\n                finishedWork,\n                committedLanes,\n                committedTransitions\n              )\n            : ((_finishedWork$memoize2._visibility |= 2),\n              recursivelyTraverseReconnectPassiveEffects(\n                finishedRoot,\n                finishedWork,\n                committedLanes,\n                committedTransitions,\n                0 !== (finishedWork.subtreeFlags & 10256) || !1\n              )));\n      flags & 2048 && commitOffscreenPassiveMountEffects(id, finishedWork);\n      break;\n    case 24:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 &&\n        commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n      break;\n    case 30:\n      isViewTransitionEligible &&\n        ((flags = finishedWork.alternate),\n        null !== flags &&\n          (restoreViewTransitionOnHostInstances(flags.child, !0),\n          restoreViewTransitionOnHostInstances(finishedWork.child, !0)));\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    default:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n  }\n}\nfunction recursivelyTraverseReconnectPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  committedLanes$jscomp$0,\n  committedTransitions$jscomp$0,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects &&\n    (0 !== (parentFiber.subtreeFlags & 10256) || !1);\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      committedLanes = committedLanes$jscomp$0,\n      committedTransitions = committedTransitions$jscomp$0,\n      flags = finishedWork.flags;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(8, finishedWork);\n        break;\n      case 23:\n        break;\n      case 22:\n        var instance = finishedWork.stateNode;\n        null !== finishedWork.memoizedState\n          ? instance._visibility & 2\n            ? recursivelyTraverseReconnectPassiveEffects(\n                finishedRoot,\n                finishedWork,\n                committedLanes,\n                committedTransitions,\n                includeWorkInProgressEffects\n              )\n            : recursivelyTraverseAtomicPassiveEffects(\n                finishedRoot,\n                finishedWork\n              )\n          : ((instance._visibility |= 2),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              includeWorkInProgressEffects\n            ));\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitOffscreenPassiveMountEffects(\n            finishedWork.alternate,\n            finishedWork\n          );\n        break;\n      case 24:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n        break;\n      default:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseAtomicPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber\n) {\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var finishedRoot = finishedRoot$jscomp$0,\n        finishedWork = parentFiber,\n        flags = finishedWork.flags;\n      switch (finishedWork.tag) {\n        case 22:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitOffscreenPassiveMountEffects(\n              finishedWork.alternate,\n              finishedWork\n            );\n          break;\n        case 24:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n          break;\n        default:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n      }\n      parentFiber = parentFiber.sibling;\n    }\n}\nvar suspenseyCommitFlag = 8192;\nfunction recursivelyAccumulateSuspenseyCommit(\n  parentFiber,\n  committedLanes,\n  suspendedState\n) {\n  if (parentFiber.subtreeFlags & suspenseyCommitFlag)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      accumulateSuspenseyCommitOnFiber(\n        parentFiber,\n        committedLanes,\n        suspendedState\n      ),\n        (parentFiber = parentFiber.sibling);\n}\nfunction accumulateSuspenseyCommitOnFiber(\n  fiber,\n  committedLanes,\n  suspendedState\n) {\n  switch (fiber.tag) {\n    case 26:\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n      fiber.flags & suspenseyCommitFlag &&\n        (null !== fiber.memoizedState\n          ? suspendResource(\n              suspendedState,\n              currentHoistableRoot,\n              fiber.memoizedState,\n              fiber.memoizedProps\n            )\n          : ((fiber = fiber.stateNode),\n            (committedLanes & 335544128) === committedLanes &&\n              suspendInstance(suspendedState, fiber)));\n      break;\n    case 5:\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n      fiber.flags & suspenseyCommitFlag &&\n        ((fiber = fiber.stateNode),\n        (committedLanes & 335544128) === committedLanes &&\n          suspendInstance(suspendedState, fiber));\n      break;\n    case 3:\n    case 4:\n      var previousHoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(fiber.stateNode.containerInfo);\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n      currentHoistableRoot = previousHoistableRoot;\n      break;\n    case 22:\n      null === fiber.memoizedState &&\n        ((previousHoistableRoot = fiber.alternate),\n        null !== previousHoistableRoot &&\n        null !== previousHoistableRoot.memoizedState\n          ? ((previousHoistableRoot = suspenseyCommitFlag),\n            (suspenseyCommitFlag = 16777216),\n            recursivelyAccumulateSuspenseyCommit(\n              fiber,\n              committedLanes,\n              suspendedState\n            ),\n            (suspenseyCommitFlag = previousHoistableRoot))\n          : recursivelyAccumulateSuspenseyCommit(\n              fiber,\n              committedLanes,\n              suspendedState\n            ));\n      break;\n    case 30:\n      if (\n        0 !== (fiber.flags & suspenseyCommitFlag) &&\n        ((previousHoistableRoot = fiber.memoizedProps.name),\n        null != previousHoistableRoot && \"auto\" !== previousHoistableRoot)\n      ) {\n        var state = fiber.stateNode;\n        state.paired = null;\n        null === appearingViewTransitions &&\n          (appearingViewTransitions = new Map());\n        appearingViewTransitions.set(previousHoistableRoot, state);\n      }\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n      break;\n    default:\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n  }\n}\nfunction detachAlternateSiblings(parentFiber) {\n  var previousFiber = parentFiber.alternate;\n  if (\n    null !== previousFiber &&\n    ((parentFiber = previousFiber.child), null !== parentFiber)\n  ) {\n    previousFiber.child = null;\n    do\n      (previousFiber = parentFiber.sibling),\n        (parentFiber.sibling = null),\n        (parentFiber = previousFiber);\n    while (null !== parentFiber);\n  }\n}\nfunction recursivelyTraversePassiveUnmountEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveUnmountOnFiber(parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveUnmountOnFiber(finishedWork) {\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      finishedWork.flags & 2048 &&\n        commitHookEffectListUnmount(9, finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 12:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 22:\n      var instance = finishedWork.stateNode;\n      null !== finishedWork.memoizedState &&\n      instance._visibility & 2 &&\n      (null === finishedWork.return || 13 !== finishedWork.return.tag)\n        ? ((instance._visibility &= -3),\n          recursivelyTraverseDisconnectPassiveEffects(finishedWork))\n        : recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    default:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n  }\n}\nfunction recursivelyTraverseDisconnectPassiveEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    deletions = parentFiber;\n    switch (deletions.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, deletions, deletions.return);\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n        break;\n      case 22:\n        i = deletions.stateNode;\n        i._visibility & 2 &&\n          ((i._visibility &= -3),\n          recursivelyTraverseDisconnectPassiveEffects(deletions));\n        break;\n      default:\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n  deletedSubtreeRoot,\n  nearestMountedAncestor\n) {\n  for (; null !== nextEffect; ) {\n    var fiber = nextEffect;\n    switch (fiber.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, fiber, nearestMountedAncestor);\n        break;\n      case 23:\n      case 22:\n        if (\n          null !== fiber.memoizedState &&\n          null !== fiber.memoizedState.cachePool\n        ) {\n          var cache = fiber.memoizedState.cachePool.pool;\n          null != cache && cache.refCount++;\n        }\n        break;\n      case 24:\n        releaseCache(fiber.memoizedState.cache);\n    }\n    cache = fiber.child;\n    if (null !== cache) (cache.return = fiber), (nextEffect = cache);\n    else\n      a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {\n        cache = nextEffect;\n        var sibling = cache.sibling,\n          returnFiber = cache.return;\n        detachFiberAfterEffects(cache);\n        if (cache === fiber) {\n          nextEffect = null;\n          break a;\n        }\n        if (null !== sibling) {\n          sibling.return = returnFiber;\n          nextEffect = sibling;\n          break a;\n        }\n        nextEffect = returnFiber;\n      }\n  }\n}\nvar DefaultAsyncDispatcher = {\n    getCacheForType: function (resourceType) {\n      var cache = readContext(CacheContext),\n        cacheForType = cache.data.get(resourceType);\n      void 0 === cacheForType &&\n        ((cacheForType = resourceType()),\n        cache.data.set(resourceType, cacheForType));\n      return cacheForType;\n    },\n    cacheSignal: function () {\n      return readContext(CacheContext).controller.signal;\n    }\n  },\n  PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map,\n  executionContext = 0,\n  workInProgressRoot = null,\n  workInProgress = null,\n  workInProgressRootRenderLanes = 0,\n  workInProgressSuspendedReason = 0,\n  workInProgressThrownValue = null,\n  workInProgressRootDidSkipSuspendedSiblings = !1,\n  workInProgressRootIsPrerendering = !1,\n  workInProgressRootDidAttachPingListener = !1,\n  entangledRenderLanes = 0,\n  workInProgressRootExitStatus = 0,\n  workInProgressRootSkippedLanes = 0,\n  workInProgressRootInterleavedUpdatedLanes = 0,\n  workInProgressRootPingedLanes = 0,\n  workInProgressDeferredLane = 0,\n  workInProgressSuspendedRetryLanes = 0,\n  workInProgressRootConcurrentErrors = null,\n  workInProgressRootRecoverableErrors = null,\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1,\n  globalMostRecentFallbackTime = 0,\n  globalMostRecentTransitionTime = 0,\n  workInProgressRootRenderTargetTime = Infinity,\n  workInProgressTransitions = null,\n  legacyErrorBoundariesThatAlreadyFailed = null,\n  pendingEffectsStatus = 0,\n  pendingEffectsRoot = null,\n  pendingFinishedWork = null,\n  pendingEffectsLanes = 0,\n  pendingEffectsRemainingLanes = 0,\n  pendingPassiveTransitions = null,\n  pendingRecoverableErrors = null,\n  pendingViewTransition = null,\n  pendingViewTransitionEvents = null,\n  pendingTransitionTypes = null,\n  nestedUpdateCount = 0,\n  rootWithNestedUpdates = null;\nfunction requestUpdateLane() {\n  return 0 !== (executionContext & 2) && 0 !== workInProgressRootRenderLanes\n    ? workInProgressRootRenderLanes & -workInProgressRootRenderLanes\n    : null !== ReactSharedInternals.T\n      ? requestTransitionLane()\n      : resolveUpdatePriority();\n}\nfunction requestDeferredLane() {\n  if (0 === workInProgressDeferredLane)\n    if (0 === (workInProgressRootRenderLanes & 536870912) || isHydrating) {\n      var lane = nextTransitionDeferredLane;\n      nextTransitionDeferredLane <<= 1;\n      0 === (nextTransitionDeferredLane & 3932160) &&\n        (nextTransitionDeferredLane = 262144);\n      workInProgressDeferredLane = lane;\n    } else workInProgressDeferredLane = 536870912;\n  lane = suspenseHandlerStackCursor.current;\n  null !== lane && (lane.flags |= 32);\n  return workInProgressDeferredLane;\n}\nfunction scheduleViewTransitionEvent(fiber, callback) {\n  if (null != callback) {\n    var state = fiber.stateNode,\n      instance = state.ref;\n    null === instance &&\n      (instance = state.ref =\n        createViewTransitionInstance(\n          getViewTransitionName(fiber.memoizedProps, state)\n        ));\n    null === pendingViewTransitionEvents && (pendingViewTransitionEvents = []);\n    pendingViewTransitionEvents.push(callback.bind(null, instance));\n  }\n}\nfunction scheduleUpdateOnFiber(root, fiber, lane) {\n  if (\n    (root === workInProgressRoot &&\n      (2 === workInProgressSuspendedReason ||\n        9 === workInProgressSuspendedReason)) ||\n    null !== root.cancelPendingCommit\n  )\n    prepareFreshStack(root, 0),\n      markRootSuspended(\n        root,\n        workInProgressRootRenderLanes,\n        workInProgressDeferredLane,\n        !1\n      );\n  markRootUpdated$1(root, lane);\n  if (0 === (executionContext & 2) || root !== workInProgressRoot)\n    root === workInProgressRoot &&\n      (0 === (executionContext & 2) &&\n        (workInProgressRootInterleavedUpdatedLanes |= lane),\n      4 === workInProgressRootExitStatus &&\n        markRootSuspended(\n          root,\n          workInProgressRootRenderLanes,\n          workInProgressDeferredLane,\n          !1\n        )),\n      ensureRootIsScheduled(root);\n}\nfunction performWorkOnRoot(root$jscomp$0, lanes, forceSync) {\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  var shouldTimeSlice =\n      (!forceSync &&\n        0 === (lanes & 127) &&\n        0 === (lanes & root$jscomp$0.expiredLanes)) ||\n      checkIfRootIsPrerendering(root$jscomp$0, lanes),\n    exitStatus = shouldTimeSlice\n      ? renderRootConcurrent(root$jscomp$0, lanes)\n      : renderRootSync(root$jscomp$0, lanes, !0),\n    renderWasConcurrent = shouldTimeSlice;\n  do {\n    if (0 === exitStatus) {\n      workInProgressRootIsPrerendering &&\n        !shouldTimeSlice &&\n        markRootSuspended(root$jscomp$0, lanes, 0, !1);\n      break;\n    } else {\n      forceSync = root$jscomp$0.current.alternate;\n      if (\n        renderWasConcurrent &&\n        !isRenderConsistentWithExternalStores(forceSync)\n      ) {\n        exitStatus = renderRootSync(root$jscomp$0, lanes, !1);\n        renderWasConcurrent = !1;\n        continue;\n      }\n      if (2 === exitStatus) {\n        renderWasConcurrent = lanes;\n        if (root$jscomp$0.errorRecoveryDisabledLanes & renderWasConcurrent)\n          var JSCompiler_inline_result = 0;\n        else\n          (JSCompiler_inline_result = root$jscomp$0.pendingLanes & -536870913),\n            (JSCompiler_inline_result =\n              0 !== JSCompiler_inline_result\n                ? JSCompiler_inline_result\n                : JSCompiler_inline_result & 536870912\n                  ? 536870912\n                  : 0);\n        if (0 !== JSCompiler_inline_result) {\n          lanes = JSCompiler_inline_result;\n          a: {\n            var root = root$jscomp$0;\n            exitStatus = workInProgressRootConcurrentErrors;\n            var wasRootDehydrated = root.current.memoizedState.isDehydrated;\n            wasRootDehydrated &&\n              (prepareFreshStack(root, JSCompiler_inline_result).flags |= 256);\n            JSCompiler_inline_result = renderRootSync(\n              root,\n              JSCompiler_inline_result,\n              !1\n            );\n            if (\n              2 !== JSCompiler_inline_result &&\n              6 !== JSCompiler_inline_result\n            ) {\n              if (\n                workInProgressRootDidAttachPingListener &&\n                !wasRootDehydrated\n              ) {\n                root.errorRecoveryDisabledLanes |= renderWasConcurrent;\n                workInProgressRootInterleavedUpdatedLanes |=\n                  renderWasConcurrent;\n                exitStatus = 4;\n                break a;\n              }\n              renderWasConcurrent = workInProgressRootRecoverableErrors;\n              workInProgressRootRecoverableErrors = exitStatus;\n              null !== renderWasConcurrent &&\n                (null === workInProgressRootRecoverableErrors\n                  ? (workInProgressRootRecoverableErrors = renderWasConcurrent)\n                  : workInProgressRootRecoverableErrors.push.apply(\n                      workInProgressRootRecoverableErrors,\n                      renderWasConcurrent\n                    ));\n            }\n            exitStatus = JSCompiler_inline_result;\n          }\n          renderWasConcurrent = !1;\n          if (2 !== exitStatus) continue;\n        }\n      }\n      if (1 === exitStatus) {\n        prepareFreshStack(root$jscomp$0, 0);\n        markRootSuspended(root$jscomp$0, lanes, 0, !0);\n        break;\n      }\n      a: {\n        shouldTimeSlice = root$jscomp$0;\n        renderWasConcurrent = exitStatus;\n        switch (renderWasConcurrent) {\n          case 0:\n          case 1:\n            throw Error(formatProdErrorMessage(345));\n          case 4:\n            if ((lanes & 4194048) !== lanes && (lanes & 62914560) !== lanes)\n              break;\n          case 6:\n            markRootSuspended(\n              shouldTimeSlice,\n              lanes,\n              workInProgressDeferredLane,\n              !workInProgressRootDidSkipSuspendedSiblings\n            );\n            break a;\n          case 2:\n            workInProgressRootRecoverableErrors = null;\n            break;\n          case 3:\n          case 5:\n            break;\n          default:\n            throw Error(formatProdErrorMessage(329));\n        }\n        if (\n          (lanes & 62914560) === lanes &&\n          ((exitStatus = globalMostRecentFallbackTime + 300 - now()),\n          10 < exitStatus)\n        ) {\n          markRootSuspended(\n            shouldTimeSlice,\n            lanes,\n            workInProgressDeferredLane,\n            !workInProgressRootDidSkipSuspendedSiblings\n          );\n          if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;\n          pendingEffectsLanes = lanes;\n          shouldTimeSlice.timeoutHandle = scheduleTimeout(\n            completeRootWhenReady.bind(\n              null,\n              shouldTimeSlice,\n              forceSync,\n              workInProgressRootRecoverableErrors,\n              workInProgressTransitions,\n              workInProgressRootDidIncludeRecursiveRenderUpdate,\n              lanes,\n              workInProgressDeferredLane,\n              workInProgressRootInterleavedUpdatedLanes,\n              workInProgressSuspendedRetryLanes,\n              workInProgressRootDidSkipSuspendedSiblings,\n              renderWasConcurrent,\n              \"Throttled\",\n              -0,\n              0\n            ),\n            exitStatus\n          );\n          break a;\n        }\n        completeRootWhenReady(\n          shouldTimeSlice,\n          forceSync,\n          workInProgressRootRecoverableErrors,\n          workInProgressTransitions,\n          workInProgressRootDidIncludeRecursiveRenderUpdate,\n          lanes,\n          workInProgressDeferredLane,\n          workInProgressRootInterleavedUpdatedLanes,\n          workInProgressSuspendedRetryLanes,\n          workInProgressRootDidSkipSuspendedSiblings,\n          renderWasConcurrent,\n          null,\n          -0,\n          0\n        );\n      }\n    }\n    break;\n  } while (1);\n  ensureRootIsScheduled(root$jscomp$0);\n}\nfunction completeRootWhenReady(\n  root,\n  finishedWork,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  lanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes,\n  didSkipSuspendedSiblings,\n  exitStatus,\n  suspendedCommitReason,\n  completedRenderStartTime,\n  completedRenderEndTime\n) {\n  root.timeoutHandle = -1;\n  var subtreeFlags = finishedWork.subtreeFlags,\n    isViewTransitionEligible = (lanes & 335544064) === lanes;\n  suspendedCommitReason = null;\n  if (\n    isViewTransitionEligible ||\n    subtreeFlags & 8192 ||\n    16785408 === (subtreeFlags & 16785408)\n  )\n    if (\n      ((suspendedCommitReason = {\n        stylesheets: null,\n        count: 0,\n        imgCount: 0,\n        imgBytes: 0,\n        suspenseyImages: [],\n        waitingForImages: !0,\n        waitingForViewTransition: !1,\n        unsuspend: noop$1\n      }),\n      (appearingViewTransitions = null),\n      accumulateSuspenseyCommitOnFiber(\n        finishedWork,\n        lanes,\n        suspendedCommitReason\n      ),\n      isViewTransitionEligible &&\n        ((subtreeFlags = suspendedCommitReason),\n        (isViewTransitionEligible = root.containerInfo),\n        (isViewTransitionEligible = (\n          9 === isViewTransitionEligible.nodeType\n            ? isViewTransitionEligible\n            : isViewTransitionEligible.ownerDocument\n        ).__reactViewTransition),\n        null != isViewTransitionEligible &&\n          (subtreeFlags.count++,\n          (subtreeFlags.waitingForViewTransition = !0),\n          (subtreeFlags = onUnsuspend.bind(subtreeFlags)),\n          isViewTransitionEligible.finished.then(subtreeFlags, subtreeFlags))),\n      (subtreeFlags =\n        (lanes & 62914560) === lanes\n          ? globalMostRecentFallbackTime - now()\n          : (lanes & 4194048) === lanes\n            ? globalMostRecentTransitionTime - now()\n            : 0),\n      (subtreeFlags = waitForCommitToBeReady(\n        suspendedCommitReason,\n        subtreeFlags\n      )),\n      null !== subtreeFlags)\n    ) {\n      pendingEffectsLanes = lanes;\n      root.cancelPendingCommit = subtreeFlags(\n        completeRoot.bind(\n          null,\n          root,\n          finishedWork,\n          lanes,\n          recoverableErrors,\n          transitions,\n          didIncludeRenderPhaseUpdate,\n          spawnedLane,\n          updatedLanes,\n          suspendedRetryLanes,\n          didSkipSuspendedSiblings,\n          exitStatus,\n          suspendedCommitReason,\n          null,\n          completedRenderStartTime,\n          completedRenderEndTime\n        )\n      );\n      markRootSuspended(root, lanes, spawnedLane, !didSkipSuspendedSiblings);\n      return;\n    }\n  completeRoot(\n    root,\n    finishedWork,\n    lanes,\n    recoverableErrors,\n    transitions,\n    didIncludeRenderPhaseUpdate,\n    spawnedLane,\n    updatedLanes,\n    suspendedRetryLanes,\n    didSkipSuspendedSiblings,\n    exitStatus,\n    suspendedCommitReason\n  );\n}\nfunction isRenderConsistentWithExternalStores(finishedWork) {\n  for (var node = finishedWork; ; ) {\n    var tag = node.tag;\n    if (\n      (0 === tag || 11 === tag || 15 === tag) &&\n      node.flags & 16384 &&\n      ((tag = node.updateQueue),\n      null !== tag && ((tag = tag.stores), null !== tag))\n    )\n      for (var i = 0; i < tag.length; i++) {\n        var check = tag[i],\n          getSnapshot = check.getSnapshot;\n        check = check.value;\n        try {\n          if (!objectIs(getSnapshot(), check)) return !1;\n        } catch (error) {\n          return !1;\n        }\n      }\n    tag = node.child;\n    if (node.subtreeFlags & 16384 && null !== tag)\n      (tag.return = node), (node = tag);\n    else {\n      if (node === finishedWork) break;\n      for (; null === node.sibling; ) {\n        if (null === node.return || node.return === finishedWork) return !0;\n        node = node.return;\n      }\n      node.sibling.return = node.return;\n      node = node.sibling;\n    }\n  }\n  return !0;\n}\nfunction markRootSuspended(\n  root,\n  suspendedLanes,\n  spawnedLane,\n  didAttemptEntireTree\n) {\n  suspendedLanes = getEntangledLanes(root, suspendedLanes);\n  suspendedLanes &= ~workInProgressRootPingedLanes;\n  suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;\n  root.suspendedLanes |= suspendedLanes;\n  root.pingedLanes &= ~suspendedLanes;\n  didAttemptEntireTree && (root.warmLanes |= suspendedLanes);\n  didAttemptEntireTree = root.expirationTimes;\n  for (var lanes = suspendedLanes; 0 < lanes; ) {\n    var index$6 = 31 - clz32(lanes),\n      lane = 1 << index$6;\n    didAttemptEntireTree[index$6] = -1;\n    lanes &= ~lane;\n  }\n  0 !== spawnedLane &&\n    markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);\n}\nfunction flushSyncWork$1() {\n  return 0 === (executionContext & 6)\n    ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)\n    : !0;\n}\nfunction resetWorkInProgressStack() {\n  if (null !== workInProgress) {\n    if (0 === workInProgressSuspendedReason)\n      var interruptedWork = workInProgress.return;\n    else\n      (interruptedWork = workInProgress),\n        (lastContextDependency = currentlyRenderingFiber$1 = null),\n        resetHooksOnUnwind(interruptedWork),\n        (thenableState$1 = null),\n        (thenableIndexCounter$1 = 0),\n        (interruptedWork = workInProgress);\n    for (; null !== interruptedWork; )\n      unwindInterruptedWork(interruptedWork.alternate, interruptedWork),\n        (interruptedWork = interruptedWork.return);\n    workInProgress = null;\n  }\n}\nfunction prepareFreshStack(root, lanes) {\n  var timeoutHandle = root.timeoutHandle;\n  -1 !== timeoutHandle &&\n    ((root.timeoutHandle = -1), cancelTimeout(timeoutHandle));\n  timeoutHandle = root.cancelPendingCommit;\n  null !== timeoutHandle &&\n    ((root.cancelPendingCommit = null), timeoutHandle());\n  pendingEffectsLanes = 0;\n  resetWorkInProgressStack();\n  workInProgressRoot = root;\n  workInProgress = timeoutHandle = createWorkInProgress(root.current, null);\n  workInProgressRootRenderLanes = lanes;\n  workInProgressSuspendedReason = 0;\n  workInProgressThrownValue = null;\n  workInProgressRootDidSkipSuspendedSiblings = !1;\n  workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);\n  workInProgressRootDidAttachPingListener = !1;\n  workInProgressSuspendedRetryLanes =\n    workInProgressDeferredLane =\n    workInProgressRootPingedLanes =\n    workInProgressRootInterleavedUpdatedLanes =\n    workInProgressRootSkippedLanes =\n    workInProgressRootExitStatus =\n      0;\n  workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =\n    null;\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1;\n  entangledRenderLanes = getEntangledLanes(root, lanes);\n  finishQueueingConcurrentUpdates();\n  return timeoutHandle;\n}\nfunction handleThrow(root, thrownValue) {\n  currentlyRenderingFiber = null;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  thrownValue === SuspenseException || thrownValue === SuspenseActionException\n    ? ((thrownValue = getSuspendedThenable()),\n      (workInProgressSuspendedReason = 3))\n    : thrownValue === SuspenseyCommitException\n      ? ((thrownValue = getSuspendedThenable()),\n        (workInProgressSuspendedReason = 4))\n      : (workInProgressSuspendedReason =\n          thrownValue === SelectiveHydrationException\n            ? 8\n            : null !== thrownValue &&\n                \"object\" === typeof thrownValue &&\n                \"function\" === typeof thrownValue.then\n              ? 6\n              : 1);\n  workInProgressThrownValue = thrownValue;\n  null === workInProgress &&\n    ((workInProgressRootExitStatus = 1),\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    ));\n}\nfunction shouldRemainOnPreviousScreen() {\n  var handler = suspenseHandlerStackCursor.current;\n  return null === handler\n    ? !0\n    : (workInProgressRootRenderLanes & 4194048) ===\n        workInProgressRootRenderLanes\n      ? null === shellBoundary\n        ? !0\n        : !1\n      : (workInProgressRootRenderLanes & 62914560) ===\n            workInProgressRootRenderLanes ||\n          0 !== (workInProgressRootRenderLanes & 536870912)\n        ? handler === shellBoundary\n        : !1;\n}\nfunction pushDispatcher() {\n  var prevDispatcher = ReactSharedInternals.H;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;\n}\nfunction pushAsyncDispatcher() {\n  var prevAsyncDispatcher = ReactSharedInternals.A;\n  ReactSharedInternals.A = DefaultAsyncDispatcher;\n  return prevAsyncDispatcher;\n}\nfunction renderDidSuspendDelayIfPossible() {\n  workInProgressRootExitStatus = 4;\n  workInProgressRootDidSkipSuspendedSiblings ||\n    ((workInProgressRootRenderLanes & 4194048) !==\n      workInProgressRootRenderLanes &&\n      null !== suspenseHandlerStackCursor.current) ||\n    (workInProgressRootIsPrerendering = !0);\n  (0 === (workInProgressRootSkippedLanes & 134217727) &&\n    0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||\n    null === workInProgressRoot ||\n    markRootSuspended(\n      workInProgressRoot,\n      workInProgressRootRenderLanes,\n      workInProgressDeferredLane,\n      !1\n    );\n}\nfunction renderRootSync(root, lanes, shouldYieldForPrerendering) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes)\n    (workInProgressTransitions = null), prepareFreshStack(root, lanes);\n  lanes = !1;\n  var exitStatus = workInProgressRootExitStatus;\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        var unitOfWork = workInProgress,\n          thrownValue = workInProgressThrownValue;\n        switch (workInProgressSuspendedReason) {\n          case 8:\n            resetWorkInProgressStack();\n            exitStatus = 6;\n            break a;\n          case 3:\n          case 2:\n          case 9:\n          case 6:\n            null === suspenseHandlerStackCursor.current && (lanes = !0);\n            var reason = workInProgressSuspendedReason;\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n            if (\n              shouldYieldForPrerendering &&\n              workInProgressRootIsPrerendering\n            ) {\n              exitStatus = 0;\n              break a;\n            }\n            break;\n          default:\n            (reason = workInProgressSuspendedReason),\n              (workInProgressSuspendedReason = 0),\n              (workInProgressThrownValue = null),\n              throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n        }\n      }\n      workLoopSync();\n      exitStatus = workInProgressRootExitStatus;\n      break;\n    } catch (thrownValue$184) {\n      handleThrow(root, thrownValue$184);\n    }\n  while (1);\n  lanes && root.shellSuspendCounter++;\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  executionContext = prevExecutionContext;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  null === workInProgress &&\n    ((workInProgressRoot = null),\n    (workInProgressRootRenderLanes = 0),\n    finishQueueingConcurrentUpdates());\n  return exitStatus;\n}\nfunction workLoopSync() {\n  for (; null !== workInProgress; ) performUnitOfWork(workInProgress);\n}\nfunction renderRootConcurrent(root, lanes) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes\n    ? ((workInProgressTransitions = null),\n      (workInProgressRootRenderTargetTime = now() + 500),\n      prepareFreshStack(root, lanes))\n    : (workInProgressRootIsPrerendering = checkIfRootIsPrerendering(\n        root,\n        lanes\n      ));\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        lanes = workInProgress;\n        var thrownValue = workInProgressThrownValue;\n        b: switch (workInProgressSuspendedReason) {\n          case 1:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 1);\n            break;\n          case 2:\n          case 9:\n            if (isThenableResolved(thrownValue)) {\n              workInProgressSuspendedReason = 0;\n              workInProgressThrownValue = null;\n              replaySuspendedUnitOfWork(lanes);\n              break;\n            }\n            lanes = function () {\n              (2 !== workInProgressSuspendedReason &&\n                9 !== workInProgressSuspendedReason) ||\n                workInProgressRoot !== root ||\n                (workInProgressSuspendedReason = 7);\n              ensureRootIsScheduled(root);\n            };\n            thrownValue.then(lanes, lanes);\n            break a;\n          case 3:\n            workInProgressSuspendedReason = 7;\n            break a;\n          case 4:\n            workInProgressSuspendedReason = 5;\n            break a;\n          case 7:\n            isThenableResolved(thrownValue)\n              ? ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                replaySuspendedUnitOfWork(lanes))\n              : ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                throwAndUnwindWorkLoop(root, lanes, thrownValue, 7));\n            break;\n          case 5:\n            var resource = null;\n            switch (workInProgress.tag) {\n              case 26:\n                resource = workInProgress.memoizedState;\n              case 5:\n              case 27:\n                var hostFiber = workInProgress;\n                if (\n                  resource\n                    ? preloadResource(resource)\n                    : hostFiber.stateNode.complete\n                ) {\n                  workInProgressSuspendedReason = 0;\n                  workInProgressThrownValue = null;\n                  var sibling = hostFiber.sibling;\n                  if (null !== sibling) workInProgress = sibling;\n                  else {\n                    var returnFiber = hostFiber.return;\n                    null !== returnFiber\n                      ? ((workInProgress = returnFiber),\n                        completeUnitOfWork(returnFiber))\n                      : (workInProgress = null);\n                  }\n                  break b;\n                }\n            }\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 5);\n            break;\n          case 6:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 6);\n            break;\n          case 8:\n            resetWorkInProgressStack();\n            workInProgressRootExitStatus = 6;\n            break a;\n          default:\n            throw Error(formatProdErrorMessage(462));\n        }\n      }\n      workLoopConcurrentByScheduler();\n      break;\n    } catch (thrownValue$186) {\n      handleThrow(root, thrownValue$186);\n    }\n  while (1);\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  executionContext = prevExecutionContext;\n  if (null !== workInProgress) return 0;\n  workInProgressRoot = null;\n  workInProgressRootRenderLanes = 0;\n  finishQueueingConcurrentUpdates();\n  return workInProgressRootExitStatus;\n}\nfunction workLoopConcurrentByScheduler() {\n  for (; null !== workInProgress && !shouldYield(); )\n    performUnitOfWork(workInProgress);\n}\nfunction performUnitOfWork(unitOfWork) {\n  var next = beginWork(unitOfWork.alternate, unitOfWork, entangledRenderLanes);\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction replaySuspendedUnitOfWork(unitOfWork) {\n  var next = unitOfWork;\n  var current = next.alternate;\n  switch (next.tag) {\n    case 15:\n    case 0:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type,\n        void 0,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 11:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type.render,\n        next.ref,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 5:\n      resetHooksOnUnwind(next);\n      var fiber = next;\n      fiber === hydrationParentFiber &&\n        (isHydrating\n          ? (popToNextHostParent(fiber),\n            5 === fiber.tag &&\n              null != fiber.stateNode &&\n              (nextHydratableInstance = fiber.stateNode))\n          : (popToNextHostParent(fiber), (isHydrating = !0)));\n    default:\n      unwindInterruptedWork(current, next),\n        (next = workInProgress =\n          resetWorkInProgress(next, entangledRenderLanes)),\n        (next = beginWork(current, next, entangledRenderLanes));\n  }\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction throwAndUnwindWorkLoop(\n  root,\n  unitOfWork,\n  thrownValue,\n  suspendedReason\n) {\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  resetHooksOnUnwind(unitOfWork);\n  thenableState$1 = null;\n  thenableIndexCounter$1 = 0;\n  var returnFiber = unitOfWork.return;\n  try {\n    if (\n      throwException(\n        root,\n        returnFiber,\n        unitOfWork,\n        thrownValue,\n        workInProgressRootRenderLanes\n      )\n    ) {\n      workInProgressRootExitStatus = 1;\n      logUncaughtError(\n        root,\n        createCapturedValueAtFiber(thrownValue, root.current)\n      );\n      workInProgress = null;\n      return;\n    }\n  } catch (error) {\n    if (null !== returnFiber) throw ((workInProgress = returnFiber), error);\n    workInProgressRootExitStatus = 1;\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    );\n    workInProgress = null;\n    return;\n  }\n  if (unitOfWork.flags & 32768) {\n    if (isHydrating || 1 === suspendedReason) root = !0;\n    else if (\n      workInProgressRootIsPrerendering ||\n      0 !== (workInProgressRootRenderLanes & 536870912)\n    )\n      root = !1;\n    else if (\n      ((workInProgressRootDidSkipSuspendedSiblings = root = !0),\n      2 === suspendedReason ||\n        9 === suspendedReason ||\n        3 === suspendedReason ||\n        6 === suspendedReason)\n    )\n      (suspendedReason = suspenseHandlerStackCursor.current),\n        null !== suspendedReason &&\n          13 === suspendedReason.tag &&\n          (suspendedReason.flags |= 16384);\n    unwindUnitOfWork(unitOfWork, root);\n  } else completeUnitOfWork(unitOfWork);\n}\nfunction completeUnitOfWork(unitOfWork) {\n  var completedWork = unitOfWork;\n  do {\n    if (0 !== (completedWork.flags & 32768)) {\n      unwindUnitOfWork(\n        completedWork,\n        workInProgressRootDidSkipSuspendedSiblings\n      );\n      return;\n    }\n    unitOfWork = completedWork.return;\n    var next = completeWork(\n      completedWork.alternate,\n      completedWork,\n      entangledRenderLanes\n    );\n    if (null !== next) {\n      workInProgress = next;\n      return;\n    }\n    completedWork = completedWork.sibling;\n    if (null !== completedWork) {\n      workInProgress = completedWork;\n      return;\n    }\n    workInProgress = completedWork = unitOfWork;\n  } while (null !== completedWork);\n  0 === workInProgressRootExitStatus && (workInProgressRootExitStatus = 5);\n}\nfunction unwindUnitOfWork(unitOfWork, skipSiblings) {\n  do {\n    var next = unwindWork(unitOfWork.alternate, unitOfWork);\n    if (null !== next) {\n      next.flags &= 32767;\n      workInProgress = next;\n      return;\n    }\n    next = unitOfWork.return;\n    null !== next &&\n      ((next.flags |= 32768), (next.subtreeFlags = 0), (next.deletions = null));\n    if (\n      !skipSiblings &&\n      ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)\n    ) {\n      workInProgress = unitOfWork;\n      return;\n    }\n    workInProgress = unitOfWork = next;\n  } while (null !== unitOfWork);\n  workInProgressRootExitStatus = 6;\n  workInProgress = null;\n}\nfunction completeRoot(\n  root,\n  finishedWork,\n  lanes,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes,\n  didSkipSuspendedSiblings,\n  exitStatus,\n  suspendedState\n) {\n  root.cancelPendingCommit = null;\n  do flushPendingEffects();\n  while (0 !== pendingEffectsStatus);\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  if (null !== finishedWork) {\n    if (finishedWork === root.current) throw Error(formatProdErrorMessage(177));\n    root === workInProgressRoot &&\n      ((workInProgress = workInProgressRoot = null),\n      (workInProgressRootRenderLanes = 0));\n    pendingFinishedWork = finishedWork;\n    pendingEffectsRoot = root;\n    pendingEffectsLanes = lanes;\n    pendingPassiveTransitions = transitions;\n    pendingRecoverableErrors = recoverableErrors;\n    commitRoot(\n      root,\n      finishedWork,\n      lanes,\n      spawnedLane,\n      updatedLanes,\n      suspendedRetryLanes,\n      suspendedState\n    );\n  }\n}\nfunction commitRoot(\n  root,\n  finishedWork,\n  lanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes,\n  suspendedState\n) {\n  var remainingLanes = finishedWork.lanes | finishedWork.childLanes;\n  pendingEffectsRemainingLanes = remainingLanes;\n  remainingLanes |= concurrentlyUpdatedLanes;\n  markRootFinished(\n    root,\n    lanes,\n    remainingLanes,\n    spawnedLane,\n    updatedLanes,\n    suspendedRetryLanes\n  );\n  pendingViewTransitionEvents = null;\n  (lanes & 335544064) === lanes\n    ? ((pendingTransitionTypes = claimQueuedTransitionTypes(root)),\n      (spawnedLane = 10262))\n    : ((pendingTransitionTypes = null), (spawnedLane = 10256));\n  0 !== (finishedWork.subtreeFlags & spawnedLane) ||\n  0 !== (finishedWork.flags & spawnedLane)\n    ? ((root.callbackNode = null),\n      (root.callbackPriority = 0),\n      scheduleCallback$1(NormalPriority$1, function () {\n        flushPassiveEffects();\n        return null;\n      }))\n    : ((root.callbackNode = null), (root.callbackPriority = 0));\n  shouldStartViewTransition = !1;\n  spawnedLane = 0 !== (finishedWork.flags & 13878);\n  if (0 !== (finishedWork.subtreeFlags & 13878) || spawnedLane) {\n    spawnedLane = ReactSharedInternals.T;\n    ReactSharedInternals.T = null;\n    updatedLanes = ReactDOMSharedInternals.p;\n    ReactDOMSharedInternals.p = 2;\n    suspendedRetryLanes = executionContext;\n    executionContext |= 4;\n    try {\n      commitBeforeMutationEffects(root, finishedWork, lanes);\n    } finally {\n      (executionContext = suspendedRetryLanes),\n        (ReactDOMSharedInternals.p = updatedLanes),\n        (ReactSharedInternals.T = spawnedLane);\n    }\n  }\n  pendingEffectsStatus = 1;\n  shouldStartViewTransition\n    ? (pendingViewTransition = startViewTransition(\n        suspendedState,\n        root.containerInfo,\n        pendingTransitionTypes,\n        flushMutationEffects,\n        flushLayoutEffects,\n        flushAfterMutationEffects,\n        flushSpawnedWork,\n        flushPassiveEffects,\n        reportViewTransitionError,\n        null,\n        null\n      ))\n    : (flushMutationEffects(), flushLayoutEffects(), flushSpawnedWork());\n}\nfunction reportViewTransitionError(error) {\n  if (0 !== pendingEffectsStatus) {\n    var onRecoverableError = pendingEffectsRoot.onRecoverableError;\n    onRecoverableError(error, { componentStack: null });\n  }\n}\nfunction flushAfterMutationEffects() {\n  3 === pendingEffectsStatus &&\n    ((pendingEffectsStatus = 0),\n    commitAfterMutationEffectsOnFiber(pendingFinishedWork, pendingEffectsRoot),\n    (pendingEffectsStatus = 4));\n}\nfunction flushMutationEffects() {\n  if (1 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      lanes = pendingEffectsLanes,\n      rootMutationHasEffect = 0 !== (finishedWork.flags & 13878);\n    if (0 !== (finishedWork.subtreeFlags & 13878) || rootMutationHasEffect) {\n      rootMutationHasEffect = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      var prevExecutionContext = executionContext;\n      executionContext |= 4;\n      try {\n        inUpdateViewTransition = rootViewTransitionAffected = !1;\n        commitMutationEffectsOnFiber(finishedWork, root, lanes);\n        lanes = selectionInformation;\n        var curFocusedElem = getActiveElementDeep(root.containerInfo),\n          priorFocusedElem = lanes.focusedElem,\n          priorSelectionRange = lanes.selectionRange;\n        if (\n          curFocusedElem !== priorFocusedElem &&\n          priorFocusedElem &&\n          priorFocusedElem.ownerDocument &&\n          containsNode(\n            priorFocusedElem.ownerDocument.documentElement,\n            priorFocusedElem\n          )\n        ) {\n          if (\n            null !== priorSelectionRange &&\n            hasSelectionCapabilities(priorFocusedElem)\n          ) {\n            var start = priorSelectionRange.start,\n              end = priorSelectionRange.end;\n            void 0 === end && (end = start);\n            if (\"selectionStart\" in priorFocusedElem)\n              (priorFocusedElem.selectionStart = start),\n                (priorFocusedElem.selectionEnd = Math.min(\n                  end,\n                  priorFocusedElem.value.length\n                ));\n            else {\n              var doc = priorFocusedElem.ownerDocument || document,\n                win = (doc && doc.defaultView) || window;\n              if (win.getSelection) {\n                var selection = win.getSelection(),\n                  length = priorFocusedElem.textContent.length,\n                  start$jscomp$0 = Math.min(priorSelectionRange.start, length),\n                  end$jscomp$0 =\n                    void 0 === priorSelectionRange.end\n                      ? start$jscomp$0\n                      : Math.min(priorSelectionRange.end, length);\n                !selection.extend &&\n                  start$jscomp$0 > end$jscomp$0 &&\n                  ((curFocusedElem = end$jscomp$0),\n                  (end$jscomp$0 = start$jscomp$0),\n                  (start$jscomp$0 = curFocusedElem));\n                var startMarker = getNodeForCharacterOffset(\n                    priorFocusedElem,\n                    start$jscomp$0\n                  ),\n                  endMarker = getNodeForCharacterOffset(\n                    priorFocusedElem,\n                    end$jscomp$0\n                  );\n                if (\n                  startMarker &&\n                  endMarker &&\n                  (1 !== selection.rangeCount ||\n                    selection.anchorNode !== startMarker.node ||\n                    selection.anchorOffset !== startMarker.offset ||\n                    selection.focusNode !== endMarker.node ||\n                    selection.focusOffset !== endMarker.offset)\n                ) {\n                  var range = doc.createRange();\n                  range.setStart(startMarker.node, startMarker.offset);\n                  selection.removeAllRanges();\n                  start$jscomp$0 > end$jscomp$0\n                    ? (selection.addRange(range),\n                      selection.extend(endMarker.node, endMarker.offset))\n                    : (range.setEnd(endMarker.node, endMarker.offset),\n                      selection.addRange(range));\n                }\n              }\n            }\n          }\n          doc = [];\n          for (\n            selection = priorFocusedElem;\n            (selection = selection.parentNode);\n\n          )\n            1 === selection.nodeType &&\n              doc.push({\n                element: selection,\n                left: selection.scrollLeft,\n                top: selection.scrollTop\n              });\n          \"function\" === typeof priorFocusedElem.focus &&\n            priorFocusedElem.focus();\n          for (\n            priorFocusedElem = 0;\n            priorFocusedElem < doc.length;\n            priorFocusedElem++\n          ) {\n            var info = doc[priorFocusedElem];\n            info.element.scrollLeft = info.left;\n            info.element.scrollTop = info.top;\n          }\n        }\n        _enabled = !!eventsEnabled;\n        selectionInformation = eventsEnabled = null;\n      } finally {\n        (executionContext = prevExecutionContext),\n          (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = rootMutationHasEffect);\n      }\n    }\n    root.current = finishedWork;\n    pendingEffectsStatus = 2;\n  }\n}\nfunction flushLayoutEffects() {\n  if (2 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      rootHasLayoutEffect = 0 !== (finishedWork.flags & 8772);\n    if (0 !== (finishedWork.subtreeFlags & 8772) || rootHasLayoutEffect) {\n      rootHasLayoutEffect = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      var prevExecutionContext = executionContext;\n      executionContext |= 4;\n      try {\n        commitLayoutEffectOnFiber(root, finishedWork.alternate, finishedWork);\n      } finally {\n        (executionContext = prevExecutionContext),\n          (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = rootHasLayoutEffect);\n      }\n    }\n    pendingEffectsStatus = 3;\n  }\n}\nfunction flushSpawnedWork() {\n  if (4 === pendingEffectsStatus || 3 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var committedViewTransition = pendingViewTransition;\n    pendingViewTransition = null;\n    requestPaint();\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      lanes = pendingEffectsLanes,\n      recoverableErrors = pendingRecoverableErrors,\n      passiveSubtreeMask = (lanes & 335544064) === lanes ? 10262 : 10256;\n    0 !== (finishedWork.subtreeFlags & passiveSubtreeMask) ||\n    0 !== (finishedWork.flags & passiveSubtreeMask)\n      ? (pendingEffectsStatus = 5)\n      : ((pendingEffectsStatus = 0),\n        (pendingFinishedWork = pendingEffectsRoot = null),\n        releaseRootPooledCache(root, root.pendingLanes));\n    passiveSubtreeMask = root.pendingLanes;\n    0 === passiveSubtreeMask && (legacyErrorBoundariesThatAlreadyFailed = null);\n    lanesToEventPriority(lanes);\n    finishedWork = finishedWork.stateNode;\n    if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberRoot)\n      try {\n        injectedHook.onCommitFiberRoot(\n          rendererID,\n          finishedWork,\n          void 0,\n          128 === (finishedWork.current.flags & 128)\n        );\n      } catch (err) {}\n    if (null !== recoverableErrors) {\n      finishedWork = ReactSharedInternals.T;\n      passiveSubtreeMask = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      ReactSharedInternals.T = null;\n      try {\n        for (\n          var onRecoverableError = root.onRecoverableError, i = 0;\n          i < recoverableErrors.length;\n          i++\n        ) {\n          var recoverableError = recoverableErrors[i];\n          onRecoverableError(recoverableError.value, {\n            componentStack: recoverableError.stack\n          });\n        }\n      } finally {\n        (ReactSharedInternals.T = finishedWork),\n          (ReactDOMSharedInternals.p = passiveSubtreeMask);\n      }\n    }\n    recoverableErrors = pendingViewTransitionEvents;\n    onRecoverableError = pendingTransitionTypes;\n    pendingTransitionTypes = null;\n    if (\n      null !== recoverableErrors &&\n      ((pendingViewTransitionEvents = null),\n      null === onRecoverableError && (onRecoverableError = []),\n      null !== committedViewTransition)\n    )\n      for (\n        recoverableError = 0;\n        recoverableError < recoverableErrors.length;\n        recoverableError++\n      )\n        (finishedWork = (0, recoverableErrors[recoverableError])(\n          onRecoverableError\n        )),\n          void 0 !== finishedWork &&\n            committedViewTransition.finished.finally(finishedWork);\n    0 !== (pendingEffectsLanes & 3) && flushPendingEffects();\n    ensureRootIsScheduled(root);\n    passiveSubtreeMask = root.pendingLanes;\n    0 !== (lanes & 261930) && 0 !== (passiveSubtreeMask & 42)\n      ? root === rootWithNestedUpdates\n        ? nestedUpdateCount++\n        : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))\n      : ((nestedUpdateCount = 0), (rootWithNestedUpdates = null));\n    flushSyncWorkAcrossRoots_impl(0, !1);\n  }\n}\nfunction releaseRootPooledCache(root, remainingLanes) {\n  0 === (root.pooledCacheLanes &= remainingLanes) &&\n    ((remainingLanes = root.pooledCache),\n    null != remainingLanes &&\n      ((root.pooledCache = null), releaseCache(remainingLanes)));\n}\nfunction flushPendingEffects() {\n  null !== pendingViewTransition &&\n    (pendingViewTransition.skipTransition(), (pendingViewTransition = null));\n  flushMutationEffects();\n  flushLayoutEffects();\n  flushSpawnedWork();\n  return flushPassiveEffects();\n}\nfunction flushPassiveEffects() {\n  if (5 !== pendingEffectsStatus) return !1;\n  var root = pendingEffectsRoot,\n    remainingLanes = pendingEffectsRemainingLanes;\n  pendingEffectsRemainingLanes = 0;\n  var renderPriority = lanesToEventPriority(pendingEffectsLanes),\n    prevTransition = ReactSharedInternals.T,\n    previousPriority = ReactDOMSharedInternals.p;\n  try {\n    ReactDOMSharedInternals.p = 32 > renderPriority ? 32 : renderPriority;\n    ReactSharedInternals.T = null;\n    renderPriority = pendingPassiveTransitions;\n    pendingPassiveTransitions = null;\n    var root$jscomp$0 = pendingEffectsRoot,\n      lanes = pendingEffectsLanes;\n    pendingEffectsStatus = 0;\n    pendingFinishedWork = pendingEffectsRoot = null;\n    pendingEffectsLanes = 0;\n    if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(331));\n    var prevExecutionContext = executionContext;\n    executionContext |= 4;\n    commitPassiveUnmountOnFiber(root$jscomp$0.current);\n    commitPassiveMountOnFiber(\n      root$jscomp$0,\n      root$jscomp$0.current,\n      lanes,\n      renderPriority\n    );\n    executionContext = prevExecutionContext;\n    flushSyncWorkAcrossRoots_impl(0, !1);\n    if (\n      injectedHook &&\n      \"function\" === typeof injectedHook.onPostCommitFiberRoot\n    )\n      try {\n        injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);\n      } catch (err) {}\n    return !0;\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition),\n      releaseRootPooledCache(root, remainingLanes);\n  }\n}\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n  sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n  sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);\n  rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);\n  null !== rootFiber &&\n    (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));\n}\nfunction captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) {\n  if (3 === sourceFiber.tag)\n    captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n  else\n    for (; null !== nearestMountedAncestor; ) {\n      if (3 === nearestMountedAncestor.tag) {\n        captureCommitPhaseErrorOnRoot(\n          nearestMountedAncestor,\n          sourceFiber,\n          error\n        );\n        break;\n      } else if (1 === nearestMountedAncestor.tag) {\n        var instance = nearestMountedAncestor.stateNode;\n        if (\n          \"function\" ===\n            typeof nearestMountedAncestor.type.getDerivedStateFromError ||\n          (\"function\" === typeof instance.componentDidCatch &&\n            (null === legacyErrorBoundariesThatAlreadyFailed ||\n              !legacyErrorBoundariesThatAlreadyFailed.has(instance)))\n        ) {\n          sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n          error = createClassErrorUpdate(2);\n          instance = enqueueUpdate(nearestMountedAncestor, error, 2);\n          null !== instance &&\n            (initializeClassErrorUpdate(\n              error,\n              instance,\n              nearestMountedAncestor,\n              sourceFiber\n            ),\n            markRootUpdated$1(instance, 2),\n            ensureRootIsScheduled(instance));\n          break;\n        }\n      }\n      nearestMountedAncestor = nearestMountedAncestor.return;\n    }\n}\nfunction attachPingListener(root, wakeable, lanes) {\n  var pingCache = root.pingCache;\n  if (null === pingCache) {\n    pingCache = root.pingCache = new PossiblyWeakMap();\n    var threadIDs = new Set();\n    pingCache.set(wakeable, threadIDs);\n  } else\n    (threadIDs = pingCache.get(wakeable)),\n      void 0 === threadIDs &&\n        ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));\n  threadIDs.has(lanes) ||\n    ((workInProgressRootDidAttachPingListener = !0),\n    threadIDs.add(lanes),\n    (root = pingSuspendedRoot.bind(null, root, wakeable, lanes)),\n    wakeable.then(root, root));\n}\nfunction pingSuspendedRoot(root, wakeable, pingedLanes) {\n  var pingCache = root.pingCache;\n  null !== pingCache && pingCache.delete(wakeable);\n  root.pingedLanes |= root.suspendedLanes & pingedLanes;\n  root.warmLanes &= ~pingedLanes;\n  workInProgressRoot === root &&\n    (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&\n    (4 === workInProgressRootExitStatus ||\n    (3 === workInProgressRootExitStatus &&\n      (workInProgressRootRenderLanes & 62914560) ===\n        workInProgressRootRenderLanes &&\n      300 > now() - globalMostRecentFallbackTime)\n      ? 0 === (executionContext & 2)\n        ? prepareFreshStack(root, 0)\n        : (workInProgressRootPingedLanes |= pingedLanes)\n      : (workInProgressRootPingedLanes |= pingedLanes),\n    workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&\n      (workInProgressSuspendedRetryLanes = 0));\n  ensureRootIsScheduled(root);\n}\nfunction retryTimedOutBoundary(boundaryFiber, retryLane) {\n  0 === retryLane && (retryLane = claimNextRetryLane());\n  boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n  null !== boundaryFiber &&\n    (markRootUpdated$1(boundaryFiber, retryLane),\n    ensureRootIsScheduled(boundaryFiber));\n}\nfunction retryDehydratedSuspenseBoundary(boundaryFiber) {\n  var suspenseState = boundaryFiber.memoizedState,\n    retryLane = 0;\n  null !== suspenseState && (retryLane = suspenseState.retryLane);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction resolveRetryWakeable(boundaryFiber, wakeable) {\n  var retryLane = 0;\n  switch (boundaryFiber.tag) {\n    case 31:\n    case 13:\n      var retryCache = boundaryFiber.stateNode;\n      var suspenseState = boundaryFiber.memoizedState;\n      null !== suspenseState && (retryLane = suspenseState.retryLane);\n      break;\n    case 19:\n      retryCache = boundaryFiber.stateNode;\n      break;\n    case 22:\n      retryCache = boundaryFiber.stateNode._retryCache;\n      break;\n    default:\n      throw Error(formatProdErrorMessage(314));\n  }\n  null !== retryCache && retryCache.delete(wakeable);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction scheduleCallback$1(priorityLevel, callback) {\n  return scheduleCallback$3(priorityLevel, callback);\n}\nvar firstScheduledRoot = null,\n  lastScheduledRoot = null,\n  didScheduleMicrotask = !1,\n  mightHavePendingSyncWork = !1,\n  isFlushingWork = !1,\n  currentEventTransitionLane = 0;\nfunction ensureRootIsScheduled(root) {\n  root !== lastScheduledRoot &&\n    null === root.next &&\n    (null === lastScheduledRoot\n      ? (firstScheduledRoot = lastScheduledRoot = root)\n      : (lastScheduledRoot = lastScheduledRoot.next = root));\n  mightHavePendingSyncWork = !0;\n  didScheduleMicrotask ||\n    ((didScheduleMicrotask = !0), scheduleImmediateRootScheduleTask());\n}\nfunction flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {\n  if (!isFlushingWork && mightHavePendingSyncWork) {\n    isFlushingWork = !0;\n    do {\n      var didPerformSomeWork = !1;\n      for (var root$190 = firstScheduledRoot; null !== root$190; ) {\n        if (!onlyLegacy)\n          if (0 !== syncTransitionLanes) {\n            var pendingLanes = root$190.pendingLanes;\n            if (0 === pendingLanes) var JSCompiler_inline_result = 0;\n            else {\n              var suspendedLanes = root$190.suspendedLanes,\n                pingedLanes = root$190.pingedLanes;\n              JSCompiler_inline_result =\n                (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;\n              JSCompiler_inline_result &=\n                pendingLanes & ~(suspendedLanes & ~pingedLanes);\n              JSCompiler_inline_result =\n                JSCompiler_inline_result & 201326741\n                  ? (JSCompiler_inline_result & 201326741) | 1\n                  : JSCompiler_inline_result\n                    ? JSCompiler_inline_result | 2\n                    : 0;\n            }\n            0 !== JSCompiler_inline_result &&\n              ((didPerformSomeWork = !0),\n              performSyncWorkOnRoot(root$190, JSCompiler_inline_result));\n          } else\n            (JSCompiler_inline_result = workInProgressRootRenderLanes),\n              (JSCompiler_inline_result = getNextLanes(\n                root$190,\n                root$190 === workInProgressRoot ? JSCompiler_inline_result : 0,\n                null !== root$190.cancelPendingCommit ||\n                  -1 !== root$190.timeoutHandle\n              )),\n              0 === (JSCompiler_inline_result & 3) ||\n                checkIfRootIsPrerendering(root$190, JSCompiler_inline_result) ||\n                ((didPerformSomeWork = !0),\n                performSyncWorkOnRoot(root$190, JSCompiler_inline_result));\n        root$190 = root$190.next;\n      }\n    } while (didPerformSomeWork);\n    isFlushingWork = !1;\n  }\n}\nfunction processRootScheduleInImmediateTask() {\n  processRootScheduleInMicrotask();\n}\nfunction processRootScheduleInMicrotask() {\n  mightHavePendingSyncWork = didScheduleMicrotask = !1;\n  var syncTransitionLanes = 0;\n  0 !== currentEventTransitionLane &&\n    shouldAttemptEagerTransition() &&\n    (syncTransitionLanes = currentEventTransitionLane);\n  for (\n    var currentTime = now(), prev = null, root = firstScheduledRoot;\n    null !== root;\n\n  ) {\n    var next = root.next,\n      nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);\n    if (0 === nextLanes)\n      (root.next = null),\n        null === prev ? (firstScheduledRoot = next) : (prev.next = next),\n        null === next && (lastScheduledRoot = prev);\n    else if (\n      ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))\n    )\n      mightHavePendingSyncWork = !0;\n    root = next;\n  }\n  (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus) ||\n    flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);\n  0 !== currentEventTransitionLane && (currentEventTransitionLane = 0);\n}\nfunction scheduleTaskForRootDuringMicrotask(root, currentTime) {\n  for (\n    var suspendedLanes = root.suspendedLanes,\n      pingedLanes = root.pingedLanes,\n      expirationTimes = root.expirationTimes,\n      lanes = root.pendingLanes & -62914561;\n    0 < lanes;\n\n  ) {\n    var index$5 = 31 - clz32(lanes),\n      lane = 1 << index$5,\n      expirationTime = expirationTimes[index$5];\n    if (-1 === expirationTime) {\n      if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))\n        expirationTimes[index$5] = computeExpirationTime(lane, currentTime);\n    } else expirationTime <= currentTime && (root.expiredLanes |= lane);\n    lanes &= ~lane;\n  }\n  currentTime = workInProgressRoot;\n  suspendedLanes = workInProgressRootRenderLanes;\n  suspendedLanes = getNextLanes(\n    root,\n    root === currentTime ? suspendedLanes : 0,\n    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n  );\n  pingedLanes = root.callbackNode;\n  if (\n    0 === suspendedLanes ||\n    (root === currentTime &&\n      (2 === workInProgressSuspendedReason ||\n        9 === workInProgressSuspendedReason)) ||\n    null !== root.cancelPendingCommit\n  )\n    return (\n      null !== pingedLanes &&\n        null !== pingedLanes &&\n        cancelCallback$1(pingedLanes),\n      (root.callbackNode = null),\n      (root.callbackPriority = 0)\n    );\n  if (\n    0 === (suspendedLanes & 3) ||\n    checkIfRootIsPrerendering(root, suspendedLanes)\n  ) {\n    currentTime = suspendedLanes & -suspendedLanes;\n    if (currentTime === root.callbackPriority) return currentTime;\n    null !== pingedLanes && cancelCallback$1(pingedLanes);\n    switch (lanesToEventPriority(suspendedLanes)) {\n      case 2:\n      case 8:\n        suspendedLanes = UserBlockingPriority;\n        break;\n      case 32:\n        suspendedLanes = NormalPriority$1;\n        break;\n      case 268435456:\n        suspendedLanes = IdlePriority;\n        break;\n      default:\n        suspendedLanes = NormalPriority$1;\n    }\n    pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);\n    suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes);\n    root.callbackPriority = currentTime;\n    root.callbackNode = suspendedLanes;\n    return currentTime;\n  }\n  null !== pingedLanes && null !== pingedLanes && cancelCallback$1(pingedLanes);\n  root.callbackPriority = 2;\n  root.callbackNode = null;\n  return 2;\n}\nfunction performWorkOnRootViaSchedulerTask(root, didTimeout) {\n  if (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus)\n    return (root.callbackNode = null), (root.callbackPriority = 0), null;\n  var originalCallbackNode = root.callbackNode;\n  if (flushPendingEffects() && root.callbackNode !== originalCallbackNode)\n    return null;\n  var workInProgressRootRenderLanes$jscomp$0 = workInProgressRootRenderLanes;\n  workInProgressRootRenderLanes$jscomp$0 = getNextLanes(\n    root,\n    root === workInProgressRoot ? workInProgressRootRenderLanes$jscomp$0 : 0,\n    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n  );\n  if (0 === workInProgressRootRenderLanes$jscomp$0) return null;\n  performWorkOnRoot(root, workInProgressRootRenderLanes$jscomp$0, didTimeout);\n  scheduleTaskForRootDuringMicrotask(root, now());\n  return null != root.callbackNode && root.callbackNode === originalCallbackNode\n    ? performWorkOnRootViaSchedulerTask.bind(null, root)\n    : null;\n}\nfunction performSyncWorkOnRoot(root, lanes) {\n  if (flushPendingEffects()) return null;\n  performWorkOnRoot(root, lanes, !0);\n}\nfunction scheduleImmediateRootScheduleTask() {\n  scheduleMicrotask(function () {\n    0 !== (executionContext & 6)\n      ? scheduleCallback$3(\n          ImmediatePriority,\n          processRootScheduleInImmediateTask\n        )\n      : processRootScheduleInMicrotask();\n  });\n}\nfunction requestTransitionLane() {\n  if (0 === currentEventTransitionLane) {\n    var actionScopeLane = currentEntangledLane;\n    0 === actionScopeLane &&\n      ((actionScopeLane = nextTransitionUpdateLane),\n      (nextTransitionUpdateLane <<= 1),\n      0 === (nextTransitionUpdateLane & 261888) &&\n        (nextTransitionUpdateLane = 256));\n    currentEventTransitionLane = actionScopeLane;\n  }\n  return currentEventTransitionLane;\n}\nfunction coerceFormActionProp(actionProp) {\n  return null == actionProp ||\n    \"symbol\" === typeof actionProp ||\n    \"boolean\" === typeof actionProp\n    ? null\n    : \"function\" === typeof actionProp\n      ? actionProp\n      : sanitizeURL(actionProp);\n}\nfunction extractEvents$1(\n  dispatchQueue,\n  domEventName,\n  maybeTargetInst,\n  nativeEvent,\n  nativeEventTarget\n) {\n  if (\n    \"submit\" === domEventName &&\n    maybeTargetInst &&\n    maybeTargetInst.stateNode === nativeEventTarget\n  ) {\n    var action = coerceFormActionProp(\n        (nativeEventTarget[internalPropsKey] || null).action\n      ),\n      submitter = nativeEvent.submitter;\n    submitter &&\n      ((domEventName = (domEventName = submitter[internalPropsKey] || null)\n        ? coerceFormActionProp(domEventName.formAction)\n        : submitter.getAttribute(\"formAction\")),\n      null !== domEventName && ((action = domEventName), (submitter = null)));\n    var event = new SyntheticEvent(\n      \"action\",\n      \"action\",\n      null,\n      nativeEvent,\n      nativeEventTarget\n    );\n    dispatchQueue.push({\n      event: event,\n      listeners: [\n        {\n          instance: null,\n          listener: function () {\n            if (nativeEvent.defaultPrevented) {\n              if (0 !== currentEventTransitionLane) {\n                var formData = new FormData(nativeEventTarget, submitter);\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  null,\n                  formData\n                );\n              }\n            } else\n              \"function\" === typeof action &&\n                (event.preventDefault(),\n                (formData = new FormData(nativeEventTarget, submitter)),\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  action,\n                  formData\n                ));\n          },\n          currentTarget: nativeEventTarget\n        }\n      ]\n    });\n  }\n}\nfor (\n  var i$jscomp$inline_1667 = 0;\n  i$jscomp$inline_1667 < simpleEventPluginEvents.length;\n  i$jscomp$inline_1667++\n) {\n  var eventName$jscomp$inline_1668 =\n      simpleEventPluginEvents[i$jscomp$inline_1667],\n    domEventName$jscomp$inline_1669 =\n      eventName$jscomp$inline_1668.toLowerCase(),\n    capitalizedEvent$jscomp$inline_1670 =\n      eventName$jscomp$inline_1668[0].toUpperCase() +\n      eventName$jscomp$inline_1668.slice(1);\n  registerSimpleEvent(\n    domEventName$jscomp$inline_1669,\n    \"on\" + capitalizedEvent$jscomp$inline_1670\n  );\n}\nregisterSimpleEvent(ANIMATION_END, \"onAnimationEnd\");\nregisterSimpleEvent(ANIMATION_ITERATION, \"onAnimationIteration\");\nregisterSimpleEvent(ANIMATION_START, \"onAnimationStart\");\nregisterSimpleEvent(\"dblclick\", \"onDoubleClick\");\nregisterSimpleEvent(\"focusin\", \"onFocus\");\nregisterSimpleEvent(\"focusout\", \"onBlur\");\nregisterSimpleEvent(TRANSITION_RUN, \"onTransitionRun\");\nregisterSimpleEvent(TRANSITION_START, \"onTransitionStart\");\nregisterSimpleEvent(TRANSITION_CANCEL, \"onTransitionCancel\");\nregisterSimpleEvent(TRANSITION_END, \"onTransitionEnd\");\nregisterDirectEvent(\"onMouseEnter\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onMouseLeave\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onPointerEnter\", [\"pointerout\", \"pointerover\"]);\nregisterDirectEvent(\"onPointerLeave\", [\"pointerout\", \"pointerover\"]);\nregisterTwoPhaseEvent(\n  \"onChange\",\n  \"change click focusin focusout input keydown keyup selectionchange\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onSelect\",\n  \"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\n    \" \"\n  )\n);\nregisterTwoPhaseEvent(\"onBeforeInput\", [\n  \"compositionend\",\n  \"keypress\",\n  \"textInput\",\n  \"paste\"\n]);\nregisterTwoPhaseEvent(\n  \"onCompositionEnd\",\n  \"compositionend focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionStart\",\n  \"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionUpdate\",\n  \"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \")\n);\nvar mediaEventTypes =\n    \"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\n      \" \"\n    ),\n  nonDelegatedEvents = new Set(\n    \"beforetoggle cancel close invalid load scroll scrollend toggle\"\n      .split(\" \")\n      .concat(mediaEventTypes)\n  );\nfunction processDispatchQueue(dispatchQueue, eventSystemFlags) {\n  eventSystemFlags = 0 !== (eventSystemFlags & 4);\n  for (var i = 0; i < dispatchQueue.length; i++) {\n    var _dispatchQueue$i = dispatchQueue[i],\n      event = _dispatchQueue$i.event;\n    _dispatchQueue$i = _dispatchQueue$i.listeners;\n    a: {\n      var previousInstance = void 0;\n      if (eventSystemFlags)\n        for (\n          var i$jscomp$0 = _dispatchQueue$i.length - 1;\n          0 <= i$jscomp$0;\n          i$jscomp$0--\n        ) {\n          var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],\n            instance = _dispatchListeners$i.instance,\n            currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n      else\n        for (\n          i$jscomp$0 = 0;\n          i$jscomp$0 < _dispatchQueue$i.length;\n          i$jscomp$0++\n        ) {\n          _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];\n          instance = _dispatchListeners$i.instance;\n          currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n    }\n  }\n}\nfunction listenToNonDelegatedEvent(domEventName, targetElement) {\n  var JSCompiler_inline_result = targetElement[internalEventHandlersKey];\n  void 0 === JSCompiler_inline_result &&\n    (JSCompiler_inline_result = targetElement[internalEventHandlersKey] =\n      new Set());\n  var listenerSetKey = domEventName + \"__bubble\";\n  JSCompiler_inline_result.has(listenerSetKey) ||\n    (addTrappedEventListener(targetElement, domEventName, 2, !1),\n    JSCompiler_inline_result.add(listenerSetKey));\n}\nfunction listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n  var eventSystemFlags = 0;\n  isCapturePhaseListener && (eventSystemFlags |= 4);\n  addTrappedEventListener(\n    target,\n    domEventName,\n    eventSystemFlags,\n    isCapturePhaseListener\n  );\n}\nvar listeningMarker = \"_reactListening\" + Math.random().toString(36).slice(2);\nfunction listenToAllSupportedEvents(rootContainerElement) {\n  if (!rootContainerElement[listeningMarker]) {\n    rootContainerElement[listeningMarker] = !0;\n    allNativeEvents.forEach(function (domEventName) {\n      \"selectionchange\" !== domEventName &&\n        (nonDelegatedEvents.has(domEventName) ||\n          listenToNativeEvent(domEventName, !1, rootContainerElement),\n        listenToNativeEvent(domEventName, !0, rootContainerElement));\n    });\n    var ownerDocument =\n      9 === rootContainerElement.nodeType\n        ? rootContainerElement\n        : rootContainerElement.ownerDocument;\n    null === ownerDocument ||\n      ownerDocument[listeningMarker] ||\n      ((ownerDocument[listeningMarker] = !0),\n      listenToNativeEvent(\"selectionchange\", !1, ownerDocument));\n  }\n}\nfunction addTrappedEventListener(\n  targetContainer,\n  domEventName,\n  eventSystemFlags,\n  isCapturePhaseListener\n) {\n  switch (getEventPriority(domEventName)) {\n    case 2:\n      var listenerWrapper = dispatchDiscreteEvent;\n      break;\n    case 8:\n      listenerWrapper = dispatchContinuousEvent;\n      break;\n    default:\n      listenerWrapper = dispatchEvent;\n  }\n  eventSystemFlags = listenerWrapper.bind(\n    null,\n    domEventName,\n    eventSystemFlags,\n    targetContainer\n  );\n  listenerWrapper = void 0;\n  !passiveBrowserEventsSupported ||\n    (\"touchstart\" !== domEventName &&\n      \"touchmove\" !== domEventName &&\n      \"wheel\" !== domEventName) ||\n    (listenerWrapper = !0);\n  isCapturePhaseListener\n    ? void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          capture: !0,\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)\n    : void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !1);\n}\nfunction dispatchEventForPluginEventSystem(\n  domEventName,\n  eventSystemFlags,\n  nativeEvent,\n  targetInst$jscomp$0,\n  targetContainer\n) {\n  var ancestorInst = targetInst$jscomp$0;\n  if (\n    0 === (eventSystemFlags & 1) &&\n    0 === (eventSystemFlags & 2) &&\n    null !== targetInst$jscomp$0\n  )\n    a: for (;;) {\n      if (null === targetInst$jscomp$0) return;\n      var nodeTag = targetInst$jscomp$0.tag;\n      if (3 === nodeTag || 4 === nodeTag) {\n        var container = targetInst$jscomp$0.stateNode.containerInfo;\n        if (container === targetContainer) break;\n        if (4 === nodeTag)\n          for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {\n            var grandTag = nodeTag.tag;\n            if (\n              (3 === grandTag || 4 === grandTag) &&\n              nodeTag.stateNode.containerInfo === targetContainer\n            )\n              return;\n            nodeTag = nodeTag.return;\n          }\n        for (; null !== container; ) {\n          nodeTag = getClosestInstanceFromNode(container);\n          if (null === nodeTag) return;\n          grandTag = nodeTag.tag;\n          if (\n            5 === grandTag ||\n            6 === grandTag ||\n            26 === grandTag ||\n            27 === grandTag\n          ) {\n            targetInst$jscomp$0 = ancestorInst = nodeTag;\n            continue a;\n          }\n          container = container.parentNode;\n        }\n      }\n      targetInst$jscomp$0 = targetInst$jscomp$0.return;\n    }\n  batchedUpdates$1(function () {\n    var targetInst = ancestorInst,\n      nativeEventTarget = getEventTarget(nativeEvent),\n      dispatchQueue = [];\n    a: {\n      var reactName = topLevelEventsToReactNames.get(domEventName);\n      if (void 0 !== reactName) {\n        var SyntheticEventCtor = SyntheticEvent,\n          reactEventType = domEventName;\n        switch (domEventName) {\n          case \"keypress\":\n            if (0 === getEventCharCode(nativeEvent)) break a;\n          case \"keydown\":\n          case \"keyup\":\n            SyntheticEventCtor = SyntheticKeyboardEvent;\n            break;\n          case \"focusin\":\n            reactEventType = \"focus\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"focusout\":\n            reactEventType = \"blur\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"beforeblur\":\n          case \"afterblur\":\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"click\":\n            if (2 === nativeEvent.button) break a;\n          case \"auxclick\":\n          case \"dblclick\":\n          case \"mousedown\":\n          case \"mousemove\":\n          case \"mouseup\":\n          case \"mouseout\":\n          case \"mouseover\":\n          case \"contextmenu\":\n            SyntheticEventCtor = SyntheticMouseEvent;\n            break;\n          case \"drag\":\n          case \"dragend\":\n          case \"dragenter\":\n          case \"dragexit\":\n          case \"dragleave\":\n          case \"dragover\":\n          case \"dragstart\":\n          case \"drop\":\n            SyntheticEventCtor = SyntheticDragEvent;\n            break;\n          case \"touchcancel\":\n          case \"touchend\":\n          case \"touchmove\":\n          case \"touchstart\":\n            SyntheticEventCtor = SyntheticTouchEvent;\n            break;\n          case ANIMATION_END:\n          case ANIMATION_ITERATION:\n          case ANIMATION_START:\n            SyntheticEventCtor = SyntheticAnimationEvent;\n            break;\n          case TRANSITION_END:\n            SyntheticEventCtor = SyntheticTransitionEvent;\n            break;\n          case \"scroll\":\n          case \"scrollend\":\n            SyntheticEventCtor = SyntheticUIEvent;\n            break;\n          case \"wheel\":\n            SyntheticEventCtor = SyntheticWheelEvent;\n            break;\n          case \"copy\":\n          case \"cut\":\n          case \"paste\":\n            SyntheticEventCtor = SyntheticClipboardEvent;\n            break;\n          case \"gotpointercapture\":\n          case \"lostpointercapture\":\n          case \"pointercancel\":\n          case \"pointerdown\":\n          case \"pointermove\":\n          case \"pointerout\":\n          case \"pointerover\":\n          case \"pointerup\":\n            SyntheticEventCtor = SyntheticPointerEvent;\n            break;\n          case \"submit\":\n            SyntheticEventCtor = SyntheticSubmitEvent;\n            break;\n          case \"toggle\":\n          case \"beforetoggle\":\n            SyntheticEventCtor = SyntheticToggleEvent;\n        }\n        var inCapturePhase = 0 !== (eventSystemFlags & 4),\n          accumulateTargetOnly =\n            !inCapturePhase &&\n            (\"scroll\" === domEventName || \"scrollend\" === domEventName),\n          reactEventName = inCapturePhase\n            ? null !== reactName\n              ? reactName + \"Capture\"\n              : null\n            : reactName;\n        inCapturePhase = [];\n        for (\n          var instance = targetInst, lastHostComponent;\n          null !== instance;\n\n        ) {\n          var _instance = instance;\n          lastHostComponent = _instance.stateNode;\n          _instance = _instance.tag;\n          (5 !== _instance && 26 !== _instance && 27 !== _instance) ||\n            null === lastHostComponent ||\n            null === reactEventName ||\n            ((_instance = getListener(instance, reactEventName)),\n            null != _instance &&\n              inCapturePhase.push(\n                createDispatchListener(instance, _instance, lastHostComponent)\n              ));\n          if (accumulateTargetOnly) break;\n          instance = instance.return;\n        }\n        0 < inCapturePhase.length &&\n          ((reactName = new SyntheticEventCtor(\n            reactName,\n            reactEventType,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: reactName, listeners: inCapturePhase }));\n      }\n    }\n    if (0 === (eventSystemFlags & 7)) {\n      a: {\n        SyntheticEventCtor =\n          \"mouseover\" === domEventName || \"pointerover\" === domEventName;\n        reactName =\n          \"mouseout\" === domEventName || \"pointerout\" === domEventName;\n        if (\n          SyntheticEventCtor &&\n          nativeEvent !== currentReplayingEvent &&\n          (reactEventType =\n            nativeEvent.relatedTarget || nativeEvent.fromElement) &&\n          (getClosestInstanceFromNode(reactEventType) ||\n            reactEventType[internalContainerInstanceKey])\n        )\n          break a;\n        if (reactName || SyntheticEventCtor) {\n          reactEventType =\n            nativeEventTarget.window === nativeEventTarget\n              ? nativeEventTarget\n              : (SyntheticEventCtor = nativeEventTarget.ownerDocument)\n                ? SyntheticEventCtor.defaultView ||\n                  SyntheticEventCtor.parentWindow\n                : window;\n          if (reactName) {\n            if (\n              ((SyntheticEventCtor =\n                nativeEvent.relatedTarget || nativeEvent.toElement),\n              (reactName = targetInst),\n              (SyntheticEventCtor = SyntheticEventCtor\n                ? getClosestInstanceFromNode(SyntheticEventCtor)\n                : null),\n              null !== SyntheticEventCtor &&\n                ((accumulateTargetOnly =\n                  getNearestMountedFiber(SyntheticEventCtor)),\n                (inCapturePhase = SyntheticEventCtor.tag),\n                SyntheticEventCtor !== accumulateTargetOnly ||\n                  (5 !== inCapturePhase &&\n                    27 !== inCapturePhase &&\n                    6 !== inCapturePhase)))\n            )\n              SyntheticEventCtor = null;\n          } else (reactName = null), (SyntheticEventCtor = targetInst);\n          if (reactName !== SyntheticEventCtor) {\n            inCapturePhase = SyntheticMouseEvent;\n            _instance = \"onMouseLeave\";\n            reactEventName = \"onMouseEnter\";\n            instance = \"mouse\";\n            if (\"pointerout\" === domEventName || \"pointerover\" === domEventName)\n              (inCapturePhase = SyntheticPointerEvent),\n                (_instance = \"onPointerLeave\"),\n                (reactEventName = \"onPointerEnter\"),\n                (instance = \"pointer\");\n            accumulateTargetOnly =\n              null == reactName\n                ? reactEventType\n                : getNodeFromInstance(reactName);\n            lastHostComponent =\n              null == SyntheticEventCtor\n                ? reactEventType\n                : getNodeFromInstance(SyntheticEventCtor);\n            reactEventType = new inCapturePhase(\n              _instance,\n              instance + \"leave\",\n              reactName,\n              nativeEvent,\n              nativeEventTarget\n            );\n            reactEventType.target = accumulateTargetOnly;\n            reactEventType.relatedTarget = lastHostComponent;\n            _instance = null;\n            getClosestInstanceFromNode(nativeEventTarget) === targetInst &&\n              ((inCapturePhase = new inCapturePhase(\n                reactEventName,\n                instance + \"enter\",\n                SyntheticEventCtor,\n                nativeEvent,\n                nativeEventTarget\n              )),\n              (inCapturePhase.target = lastHostComponent),\n              (inCapturePhase.relatedTarget = accumulateTargetOnly),\n              (_instance = inCapturePhase));\n            accumulateTargetOnly = _instance;\n            inCapturePhase =\n              reactName && SyntheticEventCtor\n                ? getLowestCommonAncestor(\n                    reactName,\n                    SyntheticEventCtor,\n                    getParent\n                  )\n                : null;\n            null !== reactName &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                reactEventType,\n                reactName,\n                inCapturePhase,\n                !1\n              );\n            null !== SyntheticEventCtor &&\n              null !== accumulateTargetOnly &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                accumulateTargetOnly,\n                SyntheticEventCtor,\n                inCapturePhase,\n                !0\n              );\n          }\n        }\n      }\n      a: {\n        reactName = targetInst ? getNodeFromInstance(targetInst) : window;\n        SyntheticEventCtor =\n          reactName.nodeName && reactName.nodeName.toLowerCase();\n        if (\n          \"select\" === SyntheticEventCtor ||\n          (\"input\" === SyntheticEventCtor && \"file\" === reactName.type)\n        )\n          var getTargetInstFunc = getTargetInstForChangeEvent;\n        else if (isTextInputElement(reactName))\n          if (isInputEventSupported)\n            getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n          else {\n            getTargetInstFunc = getTargetInstForInputEventPolyfill;\n            var handleEventFunc = handleEventsForInputEventPolyfill;\n          }\n        else\n          (SyntheticEventCtor = reactName.nodeName),\n            !SyntheticEventCtor ||\n            \"input\" !== SyntheticEventCtor.toLowerCase() ||\n            (\"checkbox\" !== reactName.type && \"radio\" !== reactName.type)\n              ? targetInst &&\n                isCustomElement(targetInst.elementType) &&\n                (getTargetInstFunc = getTargetInstForChangeEvent)\n              : (getTargetInstFunc = getTargetInstForClickEvent);\n        if (\n          getTargetInstFunc &&\n          (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))\n        ) {\n          createAndAccumulateChangeEvent(\n            dispatchQueue,\n            getTargetInstFunc,\n            nativeEvent,\n            nativeEventTarget\n          );\n          break a;\n        }\n        handleEventFunc && handleEventFunc(domEventName, reactName, targetInst);\n      }\n      handleEventFunc = targetInst ? getNodeFromInstance(targetInst) : window;\n      switch (domEventName) {\n        case \"focusin\":\n          if (\n            isTextInputElement(handleEventFunc) ||\n            \"true\" === handleEventFunc.contentEditable\n          )\n            (activeElement = handleEventFunc),\n              (activeElementInst = targetInst),\n              (lastSelection = null);\n          break;\n        case \"focusout\":\n          lastSelection = activeElementInst = activeElement = null;\n          break;\n        case \"mousedown\":\n          mouseDown = !0;\n          break;\n        case \"contextmenu\":\n        case \"mouseup\":\n        case \"dragend\":\n          mouseDown = !1;\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n          break;\n        case \"selectionchange\":\n          if (skipSelectionChangeEvent) break;\n        case \"keydown\":\n        case \"keyup\":\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n      }\n      var fallbackData;\n      if (canUseCompositionEvent)\n        b: {\n          switch (domEventName) {\n            case \"compositionstart\":\n              var eventType = \"onCompositionStart\";\n              break b;\n            case \"compositionend\":\n              eventType = \"onCompositionEnd\";\n              break b;\n            case \"compositionupdate\":\n              eventType = \"onCompositionUpdate\";\n              break b;\n          }\n          eventType = void 0;\n        }\n      else\n        isComposing\n          ? isFallbackCompositionEnd(domEventName, nativeEvent) &&\n            (eventType = \"onCompositionEnd\")\n          : \"keydown\" === domEventName &&\n            229 === nativeEvent.keyCode &&\n            (eventType = \"onCompositionStart\");\n      eventType &&\n        (useFallbackCompositionData &&\n          \"ko\" !== nativeEvent.locale &&\n          (isComposing || \"onCompositionStart\" !== eventType\n            ? \"onCompositionEnd\" === eventType &&\n              isComposing &&\n              (fallbackData = getData())\n            : ((root = nativeEventTarget),\n              (startText = \"value\" in root ? root.value : root.textContent),\n              (isComposing = !0))),\n        (handleEventFunc = accumulateTwoPhaseListeners(targetInst, eventType)),\n        0 < handleEventFunc.length &&\n          ((eventType = new SyntheticCompositionEvent(\n            eventType,\n            domEventName,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: eventType, listeners: handleEventFunc }),\n          fallbackData\n            ? (eventType.data = fallbackData)\n            : ((fallbackData = getDataFromCustomEvent(nativeEvent)),\n              null !== fallbackData && (eventType.data = fallbackData))));\n      if (\n        (fallbackData = canUseTextInputEvent\n          ? getNativeBeforeInputChars(domEventName, nativeEvent)\n          : getFallbackBeforeInputChars(domEventName, nativeEvent))\n      )\n        (eventType = accumulateTwoPhaseListeners(targetInst, \"onBeforeInput\")),\n          0 < eventType.length &&\n            ((handleEventFunc = new SyntheticCompositionEvent(\n              \"onBeforeInput\",\n              \"beforeinput\",\n              null,\n              nativeEvent,\n              nativeEventTarget\n            )),\n            dispatchQueue.push({\n              event: handleEventFunc,\n              listeners: eventType\n            }),\n            (handleEventFunc.data = fallbackData));\n      extractEvents$1(\n        dispatchQueue,\n        domEventName,\n        targetInst,\n        nativeEvent,\n        nativeEventTarget\n      );\n    }\n    processDispatchQueue(dispatchQueue, eventSystemFlags);\n  });\n}\nfunction createDispatchListener(instance, listener, currentTarget) {\n  return {\n    instance: instance,\n    listener: listener,\n    currentTarget: currentTarget\n  };\n}\nfunction accumulateTwoPhaseListeners(targetFiber, reactName) {\n  for (\n    var captureName = reactName + \"Capture\", listeners = [];\n    null !== targetFiber;\n\n  ) {\n    var _instance2 = targetFiber,\n      stateNode = _instance2.stateNode;\n    _instance2 = _instance2.tag;\n    (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||\n      null === stateNode ||\n      ((_instance2 = getListener(targetFiber, captureName)),\n      null != _instance2 &&\n        listeners.unshift(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ),\n      (_instance2 = getListener(targetFiber, reactName)),\n      null != _instance2 &&\n        listeners.push(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ));\n    if (3 === targetFiber.tag) return listeners;\n    targetFiber = targetFiber.return;\n  }\n  return [];\n}\nfunction getParent(inst) {\n  if (null === inst) return null;\n  do inst = inst.return;\n  while (inst && 5 !== inst.tag && 27 !== inst.tag);\n  return inst ? inst : null;\n}\nfunction accumulateEnterLeaveListenersForEvent(\n  dispatchQueue,\n  event,\n  target,\n  common,\n  inCapturePhase\n) {\n  for (\n    var registrationName = event._reactName, listeners = [];\n    null !== target && target !== common;\n\n  ) {\n    var _instance3 = target,\n      alternate = _instance3.alternate,\n      stateNode = _instance3.stateNode;\n    _instance3 = _instance3.tag;\n    if (null !== alternate && alternate === common) break;\n    (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||\n      null === stateNode ||\n      ((alternate = stateNode),\n      inCapturePhase\n        ? ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.unshift(\n              createDispatchListener(target, stateNode, alternate)\n            ))\n        : inCapturePhase ||\n          ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.push(\n              createDispatchListener(target, stateNode, alternate)\n            )));\n    target = target.return;\n  }\n  0 !== listeners.length &&\n    dispatchQueue.push({ event: event, listeners: listeners });\n}\nvar NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g,\n  NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\nfunction normalizeMarkupForTextOrAttribute(markup) {\n  return (\"string\" === typeof markup ? markup : \"\" + markup)\n    .replace(NORMALIZE_NEWLINES_REGEX, \"\\n\")\n    .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, \"\");\n}\nfunction checkForUnmatchedText(serverText, clientText) {\n  clientText = normalizeMarkupForTextOrAttribute(clientText);\n  return normalizeMarkupForTextOrAttribute(serverText) === clientText ? !0 : !1;\n}\nfunction setProp(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"children\":\n      if (\"string\" === typeof value)\n        \"body\" === tag ||\n          (\"textarea\" === tag && \"\" === value) ||\n          setTextContent(domElement, value);\n      else if (\"number\" === typeof value || \"bigint\" === typeof value)\n        \"body\" !== tag && setTextContent(domElement, \"\" + value);\n      else return;\n      break;\n    case \"className\":\n      setValueForKnownAttribute(domElement, \"class\", value);\n      break;\n    case \"tabIndex\":\n      setValueForKnownAttribute(domElement, \"tabindex\", value);\n      break;\n    case \"dir\":\n    case \"role\":\n    case \"viewBox\":\n    case \"width\":\n    case \"height\":\n      setValueForKnownAttribute(domElement, key, value);\n      break;\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      return;\n    case \"data\":\n      if (\"object\" !== tag) {\n        setValueForKnownAttribute(domElement, \"data\", value);\n        break;\n      }\n    case \"src\":\n    case \"href\":\n      if (\"\" === value && (\"a\" !== tag || \"href\" !== key)) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"action\":\n    case \"formAction\":\n      if (\"function\" === typeof value) {\n        domElement.setAttribute(\n          key,\n          \"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\"\n        );\n        break;\n      } else\n        \"function\" === typeof prevValue &&\n          (\"formAction\" === key\n            ? (\"input\" !== tag &&\n                setProp(domElement, tag, \"name\", props.name, props, null),\n              setProp(\n                domElement,\n                tag,\n                \"formEncType\",\n                props.formEncType,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formMethod\",\n                props.formMethod,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formTarget\",\n                props.formTarget,\n                props,\n                null\n              ))\n            : (setProp(domElement, tag, \"encType\", props.encType, props, null),\n              setProp(domElement, tag, \"method\", props.method, props, null),\n              setProp(domElement, tag, \"target\", props.target, props, null)));\n      if (\n        null == value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      return;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      return;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      return;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          (null != prevValue ? prevValue.__html : void 0) !== key &&\n            (domElement.innerHTML = key);\n        }\n      }\n      break;\n    case \"multiple\":\n      domElement.multiple =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"muted\":\n      domElement.muted =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"defaultValue\":\n    case \"defaultChecked\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"autoFocus\":\n      break;\n    case \"xlinkHref\":\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"boolean\" === typeof value ||\n        \"symbol\" === typeof value\n      ) {\n        domElement.removeAttribute(\"xlink:href\");\n        break;\n      }\n      key = sanitizeURL(value);\n      domElement.setAttributeNS(\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:href\",\n        key\n      );\n      break;\n    case \"contentEditable\":\n    case \"spellCheck\":\n    case \"draggable\":\n    case \"value\":\n    case \"autoReverse\":\n    case \"externalResourcesRequired\":\n    case \"focusable\":\n    case \"preserveAlpha\":\n      null != value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"inert\":\n    case \"allowFullScreen\":\n    case \"async\":\n    case \"autoPlay\":\n    case \"controls\":\n    case \"credentialless\":\n    case \"default\":\n    case \"defer\":\n    case \"disabled\":\n    case \"disablePictureInPicture\":\n    case \"disableRemotePlayback\":\n    case \"formNoValidate\":\n    case \"hidden\":\n    case \"loop\":\n    case \"noModule\":\n    case \"noValidate\":\n    case \"open\":\n    case \"playsInline\":\n    case \"readOnly\":\n    case \"required\":\n    case \"reversed\":\n    case \"scoped\":\n    case \"seamless\":\n    case \"itemScope\":\n      value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, \"\")\n        : domElement.removeAttribute(key);\n      break;\n    case \"capture\":\n    case \"download\":\n      !0 === value\n        ? domElement.setAttribute(key, \"\")\n        : !1 !== value &&\n            null != value &&\n            \"function\" !== typeof value &&\n            \"symbol\" !== typeof value\n          ? domElement.setAttribute(key, value)\n          : domElement.removeAttribute(key);\n      break;\n    case \"cols\":\n    case \"rows\":\n    case \"size\":\n    case \"span\":\n      null != value &&\n      \"function\" !== typeof value &&\n      \"symbol\" !== typeof value &&\n      !isNaN(value) &&\n      1 <= value\n        ? domElement.setAttribute(key, value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"rowSpan\":\n    case \"start\":\n      null == value ||\n      \"function\" === typeof value ||\n      \"symbol\" === typeof value ||\n      isNaN(value)\n        ? domElement.removeAttribute(key)\n        : domElement.setAttribute(key, value);\n      break;\n    case \"popover\":\n      listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      setValueForAttribute(domElement, \"popover\", value);\n      break;\n    case \"xlinkActuate\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:actuate\",\n        value\n      );\n      break;\n    case \"xlinkArcrole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:arcrole\",\n        value\n      );\n      break;\n    case \"xlinkRole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:role\",\n        value\n      );\n      break;\n    case \"xlinkShow\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:show\",\n        value\n      );\n      break;\n    case \"xlinkTitle\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:title\",\n        value\n      );\n      break;\n    case \"xlinkType\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:type\",\n        value\n      );\n      break;\n    case \"xmlBase\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:base\",\n        value\n      );\n      break;\n    case \"xmlLang\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:lang\",\n        value\n      );\n      break;\n    case \"xmlSpace\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:space\",\n        value\n      );\n      break;\n    case \"is\":\n      setValueForAttribute(domElement, \"is\", value);\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      return;\n    default:\n      if (\n        !(2 < key.length) ||\n        (\"o\" !== key[0] && \"O\" !== key[0]) ||\n        (\"n\" !== key[1] && \"N\" !== key[1])\n      )\n        (key = aliases.get(key) || key),\n          setValueForAttribute(domElement, key, value);\n      else return;\n  }\n  viewTransitionMutationContext = !0;\n}\nfunction setPropOnCustomElement(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      return;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          (null != prevValue ? prevValue.__html : void 0) !== key &&\n            (domElement.innerHTML = key);\n        }\n      }\n      break;\n    case \"children\":\n      if (\"string\" === typeof value) setTextContent(domElement, value);\n      else if (\"number\" === typeof value || \"bigint\" === typeof value)\n        setTextContent(domElement, \"\" + value);\n      else return;\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      return;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      return;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      return;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"innerHTML\":\n    case \"ref\":\n      return;\n    case \"innerText\":\n    case \"textContent\":\n      return;\n    default:\n      if (!registrationNameDependencies.hasOwnProperty(key))\n        a: {\n          if (\n            \"o\" === key[0] &&\n            \"n\" === key[1] &&\n            ((props = key.endsWith(\"Capture\")),\n            (prevValue = key.slice(2, props ? key.length - 7 : void 0)),\n            (tag = domElement[internalPropsKey] || null),\n            (tag = null != tag ? tag[key] : null),\n            \"function\" === typeof tag &&\n              domElement.removeEventListener(prevValue, tag, props),\n            \"function\" === typeof value)\n          ) {\n            \"function\" !== typeof tag &&\n              null !== tag &&\n              (key in domElement\n                ? (domElement[key] = null)\n                : domElement.hasAttribute(key) &&\n                  domElement.removeAttribute(key));\n            domElement.addEventListener(prevValue, value, props);\n            break a;\n          }\n          viewTransitionMutationContext = !0;\n          key in domElement\n            ? (domElement[key] = value)\n            : !0 === value\n              ? domElement.setAttribute(key, \"\")\n              : setValueForAttribute(domElement, key, value);\n        }\n      return;\n  }\n  viewTransitionMutationContext = !0;\n}\nfunction setInitialProperties(domElement, tag, props) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"img\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      var hasSrc = !1,\n        hasSrcSet = !1,\n        propKey;\n      for (propKey in props)\n        if (props.hasOwnProperty(propKey)) {\n          var propValue = props[propKey];\n          if (null != propValue)\n            switch (propKey) {\n              case \"src\":\n                hasSrc = !0;\n                break;\n              case \"srcSet\":\n                hasSrcSet = !0;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                throw Error(formatProdErrorMessage(137, tag));\n              default:\n                setProp(domElement, tag, propKey, propValue, props, null);\n            }\n        }\n      hasSrcSet &&\n        setProp(domElement, tag, \"srcSet\", props.srcSet, props, null);\n      hasSrc && setProp(domElement, tag, \"src\", props.src, props, null);\n      return;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      var defaultValue = (propKey = propValue = hasSrcSet = null),\n        checked = null,\n        defaultChecked = null;\n      for (hasSrc in props)\n        if (props.hasOwnProperty(hasSrc)) {\n          var propValue$204 = props[hasSrc];\n          if (null != propValue$204)\n            switch (hasSrc) {\n              case \"name\":\n                hasSrcSet = propValue$204;\n                break;\n              case \"type\":\n                propValue = propValue$204;\n                break;\n              case \"checked\":\n                checked = propValue$204;\n                break;\n              case \"defaultChecked\":\n                defaultChecked = propValue$204;\n                break;\n              case \"value\":\n                propKey = propValue$204;\n                break;\n              case \"defaultValue\":\n                defaultValue = propValue$204;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                if (null != propValue$204)\n                  throw Error(formatProdErrorMessage(137, tag));\n                break;\n              default:\n                setProp(domElement, tag, hasSrc, propValue$204, props, null);\n            }\n        }\n      initInput(\n        domElement,\n        propKey,\n        defaultValue,\n        checked,\n        defaultChecked,\n        propValue,\n        hasSrcSet,\n        !1\n      );\n      return;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      hasSrc = propValue = propKey = null;\n      for (hasSrcSet in props)\n        if (\n          props.hasOwnProperty(hasSrcSet) &&\n          ((defaultValue = props[hasSrcSet]), null != defaultValue)\n        )\n          switch (hasSrcSet) {\n            case \"value\":\n              propKey = defaultValue;\n              break;\n            case \"defaultValue\":\n              propValue = defaultValue;\n              break;\n            case \"multiple\":\n              hasSrc = defaultValue;\n            default:\n              setProp(domElement, tag, hasSrcSet, defaultValue, props, null);\n          }\n      tag = propKey;\n      props = propValue;\n      domElement.multiple = !!hasSrc;\n      null != tag\n        ? updateOptions(domElement, !!hasSrc, tag, !1)\n        : null != props && updateOptions(domElement, !!hasSrc, props, !0);\n      return;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      propKey = hasSrcSet = hasSrc = null;\n      for (propValue in props)\n        if (\n          props.hasOwnProperty(propValue) &&\n          ((defaultValue = props[propValue]), null != defaultValue)\n        )\n          switch (propValue) {\n            case \"value\":\n              hasSrc = defaultValue;\n              break;\n            case \"defaultValue\":\n              hasSrcSet = defaultValue;\n              break;\n            case \"children\":\n              propKey = defaultValue;\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != defaultValue) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              setProp(domElement, tag, propValue, defaultValue, props, null);\n          }\n      initTextarea(domElement, hasSrc, hasSrcSet, propKey);\n      return;\n    case \"option\":\n      for (checked in props)\n        if (\n          props.hasOwnProperty(checked) &&\n          ((hasSrc = props[checked]), null != hasSrc)\n        )\n          switch (checked) {\n            case \"selected\":\n              domElement.selected =\n                hasSrc &&\n                \"function\" !== typeof hasSrc &&\n                \"symbol\" !== typeof hasSrc;\n              break;\n            default:\n              setProp(domElement, tag, checked, hasSrc, props, null);\n          }\n      return;\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      listenToNonDelegatedEvent(\"cancel\", domElement);\n      listenToNonDelegatedEvent(\"close\", domElement);\n      break;\n    case \"iframe\":\n    case \"object\":\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)\n        listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);\n      break;\n    case \"image\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      break;\n    case \"embed\":\n    case \"source\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", domElement),\n        listenToNonDelegatedEvent(\"load\", domElement);\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (defaultChecked in props)\n        if (\n          props.hasOwnProperty(defaultChecked) &&\n          ((hasSrc = props[defaultChecked]), null != hasSrc)\n        )\n          switch (defaultChecked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              throw Error(formatProdErrorMessage(137, tag));\n            default:\n              setProp(domElement, tag, defaultChecked, hasSrc, props, null);\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (propValue$204 in props)\n          props.hasOwnProperty(propValue$204) &&\n            ((hasSrc = props[propValue$204]),\n            void 0 !== hasSrc &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propValue$204,\n                hasSrc,\n                props,\n                void 0\n              ));\n        return;\n      }\n  }\n  for (defaultValue in props)\n    props.hasOwnProperty(defaultValue) &&\n      ((hasSrc = props[defaultValue]),\n      null != hasSrc &&\n        setProp(domElement, tag, defaultValue, hasSrc, props, null));\n}\nvar emptyProps = {};\nfunction updateProperties(domElement, tag, lastProps, nextProps) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"input\":\n      var name = null,\n        type = null,\n        value = null,\n        defaultValue = null,\n        lastDefaultValue = null,\n        checked = null,\n        defaultChecked = null;\n      for (propKey in lastProps) {\n        var lastProp = lastProps[propKey];\n        if (lastProps.hasOwnProperty(propKey) && null != lastProp)\n          switch (propKey) {\n            case \"checked\":\n              break;\n            case \"value\":\n              break;\n            case \"defaultValue\":\n              lastDefaultValue = lastProp;\n            default:\n              nextProps.hasOwnProperty(propKey) ||\n                setProp(domElement, tag, propKey, null, nextProps, lastProp);\n          }\n      }\n      for (var propKey$221 in nextProps) {\n        var propKey = nextProps[propKey$221];\n        lastProp = lastProps[propKey$221];\n        if (\n          nextProps.hasOwnProperty(propKey$221) &&\n          (null != propKey || null != lastProp)\n        )\n          switch (propKey$221) {\n            case \"type\":\n              propKey !== lastProp && (viewTransitionMutationContext = !0);\n              type = propKey;\n              break;\n            case \"name\":\n              propKey !== lastProp && (viewTransitionMutationContext = !0);\n              name = propKey;\n              break;\n            case \"checked\":\n              propKey !== lastProp && (viewTransitionMutationContext = !0);\n              checked = propKey;\n              break;\n            case \"defaultChecked\":\n              propKey !== lastProp && (viewTransitionMutationContext = !0);\n              defaultChecked = propKey;\n              break;\n            case \"value\":\n              propKey !== lastProp && (viewTransitionMutationContext = !0);\n              value = propKey;\n              break;\n            case \"defaultValue\":\n              propKey !== lastProp && (viewTransitionMutationContext = !0);\n              defaultValue = propKey;\n              break;\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              propKey !== lastProp &&\n                setProp(\n                  domElement,\n                  tag,\n                  propKey$221,\n                  propKey,\n                  nextProps,\n                  lastProp\n                );\n          }\n      }\n      updateInput(\n        domElement,\n        value,\n        defaultValue,\n        lastDefaultValue,\n        checked,\n        defaultChecked,\n        type,\n        name\n      );\n      return;\n    case \"select\":\n      propKey = value = defaultValue = propKey$221 = null;\n      for (type in lastProps)\n        if (\n          ((lastDefaultValue = lastProps[type]),\n          lastProps.hasOwnProperty(type) && null != lastDefaultValue)\n        )\n          switch (type) {\n            case \"value\":\n              break;\n            case \"multiple\":\n              propKey = lastDefaultValue;\n            default:\n              nextProps.hasOwnProperty(type) ||\n                setProp(\n                  domElement,\n                  tag,\n                  type,\n                  null,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      for (name in nextProps)\n        if (\n          ((type = nextProps[name]),\n          (lastDefaultValue = lastProps[name]),\n          nextProps.hasOwnProperty(name) &&\n            (null != type || null != lastDefaultValue))\n        )\n          switch (name) {\n            case \"value\":\n              type !== lastDefaultValue && (viewTransitionMutationContext = !0);\n              propKey$221 = type;\n              break;\n            case \"defaultValue\":\n              type !== lastDefaultValue && (viewTransitionMutationContext = !0);\n              defaultValue = type;\n              break;\n            case \"multiple\":\n              type !== lastDefaultValue && (viewTransitionMutationContext = !0),\n                (value = type);\n            default:\n              type !== lastDefaultValue &&\n                setProp(\n                  domElement,\n                  tag,\n                  name,\n                  type,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      tag = defaultValue;\n      lastProps = value;\n      nextProps = propKey;\n      null != propKey$221\n        ? updateOptions(domElement, !!lastProps, propKey$221, !1)\n        : !!nextProps !== !!lastProps &&\n          (null != tag\n            ? updateOptions(domElement, !!lastProps, tag, !0)\n            : updateOptions(domElement, !!lastProps, lastProps ? [] : \"\", !1));\n      return;\n    case \"textarea\":\n      propKey = propKey$221 = null;\n      for (defaultValue in lastProps)\n        if (\n          ((name = lastProps[defaultValue]),\n          lastProps.hasOwnProperty(defaultValue) &&\n            null != name &&\n            !nextProps.hasOwnProperty(defaultValue))\n        )\n          switch (defaultValue) {\n            case \"value\":\n              break;\n            case \"children\":\n              break;\n            default:\n              setProp(domElement, tag, defaultValue, null, nextProps, name);\n          }\n      for (value in nextProps)\n        if (\n          ((name = nextProps[value]),\n          (type = lastProps[value]),\n          nextProps.hasOwnProperty(value) && (null != name || null != type))\n        )\n          switch (value) {\n            case \"value\":\n              name !== type && (viewTransitionMutationContext = !0);\n              propKey$221 = name;\n              break;\n            case \"defaultValue\":\n              name !== type && (viewTransitionMutationContext = !0);\n              propKey = name;\n              break;\n            case \"children\":\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != name) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              name !== type &&\n                setProp(domElement, tag, value, name, nextProps, type);\n          }\n      updateTextarea(domElement, propKey$221, propKey);\n      return;\n    case \"option\":\n      for (var propKey$237 in lastProps)\n        if (\n          ((propKey$221 = lastProps[propKey$237]),\n          lastProps.hasOwnProperty(propKey$237) &&\n            null != propKey$221 &&\n            !nextProps.hasOwnProperty(propKey$237))\n        )\n          switch (propKey$237) {\n            case \"selected\":\n              domElement.selected = !1;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                propKey$237,\n                null,\n                nextProps,\n                propKey$221\n              );\n          }\n      for (lastDefaultValue in nextProps)\n        if (\n          ((propKey$221 = nextProps[lastDefaultValue]),\n          (propKey = lastProps[lastDefaultValue]),\n          nextProps.hasOwnProperty(lastDefaultValue) &&\n            propKey$221 !== propKey &&\n            (null != propKey$221 || null != propKey))\n        )\n          switch (lastDefaultValue) {\n            case \"selected\":\n              propKey$221 !== propKey && (viewTransitionMutationContext = !0);\n              domElement.selected =\n                propKey$221 &&\n                \"function\" !== typeof propKey$221 &&\n                \"symbol\" !== typeof propKey$221;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                lastDefaultValue,\n                propKey$221,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    case \"img\":\n    case \"link\":\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"embed\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"source\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (var propKey$242 in lastProps)\n        (propKey$221 = lastProps[propKey$242]),\n          lastProps.hasOwnProperty(propKey$242) &&\n            null != propKey$221 &&\n            !nextProps.hasOwnProperty(propKey$242) &&\n            setProp(domElement, tag, propKey$242, null, nextProps, propKey$221);\n      for (checked in nextProps)\n        if (\n          ((propKey$221 = nextProps[checked]),\n          (propKey = lastProps[checked]),\n          nextProps.hasOwnProperty(checked) &&\n            propKey$221 !== propKey &&\n            (null != propKey$221 || null != propKey))\n        )\n          switch (checked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey$221)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                checked,\n                propKey$221,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (var propKey$247 in lastProps)\n          (propKey$221 = lastProps[propKey$247]),\n            lastProps.hasOwnProperty(propKey$247) &&\n              void 0 !== propKey$221 &&\n              !nextProps.hasOwnProperty(propKey$247) &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propKey$247,\n                void 0,\n                nextProps,\n                propKey$221\n              );\n        for (defaultChecked in nextProps)\n          (propKey$221 = nextProps[defaultChecked]),\n            (propKey = lastProps[defaultChecked]),\n            !nextProps.hasOwnProperty(defaultChecked) ||\n              propKey$221 === propKey ||\n              (void 0 === propKey$221 && void 0 === propKey) ||\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                defaultChecked,\n                propKey$221,\n                nextProps,\n                propKey\n              );\n        return;\n      }\n  }\n  for (var propKey$252 in lastProps)\n    (propKey$221 = lastProps[propKey$252]),\n      lastProps.hasOwnProperty(propKey$252) &&\n        null != propKey$221 &&\n        !nextProps.hasOwnProperty(propKey$252) &&\n        setProp(domElement, tag, propKey$252, null, nextProps, propKey$221);\n  for (lastProp in nextProps)\n    (propKey$221 = nextProps[lastProp]),\n      (propKey = lastProps[lastProp]),\n      !nextProps.hasOwnProperty(lastProp) ||\n        propKey$221 === propKey ||\n        (null == propKey$221 && null == propKey) ||\n        setProp(domElement, tag, lastProp, propKey$221, nextProps, propKey);\n}\nfunction isLikelyStaticResource(initiatorType) {\n  switch (initiatorType) {\n    case \"css\":\n    case \"script\":\n    case \"font\":\n    case \"img\":\n    case \"image\":\n    case \"input\":\n    case \"link\":\n      return !0;\n    default:\n      return !1;\n  }\n}\nfunction estimateBandwidth() {\n  if (\"function\" === typeof performance.getEntriesByType) {\n    for (\n      var count = 0,\n        bits = 0,\n        resourceEntries = performance.getEntriesByType(\"resource\"),\n        i = 0;\n      i < resourceEntries.length;\n      i++\n    ) {\n      var entry = resourceEntries[i],\n        transferSize = entry.transferSize,\n        initiatorType = entry.initiatorType,\n        duration = entry.duration;\n      if (transferSize && duration && isLikelyStaticResource(initiatorType)) {\n        initiatorType = 0;\n        duration = entry.responseEnd;\n        for (i += 1; i < resourceEntries.length; i++) {\n          var overlapEntry = resourceEntries[i],\n            overlapStartTime = overlapEntry.startTime;\n          if (overlapStartTime > duration) break;\n          var overlapTransferSize = overlapEntry.transferSize,\n            overlapInitiatorType = overlapEntry.initiatorType;\n          overlapTransferSize &&\n            isLikelyStaticResource(overlapInitiatorType) &&\n            ((overlapEntry = overlapEntry.responseEnd),\n            (initiatorType +=\n              overlapTransferSize *\n              (overlapEntry < duration\n                ? 1\n                : (duration - overlapStartTime) /\n                  (overlapEntry - overlapStartTime))));\n        }\n        --i;\n        bits += (8 * (transferSize + initiatorType)) / (entry.duration / 1e3);\n        count++;\n        if (10 < count) break;\n      }\n    }\n    if (0 < count) return bits / count / 1e6;\n  }\n  return navigator.connection &&\n    ((count = navigator.connection.downlink), \"number\" === typeof count)\n    ? count\n    : 5;\n}\nvar eventsEnabled = null,\n  selectionInformation = null;\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n  return 9 === rootContainerElement.nodeType\n    ? rootContainerElement\n    : rootContainerElement.ownerDocument;\n}\nfunction getOwnHostContext(namespaceURI) {\n  switch (namespaceURI) {\n    case \"http://www.w3.org/2000/svg\":\n      return 1;\n    case \"http://www.w3.org/1998/Math/MathML\":\n      return 2;\n    default:\n      return 0;\n  }\n}\nfunction getChildHostContextProd(parentNamespace, type) {\n  if (0 === parentNamespace)\n    switch (type) {\n      case \"svg\":\n        return 1;\n      case \"math\":\n        return 2;\n      default:\n        return 0;\n    }\n  return 1 === parentNamespace && \"foreignObject\" === type\n    ? 0\n    : parentNamespace;\n}\nfunction createHoistableInstance(\n  type,\n  props,\n  rootContainerInstance,\n  internalInstanceHandle\n) {\n  rootContainerInstance = getOwnerDocumentFromRootContainer(\n    rootContainerInstance\n  ).createElement(type);\n  rootContainerInstance[internalInstanceKey] = internalInstanceHandle;\n  rootContainerInstance[internalPropsKey] = props;\n  setInitialProperties(rootContainerInstance, type, props);\n  markNodeAsHoistable(rootContainerInstance);\n  return rootContainerInstance;\n}\nfunction shouldSetTextContent(type, props) {\n  return (\n    \"textarea\" === type ||\n    \"noscript\" === type ||\n    \"string\" === typeof props.children ||\n    \"number\" === typeof props.children ||\n    \"bigint\" === typeof props.children ||\n    (\"object\" === typeof props.dangerouslySetInnerHTML &&\n      null !== props.dangerouslySetInnerHTML &&\n      null != props.dangerouslySetInnerHTML.__html)\n  );\n}\nvar currentPopstateTransitionEvent = null;\nfunction shouldAttemptEagerTransition() {\n  var event = window.event;\n  if (event && \"popstate\" === event.type) {\n    if (event === currentPopstateTransitionEvent) return !1;\n    currentPopstateTransitionEvent = event;\n    return !0;\n  }\n  currentPopstateTransitionEvent = null;\n  return !1;\n}\nvar scheduleTimeout = \"function\" === typeof setTimeout ? setTimeout : void 0,\n  cancelTimeout = \"function\" === typeof clearTimeout ? clearTimeout : void 0,\n  localPromise = \"function\" === typeof Promise ? Promise : void 0,\n  localRequestAnimationFrame =\n    \"function\" === typeof requestAnimationFrame\n      ? requestAnimationFrame\n      : scheduleTimeout,\n  scheduleMicrotask =\n    \"function\" === typeof queueMicrotask\n      ? queueMicrotask\n      : \"undefined\" !== typeof localPromise\n        ? function (callback) {\n            return localPromise\n              .resolve(null)\n              .then(callback)\n              .catch(handleErrorInNextTick);\n          }\n        : scheduleTimeout;\nfunction handleErrorInNextTick(error) {\n  setTimeout(function () {\n    throw error;\n  });\n}\nfunction isSingletonScope(type) {\n  return \"head\" === type;\n}\nfunction clearHydrationBoundary(parentInstance, hydrationInstance) {\n  var node = hydrationInstance,\n    depth = 0;\n  do {\n    var nextNode = node.nextSibling;\n    parentInstance.removeChild(node);\n    if (nextNode && 8 === nextNode.nodeType)\n      if (((node = nextNode.data), \"/$\" === node || \"/&\" === node)) {\n        if (0 === depth) {\n          parentInstance.removeChild(nextNode);\n          retryIfBlockedOn(hydrationInstance);\n          return;\n        }\n        depth--;\n      } else if (\n        \"$\" === node ||\n        \"$?\" === node ||\n        \"$~\" === node ||\n        \"$!\" === node ||\n        \"&\" === node\n      )\n        depth++;\n      else if (\"html\" === node)\n        clearSingletonPreambleContribution(\n          parentInstance.ownerDocument.documentElement\n        );\n      else if (\"head\" === node) {\n        node = parentInstance.ownerDocument.head;\n        clearSingletonPreambleContribution(node);\n        for (var node$jscomp$0 = node.firstChild; node$jscomp$0; ) {\n          var nextNode$jscomp$0 = node$jscomp$0.nextSibling,\n            nodeName = node$jscomp$0.nodeName;\n          node$jscomp$0[internalHoistableMarker] ||\n            \"SCRIPT\" === nodeName ||\n            \"STYLE\" === nodeName ||\n            (\"LINK\" === nodeName &&\n              \"stylesheet\" === node$jscomp$0.rel.toLowerCase()) ||\n            node.removeChild(node$jscomp$0);\n          node$jscomp$0 = nextNode$jscomp$0;\n        }\n      } else\n        \"body\" === node &&\n          clearSingletonPreambleContribution(parentInstance.ownerDocument.body);\n    node = nextNode;\n  } while (node);\n  retryIfBlockedOn(hydrationInstance);\n}\nfunction hideOrUnhideDehydratedBoundary(suspenseInstance, isHidden) {\n  var node = suspenseInstance;\n  suspenseInstance = 0;\n  do {\n    var nextNode = node.nextSibling;\n    1 === node.nodeType\n      ? isHidden\n        ? ((node._stashedDisplay = node.style.display),\n          (node.style.display = \"none\"))\n        : ((node.style.display = node._stashedDisplay || \"\"),\n          \"\" === node.getAttribute(\"style\") && node.removeAttribute(\"style\"))\n      : 3 === node.nodeType &&\n        (isHidden\n          ? ((node._stashedText = node.nodeValue), (node.nodeValue = \"\"))\n          : (node.nodeValue = node._stashedText || \"\"));\n    if (nextNode && 8 === nextNode.nodeType)\n      if (((node = nextNode.data), \"/$\" === node))\n        if (0 === suspenseInstance) break;\n        else suspenseInstance--;\n      else\n        (\"$\" !== node && \"$?\" !== node && \"$~\" !== node && \"$!\" !== node) ||\n          suspenseInstance++;\n    node = nextNode;\n  } while (node);\n}\nfunction applyViewTransitionName(instance, name, className) {\n  name = CSS.escape(name) !== name ? \"r-\" + btoa(name).replace(/=/g, \"\") : name;\n  instance.style.viewTransitionName = name;\n  null != className && (instance.style.viewTransitionClass = className);\n  className = getComputedStyle(instance);\n  if (\"inline\" === className.display) {\n    name = instance.getClientRects();\n    if (1 === name.length) var JSCompiler_inline_result = 1;\n    else\n      for (var i = (JSCompiler_inline_result = 0); i < name.length; i++) {\n        var rect = name[i];\n        0 < rect.width && 0 < rect.height && JSCompiler_inline_result++;\n      }\n    1 === JSCompiler_inline_result &&\n      ((instance = instance.style),\n      (instance.display = 1 === name.length ? \"inline-block\" : \"block\"),\n      (instance.marginTop = \"-\" + className.paddingTop),\n      (instance.marginBottom = \"-\" + className.paddingBottom));\n  }\n}\nfunction restoreViewTransitionName(instance, props) {\n  instance = instance.style;\n  props = props.style;\n  var viewTransitionName =\n    null != props\n      ? props.hasOwnProperty(\"viewTransitionName\")\n        ? props.viewTransitionName\n        : props.hasOwnProperty(\"view-transition-name\")\n          ? props[\"view-transition-name\"]\n          : null\n      : null;\n  instance.viewTransitionName =\n    null == viewTransitionName || \"boolean\" === typeof viewTransitionName\n      ? \"\"\n      : (\"\" + viewTransitionName).trim();\n  viewTransitionName =\n    null != props\n      ? props.hasOwnProperty(\"viewTransitionClass\")\n        ? props.viewTransitionClass\n        : props.hasOwnProperty(\"view-transition-class\")\n          ? props[\"view-transition-class\"]\n          : null\n      : null;\n  instance.viewTransitionClass =\n    null == viewTransitionName || \"boolean\" === typeof viewTransitionName\n      ? \"\"\n      : (\"\" + viewTransitionName).trim();\n  \"inline-block\" === instance.display &&\n    (null == props\n      ? (instance.display = instance.margin = \"\")\n      : ((viewTransitionName = props.display),\n        (instance.display =\n          null == viewTransitionName || \"boolean\" === typeof viewTransitionName\n            ? \"\"\n            : viewTransitionName),\n        (viewTransitionName = props.margin),\n        null != viewTransitionName\n          ? (instance.margin = viewTransitionName)\n          : ((viewTransitionName = props.hasOwnProperty(\"marginTop\")\n              ? props.marginTop\n              : props[\"margin-top\"]),\n            (instance.marginTop =\n              null == viewTransitionName ||\n              \"boolean\" === typeof viewTransitionName\n                ? \"\"\n                : viewTransitionName),\n            (props = props.hasOwnProperty(\"marginBottom\")\n              ? props.marginBottom\n              : props[\"margin-bottom\"]),\n            (instance.marginBottom =\n              null == props || \"boolean\" === typeof props ? \"\" : props))));\n}\nfunction createMeasurement(rect, computedStyle, element) {\n  element = element.ownerDocument.defaultView;\n  return {\n    rect: rect,\n    abs:\n      \"absolute\" === computedStyle.position ||\n      \"fixed\" === computedStyle.position,\n    clip:\n      \"none\" !== computedStyle.clipPath ||\n      \"visible\" !== computedStyle.overflow ||\n      \"none\" !== computedStyle.filter ||\n      \"none\" !== computedStyle.mask ||\n      \"none\" !== computedStyle.mask ||\n      \"0px\" !== computedStyle.borderRadius,\n    view:\n      0 <= rect.bottom &&\n      0 <= rect.right &&\n      rect.top <= element.innerHeight &&\n      rect.left <= element.innerWidth\n  };\n}\nfunction measureInstance(instance) {\n  var rect = instance.getBoundingClientRect(),\n    computedStyle = getComputedStyle(instance);\n  return createMeasurement(rect, computedStyle, instance);\n}\nfunction measureClonedInstance(instance) {\n  var measuredRect = instance.getBoundingClientRect();\n  measuredRect = new DOMRect(\n    measuredRect.x + 2e4,\n    measuredRect.y + 2e4,\n    measuredRect.width,\n    measuredRect.height\n  );\n  var computedStyle = getComputedStyle(instance);\n  return createMeasurement(measuredRect, computedStyle, instance);\n}\nfunction forceLayout(ownerDocument) {\n  return ownerDocument.documentElement.clientHeight;\n}\nfunction waitForImageToLoad(resolve) {\n  this.addEventListener(\"load\", resolve);\n  this.addEventListener(\"error\", resolve);\n}\nfunction startViewTransition(\n  suspendedState,\n  rootContainer,\n  transitionTypes,\n  mutationCallback,\n  layoutCallback,\n  afterMutationCallback,\n  spawnedWorkCallback,\n  passiveCallback,\n  errorCallback\n) {\n  var ownerDocument =\n    9 === rootContainer.nodeType ? rootContainer : rootContainer.ownerDocument;\n  try {\n    var transition = ownerDocument.startViewTransition({\n      update: function () {\n        var ownerWindow = ownerDocument.defaultView,\n          pendingNavigation =\n            ownerWindow.navigation && ownerWindow.navigation.transition,\n          previousFontLoadingStatus = ownerDocument.fonts.status;\n        mutationCallback();\n        var blockingPromises = [];\n        \"loaded\" === previousFontLoadingStatus &&\n          (forceLayout(ownerDocument),\n          \"loading\" === ownerDocument.fonts.status &&\n            blockingPromises.push(ownerDocument.fonts.ready));\n        previousFontLoadingStatus = blockingPromises.length;\n        if (null !== suspendedState)\n          for (\n            var suspenseyImages = suspendedState.suspenseyImages,\n              imgBytes = 0,\n              i = 0;\n            i < suspenseyImages.length;\n            i++\n          ) {\n            var suspenseyImage = suspenseyImages[i];\n            if (!suspenseyImage.complete) {\n              var rect = suspenseyImage.getBoundingClientRect();\n              if (\n                0 < rect.bottom &&\n                0 < rect.right &&\n                rect.top < ownerWindow.innerHeight &&\n                rect.left < ownerWindow.innerWidth\n              ) {\n                imgBytes += estimateImageBytes(suspenseyImage);\n                if (imgBytes > estimatedBytesWithinLimit) {\n                  blockingPromises.length = previousFontLoadingStatus;\n                  break;\n                }\n                suspenseyImage = new Promise(\n                  waitForImageToLoad.bind(suspenseyImage)\n                );\n                blockingPromises.push(suspenseyImage);\n              }\n            }\n          }\n        if (0 < blockingPromises.length)\n          return (\n            (ownerWindow = Promise.race([\n              Promise.all(blockingPromises),\n              new Promise(function (resolve) {\n                return setTimeout(resolve, 500);\n              })\n            ]).then(layoutCallback, layoutCallback)),\n            (pendingNavigation\n              ? Promise.allSettled([pendingNavigation.finished, ownerWindow])\n              : ownerWindow\n            ).then(afterMutationCallback, afterMutationCallback)\n          );\n        layoutCallback();\n        if (pendingNavigation)\n          return pendingNavigation.finished.then(\n            afterMutationCallback,\n            afterMutationCallback\n          );\n        afterMutationCallback();\n      },\n      types: transitionTypes\n    });\n    ownerDocument.__reactViewTransition = transition;\n    var viewTransitionAnimations = [];\n    transition.ready.then(\n      function () {\n        for (\n          var animations = ownerDocument.documentElement.getAnimations({\n              subtree: !0\n            }),\n            i = 0;\n          i < animations.length;\n          i++\n        ) {\n          var animation = animations[i],\n            effect = animation.effect,\n            pseudoElement = effect.pseudoElement;\n          if (\n            null != pseudoElement &&\n            pseudoElement.startsWith(\"::view-transition\")\n          ) {\n            viewTransitionAnimations.push(animation);\n            animation = effect.getKeyframes();\n            for (\n              var height = (pseudoElement = void 0),\n                unchangedDimensions = !0,\n                j = 0;\n              j < animation.length;\n              j++\n            ) {\n              var keyframe = animation[j],\n                w = keyframe.width;\n              if (void 0 === pseudoElement) pseudoElement = w;\n              else if (pseudoElement !== w) {\n                unchangedDimensions = !1;\n                break;\n              }\n              w = keyframe.height;\n              if (void 0 === height) height = w;\n              else if (height !== w) {\n                unchangedDimensions = !1;\n                break;\n              }\n              delete keyframe.width;\n              delete keyframe.height;\n              \"none\" === keyframe.transform && delete keyframe.transform;\n            }\n            unchangedDimensions &&\n              void 0 !== pseudoElement &&\n              void 0 !== height &&\n              (effect.setKeyframes(animation),\n              (unchangedDimensions = getComputedStyle(\n                effect.target,\n                effect.pseudoElement\n              )),\n              unchangedDimensions.width !== pseudoElement ||\n                unchangedDimensions.height !== height) &&\n              ((unchangedDimensions = animation[0]),\n              (unchangedDimensions.width = pseudoElement),\n              (unchangedDimensions.height = height),\n              (unchangedDimensions = animation[animation.length - 1]),\n              (unchangedDimensions.width = pseudoElement),\n              (unchangedDimensions.height = height),\n              effect.setKeyframes(animation));\n          }\n        }\n        spawnedWorkCallback();\n      },\n      function (error) {\n        ownerDocument.__reactViewTransition === transition &&\n          (ownerDocument.__reactViewTransition = null);\n        try {\n          if (\"object\" === typeof error && null !== error)\n            switch (error.name) {\n              case \"InvalidStateError\":\n                if (\n                  \"View transition was skipped because document visibility state is hidden.\" ===\n                    error.message ||\n                  \"Skipping view transition because document visibility state has become hidden.\" ===\n                    error.message ||\n                  \"Skipping view transition because viewport size changed.\" ===\n                    error.message ||\n                  \"Transition was aborted because of invalid state\" ===\n                    error.message\n                )\n                  error = null;\n            }\n          null !== error && errorCallback(error);\n        } finally {\n          mutationCallback(), layoutCallback(), spawnedWorkCallback();\n        }\n      }\n    );\n    transition.finished.finally(function () {\n      for (var i = 0; i < viewTransitionAnimations.length; i++)\n        viewTransitionAnimations[i].cancel();\n      ownerDocument.__reactViewTransition === transition &&\n        (ownerDocument.__reactViewTransition = null);\n      passiveCallback();\n    });\n    return transition;\n  } catch (x) {\n    return mutationCallback(), layoutCallback(), spawnedWorkCallback(), null;\n  }\n}\nfunction ViewTransitionPseudoElement(pseudo, name) {\n  this._scope = document.documentElement;\n  this._selector = \"::view-transition-\" + pseudo + \"(\" + name + \")\";\n}\nViewTransitionPseudoElement.prototype.animate = function (keyframes, options) {\n  options =\n    \"number\" === typeof options ? { duration: options } : assign({}, options);\n  options.pseudoElement = this._selector;\n  return this._scope.animate(keyframes, options);\n};\nViewTransitionPseudoElement.prototype.getAnimations = function () {\n  for (\n    var scope = this._scope,\n      selector = this._selector,\n      animations = scope.getAnimations({ subtree: !0 }),\n      result = [],\n      i = 0;\n    i < animations.length;\n    i++\n  ) {\n    var effect = animations[i].effect;\n    null !== effect &&\n      effect.target === scope &&\n      effect.pseudoElement === selector &&\n      result.push(animations[i]);\n  }\n  return result;\n};\nViewTransitionPseudoElement.prototype.getComputedStyle = function () {\n  return getComputedStyle(this._scope, this._selector);\n};\nfunction createViewTransitionInstance(name) {\n  return {\n    name: name,\n    group: new ViewTransitionPseudoElement(\"group\", name),\n    imagePair: new ViewTransitionPseudoElement(\"image-pair\", name),\n    old: new ViewTransitionPseudoElement(\"old\", name),\n    new: new ViewTransitionPseudoElement(\"new\", name)\n  };\n}\nfunction FragmentInstance(fragmentFiber) {\n  this._fragmentFiber = fragmentFiber;\n  this._observers = this._eventListeners = null;\n}\nFragmentInstance.prototype.addEventListener = function (\n  type,\n  listener,\n  optionsOrUseCapture\n) {\n  var signal = null,\n    cleanup = null;\n  if (\n    null != optionsOrUseCapture &&\n    \"boolean\" !== typeof optionsOrUseCapture &&\n    ((signal = optionsOrUseCapture.signal || null),\n    null !== signal && signal.aborted)\n  )\n    return;\n  null === this._eventListeners && (this._eventListeners = []);\n  var listeners = this._eventListeners;\n  if (\n    -1 === indexOfEventListener(listeners, type, listener, optionsOrUseCapture)\n  ) {\n    var fragmentInstance = this,\n      attachedListener = listener;\n    null != optionsOrUseCapture &&\n      \"boolean\" !== typeof optionsOrUseCapture &&\n      !0 === optionsOrUseCapture.once &&\n      (attachedListener = function (event) {\n        fragmentInstance.removeEventListener(\n          type,\n          listener,\n          optionsOrUseCapture\n        );\n        \"function\" === typeof listener\n          ? listener.call(this, event)\n          : listener.handleEvent(event);\n      });\n    null !== signal &&\n      ((cleanup = fragmentInstance.removeEventListener.bind(\n        fragmentInstance,\n        type,\n        listener,\n        optionsOrUseCapture\n      )),\n      signal.addEventListener(\"abort\", cleanup, { once: !0 }),\n      (cleanup = signal.removeEventListener.bind(signal, \"abort\", cleanup)));\n    signal = getAttachOptions(optionsOrUseCapture);\n    listeners.push({\n      type: type,\n      listener: listener,\n      optionsOrUseCapture: optionsOrUseCapture,\n      attachedListener: attachedListener,\n      cleanup: cleanup\n    });\n    traverseVisibleInstancesAndTextInstances(\n      this._fragmentFiber.child,\n      !1,\n      addEventListenerToChild,\n      type,\n      attachedListener,\n      signal\n    );\n  }\n  this._eventListeners = listeners;\n};\nfunction addEventListenerToChild(child, type, listener, optionsOrUseCapture) {\n  getInstanceFromHostFiber(child).addEventListener(\n    type,\n    listener,\n    optionsOrUseCapture\n  );\n  return !1;\n}\nFragmentInstance.prototype.removeEventListener = function (\n  type,\n  listener,\n  optionsOrUseCapture\n) {\n  var listeners = this._eventListeners;\n  if (\n    null !== listeners &&\n    ((listener = indexOfEventListener(\n      listeners,\n      type,\n      listener,\n      optionsOrUseCapture\n    )),\n    -1 !== listener)\n  ) {\n    var _listeners$index = listeners[listener];\n    optionsOrUseCapture = _listeners$index.attachedListener;\n    var cleanup = _listeners$index.cleanup;\n    _listeners$index = getAttachOptions(_listeners$index.optionsOrUseCapture);\n    traverseVisibleInstancesAndTextInstances(\n      this._fragmentFiber.child,\n      !1,\n      removeEventListenerFromChild,\n      type,\n      optionsOrUseCapture,\n      _listeners$index\n    );\n    listeners.splice(listener, 1);\n    null !== cleanup && cleanup();\n  }\n};\nfunction removeEventListenerFromChild(\n  child,\n  type,\n  listener,\n  optionsOrUseCapture\n) {\n  getInstanceFromHostFiber(child).removeEventListener(\n    type,\n    listener,\n    optionsOrUseCapture\n  );\n  return !1;\n}\nfunction getAttachOptions(opts) {\n  return null != opts &&\n    \"boolean\" !== typeof opts &&\n    (!0 === opts.once || opts.signal instanceof AbortSignal)\n    ? { capture: opts.capture, passive: opts.passive }\n    : opts;\n}\nfunction normalizeListenerOptions(opts) {\n  return null == opts\n    ? \"c=0\"\n    : \"boolean\" === typeof opts\n      ? \"c=\" + (opts ? \"1\" : \"0\")\n      : \"c=\" + (opts.capture ? \"1\" : \"0\");\n}\nfunction indexOfEventListener(\n  eventListeners,\n  type,\n  listener,\n  optionsOrUseCapture\n) {\n  if (0 === eventListeners.length) return -1;\n  optionsOrUseCapture = normalizeListenerOptions(optionsOrUseCapture);\n  for (var i = 0; i < eventListeners.length; i++) {\n    var item = eventListeners[i];\n    if (\n      item.type === type &&\n      item.listener === listener &&\n      normalizeListenerOptions(item.optionsOrUseCapture) === optionsOrUseCapture\n    )\n      return i;\n  }\n  return -1;\n}\nFragmentInstance.prototype.dispatchEvent = function (event) {\n  var parentHostFiber = getFragmentParentInstanceOrContainerFiber(\n    this._fragmentFiber\n  );\n  if (null === parentHostFiber) return !0;\n  parentHostFiber = getInstanceFromHostFiber(parentHostFiber);\n  var eventListeners = this._eventListeners;\n  if (\n    (null !== eventListeners && 0 < eventListeners.length) ||\n    !event.bubbles\n  ) {\n    var temp =\n      9 === parentHostFiber.nodeType\n        ? parentHostFiber.createComment(\"\")\n        : document.createTextNode(\"\");\n    if (eventListeners)\n      for (var i = 0; i < eventListeners.length; i++) {\n        var _eventListeners$i = eventListeners[i];\n        temp.addEventListener(\n          _eventListeners$i.type,\n          _eventListeners$i.attachedListener,\n          getAttachOptions(_eventListeners$i.optionsOrUseCapture)\n        );\n      }\n    parentHostFiber.appendChild(temp);\n    event = temp.dispatchEvent(event);\n    if (eventListeners)\n      for (i = 0; i < eventListeners.length; i++)\n        (_eventListeners$i = eventListeners[i]),\n          temp.removeEventListener(\n            _eventListeners$i.type,\n            _eventListeners$i.attachedListener,\n            getAttachOptions(_eventListeners$i.optionsOrUseCapture)\n          );\n    parentHostFiber.removeChild(temp);\n    return event;\n  }\n  return parentHostFiber.dispatchEvent(event);\n};\nFragmentInstance.prototype.focus = function (focusOptions) {\n  traverseVisibleInstancesAndTextInstances(\n    this._fragmentFiber.child,\n    !0,\n    setFocusOnFiberIfFocusable,\n    focusOptions,\n    void 0,\n    void 0\n  );\n};\nfunction setFocusOnFiberIfFocusable(fiber, focusOptions) {\n  if (6 === fiber.tag) return !1;\n  fiber = getInstanceFromHostFiber(fiber);\n  return setFocusIfFocusable(fiber, focusOptions);\n}\nFragmentInstance.prototype.focusLast = function (focusOptions) {\n  var children = [];\n  traverseVisibleInstancesAndTextInstances(\n    this._fragmentFiber.child,\n    !0,\n    collectChildren,\n    children,\n    void 0,\n    void 0\n  );\n  for (\n    var i = children.length - 1;\n    0 <= i && !setFocusOnFiberIfFocusable(children[i], focusOptions);\n    i--\n  );\n};\nfunction collectChildren(child, collection) {\n  collection.push(child);\n  return !1;\n}\nFragmentInstance.prototype.blur = function () {\n  var parentHostFiber = getFragmentParentInstanceOrContainerFiber(\n    this._fragmentFiber\n  );\n  null !== parentHostFiber &&\n    ((parentHostFiber = getInstanceFromHostFiber(parentHostFiber)),\n    (parentHostFiber =\n      getOwnerDocumentFromRootContainer(parentHostFiber).activeElement),\n    null !== parentHostFiber &&\n      traverseVisibleInstancesAndTextInstances(\n        this._fragmentFiber.child,\n        !1,\n        blurActiveElementWithinFragment,\n        parentHostFiber,\n        void 0,\n        void 0\n      ));\n};\nfunction blurActiveElementWithinFragment(child, activeElement) {\n  if (6 === child.tag) return !1;\n  child = getInstanceFromHostFiber(child);\n  return child === activeElement || child.contains(activeElement)\n    ? (activeElement.blur(), !0)\n    : !1;\n}\nFragmentInstance.prototype.observeUsing = function (observer) {\n  null === this._observers && (this._observers = new Set());\n  this._observers.add(observer);\n  traverseVisibleInstancesAndTextInstances(\n    this._fragmentFiber.child,\n    !1,\n    observeChild,\n    observer,\n    void 0,\n    void 0\n  );\n};\nfunction observeChild(child, observer) {\n  if (6 === child.tag) return !1;\n  child = getInstanceFromHostFiber(child);\n  observer.observe(child);\n  return !1;\n}\nFragmentInstance.prototype.unobserveUsing = function (observer) {\n  var observers = this._observers;\n  if (null !== observers && observers.has(observer)) {\n    observers.delete(observer);\n    traverseVisibleInstancesAndTextInstances(\n      this._fragmentFiber.child,\n      !1,\n      unobserveChild,\n      observer,\n      void 0,\n      void 0\n    );\n    for (\n      var i = (observers = 0);\n      i < pendingIntersectionUnobserves.length;\n      i++\n    ) {\n      var pending = pendingIntersectionUnobserves[i];\n      pending.fragmentInstance === this && pending.observer === observer\n        ? observer.unobserve(pending.instance)\n        : (pendingIntersectionUnobserves[observers++] = pending);\n    }\n    pendingIntersectionUnobserves.length = observers;\n  }\n};\nfunction unobserveChild(child, observer) {\n  if (6 === child.tag) return !1;\n  child = getInstanceFromHostFiber(child);\n  observer.unobserve(child);\n  return !1;\n}\nvar pendingIntersectionUnobserves = [],\n  intersectionUnobserveScheduled = !1;\nfunction schedulePendingIntersectionUnobserve(\n  fragmentInstance,\n  observer,\n  instance\n) {\n  pendingIntersectionUnobserves.push({\n    fragmentInstance: fragmentInstance,\n    observer: observer,\n    instance: instance\n  });\n  intersectionUnobserveScheduled ||\n    ((intersectionUnobserveScheduled = !0),\n    requestPostPaintCallback(function () {\n      intersectionUnobserveScheduled = !1;\n      var pending = pendingIntersectionUnobserves;\n      pendingIntersectionUnobserves = [];\n      for (var i = 0; i < pending.length; i++) {\n        var item = pending[i];\n        item.observer.unobserve(item.instance);\n      }\n    }));\n}\nFragmentInstance.prototype.getClientRects = function () {\n  var rects = [];\n  traverseVisibleInstancesAndTextInstances(\n    this._fragmentFiber.child,\n    !1,\n    collectClientRects,\n    rects,\n    void 0,\n    void 0\n  );\n  return rects;\n};\nfunction collectClientRects(child, rects) {\n  if (6 === child.tag) {\n    child = child.stateNode;\n    var range = child.ownerDocument.createRange();\n    range.selectNodeContents(child);\n    rects.push.apply(rects, range.getClientRects());\n  } else\n    (child = getInstanceFromHostFiber(child)),\n      rects.push.apply(rects, child.getClientRects());\n  return !1;\n}\nFragmentInstance.prototype.getRootNode = function (getRootNodeOptions) {\n  var parentHostFiber = getFragmentParentInstanceOrContainerFiber(\n    this._fragmentFiber\n  );\n  return null === parentHostFiber\n    ? this\n    : getInstanceFromHostFiber(parentHostFiber).getRootNode(getRootNodeOptions);\n};\nFragmentInstance.prototype.compareDocumentPosition = function (otherNode) {\n  var parentHostFiber = getFragmentParentInstanceOrContainerFiber(\n    this._fragmentFiber\n  );\n  if (null === parentHostFiber) return Node.DOCUMENT_POSITION_DISCONNECTED;\n  var children = [];\n  traverseVisibleInstancesAndTextInstances(\n    this._fragmentFiber.child,\n    !1,\n    collectChildren,\n    children,\n    void 0,\n    void 0\n  );\n  var parentHostInstance = getInstanceFromHostFiber(parentHostFiber);\n  if (0 === children.length) {\n    children = parentHostInstance;\n    if (fiberIsPortaledIntoHost(this._fragmentFiber)) {\n      a: {\n        for (\n          parentHostFiber = this._fragmentFiber.return;\n          null !== parentHostFiber;\n\n        ) {\n          if (4 === parentHostFiber.tag) {\n            parentHostFiber = parentHostFiber.stateNode.containerInfo;\n            break a;\n          }\n          if (\n            3 === parentHostFiber.tag ||\n            5 === parentHostFiber.tag ||\n            27 === parentHostFiber.tag\n          )\n            break;\n          parentHostFiber = parentHostFiber.return;\n        }\n        parentHostFiber = null;\n      }\n      null != parentHostFiber && (children = parentHostFiber);\n    }\n    parentHostFiber = this._fragmentFiber;\n    var result = (parentHostInstance =\n      children.compareDocumentPosition(otherNode));\n    children === otherNode\n      ? (result = Node.DOCUMENT_POSITION_CONTAINS)\n      : parentHostInstance & Node.DOCUMENT_POSITION_CONTAINED_BY &&\n        ((children =\n          getFragmentInstanceOrTextInstanceSiblings(parentHostFiber)[1]),\n        null === children\n          ? (result = Node.DOCUMENT_POSITION_PRECEDING)\n          : ((otherNode =\n              getInstanceFromHostFiber(children).compareDocumentPosition(\n                otherNode\n              )),\n            (result =\n              0 === otherNode || otherNode & Node.DOCUMENT_POSITION_FOLLOWING\n                ? Node.DOCUMENT_POSITION_FOLLOWING\n                : Node.DOCUMENT_POSITION_PRECEDING)));\n    return (result |= Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC);\n  }\n  parentHostFiber = getInstanceFromHostFiber(children[0]);\n  result = getInstanceFromHostFiber(children[children.length - 1]);\n  var parentHostInstanceFromDOM = fiberIsPortaledIntoHost(this._fragmentFiber)\n    ? parentHostFiber.parentElement\n    : parentHostInstance;\n  if (null == parentHostInstanceFromDOM)\n    return Node.DOCUMENT_POSITION_DISCONNECTED;\n  parentHostInstance =\n    parentHostInstanceFromDOM.compareDocumentPosition(parentHostFiber) &\n    Node.DOCUMENT_POSITION_CONTAINED_BY;\n  parentHostInstanceFromDOM =\n    parentHostInstanceFromDOM.compareDocumentPosition(result) &\n    Node.DOCUMENT_POSITION_CONTAINED_BY;\n  var firstResult = parentHostFiber.compareDocumentPosition(otherNode),\n    lastResult = result.compareDocumentPosition(otherNode),\n    otherNodeIsWithinFirstOrLastChild =\n      firstResult & Node.DOCUMENT_POSITION_CONTAINED_BY ||\n      lastResult & Node.DOCUMENT_POSITION_CONTAINED_BY;\n  lastResult =\n    parentHostInstance &&\n    parentHostInstanceFromDOM &&\n    firstResult & Node.DOCUMENT_POSITION_FOLLOWING &&\n    lastResult & Node.DOCUMENT_POSITION_PRECEDING;\n  parentHostFiber =\n    (parentHostInstance && parentHostFiber === otherNode) ||\n    (parentHostInstanceFromDOM && result === otherNode) ||\n    otherNodeIsWithinFirstOrLastChild ||\n    lastResult\n      ? Node.DOCUMENT_POSITION_CONTAINED_BY\n      : (!parentHostInstance && parentHostFiber === otherNode) ||\n          (!parentHostInstanceFromDOM && result === otherNode)\n        ? Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC\n        : firstResult;\n  return parentHostFiber & Node.DOCUMENT_POSITION_DISCONNECTED ||\n    parentHostFiber & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC ||\n    validateDocumentPositionWithFiberTree(\n      parentHostFiber,\n      this._fragmentFiber,\n      children[0],\n      children[children.length - 1],\n      otherNode\n    )\n    ? parentHostFiber\n    : Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;\n};\nfunction validateDocumentPositionWithFiberTree(\n  documentPosition,\n  fragmentFiber,\n  precedingBoundaryFiber,\n  followingBoundaryFiber,\n  otherNode\n) {\n  var otherFiber = getClosestInstanceFromNode(otherNode);\n  if (documentPosition & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n    if ((precedingBoundaryFiber = !!otherFiber))\n      a: {\n        for (; null !== otherFiber; ) {\n          if (\n            7 === otherFiber.tag &&\n            (otherFiber === fragmentFiber ||\n              otherFiber.alternate === fragmentFiber)\n          ) {\n            precedingBoundaryFiber = !0;\n            break a;\n          }\n          otherFiber = otherFiber.return;\n        }\n        precedingBoundaryFiber = !1;\n      }\n    return precedingBoundaryFiber;\n  }\n  if (documentPosition & Node.DOCUMENT_POSITION_CONTAINS) {\n    if (null === otherFiber)\n      return (\n        (otherFiber = otherNode.ownerDocument),\n        otherNode === otherFiber ||\n          otherNode === otherFiber.documentElement ||\n          otherNode === otherFiber.body\n      );\n    a: {\n      otherFiber = fragmentFiber;\n      for (\n        fragmentFiber =\n          getFragmentParentInstanceOrContainerFiber(fragmentFiber);\n        null !== otherFiber;\n\n      ) {\n        if (\n          !(\n            (5 !== otherFiber.tag &&\n              3 !== otherFiber.tag &&\n              27 !== otherFiber.tag) ||\n            (otherFiber !== fragmentFiber &&\n              otherFiber.alternate !== fragmentFiber)\n          )\n        ) {\n          otherFiber = !0;\n          break a;\n        }\n        otherFiber = otherFiber.return;\n      }\n      otherFiber = !1;\n    }\n    return otherFiber;\n  }\n  return documentPosition & Node.DOCUMENT_POSITION_PRECEDING\n    ? ((fragmentFiber = !!otherFiber) &&\n        !(fragmentFiber = otherFiber === precedingBoundaryFiber) &&\n        ((fragmentFiber = getLowestCommonAncestor(\n          precedingBoundaryFiber,\n          otherFiber,\n          getParentForFragmentAncestors\n        )),\n        null === fragmentFiber\n          ? (fragmentFiber = !1)\n          : (traverseVisibleInstancesAndTextInstances(\n              fragmentFiber,\n              !0,\n              isFiberPrecedingCheck,\n              otherFiber,\n              precedingBoundaryFiber\n            ),\n            (otherFiber = searchTarget),\n            (searchTarget = null),\n            (fragmentFiber = null !== otherFiber))),\n      fragmentFiber)\n    : documentPosition & Node.DOCUMENT_POSITION_FOLLOWING\n      ? ((fragmentFiber = !!otherFiber) &&\n          !(fragmentFiber = otherFiber === followingBoundaryFiber) &&\n          ((fragmentFiber = getLowestCommonAncestor(\n            followingBoundaryFiber,\n            otherFiber,\n            getParentForFragmentAncestors\n          )),\n          null === fragmentFiber\n            ? (fragmentFiber = !1)\n            : (traverseVisibleInstancesAndTextInstances(\n                fragmentFiber,\n                !0,\n                isFiberFollowingCheck,\n                otherFiber,\n                followingBoundaryFiber\n              ),\n              (otherFiber = searchTarget),\n              (searchBoundary = searchTarget = null),\n              (fragmentFiber = null !== otherFiber))),\n        fragmentFiber)\n      : !1;\n}\nfunction scrollTextNodeIntoView(textNode, resolvedAlignToTop) {\n  var range = textNode.ownerDocument.createRange();\n  range.selectNodeContents(textNode);\n  textNode = range.getBoundingClientRect();\n  window.scrollTo(\n    window.scrollX + textNode.left,\n    resolvedAlignToTop\n      ? window.scrollY + textNode.top\n      : window.scrollY + textNode.bottom - window.innerHeight\n  );\n}\nFragmentInstance.prototype.scrollIntoView = function (alignToTop) {\n  if (\"object\" === typeof alignToTop) throw Error(formatProdErrorMessage(566));\n  var children = [];\n  traverseVisibleInstancesAndTextInstances(\n    this._fragmentFiber.child,\n    !1,\n    collectChildren,\n    children,\n    void 0,\n    void 0\n  );\n  var resolvedAlignToTop = !1 !== alignToTop;\n  if (0 === children.length) {\n    var hostSiblings = getFragmentInstanceOrTextInstanceSiblings(\n      this._fragmentFiber\n    );\n    hostSiblings = resolvedAlignToTop\n      ? hostSiblings[1] ||\n        hostSiblings[0] ||\n        getFragmentParentInstanceOrContainerFiber(this._fragmentFiber)\n      : hostSiblings[0] || hostSiblings[1];\n    if (null === hostSiblings) return;\n    if (6 === hostSiblings.tag) {\n      alignToTop = getInstanceFromHostFiber(hostSiblings);\n      scrollTextNodeIntoView(alignToTop, resolvedAlignToTop);\n      return;\n    }\n    hostSiblings = getInstanceFromHostFiber(hostSiblings);\n    if (9 !== hostSiblings.nodeType) {\n      if (11 === hostSiblings.nodeType) {\n        resolvedAlignToTop = \"host\" in hostSiblings ? hostSiblings.host : null;\n        null !== resolvedAlignToTop &&\n          resolvedAlignToTop.scrollIntoView(alignToTop);\n        return;\n      }\n      hostSiblings.scrollIntoView(alignToTop);\n    }\n  }\n  for (\n    hostSiblings = resolvedAlignToTop ? children.length - 1 : 0;\n    hostSiblings !== (resolvedAlignToTop ? -1 : children.length);\n\n  ) {\n    var child = children[hostSiblings];\n    6 === child.tag\n      ? ((child = getInstanceFromHostFiber(child)),\n        scrollTextNodeIntoView(child, resolvedAlignToTop))\n      : getInstanceFromHostFiber(child).scrollIntoView(alignToTop);\n    hostSiblings += resolvedAlignToTop ? -1 : 1;\n  }\n};\nfunction addFragmentHandleToFiber(child, fragmentInstance) {\n  child = getInstanceFromHostFiber(child);\n  addFragmentHandleToInstance(child, fragmentInstance);\n  return !1;\n}\nfunction addFragmentHandleToInstance(instance, fragmentInstance) {\n  null == instance.reactFragments && (instance.reactFragments = new Set());\n  instance.reactFragments.add(fragmentInstance);\n}\nfunction commitNewChildToFragmentInstance(childInstance, fragmentInstance) {\n  var eventListeners = fragmentInstance._eventListeners;\n  if (null !== eventListeners)\n    for (var i$jscomp$0 = 0; i$jscomp$0 < eventListeners.length; i$jscomp$0++) {\n      var _eventListeners$i3 = eventListeners[i$jscomp$0];\n      childInstance.addEventListener(\n        _eventListeners$i3.type,\n        _eventListeners$i3.attachedListener,\n        getAttachOptions(_eventListeners$i3.optionsOrUseCapture)\n      );\n    }\n  3 !== childInstance.nodeType &&\n    ((eventListeners = fragmentInstance._observers),\n    null !== eventListeners &&\n      eventListeners.forEach(function (observer) {\n        for (\n          var writeIdx = 0, i = 0;\n          i < pendingIntersectionUnobserves.length;\n          i++\n        ) {\n          var pending = pendingIntersectionUnobserves[i];\n          if (\n            pending.fragmentInstance !== fragmentInstance ||\n            pending.observer !== observer ||\n            pending.instance !== childInstance\n          )\n            pendingIntersectionUnobserves[writeIdx++] = pending;\n        }\n        pendingIntersectionUnobserves.length = writeIdx;\n        observer.observe(childInstance);\n      }),\n    addFragmentHandleToInstance(childInstance, fragmentInstance));\n}\nfunction deleteChildFromFragmentInstance(childInstance, fragmentInstance) {\n  var eventListeners = fragmentInstance._eventListeners;\n  if (null !== eventListeners)\n    for (var i = 0; i < eventListeners.length; i++) {\n      var _eventListeners$i4 = eventListeners[i];\n      childInstance.removeEventListener(\n        _eventListeners$i4.type,\n        _eventListeners$i4.attachedListener,\n        getAttachOptions(_eventListeners$i4.optionsOrUseCapture)\n      );\n    }\n  3 !== childInstance.nodeType &&\n    ((eventListeners = fragmentInstance._observers),\n    null !== eventListeners &&\n      eventListeners.forEach(function (observer) {\n        \"string\" === typeof observer.rootMargin\n          ? schedulePendingIntersectionUnobserve(\n              fragmentInstance,\n              observer,\n              childInstance\n            )\n          : observer.unobserve(childInstance);\n      }),\n    null != childInstance.reactFragments &&\n      childInstance.reactFragments.delete(fragmentInstance));\n}\nfunction clearContainerSparingly(container) {\n  var nextNode = container.firstChild;\n  nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);\n  for (; nextNode; ) {\n    var node = nextNode;\n    nextNode = nextNode.nextSibling;\n    switch (node.nodeName) {\n      case \"HTML\":\n      case \"HEAD\":\n      case \"BODY\":\n        clearContainerSparingly(node);\n        detachDeletedInstance(node);\n        continue;\n      case \"SCRIPT\":\n      case \"STYLE\":\n        continue;\n      case \"LINK\":\n        if (\"stylesheet\" === node.rel.toLowerCase()) continue;\n    }\n    container.removeChild(node);\n  }\n}\nfunction canHydrateInstance(instance, type, props, inRootOrSingleton) {\n  for (; 1 === instance.nodeType; ) {\n    var anyProps = props;\n    if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {\n      if (\n        !inRootOrSingleton &&\n        (\"INPUT\" !== instance.nodeName || \"hidden\" !== instance.type)\n      )\n        break;\n    } else if (!inRootOrSingleton)\n      if (\"input\" === type && \"hidden\" === instance.type) {\n        var name = null == anyProps.name ? null : \"\" + anyProps.name;\n        if (\n          \"hidden\" === anyProps.type &&\n          instance.getAttribute(\"name\") === name\n        )\n          return instance;\n      } else return instance;\n    else if (!instance[internalHoistableMarker])\n      switch (type) {\n        case \"meta\":\n          if (!instance.hasAttribute(\"itemprop\")) break;\n          return instance;\n        case \"link\":\n          name = instance.getAttribute(\"rel\");\n          if (\"stylesheet\" === name && instance.hasAttribute(\"data-precedence\"))\n            break;\n          else if (\n            name !== anyProps.rel ||\n            instance.getAttribute(\"href\") !==\n              (null == anyProps.href || \"\" === anyProps.href\n                ? null\n                : anyProps.href) ||\n            instance.getAttribute(\"crossorigin\") !==\n              (null == anyProps.crossOrigin ? null : anyProps.crossOrigin) ||\n            instance.getAttribute(\"title\") !==\n              (null == anyProps.title ? null : anyProps.title)\n          )\n            break;\n          return instance;\n        case \"style\":\n          if (instance.hasAttribute(\"data-precedence\")) break;\n          return instance;\n        case \"script\":\n          name = instance.getAttribute(\"src\");\n          if (\n            (name !== (null == anyProps.src ? null : anyProps.src) ||\n              instance.getAttribute(\"type\") !==\n                (null == anyProps.type ? null : anyProps.type) ||\n              instance.getAttribute(\"crossorigin\") !==\n                (null == anyProps.crossOrigin ? null : anyProps.crossOrigin)) &&\n            name &&\n            instance.hasAttribute(\"async\") &&\n            !instance.hasAttribute(\"itemprop\")\n          )\n            break;\n          return instance;\n        default:\n          return instance;\n      }\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) break;\n  }\n  return null;\n}\nfunction canHydrateTextInstance(instance, text, inRootOrSingleton) {\n  if (\"\" === text) return null;\n  for (; 3 !== instance.nodeType; ) {\n    if (\n      (1 !== instance.nodeType ||\n        \"INPUT\" !== instance.nodeName ||\n        \"hidden\" !== instance.type) &&\n      !inRootOrSingleton\n    )\n      return null;\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) return null;\n  }\n  return instance;\n}\nfunction canHydrateHydrationBoundary(instance, inRootOrSingleton) {\n  for (; 8 !== instance.nodeType; ) {\n    if (\n      (1 !== instance.nodeType ||\n        \"INPUT\" !== instance.nodeName ||\n        \"hidden\" !== instance.type) &&\n      !inRootOrSingleton\n    )\n      return null;\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) return null;\n  }\n  return instance;\n}\nfunction isSuspenseInstancePending(instance) {\n  return \"$?\" === instance.data || \"$~\" === instance.data;\n}\nfunction isSuspenseInstanceFallback(instance) {\n  return (\n    \"$!\" === instance.data ||\n    (\"$?\" === instance.data && \"loading\" !== instance.ownerDocument.readyState)\n  );\n}\nfunction registerSuspenseInstanceRetry(instance, callback) {\n  var ownerDocument = instance.ownerDocument;\n  if (\"$~\" === instance.data) instance._reactRetry = callback;\n  else if (\"$?\" !== instance.data || \"loading\" !== ownerDocument.readyState)\n    callback();\n  else {\n    var listener = function () {\n      callback();\n      ownerDocument.removeEventListener(\"DOMContentLoaded\", listener);\n    };\n    ownerDocument.addEventListener(\"DOMContentLoaded\", listener);\n    instance._reactRetry = listener;\n  }\n}\nfunction getNextHydratable(node) {\n  for (; null != node; node = node.nextSibling) {\n    var nodeType = node.nodeType;\n    if (1 === nodeType || 3 === nodeType) break;\n    if (8 === nodeType) {\n      nodeType = node.data;\n      if (\n        \"$\" === nodeType ||\n        \"$!\" === nodeType ||\n        \"$?\" === nodeType ||\n        \"$~\" === nodeType ||\n        \"&\" === nodeType ||\n        \"F!\" === nodeType ||\n        \"F\" === nodeType\n      )\n        break;\n      if (\"/$\" === nodeType || \"/&\" === nodeType) return null;\n    }\n  }\n  return node;\n}\nvar previousHydratableOnEnteringScopedSingleton = null;\nfunction getNextHydratableInstanceAfterHydrationBoundary(hydrationInstance) {\n  hydrationInstance = hydrationInstance.nextSibling;\n  for (var depth = 0; hydrationInstance; ) {\n    if (8 === hydrationInstance.nodeType) {\n      var data = hydrationInstance.data;\n      if (\"/$\" === data || \"/&\" === data) {\n        if (0 === depth)\n          return getNextHydratable(hydrationInstance.nextSibling);\n        depth--;\n      } else\n        (\"$\" !== data &&\n          \"$!\" !== data &&\n          \"$?\" !== data &&\n          \"$~\" !== data &&\n          \"&\" !== data) ||\n          depth++;\n    }\n    hydrationInstance = hydrationInstance.nextSibling;\n  }\n  return null;\n}\nfunction getParentHydrationBoundary(targetInstance) {\n  targetInstance = targetInstance.previousSibling;\n  for (var depth = 0; targetInstance; ) {\n    if (8 === targetInstance.nodeType) {\n      var data = targetInstance.data;\n      if (\n        \"$\" === data ||\n        \"$!\" === data ||\n        \"$?\" === data ||\n        \"$~\" === data ||\n        \"&\" === data\n      ) {\n        if (0 === depth) return targetInstance;\n        depth--;\n      } else (\"/$\" !== data && \"/&\" !== data) || depth++;\n    }\n    targetInstance = targetInstance.previousSibling;\n  }\n  return null;\n}\nfunction setFocusIfFocusable(node, focusOptions) {\n  function handleFocus() {\n    didFocus = !0;\n  }\n  if (node.ownerDocument.activeElement === node) return !0;\n  var didFocus = !1;\n  try {\n    node.ownerDocument.addEventListener(\"focus\", handleFocus, !0),\n      (node.focus || HTMLElement.prototype.focus).call(node, focusOptions);\n  } finally {\n    node.ownerDocument.removeEventListener(\"focus\", handleFocus, !0);\n  }\n  return didFocus;\n}\nfunction requestPostPaintCallback(callback) {\n  localRequestAnimationFrame(function () {\n    localRequestAnimationFrame(function (time) {\n      return callback(time);\n    });\n  });\n}\nfunction resolveSingletonInstance(type, props, rootContainerInstance) {\n  props = getOwnerDocumentFromRootContainer(rootContainerInstance);\n  switch (type) {\n    case \"html\":\n      type = props.documentElement;\n      if (!type) throw Error(formatProdErrorMessage(452));\n      return type;\n    case \"head\":\n      type = props.head;\n      if (!type) throw Error(formatProdErrorMessage(453));\n      return type;\n    case \"body\":\n      type = props.body;\n      if (!type) throw Error(formatProdErrorMessage(454));\n      return type;\n    default:\n      throw Error(formatProdErrorMessage(451));\n  }\n}\nfunction releaseSingletonInstance(instance, type, props) {\n  for (var propKey in props) {\n    var propValue = props[propKey];\n    props.hasOwnProperty(propKey) &&\n      null != propValue &&\n      setProp(instance, type, propKey, null, emptyProps, propValue);\n  }\n  null != props.dangerouslySetInnerHTML && (instance.textContent = \"\");\n  instance.onclick === noop$1 && (instance.onclick = null);\n  detachDeletedInstance(instance);\n}\nfunction clearSingletonPreambleContribution(instance) {\n  for (var attributes = instance.attributes; attributes.length; )\n    instance.removeAttributeNode(attributes[0]);\n  detachDeletedInstance(instance);\n}\nvar preloadPropsMap = new Map(),\n  preconnectsSet = new Set();\nfunction getHoistableRoot(container) {\n  if (\"function\" === typeof container.getRootNode) {\n    var rootNode = container.getRootNode();\n    if (9 === rootNode.nodeType || 11 === rootNode.nodeType) return rootNode;\n  }\n  return 9 === container.nodeType ? container : container.ownerDocument;\n}\nvar previousDispatcher = ReactDOMSharedInternals.d;\nReactDOMSharedInternals.d = {\n  f: flushSyncWork,\n  r: requestFormReset,\n  D: prefetchDNS,\n  C: preconnect,\n  L: preload,\n  m: preloadModule,\n  X: preinitScript,\n  S: preinitStyle,\n  M: preinitModuleScript\n};\nfunction flushSyncWork() {\n  var previousWasRendering = previousDispatcher.f(),\n    wasRendering = flushSyncWork$1();\n  return previousWasRendering || wasRendering;\n}\nfunction requestFormReset(form) {\n  var formInst = getInstanceFromNode(form);\n  null !== formInst && 5 === formInst.tag && \"form\" === formInst.type\n    ? requestFormReset$1(formInst)\n    : previousDispatcher.r(form);\n}\nvar globalDocument = \"undefined\" === typeof document ? null : document;\nfunction preconnectAs(rel, href, crossOrigin) {\n  var ownerDocument = globalDocument;\n  if (ownerDocument && \"string\" === typeof href && href) {\n    var limitedEscapedHref =\n      escapeSelectorAttributeValueInsideDoubleQuotes(href);\n    limitedEscapedHref =\n      'link[rel=\"' + rel + '\"][href=\"' + limitedEscapedHref + '\"]';\n    \"string\" === typeof crossOrigin &&\n      (limitedEscapedHref += '[crossorigin=\"' + crossOrigin + '\"]');\n    preconnectsSet.has(limitedEscapedHref) ||\n      (preconnectsSet.add(limitedEscapedHref),\n      (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),\n      null === ownerDocument.querySelector(limitedEscapedHref) &&\n        ((href = ownerDocument.createElement(\"link\")),\n        setInitialProperties(href, \"link\", rel),\n        markNodeAsHoistable(href),\n        ownerDocument.head.appendChild(href)));\n  }\n}\nfunction prefetchDNS(href) {\n  previousDispatcher.D(href);\n  preconnectAs(\"dns-prefetch\", href, null);\n}\nfunction preconnect(href, crossOrigin) {\n  previousDispatcher.C(href, crossOrigin);\n  preconnectAs(\"preconnect\", href, crossOrigin);\n}\nfunction preload(href, as, options) {\n  previousDispatcher.L(href, as, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href && as) {\n    var preloadSelector =\n      'link[rel=\"preload\"][as=\"' +\n      escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n      '\"]';\n    \"image\" === as\n      ? options && options.imageSrcSet\n        ? ((preloadSelector +=\n            '[imagesrcset=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(\n              options.imageSrcSet\n            ) +\n            '\"]'),\n          \"string\" === typeof options.imageSizes &&\n            (preloadSelector +=\n              '[imagesizes=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                options.imageSizes\n              ) +\n              '\"]'))\n        : (preloadSelector +=\n            '[href=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n            '\"]')\n      : (preloadSelector +=\n          '[href=\"' +\n          escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n          '\"]');\n    var key = preloadSelector;\n    switch (as) {\n      case \"style\":\n        key = getStyleKey(href);\n        break;\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    if (\n      !(\n        preloadPropsMap.has(key) ||\n        ((href = assign(\n          {\n            rel: \"preload\",\n            href:\n              \"image\" === as && options && options.imageSrcSet ? void 0 : href,\n            as: as\n          },\n          options\n        )),\n        preloadPropsMap.set(key, href),\n        null !== ownerDocument.querySelector(preloadSelector) ||\n          (\"style\" === as &&\n            ownerDocument.querySelector(getStylesheetSelectorFromKey(key))) ||\n          (\"script\" === as &&\n            ownerDocument.querySelector(getScriptSelectorFromKey(key))))\n      )\n    ) {\n      var instance = ownerDocument.createElement(\"link\");\n      setInitialProperties(instance, \"link\", href);\n      \"style\" === as &&\n        ((instance[internalLoadPendingKey] = !0),\n        (instance.onload = instance.onerror =\n          function () {\n            clearPendingLoadOnNode(instance);\n          }));\n      markNodeAsHoistable(instance);\n      ownerDocument.head.appendChild(instance);\n    }\n  }\n}\nfunction preloadModule(href, options) {\n  previousDispatcher.m(href, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var as = options && \"string\" === typeof options.as ? options.as : \"script\",\n      preloadSelector =\n        'link[rel=\"modulepreload\"][as=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n        '\"][href=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n        '\"]',\n      key = preloadSelector;\n    switch (as) {\n      case \"audioworklet\":\n      case \"paintworklet\":\n      case \"serviceworker\":\n      case \"sharedworker\":\n      case \"worker\":\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    if (\n      !preloadPropsMap.has(key) &&\n      ((href = assign({ rel: \"modulepreload\", href: href }, options)),\n      preloadPropsMap.set(key, href),\n      null === ownerDocument.querySelector(preloadSelector))\n    ) {\n      switch (as) {\n        case \"audioworklet\":\n        case \"paintworklet\":\n        case \"serviceworker\":\n        case \"sharedworker\":\n        case \"worker\":\n        case \"script\":\n          if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))\n            return;\n      }\n      as = ownerDocument.createElement(\"link\");\n      setInitialProperties(as, \"link\", href);\n      markNodeAsHoistable(as);\n      ownerDocument.head.appendChild(as);\n    }\n  }\n}\nfunction preinitStyle(href, precedence, options) {\n  previousDispatcher.S(href, precedence, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,\n      key = getStyleKey(href);\n    precedence = precedence || \"default\";\n    var resource = styles.get(key);\n    if (!resource) {\n      var state = { loading: 0, preload: null };\n      if (\n        (resource = ownerDocument.querySelector(\n          getStylesheetSelectorFromKey(key)\n        ))\n      )\n        state.loading = 5;\n      else {\n        href = assign(\n          { rel: \"stylesheet\", href: href, \"data-precedence\": precedence },\n          options\n        );\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForStylesheet(href, options);\n        var link = (resource = ownerDocument.createElement(\"link\"));\n        markNodeAsHoistable(link);\n        setInitialProperties(link, \"link\", href);\n        link._p = new Promise(function (resolve, reject) {\n          link.onload = resolve;\n          link.onerror = reject;\n        });\n        link.addEventListener(\"load\", function () {\n          state.loading |= 1;\n        });\n        link.addEventListener(\"error\", function () {\n          state.loading |= 2;\n        });\n        state.loading |= 4;\n        insertStylesheet(resource, precedence, ownerDocument);\n      }\n      resource = {\n        type: \"stylesheet\",\n        instance: resource,\n        count: 1,\n        state: state\n      };\n      styles.set(key, resource);\n    }\n  }\n}\nfunction preinitScript(src, options) {\n  previousDispatcher.X(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0 }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction preinitModuleScript(src, options) {\n  previousDispatcher.M(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0, type: \"module\" }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction getResource(type, currentProps, pendingProps, currentResource) {\n  var JSCompiler_inline_result = (JSCompiler_inline_result =\n    rootInstanceStackCursor.current)\n    ? getHoistableRoot(JSCompiler_inline_result)\n    : null;\n  if (!JSCompiler_inline_result) throw Error(formatProdErrorMessage(446));\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return null;\n    case \"style\":\n      return \"string\" === typeof pendingProps.precedence &&\n        \"string\" === typeof pendingProps.href\n        ? ((pendingProps = getStyleKey(pendingProps.href)),\n          (currentProps = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles),\n          (currentResource = currentProps.get(pendingProps)),\n          currentResource ||\n            ((currentResource = {\n              type: \"style\",\n              instance: null,\n              count: 0,\n              state: null\n            }),\n            currentProps.set(pendingProps, currentResource)),\n          currentResource)\n        : { type: \"void\", instance: null, count: 0, state: null };\n    case \"link\":\n      if (\n        \"stylesheet\" === pendingProps.rel &&\n        \"string\" === typeof pendingProps.href &&\n        \"string\" === typeof pendingProps.precedence\n      ) {\n        type = getStyleKey(pendingProps.href);\n        var styles$268 = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles,\n          resource$269 = styles$268.get(type);\n        resource$269 ||\n          ((JSCompiler_inline_result =\n            JSCompiler_inline_result.ownerDocument || JSCompiler_inline_result),\n          (resource$269 = {\n            type: \"stylesheet\",\n            instance: null,\n            count: 0,\n            state: { loading: 0, preload: null }\n          }),\n          styles$268.set(type, resource$269),\n          (styles$268 = JSCompiler_inline_result.querySelector(\n            getStylesheetSelectorFromKey(type)\n          ))\n            ? styles$268._p ||\n              ((resource$269.instance = styles$268),\n              (resource$269.state.loading = 5))\n            : ((styles$268 = preloadPropsMap.get(type)),\n              styles$268 ||\n                ((styles$268 = {\n                  rel: \"preload\",\n                  as: \"style\",\n                  href: pendingProps.href,\n                  crossOrigin: pendingProps.crossOrigin,\n                  integrity: pendingProps.integrity,\n                  media: pendingProps.media,\n                  hrefLang: pendingProps.hrefLang,\n                  referrerPolicy: pendingProps.referrerPolicy\n                }),\n                preloadPropsMap.set(type, styles$268)),\n              preloadStylesheet(\n                JSCompiler_inline_result,\n                type,\n                styles$268,\n                resource$269.state\n              )));\n        if (currentProps && null === currentResource)\n          throw Error(formatProdErrorMessage(528, \"\"));\n        return resource$269;\n      }\n      if (currentProps && null !== currentResource)\n        throw Error(formatProdErrorMessage(529, \"\"));\n      return null;\n    case \"script\":\n      return (\n        (currentProps = pendingProps.async),\n        (pendingProps = pendingProps.src),\n        \"string\" === typeof pendingProps &&\n        currentProps &&\n        \"function\" !== typeof currentProps &&\n        \"symbol\" !== typeof currentProps\n          ? ((pendingProps = getScriptKey(pendingProps)),\n            (currentProps = getResourcesFromRoot(\n              JSCompiler_inline_result\n            ).hoistableScripts),\n            (currentResource = currentProps.get(pendingProps)),\n            currentResource ||\n              ((currentResource = {\n                type: \"script\",\n                instance: null,\n                count: 0,\n                state: null\n              }),\n              currentProps.set(pendingProps, currentResource)),\n            currentResource)\n          : { type: \"void\", instance: null, count: 0, state: null }\n      );\n    default:\n      throw Error(formatProdErrorMessage(444, type));\n  }\n}\nfunction getStyleKey(href) {\n  return 'href=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '\"';\n}\nfunction getStylesheetSelectorFromKey(key) {\n  return 'link[rel=\"stylesheet\"][' + key + \"]\";\n}\nfunction stylesheetPropsFromRawProps(rawProps) {\n  return assign({}, rawProps, {\n    \"data-precedence\": rawProps.precedence,\n    precedence: null\n  });\n}\nfunction preloadStylesheet(ownerDocument, key, preloadProps, state) {\n  if (\n    (key = ownerDocument.querySelector(\n      'link[rel=\"preload\"][as=\"style\"][' + key + \"]\"\n    ))\n  ) {\n    if (!0 !== key[internalLoadPendingKey]) {\n      state.loading = 1;\n      return;\n    }\n  } else\n    (key = ownerDocument.createElement(\"link\")),\n      (key[internalLoadPendingKey] = !0),\n      (key.onload = key.onerror = clearPendingLoadOnNode.bind(null, key)),\n      setInitialProperties(key, \"link\", preloadProps),\n      markNodeAsHoistable(key),\n      ownerDocument.head.appendChild(key);\n  state.preload = key;\n  key.addEventListener(\"load\", function () {\n    return (state.loading |= 1);\n  });\n  key.addEventListener(\"error\", function () {\n    return (state.loading |= 2);\n  });\n}\nfunction getScriptKey(src) {\n  return '[src=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '\"]';\n}\nfunction getScriptSelectorFromKey(key) {\n  return \"script[async]\" + key;\n}\nfunction acquireResource(hoistableRoot, resource, props) {\n  resource.count++;\n  if (null === resource.instance)\n    switch (resource.type) {\n      case \"style\":\n        var instance = hoistableRoot.querySelector(\n          'style[data-href~=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +\n            '\"]'\n        );\n        if (instance)\n          return (\n            (resource.instance = instance),\n            markNodeAsHoistable(instance),\n            instance\n          );\n        var styleProps = assign({}, props, {\n          \"data-href\": props.href,\n          \"data-precedence\": props.precedence,\n          href: null,\n          precedence: null\n        });\n        instance = (hoistableRoot.ownerDocument || hoistableRoot).createElement(\n          \"style\"\n        );\n        markNodeAsHoistable(instance);\n        setInitialProperties(instance, \"style\", styleProps);\n        insertStylesheet(instance, props.precedence, hoistableRoot);\n        return (resource.instance = instance);\n      case \"stylesheet\":\n        styleProps = getStyleKey(props.href);\n        var instance$274 = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(styleProps)\n        );\n        if (instance$274)\n          return (\n            (resource.state.loading |= 4),\n            (resource.instance = instance$274),\n            markNodeAsHoistable(instance$274),\n            instance$274\n          );\n        instance = stylesheetPropsFromRawProps(props);\n        (styleProps = preloadPropsMap.get(styleProps)) &&\n          adoptPreloadPropsForStylesheet(instance, styleProps);\n        instance$274 = (\n          hoistableRoot.ownerDocument || hoistableRoot\n        ).createElement(\"link\");\n        markNodeAsHoistable(instance$274);\n        var linkInstance = instance$274;\n        linkInstance._p = new Promise(function (resolve, reject) {\n          linkInstance.onload = resolve;\n          linkInstance.onerror = reject;\n        });\n        setInitialProperties(instance$274, \"link\", instance);\n        resource.state.loading |= 4;\n        insertStylesheet(instance$274, props.precedence, hoistableRoot);\n        return (resource.instance = instance$274);\n      case \"script\":\n        instance$274 = getScriptKey(props.src);\n        if (\n          (styleProps = hoistableRoot.querySelector(\n            getScriptSelectorFromKey(instance$274)\n          ))\n        )\n          return (\n            (resource.instance = styleProps),\n            markNodeAsHoistable(styleProps),\n            styleProps\n          );\n        instance = props;\n        if ((styleProps = preloadPropsMap.get(instance$274)))\n          (instance = assign({}, props)),\n            adoptPreloadPropsForScript(instance, styleProps);\n        hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n        styleProps = hoistableRoot.createElement(\"script\");\n        markNodeAsHoistable(styleProps);\n        setInitialProperties(styleProps, \"link\", instance);\n        hoistableRoot.head.appendChild(styleProps);\n        return (resource.instance = styleProps);\n      case \"void\":\n        return null;\n      default:\n        throw Error(formatProdErrorMessage(443, resource.type));\n    }\n  else\n    \"stylesheet\" === resource.type &&\n      0 === (resource.state.loading & 4) &&\n      ((instance = resource.instance),\n      (resource.state.loading |= 4),\n      insertStylesheet(instance, props.precedence, hoistableRoot));\n  return resource.instance;\n}\nfunction insertStylesheet(instance, precedence, root) {\n  for (\n    var nodes = root.querySelectorAll(\n        'link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'\n      ),\n      last = nodes.length ? nodes[nodes.length - 1] : null,\n      prior = last,\n      i = 0;\n    i < nodes.length;\n    i++\n  ) {\n    var node = nodes[i];\n    if (node.dataset.precedence === precedence) prior = node;\n    else if (prior !== last) break;\n  }\n  prior\n    ? prior.parentNode.insertBefore(instance, prior.nextSibling)\n    : ((precedence = 9 === root.nodeType ? root.head : root),\n      precedence.insertBefore(instance, precedence.firstChild));\n}\nfunction adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {\n  null == stylesheetProps.crossOrigin &&\n    (stylesheetProps.crossOrigin = preloadProps.crossOrigin);\n  null == stylesheetProps.referrerPolicy &&\n    (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == stylesheetProps.title && (stylesheetProps.title = preloadProps.title);\n}\nfunction adoptPreloadPropsForScript(scriptProps, preloadProps) {\n  null == scriptProps.crossOrigin &&\n    (scriptProps.crossOrigin = preloadProps.crossOrigin);\n  null == scriptProps.referrerPolicy &&\n    (scriptProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == scriptProps.integrity &&\n    (scriptProps.integrity = preloadProps.integrity);\n}\nvar tagCaches = null;\nfunction getHydratableHoistableCache(type, keyAttribute, ownerDocument) {\n  if (null === tagCaches) {\n    var cache = new Map();\n    var caches = (tagCaches = new Map());\n    caches.set(ownerDocument, cache);\n  } else\n    (caches = tagCaches),\n      (cache = caches.get(ownerDocument)),\n      cache || ((cache = new Map()), caches.set(ownerDocument, cache));\n  if (cache.has(type)) return cache;\n  cache.set(type, null);\n  ownerDocument = ownerDocument.getElementsByTagName(type);\n  for (caches = 0; caches < ownerDocument.length; caches++) {\n    var node = ownerDocument[caches];\n    if (\n      !(\n        node[internalHoistableMarker] ||\n        node[internalInstanceKey] ||\n        (\"link\" === type && \"stylesheet\" === node.getAttribute(\"rel\"))\n      ) &&\n      \"http://www.w3.org/2000/svg\" !== node.namespaceURI\n    ) {\n      var nodeKey = node.getAttribute(keyAttribute) || \"\";\n      nodeKey = type + nodeKey;\n      var existing = cache.get(nodeKey);\n      existing ? existing.push(node) : cache.set(nodeKey, [node]);\n    }\n  }\n  return cache;\n}\nfunction mountHoistable(hoistableRoot, type, instance) {\n  hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n  hoistableRoot.head.insertBefore(\n    instance,\n    \"title\" === type ? hoistableRoot.querySelector(\"head > title\") : null\n  );\n}\nfunction isHostHoistableType(type, props, hostContext) {\n  if (1 === hostContext || null != props.itemProp) return !1;\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return !0;\n    case \"style\":\n      if (\n        \"string\" !== typeof props.precedence ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href\n      )\n        break;\n      return !0;\n    case \"link\":\n      if (\n        \"string\" !== typeof props.rel ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href ||\n        props.onLoad ||\n        props.onError\n      )\n        break;\n      switch (props.rel) {\n        case \"stylesheet\":\n          return (\n            (type = props.disabled),\n            \"string\" === typeof props.precedence && null == type\n          );\n        default:\n          return !0;\n      }\n    case \"script\":\n      if (\n        props.async &&\n        \"function\" !== typeof props.async &&\n        \"symbol\" !== typeof props.async &&\n        !props.onLoad &&\n        !props.onError &&\n        props.src &&\n        \"string\" === typeof props.src\n      )\n        return !0;\n  }\n  return !1;\n}\nfunction maySuspendCommit(type, props) {\n  return (\n    \"img\" === type &&\n    null != props.src &&\n    \"\" !== props.src &&\n    null == props.onLoad &&\n    \"lazy\" !== props.loading\n  );\n}\nfunction preloadResource(resource) {\n  return \"stylesheet\" === resource.type && 0 === (resource.state.loading & 3)\n    ? !1\n    : !0;\n}\nfunction estimateImageBytes(instance) {\n  return (\n    (instance.width || 100) *\n    (instance.height || 100) *\n    (\"number\" === typeof devicePixelRatio ? devicePixelRatio : 1) *\n    0.25\n  );\n}\nfunction suspendInstance(state, instance) {\n  \"function\" === typeof instance.decode &&\n    (state.imgCount++,\n    instance.complete ||\n      ((state.imgBytes += estimateImageBytes(instance)),\n      state.suspenseyImages.push(instance)),\n    (state = onUnsuspendImg.bind(state)),\n    instance.decode().then(state, state));\n}\nfunction suspendResource(state, hoistableRoot, resource, props) {\n  if (\n    \"stylesheet\" === resource.type &&\n    (\"string\" !== typeof props.media ||\n      !1 !== matchMedia(props.media).matches) &&\n    0 === (resource.state.loading & 4)\n  ) {\n    if (null === resource.instance) {\n      var key = getStyleKey(props.href),\n        instance = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(key)\n        );\n      if (instance) {\n        hoistableRoot = instance._p;\n        null !== hoistableRoot &&\n          \"object\" === typeof hoistableRoot &&\n          \"function\" === typeof hoistableRoot.then &&\n          (state.count++,\n          (state = onUnsuspend.bind(state)),\n          hoistableRoot.then(state, state));\n        resource.state.loading |= 4;\n        resource.instance = instance;\n        markNodeAsHoistable(instance);\n        return;\n      }\n      instance = hoistableRoot.ownerDocument || hoistableRoot;\n      props = stylesheetPropsFromRawProps(props);\n      (key = preloadPropsMap.get(key)) &&\n        adoptPreloadPropsForStylesheet(props, key);\n      instance = instance.createElement(\"link\");\n      markNodeAsHoistable(instance);\n      var linkInstance = instance;\n      linkInstance._p = new Promise(function (resolve, reject) {\n        linkInstance.onload = resolve;\n        linkInstance.onerror = reject;\n      });\n      setInitialProperties(instance, \"link\", props);\n      resource.instance = instance;\n    }\n    null === state.stylesheets && (state.stylesheets = new Map());\n    state.stylesheets.set(resource, hoistableRoot);\n    (hoistableRoot = resource.state.preload) &&\n      0 === (resource.state.loading & 3) &&\n      (state.count++,\n      (resource = onUnsuspend.bind(state)),\n      hoistableRoot.addEventListener(\"load\", resource),\n      hoistableRoot.addEventListener(\"error\", resource));\n  }\n}\nvar estimatedBytesWithinLimit = 0;\nfunction waitForCommitToBeReady(state, timeoutOffset) {\n  state.stylesheets &&\n    0 === state.count &&\n    insertSuspendedStylesheets(state, state.stylesheets);\n  return 0 < state.count || 0 < state.imgCount\n    ? function (commit) {\n        var stylesheetTimer = setTimeout(function () {\n          state.stylesheets &&\n            insertSuspendedStylesheets(state, state.stylesheets);\n          if (state.unsuspend) {\n            var unsuspend = state.unsuspend;\n            state.unsuspend = null;\n            unsuspend();\n          }\n        }, 6e4 + timeoutOffset);\n        0 < state.imgBytes &&\n          0 === estimatedBytesWithinLimit &&\n          (estimatedBytesWithinLimit = 62500 * estimateBandwidth());\n        var imgTimer = setTimeout(\n          function () {\n            state.waitingForImages = !1;\n            if (\n              0 === state.count &&\n              (state.stylesheets &&\n                insertSuspendedStylesheets(state, state.stylesheets),\n              state.unsuspend)\n            ) {\n              var unsuspend = state.unsuspend;\n              state.unsuspend = null;\n              unsuspend();\n            }\n          },\n          (state.imgBytes > estimatedBytesWithinLimit ? 50 : 800) +\n            timeoutOffset\n        );\n        state.unsuspend = commit;\n        return function () {\n          state.unsuspend = null;\n          clearTimeout(stylesheetTimer);\n          clearTimeout(imgTimer);\n        };\n      }\n    : null;\n}\nfunction checkIfFullyUnsuspended(state) {\n  if (0 === state.count && (0 === state.imgCount || !state.waitingForImages))\n    if (state.stylesheets) insertSuspendedStylesheets(state, state.stylesheets);\n    else if (state.unsuspend) {\n      var unsuspend = state.unsuspend;\n      state.unsuspend = null;\n      unsuspend();\n    }\n}\nfunction onUnsuspend() {\n  this.count--;\n  checkIfFullyUnsuspended(this);\n}\nfunction onUnsuspendImg() {\n  this.imgCount--;\n  checkIfFullyUnsuspended(this);\n}\nvar precedencesByRoot = null;\nfunction insertSuspendedStylesheets(state, resources) {\n  state.stylesheets = null;\n  null !== state.unsuspend &&\n    (state.count++,\n    (precedencesByRoot = new Map()),\n    resources.forEach(insertStylesheetIntoRoot, state),\n    (precedencesByRoot = null),\n    onUnsuspend.call(state));\n}\nfunction insertStylesheetIntoRoot(root, resource) {\n  if (!(resource.state.loading & 4)) {\n    var precedences = precedencesByRoot.get(root);\n    if (precedences) var last = precedences.get(null);\n    else {\n      precedences = new Map();\n      precedencesByRoot.set(root, precedences);\n      for (\n        var nodes = root.querySelectorAll(\n            \"link[data-precedence],style[data-precedence]\"\n          ),\n          i = 0;\n        i < nodes.length;\n        i++\n      ) {\n        var node = nodes[i];\n        if (\n          \"LINK\" === node.nodeName ||\n          \"not all\" !== node.getAttribute(\"media\")\n        )\n          precedences.set(node.dataset.precedence, node), (last = node);\n      }\n      last && precedences.set(null, last);\n    }\n    nodes = resource.instance;\n    node = nodes.getAttribute(\"data-precedence\");\n    i = precedences.get(node) || last;\n    i === last && precedences.set(null, nodes);\n    precedences.set(node, nodes);\n    this.count++;\n    last = onUnsuspend.bind(this);\n    nodes.addEventListener(\"load\", last);\n    nodes.addEventListener(\"error\", last);\n    i\n      ? i.parentNode.insertBefore(nodes, i.nextSibling)\n      : ((root = 9 === root.nodeType ? root.head : root),\n        root.insertBefore(nodes, root.firstChild));\n    resource.state.loading |= 4;\n  }\n}\nvar HostTransitionContext = {\n  $$typeof: REACT_CONTEXT_TYPE,\n  Provider: null,\n  Consumer: null,\n  _currentValue: sharedNotPendingObject,\n  _currentValue2: sharedNotPendingObject,\n  _threadCount: 0\n};\nfunction FiberRootNode(\n  containerInfo,\n  tag,\n  hydrate,\n  identifierPrefix,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  onDefaultTransitionIndicator,\n  formState\n) {\n  this.tag = 1;\n  this.containerInfo = containerInfo;\n  this.pingCache = this.current = this.pendingChildren = null;\n  this.timeoutHandle = -1;\n  this.callbackNode =\n    this.next =\n    this.pendingContext =\n    this.context =\n    this.cancelPendingCommit =\n      null;\n  this.callbackPriority = 0;\n  this.expirationTimes = createLaneMap(-1);\n  this.entangledLanes =\n    this.shellSuspendCounter =\n    this.errorRecoveryDisabledLanes =\n    this.expiredLanes =\n    this.warmLanes =\n    this.pingedLanes =\n    this.suspendedLanes =\n    this.pendingLanes =\n      0;\n  this.entanglements = createLaneMap(0);\n  this.hiddenUpdates = createLaneMap(null);\n  this.identifierPrefix = identifierPrefix;\n  this.onUncaughtError = onUncaughtError;\n  this.onCaughtError = onCaughtError;\n  this.onRecoverableError = onRecoverableError;\n  this.pooledCache = null;\n  this.pooledCacheLanes = 0;\n  this.formState = formState;\n  this.transitionTypes = null;\n  this.incompleteTransitions = new Map();\n}\nfunction createFiberRoot(\n  containerInfo,\n  tag,\n  hydrate,\n  initialChildren,\n  hydrationCallbacks,\n  isStrictMode,\n  identifierPrefix,\n  formState,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  onDefaultTransitionIndicator\n) {\n  containerInfo = new FiberRootNode(\n    containerInfo,\n    tag,\n    hydrate,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    onDefaultTransitionIndicator,\n    formState\n  );\n  tag = 1;\n  !0 === isStrictMode && (tag |= 24);\n  isStrictMode = createFiberImplClass(3, null, null, tag);\n  containerInfo.current = isStrictMode;\n  isStrictMode.stateNode = containerInfo;\n  tag = createCache();\n  tag.refCount++;\n  containerInfo.pooledCache = tag;\n  tag.refCount++;\n  isStrictMode.memoizedState = {\n    element: initialChildren,\n    isDehydrated: hydrate,\n    cache: tag\n  };\n  initializeUpdateQueue(isStrictMode);\n  return containerInfo;\n}\nfunction getContextForSubtree(parentComponent) {\n  if (!parentComponent) return emptyContextObject;\n  parentComponent = emptyContextObject;\n  return parentComponent;\n}\nfunction updateContainerImpl(\n  rootFiber,\n  lane,\n  element,\n  container,\n  parentComponent,\n  callback\n) {\n  parentComponent = getContextForSubtree(parentComponent);\n  null === container.context\n    ? (container.context = parentComponent)\n    : (container.pendingContext = parentComponent);\n  container = createUpdate(lane);\n  container.payload = { element: element };\n  callback = void 0 === callback ? null : callback;\n  null !== callback && (container.callback = callback);\n  element = enqueueUpdate(rootFiber, container, lane);\n  null !== element &&\n    (scheduleUpdateOnFiber(element, rootFiber, lane),\n    entangleTransitions(element, rootFiber, lane));\n}\nfunction markRetryLaneImpl(fiber, retryLane) {\n  fiber = fiber.memoizedState;\n  if (null !== fiber && null !== fiber.dehydrated) {\n    var a = fiber.retryLane;\n    fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;\n  }\n}\nfunction markRetryLaneIfNotHydrated(fiber, retryLane) {\n  markRetryLaneImpl(fiber, retryLane);\n  (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);\n}\nfunction attemptContinuousHydration(fiber) {\n  if (13 === fiber.tag || 31 === fiber.tag) {\n    var root = enqueueConcurrentRenderForLane(fiber, 67108864);\n    null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);\n    markRetryLaneIfNotHydrated(fiber, 67108864);\n  }\n}\nfunction attemptHydrationAtCurrentPriority(fiber) {\n  if (13 === fiber.tag || 31 === fiber.tag) {\n    var lane = requestUpdateLane();\n    lane = getBumpedLaneForHydrationByLane(lane);\n    var root = enqueueConcurrentRenderForLane(fiber, lane);\n    null !== root && scheduleUpdateOnFiber(root, fiber, lane);\n    markRetryLaneIfNotHydrated(fiber, lane);\n  }\n}\nvar _enabled = !0;\nfunction dispatchDiscreteEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 2),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchContinuousEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 8),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchEvent(\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (_enabled) {\n    var blockedOn = findInstanceBlockingEvent(nativeEvent);\n    if (null === blockedOn)\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        return_targetInst,\n        targetContainer\n      ),\n        clearIfContinuousEvent(domEventName, nativeEvent);\n    else if (\n      queueIfContinuousEvent(\n        blockedOn,\n        domEventName,\n        eventSystemFlags,\n        targetContainer,\n        nativeEvent\n      )\n    )\n      nativeEvent.stopPropagation();\n    else if (\n      (clearIfContinuousEvent(domEventName, nativeEvent),\n      eventSystemFlags & 4 &&\n        -1 < discreteReplayableEvents.indexOf(domEventName))\n    ) {\n      for (; null !== blockedOn; ) {\n        var fiber = getInstanceFromNode(blockedOn);\n        if (null !== fiber)\n          switch (fiber.tag) {\n            case 3:\n              fiber = fiber.stateNode;\n              if (fiber.current.memoizedState.isDehydrated) {\n                var lanes = getHighestPriorityLanes(fiber.pendingLanes);\n                if (0 !== lanes) {\n                  var root = fiber;\n                  root.pendingLanes |= 2;\n                  for (root.entangledLanes |= 2; lanes; ) {\n                    var lane = 1 << (31 - clz32(lanes));\n                    root.entanglements[1] |= lane;\n                    lanes &= ~lane;\n                  }\n                  ensureRootIsScheduled(fiber);\n                  0 === (executionContext & 6) &&\n                    ((workInProgressRootRenderTargetTime = now() + 500),\n                    flushSyncWorkAcrossRoots_impl(0, !1));\n                }\n              }\n              break;\n            case 31:\n            case 13:\n              (root = enqueueConcurrentRenderForLane(fiber, 2)),\n                null !== root && scheduleUpdateOnFiber(root, fiber, 2),\n                flushSyncWork$1(),\n                markRetryLaneIfNotHydrated(fiber, 2);\n          }\n        fiber = findInstanceBlockingEvent(nativeEvent);\n        null === fiber &&\n          dispatchEventForPluginEventSystem(\n            domEventName,\n            eventSystemFlags,\n            nativeEvent,\n            return_targetInst,\n            targetContainer\n          );\n        if (fiber === blockedOn) break;\n        blockedOn = fiber;\n      }\n      null !== blockedOn && nativeEvent.stopPropagation();\n    } else\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        null,\n        targetContainer\n      );\n  }\n}\nfunction findInstanceBlockingEvent(nativeEvent) {\n  nativeEvent = getEventTarget(nativeEvent);\n  return findInstanceBlockingTarget(nativeEvent);\n}\nvar return_targetInst = null;\nfunction findInstanceBlockingTarget(targetNode) {\n  return_targetInst = null;\n  targetNode = getClosestInstanceFromNode(targetNode);\n  if (null !== targetNode) {\n    var nearestMounted = getNearestMountedFiber(targetNode);\n    if (null === nearestMounted) targetNode = null;\n    else {\n      var tag = nearestMounted.tag;\n      if (13 === tag) {\n        targetNode = getSuspenseInstanceFromFiber(nearestMounted);\n        if (null !== targetNode) return targetNode;\n        targetNode = null;\n      } else if (31 === tag) {\n        targetNode = getActivityInstanceFromFiber(nearestMounted);\n        if (null !== targetNode) return targetNode;\n        targetNode = null;\n      } else if (3 === tag) {\n        if (nearestMounted.stateNode.current.memoizedState.isDehydrated)\n          return 3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        targetNode = null;\n      } else nearestMounted !== targetNode && (targetNode = null);\n    }\n  }\n  return_targetInst = targetNode;\n  return null;\n}\nfunction getEventPriority(domEventName) {\n  switch (domEventName) {\n    case \"beforetoggle\":\n    case \"cancel\":\n    case \"click\":\n    case \"close\":\n    case \"contextmenu\":\n    case \"copy\":\n    case \"cut\":\n    case \"auxclick\":\n    case \"dblclick\":\n    case \"dragend\":\n    case \"dragstart\":\n    case \"drop\":\n    case \"focusin\":\n    case \"focusout\":\n    case \"input\":\n    case \"invalid\":\n    case \"keydown\":\n    case \"keypress\":\n    case \"keyup\":\n    case \"mousedown\":\n    case \"mouseup\":\n    case \"paste\":\n    case \"pause\":\n    case \"play\":\n    case \"pointercancel\":\n    case \"pointerdown\":\n    case \"pointerup\":\n    case \"ratechange\":\n    case \"reset\":\n    case \"seeked\":\n    case \"submit\":\n    case \"toggle\":\n    case \"touchcancel\":\n    case \"touchend\":\n    case \"touchstart\":\n    case \"volumechange\":\n    case \"change\":\n    case \"selectionchange\":\n    case \"textInput\":\n    case \"compositionstart\":\n    case \"compositionend\":\n    case \"compositionupdate\":\n    case \"beforeblur\":\n    case \"afterblur\":\n    case \"beforeinput\":\n    case \"blur\":\n    case \"fullscreenchange\":\n    case \"fullscreenerror\":\n    case \"focus\":\n    case \"hashchange\":\n    case \"popstate\":\n    case \"select\":\n    case \"selectstart\":\n      return 2;\n    case \"drag\":\n    case \"dragenter\":\n    case \"dragexit\":\n    case \"dragleave\":\n    case \"dragover\":\n    case \"mousemove\":\n    case \"mouseout\":\n    case \"mouseover\":\n    case \"pointermove\":\n    case \"pointerout\":\n    case \"pointerover\":\n    case \"resize\":\n    case \"scroll\":\n    case \"touchmove\":\n    case \"wheel\":\n    case \"mouseenter\":\n    case \"mouseleave\":\n    case \"pointerenter\":\n    case \"pointerleave\":\n      return 8;\n    case \"message\":\n      switch (getCurrentPriorityLevel()) {\n        case ImmediatePriority:\n          return 2;\n        case UserBlockingPriority:\n          return 8;\n        case NormalPriority$1:\n        case LowPriority:\n          return 32;\n        case IdlePriority:\n          return 268435456;\n        default:\n          return 32;\n      }\n    default:\n      return 32;\n  }\n}\nvar hasScheduledReplayAttempt = !1,\n  queuedFocus = null,\n  queuedDrag = null,\n  queuedMouse = null,\n  queuedPointers = new Map(),\n  queuedPointerCaptures = new Map(),\n  queuedExplicitHydrationTargets = [],\n  discreteReplayableEvents =\n    \"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\".split(\n      \" \"\n    );\nfunction clearIfContinuousEvent(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"focusin\":\n    case \"focusout\":\n      queuedFocus = null;\n      break;\n    case \"dragenter\":\n    case \"dragleave\":\n      queuedDrag = null;\n      break;\n    case \"mouseover\":\n    case \"mouseout\":\n      queuedMouse = null;\n      break;\n    case \"pointerover\":\n    case \"pointerout\":\n      queuedPointers.delete(nativeEvent.pointerId);\n      break;\n    case \"gotpointercapture\":\n    case \"lostpointercapture\":\n      queuedPointerCaptures.delete(nativeEvent.pointerId);\n  }\n}\nfunction accumulateOrCreateContinuousQueuedReplayableEvent(\n  existingQueuedEvent,\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (\n    null === existingQueuedEvent ||\n    existingQueuedEvent.nativeEvent !== nativeEvent\n  )\n    return (\n      (existingQueuedEvent = {\n        blockedOn: blockedOn,\n        domEventName: domEventName,\n        eventSystemFlags: eventSystemFlags,\n        nativeEvent: nativeEvent,\n        targetContainers: [targetContainer]\n      }),\n      null !== blockedOn &&\n        ((blockedOn = getInstanceFromNode(blockedOn)),\n        null !== blockedOn && attemptContinuousHydration(blockedOn)),\n      existingQueuedEvent\n    );\n  existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n  blockedOn = existingQueuedEvent.targetContainers;\n  null !== targetContainer &&\n    -1 === blockedOn.indexOf(targetContainer) &&\n    blockedOn.push(targetContainer);\n  return existingQueuedEvent;\n}\nfunction queueIfContinuousEvent(\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  switch (domEventName) {\n    case \"focusin\":\n      return (\n        (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedFocus,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"dragenter\":\n      return (\n        (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedDrag,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"mouseover\":\n      return (\n        (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedMouse,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"pointerover\":\n      var pointerId = nativeEvent.pointerId;\n      queuedPointers.set(\n        pointerId,\n        accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedPointers.get(pointerId) || null,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )\n      );\n      return !0;\n    case \"gotpointercapture\":\n      return (\n        (pointerId = nativeEvent.pointerId),\n        queuedPointerCaptures.set(\n          pointerId,\n          accumulateOrCreateContinuousQueuedReplayableEvent(\n            queuedPointerCaptures.get(pointerId) || null,\n            blockedOn,\n            domEventName,\n            eventSystemFlags,\n            targetContainer,\n            nativeEvent\n          )\n        ),\n        !0\n      );\n  }\n  return !1;\n}\nfunction attemptExplicitHydrationTarget(queuedTarget) {\n  var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n  if (null !== targetInst) {\n    var nearestMounted = getNearestMountedFiber(targetInst);\n    if (null !== nearestMounted)\n      if (((targetInst = nearestMounted.tag), 13 === targetInst)) {\n        if (\n          ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),\n          null !== targetInst)\n        ) {\n          queuedTarget.blockedOn = targetInst;\n          runWithPriority(queuedTarget.priority, function () {\n            attemptHydrationAtCurrentPriority(nearestMounted);\n          });\n          return;\n        }\n      } else if (31 === targetInst) {\n        if (\n          ((targetInst = getActivityInstanceFromFiber(nearestMounted)),\n          null !== targetInst)\n        ) {\n          queuedTarget.blockedOn = targetInst;\n          runWithPriority(queuedTarget.priority, function () {\n            attemptHydrationAtCurrentPriority(nearestMounted);\n          });\n          return;\n        }\n      } else if (\n        3 === targetInst &&\n        nearestMounted.stateNode.current.memoizedState.isDehydrated\n      ) {\n        queuedTarget.blockedOn =\n          3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        return;\n      }\n  }\n  queuedTarget.blockedOn = null;\n}\nfunction attemptReplayContinuousQueuedEvent(queuedEvent) {\n  if (null !== queuedEvent.blockedOn) return !1;\n  for (\n    var targetContainers = queuedEvent.targetContainers;\n    0 < targetContainers.length;\n\n  ) {\n    var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);\n    if (null === nextBlockedOn) {\n      nextBlockedOn = queuedEvent.nativeEvent;\n      var nativeEventClone = new nextBlockedOn.constructor(\n        nextBlockedOn.type,\n        nextBlockedOn\n      );\n      currentReplayingEvent = nativeEventClone;\n      nextBlockedOn.target.dispatchEvent(nativeEventClone);\n      currentReplayingEvent = null;\n    } else\n      return (\n        (targetContainers = getInstanceFromNode(nextBlockedOn)),\n        null !== targetContainers &&\n          attemptContinuousHydration(targetContainers),\n        (queuedEvent.blockedOn = nextBlockedOn),\n        !1\n      );\n    targetContainers.shift();\n  }\n  return !0;\n}\nfunction attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n  attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);\n}\nfunction replayUnblockedEvents() {\n  hasScheduledReplayAttempt = !1;\n  null !== queuedFocus &&\n    attemptReplayContinuousQueuedEvent(queuedFocus) &&\n    (queuedFocus = null);\n  null !== queuedDrag &&\n    attemptReplayContinuousQueuedEvent(queuedDrag) &&\n    (queuedDrag = null);\n  null !== queuedMouse &&\n    attemptReplayContinuousQueuedEvent(queuedMouse) &&\n    (queuedMouse = null);\n  queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n  queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n}\nfunction scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n  queuedEvent.blockedOn === unblocked &&\n    ((queuedEvent.blockedOn = null),\n    hasScheduledReplayAttempt ||\n      ((hasScheduledReplayAttempt = !0),\n      Scheduler.unstable_scheduleCallback(\n        Scheduler.unstable_NormalPriority,\n        replayUnblockedEvents\n      )));\n}\nvar lastScheduledReplayQueue = null;\nfunction scheduleReplayQueueIfNeeded(formReplayingQueue) {\n  lastScheduledReplayQueue !== formReplayingQueue &&\n    ((lastScheduledReplayQueue = formReplayingQueue),\n    Scheduler.unstable_scheduleCallback(\n      Scheduler.unstable_NormalPriority,\n      function () {\n        lastScheduledReplayQueue === formReplayingQueue &&\n          (lastScheduledReplayQueue = null);\n        for (var i = 0; i < formReplayingQueue.length; i += 3) {\n          var form = formReplayingQueue[i],\n            submitterOrAction = formReplayingQueue[i + 1],\n            formData = formReplayingQueue[i + 2];\n          if (\"function\" !== typeof submitterOrAction)\n            if (null === findInstanceBlockingTarget(submitterOrAction || form))\n              continue;\n            else break;\n          var formInst = getInstanceFromNode(form);\n          null !== formInst &&\n            (formReplayingQueue.splice(i, 3),\n            (i -= 3),\n            startHostTransition(\n              formInst,\n              {\n                pending: !0,\n                data: formData,\n                method: form.method,\n                action: submitterOrAction\n              },\n              submitterOrAction,\n              formData\n            ));\n        }\n      }\n    ));\n}\nfunction retryIfBlockedOn(unblocked) {\n  function unblock(queuedEvent) {\n    return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n  }\n  null !== queuedFocus && scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n  null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n  null !== queuedMouse && scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n  queuedPointers.forEach(unblock);\n  queuedPointerCaptures.forEach(unblock);\n  for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {\n    var queuedTarget = queuedExplicitHydrationTargets[i];\n    queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);\n  }\n  for (\n    ;\n    0 < queuedExplicitHydrationTargets.length &&\n    ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);\n\n  )\n    attemptExplicitHydrationTarget(i),\n      null === i.blockedOn && queuedExplicitHydrationTargets.shift();\n  i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;\n  if (null != i)\n    for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {\n      var form = i[queuedTarget],\n        submitterOrAction = i[queuedTarget + 1],\n        formProps = form[internalPropsKey] || null;\n      if (\"function\" === typeof submitterOrAction)\n        formProps || scheduleReplayQueueIfNeeded(i);\n      else if (formProps) {\n        var action = null;\n        if (submitterOrAction && submitterOrAction.hasAttribute(\"formAction\"))\n          if (\n            ((form = submitterOrAction),\n            (formProps = submitterOrAction[internalPropsKey] || null))\n          )\n            action = formProps.formAction;\n          else {\n            if (null !== findInstanceBlockingTarget(form)) continue;\n          }\n        else action = formProps.action;\n        \"function\" === typeof action\n          ? (i[queuedTarget + 1] = action)\n          : (i.splice(queuedTarget, 3), (queuedTarget -= 3));\n        scheduleReplayQueueIfNeeded(i);\n      }\n    }\n}\nfunction defaultOnDefaultTransitionIndicator() {\n  function handleNavigate(event) {\n    event.canIntercept &&\n      \"react-transition\" === event.info &&\n      event.intercept({\n        handler: function () {\n          return new Promise(function (resolve) {\n            return (pendingResolve = resolve);\n          });\n        },\n        focusReset: \"manual\",\n        scroll: \"manual\"\n      });\n  }\n  function handleNavigateComplete() {\n    null !== pendingResolve && (pendingResolve(), (pendingResolve = null));\n    isCancelled || setTimeout(startFakeNavigation, 20);\n  }\n  function startFakeNavigation() {\n    if (!isCancelled && !navigation.transition) {\n      var currentEntry = navigation.currentEntry;\n      currentEntry &&\n        null != currentEntry.url &&\n        navigation.navigate(currentEntry.url, {\n          state: currentEntry.getState(),\n          info: \"react-transition\",\n          history: \"replace\"\n        });\n    }\n  }\n  if (\"object\" === typeof navigation) {\n    var isCancelled = !1,\n      pendingResolve = null;\n    navigation.addEventListener(\"navigate\", handleNavigate);\n    navigation.addEventListener(\"navigatesuccess\", handleNavigateComplete);\n    navigation.addEventListener(\"navigateerror\", handleNavigateComplete);\n    setTimeout(startFakeNavigation, 100);\n    return function () {\n      isCancelled = !0;\n      navigation.removeEventListener(\"navigate\", handleNavigate);\n      navigation.removeEventListener(\"navigatesuccess\", handleNavigateComplete);\n      navigation.removeEventListener(\"navigateerror\", handleNavigateComplete);\n      null !== pendingResolve && (pendingResolve(), (pendingResolve = null));\n    };\n  }\n}\nfunction ReactDOMRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =\n  function (children) {\n    var root = this._internalRoot;\n    if (null === root) throw Error(formatProdErrorMessage(409));\n    var current = root.current,\n      lane = requestUpdateLane();\n    updateContainerImpl(current, lane, children, root, null, null);\n  };\nReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =\n  function () {\n    var root = this._internalRoot;\n    if (null !== root) {\n      this._internalRoot = null;\n      var container = root.containerInfo;\n      updateContainerImpl(root.current, 2, null, root, null, null);\n      flushSyncWork$1();\n      container[internalContainerInstanceKey] = null;\n    }\n  };\nfunction ReactDOMHydrationRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {\n  if (target) {\n    var updatePriority = resolveUpdatePriority();\n    target = { blockedOn: null, target: target, priority: updatePriority };\n    for (\n      var i = 0;\n      i < queuedExplicitHydrationTargets.length &&\n      0 !== updatePriority &&\n      updatePriority < queuedExplicitHydrationTargets[i].priority;\n      i++\n    );\n    queuedExplicitHydrationTargets.splice(i, 0, target);\n    0 === i && attemptExplicitHydrationTarget(target);\n  }\n};\nvar isomorphicReactPackageVersion$jscomp$inline_2043 = React.version;\nif (\n  \"19.3.1\" !==\n  isomorphicReactPackageVersion$jscomp$inline_2043\n)\n  throw Error(\n    formatProdErrorMessage(\n      527,\n      isomorphicReactPackageVersion$jscomp$inline_2043,\n      \"19.3.1\"\n    )\n  );\nReactDOMSharedInternals.findDOMNode = function (componentOrElement) {\n  var fiber = componentOrElement._reactInternals;\n  if (void 0 === fiber) {\n    if (\"function\" === typeof componentOrElement.render)\n      throw Error(formatProdErrorMessage(188));\n    componentOrElement = Object.keys(componentOrElement).join(\",\");\n    throw Error(formatProdErrorMessage(268, componentOrElement));\n  }\n  componentOrElement = findCurrentFiberUsingSlowPath(fiber);\n  componentOrElement =\n    null !== componentOrElement\n      ? findCurrentHostFiberImpl(componentOrElement)\n      : null;\n  componentOrElement =\n    null === componentOrElement ? null : componentOrElement.stateNode;\n  return componentOrElement;\n};\nvar internals$jscomp$inline_2586 = {\n  bundleType: 0,\n  version: \"19.3.1\",\n  rendererPackageName: \"react-dom\",\n  currentDispatcherRef: ReactSharedInternals,\n  reconcilerVersion: \"19.3.1\"\n};\nif (\"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {\n  var hook$jscomp$inline_2587 = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n  if (\n    !hook$jscomp$inline_2587.isDisabled &&\n    hook$jscomp$inline_2587.supportsFiber\n  )\n    try {\n      (rendererID = hook$jscomp$inline_2587.inject(\n        internals$jscomp$inline_2586\n      )),\n        (injectedHook = hook$jscomp$inline_2587);\n    } catch (err) {}\n}\nexports.createRoot = function (container, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError));\n  options = createFiberRoot(\n    container,\n    1,\n    !1,\n    null,\n    null,\n    isStrictMode,\n    identifierPrefix,\n    null,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    defaultOnDefaultTransitionIndicator\n  );\n  container[internalContainerInstanceKey] = options.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMRoot(options);\n};\nexports.hydrateRoot = function (container, initialChildren, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError,\n    formState = null;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError),\n    void 0 !== options.formState && (formState = options.formState));\n  initialChildren = createFiberRoot(\n    container,\n    1,\n    !0,\n    initialChildren,\n    null != options ? options : null,\n    isStrictMode,\n    identifierPrefix,\n    formState,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    defaultOnDefaultTransitionIndicator\n  );\n  initialChildren.context = getContextForSubtree(null);\n  options = initialChildren.current;\n  isStrictMode = requestUpdateLane();\n  isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode);\n  identifierPrefix = createUpdate(isStrictMode);\n  identifierPrefix.callback = null;\n  enqueueUpdate(options, identifierPrefix, isStrictMode);\n  options = isStrictMode;\n  initialChildren.current.lanes = options;\n  markRootUpdated$1(initialChildren, options);\n  ensureRootIsScheduled(initialChildren);\n  container[internalContainerInstanceKey] = initialChildren.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMHydrationRoot(initialChildren);\n};\nexports.version = \"19.3.1\";\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom-client.production.js');\n} else {\n  module.exports = require('./cjs/react-dom-client.development.js');\n}\n","/*!\n * Font Awesome Free 7.3.1 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2026 Fonticons, Inc.\n */\nfunction _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nfunction _arrayWithHoles(r) {\n  if (Array.isArray(r)) return r;\n}\nfunction _arrayWithoutHoles(r) {\n  if (Array.isArray(r)) return _arrayLikeToArray(r);\n}\nfunction _classCallCheck(a, n) {\n  if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nfunction _defineProperties(e, r) {\n  for (var t = 0; t < r.length; t++) {\n    var o = r[t];\n    o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o);\n  }\n}\nfunction _createClass(e, r, t) {\n  return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n    writable: !1\n  }), e;\n}\nfunction _createForOfIteratorHelper(r, e) {\n  var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (!t) {\n    if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) {\n      t && (r = t);\n      var n = 0,\n        F = function () {};\n      return {\n        s: F,\n        n: function () {\n          return n >= r.length ? {\n            done: !0\n          } : {\n            done: !1,\n            value: r[n++]\n          };\n        },\n        e: function (r) {\n          throw r;\n        },\n        f: F\n      };\n    }\n    throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n  var o,\n    a = !0,\n    u = !1;\n  return {\n    s: function () {\n      t = t.call(r);\n    },\n    n: function () {\n      var r = t.next();\n      return a = r.done, r;\n    },\n    e: function (r) {\n      u = !0, o = r;\n    },\n    f: function () {\n      try {\n        a || null == t.return || t.return();\n      } finally {\n        if (u) throw o;\n      }\n    }\n  };\n}\nfunction _defineProperty(e, r, t) {\n  return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: !0,\n    configurable: !0,\n    writable: !0\n  }) : e[r] = t, e;\n}\nfunction _inherits(t, e) {\n  if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n  t.prototype = Object.create(e && e.prototype, {\n    constructor: {\n      value: t,\n      writable: !0,\n      configurable: !0\n    }\n  }), Object.defineProperty(t, \"prototype\", {\n    writable: !1\n  }), e && _setPrototypeOf(t, e);\n}\nfunction _iterableToArray(r) {\n  if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nfunction _iterableToArrayLimit(r, l) {\n  var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (null != t) {\n    var e,\n      n,\n      i,\n      u,\n      a = [],\n      f = !0,\n      o = !1;\n    try {\n      if (i = (t = t.call(r)).next, 0 === l) {\n        if (Object(t) !== t) return;\n        f = !1;\n      } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n    } catch (r) {\n      o = !0, n = r;\n    } finally {\n      try {\n        if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n      } finally {\n        if (o) throw n;\n      }\n    }\n    return a;\n  }\n}\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction ownKeys(e, r) {\n  var t = Object.keys(e);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(e);\n    r && (o = o.filter(function (r) {\n      return Object.getOwnPropertyDescriptor(e, r).enumerable;\n    })), t.push.apply(t, o);\n  }\n  return t;\n}\nfunction _objectSpread2(e) {\n  for (var r = 1; r < arguments.length; r++) {\n    var t = null != arguments[r] ? arguments[r] : {};\n    r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n      _defineProperty(e, r, t[r]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n    });\n  }\n  return e;\n}\nfunction _setPrototypeOf(t, e) {\n  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, _setPrototypeOf(t, e);\n}\nfunction _slicedToArray(r, e) {\n  return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();\n}\nfunction _toConsumableArray(r) {\n  return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();\n}\nfunction _toPrimitive(t, r) {\n  if (\"object\" != typeof t || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != typeof i) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n  var i = _toPrimitive(t, \"string\");\n  return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n  }\n}\nfunction _wrapRegExp() {\n  _wrapRegExp = function (e, r) {\n    return new BabelRegExp(e, void 0, r);\n  };\n  var e = RegExp.prototype,\n    r = new WeakMap();\n  function BabelRegExp(e, t, p) {\n    var o = RegExp(e, t);\n    return r.set(o, p || r.get(e)), _setPrototypeOf(o, BabelRegExp.prototype);\n  }\n  function buildGroups(e, t) {\n    var p = r.get(t);\n    return Object.keys(p).reduce(function (r, t) {\n      var o = p[t];\n      if (\"number\" == typeof o) r[t] = e[o];else {\n        for (var i = 0; void 0 === e[o[i]] && i + 1 < o.length;) i++;\n        r[t] = e[o[i]];\n      }\n      return r;\n    }, Object.create(null));\n  }\n  return _inherits(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function (r) {\n    var t = e.exec.call(this, r);\n    if (t) {\n      t.groups = buildGroups(t, this);\n      var p = t.indices;\n      p && (p.groups = buildGroups(p, this));\n    }\n    return t;\n  }, BabelRegExp.prototype[Symbol.replace] = function (t, p) {\n    if (\"string\" == typeof p) {\n      var o = r.get(this);\n      return e[Symbol.replace].call(this, t, p.replace(/\\$<([^>]+)(>|$)/g, function (e, r, t) {\n        if (\"\" === t) return e;\n        var p = o[r];\n        return Array.isArray(p) ? \"$\" + p.join(\"$\") : \"number\" == typeof p ? \"$\" + p : \"\";\n      }));\n    }\n    if (\"function\" == typeof p) {\n      var i = this;\n      return e[Symbol.replace].call(this, t, function () {\n        var e = arguments;\n        return \"object\" != typeof e[e.length - 1] && (e = [].slice.call(e)).push(buildGroups(e, i)), p.apply(this, e);\n      });\n    }\n    return e[Symbol.replace].call(this, t, p);\n  }, _wrapRegExp.apply(this, arguments);\n}\n\nvar noop = function noop() {};\nvar _WINDOW = {};\nvar _DOCUMENT = {};\nvar _MUTATION_OBSERVER = null;\nvar _PERFORMANCE = {\n  mark: noop,\n  measure: noop\n};\ntry {\n  if (typeof window !== 'undefined') _WINDOW = window;\n  if (typeof document !== 'undefined') _DOCUMENT = document;\n  if (typeof MutationObserver !== 'undefined') _MUTATION_OBSERVER = MutationObserver;\n  if (typeof performance !== 'undefined') _PERFORMANCE = performance;\n} catch (e) {} // eslint-disable-line no-empty\n\nvar _ref = _WINDOW.navigator || {},\n  _ref$userAgent = _ref.userAgent,\n  userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;\nvar WINDOW = _WINDOW;\nvar DOCUMENT = _DOCUMENT;\nvar MUTATION_OBSERVER = _MUTATION_OBSERVER;\nvar PERFORMANCE = _PERFORMANCE;\nvar IS_BROWSER = !!WINDOW.document;\nvar IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\nvar IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\n\nvar _cl;\nvar Z = /fa(k|kd|s|r|l|t|d|dr|dl|dt|b|slr|slpr|wsb|tl|ns|nds|es|gt|jr|jfr|jdr|usb|ufsb|udsb|cr|ss|sr|sl|st|sds|sdr|sdl|sdt|sldr|slpdr|pr|ms|vs)?[\\-\\ ]/,\n  $ = /Font ?Awesome ?([567 ]*)(Solid|Regular|Light|Thin|Duotone|Brands|Free|Pro|Sharp Duotone|Sharp|Kit|Notdog Duo|Notdog|Chisel|Etch|Graphite|Thumbprint|Jelly Fill|Jelly Duo|Jelly|Utility|Utility Fill|Utility Duo|Slab Press|Slab|Slab Duo|Slab Press Duo|Pixel|Mosaic|Vellum|Whiteboard)?.*/i;\nvar rl = {\n    classic: {\n      fa: \"solid\",\n      fas: \"solid\",\n      \"fa-solid\": \"solid\",\n      far: \"regular\",\n      \"fa-regular\": \"regular\",\n      fal: \"light\",\n      \"fa-light\": \"light\",\n      fat: \"thin\",\n      \"fa-thin\": \"thin\",\n      fab: \"brands\",\n      \"fa-brands\": \"brands\"\n    },\n    duotone: {\n      fa: \"solid\",\n      fad: \"solid\",\n      \"fa-solid\": \"solid\",\n      \"fa-duotone\": \"solid\",\n      fadr: \"regular\",\n      \"fa-regular\": \"regular\",\n      fadl: \"light\",\n      \"fa-light\": \"light\",\n      fadt: \"thin\",\n      \"fa-thin\": \"thin\"\n    },\n    sharp: {\n      fa: \"solid\",\n      fass: \"solid\",\n      \"fa-solid\": \"solid\",\n      fasr: \"regular\",\n      \"fa-regular\": \"regular\",\n      fasl: \"light\",\n      \"fa-light\": \"light\",\n      fast: \"thin\",\n      \"fa-thin\": \"thin\"\n    },\n    \"sharp-duotone\": {\n      fa: \"solid\",\n      fasds: \"solid\",\n      \"fa-solid\": \"solid\",\n      fasdr: \"regular\",\n      \"fa-regular\": \"regular\",\n      fasdl: \"light\",\n      \"fa-light\": \"light\",\n      fasdt: \"thin\",\n      \"fa-thin\": \"thin\"\n    },\n    slab: {\n      \"fa-regular\": \"regular\",\n      faslr: \"regular\"\n    },\n    \"slab-press\": {\n      \"fa-regular\": \"regular\",\n      faslpr: \"regular\"\n    },\n    \"slab-duo\": {\n      \"fa-regular\": \"regular\",\n      fasldr: \"regular\"\n    },\n    \"slab-press-duo\": {\n      \"fa-regular\": \"regular\",\n      faslpdr: \"regular\"\n    },\n    thumbprint: {\n      \"fa-light\": \"light\",\n      fatl: \"light\"\n    },\n    vellum: {\n      \"fa-solid\": \"solid\",\n      favs: \"solid\"\n    },\n    pixel: {\n      \"fa-regular\": \"regular\",\n      fapr: \"regular\"\n    },\n    mosaic: {\n      \"fa-solid\": \"solid\",\n      fams: \"solid\"\n    },\n    whiteboard: {\n      \"fa-semibold\": \"semibold\",\n      fawsb: \"semibold\"\n    },\n    notdog: {\n      \"fa-solid\": \"solid\",\n      fans: \"solid\"\n    },\n    \"notdog-duo\": {\n      \"fa-solid\": \"solid\",\n      fands: \"solid\"\n    },\n    etch: {\n      \"fa-solid\": \"solid\",\n      faes: \"solid\"\n    },\n    graphite: {\n      \"fa-thin\": \"thin\",\n      fagt: \"thin\"\n    },\n    jelly: {\n      \"fa-regular\": \"regular\",\n      fajr: \"regular\"\n    },\n    \"jelly-fill\": {\n      \"fa-regular\": \"regular\",\n      fajfr: \"regular\"\n    },\n    \"jelly-duo\": {\n      \"fa-regular\": \"regular\",\n      fajdr: \"regular\"\n    },\n    chisel: {\n      \"fa-regular\": \"regular\",\n      facr: \"regular\"\n    },\n    utility: {\n      \"fa-semibold\": \"semibold\",\n      fausb: \"semibold\"\n    },\n    \"utility-duo\": {\n      \"fa-semibold\": \"semibold\",\n      faudsb: \"semibold\"\n    },\n    \"utility-fill\": {\n      \"fa-semibold\": \"semibold\",\n      faufsb: \"semibold\"\n    }\n  },\n  il = {\n    GROUP: \"duotone-group\",\n    SWAP_OPACITY: \"swap-opacity\",\n    PRIMARY: \"primary\",\n    SECONDARY: \"secondary\"\n  },\n  dl = [\"fa-classic\", \"fa-duotone\", \"fa-sharp\", \"fa-sharp-duotone\", \"fa-thumbprint\", \"fa-whiteboard\", \"fa-notdog\", \"fa-notdog-duo\", \"fa-chisel\", \"fa-etch\", \"fa-graphite\", \"fa-jelly\", \"fa-jelly-fill\", \"fa-jelly-duo\", \"fa-slab\", \"fa-slab-press\", \"fa-slab-press-duo\", \"fa-slab-duo\", \"fa-mosaic\", \"fa-pixel\", \"fa-vellum\", \"fa-utility\", \"fa-utility-duo\", \"fa-utility-fill\"];\nvar u = \"classic\",\n  l = \"duotone\",\n  h = \"sharp\",\n  t = \"sharp-duotone\",\n  g = \"chisel\",\n  n = \"etch\",\n  m = \"graphite\",\n  p = \"jelly\",\n  s = \"jelly-duo\",\n  y = \"jelly-fill\",\n  w = \"mosaic\",\n  x = \"notdog\",\n  e = \"notdog-duo\",\n  b = \"pixel\",\n  c = \"slab\",\n  o = \"slab-duo\",\n  I = \"slab-press\",\n  a = \"slab-press-duo\",\n  r = \"thumbprint\",\n  v = \"utility\",\n  i = \"utility-duo\",\n  F = \"utility-fill\",\n  d = \"vellum\",\n  S = \"whiteboard\",\n  A = \"Classic\",\n  P = \"Duotone\",\n  j = \"Sharp\",\n  B = \"Sharp Duotone\",\n  N = \"Chisel\",\n  D = \"Etch\",\n  k = \"Graphite\",\n  T = \"Jelly\",\n  C = \"Jelly Duo\",\n  W = \"Jelly Fill\",\n  R = \"Mosaic\",\n  K = \"Notdog\",\n  L = \"Notdog Duo\",\n  U = \"Pixel\",\n  J = \"Slab\",\n  _ = \"Slab Duo\",\n  M = \"Slab Press\",\n  E = \"Slab Press Duo\",\n  G = \"Thumbprint\",\n  V = \"Utility\",\n  z = \"Utility Duo\",\n  O = \"Utility Fill\",\n  Y = \"Vellum\",\n  q = \"Whiteboard\",\n  xl = [u, l, h, t, g, n, m, p, s, y, w, x, e, b, c, o, I, a, r, v, i, F, d, S],\n  cl = (_cl = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_cl, u, A), l, P), h, j), t, B), g, N), n, D), m, k), p, T), s, C), y, W), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_cl, w, R), x, K), e, L), b, U), c, J), o, _), I, M), a, E), r, G), v, V), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_cl, i, z), F, O), d, Y), S, q));\nvar Al = {\n    classic: {\n      900: \"fas\",\n      400: \"far\",\n      normal: \"far\",\n      300: \"fal\",\n      100: \"fat\"\n    },\n    duotone: {\n      900: \"fad\",\n      400: \"fadr\",\n      300: \"fadl\",\n      100: \"fadt\"\n    },\n    sharp: {\n      900: \"fass\",\n      400: \"fasr\",\n      300: \"fasl\",\n      100: \"fast\"\n    },\n    \"sharp-duotone\": {\n      900: \"fasds\",\n      400: \"fasdr\",\n      300: \"fasdl\",\n      100: \"fasdt\"\n    },\n    slab: {\n      400: \"faslr\"\n    },\n    \"slab-press\": {\n      400: \"faslpr\"\n    },\n    \"slab-duo\": {\n      400: \"fasldr\"\n    },\n    \"slab-press-duo\": {\n      400: \"faslpdr\"\n    },\n    vellum: {\n      900: \"favs\"\n    },\n    mosaic: {\n      900: \"fams\"\n    },\n    pixel: {\n      400: \"fapr\"\n    },\n    whiteboard: {\n      600: \"fawsb\"\n    },\n    thumbprint: {\n      300: \"fatl\"\n    },\n    notdog: {\n      900: \"fans\"\n    },\n    \"notdog-duo\": {\n      900: \"fands\"\n    },\n    etch: {\n      900: \"faes\"\n    },\n    graphite: {\n      100: \"fagt\"\n    },\n    chisel: {\n      400: \"facr\"\n    },\n    jelly: {\n      400: \"fajr\"\n    },\n    \"jelly-fill\": {\n      400: \"fajfr\"\n    },\n    \"jelly-duo\": {\n      400: \"fajdr\"\n    },\n    utility: {\n      600: \"fausb\"\n    },\n    \"utility-duo\": {\n      600: \"faudsb\"\n    },\n    \"utility-fill\": {\n      600: \"faufsb\"\n    }\n  };\nvar zl = {\n    \"Font Awesome 7 Free\": {\n      900: \"fas\",\n      400: \"far\"\n    },\n    \"Font Awesome 7 Pro\": {\n      900: \"fas\",\n      400: \"far\",\n      normal: \"far\",\n      300: \"fal\",\n      100: \"fat\"\n    },\n    \"Font Awesome 7 Brands\": {\n      400: \"fab\",\n      normal: \"fab\"\n    },\n    \"Font Awesome 7 Duotone\": {\n      900: \"fad\",\n      400: \"fadr\",\n      normal: \"fadr\",\n      300: \"fadl\",\n      100: \"fadt\"\n    },\n    \"Font Awesome 7 Sharp\": {\n      900: \"fass\",\n      400: \"fasr\",\n      normal: \"fasr\",\n      300: \"fasl\",\n      100: \"fast\"\n    },\n    \"Font Awesome 7 Sharp Duotone\": {\n      900: \"fasds\",\n      400: \"fasdr\",\n      normal: \"fasdr\",\n      300: \"fasdl\",\n      100: \"fasdt\"\n    },\n    \"Font Awesome 7 Jelly\": {\n      400: \"fajr\",\n      normal: \"fajr\"\n    },\n    \"Font Awesome 7 Jelly Fill\": {\n      400: \"fajfr\",\n      normal: \"fajfr\"\n    },\n    \"Font Awesome 7 Jelly Duo\": {\n      400: \"fajdr\",\n      normal: \"fajdr\"\n    },\n    \"Font Awesome 7 Slab\": {\n      400: \"faslr\",\n      normal: \"faslr\"\n    },\n    \"Font Awesome 7 Slab Press\": {\n      400: \"faslpr\",\n      normal: \"faslpr\"\n    },\n    \"Font Awesome 7 Slab Duo\": {\n      400: \"fasldr\",\n      normal: \"fasldr\"\n    },\n    \"Font Awesome 7 Slab Press Duo\": {\n      400: \"faslpdr\",\n      normal: \"faslpdr\"\n    },\n    \"Font Awesome 7 Pixel\": {\n      400: \"fapr\",\n      normal: \"fapr\"\n    },\n    \"Font Awesome 7 Mosaic\": {\n      900: \"fams\",\n      normal: \"fams\"\n    },\n    \"Font Awesome 7 Vellum\": {\n      900: \"favs\",\n      normal: \"favs\"\n    },\n    \"Font Awesome 7 Thumbprint\": {\n      300: \"fatl\",\n      normal: \"fatl\"\n    },\n    \"Font Awesome 7 Notdog\": {\n      900: \"fans\",\n      normal: \"fans\"\n    },\n    \"Font Awesome 7 Notdog Duo\": {\n      900: \"fands\",\n      normal: \"fands\"\n    },\n    \"Font Awesome 7 Etch\": {\n      900: \"faes\",\n      normal: \"faes\"\n    },\n    \"Font Awesome 7 Graphite\": {\n      100: \"fagt\",\n      normal: \"fagt\"\n    },\n    \"Font Awesome 7 Chisel\": {\n      400: \"facr\",\n      normal: \"facr\"\n    },\n    \"Font Awesome 7 Whiteboard\": {\n      600: \"fawsb\",\n      normal: \"fawsb\"\n    },\n    \"Font Awesome 7 Utility\": {\n      600: \"fausb\",\n      normal: \"fausb\"\n    },\n    \"Font Awesome 7 Utility Duo\": {\n      600: \"faudsb\",\n      normal: \"faudsb\"\n    },\n    \"Font Awesome 7 Utility Fill\": {\n      600: \"faufsb\",\n      normal: \"faufsb\"\n    }\n  };\nvar Ql = new Map([[\"classic\", {\n    defaultShortPrefixId: \"fas\",\n    defaultStyleId: \"solid\",\n    styleIds: [\"solid\", \"regular\", \"light\", \"thin\", \"brands\"],\n    futureStyleIds: [],\n    defaultFontWeight: 900\n  }], [\"duotone\", {\n    defaultShortPrefixId: \"fad\",\n    defaultStyleId: \"solid\",\n    styleIds: [\"solid\", \"regular\", \"light\", \"thin\"],\n    futureStyleIds: [],\n    defaultFontWeight: 900\n  }], [\"sharp\", {\n    defaultShortPrefixId: \"fass\",\n    defaultStyleId: \"solid\",\n    styleIds: [\"solid\", \"regular\", \"light\", \"thin\"],\n    futureStyleIds: [],\n    defaultFontWeight: 900\n  }], [\"sharp-duotone\", {\n    defaultShortPrefixId: \"fasds\",\n    defaultStyleId: \"solid\",\n    styleIds: [\"solid\", \"regular\", \"light\", \"thin\"],\n    futureStyleIds: [],\n    defaultFontWeight: 900\n  }], [\"chisel\", {\n    defaultShortPrefixId: \"facr\",\n    defaultStyleId: \"regular\",\n    styleIds: [\"regular\"],\n    futureStyleIds: [],\n    defaultFontWeight: 400\n  }], [\"etch\", {\n    defaultShortPrefixId: \"faes\",\n    defaultStyleId: \"solid\",\n    styleIds: [\"solid\"],\n    futureStyleIds: [],\n    defaultFontWeight: 900\n  }], [\"graphite\", {\n    defaultShortPrefixId: \"fagt\",\n    defaultStyleId: \"thin\",\n    styleIds: [\"thin\"],\n    futureStyleIds: [],\n    defaultFontWeight: 100\n  }], [\"jelly\", {\n    defaultShortPrefixId: \"fajr\",\n    defaultStyleId: \"regular\",\n    styleIds: [\"regular\"],\n    futureStyleIds: [],\n    defaultFontWeight: 400\n  }], [\"jelly-duo\", {\n    defaultShortPrefixId: \"fajdr\",\n    defaultStyleId: \"regular\",\n    styleIds: [\"regular\"],\n    futureStyleIds: [],\n    defaultFontWeight: 400\n  }], [\"jelly-fill\", {\n    defaultShortPrefixId: \"fajfr\",\n    defaultStyleId: \"regular\",\n    styleIds: [\"regular\"],\n    futureStyleIds: [],\n    defaultFontWeight: 400\n  }], [\"mosaic\", {\n    defaultShortPrefixId: \"fams\",\n    defaultStyleId: \"solid\",\n    styleIds: [\"solid\"],\n    futureStyleIds: [],\n    defaultFontWeight: 900\n  }], [\"notdog\", {\n    defaultShortPrefixId: \"fans\",\n    defaultStyleId: \"solid\",\n    styleIds: [\"solid\"],\n    futureStyleIds: [],\n    defaultFontWeight: 900\n  }], [\"notdog-duo\", {\n    defaultShortPrefixId: \"fands\",\n    defaultStyleId: \"solid\",\n    styleIds: [\"solid\"],\n    futureStyleIds: [],\n    defaultFontWeight: 900\n  }], [\"pixel\", {\n    defaultShortPrefixId: \"fapr\",\n    defaultStyleId: \"regular\",\n    styleIds: [\"regular\"],\n    futureStyleIds: [],\n    defaultFontWeight: 400\n  }], [\"slab\", {\n    defaultShortPrefixId: \"faslr\",\n    defaultStyleId: \"regular\",\n    styleIds: [\"regular\"],\n    futureStyleIds: [],\n    defaultFontWeight: 400\n  }], [\"slab-duo\", {\n    defaultShortPrefixId: \"fasldr\",\n    defaultStyleId: \"regular\",\n    styleIds: [\"regular\"],\n    futureStyleIds: [],\n    defaultFontWeight: 400\n  }], [\"slab-press\", {\n    defaultShortPrefixId: \"faslpr\",\n    defaultStyleId: \"regular\",\n    styleIds: [\"regular\"],\n    futureStyleIds: [],\n    defaultFontWeight: 400\n  }], [\"slab-press-duo\", {\n    defaultShortPrefixId: \"faslpdr\",\n    defaultStyleId: \"regular\",\n    styleIds: [\"regular\"],\n    futureStyleIds: [],\n    defaultFontWeight: 400\n  }], [\"thumbprint\", {\n    defaultShortPrefixId: \"fatl\",\n    defaultStyleId: \"light\",\n    styleIds: [\"light\"],\n    futureStyleIds: [],\n    defaultFontWeight: 300\n  }], [\"utility\", {\n    defaultShortPrefixId: \"fausb\",\n    defaultStyleId: \"semibold\",\n    styleIds: [\"semibold\"],\n    futureStyleIds: [],\n    defaultFontWeight: 600\n  }], [\"utility-duo\", {\n    defaultShortPrefixId: \"faudsb\",\n    defaultStyleId: \"semibold\",\n    styleIds: [\"semibold\"],\n    futureStyleIds: [],\n    defaultFontWeight: 600\n  }], [\"utility-fill\", {\n    defaultShortPrefixId: \"faufsb\",\n    defaultStyleId: \"semibold\",\n    styleIds: [\"semibold\"],\n    futureStyleIds: [],\n    defaultFontWeight: 600\n  }], [\"vellum\", {\n    defaultShortPrefixId: \"favs\",\n    defaultStyleId: \"solid\",\n    styleIds: [\"solid\"],\n    futureStyleIds: [],\n    defaultFontWeight: 900\n  }], [\"whiteboard\", {\n    defaultShortPrefixId: \"fawsb\",\n    defaultStyleId: \"semibold\",\n    styleIds: [\"semibold\"],\n    futureStyleIds: [],\n    defaultFontWeight: 600\n  }]]),\n  $l = {\n    chisel: {\n      regular: \"facr\"\n    },\n    classic: {\n      brands: \"fab\",\n      light: \"fal\",\n      regular: \"far\",\n      solid: \"fas\",\n      thin: \"fat\"\n    },\n    duotone: {\n      light: \"fadl\",\n      regular: \"fadr\",\n      solid: \"fad\",\n      thin: \"fadt\"\n    },\n    etch: {\n      solid: \"faes\"\n    },\n    graphite: {\n      thin: \"fagt\"\n    },\n    jelly: {\n      regular: \"fajr\"\n    },\n    \"jelly-duo\": {\n      regular: \"fajdr\"\n    },\n    \"jelly-fill\": {\n      regular: \"fajfr\"\n    },\n    mosaic: {\n      solid: \"fams\"\n    },\n    notdog: {\n      solid: \"fans\"\n    },\n    \"notdog-duo\": {\n      solid: \"fands\"\n    },\n    pixel: {\n      regular: \"fapr\"\n    },\n    sharp: {\n      light: \"fasl\",\n      regular: \"fasr\",\n      solid: \"fass\",\n      thin: \"fast\"\n    },\n    \"sharp-duotone\": {\n      light: \"fasdl\",\n      regular: \"fasdr\",\n      solid: \"fasds\",\n      thin: \"fasdt\"\n    },\n    slab: {\n      regular: \"faslr\"\n    },\n    \"slab-duo\": {\n      regular: \"fasldr\"\n    },\n    \"slab-press\": {\n      regular: \"faslpr\"\n    },\n    \"slab-press-duo\": {\n      regular: \"faslpdr\"\n    },\n    thumbprint: {\n      light: \"fatl\"\n    },\n    utility: {\n      semibold: \"fausb\"\n    },\n    \"utility-duo\": {\n      semibold: \"faudsb\"\n    },\n    \"utility-fill\": {\n      semibold: \"faufsb\"\n    },\n    vellum: {\n      solid: \"favs\"\n    },\n    whiteboard: {\n      semibold: \"fawsb\"\n    }\n  };\nvar at = [\"fak\", \"fa-kit\", \"fakd\", \"fa-kit-duotone\"],\n  rt = {\n    kit: {\n      fak: \"kit\",\n      \"fa-kit\": \"kit\"\n    },\n    \"kit-duotone\": {\n      fakd: \"kit-duotone\",\n      \"fa-kit-duotone\": \"kit-duotone\"\n    }\n  },\n  it = [\"kit\"];\nvar H = \"kit\",\n  f = \"kit-duotone\",\n  Q = \"Kit\",\n  X = \"Kit Duotone\",\n  ht = _defineProperty(_defineProperty({}, H, Q), f, X);\nvar mt = {\n  kit: {\n    \"fa-kit\": \"fak\"\n  },\n  \"kit-duotone\": {\n    \"fa-kit-duotone\": \"fakd\"\n  }\n};\nvar ct = {\n    \"Font Awesome Kit\": {\n      400: \"fak\",\n      normal: \"fak\"\n    },\n    \"Font Awesome Kit Duotone\": {\n      400: \"fakd\",\n      normal: \"fakd\"\n    }\n  },\n  It = {\n    kit: {\n      fak: \"fa-kit\"\n    },\n    \"kit-duotone\": {\n      fakd: \"fa-kit-duotone\"\n    }\n  };\nvar St = {\n    kit: {\n      kit: \"fak\"\n    },\n    \"kit-duotone\": {\n      \"kit-duotone\": \"fakd\"\n    }\n  };\n\nvar _jl;\nvar l$1 = {\n    GROUP: \"duotone-group\",\n    SWAP_OPACITY: \"swap-opacity\",\n    PRIMARY: \"primary\",\n    SECONDARY: \"secondary\"\n  },\n  n$1 = [\"fa-classic\", \"fa-duotone\", \"fa-sharp\", \"fa-sharp-duotone\", \"fa-thumbprint\", \"fa-whiteboard\", \"fa-notdog\", \"fa-notdog-duo\", \"fa-chisel\", \"fa-etch\", \"fa-graphite\", \"fa-jelly\", \"fa-jelly-fill\", \"fa-jelly-duo\", \"fa-slab\", \"fa-slab-press\", \"fa-slab-press-duo\", \"fa-slab-duo\", \"fa-mosaic\", \"fa-pixel\", \"fa-vellum\", \"fa-utility\", \"fa-utility-duo\", \"fa-utility-fill\"];\nvar g$1 = \"classic\",\n  a$1 = \"duotone\",\n  m$1 = \"sharp\",\n  t$1 = \"sharp-duotone\",\n  p$1 = \"chisel\",\n  y$1 = \"etch\",\n  b$1 = \"graphite\",\n  w$1 = \"jelly\",\n  e$1 = \"jelly-duo\",\n  x$1 = \"jelly-fill\",\n  c$1 = \"mosaic\",\n  I$1 = \"notdog\",\n  o$1 = \"notdog-duo\",\n  v$1 = \"pixel\",\n  F$1 = \"slab\",\n  r$1 = \"slab-duo\",\n  S$1 = \"slab-press\",\n  i$1 = \"slab-press-duo\",\n  d$1 = \"thumbprint\",\n  A$1 = \"utility\",\n  f$1 = \"utility-duo\",\n  P$1 = \"utility-fill\",\n  u$1 = \"vellum\",\n  j$1 = \"whiteboard\",\n  B$1 = \"Classic\",\n  N$1 = \"Duotone\",\n  D$1 = \"Sharp\",\n  k$1 = \"Sharp Duotone\",\n  C$1 = \"Chisel\",\n  T$1 = \"Etch\",\n  L$1 = \"Graphite\",\n  W$1 = \"Jelly\",\n  R$1 = \"Jelly Duo\",\n  K$1 = \"Jelly Fill\",\n  U$1 = \"Mosaic\",\n  J$1 = \"Notdog\",\n  _$1 = \"Notdog Duo\",\n  M$1 = \"Pixel\",\n  E$1 = \"Slab\",\n  G$1 = \"Slab Duo\",\n  O$1 = \"Slab Press\",\n  V$1 = \"Slab Press Duo\",\n  z$1 = \"Thumbprint\",\n  Y$1 = \"Utility\",\n  $$1 = \"Utility Duo\",\n  q$1 = \"Utility Fill\",\n  H$1 = \"Vellum\",\n  Q$1 = \"Whiteboard\",\n  jl$1 = (_jl = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_jl, g$1, B$1), a$1, N$1), m$1, D$1), t$1, k$1), p$1, C$1), y$1, T$1), b$1, L$1), w$1, W$1), e$1, R$1), x$1, K$1), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_jl, c$1, U$1), I$1, J$1), o$1, _$1), v$1, M$1), F$1, E$1), r$1, G$1), S$1, O$1), i$1, V$1), d$1, z$1), A$1, Y$1), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_jl, f$1, $$1), P$1, q$1), u$1, H$1), j$1, Q$1));\nvar X$1 = \"kit\",\n  h$1 = \"kit-duotone\",\n  Z$1 = \"Kit\",\n  ll$1 = \"Kit Duotone\",\n  ws = _defineProperty(_defineProperty({}, X$1, Z$1), h$1, ll$1);\nvar ra = {\n    classic: {\n      \"fa-brands\": \"fab\",\n      \"fa-duotone\": \"fad\",\n      \"fa-light\": \"fal\",\n      \"fa-regular\": \"far\",\n      \"fa-solid\": \"fas\",\n      \"fa-thin\": \"fat\"\n    },\n    duotone: {\n      \"fa-regular\": \"fadr\",\n      \"fa-light\": \"fadl\",\n      \"fa-thin\": \"fadt\"\n    },\n    sharp: {\n      \"fa-solid\": \"fass\",\n      \"fa-regular\": \"fasr\",\n      \"fa-light\": \"fasl\",\n      \"fa-thin\": \"fast\"\n    },\n    \"sharp-duotone\": {\n      \"fa-solid\": \"fasds\",\n      \"fa-regular\": \"fasdr\",\n      \"fa-light\": \"fasdl\",\n      \"fa-thin\": \"fasdt\"\n    },\n    slab: {\n      \"fa-regular\": \"faslr\"\n    },\n    \"slab-press\": {\n      \"fa-regular\": \"faslpr\"\n    },\n    \"slab-duo\": {\n      \"fa-regular\": \"fasldr\"\n    },\n    \"slab-press-duo\": {\n      \"fa-regular\": \"faslpdr\"\n    },\n    pixel: {\n      \"fa-regular\": \"fapr\"\n    },\n    mosaic: {\n      \"fa-solid\": \"fams\"\n    },\n    vellum: {\n      \"fa-solid\": \"favs\"\n    },\n    whiteboard: {\n      \"fa-semibold\": \"fawsb\"\n    },\n    thumbprint: {\n      \"fa-light\": \"fatl\"\n    },\n    notdog: {\n      \"fa-solid\": \"fans\"\n    },\n    \"notdog-duo\": {\n      \"fa-solid\": \"fands\"\n    },\n    etch: {\n      \"fa-solid\": \"faes\"\n    },\n    graphite: {\n      \"fa-thin\": \"fagt\"\n    },\n    jelly: {\n      \"fa-regular\": \"fajr\"\n    },\n    \"jelly-fill\": {\n      \"fa-regular\": \"fajfr\"\n    },\n    \"jelly-duo\": {\n      \"fa-regular\": \"fajdr\"\n    },\n    chisel: {\n      \"fa-regular\": \"facr\"\n    },\n    utility: {\n      \"fa-semibold\": \"fausb\"\n    },\n    \"utility-duo\": {\n      \"fa-semibold\": \"faudsb\"\n    },\n    \"utility-fill\": {\n      \"fa-semibold\": \"faufsb\"\n    }\n  },\n  al$1 = {\n    classic: [\"fas\", \"far\", \"fal\", \"fat\", \"fad\"],\n    duotone: [\"fadr\", \"fadl\", \"fadt\"],\n    sharp: [\"fass\", \"fasr\", \"fasl\", \"fast\"],\n    \"sharp-duotone\": [\"fasds\", \"fasdr\", \"fasdl\", \"fasdt\"],\n    slab: [\"faslr\"],\n    \"slab-press\": [\"faslpr\"],\n    \"slab-duo\": [\"fasldr\"],\n    \"slab-press-duo\": [\"faslpdr\"],\n    pixel: [\"fapr\"],\n    mosaic: [\"fams\"],\n    vellum: [\"favs\"],\n    whiteboard: [\"fawsb\"],\n    thumbprint: [\"fatl\"],\n    notdog: [\"fans\"],\n    \"notdog-duo\": [\"fands\"],\n    etch: [\"faes\"],\n    graphite: [\"fagt\"],\n    jelly: [\"fajr\"],\n    \"jelly-fill\": [\"fajfr\"],\n    \"jelly-duo\": [\"fajdr\"],\n    chisel: [\"facr\"],\n    utility: [\"fausb\"],\n    \"utility-duo\": [\"faudsb\"],\n    \"utility-fill\": [\"faufsb\"]\n  },\n  da = {\n    classic: {\n      fab: \"fa-brands\",\n      fad: \"fa-duotone\",\n      fal: \"fa-light\",\n      far: \"fa-regular\",\n      fas: \"fa-solid\",\n      fat: \"fa-thin\"\n    },\n    duotone: {\n      fadr: \"fa-regular\",\n      fadl: \"fa-light\",\n      fadt: \"fa-thin\"\n    },\n    sharp: {\n      fass: \"fa-solid\",\n      fasr: \"fa-regular\",\n      fasl: \"fa-light\",\n      fast: \"fa-thin\"\n    },\n    \"sharp-duotone\": {\n      fasds: \"fa-solid\",\n      fasdr: \"fa-regular\",\n      fasdl: \"fa-light\",\n      fasdt: \"fa-thin\"\n    },\n    slab: {\n      faslr: \"fa-regular\"\n    },\n    \"slab-press\": {\n      faslpr: \"fa-regular\"\n    },\n    \"slab-duo\": {\n      fasldr: \"fa-regular\"\n    },\n    \"slab-press-duo\": {\n      faslpdr: \"fa-regular\"\n    },\n    pixel: {\n      fapr: \"fa-regular\"\n    },\n    mosaic: {\n      fams: \"fa-solid\"\n    },\n    vellum: {\n      favs: \"fa-solid\"\n    },\n    whiteboard: {\n      fawsb: \"fa-semibold\"\n    },\n    thumbprint: {\n      fatl: \"fa-light\"\n    },\n    notdog: {\n      fans: \"fa-solid\"\n    },\n    \"notdog-duo\": {\n      fands: \"fa-solid\"\n    },\n    etch: {\n      faes: \"fa-solid\"\n    },\n    graphite: {\n      fagt: \"fa-thin\"\n    },\n    jelly: {\n      fajr: \"fa-regular\"\n    },\n    \"jelly-fill\": {\n      fajfr: \"fa-regular\"\n    },\n    \"jelly-duo\": {\n      fajdr: \"fa-regular\"\n    },\n    chisel: {\n      facr: \"fa-regular\"\n    },\n    utility: {\n      fausb: \"fa-semibold\"\n    },\n    \"utility-duo\": {\n      faudsb: \"fa-semibold\"\n    },\n    \"utility-fill\": {\n      faufsb: \"fa-semibold\"\n    }\n  },\n  tl = [\"fa-solid\", \"fa-regular\", \"fa-light\", \"fa-thin\", \"fa-duotone\", \"fa-brands\", \"fa-semibold\"],\n  ha = [\"fa\", \"fas\", \"far\", \"fal\", \"fat\", \"fad\", \"fadr\", \"fadl\", \"fadt\", \"fab\", \"fass\", \"fasr\", \"fasl\", \"fast\", \"fasds\", \"fasdr\", \"fasdl\", \"fasdt\", \"faslr\", \"faslpr\", \"fasldr\", \"faslpdr\", \"fapr\", \"fams\", \"favs\", \"fawsb\", \"fatl\", \"fans\", \"fands\", \"faes\", \"fagt\", \"fajr\", \"fajfr\", \"fajdr\", \"facr\", \"fausb\", \"faudsb\", \"faufsb\"].concat(n$1, tl),\n  el$1 = [\"solid\", \"regular\", \"light\", \"thin\", \"duotone\", \"brands\", \"semibold\"],\n  sl$1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],\n  ol$1 = sl$1.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]),\n  rl$1 = [\"aw\", \"fw\", \"pull-left\", \"pull-right\"],\n  ga = [].concat(_toConsumableArray(Object.keys(al$1)), el$1, rl$1, [\"2xs\", \"xs\", \"sm\", \"lg\", \"xl\", \"2xl\", \"beat\", \"beat-fade\", \"border\", \"bounce\", \"buzz\", \"canvas-square\", \"canvas-roomy\", \"fade\", \"flip-360\", \"flip-both\", \"flip-horizontal\", \"flip-vertical\", \"flip\", \"float\", \"inverse\", \"jello\", \"layers\", \"layers-bottom-left\", \"layers-bottom-right\", \"layers-counter\", \"layers-text\", \"layers-top-left\", \"layers-top-right\", \"li\", \"pull-end\", \"pull-start\", \"pulse\", \"rotate-180\", \"rotate-270\", \"rotate-90\", \"rotate-by\", \"shake\", \"spin-pulse\", \"spin-reverse\", \"spin\", \"spin-snap\", \"spin-snap-4\", \"spin-snap-8\", \"stack-1x\", \"stack-2x\", \"stack\", \"swing\", \"ul\", \"wag\", \"width-auto\", \"width-fixed\", l$1.GROUP, l$1.SWAP_OPACITY, l$1.PRIMARY, l$1.SECONDARY]).concat(sl$1.map(function (s) {\n    return \"\".concat(s, \"x\");\n  })).concat(ol$1.map(function (s) {\n    return \"w-\".concat(s);\n  }));\nvar wa = {\n    \"Font Awesome 5 Free\": {\n      900: \"fas\",\n      400: \"far\"\n    },\n    \"Font Awesome 5 Pro\": {\n      900: \"fas\",\n      400: \"far\",\n      normal: \"far\",\n      300: \"fal\"\n    },\n    \"Font Awesome 5 Brands\": {\n      400: \"fab\",\n      normal: \"fab\"\n    },\n    \"Font Awesome 5 Duotone\": {\n      900: \"fad\"\n    }\n  };\n\nvar NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\nvar UNITS_IN_GRID = 16;\nvar DEFAULT_CSS_PREFIX = 'fa';\nvar DEFAULT_REPLACEMENT_CLASS = 'svg-inline--fa';\nvar DATA_FA_I2SVG = 'data-fa-i2svg';\nvar DATA_FA_PSEUDO_ELEMENT = 'data-fa-pseudo-element';\nvar DATA_FA_PSEUDO_ELEMENT_PENDING = 'data-fa-pseudo-element-pending';\nvar DATA_PREFIX = 'data-prefix';\nvar DATA_ICON = 'data-icon';\nvar HTML_CLASS_I2SVG_BASE_CLASS = 'fontawesome-i2svg';\nvar MUTATION_APPROACH_ASYNC = 'async';\nvar TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS = ['HTML', 'HEAD', 'STYLE', 'SCRIPT'];\nvar PSEUDO_ELEMENTS = ['::before', '::after', ':before', ':after'];\nvar PRODUCTION = function () {\n  try {\n    return process.env.NODE_ENV === 'production';\n  } catch (e$$1) {\n    return false;\n  }\n}();\nfunction familyProxy(obj) {\n  // Defaults to the classic family if family is not available\n  return new Proxy(obj, {\n    get: function get(target, prop) {\n      return prop in target ? target[prop] : target[u];\n    }\n  });\n}\nvar _PREFIX_TO_STYLE = _objectSpread2({}, rl);\n\n// We changed FACSSClassesToStyleId in the icons repo to be canonical and as such, \"classic\" family does not have any\n// duotone styles.  But we do still need duotone in _PREFIX_TO_STYLE below, so we are manually adding\n// {'fa-duotone': 'duotone'}\n_PREFIX_TO_STYLE[u] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {\n  'fa-duotone': 'duotone'\n}), rl[u]), rt['kit']), rt['kit-duotone']);\nvar PREFIX_TO_STYLE = familyProxy(_PREFIX_TO_STYLE);\nvar _STYLE_TO_PREFIX = _objectSpread2({}, $l);\n\n// We changed FAStyleIdToShortPrefixId in the icons repo to be canonical and as such, \"classic\" family does not have any\n// duotone styles.  But we do still need duotone in _STYLE_TO_PREFIX below, so we are manually adding {duotone: 'fad'}\n_STYLE_TO_PREFIX[u] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {\n  duotone: 'fad'\n}), _STYLE_TO_PREFIX[u]), St['kit']), St['kit-duotone']);\nvar STYLE_TO_PREFIX = familyProxy(_STYLE_TO_PREFIX);\nvar _PREFIX_TO_LONG_STYLE = _objectSpread2({}, da);\n_PREFIX_TO_LONG_STYLE[u] = _objectSpread2(_objectSpread2({}, _PREFIX_TO_LONG_STYLE[u]), It['kit']);\nvar PREFIX_TO_LONG_STYLE = familyProxy(_PREFIX_TO_LONG_STYLE);\nvar _LONG_STYLE_TO_PREFIX = _objectSpread2({}, ra);\n_LONG_STYLE_TO_PREFIX[u] = _objectSpread2(_objectSpread2({}, _LONG_STYLE_TO_PREFIX[u]), mt['kit']);\nvar LONG_STYLE_TO_PREFIX = familyProxy(_LONG_STYLE_TO_PREFIX);\nvar ICON_SELECTION_SYNTAX_PATTERN = Z;\nvar LAYERS_TEXT_CLASSNAME = 'fa-layers-text';\nvar FONT_FAMILY_PATTERN = $;\nvar _FONT_WEIGHT_TO_PREFIX = _objectSpread2({}, Al);\nvar FONT_WEIGHT_TO_PREFIX = familyProxy(_FONT_WEIGHT_TO_PREFIX);\nvar ATTRIBUTES_WATCHED_FOR_MUTATION = ['class', 'data-prefix', 'data-icon', 'data-fa-transform', 'data-fa-mask'];\nvar DUOTONE_CLASSES = il;\nvar RESERVED_CLASSES = [].concat(_toConsumableArray(it), _toConsumableArray(ga));\n\nvar initial = WINDOW.FontAwesomeConfig || {};\nfunction getAttrConfig(attr) {\n  var element = DOCUMENT.querySelector('script[' + attr + ']');\n  if (element) {\n    return element.getAttribute(attr);\n  }\n}\nfunction coerce(val) {\n  // Getting an empty string will occur if the attribute is set on the HTML tag but without a value\n  // We'll assume that this is an indication that it should be toggled to true\n  if (val === '') return true;\n  if (val === 'false') return false;\n  if (val === 'true') return true;\n  return val;\n}\nif (DOCUMENT && typeof DOCUMENT.querySelector === 'function') {\n  var attrs = [['data-family-prefix', 'familyPrefix'], ['data-css-prefix', 'cssPrefix'], ['data-family-default', 'familyDefault'], ['data-style-default', 'styleDefault'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-search-pseudo-elements-warnings', 'searchPseudoElementsWarnings'], ['data-search-pseudo-elements-full-scan', 'searchPseudoElementsFullScan'], ['data-observe-mutations', 'observeMutations'], ['data-mutate-approach', 'mutateApproach'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']];\n  attrs.forEach(function (_ref) {\n    var _ref2 = _slicedToArray(_ref, 2),\n      attr = _ref2[0],\n      key = _ref2[1];\n    var val = coerce(getAttrConfig(attr));\n    if (val !== undefined && val !== null) {\n      initial[key] = val;\n    }\n  });\n}\nvar _default = {\n  styleDefault: 'solid',\n  familyDefault: u,\n  cssPrefix: DEFAULT_CSS_PREFIX,\n  replacementClass: DEFAULT_REPLACEMENT_CLASS,\n  autoReplaceSvg: true,\n  autoAddCss: true,\n  searchPseudoElements: false,\n  searchPseudoElementsWarnings: true,\n  searchPseudoElementsFullScan: false,\n  observeMutations: true,\n  mutateApproach: 'async',\n  keepOriginalSource: true,\n  measurePerformance: false,\n  showMissingIcons: true\n};\n\n// familyPrefix is deprecated but we must still support it if present\nif (initial.familyPrefix) {\n  initial.cssPrefix = initial.familyPrefix;\n}\nvar _config = _objectSpread2(_objectSpread2({}, _default), initial);\nif (!_config.autoReplaceSvg) _config.observeMutations = false;\nvar config = {};\nObject.keys(_default).forEach(function (key) {\n  Object.defineProperty(config, key, {\n    enumerable: true,\n    set: function set(val) {\n      _config[key] = val;\n      _onChangeCb.forEach(function (cb) {\n        return cb(config);\n      });\n    },\n    get: function get() {\n      return _config[key];\n    }\n  });\n});\n\n// familyPrefix is deprecated as of 6.2.0 and should be removed in 7.0.0\nObject.defineProperty(config, 'familyPrefix', {\n  enumerable: true,\n  set: function set(val) {\n    _config.cssPrefix = val;\n    _onChangeCb.forEach(function (cb) {\n      return cb(config);\n    });\n  },\n  get: function get() {\n    return _config.cssPrefix;\n  }\n});\nWINDOW.FontAwesomeConfig = config;\nvar _onChangeCb = [];\nfunction onChange(cb) {\n  _onChangeCb.push(cb);\n  return function () {\n    _onChangeCb.splice(_onChangeCb.indexOf(cb), 1);\n  };\n}\n\nvar d$2 = UNITS_IN_GRID;\nvar meaninglessTransform = {\n  size: 16,\n  x: 0,\n  y: 0,\n  rotate: 0,\n  flipX: false,\n  flipY: false\n};\nfunction insertCss(css) {\n  if (!css || !IS_DOM) {\n    return;\n  }\n  var style = DOCUMENT.createElement('style');\n  style.setAttribute('type', 'text/css');\n  style.innerHTML = css;\n  var headChildren = DOCUMENT.head.childNodes;\n  var beforeChild = null;\n  for (var i = headChildren.length - 1; i > -1; i--) {\n    var child = headChildren[i];\n    var tagName = (child.tagName || '').toUpperCase();\n    if (['STYLE', 'LINK'].indexOf(tagName) > -1) {\n      beforeChild = child;\n    }\n  }\n  DOCUMENT.head.insertBefore(style, beforeChild);\n  return css;\n}\nvar idPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\nfunction nextUniqueId() {\n  var size = 12;\n  var id = '';\n  while (size-- > 0) {\n    id += idPool[Math.random() * 62 | 0];\n  }\n  return id;\n}\nfunction toArray(obj) {\n  var array = [];\n  for (var i = (obj || []).length >>> 0; i--;) {\n    array[i] = obj[i];\n  }\n  return array;\n}\nfunction classArray(node) {\n  if (node.classList) {\n    return toArray(node.classList);\n  } else {\n    return (node.getAttribute('class') || '').split(' ').filter(function (i) {\n      return i;\n    });\n  }\n}\nfunction htmlEscape(str) {\n  return \"\".concat(str).replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/'/g, '&#39;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\nfunction joinAttributes(attributes) {\n  return Object.keys(attributes || {}).reduce(function (acc, attributeName) {\n    return acc + \"\".concat(attributeName, \"=\\\"\").concat(htmlEscape(attributes[attributeName]), \"\\\" \");\n  }, '').trim();\n}\nfunction joinStyles(styles) {\n  return Object.keys(styles || {}).reduce(function (acc, styleName) {\n    return acc + \"\".concat(styleName, \": \").concat(styles[styleName].trim(), \";\");\n  }, '');\n}\nfunction transformIsMeaningful(transform) {\n  return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY;\n}\nfunction transformForSvg(_ref) {\n  var transform = _ref.transform,\n    containerWidth = _ref.containerWidth,\n    iconWidth = _ref.iconWidth;\n  var outer = {\n    transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n  };\n  var innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n  var innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n  var innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n  var inner = {\n    transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n  };\n  var path = {\n    transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n  };\n  return {\n    outer: outer,\n    inner: inner,\n    path: path\n  };\n}\nfunction transformForCss(_ref2) {\n  var transform = _ref2.transform,\n    _ref2$width = _ref2.width,\n    width = _ref2$width === void 0 ? UNITS_IN_GRID : _ref2$width,\n    _ref2$height = _ref2.height,\n    height = _ref2$height === void 0 ? UNITS_IN_GRID : _ref2$height,\n    _ref2$startCentered = _ref2.startCentered,\n    startCentered = _ref2$startCentered === void 0 ? false : _ref2$startCentered;\n  var val = '';\n  if (startCentered && IS_IE) {\n    val += \"translate(\".concat(transform.x / d$2 - width / 2, \"em, \").concat(transform.y / d$2 - height / 2, \"em) \");\n  } else if (startCentered) {\n    val += \"translate(calc(-50% + \".concat(transform.x / d$2, \"em), calc(-50% + \").concat(transform.y / d$2, \"em)) \");\n  } else {\n    val += \"translate(\".concat(transform.x / d$2, \"em, \").concat(transform.y / d$2, \"em) \");\n  }\n  val += \"scale(\".concat(transform.size / d$2 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / d$2 * (transform.flipY ? -1 : 1), \") \");\n  val += \"rotate(\".concat(transform.rotate, \"deg) \");\n  return val;\n}\n\nvar baseStyles = \":root, :host {\\n  --fa-font-solid: normal 900 1em/1 'Font Awesome 7 Free';\\n  --fa-font-regular: normal 400 1em/1 'Font Awesome 7 Free';\\n  --fa-font-light: normal 300 1em/1 'Font Awesome 7 Pro';\\n  --fa-font-thin: normal 100 1em/1 'Font Awesome 7 Pro';\\n  --fa-font-duotone: normal 900 1em/1 'Font Awesome 7 Duotone';\\n  --fa-font-duotone-regular: normal 400 1em/1 'Font Awesome 7 Duotone';\\n  --fa-font-duotone-light: normal 300 1em/1 'Font Awesome 7 Duotone';\\n  --fa-font-duotone-thin: normal 100 1em/1 'Font Awesome 7 Duotone';\\n  --fa-font-brands: normal 400 1em/1 'Font Awesome 7 Brands';\\n  --fa-font-sharp-solid: normal 900 1em/1 'Font Awesome 7 Sharp';\\n  --fa-font-sharp-regular: normal 400 1em/1 'Font Awesome 7 Sharp';\\n  --fa-font-sharp-light: normal 300 1em/1 'Font Awesome 7 Sharp';\\n  --fa-font-sharp-thin: normal 100 1em/1 'Font Awesome 7 Sharp';\\n  --fa-font-sharp-duotone-solid: normal 900 1em/1 'Font Awesome 7 Sharp Duotone';\\n  --fa-font-sharp-duotone-regular: normal 400 1em/1 'Font Awesome 7 Sharp Duotone';\\n  --fa-font-sharp-duotone-light: normal 300 1em/1 'Font Awesome 7 Sharp Duotone';\\n  --fa-font-sharp-duotone-thin: normal 100 1em/1 'Font Awesome 7 Sharp Duotone';\\n  --fa-font-slab-regular: normal 400 1em/1 'Font Awesome 7 Slab';\\n  --fa-font-slab-press-regular: normal 400 1em/1 'Font Awesome 7 Slab Press';\\n  --fa-font-slab-duo-regular: normal 400 1em/1 'Font Awesome 7 Slab Duo';\\n  --fa-font-slab-press-duo-regular: normal 400 1em/1 'Font Awesome 7 Slab Press Duo';\\n  --fa-font-pixel-regular: normal 400 1em/1 'Font Awesome 7 Pixel';\\n  --fa-font-mosaic-solid: normal 900 1em/1 'Font Awesome 7 Mosaic';\\n  --fa-font-vellum-solid: normal 900 1em/1 'Font Awesome 7 Vellum';\\n  --fa-font-whiteboard-semibold: normal 600 1em/1 'Font Awesome 7 Whiteboard';\\n  --fa-font-thumbprint-light: normal 300 1em/1 'Font Awesome 7 Thumbprint';\\n  --fa-font-notdog-solid: normal 900 1em/1 'Font Awesome 7 Notdog';\\n  --fa-font-notdog-duo-solid: normal 900 1em/1 'Font Awesome 7 Notdog Duo';\\n  --fa-font-etch-solid: normal 900 1em/1 'Font Awesome 7 Etch';\\n  --fa-font-graphite-thin: normal 100 1em/1 'Font Awesome 7 Graphite';\\n  --fa-font-jelly-regular: normal 400 1em/1 'Font Awesome 7 Jelly';\\n  --fa-font-jelly-fill-regular: normal 400 1em/1 'Font Awesome 7 Jelly Fill';\\n  --fa-font-jelly-duo-regular: normal 400 1em/1 'Font Awesome 7 Jelly Duo';\\n  --fa-font-chisel-regular: normal 400 1em/1 'Font Awesome 7 Chisel';\\n  --fa-font-utility-semibold: normal 600 1em/1 'Font Awesome 7 Utility';\\n  --fa-font-utility-duo-semibold: normal 600 1em/1 'Font Awesome 7 Utility Duo';\\n  --fa-font-utility-fill-semibold: normal 600 1em/1 'Font Awesome 7 Utility Fill';\\n}\\n\\n.svg-inline--fa {\\n  box-sizing: content-box;\\n  display: var(--fa-display, inline-block);\\n  height: 1em;\\n  overflow: visible;\\n  vertical-align: -0.125em;\\n  width: var(--fa-width, 1.25em);\\n}\\n.svg-inline--fa.fa-2xs {\\n  vertical-align: 0.1em;\\n}\\n.svg-inline--fa.fa-xs {\\n  vertical-align: 0em;\\n}\\n.svg-inline--fa.fa-sm {\\n  vertical-align: -0.0714285714em;\\n}\\n.svg-inline--fa.fa-lg {\\n  vertical-align: -0.2em;\\n}\\n.svg-inline--fa.fa-xl {\\n  vertical-align: -0.25em;\\n}\\n.svg-inline--fa.fa-2xl {\\n  vertical-align: -0.3125em;\\n}\\n.svg-inline--fa.fa-pull-left,\\n.svg-inline--fa .fa-pull-start {\\n  float: inline-start;\\n  margin-inline-end: var(--fa-pull-margin, 0.3em);\\n}\\n.svg-inline--fa.fa-pull-right,\\n.svg-inline--fa .fa-pull-end {\\n  float: inline-end;\\n  margin-inline-start: var(--fa-pull-margin, 0.3em);\\n}\\n.svg-inline--fa.fa-li {\\n  width: var(--fa-li-width, 2em);\\n  inset-inline-start: calc(-1 * var(--fa-li-width, 2em));\\n  inset-block-start: 0.25em; /* syncing vertical alignment with Web Font rendering */\\n}\\n\\n.fa-layers-counter, .fa-layers-text {\\n  display: inline-block;\\n  position: absolute;\\n  text-align: center;\\n}\\n\\n.fa-layers {\\n  display: inline-block;\\n  height: 1em;\\n  position: relative;\\n  text-align: center;\\n  vertical-align: -0.125em;\\n  width: var(--fa-width, 1.25em);\\n}\\n.fa-layers .svg-inline--fa {\\n  inset: 0;\\n  margin: auto;\\n  position: absolute;\\n  transform-origin: center center;\\n}\\n\\n.fa-layers-text {\\n  left: 50%;\\n  top: 50%;\\n  transform: translate(-50%, -50%);\\n  transform-origin: center center;\\n}\\n\\n.fa-layers-counter {\\n  background-color: var(--fa-counter-background-color, #ff253a);\\n  border-radius: var(--fa-counter-border-radius, 1em);\\n  box-sizing: border-box;\\n  color: var(--fa-inverse, #fff);\\n  line-height: var(--fa-counter-line-height, 1);\\n  max-width: var(--fa-counter-max-width, 5em);\\n  min-width: var(--fa-counter-min-width, 1.5em);\\n  overflow: hidden;\\n  padding: var(--fa-counter-padding, 0.25em 0.5em);\\n  right: var(--fa-right, 0);\\n  text-overflow: ellipsis;\\n  top: var(--fa-top, 0);\\n  transform: scale(var(--fa-counter-scale, 0.25));\\n  transform-origin: top right;\\n}\\n\\n.fa-layers-bottom-right {\\n  bottom: var(--fa-bottom, 0);\\n  right: var(--fa-right, 0);\\n  top: auto;\\n  transform: scale(var(--fa-layers-scale, 0.25));\\n  transform-origin: bottom right;\\n}\\n\\n.fa-layers-bottom-left {\\n  bottom: var(--fa-bottom, 0);\\n  left: var(--fa-left, 0);\\n  right: auto;\\n  top: auto;\\n  transform: scale(var(--fa-layers-scale, 0.25));\\n  transform-origin: bottom left;\\n}\\n\\n.fa-layers-top-right {\\n  top: var(--fa-top, 0);\\n  right: var(--fa-right, 0);\\n  transform: scale(var(--fa-layers-scale, 0.25));\\n  transform-origin: top right;\\n}\\n\\n.fa-layers-top-left {\\n  left: var(--fa-left, 0);\\n  right: auto;\\n  top: var(--fa-top, 0);\\n  transform: scale(var(--fa-layers-scale, 0.25));\\n  transform-origin: top left;\\n}\\n\\n.fa-1x {\\n  font-size: 1em;\\n}\\n\\n.fa-2x {\\n  font-size: 2em;\\n}\\n\\n.fa-3x {\\n  font-size: 3em;\\n}\\n\\n.fa-4x {\\n  font-size: 4em;\\n}\\n\\n.fa-5x {\\n  font-size: 5em;\\n}\\n\\n.fa-6x {\\n  font-size: 6em;\\n}\\n\\n.fa-7x {\\n  font-size: 7em;\\n}\\n\\n.fa-8x {\\n  font-size: 8em;\\n}\\n\\n.fa-9x {\\n  font-size: 9em;\\n}\\n\\n.fa-10x {\\n  font-size: 10em;\\n}\\n\\n.fa-2xs {\\n  font-size: calc(10 / 16 * 1em); /* converts a 10px size into an em-based value that's relative to the scale's 16px base */\\n  line-height: calc(1 / 10 * 1em); /* sets the line-height of the icon back to that of it's parent */\\n  vertical-align: calc((6 / 10 - 0.375) * 1em); /* vertically centers the icon taking into account the surrounding text's descender */\\n}\\n\\n.fa-xs {\\n  font-size: calc(12 / 16 * 1em); /* converts a 12px size into an em-based value that's relative to the scale's 16px base */\\n  line-height: calc(1 / 12 * 1em); /* sets the line-height of the icon back to that of it's parent */\\n  vertical-align: calc((6 / 12 - 0.375) * 1em); /* vertically centers the icon taking into account the surrounding text's descender */\\n}\\n\\n.fa-sm {\\n  font-size: calc(14 / 16 * 1em); /* converts a 14px size into an em-based value that's relative to the scale's 16px base */\\n  line-height: calc(1 / 14 * 1em); /* sets the line-height of the icon back to that of it's parent */\\n  vertical-align: calc((6 / 14 - 0.375) * 1em); /* vertically centers the icon taking into account the surrounding text's descender */\\n}\\n\\n.fa-lg {\\n  font-size: calc(20 / 16 * 1em); /* converts a 20px size into an em-based value that's relative to the scale's 16px base */\\n  line-height: calc(1 / 20 * 1em); /* sets the line-height of the icon back to that of it's parent */\\n  vertical-align: calc((6 / 20 - 0.375) * 1em); /* vertically centers the icon taking into account the surrounding text's descender */\\n}\\n\\n.fa-xl {\\n  font-size: calc(24 / 16 * 1em); /* converts a 24px size into an em-based value that's relative to the scale's 16px base */\\n  line-height: calc(1 / 24 * 1em); /* sets the line-height of the icon back to that of it's parent */\\n  vertical-align: calc((6 / 24 - 0.375) * 1em); /* vertically centers the icon taking into account the surrounding text's descender */\\n}\\n\\n.fa-2xl {\\n  font-size: calc(32 / 16 * 1em); /* converts a 32px size into an em-based value that's relative to the scale's 16px base */\\n  line-height: calc(1 / 32 * 1em); /* sets the line-height of the icon back to that of it's parent */\\n  vertical-align: calc((6 / 32 - 0.375) * 1em); /* vertically centers the icon taking into account the surrounding text's descender */\\n}\\n\\n.fa-width-auto {\\n  --fa-width: auto;\\n}\\n\\n.fa-fw,\\n.fa-width-fixed {\\n  --fa-width: 1.25em;\\n}\\n\\n.fa-canvas-square {\\n  padding-block: 0.125em;\\n  margin-block-end: -0.125em;\\n}\\n\\n.fa-canvas-roomy {\\n  padding-block: 0.25em;\\n  padding-inline: 0.125em;\\n  margin-block-end: -0.25em;\\n  box-sizing: content-box;\\n}\\n\\n.fa-ul {\\n  list-style-type: none;\\n  margin-inline-start: var(--fa-li-margin, 2.5em);\\n  padding-inline-start: 0;\\n}\\n.fa-ul > li {\\n  position: relative;\\n}\\n\\n.fa-li {\\n  inset-inline-start: calc(-1 * var(--fa-li-width, 2em));\\n  position: absolute;\\n  text-align: center;\\n  width: var(--fa-li-width, 2em);\\n  line-height: inherit;\\n}\\n\\n/* Heads Up: Bordered Icons will not be supported in the future!\\n  - This feature will be deprecated in the next major release of Font Awesome (v8)!\\n  - You may continue to use it in this version *v7), but it will not be supported in Font Awesome v8.\\n*/\\n/* Notes:\\n* --@{v.$css-prefix}-border-width = 1/16 by default (to render as ~1px based on a 16px default font-size)\\n* --@{v.$css-prefix}-border-padding =\\n  ** 3/16 for vertical padding (to give ~2px of vertical whitespace around an icon considering it's vertical alignment)\\n  ** 4/16 for horizontal padding (to give ~4px of horizontal whitespace around an icon)\\n*/\\n.fa-border {\\n  border-color: var(--fa-border-color, #eee);\\n  border-radius: var(--fa-border-radius, 0.1em);\\n  border-style: var(--fa-border-style, solid);\\n  border-width: var(--fa-border-width, 0.0625em);\\n  box-sizing: var(--fa-border-box-sizing, content-box);\\n  padding: var(--fa-border-padding, 0.1875em 0.25em);\\n}\\n\\n.fa-pull-left,\\n.fa-pull-start {\\n  float: inline-start;\\n  margin-inline-end: var(--fa-pull-margin, 0.3em);\\n}\\n\\n.fa-pull-right,\\n.fa-pull-end {\\n  float: inline-end;\\n  margin-inline-start: var(--fa-pull-margin, 0.3em);\\n}\\n\\n.fa-beat {\\n  animation-name: fa-beat;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 1s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n}\\n\\n.fa-bounce {\\n  animation-name: fa-bounce;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 1s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\\n}\\n\\n.fa-fade {\\n  animation-name: fa-fade;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 1s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n}\\n\\n.fa-beat-fade {\\n  animation-name: fa-beat-fade;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 1s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n}\\n\\n.fa-flip {\\n  animation-name: fa-flip;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 1.5s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n}\\n\\n.fa-flip-360 {\\n  animation-name: fa-flip-360;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 1s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n}\\n\\n.fa-shake {\\n  animation-name: fa-shake;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 0.75s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n}\\n\\n.fa-spin {\\n  animation-name: fa-spin;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 2s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, linear);\\n}\\n\\n.fa-spin-reverse {\\n  --fa-animation-direction: reverse;\\n}\\n\\n.fa-pulse,\\n.fa-spin-pulse {\\n  animation-name: fa-spin;\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 1s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, steps(8));\\n}\\n\\n.fa-spin-snap {\\n  animation-name: fa-spin-snap;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 3s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, linear);\\n}\\n\\n.fa-spin-snap-4 {\\n  animation-name: fa-spin-snap-4;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 2.4s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, linear);\\n}\\n\\n.fa-spin-snap-8 {\\n  animation-name: fa-spin-snap-8;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 4s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, linear);\\n}\\n\\n.fa-buzz {\\n  animation-name: fa-buzz;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 0.6s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, linear);\\n}\\n\\n.fa-wag {\\n  animation-name: fa-wag;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 0.9s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, ease-out);\\n  transform-origin: bottom center;\\n}\\n\\n.fa-float {\\n  animation-name: fa-float;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 3s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n  will-change: transform;\\n}\\n\\n.fa-swing {\\n  animation-name: fa-swing;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 1.2s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, ease-out);\\n  transform-origin: top center;\\n}\\n\\n.fa-jello {\\n  animation-name: fa-jello;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 0.9s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, ease-out);\\n}\\n\\n@media (prefers-reduced-motion: reduce) {\\n  .fa-beat,\\n  .fa-bounce,\\n  .fa-fade,\\n  .fa-beat-fade,\\n  .fa-flip,\\n  .fa-flip-360,\\n  .fa-pulse,\\n  .fa-shake,\\n  .fa-spin,\\n  .fa-spin-pulse,\\n  .fa-buzz,\\n  .fa-float,\\n  .fa-jello,\\n  .fa-spin-snap,\\n  .fa-spin-snap-4,\\n  .fa-spin-snap-8,\\n  .fa-swing,\\n  .fa-wag {\\n    animation: none !important;\\n    transition: none !important;\\n  }\\n}\\n@keyframes fa-beat {\\n  0% {\\n    transform: scale(1);\\n  }\\n  25% {\\n    transform: scale(calc(1.25 * var(--fa-beat-scale, 1.25)));\\n  }\\n  45% {\\n    transform: scale(calc(1.22 * var(--fa-beat-scale, 1.22)));\\n  }\\n  65% {\\n    transform: scale(calc(1.25 * var(--fa-beat-scale, 1.25)));\\n  }\\n  90% {\\n    transform: scale(1);\\n  }\\n}\\n@keyframes fa-bounce {\\n  0% {\\n    transform: scale(1, 1) translateY(0);\\n    animation-timing-function: var(--fa-animation-timing);\\n  }\\n  14% {\\n    transform: scale(var(--fa-bounce-start-scale-x, 1.06), var(--fa-bounce-start-scale-y, 0.94)) translateY(var(--fa-bounce-anticipation, 3px));\\n    animation-timing-function: cubic-bezier(0.33, 0, 0.66, 0.33);\\n  }\\n  32% {\\n    transform: scale(var(--fa-bounce-jump-scale-x, 0.94), var(--fa-bounce-jump-scale-y, 1.12)) translateY(calc(-1 * var(--fa-bounce-height, 0.5em)));\\n    animation-timing-function: cubic-bezier(0.33, 0.66, 0.66, 1);\\n  }\\n  52% {\\n    transform: scale(1, 1) translateY(calc(-1 * var(--fa-bounce-height, 0.5em) * 1.1));\\n    animation-timing-function: cubic-bezier(0.5, 0, 1, 0.5);\\n  }\\n  70% {\\n    transform: scale(var(--fa-bounce-land-scale-x, 1.06), var(--fa-bounce-land-scale-y, 0.92)) translateY(0);\\n    animation-timing-function: cubic-bezier(0.33, 0.33, 0.66, 1);\\n  }\\n  85% {\\n    transform: scale(0.98, 1.04) translateY(calc(-2px * var(--fa-bounce-rebound, 1)));\\n    animation-timing-function: cubic-bezier(0.33, 0, 0.66, 1);\\n  }\\n  100% {\\n    transform: scale(1, 1) translateY(0);\\n  }\\n}\\n@keyframes fa-fade {\\n  0% {\\n    opacity: 1;\\n    transform: scale(1);\\n    animation-timing-function: cubic-bezier(0.2, 0, 0.4, 1);\\n  }\\n  40% {\\n    opacity: var(--fa-fade-opacity, 0.4);\\n    transform: scale(0.98);\\n    animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);\\n  }\\n  100% {\\n    opacity: 1;\\n    transform: scale(1);\\n  }\\n}\\n@keyframes fa-beat-fade {\\n  0% {\\n    opacity: var(--fa-beat-fade-opacity, 0.4);\\n    transform: scale(1);\\n    animation-timing-function: cubic-bezier(0.2, 0, 0.4, 1);\\n  }\\n  25% {\\n    opacity: calc(var(--fa-beat-fade-opacity, 0.4) + 0.4);\\n    transform: scale(var(--fa-beat-fade-scale, 1.28));\\n    animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);\\n  }\\n  45% {\\n    opacity: 1;\\n    transform: scale(var(--fa-beat-fade-scale, 1.25));\\n    animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n  }\\n  65% {\\n    opacity: calc(var(--fa-beat-fade-opacity, 0.4) + 0.4);\\n    transform: scale(var(--fa-beat-fade-scale, 1.28));\\n    animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);\\n  }\\n  100% {\\n    opacity: var(--fa-beat-fade-opacity, 0.4);\\n    transform: scale(1);\\n  }\\n}\\n@keyframes fa-flip {\\n  0% {\\n    transform: perspective(2em) scale(1) rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), 0deg);\\n    animation-timing-function: cubic-bezier(0.2, 0, 0.4, 1);\\n  }\\n  8% {\\n    transform: perspective(2em) scale(var(--fa-flip-anticipation-scale, 0.95)) rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), 0deg);\\n    animation-timing-function: cubic-bezier(0.33, 0, 0.66, 0.33);\\n  }\\n  35% {\\n    transform: perspective(2em) scale(1) rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), calc(var(--fa-flip-angle, -360deg) * 0.6));\\n    animation-timing-function: linear;\\n  }\\n  65% {\\n    transform: perspective(2em) scale(1) rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), calc(var(--fa-flip-angle, -360deg) * 0.5));\\n    animation-timing-function: cubic-bezier(0.33, 0.66, 0.66, 1);\\n  }\\n  92% {\\n    transform: perspective(2em) scale(1) rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), calc(var(--fa-flip-angle, -360deg) * var(--fa-flip-overshoot, 1.04)));\\n    animation-timing-function: cubic-bezier(0.33, 0, 0.66, 1);\\n  }\\n  100% {\\n    transform: perspective(2em) scale(1) rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -360deg));\\n  }\\n}\\n@keyframes fa-flip-360 {\\n  0% {\\n    transform: perspective(2em) scale(1) rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), 0deg);\\n    animation-timing-function: cubic-bezier(0.2, 0, 0.4, 1);\\n  }\\n  8% {\\n    transform: perspective(2em) scale(var(--fa-flip-anticipation-scale, 0.95)) rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), 0deg);\\n    animation-timing-function: cubic-bezier(0.33, 0, 0.66, 0.33);\\n  }\\n  50% {\\n    transform: perspective(2em) scale(1) rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), calc(var(--fa-flip-angle, -360deg) * 0.6));\\n    animation-timing-function: cubic-bezier(0.33, 0.66, 0.66, 1);\\n  }\\n  80% {\\n    transform: perspective(2em) scale(1) rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), calc(var(--fa-flip-angle, -360deg) * var(--fa-flip-overshoot, 1.04)));\\n    animation-timing-function: cubic-bezier(0.33, 0, 0.66, 1);\\n  }\\n  100% {\\n    transform: perspective(2em) scale(1) rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -360deg));\\n  }\\n}\\n@keyframes fa-shake {\\n  0% {\\n    transform: rotate(0deg);\\n    animation-timing-function: cubic-bezier(0.2, 0, 0.8, 1);\\n  }\\n  8% {\\n    transform: rotate(35deg) translateX(1px);\\n    animation-timing-function: cubic-bezier(0.3, 0, 0.7, 1);\\n  }\\n  20% {\\n    transform: rotate(-22deg) translateX(-1px);\\n    animation-timing-function: cubic-bezier(0.3, 0, 0.7, 1);\\n  }\\n  35% {\\n    transform: rotate(15deg) translateX(1px);\\n    animation-timing-function: cubic-bezier(0.3, 0, 0.7, 1);\\n  }\\n  50% {\\n    transform: rotate(-9deg);\\n    animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);\\n  }\\n  65% {\\n    transform: rotate(5deg);\\n    animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);\\n  }\\n  78% {\\n    transform: rotate(-3deg);\\n    animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);\\n  }\\n  90% {\\n    transform: rotate(1deg);\\n    animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n  }\\n  100% {\\n    transform: rotate(0deg);\\n  }\\n}\\n@keyframes fa-spin {\\n  0% {\\n    transform: rotate(0deg);\\n  }\\n  100% {\\n    transform: rotate(360deg);\\n  }\\n}\\n@keyframes fa-spin-snap {\\n  0% {\\n    transform: rotate(0deg);\\n    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n  }\\n  12% {\\n    transform: rotate(60deg);\\n    animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\\n  }\\n  16.67% {\\n    transform: rotate(60deg);\\n    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n  }\\n  28.67% {\\n    transform: rotate(120deg);\\n    animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\\n  }\\n  33.33% {\\n    transform: rotate(120deg);\\n    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n  }\\n  45.33% {\\n    transform: rotate(180deg);\\n    animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\\n  }\\n  50% {\\n    transform: rotate(180deg);\\n    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n  }\\n  62% {\\n    transform: rotate(240deg);\\n    animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\\n  }\\n  66.67% {\\n    transform: rotate(240deg);\\n    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n  }\\n  78.67% {\\n    transform: rotate(300deg);\\n    animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\\n  }\\n  83.33% {\\n    transform: rotate(300deg);\\n    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n  }\\n  95.33% {\\n    transform: rotate(360deg);\\n    animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\\n  }\\n  100% {\\n    transform: rotate(360deg);\\n  }\\n}\\n@keyframes fa-spin-snap-4 {\\n  0% {\\n    transform: rotate(0deg);\\n    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n  }\\n  15% {\\n    transform: rotate(90deg);\\n    animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\\n  }\\n  25% {\\n    transform: rotate(90deg);\\n    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n  }\\n  40% {\\n    transform: rotate(180deg);\\n    animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\\n  }\\n  50% {\\n    transform: rotate(180deg);\\n    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n  }\\n  65% {\\n    transform: rotate(270deg);\\n    animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\\n  }\\n  75% {\\n    transform: rotate(270deg);\\n    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n  }\\n  90% {\\n    transform: rotate(360deg);\\n    animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\\n  }\\n  100% {\\n    transform: rotate(360deg);\\n  }\\n}\\n@keyframes fa-spin-snap-8 {\\n  0% {\\n    transform: rotate(0deg);\\n    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n  }\\n  9% {\\n    transform: rotate(45deg);\\n    animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\\n  }\\n  12.5% {\\n    transform: rotate(45deg);\\n    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n  }\\n  21.5% {\\n    transform: rotate(90deg);\\n    animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\\n  }\\n  25% {\\n    transform: rotate(90deg);\\n    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n  }\\n  34% {\\n    transform: rotate(135deg);\\n    animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\\n  }\\n  37.5% {\\n    transform: rotate(135deg);\\n    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n  }\\n  46.5% {\\n    transform: rotate(180deg);\\n    animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\\n  }\\n  50% {\\n    transform: rotate(180deg);\\n    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n  }\\n  59% {\\n    transform: rotate(225deg);\\n    animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\\n  }\\n  62.5% {\\n    transform: rotate(225deg);\\n    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n  }\\n  71.5% {\\n    transform: rotate(270deg);\\n    animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\\n  }\\n  75% {\\n    transform: rotate(270deg);\\n    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n  }\\n  84% {\\n    transform: rotate(315deg);\\n    animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\\n  }\\n  87.5% {\\n    transform: rotate(315deg);\\n    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n  }\\n  96.5% {\\n    transform: rotate(360deg);\\n    animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\\n  }\\n  100% {\\n    transform: rotate(360deg);\\n  }\\n}\\n@keyframes fa-buzz {\\n  0% {\\n    transform: translateX(0) rotate(0deg);\\n    animation-timing-function: cubic-bezier(0.1, 0, 0.9, 1);\\n  }\\n  5% {\\n    transform: translateX(var(--fa-buzz-distance, 4px)) rotate(0.5deg);\\n  }\\n  10% {\\n    transform: translateX(calc(-1 * var(--fa-buzz-distance, 4px))) rotate(-0.5deg);\\n  }\\n  15% {\\n    transform: translateX(var(--fa-buzz-distance, 4px)) rotate(0.3deg);\\n  }\\n  20% {\\n    transform: translateX(calc(-1 * var(--fa-buzz-distance, 4px))) rotate(-0.3deg);\\n  }\\n  25% {\\n    transform: translateX(calc(var(--fa-buzz-distance, 4px) * 0.7)) rotate(0.2deg);\\n  }\\n  30% {\\n    transform: translateX(calc(-1 * var(--fa-buzz-distance, 4px) * 0.7)) rotate(-0.2deg);\\n  }\\n  35% {\\n    transform: translateX(calc(var(--fa-buzz-distance, 4px) * 0.4)) rotate(0.1deg);\\n  }\\n  40% {\\n    transform: translateX(0) rotate(0deg);\\n  }\\n  100% {\\n    transform: translateX(0) rotate(0deg);\\n  }\\n}\\n@keyframes fa-wag {\\n  0% {\\n    transform: rotate(0deg);\\n    animation-timing-function: cubic-bezier(0.2, 0, 0.6, 1);\\n  }\\n  12% {\\n    transform: rotate(var(--fa-wag-angle, 12deg));\\n    animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n  }\\n  24% {\\n    transform: rotate(2deg);\\n    animation-timing-function: cubic-bezier(0.2, 0, 0.6, 1);\\n  }\\n  36% {\\n    transform: rotate(calc(var(--fa-wag-angle, 12deg) * 0.85));\\n    animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n  }\\n  48% {\\n    transform: rotate(1deg);\\n    animation-timing-function: cubic-bezier(0.2, 0, 0.6, 1);\\n  }\\n  58% {\\n    transform: rotate(calc(var(--fa-wag-angle, 12deg) * 0.6));\\n    animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n  }\\n  68% {\\n    transform: rotate(0deg);\\n  }\\n  100% {\\n    transform: rotate(0deg);\\n  }\\n}\\n@keyframes fa-float {\\n  0% {\\n    transform: translateY(0) translateX(0) rotate(0deg) scale(var(--fa-float-squash-x, 1.02), var(--fa-float-squash-y, 0.98));\\n    animation-timing-function: cubic-bezier(0.33, 0, 0.66, 0.33);\\n  }\\n  15% {\\n    transform: translateY(calc(-0.4 * var(--fa-float-height, 6px))) translateX(var(--fa-float-drift, 1px)) rotate(var(--fa-float-tilt, 1deg)) scale(1, 1);\\n    animation-timing-function: cubic-bezier(0.33, 0.66, 0.66, 1);\\n  }\\n  35% {\\n    transform: translateY(calc(-1 * var(--fa-float-height, 6px))) translateX(0) rotate(0deg) scale(var(--fa-float-stretch-x, 0.98), var(--fa-float-stretch-y, 1.03));\\n    animation-timing-function: cubic-bezier(0.5, 0, 0.5, 0);\\n  }\\n  50% {\\n    transform: translateY(calc(-0.92 * var(--fa-float-height, 6px))) translateX(calc(-0.5 * var(--fa-float-drift, 1px))) rotate(calc(-0.5 * var(--fa-float-tilt, 1deg))) scale(0.995, 1.01);\\n    animation-timing-function: cubic-bezier(0.33, 0, 0.66, 0.33);\\n  }\\n  70% {\\n    transform: translateY(calc(-0.3 * var(--fa-float-height, 6px))) translateX(calc(-1 * var(--fa-float-drift, 1px))) rotate(calc(-1 * var(--fa-float-tilt, 1deg))) scale(1, 1);\\n    animation-timing-function: cubic-bezier(0.33, 0.66, 0.66, 1);\\n  }\\n  90% {\\n    transform: translateY(calc(0.05 * var(--fa-float-height, 6px))) translateX(0) rotate(0deg) scale(var(--fa-float-squash-x, 1.02), var(--fa-float-squash-y, 0.98));\\n    animation-timing-function: cubic-bezier(0.33, 0, 0.66, 1);\\n  }\\n  100% {\\n    transform: translateY(0) translateX(0) rotate(0deg) scale(var(--fa-float-squash-x, 1.02), var(--fa-float-squash-y, 0.98));\\n  }\\n}\\n@keyframes fa-swing {\\n  0% {\\n    transform: rotate(0deg);\\n    animation-timing-function: cubic-bezier(0.2, 0, 0.8, 1);\\n  }\\n  8% {\\n    transform: rotate(var(--fa-swing-angle, 22deg));\\n    animation-timing-function: cubic-bezier(0.3, 0, 0.7, 1);\\n  }\\n  18% {\\n    transform: rotate(calc(-1 * var(--fa-swing-angle, 22deg) * 0.85));\\n    animation-timing-function: cubic-bezier(0.3, 0, 0.7, 1);\\n  }\\n  28% {\\n    transform: rotate(calc(var(--fa-swing-angle, 22deg) * 0.65));\\n    animation-timing-function: cubic-bezier(0.35, 0, 0.65, 1);\\n  }\\n  38% {\\n    transform: rotate(calc(-1 * var(--fa-swing-angle, 22deg) * 0.45));\\n    animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);\\n  }\\n  48% {\\n    transform: rotate(calc(var(--fa-swing-angle, 22deg) * 0.25));\\n    animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);\\n  }\\n  56% {\\n    transform: rotate(calc(-1 * var(--fa-swing-angle, 22deg) * 0.1));\\n    animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);\\n  }\\n  64% {\\n    transform: rotate(0deg);\\n  }\\n  100% {\\n    transform: rotate(0deg);\\n  }\\n}\\n@keyframes fa-jello {\\n  0% {\\n    transform: scale(1, 1);\\n    animation-timing-function: cubic-bezier(0.2, 0, 0.8, 1);\\n  }\\n  12% {\\n    transform: scale(var(--fa-jello-scale-x, 1.15), calc(2 - var(--fa-jello-scale-x, 1.15)));\\n    animation-timing-function: cubic-bezier(0.3, 0, 0.7, 1);\\n  }\\n  24% {\\n    transform: scale(calc(2 - var(--fa-jello-scale-y, 1.12)), var(--fa-jello-scale-y, 1.12));\\n    animation-timing-function: cubic-bezier(0.3, 0, 0.7, 1);\\n  }\\n  36% {\\n    transform: scale(calc(1 + (var(--fa-jello-scale-x, 1.15) - 1) * 0.5), calc(2 - (1 + (var(--fa-jello-scale-x, 1.15) - 1) * 0.5)));\\n    animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);\\n  }\\n  48% {\\n    transform: scale(calc(2 - (1 + (var(--fa-jello-scale-y, 1.12) - 1) * 0.3)), calc(1 + (var(--fa-jello-scale-y, 1.12) - 1) * 0.3));\\n    animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);\\n  }\\n  58% {\\n    transform: scale(1.02, 0.98);\\n    animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n  }\\n  68% {\\n    transform: scale(1, 1);\\n  }\\n  100% {\\n    transform: scale(1, 1);\\n  }\\n}\\n.fa-rotate-90 {\\n  transform: rotate(90deg);\\n}\\n\\n.fa-rotate-180 {\\n  transform: rotate(180deg);\\n}\\n\\n.fa-rotate-270 {\\n  transform: rotate(270deg);\\n}\\n\\n.fa-flip-horizontal {\\n  transform: scale(-1, 1);\\n}\\n\\n.fa-flip-vertical {\\n  transform: scale(1, -1);\\n}\\n\\n.fa-flip-both,\\n.fa-flip-horizontal.fa-flip-vertical {\\n  transform: scale(-1, -1);\\n}\\n\\n.fa-rotate-by {\\n  transform: rotate(var(--fa-rotate-angle, 0));\\n}\\n\\n.svg-inline--fa .fa-primary {\\n  fill: var(--fa-primary-color, currentColor);\\n  opacity: var(--fa-primary-opacity, 1);\\n}\\n\\n.svg-inline--fa .fa-secondary {\\n  fill: var(--fa-secondary-color, currentColor);\\n  opacity: var(--fa-secondary-opacity, 0.4);\\n}\\n\\n.svg-inline--fa.fa-swap-opacity .fa-primary {\\n  opacity: var(--fa-secondary-opacity, 0.4);\\n}\\n\\n.svg-inline--fa.fa-swap-opacity .fa-secondary {\\n  opacity: var(--fa-primary-opacity, 1);\\n}\\n\\n.svg-inline--fa mask .fa-primary,\\n.svg-inline--fa mask .fa-secondary {\\n  fill: black;\\n}\\n\\n.svg-inline--fa.fa-inverse {\\n  fill: var(--fa-inverse, #fff);\\n}\\n\\n.fa-stack {\\n  display: inline-block;\\n  height: 2em;\\n  line-height: 2em;\\n  position: relative;\\n  vertical-align: middle;\\n  width: 2.5em;\\n}\\n\\n.fa-inverse {\\n  color: var(--fa-inverse, #fff);\\n}\\n\\n.svg-inline--fa.fa-stack-1x {\\n  --fa-width: 1.25em;\\n  height: 1em;\\n  width: var(--fa-width);\\n}\\n.svg-inline--fa.fa-stack-2x {\\n  --fa-width: 2.5em;\\n  height: 2em;\\n  width: var(--fa-width);\\n}\\n\\n.fa-stack-1x,\\n.fa-stack-2x {\\n  inset: 0;\\n  margin: auto;\\n  position: absolute;\\n  z-index: var(--fa-stack-z-index, auto);\\n}\";\n\nfunction css() {\n  var dcp = DEFAULT_CSS_PREFIX;\n  var drc = DEFAULT_REPLACEMENT_CLASS;\n  var fp = config.cssPrefix;\n  var rc = config.replacementClass;\n  var s = baseStyles;\n  if (fp !== dcp || rc !== drc) {\n    var dPatt = new RegExp(\"\\\\.\".concat(dcp, \"\\\\-\"), 'g');\n    var customPropPatt = new RegExp(\"\\\\--\".concat(dcp, \"\\\\-\"), 'g');\n    var rPatt = new RegExp(\"\\\\.\".concat(drc), 'g');\n    s = s.replace(dPatt, \".\".concat(fp, \"-\")).replace(customPropPatt, \"--\".concat(fp, \"-\")).replace(rPatt, \".\".concat(rc));\n  }\n  return s;\n}\nvar _cssInserted = false;\nfunction ensureCss() {\n  if (config.autoAddCss && !_cssInserted) {\n    insertCss(css());\n    _cssInserted = true;\n  }\n}\nvar InjectCSS = {\n  mixout: function mixout() {\n    return {\n      dom: {\n        css: css,\n        insertCss: ensureCss\n      }\n    };\n  },\n  hooks: function hooks() {\n    return {\n      beforeDOMElementCreation: function beforeDOMElementCreation() {\n        ensureCss();\n      },\n      beforeI2svg: function beforeI2svg() {\n        ensureCss();\n      }\n    };\n  }\n};\n\nvar w$2 = WINDOW || {};\nif (!w$2[NAMESPACE_IDENTIFIER]) w$2[NAMESPACE_IDENTIFIER] = {};\nif (!w$2[NAMESPACE_IDENTIFIER].styles) w$2[NAMESPACE_IDENTIFIER].styles = {};\nif (!w$2[NAMESPACE_IDENTIFIER].hooks) w$2[NAMESPACE_IDENTIFIER].hooks = {};\nif (!w$2[NAMESPACE_IDENTIFIER].shims) w$2[NAMESPACE_IDENTIFIER].shims = [];\nvar namespace = w$2[NAMESPACE_IDENTIFIER];\n\nvar functions = [];\nvar _listener = function listener() {\n  DOCUMENT.removeEventListener('DOMContentLoaded', _listener);\n  loaded = 1;\n  functions.map(function (fn) {\n    return fn();\n  });\n};\nvar loaded = false;\nif (IS_DOM) {\n  loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);\n  if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', _listener);\n}\nfunction domready (fn) {\n  if (!IS_DOM) return;\n  loaded ? setTimeout(fn, 0) : functions.push(fn);\n}\n\nfunction toHtml(abstractNodes) {\n  var tag = abstractNodes.tag,\n    _abstractNodes$attrib = abstractNodes.attributes,\n    attributes = _abstractNodes$attrib === void 0 ? {} : _abstractNodes$attrib,\n    _abstractNodes$childr = abstractNodes.children,\n    children = _abstractNodes$childr === void 0 ? [] : _abstractNodes$childr;\n  if (typeof abstractNodes === 'string') {\n    return htmlEscape(abstractNodes);\n  } else {\n    return \"<\".concat(tag, \" \").concat(joinAttributes(attributes), \">\").concat(children.map(toHtml).join(''), \"</\").concat(tag, \">\");\n  }\n}\n\nfunction iconFromMapping(mapping, prefix, iconName) {\n  if (mapping && mapping[prefix] && mapping[prefix][iconName]) {\n    return {\n      prefix: prefix,\n      iconName: iconName,\n      icon: mapping[prefix][iconName]\n    };\n  }\n}\n\n/**\n * Internal helper to bind a function known to have 4 arguments\n * to a given context.\n */\nvar bindInternal4 = function bindInternal4(func, thisContext) {\n  return function (a, b, c, d) {\n    return func.call(thisContext, a, b, c, d);\n  };\n};\n\n/**\n * # Reduce\n *\n * A fast object `.reduce()` implementation.\n *\n * @param  {Object}   subject      The object to reduce over.\n * @param  {Function} fn           The reducer function.\n * @param  {mixed}    initialValue The initial value for the reducer, defaults to subject[0].\n * @param  {Object}   thisContext  The context for the reducer.\n * @return {mixed}                 The final result.\n */\nvar reduce = function fastReduceObject(subject, fn, initialValue, thisContext) {\n  var keys = Object.keys(subject),\n    length = keys.length,\n    iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn,\n    i,\n    key,\n    result;\n  if (initialValue === undefined) {\n    i = 1;\n    result = subject[keys[0]];\n  } else {\n    i = 0;\n    result = initialValue;\n  }\n  for (; i < length; i++) {\n    key = keys[i];\n    result = iterator(result, subject[key], key, subject);\n  }\n  return result;\n};\n\n/**\n * Return hexadecimal string for a unicode character\n * Returns `null` when more than one character (not bytes!) are passed\n * For example: 'K' → '7B'\n */\nfunction toHex(unicode) {\n  if (_toConsumableArray(unicode).length !== 1) return null;\n  return unicode.codePointAt(0).toString(16);\n}\n\nfunction normalizeIcons(icons) {\n  return Object.keys(icons).reduce(function (acc, iconName) {\n    var icon = icons[iconName];\n    var expanded = !!icon.icon;\n    if (expanded) {\n      acc[icon.iconName] = icon.icon;\n    } else {\n      acc[iconName] = icon;\n    }\n    return acc;\n  }, {});\n}\nfunction defineIcons(prefix, icons) {\n  var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var _params$skipHooks = params.skipHooks,\n    skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks;\n  var normalized = normalizeIcons(icons);\n  if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n    namespace.hooks.addPack(prefix, normalizeIcons(icons));\n  } else {\n    namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), normalized);\n  }\n\n  /**\n   * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\n   * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\n   * for `fas` so we'll ease the upgrade process for our users by automatically defining\n   * this as well.\n   */\n  if (prefix === 'fas') {\n    defineIcons('fa', icons);\n  }\n}\n\nvar MONO = 0x1;\nvar DUO = 0x2;\n\n// New v7 compatible matchers using the style attribute to determine layer membership\nvar modernMatches = [[DUO, /*#__PURE__*/_wrapRegExp(/path opacity=\"([^\"]*)\".*d=\"([^\"]*)\".*path.*d=\"([^\"]*)\"/, {\n  d2: 2,\n  d1: 3\n})], [DUO, /*#__PURE__*/_wrapRegExp(/path opacity=\"([^\"]*)\".*d=\"([^\"]*)\"/, {\n  d2: 2\n})], [MONO, /*#__PURE__*/_wrapRegExp(/path fill=\"currentColor\".*d=\"([^\"]+)\"/, {\n  d1: 1\n})]];\n\n// Old <= v6 matchers, these should rarely get used.\n//\n// Why are there so many? Over the lifecycle of version 5 and 6 we modified the\n// syntax for our source SVG files several times. These patterns match the\n// historical record and attempt to handle backwards-compatibility in rare edge\n// cases (loading version 6 SVG source files using the version 7 SVG parser)\nvar legacyMatches = [[DUO, /*#__PURE__*/_wrapRegExp(/path class=\"([^\"]*secondary[^\"]*)\".*d=\"([^\"]+)\".*path class=\"([^\"]*primary[^\"]*)\".*d=\"([^\"]+)\"/, {\n  attr2: 1,\n  d2: 2,\n  attr1: 3,\n  d1: 4\n})], [DUO, /*#__PURE__*/_wrapRegExp(/path class=\"([^\"]*primary[^\"]*)\".*d=\"([^\"]+)\".*path class=\"([^\"]*secondary[^\"]*)\".*d=\"([^\"]+)\"/, {\n  attr1: 1,\n  d1: 2,\n  attr2: 3,\n  d2: 4\n})], [DUO, /*#__PURE__*/_wrapRegExp(/path class=\"([^\"]*primary[^\"]*)\".*d=\"([^\"]+)\"/, {\n  attr1: 1,\n  d1: 2\n})], [DUO, /*#__PURE__*/_wrapRegExp(/path class=\"([^\"]*secondary[^\"]*)\".*d=\"([^\"]+)\"/, {\n  attr2: 1,\n  d2: 2\n})], [DUO, /*#__PURE__*/_wrapRegExp(/path d=\"([^\"]+)\".*class=\"([^\"]*secondary[^\"]*)\".*path d=\"([^\"]+)\".*class=\"([^\"]*primary[^\"]*)\"/, {\n  d2: 1,\n  attr2: 2,\n  d1: 3,\n  attr1: 4\n})], [DUO, /*#__PURE__*/_wrapRegExp(/path d=\"([^\"]+)\".*class=\"([^\"]*primary[^\"]*)\".*path d=\"([^\"]+)\".*class=\"([^\"]*secondary[^\"]*)\"/, {\n  d1: 1,\n  attr1: 2,\n  d2: 3,\n  attr2: 4\n})], [DUO, /*#__PURE__*/_wrapRegExp(/path d=\"([^\"]+)\".*class=\"([^\"]*primary[^\"]*)\"/, {\n  d1: 1,\n  attr1: 2\n})], [DUO, /*#__PURE__*/_wrapRegExp(/path d=\"([^\"]+)\".*class=\"([^\"]*secondary[^\"]*)\"/, {\n  d2: 1,\n  attr2: 2\n})], [DUO, /*#__PURE__*/_wrapRegExp(/path d=\"([^\"]+)\".*path d=\"([^\"]+)\"/, {\n  d1: 1,\n  d2: 2\n})], [MONO, /*#__PURE__*/_wrapRegExp(/path d=\"([^\"]+)\"/, {\n  d1: 1\n})], [MONO, /*#__PURE__*/_wrapRegExp(/path style=\"([^\"]+)\".*d=\"([^\"]+)\"/, {\n  attr1: 1,\n  d1: 2\n})]];\n\nvar styles = namespace.styles,\n  shims = namespace.shims;\nvar FAMILY_NAMES = Object.keys(PREFIX_TO_LONG_STYLE);\nvar PREFIXES_FOR_FAMILY = FAMILY_NAMES.reduce(function (acc, familyId) {\n  acc[familyId] = Object.keys(PREFIX_TO_LONG_STYLE[familyId]);\n  return acc;\n}, {});\nvar _defaultUsablePrefix = null;\nvar _byUnicode = {};\nvar _byLigature = {};\nvar _byOldName = {};\nvar _byOldUnicode = {};\nvar _byAlias = {};\nfunction isReserved(name) {\n  return ~RESERVED_CLASSES.indexOf(name);\n}\nfunction getIconName(cssPrefix, cls) {\n  var parts = cls.split('-');\n  var prefix = parts[0];\n  var iconName = parts.slice(1).join('-');\n  if (prefix === cssPrefix && iconName !== '' && !isReserved(iconName)) {\n    return iconName;\n  } else {\n    return null;\n  }\n}\nvar build = function build() {\n  var lookup = function lookup(reducer) {\n    return reduce(styles, function (o$$1, style, prefix) {\n      o$$1[prefix] = reduce(style, reducer, {});\n      return o$$1;\n    }, {});\n  };\n  _byUnicode = lookup(function (acc, icon, iconName) {\n    if (icon[3]) {\n      acc[icon[3]] = iconName;\n    }\n    if (icon[2]) {\n      var aliases = icon[2].filter(function (a$$1) {\n        return typeof a$$1 === 'number';\n      });\n      aliases.forEach(function (alias) {\n        acc[alias.toString(16)] = iconName;\n      });\n    }\n    return acc;\n  });\n  _byLigature = lookup(function (acc, icon, iconName) {\n    acc[iconName] = iconName;\n    if (icon[2]) {\n      var aliases = icon[2].filter(function (a$$1) {\n        return typeof a$$1 === 'string';\n      });\n      aliases.forEach(function (alias) {\n        acc[alias] = iconName;\n      });\n    }\n    return acc;\n  });\n  _byAlias = lookup(function (acc, icon, iconName) {\n    var aliases = icon[2];\n    acc[iconName] = iconName;\n    aliases.forEach(function (alias) {\n      acc[alias] = iconName;\n    });\n    return acc;\n  });\n\n  // If we have a Kit, we can't determine if regular is available since we\n  // could be auto-fetching it. We'll have to assume that it is available.\n  var hasRegular = 'far' in styles || config.autoFetchSvg;\n  var shimLookups = reduce(shims, function (acc, shim) {\n    var maybeNameMaybeUnicode = shim[0];\n    var prefix = shim[1];\n    var iconName = shim[2];\n    if (prefix === 'far' && !hasRegular) {\n      prefix = 'fas';\n    }\n    if (typeof maybeNameMaybeUnicode === 'string') {\n      acc.names[maybeNameMaybeUnicode] = {\n        prefix: prefix,\n        iconName: iconName\n      };\n    }\n    if (typeof maybeNameMaybeUnicode === 'number') {\n      acc.unicodes[maybeNameMaybeUnicode.toString(16)] = {\n        prefix: prefix,\n        iconName: iconName\n      };\n    }\n    return acc;\n  }, {\n    names: {},\n    unicodes: {}\n  });\n  _byOldName = shimLookups.names;\n  _byOldUnicode = shimLookups.unicodes;\n  _defaultUsablePrefix = getCanonicalPrefix(config.styleDefault, {\n    family: config.familyDefault\n  });\n};\nonChange(function (c$$1) {\n  _defaultUsablePrefix = getCanonicalPrefix(c$$1.styleDefault, {\n    family: config.familyDefault\n  });\n});\nbuild();\nfunction byUnicode(prefix, unicode) {\n  return (_byUnicode[prefix] || {})[unicode];\n}\nfunction byLigature(prefix, ligature) {\n  return (_byLigature[prefix] || {})[ligature];\n}\nfunction byAlias(prefix, alias) {\n  return (_byAlias[prefix] || {})[alias];\n}\nfunction byOldName(name) {\n  return _byOldName[name] || {\n    prefix: null,\n    iconName: null\n  };\n}\nfunction byOldUnicode(unicode) {\n  var oldUnicode = _byOldUnicode[unicode];\n  var newUnicode = byUnicode('fas', unicode);\n  return oldUnicode || (newUnicode ? {\n    prefix: 'fas',\n    iconName: newUnicode\n  } : null) || {\n    prefix: null,\n    iconName: null\n  };\n}\nfunction getDefaultUsablePrefix() {\n  return _defaultUsablePrefix;\n}\nvar emptyCanonicalIcon = function emptyCanonicalIcon() {\n  return {\n    prefix: null,\n    iconName: null,\n    rest: []\n  };\n};\nfunction getFamilyId(values) {\n  var family = u;\n  var famProps = FAMILY_NAMES.reduce(function (acc, familyId) {\n    acc[familyId] = \"\".concat(config.cssPrefix, \"-\").concat(familyId);\n    return acc;\n  }, {});\n  xl.forEach(function (familyId) {\n    if (values.includes(famProps[familyId]) || values.some(function (v$$1) {\n      return PREFIXES_FOR_FAMILY[familyId].includes(v$$1);\n    })) {\n      family = familyId;\n    }\n  });\n  return family;\n}\nfunction getCanonicalPrefix(styleOrPrefix) {\n  var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _params$family = params.family,\n    family = _params$family === void 0 ? u : _params$family;\n  var style = PREFIX_TO_STYLE[family][styleOrPrefix];\n\n  // handles the exception of passing in only a family of 'duotone' with no style\n  if (family === l && !styleOrPrefix) {\n    return 'fad';\n  }\n  var prefix = STYLE_TO_PREFIX[family][styleOrPrefix] || STYLE_TO_PREFIX[family][style];\n  var defined = styleOrPrefix in namespace.styles ? styleOrPrefix : null;\n  var result = prefix || defined || null;\n  return result;\n}\nfunction moveNonFaClassesToRest(classNames) {\n  var rest = [];\n  var iconName = null;\n  classNames.forEach(function (cls) {\n    var result = getIconName(config.cssPrefix, cls);\n    if (result) {\n      iconName = result;\n    } else if (cls) {\n      rest.push(cls);\n    }\n  });\n  return {\n    iconName: iconName,\n    rest: rest\n  };\n}\nfunction sortedUniqueValues(arr) {\n  return arr.sort().filter(function (value, index, arr) {\n    return arr.indexOf(value) === index;\n  });\n}\nvar _faCombinedClasses = ha.concat(at);\nfunction getCanonicalIcon(values) {\n  var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _params$skipLookups = params.skipLookups,\n    skipLookups = _params$skipLookups === void 0 ? false : _params$skipLookups;\n  var givenPrefix = null;\n  var faStyleOrFamilyClasses = sortedUniqueValues(values.filter(function (cls) {\n    return _faCombinedClasses.includes(cls);\n  }));\n  var nonStyleOrFamilyClasses = sortedUniqueValues(values.filter(function (cls) {\n    return !_faCombinedClasses.includes(cls);\n  }));\n  var faStyles = faStyleOrFamilyClasses.filter(function (cls) {\n    givenPrefix = cls;\n    return !dl.includes(cls);\n  });\n  var _faStyles = _slicedToArray(faStyles, 1),\n    _faStyles$ = _faStyles[0],\n    styleFromValues = _faStyles$ === void 0 ? null : _faStyles$;\n  var family = getFamilyId(faStyleOrFamilyClasses);\n  var canonical = _objectSpread2(_objectSpread2({}, moveNonFaClassesToRest(nonStyleOrFamilyClasses)), {}, {\n    prefix: getCanonicalPrefix(styleFromValues, {\n      family: family\n    })\n  });\n  return _objectSpread2(_objectSpread2(_objectSpread2({}, canonical), getDefaultCanonicalPrefix({\n    values: values,\n    family: family,\n    styles: styles,\n    config: config,\n    canonical: canonical,\n    givenPrefix: givenPrefix\n  })), applyShimAndAlias(skipLookups, givenPrefix, canonical));\n}\nfunction applyShimAndAlias(skipLookups, givenPrefix, canonical) {\n  var prefix = canonical.prefix,\n    iconName = canonical.iconName;\n  if (skipLookups || !prefix || !iconName) {\n    return {\n      prefix: prefix,\n      iconName: iconName\n    };\n  }\n  var shim = givenPrefix === 'fa' ? byOldName(iconName) : {};\n  var aliasIconName = byAlias(prefix, iconName);\n  iconName = shim.iconName || aliasIconName || iconName;\n  prefix = shim.prefix || prefix;\n  if (prefix === 'far' && !styles['far'] && styles['fas'] && !config.autoFetchSvg) {\n    // Allow a fallback from the regular style to solid if regular is not available\n    // but only if we aren't auto-fetching SVGs\n    prefix = 'fas';\n  }\n  return {\n    prefix: prefix,\n    iconName: iconName\n  };\n}\nvar newCanonicalFamilies = xl.filter(function (familyId) {\n  return familyId !== u || familyId !== l;\n});\nvar newCanonicalStyles = Object.keys(da).filter(function (key) {\n  return key !== u;\n}).map(function (key) {\n  return Object.keys(da[key]);\n}).flat();\nfunction getDefaultCanonicalPrefix(prefixOptions) {\n  var values = prefixOptions.values,\n    family = prefixOptions.family,\n    canonical = prefixOptions.canonical,\n    _prefixOptions$givenP = prefixOptions.givenPrefix,\n    givenPrefix = _prefixOptions$givenP === void 0 ? '' : _prefixOptions$givenP,\n    _prefixOptions$styles = prefixOptions.styles,\n    styles = _prefixOptions$styles === void 0 ? {} : _prefixOptions$styles,\n    _prefixOptions$config = prefixOptions.config,\n    config$$1 = _prefixOptions$config === void 0 ? {} : _prefixOptions$config;\n  var isDuotoneFamily = family === l;\n  var valuesHasDuotone = values.includes('fa-duotone') || values.includes('fad');\n  var defaultFamilyIsDuotone = config$$1.familyDefault === 'duotone';\n  var canonicalPrefixIsDuotone = canonical.prefix === 'fad' || canonical.prefix === 'fa-duotone';\n  if (!isDuotoneFamily && (valuesHasDuotone || defaultFamilyIsDuotone || canonicalPrefixIsDuotone)) {\n    canonical.prefix = 'fad';\n  }\n  if (values.includes('fa-brands') || values.includes('fab')) {\n    canonical.prefix = 'fab';\n  }\n  if (!canonical.prefix && newCanonicalFamilies.includes(family)) {\n    var validPrefix = Object.keys(styles).find(function (key) {\n      return newCanonicalStyles.includes(key);\n    });\n    if (validPrefix || config$$1.autoFetchSvg) {\n      var defaultPrefix = Ql.get(family).defaultShortPrefixId;\n      canonical.prefix = defaultPrefix;\n      canonical.iconName = byAlias(canonical.prefix, canonical.iconName) || canonical.iconName;\n    }\n  }\n  if (canonical.prefix === 'fa' || givenPrefix === 'fa') {\n    // The fa prefix is not canonical. So if it has made it through until this point\n    // we will shift it to the correct prefix.\n    canonical.prefix = getDefaultUsablePrefix() || 'fas';\n  }\n  return canonical;\n}\n\nvar Library = /*#__PURE__*/function () {\n  function Library() {\n    _classCallCheck(this, Library);\n    this.definitions = {};\n  }\n  return _createClass(Library, [{\n    key: \"add\",\n    value: function add() {\n      var _this = this;\n      for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) {\n        definitions[_key] = arguments[_key];\n      }\n      var additions = definitions.reduce(this._pullDefinitions, {});\n      Object.keys(additions).forEach(function (key) {\n        _this.definitions[key] = _objectSpread2(_objectSpread2({}, _this.definitions[key] || {}), additions[key]);\n        defineIcons(key, additions[key]);\n\n        // To keep support for older Classic styles, also add longer prefixes\n        var longPrefix = PREFIX_TO_LONG_STYLE[u][key];\n        if (longPrefix) defineIcons(longPrefix, additions[key]);\n        build();\n      });\n    }\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      this.definitions = {};\n    }\n  }, {\n    key: \"_pullDefinitions\",\n    value: function _pullDefinitions(additions, definition) {\n      var normalized = definition.prefix && definition.iconName && definition.icon ? {\n        0: definition\n      } : definition;\n      Object.keys(normalized).map(function (key) {\n        var _normalized$key = normalized[key],\n          prefix = _normalized$key.prefix,\n          iconName = _normalized$key.iconName,\n          icon = _normalized$key.icon;\n        var aliases = icon[2];\n        if (!additions[prefix]) additions[prefix] = {};\n        if (aliases.length > 0) {\n          aliases.forEach(function (alias) {\n            if (typeof alias === 'string') {\n              additions[prefix][alias] = icon;\n            }\n          });\n        }\n        additions[prefix][iconName] = icon;\n      });\n      return additions;\n    }\n  }]);\n}();\n\nvar _plugins = [];\nvar _hooks = {};\nvar providers = {};\nvar defaultProviderKeys = Object.keys(providers);\nfunction registerPlugins(nextPlugins, _ref) {\n  var obj = _ref.mixoutsTo;\n  _plugins = nextPlugins;\n  _hooks = {};\n  Object.keys(providers).forEach(function (k) {\n    if (defaultProviderKeys.indexOf(k) === -1) {\n      delete providers[k];\n    }\n  });\n  _plugins.forEach(function (plugin) {\n    var mixout = plugin.mixout ? plugin.mixout() : {};\n    Object.keys(mixout).forEach(function (tk) {\n      if (typeof mixout[tk] === 'function') {\n        obj[tk] = mixout[tk];\n      }\n      if (_typeof(mixout[tk]) === 'object') {\n        Object.keys(mixout[tk]).forEach(function (sk) {\n          if (!obj[tk]) {\n            obj[tk] = {};\n          }\n          obj[tk][sk] = mixout[tk][sk];\n        });\n      }\n    });\n    if (plugin.hooks) {\n      var hooks = plugin.hooks();\n      Object.keys(hooks).forEach(function (hook) {\n        if (!_hooks[hook]) {\n          _hooks[hook] = [];\n        }\n        _hooks[hook].push(hooks[hook]);\n      });\n    }\n    if (plugin.provides) {\n      plugin.provides(providers);\n    }\n  });\n  return obj;\n}\nfunction chainHooks(hook, accumulator) {\n  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n    args[_key - 2] = arguments[_key];\n  }\n  var hookFns = _hooks[hook] || [];\n  hookFns.forEach(function (hookFn) {\n    accumulator = hookFn.apply(null, [accumulator].concat(args));\n  });\n  return accumulator;\n}\nfunction callHooks(hook) {\n  for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n    args[_key2 - 1] = arguments[_key2];\n  }\n  var hookFns = _hooks[hook] || [];\n  hookFns.forEach(function (hookFn) {\n    hookFn.apply(null, args);\n  });\n  return undefined;\n}\nfunction callProvided() {\n  var hook = arguments[0];\n  var args = Array.prototype.slice.call(arguments, 1);\n  return providers[hook] ? providers[hook].apply(null, args) : undefined;\n}\n\nfunction findIconDefinition(iconLookup) {\n  if (iconLookup.prefix === 'fa') {\n    iconLookup.prefix = 'fas';\n  }\n  var iconName = iconLookup.iconName;\n  var prefix = iconLookup.prefix || getDefaultUsablePrefix();\n  if (!iconName) return;\n  iconName = byAlias(prefix, iconName) || iconName;\n  return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName);\n}\nvar library = new Library();\nvar noAuto = function noAuto() {\n  config.autoReplaceSvg = false;\n  config.observeMutations = false;\n  callHooks('noAuto');\n};\nvar dom = {\n  i2svg: function i2svg() {\n    var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    if (IS_DOM) {\n      callHooks('beforeI2svg', params);\n      callProvided('pseudoElements2svg', params);\n      return callProvided('i2svg', params);\n    } else {\n      return Promise.reject(new Error('Operation requires a DOM of some kind.'));\n    }\n  },\n  watch: function watch() {\n    var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var autoReplaceSvgRoot = params.autoReplaceSvgRoot;\n    if (config.autoReplaceSvg === false) {\n      config.autoReplaceSvg = true;\n    }\n    config.observeMutations = true;\n    domready(function () {\n      autoReplace({\n        autoReplaceSvgRoot: autoReplaceSvgRoot\n      });\n      callHooks('watch', params);\n    });\n  }\n};\nvar parse = {\n  icon: function icon(_icon) {\n    if (_icon === null) {\n      return null;\n    }\n    if (_typeof(_icon) === 'object' && _icon.prefix && _icon.iconName) {\n      return {\n        prefix: _icon.prefix,\n        iconName: byAlias(_icon.prefix, _icon.iconName) || _icon.iconName\n      };\n    }\n    if (Array.isArray(_icon) && _icon.length === 2) {\n      var iconName = _icon[1].indexOf('fa-') === 0 ? _icon[1].slice(3) : _icon[1];\n      var prefix = getCanonicalPrefix(_icon[0]);\n      return {\n        prefix: prefix,\n        iconName: byAlias(prefix, iconName) || iconName\n      };\n    }\n    if (typeof _icon === 'string' && (_icon.indexOf(\"\".concat(config.cssPrefix, \"-\")) > -1 || _icon.match(ICON_SELECTION_SYNTAX_PATTERN))) {\n      var canonicalIcon = getCanonicalIcon(_icon.split(' '), {\n        skipLookups: true\n      });\n      return {\n        prefix: canonicalIcon.prefix || getDefaultUsablePrefix(),\n        iconName: byAlias(canonicalIcon.prefix, canonicalIcon.iconName) || canonicalIcon.iconName\n      };\n    }\n    if (typeof _icon === 'string') {\n      var _prefix = getDefaultUsablePrefix();\n      return {\n        prefix: _prefix,\n        iconName: byAlias(_prefix, _icon) || _icon\n      };\n    }\n  }\n};\nvar api = {\n  noAuto: noAuto,\n  config: config,\n  dom: dom,\n  parse: parse,\n  library: library,\n  findIconDefinition: findIconDefinition,\n  toHtml: toHtml\n};\nvar autoReplace = function autoReplace() {\n  var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var _params$autoReplaceSv = params.autoReplaceSvgRoot,\n    autoReplaceSvgRoot = _params$autoReplaceSv === void 0 ? DOCUMENT : _params$autoReplaceSv;\n  if ((Object.keys(namespace.styles).length > 0 || config.autoFetchSvg) && IS_DOM && config.autoReplaceSvg) api.dom.i2svg({\n    node: autoReplaceSvgRoot\n  });\n};\n\nfunction domVariants(val, abstractCreator) {\n  Object.defineProperty(val, 'abstract', {\n    get: abstractCreator\n  });\n  Object.defineProperty(val, 'html', {\n    get: function get() {\n      return val.abstract.map(function (a) {\n        return toHtml(a);\n      });\n    }\n  });\n  Object.defineProperty(val, 'node', {\n    get: function get() {\n      if (!IS_DOM) return undefined;\n      var container = DOCUMENT.createElement('div');\n      container.innerHTML = val.html;\n      return container.children;\n    }\n  });\n  return val;\n}\n\nfunction asIcon (_ref) {\n  var children = _ref.children,\n    main = _ref.main,\n    mask = _ref.mask,\n    attributes = _ref.attributes,\n    styles = _ref.styles,\n    transform = _ref.transform;\n  if (transformIsMeaningful(transform) && main.found && !mask.found) {\n    var width = main.width,\n      height = main.height;\n    var offset = {\n      x: width / height / 2,\n      y: 0.5\n    };\n    attributes['style'] = joinStyles(_objectSpread2(_objectSpread2({}, styles), {}, {\n      'transform-origin': \"\".concat(offset.x + transform.x / 16, \"em \").concat(offset.y + transform.y / 16, \"em\")\n    }));\n  }\n  return [{\n    tag: 'svg',\n    attributes: attributes,\n    children: children\n  }];\n}\n\nfunction asSymbol (_ref) {\n  var prefix = _ref.prefix,\n    iconName = _ref.iconName,\n    children = _ref.children,\n    attributes = _ref.attributes,\n    symbol = _ref.symbol;\n  var id = symbol === true ? \"\".concat(prefix, \"-\").concat(config.cssPrefix, \"-\").concat(iconName) : symbol;\n  return [{\n    tag: 'svg',\n    attributes: {\n      style: 'display: none;'\n    },\n    children: [{\n      tag: 'symbol',\n      attributes: _objectSpread2(_objectSpread2({}, attributes), {}, {\n        id: id\n      }),\n      children: children\n    }]\n  }];\n}\n\n// If any of these attributes are present, don't assume the icon is decorative\nfunction isLabeled(attributes) {\n  var labels = ['aria-label', 'aria-labelledby', 'title', 'role'];\n  return labels.some(function (label) {\n    return label in attributes;\n  });\n}\nfunction makeInlineSvgAbstract(params) {\n  var _params$icons = params.icons,\n    main = _params$icons.main,\n    mask = _params$icons.mask,\n    prefix = params.prefix,\n    iconName = params.iconName,\n    transform = params.transform,\n    symbol = params.symbol,\n    maskId = params.maskId,\n    extra = params.extra,\n    _params$watchable = params.watchable,\n    watchable = _params$watchable === void 0 ? false : _params$watchable;\n  var _ref = mask.found ? mask : main,\n    width = _ref.width,\n    height = _ref.height;\n  var attrClass = [config.replacementClass, iconName ? \"\".concat(config.cssPrefix, \"-\").concat(iconName) : ''].filter(function (c) {\n    return extra.classes.indexOf(c) === -1;\n  }).filter(function (c) {\n    return c !== '' || !!c;\n  }).concat(extra.classes).join(' ');\n  var content = {\n    children: [],\n    attributes: _objectSpread2(_objectSpread2({}, extra.attributes), {}, {\n      'data-prefix': prefix,\n      'data-icon': iconName,\n      'class': attrClass,\n      'role': extra.attributes.role || 'img',\n      'viewBox': \"0 0 \".concat(width, \" \").concat(height)\n    })\n  };\n  if (!isLabeled(extra.attributes) && !extra.attributes['aria-hidden']) {\n    content.attributes['aria-hidden'] = 'true';\n  }\n  if (watchable) {\n    content.attributes[DATA_FA_I2SVG] = '';\n  }\n  var args = _objectSpread2(_objectSpread2({}, content), {}, {\n    prefix: prefix,\n    iconName: iconName,\n    main: main,\n    mask: mask,\n    maskId: maskId,\n    transform: transform,\n    symbol: symbol,\n    styles: _objectSpread2({}, extra.styles)\n  });\n  var _ref2 = mask.found && main.found ? callProvided('generateAbstractMask', args) || {\n      children: [],\n      attributes: {}\n    } : callProvided('generateAbstractIcon', args) || {\n      children: [],\n      attributes: {}\n    },\n    children = _ref2.children,\n    attributes = _ref2.attributes;\n  args.children = children;\n  args.attributes = attributes;\n  if (symbol) {\n    return asSymbol(args);\n  } else {\n    return asIcon(args);\n  }\n}\nfunction makeLayersTextAbstract(params) {\n  var content = params.content,\n    width = params.width,\n    height = params.height,\n    transform = params.transform,\n    extra = params.extra,\n    _params$watchable2 = params.watchable,\n    watchable = _params$watchable2 === void 0 ? false : _params$watchable2;\n  var attributes = _objectSpread2(_objectSpread2({}, extra.attributes), {}, {\n    class: extra.classes.join(' ')\n  });\n  if (watchable) {\n    attributes[DATA_FA_I2SVG] = '';\n  }\n  var styles = _objectSpread2({}, extra.styles);\n  if (transformIsMeaningful(transform)) {\n    styles['transform'] = transformForCss({\n      transform: transform,\n      startCentered: true,\n      width: width,\n      height: height\n    });\n    styles['-webkit-transform'] = styles['transform'];\n  }\n  var styleString = joinStyles(styles);\n  if (styleString.length > 0) {\n    attributes['style'] = styleString;\n  }\n  var val = [];\n  val.push({\n    tag: 'span',\n    attributes: attributes,\n    children: [content]\n  });\n  return val;\n}\nfunction makeLayersCounterAbstract(params) {\n  var content = params.content,\n    extra = params.extra;\n  var attributes = _objectSpread2(_objectSpread2({}, extra.attributes), {}, {\n    class: extra.classes.join(' ')\n  });\n  var styleString = joinStyles(extra.styles);\n  if (styleString.length > 0) {\n    attributes['style'] = styleString;\n  }\n  var val = [];\n  val.push({\n    tag: 'span',\n    attributes: attributes,\n    children: [content]\n  });\n  return val;\n}\n\nvar styles$1 = namespace.styles;\nfunction asFoundIcon(icon) {\n  var width = icon[0];\n  var height = icon[1];\n  var _icon$slice = icon.slice(4),\n    _icon$slice2 = _slicedToArray(_icon$slice, 1),\n    vectorData = _icon$slice2[0];\n  var element = null;\n  if (Array.isArray(vectorData)) {\n    element = {\n      tag: 'g',\n      attributes: {\n        class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.GROUP)\n      },\n      children: [{\n        tag: 'path',\n        attributes: {\n          class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.SECONDARY),\n          fill: 'currentColor',\n          d: vectorData[0]\n        }\n      }, {\n        tag: 'path',\n        attributes: {\n          class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.PRIMARY),\n          fill: 'currentColor',\n          d: vectorData[1]\n        }\n      }]\n    };\n  } else {\n    element = {\n      tag: 'path',\n      attributes: {\n        fill: 'currentColor',\n        d: vectorData\n      }\n    };\n  }\n  return {\n    found: true,\n    width: width,\n    height: height,\n    icon: element\n  };\n}\nvar missingIconResolutionMixin = {\n  found: false,\n  width: 512,\n  height: 512\n};\nfunction maybeNotifyMissing(iconName, prefix) {\n  if (!PRODUCTION && !config.showMissingIcons && iconName) {\n    console.error(\"Icon with name \\\"\".concat(iconName, \"\\\" and prefix \\\"\").concat(prefix, \"\\\" is missing.\"));\n  }\n}\nfunction findIcon(iconName, prefix) {\n  var givenPrefix = prefix;\n  if (prefix === 'fa' && config.styleDefault !== null) {\n    prefix = getDefaultUsablePrefix();\n  }\n  return new Promise(function (resolve, reject) {\n    if (givenPrefix === 'fa') {\n      var shim = byOldName(iconName) || {};\n      iconName = shim.iconName || iconName;\n      prefix = shim.prefix || prefix;\n    }\n    if (iconName && prefix && styles$1[prefix] && styles$1[prefix][iconName]) {\n      var icon = styles$1[prefix][iconName];\n      return resolve(asFoundIcon(icon));\n    }\n    maybeNotifyMissing(iconName, prefix);\n    resolve(_objectSpread2(_objectSpread2({}, missingIconResolutionMixin), {}, {\n      icon: config.showMissingIcons && iconName ? callProvided('missingIconAbstract') || {} : {}\n    }));\n  });\n}\n\nvar noop$1 = function noop() {};\nvar p$2 = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : {\n  mark: noop$1,\n  measure: noop$1\n};\nvar preamble = \"FA \\\"7.3.1\\\"\";\nvar begin = function begin(name) {\n  p$2.mark(\"\".concat(preamble, \" \").concat(name, \" begins\"));\n  return function () {\n    return end(name);\n  };\n};\nvar end = function end(name) {\n  p$2.mark(\"\".concat(preamble, \" \").concat(name, \" ends\"));\n  p$2.measure(\"\".concat(preamble, \" \").concat(name), \"\".concat(preamble, \" \").concat(name, \" begins\"), \"\".concat(preamble, \" \").concat(name, \" ends\"));\n};\nvar perf = {\n  begin: begin,\n  end: end\n};\n\nvar noop$2 = function noop() {};\nfunction isWatched(node) {\n  var i2svg = node.getAttribute ? node.getAttribute(DATA_FA_I2SVG) : null;\n  return typeof i2svg === 'string';\n}\nfunction hasPrefixAndIcon(node) {\n  var prefix = node.getAttribute ? node.getAttribute(DATA_PREFIX) : null;\n  var icon = node.getAttribute ? node.getAttribute(DATA_ICON) : null;\n  return prefix && icon;\n}\nfunction hasBeenReplaced(node) {\n  return node && node.classList && node.classList.contains && node.classList.contains(config.replacementClass);\n}\nfunction getMutator() {\n  if (config.autoReplaceSvg === true) {\n    return mutators.replace;\n  }\n  var mutator = mutators[config.autoReplaceSvg];\n  return mutator || mutators.replace;\n}\nfunction createElementNS(tag) {\n  return DOCUMENT.createElementNS('http://www.w3.org/2000/svg', tag);\n}\nfunction createElement(tag) {\n  return DOCUMENT.createElement(tag);\n}\nfunction convertSVG(abstractObj) {\n  var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _params$ceFn = params.ceFn,\n    ceFn = _params$ceFn === void 0 ? abstractObj.tag === 'svg' ? createElementNS : createElement : _params$ceFn;\n  if (typeof abstractObj === 'string') {\n    return DOCUMENT.createTextNode(abstractObj);\n  }\n  var tag = ceFn(abstractObj.tag);\n  Object.keys(abstractObj.attributes || []).forEach(function (key) {\n    tag.setAttribute(key, abstractObj.attributes[key]);\n  });\n  var children = abstractObj.children || [];\n  children.forEach(function (child) {\n    tag.appendChild(convertSVG(child, {\n      ceFn: ceFn\n    }));\n  });\n  return tag;\n}\nfunction nodeAsComment(node) {\n  var comment = \" \".concat(node.outerHTML, \" \");\n  /* BEGIN.ATTRIBUTION */\n  comment = \"\".concat(comment, \"Font Awesome fontawesome.com \");\n  /* END.ATTRIBUTION */\n  return comment;\n}\nvar mutators = {\n  replace: function replace(mutation) {\n    var node = mutation[0];\n    if (node.parentNode) {\n      mutation[1].forEach(function (abstract) {\n        node.parentNode.insertBefore(convertSVG(abstract), node);\n      });\n      if (node.getAttribute(DATA_FA_I2SVG) === null && config.keepOriginalSource) {\n        var comment = DOCUMENT.createComment(nodeAsComment(node));\n        node.parentNode.replaceChild(comment, node);\n      } else {\n        node.remove();\n      }\n    }\n  },\n  nest: function nest(mutation) {\n    var node = mutation[0];\n    var abstract = mutation[1];\n\n    // If we already have a replaced node we do not want to continue nesting within it.\n    // Short-circuit to the standard replacement\n    if (~classArray(node).indexOf(config.replacementClass)) {\n      return mutators.replace(mutation);\n    }\n    var forSvg = new RegExp(\"\".concat(config.cssPrefix, \"-.*\"));\n    delete abstract[0].attributes.id;\n    if (abstract[0].attributes.class) {\n      var splitClasses = abstract[0].attributes.class.split(' ').reduce(function (acc, cls) {\n        if (cls === config.replacementClass || cls.match(forSvg)) {\n          acc.toSvg.push(cls);\n        } else {\n          acc.toNode.push(cls);\n        }\n        return acc;\n      }, {\n        toNode: [],\n        toSvg: []\n      });\n      abstract[0].attributes.class = splitClasses.toSvg.join(' ');\n      if (splitClasses.toNode.length === 0) {\n        node.removeAttribute('class');\n      } else {\n        node.setAttribute('class', splitClasses.toNode.join(' '));\n      }\n    }\n    var newInnerHTML = abstract.map(function (a) {\n      return toHtml(a);\n    }).join('\\n');\n    node.setAttribute(DATA_FA_I2SVG, '');\n    node.innerHTML = newInnerHTML;\n  }\n};\nfunction performOperationSync(op) {\n  op();\n}\nfunction perform(mutations, callback) {\n  var callbackFunction = typeof callback === 'function' ? callback : noop$2;\n  if (mutations.length === 0) {\n    callbackFunction();\n  } else {\n    var frame = performOperationSync;\n    if (config.mutateApproach === MUTATION_APPROACH_ASYNC) {\n      frame = WINDOW.requestAnimationFrame || performOperationSync;\n    }\n    frame(function () {\n      var mutator = getMutator();\n      var mark = perf.begin('mutate');\n      mutations.map(mutator);\n      mark();\n      callbackFunction();\n    });\n  }\n}\nvar disabled = false;\nfunction disableObservation() {\n  disabled = true;\n}\nfunction enableObservation() {\n  disabled = false;\n}\nvar mo = null;\nfunction observe(options) {\n  if (!MUTATION_OBSERVER) {\n    return;\n  }\n  if (!config.observeMutations) {\n    return;\n  }\n  var _options$treeCallback = options.treeCallback,\n    treeCallback = _options$treeCallback === void 0 ? noop$2 : _options$treeCallback,\n    _options$nodeCallback = options.nodeCallback,\n    nodeCallback = _options$nodeCallback === void 0 ? noop$2 : _options$nodeCallback,\n    _options$pseudoElemen = options.pseudoElementsCallback,\n    pseudoElementsCallback = _options$pseudoElemen === void 0 ? noop$2 : _options$pseudoElemen,\n    _options$observeMutat = options.observeMutationsRoot,\n    observeMutationsRoot = _options$observeMutat === void 0 ? DOCUMENT : _options$observeMutat;\n  mo = new MUTATION_OBSERVER(function (objects) {\n    if (disabled) return;\n    var defaultPrefix = getDefaultUsablePrefix();\n    toArray(objects).forEach(function (mutationRecord) {\n      if (mutationRecord.type === 'childList' && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) {\n        if (config.searchPseudoElements) {\n          pseudoElementsCallback(mutationRecord.target);\n        }\n        treeCallback(mutationRecord.target);\n      }\n      if (mutationRecord.type === 'attributes' && mutationRecord.target.parentNode && config.searchPseudoElements) {\n        pseudoElementsCallback([mutationRecord.target], true);\n      }\n      if (mutationRecord.type === 'attributes' && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) {\n        if (mutationRecord.attributeName === 'class' && hasPrefixAndIcon(mutationRecord.target)) {\n          var _getCanonicalIcon = getCanonicalIcon(classArray(mutationRecord.target)),\n            prefix = _getCanonicalIcon.prefix,\n            iconName = _getCanonicalIcon.iconName;\n          mutationRecord.target.setAttribute(DATA_PREFIX, prefix || defaultPrefix);\n          if (iconName) mutationRecord.target.setAttribute(DATA_ICON, iconName);\n        } else if (hasBeenReplaced(mutationRecord.target)) {\n          nodeCallback(mutationRecord.target);\n        }\n      }\n    });\n  });\n  if (!IS_DOM) return;\n  mo.observe(observeMutationsRoot, {\n    childList: true,\n    attributes: true,\n    characterData: true,\n    subtree: true\n  });\n}\nfunction disconnect() {\n  if (!mo) return;\n  mo.disconnect();\n}\n\nfunction styleParser (node) {\n  var style = node.getAttribute('style');\n  var val = [];\n  if (style) {\n    val = style.split(';').reduce(function (acc, style) {\n      var styles = style.split(':');\n      var prop = styles[0];\n      var value = styles.slice(1);\n      if (prop && value.length > 0) {\n        acc[prop] = value.join(':').trim();\n      }\n      return acc;\n    }, {});\n  }\n  return val;\n}\n\nfunction classParser (node) {\n  var existingPrefix = node.getAttribute('data-prefix');\n  var existingIconName = node.getAttribute('data-icon');\n  var innerText = node.innerText !== undefined ? node.innerText.trim() : '';\n  var val = getCanonicalIcon(classArray(node));\n  if (!val.prefix) {\n    val.prefix = getDefaultUsablePrefix();\n  }\n  if (existingPrefix && existingIconName) {\n    val.prefix = existingPrefix;\n    val.iconName = existingIconName;\n  }\n  if (val.iconName && val.prefix) {\n    return val;\n  }\n  if (val.prefix && innerText.length > 0) {\n    val.iconName = byLigature(val.prefix, node.innerText) || byUnicode(val.prefix, toHex(node.innerText));\n  }\n  if (!val.iconName && config.autoFetchSvg && node.firstChild && node.firstChild.nodeType === Node.TEXT_NODE) {\n    val.iconName = node.firstChild.data;\n  }\n  return val;\n}\n\nfunction attributesParser (node) {\n  var extraAttributes = toArray(node.attributes).reduce(function (acc, attr) {\n    if (acc.name !== 'class' && acc.name !== 'style') {\n      acc[attr.name] = attr.value;\n    }\n    return acc;\n  }, {});\n  return extraAttributes;\n}\n\nfunction blankMeta() {\n  return {\n    iconName: null,\n    prefix: null,\n    transform: meaninglessTransform,\n    symbol: false,\n    mask: {\n      iconName: null,\n      prefix: null,\n      rest: []\n    },\n    maskId: null,\n    extra: {\n      classes: [],\n      styles: {},\n      attributes: {}\n    }\n  };\n}\nfunction parseMeta(node) {\n  var parser = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n    styleParser: true\n  };\n  var _classParser = classParser(node),\n    iconName = _classParser.iconName,\n    prefix = _classParser.prefix,\n    extraClasses = _classParser.rest;\n  var extraAttributes = attributesParser(node);\n  var pluginMeta = chainHooks('parseNodeAttributes', {}, node);\n  var extraStyles = parser.styleParser ? styleParser(node) : [];\n  return _objectSpread2({\n    iconName: iconName,\n    prefix: prefix,\n    transform: meaninglessTransform,\n    mask: {\n      iconName: null,\n      prefix: null,\n      rest: []\n    },\n    maskId: null,\n    symbol: false,\n    extra: {\n      classes: extraClasses,\n      styles: extraStyles,\n      attributes: extraAttributes\n    }\n  }, pluginMeta);\n}\n\nvar styles$2 = namespace.styles;\nfunction generateMutation(node) {\n  var nodeMeta = config.autoReplaceSvg === 'nest' ? parseMeta(node, {\n    styleParser: false\n  }) : parseMeta(node);\n  if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) {\n    return callProvided('generateLayersText', node, nodeMeta);\n  } else {\n    return callProvided('generateSvgReplacementMutation', node, nodeMeta);\n  }\n}\nfunction getKnownPrefixes() {\n  return [].concat(_toConsumableArray(at), _toConsumableArray(ha));\n}\nfunction onTree(root) {\n  var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  if (!IS_DOM) return Promise.resolve();\n  var htmlClassList = DOCUMENT.documentElement.classList;\n  var hclAdd = function hclAdd(suffix) {\n    return htmlClassList.add(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n  };\n  var hclRemove = function hclRemove(suffix) {\n    return htmlClassList.remove(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n  };\n  var prefixes = config.autoFetchSvg ? getKnownPrefixes() : dl.concat(Object.keys(styles$2));\n  if (!prefixes.includes('fa')) {\n    prefixes.push('fa');\n  }\n  var prefixesDomQuery = [\".\".concat(LAYERS_TEXT_CLASSNAME, \":not([\").concat(DATA_FA_I2SVG, \"])\")].concat(prefixes.map(function (p$$1) {\n    return \".\".concat(p$$1, \":not([\").concat(DATA_FA_I2SVG, \"])\");\n  })).join(', ');\n  if (prefixesDomQuery.length === 0) {\n    return Promise.resolve();\n  }\n  var candidates = [];\n  try {\n    candidates = toArray(root.querySelectorAll(prefixesDomQuery));\n  } catch (e$$1) {\n    // noop\n  }\n  if (candidates.length > 0) {\n    hclAdd('pending');\n    hclRemove('complete');\n  } else {\n    return Promise.resolve();\n  }\n  var mark = perf.begin('onTree');\n  var mutations = candidates.reduce(function (acc, node) {\n    try {\n      var mutation = generateMutation(node);\n      if (mutation) {\n        acc.push(mutation);\n      }\n    } catch (e$$1) {\n      if (!PRODUCTION) {\n        if (e$$1.name === 'MissingIcon') {\n          console.error(e$$1);\n        }\n      }\n    }\n    return acc;\n  }, []);\n  return new Promise(function (resolve, reject) {\n    Promise.all(mutations).then(function (resolvedMutations) {\n      perform(resolvedMutations, function () {\n        hclAdd('active');\n        hclAdd('complete');\n        hclRemove('pending');\n        if (typeof callback === 'function') callback();\n        mark();\n        resolve();\n      });\n    }).catch(function (e$$1) {\n      mark();\n      reject(e$$1);\n    });\n  });\n}\nfunction onNode(node) {\n  var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  generateMutation(node).then(function (mutation) {\n    if (mutation) {\n      perform([mutation], callback);\n    }\n  });\n}\nfunction resolveIcons(next) {\n  return function (maybeIconDefinition) {\n    var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {});\n    var mask = params.mask;\n    if (mask) {\n      mask = (mask || {}).icon ? mask : findIconDefinition(mask || {});\n    }\n    return next(iconDefinition, _objectSpread2(_objectSpread2({}, params), {}, {\n      mask: mask\n    }));\n  };\n}\nvar render = function render(iconDefinition) {\n  var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _params$transform = params.transform,\n    transform = _params$transform === void 0 ? meaninglessTransform : _params$transform,\n    _params$symbol = params.symbol,\n    symbol = _params$symbol === void 0 ? false : _params$symbol,\n    _params$mask = params.mask,\n    mask = _params$mask === void 0 ? null : _params$mask,\n    _params$maskId = params.maskId,\n    maskId = _params$maskId === void 0 ? null : _params$maskId,\n    _params$classes = params.classes,\n    classes = _params$classes === void 0 ? [] : _params$classes,\n    _params$attributes = params.attributes,\n    attributes = _params$attributes === void 0 ? {} : _params$attributes,\n    _params$styles = params.styles,\n    styles = _params$styles === void 0 ? {} : _params$styles;\n  if (!iconDefinition) return;\n  var prefix = iconDefinition.prefix,\n    iconName = iconDefinition.iconName,\n    icon = iconDefinition.icon;\n  return domVariants(_objectSpread2({\n    type: 'icon'\n  }, iconDefinition), function () {\n    callHooks('beforeDOMElementCreation', {\n      iconDefinition: iconDefinition,\n      params: params\n    });\n    return makeInlineSvgAbstract({\n      icons: {\n        main: asFoundIcon(icon),\n        mask: mask ? asFoundIcon(mask.icon) : {\n          found: false,\n          width: null,\n          height: null,\n          icon: {}\n        }\n      },\n      prefix: prefix,\n      iconName: iconName,\n      transform: _objectSpread2(_objectSpread2({}, meaninglessTransform), transform),\n      symbol: symbol,\n      maskId: maskId,\n      extra: {\n        attributes: attributes,\n        styles: styles,\n        classes: classes\n      }\n    });\n  });\n};\nvar ReplaceElements = {\n  mixout: function mixout() {\n    return {\n      icon: resolveIcons(render)\n    };\n  },\n  hooks: function hooks() {\n    return {\n      mutationObserverCallbacks: function mutationObserverCallbacks(accumulator) {\n        accumulator.treeCallback = onTree;\n        accumulator.nodeCallback = onNode;\n        return accumulator;\n      }\n    };\n  },\n  provides: function provides(providers$$1) {\n    providers$$1.i2svg = function (params) {\n      var _params$node = params.node,\n        node = _params$node === void 0 ? DOCUMENT : _params$node,\n        _params$callback = params.callback,\n        callback = _params$callback === void 0 ? function () {} : _params$callback;\n      return onTree(node, callback);\n    };\n    providers$$1.generateSvgReplacementMutation = function (node, nodeMeta) {\n      var iconName = nodeMeta.iconName,\n        prefix = nodeMeta.prefix,\n        transform = nodeMeta.transform,\n        symbol = nodeMeta.symbol,\n        mask = nodeMeta.mask,\n        maskId = nodeMeta.maskId,\n        extra = nodeMeta.extra;\n      return new Promise(function (resolve, reject) {\n        Promise.all([findIcon(iconName, prefix), mask.iconName ? findIcon(mask.iconName, mask.prefix) : Promise.resolve({\n          found: false,\n          width: 512,\n          height: 512,\n          icon: {}\n        })]).then(function (_ref) {\n          var _ref2 = _slicedToArray(_ref, 2),\n            main = _ref2[0],\n            mask = _ref2[1];\n          resolve([node, makeInlineSvgAbstract({\n            icons: {\n              main: main,\n              mask: mask\n            },\n            prefix: prefix,\n            iconName: iconName,\n            transform: transform,\n            symbol: symbol,\n            maskId: maskId,\n            extra: extra,\n            watchable: true\n          })]);\n        }).catch(reject);\n      });\n    };\n    providers$$1.generateAbstractIcon = function (_ref3) {\n      var children = _ref3.children,\n        attributes = _ref3.attributes,\n        main = _ref3.main,\n        transform = _ref3.transform,\n        styles = _ref3.styles;\n      var styleString = joinStyles(styles);\n      if (styleString.length > 0) {\n        attributes['style'] = styleString;\n      }\n      var nextChild;\n      if (transformIsMeaningful(transform)) {\n        nextChild = callProvided('generateAbstractTransformGrouping', {\n          main: main,\n          transform: transform,\n          containerWidth: main.width,\n          iconWidth: main.width\n        });\n      }\n      children.push(nextChild || main.icon);\n      return {\n        children: children,\n        attributes: attributes\n      };\n    };\n  }\n};\n\nvar Layers = {\n  mixout: function mixout() {\n    return {\n      layer: function layer(assembler) {\n        var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        var _params$classes = params.classes,\n          classes = _params$classes === void 0 ? [] : _params$classes;\n        return domVariants({\n          type: 'layer'\n        }, function () {\n          callHooks('beforeDOMElementCreation', {\n            assembler: assembler,\n            params: params\n          });\n          var children = [];\n          assembler(function (args) {\n            Array.isArray(args) ? args.map(function (a) {\n              children = children.concat(a.abstract);\n            }) : children = children.concat(args.abstract);\n          });\n          return [{\n            tag: 'span',\n            attributes: {\n              class: [\"\".concat(config.cssPrefix, \"-layers\")].concat(_toConsumableArray(classes)).join(' ')\n            },\n            children: children\n          }];\n        });\n      }\n    };\n  }\n};\n\nvar LayersCounter = {\n  mixout: function mixout() {\n    return {\n      counter: function counter(content) {\n        var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        var _params$title = params.title,\n          title = _params$title === void 0 ? null : _params$title,\n          _params$classes = params.classes,\n          classes = _params$classes === void 0 ? [] : _params$classes,\n          _params$attributes = params.attributes,\n          attributes = _params$attributes === void 0 ? {} : _params$attributes,\n          _params$styles = params.styles,\n          styles = _params$styles === void 0 ? {} : _params$styles;\n        return domVariants({\n          type: 'counter',\n          content: content\n        }, function () {\n          callHooks('beforeDOMElementCreation', {\n            content: content,\n            params: params\n          });\n          return makeLayersCounterAbstract({\n            content: content.toString(),\n            title: title,\n            extra: {\n              attributes: attributes,\n              styles: styles,\n              classes: [\"\".concat(config.cssPrefix, \"-layers-counter\")].concat(_toConsumableArray(classes))\n            }\n          });\n        });\n      }\n    };\n  }\n};\n\nvar LayersText = {\n  mixout: function mixout() {\n    return {\n      text: function text(content) {\n        var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        var _params$transform = params.transform,\n          transform = _params$transform === void 0 ? meaninglessTransform : _params$transform,\n          _params$classes = params.classes,\n          classes = _params$classes === void 0 ? [] : _params$classes,\n          _params$attributes = params.attributes,\n          attributes = _params$attributes === void 0 ? {} : _params$attributes,\n          _params$styles = params.styles,\n          styles = _params$styles === void 0 ? {} : _params$styles;\n        return domVariants({\n          type: 'text',\n          content: content\n        }, function () {\n          callHooks('beforeDOMElementCreation', {\n            content: content,\n            params: params\n          });\n          return makeLayersTextAbstract({\n            content: content,\n            transform: _objectSpread2(_objectSpread2({}, meaninglessTransform), transform),\n            extra: {\n              attributes: attributes,\n              styles: styles,\n              classes: [\"\".concat(config.cssPrefix, \"-layers-text\")].concat(_toConsumableArray(classes))\n            }\n          });\n        });\n      }\n    };\n  },\n  provides: function provides(providers$$1) {\n    providers$$1.generateLayersText = function (node, nodeMeta) {\n      var transform = nodeMeta.transform,\n        extra = nodeMeta.extra;\n      var width = null;\n      var height = null;\n      if (IS_IE) {\n        var computedFontSize = parseInt(getComputedStyle(node).fontSize, 10);\n        var boundingClientRect = node.getBoundingClientRect();\n        width = boundingClientRect.width / computedFontSize;\n        height = boundingClientRect.height / computedFontSize;\n      }\n      return Promise.resolve([node, makeLayersTextAbstract({\n        content: node.innerHTML,\n        width: width,\n        height: height,\n        transform: transform,\n        extra: extra,\n        watchable: true\n      })]);\n    };\n  }\n};\n\nvar CLEAN_CONTENT_PATTERN = new RegExp(\"\\\"\", 'ug');\nvar SECONDARY_UNICODE_RANGE = [1105920, 1112319];\nvar _FONT_FAMILY_WEIGHT_TO_PREFIX = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {\n  FontAwesome: {\n    normal: 'fas',\n    400: 'fas'\n  }\n}), zl), wa), ct);\nvar FONT_FAMILY_WEIGHT_TO_PREFIX = Object.keys(_FONT_FAMILY_WEIGHT_TO_PREFIX).reduce(function (acc, key) {\n  acc[key.toLowerCase()] = _FONT_FAMILY_WEIGHT_TO_PREFIX[key];\n  return acc;\n}, {});\nvar FONT_FAMILY_WEIGHT_FALLBACK = Object.keys(FONT_FAMILY_WEIGHT_TO_PREFIX).reduce(function (acc, fontFamily) {\n  var weights = FONT_FAMILY_WEIGHT_TO_PREFIX[fontFamily];\n  acc[fontFamily] = weights[900] || _toConsumableArray(Object.entries(weights))[0][1];\n  return acc;\n}, {});\n\n// Return hex value of *first* character in `content`\nfunction hexValueFromContent(content) {\n  var cleaned = content.replace(CLEAN_CONTENT_PATTERN, '');\n  return toHex(_toConsumableArray(cleaned)[0] || '');\n}\n\n// Check if it's a secondary Duotone layer, by checking if:\n// - Unicode value in `content` is repeated\n// - Unicode value in `content` is above 0x10000\n// - The \"ss01\" font feature is enabled on the `content`\nfunction isSecondaryLayer(styles) {\n  var hasStylisticSet = styles.getPropertyValue('font-feature-settings').includes('ss01');\n  var content = styles.getPropertyValue('content');\n  var cleaned = content.replace(CLEAN_CONTENT_PATTERN, '');\n  var codePoint = cleaned.codePointAt(0);\n  var isPrependTen = codePoint >= SECONDARY_UNICODE_RANGE[0] && codePoint <= SECONDARY_UNICODE_RANGE[1];\n  var isDoubled = cleaned.length === 2 ? cleaned[0] === cleaned[1] : false;\n  return isPrependTen || isDoubled || hasStylisticSet;\n}\nfunction getPrefix(fontFamily, fontWeight) {\n  var fontFamilySanitized = fontFamily.replace(/^['\"]|['\"]$/g, '').toLowerCase();\n  var fontWeightInteger = parseInt(fontWeight);\n  var fontWeightSanitized = isNaN(fontWeightInteger) ? 'normal' : fontWeightInteger;\n  return (FONT_FAMILY_WEIGHT_TO_PREFIX[fontFamilySanitized] || {})[fontWeightSanitized] || FONT_FAMILY_WEIGHT_FALLBACK[fontFamilySanitized];\n}\nfunction replaceForPosition(node, position) {\n  var pendingAttribute = \"\".concat(DATA_FA_PSEUDO_ELEMENT_PENDING).concat(position.replace(':', '-'));\n  return new Promise(function (resolve, reject) {\n    if (node.getAttribute(pendingAttribute) !== null) {\n      // This node is already being processed\n      return resolve();\n    }\n    var children = toArray(node.children);\n    var alreadyProcessedPseudoElement = children.filter(function (c$$1) {\n      return c$$1.getAttribute(DATA_FA_PSEUDO_ELEMENT) === position;\n    })[0];\n    var styles = WINDOW.getComputedStyle(node, position);\n    var fontFamily = styles.getPropertyValue('font-family');\n    var fontFamilyMatch = fontFamily.match(FONT_FAMILY_PATTERN);\n    var fontWeight = styles.getPropertyValue('font-weight');\n    var content = styles.getPropertyValue('content');\n    if (alreadyProcessedPseudoElement && !fontFamilyMatch) {\n      // If we've already processed it but the current computed style does not result in a font-family,\n      // that probably means that a class name that was previously present to make the icon has been\n      // removed. So we now should delete the icon.\n      node.removeChild(alreadyProcessedPseudoElement);\n      return resolve();\n    } else if (fontFamilyMatch && content !== 'none' && content !== '') {\n      var _content = styles.getPropertyValue('content');\n      var prefix = getPrefix(fontFamily, fontWeight);\n      var hexValue = hexValueFromContent(_content);\n      var isV4 = fontFamilyMatch[0].startsWith('FontAwesome');\n      var isSecondary = isSecondaryLayer(styles);\n      var iconName = byUnicode(prefix, hexValue);\n      var iconIdentifier = iconName;\n      if (isV4) {\n        var iconName4 = byOldUnicode(hexValue);\n        if (iconName4.iconName && iconName4.prefix) {\n          iconName = iconName4.iconName;\n          prefix = iconName4.prefix;\n        }\n      }\n\n      // Only convert the pseudo element in this ::before/::after position into an icon if we haven't\n      // already done so with the same prefix and iconName\n      if (iconName && !isSecondary && (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconIdentifier)) {\n        node.setAttribute(pendingAttribute, iconIdentifier);\n        if (alreadyProcessedPseudoElement) {\n          // Delete the old one, since we're replacing it with a new one\n          node.removeChild(alreadyProcessedPseudoElement);\n        }\n        var meta = blankMeta();\n        var extra = meta.extra;\n        extra.attributes[DATA_FA_PSEUDO_ELEMENT] = position;\n        findIcon(iconName, prefix).then(function (main) {\n          var abstract = makeInlineSvgAbstract(_objectSpread2(_objectSpread2({}, meta), {}, {\n            icons: {\n              main: main,\n              mask: emptyCanonicalIcon()\n            },\n            prefix: prefix,\n            iconName: iconIdentifier,\n            extra: extra,\n            watchable: true\n          }));\n          var element = DOCUMENT.createElementNS('http://www.w3.org/2000/svg', 'svg');\n          if (position === '::before') {\n            node.insertBefore(element, node.firstChild);\n          } else {\n            node.appendChild(element);\n          }\n          element.outerHTML = abstract.map(function (a$$1) {\n            return toHtml(a$$1);\n          }).join('\\n');\n          node.removeAttribute(pendingAttribute);\n          resolve();\n        }).catch(reject);\n      } else {\n        resolve();\n      }\n    } else {\n      resolve();\n    }\n  });\n}\nfunction replace(node) {\n  return Promise.all([replaceForPosition(node, '::before'), replaceForPosition(node, '::after')]);\n}\nfunction processable(node) {\n  return node.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(node.tagName.toUpperCase()) && !node.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!node.parentNode || node.parentNode.tagName !== 'svg');\n}\nvar hasPseudoElement = function hasPseudoElement(selector) {\n  return !!selector && PSEUDO_ELEMENTS.some(function (pseudoSelector) {\n    return selector.includes(pseudoSelector);\n  });\n};\n\n// Return selectors from all available stylesheets that have\n// pseudo-elements defined.\nvar parseCSSRuleForPseudos = function parseCSSRuleForPseudos(selectorText) {\n  if (!selectorText) return [];\n  var selectorSet = new Set();\n  var selectors = selectorText.split(/,(?![^()]*\\))/).map(function (s$$1) {\n    return s$$1.trim();\n  });\n  selectors = selectors.flatMap(function (selector) {\n    return selector.includes('(') ? selector : selector.split(',').map(function (s$$1) {\n      return s$$1.trim();\n    });\n  });\n  var _iterator = _createForOfIteratorHelper(selectors),\n    _step;\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var selector = _step.value;\n      if (hasPseudoElement(selector)) {\n        // Remove pseudo-elements from the selector\n        var selectorWithoutPseudo = PSEUDO_ELEMENTS.reduce(function (acc, pseudoSelector) {\n          return acc.replace(pseudoSelector, '');\n        }, selector);\n        if (selectorWithoutPseudo !== '' && selectorWithoutPseudo !== '*') {\n          selectorSet.add(selectorWithoutPseudo);\n        }\n      }\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n  return selectorSet;\n};\nfunction searchPseudoElements(root) {\n  var useAsNodeList = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n  if (!IS_DOM) return;\n  var nodeList;\n  if (useAsNodeList) {\n    nodeList = root;\n  } else if (config.searchPseudoElementsFullScan) {\n    nodeList = root.querySelectorAll('*');\n  } else {\n    // Get elements that have pseudo elements defined in the CSS\n    var selectorSet = new Set();\n    var _iterator2 = _createForOfIteratorHelper(document.styleSheets),\n      _step2;\n    try {\n      for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n        var stylesheet = _step2.value;\n        try {\n          var _iterator3 = _createForOfIteratorHelper(stylesheet.cssRules),\n            _step3;\n          try {\n            for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n              var rule = _step3.value;\n              var parsedSelectors = parseCSSRuleForPseudos(rule.selectorText);\n              var _iterator4 = _createForOfIteratorHelper(parsedSelectors),\n                _step4;\n              try {\n                for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n                  var selector = _step4.value;\n                  selectorSet.add(selector);\n                }\n              } catch (err) {\n                _iterator4.e(err);\n              } finally {\n                _iterator4.f();\n              }\n            }\n          } catch (err) {\n            _iterator3.e(err);\n          } finally {\n            _iterator3.f();\n          }\n        } catch (e$$1) {\n          if (config.searchPseudoElementsWarnings) {\n            console.warn(\"Font Awesome: cannot parse stylesheet: \".concat(stylesheet.href, \" (\").concat(e$$1.message, \")\\nIf it declares any Font Awesome CSS pseudo-elements, they will not be rendered as SVG icons. Add crossorigin=\\\"anonymous\\\" to the <link>, enable searchPseudoElementsFullScan for slower but more thorough DOM parsing, or suppress this warning by setting searchPseudoElementsWarnings to false.\"));\n          }\n        }\n      }\n    } catch (err) {\n      _iterator2.e(err);\n    } finally {\n      _iterator2.f();\n    }\n    if (!selectorSet.size) return;\n    var cleanSelectors = Array.from(selectorSet).join(', ');\n    try {\n      nodeList = root.querySelectorAll(cleanSelectors);\n    } catch (_unused) {} // eslint-disable-line no-empty\n  }\n  return new Promise(function (resolve, reject) {\n    var operations = toArray(nodeList).filter(processable).map(replace);\n    var end = perf.begin('searchPseudoElements');\n    disableObservation();\n    Promise.all(operations).then(function () {\n      end();\n      enableObservation();\n      resolve();\n    }).catch(function () {\n      end();\n      enableObservation();\n      reject();\n    });\n  });\n}\nvar PseudoElements = {\n  hooks: function hooks() {\n    return {\n      mutationObserverCallbacks: function mutationObserverCallbacks(accumulator) {\n        accumulator.pseudoElementsCallback = searchPseudoElements;\n        return accumulator;\n      }\n    };\n  },\n  provides: function provides(providers) {\n    providers.pseudoElements2svg = function (params) {\n      var _params$node = params.node,\n        node = _params$node === void 0 ? DOCUMENT : _params$node;\n      if (config.searchPseudoElements) {\n        searchPseudoElements(node);\n      }\n    };\n  }\n};\n\nvar _unwatched = false;\nvar MutationObserver$1 = {\n  mixout: function mixout() {\n    return {\n      dom: {\n        unwatch: function unwatch() {\n          disableObservation();\n          _unwatched = true;\n        }\n      }\n    };\n  },\n  hooks: function hooks() {\n    return {\n      bootstrap: function bootstrap() {\n        observe(chainHooks('mutationObserverCallbacks', {}));\n      },\n      noAuto: function noAuto() {\n        disconnect();\n      },\n      watch: function watch(params) {\n        var observeMutationsRoot = params.observeMutationsRoot;\n        if (_unwatched) {\n          enableObservation();\n        } else {\n          observe(chainHooks('mutationObserverCallbacks', {\n            observeMutationsRoot: observeMutationsRoot\n          }));\n        }\n      }\n    };\n  }\n};\n\nvar parseTransformString = function parseTransformString(transformString) {\n  var transform = {\n    size: 16,\n    x: 0,\n    y: 0,\n    flipX: false,\n    flipY: false,\n    rotate: 0\n  };\n  return transformString.toLowerCase().split(' ').reduce(function (acc, n) {\n    var parts = n.toLowerCase().split('-');\n    var first = parts[0];\n    var rest = parts.slice(1).join('-');\n    if (first && rest === 'h') {\n      acc.flipX = true;\n      return acc;\n    }\n    if (first && rest === 'v') {\n      acc.flipY = true;\n      return acc;\n    }\n    rest = parseFloat(rest);\n    if (isNaN(rest)) {\n      return acc;\n    }\n    switch (first) {\n      case 'grow':\n        acc.size = acc.size + rest;\n        break;\n      case 'shrink':\n        acc.size = acc.size - rest;\n        break;\n      case 'left':\n        acc.x = acc.x - rest;\n        break;\n      case 'right':\n        acc.x = acc.x + rest;\n        break;\n      case 'up':\n        acc.y = acc.y - rest;\n        break;\n      case 'down':\n        acc.y = acc.y + rest;\n        break;\n      case 'rotate':\n        acc.rotate = acc.rotate + rest;\n        break;\n    }\n    return acc;\n  }, transform);\n};\nvar PowerTransforms = {\n  mixout: function mixout() {\n    return {\n      parse: {\n        transform: function transform(transformString) {\n          return parseTransformString(transformString);\n        }\n      }\n    };\n  },\n  hooks: function hooks() {\n    return {\n      parseNodeAttributes: function parseNodeAttributes(accumulator, node) {\n        var transformString = node.getAttribute('data-fa-transform');\n        if (transformString) {\n          accumulator.transform = parseTransformString(transformString);\n        }\n        return accumulator;\n      }\n    };\n  },\n  provides: function provides(providers) {\n    providers.generateAbstractTransformGrouping = function (_ref) {\n      var main = _ref.main,\n        transform = _ref.transform,\n        containerWidth = _ref.containerWidth,\n        iconWidth = _ref.iconWidth;\n      var outer = {\n        transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n      };\n      var innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n      var innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n      var innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n      var inner = {\n        transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n      };\n      var path = {\n        transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n      };\n      var operations = {\n        outer: outer,\n        inner: inner,\n        path: path\n      };\n      return {\n        tag: 'g',\n        attributes: _objectSpread2({}, operations.outer),\n        children: [{\n          tag: 'g',\n          attributes: _objectSpread2({}, operations.inner),\n          children: [{\n            tag: main.icon.tag,\n            children: main.icon.children,\n            attributes: _objectSpread2(_objectSpread2({}, main.icon.attributes), operations.path)\n          }]\n        }]\n      };\n    };\n  }\n};\n\nvar ALL_SPACE = {\n  x: 0,\n  y: 0,\n  width: '100%',\n  height: '100%'\n};\nfunction fillBlack(abstract) {\n  var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n  if (abstract.attributes && (abstract.attributes.fill || force)) {\n    abstract.attributes.fill = 'black';\n  }\n  return abstract;\n}\nfunction deGroup(abstract) {\n  if (abstract.tag === 'g') {\n    return abstract.children;\n  } else {\n    return [abstract];\n  }\n}\nvar Masks = {\n  hooks: function hooks() {\n    return {\n      parseNodeAttributes: function parseNodeAttributes(accumulator, node) {\n        var maskData = node.getAttribute('data-fa-mask');\n        var mask = !maskData ? emptyCanonicalIcon() : getCanonicalIcon(maskData.split(' ').map(function (i) {\n          return i.trim();\n        }));\n        if (!mask.prefix) {\n          mask.prefix = getDefaultUsablePrefix();\n        }\n        accumulator.mask = mask;\n        accumulator.maskId = node.getAttribute('data-fa-mask-id');\n        return accumulator;\n      }\n    };\n  },\n  provides: function provides(providers) {\n    providers.generateAbstractMask = function (_ref) {\n      var children = _ref.children,\n        attributes = _ref.attributes,\n        main = _ref.main,\n        mask = _ref.mask,\n        explicitMaskId = _ref.maskId,\n        transform = _ref.transform;\n      var mainWidth = main.width,\n        mainPath = main.icon;\n      var maskWidth = mask.width,\n        maskPath = mask.icon;\n      var trans = transformForSvg({\n        transform: transform,\n        containerWidth: maskWidth,\n        iconWidth: mainWidth\n      });\n      var maskRect = {\n        tag: 'rect',\n        attributes: _objectSpread2(_objectSpread2({}, ALL_SPACE), {}, {\n          fill: 'white'\n        })\n      };\n      var maskInnerGroupChildrenMixin = mainPath.children ? {\n        children: mainPath.children.map(fillBlack)\n      } : {};\n      var maskInnerGroup = {\n        tag: 'g',\n        attributes: _objectSpread2({}, trans.inner),\n        children: [fillBlack(_objectSpread2({\n          tag: mainPath.tag,\n          attributes: _objectSpread2(_objectSpread2({}, mainPath.attributes), trans.path)\n        }, maskInnerGroupChildrenMixin))]\n      };\n      var maskOuterGroup = {\n        tag: 'g',\n        attributes: _objectSpread2({}, trans.outer),\n        children: [maskInnerGroup]\n      };\n      var maskId = \"mask-\".concat(explicitMaskId || nextUniqueId());\n      var clipId = \"clip-\".concat(explicitMaskId || nextUniqueId());\n      var maskTag = {\n        tag: 'mask',\n        attributes: _objectSpread2(_objectSpread2({}, ALL_SPACE), {}, {\n          id: maskId,\n          maskUnits: 'userSpaceOnUse',\n          maskContentUnits: 'userSpaceOnUse'\n        }),\n        children: [maskRect, maskOuterGroup]\n      };\n      var defs = {\n        tag: 'defs',\n        children: [{\n          tag: 'clipPath',\n          attributes: {\n            id: clipId\n          },\n          children: deGroup(maskPath)\n        }, maskTag]\n      };\n      children.push(defs, {\n        tag: 'rect',\n        attributes: _objectSpread2({\n          'fill': 'currentColor',\n          'clip-path': \"url(#\".concat(clipId, \")\"),\n          'mask': \"url(#\".concat(maskId, \")\")\n        }, ALL_SPACE)\n      });\n      return {\n        children: children,\n        attributes: attributes\n      };\n    };\n  }\n};\n\nvar MissingIconIndicator = {\n  provides: function provides(providers) {\n    var reduceMotion = false;\n    if (WINDOW.matchMedia) {\n      reduceMotion = WINDOW.matchMedia('(prefers-reduced-motion: reduce)').matches;\n    }\n    providers.missingIconAbstract = function () {\n      var gChildren = [];\n      var FILL = {\n        fill: 'currentColor'\n      };\n      var ANIMATION_BASE = {\n        attributeType: 'XML',\n        repeatCount: 'indefinite',\n        dur: '2s'\n      };\n\n      // Ring\n      gChildren.push({\n        tag: 'path',\n        attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n          d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z'\n        })\n      });\n      var OPACITY_ANIMATE = _objectSpread2(_objectSpread2({}, ANIMATION_BASE), {}, {\n        attributeName: 'opacity'\n      });\n      var dot = {\n        tag: 'circle',\n        attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n          cx: '256',\n          cy: '364',\n          r: '28'\n        }),\n        children: []\n      };\n      if (!reduceMotion) {\n        dot.children.push({\n          tag: 'animate',\n          attributes: _objectSpread2(_objectSpread2({}, ANIMATION_BASE), {}, {\n            attributeName: 'r',\n            values: '28;14;28;28;14;28;'\n          })\n        }, {\n          tag: 'animate',\n          attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n            values: '1;0;1;1;0;1;'\n          })\n        });\n      }\n      gChildren.push(dot);\n      gChildren.push({\n        tag: 'path',\n        attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n          opacity: '1',\n          d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z'\n        }),\n        children: reduceMotion ? [] : [{\n          tag: 'animate',\n          attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n            values: '1;0;0;0;0;1;'\n          })\n        }]\n      });\n      if (!reduceMotion) {\n        // Exclamation\n        gChildren.push({\n          tag: 'path',\n          attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n            opacity: '0',\n            d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z'\n          }),\n          children: [{\n            tag: 'animate',\n            attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n              values: '0;0;1;1;0;0;'\n            })\n          }]\n        });\n      }\n      return {\n        tag: 'g',\n        attributes: {\n          class: 'missing'\n        },\n        children: gChildren\n      };\n    };\n  }\n};\n\nvar SvgSymbols = {\n  hooks: function hooks() {\n    return {\n      parseNodeAttributes: function parseNodeAttributes(accumulator, node) {\n        var symbolData = node.getAttribute('data-fa-symbol');\n        var symbol = symbolData === null ? false : symbolData === '' ? true : symbolData;\n        accumulator['symbol'] = symbol;\n        return accumulator;\n      }\n    };\n  }\n};\n\nvar plugins = [InjectCSS, ReplaceElements, Layers, LayersCounter, LayersText, PseudoElements, MutationObserver$1, PowerTransforms, Masks, MissingIconIndicator, SvgSymbols];\n\nregisterPlugins(plugins, {\n  mixoutsTo: api\n});\nvar noAuto$1 = api.noAuto;\nvar config$1 = api.config;\nvar library$1 = api.library;\nvar dom$1 = api.dom;\nvar parse$1 = api.parse;\nvar findIconDefinition$1 = api.findIconDefinition;\nvar toHtml$1 = api.toHtml;\nvar icon = api.icon;\nvar layer = api.layer;\nvar text = api.text;\nvar counter = api.counter;\n\nexport { noAuto$1 as noAuto, config$1 as config, library$1 as library, dom$1 as dom, parse$1 as parse, findIconDefinition$1 as findIconDefinition, toHtml$1 as toHtml, icon, layer, text, counter, api };\n","import React, { useId, useMemo } from 'react';\nimport { config, parse, icon, text, counter } from '@fortawesome/fontawesome-svg-core';\nimport { jsx } from 'react/jsx-runtime';\n\n// src/components/FontAwesomeIcon.tsx\n\n// src/utils/camelize.ts\nfunction _isNumerical(object) {\n  object = object - 0;\n  return object === object;\n}\nfunction camelize(string) {\n  if (_isNumerical(string)) {\n    return string;\n  }\n  string = string.replace(/[_-]+(.)?/g, (_, chr) => {\n    return chr ? chr.toUpperCase() : \"\";\n  });\n  return string.charAt(0).toLowerCase() + string.slice(1);\n}\nvar createGradientStops = (stop, index) => React.createElement(\"stop\", {\n  key: `${index}-${stop.offset}`,\n  offset: stop.offset,\n  stopColor: stop.color,\n  ...stop.opacity !== void 0 && { stopOpacity: stop.opacity }\n});\n\n// src/converter.ts\nfunction capitalize(val) {\n  return val.charAt(0).toUpperCase() + val.slice(1);\n}\nvar styleCache = /* @__PURE__ */ new Map();\nvar STYLE_CACHE_LIMIT = 1e3;\nfunction styleToObject(style) {\n  if (styleCache.has(style)) {\n    return styleCache.get(style);\n  }\n  const result = {};\n  let start = 0;\n  const len = style.length;\n  while (start < len) {\n    const semicolonIndex = style.indexOf(\";\", start);\n    const end = semicolonIndex === -1 ? len : semicolonIndex;\n    const pair = style.slice(start, end).trim();\n    if (pair) {\n      const colonIndex = pair.indexOf(\":\");\n      if (colonIndex > 0) {\n        const rawProp = pair.slice(0, colonIndex).trim();\n        const value = pair.slice(colonIndex + 1).trim();\n        if (rawProp && value) {\n          const prop = camelize(rawProp);\n          result[prop.startsWith(\"webkit\") ? capitalize(prop) : prop] = value;\n        }\n      }\n    }\n    start = end + 1;\n  }\n  if (styleCache.size === STYLE_CACHE_LIMIT) {\n    const oldestKey = styleCache.keys().next().value;\n    if (oldestKey) {\n      styleCache.delete(oldestKey);\n    }\n  }\n  styleCache.set(style, result);\n  return result;\n}\nfunction convert(createElement, element, extraProps = {}) {\n  if (typeof element === \"string\") {\n    return element;\n  }\n  const children = (element.children || []).map((child) => {\n    let element2 = child;\n    if ((\"fill\" in extraProps || extraProps.gradientFill) && child.tag === \"path\" && \"fill\" in child.attributes) {\n      element2 = {\n        ...child,\n        attributes: {\n          ...child.attributes,\n          fill: void 0\n        }\n      };\n    }\n    return convert(createElement, element2);\n  });\n  const elementAttributes = element.attributes || {};\n  const attrs = {};\n  for (const [key, val] of Object.entries(elementAttributes)) {\n    switch (true) {\n      case key === \"class\": {\n        attrs.className = val;\n        break;\n      }\n      case key === \"style\": {\n        attrs.style = styleToObject(String(val));\n        break;\n      }\n      case key.startsWith(\"aria-\"):\n      case key.startsWith(\"data-\"): {\n        attrs[key.toLowerCase()] = val;\n        break;\n      }\n      default: {\n        attrs[camelize(key)] = val;\n      }\n    }\n  }\n  const {\n    style: existingStyle,\n    role: existingRole,\n    \"aria-label\": ariaLabel,\n    gradientFill,\n    ...remaining\n  } = extraProps;\n  if (existingStyle) {\n    attrs.style = attrs.style ? { ...attrs.style, ...existingStyle } : existingStyle;\n  }\n  if (existingRole) {\n    attrs.role = existingRole;\n  }\n  if (ariaLabel) {\n    attrs[\"aria-label\"] = ariaLabel;\n    attrs[\"aria-hidden\"] = \"false\";\n  }\n  if (gradientFill) {\n    attrs.fill = `url(#${gradientFill.id})`;\n    const {\n      type: gradientType,\n      stops: gradientStops = [],\n      ...gradientProps\n    } = gradientFill;\n    children.unshift(\n      createElement(\n        gradientType === \"linear\" ? \"linearGradient\" : \"radialGradient\",\n        {\n          ...gradientProps,\n          id: gradientFill.id\n        },\n        gradientStops.map(createGradientStops)\n      )\n    );\n  }\n  return createElement(element.tag, { ...attrs, ...remaining }, ...children);\n}\nvar makeReactConverter = convert.bind(null, React.createElement);\nvar useAccessibilityId = (id, hasAccessibleProps) => {\n  const generatedId = useId();\n  return id || (hasAccessibleProps ? generatedId : void 0);\n};\n\n// src/logger.ts\nvar Logger = class {\n  constructor(scope = \"react-fontawesome\") {\n    this.enabled = false;\n    let IS_DEV = false;\n    try {\n      IS_DEV = typeof process !== \"undefined\" && process.env?.NODE_ENV === \"development\";\n    } catch {\n    }\n    this.scope = scope;\n    this.enabled = IS_DEV;\n  }\n  /**\n   * Logs messages to the console if not in production.\n   * @param args - The message and/or data to log.\n   */\n  log(...args) {\n    if (!this.enabled) return;\n    console.log(`[${this.scope}]`, ...args);\n  }\n  /**\n   * Logs warnings to the console if not in production.\n   * @param args - The warning message and/or data to log.\n   */\n  warn(...args) {\n    if (!this.enabled) return;\n    console.warn(`[${this.scope}]`, ...args);\n  }\n  /**\n   * Logs errors to the console if not in production.\n   * @param args - The error message and/or data to log.\n   */\n  error(...args) {\n    if (!this.enabled) return;\n    console.error(`[${this.scope}]`, ...args);\n  }\n};\ntypeof process !== \"undefined\" && process.env?.FA_VERSION || \"7.0.0\";\nvar SVG_CORE_VERSION = (\n  // @ts-expect-error TS2872 - Expression is always truthy - This is true when v7 of SVGCore is used, but not when v6 is used.\n  // This is the point of this check - if the property exists on config, we have v7, otherwise we have v6.\n  // TS is checking this against the dev dependencies which uses v7, so it reports a false error here.\n  (\"searchPseudoElementsFullScan\" in config && typeof config.searchPseudoElementsFullScan === \"boolean\" ? \"7.0.0\" : \"6.0.0\")\n);\nvar IS_VERSION_7_OR_LATER = Number.parseInt(SVG_CORE_VERSION) >= 7;\nvar getIsVersion7OrLater = () => IS_VERSION_7_OR_LATER;\nvar DEFAULT_CLASSNAME_PREFIX = \"fa\";\nvar ANIMATION_CLASSES = {\n  beat: \"fa-beat\",\n  fade: \"fa-fade\",\n  beatFade: \"fa-beat-fade\",\n  bounce: \"fa-bounce\",\n  shake: \"fa-shake\",\n  spin: \"fa-spin\",\n  spinPulse: \"fa-spin-pulse\",\n  spinReverse: \"fa-spin-reverse\",\n  pulse: \"fa-pulse\",\n  // the following animations are only supported in version 7.3.0 and later\n  flip360: \"fa-flip-360\",\n  buzz: \"fa-buzz\",\n  float: \"fa-float\",\n  jello: \"fa-jello\",\n  spinSnap: \"fa-spin-snap\",\n  spinSnap4: \"fa-spin-snap-4\",\n  spinSnap8: \"fa-spin-snap-8\",\n  swing: \"fa-swing\",\n  wag: \"fa-wag\"\n};\nvar PULL_CLASSES = {\n  left: \"fa-pull-left\",\n  right: \"fa-pull-right\"\n};\nvar ROTATE_CLASSES = {\n  \"90\": \"fa-rotate-90\",\n  \"180\": \"fa-rotate-180\",\n  \"270\": \"fa-rotate-270\"\n};\nvar SIZE_CLASSES = {\n  \"2xs\": \"fa-2xs\",\n  xs: \"fa-xs\",\n  sm: \"fa-sm\",\n  lg: \"fa-lg\",\n  xl: \"fa-xl\",\n  \"2xl\": \"fa-2xl\",\n  \"1x\": \"fa-1x\",\n  \"2x\": \"fa-2x\",\n  \"3x\": \"fa-3x\",\n  \"4x\": \"fa-4x\",\n  \"5x\": \"fa-5x\",\n  \"6x\": \"fa-6x\",\n  \"7x\": \"fa-7x\",\n  \"8x\": \"fa-8x\",\n  \"9x\": \"fa-9x\",\n  \"10x\": \"fa-10x\"\n};\nvar STYLE_CLASSES = {\n  border: \"fa-border\",\n  /** @deprecated */\n  fixedWidth: \"fa-fw\",\n  flip: \"fa-flip\",\n  flipHorizontal: \"fa-flip-horizontal\",\n  flipVertical: \"fa-flip-vertical\",\n  inverse: \"fa-inverse\",\n  rotateBy: \"fa-rotate-by\",\n  swapOpacity: \"fa-swap-opacity\",\n  widthAuto: \"fa-width-auto\",\n  // the following style classes are only supported in version 7.3.0 and later\n  canvasSquare: \"fa-canvas-square\",\n  canvasRoomy: \"fa-canvas-roomy\"\n};\nvar LAYER_CLASSES = {\n  default: \"fa-layers\"\n};\n\n// src/utils/get-class-list-from-props.ts\nfunction withPrefix(cls) {\n  const prefix = config.cssPrefix || config.familyPrefix || DEFAULT_CLASSNAME_PREFIX;\n  return prefix === DEFAULT_CLASSNAME_PREFIX ? cls : cls.replace(\n    new RegExp(String.raw`(?<=^|\\s)${DEFAULT_CLASSNAME_PREFIX}-`, \"g\"),\n    `${prefix}-`\n  );\n}\nfunction getClassListFromProps(props) {\n  const {\n    beat,\n    fade,\n    beatFade,\n    bounce,\n    shake,\n    spin,\n    spinPulse,\n    spinReverse,\n    pulse,\n    fixedWidth,\n    inverse,\n    border,\n    flip,\n    size,\n    rotation,\n    pull,\n    swapOpacity,\n    rotateBy,\n    widthAuto,\n    canvasSquare,\n    canvasRoomy,\n    flip360,\n    buzz,\n    float,\n    jello,\n    spinSnap,\n    spinSnap4,\n    spinSnap8,\n    swing,\n    wag,\n    className\n  } = props;\n  const result = [];\n  if (className) result.push(...className.split(\" \"));\n  if (beat) result.push(ANIMATION_CLASSES.beat);\n  if (fade) result.push(ANIMATION_CLASSES.fade);\n  if (beatFade) result.push(ANIMATION_CLASSES.beatFade);\n  if (bounce) result.push(ANIMATION_CLASSES.bounce);\n  if (shake) result.push(ANIMATION_CLASSES.shake);\n  if (spin) result.push(ANIMATION_CLASSES.spin);\n  if (spinReverse) result.push(ANIMATION_CLASSES.spinReverse);\n  if (spinPulse) result.push(ANIMATION_CLASSES.spinPulse);\n  if (pulse) result.push(ANIMATION_CLASSES.pulse);\n  if (fixedWidth) result.push(STYLE_CLASSES.fixedWidth);\n  if (inverse) result.push(STYLE_CLASSES.inverse);\n  if (border) result.push(STYLE_CLASSES.border);\n  if (flip === true) result.push(STYLE_CLASSES.flip);\n  if (flip === \"horizontal\" || flip === \"both\") {\n    result.push(STYLE_CLASSES.flipHorizontal);\n  }\n  if (flip === \"vertical\" || flip === \"both\") {\n    result.push(STYLE_CLASSES.flipVertical);\n  }\n  if (size !== void 0 && size !== null) result.push(SIZE_CLASSES[size]);\n  if (rotation !== void 0 && rotation !== null && rotation !== 0) {\n    result.push(ROTATE_CLASSES[rotation]);\n  }\n  if (pull !== void 0 && pull !== null) result.push(PULL_CLASSES[pull]);\n  if (swapOpacity) result.push(STYLE_CLASSES.swapOpacity);\n  if (!getIsVersion7OrLater()) return result;\n  if (rotateBy) result.push(STYLE_CLASSES.rotateBy);\n  if (widthAuto) result.push(STYLE_CLASSES.widthAuto);\n  if (canvasSquare) result.push(STYLE_CLASSES.canvasSquare);\n  if (canvasRoomy) result.push(STYLE_CLASSES.canvasRoomy);\n  if (flip360) result.push(ANIMATION_CLASSES.flip360);\n  if (buzz) result.push(ANIMATION_CLASSES.buzz);\n  if (float) result.push(ANIMATION_CLASSES.float);\n  if (jello) result.push(ANIMATION_CLASSES.jello);\n  if (spinSnap) result.push(ANIMATION_CLASSES.spinSnap);\n  if (spinSnap4) result.push(ANIMATION_CLASSES.spinSnap4);\n  if (spinSnap8) result.push(ANIMATION_CLASSES.spinSnap8);\n  if (swing) result.push(ANIMATION_CLASSES.swing);\n  if (wag) result.push(ANIMATION_CLASSES.wag);\n  const prefix = config.cssPrefix || config.familyPrefix || DEFAULT_CLASSNAME_PREFIX;\n  return prefix === DEFAULT_CLASSNAME_PREFIX ? result : (\n    // TODO: see if we can achieve custom prefix support without iterating\n    // eslint-disable-next-line unicorn/no-array-callback-reference\n    result.map(withPrefix)\n  );\n}\nvar isIconDefinition = (icon) => typeof icon === \"object\" && \"icon\" in icon && !!icon.icon;\nfunction normalizeIconArgs(icon) {\n  if (!icon) {\n    return void 0;\n  }\n  if (isIconDefinition(icon)) {\n    return icon;\n  }\n  return parse.icon(icon);\n}\n\n// src/utils/typed-object-keys.ts\nfunction typedObjectKeys(obj) {\n  return Object.keys(obj);\n}\n\n// src/components/FontAwesomeIcon.tsx\nvar logger = new Logger(\"FontAwesomeIcon\");\nvar DEFAULT_PROPS = {\n  border: false,\n  className: \"\",\n  mask: void 0,\n  maskId: void 0,\n  fixedWidth: false,\n  inverse: false,\n  flip: false,\n  icon: void 0,\n  listItem: false,\n  pull: void 0,\n  pulse: false,\n  rotation: void 0,\n  rotateBy: false,\n  size: void 0,\n  spin: false,\n  spinPulse: false,\n  spinReverse: false,\n  beat: false,\n  fade: false,\n  beatFade: false,\n  bounce: false,\n  shake: false,\n  symbol: false,\n  title: \"\",\n  titleId: void 0,\n  transform: void 0,\n  swapOpacity: false,\n  widthAuto: false,\n  canvasSquare: false,\n  canvasRoomy: false,\n  flip360: false,\n  buzz: false,\n  float: false,\n  jello: false,\n  spinSnap: false,\n  spinSnap4: false,\n  spinSnap8: false,\n  swing: false,\n  wag: false\n};\nvar DEFAULT_PROP_KEYS = new Set(Object.keys(DEFAULT_PROPS));\nvar FontAwesomeIcon = React.forwardRef((props, ref) => {\n  const allProps = { ...DEFAULT_PROPS, ...props };\n  const {\n    icon: iconArgs,\n    mask: maskArgs,\n    symbol,\n    title,\n    titleId: titleIdFromProps,\n    maskId: maskIdFromProps,\n    transform\n  } = allProps;\n  const maskId = useAccessibilityId(maskIdFromProps, Boolean(maskArgs));\n  const titleId = useAccessibilityId(titleIdFromProps, Boolean(title));\n  const iconLookup = normalizeIconArgs(iconArgs);\n  if (!iconLookup) {\n    logger.error(\"Icon lookup is undefined\", iconArgs);\n    return null;\n  }\n  const classList = getClassListFromProps(allProps);\n  const transformProps = typeof transform === \"string\" ? parse.transform(transform) : transform;\n  const normalizedMaskArgs = normalizeIconArgs(maskArgs);\n  const renderedIcon = icon(iconLookup, {\n    ...classList.length > 0 && { classes: classList },\n    ...transformProps && { transform: transformProps },\n    ...normalizedMaskArgs && { mask: normalizedMaskArgs },\n    symbol,\n    title,\n    titleId,\n    maskId\n  });\n  if (!renderedIcon) {\n    logger.error(\"Could not find icon\", iconLookup);\n    return null;\n  }\n  const { abstract } = renderedIcon;\n  const extraProps = { ref };\n  for (const key of typedObjectKeys(allProps)) {\n    if (DEFAULT_PROP_KEYS.has(key)) {\n      continue;\n    }\n    extraProps[key] = allProps[key];\n  }\n  return makeReactConverter(abstract[0], extraProps);\n});\nFontAwesomeIcon.displayName = \"FontAwesomeIcon\";\nvar DEFAULT_CLASSNAMES = `${LAYER_CLASSES.default} ${STYLE_CLASSES.fixedWidth}`;\nvar FontAwesomeLayers = ({\n  children,\n  className,\n  size,\n  ...attributes\n}) => {\n  const prefixedDefaultClasses = withPrefix(DEFAULT_CLASSNAMES);\n  const classes = className ? `${prefixedDefaultClasses} ${className}` : prefixedDefaultClasses;\n  const element = /* @__PURE__ */ jsx(\"span\", { ...attributes, className: classes, children });\n  if (size) {\n    return /* @__PURE__ */ jsx(\"div\", { className: withPrefix(`fa-${size}`), children: element });\n  }\n  return element;\n};\nvar LayersText = ({\n  text: text$1,\n  className,\n  inverse,\n  transform,\n  style,\n  ...attributes\n}) => {\n  const textAbstractElement = useMemo(() => {\n    const textObject = text(text$1, {\n      classes: [\n        ...className?.split(\" \") || [],\n        ...inverse ? [STYLE_CLASSES.inverse] : []\n      ],\n      transform: typeof transform === \"string\" ? parse.transform(transform) : transform\n    });\n    return textObject.abstract[0];\n  }, [text$1, transform, className, inverse]);\n  return makeReactConverter(textAbstractElement, { ...attributes, style });\n};\nvar LayersCounter = ({\n  count,\n  className,\n  style,\n  ...attributes\n}) => {\n  const counterAbstractElement = useMemo(\n    () => counter(count, {\n      classes: className?.split(\" \")\n    }).abstract[0],\n    [count, className]\n  );\n  return makeReactConverter(counterAbstractElement, { ...attributes, style });\n};\n\nexport { FontAwesomeIcon, FontAwesomeLayers, LayersCounter, LayersText };\n","/*!\n * Font Awesome Free 7.3.1 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2026 Fonticons, Inc.\n */\nvar prefix = \"fas\";\nvar fa0 = {\n  prefix: 'fas',\n  iconName: '0',\n  icon: [320, 512, [], \"30\", \"M0 192C0 103.6 71.6 32 160 32s160 71.6 160 160l0 128c0 88.4-71.6 160-160 160S0 408.4 0 320L0 192zM160 96c-53 0-96 43-96 96l0 128c0 53 43 96 96 96s96-43 96-96l0-128c0-53-43-96-96-96z\"]\n};\nvar fa1 = {\n  prefix: 'fas',\n  iconName: '1',\n  icon: [256, 512, [], \"31\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l64 0 0 320-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l192 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-352c0-17.7-14.3-32-32-32L32 32z\"]\n};\nvar fa2 = {\n  prefix: 'fas',\n  iconName: '2',\n  icon: [384, 512, [], \"32\", \"M48 64c0-17.7 14.3-32 32-32l171 0c60.2 0 109 48.8 109 109 0 43.8-26.2 83.3-66.4 100.4l-139.1 59C119 315.4 96 350.2 96 388.7l0 27.3 224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L64 480c-17.7 0-32-14.3-32-32l0-59.3c0-64.2 38.4-122.2 97.5-147.3l139.1-59c16.6-7.1 27.4-23.4 27.4-41.4 0-24.9-20.2-45-45-45L80 96C62.3 96 48 81.7 48 64z\"]\n};\nvar fa3 = {\n  prefix: 'fas',\n  iconName: '3',\n  icon: [320, 512, [], \"33\", \"M80 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l112 0c35.3 0 64-28.7 64-64s-28.7-64-64-64L32 96C14.3 96 0 81.7 0 64S14.3 32 32 32l160 0c70.7 0 128 57.3 128 128 0 38.2-16.8 72.5-43.3 96 26.6 23.5 43.3 57.8 43.3 96 0 70.7-57.3 128-128 128L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l160 0c35.3 0 64-28.7 64-64s-28.7-64-64-64L80 288z\"]\n};\nvar fa4 = {\n  prefix: 'fas',\n  iconName: '4',\n  icon: [384, 512, [], \"34\", \"M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64L0 288c0 35.3 28.7 64 64 64l192 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-224c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 224-192 0 0-224z\"]\n};\nvar fa5 = {\n  prefix: 'fas',\n  iconName: '5',\n  icon: [320, 512, [], \"35\", \"M0 64C0 46.3 14.3 32 32 32l224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0 0 112 120 0c75.1 0 136 60.9 136 136S259.1 480 184 480L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l152 0c39.8 0 72-32.2 72-72s-32.2-72-72-72L32 272c-17.7 0-32-14.3-32-32L0 64z\"]\n};\nvar fa6 = {\n  prefix: 'fas',\n  iconName: '6',\n  icon: [384, 512, [], \"36\", \"M256 32c17.7 0 32 14.3 32 32s-14.3 32-32 32l-88 0c-48.6 0-88 39.4-88 88l0 32.2c22.9-15.3 50.4-24.2 80-24.2l48 0c79.5 0 144 64.5 144 144S287.5 480 208 480l-48 0C80.5 480 16 415.5 16 336l0-152C16 100.1 84.1 32 168 32l88 0zM80 336c0 44.2 35.8 80 80 80l48 0c44.2 0 80-35.8 80-80s-35.8-80-80-80l-48 0c-44.2 0-80 35.8-80 80z\"]\n};\nvar fa7 = {\n  prefix: 'fas',\n  iconName: '7',\n  icon: [320, 512, [], \"37\", \"M0 64C0 46.3 14.3 32 32 32l256 0c11.5 0 22 6.1 27.7 16.1s5.7 22.2-.1 32.1l-224 384c-8.9 15.3-28.5 20.4-43.8 11.5s-20.4-28.5-11.5-43.8L232.3 96 32 96C14.3 96 0 81.7 0 64z\"]\n};\nvar fa8 = {\n  prefix: 'fas',\n  iconName: '8',\n  icon: [320, 512, [], \"38\", \"M304 160c0-70.7-57.3-128-128-128l-32 0c-70.7 0-128 57.3-128 128 0 34.6 13.7 66 36 89-31.5 23.3-52 60.8-52 103 0 70.7 57.3 128 128 128l64 0c70.7 0 128-57.3 128-128 0-42.2-20.5-79.7-52-103 22.3-23 36-54.4 36-89zM176.1 288l15.9 0c35.3 0 64 28.7 64 64s-28.7 64-64 64l-64 0c-35.3 0-64-28.7-64-64s28.7-64 64-64l48.1 0zm0-64L144 224c-35.3 0-64-28.7-64-64 0-35.3 28.7-64 64-64l32 0c35.3 0 64 28.7 64 64 0 35.3-28.6 64-64 64z\"]\n};\nvar fa9 = {\n  prefix: 'fas',\n  iconName: '9',\n  icon: [384, 512, [], \"39\", \"M208 320c29.6 0 57.1-8.9 80-24.2l0 32.2c0 48.6-39.4 88-88 88L96 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l104 0c83.9 0 152-68.1 152-152l0-152.1C351.9 96.4 287.5 32 208 32l-48 0C80.5 32 16 96.5 16 176S80.5 320 160 320l48 0zm80-144c0 44.2-35.8 80-80 80l-48 0c-44.2 0-80-35.8-80-80s35.8-80 80-80l48 0c44.2 0 80 35.8 80 80z\"]\n};\nvar faDollarSign = {\n  prefix: 'fas',\n  iconName: 'dollar-sign',\n  icon: [320, 512, [128178, 61781, \"dollar\", \"usd\"], \"24\", \"M136 24c0-13.3 10.7-24 24-24s24 10.7 24 24l0 40 56 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-114.9 0c-24.9 0-45.1 20.2-45.1 45.1 0 22.5 16.5 41.5 38.7 44.7l91.6 13.1c53.8 7.7 93.7 53.7 93.7 108 0 60.3-48.9 109.1-109.1 109.1l-10.9 0 0 40c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-40-72 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l130.9 0c24.9 0 45.1-20.2 45.1-45.1 0-22.5-16.5-41.5-38.7-44.7l-91.6-13.1C55.9 273.5 16 227.4 16 173.1 16 112.9 64.9 64 125.1 64l10.9 0 0-40z\"]\n};\nvar faDollar = faDollarSign;\nvar faUsd = faDollarSign;\nvar faDog = {\n  prefix: 'fas',\n  iconName: 'dog',\n  icon: [576, 512, [128021], \"f6d3\", \"M32 112c16.6 0 30.2 12.6 31.8 28.7l.3 6.6C65.8 163.4 79.4 176 96 176l179.1 0 140.9 60.4 0 243.6c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-131.3C296 361 268.8 368 240 368s-56-7-80-19.3L160 480c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-245.6c-37.3-13.2-64-48.6-64-90.4 0-17.7 14.3-32 32-32zM355.8-32c7.7 0 14.9 3.6 19.6 9.8L392 0 444.1 0c12.7 0 24.9 5.1 33.9 14.1L496 32 552 32c13.3 0 24 10.7 24 24l0 24c0 44.2-35.8 80-80 80l-64 0-7 28-124.7-53.4 31.6-147.2C334.3-23.9 344.2-32 355.8-32zM448 44a20 20 0 1 0 0 40 20 20 0 1 0 0-40z\"]\n};\nvar faTruckMoving = {\n  prefix: 'fas',\n  iconName: 'truck-moving',\n  icon: [640, 512, [], \"f4df\", \"M64 32C28.7 32 0 60.7 0 96L0 424c0 48.6 39.4 88 88 88 25.2 0 48-10.6 64-27.6 16 17 38.8 27.6 64 27.6 40.3 0 74.2-27.1 84.7-64l134.6 0c10.4 36.9 44.4 64 84.7 64 43 0 78.9-30.9 86.5-71.7 20-10.8 33.5-32 33.5-56.3l0-146.7c0-17-6.7-33.3-18.7-45.3L576 146.7c-12-12-28.3-18.7-45.3-18.7l-50.7 0 0-32c0-35.3-28.7-64-64-64L64 32zM480 192l50.7 0 45.3 45.3 0 50.7-96 0 0-96zM88 384a40 40 0 1 1 0 80 40 40 0 1 1 0-80zm392 40a40 40 0 1 1 80 0 40 40 0 1 1 -80 0zM216 384a40 40 0 1 1 0 80 40 40 0 1 1 0-80z\"]\n};\nvar faRotate = {\n  prefix: 'fas',\n  iconName: 'rotate',\n  icon: [512, 512, [128260, \"sync-alt\"], \"f2f1\", \"M480.1 192l7.9 0c13.3 0 24-10.7 24-24l0-144c0-9.7-5.8-18.5-14.8-22.2S477.9 .2 471 7L419.3 58.8C375 22.1 318 0 256 0 127 0 20.3 95.4 2.6 219.5 .1 237 12.2 253.2 29.7 255.7s33.7-9.7 36.2-27.1C79.2 135.5 159.3 64 256 64 300.4 64 341.2 79 373.7 104.3L327 151c-6.9 6.9-8.9 17.2-5.2 26.2S334.3 192 344 192l136.1 0zm29.4 100.5c2.5-17.5-9.7-33.7-27.1-36.2s-33.7 9.7-36.2 27.1c-13.3 93-93.4 164.5-190.1 164.5-44.4 0-85.2-15-117.7-40.3L185 361c6.9-6.9 8.9-17.2 5.2-26.2S177.7 320 168 320L24 320c-13.3 0-24 10.7-24 24L0 488c0 9.7 5.8 18.5 14.8 22.2S34.1 511.8 41 505l51.8-51.8C137 489.9 194 512 256 512 385 512 491.7 416.6 509.4 292.5z\"]\n};\nvar faSyncAlt = faRotate;\nvar faSquareMinus = {\n  prefix: 'fas',\n  iconName: 'square-minus',\n  icon: [448, 512, [61767, \"minus-square\"], \"f146\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm72 200l176 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-176 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nvar faMinusSquare = faSquareMinus;\nvar faAlignJustify = {\n  prefix: 'fas',\n  iconName: 'align-justify',\n  icon: [448, 512, [], \"f039\", \"M448 64c0-17.7-14.3-32-32-32L32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l384 0c17.7 0 32-14.3 32-32zm0 256c0-17.7-14.3-32-32-32L32 288c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32zM0 192c0 17.7 14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 160c-17.7 0-32 14.3-32 32zM448 448c0-17.7-14.3-32-32-32L32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32z\"]\n};\nvar faCalendarCheck = {\n  prefix: 'fas',\n  iconName: 'calendar-check',\n  icon: [448, 512, [], \"f274\", \"M320 0c17.7 0 32 14.3 32 32l0 32 32 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 128C0 92.7 28.7 64 64 64l32 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32zm22 161.7c-10.7-7.8-25.7-5.4-33.5 5.3L189.1 331.2 137 279.1c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l72 72c5 5 11.9 7.5 18.8 7s13.4-4.1 17.5-9.8L347.3 195.2c7.8-10.7 5.4-25.7-5.3-33.5z\"]\n};\nvar faFaceKiss = {\n  prefix: 'fas',\n  iconName: 'face-kiss',\n  icon: [512, 512, [128535, \"kiss\"], \"f596\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM240 288l32 0c26.5 0 48 21.5 48 48 0 12.3-4.6 23.5-12.2 32 7.6 8.5 12.2 19.7 12.2 32 0 26.5-21.5 48-48 48l-32 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm-96-80a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faKiss = faFaceKiss;\nvar faKitchenSet = {\n  prefix: 'fas',\n  iconName: 'kitchen-set',\n  icon: [576, 512, [], \"e51a\", \"M240 144a96 96 0 1 0 -192 0 96 96 0 1 0 192 0zm44.4 32C269.9 240.1 212.5 288 144 288 64.5 288 0 223.5 0 144S64.5 0 144 0c68.5 0 125.9 47.9 140.4 112l71.8 0c8.8-9.8 21.6-16 35.8-16l104 0c26.5 0 48 21.5 48 48s-21.5 48-48 48l-104 0c-14.2 0-27-6.2-35.8-16l-71.8 0zM144 80a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM400 240c13.3 0 24 10.7 24 24l0 8 96 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-240 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l96 0 0-8c0-13.3 10.7-24 24-24zM288 464l0-112 224 0 0 112c0 26.5-21.5 48-48 48l-128 0c-26.5 0-48-21.5-48-48zM48 320l128 0c26.5 0 48 21.5 48 48s-21.5 48-48 48l-16 0c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-80c0-8.8 7.2-16 16-16zm128 64c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0 0 32 16 0zM24 464l176 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 512c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nvar faDna = {\n  prefix: 'fas',\n  iconName: 'dna',\n  icon: [384, 512, [129516], \"f471\", \"M352 0c17.7 0 32 14.3 32 32 0 57.8-24.4 104.8-57.4 144.5-24.1 28.9-53.8 55.1-83.6 79.5 29.8 24.5 59.5 50.6 83.6 79.5 33 39.6 57.4 86.7 57.4 144.5 0 17.7-14.3 32-32 32s-32-14.3-32-32L64 480c0 17.7-14.3 32-32 32S0 497.7 0 480C0 422.2 24.4 375.2 57.4 335.5 81.5 306.6 111.2 280.5 141 256 111.2 231.5 81.5 205.4 57.4 176.5 24.4 136.8 0 89.8 0 32 0 14.3 14.3 0 32 0S64 14.3 64 32l256 0c0-17.7 14.3-32 32-32zM283.5 384l-182.9 0c-8.2 10.5-15.1 21.1-20.6 32l224.2 0c-5.6-10.9-12.5-21.5-20.6-32zM238 336c-14.3-13-29.8-25.8-46-39-16.2 13.1-31.7 26-46 39l92 0zM100.5 128l182.9 0c8.2-10.5 15.1-21.1 20.6-32L79.9 96c5.6 10.9 12.5 21.5 20.6 32zM146 176c14.3 13 29.8 25.8 46 39 16.2-13.1 31.7-26 46-39l-92 0z\"]\n};\nvar faChildReaching = {\n  prefix: 'fas',\n  iconName: 'child-reaching',\n  icon: [384, 512, [], \"e59d\", \"M256 64a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zM152.9 169.3c-23.7-8.4-44.5-24.3-58.8-45.8L74.6 94.2C64.8 79.5 45 75.6 30.3 85.4S11.6 115 21.4 129.8L40.9 159c18.1 27.1 42.8 48.4 71.1 62.4L112 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 32 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-258.4c29.1-14.2 54.4-36.2 72.7-64.2l18.2-27.9c9.6-14.8 5.4-34.6-9.4-44.3s-34.6-5.5-44.3 9.4L291 122.4c-21.8 33.4-58.9 53.6-98.8 53.6-12.6 0-24.9-2-36.6-5.8-.9-.3-1.8-.7-2.7-.9z\"]\n};\nvar faPaste = {\n  prefix: 'fas',\n  iconName: 'paste',\n  icon: [512, 512, [\"file-clipboard\"], \"f0ea\", \"M64 0C28.7 0 0 28.7 0 64L0 384c0 35.3 28.7 64 64 64l112 0 0-224c0-61.9 50.1-112 112-112l64 0 0-48c0-35.3-28.7-64-64-64L64 0zM248 112l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24zm40 48c-35.3 0-64 28.7-64 64l0 224c0 35.3 28.7 64 64 64l160 0c35.3 0 64-28.7 64-64l0-165.5c0-17-6.7-33.3-18.7-45.3l-58.5-58.5c-12-12-28.3-18.7-45.3-18.7L288 160z\"]\n};\nvar faFileClipboard = faPaste;\nvar faMeteor = {\n  prefix: 'fas',\n  iconName: 'meteor',\n  icon: [512, 512, [9732], \"f753\", \"M493.7 .9l-194.2 74.7 2.3-29.3c1-12.8-12.8-21.5-24-15.1L101.3 133.4C38.6 169.7 0 236.6 0 309 0 421.1 90.9 512 203 512 275.4 512 342.3 473.4 378.6 410.7L480.8 234.3c6.5-11.1-2.2-25-15.1-24l-29.3 2.3 74.7-194.2c.6-1.5 .9-3.2 .9-4.8 0-7.5-6-13.5-13.5-13.5-1.7 0-3.3 .3-4.8 .9zM192 192a128 128 0 1 1 0 256 128 128 0 1 1 0-256zm0 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm16 96a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"]\n};\nvar faGears = {\n  prefix: 'fas',\n  iconName: 'gears',\n  icon: [640, 512, [\"cogs\"], \"f085\", \"M415.9 210.5c12.2-3.3 25 2.5 30.5 13.8L465 261.9c10.3 1.4 20.4 4.2 29.9 8.1l35-23.3c10.5-7 24.4-5.6 33.3 3.3l19.2 19.2c8.9 8.9 10.3 22.9 3.3 33.3l-23.3 34.9c1.9 4.7 3.6 9.6 5 14.7 1.4 5.1 2.3 10.1 3 15.2l37.7 18.6c11.3 5.6 17.1 18.4 13.8 30.5l-7 26.2c-3.3 12.1-14.6 20.3-27.2 19.5l-42-2.7c-6.3 8.1-13.6 15.6-21.9 22l2.7 41.9c.8 12.6-7.4 24-19.5 27.2l-26.2 7c-12.2 3.3-24.9-2.5-30.5-13.8l-18.6-37.6c-10.3-1.4-20.4-4.2-29.9-8.1l-35 23.3c-10.5 7-24.4 5.6-33.3-3.3l-19.2-19.2c-8.9-8.9-10.3-22.8-3.3-33.3l23.3-35c-1.9-4.7-3.6-9.6-5-14.7s-2.3-10.2-3-15.2l-37.7-18.6c-11.3-5.6-17-18.4-13.8-30.5l7-26.2c3.3-12.1 14.6-20.3 27.2-19.5l41.9 2.7c6.3-8.1 13.6-15.6 21.9-22l-2.7-41.8c-.8-12.6 7.4-24 19.5-27.2l26.2-7zM448.4 340a44 44 0 1 0 .1 88 44 44 0 1 0 -.1-88zM224.9-45.5l26.2 7c12.1 3.3 20.3 14.7 19.5 27.2l-2.7 41.8c8.3 6.4 15.6 13.8 21.9 22l42-2.7c12.5-.8 23.9 7.4 27.2 19.5l7 26.2c3.2 12.1-2.5 24.9-13.8 30.5l-37.7 18.6c-.7 5.1-1.7 10.2-3 15.2s-3.1 10-5 14.7l23.3 35c7 10.5 5.6 24.4-3.3 33.3L307.3 262c-8.9 8.9-22.8 10.3-33.3 3.3L239 242c-9.5 3.9-19.6 6.7-29.9 8.1l-18.6 37.6c-5.6 11.3-18.4 17-30.5 13.8l-26.2-7c-12.2-3.3-20.3-14.7-19.5-27.2l2.7-41.9c-8.3-6.4-15.6-13.8-21.9-22l-42 2.7c-12.5 .8-23.9-7.4-27.2-19.5l-7-26.2c-3.2-12.1 2.5-24.9 13.8-30.5l37.7-18.6c.7-5.1 1.7-10.1 3-15.2 1.4-5.1 3-10 5-14.7L55.1 46.5c-7-10.5-5.6-24.4 3.3-33.3L77.6-6c8.9-8.9 22.8-10.3 33.3-3.3l35 23.3c9.5-3.9 19.6-6.7 29.9-8.1l18.6-37.6c5.6-11.3 18.3-17 30.5-13.8zM192.4 84a44 44 0 1 0 0 88 44 44 0 1 0 0-88z\"]\n};\nvar faCogs = faGears;\nvar faFileCirclePlus = {\n  prefix: 'fas',\n  iconName: 'file-circle-plus',\n  icon: [576, 512, [58606], \"e494\", \"M96 0C60.7 0 32 28.7 32 64l0 384c0 35.3 28.7 64 64 64l180 0c-22.7-31.5-36-70.2-36-112 0-100.6 77.4-183.2 176-191.3l0-38.1c0-17-6.7-33.3-18.7-45.3L290.7 18.7C278.7 6.7 262.5 0 245.5 0L96 0zM357.5 176L264 176c-13.3 0-24-10.7-24-24L240 58.5 357.5 176zM432 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm16-208l0 48 48 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l48 0 0-48c0-8.8 7.2-16 16-16s16 7.2 16 16z\"]\n};\nvar faIcicles = {\n  prefix: 'fas',\n  iconName: 'icicles',\n  icon: [512, 512, [], \"f7ad\", \"M75.8 304.8L1 35.7C.3 33.2 0 30.7 0 28.2 0 12.6 12.6 0 28.2 0L482.4 0c16.3 0 29.6 13.2 29.6 29.6 0 1.6-.1 3.3-.4 4.9L434.6 496.1c-1.5 9.2-9.5 15.9-18.8 15.9-9.2 0-17.1-6.6-18.7-15.6L336 160 307.2 303.9c-1.9 9.3-10.1 16.1-19.6 16.1-9.2 0-17.2-6.2-19.4-15.1L240 192 210.6 368.2c-1.5 9.1-9.4 15.8-18.6 15.8s-17.1-6.7-18.6-15.8L144 192 115.9 304.3c-2.3 9.2-10.6 15.7-20.1 15.7-9.3 0-17.5-6.2-20-15.2z\"]\n};\nvar faArrowTrendUp = {\n  prefix: 'fas',\n  iconName: 'arrow-trend-up',\n  icon: [576, 512, [], \"e098\", \"M384 160c-17.7 0-32-14.3-32-32s14.3-32 32-32l160 0c17.7 0 32 14.3 32 32l0 160c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-82.7-169.4 169.4c-12.5 12.5-32.8 12.5-45.3 0L192 269.3 54.6 406.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l160-160c12.5-12.5 32.8-12.5 45.3 0L320 306.7 466.7 160 384 160z\"]\n};\nvar faHexagonNodesBolt = {\n  prefix: 'fas',\n  iconName: 'hexagon-nodes-bolt',\n  icon: [576, 512, [], \"e69a\", \"M248 106.6c18.9-9 32-28.3 32-50.6c0-30.9-25.1-56-56-56s-56 25.1-56 56c0 22.3 13.1 41.6 32 50.6l0 98.8c-2.8 1.3-5.5 2.9-8 4.7l-80.1-45.8c1.6-20.8-8.6-41.6-27.9-52.8C57.2 96 23 105.2 7.5 132S1.2 193 28 208.5c1.3 .8 2.6 1.5 4 2.1l0 90.8c-1.3 .6-2.7 1.3-4 2.1C1.2 319-8 353.2 7.5 380S57.2 416 84 400.5c19.3-11.1 29.4-32 27.8-52.8l50.5-28.9c-11.5-11.2-19.9-25.6-23.8-41.7L88 306.1c-2.6-1.8-5.2-3.3-8-4.7l0-90.8c2.8-1.3 5.5-2.9 8-4.7l80.1 45.8c-.1 1.4-.2 2.8-.2 4.3c0 22.3 13.1 41.6 32 50.6l0 98.8c-18.9 9-32 28.3-32 50.6c0 30.9 25.1 56 56 56c30.7 0 55.6-24.7 56-55.2c-7.5-12.9-13.5-26.8-17.6-41.5c-4.2-4-9.1-7.3-14.4-9.9l0-98.8c2.8-1.3 5.5-2.9 8-4.7l10.5 6c5.5-15.3 13.1-29.5 22.4-42.5l-9.1-5.2c.1-1.4 .2-2.8 .2-4.3c0-22.3-13.1-41.6-32-50.6l0-98.8zM440.5 132C425 105.2 390.8 96 364 111.5c-19.3 11.1-29.4 32-27.8 52.8l-50.6 28.9c11.5 11.2 19.9 25.6 23.8 41.7L360 205.9c.4 .3 .8 .6 1.3 .9c21.7-9.5 45.6-14.8 70.8-14.8c2 0 4 0 5.9 .1c12.1-17.3 13.8-40.6 2.6-60.1zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm47.9-225c4.3 3.7 5.4 9.9 2.6 14.9L452.4 356l35.6 0c5.2 0 9.8 3.3 11.4 8.2s-.1 10.3-4.2 13.4l-96 72c-4.5 3.4-10.8 3.2-15.1-.6s-5.4-9.9-2.6-14.9L411.6 380 376 380c-5.2 0-9.8-3.3-11.4-8.2s.1-10.3 4.2-13.4l96-72c4.5-3.4 10.8-3.2 15.1 .6z\"]\n};\nvar faQuestion = {\n  prefix: 'fas',\n  iconName: 'question',\n  icon: [320, 512, [10067, 10068, 61736], \"3f\", \"M64 160c0-53 43-96 96-96s96 43 96 96c0 42.7-27.9 78.9-66.5 91.4-28.4 9.2-61.5 35.3-61.5 76.6l0 24c0 17.7 14.3 32 32 32s32-14.3 32-32l0-24c0-1.7 .6-4.1 3.5-7.3 3-3.3 7.9-6.5 13.7-8.4 64.3-20.7 110.8-81 110.8-152.3 0-88.4-71.6-160-160-160S0 71.6 0 160c0 17.7 14.3 32 32 32s32-14.3 32-32zm96 352c22.1 0 40-17.9 40-40s-17.9-40-40-40-40 17.9-40 40 17.9 40 40 40z\"]\n};\nvar faHandsBound = {\n  prefix: 'fas',\n  iconName: 'hands-bound',\n  icon: [576, 512, [], \"e4f9\", \"M64 32C64 14.3 49.7 0 32 0S0 14.3 0 32L0 213.9c0 14.2 5.1 27.9 14.3 38.7L99.6 352 96 352c-13.3 0-24 10.7-24 24s10.7 24 24 24l384 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-3.6 0 85.3-99.5c9.2-10.8 14.3-24.5 14.3-38.7L576 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 112.8-69.3 92.4c-5.7 7.6-16.1 9.6-24.2 4.8-9.7-5.7-12.1-18.7-5.1-27.5L441 180c10.8-13.5 8.9-33.3-4.4-44.5s-33-9.8-44.5 3.2l-46.7 52.5C329 209.7 320 233.4 320 258.1l0 93.9-64 0 0-93.9c0-24.6-9-48.4-25.4-66.8l-46.7-52.5c-11.5-13-31.3-14.4-44.5-3.2S124.2 166.4 135 180l27.6 34.5c7 8.8 4.7 21.8-5.1 27.5-8.1 4.8-18.6 2.7-24.2-4.8L64 144.8 64 32zm64 448l0 32 128 0 0-32 64 0 0 32 128 0 0-32 32 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L96 432c-13.3 0-24 10.7-24 24s10.7 24 24 24l32 0z\"]\n};\nvar faPersonWalkingLuggage = {\n  prefix: 'fas',\n  iconName: 'person-walking-luggage',\n  icon: [512, 512, [], \"e554\", \"M264.3 24a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zm-8 181.3l-22.6 22.6c-6 6-9.4 14.1-9.4 22.6l0 37.5c0 12.3-7 23-17.2 28.4-.9 4.2-2.4 8.4-4.3 12.3l-69 138.1-.8-.4-27.7 55.3c-9.9 19.8-33.9 27.8-53.7 17.9L14.6 521c-19.8-9.9-27.8-33.9-17.9-53.7L47.3 366.3c9.9-19.8 33.9-27.8 53.7-17.9l30.7 15.3 28.3-56.6c.3-.6 .4-1.2 .4-1.8l0-16.9c0-.2 0-.3 0-.5l0-37.5c0-25.5 10.1-49.9 28.1-67.9l35.1-35.1c22.8-22.8 53.6-35.6 85.8-35.6 36.9 0 71.8 16.8 94.8 45.6L422.1 180c6.1 7.6 15.3 12 25 12l33.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-33.2 0c-29.2 0-56.7-13.3-75-36l-3.8-4.7 0 115.2 34.5 29.6c17.7 15.2 29.3 36.2 32.6 59.3L448 507.5c2.5 17.5-9.7 33.7-27.2 36.2s-33.7-9.7-36.2-27.2L372 428.4c-1.1-7.7-5-14.7-10.9-19.8l-71.4-61.2c-21.3-18.2-33.5-44.9-33.5-72.9l0-69.3zm.1 165.8c2.4 2.3 4.8 4.6 7.4 6.8l46 39.4-2.2 7.6c-4.5 15.7-12.9 30-24.4 41.5l-68.3 68.3c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L238 421.1c3.8-3.8 6.6-8.6 8.1-13.8L256.4 371z\"]\n};\nvar faFileArrowDown = {\n  prefix: 'fas',\n  iconName: 'file-arrow-down',\n  icon: [384, 512, [\"file-download\"], \"f56d\", \"M0 64C0 28.7 28.7 0 64 0L213.5 0c17 0 33.3 6.7 45.3 18.7L365.3 125.3c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm208-5.5l0 93.5c0 13.3 10.7 24 24 24L325.5 176 208 58.5zM175 441c9.4 9.4 24.6 9.4 33.9 0l64-64c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-23 23 0-86.1c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 86.1-23-23c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l64 64z\"]\n};\nvar faFileDownload = faFileArrowDown;\nvar faPersonBooth = {\n  prefix: 'fas',\n  iconName: 'person-booth',\n  icon: [576, 512, [], \"f756\", \"M40 24A56 56 0 1 1 152 24 56 56 0 1 1 40 24zm51.1 88c23.5 0 45.5 11.3 59.1 30.4l48.7 68.2c6 8.4 15.7 13.4 26 13.4l31.1 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-31.1 0c-31 0-60.1-15-78.1-40.2l-2.8-3.9 0 80.1 41.6 31.2C209.8 373.3 224 401.8 224 432l0 80c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-80c0-10.1-4.7-19.6-12.8-25.6L70.4 348.8C46.2 330.7 32 302.2 32 272l0-100.9C32 138.5 58.5 112 91.1 112zM32 512l0-132.7c3.1 2.7 6.3 5.4 9.6 7.9L96 428 96 512c0 17.7-14.3 32-32 32s-32-14.3-32-32zm544-88l0 96c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-72-168 0c-7.1 0-13.8-3.1-18.4-8.6s-6.5-12.6-5.3-19.6l30.7-176.7-63.1-137.6 0 72c-5.2-1-10.5-1.6-16-1.6l-32 0 0-120c0-30.9 25.1-56 56-56L520 0c30.9 0 56 25.1 56 56l0 368zM288 336c5.5 0 10.8-.6 16-1.6L304 520c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-184 32 0z\"]\n};\nvar faLocust = {\n  prefix: 'fas',\n  iconName: 'locust',\n  icon: [576, 512, [], \"e520\", \"M328 32c137 0 248 111 248 248l0 40-.4 8.2C571.5 368.5 537.4 400 496 400l-12.3 0 25.2 44.1c6.6 11.5 2.6 26.2-8.9 32.8s-26.2 2.6-32.7-8.9l-38.8-67.9-80.4 0-48.2 69.7c-7.5 10.9-22.5 13.6-33.4 6.1s-13.6-22.5-6.1-33.4l29.3-42.3-74.5 0-51.7 70.2c-7.9 10.7-22.9 12.9-33.6 5.1s-12.9-22.9-5.1-33.6l40.5-55-43-16.4-79.3 100.5c-8.2 10.4-23.3 12.2-33.7 4s-12.2-23.3-4-33.7l240-304 2.1-2.3c5.2-5.1 12.5-7.5 19.9-6.6 8.4 1.1 15.6 6.5 18.9 14.3l21.7 50.7 40.9-55.5 2.1-2.4c5.1-5.3 12.5-8 20-7.2 8.5 1 15.9 6.5 19.3 14.4l41.8 97.5 64.2 0c10.2 0 20 2 29 5.5-16.4-94-98.3-165.5-197-165.5l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l16 0zM488 296a24 24 0 1 0 0 48 24 24 0 1 0 0-48zM43.5 331.1C36.2 321.4 32 309.5 32 296.8 32 265.5 57.5 240 88.9 240l27.6 0-72.9 91.1zM225.1 240l48.2 0 1.4-1.9-16.9-39.5-32.7 41.5zm107.8 0l46.7 0-17.2-40-29.5 40z\"]\n};\nvar faRightLong = {\n  prefix: 'fas',\n  iconName: 'right-long',\n  icon: [576, 512, [\"long-arrow-alt-right\"], \"f30b\", \"M566.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-128 128c-9.2 9.2-22.9 11.9-34.9 6.9S384 396.9 384 384l0-64-336 0c-26.5 0-48-21.5-48-48l0-32c0-26.5 21.5-48 48-48l336 0 0-64c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l128 128z\"]\n};\nvar faLongArrowAltRight = faRightLong;\nvar faTruckDroplet = {\n  prefix: 'fas',\n  iconName: 'truck-droplet',\n  icon: [576, 512, [], \"e58c\", \"M64 32C28.7 32 0 60.7 0 96L0 384c0 35.3 28.7 64 64 64l3.3 0c10.4 36.9 44.4 64 84.7 64s74.2-27.1 84.7-64l102.6 0c10.4 36.9 44.4 64 84.7 64s74.2-27.1 84.7-64l3.3 0c35.3 0 64-28.7 64-64l0-146.7c0-17-6.7-33.3-18.7-45.3L512 146.7c-12-12-28.3-18.7-45.3-18.7l-50.7 0 0-32c0-35.3-28.7-64-64-64L64 32zM512 237.3l0 50.7-96 0 0-96 50.7 0 45.3 45.3zM152 384a40 40 0 1 1 0 80 40 40 0 1 1 0-80zm232 40a40 40 0 1 1 80 0 40 40 0 1 1 -80 0zM208 304c-39.8 0-72-32.2-72-72 0-33.2 34.5-78 55.8-102.4 8.7-10 23.8-10 32.5 0 21.2 24.4 55.8 69.1 55.8 102.4 0 48-32.2 72-72 72z\"]\n};\nvar faHandHoldingMedical = {\n  prefix: 'fas',\n  iconName: 'hand-holding-medical',\n  icon: [576, 512, [], \"e05c\", \"M240 24c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 56 56 0c13.3 0 24 10.7 24 24l0 48c0 13.3-10.7 24-24 24l-56 0 0 56c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24l0-56-56 0c-13.3 0-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24l56 0 0-56zM66.7 384l42.5-42.5c24-24 56.6-37.5 90.5-37.5L352 304c17.7 0 32 14.3 32 32s-14.3 32-32 32l-72 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l112.6 0 119.7-88.2c17.8-13.1 42.8-9.3 55.9 8.5s9.3 42.8-8.5 55.9L433.1 485.5c-23.4 17.2-51.6 26.5-80.7 26.5L32 512c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l34.7 0z\"]\n};\nvar faHandPointLeft = {\n  prefix: 'fas',\n  iconName: 'hand-point-left',\n  icon: [512, 512, [], \"f0a5\", \"M32 96C14.3 96 0 110.3 0 128s14.3 32 32 32l208 0 0-64-208 0zM192 288c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0zm-64-64c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-48 0c-17.7 0-32 14.3-32 32zm96 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0zm88-96l-.6 0c5.4 9.4 8.6 20.3 8.6 32 0 13.2-4 25.4-10.8 35.6 24.9 8.7 42.8 32.5 42.8 60.4 0 11.7-3.1 22.6-8.6 32l8.6 0c88.4 0 160-71.6 160-160l0-61.7c0-42.4-16.9-83.1-46.9-113.1l-11.6-11.6C429.5 77.5 396.9 64 363 64l-27 0c-35.3 0-64 28.7-64 64l0 88c0 22.1 17.9 40 40 40s40-17.9 40-40l0-56c0-8.8 7.2-16 16-16s16 7.2 16 16l0 56c0 39.8-32.2 72-72 72z\"]\n};\nvar faCalculator = {\n  prefix: 'fas',\n  iconName: 'calculator',\n  icon: [384, 512, [128425], \"f1ec\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L64 0zM96 64l192 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32L96 160c-17.7 0-32-14.3-32-32l0-32c0-17.7 14.3-32 32-32zm16 168a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zm80 24a24 24 0 1 1 0-48 24 24 0 1 1 0 48zm128-24a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zM88 352a24 24 0 1 1 0-48 24 24 0 1 1 0 48zm128-24a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zm80 24a24 24 0 1 1 0-48 24 24 0 1 1 0 48zM64 424c0-13.3 10.7-24 24-24l112 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L88 448c-13.3 0-24-10.7-24-24zm232-24c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24z\"]\n};\nvar faMinus = {\n  prefix: 'fas',\n  iconName: 'minus',\n  icon: [448, 512, [8211, 8722, 10134, \"subtract\"], \"f068\", \"M0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32z\"]\n};\nvar faSubtract = faMinus;\nvar faArrowUpZA = {\n  prefix: 'fas',\n  iconName: 'arrow-up-z-a',\n  icon: [512, 512, [\"sort-alpha-up-alt\"], \"f882\", \"M150.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-80 80c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L96 141.3 96 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-306.7 25.4 25.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-80-80zM288 64c0 17.7 14.3 32 32 32l50.7 0-73.4 73.4c-9.2 9.2-11.9 22.9-6.9 34.9S307.1 224 320 224l128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-50.7 0 73.4-73.4c9.2-9.2 11.9-22.9 6.9-34.9S461 32 448 32L320 32c-17.7 0-32 14.3-32 32zM412.6 273.7C407.2 262.8 396.1 256 384 256s-23.2 6.8-28.6 17.7l-80 160c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3l7.2-14.3 88.4 0 7.2 14.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9l-80-160zM384 359.6l20.2 40.4-40.4 0 20.2-40.4z\"]\n};\nvar faSortAlphaUpAlt = faArrowUpZA;\nvar faMicrophoneSlash = {\n  prefix: 'fas',\n  iconName: 'microphone-slash',\n  icon: [576, 512, [], \"f131\", \"M41-24.9c-9.4-9.4-24.6-9.4-33.9 0S-2.3-.3 7 9.1l528 528c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L424.7 358.8C458.9 324.2 480 276.6 480 224l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 39.3-15.7 74.9-41.3 100.9L356.8 291C373.6 273.7 384 250 384 224l0-128c0-53-43-96-96-96s-96 43-96 96l0 30.2-151-151zm298.3 434l-41.4-41.4c-3.3 .2-6.5 .3-9.8 .3-79.5 0-144-64.5-144-144l0-10.2-43.6-43.6c-2.8 3.9-4.4 8.7-4.4 13.8l0 40c0 97.9 73.3 178.7 168 190.5l0 49.5-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-49.5c9.3-1.2 18.4-3 27.3-5.4z\"]\n};\nvar faSquarePen = {\n  prefix: 'fas',\n  iconName: 'square-pen',\n  icon: [448, 512, [\"pen-square\", \"pencil-square\"], \"f14b\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM325.8 139.7l14.4 14.4c15.6 15.6 15.6 40.9 0 56.6l-23.8 23.8-71-71 23.8-23.8c15.6-15.6 40.9-15.6 56.6 0zM119.9 289l91.5-91.6 71 71-91.6 91.5c-4.1 4.1-9.2 7-14.9 8.4l-60.1 15c-5.5 1.4-11.2-.2-15.2-4.2s-5.6-9.7-4.2-15.2l15-60.1c1.4-5.6 4.3-10.8 8.4-14.9z\"]\n};\nvar faPenSquare = faSquarePen;\nvar faPencilSquare = faSquarePen;\nvar faHandFist = {\n  prefix: 'fas',\n  iconName: 'hand-fist',\n  icon: [384, 512, [9994, \"fist-raised\"], \"f6de\", \"M160 0c17.7 0 32 14.3 32 32l0 112-64 0 0-112c0-17.7 14.3-32 32-32zM32 64c0-17.7 14.3-32 32-32S96 46.3 96 64l0 80-64 0 0-80zm192 0c0-17.7 14.3-32 32-32s32 14.3 32 32l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96zm96 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zm-96 88l0-.6c9.4 5.4 20.3 8.6 32 8.6 13.2 0 25.4-4 35.6-10.8 8.7 24.9 32.5 42.8 60.4 42.8 11.7 0 22.6-3.1 32-8.6l0 8.6c0 52.3-25.1 98.8-64 128l0 96c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-78.4c-17.3-7.9-33.2-18.8-46.9-32.5L37.5 357.5C13.5 333.5 0 300.9 0 267l0-27c0-35.3 28.7-64 64-64l88 0c22.1 0 40 17.9 40 40s-17.9 40-40 40l-56 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l56 0c39.8 0 72-32.2 72-72z\"]\n};\nvar faFistRaised = faHandFist;\nvar faCommentSms = {\n  prefix: 'fas',\n  iconName: 'comment-sms',\n  icon: [512, 512, [\"sms\"], \"f7cd\", \"M256 480c141.4 0 256-107.5 256-240S397.4 0 256 0 0 107.5 0 240c0 54.3 19.2 104.3 51.6 144.5L2.8 476.8c-4.8 9-3.3 20 3.6 27.5s17.8 9.8 27.1 5.8l118.4-50.7C183.7 472.6 218.9 480 256 480zM140.8 172.8l19.2 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-19.2 0c-5.3 0-9.6 4.3-9.6 9.6s4.3 9.6 9.6 9.6c23 0 41.6 18.6 41.6 41.6s-18.6 41.6-41.6 41.6l-25.6 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l25.6 0c5.3 0 9.6-4.3 9.6-9.6s-4.3-9.6-9.6-9.6c-23 0-41.6-18.6-41.6-41.6s18.6-41.6 41.6-41.6zm188.8 41.6c0-23 18.6-41.6 41.6-41.6l19.2 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-19.2 0c-5.3 0-9.6 4.3-9.6 9.6s4.3 9.6 9.6 9.6c23 0 41.6 18.6 41.6 41.6s-18.6 41.6-41.6 41.6l-25.6 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l25.6 0c5.3 0 9.6-4.3 9.6-9.6s-4.3-9.6-9.6-9.6c-23 0-41.6-18.6-41.6-41.6zm-98.3-33.8l24.7 41.1 24.7-41.1c3.7-6.2 11.1-9.1 18-7.2s11.7 8.2 11.7 15.4l0 102.4c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-44.6-8.7 14.5c-2.9 4.8-8.1 7.8-13.7 7.8s-10.8-3-13.7-7.8l-8.7-14.5 0 44.6c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-102.4c0-7.2 4.8-13.5 11.7-15.4s14.3 1 18 7.2z\"]\n};\nvar faSms = faCommentSms;\nvar faSimCard = {\n  prefix: 'fas',\n  iconName: 'sim-card',\n  icon: [384, 512, [], \"f7c4\", \"M0 64C0 28.7 28.7 0 64 0L258.7 0c17 0 33.3 6.7 45.3 18.7L365.3 80c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zM96 256c-17.7 0-32 14.3-32 32l0 40 128 0 0-72-96 0zM64 416c0 17.7 14.3 32 32 32l48 0 0-72-80 0 0 40zm256 0l0-40-128 0 0 72 96 0c17.7 0 32-14.3 32-32zm0-128c0-17.7-14.3-32-32-32l-48 0 0 72 80 0 0-40z\"]\n};\nvar faScaleBalanced = {\n  prefix: 'fas',\n  iconName: 'scale-balanced',\n  icon: [640, 512, [9878, \"balance-scale\"], \"f24e\", \"M384 32l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L398.4 96c-5.2 25.8-22.9 47.1-46.4 57.3l0 294.7 160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-384 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l160 0 0-294.7c-23.5-10.3-41.2-31.6-46.4-57.3L128 96c-17.7 0-32-14.3-32-32s14.3-32 32-32l128 0c14.6-19.4 37.8-32 64-32s49.4 12.6 64 32zm55.6 288L584.4 320 512 195.8 439.6 320zM512 416c-62.9 0-115.2-34-126-78.9-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1-10.8 44.8-63.1 78.9-126 78.9zM126.8 195.8L54.4 320 199.3 320 126.8 195.8zM.9 337.1c-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1-10.8 44.8-63.1 78.9-126 78.9S11.7 382 .9 337.1z\"]\n};\nvar faBalanceScale = faScaleBalanced;\nvar faCar = {\n  prefix: 'fas',\n  iconName: 'car',\n  icon: [512, 512, [128664, \"automobile\"], \"f1b9\", \"M135.2 117.4l-26.1 74.6 293.8 0-26.1-74.6C372.3 104.6 360.2 96 346.6 96L165.4 96c-13.6 0-25.7 8.6-30.2 21.4zM39.6 196.8L74.8 96.3C88.3 57.8 124.6 32 165.4 32l181.2 0c40.8 0 77.1 25.8 90.6 64.3l35.2 100.5c23.2 9.6 39.6 32.5 39.6 59.2l0 192c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-32-320 0 0 32c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32L0 256c0-26.7 16.4-49.6 39.6-59.2zM128 304a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm288 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nvar faAutomobile = faCar;\nvar faCropSimple = {\n  prefix: 'fas',\n  iconName: 'crop-simple',\n  icon: [512, 512, [\"crop-alt\"], \"f565\", \"M128 32c0-17.7-14.3-32-32-32S64 14.3 64 32l0 32-32 0C14.3 64 0 78.3 0 96s14.3 32 32 32l32 0 0 256c0 35.3 28.7 64 64 64l208 0 0-64-208 0 0-352zM384 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-256c0-35.3-28.7-64-64-64l-208 0 0 64 208 0 0 352z\"]\n};\nvar faCropAlt = faCropSimple;\nvar faMedal = {\n  prefix: 'fas',\n  iconName: 'medal',\n  icon: [448, 512, [127941], \"f5a2\", \"M224.3 128L139.7-12.9c-6.5-10.8-20.1-14.7-31.3-9.1L21.8 21.3C9.9 27.2 5.1 41.6 11 53.5L80.6 192.6c-30.1 33.9-48.3 78.5-48.3 127.4 0 106 86 192 192 192s192-86 192-192c0-48.9-18.3-93.5-48.3-127.4L437.6 53.5c5.9-11.9 1.1-26.3-10.7-32.2L340.2-22.1c-11.2-5.6-24.9-1.6-31.3 9.1L224.3 128zm30.8 142.5c1.4 2.8 4 4.7 7 5.1l50.1 7.3c7.7 1.1 10.7 10.5 5.2 16l-36.3 35.4c-2.2 2.2-3.2 5.2-2.7 8.3l8.6 49.9c1.3 7.6-6.7 13.5-13.6 9.9l-44.8-23.6c-2.7-1.4-6-1.4-8.7 0l-44.8 23.6c-6.9 3.6-14.9-2.2-13.6-9.9l8.6-49.9c.5-3-.5-6.1-2.7-8.3l-36.3-35.4c-5.6-5.4-2.5-14.8 5.2-16l50.1-7.3c3-.4 5.7-2.4 7-5.1l22.4-45.4c3.4-7 13.3-7 16.8 0l22.4 45.4z\"]\n};\nvar faScroll = {\n  prefix: 'fas',\n  iconName: 'scroll',\n  icon: [576, 512, [128220], \"f70e\", \"M0 112C0 70.5 31.6 36.4 72 32.4l0-.4 280 0c53 0 96 43 96 96l0 176-176 0c-39.8 0-72 32.2-72 72l0 60c0 24.3-19.7 44-44 44s-44-19.7-44-44l0-228-64 0c-26.5 0-48-21.5-48-48l0-48zM236.8 480c7.1-13.1 11.2-28.1 11.2-44l0-60c0-13.3 10.7-24 24-24l248 0c13.3 0 24 10.7 24 24l0 24c0 44.2-35.8 80-80 80l-227.2 0zM80 80c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32z\"]\n};\nvar faFileExcel = {\n  prefix: 'fas',\n  iconName: 'file-excel',\n  icon: [384, 512, [], \"f1c3\", \"M0 64C0 28.7 28.7 0 64 0L213.5 0c17 0 33.3 6.7 45.3 18.7L365.3 125.3c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm208-5.5l0 93.5c0 13.3 10.7 24 24 24L325.5 176 208 58.5zM164 266.7c-7.4-11-22.3-14-33.3-6.7s-14 22.3-6.7 33.3L163.2 352 124 410.7c-7.4 11-4.4 25.9 6.7 33.3s25.9 4.4 33.3-6.7l28-42 28 42c7.4 11 22.3 14 33.3 6.7s14-22.3 6.7-33.3L220.8 352 260 293.3c7.4-11 4.4-25.9-6.7-33.3s-25.9-4.4-33.3 6.7l-28 42-28-42z\"]\n};\nvar faFilter = {\n  prefix: 'fas',\n  iconName: 'filter',\n  icon: [512, 512, [], \"f0b0\", \"M32 64C19.1 64 7.4 71.8 2.4 83.8S.2 109.5 9.4 118.6L192 301.3 192 416c0 8.5 3.4 16.6 9.4 22.6l64 64c9.2 9.2 22.9 11.9 34.9 6.9S320 492.9 320 480l0-178.7 182.6-182.6c9.2-9.2 11.9-22.9 6.9-34.9S492.9 64 480 64L32 64z\"]\n};\nvar faDrum = {\n  prefix: 'fas',\n  iconName: 'drum',\n  icon: [512, 512, [129345], \"f569\", \"M501.2 76.1c11.1-7.3 14.2-22.1 6.9-33.2s-22.1-14.2-33.2-6.9L370.2 104.5C335.8 98.7 297 96 256 96 114.6 96 0 128 0 208L0 368c0 31.3 27.4 58.8 72 78.7L72 344c0-13.3 10.7-24 24-24s24 10.7 24 24l0 119.4c33 8.9 71.1 14.5 112 16.1L232 376c0-13.3 10.7-24 24-24s24 10.7 24 24l0 103.5c40.9-1.6 79-7.2 112-16.1L392 344c0-13.3 10.7-24 24-24s24 10.7 24 24l0 102.7c44.6-19.9 72-47.4 72-78.7l0-160c0-41.1-30.2-69.5-78.8-87.4l67.9-44.5zM307.4 145.6l-64.6 42.3c-11.1 7.3-14.2 22.1-6.9 33.2s22.1 14.2 33.2 6.9l111.1-72.8c14.7 3.2 27.9 7 39.4 11.5 38.8 15.1 44.4 30.6 44.4 41.3 0 .8-2.7 17.2-46 35.9-38.9 16.8-96 28.1-162 28.1S132.9 260.7 94 243.9c-43.3-18.7-46-35.1-46-35.9 0-10.6 5.6-26.2 44.4-41.3 38.3-14.9 95.4-22.7 163.6-22.7 18 0 35.1 .5 51.4 1.6z\"]\n};\nvar faMapPin = {\n  prefix: 'fas',\n  iconName: 'map-pin',\n  icon: [320, 512, [128205], \"f276\", \"M192 284.4C256.1 269.9 304 212.5 304 144 304 64.5 239.5 0 160 0S16 64.5 16 144c0 68.5 47.9 125.9 112 140.4L128 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-195.6zM168 96c-30.9 0-56 25.1-56 56 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-57.4 46.6-104 104-104 13.3 0 24 10.7 24 24s-10.7 24-24 24z\"]\n};\nvar faScaleUnbalancedFlip = {\n  prefix: 'fas',\n  iconName: 'scale-unbalanced-flip',\n  icon: [640, 512, [\"balance-scale-right\"], \"f516\", \"M118.2 62.4C101.5 56.8 92.4 38.6 98 21.9S121.7-3.9 138.5 1.6l113 37.7c13.9-23.5 39.6-39.3 68.9-39.3 44.2 0 80 35.8 80 80 0 3-.2 5.9-.5 8.8l122.6 40.9c16.8 5.6 25.8 23.7 20.2 40.5s-23.7 25.8-40.5 20.2L366.7 145.2c-4.5 3.2-9.3 5.9-14.4 8.2l0 326.7c0 17.7-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l160 0 0-294.7c-21-9.2-37.2-27-44.2-49l-125.9-42zM200.8 288L128.3 163.8 55.9 288 200.8 288zm-72.4 96c-62.9 0-115.2-34-126-78.9-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1-10.8 44.8-63.1 78.9-126 78.9zm382.8-92.2l-72.4 124.2 144.9 0-72.4-124.2zm126 141.3C626.4 478 574.1 512 511.2 512s-115.2-34-126-78.9c-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1z\"]\n};\nvar faBalanceScaleRight = faScaleUnbalancedFlip;\nvar faArrowsToCircle = {\n  prefix: 'fas',\n  iconName: 'arrows-to-circle',\n  icon: [512, 512, [], \"e4bd\", \"M9.4 9.4C21.9-3.1 42.1-3.1 54.6 9.4L128 82.7 128 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l18.7 0-73.4-73.4C-3.1 42.1-3.1 21.9 9.4 9.4zM200 256a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zM502.6 54.6L429.3 128 448 128c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32s32 14.3 32 32l0 18.7 73.4-73.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zm-45.3 448L384 429.3 384 448c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-18.7 0 73.4 73.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0zM9.4 457.4L82.7 384 64 384c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-18.7-73.4 73.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3z\"]\n};\nvar faEnvelope = {\n  prefix: 'fas',\n  iconName: 'envelope',\n  icon: [512, 512, [128386, 9993, 61443], \"f0e0\", \"M48 64c-26.5 0-48 21.5-48 48 0 15.1 7.1 29.3 19.2 38.4l208 156c17.1 12.8 40.5 12.8 57.6 0l208-156c12.1-9.1 19.2-23.3 19.2-38.4 0-26.5-21.5-48-48-48L48 64zM0 196L0 384c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-188-198.4 148.8c-34.1 25.6-81.1 25.6-115.2 0L0 196z\"]\n};\nvar faBaby = {\n  prefix: 'fas',\n  iconName: 'baby',\n  icon: [384, 512, [], \"f77c\", \"M120 88a72 72 0 1 1 144 0 72 72 0 1 1 -144 0zM7.7 144.5c13-17.9 38-21.8 55.9-8.8L99.8 162c26.8 19.5 59.1 30 92.2 30s65.4-10.5 92.2-30l36.2-26.4c17.9-13 42.9-9 55.9 8.8s9 42.9-8.8 55.9l-36.2 26.4c-13.6 9.9-28.1 18.2-43.3 25l0 36.3-192 0 0-36.3c-15.2-6.7-29.7-15.1-43.3-25L16.5 200.3c-17.9-13-21.8-38-8.8-55.9zM97.5 329.3l60.6 53-26 37.2 24.3 24.3c15.6 15.6 15.6 40.9 0 56.6s-40.9 15.6-56.6 0l-48-48C38 438.6 36.1 417 47.2 401.1l50.2-71.8zm128.5 53l60.6-53 50.2 71.8c11.1 15.9 9.2 37.5-4.5 51.2l-48 48c-15.6 15.6-40.9 15.6-56.6 0s-15.6-40.9 0-56.6l24.3-24.3-26-37.2z\"]\n};\nvar faSquareCaretDown = {\n  prefix: 'fas',\n  iconName: 'square-caret-down',\n  icon: [448, 512, [\"caret-square-down\"], \"f150\", \"M384 480c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0zM224 352c-6.7 0-13-2.8-17.6-7.7l-104-112c-6.5-7-8.2-17.2-4.4-25.9S110.5 192 120 192l208 0c9.5 0 18.2 5.7 22 14.4s2.1 18.9-4.4 25.9l-104 112c-4.5 4.9-10.9 7.7-17.6 7.7z\"]\n};\nvar faCaretSquareDown = faSquareCaretDown;\nvar faTent = {\n  prefix: 'fas',\n  iconName: 'tent',\n  icon: [512, 512, [], \"e57d\", \"M26.9 206.9L3.7 444.9C1.8 463.7 16.6 480 35.5 480l172.7 0c26.5 0 48-21.5 48-48l0-129c0-8.3 6.7-15 15-15 5.5 0 10.6 3 13.2 7.9l86.1 159c8.4 15.5 24.6 25.1 42.2 25.1l64.1 0c18.9 0 33.7-16.3 31.8-35.1L485.6 207.1c-1.9-19.6-12.8-37.3-29.5-47.8L280.9 48.3c-15.7-10-35.8-9.9-51.5 .1L56.1 159.2c-16.5 10.6-27.3 28.2-29.2 47.7z\"]\n};\nvar faA = {\n  prefix: 'fas',\n  iconName: 'a',\n  icon: [384, 512, [97], \"41\", \"M221.5 51.7C216.6 39.8 204.9 32 192 32s-24.6 7.8-29.5 19.7c-93.3 224-146.7 352-160 384-6.8 16.3 .9 35 17.2 41.8s35-.9 41.8-17.2l31.8-76.3 197.3 0 31.8 76.3c6.8 16.3 25.5 24 41.8 17.2s24-25.5 17.2-41.8c-13.3-32-66.7-160-160-384zM264 320l-144 0 72-172.8 72 172.8z\"]\n};\nvar faParachuteBox = {\n  prefix: 'fas',\n  iconName: 'parachute-box',\n  icon: [512, 512, [], \"f4cd\", \"M128 224C128 152.2 144.3 88.4 169.5 43.4 195.1-2.4 226.6-24 256-24s60.9 21.6 86.5 67.4C367.7 88.4 384 152.2 384 224l-104 0 0 96 8 0c9.3 0 18.1 2 26 5.5l118.4-101.5-.5 0c0-78.4-17.7-150.6-47.6-204-6.1-11-12.9-21.3-20.3-30.9 86.5 35.9 147.8 115.1 147.8 218.9 0 7-3.1 13.7-8.4 18.2L347.4 360.1c3 7.4 4.6 15.4 4.6 23.9l0 64c0 35.3-28.7 64-64 64l-64 0c-35.3 0-64-28.7-64-64l0-64c0-8.4 1.6-16.5 4.6-23.9L8.4 226.2C3.1 221.7 0 215 0 208 0 104.2 61.3 24.9 147.8-10.9 140.5-1.4 133.7 9 127.6 20 97.7 73.4 80 145.6 80 224l-.5 0 118.4 101.5c8-3.5 16.8-5.5 26-5.5l8 0 0-96-104 0z\"]\n};\nvar faCartArrowDown = {\n  prefix: 'fas',\n  iconName: 'cart-arrow-down',\n  icon: [640, 512, [], \"f218\", \"M0 8C0-5.3 10.7-16 24-16l45.3 0c27.1 0 50.3 19.4 55.1 46l.4 2 187.2 0 0 102.1-31-31c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l72 72c9.4 9.4 24.6 9.4 33.9 0l72-72c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-31 31 0-102.1 177.4 0c20 0 35.1 18.2 31.4 37.9L537.8 235.8c-5.7 30.3-32.1 52.2-62.9 52.2l-303.6 0 5.1 28.3c2.1 11.4 12 19.7 23.6 19.7L456 336c13.3 0 24 10.7 24 24s-10.7 24-24 24l-255.9 0c-34.8 0-64.6-24.9-70.8-59.1L77.2 38.6c-.7-3.8-4-6.6-7.9-6.6L24 32C10.7 32 0 21.3 0 8zM160 464a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm224 0a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\"]\n};\nvar faBridgeCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'bridge-circle-exclamation',\n  icon: [576, 512, [], \"e4ca\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l8 0 0 64-40 0 0 112c37.6 9.4 64 43.2 64 82l0 94c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-64c0-53 43-96 96-96 6.4 0 12.7 .6 18.7 1.8 34.7-49.5 92.2-81.8 157.3-81.8 28.6 0 55.6 6.2 80 17.4l0-65.4-40 0 0-64 8 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zM424 96l0 64-80 0 0-64 80 0zM296 96l0 64-80 0 0-64 80 0zM88 96l80 0 0 64-80 0 0-64zM432 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-100a20 20 0 1 1 0 40 20 20 0 1 1 0-40zm0-140c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nvar faCloudArrowUp = {\n  prefix: 'fas',\n  iconName: 'cloud-arrow-up',\n  icon: [576, 512, [62338, \"cloud-upload\", \"cloud-upload-alt\"], \"f0ee\", \"M144 480c-79.5 0-144-64.5-144-144 0-63.4 41-117.2 97.9-136.5-1.3-7.7-1.9-15.5-1.9-23.5 0-79.5 64.5-144 144-144 55.4 0 103.5 31.3 127.6 77.1 14.2-8.3 30.8-13.1 48.4-13.1 53 0 96 43 96 96 0 15.7-3.8 30.6-10.5 43.7 44 20.3 74.5 64.7 74.5 116.3 0 70.7-57.3 128-128 128l-304 0zM305 191c-9.4-9.4-24.6-9.4-33.9 0l-72 72c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l31-31 0 102.1c0 13.3 10.7 24 24 24s24-10.7 24-24l0-102.1 31 31c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-72-72z\"]\n};\nvar faCloudUpload = faCloudArrowUp;\nvar faCloudUploadAlt = faCloudArrowUp;\nvar faAt = {\n  prefix: 'fas',\n  iconName: 'at',\n  icon: [512, 512, [61946], \"40\", \"M256 64C150 64 64 150 64 256s86 192 192 192c17.7 0 32 14.3 32 32s-14.3 32-32 32C114.6 512 0 397.4 0 256S114.6 0 256 0 512 114.6 512 256l0 32c0 53-43 96-96 96-29.3 0-55.6-13.2-73.2-33.9-22.8 21-53.3 33.9-86.8 33.9-70.7 0-128-57.3-128-128s57.3-128 128-128c27.9 0 53.7 8.9 74.7 24.1 5.7-5 13.1-8.1 21.3-8.1 17.7 0 32 14.3 32 32l0 112c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32c0-106-86-192-192-192zm64 192a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"]\n};\nvar faIndianRupeeSign = {\n  prefix: 'fas',\n  iconName: 'indian-rupee-sign',\n  icon: [320, 512, [\"indian-rupee\", \"inr\"], \"e1bc\", \"M0 64C0 46.3 14.3 32 32 32l264 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-76.7 0c17.7 19.8 30.1 44.6 34.7 72l42 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-42 0c-10.4 62.2-60.8 110.9-123.8 118.9L274.6 422c14.4 10.3 17.7 30.3 7.4 44.6s-30.3 17.7-44.6 7.4L13.4 314C2.1 306-2.7 291.5 1.5 278.2S18.1 256 32 256l80 0c35.8 0 66.1-23.5 76.3-56L24 200c-13.3 0-24-10.7-24-24s10.7-24 24-24l164.3 0c-10.2-32.5-40.5-56-76.3-56L32 96C14.3 96 0 81.7 0 64z\"]\n};\nvar faIndianRupee = faIndianRupeeSign;\nvar faInr = faIndianRupeeSign;\nvar faTruck = {\n  prefix: 'fas',\n  iconName: 'truck',\n  icon: [576, 512, [128666, 9951], \"f0d1\", \"M0 96C0 60.7 28.7 32 64 32l288 0c35.3 0 64 28.7 64 64l0 32 50.7 0c17 0 33.3 6.7 45.3 18.7L557.3 192c12 12 18.7 28.3 18.7 45.3L576 384c0 35.3-28.7 64-64 64l-3.3 0c-10.4 36.9-44.4 64-84.7 64s-74.2-27.1-84.7-64l-102.6 0c-10.4 36.9-44.4 64-84.7 64s-74.2-27.1-84.7-64L64 448c-35.3 0-64-28.7-64-64L0 96zM512 288l0-50.7-45.3-45.3-50.7 0 0 96 96 0zM192 424a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zm232 40a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"]\n};\nvar faChalkboardUser = {\n  prefix: 'fas',\n  iconName: 'chalkboard-user',\n  icon: [640, 512, [\"chalkboard-teacher\"], \"f51c\", \"M192 384c53 0 96 43 96 96 0 17.7-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32 0-53 43-96 96-96l96 0zM544 32c35.3 0 64 28.7 64 64l0 288c0 33.1-25.2 60.4-57.5 63.7l-6.5 .3-211.1 0c-5.1-24.2-16.3-46.1-32.1-64l51.2 0 0-32c0-17.7 14.3-32 32-32l96 0c17.7 0 32 14.3 32 32l0 32 32 0 0-288-352 0 0 57.3c-14.8-6-31-9.3-48-9.3-5.4 0-10.8 .3-16 1l0-49c0-35.3 28.7-64 64-64l352 0zM144 352a80 80 0 1 1 0-160 80 80 0 1 1 0 160z\"]\n};\nvar faChalkboardTeacher = faChalkboardUser;\nvar faUserCheck = {\n  prefix: 'fas',\n  iconName: 'user-check',\n  icon: [640, 512, [], \"f4fc\", \"M286 304c98.5 0 178.3 79.8 178.3 178.3 0 16.4-13.3 29.7-29.7 29.7L78 512c-16.4 0-29.7-13.3-29.7-29.7 0-98.5 79.8-178.3 178.3-178.3l59.4 0zM585.7 105.9c7.8-10.7 22.8-13.1 33.5-5.3s13.1 22.8 5.3 33.5L522.1 274.9c-4.2 5.7-10.7 9.4-17.7 9.8s-14-2.2-18.9-7.3l-46.4-48c-9.2-9.5-9-24.7 .6-33.9 9.5-9.2 24.7-8.9 33.9 .6l26.5 27.4 85.6-117.7zM256.3 248a120 120 0 1 1 0-240 120 120 0 1 1 0 240z\"]\n};\nvar faUserNinja = {\n  prefix: 'fas',\n  iconName: 'user-ninja',\n  icon: [448, 512, [129399], \"f504\", \"M352 128c0 70.7-57.3 128-128 128-57.2 0-105.6-37.5-122-89.3-1.1 1.3-2.2 2.6-3.5 3.8-15.8 15.8-38.8 20.7-53.6 22.1-8.1 .8-14.6-5.7-13.8-13.8 1.4-14.7 6.3-37.8 22.1-53.6 5.8-5.8 12.6-10.1 19.6-13.4-7-3.2-13.8-7.6-19.6-13.4-15.8-15.8-20.7-38.8-22.1-53.6-.8-8.1 5.7-14.6 13.8-13.8 14.7 1.4 37.8 6.3 53.6 22.1 4.8 4.8 8.7 10.4 11.7 16.1 21.3-41.2 64.3-69.4 113.8-69.4 70.7 0 128 57.3 128 128zM144 112c0 8.8 7.2 16 16 16l128 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L160 96c-8.8 0-16 7.2-16 16zm-1.4 211l67 50.2c8.5 6.4 20.3 6.4 28.8 0l67-50.2c6.5-4.9 15.2-6.2 22.6-2.8 61.4 28.2 104.1 90.2 104.1 162.1 0 16.4-13.3 29.7-29.7 29.7L45.7 512c-16.4 0-29.7-13.3-29.7-29.7 0-72 42.7-134 104.1-162.1 7.4-3.4 16.1-2.1 22.6 2.8z\"]\n};\nvar faPlantWilt = {\n  prefix: 'fas',\n  iconName: 'plant-wilt',\n  icon: [512, 512, [], \"e5aa\", \"M344-32c66.3 0 120 53.7 120 120l0 6.2c29.3 12.2 48 41.3 48 76.9 0 27.9-25.3 74.8-66 111.7-3.8 3.5-8.8 5.3-14 5.3s-10.2-1.8-14-5.3c-40.7-36.8-66-83.7-66-111.7 0-35.6 18.7-64.7 48-76.9l0-6.2c0-30.9-25.1-56-56-56s-56 25.1-56 56l0 424c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-296c0-30.9-25.1-56-56-56s-56 25.1-56 56l0 38.2c29.3 12.2 48 41.3 48 76.9 0 27.9-25.3 74.8-66 111.7-3.8 3.5-8.8 5.3-14 5.3s-10.2-1.8-14-5.3C25.3 405.9 0 359 0 331.1 0 295.4 18.7 266.4 48 254.2L48 216c0-66.3 53.7-120 120-120 20.2 0 39.3 5 56 13.8L224 88c0-66.3 53.7-120 120-120z\"]\n};\nvar faWeightScale = {\n  prefix: 'fas',\n  iconName: 'weight-scale',\n  icon: [448, 512, [\"weight\"], \"f496\", \"M116.6 192c-3-10.1-4.6-20.9-4.6-32 0-61.9 50.1-112 112-112S336 98.1 336 160c0 11.1-1.6 21.9-4.6 32l-71 0 24.6-44.3c6.4-11.6 2.3-26.2-9.3-32.6s-26.2-2.3-32.6 9.3l-37.6 67.7-88.8 0zM128 32L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-64 0C293.3 11.9 260 0 224 0s-69.3 11.9-96 32z\"]\n};\nvar faWeight = faWeightScale;\nvar faCaretRight = {\n  prefix: 'fas',\n  iconName: 'caret-right',\n  icon: [256, 512, [], \"f0da\", \"M249.3 235.8c10.2 12.6 9.5 31.1-2.2 42.8l-128 128c-9.2 9.2-22.9 11.9-34.9 6.9S64.5 396.9 64.5 384l0-256c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l128 128 2.2 2.4z\"]\n};\nvar faFlorinSign = {\n  prefix: 'fas',\n  iconName: 'florin-sign',\n  icon: [384, 512, [], \"e184\", \"M314.7 32c-38.8 0-73.7 23.3-88.6 59.1L170.7 224 64 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l80 0-45.1 108.3c-5 11.9-16.6 19.7-29.5 19.7L32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l37.3 0c38.8 0 73.7-23.3 88.6-59.1L213.3 288 320 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-80 0 45.1-108.3c5-11.9 16.6-19.7 29.5-19.7L352 96c17.7 0 32-14.3 32-32s-14.3-32-32-32l-37.3 0z\"]\n};\nvar faBell = {\n  prefix: 'fas',\n  iconName: 'bell',\n  icon: [448, 512, [128276, 61602], \"f0f3\", \"M224 0c-17.7 0-32 14.3-32 32l0 3.2C119 50 64 114.6 64 192l0 21.7c0 48.1-16.4 94.8-46.4 132.4L7.8 358.3C2.7 364.6 0 372.4 0 380.5 0 400.1 15.9 416 35.5 416l376.9 0c19.6 0 35.5-15.9 35.5-35.5 0-8.1-2.7-15.9-7.8-22.2l-9.8-12.2C400.4 308.5 384 261.8 384 213.7l0-21.7c0-77.4-55-142-128-156.8l0-3.2c0-17.7-14.3-32-32-32zM162 464c7.1 27.6 32.2 48 62 48s54.9-20.4 62-48l-124 0z\"]\n};\nvar faLariSign = {\n  prefix: 'fas',\n  iconName: 'lari-sign',\n  icon: [384, 512, [], \"e1c8\", \"M144 0c13.3 0 24 10.7 24 24l0 41.5c7.9-1 15.9-1.5 24-1.5s16.1 .5 24 1.5L216 24c0-13.3 10.7-24 24-24s24 10.7 24 24l0 54c58.9 23.8 103.2 76 116.2 139.7 3.5 17.3-7.7 34.2-25 37.7s-34.2-7.7-37.7-25c-6.7-33.2-26.4-61.8-53.4-80.2l0 81.8c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-101.8c-7.8-1.5-15.8-2.2-24-2.2s-16.2 .8-24 2.2L168 232c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-81.8c-33.8 23-56 61.9-56 105.8 0 70.7 57.3 128 128 128l160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l16.9 0C18.5 350 0 305.2 0 256 0 175.4 49.6 106.4 120 78l0-54c0-13.3 10.7-24 24-24z\"]\n};\nvar faMillSign = {\n  prefix: 'fas',\n  iconName: 'mill-sign',\n  icon: [384, 512, [], \"e1ed\", \"M297-22.2c12.3 5 18.2 19 13.2 31.3l-29 71.3C338.8 85.1 384 133.3 384 192l0 208c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-208c0-26.5-21.5-48-48-48-6.4 0-12.5 1.2-18 3.5l-30 73.8 0 178.7c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-21.2-57.8 142.2c-5 12.3-19 18.2-31.3 13.2s-18.2-19-13.2-31.3L160 251.3 160 192c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 208c0 17.7-14.3 32-32 32S0 417.7 0 400L0 112c0-17.7 14.3-32 32-32 10.9 0 20.5 5.4 26.3 13.7 16-8.7 34.3-13.7 53.7-13.7 31.3 0 59.7 12.9 80 33.6 9.6-9.8 20.9-17.8 33.5-23.5L265.8-9c5-12.3 19-18.2 31.3-13.2z\"]\n};\nvar faPersonSnowboarding = {\n  prefix: 'fas',\n  iconName: 'person-snowboarding',\n  icon: [576, 512, [127938, \"snowboarding\"], \"f7ce\", \"M424.5 16a56 56 0 1 1 0 112 56 56 0 1 1 0-112zM166.4 45.5c10.2-14.4 30.2-17.9 44.6-7.7l272 192c14.4 10.2 17.9 30.2 7.7 44.6s-30.2 17.9-44.6 7.7l-92.2-65.1-62.2 53.3 32.1 26.7c18.2 15.2 28.8 37.7 28.8 61.5l0 87.8 77.5 15.2c6.2 1.2 12.6 .9 18.7-.8l41.2-11.8c12.7-3.6 26 3.7 29.7 16.5s-3.7 26-16.5 29.7l-41.2 11.8c-13.4 3.8-27.4 4.4-41.1 1.8L87.1 443.3c-17.2-3.4-33-11.8-45.3-24.1L15.5 393c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l26.2 26.2c5.6 5.6 12.8 9.4 20.6 11l64.2 12.6 0-123.7c0-27.7 12-54 32.8-72.2l69-60.4-88.2-62.3C159.6 80 156.2 60 166.4 45.5zm58.1 375.7l64 12.5 0-75.3c0-4.7-2.1-9.3-5.8-12.3l-58.2-48.5 0 123.6z\"]\n};\nvar faSnowboarding = faPersonSnowboarding;\nvar faTty = {\n  prefix: 'fas',\n  iconName: 'tty',\n  icon: [512, 512, [\"teletype\"], \"f1e4\", \"M450.2 266.8c15.8 6.5 34.1 .3 42.6-14.6l2.4-4.2c27.9-48.9 23.6-118.8-31.3-154.5-126-82-289.6-82-415.6 0-54.9 35.7-59.3 105.7-31.3 154.5l2.4 4.2c8.5 14.9 26.7 21.1 42.6 14.6l81.9-33.7c13.9-5.7 22.4-19.9 20.9-34.9l-5.1-51c62.5-21 130.8-19.9 192.6 3.3l-4.8 47.7c-1.5 15 7 29.2 20.9 34.9l81.9 33.7zM32 352a32 32 0 1 0 64 0 32 32 0 1 0 -64 0zm96 0a32 32 0 1 0 64 0 32 32 0 1 0 -64 0zM64 416a32 32 0 1 0 0 64 32 32 0 1 0 0-64zm352 32a32 32 0 1 0 64 0 32 32 0 1 0 -64 0zM256 320a32 32 0 1 0 0 64 32 32 0 1 0 0-64zm64 32a32 32 0 1 0 64 0 32 32 0 1 0 -64 0zm128-32a32 32 0 1 0 0 64 32 32 0 1 0 0-64zM128 448c0 17.7 14.3 32 32 32l192 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-192 0c-17.7 0-32 14.3-32 32z\"]\n};\nvar faTeletype = faTty;\nvar faUsersRectangle = {\n  prefix: 'fas',\n  iconName: 'users-rectangle',\n  icon: [576, 512, [], \"e594\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm224 72a56 56 0 1 1 0 112 56 56 0 1 1 0-112zm0 152c53 0 96 43 96 96l0 24c0 13.3-10.7 24-24 24l-144 0c-13.3 0-24-10.7-24-24l0-24c0-53 43-96 96-96zm96-64a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM168 272.3c-15.2 22.8-24 50.2-24 79.7l0 24c0 8.4 1.4 16.5 4.1 24l-46.8 0C89.6 400 80 390.4 80 378.7L80 368c0-50.3 38.7-91.6 88-95.7zM427.9 400c2.7-7.5 4.1-15.6 4.1-24l0-24c0-29.5-8.8-56.9-24-79.7 49.3 4.1 88 45.3 88 95.7l0 10.7c0 11.8-9.6 21.3-21.3 21.3l-46.8 0zM96 192a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\"]\n};\nvar faMobile = {\n  prefix: 'fas',\n  iconName: 'mobile',\n  icon: [384, 512, [128241, \"mobile-android\", \"mobile-phone\"], \"f3ce\", \"M80 0C44.7 0 16 28.7 16 64l0 384c0 35.3 28.7 64 64 64l224 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L80 0zm72 416l80 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nvar faMobileAndroid = faMobile;\nvar faMobilePhone = faMobile;\nvar faArrowsTurnToDots = {\n  prefix: 'fas',\n  iconName: 'arrows-turn-to-dots',\n  icon: [448, 512, [], \"e4c1\", \"M265.4-6.6c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L285.3 64 352 64c53 0 96 43 96 96l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32c0-17.7-14.3-32-32-32l-66.7 0 25.4 25.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-80-80c-12.5-12.5-12.5-32.8 0-45.3l80-80zm-82.7 272l80 80c12.5 12.5 12.5 32.8 0 45.3l-80 80c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L162.7 400 96 400c-17.7 0-32 14.3-32 32l0 32c0 17.7-14.3 32-32 32S0 481.7 0 464l0-32c0-53 43-96 96-96l66.7 0-25.4-25.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0zM320 368a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM64 160a64 64 0 1 1 0-128 64 64 0 1 1 0 128z\"]\n};\nvar faExclamation = {\n  prefix: 'fas',\n  iconName: 'exclamation',\n  icon: [128, 512, [10069, 10071, 61738], \"21\", \"M64 432c22.1 0 40 17.9 40 40s-17.9 40-40 40-40-17.9-40-40c0-22.1 17.9-40 40-40zM64 0c26.5 0 48 21.5 48 48 0 .6 0 1.1 0 1.7l-16 304c-.9 17-15 30.3-32 30.3S33 370.7 32 353.7L16 49.7c0-.6 0-1.1 0-1.7 0-26.5 21.5-48 48-48z\"]\n};\nvar faChurch = {\n  prefix: 'fas',\n  iconName: 'church',\n  icon: [512, 512, [9962], \"f51d\", \"M280-8c0-13.3-10.7-24-24-24S232-21.3 232-8l0 24-32 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l32 0 0 48-98.6 65.8C120 186.7 112 201.6 112 217.7l0 38.3-79.8 45.6C12.3 313 0 334.2 0 357.1L0 448c0 35.3 28.7 64 64 64 74.7 0 85.4 0 320 0l64 0c35.3 0 64-28.7 64-64l0-90.9c0-23-12.3-44.2-32.2-55.6L400 256 400 217.7c0-16-8-31-21.4-39.9l-98.6-65.8 0-48 32 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-32 0 0-24zM256 320c35.3 0 64 28.7 64 64l0 80-128 0 0-80c0-35.3 28.7-64 64-64z\"]\n};\nvar faToggleOff = {\n  prefix: 'fas',\n  iconName: 'toggle-off',\n  icon: [576, 512, [], \"f204\", \"M384 128c70.7 0 128 57.3 128 128S454.7 384 384 384l-192 0c-70.7 0-128-57.3-128-128s57.3-128 128-128l192 0zM576 256c0-106-86-192-192-192L192 64C86 64 0 150 0 256S86 448 192 448l192 0c106 0 192-86 192-192zM192 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160z\"]\n};\nvar faShoePrints = {\n  prefix: 'fas',\n  iconName: 'shoe-prints',\n  icon: [576, 512, [], \"f54b\", \"M296 192c-21.1-12.1-42.3-24.2-72-29.3l0-140.3C257.7 13 311.4 0 352 0 448 0 576 48 576 128s-119.6 96-176 96c-48 0-76-16-104-32zM128 32l48 0 0 128-48 0c-35.3 0-64-28.7-64-64s28.7-64 64-64zM232 320c28-16 56-32 104-32 56.4 0 176 16 176 96S384 512 288 512c-40.5 0-94.3-13-128-22.4l0-140.3c29.7-5.2 50.9-17.3 72-29.4zM64 480c-35.3 0-64-28.7-64-64s28.7-64 64-64l48 0 0 128-48 0z\"]\n};\nvar faFileCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'file-circle-exclamation',\n  icon: [576, 512, [], \"e4eb\", \"M96 0C60.7 0 32 28.7 32 64l0 384c0 35.3 28.7 64 64 64l180 0c-22.7-31.5-36-70.2-36-112 0-100.6 77.4-183.2 176-191.3l0-38.1c0-17-6.7-33.3-18.7-45.3L290.7 18.7C278.7 6.7 262.5 0 245.5 0L96 0zM357.5 176L264 176c-13.3 0-24-10.7-24-24L240 58.5 357.5 176zM432 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-100a20 20 0 1 1 0 40 20 20 0 1 1 0-40zm0-140c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nvar faWallet = {\n  prefix: 'fas',\n  iconName: 'wallet',\n  icon: [512, 512, [], \"f555\", \"M64 32C28.7 32 0 60.7 0 96L0 384c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-192c0-35.3-28.7-64-64-64L72 128c-13.3 0-24-10.7-24-24S58.7 80 72 80l384 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L64 32zM416 256a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faMessage = {\n  prefix: 'fas',\n  iconName: 'message',\n  icon: [512, 512, [\"comment-alt\"], \"f27a\", \"M0 352L0 128C0 75 43 32 96 32l320 0c53 0 96 43 96 96l0 224c0 53-43 96-96 96l-120 0c-5.2 0-10.2 1.7-14.4 4.8L166.4 539.2c-4.2 3.1-9.2 4.8-14.4 4.8-13.3 0-24-10.7-24-24l0-72-32 0c-53 0-96-43-96-96z\"]\n};\nvar faCommentAlt = faMessage;\nvar faTrophy = {\n  prefix: 'fas',\n  iconName: 'trophy',\n  icon: [512, 512, [127942], \"f091\", \"M144.3 0l224 0c26.5 0 48.1 21.8 47.1 48.2-.2 5.3-.4 10.6-.7 15.8l49.6 0c26.1 0 49.1 21.6 47.1 49.8-7.5 103.7-60.5 160.7-118 190.5-15.8 8.2-31.9 14.3-47.2 18.8-20.2 28.6-41.2 43.7-57.9 51.8l0 73.1 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0 0-73.1c-16-7.7-35.9-22-55.3-48.3-18.4-4.8-38.4-12.1-57.9-23.1-54.1-30.3-102.9-87.4-109.9-189.9-1.9-28.1 21-49.7 47.1-49.7l49.6 0c-.3-5.2-.5-10.4-.7-15.8-1-26.5 20.6-48.2 47.1-48.2zM101.5 112l-52.4 0c6.2 84.7 45.1 127.1 85.2 149.6-14.4-37.3-26.3-86-32.8-149.6zM380 256.8c40.5-23.8 77.1-66.1 83.3-144.8L411 112c-6.2 60.9-17.4 108.2-31 144.8z\"]\n};\nvar faFaceDizzy = {\n  prefix: 'fas',\n  iconName: 'face-dizzy',\n  icon: [512, 512, [\"dizzy\"], \"f567\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM134.1 153.9l25.9 25.9 25.9-25.9c7.8-7.8 20.5-7.8 28.3 0s7.8 20.5 0 28.3l-25.9 25.9 25.9 25.9c7.8 7.8 7.8 20.5 0 28.3s-20.5 7.8-28.3 0l-25.9-25.9-25.9 25.9c-7.8 7.8-20.5 7.8-28.3 0s-7.8-20.5 0-28.3l25.9-25.9-25.9-25.9c-7.8-7.8-7.8-20.5 0-28.3s20.5-7.8 28.3 0zm192 0l25.9 25.9 25.9-25.9c7.8-7.8 20.5-7.8 28.3 0s7.8 20.5 0 28.3l-25.9 25.9 25.9 25.9c7.8 7.8 7.8 20.5 0 28.3s-20.5 7.8-28.3 0l-25.9-25.9-25.9 25.9c-7.8 7.8-20.5 7.8-28.3 0s-7.8-20.5 0-28.3l25.9-25.9-25.9-25.9c-7.8-7.8-7.8-20.5 0-28.3s20.5-7.8 28.3 0zM256 304a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"]\n};\nvar faDizzy = faFaceDizzy;\nvar faBacteria = {\n  prefix: 'fas',\n  iconName: 'bacteria',\n  icon: [640, 512, [], \"e059\", \"M256-32c13.3 0 24 10.7 24 24l0 11c8.6 2.2 16.9 5.6 24.8 10.3L311 7c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-6.3 6.3c4.6 7.8 8 16.2 10.3 24.8l11 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-11 0c-2.2 8.6-5.6 16.9-10.3 24.8L345 151c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-4.1-4.1-30.1 30.1 4.1 4.1c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-4.1-4.1c-10 10-20 20-30.1 30.1L217 279c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-6.3-6.3c-7.8 4.6-16.2 8-24.8 10.3l0 11c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-11c-8.6-2.2-16.9-5.6-24.8-10.3L73 313c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l6.3-6.3c-4.6-7.8-8-16.2-10.3-24.8l-11 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l11 0c2.2-8.6 5.6-16.9 10.3-24.8L39 169c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l4.1 4.1c10-10 20-20 30.1-30.1L103 105c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l4.1 4.1 30.1-30.1-4.1-4.1c-9.4-9.4-9.4-24.6 0-33.9S191.6-2.3 201 7l6.3 6.3c7.8-4.6 16.2-8 24.8-10.3l0-11c0-13.3 10.7-24 24-24zM128 256a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM240 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm296 40l0 11c8.6 2.2 16.9 5.6 24.8 10.3L567 199c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-6.3 6.3c4.6 7.8 8 16.2 10.3 24.8l11 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-11 0c-2.2 8.6-5.6 16.9-10.3 24.8L601 343c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-4.1-4.1-30.1 30.1 4.1 4.1c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-4.1-4.1c-10 10-20 20-30.1 30.1L473 471c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-6.3-6.3c-7.8 4.6-16.2 8-24.8 10.3l0 11c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-11c-8.6-2.2-16.9-5.6-24.8-10.3L329 505c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l6.3-6.3c-4.6-7.8-8-16.2-10.3-24.8l-11 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l11 0c2.2-8.6 5.6-16.9 10.3-24.8L295 361c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l4.1 4.1c10-10 20-20 30.1-30.1L359 297c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l4.1 4.1 30.1-30.1-4.1-4.1c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l6.3 6.3c7.8-4.6 16.2-8 24.8-10.3l0-11c0-13.3 10.7-24 24-24s24 10.7 24 24zM448 384a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nvar faEarDeaf = {\n  prefix: 'fas',\n  iconName: 'ear-deaf',\n  icon: [512, 512, [\"deaf\", \"deafness\", \"hard-of-hearing\"], \"f2a4\", \"M502.6 54.6l-40 40c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l40-40c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zm-320 320l-128 128c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l128-128c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zM240 128c-57.6 0-105.1 43.6-111.3 99.5-1.9 17.6-17.8 30.2-35.3 28.3s-30.2-17.8-28.3-35.3c9.7-88 84.3-156.5 174.9-156.5 97.2 0 176 78.8 176 176 0 46-17.7 87.9-46.6 119.3-12 13-17.4 24.8-17.4 34.7l0 6.1c0 61.9-50.1 112-112 112-17.7 0-32-14.3-32-32s14.3-32 32-32c26.5 0 48-21.5 48-48l0-6.1c0-32.9 17.4-59.6 34.4-78 18.4-20 29.6-46.6 29.6-75.9 0-61.9-50.1-112-112-112zm0 80c-17.7 0-32 14.3-32 32 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-44.2 35.8-80 80-80s80 35.8 80 80c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-17.7-14.3-32-32-32z\"]\n};\nvar faDeaf = faEarDeaf;\nvar faDeafness = faEarDeaf;\nvar faHardOfHearing = faEarDeaf;\nvar faPeopleArrows = {\n  prefix: 'fas',\n  iconName: 'people-arrows',\n  icon: [512, 512, [\"people-arrows-left-right\"], \"e068\", \"M32 64A64 64 0 1 1 160 64 64 64 0 1 1 32 64zM0 224c0-35.3 28.7-64 64-64l64 0c3.2 0 6.4 .2 9.5 .7L93.1 205.1C65 233.2 65 278.8 93.1 306.9l56 56c3.4 3.4 7 6.4 10.9 9l0 92.1c0 26.5-21.5 48-48 48l-32 0c-26.5 0-48-21.5-48-48l0-120.6C12.9 332.4 0 311.7 0 288l0-64zM352 64a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zm66.9 141.1l-44.4-44.4c3.1-.5 6.3-.7 9.5-.7l64 0c35.3 0 64 28.7 64 64l0 64c0 23.7-12.9 44.4-32 55.4L480 464c0 26.5-21.5 48-48 48l-32 0c-26.5 0-48-21.5-48-48l0-92.1c3.9-2.6 7.5-5.6 10.9-9l56-56c28.1-28.1 28.1-73.7 0-101.8zM302.8 177.8c9-3.7 19.3-1.7 26.2 5.2l56 56c9.4 9.4 9.4 24.6 0 33.9l-56 56c-6.9 6.9-17.2 8.9-26.2 5.2S288 321.7 288 312l0-24-64 0 0 24c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-56-56c-9.4-9.4-9.4-24.6 0-33.9l56-56c6.9-6.9 17.2-8.9 26.2-5.2S224 190.3 224 200l0 24 64 0 0-24c0-9.7 5.8-18.5 14.8-22.2z\"]\n};\nvar faPeopleArrowsLeftRight = faPeopleArrows;\nvar faHandsClapping = {\n  prefix: 'fas',\n  iconName: 'hands-clapping',\n  icon: [512, 512, [], \"e1a8\", \"M344 8l0 64c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-64c0-13.3 10.7-24 24-24S344-5.3 344 8zM220 10.7l32 48c7.4 11 4.4 25.9-6.7 33.3s-25.9 4.4-33.3-6.7l-32-48c-7.4-11-4.4-25.9 6.7-33.3S212.6-.3 220 10.7zM135 119c9.4-9.4 24.6-9.4 33.9 0L292.7 242.7c10.1 10.1 27.3 2.9 27.3-11.3l0-39.4c0-17.7 14.3-32 32-32s32 14.3 32 32l0 153.6c0 57.1-30 110-78.9 139.4-64 38.4-145.8 28.3-198.5-24.4L7 361c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l53 53c6.1 6.1 16 6.1 22.1 0s6.1-16 0-22.1L23 265c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l93 93c6.1 6.1 16 6.1 22.1 0s6.1-16 0-22.1L55 185c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l117 117c6.1 6.1 16 6.1 22.1 0s6.1-16 0-22.1l-93-93c-9.4-9.4-9.4-24.6 0-33.9zM433.1 484.9c-24.2 14.5-50.9 22.1-77.7 23.1 48.1-39.6 76.6-99 76.6-162.4l0-98.1c8.2-.1 16-6.4 16-16l0-39.4c0-17.7 14.3-32 32-32s32 14.3 32 32l0 153.6c0 57.1-30 110-78.9 139.4zM453.3 4c11 7.4 14 22.3 6.7 33.3l-32 48c-7.4 11-22.3 14-33.3 6.7s-14-22.3-6.7-33.3l32-48c7.4-11 22.3-14 33.3-6.7z\"]\n};\nvar faVirusCovidSlash = {\n  prefix: 'fas',\n  iconName: 'virus-covid-slash',\n  icon: [576, 512, [], \"e4a9\", \"M41-24.9c-9.4-9.4-24.6-9.4-33.9 0S-2.3-.3 7 9.1l528 528c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-83-83 11.4-11.4c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-11.3 11.3-23.8-23.8c17.9-23.5 29.9-51.7 34.1-82.3l33.6 0 0 16c0 13.3 10.7 24 24 24s24-10.7 24-24l0-80c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 16-33.6 0c-4.2-30.7-16.3-58.8-34.1-82.3l23.8-23.8 11.3 11.3c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L440.7 46.7c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l11.3 11.3-23.8 23.8C370.8 97.9 342.7 85.8 312 81.6l0-33.6 16 0c13.3 0 24-10.7 24-24S341.3 0 328 0L248 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l16 0 0 33.6c-30.7 4.2-58.8 16.3-82.3 34.1L157.9 92 169.2 80.6c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L123.9 58.1 41-24.9zM113.6 232l-33.6 0 0-16c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 80c0 13.3 10.7 24 24 24s24-10.7 24-24l0-16 33.6 0c4.2 30.7 16.3 58.8 34.1 82.3l-23.8 23.8-11.3-11.3c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l56.6 56.6c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-11.3-11.3 23.8-23.8c23.5 17.9 51.7 29.9 82.3 34.1l0 33.6-16 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l80 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-16 0 0-33.6c13.4-1.8 26.4-5.2 38.7-9.9L123.5 193.3c-4.7 12.3-8 25.2-9.9 38.7z\"]\n};\nvar faCalendarDays = {\n  prefix: 'fas',\n  iconName: 'calendar-days',\n  icon: [448, 512, [\"calendar-alt\"], \"f073\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 32 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 128C0 92.7 28.7 64 64 64l32 0 0-32c0-17.7 14.3-32 32-32zM64 240l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm128 0l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM64 368l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm112 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16z\"]\n};\nvar faCalendarAlt = faCalendarDays;\nvar faDiamondTurnRight = {\n  prefix: 'fas',\n  iconName: 'diamond-turn-right',\n  icon: [512, 512, [\"directions\"], \"f5eb\", \"M215 17L17 215C6.1 225.9 0 240.6 0 256s6.1 30.1 17 41L215 495c10.9 10.9 25.6 17 41 17s30.1-6.1 41-17L495 297c10.9-10.9 17-25.6 17-41s-6.1-30.1-17-41L297 17C286.1 6.1 271.4 0 256 0s-30.1 6.1-41 17zM385 257l-72 72c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l31-31-78.1 0c-13.3 0-24 10.7-24 24l0 40c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-40c0-39.8 32.2-72 72-72l78.1 0-31-31c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l72 72c9.4 9.4 9.4 24.6 0 33.9z\"]\n};\nvar faDirections = faDiamondTurnRight;\nvar faHandPointUp = {\n  prefix: 'fas',\n  iconName: 'hand-point-up',\n  icon: [384, 512, [9757], \"f0a6\", \"M32 32C32 14.3 46.3 0 64 0S96 14.3 96 32l0 208-64 0 0-208zM224 192c0-17.7 14.3-32 32-32s32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zm-64-64c17.7 0 32 14.3 32 32l0 48c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-48c0-17.7 14.3-32 32-32zm160 96c0-17.7 14.3-32 32-32s32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zm-96 88l0-.6c9.4 5.4 20.3 8.6 32 8.6 13.2 0 25.4-4 35.6-10.8 8.7 24.9 32.5 42.8 60.4 42.8 11.7 0 22.6-3.1 32-8.6l0 8.6c0 88.4-71.6 160-160 160l-61.7 0c-42.4 0-83.1-16.9-113.1-46.9L37.5 453.5C13.5 429.5 0 396.9 0 363l0-27c0-35.3 28.7-64 64-64l88 0c22.1 0 40 17.9 40 40s-17.9 40-40 40l-56 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l56 0c39.8 0 72-32.2 72-72z\"]\n};\nvar faBezierCurve = {\n  prefix: 'fas',\n  iconName: 'bezier-curve',\n  icon: [640, 512, [], \"f55b\", \"M296 136l0-48 48 0 0 48-48 0zM288 32c-26.5 0-48 21.5-48 48l0 4-118.4 0C111.2 62.7 89.3 48 64 48 28.7 48 0 76.7 0 112s28.7 64 64 64c25.3 0 47.2-14.7 57.6-36l66.9 0c-58.9 39.6-98.9 105-104 180L80 320c-26.5 0-48 21.5-48 48l0 64c0 26.5 21.5 48 48 48l64 0c26.5 0 48-21.5 48-48l0-64c0-26.5-21.5-48-48-48l-3.3 0c5.9-67 48.5-123.4 107.5-149.1 8.6 12.7 23.2 21.1 39.8 21.1l64 0c16.6 0 31.1-8.4 39.8-21.1 59 25.7 101.6 82.1 107.5 149.1l-3.3 0c-26.5 0-48 21.5-48 48l0 64c0 26.5 21.5 48 48 48l64 0c26.5 0 48-21.5 48-48l0-64c0-26.5-21.5-48-48-48l-4.5 0c-5-75-45.1-140.4-104-180l66.9 0c10.4 21.3 32.3 36 57.6 36 35.3 0 64-28.7 64-64s-28.7-64-64-64c-25.3 0-47.2 14.7-57.6 36l-118.4 0 0-4c0-26.5-21.5-48-48-48l-64 0zM88 376l48 0 0 48-48 0 0-48zm416 48l0-48 48 0 0 48-48 0z\"]\n};\nvar faPersonHalfDress = {\n  prefix: 'fas',\n  iconName: 'person-half-dress',\n  icon: [384, 512, [], \"e548\", \"M143.4-3.9c9.7-16.8 27.8-28.1 48.6-28.1 30.9 0 56 25.1 56 56 0 25.4-16.9 46.8-40 53.7l0 0c-5.1 1.5-10.4 2.3-16 2.3-30.9 0-56-25.1-56-56l0 0c0-10.1 2.7-19.7 7.4-27.9zM318.3 299.1L272 236.7 272 512c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-160 0-.4 0-238.6c36.2 4.4 69.2 23.4 91.2 53l70.5 95c10.5 14.2 7.6 34.2-6.6 44.8s-34.2 7.6-44.8-6.6zM176 113l0 399c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-25.8 0c-10.9 0-18.6-10.7-15.2-21.1l43-129-48.3 65.1c-10.5 14.2-30.6 17.2-44.8 6.6s-17.2-30.6-6.6-44.8l70.5-95c22-29.6 55.1-48.6 91.2-53z\"]\n};\nvar faSquarePollHorizontal = {\n  prefix: 'fas',\n  iconName: 'square-poll-horizontal',\n  icon: [448, 512, [\"poll-h\"], \"f682\", \"M448 96c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320zM256 152c0 13.3-10.7 24-24 24l-112 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l112 0c13.3 0 24 10.7 24 24zm72 80c13.3 0 24 10.7 24 24s-10.7 24-24 24l-208 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l208 0zM192 360c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l48 0c13.3 0 24 10.7 24 24z\"]\n};\nvar faPollH = faSquarePollHorizontal;\nvar faSchoolCircleXmark = {\n  prefix: 'fas',\n  iconName: 'school-circle-xmark',\n  icon: [640, 512, [], \"e56d\", \"M64 128c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l276 0c-10.5-14.6-19-30.7-25.1-48l-90.9 0 0-88c0-22.1 17.9-40 40-40l48 0c1 0 1.9 0 2.9 .1 26.3-74.6 97.5-128.1 181.1-128.1 28.6 0 55.6 6.2 80 17.4l0-33.4c0-35.3-28.7-64-64-64l-64 0-127.9-115.1c-18.3-16.4-46-16.4-64.2 0L128 128 64 128zm64 240c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32zM112 256l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16zM288 128a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM496 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7l-36.7 36.7 36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-36.7-36.7-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l36.7-36.7-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l36.7 36.7 36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nvar faHandLizard = {\n  prefix: 'fas',\n  iconName: 'hand-lizard',\n  icon: [512, 512, [], \"f258\", \"M0 112C0 85.5 21.5 64 48 64l238.5 0c36.8 0 71.2 18 92.1 48.2l113.5 164c13 18.7 19.9 41 19.9 63.8l0 76c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-13.8-78.1-50.2-161.9 0c-26.5 0-48-21.5-48-48s21.5-48 48-48l128 0c26.5 0 48-21.5 48-48s-21.5-48-48-48L48 160c-26.5 0-48-21.5-48-48z\"]\n};\nvar faChalkboard = {\n  prefix: 'fas',\n  iconName: 'chalkboard',\n  icon: [576, 512, [\"blackboard\"], \"f51b\", \"M96 64c-35.3 0-64 28.7-64 64l0 256c-17.7 0-32 14.3-32 32s14.3 32 32 32l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-256c0-35.3-28.7-64-64-64L96 64zM480 384l-64 0 0-32c0-17.7-14.3-32-32-32l-96 0c-17.7 0-32 14.3-32 32l0 32-160 0 0-256 384 0 0 256z\"]\n};\nvar faBlackboard = faChalkboard;\nvar faUpRightFromSquare = {\n  prefix: 'fas',\n  iconName: 'up-right-from-square',\n  icon: [512, 512, [\"external-link-alt\"], \"f35d\", \"M290.4 19.8C295.4 7.8 307.1 0 320 0L480 0c17.7 0 32 14.3 32 32l0 160c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9L400 157.3 246.6 310.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L354.7 112 297.4 54.6c-9.2-9.2-11.9-22.9-6.9-34.9zM0 176c0-44.2 35.8-80 80-80l80 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-80 0c-8.8 0-16 7.2-16 16l0 256c0 8.8 7.2 16 16 16l256 0c8.8 0 16-7.2 16-16l0-80c0-17.7 14.3-32 32-32s32 14.3 32 32l0 80c0 44.2-35.8 80-80 80L80 512c-44.2 0-80-35.8-80-80L0 176z\"]\n};\nvar faExternalLinkAlt = faUpRightFromSquare;\nvar faSquareFull = {\n  prefix: 'fas',\n  iconName: 'square-full',\n  icon: [512, 512, [128997, 128998, 128999, 129000, 129001, 129002, 129003, 11035, 11036], \"f45c\", \"M0 64C0 28.7 28.7 0 64 0L448 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64z\"]\n};\nvar faClover = {\n  prefix: 'fas',\n  iconName: 'clover',\n  icon: [512, 512, [], \"e139\", \"M310.4 16C346.6 16 376 45.4 376 81.7l0 5.2c0 11.2-2.7 22.3-7.8 32.2l-2.3 4.2-20.1 33.5c-1.1 1.9-1.2 3.4-1.1 4.5 .2 1.3 .9 2.7 2.1 3.9s2.6 1.9 3.9 2.1c1.1 .2 2.6 .1 4.5-1.1l33.5-20.1 4.2-2.3c10-5.1 21-7.8 32.2-7.8l5.2 0c36.2 0 65.6 29.4 65.6 65.7 0 17.4-6.9 34.1-19.2 46.4l-1.3 1.3c-3.7 3.7-3.7 9.6 0 13.3l1.3 1.3c12.3 12.3 19.2 29 19.2 46.4 0 36.2-29.4 65.6-65.6 65.6l-5.2 0c-12.8 0-25.5-3.5-36.5-10.1l-33.5-20.1c-1.9-1.1-3.4-1.2-4.5-1.1-1.3 .2-2.7 .9-3.9 2.1s-1.9 2.6-2.1 3.9c-.2 1.1-.1 2.6 1.1 4.5l20.1 33.5c6.6 11 10.1 23.6 10.1 36.5l0 5.2c0 36.2-29.4 65.6-65.6 65.6-17.4 0-34.1-6.9-46.4-19.2l-1.3-1.3c-3.7-3.7-9.6-3.7-13.3 0l-1.3 1.3c-12.3 12.3-29 19.2-46.4 19.2-36.2 0-65.6-29.4-65.7-65.6l0-5.2c0-12.8 3.5-25.5 10.1-36.5l20.1-33.5c1.1-1.9 1.2-3.4 1.1-4.5-.2-1.3-.9-2.7-2.1-3.9s-2.6-1.9-3.9-2.1c-.5-.1-1.2-.1-1.9 0l-2.5 1-33.5 20.1c-11 6.6-23.6 10.1-36.5 10.1l-5.2 0C45.4 376 16 346.6 16 310.4 16 293 22.9 276.3 35.2 264l1.3-1.3 1.2-1.5c2.1-3.1 2.1-7.2 0-10.3l-1.2-1.5-1.3-1.3C22.9 235.8 16 219.1 16 201.7 16 165.4 45.4 136 81.7 136l5.2 0c12.8 0 25.5 3.5 36.5 10.1l33.5 20.1 2.5 1c.7 .1 1.4 .1 1.9 .1 1.3-.2 2.7-.9 3.9-2.1s1.9-2.6 2.1-3.9c.1-.5 .1-1.2-.1-1.9l-1-2.5-20.1-33.5c-6.6-11-10.1-23.6-10.1-36.5l0-5.2c0-36.2 29.4-65.7 65.7-65.7 17.4 0 34.1 6.9 46.4 19.2l1.3 1.3c3.7 3.6 9.6 3.7 13.3 0l1.3-1.3 4.8-4.4C280.5 21.3 295.1 16 310.4 16z\"]\n};\nvar faTeethOpen = {\n  prefix: 'fas',\n  iconName: 'teeth-open',\n  icon: [512, 512, [], \"f62f\", \"M64 32C28.7 32 0 60.7 0 96l0 80c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-80c0-35.3-28.7-64-64-64L64 32zm0 272c-35.3 0-64 28.7-64 64l0 48c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-48c0-35.3-28.7-64-64-64L64 304zm80-160c0-26.5 21.5-48 48-48s48 21.5 48 48l0 24c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24l0-24zm128 0c0-26.5 21.5-48 48-48s48 21.5 48 48l0 24c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24l0-24zM80 112c17.7 0 32 14.3 32 32l0 24c0 13.3-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24l0-24c0-17.7 14.3-32 32-32zm320 32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 24c0 13.3-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24l0-24zM48 384l0-16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 16c0 17.7-14.3 32-32 32s-32-14.3-32-32zm144 48c-26.5 0-48-21.5-48-48l0-16c0-8.8 7.2-16 16-16l64 0c8.8 0 16 7.2 16 16l0 16c0 26.5-21.5 48-48 48zm128 0c-26.5 0-48-21.5-48-48l0-16c0-8.8 7.2-16 16-16l64 0c8.8 0 16 7.2 16 16l0 16c0 26.5-21.5 48-48 48zm112-16c-17.7 0-32-14.3-32-32l0-16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 16c0 17.7-14.3 32-32 32z\"]\n};\nvar faBarsStaggered = {\n  prefix: 'fas',\n  iconName: 'bars-staggered',\n  icon: [512, 512, [\"reorder\", \"stream\"], \"f550\", \"M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM64 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L96 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z\"]\n};\nvar faReorder = faBarsStaggered;\nvar faStream = faBarsStaggered;\nvar faWarehouse = {\n  prefix: 'fas',\n  iconName: 'warehouse',\n  icon: [576, 512, [], \"f494\", \"M0 142.1L0 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-240c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32l0 240c0 17.7 14.3 32 32 32s32-14.3 32-32l0-337.9c0-27.5-17.6-52-43.8-60.7L303.2 5.1c-9.9-3.3-20.5-3.3-30.4 0L43.8 81.4C17.6 90.1 0 114.6 0 142.1zM464 256l-352 0 0 64 352 0 0-64zM112 416l352 0 0-64-352 0 0 64zm352 32l-352 0 0 64 352 0 0-64z\"]\n};\nvar faSwatchbook = {\n  prefix: 'fas',\n  iconName: 'swatchbook',\n  icon: [512, 512, [], \"f5c3\", \"M0 48C0 21.5 21.5 0 48 0l96 0c26.5 0 48 21.5 48 48l0 368c0 53-43 96-96 96S0 469 0 416L0 48zM240 409.6l0-271.5 48.1-48.1c18.7-18.7 49.1-18.7 67.9 0l67.9 67.9c18.7 18.7 18.7 49.1 0 67.9L240 409.6zM205.5 512l192-192 66.6 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-258.5 0zM80 64c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16L80 64zM64 208l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM96 440a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nvar faCampground = {\n  prefix: 'fas',\n  iconName: 'campground',\n  icon: [512, 512, [9978], \"f6bb\", \"M344.8 52.3c11.2-13.7 9.2-33.8-4.5-45s-33.8-9.2-45 4.5l-39.2 48-39.2-48C205.6-1.9 185.4-4 171.7 7.2s-15.7 31.4-4.5 45l47.4 58-202 246.9C4.5 367.1 0 379.6 0 392.6L0 432c0 26.5 21.5 48 48 48l416 0c26.5 0 48-21.5 48-48l0-39.4c0-12.9-4.5-25.5-12.7-35.5l-202-246.9 47.4-58zM256 288l112 128-224 0 112-128z\"]\n};\nvar faPersonWalkingArrowRight = {\n  prefix: 'fas',\n  iconName: 'person-walking-arrow-right',\n  icon: [576, 512, [], \"e552\", \"M104.5 24a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zm-8 181.3L73.9 227.9c-6 6-9.4 14.1-9.4 22.6l0 37.5c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-37.5c0-25.5 10.1-49.9 28.1-67.9l35.1-35.1c22.8-22.8 53.6-35.6 85.8-35.6 36.9 0 71.8 16.8 94.8 45.6L262.3 180c6.1 7.6 15.3 12 25 12l33.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-33.2 0c-29.2 0-56.7-13.3-75-36l-3.8-4.7 0 115.2 34.5 29.6c17.7 15.2 29.3 36.2 32.6 59.3l12.6 88.1c2.5 17.5-9.7 33.7-27.2 36.2s-33.7-9.7-36.2-27.2l-12.6-88.1c-1.1-7.7-5-14.7-10.9-19.8L130 347.5c-21.3-18.2-33.5-44.9-33.5-72.9l0-69.3zM96.6 371c2.4 2.3 4.8 4.6 7.4 6.8l46 39.4-2.2 7.6c-4.5 15.7-12.9 30-24.4 41.5L55.1 534.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l68.3-68.3c3.8-3.8 6.6-8.6 8.1-13.8L96.6 371zM505.5 345c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l31-31-102.1 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l102.1 0-31-31c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l72 72c9.4 9.4 9.4 24.6 0 33.9l-72 72z\"]\n};\nvar faGlasses = {\n  prefix: 'fas',\n  iconName: 'glasses',\n  icon: [576, 512, [], \"f530\", \"M143.3 96c-14 0-26.5 9.2-30.6 22.6L70.4 256 224 256c17.7 0 32 14.3 32 32l64 0c0-17.7 14.3-32 32-32l153.6 0-42.3-137.4C459.2 105.2 446.8 96 432.7 96L400 96c-17.7 0-32-14.3-32-32s14.3-32 32-32l32.7 0c42.1 0 79.4 27.5 91.8 67.8l45.4 147.5c4.1 13.2 6.1 26.9 6.1 40.7l0 96c0 53-43 96-96 96l-64 0c-53 0-96-43-96-96l0-32-64 0 0 32c0 53-43 96-96 96l-64 0c-53 0-96-43-96-96l0-96c0-13.8 2.1-27.5 6.1-40.7L51.5 99.8C63.9 59.5 101.1 32 143.3 32L176 32c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32.7 0zM64 320l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64-128 0zm416 96c17.7 0 32-14.3 32-32l0-64-128 0 0 64c0 17.7 14.3 32 32 32l64 0z\"]\n};\nvar faCirclePause = {\n  prefix: 'fas',\n  iconName: 'circle-pause',\n  icon: [512, 512, [62092, \"pause-circle\"], \"f28b\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM224 192l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32s32 14.3 32 32zm128 0l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32s32 14.3 32 32z\"]\n};\nvar faPauseCircle = faCirclePause;\nvar faMemory = {\n  prefix: 'fas',\n  iconName: 'memory',\n  icon: [512, 512, [], \"f538\", \"M64 64C28.7 64 0 92.7 0 128l0 7.4C0 142.2 4.4 148 10.1 151.7 23.3 160.3 32 175.1 32 192s-8.7 31.7-21.9 40.3C4.4 236 0 241.8 0 248.6l0 55.4 512 0 0-55.4c0-6.8-4.4-12.6-10.1-16.3-13.2-8.6-21.9-23.4-21.9-40.3s8.7-31.7 21.9-40.3c5.7-3.7 10.1-9.5 10.1-16.3l0-7.4c0-35.3-28.7-64-64-64L64 64zM512 416l0-64-512 0 0 64c0 17.7 14.3 32 32 32l64 0 0-24c0-13.3 10.7-24 24-24s24 10.7 24 24l0 24 88 0 0-24c0-13.3 10.7-24 24-24s24 10.7 24 24l0 24 88 0 0-24c0-13.3 10.7-24 24-24s24 10.7 24 24l0 24 64 0c17.7 0 32-14.3 32-32zM160 160l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32zm128 0l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32zm128 0l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32z\"]\n};\nvar faGift = {\n  prefix: 'fas',\n  iconName: 'gift',\n  icon: [512, 512, [127873], \"f06b\", \"M321.5 68.8C329.1 55.9 342.9 48 357.8 48l2.2 0c22.1 0 40 17.9 40 40s-17.9 40-40 40l-73.3 0 34.8-59.2zm-131 0l34.8 59.2-73.3 0c-22.1 0-40-17.9-40-40s17.9-40 40-40l2.2 0c14.9 0 28.8 7.9 36.3 20.8zm89.6-24.3l-24.1 41-24.1-41C215.7 16.9 186.1 0 154.2 0L152 0c-48.6 0-88 39.4-88 88 0 14.4 3.5 28 9.6 40L32 128c-17.7 0-32 14.3-32 32l0 32c0 17.7 14.3 32 32 32l448 0c17.7 0 32-14.3 32-32l0-32c0-17.7-14.3-32-32-32l-41.6 0c6.1-12 9.6-25.6 9.6-40 0-48.6-39.4-88-88-88l-2.2 0c-31.9 0-61.5 16.9-77.7 44.4zM480 272l-200 0 0 208 136 0c35.3 0 64-28.7 64-64l0-144zm-248 0l-200 0 0 144c0 35.3 28.7 64 64 64l136 0 0-208z\"]\n};\nvar faMoneyBillWheat = {\n  prefix: 'fas',\n  iconName: 'money-bill-wheat',\n  icon: [512, 512, [], \"e52a\", \"M176-16c44.2 0 80 35.8 80 80 0 8.8-7.2 16-16 16-44.2 0-80-35.8-80-80 0-8.8 7.2-16 16-16zM56 0l48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L56 48C42.7 48 32 37.3 32 24S42.7 0 56 0zM24 72l112 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 120C10.7 120 0 109.3 0 96S10.7 72 24 72zm8 96c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24zM272 0c0-8.8 7.2-16 16-16 44.2 0 80 35.8 80 80 0 8.8-7.2 16-16 16-44.2 0-80-35.8-80-80zM400-16c44.2 0 80 35.8 80 80 0 8.8-7.2 16-16 16-44.2 0-80-35.8-80-80 0-8.8 7.2-16 16-16zm80 144c0 44.2-35.8 80-80 80-8.8 0-16-7.2-16-16 0-44.2 35.8-80 80-80 8.8 0 16 7.2 16 16zM352 112c8.8 0 16 7.2 16 16 0 44.2-35.8 80-80 80-8.8 0-16-7.2-16-16 0-44.2 35.8-80 80-80zm-96 16c0 44.2-35.8 80-80 80-8.8 0-16-7.2-16-16 0-44.2 35.8-80 80-80 8.8 0 16 7.2 16 16zM0 304c0-26.5 21.5-48 48-48l416 0c26.5 0 48 21.5 48 48l0 160c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 304zM48 416l0 48 48 0c0-26.5-21.5-48-48-48zM96 304l-48 0 0 48c26.5 0 48-21.5 48-48zM464 416c-26.5 0-48 21.5-48 48l48 0 0-48zM416 304c0 26.5 21.5 48 48 48l0-48-48 0zm-96 80a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"]\n};\nvar faDungeon = {\n  prefix: 'fas',\n  iconName: 'dungeon',\n  icon: [512, 512, [], \"f6d9\", \"M347.5 144.8c6.5 5.4 12.5 11.3 18 17.7 8.7 10.2 23.7 14 35.1 6.9l54.1-33.8c11.2-7 14.7-21.7 6.9-32.2-15.3-20.5-33.5-38.6-54.1-53.8-10.4-7.6-24.7-4.3-31.8 6.4l-35.1 52.6c-7.8 11.6-3.8 27.3 7 36.2zM327.8 41.1c8.6-12.9 2.9-30.5-12.2-34.1-19.1-4.6-39.1-7-59.6-7s-40.4 2.4-59.6 7c-15.1 3.6-20.8 21.2-12.2 34.1l40 60c5.2 7.8 14.5 11.7 23.9 11.2 5.2-.3 10.6-.3 15.8 0 9.4 .5 18.7-3.4 23.9-11.2l40-60zM50.5 103.3c-7.9 10.5-4.3 25.3 6.9 32.2l54.1 33.8c11.4 7.1 26.3 3.3 35.1-6.9 5.5-6.4 11.5-12.3 18-17.7 10.8-8.9 14.8-24.6 7-36.2L136.4 55.9c-7.1-10.7-21.5-14-31.8-6.4-20.6 15.1-38.8 33.3-54.1 53.8zm62 141.1c.8-9.9-3.3-19.9-11.8-25.1L41 182c-12.9-8-29.9-2.3-33.6 12.5-4.9 19.7-7.5 40.3-7.5 61.6l0 24c0 13.3 10.7 24 24 24l64 0c13.3 0 24-10.7 24-24l0-24c0-3.9 .2-7.8 .5-11.6zm287.1 0c.3 3.8 .5 7.7 .5 11.6l0 24c0 13.3 10.7 24 24 24l64 0c13.3 0 24-10.7 24-24l0-24c0-21.2-2.6-41.8-7.5-61.6-3.6-14.7-20.7-20.5-33.6-12.5l-59.7 37.3c-8.4 5.3-12.6 15.2-11.8 25.1zM88 352l-64 0c-13.3 0-24 10.7-24 24L0 488c0 13.3 10.7 24 24 24l64 0c13.3 0 24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm400 0l-64 0c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24l64 0c13.3 0 24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zM280 184c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 304c0 13.3 10.7 24 24 24s24-10.7 24-24l0-304zm-80 32c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 272c0 13.3 10.7 24 24 24s24-10.7 24-24l0-272zm160 0c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 272c0 13.3 10.7 24 24 24s24-10.7 24-24l0-272z\"]\n};\nvar faSuitcaseMedical = {\n  prefix: 'fas',\n  iconName: 'suitcase-medical',\n  icon: [512, 512, [\"medkit\"], \"f0fa\", \"M192 56l0 40 128 0 0-40c0-4.4-3.6-8-8-8L200 48c-4.4 0-8 3.6-8 8zm-48 8l0-8c0-30.9 25.1-56 56-56L312 0c30.9 0 56 25.1 56 56l0 424-224 0 0-416zM96 176l0 304-32 0c-35.3 0-64-28.7-64-64L0 160c0-35.3 28.7-64 64-64l32 0 0 80zM416 480l0-384 32 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64l-32 0zM244 208c-8.8 0-16 7.2-16 16l0 36-36 0c-8.8 0-16 7.2-16 16l0 24c0 8.8 7.2 16 16 16l36 0 0 36c0 8.8 7.2 16 16 16l24 0c8.8 0 16-7.2 16-16l0-36 36 0c8.8 0 16-7.2 16-16l0-24c0-8.8-7.2-16-16-16l-36 0 0-36c0-8.8-7.2-16-16-16l-24 0z\"]\n};\nvar faMedkit = faSuitcaseMedical;\nvar faPersonCane = {\n  prefix: 'fas',\n  iconName: 'person-cane',\n  icon: [448, 512, [], \"e53c\", \"M232-32a56 56 0 1 1 0 112 56 56 0 1 1 0-112zM144 236.7L97.7 299.1c-10.5 14.2-30.6 17.2-44.8 6.6s-17.2-30.6-6.6-44.8l70.5-95C142 132 181.7 112 224 112s82 20 107.2 53.9l70.5 95c10.5 14.2 7.6 34.2-6.6 44.8s-34.2 7.6-44.8-6.6L304 236.7 304 512c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-160c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 160c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-275.3zM392 384c-4.4 0-8 3.6-8 8 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-30.9 25.1-56 56-56s56 25.1 56 56l0 128c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-128c0-4.4-3.6-8-8-8z\"]\n};\nvar faGauge = {\n  prefix: 'fas',\n  iconName: 'gauge',\n  icon: [512, 512, [\"dashboard\", \"gauge-med\", \"tachometer-alt-average\"], \"f624\", \"M0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zm320 96c0-26.9-16.5-49.9-40-59.3L280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 172.7c-23.5 9.5-40 32.5-40 59.3 0 35.3 28.7 64 64 64s64-28.7 64-64zM144 176a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm-16 80a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm288 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM400 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nvar faDashboard = faGauge;\nvar faGaugeMed = faGauge;\nvar faTachometerAltAverage = faGauge;\nvar faEnvelopeOpenText = {\n  prefix: 'fas',\n  iconName: 'envelope-open-text',\n  icon: [576, 512, [], \"f658\", \"M288 33.9L96.4 175.8 254.5 293c5.3 3.9 11.2 6.9 17.5 8.7L272 464c0 5.5 .5 10.8 1.3 16L96 480c-35.3 0-64-28.7-64-64l0-239.9c0-20.3 9.6-39.4 25.9-51.4L254.5-21c9.7-7.2 21.4-11 33.5-11s23.8 3.9 33.5 11L518.1 124.7c7.2 5.3 13.1 12 17.4 19.6-2.5-.2-5-.3-7.5-.3L436.6 144 288 33.9zM320 240c0-26.5 21.5-48 48-48l160 0c26.5 0 48 21.5 48 48l0 224c0 26.5-21.5 48-48 48l-160 0c-26.5 0-48-21.5-48-48l0-224zm80 16c-13.3 0-24 10.7-24 24s10.7 24 24 24l96 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-96 0zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l56 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-56 0z\"]\n};\nvar faToolbox = {\n  prefix: 'fas',\n  iconName: 'toolbox',\n  icon: [512, 512, [129520], \"f552\", \"M176 56l0 40 160 0 0-40c0-4.4-3.6-8-8-8L184 48c-4.4 0-8 3.6-8 8zM128 96l0-40c0-30.9 25.1-56 56-56L328 0c30.9 0 56 25.1 56 56l0 40 28.1 0c12.7 0 24.9 5.1 33.9 14.1l51.9 51.9c9 9 14.1 21.2 14.1 33.9l0 76.1-136 0 0-16c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 16-144 0 0-16c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 16-136 0 0-76.1c0-12.7 5.1-24.9 14.1-33.9l51.9-51.9c9-9 21.2-14.1 33.9-14.1L128 96zM0 416l0-96 136 0 0 16c0 13.3 10.7 24 24 24s24-10.7 24-24l0-16 144 0 0 16c0 13.3 10.7 24 24 24s24-10.7 24-24l0-16 136 0 0 96c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64z\"]\n};\nvar faPowerOff = {\n  prefix: 'fas',\n  iconName: 'power-off',\n  icon: [512, 512, [9211], \"f011\", \"M288 0c0-17.7-14.3-32-32-32S224-17.7 224 0l0 256c0 17.7 14.3 32 32 32s32-14.3 32-32L288 0zM146.3 98.4c14.5-10.1 18-30.1 7.9-44.6s-30.1-18-44.6-7.9C43.4 92.1 0 169 0 256 0 397.4 114.6 512 256 512S512 397.4 512 256c0-87-43.4-163.9-109.7-210.1-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6c49.8 34.8 82.3 92.4 82.3 157.6 0 106-86 192-192 192S64 362 64 256c0-65.2 32.5-122.9 82.3-157.6z\"]\n};\nvar faSignal = {\n  prefix: 'fas',\n  iconName: 'signal',\n  icon: [512, 512, [128246, \"signal-5\", \"signal-perfect\"], \"f012\", \"M488 56c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 400c0 13.3 10.7 24 24 24s24-10.7 24-24l0-400zM360 128c-13.3 0-24 10.7-24 24l0 304c0 13.3 10.7 24 24 24s24-10.7 24-24l0-304c0-13.3-10.7-24-24-24zM280 248c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 208c0 13.3 10.7 24 24 24s24-10.7 24-24l0-208zM152 320c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zM48 384c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24s24-10.7 24-24l0-48c0-13.3-10.7-24-24-24z\"]\n};\nvar faSignal5 = faSignal;\nvar faSignalPerfect = faSignal;\nvar faArrowsSpin = {\n  prefix: 'fas',\n  iconName: 'arrows-spin',\n  icon: [512, 512, [], \"e4bb\", \"M481.7 240.1c-17.6-1.2-32.9 12-34.2 29.7-3.3 47-23.6 89.4-54.8 121L361 359c-6.9-6.9-17.2-8.9-26.2-5.2S320 366.3 320 376l0 112c0 13.3 10.7 24 24 24l112 0c9.7 0 18.5-5.8 22.2-14.8s1.7-19.3-5.2-26.2l-35-35c41.7-42.2 68.9-98.8 73.4-161.8 1.2-17.6-12-32.9-29.7-34.2zM39 41L74 76c-41.7 42.2-68.9 98.8-73.4 161.8-1.2 17.6 12 32.9 29.7 34.2s32.9-12 34.2-29.7c3.3-47 23.6-89.4 54.8-121L151 153c6.9 6.9 17.2 8.9 26.2 5.2S192 145.7 192 136l0-112c0-13.3-10.7-24-24-24L56 0C46.3 0 37.5 5.8 33.8 14.8S32.2 34.1 39 41zm201-10.7c-1.2 17.6 12 32.9 29.7 34.2 47 3.3 89.4 23.6 121 54.8L359 151c-6.9 6.9-8.9 17.2-5.2 26.2S366.3 192 376 192l112 0c13.3 0 24-10.7 24-24l0-112c0-9.7-5.8-18.5-14.8-22.2S477.9 32.2 471 39L436 74c-42.2-41.7-98.8-68.9-161.8-73.4-17.6-1.2-32.9 12-34.2 29.7zM41 473l35-35c42.2 41.7 98.8 68.9 161.8 73.4 17.6 1.2 32.9-12 34.2-29.7s-12-32.9-29.7-34.2c-47-3.3-89.4-23.6-121-54.8L153 361c6.9-6.9 8.9-17.2 5.2-26.2S145.7 320 136 320L24 320c-13.3 0-24 10.7-24 24L0 456c0 9.7 5.8 18.5 14.8 22.2S34.1 479.8 41 473z\"]\n};\nvar faJoint = {\n  prefix: 'fas',\n  iconName: 'joint',\n  icon: [576, 512, [], \"f595\", \"M360 0c13.3 0 24 10.7 24 24l0 19c0 40.3 16 79 44.5 107.5l21 21C469 191 480 217.4 480 245l0 19c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-19c0-14.9-5.9-29.1-16.4-39.6l-21-21C357.1 146.9 336 96 336 43l0-19c0-13.3 10.7-24 24-24zM552 288c-13.3 0-24-10.7-24-24l0-19c0-40.3-16-79-44.5-107.5l-21-21C443 97 432 70.6 432 43l0-19c0-13.3 10.7-24 24-24s24 10.7 24 24l0 19c0 14.9 5.9 29.1 16.4 39.6l21 21C554.9 141.1 576 192 576 245l0 19c0 13.3-10.7 24-24 24zM292.7 320c5.6 0 10.7 2.9 13.6 7.6L394.6 471c1.3 2.1 0 4.9-2.4 5.2-16.1 2.5-32.4 3.7-48.7 3.7l-38.1 0c-5.6 0-10.7-2.9-13.6-7.6l-79-128.4c-6-9.8 0-22.6 11.5-23.3 6.7-.4 13.4-.6 20.2-.6l48.3 0zM459.3 465.9c-6.4 1-12.7-1.9-16.1-7.4L374.1 346.1c-6.7-10.9 1.5-24.7 14.2-22.9 1.3 .2 2.6 .4 3.8 .6l136.4 21c27.3 4.2 47.4 27.7 47.4 55.3s-20.1 51.1-47.4 55.3l-69.2 10.6zM138.7 336c6.7-1.5 13.6 1.4 17.2 7.2l68.9 112c6.6 10.7-1.2 24.4-13.8 23.1-13-1.4-25.9-3.5-38.6-6.5L31.2 439.2C12.9 435 0 418.7 0 400s12.9-35 31.2-39.2L138.7 336z\"]\n};\nvar faBraille = {\n  prefix: 'fas',\n  iconName: 'braille',\n  icon: [384, 512, [], \"f2a1\", \"M80 144a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm0 192a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm0 136c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0 56c44.2 0 80-35.8 80-80s-35.8-80-80-80-80 35.8-80 80 35.8 80 80 80zm248-80c0 13.3-10.7 24-24 24s-24-10.7-24-24 10.7-24 24-24 24 10.7 24 24zm56 0c0-44.2-35.8-80-80-80s-80 35.8-80 80 35.8 80 80 80 80-35.8 80-80zM304 232a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0 104a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm0-192a80 80 0 1 0 0-160 80 80 0 1 0 0 160z\"]\n};\nvar faBasketShopping = {\n  prefix: 'fas',\n  iconName: 'basket-shopping',\n  icon: [576, 512, [\"shopping-basket\"], \"f291\", \"M288 0c6.6 0 12.9 2.7 17.4 7.5l144 152 .5 .5 78.1 0c17.7 0 32 14.3 32 32 0 14.5-9.6 26.7-22.8 30.7L491.1 429.9c-6.5 29.3-32.5 50.1-62.5 50.1l-281.3 0c-30 0-56-20.8-62.5-50.1l-46-207.2c-13.2-3.9-22.8-16.2-22.8-30.7 0-17.7 14.3-32 32-32l78.1 0 .5-.5 144-152C275.1 2.7 281.4 0 288 0zm0 58.9L192.2 160 383.8 160 288 58.9zM208 264c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112zm80-24c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm128 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112z\"]\n};\nvar faShoppingBasket = faBasketShopping;\nvar faBridge = {\n  prefix: 'fas',\n  iconName: 'bridge',\n  icon: [512, 512, [], \"e4c8\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l8 0 0 64-40 0 0 112c37.6 9.4 64 43.2 64 82l0 94c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-64c0-53 43-96 96-96s96 43 96 96l0 64c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-94c0-38.8 26.4-72.6 64-82l0-112-40 0 0-64 8 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zM424 96l0 64-80 0 0-64 80 0zM296 96l0 64-80 0 0-64 80 0zM88 96l80 0 0 64-80 0 0-64z\"]\n};\nvar faPlaneArrival = {\n  prefix: 'fas',\n  iconName: 'plane-arrival',\n  icon: [576, 512, [128748], \"f5af\", \"M386.6 193.1L265.9 3.7c-4.8-7.6-12.6-12.8-21.4-14.3l-43.1-7.6c-10.8-1.9-20.2 7.3-18.6 18.1l24 161.6-105-18.5-33.8-61.8C64.5 74.7 58.2 70.2 51.1 69L34 66c-9.8-1.7-18.8 5.9-18.8 15.8l.6 106.3c.2 30.9 22.4 57.3 52.9 62.7l13.5 2.4 0 0 417.6 73.6c30.5 5.4 59.5-15 64.9-45.4s-15-59.5-45.4-64.9L386.6 193.1zM224 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm131.2-15.3a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 448z\"]\n};\nvar faCashRegister = {\n  prefix: 'fas',\n  iconName: 'cash-register',\n  icon: [512, 512, [], \"f788\", \"M96 0C60.7 0 32 28.7 32 64s28.7 64 64 64l48 0 0 32-57 0c-31.6 0-58.5 23.1-63.3 54.4L1.1 364.1C.4 368.8 0 373.6 0 378.4L0 448c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-69.6c0-4.8-.4-9.6-1.1-14.4L488.2 214.4C483.5 183.1 456.6 160 425 160l-217 0 0-32 48 0c35.3 0 64-28.7 64-64S291.3 0 256 0L96 0zm0 48l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L96 80c-8.8 0-16-7.2-16-16s7.2-16 16-16zM64 424c0-13.3 10.7-24 24-24l336 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L88 448c-13.3 0-24-10.7-24-24zm48-160a24 24 0 1 1 0-48 24 24 0 1 1 0 48zm120-24a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zM160 344a24 24 0 1 1 0-48 24 24 0 1 1 0 48zM328 240a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zM256 344a24 24 0 1 1 0-48 24 24 0 1 1 0 48zM424 240a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zM352 344a24 24 0 1 1 0-48 24 24 0 1 1 0 48z\"]\n};\nvar faRing = {\n  prefix: 'fas',\n  iconName: 'ring',\n  icon: [512, 512, [], \"f70b\", \"M64 208c0 7.8 4.4 18.7 17.1 30.3 45.4-24.2 107.7-38.3 174.9-38.3s129.5 14.1 174.9 38.3c12.8-11.6 17.1-22.5 17.1-30.3 0-12.3-10.8-32-47.9-50.6-35.2-17.6-86.1-29.4-144.1-29.4s-108.9 11.8-144.1 29.4C74.8 176 64 195.7 64 208zm192 40c-47 0-89.3 7.6-122.9 19.7 33.2 12.4 75.7 20.3 122.9 20.3s89.7-7.8 122.9-20.3C345.3 255.6 303 248 256 248zM0 208C0 158.4 39.4 122.2 83.3 100.2 129.1 77.3 190.3 64 256 64s126.9 13.3 172.7 36.2c43.9 22 83.3 58.2 83.3 107.8l0 96c0 49.6-39.4 85.8-83.3 107.8-45.9 22.9-107 36.2-172.7 36.2S129.1 434.7 83.3 411.8C39.4 389.8 0 353.6 0 304l0-96z\"]\n};\nvar faAquarius = {\n  prefix: 'fas',\n  iconName: 'aquarius',\n  icon: [576, 512, [], \"e845\", \"M401.7 291.4c9-4.5 19.6-4.5 28.6 0l128 64c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3L416 355.8 302.3 412.6c-9 4.5-19.6 4.5-28.6 0L160 355.8 46.3 412.6c-15.8 7.9-35 1.5-42.9-14.3s-1.5-35 14.3-42.9l128-64c9-4.5 19.6-4.5 28.6 0L288 348.2 401.7 291.4zm3.4-193.5c8.2-3 17.3-2.5 25.2 1.5l128 64c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3L416 163.8 302.3 220.6c-9 4.5-19.6 4.5-28.6 0L160 163.8 46.3 220.6c-15.8 7.9-35 1.5-42.9-14.3s-1.5-35 14.3-42.9l128-64 3.4-1.5c8.2-3 17.3-2.5 25.2 1.5l113.7 56.8 113.7-56.8 3.4-1.5z\"]\n};\nvar faShareNodes = {\n  prefix: 'fas',\n  iconName: 'share-nodes',\n  icon: [512, 512, [\"share-alt\"], \"f1e0\", \"M384 192c53 0 96-43 96-96s-43-96-96-96-96 43-96 96c0 5.4 .5 10.8 1.3 16L159.6 184.1c-16.9-15-39.2-24.1-63.6-24.1-53 0-96 43-96 96s43 96 96 96c24.4 0 46.6-9.1 63.6-24.1L289.3 400c-.9 5.2-1.3 10.5-1.3 16 0 53 43 96 96 96s96-43 96-96-43-96-96-96c-24.4 0-46.6 9.1-63.6 24.1L190.7 272c.9-5.2 1.3-10.5 1.3-16s-.5-10.8-1.3-16l129.7-72.1c16.9 15 39.2 24.1 63.6 24.1z\"]\n};\nvar faShareAlt = faShareNodes;\nvar faPersonCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'person-circle-exclamation',\n  icon: [640, 512, [], \"e53f\", \"M280 24a56 56 0 1 0 -112 0 56 56 0 1 0 112 0zm24 212.7L341 286.6c12.8-17.5 28.5-32.7 46.3-45l-56.2-75.7C306 132 266.3 112 224 112s-82 20-107.2 53.9l-70.5 95c-10.5 14.2-7.6 34.2 6.6 44.8s34.2 7.6 44.8-6.6L144 236.7 144 512c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-8.8 7.2-16 16-16s16 7.2 16 16l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-275.3zM496 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-100a20 20 0 1 1 0 40 20 20 0 1 1 0-40zm0-140c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nvar faBinoculars = {\n  prefix: 'fas',\n  iconName: 'binoculars',\n  icon: [512, 512, [], \"f1e5\", \"M128 32l32 0c17.7 0 32 14.3 32 32l0 32-96 0 0-32c0-17.7 14.3-32 32-32zm64 96l0 320c0 17.7-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32l0-59.1c0-34.6 9.4-68.6 27.2-98.3 13.7-22.8 22.5-48.2 25.8-74.6L60.5 156c2-16 15.6-28 31.8-28l99.8 0zm227.8 0c16.1 0 29.8 12 31.8 28L459 216c3.3 26.4 12.1 51.8 25.8 74.6 17.8 29.7 27.2 63.7 27.2 98.3l0 59.1c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32l0-320 99.8 0zM320 64c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 32-96 0 0-32zm-32 64l0 160-64 0 0-160 64 0z\"]\n};\nvar faKipSign = {\n  prefix: 'fas',\n  iconName: 'kip-sign',\n  icon: [384, 512, [], \"e1c4\", \"M340.8 88.3c13.4-11.5 15-31.7 3.5-45.1s-31.7-15-45.1-3.5L128 186.4 128 64c0-17.7-14.3-32-32-32S64 46.3 64 64l0 168-32 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l32 0 0 168c0 17.7 14.3 32 32 32s32-14.3 32-32l0-122.4 171.2 146.7c13.4 11.5 33.6 9.9 45.1-3.5s9.9-33.6-3.5-45.1L173.2 280 352 280c13.3 0 24-10.7 24-24s-10.7-24-24-24L173.2 232 340.8 88.3z\"]\n};\nvar faHardDrive = {\n  prefix: 'fas',\n  iconName: 'hard-drive',\n  icon: [448, 512, [128436, \"hdd\"], \"f0a0\", \"M64 32C28.7 32 0 60.7 0 96L0 260.1C18.1 247.4 40.2 240 64 240l320 0c23.8 0 45.9 7.4 64 20.1L448 96c0-35.3-28.7-64-64-64L64 32zM448 352c0-35.3-28.7-64-64-64L64 288c-35.3 0-64 28.7-64 64l0 64c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-64zM224 384a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm128-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faHdd = faHardDrive;\nvar faRankingStar = {\n  prefix: 'fas',\n  iconName: 'ranking-star',\n  icon: [576, 512, [], \"e561\", \"M321.8 54.1L298.2 6.3c-3.9-8.3-16.1-8.6-20.4 0l-23.6 47.8-52.3 7.5c-9.3 1.4-13.3 12.9-6.4 19.8l38 37-9 52.1c-1.4 9.3 8.2 16.5 16.8 12.2l46.9-24.8 46.6 24.4c8.6 4.3 18.3-2.9 16.8-12.2l-9-52.1 38-36.6c6.8-6.8 2.9-18.3-6.4-19.8l-52.3-7.5zM256 256c-26.5 0-48 21.5-48 48l0 160c0 26.5 21.5 48 48 48l64 0c26.5 0 48-21.5 48-48l0-160c0-26.5-21.5-48-48-48l-64 0zM48 320c-26.5 0-48 21.5-48 48l0 96c0 26.5 21.5 48 48 48l64 0c26.5 0 48-21.5 48-48l0-96c0-26.5-21.5-48-48-48l-64 0zM416 432l0 32c0 26.5 21.5 48 48 48l64 0c26.5 0 48-21.5 48-48l0-32c0-26.5-21.5-48-48-48l-64 0c-26.5 0-48 21.5-48 48z\"]\n};\nvar faUserTie = {\n  prefix: 'fas',\n  iconName: 'user-tie',\n  icon: [448, 512, [], \"f508\", \"M224 248a120 120 0 1 1 0-240 120 120 0 1 1 0 240zm-30.5 56l61 0c9.7 0 17.5 7.8 17.5 17.5 0 4.2-1.5 8.2-4.2 11.4l-27.4 32 31 115.1 .6 0 34.6-138.5c2.2-8.7 11.1-14 19.5-10.8 61.9 23.6 105.9 83.6 105.9 153.8 0 15.1-12.3 27.4-27.4 27.4L43.4 512c-15.1 0-27.4-12.3-27.4-27.4 0-70.2 44-130.2 105.9-153.8 8.4-3.2 17.3 2.1 19.5 10.8l34.6 138.5 .6 0 31-115.1-27.4-32c-2.7-3.2-4.2-7.2-4.2-11.4 0-9.7 7.8-17.5 17.5-17.5z\"]\n};\nvar faEllipsis = {\n  prefix: 'fas',\n  iconName: 'ellipsis',\n  icon: [448, 512, [\"ellipsis-h\"], \"f141\", \"M0 256a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zm168 0a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zm224-56a56 56 0 1 1 0 112 56 56 0 1 1 0-112z\"]\n};\nvar faEllipsisH = faEllipsis;\nvar faStoreSlash = {\n  prefix: 'fas',\n  iconName: 'store-slash',\n  icon: [576, 512, [], \"e071\", \"M41-24.9c-9.4-9.4-24.6-9.4-33.9 0S-2.3-.3 7 9.1l528 528c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-58.6-58.6c1.1-4 1.6-8.2 1.6-12.5l0-151.2c-12.5 4.6-26.1 7.2-40.5 7.2-8.1 0-15.9-.8-23.5-2.4l0 66.4-30.2 0-137.5-137.5c2.9-3.6 5.5-7.4 7.6-11.5 11.6 22 34.7 37 61.3 37 26.8 0 49.8-15.1 61.4-37.1 11.4 22.1 34.5 37.1 60.8 37.1 45.6 0 78.4-43.7 65.6-87.5L513.8 72.3C506.8 48.4 484.9 32 460 32L116 32c-5.5 0-10.8 .8-15.9 2.3L41-24.9zM151.5 221.3L48.7 118.6 38.9 152.5c-12.8 43.7 20 87.5 65.6 87.5 18.1 0 34.7-7.1 47-18.7zM410.2 480l-128-128-154.2 0 0-66.4c-7.6 1.6-15.5 2.4-23.5 2.4-14.4 0-28-2.6-40.5-7.2L64 432c0 26.5 21.5 48 48 48l298.2 0z\"]\n};\nvar faPercent = {\n  prefix: 'fas',\n  iconName: 'percent',\n  icon: [448, 512, [62101, 62785, \"percentage\"], \"25\", \"M192 128a96 96 0 1 0 -192 0 96 96 0 1 0 192 0zM448 384a96 96 0 1 0 -192 0 96 96 0 1 0 192 0zM438.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-384 384c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l384-384z\"]\n};\nvar faPercentage = faPercent;\nvar faFileZipper = {\n  prefix: 'fas',\n  iconName: 'file-zipper',\n  icon: [384, 512, [\"file-archive\"], \"f1c6\", \"M0 64C0 28.7 28.7 0 64 0L213.5 0c17 0 33.3 6.7 45.3 18.7L365.3 125.3c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm208-5.5l0 93.5c0 13.3 10.7 24 24 24L325.5 176 208 58.5zM64 72c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L88 48C74.7 48 64 58.7 64 72zm0 96c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0c-13.3 0-24 10.7-24 24zm64 72l-32 0c-17.7 0-32 14.3-32 32l0 48c0 26.5 21.5 48 48 48s48-21.5 48-48l0-48c0-17.7-14.3-32-32-32zm-16 64a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"]\n};\nvar faFileArchive = faFileZipper;\nvar faDisplay = {\n  prefix: 'fas',\n  iconName: 'display',\n  icon: [512, 512, [], \"e163\", \"M448 96l0 256-384 0 0-256 384 0zM64 32C28.7 32 0 60.7 0 96L0 352c0 35.3 28.7 64 64 64l144 0-16 48-72 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l272 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-72 0-16-48 144 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 32z\"]\n};\nvar faIcons = {\n  prefix: 'fas',\n  iconName: 'icons',\n  icon: [512, 512, [\"heart-music-camera-bolt\"], \"f86d\", \"M174.9 272c10.7 0 20.7 5.3 26.6 14.2l11.8 17.8 26.7 0c26.5 0 48 21.5 48 48l0 112c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 352c0-26.5 21.5-48 48-48l26.7 0 11.8-17.8c5.9-8.9 15.9-14.2 26.6-14.2l61.7 0zm278.6-12c5.6-4.9 13.9-5.3 19.9-.9s8.3 12.4 5.3 19.3L440.3 368 496 368c6.7 0 12.6 4.1 15 10.4s.6 13.3-4.4 17.7l-128 112c-5.6 4.9-13.9 5.3-19.9 .9s-8.3-12.4-5.3-19.3l38.5-89.7-55.8 0c-6.7 0-12.6-4.1-15-10.4s-.6-13.3 4.4-17.7l128-112zM144 360a48 48 0 1 0 0 96 48 48 0 1 0 0-96zM483.8 .4c6.5-1.1 13.1 .4 18.5 4.4 6.1 4.5 9.7 11.7 9.7 19.2l0 152-.3 4.9c-3.3 24.2-30.5 43.1-63.7 43.1-35.3 0-64-21.5-64-48s28.7-48 64-48c5.5 0 10.9 .6 16 1.6l0-49.3-112 33.6 0 110.2-.3 4.9c-3.3 24.2-30.5 43.1-63.7 43.1-35.3 0-64-21.5-64-48s28.7-48 64-48c5.5 0 10.9 .6 16 1.6L304 72c0-10.6 7-20 17.1-23l160-48 2.7-.6zM188.9 0C226 0 256 30 256 67.1l0 6.1c0 56.1-75.2 112.1-110.3 135.3-10.8 7.1-24.6 7.1-35.4 0-35.1-23.1-110.3-79.2-110.3-135.3l0-6.1C0 30 30 0 67.1 0 88.2 0 108 9.9 120.7 26.8l7.3 9.8 7.3-9.8C148 9.9 167.8 0 188.9 0z\"]\n};\nvar faHeartMusicCameraBolt = faIcons;\nvar faRulerVertical = {\n  prefix: 'fas',\n  iconName: 'ruler-vertical',\n  icon: [256, 512, [], \"f548\", \"M0 16C0-10.5 21.5-32 48-32l160 0c26.5 0 48 21.5 48 48l0 24-104 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l104 0 0 48-72 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l72 0 0 48-104 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l104 0 0 48-72 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l72 0 0 48-104 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l104 0 0 24c0 26.5-21.5 48-48 48L48 544c-26.5 0-48-21.5-48-48L0 16z\"]\n};\nvar faMapLocationDot = {\n  prefix: 'fas',\n  iconName: 'map-location-dot',\n  icon: [640, 512, [\"map-marked-alt\"], \"f5a0\", \"M576 48c0-11.1-5.7-21.4-15.2-27.2s-21.2-6.4-31.1-1.4L413.5 77.5 234.1 17.6c-8.1-2.7-16.8-2.1-24.4 1.7l-128 64C70.8 88.8 64 99.9 64 112l0 352c0 11.1 5.7 21.4 15.2 27.2s21.2 6.4 31.1 1.4l116.1-58.1 173.3 57.8c-4.3-6.4-8.5-13.1-12.6-19.9-11-18.3-21.9-39.3-30-61.8l-101.2-33.7 0-284.5 128 42.7 0 99.3c31-35.8 77-58.4 128-58.4 22.6 0 44.2 4.4 64 12.5L576 48zM512 224c-66.3 0-120 52.8-120 117.9 0 68.9 64.1 150.4 98.6 189.3 11.6 13 31.3 13 42.9 0 34.5-38.9 98.6-120.4 98.6-189.3 0-65.1-53.7-117.9-120-117.9zM472 344a40 40 0 1 1 80 0 40 40 0 1 1 -80 0z\"]\n};\nvar faMapMarkedAlt = faMapLocationDot;\nvar faHeartCrack = {\n  prefix: 'fas',\n  iconName: 'heart-crack',\n  icon: [512, 512, [128148, \"heart-broken\"], \"f7a9\", \"M133.1 32c17.3 0 34.2 3.4 49.9 9.7l54.8 85.2-75.4 75.4c-1.5 1.5-2.4 3.6-2.3 5.8s1 4.2 2.6 5.7l112 104c2.9 2.7 7.4 2.9 10.5 .3s3.8-7 1.7-10.4l-60.4-98.1 90.7-75.6c2.6-2.1 3.5-5.7 2.4-8.8L296.4 60.6C319.6 42.3 348.6 32 378.9 32 452.4 32 512 91.6 512 165.1l0 2.6c0 112.2-139.9 242.5-212.9 298.2-12.4 9.4-27.6 14.1-43.1 14.1s-30.8-4.6-43.1-14.1C139.9 410.2 0 279.9 0 167.7l0-2.6C0 91.6 59.6 32 133.1 32z\"]\n};\nvar faHeartBroken = faHeartCrack;\nvar faCow = {\n  prefix: 'fas',\n  iconName: 'cow',\n  icon: [640, 512, [128004], \"f6c8\", \"M96 224l0 192c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-88.2c9.9 6.6 20.6 12 32 16.1l0 24.2c0 8.8 7.2 16 16 16s16-7.2 16-16l0-16.9c5.3 .6 10.6 .9 16 .9s10.7-.3 16-.9l0 16.9c0 8.8 7.2 16 16 16s16-7.2 16-16l0-24.2c11.4-4 22.1-9.4 32-16.1l0 88.2c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-160 32 32 0 49.5c0 9.5 2.8 18.7 8.1 26.6L530 427c8.8 13.1 23.5 21 39.3 21 22.5 0 41.9-15.9 46.3-38l20.3-101.6c2.6-13-.3-26.5-8-37.3l-3.9-5.5 0-81.6c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 14.4-52.9-74.1C496 86.5 452.4 64 405.9 64L144 64C77.7 64 24 117.7 24 184l0 54C9.4 249.8 0 267.8 0 288l0 17.6c0 8 6.4 14.4 14.4 14.4 31.8 0 57.6-25.8 57.6-57.6L72 184c0-24.3 12.1-45.8 30.5-58.9-4.2 10.8-6.5 22.6-6.5 34.9l0 64zM560 336a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM166.6 166.6c-4.2-4.2-6.6-10-6.6-16 0-12.5 10.1-22.6 22.6-22.6l178.7 0c12.5 0 22.6 10.1 22.6 22.6 0 6-2.4 11.8-6.6 16l-23.4 23.4C332.2 211.8 302.7 224 272 224s-60.2-12.2-81.9-33.9l-23.4-23.4z\"]\n};\nvar faRss = {\n  prefix: 'fas',\n  iconName: 'rss',\n  icon: [448, 512, [\"feed\"], \"f09e\", \"M0 64c0-17.7 14.3-32 32-32 229.8 0 416 186.2 416 416 0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96 14.3 96 0 81.7 0 64zM0 416a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM32 160c159.1 0 288 128.9 288 288 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nvar faFeed = faRss;\nvar faMagnifyingGlass = {\n  prefix: 'fas',\n  iconName: 'magnifying-glass',\n  icon: [512, 512, [128269, \"search\"], \"f002\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376C296.3 401.1 253.9 416 208 416 93.1 416 0 322.9 0 208S93.1 0 208 0 416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z\"]\n};\nvar faSearch = faMagnifyingGlass;\nvar faCloudMoon = {\n  prefix: 'fas',\n  iconName: 'cloud-moon',\n  icon: [640, 512, [], \"f6c3\", \"M480 0c14.6 0 28.8 1.6 42.5 4.7 7.4 1.7 13 7.8 13.9 15.4s-3 14.9-9.8 18.3c-45.4 22.6-76.6 69.5-76.6 123.6 0 76.2 61.8 138 138 138 3.7 0 7.4-.1 11.1-.4 7.6-.6 14.7 3.6 17.8 10.6s1.5 15.1-3.9 20.4c-26 25-59.1 42.7-95.9 49.9-11.1-25.3-30.2-46.3-54.1-59.8-7.6-63.4-61.6-112.6-127.1-112.6-11.2 0-22.1 1.5-32.5 4.2-4.8-4.2-9.9-8.2-15.2-11.8-.1-2.8-.2-5.6-.2-8.4 0-106 86-192 192-192zm-.1 431.9c0 44.2-35.8 80-80 80l-271.9 0c-53 0-96-43-96-96 0-47.6 34.6-87 80-94.6-.4-52.8 42.9-97.3 96-97.3 34.9 0 65.4 18.6 82.2 46.4 13-9.1 28.8-14.4 45.8-14.4 44.2 0 80 35.8 80 80 0 5.9-.6 11.7-1.9 17.2 37.4 6.7 65.8 39.4 65.8 78.7z\"]\n};\nvar faBoxesStacked = {\n  prefix: 'fas',\n  iconName: 'boxes-stacked',\n  icon: [512, 512, [62625, \"boxes\", \"boxes-alt\"], \"f468\", \"M224 0l0 64c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-64 32 0c35.3 0 64 28.7 64 64l0 128c0 5.5-.7 10.9-2 16l-252 0c-1.3-5.1-2-10.5-2-16l0-128c0-35.3 28.7-64 64-64l32 0zm96 512c-11.2 0-21.8-2.9-31-8 9.5-16.5 15-35.6 15-56l0-128c0-20.4-5.5-39.5-15-56 9.2-5.1 19.7-8 31-8l32 0 0 64c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-64 32 0c35.3 0 64 28.7 64 64l0 128c0 35.3-28.7 64-64 64l-128 0zM0 320c0-35.3 28.7-64 64-64l32 0 0 64c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-64 32 0c35.3 0 64 28.7 64 64l0 128c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 320z\"]\n};\nvar faBoxes = faBoxesStacked;\nvar faBoxesAlt = faBoxesStacked;\nvar faCodeBranch = {\n  prefix: 'fas',\n  iconName: 'code-branch',\n  icon: [448, 512, [], \"f126\", \"M80 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm80-24c0 32.8-19.7 61-48 73.3l0 70.7 176 0c26.5 0 48-21.5 48-48l0-22.7c-28.3-12.3-48-40.5-48-73.3 0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3l0 22.7c0 61.9-50.1 112-112 112l-176 0 0 70.7c28.3 12.3 48 40.5 48 73.3 0 44.2-35.8 80-80 80S0 476.2 0 432c0-32.8 19.7-61 48-73.3l0-205.3C19.7 141 0 112.8 0 80 0 35.8 35.8 0 80 0s80 35.8 80 80zm232 0a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM80 456a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nvar faBan = {\n  prefix: 'fas',\n  iconName: 'ban',\n  icon: [512, 512, [128683, \"cancel\"], \"f05e\", \"M367.2 412.5L99.5 144.8c-22.4 31.4-35.5 69.8-35.5 111.2 0 106 86 192 192 192 41.5 0 79.9-13.1 111.2-35.5zm45.3-45.3c22.4-31.4 35.5-69.8 35.5-111.2 0-106-86-192-192-192-41.5 0-79.9 13.1-111.2 35.5L412.5 367.2zM0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0z\"]\n};\nvar faCancel = faBan;\nvar faJugDetergent = {\n  prefix: 'fas',\n  iconName: 'jug-detergent',\n  icon: [384, 512, [], \"e519\", \"M96 24c0-13.3 10.7-24 24-24l80 0c13.3 0 24 10.7 24 24l0 24 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L88 96C74.7 96 64 85.3 64 72S74.7 48 88 48l8 0 0-24zM0 256c0-70.7 57.3-128 128-128l128 0c70.7 0 128 57.3 128 128l0 192c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 256zm256 0l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32z\"]\n};\nvar faReply = {\n  prefix: 'fas',\n  iconName: 'reply',\n  icon: [512, 512, [61714, \"mail-reply\"], \"f3e5\", \"M204.2 18.4c12 5 19.8 16.6 19.8 29.6l0 80 112 0c97.2 0 176 78.8 176 176 0 113.3-81.5 163.9-100.2 174.1-2.5 1.4-5.3 1.9-8.1 1.9-10.9 0-19.7-8.9-19.7-19.7 0-7.5 4.3-14.4 9.8-19.5 9.4-8.8 22.2-26.4 22.2-56.7 0-53-43-96-96-96l-96 0 0 80c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9l-160-160c-12.5-12.5-12.5-32.8 0-45.3l160-160c9.2-9.2 22.9-11.9 34.9-6.9z\"]\n};\nvar faMailReply = faReply;\nvar faSunPlantWilt = {\n  prefix: 'fas',\n  iconName: 'sun-plant-wilt',\n  icon: [640, 512, [], \"e57a\", \"M160 0c-5.5 0-10.6 2.8-13.5 7.4l-1.1 2.1-24.8 55.4-56.7-21.7c-5.9-2.2-12.5-.8-17 3.7S41 58 43.2 63.9l21.7 56.7-55.4 24.8C3.7 148 0 153.7 0 160s3.7 12 9.5 14.6l55.4 24.8-21.7 56.7c-2.2 5.9-.8 12.5 3.7 17s11.1 5.9 17 3.7l56.7-21.7 24.8 55.4c2.6 5.8 8.3 9.5 14.6 9.5s12-3.7 14.6-9.5l24.8-55.4 56.8 21.7c5.9 2.2 12.5 .8 17-3.7s5.9-11.1 3.7-17l-21.7-56.7 55.4-24.8c5.8-2.6 9.5-8.3 9.5-14.6s-3.7-12-9.5-14.6l-55.4-24.8 21.7-56.7 .7-2.2c1.2-5.3-.4-10.9-4.3-14.8s-9.5-5.5-14.8-4.3l-2.2 .7-56.8 21.7-24.8-55.4C172 3.7 166.3 0 160 0zm0 96a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm32 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm376 16l0 53.4c-14.8 7.7-24 23.1-24 44.6 0 16.8 16 44 37.4 67.2 5.8 6.2 15.5 6.2 21.2 0 21.4-23.3 37.4-50.6 37.4-67.2 0-21.5-9.2-37-24-44.6l0-53.4c0-44.2-35.8-80-80-80s-80 35.8-80 80l0 22.7c-9.8-4.3-20.6-6.7-32-6.7-44.2 0-80 35.8-80 80l0 21.4c-14.8 7.6-24 23.1-24 44.6 0 16.8 16 44 37.4 67.2 5.8 6.2 15.5 6.2 21.2 0 21.4-23.3 37.4-50.6 37.4-67.2 0-21.5-9.2-37-24-44.6l0-21.4c0-17.7 14.3-32 32-32s32 14.3 32 32l0 176-424 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l576 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-104 0 0-272c0-17.7 14.3-32 32-32s32 14.3 32 32z\"]\n};\nvar faBacterium = {\n  prefix: 'fas',\n  iconName: 'bacterium',\n  icon: [576, 512, [], \"e05a\", \"M408 16c0-13.3-10.7-24-24-24S360 2.7 360 16l0 23.4c-13.9 5.3-26.9 13.5-38.2 24.5L305 47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l16.8 16.8-30.1 30.1-16.8-16.8c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l16.8 16.8c-10 10-20 20-30.1 30.1L177 175c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l16.8 16.8-30.1 30.1-16.8-16.8c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l16.8 16.8c-11 11.3-19.2 24.3-24.5 38.2L48 328c-13.3 0-24 10.7-24 24s10.7 24 24 24l16.3 0c1.3 18.3 7.1 36.4 17.4 52.4L71 439c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l10.6-10.6c16 10.3 34.1 16.1 52.4 17.4l0 16.3c0 13.3 10.7 24 24 24s24-10.7 24-24l0-23.4c13.9-5.3 26.9-13.5 38.2-24.5L271 465c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-16.8-16.8 30.1-30.1 16.8 16.8c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-16.8-16.8c10-10 20-20 30.1-30.1L399 337c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-16.8-16.8 30.1-30.1 16.8 16.8c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-16.8-16.8c11-11.3 19.2-24.3 24.5-38.2l23.4 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-16.3 0c-1.3-18.3-7.1-36.4-17.4-52.4L505 73c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L460.4 49.7c-16-10.3-34.1-16.1-52.4-17.4L408 16zM160 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM272 240a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faRecordVinyl = {\n  prefix: 'fas',\n  iconName: 'record-vinyl',\n  icon: [512, 512, [], \"f8d9\", \"M0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zm256-96a96 96 0 1 1 0 192 96 96 0 1 1 0-192zm0 240a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-112a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nvar faFloppyDisk = {\n  prefix: 'fas',\n  iconName: 'floppy-disk',\n  icon: [448, 512, [128190, 128426, \"save\"], \"f0c7\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-242.7c0-17-6.7-33.3-18.7-45.3L352 50.7C340 38.7 323.7 32 306.7 32L64 32zm32 96c0-17.7 14.3-32 32-32l160 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-64zM224 288a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"]\n};\nvar faSave = faFloppyDisk;\nvar faToiletsPortable = {\n  prefix: 'fas',\n  iconName: 'toilets-portable',\n  icon: [512, 512, [], \"e584\", \"M64 0l96 0c35.3 0 64 28.7 64 64l0 16-224 0 0-16C0 28.7 28.7 0 64 0zM0 128l224 0 0 360c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-8-128 0 0 8c0 13.3-10.7 24-24 24S0 501.3 0 488L0 128zM128 248l0 48c0 13.3 10.7 24 24 24l24 0 0-96-24 0c-13.3 0-24 10.7-24 24zM352 0l96 0c35.3 0 64 28.7 64 64l0 16-224 0 0-16c0-35.3 28.7-64 64-64zM288 128l224 0 0 360c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-8-128 0 0 8c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-360zM416 248l0 48c0 13.3 10.7 24 24 24l24 0 0-96-24 0c-13.3 0-24 10.7-24 24z\"]\n};\nvar faO = {\n  prefix: 'fas',\n  iconName: 'o',\n  icon: [448, 512, [111], \"4f\", \"M224 96a160 160 0 1 0 0 320 160 160 0 1 0 0-320zM448 256a224 224 0 1 1 -448 0 224 224 0 1 1 448 0z\"]\n};\nvar faPalette = {\n  prefix: 'fas',\n  iconName: 'palette',\n  icon: [512, 512, [127912], \"f53f\", \"M512 256c0 .9 0 1.8 0 2.7-.4 36.5-33.6 61.3-70.1 61.3L344 320c-26.5 0-48 21.5-48 48 0 3.4 .4 6.7 1 9.9 2.1 10.2 6.5 20 10.8 29.9 6.1 13.8 12.1 27.5 12.1 42 0 31.8-21.6 60.7-53.4 62-3.5 .1-7 .2-10.6 .2-141.4 0-256-114.6-256-256S114.6 0 256 0 512 114.6 512 256zM128 288a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0-96a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm96 96a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nvar faUnlock = {\n  prefix: 'fas',\n  iconName: 'unlock',\n  icon: [384, 512, [128275], \"f09c\", \"M128 96c0-35.3 28.7-64 64-64 31.7 0 58 23 63.1 53.3 2.9 17.4 19.4 29.2 36.9 26.3s29.2-19.4 26.3-36.9C308.1 14.1 255.5-32 192-32 121.3-32 64 25.3 64 96l0 64c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64l-192 0 0-64z\"]\n};\nvar faEarListen = {\n  prefix: 'fas',\n  iconName: 'ear-listen',\n  icon: [512, 512, [\"assistive-listening-systems\"], \"f2a2\", \"M379.6 .3c-8.9 1.2-17.2 6.2-22.4 14.1-6.8 10.4-7 24.1-.4 34.6 5.6 8.9 15.5 12.7 23.8 18.5 7.5 5.2 17.6 13.2 27.7 24.2 20 21.7 39.5 54.3 39.5 100.3 0 17.7 14.3 32 32 32s32-14.3 32-32c0-66-28.5-113.4-56.5-143.7-13.9-15.1-27.8-26.1-38.3-33.3-11-7.6-23.5-16.6-37.6-14.7zM240 128c-57.6 0-105.1 43.6-111.3 99.5-1.9 17.6-17.8 30.2-35.3 28.3s-30.2-17.8-28.3-35.3c9.7-88 84.3-156.5 174.9-156.5 97.2 0 176 78.8 176 176 0 46-17.7 87.9-46.6 119.3-12 13-17.4 24.8-17.4 34.7l0 6.1c0 61.9-50.1 112-112 112-17.7 0-32-14.3-32-32s14.3-32 32-32c26.5 0 48-21.5 48-48l0-6.1c0-32.9 17.4-59.6 34.4-78 18.4-20 29.6-46.6 29.6-75.9 0-61.9-50.1-112-112-112zM0 480a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm160-96a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM86.6 361.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-64-64zM240 208c-17.7 0-32 14.3-32 32 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-44.2 35.8-80 80-80s80 35.8 80 80c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-17.7-14.3-32-32-32z\"]\n};\nvar faAssistiveListeningSystems = faEarListen;\nvar faCodePullRequest = {\n  prefix: 'fas',\n  iconName: 'code-pull-request',\n  icon: [512, 512, [], \"e13c\", \"M328 24c0-9.7-5.8-18.5-14.8-22.2S293.9 .2 287 7L231 63c-9.4 9.4-9.4 24.6 0 33.9l56 56c6.9 6.9 17.2 8.9 26.2 5.2S328 145.7 328 136l0-24 24 0c17.7 0 32 14.3 32 32l0 214.7c-28.3 12.3-48 40.5-48 73.3 0 44.2 35.8 80 80 80s80-35.8 80-80c0-32.8-19.7-61-48-73.3L448 144c0-53-43-96-96-96l-24 0 0-24zM72 80a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm56 73.3c28.3-12.3 48-40.5 48-73.3 0-44.2-35.8-80-80-80S16 35.8 16 80c0 32.8 19.7 61 48 73.3l0 205.3c-28.3 12.3-48 40.5-48 73.3 0 44.2 35.8 80 80 80s80-35.8 80-80c0-32.8-19.7-61-48-73.3l0-205.3zM72 432a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm344-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nvar faKey = {\n  prefix: 'fas',\n  iconName: 'key',\n  icon: [512, 512, [128273], \"f084\", \"M336 352c97.2 0 176-78.8 176-176S433.2 0 336 0 160 78.8 160 176c0 18.7 2.9 36.8 8.3 53.7L7 391c-4.5 4.5-7 10.6-7 17l0 80c0 13.3 10.7 24 24 24l80 0c13.3 0 24-10.7 24-24l0-40 40 0c13.3 0 24-10.7 24-24l0-40 40 0c6.4 0 12.5-2.5 17-7l33.3-33.3c16.9 5.4 35 8.3 53.7 8.3zM376 96a40 40 0 1 1 0 80 40 40 0 1 1 0-80z\"]\n};\nvar faSkull = {\n  prefix: 'fas',\n  iconName: 'skull',\n  icon: [512, 512, [128128], \"f54c\", \"M416 427.4c58.5-44 96-111.6 96-187.4 0-132.5-114.6-240-256-240S0 107.5 0 240c0 75.8 37.5 143.4 96 187.4L96 464c0 26.5 21.5 48 48 48l32 0 0-40c0-13.3 10.7-24 24-24s24 10.7 24 24l0 40 64 0 0-40c0-13.3 10.7-24 24-24s24 10.7 24 24l0 40 32 0c26.5 0 48-21.5 48-48l0-36.6zM96 256a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zm256-64a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"]\n};\nvar faMarsStrokeUp = {\n  prefix: 'fas',\n  iconName: 'mars-stroke-up',\n  icon: [384, 512, [9896, \"mars-stroke-v\"], \"f22a\", \"M192 256a112 112 0 1 0 0 224 112 112 0 1 0 0-224zM16 368c0-86.3 62.1-158.1 144.1-173.1-.1-.9-.1-1.9-.1-2.9l0-16-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-61.4-28 22.4c-13.8 11-33.9 8.8-45-5s-8.8-33.9 5-45l80-64c11.7-9.3 28.3-9.3 40 0l80 64c13.8 11 16 31.2 5 45s-31.2 16-45 5l-28-22.4 0 61.4 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 16c0 1 0 1.9-.1 2.9 82 15 144.1 86.8 144.1 173.1 0 97.2-78.8 176-176 176S16 465.2 16 368z\"]\n};\nvar faMarsStrokeV = faMarsStrokeUp;\nvar faFireFlameSimple = {\n  prefix: 'fas',\n  iconName: 'fire-flame-simple',\n  icon: [384, 512, [\"burn\"], \"f46a\", \"M372.5 256.5l-.7-1.9C337.8 160.8 282 76.5 209.1 8.5l-3.3-3C202.1 2 197.1 0 192 0s-10.1 2-13.8 5.5l-3.3 3C102 76.5 46.2 160.8 12.2 254.6l-.7 1.9C3.9 277.3 0 299.4 0 321.6 0 426.7 86.8 512 192 512s192-85.3 192-190.4c0-22.2-3.9-44.2-11.5-65.1zm-90.8 49.5c4.1 9.3 6.2 19.4 6.2 29.5 0 53-43 96.5-96 96.5s-96-43.5-96-96.5c0-10.1 2.1-20.3 6.2-29.5l1.9-4.3c15.8-35.4 37.9-67.7 65.3-95.1l8.9-8.9c3.6-3.6 8.5-5.6 13.6-5.6s10 2 13.6 5.6l8.9 8.9c27.4 27.4 49.6 59.7 65.3 95.1l1.9 4.3z\"]\n};\nvar faBurn = faFireFlameSimple;\nvar faTree = {\n  prefix: 'fas',\n  iconName: 'tree',\n  icon: [448, 512, [127794], \"f1bb\", \"M224-32c7 0 13.7 3.1 18.3 8.5l136 160c6.1 7.1 7.4 17.1 3.5 25.6S369.4 176 360 176l-24.9 0 75.2 88.5c6.1 7.1 7.4 17.1 3.5 25.6S401.4 304 392 304l-38.5 0 88.8 104.5c6.1 7.1 7.4 17.1 3.5 25.6S433.4 448 424 448l-168 0 0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64-168 0c-9.4 0-17.9-5.4-21.8-13.9s-2.6-18.5 3.5-25.6L94.5 304 56 304c-9.4 0-17.9-5.4-21.8-13.9s-2.6-18.5 3.5-25.6L112.9 176 88 176c-9.4 0-17.9-5.4-21.8-13.9s-2.6-18.5 3.5-25.6l136-160C210.3-28.9 217-32 224-32z\"]\n};\nvar faSmog = {\n  prefix: 'fas',\n  iconName: 'smog',\n  icon: [576, 512, [], \"f75f\", \"M176 288C96.5 288 32 223.5 32 144S96.5 0 176 0c27.2 0 52.6 7.5 74.3 20.6 20.1-13 44-20.6 69.7-20.6 47.4 0 88.7 25.7 110.9 64l1.1 0c61.9 0 112 50.1 112 112 0 60.3-47.6 109.4-107.2 111.9-22.6 20-52.3 32.1-84.8 32.1-32.5 0-62.1-12.1-84.7-32L176 288zM512 392c0 13.3-10.7 24-24 24L24 416c-13.3 0-24-10.7-24-24s10.7-24 24-24l464 0c13.3 0 24 10.7 24 24zM88 464l80 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm176 0l288 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-288 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nvar faS = {\n  prefix: 'fas',\n  iconName: 's',\n  icon: [320, 512, [115], \"53\", \"M0 157.5C0 88.2 56.2 32 125.5 32L272 32c17.7 0 32 14.3 32 32s-14.3 32-32 32L125.5 96c-34 0-61.5 27.5-61.5 61.5 0 31 23.1 57.2 53.9 61L210.1 230C272.9 237.9 320 291.2 320 354.5 320 423.8 263.8 480 194.5 480L48 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l146.5 0c34 0 61.5-27.5 61.5-61.5 0-31-23.1-57.2-53.9-61L109.9 282C47.1 274.1 0 220.8 0 157.5z\"]\n};\nvar faJedi = {\n  prefix: 'fas',\n  iconName: 'jedi',\n  icon: [576, 512, [], \"f669\", \"M246 315.7l-21.2-31.9c-2.1-3.2-1.7-7.4 1-10.1s6.9-3.1 10.1-1l29.5 19.7c2.1 1.4 4.9-.1 5-2.6L279.7 8c.1-4.5 3.8-8 8.3-8s8.1 3.5 8.3 8l9.4 281.9c.1 2.5 2.9 3.9 5 2.6l29.5-19.7c3.2-2.1 7.4-1.7 10.1 1s3.1 6.9 1 10.1L330 315.7c-1.3 1.9-.2 4.5 2 4.9l37.6 7.5c3.7 .7 6.4 4 6.4 7.8s-2.7 7.1-6.4 7.8L332 351.4c-2.2 .4-3.3 3-2 4.9l21.2 31.9c2.1 3.2 1.7 7.4-1 10.1s-6.9 3.1-10.1 1l-26.3-17.6c-2.2-1.4-5.1 .2-5 2.8l2.1 61.5c59.8-10.8 105.1-63.1 105.1-126 0-37-15.7-70.4-40.8-93.7-7-6.5-6.5-18.6 1-24.4 34-26.3 55.8-67.5 55.8-113.9 0-16.8-2.9-33-8.2-48-4.6-13 10.2-30 21.4-22 53.5 38 92.7 94.8 107.8 160.7 .5 2.1-.2 4.3-1.7 5.9l-28.4 28.4c-4 4-1.2 10.9 4.5 10.9l26 0c3.4 0 6.2 2.6 6.3 6 .1 3.3 .2 6.6 .2 10 0 17.5-1.7 34.7-4.8 51.3-.2 1.2-.9 2.4-1.7 3.3l-46.5 46.5c-4 4-1.2 10.9 4.5 10.9l14.6 0c4.6 0 7.7 4.8 5.7 9-44.5 89.5-136.9 151-243.7 151S88.8 450.5 44.3 361c-2.1-4.2 1-9 5.7-9l14.6 0c5.7 0 8.6-6.9 4.5-10.9L22.6 294.6c-.9-.9-1.5-2-1.7-3.3-3.2-16.6-4.8-33.8-4.8-51.3 0-3.3 .1-6.7 .2-10 .1-3.4 2.9-6 6.3-6l26 0c5.7 0 8.6-6.9 4.5-10.9L24.6 184.6c-1.5-1.5-2.2-3.8-1.7-5.9 15.2-66 54.3-122.8 107.8-160.7 11.3-8 26 8.9 21.4 22-5.3 15-8.2 31.2-8.2 48 0 46.3 21.9 87.5 55.8 113.9 7.5 5.8 8 17.9 1 24.4-25.1 23.4-40.8 56.7-40.8 93.7 0 62.9 45.4 115.2 105.1 126l2.1-61.5c.1-2.6-2.8-4.2-5-2.8l-26.3 17.6c-3.2 2.1-7.4 1.7-10.1-1s-3.1-6.9-1-10.1L246 356.3c1.3-1.9 .2-4.5-2-4.9l-37.6-7.5c-3.7-.7-6.4-4-6.4-7.8s2.7-7.1 6.4-7.8l37.6-7.5c2.2-.4 3.3-3 2-4.9z\"]\n};\nvar faPersonHiking = {\n  prefix: 'fas',\n  iconName: 'person-hiking',\n  icon: [448, 512, [\"hiking\"], \"f6ec\", \"M192-32a56 56 0 1 1 0 112 56 56 0 1 1 0-112zM128 173.6c0-34 27.6-61.6 61.6-61.6 20.3 0 39.7 8.1 54 22.4l48.2 48.2c6 6 14.1 9.4 22.6 9.4l37.5 0c5.8 0 11.3 1.6 16 4.3l0-76.3c0-13.3 10.7-24 24-24s24 10.7 24 24l0 400c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-268.3c-4.7 2.7-10.2 4.3-16 4.3l-37.5 0c-25.5 0-49.9-10.1-67.9-28.1l-6.6-6.6 0 109.2 34.5 29.6c17.7 15.2 29.3 36.2 32.6 59.3l12.6 88.1c2.5 17.5-9.7 33.7-27.2 36.2s-33.7-9.7-36.2-27.2l-12.6-88.1c-1.1-7.7-5-14.7-10.9-19.8l-71.4-61.2c-21.3-18.2-33.5-44.9-33.5-72.9l0-101zm-4.8 203.7c2.3 2.3 4.7 4.4 7.1 6.5l44.9 38.5c-3.6 8.4-8.5 16.3-14.4 23.4L88.6 532.5c-11.3 13.6-31.5 15.4-45.1 4.1s-15.4-31.5-4.1-45.1l72.3-86.7c2.6-3.1 4.5-6.6 5.8-10.4l5.7-17.1zM0 160c0-35.3 28.7-64 64-64 17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-96z\"]\n};\nvar faHiking = faPersonHiking;\nvar faArrowsUpToLine = {\n  prefix: 'fas',\n  iconName: 'arrows-up-to-line',\n  icon: [448, 512, [], \"e4c2\", \"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64l384 0c17.7 0 32-14.3 32-32S433.7 0 416 0L32 0zm86.6 137.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L64 237.3 64 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-242.7 9.4 9.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-64-64zm256 0c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l9.4-9.4 0 242.7c0 17.7 14.3 32 32 32s32-14.3 32-32l0-242.7 9.4 9.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-64-64z\"]\n};\nvar faMarsDouble = {\n  prefix: 'fas',\n  iconName: 'mars-double',\n  icon: [640, 512, [9891], \"f227\", \"M288 32c0-17.7 14.3-32 32-32L448 0c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-50.7-95 95c19.5 28.4 31 62.7 31 99.8 0 97.2-78.8 176-176 176S0 401.2 0 304 78.8 128 176 128c37 0 71.4 11.4 99.8 31l95-95-50.7 0c-17.7 0-32-14.3-32-32zM176 416a112 112 0 1 0 0-224 112 112 0 1 0 0 224zm160 64c-6.8 0-13.4-.4-20-1.1 23.6-18.9 43.3-42.5 57.6-69.4 43.3-15.5 74.4-56.9 74.4-105.5 0-25.2-8.3-48.5-22.4-67.2 7.1 2.1 14.6 3.2 22.4 3.2 17 0 32.7-5.3 45.7-14.3 11.7 23.6 18.3 50.2 18.3 78.3 0 97.2-78.8 176-176 176zM528 157.3L528 32c0-11.4-2.4-22.2-6.7-32L608 0c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-50.7-48 48z\"]\n};\nvar faThermometer = {\n  prefix: 'fas',\n  iconName: 'thermometer',\n  icon: [512, 512, [], \"f491\", \"M96 382.1l0-88.8c0-14.9 5.9-29.1 16.4-39.6l21.7-21.7 41 41c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-41-41 46.1-46.1 41 41c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-41-41 46.1-46.1 41 41c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-41-41 7.8-7.8c19.4-19.4 45.6-30.2 73-30.2 57 0 103.2 46.2 103.2 103.2 0 27.4-10.9 53.6-30.2 73L258.3 399.6c-10.5 10.5-24.7 16.4-39.6 16.4l-88.8 0-89 89c-9.4 9.4-24.6 9.4-33.9 0S-2.3 480.4 7 471l89-89z\"]\n};\nvar faPaintbrush = {\n  prefix: 'fas',\n  iconName: 'paintbrush',\n  icon: [576, 512, [128396, \"paint-brush\"], \"f1fc\", \"M480.5 10.3L259.1 158c-29.1 19.4-47.6 50.9-50.6 85.3 62.3 12.8 111.4 61.9 124.3 124.3 34.5-3 65.9-21.5 85.3-50.6L565.7 95.5c6.7-10.1 10.3-21.9 10.3-34.1 0-33.9-27.5-61.4-61.4-61.4-12.1 0-24 3.6-34.1 10.3zM288 400c0-61.9-50.1-112-112-112S64 338.1 64 400c0 3.9 .2 7.8 .6 11.6 1.8 17.5-10.2 36.4-27.8 36.4L32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l144 0c61.9 0 112-50.1 112-112z\"]\n};\nvar faPaintBrush = faPaintbrush;\nvar faNeuter = {\n  prefix: 'fas',\n  iconName: 'neuter',\n  icon: [384, 512, [9906], \"f22c\", \"M80 176a112 112 0 1 1 224 0 112 112 0 1 1 -224 0zM223.9 349.1C305.9 334.1 368 262.3 368 176 368 78.8 289.2 0 192 0S16 78.8 16 176c0 86.3 62.1 158.1 144.1 173.1-.1 1-.1 1.9-.1 2.9l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-1 0-1.9-.1-2.9z\"]\n};\nvar faSquarePhoneFlip = {\n  prefix: 'fas',\n  iconName: 'square-phone-flip',\n  icon: [448, 512, [\"phone-square-alt\"], \"f87b\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm232 96.7l2.8 .8c32.3 8.8 59.9 40.1 51.8 78.2-18.5 87.5-87.4 156.3-174.9 174.9-38.1 8.1-69.4-19.5-78.2-51.8l-.8-2.8c-2.7-9.8 2.4-20.1 11.8-24l48.7-20.3c8.3-3.4 17.8-1.1 23.5 5.9l19.3 23.6c35.1-17.4 63.4-46.6 79.6-82.4l-22.1-18c-6.9-5.7-9.3-15.2-5.9-23.5l20.3-48.7c3.9-9.4 14.2-14.4 24-11.8z\"]\n};\nvar faPhoneSquareAlt = faSquarePhoneFlip;\nvar faFaceGrinTongueSquint = {\n  prefix: 'fas',\n  iconName: 'face-grin-tongue-squint',\n  icon: [512, 512, [128541, \"grin-tongue-squint\"], \"f58a\", \"M0 256c0 104.4 62.5 194.2 152.2 234.1-5.3-13-8.2-27.2-8.2-42.1l0-61.7c-16.9-16.5-30.1-36.7-38.3-59.3-4.3-11.8 7.7-21.8 19.6-18.1 39.2 12.2 83.7 19.1 130.7 19.1s91.5-6.9 130.7-19.1c11.9-3.7 23.9 6.3 19.6 18.1-8.3 22.6-21.5 42.8-38.3 59.3l0 61.7c0 14.9-2.9 29.1-8.2 42.1 89.7-39.8 152.2-129.6 152.2-234.1 0-141.4-114.6-256-256-256S0 114.6 0 256zm125.8-91.7c-6.2-5.2-7.6-14.3-3.1-21.1s13.3-9.2 20.6-5.5l79.6 40c5.4 2.7 8.8 8.2 8.8 14.3s-3.4 11.6-8.8 14.3l-79.6 40c-7.3 3.6-16.1 1.3-20.6-5.5s-3.1-15.9 3.1-21.1L159 192 125.8 164.3zm263.6-21.1c4.5 6.8 3.1 15.9-3.1 21.1L353 192 386.2 219.7c6.2 5.2 7.6 14.3 3.1 21.1s-13.3 9.2-20.6 5.5l-79.6-40c-5.4-2.7-8.8-8.2-8.8-14.3s3.4-11.6 8.8-14.3l79.6-40c7.3-3.6 16.1-1.3 20.6 5.5zM320 448l0-45.4c0-14.7-11.9-26.6-26.6-26.6l-2 0c-11.3 0-21.1 7.9-23.6 18.9-2.8 12.6-20.8 12.6-23.6 0-2.5-11.1-12.3-18.9-23.6-18.9l-2 0c-14.7 0-26.6 11.9-26.6 26.6l0 45.4c0 35.3 28.7 64 64 64s64-28.7 64-64z\"]\n};\nvar faGrinTongueSquint = faFaceGrinTongueSquint;\nvar faCommentDollar = {\n  prefix: 'fas',\n  iconName: 'comment-dollar',\n  icon: [512, 512, [], \"f651\", \"M256 480c141.4 0 256-107.5 256-240S397.4 0 256 0 0 107.5 0 240c0 54.3 19.2 104.3 51.6 144.5L2.8 476.8c-4.8 9-3.3 20 3.6 27.5s17.8 9.8 27.1 5.8l118.4-50.7C183.7 472.6 218.9 480 256 480zm4-352c11 0 20 9 20 20l0 4 8 0c11 0 20 9 20 20s-9 20-20 20l-47.5 0c-6.9 0-12.5 5.6-12.5 12.5 0 6.1 4.4 11.3 10.4 12.3l41.7 7c25.3 4.2 43.9 26.1 43.9 51.8 0 26.1-19 47.7-44 51.8l0 4.7c0 11-9 20-20 20s-20-9-20-20l0-4-24 0c-11 0-20-9-20-20s9-20 20-20l55.5 0c6.9 0 12.5-5.6 12.5-12.5 0-6.1-4.4-11.3-10.4-12.3l-41.7-7c-25.3-4.2-43.9-26.1-43.9-51.8 0-28.8 23.2-52.2 52-52.5l0-4c0-11 9-20 20-20z\"]\n};\nvar faHippo = {\n  prefix: 'fas',\n  iconName: 'hippo',\n  icon: [640, 512, [129435], \"f6ed\", \"M407 47c9.4-9.4 24.6-9.4 33.9 0l17.2 17.2c1.9-.1 3.9-.2 5.8-.2l32 0c11.2 0 21.9 2.3 31.6 6.5L543 55c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L564 101.9c7.6 12.2 12 26.7 12 42.1 0 10.2 7.4 18.8 16.7 23 27.9 12.5 47.3 40.5 47.3 73 0 26.2-12.6 49.4-32 64l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-16-64 0 0 16c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-17.6c-11.8-2.4-22.7-7.4-32-14.4-1.5-1.1-2.9-2.3-4.3-3.5-17-14.7-27.7-36.4-27.7-60.5 0-8.8-7.2-16-16-16s-16 7.2-16 16c0 44.7 26.2 83.2 64 101.2l0 10.8c0 17.7 14.3 32 32 32l32 0 0 64c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-76c-19.8 7.7-41.4 12-64 12s-44.2-4.3-64-12l0 76c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-118.9-18.1 40.7c-5.4 12.1-19.6 17.6-31.7 12.2S-3.3 362.4 2.1 350.3L24 300.9c5.3-11.9 8-24.7 8-37.7 0-107.5 85.2-195.2 191.8-199.1l.2-.1 64 0c41.7 0 83.4 12.1 117.2 25.7 1.7-1.8 3.5-3.6 5.3-5.2L407 81c-9.4-9.4-9.4-24.6 0-33.9zm73 185a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm88 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM480 144a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm48 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"]\n};\nvar faBowlFood = {\n  prefix: 'fas',\n  iconName: 'bowl-food',\n  icon: [512, 512, [], \"e4c6\", \"M0 176c0-35.3 28.7-64 64-64 .5 0 1.1 0 1.6 0 7.4-36.5 39.7-64 78.4-64 15 0 29 4.1 40.9 11.2 13.3-25.7 40.1-43.2 71.1-43.2s57.8 17.6 71.1 43.2c12-7.1 26-11.2 40.9-11.2 38.7 0 71 27.5 78.4 64 .5 0 1.1 0 1.6 0 35.3 0 64 28.7 64 64 0 11.7-3.1 22.6-8.6 32L8.6 208C3.1 198.6 0 187.7 0 176zM0 283.4C0 268.3 12.3 256 27.4 256l457.1 0c15.1 0 27.4 12.3 27.4 27.4 0 70.5-44.4 130.7-106.7 154.1L403.5 452c-2 16-15.6 28-31.8 28l-231.5 0c-16.1 0-29.8-12-31.8-28l-1.8-14.4C44.4 414.1 0 353.9 0 283.4z\"]\n};\nvar faSquareVirus = {\n  prefix: 'fas',\n  iconName: 'square-virus',\n  icon: [448, 512, [], \"e578\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm160 80c13.3 0 24 10.7 24 24 0 22.9 27.7 34.4 43.9 18.2 9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9c-16.2 16.2-4.7 43.9 18.2 43.9 13.3 0 24 10.7 24 24s-10.7 24-24 24c-22.9 0-34.4 27.7-18.2 43.9 9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0c-16.2-16.2-43.9-4.7-43.9 18.2 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-22.9-27.7-34.4-43.9-18.2-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9c16.2-16.2 4.7-43.9-18.2-43.9-13.3 0-24-10.7-24-24s10.7-24 24-24c22.9 0 34.4-27.7 18.2-43.9-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0c16.2 16.2 43.9 4.7 43.9-18.2 0-13.3 10.7-24 24-24zM192 248a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm88 40a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"]\n};\nvar faCloudSunRain = {\n  prefix: 'fas',\n  iconName: 'cloud-sun-rain',\n  icon: [640, 512, [127782], \"f743\", \"M254.9 448.2c4.2-12.6 17.8-19.4 30.3-15.2 12.6 4.2 19.4 17.8 15.2 30.4l-21.4 64.1c-4.2 12.6-17.8 19.4-30.4 15.2s-19.4-17.8-15.2-30.3l21.4-64.2zm120 0c4.2-12.6 17.8-19.4 30.3-15.2 12.6 4.2 19.4 17.8 15.2 30.4l-21.4 64.1c-4.2 12.6-17.8 19.4-30.4 15.2s-19.4-17.8-15.2-30.3l21.4-64.2zm120 0c4.2-12.6 17.8-19.4 30.3-15.2 12.6 4.2 19.4 17.8 15.2 30.4l-21.4 64.1c-4.2 12.6-17.8 19.4-30.4 15.2s-19.4-17.8-15.2-30.3l21.4-64.2zM448.3 128c44.2 0 80 35.8 80 80 0 7.5-1.1 14.7-3 21.5 29.8 11.6 51 40.6 51 74.5 0 44.2-35.8 80-80 80l-192 0-8.2-.4c-40.3-4.1-71.8-38.2-71.8-79.6 0-39 27.9-71.5 64.9-78.5-.5-3.1-.9-6.2-.9-9.5 0-30.9 25.1-56 56-56 12.4 0 23.9 4.1 33.2 10.9 13.4-25.5 40.1-42.9 70.8-42.9zM240.3-31.8c5.3 0 10.3 2.7 13.3 7.1l47.3 70.4 83.3-16.3c5.2-1 10.6 .7 14.3 4.4 3.8 3.8 5.4 9.2 4.4 14.4l-8.6 43.8c-11.9 5.5-22.8 12.9-32.4 21.6-5.7-1-11.7-1.5-17.7-1.5-14.3 0-28 3-40.4 8.2-16.9-15-39.2-24.2-63.6-24.2-53 0-96 43-96 96 0 30.9 14.6 58.2 37.2 75.8-3.4 11.5-5.2 23.6-5.2 36.2 0 13.2 2 25.9 5.7 37.9l-2.4-3.5-83.2 16.3c-5.2 1-10.6-.7-14.3-4.4-3.8-3.8-5.4-9.2-4.4-14.4l16.3-83.3-70.4-47.4c-4.4-3-7.1-8-7.1-13.3 0-5.3 2.6-10.3 7-13.2l70.4-47.4-16.3-83.2-.2-2c-.3-4.6 1.3-9.1 4.6-12.4 3.8-3.8 9.2-5.4 14.4-4.4l83.2 16.3 47.3-70.4 1.2-1.6c3-3.5 7.4-5.5 12.1-5.5zm0 175.8c8.6 0 16.6 2.3 23.6 6.2-9.7 11.9-16.9 25.9-20.7 41.3-15 8.1-28.2 19.2-38.8 32.3-7.5-8.5-12.2-19.6-12.2-31.8 0-26.5 21.5-48 48-48z\"]\n};\nvar faArrowRightLong = {\n  prefix: 'fas',\n  iconName: 'arrow-right-long',\n  icon: [576, 512, [\"long-arrow-right\"], \"f178\", \"M566.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L466.7 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l434.7 0-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l128-128z\"]\n};\nvar faLongArrowRight = faArrowRightLong;\nvar faBuildingUn = {\n  prefix: 'fas',\n  iconName: 'building-un',\n  icon: [512, 512, [], \"e4d9\", \"M32 64C32 28.7 60.7 0 96 0L352 0c35.3 0 64 28.7 64 64l0 272-112 0c-20.9 0-39.5 10.1-51.2 25.6-8-6-18-9.6-28.8-9.6-26.5 0-48 21.5-48 48l0 64 64 0 0 48-144 0c-35.3 0-64-28.7-64-64L32 64zM144 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm112 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM144 224c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm112 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM427.4 380.5c9-2.1 18.3 2.2 22.5 10.5l26.1 52.2 0-43.3c0-11 9-20 20-20s20 9 20 20l0 128c0 9.3-6.4 17.3-15.4 19.5s-18.3-2.2-22.5-10.5L452 484.7 452 528c0 11-9 20-20 20s-20-9-20-20l0-128c0-9.3 6.4-17.3 15.4-19.5zM324 400l0 96c0 6.6 5.4 12 12 12s12-5.4 12-12l0-96c0-11 9-20 20-20s20 9 20 20l0 96c0 28.7-23.3 52-52 52s-52-23.3-52-52l0-96c0-11 9-20 20-20s20 9 20 20z\"]\n};\nvar faTemperatureLow = {\n  prefix: 'fas',\n  iconName: 'temperature-low',\n  icon: [512, 512, [], \"f76b\", \"M96 96c0-53 43-96 96-96s96 43 96 96l0 164.7c29.5 26.4 48 64.7 48 107.3 0 79.5-64.5 144-144 144S48 447.5 48 368c0-42.6 18.5-81 48-107.3L96 96zm96 336c35.3 0 64-28.7 64-64 0-26.9-16.5-49.9-40-59.3l0-28.7c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 28.7c-23.5 9.5-40 32.5-40 59.3 0 35.3 28.7 64 64 64zM464 80a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM352 80a80 80 0 1 1 160 0 80 80 0 1 1 -160 0z\"]\n};\nvar faDoorOpen = {\n  prefix: 'fas',\n  iconName: 'door-open',\n  icon: [448, 512, [], \"f52b\", \"M288 64l64 0 0 416c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-384c0-35.3-28.7-64-64-64l-96 0 0 0-160 0C60.7 0 32 28.7 32 64l0 384c-17.7 0-32 14.3-32 32s14.3 32 32 32l224 0c17.7 0 32-14.3 32-32l0-416zM160 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nvar faAlignLeft = {\n  prefix: 'fas',\n  iconName: 'align-left',\n  icon: [448, 512, [], \"f036\", \"M288 64c0 17.7-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64S14.3 32 32 32l224 0c17.7 0 32 14.3 32 32zm0 256c0 17.7-14.3 32-32 32L32 352c-17.7 0-32-14.3-32-32s14.3-32 32-32l224 0c17.7 0 32 14.3 32 32zM0 192c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 224c-17.7 0-32-14.3-32-32zM448 448c0 17.7-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z\"]\n};\nvar faCamera = {\n  prefix: 'fas',\n  iconName: 'camera',\n  icon: [512, 512, [62258, \"camera-alt\"], \"f030\", \"M149.1 64.8L138.7 96 64 96C28.7 96 0 124.7 0 160L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64l-74.7 0-10.4-31.2C356.4 45.2 338.1 32 317.4 32L194.6 32c-20.7 0-39 13.2-45.5 32.8zM256 192a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"]\n};\nvar faCameraAlt = faCamera;\nvar faUsersRays = {\n  prefix: 'fas',\n  iconName: 'users-rays',\n  icon: [640, 512, [], \"e593\", \"M31-33C21.7-23.6 21.7-8.4 31 1L87 57c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L65-33c-9.4-9.4-24.6-9.4-33.9 0zM609-33c-9.4-9.4-24.6-9.4-33.9 0L519 23c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0L609 1c9.4-9.4 9.4-24.6 0-33.9zM65 545l56-56c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L31 511c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0zm544 0c9.4-9.4 9.4-24.6 0-33.9l-56-56c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l56 56c9.4 9.4 24.6 9.4 33.9 0zM320 208a64 64 0 1 0 0-128 64 64 0 1 0 0 128zm0 32c-61.9 0-112 50.1-112 112l0 8c0 13.3 10.7 24 24 24l176 0c13.3 0 24-10.7 24-24l0-8c0-61.9-50.1-112-112-112zm216-80a56 56 0 1 0 -112 0 56 56 0 1 0 112 0zM451.2 260.4C469.4 286.3 480 317.9 480 352l0 8c0 8.4-1.4 16.5-4.1 24l78.8 0c11.8 0 21.3-9.6 21.3-21.3l0-10.7c0-53-43-96-96-96-10 0-19.7 1.5-28.8 4.4zm-262.4 0c-9.1-2.9-18.8-4.4-28.8-4.4-53 0-96 43-96 96l0 10.7c0 11.8 9.6 21.3 21.3 21.3l78.8 0c-2.7-7.5-4.1-15.6-4.1-24l0-8c0-34.1 10.6-65.7 28.8-91.6zM216 160a56 56 0 1 0 -112 0 56 56 0 1 0 112 0z\"]\n};\nvar faRainbow = {\n  prefix: 'fas',\n  iconName: 'rainbow',\n  icon: [640, 512, [127752], \"f75b\", \"M320 96C178.6 96 64 210.6 64 352l0 64c0 17.7-14.3 32-32 32S0 433.7 0 416l0-64C0 175.3 143.3 32 320 32S640 175.3 640 352l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64C576 210.6 461.4 96 320 96zm0 112c-79.5 0-144 64.5-144 144l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-114.9 93.1-208 208-208s208 93.1 208 208l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-79.5-64.5-144-144-144zM288 352l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-53 43-96 96-96s96 43 96 96l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7-14.3-32-32-32s-32 14.3-32 32z\"]\n};\nvar faSitemap = {\n  prefix: 'fas',\n  iconName: 'sitemap',\n  icon: [512, 512, [], \"f0e8\", \"M192 64c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-8 0 0 64 120 0c39.8 0 72 32.2 72 72l0 56 8 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l8 0 0-56c0-13.3-10.7-24-24-24l-120 0 0 80 8 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l8 0 0-80-120 0c-13.3 0-24 10.7-24 24l0 56 8 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l8 0 0-56c0-39.8 32.2-72 72-72l120 0 0-64-8 0c-17.7 0-32-14.3-32-32l0-64z\"]\n};\nvar faFaceGrinStars = {\n  prefix: 'fas',\n  iconName: 'face-grin-stars',\n  icon: [512, 512, [129321, \"grin-stars\"], \"f587\", \"M256 512c141.4 0 256-114.6 256-256 0-24.4-3.4-48.1-9.8-70.5 18.6-36.1-2.7-83.6-46.7-90-46.9-58.3-118.9-95.5-199.5-95.5S103.4 37.3 56.5 95.5c-44 6.4-65.3 53.9-46.7 90-6.4 22.4-9.8 46-9.8 70.5 0 141.4 114.6 256 256 256zM386.7 324.9c11.9-3.7 23.9 6.3 19.6 18.1-22.4 61.3-81.3 105.1-150.3 105.1S128.1 404.2 105.7 342.9c-4.3-11.8 7.7-21.8 19.6-18.1 39.2 12.2 83.7 19.1 130.7 19.1s91.5-6.9 130.7-19.1zm-31.6-231c5.3-10.7 20.5-10.7 25.8 0l20.9 42.4 46.7 6.8c11.8 1.7 16.5 16.2 8 24.5l-33.8 33 8 46.6c2 11.7-10.3 20.7-20.9 15.2l-41.8-22-41.8 22c-10.5 5.5-22.9-3.4-20.9-15.2l8-46.6-33.8-33c-8.5-8.3-3.8-22.8 8-24.5l46.7-6.8 20.9-42.4zm-198.2 0l20.9 42.4 46.7 6.8c11.8 1.7 16.5 16.2 8 24.5l-33.8 33 8 46.6c2 11.7-10.3 20.7-20.9 15.2l-41.8-22-41.8 22c-10.5 5.5-22.9-3.4-20.9-15.2l8-46.6-33.8-33c-8.5-8.3-3.8-22.8 8-24.5l46.7-6.8 20.9-42.4c5.3-10.7 20.5-10.7 25.8 0z\"]\n};\nvar faGrinStars = faFaceGrinStars;\nvar faSortUp = {\n  prefix: 'fas',\n  iconName: 'sort-up',\n  icon: [384, 512, [\"sort-asc\"], \"f0de\", \"M32 224c-12.9 0-24.6-7.8-29.6-19.8S.2 178.5 9.4 169.4l160-160c12.5-12.5 32.8-12.5 45.3 0l160 160c9.2 9.2 11.9 22.9 6.9 34.9S364.9 224 352 224L32 224z\"]\n};\nvar faSortAsc = faSortUp;\nvar faEye = {\n  prefix: 'fas',\n  iconName: 'eye',\n  icon: [576, 512, [128065], \"f06e\", \"M288 32c-80.8 0-145.5 36.8-192.6 80.6-46.8 43.5-78.1 95.4-93 131.1-3.3 7.9-3.3 16.7 0 24.6 14.9 35.7 46.2 87.7 93 131.1 47.1 43.7 111.8 80.6 192.6 80.6s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1 3.3-7.9 3.3-16.7 0-24.6-14.9-35.7-46.2-87.7-93-131.1-47.1-43.7-111.8-80.6-192.6-80.6zM144 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-64c0 35.3-28.7 64-64 64-11.5 0-22.3-3-31.7-8.4-1 10.9-.1 22.1 2.9 33.2 13.7 51.2 66.4 81.6 117.6 67.9s81.6-66.4 67.9-117.6c-12.2-45.7-55.5-74.8-101.1-70.8 5.3 9.3 8.4 20.1 8.4 31.7z\"]\n};\nvar faCaretLeft = {\n  prefix: 'fas',\n  iconName: 'caret-left',\n  icon: [256, 512, [], \"f0d9\", \"M7.7 235.8c-10.3 12.6-9.5 31.1 2.2 42.8l128 128c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-256c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-128 128-2.2 2.4z\"]\n};\nvar faAppleWhole = {\n  prefix: 'fas',\n  iconName: 'apple-whole',\n  icon: [448, 512, [127822, 127823, \"apple-alt\"], \"f5d1\", \"M224 112c-8.8 0-16-7.2-16-16l0-16c0-44.2 35.8-80 80-80l16 0c8.8 0 16 7.2 16 16l0 16c0 44.2-35.8 80-80 80l-16 0zM0 288c0-76.3 35.7-160 112-160 27.3 0 59.7 10.3 82.7 19.3 18.8 7.3 39.9 7.3 58.7 0 22.9-8.9 55.4-19.3 82.7-19.3 76.3 0 112 83.7 112 160 0 128-80 224-160 224-16.5 0-38.1-6.6-51.5-11.3-8.1-2.8-16.9-2.8-25 0-13.4 4.7-35 11.3-51.5 11.3-80 0-160-96-160-224z\"]\n};\nvar faAppleAlt = faAppleWhole;\nvar faScrollTorah = {\n  prefix: 'fas',\n  iconName: 'scroll-torah',\n  icon: [576, 512, [\"torah\"], \"f6a0\", \"M0 48C0 21.5 21.5 0 48 0 68.9 0 86.7 13.4 93.3 32l389.5 0c6.6-18.6 24.4-32 45.3-32 26.5 0 48 21.5 48 48l0 416c0 26.5-21.5 48-48 48-20.9 0-38.7-13.4-45.3-32L93.3 480c-6.6 18.6-24.4 32-45.3 32-26.5 0-48-21.5-48-48L0 48zM177.9 301c-1.2 2-1.9 4.2-1.9 6.6 0 6.9 5.6 12.5 12.5 12.5l56.9 0 30.5 49.2c2.6 4.2 7.2 6.8 12.2 6.8s9.6-2.6 12.2-6.8l30.5-49.2 56.9 0c6.9 0 12.5-5.6 12.5-12.5 0-2.3-.6-4.6-1.9-6.6l-27.8-45 27.8-45c1.2-2 1.9-4.2 1.9-6.6 0-6.9-5.6-12.5-12.5-12.5l-56.9 0-30.5-49.2c-2.6-4.2-7.2-6.8-12.2-6.8s-9.6 2.6-12.2 6.8l-30.5 49.2-56.9 0c-6.9 0-12.5 5.6-12.5 12.5 0 2.3 .6 4.6 1.9 6.6l27.8 45-27.8 45z\"]\n};\nvar faTorah = faScrollTorah;\nvar faHouseLock = {\n  prefix: 'fas',\n  iconName: 'house-lock',\n  icon: [640, 512, [], \"e510\", \"M528 224.1c44.2 0 80 35.8 80 80l0 50.6c18.6 6.6 32 24.4 32 45.3l0 96c0 26.5-21.5 48-48 48l-128 0c-26.5 0-48-21.5-48-48l0-96c0-20.9 13.4-38.7 32-45.3l0-50.6c0-44.2 35.8-80 80-80zM268.6 6.5c12.2-9.3 29.7-8.7 41.2 2l185 171.8C440.2 195 400 244.8 400 304l0 24.4c-19.6 17.6-32 43.1-32 71.5l0 96c0 5.5 .5 10.9 1.3 16.1L144 512c-35.3 0-64-28.7-64-64l0-176-16 0c-13.2 0-25-8.1-29.8-20.3s-1.6-26.2 8-35.1l224-208 2.4-2zM272 320c-26.5 0-48 21.5-48 48l0 96 96 0 0-87.3c0-16.5 7-31.5 18.4-42.1-8.7-9-20.9-14.6-34.4-14.6l-32 0zm256-47.9c-17.7 0-32 14.3-32 32l0 47.9 64 0 0-47.9c0-17.7-14.3-32-32-32z\"]\n};\nvar faArrowsLeftRightToLine = {\n  prefix: 'fas',\n  iconName: 'arrows-left-right-to-line',\n  icon: [576, 512, [], \"e4ba\", \"M32 96C14.3 96 0 110.3 0 128L0 384c0 17.7 14.3 32 32 32s32-14.3 32-32l0-256c0-17.7-14.3-32-32-32zM390.6 342.6l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l9.4 9.4-133.5 0 9.4-9.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-64 64c-6 6-9.4 14.1-9.4 22.6s3.4 16.6 9.4 22.6l64 64c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-9.4-9.4 133.5 0-9.4 9.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0zM576 128c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 256c0 17.7 14.3 32 32 32s32-14.3 32-32l0-256z\"]\n};\nvar faTrash = {\n  prefix: 'fas',\n  iconName: 'trash',\n  icon: [448, 512, [], \"f1f8\", \"M136.7 5.9L128 32 32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0-8.7-26.1C306.9-7.2 294.7-16 280.9-16L167.1-16c-13.8 0-26 8.8-30.4 21.9zM416 144L32 144 53.1 467.1C54.7 492.4 75.7 512 101 512L347 512c25.3 0 46.3-19.6 47.9-44.9L416 144z\"]\n};\nvar faFaceSadTear = {\n  prefix: 'fas',\n  iconName: 'face-sad-tear',\n  icon: [512, 512, [128546, \"sad-tear\"], \"f5b4\", \"M0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zm271 98c5.5-1.3 11.1-2 17-2 24.1 0 45.4 11.8 58.5 30 7.7 10.8 22.7 13.2 33.5 5.5s13.2-22.7 5.5-33.5c-21.7-30.2-57.3-50-97.5-50-12.5 0-24.6 1.9-35.9 5.5 9.8 12.7 16.5 27.9 18.9 44.6zM176 240a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm192-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM185.4 292.8c-2.4-2.9-5.7-4.8-9.4-4.8s-7 1.9-9.4 4.8c-6.5 7.8-12.6 16.1-18.3 24.6-9 13.4-20.3 30.2-20.3 47.4 0 28.3 21.5 51.2 48 51.2s48-22.9 48-51.2c0-17.2-11.2-34-20.3-47.4-5.7-8.5-11.9-16.7-18.3-24.6z\"]\n};\nvar faSadTear = faFaceSadTear;\nvar faFax = {\n  prefix: 'fas',\n  iconName: 'fax',\n  icon: [512, 512, [128224, 128439], \"f1ac\", \"M160 64l0 80 64 0 0-80 146.7 0 45.3 45.3 0 34.7 64 0 0-34.7c0-17-6.7-33.3-18.7-45.3L416 18.7C404 6.7 387.7 0 370.7 0L224 0c-35.3 0-64 28.7-64 64zM32 128c-17.7 0-32 14.3-32 32L0 448c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32l0-288c0-17.7-14.3-32-32-32l-48 0zm448 64l-320 0 0 256c0 17.7 14.3 32 32 32l288 0c17.7 0 32-14.3 32-32l0-224c0-17.7-14.3-32-32-32zM224 288a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm0 96a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM336 264a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM312 384a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM424 264a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM400 384a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nvar faPersonCirclePlus = {\n  prefix: 'fas',\n  iconName: 'person-circle-plus',\n  icon: [640, 512, [], \"e541\", \"M280 24a56 56 0 1 0 -112 0 56 56 0 1 0 112 0zm24 212.7L341 286.6c12.8-17.5 28.5-32.7 46.3-45l-56.2-75.7C306 132 266.3 112 224 112s-82 20-107.2 53.9l-70.5 95c-10.5 14.2-7.6 34.2 6.6 44.8s34.2 7.6 44.8-6.6L144 236.7 144 512c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-8.8 7.2-16 16-16s16 7.2 16 16l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-275.3zM496 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm16-208l0 48 48 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l48 0 0-48c0-8.8 7.2-16 16-16s16 7.2 16 16z\"]\n};\nvar faHamsa = {\n  prefix: 'fas',\n  iconName: 'hamsa',\n  icon: [512, 512, [], \"f665\", \"M34.6 288L80 288c8.8 0 16-7.2 16-16L96 72c0-22.1 17.9-40 40-40s40 17.9 40 40l0 132c0 11 9 20 20 20s20-9 20-20l0-164c0-22.1 17.9-40 40-40s40 17.9 40 40l0 164c0 11 9 20 20 20s20-9 20-20l0-132c0-22.1 17.9-40 40-40s40 17.9 40 40l0 200c0 8.8 7.2 16 16 16l45.4 0c19.1 0 34.6 15.5 34.6 34.6 0 8.6-3.2 16.9-9 23.3L416.6 441c-41.1 45.2-99.4 71-160.6 71S136.6 486.2 95.4 441L9 345.9c-5.8-6.4-9-14.7-9-23.3 0-19.1 15.5-34.6 34.6-34.6zM256 288c-38.4 0-76.8 35.8-90.6 50.2-3.6 3.7-5.4 8.7-5.4 13.8s1.8 10.1 5.4 13.8C179.2 380.2 217.6 416 256 416s76.8-35.8 90.6-50.2c3.6-3.7 5.4-8.7 5.4-13.8s-1.8-10.1-5.4-13.8C332.8 323.8 294.4 288 256 288zm0 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faPersonCircleQuestion = {\n  prefix: 'fas',\n  iconName: 'person-circle-question',\n  icon: [640, 512, [], \"e542\", \"M280 24a56 56 0 1 0 -112 0 56 56 0 1 0 112 0zm24 212.7L341 286.6c12.8-17.5 28.5-32.7 46.3-45l-56.2-75.7C306 132 266.3 112 224 112s-82 20-107.2 53.9l-70.5 95c-10.5 14.2-7.6 34.2 6.6 44.8s34.2 7.6 44.8-6.6L144 236.7 144 512c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-8.8 7.2-16 16-16s16 7.2 16 16l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-275.3zM496 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-100a20 20 0 1 1 0 40 20 20 0 1 1 0-40zm0-100c-11.6 0-21.3 8.2-23.5 19.2-1.8 8.7-10.2 14.3-18.9 12.5s-14.3-10.2-12.5-18.9c5.2-25.6 27.8-44.8 54.9-44.8 30.9 0 56 25.1 56 56 0 19.8-11.7 37.8-29.8 45.9l-10.4 4.6c-1.2 7.7-7.8 13.5-15.8 13.5-8.8 0-16-7.2-16-16 0-11.2 6.6-21.3 16.8-25.9l12.4-5.5c6.6-2.9 10.8-9.4 10.8-16.6 0-13.3-10.7-24-24-24z\"]\n};\nvar faClipboardCheck = {\n  prefix: 'fas',\n  iconName: 'clipboard-check',\n  icon: [384, 512, [], \"f46c\", \"M256 0c23.7 0 44.4 12.9 55.4 32l8.6 0c35.3 0 64 28.7 64 64l0 352c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l8.6 0C83.6 12.9 104.3 0 128 0L256 0zm26.9 212.6c-10.7-7.8-25.7-5.4-33.5 5.3l-85.6 117.7-26.5-27.4c-9.2-9.5-24.4-9.8-33.9-.6s-9.8 24.4-.6 33.9l46.4 48c4.9 5.1 11.8 7.8 18.9 7.3s13.6-4.1 17.8-9.8L288.2 246.1c7.8-10.7 5.4-25.7-5.3-33.5zM136 64c-13.3 0-24 10.7-24 24s10.7 24 24 24l112 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L136 64z\"]\n};\nvar faShareFromSquare = {\n  prefix: 'fas',\n  iconName: 'share-from-square',\n  icon: [576, 512, [61509, \"share-square\"], \"f14d\", \"M384.5 24l0 72-64 0c-79.5 0-144 64.5-144 144 0 93.4 82.8 134.8 100.6 142.6 2.2 1 4.6 1.4 7.1 1.4l2.5 0c9.8 0 17.8-8 17.8-17.8 0-8.3-5.9-15.5-12.8-20.3-8.9-6.2-19.2-18.2-19.2-40.5 0-45 36.5-81.5 81.5-81.5l30.5 0 0 72c0 9.7 5.8 18.5 14.8 22.2s19.3 1.7 26.2-5.2l136-136c9.4-9.4 9.4-24.6 0-33.9L425.5 7c-6.9-6.9-17.2-8.9-26.2-5.2S384.5 14.3 384.5 24zm-272 72c-44.2 0-80 35.8-80 80l0 256c0 44.2 35.8 80 80 80l256 0c44.2 0 80-35.8 80-80l0-32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 32c0 8.8-7.2 16-16 16l-256 0c-8.8 0-16-7.2-16-16l0-256c0-8.8 7.2-16 16-16l16 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-16 0z\"]\n};\nvar faShareSquare = faShareFromSquare;\nvar faReceipt = {\n  prefix: 'fas',\n  iconName: 'receipt',\n  icon: [384, 512, [129534], \"f543\", \"M14 2.2C22.5-1.7 32.5-.3 39.6 5.8L80 40.4 120.4 5.8c9-7.7 22.3-7.7 31.2 0L192 40.4 232.4 5.8c9-7.7 22.2-7.7 31.2 0L304 40.4 344.4 5.8c7.1-6.1 17.1-7.5 25.6-3.6S384 14.6 384 24l0 464c0 9.4-5.5 17.9-14 21.8s-18.5 2.5-25.6-3.6l-40.4-34.6-40.4 34.6c-9 7.7-22.2 7.7-31.2 0l-40.4-34.6-40.4 34.6c-9 7.7-22.3 7.7-31.2 0L80 471.6 39.6 506.2c-7.1 6.1-17.1 7.5-25.6 3.6S0 497.4 0 488L0 24C0 14.6 5.5 6.1 14 2.2zM104 136c-13.3 0-24 10.7-24 24s10.7 24 24 24l176 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-176 0zM80 352c0 13.3 10.7 24 24 24l176 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-176 0c-13.3 0-24 10.7-24 24zm24-120c-13.3 0-24 10.7-24 24s10.7 24 24 24l176 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-176 0z\"]\n};\nvar faEquals = {\n  prefix: 'fas',\n  iconName: 'equals',\n  icon: [448, 512, [62764], \"3d\", \"M32 128c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 128zm0 192c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 320z\"]\n};\nvar faChevronUp = {\n  prefix: 'fas',\n  iconName: 'chevron-up',\n  icon: [448, 512, [], \"f077\", \"M201.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L224 173.3 54.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z\"]\n};\nvar faVirusSlash = {\n  prefix: 'fas',\n  iconName: 'virus-slash',\n  icon: [576, 512, [], \"e075\", \"M41-24.9c-9.4-9.4-24.6-9.4-33.9 0S-2.3-.3 7 9.1l528 528c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-88.6-88.6c1.7-12.1-2-24.8-11.3-34-31.2-31.2-9.1-84.5 35-84.5 22.1 0 40-17.9 40-40s-17.9-40-40-40c-44.1 0-66.1-53.3-35-84.5 15.6-15.6 15.6-40.9 0-56.6s-40.9-15.6-56.6 0c-31.2 31.2-84.5 9.1-84.5-35 0-22.1-17.9-40-40-40s-40 17.9-40 40c0 44.1-53.3 66.1-84.5 35-9.3-9.3-22-13-34-11.3L41-24.9zM72 216c-22.1 0-40 17.9-40 40s17.9 40 40 40c44.1 0 66.1 53.3 35 84.5-15.6 15.6-15.6 40.9 0 56.6s40.9 15.6 56.6 0c31.2-31.2 84.5-9.1 84.5 35 0 22.1 17.9 40 40 40s40-17.9 40-40c0-21.4 12.6-37.6 29.1-45.1l-240-240C109.6 203.4 93.4 216 72 216z\"]\n};\nvar faSlash = {\n  prefix: 'fas',\n  iconName: 'slash',\n  icon: [576, 512, [], \"f715\", \"M7-25c9.4-9.4 24.6-9.4 33.9 0L569 503c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L7 9C-2.3-.4-2.3-15.6 7-25z\"]\n};\nvar faExpand = {\n  prefix: 'fas',\n  iconName: 'expand',\n  icon: [448, 512, [], \"f065\", \"M32 32C14.3 32 0 46.3 0 64l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zM64 352c0-17.7-14.3-32-32-32S0 334.3 0 352l0 96c0 17.7 14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-64zM320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-96 0zM448 352c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32l0-96z\"]\n};\nvar faNoteSticky = {\n  prefix: 'fas',\n  iconName: 'note-sticky',\n  icon: [448, 512, [62026, \"sticky-note\"], \"f249\", \"M64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 213.5c0 17-6.7 33.3-18.7 45.3L322.7 461.3c-12 12-28.3 18.7-45.3 18.7L64 480zM389.5 304L296 304c-13.3 0-24 10.7-24 24l0 93.5 117.5-117.5z\"]\n};\nvar faStickyNote = faNoteSticky;\nvar faTableColumns = {\n  prefix: 'fas',\n  iconName: 'table-columns',\n  icon: [448, 512, [\"columns\"], \"f0db\", \"M0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm64 64l0 256 128 0 0-256-128 0zm320 0l-128 0 0 256 128 0 0-256z\"]\n};\nvar faColumns = faTableColumns;\nvar faPersonShelter = {\n  prefix: 'fas',\n  iconName: 'person-shelter',\n  icon: [512, 512, [], \"e54f\", \"M271.9 4.2c-9.8-5.6-21.9-5.6-31.8 0l-224 128C6.2 137.9 0 148.5 0 160L0 480c0 17.7 14.3 32 32 32s32-14.3 32-32L64 178.6 256 68.9 448 178.6 448 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-320c0-11.5-6.2-22.1-16.1-27.8l-224-128zM256 208a40 40 0 1 0 0-80 40 40 0 1 0 0 80zm-8 192l16 0 0 88c0 13.3 10.7 24 24 24s24-10.7 24-24l0-174.5 26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-33.2-61.7C329.7 245.1 294.4 224 256 224s-73.7 21.1-91.9 54.9l-33.2 61.7c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L200 313.5 200 488c0 13.3 10.7 24 24 24s24-10.7 24-24l0-88z\"]\n};\nvar faCircleNotch = {\n  prefix: 'fas',\n  iconName: 'circle-notch',\n  icon: [512, 512, [], \"f1ce\", \"M222.7 32.1c5 16.9-4.6 34.8-21.5 39.8-79.3 23.6-137.1 97.1-137.1 184.1 0 106 86 192 192 192s192-86 192-192c0-86.9-57.8-160.4-137.1-184.1-16.9-5-26.6-22.9-21.5-39.8s22.9-26.6 39.8-21.5C434.9 42.1 512 140 512 256 512 397.4 397.4 512 256 512S0 397.4 0 256c0-116 77.1-213.9 182.9-245.4 16.9-5 34.8 4.6 39.8 21.5z\"]\n};\nvar faWater = {\n  prefix: 'fas',\n  iconName: 'water',\n  icon: [512, 512, [], \"f773\", \"M410.6 124.1c20.7 15.6 46 30.7 74.2 34.5 13.1 1.8 25.2-7.5 27-20.6s-7.5-25.2-20.6-27c-15.9-2.1-33.2-11.3-51.7-25.2-38.4-29-90.5-29-129 0-24 18.1-40.7 26.3-54.5 26.3s-30.5-8.2-54.5-26.3c-38.4-29-90.5-29-129 0-18.5 13.9-35.8 23.1-51.7 25.2-13.1 1.8-22.4 13.8-20.6 27s13.8 22.4 27 20.6c28.2-3.8 53.6-18.9 74.2-34.5 21.3-16.1 49.9-16.1 71.2 0 24.2 18.3 52.3 35.9 83.4 35.9s59.1-17.7 83.4-35.9c21.3-16.1 49.9-16.1 71.2 0zm0 144c20.7 15.6 46 30.7 74.2 34.5 13.1 1.8 25.2-7.5 27-20.6s-7.5-25.2-20.6-27c-15.9-2.1-33.2-11.3-51.7-25.2-38.4-29-90.5-29-129 0-24 18.1-40.7 26.3-54.5 26.3s-30.5-8.2-54.5-26.3c-38.4-29-90.5-29-129 0-18.5 13.9-35.8 23.1-51.7 25.2-13.1 1.7-22.4 13.8-20.6 27s13.8 22.4 27 20.6c28.2-3.8 53.6-18.9 74.2-34.5 21.3-16.1 49.9-16.1 71.2 0 24.2 18.3 52.3 35.9 83.4 35.9s59.1-17.7 83.4-35.9c21.3-16.1 49.9-16.1 71.2 0zm-71.2 144c21.3-16.1 49.9-16.1 71.2 0 20.7 15.6 46 30.7 74.2 34.5 13.1 1.8 25.2-7.5 27-20.6s-7.5-25.2-20.6-27c-15.9-2.1-33.2-11.3-51.7-25.2-38.4-29-90.5-29-129 0-24 18.1-40.7 26.3-54.5 26.3s-30.5-8.2-54.5-26.3c-38.4-29-90.5-29-129 0-18.5 13.9-35.8 23.1-51.7 25.2-13.1 1.8-22.4 13.8-20.6 27s13.8 22.4 27 20.6c28.2-3.8 53.6-18.9 74.2-34.5 21.3-16.1 49.9-16.1 71.2 0 24.2 18.3 52.3 35.9 83.4 35.9s59.1-17.7 83.4-35.9z\"]\n};\nvar faDeleteLeft = {\n  prefix: 'fas',\n  iconName: 'delete-left',\n  icon: [640, 512, [9003, \"backspace\"], \"f55a\", \"M576 128c0-35.3-28.7-64-64-64L205.3 64c-17 0-33.3 6.7-45.3 18.7L9.4 233.4c-6 6-9.4 14.1-9.4 22.6s3.4 16.6 9.4 22.6L160 429.3c12 12 28.3 18.7 45.3 18.7L512 448c35.3 0 64-28.7 64-64l0-256zM284.1 188.1c9.4-9.4 24.6-9.4 33.9 0l33.9 33.9 33.9-33.9c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-33.9 33.9 33.9 33.9c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-33.9-33.9-33.9 33.9c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l33.9-33.9-33.9-33.9c-9.4-9.4-9.4-24.6 0-33.9z\"]\n};\nvar faBackspace = faDeleteLeft;\nvar faBroomBall = {\n  prefix: 'fas',\n  iconName: 'broom-ball',\n  icon: [576, 512, [\"quidditch\", \"quidditch-broom-ball\"], \"f458\", \"M496 544a80 80 0 1 1 0-160 80 80 0 1 1 0 160zM106.8 277.2c30.6-30.6 73.1-45.9 115.8-42.2L341 353.3c3.7 42.8-11.6 85.2-42.2 115.9-27.4 27.4-64.6 42.8-103.3 42.8L22.1 512c-12.2 0-22.1-9.9-22.1-22.1 0-6.3 2.7-12.3 7.3-16.5L133.7 359.7c4.2-3.7-.4-10.4-5.4-7.9L77.2 377.4c-6.1 3-13.2-1.4-13.2-8.2 0-31.5 12.5-61.8 34.8-84l8-8zm417-270c12.6-10.3 31.1-9.5 42.8 2.2s12.4 30.2 2.2 42.8l-2.2 2.4-192 192 34.8 34.7c4.2 4.2 6.6 10 6.6 16 0 12.5-10.1 22.6-22.6 22.6l-29.1 0-108.3-108.3 0-29.1c0-12.5 10.1-22.6 22.6-22.6 6 0 11.8 2.4 16 6.6l34.8 34.7 192-192 2.4-2.2z\"]\n};\nvar faQuidditch = faBroomBall;\nvar faQuidditchBroomBall = faBroomBall;\nvar faJ = {\n  prefix: 'fas',\n  iconName: 'j',\n  icon: [320, 512, [106], \"4a\", \"M288 32c17.7 0 32 14.3 32 32l0 256c0 88.4-71.6 160-160 160S0 408.4 0 320l0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32c0 53 43 96 96 96s96-43 96-96l0-256c0-17.7 14.3-32 32-32z\"]\n};\nvar faShuttleSpace = {\n  prefix: 'fas',\n  iconName: 'shuttle-space',\n  icon: [576, 512, [\"space-shuttle\"], \"f197\", \"M0 368l0 64c0 26.5 21.5 48 48 48l50 0c40.6 0 80.4-11 115.2-31.9l133.5-80.1-93.3 0-64.9 38.9c-14 8.4-28.9 14.7-44.5 19l0-66.4c9.7-5.6 17.8-13.7 23.4-23.4l198.8 0c67.1 0 127.8-20.6 170.3-70.6 4.6-5.4 4.6-13.3 0-18.8-42.5-50.1-103.2-70.6-170.3-70.6l-198.8 0c-5.6-9.7-13.7-17.8-23.4-23.4l0-66.4c15.6 4.2 30.6 10.6 44.5 19l64.9 38.9 93.3 0-133.5-80.1C178.4 43 138.6 32 98 32L48 32C21.5 32 0 53.5 0 80L0 368zm96 0l0 64-48 0 0-64 48 0zM96 80l0 64-48 0 0-64 48 0zM416 224c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16z\"]\n};\nvar faSpaceShuttle = faShuttleSpace;\nvar faYinYang = {\n  prefix: 'fas',\n  iconName: 'yin-yang',\n  icon: [512, 512, [9775], \"f6ad\", \"M224 160a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32 352a256 256 0 1 0 0-512 256 256 0 1 0 0 512zm0-448c53 0 96 43 96 96s-43 96-96 96-96 43-96 96 43 96 96 96C150 448 64 362 64 256S150 64 256 64zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nvar faStop = {\n  prefix: 'fas',\n  iconName: 'stop',\n  icon: [448, 512, [9209], \"f04d\", \"M64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32z\"]\n};\nvar faTrowel = {\n  prefix: 'fas',\n  iconName: 'trowel',\n  icon: [576, 512, [], \"e589\", \"M407.9 181.4L277.3 312 342.6 377.4c7.9 7.9 11.1 19.4 8.4 30.3s-10.8 19.6-21.5 22.9l-256 80c-11.4 3.5-23.8 .5-32.2-7.9s-11.5-20.8-7.9-32.2l80-256c3.3-10.7 12-18.9 22.9-21.5s22.4 .5 30.3 8.4L232 266.7 362.6 136.1c-14.3-14.6-14.2-38 .3-52.5l95.4-95.4c26.9-26.9 70.5-26.9 97.5 0s26.9 70.5 0 97.5l-95.4 95.4c-14.5 14.5-37.9 14.6-52.5 .3z\"]\n};\nvar faHandBackFist = {\n  prefix: 'fas',\n  iconName: 'hand-back-fist',\n  icon: [384, 512, [\"hand-rock\"], \"f255\", \"M7.4 253.6C2.6 245.9 0 237.1 0 228l0-36c0-26.5 21.5-48 48-48l16 0 0-80c0-26.5 21.5-48 48-48 17.3 0 32.4 9.1 40.9 22.8 4.3-22.1 23.8-38.8 47.1-38.8 23.4 0 42.9 16.8 47.1 38.9 7.3-4.4 15.8-6.9 24.9-6.9 22.1 0 40.8 15 46.3 35.4 5.5-2.2 11.4-3.4 17.7-3.4 26.5 0 48 21.5 48 48l0 96.9c0 9.9-2.3 19.7-6.8 28.6l-39.6 79.1c-10.8 21.7-33 35.4-57.2 35.4L96 352c-16.5 0-31.8-8.4-40.6-22.4l-48-76zM32 480l0-48c0-17.7 14.3-32 32-32l256 0c17.7 0 32 14.3 32 32l0 48c0 17.7-14.3 32-32 32L64 512c-17.7 0-32-14.3-32-32z\"]\n};\nvar faHandRock = faHandBackFist;\nvar faTemperatureHigh = {\n  prefix: 'fas',\n  iconName: 'temperature-high',\n  icon: [512, 512, [], \"f769\", \"M96 96c0-53 43-96 96-96s96 43 96 96l0 164.7c29.5 26.4 48 64.7 48 107.3 0 79.5-64.5 144-144 144S48 447.5 48 368c0-42.6 18.5-81 48-107.3L96 96zm96 336c35.3 0 64-28.7 64-64 0-26.9-16.5-49.9-40-59.3L216 96c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 212.7c-23.5 9.5-40 32.5-40 59.3 0 35.3 28.7 64 64 64zM464 80a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM352 80a80 80 0 1 1 160 0 80 80 0 1 1 -160 0z\"]\n};\nvar faGreaterThan = {\n  prefix: 'fas',\n  iconName: 'greater-than',\n  icon: [512, 512, [62769], \"3e\", \"M34.9 50.6c-7.4 16-.4 35.1 15.6 42.5L403.6 256 50.6 419c-16 7.4-23.1 26.4-15.6 42.5s26.4 23 42.5 15.6l416-192c11.3-5.2 18.6-16.6 18.6-29.1s-7.3-23.8-18.6-29.1L77.4 35c-16-7.4-35.1-.4-42.5 15.6z\"]\n};\nvar faCrutch = {\n  prefix: 'fas',\n  iconName: 'crutch',\n  icon: [512, 512, [], \"f7f7\", \"M297.4 9.4c12.5-12.5 32.8-12.5 45.3 0l160 160c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-1.4-1.4-158.6 158.6c-18 18-42.4 28.1-67.9 28.1l-59 0c-8.5 0-16.6 3.4-22.6 9.4-61.7 61.7-92.8 92.8-93.3 93.3-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l16-16 0 0 77.3-77.3c6-6 9.4-14.1 9.4-22.6l0-59c0-25.5 10.1-49.9 28.1-67.9L298.7 56 297.4 54.6c-12.5-12.5-12.5-32.8 0-45.3zM344 101.3L261.3 184 328 250.7 410.7 168 344 101.3zm-128 128l-30.6 30.6c-6 6-9.4 14.1-9.4 22.6l0 53.5 53.5 0c8.5 0 16.6-3.4 22.6-9.4L282.7 296 216 229.3z\"]\n};\nvar faSeptagon = {\n  prefix: 'fas',\n  iconName: 'septagon',\n  icon: [576, 512, [\"heptagon\"], \"e820\", \"M267.4-31.5c15.9-5.5 33.5-4.6 48.8 2.7l172.4 83 6.3 3.5c14.2 9 24.5 23.3 28.3 39.9l42.6 186.5 1.2 7.2c1.6 14.3-1.7 28.8-9.4 41.1l-4.2 5.9-119.3 149.6c-12.1 15.2-30.6 24.1-50 24.1l-191.3 0c-19.5 0-37.9-8.9-50-24.1L23.5 338.4c-12.1-15.2-16.7-35.2-12.3-54.2l42.6-186.5 2-7c5.6-15.9 17.2-29 32.6-36.4l172.4-83 6.7-2.7z\"]\n};\nvar faHeptagon = faSeptagon;\nvar faStreetView = {\n  prefix: 'fas',\n  iconName: 'street-view',\n  icon: [512, 512, [], \"f21d\", \"M256 0a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM224 160l64 0c35.3 0 64 28.7 64 64l0 48c0 17.7-14.3 32-32 32l-1.8 0-11.1 99.5c-1.8 16.2-15.5 28.5-31.8 28.5l-38.7 0c-16.3 0-30-12.3-31.8-28.5l-11.1-99.5-1.8 0c-17.7 0-32-14.3-32-32l0-48c0-35.3 28.7-64 64-64zM412.4 400.2c-16.1-4.2-34.8-7.6-55.4-10.2l5.3-47.7c22.7 2.9 43.7 6.7 62.1 11.5 22.4 5.8 42.6 13.3 57.8 23.3 14.7 9.6 29.8 24.9 29.8 47s-15.1 37.4-29.8 47c-15.2 9.9-35.5 17.5-57.8 23.3-45.1 11.7-105.3 17.8-168.4 17.8s-123.3-6.1-168.4-17.8C65.2 488.4 45 480.9 29.8 471 15.1 461.4 0 446.1 0 424s15.1-37.4 29.8-47c15.2-9.9 35.5-17.5 57.8-23.3 18.5-4.8 39.5-8.6 62.1-11.5L155 390c-20.6 2.6-39.3 6.1-55.4 10.2-56.6 14.6-56.6 32.9 0 47.5 39.9 10.3 95.8 16.2 156.4 16.2s116.5-5.9 156.4-16.2c56.6-14.6 56.6-32.9 0-47.5z\"]\n};\nvar faWaveSquare = {\n  prefix: 'fas',\n  iconName: 'wave-square',\n  icon: [512, 512, [], \"f83e\", \"M64 96c0-17.7 14.3-32 32-32l160 0c17.7 0 32 14.3 32 32l0 288 96 0 0-128c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 128c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-288-96 0 0 128c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-128z\"]\n};\nvar faAngleLeft = {\n  prefix: 'fas',\n  iconName: 'angle-left',\n  icon: [256, 512, [8249], \"f104\", \"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256 214.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z\"]\n};\nvar faScrewdriver = {\n  prefix: 'fas',\n  iconName: 'screwdriver',\n  icon: [576, 512, [129691], \"f54a\", \"M352.1 146.7l0-49.6c0-10.7 5.3-20.7 14.2-26.6L485.2-8.7c6.3-4.2 14.8-3.4 20.2 2l45.4 45.5c5.4 5.4 6.2 13.8 2 20.2L473.6 177.8c-5.9 8.9-15.9 14.2-26.6 14.2l-49.6 0-90.7 90.7c15 33.3 8.9 73.9-18.5 101.3L162.1 510.1c-18.7 18.7-49.1 18.7-67.9 0L34.1 449.9c-18.7-18.7-18.7-49.1 0-67.9L160.1 256c27.4-27.4 67.9-33.6 101.3-18.5l90.7-90.7z\"]\n};\nvar faTractor = {\n  prefix: 'fas',\n  iconName: 'tractor',\n  icon: [576, 512, [128668], \"f722\", \"M160 96l0 96 133.4 0-57.6-96-75.8 0zM96 223L96 64c0-17.7 14.3-32 32-32l107.8 0c22.5 0 43.3 11.8 54.9 31.1l77.4 128.9 64 0 0-72c0-13.3 10.7-24 24-24s24 10.7 24 24l0 72 48 0c26.5 0 48 21.5 48 48l0 41.5c0 14.2-6.3 27.8-17.3 36.9l-35 29.2c26.5 15.2 44.3 43.7 44.3 76.4 0 48.6-39.4 88-88 88s-88-39.4-88-88c0-14.4 3.5-28 9.6-40l-101.2 0c-3 13.4-7.9 26-14.4 37.7 7.7 9.4 7.2 23.4-1.6 32.2l-22.6 22.6c-8.8 8.8-22.7 9.3-32.2 1.6-9.3 5.2-19.3 9.3-29.8 12.3-1.2 12.1-11.4 21.6-23.9 21.6l-32 0c-12.4 0-22.7-9.5-23.9-21.6-10.5-3-20.4-7.2-29.8-12.3-9.4 7.7-23.4 7.2-32.2-1.6L35.5 453.8c-8.8-8.8-9.3-22.7-1.6-32.2-5.2-9.3-9.3-19.3-12.3-29.8-12.1-1.2-21.6-11.4-21.6-23.9l0-32c0-12.4 9.5-22.7 21.6-23.9 3-10.5 7.2-20.4 12.3-29.8-7.7-9.4-7.2-23.4 1.6-32.2l22.6-22.6c8.8-8.8 22.7-9.3 32.2-1.6 1.9-1 3.7-2 5.7-3zm64 65a64 64 0 1 0 0 128 64 64 0 1 0 0-128zM440 424a40 40 0 1 0 80 0 40 40 0 1 0 -80 0z\"]\n};\nvar faBridgeCircleXmark = {\n  prefix: 'fas',\n  iconName: 'bridge-circle-xmark',\n  icon: [576, 512, [], \"e4cb\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l8 0 0 64-40 0 0 112c37.6 9.4 64 43.2 64 82l0 94c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-64c0-53 43-96 96-96 6.4 0 12.7 .6 18.7 1.8 34.7-49.5 92.2-81.8 157.3-81.8 28.6 0 55.6 6.2 80 17.4l0-65.4-40 0 0-64 8 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zM424 96l0 64-80 0 0-64 80 0zM296 96l0 64-80 0 0-64 80 0zM88 96l80 0 0 64-80 0 0-64zM432 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7l-36.7 36.7 36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-36.7-36.7-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l36.7-36.7-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l36.7 36.7 36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nvar faVials = {\n  prefix: 'fas',\n  iconName: 'vials',\n  icon: [512, 512, [], \"f493\", \"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64l0 352c0 53 43 96 96 96s96-43 96-96l0-352 64 0 0 352c0 53 43 96 96 96s96-43 96-96l0-352c17.7 0 32-14.3 32-32S497.7 0 480 0L32 0zM160 64l0 128-64 0 0-128 64 0zm256 0l0 128-64 0 0-128 64 0z\"]\n};\nvar faStethoscope = {\n  prefix: 'fas',\n  iconName: 'stethoscope',\n  icon: [576, 512, [129658], \"f0f1\", \"M32 48C32 21.5 53.5 0 80 0l48 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 128c0 53 43 96 96 96s96-43 96-96l0-128-32 0c-17.7 0-32-14.3-32-32S238.3 0 256 0l48 0c26.5 0 48 21.5 48 48l0 144c0 77.4-55 142-128 156.8l0 19.2c0 61.9 50.1 112 112 112s112-50.1 112-112l0-85.5c-37.3-13.2-64-48.7-64-90.5 0-53 43-96 96-96s96 43 96 96c0 41.8-26.7 77.4-64 90.5l0 85.5c0 97.2-78.8 176-176 176S160 465.2 160 368l0-19.2C87 334 32 269.4 32 192L32 48zM480 224a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nvar faPodcast = {\n  prefix: 'fas',\n  iconName: 'podcast',\n  icon: [448, 512, [], \"f2ce\", \"M336 359.8c39.1-32.3 64-81.1 64-135.8 0-97.2-78.8-176-176-176S48 126.8 48 224C48 278.7 72.9 327.5 112 359.8 112.4 377.4 115.2 400.2 118.4 421.6 48 383.9 0 309.5 0 224 0 100.3 100.3 0 224 0S448 100.3 448 224c0 85.6-48 159.9-118.5 197.6 3.3-21.4 6-44.2 6.4-61.8zm-14-53.4c-8.3-12.6-19.2-21.6-30.4-27.8-2.1-1.1-4.2-2.2-6.3-3.2 11.7-13.9 18.8-31.9 18.8-51.5 0-44.2-35.8-80-80-80s-80 35.8-80 80c0 19.6 7.1 37.6 18.8 51.5-2.1 1-4.2 2-6.3 3.2-11.2 6.2-22.1 15.2-30.4 27.8-18.8-22.3-30.1-51-30.1-82.4 0-70.7 57.3-128 128-128s128 57.3 128 128c0 31.4-11.3 60.2-30.1 82.4zM224 312c32.9 0 64 8.6 64 43.8 0 33-12.9 104.1-20.6 132.9-5.1 19-24.5 23.4-43.4 23.4s-38.2-4.4-43.4-23.4c-7.8-28.5-20.6-99.7-20.6-132.8 0-35.1 31.1-43.8 64-43.8zm0-128a40 40 0 1 1 0 80 40 40 0 1 1 0-80z\"]\n};\nvar faArrowUpRightDots = {\n  prefix: 'fas',\n  iconName: 'arrow-up-right-dots',\n  icon: [512, 512, [], \"e4b7\", \"M96 32C78.3 32 64 46.3 64 64S78.3 96 96 96L114.7 96 9.4 201.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 141.3 160 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32L96 32zM403.8 70.1a38.1 38.1 0 1 0 76.2 0 38.1 38.1 0 1 0 -76.2 0zM279.7 194.2a38.1 38.1 0 1 0 76.2 0 38.1 38.1 0 1 0 -76.2 0zm162.2-38.1a38.1 38.1 0 1 0 0 76.2 38.1 38.1 0 1 0 0-76.2zM156.2 317.8a38.1 38.1 0 1 0 76.2 0 38.1 38.1 0 1 0 -76.2 0zm161.6-38.1a38.1 38.1 0 1 0 0 76.2 38.1 38.1 0 1 0 0-76.2zm86.1 38.1a38.1 38.1 0 1 0 76.2 0 38.1 38.1 0 1 0 -76.2 0zM70.1 403.8a38.1 38.1 0 1 0 0 76.2 38.1 38.1 0 1 0 0-76.2zm86.1 38.1a38.1 38.1 0 1 0 76.2 0 38.1 38.1 0 1 0 -76.2 0zm161.6-38.1a38.1 38.1 0 1 0 0 76.2 38.1 38.1 0 1 0 0-76.2zm86.1 38.1a38.1 38.1 0 1 0 76.2 0 38.1 38.1 0 1 0 -76.2 0z\"]\n};\nvar faChessQueen = {\n  prefix: 'fas',\n  iconName: 'chess-queen',\n  icon: [512, 512, [9819], \"f445\", \"M256 80a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM5.5 185L128 384 71.8 454.3c-5 6.3-7.8 14.1-7.8 22.2 0 19.6 15.9 35.5 35.5 35.5l312.9 0c19.6 0 35.5-15.9 35.5-35.5 0-8.1-2.7-15.9-7.8-22.2L384 384 506.5 185c3.6-5.9 5.5-12.7 5.5-19.6l0-.6c0-20.3-16.5-36.8-36.8-36.8-7.3 0-14.4 2.2-20.4 6.2l-16.9 11.3c-12.7 8.5-29.6 6.8-40.4-4l-34.1-34.1C356.1 100.1 346.2 96 336 96s-20.1 4.1-27.3 11.3l-30.1 30.1c-12.5 12.5-32.8 12.5-45.3 0l-30.1-30.1C196.1 100.1 186.2 96 176 96s-20.1 4.1-27.3 11.3l-34.1 34.1c-10.8 10.8-27.7 12.5-40.4 4L57.3 134.2c-6.1-4-13.2-6.2-20.4-6.2-20.3 0-36.8 16.5-36.8 36.8l0 .6c0 6.9 1.9 13.7 5.5 19.6z\"]\n};\nvar faAnchorCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'anchor-circle-exclamation',\n  icon: [640, 512, [], \"e4ab\", \"M320.5 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm-32-96c-53 0-96 43-96 96 0 41.8 26.7 77.4 64 90.5l0 257.9c-62.9-14.3-110.2-69.7-111.9-136.5l16.1 14.1c10 8.7 25.1 7.7 33.9-2.3s7.7-25.1-2.3-33.9l-64-56c-9-7.9-22.6-7.9-31.6 0l-64 56c-10 8.7-11 23.9-2.3 33.9s23.9 11 33.9 2.3l16.2-14.2c2.1 113.1 94.4 204.1 208 204.1 16.6 0 32.7-1.9 48.2-5.6-20.3-30.5-32.2-67-32.2-106.4 0-27.3 5.7-53.3 16-76.9l0-136.6c37.3-13.2 64-48.7 64-90.5 0-53-43-96-96-96zm208 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-100a20 20 0 1 1 0 40 20 20 0 1 1 0-40zm0-140c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nvar faEllipsisVertical = {\n  prefix: 'fas',\n  iconName: 'ellipsis-vertical',\n  icon: [128, 512, [\"ellipsis-v\"], \"f142\", \"M64 144a56 56 0 1 1 0-112 56 56 0 1 1 0 112zm0 224c30.9 0 56 25.1 56 56s-25.1 56-56 56-56-25.1-56-56 25.1-56 56-56zm56-112c0 30.9-25.1 56-56 56s-56-25.1-56-56 25.1-56 56-56 56 25.1 56 56z\"]\n};\nvar faEllipsisV = faEllipsisVertical;\nvar faHeartCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'heart-circle-exclamation',\n  icon: [576, 512, [], \"e4fe\", \"M241 87.1l15 20.7 15-20.7C296 52.5 336.2 32 378.9 32 452.4 32 512 91.6 512 165.1l0 2.6c0 17.6-3.4 35.6-9.5 53.7-21.8-8.6-45.6-13.4-70.5-13.4-106 0-192 86-192 192 0 28.5 6.2 55.6 17.4 80-.5 0-.9 0-1.4 0-15.5 0-30.8-4.6-43.1-14.1-73-55.7-212.9-186-212.9-298.2l0-2.6C0 91.6 59.6 32 133.1 32 175.8 32 216 52.5 241 87.1zM432 256a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 228a20 20 0 1 0 0-40 20 20 0 1 0 0 40zm0-180c-8.8 0-16 7.2-16 16l0 80c0 8.8 7.2 16 16 16s16-7.2 16-16l0-80c0-8.8-7.2-16-16-16z\"]\n};\nvar faBuildingCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'building-circle-exclamation',\n  icon: [576, 512, [], \"e4d3\", \"M96 0C60.7 0 32 28.7 32 64l0 384c0 35.3 28.7 64 64 64l180 0c-10.5-14.6-19-30.7-25.1-48l-74.9 0 0-80c0-17.7 14.3-32 32-32l32 0c2 0 4 .2 5.9 .5 6-23.6 16.3-45.4 30.1-64.5l-4 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 4c27.5-19.8 60.3-32.4 96-35.4L416 64c0-35.3-28.7-64-64-64L96 0zm32 112c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM128 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM432 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-100a20 20 0 1 1 0 40 20 20 0 1 1 0-40zm0-140c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nvar faPersonArrowUpFromLine = {\n  prefix: 'fas',\n  iconName: 'person-arrow-up-from-line',\n  icon: [576, 512, [], \"e539\", \"M192-32a56 56 0 1 1 0 112 56 56 0 1 1 0-112zM318.3 299.1l-46.3-62.4 0 243.3 272 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 544c-17.7 0-32-14.3-32-32s14.3-32 32-32l80 0 0-243.3-46.3 62.4c-10.5 14.2-30.6 17.2-44.8 6.6s-17.2-30.6-6.6-44.8l70.5-95C110 132 149.7 112 192 112s82 20 107.2 53.9l70.5 95c10.5 14.2 7.6 34.2-6.6 44.8s-34.2 7.6-44.8-6.6zM208 480l0-128c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 128 32 0zM566.6 102.6c-12.5 12.5-32.8 12.5-45.3 0L496 77.3 496 224c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-146.7-25.4 25.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l80-80c12.5-12.5 32.8-12.5 45.3 0l80 80c12.5 12.5 12.5 32.8 0 45.3z\"]\n};\nvar faNotEqual = {\n  prefix: 'fas',\n  iconName: 'not-equal',\n  icon: [448, 512, [], \"f53e\", \"M378.6 81.8c9.8-14.7 5.8-34.6-8.9-44.4s-34.6-5.8-44.4 8.9L270.9 128 32 128c-17.7 0-32 14.3-32 32s14.3 32 32 32l196.2 0-85.3 128-110.9 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l68.2 0-30.8 46.2c-9.8 14.7-5.8 34.6 8.9 44.4s34.6 5.8 44.4-8.9L177.1 384 416 384c17.7 0 32-14.3 32-32s-14.3-32-32-32l-196.2 0 85.3-128 110.9 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-68.2 0 30.8-46.2z\"]\n};\nvar faTrainTram = {\n  prefix: 'fas',\n  iconName: 'train-tram',\n  icon: [384, 512, [128650], \"e5b4\", \"M0 8C0-5.3 10.7-16 24-16l336 0c13.3 0 24 10.7 24 24l0 32c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-8-120 0 0 64 40 0c53 0 96 43 96 96l0 160c0 31.2-14.9 59-38 76.5l64.3 76c8.6 10.1 7.3 25.3-2.8 33.8s-25.3 7.3-33.8-2.8l-74.6-88.1c-3.6 .4-7.3 .6-11.1 .6l-128 0c-3.8 0-7.5-.2-11.1-.6L42.3 535.5c-8.6 10.1-23.7 11.4-33.8 2.8s-11.4-23.7-2.8-33.8l64.3-76C46.9 411 32 383.2 32 352l0-160c0-53 43-96 96-96l40 0 0-64-120 0 0 8c0 13.3-10.7 24-24 24S0 53.3 0 40L0 8zM128 160c-17.7 0-32 14.3-32 32l0 32c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-32c0-17.7-14.3-32-32-32l-128 0zm32 192a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm96 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nvar faPlaneDeparture = {\n  prefix: 'fas',\n  iconName: 'plane-departure',\n  icon: [576, 512, [128747], \"f5b0\", \"M372 143.9L172.7 40.2c-8-4.1-17.3-4.8-25.7-1.7l-41.1 15c-10.3 3.7-13.8 16.4-7.1 25L200.3 206.4 100.1 242.8 40 206.2c-6.2-3.8-13.8-4.5-20.7-2.1L3 210.1c-9.4 3.4-13.4 14.5-8.3 23.1l53.6 91.8c15.6 26.7 48.1 38.4 77.1 27.8l12.9-4.7 0 0 398.4-145c29.1-10.6 44-42.7 33.5-71.8s-42.7-44-71.8-33.5L372 143.9zM32.2 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-512 0z\"]\n};\nvar faRightToBracket = {\n  prefix: 'fas',\n  iconName: 'right-to-bracket',\n  icon: [512, 512, [\"sign-in-alt\"], \"f2f6\", \"M345 273c9.4-9.4 9.4-24.6 0-33.9L201 95c-6.9-6.9-17.2-8.9-26.2-5.2S160 102.3 160 112l0 80-112 0c-26.5 0-48 21.5-48 48l0 32c0 26.5 21.5 48 48 48l112 0 0 80c0 9.7 5.8 18.5 14.8 22.2s19.3 1.7 26.2-5.2L345 273zm7 143c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c53 0 96-43 96-96l0-256c0-53-43-96-96-96l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c17.7 0 32 14.3 32 32l0 256c0 17.7-14.3 32-32 32l-64 0z\"]\n};\nvar faSignInAlt = faRightToBracket;\nvar faSdCard = {\n  prefix: 'fas',\n  iconName: 'sd-card',\n  icon: [384, 512, [], \"f7c2\", \"M384 64c0-35.3-28.7-64-64-64L125.3 0C108.3 0 92 6.7 80 18.7L18.7 80C6.7 92 0 108.3 0 125.3L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-384zM160 88l0 48c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24s24 10.7 24 24zm88 0l0 48c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24s24 10.7 24 24zm88 0l0 48c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24s24 10.7 24 24z\"]\n};\nvar faHouseCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'house-circle-exclamation',\n  icon: [640, 512, [], \"e50a\", \"M496 544a144 144 0 1 1 0-288 144 144 0 1 1 0 288zM268.6 6.5c12.2-9.3 29.7-8.7 41.2 2l217.6 202c-10.2-1.7-20.7-2.6-31.3-2.6-78.6 0-146.1 47.2-175.8 114.8-5.1-1.8-10.5-2.8-16.2-2.8l-32 0c-26.5 0-48 21.5-48 48l0 96 91 0c6.1 17.3 14.6 33.4 25.1 48L144 512c-35.3 0-64-28.7-64-64l0-176-16 0c-13.2 0-25-8.1-29.8-20.3s-1.6-26.2 8-35.1l224-208 2.4-2zM496 444a20 20 0 1 0 0 40 20 20 0 1 0 0-40zm0-140c-8.8 0-16 7.2-16 16l0 80c0 8.8 7.2 16 16 16 8.8 0 16-7.2 16-16l0-80c0-8.8-7.2-16-16-16z\"]\n};\nvar faShekelSign = {\n  prefix: 'fas',\n  iconName: 'shekel-sign',\n  icon: [448, 512, [8362, \"ils\", \"shekel\", \"sheqel\", \"sheqel-sign\"], \"f20b\", \"M32 32C14.3 32 0 46.3 0 64L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-352 128 0c35.3 0 64 28.7 64 64l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-70.7-57.3-128-128-128L32 32zM320 480c70.7 0 128-57.3 128-128l0-288c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 288c0 35.3-28.7 64-64 64l-128 0 0-224c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 256c0 17.7 14.3 32 32 32l160 0z\"]\n};\nvar faIls = faShekelSign;\nvar faShekel = faShekelSign;\nvar faSheqel = faShekelSign;\nvar faSheqelSign = faShekelSign;\nvar faRadio = {\n  prefix: 'fas',\n  iconName: 'radio',\n  icon: [512, 512, [128251], \"f8d7\", \"M494.8 15c12.7-3.7 20-17.1 16.3-29.8S494-34.8 481.3-31L51.8 94.9C42.4 97.6 33.9 102.1 26.6 108 10.5 119.7 0 138.6 0 160L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L218.5 96 494.8 15zM368 208a80 80 0 1 1 0 160 80 80 0 1 1 0-160zM64 248c0-13.3 10.7-24 24-24l112 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L88 272c-13.3 0-24-10.7-24-24zm0 96c0-13.3 10.7-24 24-24l112 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L88 368c-13.3 0-24-10.7-24-24z\"]\n};\nvar faHandDots = {\n  prefix: 'fas',\n  iconName: 'hand-dots',\n  icon: [512, 512, [\"allergies\"], \"f461\", \"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 208c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-176c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 272c0 1.5 0 3.1 .1 4.6L67.6 283c-16-15.2-41.3-14.6-56.6 1.4S-3.6 325.7 12.4 341L124.8 448c43.1 41.1 100.4 64 160 64l19.2 0c97.2 0 176-78.8 176-176l0-208c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 112c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-176c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 176c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-208zM200 352a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm120-56a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm40 88a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm-88 24a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nvar faAllergies = faHandDots;\nvar faBookSkull = {\n  prefix: 'fas',\n  iconName: 'book-skull',\n  icon: [448, 512, [\"book-dead\"], \"f6b7\", \"M96 512l320 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-66.7c18.6-6.6 32-24.4 32-45.3l0-288c0-26.5-21.5-48-48-48L96 0C43 0 0 43 0 96L0 416c0 53 43 96 96 96zM64 416c0-17.7 14.3-32 32-32l256 0 0 64-256 0c-17.7 0-32-14.3-32-32zM272 163.2l0 12.8c0 8.8-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16l0-12.8c-19.4-11.7-32-30.3-32-51.2 0-35.3 35.8-64 80-64s80 28.7 80 64c0 20.9-12.6 39.5-32 51.2zM208 112a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm48 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm74.2 95.7c4.6 10.1 .1 21.9-9.9 26.5l-47.9 21.8 47.9 21.8c10.1 4.6 14.5 16.4 9.9 26.5s-16.4 14.5-26.5 9.9L224 294 144.3 330.2c-10.1 4.6-21.9 .1-26.5-9.9s-.1-21.9 9.9-26.5l47.9-21.8-47.9-21.8c-10.1-4.6-14.5-16.4-9.9-26.5s16.4-14.5 26.5-9.9L224 250 303.7 213.8c10.1-4.6 21.9-.1 26.5 9.9z\"]\n};\nvar faBookDead = faBookSkull;\nvar faUnlockKeyhole = {\n  prefix: 'fas',\n  iconName: 'unlock-keyhole',\n  icon: [384, 512, [\"unlock-alt\"], \"f13e\", \"M192 32c-35.3 0-64 28.7-64 64l0 64 192 0c35.3 0 64 28.7 64 64l0 224c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 224c0-35.3 28.7-64 64-64l0-64c0-70.7 57.3-128 128-128 63.5 0 116.1 46.1 126.2 106.7 2.9 17.4-8.8 33.9-26.3 36.9s-33.9-8.8-36.9-26.3C250 55.1 223.7 32 192 32zm40 328c13.3 0 24-10.7 24-24s-10.7-24-24-24l-80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l80 0z\"]\n};\nvar faUnlockAlt = faUnlockKeyhole;\nvar faFileArrowUp = {\n  prefix: 'fas',\n  iconName: 'file-arrow-up',\n  icon: [384, 512, [\"file-upload\"], \"f574\", \"M0 64C0 28.7 28.7 0 64 0L213.5 0c17 0 33.3 6.7 45.3 18.7L365.3 125.3c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm208-5.5l0 93.5c0 13.3 10.7 24 24 24L325.5 176 208 58.5zM209 263c-9.4-9.4-24.6-9.4-33.9 0l-64 64c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l23-23 0 86.1c0 13.3 10.7 24 24 24s24-10.7 24-24l0-86.1 23 23c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-64-64z\"]\n};\nvar faFileUpload = faFileArrowUp;\nvar faFaceGrinTears = {\n  prefix: 'fas',\n  iconName: 'face-grin-tears',\n  icon: [640, 512, [128514, \"grin-tears\"], \"f588\", \"M554.8 203.4l16.3 2.3C547.7 88.4 444.2 0 320 0S92.3 88.4 68.9 205.7l16.3-2.3c37-5.3 68.6 26.4 63.4 63.4l-6.7 46.7c-4.1 29-21.6 53.2-45.8 66.8 43.7 78.5 127.6 131.7 223.8 131.7s180.1-53.1 223.8-131.7c-24.1-13.5-41.6-37.8-45.8-66.8l-6.7-46.7c-5.3-37 26.4-68.6 63.4-63.4zM470.3 326.9C447.9 388.2 389.1 432 320 432S192.1 388.2 169.7 326.9c-4.3-11.8 7.7-21.8 19.6-18.1 39.2 12.2 83.7 19.1 130.7 19.1s91.5-6.9 130.7-19.1c11.9-3.7 23.9 6.3 19.6 18.1zM212 208l0 8c0 11-9 20-20 20s-20-9-20-20l0-8c0-37.6 30.4-68 68-68s68 30.4 68 68l0 8c0 11-9 20-20 20s-20-9-20-20l0-8c0-15.5-12.5-28-28-28s-28 12.5-28 28zm188-28c-15.5 0-28 12.5-28 28l0 8c0 11-9 20-20 20s-20-9-20-20l0-8c0-37.6 30.4-68 68-68s68 30.4 68 68l0 8c0 11-9 20-20 20s-20-9-20-20l0-8c0-15.5-12.5-28-28-28zM640 300.6c0-25.6-18.8-47.3-44.1-50.9L549.1 243c-10.6-1.5-19.6 7.5-18.1 18.1l6.7 46.7c3.6 25.3 25.3 44.1 50.9 44.1 28.4 0 51.4-23 51.4-51.4zm-640 0C0 329 23 352 51.4 352 77 352 98.7 333.2 102.3 307.9l6.7-46.7c1.5-10.6-7.5-19.6-18.1-18.1l-46.7 6.7C18.8 253.3 0 275 0 300.6z\"]\n};\nvar faGrinTears = faFaceGrinTears;\nvar faPenToSquare = {\n  prefix: 'fas',\n  iconName: 'pen-to-square',\n  icon: [512, 512, [\"edit\"], \"f044\", \"M471.6 21.7c-21.9-21.9-57.3-21.9-79.2 0L368 46.1 465.9 144 490.3 119.6c21.9-21.9 21.9-57.3 0-79.2L471.6 21.7zm-299.2 220c-6.1 6.1-10.8 13.6-13.5 21.9l-29.6 88.8c-2.9 8.6-.6 18.1 5.8 24.6s15.9 8.7 24.6 5.8l88.8-29.6c8.2-2.7 15.7-7.4 21.9-13.5L432 177.9 334.1 80 172.4 241.7zM96 64C43 64 0 107 0 160L0 416c0 53 43 96 96 96l256 0c53 0 96-43 96-96l0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7-14.3 32-32 32L96 448c-17.7 0-32-14.3-32-32l0-256c0-17.7 14.3-32 32-32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 64z\"]\n};\nvar faEdit = faPenToSquare;\nvar faEarthEurope = {\n  prefix: 'fas',\n  iconName: 'earth-europe',\n  icon: [512, 512, [\"globe-europe\"], \"f7a2\", \"M256.2 48c114.8 .1 207.8 93.2 207.8 208 0 22.1-3.4 43.4-9.8 63.4-2 .4-4.1 .6-6.2 .6l-2.7 0c-8.5 0-16.6-3.4-22.6-9.4l-29.3-29.3c-6-6-9.4-14.1-9.4-22.6l0-50.7c0-8.8 7.2-16 16-16s16-7.2 16-16-7.2-16-16-16l-24 0c-13.3 0-24 10.7-24 24s-10.7 24-24 24l-56 0c-8.8 0-16 7.2-16 16s-7.2 16-16 16l-25.4 0c-12.5 0-22.6-10.1-22.6-22.6 0-6 2.4-11.8 6.6-16l70.1-70.1c2.1-2.1 3.3-5 3.3-8 0-6.2-5.1-11.3-11.3-11.3l-14.1 0c-12.5 0-22.6-10.1-22.6-22.6 0-6 2.4-11.8 6.6-16l23.1-23.1c.8-.8 1.6-1.5 2.5-2.2zM438.4 356.1c-32.8 59.6-93.9 101.4-165.2 107.2-.7-2.3-1.1-4.8-1.1-7.3 0-13.3-10.7-24-24-24l-26.7 0c-8.5 0-16.6-3.4-22.6-9.4l-29.3-29.3c-6-6-9.4-14.1-9.4-22.6l0-66.7c0-17.7 14.3-32 32-32l98.7 0c8.5 0 16.6 3.4 22.6 9.4l29.3 29.3c6 6 14.1 9.4 22.6 9.4l5.5 0c8.5 0 16.6 3.4 22.6 9.4l16 16c4.2 4.2 10 6.6 16 6.6 4.8 0 9.3 1.5 13 4.1zM256 512l26.2-1.3c-8.6 .9-17.3 1.3-26.2 1.3zm26.2-1.3C411.3 497.6 512 388.6 512 256 512 114.6 397.4 0 256 0l0 0C114.6 0 0 114.6 0 256 0 383.5 93.2 489.3 215.3 508.8 228.5 510.9 242.1 512 256 512zM187.3 123.3l-32 32c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l32-32c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nvar faGlobeEurope = faEarthEurope;\nvar faFaceGrinBeamSweat = {\n  prefix: 'fas',\n  iconName: 'face-grin-beam-sweat',\n  icon: [576, 512, [128517, \"grin-beam-sweat\"], \"f583\", \"M546.2-.1c14.7 17.8 29.8 40.1 29.8 64.1 0 36.4-27.6 64-64 64s-64-27.6-64-64c0-24 15.2-46.3 29.8-64.1 8.8-10.7 18.5-20.8 29-30 3-2.6 7.4-2.6 10.4 0 10.5 9.1 20.1 19.3 29 30zM288 0c42.5 0 82.6 10.4 117.8 28.7-3.6 10.9-5.8 22.7-5.8 35.3 0 62.9 49.1 112 112 112 6.4 0 12.7-.5 18.8-1.5 8.6 25.6 13.2 53 13.2 81.5 0 141.4-114.6 256-256 256S32 397.4 32 256 146.6 0 288 0zM418.7 308.9C379.5 321.1 335.1 328 288 328s-91.5-6.9-130.7-19.1c-11.9-3.7-23.9 6.3-19.6 18.1 22.4 61.3 81.3 105.1 150.3 105.1s127.9-43.8 150.3-105.1c4.3-11.8-7.7-21.8-19.6-18.1zM208 180c15.5 0 28 12.5 28 28l0 8c0 11 9 20 20 20s20-9 20-20l0-8c0-37.6-30.4-68-68-68s-68 30.4-68 68l0 8c0 11 9 20 20 20s20-9 20-20l0-8c0-15.5 12.5-28 28-28zm132 28c0-15.5 12.5-28 28-28s28 12.5 28 28l0 8c0 11 9 20 20 20s20-9 20-20l0-8c0-37.6-30.4-68-68-68s-68 30.4-68 68l0 8c0 11 9 20 20 20s20-9 20-20l0-8z\"]\n};\nvar faGrinBeamSweat = faFaceGrinBeamSweat;\nvar faCircleHalfStroke = {\n  prefix: 'fas',\n  iconName: 'circle-half-stroke',\n  icon: [512, 512, [9680, \"adjust\"], \"f042\", \"M448 256c0-106-86-192-192-192l0 384c106 0 192-86 192-192zM0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0z\"]\n};\nvar faAdjust = faCircleHalfStroke;\nvar faPersonMilitaryToPerson = {\n  prefix: 'fas',\n  iconName: 'person-military-to-person',\n  icon: [512, 512, [], \"e54c\", \"M71 12.5c-8.6 1-15 8.2-15 16.8 0 9.3 7.5 16.8 16.7 16.9l111.4 0c8.8-.1 15.9-7.2 15.9-16L200 16c0-9.5-8.3-17-17.8-15.9L71 12.5zM189.5 78.1l-122.9 0c-1.6 5.7-2.5 11.7-2.5 17.9 0 35.3 28.7 64 64 64s64-28.7 64-64c0-6.2-.9-12.2-2.5-17.9zM32 256l0 32c0 17.7 14.3 32 32 32l128 0c1.8 0 3.5-.1 5.2-.4L53 208.6C40.1 220.3 32 237.2 32 256zm190.2 42.5c1.1-3.3 1.8-6.8 1.8-10.5l0-32c0-35.3-28.7-64-64-64l-64 0c-3.7 0-7.4 .3-10.9 .9L222.2 298.5zM384 160a64 64 0 1 0 0-128 64 64 0 1 0 0 128zm-32 32c-35.3 0-64 28.7-64 64l0 32c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-32c0-35.3-28.7-64-64-64l-64 0zM215.8 450.1c5.2-4.6 8.2-11.1 8.2-18.1s-3-13.5-8.2-18.1l-64-56c-7.1-6.2-17.1-7.7-25.7-3.8S112 366.6 112 376l0 32-88 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l88 0 0 32c0 9.4 5.5 18 14.1 21.9s18.6 2.4 25.7-3.8l64-56zM288 431.9c0 6.9 3 13.5 8.1 18.1l64 56.4c7.1 6.2 17.1 7.8 25.7 3.9S400 497.8 400 488.4l0-32.4 88 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-88 0 0-32c0-9.4-5.5-18-14.1-21.9s-18.6-2.4-25.7 3.8l-64 56c-5.2 4.5-8.2 11.1-8.2 18z\"]\n};\nvar faTableCellsColumnLock = {\n  prefix: 'fas',\n  iconName: 'table-cells-column-lock',\n  icon: [640, 512, [], \"e678\", \"M256 224l0 192 64 0 0-192-64 0zm256-79c-46.7 5.8-85.6 36.8-102.7 79l-25.3 0 0 90.8c-10.1 15.2-16 33.4-16 53.1l0 96c0 5.5 .5 10.9 1.3 16.1L128 480c-35.3 0-64-28.7-64-64L64 96c0-35.3 28.7-64 64-64l320 0c35.3 0 64 28.7 64 64l0 49zM128 224l0 192 64 0 0-192-64 0zm432 48.1c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 47.9 64 0 0-47.9zM416 368c0-20.9 13.4-38.7 32-45.3l0-50.6c0-44.2 35.8-80 80-80s80 35.8 80 80l0 50.6c18.6 6.6 32 24.4 32 45.3l0 96c0 26.5-21.5 48-48 48l-128 0c-26.5 0-48-21.5-48-48l0-96z\"]\n};\nvar faTruckFieldUn = {\n  prefix: 'fas',\n  iconName: 'truck-field-un',\n  icon: [640, 512, [], \"e58e\", \"M96 32C60.7 32 32 60.7 32 96l0 32c-17.7 0-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32l0 48c0 21.1 13.7 39.1 32.6 45.5-.4 3.4-.6 7-.6 10.5 0 48.6 39.4 88 88 88s88-39.4 88-88c0-2.7-.1-5.4-.4-8l144.7 0c-.2 2.6-.4 5.3-.4 8 0 48.6 39.4 88 88 88s88-39.4 88-88c0-2.7-.1-5.4-.4-8l.4 0c26.5 0 48-21.5 48-48l0-64c0-26.5-21.5-48-48-48l-24.7 0-1.7-4.2-43.8-106.3c-12.3-30-41.6-49.5-74-49.5l-40.4 0C364.4 44.9 343.7 32 320 32L96 32zM384 224l0-96 31.9 0c6.5 0 12.3 3.9 14.8 9.9l35.4 86.1-82.1 0zM152 352a40 40 0 1 1 0 80 40 40 0 1 1 0-80zm280 40a40 40 0 1 1 80 0 40 40 0 1 1 -80 0zM256.6 132.9l27.4 41 0-29.9c0-11 9-20 20-20s20 9 20 20l0 96c0 8.8-5.8 16.6-14.2 19.1s-17.5-.7-22.4-8l-27.4-41 0 29.9c0 11-9 20-20 20s-20-9-20-20l0-96c0-8.8 5.8-16.6 14.2-19.1s17.5 .7 22.4 8zM132 144l0 64c0 6.6 5.4 12 12 12s12-5.4 12-12l0-64c0-11 9-20 20-20s20 9 20 20l0 64c0 28.7-23.3 52-52 52s-52-23.3-52-52l0-64c0-11 9-20 20-20s20 9 20 20z\"]\n};\nvar faClock = {\n  prefix: 'fas',\n  iconName: 'clock',\n  icon: [512, 512, [128339, \"clock-four\"], \"f017\", \"M256 0a256 256 0 1 1 0 512 256 256 0 1 1 0-512zM232 120l0 136c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2 280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24z\"]\n};\nvar faClockFour = faClock;\nvar faBook = {\n  prefix: 'fas',\n  iconName: 'book',\n  icon: [448, 512, [128212], \"f02d\", \"M384 512L96 512c-53 0-96-43-96-96L0 96C0 43 43 0 96 0L400 0c26.5 0 48 21.5 48 48l0 288c0 20.9-13.4 38.7-32 45.3l0 66.7c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0zM96 384c-17.7 0-32 14.3-32 32s14.3 32 32 32l256 0 0-64-256 0zm32-232c0 13.3 10.7 24 24 24l176 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-176 0c-13.3 0-24 10.7-24 24zm24 72c-13.3 0-24 10.7-24 24s10.7 24 24 24l176 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-176 0z\"]\n};\nvar faFaceLaughWink = {\n  prefix: 'fas',\n  iconName: 'face-laugh-wink',\n  icon: [512, 512, [\"laugh-wink\"], \"f59c\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM101.6 314c-3.7-13.7 7.5-26 21.7-26l265.4 0c14.2 0 25.4 12.3 21.7 26-18.5 68-80.6 118-154.4 118S120 382 101.6 314zM144 192a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm164 8c0 11-9 20-20 20s-20-9-20-20c0-33.1 26.9-60 60-60l16 0c33.1 0 60 26.9 60 60 0 11-9 20-20 20s-20-9-20-20-9-20-20-20l-16 0c-11 0-20 9-20 20z\"]\n};\nvar faLaughWink = faFaceLaughWink;\nvar faCloudMeatball = {\n  prefix: 'fas',\n  iconName: 'cloud-meatball',\n  icon: [512, 512, [], \"f73b\", \"M0 224c0 53 43 96 96 96l26.9 0c3.5-12.1 10.1-23.3 19.2-32.4l1.4-1.4c15-15 35.3-22.9 56.1-22.2 14.2-15.1 34.2-23.9 55.4-23.9l2 0c21.1 0 41.1 8.8 55.4 23.9 20.8-.6 41.1 7.3 56.1 22.2l1.4 1.4c9.2 9.2 15.7 20.4 19.2 32.4l26.9 0c53 0 96-43 96-96s-43-96-96-96c-.5 0-1.1 0-1.6 0 1.1-5.2 1.6-10.5 1.6-16 0-44.2-35.8-80-80-80-24.3 0-46.1 10.9-60.8 28-18.7-35.7-56.1-60-99.2-60-61.9 0-112 50.1-112 112 0 7.1 .7 14.1 1.9 20.8-38.3 12.6-65.9 48.7-65.9 91.2zM156.5 424.3c9.5 6.3 14.2 17.7 11.9 28.8-1.8 9.2 1 18.7 7.7 25.3l1.4 1.4c6.6 6.6 16.1 9.5 25.3 7.7 11.1-2.2 22.5 2.5 28.8 11.9 5.2 7.8 14 12.5 23.3 12.5l2 0c9.4 0 18.1-4.7 23.3-12.5 6.3-9.5 17.7-14.2 28.8-11.9 9.2 1.8 18.7-1 25.3-7.7l1.4-1.4c6.6-6.6 9.5-16.1 7.7-25.3-2.2-11.1 2.5-22.5 11.9-28.8 7.8-5.2 12.5-14 12.5-23.3l0-2c0-9.4-4.7-18.1-12.5-23.3-9.5-6.3-14.2-17.7-11.9-28.8 1.8-9.2-1-18.7-7.7-25.3l-1.4-1.4c-6.6-6.6-16.1-9.5-25.3-7.7-11.1 2.2-22.5-2.5-28.8-11.9-5.2-7.8-14-12.5-23.3-12.5l-2 0c-9.4 0-18.1 4.7-23.3 12.5-6.3 9.5-17.7 14.2-28.8 11.9-9.2-1.8-18.7 1-25.3 7.7l-1.4 1.4c-6.6 6.6-9.5 16.1-7.7 25.3 2.2 11.1-2.5 22.5-11.9 28.8-7.8 5.2-12.5 14-12.5 23.3l0 2c0 9.4 4.7 18.1 12.5 23.3zM48 448a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm416 0a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"]\n};\nvar faChartArea = {\n  prefix: 'fas',\n  iconName: 'chart-area',\n  icon: [512, 512, [\"area-chart\"], \"f1fe\", \"M32 32c17.7 0 32 14.3 32 32l0 336c0 8.8 7.2 16 16 16l400 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L80 480c-44.2 0-80-35.8-80-80L0 64C0 46.3 14.3 32 32 32zM240 96c6.7 0 13.1 2.8 17.7 7.8L328.8 181.3 375 135c9.4-9.4 24.6-9.4 33.9 0l64 64c4.5 4.5 7 10.6 7 17l0 112c0 13.3-10.7 24-24 24l-304 0c-13.3 0-24-10.7-24-24l0-112c0-6 2.3-11.8 6.3-16.2l88-96c4.5-5 11-7.8 17.7-7.8z\"]\n};\nvar faAreaChart = faChartArea;\nvar faRupiahSign = {\n  prefix: 'fas',\n  iconName: 'rupiah-sign',\n  icon: [512, 512, [], \"e23d\", \"M0 64C0 46.3 14.3 32 32 32l80 0c79.5 0 144 64.5 144 144 0 54.3-30 101.5-74.4 126.1l41 136.7c5.1 16.9-4.5 34.8-21.5 39.8s-34.8-4.5-39.8-21.5L120.1 319.8c-2.7 .1-5.4 .2-8.1 .2l-48 0 0 128c0 17.7-14.3 32-32 32S0 465.7 0 448L0 64zM64 256l48 0c44.2 0 80-35.8 80-80s-35.8-80-80-80l-48 0 0 160zm256-32l80 0c61.9 0 112 50.1 112 112S461.9 448 400 448l-48 0 0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-256c0-17.7 14.3-32 32-32zm80 160c26.5 0 48-21.5 48-48s-21.5-48-48-48l-48 0 0 96 48 0z\"]\n};\nvar faTextWidth = {\n  prefix: 'fas',\n  iconName: 'text-width',\n  icon: [448, 512, [], \"f035\", \"M40 0C17.9 0 0 17.9 0 40L0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 128 0 0 160-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-160 128 0 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-56c0-22.1-17.9-40-40-40L40 0zm78.6 406.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-64 64c-12.5 12.5-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-9.4-9.4 229.5 0-9.4 9.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l9.4 9.4-229.5 0 9.4-9.4z\"]\n};\nvar faSatellite = {\n  prefix: 'fas',\n  iconName: 'satellite',\n  icon: [512, 512, [128752], \"f7bf\", \"M199 7c9.4-9.4 24.6-9.4 33.9 0l89.4 89.4 55-55c12.5-12.5 32.8-12.5 45.3 0l48 48c12.5 12.5 12.5 32.8 0 45.3l-55 55 89.4 89.4c9.4 9.4 9.4 24.6 0 33.9l-96 96c-9.4 9.4-24.6 9.4-33.9 0l-89.4-89.4-15.5 15.5c11.4 24.6 17.8 52 17.8 80.9 0 31.7-7.7 61.5-21.2 87.8-4.7 9-16.7 10.3-23.8 3.1l-96.3-96.3-60 60c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l60-60-96.3-96.3c-7.2-7.2-5.9-19.2 3.1-23.8 26.3-13.6 56.2-21.2 87.8-21.2 28.9 0 56.3 6.4 80.9 17.8L192.4 226.3 103 137c-9.4-9.4-9.4-24.6 0-33.9L199 7zm17 50.9l-62.1 62.1 72.4 72.4 62.1-62.1-72.4-72.4zM392 358.1l62.1-62.1-72.4-72.4-62.1 62.1 72.4 72.4z\"]\n};\nvar faMagnifyingGlassMinus = {\n  prefix: 'fas',\n  iconName: 'magnifying-glass-minus',\n  icon: [512, 512, [\"search-minus\"], \"f010\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376C296.3 401.1 253.9 416 208 416 93.1 416 0 322.9 0 208S93.1 0 208 0 416 93.1 416 208zM136 184c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0z\"]\n};\nvar faSearchMinus = faMagnifyingGlassMinus;\nvar faPeopleGroup = {\n  prefix: 'fas',\n  iconName: 'people-group',\n  icon: [512, 512, [], \"e533\", \"M256 0a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm96 312c0 25-12.7 47-32 59.9l0 92.1c0 26.5-21.5 48-48 48l-32 0c-26.5 0-48-21.5-48-48l0-92.1C172.7 359 160 337 160 312l0-40c0-53 43-96 96-96s96 43 96 96l0 40zM96 32a56 56 0 1 1 0 112 56 56 0 1 1 0-112zm16 240l0 32c0 32.5 12.1 62.1 32 84.7l0 75.3c0 1.2 0 2.5 .1 3.7-8.5 7.6-19.7 12.3-32.1 12.3l-32 0c-26.5 0-48-21.5-48-48l0-56.6C12.9 364.4 0 343.7 0 320l0-32c0-53 43-96 96-96 12.7 0 24.8 2.5 35.9 6.9-12.6 21.4-19.9 46.4-19.9 73.1zM368 464l0-75.3c19.9-22.5 32-52.2 32-84.7l0-32c0-26.7-7.3-51.6-19.9-73.1 11.1-4.5 23.2-6.9 35.9-6.9 53 0 96 43 96 96l0 32c0 23.7-12.9 44.4-32 55.4l0 56.6c0 26.5-21.5 48-48 48l-32 0c-12.3 0-23.6-4.6-32.1-12.3 0-1.2 .1-2.5 .1-3.7zM416 32a56 56 0 1 1 0 112 56 56 0 1 1 0-112z\"]\n};\nvar faSquareBinary = {\n  prefix: 'fas',\n  iconName: 'square-binary',\n  icon: [448, 512, [], \"e69b\", \"M0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm144 4c-24.3 0-44 19.7-44 44l0 48c0 24.3 19.7 44 44 44l32 0c24.3 0 44-19.7 44-44l0-48c0-24.3-19.7-44-44-44l-32 0zm-4 44c0-2.2 1.8-4 4-4l32 0c2.2 0 4 1.8 4 4l0 48c0 2.2-1.8 4-4 4l-32 0c-2.2 0-4-1.8-4-4l0-48zm140-44c-11 0-20 9-20 20 0 9.7 6.9 17.7 16 19.6l0 76.4c0 11 9 20 20 20s20-9 20-20l0-96c0-11-9-20-20-20l-16 0zM132 296c0 9.7 6.9 17.7 16 19.6l0 76.4c0 11 9 20 20 20s20-9 20-20l0-96c0-11-9-20-20-20l-16 0c-11 0-20 9-20 20zm96 24l0 48c0 24.3 19.7 44 44 44l32 0c24.3 0 44-19.7 44-44l0-48c0-24.3-19.7-44-44-44l-32 0c-24.3 0-44 19.7-44 44zm44-4l32 0c2.2 0 4 1.8 4 4l0 48c0 2.2-1.8 4-4 4l-32 0c-2.2 0-4-1.8-4-4l0-48c0-2.2 1.8-4 4-4z\"]\n};\nvar faMasksTheater = {\n  prefix: 'fas',\n  iconName: 'masks-theater',\n  icon: [576, 512, [127917, \"theater-masks\"], \"f630\", \"M-5 118L23.5 279.7c14 79.5 76.3 141.8 155.8 155.8l12.7 2.2c-16.5-28.6-27.1-60.7-30.6-94.5l-24.1 4.3c-9.7 1.7-18.8-5.8-16.9-15.5 4.8-24.7 19.1-46.6 39.7-60.9l0-74.6c-1.4 .8-3 1.3-4.7 1.6l-63 11.1c-8.7 1.5-17.3-4.4-15.9-13.1 3.1-19.6 18.4-36 39.1-39.7 17.2-3 33.9 3.5 44.6 15.8l0-22.7c0-22.5 6.9-52.4 32.3-73.4 26-21.5 67.7-43.9 124.9-54.2-30.5-16.3-86.3-32-163.8-18.4-80.3 14.2-128 50.1-150.1 76.1-9 10.5-10.8 24.9-8.4 38.5zM208 138.7l0 174.8c0 80.7 50.5 152.9 126.4 180.4L362.1 504c14.1 5.1 29.6 5.1 43.7 0L433.6 494C509.5 466.4 560 394.3 560 313.5l0-174.8c0-6.9-2.1-13.8-7-18.6-22.6-22.5-78.2-56-169-56s-146.4 33.6-169 56c-4.9 4.9-7 11.7-7 18.6zm66.1 187.1c-1.4-7 7-11 12.7-6.6 26.9 20.6 60.6 32.9 97.2 32.9s70.2-12.3 97.2-32.9c5.7-4.4 14.1-.4 12.7 6.6-10.1 51.4-55.5 90.3-109.9 90.3s-99.8-38.8-109.9-90.3zm.5-101.5C281.2 205.5 299 192 320 192s38.9 13.5 45.4 32.3c2.9 8.4-4.5 15.7-13.4 15.7l-64 0c-8.8 0-16.3-7.4-13.4-15.7zM480 240l-64 0c-8.8 0-16.3-7.4-13.4-15.7 6.5-18.8 24.4-32.3 45.4-32.3s38.9 13.5 45.4 32.3c2.9 8.4-4.5 15.7-13.4 15.7z\"]\n};\nvar faTheaterMasks = faMasksTheater;\nvar faCartPlus = {\n  prefix: 'fas',\n  iconName: 'cart-plus',\n  icon: [640, 512, [], \"f217\", \"M0 8C0-5.3 10.7-16 24-16l45.3 0c27.1 0 50.3 19.4 55.1 46l.4 2 412.7 0c20 0 35.1 18.2 31.4 37.9L537.8 235.8c-5.7 30.3-32.1 52.2-62.9 52.2l-303.6 0 5.1 28.3c2.1 11.4 12 19.7 23.6 19.7L456 336c13.3 0 24 10.7 24 24s-10.7 24-24 24l-255.9 0c-34.8 0-64.6-24.9-70.8-59.1L77.2 38.6c-.7-3.8-4-6.6-7.9-6.6L24 32C10.7 32 0 21.3 0 8zM160 464a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm224 0a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM336 78.4c-13.3 0-24 10.7-24 24l0 33.6-33.6 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l33.6 0 0 33.6c0 13.3 10.7 24 24 24s24-10.7 24-24l0-33.6 33.6 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-33.6 0 0-33.6c0-13.3-10.7-24-24-24z\"]\n};\nvar faHandsAslInterpreting = {\n  prefix: 'fas',\n  iconName: 'hands-asl-interpreting',\n  icon: [640, 512, [\"american-sign-language-interpreting\", \"asl-interpreting\", \"hands-american-sign-language-interpreting\"], \"f2a3\", \"M156.6 46.3c7.9-15.8 1.5-35-14.3-42.9s-35-1.5-42.9 14.3L13.5 189.4C4.6 207.2 0 226.8 0 246.7L0 256c0 70.7 57.3 128 128 128l80 0 0-.3c35.2-2.7 65.4-22.8 82.1-51.7 8.8-15.3 3.6-34.9-11.7-43.7s-34.9-3.6-43.7 11.7c-7 12-19.9 20-34.7 20-22.1 0-40-17.9-40-40s17.9-40 40-40c14.8 0 27.7 8 34.7 20 8.8 15.3 28.4 20.5 43.7 11.7s20.5-28.4 11.7-43.7c-12.8-22.1-33.6-39.1-58.4-47.1l80.8-22c17-4.6 27.1-22.2 22.5-39.3s-22.2-27.1-39.3-22.5l-100.7 27.5 81.6-68c13.6-11.3 15.4-31.5 4.1-45.1S249.1-3.9 235.5 7.4l-101.9 84.9 23-46zM483.4 465.7c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3l85.9-171.7c8.9-17.8 13.5-37.4 13.5-57.2l0-9.3c0-70.7-57.3-128-128-128l-80 0 0 .3c-35.2 2.7-65.4 22.8-82.1 51.7-8.9 15.3-3.6 34.9 11.7 43.7s34.9 3.6 43.7-11.7c7-12 19.9-20 34.7-20 22.1 0 40 17.9 40 40s-17.9 40-40 40c-14.8 0-27.7-8-34.7-20-8.9-15.3-28.4-20.5-43.7-11.7s-20.5 28.4-11.7 43.7c12.8 22.1 33.6 39.1 58.4 47.1l-80.8 22c-17.1 4.6-27.1 22.2-22.5 39.3s22.2 27.1 39.3 22.5l100.7-27.5-81.6 68c-13.6 11.3-15.4 31.5-4.1 45.1s31.5 15.4 45.1 4.1l101.9-84.9-23 46z\"]\n};\nvar faAmericanSignLanguageInterpreting = faHandsAslInterpreting;\nvar faAslInterpreting = faHandsAslInterpreting;\nvar faHandsAmericanSignLanguageInterpreting = faHandsAslInterpreting;\nvar faTableCellsRowUnlock = {\n  prefix: 'fas',\n  iconName: 'table-cells-row-unlock',\n  icon: [640, 512, [], \"e691\", \"M256 224l0 192 64 0 0-192-64 0zm256-79c-46.7 5.8-85.6 36.8-102.7 79l-25.3 0 0 90.8c-10.1 15.2-16 33.4-16 53.1l0 96c0 5.5 .5 10.9 1.3 16.1L128 480c-35.3 0-64-28.7-64-64L64 96c0-35.3 28.7-64 64-64l320 0c35.3 0 64 28.7 64 64l0 49zM128 224l0 192 64 0 0-192-64 0zm432 48c-.1-17.6-14.4-31.9-32-31.9-17.7 0-32 14.3-32 32l0 47.9 96 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-128 0c-26.5 0-48-21.5-48-48l0-96c0-20.9 13.4-38.7 32-45.3l0-50.6c0-44.2 35.8-80 80-80 44.2 0 79.9 35.8 80 79.9l-48 0z\"]\n};\nvar faRocket = {\n  prefix: 'fas',\n  iconName: 'rocket',\n  icon: [512, 512, [], \"f135\", \"M128 320L24.5 320c-24.9 0-40.2-27.1-27.4-48.5L50 183.3C58.7 168.8 74.3 160 91.2 160l95 0c76.1-128.9 189.6-135.4 265.5-124.3 12.8 1.9 22.8 11.9 24.6 24.6 11.1 75.9 4.6 189.4-124.3 265.5l0 95c0 16.9-8.8 32.5-23.3 41.2l-88.2 52.9c-21.3 12.8-48.5-2.6-48.5-27.4L192 384c0-35.3-28.7-64-64-64l-.1 0zM400 160a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"]\n};\nvar faShrimp = {\n  prefix: 'fas',\n  iconName: 'shrimp',\n  icon: [512, 512, [129424], \"e448\", \"M72 32C32.2 32 0 64.2 0 104 0 141.9 29.3 172.9 66.4 175.8 77.6 257.2 147.4 320 232 320l56 0 0-192-216 0c-13.3 0-24-10.7-24-24S58.7 80 72 80l384 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L72 32zM224 456c0 13.3 10.7 24 24 24l72 0 0-72.2-64.1-22.4c-12.5-4.4-26.2 2.2-30.6 14.7s2.2 26.2 14.7 30.6l4.5 1.6C233 433.9 224 443.9 224 456zm128 23.3c36.4-3.3 69.5-17.6 96.1-39.6l-86.5-34.6c-3 1.8-6.2 3.2-9.6 4.3l0 69.9zM472.6 415c24.6-30.3 39.4-68.9 39.4-111 0-12.3-1.3-24.3-3.7-35.9L382.8 355.1c.8 3.4 1.2 7 1.2 10.6 0 4.6-.7 9-1.9 13.1L472.6 415zM336 128l-16 0 0 192 18.3 0c9.9 0 19.1 3.2 26.6 8.5l133.5-92.4C471.8 172.6 409.1 128 336 128zM168 192a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nvar faTengeSign = {\n  prefix: 'fas',\n  iconName: 'tenge-sign',\n  icon: [384, 512, [8376, \"tenge\"], \"f7d7\", \"M0 56C0 42.7 10.7 32 24 32l336 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 80C10.7 80 0 69.3 0 56zM0 160c0-17.7 14.3-32 32-32l320 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-128 0 0 256c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-256-128 0c-17.7 0-32-14.3-32-32z\"]\n};\nvar faTenge = faTengeSign;\nvar faHouseChimneyMedical = {\n  prefix: 'fas',\n  iconName: 'house-chimney-medical',\n  icon: [512, 512, [\"clinic-medical\"], \"f7f2\", \"M234.2 8.6c12.3-11.4 31.3-11.4 43.5 0L368 92.3 368 80c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 101.5 37.8 35.1c9.6 9 12.8 22.9 8 35.1S493.2 272 480 272l-16 0 0 176c0 35.3-28.7 64-64 64l-288 0c-35.3 0-64-28.7-64-64l0-176-16 0c-13.2 0-25-8.1-29.8-20.3s-1.6-26.2 8-35.1l224-208zM224 248l0 40-40 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l40 0 0 40c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-40 40 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-40 0 0-40c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16z\"]\n};\nvar faClinicMedical = faHouseChimneyMedical;\nvar faUsersSlash = {\n  prefix: 'fas',\n  iconName: 'users-slash',\n  icon: [640, 512, [], \"e073\", \"M73-24.9c-9.4-9.4-24.6-9.4-33.9 0S29.7-.3 39 9.1l528 528c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L321.8 224c56.6-1 102.2-47.2 102.2-104 0-57.4-46.6-104-104-104-56.8 0-103 45.6-104 102.2L73-24.9zM512 288c-17.2 0-33.7 3.4-48.7 9.6l170 170c4.2-5.4 6.7-12.2 6.7-19.6l0-32c0-70.7-57.3-128-128-128zM59.9 97.7c-21.5 12.5-35.9 35.7-35.9 62.3 0 39.8 32.2 72 72 72 26.6 0 49.8-14.4 62.3-35.9L59.9 97.7zM250.2 288C196.8 313.9 160 368.7 160 432l0 16c0 17.7 14.3 32 32 32l250.2 0-192-192zM128 288C57.3 288 0 345.3 0 416l0 32c0 17.7 14.3 32 32 32l86.7 0c-4.3-9.8-6.7-20.6-6.7-32l0-16c0-53.2 20-101.8 52.9-138.6-11.7-3.5-24.1-5.4-36.9-5.4zM616 160a72 72 0 1 0 -144 0 72 72 0 1 0 144 0z\"]\n};\nvar faPaperPlane = {\n  prefix: 'fas',\n  iconName: 'paper-plane',\n  icon: [576, 512, [61913], \"f1d8\", \"M536.4-26.3c9.8-3.5 20.6-1 28 6.3s9.8 18.2 6.3 28l-178 496.9c-5 13.9-18.1 23.1-32.8 23.1-14.2 0-27-8.6-32.3-21.7l-64.2-158c-4.5-11-2.5-23.6 5.2-32.6l94.5-112.4c5.1-6.1 4.7-15-.9-20.6s-14.6-6-20.6-.9L229.2 276.1c-9.1 7.6-21.6 9.6-32.6 5.2L38.1 216.8c-13.1-5.3-21.7-18.1-21.7-32.3 0-14.7 9.2-27.8 23.1-32.8l496.9-178z\"]\n};\nvar faBookAtlas = {\n  prefix: 'fas',\n  iconName: 'book-atlas',\n  icon: [448, 512, [\"atlas\"], \"f558\", \"M96 512l320 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-66.7c18.6-6.6 32-24.4 32-45.3l0-288c0-26.5-21.5-48-48-48L96 0C43 0 0 43 0 96L0 416c0 53 43 96 96 96zM64 416c0-17.7 14.3-32 32-32l256 0 0 64-256 0c-17.7 0-32-14.3-32-32zM310.6 208L279 208c-1.4 23.1-6 44.2-12.6 61.2 22.7-12.5 39.4-34.8 44.2-61.2zm-173.1 0c4.8 26.4 21.5 48.7 44.2 61.2-6.7-17-11.2-38-12.6-61.2l-31.6 0zm76.4 55c4.5 9.6 8.2 13.8 10.2 15.5 2-1.7 5.7-5.8 10.2-15.5 6.2-13.4 11.1-32.5 12.7-55l-45.8 0c1.6 22.5 6.5 41.6 12.7 55zm-12.7-87l45.8 0c-1.6-22.5-6.5-41.6-12.7-55-4.5-9.6-8.2-13.8-10.2-15.5-2 1.7-5.7 5.8-10.2 15.5-6.2 13.4-11.1 32.5-12.7 55zm109.5 0c-4.8-26.4-21.5-48.7-44.2-61.2 6.7 17 11.2 38 12.6 61.2l31.6 0zM169 176c1.4-23.1 6-44.2 12.6-61.2-22.7 12.5-39.4 34.8-44.2 61.2l31.6 0zM96 192a128 128 0 1 1 256 0 128 128 0 1 1 -256 0z\"]\n};\nvar faAtlas = faBookAtlas;\nvar faTable = {\n  prefix: 'fas',\n  iconName: 'table',\n  icon: [448, 512, [], \"f0ce\", \"M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64l-320 0-6.5-.3C25.2 476.4 0 449.1 0 416L0 96C0 60.7 28.7 32 64 32l320 0zM64 320l0 96 128 0 0-96-128 0zm192 0l0 96 128 0 0-96-128 0zM64 256l128 0 0-96-128 0 0 96zm192 0l128 0 0-96-128 0 0 96z\"]\n};\nvar faHeart = {\n  prefix: 'fas',\n  iconName: 'heart',\n  icon: [512, 512, [128153, 128154, 128155, 128156, 128420, 129293, 129294, 129505, 9829, 10084, 61578], \"f004\", \"M241 87.1l15 20.7 15-20.7C296 52.5 336.2 32 378.9 32 452.4 32 512 91.6 512 165.1l0 2.6c0 112.2-139.9 242.5-212.9 298.2-12.4 9.4-27.6 14.1-43.1 14.1s-30.8-4.6-43.1-14.1C139.9 410.2 0 279.9 0 167.7l0-2.6C0 91.6 59.6 32 133.1 32 175.8 32 216 52.5 241 87.1z\"]\n};\nvar faCircleChevronUp = {\n  prefix: 'fas',\n  iconName: 'circle-chevron-up',\n  icon: [512, 512, [\"chevron-circle-up\"], \"f139\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM377 271c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-87-87-87 87c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L239 167c9.4-9.4 24.6-9.4 33.9 0L377 271z\"]\n};\nvar faChevronCircleUp = faCircleChevronUp;\nvar faBatteryHalf = {\n  prefix: 'fas',\n  iconName: 'battery-half',\n  icon: [640, 512, [\"battery-3\"], \"f242\", \"M528 128c8.8 0 16 7.2 16 16l0 224c0 8.8-7.2 16-16 16l-416 0c-8.8 0-16-7.2-16-16l0-224c0-8.8 7.2-16 16-16l416 0zM112 64c-44.2 0-80 35.8-80 80l0 224c0 44.2 35.8 80 80 80l416 0c44.2 0 80-35.8 80-80l0-48c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80L112 64zm56 112c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24l144 0c13.3 0 24-10.7 24-24l0-112c0-13.3-10.7-24-24-24l-144 0z\"]\n};\nvar faBattery3 = faBatteryHalf;\nvar faFontAwesome = {\n  prefix: 'fas',\n  iconName: 'font-awesome',\n  icon: [512, 512, [62501, 62694, \"font-awesome-flag\", \"font-awesome-logo-full\"], \"f2b4\", \"M91.7 96C106.3 86.8 116 70.5 116 52 116 23.3 92.7 0 64 0S12 23.3 12 52c0 16.7 7.8 31.5 20 41l0 419 64 0 0-64 373.6 0c14.6 0 26.4-11.8 26.4-26.4 0-3.7-.8-7.3-2.3-10.7L432 272 493.7 133.1c1.5-3.4 2.3-7 2.3-10.7 0-14.6-11.8-26.4-26.4-26.4L91.7 96z\"]\n};\nvar faFontAwesomeFlag = faFontAwesome;\nvar faFontAwesomeLogoFull = faFontAwesome;\nvar faHandcuffs = {\n  prefix: 'fas',\n  iconName: 'handcuffs',\n  icon: [576, 512, [], \"e4f8\", \"M320-32c0-17.7-14.3-32-32-32s-32 14.3-32 32 14.3 32 32 32 32-14.3 32-32zM192 64a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM152 96c-13.3 0-24 10.7-24 24l0 16c0 1 .1 1.9 .2 2.9-74.7 26.3-128.2 97.5-128.2 181.1 0 106 86 192 192 192s192-86 192-192c0-83.7-53.5-154.8-128.2-181.1 .1-.9 .2-1.9 .2-2.9l0-16c0-13.3-10.7-24-24-24l-80 0zM64 320a128 128 0 1 1 256 0 128 128 0 1 1 -256 0zm448 0c0 66.9-51.3 121.8-116.6 127.5-14.3 22.8-32.4 43.1-53.4 59.9 13.5 3 27.6 4.6 42 4.6 106 0 192-86 192-192 0-83.7-53.5-154.8-128.2-181.1 .1-.9 .2-1.9 .2-2.9l0-16c0-13.3-10.7-24-24-24l-80 0c-12.3 0-22.4 9.2-23.8 21.1 30.3 19.2 56.1 45 75.2 75.4 65.4 5.8 116.6 60.6 116.6 127.5zM384 64a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nvar faHatCowboySide = {\n  prefix: 'fas',\n  iconName: 'hat-cowboy-side',\n  icon: [640, 512, [], \"f8c1\", \"M640 388.3c0 16.9-7.1 32.2-18.4 43.1l-35-23.3-292.7-195.1c-36.1-24.1-78.6-36.9-122-36.9l-3.9 0c-2.7 0-5.4 0-8 .1l22.2-100c5.7-25.8 28.6-44.1 55-44.1 12.2 0 24.1 4 33.8 11.3l4.7 3.5c26.3 19.7 62.4 19.7 88.6 0l4.7-3.5c9.8-7.3 21.6-11.3 33.8-11.3 26.4 0 49.3 18.3 55 44.1l33 148.5C574.5 232.3 640 302.6 640 388.3zM171.9 224c33.9 0 67.1 10 95.4 28.9L560 448 56 448c-30.9 0-56-25.1-56-56 0-92.8 75.2-168 168-168l3.9 0z\"]\n};\nvar faIndustry = {\n  prefix: 'fas',\n  iconName: 'industry',\n  icon: [512, 512, [], \"f275\", \"M32 32C14.3 32 0 46.3 0 64L0 432c0 26.5 21.5 48 48 48l416 0c26.5 0 48-21.5 48-48l0-279.8c0-18.2-19.4-29.7-35.4-21.1l-156.6 84.3 0-63.2c0-18.2-19.4-29.7-35.4-21.1L128 215.4 128 64c0-17.7-14.3-32-32-32L32 32z\"]\n};\nvar faLinesLeaning = {\n  prefix: 'fas',\n  iconName: 'lines-leaning',\n  icon: [384, 512, [], \"e51e\", \"M190.4 74.1c5.6-16.8-3.5-34.9-20.2-40.5s-34.9 3.5-40.5 20.2l-128 384c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l128-384zm70.9-41.7c-17.4-2.9-33.9 8.9-36.8 26.3l-64 384c-2.9 17.4 8.9 33.9 26.3 36.8s33.9-8.9 36.8-26.3l64-384c2.9-17.4-8.9-33.9-26.3-36.8zM352 32c-17.7 0-32 14.3-32 32l0 384c0 17.7 14.3 32 32 32s32-14.3 32-32l0-384c0-17.7-14.3-32-32-32z\"]\n};\nvar faPassport = {\n  prefix: 'fas',\n  iconName: 'passport',\n  icon: [384, 512, [], \"f5ab\", \"M0 64C0 28.7 28.7 0 64 0L320 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zM96 408c0 13.3 10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0c-13.3 0-24 10.7-24 24zM278.6 208c-4.8 26.4-21.5 48.7-44.2 61.2 6.7-17 11.2-38 12.6-61.2l31.6 0zm-173.1 0l31.6 0c1.4 23.1 6 44.2 12.6 61.2-22.7-12.5-39.4-34.8-44.2-61.2zm76.4 55c-6.2-13.4-11.1-32.5-12.7-55l45.8 0c-1.6 22.5-6.5 41.6-12.7 55-4.5 9.6-8.2 13.8-10.2 15.5-2-1.7-5.7-5.8-10.2-15.5zm0-142c4.5-9.6 8.2-13.8 10.2-15.5 2 1.7 5.7 5.8 10.2 15.5 6.2 13.4 11.1 32.5 12.7 55l-45.8 0c1.6-22.5 6.5-41.6 12.7-55zm96.7 55L247 176c-1.4-23.1-6-44.2-12.6-61.2 22.7 12.5 39.4 34.8 44.2 61.2zM137 176l-31.6 0c4.8-26.4 21.5-48.7 44.2-61.2-6.7 17-11.2 38-12.6 61.2zm183 16a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z\"]\n};\nvar faInfinity = {\n  prefix: 'fas',\n  iconName: 'infinity',\n  icon: [640, 512, [8734, 9854], \"f534\", \"M0 256c0-88.4 71.6-160 160-160 50.4 0 97.8 23.7 128 64l32 42.7 32-42.7c30.2-40.3 77.6-64 128-64 88.4 0 160 71.6 160 160S568.4 416 480 416c-50.4 0-97.8-23.7-128-64l-32-42.7-32 42.7c-30.2 40.3-77.6 64-128 64-88.4 0-160-71.6-160-160zm280 0l-43.2-57.6c-18.1-24.2-46.6-38.4-76.8-38.4-53 0-96 43-96 96s43 96 96 96c30.2 0 58.7-14.2 76.8-38.4L280 256zm80 0l43.2 57.6c18.1 24.2 46.6 38.4 76.8 38.4 53 0 96-43 96-96s-43-96-96-96c-30.2 0-58.7 14.2-76.8 38.4L360 256z\"]\n};\nvar faClone = {\n  prefix: 'fas',\n  iconName: 'clone',\n  icon: [512, 512, [], \"f24d\", \"M288 448l-224 0 0-224 48 0 0-64-48 0c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l224 0c35.3 0 64-28.7 64-64l0-48-64 0 0 48zm-64-96l224 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L224 0c-35.3 0-64 28.7-64 64l0 224c0 35.3 28.7 64 64 64z\"]\n};\nvar faForward = {\n  prefix: 'fas',\n  iconName: 'forward',\n  icon: [576, 512, [9193], \"f04e\", \"M371.7 43.1C360.1 32 343 28.9 328.3 35.2S304 56 304 72l0 136.3-172.3-165.1C120.1 32 103 28.9 88.3 35.2S64 56 64 72l0 368c0 16 9.6 30.5 24.3 36.8s31.8 3.2 43.4-7.9L304 303.7 304 440c0 16 9.6 30.5 24.3 36.8s31.8 3.2 43.4-7.9l192-184c7.9-7.5 12.3-18 12.3-28.9s-4.5-21.3-12.3-28.9l-192-184z\"]\n};\nvar faM = {\n  prefix: 'fas',\n  iconName: 'm',\n  icon: [448, 512, [109], \"4d\", \"M22.7 33.4c13.5-4.1 28.1 1.1 35.9 12.9L224 294.3 389.4 46.3c7.8-11.7 22.4-17 35.9-12.9S448 49.9 448 64l0 384c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-278.3-133.4 200.1c-5.9 8.9-15.9 14.2-26.6 14.2s-20.7-5.3-26.6-14.2L64 169.7 64 448c0 17.7-14.3 32-32 32S0 465.7 0 448L0 64C0 49.9 9.2 37.5 22.7 33.4z\"]\n};\nvar faRoadSpikes = {\n  prefix: 'fas',\n  iconName: 'road-spikes',\n  icon: [640, 512, [], \"e568\", \"M64 116.8c0-15.8 20.5-22 29.3-8.9l98.7 148 0-139.2c0-15.8 20.5-22 29.3-8.9l98.7 148 0-139.2c0-15.8 20.5-22 29.3-8.9l98.7 148 0-139.2c0-15.8 20.5-22 29.3-8.9L606.8 302.2c14.2 21.3-1.1 49.8-26.6 49.8L64 352 64 116.8zM32 384l576 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nvar faMountain = {\n  prefix: 'fas',\n  iconName: 'mountain',\n  icon: [512, 512, [127956], \"f6fc\", \"M256.5 0c14.7 0 28.2 8.1 35.2 21l216 400c6.7 12.4 6.4 27.4-.8 39.5-7.2 12.1-20.3 19.5-34.3 19.5l-432 0c-14.1 0-27.1-7.4-34.3-19.5s-7.5-27.1-.8-39.5l216-400 2.9-4.6C231.7 6.2 243.6 0 256.5 0zM170.4 249.9l26.8 26.8c6.2 6.2 16.4 6.2 22.6 0l43.3-43.3c6-6 14.1-9.4 22.6-9.4l42.8 0-72.1-133.5-86.1 159.4z\"]\n};\nvar faChess = {\n  prefix: 'fas',\n  iconName: 'chess',\n  icon: [512, 512, [], \"f439\", \"M168 56l0 40-78.1 0c-14.3 0-25.9 11.6-25.9 25.9 0 4 .9 8 2.7 11.6l33.4 66.8c-11.4 1.8-20.2 11.7-20.2 23.7 0 13.3 10.7 24 24 24l5.6 0-13.6 136-56.2 70.3c-5 6.3-7.8 14.1-7.8 22.2 0 19.6 15.9 35.5 35.5 35.5l248.9 0c19.6 0 35.5-15.9 35.5-35.5 0-8.1-2.7-15.9-7.8-22.2L288 384 274.4 248 280 248c13.3 0 24-10.7 24-24 0-11.9-8.7-21.9-20.2-23.7l33.4-66.8c1.8-3.6 2.7-7.6 2.7-11.6 0-14.3-11.6-25.9-25.9-25.9l-78.1 0 0-40 16 0c13.3 0 24-10.7 24-24S245.3 8 232 8l-16 0 0-16c0-13.3-10.7-24-24-24S168-21.3 168-8l0 16-16 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l16 0zM325.8 279.6l8.5 85.5 47.4 59.2 4.2 5.7c9.2 13.7 14.1 29.9 14.1 46.5 0 12.7-2.8 24.8-7.9 35.5l83.1 0c20.3 0 36.8-16.5 36.8-36.8 0-7.3-2.2-14.4-6.2-20.4l-25.8-38.7 0-64 13.3-13.3c12-12 18.7-28.3 18.7-45.3L512 192c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 16-32 0 0-16c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 32c0 22.4-10.2 42.4-26.2 55.6z\"]\n};\nvar faTemperatureThreeQuarters = {\n  prefix: 'fas',\n  iconName: 'temperature-three-quarters',\n  icon: [320, 512, [\"temperature-3\", \"thermometer-3\", \"thermometer-three-quarters\"], \"f2c8\", \"M160 0C107 0 64 43 64 96l0 164.7C34.5 287 16 325.4 16 368 16 447.5 80.5 512 160 512s144-64.5 144-144c0-42.6-18.5-81-48-107.3L256 96c0-53-43-96-96-96zm64 368c0 35.3-28.7 64-64 64s-64-28.7-64-64c0-26.9 16.5-49.9 40-59.3L136 152c0-13.3 10.7-24 24-24s24 10.7 24 24l0 156.7c23.5 9.5 40 32.5 40 59.3z\"]\n};\nvar faTemperature3 = faTemperatureThreeQuarters;\nvar faThermometer3 = faTemperatureThreeQuarters;\nvar faThermometerThreeQuarters = faTemperatureThreeQuarters;\nvar faB = {\n  prefix: 'fas',\n  iconName: 'b',\n  icon: [320, 512, [98], \"42\", \"M32 32C14.3 32 0 46.3 0 64L0 448c0 17.7 14.3 32 32 32l160 0c70.7 0 128-57.3 128-128 0-46.5-24.8-87.3-62-109.7 18.7-22.3 30-51 30-82.3 0-70.7-57.3-128-128-128L32 32zM160 224l-96 0 0-128 96 0c35.3 0 64 28.7 64 64s-28.7 64-64 64zM64 288l128 0c35.3 0 64 28.7 64 64s-28.7 64-64 64l-128 0 0-128z\"]\n};\nvar faShieldVirus = {\n  prefix: 'fas',\n  iconName: 'shield-virus',\n  icon: [512, 512, [], \"e06c\", \"M253.4 2.9C249.2 1 244.7 0 240 0s-9.2 1-13.4 2.9L38.3 82.8c-22 9.3-38.4 31-38.3 57.2 .5 99.2 41.3 280.7 213.6 363.2 16.7 8 36.1 8 52.8 0 172.4-82.5 213.2-264 213.6-363.2 .1-26.2-16.3-47.9-38.3-57.2L253.4 2.9zM240 128c13.3 0 24 10.7 24 24 0 22.9 27.7 34.4 43.9 18.2 9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9c-16.2 16.2-4.7 43.9 18.2 43.9 13.3 0 24 10.7 24 24s-10.7 24-24 24c-22.9 0-34.4 27.7-18.2 43.9 9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0c-16.2-16.2-43.9-4.7-43.9 18.2 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-22.9-27.7-34.4-43.9-18.2-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9c16.2-16.2 4.7-43.9-18.2-43.9-13.3 0-24-10.7-24-24s10.7-24 24-24c22.9 0 34.4-27.7 18.2-43.9-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0c16.2 16.2 43.9 4.7 43.9-18.2 0-13.3 10.7-24 24-24zM208 264a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm88 40a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"]\n};\nvar faLitecoinSign = {\n  prefix: 'fas',\n  iconName: 'litecoin-sign',\n  icon: [384, 512, [], \"e1d3\", \"M128 64c0-17.7-14.3-32-32-32S64 46.3 64 64l0 157.9-38.6 11c-12.7 3.6-20.1 16.9-16.5 29.7s16.9 20.1 29.7 16.5L64 271.8 64 448c0 17.7 14.3 32 32 32l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-224 0 0-162.5 134.6-38.5c12.7-3.6 20.1-16.9 16.5-29.7s-16.9-20.1-29.7-16.5L128 203.6 128 64z\"]\n};\nvar faDiceD6 = {\n  prefix: 'fas',\n  iconName: 'dice-d6',\n  icon: [512, 512, [], \"f6d1\", \"M224.4 8.3C244-2.8 268-2.8 287.6 8.3l176 99.7c20 11.4 32.4 32.6 32.4 55.7l0 197.4c0 23-12.4 44.3-32.4 55.7l-176 99.7c-19.6 11.1-43.6 11.1-63.1 0l-176-99.7C28.4 405.5 16 384.2 16 361.2l0-197.4c0-23 12.4-44.3 32.4-55.7l176-99.7zM102.6 155.6c-8.8-3.1-18.8 .3-23.8 8.6s-3.2 18.7 3.6 25l3.2 2.4 150.2 90.2 0 148.7c0 11 9 20 20 20 11 0 20-9 20-20l0-148.7 150.3-90.2c9.5-5.7 12.6-18 6.9-27.4s-18-12.5-27.4-6.9l-149.7 89.8-149.7-89.8-3.7-1.7z\"]\n};\nvar faGripLinesVertical = {\n  prefix: 'fas',\n  iconName: 'grip-lines-vertical',\n  icon: [192, 512, [], \"f7a5\", \"M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32L64 64zm128 0c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 384c0 17.7 14.3 32 32 32s32-14.3 32-32l0-384z\"]\n};\nvar faGolfBallTee = {\n  prefix: 'fas',\n  iconName: 'golf-ball-tee',\n  icon: [384, 512, [\"golf-ball\"], \"f450\", \"M298.5 384.1c12.1 1.2 21.5 11.5 21.5 23.9s-9.4 22.6-21.5 23.9l-2.5 .1-80 0 0 88c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-88-80 0c-13.3 0-24-10.7-24-24 0-12.4 9.4-22.6 21.5-23.9l2.5-.1 208 0 2.5 .1zM192 0c106 0 192 86 192 192 0 57.4-25.2 108.8-65.1 144L65.1 336C25.2 300.8 0 249.4 0 192 0 86 86 0 192 0zm32 240c-7.7 0-14.2 5.5-15.7 12.8l-.6 6.4c-1.3 6.3-6.2 11.2-12.5 12.5l-6.4 .6c-7.3 1.5-12.8 8-12.8 15.7 0 8.8 7.2 16 16 16 26.5 0 48-21.5 48-48 0-8.8-7.2-16-16-16zm64-64c-7.7 0-14.2 5.5-15.7 12.8l-.6 6.4c-1.3 6.3-6.2 11.2-12.5 12.5l-6.4 .6c-7.3 1.5-12.8 8-12.8 15.7 0 8.8 7.2 16 16 16 26.5 0 48-21.5 48-48 0-8.8-7.2-16-16-16zm-80-16c-7.7 0-14.2 5.5-15.7 12.8l-.6 6.4c-1.3 6.3-6.2 11.2-12.5 12.5l-6.4 .6c-7.3 1.5-12.8 8-12.8 15.7 0 8.8 7.2 16 16 16 26.5 0 48-21.5 48-48 0-8.8-7.2-16-16-16z\"]\n};\nvar faGolfBall = faGolfBallTee;\nvar faHexagon = {\n  prefix: 'fas',\n  iconName: 'hexagon',\n  icon: [576, 512, [11043], \"f312\", \"M33.5 220.3c-12.7 22.2-12.7 49.4 0 71.5l96.2 168.1c12.8 22.4 36.7 36.2 62.5 36.2l191.6 0c25.8 0 49.7-13.8 62.5-36.2l96.2-168.1c12.7-22.2 12.7-49.4 0-71.5L446.3 52.2C433.5 29.8 409.6 16 383.8 16L192.2 16c-25.8 0-49.7 13.8-62.5 36.2L33.5 220.3z\"]\n};\nvar faFolderOpen = {\n  prefix: 'fas',\n  iconName: 'folder-open',\n  icon: [576, 512, [128194, 128449, 61717], \"f07c\", \"M56 225.6L32.4 296.2 32.4 96c0-35.3 28.7-64 64-64l138.7 0c13.8 0 27.3 4.5 38.4 12.8l38.4 28.8c5.5 4.2 12.3 6.4 19.2 6.4l117.3 0c35.3 0 64 28.7 64 64l0 16-365.4 0c-41.3 0-78 26.4-91.1 65.6zM477.8 448L99 448c-32.8 0-55.9-32.1-45.5-63.2l48-144C108 221.2 126.4 208 147 208l378.8 0c32.8 0 55.9 32.1 45.5 63.2l-48 144c-6.5 19.6-24.9 32.8-45.5 32.8z\"]\n};\nvar faKaaba = {\n  prefix: 'fas',\n  iconName: 'kaaba',\n  icon: [512, 512, [128331], \"f66b\", \"M256 51.3L92.8 112.4 247.5 171.1c5.5 2.1 11.5 2.1 17 0L419.2 112.4 256 51.3zM0 129.3c0-20 12.4-37.9 31.1-44.9l208-78c10.9-4.1 22.8-4.1 33.7 0l208 78c18.7 7 31.1 24.9 31.1 44.9l0 36-253.2 96c-1.8 .7-3.8 .7-5.7 0l-253.2-96 0-36zm0 140l0-52.7 236.1 89.6c12.8 4.9 26.9 4.9 39.7 0l236.1-89.6 0 52.7-128 48.6 0 51.3 128-48.6 0 62.2c0 20-12.4 37.9-31.1 44.9l-208 78c-10.9 4.1-22.8 4.1-33.7 0l-208-78C12.4 420.7 0 402.7 0 382.7l0-62.2 128 48.6 0-51.3-128-48.6zM236.1 410.1c12.8 4.9 26.9 4.9 39.7 0l60.1-22.8 0-51.3-77.2 29.3c-1.8 .7-3.8 .7-5.7 0l-77.2-29.3 0 51.3 60.1 22.8z\"]\n};\nvar faHandHolding = {\n  prefix: 'fas',\n  iconName: 'hand-holding',\n  icon: [576, 512, [], \"f4bd\", \"M66.7 384l42.5-42.5c24-24 56.6-37.5 90.5-37.5L352 304c17.7 0 32 14.3 32 32s-14.3 32-32 32l-72 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l112.6 0 119.7-88.2c17.8-13.1 42.8-9.3 55.9 8.5s9.3 42.8-8.5 55.9L433.1 485.5c-23.4 17.2-51.6 26.5-80.7 26.5L32 512c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l34.7 0z\"]\n};\nvar faSingleQuoteRight = {\n  prefix: 'fas',\n  iconName: 'single-quote-right',\n  icon: [192, 512, [], \"e81c\", \"M64 416c-17.7 0-32-14.3-32-32s14.3-32 32-32l8 0c30.9 0 56-25.1 56-56l0-8-64 0c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l64 0c35.3 0 64 28.7 64 64l0 136c0 66.3-53.7 120-120 120l-8 0z\"]\n};\nvar faBottleDroplet = {\n  prefix: 'fas',\n  iconName: 'bottle-droplet',\n  icon: [320, 512, [], \"e4c4\", \"M80 0c0-17.7 14.3-32 32-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 103.3c64.9 20.4 112 81 112 152.7l0 192c0 35.3-28.7 64-64 64L64 544c-35.3 0-64-28.7-64-64L0 288c0-71.6 47.1-132.3 112-152.7L112 32C94.3 32 80 17.7 80 0zm80 416c35.3 0 64-32.4 64-64 0-21.2-28.9-64.5-47.9-90.6-8.1-11.1-24.2-11.1-32.3 0-19 26.1-47.9 69.4-47.9 90.6 0 31.6 28.7 64 64 64z\"]\n};\nvar faWindowMinimize = {\n  prefix: 'fas',\n  iconName: 'window-minimize',\n  icon: [512, 512, [128469], \"f2d1\", \"M0 416c0-17.7 14.3-32 32-32l448 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32z\"]\n};\nvar faChevronRight = {\n  prefix: 'fas',\n  iconName: 'chevron-right',\n  icon: [320, 512, [9002], \"f054\", \"M311.1 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L243.2 256 73.9 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z\"]\n};\nvar faEgg = {\n  prefix: 'fas',\n  iconName: 'egg',\n  icon: [384, 512, [129370], \"f7fb\", \"M192 496C86 496 0 394 0 288 0 176 64 16 192 16S384 176 384 288c0 106-86 208-192 208zM154.8 134c6.5-6 7-16.1 1-22.6s-16.1-7-22.6-1c-23.9 21.8-41.1 52.7-52.3 84.2-11.2 31.6-16.9 65.1-16.9 93.5 0 8.8 7.2 16 16 16s16-7.2 16-16c0-24.5 5-54.4 15.1-82.8 10.1-28.5 25-54.1 43.7-71.2z\"]\n};\nvar faLandmarkDome = {\n  prefix: 'fas',\n  iconName: 'landmark-dome',\n  icon: [512, 512, [\"landmark-alt\"], \"f752\", \"M256 0c-17.7 0-32 14.3-32 32 0 .9 0 1.8 .1 2.6-80.5 13.4-144 76.9-157.5 157.4L64 192c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 160-51.2 38.4C4.7 460.4 0 469.9 0 480 0 497.7 14.3 512 32 512l448 0c17.7 0 32-14.3 32-32 0-10.1-4.7-19.6-12.8-25.6L448 416 448 256c17.7 0 32-14.3 32-32s-14.3-32-32-32l-2.7 0c-13.5-80.4-77-143.9-157.5-157.4 .1-.9 .1-1.7 .1-2.6 0-17.7-14.3-32-32-32zm80 256l64 0 0 160-64 0 0-160zM224 416l0-160 64 0 0 160-64 0zM112 256l64 0 0 160-64 0 0-160z\"]\n};\nvar faLandmarkAlt = faLandmarkDome;\nvar faWorm = {\n  prefix: 'fas',\n  iconName: 'worm',\n  icon: [448, 512, [], \"e599\", \"M224 96c0-53 43-96 96-96l38.4 0C407.9 0 448 40.1 448 89.6L448 376c0 75.1-60.9 136-136 136S176 451.1 176 376l0-80c0-22.1-17.9-40-40-40s-40 17.9-40 40l0 168c0 26.5-21.5 48-48 48S0 490.5 0 464L0 296c0-75.1 60.9-136 136-136s136 60.9 136 136l0 80c0 22.1 17.9 40 40 40s40-17.9 40-40l0-184-32 0c-53 0-96-43-96-96zm144-8a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"]\n};\nvar faUserInjured = {\n  prefix: 'fas',\n  iconName: 'user-injured',\n  icon: [448, 512, [], \"f728\", \"M242.7 80L334 80c-10.7-24.6-29.5-44.9-52.9-57.6L242.7 80zm-.9-70.7C236 8.4 230 8 224 8 174.8 8 132.5 37.6 114 80l80.6 0 47.1-70.7zM224 248c66.3 0 120-53.7 120-120l-240 0c0 66.3 53.7 120 120 120zM98.7 341.8C49.3 370.2 16 423.5 16 484.6 16 499.7 28.3 512 43.4 512l151 0-95.8-170.2zm45.1-17.7l42.7 75.9 85.5 0c44.2 0 80 35.8 80 80 0 11.4-2.4 22.2-6.7 32l59.2 0c15.1 0 27.4-12.3 27.4-27.4 0-90.9-73.7-164.6-164.6-164.6l-86.9 0c-12.6 0-24.9 1.4-36.7 4.1zM213.5 448l36 64 22.5 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-58.5 0z\"]\n};\nvar faStrikethrough = {\n  prefix: 'fas',\n  iconName: 'strikethrough',\n  icon: [512, 512, [], \"f0cc\", \"M96 157.5C96 88.2 152.2 32 221.5 32L368 32c17.7 0 32 14.3 32 32s-14.3 32-32 32L221.5 96c-34 0-61.5 27.5-61.5 61.5 0 31 23.1 57.2 53.9 61l44.1 5.5 222 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l83.1 0C103 204.6 96 181.8 96 157.5zM349.2 336l65.5 0c.9 6.1 1.4 12.2 1.4 18.5 0 69.3-56.2 125.5-125.5 125.5L144 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l146.5 0c34 0 61.5-27.5 61.5-61.5 0-6.4-1-12.7-2.8-18.5z\"]\n};\nvar faBlog = {\n  prefix: 'fas',\n  iconName: 'blog',\n  icon: [512, 512, [], \"f781\", \"M224 24c0-13.3 10.7-24 24-24 145.8 0 264 118.2 264 264 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-119.3-96.7-216-216-216-13.3 0-24-10.7-24-24zM80 96c26.5 0 48 21.5 48 48l0 224c0 26.5 21.5 48 48 48s48-21.5 48-48-21.5-48-48-48c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16 79.5 0 144 64.5 144 144S255.5 512 176 512 32 447.5 32 368l0-224c0-26.5 21.5-48 48-48zm168 0c92.8 0 168 75.2 168 168 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-66.3-53.7-120-120-120-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nvar faStopwatch20 = {\n  prefix: 'fas',\n  iconName: 'stopwatch-20',\n  icon: [448, 512, [], \"e06f\", \"M168.5 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l32 0 0 25.3c-108 11.9-192 103.5-192 214.7 0 119.3 96.7 216 216 216s216-96.7 216-216c0-39.8-10.8-77.1-29.6-109.2l28.2-28.2c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-23.4 23.4c-32.9-30.2-75.2-50.3-122-55.5l0-25.3 32 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-112 0zm-60 240c0-28.7 23.3-52 52-52s52 23.3 52 52l0 3.8c0 11.7-3.2 23.1-9.3 33l-43.8 71.2 33.1 0c11 0 20 9 20 20s-9 20-20 20l-57.8 0c-14.5 0-26.2-11.7-26.2-26.2 0-4.9 1.3-9.6 3.9-13.8l56.7-92.1c2.2-3.6 3.4-7.8 3.4-12.1l0-3.8c0-6.6-5.4-12-12-12s-12 5.4-12 12c0 11-9 20-20 20s-20-9-20-20zm180-52c28.7 0 52 23.3 52 52l0 96c0 28.7-23.3 52-52 52s-52-23.3-52-52l0-96c0-28.7 23.3-52 52-52zm-12 52l0 96c0 6.6 5.4 12 12 12s12-5.4 12-12l0-96c0-6.6-5.4-12-12-12s-12 5.4-12 12z\"]\n};\nvar faTruckPickup = {\n  prefix: 'fas',\n  iconName: 'truck-pickup',\n  icon: [640, 512, [128763], \"f63c\", \"M363.8 96l57.6 96-133.4 0 0-96 75.8 0zM496 192L418.6 63.1C407.1 43.8 386.2 32 363.8 32L256 32c-17.7 0-32 14.3-32 32l0 128-144 0c-26.5 0-48 21.5-48 48l0 80c-17.7 0-32 14.3-32 32s14.3 32 32 32l32.4 0c-.2 2.6-.4 5.3-.4 8 0 48.6 39.4 88 88 88s88-39.4 88-88c0-2.7-.1-5.4-.4-8l160.7 0c-.2 2.6-.4 5.3-.4 8 0 48.6 39.4 88 88 88s88-39.4 88-88c0-2.7-.1-5.4-.4-8l32.4 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-80c0-26.5-21.5-48-48-48l-64 0zM112 392a40 40 0 1 1 80 0 40 40 0 1 1 -80 0zm376-40a40 40 0 1 1 0 80 40 40 0 1 1 0-80z\"]\n};\nvar faSeedling = {\n  prefix: 'fas',\n  iconName: 'seedling',\n  icon: [512, 512, [127793, \"sprout\"], \"f4d8\", \"M512 32C512 140.1 435.4 230.3 333.6 251.4 325.7 193.3 299.6 141 261.1 100.5 301.2 40 369.9 0 448 0l32 0c17.7 0 32 14.3 32 32zM0 96C0 78.3 14.3 64 32 64l32 0c123.7 0 224 100.3 224 224l0 192c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-160C100.3 320 0 219.7 0 96z\"]\n};\nvar faSprout = faSeedling;\nvar faTransgender = {\n  prefix: 'fas',\n  iconName: 'transgender',\n  icon: [576, 512, [9895, \"transgender-alt\"], \"f225\", \"M128-32c17.7 0 32 14.3 32 32s-14.3 32-32 32L97.9 32 136 70.1 151 55c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-15 15 14.2 14.2c27.9-23.8 64.2-38.2 103.8-38.2 36.7 0 70.6 12.4 97.6 33.2L466.7 32 448 32c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-18.7-84.4 84.4c13 23.1 20.4 49.9 20.4 78.3 0 77.4-55 142-128 156.8l0 35.2 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 16c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-16-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-35.2c-73-14.8-128-79.4-128-156.8 0-31.4 9-60.7 24.7-85.4l-16.7-16.7-15 15c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l15-15-38.1-38.1 0 30.1c0 17.7-14.3 32-32 32S0 113.7 0 96L0 0C0-17.7 14.3-32 32-32l96 0zM288 336a96 96 0 1 0 0-192 96 96 0 1 0 0 192z\"]\n};\nvar faTransgenderAlt = faTransgender;\nvar faStarHalf = {\n  prefix: 'fas',\n  iconName: 'star-half',\n  icon: [576, 512, [61731], \"f089\", \"M304.1 7.6c0-11.1-7.6-20.7-18.4-23.3s-21.9 2.5-27 12.4L193.1 125.3 33.2 150.7c-8.9 1.4-16.3 7.7-19.1 16.3s-.5 18 5.8 24.4l114.4 114.5-25.2 159.9c-1.4 8.9 2.3 17.9 9.6 23.2s16.9 6.1 25 2L291 416.1c8-4.1 13.1-12.4 13.1-21.4l0-387.1z\"]\n};\nvar faPhotoFilm = {\n  prefix: 'fas',\n  iconName: 'photo-film',\n  icon: [640, 512, [\"photo-video\"], \"f87c\", \"M192 64c0-35.3 28.7-64 64-64L576 0c35.3 0 64 28.7 64 64l0 224c0 35.3-28.7 64-64 64l-320 0c-35.3 0-64-28.7-64-64l0-224zM320 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm156.5 11.5C472.1 100.4 464.4 96 456 96s-16.1 4.4-20.5 11.5l-54 88.3-17.9-25.6c-4.5-6.4-11.8-10.2-19.7-10.2s-15.2 3.8-19.7 10.2l-56 80c-5.1 7.3-5.8 16.9-1.6 24.8S279.1 288 288 288l256 0c8.7 0 16.7-4.7 20.9-12.3s4.1-16.8-.5-24.3l-88-144zM144 128l0 160c0 61.9 50.1 112 112 112l192 0 0 16c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 192c0-35.3 28.7-64 64-64l80 0zM52 196l0 24c0 8.8 7.2 16 16 16l24 0c8.8 0 16-7.2 16-16l0-24c0-8.8-7.2-16-16-16l-24 0c-8.8 0-16 7.2-16 16zm16 80c-8.8 0-16 7.2-16 16l0 24c0 8.8 7.2 16 16 16l24 0c8.8 0 16-7.2 16-16l0-24c0-8.8-7.2-16-16-16l-24 0zm0 96c-8.8 0-16 7.2-16 16l0 24c0 8.8 7.2 16 16 16l24 0c8.8 0 16-7.2 16-16l0-24c0-8.8-7.2-16-16-16l-24 0z\"]\n};\nvar faPhotoVideo = faPhotoFilm;\nvar faPictureInPicture = {\n  prefix: 'fas',\n  iconName: 'picture-in-picture',\n  icon: [512, 512, [], \"e80b\", \"M448 32c35.3 0 64 28.7 64 64l0 112-64 0 0-112-384 0 0 320 144 0 0 64-144 0-6.5-.3c-30.1-3.1-54.1-27-57.1-57.1L0 416 0 96C0 62.9 25.2 35.6 57.5 32.3L64 32 448 32zm16 224c26.5 0 48 21.5 48 48l0 128c0 26.5-21.5 48-48 48l-160 0c-26.5 0-48-21.5-48-48l0-128c0-26.5 21.5-48 48-48l160 0z\"]\n};\nvar faPumpMedical = {\n  prefix: 'fas',\n  iconName: 'pump-medical',\n  icon: [320, 512, [], \"e06a\", \"M96 0l0 80 128 0 0-24 72 0c13.3 0 24-10.7 24-24S309.3 8 296 8l-72 0 0-8c0-17.7-14.3-32-32-32l-64 0C110.3-32 96-17.7 96 0zM64 128c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l192 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 128zm64 120c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 40 40 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-40 0 0 40c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-40-40 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l40 0 0-40z\"]\n};\nvar faFire = {\n  prefix: 'fas',\n  iconName: 'fire',\n  icon: [448, 512, [128293], \"f06d\", \"M160.5-26.4c9.3-7.8 23-7.5 31.9 .9 12.3 11.6 23.3 24.4 33.9 37.4 13.5 16.5 29.7 38.3 45.3 64.2 5.2-6.8 10-12.8 14.2-17.9 1.1-1.3 2.2-2.7 3.3-4.1 7.9-9.8 17.7-22.1 30.8-22.1 13.4 0 22.8 11.9 30.8 22.1 1.3 1.7 2.6 3.3 3.9 4.8 10.3 12.4 24 30.3 37.7 52.4 27.2 43.9 55.6 106.4 55.6 176.6 0 123.7-100.3 224-224 224S0 411.7 0 288c0-91.1 41.1-170 80.5-225 19.9-27.7 39.7-49.9 54.6-65.1 8.2-8.4 16.5-16.7 25.5-24.2zM225.7 416c25.3 0 47.7-7 68.8-21 42.1-29.4 53.4-88.2 28.1-134.4-4.5-9-16-9.6-22.5-2l-25.2 29.3c-6.6 7.6-18.5 7.4-24.7-.5-17.3-22.1-49.1-62.4-65.3-83-5.4-6.9-15.2-8-21.5-1.9-18.3 17.8-51.5 56.8-51.5 104.3 0 68.6 50.6 109.2 113.7 109.2z\"]\n};\nvar faMagnifyingGlassPlus = {\n  prefix: 'fas',\n  iconName: 'magnifying-glass-plus',\n  icon: [512, 512, [\"search-plus\"], \"f00e\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376C296.3 401.1 253.9 416 208 416 93.1 416 0 322.9 0 208S93.1 0 208 0 416 93.1 416 208zM208 112c-13.3 0-24 10.7-24 24l0 48-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l48 0 0 48c0 13.3 10.7 24 24 24s24-10.7 24-24l0-48 48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-48c0-13.3-10.7-24-24-24z\"]\n};\nvar faSearchPlus = faMagnifyingGlassPlus;\nvar faFlask = {\n  prefix: 'fas',\n  iconName: 'flask',\n  icon: [448, 512, [], \"f0c3\", \"M288 0L128 0C110.3 0 96 14.3 96 32s14.3 32 32 32L128 215.5 7.5 426.3C2.6 435 0 444.7 0 454.7 0 486.4 25.6 512 57.3 512l333.4 0c31.6 0 57.3-25.6 57.3-57.3 0-10-2.6-19.8-7.5-28.4L320 215.5 320 64c17.7 0 32-14.3 32-32S337.7 0 320 0L288 0zM192 215.5l0-151.5 64 0 0 151.5c0 11.1 2.9 22.1 8.4 31.8l41.6 72.7-164 0 41.6-72.7c5.5-9.7 8.4-20.6 8.4-31.8z\"]\n};\nvar faAlignRight = {\n  prefix: 'fas',\n  iconName: 'align-right',\n  icon: [448, 512, [], \"f038\", \"M448 64c0 17.7-14.3 32-32 32L192 96c-17.7 0-32-14.3-32-32s14.3-32 32-32l224 0c17.7 0 32 14.3 32 32zm0 256c0 17.7-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l224 0c17.7 0 32 14.3 32 32zM0 192c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 224c-17.7 0-32-14.3-32-32zM448 448c0 17.7-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z\"]\n};\nvar faCableCar = {\n  prefix: 'fas',\n  iconName: 'cable-car',\n  icon: [512, 512, [128673, 57551, \"tram\"], \"f7da\", \"M288-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM160 24a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM32 288c0-35.3 28.7-64 64-64l136 0 0-96.2-193.4 55.3c-12.7 3.6-26-3.7-29.7-16.5s3.7-26 16.5-29.7l224-64 0 0 224-64c12.7-3.6 26 3.7 29.7 16.5s-3.7 26-16.5 29.7l-206.6 59 0 109.9 136 0c35.3 0 64 28.7 64 64l0 160c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-160zm80 0c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l56 0 0-96-56 0zm184 96l0-96-80 0 0 96 80 0zm48 0l56 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-56 0 0 96z\"]\n};\nvar faTram = faCableCar;\nvar faKitMedical = {\n  prefix: 'fas',\n  iconName: 'kit-medical',\n  icon: [512, 512, [\"first-aid\"], \"f479\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l16 0 0-384-16 0zm64 0l0 384 256 0 0-384-256 0zM448 448c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64l-16 0 0 384 16 0zM224 184c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 40 40 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-40 0 0 40c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-40-40 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l40 0 0-40z\"]\n};\nvar faFirstAid = faKitMedical;\nvar faGripLines = {\n  prefix: 'fas',\n  iconName: 'grip-lines',\n  icon: [448, 512, [], \"f7a4\", \"M32 288c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 288zm0-128c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 160z\"]\n};\nvar faBurger = {\n  prefix: 'fas',\n  iconName: 'burger',\n  icon: [512, 512, [\"hamburger\"], \"f805\", \"M48 384c-8.8 0-16 7.2-16 16 0 44.2 35.8 80 80 80l288 0c44.2 0 80-35.8 80-80 0-8.8-7.2-16-16-16L48 384zM32 202c0 12.2 9.9 22 22 22L458 224c12.2 0 22-9.9 22-22 0-17.2-2.6-34.4-10.8-49.5-22.2-40.8-82.3-120.5-213.2-120.5S65 111.6 42.8 152.5C34.6 167.6 32 184.8 32 202zM0 304c0 17.7 14.3 32 32 32l448 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 272c-17.7 0-32 14.3-32 32zM256 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM120 128a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm248-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nvar faHamburger = faBurger;\nvar faSnowman = {\n  prefix: 'fas',\n  iconName: 'snowman',\n  icon: [640, 512, [9731, 9924], \"f7d0\", \"M403 211.7c32.2-24.9 53-63.9 53-107.7 0-75.1-60.9-136-136-136S184 28.9 184 104c0 43.9 20.8 82.9 53 107.7-32.2 16.3-59 41.8-76.8 73.1L112 264.2 112 224c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 19.6-22.5-9.7c-12.2-5.2-26.3 .4-31.5 12.6s.4 26.3 12.6 31.5c36.1 15.5 75.9 32.5 119.4 51.2-3.9 14.9-6 30.6-6 46.7 0 70 39.1 130.8 96.6 161.9 7.9 4.3 16.9 6.1 25.9 6.1l123 0c9 0 18-1.8 25.9-6.1 57.5-31.1 96.6-92 96.6-161.9 0-16.2-2.1-31.8-6-46.7 43.5-18.7 83.4-35.7 119.4-51.2 12.2-5.2 17.8-19.3 12.6-31.5s-19.3-17.8-31.5-12.6l-22.5 9.7 0-19.6c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40.2-48.2 20.6c-17.9-31.3-44.6-56.8-76.8-73.1zM296 416a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm24-120a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM248 80a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM292.2 159.3c-2.7-4.8-4.2-10.2-4.2-15.7 0-17.5 14.2-31.6 31.6-31.6l.8 0c17.5 0 31.6 14.2 31.6 31.6 0 5.5-1.4 10.9-4.2 15.7L327 195.8c-3.1 5.4-10.8 5.4-13.9 0l-20.9-36.6z\"]\n};\nvar faHotel = {\n  prefix: 'fas',\n  iconName: 'hotel',\n  icon: [512, 512, [127976], \"f594\", \"M16 24C16 10.7 26.7 0 40 0L472 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-8 0 0 416 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L40 512c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-416-8 0C26.7 48 16 37.3 16 24zm208 88l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM128 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm96 112l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM352 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM112 208l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm240-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM288 384l43.8 0c9.9 0 17.5-9 14-18.2-13.8-36.1-48.8-61.8-89.7-61.8s-75.9 25.7-89.7 61.8c-3.5 9.2 4.1 18.2 14 18.2l43.8 0 0 80 64 0 0-80z\"]\n};\nvar faPrint = {\n  prefix: 'fas',\n  iconName: 'print',\n  icon: [512, 512, [128424, 128438, 9113], \"f02f\", \"M64 64C64 28.7 92.7 0 128 0L341.5 0c17 0 33.3 6.7 45.3 18.7l42.5 42.5c12 12 18.7 28.3 18.7 45.3l0 37.5-384 0 0-80zM0 256c0-35.3 28.7-64 64-64l384 0c35.3 0 64 28.7 64 64l0 96c0 17.7-14.3 32-32 32l-32 0 0 64c0 35.3-28.7 64-64 64l-256 0c-35.3 0-64-28.7-64-64l0-64-32 0c-17.7 0-32-14.3-32-32l0-96zM128 416l0 32 256 0 0-96-256 0 0 64zM456 272a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"]\n};\nvar faVolleyball = {\n  prefix: 'fas',\n  iconName: 'volleyball',\n  icon: [512, 512, [127952, \"volleyball-ball\"], \"f45f\", \"M512 258.9c-23.4 8-47.8 13.1-72.6 15.1 5.9-98.6-30.7-191.1-94.9-258.3 97.8 36 167.5 130 167.5 240.3 0 1 0 1.9 0 2.9zm-5.9 52c-5.2 23.7-13.6 46.2-24.9 66.9-94.7 52.2-214 50-308.4-13.6 21.7-31.3 49.8-58.9 83.8-80.5 79.5 41.6 168.5 49.1 249.5 27.1zM279.7 241.6c-3.7-89.7-41.7-170.5-101.3-229.7 22.3-7.1 46-11.2 70.5-11.9 92.5 55.9 150.3 160.3 142.4 273.8-38-3.2-75.9-13.7-111.6-32.3zM130.5 32.8C149.1 49.1 165.8 67.7 179.9 88.2 91.5 132.3 29.7 210.3 3.7 299.5 1.3 285.3 0 270.8 0 256 0 160.2 52.6 76.7 130.5 32.8zm73.4 97c16.3 34.5 26.1 72.6 27.9 112.8-75.8 48-126.8 121.3-148.3 202.5-17.6-16.1-33-34.6-45.5-55 2.1-108.1 63.7-210.4 165.9-260.3zM256 512c-47.7 0-92.3-13-130.5-35.7 4.8-24.3 12.6-48 23.2-70.4 82.4 54.4 180.8 68.9 271 47-44.4 37-101.5 59.2-163.7 59.2z\"]\n};\nvar faVolleyballBall = faVolleyball;\nvar faTrafficLight = {\n  prefix: 'fas',\n  iconName: 'traffic-light',\n  icon: [320, 512, [128678], \"f637\", \"M64-32C28.7-32 0-3.3 0 32L0 384c0 88.4 71.6 160 160 160s160-71.6 160-160l0-352c0-35.3-28.7-64-64-64L64-32zm96 392c30.9 0 56 25.1 56 56s-25.1 56-56 56-56-25.1-56-56 25.1-56 56-56zm56-104a56 56 0 1 1 -112 0 56 56 0 1 1 112 0zM160 152a56 56 0 1 1 0-112 56 56 0 1 1 0 112z\"]\n};\nvar faPlaneCircleCheck = {\n  prefix: 'fas',\n  iconName: 'plane-circle-check',\n  icon: [640, 512, [], \"e555\", \"M232 24c0-30.9 25.1-56 56-56s56 25.1 56 56l0 127.3 78 71.5c-69.3 29-118 97.4-118 177.2 0 49.3 18.6 94.3 49.1 128.3L288 512 179.9 539c-10.1 2.5-19.9-5.1-19.9-15.5l0-19.8c0-4.9 2.2-9.5 6-12.5l66-52.8 0-99.7-162.9 54.3C58.7 396.4 48 388.7 48 377.8l0-43.7c0-9 3.8-17.5 10.4-23.6L232 151.3 232 24zM352 400a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm201.4-60.9c-7.1-5.2-17.2-3.6-22.4 3.5l-53 72.9-26.8-26.8c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c3.3 3.3 7.9 5 12.6 4.6s8.9-2.8 11.7-6.5l64-88c5.2-7.1 3.6-17.2-3.5-22.3z\"]\n};\nvar faUsers = {\n  prefix: 'fas',\n  iconName: 'users',\n  icon: [640, 512, [], \"f0c0\", \"M320 16a104 104 0 1 1 0 208 104 104 0 1 1 0-208zM96 88a72 72 0 1 1 0 144 72 72 0 1 1 0-144zM0 416c0-70.7 57.3-128 128-128 12.8 0 25.2 1.9 36.9 5.4-32.9 36.8-52.9 85.4-52.9 138.6l0 16c0 11.4 2.4 22.2 6.7 32L32 480c-17.7 0-32-14.3-32-32l0-32zm521.3 64c4.3-9.8 6.7-20.6 6.7-32l0-16c0-53.2-20-101.8-52.9-138.6 11.7-3.5 24.1-5.4 36.9-5.4 70.7 0 128 57.3 128 128l0 32c0 17.7-14.3 32-32 32l-86.7 0zM472 160a72 72 0 1 1 144 0 72 72 0 1 1 -144 0zM160 432c0-88.4 71.6-160 160-160s160 71.6 160 160l0 16c0 17.7-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32l0-16z\"]\n};\nvar faCertificate = {\n  prefix: 'fas',\n  iconName: 'certificate',\n  icon: [576, 512, [], \"f0a3\", \"M239.2-8c-6.1-6.2-15-8.7-23.4-6.4S200.9-5.6 198.8 2.8L183.5 63c-1.1 4.4-5.6 7-9.9 5.7L113.8 51.9c-8.4-2.4-17.4 0-23.5 6.1s-8.5 15.1-6.1 23.5l16.9 59.8c1.2 4.3-1.4 8.8-5.7 9.9L35.1 166.5c-8.4 2.1-15 8.7-17.3 17.1s.2 17.3 6.4 23.4l44.5 43.3c3.2 3.1 3.2 8.3 0 11.5L24.3 305.1c-6.2 6.1-8.7 15-6.4 23.4s8.9 14.9 17.3 17.1l60.2 15.3c4.4 1.1 7 5.6 5.7 9.9L84.2 430.5c-2.4 8.4 0 17.4 6.1 23.5s15.1 8.5 23.5 6.1l59.8-16.9c4.3-1.2 8.8 1.4 9.9 5.7l15.3 60.2c2.1 8.4 8.7 15 17.1 17.3s17.3-.2 23.4-6.4l43.3-44.5c3.1-3.2 8.3-3.2 11.5 0L337.3 520c6.1 6.2 15 8.7 23.4 6.4s14.9-8.9 17.1-17.3L393.1 449c1.1-4.4 5.6-7 9.9-5.7l59.8 16.9c8.4 2.4 17.4 0 23.5-6.1s8.5-15.1 6.1-23.5l-16.9-59.8c-1.2-4.3 1.4-8.8 5.7-9.9l60.2-15.3c8.4-2.1 15-8.7 17.3-17.1s-.2-17.4-6.4-23.4l-44.5-43.3c-3.2-3.1-3.2-8.3 0-11.5l44.5-43.3c6.2-6.1 8.7-15 6.4-23.4s-8.9-14.9-17.3-17.1l-60.2-15.3c-4.4-1.1-7-5.6-5.7-9.9l16.9-59.8c2.4-8.4 0-17.4-6.1-23.5s-15.1-8.5-23.5-6.1L403 68.8c-4.3 1.2-8.8-1.4-9.9-5.7L377.8 2.8c-2.1-8.4-8.7-15-17.1-17.3s-17.3 .2-23.4 6.4L294 36.5c-3.1 3.2-8.3 3.2-11.5 0L239.2-8z\"]\n};\nvar faAlarmClock = {\n  prefix: 'fas',\n  iconName: 'alarm-clock',\n  icon: [512, 512, [9200], \"f34e\", \"M504.4 132.5c-4.5 10.5-18.4 9.8-24.9 .4-27.8-40-66.1-72.2-111-92.6-10.4-4.7-13.7-18.3-4.1-24.6 15-9.9 33-15.7 52.3-15.7 52.6 0 95.2 42.6 95.2 95.2 0 13.2-2.7 25.8-7.6 37.3zm-471.9 .4c-6.5 9.4-20.5 10.1-24.9-.4-4.9-11.5-7.6-24.1-7.6-37.3 0-52.6 42.6-95.2 95.2-95.2 19.3 0 37.3 5.8 52.3 15.7 9.6 6.3 6.3 19.9-4.1 24.6-44.8 20.4-83.1 52.6-111 92.6zM390.2 467.4C352.8 495.4 306.3 512 256 512s-96.8-16.6-134.1-44.6L86.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l35.2-35.2C48.6 384.8 32 338.3 32 288 32 164.3 132.3 64 256 64S480 164.3 480 288c0 50.3-16.6 96.8-44.6 134.2l35.2 35.2c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-35.2-35.2zM280 184c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 104c0 6.4 2.5 12.5 7 17l56 56c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-49-49 0-94.1z\"]\n};\nvar faHelicopterSymbol = {\n  prefix: 'fas',\n  iconName: 'helicopter-symbol',\n  icon: [512, 512, [], \"e502\", \"M445.4 224l64.7 0C495.6 108.2 403.8 16.4 288 2l0 64.7C368.4 80.1 431.9 143.6 445.4 224zM510 288l-64.7 0C431.9 368.4 368.4 431.9 288 445.3l0 64.7c115.8-14.4 207.6-106.2 222-222zM2 288C16.4 403.8 108.2 495.6 224 510l0-64.7C143.6 431.9 80.2 368.4 66.7 288L2 288zm0-64l64.7 0C80.2 143.6 143.6 80.1 224 66.7L224 2C108.2 16.4 16.4 108.2 2 224zm206-64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 192c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 96 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-192c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64-96 0 0-64z\"]\n};\nvar faHouseChimneyCrack = {\n  prefix: 'fas',\n  iconName: 'house-chimney-crack',\n  icon: [512, 512, [\"house-damage\"], \"f6f1\", \"M234.2 8.6c12.3-11.4 31.3-11.4 43.5 0L368 92.3 368 80c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 101.5 37.8 35.1c9.6 9 12.8 22.9 8 35.1S493.2 272 480 272l-16 0 0 176c0 35.3-28.7 64-64 64l-105.6 0-38.4-64 80.8-67.3c7.8-6.5 7.6-18.6-.4-24.9L218.6 263.2c-14.6-11.5-33.8 7-22.8 22L256 368 170.5 439.2c-6.1 5-7.5 13.8-3.5 20.5l31.3 52.2-86.4 0c-35.3 0-64-28.7-64-64l0-176-16 0c-13.2 0-25-8.1-29.8-20.3s-1.6-26.2 8-35.1l224-208z\"]\n};\nvar faHouseDamage = faHouseChimneyCrack;\nvar faPersonMilitaryPointing = {\n  prefix: 'fas',\n  iconName: 'person-military-pointing',\n  icon: [512, 512, [], \"e54a\", \"M214.9 14.1C202 15.2 192 26 192 39 192 52.8 203.2 64 217 64l151 0c8.8 0 16-7.2 16-16l0-30.6C384 8 376 .7 366.7 1.4L214.9 14.1zM208 112c0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16L209.6 96c-1 5.2-1.6 10.5-1.6 16zM40 224c-22.1 0-40 17.9-40 40s17.9 40 40 40l152 0 0 89.4 162.8-162.8c-13.3-4.3-27.3-6.5-41.6-6.5L40 224zm345.7 20.9l-171.1 171.1 169.4 0 0-46.3 53.6 90.6c11.2 19 35.8 25.3 54.8 14.1s25.3-35.8 14.1-54.8L430.3 290.8c-11.2-19-26.6-34.5-44.6-45.9zM192 448l0 32c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-32-192 0z\"]\n};\nvar faDatabase = {\n  prefix: 'fas',\n  iconName: 'database',\n  icon: [448, 512, [], \"f1c0\", \"M448 205.8c-14.8 9.8-31.8 17.7-49.5 24-47 16.8-108.7 26.2-174.5 26.2S96.4 246.5 49.5 229.8c-17.6-6.3-34.7-14.2-49.5-24L0 288c0 44.2 100.3 80 224 80s224-35.8 224-80l0-82.2zm0-77.8l0-48C448 35.8 347.7 0 224 0S0 35.8 0 80l0 48c0 44.2 100.3 80 224 80s224-35.8 224-80zM398.5 389.8C351.6 406.5 289.9 416 224 416S96.4 406.5 49.5 389.8c-17.6-6.3-34.7-14.2-49.5-24L0 432c0 44.2 100.3 80 224 80s224-35.8 224-80l0-66.2c-14.8 9.8-31.8 17.7-49.5 24z\"]\n};\nvar faNewspaper = {\n  prefix: 'fas',\n  iconName: 'newspaper',\n  icon: [512, 512, [128240], \"f1ea\", \"M0 416L0 120c0-13.3 10.7-24 24-24s24 10.7 24 24l0 288c0 13.3 10.7 24 24 24s24-10.7 24-24L96 96c0-35.3 28.7-64 64-64l288 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64zM160 128l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32zm24 240c-13.3 0-24 10.7-24 24s10.7 24 24 24l240 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-240 0zm-24-72c0 13.3 10.7 24 24 24l240 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-240 0c-13.3 0-24 10.7-24 24zM360 176c-13.3 0-24 10.7-24 24s10.7 24 24 24l64 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-64 0z\"]\n};\nvar faCloudRain = {\n  prefix: 'fas',\n  iconName: 'cloud-rain',\n  icon: [512, 512, [127783, 9926], \"f73d\", \"M96 320c-53 0-96-43-96-96 0-42.5 27.6-78.6 65.9-91.2-1.3-6.7-1.9-13.7-1.9-20.8 0-61.9 50.1-112 112-112 43.1 0 80.5 24.3 99.2 60 14.7-17.1 36.5-28 60.8-28 44.2 0 80 35.8 80 80 0 5.5-.6 10.8-1.6 16 .5 0 1.1 0 1.6 0 53 0 96 43 96 96s-43 96-96 96L96 320zm1.6 68.2c1.1-2.5 3.6-4.2 6.4-4.2s5.3 1.6 6.4 4.2l30.2 68.2c2.2 5.1 3.4 10.5 3.4 16 0 21.9-18.1 39.6-40 39.6s-40-17.7-40-39.6c0-5.5 1.2-11 3.4-16l30.2-68.2zm152 0c1.1-2.5 3.6-4.2 6.4-4.2s5.3 1.6 6.4 4.2l30.2 68.2c2.2 5.1 3.4 10.5 3.4 16 0 21.9-18.1 39.6-40 39.6s-40-17.7-40-39.6c0-5.5 1.2-11 3.4-16l30.2-68.2zm121.8 68.2l30.2-68.2c1.1-2.5 3.6-4.2 6.4-4.2s5.3 1.6 6.4 4.2l30.2 68.2c2.2 5.1 3.4 10.5 3.4 16 0 21.9-18.1 39.6-40 39.6s-40-17.7-40-39.6c0-5.5 1.2-11 3.4-16z\"]\n};\nvar faMaximize = {\n  prefix: 'fas',\n  iconName: 'maximize',\n  icon: [448, 512, [\"expand-arrows-alt\"], \"f31e\", \"M168 32L24 32C10.7 32 0 42.7 0 56L0 200c0 9.7 5.8 18.5 14.8 22.2S34.1 223.8 41 217l40-40 79 79-79 79-40-40c-6.9-6.9-17.2-8.9-26.2-5.2S0 302.3 0 312L0 456c0 13.3 10.7 24 24 24l144 0c9.7 0 18.5-5.8 22.2-14.8s1.7-19.3-5.2-26.2l-40-40 79-79 79 79-40 40c-6.9 6.9-8.9 17.2-5.2 26.2S270.3 480 280 480l144 0c13.3 0 24-10.7 24-24l0-144c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2l-40 40-79-79 79-79 40 40c6.9 6.9 17.2 8.9 26.2 5.2S448 209.7 448 200l0-144c0-13.3-10.7-24-24-24L280 32c-9.7 0-18.5 5.8-22.2 14.8S256.2 66.1 263 73l40 40-79 79-79-79 40-40c6.9-6.9 8.9-17.2 5.2-26.2S177.7 32 168 32z\"]\n};\nvar faExpandArrowsAlt = faMaximize;\nvar faLocationArrow = {\n  prefix: 'fas',\n  iconName: 'location-arrow',\n  icon: [512, 512, [], \"f124\", \"M477.9 75.5c4.5-11.8 1.7-25.2-7.2-34.1s-22.3-11.8-34.1-7.2l-416 160C7.9 199-.3 211.2 0 224.7s9.1 25.4 21.9 29.6l176.8 58.9 58.9 176.8c4.3 12.8 16.1 21.6 29.6 21.9s25.7-7.9 30.6-20.5l160-416z\"]\n};\nvar faCity = {\n  prefix: 'fas',\n  iconName: 'city',\n  icon: [576, 512, [127961], \"f64f\", \"M320 0c-35.3 0-64 28.7-64 64l0 32-48 0 0-72c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 72-64 0 0-72C96 10.7 85.3 0 72 0S48 10.7 48 24l0 74c-27.6 7.1-48 32.2-48 62L0 448c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-192c0-35.3-28.7-64-64-64l-64 0 0-128c0-35.3-28.7-64-64-64L320 0zm64 112l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16zm-16 80c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0zm16 112l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16zm112-16c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0zM256 304l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16zM240 192c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0zM128 304l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16zM112 192c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0z\"]\n};\nvar faXRay = {\n  prefix: 'fas',\n  iconName: 'x-ray',\n  icon: [512, 512, [], \"f497\", \"M0 64C0 46.3 14.3 32 32 32l448 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 320c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32L32 96C14.3 96 0 81.7 0 64zm280 56c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 16-64 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l64 0 0 48-80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l80 0 0 48-64 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l64 0 0 16c0 13.3 10.7 24 24 24s24-10.7 24-24l0-16 64 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-64 0 0-48 80 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-80 0 0-48 64 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-64 0 0-16z\"]\n};\nvar faUmbrellaBeach = {\n  prefix: 'fas',\n  iconName: 'umbrella-beach',\n  icon: [512, 512, [127958], \"f5ca\", \"M497.5 341.1c-5.9 16.7-25.3 23-41.1 15.1l-178.2-89.1-1.6 3.2-88.8 177.7 292.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l84.2 0 103.2-206.3 1.6-3.2-165.4-82.7c-15.8-7.9-22.4-27.3-12.5-42 45.9-68.6 124.1-113.8 212.9-113.8 141.4 0 256 114.6 256 256 0 29.8-5.1 58.5-14.5 85.1z\"]\n};\nvar faArrowRightToBracket = {\n  prefix: 'fas',\n  iconName: 'arrow-right-to-bracket',\n  icon: [512, 512, [\"sign-in\"], \"f090\", \"M352 96l64 0c17.7 0 32 14.3 32 32l0 256c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c53 0 96-43 96-96l0-256c0-53-43-96-96-96l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32zm-9.4 182.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L242.7 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l210.7 0-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l128-128z\"]\n};\nvar faSignIn = faArrowRightToBracket;\nvar faHeadset = {\n  prefix: 'fas',\n  iconName: 'headset',\n  icon: [448, 512, [], \"f590\", \"M224 64c-79 0-144.7 57.3-157.7 132.7 9.3-3 19.3-4.7 29.7-4.7l16 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-16 0c-53 0-96-43-96-96l0-64C0 100.3 100.3 0 224 0S448 100.3 448 224l0 168.1c0 66.3-53.8 120-120.1 120l-87.9-.1-32 0c-26.5 0-48-21.5-48-48s21.5-48 48-48l32 0c26.5 0 48 21.5 48 48l0 0 40 0c39.8 0 72-32.2 72-72l0-20.9c-14.1 8.2-30.5 12.8-48 12.8l-16 0c-26.5 0-48-21.5-48-48l0-96c0-26.5 21.5-48 48-48l16 0c10.4 0 20.3 1.6 29.7 4.7-13-75.3-78.6-132.7-157.7-132.7z\"]\n};\nvar faSplotch = {\n  prefix: 'fas',\n  iconName: 'splotch',\n  icon: [512, 512, [], \"f5bc\", \"M208.5 62.3l28.1-36.9C248.8 9.4 267.8 0 288 0 316.5 0 341.6 18.7 349.8 46l17.8 59.4c10.3 34.4 36.1 62 69.8 74.6l39.8 14.9c20.9 7.9 34.8 27.9 34.8 50.2 0 16.9-7.9 32.8-21.5 42.9l-67.3 50.5c-24.3 18.2-37.2 47.9-33.8 78.1l2.5 22.7c4.3 38.7-26 72.6-65 72.6-14.8 0-29.3-5.1-40.9-14.3l-55.3-44.3c-4.5-3.6-9.3-6.7-14.5-9.2-15.8-7.9-33.7-10.4-51-7.3L82.4 451.9c-34.6 6.3-66.4-20.3-66.4-55.4 0-13.2 4.7-26 13.1-36.2l11.2-13.4c14.6-17.4 22.6-39.4 22.6-62.1 0-18.8-5.5-37.2-15.8-53L8.8 173.5C3.1 164.7 0 154.4 0 143.9 0 110.5 30.1 85.1 63 90.7l51.3 8.7c35.9 6.1 72.2-8.2 94.2-37.1z\"]\n};\nvar faUpLong = {\n  prefix: 'fas',\n  iconName: 'up-long',\n  icon: [320, 512, [\"long-arrow-alt-up\"], \"f30c\", \"M137.4-22.6c12.5-12.5 32.8-12.5 45.3 0l128 128c9.2 9.2 11.9 22.9 6.9 34.9S300.9 160 288 160l-64 0 0 336c0 26.5-21.5 48-48 48l-32 0c-26.5 0-48-21.5-48-48l0-336-64 0c-12.9 0-24.6-7.8-29.6-19.8S.2 114.5 9.4 105.4l128-128z\"]\n};\nvar faLongArrowAltUp = faUpLong;\nvar faHexagonNodes = {\n  prefix: 'fas',\n  iconName: 'hexagon-nodes',\n  icon: [448, 512, [], \"e699\", \"M248 106.6c18.9-9 32-28.3 32-50.6c0-30.9-25.1-56-56-56s-56 25.1-56 56c0 22.3 13.1 41.6 32 50.6l0 98.8c-2.8 1.3-5.5 2.9-8 4.7l-80.1-45.8c1.6-20.8-8.6-41.6-27.9-52.8C57.2 96 23 105.2 7.5 132S1.2 193 28 208.5c1.3 .8 2.6 1.5 4 2.1l0 90.8c-1.3 .6-2.7 1.3-4 2.1C1.2 319-8 353.2 7.5 380S57.2 416 84 400.5c19.3-11.1 29.4-32 27.8-52.8l50.5-28.9c-11.5-11.2-19.9-25.6-23.8-41.7L88 306.1c-2.6-1.8-5.2-3.3-8-4.7l0-90.8c2.8-1.3 5.5-2.9 8-4.7l80.1 45.8c-.1 1.4-.2 2.8-.2 4.3c0 22.3 13.1 41.6 32 50.6l0 98.8c-18.9 9-32 28.3-32 50.6c0 30.9 25.1 56 56 56s56-25.1 56-56c0-22.3-13.1-41.6-32-50.6l0-98.8c2.8-1.3 5.5-2.9 8-4.7l80.1 45.8c-1.6 20.8 8.6 41.6 27.8 52.8c26.8 15.5 61 6.3 76.5-20.5s6.3-61-20.5-76.5c-1.3-.8-2.7-1.5-4-2.1l0-90.8c1.4-.6 2.7-1.3 4-2.1c26.8-15.5 36-49.7 20.5-76.5S390.8 96 364 111.5c-19.3 11.1-29.4 32-27.8 52.8l-50.6 28.9c11.5 11.2 19.9 25.6 23.8 41.7L360 205.9c2.6 1.8 5.2 3.3 8 4.7l0 90.8c-2.8 1.3-5.5 2.9-8 4.6l-80.1-45.8c.1-1.4 .2-2.8 .2-4.3c0-22.3-13.1-41.6-32-50.6l0-98.8z\"]\n};\nvar faHospital = {\n  prefix: 'fas',\n  iconName: 'hospital',\n  icon: [576, 512, [127973, 62589, \"hospital-alt\", \"hospital-wide\"], \"f0f8\", \"M128 64c0-35.3 28.7-64 64-64L384 0c35.3 0 64 28.7 64 64l0 64 64 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 192c0-35.3 28.7-64 64-64l64 0 0-64zM272 352c-17.7 0-32 14.3-32 32l0 80 96 0 0-80c0-17.7-14.3-32-32-32l-32 0zM128 368l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16zM112 256c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0zM512 368l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16zM496 256c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0zM264 104l0 32-32 0c-8.8 0-16 7.2-16 16l0 16c0 8.8 7.2 16 16 16l32 0 0 32c0 8.8 7.2 16 16 16l16 0c8.8 0 16-7.2 16-16l0-32 32 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-32 0 0-32c0-8.8-7.2-16-16-16l-16 0c-8.8 0-16 7.2-16 16z\"]\n};\nvar faHospitalAlt = faHospital;\nvar faHospitalWide = faHospital;\nvar faPersonHarassing = {\n  prefix: 'fas',\n  iconName: 'person-harassing',\n  icon: [576, 512, [], \"e549\", \"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM59.4 304.5L88 256.9 88 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-244.7 47.4 57.1c11.3 13.6 31.5 15.5 45.1 4.2s15.5-31.5 4.2-45.1l-73.7-88.9c-18.2-22-45.3-34.7-73.9-34.7l-35.9 0c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9zM480 240a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM464 344l0 58.7-41.4-41.4c-7.3-7.3-17.6-10.6-27.8-9s-18.9 8.1-23.5 17.3l-48 96c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3l28.1-56.3 54.7 54.7c12.4 12.4 29.1 19.3 46.6 19.3 36.4 0 65.9-29.5 65.9-65.9L576 344c0-30.9-25.1-56-56-56s-56 25.1-56 56zM288 48c0 8.8 7.2 16 16 16l56 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-56 0c-8.8 0-16 7.2-16 16zm-.8 49.7c-7.9-4-17.5-.7-21.5 7.2s-.7 17.5 7.2 21.5l48 24c7.9 4 17.5 .7 21.5-7.2s.7-17.5-7.2-21.5l-48-24z\"]\n};\nvar faMoneyBillTrendUp = {\n  prefix: 'fas',\n  iconName: 'money-bill-trend-up',\n  icon: [512, 512, [], \"e529\", \"M480 8c0-13.3-10.7-24-24-24L354.2-16c-13.3 0-24 10.7-24 24s10.7 24 24 24l43.9 0-111.3 111.3-95.1-81.5c-9-7.7-22.2-7.7-31.2 0l-112 96c-10.1 8.6-11.2 23.8-2.6 33.8s23.8 11.2 33.8 2.6l96.4-82.6 96.4 82.6c9.5 8.2 23.7 7.6 32.6-1.3l127-127 0 43.9c0 13.3 10.7 24 24 24s24-10.7 24-24L480 8zM48 256c-26.5 0-48 21.5-48 48L0 464c0 26.5 21.5 48 48 48l416 0c26.5 0 48-21.5 48-48l0-160c0-26.5-21.5-48-48-48L48 256zm47.3 56c-3.4 20.1-19.2 36-39.4 39.4-4.4 .7-8-2.9-8-7.3l0-32c0-4.4 3.6-8 8-8l32 0c4.4 0 8.1 3.6 7.3 8zm0 144.1c.7 4.4-2.9 8-7.3 8l-32 0c-4.4 0-8-3.6-8-8l0-32c0-4.4 3.6-8.1 8-7.3 20.1 3.4 36 19.2 39.4 39.4zM456 416.7c4.4-.7 8 2.9 8 7.3l0 32c0 4.4-3.6 8-8 8l-32 0c-4.4 0-8.1-3.6-7.3-8 3.4-20.1 19.2-36 39.4-39.4zM416.7 312c-.7-4.4 2.9-8 7.3-8l32 0c4.4 0 8 3.6 8 8l0 32c0 4.4-3.6 8.1-8 7.3-20.1-3.4-36-19.2-39.4-39.4zM192 384a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z\"]\n};\nvar faPenRuler = {\n  prefix: 'fas',\n  iconName: 'pen-ruler',\n  icon: [512, 512, [\"pencil-ruler\"], \"f5ae\", \"M404 0c19.2 0 37.6 7.6 51.1 21.2l35.7 35.7C504.4 70.4 512 88.8 512 108s-7.6 37.6-21.2 51.1L445.9 204 308 66.1 352.9 21.2C366.4 7.6 384.8 0 404 0zM58.9 315.1L274.1 100 412 237.9 196.9 453.1c-10.7 10.7-24.1 18.5-38.7 22.6L30.4 511.1c-8.3 2.3-17.3 0-23.4-6.2s-8.5-15.1-6.2-23.4L36.4 353.8c4.1-14.6 11.8-27.9 22.6-38.7zM225.4 80.8L80.8 225.4 11.7 156.3c-15.6-15.6-15.6-40.9 0-56.6l88-88c15.6-15.6 40.9-15.6 56.6 0l5.9 5.9-56.3 56.3c-7.8 7.8-7.8 20.5 0 28.3s20.5 7.8 28.3 0l56.3-56.3 34.9 34.9zM431.2 286.6l34.9 34.9-56.3 56.3c-7.8 7.8-7.8 20.5 0 28.3s20.5 7.8 28.3 0l56.3-56.3 5.9 5.9c15.6 15.6 15.6 40.9 0 56.6l-88 88c-15.6 15.6-40.9 15.6-56.6 0l-69.1-69.1 144.6-144.6z\"]\n};\nvar faPencilRuler = faPenRuler;\nvar faRepeat = {\n  prefix: 'fas',\n  iconName: 'repeat',\n  icon: [512, 512, [128257], \"f363\", \"M470.6 118.6c12.5-12.5 12.5-32.8 0-45.3l-64-64c-9.2-9.2-22.9-11.9-34.9-6.9S352 19.1 352 32l0 32-160 0C86 64 0 150 0 256 0 273.7 14.3 288 32 288s32-14.3 32-32c0-70.7 57.3-128 128-128l160 0 0 32c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l64-64zM41.4 393.4c-12.5 12.5-12.5 32.8 0 45.3l64 64c9.2 9.2 22.9 11.9 34.9 6.9S160 492.9 160 480l0-32 160 0c106 0 192-86 192-192 0-17.7-14.3-32-32-32s-32 14.3-32 32c0 70.7-57.3 128-128 128l-160 0 0-32c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-64 64z\"]\n};\nvar faBone = {\n  prefix: 'fas',\n  iconName: 'bone',\n  icon: [640, 512, [129460], \"f5d7\", \"M197.4 160c-3.9 0-7.2-2.8-8.1-6.6-10.2-42.1-48.1-73.4-93.3-73.4-53 0-96 43-96 96 0 29.1 12.9 55.1 33.3 72.7 4.3 3.7 4.3 10.8 0 14.5-20.4 17.6-33.3 43.7-33.3 72.7 0 53 43 96 96 96 45.2 0 83.1-31.3 93.3-73.4 .9-3.8 4.2-6.6 8.1-6.6l245.1 0c3.9 0 7.2 2.8 8.1 6.6 10.2 42.1 48.1 73.4 93.3 73.4 53 0 96-43 96-96 0-29.1-12.9-55.1-33.3-72.7-4.3-3.7-4.3-10.8 0-14.5 20.4-17.6 33.3-43.7 33.3-72.7 0-53-43-96-96-96-45.2 0-83.1 31.3-93.3 73.4-.9 3.8-4.2 6.6-8.1 6.6l-245.1 0z\"]\n};\nvar faFireFlameCurved = {\n  prefix: 'fas',\n  iconName: 'fire-flame-curved',\n  icon: [384, 512, [\"fire-alt\"], \"f7e4\", \"M153.6 29.9l16-21.3C173.6 3.2 180 0 186.7 0 198.4 0 208 9.6 208 21.3l0 22.1c0 13.1 5.4 25.7 14.9 34.7L307.6 159C356.4 205.6 384 270.2 384 337.7 384 434 306 512 209.7 512L192 512C86 512 0 426 0 320l0-3.8c0-48.8 19.4-95.6 53.9-130.1l3.5-3.5c4.2-4.2 10-6.6 16-6.6 12.5 0 22.6 10.1 22.6 22.6L96 288c0 35.3 28.7 64 64 64s64-28.7 64-64l0-3.9c0-18-7.2-35.3-19.9-48l-38.6-38.6c-24-24-37.5-56.7-37.5-90.7 0-27.7 9-54.8 25.6-76.9z\"]\n};\nvar faFireAlt = faFireFlameCurved;\nvar faBusSimple = {\n  prefix: 'fas',\n  iconName: 'bus-simple',\n  icon: [448, 512, [\"bus-alt\"], \"f55e\", \"M96 0C43 0 0 43 0 96L0 384c0 29.8 20.4 54.9 48 62l0 34c0 17.7 14.3 32 32 32l16 0c17.7 0 32-14.3 32-32l0-32 192 0 0 32c0 17.7 14.3 32 32 32l16 0c17.7 0 32-14.3 32-32l0-34c27.6-7.1 48-32.2 48-62l0-288c0-53-43-96-96-96L96 0zM64 128c0-17.7 14.3-32 32-32l256 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32L96 256c-17.7 0-32-14.3-32-32l0-96zM96 320a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm256 0a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faBusAlt = faBusSimple;\nvar faVenusMars = {\n  prefix: 'fas',\n  iconName: 'venus-mars',\n  icon: [640, 512, [9892], \"f228\", \"M480-64c-17.7 0-32 14.3-32 32S462.3 0 480 0L530.7 0 474 56.7c-26.3-15.7-57.1-24.7-90-24.7-35.4 0-68.4 10.5-96 28.5-27.6-18-60.6-28.5-96-28.5-97.2 0-176 78.8-176 176 0 86.3 62.1 158.1 144 173.1l0 34.9-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-34.9c23.3-4.3 44.9-13.1 64-25.6 27.6 18 60.6 28.5 96 28.5 97.2 0 176-78.8 176-176 0-41.1-14.1-79-37.8-109L576 45.3 576 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128c0-17.7-14.3-32-32-32L480-64zM336 309.2c20.2-28.6 32-63.5 32-101.2s-11.8-72.6-32-101.2c14.6-6.9 30.8-10.8 48-10.8 61.9 0 112 50.1 112 112S445.9 320 384 320c-17.2 0-33.5-3.9-48-10.8zM288 150.3c10.2 16.9 16 36.6 16 57.7s-5.8 40.9-16 57.7c-10.2-16.9-16-36.6-16-57.7s5.8-40.9 16-57.7zm-48-43.5c-20.2 28.6-32 63.5-32 101.2s11.8 72.6 32 101.2c-14.5 6.9-30.8 10.8-48 10.8-61.9 0-112-50.1-112-112S130.1 96 192 96c17.2 0 33.5 3.9 48 10.8z\"]\n};\nvar faBlender = {\n  prefix: 'fas',\n  iconName: 'blender',\n  icon: [512, 512, [], \"f517\", \"M0 56C0 25.1 25.1 0 56 0L437.6 0c21.3 0 36.6 20.3 30.8 40.8L457.1 80 344 80c-13.3 0-24 10.7-24 24s10.7 24 24 24l99.4 0-18.3 64-81.1 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l67.4 0-27.4 96-256 0-9.1-96-62.9 0c-30.9 0-56-25.1-56-56L0 56zM114.3 192L100.6 48 56 48c-4.4 0-8 3.6-8 8l0 128c0 4.4 3.6 8 8 8l58.3 0zM136 384l240 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-240 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40zm120 88a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nvar faU = {\n  prefix: 'fas',\n  iconName: 'u',\n  icon: [384, 512, [117], \"55\", \"M32 32c17.7 0 32 14.3 32 32l0 224c0 70.7 57.3 128 128 128s128-57.3 128-128l0-224c0-17.7 14.3-32 32-32s32 14.3 32 32l0 224c0 106-86 192-192 192S0 394 0 288L0 64C0 46.3 14.3 32 32 32z\"]\n};\nvar faShare = {\n  prefix: 'fas',\n  iconName: 'share',\n  icon: [512, 512, [\"mail-forward\"], \"f064\", \"M307.8 18.4c-12 5-19.8 16.6-19.8 29.6l0 80-112 0c-97.2 0-176 78.8-176 176 0 113.3 81.5 163.9 100.2 174.1 2.5 1.4 5.3 1.9 8.1 1.9 10.9 0 19.7-8.9 19.7-19.7 0-7.5-4.3-14.4-9.8-19.5-9.4-8.8-22.2-26.4-22.2-56.7 0-53 43-96 96-96l96 0 0 80c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l160-160c12.5-12.5 12.5-32.8 0-45.3l-160-160c-9.2-9.2-22.9-11.9-34.9-6.9z\"]\n};\nvar faMailForward = faShare;\nvar faPhoneFlip = {\n  prefix: 'fas',\n  iconName: 'phone-flip',\n  icon: [512, 512, [128381, \"phone-alt\"], \"f879\", \"M351.8 25c7.8-18.8 28.4-28.9 48.1-23.5l5.5 1.5c64.6 17.6 119.8 80.2 103.7 156.4-37.1 175-174.8 312.7-349.8 349.8-76.3 16.2-138.8-39.1-156.4-103.7l-1.5-5.5c-5.4-19.7 4.7-40.3 23.5-48.1l97.3-40.5c16.5-6.9 35.6-2.1 47 11.8l38.6 47.2c70.3-34.9 126.8-93.3 159.3-164.9l-44.1-36.1c-13.9-11.3-18.6-30.4-11.8-47L351.8 25z\"]\n};\nvar faPhoneAlt = faPhoneFlip;\nvar faToiletPortable = {\n  prefix: 'fas',\n  iconName: 'toilet-portable',\n  icon: [320, 512, [], \"e583\", \"M0 64l0 16 320 0 0-16c0-35.3-28.7-64-64-64L64 0C28.7 0 0 28.7 0 64zm24 64L0 128 0 488c0 13.3 10.7 24 24 24s24-10.7 24-24l0-8 224 0 0 8c0 13.3 10.7 24 24 24s24-10.7 24-24l0-360-296 0zm224 96l24 0 0 96-24 0c-13.3 0-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24z\"]\n};\nvar faPersonPregnant = {\n  prefix: 'fas',\n  iconName: 'person-pregnant',\n  icon: [384, 512, [], \"e31e\", \"M192 80a56 56 0 1 0 0-112 56 56 0 1 0 0 112zm80 321.2c8.6-4.5 16.8-10 24.3-16.5l4-3.4c22.6-19.4 35.7-47.7 35.7-77.6 0-35.9-18.8-69.1-49.6-87.6l-30.4-18.2 0-1.8c0-46.5-37.7-84.1-84.1-84.1-28.1 0-54.4 14.1-70 37.5L21.4 270.2c-9.8 14.7-5.8 34.6 8.9 44.4s34.6 5.8 44.4-8.9l29-43.5-30.5 113.5c-2.6 9.6-.6 19.9 5.5 27.8S94 416 104 416l8 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 32 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-110.8z\"]\n};\nvar faLessThan = {\n  prefix: 'fas',\n  iconName: 'less-than',\n  icon: [512, 512, [62774], \"3c\", \"M477.1 50.6c7.4 16 .4 35.1-15.6 42.5L108.4 256 461.4 419c16 7.4 23 26.4 15.6 42.5s-26.4 23-42.5 15.6l-416-192C7.3 279.8 0 268.5 0 256S7.3 232.2 18.6 227l416-192c16-7.4 35.1-.4 42.5 15.6z\"]\n};\nvar faSuperscript = {\n  prefix: 'fas',\n  iconName: 'superscript',\n  icon: [576, 512, [], \"f12b\", \"M544 32c0-11.1-5.7-21.4-15.2-27.2s-21.2-6.4-31.1-1.4l-32 16C449.9 27.3 443.5 46.5 451.4 62.3 457 73.5 468.3 80 480 80l0 80c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-128zM96 64C78.3 64 64 78.3 64 96s14.3 32 32 32l15.3 0 89.6 128-89.6 128-15.3 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0c10.4 0 20.2-5.1 26.2-13.6L240 311.8 325.8 434.4c6 8.6 15.8 13.6 26.2 13.6l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-15.3 0-89.6-128 89.6-128 15.3 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0c-10.4 0-20.2 5.1-26.2 13.6L240 200.2 154.2 77.6C148.2 69.1 138.4 64 128 64L96 64z\"]\n};\nvar faCircleStop = {\n  prefix: 'fas',\n  iconName: 'circle-stop',\n  icon: [512, 512, [62094, \"stop-circle\"], \"f28d\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM192 160l128 0c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32z\"]\n};\nvar faStopCircle = faCircleStop;\nvar faArrowsUpDown = {\n  prefix: 'fas',\n  iconName: 'arrows-up-down',\n  icon: [256, 512, [\"arrows-v\"], \"f07d\", \"M150.6-22.6c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L96 77.3 96 434.7 54.6 393.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c6 6 14.1 9.4 22.6 9.4s16.6-3.4 22.6-9.4l96-96c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-41.4 41.4 0-357.5 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96z\"]\n};\nvar faArrowsV = faArrowsUpDown;\nvar faPooStorm = {\n  prefix: 'fas',\n  iconName: 'poo-storm',\n  icon: [512, 512, [\"poo-bolt\"], \"f75a\", \"M268.9-31.8c-5.5-.7-11 1.4-14.5 5.7s-4.6 10.1-2.8 15.3c2.8 8.2 4.3 16.9 4.3 26.1 0 21.7-8.5 37.2-21.9 47.6-13.9 10.8-34.1 17-58.1 17l-24 0c-48.6 0-88 39.4-88 88 0 14.8 3.7 28.8 10.2 41.1-42 6.6-74.2 43-74.2 86.9 0 46.6 36.2 84.7 81.9 87.8 3.1-12.4 9.9-23.8 19.6-32.5L242.7 225c12.2-10.9 28-17 44.4-17 44.6 0 76.5 43 63.7 85.7l-12.7 42.4c28.8 1.2 52.7 21.1 59.8 47.9l26.2 0c48.6 0 88-39.4 88-88 0-43.9-32.1-80.3-74.2-86.9 6.5-12.3 10.2-26.2 10.2-41.1 0-48.6-39.4-88-88-88l-9.4 0c.9-5.4 1.4-10.9 1.4-16.6 0-48.7-36.1-88.9-83.1-95.2zM144.6 416l61.8 0-31.2 104.1c-3.6 11.9 5.3 23.9 17.8 23.9 4.6 0 9-1.7 12.4-4.7L346.5 412.9c3.5-3.1 5.5-7.6 5.5-12.4 0-9.2-7.4-16.6-16.6-16.6l-61.8 0 31.2-104.1c3.6-11.9-5.3-23.9-17.8-23.9-4.6 0-9 1.7-12.4 4.7L133.5 387.1c-3.5 3.1-5.5 7.6-5.5 12.4 0 9.2 7.4 16.6 16.6 16.6z\"]\n};\nvar faPooBolt = faPooStorm;\nvar faVideoSlash = {\n  prefix: 'fas',\n  iconName: 'video-slash',\n  icon: [576, 512, [], \"f4e2\", \"M41-24.9c-9.4-9.4-24.6-9.4-33.9 0S-2.3-.3 7 9.1l528 528c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-153-153 0-222.2c0-35.3-28.7-64-64-64L129.8 64 41-24.9zM32 128l0 256c0 35.3 28.7 64 64 64l256 0c7.8 0 15.3-1.4 22.2-4L36 105.8c-2.6 6.9-4 14.4-4 22.2zM464 336l73.5 58.8c4.2 3.4 9.4 5.2 14.8 5.2 13.1 0 23.7-10.6 23.7-23.7l0-240.6c0-13.1-10.6-23.7-23.7-23.7-5.4 0-10.6 1.8-14.8 5.2L464 176 464 336z\"]\n};\nvar faSquareXmark = {\n  prefix: 'fas',\n  iconName: 'square-xmark',\n  icon: [448, 512, [10062, \"times-square\", \"xmark-square\"], \"f2d3\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm71 135c9.4-9.4 24.6-9.4 33.9 0l55 55 55-55c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-55 55 55 55c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-55-55-55 55c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l55-55-55-55c-9.4-9.4-9.4-24.6 0-33.9z\"]\n};\nvar faTimesSquare = faSquareXmark;\nvar faXmarkSquare = faSquareXmark;\nvar faHandHoldingDroplet = {\n  prefix: 'fas',\n  iconName: 'hand-holding-droplet',\n  icon: [576, 512, [\"hand-holding-water\"], \"f4c1\", \"M275.5 6.6L209.2 103C198 119.3 192 138.6 192 158.3l0 1.7c0 53 43 96 96 96s96-43 96-96l0-1.7c0-19.8-6-39-17.2-55.3L300.5 6.6C297.7 2.5 293 0 288 0s-9.7 2.5-12.5 6.6zM109.3 341.5L66.7 384 32 384c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l320.5 0c29 0 57.3-9.3 80.7-26.5l126.6-93.3c17.8-13.1 21.6-38.1 8.5-55.9s-38.1-21.6-55.9-8.5L392.6 416 280 416c-13.3 0-24-10.7-24-24s10.7-24 24-24l72 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-152.2 0c-33.9 0-66.5 13.5-90.5 37.5z\"]\n};\nvar faHandHoldingWater = faHandHoldingDroplet;\nvar faWonSign = {\n  prefix: 'fas',\n  iconName: 'won-sign',\n  icon: [512, 512, [8361, \"krw\", \"won\"], \"f159\", \"M62.4 53.9C56.8 37.1 38.7 28.1 21.9 33.6S-3.9 57.4 1.7 74.1L56.9 240 32 240c-13.3 0-24 10.7-24 24s10.7 24 24 24l40.9 0 56.7 170.1c4.5 13.5 17.4 22.4 31.6 21.9s26.4-10.4 29.8-24.2L233 288 279 288 321 455.8c3.4 13.8 15.6 23.7 29.8 24.2s27.1-8.4 31.6-21.9L439.1 288 480 288c13.3 0 24-10.7 24-24s-10.7-24-24-24l-24.9 0 55.3-165.9c5.6-16.8-3.5-34.9-20.2-40.5s-34.9 3.5-40.5 20.2l-62 186.1-54.6 0-45.9-183.8C283.5 42 270.7 32 256 32s-27.5 10-31 24.2L179 240 124.4 240 62.4 53.9zm78 234.1l26.6 0-11.4 45.6-15.2-45.6zM245 240l11-44.1 11 44.1-22 0zm100 48l26.6 0-15.2 45.6-11.4-45.6z\"]\n};\nvar faKrw = faWonSign;\nvar faWon = faWonSign;\nvar faObjectUngroup = {\n  prefix: 'fas',\n  iconName: 'object-ungroup',\n  icon: [640, 512, [], \"f248\", \"M32 119.4C12.9 108.4 0 87.7 0 64 0 28.7 28.7 0 64 0 87.7 0 108.4 12.9 119.4 32l209.1 0c11.1-19.1 31.7-32 55.4-32 35.3 0 64 28.7 64 64 0 23.7-12.9 44.4-32 55.4l0 113.1c19.1 11.1 32 31.7 32 55.4 0 35.3-28.7 64-64 64-23.7 0-44.4-12.9-55.4-32l-209.1 0c-11.1 19.1-31.7 32-55.4 32-35.3 0-64-28.7-64-64 0-23.7 12.9-44.4 32-55.4l0-113.1zM119.4 96c-5.6 9.7-13.7 17.8-23.4 23.4l0 113.1c9.7 5.6 17.8 13.7 23.4 23.4l209.1 0c5.6-9.7 13.7-17.8 23.4-23.4l0-113.1c-9.7-5.6-17.8-13.7-23.4-23.4L119.4 96zM544 279.4c-9.7-5.6-17.8-13.7-23.4-23.4l-29.2 0c-5.3-17.7-14.8-33.5-27.4-46.4l0-17.6 56.6 0c11.1-19.1 31.7-32 55.4-32 35.3 0 64 28.7 64 64 0 23.7-12.9 44.4-32 55.4l0 113.1c19.1 11.1 32 31.7 32 55.4 0 35.3-28.7 64-64 64-23.7 0-44.4-12.9-55.4-32l-209.1 0c-11.1 19.1-31.7 32-55.4 32-35.3 0-64-28.7-64-64 0-23.7 12.9-44.4 32-55.4l0-24.6 64 0 0 24.6c9.7 5.6 17.8 13.7 23.4 23.4l209.1 0c5.6-9.7 13.7-17.8 23.4-23.4l0-113.1z\"]\n};\nvar faComment = {\n  prefix: 'fas',\n  iconName: 'comment',\n  icon: [512, 512, [128489, 61669], \"f075\", \"M512 240c0 132.5-114.6 240-256 240-37.1 0-72.3-7.4-104.1-20.7L33.5 510.1c-9.4 4-20.2 1.7-27.1-5.8S-2 485.8 2.8 476.8l48.8-92.2C19.2 344.3 0 294.3 0 240 0 107.5 114.6 0 256 0S512 107.5 512 240z\"]\n};\nvar faHillAvalanche = {\n  prefix: 'fas',\n  iconName: 'hill-avalanche',\n  icon: [576, 512, [], \"e507\", \"M440.1 401.9c34.2 23.1 81.1 19.5 111.4-10.8 34.4-34.4 34.4-90.1 0-124.5-27.8-27.8-69.5-33.1-102.6-16-11.8 6.1-16.4 20.6-10.3 32.3s20.6 16.4 32.3 10.3c15.1-7.8 34-5.3 46.6 7.3 15.6 15.6 15.6 40.9 0 56.6s-40.9 15.6-56.6 0l-81.7-81.7c22.3-14.2 37.1-39.1 37.1-67.5 0-33.9-21.1-62.9-50.9-74.5 1.9-6.8 2.9-14 2.9-21.5 0-44.2-35.8-80-80-80-27.3 0-51.5 13.7-65.9 34.6-5.8-20-24.2-34.6-46.1-34.6-26.5 0-48 21.5-48 48 0 4 .5 7.9 1.4 11.6L440.1 401.9zM480.4 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM68.7 87C43.5 61.8 .4 79.7 .4 115.3L.4 432c0 44.2 35.8 80 80 80l316.7 0c35.6 0 53.5-43.1 28.3-68.3L68.7 87z\"]\n};\nvar faArrowsToEye = {\n  prefix: 'fas',\n  iconName: 'arrows-to-eye',\n  icon: [640, 512, [], \"e4bf\", \"M176 56c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 38.1-63-63c-9.4-9.4-24.6-9.4-33.9 0S21.7 55.6 31 65l63 63-38.1 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l96 0c13.3 0 24-10.7 24-24l0-96zm0 400l0-96c0-13.3-10.7-24-24-24l-96 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l38.1 0-63 63c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l63-63 0 38.1c0 13.3 10.7 24 24 24s24-10.7 24-24zm312 24c13.3 0 24-10.7 24-24l0-38.1 63 63c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-63-63 38.1 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-96 0c-13.3 0-24 10.7-24 24l0 96c0 13.3 10.7 24 24 24zM464 56l0 96c0 13.3 10.7 24 24 24l96 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-38.1 0 63-63c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-63 63 0-38.1c0-13.3-10.7-24-24-24s-24 10.7-24 24zM320 120c-57.3 0-99.4 34-125.6 64.3-20 23.1-32.4 45.8-37.6 56.1-2.5 5-4.9 9.7-4.9 15.6s2.3 10.6 4.9 15.6c5.2 10.3 17.6 33 37.6 56.1 26.2 30.3 68.2 64.3 125.6 64.3s99.4-34 125.6-64.3c20-23.1 32.4-45.8 37.6-56.1 2.5-5 4.9-9.7 4.9-15.6s-2.3-10.6-4.9-15.6c-5.2-10.3-17.6-33-37.6-56.1-26.2-30.3-68.2-64.3-125.6-64.3zM256 256a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z\"]\n};\nvar faSnowplow = {\n  prefix: 'fas',\n  iconName: 'snowplow',\n  icon: [640, 512, [], \"f7d2\", \"M128 160l0-96c0-35.3 28.7-64 64-64L296.4 0c24.2 0 46.4 13.7 57.2 35.4l87.6 175.1c4.4 8.9 6.8 18.7 6.8 28.6l0 56.9 80 0 0-80c0-48.6 39.4-88 88-88 13.3 0 24 10.7 24 24s-10.7 24-24 24c-22.1 0-40 17.9-40 40l0 208c0 22.1 17.9 40 40 40 13.3 0 24 10.7 24 24s-10.7 24-24 24c-48.6 0-88-39.4-88-88l0-80-63 0c9.5 16.5 15 35.6 15 56 0 61.9-50.1 112-112 112l-224 0c-61.9 0-112-50.1-112-112 0-30.5 12.2-58.2 32-78.4L64 224c0-35.3 28.7-64 64-64zm91.7 34.9l43.6 29.1 113.2 0-80-160-104.4 0 0 108.8 27.7 22.1zM416 400c0-26.5-21.5-48-48-48l-224 0c-26.5 0-48 21.5-48 48s21.5 48 48 48l224 0c26.5 0 48-21.5 48-48zm-280 0a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm216-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM232 400a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nvar faChartGantt = {\n  prefix: 'fas',\n  iconName: 'chart-gantt',\n  icon: [512, 512, [], \"e0e4\", \"M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64L0 400c0 44.2 35.8 80 80 80l400 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 416c-8.8 0-16-7.2-16-16L64 64zm96 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0zm64 112c-17.7 0-32 14.3-32 32s14.3 32 32 32l128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-128 0zM384 288c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0z\"]\n};\nvar faVideo = {\n  prefix: 'fas',\n  iconName: 'video',\n  icon: [576, 512, [\"video-camera\"], \"f03d\", \"M96 64c-35.3 0-64 28.7-64 64l0 256c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L96 64zM464 336l73.5 58.8c4.2 3.4 9.4 5.2 14.8 5.2 13.1 0 23.7-10.6 23.7-23.7l0-240.6c0-13.1-10.6-23.7-23.7-23.7-5.4 0-10.6 1.8-14.8 5.2L464 176 464 336z\"]\n};\nvar faVideoCamera = faVideo;\nvar faChessPawn = {\n  prefix: 'fas',\n  iconName: 'chess-pawn',\n  icon: [384, 512, [9823], \"f443\", \"M192-32c66.3 0 120 53.7 120 120 0 27-8.9 51.9-24 72 17.7 0 32 14.3 32 32s-14.3 32-32 32l-10.7 0 26.7 160 56.2 70.3c5 6.3 7.8 14.1 7.8 22.2 0 19.6-15.9 35.5-35.5 35.5L51.5 512c-19.6 0-35.5-15.9-35.5-35.5 0-8.1 2.7-15.9 7.8-22.2L80 384 106.7 224 96 224c-17.7 0-32-14.3-32-32s14.3-32 32-32c-15.1-20.1-24-45-24-72 0-66.3 53.7-120 120-120z\"]\n};\nvar faSynagogue = {\n  prefix: 'fas',\n  iconName: 'synagogue',\n  icon: [576, 512, [128333], \"f69b\", \"M16 80c0-35.3 28.7-64 64-64s64 28.7 64 64l0 32-128 0 0-32zm0 368l0-288 128 0 126.2-84.2c10.7-7.2 24.8-7.2 35.5 0l126.2 84.2 128 0 0 288c0 35.3-28.7 64-64 64L80 512c-35.3 0-64-28.7-64-64zM560 112l-128 0 0-32c0-35.3 28.7-64 64-64s64 28.7 64 64l0 32zM224 384l0 80 128 0 0-80c0-35.3-28.7-64-64-64s-64 28.7-64 64zm64-152a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"]\n};\nvar faBuildingCircleCheck = {\n  prefix: 'fas',\n  iconName: 'building-circle-check',\n  icon: [576, 512, [], \"e4d2\", \"M96 0C60.7 0 32 28.7 32 64l0 384c0 35.3 28.7 64 64 64l180 0c-10.5-14.6-19-30.7-25.1-48l-74.9 0 0-80c0-17.7 14.3-32 32-32l32 0c2 0 4 .2 5.9 .5 6-23.6 16.3-45.4 30.1-64.5l-4 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 4c27.5-19.8 60.3-32.4 96-35.4L416 64c0-35.3-28.7-64-64-64L96 0zm32 112c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM128 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM576 400a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-86.6-60.9c7.1 5.2 8.7 15.2 3.5 22.3l-64 88c-2.8 3.8-7 6.2-11.7 6.5s-9.3-1.3-12.6-4.6l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l26.8 26.8 53-72.9c5.2-7.1 15.2-8.7 22.4-3.5z\"]\n};\nvar faCalendarPlus = {\n  prefix: 'fas',\n  iconName: 'calendar-plus',\n  icon: [448, 512, [], \"f271\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 32 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 128C0 92.7 28.7 64 64 64l32 0 0-32c0-17.7 14.3-32 32-32zm96 192c-13.3 0-24 10.7-24 24l0 48-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l48 0 0 48c0 13.3 10.7 24 24 24s24-10.7 24-24l0-48 48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-48c0-13.3-10.7-24-24-24z\"]\n};\nvar faWheelchairMove = {\n  prefix: 'fas',\n  iconName: 'wheelchair-move',\n  icon: [448, 512, [\"wheelchair-alt\"], \"e2ce\", \"M312 56a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zM205.4 124.1c-6.4-5.2-15.6-4.7-21.4 1.1l-33.4 33.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L138.8 80c29-29 75.2-31.4 107-5.5l81.3 66c21.4 17.4 23.8 49.2 5.2 69.5l-41.8 46 98 0c30.3 0 53 27.7 47.1 57.4L407.4 454.3c-3.5 17.3-20.3 28.6-37.7 25.1s-28.6-20.3-25.1-37.7L369 320 316.8 320c2.1 10.3 3.2 21 3.2 32 0 88.4-71.6 160-160 160S0 440.4 0 352 71.6 192 160 192c6 0 11.9 .3 17.8 1l50.4-50.4-22.7-18.5zM160 448a96 96 0 1 0 0-192 96 96 0 1 0 0 192z\"]\n};\nvar faWheelchairAlt = faWheelchairMove;\nvar faUserShield = {\n  prefix: 'fas',\n  iconName: 'user-shield',\n  icon: [576, 512, [], \"f505\", \"M224 248a120 120 0 1 0 0-240 120 120 0 1 0 0 240zm-29.7 56C95.8 304 16 383.8 16 482.3 16 498.7 29.3 512 45.7 512l251.5 0C261 469.4 240 414.5 240 356.4l0-31.1c0-7.3 1-14.5 2.9-21.3l-48.6 0zm251 184.5l-13.3 6.3 0-188.1 96 32 0 19.6c0 55.8-32.2 106.5-82.7 130.3zM421.9 259.5l-112 37.3c-13.1 4.4-21.9 16.6-21.9 30.4l0 31.1c0 74.4 43 142.1 110.2 173.7l18.5 8.7c4.8 2.2 10 3.4 15.2 3.4s10.5-1.2 15.2-3.4l18.5-8.7C533 500.3 576 432.6 576 358.2l0-31.1c0-13.8-8.8-26-21.9-30.4l-112-37.3c-6.6-2.2-13.7-2.2-20.2 0z\"]\n};\nvar faBold = {\n  prefix: 'fas',\n  iconName: 'bold',\n  icon: [384, 512, [], \"f032\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l32 0 0 320-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l224 0c70.7 0 128-57.3 128-128 0-46.5-24.8-87.3-62-109.7 18.7-22.3 30-51 30-82.3 0-70.7-57.3-128-128-128L32 32zM288 160c0 35.3-28.7 64-64 64l-96 0 0-128 96 0c35.3 0 64 28.7 64 64zM128 416l0-128 128 0c35.3 0 64 28.7 64 64s-28.7 64-64 64l-128 0z\"]\n};\nvar faHeartPulse = {\n  prefix: 'fas',\n  iconName: 'heart-pulse',\n  icon: [512, 512, [\"heartbeat\"], \"f21e\", \"M256 107.9L241 87.1C216 52.5 175.9 32 133.1 32 59.6 32 0 91.6 0 165.1l0 2.6c0 23.6 6.2 48 16.6 72.3l106 0c3.2 0 6.1-1.9 7.4-4.9l31.8-76.3c3.7-8.8 12.3-14.6 21.8-14.8s18.3 5.4 22.2 14.1l51.3 113.9 41.4-82.8c4.1-8.1 12.4-13.3 21.5-13.3s17.4 5.1 21.5 13.3l23.2 46.3c1.4 2.7 4.1 4.4 7.2 4.4l123.6 0c10.5-24.3 16.6-48.7 16.6-72.3l0-2.6C512 91.6 452.4 32 378.9 32 336.2 32 296 52.5 271 87.1l-15 20.7zM469.6 288l-97.8 0c-21.2 0-40.6-12-50.1-31l-1.7-3.4-42.5 85.1c-4.1 8.3-12.7 13.5-22 13.3s-17.6-5.7-21.4-14.1l-49.3-109.5-10.5 25.2c-8.7 20.9-29.1 34.5-51.7 34.5l-80.2 0c47.2 73.8 123 141.7 170.4 177.9 12.4 9.4 27.6 14.1 43.1 14.1s30.8-4.6 43.1-14.1C346.6 429.7 422.4 361.8 469.6 288z\"]\n};\nvar faHeartbeat = faHeartPulse;\nvar faSquareRootVariable = {\n  prefix: 'fas',\n  iconName: 'square-root-variable',\n  icon: [576, 512, [\"square-root-alt\"], \"f698\", \"M282.6 78.1c8-27.3 33-46.1 61.4-46.1l200 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L344 96 238.7 457c-3.6 12.3-14.1 21.2-26.8 22.8s-25.1-4.6-31.5-15.6L77.6 288 32 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l45.6 0c22.8 0 43.8 12.1 55.3 31.8l65.2 111.8 84.4-289.5zM393.4 233.4c12.5-12.5 32.8-12.5 45.3 0l41.4 41.4 41.4-41.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-41.4 41.4 41.4 41.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-41.4-41.4-41.4 41.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l41.4-41.4-41.4-41.4c-12.5-12.5-12.5-32.8 0-45.3z\"]\n};\nvar faSquareRootAlt = faSquareRootVariable;\nvar faHandsBubbles = {\n  prefix: 'fas',\n  iconName: 'hands-bubbles',\n  icon: [512, 512, [\"hands-wash\"], \"e05e\", \"M384 64a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm96 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM128 464a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM0 160l.1 72.6c0 44.8 17.6 87.1 47.9 118.4 .3-77 40.1-148.4 105.4-189.3l1.9-1.2c-2.5-3.7-2.8-8.6-.4-12.7l62-107.4c6.6-11.5 2.7-26.2-8.8-32.8S182 5 175.4 16.5l-68 117.8 0 0 0 0-43.3 75 0-49.3c0-17.7-14.4-32-32-32S0 142.4 0 160zm213.6-35.9c14.1-8.8 29.8-12.7 45.2-12.1l36.5-63.3c6.6-11.5 2.7-26.2-8.8-32.8s-26.2-2.7-32.8 8.8l-67.1 116.2 27-16.9zm86.5-35.7l-16.4 28.4c15.1 5.5 28.6 15.6 38.3 29.7l19.7-34.2c6.6-11.5 2.7-26.2-8.8-32.8s-26.2-2.7-32.8 8.8zm46.4 63.7l-12.5 21.7c2 8.6 2.5 17.5 1.7 26.1l4.3 0 0 0 34.4 0 13.7-23.8c6.6-11.5 2.7-26.2-8.8-32.8s-26.2-2.7-32.8 8.8zM283.1 175c-9.4-15-29.1-19.5-44.1-10.2l-60.2 37.6C127.3 234.7 96 291.2 96 352l0 8c0 8.9 .8 17.6 2.2 26.1 35.4 8.2 61.8 40 61.8 77.9 0 6.3-.7 12.5-2.1 18.4 25.2 18.6 56.4 29.6 90.1 29.6l176 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-92 0c-6.6 0-12-5.4-12-12s5.4-12 12-12l124 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-124 0c-6.6 0-12-5.4-12-12s5.4-12 12-12l156 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-156 0c-6.6 0-12-5.4-12-12s5.4-12 12-12l124 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-136 0 0 0 0 0-93.2 0 46.2-28.9c15-9.4 19.5-29.1 10.2-44.1z\"]\n};\nvar faHandsWash = faHandsBubbles;\nvar faMarker = {\n  prefix: 'fas',\n  iconName: 'marker',\n  icon: [512, 512, [], \"f5a1\", \"M408.8 0c-27.4 0-53.6 10.9-73 30.2L318.1 48 305 34.9c-28.1-28.1-73.7-28.1-101.8 0L103 135c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0L237.1 68.9c9.4-9.4 24.6-9.4 33.9 0L284.1 81.9 184 182.1 329.9 328 481.8 176.2c19.4-19.4 30.2-45.6 30.2-73 0-57-46.2-103.2-103.2-103.2zM102.4 263.7c-49.9 49.9-83.3 114-95.5 183.5L.4 483.8C-1 491.6 1.5 499.4 7 505s13.4 8 21.1 6.7l36.7-6.5c69.5-12.3 133.6-45.6 183.5-95.5L296 361.9 150.1 216 102.4 263.7z\"]\n};\nvar faClipboard = {\n  prefix: 'fas',\n  iconName: 'clipboard',\n  icon: [384, 512, [128203], \"f328\", \"M320 32l-8.6 0C300.4 12.9 279.7 0 256 0L128 0C104.3 0 83.6 12.9 72.6 32L64 32C28.7 32 0 60.7 0 96L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-352c0-35.3-28.7-64-64-64zM136 112c-13.3 0-24-10.7-24-24s10.7-24 24-24l112 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-112 0z\"]\n};\nvar faPlaceOfWorship = {\n  prefix: 'fas',\n  iconName: 'place-of-worship',\n  icon: [512, 512, [], \"f67f\", \"M160 79l0 81-44.8 33.6C103.1 202.7 96 216.9 96 232l0 40-60.6 30.3C13.7 313.2 0 335.3 0 359.6L0 448c0 35.3 28.7 64 64 64 74.7 0 85.4 0 320 0l64 0c35.3 0 64-28.7 64-64l0-88.4c0-24.2-13.7-46.4-35.4-57.2L416 272 416 232c0-15.1-7.1-29.3-19.2-38.4L352 160 352 79c0-9.5-4.2-18.5-11.5-24.6L271.4-3.2c-8.9-7.4-21.8-7.4-30.7 0L171.5 54.4C164.2 60.5 160 69.5 160 79zm96 241c35.3 0 64 28.7 64 64l0 80-128 0 0-80c0-35.3 28.7-64 64-64z\"]\n};\nvar faCannabis = {\n  prefix: 'fas',\n  iconName: 'cannabis',\n  icon: [512, 512, [], \"f55f\", \"M256 0c5.3 0 10.3 2.7 13.3 7.1 15.8 23.5 36.7 63.7 49.2 109 7.3 26.4 11.8 55.3 10.3 84 11.6-8.9 23.7-16.7 35.9-23.7 41-23.3 84.4-36.9 112.2-42.5 5.2-1 10.7 .6 14.4 4.4s5.4 9.2 4.4 14.5c-5.6 27.7-19.3 70.9-42.7 111.7-9.1 15.9-19.9 31.7-32.5 46.3 27.9 6.6 52.5 17.2 67.3 25.4 5.1 2.8 8.2 8.2 8.2 14s-3.2 11.2-8.2 14c-15.2 8.4-40.9 19.5-69.8 26.1-20.2 4.6-42.9 7.2-65.2 4.6l8.3 33.2c1.5 6.1-.6 12.5-5.5 16.4s-11.6 4.6-17.2 1.8L280 417.2 280 488c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-70.8-58.5 29.1c-5.6 2.8-12.3 2.1-17.2-1.8s-7-10.3-5.5-16.4l8.3-33.2c-22.2 2.6-45 0-65.2-4.6-28.9-6.6-54.5-17.6-69.8-26.1-5.1-2.8-8.2-8.2-8.2-14s3.2-11.2 8.2-14l6.2-3.3c15-7.6 36.8-16.4 61.1-22.2-12.5-14.5-23.3-30.4-32.4-46.2-23.4-40.8-37.1-84-42.7-111.7-1.1-5.2 .6-10.7 4.4-14.5s9.2-5.4 14.4-4.4c27.9 5.5 71.2 19.2 112.2 42.5 12.2 6.9 24.3 14.8 35.8 23.7-1.4-28.7 3.1-57.6 10.3-84 12.5-45.3 33.4-85.5 49.2-109l1.2-1.6C246.9 2 251.3 0 256 0z\"]\n};\nvar faPeopleRoof = {\n  prefix: 'fas',\n  iconName: 'people-roof',\n  icon: [576, 512, [], \"e537\", \"M302.3-12.6c-9-4.5-19.6-4.5-28.6 0l-256 128C1.9 123.3-4.5 142.5 3.4 158.3s27.1 22.2 42.9 14.3L288 51.8 529.7 172.6c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9l-256-128zM288 272a56 56 0 1 0 0-112 56 56 0 1 0 0 112zm0 48c-53 0-96 43-96 96l0 32c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-32c0-53-43-96-96-96zM160 256a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm352 0a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM112 336c-44.2 0-80 35.8-80 80l0 33.1c0 17 13.8 30.9 30.9 30.9l87.8 0c-4.3-9.8-6.7-20.6-6.7-32l0-48c0-18.4 3.5-36 9.8-52.2-12.2-7.5-26.5-11.8-41.8-11.8zM425.4 480l87.8 0c17 0 30.9-13.8 30.9-30.9l0-33.1c0-44.2-35.8-80-80-80-15.3 0-29.6 4.3-41.8 11.8 6.3 16.2 9.8 33.8 9.8 52.2l0 48c0 11.4-2.4 22.2-6.7 32z\"]\n};\nvar faDisease = {\n  prefix: 'fas',\n  iconName: 'disease',\n  icon: [512, 512, [], \"f7fa\", \"M236.5 29.4L224 48c-20 30-53.6 48-89.7 48L68 96c-37.5 0-67.9 30.4-67.9 67.9 0 18 7.2 35.2 19.9 47.9l27 27c11 11 17.2 25.9 17.2 41.5 0 15.8-6.4 30.9-17.7 42L33.4 335.1c-11.1 10.8-17.3 25.7-17.3 41.2 0 36.8 34.1 64.2 70.1 56.2l62.3-13.8c7.7-1.7 15.7-2.6 23.6-2.6 32.8 0 64.2 14.6 85.2 39.8l30.5 36.6c10.4 12.4 25.7 19.6 41.9 19.6 30.1 0 54.5-24.4 54.5-54.5l0-51.2c0-41.4 25.4-78.5 64-93.5l22.2-8.6c25.2-9.8 41.8-34.1 41.8-61.1 0-26.4-15.9-50.3-40.3-60.5L429 164.8c-33.2-13.9-57.6-43-65.5-78.1l-7.9-35.2c-6.8-30.1-33.5-51.5-64.3-51.5-22 0-42.6 11-54.8 29.4zM160 192a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm96 0a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32 96a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faBookBible = {\n  prefix: 'fas',\n  iconName: 'book-bible',\n  icon: [448, 512, [\"bible\"], \"f647\", \"M96 512c-53 0-96-43-96-96L0 96C0 43 43 0 96 0L400 0c26.5 0 48 21.5 48 48l0 288c0 20.9-13.4 38.7-32 45.3l0 66.7c17.7 0 32 14.3 32 32s-14.3 32-32 32L96 512zm0-128c-17.7 0-32 14.3-32 32s14.3 32 32 32l256 0 0-64-256 0zM192 80l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 112c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-112 48 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-48 0 0-48c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16z\"]\n};\nvar faBible = faBookBible;\nvar faChessBoard = {\n  prefix: 'fas',\n  iconName: 'chess-board',\n  icon: [448, 512, [], \"f43c\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm64 64l0 64 64 0 0-64 64 0 0 64 64 0 0-64 64 0 0 64-64 0 0 64 64 0 0 64-64 0 0 64 64 0 0 64-64 0 0-64-64 0 0 64-64 0 0-64-64 0 0 64-64 0 0-64 64 0 0-64-64 0 0-64 64 0 0-64-64 0 0-64 64 0zm64 128l64 0 0-64-64 0 0 64zm0 64l0-64-64 0 0 64 64 0zm64 0l-64 0 0 64 64 0 0-64zm0 0l64 0 0-64-64 0 0 64z\"]\n};\nvar faMars = {\n  prefix: 'fas',\n  iconName: 'mars',\n  icon: [512, 512, [9794], \"f222\", \"M320 32c0-17.7 14.3-32 32-32L480 0c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-50.7-95 95c19.5 28.4 31 62.7 31 99.8 0 97.2-78.8 176-176 176S32 401.2 32 304 110.8 128 208 128c37 0 71.4 11.4 99.8 31l95-95-50.7 0c-17.7 0-32-14.3-32-32zM208 416a112 112 0 1 0 0-224 112 112 0 1 0 0 224z\"]\n};\nvar faLaptop = {\n  prefix: 'fas',\n  iconName: 'laptop',\n  icon: [640, 512, [128187], \"f109\", \"M128 32C92.7 32 64 60.7 64 96l0 240 64 0 0-240 384 0 0 240 64 0 0-240c0-35.3-28.7-64-64-64L128 32zM19.2 384C8.6 384 0 392.6 0 403.2 0 445.6 34.4 480 76.8 480l486.4 0c42.4 0 76.8-34.4 76.8-76.8 0-10.6-8.6-19.2-19.2-19.2L19.2 384z\"]\n};\nvar faUserXmark = {\n  prefix: 'fas',\n  iconName: 'user-xmark',\n  icon: [576, 512, [\"user-times\"], \"f235\", \"M254.1 304c98.5 0 178.3 79.8 178.3 178.3 0 16.4-13.3 29.7-29.7 29.7L46.1 512c-16.4 0-29.7-13.3-29.7-29.7 0-98.5 79.8-178.3 178.3-178.3l59.4 0zM530.3 108.1c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-33.9 33.9 33.9 33.9c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-33.9-33.9-33.9 33.9c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l33.9-33.9-33.9-33.9c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l33.9 33.9 33.9-33.9zM224.4 248a120 120 0 1 1 0-240 120 120 0 1 1 0 240z\"]\n};\nvar faUserTimes = faUserXmark;\nvar faFlagUsa = {\n  prefix: 'fas',\n  iconName: 'flag-usa',\n  icon: [448, 512, [], \"f74d\", \"M32 0C49.7 0 64 14.3 64 32l0 16 69-17.2c38.1-9.5 78.3-5.1 113.5 12.5 46.3 23.2 100.8 23.2 147.1 0l9.6-4.8C423.8 28.1 448 43.1 448 66.1l0 36.1-44.7 16.2c-42.8 15.6-90 13.9-131.6-4.6l-16.1-7.2c-20.3-9-41.8-14.7-63.6-16.9l0 32.2c17.4 2.1 34.4 6.7 50.6 13.9l16.1 7.2c49.2 21.9 105 23.8 155.6 5.4l33.7-12.3 0 62-44.7 16.2c-42.8 15.6-90 13.9-131.6-4.6l-16.1-7.2c-40.2-17.9-85-22.5-128.1-13.3l-63.5 13.6 0 32.7 70.2-15.1c36.4-7.8 74.3-3.9 108.4 11.3l16.1 7.2c49.2 21.9 105 23.8 155.6 5.4l33.7-12.3 0 61.9-44.7 16.2c-42.8 15.6-90 13.9-131.6-4.6l-16.1-7.2c-40.2-17.9-85-22.5-128.1-13.3l-63.5 13.6 0 32.7 70.2-15.1c36.4-7.8 74.3-3.9 108.4 11.3l16.1 7.2c49.2 21.9 105 23.8 155.6 5.4l33.7-12.3 0 33.5c0 13.3-8.3 25.3-20.8 30l-34.7 13c-46.2 17.3-97.6 14.6-141.7-7.4-37.9-19-81.4-23.7-122.5-13.4L64 400 64 480c0 17.7-14.3 32-32 32S0 497.7 0 480L0 32C0 14.3 14.3 0 32 0zm80 96a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm32 0a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm-32 48a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm32 0a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"]\n};\nvar faHandMiddleFinger = {\n  prefix: 'fas',\n  iconName: 'hand-middle-finger',\n  icon: [448, 512, [128405], \"f806\", \"M232 0c-22.1 0-40 17.9-40 40l0 164.2c-8.5-7.6-19.7-12.2-32-12.2-26.5 0-48 21.5-48 48l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-55.7c-2 1.4-3.9 3-5.8 4.5L55 284.8C40.4 297 32 315 32 334L32 372c0 38 16.9 74 46.1 98.3l5.4 4.5c28.8 24 65 37.1 102.4 37.1L304 512c70.7 0 128-57.3 128-128l0-96c0-26.5-21.5-48-48-48-12.4 0-23.6 4.7-32.1 12.3-1.9-24.8-22.6-44.3-47.9-44.3-12.3 0-23.5 4.6-32 12.2L272 40c0-22.1-17.9-40-40-40z\"]\n};\nvar faMortarPestle = {\n  prefix: 'fas',\n  iconName: 'mortar-pestle',\n  icon: [512, 512, [], \"f5a7\", \"M504.3 11.1C493.3-1.6 474.5-3.7 461 6.2L252.3 160 397.3 160 502.6 54.6c11.8-11.8 12.6-30.8 1.6-43.5zM32 192c-17.7 0-32 14.3-32 32s14.3 32 32 32c0 82.5 43.4 147.7 123.9 176.2-11.1 13.9-19.4 30.3-23.9 48.1-4.4 17.1 10.4 31.7 28.1 31.7l192 0c17.7 0 32.4-14.6 28.1-31.7-4.5-17.8-12.8-34.1-23.9-48.1 80.5-28.6 123.9-93.7 123.9-176.2 17.7 0 32-14.3 32-32s-14.3-32-32-32L32 192z\"]\n};\nvar faHeadSideCough = {\n  prefix: 'fas',\n  iconName: 'head-side-cough',\n  icon: [512, 512, [], \"e061\", \"M96 512l64 0c53 0 96-43 96-96l0-80c0-8.8 7.2-16 16-16l1 0c26 0 47-21 47-47 0-11-3.9-21.6-10.9-30.1L273.3 200C271.4 197.6 270.1 194.7 269.7 191.7 254 83.3 160.7 0 48 0 40.4 0 32.9 .4 25.4 1.1 10.5 2.6 0 15.9 0 30.9L0 480c0 17.7 14.3 32 32 32l64 0zm16-320a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm63.1 237.2l-41.5-3.5c-12.2-1-21.6-11.2-21.6-23.4 0-10.8 7.3-20.2 17.8-22.8l40.4-10.1c19.2-4.8 37.8 9.7 37.8 29.5 0 17.8-15.2 31.8-32.9 30.3zM480 312a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm-40 24a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm-64 48a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm128 0a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM480 504a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm-40-72a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"]\n};\nvar faPlaneLock = {\n  prefix: 'fas',\n  iconName: 'plane-lock',\n  icon: [640, 512, [], \"e558\", \"M232 24c0-30.9 25.1-56 56-56s56 25.1 56 56l0 127.3 82.1 75.2C409.7 248.1 400 274.9 400 304l0 24.4c-7.3 6.6-13.6 14.2-18.7 22.7l-37.3-12.4 0 99.7 24 19.2 0 38.3c0 13.5 2.8 26.4 7.8 38.1L288 512 179.9 539c-10.1 2.5-19.9-5.1-19.9-15.5l0-19.8c0-4.9 2.2-9.5 6-12.5l66-52.8 0-99.7-162.9 54.3C58.7 396.4 48 388.7 48 377.8l0-43.7c0-9 3.8-17.5 10.4-23.6L232 151.3 232 24zM560 304.1c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 47.9 64 0 0-47.9zM416 400c0-20.9 13.4-38.7 32-45.3l0-50.6c0-44.2 35.8-80 80-80s80 35.8 80 80l0 50.6c18.6 6.6 32 24.4 32 45.3l0 96c0 26.5-21.5 48-48 48l-128 0c-26.5 0-48-21.5-48-48l0-96z\"]\n};\nvar faBatteryThreeQuarters = {\n  prefix: 'fas',\n  iconName: 'battery-three-quarters',\n  icon: [640, 512, [\"battery-4\"], \"f241\", \"M528 128c8.8 0 16 7.2 16 16l0 224c0 8.8-7.2 16-16 16l-416 0c-8.8 0-16-7.2-16-16l0-224c0-8.8 7.2-16 16-16l416 0zM112 64c-44.2 0-80 35.8-80 80l0 224c0 44.2 35.8 80 80 80l416 0c44.2 0 80-35.8 80-80l0-48c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80L112 64zm56 112c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24l224 0c13.3 0 24-10.7 24-24l0-112c0-13.3-10.7-24-24-24l-224 0z\"]\n};\nvar faBattery4 = faBatteryThreeQuarters;\nvar faFrancSign = {\n  prefix: 'fas',\n  iconName: 'franc-sign',\n  icon: [320, 512, [], \"e18f\", \"M80 32C62.3 32 48 46.3 48 64l0 256-24 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l24 0 0 80c0 17.7 14.3 32 32 32s32-14.3 32-32l0-80 88 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-88 0 0-64 144 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-144 0 0-96 176 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 32z\"]\n};\nvar faFilterCircleDollar = {\n  prefix: 'fas',\n  iconName: 'filter-circle-dollar',\n  icon: [576, 512, [\"funnel-dollar\"], \"f662\", \"M32 64C19.1 64 7.4 71.8 2.4 83.8S.2 109.5 9.4 118.6L192 301.3 192 416c0 8.5 3.4 16.6 9.4 22.6l64 64c2.5 2.5 5.3 4.5 8.3 6-21.2-30.9-33.6-68.3-33.6-108.6 0-99.4 75.5-181.1 172.3-191l90.4-90.4c9.2-9.2 11.9-22.9 6.9-34.9S492.9 64 480 64L32 64zM576 400a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zM416 320c0-8.8 7.2-16 16-16s16 7.2 16 16l0 8 16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-45.8 0c-5.6 0-10.2 4.6-10.2 10.2 0 4.9 3.5 9.1 8.3 10l45 8.2c20 3.6 34.6 21.1 34.6 41.5 0 23.3-18.9 42.2-42.2 42.2l-5.8 0 0 8c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-8-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l53.8 0c5.6 0 10.2-4.6 10.2-10.2 0-4.9-3.5-9.1-8.3-10l-45-8.2c-20-3.6-34.6-21.1-34.6-41.5 0-22.6 17.7-41 40-42.1l0-8.1z\"]\n};\nvar faFunnelDollar = faFilterCircleDollar;\nvar faCheese = {\n  prefix: 'fas',\n  iconName: 'cheese',\n  icon: [512, 512, [], \"f7ef\", \"M512 240.2l0 15.8-512 0c0-20 10-38.7 26.6-49.8L274.9 40.7c8.6-5.7 18.6-8.7 28.9-8.7 115 0 208.2 93.2 208.2 208.2zm0 63.8l0 112c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64l0-112 512 0z\"]\n};\nvar faCircleH = {\n  prefix: 'fas',\n  iconName: 'circle-h',\n  icon: [512, 512, [9405, \"hospital-symbol\"], \"f47e\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zm96-344l0 176c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-64-96 0 0 64c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-176c0-13.3 10.7-24 24-24s24 10.7 24 24l0 64 96 0 0-64c0-13.3 10.7-24 24-24s24 10.7 24 24z\"]\n};\nvar faHospitalSymbol = faCircleH;\nvar faSchool = {\n  prefix: 'fas',\n  iconName: 'school',\n  icon: [576, 512, [127979], \"f549\", \"M0 192c0-35.3 28.7-64 64-64l64 0 127.9-115.1c18.3-16.4 46-16.4 64.2 0L448 128 512 128c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 192zM224 376l0 88 128 0 0-88c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zm-112 8c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0zm16-144l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16zM496 384c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0zm16-144l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16zM288 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128z\"]\n};\nvar faDiceFive = {\n  prefix: 'fas',\n  iconName: 'dice-five',\n  icon: [448, 512, [9860], \"f523\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm64 96a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM96 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM224 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64-64a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32 160a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faTornado = {\n  prefix: 'fas',\n  iconName: 'tornado',\n  icon: [448, 512, [127786], \"f76f\", \"M0 32L0 45.6C0 62.7 1.7 79.6 5 96l352.8 0c3.2-6.9 7.5-13.3 13-18.8l38.6-38.6c4.2-4.2 6.6-10 6.6-16 0-12.5-10.1-22.6-22.6-22.6L32 0C14.3 0 0 14.3 0 32zM355.7 144l-336 0c12.4 29.7 30.2 56.8 52.7 80l339.6 0-47.2-62.9c-3.9-5.2-7-11-9.2-17.1zM242.6 334.7c8.2 4.8 15.8 10.7 22.5 17.3L445 352c2-9.8 3-19.9 3-30.1 0-17.1-2.9-34-8.6-49.9L136 272 242.6 334.7zM294.3 400c5.3 17 6.5 35.2 3.6 53l-5.9 35.7c-2 12.2 7.4 23.4 19.8 23.4 5.3 0 10.4-2.1 14.2-5.9l78.2-78.2c8.5-8.5 15.8-17.8 21.9-27.9l-131.8 0z\"]\n};\nvar faJetFighter = {\n  prefix: 'fas',\n  iconName: 'jet-fighter',\n  icon: [576, 512, [\"fighter-jet\"], \"f0fb\", \"M496.2 206.8c-10.7-4.5-22.2-6.8-33.8-6.8L362 200 248 48 296 48c13.3 0 24-10.7 24-24S309.3 0 296 0L152 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l8 0 0 152-54.4 0-52.8-66c-3-3.8-7.6-6-12.5-6L16 128c-8.8 0-16 7.2-16 16l0 88 40 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-40 0 0 88c0 8.8 7.2 16 16 16l24.3 0c4.9 0 9.5-2.2 12.5-6l52.8-66 54.4 0 0 152-8 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 114-152 100.4 0c11.6 0 23.1-2.3 33.8-6.8l65-27.1c8.9-3.7 14.8-12.5 14.8-22.2s-5.8-18.4-14.8-22.2l-65-27.1z\"]\n};\nvar faFighterJet = faJetFighter;\nvar faThumbsDown = {\n  prefix: 'fas',\n  iconName: 'thumbs-down',\n  icon: [512, 512, [128078, 61576], \"f165\", \"M384 32c26.5 0 48 21.5 48 48 0 6.3-1.3 12.2-3.4 17.7 20.4 5.5 35.4 24.1 35.4 46.3 0 9.1-2.6 17.6-7 24.9 22.2 4.2 39 23.7 39 47.1 0 19.7-11.9 36.6-28.9 44 17 7.4 28.9 24.3 28.9 44 0 26.5-21.5 48-48 48l-160 0 28.2 70.4c2.5 6.3 3.8 13.1 3.8 19.9l0 4.2c0 27.3-22.1 49.4-49.4 49.4-18.7 0-35.8-10.6-44.2-27.3L170.1 356.3c-6.7-13.3-10.1-28-10.1-42.9l0-186.6c0-19.4 8.9-37.8 24-50l12.2-9.7C224.6 44.4 259.8 32 296.1 32L384 32zM80 96c17.7 0 32 14.3 32 32l0 256c0 17.7-14.3 32-32 32l-48 0c-17.7 0-32-14.3-32-32L0 128c0-17.7 14.3-32 32-32l48 0z\"]\n};\nvar faBroom = {\n  prefix: 'fas',\n  iconName: 'broom',\n  icon: [576, 512, [129529], \"f51a\", \"M566.6 54.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192-34.7-34.7c-4.2-4.2-10-6.6-16-6.6-12.5 0-22.6 10.1-22.6 22.6l0 29.1 108.3 108.3 29.1 0c12.5 0 22.6-10.1 22.6-22.6 0-6-2.4-11.8-6.6-16l-34.7-34.7 192-192zM341.1 353.4L222.6 234.9c-42.7-3.7-85.2 11.7-115.8 42.3l-8 8c-22.3 22.3-34.8 52.5-34.8 84 0 6.8 7.1 11.2 13.2 8.2l51.1-25.5c5-2.5 9.5 4.1 5.4 7.9L7.3 473.4C2.7 477.6 0 483.6 0 489.9 0 502.1 9.9 512 22.1 512l173.3 0c38.8 0 75.9-15.4 103.4-42.8 30.6-30.6 45.9-73.1 42.3-115.8z\"]\n};\nvar faFileImport = {\n  prefix: 'fas',\n  iconName: 'file-import',\n  icon: [384, 512, [\"arrow-right-to-file\"], \"f56f\", \"M64 0C28.7 0 0 28.7 0 64l0 240 182.1 0-31-31c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l72 72c9.4 9.4 9.4 24.6 0 33.9l-72 72c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l31-31-182.1 0 0 96c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-277.5c0-17-6.7-33.3-18.7-45.3L258.7 18.7C246.7 6.7 230.5 0 213.5 0L64 0zM325.5 176L232 176c-13.3 0-24-10.7-24-24L208 58.5 325.5 176z\"]\n};\nvar faArrowRightToFile = faFileImport;\nvar faUtensils = {\n  prefix: 'fas',\n  iconName: 'utensils',\n  icon: [512, 512, [127860, 61685, \"cutlery\"], \"f2e7\", \"M63.9 14.4C63.1 6.2 56.2 0 48 0s-15.1 6.2-16 14.3L17.9 149.7c-1.3 6-1.9 12.1-1.9 18.2 0 45.9 35.1 83.6 80 87.7L96 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-224.4c44.9-4.1 80-41.8 80-87.7 0-6.1-.6-12.2-1.9-18.2L223.9 14.3C223.1 6.2 216.2 0 208 0s-15.1 6.2-15.9 14.4L178.5 149.9c-.6 5.7-5.4 10.1-11.1 10.1-5.8 0-10.6-4.4-11.2-10.2L143.9 14.6C143.2 6.3 136.3 0 128 0s-15.2 6.3-15.9 14.6L99.8 149.8c-.5 5.8-5.4 10.2-11.2 10.2-5.8 0-10.6-4.4-11.1-10.1L63.9 14.4zM448 0C432 0 320 32 320 176l0 112c0 35.3 28.7 64 64 64l32 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-448c0-17.7-14.3-32-32-32z\"]\n};\nvar faCutlery = faUtensils;\nvar faIdBadge = {\n  prefix: 'fas',\n  iconName: 'id-badge',\n  icon: [384, 512, [], \"f2c1\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L64 0zm96 352l64 0c44.2 0 80 35.8 80 80 0 8.8-7.2 16-16 16L96 448c-8.8 0-16-7.2-16-16 0-44.2 35.8-80 80-80zm-24-96a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zM152 64l80 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nvar faSpider = {\n  prefix: 'fas',\n  iconName: 'spider',\n  icon: [512, 512, [128375], \"f717\", \"M369.3-31c11.9-3.5 24.4 2.7 29 13.9l.8 2.3 40 136c2.5 8.4 .1 17.5-6.1 23.7l-64.1 64.1 76.4-20.8 19.9-59.8 .9-2.3c5-11.1 17.7-16.8 29.5-12.9 11.8 3.9 18.5 16.1 15.8 28l-.7 2.4-24 72c-2.5 7.6-8.7 13.4-16.5 15.6l-91.1 24.8 91.1 24.8c7.7 2.1 13.9 8 16.5 15.6l24 72 .7 2.4c2.7 11.9-4.1 24.1-15.8 28-11.8 3.9-24.5-1.8-29.5-12.9l-.9-2.3-19.9-59.8-76.4-20.8 64.1 64.1c6.1 6.1 8.5 15.1 6.2 23.4l-40 144-.8 2.3c-4.4 11.3-16.8 17.7-28.8 14.4-12-3.3-19.3-15.2-17.2-27.2l.5-2.4 36.2-130.5-37.2-37.2C351 406 308.4 448 256 448s-95-42-96-94.1l-37 37 36 122.3 .6 2.4c2.2 11.9-4.9 23.9-16.8 27.4-11.9 3.5-24.4-2.7-29-13.9l-.8-2.3-40-136c-2.5-8.4-.1-17.5 6.1-23.8l64.1-64.1-76.4 20.8-19.9 59.8-.9 2.3c-5 11.1-17.7 16.8-29.5 12.9s-18.5-16.1-15.8-28l.7-2.4 24-72c2.5-7.6 8.7-13.4 16.5-15.6l91.1-24.8-91.1-24.8c-7.7-2.1-13.9-8-16.5-15.6l-24-72-.7-2.4c-2.7-11.9 4.1-24.1 15.8-28s24.5 1.8 29.5 12.9l.9 2.3 19.9 59.8 76.4 20.8-64.1-64.1c-6.2-6.2-8.5-15.3-6.1-23.7l40-136 .8-2.3c4.6-11.3 17.1-17.4 29-13.9 11.9 3.5 19 15.5 16.8 27.4l-.6 2.4-36 122.3 53 53c1-43.3 36.4-78.1 79.9-78.1s78.9 34.8 79.9 78.2l53.1-53.1-36-122.3-.6-2.4c-2.2-12 4.9-23.9 16.8-27.4z\"]\n};\nvar faMobileRetro = {\n  prefix: 'fas',\n  iconName: 'mobile-retro',\n  icon: [384, 512, [], \"e527\", \"M16 64C16 28.7 44.7 0 80 0L304 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L80 512c-35.3 0-64-28.7-64-64L16 64zm80 96l0 64c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-128 0c-17.7 0-32 14.3-32 32zm8 192a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm24 72c0-13.3-10.7-24-24-24s-24 10.7-24 24 10.7 24 24 24 24-10.7 24-24zm64-72a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm24 72c0-13.3-10.7-24-24-24s-24 10.7-24 24 10.7 24 24 24 24-10.7 24-24zm64-72a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm24 72c0-13.3-10.7-24-24-24s-24 10.7-24 24 10.7 24 24 24 24-10.7 24-24zM168 40c-13.3 0-24 10.7-24 24s10.7 24 24 24l48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0z\"]\n};\nvar faSignsPost = {\n  prefix: 'fas',\n  iconName: 'signs-post',\n  icon: [512, 512, [\"map-signs\"], \"f277\", \"M256.4 0c-17.7 0-32 14.3-32 32l0 32-160 0c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l160 0 0 64-153.4 0c-4.2 0-8.3 1.7-11.3 4.7l-48 48c-6.2 6.2-6.2 16.4 0 22.6l48 48c3 3 7.1 4.7 11.3 4.7l153.4 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 160 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-160 0 0-64 153.4 0c4.2 0 8.3-1.7 11.3-4.7l48-48c6.2-6.2 6.2-16.4 0-22.6l-48-48c-3-3-7.1-4.7-11.3-4.7l-153.4 0 0-32c0-17.7-14.3-32-32-32z\"]\n};\nvar faMapSigns = faSignsPost;\nvar faGroupArrowsRotate = {\n  prefix: 'fas',\n  iconName: 'group-arrows-rotate',\n  icon: [512, 512, [], \"e4f6\", \"M37.6 122.3c-11.5 18.7-20.6 39-27 60.5-5 16.9 4.6 34.8 21.5 39.8s34.8-4.6 39.8-21.5c18.4-61.9 67.3-110.8 129.2-129.2 16.9-5 26.6-22.9 21.5-39.8S199.8 5.6 182.9 10.6C161.4 17 141.1 26.1 122.3 37.6 112.3 15.4 89.9 0 64 0 28.7 0 0 28.7 0 64 0 89.9 15.4 112.3 37.6 122.3zm436.7 0c22.2-10 37.6-32.4 37.6-58.3 0-35.3-28.7-64-64-64-25.9 0-48.3 15.4-58.3 37.6-18.7-11.5-39-20.6-60.5-27-16.9-5-34.8 4.6-39.8 21.5s4.6 34.8 21.5 39.8c61.9 18.4 110.8 67.3 129.2 129.2 5 16.9 22.9 26.6 39.8 21.5s26.6-22.9 21.5-39.8c-6.4-21.5-15.5-41.8-27-60.5zM512 448c0-25.9-15.4-48.3-37.6-58.3 11.5-18.7 20.6-39 27-60.5 5-16.9-4.6-34.8-21.5-39.8s-34.8 4.6-39.8 21.5c-18.4 61.9-67.3 110.8-129.2 129.2-16.9 5-26.6 22.9-21.5 39.8s22.9 26.6 39.8 21.5c21.5-6.4 41.8-15.5 60.5-27 10 22.2 32.4 37.6 58.3 37.6 35.3 0 64-28.7 64-64zM37.6 389.7c-22.2 10-37.6 32.4-37.6 58.3 0 35.3 28.7 64 64 64 25.9 0 48.3-15.4 58.3-37.6 18.7 11.5 39 20.6 60.5 27 16.9 5 34.8-4.6 39.8-21.5s-4.6-34.8-21.5-39.8c-61.9-18.4-110.8-67.3-129.2-129.2-5-16.9-22.9-26.6-39.8-21.5S5.6 312.2 10.6 329.1c6.4 21.5 15.5 41.8 27 60.5zM256 192c15.6 0 30 5.6 41.1 14.9l-15.3 15.3c-6.6 6.6-1.9 17.8 7.4 17.8l60.5 0c5.7 0 10.4-4.7 10.4-10.4l0-60.5c0-9.3-11.2-13.9-17.8-7.4l-11.2 11.2c-19.8-17.9-46.2-28.9-75.1-28.9-43.6 0-81.3 24.9-99.8 61.1-6 11.8-1.4 26.3 10.4 32.3s26.3 1.4 32.3-10.4c10.6-20.8 32.2-34.9 57-34.9zm58.6 93.1c-10.6 20.8-32.2 34.9-57 34.9-15.7 0-30-5.6-41.1-14.9l15.3-15.3c6.6-6.6 1.9-17.8-7.4-17.8L164 272c-5.7 0-10.4 4.7-10.4 10.4l0 60.5c0 9.3 11.2 13.9 17.8 7.4l11.2-11.2c19.8 17.9 46.2 28.9 75.1 28.9 43.6 0 81.3-24.9 99.8-61.1 6-11.8 1.4-26.3-10.4-32.3s-26.3-1.4-32.3 10.4z\"]\n};\nvar faArrowsSplitUpAndLeft = {\n  prefix: 'fas',\n  iconName: 'arrows-split-up-and-left',\n  icon: [512, 512, [], \"e4bc\", \"M342.6-22.6c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l41.4-41.4 0 195.9c-18.8-10.9-40.7-17.1-64-17.1l-114.7 0 41.4-41.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 320 224 320c35.3 0 64 28.7 64 64 0 70.7 57.3 128 128 128l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0c-35.3 0-64-28.7-64-64l0-306.7 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96z\"]\n};\nvar faFillDrip = {\n  prefix: 'fas',\n  iconName: 'fill-drip',\n  icon: [576, 512, [], \"f576\", \"M309.7 71.6l-64.4 64.4 33.4 33.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-33.4-33.4-96.4 96.4c-2.9 2.9-5.1 6.5-6.3 10.3l321.5 0 53.7-53.7c4.9-4.9 7.6-11.5 7.6-18.3s-2.7-13.5-7.6-18.3L346.3 71.6C341.5 66.7 334.9 64 328 64s-13.5 2.7-18.3 7.6zM58.3 232.4l96.4-96.4-49.4-49.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L200 90.7 264.4 26.3C281.3 9.5 304.1 0 328 0s46.7 9.5 63.6 26.3L517.7 152.4C534.5 169.3 544 192.1 544 216s-9.5 46.7-26.3 63.6L311.6 485.7C294.7 502.5 271.9 512 248 512s-46.7-9.5-63.6-26.3L58.3 359.6C41.5 342.7 32 319.9 32 296s9.5-46.7 26.3-63.6zM512 544c-35.3 0-64-28.7-64-64 0-25.2 32.6-79.6 51.2-108.7 6-9.4 19.5-9.4 25.5 0 18.7 29.1 51.2 83.5 51.2 108.7 0 35.3-28.7 64-64 64z\"]\n};\nvar faShieldHeart = {\n  prefix: 'fas',\n  iconName: 'shield-heart',\n  icon: [512, 512, [], \"e574\", \"M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2 .5 99.2 41.3 280.7 213.6 363.2 16.7 8 36.1 8 52.8 0 172.4-82.5 213.2-264 213.6-363.2 .1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM249.6 183.5l6.4 8.5 6.4-8.5c11.1-14.8 28.5-23.5 46.9-23.5 32.4 0 58.7 26.3 58.7 58.7l0 5.3c0 49.1-65.8 98.1-96.5 118.3-9.5 6.2-21.5 6.2-30.9 0-30.7-20.2-96.5-69.3-96.5-118.3l0-5.3c0-32.4 26.3-58.7 58.7-58.7 18.5 0 35.9 8.7 46.9 23.5z\"]\n};\nvar faPersonSkiingNordic = {\n  prefix: 'fas',\n  iconName: 'person-skiing-nordic',\n  icon: [576, 512, [\"skiing-nordic\"], \"f7ca\", \"M424.8 16a56 56 0 1 1 0 112 56 56 0 1 1 0-112zm99.8 193.7c7.6 15.2 1.9 33.6-12.6 42l0 180.3-32 0 0-164.2-10.1 5c-27.4 13.7-60.7 6.1-79.4-18.2l-19.6-25.5-39.5 68.8 24.8 12.4c29.5 14.7 42.9 49.5 31.1 80.2l-28.2 73.4 149.4 0c7.9 0 15.6-2.3 22.2-6.7l7.9-5.3c11-7.4 25.9-4.4 33.3 6.7s4.4 25.9-6.7 33.3l-7.9 5.3C543 506.9 526 512 508.6 512l-189.1 0c-.5 0-1 0-1.5 0L24 512c-13.3 0-24-10.7-24-24s10.7-24 24-24l88 0c0-8.2 3.1-16.4 9.4-22.6l74.1-74.1 10.2-35.9c11.3 18.3 27.7 33.8 48.4 44.2l4.8 2.4-1.9 6.8c-3 10.5-8.6 20-16.3 27.7l-51.5 51.5 101.3 0 37.1-96.4-55.6-27.8C230.4 319 215.3 267 239.3 227.1l37.7-62.7-27.7-7.7c-9-2.5-18.1 3.2-20 12.3l-5.9 29.3c-3.1 15.6-17.1 26.3-32.5 25.7l-130 208-37.7 0 140.6-225c-3.4-6.3-4.6-13.8-3.1-21.3l5.9-29.3c9.1-45.6 55.1-73.8 99.9-61.4l32.5 9c46.7 13 88 40.8 117.6 79.3l24.9 32.3 40.4-20.2c15.8-7.9 35-1.5 42.9 14.3z\"]\n};\nvar faSkiingNordic = faPersonSkiingNordic;\nvar faSquareCheck = {\n  prefix: 'fas',\n  iconName: 'square-check',\n  icon: [448, 512, [9745, 9989, 61510, \"check-square\"], \"f14a\", \"M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM342 145.7c-10.7-7.8-25.7-5.4-33.5 5.3L189.1 315.2 137 263.1c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l72 72c5 5 11.9 7.5 18.8 7s13.4-4.1 17.5-9.8L347.3 179.2c7.8-10.7 5.4-25.7-5.3-33.5z\"]\n};\nvar faCheckSquare = faSquareCheck;\nvar faBath = {\n  prefix: 'fas',\n  iconName: 'bath',\n  icon: [512, 512, [128705, \"bathtub\"], \"f2cd\", \"M96 77.3c0-7.3 5.9-13.3 13.3-13.3 3.5 0 6.9 1.4 9.4 3.9l14.9 14.9c-3.6 9.1-5.5 18.9-5.5 29.2 0 19.9 7.2 38 19.2 52-5.3 9.2-4 21.1 3.8 29 9.4 9.4 24.6 9.4 33.9 0L289 89c9.4-9.4 9.4-24.6 0-33.9-7.8-7.9-19.8-9.1-29-3.8-14-12-32.1-19.2-52-19.2-10.3 0-20.2 2-29.2 5.5L163.9 22.6C149.4 8.1 129.7 0 109.3 0 66.6 0 32 34.6 32 77.3L32 256c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 48c0 28.4 12.4 54 32 71.6L64 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-16 256 0 0 16c0 17.7 14.3 32 32 32s32-14.3 32-32l0-40.4c19.6-17.6 32-43.1 32-71.6l0-48c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 256 96 77.3z\"]\n};\nvar faBathtub = faBath;\nvar faChessBishop = {\n  prefix: 'fas',\n  iconName: 'chess-bishop',\n  icon: [320, 512, [9821], \"f43a\", \"M64 384L48.3 368.3C17.4 337.4 0 295.4 0 251.7 0 213.1 13.5 175.8 38.2 146.1L106.7 64 96 64C78.3 64 64 49.7 64 32S78.3 0 96 0L224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-10.7 0 47.6 57.1-85.9 85.9c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l82.3-82.3c18.7 27.3 28.7 59.7 28.7 93 0 43.7-17.4 85.7-48.3 116.6L256 384 312.2 454.3c5 6.3 7.8 14.1 7.8 22.2 0 19.6-15.9 35.5-35.5 35.5L35.5 512c-19.6 0-35.5-15.9-35.5-35.5 0-8.1 2.7-15.9 7.8-22.2L64 384z\"]\n};\nvar faPrescriptionBottleMedical = {\n  prefix: 'fas',\n  iconName: 'prescription-bottle-medical',\n  icon: [384, 512, [\"prescription-bottle-alt\"], \"f486\", \"M0 32C0 14.3 14.3 0 32 0L352 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64L0 32zM32 144l320 0 0 304c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-304zM160 248l0 40-40 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l40 0 0 40c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-40 40 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-40 0 0-40c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16z\"]\n};\nvar faPrescriptionBottleAlt = faPrescriptionBottleMedical;\nvar faDrawPolygon = {\n  prefix: 'fas',\n  iconName: 'draw-polygon',\n  icon: [512, 512, [58055, \"vector-polygon\"], \"f5ee\", \"M64 0c23.7 0 44.4 12.9 55.4 32l273.1 0c11.1-19.1 31.7-32 55.4-32 35.3 0 64 28.7 64 64 0 34-26.5 61.8-60 63.9l-2.1 2.9-71.5 99.1c3.6 8 5.6 16.9 5.6 26.2s-2 18.2-5.6 26.2l2.2 3.1 69.3 96 2.1 2.9c33.5 2.1 60 29.9 60 63.9 0 35.3-28.7 64-64 64-23.7 0-44.4-12.9-55.4-32l-273.1 0c-11.1 19.1-31.7 32-55.4 32-35.3 0-64-28.7-64-64 0-23.7 12.9-44.4 32-55.4l0-273.1C12.9 108.4 0 87.7 0 64 0 28.7 28.7 0 64 0zM394.2 413.4l-65.5-90.6-2.2-3.1c-2.1 .2-4.3 .3-6.5 .3-35.3 0-64-28.7-64-64s28.7-64 64-64c2.2 0 4.4 .1 6.5 .3l67.7-93.7c-.6-.9-1.1-1.7-1.6-2.6L119.4 96c-5.6 9.7-13.7 17.8-23.4 23.4l0 273.1c9.7 5.6 17.8 13.7 23.4 23.4l273.1 0c.5-.9 1.1-1.8 1.6-2.6z\"]\n};\nvar faVectorPolygon = faDrawPolygon;\nvar faICursor = {\n  prefix: 'fas',\n  iconName: 'i-cursor',\n  icon: [256, 512, [], \"f246\", \"M.1 29.3C-1.4 47 11.7 62.4 29.3 63.9l8 .7C70.5 67.3 96 95 96 128.3l0 95.7-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 95.7c0 33.3-25.5 61-58.7 63.8l-8 .7C11.7 449.6-1.4 465 .1 482.7S17 513.4 34.7 511.9l8-.7c34.1-2.8 64.2-18.9 85.4-42.9 21.2 24 51.2 40 85.4 42.9l8 .7c17.6 1.5 33.1-11.6 34.5-29.2s-11.6-33.1-29.2-34.5l-8-.7C185.5 444.7 160 417 160 383.7l0-95.7 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-95.7c0-33.3 25.5-61 58.7-63.8l8-.7c17.6-1.5 30.7-16.9 29.2-34.5S239-1.4 221.3 .1l-8 .7c-34.1 2.8-64.2 18.9-85.4 42.9-21.2-24-51.2-40-85.4-42.9l-8-.7C17-1.4 1.6 11.7 .1 29.3z\"]\n};\nvar faHeartCirclePlus = {\n  prefix: 'fas',\n  iconName: 'heart-circle-plus',\n  icon: [576, 512, [], \"e500\", \"M241 87.1l15 20.7 15-20.7C296 52.5 336.2 32 378.9 32 452.4 32 512 91.6 512 165.1l0 2.6c0 17.6-3.4 35.6-9.5 53.7-21.8-8.6-45.6-13.4-70.5-13.4-106 0-192 86-192 192 0 28.5 6.2 55.6 17.4 80-.5 0-.9 0-1.4 0-15.5 0-30.8-4.6-43.1-14.1-73-55.7-212.9-186-212.9-298.2l0-2.6C0 91.6 59.6 32 133.1 32 175.8 32 216 52.5 241 87.1zM432 256a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm16 80c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16s16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0 0-48z\"]\n};\nvar faShieldDog = {\n  prefix: 'fas',\n  iconName: 'shield-dog',\n  icon: [512, 512, [], \"e573\", \"M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2 .5 99.2 41.3 280.7 213.6 363.2 16.7 8 36.1 8 52.8 0 172.4-82.5 213.2-264 213.6-363.2 .1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM160.9 286.2c4.8 1.2 9.9 1.8 15.1 1.8 35.3 0 64-28.7 64-64l0-64 44.2 0c12.1 0 23.2 6.8 28.6 17.7l7.2 14.3 64 0c8.8 0 16 7.2 16 16l0 32c0 44.2-35.8 80-80 80l-48 0 0 50.7c0 7.3-5.9 13.3-13.3 13.3-1.8 0-3.6-.4-5.2-1.1l-98.7-42.3c-6.6-2.8-10.8-9.3-10.8-16.4 0-2.8 .6-5.5 1.9-8l15-30zM160 160l48 0 0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-48c0-8.8 7.2-16 16-16zm128 48a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"]\n};\nvar faGreaterThanEqual = {\n  prefix: 'fas',\n  iconName: 'greater-than-equal',\n  icon: [448, 512, [], \"f532\", \"M21.9 94.4C5.1 88.8-3.9 70.6 1.7 53.9S25.4 28.1 42.1 33.6l384 128C439.2 166 448 178.2 448 192s-8.8 26-21.9 30.4l-384 128c-16.8 5.6-34.9-3.5-40.5-20.2s3.5-34.9 20.2-40.5L314.8 192 21.9 94.4zM416 416c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0z\"]\n};\nvar faEnvelopeOpen = {\n  prefix: 'fas',\n  iconName: 'envelope-open',\n  icon: [512, 512, [62135], \"f2b6\", \"M64.4 175.8L256 33.9 447.6 175.8 289.5 293c-9.7 7.2-21.4 11-33.5 11s-23.8-3.9-33.5-11L64.4 175.8zM256-32c-12.1 0-23.8 3.9-33.5 11L25.9 124.7C9.6 136.8 0 155.8 0 176.1L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-239.9c0-20.3-9.6-39.4-25.9-51.4L289.5-21c-9.7-7.2-21.4-11-33.5-11z\"]\n};\nvar faMound = {\n  prefix: 'fas',\n  iconName: 'mound',\n  icon: [512, 512, [], \"e52d\", \"M112.4 179.2C142 127.7 196.8 96 256.2 96s114.2 31.7 143.9 83.2L508.7 368c12.3 21.3-3.1 48-27.7 48L31.5 416c-24.6 0-40-26.6-27.7-48L112.4 179.2z\"]\n};\nvar faVoicemail = {\n  prefix: 'fas',\n  iconName: 'voicemail',\n  icon: [640, 512, [], \"f897\", \"M144 160a80 80 0 1 1 0 160 80 80 0 1 1 0-160zM263.8 320c15.3-22.9 24.2-50.4 24.2-80 0-79.5-64.5-144-144-144S0 160.5 0 240 64.5 384 144 384l352 0c79.5 0 144-64.5 144-144S575.5 96 496 96 352 160.5 352 240c0 29.6 8.9 57.1 24.2 80l-112.5 0zM496 160a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"]\n};\nvar faVest = {\n  prefix: 'fas',\n  iconName: 'vest',\n  icon: [448, 512, [], \"e085\", \"M200 464l0-170.1c0-3.9-.5-7.8-1.4-11.6L144.4 65.4C162.1 77.2 188.2 88 224 88s61.9-10.8 79.6-22.6L249.4 282.3c-1 3.8-1.4 7.7-1.4 11.6L248 464c0 26.5 21.5 48 48 48l104 0c26.5 0 48-21.5 48-48l0-193.5c0-9.5-2.8-18.7-8.1-26.6l-47.9-71.8c-5.3-7.9-8.1-17.1-8.1-26.6L384 48c0-26.5-21.5-48-48-48l-3.5 0c-.3 0-.6 0-1 0-.6 0-1.2 0-1.8 0-18.8 0-34.1 9.7-44.1 18.8-9.3 8.4-28.5 21.2-61.7 21.2s-52.4-12.8-61.7-21.2c-10-9.1-25.3-18.8-44.1-18.8-.6 0-1.2 0-1.8 0-.3 0-.6 0-1 0L112 0C85.5 0 64 21.5 64 48l0 97.5c0 9.5-2.8 18.7-8.1 26.6L8.1 243.9C2.8 251.8 0 261.1 0 270.5L0 464c0 26.5 21.5 48 48 48l104 0c26.5 0 48-21.5 48-48z\"]\n};\nvar faAudioDescription = {\n  prefix: 'fas',\n  iconName: 'audio-description',\n  icon: [512, 512, [], \"f29e\", \"M0 128C0 92.7 28.7 64 64 64l384 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128zm96 96l0 104c0 13.3 10.7 24 24 24s24-10.7 24-24l0-24 48 0 0 24c0 13.3 10.7 24 24 24s24-10.7 24-24l0-104c0-35.3-28.7-64-64-64l-16 0c-35.3 0-64 28.7-64 64zm48 32l0-32c0-8.8 7.2-16 16-16l16 0c8.8 0 16 7.2 16 16l0 32-48 0zm152-96c-13.3 0-24 10.7-24 24l0 144c0 13.3 10.7 24 24 24l48 0c39.8 0 72-32.2 72-72l0-48c0-39.8-32.2-72-72-72l-48 0zm48 144l-24 0 0-96 24 0c13.3 0 24 10.7 24 24l0 48c0 13.3-10.7 24-24 24z\"]\n};\nvar faW = {\n  prefix: 'fas',\n  iconName: 'w',\n  icon: [576, 512, [119], \"57\", \"M20.8 34c16.5-6.2 35 2.2 41.2 18.7L172.2 346.7 257.3 55c4-13.7 16.5-23 30.7-23s26.7 9.4 30.7 23L403.8 346.7 514 52.8c6.2-16.5 24.6-24.9 41.2-18.7S580.2 58.7 574 75.2l-144 384c-4.8 12.9-17.4 21.3-31.2 20.7s-25.7-9.8-29.5-23L288 178.3 206.7 457c-3.9 13.2-15.8 22.5-29.5 23s-26.3-7.8-31.2-20.7L2 75.2C-4.2 58.7 4.2 40.2 20.8 34z\"]\n};\nvar faEyeDropper = {\n  prefix: 'fas',\n  iconName: 'eye-dropper',\n  icon: [512, 512, [\"eye-dropper-empty\", \"eyedropper\"], \"f1fb\", \"M341.6 29.2l-101.6 101.6-9.4-9.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-9.4-9.4 101.6-101.6c39-39 39-102.2 0-141.1s-102.2-39-141.1 0zM55.4 323.3c-15 15-23.4 35.4-23.4 56.6l0 42.4-26.6 39.9c-8.5 12.7-6.8 29.6 4 40.4s27.7 12.5 40.4 4l39.9-26.6 42.4 0c21.2 0 41.6-8.4 56.6-23.4l109.4-109.4-45.3-45.3-109.4 109.4c-3 3-7.1 4.7-11.3 4.7l-36.1 0 0-36.1c0-4.2 1.7-8.3 4.7-11.3l109.4-109.4-45.3-45.3-109.4 109.4z\"]\n};\nvar faEyeDropperEmpty = faEyeDropper;\nvar faEyedropper = faEyeDropper;\nvar faCircleXmark = {\n  prefix: 'fas',\n  iconName: 'circle-xmark',\n  icon: [512, 512, [61532, \"times-circle\", \"xmark-circle\"], \"f057\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM167 167c9.4-9.4 24.6-9.4 33.9 0l55 55 55-55c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-55 55 55 55c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-55-55-55 55c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l55-55-55-55c-9.4-9.4-9.4-24.6 0-33.9z\"]\n};\nvar faTimesCircle = faCircleXmark;\nvar faXmarkCircle = faCircleXmark;\nvar faTrailer = {\n  prefix: 'fas',\n  iconName: 'trailer',\n  icon: [640, 512, [], \"e041\", \"M32 96c0-35.3 28.7-64 64-64l384 0c35.3 0 64 28.7 64 64l0 256 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-296.4 0c.2 2.6 .4 5.3 .4 8 0 48.6-39.4 88-88 88s-88-39.4-88-88c0-2.7 .1-5.4 .4-8L96 416c-35.3 0-64-28.7-64-64L32 96zm408 16c-13.3 0-24 10.7-24 24l0 160c0 13.3 10.7 24 24 24s24-10.7 24-24l0-160c0-13.3-10.7-24-24-24zM112 136l0 160c0 13.3 10.7 24 24 24s24-10.7 24-24l0-160c0-13.3-10.7-24-24-24s-24 10.7-24 24zm176-24c-13.3 0-24 10.7-24 24l0 160c0 13.3 10.7 24 24 24s24-10.7 24-24l0-160c0-13.3-10.7-24-24-24zM264 424a40 40 0 1 0 -80 0 40 40 0 1 0 80 0z\"]\n};\nvar faTurkishLiraSign = {\n  prefix: 'fas',\n  iconName: 'turkish-lira-sign',\n  icon: [448, 512, [\"try\", \"turkish-lira\"], \"e2bb\", \"M160 32c17.7 0 32 14.3 32 32l0 43.6 121.4-34.7c12.7-3.6 26 3.7 29.7 16.5s-3.7 26-16.5 29.7l-134.6 38.5 0 46.1 121.4-34.7c12.7-3.6 26 3.7 29.7 16.5s-3.7 26-16.5 29.7l-134.6 38.5 0 162.5 72 0c53 0 96-43 96-96 0-17.7 14.3-32 32-32s32 14.3 32 32c0 88.4-71.6 160-160 160l-104 0c-17.7 0-32-14.3-32-32l0-176.2-25.4 7.3c-12.7 3.6-26-3.7-29.7-16.5s3.7-26 16.5-29.7l38.6-11 0-46.1-25.4 7.3c-12.7 3.6-26-3.7-29.7-16.5s3.7-26 16.5-29.7l38.6-11 0-61.9c0-17.7 14.3-32 32-32z\"]\n};\nvar faTry = faTurkishLiraSign;\nvar faTurkishLira = faTurkishLiraSign;\nvar faVolcano = {\n  prefix: 'fas',\n  iconName: 'volcano',\n  icon: [512, 512, [127755], \"f770\", \"M160 144c-35.3 0-64-28.7-64-64s28.7-64 64-64c15.7 0 30 5.6 41.2 15 11.2-18.6 31.6-31 54.8-31s43.6 12.4 54.8 31c11.1-9.4 25.5-15 41.2-15 35.3 0 64 28.7 64 64s-28.7 64-64 64c-14.7 0-28.3-5-39.1-13.3l-32 48C275.3 187 266 192 256 192s-19.3-5-24.9-13.3l-32-48C188.3 139 174.7 144 160 144zM144 352l48.4-24.2c10.2-5.1 21.6-7.8 33-7.8 19.6 0 38.4 7.8 52.2 21.6l32.5 32.5c6.3 6.3 14.9 9.9 23.8 9.9 11.3 0 21.8-5.6 28-15l9.7-14.6-59-66.3c-9.1-10.2-22.2-16.1-35.9-16.1l-41.8 0c-13.7 0-26.8 5.9-35.9 16.1l-59.9 67.4 4.7-3.5zm19.4-95.8c18.2-20.5 44.3-32.2 71.8-32.2l41.8 0c27.4 0 53.5 11.7 71.8 32.2l150.2 169c8.5 9.5 13.2 21.9 13.2 34.7 0 28.8-23.4 52.2-52.2 52.2L52.2 512C23.4 512 0 488.6 0 459.8 0 447.1 4.7 434.7 13.2 425.2l150.2-169z\"]\n};\nvar faWandSparkles = {\n  prefix: 'fas',\n  iconName: 'wand-sparkles',\n  icon: [512, 512, [], \"f72b\", \"M464 6.1c9.5-8.5 24-8.1 33 .9l8 8c9 9 9.4 23.5 .9 33l-85.8 95.9c-2.6 2.9-4.1 6.7-4.1 10.7l0 21.4c0 8.8-7.2 16-16 16l-15.8 0c-4.6 0-8.9 1.9-11.9 5.3L100.7 500.9c-6.3 7.1-15.3 11.1-24.8 11.1-8.8 0-17.3-3.5-23.5-9.8L9.7 459.7c-6.2-6.2-9.7-14.7-9.7-23.5 0-9.5 4-18.5 11.1-24.8l111.6-99.8c3.4-3 5.3-7.4 5.3-11.9l0-27.6c0-8.8 7.2-16 16-16l34.6 0c3.9 0 7.7-1.5 10.7-4.1L464 6.1zM432 288c3.6 0 6.7 2.4 7.7 5.8l14.8 51.7 51.7 14.8c3.4 1 5.8 4.1 5.8 7.7s-2.4 6.7-5.8 7.7l-51.7 14.8-14.8 51.7c-1 3.4-4.1 5.8-7.7 5.8s-6.7-2.4-7.7-5.8l-14.8-51.7-51.7-14.8c-3.4-1-5.8-4.1-5.8-7.7s2.4-6.7 5.8-7.7l51.7-14.8 14.8-51.7c1-3.4 4.1-5.8 7.7-5.8zM87.7 69.8l14.8 51.7 51.7 14.8c3.4 1 5.8 4.1 5.8 7.7s-2.4 6.7-5.8 7.7l-51.7 14.8-14.8 51.7c-1 3.4-4.1 5.8-7.7 5.8s-6.7-2.4-7.7-5.8L57.5 166.5 5.8 151.7c-3.4-1-5.8-4.1-5.8-7.7s2.4-6.7 5.8-7.7l51.7-14.8 14.8-51.7c1-3.4 4.1-5.8 7.7-5.8s6.7 2.4 7.7 5.8zM208 0c3.7 0 6.9 2.5 7.8 6.1l6.8 27.3 27.3 6.8c3.6 .9 6.1 4.1 6.1 7.8s-2.5 6.9-6.1 7.8l-27.3 6.8-6.8 27.3c-.9 3.6-4.1 6.1-7.8 6.1s-6.9-2.5-7.8-6.1l-6.8-27.3-27.3-6.8c-3.6-.9-6.1-4.1-6.1-7.8s2.5-6.9 6.1-7.8l27.3-6.8 6.8-27.3c.9-3.6 4.1-6.1 7.8-6.1z\"]\n};\nvar faMicrophone = {\n  prefix: 'fas',\n  iconName: 'microphone',\n  icon: [384, 512, [], \"f130\", \"M192 0C139 0 96 43 96 96l0 128c0 53 43 96 96 96s96-43 96-96l0-128c0-53-43-96-96-96zM48 184c0-13.3-10.7-24-24-24S0 170.7 0 184l0 40c0 97.9 73.3 178.7 168 190.5l0 49.5-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-49.5c94.7-11.8 168-92.6 168-190.5l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 79.5-64.5 144-144 144S48 303.5 48 224l0-40z\"]\n};\nvar faCrown = {\n  prefix: 'fas',\n  iconName: 'crown',\n  icon: [576, 512, [128081], \"f521\", \"M313 87.2c9.2-7.3 15-18.6 15-31.2 0-22.1-17.9-40-40-40s-40 17.9-40 40c0 12.6 5.9 23.9 15 31.2L194.6 194.8c-10 15.7-31.3 19.6-46.2 8.4L88.9 158.7c4.5-6.4 7.1-14.3 7.1-22.7 0-22.1-17.9-40-40-40s-40 17.9-40 40c0 21.8 17.5 39.6 39.2 40L87.8 393.5c4.7 31.3 31.6 54.5 63.3 54.5l273.8 0c31.7 0 58.6-23.2 63.3-54.5L520.8 176c21.7-.4 39.2-18.2 39.2-40 0-22.1-17.9-40-40-40s-40 17.9-40 40c0 8.4 2.6 16.3 7.1 22.7l-59.4 44.6c-14.9 11.2-36.2 7.3-46.2-8.4L313 87.2z\"]\n};\nvar faTentArrowTurnLeft = {\n  prefix: 'fas',\n  iconName: 'tent-arrow-turn-left',\n  icon: [512, 512, [], \"e580\", \"M-.5 113l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-31-31 350.1 0c22.1 0 40 17.9 40 40l0 24c0 13.3 10.7 24 24 24s24-10.7 24-24l0-24c0-48.6-39.4-88-88-88l-350.1 0 31-31c9.4-9.4 9.4-24.6 0-33.9S80.9-2.3 71.5 7L-.5 79c-9.4 9.4-9.4 24.6 0 33.9zM60.3 292.6L37.1 476c-2.4 19.1 12.5 36 31.7 36l154.5 0c17.7 0 32-14.3 32-32l0-117.4c0-5.9 4.7-10.6 10.6-10.6 4 0 7.7 2.3 9.5 5.9l68.2 136.5c5.4 10.8 16.5 17.7 28.6 17.7l71.9 0c19.3 0 34.2-16.9 31.7-36L452.7 292.7c-1.2-9.7-6.9-18.4-15.3-23.4L271.9 169.9c-10.2-6.1-22.9-6.1-33.1 .1L75.4 269.3c-8.3 5.1-13.9 13.7-15.1 23.3z\"]\n};\nvar faTruckFast = {\n  prefix: 'fas',\n  iconName: 'truck-fast',\n  icon: [640, 512, [\"shipping-fast\"], \"f48b\", \"M64 96c0-35.3 28.7-64 64-64l288 0c35.3 0 64 28.7 64 64l0 32 50.7 0c17 0 33.3 6.7 45.3 18.7L621.3 192c12 12 18.7 28.3 18.7 45.3L640 384c0 35.3-28.7 64-64 64l-3.3 0c-10.4 36.9-44.4 64-84.7 64s-74.2-27.1-84.7-64l-102.6 0c-10.4 36.9-44.4 64-84.7 64s-74.2-27.1-84.7-64l-3.3 0c-35.3 0-64-28.7-64-64l0-48-40 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l112 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L24 240c-13.3 0-24-10.7-24-24s10.7-24 24-24l176 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L24 144c-13.3 0-24-10.7-24-24S10.7 96 24 96l40 0zM576 288l0-50.7-45.3-45.3-50.7 0 0 96 96 0zM256 424a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zm232 40a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"]\n};\nvar faShippingFast = faTruckFast;\nvar faUserPen = {\n  prefix: 'fas',\n  iconName: 'user-pen',\n  icon: [640, 512, [\"user-edit\"], \"f4ff\", \"M256.1 248a120 120 0 1 0 0-240 120 120 0 1 0 0 240zm-29.7 56c-98.5 0-178.3 79.8-178.3 178.3 0 16.4 13.3 29.7 29.7 29.7l196.5 0 10.9-54.5c4.3-21.7 15-41.6 30.6-57.2l67.3-67.3c-28-18.3-61.4-28.9-97.4-28.9l-59.4 0zM332.3 466.9l-11.9 59.6c-.2 .9-.3 1.9-.3 2.9 0 8 6.5 14.6 14.6 14.6 1 0 1.9-.1 2.9-.3l59.6-11.9c12.4-2.5 23.8-8.6 32.7-17.5l118.9-118.9-80-80-118.9 118.9c-8.9 8.9-15 20.3-17.5 32.7zm267.8-123c22.1-22.1 22.1-57.9 0-80s-57.9-22.1-80 0l-28.8 28.8 80 80 28.8-28.8z\"]\n};\nvar faUserEdit = faUserPen;\nvar faUserClock = {\n  prefix: 'fas',\n  iconName: 'user-clock',\n  icon: [576, 512, [], \"f4fd\", \"M224 8a120 120 0 1 1 0 240 120 120 0 1 1 0-240zM194.3 304l59.4 0c3.9 0 7.9 .1 11.8 .4-16.2 28.2-25.5 60.8-25.5 95.6 0 41.8 13.4 80.5 36 112L45.7 512C29.3 512 16 498.7 16 482.3 16 383.8 95.8 304 194.3 304zM288 400a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-80c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0 0-48c0-8.8-7.2-16-16-16z\"]\n};\nvar faShower = {\n  prefix: 'fas',\n  iconName: 'shower',\n  icon: [512, 512, [128703], \"f2cc\", \"M64 131.9c0-19.8 16.1-35.9 35.9-35.9 9.5 0 18.6 3.8 25.4 10.5l16.2 16.2c-21 38.9-17.4 87.5 10.9 123L151 247c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0L345 121c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-1.3 1.3c-35.5-28.3-84.1-31.9-123-10.9L170.5 61.3C151.8 42.5 126.4 32 99.9 32 44.7 32 0 76.7 0 131.9L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-316.1zM256 352a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm64 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0-128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm64 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0-128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm64 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm32-32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nvar faSquareCaretUp = {\n  prefix: 'fas',\n  iconName: 'square-caret-up',\n  icon: [448, 512, [\"caret-square-up\"], \"f151\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM224 160c6.7 0 13 2.8 17.6 7.7l104 112c6.5 7 8.2 17.2 4.4 25.9S337.5 320 328 320l-208 0c-9.5 0-18.2-5.7-22-14.4s-2.1-18.9 4.4-25.9l104-112c4.5-4.9 10.9-7.7 17.6-7.7z\"]\n};\nvar faCaretSquareUp = faSquareCaretUp;\nvar faMapLocation = {\n  prefix: 'fas',\n  iconName: 'map-location',\n  icon: [640, 512, [\"map-marked\"], \"f59f\", \"M576 48c0-11.1-5.7-21.4-15.2-27.2s-21.2-6.4-31.1-1.4L413.5 77.5 234.1 17.6c-8.1-2.7-16.8-2.1-24.4 1.7l-128 64C70.8 88.8 64 99.9 64 112l0 352c0 11.1 5.7 21.4 15.2 27.2s21.2 6.4 31.1 1.4l116.1-58.1 173.3 57.8c-4.3-6.4-8.5-13.1-12.6-19.9-11-18.3-21.9-39.3-30-61.8l-101.2-33.7 0-284.5 128 42.7 0 99.3c31-35.8 77-58.4 128-58.4 22.6 0 44.2 4.4 64 12.5L576 48zM392 341.9c0 68.9 64.1 150.4 98.6 189.3 11.6 13 31.3 13 42.9 0 34.5-38.9 98.6-120.4 98.6-189.3 0-65.1-53.7-117.9-120-117.9S392 276.8 392 341.9z\"]\n};\nvar faMapMarked = faMapLocation;\nvar faPenFancy = {\n  prefix: 'fas',\n  iconName: 'pen-fancy',\n  icon: [512, 512, [128395, 10002], \"f5ac\", \"M373.5 27.1c15-17.2 36.7-27.1 59.6-27.1 43.6 0 79 35.4 79 79 0 22.8-9.9 44.6-27.1 59.6L283.7 313.8 273 303 209 239 198.2 228.3 373.5 27.1zM161.1 259C162 260 188 286 239 337l13.9 13.9-17.1 74.2c-3.9 17.1-16.9 30.7-33.8 35.4l-169.8 47.5 92.3-92.3c1.2 .1 2.3 .2 3.5 .2 17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32c0 1.2 .1 2.4 .2 3.5L3.9 479.8 51.5 310c4.7-16.9 18.3-29.9 35.4-33.8L161.1 259z\"]\n};\nvar faEuroSign = {\n  prefix: 'fas',\n  iconName: 'euro-sign',\n  icon: [448, 512, [8364, \"eur\", \"euro\"], \"f153\", \"M73.3 192C100.8 99.5 186.5 32 288 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-65.6 0-122 39.5-146.7 96L272 192c13.3 0 24 10.7 24 24s-10.7 24-24 24l-143.2 0c-.5 5.3-.8 10.6-.8 16s.3 10.7 .8 16L272 272c13.3 0 24 10.7 24 24s-10.7 24-24 24l-130.7 0c24.7 56.5 81.1 96 146.7 96l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-101.5 0-187.2-67.5-214.7-160L40 320c-13.3 0-24-10.7-24-24s10.7-24 24-24l24.6 0c-.7-10.5-.7-21.5 0-32L40 240c-13.3 0-24-10.7-24-24s10.7-24 24-24l33.3 0z\"]\n};\nvar faEur = faEuroSign;\nvar faEuro = faEuroSign;\nvar faHouseCircleXmark = {\n  prefix: 'fas',\n  iconName: 'house-circle-xmark',\n  icon: [640, 512, [], \"e50b\", \"M496 544a144 144 0 1 1 0-288 144 144 0 1 1 0 288zM268.6 6.5c12.2-9.3 29.7-8.7 41.2 2l217.6 202c-10.2-1.7-20.7-2.6-31.3-2.6-78.6 0-146.2 47.2-175.9 114.8-5-1.8-10.5-2.8-16.1-2.8l-32 0c-26.5 0-48 21.5-48 48l0 96 90.9 0c6.1 17.3 14.6 33.4 25.2 48L144 512c-35.3 0-64-28.7-64-64l0-176-16 0c-13.2 0-25-8.1-29.8-20.3s-1.6-26.2 8-35.1l224-208 2.4-2zM555.3 340.7c-6.2-6.2-16.4-6.2-22.6 0l-36.7 36.7-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l36.7 36.7-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l36.7-36.7 36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-36.7-36.7 36.7-36.7c6.2-6.2 6.2-16.4 0-22.6z\"]\n};\nvar faLiraSign = {\n  prefix: 'fas',\n  iconName: 'lira-sign',\n  icon: [384, 512, [8356], \"f195\", \"M84.9 256l-28.4 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l11.6 0C53.2 124.7 116.8 42 207.6 42l8.2 0c33.6 0 66.2 11.3 92.5 32.2l16.1 12.7c13.9 11 16.2 31.1 5.2 45s-31.1 16.2-45 5.2l-16.1-12.7c-15-11.9-33.6-18.4-52.8-18.4l-8.2 0c-53.8 0-90.1 52.9-73.5 102l162.4 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-145.1 0c2.3 10.6 3.6 21.3 3.9 32l141.2 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L150 336c-4.8 18.6-12.6 36.5-23.6 52.9l-18.1 27.1 212.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-272 0c-11.8 0-22.6-6.5-28.2-16.9s-5-23 1.6-32.9l51.2-76.8c3.7-5.6 6.9-11.4 9.4-17.4l-26 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l34.8 0c-.5-10.8-2.6-21.6-6.4-32z\"]\n};\nvar faYenSign = {\n  prefix: 'fas',\n  iconName: 'yen-sign',\n  icon: [384, 512, [165, \"cny\", \"jpy\", \"rmb\", \"yen\"], \"f157\", \"M74.9 46.7c-9.6-14.9-29.4-19.2-44.2-9.6S11.5 66.4 21.1 81.3L143.7 272 88 272c-13.3 0-24 10.7-24 24s10.7 24 24 24l72 0 0 32-72 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l72 0 0 48c0 17.7 14.3 32 32 32s32-14.3 32-32l0-48 72 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-72 0 0-32 72 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-55.7 0 122.6-190.7c9.6-14.9 5.3-34.7-9.6-44.2s-34.7-5.3-44.2 9.6L192 228.8 74.9 46.7z\"]\n};\nvar faCny = faYenSign;\nvar faJpy = faYenSign;\nvar faRmb = faYenSign;\nvar faYen = faYenSign;\nvar faBoxOpen = {\n  prefix: 'fas',\n  iconName: 'box-open',\n  icon: [640, 512, [], \"f49e\", \"M560.3 237.2c10.4 11.8 28.3 14.4 41.8 5.5 14.7-9.8 18.7-29.7 8.9-44.4l-48-72c-2.8-4.2-6.6-7.7-11.1-10.2L351.4 4.7c-19.3-10.7-42.8-10.7-62.2 0L88.8 116c-5.4 3-9.7 7.4-12.6 12.8L27.7 218.7c-12.6 23.4-3.8 52.5 19.6 65.1l33 17.7 0 53.3c0 23 12.4 44.3 32.4 55.7l176 99.7c19.6 11.1 43.5 11.1 63.1 0l176-99.7c20.1-11.4 32.4-32.6 32.4-55.7l0-117.5zm-240-9.8L170.2 144 320.3 60.6 470.4 144 320.3 227.4zm-41.5 50.2l-21.3 46.2-165.8-88.8 25.4-47.2 161.7 89.8z\"]\n};\nvar faTruckField = {\n  prefix: 'fas',\n  iconName: 'truck-field',\n  icon: [640, 512, [], \"e58d\", \"M32 96c0-35.3 28.7-64 64-64l224 0c23.7 0 44.4 12.9 55.4 32l40.4 0c32.4 0 61.6 19.6 74 49.5l43.8 106.3 1.7 4.2 24.7 0c26.5 0 48 21.5 48 48l0 64c0 26.5-21.5 48-48 48l-.4 0c.2 2.6 .4 5.3 .4 8 0 48.6-39.4 88-88 88s-88-39.4-88-88c0-2.7 .1-5.4 .4-8l-144.7 0c.2 2.6 .4 5.3 .4 8 0 48.6-39.4 88-88 88s-88-39.4-88-88c0-3.6 .2-7.1 .6-10.5-19-6.4-32.6-24.4-32.6-45.5l0-48c-17.7 0-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32l0-32zm352 32l0 96 82.1 0-35.4-86.1c-2.5-6-8.3-9.9-14.8-9.9L384 128zM192 392a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zm280 40a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"]\n};\nvar faLocationPinLock = {\n  prefix: 'fas',\n  iconName: 'location-pin-lock',\n  icon: [512, 512, [], \"e51f\", \"M0 188.6C0 84.4 86 0 192 0 294.1 0 377.6 78.3 383.6 177 320.7 185.1 272 238.8 272 304l0 24.4c-19.6 17.6-32 43.1-32 71.5l0 75.7c-9.9 11.6-18.9 21.7-26.4 29.8-11.8 12.8-31.5 12.8-43.3 0-50.2-54.5-170.4-197.5-170.4-316.8zM192 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128zm240 48.1c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 47.9 64 0 0-47.9zM288 400c0-20.9 13.4-38.7 32-45.3l0-50.6c0-44.2 35.8-80 80-80s80 35.8 80 80l0 50.6c18.6 6.6 32 24.4 32 45.3l0 96c0 26.5-21.5 48-48 48l-128 0c-26.5 0-48-21.5-48-48l0-96z\"]\n};\nvar faPersonPraying = {\n  prefix: 'fas',\n  iconName: 'person-praying',\n  icon: [384, 512, [128720, \"pray\"], \"f683\", \"M320 64a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zM200.7 264l22.9 31.5c6.5 8.9 16.3 14.7 27.2 16.1s21.9-1.7 30.4-8.7l88-72c17.1-14 19.6-39.2 5.6-56.3s-39.2-19.6-56.3-5.6l-55.2 45.2-26.2-36c-15.6-21.5-40.6-34.2-67.2-34.2-30.9 0-59.2 17.1-73.6 44.4L47.8 280.9c-20.2 38.5-9.4 85.9 25.6 111.8L126.6 432 40 432c-22.1 0-40 17.9-40 40s17.9 40 40 40l208 0c17.3 0 32.6-11.1 38-27.5s-.3-34.4-14.2-44.7l-116.1-85.8 45-90z\"]\n};\nvar faPray = faPersonPraying;\nvar faClipboardList = {\n  prefix: 'fas',\n  iconName: 'clipboard-list',\n  icon: [384, 512, [], \"f46d\", \"M311.4 32l8.6 0c35.3 0 64 28.7 64 64l0 352c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l8.6 0C83.6 12.9 104.3 0 128 0L256 0c23.7 0 44.4 12.9 55.4 32zM248 112c13.3 0 24-10.7 24-24s-10.7-24-24-24L136 64c-13.3 0-24 10.7-24 24s10.7 24 24 24l112 0zM128 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm32 0c0 13.3 10.7 24 24 24l112 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-112 0c-13.3 0-24 10.7-24 24zm0 128c0 13.3 10.7 24 24 24l112 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-112 0c-13.3 0-24 10.7-24 24zM96 416a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nvar faSackDollar = {\n  prefix: 'fas',\n  iconName: 'sack-dollar',\n  icon: [512, 512, [128176], \"f81d\", \"M328 112l-144 0-37.3-74.5c-1.8-3.6-2.7-7.6-2.7-11.6 0-14.3 11.6-25.9 25.9-25.9L342.1 0c14.3 0 25.9 11.6 25.9 25.9 0 4-.9 8-2.7 11.6L328 112zM169.6 160l172.8 0 48.7 40.6C457.6 256 496 338 496 424.5 496 472.8 456.8 512 408.5 512l-305.1 0C55.2 512 16 472.8 16 424.5 16 338 54.4 256 120.9 200.6L169.6 160zM260 224c-11 0-20 9-20 20l0 4c-28.8 .3-52 23.7-52 52.5 0 25.7 18.5 47.6 43.9 51.8l41.7 7c6 1 10.4 6.2 10.4 12.3 0 6.9-5.6 12.5-12.5 12.5L216 384c-11 0-20 9-20 20s9 20 20 20l24 0 0 4c0 11 9 20 20 20s20-9 20-20l0-4.7c25-4.1 44-25.7 44-51.8 0-25.7-18.5-47.6-43.9-51.8l-41.7-7c-6-1-10.4-6.2-10.4-12.3 0-6.9 5.6-12.5 12.5-12.5l47.5 0c11 0 20-9 20-20s-9-20-20-20l-8 0 0-4c0-11-9-20-20-20z\"]\n};\nvar faMountainSun = {\n  prefix: 'fas',\n  iconName: 'mountain-sun',\n  icon: [576, 512, [], \"e52f\", \"M256.5 0c14.7 0 28.2 8.1 35.2 21l216 400c6.7 12.4 6.4 27.4-.8 39.5-7.2 12.1-20.3 19.5-34.3 19.5l-432 0c-14.1 0-27.1-7.4-34.3-19.5s-7.5-27.1-.8-39.5l216-400 2.9-4.6C231.7 6.2 243.6 0 256.5 0zM170.4 249.9l26.8 26.8c6.2 6.2 16.4 6.2 22.6 0l43.3-43.3c6-6 14.1-9.4 22.6-9.4l42.8 0-72.1-133.5-86.1 159.4zM496.5 160a80 80 0 1 1 0-160 80 80 0 1 1 0 160z\"]\n};\nvar faArrowUpWideShort = {\n  prefix: 'fas',\n  iconName: 'arrow-up-wide-short',\n  icon: [576, 512, [\"sort-amount-up\"], \"f161\", \"M150.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L96 141.3 96 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-306.7 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96zM320 480l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128l160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128l224 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32z\"]\n};\nvar faSortAmountUp = faArrowUpWideShort;\nvar faUsersLine = {\n  prefix: 'fas',\n  iconName: 'users-line',\n  icon: [576, 512, [], \"e592\", \"M224 128a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM176 336c0-61.9 50.1-112 112-112s112 50.1 112 112l0 8c0 13.3-10.7 24-24 24l-176 0c-13.3 0-24-10.7-24-24l0-8zM392 144a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zm27.2 100.4c9.1-2.9 18.8-4.4 28.8-4.4 53 0 96 43 96 96l0 10.7c0 11.8-9.6 21.3-21.3 21.3l-78.8 0c2.7-7.5 4.1-15.6 4.1-24l0-8c0-34.1-10.6-65.7-28.8-91.6zm-262.4 0c-18.2 26-28.8 57.5-28.8 91.6l0 8c0 8.4 1.4 16.5 4.1 24l-78.8 0C41.6 368 32 358.4 32 346.7L32 336c0-53 43-96 96-96 10 0 19.7 1.5 28.8 4.4zM72 144a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zM0 440c0-13.3 10.7-24 24-24l528 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 464c-13.3 0-24-10.7-24-24z\"]\n};\nvar faStarOfDavid = {\n  prefix: 'fas',\n  iconName: 'star-of-david',\n  icon: [512, 512, [10017], \"f69a\", \"M415.9 311.9l-27.8 48.1 55.7 0-27.8-48.1zM383.6 256l-60.2-104-134.8 0-60.2 104 60.2 104 134.8 0 60.2-104zm64.7 0l58.4 100.9c3.5 6 5.3 12.8 5.3 19.7 0 21.7-17.6 39.4-39.4 39.4l-117 0-61.3 105.8C286.5 535.6 271.8 544 256 544s-30.5-8.4-38.4-22.2l-61.3-105.8-117 0c-21.7 0-39.4-17.6-39.4-39.4 0-6.9 1.8-13.7 5.3-19.7L63.7 256 5.3 155.1C1.8 149.1 0 142.3 0 135.4 0 113.6 17.6 96 39.4 96l117 0 61.3-105.8C225.5-23.6 240.2-32 256-32s30.5 8.4 38.4 22.2l61.3 105.8 117 0c21.7 0 39.4 17.6 39.4 39.4 0 6.9-1.8 13.7-5.3 19.7L448.3 256zM388.1 152l27.8 48.1 27.8-48.1-55.7 0zM291 96l-35-60.4-35 60.4 70 0zM123.9 152l-55.7 0 27.8 48.1 27.8-48.1zM96.1 311.9l-27.8 48.1 55.7 0-27.8-48.1zM221 416l35 60.4 35-60.4-70 0z\"]\n};\nvar faNotesMedical = {\n  prefix: 'fas',\n  iconName: 'notes-medical',\n  icon: [512, 512, [], \"f481\", \"M96 352c0 35.3 28.7 64 64 64l181.5 0c17 0 33.3-6.7 45.3-18.7L493.3 290.7c12-12 18.7-28.3 18.7-45.3L512 64c0-35.3-28.7-64-64-64L160 0C124.7 0 96 28.7 96 64l0 288zM288 112l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48c0-8.8 7.2-16 16-16zM48 120c0-13.3-10.7-24-24-24S0 106.7 0 120L0 448c0 35.3 28.7 64 64 64l264 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L64 464c-8.8 0-16-7.2-16-16l0-328z\"]\n};\nvar faAustralSign = {\n  prefix: 'fas',\n  iconName: 'austral-sign',\n  icon: [448, 512, [], \"e0a9\", \"M266.5 240l-85 0 42.5-106.4 42.5 106.4zm68.9 0L262.9 58.3C256.5 42.4 241.1 32 224 32s-32.5 10.4-38.9 26.3L112.6 240 32 240c-13.3 0-24 10.7-24 24s10.7 24 24 24l61.4 0-19.2 48-42.3 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l23.1 0-20.8 52.1c-6.6 16.4 1.4 35 17.9 41.6s35-1.4 41.6-17.9l30.3-75.9 200 0 30.3 75.9c6.6 16.4 25.2 24.4 41.6 17.9s24.4-25.2 17.9-41.6L392.9 384 416 384c13.3 0 24-10.7 24-24s-10.7-24-24-24l-42.3 0-19.2-48 61.4 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-80.6 0zm-49.7 48l19.2 48-161.6 0 19.2-48 123.3 0z\"]\n};\nvar faClipboardUser = {\n  prefix: 'fas',\n  iconName: 'clipboard-user',\n  icon: [384, 512, [], \"f7f3\", \"M311.4 32l8.6 0c35.3 0 64 28.7 64 64l0 352c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l8.6 0C83.6 12.9 104.3 0 128 0L256 0c23.7 0 44.4 12.9 55.4 32zM248 112c13.3 0 24-10.7 24-24s-10.7-24-24-24L136 64c-13.3 0-24 10.7-24 24s10.7 24 24 24l112 0zM192 344a56 56 0 1 0 0-112 56 56 0 1 0 0 112zM98.3 413c-12.9 15.6 2.2 35 22.4 35l142.5 0c20.2 0 35.3-19.4 22.4-35-14.7-17.7-36.9-29-61.7-29l-64 0c-24.8 0-47 11.3-61.7 29z\"]\n};\nvar faFileImage = {\n  prefix: 'fas',\n  iconName: 'file-image',\n  icon: [384, 512, [128443], \"f1c5\", \"M0 64C0 28.7 28.7 0 64 0L213.5 0c17 0 33.3 6.7 45.3 18.7L365.3 125.3c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm208-5.5l0 93.5c0 13.3 10.7 24 24 24L325.5 176 208 58.5zM128 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM92.6 448l198.8 0c15.8 0 28.6-12.8 28.6-28.6 0-7.3-2.8-14.4-7.9-19.7L215.3 297.9c-6-6.3-14.4-9.9-23.2-9.9l-.3 0c-8.8 0-17.1 3.6-23.2 9.9L71.9 399.7C66.8 405 64 412.1 64 419.4 64 435.2 76.8 448 92.6 448z\"]\n};\nvar faSquareCaretRight = {\n  prefix: 'fas',\n  iconName: 'square-caret-right',\n  icon: [448, 512, [\"caret-square-right\"], \"f152\", \"M448 96c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320zM320 256c0 6.7-2.8 13-7.7 17.6l-112 104c-7 6.5-17.2 8.2-25.9 4.4S160 369.5 160 360l0-208c0-9.5 5.7-18.2 14.4-22s18.9-2.1 25.9 4.4l112 104c4.9 4.5 7.7 10.9 7.7 17.6z\"]\n};\nvar faCaretSquareRight = faSquareCaretRight;\nvar faVial = {\n  prefix: 'fas',\n  iconName: 'vial',\n  icon: [512, 512, [129514], \"f492\", \"M342.6 9.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L306.7 64 28.1 342.6C10.1 360.6 0 385 0 410.5L0 416c0 53 43 96 96 96l5.5 0c25.5 0 49.9-10.1 67.9-28.1l278.6-278.6 9.4 9.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160zM205.3 256l146.7-146.7 50.7 50.7-96 96-101.5 0z\"]\n};\nvar faHelicopter = {\n  prefix: 'fas',\n  iconName: 'helicopter',\n  icon: [576, 512, [128641], \"f533\", \"M176 32c-13.3 0-24 10.7-24 24s10.7 24 24 24l152 0 0 48-220.8 0-32.8-39.4C69.9 83.2 63.1 80 56 80L24 80C15.7 80 8 84.3 3.6 91.4s-4.8 15.9-1.1 23.4l48 96C54.6 218.9 62.9 224 72 224l107.8 0 104 143.1c15.1 20.7 39.1 32.9 64.7 32.9l75.5 0c75.1 0 136-60.9 136-136S499.1 128 424 128l-48 0 0-48 152 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L176 32zM376 192l48 0c39.8 0 72 32.2 72 72s-32.2 72-72 72l-48 0 0-144zM552 416c-13.3 0-24 10.7-24 24 0 4.4-3.6 8-8 8l-272 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l272 0c30.9 0 56-25.1 56-56 0-13.3-10.7-24-24-24z\"]\n};\nvar faMitten = {\n  prefix: 'fas',\n  iconName: 'mitten',\n  icon: [448, 512, [], \"f7b5\", \"M352 384L64 384 5.4 178.9C1.8 166.4 0 153.4 0 140.3 0 62.8 62.8 0 140.3 0l3.4 0c66 0 123.5 44.9 139.5 108.9l31.4 125.8 17.6-20.1C344.8 200.2 362.9 192 382 192l2.8 0c34.9 0 63.3 28.3 63.3 63.3 0 15.9-6 31.2-16.8 42.9L352 384zM32 464c0-17.7 14.3-32 32-32l288 0c17.7 0 32 14.3 32 32l0 16c0 17.7-14.3 32-32 32L64 512c-17.7 0-32-14.3-32-32l0-16z\"]\n};\nvar faGasPump = {\n  prefix: 'fas',\n  iconName: 'gas-pump',\n  icon: [512, 512, [9981], \"f52f\", \"M32 64C32 28.7 60.7 0 96 0L256 0c35.3 0 64 28.7 64 64l0 192 8 0c48.6 0 88 39.4 88 88l0 32c0 13.3 10.7 24 24 24s24-10.7 24-24l0-154c-27.6-7.1-48-32.2-48-62l0-59.5-25.8-28.3c-8.9-9.8-8.2-25 1.6-33.9s25-8.2 33.9 1.6l71.7 78.8c9.4 10.3 14.6 23.7 14.6 37.7L512 376c0 39.8-32.2 72-72 72s-72-32.2-72-72l0-32c0-22.1-17.9-40-40-40l-8 0 0 161.4c9.3 3.3 16 12.2 16 22.6 0 13.3-10.7 24-24 24L40 512c-13.3 0-24-10.7-24-24 0-10.5 6.7-19.3 16-22.6L32 64zM96 80l0 96c0 8.8 7.2 16 16 16l128 0c8.8 0 16-7.2 16-16l0-96c0-8.8-7.2-16-16-16L112 64c-8.8 0-16 7.2-16 16z\"]\n};\nvar faEnvelopeCircleCheck = {\n  prefix: 'fas',\n  iconName: 'envelope-circle-check',\n  icon: [640, 512, [], \"e4e8\", \"M64 112c0-26.5 21.5-48 48-48l416 0c26.5 0 48 21.5 48 48l0 81.4c-24.4-11.2-51.4-17.4-80-17.4-87.7 0-161.7 58.8-184.7 139.2-7.1-1.3-14.1-4.2-20.1-8.8l-208-156C71.1 141.3 64 127.1 64 112zM304 368c0 28.6 6.2 55.6 17.4 80L128 448c-35.3 0-64-28.7-64-64l0-188 198.4 148.8c12.6 9.4 26.9 15.4 41.7 17.9 0 1.8-.1 3.5-.1 5.3zm48 0a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm201.4-60.9c-7.1-5.2-17.2-3.6-22.4 3.5l-53 72.9-26.8-26.8c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c3.3 3.3 7.9 5 12.6 4.6s8.9-2.8 11.7-6.5l64-88c5.2-7.1 3.6-17.2-3.5-22.3z\"]\n};\nvar faPersonSkating = {\n  prefix: 'fas',\n  iconName: 'person-skating',\n  icon: [512, 512, [\"skating\"], \"f7c5\", \"M368 56a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zM128 128c0-17.7 14.3-32 32-32l150.1 0c49.9 0 74.9 60.3 39.6 95.6l-63.9 63.9 69.8 31c17.3 7.7 28.5 24.9 28.5 43.9l0 85.6c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-75.2-82.4-36.6c-41-18.2-51-72-19.3-103.7l40.4-40.4-98.7 0c-17.7 0-32-14.3-32-32zM89.4 361.4l75.9-75.9c7.7 19.7 21.6 37.3 41 49.6l-71.6 71.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3zm346.5 87.1c8.6 2.1 13.8 10.8 11.6 19.4l-.4 1.7c-6.2 24.9-28.6 42.4-54.3 42.4L304 512c-8.8 0-16-7.2-16-16s7.2-16 16-16l88.8 0c11 0 20.6-7.5 23.3-18.2l.4-1.7c2.1-8.6 10.8-13.8 19.4-11.6zM143.2 486.3l-6.2 3.1c-21.6 10.8-47.6 6.6-64.6-10.5L12.7 419.3c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l59.6 59.6c7.3 7.3 18.5 9.1 27.7 4.5l6.2-3.1c7.9-4 17.5-.7 21.5 7.2s.7 17.5-7.2 21.5z\"]\n};\nvar faSkating = faPersonSkating;\nvar faSun = {\n  prefix: 'fas',\n  iconName: 'sun',\n  icon: [576, 512, [9728], \"f185\", \"M288-32c8.4 0 16.3 4.4 20.6 11.7L364.1 72.3 468.9 46c8.2-2 16.9 .4 22.8 6.3S500 67 498 75.1l-26.3 104.7 92.7 55.5c7.2 4.3 11.7 12.2 11.7 20.6s-4.4 16.3-11.7 20.6L471.7 332.1 498 436.8c2 8.2-.4 16.9-6.3 22.8S477 468 468.9 466l-104.7-26.3-55.5 92.7c-4.3 7.2-12.2 11.7-20.6 11.7s-16.3-4.4-20.6-11.7L211.9 439.7 107.2 466c-8.2 2-16.8-.4-22.8-6.3S76 445 78 436.8l26.2-104.7-92.6-55.5C4.4 272.2 0 264.4 0 256s4.4-16.3 11.7-20.6L104.3 179.9 78 75.1c-2-8.2 .3-16.8 6.3-22.8S99 44 107.2 46l104.7 26.2 55.5-92.6 1.8-2.6c4.5-5.7 11.4-9.1 18.8-9.1zm0 144a144 144 0 1 0 0 288 144 144 0 1 0 0-288zm0 240a96 96 0 1 1 0-192 96 96 0 1 1 0 192z\"]\n};\nvar faBaseball = {\n  prefix: 'fas',\n  iconName: 'baseball',\n  icon: [512, 512, [129358, 9918, \"baseball-ball\"], \"f433\", \"M232.4 1.1c-122.2 11.4-219.5 108.7-230.9 230.9 16.2-.1 32-1.8 47.2-5 13-2.7 25.7 5.5 28.4 18.5s-5.5 25.7-18.5 28.4c-18.4 3.9-37.6 6-57.1 6.1 11.4 122.2 108.7 219.5 230.9 230.9 .1-19.5 2.2-38.7 6.1-57.1 2.7-13 15.5-21.3 28.4-18.5s21.3 15.5 18.5 28.4c-3.2 15.2-4.9 31-5 47.2 122.2-11.4 219.5-108.7 230.9-230.9-16.2 .1-32 1.8-47.2 5-13 2.7-25.7-5.5-28.4-18.5s5.5-25.7 18.5-28.4c18.4-3.9 37.6-6 57.1-6.1-11.4-122.2-108.7-219.5-230.9-230.9-.1 19.5-2.2 38.7-6.1 57.1-2.7 13-15.5 21.3-28.4 18.5s-21.3-15.5-18.5-28.4c3.2-15.2 4.9-31 5-47.2zm2.8 151.4c-21.4 32.9-49.5 60.9-82.3 82.3-11.1 7.2-26 4.1-33.2-7s-4.1-26 7-33.2c27.2-17.7 50.5-41 68.3-68.3 7.2-11.1 22.1-14.3 33.2-7s14.3 22.1 7 33.2zM393.1 284.2c7.2 11.1 4.1 26-7 33.2-27.2 17.7-50.5 41-68.3 68.3-7.2 11.1-22.1 14.3-33.2 7s-14.3-22.1-7-33.2c21.4-32.9 49.5-60.9 82.3-82.3 11.1-7.2 26-4.1 33.2 7z\"]\n};\nvar faBaseballBall = faBaseball;\nvar faImage = {\n  prefix: 'fas',\n  iconName: 'image',\n  icon: [448, 512, [], \"f03e\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm64 80a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM272 224c8.4 0 16.1 4.4 20.5 11.5l88 144c4.5 7.4 4.7 16.7 .5 24.3S368.7 416 360 416L88 416c-8.9 0-17.2-5-21.3-12.9s-3.5-17.5 1.6-24.8l56-80c4.5-6.4 11.8-10.2 19.7-10.2s15.2 3.8 19.7 10.2l26.4 37.8 61.4-100.5c4.4-7.1 12.1-11.5 20.5-11.5z\"]\n};\nvar faNotdef = {\n  prefix: 'fas',\n  iconName: 'notdef',\n  icon: [384, 512, [], \"e1fe\", \"M64 390.3L153.5 256 64 121.7 64 390.3zM102.5 448L281.5 448 192 313.7 102.5 448zm128-192L320 390.3 320 121.7 230.5 256zM281.5 64L102.5 64 192 198.3 281.5 64zM0 48C0 21.5 21.5 0 48 0L336 0c26.5 0 48 21.5 48 48l0 416c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 48z\"]\n};\nvar faBasketball = {\n  prefix: 'fas',\n  iconName: 'basketball',\n  icon: [512, 512, [127936, \"basketball-ball\"], \"f434\", \"M92.7 58.8l78.4 78.4c18.2-25 28.9-55.9 28.9-89.2 0-14.1-1.9-27.7-5.5-40.6-38 9.4-72.6 27.2-101.8 51.4zM58.8 92.7c-24.2 29.2-42 63.8-51.4 101.8 12.9 3.6 26.5 5.5 40.6 5.5 33.3 0 64.1-10.7 89.2-28.9L58.8 92.7zM256 0c-4.6 0-9.2 .1-13.7 .4 3.7 15.3 5.7 31.2 5.7 47.6 0 46.6-15.9 89.4-42.6 123.4L256 222.1 419.3 58.8C374.9 22.1 318.1 0 256 0zM48 248c-16.4 0-32.4-2-47.6-5.7-.2 4.5-.4 9.1-.4 13.7 0 62.1 22.1 118.9 58.8 163.3L222.1 256 171.4 205.4C137.4 232.1 94.6 248 48 248zm463.6 21.7c.2-4.5 .4-9.1 .4-13.7 0-62.1-22.1-118.9-58.8-163.3L289.9 256 340.6 306.6c34-26.7 76.9-42.6 123.4-42.6 16.4 0 32.4 2 47.6 5.7zm-7.1 47.8c-12.9-3.6-26.5-5.5-40.6-5.5-33.3 0-64.1 10.7-89.2 28.9l78.4 78.4c24.2-29.2 42-63.8 51.4-101.8zM340.9 374.8c-18.2 25-28.9 55.9-28.9 89.2 0 14.1 1.9 27.7 5.5 40.6 38-9.4 72.6-27.2 101.8-51.4l-78.4-78.4zm-34.3-34.3L256 289.9 92.7 453.2c44.3 36.7 101.2 58.8 163.3 58.8 4.6 0 9.2-.1 13.7-.4-3.7-15.3-5.7-31.2-5.7-47.6 0-46.6 15.9-89.4 42.6-123.4z\"]\n};\nvar faBasketballBall = faBasketball;\nvar faPencil = {\n  prefix: 'fas',\n  iconName: 'pencil',\n  icon: [512, 512, [9999, 61504, \"pencil-alt\"], \"f303\", \"M36.4 353.2c4.1-14.6 11.8-27.9 22.6-38.7l181.2-181.2 33.9-33.9c16.6 16.6 51.3 51.3 104 104l33.9 33.9-33.9 33.9-181.2 181.2c-10.7 10.7-24.1 18.5-38.7 22.6L30.4 510.6c-8.3 2.3-17.3 0-23.4-6.2S-1.4 489.3 .9 481L36.4 353.2zm55.6-3.7c-4.4 4.7-7.6 10.4-9.3 16.6l-24.1 86.9 86.9-24.1c6.4-1.8 12.2-5.1 17-9.7L91.9 349.5zm354-146.1c-16.6-16.6-51.3-51.3-104-104L308 65.5C334.5 39 349.4 24.1 352.9 20.6 366.4 7 384.8-.6 404-.6S441.6 7 455.1 20.6l35.7 35.7C504.4 69.9 512 88.3 512 107.4s-7.6 37.6-21.2 51.1c-3.5 3.5-18.4 18.4-44.9 44.9z\"]\n};\nvar faPencilAlt = faPencil;\nvar faPersonWalkingArrowLoopLeft = {\n  prefix: 'fas',\n  iconName: 'person-walking-arrow-loop-left',\n  icon: [640, 512, [], \"e551\", \"M160 80a56 56 0 1 0 0-112 56 56 0 1 0 0 112zM73.4 227.9l22.6-22.6 0 69.3c0 28 12.2 54.7 33.5 72.9l71.4 61.2c5.9 5.1 9.8 12.1 10.9 19.8l12.6 88.1c2.5 17.5 18.7 29.7 36.2 27.2s29.7-18.7 27.2-36.2l-12.6-88.1c-3.3-23.1-14.9-44.1-32.6-59.3l-34.5-29.6 0-115.2 3.8 4.7c18.2 22.8 45.8 36 75 36l33.2 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-33.2 0c-9.7 0-18.9-4.4-25-12l-17.9-22.4c-23-28.8-57.9-45.6-94.8-45.6-32.2 0-63.1 12.8-85.8 35.6L28.1 182.6C10.1 200.6 0 225 0 250.5L0 288c0 17.7 14.3 32 32 32s32-14.3 32-32l0-37.5c0-8.5 3.4-16.6 9.4-22.6zM85.8 407.3c-1.5 5.2-4.3 10-8.1 13.8L9.4 489.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l68.3-68.3c11.5-11.5 19.9-25.8 24.4-41.5l2.2-7.6-46-39.4c-2.5-2.2-5-4.4-7.4-6.8L85.8 407.3zM359 335c-9.4 9.4-9.4 24.6 0 33.9l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-31-31 102.1 0c1.2 0 2.4-.1 3.5-.3 56.1-3.9 100.5-50.6 100.5-107.7 0-59.6-48.4-108-108-108l-92 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l92 0c33.1 0 60 26.9 60 60s-26.9 60-60 60l-98.1 0 31-31c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-72 72z\"]\n};\nvar faDiceSix = {\n  prefix: 'fas',\n  iconName: 'dice-six',\n  icon: [448, 512, [9861], \"f526\", \"M0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm160 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm32 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM320 192a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm32 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM320 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nvar faAnglesDown = {\n  prefix: 'fas',\n  iconName: 'angles-down',\n  icon: [384, 512, [\"angle-double-down\"], \"f103\", \"M214.6 470.6c-12.5 12.5-32.8 12.5-45.3 0l-160-160c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L192 402.7 329.4 265.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-160 160zm160-352l-160 160c-12.5 12.5-32.8 12.5-45.3 0l-160-160c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L192 210.7 329.4 73.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3z\"]\n};\nvar faAngleDoubleDown = faAnglesDown;\nvar faSyringe = {\n  prefix: 'fas',\n  iconName: 'syringe',\n  icon: [576, 512, [128137], \"f48e\", \"M497.5-17c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l15 15-46.1 46.1-63-63c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l7 7-78.1 78.1 41 41c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-41-41-46.1 46.1 41 41c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-41-41-37.7 37.7c-10.5 10.5-16.4 24.7-16.4 39.6l0 88.8-57 57c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l57-57 88.8 0c14.9 0 29.1-5.9 39.6-16.4l229.7-229.7 7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-63-63 46.1-46.1 15 15c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-64-64z\"]\n};\nvar faWheatAwn = {\n  prefix: 'fas',\n  iconName: 'wheat-awn',\n  icon: [576, 512, [\"wheat-alt\"], \"e2cd\", \"M79.7 234.6c6.2-4.1 14.7-3.4 20.1 2.1l46.1 46.1 6.1 6.7c19.7 23.8 26.3 55 19.2 83.9 31.7-7.7 66.2 1 90.6 25.3l46.1 46.1c6.2 6.2 6.2 16.4 0 22.6l-7.4 7.4c-37.5 37.5-98.3 37.5-135.8 0L134.1 444.3 49.4 529c-9.4 9.4-24.5 9.4-33.9 0-9.4-9.4-9.4-24.6 0-33.9l84.7-84.7-30.5-30.5c-37.5-37.5-37.5-98.3 0-135.7l7.4-7.4 2.5-2.1zm104-104c6.2-4.1 14.7-3.4 20.1 2.1l46.1 46.1 6.1 6.7c19.7 23.8 26.3 55 19.2 83.9 31.7-7.7 66.2 1 90.6 25.3l46.1 46.1c6.2 6.2 6.2 16.4 0 22.6l-7.4 7.4c-37.5 37.5-98.3 37.5-135.8 0l-94.9-94.9c-37.5-37.5-37.5-98.3 0-135.7l7.4-7.4 2.5-2.1zM495.2 15c9.4-9.4 24.6-9.4 34 0 8.8 8.8 9.3 22.7 1.6 32.2L529.2 49 414.7 163.4c7.7 1 15.2 3 22.5 5.9L495.5 111c9.4-9.4 24.6-9.4 34 0 8.8 8.8 9.3 22.7 1.6 32.1l-1.7 1.8-52.7 52.7 39 39c6.2 6.2 6.2 16.4 0 22.6l-7.4 7.4c-37.5 37.5-98.3 37.5-135.8 0l-94.9-94.9c-37.5-37.5-37.5-98.3 0-135.7l7.4-7.4 2.5-2.1c6.2-4.1 14.7-3.4 20.1 2.1l39 39 52.7-52.7c9.4-9.4 24.6-9.4 34 0 8.8 8.8 9.3 22.7 1.6 32.1l-1.7 1.8-58.3 58.3c2.8 7.1 4.7 14.5 5.7 22.1L495.2 15z\"]\n};\nvar faWheatAlt = faWheatAwn;\nvar faPlaneUp = {\n  prefix: 'fas',\n  iconName: 'plane-up',\n  icon: [512, 512, [], \"e22d\", \"M200 24c0-30.9 25.1-56 56-56s56 25.1 56 56l0 127.3 173.6 159.2c6.6 6.1 10.4 14.6 10.4 23.6l0 43.7c0 10.9-10.7 18.6-21.1 15.2l-162.9-54.3 0 99.7 66 52.8c3.8 3 6 7.6 6 12.5l0 19.8c0 10.4-9.8 18-19.9 15.5L256 512 147.9 539c-10.1 2.5-19.9-5.1-19.9-15.5l0-19.8c0-4.9 2.2-9.5 6-12.5l66-52.8 0-99.7-162.9 54.3C26.7 396.4 16 388.7 16 377.8l0-43.7c0-9 3.8-17.5 10.4-23.6L200 151.3 200 24z\"]\n};\nvar faAlignCenter = {\n  prefix: 'fas',\n  iconName: 'align-center',\n  icon: [448, 512, [], \"f037\", \"M352 64c0-17.7-14.3-32-32-32L128 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l192 0c17.7 0 32-14.3 32-32zm96 128c0-17.7-14.3-32-32-32L32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32zM0 448c0 17.7 14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 416c-17.7 0-32 14.3-32 32zM352 320c0-17.7-14.3-32-32-32l-192 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l192 0c17.7 0 32-14.3 32-32z\"]\n};\nvar faHockeyPuck = {\n  prefix: 'fas',\n  iconName: 'hockey-puck',\n  icon: [512, 512, [], \"f453\", \"M256 256C114.6 256 0 213 0 160s114.6-96 256-96 256 43 256 96-114.6 96-256 96zM0 352L0 242.7c16.9 12.3 37 22.2 58.1 30.1 53 19.9 123 31.2 197.9 31.2s144.9-11.3 197.9-31.2c21.2-7.9 41.2-17.8 58.1-30.1L512 352c0 53-114.6 96-256 96S0 405 0 352z\"]\n};\nvar faCircleArrowLeft = {\n  prefix: 'fas',\n  iconName: 'circle-arrow-left',\n  icon: [512, 512, [\"arrow-circle-left\"], \"f0a8\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM135 239l80-80c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-39 39 150.1 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-150.1 0 39 39c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-80-80c-9.4-9.4-9.4-24.6 0-33.9z\"]\n};\nvar faArrowCircleLeft = faCircleArrowLeft;\nvar faPlugCircleBolt = {\n  prefix: 'fas',\n  iconName: 'plug-circle-bolt',\n  icon: [640, 512, [], \"e55b\", \"M192-32c17.7 0 32 14.3 32 32l0 96 128 0 0-96c0-17.7 14.3-32 32-32s32 14.3 32 32l0 96 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 48.7c-98.6 8.1-176 90.7-176 191.3 0 27.3 5.7 53.3 16 76.9l0 3.1c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-66.7C165.2 398.1 96 319.1 96 224l0-64c-17.7 0-32-14.3-32-32S78.3 96 96 96l64 0 0-96c0-17.7 14.3-32 32-32zM352 400a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm177.4-77c-5.8-4.2-13.8-4-19.4 .5l-80 64c-5.3 4.2-7.4 11.4-5.1 17.8S433.2 416 440 416l32.9 0-15.9 42.4c-2.5 6.7-.2 14.3 5.6 18.6s13.8 4 19.4-.5l80-64c5.3-4.2 7.4-11.4 5.1-17.8S558.8 384 552 384l-32.9 0 15.9-42.4c2.5-6.7 .2-14.3-5.6-18.6z\"]\n};\nvar faRestroom = {\n  prefix: 'fas',\n  iconName: 'restroom',\n  icon: [640, 512, [], \"f7bd\", \"M80 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-154.8c-8.1 9.2-21.1 13.2-33.5 9.4-16.9-5.3-26.3-23.2-21-40.1l29.7-95.2C44.4 156.9 83.6 128 128 128s83.6 28.9 96.8 71.2l29.7 95.2c5.3 16.9-4.1 34.8-21 40.1-12.4 3.9-25.4-.2-33.5-9.4L200 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zM320 0c13.3 0 24 10.7 24 24l0 464c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-464c0-13.3 10.7-24 24-24zM464 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM440 480l0-96-17.8 0c-10.9 0-18.6-10.7-15.2-21.1l9-26.9c-3.2 0-6.4-.5-9.5-1.5-16.9-5.3-26.3-23.2-21-40.1l29.7-95.2C428.4 156.9 467.6 128 512 128s83.6 28.9 96.8 71.2l29.7 95.2c5.3 16.9-4.1 34.8-21 40.1-3.2 1-6.4 1.5-9.5 1.5l9 26.9c3.5 10.4-4.3 21.1-15.2 21.1l-17.8 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-16 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32z\"]\n};\nvar faAnchorLock = {\n  prefix: 'fas',\n  iconName: 'anchor-lock',\n  icon: [640, 512, [], \"e4ad\", \"M320.5 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm-32-96c-53 0-96 43-96 96 0 41.8 26.7 77.4 64 90.5l0 257.9c-62.9-14.3-110.2-69.7-111.9-136.5l16.1 14.1c10 8.7 25.1 7.7 33.9-2.3s7.7-25.1-2.3-33.9l-64-56c-9-7.9-22.6-7.9-31.6 0l-64 56c-10 8.7-11 23.9-2.3 33.9s23.9 11 33.9 2.3l16.2-14.2c2.1 113.1 94.4 204.1 208 204.1 28.3 0 55.4-5.7 80-15.9l0-.2 0-72.2c-14.4 9.6-30.6 16.7-48 20.7l0-257.9c37.3-13.2 64-48.7 64-90.5 0-53-43-96-96-96zm272 304.1l0 47.9-64 0 0-47.9c0-17.7 14.3-32 32-32s32 14.3 32 32zM416.5 400l0 96c0 26.5 21.5 48 48 48l128 0c26.5 0 48-21.5 48-48l0-96c0-20.9-13.4-38.7-32-45.3l0-50.6c0-44.2-35.8-80-80-80s-80 35.8-80 80l0 50.6c-18.6 6.6-32 24.4-32 45.3z\"]\n};\nvar faTimeline = {\n  prefix: 'fas',\n  iconName: 'timeline',\n  icon: [576, 512, [], \"e29c\", \"M160 169.3c28.3-12.3 48-40.5 48-73.3 0-44.2-35.8-80-80-80S48 51.8 48 96c0 32.8 19.7 61 48 73.3l0 54.7-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l224 0 0 54.7c-28.3 12.3-48 40.5-48 73.3 0 44.2 35.8 80 80 80s80-35.8 80-80c0-32.8-19.7-61-48-73.3l0-54.7 224 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-54.7c28.3-12.3 48-40.5 48-73.3 0-44.2-35.8-80-80-80s-80 35.8-80 80c0 32.8 19.7 61 48 73.3l0 54.7-256 0 0-54.7z\"]\n};\nvar faLightbulb = {\n  prefix: 'fas',\n  iconName: 'lightbulb',\n  icon: [384, 512, [128161], \"f0eb\", \"M292.9 384c7.3-22.3 21.9-42.5 38.4-59.9 32.7-34.4 52.7-80.9 52.7-132.1 0-106-86-192-192-192S0 86 0 192c0 51.2 20 97.7 52.7 132.1 16.5 17.4 31.2 37.6 38.4 59.9l201.7 0zM288 432l-192 0 0 16c0 44.2 35.8 80 80 80l32 0c44.2 0 80-35.8 80-80l0-16zM184 112c-39.8 0-72 32.2-72 72 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-66.3 53.7-120 120-120 13.3 0 24 10.7 24 24s-10.7 24-24 24z\"]\n};\nvar faCircleArrowRight = {\n  prefix: 'fas',\n  iconName: 'circle-arrow-right',\n  icon: [512, 512, [\"arrow-circle-right\"], \"f0a9\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zm41-159c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l39-39-150.1 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l150.1 0-39-39c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l80 80c9.4 9.4 9.4 24.6 0 33.9l-80 80z\"]\n};\nvar faArrowCircleRight = faCircleArrowRight;\nvar faMarsAndVenus = {\n  prefix: 'fas',\n  iconName: 'mars-and-venus',\n  icon: [512, 512, [9893], \"f224\", \"M368 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l112 0c17.7 0 32 14.3 32 32l0 112c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-34.7-63 63c19.5 28.4 31 62.7 31 99.8 0 86.3-62.1 158.1-144 173.1l0 34.9 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-34.9c-81.9-15-144-86.8-144-173.1 0-97.2 78.8-176 176-176 37 0 71.4 11.4 99.8 31l63-63-34.7 0zM352 208a112 112 0 1 0 -224 0 112 112 0 1 0 224 0z\"]\n};\nvar faNetworkWired = {\n  prefix: 'fas',\n  iconName: 'network-wired',\n  icon: [576, 512, [], \"f6ff\", \"M248 88l80 0 0 48-80 0 0-48zm-8-56c-26.5 0-48 21.5-48 48l0 64c0 26.5 21.5 48 48 48l16 0 0 32-224 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0 0 32-16 0c-26.5 0-48 21.5-48 48l0 64c0 26.5 21.5 48 48 48l96 0c26.5 0 48-21.5 48-48l0-64c0-26.5-21.5-48-48-48l-16 0 0-32 192 0 0 32-16 0c-26.5 0-48 21.5-48 48l0 64c0 26.5 21.5 48 48 48l96 0c26.5 0 48-21.5 48-48l0-64c0-26.5-21.5-48-48-48l-16 0 0-32 96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-224 0 0-32 16 0c26.5 0 48-21.5 48-48l0-64c0-26.5-21.5-48-48-48l-96 0zM448 376l8 0 0 48-80 0 0-48 72 0zm-256 0l8 0 0 48-80 0 0-48 72 0z\"]\n};\nvar faBuildingShield = {\n  prefix: 'fas',\n  iconName: 'building-shield',\n  icon: [576, 512, [], \"e4d8\", \"M96 0C60.7 0 32 28.7 32 64l0 384c0 35.3 28.7 64 64 64l201.2 0c-12.5-14.7-23.2-30.8-31.8-48l-89.5 0 0-80c0-17.7 14.3-32 32-32l32 0 0-26.7c0-18.1 6.1-35.2 16.6-48.8-.4-1.4-.6-2.9-.6-4.5l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 1 86.7-28.9c3.1-1 6.2-1.8 9.3-2.5L416 64c0-35.3-28.7-64-64-64L96 0zm32 112c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM128 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM445.3 488.5l-13.3 6.3 0-188.1 96 32 0 19.6c0 55.8-32.2 106.5-82.7 130.3zM421.9 259.5l-112 37.3c-13.1 4.4-21.9 16.6-21.9 30.4l0 31.1c0 74.4 43 142.1 110.2 173.7l18.5 8.7c4.8 2.2 10 3.4 15.2 3.4s10.5-1.2 15.2-3.4l18.5-8.7C533 500.3 576 432.6 576 358.2l0-31.1c0-13.8-8.8-26-21.9-30.4l-112-37.3c-6.6-2.2-13.7-2.2-20.2 0z\"]\n};\nvar faCode = {\n  prefix: 'fas',\n  iconName: 'code',\n  icon: [576, 512, [], \"f121\", \"M360.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm64.6 136.1c-12.5 12.5-12.5 32.8 0 45.3l73.4 73.4-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0zm-274.7 0c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256 150.6 182.6c12.5-12.5 12.5-32.8 0-45.3z\"]\n};\nvar faFeatherPointed = {\n  prefix: 'fas',\n  iconName: 'feather-pointed',\n  icon: [512, 512, [\"feather-alt\"], \"f56b\", \"M475.3 .1c9.9-.8 19.6 3 26.6 10s10.8 16.7 10 26.6c-4 49.3-17.4 126.2-46.3 199.7-1.8 4.5-5.5 7.9-10.2 9.3L374.5 270c-3.9 1.2-6.5 4.7-6.5 8.8 0 5.1 4.1 9.2 9.2 9.2l38.6 0c12 0 19.7 12.8 13.5 23.1-4 6.7-8.3 13.2-12.7 19.6-2 2.9-5 5-8.4 6.1L310.5 366c-3.9 1.2-6.5 4.7-6.5 8.8 0 5.1 4.1 9.2 9.2 9.2l16 0c14.6 0 21 17.4 8.8 25.4-68 45-137.7 43.3-182.4 31.3-12.7-3.4-24-9.9-34.4-17.9L48 496c-8.8 8.8-23.2 8.8-32 0s-8.8-23.2 0-32l80-80 .5 .5c.7-1.3 1.6-2.5 2.7-3.6L256 224c8.8-8.8 8.8-23.2 0-32s-23.2-8.8-32 0L89.7 326.2c-8.9 8.9-24 4.4-25-8.2-4.3-53.2 9.3-123.1 72.6-186.4 91.1-91.1 254.2-124.7 337.9-131.5z\"]\n};\nvar faFeatherAlt = faFeatherPointed;\nvar faFileCircleQuestion = {\n  prefix: 'fas',\n  iconName: 'file-circle-question',\n  icon: [576, 512, [], \"e4ef\", \"M96 0C60.7 0 32 28.7 32 64l0 384c0 35.3 28.7 64 64 64l180 0c-22.7-31.5-36-70.2-36-112 0-100.6 77.4-183.2 176-191.3l0-38.1c0-17-6.7-33.3-18.7-45.3L290.7 18.7C278.7 6.7 262.5 0 245.5 0L96 0zM357.5 176L264 176c-13.3 0-24-10.7-24-24L240 58.5 357.5 176zM432 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-100a20 20 0 1 1 0 40 20 20 0 1 1 0-40zm0-100c-11.6 0-21.3 8.2-23.5 19.2-1.8 8.7-10.2 14.3-18.9 12.5s-14.3-10.2-12.5-18.9c5.2-25.6 27.8-44.8 54.9-44.8 30.9 0 56 25.1 56 56 0 19.8-11.7 37.8-29.8 45.9l-10.4 4.6c-1.2 7.7-7.8 13.5-15.8 13.5-8.8 0-16-7.2-16-16 0-11.2 6.6-21.3 16.8-25.9l12.4-5.5c6.6-2.9 10.8-9.4 10.8-16.6 0-13.3-10.7-24-24-24z\"]\n};\nvar faSignature = {\n  prefix: 'fas',\n  iconName: 'signature',\n  icon: [640, 512, [], \"f5b7\", \"M192 128c0-17.7 14.3-32 32-32s32 14.3 32 32l0 7.8c0 27.7-2.4 55.3-7.1 82.5l-84.4 25.3c-40.6 12.2-68.4 49.6-68.4 92l0 32.4-72 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l72.5 0c4.2 36 34.8 64 72 64 26 0 50-13.9 62.9-36.5l13.9-24.3c26.8-47 46.5-97.7 58.4-150.5l94.4-28.3-12.5 37.5c-3.3 9.8-1.6 20.5 4.4 28.8S405.7 320 416 320l128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-83.6 0 18-53.9c3.8-11.3 .9-23.8-7.4-32.4s-20.7-11.8-32.2-8.4L316.4 198.1c2.4-20.7 3.6-41.4 3.6-62.3l0-7.8c0-53-43-96-96-96s-96 43-96 96l0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32zm-9.2 177l49-14.7c-10.4 33.8-24.5 66.4-42.1 97.2l-13.9 24.3c-1.5 2.6-4.3 4.3-7.4 4.3-4.7 0-8.5-3.8-8.5-8.5l0-71.9c0-14.1 9.3-26.6 22.8-30.7zM616 416c13.3 0 24-10.7 24-24s-10.7-24-24-24l-292.9 0c-6.5 16.3-13.7 32.3-21.6 48L616 416z\"]\n};\nvar faEarthAmericas = {\n  prefix: 'fas',\n  iconName: 'earth-americas',\n  icon: [512, 512, [127758, \"earth\", \"earth-america\", \"globe-americas\"], \"f57d\", \"M55.7 199.7l30.9 30.9c6 6 14.1 9.4 22.6 9.4l21.5 0c8.5 0 16.6 3.4 22.6 9.4l29.3 29.3c6 6 9.4 14.1 9.4 22.6l0 37.5c0 8.5 3.4 16.6 9.4 22.6l13.3 13.3c6 6 9.4 14.1 9.4 22.6l0 18.7c0 17.7 14.3 32 32 32s32-14.3 32-32l0-2.7c0-8.5 3.4-16.6 9.4-22.6l45.3-45.3c6-6 9.4-14.1 9.4-22.6l0-34.7c0-17.7-14.3-32-32-32l-82.7 0c-8.5 0-16.6-3.4-22.6-9.4l-16-16c-4.2-4.2-6.6-10-6.6-16 0-12.5 10.1-22.6 22.6-22.6l34.7 0c12.5 0 22.6-10.1 22.6-22.6 0-6-2.4-11.8-6.6-16l-19.7-19.7C242 130 240 125.1 240 120s2-10 5.7-13.7l17.3-17.3c5.8-5.8 9.1-13.7 9.1-21.9 0-7.2-2.4-13.7-6.4-18.9-3.2-.1-6.4-.2-9.6-.2-95.4 0-175.7 64.2-200.3 151.7zM464 256c0-34.6-8.4-67.2-23.4-95.8-6.4 .9-12.7 3.9-17.9 9.1l-13.4 13.4c-6 6-9.4 14.1-9.4 22.6l0 34.7c0 17.7 14.3 32 32 32l24.1 0c2.5 0 5-.3 7.3-.8 .4-5 .5-10.1 .5-15.2zM0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0z\"]\n};\nvar faEarth = faEarthAmericas;\nvar faEarthAmerica = faEarthAmericas;\nvar faGlobeAmericas = faEarthAmericas;\nvar faCarrot = {\n  prefix: 'fas',\n  iconName: 'carrot',\n  icon: [640, 512, [129365], \"f787\", \"M453.1-36.7L440.9-24.6c-31.2 31.2-31.2 81.9 0 113.1 15.6 15.6 31.2 31.2 46.9 46.9 31.2 31.2 81.9 31.2 113.1 0l12.1-12.1c6.2-6.2 6.2-16.4 0-22.6L600.9 88.6c-31.2-31.2-81.9-31.2-113.1 0 31.2-31.2 31.2-81.9 0-113.1L475.7-36.7c-6.2-6.2-16.4-6.2-22.6 0zM331.6 96c-45.2 0-87.1 20.4-115 54.3L273.3 207c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L191.6 193.2 67.2 466.8c-5.5 12.1-2.9 26.4 6.5 35.9s23.7 12 35.9 6.5l141.6-64.4-43.8-43.8c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l56.5 56.5 95.3-43.3c53.1-24.1 87.2-77.1 87.2-135.5 0-82.2-66.6-148.8-148.8-148.8z\"]\n};\nvar faTemperatureFull = {\n  prefix: 'fas',\n  iconName: 'temperature-full',\n  icon: [320, 512, [\"temperature-4\", \"thermometer-4\", \"thermometer-full\"], \"f2c7\", \"M160 0C107 0 64 43 64 96l0 164.7C34.5 287 16 325.4 16 368 16 447.5 80.5 512 160 512s144-64.5 144-144c0-42.6-18.5-81-48-107.3L256 96c0-53-43-96-96-96zm64 368c0 35.3-28.7 64-64 64s-64-28.7-64-64c0-26.9 16.5-49.9 40-59.3L136 96c0-13.3 10.7-24 24-24s24 10.7 24 24l0 212.7c23.5 9.5 40 32.5 40 59.3z\"]\n};\nvar faTemperature4 = faTemperatureFull;\nvar faThermometer4 = faTemperatureFull;\nvar faThermometerFull = faTemperatureFull;\nvar faTableCellsRowLock = {\n  prefix: 'fas',\n  iconName: 'table-cells-row-lock',\n  icon: [640, 512, [], \"e67a\", \"M256 288l0-64 153.3 0c17.1-42.2 56-73.2 102.7-79l0-49c0-35.3-28.7-64-64-64L128 32C92.7 32 64 60.7 64 96l0 320c0 35.3 28.7 64 64 64l241.3 0c-.9-5.2-1.3-10.6-1.3-16.1l0-47.9-112 0 0-64 113.3 0c3.7-22 14.8-41.4 30.7-55.6l0-8.4-144 0zm0-192l192 0 0 64-192 0 0-64zM560 272.1l0 47.9-64 0 0-47.9c0-17.7 14.3-32 32-32s32 14.3 32 32zM416 368l0 96c0 26.5 21.5 48 48 48l128 0c26.5 0 48-21.5 48-48l0-96c0-20.9-13.4-38.7-32-45.3l0-50.6c0-44.2-35.8-80-80-80s-80 35.8-80 80l0 50.6c-18.6 6.6-32 24.4-32 45.3z\"]\n};\nvar faBoltLightning = {\n  prefix: 'fas',\n  iconName: 'bolt-lightning',\n  icon: [384, 512, [], \"e0b7\", \"M0 256L28.5 28c2-16 15.6-28 31.8-28L228.9 0c15 0 27.1 12.1 27.1 27.1 0 3.2-.6 6.5-1.7 9.5L208 160 347.3 160c20.2 0 36.7 16.4 36.7 36.7 0 7.4-2.2 14.6-6.4 20.7l-192.2 281c-5.9 8.6-15.6 13.7-25.9 13.7l-2.9 0c-15.7 0-28.5-12.8-28.5-28.5 0-2.3 .3-4.6 .9-6.9L176 288 32 288c-17.7 0-32-14.3-32-32z\"]\n};\nvar faCloudShowersWater = {\n  prefix: 'fas',\n  iconName: 'cloud-showers-water',\n  icon: [512, 512, [], \"e4e4\", \"M279.2 55.7C263.9 22.8 230.6 0 192 0 139 0 96 43 96 96 60.7 96 32 124.7 32 160s28.7 64 64 64l320 0c35.3 0 64-28.7 64-64s-28.7-64-64-64l-1.6 0c-7.4-36.5-39.7-64-78.4-64-22.2 0-42.3 9.1-56.8 23.7zM410.6 476.1c20.7 15.6 46 30.7 74.2 34.5 13.1 1.8 25.2-7.5 27-20.6s-7.5-25.2-20.6-27c-15.9-2.1-33.2-11.3-51.7-25.2-38.4-29-90.5-29-129 0-24 18.1-40.7 26.3-54.5 26.3s-30.5-8.2-54.5-26.3c-38.4-29-90.5-29-129 0-18.5 13.9-35.8 23.1-51.7 25.2-13.1 1.8-22.4 13.8-20.6 27s13.8 22.4 27 20.6c28.2-3.8 53.6-18.9 74.2-34.5 21.3-16.1 49.9-16.1 71.2 0 24.2 18.3 52.3 35.9 83.4 35.9s59.1-17.7 83.4-35.9c21.3-16.1 49.9-16.1 71.2 0zM100.1 303.6c4.2-12.6-2.6-26.2-15.2-30.4s-26.2 2.6-30.4 15.2l-21.3 64C29 365 35.8 378.6 48.4 382.8s26.2-2.6 30.4-15.2l21.3-64zm120 0c4.2-12.6-2.6-26.2-15.2-30.4s-26.2 2.6-30.4 15.2l-21.3 64c-4.2 12.6 2.6 26.2 15.2 30.4s26.2-2.6 30.4-15.2l21.3-64zm112 0c4.2-12.6-2.6-26.2-15.2-30.4s-26.2 2.6-30.4 15.2l-21.3 64c-4.2 12.6 2.6 26.2 15.2 30.4s26.2-2.6 30.4-15.2l21.3-64zm120 0c4.2-12.6-2.6-26.2-15.2-30.4s-26.2 2.6-30.4 15.2l-21.3 64c-4.2 12.6 2.6 26.2 15.2 30.4s26.2-2.6 30.4-15.2l21.3-64z\"]\n};\nvar faArrowUpLong = {\n  prefix: 'fas',\n  iconName: 'arrow-up-long',\n  icon: [320, 512, [\"long-arrow-up\"], \"f176\", \"M182.6-22.6c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L128 77.3 128 512c0 17.7 14.3 32 32 32s32-14.3 32-32l0-434.7 73.4 73.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-128-128z\"]\n};\nvar faLongArrowUp = faArrowUpLong;\nvar faAddressCard = {\n  prefix: 'fas',\n  iconName: 'address-card',\n  icon: [576, 512, [62140, \"contact-card\", \"vcard\"], \"f2bb\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm80 256l64 0c44.2 0 80 35.8 80 80 0 8.8-7.2 16-16 16L80 384c-8.8 0-16-7.2-16-16 0-44.2 35.8-80 80-80zm-24-96a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zm240-48l112 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-112 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm0 96l112 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-112 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nvar faContactCard = faAddressCard;\nvar faVcard = faAddressCard;\nvar faAngleRight = {\n  prefix: 'fas',\n  iconName: 'angle-right',\n  icon: [256, 512, [8250], \"f105\", \"M247.1 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L179.2 256 41.9 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z\"]\n};\nvar faFaceMeh = {\n  prefix: 'fas',\n  iconName: 'face-meh',\n  icon: [512, 512, [128528, \"meh\"], \"f11a\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM176 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM176 320l160 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-160 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nvar faMeh = faFaceMeh;\nvar faArrowUpFromGroundWater = {\n  prefix: 'fas',\n  iconName: 'arrow-up-from-ground-water',\n  icon: [640, 512, [], \"e4b5\", \"M303 7c9.4-9.4 24.6-9.4 33.9 0l88 88c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47 0 278.1c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-278.1-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L303 7zM240 192l0 163.1c-10.6-2.2-21.3-3.2-32-3.1-32.5 .2-64.9 10.7-92.3 31.4-8.8 6.6-15.9 10.9-21.7 13.5l-.8 .4c-3.7 1.7-6.4 2.9-9.8 .3-6-4.5-12.6-8-19.3-10.4L64 240c0-26.5 21.5-48 48-48l128 0zm336 48l0 155.2c-1.1 .8-2.2 1.5-3.3 2.4-4.1 3.1-8.3 .8-12.6-1.5-.6-.3-1.2-.6-1.8-1-5.2-2.7-11.1-6.6-18-11.7-28.1-21.1-61.3-31.6-94.4-31.4-15.5 .1-31 2.5-46 7.3l0-167.3 128 0c26.5 0 48 21.5 48 48zM403.4 476.1C379.1 494.3 351.1 512 320 512s-59.1-17.7-83.4-35.9c-21.3-16.1-49.9-16.1-71.2 0-23.8 17.9-54.1 35.5-88.1 35.3-20.4-.1-40.7-6.7-59.8-21.1-10.6-8-12.7-23-4.7-33.6s23-12.7 33.6-4.7c11.3 8.5 21.6 11.4 31.2 11.5 17.6 .1 37.3-9.4 58.9-25.7 38.4-29 90.5-29 129 0 24 18.1 40.7 26.3 54.5 26.3s30.5-8.2 54.5-26.3c38.4-29 90.5-29 129 0 16.9 12.7 32.9 21.5 47.8 24.6 13.7 2.8 27.4 .9 42.3-10.3 10.6-8 25.6-5.9 33.6 4.7s5.9 25.6-4.7 33.6c-26.4 19.9-54.2 24.4-80.7 19.1-25.3-5.1-48.1-18.9-67.2-33.3-21.3-16.1-49.9-16.1-71.2 0z\"]\n};\nvar faMap = {\n  prefix: 'fas',\n  iconName: 'map',\n  icon: [512, 512, [128506, 62072], \"f279\", \"M512 48c0-11.1-5.7-21.4-15.2-27.2s-21.2-6.4-31.1-1.4L349.5 77.5 170.1 17.6c-8.1-2.7-16.8-2.1-24.4 1.7l-128 64C6.8 88.8 0 99.9 0 112L0 464c0 11.1 5.7 21.4 15.2 27.2s21.2 6.4 31.1 1.4l116.1-58.1 179.4 59.8c8.1 2.7 16.8 2.1 24.4-1.7l128-64c10.8-5.4 17.7-16.5 17.7-28.6l0-352zM192 376.9l0-284.5 128 42.7 0 284.5-128-42.7z\"]\n};\nvar faUserPlus = {\n  prefix: 'fas',\n  iconName: 'user-plus',\n  icon: [640, 512, [], \"f234\", \"M285.7 304c98.5 0 178.3 79.8 178.3 178.3 0 16.4-13.3 29.7-29.7 29.7L77.7 512C61.3 512 48 498.7 48 482.3 48 383.8 127.8 304 226.3 304l59.4 0zM528 80c13.3 0 24 10.7 24 24l0 48 48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-48 0 0 48c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-48-48 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l48 0 0-48c0-13.3 10.7-24 24-24zM256 248a120 120 0 1 1 0-240 120 120 0 1 1 0 240z\"]\n};\nvar faVenus = {\n  prefix: 'fas',\n  iconName: 'venus',\n  icon: [384, 512, [9792], \"f221\", \"M80 176a112 112 0 1 1 224 0 112 112 0 1 1 -224 0zM223.9 349.1C305.9 334.1 368 262.3 368 176 368 78.8 289.2 0 192 0S16 78.8 16 176c0 86.3 62.1 158.1 144.1 173.1-.1 1-.1 1.9-.1 2.9l0 64-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-64c0-1 0-1.9-.1-2.9z\"]\n};\nvar faDiagramSuccessor = {\n  prefix: 'fas',\n  iconName: 'diagram-successor',\n  icon: [448, 512, [], \"e47a\", \"M289.2 137.9c2.5-6 8.3-9.9 14.8-9.9l40 0 0-24c0-13.3-10.7-24-24-24l-98 0c1.3 5.1 2 10.5 2 16l0 64c0 35.3-28.7 64-64 64l-96 0c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l256 0c39.8 0 72 32.2 72 72l0 24 40 0c6.5 0 12.3 3.9 14.8 9.9s1.1 12.9-3.5 17.4l-64 64c-6.2 6.2-16.4 6.2-22.6 0l-64-64c-4.6-4.6-5.9-11.5-3.5-17.4zM384 480L64 480c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l320 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64zM160 160l0-64-96 0 0 64 96 0z\"]\n};\nvar faHeadSideCoughSlash = {\n  prefix: 'fas',\n  iconName: 'head-side-cough-slash',\n  icon: [576, 512, [], \"e062\", \"M535-24.9c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L41 537.1c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l25-25 0-447.2c0-15 10.5-28.3 25.4-29.8 7.4-.7 14.9-1.1 22.6-1.1 112.7 0 206 83.3 221.7 191.7 .4 3 1.7 5.9 3.6 8.3l2.2 2.6 227.5-227.5zM133.8 512L288 357.8 288 416c0 53-43 96-96 96l-58.2 0zM176 224a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm336 40a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm-88 72a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm-64 48a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm128 0a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm24 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm-88-24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nvar faDiagramProject = {\n  prefix: 'fas',\n  iconName: 'diagram-project',\n  icon: [512, 512, [\"project-diagram\"], \"f542\", \"M0 80C0 53.5 21.5 32 48 32l96 0c26.5 0 48 21.5 48 48l0 16 128 0 0-16c0-26.5 21.5-48 48-48l96 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-96 0c-26.5 0-48-21.5-48-48l0-16-128 0 0 16c0 7.3-1.7 14.3-4.6 20.5l68.6 91.5 80 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-96 0c-26.5 0-48-21.5-48-48l0-96c0-7.3 1.7-14.3 4.6-20.5L128 224 48 224c-26.5 0-48-21.5-48-48L0 80z\"]\n};\nvar faProjectDiagram = faDiagramProject;\nvar faTerminal = {\n  prefix: 'fas',\n  iconName: 'terminal',\n  icon: [512, 512, [], \"f120\", \"M9.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L146.7 256 9.4 118.6zM224 384l256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nvar faHouseFire = {\n  prefix: 'fas',\n  iconName: 'house-fire',\n  icon: [640, 512, [], \"e50c\", \"M448 192c14.1 .4 23.8 11.4 32.7 21.7 2 2.3 4 4.6 6 6.7l19 19.9 12.2-13.8c5.4-6.1 13.3-8.9 20.9-8.9 7.2 0 14.3 2.6 19.9 7.8 19.7 18.3 39.8 43.2 55 70.6 15.1 27.2 26.2 58.2 26.2 88.2 0 88.7-71.3 159.8-160 159.8-89.6 0-160-71.3-160-159.8 0-37.3 16-73.4 36.8-104.5 20.9-31.3 47.5-59 70.9-80.1 5.7-5.2 13.1-7.7 20.3-7.5zM268.6 6.5c12.2-9.3 29.7-8.7 41.2 2l147.5 137c-19.2-4.3-40 .5-55.5 14.4-36.4 32.6-67.7 69.8-90.3 106.4-10.3 16.6-19.7 34.9-26.8 53.7L272 320c-26.5 0-48 21.5-48 48l0 96 64.6 0c7.3 17.2 16.8 33.4 28.2 48L144 512c-35.3 0-64-28.7-64-64l0-176-16 0c-13.2 0-25-8.1-29.8-20.3s-1.6-26.2 8-35.1l224-208 2.4-2zM489.3 343.7c-5.4-4.7-13.1-4.7-18.5 0-17.7 15.4-54.7 51.9-54.7 88.4 0 35.3 28.7 64 64 64s64-28.7 64-64c0-36.5-37-73-54.7-88.4z\"]\n};\nvar faMask = {\n  prefix: 'fas',\n  iconName: 'mask',\n  icon: [576, 512, [], \"f6fa\", \"M288 64C64 64 0 160 0 272S80 448 176 448l8.4 0c24.2 0 46.4-13.7 57.2-35.4l23.2-46.3c4.4-8.8 13.3-14.3 23.2-14.3s18.8 5.5 23.2 14.3l23.2 46.3c10.8 21.7 33 35.4 57.2 35.4l8.4 0c96 0 176-64 176-176S512 64 288 64zM96 256a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zm320-64a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"]\n};\nvar faHurricane = {\n  prefix: 'fas',\n  iconName: 'hurricane',\n  icon: [384, 512, [], \"f751\", \"M0 208C0 104.4 75.7 18.5 174.9 2.6 184 1.2 192 8.6 192 17.9l0 63.3c0 8.4 6.5 15.3 14.7 16.5 100.3 14.9 177.3 101.3 177.3 205.7 0 103.6-75.7 189.5-174.9 205.4-9.2 1.5-17.1-5.9-17.1-15.2l0-63.3C192 421.9 185.5 415 177.3 413.7 77 398.9 0 312.4 0 208zm288 48a96 96 0 1 0 -192 0 96 96 0 1 0 192 0zm-96-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faEarthAfrica = {\n  prefix: 'fas',\n  iconName: 'earth-africa',\n  icon: [512, 512, [127757, \"globe-africa\"], \"f57c\", \"M447.6 175c-31.6-74.6-105.5-127-191.6-127-22.1 0-43.4 3.5-63.4 9.8-.4 2-.6 4.1-.6 6.2l0 73.4c0 12.5 10.1 22.6 22.6 22.6 6 0 11.8-2.4 16-6.6l16-16c6-6 14.1-9.4 22.6-9.4l5.5 0c28.5 0 42.8 34.5 22.6 54.6-6 6-14.1 9.4-22.6 9.4l-61.5 0c-8.5 0-16.6 3.4-22.6 9.4l-21.3 21.3c-6 6-9.4 14.1-9.4 22.6l0 42.7c0 17.7 14.3 32 32 32l32 0c17.7 0 32 14.3 32 32l0 32c0 17.7 14.3 32 32 32l2.7 0c8.5 0 16.6-3.4 22.6-9.4l29.3-29.3c6-6 9.4-14.1 9.4-22.6l0-18.7c0-8.8 7.2-16 16-16s16-7.2 16-16l0-34.7c0-8.5-3.4-16.6-9.4-22.6l-16-16c-4.2-4.2-6.6-10-6.6-16 0-12.5 10.1-22.6 22.6-22.6l45 0c12.4 0 22.7-7.1 28-17zM0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0z\"]\n};\nvar faGlobeAfrica = faEarthAfrica;\nvar faThumbtack = {\n  prefix: 'fas',\n  iconName: 'thumbtack',\n  icon: [384, 512, [128204, 128392, \"thumb-tack\"], \"f08d\", \"M32 32C32 14.3 46.3 0 64 0L320 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-29.5 0 10.3 134.1c37.1 21.2 65.8 56.4 78.2 99.7l3.8 13.4c2.8 9.7 .8 20-5.2 28.1S362 352 352 352L32 352c-10 0-19.5-4.7-25.5-12.7s-8-18.4-5.2-28.1L5 297.8c12.4-43.3 41-78.5 78.2-99.7L93.5 64 64 64C46.3 64 32 49.7 32 32zM160 400l64 0 0 112c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-112z\"]\n};\nvar faThumbTack = faThumbtack;\nvar faHandPointDown = {\n  prefix: 'fas',\n  iconName: 'hand-point-down',\n  icon: [384, 512, [], \"f0a7\", \"M32 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-208-64 0 0 208zM224 320c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64zm-64 64c17.7 0 32-14.3 32-32l0-48c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 48c0 17.7 14.3 32 32 32zm160-96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64zm-96-88l0 .6c9.4-5.4 20.3-8.6 32-8.6 13.2 0 25.4 4 35.6 10.8 8.7-24.9 32.5-42.8 60.4-42.8 11.7 0 22.6 3.1 32 8.6l0-8.6C384 71.6 312.4 0 224 0L162.3 0C119.8 0 79.1 16.9 49.1 46.9L37.5 58.5C13.5 82.5 0 115.1 0 149l0 27c0 35.3 28.7 64 64 64l88 0c22.1 0 40-17.9 40-40s-17.9-40-40-40l-56 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l56 0c39.8 0 72 32.2 72 72z\"]\n};\nvar faFaceMehBlank = {\n  prefix: 'fas',\n  iconName: 'face-meh-blank',\n  icon: [512, 512, [128566, \"meh-blank\"], \"f5a4\", \"M0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zm208-48a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm128 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nvar faMehBlank = faFaceMehBlank;\nvar faTemperatureEmpty = {\n  prefix: 'fas',\n  iconName: 'temperature-empty',\n  icon: [320, 512, [\"temperature-0\", \"thermometer-0\", \"thermometer-empty\"], \"f2cb\", \"M64 96c0-53 43-96 96-96s96 43 96 96l0 164.7c29.5 26.4 48 64.7 48 107.3 0 79.5-64.5 144-144 144S16 447.5 16 368c0-42.6 18.5-81 48-107.3L64 96zm96 336c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z\"]\n};\nvar faTemperature0 = faTemperatureEmpty;\nvar faThermometer0 = faTemperatureEmpty;\nvar faThermometerEmpty = faTemperatureEmpty;\nvar faBorderNone = {\n  prefix: 'fas',\n  iconName: 'border-none',\n  icon: [448, 512, [], \"f850\", \"M32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zM160 32a32 32 0 1 0 0 64 32 32 0 1 0 0-64zM288 416c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zM160 480c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zM288 32a32 32 0 1 0 0 64 32 32 0 1 0 0-64zM416 480c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm0-384a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM32 32a32 32 0 1 0 0 64 32 32 0 1 0 0-64zM416 352a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM32 160a32 32 0 1 0 0 64 32 32 0 1 0 0-64zm0 192a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM416 160a32 32 0 1 0 0 64 32 32 0 1 0 0-64z\"]\n};\nvar faHighlighter = {\n  prefix: 'fas',\n  iconName: 'highlighter',\n  icon: [576, 512, [], \"f591\", \"M315 315L473.4 99.9 444.1 70.6 229 229 315 315zm-187 5l0 0 0-71.7c0-15.3 7.2-29.6 19.5-38.6L420.6 8.4C428 2.9 437 0 446.2 0 457.6 0 468.5 4.5 476.6 12.6l54.8 54.8c8.1 8.1 12.6 19 12.6 30.5 0 9.2-2.9 18.2-8.4 25.6L334.4 396.5c-9 12.3-23.4 19.5-38.6 19.5l-71.7 0-25.4 25.4c-12.5 12.5-32.8 12.5-45.3 0l-50.7-50.7c-12.5-12.5-12.5-32.8 0-45.3L128 320zM7 466.3l51.7-51.7 70.6 70.6-19.7 19.7c-4.5 4.5-10.6 7-17 7L24 512c-13.3 0-24-10.7-24-24l0-4.7c0-6.4 2.5-12.5 7-17z\"]\n};\nvar faMoneyBillWave = {\n  prefix: 'fas',\n  iconName: 'money-bill-wave',\n  icon: [512, 512, [], \"f53a\", \"M0 419.6L0 109.5c0-23.2 24.1-38.6 46.3-32 87.7 26.2 149.7 5.5 212.1-15.3 64.5-21.5 129.4-43.1 223.3-13.1 18.5 5.9 30.3 23.8 30.3 43.3l0 310.1c0 23.2-24.1 38.6-46.2 32-87.7-26.2-149.8-5.5-212.1 15.3-64.5 21.5-129.4 43.1-223.3 13.1-18.5-5.9-30.3-23.8-30.3-43.3zM336 256c0-53-35.8-96-80-96s-80 43-80 96 35.8 96 80 96 80-43 80-96zM120 413.6c4.4 0 7.9-3.8 7.2-8.1-4.6-27.8-27-49.5-55.2-53-4.4-.5-8 3.1-8 7.5l0 39.9c0 3.6 2.4 6.8 6 7.7 17.9 4.2 34.3 6.1 50 6.1zm318.5-51.1c5 .8 9.5-3 9.5-8l0-42.6c0-4.4-3.6-8.1-8-7.5-25.2 3.1-45.9 20.9-53.2 44.6-1.4 4.7 2.3 9.1 7.2 9.2 14.2 .4 29 1.7 44.4 4.3zM448 152l0-39.9c0-3.6-2.5-6.8-6-7.7-17.9-4.2-34.3-6.1-50-6.1-4.4 0-7.9 3.8-7.2 8.1 4.6 27.8 27 49.5 55.2 53 4.4 .5 8-3.1 8-7.5zM125.2 162.9c1.4-4.7-2.3-9.1-7.2-9.2-14.2-.4-29-1.7-44.4-4.3-5-.8-9.5 3-9.5 8L64 200c0 4.4 3.6 8.1 8 7.5 25.2-3.1 45.9-20.9 53.2-44.6z\"]\n};\nvar faToiletPaperSlash = {\n  prefix: 'fas',\n  iconName: 'toilet-paper-slash',\n  icon: [576, 512, [], \"e072\", \"M41-24.9c-9.4-9.4-24.6-9.4-33.9 0S-2.3-.3 7 9.1l528 528c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-94.5-94.5c40.2-23 69.5-96.9 69.5-184.6 0-106-43-192-96-192s-96 86-96 192c0 24.1 2.2 47.2 6.3 68.4L304 238.2 304 224c0-58.9 11.8-114.5 33.2-157.2 5.9-11.7 13.1-23.7 21.9-34.8L128 32c-8.3 0-16.4 2.1-24.1 6.1l-63-63zM32 224l0 264c0 30.9 25.1 56 56 56l160 0c30.9 0 56-25.1 56-56l0-114.2-256-256C37.9 148.2 32 184.7 32 224zm416 64c-17.7 0-32-28.7-32-64s14.3-64 32-64 32 28.7 32 64-14.3 64-32 64z\"]\n};\nvar faFileShield = {\n  prefix: 'fas',\n  iconName: 'file-shield',\n  icon: [576, 512, [], \"e4f0\", \"M96 0C60.7 0 32 28.7 32 64l0 384c0 35.3 28.7 64 64 64l201.2 0C261 469.4 240 414.5 240 356.4l0-31.1c0-34.4 22-65 54.7-75.9l112-37.3c3.1-1 6.2-1.8 9.3-2.5l0-39.1c0-17-6.7-33.3-18.7-45.3L290.7 18.7C278.7 6.7 262.5 0 245.5 0L96 0zM357.5 176L264 176c-13.3 0-24-10.7-24-24L240 58.5 357.5 176zm87.8 312.5l-13.3 6.3 0-188.1 96 32 0 19.6c0 55.8-32.2 106.5-82.7 130.3zM421.9 259.5l-112 37.3c-13.1 4.4-21.9 16.6-21.9 30.4l0 31.1c0 74.4 43 142.1 110.2 173.7l18.5 8.7c4.8 2.2 10 3.4 15.2 3.4s10.5-1.2 15.2-3.4l18.5-8.7C533 500.3 576 432.6 576 358.2l0-31.1c0-13.8-8.8-26-21.9-30.4l-112-37.3c-6.6-2.2-13.7-2.2-20.2 0z\"]\n};\nvar faTextHeight = {\n  prefix: 'fas',\n  iconName: 'text-height',\n  icon: [576, 512, [], \"f034\", \"M40 32C17.9 32 0 49.9 0 72l0 56c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 64 0 0 320-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-320 64 0 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-56c0-22.1-17.9-40-40-40L40 32zM438.6 361.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-9.4 9.4 0-229.5 9.4 9.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-64-64c-6-6-14.1-9.4-22.6-9.4s-16.6 3.4-22.6 9.4l-64 64c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l9.4-9.4 0 229.5-9.4-9.4z\"]\n};\nvar faFaceGrinTongue = {\n  prefix: 'fas',\n  iconName: 'face-grin-tongue',\n  icon: [512, 512, [128539, \"grin-tongue\"], \"f589\", \"M0 256c0 104.4 62.5 194.2 152.2 234.1-5.3-13-8.2-27.2-8.2-42.1l0-61.7c-16.9-16.5-30.1-36.7-38.3-59.3-4.3-11.8 7.7-21.8 19.6-18.1 39.2 12.2 83.7 19.1 130.7 19.1s91.5-6.9 130.7-19.1c11.9-3.7 23.9 6.3 19.6 18.1-8.3 22.6-21.5 42.8-38.3 59.3l0 61.7c0 14.9-2.9 29.1-8.2 42.1 89.7-39.8 152.2-129.6 152.2-234.1 0-141.4-114.6-256-256-256S0 114.6 0 256zm176-80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm16 240l0-45.4c0-14.7-11.9-26.6-26.6-26.6l-2 0c-11.3 0-21.1 7.9-23.6 18.9-2.8 12.6-20.8 12.6-23.6 0-2.5-11.1-12.3-18.9-23.6-18.9l-2 0c-14.7 0-26.6 11.9-26.6 26.6l0 45.4c0 35.3 28.7 64 64 64s64-28.7 64-64z\"]\n};\nvar faGrinTongue = faFaceGrinTongue;\nvar faFileSignature = {\n  prefix: 'fas',\n  iconName: 'file-signature',\n  icon: [640, 512, [], \"f573\", \"M64.1 64c0-35.3 28.7-64 64-64L277.6 0c17 0 33.3 6.7 45.3 18.7L429.3 125.3c12 12 18.7 28.3 18.7 45.3l0 97.5-132 132-42.1 0-16.1-53.6c-4.7-15.7-19.1-26.4-35.5-26.4-11.3 0-21.9 5.1-28.9 13.9L133.3 409c-8.3 10.3-6.6 25.5 3.7 33.7s25.5 6.6 33.7-3.8l47.1-58.8 15.2 50.7c3 10.2 12.4 17.1 23 17.1l31.5 0c-.9 3.1-1.7 6.3-2.3 9.5l-10.9 54.5-146.2 0c-35.3 0-64-28.7-64-64l0-384zm208-5.5l0 93.5c0 13.3 10.7 24 24 24l93.5 0-117.5-117.5zm60.2 408.4c2.5-12.4 8.6-23.8 17.5-32.7l118.9-118.9 80 80-118.9 118.9c-8.9 8.9-20.3 15-32.7 17.5l-59.6 11.9c-.9 .2-1.9 .3-2.9 .3-8 0-14.6-6.5-14.6-14.6 0-1 .1-1.9 .3-2.9l11.9-59.6zm267.8-123l-28.8 28.8-80-80 28.8-28.8c22.1-22.1 57.9-22.1 80 0s22.1 57.9 0 80z\"]\n};\nvar faBuildingWheat = {\n  prefix: 'fas',\n  iconName: 'building-wheat',\n  icon: [640, 512, [], \"e4db\", \"M96 0C60.7 0 32 28.7 32 64l0 384c0 35.3 28.7 64 64 64l249.3 0c-6-14.8-9.3-31-9.3-48 0-17.7 7.2-33.7 18.8-45.3-11.9-19.4-18.8-42.3-18.8-66.7 0-17.7 7.2-33.7 18.8-45.3-11.9-19.4-18.8-42.3-18.8-66.7 0-25.2 14.5-46.9 35.6-57.4-2.4-7.1-3.6-14.7-3.6-22.6l0-32C368 96.7 388 70.1 415.9 60.1 413.9 26.6 386 0 352 0L96 0zM208 352l32 0c17.7 0 32 14.3 32 32l0 80-96 0 0-80c0-17.7 14.3-32 32-32zM128 112c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM128 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm144-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm352 0l-16 0c-44.2 0-80 35.8-80 80 0 8.8 7.2 16 16 16l16 0c44.2 0 80-35.8 80-80 0-8.8-7.2-16-16-16zm16 128c0-8.8-7.2-16-16-16l-16 0c-44.2 0-80 35.8-80 80 0 8.8 7.2 16 16 16l16 0c44.2 0 80-35.8 80-80zm0 112c0-8.8-7.2-16-16-16l-16 0c-44.2 0-80 35.8-80 80 0 8.8 7.2 16 16 16l16 0c44.2 0 80-35.8 80-80zM496 528c0-44.2-35.8-80-80-80l-16 0c-8.8 0-16 7.2-16 16 0 44.2 35.8 80 80 80l16 0c8.8 0 16-7.2 16-16zm-16-96c8.8 0 16-7.2 16-16 0-44.2-35.8-80-80-80l-16 0c-8.8 0-16 7.2-16 16 0 44.2 35.8 80 80 80l16 0zm16-128c0-44.2-35.8-80-80-80l-16 0c-8.8 0-16 7.2-16 16 0 44.2 35.8 80 80 80l16 0c8.8 0 16-7.2 16-16zM512 64c-13.3 0-24 10.7-24 24l0 104c0 13.3 10.7 24 24 24s24-10.7 24-24l0-104c0-13.3-10.7-24-24-24zm96 64c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 32c0 13.3 10.7 24 24 24s24-10.7 24-24l0-32zM440 104c-13.3 0-24 10.7-24 24l0 32c0 13.3 10.7 24 24 24s24-10.7 24-24l0-32c0-13.3-10.7-24-24-24z\"]\n};\nvar faPlugCircleMinus = {\n  prefix: 'fas',\n  iconName: 'plug-circle-minus',\n  icon: [640, 512, [], \"e55e\", \"M192-32c17.7 0 32 14.3 32 32l0 96 128 0 0-96c0-17.7 14.3-32 32-32s32 14.3 32 32l0 96 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 48.7c-98.6 8.1-176 90.7-176 191.3 0 27.3 5.7 53.3 16 76.9l0 3.1c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-66.7C165.2 398.1 96 319.1 96 224l0-64c-17.7 0-32-14.3-32-32S78.3 96 96 96l64 0 0-96c0-17.7 14.3-32 32-32zM352 400a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm224 0c0-8.8-7.2-16-16-16l-128 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l128 0c8.8 0 16-7.2 16-16z\"]\n};\nvar faFutbol = {\n  prefix: 'fas',\n  iconName: 'futbol',\n  icon: [512, 512, [9917, \"futbol-ball\", \"soccer-ball\"], \"f1e3\", \"M417.3 360.1l-71.6-4.8c-5.2-.3-10.3 1.1-14.5 4.2s-7.2 7.4-8.4 12.5l-17.6 69.6C289.5 445.8 273 448 256 448s-33.5-2.2-49.2-6.4L189.2 372c-1.3-5-4.3-9.4-8.4-12.5s-9.3-4.5-14.5-4.2l-71.6 4.8c-17.6-27.2-28.5-59.2-30.4-93.6L125 228.3c4.4-2.8 7.6-7 9.2-11.9s1.4-10.2-.5-15l-26.7-66.6C128 109.2 155.3 89 186.7 76.9l55.2 46c4 3.3 9 5.1 14.1 5.1s10.2-1.8 14.1-5.1l55.2-46c31.3 12.1 58.7 32.3 79.6 57.9l-26.7 66.6c-1.9 4.8-2.1 10.1-.5 15s4.9 9.1 9.2 11.9l60.7 38.2c-1.9 34.4-12.8 66.4-30.4 93.6zM256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zm14.1-325.7c-8.4-6.1-19.8-6.1-28.2 0L194 221c-8.4 6.1-11.9 16.9-8.7 26.8l18.3 56.3c3.2 9.9 12.4 16.6 22.8 16.6l59.2 0c10.4 0 19.6-6.7 22.8-16.6l18.3-56.3c3.2-9.9-.3-20.7-8.7-26.8l-47.9-34.8z\"]\n};\nvar faFutbolBall = faFutbol;\nvar faSoccerBall = faFutbol;\nvar faCirclePlus = {\n  prefix: 'fas',\n  iconName: 'circle-plus',\n  icon: [512, 512, [\"plus-circle\"], \"f055\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM232 344l0-64-64 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l64 0 0-64c0-13.3 10.7-24 24-24s24 10.7 24 24l0 64 64 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-64 0 0 64c0 13.3-10.7 24-24 24s-24-10.7-24-24z\"]\n};\nvar faPlusCircle = faCirclePlus;\nvar faBrazilianRealSign = {\n  prefix: 'fas',\n  iconName: 'brazilian-real-sign',\n  icon: [512, 512, [], \"e46c\", \"M400 16c17.7 0 32 14.3 32 32l0 16 16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-48.9 0c-26 0-47.1 21.1-47.1 47.1 0 22.5 15.9 41.8 37.9 46.2l32.8 6.6c51.9 10.4 89.3 56 89.3 109 0 50.6-33.8 93.3-80 106.7l0 20.4c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-16-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64.9 0c26 0 47.1-21.1 47.1-47.1 0-22.5-15.9-41.8-37.9-46.2l-32.8-6.6c-51.9-10.4-89.3-56-89.3-109 0-50.6 33.8-93.2 80-106.7L368 48c0-17.7 14.3-32 32-32zM0 64C0 46.3 14.3 32 32 32l80 0c79.5 0 144 64.5 144 144 0 54.3-30 101.5-74.4 126.1l41 136.7c5.1 16.9-4.5 34.8-21.5 39.8s-34.8-4.5-39.8-21.5L120.1 319.8c-2.7 .1-5.4 .2-8.1 .2l-48 0 0 128c0 17.7-14.3 32-32 32S0 465.7 0 448L0 64zM64 256l48 0c44.2 0 80-35.8 80-80s-35.8-80-80-80l-48 0 0 160z\"]\n};\nvar faStarAndCrescent = {\n  prefix: 'fas',\n  iconName: 'star-and-crescent',\n  icon: [512, 512, [9770], \"f699\", \"M0 256c0-141.4 114.6-256 256-256 33 0 64.6 6.3 93.6 17.7 7.4 2.9 11.5 10.7 9.8 18.4s-8.8 13-16.7 12.4c-4.8-.3-9.7-.5-14.6-.5-114.9 0-208 93.1-208 208s93.1 208 208 208c4.9 0 9.8-.2 14.6-.5 7.9-.5 15 4.7 16.7 12.4s-2.4 15.5-9.8 18.4C320.6 505.7 289 512 256 512 114.6 512 0 397.4 0 256zM375.4 137.4c3.5-7.1 13.7-7.1 17.2 0l31.5 63.8c1.4 2.8 4.1 4.8 7.2 5.3l70.4 10.2c7.9 1.1 11 10.8 5.3 16.4l-50.9 49.6c-2.3 2.2-3.3 5.4-2.8 8.5l12 70.1c1.3 7.8-6.9 13.8-13.9 10.1l-63-33.1c-2.8-1.5-6.1-1.5-8.9 0l-63 33.1c-7 3.7-15.3-2.3-13.9-10.1l12-70.1c.5-3.1-.5-6.3-2.8-8.5L261 233.1c-5.7-5.6-2.6-15.2 5.3-16.4l70.4-10.2c3.1-.5 5.8-2.4 7.2-5.3l31.5-63.8z\"]\n};\nvar faFaceSurprise = {\n  prefix: 'fas',\n  iconName: 'face-surprise',\n  icon: [512, 512, [128558, \"surprise\"], \"f5c2\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM176 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm-48 80a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"]\n};\nvar faSurprise = faFaceSurprise;\nvar faHospitalUser = {\n  prefix: 'fas',\n  iconName: 'hospital-user',\n  icon: [640, 512, [], \"f80d\", \"M64 64C64 28.7 92.7 0 128 0L384 0c35.3 0 64 28.7 64 64l0 121.3c-46.9 19-80 65-80 118.7 0 27.7 8.8 53.4 23.8 74.4-51.5 21-87.8 71.6-87.8 130.7 0 1 0 1.9 0 2.9l-176 0c-35.3 0-64-28.7-64-64L64 64zM208 400l0 64 53.4 0c7.2-29.4 21.3-56.1 40.4-78.3-6.1-19.5-24.3-33.7-45.8-33.7-26.5 0-48 21.5-48 48zM248 88c-8.8 0-16 7.2-16 16l0 32-32 0c-8.8 0-16 7.2-16 16l0 16c0 8.8 7.2 16 16 16l32 0 0 32c0 8.8 7.2 16 16 16l16 0c8.8 0 16-7.2 16-16l0-32 32 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-32 0 0-32c0-8.8-7.2-16-16-16l-16 0zM416 304a80 80 0 1 1 160 0 80 80 0 1 1 -160 0zM352 512c0-53 43-96 96-96l96 0c53 0 96 43 96 96 0 17.7-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32z\"]\n};\nvar faArrowDownUpLock = {\n  prefix: 'fas',\n  iconName: 'arrow-down-up-lock',\n  icon: [576, 512, [], \"e4b0\", \"M262.6 422.6l-80 80c-12.5 12.5-32.8 12.5-45.3 0l-80-80c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l25.4 25.4 0-114.7-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l256 0 0-114.7-25.4 25.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l80-80c12.5-12.5 32.8-12.5 45.3 0l80 80c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-25.4-25.4 0 94.8c-25.3 20.3-42.8 50.1-47 83.9l-145 0 0 114.7 25.4-25.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zM192 32l0 144-64 0 0-144c0-17.7 14.3-32 32-32s32 14.3 32 32zM496 304.1c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 47.9 64 0 0-47.9zM352 400c0-20.9 13.4-38.7 32-45.3l0-50.6c0-44.2 35.8-80 80-80s80 35.8 80 80l0 50.6c18.6 6.6 32 24.4 32 45.3l0 96c0 26.5-21.5 48-48 48l-128 0c-26.5 0-48-21.5-48-48l0-96z\"]\n};\nvar faFolder = {\n  prefix: 'fas',\n  iconName: 'folder',\n  icon: [512, 512, [128193, 128447, 61716, \"folder-blank\"], \"f07b\", \"M64 448l384 0c35.3 0 64-28.7 64-64l0-240c0-35.3-28.7-64-64-64L298.7 80c-6.9 0-13.7-2.2-19.2-6.4L241.1 44.8C230 36.5 216.5 32 202.7 32L64 32C28.7 32 0 60.7 0 96L0 384c0 35.3 28.7 64 64 64z\"]\n};\nvar faFolderBlank = faFolder;\nvar faHollyBerry = {\n  prefix: 'fas',\n  iconName: 'holly-berry',\n  icon: [512, 512, [], \"f7aa\", \"M256.2 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-80 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM277 383.8c1 .1 2.1 .2 3.2 .2 39.8 0 72 32.2 72 72l0 22.7c0 16.4 16 27.9 31.6 22.8l12.8-4.3c18-6 37.3-6.5 55.6-1.5l19.4 5.3c17.9 4.9 34.4-11.6 29.5-29.5L495.9 452c-5-18.3-4.4-37.6 1.5-55.6l4.3-12.8c5.2-15.5-6.4-31.6-22.8-31.6-34.6 0-62.7-28.1-62.7-62.7l0-32c0-16.4-16-27.9-31.6-22.8l-12.8 4.3c-18 6-37.3 6.5-55.6 1.5l-29.6-8.1c-2.9-.8-5.9-1-8.7-.7 4.2 9.7 5.8 20.8 3.7 32.3l-6.3 34.8c-1.5 8.4-1.4 17 .5 25.3l5.3 23.9c2.8 12.7 1.1 25.2-4 35.9zM127.8 234.5c-15.5-5.2-31.6 6.4-31.6 22.8l0 32c0 34.6-28.1 62.7-62.7 62.7-16.4 0-27.9 16-22.8 31.6L15 396.4c6 18 6.5 37.3 1.5 55.6l-5.3 19.4C6.4 489.4 22.8 505.8 40.7 501l19.4-5.3c18.3-5 37.6-4.5 55.6 1.5l12.8 4.3c15.5 5.2 31.6-6.4 31.6-22.8l0-32c0-34.6 28.1-62.7 62.7-62.7 16.4 0 27.9-16 22.8-31.6l-4.3-12.8c-6-18-6.5-37.3-1.5-55.6l5.3-19.4c4.9-17.9-11.6-34.4-29.5-29.5l-19.4 5.3c-18.3 5-37.6 4.4-55.6-1.5l-12.8-4.3zM384.2 144a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"]\n};\nvar faVenusDouble = {\n  prefix: 'fas',\n  iconName: 'venus-double',\n  icon: [640, 512, [9890], \"f226\", \"M192 288a112 112 0 1 0 0-224 112 112 0 1 0 0 224zM368 176c0 86.3-62.1 158.1-144.1 173.1 .1 1 .1 1.9 .1 2.9l0 64 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-64c0-1 0-1.9 .1-2.9-82-15-144.1-86.8-144.1-173.1 0-97.2 78.8-176 176-176S368 78.8 368 176zM357.5 327c14.4-15.8 26.6-33.7 36.1-53.1 16.1 9 34.7 14.1 54.5 14.1 61.9 0 112-50.1 112-112S509.9 64 448 64c-19.8 0-38.3 5.1-54.5 14.1-9.5-19.4-21.6-37.3-36.1-53.1 26.4-15.9 57.4-25 90.5-25 97.2 0 176 78.8 176 176 0 86.3-62.1 158.1-144.1 173.1 .1 .9 .1 1.9 .1 2.9l0 64 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-64c0-1 0-1.9 .1-2.9-21.1-3.9-40.9-11.5-58.6-22.2z\"]\n};\nvar faClipboardQuestion = {\n  prefix: 'fas',\n  iconName: 'clipboard-question',\n  icon: [384, 512, [], \"e4e3\", \"M311.4 32l8.6 0c35.3 0 64 28.7 64 64l0 352c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l8.6 0C83.6 12.9 104.3 0 128 0L256 0c23.7 0 44.4 12.9 55.4 32zM248 112c13.3 0 24-10.7 24-24s-10.7-24-24-24L136 64c-13.3 0-24 10.7-24 24s10.7 24 24 24l112 0zM192 248c16.1 0 29.2 13.1 29.2 29.2 0 8.7-3.1 13.9-6.9 17.7-4.5 4.4-10.7 7.5-16.8 9.5-14.9 5-29.5 19.3-29.5 39.5 0 13.3 10.7 24 24 24 11.5 0 21.2-8.1 23.5-19 19.2-7.1 53.7-26.3 53.7-71.8 0-42.6-34.6-77.2-77.2-77.2s-77.2 34.6-77.2 77.2c0 13.3 10.7 24 24 24s24-10.7 24-24c0-16.1 13.1-29.2 29.2-29.2zm28 168c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28z\"]\n};\nvar faHotdog = {\n  prefix: 'fas',\n  iconName: 'hotdog',\n  icon: [512, 512, [127789], \"f80f\", \"M288 0c-20.5 0-40.1 8.1-54.6 22.6L22.6 233.4C8.1 247.9 0 267.5 0 288 0 300.2 2.9 312.1 8.2 322.7L322.7 8.2C312.1 2.9 300.2 0 288 0zM224 512c20.5 0 40.1-8.1 54.6-22.6L489.4 278.6c14.5-14.5 22.6-34.1 22.6-54.6 0-12.2-2.9-24.1-8.2-34.7L189.3 503.8c10.7 5.4 22.6 8.2 34.7 8.2zM456.6 168.6c31.2-31.2 31.2-81.9 0-113.1s-81.9-31.2-113.1 0l-288 288c-31.2 31.2-31.2 81.9 0 113.1s81.9 31.2 113.1 0l288-288z\"]\n};\nvar faArrowUpFromBracket = {\n  prefix: 'fas',\n  iconName: 'arrow-up-from-bracket',\n  icon: [448, 512, [], \"e09a\", \"M246.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 109.3 192 320c0 17.7 14.3 32 32 32s32-14.3 32-32l0-210.7 73.4 73.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-128-128zM64 352c0-17.7-14.3-32-32-32S0 334.3 0 352l0 64c0 53 43 96 96 96l256 0c53 0 96-43 96-96l0-64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64c0 17.7-14.3 32-32 32L96 448c-17.7 0-32-14.3-32-32l0-64z\"]\n};\nvar faMicroscope = {\n  prefix: 'fas',\n  iconName: 'microscope',\n  icon: [512, 512, [128300], \"f610\", \"M176 0c-26.5 0-48 21.5-48 48l0 208c0 26.5 21.5 48 48 48l64 0c26.5 0 48-21.5 48-48l0-64 32 0c70.7 0 128 57.3 128 128S390.7 448 320 448L32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l448 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-16.9 0c30.4-34 48.9-78.8 48.9-128 0-106-86-192-192-192l-32 0 0-80c0-26.5-21.5-48-48-48L176 0zM120 352c-13.3 0-24 10.7-24 24s10.7 24 24 24l176 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-176 0z\"]\n};\nvar faCloud = {\n  prefix: 'fas',\n  iconName: 'cloud',\n  icon: [576, 512, [9729], \"f0c2\", \"M0 336c0 79.5 64.5 144 144 144l304 0c70.7 0 128-57.3 128-128 0-51.6-30.5-96.1-74.5-116.3 6.7-13.1 10.5-28 10.5-43.7 0-53-43-96-96-96-17.7 0-34.2 4.8-48.4 13.1-24.1-45.8-72.2-77.1-127.6-77.1-79.5 0-144 64.5-144 144 0 8 .7 15.9 1.9 23.5-56.9 19.2-97.9 73.1-97.9 136.5z\"]\n};\nvar faBaseballBatBall = {\n  prefix: 'fas',\n  iconName: 'baseball-bat-ball',\n  icon: [576, 512, [], \"f432\", \"M464.1 544a80 80 0 1 1 0-160 80 80 0 1 1 0 160zm8.4-576c15.1 0 29.7 5.8 40.7 16.2l47.2 44.8c12.6 12 19.1 29 17.5 46.3-1.2 13.3-7 25.8-16.5 35.2L363.1 309c-7.3 7.3-15.7 13.4-25 18L206 393c-9.2 4.6-17.7 10.7-25 18l-92 92 1.7 1.8c7.7 9.4 7.1 23.3-1.7 32.1s-22.7 9.3-32.1 1.7l-1.8-1.7-48-48-1.7-1.8c-7.7-9.4-7.1-23.3 1.7-32.1s22.7-9.3 32.1-1.7l1.8 1.7 92-92c7.3-7.3 13.4-15.7 18-25l66.1-132.1c4.6-9.2 10.7-17.7 18-25L430.8-14.7C441.9-25.8 456.9-32 472.5-32z\"]\n};\nvar faCarRear = {\n  prefix: 'fas',\n  iconName: 'car-rear',\n  icon: [512, 512, [\"car-alt\"], \"f5de\", \"M165.4 96l181.2 0c13.6 0 25.7 8.6 30.2 21.4l26.1 74.6-293.8 0 26.1-74.6c4.5-12.8 16.6-21.4 30.2-21.4zm-90.6 .3L39.6 196.8C16.4 206.4 0 229.3 0 256l0 96c0 23.7 12.9 44.4 32 55.4L32 448c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-32 256 0 0 32c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-40.6c19.1-11.1 32-31.7 32-55.4l0-96c0-26.7-16.4-49.6-39.6-59.2L437.2 96.3C423.7 57.8 387.4 32 346.6 32L165.4 32c-40.8 0-77.1 25.8-90.6 64.3zM208 288l96 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-96 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM48 280c0-13.3 10.7-24 24-24l32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0c-13.3 0-24-10.7-24-24zm360-24l32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nvar faCarAlt = faCarRear;\nvar faThumbtackSlash = {\n  prefix: 'fas',\n  iconName: 'thumbtack-slash',\n  icon: [576, 512, [\"thumb-tack-slash\"], \"e68f\", \"M41-24.9c-9.4-9.4-24.6-9.4-33.9 0S-2.3-.3 7 9.1l528 528c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L417.8 352 448 352c10 0 19.5-4.7 25.5-12.7s8-18.4 5.2-28.1L475 297.8c-12.4-43.3-41-78.5-78.2-99.7L386.5 64 416 64c17.7 0 32-14.3 32-32S433.7 0 416 0L160 0c-7.4 0-14.1 2.5-19.5 6.6L190.1 56.3 185.3 119.4 41-24.9zM282.2 352L149.7 219.6c-22.7 20.5-39.8 47.4-48.7 78.3l-3.8 13.4c-2.8 9.7-.8 20 5.2 28.1S118 352 128 352l154.2 0zM256 512c0 17.7 14.3 32 32 32s32-14.3 32-32l0-112-64 0 0 112z\"]\n};\nvar faThumbTackSlash = faThumbtackSlash;\nvar faPlusMinus = {\n  prefix: 'fas',\n  iconName: 'plus-minus',\n  icon: [384, 512, [], \"e43c\", \"M224 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 128-128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l128 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-128 0 0-128zM0 480c0 17.7 14.3 32 32 32l320 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 448c-17.7 0-32 14.3-32 32z\"]\n};\nvar faHouseCircleCheck = {\n  prefix: 'fas',\n  iconName: 'house-circle-check',\n  icon: [640, 512, [], \"e509\", \"M496 544a144 144 0 1 1 0-288 144 144 0 1 1 0 288zM268.6 6.5c12.2-9.3 29.7-8.7 41.2 2l217.6 202c-10.2-1.7-20.7-2.6-31.3-2.6-78.6 0-146.1 47.2-175.8 114.8-5.1-1.8-10.5-2.8-16.2-2.8l-32 0c-26.5 0-48 21.5-48 48l0 96 91 0c6.1 17.3 14.6 33.4 25.1 48L144 512c-35.3 0-64-28.7-64-64l0-176-16 0c-13.2 0-25-8.1-29.8-20.3s-1.6-26.2 8-35.1l224-208 2.4-2zM553.4 339.1c-7.1-5.2-17.1-3.6-22.3 3.5l-53 72.8-26.7-26.8c-6.2-6.2-16.4-6.2-22.6 0-6.2 6.2-6.2 16.4 0 22.6l40 40c3.3 3.3 7.9 5 12.6 4.7s8.9-2.8 11.7-6.6l64-88c5.2-7.1 3.6-17.1-3.5-22.3z\"]\n};\nvar faCalendarDay = {\n  prefix: 'fas',\n  iconName: 'calendar-day',\n  icon: [448, 512, [], \"f783\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 32 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 128C0 92.7 28.7 64 64 64l32 0 0-32c0-17.7 14.3-32 32-32zm0 256c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-64 0z\"]\n};\nvar faLibra = {\n  prefix: 'fas',\n  iconName: 'libra',\n  icon: [512, 512, [], \"e84b\", \"M480 384c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l448 0zM256 32c97.2 0 176 78.8 176 176 0 16.6-2.4 32.7-6.7 48l54.7 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-104.2 0c-11.8 0-22.7-6.5-28.2-16.9s-4.9-23.1 1.6-32.9c11.9-17.8 18.8-39.1 18.8-62.2 0-61.9-50.1-112-112-112S144 146.1 144 208c0 23.1 6.9 44.4 18.8 62.2 6.6 9.8 7.2 22.5 1.6 32.9S148.1 320 136.2 320L32 320c-17.7 0-32-14.3-32-32s14.3-32 32-32l54.8 0c-4.3-15.3-6.8-31.4-6.8-48 0-97.2 78.8-176 176-176z\"]\n};\nvar faCircle = {\n  prefix: 'fas',\n  iconName: 'circle',\n  icon: [512, 512, [128308, 128309, 128992, 128993, 128994, 128995, 128996, 9679, 9898, 9899, 11044, 61708, 61915], \"f111\", \"M0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0z\"]\n};\nvar faMobileVibrate = {\n  prefix: 'fas',\n  iconName: 'mobile-vibrate',\n  icon: [576, 512, [], \"e816\", \"M384 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64l-192 0c-35.3 0-64-28.7-64-64l0-384c0-35.3 28.7-64 64-64L384 0zM248 416c-13.3 0-24 10.7-24 24s10.7 24 24 24l80 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-80 0zM48.8 133.4c9.4-7.7 23.3-7.1 32.1 1.7 9.4 9.4 9.4 24.6 0 33.9l-31 31 25.4 25.4 2.9 3.2c6.3 7.7 9.8 17.4 9.8 27.4 0 11.5-4.6 22.5-12.7 30.6l-25.4 25.4 31 31 1.7 1.8c7.7 9.4 7.1 23.3-1.7 32.1s-22.7 9.3-32.1 1.7L47 377 12.7 342.6C5.6 335.5 1.2 326.2 .2 316.3L0 312 .2 307.7c1-9.9 5.4-19.2 12.5-26.3L38.1 256 12.7 230.6C5.6 223.5 1.2 214.2 .2 204.3L0 200 .2 195.7c1-9.9 5.4-19.2 12.5-26.3L47 135 48.8 133.4zM495 135c8.8-8.8 22.7-9.3 32.1-1.7l1.8 1.7 34.3 34.3c7.1 7.1 11.5 16.4 12.5 26.3l.2 4.3-.2 4.3c-1 9.9-5.4 19.2-12.5 26.3l-25.4 25.4 25.4 25.4c7.1 7.1 11.5 16.4 12.5 26.3l.2 4.3-.2 4.3c-1 9.9-5.4 19.2-12.5 26.3l-34.3 34.3-1.8 1.7c-9.4 7.7-23.3 7.1-32.1-1.7s-9.3-22.7-1.7-32.1l1.7-1.8 31-31-25.4-25.4c-8.1-8.1-12.7-19.1-12.7-30.6 0-10 3.5-19.7 9.8-27.4l2.9-3.2 25.4-25.4-31-31c-9.4-9.4-9.4-24.6 0-33.9z\"]\n};\nvar faFaceGrinSquint = {\n  prefix: 'fas',\n  iconName: 'face-grin-squint',\n  icon: [512, 512, [128518, \"grin-squint\"], \"f585\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM386.7 308.9c11.9-3.7 23.9 6.3 19.6 18.1-22.4 61.3-81.3 105.1-150.3 105.1S128.1 388.2 105.7 326.9c-4.3-11.8 7.7-21.8 19.6-18.1 39.2 12.2 83.7 19.1 130.7 19.1s91.5-6.9 130.7-19.1zM122.6 143.2c4.5-6.8 13.3-9.2 20.6-5.5l79.6 40c5.4 2.7 8.8 8.2 8.8 14.3s-3.4 11.6-8.8 14.3l-79.6 40c-7.3 3.6-16.1 1.3-20.6-5.5s-3.1-15.9 3.1-21.1L159 192 125.8 164.3c-6.2-5.2-7.6-14.3-3.1-21.1zm263.6 21.1L353 192 386.2 219.7c6.2 5.2 7.6 14.3 3.1 21.1s-13.3 9.2-20.6 5.5l-79.6-40c-5.4-2.7-8.8-8.2-8.8-14.3s3.4-11.6 8.8-14.3l79.6-40c7.3-3.6 16.1-1.3 20.6 5.5s3.1 15.9-3.1 21.1z\"]\n};\nvar faGrinSquint = faFaceGrinSquint;\nvar faUsersBetweenLines = {\n  prefix: 'fas',\n  iconName: 'users-between-lines',\n  icon: [576, 512, [], \"e591\", \"M24 16l528 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 64C10.7 64 0 53.3 0 40S10.7 16 24 16zm0 448l528 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 512c-13.3 0-24-10.7-24-24s10.7-24 24-24zM392 192a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zm27.2 100.4c9.1-2.9 18.8-4.4 28.8-4.4 53 0 96 43 96 96l0 10.7c0 11.8-9.6 21.3-21.3 21.3l-78.8 0c2.7-7.5 4.1-15.6 4.1-24l0-8c0-34.1-10.6-65.7-28.8-91.6zm-262.4 0C138.6 318.3 128 349.9 128 384l0 8c0 8.4 1.4 16.5 4.1 24l-78.8 0C41.6 416 32 406.4 32 394.7L32 384c0-53 43-96 96-96 10 0 19.7 1.5 28.8 4.4zM72 192a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zm152-16a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM176 384c0-61.9 50.1-112 112-112s112 50.1 112 112l0 8c0 13.3-10.7 24-24 24l-176 0c-13.3 0-24-10.7-24-24l0-8z\"]\n};\nvar faHouseMedicalCircleXmark = {\n  prefix: 'fas',\n  iconName: 'house-medical-circle-xmark',\n  icon: [640, 512, [], \"e513\", \"M309.8 8.6c-12.3-11.4-31.3-11.4-43.5 0l-224 208c-9.6 9-12.8 22.9-8 35.1S50.8 272 64 272l16 0 0 176c0 35.3 28.7 64 64 64l196 0c-21.2-29.5-34.3-65.3-35.9-104L272 408c-8.8 0-16-7.2-16-16l0-40-40 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l40 0 0-40c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 40 20 0c34.9-48.5 91.7-80 156-80 10.7 0 21.1 .9 31.3 2.5L309.8 8.6zM496 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm22.6-144l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-36.7-36.7-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l36.7-36.7-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l36.7 36.7 36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6L518.6 400z\"]\n};\nvar faTableList = {\n  prefix: 'fas',\n  iconName: 'table-list',\n  icon: [448, 512, [\"th-list\"], \"f00b\", \"M0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm64 0l0 64 64 0 0-64-64 0zm320 0l-192 0 0 64 192 0 0-64zM64 224l0 64 64 0 0-64-64 0zm320 0l-192 0 0 64 192 0 0-64zM64 352l0 64 64 0 0-64-64 0zm320 0l-192 0 0 64 192 0 0-64z\"]\n};\nvar faThList = faTableList;\nvar faFlaskVial = {\n  prefix: 'fas',\n  iconName: 'flask-vial',\n  icon: [640, 512, [], \"e4f3\", \"M184.6 411.5c-3.1 7.3-5.4 14.9-6.8 22.6-14.5 8.8-31.5 13.9-49.8 13.9-53 0-96-43-96-96L32 64C14.3 64 0 49.7 0 32S14.3 0 32 0L224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 255.6-39.4 91.9zM96 64l0 128 64 0 0-128-64 0zM352 0L512 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 153.4 91.3 213c2.3 5.4 3.8 11.1 4.4 17l.3 .6-.3 0c.2 1.8 .3 3.6 .3 5.4 0 32.3-26.2 58.6-58.6 58.6l-266.9 0c-32.3 0-58.6-26.2-58.6-58.6 0-1.8 .1-3.6 .3-5.4l-.3 0 .3-.6c.6-5.8 2.1-11.6 4.4-17L320 217.4 320 64c-17.7 0-32-14.3-32-32S302.3 0 320 0l32 0zM453.2 242.6c-3.4-8-5.2-16.5-5.2-25.2l0-153.4-64 0 0 153.4c0 8.7-1.8 17.2-5.2 25.2l-33.2 77.4 140.7 0-33.2-77.4z\"]\n};\nvar faCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'circle-exclamation',\n  icon: [512, 512, [\"exclamation-circle\"], \"f06a\", \"M256 512a256 256 0 1 1 0-512 256 256 0 1 1 0 512zm0-192a32 32 0 1 0 0 64 32 32 0 1 0 0-64zm0-192c-18.2 0-32.7 15.5-31.4 33.7l7.4 104c.9 12.6 11.4 22.3 23.9 22.3 12.6 0 23-9.7 23.9-22.3l7.4-104c1.3-18.2-13.1-33.7-31.4-33.7z\"]\n};\nvar faExclamationCircle = faCircleExclamation;\nvar faTaxi = {\n  prefix: 'fas',\n  iconName: 'taxi',\n  icon: [512, 512, [128662, \"cab\"], \"f1ba\", \"M192 0c-17.7 0-32 14.3-32 32l0 32-8.9 0c-42 0-79.1 27.3-91.6 67.4l-23 73.5C14.5 219.1 0 243.9 0 272L0 448c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-32 320 0 0 32c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-176c0-28.1-14.5-52.9-36.4-67.1l-23-73.5C440.1 91.3 402.9 64 360.9 64l-8.9 0 0-32c0-17.7-14.3-32-32-32L192 0zM151.1 128l209.9 0c14 0 26.4 9.1 30.5 22.5l13 41.5-296.9 0 13-41.5c4.2-13.4 16.5-22.5 30.5-22.5zM96 272a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm288 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nvar faCab = faTaxi;\nvar faTextSlash = {\n  prefix: 'fas',\n  iconName: 'text-slash',\n  icon: [576, 512, [\"remove-format\"], \"f87d\", \"M41-24.9c-9.4-9.4-24.6-9.4-33.9 0S-2.3-.3 7 9.1l528 528c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L322.7 256.9 368.2 96 471 96 465 120.2c-4.3 17.1 6.1 34.5 23.3 38.8s34.5-6.1 38.8-23.3l11-44.1C545.6 61.3 522.7 32 491.5 32l-319 0c-19.8 0-37.3 12.1-44.5 30.1l-87-87zM180.4 114.5l4.6-18.5 116.7 0-30.8 109-90.5-90.5zM241 310.8L211.3 416 160 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-42.2 0 15.1-53.3-51.9-51.9z\"]\n};\nvar faRemoveFormat = faTextSlash;\nvar faPeoplePulling = {\n  prefix: 'fas',\n  iconName: 'people-pulling',\n  icon: [576, 512, [], \"e535\", \"M80 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM64 128c-35.3 0-64 28.7-64 64L0 320c0 17.7 14.3 32 32 32 9.8 0 18.5-4.4 24.4-11.2L80.4 485.3c2.9 17.4 19.4 29.2 36.8 26.3s29.2-19.4 26.3-36.8l-20.5-122.7 15.7 0 30 134.9c3.8 17.3 20.9 28.1 38.2 24.3s28.1-20.9 24.3-38.2l-57.3-258 116.3 53.8c.5 .3 1.1 .5 1.6 .7 8.6 3.6 18 3.1 25.9-.7 3.4-1.6 6.6-3.9 9.3-6.7 3.1-3.2 5.5-7 7.1-11.4 .1-.3 .2-.7 .3-1l2.5-7.5c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9l-21.4-10.7-15.3-36.8c-17.1-41.1-57.3-67.9-101.9-67.9-22.8 0-45.3 4.8-66.1 14l-8 3.5c-24.4 10.9-44.6 29-58.1 51.6L157.3 136.9C144.7 131 130.9 128 117 128l-53 0zM464 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM349.7 335.6l-25 62.4-59.4 59.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L372.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6z\"]\n};\nvar faBackward = {\n  prefix: 'fas',\n  iconName: 'backward',\n  icon: [576, 512, [9194], \"f04a\", \"M204.3 43.1C215.9 32 233 28.9 247.7 35.2S272 56 272 72l0 136.3 172.3-165.1C455.9 32 473 28.9 487.7 35.2S512 56 512 72l0 368c0 16-9.6 30.5-24.3 36.8s-31.8 3.2-43.4-7.9L272 303.7 272 440c0 16-9.6 30.5-24.3 36.8s-31.8 3.2-43.4-7.9l-192-184C4.5 277.3 0 266.9 0 256s4.5-21.3 12.3-28.9l192-184z\"]\n};\nvar faCarBurst = {\n  prefix: 'fas',\n  iconName: 'car-burst',\n  icon: [640, 512, [\"car-crash\"], \"f5e1\", \"M232 16.1l0-48c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24s24-10.7 24-24zM32 168.1l48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24zM281.5 70.6c9.4 9.4 24.6 9.4 33.9 0l33.9-33.9c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L281.5 36.6c-9.4 9.4-9.4 24.6 0 33.9zm-181 215l33.9-33.9c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L66.6 251.6c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0zM66.6 2.7c-9.4 9.4-9.4 24.6 0 33.9l33.9 33.9c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L100.5 2.7C91.1-6.7 76-6.7 66.6 2.7zM352.9 175.4L505 216.2c6.4 1.7 11.1 7.3 11.8 13.9l7.2 74-231.5-62 43.2-60.5c3.9-5.4 10.7-7.9 17.2-6.2zM223.6 228.5l-2.1 2.9c-21.7 5.5-39.9 22.3-46.1 45.5-4.1 15.5-12.4 46.4-24.8 92.7l-8.3 30.9c-4.6 17.1 5.6 34.6 22.6 39.2l15.5 4.1c17.1 4.6 34.6-5.6 39.2-22.6l8.3-30.9 278.2 74.5-8.3 30.9c-4.6 17.1 5.6 34.6 22.6 39.2l15.5 4.1c17.1 4.6 34.6-5.6 39.2-22.6 4.1-15.5 12.4-46.4 24.8-92.7l8.3-30.9c6.2-23.2-1.1-46.8-17.2-62.5l-.3-3.6-10-103c-3.2-33.2-26.7-60.9-58.9-69.5L369.5 113.6c-32.2-8.6-66.4 3.6-85.8 30.8l-60.2 84.2zm48.7 57.8a32 32 0 1 1 -16.6 61.8 32 32 0 1 1 16.6-61.8zm208.1 88.9a32 32 0 1 1 61.8 16.6 32 32 0 1 1 -61.8-16.6z\"]\n};\nvar faCarCrash = faCarBurst;\nvar faLink = {\n  prefix: 'fas',\n  iconName: 'link',\n  icon: [576, 512, [128279, \"chain\"], \"f0c1\", \"M419.5 96c-16.6 0-32.7 4.5-46.8 12.7-15.8-16-34.2-29.4-54.5-39.5 28.2-24 64.1-37.2 101.3-37.2 86.4 0 156.5 70 156.5 156.5 0 41.5-16.5 81.3-45.8 110.6l-71.1 71.1c-29.3 29.3-69.1 45.8-110.6 45.8-86.4 0-156.5-70-156.5-156.5 0-1.5 0-3 .1-4.5 .5-17.7 15.2-31.6 32.9-31.1s31.6 15.2 31.1 32.9c0 .9 0 1.8 0 2.6 0 51.1 41.4 92.5 92.5 92.5 24.5 0 48-9.7 65.4-27.1l71.1-71.1c17.3-17.3 27.1-40.9 27.1-65.4 0-51.1-41.4-92.5-92.5-92.5zM275.2 173.3c-1.9-.8-3.8-1.9-5.5-3.1-12.6-6.5-27-10.2-42.1-10.2-24.5 0-48 9.7-65.4 27.1L91.1 258.2c-17.3 17.3-27.1 40.9-27.1 65.4 0 51.1 41.4 92.5 92.5 92.5 16.5 0 32.6-4.4 46.7-12.6 15.8 16 34.2 29.4 54.6 39.5-28.2 23.9-64 37.2-101.3 37.2-86.4 0-156.5-70-156.5-156.5 0-41.5 16.5-81.3 45.8-110.6l71.1-71.1c29.3-29.3 69.1-45.8 110.6-45.8 86.6 0 156.5 70.6 156.5 156.9 0 1.3 0 2.6 0 3.9-.4 17.7-15.1 31.6-32.8 31.2s-31.6-15.1-31.2-32.8c0-.8 0-1.5 0-2.3 0-33.7-18-63.3-44.8-79.6z\"]\n};\nvar faChain = faLink;\nvar faBackwardStep = {\n  prefix: 'fas',\n  iconName: 'backward-step',\n  icon: [384, 512, [\"step-backward\"], \"f048\", \"M363 36.8c-12.9-7-28.7-6.3-41 1.8L64 208.1 64 64c0-17.7-14.3-32-32-32S0 46.3 0 64L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-144.1 258 169.6c12.3 8.1 28 8.8 41 1.8s21-20.5 21-35.2l0-368c0-14.7-8.1-28.2-21-35.2z\"]\n};\nvar faStepBackward = faBackwardStep;\nvar faX = {\n  prefix: 'fas',\n  iconName: 'x',\n  icon: [384, 512, [120], \"58\", \"M376.6 84.5c11.3-13.6 9.5-33.8-4.1-45.1s-33.8-9.5-45.1 4.1L192 206 56.6 43.5C45.3 29.9 25.1 28.1 11.5 39.4S-3.9 70.9 7.4 84.5L150.3 256 7.4 427.5c-11.3 13.6-9.5 33.8 4.1 45.1s33.8 9.5 45.1-4.1L192 306 327.4 468.5c11.3 13.6 31.5 15.4 45.1 4.1s15.4-31.5 4.1-45.1L233.7 256 376.6 84.5z\"]\n};\nvar faCircleUser = {\n  prefix: 'fas',\n  iconName: 'circle-user',\n  icon: [512, 512, [62142, \"user-circle\"], \"f2bd\", \"M399 384.2C376.9 345.8 335.4 320 288 320l-64 0c-47.4 0-88.9 25.8-111 64.2 35.2 39.2 86.2 63.8 143 63.8s107.8-24.7 143-63.8zM0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zm256 16a72 72 0 1 0 0-144 72 72 0 1 0 0 144z\"]\n};\nvar faUserCircle = faCircleUser;\nvar faRectangleList = {\n  prefix: 'fas',\n  iconName: 'rectangle-list',\n  icon: [512, 512, [\"list-alt\"], \"f022\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zm96 256a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm-32-96a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm120-56l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm0 128l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nvar faListAlt = faRectangleList;\nvar faHand = {\n  prefix: 'fas',\n  iconName: 'hand',\n  icon: [512, 512, [129306, 9995, \"hand-paper\"], \"f256\", \"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 208c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-176c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 272c0 1.5 0 3.1 .1 4.6L67.6 283c-16-15.2-41.3-14.6-56.6 1.4S-3.6 325.7 12.4 341L124.8 448c43.1 41.1 100.4 64 160 64l19.2 0c97.2 0 176-78.8 176-176l0-208c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 112c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-176c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 176c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-208z\"]\n};\nvar faHandPaper = faHand;\nvar faCancer = {\n  prefix: 'fas',\n  iconName: 'cancer',\n  icon: [512, 512, [], \"e847\", \"M408 152c57.4 0 104 46.6 104 104 0 141.4-114.6 256-256 256-54.3 0-104.8-17-146.3-45.9-14.5-10.1-18-30.1-7.9-44.6s30.1-18 44.6-7.9c31.1 21.7 68.9 34.4 109.7 34.4 67.9 0 127.5-35.3 161.7-88.5-3.2 .3-6.4 .5-9.7 .5-57.4 0-104-46.6-104-104s46.6-104 104-104zM256 0c54.3 0 104.8 17 146.3 45.9 14.5 10.1 18 30.1 7.9 44.6s-30.1 18-44.6 7.9c-31.1-21.7-68.9-34.4-109.7-34.4-67.9 0-127.5 35.2-161.7 88.4 3.2-.3 6.4-.4 9.7-.4 57.4 0 104 46.6 104 104S161.4 360 104 360 0 313.4 0 256C0 254.1 0 252.2 .1 250.4 3.1 111.6 116.5 0 256 0zM104 216a40 40 0 1 0 0 80 40 40 0 1 0 0-80zm304 0a40 40 0 1 0 0 80 40 40 0 1 0 0-80z\"]\n};\nvar faVanShuttle = {\n  prefix: 'fas',\n  iconName: 'van-shuttle',\n  icon: [576, 512, [128656, \"shuttle-van\"], \"f5b6\", \"M64 64C28.7 64 0 92.7 0 128L0 336c0 35.3 28.7 64 64 64l.4 0c4 44.9 41.7 80 87.6 80s83.6-35.1 87.6-80l104.7 0c4 44.9 41.7 80 87.6 80 46.1 0 83.9-35.4 87.7-80.5 31.7-3.8 56.3-30.8 56.3-63.5l0-101.3c0-13.8-4.5-27.3-12.8-38.4l-80-106.7C471.1 73.5 452.1 64 432 64L64 64zM504 224l-120 0 0-96 48 0 72 96zM64 224l0-96 96 0 0 96-96 0zm160 0l0-96 96 0 0 96-96 0zM392 392a40 40 0 1 1 80 0 40 40 0 1 1 -80 0zM152 352a40 40 0 1 1 0 80 40 40 0 1 1 0-80z\"]\n};\nvar faShuttleVan = faVanShuttle;\nvar faStairs = {\n  prefix: 'fas',\n  iconName: 'stairs',\n  icon: [576, 512, [], \"e289\", \"M384 64c0-17.7 14.3-32 32-32l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0 0 96c0 17.7-14.3 32-32 32l-96 0 0 96c0 17.7-14.3 32-32 32l-96 0 0 96c0 17.7-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0 0-96c0-17.7 14.3-32 32-32l96 0 0-96c0-17.7 14.3-32 32-32l96 0 0-96z\"]\n};\nvar faHorseHead = {\n  prefix: 'fas',\n  iconName: 'horse-head',\n  icon: [512, 512, [], \"f7ab\", \"M0 464L0 316.9C0 208.5 68.3 111.8 170.5 75.6L340.2 15.5c21.4-7.6 43.8 8.3 43.8 30.9 0 11-5.5 21.2-14.6 27.3L336 96c48.1 0 91.2 29.8 108.1 74.9l48.6 129.5c11.8 31.4 4.1 66.8-19.6 90.5-16 16-37.8 25.1-60.5 25.1l-3.4 0c-26.1 0-50.9-11.6-67.6-31.7l-32.3-38.7c-11.7 4.1-24.2 6.4-37.3 6.4l-.1 0c-6.3 0-12.5-.5-18.6-1.5-3.6-.6-7.2-1.4-10.7-2.3l0 0c-28.9-7.8-53.1-26.8-67.8-52.2-4.4-7.7-14.2-10.3-21.9-5.8s-10.3 14.2-5.8 21.9c24 41.5 68.3 70 119.3 71.9l47.2 70.8c4 6.1 6.2 13.2 6.2 20.4 0 20.3-16.5 36.8-36.8 36.8L48 512c-26.5 0-48-21.5-48-48zM328 224a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nvar faVault = {\n  prefix: 'fas',\n  iconName: 'vault',\n  icon: [512, 512, [], \"e2c5\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64 0 17.7 14.3 32 32 32s32-14.3 32-32l256 0c0 17.7 14.3 32 32 32s32-14.3 32-32c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM256 256a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zM64 256a128 128 0 1 1 256 0 128 128 0 1 1 -256 0zm384-48c0 17.8-9.7 33.3-24 41.6l0 78.4c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-78.4c-14.3-8.3-24-23.8-24-41.6 0-26.5 21.5-48 48-48s48 21.5 48 48z\"]\n};\nvar faClosedCaptioningSlash = {\n  prefix: 'fas',\n  iconName: 'closed-captioning-slash',\n  icon: [576, 512, [], \"e135\", \"M7-24.9c9.4-9.4 24.6-9.4 33.9 0L129.8 64 480 64c35.3 0 64 28.7 64 64l0 256c0 25.5-14.9 47.4-36.4 57.8L569 503.1c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L7 9.1C-2.3-.3-2.3-15.5 7-24.9zm345 311l0-70.2c0-4.4 3.6-8 8-8l32 0c4.4 0 8 3.6 8 8 0 13.3 10.7 24 24 24s24-10.7 24-24c0-30.9-25.1-56-56-56l-32 0c-30.9 0-56 25.1-56 56l0 22.2 48 48zm61.5 61.5c20.2-8.4 34.5-28.4 34.5-51.7 0-13.3-10.7-24-24-24s-24 10.7-24 24c0 4.4-3.6 8-8 8l-22.2 0 43.7 43.7zM130.3 200.1c-1.5 5-2.3 10.4-2.3 15.9l0 80c0 30.9 25.1 56 56 56l32 0c18.1 0 34.1-8.5 44.4-21.8L378.2 448 96 448c-35.3 0-64-28.7-64-64l0-256c0-7.8 1.4-15.3 4-22.2l94.3 94.3zm93.8 93.8c-.1 .7-.1 1.4-.1 2.1 0 4.4-3.6 8-8 8l-32 0c-4.4 0-8-3.6-8-8l0-50.2 48.1 48.1z\"]\n};\nvar faDrumSteelpan = {\n  prefix: 'fas',\n  iconName: 'drum-steelpan',\n  icon: [576, 512, [], \"f56a\", \"M288 32c159.1 0 288 48 288 128l0 192c0 80-128.9 128-288 128S0 432 0 352L0 160C0 80 128.9 32 288 32zM528 160c0-9.9-8-29.9-55-49.8-18.6-7.9-40.9-14.4-66-19.4l-27.8 43.6c-7.3 11.5-11.2 24.8-11.2 38.4 0 17.5 6.4 34.4 18.1 47.5l9.8 11c29.8-5.2 55.9-12.5 77.2-21.5 47.1-19.9 55-39.9 55-49.8zM349.2 237.3c-8-26.2-32.4-45.3-61.2-45.3s-53.3 19.1-61.2 45.3c19.4 1.7 39.9 2.7 61.2 2.7s41.8-.9 61.2-2.7zM169 90.8c-25.2 5-47.4 11.6-66 19.4-47.1 19.9-55 39.9-55 49.8s8 29.9 55 49.8c21.3 9 47.4 16.3 77.2 21.5l9.8-11c11.6-13.1 18.1-30 18.1-47.5 0-13.6-3.9-26.9-11.2-38.4L169 90.8zm56.3-8c-.9 4.3-1.4 8.7-1.4 13.2 0 35.3 28.7 64 64 64s64-28.7 64-64c0-4.5-.5-9-1.4-13.2-19.8-1.8-40.8-2.8-62.6-2.8s-42.8 1-62.6 2.8z\"]\n};\nvar faThumbsUp = {\n  prefix: 'fas',\n  iconName: 'thumbs-up',\n  icon: [512, 512, [128077, 61575], \"f164\", \"M80 160c17.7 0 32 14.3 32 32l0 256c0 17.7-14.3 32-32 32l-48 0c-17.7 0-32-14.3-32-32L0 192c0-17.7 14.3-32 32-32l48 0zM270.6 16C297.9 16 320 38.1 320 65.4l0 4.2c0 6.8-1.3 13.6-3.8 19.9L288 160 448 160c26.5 0 48 21.5 48 48 0 19.7-11.9 36.6-28.9 44 17 7.4 28.9 24.3 28.9 44 0 23.4-16.8 42.9-39 47.1 4.4 7.3 7 15.8 7 24.9 0 22.2-15 40.8-35.4 46.3 2.2 5.5 3.4 11.5 3.4 17.7 0 26.5-21.5 48-48 48l-87.9 0c-36.3 0-71.6-12.4-99.9-35.1L184 435.2c-15.2-12.1-24-30.5-24-50l0-186.6c0-14.9 3.5-29.6 10.1-42.9L226.3 43.3C234.7 26.6 251.8 16 270.6 16z\"]\n};\nvar faStamp = {\n  prefix: 'fas',\n  iconName: 'stamp',\n  icon: [512, 512, [], \"f5bf\", \"M312 201.8c0-17.4 9.2-33.2 19.9-47 12.6-16.2 20.1-36.6 20.1-58.8 0-53-43-96-96-96s-96 43-96 96c0 22.1 7.5 42.5 20.1 58.8 10.7 13.8 19.9 29.6 19.9 47 0 29.9-24.3 54.2-54.2 54.2L112 256c-61.9 0-112 50.1-112 112 0 26.5 21.5 48 48 48l416 0c26.5 0 48-21.5 48-48 0-61.9-50.1-112-112-112l-33.8 0c-29.9 0-54.2-24.3-54.2-54.2zM56 464c-13.3 0-24 10.7-24 24s10.7 24 24 24l400 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L56 464z\"]\n};\nvar faMenorah = {\n  prefix: 'fas',\n  iconName: 'menorah',\n  icon: [640, 512, [], \"f676\", \"M20.8 7.4C22.8 2.9 27.1 0 32 0s9.2 2.9 11.2 7.4L61.3 49.7c1.8 4.1 2.7 8.6 2.7 13.1L64 64c0 17.7-14.3 32-32 32S0 81.7 0 64l0-1.2c0-4.5 .9-8.9 2.7-13.1L20.8 7.4zm96 0C118.8 2.9 123.1 0 128 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32S96 81.7 96 64l0-1.2c0-4.5 .9-8.9 2.7-13.1L116.8 7.4zm77.8 42.4L212.8 7.4C214.8 2.9 219.1 0 224 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1zM308.8 7.4C310.8 2.9 315.1 0 320 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1L308.8 7.4zm77.8 42.4L404.8 7.4C406.8 2.9 411.1 0 416 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1zM500.8 7.4C502.8 2.9 507.1 0 512 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1L500.8 7.4zm77.8 42.4L596.8 7.4C598.8 2.9 603.1 0 608 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1zM32 128c17.7 0 32 14.3 32 32l0 128c0 17.7 14.3 32 32 32l192 0 0-160c0-17.7 14.3-32 32-32s32 14.3 32 32l0 160 192 0c17.7 0 32-14.3 32-32l0-128c0-17.7 14.3-32 32-32s32 14.3 32 32l0 128c0 53-43 96-96 96l-192 0 0 64 128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-320 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l128 0 0-64-192 0c-53 0-96-43-96-96L0 160c0-17.7 14.3-32 32-32zm96 0c17.7 0 32 14.3 32 32l0 128-64 0 0-128c0-17.7 14.3-32 32-32zm96 0c17.7 0 32 14.3 32 32l0 128-64 0 0-128c0-17.7 14.3-32 32-32zm192 0c17.7 0 32 14.3 32 32l0 128-64 0 0-128c0-17.7 14.3-32 32-32zm96 0c17.7 0 32 14.3 32 32l0 128-64 0 0-128c0-17.7 14.3-32 32-32z\"]\n};\nvar faChildren = {\n  prefix: 'fas',\n  iconName: 'children',\n  icon: [640, 512, [], \"e4e1\", \"M160.5 0a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm-72 480l0-80-17.8 0c-10.9 0-18.6-10.7-15.2-21.1L86.7 285.5 58 323.3c-10.7 14.1-30.8 16.8-44.8 6.2S-3.7 298.7 7 284.7L65.9 207c22.4-29.6 57.5-47 94.6-47s72.2 17.4 94.6 47L314 284.7c10.7 14.1 7.9 34.2-6.2 44.8s-34.2 7.9-44.8-6.2l-28.7-37.8 31.1 93.4c3.5 10.4-4.3 21.1-15.2 21.1l-17.8 0 0 80c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-80-16 0 0 80c0 17.7-14.3 32-32 32s-32-14.3-32-32zM480.5 0a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm-8 384l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-179.5-12.9 20.5c-9.4 15-29.2 19.4-44.1 10s-19.4-29.2-10-44.1l51.7-82.1c17.6-27.9 48.3-44.9 81.2-44.9l12.3 0c33 0 63.7 16.9 81.2 44.9L619.6 287c9.4 15 4.9 34.7-10 44.1s-34.7 4.9-44.1-10l-12.9-20.5 0 179.5c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-16 0z\"]\n};\nvar faChartLine = {\n  prefix: 'fas',\n  iconName: 'chart-line',\n  icon: [512, 512, [\"line-chart\"], \"f201\", \"M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64L0 400c0 44.2 35.8 80 80 80l400 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 416c-8.8 0-16-7.2-16-16L64 64zm406.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L320 210.7 262.6 153.4c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l73.4-73.4 57.4 57.4c12.5 12.5 32.8 12.5 45.3 0l128-128z\"]\n};\nvar faLineChart = faChartLine;\nvar faSquareEnvelope = {\n  prefix: 'fas',\n  iconName: 'square-envelope',\n  icon: [448, 512, [\"envelope-square\"], \"f199\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM209.1 267.9L108.4 207.4c-7.7-4.6-12.4-12.9-12.4-21.9 0-14.1 11.4-25.5 25.5-25.5l204.9 0c14.1 0 25.5 11.4 25.5 25.5 0 9-4.7 17.3-12.4 21.9L238.9 267.9c-4.5 2.7-9.6 4.1-14.9 4.1s-10.4-1.4-14.9-4.1zM352 237.3l0 82.7c0 17.7-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32l0-82.7 96.7 58C202.1 301 213 304 224 304s21.9-3 31.3-8.7l96.7-58z\"]\n};\nvar faEnvelopeSquare = faSquareEnvelope;\nvar faBanSmoking = {\n  prefix: 'fas',\n  iconName: 'ban-smoking',\n  icon: [512, 512, [128685, \"smoking-ban\"], \"f54d\", \"M99.5 144.8l79.2 79.2-50.7 0c-17.7 0-32 14.3-32 32l0 32c0 17.7 14.3 32 32 32l146.7 0 92.5 92.5c-31.4 22.4-69.8 35.5-111.2 35.5-106 0-192-86-192-192 0-41.5 13.1-79.9 35.5-111.2zM333.3 288l-32-32 82.7 0 0 32-50.7 0zm32 32l18.7 0c17.7 0 32-14.3 32-32l0-32c0-17.7-14.3-32-32-32L269.3 224 144.8 99.5c31.4-22.4 69.8-35.5 111.2-35.5 106 0 192 86 192 192 0 41.5-13.1 79.9-35.5 111.2L365.3 320zM256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM272 96c-8.8 0-16 7.2-16 16 0 26.5 21.5 48 48 48l32 0c8.8 0 16 7.2 16 16s7.2 16 16 16 16-7.2 16-16c0-26.5-21.5-48-48-48l-32 0c-8.8 0-16-7.2-16-16s-7.2-16-16-16z\"]\n};\nvar faSmokingBan = faBanSmoking;\nvar faTruckFront = {\n  prefix: 'fas',\n  iconName: 'truck-front',\n  icon: [448, 512, [], \"e2b7\", \"M0 112C0 67.8 35.8 32 80 32l288 0c44.2 0 80 35.8 80 80l0 256c0 26.2-12.6 49.4-32 64l0 48c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-32-192 0 0 32c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-48C12.6 417.4 0 394.2 0 368L0 112zm96 80l0 64 256 0 0-64c0-17.7-14.3-32-32-32l-192 0c-17.7 0-32 14.3-32 32zm32 160a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm224 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nvar faBuilding = {\n  prefix: 'fas',\n  iconName: 'building',\n  icon: [384, 512, [127970, 61687], \"f1ad\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L64 0zM176 352l32 0c17.7 0 32 14.3 32 32l0 80-96 0 0-80c0-17.7 14.3-32 32-32zM96 112c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM240 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM96 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm144-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16z\"]\n};\nvar faBullseye = {\n  prefix: 'fas',\n  iconName: 'bullseye',\n  icon: [512, 512, [], \"f140\", \"M448 256a192 192 0 1 0 -384 0 192 192 0 1 0 384 0zM0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zm256 80a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm0-224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zM224 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nvar faArrowLeftLong = {\n  prefix: 'fas',\n  iconName: 'arrow-left-long',\n  icon: [576, 512, [\"long-arrow-left\"], \"f177\", \"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 288 544 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-434.7 0 73.4-73.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-128 128z\"]\n};\nvar faLongArrowLeft = faArrowLeftLong;\nvar faChessRook = {\n  prefix: 'fas',\n  iconName: 'chess-rook',\n  icon: [384, 512, [9820], \"f447\", \"M0 32L0 133.5c0 17 6.7 33.3 18.7 45.3L64 224 64 384 7.8 454.3C2.7 460.6 0 468.4 0 476.5 0 496.1 15.9 512 35.5 512l312.9 0c19.6 0 35.5-15.9 35.5-35.5 0-8.1-2.7-15.9-7.8-22.2l-56.2-70.3 0-160 45.3-45.3c12-12 18.7-28.3 18.7-45.3L384 32c0-17.7-14.3-32-32-32L320 0c-17.7 0-32 14.3-32 32l0 32-48 0 0-32c0-17.7-14.3-32-32-32L176 0c-17.7 0-32 14.3-32 32l0 32-48 0 0-32C96 14.3 81.7 0 64 0L32 0C14.3 0 0 14.3 0 32z\"]\n};\nvar faBlenderPhone = {\n  prefix: 'fas',\n  iconName: 'blender-phone',\n  icon: [576, 512, [], \"f6b6\", \"M151.4 13.2c10.2 5.8 14.5 18.4 10 29.3L138.2 98.8c-3.9 9.6-13.7 15.4-24 14.4l-20.2-2C78.7 152.9 78 198.9 91.9 241.1l22.4-2.2c10.3-1 20 4.8 24 14.4l23.2 56.3c4.5 10.9 .2 23.4-10 29.3l-2.9 1.6c-33.6 19.2-81.7 16.2-106.2-21.6-56.3-86.6-56.3-199.1 0-285.7 24.6-37.7 72.7-40.7 106.2-21.6l2.9 1.6zM224 336L193.7 17.5C192.8 8.1 200.2 0 209.6 0l324 0c21.3 0 36.6 20.3 30.8 40.8L553.1 80 440 80c-13.3 0-24 10.7-24 24s10.7 24 24 24l99.4 0-18.3 64-81.1 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l67.4 0-27.4 96-256 0zm8 48l240 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-240 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40zm120 88a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nvar faArrowTurnUp = {\n  prefix: 'fas',\n  iconName: 'arrow-turn-up',\n  icon: [384, 512, [\"level-up\"], \"f148\", \"M32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c53 0 96-43 96-96l0-306.7 73.4 73.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 109.3 160 416c0 17.7-14.3 32-32 32l-96 0z\"]\n};\nvar faLevelUp = faArrowTurnUp;\nvar faBicycle = {\n  prefix: 'fas',\n  iconName: 'bicycle',\n  icon: [640, 512, [128690], \"f206\", \"M331.7 43.3C336 36.3 343.7 32 352 32l104 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-65.6 0 72.2 148.4c10.7-2.9 21.9-4.4 33.4-4.4 70.7 0 128 57.3 128 128s-57.3 128-128 128-128-57.3-128-128c0-42 20.2-79.2 51.4-102.6l-20.4-41.9-73.5 147c-2.3 4.8-6.3 8.8-11.4 11.2-.6 .3-1.2 .5-1.8 .7-2.9 1.1-5.9 1.6-8.9 1.5L271 368c-7.9 63.1-61.7 112-127 112-70.7 0-128-57.3-128-128S73.3 224 144 224c10.8 0 21.2 1.3 31.2 3.8l28.5-56.9-11.5-26.9-40.2 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l56 0c9.6 0 18.3 5.7 22.1 14.5l14.3 33.5 123.7 0-37.7-77.5c-3.6-7.4-3.2-16.2 1.2-23.2zM228.5 228.7l-45.6 91.3 84.8 0-39.1-91.3zM305.7 287l47.5-95-88.2 0 40.7 95zm168.7 75.5l-29.7-61c-12.8 13-20.7 30.8-20.7 50.5 0 39.8 32.2 72 72 72s72-32.2 72-72-32.2-72-72-72c-2.7 0-5.5 .2-8.1 .5l29.7 61c5.8 11.9 .8 26.3-11.1 32.1s-26.3 .8-32.1-11.1zM149.2 368c-20.2 0-33.4-21.3-24.3-39.4l24.2-48.5c-1.7-.1-3.4-.2-5.1-.2-39.8 0-72 32.2-72 72s32.2 72 72 72c34.3 0 62.9-23.9 70.2-56l-65 0z\"]\n};\nvar faCircleArrowDown = {\n  prefix: 'fas',\n  iconName: 'circle-arrow-down',\n  icon: [512, 512, [\"arrow-circle-down\"], \"f0ab\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM239 377l-80-80c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l39 39 0-150.1c0-13.3 10.7-24 24-24s24 10.7 24 24l0 150.1 39-39c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-80 80c-9.4 9.4-24.6 9.4-33.9 0z\"]\n};\nvar faArrowCircleDown = faCircleArrowDown;\nvar faGear = {\n  prefix: 'fas',\n  iconName: 'gear',\n  icon: [512, 512, [9881, \"cog\"], \"f013\", \"M195.1 9.5C198.1-5.3 211.2-16 226.4-16l59.8 0c15.2 0 28.3 10.7 31.3 25.5L332 79.5c14.1 6 27.3 13.7 39.3 22.8l67.8-22.5c14.4-4.8 30.2 1.2 37.8 14.4l29.9 51.8c7.6 13.2 4.9 29.8-6.5 39.9L447 233.3c.9 7.4 1.3 15 1.3 22.7s-.5 15.3-1.3 22.7l53.4 47.5c11.4 10.1 14 26.8 6.5 39.9l-29.9 51.8c-7.6 13.1-23.4 19.2-37.8 14.4l-67.8-22.5c-12.1 9.1-25.3 16.7-39.3 22.8l-14.4 69.9c-3.1 14.9-16.2 25.5-31.3 25.5l-59.8 0c-15.2 0-28.3-10.7-31.3-25.5l-14.4-69.9c-14.1-6-27.2-13.7-39.3-22.8L73.5 432.3c-14.4 4.8-30.2-1.2-37.8-14.4L5.8 366.1c-7.6-13.2-4.9-29.8 6.5-39.9l53.4-47.5c-.9-7.4-1.3-15-1.3-22.7s.5-15.3 1.3-22.7L12.3 185.8c-11.4-10.1-14-26.8-6.5-39.9L35.7 94.1c7.6-13.2 23.4-19.2 37.8-14.4l67.8 22.5c12.1-9.1 25.3-16.7 39.3-22.8L195.1 9.5zM256.3 336a80 80 0 1 0 -.6-160 80 80 0 1 0 .6 160z\"]\n};\nvar faCog = faGear;\nvar faMarsAndVenusBurst = {\n  prefix: 'fas',\n  iconName: 'mars-and-venus-burst',\n  icon: [640, 512, [], \"e523\", \"M464-32c0 17.7 14.3 32 32 32l34.7 0-63 63c-28.4-19.5-62.7-31-99.8-31-97.2 0-176 78.8-176 176 0 86.3 62.1 158.1 144 173.1l0 34.9-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-34.9c81.9-15 144-86.8 144-173.1 0-37-11.4-71.4-31-99.8l63-63 0 34.7c0 17.7 14.3 32 32 32s32-14.3 32-32l0-112c0-17.7-14.3-32-32-32L496-64c-17.7 0-32 14.3-32 32zM368 96a112 112 0 1 1 0 224 112 112 0 1 1 0-224zM190.9-21.9C188.4-28 182.6-32 176-32s-12.4 4-14.9 10.1l-29.4 74-76.2-23.1c-6.3-1.9-13.1 .2-17.2 5.3S33.8 46.5 37 52.2l39.5 69.1-65.6 45.1c-5.4 3.7-8 10.3-6.5 16.7s6.7 11.2 13.1 12.2l78.7 12.2-5.6 79.4c-.5 6.5 3.1 12.7 9 15.5s12.9 1.8 17.8-2.6L152.1 268c-5.3-19.1-8.1-39.2-8.1-60 0-65.4 28-124.2 72.6-165.1L190.9-21.9z\"]\n};\nvar faOtter = {\n  prefix: 'fas',\n  iconName: 'otter',\n  icon: [640, 512, [129446], \"f700\", \"M181.5 197.1l12.9 6.4c5.9 3 12.4 4.5 19.1 4.5 23.5 0 42.6-19.1 42.6-42.6l0-21.4c0-35.3-28.7-64-64-64l-64 0c-35.3 0-64 28.7-64 64l0 21.4c0 23.5 19.1 42.6 42.6 42.6 6.6 0 13.1-1.5 19.1-4.5 9.3-4.7 16.4-8.2 21.2-10.6L135.1 185c-4.5-3-7.1-8-7.1-13.3l0-3.7c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24l0 3.7c0 5.3-2.7 10.3-7.1 13.3l-11.8 7.9 8.4 4.2zm-8.6 49.4l-12.9-6.4-12.9 6.4c-12.6 6.3-26.5 9.6-40.5 9.6-3.6 0-7.1-.2-10.6-.6l0 .6c0 35.3 28.7 64 64 64l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l160 0 0-64c0-23.7 12.9-44.4 32-55.4 9.4-5.4 20.3-8.6 32-8.6l0-16c0-26.5 21.5-48 48-48 8.8 0 16 7.2 16 16l0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-99.7c0-48.2-30.8-91-76.6-106.3l-8.5-2.8c-8-2.7-12.6-11.1-10.4-19.3s10.3-13.2 18.6-11.6l19.9 4C576 86.1 640 164.2 640 254.9l0 1.1 0 0c0 123.7-100.3 224-224 224l-160.6 0C132 480 32 380 32 256.6l0-39.8c-10.1-14.6-16-32.3-16-51.4l0-21.4 0-1.4C6.7 139.3 0 130.5 0 120 0 106.7 10.7 96 24 96l2.8 0C44.8 58.2 83.3 32 128 32l64 0c44.7 0 83.2 26.2 101.2 64l2.8 0c13.3 0 24 10.7 24 24 0 10.5-6.7 19.3-16 22.6l0 1.4 0 21.4c0 1.4 0 2.8-.1 4.3 12-6.2 25.7-9.6 40.1-9.6l8 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-8 0c-13.3 0-24 10.7-24 24l0 8 56.4 0c-15.2 17-24.4 39.4-24.4 64l-32 0c-42.3 0-78.2-27.4-91-65.3-5.1 .9-10.3 1.3-15.6 1.3-14.1 0-27.9-3.3-40.5-9.6zM96 128a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm112 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\"]\n};\nvar faCircleChevronLeft = {\n  prefix: 'fas',\n  iconName: 'circle-chevron-left',\n  icon: [512, 512, [\"chevron-circle-left\"], \"f137\", \"M512 256a256 256 0 1 0 -512 0 256 256 0 1 0 512 0zM271 135c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-87 87 87 87c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L167 273c-9.4-9.4-9.4-24.6 0-33.9L271 135z\"]\n};\nvar faChevronCircleLeft = faCircleChevronLeft;\nvar faCircleQuestion = {\n  prefix: 'fas',\n  iconName: 'circle-question',\n  icon: [512, 512, [62108, \"question-circle\"], \"f059\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zm0-336c-17.7 0-32 14.3-32 32 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-44.2 35.8-80 80-80s80 35.8 80 80c0 47.2-36 67.2-56 74.5l0 3.8c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-8.1c0-20.5 14.8-35.2 30.1-40.2 6.4-2.1 13.2-5.5 18.2-10.3 4.3-4.2 7.7-10 7.7-19.6 0-17.7-14.3-32-32-32zM224 368a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nvar faQuestionCircle = faCircleQuestion;\nvar faWalkieTalkie = {\n  prefix: 'fas',\n  iconName: 'walkie-talkie',\n  icon: [384, 512, [], \"f8ef\", \"M88-32c13.3 0 24 10.7 24 24l0 72 48 0c0-17.7 14.3-32 32-32s32 14.3 32 32l32 0c0-17.7 14.3-32 32-32s32 14.3 32 32l16 0c26.5 0 48 21.5 48 48l0 160.9c0 9.9-2.3 19.7-6.8 28.6l-20.2 40.4c-3.3 6.7-5.1 14-5.1 21.5l0 84.7c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-84.7c0-7.5-1.7-14.8-5.1-21.5L6.8 301.5C2.3 292.6 0 282.8 0 272.9L0 112C0 85.5 21.5 64 48 64l16 0 0-72c0-13.3 10.7-24 24-24zm32 176c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0z\"]\n};\nvar faUserGroup = {\n  prefix: 'fas',\n  iconName: 'user-group',\n  icon: [576, 512, [128101, \"user-friends\"], \"f500\", \"M64 128a112 112 0 1 1 224 0 112 112 0 1 1 -224 0zM0 464c0-97.2 78.8-176 176-176s176 78.8 176 176l0 6c0 23.2-18.8 42-42 42L42 512c-23.2 0-42-18.8-42-42l0-6zM432 64a96 96 0 1 1 0 192 96 96 0 1 1 0-192zm0 240c79.5 0 144 64.5 144 144l0 22.4c0 23-18.6 41.6-41.6 41.6l-144.8 0c6.6-12.5 10.4-26.8 10.4-42l0-6c0-51.5-17.4-98.9-46.5-136.7 22.6-14.7 49.6-23.3 78.5-23.3z\"]\n};\nvar faUserFriends = faUserGroup;\nvar faHouseChimney = {\n  prefix: 'fas',\n  iconName: 'house-chimney',\n  icon: [512, 512, [63499, \"home-lg\"], \"e3af\", \"M234.2 8.6c12.3-11.4 31.3-11.4 43.5 0L368 92.3 368 80c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 101.5 37.8 35.1c9.6 9 12.8 22.9 8 35.1S493.2 272 480 272l-16 0 0 176c0 35.3-28.7 64-64 64l-288 0c-35.3 0-64-28.7-64-64l0-176-16 0c-13.2 0-25-8.1-29.8-20.3s-1.6-26.2 8-35.1l224-208zM240 320c-26.5 0-48 21.5-48 48l0 96 128 0 0-96c0-26.5-21.5-48-48-48l-32 0z\"]\n};\nvar faHomeLg = faHouseChimney;\nvar faRightFromBracket = {\n  prefix: 'fas',\n  iconName: 'right-from-bracket',\n  icon: [512, 512, [\"sign-out-alt\"], \"f2f5\", \"M505 273c9.4-9.4 9.4-24.6 0-33.9L361 95c-6.9-6.9-17.2-8.9-26.2-5.2S320 102.3 320 112l0 80-112 0c-26.5 0-48 21.5-48 48l0 32c0 26.5 21.5 48 48 48l112 0 0 80c0 9.7 5.8 18.5 14.8 22.2s19.3 1.7 26.2-5.2L505 273zM160 96c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 32C43 32 0 75 0 128L0 384c0 53 43 96 96 96l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0c-17.7 0-32-14.3-32-32l0-256c0-17.7 14.3-32 32-32l64 0z\"]\n};\nvar faSignOutAlt = faRightFromBracket;\nvar faFile = {\n  prefix: 'fas',\n  iconName: 'file',\n  icon: [384, 512, [128196, 128459, 61462], \"f15b\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-277.5c0-17-6.7-33.3-18.7-45.3L258.7 18.7C246.7 6.7 230.5 0 213.5 0L64 0zM325.5 176L232 176c-13.3 0-24-10.7-24-24L208 58.5 325.5 176z\"]\n};\nvar faPlaneSlash = {\n  prefix: 'fas',\n  iconName: 'plane-slash',\n  icon: [576, 512, [], \"e069\", \"M41-24.9c-9.4-9.4-24.6-9.4-33.9 0S-2.3-.3 7 9.1l528 528c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-183.4-183.4 7.1-7.7 127.3 0c30.9 0 56-25.1 56-56s-25.1-56-56-56L392.7 200 233.5 26.4C227.5 19.8 218.9 16 209.9 16l-43.7 0c-10.9 0-18.6 10.7-15.2 21.1L175.1 109.2 41-24.9zM130.2 200l-24.6 0-52.8-66c-3-3.8-7.6-6-12.5-6l-19.8 0c-10.4 0-18 9.8-15.5 19.9L32 256 5 364.1C2.4 374.2 10.1 384 20.5 384l19.8 0c4.9 0 9.5-2.2 12.5-6l52.8-66 99.7 0-54.3 162.9c-3.5 10.4 4.3 21.1 15.2 21.1l43.7 0c9 0 17.5-3.8 23.6-10.4L320.7 390.5 130.2 200z\"]\n};\nvar faCloudShowersHeavy = {\n  prefix: 'fas',\n  iconName: 'cloud-showers-heavy',\n  icon: [512, 512, [], \"f740\", \"M96 320c-53 0-96-43-96-96 0-42.5 27.6-78.6 65.9-91.2-1.3-6.7-1.9-13.7-1.9-20.8 0-61.9 50.1-112 112-112 43.1 0 80.5 24.3 99.2 60 14.7-17.1 36.5-28 60.8-28 44.2 0 80 35.8 80 80 0 5.5-.6 10.8-1.6 16 .5 0 1.1 0 1.6 0 53 0 96 43 96 96s-43 96-96 96L96 320zm6.8 79.6l-32 96C66.6 508.2 53 515 40.4 510.8S21 493 25.2 480.4l32-96C61.4 371.8 75 365 87.6 369.2S107 387 102.8 399.6zm120 0l-32 96c-4.2 12.6-17.8 19.4-30.4 15.2S141 493 145.2 480.4l32-96c4.2-12.6 17.8-19.4 30.4-15.2S227 387 222.8 399.6zm112 0l-32 96c-4.2 12.6-17.8 19.4-30.4 15.2S253 493 257.2 480.4l32-96c4.2-12.6 17.8-19.4 30.4-15.2S339 387 334.8 399.6zm120 0l-32 96c-4.2 12.6-17.8 19.4-30.4 15.2S373 493 377.2 480.4l32-96c4.2-12.6 17.8-19.4 30.4-15.2S459 387 454.8 399.6z\"]\n};\nvar faPersonFalling = {\n  prefix: 'fas',\n  iconName: 'person-falling',\n  icon: [512, 512, [], \"e546\", \"M320 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 5.4c0 45-23.6 86.6-62.1 109.8l-4.6 2.8C131.4 184.7 96 247.1 96 314.6L96 384c0 17.7 14.3 32 32 32s32-14.3 32-32l0-69.4c0-16.7 3.3-33 9.4-48L359.2 500.2c11.1 13.7 31.3 15.8 45 4.7s15.8-31.3 4.7-45L295.2 320 400 320 438.4 371.2c10.6 14.1 30.7 17 44.8 6.4s17-30.7 6.4-44.8l-43.2-57.6C437.3 263.1 423.1 256 408 256l-89 0-62.9-75.5c40.3-36 63.9-87.9 63.9-143.1l0-5.4zM104 144a56 56 0 1 0 0-112 56 56 0 1 0 0 112z\"]\n};\nvar faTurnDown = {\n  prefix: 'fas',\n  iconName: 'turn-down',\n  icon: [384, 512, [10549, \"level-down-alt\"], \"f3be\", \"M169.4 502.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9S332.9 320 320 320l-64 0 0-160C256 71.6 184.4 0 96 0L32 0C14.3 0 0 14.3 0 32L0 96c0 17.7 14.3 32 32 32l64 0c17.7 0 32 14.3 32 32l0 160-64 0c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z\"]\n};\nvar faLevelDownAlt = faTurnDown;\nvar faUpRightAndDownLeftFromCenter = {\n  prefix: 'fas',\n  iconName: 'up-right-and-down-left-from-center',\n  icon: [512, 512, [\"expand-alt\"], \"f424\", \"M344 0L488 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-87 87c-9.4 9.4-24.6 9.4-33.9 0l-32-32c-9.4-9.4-9.4-24.6 0-33.9l87-87-39-39c-6.9-6.9-8.9-17.2-5.2-26.2S334.3 0 344 0zM168 512L24 512c-13.3 0-24-10.7-24-24L0 344c0-9.7 5.8-18.5 14.8-22.2S34.1 320.2 41 327l39 39 87-87c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2S177.7 512 168 512z\"]\n};\nvar faExpandAlt = faUpRightAndDownLeftFromCenter;\nvar faUserTag = {\n  prefix: 'fas',\n  iconName: 'user-tag',\n  icon: [640, 512, [], \"f507\", \"M256.1 8a120 120 0 1 1 0 240 120 120 0 1 1 0-240zM226.4 304l59.4 0c6.7 0 13.2 .4 19.7 1.1-.9 4.9-1.4 9.9-1.4 15l0 92.1c0 25.5 10.1 49.9 28.1 67.9l31.9 31.9-286.3 0c-16.4 0-29.7-13.3-29.7-29.7 0-98.5 79.8-178.3 178.3-178.3zM352.1 412.2l0-92.1c0-17.7 14.3-32 32-32l92.1 0c12.7 0 24.9 5.1 33.9 14.1l96 96c18.7 18.7 18.7 49.1 0 67.9l-76.1 76.1c-18.7 18.7-49.1 18.7-67.9 0l-96-96c-9-9-14.1-21.2-14.1-33.9zm104-44.2a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"]\n};\nvar faHandSparkles = {\n  prefix: 'fas',\n  iconName: 'hand-sparkles',\n  icon: [640, 512, [], \"e05d\", \"M320 0c17.7 0 32 14.3 32 32l0 208c0 8.8 7.2 16 16 16s16-7.2 16-16l0-176c0-17.7 14.3-32 32-32s32 14.3 32 32l0 176c0 8.8 7.2 16 16 16s16-7.2 16-16l0-112c0-17.7 14.3-32 32-32s32 14.3 32 32l0 178.2c-19.2 5.4-34.7 20.4-40.4 40.3l-6.5 22.7-22.7 6.5c-25.2 7.2-42.5 30.2-42.5 56.4 0 22.1 12.4 42 31.4 51.9-27.5 17.8-60.2 28.1-95.4 28.1l-19.2 0c-59.6 0-116.9-22.9-160-64L76.4 341c-16-15.2-16.6-40.6-1.4-56.6s40.6-16.6 56.6-1.4l60.5 57.6c0-1.5-.1-3.1-.1-4.6l0-272c0-17.7 14.3-32 32-32s32 14.3 32 32l0 176c0 8.8 7.2 16 16 16s16-7.2 16-16l0-208c0-17.7 14.3-32 32-32zm-7.3 326.6c-1.1-3.9-4.7-6.6-8.7-6.6s-7.6 2.7-8.7 6.6l-7.3 25.4-25.4 7.3c-3.9 1.1-6.6 4.7-6.6 8.7s2.7 7.6 6.6 8.7l25.4 7.3 7.3 25.4c1.1 3.9 4.7 6.6 8.7 6.6s7.6-2.7 8.7-6.6l7.3-25.4 25.4-7.3c3.9-1.1 6.6-4.7 6.6-8.7s-2.7-7.6-6.6-8.7l-25.4-7.3-7.3-25.4zM104 120l48.3 13.8c4.6 1.3 7.7 5.5 7.7 10.2s-3.1 8.9-7.7 10.2L104 168 90.2 216.3c-1.3 4.6-5.5 7.7-10.2 7.7s-8.9-3.1-10.2-7.7L56 168 7.7 154.2C3.1 152.9 0 148.7 0 144s3.1-8.9 7.7-10.2L56 120 69.8 71.7C71.1 67.1 75.3 64 80 64s8.9 3.1 10.2 7.7L104 120zM584 408l48.3 13.8c4.6 1.3 7.7 5.5 7.7 10.2s-3.1 8.9-7.7 10.2L584 456 570.2 504.3c-1.3 4.6-5.5 7.7-10.2 7.7s-8.9-3.1-10.2-7.7L536 456 487.7 442.2c-4.6-1.3-7.7-5.5-7.7-10.2s3.1-8.9 7.7-10.2L536 408 549.8 359.7c1.3-4.6 5.5-7.7 10.2-7.7s8.9 3.1 10.2 7.7L584 408z\"]\n};\nvar faArrowsToDot = {\n  prefix: 'fas',\n  iconName: 'arrows-to-dot',\n  icon: [512, 512, [], \"e4be\", \"M256 0c17.7 0 32 14.3 32 32l0 32 32 0c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-64 64c-12.5 12.5-32.8 12.5-45.3 0l-64-64c-9.2-9.2-11.9-22.9-6.9-34.9S179.1 64 192 64l32 0 0-32c0-17.7 14.3-32 32-32zM169.4 393.4l64-64c12.5-12.5 32.8-12.5 45.3 0l64 64c9.2 9.2 11.9 22.9 6.9 34.9S332.9 448 320 448l-32 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-32 0c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9zM32 224l32 0 0-32c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l64 64c12.5 12.5 12.5 32.8 0 45.3l-64 64c-9.2 9.2-22.9 11.9-34.9 6.9S64 332.9 64 320l0-32-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm297.4 54.6c-12.5-12.5-12.5-32.8 0-45.3l64-64c9.2-9.2 22.9-11.9 34.9-6.9S448 179.1 448 192l0 32 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 32c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9l-64-64zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faFaceSadCry = {\n  prefix: 'fas',\n  iconName: 'face-sad-cry',\n  icon: [512, 512, [128557, \"sad-cry\"], \"f5b3\", \"M352 493.4c-29.6 12-62.1 18.6-96 18.6s-66.4-6.6-96-18.6L160 296c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 171.7C44.4 421.6 0 344 0 256 0 114.6 114.6 0 256 0S512 114.6 512 256c0 88-44.4 165.6-112 211.7L400 296c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 197.4zM152 196l16 0c11 0 20 9 20 20s9 20 20 20 20-9 20-20c0-33.1-26.9-60-60-60l-16 0c-33.1 0-60 26.9-60 60 0 11 9 20 20 20s20-9 20-20 9-20 20-20zm172 20c0-11 9-20 20-20l16 0c11 0 20 9 20 20s9 20 20 20 20-9 20-20c0-33.1-26.9-60-60-60l-16 0c-33.1 0-60 26.9-60 60 0 11 9 20 20 20s20-9 20-20zM208 336l0 32c0 26.5 21.5 48 48 48s48-21.5 48-48l0-32c0-26.5-21.5-48-48-48s-48 21.5-48 48z\"]\n};\nvar faSadCry = faFaceSadCry;\nvar faDongSign = {\n  prefix: 'fas',\n  iconName: 'dong-sign',\n  icon: [384, 512, [], \"e169\", \"M288-16c-17.7 0-32 14.3-32 32l0 32-104 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l104 0 0 72.2c-22.9-15.3-50.4-24.2-80-24.2-79.5 0-144 64.5-144 144S96.5 432 176 432c30 0 57.8-9.1 80.8-24.8 3.3 14.2 16 24.8 31.2 24.8 17.7 0 32-14.3 32-32l0-304 40 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-40 0 0-32c0-17.7-14.3-32-32-32zM96 288a80 80 0 1 1 160 0 80 80 0 1 1 -160 0zM24 464c-13.3 0-24 10.7-24 24s10.7 24 24 24l336 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L24 464z\"]\n};\nvar faPeopleLine = {\n  prefix: 'fas',\n  iconName: 'people-line',\n  icon: [576, 512, [], \"e534\", \"M288 0a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm96 312c0 25-12.7 47-32 59.9l0 44.1-128 0 0-44.1C204.7 359 192 337 192 312l0-40c0-53 43-96 96-96s96 43 96 96l0 40zm16 104l0-27.3c19.9-22.5 32-52.2 32-84.7l0-32c0-26.7-7.3-51.6-19.9-73.1 11.1-4.5 23.2-6.9 35.9-6.9 53 0 96 43 96 96l0 32c0 23.7-12.9 44.4-32 55.4l0 40.6-112 0zM64 375.4C44.9 364.4 32 343.7 32 320l0-32c0-53 43-96 96-96 12.7 0 24.8 2.5 35.9 6.9-12.6 21.4-19.9 46.4-19.9 73.1l0 32c0 32.5 12.1 62.1 32 84.7l0 27.3-112 0 0-40.6zM128 32a56 56 0 1 1 0 112 56 56 0 1 1 0-112zm320 0a56 56 0 1 1 0 112 56 56 0 1 1 0-112zM24 464l528 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 512c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nvar faSquareRss = {\n  prefix: 'fas',\n  iconName: 'square-rss',\n  icon: [448, 512, [\"rss-square\"], \"f143\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM96 136c0-13.3 10.7-24 24-24 137 0 248 111 248 248 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-110.5-89.5-200-200-200-13.3 0-24-10.7-24-24zm0 96c0-13.3 10.7-24 24-24 83.9 0 152 68.1 152 152 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-57.4-46.6-104-104-104-13.3 0-24-10.7-24-24zm0 120a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nvar faRssSquare = faSquareRss;\nvar faCalendarMinus = {\n  prefix: 'fas',\n  iconName: 'calendar-minus',\n  icon: [448, 512, [], \"f272\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 32 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 128C0 92.7 28.7 64 64 64l32 0 0-32c0-17.7 14.3-32 32-32zm24 264c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0z\"]\n};\nvar faChartDiagram = {\n  prefix: 'fas',\n  iconName: 'chart-diagram',\n  icon: [512, 512, [], \"e695\", \"M80 32C53.5 32 32 53.5 32 80s21.5 48 48 48l152 0 0 40-48 48-72 0c-39.8 0-72 32.2-72 72l0 64-8 0c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-8 0 0-64c0-13.3 10.7-24 24-24l72 0 48 48 0 40-8 0c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-8 0 0-40 48-48 72 0c13.3 0 24 10.7 24 24l0 64-8 0c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-8 0 0-64c0-39.8-32.2-72-72-72l-72 0-48-48 0-40 152 0c26.5 0 48-21.5 48-48s-21.5-48-48-48L80 32z\"]\n};\nvar faFaceTired = {\n  prefix: 'fas',\n  iconName: 'face-tired',\n  icon: [512, 512, [128555, \"tired\"], \"f5c8\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM164.7 328.7c22-22 53.9-40.7 91.3-40.7s69.3 18.7 91.3 40.7c11.1 11.1 20.1 23.4 26.4 35.4 6.2 11.7 10.3 24.4 10.3 35.9 0 5.2-2.6 10.2-6.9 13.2s-9.8 3.7-14.7 1.8l-20.5-7.7c-26.9-10.1-55.5-15.3-84.3-15.3l-3.2 0c-28.8 0-57.3 5.2-84.3 15.3L149.6 415c-4.9 1.8-10.4 1.2-14.7-1.8S128 405.2 128 400c0-11.6 4.2-24.2 10.3-35.9 6.3-12 15.3-24.3 26.4-35.4zM122.6 159.2c4.5-6.8 13.3-9.2 20.6-5.5l79.6 40c5.4 2.7 8.8 8.2 8.8 14.3s-3.4 11.6-8.8 14.3l-79.6 40c-7.3 3.6-16.1 1.3-20.6-5.5s-3.1-15.9 3.1-21.1L159 208 125.8 180.3c-6.2-5.2-7.6-14.3-3.1-21.1zm263.6 21.1L353 208 386.2 235.7c6.2 5.2 7.6 14.3 3.1 21.1s-13.3 9.2-20.6 5.5l-79.6-40c-5.4-2.7-8.8-8.2-8.8-14.3s3.4-11.6 8.8-14.3l79.6-40c7.3-3.6 16.1-1.3 20.6 5.5s3.1 15.9-3.1 21.1z\"]\n};\nvar faTired = faFaceTired;\nvar faHandPointRight = {\n  prefix: 'fas',\n  iconName: 'hand-point-right',\n  icon: [512, 512, [], \"f0a4\", \"M480 96c17.7 0 32 14.3 32 32s-14.3 32-32 32l-208 0 0-64 208 0zM320 288c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0zm64-64c0 17.7-14.3 32-32 32l-48 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l48 0c17.7 0 32 14.3 32 32zM288 384c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0zm-88-96l.6 0c-5.4 9.4-8.6 20.3-8.6 32 0 13.2 4 25.4 10.8 35.6-24.9 8.7-42.8 32.5-42.8 60.4 0 11.7 3.1 22.6 8.6 32l-8.6 0C71.6 448 0 376.4 0 288l0-61.7c0-42.4 16.9-83.1 46.9-113.1l11.6-11.6C82.5 77.5 115.1 64 149 64l27 0c35.3 0 64 28.7 64 64l0 88c0 22.1-17.9 40-40 40s-40-17.9-40-40l0-56c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 56c0 39.8 32.2 72 72 72z\"]\n};\nvar faArrowUp = {\n  prefix: 'fas',\n  iconName: 'arrow-up',\n  icon: [384, 512, [8593], \"f062\", \"M214.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 109.3 160 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-370.7 105.4 105.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z\"]\n};\nvar faCubesStacked = {\n  prefix: 'fas',\n  iconName: 'cubes-stacked',\n  icon: [512, 512, [], \"e4e6\", \"M192 32c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-64zm32 352l64 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32zm192 0l64 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32zM320 192l64 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32zm-182.6-3.9c12.5-12.5 32.8-12.5 45.3 0l45.3 45.3c12.5 12.5 12.5 32.8 0 45.3l-45.3 45.3c-12.5 12.5-32.8 12.5-45.3 0L92.1 278.6c-12.5-12.5-12.5-32.8 0-45.3l45.3-45.3zM32 384l64 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32z\"]\n};\nvar faChildCombatant = {\n  prefix: 'fas',\n  iconName: 'child-combatant',\n  icon: [576, 512, [\"child-rifle\"], \"e4e0\", \"M176.5 128a64 64 0 1 0 0-128 64 64 0 1 0 0 128zm-16 352l0-96 32 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-192.2 20.9 33.2c9.4 15 29.2 19.4 44.1 10s19.4-29.2 10-44.1l-39.9-63.3C266.8 184 223.3 160 176.5 160S86.2 184 61.3 223.6L21.4 287c-9.4 15-4.9 34.7 10 44.1s34.7 4.9 44.1-10l20.9-33.2 0 192.2c0 17.7 14.3 32 32 32s32-14.3 32-32zM448.5 0l-32 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l0 100.3c-9.6 5.5-16 15.9-16 27.7l0 32c-17.7 0-32 14.3-32 32l0 144c0 17.7 14.3 32 32 32l16 0 0 96c0 8.8 7.2 16 16 16l59.5 0c10.4 0 18-9.8 15.5-19.9l-23-92.1 44 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-48 0 0-26.7 53.1-17.7c6.5-2.2 10.9-8.3 10.9-15.2l0-84.5c0-8.8-7.2-16-16-16l-16 0c-8.8 0-16 7.2-16 16l0 56-16 5.3 0-109.3c0-11.8-6.4-22.2-16-27.7l0-116.3c0-8.8-7.2-16-16-16z\"]\n};\nvar faChildRifle = faChildCombatant;\nvar faVestPatches = {\n  prefix: 'fas',\n  iconName: 'vest-patches',\n  icon: [448, 512, [], \"e086\", \"M200 293.9L200 464c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 270.5c0-9.5 2.8-18.7 8.1-26.6l47.9-71.8c5.3-7.9 8.1-17.1 8.1-26.6L64 48C64 21.5 85.5 0 112 0l3.5 0c.3 0 .6 0 1 0 .6 0 1.2 0 1.8 0 18.8 0 34.1 9.7 44.1 18.8 9.3 8.4 28.5 21.2 61.7 21.2s52.4-12.8 61.7-21.2c10-9.1 25.3-18.8 44.1-18.8 .6 0 1.2 0 1.8 0 .3 0 .6 0 1 0L336 0c26.5 0 48 21.5 48 48l0 97.5c0 9.5 2.8 18.7 8.1 26.6l47.9 71.8c5.3 7.9 8.1 17.1 8.1 26.6L448 464c0 26.5-21.5 48-48 48l-104 0c-26.5 0-48-21.5-48-48l0-170.1c0-3.9 .5-7.8 1.4-11.6L303.6 65.4C285.9 77.2 259.8 88 224 88s-61.9-10.8-79.6-22.6l54.2 216.8c1 3.8 1.4 7.7 1.4 11.6zM96 456a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM63.5 255.5c-4.7 4.7-4.7 12.3 0 17L79 288 63.5 303.5c-4.7 4.7-4.7 12.3 0 17s12.3 4.7 17 0L96 305 111.5 320.5c4.7 4.7 12.3 4.7 17 0s4.7-12.3 0-17L113 288 128.5 272.5c4.7-4.7 4.7-12.3 0-17s-12.3-4.7-17 0L96 271 80.5 255.5c-4.7-4.7-12.3-4.7-17 0zM304 280l0 40c0 8.8 7.2 16 16 16l40 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-8 0 0-8c0-13.3-10.7-24-24-24s-24 10.7-24 24z\"]\n};\nvar faMartiniGlassEmpty = {\n  prefix: 'fas',\n  iconName: 'martini-glass-empty',\n  icon: [512, 512, [\"glass-martini\"], \"f000\", \"M32 32C19.1 32 7.4 39.8 2.4 51.8S.2 77.5 9.4 86.6l214.6 214.6 0 146.7-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l192 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-146.7 214.6-214.6c9.2-9.2 11.9-22.9 6.9-34.9S492.9 32 480 32L32 32zM256 242.7L109.3 96 402.7 96 256 242.7z\"]\n};\nvar faGlassMartini = faMartiniGlassEmpty;\nvar faMagnet = {\n  prefix: 'fas',\n  iconName: 'magnet',\n  icon: [448, 512, [129522], \"f076\", \"M0 176L0 288C0 411.7 100.3 512 224 512S448 411.7 448 288l0-112-128 0 0 112c0 53-43 96-96 96s-96-43-96-96l0-112-128 0zm0-48l128 0 0-64c0-17.7-14.3-32-32-32L32 32C14.3 32 0 46.3 0 64l0 64zm320 0l128 0 0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32l0 64z\"]\n};\nvar faRoadBarrier = {\n  prefix: 'fas',\n  iconName: 'road-barrier',\n  icon: [640, 512, [], \"e562\", \"M32 32C14.3 32 0 46.3 0 64L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32L64 266.3 149.2 96 64 96 64 64c0-17.7-14.3-32-32-32zM405.2 96l-74.3 0-5.4 10.7-90.6 181.3 74.3 0 5.4-10.7 90.6-181.3zM362.8 288l74.3 0 5.4-10.7 90.6-181.3-74.3 0-5.4 10.7-90.6 181.3zM202.8 96l-5.4 10.7-90.6 181.3 74.3 0 5.4-10.7 90.6-181.3-74.3 0zm288 192l85.2 0 0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-384c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 53.7-85.2 170.3z\"]\n};\nvar faCompassDrafting = {\n  prefix: 'fas',\n  iconName: 'compass-drafting',\n  icon: [512, 512, [\"drafting-compass\"], \"f568\", \"M99.3 256.1l69.4-119.9c-5.6-12.2-8.8-25.8-8.8-40.2 0-53 43-96 96-96s96 43 96 96c0 14.3-3.1 27.9-8.8 40.2l44.4 76.7c-23.1 26-53.7 45.1-88.4 53.8L256 191.9 187.9 309.5c21.5 6.8 44.3 10.5 68.1 10.5 70.7 0 133.8-32.7 174.9-84 11.1-13.8 31.2-16 45-5s16 31.2 5 45c-52.7 65.8-133.9 108-224.8 108-35.4 0-69.4-6.4-100.7-18.1L98.7 463.7C94 471.8 87 478.4 78.6 482.6L23.2 510.3c-5 2.5-10.9 2.2-15.6-.7S0 501.5 0 496l0-55.4c0-8.4 2.2-16.7 6.5-24.1l60-103.7c-12.8-11.2-24.6-23.5-35.3-36.8-11.1-13.8-8.8-33.9 5-45s33.9-8.8 45 5c5.7 7.1 11.8 13.8 18.2 20.1zM381.1 407.9c32.5-13 62.4-31 88.9-52.9l35.6 61.5c4.2 7.3 6.5 15.6 6.5 24.1l0 55.4c0 5.5-2.9 10.7-7.6 13.6s-10.6 3.2-15.6 .7l-55.4-27.7c-8.4-4.2-15.4-10.8-20.1-18.9l-32.3-55.8zM256 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nvar faDraftingCompass = faCompassDrafting;\nvar faSquarePersonConfined = {\n  prefix: 'fas',\n  iconName: 'square-person-confined',\n  icon: [448, 512, [], \"e577\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm96 112a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm80 104c0-30.9 25.1-56 56-56s56 25.1 56 56l0 102.1c0 36.4-29.5 65.9-65.9 65.9-17.5 0-34.3-6.9-46.6-19.3l-54.7-54.7-28.1 56.3c-7.9 15.8-27.1 22.2-42.9 14.3s-22.2-27.1-14.3-42.9l48-96c4.6-9.2 13.3-15.6 23.5-17.3s20.5 1.7 27.8 9l41.4 41.4 0-58.7z\"]\n};\nvar faPlateWheat = {\n  prefix: 'fas',\n  iconName: 'plate-wheat',\n  icon: [512, 512, [], \"e55a\", \"M176 32c44.2 0 80 35.8 80 80l0 16c0 8.8-7.2 16-16 16-44.2 0-80-35.8-80-80l0-16c0-8.8 7.2-16 16-16zM56 64l48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24S42.7 64 56 64zM24 136l112 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 184c-13.3 0-24-10.7-24-24s10.7-24 24-24zm8 96c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24zM272 48c0-8.8 7.2-16 16-16 44.2 0 80 35.8 80 80l0 16c0 8.8-7.2 16-16 16-44.2 0-80-35.8-80-80l0-16zM400 32c44.2 0 80 35.8 80 80l0 16c0 8.8-7.2 16-16 16-44.2 0-80-35.8-80-80l0-16c0-8.8 7.2-16 16-16zm80 160l0 16c0 44.2-35.8 80-80 80-8.8 0-16-7.2-16-16l0-16c0-44.2 35.8-80 80-80 8.8 0 16 7.2 16 16zM352 176c8.8 0 16 7.2 16 16l0 16c0 44.2-35.8 80-80 80-8.8 0-16-7.2-16-16l0-16c0-44.2 35.8-80 80-80zm-96 16l0 16c0 44.2-35.8 80-80 80-8.8 0-16-7.2-16-16l0-16c0-44.2 35.8-80 80-80 8.8 0 16 7.2 16 16zM3.5 347.6C1.6 332.9 13 320 27.8 320l456.4 0c14.8 0 26.2 12.9 24.4 27.6-6.3 50.2-44.4 89.4-92.6 98.4l0 2c0 17.7-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32l0-2c-48.2-9-86.3-48.2-92.5-98.4z\"]\n};\nvar faSignHanging = {\n  prefix: 'fas',\n  iconName: 'sign-hanging',\n  icon: [512, 512, [\"sign\"], \"f4d9\", \"M96 0c17.7 0 32 14.3 32 32l0 32 352 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-352 0 0 352c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-352-32 0C14.3 128 0 113.7 0 96S14.3 64 32 64l32 0 0-32C64 14.3 78.3 0 96 0zM208 176l240 0c17.7 0 32 14.3 32 32l0 144c0 17.7-14.3 32-32 32l-240 0c-17.7 0-32-14.3-32-32l0-144c0-17.7 14.3-32 32-32z\"]\n};\nvar faSign = faSignHanging;\nvar faCarBattery = {\n  prefix: 'fas',\n  iconName: 'car-battery',\n  icon: [512, 512, [\"battery-car\"], \"f5df\", \"M80 64c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l96 0c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l16 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128C0 92.7 28.7 64 64 64l16 0zM392 184c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 32-32 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l32 0 0 32c0 13.3 10.7 24 24 24s24-10.7 24-24l0-32 32 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-32 0 0-32zM64 240c0 13.3 10.7 24 24 24l112 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L88 216c-13.3 0-24 10.7-24 24z\"]\n};\nvar faBatteryCar = faCarBattery;\nvar faShirt = {\n  prefix: 'fas',\n  iconName: 'shirt',\n  icon: [640, 512, [128085, \"t-shirt\", \"tshirt\"], \"f553\", \"M320.2 112c44.2 0 80-35.8 80-80l53.5 0c17 0 33.3 6.7 45.3 18.7L617.6 169.4c12.5 12.5 12.5 32.8 0 45.3l-50.7 50.7c-12.5 12.5-32.8 12.5-45.3 0l-41.4-41.4 0 224c0 35.3-28.7 64-64 64l-192 0c-35.3 0-64-28.7-64-64l0-224-41.4 41.4c-12.5 12.5-32.8 12.5-45.3 0L22.9 214.6c-12.5-12.5-12.5-32.8 0-45.3L141.5 50.7c12-12 28.3-18.7 45.3-18.7l53.5 0c0 44.2 35.8 80 80 80z\"]\n};\nvar faTShirt = faShirt;\nvar faTshirt = faShirt;\nvar faParagraph = {\n  prefix: 'fas',\n  iconName: 'paragraph',\n  icon: [448, 512, [182], \"f1dd\", \"M160 0L416 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 416c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-416-48 0 0 416c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-160-48 0C71.6 320 0 248.4 0 160S71.6 0 160 0z\"]\n};\nvar faEnvelopesBulk = {\n  prefix: 'fas',\n  iconName: 'envelopes-bulk',\n  icon: [576, 512, [\"mail-bulk\"], \"f674\", \"M112 0C85.5 0 64 21.5 64 48l0 160 80 0 0-32c0-53 43-96 96-96l208 0 0-32c0-26.5-21.5-48-48-48L112 0zM240 128c-26.5 0-48 21.5-48 48l0 32 80 0c53 0 96 43 96 96l0 112 160 0c26.5 0 48-21.5 48-48l0-192c0-26.5-21.5-48-48-48l-288 0zm200 64l48 0c13.3 0 24 10.7 24 24l0 48c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24zM48 256c-26.5 0-48 21.5-48 48l0 10.4 156.6 86.2c1.1 .6 2.2 .9 3.4 .9s2.4-.3 3.4-.9L320 314.4 320 304c0-26.5-21.5-48-48-48L48 256zM320 369.2L186.6 442.6c-8.1 4.5-17.3 6.8-26.6 6.8s-18.4-2.4-26.6-6.8L0 369.2 0 464c0 26.5 21.5 48 48 48l224 0c26.5 0 48-21.5 48-48l0-94.8z\"]\n};\nvar faMailBulk = faEnvelopesBulk;\nvar faGuitar = {\n  prefix: 'fas',\n  iconName: 'guitar',\n  icon: [512, 512, [], \"f7a6\", \"M465 7c-9.4-9.4-24.6-9.4-33.9 0L383 55c-2.4 2.4-4.3 5.3-5.5 8.5l-15.4 41-77.5 77.6c-45.1-29.4-99.3-30.2-131 1.6-11 11-18 24.6-21.4 39.6-3.7 16.6-19.1 30.7-36.1 31.6-25.6 1.3-49.3 10.7-67.3 28.6-44.8 44.8-36.4 125.8 18.7 180.9S183.6 528 228.4 483.2c17.9-17.9 27.4-41.7 28.6-67.3 .9-17 15-32.3 31.6-36.1 15-3.4 28.6-10.5 39.6-21.4 31.8-31.8 31-85.9 1.6-131l77.6-77.6 41-15.4c3.2-1.2 6.1-3.1 8.5-5.5l48-48c9.4-9.4 9.4-24.6 0-33.9L465 7zM208 256a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nvar faSuitcase = {\n  prefix: 'fas',\n  iconName: 'suitcase',\n  icon: [512, 512, [129523], \"f0f2\", \"M200 48l112 0c4.4 0 8 3.6 8 8l0 40-128 0 0-40c0-4.4 3.6-8 8-8zm-56 8l0 424 224 0 0-424c0-30.9-25.1-56-56-56L200 0c-30.9 0-56 25.1-56 56zM416 96l0 384 32 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64l-32 0zM96 480l0-384-32 0C28.7 96 0 124.7 0 160L0 416c0 35.3 28.7 64 64 64l32 0z\"]\n};\nvar faCircleUp = {\n  prefix: 'fas',\n  iconName: 'circle-up',\n  icon: [512, 512, [61467, \"arrow-alt-circle-up\"], \"f35b\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zm11.3-387.3l104 104c4.6 4.6 5.9 11.5 3.5 17.4S366.5 256 360 256l-56 0 0 96c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-96-56 0c-6.5 0-12.3-3.9-14.8-9.9s-1.1-12.9 3.5-17.4l104-104c6.2-6.2 16.4-6.2 22.6 0z\"]\n};\nvar faArrowAltCircleUp = faCircleUp;\nvar faF = {\n  prefix: 'fas',\n  iconName: 'f',\n  icon: [320, 512, [102], \"46\", \"M32 32C14.3 32 0 46.3 0 64L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160 160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0 0-128 224 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32z\"]\n};\nvar faXmarksLines = {\n  prefix: 'fas',\n  iconName: 'xmarks-lines',\n  icon: [640, 512, [], \"e59a\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l576 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zm0 384c-17.7 0-32 14.3-32 32s14.3 32 32 32l576 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 416zM7 167c-9.4 9.4-9.4 24.6 0 33.9l55 55-55 55c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l55-55 55 55c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-55-55 55-55c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-55 55-55-55c-9.4-9.4-24.6-9.4-33.9 0zM265 167c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l55 55-55 55c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l55-55 55 55c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-55-55 55-55c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-55 55-55-55zM455 167c-9.4 9.4-9.4 24.6 0 33.9l55 55-55 55c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l55-55 55 55c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-55-55 55-55c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-55 55-55-55c-9.4-9.4-24.6-9.4-33.9 0z\"]\n};\nvar faEarthOceania = {\n  prefix: 'fas',\n  iconName: 'earth-oceania',\n  icon: [512, 512, [\"globe-oceania\"], \"e47b\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM192 150.6c0-12.5 10.1-22.6 22.6-22.6l41.4 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-18.7 0c-8.5 0-16.6-3.4-22.6-9.4l-16-16c-4.2-4.2-6.6-10-6.6-16zM432 256c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM411.3 379.3l-32 32c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l32-32c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6zM224 432c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16zm-96-80c-17.7 0-32-14.3-32-32l0-18.7c0-8.5 3.4-16.6 9.4-22.6l48-48c4.2-4.2 10-6.6 16-6.6l6.6 0c8.8 0 16 7.2 16 16s7.2 16 16 16 16-7.2 16-16 7.2-16 16-16l6.6 0c6 0 11.8 2.4 16 6.6l48 48c6 6 9.4 14.1 9.4 22.6l0 50.7c0 17.7-14.3 32-32 32l-50.7 0c-8.5 0-16.6-3.4-22.6-9.4l-13.3-13.3c-6-6-14.1-9.4-22.6-9.4L128 352z\"]\n};\nvar faGlobeOceania = faEarthOceania;\nvar faCommentSlash = {\n  prefix: 'fas',\n  iconName: 'comment-slash',\n  icon: [576, 512, [], \"f4b3\", \"M41-25C31.6-34.3 16.4-34.3 7-25S-2.3-.4 7 9L535 537c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-96.6-96.6c44.4-43.2 71.6-101.8 71.6-166.5 0-132.5-114.6-240-256-240-63 0-120.8 21.4-165.4 56.8L41-25zm19.4 155C42.2 163 32 200.3 32 239.9 32 294.2 51.2 344.2 83.6 384.4L34.8 476.7c-4.8 9-3.3 20 3.6 27.5S56.1 514 65.5 510l118.4-50.7c31.8 13.3 67.1 20.7 104.1 20.7 36.4 0 70.9-7.1 102.3-19.9L60.3 130.1z\"]\n};\nvar faPlay = {\n  prefix: 'fas',\n  iconName: 'play',\n  icon: [448, 512, [9654], \"f04b\", \"M91.2 36.9c-12.4-6.8-27.4-6.5-39.6 .7S32 57.9 32 72l0 368c0 14.1 7.5 27.2 19.6 34.4s27.2 7.5 39.6 .7l336-184c12.8-7 20.8-20.5 20.8-35.1s-8-28.1-20.8-35.1l-336-184z\"]\n};\nvar faVialCircleCheck = {\n  prefix: 'fas',\n  iconName: 'vial-circle-check',\n  icon: [512, 512, [], \"e596\", \"M32 32C32 14.3 46.3 0 64 0L288 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 161.4c-66.1 30.3-112 97.1-112 174.6 0 39.7 12 76.6 32.7 107.2-10.3 3.1-21.3 4.8-32.7 4.8-61.9 0-112-50.1-112-112L64 64C46.3 64 32 49.7 32 32zm96 32l0 128 96 0 0-128-96 0zm96 336a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm201.4-60.9c-7.1-5.2-17.2-3.6-22.4 3.5l-53 72.9-26.8-26.8c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c3.3 3.3 7.9 5 12.6 4.6s8.9-2.8 11.7-6.5l64-88c5.2-7.1 3.6-17.2-3.5-22.3z\"]\n};\nvar faBridgeCircleCheck = {\n  prefix: 'fas',\n  iconName: 'bridge-circle-check',\n  icon: [576, 512, [], \"e4c9\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l8 0 0 64-40 0 0 112c37.6 9.4 64 43.2 64 82l0 94c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-64c0-53 43-96 96-96 6.4 0 12.7 .6 18.7 1.8 34.7-49.5 92.2-81.8 157.3-81.8 28.6 0 55.6 6.2 80 17.4l0-65.4-40 0 0-64 8 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zM424 96l0 64-80 0 0-64 80 0zM296 96l0 64-80 0 0-64 80 0zM88 96l80 0 0 64-80 0 0-64zM576 400a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-86.6-60.9c7.1 5.2 8.7 15.2 3.5 22.3l-64 88c-2.8 3.8-7 6.2-11.7 6.5s-9.3-1.3-12.6-4.6l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l26.8 26.8 53-72.9c5.2-7.1 15.2-8.7 22.4-3.5z\"]\n};\nvar faCediSign = {\n  prefix: 'fas',\n  iconName: 'cedi-sign',\n  icon: [384, 512, [], \"e0df\", \"M232 32c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 26.5C88.8 73.9 16 156.4 16 256S88.8 438.1 184 453.5l0 26.5c0 13.3 10.7 24 24 24s24-10.7 24-24l0-24.6c46.8-3.7 89.1-23.6 121.3-53.9 12.9-12.1 13.4-32.4 1.3-45.2s-32.4-13.4-45.2-1.3c-20.7 19.6-47.6 32.7-77.3 36.2l0-270.1c29.8 3.5 56.6 16.6 77.3 36.2 12.9 12.1 33.1 11.5 45.2-1.3s11.5-33.1-1.3-45.2C321.1 80.2 278.8 60.3 232 56.6L232 32zm-48 91.8l0 264.4C124.3 373.8 80 320.1 80 256s44.3-117.8 104-132.2z\"]\n};\nvar faPuzzlePiece = {\n  prefix: 'fas',\n  iconName: 'puzzle-piece',\n  icon: [512, 512, [129513], \"f12e\", \"M224 0c35.3 0 64 21.5 64 48 0 10.4-4.4 20-12 27.9-6.6 6.9-12 15.3-12 24.9 0 15 12.2 27.2 27.2 27.2l44.8 0c26.5 0 48 21.5 48 48l0 44.8c0 15 12.2 27.2 27.2 27.2 9.5 0 18-5.4 24.9-12 7.9-7.5 17.5-12 27.9-12 26.5 0 48 28.7 48 64s-21.5 64-48 64c-10.4 0-20.1-4.4-27.9-12-6.9-6.6-15.3-12-24.9-12-15 0-27.2 12.2-27.2 27.2L384 464c0 26.5-21.5 48-48 48l-56.8 0c-12.8 0-23.2-10.4-23.2-23.2 0-9.2 5.8-17.3 13.2-22.8 11.6-8.7 18.8-20.7 18.8-34 0-26.5-28.7-48-64-48s-64 21.5-64 48c0 13.3 7.2 25.3 18.8 34 7.4 5.5 13.2 13.5 13.2 22.8 0 12.8-10.4 23.2-23.2 23.2L48 512c-26.5 0-48-21.5-48-48L0 343.2c0-12.8 10.4-23.2 23.2-23.2 9.2 0 17.3 5.8 22.8 13.2 8.7 11.6 20.7 18.8 34 18.8 26.5 0 48-28.7 48-64s-21.5-64-48-64c-13.3 0-25.3 7.2-34 18.8-5.5 7.4-13.5 13.2-22.8 13.2-12.8 0-23.2-10.4-23.2-23.2L0 176c0-26.5 21.5-48 48-48l108.8 0c15 0 27.2-12.2 27.2-27.2 0-9.5-5.4-18-12-24.9-7.5-7.9-12-17.5-12-27.9 0-26.5 28.7-48 64-48z\"]\n};\nvar faHelmetUn = {\n  prefix: 'fas',\n  iconName: 'helmet-un',\n  icon: [512, 512, [], \"e503\", \"M479.5 224C471.2 98.9 367.2 0 240 0 107.5 0 0 107.5 0 240l0 56.3C0 344.8 39.2 384 87.7 384l127.3 0 128.6 121.4c4.5 4.2 10.4 6.6 16.5 6.6l96 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-86.5 0-1.5-1.5 0-174.5 112 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-.5 0zM320 417.2l-78-73.7 32.4-55.5 45.6 0 0 129.2zM285.3 103.1l34.7 52 0-43.2c0-8.8 7.2-16 16-16s16 7.2 16 16l0 96c0 7.1-4.6 13.3-11.4 15.3s-14-.6-17.9-6.4l-34.7-52 0 43.2c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-7.1 4.6-13.3 11.4-15.3s14 .6 17.9 6.4zM160 112l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16l0 64c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16z\"]\n};\nvar faGlassWater = {\n  prefix: 'fas',\n  iconName: 'glass-water',\n  icon: [384, 512, [], \"e4f4\", \"M32 0C23.1 0 14.6 3.7 8.6 10.2S-.6 25.4 .1 34.3L28.9 437.7c3 41.9 37.8 74.3 79.8 74.3l166.6 0c42 0 76.8-32.4 79.8-74.3L383.9 34.3c.6-8.9-2.4-17.6-8.5-24.1S360.9 0 352 0L32 0zM73 156.5l-6.6-92.5 251.3 0-6.6 92.5-24.2 12.1c-19.4 9.7-42.2 9.7-61.6 0-20.9-10.4-45.5-10.4-66.4 0-19.4 9.7-42.2 9.7-61.6 0L73 156.5z\"]\n};\nvar faHeartCircleBolt = {\n  prefix: 'fas',\n  iconName: 'heart-circle-bolt',\n  icon: [576, 512, [], \"e4fc\", \"M241 87.1l15 20.7 15-20.7C296 52.5 336.2 32 378.9 32 452.4 32 512 91.6 512 165.1l0 2.6c0 17.6-3.4 35.6-9.5 53.7-21.8-8.6-45.6-13.4-70.5-13.4-106 0-192 86-192 192 0 28.5 6.2 55.6 17.4 80-.5 0-.9 0-1.4 0-15.5 0-30.8-4.6-43.1-14.1-73-55.7-212.9-186-212.9-298.2l0-2.6C0 91.6 59.6 32 133.1 32 175.8 32 216 52.5 241 87.1zM288 400a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm177.4-77c-5.8-4.2-13.8-4-19.4 .5l-80 64c-5.3 4.2-7.4 11.4-5.1 17.8S369.2 416 376 416l32.9 0-15.9 42.4c-2.5 6.7-.2 14.3 5.6 18.6s13.8 4 19.4-.5l80-64c5.3-4.2 7.4-11.4 5.1-17.8S494.8 384 488 384l-32.9 0 15.9-42.4c2.5-6.7 .2-14.3-5.6-18.6z\"]\n};\nvar faPumpSoap = {\n  prefix: 'fas',\n  iconName: 'pump-soap',\n  icon: [320, 512, [], \"e06b\", \"M96 0l0 80 128 0 0-24 72 0c13.3 0 24-10.7 24-24S309.3 8 296 8l-72 0 0-8c0-17.7-14.3-32-32-32l-64 0C110.3-32 96-17.7 96 0zM64 128c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l192 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 128zM224 344c0 35.3-28.7 56-64 56s-64-20.7-64-56c0-32.5 37-80.9 50.9-97.9 3.2-3.9 8.1-6.1 13.1-6.1s9.9 2.2 13.1 6.1C187 263.1 224 311.5 224 344z\"]\n};\nvar faHandScissors = {\n  prefix: 'fas',\n  iconName: 'hand-scissors',\n  icon: [512, 512, [], \"f257\", \"M40 208c-22.1 0-40 17.9-40 40s17.9 40 40 40l180.2 0c-7.6 8.5-12.2 19.7-12.2 32 0 25.3 19.5 46 44.3 47.9-7.7 8.5-12.3 19.8-12.3 32.1 0 26.5 21.5 48 48 48l96 0c70.7 0 128-57.3 128-128l0-113.1c0-40.2-16-78.8-44.4-107.3-22.8-22.8-53.6-35.6-85.8-35.6L336 64c-21.3 0-39.3 13.9-45.6 33.1l74.5 23.7c8.4 2.7 13.1 11.7 10.4 20.1s-11.7 13.1-20.1 10.4l-67.1-21.4 0 .1-204-64.1C62.9 59.2 40.5 70.9 33.9 92s5.1 43.5 26.2 50.2L269.5 208 40 208z\"]\n};\nvar faDolly = {\n  prefix: 'fas',\n  iconName: 'dolly',\n  icon: [576, 512, [\"dolly-box\"], \"f472\", \"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64l72.9 0 92.1 276.2c-22.5 17.6-37 45-37 75.8 0 53 43 96 96 96 52.4 0 95.1-42 96-94.3l202.1-67.4c16.8-5.6 25.8-23.7 20.2-40.5s-23.7-25.8-40.5-20.2L331.8 357c-17.2-22.1-43.9-36.5-74-37L165.7 43.8C156.9 17.6 132.5 0 104.9 0L32 0zM208 416a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM280.5 89.3c-25.2 8.2-39 35.3-30.8 60.5l39.6 121.7c8.2 25.2 35.3 39 60.5 30.8l121.7-39.6c25.2-8.2 39-35.3 30.8-60.5L462.8 80.5c-8.2-25.2-35.3-39-60.5-30.8L280.5 89.3z\"]\n};\nvar faDollyBox = faDolly;\nvar faPaperclip = {\n  prefix: 'fas',\n  iconName: 'paperclip',\n  icon: [512, 512, [128206], \"f0c6\", \"M224.6 12.8c56.2-56.2 147.4-56.2 203.6 0s56.2 147.4 0 203.6l-164 164c-34.4 34.4-90.1 34.4-124.5 0s-34.4-90.1 0-124.5L292.5 103.3c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L185 301.3c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l164-164c31.2-31.2 31.2-81.9 0-113.1s-81.9-31.2-113.1 0l-164 164c-53.1 53.1-53.1 139.2 0 192.3s139.2 53.1 192.3 0L428.3 284.3c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L343.4 459.6c-78.1 78.1-204.7 78.1-282.8 0s-78.1-204.7 0-282.8l164-164z\"]\n};\nvar faDemocrat = {\n  prefix: 'fas',\n  iconName: 'democrat',\n  icon: [640, 512, [], \"f747\", \"M64 32c0-8.9 3.8-20.9 6.2-27.3 1-2.8 3.8-4.7 6.8-4.7 1.9 0 3.8 .7 5.2 2.1L128 45.7 173.8 2.1c1.4-1.3 3.2-2.1 5.2-2.1 3 0 5.8 1.8 6.8 4.7 2.4 6.5 6.2 18.4 6.2 27.3 0 26.5-21.9 42-29.5 46.6l76.2 72.6c6 5.7 13.9 8.8 22.1 8.8l219.2 0 32 0c40.3 0 78.2 19 102.4 51.2l19.2 25.6c10.6 14.1 7.7 34.2-6.4 44.8s-34.2 7.7-44.8-6.4l-19.2-25.6c-5.3-7-11.8-12.8-19.2-17l0 87.4-352 0-40.4-94.3c-3.9-9.2-15.3-12.6-23.6-7l-42.1 28c-9.1 6.1-19.7 9.3-30.7 9.3l-2 0C23.9 256 0 232.1 0 202.7 0 190.6 4.1 178.9 11.7 169.4L87.6 74.6C78.1 67.4 64 53.2 64 32zM544 352l0 128c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-64-160 0 0 64c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-128 352 0zM256 280a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm248-24a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM368 280a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nvar faSquareArrowUpRight = {\n  prefix: 'fas',\n  iconName: 'square-arrow-up-right',\n  icon: [448, 512, [\"external-link-square\"], \"f14c\", \"M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM272 296c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24l-112 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l54.1 0-103 103c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l103-103 0 54.1z\"]\n};\nvar faExternalLinkSquare = faSquareArrowUpRight;\nvar faFerry = {\n  prefix: 'fas',\n  iconName: 'ferry',\n  icon: [640, 512, [], \"e4ea\", \"M224 32c0-17.7 14.3-32 32-32L384 0c17.7 0 32 14.3 32 32l0 32 48 0c44.2 0 80 35.8 80 80l0 128-.1 0c.1 .7 .1 1.3 .1 2 0 30.2-7.6 59.8-22 86.3l-12.7 23.3-.6 1c-22.3-11.3-46.5-16.8-70.8-16.7-32.5 .2-64.9 10.7-92.4 31.4-22.1 16.6-29.1 16.6-51.2 0-28.1-21.1-61.3-31.6-94.4-31.4-23.6 .2-47.1 5.7-68.7 16.7l-.6-1-12.7-23.3c-14.4-26.5-22-56.2-22-86.3 0-.7 0-1.4 .1-2l-.1 0 0-128c0-44.2 35.8-80 80-80l48 0 0-32zM160 256l320 0 0-112c0-8.8-7.2-16-16-16l-288 0c-8.8 0-16 7.2-16 16l0 112zM403.4 476.1C379.1 494.3 351.1 512 320 512s-59.1-17.7-83.4-35.9c-21.3-16.1-49.9-16.1-71.2 0-23.8 17.9-54.1 35.5-88.1 35.3-20.4-.1-40.7-6.7-59.8-21.1-10.6-8-12.7-23-4.7-33.6s23-12.7 33.6-4.7c11.3 8.5 21.6 11.4 31.2 11.5 17.6 .1 37.3-9.4 58.9-25.7 38.4-29 90.5-29 129 0 24 18.1 40.7 26.3 54.5 26.3s30.5-8.2 54.5-26.3c38.4-29 90.5-29 129 0 16.9 12.7 32.9 21.5 47.8 24.6 13.7 2.8 27.4 .9 42.3-10.3 10.6-8 25.6-5.9 33.6 4.7s5.9 25.6-4.7 33.6c-26.4 19.9-54.2 24.4-80.7 19.1-25.3-5.1-48.1-18.9-67.2-33.3-21.3-16.1-49.9-16.1-71.2 0z\"]\n};\nvar faMosquito = {\n  prefix: 'fas',\n  iconName: 'mosquito',\n  icon: [576, 512, [], \"e52b\", \"M178.5 495.2c-7.5 9.6-21 12.1-31.3 5.3S133.5 480 138.9 469l1.2-2.2 36.2-58 0-41 .3-4c.6-3.9 2.2-7.7 4.6-10.9l39.3-52.2-66.2 59.5c-17 15.3-39 23.7-61.9 23.8l-8.1 0c-46.6 0-84.4-37.8-84.4-84.4 0-43 32.4-79.2 75.1-83.9l130.5-14.5-44.8-38.3-2.4-2.4c-5.3-6-7.3-14.4-5.3-22.3l13.3-53.4-25.9-38.9-1.3-2.1c-5.8-10.8-2.7-24.6 7.4-31.7 10.1-7.1 23.7-5.1 31.4 4.3l1.5 2 32 48 1.4 2.2c2.8 5.3 3.5 11.6 2.1 17.6l-12.3 49.2 53.3 45.7 0-28.8c0-11.8 6.5-22.1 16-27.7l0-60.5 .3-3.3c1.5-7.3 8-12.7 15.7-12.7s14.2 5.5 15.7 12.7l.3 3.2 0 60.5c9.6 5.5 16 15.8 16 27.7l0 28.9 53.4-45.8-12.3-49.2c-1.5-5.9-.7-12.2 2.1-17.6l1.4-2.2 32-48 1.5-2c7.7-9.4 21.3-11.5 31.4-4.3 10.1 7.1 13.1 20.9 7.4 31.7l-1.3 2.1-25.9 38.9 13.3 53.4c2 8-.1 16.3-5.3 22.3l-2.4 2.4-44.7 38.3 130.5 14.5c42.8 4.8 75.1 40.9 75.1 83.9 0 46.6-37.8 84.4-84.4 84.4l-8.1 0c-22.8 0-44.9-8.5-61.9-23.8l-66.1-59.5 39.2 52.2c2.4 3.2 4 7 4.6 10.9l.3 4 0 41 36.2 58 1.2 2.1c5.4 11 2 24.7-8.3 31.5s-23.8 4.4-31.3-5.3l-1.4-2-40-64-1.6-3.1c-1.4-3.1-2.1-6.6-2.1-10.1l0-39.8-32.4-43.1 0 74.7c0 17.7-14.3 32-32 32-17.7 0-32-14.3-32-32l0-74.6-32.3 43 0 39.8c0 3.5-.7 6.9-2.1 10.1l-1.6 3.1-40 64-1.4 2z\"]\n};\nvar faBuildingCircleArrowRight = {\n  prefix: 'fas',\n  iconName: 'building-circle-arrow-right',\n  icon: [576, 512, [], \"e4d1\", \"M32 64C32 28.7 60.7 0 96 0L352 0c35.3 0 64 28.7 64 64l0 144.7c-35.7 2.9-68.5 15.6-96 35.4l0-4c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l4 0c-13.8 19.2-24.1 41-30.1 64.5-1.9-.4-3.9-.5-5.9-.5l-32 0c-17.7 0-32 14.3-32 32l0 80 74.9 0c6.1 17.3 14.6 33.4 25.1 48L96 512c-35.3 0-64-28.7-64-64L32 64zM144 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm112 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM144 224c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM288 400a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm140.7-67.3c-6.2 6.2-6.2 16.4 0 22.6l28.7 28.7-89.4 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l89.4 0-28.7 28.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l56-56c6.2-6.2 6.2-16.4 0-22.6l-56-56c-6.2-6.2-16.4-6.2-22.6 0z\"]\n};\nvar faLeftRight = {\n  prefix: 'fas',\n  iconName: 'left-right',\n  icon: [512, 512, [8596, \"arrows-alt-h\"], \"f337\", \"M502.6 406.6l-96 96c-9.2 9.2-22.9 11.9-34.9 6.9S352 492.9 352 480l0-64-320 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l320 0 0-64c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l96 96c12.5 12.5 12.5 32.8 0 45.3zM9.4 150.6c-12.5-12.5-12.5-32.8 0-45.3l96-96c9.2-9.2 22.9-11.9 34.9-6.9S160 19.1 160 32l0 64 320 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-320 0 0 64c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9l-96-96z\"]\n};\nvar faArrowsAltH = faLeftRight;\nvar faVirus = {\n  prefix: 'fas',\n  iconName: 'virus',\n  icon: [512, 512, [], \"e074\", \"M296 40c0-22.1-17.9-40-40-40s-40 17.9-40 40c0 44.1-53.3 66.1-84.5 35-15.6-15.6-40.9-15.6-56.6 0s-15.6 40.9 0 56.6c31.2 31.2 9.1 84.5-35 84.5-22.1 0-40 17.9-40 40s17.9 40 40 40c44.1 0 66.1 53.3 35 84.5-15.6 15.6-15.6 40.9 0 56.6s40.9 15.6 56.6 0c31.2-31.2 84.5-9.1 84.5 35 0 22.1 17.9 40 40 40s40-17.9 40-40c0-44.1 53.3-66.1 84.5-35 15.6 15.6 40.9 15.6 56.6 0s15.6-40.9 0-56.6c-31.2-31.2-9.1-84.5 35-84.5 22.1 0 40-17.9 40-40s-17.9-40-40-40c-44.1 0-66.1-53.3-35-84.5 15.6-15.6 15.6-40.9 0-56.6s-40.9-15.6-56.6 0C349.3 106.1 296 84.1 296 40zM160 224a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm160 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faGem = {\n  prefix: 'fas',\n  iconName: 'gem',\n  icon: [512, 512, [128142], \"f3a5\", \"M116.7 33.8c4.5-6.1 11.7-9.8 19.3-9.8l240 0c7.6 0 14.8 3.6 19.3 9.8l112 152c6.8 9.2 6.1 21.9-1.5 30.4l-232 256c-4.5 5-11 7.9-17.8 7.9s-13.2-2.9-17.8-7.9l-232-256c-7.7-8.5-8.3-21.2-1.5-30.4l112-152zm38.5 39.8c-3.3 2.5-4.2 7-2.1 10.5L210.5 179.8 63.3 192c-4.1 .3-7.3 3.8-7.3 8s3.2 7.6 7.3 8l192 16c.4 0 .9 0 1.3 0l192-16c4.1-.3 7.3-3.8 7.3-8s-3.2-7.6-7.3-8l-147.2-12.3 57.4-95.6c2.1-3.5 1.2-8.1-2.1-10.5s-7.9-2-10.7 1L256 172.2 165.9 74.6c-2.8-3-7.4-3.4-10.7-1z\"]\n};\nvar faToilet = {\n  prefix: 'fas',\n  iconName: 'toilet',\n  icon: [448, 512, [128701], \"f7d8\", \"M24 0C10.7 0 0 10.7 0 24S10.7 48 24 48l8 0 0 148.9c-1.9 1.4-3.8 2.9-5.6 4.4-15.5 13.2-26.4 31.6-26.4 54.6 0 46.9 14.3 84.1 37 112.5 14.2 17.7 31.1 31.3 48.5 41.8L65.6 469.9c-3.3 9.8-1.6 20.5 4.4 28.8S85.7 512 96 512l256 0c10.3 0 19.9-4.9 26-13.3s7.7-19.1 4.4-28.8l-19.8-59.5c17.4-10.5 34.3-24.1 48.5-41.8 22.7-28.4 37-65.5 37-112.5 0-23.1-10.9-41.5-26.4-54.6-1.8-1.5-3.7-3-5.6-4.4l0-148.9 8 0c13.3 0 24-10.7 24-24S437.3 0 424 0L24 0zM96 80c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16zM224 288c-88.4 0-160-14.3-160-32s71.6-32 160-32 160 14.3 160 32-71.6 32-160 32z\"]\n};\nvar faSingleQuoteLeft = {\n  prefix: 'fas',\n  iconName: 'single-quote-left',\n  icon: [192, 512, [], \"e81b\", \"M128 96c17.7 0 32 14.3 32 32s-14.3 32-32 32l-8 0c-30.9 0-56 25.1-56 56l0 8 64 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64l-64 0c-35.3 0-64-28.7-64-64L0 216C0 149.7 53.7 96 120 96l8 0z\"]\n};\nvar faMoneyBills = {\n  prefix: 'fas',\n  iconName: 'money-bills',\n  icon: [576, 512, [], \"e1f3\", \"M160 32c-35.3 0-64 28.7-64 64l0 224c0 35.3 28.7 64 64 64l352 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L160 32zm176 96a80 80 0 1 1 0 160 80 80 0 1 1 0-160zM160 152l0-48c0-4.4 3.6-8 8-8l48 0c4.4 0 8.1 3.6 7.5 8-3.6 29-26.6 51.9-55.5 55.5-4.4 .5-8-3.1-8-7.5zm0 112c0-4.4 3.6-8.1 8-7.5 29 3.6 51.9 26.6 55.5 55.5 .5 4.4-3.1 8-7.5 8l-48 0c-4.4 0-8-3.6-8-8l0-48zM504 159.5c-29-3.6-51.9-26.6-55.5-55.5-.5-4.4 3.1-8 7.5-8l48 0c4.4 0 8 3.6 8 8l0 48c0 4.4-3.6 8.1-8 7.5zM512 264l0 48c0 4.4-3.6 8-8 8l-48 0c-4.4 0-8.1-3.6-7.5-8 3.6-29 26.6-51.9 55.5-55.5 4.4-.5 8 3.1 8 7.5zM48 152c0-13.3-10.7-24-24-24S0 138.7 0 152L0 416c0 35.3 28.7 64 64 64l392 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L64 432c-8.8 0-16-7.2-16-16l0-264z\"]\n};\nvar faTabletButton = {\n  prefix: 'fas',\n  iconName: 'tablet-button',\n  icon: [448, 512, [], \"f10a\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L64 0zM224 400a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faRectangleXmark = {\n  prefix: 'fas',\n  iconName: 'rectangle-xmark',\n  icon: [512, 512, [62164, \"rectangle-times\", \"times-rectangle\", \"window-close\"], \"f410\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zM167 167c9.4-9.4 24.6-9.4 33.9 0l55 55 55-55c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-55 55 55 55c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-55-55-55 55c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l55-55-55-55c-9.4-9.4-9.4-24.6 0-33.9z\"]\n};\nvar faRectangleTimes = faRectangleXmark;\nvar faTimesRectangle = faRectangleXmark;\nvar faWindowClose = faRectangleXmark;\nvar faWrench = {\n  prefix: 'fas',\n  iconName: 'wrench',\n  icon: [576, 512, [128295], \"f0ad\", \"M509.4 98.6c7.6-7.6 20.3-5.7 24.1 4.3 6.8 17.7 10.5 37 10.5 57.1 0 88.4-71.6 160-160 160-17.5 0-34.4-2.8-50.2-8L146.9 498.9c-28.1 28.1-73.7 28.1-101.8 0s-28.1-73.7 0-101.8L232 210.2c-5.2-15.8-8-32.6-8-50.2 0-88.4 71.6-160 160-160 20.1 0 39.4 3.7 57.1 10.5 10 3.8 11.8 16.5 4.3 24.1l-88.7 88.7c-3 3-4.7 7.1-4.7 11.3l0 41.4c0 8.8 7.2 16 16 16l41.4 0c4.2 0 8.3-1.7 11.3-4.7l88.7-88.7z\"]\n};\nvar faTrashCan = {\n  prefix: 'fas',\n  iconName: 'trash-can',\n  icon: [448, 512, [61460, \"trash-alt\"], \"f2ed\", \"M136.7 5.9C141.1-7.2 153.3-16 167.1-16l113.9 0c13.8 0 26 8.8 30.4 21.9L320 32 416 32c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64S14.3 32 32 32l96 0 8.7-26.1zM32 144l384 0 0 304c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-304zm88 64c-13.3 0-24 10.7-24 24l0 192c0 13.3 10.7 24 24 24s24-10.7 24-24l0-192c0-13.3-10.7-24-24-24zm104 0c-13.3 0-24 10.7-24 24l0 192c0 13.3 10.7 24 24 24s24-10.7 24-24l0-192c0-13.3-10.7-24-24-24zm104 0c-13.3 0-24 10.7-24 24l0 192c0 13.3 10.7 24 24 24s24-10.7 24-24l0-192c0-13.3-10.7-24-24-24z\"]\n};\nvar faTrashAlt = faTrashCan;\nvar faTableCells = {\n  prefix: 'fas',\n  iconName: 'table-cells',\n  icon: [448, 512, [\"th\"], \"f00a\", \"M384 96l0 64-64 0 0-64 64 0zm0 128l0 64-64 0 0-64 64 0zm0 128l0 64-64 0 0-64 64 0zM256 288l-64 0 0-64 64 0 0 64zm-64 64l64 0 0 64-64 0 0-64zm-64-64l-64 0 0-64 64 0 0 64zM64 352l64 0 0 64-64 0 0-64zm0-192l0-64 64 0 0 64-64 0zm128 0l0-64 64 0 0 64-64 0zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32z\"]\n};\nvar faTh = faTableCells;\nvar faRibbon = {\n  prefix: 'fas',\n  iconName: 'ribbon',\n  icon: [384, 512, [127895], \"f4d6\", \"M235.1 0c33.4 0 64.5 17.4 81.9 45.9 1.2 2 13 21.3 35.3 57.8 21.1 34.5 18.3 78.5-7 110L278.3 297.7 364.5 406c5.5 6.9 4.4 16.9-2.5 22.5l-80 64c-6.9 5.5-17 4.4-22.5-2.5L38.6 213.8C13.3 182.3 10.5 138.3 31.6 103.8 54 67.2 65.7 47.9 67 45.9 84.4 17.4 115.4 0 148.9 0l86.3 0zM192 189.2l48.6-61.2-97.3 0 48.6 61.2zM75 336.2l86.2 107.8-36.8 46c-5.5 6.9-15.6 8-22.5 2.5l-80-64c-6.9-5.5-8-15.6-2.5-22.5L75 336.2z\"]\n};\nvar faLandmarkFlag = {\n  prefix: 'fas',\n  iconName: 'landmark-flag',\n  icon: [512, 512, [], \"e51c\", \"M352-32L240-32c-8.8 0-16 7.2-16 16l0 144-176 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l16 0 0 224-51.2 38.4C4.7 460.4 0 469.9 0 480 0 497.7 14.3 512 32 512l448 0c17.7 0 32-14.3 32-32 0-10.1-4.7-19.6-12.8-25.6l-51.2-38.4 0-224 16 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-192 0 0-64 80 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16zm48 224l0 224-64 0 0-224 64 0zm-112 0l0 224-64 0 0-224 64 0zm-112 0l0 224-64 0 0-224 64 0z\"]\n};\nvar faUpDownLeftRight = {\n  prefix: 'fas',\n  iconName: 'up-down-left-right',\n  icon: [512, 512, [\"arrows-alt\"], \"f0b2\", \"M278.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9S179.1 128 192 128l32 0 0 96-96 0 0-32c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-64 64c-12.5 12.5-12.5 32.8 0 45.3l64 64c9.2 9.2 22.9 11.9 34.9 6.9S128 332.9 128 320l0-32 96 0 0 96-32 0c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c9.2-9.2 11.9-22.9 6.9-34.9S332.9 384 320 384l-32 0 0-96 96 0 0 32c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-9.2-9.2-22.9-11.9-34.9-6.9S384 179.1 384 192l0 32-96 0 0-96 32 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64z\"]\n};\nvar faArrowsAlt = faUpDownLeftRight;\nvar faCarSide = {\n  prefix: 'fas',\n  iconName: 'car-side',\n  icon: [640, 512, [128663], \"f5e4\", \"M147 106.7l-29.8 85.3 122.9 0 0-96-77.9 0c-6.8 0-12.9 4.3-15.1 10.7zM48.6 193.9L86.5 85.6C97.8 53.5 128.1 32 162.1 32L360 32c25.2 0 48.9 11.9 64 32l96.2 128.3C587.1 196.5 640 252.1 640 320l0 16c0 35.3-28.7 64-64 64l-16.4 0c-4 44.9-41.7 80-87.6 80s-83.6-35.1-87.6-80l-144.7 0c-4 44.9-41.7 80-87.6 80s-83.6-35.1-87.6-80l-.4 0c-35.3 0-64-28.7-64-64l0-80c0-30.1 20.7-55.3 48.6-62.1zM440 192l-67.2-89.6c-3-4-7.8-6.4-12.8-6.4l-72 0 0 96 152 0zM152 432a40 40 0 1 0 0-80 40 40 0 1 0 0 80zm360-40a40 40 0 1 0 -80 0 40 40 0 1 0 80 0z\"]\n};\nvar faTrashArrowUp = {\n  prefix: 'fas',\n  iconName: 'trash-arrow-up',\n  icon: [448, 512, [\"trash-restore\"], \"f829\", \"M167.1-16l113.9 0c13.8 0 26 8.8 30.4 21.9L320 32 416 32c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64S14.3 32 32 32l96 0 8.7-26.1C141.1-7.2 153.3-16 167.1-16zM32 144l384 0-21.1 323.1C393.3 492.4 372.3 512 347 512L101 512c-25.3 0-46.3-19.6-47.9-44.9L32 144zm209 79c-9.4-9.4-24.6-9.4-33.9 0l-72 72c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l31-31 0 102.1c0 13.3 10.7 24 24 24s24-10.7 24-24l0-102.1 31 31c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-72-72z\"]\n};\nvar faTrashRestore = faTrashArrowUp;\nvar faLifeRing = {\n  prefix: 'fas',\n  iconName: 'life-ring',\n  icon: [512, 512, [], \"f1cd\", \"M367.2 412.5C335.9 434.9 297.5 448 256 448s-79.9-13.1-111.2-35.5l58-58c15.8 8.6 34 13.5 53.3 13.5s37.4-4.9 53.3-13.5l58 58zm90.7 .8c33.8-43.4 54-98 54-157.3S491.8 142.1 458 98.7c9-12.5 7.9-30.1-3.4-41.3S425.8 45 413.3 54C369.9 20.2 315.3 0 256 0S142.1 20.2 98.7 54c-12.5-9-30.1-7.9-41.3 3.4S45 86.2 54 98.7C20.2 142.1 0 196.7 0 256S20.2 369.9 54 413.3c-9 12.5-7.9 30.1 3.4 41.3S86.2 467 98.7 458c43.4 33.8 98 54 157.3 54s113.9-20.2 157.3-54c12.5 9 30.1 7.9 41.3-3.4s12.4-28.8 3.4-41.3zm-45.5-46.1l-58-58c8.6-15.8 13.5-34 13.5-53.3s-4.9-37.4-13.5-53.3l58-58C434.9 176.1 448 214.5 448 256s-13.1 79.9-35.5 111.2zM367.2 99.5l-58 58c-15.8-8.6-34-13.5-53.3-13.5s-37.4 4.9-53.3 13.5l-58-58C176.1 77.1 214.5 64 256 64s79.9 13.1 111.2 35.5zM157.5 309.3l-58 58C77.1 335.9 64 297.5 64 256s13.1-79.9 35.5-111.2l58 58c-8.6 15.8-13.5 34-13.5 53.3s4.9 37.4 13.5 53.3zM208 256a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\"]\n};\nvar faCopyright = {\n  prefix: 'fas',\n  iconName: 'copyright',\n  icon: [512, 512, [169], \"f1f9\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM205.1 306.9c28.1 28.1 73.7 28.1 101.8 0 9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9c-46.9 46.9-122.8 46.9-169.7 0s-46.9-122.8 0-169.7 122.8-46.9 169.7 0c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0c-28.1-28.1-73.7-28.1-101.8 0s-28.1 73.7 0 101.8z\"]\n};\nvar faFilePrescription = {\n  prefix: 'fas',\n  iconName: 'file-prescription',\n  icon: [384, 512, [], \"f572\", \"M0 64C0 28.7 28.7 0 64 0L213.5 0c17 0 33.3 6.7 45.3 18.7L365.3 125.3c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm208-5.5l0 93.5c0 13.3 10.7 24 24 24L325.5 176 208 58.5zM88 192c-13.3 0-24 10.7-24 24l0 144c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40 22.5 0 58.4 55-33.4 31.6c-9.6 9.1-10.1 24.3-.9 33.9s24.3 10.1 33.9 .9l35.4-33.5 35.6 33.5c9.7 9.1 24.8 8.6 33.9-1s8.6-24.8-1-33.9l-33.6-31.6 33.6-31.8c9.6-9.1 10.1-24.3 .9-33.9s-24.3-10.1-33.9-.9l-35.7 33.7-40.9-38.5c12.9-11.7 21.1-28.6 21.1-47.5 0-35.3-28.7-64-64-64l-56 0zm32 80l-8 0 0-32 32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-24 0z\"]\n};\nvar faEraser = {\n  prefix: 'fas',\n  iconName: 'eraser',\n  icon: [576, 512, [], \"f12d\", \"M178.5 416l123 0 65.3-65.3-173.5-173.5-126.7 126.7 112 112zM224 480l-45.5 0c-17 0-33.3-6.7-45.3-18.7L17 345C6.1 334.1 0 319.4 0 304s6.1-30.1 17-41L263 17C273.9 6.1 288.6 0 304 0s30.1 6.1 41 17L527 199c10.9 10.9 17 25.6 17 41s-6.1 30.1-17 41l-135 135 120 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-288 0z\"]\n};\nvar faHourglassStart = {\n  prefix: 'fas',\n  iconName: 'hourglass-start',\n  icon: [384, 512, [\"hourglass-1\"], \"f251\", \"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64l0 11c0 42.4 16.9 83.1 46.9 113.1l67.9 67.9-67.9 67.9C48.9 353.9 32 394.6 32 437l0 11c-17.7 0-32 14.3-32 32s14.3 32 32 32l320 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-11c0-42.4-16.9-83.1-46.9-113.1l-67.9-67.9 67.9-67.9c30-30 46.9-70.7 46.9-113.1l0-11c17.7 0 32-14.3 32-32S369.7 0 352 0L32 0zM288 437l0 11-192 0 0-11c0-25.5 10.1-49.9 28.1-67.9l67.9-67.9 67.9 67.9c18 18 28.1 42.4 28.1 67.9z\"]\n};\nvar faHourglass1 = faHourglassStart;\nvar faCircleLeft = {\n  prefix: 'fas',\n  iconName: 'circle-left',\n  icon: [512, 512, [61840, \"arrow-alt-circle-left\"], \"f359\", \"M512 256a256 256 0 1 0 -512 0 256 256 0 1 0 512 0zM124.7 244.7l104-104c4.6-4.6 11.5-5.9 17.4-3.5s9.9 8.3 9.9 14.8l0 56 96 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32l-96 0 0 56c0 6.5-3.9 12.3-9.9 14.8s-12.9 1.1-17.4-3.5l-104-104c-6.2-6.2-6.2-16.4 0-22.6z\"]\n};\nvar faArrowAltCircleLeft = faCircleLeft;\nvar faCruzeiroSign = {\n  prefix: 'fas',\n  iconName: 'cruzeiro-sign',\n  icon: [448, 512, [], \"e152\", \"M240 96c-88.4 0-160 71.6-160 160 0 71.6 47.1 132.3 112 152.7L192 256c0-13.3 10.7-24 24-24 12.8 0 23.3 10.1 24 22.7 15.5-9.5 33.5-14.7 52.3-14.7l11.8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-11.8 0c-18.8 0-36.1 10-45.4 26.3-4.5 7.9-6.9 16.8-6.9 25.9l0 75.8c42.5 0 81.1-16.6 109.8-43.6 12.9-12.1 33.1-11.5 45.2 1.3s11.5 33.1-1.3 45.2C353.7 456.8 299.5 480 240 480 116.3 480 16 379.7 16 256S116.3 32 240 32c59.5 0 113.7 23.2 153.7 61.1 12.9 12.1 13.4 32.4 1.3 45.2s-32.4 13.4-45.2 1.3C321.1 112.6 282.5 96 240 96z\"]\n};\nvar faSmoking = {\n  prefix: 'fas',\n  iconName: 'smoking',\n  icon: [576, 512, [128684], \"f48d\", \"M360 0c13.3 0 24 10.7 24 24l0 19c0 40.3 16 79 44.5 107.5l21 21C469 191 480 217.4 480 245l0 19c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-19c0-14.9-5.9-29.1-16.4-39.6l-21-21C357.1 146.9 336 96 336 43l0-19c0-13.3 10.7-24 24-24zM552 288c-13.3 0-24-10.7-24-24l0-19c0-40.3-16-79-44.5-107.5l-21-21C443 97 432 70.6 432 43l0-19c0-13.3 10.7-24 24-24s24 10.7 24 24l0 19c0 14.9 5.9 29.1 16.4 39.6l21 21C554.9 141.1 576 192 576 245l0 19c0 13.3-10.7 24-24 24zM320 448l96 0 0-32-96 0 0 32zM0 416c0-35.3 28.7-64 64-64l384 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32L64 512c-35.3 0-64-28.7-64-64l0-32zm576-40l0 112c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-112c0-13.3 10.7-24 24-24s24 10.7 24 24z\"]\n};\nvar faSquarePollVertical = {\n  prefix: 'fas',\n  iconName: 'square-poll-vertical',\n  icon: [448, 512, [\"poll\"], \"f681\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm56 192c13.3 0 24 10.7 24 24l0 112c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-112c0-13.3 10.7-24 24-24zm184 88c0-13.3 10.7-24 24-24s24 10.7 24 24l0 48c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-48zM224 128c13.3 0 24 10.7 24 24l0 208c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-208c0-13.3 10.7-24 24-24z\"]\n};\nvar faPoll = faSquarePollVertical;\nvar faPersonCircleMinus = {\n  prefix: 'fas',\n  iconName: 'person-circle-minus',\n  icon: [640, 512, [], \"e540\", \"M280 24a56 56 0 1 0 -112 0 56 56 0 1 0 112 0zm24 212.7L341 286.6c12.8-17.5 28.5-32.7 46.3-45l-56.2-75.7C306 132 266.3 112 224 112s-82 20-107.2 53.9l-70.5 95c-10.5 14.2-7.6 34.2 6.6 44.8s34.2 7.6 44.8-6.6L144 236.7 144 512c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-8.8 7.2-16 16-16s16 7.2 16 16l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-275.3zM640 400a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-64 0c0 8.8-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l128 0c8.8 0 16 7.2 16 16z\"]\n};\nvar faBiohazard = {\n  prefix: 'fas',\n  iconName: 'biohazard',\n  icon: [576, 512, [9763], \"f780\", \"M260 12.6c0-8.3-7.6-14.5-15.5-12.1-60.9 18.8-105.1 75.8-105.1 143.1 0 25.1 6.1 48.7 17 69.5-21 1.8-42 8.2-61.5 19.5-57.9 33.6-84.8 100.2-70.9 162.5 1.9 8.4 11.4 12 18.9 7.6 5-2.9 7.6-8.6 7.1-14.4-.3-3.3-.4-6.6-.4-10.1 0-123.5 184.4-123.5 184.4 0 0 88.4-94.5 113.6-148.2 75.4-4.5-3.2-10.5-3.9-15.3-1.1-7 4.1-8.6 13.6-2.7 19.1 46.6 43.8 118 53.9 176.1 20.2 17.9-10.4 32.8-23.9 44.5-39.4 11.7 15.6 26.6 29.1 44.5 39.4 58.1 33.7 129.5 23.6 176.1-20.2 5.9-5.5 4.3-15.1-2.7-19.1-4.8-2.8-10.8-2.1-15.3 1.1-53.7 38.2-148.2 13-148.2-75.4 0-123.5 184.4-123.5 184.4 0 0 3.4-.1 6.8-.4 10.1-.5 5.8 2.1 11.5 7.1 14.4 7.4 4.3 17 .8 18.9-7.6 13.9-62.2-13-128.9-70.9-162.5-19.5-11.3-40.4-17.7-61.5-19.5 10.9-20.8 17-44.4 17-69.5 0-67.3-44.2-124.3-105.1-143.1-7.9-2.4-15.5 3.8-15.5 12.1 0 5.9 4 11 9.5 13.2 83.4 33.6 70.8 178.4-37.8 178.4S167.1 59.4 250.5 25.8c5.5-2.2 9.5-7.3 9.5-13.2zM248.4 288a40 40 0 1 1 80 0 40 40 0 1 1 -80 0zM435 317.7c-16.2 0-31.4 5.5-42.1 15-10.1 9.1-18.1 23.4-18.1 45.6 0 21.1 7.2 35 16.5 44.1 32.2-24.6 55.5-60.5 63.9-101.8-6.3-1.9-13.2-3-20.2-3zM202 378.3c0-22.3-8-36.6-18.1-45.6-10.7-9.6-25.9-15-42.1-15-7 0-13.9 1-20.2 3 8.4 41.3 31.6 77.2 63.9 101.8 9.4-9.1 16.5-23.1 16.5-44.2zm41.2-224.3c9 10.2 23.2 18.2 45.2 18.2s36.2-8 45.2-18.2c6.7-7.6 11.5-17.5 13.6-28.4-18.3-6.8-38.2-10.5-58.8-10.5s-40.5 3.7-58.8 10.5c2.2 10.9 6.9 20.8 13.6 28.5z\"]\n};\nvar faBellConcierge = {\n  prefix: 'fas',\n  iconName: 'bell-concierge',\n  icon: [512, 512, [128718, \"concierge-bell\"], \"f562\", \"M216 64c-13.3 0-24 10.7-24 24s10.7 24 24 24l16 0 0 33.3C124.8 156.7 40.2 243.7 32.6 352l446.9 0C471.8 243.7 387.2 156.7 280 145.3l0-33.3 16 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-80 0zM24 400c-13.3 0-24 10.7-24 24s10.7 24 24 24l464 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L24 400z\"]\n};\nvar faConciergeBell = faBellConcierge;\nvar faRulerHorizontal = {\n  prefix: 'fas',\n  iconName: 'ruler-horizontal',\n  icon: [576, 512, [], \"f547\", \"M48 384c-26.5 0-48-21.5-48-48L0 176c0-26.5 21.5-48 48-48l24 0 0 104c0 13.3 10.7 24 24 24s24-10.7 24-24l0-104 48 0 0 72c0 13.3 10.7 24 24 24s24-10.7 24-24l0-72 48 0 0 104c0 13.3 10.7 24 24 24s24-10.7 24-24l0-104 48 0 0 72c0 13.3 10.7 24 24 24s24-10.7 24-24l0-72 48 0 0 104c0 13.3 10.7 24 24 24s24-10.7 24-24l0-104 24 0c26.5 0 48 21.5 48 48l0 160c0 26.5-21.5 48-48 48L48 384z\"]\n};\nvar faHorse = {\n  prefix: 'fas',\n  iconName: 'horse',\n  icon: [576, 512, [128014], \"f6f0\", \"M448 238.1l0-78.1 16 0 9.8 19.6c12.5 25.1 42.2 36.4 68.3 26 20.5-8.2 33.9-28 33.9-50.1L576 80c0-19.1-8.4-36.3-21.7-48l5.7 0c8.8 0 16-7.2 16-16S568.8 0 560 0L448 0C377.3 0 320 57.3 320 128l-171.2 0C118.1 128 91.2 144.3 76.3 168.8 33.2 174.5 0 211.4 0 256l0 56c0 13.3 10.7 24 24 24s24-10.7 24-24l0-56c0-13.4 6.6-25.2 16.7-32.5 1.6 13 6.3 25.4 13.6 36.4l28.2 42.4c8.3 12.4 6.4 28.7-1.2 41.6-16.5 28-20.6 62.2-10 93.9l17.5 52.4c4.4 13.1 16.6 21.9 30.4 21.9l33.7 0c21.8 0 37.3-21.4 30.4-42.1l-20.8-62.5c-2.1-6.4-.5-13.4 4.3-18.2l12.7-12.7c13.2-13.2 20.6-31.1 20.6-49.7 0-2.3-.1-4.6-.3-6.9l84 24c4.1 1.2 8.2 2.1 12.3 2.8L320 480c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-164.3c19.2-19.2 31.5-45.7 32-75.7l0 0 0-1.9zM496 64a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"]\n};\nvar faCalendar = {\n  prefix: 'fas',\n  iconName: 'calendar',\n  icon: [448, 512, [128197, 128198], \"f133\", \"M128 0C110.3 0 96 14.3 96 32l0 32-32 0C28.7 64 0 92.7 0 128l0 48 448 0 0-48c0-35.3-28.7-64-64-64l-32 0 0-32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 32-128 0 0-32c0-17.7-14.3-32-32-32zM0 224L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-192-448 0z\"]\n};\nvar faHandsHoldingChild = {\n  prefix: 'fas',\n  iconName: 'hands-holding-child',\n  icon: [640, 512, [], \"e4fa\", \"M320-32a40 40 0 1 1 0 80 40 40 0 1 1 0-80zM40 64c22.1 0 40 17.9 40 40l0 160.2c0 17 6.7 33.3 18.7 45.3l51.1 51.1c8.3 8.3 21.3 9.6 31 3.1 12.9-8.6 14.7-26.9 3.7-37.8-7.3-7.3-23.1-23.1-47.2-47.2-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0c24.1 24.1 39.9 39.9 47.2 47.2l0 0 25.3 25.3c21 21 32.8 49.5 32.8 79.2l0 78.9c0 26.5-21.5 48-48 48l-66.7 0c-17 0-33.3-6.7-45.3-18.7L28.1 393.4C10.1 375.4 0 351 0 325.5L0 104C0 81.9 17.9 64 40 64zm560 0c22.1 0 40 17.9 40 40l0 221.5c0 25.5-10.1 49.9-28.1 67.9L512 493.3c-12 12-28.3 18.7-45.3 18.7L400 512c-26.5 0-48-21.5-48-48l0-78.9c0-29.7 11.8-58.2 32.8-79.2l25.3-25.3 0 0c7.3-7.3 23.1-23.1 47.2-47.2 12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3c-24.1 24.1-39.9 39.9-47.2 47.2-11 11-9.2 29.2 3.7 37.8 9.7 6.5 22.7 5.2 31-3.1l51.1-51.1c12-12 18.7-28.3 18.7-45.3L560 104c0-22.1 17.9-40 40-40zM384.5 149l-19.8-16.7 11.1 88.8c1.6 13.2-7.7 25.1-20.8 26.8s-25.1-7.7-26.8-20.8l-4.4-35-7.6 0-4.4 35c-1.6 13.2-13.6 22.5-26.8 20.8s-22.5-13.6-20.8-26.8l11.1-88.8-19.8 16.7c-10.1 8.6-25.3 7.3-33.8-2.8s-7.3-25.3 2.8-33.8l27.9-23.6C271.3 72.8 295.3 64 320 64s48.7 8.8 67.6 24.7l27.9 23.6c10.1 8.6 11.4 23.7 2.8 33.8s-23.7 11.4-33.8 2.8z\"]\n};\nvar faItalic = {\n  prefix: 'fas',\n  iconName: 'italic',\n  icon: [384, 512, [], \"f033\", \"M128 64c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-58.7 0-133.3 320 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l58.7 0 133.3-320-64 0c-17.7 0-32-14.3-32-32z\"]\n};\nvar faKhanda = {\n  prefix: 'fas',\n  iconName: 'khanda',\n  icon: [512, 512, [9772], \"f66d\", \"M240.7 8c8.9-7.4 21.8-7.4 30.7 0l37.8 31.5c8.7 7.3 11.1 19.6 6 29.6-1.2 2.4-2.8 5.5-4.6 9.2 34.2 19.2 57.3 55.8 57.3 97.8s-23.1 78.6-57.3 97.8c1.8 3.7 3.3 6.8 4.6 9.2 5.1 10 2.7 22.3-6 29.6l-37.2 31 0 19.8c22.9-15.7 48.4-33.3 76.7-52.7 42.8-29.4 68.4-78 68.4-130l0-11.1c0-23.9-7.1-47.3-20.4-67.2-5.1-7.7-4.6-17.8 1.7-24.6 6.6-7.1 17.2-8.1 25.2-2.8 27.5 18.1 89.4 67.5 89.4 149.1 0 46.5-20.2 88.6-41.8 120.4-21.6 32-45.6 55-55.3 63.8-7.8 7.1-19 7.9-27.6 3l-70.8-40.3-32.7 22.5 45.5 31.3c1.8-.4 3.7-.7 5.7-.7 13.3 0 24 10.7 24 24s-10.7 24-24 24c-12.2 0-22.3-9.1-23.8-21l-40.2-27.6 0 28.9c9.6 5.5 16 15.9 16 27.7 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-11.8 6.4-22.2 16-27.7l0-28.1-40.3 27.7c-1.8 11.4-11.8 20.1-23.7 20.1-13.3 0-24-10.7-24-24s10.7-24 24-24c2.2 0 4.4 .3 6.5 .9l45.8-31.5-32.7-22.5-70.8 40.3c-8.7 4.9-19.8 4.1-27.6-3-9.7-8.8-33.7-31.9-55.3-63.8-21.5-31.8-41.8-73.9-41.8-120.4 0-81.7 61.9-131.1 89.4-149.1 8.1-5.3 18.6-4.3 25.2 2.8 6.4 6.9 6.8 17 1.7 24.6-13.3 19.9-20.4 43.3-20.4 67.2l0 11.1c0 51.9 25.6 100.6 68.4 130 28.4 19.6 53.7 36.9 75.6 52l0-19.1-37.2-31c-8.7-7.3-11.1-19.6-6-29.6 1.2-2.4 2.8-5.5 4.6-9.2-34.2-19.2-57.3-55.8-57.3-97.8s23.1-78.6 57.3-97.8c-1.8-3.7-3.3-6.8-4.6-9.2-5.1-10-2.7-22.3 6-29.6L240.7 8zM220.3 122.9c-17 11.5-28.2 31-28.2 53.1s11.2 41.6 28.2 53.1c6.8-19.2 11.8-38.4 11.8-53.1s-4.9-33.9-11.8-53.1zm71.5 106.2c17-11.5 28.2-31 28.2-53.1s-11.2-41.6-28.2-53.1c-6.8 19.2-11.8 38.4-11.8 53.1s4.9 33.9 11.8 53.1z\"]\n};\nvar faFaceFrownOpen = {\n  prefix: 'fas',\n  iconName: 'face-frown-open',\n  icon: [512, 512, [128550, \"frown-open\"], \"f57a\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM176 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM182.4 382.5c-12.4 5.2-26.5-4.1-21.1-16.4 16-36.6 52.4-62.1 94.8-62.1s78.8 25.6 94.8 62.1c5.4 12.3-8.7 21.6-21.1 16.4-22.4-9.5-47.4-14.8-73.7-14.8s-51.3 5.3-73.7 14.8z\"]\n};\nvar faFrownOpen = faFaceFrownOpen;\nvar faCheck = {\n  prefix: 'fas',\n  iconName: 'check',\n  icon: [448, 512, [10003, 10004], \"f00c\", \"M434.8 70.1c14.3 10.4 17.5 30.4 7.1 44.7l-256 352c-5.5 7.6-14 12.3-23.4 13.1s-18.5-2.7-25.1-9.3l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l101.5 101.5 234-321.7c10.4-14.3 30.4-17.5 44.7-7.1z\"]\n};\nvar faFingerprint = {\n  prefix: 'fas',\n  iconName: 'fingerprint',\n  icon: [512, 512, [], \"f577\", \"M48 256c0-114.9 93.1-208 208-208 63.1 0 119.6 28.1 157.8 72.5 8.6 10.1 23.8 11.2 33.8 2.6s11.2-23.8 2.6-33.8C403.3 34.6 333.7 0 256 0 114.6 0 0 114.6 0 256l0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40zm458.5-52.9c-2.7-13-15.5-21.3-28.4-18.5s-21.3 15.5-18.5 28.4c2.9 13.9 4.5 28.3 4.5 43.1l0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40c0-18.1-1.9-35.8-5.5-52.9zM256 80c-19 0-37.4 3-54.5 8.6-15.2 5-18.7 23.7-8.3 35.9 7.1 8.3 18.8 10.8 29.4 7.9 10.6-2.9 21.8-4.4 33.4-4.4 70.7 0 128 57.3 128 128l0 24.9c0 25.2-1.5 50.3-4.4 75.3-1.7 14.6 9.4 27.8 24.2 27.8 11.8 0 21.9-8.6 23.3-20.3 3.3-27.4 5-55 5-82.7l0-24.9c0-97.2-78.8-176-176-176zM150.7 148.7c-9.1-10.6-25.3-11.4-33.9-.4-23.1 29.8-36.8 67.1-36.8 107.7l0 24.9c0 24.2-2.6 48.4-7.8 71.9-3.4 15.6 7.9 31.1 23.9 31.1 10.5 0 19.9-7 22.2-17.3 6.4-28.1 9.7-56.8 9.7-85.8l0-24.9c0-27.2 8.5-52.4 22.9-73.1 7.2-10.4 8-24.6-.2-34.2zM256 160c-53 0-96 43-96 96l0 24.9c0 35.9-4.6 71.5-13.8 106.1-3.8 14.3 6.7 29 21.5 29 9.5 0 17.9-6.2 20.4-15.4 10.5-39 15.9-79.2 15.9-119.7l0-24.9c0-28.7 23.3-52 52-52s52 23.3 52 52l0 24.9c0 36.3-3.5 72.4-10.4 107.9-2.7 13.9 7.7 27.2 21.8 27.2 10.2 0 19-7 21-17 7.7-38.8 11.6-78.3 11.6-118.1l0-24.9c0-53-43-96-96-96zm24 96c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 24.9c0 59.9-11 119.3-32.5 175.2l-5.9 15.3c-4.8 12.4 1.4 26.3 13.8 31s26.3-1.4 31-13.8l5.9-15.3C267.9 411.9 280 346.7 280 280.9l0-24.9z\"]\n};\nvar faChargingStation = {\n  prefix: 'fas',\n  iconName: 'charging-station',\n  icon: [576, 512, [], \"f5e7\", \"M64 64C64 28.7 92.7 0 128 0L288 0c35.3 0 64 28.7 64 64l0 224c44.2 0 80 35.8 80 80l0 12c0 11 9 20 20 20s20-9 20-20l0-127.7c-32.5-10.2-56-40.5-56-76.3l0-32c0-8.8 7.2-16 16-16l16 0 0-48c0-8.8 7.2-16 16-16s16 7.2 16 16l0 48 32 0 0-48c0-8.8 7.2-16 16-16s16 7.2 16 16l0 48 16 0c8.8 0 16 7.2 16 16l0 32c0 35.8-23.5 66.1-56 76.3L520 380c0 37.6-30.4 68-68 68s-68-30.4-68-68l0-12c0-17.7-14.3-32-32-32l0 129.4c9.3 3.3 16 12.2 16 22.6 0 13.3-10.7 24-24 24L72 512c-13.3 0-24-10.7-24-24 0-10.5 6.7-19.3 16-22.6L64 64zm82.7 125.7l39 0-20.9 66.9c-2.4 7.6 3.3 15.4 11.3 15.4 2.9 0 5.6-1 7.8-2.9l94.6-82c3.1-2.7 4.9-6.6 4.9-10.7 0-7.8-6.3-14.1-14.1-14.1l-39 0 20.9-66.9c2.4-7.6-3.3-15.4-11.3-15.4-2.9 0-5.6 1-7.8 2.9l-94.6 82c-3.1 2.7-4.9 6.6-4.9 10.7 0 7.8 6.3 14.1 14.1 14.1z\"]\n};\nvar faUserLock = {\n  prefix: 'fas',\n  iconName: 'user-lock',\n  icon: [576, 512, [], \"f502\", \"M224 8a120 120 0 1 1 0 240 120 120 0 1 1 0-240zM194.3 304l59.4 0c29.7 0 57.7 7.3 82.3 20.1l0 4.3c-19.6 17.6-32 43.1-32 71.5l0 96c0 5.5 .5 10.9 1.3 16.1L45.7 512C29.3 512 16 498.7 16 482.3 16 383.8 95.8 304 194.3 304zm301.7 .1c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 47.9 64 0 0-47.9zM352 400c0-20.9 13.4-38.7 32-45.3l0-50.6c0-44.2 35.8-80 80-80s80 35.8 80 80l0 50.6c18.6 6.6 32 24.4 32 45.3l0 96c0 26.5-21.5 48-48 48l-128 0c-26.5 0-48-21.5-48-48l0-96z\"]\n};\nvar faMobileScreenButton = {\n  prefix: 'fas',\n  iconName: 'mobile-screen-button',\n  icon: [384, 512, [\"mobile-alt\"], \"f3cd\", \"M16 64C16 28.7 44.7 0 80 0L304 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L80 512c-35.3 0-64-28.7-64-64L16 64zm64 0l0 304 224 0 0-304-224 0zM192 472c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z\"]\n};\nvar faMobileAlt = faMobileScreenButton;\nvar faAnchorCircleCheck = {\n  prefix: 'fas',\n  iconName: 'anchor-circle-check',\n  icon: [640, 512, [], \"e4aa\", \"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zM288 0c-53 0-96 43-96 96 0 41.8 26.7 77.4 64 90.5l0 257.9c-62.9-14.3-110.2-69.7-111.9-136.5l16.1 14.1c10 8.7 25.1 7.7 33.9-2.3s7.7-25.1-2.3-33.9l-64-56c-9-7.9-22.6-7.9-31.6 0l-64 56c-10 8.7-11 23.9-2.3 33.9s23.9 11 33.9 2.3L80 307.9c2.1 113.1 94.4 204.1 208 204.1 16.6 0 32.7-1.9 48.2-5.6-20.3-30.5-32.2-67-32.2-106.4 0-27.3 5.7-53.3 16-76.9l0-136.6c37.3-13.2 64-48.7 64-90.5 0-53-43-96-96-96zM640 400a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-86.6-60.9c7.1 5.2 8.7 15.2 3.5 22.3l-64 88c-2.8 3.8-7 6.2-11.7 6.5s-9.3-1.3-12.6-4.6l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l26.8 26.8 53-72.9c5.2-7.1 15.2-8.7 22.4-3.5z\"]\n};\nvar faPersonWalkingWithCane = {\n  prefix: 'fas',\n  iconName: 'person-walking-with-cane',\n  icon: [576, 512, [\"blind\"], \"f29d\", \"M224-32a56 56 0 1 1 0 112 56 56 0 1 1 0-112zM160 205.3l-22.6 22.6c-6 6-9.4 14.1-9.4 22.6l0 37.5c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-37.5c0-25.5 10.1-49.9 28.1-67.9l34.4-34.4c23.2-23.2 54.6-36.2 87.3-36.2 36.1 0 70.3 15.8 93.8 43.1l68.6 80c11.5 13.4 9.9 33.6-3.5 45.1s-33.6 9.9-45.1-3.5l-55.7-65 0 118.6 34.5 29.6c17.7 15.2 29.3 36.2 32.6 59.3l12.6 88.1c2.5 17.5-9.7 33.7-27.2 36.2s-33.7-9.7-36.2-27.2l-12.6-88.1c-1.1-7.7-5-14.7-10.9-19.8l-71.4-61.2c-21.3-18.2-33.5-44.9-33.5-72.9l0-69.3zm.1 165.8c2.4 2.3 4.8 4.6 7.4 6.8l46 39.4-2.2 7.6c-4.5 15.7-12.9 30-24.4 41.5l-68.3 68.3c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l68.3-68.3c3.8-3.8 6.6-8.6 8.1-13.8L160.1 371zm233.5-62.2c10.6-8 25.6-5.8 33.6 4.8l144 192c8 10.6 5.8 25.6-4.8 33.6s-25.6 5.8-33.6-4.8l-144-192c-8-10.6-5.8-25.6 4.8-33.6z\"]\n};\nvar faBlind = faPersonWalkingWithCane;\nvar faFileWaveform = {\n  prefix: 'fas',\n  iconName: 'file-waveform',\n  icon: [384, 512, [\"file-medical-alt\"], \"f478\", \"M0 64C0 28.7 28.7 0 64 0L213.5 0c17 0 33.3 6.7 45.3 18.7L365.3 125.3c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64l0-96 60.3 0 48.8 62.7c5.1 6.6 13.3 10 21.6 9.1s15.5-6.1 19.1-13.6l42.9-91.2 9.9 19.8c4.1 8.1 12.4 13.3 21.5 13.3l72 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-57.2 0-25.4-50.7c-4.1-8.2-12.6-13.4-21.8-13.3s-17.5 5.5-21.4 13.8l-47.3 100.6-32-41.1C86.4 307.4 79.4 304 72 304L0 304 0 64zm208-5.5l0 93.5c0 13.3 10.7 24 24 24L325.5 176 208 58.5z\"]\n};\nvar faFileMedicalAlt = faFileWaveform;\nvar faHouseCrack = {\n  prefix: 'fas',\n  iconName: 'house-crack',\n  icon: [512, 512, [], \"e3b1\", \"M277.8 8.6c-12.3-11.4-31.3-11.4-43.5 0l-224 208c-9.6 9-12.8 22.9-8 35.1S18.8 272 32 272l16 0 0 176c0 35.3 28.7 64 64 64l86.4 0-31.3-52.2c-4.1-6.8-2.6-15.5 3.5-20.5L256 368 195.8 285.2c-10.9-15 8.2-33.5 22.8-22l117.9 92.6c8 6.3 8.2 18.4 .4 24.9L256 448 294.4 512 400 512c35.3 0 64-28.7 64-64l0-176 16 0c13.2 0 25-8.1 29.8-20.3s1.6-26.2-8-35.1l-224-208z\"]\n};\nvar faHatWizard = {\n  prefix: 'fas',\n  iconName: 'hat-wizard',\n  icon: [512, 512, [], \"f6e8\", \"M64 400l85.7-208.2c17-41.3 47.8-75.3 87.2-96.3L383.8 17.2c12.3-6.6 26.5 4.7 23 18.2L369.6 177.8c-1.1 4.1-1.6 8.3-1.6 12.6 0 6.3 1.2 12.6 3.6 18.5l76.4 191.1-207.1 0 11.8-35.4 40.4-13.5c6.5-2.2 10.9-8.3 10.9-15.2s-4.4-13-10.9-15.2l-40.4-13.5-13.5-40.4C237 260.4 230.9 256 224 256s-13 4.4-15.2 10.9l-13.5 40.4-40.4 13.5C148.4 323 144 329.1 144 336s4.4 13 10.9 15.2l40.4 13.5 11.8 35.4-143.1 0zM279.6 141.5c-1.1-3.3-4.1-5.5-7.6-5.5s-6.5 2.2-7.6 5.5l-6.7 20.2-20.2 6.7c-3.3 1.1-5.5 4.1-5.5 7.6s2.2 6.5 5.5 7.6l20.2 6.7 6.7 20.2c1.1 3.3 4.1 5.5 7.6 5.5s6.5-2.2 7.6-5.5l6.7-20.2 20.2-6.7c3.3-1.1 5.5-4.1 5.5-7.6s-2.2-6.5-5.5-7.6l-20.2-6.7-6.7-20.2zM32 448l448 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nvar faUserDoctor = {\n  prefix: 'fas',\n  iconName: 'user-doctor',\n  icon: [448, 512, [\"user-md\"], \"f0f0\", \"M224 8a120 120 0 1 0 0 240 120 120 0 1 0 0-240zm60 312.8c-5.4-.5-11-.8-16.6-.8l-86.9 0c-5.6 0-11.1 .3-16.6 .8l0 67.5c16.5 7.6 28 24.3 28 43.6 0 26.5-21.5 48-48 48s-48-21.5-48-48c0-19.4 11.5-36.1 28-43.6l0-58.4C61 353 16 413.6 16 484.6 16 499.7 28.3 512 43.4 512l361.1 0c15.1 0 27.4-12.3 27.4-27.4 0-71-45-131.5-108-154.6l0 37.4c23.3 8.2 40 30.5 40 56.6l0 32c0 11-9 20-20 20s-20-9-20-20l0-32c0-11-9-20-20-20s-20 9-20 20l0 32c0 11-9 20-20 20s-20-9-20-20l0-32c0-26.1 16.7-48.3 40-56.6l0-46.6z\"]\n};\nvar faUserMd = faUserDoctor;\nvar faChartBar = {\n  prefix: 'fas',\n  iconName: 'chart-bar',\n  icon: [512, 512, [\"bar-chart\"], \"f080\", \"M32 32c17.7 0 32 14.3 32 32l0 336c0 8.8 7.2 16 16 16l400 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L80 480c-44.2 0-80-35.8-80-80L0 64C0 46.3 14.3 32 32 32zm96 64c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32zm32 80l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 112l256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nvar faBarChart = faChartBar;\nvar faSprayCanSparkles = {\n  prefix: 'fas',\n  iconName: 'spray-can-sparkles',\n  icon: [576, 512, [\"air-freshener\"], \"f5d0\", \"M160 32l0 80 128 0 0-80c0-17.7-14.3-32-32-32L192 0c-17.7 0-32 14.3-32 32zm0 128c-53 0-96 43-96 96l0 208c0 26.5 21.5 48 48 48l224 0c26.5 0 48-21.5 48-48l0-208c0-53-43-96-96-96l-128 0zm64 96a80 80 0 1 1 0 160 80 80 0 1 1 0-160zM448 48c0-1.4-1-3-2.2-3.6L416 32 403.6 2.2C403 1 401.4 0 400 0s-3 1-3.6 2.2L384 32 354.2 44.4c-1.2 .6-2.2 2.2-2.2 3.6 0 1.4 1 3 2.2 3.6L384 64 396.4 93.8C397 95 398.6 96 400 96s3-1 3.6-2.2L416 64 445.8 51.6C447 51 448 49.4 448 48zm76.4 45.8C525 95 526.6 96 528 96s3-1 3.6-2.2L544 64 573.8 51.6c1.2-.6 2.2-2.2 2.2-3.6 0-1.4-1-3-2.2-3.6L544 32 531.6 2.2C531 1 529.4 0 528 0s-3 1-3.6 2.2L512 32 482.2 44.4c-1.2 .6-2.2 2.2-2.2 3.6 0 1.4 1 3 2.2 3.6L512 64 524.4 93.8zm7.2 100.4c-.6-1.2-2.2-2.2-3.6-2.2s-3 1-3.6 2.2L512 224 482.2 236.4c-1.2 .6-2.2 2.2-2.2 3.6 0 1.4 1 3 2.2 3.6L512 256 524.4 285.8c.6 1.2 2.2 2.2 3.6 2.2s3-1 3.6-2.2L544 256 573.8 243.6c1.2-.6 2.2-2.2 2.2-3.6 0-1.4-1-3-2.2-3.6L544 224 531.6 194.2zM512 144c0-1.4-1-3-2.2-3.6L480 128 467.6 98.2C467 97 465.4 96 464 96s-3 1-3.6 2.2L448 128 418.2 140.4c-1.2 .6-2.2 2.2-2.2 3.6 0 1.4 1 3 2.2 3.6L448 160 460.4 189.8c.6 1.2 2.2 2.2 3.6 2.2s3-1 3.6-2.2L480 160 509.8 147.6c1.2-.6 2.2-2.2 2.2-3.6z\"]\n};\nvar faAirFreshener = faSprayCanSparkles;\nvar faBahtSign = {\n  prefix: 'fas',\n  iconName: 'baht-sign',\n  icon: [320, 512, [], \"e0ac\", \"M136 0c-13.3 0-24 10.7-24 24l0 40-74.4 0C16.8 64 0 80.8 0 101.6L0 406.3c0 23 18.7 41.7 41.7 41.7l70.3 0 0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40 48 0c61.9 0 112-50.1 112-112 0-40.1-21.1-75.3-52.7-95.1 13.1-18.3 20.7-40.7 20.7-64.9 0-61.9-50.1-112-112-112l-16 0 0-40c0-13.3-10.7-24-24-24zM112 128l0 96-48 0 0-96 48 0zm48 96l0-96 16 0c26.5 0 48 21.5 48 48s-21.5 48-48 48l-16 0zm-48 64l0 96-48 0 0-96 48 0zm48 96l0-96 48 0c26.5 0 48 21.5 48 48s-21.5 48-48 48l-48 0z\"]\n};\nvar faTemperatureArrowUp = {\n  prefix: 'fas',\n  iconName: 'temperature-arrow-up',\n  icon: [512, 512, [\"temperature-up\"], \"e040\", \"M64.5 96c0-53 43-96 96-96s96 43 96 96l0 164.7c29.5 26.4 48 64.7 48 107.3 0 79.5-64.5 144-144 144s-144-64.5-144-144c0-42.6 18.5-81 48-107.3L64.5 96zm96 336c35.3 0 64-28.7 64-64 0-26.9-16.5-49.9-40-59.3l0-212.7c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 212.7c-23.5 9.5-40 32.5-40 59.3 0 35.3 28.7 64 64 64zM439.1 9.4l64 64c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-9.4-9.4 0 178.7c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-178.7-9.4 9.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l64-64c6-6 14.1-9.4 22.6-9.4s16.6 3.4 22.6 9.4z\"]\n};\nvar faTemperatureUp = faTemperatureArrowUp;\nvar faWebAwesome = {\n  prefix: 'fas',\n  iconName: 'web-awesome',\n  icon: [640, 512, [], \"e682\", \"M372.2 52c0 20.9-12.4 39-30.2 47.2L448 192 552.4 171.1c-5.3-7.7-8.4-17.1-8.4-27.1 0-26.5 21.5-48 48-48s48 21.5 48 48c0 26-20.6 47.1-46.4 48L481 442.3c-10.3 23-33.2 37.7-58.4 37.7l-205.2 0c-25.2 0-48-14.8-58.4-37.7L46.4 192C20.6 191.1 0 170 0 144 0 117.5 21.5 96 48 96s48 21.5 48 48c0 10.1-3.1 19.4-8.4 27.1L192 192 298.1 99.1c-17.7-8.3-30-26.3-30-47.1 0-28.7 23.3-52 52-52s52 23.3 52 52z\"]\n};\nvar faNonBinary = {\n  prefix: 'fas',\n  iconName: 'non-binary',\n  icon: [384, 512, [], \"e807\", \"M192 544c-97.2 0-176-78.8-176-176 0-86.3 62.1-158 144-173l0-47.2-49.7 24.8-3 1.3c-15.2 5.7-32.5-.8-39.9-15.7-7.4-14.8-2.2-32.6 11.5-41.3l2.8-1.6 38.8-19.4-38.8-19.4c-15.8-7.9-22.2-27.1-14.3-42.9 7.4-14.8 24.8-21.4 40-15.6l3 1.3 49.7 24.8 0-44.2c0-17.7 14.3-32 32-32s32 14.3 32 32l0 44.2 49.7-24.8 3-1.3c15.2-5.8 32.5 .8 39.9 15.6s2.2 32.7-11.5 41.3l-2.8 1.6-38.7 19.4 38.7 19.3c15.8 7.9 22.2 27.1 14.3 42.9-7.4 14.8-24.7 21.4-39.9 15.6l-3-1.3-49.7-24.8 0 47.2c81.9 15.1 144 86.8 144 173 0 97.2-78.8 176-176 176zm0-64a112 112 0 1 0 0-224 112 112 0 1 0 0 224z\"]\n};\nvar faN = {\n  prefix: 'fas',\n  iconName: 'n',\n  icon: [384, 512, [110], \"4e\", \"M21.1 33.9c12.7-4.6 26.9-.7 35.5 9.6L320 359.6 320 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 384c0 13.5-8.4 25.5-21.1 30.1s-26.9 .7-35.5-9.6L64 152.4 64 448c0 17.7-14.3 32-32 32S0 465.7 0 448L0 64C0 50.5 8.4 38.5 21.1 33.9z\"]\n};\nvar faArrowsUpDownLeftRight = {\n  prefix: 'fas',\n  iconName: 'arrows-up-down-left-right',\n  icon: [512, 512, [\"arrows\"], \"f047\", \"M278.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l9.4-9.4 0 114.7-114.7 0 9.4-9.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-64 64c-12.5 12.5-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-9.4-9.4 114.7 0 0 114.7-9.4-9.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-9.4 9.4 0-114.7 114.7 0-9.4 9.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l9.4 9.4-114.7 0 0-114.7 9.4 9.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-64-64z\"]\n};\nvar faArrows = faArrowsUpDownLeftRight;\nvar faHouse = {\n  prefix: 'fas',\n  iconName: 'house',\n  icon: [512, 512, [127968, 63498, 63500, \"home\", \"home-alt\", \"home-lg-alt\"], \"f015\", \"M277.8 8.6c-12.3-11.4-31.3-11.4-43.5 0l-224 208c-9.6 9-12.8 22.9-8 35.1S18.8 272 32 272l16 0 0 176c0 35.3 28.7 64 64 64l288 0c35.3 0 64-28.7 64-64l0-176 16 0c13.2 0 25-8.1 29.8-20.3s1.6-26.2-8-35.1l-224-208zM240 320l32 0c26.5 0 48 21.5 48 48l0 96-128 0 0-96c0-26.5 21.5-48 48-48z\"]\n};\nvar faHome = faHouse;\nvar faHomeAlt = faHouse;\nvar faHomeLgAlt = faHouse;\nvar faSpinner = {\n  prefix: 'fas',\n  iconName: 'spinner',\n  icon: [512, 512, [], \"f110\", \"M208 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm0 416a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM48 208a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm368 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM75 369.1A48 48 0 1 1 142.9 437 48 48 0 1 1 75 369.1zM75 75A48 48 0 1 1 142.9 142.9 48 48 0 1 1 75 75zM437 369.1A48 48 0 1 1 369.1 437 48 48 0 1 1 437 369.1z\"]\n};\nvar faGavel = {\n  prefix: 'fas',\n  iconName: 'gavel',\n  icon: [576, 512, [\"legal\"], \"f0e3\", \"M169.6 153.4l-18.7-18.7c-12.5-12.5-12.5-32.8 0-45.3L265.6-25.4c12.5-12.5 32.8-12.5 45.3 0L329.6-6.6c12.5 12.5 12.5 32.8 0 45.3L214.9 153.4c-12.5 12.5-32.8 12.5-45.3 0zM276 211.7l-31.4-31.4 112-112 119.4 119.4-112 112-31.4-31.4-232 232c-15.6 15.6-40.9 15.6-56.6 0s-15.6-40.9 0-56.6l232-232zM390.9 374.6c-12.5-12.5-12.5-32.8 0-45.3L505.6 214.6c12.5-12.5 32.8-12.5 45.3 0l18.7 18.7c12.5 12.5 12.5 32.8 0 45.3L454.9 393.4c-12.5 12.5-32.8 12.5-45.3 0l-18.7-18.7z\"]\n};\nvar faLegal = faGavel;\nvar faTicketSimple = {\n  prefix: 'fas',\n  iconName: 'ticket-simple',\n  icon: [576, 512, [\"ticket-alt\"], \"f3ff\", \"M0 128C0 92.7 28.7 64 64 64l448 0c35.3 0 64 28.7 64 64l0 64c0 8.8-7.4 15.7-15.7 18.6-18.8 6.5-32.3 24.4-32.3 45.4s13.5 38.9 32.3 45.4c8.3 2.9 15.7 9.8 15.7 18.6l0 64c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64l0-64C0 311.2 7.4 304.3 15.7 301.4 34.5 294.9 48 277 48 256s-13.5-38.9-32.3-45.4C7.4 207.7 0 200.8 0 192l0-64z\"]\n};\nvar faTicketAlt = faTicketSimple;\nvar faDove = {\n  prefix: 'fas',\n  iconName: 'dove',\n  icon: [512, 512, [128330], \"f4ba\", \"M496 64c13.2 0 20.7 15.1 12.8 25.6L480 128 480 304c0 79.5-64.5 144-144 144l-112 0-46.3 46.3c-10.4 10.4-26.5 12.4-39.1 4.8L41.5 440.9c-17-10.2-15-35.5 3.4-42.9L160 352C23.8 311.1 7.5 169.8 22 95.7 25.6 77.9 45.3 71.4 61.3 80.2L320 224 320 144c0-44.2 35.8-80 80-80l96 0zm-96 56a24 24 0 1 0 0 48 24 24 0 1 0 0-48zM182.5-9.6c12.4-13.7 33.3-8.9 42.5 7.1l56.4 98.3c-5.8 14.4-9.2 30.1-9.4 46.5L138.1 68c10.1-31.6 27-58.4 44.4-77.6z\"]\n};\nvar faTarpDroplet = {\n  prefix: 'fas',\n  iconName: 'tarp-droplet',\n  icon: [512, 512, [], \"e57c\", \"M256 160c35.3 0 64-26.9 64-60 0-24-33.7-70.1-52.2-93.5-6.1-7.7-17.5-7.7-23.6 0-18.5 23.4-52.2 69.5-52.2 93.5 0 33.1 28.7 60 64 60zM368 96c0 61.9-50.1 112-112 112S144 157.9 144 96c0-11.1 1.6-21.9 4.6-32L64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l277.5 0c17 0 33.3-6.7 45.3-18.7L493.3 322.7c12-12 18.7-28.3 18.7-45.3L512 128c0-35.3-28.7-64-64-64l-84.6 0c3 10.1 4.6 20.9 4.6 32zm85.5 176L336 389.5 336 296c0-13.3 10.7-24 24-24l93.5 0zM96 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faTreeCity = {\n  prefix: 'fas',\n  iconName: 'tree-city',\n  icon: [640, 512, [], \"e587\", \"M288 48c0-26.5 21.5-48 48-48l96 0c26.5 0 48 21.5 48 48l0 48 48 0 0-72c0-13.3 10.7-24 24-24s24 10.7 24 24l0 72 16 0c26.5 0 48 21.5 48 48l0 320c0 26.5-21.5 48-48 48l-256 0c-26.5 0-48-21.5-48-48l0-416zm64 64l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm16 80c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM352 304l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM528 192c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM512 304l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM96 480l0-160-16 0c-44.2 0-80-35.8-80-80 0-26.7 13.1-50.3 33.2-64.9-.8-4.9-1.2-10-1.2-15.1 0-53 43-96 96-96s96 43 96 96l0 96c0 35.3-28.7 64-64 64l0 160c0 17.7-14.3 32-32 32s-32-14.3-32-32z\"]\n};\nvar faTurnUp = {\n  prefix: 'fas',\n  iconName: 'turn-up',\n  icon: [384, 512, [10548, \"level-up-alt\"], \"f3bf\", \"M169.4 9.4c12.5-12.5 32.8-12.5 45.3 0l128 128c9.2 9.2 11.9 22.9 6.9 34.9S332.9 192 320 192l-64 0 0 160c0 88.4-71.6 160-160 160l-64 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l64 0c17.7 0 32-14.3 32-32l0-160-64 0c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9l128-128z\"]\n};\nvar faLevelUpAlt = faTurnUp;\nvar faTemperatureQuarter = {\n  prefix: 'fas',\n  iconName: 'temperature-quarter',\n  icon: [320, 512, [\"temperature-1\", \"thermometer-1\", \"thermometer-quarter\"], \"f2ca\", \"M160 0C107 0 64 43 64 96l0 164.7C34.5 287 16 325.4 16 368 16 447.5 80.5 512 160 512s144-64.5 144-144c0-42.6-18.5-81-48-107.3L256 96c0-53-43-96-96-96zm64 368c0 35.3-28.7 64-64 64s-64-28.7-64-64c0-26.9 16.5-49.9 40-59.3l0-28.7c0-13.3 10.7-24 24-24s24 10.7 24 24l0 28.7c23.5 9.5 40 32.5 40 59.3z\"]\n};\nvar faTemperature1 = faTemperatureQuarter;\nvar faThermometer1 = faTemperatureQuarter;\nvar faThermometerQuarter = faTemperatureQuarter;\nvar faSliders = {\n  prefix: 'fas',\n  iconName: 'sliders',\n  icon: [512, 512, [\"sliders-h\"], \"f1de\", \"M32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l86.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 128c17.7 0 32-14.3 32-32s-14.3-32-32-32L265.3 64C253 35.7 224.8 16 192 16s-61 19.7-73.3 48L32 64zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l246.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48l54.7 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-54.7 0c-12.3-28.3-40.5-48-73.3-48s-61 19.7-73.3 48L32 224zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l54.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 448c17.7 0 32-14.3 32-32s-14.3-32-32-32l-246.7 0c-12.3-28.3-40.5-48-73.3-48s-61 19.7-73.3 48L32 384z\"]\n};\nvar faSlidersH = faSliders;\nvar faMosque = {\n  prefix: 'fas',\n  iconName: 'mosque',\n  icon: [576, 512, [128332], \"f678\", \"M174.8 224l226.4 0c43.5 0 78.8-35.3 78.8-78.8 0-25.5-12.3-49.4-33.1-64.2L297.3-25.4c-5.6-3.9-13-3.9-18.5 0L129.1 81C108.3 95.8 96 119.7 96 145.2 96 188.7 131.3 224 174.8 224zM512 512c35.3 0 64-28.7 64-64l0-224c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 48-448 0 0-48c0-17.7-14.3-32-32-32S0 206.3 0 224L0 448c0 35.3 28.7 64 64 64l448 0zM240 384c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80-96 0 0-80z\"]\n};\nvar faH = {\n  prefix: 'fas',\n  iconName: 'h',\n  icon: [384, 512, [104], \"48\", \"M320 288l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-384c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 160-256 0 0-160c0-17.7-14.3-32-32-32S0 46.3 0 64L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160 256 0z\"]\n};\nvar faInfo = {\n  prefix: 'fas',\n  iconName: 'info',\n  icon: [192, 512, [], \"f129\", \"M48 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM0 192c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 256 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-224-32 0c-17.7 0-32-14.3-32-32z\"]\n};\nvar faPersonWalking = {\n  prefix: 'fas',\n  iconName: 'person-walking',\n  icon: [384, 512, [128694, \"walking\"], \"f554\", \"M192 80a56 56 0 1 0 0-112 56 56 0 1 0 0 112zM105.4 227.9l22.6-22.6 0 69.3c0 28 12.2 54.7 33.5 72.9l71.4 61.2c5.9 5.1 9.8 12.1 10.9 19.8l12.6 88.1c2.5 17.5 18.7 29.7 36.2 27.2s29.7-18.7 27.2-36.2l-12.6-88.1c-3.3-23.1-14.9-44.1-32.6-59.3l-34.5-29.6 0-115.2 3.8 4.7c18.2 22.8 45.8 36 75 36l33.2 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-33.2 0c-9.7 0-18.9-4.4-25-12l-17.9-22.4c-23-28.8-57.9-45.6-94.8-45.6-32.2 0-63.1 12.8-85.8 35.6L60.1 182.6C42.1 200.6 32 225 32 250.5L32 288c0 17.7 14.3 32 32 32s32-14.3 32-32l0-37.5c0-8.5 3.4-16.6 9.4-22.6zm12.4 179.4c-1.5 5.2-4.3 10-8.1 13.8L41.4 489.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l68.3-68.3c11.5-11.5 19.9-25.8 24.4-41.5l2.2-7.6-46-39.4c-2.5-2.2-5-4.4-7.4-6.8l-10.4 36.2z\"]\n};\nvar faWalking = faPersonWalking;\nvar faArrowTurnDown = {\n  prefix: 'fas',\n  iconName: 'arrow-turn-down',\n  icon: [384, 512, [\"level-down\"], \"f149\", \"M32 64C14.3 64 0 49.7 0 32S14.3 0 32 0l96 0c53 0 96 43 96 96l0 306.7 73.4-73.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-128 128c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 402.7 160 96c0-17.7-14.3-32-32-32L32 64z\"]\n};\nvar faLevelDown = faArrowTurnDown;\nvar faRoad = {\n  prefix: 'fas',\n  iconName: 'road',\n  icon: [512, 512, [128739], \"f018\", \"M223.9 32l-76.2 0c-29.4 0-55.1 20.1-62.1 48.6L1.4 420.5C-6.1 450.7 16.8 480 48 480l175.9 0 0-64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 64 176.1 0c31.2 0 54.1-29.3 46.6-59.5L426.5 80.6C419.4 52.1 393.8 32 364.3 32l-76.4 0 0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zm64 192l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32z\"]\n};\nvar faSpiral = {\n  prefix: 'fas',\n  iconName: 'spiral',\n  icon: [512, 512, [], \"e80a\", \"M115.5 7.4c13.6-11.3 33.8-9.5 45.1 4.1s9.5 33.8-4.1 45.1C100.2 103.5 64 175.2 64 256 64 362 150 448 256 448s192-86 192-192c0-75.1-60.9-136-136-136S176 180.9 176 256c0 44.2 35.8 80 80 80s80-35.8 80-80c0-13.3-10.7-24-24-24s-24 10.7-24 24c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-48.6 39.4-88 88-88s88 39.4 88 88c0 79.5-64.5 144-144 144S112 335.5 112 256c0-110.5 89.5-200 200-200s200 89.5 200 200c0 141.4-114.6 256-256 256S0 397.4 0 256C0 155.8 45 66.1 115.5 7.4z\"]\n};\nvar faFaceFrown = {\n  prefix: 'fas',\n  iconName: 'face-frown',\n  icon: [512, 512, [9785, \"frown\"], \"f119\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zm90.6-113.9c-20.4-28-53.4-46.1-90.6-46.1s-70.2 18.1-90.6 46.1c-7.8 10.7-22.8 13.1-33.5 5.3s-13.1-22.8-5.3-33.5C155.7 330 202.8 304 256 304s100.3 26 129.4 65.9c7.8 10.7 5.4 25.7-5.3 33.5s-25.7 5.4-33.5-5.3zM144 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faFrown = faFaceFrown;\nvar faWineGlassEmpty = {\n  prefix: 'fas',\n  iconName: 'wine-glass-empty',\n  icon: [320, 512, [\"wine-glass-alt\"], \"f5ce\", \"M64 0C48.7 0 35.6 10.8 32.6 25.7L3.2 173C1.1 183.5 0 194.2 0 205l0 3c0 77.4 55 142 128 156.8l0 115.2-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l192 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-115.2C265 350 320 285.4 320 208l0-3c0-10.7-1.1-21.4-3.2-32L287.4 25.7C284.4 10.8 271.3 0 256 0L64 0zm1.9 185.6L90.2 64 229.8 64 254.1 185.6c1.3 6.4 1.9 12.9 1.9 19.4l0 3c0 53-43 96-96 96s-96-43-96-96l0-3c0-6.5 .6-13 1.9-19.4z\"]\n};\nvar faWineGlassAlt = faWineGlassEmpty;\nvar faClapperboard = {\n  prefix: 'fas',\n  iconName: 'clapperboard',\n  icon: [512, 512, [], \"e131\", \"M448 64c2 0 3.9 .1 5.8 .3l-95.7 95.7 67.9 0 72-72c8.8 11 14 24.9 14 40l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128C0 92.7 28.7 64 64 64l70.1 0-96 96 67.9 0 95-95 1-1 92.1 0-96 96 67.9 0 95-95 1-1 86.1 0z\"]\n};\nvar faForwardStep = {\n  prefix: 'fas',\n  iconName: 'forward-step',\n  icon: [384, 512, [\"step-forward\"], \"f051\", \"M21 36.8c12.9-7 28.7-6.3 41 1.8L320 208.1 320 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 384c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-144.1-258 169.6c-12.3 8.1-28 8.8-41 1.8S0 454.7 0 440L0 72C0 57.3 8.1 43.8 21 36.8z\"]\n};\nvar faStepForward = faForwardStep;\nvar faSquareUpRight = {\n  prefix: 'fas',\n  iconName: 'square-up-right',\n  icon: [448, 512, [8599, \"external-link-square-alt\"], \"f360\", \"M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM168 160c-9.7 0-18.5 5.8-22.2 14.8s-1.7 19.3 5.2 26.2l35 35-67 67c-9.4 9.4-9.4 24.6 0 33.9l24 24c9.4 9.4 24.6 9.4 33.9 0l67-67 35 35c6.9 6.9 17.2 8.9 26.2 5.2S320 321.7 320 312l0-128c0-13.3-10.7-24-24-24l-128 0z\"]\n};\nvar faExternalLinkSquareAlt = faSquareUpRight;\nvar faBookJournalWhills = {\n  prefix: 'fas',\n  iconName: 'book-journal-whills',\n  icon: [448, 512, [\"journal-whills\"], \"f66a\", \"M96 512l320 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-66.7c18.6-6.6 32-24.4 32-45.3l0-288c0-26.5-21.5-48-48-48L96 0C43 0 0 43 0 96L0 416c0 53 43 96 96 96zM64 416c0-17.7 14.3-32 32-32l256 0 0 64-256 0c-17.7 0-32-14.3-32-32zM274.1 99.2c2.6-2.6 6.7-3.1 9.9-1.1 32.1 20 53.4 55.6 53.4 96.2 0 62.6-50.7 113.3-113.3 113.3S110.7 256.9 110.7 194.3c0-40.6 21.4-76.2 53.4-96.2 3.1-2 7.2-1.5 9.9 1.1s3.1 6.7 1.2 9.8c-5.2 8.6-8.2 18.7-8.2 29.5 0 15.1 5.9 28.8 15.5 39.1 2.5 2.7 2.9 6.7 .9 9.7-4.7 7.4-7.4 16.1-7.4 25.5 0 21.6 14.3 39.9 34 45.9l1-24.8c-7.1-4.4-11.8-12.2-11.8-21.1 0-9.6 5.5-18 13.5-22.1l3.3-81.8c.2-4.3 3.7-7.7 8-7.7s7.8 3.4 8 7.7l3.3 81.8c8 4.1 13.5 12.4 13.5 22.1 0 8.9-4.7 16.7-11.8 21.1l1 24.8c19.6-6 33.9-24.1 34-45.6l0-.6c-.1-9.3-2.7-17.9-7.4-25.2-1.9-3.1-1.6-7.1 .9-9.7 9.6-10.2 15.5-23.9 15.5-39.1 0-10.8-3-20.9-8.2-29.5-1.9-3.2-1.4-7.2 1.2-9.8z\"]\n};\nvar faJournalWhills = faBookJournalWhills;\nvar faChampagneGlasses = {\n  prefix: 'fas',\n  iconName: 'champagne-glasses',\n  icon: [640, 512, [129346, \"glass-cheers\"], \"f79f\", \"M155.6 17.3C163 3 179.9-3.6 195 1.9l125 45.6 125-45.6c15.1-5.5 32 1.1 39.4 15.4l78.8 152.9c28.8 55.8 10.3 122.3-38.5 156.6l31.3 86.2 41-15c16.6-6 35 2.5 41 19.1s-2.5 35-19.1 41c-47.4 17.3-94.8 34.5-142.2 51.8-16.6 6.1-35-2.5-41-19.1s2.5-35 19.1-41l41-15-31.3-86.2c-59.4 5.2-116.2-33.9-130-95.2l-14.6-64.7-14.6 64.7c-13.8 61.3-70.6 100.4-130 95.2l-31.3 86.2 41 15c16.6 6.1 25.2 24.4 19.1 41s-24.4 25.2-41 19.1c-47.4-17.3-94.8-34.6-142.2-51.8-16.6-6.1-25.2-24.4-19.1-41S26.3 392 42.9 398l41 15 31.3-86.2C66.5 292.5 48.1 226 76.9 170.2L155.6 17.3zm44 54.4l-27.2 52.8 89.2 32.5 13.1-57.9-75.1-27.4zm240.9 0l-75.1 27.4 13.1 57.9 89.2-32.5-27.2-52.8z\"]\n};\nvar faGlassCheers = faChampagneGlasses;\nvar faDumpster = {\n  prefix: 'fas',\n  iconName: 'dumpster',\n  icon: [576, 512, [], \"f793\", \"M132.3 64L106.7 192 24 192c-13.3 0-24-10.7-24-24l0-4.1c0-2.6 .4-5.1 1.2-7.6L26.5 80.4C29.8 70.6 39 64 49.3 64l83 0zm23.4 128l25.6-128 82.7 0 0 128-108.3 0zM312 64l82.7 0 25.6 128-108.3 0 0-128zm131.7 0l83 0c10.3 0 19.5 6.6 22.8 16.4l25.3 75.9c.8 2.4 1.2 5 1.2 7.6l0 4.1c0 13.3-10.7 24-24 24l-82.7 0-25.6-128zM25.7 240l524.7 0c-.4 2.1-13.3 73.4-38.9 213.7-3 16.3-17.9 27.6-34.4 26.1S448 464.6 448 448l0-16-320 0 0 16c0 16.6-12.6 30.4-29.1 31.9S67.5 470 64.5 453.7C39 313.3 26 242.1 25.7 240z\"]\n};\nvar faHeartCircleXmark = {\n  prefix: 'fas',\n  iconName: 'heart-circle-xmark',\n  icon: [576, 512, [], \"e501\", \"M241 87.1l15 20.7 15-20.7C296 52.5 336.2 32 378.9 32 452.4 32 512 91.6 512 165.1l0 2.6c0 17.6-3.4 35.6-9.5 53.7-21.8-8.6-45.6-13.4-70.5-13.4-106 0-192 86-192 192 0 28.5 6.2 55.6 17.4 80-.5 0-.9 0-1.4 0-15.5 0-30.8-4.6-43.1-14.1-73-55.7-212.9-186-212.9-298.2l0-2.6C0 91.6 59.6 32 133.1 32 175.8 32 216 52.5 241 87.1zM432 256a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm59.3 107.3c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0l-36.7 36.7-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l36.7 36.7-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l36.7-36.7 36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-36.7-36.7 36.7-36.7z\"]\n};\nvar faComputer = {\n  prefix: 'fas',\n  iconName: 'computer',\n  icon: [576, 512, [], \"e4e5\", \"M348.8 32C340.7 46.1 336 62.5 336 80l0 16-272 0 0 224 272 0 0 64-272 0c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l284.8 0zM336 432c0 17.5 4.7 33.9 12.8 48L120 480c-13.3 0-24-10.7-24-24s10.7-24 24-24l216 0zM432 32l96 0c26.5 0 48 21.5 48 48l0 352c0 26.5-21.5 48-48 48l-96 0c-26.5 0-48-21.5-48-48l0-352c0-26.5 21.5-48 48-48zm24 64c-13.3 0-24 10.7-24 24s10.7 24 24 24l48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0zm56 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nvar faWandMagic = {\n  prefix: 'fas',\n  iconName: 'wand-magic',\n  icon: [512, 512, [\"magic\"], \"f0d0\", \"M398.5 12.2l-88.2 88.2 101.3 101.3 88.2-88.2C507.6 105.6 512 95 512 84s-4.4-21.6-12.2-29.5L457.5 12.2C449.6 4.4 439 0 428 0s-21.6 4.4-29.5 12.2zM276.4 134.3L12.2 398.5C4.4 406.4 0 417 0 428s4.4 21.6 12.2 29.5l42.3 42.3C62.4 507.6 73 512 84 512s21.6-4.4 29.5-12.2L377.7 235.6 276.4 134.3z\"]\n};\nvar faMagic = faWandMagic;\nvar faBrain = {\n  prefix: 'fas',\n  iconName: 'brain',\n  icon: [512, 512, [129504], \"f5dc\", \"M120 56c0-30.9 25.1-56 56-56l24 0c17.7 0 32 14.3 32 32l0 448c0 17.7-14.3 32-32 32l-32 0c-29.8 0-54.9-20.4-62-48-.7 0-1.3 0-2 0-44.2 0-80-35.8-80-80 0-18 6-34.6 16-48-19.4-14.6-32-37.8-32-64 0-30.9 17.6-57.8 43.2-71.1-7.1-12-11.2-26-11.2-40.9 0-44.2 35.8-80 80-80l0-24zm272 0l0 24c44.2 0 80 35.8 80 80 0 15-4.1 29-11.2 40.9 25.7 13.3 43.2 40.1 43.2 71.1 0 26.2-12.6 49.4-32 64 10 13.4 16 30 16 48 0 44.2-35.8 80-80 80-.7 0-1.3 0-2 0-7.1 27.6-32.2 48-62 48l-32 0c-17.7 0-32-14.3-32-32l0-448c0-17.7 14.3-32 32-32l24 0c30.9 0 56 25.1 56 56z\"]\n};\nvar faBriefcaseMedical = {\n  prefix: 'fas',\n  iconName: 'briefcase-medical',\n  icon: [512, 512, [], \"f469\", \"M200 48l112 0c4.4 0 8 3.6 8 8l0 40-128 0 0-40c0-4.4 3.6-8 8-8zm-56 8l0 40-80 0C28.7 96 0 124.7 0 160L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64l-80 0 0-40c0-30.9-25.1-56-56-56L200 0c-30.9 0-56 25.1-56 56zm80 160c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 40 40 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-40 0 0 40c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-40-40 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l40 0 0-40z\"]\n};\nvar faHouseMedicalCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'house-medical-circle-exclamation',\n  icon: [640, 512, [], \"e512\", \"M309.8 8.6c-12.3-11.4-31.3-11.4-43.5 0l-224 208c-9.6 9-12.8 22.9-8 35.1S50.8 272 64 272l16 0 0 176c0 35.3 28.7 64 64 64l196 0c-21.2-29.5-34.3-65.3-35.9-104L272 408c-8.8 0-16-7.2-16-16l0-40-40 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l40 0 0-40c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 40 20 0c34.9-48.5 91.7-80 156-80 10.7 0 21.1 .9 31.3 2.5L309.8 8.6zM496 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-100a20 20 0 1 1 0 40 20 20 0 1 1 0-40zm0-140c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nvar faCodeCommit = {\n  prefix: 'fas',\n  iconName: 'code-commit',\n  icon: [576, 512, [], \"f386\", \"M288 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C430 361 365.4 416 288 416S146 361 131.2 288L32 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l99.2 0C146 151 210.6 96 288 96s142 55 156.8 128l99.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-99.2 0z\"]\n};\nvar faPersonBreastfeeding = {\n  prefix: 'fas',\n  iconName: 'person-breastfeeding',\n  icon: [448, 512, [], \"e53a\", \"M224 0a80 80 0 1 1 0 160 80 80 0 1 1 0-160zM436.8 382.8L373.5 462c-16.6 20.7-46.8 24.1-67.5 7.5-17.6-14.1-22.7-38.1-13.5-57.7l-.7-.1c-38.9-5.6-74.3-25.1-99.7-54.8l0-36.8c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 48c0 .8 0 1.6 .1 2.4l101.4 50.7c23.7 11.9 33.3 40.7 21.5 64.4s-40.7 33.3-64.4 21.5L27.2 427.3c-1.1-.5-2.2-1.1-3.3-1.7-4.9-2.8-9.2-6.4-12.6-10.6-4.6-5.4-7.8-11.7-9.6-18.4-3.3-12-1.9-25.2 4.8-36.6 .6-1.1 1.3-2.2 2-3.2L75.6 256.1c26.7-40.1 71.7-64.1 119.8-64.1l75.2 0c46.5 0 90.1 22.5 117.2 60.3l50.7 70.9c2.2 3 4 6.1 5.5 9.4 2.9 6.7 4.3 13.8 4 20.8-.3 10.6-4.2 21-11.2 29.4zM320 332a44 44 0 1 0 -88 0 44 44 0 1 0 88 0z\"]\n};\nvar faPersonRays = {\n  prefix: 'fas',\n  iconName: 'person-rays',\n  icon: [512, 512, [], \"e54d\", \"M312.5 24a56 56 0 1 0 -112 0 56 56 0 1 0 112 0zm24 212.7l46.3 62.4c10.5 14.2 30.6 17.2 44.8 6.6s17.2-30.6 6.6-44.8l-70.5-95C338.5 132 298.8 112 256.5 112s-82 20-107.2 53.9l-70.5 95c-10.5 14.2-7.6 34.2 6.6 44.8s34.2 7.6 44.8-6.6l46.3-62.4 0 275.3c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-8.8 7.2-16 16-16s16 7.2 16 16l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-275.3zM7.5 7c-9.4 9.4-9.4 24.6 0 33.9l80 80c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L41.5 7C32.1-2.3 16.9-2.3 7.5 7zm464 0l-80 80c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l80-80c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0zM7.5 505c9.4 9.4 24.6 9.4 33.9 0l80-80c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-80 80c-9.4 9.4-9.4 24.6 0 33.9zm464 0c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-80-80c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l80 80z\"]\n};\nvar faManatSign = {\n  prefix: 'fas',\n  iconName: 'manat-sign',\n  icon: [384, 512, [], \"e1d5\", \"M192 32c-13.3 0-24 10.7-24 24l0 41.5C73.3 109.3 0 190.1 0 288L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-62.5 44.8-114.5 104-125.8L168 456c0 13.3 10.7 24 24 24s24-10.7 24-24l0-293.8c59.2 11.2 104 63.3 104 125.8l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-97.9-73.3-178.7-168-190.5L216 56c0-13.3-10.7-24-24-24z\"]\n};\nvar faSort = {\n  prefix: 'fas',\n  iconName: 'sort',\n  icon: [384, 512, [\"unsorted\"], \"f0dc\", \"M2.4 204.2c5 12 16.6 19.8 29.6 19.8l320 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-160-160c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-9.2 9.2-11.9 22.9-6.9 34.9zm0 103.5c-5 12-2.2 25.7 6.9 34.9l160 160c12.5 12.5 32.8 12.5 45.3 0l160-160c9.2-9.2 11.9-22.9 6.9-34.9S364.9 288 352 288L32 288c-12.9 0-24.6 7.8-29.6 19.8z\"]\n};\nvar faUnsorted = faSort;\nvar faCircleRadiation = {\n  prefix: 'fas',\n  iconName: 'circle-radiation',\n  icon: [512, 512, [9762, \"radiation-alt\"], \"f7ba\", \"M0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zm80 0l64.3 0c8.7 0 15.7-7.1 17.3-15.6 4.4-24.4 18.1-45.5 37.2-59.7 7.4-5.5 10.6-15.6 6-23.6l-32.5-56.3c-4.3-7.5-13.9-10.3-21.2-5.5-48.2 31.5-81.3 84.2-86.3 144.8-.7 8.8 6.5 16 15.3 16zm137.9 89.8c-8.5-3.7-18.8-1.4-23.5 6.6l-31 53.8c-4.3 7.5-1.9 17.2 5.8 21.1 26.1 13.2 55.5 20.7 86.8 20.7s60.7-7.5 86.8-20.7c7.7-3.9 10.1-13.6 5.8-21.1l-31-53.8c-4.6-8-15-10.3-23.5-6.6-11.7 5-24.5 7.8-38.1 7.8s-26.4-2.8-38.1-7.8zM350.4 240.4c1.6 8.6 8.5 15.6 17.3 15.6l64.3 0c8.8 0 16.1-7.2 15.3-16-5-60.6-38.1-113.2-86.3-144.8-7.3-4.8-16.8-2-21.2 5.5L307.3 157c-4.6 8-1.4 18.1 6 23.6 19.1 14.2 32.7 35.4 37.2 59.7zM256 305.7a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"]\n};\nvar faRadiationAlt = faCircleRadiation;\nvar faLaptopCode = {\n  prefix: 'fas',\n  iconName: 'laptop-code',\n  icon: [640, 512, [], \"f5fc\", \"M64 96c0-35.3 28.7-64 64-64l384 0c35.3 0 64 28.7 64 64l0 240-64 0 0-240-384 0 0 240-64 0 0-240zM0 403.2C0 392.6 8.6 384 19.2 384l601.6 0c10.6 0 19.2 8.6 19.2 19.2 0 42.4-34.4 76.8-76.8 76.8L76.8 480C34.4 480 0 445.6 0 403.2zM281 209l-31 31 31 31c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-48-48c-9.4-9.4-9.4-24.6 0-33.9l48-48c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9zM393 175l48 48c9.4 9.4 9.4 24.6 0 33.9l-48 48c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l31-31-31-31c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0z\"]\n};\nvar faSink = {\n  prefix: 'fas',\n  iconName: 'sink',\n  icon: [512, 512, [], \"e06d\", \"M288 96c0-17.7 14.3-32 32-32s32 14.3 32 32 14.3 32 32 32 32-14.3 32-32c0-53-43-96-96-96s-96 43-96 96l0 192-64 0 0-40c0-30.9-25.1-56-56-56l-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l48 0c4.4 0 8 3.6 8 8l0 40-80 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 64c0 53 43 96 96 96l256 0c53 0 96-43 96-96l0-64c17.7 0 32-14.3 32-32s-14.3-32-32-32l-80 0 0-40c0-4.4 3.6-8 8-8l56 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-56 0c-30.9 0-56 25.1-56 56l0 40-64 0 0-192z\"]\n};\nvar faArrowUpFromWaterPump = {\n  prefix: 'fas',\n  iconName: 'arrow-up-from-water-pump',\n  icon: [640, 512, [], \"e4b6\", \"M144 32c-26.5 0-48 21.5-48 48l0 176-16 0c-26.5 0-48 21.5-48 48l0 79.6c17.6-2 36 2.5 51.3 14 3.4 2.6 6.1 1.4 9.8-.3l.8-.4c5.7-2.6 12.9-6.9 21.7-13.5 27.5-20.7 59.9-31.2 92.3-31.4 33.1-.2 66.3 10.2 94.4 31.4 22.1 16.6 29.1 16.6 51.2 0 27.5-20.7 59.9-31.2 92.4-31.4 33.1-.2 66.3 10.2 94.4 31.4 6.9 5.2 12.8 9 18 11.7 .6 .3 1.2 .6 1.8 1 4.2 2.3 8.5 4.6 12.6 1.5 10.7-8.1 22.9-12.7 35.3-14.1l0-79.5c0-26.5-21.5-48-48-48l-56 0 0-142.1 47 47c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L497 39c-9.4-9.4-24.6-9.4-33.9 0l-88 88c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l47-47 0 142.1-136 0 0-176c0-26.5-21.5-48-48-48L144 32zM474.6 476.1c19 14.4 41.9 28.2 67.2 33.3 26.5 5.4 54.3 .8 80.7-19.1 10.6-8 12.7-23 4.7-33.6s-23-12.7-33.6-4.7c-14.9 11.2-28.6 13.1-42.3 10.3-14.9-3-30.9-11.9-47.8-24.6-38.4-29-90.5-29-129 0-24 18.1-40.7 26.3-54.5 26.3s-30.5-8.2-54.5-26.3c-38.4-29-90.5-29-129 0-21.6 16.3-41.3 25.8-58.9 25.7-9.6-.1-19.9-3-31.2-11.5-10.6-8-25.6-5.9-33.6 4.7S7 482.3 17.6 490.3c19.1 14.4 39.4 21 59.8 21.1 33.9 .2 64.3-17.4 88.1-35.3 21.3-16.1 49.9-16.1 71.2 0 24.2 18.3 52.3 35.9 83.4 35.9s59.1-17.7 83.4-35.9c21.3-16.1 49.9-16.1 71.2 0z\"]\n};\nvar faMicrophoneLinesSlash = {\n  prefix: 'fas',\n  iconName: 'microphone-lines-slash',\n  icon: [576, 512, [\"microphone-alt-slash\"], \"f539\", \"M7-24.9c9.4-9.4 24.6-9.4 33.9 0l151 151 0-30.2c0-53 43-96 96-96 50.3 0 91.6 38.7 95.7 88L328 88c-13.3 0-24 10.7-24 24s10.7 24 24 24l56 0 0 48-56 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l55.7 0c-1.9 22.9-11.8 43.4-26.9 59l33.9 33.9c25.5-26 41.3-61.6 41.3-100.9l0-40c0-13.3 10.7-24 24-24s24 10.7 24 24l0 40c0 52.6-21.1 100.2-55.3 134.8L569 503.1c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L7 9.1C-2.3-.3-2.3-15.5 7-24.9zM297.8 367.7l41.4 41.4c-8.8 2.4-17.9 4.3-27.3 5.4l0 49.5 48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l48 0 0-49.5C169.3 402.7 96 321.9 96 224l0-40c0-5.1 1.6-9.9 4.4-13.8l43.6 43.6 0 10.2c0 79.5 64.5 144 144 144 3.3 0 6.6-.1 9.8-.3z\"]\n};\nvar faMicrophoneAltSlash = faMicrophoneLinesSlash;\nvar faServer = {\n  prefix: 'fas',\n  iconName: 'server',\n  icon: [448, 512, [], \"f233\", \"M64 32C28.7 32 0 60.7 0 96l0 64c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-64c0-35.3-28.7-64-64-64L64 32zm216 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm56 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM64 288c-35.3 0-64 28.7-64 64l0 64c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-64c0-35.3-28.7-64-64-64L64 288zm216 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm56 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nvar faUser = {\n  prefix: 'fas',\n  iconName: 'user',\n  icon: [448, 512, [128100, 62144, 62470, \"user-alt\", \"user-large\"], \"f007\", \"M224 248a120 120 0 1 0 0-240 120 120 0 1 0 0 240zm-29.7 56C95.8 304 16 383.8 16 482.3 16 498.7 29.3 512 45.7 512l356.6 0c16.4 0 29.7-13.3 29.7-29.7 0-98.5-79.8-178.3-178.3-178.3l-59.4 0z\"]\n};\nvar faUserAlt = faUser;\nvar faUserLarge = faUser;\nvar faSnowflake = {\n  prefix: 'fas',\n  iconName: 'snowflake',\n  icon: [512, 512, [10052, 10054], \"f2dc\", \"M288.2 0c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 62.1-15-15c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l49 49 0 70.6-61.2-35.3-17.9-66.9c-3.4-12.8-16.6-20.4-29.4-17S95.3 98 98.7 110.8l5.5 20.5-53.7-31C35.2 91.5 15.6 96.7 6.8 112s-3.6 34.9 11.7 43.7l53.7 31-20.5 5.5c-12.8 3.4-20.4 16.6-17 29.4s16.6 20.4 29.4 17l66.9-17.9 61.2 35.3-61.2 35.3-66.9-17.9c-12.8-3.4-26 4.2-29.4 17s4.2 26 17 29.4l20.5 5.5-53.7 31C3.2 365.1-2 384.7 6.8 400s28.4 20.6 43.7 11.7l53.7-31-5.5 20.5c-3.4 12.8 4.2 26 17 29.4s26-4.2 29.4-17l17.9-66.9 61.2-35.3 0 70.6-49 49c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l15-15 0 62.1c0 17.7 14.3 32 32 32s32-14.3 32-32l0-62.1 15 15c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-49-49 0-70.6 61.2 35.3 17.9 66.9c3.4 12.8 16.6 20.4 29.4 17s20.4-16.6 17-29.4l-5.5-20.5 53.7 31c15.3 8.8 34.9 3.6 43.7-11.7s3.6-34.9-11.7-43.7l-53.7-31 20.5-5.5c12.8-3.4 20.4-16.6 17-29.4s-16.6-20.4-29.4-17l-66.9 17.9-61.2-35.3 61.2-35.3 66.9 17.9c12.8 3.4 26-4.2 29.4-17s-4.2-26-17-29.4l-20.5-5.5 53.7-31c15.3-8.8 20.6-28.4 11.7-43.7s-28.4-20.5-43.7-11.7l-53.7 31 5.5-20.5c3.4-12.8-4.2-26-17-29.4s-26 4.2-29.4 17l-17.9 66.9-61.2 35.3 0-70.6 49-49c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-15 15 0-62.1z\"]\n};\nvar faTaurus = {\n  prefix: 'fas',\n  iconName: 'taurus',\n  icon: [384, 512, [], \"e84f\", \"M336-16c17.7 0 32 14.3 32 32 0 58.5-28.6 110.3-72.5 142.3 53.2 34.1 88.5 93.8 88.5 161.7 0 106-86 192-192 192S0 426 0 320C0 252.1 35.3 192.4 88.5 158.3 44.6 126.3 16 74.5 16 16 16-1.7 30.3-16 48-16S80-1.7 80 16c0 61.9 50.1 112 112 112S304 77.9 304 16c0-17.7 14.3-32 32-32zM192 192a128 128 0 1 0 0 256 128 128 0 1 0 0-256z\"]\n};\nvar faSkullCrossbones = {\n  prefix: 'fas',\n  iconName: 'skull-crossbones',\n  icon: [448, 512, [128369, 9760], \"f714\", \"M384 144C384 64.5 312.4 0 224 0S64 64.5 64 144c0 47.1 25.1 88.9 64 115.2l0 28.8c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-28.8c38.9-26.3 64-68.1 64-115.2zM160 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm96 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM445.5 339.7c-6.8-16.3-25.5-24-41.8-17.2L224 397.3 44.3 322.5c-16.3-6.8-35 .9-41.8 17.2s.9 35 17.2 41.8L140.8 432 19.7 482.5C3.4 489.3-4.3 508 2.5 524.3s25.5 24 41.8 17.2L224 466.7 403.7 541.5c16.3 6.8 35-.9 41.8-17.2s-.9-35-17.2-41.8L307.2 432 428.3 381.5c16.3-6.8 24-25.5 17.2-41.8z\"]\n};\nvar faPesoSign = {\n  prefix: 'fas',\n  iconName: 'peso-sign',\n  icon: [448, 512, [], \"e222\", \"M112 32C94.3 32 80 46.3 80 64l0 64-24 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l24 0 0 32-24 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l24 0 0 192c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 96 0c65.6 0 122-39.5 146.7-96l37.3 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-24.8 0c.5-5.3 .8-10.6 .8-16s-.3-10.7-.8-16l24.8 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-37.3 0C362 71.5 305.6 32 240 32L112 32zm199.6 96l-167.6 0 0-32 96 0c28.4 0 54 12.4 71.6 32zM144 176l190.7 0c.9 5.2 1.3 10.5 1.3 16s-.5 10.8-1.3 16l-190.7 0 0-32zm167.6 80c-17.6 19.6-43.1 32-71.6 32l-96 0 0-32 167.6 0z\"]\n};\nvar faWineGlass = {\n  prefix: 'fas',\n  iconName: 'wine-glass',\n  icon: [320, 512, [127863], \"f4e3\", \"M32.6 25.7C35.6 10.8 48.7 0 64 0L256 0c15.3 0 28.4 10.8 31.4 25.7L316.8 173c2.1 10.5 3.2 21.2 3.2 32l0 3c0 77.4-55 142-128 156.8l0 115.2 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L64 544c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0 0-115.2C55 350 0 285.4 0 208l0-3c0-10.7 1.1-21.4 3.2-32L32.6 25.7zM77.4 128l165.1 0-12.8-64-139.5 0-12.8 64z\"]\n};\nvar faTemperatureHalf = {\n  prefix: 'fas',\n  iconName: 'temperature-half',\n  icon: [320, 512, [127777, \"temperature-2\", \"thermometer-2\", \"thermometer-half\"], \"f2c9\", \"M160 0C107 0 64 43 64 96l0 164.7C34.5 287 16 325.4 16 368 16 447.5 80.5 512 160 512s144-64.5 144-144c0-42.6-18.5-81-48-107.3L256 96c0-53-43-96-96-96zm64 368c0 35.3-28.7 64-64 64s-64-28.7-64-64c0-26.9 16.5-49.9 40-59.3l0-92.7c0-13.3 10.7-24 24-24s24 10.7 24 24l0 92.7c23.5 9.5 40 32.5 40 59.3z\"]\n};\nvar faTemperature2 = faTemperatureHalf;\nvar faThermometer2 = faTemperatureHalf;\nvar faThermometerHalf = faTemperatureHalf;\nvar faTicket = {\n  prefix: 'fas',\n  iconName: 'ticket',\n  icon: [576, 512, [127903], \"f145\", \"M64 64C28.7 64 0 92.7 0 128l0 64C0 200.8 7.4 207.7 15.7 210.6 34.5 217.1 48 235 48 256s-13.5 38.9-32.3 45.4C7.4 304.3 0 311.2 0 320l0 64c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-64c0-8.8-7.4-15.7-15.7-18.6-18.8-6.5-32.3-24.4-32.3-45.4s13.5-38.9 32.3-45.4c8.3-2.9 15.7-9.8 15.7-18.6l0-64c0-35.3-28.7-64-64-64L64 64zM416 336l0-160-256 0 0 160 256 0zM112 160c0-17.7 14.3-32 32-32l288 0c17.7 0 32 14.3 32 32l0 192c0 17.7-14.3 32-32 32l-288 0c-17.7 0-32-14.3-32-32l0-192z\"]\n};\nvar faWheatAwnCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'wheat-awn-circle-exclamation',\n  icon: [640, 512, [], \"e598\", \"M496 576a144 144 0 1 1 0-288 144 144 0 1 1 0 288zM81 529c-9.4 9.3-24.5 9.3-33.9 0-9.4-9.4-9.4-24.6 0-33.9L81 529zm30.2-294.4c6.2-4.1 14.7-3.4 20.1 2.1l46.1 46.1 6.1 6.7c19.7 23.8 26.3 55 19.3 83.9 31.7-7.7 66.2 1 90.6 25.3l12 12c-.8 7-1.2 14.2-1.2 21.4 0 20 3 39.3 8.7 57.4-36.8 21.8-85 17-116.6-14.7L165.6 444.3 81 529C69.7 517.7 58.4 506.3 47 495l84.7-84.7-30.5-30.5c-37.5-37.5-37.5-98.3 0-135.7l7.4-7.4 2.5-2.1zM496 476a20 20 0 1 0 0 40 20 20 0 1 0 0-40zm0-140c-8.8 0-16 7.2-16 16l0 80c0 8.8 7.2 16 16 16 8.8 0 16-7.2 16-16l0-80c0-8.8-7.2-16-16-16zM215.2 130.6c6.2-4.1 14.7-3.4 20.1 2.1l46.1 46.1 6.1 6.7c19.7 23.8 26.3 55 19.3 83.9 24.2-5.9 50.1-2.1 71.9 10.8-32.2 24.9-56.2 59.8-67.4 100.1-3.8-2.8-7.5-6-11-9.5l-94.9-94.9c-37.5-37.5-37.5-98.3 0-135.7l7.4-7.4 2.5-2.1zM526.7 15c9.4-9.4 24.6-9.4 33.9 0 8.8 8.8 9.3 22.7 1.7 32.1L560.6 49 446.2 163.4c7.7 1 15.3 3 22.5 5.9L527 111c9.4-9.4 24.6-9.4 34 0 8.8 8.8 9.3 22.7 1.6 32.1l-1.7 1.8-52.7 52.7 39 39c3.2 3.2 4.7 7.4 4.7 11.6-17.7-5.4-36.5-8.3-55.9-8.3-34.2 0-66.3 8.9-94.1 24.6l-92.7-92.7c-37.5-37.5-37.5-98.3 0-135.8l7.4-7.4 2.5-2.1c6.2-4.1 14.7-3.4 20.1 2.1l39 39 52.7-52.7c9.4-9.4 24.6-9.4 34 0 8.8 8.8 9.3 22.7 1.6 32.1L465 49 406.7 107.3c2.8 7.1 4.7 14.5 5.8 22.1L526.7 15z\"]\n};\nvar faArrowsTurnRight = {\n  prefix: 'fas',\n  iconName: 'arrows-turn-right',\n  icon: [448, 512, [], \"e4c0\", \"M313.4-6.6c12.5-12.5 32.8-12.5 45.3 0l80 80c12.5 12.5 12.5 32.8 0 45.3l-80 80c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L338.7 128 128 128c-35.3 0-64 28.7-64 64l0 32c0 17.7-14.3 32-32 32S0 241.7 0 224l0-32C0 121.3 57.3 64 128 64l210.7 0-25.4-25.4c-12.5-12.5-12.5-32.8 0-45.3zm-96 256c12.5-12.5 32.8-12.5 45.3 0l80 80c12.5 12.5 12.5 32.8 0 45.3l-80 80c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 384 96 384c-17.7 0-32 14.3-32 32l0 32c0 17.7-14.3 32-32 32S0 465.7 0 448l0-32c0-53 43-96 96-96l146.7 0-25.4-25.4c-12.5-12.5-12.5-32.8 0-45.3z\"]\n};\nvar faCandyCane = {\n  prefix: 'fas',\n  iconName: 'candy-cane',\n  icon: [448, 512, [], \"f786\", \"M421.8 39.6C452 85.2 456.5 142.9 435.1 192l-165.4 0 41.4-41.4c.8-.8 1.5-1.6 2.2-2.4L421.8 39.6zM268 102.9c-.8 .7-1.6 1.4-2.4 2.2l-28.1 28.1c-25 25-65.5 25-90.5 0s-25-65.5 0-90.5L175 14.6C229.9-40.2 314.5-46.7 376.5-5.6L268 102.9zM125.7 336l80-80 181 0-82.5 82.5 0-2.5-178.5 0zm117 64L141.4 501.3c-25 25-65.5 25-90.5 0s-25-65.5 0-90.5l10.7-10.7 181 0z\"]\n};\nvar faWheelchair = {\n  prefix: 'fas',\n  iconName: 'wheelchair',\n  icon: [512, 512, [], \"f193\", \"M136 40a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zM117.9 197.6l12.6 63c-38.6 12.4-66.5 48.7-66.5 91.4 0 53 43 96 96 96 35.6 0 66.7-19.4 83.3-48.2 2.3 .1 4.6 .2 7 .2l4.1 0c1 0 2.1 0 3.1 0l55.2 0c-20.4 64.9-81 112-152.7 112-88.4 0-160-71.6-160-160 0-73.8 50-135.9 117.9-154.4zm148.6-28.1l23.7 118.5 60.5 0c33.3 0 63.2 20.7 74.9 51.9l25.5 68 18.7-6.2c16.8-5.6 34.9 3.5 40.5 20.2s-3.5 34.9-20.2 40.5l-48 16c-16.3 5.4-34-3-40.1-19.1l-36.3-96.9c-2.3-6.2-8.3-10.4-15-10.4l-86.1 0c-.4 0-.8 0-1.3 0l-13.1 0c-30.5 0-56.8-21.5-62.8-51.4L165.3 189.7c-6.4-31.9 18-61.7 50.6-61.7 24.6 0 45.8 17.4 50.6 41.5z\"]\n};\nvar faSpellCheck = {\n  prefix: 'fas',\n  iconName: 'spell-check',\n  icon: [576, 512, [], \"f891\", \"M120 32c-48.6 0-88 39.4-88 88l0 168c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 64 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-168c0-48.6-39.4-88-88-88l-16 0zm40 128l-64 0 0-40c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24l0 40zM304 32c-17.7 0-32 14.3-32 32l0 224c0 17.7 14.3 32 32 32l72 0c48.6 0 88-39.4 88-88 0-23.6-9.3-45-24.4-60.8 10.3-14.4 16.4-32.1 16.4-51.2 0-48.6-39.4-88-88-88l-64 0zm64 112l-32 0 0-48 32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24zM336 256l0-48 40 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-40 0zm233 84c11-13.8 8.8-33.9-5-45s-33.9-8.8-45 5l-105.7 132.1-38.7-38.7c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l64 64c6.4 6.4 15.3 9.8 24.4 9.3s17.5-4.9 23.2-12L569 340z\"]\n};\nvar faVolumeOff = {\n  prefix: 'fas',\n  iconName: 'volume-off',\n  icon: [320, 512, [], \"f026\", \"M96 352l-48 0c-26.5 0-48-21.5-48-48l0-96c0-26.5 21.5-48 48-48l48 0 134.1-119.2c6.4-5.7 14.6-8.8 23.1-8.8 19.2 0 34.8 15.6 34.8 34.8l0 378.4c0 19.2-15.6 34.8-34.8 34.8-8.5 0-16.7-3.1-23.1-8.8L96 352z\"]\n};\nvar faLungs = {\n  prefix: 'fas',\n  iconName: 'lungs',\n  icon: [576, 512, [129729], \"f604\", \"M320 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 141.9-32 19.2 0-116.7c0-24.5-19.9-44.4-44.4-44.4-12.5 0-24.4 5.3-32.8 14.5l-26.4 29C42.9 160.8 0 271.8 0 387l0 30.5c0 52.2 42.3 94.5 94.5 94.5 22 0 43.7-5.1 63.4-15l5-2.5c37.4-18.7 61-56.9 61-98.8l0-128 64-38.4 64 38.4 0 128c0 41.8 23.6 80.1 61 98.8l5 2.5c19.7 9.8 41.4 15 63.4 15 52.2 0 94.5-42.3 94.5-94.5l0-6.2c0-111.1-36.7-219-104.4-307L428.9 48.7c-8.1-10.6-20.7-16.7-34-16.7-23.7 0-42.9 19.2-42.9 42.9l0 118.2-32-19.2 0-141.9z\"]\n};\nvar faBookmark = {\n  prefix: 'fas',\n  iconName: 'bookmark',\n  icon: [384, 512, [128278, 61591], \"f02e\", \"M64 0C28.7 0 0 28.7 0 64L0 480c0 11.5 6.2 22.2 16.2 27.8s22.3 5.5 32.2-.4L192 421.3 335.5 507.4c9.9 5.9 22.2 6.1 32.2 .4S384 491.5 384 480l0-416c0-35.3-28.7-64-64-64L64 0z\"]\n};\nvar faBarcode = {\n  prefix: 'fas',\n  iconName: 'barcode',\n  icon: [448, 512, [], \"f02a\", \"M32 32C14.3 32 0 46.3 0 64L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32L64 64c0-17.7-14.3-32-32-32zm88 0c-13.3 0-24 10.7-24 24l0 400c0 13.3 10.7 24 24 24s24-10.7 24-24l0-400c0-13.3-10.7-24-24-24zm72 32l0 384c0 17.7 14.3 32 32 32s32-14.3 32-32l0-384c0-17.7-14.3-32-32-32s-32 14.3-32 32zm208-8l0 400c0 13.3 10.7 24 24 24s24-10.7 24-24l0-400c0-13.3-10.7-24-24-24s-24 10.7-24 24zm-96 0l0 400c0 13.3 10.7 24 24 24s24-10.7 24-24l0-400c0-13.3-10.7-24-24-24s-24 10.7-24 24z\"]\n};\nvar faListOl = {\n  prefix: 'fas',\n  iconName: 'list-ol',\n  icon: [512, 512, [\"list-1-2\", \"list-numeric\"], \"f0cb\", \"M0 72C0 58.8 10.7 48 24 48l48 0c13.3 0 24 10.7 24 24l0 104 24 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-96 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l24 0 0-80-24 0C10.7 96 0 85.3 0 72zM30.4 301.2C41.8 292.6 55.7 288 70 288l4.9 0c33.7 0 61.1 27.4 61.1 61.1 0 19.6-9.4 37.9-25.2 49.4l-24 17.5 33.2 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-90.7 0C13.1 464 0 450.9 0 434.7 0 425.3 4.5 416.5 12.1 411l70.5-51.3c3.4-2.5 5.4-6.4 5.4-10.6 0-7.2-5.9-13.1-13.1-13.1L70 336c-3.9 0-7.7 1.3-10.8 3.6L38.4 355.2c-10.6 8-25.6 5.8-33.6-4.8S-1 324.8 9.6 316.8l20.8-15.6zM224 64l256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 160l256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 160l256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nvar faList12 = faListOl;\nvar faListNumeric = faListOl;\nvar faFileCircleXmark = {\n  prefix: 'fas',\n  iconName: 'file-circle-xmark',\n  icon: [576, 512, [], \"e5a1\", \"M96 0C60.7 0 32 28.7 32 64l0 384c0 35.3 28.7 64 64 64l180 0c-22.7-31.5-36-70.2-36-112 0-100.6 77.4-183.2 176-191.3l0-38.1c0-17-6.7-33.3-18.7-45.3L290.7 18.7C278.7 6.7 262.5 0 245.5 0L96 0zM357.5 176L264 176c-13.3 0-24-10.7-24-24L240 58.5 357.5 176zM432 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7l-36.7 36.7 36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-36.7-36.7-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l36.7-36.7-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l36.7 36.7 36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nvar faCube = {\n  prefix: 'fas',\n  iconName: 'cube',\n  icon: [512, 512, [], \"f1b2\", \"M224.3-2.5c19.8-11.4 44.2-11.4 64 0L464.2 99c19.8 11.4 32 32.6 32 55.4l0 203c0 22.9-12.2 44-32 55.4L288.3 514.5c-19.8 11.4-44.2 11.4-64 0L48.5 413c-19.8-11.4-32-32.6-32-55.4l0-203c0-22.9 12.2-44 32-55.4L224.3-2.5zm207.8 360l0-166.1-143.8 83 0 166.1 143.8-83z\"]\n};\nvar faTape = {\n  prefix: 'fas',\n  iconName: 'tape',\n  icon: [576, 512, [], \"f4db\", \"M412.8 416c41.5-40.7 67.2-97.3 67.2-160 0-123.7-100.3-224-224-224S32 132.3 32 256 132.3 480 256 480l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-131.2 0zM256 160a96 96 0 1 1 0 192 96 96 0 1 1 0-192zm48 96a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"]\n};\nvar faBomb = {\n  prefix: 'fas',\n  iconName: 'bomb',\n  icon: [576, 512, [128163], \"f1e2\", \"M480-16c6.9 0 13 4.4 15.2 10.9l13.5 40.4 40.4 13.5C555.6 51 560 57.1 560 64s-4.4 13-10.9 15.2l-40.4 13.5-13.5 40.4C493 139.6 486.9 144 480 144s-13-4.4-15.2-10.9l-13.5-40.4-40.4-13.5C404.4 77 400 70.9 400 64s4.4-13 10.9-15.2l40.4-13.5 13.5-40.4C467-11.6 473.1-16 480-16zM321.4 97.4c12.5-12.5 32.8-12.5 45.3 0l80 80c12.5 12.5 12.5 32.8 0 45.3l-10.9 10.9c7.9 22 12.2 45.7 12.2 70.5 0 114.9-93.1 208-208 208S32 418.9 32 304 125.1 96 240 96c24.7 0 48.5 4.3 70.5 12.3l10.9-10.9zM144 304c0-53 43-96 96-96 13.3 0 24-10.7 24-24s-10.7-24-24-24c-79.5 0-144 64.5-144 144 0 13.3 10.7 24 24 24s24-10.7 24-24z\"]\n};\nvar faScaleUnbalanced = {\n  prefix: 'fas',\n  iconName: 'scale-unbalanced',\n  icon: [640, 512, [\"balance-scale-left\"], \"f515\", \"M519.8 62.4c16.8-5.6 25.8-23.7 20.2-40.5S516.3-3.9 499.6 1.6l-113 37.7c-13.9-23.5-39.6-39.3-68.9-39.3-44.2 0-80 35.8-80 80 0 3 .2 5.9 .5 8.8L115.6 129.6c-16.8 5.6-25.8 23.7-20.2 40.5s23.7 25.8 40.5 20.2l135.5-45.2c4.5 3.2 9.3 5.9 14.4 8.2l0 326.7c0 17.7 14.3 32 32 32l192 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0 0-294.7c21-9.2 37.2-27 44.2-49l125.9-42zM437.3 288l72.4-124.2 72.4 124.2-144.9 0zm72.4 96c62.9 0 115.2-34 126-78.9 2.6-11-1-22.3-6.7-32.1L533.8 109.8c-5-8.6-14.2-13.8-24.1-13.8s-19.1 5.3-24.1 13.8L390.4 273.1c-5.7 9.8-9.3 21.1-6.7 32.1 10.8 44.8 63.1 78.9 126 78.9zM126.8 291.8l72.4 124.2-144.9 0 72.4-124.2zM.9 433.1C11.7 478 64 512 126.8 512s115.2-34 126-78.9c2.6-11-1-22.3-6.7-32.1L150.9 237.8c-5-8.6-14.2-13.8-24.1-13.8s-19.1 5.3-24.1 13.8L7.6 401.1c-5.7 9.8-9.3 21.1-6.7 32.1z\"]\n};\nvar faBalanceScaleLeft = faScaleUnbalanced;\nvar faSquareCaretLeft = {\n  prefix: 'fas',\n  iconName: 'square-caret-left',\n  icon: [448, 512, [\"caret-square-left\"], \"f191\", \"M0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416zM128 256c0-6.7 2.8-13 7.7-17.6l112-104c7-6.5 17.2-8.2 25.9-4.4S288 142.5 288 152l0 208c0 9.5-5.7 18.2-14.4 22s-18.9 2.1-25.9-4.4l-112-104c-4.9-4.5-7.7-10.9-7.7-17.6z\"]\n};\nvar faCaretSquareLeft = faSquareCaretLeft;\nvar faRuler = {\n  prefix: 'fas',\n  iconName: 'ruler',\n  icon: [576, 512, [128207], \"f545\", \"M209.1 516.2c-18.7 18.7-49.1 18.7-67.9 0L28.1 403.1c-18.7-18.7-18.7-49.1 0-67.9l17-17 73.5 73.5c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-73.5-73.5 33.9-33.9 50.9 50.9c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-50.9-50.9 33.9-33.9 73.5 73.5c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-73.5-73.5 33.9-33.9 50.9 50.9c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-50.9-50.9 33.9-33.9 73.5 73.5c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-73.5-73.5 17-17c18.7-18.7 49.1-18.7 67.9 0L548.5 108.9c18.7 18.7 18.7 49.1 0 67.9L209.1 516.2z\"]\n};\nvar faI = {\n  prefix: 'fas',\n  iconName: 'i',\n  icon: [320, 512, [105], \"49\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l96 0 0 320-96 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0 0-320 96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32z\"]\n};\nvar faVolumeXmark = {\n  prefix: 'fas',\n  iconName: 'volume-xmark',\n  icon: [576, 512, [\"volume-mute\", \"volume-times\"], \"f6a9\", \"M48 352l48 0 134.1 119.2c6.4 5.7 14.6 8.8 23.1 8.8 19.2 0 34.8-15.6 34.8-34.8l0-378.4c0-19.2-15.6-34.8-34.8-34.8-8.5 0-16.7 3.1-23.1 8.8L96 160 48 160c-26.5 0-48 21.5-48 48l0 96c0 26.5 21.5 48 48 48zM367 175c-9.4 9.4-9.4 24.6 0 33.9l47 47-47 47c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l47-47 47 47c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-47-47 47-47c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-47 47-47-47c-9.4-9.4-24.6-9.4-33.9 0z\"]\n};\nvar faVolumeMute = faVolumeXmark;\nvar faVolumeTimes = faVolumeXmark;\nvar faArchway = {\n  prefix: 'fas',\n  iconName: 'archway',\n  icon: [512, 512, [], \"f557\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l448 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zm0 384c-17.7 0-32 14.3-32 32s14.3 32 32 32l128 0 0-128c0-53 43-96 96-96s96 43 96 96l0 128 128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-272-448 0 0 272z\"]\n};\nvar faPersonDigging = {\n  prefix: 'fas',\n  iconName: 'person-digging',\n  icon: [576, 512, [\"digging\"], \"f85e\", \"M208 40a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zM10.5 181.3c5.9-11.9 20.3-16.7 32.2-10.7l24.6 12.3 12.2-20.4c18.9-31.5 53.2-50.5 89.6-50.5 46.2 0 87.7 30.5 100.5 75.4l32.2 112.7 92.9 46.4 25.8-43c5.8-9.6 16.2-15.5 27.4-15.5s21.7 5.9 27.4 15.5l96 160c5.9 9.9 6.1 22.2 .4 32.2S555.5 512 544 512l-192 0c-11.5 0-22.2-6.2-27.8-16.2s-5.5-22.3 .4-32.2L370 387.8 21.3 213.5c-11.9-5.9-16.7-20.3-10.7-32.2zM94.3 307.4l112 56c10.8 5.4 17.7 16.5 17.7 28.6l0 88c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-68.2-61.3-30.7-36.3 109c-5.6 16.8-23.7 25.8-40.5 20.2S-3.9 486.6 1.7 469.9l48-144c2.9-8.8 9.5-15.9 18.1-19.4s18.3-3.2 26.6 .9z\"]\n};\nvar faDigging = faPersonDigging;\nvar faGaugeHigh = {\n  prefix: 'fas',\n  iconName: 'gauge-high',\n  icon: [512, 512, [62461, \"tachometer-alt\", \"tachometer-alt-fast\"], \"f625\", \"M0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM256 416c35.3 0 64-28.7 64-64 0-16.2-6-31.1-16-42.3l69.5-138.9c5.9-11.9 1.1-26.3-10.7-32.2s-26.3-1.1-32.2 10.7L261.1 288.2c-1.7-.1-3.4-.2-5.1-.2-35.3 0-64 28.7-64 64s28.7 64 64 64zM176 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM96 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm352-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nvar faTachometerAlt = faGaugeHigh;\nvar faTachometerAltFast = faGaugeHigh;\nvar faGenderless = {\n  prefix: 'fas',\n  iconName: 'genderless',\n  icon: [384, 512, [], \"f22d\", \"M192 128a128 128 0 1 1 0 256 128 128 0 1 1 0-256zm0 320a192 192 0 1 0 0-384 192 192 0 1 0 0 384z\"]\n};\nvar faCloudSun = {\n  prefix: 'fas',\n  iconName: 'cloud-sun',\n  icon: [640, 512, [9925], \"f6c4\", \"M208.3 192c43.1 0 80.5 24.4 99.2 60.1 14.7-17.2 36.4-28.1 60.8-28.1 44.2 0 80 35.8 80 80 0 5.5-.6 10.9-1.6 16 .5 0 1.1 0 1.6 0 53 0 96 43 96 96s-43 96-96 96l-320 0c-53 0-96-43-96-96 0-42.5 27.7-78.5 66-91.2-1.3-6.8-2-13.7-2-20.8 0-61.9 50.1-112 112-112zm192-223.8c5.3 0 10.3 2.7 13.3 7.1l47.3 70.4 83.3-16.3c5.2-1 10.6 .7 14.3 4.4 3.8 3.8 5.4 9.2 4.4 14.4l-16.3 83.3 70.4 47.3c4.4 3 7.1 8 7.1 13.3 0 5.3-2.6 10.3-7 13.2l-70.4 47.3 14.5 74.2c-17.2-21.7-40.4-38.4-67.2-47.3-2.5-12.7-6.9-24.6-12.8-35.7 9.6-14.9 15.2-32.7 15.2-51.7 0-53-43-96-96-96-47.9 0-87.6 35.1-94.8 80.9-20.9-16-45.9-27-73.1-31.1l21.5-14.5-16.3-83.2-.3-2c-.3-4.6 1.3-9.1 4.6-12.4 3.8-3.8 9.2-5.4 14.4-4.4l83.3 16.3 47.3-70.4 1.2-1.6c3-3.5 7.4-5.5 12.1-5.5zm0 175.8c26.5 0 48 21.5 48 48 0 3.8-.5 7.6-1.4 11.1-21.7-16.9-48.9-27.1-78.6-27.1-4.6 0-9.1 .2-13.5 .7 6.4-19 24.3-32.7 45.5-32.7z\"]\n};\nvar faArrowRight = {\n  prefix: 'fas',\n  iconName: 'arrow-right',\n  icon: [512, 512, [8594], \"f061\", \"M502.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l370.7 0-105.4 105.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z\"]\n};\nvar faHandshake = {\n  prefix: 'fas',\n  iconName: 'handshake',\n  icon: [576, 512, [129309, 62662, \"handshake-alt\", \"handshake-simple\"], \"f2b5\", \"M268.9 85.2L152.3 214.8c-4.6 5.1-4.4 13 .5 17.9 30.5 30.5 80 30.5 110.5 0l31.8-31.8c4.2-4.2 9.5-6.5 14.9-6.9 6.8-.6 13.8 1.7 19 6.9L505.6 376 576 320 576 32 464 96 440.2 80.1C424.4 69.6 405.9 64 386.9 64l-70.4 0c-1.1 0-2.3 0-3.4 .1-16.9 .9-32.8 8.5-44.2 21.1zM116.6 182.7L223.4 64 183.8 64c-25.5 0-49.9 10.1-67.9 28.1L112 96 0 32 0 320 156.4 450.3c23 19.2 52 29.7 81.9 29.7l15.7 0-7-7c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l41 41 9 0c19.1 0 37.8-4.3 54.8-12.3L359 441c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l32 32 17.5-17.5c8.9-8.9 11.5-21.8 7.6-33.1l-137.9-136.8-14.9 14.9c-49.3 49.3-129.1 49.3-178.4 0-23-23-23.9-59.9-2.2-84z\"]\n};\nvar faHandshakeAlt = faHandshake;\nvar faHandshakeSimple = faHandshake;\nvar faPersonSkiing = {\n  prefix: 'fas',\n  iconName: 'person-skiing',\n  icon: [576, 512, [9975, \"skiing\"], \"f7c9\", \"M416 56a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zM2.7 300.9c6.1-11.8 20.6-16.3 32.4-10.2l197.8 102.7 62.3-87.2-82-92.2c-11-12.4-16.2-27.5-16.2-42.4l111.6 53.4 42.9 48.2c14.9 16.7 16.2 41.6 3.2 59.8l-64.4 90.2 128.3 66.6c13.6 7.1 29.8 7.2 43.6 .3l15.2-7.6c11.9-5.9 26.3-1.1 32.2 10.7s1.1 26.3-10.7 32.2l-15.2 7.6c-27.5 13.7-59.9 13.5-87.2-.7L12.9 333.3C1.2 327.2-3.4 312.7 2.7 300.9zM103 49.6l18 8.7 8.7-17.4c4-7.9 13.6-11.1 21.5-7.2s11.1 13.6 7.2 21.5l-8.5 17 84.8 41 .4-.2 76.1-33.8c31.3-13.9 67.9-.7 83.2 29.9l28.9 57.8 68.7 27.5c16.4 6.6 24.4 25.2 17.8 41.6s-25.2 24.4-41.6 17.8L393.8 224c-10.9-4.4-19.8-12.6-25.1-23.1l-11.5-23.1c-16.4 9.4-25.9 14.8-28.5 16.3l-7.6-3.7-185.6-89.6-9.2 18.3c-4 7.9-13.6 11.1-21.5 7.2s-11.1-13.6-7.2-21.5l9-17.9-17.6-8.5C81.1 74.6 77.8 65 81.6 57S95 45.7 103 49.6z\"]\n};\nvar faSkiing = faPersonSkiing;\nvar faBridgeWater = {\n  prefix: 'fas',\n  iconName: 'bridge-water',\n  icon: [640, 512, [], \"e4ce\", \"M64 64l512 0 0 112c-37.6 9.4-64 43.2-64 82l0 76.4c-21-9.7-43.5-14.5-66-14.4-10 .1-20.1 1.1-30 3.1l0-35.1c0-53-43-96-96-96s-96 43-96 96l0 32.7c-5.3-.5-10.7-.8-16-.7-27.7 .2-55.4 7.8-80 23l0-85c0-38.8-26.4-72.6-64-82L64 64zM403.4 444.1C379.1 462.3 351.1 480 320 480s-59.1-17.7-83.4-35.9c-21.3-16.1-49.9-16.1-71.2 0-23.8 17.9-54.1 35.5-88.1 35.3-20.4-.1-40.7-6.7-59.8-21.1-10.6-8-12.7-23-4.7-33.6s23-12.7 33.6-4.7c11.3 8.5 21.6 11.4 31.2 11.5 17.6 .1 37.3-9.4 58.9-25.7 38.4-29 90.5-29 129 0 24 18.1 40.7 26.3 54.5 26.3s30.5-8.2 54.5-26.3c38.4-29 90.5-29 129 0 16.9 12.7 32.9 21.5 47.8 24.6 13.7 2.8 27.4 .9 42.3-10.3 10.6-8 25.6-5.9 33.6 4.7s5.9 25.6-4.7 33.6c-26.4 19.9-54.2 24.4-80.7 19.1-25.3-5.1-48.1-18.9-67.2-33.3-21.3-16.1-49.9-16.1-71.2 0z\"]\n};\nvar faBuildingNgo = {\n  prefix: 'fas',\n  iconName: 'building-ngo',\n  icon: [576, 512, [], \"e4d7\", \"M128 0C92.7 0 64 28.7 64 64l0 384c0 35.3 28.7 64 64 64l48 0 0-112c0-35.3 28.7-64 64-64l208 0 0-272c0-35.3-28.7-64-64-64L128 0zm32 112c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM304 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM160 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm144-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM520 380c-24.3 0-44 19.7-44 44l0 80c0 24.3 19.7 44 44 44l16 0c24.3 0 44-19.7 44-44l0-80c0-24.3-19.7-44-44-44l-16 0zm-4 44c0-2.2 1.8-4 4-4l16 0c2.2 0 4 1.8 4 4l0 80c0 2.2-1.8 4-4 4l-16 0c-2.2 0-4-1.8-4-4l0-80zm-168 0l0 80c0 24.3 19.7 44 44 44l16 0c24.3 0 44-19.7 44-44l0-24c0-11-9-20-20-20l-8 0c-11 0-20 9-20 20 0 6.5 3.1 12.4 8 16l0 8c0 2.2-1.8 4-4 4l-16 0c-2.2 0-4-1.8-4-4l0-80c0-2.2 1.8-4 4-4l20.4 0c1.9 9.1 9.9 16 19.6 16 11 0 20-9 20-20 0-19.9-16.1-36-36-36l-24 0c-24.3 0-44 19.7-44 44zm-90.1-32.9c-4.1-8.3-13.5-12.7-22.5-10.5S220 390.7 220 400l0 128c0 11 9 20 20 20s20-9 20-20l0-43.3 26.1 52.2c4.1 8.3 13.5 12.7 22.5 10.5S324 537.3 324 528l0-128c0-11-9-20-20-20s-20 9-20 20l0 43.3-26.1-52.2z\"]\n};\nvar faIgloo = {\n  prefix: 'fas',\n  iconName: 'igloo',\n  icon: [576, 512, [], \"f7ae\", \"M320 33.8l0 126.2-271.5 0c51.7-77.2 139.6-128 239.5-128 10.8 0 21.5 .6 32 1.8zM368 160l0-116.7c66 19 122.2 61 159.5 116.7L368 160zM22.6 208l73.4 0 0 112-96 0c0-39.7 8-77.6 22.6-112zM176 320l-32 0 0-112 288 0 0 112-32 0 0 48 176 0 0 64c0 26.5-21.5 48-48 48L48 480c-26.5 0-48-21.5-48-48l0-64 176 0 0-48zm304 0l0-112 73.4 0C568 242.4 576 280.3 576 320l-96 0zM288 288c-35.3 0-64 28.7-64 64l0 80 128 0 0-80c0-35.3-28.7-64-64-64z\"]\n};\nvar faCircleDollarToSlot = {\n  prefix: 'fas',\n  iconName: 'circle-dollar-to-slot',\n  icon: [576, 512, [\"donate\"], \"f4b9\", \"M96 224a192 192 0 1 1 384 0 192 192 0 1 1 -384 0zm176-92l0 4c-28.8 .3-52 23.7-52 52.5 0 25.7 18.5 47.6 43.9 51.8l41.7 7c6 1 10.4 6.2 10.4 12.3 0 6.9-5.6 12.5-12.5 12.5L248 272c-11 0-20 9-20 20s9 20 20 20l24 0 0 4c0 11 9 20 20 20s20-9 20-20l0-4.7c25-4.1 44-25.7 44-51.8 0-25.7-18.5-47.6-43.9-51.8l-41.7-7c-6-1-10.4-6.2-10.4-12.3 0-6.9 5.6-12.5 12.5-12.5l47.5 0c11 0 20-9 20-20s-9-20-20-20l-8 0 0-4c0-11-9-20-20-20s-20 9-20 20zM48 344l0 104c0 8.8 7.2 16 16 16l448 0c8.8 0 16-7.2 16-16l0-104c0-13.3 10.7-24 24-24s24 10.7 24 24l0 104c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 344c0-13.3 10.7-24 24-24s24 10.7 24 24z\"]\n};\nvar faDonate = faCircleDollarToSlot;\nvar faY = {\n  prefix: 'fas',\n  iconName: 'y',\n  icon: [384, 512, [121], \"59\", \"M58 45.4C47.8 31 27.8 27.7 13.4 38S-4.3 68.2 6 82.6L160 298.3 160 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-149.7 154-215.7c10.3-14.4 6.9-34.4-7.4-44.6S336.2 31 326 45.4L192 232.9 58 45.4z\"]\n};\nvar faFaceSmileWink = {\n  prefix: 'fas',\n  iconName: 'face-smile-wink',\n  icon: [512, 512, [128521, \"smile-wink\"], \"f4da\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM165.4 321.9c20.4 28 53.4 46.1 90.6 46.1s70.2-18.1 90.6-46.1c7.8-10.7 22.8-13.1 33.5-5.3s13.1 22.8 5.3 33.5C356.3 390 309.2 416 256 416s-100.3-26-129.4-65.9c-7.8-10.7-5.4-25.7 5.3-33.5s25.7-5.4 33.5 5.3zM144 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm164 8c0 11-9 20-20 20s-20-9-20-20c0-33.1 26.9-60 60-60l16 0c33.1 0 60 26.9 60 60 0 11-9 20-20 20s-20-9-20-20-9-20-20-20l-16 0c-11 0-20 9-20 20z\"]\n};\nvar faSmileWink = faFaceSmileWink;\nvar faDiceFour = {\n  prefix: 'fas',\n  iconName: 'dice-four',\n  icon: [448, 512, [9859], \"f524\", \"M0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm160 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM352 160a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM320 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nvar faFaceGrinSquintTears = {\n  prefix: 'fas',\n  iconName: 'face-grin-squint-tears',\n  icon: [576, 512, [129315, \"grin-squint-tears\"], \"f586\", \"M560 35.4c0 25.6-18.8 47.3-44.1 50.9L469.1 93c-10.6 1.5-19.6-7.5-18.1-18.1l6.7-46.7C461.3 2.8 483-16 508.6-16 537-16 560 7 560 35.4zM403.5 68.1c-6 42.2 30.2 78.4 72.4 72.4l37.8-5.4C565.7 232 550.8 355.3 469 437s-205 96.6-301.9 44.7l5.4-37.8c6-42.2-30.2-78.4-72.4-72.4l-37.8 5.4C10.3 280 25.2 156.7 107 75S312-21.7 408.9 30.3l-5.4 37.8zM417.8 201c-19.1 36.4-45.6 72.7-78.9 106s-69.6 59.8-106 78.9c-11.1 5.8-12.4 21.4-1.1 26.6 59.2 27.5 131.8 16.8 180.6-32s59.5-121.4 32-180.6c-5.3-11.3-20.8-10-26.6 1.1zM113.9 270.6c1.7 8 9 13.4 17.1 12.7l43.1-3.9-3.9 43.1c-.7 8.1 4.7 15.5 12.7 17.1s15.9-2.9 18.4-10.6l28-84.6c1.9-5.7 .4-12.1-3.9-16.3s-10.6-5.8-16.3-3.9l-84.6 28c-7.7 2.6-12.3 10.5-10.6 18.5zM315.2 99.1c.7-8.1-4.7-15.5-12.7-17.1s-15.9 2.9-18.5 10.6l-28 84.6c-1.9 5.7-.4 12.1 3.9 16.3s10.6 5.8 16.3 3.9l84.6-28c7.7-2.6 12.3-10.5 10.6-18.4s-9-13.4-17.1-12.7l-43.1 3.9 3.9-43.1zM60.1 425.7l46.7-6.7c10.6-1.5 19.6 7.5 18.1 18.1l-6.7 46.7C114.7 509.2 93 528 67.4 528 39 528 16 505 16 476.6 16 451 34.8 429.3 60.1 425.7z\"]\n};\nvar faGrinSquintTears = faFaceGrinSquintTears;\nvar faFileAudio = {\n  prefix: 'fas',\n  iconName: 'file-audio',\n  icon: [384, 512, [], \"f1c7\", \"M0 64C0 28.7 28.7 0 64 0L213.5 0c17 0 33.3 6.7 45.3 18.7L365.3 125.3c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm208-5.5l0 93.5c0 13.3 10.7 24 24 24L325.5 176 208 58.5zm53.8 185.2c-9.1-6.3-21.5-4.1-27.8 5s-4.1 21.5 5 27.8c23.9 16.7 39.4 44.3 39.4 75.5s-15.6 58.9-39.4 75.5c-9.1 6.3-11.3 18.8-5 27.8s18.8 11.3 27.8 5c34.1-23.8 56.6-63.5 56.6-108.3S296 267.5 261.8 243.7zM80 312c-8.8 0-16 7.2-16 16l0 48c0 8.8 7.2 16 16 16l24 0 27.2 34c3 3.8 7.6 6 12.5 6l.3 0c8.8 0 16-7.2 16-16l0-128c0-8.8-7.2-16-16-16l-.3 0c-4.9 0-9.5 2.2-12.5 6l-27.2 34-24 0zm128 72.2c0 10.7 10.5 18.2 18.9 11.6 12.9-10.3 21.1-26.1 21.1-43.8s-8.2-33.5-21.1-43.8c-8.4-6.7-18.9 .9-18.9 11.6l0 64.5z\"]\n};\nvar faArrowsDownToLine = {\n  prefix: 'fas',\n  iconName: 'arrows-down-to-line',\n  icon: [512, 512, [], \"e4b8\", \"M214.6 310.6l-64 64c-12.5 12.5-32.8 12.5-45.3 0l-64-64c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L96 274.7 96 32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 242.7 9.4-9.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zm256 0l-64 64c-12.5 12.5-32.8 12.5-45.3 0l-64-64c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l9.4 9.4 0-242.7c0-17.7 14.3-32 32-32s32 14.3 32 32l0 242.7 9.4-9.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zM32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l448 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512z\"]\n};\nvar faG = {\n  prefix: 'fas',\n  iconName: 'g',\n  icon: [448, 512, [103], \"47\", \"M224 96C135.6 96 64 167.6 64 256s71.6 160 160 160c77.4 0 142-55 156.8-128L256 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l144 0c25.8 0 49.6 21.4 47.2 50.6-9.5 115-105.8 205.4-223.2 205.4-123.7 0-224-100.3-224-224S100.3 32 224 32c57.4 0 109.7 21.6 149.3 57 13.2 11.8 14.3 32 2.5 45.2s-32 14.3-45.2 2.5C302.3 111.4 265 96 224 96z\"]\n};\nvar faVihara = {\n  prefix: 'fas',\n  iconName: 'vihara',\n  icon: [576, 512, [], \"f6a7\", \"M273.6-3.2c8.5-6.4 20.3-6.4 28.8 0L443.2 102.4c8.3 6.2 18.4 9.6 28.8 9.6 13.3 0 24 10.7 24 24s-10.7 24-24 24l-24 0 0 48 58.7 64 13.3 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-8 0 0 48 24.4 32 15.6 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-40 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-128 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-128 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-40 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l22.1 0 17.9-32 0-48-8 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l13.3 0 58.7-64 0-48-24 0c-13.3 0-24-10.7-24-24s10.7-24 24-24c10.4 0 20.5-3.4 28.8-9.6L273.6-3.2zM128 368l320 0 0-48-320 0 0 48zM384 160l-192 0 0 48 192 0 0-48z\"]\n};\nvar faFlagCheckered = {\n  prefix: 'fas',\n  iconName: 'flag-checkered',\n  icon: [448, 512, [127937], \"f11e\", \"M32 0C49.7 0 64 14.3 64 32l0 16 69-17.2c38.1-9.5 78.3-5.1 113.5 12.5 46.3 23.2 100.8 23.2 147.1 0l9.6-4.8C423.8 28.1 448 43.1 448 66.1l0 279.7c0 13.3-8.3 25.3-20.8 30l-34.7 13c-46.2 17.3-97.6 14.6-141.7-7.4-37.9-19-81.4-23.7-122.5-13.4L64 384 64 480c0 17.7-14.3 32-32 32S0 497.7 0 480L0 32C0 14.3 14.3 0 32 0zM64 187.1l64-13.9 0 65.5-64 13.9 0 65.5 48.8-12.2c5.1-1.3 10.1-2.4 15.2-3.3l0-63.9 38.9-8.4c8.3-1.8 16.7-2.5 25.1-2.1l0-64c13.6 .4 27.2 2.6 40.4 6.4l23.6 6.9 0 66.7-41.7-12.3c-7.3-2.1-14.8-3.4-22.3-3.8l0 71.4c21.8 1.9 43.3 6.7 64 14.4l0-69.8 22.7 6.7c13.5 4 27.3 6.4 41.3 7.4l0-64.2c-7.8-.8-15.6-2.3-23.2-4.5l-40.8-12 0-62c-13-3.8-25.8-8.8-38.2-15-8.2-4.1-16.9-7-25.8-8.8l0 72.4c-13-.4-26 .8-38.7 3.6l-25.3 5.5 0-75.2-64 16 0 73.1zM320 335.7c16.8 1.5 33.9-.7 50-6.8l14-5.2 0-71.7-7.9 1.8c-18.4 4.3-37.3 5.7-56.1 4.5l0 77.4zm64-149.4l0-70.8c-20.9 6.1-42.4 9.1-64 9.1l0 69.4c13.9 1.4 28 .5 41.7-2.6l22.3-5.2z\"]\n};\nvar faGaugeSimple = {\n  prefix: 'fas',\n  iconName: 'gauge-simple',\n  icon: [512, 512, [\"gauge-simple-med\", \"tachometer-average\"], \"f629\", \"M0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zm320 96c0-26.9-16.5-49.9-40-59.3L280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 172.7c-23.5 9.5-40 32.5-40 59.3 0 35.3 28.7 64 64 64s64-28.7 64-64z\"]\n};\nvar faGaugeSimpleMed = faGaugeSimple;\nvar faTachometerAverage = faGaugeSimple;\nvar faRightLeft = {\n  prefix: 'fas',\n  iconName: 'right-left',\n  icon: [512, 512, [\"exchange-alt\"], \"f362\", \"M502.6 150.6l-96 96c-9.2 9.2-22.9 11.9-34.9 6.9S352 236.9 352 224l0-64-320 0c-17.7 0-32-14.3-32-32S14.3 96 32 96l320 0 0-64c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l96 96c12.5 12.5 12.5 32.8 0 45.3zm-397.3 352l-96-96c-12.5-12.5-12.5-32.8 0-45.3l96-96c9.2-9.2 22.9-11.9 34.9-6.9S160 275.1 160 288l0 64 320 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-320 0 0 64c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9z\"]\n};\nvar faExchangeAlt = faRightLeft;\nvar faPills = {\n  prefix: 'fas',\n  iconName: 'pills',\n  icon: [512, 512, [], \"f484\", \"M64 112c0-26.5 21.5-48 48-48s48 21.5 48 48l0 112-96 0 0-112zM176 368c0-48.7 18.1-93.2 48-127l0-129C224 50.1 173.9 0 112 0S0 50.1 0 112L0 400c0 61.9 50.1 112 112 112 37.3 0 70.3-18.2 90.7-46.3-17-28.6-26.7-62-26.7-97.7zm64.7 67.4c4.6 8.7 16.3 9.7 23.3 2.7L438.1 264c7-7 6-18.7-2.7-23.3-20.1-10.7-43-16.7-67.4-16.7-79.5 0-144 64.5-144 144 0 24.3 6 47.3 16.7 67.4zM297.9 472c-7 7-6 18.7 2.7 23.3 20.1 10.7 43 16.7 67.4 16.7 79.5 0 144-64.5 144-144 0-24.3-6-47.3-16.7-67.4-4.6-8.7-16.3-9.7-23.3-2.7L297.9 472z\"]\n};\nvar faExplosion = {\n  prefix: 'fas',\n  iconName: 'explosion',\n  icon: [512, 512, [], \"e4e9\", \"M256-32c13.3 0 24 10.7 24 24l0 48c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24zm0 160c12.4 0 22.7 9.4 23.9 21.7L293.4 291.6 467.6 11.3c6.7-10.7 20.5-14.5 31.7-8.5s15.8 19.5 10.6 31L372.8 338.6c2.2 2.3 4.3 4.7 6.3 7.1l97.2-54.7c10.5-5.9 23.6-3.1 30.9 6.4s6.3 23-2.2 31.5l-87 87-71.4 0c-13.2-37.3-48.7-64-90.5-64s-77.4 26.7-90.5 64l-79.6 0-75.5-52.3C.6 357-2.8 344.1 2.4 333.5s17.4-15.9 28.7-12.4l97.2 30.4c3-3.9 6.1-7.6 9.4-11.3L75.4 236.3c-6.1-10.1-3.9-23.1 5.1-30.7s22.2-7.5 31.1 .1L214 293.6c1.5-.4 3-.8 4.5-1.1l13.6-142.7c1.2-12.3 11.5-21.7 23.9-21.7zM32 464l456 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 512c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0z\"]\n};\nvar faArrowsDownToPeople = {\n  prefix: 'fas',\n  iconName: 'arrows-down-to-people',\n  icon: [512, 512, [], \"e4b9\", \"M113 153c-9.4 9.4-24.6 9.4-33.9 0L15 89C5.7 79.6 5.7 64.4 15 55S39.6 45.7 49 55L72 78.1 72-8c0-13.3 10.7-24 24-24s24 10.7 24 24l0 86.1 23-23c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-64 64zm320 0c-9.4 9.4-24.6 9.4-33.9 0L335 89c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l23 23 0-86.1c0-13.3 10.7-24 24-24s24 10.7 24 24l0 86.1 23-23c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-64 64zM256 192a56 56 0 1 1 0 112 56 56 0 1 1 0-112zm0 160c53 0 96 43 96 96l0 32c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32l0-32c0-53 43-96 96-96zM32 288a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm352 0a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM80 368c15.3 0 29.6 4.3 41.8 11.8-6.3 16.2-9.8 33.8-9.8 52.2l0 48c0 11.4 2.4 22.2 6.7 32l-87.8 0C13.8 512 0 498.2 0 481.1L0 448c0-44.2 35.8-80 80-80zM393.3 512c4.3-9.8 6.7-20.6 6.7-32l0-48c0-18.4-3.5-36-9.8-52.2 12.2-7.5 26.5-11.8 41.8-11.8 44.2 0 80 35.8 80 80l0 33.1c0 17-13.8 30.9-30.9 30.9l-87.8 0z\"]\n};\nvar faUsersViewfinder = {\n  prefix: 'fas',\n  iconName: 'users-viewfinder',\n  icon: [576, 512, [], \"e595\", \"M64 0C28.7 0 0 28.7 0 64l0 72c0 13.3 10.7 24 24 24s24-10.7 24-24l0-72c0-8.8 7.2-16 16-16l72 0c13.3 0 24-10.7 24-24S149.3 0 136 0L64 0zM440 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l72 0c8.8 0 16 7.2 16 16l0 72c0 13.3 10.7 24 24 24s24-10.7 24-24l0-72c0-35.3-28.7-64-64-64L440 0zM48 376c0-13.3-10.7-24-24-24S0 362.7 0 376l0 72c0 35.3 28.7 64 64 64l72 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-72 0c-8.8 0-16-7.2-16-16l0-72zm528 0c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 72c0 8.8-7.2 16-16 16l-72 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l72 0c35.3 0 64-28.7 64-64l0-72zM288 216a56 56 0 1 0 0-112 56 56 0 1 0 0 112zm0 40c-53 0-96 43-96 96l0 24c0 13.3 10.7 24 24 24l144 0c13.3 0 24-10.7 24-24l0-24c0-53-43-96-96-96zm192-64a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM168 272.3c-49.3 4.1-88 45.3-88 95.7l0 10.7c0 11.8 9.6 21.3 21.3 21.3l46.8 0c-2.7-7.5-4.1-15.6-4.1-24l0-24c0-29.5 8.8-56.9 24-79.7zM427.9 400l46.8 0c11.8 0 21.3-9.6 21.3-21.3l0-10.7c0-50.3-38.7-91.6-88-95.7 15.2 22.8 24 50.2 24 79.7l0 24c0 8.4-1.4 16.5-4.1 24zM192 192a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"]\n};\nvar faCarOn = {\n  prefix: 'fas',\n  iconName: 'car-on',\n  icon: [448, 512, [], \"e4dd\", \"M248-8c0-13.3-10.7-24-24-24S200-21.3 200-8l0 64c0 13.3 10.7 24 24 24s24-10.7 24-24l0-64zM145.3 208l157.5 0c6.7 0 12.6 4.1 15 10.4l26.1 69.6-239.6 0 26.1-69.6c2.3-6.2 8.3-10.4 15-10.4zM34 292.8l-1.3 3.4C13.2 307.1 0 328 0 352L0 480c0 17.7 14.3 32 32 32l16 0c17.7 0 32-14.3 32-32l0-32 288 0 0 32c0 17.7 14.3 32 32 32l16 0c17.7 0 32-14.3 32-32l0-128c0-24-13.2-44.9-32.8-55.9l-1.3-3.4-36.3-96.9c-11.7-31.2-41.6-51.9-74.9-51.9l-157.5 0c-33.3 0-63.2 20.7-74.9 51.9L34 292.8zM96 336a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm224 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM7 7C-2.3 16.4-2.3 31.6 7 41L55 89c9.4 9.4 24.6 9.4 33.9 0S98.3 64.4 89 55L41 7C31.6-2.3 16.4-2.3 7 7zM407 7L359 55c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l48-48c9.4-9.4 9.4-24.6 0-33.9S416.4-2.3 407 7z\"]\n};\nvar faSleigh = {\n  prefix: 'fas',\n  iconName: 'sleigh',\n  icon: [640, 512, [], \"f7cc\", \"M64 32C46.3 32 32 46.3 32 64S46.3 96 64 96l0 160c0 41.8 26.7 77.4 64 90.5l0 69.5-72 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l504 0c44.2 0 80-35.8 80-80l0-8c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 8c0 17.7-14.3 32-32 32l-80 0 0-64c53 0 96-43 96-96l0-96c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0c-17.7 0-32 14.3-32 32l0 32c0 35.3-28.7 64-64 64l-48.9 0c-48.5 0-92.8-27.4-114.5-70.8l-25.2-50.5C237.7 59.4 193.4 32 144.9 32L64 32zM432 416l-256 0 0-64 256 0 0 64z\"]\n};\nvar faDumbbell = {\n  prefix: 'fas',\n  iconName: 'dumbbell',\n  icon: [640, 512, [], \"f44b\", \"M96 112c0-26.5 21.5-48 48-48s48 21.5 48 48l0 112 256 0 0-112c0-26.5 21.5-48 48-48s48 21.5 48 48l0 16 16 0c26.5 0 48 21.5 48 48l0 48c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 48c0 26.5-21.5 48-48 48l-16 0 0 16c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-112-256 0 0 112c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-16-16 0c-26.5 0-48-21.5-48-48l0-48c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-48c0-26.5 21.5-48 48-48l16 0 0-16z\"]\n};\nvar faBabyCarriage = {\n  prefix: 'fas',\n  iconName: 'baby-carriage',\n  icon: [512, 512, [\"carriage-baby\"], \"f77d\", \"M64 208l0 80c0 53 43 96 96 96l192 0c53 0 96-43 96-96l0-112 40 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-64 0c-13.3 0-24 10.7-24 24l0 56-336 0zm.2-48l223.8 0 0-128c0-17.7-14.3-32-32-32L232 0C141.9 0 68.4 70.9 64.2 160zM160 464a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm288 0a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"]\n};\nvar faCarriageBaby = faBabyCarriage;\nvar faKiwiBird = {\n  prefix: 'fas',\n  iconName: 'kiwi-bird',\n  icon: [576, 512, [], \"f535\", \"M291.2 388.4c31.2-18.8 64.7-36.4 101.1-36.4l55.7 0c4.6 0 9.1-.2 13.6-.7l85.3 121.9c4 5.7 11.3 8.2 17.9 6.1S576 471 576 464l0-240c0-70.7-57.3-128-128-128l-55.7 0C355.9 96 322.4 78.4 291.2 59.6 262.3 42.1 228.3 32 192 32 86 32 0 118 0 224 0 295.1 38.6 357.1 96 390.3L96 456c0 13.3 10.7 24 24 24s24-10.7 24-24l0-46c15.3 3.9 31.4 6 48 6 5.4 0 10.7-.2 16-.7l0 40.7c0 13.3 10.7 24 24 24s24-10.7 24-24l0-50.9c12.4-4.4 24.2-10 35.2-16.7zM448 200a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nvar faCalendarXmark = {\n  prefix: 'fas',\n  iconName: 'calendar-xmark',\n  icon: [448, 512, [\"calendar-times\"], \"f273\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 32 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 128C0 92.7 28.7 64 64 64l32 0 0-32c0-17.7 14.3-32 32-32zM291.9 220.1c-9.4-9.4-24.6-9.4-33.9 0l-33.9 33.9-33.9-33.9c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l33.9 33.9-33.9 33.9c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l33.9-33.9 33.9 33.9c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-33.9-33.9 33.9-33.9c9.4-9.4 9.4-24.6 0-33.9z\"]\n};\nvar faCalendarTimes = faCalendarXmark;\nvar faCircleDown = {\n  prefix: 'fas',\n  iconName: 'circle-down',\n  icon: [512, 512, [61466, \"arrow-alt-circle-down\"], \"f358\", \"M256 0a256 256 0 1 0 0 512 256 256 0 1 0 0-512zM244.7 387.3l-104-104c-4.6-4.6-5.9-11.5-3.5-17.4s8.3-9.9 14.8-9.9l56 0 0-96c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 96 56 0c6.5 0 12.3 3.9 14.8 9.9s1.1 12.9-3.5 17.4l-104 104c-6.2 6.2-16.4 6.2-22.6 0z\"]\n};\nvar faArrowAltCircleDown = faCircleDown;\nvar faFileMedical = {\n  prefix: 'fas',\n  iconName: 'file-medical',\n  icon: [384, 512, [], \"f477\", \"M0 64C0 28.7 28.7 0 64 0L213.5 0c17 0 33.3 6.7 45.3 18.7L365.3 125.3c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm208-5.5l0 93.5c0 13.3 10.7 24 24 24L325.5 176 208 58.5zM160 280l0 40-40 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l40 0 0 40c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-40 40 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-40 0 0-40c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16z\"]\n};\nvar faXmark = {\n  prefix: 'fas',\n  iconName: 'xmark',\n  icon: [384, 512, [128473, 10005, 10006, 10060, 215, \"close\", \"multiply\", \"remove\", \"times\"], \"f00d\", \"M55.1 73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L147.2 256 9.9 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192.5 301.3 329.9 438.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.8 256 375.1 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192.5 210.7 55.1 73.4z\"]\n};\nvar faClose = faXmark;\nvar faMultiply = faXmark;\nvar faRemove = faXmark;\nvar faTimes = faXmark;\nvar faShapes = {\n  prefix: 'fas',\n  iconName: 'shapes',\n  icon: [512, 512, [\"triangle-circle-square\"], \"f61f\", \"M256 0c11.2 0 21.7 5.9 27.4 15.5l96 160c5.9 9.9 6.1 22.2 .4 32.2S363.5 224 352 224l-192 0c-11.5 0-22.2-6.2-27.8-16.2s-5.5-22.3 .4-32.2l96-160C234.3 5.9 244.8 0 256 0zM128 272a112 112 0 1 1 0 224 112 112 0 1 1 0-224zm200 16l112 0c22.1 0 40 17.9 40 40l0 112c0 22.1-17.9 40-40 40l-112 0c-22.1 0-40-17.9-40-40l0-112c0-22.1 17.9-40 40-40z\"]\n};\nvar faTriangleCircleSquare = faShapes;\nvar faDiceOne = {\n  prefix: 'fas',\n  iconName: 'dice-one',\n  icon: [448, 512, [9856], \"f525\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM224 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faLockOpen = {\n  prefix: 'fas',\n  iconName: 'lock-open',\n  icon: [576, 512, [], \"f3c1\", \"M384 96c0-35.3 28.7-64 64-64s64 28.7 64 64l0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32c0-70.7-57.3-128-128-128S320 25.3 320 96l0 64-160 0c-35.3 0-64 28.7-64 64l0 224c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64l-32 0 0-64z\"]\n};\nvar faPepperHot = {\n  prefix: 'fas',\n  iconName: 'pepper-hot',\n  icon: [576, 512, [127798], \"f816\", \"M545 65c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L478.9 63.2C452.3 43.6 419.5 32 384 32 348.9 32 316.5 43.3 290.1 62.4 274.1 74.1 284.2 96 304 96l24 0c13.3 0 24 10.7 24 24l0 80c0 13.3 10.7 24 24 24l80 0c13.3 0 24 10.7 24 24l0 24c0 19.8 21.9 29.9 33.6 13.9 19.1-26.4 30.4-58.8 30.4-93.9 0-35.5-11.6-68.3-31.2-94.9L545 65zM270 135.5l-159.6 228C101.3 376.4 86.7 384 71 384l-7 0c-26.5 0-48 21.5-48 48s21.5 48 48 48l27.1 0c65.7 0 129.7-20.2 183.5-57.8L440.5 306.1C435 295.9 432 284.2 432 272l-56 0c-39.8 0-72-32.2-72-72l0-56c-12.2 0-23.9-3-34-8.5z\"]\n};\nvar faDropletSlash = {\n  prefix: 'fas',\n  iconName: 'droplet-slash',\n  icon: [576, 512, [\"tint-slash\"], \"f5c7\", \"M41-24.9c-9.4-9.4-24.6-9.4-33.9 0S-2.3-.3 7 9.1l528 528c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L463.6 397.8c10.5-23.8 16.4-50.1 16.4-77.8 0-91.2-130.2-274.1-166.6-323.5-5.9-8-15.2-12.5-25.2-12.5l-.4 0c-10 0-19.3 4.5-25.2 12.5-15.6 21.2-48.5 66.9-80.9 119.4L41-24.9zm92 227.7c-21.6 43.8-37 85.9-37 117.2 0 106 86 192 192 192 43.4 0 83.4-14.4 115.5-38.6L133 202.8z\"]\n};\nvar faTintSlash = faDropletSlash;\nvar faDroplet = {\n  prefix: 'fas',\n  iconName: 'droplet',\n  icon: [384, 512, [128167, \"tint\"], \"f043\", \"M192 512C86 512 0 426 0 320 0 228.8 130.2 45.9 166.6-3.5 172.5-11.5 181.8-16 191.8-16l.4 0c10 0 19.3 4.5 25.2 12.5 36.4 49.4 166.6 232.3 166.6 323.5 0 106-86 192-192 192zM112 312c0-13.3-10.7-24-24-24s-24 10.7-24 24c0 75.1 60.9 136 136 136 13.3 0 24-10.7 24-24s-10.7-24-24-24c-48.6 0-88-39.4-88-88z\"]\n};\nvar faTint = faDroplet;\nvar faFileLines = {\n  prefix: 'fas',\n  iconName: 'file-lines',\n  icon: [384, 512, [128441, 128462, 61686, \"file-alt\", \"file-text\"], \"f15c\", \"M0 64C0 28.7 28.7 0 64 0L213.5 0c17 0 33.3 6.7 45.3 18.7L365.3 125.3c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm208-5.5l0 93.5c0 13.3 10.7 24 24 24L325.5 176 208 58.5zM120 256c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0z\"]\n};\nvar faFileAlt = faFileLines;\nvar faFileText = faFileLines;\nvar faCommentsDollar = {\n  prefix: 'fas',\n  iconName: 'comments-dollar',\n  icon: [576, 512, [], \"f653\", \"M192 320c106 0 192-78.8 192-176S298-32 192-32 0 46.8 0 144c0 39.6 14.3 76.2 38.4 105.6L2.8 316.8C-2.1 326.1-.4 337.5 7 345s18.9 9.2 28.2 4.2L116.8 306c23.1 9 48.5 14 75.2 14zm3.2 48c16.4 81.9 94.7 144 188.8 144 26.7 0 52.1-5 75.2-14l81.6 43.2c9.3 4.9 20.7 3.2 28.2-4.2s9.2-18.9 4.2-28.2l-35.6-67.2c24.1-29.4 38.4-66 38.4-105.6 0-82.4-61.7-151.5-145-170.7-11.5 115.8-115.8 201.2-235.8 202.7zM196 32c11 0 20 9 20 20l0 4 8 0c11 0 20 9 20 20s-9 20-20 20l-47.5 0c-6.9 0-12.5 5.6-12.5 12.5 0 6.1 4.4 11.3 10.4 12.3l41.7 7c25.3 4.2 43.9 26.1 43.9 51.8 0 26.1-19 47.7-44 51.8l0 4.7c0 11-9 20-20 20s-20-9-20-20l0-4-24 0c-11 0-20-9-20-20s9-20 20-20l55.5 0c6.9 0 12.5-5.6 12.5-12.5 0-6.1-4.4-11.3-10.4-12.3l-41.7-7c-25.3-4.2-43.9-26.1-43.9-51.8 0-28.8 23.2-52.2 52-52.5l0-4c0-11 9-20 20-20z\"]\n};\nvar faMagnifyingGlassLocation = {\n  prefix: 'fas',\n  iconName: 'magnifying-glass-location',\n  icon: [512, 512, [\"search-location\"], \"f689\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376C296.3 401.1 253.9 416 208 416 93.1 416 0 322.9 0 208S93.1 0 208 0 416 93.1 416 208zM288 176c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 48.8 46.5 111.6 68.6 138.6 6 7.3 16.8 7.3 22.7 0 22.1-27 68.6-89.8 68.6-138.6zm-112 0a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nvar faSearchLocation = faMagnifyingGlassLocation;\nvar faFileInvoice = {\n  prefix: 'fas',\n  iconName: 'file-invoice',\n  icon: [384, 512, [], \"f570\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-277.5c0-17-6.7-33.3-18.7-45.3L258.7 18.7C246.7 6.7 230.5 0 213.5 0L64 0zM325.5 176L232 176c-13.3 0-24-10.7-24-24L208 58.5 325.5 176zM64 384l0-64c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32L96 416c-17.7 0-32-14.3-32-32zM88 64l48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24S74.7 64 88 64zm0 96l48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nvar faPentagon = {\n  prefix: 'fas',\n  iconName: 'pentagon',\n  icon: [576, 512, [], \"e790\", \"M316.4-3.1c-16.8-12.2-39.6-12.2-56.4 0L35.3 160.2c-16.8 12.2-23.9 33.9-17.4 53.7l85.8 264.1c6.4 19.8 24.9 33.2 45.7 33.2l277.7 0c20.8 0 39.2-13.4 45.7-33.2l85.8-264.1c6.4-19.8-.6-41.4-17.4-53.7L316.4-3.1z\"]\n};\nvar faRepublican = {\n  prefix: 'fas',\n  iconName: 'republican',\n  icon: [640, 512, [], \"f75e\", \"M0 192C0 103.6 71.6 32 160 32l224 0c88.4 0 160 71.6 160 160l0 64-544 0 0-64zm152-32a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm232 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM280 160a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM128 288l416 0 0 112c0 8.8 7.2 16 16 16s16-7.2 16-16l0-48c0-17.7 14.3-32 32-32s32 14.3 32 32l0 48c0 44.2-35.8 80-80 80s-80-35.8-80-80l0-48-32 0 0 96c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-64-192 0 0 64c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-160 128 0z\"]\n};\nvar faShop = {\n  prefix: 'fas',\n  iconName: 'shop',\n  icon: [576, 512, [\"store-alt\"], \"f54f\", \"M21.5 181.1L78.3 67.4C89.2 45.7 111.3 32 135.6 32l304.9 0c24.2 0 46.4 13.7 57.2 35.4l56.8 113.7c3.6 7.2 5.5 15.1 5.5 23.2 0 27.3-21.2 49.7-48 51.6L512 448c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-192-96 0 0 176c0 26.5-21.5 48-48 48l-192 0c-26.5 0-48-21.5-48-48l0-176.1c-26.8-1.9-48-24.3-48-51.6 0-8 1.9-16 5.5-23.2zM128 256l0 112c0 8.8 7.2 16 16 16l128 0c8.8 0 16-7.2 16-16l0-112-160 0z\"]\n};\nvar faStoreAlt = faShop;\nvar faFilm = {\n  prefix: 'fas',\n  iconName: 'film',\n  icon: [448, 512, [127902, 62368, \"film-alt\", \"film-simple\"], \"f008\", \"M0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM48 368l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm304-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM48 240l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm304-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM48 112l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16L64 96c-8.8 0-16 7.2-16 16zM352 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0z\"]\n};\nvar faFilmAlt = faFilm;\nvar faFilmSimple = faFilm;\nvar faBuildingCircleXmark = {\n  prefix: 'fas',\n  iconName: 'building-circle-xmark',\n  icon: [576, 512, [], \"e4d4\", \"M96 0C60.7 0 32 28.7 32 64l0 384c0 35.3 28.7 64 64 64l180 0c-10.5-14.6-19-30.7-25.1-48l-74.9 0 0-80c0-17.7 14.3-32 32-32l32 0c2 0 4 .2 5.9 .5 6-23.6 16.3-45.4 30.1-64.5l-4 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 4c27.5-19.8 60.3-32.4 96-35.4L416 64c0-35.3-28.7-64-64-64L96 0zm32 112c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM128 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM432 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm22.6-144l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-36.7-36.7-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l36.7-36.7-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l36.7 36.7 36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6L454.6 400z\"]\n};\nvar faComments = {\n  prefix: 'fas',\n  iconName: 'comments',\n  icon: [576, 512, [128490, 61670], \"f086\", \"M384 144c0 97.2-86 176-192 176-26.7 0-52.1-5-75.2-14L35.2 349.2c-9.3 4.9-20.7 3.2-28.2-4.2s-9.2-18.9-4.2-28.2l35.6-67.2C14.3 220.2 0 183.6 0 144 0 46.8 86-32 192-32S384 46.8 384 144zm0 368c-94.1 0-172.4-62.1-188.8-144 120-1.5 224.3-86.9 235.8-202.7 83.3 19.2 145 88.3 145 170.7 0 39.6-14.3 76.2-38.4 105.6l35.6 67.2c4.9 9.3 3.2 20.7-4.2 28.2s-18.9 9.2-28.2 4.2L459.2 498c-23.1 9-48.5 14-75.2 14z\"]\n};\nvar faTags = {\n  prefix: 'fas',\n  iconName: 'tags',\n  icon: [576, 512, [], \"f02c\", \"M401.2 39.1L549.4 189.4c27.7 28.1 27.7 73.1 0 101.2L393 448.9c-9.3 9.4-24.5 9.5-33.9 .2s-9.5-24.5-.2-33.9L515.3 256.8c9.2-9.3 9.2-24.4 0-33.7L367 72.9c-9.3-9.4-9.2-24.6 .2-33.9s24.6-9.2 33.9 .2zM32.1 229.5L32.1 96c0-35.3 28.7-64 64-64l133.5 0c17 0 33.3 6.7 45.3 18.7l144 144c25 25 25 65.5 0 90.5L285.4 418.7c-25 25-65.5 25-90.5 0l-144-144c-12-12-18.7-28.3-18.7-45.3zm144-85.5a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nvar faGun = {\n  prefix: 'fas',\n  iconName: 'gun',\n  icon: [576, 512, [], \"e19b\", \"M528 56c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 8-448 0C14.3 64 0 78.3 0 96L0 208c0 17.7 14.3 32 32 32l10 0c20.8 0 36.1 19.6 31 39.8L33 440.2c-2.4 9.6-.2 19.7 5.8 27.5S54.1 480 64 480l96 0c14.7 0 27.5-10 31-24.2L217 352 321.4 352c23.7 0 44.8-14.9 52.7-37.2l26.7-74.8 31.1 0c8.5 0 16.6-3.4 22.6-9.4l22.6-22.6 66.7 0c17.7 0 32-14.3 32-32l0-80c0-17.7-14.3-32-32-32l-16 0 0-8zM321.4 304l-92.5 0 16-64 105 0-21 58.7c-1.1 3.2-4.2 5.3-7.5 5.3zM80 128l384 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L80 160c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nvar faCircleCheck = {\n  prefix: 'fas',\n  iconName: 'circle-check',\n  icon: [512, 512, [61533, \"check-circle\"], \"f058\", \"M256 512a256 256 0 1 1 0-512 256 256 0 1 1 0 512zM374 145.7c-10.7-7.8-25.7-5.4-33.5 5.3L221.1 315.2 169 263.1c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l72 72c5 5 11.8 7.5 18.8 7s13.4-4.1 17.5-9.8L379.3 179.2c7.8-10.7 5.4-25.7-5.3-33.5z\"]\n};\nvar faCheckCircle = faCircleCheck;\nvar faScorpio = {\n  prefix: 'fas',\n  iconName: 'scorpio',\n  icon: [640, 512, [], \"e84e\", \"M368 32c61.9 0 112 50.1 112 112l0 289.7c0 7.9 6.4 14.3 14.3 14.3 3.9 0 7.6-1.6 10.2-4.3l40.1-41.1-9.7-9.7c-6.9-6.9-8.9-17.2-5.2-26.2S542.3 352 552 352l64 0 2.5 .1c12.1 1.2 21.5 11.5 21.5 23.9l0 64-.3 3.6c-1.2 8.2-6.7 15.3-14.5 18.6-9 3.7-19.3 1.6-26.2-5.2l-9.1-9.1-39.6 40.6c-14.7 15.1-34.9 23.6-56 23.6-43.3 0-78.3-35.1-78.3-78.3L416 144c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 304c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-304c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 304c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-320c0-16.6-12.6-30.2-28.7-31.8l-6.6-.3C44.6 94.2 32 80.6 32 64 32 46.3 46.3 32 64 32 91 32 115.3 43.1 132.7 61 152.6 43 179 32 208 32 239.3 32 267.7 44.9 288 65.7 308.3 44.9 336.6 32 368 32z\"]\n};\nvar faIdCardClip = {\n  prefix: 'fas',\n  iconName: 'id-card-clip',\n  icon: [576, 512, [\"id-card-alt\"], \"f47f\", \"M256-32l64 0c17.7 0 32 14.3 32 32l0 64-128 0 0-64c0-17.7 14.3-32 32-32zM64 32l112 0 0 32c0 26.5 21.5 48 48 48l128 0c26.5 0 48-21.5 48-48l0-32 112 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32zM176 400c0 8.8 7.2 16 16 16l192 0c8.8 0 16-7.2 16-16 0-44.2-35.8-80-80-80l-64 0c-44.2 0-80 35.8-80 80zM288 280a56 56 0 1 0 0-112 56 56 0 1 0 0 112z\"]\n};\nvar faIdCardAlt = faIdCardClip;\nvar faMoon = {\n  prefix: 'fas',\n  iconName: 'moon',\n  icon: [512, 512, [127769, 9214], \"f186\", \"M256 0C114.6 0 0 114.6 0 256S114.6 512 256 512c68.8 0 131.3-27.2 177.3-71.4 7.3-7 9.4-17.9 5.3-27.1s-13.7-14.9-23.8-14.1c-4.9 .4-9.8 .6-14.8 .6-101.6 0-184-82.4-184-184 0-72.1 41.5-134.6 102.1-164.8 9.1-4.5 14.3-14.3 13.1-24.4S322.6 8.5 312.7 6.3C294.4 2.2 275.4 0 256 0z\"]\n};\nvar faOilWell = {\n  prefix: 'fas',\n  iconName: 'oil-well',\n  icon: [576, 512, [], \"e532\", \"M528.3 61.3c-11.4-42.7-55.3-68-98-56.6L414.9 8.8C397.8 13.4 387.7 31 392.3 48l24.5 91.4-108.2 28.1-6.3-18.1C297.7 136.6 285.6 128 272 128s-25.7 8.6-30.2 21.4l-13.6 39-132.2 34.3 0-38.6c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 264-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-137.3 0-61.4-175.4-62.2 16.1 22.1 63.2-66.6 0 19.9-56.9-74.6 19.3-46.7 133.5-41.3 0 0-159.2 337.4-87.5 25.2 94c4.6 17.1 22.1 27.2 39.2 22.6l15.5-4.1c42.7-11.4 68-55.3 56.6-98L528.3 61.3zM205.1 448l16.8-48 100.2 0 16.8 48-133.8 0z\"]\n};\nvar faTachographDigital = {\n  prefix: 'fas',\n  iconName: 'tachograph-digital',\n  icon: [576, 512, [\"digital-tachograph\"], \"f566\", \"M0 128C0 92.7 28.7 64 64 64l448 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128zm64 32l0 32c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-32c0-17.7-14.3-32-32-32L96 128c-17.7 0-32 14.3-32 32zM88 352c-13.3 0-24 10.7-24 24s10.7 24 24 24l136 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L88 352zm256 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0zM496 192a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zM88 312a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm104-24a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm56 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nvar faDigitalTachograph = faTachographDigital;\nvar faTablet = {\n  prefix: 'fas',\n  iconName: 'tablet',\n  icon: [448, 512, [\"tablet-android\"], \"f3fb\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L64 0zM184 400l80 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nvar faTabletAndroid = faTablet;\nvar faRubleSign = {\n  prefix: 'fas',\n  iconName: 'ruble-sign',\n  icon: [448, 512, [8381, \"rouble\", \"rub\", \"ruble\"], \"f158\", \"M112 32C94.3 32 80 46.3 80 64l0 208-40 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l40 0 0 48-40 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l40 0 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 152 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-152 0 0-48 112 0c79.5 0 144-64.5 144-144S335.5 32 256 32L112 32zM256 256l-112 0 0-160 112 0c44.2 0 80 35.8 80 80s-35.8 80-80 80z\"]\n};\nvar faRouble = faRubleSign;\nvar faRub = faRubleSign;\nvar faRuble = faRubleSign;\nvar faClosedCaptioning = {\n  prefix: 'fas',\n  iconName: 'closed-captioning',\n  icon: [512, 512, [], \"f20a\", \"M0 128C0 92.7 28.7 64 64 64l384 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128zm152 80l32 0c4.4 0 8 3.6 8 8 0 13.3 10.7 24 24 24s24-10.7 24-24c0-30.9-25.1-56-56-56l-32 0c-30.9 0-56 25.1-56 56l0 80c0 30.9 25.1 56 56 56l32 0c30.9 0 56-25.1 56-56 0-13.3-10.7-24-24-24s-24 10.7-24 24c0 4.4-3.6 8-8 8l-32 0c-4.4 0-8-3.6-8-8l0-80c0-4.4 3.6-8 8-8zm168 8c0-4.4 3.6-8 8-8l32 0c4.4 0 8 3.6 8 8 0 13.3 10.7 24 24 24s24-10.7 24-24c0-30.9-25.1-56-56-56l-32 0c-30.9 0-56 25.1-56 56l0 80c0 30.9 25.1 56 56 56l32 0c30.9 0 56-25.1 56-56 0-13.3-10.7-24-24-24s-24 10.7-24 24c0 4.4-3.6 8-8 8l-32 0c-4.4 0-8-3.6-8-8l0-80z\"]\n};\nvar faPen = {\n  prefix: 'fas',\n  iconName: 'pen',\n  icon: [512, 512, [128394], \"f304\", \"M352.9 21.2L308 66.1 445.9 204 490.8 159.1C504.4 145.6 512 127.2 512 108s-7.6-37.6-21.2-51.1L455.1 21.2C441.6 7.6 423.2 0 404 0s-37.6 7.6-51.1 21.2zM274.1 100L58.9 315.1c-10.7 10.7-18.5 24.1-22.6 38.7L.9 481.6c-2.3 8.3 0 17.3 6.2 23.4s15.1 8.5 23.4 6.2l127.8-35.5c14.6-4.1 27.9-11.8 38.7-22.6L412 237.9 274.1 100z\"]\n};\nvar faPlane = {\n  prefix: 'fas',\n  iconName: 'plane',\n  icon: [576, 512, [], \"f072\", \"M520 200c30.9 0 56 25.1 56 56s-25.1 56-56 56l-127.3 0-159.2 173.6c-6.1 6.6-14.6 10.4-23.6 10.4l-43.7 0c-10.9 0-18.6-10.7-15.2-21.1l54.3-162.9-99.7 0-52.8 66c-3 3.8-7.6 6-12.5 6l-19.8 0c-10.4 0-18-9.8-15.5-19.9L32 256 5 147.9C2.4 137.8 10.1 128 20.5 128l19.8 0c4.9 0 9.5 2.2 12.5 6l52.8 66 99.7 0-54.3-162.9C147.6 26.7 155.3 16 166.2 16l43.7 0c9 0 17.5 3.8 23.6 10.4L392.7 200 520 200z\"]\n};\nvar faImages = {\n  prefix: 'fas',\n  iconName: 'images',\n  icon: [576, 512, [], \"f302\", \"M96 96c0-35.3 28.7-64 64-64l320 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64l-320 0c-35.3 0-64-28.7-64-64L96 96zM24 128c13.3 0 24 10.7 24 24l0 296c0 8.8 7.2 16 16 16l360 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L64 512c-35.3 0-64-28.7-64-64L0 152c0-13.3 10.7-24 24-24zm168 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm196.5 11.5c-4.4-7.1-12.1-11.5-20.5-11.5s-16.1 4.4-20.5 11.5l-56.3 92.1-24.5-30.6c-4.6-5.7-11.4-9-18.7-9s-14.2 3.3-18.7 9l-64 80c-5.8 7.2-6.9 17.1-2.9 25.4S174.8 352 184 352l272 0c8.7 0 16.7-4.7 20.9-12.3s4.1-16.8-.5-24.3l-88-144z\"]\n};\nvar faMobileScreen = {\n  prefix: 'fas',\n  iconName: 'mobile-screen',\n  icon: [384, 512, [\"mobile-android-alt\"], \"f3cf\", \"M16 64C16 28.7 44.7 0 80 0L304 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L80 512c-35.3 0-64-28.7-64-64L16 64zM128 440c0 13.3 10.7 24 24 24l80 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-80 0c-13.3 0-24 10.7-24 24zM304 64l-224 0 0 304 224 0 0-304z\"]\n};\nvar faMobileAndroidAlt = faMobileScreen;\nvar faGuaraniSign = {\n  prefix: 'fas',\n  iconName: 'guarani-sign',\n  icon: [384, 512, [], \"e19a\", \"M192 0c-13.3 0-24 10.7-24 24l0 41.5C73.3 77.3 0 158.1 0 256S73.3 434.7 168 446.5l0 41.5c0 13.3 10.7 24 24 24s24-10.7 24-24l0-41.5c94.7-11.8 168-92.6 168-190.5 0-17.7-14.3-32-32-32l-136 0 0-93.8c25.3 4.8 47.9 17 65.6 34.3 12.6 12.4 32.9 12.2 45.3-.4s12.2-32.9-.5-45.3C297.2 90.2 258.8 70.8 216 65.5L216 24c0-13.3-10.7-24-24-24zM168 130.2l0 251.5C108.8 370.5 64 318.5 64 256s44.8-114.5 104-125.8zm48 251.5l0-93.8 100 0c-12.3 47.6-51.2 84.5-100 93.8z\"]\n};\nvar faBagShopping = {\n  prefix: 'fas',\n  iconName: 'bag-shopping',\n  icon: [448, 512, [\"shopping-bag\"], \"f290\", \"M160 80c0-35.3 28.7-64 64-64s64 28.7 64 64l0 48-128 0 0-48zm-48 48l-64 0c-26.5 0-48 21.5-48 48L0 384c0 53 43 96 96 96l256 0c53 0 96-43 96-96l0-208c0-26.5-21.5-48-48-48l-64 0 0-48c0-61.9-50.1-112-112-112S112 18.1 112 80l0 48zm24 48a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm152 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nvar faShoppingBag = faBagShopping;\nvar faCircleRight = {\n  prefix: 'fas',\n  iconName: 'circle-right',\n  icon: [512, 512, [61838, \"arrow-alt-circle-right\"], \"f35a\", \"M0 256a256 256 0 1 0 512 0 256 256 0 1 0 -512 0zm387.3 11.3l-104 104c-4.6 4.6-11.5 5.9-17.4 3.5S256 366.5 256 360l0-56-96 0c-17.7 0-32-14.3-32-32l0-32c0-17.7 14.3-32 32-32l96 0 0-56c0-6.5 3.9-12.3 9.9-14.8s12.9-1.1 17.4 3.5l104 104c6.2 6.2 6.2 16.4 0 22.6z\"]\n};\nvar faArrowAltCircleRight = faCircleRight;\nvar faPhoneVolume = {\n  prefix: 'fas',\n  iconName: 'phone-volume',\n  icon: [576, 512, [\"volume-control-phone\"], \"f2a0\", \"M344-32c128.1 0 232 103.9 232 232 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-101.6-82.4-184-184-184-13.3 0-24-10.7-24-24s10.7-24 24-24zm8 192a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM320 88c0-13.3 10.7-24 24-24 75.1 0 136 60.9 136 136 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-48.6-39.4-88-88-88-13.3 0-24-10.7-24-24zM144.1 1.4c19.7-5.4 40.3 4.7 48.1 23.5l40.5 97.3c6.9 16.5 2.1 35.6-11.8 47l-44.1 36.1c32.5 71.6 89 130 159.3 164.9L374.7 323c11.3-13.9 30.4-18.6 47-11.8L519 351.8c18.8 7.8 28.9 28.4 23.5 48.1l-1.5 5.5C523.4 470.1 460.9 525.3 384.6 509.2 209.6 472.1 71.9 334.4 34.8 159.4 18.7 83.1 73.9 20.6 138.5 2.9l5.5-1.5z\"]\n};\nvar faVolumeControlPhone = faPhoneVolume;\nvar faCubes = {\n  prefix: 'fas',\n  iconName: 'cubes',\n  icon: [512, 512, [], \"f1b3\", \"M284-1.3c-17.3-10-38.7-10-56 0L143.8 47.3c-17.3 10-28 28.5-28 48.5l0 101.9-88.3 51c-17.3 10-28 28.5-28 48.5l0 97.3c0 20 10.7 38.5 28 48.5l84.3 48.6c17.3 10 38.7 10 56 0l88.3-51 88.3 51c17.3 10 38.7 10 56 0L484.5 443c17.3-10 28-28.5 28-48.5l0-97.3c0-20-10.7-38.5-28-48.5l-88.3-51 0-101.9c0-20-10.7-38.5-28-48.5L284-1.3zM232 292.6l0 106.5-88.3 51c-1.2 .7-2.6 1.1-4 1.1l0-105.3 92.3-53.3zm231.4 .6c.7 1.2 1.1 2.6 1.1 4l0 97.3c0 2.9-1.5 5.5-4 6.9l-84.3 48.6c-1.2 .7-2.6 1.1-4 1.1l0-105.3 91.2-52.6zM348.3 95.8l0 101.9-92.3 53.3 0-106.5 91.2-52.6c.7 1.2 1.1 2.6 1.1 4z\"]\n};\nvar faPhone = {\n  prefix: 'fas',\n  iconName: 'phone',\n  icon: [512, 512, [128222, 128379], \"f095\", \"M160.2 25C152.3 6.1 131.7-3.9 112.1 1.4l-5.5 1.5c-64.6 17.6-119.8 80.2-103.7 156.4 37.1 175 174.8 312.7 349.8 349.8 76.3 16.2 138.8-39.1 156.4-103.7l1.5-5.5c5.4-19.7-4.7-40.3-23.5-48.1l-97.3-40.5c-16.5-6.9-35.6-2.1-47 11.8l-38.6 47.2C233.9 335.4 177.3 277 144.8 205.3L189 169.3c13.9-11.3 18.6-30.4 11.8-47L160.2 25z\"]\n};\nvar faToriiGate = {\n  prefix: 'fas',\n  iconName: 'torii-gate',\n  icon: [448, 512, [9961], \"f6a1\", \"M0 96L0 28.5C0 21.6 5.6 16 12.5 16 14.8 16 17 16.6 19 17.8L58 41.2C82.9 56.1 111.3 64 140.3 64l167.4 0c29 0 57.5-7.9 82.3-22.8l39-23.4c1.9-1.2 4.2-1.8 6.4-1.8 6.9 0 12.5 5.6 12.5 12.5L448 96c0 35.3-28.7 64-64 64l0 64 16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-16 0 0 192c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-192-192 0 0 192c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-192-16 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-64C28.7 160 0 131.3 0 96zM128 224l64 0 0-64-64 0 0 64zm128 0l64 0 0-64-64 0 0 64z\"]\n};\nvar faBacon = {\n  prefix: 'fas',\n  iconName: 'bacon',\n  icon: [576, 512, [129363], \"f7e5\", \"M557 96.7c14.4 14.4 12.4 38.4-4.3 50.2l-64.6 45.7c-43.7 30.9-79.2 71.9-103.4 119.6l-25.3 49.8c-25.1 49.3-62.1 91.5-107.8 122.6l-74.1 50.6c-13.1 8.9-30.7 7.3-41.8-3.9l-44.9-44.9 86.5-66.5c42.3-32.5 76.7-74.3 100.6-122l24.5-49.1c24.5-49 61.8-90.6 107.9-120.2l108.7-69.9 38 38zM484.2 23.9L384.3 88.2c-53.4 34.3-96.5 82.4-124.9 139.1l-24.5 49.1c-20.6 41.3-50.3 77.3-86.9 105.4l-91.4 70.3-36.9-36.9c-14.4-14.4-12.4-38.4 4.3-50.2l64.6-45.7c43.7-30.9 79.2-71.9 103.4-119.6l25.3-49.8C242.3 100.8 279.3 58.6 325 27.4l74.1-50.6c13.1-8.9 30.6-7.3 41.8 3.9l43.3 43.3z\"]\n};\nvar faPersonFallingBurst = {\n  prefix: 'fas',\n  iconName: 'person-falling-burst',\n  icon: [576, 512, [], \"e547\", \"M256 0c17.7 0 32 14.3 32 32l0 5.4c0 55.2-23.7 107-63.9 143.1l62.9 75.5 89 0c15.1 0 29.3 7.1 38.4 19.2l43.2 57.6c10.6 14.1 7.7 34.2-6.4 44.8s-34.2 7.7-44.8-6.4L368 320 263.2 320 376.8 459.8c11.1 13.7 9.1 33.9-4.7 45s-33.9 9.1-45-4.7L137.4 266.6c-6.1 15-9.4 31.3-9.4 48l0 69.4c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-69.4c0-67.4 35.4-129.9 93.2-164.6l4.6-2.8C200.4 124 224 82.4 224 37.4l0-5.4c0-17.7 14.3-32 32-32zM16 88A56 56 0 1 1 128 88 56 56 0 1 1 16 88zm376-7.9c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24s24 10.7 24 24l0 48zm104 152c-13.3 0-24-10.7-24-24s10.7-24 24-24l48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-48 0zm-54.5-97.5c-9.4-9.4-9.4-24.6 0-33.9l33.9-33.9c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-33.9 33.9c-9.4 9.4-24.6 9.4-33.9 0z\"]\n};\nvar faQuoteRight = {\n  prefix: 'fas',\n  iconName: 'quote-right',\n  icon: [448, 512, [8221, \"quote-right-alt\"], \"f10e\", \"M448 296c0 66.3-53.7 120-120 120l-8 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l8 0c30.9 0 56-25.1 56-56l0-8-64 0c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l64 0c35.3 0 64 28.7 64 64l0 136zm-256 0c0 66.3-53.7 120-120 120l-8 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l8 0c30.9 0 56-25.1 56-56l0-8-64 0c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l64 0c35.3 0 64 28.7 64 64l0 136z\"]\n};\nvar faQuoteRightAlt = faQuoteRight;\nvar faHouseMedicalFlag = {\n  prefix: 'fas',\n  iconName: 'house-medical-flag',\n  icon: [640, 512, [], \"e514\", \"M480 0c17.7 0 32 14.3 32 32l96 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-96 0 0 288c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-448c0-17.7 14.3-32 32-32zM267.5 59.1L400 186.9 400 503.4c-9.4 5.4-20.3 8.6-32 8.6l-256 0c-35.3 0-64-28.7-64-64l0-144-19.9 0C12.6 304 0 291.4 0 275.9 0 268.3 3.1 261 8.6 255.7L212.5 59.1C219.9 52 229.7 48 240 48s20.1 4 27.5 11.1zM204.8 256.8l0 44-44 0c-9.7 0-17.6 7.9-17.6 17.6l0 35.2c0 9.7 7.9 17.6 17.6 17.6l44 0 0 44c0 9.7 7.9 17.6 17.6 17.6l35.2 0c9.7 0 17.6-7.9 17.6-17.6l0-44 44 0c9.7 0 17.6-7.9 17.6-17.6l0-35.2c0-9.7-7.9-17.6-17.6-17.6l-44 0 0-44c0-9.7-7.9-17.6-17.6-17.6l-35.2 0c-9.7 0-17.6 7.9-17.6 17.6z\"]\n};\nvar faPrescription = {\n  prefix: 'fas',\n  iconName: 'prescription',\n  icon: [448, 512, [], \"f5b1\", \"M32 0C14.3 0 0 14.3 0 32L0 288c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 50.7 0 128 128-105.4 105.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L288 397.3 393.4 502.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L333.3 352 438.6 246.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 306.7 202.2 220.9C251.4 209.1 288 164.8 288 112 288 50.1 237.9 0 176 0L32 0zM176 160l-112 0 0-96 112 0c26.5 0 48 21.5 48 48s-21.5 48-48 48z\"]\n};\nvar faDiceThree = {\n  prefix: 'fas',\n  iconName: 'dice-three',\n  icon: [448, 512, [9858], \"f527\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm64 96a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64 128a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm128 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faBuildingLock = {\n  prefix: 'fas',\n  iconName: 'building-lock',\n  icon: [576, 512, [], \"e4d6\", \"M32 64C32 28.7 60.7 0 96 0L352 0c35.3 0 64 28.7 64 64l0 121.3c-46.9 19-80 65-80 118.7l0 24.4c-19.6 17.6-32 43.1-32 71.5l0 96c0 5.5 .5 10.9 1.3 16.1L96 512c-35.3 0-64-28.7-64-64L32 64zM176 384l0 80 80 0 0-64.1c0-13.7 1.9-27 5.5-39.6-5.7-5.2-13.2-8.3-21.5-8.3l-32 0c-17.7 0-32 14.3-32 32zM307 224.3c-1-.2-2-.3-3-.3l-32 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l16.7 0c2.1-22.8 8.4-44.3 18.3-63.7zM144 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm112 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM144 224c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm352 80.1c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 47.9 64 0 0-47.9zM352 400c0-20.9 13.4-38.7 32-45.3l0-50.6c0-44.2 35.8-80 80-80s80 35.8 80 80l0 50.6c18.6 6.6 32 24.4 32 45.3l0 96c0 26.5-21.5 48-48 48l-128 0c-26.5 0-48-21.5-48-48l0-96z\"]\n};\nvar faIdCard = {\n  prefix: 'fas',\n  iconName: 'id-card',\n  icon: [576, 512, [62147, \"drivers-license\"], \"f2c2\", \"M0 96C0 60.7 28.7 32 64 32l448 0c35.3 0 64 28.7 64 64L0 96zm0 48l576 0 0 272c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 144zM247.3 416c20.2 0 35.3-19.4 22.4-35-14.7-17.7-36.9-29-61.7-29l-64 0c-24.8 0-47 11.3-61.7 29-12.9 15.6 2.2 35 22.4 35l142.5 0zM176 312a56 56 0 1 0 0-112 56 56 0 1 0 0 112zM360 208c-13.3 0-24 10.7-24 24s10.7 24 24 24l112 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-112 0zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l112 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-112 0z\"]\n};\nvar faDriversLicense = faIdCard;\nvar faCirclePlay = {\n  prefix: 'fas',\n  iconName: 'circle-play',\n  icon: [512, 512, [61469, \"play-circle\"], \"f144\", \"M0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zM188.3 147.1c-7.6 4.2-12.3 12.3-12.3 20.9l0 176c0 8.7 4.7 16.7 12.3 20.9s16.8 4.1 24.3-.5l144-88c7.1-4.4 11.5-12.1 11.5-20.5s-4.4-16.1-11.5-20.5l-144-88c-7.4-4.5-16.7-4.7-24.3-.5z\"]\n};\nvar faPlayCircle = faCirclePlay;\nvar faFaceLaughBeam = {\n  prefix: 'fas',\n  iconName: 'face-laugh-beam',\n  icon: [512, 512, [128513, \"laugh-beam\"], \"f59a\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM101.6 314c-3.7-13.7 7.5-26 21.7-26l265.4 0c14.2 0 25.4 12.3 21.7 26-18.5 68-80.6 118-154.4 118S120 382 101.6 314zM176 164c-15.5 0-28 12.5-28 28l0 8c0 11-9 20-20 20s-20-9-20-20l0-8c0-37.6 30.4-68 68-68s68 30.4 68 68l0 8c0 11-9 20-20 20s-20-9-20-20l0-8c0-15.5-12.5-28-28-28zm132 28l0 8c0 11-9 20-20 20s-20-9-20-20l0-8c0-37.6 30.4-68 68-68s68 30.4 68 68l0 8c0 11-9 20-20 20s-20-9-20-20l0-8c0-15.5-12.5-28-28-28s-28 12.5-28 28z\"]\n};\nvar faLaughBeam = faFaceLaughBeam;\nvar faLeaf = {\n  prefix: 'fas',\n  iconName: 'leaf',\n  icon: [512, 512, [], \"f06c\", \"M471.3 6.7C477.7 .6 487-1.6 495.6 1.2 505.4 4.5 512 13.7 512 24l0 186.9c0 131.2-108.1 237.1-238.8 237.1-77 0-143.4-49.5-167.5-118.7-35.4 30.8-57.7 76.1-57.7 126.7 0 13.3-10.7 24-24 24S0 469.3 0 456C0 381.1 38.2 315.1 96.1 276.3 131.4 252.7 173.5 240 216 240l80 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-80 0c-39.7 0-77.3 8.8-111 24.5 23.3-70 89.2-120.5 167-120.5 66.4 0 115.8-22.1 148.7-44 19.2-12.8 35.5-28.1 50.7-45.3z\"]\n};\nvar faHouseChimneyUser = {\n  prefix: 'fas',\n  iconName: 'house-chimney-user',\n  icon: [512, 512, [], \"e065\", \"M234.2 8.6c12.3-11.4 31.3-11.4 43.5 0L368 92.3 368 80c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 101.5 37.8 35.1c9.6 9 12.8 22.9 8 35.1S493.2 272 480 272l-16 0 0 176c0 35.3-28.7 64-64 64l-288 0c-35.3 0-64-28.7-64-64l0-176-16 0c-13.2 0-25-8.1-29.8-20.3s-1.6-26.2 8-35.1l224-208zM312 256a56 56 0 1 0 -112 0 56 56 0 1 0 112 0zM144 432c0 8.8 7.2 16 16 16l192 0c8.8 0 16-7.2 16-16 0-44.2-35.8-80-80-80l-64 0c-44.2 0-80 35.8-80 80z\"]\n};\nvar faRotateRight = {\n  prefix: 'fas',\n  iconName: 'rotate-right',\n  icon: [512, 512, [\"redo-alt\", \"rotate-forward\"], \"f2f9\", \"M488 192l-144 0c-9.7 0-18.5-5.8-22.2-14.8s-1.7-19.3 5.2-26.2l46.7-46.7c-75.3-58.6-184.3-53.3-253.5 15.9-75 75-75 196.5 0 271.5s196.5 75 271.5 0c8.2-8.2 15.5-16.9 21.9-26.1 10.1-14.5 30.1-18 44.6-7.9s18 30.1 7.9 44.6c-8.5 12.2-18.2 23.8-29.1 34.7-100 100-262.1 100-362 0S-25 175 75 75c94.3-94.3 243.7-99.6 344.3-16.2L471 7c6.9-6.9 17.2-8.9 26.2-5.2S512 14.3 512 24l0 144c0 13.3-10.7 24-24 24z\"]\n};\nvar faRedoAlt = faRotateRight;\nvar faRotateForward = faRotateRight;\nvar faTooth = {\n  prefix: 'fas',\n  iconName: 'tooth',\n  icon: [448, 512, [129463], \"f5c9\", \"M145 5.7L224 32 303 5.7C314.3 1.9 326 0 337.9 0 398.7 0 448 49.3 448 110.1l0 68.5c0 29.4-9.5 58.1-27.2 81.6l-1.1 1.5c-12.9 17.2-21.3 37.4-24.3 58.7L373.7 471.9c-3.3 23-23 40.1-46.2 40.1-22.8 0-42.3-16.5-46-39L261.3 351.6c-3-18.2-18.8-31.6-37.3-31.6s-34.2 13.4-37.3 31.6L166.5 473c-3.8 22.5-23.2 39-46 39-23.2 0-42.9-17.1-46.2-40.1L52.6 320.5c-3-21.3-11.4-41.5-24.3-58.7l-1.1-1.5C9.5 236.7 0 208.1 0 178.7l0-68.5C0 49.3 49.3 0 110.1 0 122 0 133.7 1.9 145 5.7z\"]\n};\nvar faHouseChimneyWindow = {\n  prefix: 'fas',\n  iconName: 'house-chimney-window',\n  icon: [512, 512, [], \"e00d\", \"M234.2 8.6c12.3-11.4 31.3-11.4 43.5 0L368 92.3 368 80c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 101.5 37.8 35.1c9.6 9 12.8 22.9 8 35.1S493.2 272 480 272l-16 0 0 176c0 35.3-28.7 64-64 64l-288 0c-35.3 0-64-28.7-64-64l0-176-16 0c-13.2 0-25-8.1-29.8-20.3s-1.6-26.2 8-35.1l224-208zM216 224c-13.3 0-24 10.7-24 24l0 80c0 13.3 10.7 24 24 24l80 0c13.3 0 24-10.7 24-24l0-80c0-13.3-10.7-24-24-24l-80 0z\"]\n};\nvar faMotorcycle = {\n  prefix: 'fas',\n  iconName: 'motorcycle',\n  icon: [640, 512, [127949], \"f21c\", \"M280 16c-13.3 0-24 10.7-24 24s10.7 24 24 24l56.6 0 22.5 48.7-95.1 71.3c-33.4-25.1-75-40-120-40l-56 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l56 0c78.5 0 143.2 59.6 151.2 136l-25.4 0c-11.2-59.2-63.3-104-125.8-104-70.7 0-128 57.3-128 128S73.3 480 144 480c62.5 0 114.5-44.8 125.8-104l50.2 0c13.3 0 24-10.7 24-24l0-22.5c0-45.1 25.7-85.4 65.5-107.7l12.1 26.1c-32.4 23.2-53.5 61.2-53.5 104.1 0 70.7 57.3 128 128 128s128-57.3 128-128-57.3-128-128-128c-10.7 0-21 1.3-30.9 3.8L433.8 160 488 160c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-53.3 0c-6.9 0-13.7 2.2-19.2 6.4l-17.1 12.8-24.6-53.3C369.9 21.4 361.4 16 352 16l-72 0zM445.8 300.4l28.4 61.6c5.6 12 19.8 17.3 31.8 11.7s17.3-19.8 11.7-31.8l-28.5-61.6c2.2-.2 4.4-.3 6.7-.3 39.8 0 72 32.2 72 72s-32.2 72-72 72-72-32.2-72-72c0-20.2 8.3-38.5 21.8-51.6zM144 424c-39.8 0-72-32.2-72-72s32.2-72 72-72c31.3 0 58 20 67.9 48L144 328c-13.3 0-24 10.7-24 24s10.7 24 24 24l67.9 0c-9.9 28-36.6 48-67.9 48z\"]\n};\nvar faBackwardFast = {\n  prefix: 'fas',\n  iconName: 'backward-fast',\n  icon: [512, 512, [9198, \"fast-backward\"], \"f049\", \"M492.2 477.6c-12 5-25.7 2.2-34.9-6.9L288 301.3 288 448c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9L64 301.3 64 448c0 17.7-14.3 32-32 32S0 465.7 0 448L0 64C0 46.3 14.3 32 32 32S64 46.3 64 64L64 210.7 233.4 41.4c9.2-9.2 22.9-11.9 34.9-6.9S288 51.1 288 64l0 146.7 169.4-169.4c9.2-9.2 22.9-11.9 34.9-6.9S512 51.1 512 64l0 384c0 12.9-7.8 24.6-19.8 29.6z\"]\n};\nvar faFastBackward = faBackwardFast;\nvar faAddressBook = {\n  prefix: 'fas',\n  iconName: 'address-book',\n  icon: [512, 512, [62138, \"contact-book\"], \"f2b9\", \"M96 0C60.7 0 32 28.7 32 64l0 384c0 35.3 28.7 64 64 64l288 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L96 0zM208 288l64 0c44.2 0 80 35.8 80 80 0 8.8-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16 0-44.2 35.8-80 80-80zm-24-96a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zM512 80c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64zm0 128c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64zM496 320c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64c0-8.8-7.2-16-16-16z\"]\n};\nvar faContactBook = faAddressBook;\nvar faSailboat = {\n  prefix: 'fas',\n  iconName: 'sailboat',\n  icon: [512, 512, [], \"e445\", \"M240 35.9l0 348.1-224 0c-8.8 0-16 7.2-16 16 0 61.9 50.1 112 112 112l288 0c61.9 0 112-50.1 112-112 0-8.8-7.2-16-16-16l-208 0 0-48 161.7 0c12.9 0 20.5-14.4 13.2-25L269.2 26.9c-8.9-13-29.2-6.7-29.2 9zM192 320l0-184.2c0-16.1-21-22.1-29.6-8.5L47.3 311.5c-6.7 10.7 1 24.5 13.6 24.5L176 336c8.8 0 16-7.2 16-16z\"]\n};\nvar faBookBookmark = {\n  prefix: 'fas',\n  iconName: 'book-bookmark',\n  icon: [448, 512, [], \"e0bb\", \"M96 512l320 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-66.7c18.6-6.6 32-24.4 32-45.3l0-288c0-26.5-21.5-48-48-48l-48 0 0 169.4c0 12.5-10.1 22.6-22.6 22.6-6 0-11.8-2.4-16-6.6L272 144 230.6 185.4c-4.2 4.2-10 6.6-16 6.6-12.5 0-22.6-10.1-22.6-22.6L192 0 96 0C43 0 0 43 0 96L0 416c0 53 43 96 96 96zM64 416c0-17.7 14.3-32 32-32l256 0 0 64-256 0c-17.7 0-32-14.3-32-32z\"]\n};\nvar faMagnifyingGlassArrowRight = {\n  prefix: 'fas',\n  iconName: 'magnifying-glass-arrow-right',\n  icon: [512, 512, [], \"e521\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376C296.3 401.1 253.9 416 208 416 93.1 416 0 322.9 0 208S93.1 0 208 0 416 93.1 416 208zM305 225c9.4-9.4 9.4-24.6 0-33.9l-72-72c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l31 31-102.1 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l102.1 0-31 31c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l72-72z\"]\n};\nvar faMicrophoneLines = {\n  prefix: 'fas',\n  iconName: 'microphone-lines',\n  icon: [384, 512, [127897, \"microphone-alt\"], \"f3c9\", \"M96 96c0-53 43-96 96-96 50.3 0 91.6 38.7 95.7 88L232 88c-13.3 0-24 10.7-24 24s10.7 24 24 24l56 0 0 48-56 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l55.7 0c-4.1 49.3-45.3 88-95.7 88-53 0-96-43-96-96L96 96zM24 160c13.3 0 24 10.7 24 24l0 40c0 79.5 64.5 144 144 144s144-64.5 144-144l0-40c0-13.3 10.7-24 24-24s24 10.7 24 24l0 40c0 97.9-73.3 178.7-168 190.5l0 49.5 48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l48 0 0-49.5C73.3 402.7 0 321.9 0 224l0-40c0-13.3 10.7-24 24-24z\"]\n};\nvar faMicrophoneAlt = faMicrophoneLines;\nvar faReplyAll = {\n  prefix: 'fas',\n  iconName: 'reply-all',\n  icon: [576, 512, [\"mail-reply-all\"], \"f122\", \"M332.2 18.4c12 5 19.8 16.6 19.8 29.6l0 80 48 0c97.2 0 176 78.8 176 176 0 113.3-81.5 163.9-100.2 174.1-2.5 1.4-5.3 1.9-8.1 1.9-10.9 0-19.7-8.9-19.7-19.7 0-7.5 4.3-14.4 9.8-19.5 9.4-8.8 22.2-26.4 22.2-56.7 0-53-43-96-96-96l-32 0 0 80c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9l-160-160c-12.5-12.5-12.5-32.8 0-45.3l160-160c9.2-9.2 22.9-11.9 34.9-6.9zM205.6 23.1c9.4 9.4 9.4 24.6 0 33.9L54.6 208 205.6 358.9c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L10 231.2c-6.4-6-10-14.4-10-23.2s3.6-17.2 10-23.2L171.6 23.1c9.4-9.4 24.6-9.4 33.9 0z\"]\n};\nvar faMailReplyAll = faReplyAll;\nvar faUniversalAccess = {\n  prefix: 'fas',\n  iconName: 'universal-access',\n  icon: [512, 512, [], \"f29a\", \"M0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zm161.5-86.1c-12.2-5.2-26.3 .4-31.5 12.6s.4 26.3 12.6 31.5l11.9 5.1c17.3 7.4 35.2 12.9 53.6 16.3l0 50.1c0 4.3-.7 8.6-2.1 12.6l-28.7 86.1c-4.2 12.6 2.6 26.2 15.2 30.4s26.2-2.6 30.4-15.2l24.4-73.2c1.3-3.8 4.8-6.4 8.8-6.4s7.6 2.6 8.8 6.4l24.4 73.2c4.2 12.6 17.8 19.4 30.4 15.2S339 397 334.8 384.4l-28.7-86.1c-1.4-4.1-2.1-8.3-2.1-12.6l0-50.1c18.4-3.5 36.3-8.9 53.6-16.3l11.9-5.1c12.2-5.2 17.8-19.3 12.6-31.5s-19.3-17.8-31.5-12.6L338.7 175c-26.1 11.2-54.2 17-82.7 17s-56.5-5.8-82.7-17l-11.9-5.1zM256 160a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"]\n};\nvar faToiletPaper = {\n  prefix: 'fas',\n  iconName: 'toilet-paper',\n  icon: [512, 512, [129531, 63263, \"toilet-paper-alt\", \"toilet-paper-blank\"], \"f71e\", \"M327.1 32c-8.8 11.1-16 23.1-21.9 34.8-21.4 42.7-33.2 98.4-33.2 157.2l0 264c0 30.9-25.1 56-56 56L56 544c-30.9 0-56-25.1-56-56L0 224C0 118 43 32 96 32l231.1 0zM416 416c-53 0-96-86-96-192s43-192 96-192 96 86 96 192-43 192-96 192zm0-128c17.7 0 32-28.7 32-64s-14.3-64-32-64-32 28.7-32 64 14.3 64 32 64z\"]\n};\nvar faToiletPaperAlt = faToiletPaper;\nvar faToiletPaperBlank = faToiletPaper;\nvar faVrCardboard = {\n  prefix: 'fas',\n  iconName: 'vr-cardboard',\n  icon: [576, 512, [], \"f729\", \"M512 96L64 96C28.7 96 0 124.7 0 160L0 352c0 35.3 28.7 64 64 64l117.5 0c17 0 33.3-6.7 45.3-18.7l33.9-33.9c7.2-7.2 17.1-11.3 27.3-11.3s20.1 4.1 27.3 11.3l33.9 33.9c12 12 28.3 18.7 45.3 18.7L512 416c35.3 0 64-28.7 64-64l0-192c0-35.3-28.7-64-64-64zM80 240a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zm352-64a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"]\n};\nvar faPizzaSlice = {\n  prefix: 'fas',\n  iconName: 'pizza-slice',\n  icon: [512, 512, [], \"f818\", \"M169.7 .9c-22.8-1.6-41.9 14-47.5 34.7L112.5 72C293.3 72.3 439.7 218.7 440 399.5l36.4-9.7c20.8-5.5 36.3-24.7 34.7-47.5-12.6-182.8-158.6-328.8-341.4-341.4zm222 411.5c.2-4.1 .3-8.2 .3-12.4 0-154.6-125.4-280-280-280-4.1 0-8.3 .1-12.4 .3L.5 491.9c-1.5 5.5 .1 11.4 4.1 15.4s9.9 5.6 15.4 4.1l371.6-99.1zM176 208a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64 128a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM96 384a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nvar faSprayCan = {\n  prefix: 'fas',\n  iconName: 'spray-can',\n  icon: [576, 512, [], \"f5bd\", \"M192 0l64 0c17.7 0 32 14.3 32 32l0 80-128 0 0-80c0-17.7 14.3-32 32-32zM64 256c0-53 43-96 96-96l128 0c53 0 96 43 96 96l0 208c0 26.5-21.5 48-48 48l-224 0c-26.5 0-48-21.5-48-48l0-208zm240 80a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM320 64a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM448 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM512 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM448 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faVolumeLow = {\n  prefix: 'fas',\n  iconName: 'volume-low',\n  icon: [448, 512, [128264, \"volume-down\"], \"f027\", \"M48 352l48 0 134.1 119.2c6.4 5.7 14.6 8.8 23.1 8.8 19.2 0 34.8-15.6 34.8-34.8l0-378.4c0-19.2-15.6-34.8-34.8-34.8-8.5 0-16.7 3.1-23.1 8.8L96 160 48 160c-26.5 0-48 21.5-48 48l0 96c0 26.5 21.5 48 48 48zM380.6 181.5c-10.3-8.4-25.4-6.8-33.8 3.5s-6.8 25.4 3.5 33.8C361.1 227.6 368 241 368 256s-6.9 28.4-17.7 37.3c-10.3 8.4-11.8 23.5-3.5 33.8s23.5 11.8 33.8 3.5C402.1 312.9 416 286.1 416 256s-13.9-56.9-35.5-74.5z\"]\n};\nvar faVolumeDown = faVolumeLow;\nvar faCross = {\n  prefix: 'fas',\n  iconName: 'cross',\n  icon: [384, 512, [128327, 10013], \"f654\", \"M176 0c-26.5 0-48 21.5-48 48l0 80-80 0c-26.5 0-48 21.5-48 48l0 32c0 26.5 21.5 48 48 48l80 0 0 208c0 26.5 21.5 48 48 48l32 0c26.5 0 48-21.5 48-48l0-208 80 0c26.5 0 48-21.5 48-48l0-32c0-26.5-21.5-48-48-48l-80 0 0-80c0-26.5-21.5-48-48-48L176 0z\"]\n};\nvar faPerson = {\n  prefix: 'fas',\n  iconName: 'person',\n  icon: [384, 512, [129485, \"male\"], \"f183\", \"M248 24a56 56 0 1 0 -112 0 56 56 0 1 0 112 0zm24 212.7l46.3 62.4c10.5 14.2 30.6 17.2 44.8 6.6s17.2-30.6 6.6-44.8l-70.5-95C274 132 234.3 112 192 112s-82 20-107.2 53.9l-70.5 95c-10.5 14.2-7.6 34.2 6.6 44.8s34.2 7.6 44.8-6.6L112 236.7 112 512c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-8.8 7.2-16 16-16s16 7.2 16 16l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-275.3z\"]\n};\nvar faMale = faPerson;\nvar faHourglass = {\n  prefix: 'fas',\n  iconName: 'hourglass',\n  icon: [384, 512, [9203, 62032, \"hourglass-empty\"], \"f254\", \"M0 32C0 14.3 14.3 0 32 0L352 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 11c0 42.4-16.9 83.1-46.9 113.1l-67.9 67.9 67.9 67.9c30 30 46.9 70.7 46.9 113.1l0 11c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-11c0-42.4 16.9-83.1 46.9-113.1l67.9-67.9-67.9-67.9C48.9 158.1 32 117.4 32 75l0-11C14.3 64 0 49.7 0 32zM96 64l0 11c0 25.5 10.1 49.9 28.1 67.9l67.9 67.9 67.9-67.9c18-18 28.1-42.4 28.1-67.9l0-11-192 0zm0 384l192 0 0-11c0-25.5-10.1-49.9-28.1-67.9l-67.9-67.9-67.9 67.9c-18 18-28.1 42.4-28.1 67.9l0 11z\"]\n};\nvar faHourglassEmpty = faHourglass;\nvar faFish = {\n  prefix: 'fas',\n  iconName: 'fish',\n  icon: [576, 512, [128031], \"f578\", \"M180.5 141.5C219.7 108.5 272.6 80 336 80s116.3 28.5 155.5 61.5c39.1 33 66.9 72.4 81 99.8 4.7 9.2 4.7 20.1 0 29.3-14.1 27.4-41.9 66.8-81 99.8-39.2 33.1-92 61.5-155.5 61.5s-116.3-28.5-155.5-61.5c-16.2-13.7-30.5-28.5-42.7-43.1L48.1 379.6c-12.5 7.3-28.4 5.3-38.7-4.9s-12.4-26-5.3-38.6L50 256 4.2 175.9c-7.2-12.6-5-28.4 5.3-38.6s26.1-12.2 38.7-4.9l89.7 52.3c12.2-14.6 26.5-29.4 42.7-43.1zM448 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nvar faDrumstickBite = {\n  prefix: 'fas',\n  iconName: 'drumstick-bite',\n  icon: [512, 512, [], \"f6d7\", \"M160 265.2c0 8.5-3.4 16.6-9.4 22.6l-26.8 26.8c-12.3 12.3-32.5 11.4-49.4 7.2-4.6-1.1-9.5-1.8-14.5-1.8-33.1 0-60 26.9-60 60s26.9 60 60 60c6.3 0 12 5.7 12 12 0 33.1 26.9 60 60 60s60-26.9 60-60c0-5-.6-9.8-1.8-14.5-4.2-16.9-5.2-37.1 7.2-49.4l26.8-26.8c6-6 14.1-9.4 22.6-9.4l89.2 0c6.3 0 12.4-.3 18.5-1 11.9-1.2 16.4-15.5 10.8-26-8.5-15.8-13.3-33.8-13.3-53 0-61.9 50.1-112 112-112 8 0 15.7 .8 23.2 2.4 11.7 2.5 24.1-5.9 22-17.6-14.7-82.3-86.7-144.8-173.2-144.8-97.2 0-176 78.8-176 176l0 89.2z\"]\n};\nvar faChartSimple = {\n  prefix: 'fas',\n  iconName: 'chart-simple',\n  icon: [512, 512, [], \"e473\", \"M192 80c0-26.5 21.5-48 48-48l32 0c26.5 0 48 21.5 48 48l0 352c0 26.5-21.5 48-48 48l-32 0c-26.5 0-48-21.5-48-48l0-352zM0 272c0-26.5 21.5-48 48-48l32 0c26.5 0 48 21.5 48 48l0 160c0 26.5-21.5 48-48 48l-32 0c-26.5 0-48-21.5-48-48L0 272zM432 96l32 0c26.5 0 48 21.5 48 48l0 288c0 26.5-21.5 48-48 48l-32 0c-26.5 0-48-21.5-48-48l0-288c0-26.5 21.5-48 48-48z\"]\n};\nvar faAtom = {\n  prefix: 'fas',\n  iconName: 'atom',\n  icon: [448, 512, [9883], \"f5d2\", \"M224 398.8c-11.8 5.1-23.4 9.7-34.9 13.5 16.7 33.8 31 35.7 34.9 35.7s18.1-1.9 34.9-35.7c-11.4-3.9-23.1-8.4-34.9-13.5zM414 256c33 45.2 44.3 90.9 23.6 128-20.2 36.3-62.5 49.3-115.2 43.2-22 52.1-55.7 84.8-98.4 84.8s-76.4-32.7-98.4-84.8C72.9 433.3 30.6 420.3 10.4 384-10.3 346.9 1 301.2 34 256 1 210.8-10.3 165.1 10.4 128 30.6 91.7 72.9 78.7 125.6 84.8 147.6 32.7 181.2 0 224 0s76.4 32.7 98.4 84.8c52.7-6.1 95 6.8 115.2 43.2 20.7 37.1 9.4 82.8-23.6 128zm-65.8 67.4c-1.7 14.2-3.9 28-6.7 41.2 31.8 1.4 38.6-8.7 40.2-11.7 2.3-4.2 7-17.9-11.9-48.1-6.8 6.3-14 12.5-21.6 18.6zm-6.7-175.9c2.8 13.1 5 26.9 6.7 41.2 7.6 6.1 14.8 12.3 21.6 18.6 18.9-30.2 14.2-44 11.9-48.1-1.6-2.9-8.4-13-40.2-11.7zM258.9 99.7C242.1 65.9 227.9 64 224 64s-18.1 1.9-34.9 35.7c11.4 3.9 23.1 8.4 34.9 13.5 11.8-5.1 23.4-9.7 34.9-13.5zm-159 88.9c1.7-14.3 3.9-28 6.7-41.2-31.8-1.4-38.6 8.7-40.2 11.7-2.3 4.2-7 17.9 11.9 48.1 6.8-6.3 14-12.5 21.6-18.6zM78.2 304.8c-18.9 30.2-14.2 44-11.9 48.1 1.6 2.9 8.4 13 40.2 11.7-2.8-13.1-5-26.9-6.7-41.2-7.6-6.1-14.8-12.3-21.6-18.6zM304 256a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zm-80-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faP = {\n  prefix: 'fas',\n  iconName: 'p',\n  icon: [320, 512, [112], \"50\", \"M0 64C0 46.3 14.3 32 32 32l128 0c88.4 0 160 71.6 160 160S248.4 352 160 352l-96 0 0 96c0 17.7-14.3 32-32 32S0 465.7 0 448L0 64zM64 288l96 0c53 0 96-43 96-96s-43-96-96-96l-96 0 0 192z\"]\n};\nvar faJetFighterUp = {\n  prefix: 'fas',\n  iconName: 'jet-fighter-up',\n  icon: [512, 512, [], \"e518\", \"M206.8 47.8C202.3 58.5 200 70 200 81.6l0 100.4-152 114 0-48c0-13.3-10.7-24-24-24S0 234.7 0 248L0 392c0 13.3 10.7 24 24 24s24-10.7 24-24l0-8 152 0 0 54.4-66 52.8c-3.8 3-6 7.6-6 12.5l0 24.3c0 8.8 7.2 16 16 16l88 0 0-40c0-13.3 10.7-24 24-24s24 10.7 24 24l0 40 88 0c8.8 0 16-7.2 16-16l0-24.3c0-4.9-2.2-9.5-6-12.5l-66-52.8 0-54.4 152 0 0 8c0 13.3 10.7 24 24 24s24-10.7 24-24l0-144c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 48-152-114 0-100.4c0-11.6-2.3-23.1-6.8-33.8l-27.1-65C274.4-26.2 265.7-32 256-32s-18.4 5.8-22.2 14.8l-27.1 65z\"]\n};\nvar faPlugCircleXmark = {\n  prefix: 'fas',\n  iconName: 'plug-circle-xmark',\n  icon: [640, 512, [], \"e560\", \"M192-32c17.7 0 32 14.3 32 32l0 96 128 0 0-96c0-17.7 14.3-32 32-32s32 14.3 32 32l0 96 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 48.7c-98.6 8.1-176 90.7-176 191.3 0 27.3 5.7 53.3 16 76.9l0 3.1c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-66.7C165.2 398.1 96 319.1 96 224l0-64c-17.7 0-32-14.3-32-32S78.3 96 96 96l64 0 0-96c0-17.7 14.3-32 32-32zM496 256a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm59.3 107.3c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0l-36.7 36.7-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l36.7 36.7-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l36.7-36.7 36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-36.7-36.7 36.7-36.7z\"]\n};\nvar faSheetPlastic = {\n  prefix: 'fas',\n  iconName: 'sheet-plastic',\n  icon: [384, 512, [], \"e571\", \"M0 448c0 35.3 28.7 64 64 64l149.5 0c17 0 33.3-6.7 45.3-18.7L365.3 386.7c12-12 18.7-28.3 18.7-45.3L384 64c0-35.3-28.7-64-64-64L64 0C28.7 0 0 28.7 0 64L0 448zm208 5.5l0-93.5c0-13.3 10.7-24 24-24l93.5 0-117.5 117.5zM153 105l-48 48c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l48-48c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9zm96 32L137 249c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L215 103c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"]\n};\nvar faV = {\n  prefix: 'fas',\n  iconName: 'v',\n  icon: [384, 512, [118], \"56\", \"M19.7 34.5c16.3-6.8 35 .9 41.8 17.2L192 364.8 322.5 51.7c6.8-16.3 25.5-24 41.8-17.2s24 25.5 17.2 41.8l-160 384c-5 11.9-16.6 19.7-29.5 19.7s-24.6-7.8-29.5-19.7L2.5 76.3c-6.8-16.3 .9-35 17.2-41.8z\"]\n};\nvar faList = {\n  prefix: 'fas',\n  iconName: 'list',\n  icon: [512, 512, [\"list-squares\"], \"f03a\", \"M40 48C26.7 48 16 58.7 16 72l0 48c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24L40 48zM192 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L192 64zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-288 0zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-288 0zM16 232l0 48c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-48 0c-13.3 0-24 10.7-24 24zM40 368c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-48 0z\"]\n};\nvar faListSquares = faList;\nvar faPisces = {\n  prefix: 'fas',\n  iconName: 'pisces',\n  icon: [448, 512, [], \"e84c\", \"M40.4 10.4c11.9-13 32.2-13.9 45.2-2 2.9 2.7 28.3 26.7 53.6 67.8 22.3 36.2 45 86.6 51.1 147.8l67.3 0c6.1-61.1 28.8-111.6 51.1-147.8 25.3-41.1 50.7-65.1 53.6-67.8 13-11.9 33.3-11.1 45.2 2 11.9 13 11 33.3-2 45.2-1.4 1.3-22 21.1-42.4 54.2-17.9 29.1-35.4 68-41.2 114.2l94 0 3.3 .2c16.1 1.6 28.7 15.3 28.7 31.8s-12.6 30.2-28.7 31.8l-3.3 .2-94 0c5.8 46.2 23.3 85.1 41.2 114.2 20.4 33.1 41 52.9 42.4 54.2 13 11.9 13.9 32.2 2 45.2-11.9 13-32.2 13.9-45.2 2-2.9-2.7-28.3-26.7-53.6-67.8-22.3-36.2-45-86.6-51.1-147.8l-67.3 0c-6.1 61.1-28.8 111.6-51.1 147.8-25.3 41.1-50.7 65.1-53.6 67.8-13 11.9-33.3 11.1-45.2-2-11.9-13-11-33.3 2-45.2 1.4-1.3 22-21.1 42.4-54.2 17.9-29.1 35.4-68 41.2-114.2l-94 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l94 0c-5.8-46.2-23.3-85.1-41.2-114.2-20.4-33.1-41-52.9-42.4-54.2-13-11.9-13.9-32.2-2-45.2z\"]\n};\nvar faSolarPanel = {\n  prefix: 'fas',\n  iconName: 'solar-panel',\n  icon: [576, 512, [], \"f5ba\", \"M121.8 32c-30 0-56 20.8-62.5 50.1L9.6 306.1C.7 346.1 31.1 384 72 384l184.1 0 0 64-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l192 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-64 184.1 0c40.9 0 71.4-37.9 62.5-77.9l-49.8-224C510.4 52.8 484.5 32 454.5 32L121.8 32zM245.6 96l85.2 0 7.3 88-99.8 0 7.3-88zm-55.5 88l-87.8 0 19.6-88 75.6 0-7.3 88zM91.6 232l94.5 0-7.3 88-106.7 0 19.6-88zm142.6 0l107.8 0 7.3 88-122.5 0 7.3-88zm156 0l94.5 0 19.6 88-106.7 0-7.3-88zM474 184l-87.8 0-7.3-88 75.6 0 19.6 88z\"]\n};\nvar faLandMineOn = {\n  prefix: 'fas',\n  iconName: 'land-mine-on',\n  icon: [576, 512, [], \"e51b\", \"M312 0l0 128c0 13.3-10.7 24-24 24s-24-10.7-24-24L264 0c0-13.3 10.7-24 24-24s24 10.7 24 24zM160 288c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32l0 32 80 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48L80 512c-26.5 0-48-21.5-48-48l0-96c0-26.5 21.5-48 48-48l80 0 0-32zM12 114.7c7.4-11 22.3-14 33.3-6.7l96 64c11 7.4 14 22.3 6.7 33.3s-22.3 14-33.3 6.7l-96-64c-11-7.4-14-22.3-6.7-33.3zM530.7 108c11-7.4 25.9-4.4 33.3 6.7s4.4 25.9-6.7 33.3l-96 64c-11 7.4-25.9 4.4-33.3-6.7s-4.4-25.9 6.7-33.3l96-64z\"]\n};\nvar faHeadphones = {\n  prefix: 'fas',\n  iconName: 'headphones',\n  icon: [448, 512, [127911, 62863, \"headphones-alt\", \"headphones-simple\"], \"f025\", \"M64 224c0-88.4 71.6-160 160-160s160 71.6 160 160l0 37.5c-10-3.5-20.8-5.5-32-5.5l-16 0c-26.5 0-48 21.5-48 48l0 128c0 26.5 21.5 48 48 48l16 0c53 0 96-43 96-96l0-160C448 100.3 347.7 0 224 0S0 100.3 0 224L0 384c0 53 43 96 96 96l16 0c26.5 0 48-21.5 48-48l0-128c0-26.5-21.5-48-48-48l-16 0c-11.2 0-22 1.9-32 5.5L64 224z\"]\n};\nvar faHeadphonesAlt = faHeadphones;\nvar faHeadphonesSimple = faHeadphones;\nvar faBus = {\n  prefix: 'fas',\n  iconName: 'bus',\n  icon: [448, 512, [128653], \"f207\", \"M96 0C43 0 0 43 0 96L0 384c0 29.8 20.4 54.9 48 62l0 34c0 17.7 14.3 32 32 32l16 0c17.7 0 32-14.3 32-32l0-32 192 0 0 32c0 17.7 14.3 32 32 32l16 0c17.7 0 32-14.3 32-32l0-34c27.6-7.1 48-32.2 48-62l0-288c0-53-43-96-96-96L96 0zM64 176c0-17.7 14.3-32 32-32l104 0 0 112-104 0c-17.7 0-32-14.3-32-32l0-48zm184 80l0-112 104 0c17.7 0 32 14.3 32 32l0 48c0 17.7-14.3 32-32 32l-104 0zM96 320a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm256 0a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM152 72c0-13.3 10.7-24 24-24l96 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-96 0c-13.3 0-24-10.7-24-24z\"]\n};\nvar faFilePowerpoint = {\n  prefix: 'fas',\n  iconName: 'file-powerpoint',\n  icon: [384, 512, [], \"f1c4\", \"M0 64C0 28.7 28.7 0 64 0L213.5 0c17 0 33.3 6.7 45.3 18.7L365.3 125.3c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm208-5.5l0 93.5c0 13.3 10.7 24 24 24L325.5 176 208 58.5zM152 256c-13.3 0-24 10.7-24 24l0 144c0 13.3 10.7 24 24 24s24-10.7 24-24l0-24 24 0c39.8 0 72-32.2 72-72s-32.2-72-72-72l-48 0zm48 96l-24 0 0-48 24 0c13.3 0 24 10.7 24 24s-10.7 24-24 24z\"]\n};\nvar faQuoteLeft = {\n  prefix: 'fas',\n  iconName: 'quote-left',\n  icon: [448, 512, [8220, \"quote-left-alt\"], \"f10d\", \"M0 216C0 149.7 53.7 96 120 96l8 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-8 0c-30.9 0-56 25.1-56 56l0 8 64 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64l-64 0c-35.3 0-64-28.7-64-64L0 216zm256 0c0-66.3 53.7-120 120-120l8 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-8 0c-30.9 0-56 25.1-56 56l0 8 64 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64l-64 0c-35.3 0-64-28.7-64-64l0-136z\"]\n};\nvar faQuoteLeftAlt = faQuoteLeft;\nvar faChevronDown = {\n  prefix: 'fas',\n  iconName: 'chevron-down',\n  icon: [448, 512, [], \"f078\", \"M201.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 338.7 54.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z\"]\n};\nvar faEarthAsia = {\n  prefix: 'fas',\n  iconName: 'earth-asia',\n  icon: [512, 512, [127759, \"globe-asia\"], \"f57e\", \"M50 284.8c4.2 2.1 9 3.2 14 3.2l50.7 0c8.5 0 16.6 3.4 22.6 9.4l13.3 13.3c6 6 14.1 9.4 22.6 9.4l18.7 0c17.7 0 32-14.3 32-32l0-40c0-13.3 10.7-24 24-24s24-10.7 24-24l0-42.7c0-8.5 3.4-16.6 9.4-22.6l13.3-13.3c6-6 9.4-14.1 9.4-22.6L304 57c0-1.2-.1-2.3-.2-3.5-15.4-3.6-31.4-5.5-47.8-5.5-114.9 0-208 93.1-208 208 0 9.8 .7 19.4 2 28.8zm403.3 37.3c-3.2-1.4-6.7-2.1-10.5-2.1L432 320c-8.8 0-16-7.2-16-16s-7.2-16-16-16l-34.7 0c-8.5 0-16.6 3.4-22.6 9.4l-45.3 45.3c-6 6-9.4 14.1-9.4 22.6l0 18.7c0 17.7 14.3 32 32 32l18.7 0c8.5 0 16.6 3.4 22.6 9.4 2.2 2.2 4.7 4.1 7.3 5.5 39.3-25.4 69.5-63.6 84.6-108.8zM0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zM128 368c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM272 256c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16s16-7.2 16-16l0-32c0-8.8-7.2-16-16-16zm48-112l0 32c0 8.8 7.2 16 16 16s16-7.2 16-16l0-32c0-8.8-7.2-16-16-16s-16 7.2-16 16z\"]\n};\nvar faGlobeAsia = faEarthAsia;\nvar faCentSign = {\n  prefix: 'fas',\n  iconName: 'cent-sign',\n  icon: [384, 512, [], \"e3f5\", \"M208 0c17.7 0 32 14.3 32 32l0 25.4c43.6 5.2 83 24.5 113.3 53.1 12.9 12.1 13.4 32.4 1.3 45.2s-32.4 13.4-45.2 1.3c-24.4-23-57.2-37.1-93.3-37.1-75.1 0-136 60.9-136 136s60.9 136 136 136c36.2 0 69-14.1 93.3-37.1 12.9-12.1 33.1-11.5 45.2 1.3s11.5 33.1-1.3 45.2C323 430.1 283.6 449.4 240 454.6l0 25.4c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-28C84.7 433.5 16 352.8 16 256S84.7 78.5 176 60l0-28c0-17.7 14.3-32 32-32z\"]\n};\nvar faShieldCat = {\n  prefix: 'fas',\n  iconName: 'shield-cat',\n  icon: [512, 512, [], \"e572\", \"M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2 .5 99.2 41.3 280.7 213.6 363.2 16.7 8 36.1 8 52.8 0 172.4-82.5 213.2-264 213.6-363.2 .1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM160 154.4c0-5.8 4.7-10.4 10.4-10.4l.2 0c3.4 0 6.5 1.6 8.5 4.3l40 53.3c3 4 7.8 6.4 12.8 6.4l48 0c5 0 9.8-2.4 12.8-6.4l40-53.3c2-2.7 5.2-4.3 8.5-4.3l.2 0c5.8 0 10.4 4.7 10.4 10.4L352 272c0 53-43 96-96 96s-96-43-96-96l0-117.6zM216 288a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm96-16a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"]\n};\nvar faSchoolCircleCheck = {\n  prefix: 'fas',\n  iconName: 'school-circle-check',\n  icon: [640, 512, [], \"e56b\", \"M64 128c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l276 0c-10.5-14.6-19-30.7-25.1-48l-90.9 0 0-88c0-22.1 17.9-40 40-40l48 0c1 0 1.9 0 2.9 .1 26.3-74.6 97.5-128.1 181.1-128.1 28.6 0 55.6 6.2 80 17.4l0-33.4c0-35.3-28.7-64-64-64l-64 0-127.9-115.1c-18.3-16.4-46-16.4-64.2 0L128 128 64 128zm64 240c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32zM112 256l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16zM288 128a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM640 400a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-86.6-60.9c7.1 5.2 8.7 15.2 3.5 22.3l-64 88c-2.8 3.8-7 6.2-11.7 6.5s-9.3-1.3-12.6-4.6l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l26.8 26.8 53-72.9c5.2-7.1 15.2-8.7 22.4-3.5z\"]\n};\nvar faMartiniGlass = {\n  prefix: 'fas',\n  iconName: 'martini-glass',\n  icon: [512, 512, [127864, \"glass-martini-alt\"], \"f57b\", \"M2.4 51.8C7.4 39.8 19.1 32 32 32l448 0c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9L288 301.3 288 448 352 448c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0 0-146.7-214.6-214.6C.2 77.5-2.5 63.7 2.4 51.8zM354.7 144l48-48-293.5 0 48 48 197.5 0z\"]\n};\nvar faGlassMartiniAlt = faMartiniGlass;\nvar faPlug = {\n  prefix: 'fas',\n  iconName: 'plug',\n  icon: [448, 512, [128268], \"f1e6\", \"M128-32c17.7 0 32 14.3 32 32l0 96 128 0 0-96c0-17.7 14.3-32 32-32s32 14.3 32 32l0 96 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 64c0 95.1-69.2 174.1-160 189.3l0 66.7c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-66.7C101.2 398.1 32 319.1 32 224l0-64c-17.7 0-32-14.3-32-32S14.3 96 32 96l64 0 0-96c0-17.7 14.3-32 32-32z\"]\n};\nvar faPanorama = {\n  prefix: 'fas',\n  iconName: 'panorama',\n  icon: [576, 512, [], \"e209\", \"M43.9 48C19.7 48 0 67.7 0 91.9L0 420.1c0 24.3 19.7 43.9 43.9 43.9 5.5 0 10.7-1 15.7-2.9 12.9-4.9 103.4-37.1 228.4-37.1s215.5 32.3 228.4 37.1c5 1.9 10.2 2.9 15.7 2.9 24.3 0 43.9-19.7 43.9-43.9l0-328.2c0-24.3-19.7-43.9-43.9-43.9-5.5 0-10.7 1-15.7 2.9-12.9 4.9-103.4 37.1-228.4 37.1S72.5 55.7 59.6 50.9C54.6 49 49.4 48 43.9 48zM72 176a40 40 0 1 1 80 0 40 40 0 1 1 -80 0zm264.1-16c7.5 0 14.6 3.6 19.1 9.6L479.7 336.2c5.9 7.9 6.4 18.5 1.3 26.9s-14.8 12.8-24.5 11.1c-45.8-7.8-103.3-14.2-168.4-14.2-65.6 0-123.4 6.5-169.3 14.4-9.8 1.7-19.7-2.9-24.7-11.5s-4.3-19.4 1.9-27.2L165.3 249c4.6-5.7 11.5-9 18.7-9s14.2 3.3 18.7 9l27.5 34.4 86.7-113.9c4.6-6 11.7-9.5 19.2-9.5z\"]\n};\nvar faClockRotateLeft = {\n  prefix: 'fas',\n  iconName: 'clock-rotate-left',\n  icon: [576, 512, [\"history\"], \"f1da\", \"M288 64c106 0 192 86 192 192S394 448 288 448c-65.2 0-122.9-32.5-157.6-82.3-10.1-14.5-30.1-18-44.6-7.9s-18 30.1-7.9 44.6C124.1 468.6 201 512 288 512 429.4 512 544 397.4 544 256S429.4 0 288 0C202.3 0 126.5 42.1 80 106.7L80 80c0-17.7-14.3-32-32-32S16 62.3 16 80l0 112c0 17.7 14.3 32 32 32l24.6 0c.5 0 1 0 1.5 0l86 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-38.3 0C154.9 102.6 217 64 288 64zm24 88c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 104c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65 0-94.1z\"]\n};\nvar faHistory = faClockRotateLeft;\nvar faJarWheat = {\n  prefix: 'fas',\n  iconName: 'jar-wheat',\n  icon: [320, 512, [], \"e517\", \"M32-8c0-13.3 10.7-24 24-24l208 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L56 16C42.7 16 32 5.3 32-8zM0 128C0 92.7 28.7 64 64 64l192 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 128zm112 32l-42.2 0c-3.2 0-5.8 2.6-5.8 5.8 0 32.1 26 58.2 58.2 58.2l75.6 0c32.1 0 58.2-26 58.2-58.2 0-3.2-2.6-5.8-5.8-5.8L208 160c-19.1 0-36.3 8.4-48 21.7-11.7-13.3-28.9-21.7-48-21.7zm48 117.7c-11.7-13.3-28.9-21.7-48-21.7l-42.2 0c-3.2 0-5.8 2.6-5.8 5.8 0 32.1 26 58.2 58.2 58.2l75.6 0c32.1 0 58.2-26 58.2-58.2 0-3.2-2.6-5.8-5.8-5.8L208 256c-19.1 0-36.3 8.4-48 21.7zM112 352l-42.2 0c-3.2 0-5.8 2.6-5.8 5.8 0 32.1 26 58.2 58.2 58.2l21.8 0 0 32c0 8.8 7.2 16 16 16s16-7.2 16-16l0-32 21.8 0c32.1 0 58.2-26 58.2-58.2 0-3.2-2.6-5.8-5.8-5.8L208 352c-19.1 0-36.3 8.4-48 21.7-11.7-13.3-28.9-21.7-48-21.7z\"]\n};\nvar faCloudArrowDown = {\n  prefix: 'fas',\n  iconName: 'cloud-arrow-down',\n  icon: [576, 512, [62337, \"cloud-download\", \"cloud-download-alt\"], \"f0ed\", \"M144 480c-79.5 0-144-64.5-144-144 0-63.4 41-117.2 97.9-136.5-1.3-7.7-1.9-15.5-1.9-23.5 0-79.5 64.5-144 144-144 55.4 0 103.5 31.3 127.6 77.1 14.2-8.3 30.8-13.1 48.4-13.1 53 0 96 43 96 96 0 15.7-3.8 30.6-10.5 43.7 44 20.3 74.5 64.7 74.5 116.3 0 70.7-57.3 128-128 128l-304 0zM377 313c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-31 31 0-102.1c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 102.1-31-31c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l72 72c9.4 9.4 24.6 9.4 33.9 0l72-72z\"]\n};\nvar faCloudDownload = faCloudArrowDown;\nvar faCloudDownloadAlt = faCloudArrowDown;\nvar faTruckRampBox = {\n  prefix: 'fas',\n  iconName: 'truck-ramp-box',\n  icon: [576, 512, [\"truck-loading\"], \"f4de\", \"M400 32c-44.2 0-80 35.8-80 80l0 248.2-297.2 89.2C5.9 454.4-3.7 472.3 1.4 489.2s22.9 26.5 39.8 21.5l315.5-94.6 43.7 0c-.2 2.6-.4 5.3-.4 8 0 48.6 39.4 88 88 88s88-39.4 88-88l0-392-176 0zM528 424c0 22.1-17.9 40-40 40s-40-17.9-40-40 17.9-40 40-40c22.1 0 39.9 17.9 40 39.9l0 .1zM51.9 149.5C18.1 159.8-.9 195.6 9.4 229.4l28.1 91.8C47.8 355 83.6 374 117.4 363.7l91.8-28.1c33.8-10.3 52.8-46.1 42.5-79.9l-28.1-91.8c-10.3-33.8-46.1-52.8-79.9-42.5L51.9 149.5z\"]\n};\nvar faTruckLoading = faTruckRampBox;\nvar faAngleDown = {\n  prefix: 'fas',\n  iconName: 'angle-down',\n  icon: [384, 512, [8964], \"f107\", \"M169.4 374.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 306.7 54.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z\"]\n};\nvar faPlugCircleCheck = {\n  prefix: 'fas',\n  iconName: 'plug-circle-check',\n  icon: [640, 512, [], \"e55c\", \"M192-32c17.7 0 32 14.3 32 32l0 96 128 0 0-96c0-17.7 14.3-32 32-32s32 14.3 32 32l0 96 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 48.7c-98.6 8.1-176 90.7-176 191.3 0 27.3 5.7 53.3 16 76.9l0 3.1c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-66.7C165.2 398.1 96 319.1 96 224l0-64c-17.7 0-32-14.3-32-32S78.3 96 96 96l64 0 0-96c0-17.7 14.3-32 32-32zM352 400a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm201.4-60.9c-7.1-5.2-17.2-3.6-22.4 3.5l-53 72.9-26.8-26.8c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c3.3 3.3 7.9 5 12.6 4.6s8.9-2.8 11.7-6.5l64-88c5.2-7.1 3.6-17.2-3.5-22.3z\"]\n};\nvar faWindowMaximize = {\n  prefix: 'fas',\n  iconName: 'window-maximize',\n  icon: [512, 512, [128470], \"f2d0\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zm24 64l336 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L88 176c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nvar faHandsHoldingCircle = {\n  prefix: 'fas',\n  iconName: 'hands-holding-circle',\n  icon: [640, 512, [], \"e4fb\", \"M320 0a128 128 0 1 1 0 256 128 128 0 1 1 0-256zM40 64c22.1 0 40 17.9 40 40l0 160.2c0 17 6.7 33.3 18.7 45.3l51.1 51.1c8.3 8.3 21.3 9.6 31 3.1 12.9-8.6 14.7-26.9 3.7-37.8-7.3-7.3-23.1-23.1-47.2-47.2-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0c24.1 24.1 39.9 39.9 47.2 47.2l0 0 25.3 25.3c21 21 32.8 49.5 32.8 79.2l0 78.9c0 26.5-21.5 48-48 48l-66.7 0c-17 0-33.3-6.7-45.3-18.7L28.1 393.4C10.1 375.4 0 351 0 325.5L0 104C0 81.9 17.9 64 40 64zm560 0c22.1 0 40 17.9 40 40l0 221.5c0 25.5-10.1 49.9-28.1 67.9L512 493.3c-12 12-28.3 18.7-45.3 18.7L400 512c-26.5 0-48-21.5-48-48l0-78.9c0-29.7 11.8-58.2 32.8-79.2l25.3-25.3 0 0c7.3-7.3 23.1-23.1 47.2-47.2 12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3c-24.1 24.1-39.9 39.9-47.2 47.2-11 11-9.2 29.2 3.7 37.8 9.7 6.5 22.7 5.2 31-3.1l51.1-51.1c12-12 18.7-28.3 18.7-45.3L560 104c0-22.1 17.9-40 40-40z\"]\n};\nvar faLocationPin = {\n  prefix: 'fas',\n  iconName: 'location-pin',\n  icon: [384, 512, [\"map-marker\"], \"f041\", \"M192 0C86 0 0 84.4 0 188.6 0 307.9 120.2 450.9 170.4 505.4 182.2 518.2 201.8 518.2 213.6 505.4 263.8 450.9 384 307.9 384 188.6 384 84.4 298 0 192 0z\"]\n};\nvar faMapMarker = faLocationPin;\nvar faBowlingBall = {\n  prefix: 'fas',\n  iconName: 'bowling-ball',\n  icon: [512, 512, [], \"f436\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM240 80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM208 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm-64-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faCartFlatbed = {\n  prefix: 'fas',\n  iconName: 'cart-flatbed',\n  icon: [576, 512, [\"dolly-flatbed\"], \"f474\", \"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64l16 0c8.8 0 16 7.2 16 16l0 288c0 39.8 29.1 72.8 67.1 79-2 5.3-3.1 11-3.1 17 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1-11-2.7-16l197.5 0c-1.8 5-2.7 10.4-2.7 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1-11-2.7-16l34.7 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-400 0c-8.8 0-16-7.2-16-16l0-288C128 35.8 92.2 0 48 0L32 0zM224 64c-26.5 0-48 21.5-48 48l0 176c0 26.5 21.5 48 48 48l240 0c26.5 0 48-21.5 48-48l0-176c0-26.5-21.5-48-48-48L224 64z\"]\n};\nvar faDollyFlatbed = faCartFlatbed;\nvar faHouseUser = {\n  prefix: 'fas',\n  iconName: 'house-user',\n  icon: [512, 512, [\"home-user\"], \"e1b0\", \"M277.8 8.6c-12.3-11.4-31.3-11.4-43.5 0l-224 208c-9.6 9-12.8 22.9-8 35.1S18.8 272 32 272l16 0 0 176c0 35.3 28.7 64 64 64l288 0c35.3 0 64-28.7 64-64l0-176 16 0c13.2 0 25-8.1 29.8-20.3s1.6-26.2-8-35.1l-224-208zM200 256a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zM144 432c0-44.2 35.8-80 80-80l64 0c44.2 0 80 35.8 80 80 0 8.8-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16z\"]\n};\nvar faHomeUser = faHouseUser;\nvar faGhost = {\n  prefix: 'fas',\n  iconName: 'ghost',\n  icon: [384, 512, [128123], \"f6e2\", \"M40.1 467.1l-11.2 9C25.7 478.6 21.8 480 17.8 480 8 480 0 472 0 462.2L0 192C0 86 86 0 192 0S384 86 384 192l0 270.2c0 9.8-8 17.8-17.8 17.8-4 0-7.9-1.4-11.1-3.9l-11.2-9c-13.4-10.7-32.8-9-44.1 3.9L269.3 506c-3.3 3.8-8.2 6-13.3 6s-9.9-2.2-13.3-6l-26.6-30.5c-12.7-14.6-35.4-14.6-48.2 0L141.3 506c-3.3 3.8-8.2 6-13.3 6s-9.9-2.2-13.3-6L84.2 471c-11.3-12.9-30.7-14.6-44.1-3.9zM160 192a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm96 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nvar faCommentNodes = {\n  prefix: 'fas',\n  iconName: 'comment-nodes',\n  icon: [640, 512, [], \"e696\", \"M480 208C503.7 208 525.6 215.3 543.7 227.9 536.9 100.9 425 0 288 0 146.6 0 32 107.5 32 240 32 294.3 51.2 344.3 83.6 384.5L34.8 476.8c-4.8 9-3.3 20 3.6 27.5s17.8 9.8 27.1 5.8l118.4-50.7c27.2 11.4 56.9 18.4 88.1 20.2 .1-18.9 4.9-38 15-55.5 17.1-29.7 45.8-48.5 77-54.2l9.2-16c-3.4-10.7-5.2-22-5.2-33.8 0-61.9 50.1-112 112-112zM328.6 448c-17.7 30.6-7.2 69.7 23.4 87.4s69.7 7.2 87.4-23.4c1.5-2.6 2.8-5.3 3.9-8l73.3 0c1.1 2.7 2.4 5.4 3.9 8 17.7 30.6 56.8 41.1 87.4 23.4s41.1-56.8 23.4-87.4c-13.4-23.2-39.1-34.8-64-31.4l-17.6-30.7c-11 11.7-25 20.6-40.6 25.6l16.5 28.9c-3.8 4.8-6.8 10-9 15.6l-73.4 0c-2.2-5.6-5.3-10.8-9-15.6l33-57.7c4.1 .8 8.4 1.3 12.8 1.3 35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64c0 13.4 4.1 25.8 11.2 36.1l-34.6 60.5c-25-3.4-50.6 8.3-64 31.4z\"]\n};\nvar faPersonArrowDownToLine = {\n  prefix: 'fas',\n  iconName: 'person-arrow-down-to-line',\n  icon: [576, 512, [], \"e538\", \"M192-32a56 56 0 1 1 0 112 56 56 0 1 1 0-112zM318.3 299.1l-46.3-62.4 0 243.3 272 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 544c-17.7 0-32-14.3-32-32s14.3-32 32-32l80 0 0-243.3-46.3 62.4c-10.5 14.2-30.6 17.2-44.8 6.6s-17.2-30.6-6.6-44.8l70.5-95C110 132 149.7 112 192 112s82 20 107.2 53.9l70.5 95c10.5 14.2 7.6 34.2-6.6 44.8s-34.2 7.6-44.8-6.6zM176 480l32 0 0-128c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 128zM566.6 166.6l-80 80c-12.5 12.5-32.8 12.5-45.3 0l-80-80c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L432 146.7 432 0c0-17.7 14.3-32 32-32s32 14.3 32 32l0 146.7 25.4-25.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3z\"]\n};\nvar faPlugCirclePlus = {\n  prefix: 'fas',\n  iconName: 'plug-circle-plus',\n  icon: [640, 512, [], \"e55f\", \"M192-32c17.7 0 32 14.3 32 32l0 96 128 0 0-96c0-17.7 14.3-32 32-32s32 14.3 32 32l0 96 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 48.7c-98.6 8.1-176 90.7-176 191.3 0 27.3 5.7 53.3 16 76.9l0 3.1c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-66.7C165.2 398.1 96 319.1 96 224l0-64c-17.7 0-32-14.3-32-32S78.3 96 96 96l64 0 0-96c0-17.7 14.3-32 32-32zM496 256a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm16 80c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16s16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0 0-48z\"]\n};\nvar faPersonSwimming = {\n  prefix: 'fas',\n  iconName: 'person-swimming',\n  icon: [640, 512, [127946, \"swimmer\"], \"f5c4\", \"M552 152a56 56 0 1 0 -112 0 56 56 0 1 0 112 0zM293.4 198.2l-88.6 73.9c1.1 0 2.2-.1 3.3-.1 33.1-.2 66.3 10.2 94.4 31.4 22.1 16.6 29.1 16.6 51.2 0 27.5-20.7 59.9-31.2 92.4-31.4 4.8 0 9.7 .2 14.5 .6-8.3-30-24.3-57.7-46.8-80.2-18.4-18.4-40.6-32.7-65-41.8l-68.6-25.7c-27.4-10.3-58-7.5-83.1 7.6l-53.5 32.1c-15.2 9.1-20.1 28.7-11 43.9s28.7 20.1 43.9 11L230 187.3c8.4-5 18.6-5.9 27.7-2.5l35.7 13.4zm110 181.9c21.3-16.1 49.9-16.1 71.2 0 19 14.4 41.9 28.2 67.2 33.3 26.5 5.4 54.3 .8 80.7-19.1 10.6-8 12.7-23 4.7-33.6s-23-12.7-33.6-4.7c-14.9 11.2-28.6 13.1-42.3 10.3-14.9-3-30.9-11.9-47.8-24.6-38.4-29-90.5-29-129 0-24 18.1-40.7 26.3-54.5 26.3s-30.5-8.2-54.5-26.3c-38.4-29-90.5-29-129 0-21.6 16.3-41.3 25.8-58.9 25.7-9.6-.1-19.9-3-31.2-11.5-10.6-8-25.6-5.9-33.6 4.7S7 386.3 17.6 394.3c19.1 14.4 39.4 21 59.8 21.1 33.9 .2 64.3-17.4 88.1-35.3 21.3-16.1 49.9-16.1 71.2 0 24.2 18.3 52.3 35.9 83.4 35.9s59.1-17.7 83.4-35.9z\"]\n};\nvar faSwimmer = faPersonSwimming;\nvar faCommentDots = {\n  prefix: 'fas',\n  iconName: 'comment-dots',\n  icon: [512, 512, [128172, 62075, \"commenting\"], \"f4ad\", \"M256 480c141.4 0 256-107.5 256-240S397.4 0 256 0 0 107.5 0 240c0 54.3 19.2 104.3 51.6 144.5L2.8 476.8c-4.8 9-3.3 20 3.6 27.5s17.8 9.8 27.1 5.8l118.4-50.7C183.7 472.6 218.9 480 256 480zM128 208a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 0a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm96 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nvar faCommenting = faCommentDots;\nvar faChartPie = {\n  prefix: 'fas',\n  iconName: 'chart-pie',\n  icon: [576, 512, [\"pie-chart\"], \"f200\", \"M512.4 240l-176 0c-17.7 0-32-14.3-32-32l0-176c0-17.7 14.4-32.2 31.9-29.9 107 14.2 191.8 99 206 206 2.3 17.5-12.2 31.9-29.9 31.9zM222.6 37.2c18.1-3.8 33.8 11 33.8 29.5l0 197.3c0 5.6 2 11 5.5 15.3L394 438.7c11.7 14.1 9.2 35.4-6.9 44.1-34.1 18.6-73.2 29.2-114.7 29.2-132.5 0-240-107.5-240-240 0-115.5 81.5-211.9 190.2-234.8zM477.8 288l64 0c18.5 0 33.3 15.7 29.5 33.8-10.2 48.4-35 91.4-69.6 124.2-12.3 11.7-31.6 9.2-42.4-3.9L374.9 340.4c-17.3-20.9-2.4-52.4 24.6-52.4l78.2 0z\"]\n};\nvar faPieChart = faChartPie;\nvar faFrog = {\n  prefix: 'fas',\n  iconName: 'frog',\n  icon: [576, 512, [], \"f52e\", \"M368 32c41.7 0 75.9 31.8 79.7 72.5l85.6 26.3c25.4 7.8 42.8 31.3 42.8 57.9 0 21.8-11.7 41.9-30.7 52.7l-144.5 82.1 92.5 92.5 50.7 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-8.5 0-16.6-3.4-22.6-9.4L346.9 360.2c11.7-36 3.2-77.1-25.4-105.7-40.6-40.6-106.3-40.6-146.9-.1L101 324.4c-6.4 6.1-6.7 16.2-.6 22.6s16.2 6.6 22.6 .6l73.8-70.2 .1-.1 .1-.1c3.5-3.5 7.3-6.6 11.3-9.2 27.9-18.5 65.9-15.4 90.5 9.2 24.7 24.7 27.7 62.9 9 90.9-2.6 3.8-5.6 7.5-9 10.9L261.8 416 352 416c17.7 0 32 14.3 32 32s-14.3 32-32 32L64 480C28.7 480 0 451.3 0 416 0 249.6 127 112.9 289.3 97.5 296.2 60.2 328.8 32 368 32zm0 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nvar faWineBottle = {\n  prefix: 'fas',\n  iconName: 'wine-bottle',\n  icon: [320, 512, [], \"f72f\", \"M80-32c0-17.7 14.3-32 32-32l96 0c17.7 0 32 14.3 32 32 0 11.8-6.4 22.2-16 27.7l0 145.6c56.5 24.7 96 81.1 96 146.7l0 224c0 35.3-28.7 64-64 64L64 576c-35.3 0-64-28.7-64-64L0 288c0-65.6 39.5-122 96-146.7L96-4.3C86.4-9.8 80-20.2 80-32zM96 288c-17.7 0-32 14.3-32 32l0 128c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32L96 288z\"]\n};\nvar faInbox = {\n  prefix: 'fas',\n  iconName: 'inbox',\n  icon: [512, 512, [], \"f01c\", \"M91.8 32C59.9 32 32.9 55.4 28.4 86.9L.6 281.2c-.4 3-.6 6-.6 9.1L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-125.7c0-3-.2-6.1-.6-9.1L483.6 86.9C479.1 55.4 452.1 32 420.2 32L91.8 32zm0 64l328.5 0 27.4 192-59.9 0c-12.1 0-23.2 6.8-28.6 17.7l-14.3 28.6c-5.4 10.8-16.5 17.7-28.6 17.7l-120.4 0c-12.1 0-23.2-6.8-28.6-17.7l-14.3-28.6c-5.4-10.8-16.5-17.7-28.6-17.7L64.3 288 91.8 96z\"]\n};\nvar faSquareH = {\n  prefix: 'fas',\n  iconName: 'square-h',\n  icon: [448, 512, [\"h-square\"], \"f0fd\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM320 168l0 176c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-64-96 0 0 64c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-176c0-13.3 10.7-24 24-24s24 10.7 24 24l0 64 96 0 0-64c0-13.3 10.7-24 24-24s24 10.7 24 24z\"]\n};\nvar faHSquare = faSquareH;\nvar faHouseMedical = {\n  prefix: 'fas',\n  iconName: 'house-medical',\n  icon: [512, 512, [], \"e3b2\", \"M277.8 8.6c-12.3-11.4-31.3-11.4-43.5 0l-224 208c-9.6 9-12.8 22.9-8 35.1S18.8 272 32 272l16 0 0 176c0 35.3 28.7 64 64 64l288 0c35.3 0 64-28.7 64-64l0-176 16 0c13.2 0 25-8.1 29.8-20.3s1.6-26.2-8-35.1l-224-208zM224 248c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 40 40 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-40 0 0 40c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-40-40 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l40 0 0-40z\"]\n};\nvar faCircleChevronRight = {\n  prefix: 'fas',\n  iconName: 'circle-chevron-right',\n  icon: [512, 512, [\"chevron-circle-right\"], \"f138\", \"M0 256a256 256 0 1 0 512 0 256 256 0 1 0 -512 0zM241 377c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l87-87-87-87c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L345 239c9.4 9.4 9.4 24.6 0 33.9L241 377z\"]\n};\nvar faChevronCircleRight = faCircleChevronRight;\nvar faFileCsv = {\n  prefix: 'fas',\n  iconName: 'file-csv',\n  icon: [576, 512, [], \"f6dd\", \"M96 0C60.7 0 32 28.7 32 64l0 384c0 35.3 28.7 64 64 64l80 0 0-112c0-35.3 28.7-64 64-64l176 0 0-165.5c0-17-6.7-33.3-18.7-45.3L290.7 18.7C278.7 6.7 262.5 0 245.5 0L96 0zM357.5 176L264 176c-13.3 0-24-10.7-24-24L240 58.5 357.5 176zM264 380c-24.3 0-44 19.7-44 44l0 80c0 24.3 19.7 44 44 44l16 0c24.3 0 44-19.7 44-44l0-8c0-11-9-20-20-20s-20 9-20 20l0 8c0 2.2-1.8 4-4 4l-16 0c-2.2 0-4-1.8-4-4l0-80c0-2.2 1.8-4 4-4l16 0c2.2 0 4 1.8 4 4l0 8c0 11 9 20 20 20s20-9 20-20l0-8c0-24.3-19.7-44-44-44l-16 0zm136 0c-28.7 0-52 23.3-52 52s23.3 52 52 52c6.6 0 12 5.4 12 12s-5.4 12-12 12l-32 0c-11 0-20 9-20 20s9 20 20 20l32 0c28.7 0 52-23.3 52-52s-23.3-52-52-52c-6.6 0-12-5.4-12-12s5.4-12 12-12l24 0c11 0 20-9 20-20s-9-20-20-20l-24 0zm96 0c-11 0-20 9-20 20l0 31.6c0 35.5 10.5 70.3 30.2 99.8l5.1 7.7c3.7 5.6 10 8.9 16.6 8.9s12.9-3.3 16.6-8.9l5.1-7.7c19.7-29.6 30.2-64.3 30.2-99.8l0-31.6c0-11-9-20-20-20s-20 9-20 20l0 31.6c0 19.6-4.1 38.9-12 56.7-7.9-17.8-12-37.1-12-56.7l0-31.6c0-11-9-20-20-20z\"]\n};\nvar faHatCowboy = {\n  prefix: 'fas',\n  iconName: 'hat-cowboy',\n  icon: [640, 512, [], \"f8c0\", \"M182.2 76.1L130.8 307.5C145.5 324.9 167.4 336 192 336l256 0c24.6 0 46.5-11.1 61.2-28.5L457.8 76.1c-5.7-25.8-28.6-44.1-55-44.1-12.2 0-24.1 4-33.8 11.3l-4.7 3.5c-26.3 19.7-62.4 19.7-88.6 0L271 43.3c-9.8-7.3-21.6-11.3-33.8-11.3-26.4 0-49.3 18.3-55 44.1zM64 256c0-17.7-14.3-32-32-32S0 238.3 0 256C0 362 86 448 192 448l256 0c106 0 192-86 192-192 0-17.7-14.3-32-32-32s-32 14.3-32 32c0 70.7-57.3 128-128 128l-256 0c-70.7 0-128-57.3-128-128z\"]\n};\nvar faFaceGrinTongueWink = {\n  prefix: 'fas',\n  iconName: 'face-grin-tongue-wink',\n  icon: [512, 512, [128540, \"grin-tongue-wink\"], \"f58b\", \"M152.2 490.1C62.5 450.2 0 360.4 0 256 0 114.6 114.6 0 256 0S512 114.6 512 256c0 104.4-62.5 194.2-152.2 234.1 5.3-13 8.2-27.2 8.2-42.1l0-61.7c16.9-16.5 30.1-36.7 38.3-59.3 4.3-11.8-7.7-21.8-19.6-18.1-39.2 12.2-83.7 19.1-130.7 19.1s-91.5-6.9-130.7-19.1c-11.9-3.7-23.9 6.3-19.6 18.1 8.3 22.6 21.5 42.8 38.3 59.3l0 61.7c0 14.9 2.9 29.1 8.2 42.1zM152 212l16 0c11 0 20 9 20 20s9 20 20 20 20-9 20-20c0-33.1-26.9-60-60-60l-16 0c-33.1 0-60 26.9-60 60 0 11 9 20 20 20s20-9 20-20 9-20 20-20zm184 60a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM320 402.6l0 45.4c0 35.3-28.7 64-64 64s-64-28.7-64-64l0-45.4c0-14.7 11.9-26.6 26.6-26.6l2 0c11.3 0 21.1 7.9 23.6 18.9 2.8 12.6 20.8 12.6 23.6 0 2.5-11.1 12.3-18.9 23.6-18.9l2 0c14.7 0 26.6 11.9 26.6 26.6zM336 184a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nvar faGrinTongueWink = faFaceGrinTongueWink;\nvar faL = {\n  prefix: 'fas',\n  iconName: 'l',\n  icon: [320, 512, [108], \"4c\", \"M64 32c17.7 0 32 14.3 32 32l0 352 192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L64 480c-17.7 0-32-14.3-32-32L32 64c0-17.7 14.3-32 32-32z\"]\n};\nvar faArrowDownShortWide = {\n  prefix: 'fas',\n  iconName: 'arrow-down-short-wide',\n  icon: [576, 512, [\"sort-amount-desc\", \"sort-amount-down-alt\"], \"f884\", \"M246.6 374.6l-96 96c-12.5 12.5-32.8 12.5-45.3 0l-96-96c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L96 370.7 96 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 306.7 41.4-41.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zM320 32l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nvar faSortAmountDesc = faArrowDownShortWide;\nvar faSortAmountDownAlt = faArrowDownShortWide;\nvar faHourglassHalf = {\n  prefix: 'fas',\n  iconName: 'hourglass-half',\n  icon: [384, 512, [\"hourglass-2\"], \"f252\", \"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64l0 11c0 42.4 16.9 83.1 46.9 113.1l67.9 67.9-67.9 67.9C48.9 353.9 32 394.6 32 437l0 11c-17.7 0-32 14.3-32 32s14.3 32 32 32l320 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-11c0-42.4-16.9-83.1-46.9-113.1l-67.9-67.9 67.9-67.9c30-30 46.9-70.7 46.9-113.1l0-11c17.7 0 32-14.3 32-32S369.7 0 352 0L32 0zM96 75l0-11 192 0 0 11c0 19-5.6 37.4-16 53L112 128c-10.3-15.6-16-34-16-53zm16 309c3.5-5.3 7.6-10.3 12.1-14.9l67.9-67.9 67.9 67.9c4.6 4.6 8.6 9.6 12.2 14.9L112 384z\"]\n};\nvar faHourglass2 = faHourglassHalf;\nvar faSpoon = {\n  prefix: 'fas',\n  iconName: 'spoon',\n  icon: [512, 512, [129348, 61873, \"utensil-spoon\"], \"f2e5\", \"M245.8 220.9c-14.5-17.6-21.8-39.2-21.8-60.8 0-80.2 96-160.2 192-160.2 53 0 96 43 96 96 0 96-80 192-160.2 192-21.6 0-43.2-7.3-60.8-21.8L54.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L245.8 220.9z\"]\n};\nvar faUtensilSpoon = faSpoon;\nvar faCreditCard = {\n  prefix: 'fas',\n  iconName: 'credit-card',\n  icon: [512, 512, [128179, 62083, \"credit-card-alt\"], \"f09d\", \"M0 128l0 32 512 0 0-32c0-35.3-28.7-64-64-64L64 64C28.7 64 0 92.7 0 128zm0 80L0 384c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-176-512 0zM64 360c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24zm144 0c0-13.3 10.7-24 24-24l64 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-64 0c-13.3 0-24-10.7-24-24z\"]\n};\nvar faCreditCardAlt = faCreditCard;\nvar faFileInvoiceDollar = {\n  prefix: 'fas',\n  iconName: 'file-invoice-dollar',\n  icon: [384, 512, [], \"f571\", \"M0 64C0 28.7 28.7 0 64 0L213.5 0c17 0 33.3 6.7 45.3 18.7L365.3 125.3c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm208-5.5l0 93.5c0 13.3 10.7 24 24 24L325.5 176 208 58.5zM64 88c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L88 64C74.7 64 64 74.7 64 88zm0 96c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0c-13.3 0-24 10.7-24 24zm112 76l0 4c-28.8 .3-52 23.7-52 52.5 0 25.7 18.5 47.6 43.9 51.8l41.7 7c6 1 10.4 6.2 10.4 12.3 0 6.9-5.6 12.5-12.5 12.5L152 400c-11 0-20 9-20 20s9 20 20 20l24 0 0 4c0 11 9 20 20 20s20-9 20-20l0-4.7c25-4.1 44-25.7 44-51.8 0-25.7-18.5-47.6-43.9-51.8l-41.7-7c-6-1-10.4-6.2-10.4-12.3 0-6.9 5.6-12.5 12.5-12.5l47.5 0c11 0 20-9 20-20s-9-20-20-20l-8 0 0-4c0-11-9-20-20-20s-20 9-20 20z\"]\n};\nvar faSpaghettiMonsterFlying = {\n  prefix: 'fas',\n  iconName: 'spaghetti-monster-flying',\n  icon: [640, 512, [\"pastafarianism\"], \"f67b\", \"M208 64a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm48 0c0 16.2-6 31.1-16 42.3l15.6 31.2c18.7-6 39.9-9.5 64.4-9.5s45.8 3.5 64.4 9.5L400 106.3c-10-11.3-16-26.1-16-42.3 0-35.3 28.7-64 64-64s64 28.7 64 64-28.7 64-64 64c-1.7 0-3.4-.1-5.1-.2L427.8 158c21.1 13.6 37.7 30.2 51.4 46.4 7.1 8.3 13.5 16.6 19.3 24l1.4 1.8c6.3 8.1 11.6 14.8 16.7 20.4 10.7 11.7 16.1 13.4 19.4 13.4 2.5 0 4.3-.6 7.1-3.3 3.7-3.5 7.1-8.8 12.5-17.4l.6-.9c4.6-7.4 11-17.6 19.4-25.7 9.7-9.3 22.9-16.7 40.4-16.7 13.3 0 24 10.7 24 24s-10.7 24-24 24c-2.5 0-4.3 .6-7.1 3.3-3.7 3.5-7.1 8.8-12.5 17.4l-.6 .9c-4.6 7.4-11 17.6-19.4 25.7-9.7 9.3-22.9 16.7-40.4 16.7-18.5 0-32.9-8.5-44.3-18.6-3.1 4-6.6 8.3-10.5 12.7 1.4 4.3 2.8 8.5 4 12.5 .9 3 1.8 5.8 2.6 8.6 3 9.8 5.5 18.2 8.6 25.9 3.9 9.8 7.4 15.4 10.8 18.5 2.6 2.4 5.9 4.3 12.8 4.3 8.7 0 16.9-4.2 33.7-13.2 15-8 35.7-18.8 62.3-18.8 13.3 0 24 10.7 24 24s-10.7 24-24 24c-13.4 0-24.7 5.2-39.7 13.2-1 .6-2.1 1.1-3.2 1.7-13.1 7.1-31.6 17.1-53.1 17.1-18.4 0-33.6-6.1-45.5-17.2-11.1-10.3-17.9-23.7-22.7-36-3.6-9-6.7-19.1-9.5-28.5-16.4 12.3-36.1 23.6-58.9 31.3 3.6 10.8 8.4 23.5 14.4 36.2 7.5 15.9 16.2 30.4 25.8 40.5 9.6 10.2 17.7 13.7 24.5 13.7 13.3 0 24 10.7 24 24s-10.7 24-24 24c-25.2 0-45-13.5-59.5-28.8-14.5-15.4-25.7-34.9-34.2-53-8-17-14.1-33.8-18.3-46.9-5.2 .4-10.6 .6-16 .6s-10.8-.2-16-.6c-4.2 13-10.3 29.9-18.3 46.9-8.5 18.1-19.8 37.6-34.2 53-14.4 15.3-34.3 28.8-59.5 28.8-13.3 0-24-10.7-24-24s10.7-24 24-24c6.8 0 15-3.5 24.5-13.7 9.5-10.1 18.3-24.6 25.8-40.5 5.9-12.6 10.7-25.4 14.4-36.2-22.8-7.7-42.5-19-58.9-31.3-2.9 9.4-6 19.5-9.5 28.5-4.8 12.2-11.6 25.6-22.7 36-11.9 11.1-27.1 17.2-45.5 17.2-13.1 0-24.5-4.1-33.8-8.9-7.9-4-15.7-9.2-22.1-13.5l0 0-2.4-1.6c-15.3-10.2-25.8-16-37.7-16-13.3 0-24-10.7-24-24s10.7-24 24-24c28.1 0 49.6 14.2 64.3 24l2.4 1.6c6.9 4.6 12.1 8.1 17.2 10.7 5.5 2.8 9.1 3.6 12 3.6 6.8 0 10.2-1.9 12.8-4.3 3.4-3.2 7-8.8 10.8-18.5 3-7.7 5.6-16.1 8.6-25.9 .8-2.7 1.7-5.6 2.6-8.6 1.2-4 2.6-8.2 4-12.5-3.9-4.5-7.4-8.8-10.5-12.7-11.4 10.1-25.9 18.6-44.3 18.6-17.5 0-30.7-7.4-40.4-16.7-8.4-8.1-14.8-18.3-19.4-25.7l-.6-.9c-5.4-8.6-8.8-13.9-12.5-17.4-2.8-2.7-4.6-3.3-7.1-3.3-13.3 0-24-10.7-24-24s10.7-24 24-24c17.5 0 30.7 7.4 40.4 16.7 8.4 8.1 14.8 18.3 19.4 25.7l.6 .9c5.4 8.6 8.8 13.9 12.5 17.4 2.8 2.7 4.6 3.3 7.1 3.3 3.3 0 8.7-1.7 19.4-13.4 5.1-5.6 10.4-12.3 16.7-20.4l1.4-1.8c5.8-7.4 12.2-15.7 19.3-24 13.8-16.2 30.3-32.8 51.4-46.4l-15.1-30.2c-1.7 .1-3.4 .2-5.1 .2-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64zm208 0a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"]\n};\nvar faPastafarianism = faSpaghettiMonsterFlying;\nvar faMartiniGlassCitrus = {\n  prefix: 'fas',\n  iconName: 'martini-glass-citrus',\n  icon: [640, 512, [\"cocktail\"], \"f561\", \"M576 80c0-44.2-35.8-80-80-80-18 0-34.6 6-48 16l-81 0c23.6-47.4 72.5-80 129-80 79.5 0 144 64.5 144 144S575.5 224 496 224c-6.5 0-13-.4-19.3-1.3l64-74.7c1.1-1.3 2.2-2.7 3.3-4.1 19.4-14.6 32-37.8 32-64zM66.9 82.6C72.2 71.3 83.5 64 96 64l384 0c12.5 0 23.8 7.3 29.1 18.6s3.4 24.7-4.8 34.2l-184.3 215 0 116.2 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0 0-116.2-184.3-215c-8.1-9.5-10-22.8-4.8-34.2zM165.6 128L288 270.8 410.4 128 165.6 128z\"]\n};\nvar faCocktail = faMartiniGlassCitrus;\nvar faBullhorn = {\n  prefix: 'fas',\n  iconName: 'bullhorn',\n  icon: [512, 512, [128226, 128363], \"f0a1\", \"M461.2 18.9C472.7 24 480 35.4 480 48l0 416c0 12.6-7.3 24-18.8 29.1s-24.8 3.2-34.3-5.1l-46.6-40.7c-43.6-38.1-98.7-60.3-156.4-63l0 95.7c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-96C57.3 384 0 326.7 0 256S57.3 128 128 128l84.5 0c61.8-.2 121.4-22.7 167.9-63.3l46.6-40.7c9.4-8.3 22.9-10.2 34.3-5.1zM224 320l0 .2c70.3 2.7 137.8 28.5 192 73.4l0-275.3c-54.2 44.9-121.7 70.7-192 73.4L224 320z\"]\n};\nvar faBoxTissue = {\n  prefix: 'fas',\n  iconName: 'box-tissue',\n  icon: [512, 512, [], \"e05b\", \"M103.9 32l161 0c13.8 0 26 8.8 30.4 21.9l17.4 52.2c4.4 13.1 16.6 21.9 30.4 21.9l60.5 0c21.8 0 37.3 21.4 30.4 42.1L384 320 128 320 72.7 70.9C68.2 51 83.4 32 103.9 32zM48 256l16.6 0 16.5 74.4C86 352.4 105.5 368 128 368l256 0c20.7 0 39-13.2 45.5-32.8l26.4-79.2 8.1 0c26.5 0 48 21.5 48 48l0 128c0 26.5-21.5 48-48 48L48 480c-26.5 0-48-21.5-48-48L0 304c0-26.5 21.5-48 48-48z\"]\n};\nvar faMattressPillow = {\n  prefix: 'fas',\n  iconName: 'mattress-pillow',\n  icon: [576, 512, [], \"e525\", \"M256 64L64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l192 0 0-384zm48 384l208 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64l-208 0 0 384zM64 160c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 192c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-192z\"]\n};\nvar faChevronLeft = {\n  prefix: 'fas',\n  iconName: 'chevron-left',\n  icon: [320, 512, [9001], \"f053\", \"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l192 192c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256 246.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192z\"]\n};\nvar faCloudMoonRain = {\n  prefix: 'fas',\n  iconName: 'cloud-moon-rain',\n  icon: [576, 512, [], \"f73c\", \"M448 0c-68.6 0-127.1 43.1-149.8 103.8 17.1 14.1 29.6 33.5 34.9 55.8 39.9 21.7 66.9 63.9 66.9 112.5 0 13.5-2.1 26.5-5.9 38.7 16.9 6 35 9.3 53.9 9.3 43 0 82.1-17 110.8-44.6 4.6-4.4 5.9-11.2 3.3-17s-8.6-9.3-14.9-8.8c-3 .2-6.1 .4-9.2 .4-63.5 0-115-51.5-115-115 0-45.1 26-84.2 63.8-103 5.7-2.8 9-8.9 8.2-15.2S489.6 5.3 483.4 3.9C472 1.4 460.2 0 448 0zM272 352c44.2 0 80-35.8 80-80 0-39-27.9-71.5-64.8-78.6 .5-3.1 .8-6.2 .8-9.4 0-30.9-25.1-56-56-56-12.4 0-23.9 4-33.1 10.8-13.4-25.5-40.1-42.8-70.9-42.8-44.2 0-80 35.8-80 80 0 7.4 1 14.6 2.9 21.5-29.8 11.6-50.9 40.6-50.9 74.5 0 44.2 35.8 80 80 80l192 0zM69 401.1c-12.6-4.2-26.2 2.6-30.4 15.2L17.2 480.4C13 493 19.8 506.6 32.4 510.8s26.2-2.6 30.4-15.2l21.4-64.1c4.2-12.6-2.6-26.2-15.2-30.4zm120 0c-12.6-4.2-26.2 2.6-30.4 15.2l-21.4 64.1c-4.2 12.6 2.6 26.2 15.2 30.4s26.2-2.6 30.4-15.2l21.4-64.1c4.2-12.6-2.6-26.2-15.2-30.4zm120 0c-12.6-4.2-26.2 2.6-30.4 15.2l-21.4 64.1c-4.2 12.6 2.6 26.2 15.2 30.4s26.2-2.6 30.4-15.2l21.4-64.1c4.2-12.6-2.6-26.2-15.2-30.4z\"]\n};\nvar faArrowDown19 = {\n  prefix: 'fas',\n  iconName: 'arrow-down-1-9',\n  icon: [512, 512, [\"sort-numeric-asc\", \"sort-numeric-down\"], \"f162\", \"M418.7 38c8.3 6 13.3 15.7 13.3 26l0 96 16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-51.6-5.9 2c-16.8 5.6-34.9-3.5-40.5-20.2s3.5-34.9 20.2-40.5l48-16c9.8-3.3 20.5-1.6 28.8 4.4zM365.1 430.6l11.7-18c-32.9-9.9-56.8-40.5-56.8-76.6 0-44.2 35.8-80 80-80s80 35.8 80 80c0 22.9-6.6 45.3-19.1 64.5l-42.1 64.9c-9.6 14.8-29.4 19.1-44.3 9.4s-19.1-29.4-9.4-44.3zM424 336a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM150.6 470.6c-12.5 12.5-32.8 12.5-45.3 0l-96-96c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L96 370.7 96 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 306.7 41.4-41.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-96 96z\"]\n};\nvar faSortNumericAsc = faArrowDown19;\nvar faSortNumericDown = faArrowDown19;\nvar faHandSpock = {\n  prefix: 'fas',\n  iconName: 'hand-spock',\n  icon: [512, 512, [128406], \"f259\", \"M214.9 23.7C210.3 6.6 192.8-3.5 175.7 1.1s-27.2 22.1-22.6 39.2L206 237.8c2.5 9.2-4.5 18.2-14 18.2-6.4 0-12-4.2-13.9-10.3L134.6 102.7c-5.1-16.9-23-26.4-39.9-21.3s-26.4 23-21.3 39.9l62.8 206.4c2.4 7.9-7.2 13.8-13.2 8.1L67.6 283c-16-15.2-41.3-14.6-56.6 1.4S-3.6 325.7 12.4 341L124.8 448c43.1 41.1 100.4 64 160 64l19.1 0c.1 0 .1-.1 .1-.1s.1-.1 .1-.1c58.3-3.5 108.6-43.2 125.3-99.7l81.2-275c5-16.9-4.7-34.7-21.6-39.8s-34.7 4.7-39.8 21.6L411.5 247.1c-1.6 5.3-6.4 8.9-12 8.9-7.9 0-13.8-7.3-12.2-15.1l36-170.3c3.7-17.3-7.4-34.3-24.7-37.9s-34.3 7.4-37.9 24.7L323.1 235.1c-2.6 12.2-13.3 20.9-25.8 20.9-11.9 0-22.4-8-25.4-19.5l-57-212.8z\"]\n};\nvar faWandMagicSparkles = {\n  prefix: 'fas',\n  iconName: 'wand-magic-sparkles',\n  icon: [576, 512, [\"magic-wand-sparkles\"], \"e2ca\", \"M263.4-27L278.2 9.8 315 24.6c3 1.2 5 4.2 5 7.4s-2 6.2-5 7.4L278.2 54.2 263.4 91c-1.2 3-4.2 5-7.4 5s-6.2-2-7.4-5L233.8 54.2 197 39.4c-3-1.2-5-4.2-5-7.4s2-6.2 5-7.4L233.8 9.8 248.6-27c1.2-3 4.2-5 7.4-5s6.2 2 7.4 5zM110.7 41.7l21.5 50.1 50.1 21.5c5.9 2.5 9.7 8.3 9.7 14.7s-3.8 12.2-9.7 14.7l-50.1 21.5-21.5 50.1c-2.5 5.9-8.3 9.7-14.7 9.7s-12.2-3.8-14.7-9.7L59.8 164.2 9.7 142.7C3.8 140.2 0 134.4 0 128s3.8-12.2 9.7-14.7L59.8 91.8 81.3 41.7C83.8 35.8 89.6 32 96 32s12.2 3.8 14.7 9.7zM464 304c6.4 0 12.2 3.8 14.7 9.7l21.5 50.1 50.1 21.5c5.9 2.5 9.7 8.3 9.7 14.7s-3.8 12.2-9.7 14.7l-50.1 21.5-21.5 50.1c-2.5 5.9-8.3 9.7-14.7 9.7s-12.2-3.8-14.7-9.7l-21.5-50.1-50.1-21.5c-5.9-2.5-9.7-8.3-9.7-14.7s3.8-12.2 9.7-14.7l50.1-21.5 21.5-50.1c2.5-5.9 8.3-9.7 14.7-9.7zM460 0c11 0 21.6 4.4 29.5 12.2l42.3 42.3C539.6 62.4 544 73 544 84s-4.4 21.6-12.2 29.5l-88.2 88.2-101.3-101.3 88.2-88.2C438.4 4.4 449 0 460 0zM44.2 398.5L308.4 134.3 409.7 235.6 145.5 499.8C137.6 507.6 127 512 116 512s-21.6-4.4-29.5-12.2L44.2 457.5C36.4 449.6 32 439 32 428s4.4-21.6 12.2-29.5z\"]\n};\nvar faMagicWandSparkles = faWandMagicSparkles;\nvar faCommentMedical = {\n  prefix: 'fas',\n  iconName: 'comment-medical',\n  icon: [512, 512, [], \"f7f5\", \"M256 480c141.4 0 256-107.5 256-240S397.4 0 256 0 0 107.5 0 240c0 54.3 19.2 104.3 51.6 144.5L2.8 476.8c-4.8 9-3.3 20 3.6 27.5s17.8 9.8 27.1 5.8l118.4-50.7C183.7 472.6 218.9 480 256 480zM217.6 153.6c0-10.6 8.6-19.2 19.2-19.2l38.4 0c10.6 0 19.2 8.6 19.2 19.2l0 48 48 0c10.6 0 19.2 8.6 19.2 19.2l0 38.4c0 10.6-8.6 19.2-19.2 19.2l-48 0 0 48c0 10.6-8.6 19.2-19.2 19.2l-38.4 0c-10.6 0-19.2-8.6-19.2-19.2l0-48-48 0c-10.6 0-19.2-8.6-19.2-19.2l0-38.4c0-10.6 8.6-19.2 19.2-19.2l48 0 0-48z\"]\n};\nvar faBellSlash = {\n  prefix: 'fas',\n  iconName: 'bell-slash',\n  icon: [576, 512, [128277, 61943], \"f1f6\", \"M41-24.9c-9.4-9.4-24.6-9.4-33.9 0S-2.3-.3 7 9.1l528 528c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-87.5-87.5c17.2-2.4 30.5-17.3 30.5-35.2 0-8.1-2.7-15.9-7.8-22.2l-9.8-12.2C464.4 308.5 448 261.8 448 213.7l0-21.7c0-77.4-55-142-128-156.8l0-3.2c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 3.2c-38.6 7.8-72.2 29.6-95.2 59.7L41-24.9zm87 238.5c0 48.1-16.4 94.8-46.4 132.4l-9.8 12.2c-5 6.3-7.8 14.1-7.8 22.2 0 19.6 15.9 35.5 35.5 35.5l235.3 0-206.9-206.9 0 4.5zM288 512c29.8 0 54.9-20.4 62-48l-124 0c7.1 27.6 32.2 48 62 48z\"]\n};\nvar faHandshakeSlash = {\n  prefix: 'fas',\n  iconName: 'handshake-slash',\n  icon: [576, 512, [57439, \"handshake-alt-slash\", \"handshake-simple-slash\"], \"e060\", \"M41-24.9c-9.4-9.4-24.6-9.4-33.9 0S-2.3-.3 7 9.1l528 528c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-288-288 14.2-14.2c4.2-4.2 9.5-6.5 14.9-6.9 6.8-.6 13.8 1.7 19 6.9L505.6 376 576 320 576 32 464 96 440.2 80.1C424.4 69.6 405.9 64 386.9 64l-70.4 0c-1.1 0-2.3 0-3.4 .1-16.9 .9-32.8 8.5-44.2 21.1l-55.8 62.1-34-34 44.3-49.2-39.7 0c-15.3 0-30.1 3.6-43.5 10.4L41-24.9zM0 69.8L0 320 156.4 450.3c23 19.2 52 29.7 81.9 29.7l15.7 0-7-7c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l41 41 9 0c22.2 0 43.8-5.8 62.8-16.4L0 69.8z\"]\n};\nvar faHandshakeAltSlash = faHandshakeSlash;\nvar faHandshakeSimpleSlash = faHandshakeSlash;\nvar faBottleWater = {\n  prefix: 'fas',\n  iconName: 'bottle-water',\n  icon: [320, 512, [], \"e4c5\", \"M112-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0C94.3 32 80 17.7 80 0s14.3-32 32-32zM16 144c0-35.3 28.7-64 64-64l160 0c35.3 0 64 28.7 64 64 0 24.1-13.3 45.1-33 56 19.7 10.9 33 31.9 33 56s-13.3 45.1-33 56c19.7 10.9 33 31.9 33 56s-13.3 45.1-33 56c19.7 10.9 33 31.9 33 56 0 35.3-28.7 64-64 64L80 544c-35.3 0-64-28.7-64-64 0-24.1 13.3-45.1 33-56-19.7-10.9-33-31.9-33-56s13.3-45.1 33-56c-19.7-10.9-33-31.9-33-56s13.3-45.1 33-56c-19.7-10.9-33-31.9-33-56z\"]\n};\nvar faDiceD20 = {\n  prefix: 'fas',\n  iconName: 'dice-d20',\n  icon: [512, 512, [], \"f6cf\", \"M224.4-8.2c19.6-11.1 43.6-11.1 63.1 0l192 108.8c20 11.4 32.4 32.6 32.4 55.7l0 215.6c0 23-12.4 44.3-32.4 55.7l-192 108.8c-19.6 11.1-43.6 11.1-63.1 0L32.4 427.5C12.4 416.1 0 394.8 0 371.8L0 156.2c0-23 12.4-44.3 32.4-55.7L224.4-8.2zm52 73.2C267 49.8 245 49.8 235.6 65l-76.6 123.7-85.4-46.3-3.8-1.6c-8.9-2.7-18.8 1.1-23.4 9.6s-2.4 18.9 4.7 24.8l3.3 2.3 83.4 45.2-74.6 120.6C55.3 356.2 61 373 75 378.4l161 61.9 0 39.7c0 11 9 20 20 20s20-9 20-20l0-39.7 161-61.9c14-5.4 19.7-22.2 11.8-35l-74.7-120.6 83.4-45.2c9.7-5.3 13.3-17.4 8.1-27.1s-17.4-13.3-27.1-8.1L353 188.7 276.4 65zm-47 329.9l-122-46.9 54.5-88.1 67.5 135zM404.6 348l-122 46.9 67.5-135 54.5 88.1zM319.3 232L256 358.6 192.7 232 319.3 232zM308 192l-104.1 0 52-84 52 84z\"]\n};\nvar faArrowDownZA = {\n  prefix: 'fas',\n  iconName: 'arrow-down-z-a',\n  icon: [512, 512, [\"sort-alpha-desc\", \"sort-alpha-down-alt\"], \"f881\", \"M230.6 390.6l-80 80c-12.5 12.5-32.8 12.5-45.3 0l-80-80c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L96 370.7 96 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 306.7 25.4-25.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zM288 64c0-17.7 14.3-32 32-32l128 0c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9L397.3 160 448 160c17.7 0 32 14.3 32 32s-14.3 32-32 32l-128 0c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9L370.8 96 320 96c-17.7 0-32-14.3-32-32zM412.6 273.7l80 160c7.9 15.8 1.5 35-14.3 42.9s-35 1.5-42.9-14.3l-7.2-14.3-88.4 0-7.2 14.3c-7.9 15.8-27.1 22.2-42.9 14.3s-22.2-27.1-14.3-42.9l80-160c5.4-10.8 16.5-17.7 28.6-17.7s23.2 6.8 28.6 17.7zM384 359.6l-20.2 40.4 40.4 0-20.2-40.4z\"]\n};\nvar faSortAlphaDesc = faArrowDownZA;\nvar faSortAlphaDownAlt = faArrowDownZA;\nvar faBrush = {\n  prefix: 'fas',\n  iconName: 'brush',\n  icon: [384, 512, [], \"f55d\", \"M162.4 6c-1.5-3.6-5-6-8.9-6l-19 0c-3.9 0-7.5 2.4-8.9 6L104.9 57.7c-3.2 8-14.6 8-17.8 0L66.4 6c-1.5-3.6-5-6-8.9-6L48 0C21.5 0 0 21.5 0 48l0 208 384 0 0-208c0-26.5-21.5-48-48-48L230.5 0c-3.9 0-7.5 2.4-8.9 6L200.9 57.7c-3.2 8-14.6 8-17.8 0L162.4 6zM0 304l0 16c0 35.3 28.7 64 64 64l64 0 0 64c0 35.3 28.7 64 64 64s64-28.7 64-64l0-64 64 0c35.3 0 64-28.7 64-64l0-16-384 0zM192 464c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"]\n};\nvar faPersonWalkingDashedLineArrowRight = {\n  prefix: 'fas',\n  iconName: 'person-walking-dashed-line-arrow-right',\n  icon: [640, 512, [], \"e553\", \"M160 80a56 56 0 1 0 0-112 56 56 0 1 0 0 112zM73.4 227.9l22.6-22.6 0 69.3c0 28 12.2 54.7 33.5 72.9l71.4 61.2c5.9 5.1 9.8 12.1 10.9 19.8l12.6 88.1c2.5 17.5 18.7 29.7 36.2 27.2s29.7-18.7 27.2-36.2l-12.6-88.1c-3.3-23.1-14.9-44.1-32.6-59.3l-34.5-29.6 0-115.2 3.8 4.7c18.2 22.8 45.8 36 75 36l33.2 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-33.2 0c-9.7 0-18.9-4.4-25-12l-17.9-22.4c-23-28.8-57.9-45.6-94.8-45.6-32.2 0-63.1 12.8-85.8 35.6L28.1 182.6C10.1 200.6 0 225 0 250.5L0 288c0 17.7 14.3 32 32 32s32-14.3 32-32l0-37.5c0-8.5 3.4-16.6 9.4-22.6zM85.8 407.3c-1.5 5.2-4.3 10-8.1 13.8L9.4 489.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l68.3-68.3c11.5-11.5 19.9-25.8 24.4-41.5l2.2-7.6-46-39.4c-2.5-2.2-5-4.4-7.4-6.8L85.8 407.3zM432 8c0-13.3-10.7-24-24-24S384-5.3 384 8l0 32c0 13.3 10.7 24 24 24s24-10.7 24-24l0-32zm0 128c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 32c0 13.3 10.7 24 24 24s24-10.7 24-24l0-32zM408 320c-13.3 0-24 10.7-24 24l0 32c0 13.3 10.7 24 24 24s24-10.7 24-24l0-32c0-13.3-10.7-24-24-24zm24 152c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 32c0 13.3 10.7 24 24 24s24-10.7 24-24l0-32zM609 273c9.4-9.4 9.4-24.6 0-33.9l-72-72c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l31 31-102.1 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l102.1 0-31 31c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l72-72z\"]\n};\nvar faArrowUpShortWide = {\n  prefix: 'fas',\n  iconName: 'arrow-up-short-wide',\n  icon: [576, 512, [\"sort-amount-up-alt\"], \"f885\", \"M320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0zm0 128c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0zm0 128c-17.7 0-32 14.3-32 32s14.3 32 32 32l160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0zm0 128c-17.7 0-32 14.3-32 32s14.3 32 32 32l224 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-224 0zM150.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L96 141.3 96 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-306.7 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96z\"]\n};\nvar faSortAmountUpAlt = faArrowUpShortWide;\nvar faGripVertical = {\n  prefix: 'fas',\n  iconName: 'grip-vertical',\n  icon: [320, 512, [\"grid-vertical\"], \"f58e\", \"M128 40c0-22.1-17.9-40-40-40L40 0C17.9 0 0 17.9 0 40L0 88c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48zm0 192c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48zM0 424l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM320 40c0-22.1-17.9-40-40-40L232 0c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48zM192 232l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM320 424c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48z\"]\n};\nvar faGridVertical = faGripVertical;\nvar faCarTunnel = {\n  prefix: 'fas',\n  iconName: 'car-tunnel',\n  icon: [512, 512, [], \"e4de\", \"M256 0C114.6 0 0 114.6 0 256L0 448c0 35.3 28.7 64 64 64l42.8 0c-6.6-5.9-10.8-14.4-10.8-24l0-113.1c0-13.5 3.1-26.8 9-38.9l39.7-80.8c9.4-19.1 28.9-31.3 50.2-31.3L317 224c21.3 0 40.8 12.1 50.2 31.3L407 336c5.9 12.1 9 25.4 9 38.9L416 488c0 9.6-4.2 18.1-10.8 24l42.8 0c35.3 0 64-28.7 64-64l0-192C512 114.6 397.4 0 256 0zM362.8 512c-6.6-5.9-10.8-14.4-10.8-24l0-24-192 0 0 24c0 9.6-4.2 18.1-10.8 24l213.7 0zm-175-235.5l-29.3 59.5 194.9 0-29.3-59.5c-1.3-2.7-4.1-4.5-7.2-4.5L195 272c-3 0-5.8 1.7-7.2 4.5zM176 424a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm184-24a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"]\n};\nvar faChartColumn = {\n  prefix: 'fas',\n  iconName: 'chart-column',\n  icon: [512, 512, [], \"e0e3\", \"M32 32c17.7 0 32 14.3 32 32l0 336c0 8.8 7.2 16 16 16l400 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L80 480c-44.2 0-80-35.8-80-80L0 64C0 46.3 14.3 32 32 32zM144 224c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32zm144-64l0 160c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-160c0-17.7 14.3-32 32-32s32 14.3 32 32zm80 32c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32zM512 96l0 224c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-224c0-17.7 14.3-32 32-32s32 14.3 32 32z\"]\n};\nvar faCapricorn = {\n  prefix: 'fas',\n  iconName: 'capricorn',\n  icon: [576, 512, [], \"e848\", \"M240 32c79.5 0 144 64.5 144 144l0 65.2c18.8-10.9 40.7-17.2 64-17.2 70.7 0 128 57.3 128 128S518.7 480 448 480c-35.8 0-68.2-14.7-91.4-38.4-28.8 42.5-77.4 70.4-132.6 70.4-17.7 0-32-14.3-32-32s14.3-32 32-32c53 0 96-43 96-96l0-176c0-44.2-35.8-80-80-80s-80 35.8-80 80l0 208c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-224c0-35.3-28.7-64-64-64-17.7 0-32-14.3-32-32S14.3 32 32 32C72.6 32 108.8 51 132.2 80.5 158.6 50.7 197.1 32 240 32zM448 288a64 64 0 1 0 0 128 64 64 0 1 0 0-128z\"]\n};\nvar faTruckArrowRight = {\n  prefix: 'fas',\n  iconName: 'truck-arrow-right',\n  icon: [576, 512, [], \"e58b\", \"M64 32C28.7 32 0 60.7 0 96L0 384c0 35.3 28.7 64 64 64l3.3 0c10.4 36.9 44.4 64 84.7 64s74.2-27.1 84.7-64l102.6 0c10.4 36.9 44.4 64 84.7 64s74.2-27.1 84.7-64l3.3 0c35.3 0 64-28.7 64-64l0-146.7c0-17-6.7-33.3-18.7-45.3L512 146.7c-12-12-28.3-18.7-45.3-18.7l-50.7 0 0-32c0-35.3-28.7-64-64-64L64 32zM512 237.3l0 50.7-96 0 0-96 50.7 0 45.3 45.3zM152 384a40 40 0 1 1 0 80 40 40 0 1 1 0-80zm232 40a40 40 0 1 1 80 0 40 40 0 1 1 -80 0zM305 225l-72 72c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l31-31-102.1 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l102.1 0-31-31c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l72 72c9.4 9.4 9.4 24.6 0 33.9z\"]\n};\nvar faTv = {\n  prefix: 'fas',\n  iconName: 'tv',\n  icon: [576, 512, [63717, \"television\", \"tv-alt\"], \"f26c\", \"M64 96l0 240 448 0 0-240-448 0zM0 96C0 60.7 28.7 32 64 32l448 0c35.3 0 64 28.7 64 64l0 240c0 35.3-28.7 64-64 64L64 400c-35.3 0-64-28.7-64-64L0 96zM160 448l256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nvar faTelevision = faTv;\nvar faTvAlt = faTv;\nvar faSection = {\n  prefix: 'fas',\n  iconName: 'section',\n  icon: [256, 512, [], \"e447\", \"M110 0C49.2 0 0 49.2 0 110 0 133.7 7.6 155.8 20.5 174 7.6 192 0 214.1 0 238 0 291.7 38.9 337.6 91.9 346.4l61.7 10.3c22.2 3.7 38.4 22.9 38.4 45.3 0 25.4-20.6 46-46 46l-98 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l98 0c60.7 0 110-49.2 110-110 0-23.7-7.6-45.9-20.5-64 12.9-18 20.5-40.1 20.5-64 0-53.8-38.9-99.6-91.9-108.5l-61.7-10.3C80.2 151.6 64 132.4 64 110 64 84.6 84.6 64 110 64l98 0c17.7 0 32-14.3 32-32S225.7 0 208 0L110 0zm74.7 299.1c-6.5-2.4-13.4-4.3-20.5-5.5l-61.7-10.3c-22.2-3.7-38.4-22.9-38.4-45.3 0-9.2 2.7-17.8 7.4-25 6.5 2.4 13.4 4.3 20.5 5.5l61.7 10.3c22.2 3.7 38.4 22.9 38.4 45.3 0 9.2-2.7 17.8-7.4 25z\"]\n};\nvar faPeace = {\n  prefix: 'fas',\n  iconName: 'peace',\n  icon: [512, 512, [9774], \"f67c\", \"M224 445.3l0-121.8-94.3 77.1c26.1 22.8 58.5 38.7 94.3 44.7zM89.2 351.1L224 240.8 224 66.7c-90.8 15.2-160 94.2-160 189.3 0 34.6 9.2 67.1 25.2 95.1zm293.1 49.5l-94.3-77.1 0 121.8c35.7-6 68.1-21.9 94.3-44.7zm40.6-49.5c16-28 25.2-60.5 25.2-95.1 0-95.1-69.2-174.1-160-189.3l0 174.2 134.8 110.3zM0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0z\"]\n};\nvar faStar = {\n  prefix: 'fas',\n  iconName: 'star',\n  icon: [576, 512, [11088, 61446], \"f005\", \"M309.5-18.9c-4.1-8-12.4-13.1-21.4-13.1s-17.3 5.1-21.4 13.1L193.1 125.3 33.2 150.7c-8.9 1.4-16.3 7.7-19.1 16.3s-.5 18 5.8 24.4l114.4 114.5-25.2 159.9c-1.4 8.9 2.3 17.9 9.6 23.2s16.9 6.1 25 2L288.1 417.6 432.4 491c8 4.1 17.7 3.3 25-2s11-14.2 9.6-23.2L441.7 305.9 556.1 191.4c6.4-6.4 8.6-15.8 5.8-24.4s-10.1-14.9-19.1-16.3L383 125.3 309.5-18.9z\"]\n};\nvar faFlag = {\n  prefix: 'fas',\n  iconName: 'flag',\n  icon: [448, 512, [127988, 61725], \"f024\", \"M64 32C64 14.3 49.7 0 32 0S0 14.3 0 32L0 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-121.6 62.7-18.8c41.9-12.6 87.1-8.7 126.2 10.9 42.7 21.4 92.5 24 137.2 7.2l37.1-13.9c12.5-4.7 20.8-16.6 20.8-30l0-247.7c0-23-24.2-38-44.8-27.7l-11.8 5.9c-44.9 22.5-97.8 22.5-142.8 0-36.4-18.2-78.3-21.8-117.2-10.1L64 54.4 64 32z\"]\n};\nvar faTriangleExclamation = {\n  prefix: 'fas',\n  iconName: 'triangle-exclamation',\n  icon: [512, 512, [9888, \"exclamation-triangle\", \"warning\"], \"f071\", \"M256 0c14.7 0 28.2 8.1 35.2 21l216 400c6.7 12.4 6.4 27.4-.8 39.5S486.1 480 472 480L40 480c-14.1 0-27.2-7.4-34.4-19.5s-7.5-27.1-.8-39.5l216-400c7-12.9 20.5-21 35.2-21zm0 352a32 32 0 1 0 0 64 32 32 0 1 0 0-64zm0-192c-18.2 0-32.7 15.5-31.4 33.7l7.4 104c.9 12.5 11.4 22.3 23.9 22.3 12.6 0 23-9.7 23.9-22.3l7.4-104c1.3-18.2-13.1-33.7-31.4-33.7z\"]\n};\nvar faExclamationTriangle = faTriangleExclamation;\nvar faWarning = faTriangleExclamation;\nvar faSchoolCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'school-circle-exclamation',\n  icon: [640, 512, [], \"e56c\", \"M64 128c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l276 0c-10.5-14.6-19-30.7-25.1-48l-90.9 0 0-88c0-22.1 17.9-40 40-40l48 0c1 0 1.9 0 2.9 .1 26.3-74.6 97.5-128.1 181.1-128.1 28.6 0 55.6 6.2 80 17.4l0-33.4c0-35.3-28.7-64-64-64l-64 0-127.9-115.1c-18.3-16.4-46-16.4-64.2 0L128 128 64 128zm64 240c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32zM112 256l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16zM288 128a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM496 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-100a20 20 0 1 1 0 40 20 20 0 1 1 0-40zm0-140c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nvar faGraduationCap = {\n  prefix: 'fas',\n  iconName: 'graduation-cap',\n  icon: [576, 512, [127891, \"mortar-board\"], \"f19d\", \"M48 195.8l209.2 86.1c9.8 4 20.2 6.1 30.8 6.1s21-2.1 30.8-6.1l242.4-99.8c9-3.7 14.8-12.4 14.8-22.1s-5.8-18.4-14.8-22.1L318.8 38.1C309 34.1 298.6 32 288 32s-21 2.1-30.8 6.1L14.8 137.9C5.8 141.6 0 150.3 0 160L0 456c0 13.3 10.7 24 24 24s24-10.7 24-24l0-260.2zm48 71.7L96 384c0 53 86 96 192 96s192-43 192-96l0-116.6-142.9 58.9c-15.6 6.4-32.2 9.7-49.1 9.7s-33.5-3.3-49.1-9.7L96 267.4z\"]\n};\nvar faMortarBoard = faGraduationCap;\nvar faStore = {\n  prefix: 'fas',\n  iconName: 'store',\n  icon: [512, 512, [], \"f54e\", \"M30.7 72.3C37.6 48.4 59.5 32 84.4 32l344 0c24.9 0 46.8 16.4 53.8 40.3l23.4 80.2c12.8 43.7-20.1 87.5-65.6 87.5-26.3 0-49.4-14.9-60.8-37.1-11.6 21.9-34.6 37.1-61.4 37.1-26.6 0-49.7-15-61.3-37-11.6 22-34.7 37-61.3 37-26.8 0-49.8-15.1-61.4-37.1-11.4 22.1-34.5 37.1-60.8 37.1-45.6 0-78.4-43.7-65.6-87.5L30.7 72.3zM96.4 352l320 0 0-66.4c7.6 1.6 15.5 2.4 23.5 2.4 14.3 0 28-2.6 40.5-7.2l0 151.2c0 26.5-21.5 48-48 48l-352 0c-26.5 0-48-21.5-48-48l0-151.2c12.5 4.6 26.1 7.2 40.5 7.2 8.1 0 15.9-.8 23.5-2.4l0 66.4z\"]\n};\nvar faUserAstronaut = {\n  prefix: 'fas',\n  iconName: 'user-astronaut',\n  icon: [448, 512, [], \"f4fb\", \"M224 336c74.6 0 138.4-46.4 164-112l4 0c13.3 0 24-10.7 24-24l0-80c0-13.3-10.7-24-24-24l-4 0C362.4 30.4 298.6-16 224-16S85.6 30.4 60 96l-4 0c-13.3 0-24 10.7-24 24l0 80c0 13.3 10.7 24 24 24l4 0c25.6 65.6 89.4 112 164 112zM208 80l32 0c53 0 96 43 96 96s-43 96-96 96l-32 0c-53 0-96-43-96-96s43-96 96-96zM16 484.6C16 499.7 28.3 512 43.4 512l52.6 0 0-48c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32l0 48 52.6 0c15.1 0 27.4-12.3 27.4-27.4 0-59.8-31.9-112.2-79.6-141-36.4 25.5-80.6 40.4-128.4 40.4s-92-14.9-128.4-40.4C47.9 372.4 16 424.8 16 484.6zM183.3 141.5c-.9-3.3-3.9-5.5-7.3-5.5s-6.4 2.2-7.3 5.5l-6 21.2-21.2 6c-3.3 .9-5.5 3.9-5.5 7.3s2.2 6.4 5.5 7.3l21.2 6 6 21.2c.9 3.3 3.9 5.5 7.3 5.5s6.4-2.2 7.3-5.5l6-21.2 21.2-6c3.3-.9 5.5-3.9 5.5-7.3s-2.2-6.4-5.5-7.3l-21.2-6-6-21.2zM152 488l0 24 48 0 0-24c0-13.3-10.7-24-24-24s-24 10.7-24 24zm120-24c-13.3 0-24 10.7-24 24l0 24 48 0 0-24c0-13.3-10.7-24-24-24z\"]\n};\nvar faBuildingFlag = {\n  prefix: 'fas',\n  iconName: 'building-flag',\n  icon: [640, 512, [], \"e4d5\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L64 0zM176 352l32 0c17.7 0 32 14.3 32 32l0 80-96 0 0-80c0-17.7 14.3-32 32-32zM96 112c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM240 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM96 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm144-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM464 0c-17.7 0-32 14.3-32 32l0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-288 112 0c17.7 0 32-14.3 32-32l0-96c0-17.7-14.3-32-32-32L496 32c0-17.7-14.3-32-32-32z\"]\n};\nvar faMugSaucer = {\n  prefix: 'fas',\n  iconName: 'mug-saucer',\n  icon: [576, 512, [\"coffee\"], \"f0f4\", \"M64 64c0-17.7 14.3-32 32-32l352 0c70.7 0 128 57.3 128 128S518.7 288 448 288c0 53-43 96-96 96l-192 0c-53 0-96-43-96-96L64 64zm448 96c0-35.3-28.7-64-64-64l0 128c35.3 0 64-28.7 64-64zM64 448l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L64 512c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nvar faCoffee = faMugSaucer;\nvar faLemon = {\n  prefix: 'fas',\n  iconName: 'lemon',\n  icon: [448, 512, [127819], \"f094\", \"M448 96c0-35.3-28.7-64-64-64-6.6 0-13 1-19 2.9-22.5 7-48.1 14.9-71 9-75.2-19.1-156.4 11-213.7 68.3S-7.2 250.8 11.9 326c5.8 22.9-2 48.4-9 71-1.9 6-2.9 12.4-2.9 19 0 35.3 28.7 64 64 64 6.6 0 13-1 19.1-2.9 22.5-7 48.1-14.9 71-9 75.2 19.1 156.4-11 213.7-68.3S455.2 261.2 436.1 186c-5.8-22.9 2-48.4 9-71 1.9-6 2.9-12.4 2.9-19.1zM222.7 143c-52 15.2-96.5 59.7-111.7 111.7-3.7 12.7-17.1 20-29.8 16.3S61.2 254 65 241.3c19.8-67.7 76.6-124.5 144.3-144.3 12.7-3.7 26.1 3.6 29.8 16.3s-3.6 26.1-16.3 29.8z\"]\n};\nvar faCaravan = {\n  prefix: 'fas',\n  iconName: 'caravan',\n  icon: [640, 512, [], \"f8ff\", \"M32 96c0-35.3 28.7-64 64-64l320 0c70.7 0 128 57.3 128 128l0 192 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-296.4 0c.2 2.6 .4 5.3 .4 8 0 48.6-39.4 88-88 88s-88-39.4-88-88c0-2.7 .1-5.4 .4-8L96 416c-35.3 0-64-28.7-64-64L32 96zM352 352l64 0c17.7 0 32-14.3 32-32l0-48-24 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l24 0 0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32l0 160c0 17.7 14.3 32 32 32zM160 128c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-64 0zm64 336a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"]\n};\nvar faQ = {\n  prefix: 'fas',\n  iconName: 'q',\n  icon: [448, 512, [113], \"51\", \"M64 256c0 88.4 71.6 160 160 160 28.9 0 56-7.7 79.4-21.1l-72-86.4c-11.3-13.6-9.5-33.8 4.1-45.1s33.8-9.5 45.1 4.1l70.9 85.1c20.4-26.8 32.5-60.3 32.5-96.6 0-88.4-71.6-160-160-160S64 167.6 64 256zM344.9 444.6C310 467 268.5 480 224 480 100.3 480 0 379.7 0 256S100.3 32 224 32 448 132.3 448 256c0 56.1-20.6 107.4-54.7 146.7l47.3 56.8c11.3 13.6 9.5 33.8-4.1 45.1s-33.8 9.5-45.1-4.1l-46.6-55.9z\"]\n};\nvar faLock = {\n  prefix: 'fas',\n  iconName: 'lock',\n  icon: [384, 512, [128274], \"f023\", \"M128 96l0 64 128 0 0-64c0-35.3-28.7-64-64-64s-64 28.7-64 64zM64 160l0-64C64 25.3 121.3-32 192-32S320 25.3 320 96l0 64c35.3 0 64 28.7 64 64l0 224c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 224c0-35.3 28.7-64 64-64z\"]\n};\nvar faPaintRoller = {\n  prefix: 'fas',\n  iconName: 'paint-roller',\n  icon: [512, 512, [], \"f5aa\", \"M0 64C0 28.7 28.7 0 64 0L352 0c35.3 0 64 28.7 64 64l16 0c44.2 0 80 35.8 80 80l0 96c0 44.2-35.8 80-80 80l-160 0c-8.8 0-16 7.2-16 16l0 18.7c18.6 6.6 32 24.4 32 45.3l0 96c0 26.5-21.5 48-48 48l-32 0c-26.5 0-48-21.5-48-48l0-96c0-20.9 13.4-38.7 32-45.3l0-18.7c0-44.2 35.8-80 80-80l160 0c8.8 0 16-7.2 16-16l0-96c0-8.8-7.2-16-16-16l-16 0c0 35.3-28.7 64-64 64L64 192c-35.3 0-64-28.7-64-64L0 64z\"]\n};\nvar faVolumeHigh = {\n  prefix: 'fas',\n  iconName: 'volume-high',\n  icon: [640, 512, [128266, \"volume-up\"], \"f028\", \"M533.6 32.5c-10.3-8.4-25.4-6.8-33.8 3.5s-6.8 25.4 3.5 33.8C557.5 113.8 592 180.8 592 256s-34.5 142.2-88.7 186.3c-10.3 8.4-11.8 23.5-3.5 33.8s23.5 11.8 33.8 3.5C598.5 426.7 640 346.2 640 256S598.5 85.2 533.6 32.5zM473.1 107c-10.3-8.4-25.4-6.8-33.8 3.5s-6.8 25.4 3.5 33.8C475.3 170.7 496 210.9 496 256s-20.7 85.3-53.2 111.8c-10.3 8.4-11.8 23.5-3.5 33.8s23.5 11.8 33.8 3.5c43.2-35.2 70.9-88.9 70.9-149s-27.7-113.8-70.9-149zm-60.5 74.5c-10.3-8.4-25.4-6.8-33.8 3.5s-6.8 25.4 3.5 33.8C393.1 227.6 400 241 400 256s-6.9 28.4-17.7 37.3c-10.3 8.4-11.8 23.5-3.5 33.8s23.5 11.8 33.8 3.5C434.1 312.9 448 286.1 448 256s-13.9-56.9-35.4-74.5zM80 352l48 0 134.1 119.2c6.4 5.7 14.6 8.8 23.1 8.8 19.2 0 34.8-15.6 34.8-34.8l0-378.4c0-19.2-15.6-34.8-34.8-34.8-8.5 0-16.7 3.1-23.1 8.8L128 160 80 160c-26.5 0-48 21.5-48 48l0 96c0 26.5 21.5 48 48 48z\"]\n};\nvar faVolumeUp = faVolumeHigh;\nvar faFolderPlus = {\n  prefix: 'fas',\n  iconName: 'folder-plus',\n  icon: [512, 512, [], \"f65e\", \"M512 384c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l138.7 0c13.8 0 27.3 4.5 38.4 12.8l38.4 28.8c5.5 4.2 12.3 6.4 19.2 6.4L448 80c35.3 0 64 28.7 64 64l0 240zM256 160c-13.3 0-24 10.7-24 24l0 48-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l48 0 0 48c0 13.3 10.7 24 24 24s24-10.7 24-24l0-48 48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-48c0-13.3-10.7-24-24-24z\"]\n};\nvar faMercury = {\n  prefix: 'fas',\n  iconName: 'mercury',\n  icon: [384, 512, [9791], \"f223\", \"M117-4C106-17.8 85.8-20 72.1-9s-16 31.2-5 45C74.9 45.7 83.7 54.5 93.5 62.1 46.7 93.7 16 147.3 16 208 16 294.3 78.1 366.1 160 381.1l0 34.9-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-34.9c81.9-15 144-86.8 144-173.1 0-60.7-30.7-114.3-77.5-145.9 9.8-7.7 18.7-16.4 26.4-26.1 11.1-13.8 8.8-33.9-5-45S278-17.8 267-4c-17.6 22-44.7 36-75 36S134.7 18 117-4zm75 324c-61.9 0-112-50.1-112-112S130.1 96 192 96 304 146.1 304 208c0 61.8-50.1 112-111.9 112l-.1 0z\"]\n};\nvar faAnchor = {\n  prefix: 'fas',\n  iconName: 'anchor',\n  icon: [576, 512, [9875], \"f13d\", \"M288 64a32 32 0 1 0 0 64 32 32 0 1 0 0-64zM192 96c0-53 43-96 96-96s96 43 96 96c0 41.8-26.7 77.4-64 90.5l0 257.9c62.9-14.3 110.2-69.7 111.9-136.5l-16.1 14.1c-10 8.7-25.1 7.7-33.9-2.3s-7.7-25.1 2.3-33.9l64-56c9-7.9 22.6-7.9 31.6 0l64 56c10 8.7 11 23.9 2.3 33.9s-23.9 11-33.9 2.3L496 307.9C493.9 421 401.6 512 288 512S82.1 421 80 307.9L63.8 322.1c-10 8.7-25.1 7.7-33.9-2.3s-7.7-25.1 2.3-33.9l64-56c9-7.9 22.6-7.9 31.6 0l64 56c10 8.7 11 23.9 2.3 33.9s-23.9 11-33.9 2.3l-16.1-14.1c1.8 66.8 49.1 122.2 111.9 136.5l0-257.9c-37.3-13.2-64-48.7-64-90.5z\"]\n};\nvar faSquareParking = {\n  prefix: 'fas',\n  iconName: 'square-parking',\n  icon: [448, 512, [127359, \"parking\"], \"f540\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM192 256l48 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-48 0 0 64zm48 64l-48 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-184c0-22.1 17.9-40 40-40l72 0c53 0 96 43 96 96s-43 96-96 96z\"]\n};\nvar faParking = faSquareParking;\nvar faHanukiah = {\n  prefix: 'fas',\n  iconName: 'hanukiah',\n  icon: [640, 512, [128334], \"f6e6\", \"M314.2 3.3c-5.1 8.8-18.2 33.3-18.2 52.7 0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3zm-288 48C21.1 60.1 8 84.6 8 104 8 117.3 18.7 128 32 128s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3zM88 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C101.1 60.1 88 84.6 88 104zm82.2-52.7c-5.1 8.8-18.2 33.3-18.2 52.7 0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3zM216 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C229.1 60.1 216 84.6 216 104zM394.2 51.3c-5.1 8.8-18.2 33.3-18.2 52.7 0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3zM440 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C453.1 60.1 440 84.6 440 104zm82.2-52.7c-5.1 8.8-18.2 33.3-18.2 52.7 0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3zM584 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C597.1 60.1 584 84.6 584 104zM112 160c-8.8 0-16 7.2-16 16l0 112 32 0 0-112c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16l0 112 32 0 0-112c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16l0 112 32 0 0-112c0-8.8-7.2-16-16-16zm160 0c-8.8 0-16 7.2-16 16l0 112 32 0 0-112c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16l0 112 32 0 0-112c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16l0 112 32 0 0-112c0-8.8-7.2-16-16-16zM352 144c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 176-192 0c-17.7 0-32-14.3-32-32l0-96c0-17.7-14.3-32-32-32S0 174.3 0 192l0 96c0 53 43 96 96 96l192 0 0 64-128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l320 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-128 0 0-64 192 0c53 0 96-43 96-96l0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7-14.3 32-32 32l-192 0 0-176z\"]\n};\nvar faRotateLeft = {\n  prefix: 'fas',\n  iconName: 'rotate-left',\n  icon: [512, 512, [\"rotate-back\", \"rotate-backward\", \"undo-alt\"], \"f2ea\", \"M24 192l144 0c9.7 0 18.5-5.8 22.2-14.8s1.7-19.3-5.2-26.2l-46.7-46.7c75.3-58.6 184.3-53.3 253.5 15.9 75 75 75 196.5 0 271.5s-196.5 75-271.5 0c-10.2-10.2-19-21.3-26.4-33-9.5-14.9-29.3-19.3-44.2-9.8s-19.3 29.3-9.8 44.2C49.7 408.7 61.4 423.5 75 437 175 537 337 537 437 437S537 175 437 75C342.8-19.3 193.3-24.7 92.7 58.8L41 7C34.1 .2 23.8-1.9 14.8 1.8S0 14.3 0 24L0 168c0 13.3 10.7 24 24 24z\"]\n};\nvar faRotateBack = faRotateLeft;\nvar faRotateBackward = faRotateLeft;\nvar faUndoAlt = faRotateLeft;\nvar faHeading = {\n  prefix: 'fas',\n  iconName: 'heading',\n  icon: [448, 512, [\"header\"], \"f1dc\", \"M0 64C0 46.3 14.3 32 32 32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-16 0 0 112 224 0 0-112-16 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-16 0 0 320 16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-144-224 0 0 144 16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-320-16 0C14.3 96 0 81.7 0 64z\"]\n};\nvar faHeader = faHeading;\nvar faCrosshairs = {\n  prefix: 'fas',\n  iconName: 'crosshairs',\n  icon: [576, 512, [], \"f05b\", \"M288-16c17.7 0 32 14.3 32 32l0 18.3c98.1 14 175.7 91.6 189.7 189.7l18.3 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-18.3 0c-14 98.1-91.6 175.7-189.7 189.7l0 18.3c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-18.3C157.9 463.7 80.3 386.1 66.3 288L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l18.3 0C80.3 125.9 157.9 48.3 256 34.3L256 16c0-17.7 14.3-32 32-32zM131.2 288c12.7 62.7 62.1 112.1 124.8 124.8l0-12.8c0-17.7 14.3-32 32-32s32 14.3 32 32l0 12.8c62.7-12.7 112.1-62.1 124.8-124.8L432 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l12.8 0C432.1 161.3 382.7 111.9 320 99.2l0 12.8c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-12.8C193.3 111.9 143.9 161.3 131.2 224l12.8 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-12.8 0zM288 208a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nvar faCircleNodes = {\n  prefix: 'fas',\n  iconName: 'circle-nodes',\n  icon: [512, 512, [], \"e4e2\", \"M418.4 157.9c35.3-8.3 61.6-40 61.6-77.9 0-44.2-35.8-80-80-80-43.4 0-78.7 34.5-80 77.5L136.2 151.1C121.7 136.8 101.9 128 80 128 35.8 128 0 163.8 0 208s35.8 80 80 80c12.2 0 23.8-2.7 34.1-7.6L259.7 407.8c-2.4 7.6-3.7 15.8-3.7 24.2 0 44.2 35.8 80 80 80s80-35.8 80-80c0-27.7-14-52.1-35.4-66.4l37.8-207.7zM156.3 232.2c2.2-6.9 3.5-14.2 3.7-21.7l183.8-73.5c3.6 3.5 7.4 6.7 11.6 9.5L317.6 354.1c-5.5 1.3-10.8 3.1-15.8 5.5L156.3 232.2z\"]\n};\nvar faWindowRestore = {\n  prefix: 'fas',\n  iconName: 'window-restore',\n  icon: [576, 512, [], \"f2d2\", \"M512 96L160 96c0-35.3 28.7-64 64-64l288 0c35.3 0 64 28.7 64 64l0 192c0 35.3-28.7 64-64 64l-48 0 0-64 48 0 0-192zM0 224c0-35.3 28.7-64 64-64l288 0c35.3 0 64 28.7 64 64l0 192c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 224zm64 40c0 13.3 10.7 24 24 24l240 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L88 240c-13.3 0-24 10.7-24 24z\"]\n};\nvar faR = {\n  prefix: 'fas',\n  iconName: 'r',\n  icon: [320, 512, [114], \"52\", \"M32 32C14.3 32 0 46.3 0 64L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 95.3 0 102.4 146.4c10.1 14.5 30.1 18 44.6 7.9s18-30.1 7.9-44.6L230.1 309.5C282.8 288.1 320 236.4 320 176 320 96.5 255.5 32 176 32L32 32zM176 256l-112 0 0-160 112 0c44.2 0 80 35.8 80 80s-35.8 80-80 80z\"]\n};\nvar faFilterCircleXmark = {\n  prefix: 'fas',\n  iconName: 'filter-circle-xmark',\n  icon: [576, 512, [], \"e17b\", \"M32 64C19.1 64 7.4 71.8 2.4 83.8S.2 109.5 9.4 118.6L192 301.3 192 416c0 8.5 3.4 16.6 9.4 22.6l64 64c2.5 2.5 5.3 4.5 8.3 6-21.2-30.9-33.6-68.3-33.6-108.6 0-99.4 75.5-181.1 172.3-191l90.4-90.4c9.2-9.2 11.9-22.9 6.9-34.9S492.9 64 480 64L32 64zM432 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7l-36.7 36.7 36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-36.7-36.7-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l36.7-36.7-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l36.7 36.7 36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nvar faGopuram = {\n  prefix: 'fas',\n  iconName: 'gopuram',\n  icon: [512, 512, [], \"f664\", \"M120 0c13.3 0 24 10.7 24 24l0 8 40 0 0-8c0-13.3 10.7-24 24-24s24 10.7 24 24l0 8 48 0 0-8c0-13.3 10.7-24 24-24s24 10.7 24 24l0 8 40 0 0-8c0-13.3 10.7-24 24-24s24 10.7 24 24l0 136c26.5 0 48 21.5 48 48l0 80c26.5 0 48 21.5 48 48l0 128c0 26.5-21.5 48-48 48l-48 0 0-224-32 0 0-128-48 0 0 128 32 0 0 224-224 0 0-224 32 0 0-128-48 0 0 128-32 0 0 224-48 0c-26.5 0-48-21.5-48-48L0 336c0-26.5 21.5-48 48-48l0-80c0-26.5 21.5-48 48-48L96 24c0-13.3 10.7-24 24-24zM256 208c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32zM208 400l0 64 96 0 0-64c0-26.5-21.5-48-48-48s-48 21.5-48 48zM256 96c-17.7 0-32 14.3-32 32l0 32 64 0 0-32c0-17.7-14.3-32-32-32z\"]\n};\nvar faHeartCircleMinus = {\n  prefix: 'fas',\n  iconName: 'heart-circle-minus',\n  icon: [576, 512, [], \"e4ff\", \"M241 87.1l15 20.7 15-20.7C296 52.5 336.2 32 378.9 32 452.4 32 512 91.6 512 165.1l0 2.6c0 17.6-3.4 35.6-9.5 53.7-21.8-8.6-45.6-13.4-70.5-13.4-106 0-192 86-192 192 0 28.5 6.2 55.6 17.4 80-.5 0-.9 0-1.4 0-15.5 0-30.8-4.6-43.1-14.1-73-55.7-212.9-186-212.9-298.2l0-2.6C0 91.6 59.6 32 133.1 32 175.8 32 216 52.5 241 87.1zM288 400a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm224 0c0-8.8-7.2-16-16-16l-128 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l128 0c8.8 0 16-7.2 16-16z\"]\n};\nvar faStarOfLife = {\n  prefix: 'fas',\n  iconName: 'star-of-life',\n  icon: [512, 512, [], \"f621\", \"M208.5 32c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 140.9 122-70.4c15.3-8.8 34.9-3.6 43.7 11.7l16 27.7c8.8 15.3 3.6 34.9-11.7 43.7l-122 70.4 122 70.4c15.3 8.8 20.6 28.4 11.7 43.7l-16 27.7c-8.8 15.3-28.4 20.6-43.7 11.7l-122-70.4 0 140.9c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-140.9-122 70.4c-15.3 8.8-34.9 3.6-43.7-11.7l-16-27.7c-8.8-15.3-3.6-34.9 11.7-43.7l122-70.4-122-70.4c-15.3-8.8-20.5-28.4-11.7-43.7l16-27.7c8.8-15.3 28.4-20.5 43.7-11.7l122 70.4 0-140.9z\"]\n};\nvar faBusinessTime = {\n  prefix: 'fas',\n  iconName: 'business-time',\n  icon: [640, 512, [\"briefcase-clock\"], \"f64a\", \"M264 48l112 0c4.4 0 8 3.6 8 8l0 40-128 0 0-40c0-4.4 3.6-8 8-8zm-56 8l0 40-80 0c-35.3 0-64 28.7-64 64l0 96 305 0c33.8-29.9 78.3-48 127-48 28.6 0 55.6 6.2 80 17.4l0-65.4c0-35.3-28.7-64-64-64l-80 0 0-40c0-30.9-25.1-56-56-56L264 0c-30.9 0-56 25.1-56 56zm80 296c-17.7 0-32-14.3-32-32l0-16-192 0 0 112c0 35.3 28.7 64 64 64l193.4 0c-11.2-24.4-17.4-51.4-17.4-80 0-16.6 2.1-32.7 6-48l-22 0zm352 48a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zM496 320c8.8 0 16 7.2 16 16l0 48 32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-48 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16z\"]\n};\nvar faBriefcaseClock = faBusinessTime;\nvar faFireExtinguisher = {\n  prefix: 'fas',\n  iconName: 'fire-extinguisher',\n  icon: [512, 512, [129519], \"f134\", \"M512 32c0-9.6-4.3-18.7-11.7-24.7S483.1-1.3 473.7 .6l-160 32C301.5 35.1 292 44.3 289 56l-65 0 0-24c0-17.7-14.3-32-32-32L160 0c-17.7 0-32 14.3-32 32l0 28.4c-55.3 12.3-101.3 49.5-125.5 99.1-5.8 11.9-.9 26.3 11.1 32.1s26.3 .9 32.1-11.1C62 146.9 91.8 121.1 128 110l0 28.8c-37.8 18-64 56.5-64 101.2l0 128 224 0 0-128c0-44.7-26.2-83.2-64-101.2l0-34.8 65 0c3 11.7 12.5 20.9 24.7 23.4l160 32c9.4 1.9 19.1-.6 26.6-6.6S512 137.6 512 128l0-96zM288 448l0-32-224 0 0 32c0 35.3 28.7 64 64 64l96 0c35.3 0 64-28.7 64-64z\"]\n};\nvar faArrowDownLong = {\n  prefix: 'fas',\n  iconName: 'arrow-down-long',\n  icon: [320, 512, [\"long-arrow-down\"], \"f175\", \"M137.4 534.6c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 434.7 192 0c0-17.7-14.3-32-32-32S128-17.7 128 0l0 434.7-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128z\"]\n};\nvar faLongArrowDown = faArrowDownLong;\nvar faUserMinus = {\n  prefix: 'fas',\n  iconName: 'user-minus',\n  icon: [640, 512, [], \"f503\", \"M285.7 304c98.5 0 178.3 79.8 178.3 178.3 0 16.4-13.3 29.7-29.7 29.7L77.7 512C61.3 512 48 498.7 48 482.3 48 383.8 127.8 304 226.3 304l59.4 0zM256 248a120 120 0 1 1 0-240 120 120 0 1 1 0 240zm344-96c13.3 0 24 10.7 24 24s-10.7 24-24 24l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l144 0z\"]\n};\nvar faMoneyCheck = {\n  prefix: 'fas',\n  iconName: 'money-check',\n  icon: [512, 512, [], \"f53c\", \"M0 128C0 92.7 28.7 64 64 64l384 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128zM96 312c0 13.3 10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0c-13.3 0-24 10.7-24 24zm24-136c-13.3 0-24 10.7-24 24s10.7 24 24 24l272 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-272 0z\"]\n};\nvar faHouseLaptop = {\n  prefix: 'fas',\n  iconName: 'house-laptop',\n  icon: [640, 512, [\"laptop-house\"], \"e066\", \"M448 240l19.9 0c15.5 0 28.1-12.6 28.1-28.1 0-7.6-3.1-14.9-8.6-20.2L283.5-4.9C276.1-12 266.3-16 256-16s-20.1 4-27.5 11.1L24.6 191.7C19.1 197 16 204.3 16 211.9 16 227.4 28.6 240 44.1 240l19.9 0 0 144c0 35.3 28.7 64 64 64l85.7 0c7.4-6.6 16.4-11.4 26.3-14l0-130c0-5.5 .7-10.9 2-16l-10 0c-13.3 0-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 24 144 0zM352 352l160 0 0 128-160 0 0-128zm-64-32l0 160-32 0c-8.8 0-16 7.2-16 16 0 26.5 21.5 48 48 48l288 0c26.5 0 48-21.5 48-48 0-8.8-7.2-16-16-16l-32 0 0-160c0-17.7-14.3-32-32-32l-224 0c-17.7 0-32 14.3-32 32z\"]\n};\nvar faLaptopHouse = faHouseLaptop;\nvar faDownload = {\n  prefix: 'fas',\n  iconName: 'download',\n  icon: [448, 512, [], \"f019\", \"M256 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 210.7-41.4-41.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 242.7 256 32zM64 320c-35.3 0-64 28.7-64 64l0 32c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-32c0-35.3-28.7-64-64-64l-46.9 0-56.6 56.6c-31.2 31.2-81.9 31.2-113.1 0L110.9 320 64 320zm304 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nvar faSagittarius = {\n  prefix: 'fas',\n  iconName: 'sagittarius',\n  icon: [448, 512, [], \"e84d\", \"M416 32c17.7 0 32 14.3 32 32l0 160c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-82.8-146.8 146.8 41.4 41.4c12.5 12.5 12.5 32.8 0 45.2s-32.8 12.5-45.3 0L192 333.3 54.6 470.6c-12.5 12.5-32.8 12.5-45.2 0s-12.5-32.8 0-45.2L146.8 288 105.4 246.6c-12.5-12.5-12.5-32.8 0-45.2s32.8-12.5 45.2 0L192 242.8 338.8 96 256 96c-17.7 0-32-14.3-32-32s14.3-32 32-32l160 0z\"]\n};\nvar faCouch = {\n  prefix: 'fas',\n  iconName: 'couch',\n  icon: [640, 512, [], \"f4b8\", \"M144 272C144 224.7 109.8 185.4 64.8 177.5 72 113.6 126.2 64 192 64l256 0c65.8 0 120 49.6 127.2 113.5-45 8-79.2 47.2-79.2 94.5l0 32-352 0 0-32zM0 384L0 272c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 448 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 112c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64z\"]\n};\nvar faRoadLock = {\n  prefix: 'fas',\n  iconName: 'road-lock',\n  icon: [576, 512, [], \"e567\", \"M256 32l-76.3 0c-29.4 0-55.1 20.1-62.1 48.6L33.4 420.5C25.9 450.7 48.8 480 80 480l175.9 0 0-64c0-17.7 14.3-32 32-32 6.1 0 11.8 1.7 16.7 4.7 2.8-23.9 14.3-45.1 31.4-60.3l0-24.4c0-70.7 57.3-128 128-128 6.2 0 12.4 .4 18.4 1.3L458.5 80.6C451.4 52.1 425.8 32 396.3 32l-76.4 0 0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zm64 192l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32zm176 80.1l0 47.9-64 0 0-47.9c0-17.7 14.3-32 32-32s32 14.3 32 32zM352 400l0 96c0 26.5 21.5 48 48 48l128 0c26.5 0 48-21.5 48-48l0-96c0-20.9-13.4-38.7-32-45.3l0-50.6c0-44.2-35.8-80-80-80s-80 35.8-80 80l0 50.6c-18.6 6.6-32 24.4-32 45.3z\"]\n};\nvar faScissors = {\n  prefix: 'fas',\n  iconName: 'scissors',\n  icon: [512, 512, [9984, 9986, 9988, \"cut\"], \"f0c4\", \"M192 256l-39.5 39.5c-12.6-4.9-26.2-7.5-40.5-7.5-61.9 0-112 50.1-112 112s50.1 112 112 112 112-50.1 112-112c0-14.3-2.7-27.9-7.5-40.5L499.2 76.8c7.1-7.1 7.1-18.5 0-25.6-28.3-28.3-74.1-28.3-102.4 0L256 192 216.5 152.5c4.9-12.6 7.5-26.2 7.5-40.5 0-61.9-50.1-112-112-112S0 50.1 0 112 50.1 224 112 224c14.3 0 27.9-2.7 40.5-7.5L192 256zm97.9 97.9L396.8 460.8c28.3 28.3 74.1 28.3 102.4 0 7.1-7.1 7.1-18.5 0-25.6l-145.3-145.3-64 64zM64 112a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm48 240a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nvar faCut = faScissors;\nvar faBug = {\n  prefix: 'fas',\n  iconName: 'bug',\n  icon: [576, 512, [], \"f188\", \"M192 96c0-53 43-96 96-96s96 43 96 96l0 3.6c0 15.7-12.7 28.4-28.4 28.4l-135.1 0c-15.7 0-28.4-12.7-28.4-28.4l0-3.6zm345.6 12.8c10.6 14.1 7.7 34.2-6.4 44.8l-97.8 73.3c5.3 8.9 9.3 18.7 11.8 29.1l98.8 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0 0 32c0 2.6-.1 5.3-.2 7.9l83.4 62.5c14.1 10.6 17 30.7 6.4 44.8s-30.7 17-44.8 6.4l-63.1-47.3c-23.2 44.2-66.5 76.2-117.7 83.9L312 280c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 230.2c-51.2-7.7-94.5-39.7-117.7-83.9L83.2 473.6c-14.1 10.6-34.2 7.7-44.8-6.4s-7.7-34.2 6.4-44.8l83.4-62.5c-.1-2.6-.2-5.2-.2-7.9l0-32-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l98.8 0c2.5-10.4 6.5-20.2 11.8-29.1L44.8 153.6c-14.1-10.6-17-30.7-6.4-44.8s30.7-17 44.8-6.4L192 184c12.3-5.1 25.8-8 40-8l112 0c14.2 0 27.7 2.8 40 8l108.8-81.6c14.1-10.6 34.2-7.7 44.8 6.4z\"]\n};\nvar faArrowRightFromBracket = {\n  prefix: 'fas',\n  iconName: 'arrow-right-from-bracket',\n  icon: [512, 512, [\"sign-out\"], \"f08b\", \"M160 96c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 32C43 32 0 75 0 128L0 384c0 53 43 96 96 96l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0c-17.7 0-32-14.3-32-32l0-256c0-17.7 14.3-32 32-32l64 0zM502.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 224 192 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l210.7 0-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l128-128z\"]\n};\nvar faSignOut = faArrowRightFromBracket;\nvar faHandHoldingHand = {\n  prefix: 'fas',\n  iconName: 'hand-holding-hand',\n  icon: [576, 512, [], \"e4f7\", \"M466.8 186.5l42.5-42.5 34.7 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32L223.6 16c-29 0-57.3 9.3-80.7 26.5L16.3 135.8c-17.8 13.1-21.6 38.1-8.5 55.9s38.1 21.6 55.9 8.5L183.4 112 296 112c13.3 0 24 10.7 24 24s-10.7 24-24 24l-72 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l152.2 0c33.9 0 66.5-13.5 90.5-37.5zm-357.5 139L66.7 368 32 368c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l320.5 0c29 0 57.3-9.3 80.7-26.5l126.6-93.3c17.8-13.1 21.6-38.1 8.5-55.9s-38.1-21.6-55.9-8.5L392.6 400 280 400c-13.3 0-24-10.7-24-24s10.7-24 24-24l72 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-152.2 0c-33.9 0-66.5 13.5-90.5 37.5z\"]\n};\nvar faStroopwafel = {\n  prefix: 'fas',\n  iconName: 'stroopwafel',\n  icon: [512, 512, [], \"f551\", \"M0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zM312.6 63.7c-6.2-6.2-16.4-6.2-22.6 0L256 97.6 222.1 63.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l33.9 33.9-45.3 45.3-56.6-56.6c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l56.6 56.6-45.3 45.3-33.9-33.9c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L97.6 256 63.7 289.9c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l33.9-33.9 45.3 45.3-56.6 56.6c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l56.6-56.6 45.3 45.3-33.9 33.9c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l33.9-33.9 33.9 33.9c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-33.9-33.9 45.3-45.3 56.6 56.6c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-56.6-56.6 45.3-45.3 33.9 33.9c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-33.9-33.9 33.9-33.9c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0l-33.9 33.9-45.3-45.3 56.6-56.6c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0l-56.6 56.6-45.3-45.3 33.9-33.9c6.2-6.2 6.2-16.4 0-22.6zM142.9 256l45.3-45.3 45.3 45.3-45.3 45.3-45.3-45.3zm67.9 67.9l45.3-45.3 45.3 45.3-45.3 45.3-45.3-45.3zM278.6 256l45.3-45.3 45.3 45.3-45.3 45.3-45.3-45.3zm22.6-67.9l-45.3 45.3-45.3-45.3 45.3-45.3 45.3 45.3z\"]\n};\nvar faChild = {\n  prefix: 'fas',\n  iconName: 'child',\n  icon: [320, 512, [], \"f1ae\", \"M96 64A64 64 0 1 1 224 64 64 64 0 1 1 96 64zm48 320l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32L80 287.8 59.1 321c-9.4 15-29.2 19.4-44.1 10S-4.5 301.9 4.9 287l39.9-63.3C69.7 184 113.2 160 160 160s90.3 24 115.2 63.6L315.1 287c9.4 15 4.9 34.7-10 44.1s-34.7 4.9-44.1-10L240 287.8 240 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-32 0z\"]\n};\nvar faIceCream = {\n  prefix: 'fas',\n  iconName: 'ice-cream',\n  icon: [384, 512, [127848], \"f810\", \"M335.1 160c.6-5.3 .9-10.6 .9-16 0-79.5-64.5-144-144-144S48 64.5 48 144c0 5.4 .3 10.7 .9 16l-.9 0c-26.5 0-48 21.5-48 48s21.5 48 48 48l288 0c26.5 0 48-21.5 48-48s-21.5-48-48-48l-.9 0zM64 304L169.2 529.5c4.1 8.8 13 14.5 22.8 14.5s18.6-5.7 22.8-14.5L320 304 64 304z\"]\n};\nvar faComputerMouse = {\n  prefix: 'fas',\n  iconName: 'computer-mouse',\n  icon: [384, 512, [128433, \"mouse\"], \"f8cc\", \"M0 192l168 0 0-192-8 0C71.6 0 0 71.6 0 160l0 32zm0 48L0 352c0 88.4 71.6 160 160 160l64 0c88.4 0 160-71.6 160-160l0-112-384 0zm384-48l0-32C384 71.6 312.4 0 224 0l-8 0 0 192 168 0z\"]\n};\nvar faMouse = faComputerMouse;\nvar faFaucet = {\n  prefix: 'fas',\n  iconName: 'faucet',\n  icon: [512, 512, [], \"e005\", \"M192 64c0-17.7 14.3-32 32-32s32 14.3 32 32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0 0 64 18.7 0c8.5 0 16.6 3.4 22.6 9.4l22.6 22.6 32 0c88.4 0 160 71.6 160 160 0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32s-14.3-32-32-32l-36.1 0c-20.2 29-53.9 48-91.9 48s-71.7-19-91.9-48L32 352c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l96 0 22.6-22.6c6-6 14.1-9.4 22.6-9.4l18.7 0 0-64-96 0c-17.7 0-32-14.3-32-32S78.3 64 96 64l96 0z\"]\n};\nvar faAward = {\n  prefix: 'fas',\n  iconName: 'award',\n  icon: [448, 512, [], \"f559\", \"M245.9-25.9c-13.4-8.2-30.3-8.2-43.7 0-24.4 14.9-39.5 18.9-68.1 18.3-15.7-.4-30.3 8.1-37.9 21.9-13.7 25.1-24.8 36.2-49.9 49.9-13.8 7.5-22.2 22.2-21.9 37.9 .7 28.6-3.4 43.7-18.3 68.1-8.2 13.4-8.2 30.3 0 43.7 14.9 24.4 18.9 39.5 18.3 68.1-.4 15.7 8.1 30.3 21.9 37.9 22.1 12.1 33.3 22.1 45.1 41.5L42.7 458.5c-5.9 11.9-1.1 26.3 10.7 32.2l86 43c11.5 5.7 25.5 1.4 31.7-9.8l52.8-95.1 52.8 95.1c6.2 11.2 20.2 15.6 31.7 9.8l86-43c11.9-5.9 16.7-20.3 10.7-32.2l-48.6-97.2c11.7-19.4 23-29.4 45.1-41.5 13.8-7.5 22.2-22.2 21.9-37.9-.7-28.6 3.4-43.7 18.3-68.1 8.2-13.4 8.2-30.3 0-43.7-14.9-24.4-18.9-39.5-18.3-68.1 .4-15.7-8.1-30.3-21.9-37.9-25.1-13.7-36.2-24.8-49.9-49.9-7.5-13.8-22.2-22.2-37.9-21.9-28.6 .7-43.7-3.4-68.1-18.3zM224 96a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"]\n};\nvar faPersonDrowning = {\n  prefix: 'fas',\n  iconName: 'person-drowning',\n  icon: [640, 512, [], \"e545\", \"M264 88a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zM133.9 65.6c16.8-5.6 34.9 3.5 40.5 20.2l10.9 32.8c9.4 28.3 33.2 49.5 62.5 55.6 5.6 1.2 11.3 1.8 17.1 1.8l88 0c17.2 0 34.3-2.8 50.6-8.2l114.4-38.1c16.8-5.6 34.9 3.5 40.5 20.2s-3.5 34.9-20.2 40.5L423.7 228.5c-8.4 2.8-17 5.1-25.7 6.9l-26.5 88.3c-6.1 3.4-12.1 7.3-17.9 11.7-22.1 16.6-29.1 16.6-51.2 0-26.2-19.7-56.9-30.2-87.8-31.3l20.2-67.2c-51.5-10.7-93.5-48.1-110.2-98l-10.9-32.8c-5.6-16.8 3.5-34.9 20.2-40.5zM403.4 412.1C379.1 430.3 351.1 448 320 448s-59.1-17.7-83.4-35.9c-21.3-16.1-49.9-16.1-71.2 0-23.8 17.9-54.1 35.5-88.1 35.3-20.4-.1-40.7-6.7-59.8-21.1-10.6-8-12.7-23-4.7-33.6s23-12.7 33.6-4.7c11.3 8.5 21.6 11.4 31.2 11.5 17.6 .1 37.3-9.4 58.9-25.7 38.4-29 90.5-29 129 0 24 18.1 40.7 26.3 54.5 26.3s30.5-8.2 54.5-26.3c38.4-29 90.5-29 129 0 16.9 12.7 32.9 21.5 47.8 24.6 13.7 2.8 27.4 .9 42.3-10.3 10.6-8 25.6-5.9 33.6 4.7s5.9 25.6-4.7 33.6c-26.4 19.9-54.2 24.4-80.7 19.1-25.3-5.1-48.1-18.9-67.2-33.3-21.3-16.1-49.9-16.1-71.2 0z\"]\n};\nvar faCameraRotate = {\n  prefix: 'fas',\n  iconName: 'camera-rotate',\n  icon: [512, 512, [], \"e0d8\", \"M138.7 96l10.4-31.2C155.6 45.2 173.9 32 194.6 32l122.8 0c20.7 0 39 13.2 45.5 32.8L373.3 96 448 96c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 160c0-35.3 28.7-64 64-64l74.7 0zM96 305.9c0 3.9 1.4 7.7 4 10.6l48 54c6.4 7.2 17.6 7.2 23.9 0l48-54c2.6-2.9 4-6.7 4-10.6l0-1.9c0-8.8-7.2-16-16-16l-24 0c0-39.8 32.2-72 72-72 4.4 0 8.7 .4 12.9 1.2l34.9-39.3c-14.6-6.4-30.8-9.9-47.8-9.9-66.3 0-120 53.7-120 120l-24 0c-8.8 0-16 7.2-16 16l0 1.9zm196-46.5c-2.6 2.9-4 6.7-4 10.6l0 1.9c0 8.8 7.2 16 16 16l24 0c0 39.8-32.2 72-72 72-4.4 0-8.7-.4-12.9-1.2l-34.9 39.3c14.7 6.4 30.8 9.9 47.8 9.9 66.3 0 120-53.7 120-120l24 0c8.8 0 16-7.2 16-16l0-1.9c0-3.9-1.4-7.7-4-10.6l-48-54c-6.4-7.2-17.6-7.2-23.9 0l-48 54z\"]\n};\nvar faFaceGrinHearts = {\n  prefix: 'fas',\n  iconName: 'face-grin-hearts',\n  icon: [512, 512, [128525, \"grin-hearts\"], \"f584\", \"M256 512c141.4 0 256-114.6 256-256 0-23.3-3.1-45.9-8.9-67.3 5.5-13.5 8.9-28.4 8.9-44.7 0-53-43-96-96-96l-2.9 0c-2.5 0-5 .1-7.4 .3-42.1-30.4-93.8-48.3-149.7-48.3S148.4 17.9 106.3 48.3c-2.5-.2-4.9-.3-7.4-.3L96 48c-53 0-96 43-96 96 0 16.3 3.5 31.2 8.9 44.7-5.8 21.4-8.9 44-8.9 67.3 0 141.4 114.6 256 256 256zM386.7 324.9c11.9-3.7 23.9 6.3 19.6 18.1-22.4 61.3-81.3 105.1-150.3 105.1S128.1 404.2 105.7 342.9c-4.3-11.8 7.7-21.8 19.6-18.1 39.2 12.2 83.7 19.1 130.7 19.1s91.5-6.9 130.7-19.1zM322.9 96c13.5 0 26.5 5.4 36 14.9l9.1 9.1 9.1-9.1c9.5-9.5 22.5-14.9 36-14.9l2.9 0c26.5 0 48 21.5 48 48 0 53.4-66.9 95.7-89 108.2-4.4 2.5-9.6 2.5-14 0-22.1-12.5-89-54.8-89-108.2 0-26.5 21.5-48 48-48l2.9 0zm-188 14.9l9.1 9.1 9.1-9.1c9.5-9.5 22.5-14.9 36-14.9l2.9 0c26.5 0 48 21.5 48 48 0 53.4-66.9 95.7-89 108.2-4.4 2.5-9.6 2.5-14 0-22.1-12.5-89-54.8-89-108.2 0-26.5 21.5-48 48-48l2.9 0c13.5 0 26.5 5.4 36 14.9z\"]\n};\nvar faGrinHearts = faFaceGrinHearts;\nvar faFileFragment = {\n  prefix: 'fas',\n  iconName: 'file-fragment',\n  icon: [384, 512, [], \"e697\", \"M64 0C28.7 0 0 28.7 0 64l0 240 128 0c44.2 0 80 35.8 80 80l0 128 112 0c35.3 0 64-28.7 64-64l0-277.5c0-17-6.7-33.3-18.7-45.3L258.7 18.7C246.7 6.7 230.5 0 213.5 0L64 0zM325.5 176L232 176c-13.3 0-24-10.7-24-24L208 58.5 325.5 176zM32 352c-17.7 0-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32l96 0c17.7 0 32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-96 0z\"]\n};\nvar faPersonMilitaryRifle = {\n  prefix: 'fas',\n  iconName: 'person-military-rifle',\n  icon: [448, 512, [], \"e54b\", \"M128 39c0-13 10-23.8 22.9-24.9L302.7 1.4C312 .7 320 8 320 17.4L320 48c0 8.8-7.2 16-16 16L153 64c-13.8 0-25-11.2-25-25zm17.6 57l156.8 0c1 5.2 1.6 10.5 1.6 16 0 44.2-35.8 80-80 80s-80-35.8-80-80c0-5.5 .6-10.8 1.6-16zm228 364.3L320 369.7 320 480c0 1.3-.1 2.5-.2 3.8L145.5 234.9c16.6-7.1 34.6-10.9 53.3-10.9l50.4 0c15.9 0 31.3 2.8 45.8 7.9L389.9 67.7c-7.7-4.4-10.3-14.2-5.9-21.9s14.2-10.3 21.9-5.9l27.7 16c7.7 4.4 10.3 14.2 5.9 21.9l-55.5 96.1 1.6 .9c15.3 8.8 20.6 28.4 11.7 43.7L360.7 282c2 2.8 3.9 5.8 5.7 8.8l76.1 128.8c11.2 19 4.9 43.5-14.1 54.8s-43.5 4.9-54.8-14.1zM288 512l-128 0c-17.7 0-32-14.3-32-32l0-110.3-53.6 90.6c-11.2 19-35.8 25.3-54.8 14.1S-5.7 438.7 5.6 419.7L81.7 290.8c9.4-15.8 21.7-29.3 36-40L299.1 510c-3.5 1.3-7.2 2-11.1 2zM264 320a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nvar faToggleOn = {\n  prefix: 'fas',\n  iconName: 'toggle-on',\n  icon: [576, 512, [], \"f205\", \"M192 64C86 64 0 150 0 256S86 448 192 448l192 0c106 0 192-86 192-192S490 64 384 64L192 64zm192 96a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"]\n};\nvar faLungsVirus = {\n  prefix: 'fas',\n  iconName: 'lungs-virus',\n  icon: [576, 512, [], \"e067\", \"M288 0c-17.7 0-32 14.3-32 32l0 151.3c9.6-4.8 20.5-7.5 32-7.5s22.4 2.7 32 7.5L320 32c0-17.7-14.3-32-32-32zM450.1 451c8 18.3 8.1 39.2 .2 57.5 10.2 2.3 20.6 3.5 31.2 3.5 52.2 0 94.5-42.3 94.5-94.5l0-6.2c0-111.1-36.7-219-104.4-307L428.9 48.7c-8.1-10.6-20.7-16.7-34-16.7-23.7 0-42.9 19.2-42.9 42.9l0 139.9c1.2 2.2 2.2 4.6 3.1 6.9 26.4-11.6 58.3-6.6 79.9 15s26.6 53.6 15 79.9C477 327.2 496 353.3 496 383.8s-19 56.7-45.9 67.1zM220.9 221.8c.9-2.4 2-4.7 3.1-6.9l0-138.5c0-24.5-19.9-44.4-44.4-44.4-12.5 0-24.4 5.3-32.8 14.5l-26.4 29C42.9 160.8 0 271.8 0 387l0 30.5c0 52.2 42.3 94.5 94.5 94.5 10.5 0 21-1.2 31.2-3.5-7.9-18.3-7.8-39.3 .2-57.5-26.9-10.4-45.9-36.6-45.9-67.1s19-56.7 45.9-67.1c-11.6-26.4-6.6-58.3 15-79.9s53.6-26.6 79.9-15zM152 408c28.8 0 43.2 34.8 22.9 55.2-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0c20.4-20.4 55.2-5.9 55.2 22.9 0 13.3 10.7 24 24 24s24-10.7 24-24c0-28.8 34.8-43.2 55.2-22.9 9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9c-20.4-20.4-5.9-55.2 22.9-55.2 13.3 0 24-10.7 24-24s-10.7-24-24-24c-28.8 0-43.2-34.8-22.9-55.2 9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0c-20.4 20.4-55.2 5.9-55.2-22.9 0-13.3-10.7-24-24-24s-24 10.7-24 24c0 28.8-34.8 43.2-55.2 22.9-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9c20.4 20.4 5.9 55.2-22.9 55.2-13.3 0-24 10.7-24 24s10.7 24 24 24zm104-80a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm40 88a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nvar faTableTennisPaddleBall = {\n  prefix: 'fas',\n  iconName: 'table-tennis-paddle-ball',\n  icon: [512, 512, [127955, \"ping-pong-paddle-ball\", \"table-tennis\"], \"f45d\", \"M97 127l67.4-67.4c38.2-38.2 90-59.6 144-59.6 112.5 0 203.7 91.2 203.7 203.6 0 46.4-15.8 91.1-44.5 127-23.6-16.8-52.4-26.7-83.5-26.7-31.1 0-59.9 9.9-83.4 26.6L97 127zM240 448c0 9.7 1 19.1 2.8 28.2-19.8-5.2-38-15.5-52.7-30.2-12.2-12.2-31.9-12.2-44.1 0L96.6 495.4c-10.6 10.6-25 16.6-40 16.6-31.2 0-56.6-25.3-56.6-56.6 0-15 6-29.4 16.6-40l49.4-49.4c12.2-12.2 12.2-31.9 0-44.1-21.7-21.7-33.9-51.2-33.9-81.9 0-29.4 11.1-57.6 31.1-79L266.6 364.6C249.9 388.1 240 416.9 240 448zm144-96a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"]\n};\nvar faPingPongPaddleBall = faTableTennisPaddleBall;\nvar faTableTennis = faTableTennisPaddleBall;\nvar faBoxesPacking = {\n  prefix: 'fas',\n  iconName: 'boxes-packing',\n  icon: [576, 512, [], \"e4c7\", \"M208 0l80 0 0 56c0 13.3 10.7 24 24 24l80 0c13.3 0 24-10.7 24-24l0-56 80 0c26.5 0 48 21.5 48 48l0 416c0 26.5-21.5 48-48 48l-108.8 0c8.2-14.1 12.8-30.5 12.8-48l0-160c10-13.4 16-30 16-48l0-32c0-44.2-35.8-80-80-80l-176 0 0-96c0-26.5 21.5-48 48-48zM32 336l320 0 0 128c0 26.5-21.5 48-48 48L80 512c-26.5 0-48-21.5-48-48l0-128zM48 192l288 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32l0-32c0-17.7 14.3-32 32-32z\"]\n};\nvar faPersonChalkboard = {\n  prefix: 'fas',\n  iconName: 'person-chalkboard',\n  icon: [640, 512, [], \"e53d\", \"M192 80a56 56 0 1 0 0-112 56 56 0 1 0 0 112zM176 512l0-160c0-8.8 7.2-16 16-16s16 7.2 16 16l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-336 128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-16 0 0-48 192 0 0 192-192 0 0-32-64 0 0 48c0 26.5 21.5 48 48 48l224 0c26.5 0 48-21.5 48-48l0-224c0-26.5-21.5-48-48-48L368 0c-26.5 0-48 21.5-48 48l0 64-122.7 0c-45.6 0-88.5 21.6-115.6 58.2L14.3 260.9c-10.5 14.2-7.6 34.2 6.6 44.8s34.2 7.6 44.8-6.6L112 236.7 112 512c0 17.7 14.3 32 32 32s32-14.3 32-32z\"]\n};\nvar faDiceTwo = {\n  prefix: 'fas',\n  iconName: 'dice-two',\n  icon: [448, 512, [9857], \"f528\", \"M0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM352 352a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 192a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nvar faArrowRightArrowLeft = {\n  prefix: 'fas',\n  iconName: 'arrow-right-arrow-left',\n  icon: [512, 512, [8644, \"exchange\"], \"f0ec\", \"M502.6 150.6l-96 96c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L402.7 160 32 160c-17.7 0-32-14.3-32-32S14.3 96 32 96l370.7 0-41.4-41.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3zm-397.3 352l-96-96c-12.5-12.5-12.5-32.8 0-45.3l96-96c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L109.3 352 480 352c17.7 0 32 14.3 32 32s-14.3 32-32 32l-370.7 0 41.4 41.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0z\"]\n};\nvar faExchange = faArrowRightArrowLeft;\nvar faFootball = {\n  prefix: 'fas',\n  iconName: 'football',\n  icon: [512, 512, [127944, \"football-ball\"], \"f44e\", \"M261.1 22.6c-89 18-150.5 63.4-190 123.9-23.3 35.6-38.1 75.3-46.7 115.5L251.9 489.4c89-18 150.5-63.4 190.1-123.9 23.3-35.6 38.1-75.3 46.7-115.5L261.1 22.6zm236 168.1c3.2-42.3 .7-83.3-4.8-118.7-4.4-27.8-26.8-48-53.1-51.6-43-5.9-82.2-7.5-117.8-5.4L497.1 190.6zM191.7 497.1L15.9 321.4c-3.2 42.3-.7 83.3 4.8 118.7 4.4 27.8 26.8 48 53.1 51.6 43 5.9 82.2 7.5 117.8 5.4zM271.5 143c9.4-9.4 24.6-9.4 33.9 0l64 64c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9zm-64 64c9.4-9.4 24.6-9.4 33.9 0l64 64c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9zm-64 64c9.4-9.4 24.6-9.4 33.9 0l64 64c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9z\"]\n};\nvar faFootballBall = faFootball;\nvar faTruckMonster = {\n  prefix: 'fas',\n  iconName: 'truck-monster',\n  icon: [576, 512, [], \"f63b\", \"M336 96l48 64-128 0 0-64 80 0zm128 64L387.2 57.6C375.1 41.5 356.1 32 336 32L224 32c-17.7 0-32 14.3-32 32l0 96-144 0c-26.5 0-48 21.5-48 48l0 64c0 18.1 10.1 33.9 24.9 42.1-.5 5.7 1.1 11.6 4.7 16.4-3.7 6.9-6.8 14.1-9 21.8-11.6 1.7-20.6 11.7-20.6 23.8l0 16c0 12.1 8.9 22.1 20.6 23.8 2.2 7.6 5.3 14.9 9 21.8-7 9.4-6.3 22.8 2.3 31.3l11.3 11.3c8.6 8.6 21.9 9.3 31.3 2.2 6.8 3.7 14.1 6.8 21.7 9 1.7 11.6 11.7 20.6 23.8 20.6l16 0c12.1 0 22.1-8.9 23.8-20.6 7.6-2.2 14.9-5.3 21.7-9 9.4 7 22.8 6.3 31.3-2.2l11.3-11.3c8.6-8.6 9.3-21.9 2.3-31.3 3.7-6.8 6.8-14.1 9-21.7 11.6-1.7 20.6-11.7 20.6-23.8l0-16c0-12.1-8.9-22.1-20.6-23.8-2.2-7.6-5.3-14.9-9-21.7 2.4-3.2 3.9-6.8 4.5-10.5l114.2 0c.6 3.7 2.1 7.3 4.5 10.5-3.7 6.9-6.8 14.1-9 21.8-11.6 1.7-20.6 11.7-20.6 23.8l0 16c0 12.1 8.9 22.1 20.6 23.8 2.2 7.6 5.3 14.9 9 21.8-7 9.4-6.3 22.8 2.2 31.3l11.3 11.3c8.5 8.6 21.9 9.3 31.3 2.2 6.8 3.7 14.1 6.8 21.7 9 1.7 11.6 11.7 20.6 23.8 20.6l16 0c12.1 0 22.1-8.9 23.8-20.6 7.6-2.2 14.9-5.3 21.8-9 9.4 7 22.8 6.3 31.3-2.2l11.3-11.3c8.6-8.6 9.3-21.9 2.2-31.3 3.7-6.8 6.8-14.1 9-21.7 11.6-1.7 20.6-11.7 20.6-23.8l0-16c0-12.1-8.9-22.1-20.6-23.8-2.2-7.6-5.3-14.9-9-21.7 3.6-4.8 5.2-10.7 4.7-16.4 14.8-8.2 24.9-23.9 24.9-42.1l0-64c0-26.5-21.5-48-48-48l-64 0zM128 336a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm272 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\"]\n};\nvar faAsterisk = {\n  prefix: 'fas',\n  iconName: 'asterisk',\n  icon: [448, 512, [10033, 61545], \"2a\", \"M224 0c17.7 0 32 14.3 32 32l0 168.6 144-83.1c15.3-8.8 34.9-3.6 43.7 11.7s3.6 34.9-11.7 43.7L288 256 432 339.1c15.3 8.8 20.6 28.4 11.7 43.7s-28.4 20.6-43.7 11.7L256 311.4 256 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-168.6-144 83.1c-15.3 8.8-34.9 3.6-43.7-11.7S.7 348 16 339.1L160 256 16 172.9C.7 164-4.5 144.5 4.3 129.1S32.7 108.6 48 117.4L192 200.6 192 32c0-17.7 14.3-32 32-32z\"]\n};\nvar faBatteryFull = {\n  prefix: 'fas',\n  iconName: 'battery-full',\n  icon: [640, 512, [128267, \"battery\", \"battery-5\"], \"f240\", \"M528 128c8.8 0 16 7.2 16 16l0 224c0 8.8-7.2 16-16 16l-416 0c-8.8 0-16-7.2-16-16l0-224c0-8.8 7.2-16 16-16l416 0zM112 64c-44.2 0-80 35.8-80 80l0 224c0 44.2 35.8 80 80 80l416 0c44.2 0 80-35.8 80-80l0-48c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80L112 64zm56 112c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24l304 0c13.3 0 24-10.7 24-24l0-112c0-13.3-10.7-24-24-24l-304 0z\"]\n};\nvar faBattery = faBatteryFull;\nvar faBattery5 = faBatteryFull;\nvar faChildDress = {\n  prefix: 'fas',\n  iconName: 'child-dress',\n  icon: [320, 512, [], \"e59c\", \"M224 64A64 64 0 1 0 96 64 64 64 0 1 0 224 64zM88 400l0 80c0 17.7 14.3 32 32 32s32-14.3 32-32l0-80 16 0 0 80c0 17.7 14.3 32 32 32s32-14.3 32-32l0-80 17.8 0c10.9 0 18.6-10.7 15.2-21.1l-31.1-93.4 28.7 37.8c10.7 14.1 30.8 16.8 44.8 6.2s16.8-30.7 6.2-44.8L254.6 207c-22.4-29.6-57.5-47-94.6-47s-72.2 17.4-94.6 47L6.5 284.7c-10.7 14.1-7.9 34.2 6.2 44.8s34.2 7.9 44.8-6.2L86.2 285.5 55 378.9C51.6 389.3 59.3 400 70.2 400L88 400z\"]\n};\nvar faFaceKissBeam = {\n  prefix: 'fas',\n  iconName: 'face-kiss-beam',\n  icon: [512, 512, [128537, \"kiss-beam\"], \"f597\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM240 288l32 0c26.5 0 48 21.5 48 48 0 12.3-4.6 23.5-12.2 32 7.6 8.5 12.2 19.7 12.2 32 0 26.5-21.5 48-48 48l-32 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zM176 180c-15.5 0-28 12.5-28 28l0 8c0 11-9 20-20 20s-20-9-20-20l0-8c0-37.6 30.4-68 68-68s68 30.4 68 68l0 8c0 11-9 20-20 20s-20-9-20-20l0-8c0-15.5-12.5-28-28-28zm132 28l0 8c0 11-9 20-20 20s-20-9-20-20l0-8c0-37.6 30.4-68 68-68s68 30.4 68 68l0 8c0 11-9 20-20 20s-20-9-20-20l0-8c0-15.5-12.5-28-28-28s-28 12.5-28 28z\"]\n};\nvar faKissBeam = faFaceKissBeam;\nvar faTrashCanArrowUp = {\n  prefix: 'fas',\n  iconName: 'trash-can-arrow-up',\n  icon: [448, 512, [\"trash-restore-alt\"], \"f82a\", \"M167.1-16l113.9 0c13.8 0 26 8.8 30.4 21.9L320 32 416 32c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64S14.3 32 32 32l96 0 8.7-26.1C141.1-7.2 153.3-16 167.1-16zM32 144l384 0 0 304c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-304zm209 79c-9.4-9.4-24.6-9.4-33.9 0l-72 72c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l31-31 0 102.1c0 13.3 10.7 24 24 24s24-10.7 24-24l0-102.1 31 31c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-72-72z\"]\n};\nvar faTrashRestoreAlt = faTrashCanArrowUp;\nvar faFont = {\n  prefix: 'fas',\n  iconName: 'font',\n  icon: [512, 512, [], \"f031\", \"M285.1 50.7C279.9 39.3 268.5 32 256 32s-23.9 7.3-29.1 18.7L59.5 416 48 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l88 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-6.1 0 22-48 208.3 0 22 48-6.1 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l88 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-11.5 0-167.4-365.3zM330.8 304L181.2 304 256 140.8 330.8 304z\"]\n};\nvar faBoreHole = {\n  prefix: 'fas',\n  iconName: 'bore-hole',\n  icon: [512, 512, [], \"e4c3\", \"M256 0c-17.7 0-32 14.3-32 32l0 232.6c-19.1 11.1-32 31.7-32 55.4 0 35.3 28.7 64 64 64s64-28.7 64-64c0-23.7-12.9-44.4-32-55.4L288 32c0-17.7-14.3-32-32-32zM0 384l0 64c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-272c0-26.5-21.5-48-48-48l-48 0c-26.5 0-48 21.5-48 48l0 144c0 61.9-50.1 112-112 112S144 381.9 144 320l0-144c0-26.5-21.5-48-48-48l-48 0c-26.5 0-48 21.5-48 48L0 384z\"]\n};\nvar faVirusCovid = {\n  prefix: 'fas',\n  iconName: 'virus-covid',\n  icon: [512, 512, [], \"e4a8\", \"M192 24c0-13.3 10.7-24 24-24l80 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0 0 33.6c30.7 4.2 58.8 16.3 82.3 34.1L386.1 92 374.8 80.6c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l56.6 56.6c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-11.3-11.3-23.8 23.8c17.9 23.5 29.9 51.7 34.1 82.3l33.6 0 0-16c0-13.3 10.7-24 24-24s24 10.7 24 24l0 80c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-16-33.6 0c-4.2 30.7-16.3 58.8-34.1 82.3l23.8 23.8 11.3-11.3c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-56.6 56.6c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l11.3-11.3-23.8-23.8c-23.5 17.9-51.7 29.9-82.3 34.1l0 33.6 16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l16 0 0-33.6c-30.7-4.2-58.8-16.3-82.3-34.1l-23.8 23.8 11.3 11.3c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L46.7 408.7c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l11.3 11.3 23.8-23.8C97.9 338.8 85.8 310.7 81.6 280l-33.6 0 0 16c0 13.3-10.7 24-24 24S0 309.3 0 296l0-80c0-13.3 10.7-24 24-24s24 10.7 24 24l0 16 33.6 0c4.2-30.7 16.3-58.8 34.1-82.3L92 125.9 80.6 137.2c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l56.6-56.6c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L125.9 92 149.7 115.7c23.5-17.9 51.7-29.9 82.3-34.1l0-33.6-16 0c-13.3 0-24-10.7-24-24zm32 200a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm96 96a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nvar faFilePdf = {\n  prefix: 'fas',\n  iconName: 'file-pdf',\n  icon: [576, 512, [], \"f1c1\", \"M96 0C60.7 0 32 28.7 32 64l0 384c0 35.3 28.7 64 64 64l80 0 0-112c0-35.3 28.7-64 64-64l176 0 0-165.5c0-17-6.7-33.3-18.7-45.3L290.7 18.7C278.7 6.7 262.5 0 245.5 0L96 0zM357.5 176L264 176c-13.3 0-24-10.7-24-24L240 58.5 357.5 176zM240 380c-11 0-20 9-20 20l0 128c0 11 9 20 20 20s20-9 20-20l0-28 12 0c33.1 0 60-26.9 60-60s-26.9-60-60-60l-32 0zm32 80l-12 0 0-40 12 0c11 0 20 9 20 20s-9 20-20 20zm96-80c-11 0-20 9-20 20l0 128c0 11 9 20 20 20l32 0c28.7 0 52-23.3 52-52l0-64c0-28.7-23.3-52-52-52l-32 0zm20 128l0-88 12 0c6.6 0 12 5.4 12 12l0 64c0 6.6-5.4 12-12 12l-12 0zm88-108l0 128c0 11 9 20 20 20s20-9 20-20l0-44 28 0c11 0 20-9 20-20s-9-20-20-20l-28 0 0-24 28 0c11 0 20-9 20-20s-9-20-20-20l-48 0c-11 0-20 9-20 20z\"]\n};\nvar faLanguage = {\n  prefix: 'fas',\n  iconName: 'language',\n  icon: [576, 512, [], \"f1ab\", \"M160 0c17.7 0 32 14.3 32 32l0 32 128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-9.6 0-8.4 23.1c-16.4 45.2-41.1 86.5-72.2 122 14.2 8.8 29 16.6 44.4 23.5l50.4 22.4 62.2-140c5.1-11.6 16.6-19 29.2-19s24.1 7.4 29.2 19l128 288c7.2 16.2-.1 35.1-16.2 42.2s-35.1-.1-42.2-16.2l-20-45-157.5 0-20 45c-7.2 16.2-26.1 23.4-42.2 16.2s-23.4-26.1-16.2-42.2l39.8-89.5-50.4-22.4c-23-10.2-45-22.4-65.8-36.4-21.3 17.2-44.6 32.2-69.5 44.7L78.3 380.6c-15.8 7.9-35 1.5-42.9-14.3s-1.5-35 14.3-42.9l34.5-17.3c16.3-8.2 31.8-17.7 46.4-28.3-13.8-12.7-26.8-26.4-38.9-40.9L81.6 224.7c-11.3-13.6-9.5-33.8 4.1-45.1s33.8-9.5 45.1 4.1l10.2 12.2c11.5 13.9 24.1 26.8 37.4 38.7 27.5-30.4 49.2-66.1 63.5-105.4l.5-1.2-210.3 0C14.3 128 0 113.7 0 96S14.3 64 32 64l96 0 0-32c0-17.7 14.3-32 32-32zM416 270.8L365.7 384 466.3 384 416 270.8z\"]\n};\nvar faShieldHalved = {\n  prefix: 'fas',\n  iconName: 'shield-halved',\n  icon: [512, 512, [\"shield-alt\"], \"f3ed\", \"M256 0c4.6 0 9.2 1 13.4 2.9L457.8 82.8c22 9.3 38.4 31 38.3 57.2-.5 99.2-41.3 280.7-213.6 363.2-16.7 8-36.1 8-52.8 0-172.4-82.5-213.1-264-213.6-363.2-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.9 1 251.4 0 256 0zm0 66.8l0 378.1c138-66.8 175.1-214.8 176-303.4l-176-74.6 0 0z\"]\n};\nvar faShieldAlt = faShieldHalved;\nvar faCaretUp = {\n  prefix: 'fas',\n  iconName: 'caret-up',\n  icon: [320, 512, [], \"f0d8\", \"M140.3 135.2c12.6-10.3 31.1-9.5 42.8 2.2l128 128c9.2 9.2 11.9 22.9 6.9 34.9S301.4 320 288.5 320l-256 0c-12.9 0-24.6-7.8-29.6-19.8S.7 274.5 9.9 265.4l128-128 2.4-2.2z\"]\n};\nvar faFilePen = {\n  prefix: 'fas',\n  iconName: 'file-pen',\n  icon: [640, 512, [128221, \"file-edit\"], \"f31c\", \"M128.1 0c-35.3 0-64 28.7-64 64l0 384c0 35.3 28.7 64 64 64l146.2 0 10.9-54.5c4.3-21.7 15-41.6 30.6-57.2l132.2-132.2 0-97.5c0-17-6.7-33.3-18.7-45.3L322.8 18.7C310.8 6.7 294.5 0 277.6 0L128.1 0zM389.6 176l-93.5 0c-13.3 0-24-10.7-24-24l0-93.5 117.5 117.5zM332.3 466.9l-11.9 59.6c-.2 .9-.3 1.9-.3 2.9 0 8 6.5 14.6 14.6 14.6 1 0 1.9-.1 2.9-.3l59.6-11.9c12.4-2.5 23.8-8.6 32.7-17.5l118.9-118.9-80-80-118.9 118.9c-8.9 8.9-15 20.3-17.5 32.7zm267.8-123c22.1-22.1 22.1-57.9 0-80s-57.9-22.1-80 0l-28.8 28.8 80 80 28.8-28.8z\"]\n};\nvar faFileEdit = faFilePen;\nvar faPersonBiking = {\n  prefix: 'fas',\n  iconName: 'person-biking',\n  icon: [576, 512, [128692, \"biking\"], \"f84a\", \"M368 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm27.2 64l-61.8-48.8c-17.3-13.6-41.7-13.8-59.1-.3l-83.1 64.2c-30.7 23.8-28.5 70.8 4.3 91.6L256 305.1 256 416c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128c0-10.7-5.3-20.7-14.2-26.6L263 232.9 323.3 184.4 364 217c5.7 4.5 12.7 7 20 7l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-52.8 0zM112 512a112 112 0 1 0 0-224 112 112 0 1 0 0 224zm352 0a112 112 0 1 0 0-224 112 112 0 1 0 0 224z\"]\n};\nvar faBiking = faPersonBiking;\nvar faBookOpenReader = {\n  prefix: 'fas',\n  iconName: 'book-open-reader',\n  icon: [512, 512, [\"book-reader\"], \"f5da\", \"M256 152a88 88 0 1 0 0-176 88 88 0 1 0 0 176zm0 298.7l0-149.3c16.3-6.8 32.9-13.7 49.7-20.7 39-16.2 80.8-24.6 123.1-24.6l19.2 0 0 160-19.2 0c-59.1 0-117.7 11.7-172.3 34.5l-.5 .2zM256 232l-25.1-10.5C184.1 202 133.9 192 83.2 192L48 192c-26.5 0-48 21.5-48 48L0 432c0 26.5 21.5 48 48 48l35.2 0c50.7 0 100.9 10 147.7 29.5l12.8 5.3c7.9 3.3 16.7 3.3 24.6 0l12.8-5.3c46.8-19.5 97-29.5 147.7-29.5l35.2 0c26.5 0 48-21.5 48-48l0-192c0-26.5-21.5-48-48-48l-35.2 0c-50.7 0-100.9 10-147.7 29.5L256 232z\"]\n};\nvar faBookReader = faBookOpenReader;\nvar faGlassWaterDroplet = {\n  prefix: 'fas',\n  iconName: 'glass-water-droplet',\n  icon: [384, 512, [], \"e4f5\", \"M32 0C23.1 0 14.6 3.7 8.6 10.2S-.6 25.4 .1 34.3L28.9 437.7c3 41.9 37.8 74.3 79.8 74.3l166.6 0c42 0 76.8-32.4 79.8-74.3L383.9 34.3c.6-8.9-2.4-17.6-8.5-24.1S360.9 0 352 0L32 0zM83 297.5L66.4 64 317.6 64 301 297.5 288 304c-20.1 10.1-43.9 10.1-64 0s-43.9-10.1-64 0-43.9 10.1-64 0l-13-6.5zM256 196c0-24-33.7-70.1-52.2-93.5-6.1-7.7-17.5-7.7-23.6 0-18.5 23.4-52.2 69.5-52.2 93.5 0 33.1 28.7 60 64 60s64-26.9 64-60z\"]\n};\nvar faTowerBroadcast = {\n  prefix: 'fas',\n  iconName: 'tower-broadcast',\n  icon: [576, 512, [\"broadcast-tower\"], \"f519\", \"M87.9 11.5c-11.3-6.9-26.1-3.2-33 8.1-24.8 41-39 89.1-39 140.4s14.2 99.4 39 140.4c6.9 11.3 21.6 15 33 8.1s15-21.6 8.1-33C75.7 241.9 64 202.3 64 160S75.7 78.1 96.1 44.4c6.9-11.3 3.2-26.1-8.1-33zm400.1 0c-11.3 6.9-15 21.6-8.1 33 20.4 33.7 32.1 73.3 32.1 115.6s-11.7 81.9-32.1 115.6c-6.9 11.3-3.2 26.1 8.1 33s26.1 3.2 33-8.1c24.8-41 39-89.1 39-140.4S545.8 60.6 521 19.6c-6.9-11.3-21.6-15-33-8.1zM320 215.4c19.1-11.1 32-31.7 32-55.4 0-35.3-28.7-64-64-64s-64 28.7-64 64c0 23.7 12.9 44.4 32 55.4L256 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-264.6zM180.2 91c7.2-11.2 3.9-26-7.2-33.2s-26-3.9-33.2 7.2c-17.6 27.4-27.8 60-27.8 95s10.2 67.6 27.8 95c7.2 11.2 22 14.4 33.2 7.2s14.4-22 7.2-33.2c-12.8-19.9-20.2-43.6-20.2-69s7.4-49.1 20.2-69zM436.2 65c-7.2-11.2-22-14.4-33.2-7.2s-14.4 22-7.2 33.2c12.8 19.9 20.2 43.6 20.2 69s-7.4 49.1-20.2 69c-7.2 11.2-3.9 26 7.2 33.2s26 3.9 33.2-7.2c17.6-27.4 27.8-60 27.8-95s-10.2-67.6-27.8-95z\"]\n};\nvar faBroadcastTower = faTowerBroadcast;\nvar faMinimize = {\n  prefix: 'fas',\n  iconName: 'minimize',\n  icon: [512, 512, [\"compress-arrows-alt\"], \"f78c\", \"M456 224l-144 0c-13.3 0-24-10.7-24-24l0-144c0-9.7 5.8-18.5 14.8-22.2S322.1 32.2 329 39l40 40 73.4-73.4C446 2 450.9 0 456 0s10 2 13.7 5.7l36.7 36.7C510 46 512 50.9 512 56s-2 10-5.7 13.7L433 143 473 183c6.9 6.9 8.9 17.2 5.2 26.2S465.7 224 456 224zm0 64c9.7 0 18.5 5.8 22.2 14.8s1.7 19.3-5.2 26.2l-40 40 73.4 73.4c3.6 3.6 5.7 8.5 5.7 13.7s-2 10-5.7 13.7l-36.7 36.7C466 510 461.1 512 456 512s-10-2-13.7-5.7L369 433 329 473c-6.9 6.9-17.2 8.9-26.2 5.2S288 465.7 288 456l0-144c0-13.3 10.7-24 24-24l144 0zm-256 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-40-40-73.4 73.4C66 510 61.1 512 56 512s-10-2-13.7-5.7L5.7 469.7C2 466 0 461.1 0 456s2-10 5.7-13.7L79 369 39 329c-6.9-6.9-8.9-17.2-5.2-26.2S46.3 288 56 288l144 0zM56 224c-9.7 0-18.5-5.8-22.2-14.8S32.2 189.9 39 183L79 143 5.7 69.7C2 66 0 61.1 0 56S2 46 5.7 42.3L42.3 5.7C46 2 50.9 0 56 0S66 2 69.7 5.7L143 79 183 39c6.9-6.9 17.2-8.9 26.2-5.2S224 46.3 224 56l0 144c0 13.3-10.7 24-24 24L56 224z\"]\n};\nvar faCompressArrowsAlt = faMinimize;\nvar faArrowRightToCity = {\n  prefix: 'fas',\n  iconName: 'arrow-right-to-city',\n  icon: [640, 512, [], \"e4b3\", \"M288 48c0-26.5 21.5-48 48-48l96 0c26.5 0 48 21.5 48 48l0 80 48 0 0-72c0-13.3 10.7-24 24-24s24 10.7 24 24l0 72 16 0c26.5 0 48 21.5 48 48l0 288c0 26.5-21.5 48-48 48l-256 0c-26.5 0-48-21.5-48-48l0-416zm64 64l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm16 80c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM352 304l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm176-80c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM512 336l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM153 167l72 72c9.4 9.4 9.4 24.6 0 33.9l-72 72c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l31-31-102.1 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l102.1 0-31-31c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0z\"]\n};\nvar faLaptopMedical = {\n  prefix: 'fas',\n  iconName: 'laptop-medical',\n  icon: [640, 512, [], \"f812\", \"M64 96c0-35.3 28.7-64 64-64l384 0c35.3 0 64 28.7 64 64l0 240-64 0 0-240-384 0 0 240-64 0 0-240zM0 403.2C0 392.6 8.6 384 19.2 384l601.6 0c10.6 0 19.2 8.6 19.2 19.2 0 42.4-34.4 76.8-76.8 76.8L76.8 480C34.4 480 0 445.6 0 403.2zM288 160c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 40 40 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-40 0 0 40c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-40-40 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l40 0 0-40z\"]\n};\nvar faBreadSlice = {\n  prefix: 'fas',\n  iconName: 'bread-slice',\n  icon: [512, 512, [], \"f7ec\", \"M64 432l0-176c-35.3 0-64-28.7-64-64 0-216.5 512-216.5 512 0 0 35.3-28.7 64-64 64l0 176c0 26.5-21.5 48-48 48l-288 0c-26.5 0-48-21.5-48-48z\"]\n};\nvar faGlobe = {\n  prefix: 'fas',\n  iconName: 'globe',\n  icon: [512, 512, [127760], \"f0ac\", \"M351.9 280l-190.9 0c2.9 64.5 17.2 123.9 37.5 167.4 11.4 24.5 23.7 41.8 35.1 52.4 11.2 10.5 18.9 12.2 22.9 12.2s11.7-1.7 22.9-12.2c11.4-10.6 23.7-28 35.1-52.4 20.3-43.5 34.6-102.9 37.5-167.4zM160.9 232l190.9 0C349 167.5 334.7 108.1 314.4 64.6 303 40.2 290.7 22.8 279.3 12.2 268.1 1.7 260.4 0 256.4 0s-11.7 1.7-22.9 12.2c-11.4 10.6-23.7 28-35.1 52.4-20.3 43.5-34.6 102.9-37.5 167.4zm-48 0C116.4 146.4 138.5 66.9 170.8 14.7 78.7 47.3 10.9 131.2 1.5 232l111.4 0zM1.5 280c9.4 100.8 77.2 184.7 169.3 217.3-32.3-52.2-54.4-131.7-57.9-217.3L1.5 280zm398.4 0c-3.5 85.6-25.6 165.1-57.9 217.3 92.1-32.7 159.9-116.5 169.3-217.3l-111.4 0zm111.4-48C501.9 131.2 434.1 47.3 342 14.7 374.3 66.9 396.4 146.4 399.9 232l111.4 0z\"]\n};\nvar faFolderMinus = {\n  prefix: 'fas',\n  iconName: 'folder-minus',\n  icon: [512, 512, [], \"f65d\", \"M448 448L64 448c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l138.7 0c13.8 0 27.3 4.5 38.4 12.8l38.4 28.8c5.5 4.2 12.3 6.4 19.2 6.4L448 80c35.3 0 64 28.7 64 64l0 240c0 35.3-28.7 64-64 64zM184 240c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0z\"]\n};\nvar faMaskFace = {\n  prefix: 'fas',\n  iconName: 'mask-face',\n  icon: [640, 512, [], \"e1d7\", \"M320 64c-27.2 0-53.8 8-76.4 23.1l-37.1 24.8c-15.8 10.5-34.3 16.1-53.3 16.1L64 128c-35.3 0-64 28.7-64 64l0 78.7c0 62.6 45.2 116 107 126.3l97.9 16.3c33 22 72.6 34.7 115.1 34.7s82.2-12.8 115.1-34.7L533 396.9c61.7-10.3 107-63.7 107-126.3l0-78.7c0-35.3-28.7-64-64-64l-89.2 0c-19 0-37.5-5.6-53.3-16.1L396.4 87.1C373.8 72 347.2 64 320 64zM135.9 336.9l-18.4-3.1C86.6 328.7 64 302 64 270.7l0-78.7 48 0 0 48c0 35 8.6 67.9 23.9 96.9zm386.6-3.1l-18.4 3.1C519.4 307.9 528 275 528 240l0-48 48 0 0 78.7c0 31.3-22.6 58-53.5 63.1zM192 232c0-13.3 10.7-24 24-24l208 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-208 0c-13.3 0-24-10.7-24-24zm56 56l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nvar faBong = {\n  prefix: 'fas',\n  iconName: 'bong',\n  icon: [512, 512, [], \"f55c\", \"M448.5 384c0 41.5-13.1 79.9-35.5 111.3-7.9 11.1-21.2 16.7-34.8 16.7l-243.3 0c-13.7 0-26.9-5.6-34.8-16.7-22.4-31.4-35.5-69.8-35.5-111.3 0-71.1 38.6-133.1 96-166.3l0-153.7c-17.7 0-32-14.3-32-32s14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 153.7c14.2 8.2 27.2 18.2 38.8 29.6l39.3-39.3-7-7c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0c16 16 32 32 48 48 9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-7-7-43.3 43.3c17.3 28.9 27.3 62.6 27.3 98.8zM288.5 64l-64 0 0 190.6-32 18.5c-19.5 11.3-35.7 27.5-46.9 46.9l221.8 0c-11.2-19.4-27.4-35.6-46.9-46.9l-32-18.5 0-190.6z\"]\n};\nvar faRoadBridge = {\n  prefix: 'fas',\n  iconName: 'road-bridge',\n  icon: [576, 512, [], \"e563\", \"M32 32l208 0 0 64-24 0 0 64 24 0 0 129.3c-45.4 7.6-80 47.1-80 94.7l0 64c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-94c0-38.8-26.4-72.6-64-82l0-112 40 0 0-64-8 0C14.3 96 0 81.7 0 64S14.3 32 32 32zM88 96l0 64 80 0 0-64-80 0zM336 32l72 0 0 72c0 13.3 10.7 24 24 24s24-10.7 24-24l0-72 72 0c26.5 0 48 21.5 48 48l0 352c0 26.5-21.5 48-48 48l-72 0 0-72c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 72-72 0c-26.5 0-48-21.5-48-48l0-352c0-26.5 21.5-48 48-48zm96 160c-13.3 0-24 10.7-24 24l0 80c0 13.3 10.7 24 24 24s24-10.7 24-24l0-80c0-13.3-10.7-24-24-24z\"]\n};\nvar faArrowUp91 = {\n  prefix: 'fas',\n  iconName: 'arrow-up-9-1',\n  icon: [512, 512, [\"sort-numeric-up-alt\"], \"f887\", \"M150.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L96 141.3 96 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-306.7 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96zM365.1 206.6c-9.6 14.8-5.4 34.6 9.4 44.3s34.6 5.4 44.3-9.4l42.1-64.9c12.4-19.2 19.1-41.6 19.1-64.5 0-44.2-35.8-80-80-80s-80 35.8-80 80c0 36.1 23.9 66.7 56.8 76.6l-11.7 18zM376 112a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm42.7 182c-8.3-6-19.1-7.7-28.8-4.4l-48 16c-16.8 5.6-25.8 23.7-20.2 40.5s23.7 25.8 40.5 20.2l5.9-2 0 51.6-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-16 0 0-96c0-10.3-4.9-19.9-13.3-26z\"]\n};\nvar faSortNumericUpAlt = faArrowUp91;\nvar faMountainCity = {\n  prefix: 'fas',\n  iconName: 'mountain-city',\n  icon: [640, 512, [], \"e52e\", \"M256.3 48c0-26.5 21.5-48 48-48l96 0c26.5 0 48 21.5 48 48l0 48 48 0 0-72c0-13.3 10.7-24 24-24s24 10.7 24 24l0 72 16 0c26.5 0 48 21.5 48 48l0 320c0 26.5-21.5 48-48 48l-77.8 0c4-15.4 2.4-32.6-6.7-48.2L354.6 256 368.3 256c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-6.1 0-11.4 3.4-14.1 8.5l-42.6-73c-6-10.2-14.1-18-23.3-23.3l0-56.2zm64 64l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm160 96l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm16 80c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm-272-64.7l-65.1 111.6 33.1 33.1 48-48 40.4 0-56.4-96.7zm-27.6-47.9c12.3-21.2 42.9-21.2 55.3 0L420.3 463.9c12.4 21.3-2.9 48.1-27.6 48.1L56 512c-24.7 0-40.1-26.8-27.6-48.1L196.7 175.4z\"]\n};\nvar faArrowDown91 = {\n  prefix: 'fas',\n  iconName: 'arrow-down-9-1',\n  icon: [512, 512, [\"sort-numeric-desc\", \"sort-numeric-down-alt\"], \"f886\", \"M230.6 390.6l-80 80c-12.5 12.5-32.8 12.5-45.3 0l-80-80c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L96 370.7 96 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 306.7 25.4-25.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zm134.5-184l11.7-18c-32.9-9.9-56.8-40.5-56.8-76.6 0-44.2 35.8-80 80-80s80 35.8 80 80c0 22.9-6.6 45.3-19.1 64.5l-42.1 64.9c-9.6 14.8-29.4 19.1-44.3 9.4s-19.1-29.4-9.4-44.3zM424 112a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm-5.3 182c8.3 6 13.3 15.7 13.3 26l0 96 16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-51.6-5.9 2c-16.8 5.6-34.9-3.5-40.5-20.2s3.5-34.9 20.2-40.5l48-16c9.8-3.3 20.5-1.6 28.8 4.4z\"]\n};\nvar faSortNumericDesc = faArrowDown91;\nvar faSortNumericDownAlt = faArrowDown91;\nvar faFaceGrinWide = {\n  prefix: 'fas',\n  iconName: 'face-grin-wide',\n  icon: [512, 512, [128515, \"grin-alt\"], \"f581\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM386.7 308.9c11.9-3.7 23.9 6.3 19.6 18.1-22.4 61.3-81.3 105.1-150.3 105.1S128.1 388.2 105.7 326.9c-4.3-11.8 7.7-21.8 19.6-18.1 39.2 12.2 83.7 19.1 130.7 19.1s91.5-6.9 130.7-19.1zM208 192c0 35.3-14.3 64-32 64s-32-28.7-32-64 14.3-64 32-64 32 28.7 32 64zm128 64c-17.7 0-32-28.7-32-64s14.3-64 32-64 32 28.7 32 64-14.3 64-32 64z\"]\n};\nvar faGrinAlt = faFaceGrinWide;\nvar faPoop = {\n  prefix: 'fas',\n  iconName: 'poop',\n  icon: [512, 512, [], \"f619\", \"M254.4 6.6c3.5-4.3 9-6.5 14.5-5.7 46.9 6.3 83.1 46.5 83.1 95.1 0 11.2-1.9 22-5.5 32l5.5 0c35.3 0 64 28.7 64 64 0 19.1-8.4 36.3-21.7 48l13.7 0c39.8 0 72 32.2 72 72 0 23.2-11 43.8-28 57 34.1 5.7 60 35.3 60 71 0 39.8-32.2 72-72 72L72 512c-39.8 0-72-32.2-72-72 0-35.7 25.9-65.3 60-71-17-13.2-28-33.8-28-57 0-39.8 32.2-72 72-72l13.7 0c-13.3-11.7-21.7-28.9-21.7-48 0-35.3 28.7-64 64-64l16.2 0c44.1-.1 79.8-35.9 79.8-80 0-9.2-1.5-17.9-4.3-26.1-1.8-5.2-.8-11.1 2.8-15.4z\"]\n};\nvar faDharmachakra = {\n  prefix: 'fas',\n  iconName: 'dharmachakra',\n  icon: [512, 512, [9784], \"f655\", \"M337.8 205.7l48.6-42.5c13.8 19.3 23.4 41.9 27.4 66.2l-64.4 4.3c-2.4-10.1-6.4-19.5-11.6-28zm140.1 19.5c-5.3-38.8-20.6-74.5-43.2-104.3l.8-.7C449 108.4 449.7 87.6 437 75s-33.4-12-45.2 1.5l-.7 .8c-29.8-22.6-65.5-37.9-104.3-43.2l.1-1.1c1.2-17.9-13-33-30.9-33s-32.1 15.2-30.9 33l.1 1.1c-38.8 5.3-74.5 20.6-104.3 43.2l-.7-.8C108.4 63 87.6 62.3 75 75s-12 33.4 1.5 45.2l.8 .7c-22.6 29.8-37.9 65.5-43.2 104.3l-1.1-.1c-17.9-1.2-33 13-33 30.9s15.2 32.1 33 30.9l1.1-.1c5.3 38.8 20.6 74.5 43.2 104.3l-.8 .7C63 403.6 62.3 424.4 75 437s33.4 12 45.2-1.5l.7-.8c29.8 22.6 65.5 37.9 104.3 43.2l-.1 1.1c-1.2 17.9 13 33 30.9 33s32.1-15.2 30.9-33l-.1-1.1c38.8-5.3 74.5-20.6 104.3-43.2l.7 .8c11.8 13.5 32.5 14.2 45.2 1.5s12-33.4-1.5-45.2l-.8-.7c22.6-29.8 37.9-65.5 43.2-104.3l1.1 .1c17.9 1.2 33-13 33-30.9s-15.2-32.1-33-30.9l-1.1 .1zM163.2 125.6c19.3-13.8 41.9-23.4 66.2-27.5l4.3 64.4c-10 2.4-19.5 6.4-28 11.6l-42.5-48.6zm-65 103.8c4.1-24.4 13.7-46.9 27.5-66.2l48.6 42.5c-5.3 8.5-9.2 18-11.6 28l-64.4-4.3zm27.5 119.4c-13.8-19.3-23.4-41.9-27.5-66.2l64.4-4.3c2.4 10.1 6.4 19.5 11.6 28l-48.6 42.5zm103.8 65c-24.4-4.1-46.9-13.7-66.2-27.4l42.5-48.6c8.5 5.3 18 9.2 28 11.6l-4.3 64.4zm119.4-27.4c-19.3 13.8-41.9 23.4-66.2 27.4l-4.3-64.4c10-2.4 19.5-6.4 28-11.6l42.5 48.6zm65-103.8c-4.1 24.4-13.7 46.9-27.4 66.2l-48.6-42.5c5.3-8.6 9.2-18 11.6-28l64.4 4.3zm-65-156.9l-42.5 48.6c-8.6-5.3-18-9.2-28-11.6l4.3-64.4c24.4 4.1 46.9 13.7 66.2 27.5zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faBatteryQuarter = {\n  prefix: 'fas',\n  iconName: 'battery-quarter',\n  icon: [640, 512, [\"battery-2\"], \"f243\", \"M528 128c8.8 0 16 7.2 16 16l0 224c0 8.8-7.2 16-16 16l-416 0c-8.8 0-16-7.2-16-16l0-224c0-8.8 7.2-16 16-16l416 0zM112 64c-44.2 0-80 35.8-80 80l0 224c0 44.2 35.8 80 80 80l416 0c44.2 0 80-35.8 80-80l0-48c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80L112 64zm56 112c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24l64 0c13.3 0 24-10.7 24-24l0-112c0-13.3-10.7-24-24-24l-64 0z\"]\n};\nvar faBattery2 = faBatteryQuarter;\nvar faAnkh = {\n  prefix: 'fas',\n  iconName: 'ankh',\n  icon: [320, 512, [9765], \"f644\", \"M96 128c0-35.3 28.7-64 64-64s64 28.7 64 64c0 41.6-20.7 76.6-46.6 104.1-5.9 6.2-11.8 11.8-17.4 16.7-5.6-4.9-11.5-10.5-17.4-16.7-25.9-27.5-46.6-62.6-46.6-104.1zM160 0C89.3 0 32 57.3 32 128 32 180.4 53.5 223.5 78.8 256L32 256c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0 0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160 96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-46.8 0C266.5 223.5 288 180.4 288 128 288 57.3 230.7 0 160 0z\"]\n};\nvar faDiamond = {\n  prefix: 'fas',\n  iconName: 'diamond',\n  icon: [512, 512, [9830], \"f219\", \"M17 215L215 17C225.9 6.1 240.6 0 256 0s30.1 6.1 41 17L495 215c10.9 10.9 17 25.6 17 41s-6.1 30.1-17 41L297 495c-10.9 10.9-25.6 17-41 17s-30.1-6.1-41-17L17 297C6.1 286.1 0 271.4 0 256s6.1-30.1 17-41z\"]\n};\nvar faSubscript = {\n  prefix: 'fas',\n  iconName: 'subscript',\n  icon: [576, 512, [], \"f12c\", \"M96 64C78.3 64 64 78.3 64 96s14.3 32 32 32l15.3 0 89.6 128-89.6 128-15.3 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0c10.4 0 20.2-5.1 26.2-13.6L240 311.8 325.8 434.4c6 8.6 15.8 13.6 26.2 13.6l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-15.3 0-89.6-128 89.6-128 15.3 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0c-10.4 0-20.2 5.1-26.2 13.6L240 200.2 154.2 77.6C148.2 69.1 138.4 64 128 64L96 64zM544 320c0-11.1-5.7-21.4-15.2-27.2s-21.2-6.4-31.1-1.4l-32 16c-15.8 7.9-22.2 27.1-14.3 42.9 5.6 11.2 16.9 17.7 28.6 17.7l0 80c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-128z\"]\n};\nvar faRupeeSign = {\n  prefix: 'fas',\n  iconName: 'rupee-sign',\n  icon: [448, 512, [8360, \"rupee\"], \"f156\", \"M0 64C0 46.3 14.3 32 32 32l80 0c79.5 0 144 64.5 144 144 0 54.3-30 101.5-74.4 126.1l41 136.7c5.1 16.9-4.5 34.8-21.5 39.8s-34.8-4.5-39.8-21.5L120.1 319.8c-2.7 .1-5.4 .2-8.1 .2l-48 0 0 128c0 17.7-14.3 32-32 32S0 465.7 0 448L0 64zM64 256l48 0c44.2 0 80-35.8 80-80s-35.8-80-80-80l-48 0 0 160zm285.1-32l34.9 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-34.9 0c-7.2 0-13.1 5.9-13.1 13.1 0 5.7 3.7 10.7 9.1 12.5l49.4 15.9c31.9 10.3 53.5 39.9 53.5 73.4 0 42.6-34.5 77.1-77.1 77.1L320 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l50.9 0c7.2 0 13.1-5.9 13.1-13.1 0-5.7-3.7-10.7-9.1-12.5l-49.4-15.9c-31.9-10.3-53.5-39.9-53.5-73.4 0-42.6 34.5-77.1 77.1-77.1z\"]\n};\nvar faRupee = faRupeeSign;\nvar faPersonRifle = {\n  prefix: 'fas',\n  iconName: 'person-rifle',\n  icon: [512, 512, [], \"e54e\", \"M416 0L384 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l0 100.3c-9.6 5.5-16 15.9-16 27.7l0 32c-17.7 0-32 14.3-32 32l0 144c0 17.7 14.3 32 32 32l16 0 0 96c0 8.8 7.2 16 16 16l59.5 0c10.4 0 18-9.8 15.5-19.9l-23-92.1 44 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-48 0 0-26.7 53.1-17.7c6.5-2.2 10.9-8.3 10.9-15.2l0-84.5c0-8.8-7.2-16-16-16l-16 0c-8.8 0-16 7.2-16 16l0 56-16 5.3 0-109.3c0-11.8-6.4-22.2-16-27.7L432 16c0-8.8-7.2-16-16-16zM224 208C118 208 32 294 32 400l0 48c0 17.7 14.3 32 32 32s32-14.3 32-32l0-48c0-32.5 12.1-62.1 32-84.7l0 196.7 160 0 0-293.1c-20-7.1-41.6-10.9-64-10.9zM280 88a72 72 0 1 0 -144 0 72 72 0 1 0 144 0z\"]\n};\nvar faD = {\n  prefix: 'fas',\n  iconName: 'd',\n  icon: [384, 512, [100], \"44\", \"M0 64C0 46.3 14.3 32 32 32l128 0c123.7 0 224 100.3 224 224S283.7 480 160 480L32 480c-17.7 0-32-14.3-32-32L0 64zM64 96l0 320 96 0c88.4 0 160-71.6 160-160S248.4 96 160 96L64 96z\"]\n};\nvar faSquareNfi = {\n  prefix: 'fas',\n  iconName: 'square-nfi',\n  icon: [448, 512, [], \"e576\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM93 172.3l35 63 0-51.4c0-13.3 10.7-24 24-24s24 10.7 24 24l0 144c0 10.9-7.4 20.5-18 23.2s-21.7-2-27-11.6l-35-63 0 51.4c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-144c0-10.9 7.4-20.5 18-23.2s21.7 2 27 11.6zM208 184c0-13.3 10.7-24 24-24l80 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-56 0 0 32 40 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-40 0 0 40c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-144zm192 0l0 144c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-144c0-13.3 10.7-24 24-24s24 10.7 24 24z\"]\n};\nvar faTeeth = {\n  prefix: 'fas',\n  iconName: 'teeth',\n  icon: [512, 512, [], \"f62e\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM144 208l0 24c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-24c0-26.5-21.5-48-48-48s-48 21.5-48 48zm128 0l0 24c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-24c0-26.5-21.5-48-48-48s-48 21.5-48 48zM80 176c-17.7 0-32 14.3-32 32l0 24c0 13.3 10.7 24 24 24l16 0c13.3 0 24-10.7 24-24l0-24c0-17.7-14.3-32-32-32zm320 32l0 24c0 13.3 10.7 24 24 24l16 0c13.3 0 24-10.7 24-24l0-24c0-17.7-14.3-32-32-32s-32 14.3-32 32zM48 336c0 17.7 14.3 32 32 32s32-14.3 32-32l0-16c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 16zm144 48c26.5 0 48-21.5 48-48l0-16c0-8.8-7.2-16-16-16l-64 0c-8.8 0-16 7.2-16 16l0 16c0 26.5 21.5 48 48 48zm128 0c26.5 0 48-21.5 48-48l0-16c0-8.8-7.2-16-16-16l-64 0c-8.8 0-16 7.2-16 16l0 16c0 26.5 21.5 48 48 48zm112-16c17.7 0 32-14.3 32-32l0-16c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 16c0 17.7 14.3 32 32 32z\"]\n};\nvar faMagnifyingGlassDollar = {\n  prefix: 'fas',\n  iconName: 'magnifying-glass-dollar',\n  icon: [512, 512, [\"search-dollar\"], \"f688\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376C296.3 401.1 253.9 416 208 416 93.1 416 0 322.9 0 208S93.1 0 208 0 416 93.1 416 208zM212 96c-11 0-20 9-20 20l0 4c-28.8 .3-52 23.7-52 52.5 0 25.7 18.5 47.6 43.9 51.8l41.7 7c6 1 10.4 6.2 10.4 12.3 0 6.9-5.6 12.5-12.5 12.5L168 256c-11 0-20 9-20 20s9 20 20 20l24 0 0 4c0 11 9 20 20 20s20-9 20-20l0-4.7c25-4.1 44-25.7 44-51.8 0-25.7-18.5-47.6-43.9-51.8l-41.7-7c-6-1-10.4-6.2-10.4-12.3 0-6.9 5.6-12.5 12.5-12.5l47.5 0c11 0 20-9 20-20s-9-20-20-20l-8 0 0-4c0-11-9-20-20-20z\"]\n};\nvar faSearchDollar = faMagnifyingGlassDollar;\nvar faDumpsterFire = {\n  prefix: 'fas',\n  iconName: 'dumpster-fire',\n  icon: [640, 512, [], \"f794\", \"M164.3 64L138.7 192 56 192c-13.3 0-24-10.7-24-24l0-4.1c0-2.6 .4-5.1 1.2-7.6L58.5 80.4C61.8 70.6 71 64 81.3 64l83 0zm23.4 128l25.6-128 82.7 0 0 128-108.3 0zM344 64l82.7 0 16 80c-14.7 .2-29.3 5.5-40.9 15.9-11.5 10.3-22.5 21-32.8 32.1l-24.9 0 0-128zM96 240l233.2 0c-6.4 8.8-12.3 17.6-17.7 26.3-21.4 34.7-39.5 76.1-39.5 115.8 0 17.1 2.1 33.8 6 49.9l-120.4 0 1.9 10.3c3.2 17.4-8.4 34-25.8 37.2s-34-8.4-37.2-25.8C71 313.3 58 242.1 57.7 240L96 240zm512-72c0 11-7.4 20.3-17.5 23.1-.9-.8-1.7-1.6-2.6-2.4-21.8-20-54.3-21.8-78-5.5-4.2-4.3-8.5-8.5-12.9-12.6l-21.3-106.6 83 0c10.3 0 19.5 6.6 22.8 16.4l25.3 75.9c.8 2.4 1.2 5 1.2 7.6l0 4.1zM505.7 240.3L518 226.5c5.4-6.1 13.3-8.8 20.9-8.9 7.2 0 14.3 2.6 19.9 7.8 19.7 18.3 39.8 43.2 55 70.6 15.1 27.2 26.2 58.1 26.2 88.1 0 88.7-71.3 159.8-160 159.8-89.6 0-160-71.3-160-159.8 0-37.3 16-73.4 36.8-104.5 20.9-31.3 47.5-59 70.9-80.2 5.7-5.2 13.1-7.7 20.3-7.5s13.4 3.2 18.8 7.5c14.4 11.4 38.9 40.7 38.9 40.7zM544 432.2c0-36.5-37-73-54.8-88.4-5.4-4.7-13.1-4.7-18.5 0-17.7 15.4-54.8 51.9-54.8 88.4 0 35.3 28.7 64 64 64s64-28.7 64-64z\"]\n};\nvar faUpload = {\n  prefix: 'fas',\n  iconName: 'upload',\n  icon: [448, 512, [], \"f093\", \"M256 109.3L256 320c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-210.7-41.4 41.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l96-96c12.5-12.5 32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 109.3zM224 400c44.2 0 80-35.8 80-80l80 0c35.3 0 64 28.7 64 64l0 32c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64l0-32c0-35.3 28.7-64 64-64l80 0c0 44.2 35.8 80 80 80zm144 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nvar faUserSlash = {\n  prefix: 'fas',\n  iconName: 'user-slash',\n  icon: [576, 512, [62714, \"user-alt-slash\", \"user-large-slash\"], \"f506\", \"M41-24.9c-9.4-9.4-24.6-9.4-33.9 0S-2.3-.3 7 9.1l528 528c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L311.5 245.7c55-10.9 96.5-59.5 96.5-117.7 0-66.3-53.7-120-120-120-58.2 0-106.8 41.5-117.7 96.5L41-24.9zM235.6 305.4C147.9 316.6 80 391.5 80 482.3 80 498.7 93.3 512 109.7 512l332.5 0-206.6-206.6z\"]\n};\nvar faUserAltSlash = faUserSlash;\nvar faUserLargeSlash = faUserSlash;\nvar faArrowLeft = {\n  prefix: 'fas',\n  iconName: 'arrow-left',\n  icon: [512, 512, [8592], \"f060\", \"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 288 480 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-370.7 0 105.4-105.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z\"]\n};\nvar faVialVirus = {\n  prefix: 'fas',\n  iconName: 'vial-virus',\n  icon: [576, 512, [], \"e597\", \"M64 32C64 14.3 78.3 0 96 0L320 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 151.7c-18.5 0-37 7-51.1 21.1-21.6 21.6-26.6 53.6-15 79.9-26.9 10.4-45.9 36.6-45.9 67.1s19 56.7 45.9 67.1c-7.3 16.5-8 35.2-2.3 52.2-13.4 5.7-28.2 8.8-43.6 8.8-61.9 0-112-50.1-112-112L96 64C78.3 64 64 49.7 64 32zm96 32l0 128 96 0 0-128-96 0zM280 408c-13.3 0-24-10.7-24-24s10.7-24 24-24c28.8 0 43.2-34.8 22.9-55.2-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0c20.4 20.4 55.2 5.9 55.2-22.9 0-13.3 10.7-24 24-24s24 10.7 24 24c0 28.8 34.8 43.2 55.2 22.9 9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9c-20.4 20.4-5.9 55.2 22.9 55.2 13.3 0 24 10.7 24 24s-10.7 24-24 24c-28.8 0-43.2 34.8-22.9 55.2 9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0c-20.4-20.4-55.2-5.9-55.2 22.9 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-28.8-34.8-43.2-55.2-22.9-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9c20.4-20.4 5.9-55.2-22.9-55.2zm104-32a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm88 40a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"]\n};\nvar faCheckDouble = {\n  prefix: 'fas',\n  iconName: 'check-double',\n  icon: [384, 512, [], \"f560\", \"M249.9 66.8c10.4-14.3 7.2-34.3-7.1-44.7s-34.3-7.2-44.7 7.1l-106 145.7-37.5-37.5c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l64 64c6.6 6.6 15.8 10 25.1 9.3s17.9-5.5 23.4-13.1l128-176zm128 136c10.4-14.3 7.2-34.3-7.1-44.7s-34.3-7.2-44.7 7.1l-170 233.7-69.5-69.5c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c6.6 6.6 15.8 10 25.1 9.3s17.9-5.5 23.4-13.1l192-264z\"]\n};\nvar faPaw = {\n  prefix: 'fas',\n  iconName: 'paw',\n  icon: [512, 512, [], \"f1b0\", \"M234.5 92.9c14.3 42.9-.3 86.2-32.6 96.8s-70.1-15.6-84.4-58.5 .3-86.2 32.6-96.8 70.1 15.6 84.4 58.5zM100.4 198.6c18.9 32.4 14.3 70.1-10.2 84.1s-59.7-.9-78.5-33.3-14.3-70.1 10.2-84.1 59.7 .9 78.5 33.3zM69.2 401.2C121.6 259.9 214.7 224 256 224s134.4 35.9 186.8 177.2c3.6 9.7 5.2 20.1 5.2 30.5l0 1.6c0 25.8-20.9 46.7-46.7 46.7-11.5 0-22.9-1.4-34-4.2l-88-22c-15.3-3.8-31.3-3.8-46.6 0l-88 22c-11.1 2.8-22.5 4.2-34 4.2-25.8 0-46.7-20.9-46.7-46.7l0-1.6c0-10.4 1.6-20.8 5.2-30.5zM421.8 282.7c-24.5-14-29.1-51.7-10.2-84.1s54-47.3 78.5-33.3 29.1 51.7 10.2 84.1-54 47.3-78.5 33.3zM310.1 189.7c-32.3-10.6-46.9-53.9-32.6-96.8s52.1-69.1 84.4-58.5 46.9 53.9 32.6 96.8-52.1 69.1-84.4 58.5z\"]\n};\nvar faHelmetSafety = {\n  prefix: 'fas',\n  iconName: 'helmet-safety',\n  icon: [576, 512, [\"hard-hat\", \"hat-hard\"], \"f807\", \"M352 264l0-200c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32l0 200c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-185.9C90 109.8 32 191.8 32 288l0 64 512 0 0-64c-1-95.2-58.4-177.7-144-209.8L400 264c0 13.3-10.7 24-24 24s-24-10.7-24-24zM40 400c-22.1 0-40 17.9-40 40s17.9 40 40 40l496 0c22.1 0 40-17.9 40-40s-17.9-40-40-40L40 400z\"]\n};\nvar faHardHat = faHelmetSafety;\nvar faHatHard = faHelmetSafety;\nvar faE = {\n  prefix: 'fas',\n  iconName: 'e',\n  icon: [320, 512, [101], \"45\", \"M32 32C14.3 32 0 46.3 0 64L0 448c0 17.7 14.3 32 32 32l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-224 0 0-128 160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0 0-128 224 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32z\"]\n};\nvar faFaceLaughSquint = {\n  prefix: 'fas',\n  iconName: 'face-laugh-squint',\n  icon: [512, 512, [\"laugh-squint\"], \"f59b\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM107.7 332.1C102 318 113.4 304 128.6 304l254.9 0c15.2 0 26.6 14 20.9 28.1-23.8 58.6-81.2 99.9-148.3 99.9s-124.6-41.3-148.3-99.9zm15-188.8c4.5-6.8 13.3-9.2 20.6-5.5l79.6 40c5.4 2.7 8.8 8.2 8.8 14.3s-3.4 11.6-8.8 14.3l-79.6 40c-7.3 3.6-16.1 1.3-20.6-5.5s-3.1-15.9 3.1-21.1L159 192 125.8 164.3c-6.2-5.2-7.6-14.3-3.1-21.1zm263.6 21.1L353 192 386.2 219.7c6.2 5.2 7.6 14.3 3.1 21.1s-13.3 9.2-20.6 5.5l-79.6-40c-5.4-2.7-8.8-8.2-8.8-14.3s3.4-11.6 8.8-14.3l79.6-40c7.3-3.6 16.1-1.3 20.6 5.5s3.1 15.9-3.1 21.1z\"]\n};\nvar faLaughSquint = faFaceLaughSquint;\nvar faDownLeftAndUpRightToCenter = {\n  prefix: 'fas',\n  iconName: 'down-left-and-up-right-to-center',\n  icon: [512, 512, [\"compress-alt\"], \"f422\", \"M439.5 7c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2S450.2 240 440.5 240l-144 0c-13.3 0-24-10.7-24-24l0-144c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l39 39 87-87zM72.5 272l144 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-87 87c-9.4 9.4-24.6 9.4-33.9 0l-32-32c-9.4-9.4-9.4-24.6 0-33.9l87-87-39-39c-6.9-6.9-8.9-17.2-5.2-26.2S62.8 272 72.5 272z\"]\n};\nvar faCompressAlt = faDownLeftAndUpRightToCenter;\nvar faGifts = {\n  prefix: 'fas',\n  iconName: 'gifts',\n  icon: [576, 512, [], \"f79c\", \"M202-30.6c12.5 4.4 19 18.1 14.6 30.6l-8.2 23.1 25.4-18.5c10.7-7.8 25.7-5.4 33.5 5.3s5.4 25.7-5.3 33.5L233.8 64 272 64c26.5 0 48 21.5 48 48l0 2.1c-54.7 10.4-96 58.4-96 116l0 1.9c0 8.9 1 17.5 2.8 25.9-11.9 17.8-18.8 39.1-18.8 62.1l0 128c0 23.8 7.4 45.9 20.1 64L48 512c-26.5 0-48-21.5-48-48L0 112C0 85.5 21.5 64 48 64l38.2 0-28.3-20.6C47.2 35.6 44.8 20.6 52.6 9.9S75.4-3.2 86.1 4.6l27.4 20-8.3-25C101-13 107.8-26.6 120.4-30.8s26.2 2.6 30.4 15.2l9.9 29.8 10.7-30.2c4.4-12.5 18.1-19 30.6-14.6zM489.9 208c-7.5 0-14.5 3.8-18.6 10.1L446.9 256 488 256c13.3 0 24-10.7 24-24l0-1.9c0-12.2-9.9-22.1-22.1-22.1zM385.1 256l-24.4-37.9c-4.1-6.3-11.1-10.1-18.6-10.1-12.2 0-22.1 9.9-22.1 22.1l0 1.9c0 13.3 10.7 24 24 24l41.1 0zM281.9 268.5c-6.3-10.7-9.9-23.2-9.9-36.5l0-1.9c0-38.7 31.4-70.1 70.1-70.1 23.8 0 46 12.1 58.9 32.1l15 23.2 15-23.2c12.9-20 35.1-32.1 58.9-32.1 38.7 0 70.1 31.4 70.1 70.1l0 1.9c0 13.3-3.6 25.8-9.9 36.5 15.7 11.7 25.9 30.4 25.9 51.5l0 128c0 35.3-28.7 64-64 64l-72 0 0-208-48 0 0 208-72 0c-35.3 0-64-28.7-64-64l0-128c0-21.1 10.2-39.8 25.9-51.5z\"]\n};\nvar faBed = {\n  prefix: 'fas',\n  iconName: 'bed',\n  icon: [576, 512, [128716], \"f236\", \"M32 32c17.7 0 32 14.3 32 32l0 224 224 0 0-128c0-17.7 14.3-32 32-32l160 0c53 0 96 43 96 96l0 224c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64-448 0 0 64c0 17.7-14.3 32-32 32S0 465.7 0 448L0 64C0 46.3 14.3 32 32 32zm80 160a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z\"]\n};\nvar faMoneyBillTransfer = {\n  prefix: 'fas',\n  iconName: 'money-bill-transfer',\n  icon: [640, 512, [], \"e528\", \"M31 105c-9.4-9.4-9.4-24.6 0-33.9L103-1c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-31 31 67.7 0 0 0 338.3 0c35.3 0 64 28.7 64 64l0 178.2-5.1-5.1c-28.1-28.1-73.7-28.1-101.8 0-27.2 27.2-28.1 70.6-2.8 98.9l67.7 0-31-31c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l72 72c9.4 9.4 9.4 24.6 0 33.9l-72 72c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l31-31-406.1 0c-35.3 0-64-28.7-64-64l0-178.2 5.1 5.1c28.1 28.1 73.7 28.1 101.8 0 27.2-27.2 28.1-70.6 2.8-98.9l-67.7 0 31 31c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L31 105zM416 256a96 96 0 1 0 -192 0 96 96 0 1 0 192 0zm88-64.5c4.4 .5 8-3.1 8-7.5l0-48c0-4.4-3.6-8-8-8l-48 0c-4.4 0-8.1 3.6-7.5 8 3.6 29 26.6 51.9 55.5 55.5zm-368 129c-4.4-.5-8 3.1-8 7.5l0 48c0 4.4 3.6 8 8 8l48 0c4.4 0 8.1-3.6 7.5-8-3.6-29-26.6-51.9-55.5-55.5z\"]\n};\nvar faPersonRunning = {\n  prefix: 'fas',\n  iconName: 'person-running',\n  icon: [448, 512, [127939, \"running\"], \"f70c\", \"M256.5-32a56 56 0 1 1 0 112 56 56 0 1 1 0-112zM123.6 176c-3.3 0-6.2 2-7.4 5L94.2 235.9c-6.6 16.4-25.2 24.4-41.6 17.8s-24.4-25.2-17.8-41.6l21.9-54.9C67.7 129.9 94.1 112 123.6 112l97.3 0c28.5 0 54.8 15.1 69.1 39.7l32.8 56.3 61.6 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-61.6 0c-22.8 0-43.8-12.1-55.3-31.8l-10-17.1-20.7 70.4 75.4 22.6c27.7 8.3 41.8 39 30.1 65.5L285.7 509c-7.2 16.2-26.1 23.4-42.2 16.2s-23.4-26.1-16.2-42.2l49.2-110.8-95.9-28.8c-32.7-9.8-52-43.7-43.7-76.8l22.7-90.6-35.9 0zm-8 181c13.3 14.9 30.7 26.3 51.2 32.4l4.7 1.4-6.9 19.3c-5.8 16.3-16 30.8-29.3 41.8L52.9 519.8c-13.6 11.2-33.8 9.3-45-4.3s-9.3-33.8 4.3-45l82.4-67.9c4.5-3.7 7.8-8.5 9.8-13.9L115.6 357z\"]\n};\nvar faRunning = faPersonRunning;\nvar faCircleChevronDown = {\n  prefix: 'fas',\n  iconName: 'circle-chevron-down',\n  icon: [512, 512, [\"chevron-circle-down\"], \"f13a\", \"M256 0a256 256 0 1 0 0 512 256 256 0 1 0 0-512zM135 241c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l87 87 87-87c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L273 345c-9.4 9.4-24.6 9.4-33.9 0L135 241z\"]\n};\nvar faChevronCircleDown = faCircleChevronDown;\nvar faUserNurse = {\n  prefix: 'fas',\n  iconName: 'user-nurse',\n  icon: [448, 512, [], \"f82f\", \"M96 44.9c0-12.7 7.5-24.2 19.2-29.3l96-42c8.2-3.6 17.5-3.6 25.7 0l96 42C344.5 20.7 352 32.2 352 44.9l0 99.1c0 70.7-57.3 128-128 128S96 214.7 96 144l0-99.1zM304 128l-111.6 0-.4 0-48 0 0 16c0 44.2 35.8 80 80 80s80-35.8 80-80l0-16zM208 16l0 16-16 0c-4.4 0-8 3.6-8 8l0 16c0 4.4 3.6 8 8 8l16 0 0 16c0 4.4 3.6 8 8 8l16 0c4.4 0 8-3.6 8-8l0-16 16 0c4.4 0 8-3.6 8-8l0-16c0-4.4-3.6-8-8-8l-16 0 0-16c0-4.4-3.6-8-8-8L216 8c-4.4 0-8 3.6-8 8zM142.6 323c-6.5-4.9-15.2-6.2-22.6-2.8-61.4 28.2-104.1 90.2-104.1 162.1 0 16.4 13.3 29.7 29.7 29.7l356.6 0c16.4 0 29.7-13.3 29.7-29.7 0-72-42.7-134-104.1-162.1-7.4-3.4-16.1-2.1-22.6 2.8l-67 50.2c-8.5 6.4-20.3 6.4-28.8 0l-67-50.2z\"]\n};\nvar faFaceKissWinkHeart = {\n  prefix: 'fas',\n  iconName: 'face-kiss-wink-heart',\n  icon: [640, 512, [128536, \"kiss-wink-heart\"], \"f598\", \"M543.7 268.3c.2-4.1 .3-8.2 .3-12.3 0-141.4-114.6-256-256-256S32 114.6 32 256 146.6 512 288 512c41.4 0 80.5-9.8 115.1-27.3-7.6-17.1-16.1-38.8-21.8-61.7-7.7-30.5-14.1-76.2 8.2-114.7l2.7-4.6c29.5-51 94.7-68.5 145.7-39 2 1.2 4 2.4 5.9 3.7zM240 304c0-8.8 7.2-16 16-16l32 0c26.5 0 48 21.5 48 48 0 12.3-4.6 23.5-12.2 32 7.6 8.5 12.2 19.7 12.2 32 0 26.5-21.5 48-48 48l-32 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0c-8.8 0-16-7.2-16-16zM208 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm152 20c-11 0-20 9-20 20s-9 20-20 20-20-9-20-20c0-33.1 26.9-60 60-60l16 0c33.1 0 60 26.9 60 60 0 11-9 20-20 20s-20-9-20-20-9-20-20-20l-16 0zM542.8 350c-2.2-18.3-12.9-34.6-28.9-43.8-28.1-16.2-63.9-6.6-80.1 21.5l-2.7 4.6c-24.5 42.5 7.9 117.9 24.4 150.8 5.1 10.1 15.5 16.1 26.8 15.5 36.7-2.2 118.2-11.7 142.8-54.2l2.7-4.6c16.2-28.1 6.6-63.9-21.5-80.1-16-9.2-35.4-10.4-52.4-3.1l-9.8 4.2-1.3-10.6z\"]\n};\nvar faKissWinkHeart = faFaceKissWinkHeart;\nvar faFill = {\n  prefix: 'fas',\n  iconName: 'fill',\n  icon: [512, 512, [], \"f575\", \"M296 64c6.9 0 13.5 2.7 18.3 7.6L440.4 197.7c4.9 4.9 7.6 11.5 7.6 18.3s-2.7 13.5-7.6 18.3L386.7 288 65.3 288c1.3-3.9 3.4-7.4 6.3-10.3l96.4-96.4 33.4 33.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L213.3 136 277.7 71.6c4.9-4.9 11.5-7.6 18.3-7.6zM122.7 136L26.3 232.4C9.5 249.3 0 272.1 0 296s9.5 46.7 26.3 63.6L152.4 485.7C169.3 502.5 192.1 512 216 512s46.7-9.5 63.6-26.3L485.7 279.6C502.5 262.7 512 239.9 512 216s-9.5-46.7-26.3-63.6L359.6 26.3C342.7 9.5 319.9 0 296 0s-46.7 9.5-63.6 26.3L168 90.7 118.6 41.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L122.7 136z\"]\n};\nvar faMoneyBill1Wave = {\n  prefix: 'fas',\n  iconName: 'money-bill-1-wave',\n  icon: [512, 512, [\"money-bill-wave-alt\"], \"f53b\", \"M0 109.5L0 419.6c0 19.4 11.8 37.3 30.3 43.3 94 30 158.8 8.4 223.3-13.1 62.4-20.8 124.4-41.5 212.1-15.3 22.2 6.6 46.2-8.8 46.2-32l0-310.1c0-19.4-11.8-37.3-30.3-43.3-94-30-158.8-8.4-223.3 13.1-62.4 20.8-124.4 41.5-212.1 15.3-22.2-6.6-46.3 8.8-46.3 32zM256 368c-53 0-96-50.1-96-112s43-112 96-112 96 50.1 96 112-43 112-96 112zM127.1 405.5c.7 4.4-2.8 8.1-7.2 8.1-15.7 0-32.1-1.8-50-6.1-3.5-.8-6-4-6-7.7L64 360c0-4.4 3.6-8.1 8-7.5 28.1 3.5 50.6 25.2 55.2 53zM448 354.6c0 5-4.6 8.8-9.5 8-15.4-2.5-30.2-3.9-44.4-4.3-4.9-.1-8.7-4.5-7.2-9.2 7.3-23.7 28-41.4 53.2-44.6 4.4-.5 8 3.1 8 7.5l0 42.6zm-8-195.1c-28.1-3.5-50.6-25.2-55.2-53-.7-4.4 2.8-8.1 7.2-8.1 15.7 0 32.1 1.8 50 6.1 3.5 .8 6 4 6 7.7l0 39.9c0 4.4-3.6 8.1-8 7.5zm-322.1-5.8c4.9 .1 8.7 4.5 7.2 9.2-7.3 23.7-28 41.4-53.2 44.6-4.4 .5-8-3.1-8-7.5l0-42.6c0-5 4.6-8.8 9.5-8 15.4 2.5 30.2 3.9 44.4 4.3zM240 188c-11 0-20 9-20 20 0 9.7 6.9 17.7 16 19.6l0 48.4-4 0c-11 0-20 9-20 20s9 20 20 20l48 0c11 0 20-9 20-20s-9-20-20-20l-4 0 0-68c0-11-9-20-20-20l-16 0z\"]\n};\nvar faMoneyBillWaveAlt = faMoneyBill1Wave;\nvar faLandmark = {\n  prefix: 'fas',\n  iconName: 'landmark',\n  icon: [512, 512, [127963], \"f66f\", \"M238.7 5.1c10.5-6.8 24.1-6.8 34.6 0l224 144c11.9 7.7 17.4 22.3 13.4 35.9s-16.5 23-30.7 23l-32 0 0 208 51.2 38.4c8.1 6 12.8 15.5 12.8 25.6 0 17.7-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32 0-10.1 4.7-19.6 12.8-25.6l51.2-38.4 0 0 0-208-32 0c-14.2 0-26.7-9.4-30.7-23s1.5-28.3 13.4-35.9l224-144zM336 208l0 208 64 0 0-208-64 0zM224 416l64 0 0-208-64 0 0 208zM112 208l0 208 64 0 0-208-64 0z\"]\n};\nvar faMusic = {\n  prefix: 'fas',\n  iconName: 'music',\n  icon: [512, 512, [127925], \"f001\", \"M468 7c7.6 6.1 12 15.3 12 25l0 304c0 44.2-43 80-96 80s-96-35.8-96-80 43-80 96-80c11.2 0 22 1.6 32 4.6l0-116.7-224 49.8 0 206.3c0 44.2-43 80-96 80s-96-35.8-96-80 43-80 96-80c11.2 0 22 1.6 32 4.6L128 96c0-15 10.4-28 25.1-31.2l288-64c9.5-2.1 19.4 .2 27 6.3z\"]\n};\nvar faBookMedical = {\n  prefix: 'fas',\n  iconName: 'book-medical',\n  icon: [448, 512, [], \"f7e6\", \"M96 512l320 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-66.7c18.6-6.6 32-24.4 32-45.3l0-288c0-26.5-21.5-48-48-48L96 0C43 0 0 43 0 96L0 416c0 53 43 96 96 96zM64 416c0-17.7 14.3-32 32-32l256 0 0 64-256 0c-17.7 0-32-14.3-32-32zM192 120c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 40 40 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-40 0 0 40c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-40-40 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l40 0 0-40z\"]\n};\nvar faShuffle = {\n  prefix: 'fas',\n  iconName: 'shuffle',\n  icon: [512, 512, [128256, \"random\"], \"f074\", \"M403.8 34.4c12-5 25.7-2.2 34.9 6.9l64 64c6 6 9.4 14.1 9.4 22.6s-3.4 16.6-9.4 22.6l-64 64c-9.2 9.2-22.9 11.9-34.9 6.9S384 204.9 384 192l0-32-32 0c-10.1 0-19.6 4.7-25.6 12.8l-32.4 43.2-40-53.3 21.2-28.3C293.3 110.2 321.8 96 352 96l32 0 0-32c0-12.9 7.8-24.6 19.8-29.6zM154 296l40 53.3-21.2 28.3C154.7 401.8 126.2 416 96 416l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0c10.1 0 19.6-4.7 25.6-12.8L154 296zM438.6 470.6c-9.2 9.2-22.9 11.9-34.9 6.9S384 460.9 384 448l0-32-32 0c-30.2 0-58.7-14.2-76.8-38.4L121.6 172.8c-6-8.1-15.5-12.8-25.6-12.8l-64 0c-17.7 0-32-14.3-32-32S14.3 96 32 96l64 0c30.2 0 58.7 14.2 76.8 38.4L326.4 339.2c6 8.1 15.5 12.8 25.6 12.8l32 0 0-32c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l64 64c6 6 9.4 14.1 9.4 22.6s-3.4 16.6-9.4 22.6l-64 64z\"]\n};\nvar faRandom = faShuffle;\nvar faUnderline = {\n  prefix: 'fas',\n  iconName: 'underline',\n  icon: [384, 512, [], \"f0cd\", \"M0 32C0 14.3 14.3 0 32 0L96 0c17.7 0 32 14.3 32 32S113.7 64 96 64l0 160c0 53 43 96 96 96s96-43 96-96l0-160c-17.7 0-32-14.3-32-32S270.3 0 288 0l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 160c0 88.4-71.6 160-160 160S32 312.4 32 224L32 64C14.3 64 0 49.7 0 32zM0 480c0-17.7 14.3-32 32-32l320 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32z\"]\n};\nvar faBuildingUser = {\n  prefix: 'fas',\n  iconName: 'building-user',\n  icon: [640, 512, [], \"e4da\", \"M64 64C64 28.7 92.7 0 128 0L384 0c35.3 0 64 28.7 64 64l0 121.3c-46.9 19-80 65-80 118.7 0 27.7 8.8 53.4 23.8 74.4-51.5 21-87.8 71.6-87.8 130.7 0 1 0 1.9 0 2.9l-176 0c-35.3 0-64-28.7-64-64L64 64zM208 400l0 64 53.4 0c7.2-29.4 21.3-56.1 40.4-78.3-6.1-19.5-24.3-33.7-45.8-33.7-26.5 0-48 21.5-48 48zM339 224.3c-1-.2-2-.3-3-.3l-32 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l16.7 0c2.1-22.8 8.4-44.3 18.3-63.7zM176 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm112 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM176 224c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm240 80a80 80 0 1 1 160 0 80 80 0 1 1 -160 0zM352 512c0-53 43-96 96-96l96 0c53 0 96 43 96 96 0 17.7-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32z\"]\n};\nvar faRobot = {\n  prefix: 'fas',\n  iconName: 'robot',\n  icon: [640, 512, [129302], \"f544\", \"M352 0c0-17.7-14.3-32-32-32S288-17.7 288 0l0 64-96 0c-53 0-96 43-96 96l0 224c0 53 43 96 96 96l256 0c53 0 96-43 96-96l0-224c0-53-43-96-96-96l-96 0 0-64zM160 368c0-13.3 10.7-24 24-24l32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0c-13.3 0-24-10.7-24-24zm120 0c0-13.3 10.7-24 24-24l32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0c-13.3 0-24-10.7-24-24zm120 0c0-13.3 10.7-24 24-24l32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0c-13.3 0-24-10.7-24-24zM224 176a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm144 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM64 224c0-17.7-14.3-32-32-32S0 206.3 0 224l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96zm544-32c-17.7 0-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32z\"]\n};\nvar faPlus = {\n  prefix: 'fas',\n  iconName: 'plus',\n  icon: [448, 512, [10133, 61543, \"add\"], \"2b\", \"M256 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 160-160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l160 0 0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160 160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0 0-160z\"]\n};\nvar faAdd = faPlus;\nvar faCopy = {\n  prefix: 'fas',\n  iconName: 'copy',\n  icon: [448, 512, [], \"f0c5\", \"M192 0c-35.3 0-64 28.7-64 64l0 256c0 35.3 28.7 64 64 64l192 0c35.3 0 64-28.7 64-64l0-200.6c0-17.4-7.1-34.1-19.7-46.2L370.6 17.8C358.7 6.4 342.8 0 326.3 0L192 0zM64 128c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l192 0c35.3 0 64-28.7 64-64l0-16-64 0 0 16-192 0 0-256 16 0 0-64-16 0z\"]\n};\nvar faChessKing = {\n  prefix: 'fas',\n  iconName: 'chess-king',\n  icon: [448, 512, [9818], \"f43f\", \"M224-32c17.7 0 32 14.3 32 32l0 32 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 64 153.8 0c21.1 0 38.2 17.1 38.2 38.2 0 6.4-1.6 12.7-4.7 18.3L352 384 408.2 454.3c5 6.3 7.8 14.1 7.8 22.2 0 19.6-15.9 35.5-35.5 35.5L67.5 512c-19.6 0-35.5-15.9-35.5-35.5 0-8.1 2.7-15.9 7.8-22.2L96 384 4.7 216.6C1.6 210.9 0 204.6 0 198.2 0 177.1 17.1 160 38.2 160l153.8 0 0-64-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-32c0-17.7 14.3-32 32-32z\"]\n};\nvar faHouseFloodWater = {\n  prefix: 'fas',\n  iconName: 'house-flood-water',\n  icon: [640, 512, [], \"e50e\", \"M496 208l4.5 0c15.2 0 27.5-12.3 27.5-27.5 0-7.9-3.4-15.5-9.4-20.7L348 10.5C340.3 3.7 330.3 0 320 0s-20.3 3.7-28 10.5L121.4 159.8c-6 5.2-9.4 12.8-9.4 20.7 0 15.2 12.3 27.5 27.5 27.5l4.5 0 0 94.4c20.3-9.4 42.1-14.2 64-14.4 33.1-.2 66.3 10.2 94.4 31.4 22.1 16.6 29.1 16.6 51.2 0 27.5-20.7 59.9-31.2 92.4-31.4 16.9-.1 33.8 2.6 50 8l0-88zm-224-8c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 48c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24l0-48zM474.6 412.1c19 14.4 41.9 28.2 67.2 33.3 26.5 5.4 54.3 .8 80.7-19.1 10.6-8 12.7-23 4.7-33.6s-23-12.7-33.6-4.7c-14.9 11.2-28.6 13.1-42.3 10.3-14.9-3-30.9-11.9-47.8-24.6-38.4-29-90.5-29-129 0-24 18.1-40.7 26.3-54.5 26.3s-30.5-8.2-54.5-26.3c-38.4-29-90.5-29-129 0-21.6 16.3-41.3 25.8-58.9 25.7-9.6-.1-19.9-3-31.2-11.5-10.6-8-25.6-5.9-33.6 4.7S7 418.3 17.6 426.3c19.1 14.4 39.4 21 59.8 21.1 33.9 .2 64.3-17.4 88.1-35.3 21.3-16.1 49.9-16.1 71.2 0 24.2 18.3 52.3 35.9 83.4 35.9s59.1-17.7 83.4-35.9c21.3-16.1 49.9-16.1 71.2 0zm-71.2 96c21.3-16.1 49.9-16.1 71.2 0 19 14.4 41.9 28.2 67.2 33.3 26.5 5.4 54.3 .8 80.7-19.1 10.6-8 12.7-23 4.7-33.6s-23-12.7-33.6-4.7c-14.9 11.2-28.6 13.1-42.3 10.3-14.9-3-30.9-11.9-47.8-24.6-38.4-29-90.5-29-129 0-24 18.1-40.7 26.3-54.5 26.3s-30.5-8.2-54.5-26.3c-38.4-29-90.5-29-129 0-21.6 16.3-41.3 25.8-58.9 25.7-9.6-.1-19.9-3-31.2-11.5-10.6-8-25.6-5.9-33.6 4.7S7 514.3 17.6 522.3c19.1 14.4 39.4 21 59.8 21.1 33.9 .2 64.3-17.4 88.1-35.3 21.3-16.1 49.9-16.1 71.2 0 24.2 18.3 52.3 35.9 83.4 35.9s59.1-17.7 83.4-35.9z\"]\n};\nvar faBitcoinSign = {\n  prefix: 'fas',\n  iconName: 'bitcoin-sign',\n  icon: [320, 512, [], \"e0b4\", \"M64 24C64 10.7 74.7 0 88 0s24 10.7 24 24l0 40 32 0 0-40c0-13.3 10.7-24 24-24s24 10.7 24 24l0 41.1c54.3 7.8 96 54.4 96 110.9 0 24.2-7.7 46.6-20.7 64.9 31.7 19.8 52.7 55 52.7 95.1 0 61.9-50.1 112-112 112l-16 0 0 40c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-40-32 0 0 40c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-40-22.3 0C18.7 448 0 429.3 0 406.3L0 101.6C0 80.8 16.8 64 37.6 64L64 64 64 24zm0 200l112 0c26.5 0 48-21.5 48-48s-21.5-48-48-48l-112 0 0 96zm112 64l-112 0 0 96 144 0c26.5 0 48-21.5 48-48s-21.5-48-48-48l-32 0z\"]\n};\nvar faBox = {\n  prefix: 'fas',\n  iconName: 'box',\n  icon: [448, 512, [128230], \"f466\", \"M335.1 16c20.7 0 40.1 10 52.1 26.8l48.9 68.5c7.7 10.8 11.9 23.9 11.9 37.2L448 416c0 35.3-28.7 64-64 64l-320 0-6.5-.3C25.2 476.4 0 449.1 0 416L0 148.5c0-11.7 3.2-23.1 9.2-33l2.7-4.2 48.9-68.5c10.5-14.7 26.7-24.2 44.4-26.3l7.7-.5 222.1 0zM248 128l121.3 0-34.3-48-87.1 0 0 48zM78.7 128l121.3 0 0-48-87.1 0-34.3 48z\"]\n};\nvar faSquarePlus = {\n  prefix: 'fas',\n  iconName: 'square-plus',\n  icon: [448, 512, [61846, \"plus-square\"], \"f0fe\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM200 344l0-64-64 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l64 0 0-64c0-13.3 10.7-24 24-24s24 10.7 24 24l0 64 64 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-64 0 0 64c0 13.3-10.7 24-24 24s-24-10.7-24-24z\"]\n};\nvar faPlusSquare = faSquarePlus;\nvar faArrowsLeftRight = {\n  prefix: 'fas',\n  iconName: 'arrows-left-right',\n  icon: [576, 512, [\"arrows-h\"], \"f07e\", \"M470.6 374.6l96-96c12.5-12.5 12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l41.4 41.4-357.5 0 41.4-41.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-96 96c-6 6-9.4 14.1-9.4 22.6s3.4 16.6 9.4 22.6l96 96c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-41.4-41.4 357.5 0-41.4 41.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0z\"]\n};\nvar faArrowsH = faArrowsLeftRight;\nvar faFan = {\n  prefix: 'fas',\n  iconName: 'fan',\n  icon: [512, 512, [], \"f863\", \"M160 144c0-79.5 64.5-144 144-144 8.8 0 16 7.2 16 16l0 152.2c15-5.3 31.2-8.2 48-8.2 79.5 0 144 64.5 144 144 0 8.8-7.2 16-16 16l-152.2 0c5.3 15 8.2 31.2 8.2 48 0 79.5-64.5 144-144 144-8.8 0-16-7.2-16-16l0-152.2c-15 5.3-31.2 8.2-48 8.2-79.5 0-144-64.5-144-144 0-8.8 7.2-16 16-16l152.2 0c-5.3-15-8.2-31.2-8.2-48zm96 144a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nvar faCrow = {\n  prefix: 'fas',\n  iconName: 'crow',\n  icon: [640, 512, [], \"f520\", \"M456.5 0c-48.6 0-88 39.4-88 88l0 36-355.2 266.4C-.8 401-3.7 421 6.9 435.2s30.6 17 44.8 6.4l76.8-57.6 131.3 0 46.6 113.1 1 2.2c5.7 10.7 18.8 15.5 30.3 10.8s17.3-17.3 13.9-29l-.8-2.3-39.1-94.9 40.9 0c1.1 0 2.2 0 3.2 0l46.6 113.2 1 2.2c5.7 10.7 18.8 15.5 30.3 10.8s17.3-17.3 13.9-29l-.8-2.3-42-102C485.3 354.1 544.5 280 544.5 192l0-72 80.5-20.1c8.6-2.1 13.8-10.8 11.6-19.4-7.1-28.5-32.7-48.5-62.1-48.5l-50.1 0C508.2 12.5 483.8 0 456.5 0zm0 64a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nvar faFileCircleCheck = {\n  prefix: 'fas',\n  iconName: 'file-circle-check',\n  icon: [576, 512, [], \"e5a0\", \"M96 0C60.7 0 32 28.7 32 64l0 384c0 35.3 28.7 64 64 64l180 0c-22.7-31.5-36-70.2-36-112 0-100.6 77.4-183.2 176-191.3l0-38.1c0-17-6.7-33.3-18.7-45.3L290.7 18.7C278.7 6.7 262.5 0 245.5 0L96 0zM357.5 176L264 176c-13.3 0-24-10.7-24-24L240 58.5 357.5 176zM576 400a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-86.6-60.9c7.1 5.2 8.7 15.2 3.5 22.3l-64 88c-2.8 3.8-7 6.2-11.7 6.5s-9.3-1.3-12.6-4.6l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l26.8 26.8 53-72.9c5.2-7.1 15.2-8.7 22.4-3.5z\"]\n};\nvar faLinkSlash = {\n  prefix: 'fas',\n  iconName: 'link-slash',\n  icon: [576, 512, [\"chain-broken\", \"chain-slash\", \"unlink\"], \"f127\", \"M41-24.9c-9.4-9.4-24.6-9.4-33.9 0S-2.3-.3 7 9.1l528 528c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-122-122c4.2-3.4 8.3-7.1 12.1-10.9l71.1-71.1c29.3-29.3 45.8-69.1 45.8-110.6 0-86.4-70-156.5-156.5-156.5-37.3 0-73.1 13.3-101.3 37.2 20.3 10.1 38.7 23.5 54.5 39.5 14.1-8.3 30.2-12.7 46.8-12.7 51.1 0 92.5 41.4 92.5 92.5 0 24.5-9.7 48-27.1 65.4l-71.1 71.1c-3.9 3.9-8.1 7.4-12.6 10.5l-47.5-47.5c16.5-.9 29.7-14.4 30.2-31.1 0-1.3 0-2.6 0-3.9 0-86.3-69.9-156.9-156.5-156.9-19.2 0-37.9 3.5-55.5 10.2L41-24.9zM225.9 160c.6 0 1.1 0 1.7 0 15.1 0 29.5 3.7 42.1 10.2 1.8 1.2 3.6 2.3 5.5 3.1 26.8 16.3 44.8 45.9 44.8 79.6 0 .4 0 .8 0 1.2L225.9 160zM346.2 416L192 261.8c1.2 84.6 69.6 152.9 154.1 154.1zM139.7 209.5l-45.3-45.3-48.6 48.6c-29.3 29.3-45.8 69.1-45.8 110.6 0 86.4 70 156.5 156.5 156.5 37.2 0 73.1-13.3 101.3-37.2-20.3-10.1-38.8-23.5-54.6-39.5-14 8.2-30.1 12.6-46.7 12.6-51.1 0-92.5-41.4-92.5-92.5 0-24.5 9.7-48 27.1-65.4l48.6-48.6z\"]\n};\nvar faChainBroken = faLinkSlash;\nvar faChainSlash = faLinkSlash;\nvar faUnlink = faLinkSlash;\nvar faArrowRotateRight = {\n  prefix: 'fas',\n  iconName: 'arrow-rotate-right',\n  icon: [512, 512, [8635, \"arrow-right-rotate\", \"arrow-rotate-forward\", \"redo\"], \"f01e\", \"M436.7 74.7L448 85.4 448 32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l47.9 0-7.6-7.2c-.2-.2-.4-.4-.6-.6-75-75-196.5-75-271.5 0s-75 196.5 0 271.5 196.5 75 271.5 0c8.2-8.2 15.5-16.9 21.9-26.1 10.1-14.5 30.1-18 44.6-7.9s18 30.1 7.9 44.6c-8.5 12.2-18.2 23.8-29.1 34.7-100 100-262.1 100-362 0S-25 175 75 75c99.9-99.9 261.7-100 361.7-.3z\"]\n};\nvar faArrowRightRotate = faArrowRotateRight;\nvar faArrowRotateForward = faArrowRotateRight;\nvar faRedo = faArrowRotateRight;\nvar faPenClip = {\n  prefix: 'fas',\n  iconName: 'pen-clip',\n  icon: [512, 512, [\"pen-alt\"], \"f305\", \"M404 0c19.2 0 37.6 7.6 51.1 21.2l35.7 35.7C504.4 70.4 512 88.8 512 108s-7.6 37.6-21.2 51.1L445.9 204 308 66.1 352.9 21.2C366.4 7.6 384.8 0 404 0zM274.1 100l0 0 137.9 137.9-215.1 215.1c-10.7 10.7-24.1 18.5-38.7 22.6L30.4 511.1c-8.3 2.3-17.3 0-23.4-6.2s-8.5-15.1-6.2-23.4L36.4 353.8c4.1-14.6 11.8-27.9 22.6-38.7L240.1 133.9 223 116.9c-9.4-9.4-24.6-9.4-33.9 0L89 217c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L155.1 82.9c28.1-28.1 73.7-28.1 101.8 0L274.1 100z\"]\n};\nvar faPenAlt = faPenClip;\nvar faDoorClosed = {\n  prefix: 'fas',\n  iconName: 'door-closed',\n  icon: [448, 512, [128682], \"f52a\", \"M32 64C32 28.7 60.7 0 96 0L352 0c35.3 0 64 28.7 64 64l0 384c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32L32 64zM320 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nvar faArrowDownWideShort = {\n  prefix: 'fas',\n  iconName: 'arrow-down-wide-short',\n  icon: [576, 512, [\"sort-amount-asc\", \"sort-amount-down\"], \"f160\", \"M246.6 374.6l-96 96c-12.5 12.5-32.8 12.5-45.3 0l-96-96c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L96 370.7 96 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 306.7 41.4-41.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zM320 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0zm0-128c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0zm0-128c-17.7 0-32-14.3-32-32s14.3-32 32-32l160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-160 0zm0-128c-17.7 0-32-14.3-32-32s14.3-32 32-32l224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L320 96z\"]\n};\nvar faSortAmountAsc = faArrowDownWideShort;\nvar faSortAmountDown = faArrowDownWideShort;\nvar faCaretDown = {\n  prefix: 'fas',\n  iconName: 'caret-down',\n  icon: [320, 512, [], \"f0d7\", \"M140.3 376.8c12.6 10.2 31.1 9.5 42.8-2.2l128-128c9.2-9.2 11.9-22.9 6.9-34.9S301.4 192 288.5 192l-256 0c-12.9 0-24.6 7.8-29.6 19.8S.7 237.5 9.9 246.6l128 128 2.4 2.2z\"]\n};\nvar faK = {\n  prefix: 'fas',\n  iconName: 'k',\n  icon: [320, 512, [107], \"4b\", \"M311 86.3c12.3-12.7 12-32.9-.7-45.2s-32.9-12-45.2 .7C143.4 167.2 76.4 236.3 64 249L64 64c0-17.7-14.3-32-32-32S0 46.3 0 64L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-107 64.7-66.7 133 192c10.1 14.5 30 18.1 44.5 8.1s18.1-30 8.1-44.5L174.1 227.4 311 86.3z\"]\n};\nvar faCheckToSlot = {\n  prefix: 'fas',\n  iconName: 'check-to-slot',\n  icon: [576, 512, [\"vote-yea\"], \"f772\", \"M552 288c13.3 0 24 10.7 24 24l0 104c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 312c0-13.3 10.7-24 24-24s24 10.7 24 24l0 104c0 8.8 7.2 16 16 16l448 0c8.8 0 16-7.2 16-16l0-104c0-13.3 10.7-24 24-24zM416 32c35.3 0 64 28.7 64 64l0 224c0 35.3-28.7 64-64 64l-256 0c-35.3 0-64-28.7-64-64L96 96c0-35.3 28.7-64 64-64l256 0zm-37.1 84.6c-10.7-7.8-25.7-5.4-33.5 5.3l-85.6 117.7-26.5-27.4c-9.2-9.5-24.4-9.8-33.9-.6-9.5 9.2-9.8 24.4-.6 33.9l46.4 48c4.9 5.1 11.8 7.8 18.9 7.3s13.6-4.1 17.8-9.8L384.2 150.1c7.8-10.7 5.4-25.7-5.3-33.5z\"]\n};\nvar faVoteYea = faCheckToSlot;\nvar faFishFins = {\n  prefix: 'fas',\n  iconName: 'fish-fins',\n  icon: [576, 512, [], \"e4f2\", \"M275.2 38.4c-10.6-8-25-8.5-36.3-1.5S222 57.3 224.6 70.3l9.7 48.6c-19.4 9-36.9 19.9-52.4 31.5-15.3 11.5-29 23.9-40.7 36.3L48.1 132.4c-12.5-7.3-28.4-5.3-38.7 4.9s-12.4 26-5.3 38.6L50 256 4.2 336.1c-7.2 12.6-5 28.4 5.3 38.6s26.1 12.2 38.7 4.9l93.1-54.3c11.8 12.3 25.4 24.8 40.7 36.3 15.5 11.6 33 22.5 52.4 31.5l-9.7 48.6c-2.6 13 3.1 26.3 14.3 33.3s25.6 6.5 36.3-1.5l77.6-58.2c54.9-4 101.5-27 137.2-53.8 39.2-29.4 67.2-64.7 81.6-89.5 5.8-9.9 5.8-22.2 0-32.1-14.4-24.8-42.5-60.1-81.6-89.5-35.8-26.8-82.3-49.8-137.2-53.8L275.2 38.4zM384 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nvar faCompress = {\n  prefix: 'fas',\n  iconName: 'compress',\n  icon: [448, 512, [], \"f066\", \"M160 64c0-17.7-14.3-32-32-32S96 46.3 96 64l0 64-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32l0-96zM32 320c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-96 0zM352 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-64zM320 320c-17.7 0-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0z\"]\n};\nvar faArrowUpAZ = {\n  prefix: 'fas',\n  iconName: 'arrow-up-a-z',\n  icon: [512, 512, [\"sort-alpha-up\"], \"f15e\", \"M412.6 49.7C407.2 38.8 396.1 32 384 32s-23.2 6.8-28.6 17.7c-50.7 101.3-77.3 154.7-80 160-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3l7.2-14.3 88.4 0 7.2 14.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9c-2.7-5.3-29.3-58.7-80-160zM384 135.6l20.2 40.4-40.4 0 20.2-40.4zM288 320c0 17.7 14.3 32 32 32l50.7 0-73.4 73.4c-9.2 9.2-11.9 22.9-6.9 34.9S307.1 480 320 480l128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-50.7 0 73.4-73.4c9.2-9.2 11.9-22.9 6.9-34.9S460.9 288 448 288l-128 0c-17.7 0-32 14.3-32 32zM150.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-80 80c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L96 141.3 96 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-306.7 25.4 25.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-80-80z\"]\n};\nvar faSortAlphaUp = faArrowUpAZ;\nvar faUserGraduate = {\n  prefix: 'fas',\n  iconName: 'user-graduate',\n  icon: [448, 512, [], \"f501\", \"M241.3-13c-11.4-2.3-23.1-2.3-34.5 0L19.3 24.5C8.1 26.7 0 36.6 0 48 0 58.3 6.5 67.3 16 70.6L16 144 .3 222.6c-.2 .9-.3 1.9-.3 2.9 0 8 6.5 14.6 14.6 14.6l34.9 0c8 0 14.6-6.5 14.6-14.6 0-1-.1-1.9-.3-2.9L48 144 48 77.3 96 86.9 96 144c0 70.7 57.3 128 128 128s128-57.3 128-128l0-57.1 76.7-15.3C439.9 69.3 448 59.4 448 48s-8.1-21.3-19.3-23.5L241.3-13zM224 224c-44.2 0-80-35.8-80-80l160 0c0 44.2-35.8 80-80 80zM120.1 320.1C58.7 348.3 16 410.3 16 482.3 16 498.7 29.3 512 45.7 512l154.3 0 0-146-57.4-43c-6.5-4.9-15.2-6.2-22.6-2.8zM248 512l154.3 0c16.4 0 29.7-13.3 29.7-29.7 0-72-42.7-134-104.1-162.1-7.4-3.4-16.1-2.1-22.6 2.8l-57.4 43 0 146z\"]\n};\nvar faFileCode = {\n  prefix: 'fas',\n  iconName: 'file-code',\n  icon: [384, 512, [], \"f1c9\", \"M0 64C0 28.7 28.7 0 64 0L213.5 0c17 0 33.3 6.7 45.3 18.7L365.3 125.3c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm208-5.5l0 93.5c0 13.3 10.7 24 24 24L325.5 176 208 58.5zM154.2 295.6c8.6-10.1 7.5-25.2-2.6-33.8s-25.2-7.5-33.8 2.6l-48 56c-7.7 9-7.7 22.2 0 31.2l48 56c8.6 10.1 23.8 11.2 33.8 2.6s11.2-23.8 2.6-33.8l-34.6-40.4 34.6-40.4zm112-31.2c-8.6-10.1-23.8-11.2-33.8-2.6s-11.2 23.8-2.6 33.8l34.6 40.4-34.6 40.4c-8.6 10.1-7.5 25.2 2.6 33.8s25.2 7.5 33.8-2.6l48-56c7.7-9 7.7-22.2 0-31.2l-48-56z\"]\n};\nvar faSoap = {\n  prefix: 'fas',\n  iconName: 'soap',\n  icon: [512, 512, [129532], \"e06e\", \"M208-32a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM320 96a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM352 0a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM96 160l112 0c0 23.8 7.4 45.9 20.1 64L160 224c-53 0-96 43-96 96s43 96 96 96l192 0c53 0 96-43 96-96 0-35.1-18.9-65.9-47-82.6 19-19.8 30.7-46.6 31-76.1 45.4 7.6 80 47.1 80 94.7l0 128c0 53-43 96-96 96L96 480c-53 0-96-43-96-96L0 256c0-53 43-96 96-96zm64 112l192 0c26.5 0 48 21.5 48 48s-21.5 48-48 48l-192 0c-26.5 0-48-21.5-48-48s21.5-48 48-48z\"]\n};\nvar faRecycle = {\n  prefix: 'fas',\n  iconName: 'recycle',\n  icon: [512, 512, [9842, 9850, 9851], \"f1b8\", \"M152.3 60C198.5-20 314-20 360.2 60l37.3 64.6 27.7-16c8.4-4.9 18.9-4.2 26.6 1.7s11.1 15.9 8.6 25.3L436.9 223c-3.4 12.8-16.6 20.4-29.4 17l-87.4-23.4c-9.4-2.5-16.3-10.4-17.6-20s3.4-19.1 11.8-23.9l27.7-16-37.3-64.6c-21.6-37.3-75.4-37.3-97 0l-5.3 9.1c-8.8 15.3-28.4 20.5-43.7 11.7S138.2 84.5 147 69.1l5.3-9.1zM449.7 279.1c15.3-8.8 34.9-3.6 43.7 11.7l5.3 9.1c46.2 80-11.5 180-103.9 180l-74.6 0 0 32c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-64-64c-9.4-9.4-9.4-24.6 0-33.9l64-64c6.9-6.9 17.2-8.9 26.2-5.2s14.8 12.5 14.8 22.2l0 32 74.6 0c43.1 0 70.1-46.7 48.5-84l-5.3-9.1c-8.8-15.3-3.6-34.9 11.7-43.7zM51 235.4l-27.7-16c-8.4-4.9-13.1-14.3-11.8-23.9s8.2-17.5 17.6-20L116.5 152c12.8-3.4 26 4.2 29.4 17l23.4 87.4c2.5 9.4-.9 19.3-8.6 25.3s-18.2 6.6-26.6 1.7l-27.7-16-37.3 64.6c-21.6 37.3 5.4 84 48.5 84l10.6 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-10.6 0C25.3 480-32.4 380 13.8 300L51 235.4z\"]\n};\nvar faFaceGrinWink = {\n  prefix: 'fas',\n  iconName: 'face-grin-wink',\n  icon: [512, 512, [\"grin-wink\"], \"f58c\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM386.7 308.9c11.9-3.7 23.9 6.3 19.6 18.1-22.4 61.3-81.3 105.1-150.3 105.1S128.1 388.2 105.7 326.9c-4.3-11.8 7.7-21.8 19.6-18.1 39.2 12.2 83.7 19.1 130.7 19.1s91.5-6.9 130.7-19.1zM328 196c-11 0-20 9-20 20s-9 20-20 20-20-9-20-20c0-33.1 26.9-60 60-60l16 0c33.1 0 60 26.9 60 60 0 11-9 20-20 20s-20-9-20-20-9-20-20-20l-16 0zM176 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faGrinWink = faFaceGrinWink;\nvar faWaterLadder = {\n  prefix: 'fas',\n  iconName: 'water-ladder',\n  icon: [640, 512, [\"ladder-water\", \"swimming-pool\"], \"f5c5\", \"M374.5 405.7c38.4-29 90.5-29 129 0 16.9 12.7 32.9 21.5 47.8 24.6 13.7 2.8 27.4 .9 42.3-10.3 10.6-8 25.6-5.9 33.6 4.7s5.8 25.7-4.8 33.6c-26.4 19.9-54.2 24.4-80.7 19.1-25.3-5.1-48.1-18.9-67.2-33.3-21.3-16.1-49.9-16.1-71.2 0-24.2 18.3-52.3 35.9-83.4 35.9s-59.1-17.7-83.3-35.9c-21.3-16.1-49.9-16.1-71.2 0-23.8 17.9-54.1 35.5-88.1 35.3-20.4-.1-40.7-6.7-59.8-21.1-10.6-8-12.7-23-4.7-33.6s23-12.7 33.6-4.7c11.3 8.5 21.6 11.4 31.2 11.5 17.6 .1 37.3-9.4 58.9-25.7 38.4-29 90.6-29 129 0 24 18.1 40.7 26.3 54.5 26.3s30.5-8.2 54.5-26.3zM511.8 32c48.3 0 89 36 95 83.9l1 8.2c2.2 17.5-10.2 33.5-27.8 35.7s-33.5-10.2-35.7-27.8l-1-8.2c-2-15.9-15.5-27.8-31.5-27.8-17.5 0-31.8 14.2-31.8 31.8l0 211.8c-23.1-5.1-44.9-4.4-64-.4l0-51.2-192 0 0 48.7c-5.3-.5-10.7-.8-16-.7-16.2 .1-32.4 2.7-48 8l0-216.2c0-52.9 42.9-95.8 95.7-95.8 48.3 0 89 36 95 83.9l1 8.2c2.2 17.5-10.2 33.5-27.8 35.7s-33.5-10.2-35.7-27.8l-1-8.2c-2-15.9-15.5-27.8-31.5-27.8-17.5 0-31.7 14.2-31.7 31.8l0 96.2 192 0 0-96.2C416 74.9 458.9 32 511.8 32z\"]\n};\nvar faLadderWater = faWaterLadder;\nvar faSwimmingPool = faWaterLadder;\nvar faGemini = {\n  prefix: 'fas',\n  iconName: 'gemini',\n  icon: [448, 512, [], \"e849\", \"M395.4 8c13.2-11.7 33.3-10.5 45.1 2.7 11.7 13.2 10.5 33.4-2.7 45.2-2.7 2.4-23.1 19.8-58.3 36.8-8.2 4-17.2 7.9-27 11.6l0 303.2c9.8 3.8 18.8 7.6 27 11.6 18.2 8.8 32.4 17.7 42.2 24.5 3 2.1 5.5 4.1 7.7 5.7 1.2 .9 2.3 1.6 3.2 2.4 .2 .1 .3 .2 .5 .4 1.3 1.1 2.4 2 3.2 2.6 .4 .3 .7 .6 .9 .8 .1 .1 .3 .2 .3 .3 0 0 .1 .1 .1 .1l.1 0 0 0 0 0c3.3 2.9 5.9 6.4 7.7 10.2 5.4 11.3 3.8 25.1-5 35-.3 .4-.7 .7-1.1 1.1-11.9 12.2-31.2 13.1-44 1.7-.3-.3-1.5-1.3-3.5-2.8-.4-.3-.9-.7-1.5-1.1-1.9-1.4-4.2-3.1-7.1-5.1-2.2-1.5-4.7-3.1-7.4-4.8-6.6-4.1-14.8-8.8-24.4-13.5-7.4-3.6-15.6-7.2-24.7-10.5-13.6-5.1-29-9.6-46.1-12.9-5.7-1.1-11.6-2.1-17.7-2.8-12.1-1.6-25-2.5-38.6-2.5-54.2 0-97.4 14.4-127 28.8-3.4 1.6-6.5 3.3-9.5 4.9-5.1 2.8-9.7 5.4-13.8 7.9-3.3 2.1-6.3 4-8.9 5.7-1.7 1.2-3.2 2.3-4.6 3.3-1.9 1.4-3.5 2.5-4.6 3.4-1.4 1.1-2.2 1.8-2.5 2-13.2 11.7-33.3 10.5-45.1-2.8-2.2-2.5-4-5.2-5.2-8.1s-2.1-5.9-2.5-8.9c-1.4-10.2 2.2-20.8 10.4-28.2 .2-.2 .6-.5 1.2-1 .1-.1 .2-.2 .3-.3l3.2-2.6c1.7-1.3 3.7-2.8 6.2-4.6 1.6-1.2 3.3-2.5 5.2-3.8 9.8-6.8 24-15.7 42.2-24.5 8.2-4 17.2-7.9 27-11.6l0-303.2C86.7 100.6 77.7 96.7 69.5 92.8 34.3 75.7 14 58.3 11.3 55.9-1.9 44.2-3.1 24 8.6 10.7 20.3-2.5 40.5-3.7 53.7 8 55.1 9.2 70.7 22.2 97.5 35.2 127.1 49.6 170.3 64 224.5 64s97.4-14.4 127-28.8c26.8-13 42.4-26 43.8-27.2zM288.5 122.3c-19.7 3.5-41 5.7-64 5.7s-44.3-2.2-64-5.7l0 267.4c12.6-2.3 25.9-4 39.9-4.9 7.8-.5 15.8-.8 24-.8 23 0 44.4 2.2 64 5.7l0-267.4z\"]\n};\nvar faTowerCell = {\n  prefix: 'fas',\n  iconName: 'tower-cell',\n  icon: [576, 512, [], \"e585\", \"M59.6 9.8C47.3 4.8 33.3 10.7 28.4 23 15.2 55.5 8 90.9 8 128s7.2 72.5 20.4 105c5 12.3 19 18.2 31.3 13.2s18.2-19 13.2-31.3C62 188.2 56 158.8 56 128s6-60.2 16.9-87c5-12.3-1-26.3-13.2-31.3zm456.8 0c-12.3 5-18.2 19-13.2 31.3 10.9 26.8 16.9 56.2 16.9 87s-6 60.2-16.9 87c-5 12.3 1 26.3 13.2 31.3s26.3-1 31.3-13.2c13.1-32.5 20.4-67.9 20.4-105s-7.2-72.5-20.4-105c-5-12.3-19-18.2-31.3-13.2zM340.1 165.2c7.5-10.5 11.9-23.3 11.9-37.2 0-35.3-28.7-64-64-64s-64 28.7-64 64c0 13.9 4.4 26.7 11.9 37.2L98.9 466.8c-7.3 16.1-.2 35.1 15.9 42.4s35.1 .2 42.4-15.9l20.6-45.2 220.6 0 20.6 45.2c7.3 16.1 26.3 23.2 42.4 15.9s23.2-26.3 15.9-42.4L340.1 165.2zM376.5 400l-177 0 21.8-48 133.3 0 21.8 48zM288 205.3l44.8 98.7-89.7 0 44.8-98.7zM163.3 73.6c5.3-12.1-.2-26.3-12.4-31.6s-26.3 .2-31.6 12.4C109.5 77 104 101.9 104 128s5.5 51 15.3 73.6c5.3 12.1 19.5 17.7 31.6 12.4s17.7-19.5 12.4-31.6C156 165.8 152 147.4 152 128s4-37.8 11.3-54.4zM456.7 54.4c-5.3-12.1-19.5-17.7-31.6-12.4s-17.7 19.5-12.4 31.6C420 90.2 424 108.6 424 128s-4 37.8-11.3 54.4c-5.3 12.1 .2 26.3 12.4 31.6s26.3-.2 31.6-12.4C466.5 179 472 154.1 472 128s-5.5-51-15.3-73.6z\"]\n};\nvar faColonSign = {\n  prefix: 'fas',\n  iconName: 'colon-sign',\n  icon: [384, 512, [], \"e140\", \"M213.8 8.7c12.9 3.2 20.7 16.2 17.5 29.1l-4.6 18.5c15.4 .8 30.4 3.4 44.7 7.5l9.4-37.6C283.9 13.3 297 5.5 309.8 8.7S330.5 25 327.3 37.8L316 82.8c13.5 7.8 26 17.1 37.2 27.8 12.9 12.1 13.4 32.4 1.3 45.2s-32.4 13.4-45.2 1.3c-3.1-2.9-6.4-5.8-9.8-8.4L239.2 390c26.9-4.6 51.1-17.1 70.1-35.1 12.9-12.1 33.1-11.5 45.2 1.3s11.5 33.1-1.3 45.2c-34.3 32.3-80 52.8-130.5 54.4l-7.5 29.9c-3.2 12.9-16.2 20.7-29.1 17.5s-20.7-16.2-17.5-29.1l5.6-22.5c-15-3.2-29.4-8-42.9-14.4l-12.1 48.5c-3.2 12.9-16.2 20.7-29.1 17.5S69.5 487 72.7 474.2l16-63.9C44.3 373.6 16 318.1 16 256 16 159.2 84.8 78.4 176.3 60l8.4-33.8C187.9 13.3 201 5.5 213.8 8.7zM158 132.9c-46.1 21.8-78 68.7-78 123.1 0 30.5 10 58.6 26.9 81.3L158 132.9zM147.4 373.4c13 7.6 27.3 13.1 42.5 16.1l65.9-263.6c-12.6-3.8-25.9-5.9-39.8-5.9-1.8 0-3.5 0-5.3 .1L147.4 373.4z\"]\n};\nvar faLaptopFile = {\n  prefix: 'fas',\n  iconName: 'laptop-file',\n  icon: [576, 512, [], \"e51d\", \"M64 64C64 28.7 92.7 0 128 0L416 0c35.3 0 64 28.7 64 64l0 48-64 0 0-48-288 0 0 192 112 0 0 96-163.2 0C34.4 352 0 317.6 0 275.2 0 264.6 8.6 256 19.2 256L64 256 64 64zM529.9 257.9c9 9 14.1 21.2 14.1 33.9L544 464c0 26.5-21.5 48-48 48l-160 0c-26.5 0-48-21.5-48-48l0-256c0-26.5 21.5-48 48-48l76.1 0c12.7 0 24.9 5.1 33.9 14.1 20 20 47.9 47.9 83.9 83.9zM416 272c0 8.8 7.2 16 16 16l60.1 0-76.1-76.1 0 60.1z\"]\n};\nvar faBahai = {\n  prefix: 'fas',\n  iconName: 'bahai',\n  icon: [576, 512, [\"haykal\"], \"f666\", \"M288.4-8c13.2 0 25 8.1 29.8 20.4l31.9 82 77.2-42.3c11.6-6.3 25.8-4.9 35.9 3.5s14 22.3 9.7 34.8l-28.2 83.3 86.3 17.2c12.9 2.6 23 12.8 25.3 25.8s-3.6 26.1-14.9 32.9l-75.2 45.7 55 68.6c8.3 10.3 9.3 24.6 2.7 36s-19.5 17.6-32.6 15.6l-87-13.3-2 88c-.3 13.2-8.6 24.8-21 29.4s-26.3 1-35-9l-58-66.1-58 66.1c-8.7 9.9-22.6 13.5-35 9s-20.8-16.2-21-29.4l-2-88-87 13.3c-13 2-26-4.2-32.6-15.6s-5.5-25.7 2.7-36l55-68.6-75.2-45.7c-11.3-6.8-17.2-19.9-14.9-32.9s12.3-23.2 25.3-25.8l86.3-17.2-28.2-83.3c-4.2-12.5-.4-26.3 9.7-34.8s24.4-9.9 35.9-3.5l77.1 42.3 31.9-82C263.3 .1 275.2-8 288.4-8zm0 120.2L273 151.6c-3.3 8.6-10.2 15.3-18.9 18.5s-18.2 2.4-26.3-2l-37-20.3 13.6 40c3 8.7 2 18.3-2.6 26.3s-12.4 13.6-21.5 15.4l-41.4 8.3 36.1 21.9c7.9 4.8 13.3 12.7 14.9 21.8s-.8 18.4-6.5 25.6l-26.4 33 41.8-6.4c9.1-1.4 18.4 1.2 25.4 7.1s11.2 14.6 11.4 23.8l.9 42.2 27.9-31.8c6.1-6.9 14.8-10.9 24.1-10.9s18 4 24.1 10.9l27.9 31.8 .9-42.2c.2-9.2 4.4-17.9 11.4-23.8s16.3-8.5 25.4-7.1l41.8 6.4-26.4-33c-5.8-7.2-8.2-16.5-6.6-25.6s7-17 14.9-21.8l36.1-21.9-41.4-8.3c-9-1.8-16.9-7.4-21.5-15.4s-5.5-17.6-2.6-26.3l13.6-40-37 20.3c-8.1 4.4-17.7 5.2-26.3 2s-15.5-9.9-18.9-18.5l-15.3-39.4z\"]\n};\nvar faHaykal = faBahai;\nvar faMoneyBill1 = {\n  prefix: 'fas',\n  iconName: 'money-bill-1',\n  icon: [512, 512, [\"money-bill-alt\"], \"f3d1\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zm192 80a112 112 0 1 1 0 224 112 112 0 1 1 0-224zM64 184l0-48c0-4.4 3.6-8 8-8l48 0c4.4 0 8.1 3.6 7.5 8-3.6 29-26.6 51.9-55.5 55.5-4.4 .5-8-3.1-8-7.5zm0 144c0-4.4 3.6-8.1 8-7.5 29 3.6 51.9 26.6 55.5 55.5 .5 4.4-3.1 8-7.5 8l-48 0c-4.4 0-8-3.6-8-8l0-48zM440 191.5c-29-3.6-51.9-26.6-55.5-55.5-.5-4.4 3.1-8 7.5-8l48 0c4.4 0 8 3.6 8 8l0 48c0 4.4-3.6 8.1-8 7.5zM448 328l0 48c0 4.4-3.6 8-8 8l-48 0c-4.4 0-8.1-3.6-7.5-8 3.6-29 26.6-51.9 55.5-55.5 4.4-.5 8 3.1 8 7.5zM240 188c-11 0-20 9-20 20 0 9.7 6.9 17.7 16 19.6l0 48.4-4 0c-11 0-20 9-20 20s9 20 20 20l48 0c11 0 20-9 20-20s-9-20-20-20l-4 0 0-68c0-11-9-20-20-20l-16 0z\"]\n};\nvar faMoneyBillAlt = faMoneyBill1;\nvar faCloudBolt = {\n  prefix: 'fas',\n  iconName: 'cloud-bolt',\n  icon: [512, 512, [127785, \"thunderstorm\"], \"f76c\", \"M0 224c0 53 43 96 96 96l38.6 0 124.1-111c12.2-10.9 28-17 44.4-17 44.6 0 76.5 43 63.7 85.7L354.1 320 416 320c53 0 96-43 96-96s-43-96-96-96c-.5 0-1.1 0-1.6 0 1.1-5.2 1.6-10.5 1.6-16 0-44.2-35.8-80-80-80-24.3 0-46.1 10.9-60.8 28-18.7-35.7-56.1-60-99.2-60-61.9 0-112 50.1-112 112 0 7.1 .7 14.1 1.9 20.8-38.3 12.6-65.9 48.7-65.9 91.2zM160.6 400l61.8 0-31.2 104.1c-3.6 11.9 5.3 23.9 17.8 23.9 4.6 0 9-1.7 12.4-4.7L362.5 396.9c3.5-3.1 5.5-7.6 5.5-12.4 0-9.2-7.4-16.6-16.6-16.6l-61.8 0 31.2-104.1c3.6-11.9-5.3-23.9-17.8-23.9-4.6 0-9 1.7-12.4 4.7L149.5 371.1c-3.5 3.1-5.5 7.6-5.5 12.4 0 9.2 7.4 16.6 16.6 16.6z\"]\n};\nvar faThunderstorm = faCloudBolt;\nvar faEthernet = {\n  prefix: 'fas',\n  iconName: 'ethernet',\n  icon: [512, 512, [], \"f796\", \"M0 224L0 416c0 17.7 14.3 32 32 32l32 0 0-104c0-13.3 10.7-24 24-24s24 10.7 24 24l0 104 64 0 0-104c0-13.3 10.7-24 24-24s24 10.7 24 24l0 104 64 0 0-104c0-13.3 10.7-24 24-24s24 10.7 24 24l0 104 64 0 0-104c0-13.3 10.7-24 24-24s24 10.7 24 24l0 104 32 0c17.7 0 32-14.3 32-32l0-192c0-17.7-14.3-32-32-32l-32 0 0-32c0-17.7-14.3-32-32-32l-32 0 0-32c0-17.7-14.3-32-32-32L160 64c-17.7 0-32 14.3-32 32l0 32-32 0c-17.7 0-32 14.3-32 32l0 32-32 0c-17.7 0-32 14.3-32 32z\"]\n};\nvar faHryvniaSign = {\n  prefix: 'fas',\n  iconName: 'hryvnia-sign',\n  icon: [384, 512, [8372, \"hryvnia\"], \"f6f2\", \"M336 149.4C336 77 268.5 23.5 198 40.1L93.2 64.9C76 68.9 65.4 86.2 69.4 103.4s21.3 27.9 38.5 23.8l104.8-24.7c30.3-7.1 59.3 15.8 59.3 46.9 0 17.6-9.6 33.8-25 42.3l-.7 .4-222.3 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l336 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-32.4 0c5.5-13.3 8.4-27.8 8.4-42.6zM360 272L24 272c-13.3 0-24 10.7-24 24s10.7 24 24 24l33.3 0c-6.1 13.4-9.3 28.1-9.3 43.3 0 64.1 56.9 113.4 120.4 104.2l137.9-19.9c17.5-2.5 29.6-18.7 27.1-36.2s-18.8-29.6-36.2-27.1L159.2 404.2c-24.9 3.6-47.2-15.7-47.2-40.9 0-15.1 8.2-28.9 21.4-36.2l13-7.1 213.6 0c13.3 0 24-10.7 24-24s-10.7-24-24-24z\"]\n};\nvar faHryvnia = faHryvniaSign;\nvar faEyeSlash = {\n  prefix: 'fas',\n  iconName: 'eye-slash',\n  icon: [576, 512, [], \"f070\", \"M41-24.9c-9.4-9.4-24.6-9.4-33.9 0S-2.3-.3 7 9.1l528 528c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-96.4-96.4c2.7-2.4 5.4-4.8 8-7.2 46.8-43.5 78.1-95.4 93-131.1 3.3-7.9 3.3-16.7 0-24.6-14.9-35.7-46.2-87.7-93-131.1-47.1-43.7-111.8-80.6-192.6-80.6-56.8 0-105.6 18.2-146 44.2L41-24.9zM204.5 138.7c23.5-16.8 52.4-26.7 83.5-26.7 79.5 0 144 64.5 144 144 0 31.1-9.9 59.9-26.7 83.5l-34.7-34.7c12.7-21.4 17-47.7 10.1-73.7-13.7-51.2-66.4-81.6-117.6-67.9-8.6 2.3-16.7 5.7-24 10l-34.7-34.7zM325.3 395.1c-11.9 3.2-24.4 4.9-37.3 4.9-79.5 0-144-64.5-144-144 0-12.9 1.7-25.4 4.9-37.3L69.4 139.2c-32.6 36.8-55 75.8-66.9 104.5-3.3 7.9-3.3 16.7 0 24.6 14.9 35.7 46.2 87.7 93 131.1 47.1 43.7 111.8 80.6 192.6 80.6 37.3 0 71.2-7.9 101.5-20.6l-64.2-64.2z\"]\n};\nvar faCartFlatbedSuitcase = {\n  prefix: 'fas',\n  iconName: 'cart-flatbed-suitcase',\n  icon: [576, 512, [\"luggage-cart\"], \"f59d\", \"M0 32C0 14.3 14.3 0 32 0L48 0c44.2 0 80 35.8 80 80l0 288c0 8.8 7.2 16 16 16l400 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-34.7 0c1.8 5 2.7 10.4 2.7 16 0 26.5-21.5 48-48 48s-48-21.5-48-48c0-5.6 1-11 2.7-16l-197.5 0c1.8 5 2.7 10.4 2.7 16 0 26.5-21.5 48-48 48s-48-21.5-48-48c0-6 1.1-11.7 3.1-17-38.1-6.2-67.1-39.2-67.1-79L64 80c0-8.8-7.2-16-16-16L32 64C14.3 64 0 49.7 0 32zM176 144c0-26.5 21.5-48 48-48l32 0 0-24c0-30.9 25.1-56 56-56l64 0c30.9 0 56 25.1 56 56l0 24 32 0c26.5 0 48 21.5 48 48l0 144c0 26.5-21.5 48-48 48l-240 0c-26.5 0-48-21.5-48-48l0-144zM384 96l0-24c0-4.4-3.6-8-8-8l-64 0c-4.4 0-8 3.6-8 8l0 24 80 0z\"]\n};\nvar faLuggageCart = faCartFlatbedSuitcase;\nvar faRadiation = {\n  prefix: 'fas',\n  iconName: 'radiation',\n  icon: [576, 512, [], \"f7b9\", \"M446.2 34.5c-14.2-10.1-33.5-4.6-42.2 10.5L331.6 170.3c31.3 15.8 52.8 48.3 52.8 85.7l144 0c17.7 0 32.2-14.4 30.1-31.9-9.1-78.1-51.4-146.1-112.3-189.6zM172.7 44.9C164 29.8 144.7 24.3 130.5 34.5 69.6 77.9 27.3 145.9 18.2 224.1 16.1 241.6 30.7 256 48.3 256l144 0c0-37.5 21.5-69.9 52.8-85.7L172.7 44.9zm-9.4 416.8c-8.7 15.1-3.8 34.5 12 41.8 34.4 15.7 72.7 24.5 113 24.5s78.6-8.8 113-24.5c15.8-7.2 20.7-26.7 12-41.8L341 336.3c-15.1 9.9-33.2 15.7-52.6 15.7s-37.5-5.8-52.6-15.7L163.3 461.7zM288.3 304a48 48 0 1 0 -.7-96 48 48 0 1 0 .7 96z\"]\n};\nvar faFileWord = {\n  prefix: 'fas',\n  iconName: 'file-word',\n  icon: [384, 512, [], \"f1c2\", \"M0 64C0 28.7 28.7 0 64 0L213.5 0c17 0 33.3 6.7 45.3 18.7L365.3 125.3c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm208-5.5l0 93.5c0 13.3 10.7 24 24 24L325.5 176 208 58.5zM135.4 274.8c-2.9-12.9-15.7-21.1-28.6-18.2s-21.1 15.7-18.2 28.6l32 144c2.3 10.5 11.4 18.2 22.2 18.8s20.6-6.1 24-16.4l25.2-75.7 25.2 75.7c3.4 10.2 13.2 16.9 24 16.4s19.9-8.2 22.2-18.8l32-144c2.9-12.9-5.3-25.8-18.2-28.6s-25.8 5.3-28.6 18.2l-13.2 59.4-20.6-61.8c-3.3-9.8-12.4-16.4-22.8-16.4s-19.5 6.6-22.8 16.4l-20.6 61.8-13.2-59.4z\"]\n};\nvar faBedPulse = {\n  prefix: 'fas',\n  iconName: 'bed-pulse',\n  icon: [640, 512, [\"procedures\"], \"f487\", \"M531.2-22.4L572 32 616 32c13.3 0 24 10.7 24 24s-10.7 24-24 24l-56 0c-7.6 0-14.7-3.6-19.2-9.6l-24.1-32.1-47 99.9c-3.7 7.8-11.3 13.1-19.9 13.7s-16.9-3.4-21.7-10.6L387.2 80 344 80c-13.3 0-24-10.7-24-24s10.7-24 24-24l56 0c8 0 15.5 4 20 10.7l24.4 36.6 45.9-97.5c3.6-7.6 10.9-12.8 19.3-13.7s16.6 2.7 21.6 9.5zM320 160c0-17.7 14.3-32 32-32l9.5 0 26.6 39.9c14.4 21.6 39.3 33.8 65.2 31.9s48.8-17.6 59.8-41.1L527 129.2c45.9 7.2 81 46.9 81 94.8l0 224c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64-448 0 0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32L32 64c0-17.7 14.3-32 32-32S96 46.3 96 64l0 224 224 0 0-128zM144 192a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z\"]\n};\nvar faProcedures = faBedPulse;\nvar faTents = {\n  prefix: 'fas',\n  iconName: 'tents',\n  icon: [576, 512, [], \"e582\", \"M539.9 352l-95.6 0-8.4-66.1c-2.9-23.2-15.9-43.9-35.4-56.8L252.2 131.5c-18-11.9-39.7-15.7-60.1-11.5 2.5-4.3 5.9-7.9 10.1-10.7L350.6 11.6c10.7-7 24.5-7 35.2 0l148.4 97.7c7.8 5.1 13 13.4 14.2 22.7l23.3 184c2.4 19.1-12.5 36-31.7 36zM4.8 476l23.3-184c1.2-9.3 6.3-17.6 14.2-22.7l148.4-97.7c10.7-7 24.5-7 35.2 0l148.4 97.7c7.8 5.1 13 13.4 14.2 22.7l23.3 184c2.4 19.1-12.5 36-31.7 36l-49.7 0c-11.2 0-21.5-5.8-27.3-15.4l-77-126.7c-1.7-2.8-4.8-4.6-8.1-4.6-5.3 0-9.5 4.3-9.5 9.5l0 105.2c0 17.7-14.3 32-32 32L36.5 512c-19.3 0-34.2-16.9-31.7-36z\"]\n};\nvar faMugHot = {\n  prefix: 'fas',\n  iconName: 'mug-hot',\n  icon: [576, 512, [9749], \"f7b6\", \"M152-16c-13.3 0-24 10.7-24 24 0 38.9 23.4 59.4 39.1 73.1l1.1 1c16.3 14.3 23.8 21.8 23.8 37.9 0 13.3 10.7 24 24 24s24-10.7 24-24c0-38.9-23.4-59.4-39.1-73.1l-1.1-1C183.5 31.7 176 24.1 176 8 176-5.3 165.3-16 152-16zM96 192c-17.7 0-32 14.3-32 32l0 192c0 53 43 96 96 96l192 0c41.8 0 77.4-26.7 90.5-64l5.5 0c70.7 0 128-57.3 128-128S518.7 192 448 192L96 192zM448 384l0-128c35.3 0 64 28.7 64 64s-28.7 64-64 64zM288 8c0-13.3-10.7-24-24-24S240-5.3 240 8c0 38.9 23.4 59.4 39.1 73.1l1.1 1c16.3 14.3 23.8 21.8 23.8 37.9 0 13.3 10.7 24 24 24s24-10.7 24-24c0-38.9-23.4-59.4-39.1-73.1l-1.1-1C295.5 31.7 288 24.1 288 8z\"]\n};\nvar faBolt = {\n  prefix: 'fas',\n  iconName: 'bolt',\n  icon: [448, 512, [9889, \"zap\"], \"f0e7\", \"M338.8-9.9c11.9 8.6 16.3 24.2 10.9 37.8L271.3 224 416 224c13.5 0 25.5 8.4 30.1 21.1s.7 26.9-9.6 35.5l-288 240c-11.3 9.4-27.4 9.9-39.3 1.3s-16.3-24.2-10.9-37.8L176.7 288 32 288c-13.5 0-25.5-8.4-30.1-21.1s-.7-26.9 9.6-35.5l288-240c11.3-9.4 27.4-9.9 39.3-1.3z\"]\n};\nvar faZap = faBolt;\nvar faJar = {\n  prefix: 'fas',\n  iconName: 'jar',\n  icon: [320, 512, [], \"e516\", \"M32-8c0-13.3 10.7-24 24-24l208 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L56 16C42.7 16 32 5.3 32-8zM0 128C0 92.7 28.7 64 64 64l192 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 128zm96 64c-17.7 0-32 14.3-32 32l0 128c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32L96 192z\"]\n};\nvar faTruckPlane = {\n  prefix: 'fas',\n  iconName: 'truck-plane',\n  icon: [640, 512, [], \"e58f\", \"M144 48c0-26.5 21.5-48 48-48s48 21.5 48 48l0 320c0 32.5 12.1 62.1 32 84.7l0 27.3c0 7.1 .9 14.1 2.7 20.7L192 480 83.9 507C73.8 509.6 64 501.9 64 491.5l0-19.8c0-4.9 2.2-9.5 6-12.5l74-59.2 0-57.6-122.1 48.8C11.4 395.4 0 387.7 0 376.4l0-44c0-8 3-15.6 8.3-21.5L144 161.6 144 48zm224 80l192 0c44.2 0 80 35.8 80 80l0 160c0 26.2-12.6 49.4-32 64l0 48c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-160 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-48c-19.4-14.6-32-37.8-32-64l0-160c0-44.2 35.8-80 80-80zm0 176l192 0 0-32c0-17.7-14.3-32-32-32l-128 0c-17.7 0-32 14.3-32 32l0 32zm0 88a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm216-24a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"]\n};\nvar faHandHoldingHeart = {\n  prefix: 'fas',\n  iconName: 'hand-holding-heart',\n  icon: [576, 512, [], \"f4be\", \"M279.6 31C265.5 11.5 242.9 0 218.9 0 177.5 0 144 33.5 144 74.9l0 2.4c0 64.4 82 133.4 122.2 163.3 13 9.7 30.5 9.7 43.5 0 40.2-30 122.2-98.9 122.2-163.3l0-2.4c0-41.4-33.5-74.9-74.9-74.9-24 0-46.6 11.5-60.7 31L288 42.7 279.6 31zM109.3 341.5L66.7 384 32 384c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l320.5 0c29 0 57.3-9.3 80.7-26.5l126.6-93.3c17.8-13.1 21.6-38.1 8.5-55.9s-38.1-21.6-55.9-8.5L392.6 416 280 416c-13.3 0-24-10.7-24-24s10.7-24 24-24l72 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-152.2 0c-33.9 0-66.5 13.5-90.5 37.5z\"]\n};\nvar faArrowRotateLeft = {\n  prefix: 'fas',\n  iconName: 'arrow-rotate-left',\n  icon: [512, 512, [8634, \"arrow-left-rotate\", \"arrow-rotate-back\", \"arrow-rotate-backward\", \"undo\"], \"f0e2\", \"M256 64c-56.8 0-107.9 24.7-143.1 64l47.1 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 192c-17.7 0-32-14.3-32-32L0 32C0 14.3 14.3 0 32 0S64 14.3 64 32l0 54.7C110.9 33.6 179.5 0 256 0 397.4 0 512 114.6 512 256S397.4 512 256 512c-87 0-163.9-43.4-210.1-109.7-10.1-14.5-6.6-34.4 7.9-44.6s34.4-6.6 44.6 7.9c34.8 49.8 92.4 82.3 157.6 82.3 106 0 192-86 192-192S362 64 256 64z\"]\n};\nvar faArrowLeftRotate = faArrowRotateLeft;\nvar faArrowRotateBack = faArrowRotateLeft;\nvar faArrowRotateBackward = faArrowRotateLeft;\nvar faUndo = faArrowRotateLeft;\nvar faFaceAngry = {\n  prefix: 'fas',\n  iconName: 'face-angry',\n  icon: [512, 512, [128544, \"angry\"], \"f556\", \"M0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zM256 368c24.1 0 45.4 11.8 58.5 30 7.7 10.8 22.7 13.2 33.5 5.5s13.2-22.7 5.5-33.5c-21.7-30.2-57.3-50-97.5-50s-75.7 19.8-97.5 50c-7.7 10.8-5.3 25.8 5.5 33.5s25.8 5.3 33.5-5.5c13.1-18.2 34.4-30 58.5-30zm-80-96c17.7 0 32-14.3 32-32l0-.3 9.7 3.2c10.5 3.5 21.8-2.2 25.3-12.6s-2.2-21.8-12.6-25.3l-96-32c-10.5-3.5-21.8 2.2-25.3 12.6s2.2 21.8 12.6 25.3l28.9 9.6c-4.1 5.4-6.6 12.1-6.6 19.4 0 17.7 14.3 32 32 32zm192-32c0-7.3-2.4-14-6.6-19.4l28.9-9.6c10.5-3.5 16.1-14.8 12.6-25.3s-14.8-16.1-25.3-12.6l-96 32c-10.5 3.5-16.1 14.8-12.6 25.3s14.8 16.1 25.3 12.6l9.7-3.2 0 .3c0 17.7 14.3 32 32 32s32-14.3 32-32z\"]\n};\nvar faAngry = faFaceAngry;\nvar faBurst = {\n  prefix: 'fas',\n  iconName: 'burst',\n  icon: [512, 512, [], \"e4dc\", \"M37.6 4.2C28-2.3 15.2-1.1 7 7S-2.3 28 4.2 37.6l112 163.3-99.6 32.3C6.7 236.4 0 245.6 0 256s6.7 19.6 16.6 22.8l103.1 33.4-52.9 100.6c-4.9 9.3-3.2 20.7 4.3 28.1s18.8 9.2 28.1 4.3l100.6-52.9 33.4 103.1c3.2 9.9 12.4 16.6 22.8 16.6s19.6-6.7 22.8-16.6l33.4-103.1 100.6 52.9c9.3 4.9 20.7 3.2 28.1-4.3s9.2-18.8 4.3-28.1l-52.9-100.6 103.1-33.4c9.9-3.2 16.6-12.4 16.6-22.8s-6.7-19.6-16.6-22.8l-106.5-34.5 25.7-70.4c3.2-8.8 1-18.6-5.6-25.2s-16.4-8.8-25.2-5.6l-70.4 25.7-34.5-106.5C275.6 6.7 266.4 0 256 0s-19.6 6.7-22.8 16.6L200.9 116.2 37.6 4.2z\"]\n};\nvar faZ = {\n  prefix: 'fas',\n  iconName: 'z',\n  icon: [384, 512, [122], \"5a\", \"M0 64C0 46.3 14.3 32 32 32l320 0c12.4 0 23.7 7.2 29 18.4s3.6 24.5-4.4 34.1L100.3 416 352 416c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-12.4 0-23.7-7.2-29-18.4s-3.6-24.5 4.4-34.1L283.7 96 32 96C14.3 96 0 81.7 0 64z\"]\n};\nvar faBandage = {\n  prefix: 'fas',\n  iconName: 'bandage',\n  icon: [576, 512, [129657, \"band-aid\"], \"f462\", \"M464 416l48 0c35.3 0 64-28.7 64-64l0-192c0-35.3-28.7-64-64-64l-48 0 0 320zM416 96l-256 0 0 320 256 0 0-320zM64 96C28.7 96 0 124.7 0 160L0 352c0 35.3 28.7 64 64 64l48 0 0-320-48 0zM216 208a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm120-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM216 304a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm120-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nvar faBandAid = faBandage;\nvar faPlaneCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'plane-circle-exclamation',\n  icon: [640, 512, [], \"e556\", \"M232 24c0-30.9 25.1-56 56-56s56 25.1 56 56l0 127.3 78 71.5c-69.3 29-118 97.4-118 177.2 0 49.3 18.6 94.3 49.1 128.3L288 512 179.9 539c-10.1 2.5-19.9-5.1-19.9-15.5l0-19.8c0-4.9 2.2-9.5 6-12.5l66-52.8 0-99.7-162.9 54.3C58.7 396.4 48 388.7 48 377.8l0-43.7c0-9 3.8-17.5 10.4-23.6L232 151.3 232 24zM496 256a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 228a20 20 0 1 0 0-40 20 20 0 1 0 0 40zm0-180c-8.8 0-16 7.2-16 16l0 80c0 8.8 7.2 16 16 16s16-7.2 16-16l0-80c0-8.8-7.2-16-16-16z\"]\n};\nvar faBusSide = {\n  prefix: 'fas',\n  iconName: 'bus-side',\n  icon: [640, 512, [], \"e81d\", \"M480 0c88.4 0 160 71.6 160 160l0 224c0 35.3-28.7 64-64 64l-5.6 0c-13.2 37.3-48.6 64-90.4 64s-77.3-26.7-90.4-64l-139.1 0c-13.2 37.3-48.7 64-90.4 64s-77.2-26.7-90.4-64L64 448c-35.3 0-64-28.7-64-64L0 96C0 43 43 0 96 0L480 0zM160 368a48 48 0 1 0 0 96 48 48 0 1 0 0-96zm320 0a48 48 0 1 0 0 96 48 48 0 1 0 0-96zm0-304c-17.7 0-32 14.3-32 32l0 192c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-128c0-53-43-96-96-96zM248 224l104 0c17.7 0 32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-104 0 0 160zM96 64C78.3 64 64 78.3 64 96l0 96c0 17.7 14.3 32 32 32l104 0 0-160-104 0z\"]\n};\nvar faBugs = {\n  prefix: 'fas',\n  iconName: 'bugs',\n  icon: [576, 512, [], \"e4d0\", \"M447.5 174.6c8.8-8.4 22.7-8.9 32.2-.8s11 21.9 4.1 31.9l-1.5 1.9-23 26.7c26.7 13.5 46.3 39.1 51.4 69.6l25.3 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-24 0 0 32 24 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-25.3 0c-7.6 45.4-47.1 80-94.7 80s-87-34.6-94.7-80L296 432c-13.3 0-24-10.7-24-24s10.7-24 24-24l24 0 0-32-24 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l25.3 0c5.1-30.5 24.7-56.1 51.4-69.6l-22.9-26.7c-8.6-10.1-7.5-25.2 2.6-33.8s25.2-7.5 33.8 2.6l29.8 34.8 29.8-34.8 1.7-1.8zm-256-192c8.8-8.4 22.7-8.9 32.2-.8s11 21.9 4.1 31.9l-1.5 1.9-23 26.7C230 55.9 249.5 81.5 254.7 112l25.3 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-24 0 0 32 24 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-25.3 0c-7.6 45.4-47.1 80-94.7 80s-87-34.6-94.7-80L40 240c-13.3 0-24-10.7-24-24s10.7-24 24-24l24 0 0-32-24 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l25.3 0C70.5 81.5 90 55.9 116.7 42.4L93.8 15.6C85.2 5.6 86.3-9.6 96.4-18.2s25.2-7.5 33.8 2.6l29.8 34.8 29.8-34.8 1.7-1.8z\"]\n};\nvar faBeerMugEmpty = {\n  prefix: 'fas',\n  iconName: 'beer-mug-empty',\n  icon: [576, 512, [\"beer\"], \"f0fc\", \"M64 80c0-26.5 21.5-48 48-48l288 0c26.5 0 48 21.5 48 48l0 16 64 0c35.3 0 64 28.7 64 64l0 108.2c0 24.2-13.7 46.4-35.4 57.2L448 371.8 448 384c0 53-43 96-96 96l-192 0c-53 0-96-43-96-96L64 80zM448 300.2l64-32 0-108.2-64 0 0 140.2zM192 152c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 208c0 13.3 10.7 24 24 24s24-10.7 24-24l0-208zm88 0c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 208c0 13.3 10.7 24 24 24s24-10.7 24-24l0-208zm88 0c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 208c0 13.3 10.7 24 24 24s24-10.7 24-24l0-208z\"]\n};\nvar faBeer = faBeerMugEmpty;\nvar faPersonCircleCheck = {\n  prefix: 'fas',\n  iconName: 'person-circle-check',\n  icon: [640, 512, [], \"e53e\", \"M280 24a56 56 0 1 0 -112 0 56 56 0 1 0 112 0zm24 212.7L341 286.6c12.8-17.5 28.5-32.7 46.3-45l-56.2-75.7C306 132 266.3 112 224 112s-82 20-107.2 53.9l-70.5 95c-10.5 14.2-7.6 34.2 6.6 44.8s34.2 7.6 44.8-6.6L144 236.7 144 512c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-8.8 7.2-16 16-16s16 7.2 16 16l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-275.3zM640 400a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-86.6-60.9c7.1 5.2 8.7 15.2 3.5 22.3l-64 88c-2.8 3.8-7 6.2-11.7 6.5s-9.3-1.3-12.6-4.6l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l26.8 26.8 53-72.9c5.2-7.1 15.2-8.7 22.4-3.5z\"]\n};\nvar faStapler = {\n  prefix: 'fas',\n  iconName: 'stapler',\n  icon: [640, 512, [], \"e5af\", \"M640 299.3L640 432c0 26.5-21.5 48-48 48L64 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0 0-48-352 0c-17.7 0-32-14.3-32-32l0-116.6-30.2-5.4c-19.6-3.5-33.8-20.5-33.8-40.4 0-8.9 2.9-17.5 8.2-24.6l35.6-47.5c32.8-43.8 84.4-69.6 139.1-69.6 27 0 53.6 6.3 77.8 18.4L586.9 213.5C619.5 229.7 640 263 640 299.3zM448 304l0-16-320-57.1 0 73.1 320 0z\"]\n};\nvar faHouseMedicalCircleCheck = {\n  prefix: 'fas',\n  iconName: 'house-medical-circle-check',\n  icon: [640, 512, [], \"e511\", \"M309.8 8.6c-12.3-11.4-31.3-11.4-43.5 0l-224 208c-9.6 9-12.8 22.9-8 35.1S50.8 272 64 272l16 0 0 176c0 35.3 28.7 64 64 64l196 0c-21.2-29.5-34.3-65.3-35.9-104L272 408c-8.8 0-16-7.2-16-16l0-40-40 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l40 0 0-40c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 40 20 0c34.9-48.5 91.7-80 156-80 10.7 0 21.1 .9 31.3 2.5L309.8 8.6zM640 400a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-86.6-60.9c7.1 5.2 8.7 15.2 3.5 22.3l-64 88c-2.8 3.8-7 6.2-11.7 6.5s-9.3-1.3-12.6-4.6l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l26.8 26.8 53-72.9c5.2-7.1 15.2-8.7 22.4-3.5z\"]\n};\nvar faNairaSign = {\n  prefix: 'fas',\n  iconName: 'naira-sign',\n  icon: [448, 512, [], \"e1f6\", \"M122.6 46.3c-7.8-11.7-22.4-17-35.9-12.9S64 49.9 64 64l0 192-32 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l32 0 0 144c0 17.7 14.3 32 32 32s32-14.3 32-32l0-144 89.5 0 107.8 161.8c7.8 11.7 22.4 17 35.9 12.9S384 462.1 384 448l0-144 32 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-32 0 0-192c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 192-57.5 0-139.8-209.7zM294.5 304l25.5 0 0 38.3-25.5-38.3zM185.5 256l-57.5 0 0-86.3 57.5 86.3z\"]\n};\nvar faWifi = {\n  prefix: 'fas',\n  iconName: 'wifi',\n  icon: [576, 512, [\"wifi-3\", \"wifi-strong\"], \"f1eb\", \"M288 96c-90.9 0-173.2 36-233.7 94.6-12.7 12.3-33 12-45.2-.7s-12-33 .7-45.2C81.7 74.9 179.9 32 288 32S494.3 74.9 566.3 144.7c12.7 12.3 13 32.6 .7 45.2s-32.6 13-45.2 .7C461.2 132 378.9 96 288 96zM240 432a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM168 326.2c-11.7 13.3-31.9 14.5-45.2 2.8s-14.5-31.9-2.8-45.2C161 237.4 221.1 208 288 208s127 29.4 168 75.8c11.7 13.3 10.4 33.5-2.8 45.2s-33.5 10.4-45.2-2.8C378.6 292.9 335.8 272 288 272s-90.6 20.9-120 54.2z\"]\n};\nvar faWifi3 = faWifi;\nvar faWifiStrong = faWifi;\nvar faMoneyCheckDollar = {\n  prefix: 'fas',\n  iconName: 'money-check-dollar',\n  icon: [512, 512, [\"money-check-alt\"], \"f53d\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zM296 288l128 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-128 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm-24-88c0-13.3 10.7-24 24-24l128 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-128 0c-13.3 0-24-10.7-24-24zM148 144c11 0 20 9 20 20l0 4 8 0c11 0 20 9 20 20s-9 20-20 20l-47.5 0c-6.9 0-12.5 5.6-12.5 12.5 0 6.1 4.4 11.3 10.4 12.3l41.7 7c25.3 4.2 43.9 26.1 43.9 51.8 0 26.1-19 47.7-44 51.8l0 4.7c0 11-9 20-20 20s-20-9-20-20l0-4-24 0c-11 0-20-9-20-20s9-20 20-20l55.5 0c6.9 0 12.5-5.6 12.5-12.5 0-6.1-4.4-11.3-10.4-12.3l-41.7-7C94.5 268 76 246.1 76 220.5 76 191.7 99.2 168.3 128 168l0-4c0-11 9-20 20-20z\"]\n};\nvar faMoneyCheckAlt = faMoneyCheckDollar;\nvar faEyeLowVision = {\n  prefix: 'fas',\n  iconName: 'eye-low-vision',\n  icon: [576, 512, [\"low-vision\"], \"f2a8\", \"M41-24.9c-9.4-9.4-24.6-9.4-33.9 0S-2.3-.3 7 9.1l528 528c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-96.4-96.4c2.7-2.4 5.4-4.8 8-7.2 46.8-43.5 78.1-95.4 93-131.1 3.3-7.9 3.3-16.7 0-24.6-14.9-35.7-46.2-87.7-93-131.1-47.1-43.7-111.8-80.6-192.6-80.6-56.8 0-105.6 18.2-146 44.2L41-24.9zM204.5 138.7c23.5-16.8 52.4-26.7 83.5-26.7 79.5 0 144 64.5 144 144 0 31.1-9.9 59.9-26.7 83.5l-34.7-34.7c12.7-21.4 17-47.7 10.1-73.7-13.7-51.2-66.4-81.6-117.6-67.9-8.6 2.3-16.7 5.7-24 10l-34.7-34.7zM88 157.9c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9L328.2 466c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L88 157.9zM45.7 251.3c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9L181.9 455.5c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L45.7 251.3z\"]\n};\nvar faLowVision = faEyeLowVision;\nvar faCircleArrowUp = {\n  prefix: 'fas',\n  iconName: 'circle-arrow-up',\n  icon: [512, 512, [\"arrow-circle-up\"], \"f0aa\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zm17-377l80 80c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-39-39 0 150.1c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-150.1-39 39c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l80-80c9.4-9.4 24.6-9.4 33.9 0z\"]\n};\nvar faArrowCircleUp = faCircleArrowUp;\nvar faCameraRetro = {\n  prefix: 'fas',\n  iconName: 'camera-retro',\n  icon: [512, 512, [128247], \"f083\", \"M0 416l0-208 136.2 0c13.5-20.2 32-36.8 53.7-48L0 160 0 125.7c0-35.3 28.7-64 64-64l.1 0C65.3 45.1 79.1 32 96 32l32 0c16.9 0 30.7 13.1 31.9 29.7l32.1 0 51.2-23.8c8.4-3.9 17.6-6 26.9-6L448 32c35.3 0 64 28.7 64 64l0 64-190 0c21.7 11.2 40.2 27.8 53.7 48l136.2 0 0 208c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64zM256 192a96.1 96.1 0 1 0 0 192.1 96.1 96.1 0 1 0 0-192.1z\"]\n};\nvar faCapsules = {\n  prefix: 'fas',\n  iconName: 'capsules',\n  icon: [576, 512, [], \"f46b\", \"M96 112c0-26.5 21.5-48 48-48s48 21.5 48 48l0 112-96 0 0-112zm-64 0l0 288c0 61.9 50.1 112 112 112s112-50.1 112-112l0-105.8 116.3 169.5c35.5 51.7 105.3 64.3 156 28.1s63-107.5 27.5-159.2L427.3 145.3c-35.5-51.7-105.3-64.3-156-28.1-5.6 4-10.7 8.4-15.3 13.1l0-18.3C256 50.1 205.9 0 144 0S32 50.1 32 112zM296.6 240.2c-16-23.3-10-55.3 11.9-71 21.2-15.1 50.5-10.3 66 12.2l67 97.6-79.9 55.9-65-94.8z\"]\n};\nvar faPoo = {\n  prefix: 'fas',\n  iconName: 'poo',\n  icon: [512, 512, [128169], \"f2fe\", \"M268.9 .9c-5.5-.7-11 1.4-14.5 5.7s-4.6 10.1-2.8 15.4c2.8 8.2 4.3 16.9 4.3 26.1 0 44.1-35.7 79.9-79.8 80L160 128c-35.3 0-64 28.7-64 64 0 19.1 8.4 36.3 21.7 48L104 240c-39.8 0-72 32.2-72 72 0 23.2 11 43.8 28 57-34.1 5.7-60 35.3-60 71 0 39.8 32.2 72 72 72l368 0c39.8 0 72-32.2 72-72 0-35.7-25.9-65.3-60-71 17-13.2 28-33.8 28-57 0-39.8-32.2-72-72-72l-13.7 0c13.3-11.7 21.7-28.9 21.7-48 0-35.3-28.7-64-64-64l-5.5 0c3.5-10 5.5-20.8 5.5-32 0-48.6-36.2-88.8-83.1-95.1zM192 256a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm96 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm64 108.3c0 2.4-.7 4.8-2.2 6.7-8.2 10.5-39.5 45-93.8 45s-85.6-34.6-93.8-45c-1.5-1.9-2.2-4.3-2.2-6.7 0-6.8 5.5-12.3 12.3-12.3l167.4 0c6.8 0 12.3 5.5 12.3 12.3z\"]\n};\nvar faVolume = {\n  prefix: 'fas',\n  iconName: 'volume',\n  icon: [512, 512, [128265, \"volume-medium\"], \"f6a8\", \"M48 352l48 0 134.1 119.2c6.4 5.7 14.6 8.8 23.1 8.8 19.2 0 34.8-15.6 34.8-34.8l0-378.4c0-19.2-15.6-34.8-34.8-34.8-8.5 0-16.7 3.1-23.1 8.8L96 160 48 160c-26.5 0-48 21.5-48 48l0 96c0 26.5 21.5 48 48 48zM441.1 107c-10.3-8.4-25.4-6.8-33.8 3.5s-6.8 25.4 3.5 33.8C443.3 170.7 464 210.9 464 256s-20.7 85.3-53.2 111.8c-10.3 8.4-11.8 23.5-3.5 33.8s23.5 11.8 33.8 3.5c43.2-35.2 70.9-88.9 70.9-149s-27.7-113.8-70.9-149zm-60.5 74.5c-10.3-8.4-25.4-6.8-33.8 3.5s-6.8 25.4 3.5 33.8C361.1 227.6 368 241 368 256s-6.9 28.4-17.7 37.3c-10.3 8.4-11.8 23.5-3.5 33.8s23.5 11.8 33.8 3.5C402.1 312.9 416 286.1 416 256s-13.9-56.9-35.5-74.5z\"]\n};\nvar faVolumeMedium = faVolume;\nvar faElevator = {\n  prefix: 'fas',\n  iconName: 'elevator',\n  icon: [512, 512, [], \"e16d\", \"M292.7-4.7l64 64c6.2 6.2 16.4 6.2 22.6 0l64-64c4.6-4.6 5.9-11.5 3.5-17.4S438.5-32 432-32L304-32c-6.5 0-12.3 3.9-14.8 9.9s-1.1 12.9 3.5 17.4zm-160-22.6l-64 64c-4.6 4.6-5.9 11.5-3.5 17.4S73.5 64 80 64l128 0c6.5 0 12.3-3.9 14.8-9.9s1.1-12.9-3.5-17.4l-64-64c-6.2-6.2-16.4-6.2-22.6 0zM64 128c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 128zm96 96a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM80 400c0-26.5 21.5-48 48-48l64 0c26.5 0 48 21.5 48 48l0 16c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-16zm192 0c0-26.5 21.5-48 48-48l64 0c26.5 0 48 21.5 48 48l0 16c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-16zm32-128a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\"]\n};\nvar faTag = {\n  prefix: 'fas',\n  iconName: 'tag',\n  icon: [512, 512, [127991], \"f02b\", \"M32.5 96l0 149.5c0 17 6.7 33.3 18.7 45.3l192 192c25 25 65.5 25 90.5 0L483.2 333.3c25-25 25-65.5 0-90.5l-192-192C279.2 38.7 263 32 246 32L96.5 32c-35.3 0-64 28.7-64 64zm112 16a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faFileCircleMinus = {\n  prefix: 'fas',\n  iconName: 'file-circle-minus',\n  icon: [576, 512, [], \"e4ed\", \"M96 0C60.7 0 32 28.7 32 64l0 384c0 35.3 28.7 64 64 64l180 0c-22.7-31.5-36-70.2-36-112 0-100.6 77.4-183.2 176-191.3l0-38.1c0-17-6.7-33.3-18.7-45.3L290.7 18.7C278.7 6.7 262.5 0 245.5 0L96 0zM357.5 176L264 176c-13.3 0-24-10.7-24-24L240 58.5 357.5 176zM576 400a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-64 0c0 8.8-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l128 0c8.8 0 16 7.2 16 16z\"]\n};\nvar faDownLong = {\n  prefix: 'fas',\n  iconName: 'down-long',\n  icon: [320, 512, [\"long-arrow-alt-down\"], \"f309\", \"M137.4 534.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9S300.9 352 288 352l-64 0 0-336c0-26.5-21.5-48-48-48l-32 0c-26.5 0-48 21.5-48 48l0 336-64 0c-12.9 0-24.6 7.8-29.6 19.8S.2 397.5 9.4 406.6l128 128z\"]\n};\nvar faLongArrowAltDown = faDownLong;\nvar faCompactDisc = {\n  prefix: 'fas',\n  iconName: 'compact-disc',\n  icon: [512, 512, [128191, 128192, 128440], \"f51f\", \"M0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zm256 32a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm-96-32a96 96 0 1 0 192 0 96 96 0 1 0 -192 0zm-56-16c0-32.4 16.3-66.6 42.8-93.2S207.6 104 240 104c13.3 0 24-10.7 24-24s-10.7-24-24-24c-47.9 0-93.7 23.5-127.1 56.9S56 192.1 56 240c0 13.3 10.7 24 24 24s24-10.7 24-24z\"]\n};\nvar faSuitcaseRolling = {\n  prefix: 'fas',\n  iconName: 'suitcase-rolling',\n  icon: [384, 512, [], \"f5c1\", \"M144 24c0-4.4 3.6-8 8-8l80 0c4.4 0 8 3.6 8 8l0 72-96 0 0-72zM320 96l-32 0 0-72c0-30.9-25.1-56-56-56l-80 0C121.1-32 96-6.9 96 24l0 72-32 0C28.7 96 0 124.7 0 160L0 448c0 35.3 28.7 64 64 64 0 17.7 14.3 32 32 32s32-14.3 32-32l128 0c0 17.7 14.3 32 32 32s32-14.3 32-32c35.3 0 64-28.7 64-64l0-288c0-35.3-28.7-64-64-64zM120 208l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm0 128l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nvar faBookQuran = {\n  prefix: 'fas',\n  iconName: 'book-quran',\n  icon: [448, 512, [\"quran\"], \"f687\", \"M64 512l288 0c53 0 96-43 96-96l0-320c0-53-43-96-96-96L48 0C21.5 0 0 21.5 0 48L0 336c0 20.9 13.4 38.7 32 45.3L32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0zM352 384c17.7 0 32 14.3 32 32s-14.3 32-32 32l-256 0 0-64 256 0zM273.1 144.4c2.5-6.1 11.2-6.1 13.7 0l10.3 24.8 26.8 2.1c6.6 .5 9.2 8.7 4.2 13L307.8 201.9 314 228c1.5 6.4-5.5 11.5-11.1 8.1l-22.9-14-22.9 14c-5.6 3.4-12.6-1.6-11.1-8.1l6.2-26.1-20.4-17.5c-5-4.3-2.3-12.5 4.2-13l26.8-2.1 10.3-24.8zM100 192c0-68.5 55.5-124 124-124 23.8 0 46.1 6.7 65 18.4 4.8 2.9 6.9 8.8 5 14.1s-7.1 8.6-12.7 8c-3.1-.3-6.2-.5-9.4-.5-46.4 0-84 37.6-84 84s37.6 84 84 84c3.2 0 6.3-.2 9.4-.5 5.6-.6 10.8 2.7 12.7 8s-.3 11.2-5 14.1c-18.9 11.7-41.2 18.4-65 18.4-68.5 0-124-55.5-124-124z\"]\n};\nvar faQuran = faBookQuran;\nvar faPhoneSlash = {\n  prefix: 'fas',\n  iconName: 'phone-slash',\n  icon: [576, 512, [], \"f3dd\", \"M535-24.9c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L41 537.1c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L141.5 368.6C89.2 310.5 51.6 238.8 34.8 159.4 18.7 83.1 73.9 20.6 138.5 2.9l5.5-1.5c19.7-5.4 40.3 4.7 48.1 23.5l40.5 97.3c6.9 16.5 2.1 35.6-11.8 47l-44.1 36.1c12.9 28.5 29.6 54.8 49.5 78.5L535-24.9zm-150.4 534c-63-13.4-121.3-39.8-171.7-76.3L297.8 348c12.2 8.2 25 15.6 38.3 22.2L374.7 323c11.3-13.9 30.4-18.6 47-11.8L519 351.8c18.8 7.8 28.9 28.4 23.5 48.1l-1.5 5.5c-17.6 64.6-80.2 119.8-156.4 103.7z\"]\n};\nvar faRoadCircleCheck = {\n  prefix: 'fas',\n  iconName: 'road-circle-check',\n  icon: [640, 512, [], \"e564\", \"M288 32l-76.3 0c-29.4 0-55.1 20.1-62.1 48.6L65.4 420.5C57.9 450.7 80.8 480 112 480l209.4 0c-11.2-24.4-17.4-51.4-17.4-80 0-28.6 6.2-55.7 17.4-80-.5 0-1 0-1.5 0-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 49c35.2-39.9 86.7-65 144-65 9 0 17.8 .6 26.5 1.8l-32-129.2C483.4 52.1 457.8 32 428.3 32l-76.4 0 0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zM640 400a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-86.6-60.9c7.1 5.2 8.7 15.2 3.5 22.3l-64 88c-2.8 3.8-7 6.2-11.7 6.5s-9.3-1.3-12.6-4.6l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l26.8 26.8 53-72.9c5.2-7.1 15.2-8.7 22.4-3.5z\"]\n};\nvar faShopLock = {\n  prefix: 'fas',\n  iconName: 'shop-lock',\n  icon: [640, 512, [], \"e4a5\", \"M21.5 181.1L78.3 67.4C89.2 45.7 111.3 32 135.6 32l304.9 0c24.2 0 46.4 13.7 57.2 35.4l55.6 111.1c-8.2-1.6-16.6-2.5-25.2-2.5-53.7 0-99.7 33.1-118.7 80l-57.3 0 0 176c0 26.5-21.5 48-48 48l-192 0c-26.5 0-48-21.5-48-48l0-176.1c-26.8-1.9-48-24.3-48-51.6 0-8 1.9-16 5.5-23.2zM128 256l0 112c0 8.8 7.2 16 16 16l128 0c8.8 0 16-7.2 16-16l0-112-160 0zm432 48.1c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 47.9 64 0 0-47.9zM416 400c0-20.9 13.4-38.7 32-45.3l0-50.6c0-44.2 35.8-80 80-80s80 35.8 80 80l0 50.6c18.6 6.6 32 24.4 32 45.3l0 96c0 26.5-21.5 48-48 48l-128 0c-26.5 0-48-21.5-48-48l0-96z\"]\n};\nvar faImagePortrait = {\n  prefix: 'fas',\n  iconName: 'image-portrait',\n  icon: [384, 512, [\"portrait\"], \"f3e0\", \"M0 64C0 28.7 28.7 0 64 0L320 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zM80 368c0 8.8 7.2 16 16 16l192 0c8.8 0 16-7.2 16-16 0-44.2-35.8-80-80-80l-64 0c-44.2 0-80 35.8-80 80zM192 248a56 56 0 1 0 0-112 56 56 0 1 0 0 112z\"]\n};\nvar faPortrait = faImagePortrait;\nvar faBridgeLock = {\n  prefix: 'fas',\n  iconName: 'bridge-lock',\n  icon: [576, 512, [], \"e4cc\", \"M0 64C0 46.3 14.3 32 32 32l448 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-8 0 0 32.2c13.8 .6 27.2 2.8 40 6.4l0 50.7c-14.8-6-31-9.3-48-9.3-70.7 0-128 57.3-128 128l0 24.4c-.4 .3-.7 .6-1.1 1-17.3-25-46.2-41.3-78.9-41.3-53 0-96 43-96 96l0 64c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-94c0-38.8-26.4-72.6-64-82l0-112 40 0 0-64-8 0C14.3 96 0 81.7 0 64zm424 68.6l0-36.6-80 0 0 64 18.8 0c18.2-12.8 38.9-22.2 61.2-27.4zM216 96l0 64 80 0 0-64-80 0zm-48 0l-80 0 0 64 80 0 0-64zM496 304.1c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 47.9 64 0 0-47.9zM352 400c0-20.9 13.4-38.7 32-45.3l0-50.6c0-44.2 35.8-80 80-80s80 35.8 80 80l0 50.6c18.6 6.6 32 24.4 32 45.3l0 96c0 26.5-21.5 48-48 48l-128 0c-26.5 0-48-21.5-48-48l0-96z\"]\n};\nvar faHammer = {\n  prefix: 'fas',\n  iconName: 'hammer',\n  icon: [640, 512, [128296], \"f6e3\", \"M246.9 18.3L271 3.8c21.6-13 46.3-19.8 71.5-19.8 36.8 0 72.2 14.6 98.2 40.7l63.9 63.9c15 15 23.4 35.4 23.4 56.6l0 30.9 19.7 19.7 0 0c15.6-15.6 40.9-15.6 56.6 0s15.6 40.9 0 56.6l-64 64c-15.6 15.6-40.9 15.6-56.6 0s-15.6-40.9 0-56.6L464 240 433.1 240c-21.2 0-41.6-8.4-56.6-23.4l-49.1-49.1c-15-15-23.4-35.4-23.4-56.6l0-12.7c0-11.2-5.9-21.7-15.5-27.4l-41.6-25c-10.4-6.2-10.4-21.2 0-27.4zM50.7 402.7l222.1-222.1 90.5 90.5-222.1 222.1c-25 25-65.5 25-90.5 0s-25-65.5 0-90.5z\"]\n};\nvar faArrowUp19 = {\n  prefix: 'fas',\n  iconName: 'arrow-up-1-9',\n  icon: [512, 512, [\"sort-numeric-up\"], \"f163\", \"M150.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L96 141.3 96 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-306.7 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96zM418.7 38c-8.3-6-19.1-7.7-28.8-4.4l-48 16c-16.8 5.6-25.8 23.7-20.2 40.5s23.7 25.8 40.5 20.2l5.9-2 0 51.6-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-16 0 0-96c0-10.3-4.9-19.9-13.3-26zM365.1 430.6c-9.6 14.8-5.4 34.6 9.4 44.3s34.6 5.4 44.3-9.4l42.1-64.9c12.4-19.2 19.1-41.6 19.1-64.5 0-44.2-35.8-80-80-80s-80 35.8-80 80c0 36.1 23.9 66.7 56.8 76.6l-11.7 18zM376 336a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nvar faSortNumericUp = faArrowUp19;\nvar faChessKnight = {\n  prefix: 'fas',\n  iconName: 'chess-knight',\n  icon: [384, 512, [9822], \"f441\", \"M192-32c106 0 192 86 192 192l0 133.5c0 17-6.8 33.2-18.7 45.2L320 384 370.8 434.7c8.5 8.5 13.2 20 13.2 32 0 25-20.3 45.2-45.2 45.3L45.3 512c-25 0-45.2-20.3-45.2-45.3 0-12 4.8-23.5 13.2-32L64 384 64 349.4c0-18.7 8.2-36.4 22.3-48.6l89.7-76.8-48 0-12.1 12.1c-12.7 12.7-30 19.9-48 19.9-37.5 0-67.9-30.4-67.9-67.9l0-8.7c0-22.8 8.2-44.9 23.1-62.3L96 32 96 0c0-17.7 14.3-32 32-32l64 0zM160 72a24 24 0 1 0 0 48 24 24 0 1 0 0-48z\"]\n};\nvar faHouseFloodWaterCircleArrowRight = {\n  prefix: 'fas',\n  iconName: 'house-flood-water-circle-arrow-right',\n  icon: [640, 512, [], \"e50f\", \"M288.5 112a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zM141.2 44.7c6.2-6.2 16.4-6.2 22.6 0l56 56c6.2 6.2 6.2 16.4 0 22.6l-56 56c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l28.7-28.7-89.4 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l89.4 0-28.7-28.7c-6.2-6.2-6.2-16.4 0-22.6zM336.5 112c0 71.1-38.6 133.1-96 166.3l0 12.8c22.1 4.5 43.4 13.9 62.4 28.2 22.1 16.6 29.1 16.6 51.2 0 27.5-20.7 59.9-31.2 92.4-31.4 33.1-.2 66.3 10.2 94.4 31.4 6.9 5.2 12.8 9 18 11.7 .6 .3 1.2 .6 1.8 1 4.2 2.3 8.5 4.6 12.6 1.5 6-4.5 12.6-8 19.3-10.4l0-115.2 4.5 0c15.2 0 27.5-12.3 27.5-27.5 0-7.9-3.4-15.5-9.4-20.7L444.5 10.5C436.8 3.7 426.8 0 416.5 0s-20.3 3.7-28 10.5L329.9 61.8c4.3 16 6.6 32.8 6.6 50.2zm32 88c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 48c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24l0-48zM475.1 412.1c19 14.4 41.9 28.2 67.2 33.3 26.5 5.4 54.3 .8 80.7-19.1 10.6-8 12.7-23 4.7-33.6s-23-12.7-33.6-4.7c-14.9 11.2-28.6 13.1-42.3 10.3-14.9-3-30.9-11.9-47.8-24.6-38.4-29-90.5-29-129 0-24 18.1-40.7 26.3-54.5 26.3S290 391.8 266 373.7c-38.4-29-90.5-29-129 0-21.6 16.3-41.3 25.8-58.9 25.7-9.6-.1-19.9-3-31.2-11.5-10.6-8-25.6-5.9-33.6 4.7s-5.9 25.6 4.7 33.6c19.1 14.4 39.4 21 59.8 21.1 33.9 .2 64.3-17.4 88.1-35.3 21.3-16.1 49.9-16.1 71.2 0 24.2 18.3 52.3 35.9 83.4 35.9s59.1-17.7 83.4-35.9c21.3-16.1 49.9-16.1 71.2 0zm-71.2 96c21.3-16.1 49.9-16.1 71.2 0 19 14.4 41.9 28.2 67.2 33.3 26.5 5.4 54.3 .8 80.7-19.1 10.6-8 12.7-23 4.7-33.6s-23-12.7-33.6-4.7c-14.9 11.2-28.6 13.1-42.3 10.3-14.9-3-30.9-11.9-47.8-24.6-38.4-29-90.5-29-129 0-24 18.1-40.7 26.3-54.5 26.3S290 487.8 266 469.7c-38.4-29-90.5-29-129 0-21.6 16.3-41.3 25.8-58.9 25.7-9.6-.1-19.9-3-31.2-11.5-10.6-8-25.6-5.9-33.6 4.7s-5.9 25.6 4.7 33.6c19.1 14.4 39.4 21 59.8 21.1 33.9 .2 64.3-17.4 88.1-35.3 21.3-16.1 49.9-16.1 71.2 0 24.2 18.3 52.3 35.9 83.4 35.9s59.1-17.7 83.4-35.9z\"]\n};\nvar faArrowUpRightFromSquare = {\n  prefix: 'fas',\n  iconName: 'arrow-up-right-from-square',\n  icon: [512, 512, [\"external-link\"], \"f08e\", \"M320 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l82.7 0-201.4 201.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L448 109.3 448 192c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-17.7-14.3-32-32-32L320 0zM80 96C35.8 96 0 131.8 0 176L0 432c0 44.2 35.8 80 80 80l256 0c44.2 0 80-35.8 80-80l0-80c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 80c0 8.8-7.2 16-16 16L80 448c-8.8 0-16-7.2-16-16l0-256c0-8.8 7.2-16 16-16l80 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 96z\"]\n};\nvar faExternalLink = faArrowUpRightFromSquare;\nvar faArrowDownUpAcrossLine = {\n  prefix: 'fas',\n  iconName: 'arrow-down-up-across-line',\n  icon: [512, 512, [], \"e4af\", \"M265.4 105.4l96-96c12.5-12.5 32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-41.4-41.4 0 114.7 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-320 0 0 114.7 41.4-41.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-96 96c-12.5 12.5-32.8 12.5-45.3 0l-96-96c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L96 402.7 96 288 32 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l320 0 0-114.7-41.4 41.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3zM416 336l0 144c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-144 64 0zM96 176L96 32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 144-64 0z\"]\n};\nvar faFaceGrinBeam = {\n  prefix: 'fas',\n  iconName: 'face-grin-beam',\n  icon: [512, 512, [128516, \"grin-beam\"], \"f582\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM386.7 308.9c11.9-3.7 23.9 6.3 19.6 18.1-22.4 61.3-81.3 105.1-150.3 105.1S128.1 388.2 105.7 326.9c-4.3-11.8 7.7-21.8 19.6-18.1 39.2 12.2 83.7 19.1 130.7 19.1s91.5-6.9 130.7-19.1zM176 180c-15.5 0-28 12.5-28 28l0 8c0 11-9 20-20 20s-20-9-20-20l0-8c0-37.6 30.4-68 68-68s68 30.4 68 68l0 8c0 11-9 20-20 20s-20-9-20-20l0-8c0-15.5-12.5-28-28-28zm132 28l0 8c0 11-9 20-20 20s-20-9-20-20l0-8c0-37.6 30.4-68 68-68s68 30.4 68 68l0 8c0 11-9 20-20 20s-20-9-20-20l0-8c0-15.5-12.5-28-28-28s-28 12.5-28 28z\"]\n};\nvar faGrinBeam = faFaceGrinBeam;\nvar faRectangleAd = {\n  prefix: 'fas',\n  iconName: 'rectangle-ad',\n  icon: [512, 512, [\"ad\"], \"f641\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zM416 184l0 144c0 13.3-10.7 24-24 24-7.1 0-13.5-3.1-17.9-8-10.2 5.1-21.8 8-34.1 8-42 0-76-34-76-76s34-76 76-76c9.9 0 19.3 1.9 28 5.3l0-21.3c0-13.3 10.7-24 24-24s24 10.7 24 24zm-48 92a28 28 0 1 0 -56 0 28 28 0 1 0 56 0zM160 208c-8.8 0-16 7.2-16 16l0 32 48 0 0-32c0-8.8-7.2-16-16-16l-16 0zm32 96l-48 0 0 24c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-104c0-35.3 28.7-64 64-64l16 0c35.3 0 64 28.7 64 64l0 104c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-24z\"]\n};\nvar faAd = faRectangleAd;\nvar faBookTanakh = {\n  prefix: 'fas',\n  iconName: 'book-tanakh',\n  icon: [448, 512, [\"tanakh\"], \"f827\", \"M352 512L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-66.7C13.4 374.7 0 356.9 0 336L0 48C0 21.5 21.5 0 48 0L352 0c53 0 96 43 96 96l0 320c0 53-43 96-96 96zm32-96c0-17.7-14.3-32-32-32l-256 0 0 64 256 0c17.7 0 32-14.3 32-32zM113.9 229c-1.2 2-1.9 4.2-1.9 6.6 0 6.9 5.6 12.5 12.5 12.5l56.9 0 30.5 49.2c2.6 4.2 7.2 6.8 12.2 6.8s9.6-2.6 12.2-6.8l30.5-49.2 56.9 0c6.9 0 12.5-5.6 12.5-12.5 0-2.3-.6-4.6-1.9-6.6l-27.8-45 27.8-45c1.2-2 1.9-4.2 1.9-6.6 0-6.9-5.6-12.5-12.5-12.5l-56.9 0-30.5-49.2C233.6 66.6 229 64 224 64s-9.6 2.6-12.2 6.8l-30.5 49.2-56.9 0c-6.9 0-12.5 5.6-12.5 12.5 0 2.3 .6 4.6 1.9 6.6l27.8 45-27.8 45z\"]\n};\nvar faTanakh = faBookTanakh;\nvar faHotTubPerson = {\n  prefix: 'fas',\n  iconName: 'hot-tub-person',\n  icon: [448, 512, [\"hot-tub\"], \"f593\", \"M240 40c0 13.6 5.8 26.5 15.8 35.6l26.5 23.8c24 21.6 37.7 52.3 37.7 84.6 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-18.7-7.9-36.4-21.8-48.9l-26.5-23.8C203.5 93.1 192 67.2 192 40 192 26.7 202.7 16 216 16s24 10.7 24 24zM0 336l0-80c0-35.3 28.7-64 64-64l19.7 0c8.1 0 16.2 1.6 23.8 4.6l137.1 54.8c7.6 3 15.6 4.6 23.8 4.6L384 256c35.3 0 64 28.7 64 64l0 128c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 336zm96-16c-13.3 0-24 10.7-24 24l0 80c0 13.3 10.7 24 24 24s24-10.7 24-24l0-80c0-13.3-10.7-24-24-24zm152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 80c0 13.3 10.7 24 24 24s24-10.7 24-24l0-80zm104-24c-13.3 0-24 10.7-24 24l0 80c0 13.3 10.7 24 24 24s24-10.7 24-24l0-80c0-13.3-10.7-24-24-24zM328 16c13.3 0 24 10.7 24 24 0 13.6 5.8 26.5 15.8 35.6l26.5 23.8c24 21.6 37.7 52.3 37.7 84.6 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-18.7-7.9-36.4-21.8-48.9l-26.5-23.8C315.5 93.1 304 67.2 304 40 304 26.7 314.7 16 328 16zM64 40a56 56 0 1 1 0 112 56 56 0 1 1 0-112z\"]\n};\nvar faHotTub = faHotTubPerson;\nvar faFileHalfDashed = {\n  prefix: 'fas',\n  iconName: 'file-half-dashed',\n  icon: [384, 512, [], \"e698\", \"M64 512c-29.8 0-54.8-20.4-61.9-48l61.9 0 0 48zm104 0l-56 0 0-48 56 0 0 48zm104 0l-56 0 0-48 56 0 0 48zm109.9-48c-7.1 27.6-32.1 48-61.9 48l0-48 61.9 0zM48 416l-48 0 0-48 48 0 0 48zm336 0l-48 0 0-48 48 0 0 48zM213.5 0c17 0 33.2 6.8 45.2 18.8L365.3 125.2c12 12 18.7 28.3 18.7 45.2L384 320 0 320 0 64C0 28.7 28.7 0 64 0L213.5 0zM208 152c0 13.3 10.7 24 24 24l93.5 0-117.5-117.5 0 93.5z\"]\n};\nvar faOutdent = {\n  prefix: 'fas',\n  iconName: 'outdent',\n  icon: [448, 512, [\"dedent\"], \"f03b\", \"M.4 64c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-384 0C14.8 96 .4 81.7 .4 64zm192 128c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32zm32 96l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zM.4 448c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-384 0c-17.7 0-32-14.3-32-32zM.7 268.6c-8.2-6.4-8.2-18.9 0-25.3l101.9-79.3c10.5-8.2 25.8-.7 25.8 12.6l0 158.6c0 13.3-15.3 20.8-25.8 12.6L.7 268.6z\"]\n};\nvar faDedent = faOutdent;\nvar faHandPeace = {\n  prefix: 'fas',\n  iconName: 'hand-peace',\n  icon: [448, 512, [9996], \"f25b\", \"M192 0c17.7 0 32 14.3 32 32l0 208-64 0 0-208c0-17.7 14.3-32 32-32zm96 160c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32zm64 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zM61.3 51.2L143.9 240 74.1 240 2.7 76.8C-4.4 60.6 3 41.8 19.2 34.7S54.2 35 61.3 51.2zm27 221.3l-.2-.5 95.9 0c22.1 0 40 17.9 40 40s-17.9 40-40 40l-56 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l56 0c39.8 0 72-32.2 72-72l0-.6c9.4 5.4 20.3 8.6 32 8.6 13.2 0 25.4-4 35.6-10.8 8.7 24.9 32.5 42.8 60.4 42.8 11.7 0 22.6-3.1 32-8.6l0 8.6c0 88.4-71.6 160-160 160l-61.7 0c-42.4 0-83.1-16.9-113.1-46.9L69.5 453.5C45.5 429.5 32 396.9 32 363l0-27c0-32.7 24.6-59.7 56.3-63.5z\"]\n};\nvar faHeadSideVirus = {\n  prefix: 'fas',\n  iconName: 'head-side-virus',\n  icon: [512, 512, [], \"e064\", \"M329.7 448c-5.1 0-9.7 3.7-9.7 8.8l0 7.2c0 26.5-21.5 48-48 48l-160 0c-26.5 0-48-21.5-48-48l0-63.6c0-12.6-5.1-24.5-13.1-34.2-31.8-38.7-50.9-88.2-50.9-142.2 0-123.7 100.3-224 224-224 112.7 0 206 83.3 221.7 191.7 .4 3 1.7 5.9 3.6 8.3l35.8 42.9c7 8.4 10.9 19.1 10.9 30.1 0 25.9-21 47-47 47l-1 0c-8.8 0-16 7.2-16 16l0 48c0 35.3-28.7 64-64 64l-38.3 0zM224 64c-13.3 0-24 10.7-24 24 0 22.9-27.7 34.4-43.9 18.2-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9c16.2 16.2 4.7 43.9-18.2 43.9-13.3 0-24 10.7-24 24s10.7 24 24 24c22.9 0 34.4 27.7 18.2 43.9-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0c16.2-16.2 43.9-4.7 43.9 18.2 0 13.3 10.7 24 24 24s24-10.7 24-24c0-22.9 27.7-34.4 43.9-18.2 9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9c-16.2-16.2-4.7-43.9 18.2-43.9 13.3 0 24-10.7 24-24s-10.7-24-24-24c-22.9 0-34.4-27.7-18.2-43.9 9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0c-16.2 16.2-43.9 4.7-43.9-18.2 0-13.3-10.7-24-24-24zm-32 88a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm40 88a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nvar faCompass = {\n  prefix: 'fas',\n  iconName: 'compass',\n  icon: [512, 512, [129517], \"f14e\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zm50.7-186.9L162.4 380.6c-19.4 7.5-38.5-11.6-31-31l55.5-144.3c3.3-8.5 9.9-15.1 18.4-18.4l144.3-55.5c19.4-7.5 38.5 11.6 31 31L325.1 306.7c-3.2 8.5-9.9 15.1-18.4 18.4zM288 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nvar faPenNib = {\n  prefix: 'fas',\n  iconName: 'pen-nib',\n  icon: [512, 512, [10001], \"f5ad\", \"M368.5 18.3l-50.1 50.1 125.3 125.3 50.1-50.1c21.9-21.9 21.9-57.3 0-79.2L447.7 18.3c-21.9-21.9-57.3-21.9-79.2 0zM279.3 97.2l-.5 .1-144.1 43.2c-19.9 6-35.7 21.2-42.3 41L3.8 445.8c-2.9 8.7-1.9 18.2 2.5 26L161.7 316.4c-1.1-4-1.6-8.1-1.6-12.4 0-26.5 21.5-48 48-48s48 21.5 48 48-21.5 48-48 48c-4.3 0-8.5-.6-12.4-1.6L40.3 505.7c7.8 4.4 17.2 5.4 26 2.5l264.3-88.6c19.7-6.6 35-22.4 41-42.3l43.2-144.1 .1-.5-135.5-135.5z\"]\n};\nvar faTentArrowsDown = {\n  prefix: 'fas',\n  iconName: 'tent-arrows-down',\n  icon: [512, 512, [], \"e581\", \"M185.5 121c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-31 31 0-102.1c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 102.1-31-31c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l72 72c9.4 9.4 24.6 9.4 33.9 0l72-72zm248 72l72-72c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-31 31 0-102.1c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 102.1-31-31c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l72 72c9.4 9.4 24.6 9.4 33.9 0zM60.3 292.6L37.1 476c-2.4 19.1 12.5 36 31.7 36l154.5 0c17.7 0 32-14.3 32-32l0-117.4c0-5.9 4.7-10.6 10.6-10.6 4 0 7.7 2.3 9.5 5.9l68.2 136.5c5.4 10.8 16.5 17.7 28.6 17.7l71.9 0c19.3 0 34.2-16.9 31.7-36L452.7 292.7c-1.2-9.7-6.9-18.4-15.3-23.4L271.9 169.9c-10.2-6.1-22.9-6.1-33.1 .1L75.4 269.3c-8.3 5.1-13.9 13.7-15.1 23.3z\"]\n};\nvar faForwardFast = {\n  prefix: 'fas',\n  iconName: 'forward-fast',\n  icon: [512, 512, [9197, \"fast-forward\"], \"f050\", \"M19.8 477.6c12 5 25.7 2.2 34.9-6.9L224 301.3 224 448c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9L448 301.3 448 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-384c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 146.7-169.4-169.4c-9.2-9.2-22.9-11.9-34.9-6.9S224 51.1 224 64L224 210.7 54.6 41.4c-9.2-9.2-22.9-11.9-34.9-6.9S0 51.1 0 64L0 448c0 12.9 7.8 24.6 19.8 29.6z\"]\n};\nvar faFastForward = faForwardFast;\nvar faCrop = {\n  prefix: 'fas',\n  iconName: 'crop',\n  icon: [512, 512, [], \"f125\", \"M448 109.3l54.6-54.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L402.7 64 176 64 176 128 338.7 128 128 338.7 128 32c0-17.7-14.3-32-32-32S64 14.3 64 32l0 32-32 0C14.3 64 0 78.3 0 96s14.3 32 32 32l32 0 0 256c0 35.3 28.7 64 64 64l208 0 0-64-162.7 0 210.7-210.7 0 306.7c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-274.7z\"]\n};\nvar faWhiskeyGlass = {\n  prefix: 'fas',\n  iconName: 'whiskey-glass',\n  icon: [448, 512, [129347, \"glass-whiskey\"], \"f7a0\", \"M32 32C14.3 32 0 46.3 0 64L0 352c0 70.7 57.3 128 128 128l192 0c70.7 0 128-57.3 128-128l0-288c0-17.7-14.3-32-32-32L32 32zM64 256l0-160 320 0 0 160-320 0z\"]\n};\nvar faGlassWhiskey = faWhiskeyGlass;\nvar faSquare = {\n  prefix: 'fas',\n  iconName: 'square',\n  icon: [448, 512, [9632, 9723, 9724, 61590], \"f0c8\", \"M64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32z\"]\n};\nvar faFaceGrin = {\n  prefix: 'fas',\n  iconName: 'face-grin',\n  icon: [512, 512, [128512, \"grin\"], \"f580\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM386.7 308.9c11.9-3.7 23.9 6.3 19.6 18.1-22.4 61.3-81.3 105.1-150.3 105.1S128.1 388.2 105.7 326.9c-4.3-11.8 7.7-21.8 19.6-18.1 39.2 12.2 83.7 19.1 130.7 19.1s91.5-6.9 130.7-19.1zM144 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faGrin = faFaceGrin;\nvar faFileContract = {\n  prefix: 'fas',\n  iconName: 'file-contract',\n  icon: [384, 512, [], \"f56c\", \"M0 64C0 28.7 28.7 0 64 0L213.5 0c17 0 33.3 6.7 45.3 18.7L365.3 125.3c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm208-5.5l0 93.5c0 13.3 10.7 24 24 24L325.5 176 208 58.5zM88 64C74.7 64 64 74.7 64 88s10.7 24 24 24l48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L88 64zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0zm70.3 160c-11.3 0-21.9 5.1-28.9 13.9L69.3 409c-8.3 10.3-6.6 25.5 3.7 33.7s25.5 6.6 33.7-3.8l47.1-58.8 15.2 50.7c3 10.2 12.4 17.1 23 17.1l104 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-86.1 0-16.1-53.6c-4.7-15.7-19.1-26.4-35.5-26.4z\"]\n};\nvar faAngleUp = {\n  prefix: 'fas',\n  iconName: 'angle-up',\n  icon: [384, 512, [8963], \"f106\", \"M169.4 137.4c12.5-12.5 32.8-12.5 45.3 0l160 160c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L192 205.3 54.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l160-160z\"]\n};\nvar faFaceSmile = {\n  prefix: 'fas',\n  iconName: 'face-smile',\n  icon: [512, 512, [128578, \"smile\"], \"f118\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM165.4 321.9c20.4 28 53.4 46.1 90.6 46.1s70.2-18.1 90.6-46.1c7.8-10.7 22.8-13.1 33.5-5.3s13.1 22.8 5.3 33.5C356.3 390 309.2 416 256 416s-100.3-26-129.4-65.9c-7.8-10.7-5.4-25.7 5.3-33.5s25.7-5.4 33.5 5.3zM144 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faSmile = faFaceSmile;\nvar faPersonDressBurst = {\n  prefix: 'fas',\n  iconName: 'person-dress-burst',\n  icon: [640, 512, [], \"e544\", \"M208 40.1c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24zM8 144.1c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0c-13.3 0-24 10.7-24 24zm92.5 141.4l33.9-33.9c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L66.6 251.6c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0zM66.6 2.7c-9.4 9.4-9.4 24.6 0 33.9l33.9 33.9c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L100.5 2.7C91.1-6.7 76-6.7 66.6 2.7zM352 80a56 56 0 1 0 0-112 56 56 0 1 0 0 112zM246.2 384l25.8 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 32 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 25.8 0c10.9 0 18.6-10.7 15.2-21.1l-43-129 48.3 65.1c10.5 14.2 30.6 17.2 44.8 6.6s17.2-30.6 6.6-44.8l-70.5-95C434 132 394.3 112 352 112s-82 20-107.2 53.9l-70.5 95c-10.5 14.2-7.6 34.2 6.6 44.8s34.2 7.6 44.8-6.6l48.3-65.1-43 129c-3.5 10.4 4.3 21.1 15.2 21.1z\"]\n};\nvar faDivide = {\n  prefix: 'fas',\n  iconName: 'divide',\n  icon: [448, 512, [10135, 247], \"f529\", \"M224 48a56 56 0 1 1 0 112 56 56 0 1 1 0-112zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM168 408a56 56 0 1 1 112 0 56 56 0 1 1 -112 0z\"]\n};\nvar faCodeFork = {\n  prefix: 'fas',\n  iconName: 'code-fork',\n  icon: [448, 512, [], \"e13b\", \"M80 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm80-24c0 32.8-19.7 61-48 73.3l0 22.7c0 26.5 21.5 48 48 48l128 0c26.5 0 48-21.5 48-48l0-22.7c-28.3-12.3-48-40.5-48-73.3 0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3l0 22.7c0 61.9-50.1 112-112 112l-32 0 0 70.7c28.3 12.3 48 40.5 48 73.3 0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3l0-70.7-32 0C98.1 288 48 237.9 48 176l0-22.7C19.7 141 0 112.8 0 80 0 35.8 35.8 0 80 0s80 35.8 80 80zm208 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM248 432a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"]\n};\nvar faHouseFlag = {\n  prefix: 'fas',\n  iconName: 'house-flag',\n  icon: [640, 512, [], \"e50d\", \"M472 0c17.7 0 32 14.3 32 32l96 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-96 0 0 288c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-448c0-17.7 14.3-32 32-32zM283.5 59.1l100.5 96.9 0 356-256 0c-35.3 0-64-28.7-64-64l0-144-19.9 0c-15.5 0-28.1-12.6-28.1-28.1 0-7.6 3.1-14.9 8.6-20.2L228.5 59.1C235.9 52 245.7 48 256 48s20.1 4 27.5 11.1zM232 256c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-48 0z\"]\n};\nvar faBuildingColumns = {\n  prefix: 'fas',\n  iconName: 'building-columns',\n  icon: [512, 512, [\"bank\", \"institution\", \"museum\", \"university\"], \"f19c\", \"M271.9 20.2c-9.8-5.6-21.9-5.6-31.8 0l-224 128c-12.6 7.2-18.8 22-15.1 36S17.5 208 32 208l32 0 0 208 0 0-51.2 38.4C4.7 460.4 0 469.9 0 480 0 497.7 14.3 512 32 512l448 0c17.7 0 32-14.3 32-32 0-10.1-4.7-19.6-12.8-25.6l-51.2-38.4 0-208 32 0c14.5 0 27.2-9.8 30.9-23.8s-2.5-28.8-15.1-36l-224-128zM400 208l0 208-64 0 0-208 64 0zm-112 0l0 208-64 0 0-208 64 0zm-112 0l0 208-64 0 0-208 64 0zM256 96a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faBank = faBuildingColumns;\nvar faInstitution = faBuildingColumns;\nvar faMuseum = faBuildingColumns;\nvar faUniversity = faBuildingColumns;\nvar faRug = {\n  prefix: 'fas',\n  iconName: 'rug',\n  icon: [576, 512, [], \"e569\", \"M24 64l56 0 0 384-56 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-40-8 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-32-8 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-32-8 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-40-8 0C10.7 112 0 101.3 0 88S10.7 64 24 64zm104 0l320 0 0 384-320 0 0-384zM576 88c0 13.3-10.7 24-24 24l-8 0 0 40 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-8 0 0 32 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-8 0 0 32 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-8 0 0 40 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-56 0 0-384 56 0c13.3 0 24 10.7 24 24z\"]\n};\nvar faCodeMerge = {\n  prefix: 'fas',\n  iconName: 'code-merge',\n  icon: [448, 512, [], \"f387\", \"M80 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm32.4 97.2c28-12.4 47.6-40.5 47.6-73.2 0-44.2-35.8-80-80-80S0 35.8 0 80c0 32.8 19.7 61 48 73.3l0 205.3C19.7 371 0 399.2 0 432 0 476.2 35.8 512 80 512s80-35.8 80-80c0-32.8-19.7-61-48-73.3l0-86.6c26.7 20.1 60 32 96 32l86.7 0c12.3 28.3 40.5 48 73.3 48 44.2 0 80-35.8 80-80s-35.8-80-80-80c-32.8 0-61 19.7-73.3 48L208 240c-49.9 0-91-38.1-95.6-86.8zM80 408a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM344 272a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nvar faHouseTsunami = {\n  prefix: 'fas',\n  iconName: 'house-tsunami',\n  icon: [640, 512, [], \"e515\", \"M288 16C155.5 16 48 123.5 48 256S155.5 496 288 496c7.4 0 19.7-2.3 33.7-7.3 13.8-4.9 27.1-11.7 36.7-18.9 38.4-29 90.5-29 129 0 15.4 11.6 35.3 21.1 55 24.4 19.5 3.3 37 .4 51.1-10.2 10.6-8 25.6-5.9 33.6 4.7s5.9 25.6-4.7 33.6c-27.3 20.5-59.2 24-87.9 19.2-28.5-4.8-55.4-18-75.9-33.4-21.3-16.1-49.9-16.1-71.2 0-14.5 10.9-32.4 19.7-49.5 25.8-16.8 6-34.9 10.1-49.9 10.1l-.1 0C128.9 543.9 0 415 0 256 0 96.9 128.9-32 288-32 301.3-32 312-21.3 312-8s-10.7 24-24 24zm44.8 166.4l96-72c11.4-8.5 27.1-8.5 38.5 0l95.5 72c8 6 12.7 15.5 12.7 25.5l.3 121.5c-2.2 1.3-4.3 2.6-6.4 4.2-4.3 3.1-8.7 .8-13.2-1.5l-1.2-.6-.7-.3c-5.4-2.7-11.7-6.6-18.9-11.7-29.5-21.1-64.3-31.6-99.1-31.4-34.1 .2-68.1 10.7-97 31.4-7.8 5.6-13.8 9.3-19.3 11.2L320 208c0-10.1 4.7-19.6 12.8-25.6zm54.6 229.7c-14.5 10.9-32.4 19.7-49.5 25.8-16.8 6-34.9 10.1-49.9 10.1-106 0-192-86-192-192S182 64 288 64c13.3 0 24 10.7 24 24s-10.7 24-24 24c-79.5 0-144 64.5-144 144s64.5 144 144 144c7.4 0 19.7-2.3 33.7-7.3 13.8-4.9 27.1-11.7 36.7-18.9 38.4-29 90.5-29 129 0 15.4 11.6 35.3 21.1 55 24.4 19.5 3.3 37 .4 51.1-10.2 10.6-8 25.6-5.9 33.6 4.7s5.9 25.6-4.7 33.6c-27.3 20.5-59.2 24-87.9 19.2-28.5-4.8-55.4-18-75.9-33.4-21.3-16.1-49.9-16.1-71.2 0z\"]\n};\nvar faMagnifyingGlassChart = {\n  prefix: 'fas',\n  iconName: 'magnifying-glass-chart',\n  icon: [512, 512, [], \"e522\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376C296.3 401.1 253.9 416 208 416 93.1 416 0 322.9 0 208S93.1 0 208 0 416 93.1 416 208zm-312 8l0 64c0 13.3 10.7 24 24 24s24-10.7 24-24l0-64c0-13.3-10.7-24-24-24s-24 10.7-24 24zm80-96l0 160c0 13.3 10.7 24 24 24s24-10.7 24-24l0-160c0-13.3-10.7-24-24-24s-24 10.7-24 24zm80 64l0 96c0 13.3 10.7 24 24 24s24-10.7 24-24l0-96c0-13.3-10.7-24-24-24s-24 10.7-24 24z\"]\n};\nvar faUmbrella = {\n  prefix: 'fas',\n  iconName: 'umbrella',\n  icon: [512, 512, [], \"f0e9\", \"M256-32c17.7 0 32 14.3 32 32l0 2c126.3 15.7 224 123.5 224 254 0 3.8-.1 7.5-.2 11.3-.3 6.9-5 12.8-11.7 14.7s-13.8-.7-17.6-6.5c-14.4-21.4-38.8-35.5-66.5-35.5-29.3 0-54.9 15.7-68.9 39.3-2.7 4.6-7.6 7.6-13 7.8s-10.5-2.2-13.7-6.5c-14.6-19.8-38-32.6-64.5-32.6s-49.9 12.8-64.5 32.6c-3.2 4.3-8.3 6.8-13.7 6.5s-10.2-3.2-13-7.8c-14-23.6-39.6-39.3-68.9-39.3-27.7 0-52.1 14.1-66.5 35.5-3.9 5.7-11 8.4-17.6 6.5S.5 274.2 .2 267.3C.1 263.5 0 259.8 0 256 0 125.5 97.7 17.7 224 2l0-2c0-17.7 14.3-32 32-32zm32 360l0 102.6c0 45-36.5 81.4-81.4 81.4-30.8 0-59-17.4-72.8-45l-2.3-4.7c-7.9-15.8-1.5-35 14.3-42.9s35-1.5 42.9 14.3l2.3 4.7c3 5.9 9 9.6 15.6 9.6 9.6 0 17.4-7.8 17.4-17.4L224 328c0-17.7 14.3-32 32-32s32 14.3 32 32z\"]\n};\nvar faHillRockslide = {\n  prefix: 'fas',\n  iconName: 'hill-rockslide',\n  icon: [576, 512, [], \"e508\", \"M252.4 103.8l27 48c2.8 5 8.2 8.2 13.9 8.2l53.3 0c5.8 0 11.1-3.1 13.9-8.2l27-48c2.7-4.9 2.7-10.8 0-15.7l-27-48c-2.8-5-8.2-8.2-13.9-8.2l-53.3 0c-5.8 0-11.1 3.1-13.9 8.2l-27 48c-2.7 4.9-2.7 10.8 0 15.7zM68.3 87C43.1 61.8 0 79.7 0 115.3L0 432c0 44.2 35.8 80 80 80l316.7 0c35.6 0 53.5-43.1 28.3-68.3L68.3 87zM504.2 403.6c4.9 2.7 10.8 2.7 15.7 0l48-27c5-2.8 8.2-8.2 8.2-13.9l0-53.3c0-5.8-3.1-11.1-8.2-13.9l-48-27c-4.9-2.7-10.8-2.7-15.7 0l-48 27c-5 2.8-8.2 8.2-8.2 13.9l0 53.3c0 5.8 3.1 11.1 8.2 13.9l48 27zM192 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM384 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nvar faUserSecret = {\n  prefix: 'fas',\n  iconName: 'user-secret',\n  icon: [448, 512, [128373], \"f21b\", \"M171-16c-36.4 0-57.8 58.3-68.3 112L72 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l24 0 0 32c0 17 3.3 33.2 9.3 48l-9.3 0 0 0-20.5 0c-15.2 0-27.5 12.3-27.5 27.5 0 3 .5 5.9 1.4 8.7l28.9 86.6C40.2 379.6 16 428.1 16 482.3 16 498.7 29.3 512 45.7 512l356.6 0c16.4 0 29.7-13.3 29.7-29.7 0-54.2-24.2-102.7-62.3-135.4l28.9-86.6c.9-2.8 1.4-5.7 1.4-8.7 0-15.2-12.3-27.5-27.5-27.5l-20.5 0 0 0-9.3 0c6-14.8 9.3-31 9.3-48l0-32 24 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-30.7 0c-10.4-53.7-31.9-112-68.3-112-9.6 0-19 3.9-27.5 8.2-8.2 4.1-18.4 7.8-25.5 7.8s-17.3-3.7-25.5-7.8C190-12.1 180.6-16 171-16zm93.7 484.4l-24.8-70.9 27.9-32.5c2.7-3.2 4.2-7.2 4.2-11.4 0-9.7-7.8-17.5-17.5-17.5l-61 0c-9.7 0-17.5 7.8-17.5 17.5 0 4.2 1.5 8.2 4.2 11.4l27.9 32.5-24.8 70.9-57-180.4 35.7 0c18.4 10.2 39.5 16 62 16s43.6-5.8 62-16l35.7 0-57 180.4zM224 256c-34.7 0-64.2-22.1-75.3-53 5.7 3.2 12.3 5 19.3 5l12.4 0c16.5 0 31.1-10.6 36.3-26.2 2.3-7 12.2-7 14.5 0 5.2 15.6 19.9 26.2 36.3 26.2l12.4 0c7 0 13.6-1.8 19.3-5-11.1 30.9-40.6 53-75.3 53z\"]\n};\nvar faPager = {\n  prefix: 'fas',\n  iconName: 'pager',\n  icon: [512, 512, [128223], \"f815\", \"M0 128C0 92.7 28.7 64 64 64l384 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128zm64 32l0 64c0 17.7 14.3 32 32 32l320 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32L96 128c-17.7 0-32 14.3-32 32zM88 320c-13.3 0-24 10.7-24 24s10.7 24 24 24l48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0zm128 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0z\"]\n};\nvar faBriefcase = {\n  prefix: 'fas',\n  iconName: 'briefcase',\n  icon: [512, 512, [128188], \"f0b1\", \"M200 48l112 0c4.4 0 8 3.6 8 8l0 40-128 0 0-40c0-4.4 3.6-8 8-8zm-56 8l0 40-80 0C28.7 96 0 124.7 0 160l0 96 512 0 0-96c0-35.3-28.7-64-64-64l-80 0 0-40c0-30.9-25.1-56-56-56L200 0c-30.9 0-56 25.1-56 56zM512 304l-192 0 0 16c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-16-192 0 0 112c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-112z\"]\n};\nvar faTrowelBricks = {\n  prefix: 'fas',\n  iconName: 'trowel-bricks',\n  icon: [512, 512, [], \"e58a\", \"M224 32c0-11.5-6.2-22.2-16.2-27.8s-22.3-5.5-32.2 .4l-160 96C5.9 106.3 0 116.8 0 128s5.9 21.7 15.5 27.4l160 96c9.9 5.9 22.2 6.1 32.2 .4S224 235.5 224 224l0-64 256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-256 0 0-64zm96 192c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-160 0zM0 416l0 64c0 17.7 14.3 32 32 32l96 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-96 0c-17.7 0-32 14.3-32 32zm224-32c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l256 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-256 0z\"]\n};\nvar faSocks = {\n  prefix: 'fas',\n  iconName: 'socks',\n  icon: [512, 512, [129510], \"f696\", \"M252.8 0L176 0c-26.5 0-48 21.5-48 48l0 16 112 0 0-16c0-17.5 4.7-33.9 12.8-48zM128 112l0 128c0 20.1-9.5 39.1-25.6 51.2l-64 48c-24.2 18.1-38.4 46.6-38.4 76.8 0 53 43 96 96 96 15.4 0 30.5-3.7 44-10.7-17.6-23.9-28-53.4-28-85.3 0-45.3 21.3-88 57.6-115.2l64-48c4-3 6.4-7.8 6.4-12.8l0-128-112 0zm160 0l0 128c0 20.1-9.5 39.1-25.6 51.2l-64 48c-24.2 18.1-38.4 46.6-38.4 76.8 0 53 43 96 96 96 20.8 0 41-6.7 57.6-19.2l115.2-86.4C461 382.2 480 344.3 480 304l0-192-192 0zM480 64l0-16c0-26.5-21.5-48-48-48L336 0c-26.5 0-48 21.5-48 48l0 16 192 0z\"]\n};\nvar faT = {\n  prefix: 'fas',\n  iconName: 't',\n  icon: [384, 512, [116], \"54\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l128 0 0 352c0 17.7 14.3 32 32 32s32-14.3 32-32l0-352 128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32z\"]\n};\nvar faMicrochip = {\n  prefix: 'fas',\n  iconName: 'microchip',\n  icon: [512, 512, [], \"f2db\", \"M176 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c-35.3 0-64 28.7-64 64l-40 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l40 0 0 56-40 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l40 0 0 56-40 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l40 0c0 35.3 28.7 64 64 64l0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40 56 0 0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40 56 0 0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40c35.3 0 64-28.7 64-64l40 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-40 0 0-56 40 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-40 0 0-56 40 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-40 0c0-35.3-28.7-64-64-64l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40-56 0 0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40-56 0 0-40zM160 128l192 0c17.7 0 32 14.3 32 32l0 192c0 17.7-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32l0-192c0-17.7 14.3-32 32-32zm16 48l0 160 160 0 0-160-160 0z\"]\n};\nvar faTruckMedical = {\n  prefix: 'fas',\n  iconName: 'truck-medical',\n  icon: [576, 512, [128657, \"ambulance\"], \"f0f9\", \"M64 32C28.7 32 0 60.7 0 96L0 384c0 35.3 28.7 64 64 64l3.3 0c10.4 36.9 44.4 64 84.7 64s74.2-27.1 84.7-64l102.6 0c10.4 36.9 44.4 64 84.7 64s74.2-27.1 84.7-64l3.3 0c35.3 0 64-28.7 64-64l0-146.7c0-17-6.7-33.3-18.7-45.3L512 146.7c-12-12-28.3-18.7-45.3-18.7l-50.7 0 0-32c0-35.3-28.7-64-64-64L64 32zM512 237.3l0 50.7-96 0 0-96 50.7 0 45.3 45.3zM152 384a40 40 0 1 1 0 80 40 40 0 1 1 0-80zm232 40a40 40 0 1 1 80 0 40 40 0 1 1 -80 0zM176 136c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 40 40 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-40 0 0 40c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-40-40 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l40 0 0-40z\"]\n};\nvar faAmbulance = faTruckMedical;\nvar faOm = {\n  prefix: 'fas',\n  iconName: 'om',\n  icon: [576, 512, [128329], \"f679\", \"M388.7 4.7c6.2-6.2 16.4-6.2 22.6 0l16 16c6.2 6.2 6.2 16.4 0 22.6l-16 16c-6.2 6.2-16.4 6.2-22.6 0l-16-16c-6.2-6.2-6.2-16.4 0-22.6l16-16zM176 160c-10.8 0-20.8 3.6-28.8 9.6-14.1 10.6-34.2 7.8-44.8-6.4s-7.8-34.2 6.4-44.8c18.7-14.1 42-22.4 67.2-22.4 61.9 0 112 50.1 112 112 0 17.2-3.9 33.5-10.8 48l49.7 0c12.7 0 24.9-5 33.9-14.1l20.7-20.7c18.7-18.7 44.1-29.3 70.6-29.3 55.2 0 99.9 44.7 99.9 99.9l0 96.1c0 55.2-44.8 100-100 100S352 443.2 352 388l0-4c0-17.7 14.3-32 32-32s32 14.3 32 32l0 4c0 19.9 16.1 36 36 36s36-16.1 36-36l0-96.1c0-19.8-16.1-35.9-35.9-35.9-9.5 0-18.6 3.8-25.4 10.5l-20.7 20.7c-21 21-49.4 32.8-79.1 32.8l-26.8 0c12.6 19.6 19.9 42.8 19.9 68 0 75.2-65 132-140 132S40 463.2 40 388c0-17.7 14.3-32 32-32s32 14.3 32 32c0 35.3 31.7 68 76 68s76-32.7 76-68-31.7-68-76-68l-20 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0c26.5 0 48-21.5 48-48s-21.5-48-48-48zM337.1 60.1c-11-13.8-31.1-16.2-45-5.2s-16.2 31.1-5.2 45C312.6 132.2 354.4 152 400 152s87.4-19.8 113.1-52.1c11-13.8 8.7-34-5.2-45s-34-8.7-45 5.2C450.3 76 427.5 88 400 88s-50.3-12-62.9-27.9z\"]\n};\nvar faMosquitoNet = {\n  prefix: 'fas',\n  iconName: 'mosquito-net',\n  icon: [640, 512, [], \"e52c\", \"M576 352c13.3 0 24 10.7 24 24l0 16 16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0 0 48 16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0 0 16-.1 2.5C598.6 566.6 588.4 576 576 576s-22.6-9.4-23.9-21.5l-.1-2.5 0-16-48 0 0 16-.1 2.5C502.6 566.6 492.4 576 480 576s-22.6-9.4-23.9-21.5l-.1-2.5 0-16-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l16 0 0-48-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l16 0 0-16c0-13.3 10.7-24 24-24s24 10.7 24 24l0 16 48 0 0-16c0-13.3 10.7-24 24-24zM429.9 16.3c7.7-9.4 21.3-11.5 31.4-4.3 10.1 7.1 13.1 20.9 7.4 31.7l-1.3 2.1-25.9 38.9 13.3 53.4c2 8-.1 16.3-5.3 22.3l-2.4 2.4-44.7 38.3 130.5 14.5c42.8 4.8 75.1 40.9 75.1 83.9 0 3.9-.4 7.7-.9 11.5-7.3-3.5-15.3-5.8-23.8-6.7L576 304c-18.5 0-35.3 7-48 18.4-11-9.9-25.1-16.5-40.6-18.1L480 304c-30.3 0-56.1 18.7-66.8 45.2-12.5 5-23.2 13.4-31.1 24l-30.2-40.1 0 74.7c0 17.7-14.3 32-32 32-16.6 0-30.2-12.6-31.8-28.7l-.2-3.3 0-74.6-32.3 43 0 39.8c0 3.5-.7 6.9-2.1 10.1l-1.6 3.1-40 64-1.4 2c-7.5 9.6-21 12.1-31.3 5.3-10.3-6.8-13.7-20.5-8.3-31.5l1.2-2.2 36.2-58 0-41 .3-4c.6-3.9 2.2-7.7 4.6-10.9l39.3-52.2-66.2 59.5c-17 15.3-39 23.7-61.9 23.8l-8.1 0c-46.6 0-84.4-37.8-84.4-84.4 0-43 32.4-79.2 75.1-83.9l130.5-14.5-44.7-38.3-2.4-2.4c-5.2-6-7.3-14.4-5.3-22.3l13.3-53.4-25.9-38.9-1.2-2.1c-5.7-10.8-2.7-24.6 7.4-31.7 10.1-7.1 23.7-5.1 31.4 4.3l1.5 2 32 48 1.4 2.2c2.8 5.3 3.5 11.6 2.1 17.6l-12.3 49.2 53.3 45.7 0-28.8 .2-3.2c1.1-10.4 7.2-19.4 15.8-24.4l0-60.5 .3-3.2c1.5-7.3 8-12.7 15.7-12.8 7.7 0 14.2 5.5 15.7 12.8l.3 3.2 0 60.5c8.7 5 14.8 14 15.8 24.4l.2 3.2 0 28.9 53.4-45.7-12.3-49.2c-1.5-5.9-.7-12.2 2.1-17.6l1.4-2.2 32-48 1.5-2zM504 488l48 0 0-48-48 0 0 48z\"]\n};\nvar faPrescriptionBottle = {\n  prefix: 'fas',\n  iconName: 'prescription-bottle',\n  icon: [384, 512, [], \"f485\", \"M0 32C0 14.3 14.3 0 32 0L352 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64L0 32zM32 144l320 0 0 304c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l72 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-72 0 0-48 72 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-72 0 0-48 72 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-72 0 0-64z\"]\n};\nvar faUsersGear = {\n  prefix: 'fas',\n  iconName: 'users-gear',\n  icon: [640, 512, [\"users-cog\"], \"f509\", \"M320 224a104 104 0 1 0 0-208 104 104 0 1 0 0 208zM96 232a72 72 0 1 0 0-144 72 72 0 1 0 0 144zM0 416l0 32c0 17.7 14.3 32 32 32l86.7 0c-4.3-9.8-6.7-20.6-6.7-32l0-16c0-53.2 20-101.8 52.9-138.6-11.7-3.5-24.1-5.4-36.9-5.4-70.7 0-128 57.3-128 128zM616 160a72 72 0 1 0 -144 0 72 72 0 1 0 144 0zM160 432l0 16c0 17.7 14.3 32 32 32l156.8 0c-7.1-21.6-6.3-44.4 10.7-64-14-16.2-20.5-39.7-11.4-63.3 6.6-17.1 15.9-33.1 27.4-47.3 5.4-6.6 11.6-11.7 18.3-15.4-22.1-11.5-47.2-18-73.8-18-88.4 0-160 71.6-160 160zm464.6-44.1c6.3-3.6 9.5-11.1 6.8-18-4.8-12.4-11.5-24.1-19.9-34.4-4.6-5.7-12.7-6.7-19-3-21.8 12.6-48.6-2.8-48.6-28.1 0-7.3-4.9-13.8-12.1-14.9-12.9-2-26.8-2-39.7 0-7.2 1.1-12.1 7.6-12.1 14.9 0 25.2-26.8 40.7-48.6 28.1-6.3-3.6-14.4-2.6-19 3-8.4 10.3-15.1 22-19.9 34.4-2.6 6.8 .5 14.3 6.8 17.9 21.9 12.6 21.9 43.5 0 56.2-6.3 3.6-9.5 11.1-6.8 17.9 4.8 12.4 11.5 24.1 19.9 34.4 4.6 5.7 12.7 6.7 19 3 21.8-12.6 48.6 2.9 48.6 28.1 0 7.3 4.9 13.8 12.1 14.9 12.9 2 26.8 2 39.7 0 7.2-1.1 12.1-7.6 12.1-14.9 0-25.2 26.8-40.7 48.6-28.1 6.3 3.6 14.4 2.6 19-3 8.4-10.3 15.1-22 19.9-34.4 2.6-6.8-.5-14.3-6.8-17.9-21.9-12.6-21.9-43.5 0-56.2zM472 416a40 40 0 1 1 80 0 40 40 0 1 1 -80 0z\"]\n};\nvar faUsersCog = faUsersGear;\nvar faRoadCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'road-circle-exclamation',\n  icon: [640, 512, [], \"e565\", \"M288 32l-76.3 0c-29.4 0-55.1 20.1-62.1 48.6L65.4 420.5C57.9 450.7 80.8 480 112 480l209.4 0c-11.2-24.4-17.4-51.4-17.4-80 0-28.6 6.2-55.7 17.4-80-.5 0-1 0-1.5 0-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 49c35.2-39.9 86.7-65 144-65 9 0 17.8 .6 26.5 1.8l-32-129.2C483.4 52.1 457.8 32 428.3 32l-76.4 0 0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zM496 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-100a20 20 0 1 1 0 40 20 20 0 1 1 0-40zm0-140c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nvar faPause = {\n  prefix: 'fas',\n  iconName: 'pause',\n  icon: [384, 512, [9208], \"f04c\", \"M48 32C21.5 32 0 53.5 0 80L0 432c0 26.5 21.5 48 48 48l64 0c26.5 0 48-21.5 48-48l0-352c0-26.5-21.5-48-48-48L48 32zm224 0c-26.5 0-48 21.5-48 48l0 352c0 26.5 21.5 48 48 48l64 0c26.5 0 48-21.5 48-48l0-352c0-26.5-21.5-48-48-48l-64 0z\"]\n};\nvar faStaffSnake = {\n  prefix: 'fas',\n  iconName: 'staff-snake',\n  icon: [448, 512, [\"rod-asclepius\", \"rod-snake\", \"staff-aesculapius\"], \"e579\", \"M192 32l0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 64 0c53 0 96 43 96 96s-43 96-96 96l-16 0 0-64 16 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0 192 32 0c53 0 96 43 96 96 0 47.6-34.6 87.1-80 94.7l0-67c9.6-5.5 16-15.9 16-27.7 0-17.7-14.3-32-32-32l-32 0 0 160c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-64-32 0c-53 0-96-43-96-96 0-47.6 34.6-87.1 80-94.7l0 67c-9.6 5.5-16 15.9-16 27.7 0 17.7 14.3 32 32 32l32 0 0-192-72.6 0c-11.1 19.1-31.7 32-55.4 32l-16 0C21.5 128 0 106.5 0 80S21.5 32 48 32l144 0z\"]\n};\nvar faRodAsclepius = faStaffSnake;\nvar faRodSnake = faStaffSnake;\nvar faStaffAesculapius = faStaffSnake;\nvar faPiggyBank = {\n  prefix: 'fas',\n  iconName: 'piggy-bank',\n  icon: [576, 512, [], \"f4d3\", \"M288-32a96 96 0 1 1 0 192 96 96 0 1 1 0-192zM48 304c0-70.1 47-131.4 117.1-164.9 25.3 41.3 70.9 68.9 122.9 68.9 55.7 0 104.1-31.7 128-78 15.8-11.3 35.1-18 56-18l19.5 0c10.4 0 18 9.8 15.5 19.9l-17.1 68.3c9.9 12.4 18.2 25.7 24.4 39.8l21.7 0c13.3 0 24 10.7 24 24l0 112c0 13.3-10.7 24-24 24l-40 0c-16.5 22-38.5 39.6-64 50.7l0 29.3c0 17.7-14.3 32-32 32l-33 0c-14.3 0-26.8-9.5-30.8-23.2l-7.1-24.8-82.3 0-7.1 24.8C235.8 502.5 223.3 512 209 512l-33 0c-17.7 0-32-14.3-32-32l0-29.3C87.5 426 48 369.6 48 304zm376 16a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nvar faMonument = {\n  prefix: 'fas',\n  iconName: 'monument',\n  icon: [384, 512, [], \"f5a6\", \"M209-33c-9.4-9.4-24.6-9.4-33.9 0L95 47c-4.1 4.1-6.5 9.4-7 15.1L58.4 448 48 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-10.4 0-29.7-385.8c-.4-5.7-2.9-11.1-7-15.1L209-33zM128 296c0-13.3 10.7-24 24-24l80 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24z\"]\n};\nvar faAnglesRight = {\n  prefix: 'fas',\n  iconName: 'angles-right',\n  icon: [448, 512, [187, \"angle-double-right\"], \"f101\", \"M439.1 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L371.2 256 233.9 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160zm-352 160l160-160c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L179.2 256 41.9 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0z\"]\n};\nvar faAngleDoubleRight = faAnglesRight;\nvar faDesktop = {\n  prefix: 'fas',\n  iconName: 'desktop',\n  icon: [512, 512, [128421, 61704, \"desktop-alt\"], \"f390\", \"M64 32C28.7 32 0 60.7 0 96L0 352c0 35.3 28.7 64 64 64l144 0-16 48-72 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l272 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-72 0-16-48 144 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 32zM96 96l320 0c17.7 0 32 14.3 32 32l0 160c0 17.7-14.3 32-32 32L96 320c-17.7 0-32-14.3-32-32l0-160c0-17.7 14.3-32 32-32z\"]\n};\nvar faDesktopAlt = faDesktop;\nvar faPlaneCircleXmark = {\n  prefix: 'fas',\n  iconName: 'plane-circle-xmark',\n  icon: [640, 512, [], \"e557\", \"M232 24c0-30.9 25.1-56 56-56s56 25.1 56 56l0 127.3 78 71.5c-69.3 29-118 97.4-118 177.2 0 49.3 18.6 94.3 49.1 128.3L288 512 179.9 539c-10.1 2.5-19.9-5.1-19.9-15.5l0-19.8c0-4.9 2.2-9.5 6-12.5l66-52.8 0-99.7-162.9 54.3C58.7 396.4 48 388.7 48 377.8l0-43.7c0-9 3.8-17.5 10.4-23.6L232 151.3 232 24zM496 256a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm59.3 107.3c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0l-36.7 36.7-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l36.7 36.7-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l36.7-36.7 36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-36.7-36.7 36.7-36.7z\"]\n};\nvar faRetweet = {\n  prefix: 'fas',\n  iconName: 'retweet',\n  icon: [576, 512, [], \"f079\", \"M118.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9S19.1 160 32 160l32 0 0 224c0 53 43 96 96 96l128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-128 0c-17.7 0-32-14.3-32-32l0-224 32 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64zM457.4 470.6c12.5 12.5 32.8 12.5 45.3 0l64-64c9.2-9.2 11.9-22.9 6.9-34.9S556.9 352 544 352l-32 0 0-224c0-53-43-96-96-96L288 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l128 0c17.7 0 32 14.3 32 32l0 224-32 0c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64z\"]\n};\nvar faUserGear = {\n  prefix: 'fas',\n  iconName: 'user-gear',\n  icon: [640, 512, [\"user-cog\"], \"f4fe\", \"M256.5 8a120 120 0 1 1 0 240 120 120 0 1 1 0-240zM226.7 304l59.4 0 1.5 0c-12.9 26.8-7.8 58.2 11.5 79.5-20.2 22.3-24.8 55.8-9.4 83.4l22.5 40.4c.9 1.6 1.9 3.2 2.9 4.7l-237 0c-16.4 0-29.7-13.3-29.7-29.7 0-98.5 79.8-178.3 178.3-178.3zm205.9-56.4c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 6.1c0 18.9 24.1 32.8 40.5 23.4l5-2.9c11.6-6.7 26.5-2.6 33 9.1l22.4 40.2c6.2 11.2 2.6 25.2-8.2 32l-4.7 2.9c-16.2 10.1-16.2 39.9 0 50.1l4.6 2.9c10.8 6.8 14.5 20.8 8.3 32L607 483.8c-6.5 11.7-21.4 15.9-33 9.1l-4.9-2.9c-16.4-9.5-40.5 4.5-40.5 23.4l0 6.1c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24l0-5.9c0-19-24.2-33-40.7-23.5l-4.8 2.8c-11.6 6.7-26.4 2.6-33-9.1l-22.6-40.4c-6.2-11.2-2.6-25.3 8.3-32.1l4.4-2.7c16.3-10.1 16.3-40.1 0-50.2l-4.5-2.8c-10.9-6.8-14.5-20.9-8.3-32.1l22.5-40.3c6.5-11.7 21.4-15.8 32.9-9.1l4.8 2.8c16.5 9.5 40.7-4.5 40.7-23.5l0-5.9zm99.9 136.2a52 52 0 1 0 -104 0 52 52 0 1 0 104 0z\"]\n};\nvar faUserCog = faUserGear;\nvar faBorderAll = {\n  prefix: 'fas',\n  iconName: 'border-all',\n  icon: [448, 512, [], \"f84c\", \"M384 96l0 128-128 0 0-128 128 0zm0 192l0 128-128 0 0-128 128 0zM192 224l-128 0 0-128 128 0 0 128zM64 288l128 0 0 128-128 0 0-128zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32z\"]\n};\nvar faCoins = {\n  prefix: 'fas',\n  iconName: 'coins',\n  icon: [512, 512, [], \"f51e\", \"M128 96l0-16c0-44.2 86-80 192-80S512 35.8 512 80l0 16c0 30.6-41.3 57.2-102 70.7-2.4-2.8-4.9-5.5-7.4-8-15.5-15.3-35.5-26.9-56.4-35.5-41.9-17.5-96.5-27.1-154.2-27.1-21.9 0-43.3 1.4-63.8 4.1-.2-1.3-.2-2.7-.2-4.1zM432 353l0-46.2c15.1-3.9 29.3-8.5 42.2-13.9 13.2-5.5 26.1-12.2 37.8-20.3l0 15.4c0 26.8-31.5 50.5-80 65zm0-96l0-33c0-4.5-.4-8.8-1-13 15.5-3.9 30-8.6 43.2-14.2s26.1-12.2 37.8-20.3l0 15.4c0 26.8-31.5 50.5-80 65zM0 240l0-16c0-44.2 86-80 192-80s192 35.8 192 80l0 16c0 44.2-86 80-192 80S0 284.2 0 240zm384 96c0 44.2-86 80-192 80S0 380.2 0 336l0-15.4c11.6 8.1 24.5 14.7 37.8 20.3 41.9 17.5 96.5 27.1 154.2 27.1s112.3-9.7 154.2-27.1c13.2-5.5 26.1-12.2 37.8-20.3l0 15.4zm0 80.6l0 15.4c0 44.2-86 80-192 80S0 476.2 0 432l0-15.4c11.6 8.1 24.5 14.7 37.8 20.3 41.9 17.5 96.5 27.1 154.2 27.1s112.3-9.7 154.2-27.1c13.2-5.5 26.1-12.2 37.8-20.3z\"]\n};\nvar faMarsStroke = {\n  prefix: 'fas',\n  iconName: 'mars-stroke',\n  icon: [576, 512, [9894], \"f229\", \"M416-32c-17.7 0-32 14.3-32 32s14.3 32 32 32l50.7 0-58.7 58.7-17.4-17.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l17.4 17.4-23 23c-28.4-19.5-62.7-31-99.8-31-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176c0-37-11.4-71.4-31-99.8l23-23 17.4 17.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L453.3 136 512 77.3 512 128c0 17.7 14.3 32 32 32s32-14.3 32-32L576 0c0-17.7-14.3-32-32-32L416-32zM128 304a112 112 0 1 1 224 0 112 112 0 1 1 -224 0z\"]\n};\nvar faHandshakeAngle = {\n  prefix: 'fas',\n  iconName: 'handshake-angle',\n  icon: [576, 512, [\"hands-helping\"], \"f4c4\", \"M268.9 53.2L152.3 182.8c-4.6 5.1-4.4 13 .5 17.9 30.5 30.5 80 30.5 110.5 0l31.8-31.8c4.2-4.2 9.5-6.5 14.9-6.9 6.8-.6 13.8 1.7 19 6.9L505.6 344 576 288 576 0 464 64 440.2 48.1C424.4 37.6 405.9 32 386.9 32l-70.4 0c-1.1 0-2.3 0-3.4 .1-16.9 .9-32.8 8.5-44.2 21.1zM116.6 150.7L223.4 32 183.8 32c-25.5 0-49.9 10.1-67.9 28.1L0 192 0 544 144 408 156.4 418.3c23 19.2 52 29.7 81.9 29.7l15.7 0-7-7c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l41 41 9 0c19.1 0 37.8-4.3 54.8-12.3L359 409c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l32 32 17.5-17.5c8.9-8.9 11.5-21.8 7.6-33.1l-137.9-136.8-14.9 14.9c-49.3 49.3-129.1 49.3-178.4 0-23-23-23.9-59.9-2.2-84z\"]\n};\nvar faHandsHelping = faHandshakeAngle;\nvar faArrowDown = {\n  prefix: 'fas',\n  iconName: 'arrow-down',\n  icon: [384, 512, [8595], \"f063\", \"M169.4 502.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 402.7 224 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 370.7-105.4-105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z\"]\n};\nvar faLocationDot = {\n  prefix: 'fas',\n  iconName: 'location-dot',\n  icon: [384, 512, [\"map-marker-alt\"], \"f3c5\", \"M0 188.6C0 84.4 86 0 192 0S384 84.4 384 188.6c0 119.3-120.2 262.3-170.4 316.8-11.8 12.8-31.5 12.8-43.3 0-50.2-54.5-170.4-197.5-170.4-316.8zM192 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128z\"]\n};\nvar faMapMarkerAlt = faLocationDot;\nvar faPlugCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'plug-circle-exclamation',\n  icon: [640, 512, [], \"e55d\", \"M192-32c17.7 0 32 14.3 32 32l0 96 128 0 0-96c0-17.7 14.3-32 32-32s32 14.3 32 32l0 96 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 48.7c-98.6 8.1-176 90.7-176 191.3 0 27.3 5.7 53.3 16 76.9l0 3.1c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-66.7C165.2 398.1 96 319.1 96 224l0-64c-17.7 0-32-14.3-32-32S78.3 96 96 96l64 0 0-96c0-17.7 14.3-32 32-32zM496 256a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 228a20 20 0 1 0 0-40 20 20 0 1 0 0 40zm0-180c-8.8 0-16 7.2-16 16l0 80c0 8.8 7.2 16 16 16s16-7.2 16-16l0-80c0-8.8-7.2-16-16-16z\"]\n};\nvar faCookieBite = {\n  prefix: 'fas',\n  iconName: 'cookie-bite',\n  icon: [512, 512, [], \"f564\", \"M257.5 27.6c-.8-5.4-4.9-9.8-10.3-10.6-22.1-3.1-44.6 .9-64.4 11.4l-74 39.5C89.1 78.4 73.2 94.9 63.4 115L26.7 190.6c-9.8 20.1-13 42.9-9.1 64.9l14.5 82.8c3.9 22.1 14.6 42.3 30.7 57.9l60.3 58.4c16.1 15.6 36.6 25.6 58.7 28.7l83 11.7c22.1 3.1 44.6-.9 64.4-11.4l74-39.5c19.7-10.5 35.6-27 45.4-47.2l36.7-75.5c9.8-20.1 13-42.9 9.1-64.9-.9-5.3-5.3-9.3-10.6-10.1-51.5-8.2-92.8-47.1-104.5-97.4-1.8-7.6-8-13.4-15.7-14.6-54.6-8.7-97.7-52-106.2-106.8zM208 144a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM144 336a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm224-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faScrewdriverWrench = {\n  prefix: 'fas',\n  iconName: 'screwdriver-wrench',\n  icon: [576, 512, [\"tools\"], \"f7d9\", \"M70.8-6.7c5.4-5.4 13.8-6.2 20.2-2L209.9 70.5c8.9 5.9 14.2 15.9 14.2 26.6l0 49.6 90.8 90.8c33.3-15 73.9-8.9 101.2 18.5L542.2 382.1c18.7 18.7 18.7 49.1 0 67.9l-60.1 60.1c-18.7 18.7-49.1 18.7-67.9 0L288.1 384c-27.4-27.4-33.5-67.9-18.5-101.2l-90.8-90.8-49.6 0c-10.7 0-20.7-5.3-26.6-14.2L23.4 58.9c-4.2-6.3-3.4-14.8 2-20.2L70.8-6.7zm145 303.5c-6.3 36.9 2.3 75.9 26.2 107.2l-94.9 95c-28.1 28.1-73.7 28.1-101.8 0s-28.1-73.7 0-101.8l135.4-135.5 35.2 35.1zM384.1 0c20.1 0 39.4 3.7 57.1 10.5 10 3.8 11.8 16.5 4.3 24.1L388.8 91.3c-3 3-4.7 7.1-4.7 11.3l0 41.4c0 8.8 7.2 16 16 16l41.4 0c4.2 0 8.3-1.7 11.3-4.7l56.7-56.7c7.6-7.5 20.3-5.7 24.1 4.3 6.8 17.7 10.5 37 10.5 57.1 0 43.2-17.2 82.3-45 111.1l-49.1-49.1c-33.1-33-78.5-45.7-121.1-38.4l-56.8-56.8 0-29.7-.2-5c-.8-12.4-4.4-24.3-10.5-34.9 29.4-35 73.4-57.2 122.7-57.3z\"]\n};\nvar faTools = faScrewdriverWrench;\nvar faIndent = {\n  prefix: 'fas',\n  iconName: 'indent',\n  icon: [448, 512, [], \"f03c\", \"M0 64C0 46.3 14.3 32 32 32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64zM192 192c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32zm32 96l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zM0 448c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32zM127.8 268.6L25.8 347.9C15.3 356.1 0 348.6 0 335.3L0 176.7c0-13.3 15.3-20.8 25.8-12.6l101.9 79.3c8.2 6.4 8.2 18.9 0 25.3z\"]\n};\nvar faBars = {\n  prefix: 'fas',\n  iconName: 'bars',\n  icon: [448, 512, [\"navicon\"], \"f0c9\", \"M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z\"]\n};\nvar faNavicon = faBars;\nvar faHandsPraying = {\n  prefix: 'fas',\n  iconName: 'hands-praying',\n  icon: [640, 512, [\"praying-hands\"], \"f684\", \"M224 296c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-112.6 88.2-119.7c13.1-17.8 9.3-42.8-8.5-55.9s-42.8-9.3-55.9 8.5L106.5 142.9C89.3 166.2 80 194.5 80 223.6l0 110.7-58.1 19.4C8.8 358 0 370.2 0 384l0 96c0 10 4.7 19.5 12.7 25.5s18.4 8 28.1 5.2l154.4-44.1c55-15.7 92.8-65.9 92.8-123.1L288 224c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 72zm192 0l0-72c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 119.6c0 57.2 37.9 107.4 92.8 123.1l154.4 44.1c9.7 2.8 20 .8 28.1-5.2S640 490 640 480l0-96c0-13.8-8.8-26-21.9-30.4l-58.1-19.4 0-110.7c0-29-9.3-57.3-26.5-80.7L440.2 16.3C427.1-1.5 402.1-5.3 384.3 7.8s-21.6 38.1-8.5 55.9L464 183.4 464 296c0 13.3-10.7 24-24 24s-24-10.7-24-24z\"]\n};\nvar faPrayingHands = faHandsPraying;\nvar faViruses = {\n  prefix: 'fas',\n  iconName: 'viruses',\n  icon: [640, 512, [], \"e076\", \"M192 0c17.7 0 32 14.3 32 32 0 30.5 36.9 45.8 58.5 24.2 12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3c-21.6 21.6-6.3 58.5 24.2 58.5 17.7 0 32 14.3 32 32s-14.3 32-32 32c-30.5 0-45.8 36.9-24.2 58.5 12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0c-21.6-21.6-58.5-6.3-58.5 24.2 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-30.5-36.9-45.8-58.5-24.2-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3C77.8 260.9 62.5 224 32 224 14.3 224 0 209.7 0 192s14.3-32 32-32c30.5 0 45.8-36.9 24.2-58.5-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0C123.1 77.8 160 62.5 160 32 160 14.3 174.3 0 192 0zM144 176a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm128 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm248 40c0 22.9 27.7 34.4 43.9 18.2 9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9c-16.2 16.2-4.7 43.9 18.2 43.9 13.3 0 24 10.7 24 24s-10.7 24-24 24c-22.9 0-34.4 27.7-18.2 43.9 9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0c-16.2-16.2-43.9-4.7-43.9 18.2 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-22.9-27.7-34.4-43.9-18.2-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9c16.2-16.2 4.7-43.9-18.2-43.9-13.3 0-24-10.7-24-24s10.7-24 24-24c22.9 0 34.4-27.7 18.2-43.9-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0c16.2 16.2 43.9 4.7 43.9-18.2 0-13.3 10.7-24 24-24s24 10.7 24 24zM504 384a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"]\n};\nvar faSchoolFlag = {\n  prefix: 'fas',\n  iconName: 'school-flag',\n  icon: [576, 512, [], \"e56e\", \"M256-8c0-13.3 10.7-24 24-24l112 0c13.3 0 24 10.7 24 24l0 48c0 13.3-10.7 24-24 24l-72 0 0 19.2 128 76.8 64 0c35.3 0 64 28.7 64 64l0 224c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 224c0-35.3 28.7-64 64-64l64 0 128-76.8 0-91.2zM240 384l0 80 96 0 0-80c0-26.5-21.5-48-48-48s-48 21.5-48 48zM112 416c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0zm16-144l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16zM496 416c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0zm16-144l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16zm-224 0a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"]\n};\nvar faTrademark = {\n  prefix: 'fas',\n  iconName: 'trademark',\n  icon: [640, 512, [8482], \"f25c\", \"M346.6 110.2c-7.8-11.7-22.4-17-35.9-12.9S288 113.9 288 128l0 256c0 17.7 14.3 32 32 32s32-14.3 32-32l0-150.3 69.4 104.1c5.9 8.9 15.9 14.2 26.6 14.2s20.7-5.3 26.6-14.2L544 233.7 544 384c0 17.7 14.3 32 32 32s32-14.3 32-32l0-256c0-14.1-9.2-26.5-22.7-30.6s-28.1 1.1-35.9 12.9L448 262.3 346.6 110.2zM32 96C14.3 96 0 110.3 0 128s14.3 32 32 32l64 0 0 224c0 17.7 14.3 32 32 32s32-14.3 32-32l0-224 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 96z\"]\n};\nvar faFireBurner = {\n  prefix: 'fas',\n  iconName: 'fire-burner',\n  icon: [512, 512, [], \"e4f1\", \"M281.7 48.3L294 34.5c5.4-6.1 13.3-8.8 20.9-8.9 7.2 0 14.3 2.6 19.9 7.8 19.7 18.3 39.8 43.2 55 70.6 15.1 27.2 26.2 58.1 26.2 88.1 0 88.7-71.3 159.8-160 159.8-89.6 0-160-71.3-160-159.8 0-37.3 16-73.4 36.8-104.5 20.9-31.3 47.5-59 70.9-80.2 5.7-5.2 13.1-7.7 20.3-7.5s13.4 3.2 18.8 7.5c14.4 11.4 38.9 40.7 38.9 40.7zM320 240.2c0-36.5-37-73-54.8-88.4-5.4-4.7-13.1-4.7-18.5 0-17.7 15.4-54.8 51.9-54.8 88.4 0 35.3 28.7 64 64 64s64-28.7 64-64zM92.8 320c37.7 48.3 96.1 80 163.2 80 66.5 0 125.1-31.7 163-80l45 0c26.5 0 48 21.5 48 48l0 64c0 26.5-21.5 48-48 48L48 480c-26.5 0-48-21.5-48-48l0-64c0-26.5 21.5-48 48-48l44.8 0zM456 400a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"]\n};\nvar faFaceSmileBeam = {\n  prefix: 'fas',\n  iconName: 'face-smile-beam',\n  icon: [512, 512, [128522, \"smile-beam\"], \"f5b8\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM165.4 321.9c20.4 28 53.4 46.1 90.6 46.1s70.2-18.1 90.6-46.1c7.8-10.7 22.8-13.1 33.5-5.3s13.1 22.8 5.3 33.5C356.3 390 309.2 416 256 416s-100.3-26-129.4-65.9c-7.8-10.7-5.4-25.7 5.3-33.5s25.7-5.4 33.5 5.3zM176 180c-15.5 0-28 12.5-28 28l0 8c0 11-9 20-20 20s-20-9-20-20l0-8c0-37.6 30.4-68 68-68s68 30.4 68 68l0 8c0 11-9 20-20 20s-20-9-20-20l0-8c0-15.5-12.5-28-28-28zm132 28l0 8c0 11-9 20-20 20s-20-9-20-20l0-8c0-37.6 30.4-68 68-68s68 30.4 68 68l0 8c0 11-9 20-20 20s-20-9-20-20l0-8c0-15.5-12.5-28-28-28s-28 12.5-28 28z\"]\n};\nvar faSmileBeam = faFaceSmileBeam;\nvar faTentArrowLeftRight = {\n  prefix: 'fas',\n  iconName: 'tent-arrow-left-right',\n  icon: [512, 512, [], \"e57f\", \"M-.5 113c-9.4-9.4-9.4-24.6 0-33.9l72-72c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-31 31 310.1 0 54.1 0-31-31c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l72 72c9.4 9.4 9.4 24.6 0 33.9l-72 72c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l31-31-102.1 0-.1 0-262 0 31 31c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-72-72zM37.1 476L60.3 292.6c1.2-9.7 6.8-18.3 15.1-23.3L238.8 170c10.2-6.2 22.9-6.2 33.1-.1l165.5 99.4c8.4 5 14 13.7 15.3 23.4L475.9 476c2.4 19.1-12.5 36-31.7 36l-71.9 0c-12.1 0-23.2-6.8-28.6-17.7L275.4 357.9c-1.8-3.6-5.5-5.9-9.5-5.9-5.9 0-10.6 4.7-10.6 10.6l0 117.4c0 17.7-14.3 32-32 32L68.8 512c-19.3 0-34.2-16.9-31.7-36z\"]\n};\nvar faRoute = {\n  prefix: 'fas',\n  iconName: 'route',\n  icon: [512, 512, [], \"f4d7\", \"M512 96c0 50.2-59.1 125.1-84.6 155-3.8 4.4-9.4 6.1-14.5 5L320 256c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c53 0 96 43 96 96s-43 96-96 96l-276.4 0c8.7-9.9 19.3-22.6 30-36.8 6.3-8.4 12.8-17.6 19-27.2L416 448c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0c-53 0-96-43-96-96s43-96 96-96l39.8 0c-21-31.5-39.8-67.7-39.8-96 0-53 43-96 96-96s96 43 96 96zM117.1 489.1c-3.8 4.3-7.2 8.1-10.1 11.3l-1.8 2-.2-.2c-6 4.6-14.6 4-20-1.8-25.2-27.4-85-97.9-85-148.4 0-53 43-96 96-96s96 43 96 96c0 30-21.1 67-43.5 97.9-10.7 14.7-21.7 28-30.8 38.5l-.6 .7zM128 352a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM416 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nvar faAnglesUp = {\n  prefix: 'fas',\n  iconName: 'angles-up',\n  icon: [384, 512, [\"angle-double-up\"], \"f102\", \"M214.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 109.3 329.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160zm160 352l-160-160c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 301.3 329.4 438.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3z\"]\n};\nvar faAngleDoubleUp = faAnglesUp;\nvar faBucket = {\n  prefix: 'fas',\n  iconName: 'bucket',\n  icon: [448, 512, [], \"e4cf\", \"M443.7 208c2.7 4.7 4.3 10.2 4.3 16 0 17.7-14.3 32-32 32l-5.1 0-22.4 213c-2.6 24.4-23.2 43-47.8 43l-233.6 0c-24.6 0-45.2-18.5-47.8-43L37.1 256 32 256c-17.7 0-32-14.3-32-32 0-5.8 1.6-11.3 4.3-16l439.4 0zM224-16c79.5 0 144 64.5 144 144l0 32-48 0 0-32c0-53-43-96-96-96s-96 43-96 96l0 32-48 0 0-32C80 48.5 144.5-16 224-16z\"]\n};\nvar faLessThanEqual = {\n  prefix: 'fas',\n  iconName: 'less-than-equal',\n  icon: [448, 512, [], \"f537\", \"M426.1 94.4c16.8-5.6 25.8-23.7 20.2-40.5s-23.7-25.8-40.5-20.2l-384 128C8.8 166 0 178.2 0 192s8.8 26 21.9 30.4l384 128c16.8 5.6 34.9-3.5 40.5-20.2s-3.5-34.9-20.2-40.5L133.2 192 426.1 94.4zM32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 416z\"]\n};\nvar faFolderClosed = {\n  prefix: 'fas',\n  iconName: 'folder-closed',\n  icon: [512, 512, [], \"e185\", \"M448 448L64 448c-35.3 0-64-28.7-64-64l0-176 512 0 0 176c0 35.3-28.7 64-64 64zm64-288L0 160 0 96C0 60.7 28.7 32 64 32l138.7 0c13.8 0 27.3 4.5 38.4 12.8l38.4 28.8c5.5 4.2 12.3 6.4 19.2 6.4L448 80c35.3 0 64 28.7 64 64l0 16z\"]\n};\nvar faPersonThroughWindow = {\n  prefix: 'fas',\n  iconName: 'person-through-window',\n  icon: [640, 512, [], \"e5a9\", \"M64 64l224 0 0 9.8c0 39-23.7 74-59.9 88.4-60.5 24.2-100.1 82.7-100.1 147.9l0 73.8-64 0 0-320zm288 0l224 0 0 320-67.7 0-3.7-4.5-75.2-90.2c-9.1-10.9-22.6-17.3-36.9-17.3l-71.1 0-41-63.1c-.3-.5-.6-1-1-1.4 44.7-29 72.5-79 72.5-133.6l0-9.8zm73 320l-26.6 0 42.7 64 150.9 0c26.5 0 48-21.5 48-48l0-352c0-26.5-21.5-48-48-48L48 0C21.5 0 0 21.5 0 48L0 400c0 26.5 21.5 48 48 48l260.2 0 33.2 49.8c9.8 14.7 29.7 18.7 44.4 8.9s18.7-29.7 8.9-44.4l-84.2-126.2 74.6 0 40 48zm-159.5 0l-73.5 0 0-73.8c0-10.2 1.6-20.1 4.7-29.5L265.5 384zM192 128a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"]\n};\nvar faSchoolLock = {\n  prefix: 'fas',\n  iconName: 'school-lock',\n  icon: [640, 512, [], \"e56f\", \"M0 192c0-35.3 28.7-64 64-64l64 0 127.9-115.1c18.3-16.4 46-16.4 64.2 0L448 128 512 128c33 0 60.2 25 63.6 57.2-14.7-5.9-30.8-9.2-47.6-9.2-70.7 0-128 57.3-128 128l0 24.4c-19.6 17.6-32 43.1-32 71.5l0 96c0 5.5 .5 10.9 1.3 16.1L64 512c-35.3 0-64-28.7-64-64L0 192zM332.3 341.5c-6-3.5-12.9-5.5-20.3-5.5l-48 0c-22.1 0-40 17.9-40 40l0 88 96 0 0-64.1c0-20.8 4.4-40.5 12.3-58.4zM112 384c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0zm16-144l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16zm224-48a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zM560 352l0-47.9c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 47.9 64 0zm-112 2.7l0-50.6c0-44.2 35.8-80 80-80s80 35.8 80 80l0 50.6c18.6 6.6 32 24.4 32 45.3l0 96c0 26.5-21.5 48-48 48l-128 0c-26.5 0-48-21.5-48-48l0-96c0-20.9 13.4-38.7 32-45.3z\"]\n};\nvar faPersonBurst = {\n  prefix: 'fas',\n  iconName: 'person-burst',\n  icon: [640, 512, [], \"e53b\", \"M204 40.1c-13.3 0-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24s24 10.7 24 24l0 48c0 13.3-10.7 24-24 24zM4 144.1c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24zM96.5 285.5c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l33.9-33.9c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L96.5 285.5zM62.6 2.7c9.4-9.4 24.6-9.4 33.9 0l33.9 33.9c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L62.6 36.6c-9.4-9.4-9.4-24.6 0-33.9zM352.4-32a56 56 0 1 1 0 112 56 56 0 1 1 0-112zM478.7 299.1l-46.3-62.4 0 275.3c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-160c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 160c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-275.3-46.3 62.4c-10.5 14.2-30.6 17.2-44.8 6.6s-17.2-30.6-6.6-44.8l70.5-95c25.2-33.9 65-53.9 107.2-53.9s82 20 107.2 53.9l70.5 95c10.5 14.2 7.6 34.2-6.6 44.8s-34.2 7.6-44.8-6.6z\"]\n};\nvar faLeftLong = {\n  prefix: 'fas',\n  iconName: 'left-long',\n  icon: [576, 512, [\"long-arrow-alt-left\"], \"f30a\", \"M9.4 278.6c-12.5-12.5-12.5-32.8 0-45.3l128-128c9.2-9.2 22.9-11.9 34.9-6.9S192 115.1 192 128l0 64 336 0c26.5 0 48 21.5 48 48l0 32c0 26.5-21.5 48-48 48l-336 0 0 64c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9l-128-128z\"]\n};\nvar faLongArrowAltLeft = faLeftLong;\nvar faLocationCrosshairs = {\n  prefix: 'fas',\n  iconName: 'location-crosshairs',\n  icon: [576, 512, [\"location\"], \"f601\", \"M288-16c17.7 0 32 14.3 32 32l0 18.3c98.1 14 175.7 91.6 189.7 189.7l18.3 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-18.3 0c-14 98.1-91.6 175.7-189.7 189.7l0 18.3c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-18.3C157.9 463.7 80.3 386.1 66.3 288L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l18.3 0C80.3 125.9 157.9 48.3 256 34.3L256 16c0-17.7 14.3-32 32-32zM128 256a160 160 0 1 0 320 0 160 160 0 1 0 -320 0zm160-96a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"]\n};\nvar faLocation = faLocationCrosshairs;\nvar faPersonDotsFromLine = {\n  prefix: 'fas',\n  iconName: 'person-dots-from-line',\n  icon: [512, 512, [\"diagnoses\"], \"f470\", \"M184 72a72 72 0 1 1 144 0 72 72 0 1 1 -144 0zM160 299.3c-19.9 22.6-32 52.2-32 84.7l0 32-64 0 0-32c0-106 86-192 192-192s192 86 192 192l0 32-64 0 0-32c0-32.5-12.1-62.1-32-84.7l0 116.7-192 0 0-116.7zM232 384a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm88-104a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM24 464l464 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 512c-13.3 0-24-10.7-24-24s10.7-24 24-24zM64 184a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm424 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nvar faDiagnoses = faPersonDotsFromLine;\nvar faGaugeSimpleHigh = {\n  prefix: 'fas',\n  iconName: 'gauge-simple-high',\n  icon: [512, 512, [61668, \"tachometer\", \"tachometer-fast\"], \"f62a\", \"M0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zm320 96c0-16.2-6-31.1-16-42.3l69.5-138.9c5.9-11.9 1.1-26.3-10.7-32.2s-26.3-1.1-32.2 10.7L261.1 288.2c-1.7-.1-3.4-.2-5.1-.2-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64z\"]\n};\nvar faTachometer = faGaugeSimpleHigh;\nvar faTachometerFast = faGaugeSimpleHigh;\nvar faAnglesLeft = {\n  prefix: 'fas',\n  iconName: 'angles-left',\n  icon: [448, 512, [171, \"angle-double-left\"], \"f100\", \"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256 214.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160zm352-160l-160 160c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L269.3 256 406.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0z\"]\n};\nvar faAngleDoubleLeft = faAnglesLeft;\nvar faUpDown = {\n  prefix: 'fas',\n  iconName: 'up-down',\n  icon: [512, 512, [8597, 11021, \"arrows-alt-v\"], \"f338\", \"M406.6 502.6l96-96c9.2-9.2 11.9-22.9 6.9-34.9S492.9 352 480 352l-64 0 0-320c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 320-64 0c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l96 96c12.5 12.5 32.8 12.5 45.3 0zM150.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-9.2 9.2-11.9 22.9-6.9 34.9S19.1 160 32 160l64 0 0 320c0 17.7 14.3 32 32 32s32-14.3 32-32l0-320 64 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-96-96z\"]\n};\nvar faArrowsAltV = faUpDown;\nvar faBatteryEmpty = {\n  prefix: 'fas',\n  iconName: 'battery-empty',\n  icon: [640, 512, [\"battery-0\"], \"f244\", \"M112 64c-44.2 0-80 35.8-80 80l0 224c0 44.2 35.8 80 80 80l416 0c44.2 0 80-35.8 80-80l0-48c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80L112 64zM96 144c0-8.8 7.2-16 16-16l416 0c8.8 0 16 7.2 16 16l0 224c0 8.8-7.2 16-16 16l-416 0c-8.8 0-16-7.2-16-16l0-224z\"]\n};\nvar faBattery0 = faBatteryEmpty;\nvar faKeyboard = {\n  prefix: 'fas',\n  iconName: 'keyboard',\n  icon: [576, 512, [9000], \"f11c\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zm16 64l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM176 128l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM160 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm16 80l224 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-224 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80-176c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm16 80l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80-80c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm16 80l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80-80c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm16 80l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16z\"]\n};\nvar faCookie = {\n  prefix: 'fas',\n  iconName: 'cookie',\n  icon: [512, 512, [127850], \"f563\", \"M247.2 17c-22.1-3.1-44.6 .9-64.4 11.4l-74 39.5C89.1 78.4 73.2 94.9 63.4 115L26.7 190.6c-9.8 20.1-13 42.9-9.1 64.9l14.5 82.8c3.9 22.1 14.6 42.3 30.7 57.9l60.3 58.4c16.1 15.6 36.6 25.6 58.7 28.7l83 11.7c22.1 3.1 44.6-.9 64.4-11.4l74-39.5c19.7-10.5 35.6-27 45.4-47.2l36.7-75.5c9.8-20.1 13-42.9 9.1-64.9l-14.6-82.8c-3.9-22.1-14.6-42.3-30.7-57.9L388.9 57.5c-16.1-15.6-36.6-25.6-58.7-28.7L247.2 17zM208 144a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM144 336a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm224-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faStopwatch = {\n  prefix: 'fas',\n  iconName: 'stopwatch',\n  icon: [448, 512, [9201], \"f2f2\", \"M168.5 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l32 0 0 25.3c-108 11.9-192 103.5-192 214.7 0 119.3 96.7 216 216 216s216-96.7 216-216c0-39.8-10.8-77.1-29.6-109.2l28.2-28.2c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-23.4 23.4c-32.9-30.2-75.2-50.3-122-55.5l0-25.3 32 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-112 0zm80 184l0 104c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-104c0-13.3 10.7-24 24-24s24 10.7 24 24z\"]\n};\nvar faEject = {\n  prefix: 'fas',\n  iconName: 'eject',\n  icon: [448, 512, [9167], \"f052\", \"M224 32c13.5 0 26.3 5.6 35.4 15.6l176 192c12.9 14 16.2 34.3 8.6 51.8S419 320 400 320L48 320c-19 0-36.3-11.2-43.9-28.7s-4.3-37.7 8.6-51.8l176-192C197.7 37.6 210.5 32 224 32zM0 432c0-26.5 21.5-48 48-48l352 0c26.5 0 48 21.5 48 48s-21.5 48-48 48L48 480c-26.5 0-48-21.5-48-48z\"]\n};\nvar faSatelliteDish = {\n  prefix: 'fas',\n  iconName: 'satellite-dish',\n  icon: [512, 512, [128225], \"f7c0\", \"M232 0c154.6 0 280 125.4 280 280 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-128.1-103.9-232-232-232-13.3 0-24-10.7-24-24S218.7 0 232 0zM208 120c0-13.3 10.7-24 24-24 101.6 0 184 82.4 184 184 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-75.1-60.9-136-136-136-13.3 0-24-10.7-24-24zM26.4 142.7c8.8-17.9 32.4-19.9 46.5-5.8l128.5 128.5 32-32c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-32 32 128.5 128.5c14.1 14.1 12 37.6-5.8 46.5-34.2 16.9-72.6 26.4-113.3 26.4-141.4 0-256-114.6-256-256 0-40.7 9.5-79.2 26.4-113.3z\"]\n};\nvar faFaceRollingEyes = {\n  prefix: 'fas',\n  iconName: 'face-rolling-eyes',\n  icon: [512, 512, [128580, \"meh-rolling-eyes\"], \"f5a5\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM192 352l128 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-128 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm32-128c0 35.3-28.7 64-64 64s-64-28.7-64-64c0-26 15.5-48.4 37.8-58.4-3.7 5.2-5.8 11.6-5.8 18.4 0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.9-2.2-13.2-5.8-18.4 22.3 10 37.8 32.4 37.8 58.4zm128 64c-35.3 0-64-28.7-64-64 0-26 15.5-48.4 37.8-58.4-3.7 5.2-5.8 11.6-5.8 18.4 0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.9-2.2-13.2-5.8-18.4 22.3 10 37.8 32.4 37.8 58.4 0 35.3-28.7 64-64 64z\"]\n};\nvar faMehRollingEyes = faFaceRollingEyes;\nvar faListCheck = {\n  prefix: 'fas',\n  iconName: 'list-check',\n  icon: [512, 512, [\"tasks\"], \"f0ae\", \"M133.8 36.3c10.9 7.6 13.5 22.6 5.9 33.4l-56 80c-4.1 5.8-10.5 9.5-17.6 10.1S52 158 47 153L7 113C-2.3 103.6-2.3 88.4 7 79S31.6 69.7 41 79l19.8 19.8 39.6-56.6c7.6-10.9 22.6-13.5 33.4-5.9zm0 160c10.9 7.6 13.5 22.6 5.9 33.4l-56 80c-4.1 5.8-10.5 9.5-17.6 10.1S52 318 47 313L7 273c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l19.8 19.8 39.6-56.6c7.6-10.9 22.6-13.5 33.4-5.9zM224 96c0-17.7 14.3-32 32-32l224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32zm0 160c0-17.7 14.3-32 32-32l224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32zM160 416c0-17.7 14.3-32 32-32l288 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-288 0c-17.7 0-32-14.3-32-32zM64 376a40 40 0 1 1 0 80 40 40 0 1 1 0-80z\"]\n};\nvar faTasks = faListCheck;\nvar faSackXmark = {\n  prefix: 'fas',\n  iconName: 'sack-xmark',\n  icon: [512, 512, [], \"e56a\", \"M328 112l-144 0-37.3-74.5c-1.8-3.6-2.7-7.6-2.7-11.6 0-14.3 11.6-25.9 25.9-25.9L342.1 0c14.3 0 25.9 11.6 25.9 25.9 0 4-.9 8-2.7 11.6L328 112zM169.6 160l172.8 0 48.7 40.6C457.6 256 496 338 496 424.5 496 472.8 456.8 512 408.5 512l-305.1 0C55.2 512 16 472.8 16 424.5 16 338 54.4 256 120.9 200.6L169.6 160zM323.9 284.1c-9.4-9.4-24.6-9.4-33.9 0l-33.9 33.9-33.9-33.9c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l33.9 33.9-33.9 33.9c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l33.9-33.9 33.9 33.9c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-33.9-33.9 33.9-33.9c9.4-9.4 9.4-24.6 0-33.9z\"]\n};\nvar faHashtag = {\n  prefix: 'fas',\n  iconName: 'hashtag',\n  icon: [512, 512, [62098], \"23\", \"M214.7 .7c17.3 3.7 28.3 20.7 24.6 38l-19.1 89.3 126.5 0 22-102.7C372.4 8 389.4-3 406.7 .7s28.3 20.7 24.6 38L412.2 128 480 128c17.7 0 32 14.3 32 32s-14.3 32-32 32l-81.6 0-27.4 128 67.8 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-81.6 0-22 102.7c-3.7 17.3-20.7 28.3-38 24.6s-28.3-20.7-24.6-38l19.1-89.3-126.5 0-22 102.7c-3.7 17.3-20.7 28.3-38 24.6s-28.3-20.7-24.6-38L99.8 384 32 384c-17.7 0-32-14.3-32-32s14.3-32 32-32l81.6 0 27.4-128-67.8 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l81.6 0 22-102.7C180.4 8 197.4-3 214.7 .7zM206.4 192l-27.4 128 126.5 0 27.4-128-126.5 0z\"]\n};\nvar faTrain = {\n  prefix: 'fas',\n  iconName: 'train',\n  icon: [384, 512, [128646], \"f238\", \"M0 96C0 43 43 0 96 0L288 0c53 0 96 43 96 96l0 256c0 40.1-24.6 74.5-59.5 88.8l53.9 63.7c8.6 10.1 7.3 25.3-2.8 33.8s-25.3 7.3-33.8-2.8l-74-87.5-151.3 0-74 87.5c-8.6 10.1-23.7 11.4-33.8 2.8s-11.4-23.7-2.8-33.8l53.9-63.7C24.6 426.5 0 392.1 0 352L0 96zm64 32l0 96c0 17.7 14.3 32 32 32l192 0c17.7 0 32-14.3 32-32l0-96c0-17.7-14.3-32-32-32L96 96c-17.7 0-32 14.3-32 32zM192 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nvar faGamepad = {\n  prefix: 'fas',\n  iconName: 'gamepad',\n  icon: [640, 512, [], \"f11b\", \"M448 64c106 0 192 86 192 192S554 448 448 448l-256 0C86 448 0 362 0 256S86 64 192 64l256 0zM192 176c-13.3 0-24 10.7-24 24l0 32-32 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l32 0 0 32c0 13.3 10.7 24 24 24s24-10.7 24-24l0-32 32 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-32 0 0-32c0-13.3-10.7-24-24-24zm240 96a32 32 0 1 0 0 64 32 32 0 1 0 0-64zm64-96a32 32 0 1 0 0 64 32 32 0 1 0 0-64z\"]\n};\nvar faFileExport = {\n  prefix: 'fas',\n  iconName: 'file-export',\n  icon: [576, 512, [\"arrow-right-from-file\"], \"f56e\", \"M96.5 0c-35.3 0-64 28.7-64 64l0 384c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-96 78.1 0-31 31c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l72-72c9.4-9.4 9.4-24.6 0-33.9l-72-72c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l31 31-78.1 0 0-133.5c0-17-6.7-33.3-18.7-45.3L291.2 18.7C279.2 6.7 263 0 246 0L96.5 0zM358 176l-93.5 0c-13.3 0-24-10.7-24-24L240.5 58.5 358 176zM224.5 328c0-13.3 10.7-24 24-24l104 0 0 48-104 0c-13.3 0-24-10.7-24-24z\"]\n};\nvar faArrowRightFromFile = faFileExport;\nvar faFaceGrimace = {\n  prefix: 'fas',\n  iconName: 'face-grimace',\n  icon: [512, 512, [128556, \"grimace\"], \"f57f\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM400 352c0 25.2-19.4 45.8-44 47.8l0-95.7c24.6 2 44 22.7 44 47.8zM276 304l40 0 0 96-40 0 0-96zm-80 96l0-96 40 0 0 96-40 0zm-40-95.8l0 95.7c-24.6-2-44-22.7-44-47.8s19.4-45.8 44-47.8zM144 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faGrimace = faFaceGrimace;\nvar faTrainSubway = {\n  prefix: 'fas',\n  iconName: 'train-subway',\n  icon: [384, 512, [\"subway\"], \"f239\", \"M0 96C0 43 43 0 96 0L288 0c53 0 96 43 96 96l0 256c0 40.1-24.6 74.5-59.5 88.8l53.9 63.7c8.6 10.1 7.3 25.3-2.8 33.8s-25.3 7.3-33.8-2.8l-74-87.5-151.3 0-74 87.5c-8.6 10.1-23.7 11.4-33.8 2.8s-11.4-23.7-2.8-33.8l53.9-63.7C24.6 426.5 0 392.1 0 352L0 96zm64 32l0 96c0 17.7 14.3 32 32 32l72 0 0-160-72 0c-17.7 0-32 14.3-32 32zM216 256l72 0c17.7 0 32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-72 0 0 160zM96 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm224-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nvar faSubway = faTrainSubway;\nvar faCircleDot = {\n  prefix: 'fas',\n  iconName: 'circle-dot',\n  icon: [512, 512, [128280, \"dot-circle\"], \"f192\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zm0-352a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"]\n};\nvar faDotCircle = faCircleDot;\nvar faObjectGroup = {\n  prefix: 'fas',\n  iconName: 'object-group',\n  icon: [576, 512, [], \"f247\", \"M32 119.4C12.9 108.4 0 87.7 0 64 0 28.7 28.7 0 64 0 87.7 0 108.4 12.9 119.4 32l337.1 0c11.1-19.1 31.7-32 55.4-32 35.3 0 64 28.7 64 64 0 23.7-12.9 44.4-32 55.4l0 273.1c19.1 11.1 32 31.7 32 55.4 0 35.3-28.7 64-64 64-23.7 0-44.4-12.9-55.4-32l-337.1 0c-11.1 19.1-31.7 32-55.4 32-35.3 0-64-28.7-64-64 0-23.7 12.9-44.4 32-55.4l0-273.1zm448 0c-9.7-5.6-17.8-13.7-23.4-23.4L119.4 96c-5.6 9.7-13.7 17.8-23.4 23.4l0 273.1c9.7 5.6 17.8 13.7 23.4 23.4l337.1 0c5.6-9.7 13.7-17.8 23.4-23.4l0-273.1zM144 176c0-17.7 14.3-32 32-32l112 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-112 0c-17.7 0-32-14.3-32-32l0-64zM256 320l32 0c44.2 0 80-35.8 80-80l32 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-112 0c-17.7 0-32-14.3-32-32l0-16z\"]\n};\nvar faShip = {\n  prefix: 'fas',\n  iconName: 'ship',\n  icon: [640, 512, [128674], \"f21a\", \"M272 0c-26.5 0-48 21.5-48 48l0 16-16 0c-44.2 0-80 35.8-80 80l0 108.8-21.6 8.6c-14.8 5.9-22.5 22.4-17.4 37.5 10.4 31.3 26.8 59.3 47.7 83.1 20.1-9.2 41.7-13.9 63.3-14 33.1-.2 66.3 10.2 94.4 31.4l1.6 1.2 0-215-104 41.6 0-83.2c0-8.8 7.2-16 16-16l224 0c8.8 0 16 7.2 16 16l0 83.2-104-41.6 0 215 1.6-1.2c27.5-20.7 59.9-31.2 92.4-31.4 22.3-.1 44.6 4.5 65.3 14 20.9-23.7 37.3-51.8 47.7-83.1 5-15.2-2.6-31.6-17.4-37.5L512 252.8 512 144c0-44.2-35.8-80-80-80l-16 0 0-16c0-26.5-21.5-48-48-48L272 0zM403.4 476.1c21.3-16.1 49.9-16.1 71.2 0 19 14.4 41.9 28.2 67.2 33.3 26.5 5.4 54.3 .8 80.7-19.1 10.6-8 12.7-23 4.7-33.6s-23-12.7-33.6-4.7c-14.9 11.2-28.6 13.1-42.3 10.3-14.9-3-30.9-11.9-47.8-24.6-38.4-29-90.5-29-129 0-24 18.1-40.7 26.3-54.5 26.3s-30.5-8.2-54.5-26.3c-38.4-29-90.5-29-129 0-21.6 16.3-41.3 25.8-58.9 25.7-9.6-.1-19.9-3-31.2-11.5-10.6-8-25.6-5.9-33.6 4.7S7 482.3 17.6 490.3c19.1 14.4 39.4 21 59.8 21.1 33.9 .2 64.3-17.4 88.1-35.3 21.3-16.1 49.9-16.1 71.2 0 24.2 18.3 52.3 35.9 83.4 35.9s59.1-17.7 83.4-35.9z\"]\n};\nvar faC = {\n  prefix: 'fas',\n  iconName: 'c',\n  icon: [384, 512, [99], \"43\", \"M329.1 142.9c-62.5-62.5-155.8-62.5-218.3 0s-62.5 163.8 0 226.3 155.8 62.5 218.3 0c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3c-87.5 87.5-221.3 87.5-308.8 0s-87.5-229.3 0-316.8 221.3-87.5 308.8 0c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0z\"]\n};\nvar faSquarePhone = {\n  prefix: 'fas',\n  iconName: 'square-phone',\n  icon: [448, 512, [\"phone-square\"], \"f098\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm88 96.7c9.8-2.7 20.1 2.4 24 11.8l20.3 48.7c3.4 8.3 1.1 17.8-5.9 23.5l-22.1 18c16.2 35.8 44.5 65 79.6 82.4l19.3-23.6c5.7-6.9 15.2-9.3 23.5-5.9l48.7 20.3c9.4 3.9 14.4 14.2 11.8 24l-.8 2.8c-8.8 32.3-40.1 59.9-78.2 51.8-87.5-18.5-156.3-87.4-174.9-174.9-8.1-38.1 19.5-69.4 51.8-78.2l2.8-.8z\"]\n};\nvar faPhoneSquare = faSquarePhone;\nvar faRulerCombined = {\n  prefix: 'fas',\n  iconName: 'ruler-combined',\n  icon: [448, 512, [], \"f546\", \"M1 441.7C5.5 463.5 24.8 480 48 480l352 0c26.5 0 48-21.5 48-48l0-96c0-26.5-21.5-48-48-48l-48 0 0 72c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-72-64 0 0 72c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-72-72 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l72 0 0-64-72 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l72 0 0-48c0-26.5-21.5-48-48-48L48 32C21.5 32 0 53.5 0 80L0 432c0 3.3 .3 6.6 1 9.7z\"]\n};\nvar faArrowsRotate = {\n  prefix: 'fas',\n  iconName: 'arrows-rotate',\n  icon: [512, 512, [128472, \"refresh\", \"sync\"], \"f021\", \"M65.9 228.5c13.3-93 93.4-164.5 190.1-164.5 53 0 101 21.5 135.8 56.2 .2 .2 .4 .4 .6 .6l7.6 7.2-47.9 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 53.4-11.3-10.7C390.5 28.6 326.5 0 256 0 127 0 20.3 95.4 2.6 219.5 .1 237 12.2 253.2 29.7 255.7s33.7-9.7 36.2-27.1zm443.5 64c2.5-17.5-9.7-33.7-27.1-36.2s-33.7 9.7-36.2 27.1c-13.3 93-93.4 164.5-190.1 164.5-53 0-101-21.5-135.8-56.2-.2-.2-.4-.4-.6-.6l-7.6-7.2 47.9 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 320c-8.5 0-16.7 3.4-22.7 9.5S-.1 343.7 0 352.3l1 127c.1 17.7 14.6 31.9 32.3 31.7S65.2 496.4 65 478.7l-.4-51.5 10.7 10.1c46.3 46.1 110.2 74.7 180.7 74.7 129 0 235.7-95.4 253.4-219.5z\"]\n};\nvar faRefresh = faArrowsRotate;\nvar faSync = faArrowsRotate;\nvar faPersonDress = {\n  prefix: 'fas',\n  iconName: 'person-dress',\n  icon: [384, 512, [\"female\"], \"f182\", \"M136 24a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zM112 384l-25.8 0c-10.9 0-18.6-10.7-15.2-21.1l43-129-48.3 65.1c-10.5 14.2-30.6 17.2-44.8 6.6s-17.2-30.6-6.6-44.8l70.5-95C110 132 149.7 112 192 112s82 20 107.2 53.9l70.5 95c10.5 14.2 7.6 34.2-6.6 44.8s-34.2 7.6-44.8-6.6L270 234 313 362.9c3.5 10.4-4.3 21.1-15.2 21.1l-25.8 0 0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-32 0 0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128z\"]\n};\nvar faFemale = faPersonDress;\nvar faBookOpen = {\n  prefix: 'fas',\n  iconName: 'book-open',\n  icon: [512, 512, [128214, 128366], \"f518\", \"M256 141.3l0 309.3 .5-.2C311.1 427.7 369.7 416 428.8 416l19.2 0 0-320-19.2 0c-42.2 0-84.1 8.4-123.1 24.6-16.8 7-33.4 13.9-49.7 20.7zM230.9 61.5L256 72 281.1 61.5C327.9 42 378.1 32 428.8 32L464 32c26.5 0 48 21.5 48 48l0 352c0 26.5-21.5 48-48 48l-35.2 0c-50.7 0-100.9 10-147.7 29.5l-12.8 5.3c-7.9 3.3-16.7 3.3-24.6 0l-12.8-5.3C184.1 490 133.9 480 83.2 480L48 480c-26.5 0-48-21.5-48-48L0 80C0 53.5 21.5 32 48 32l35.2 0c50.7 0 100.9 10 147.7 29.5z\"]\n};\nvar faFolderTree = {\n  prefix: 'fas',\n  iconName: 'folder-tree',\n  icon: [576, 512, [], \"f802\", \"M48 24C48 10.7 37.3 0 24 0S0 10.7 0 24L0 392c0 30.9 25.1 56 56 56l184 0 0-48-184 0c-4.4 0-8-3.6-8-8l0-232 192 0 0-48-192 0 0-88zM336 224l192 0c26.5 0 48-21.5 48-48l0-96c0-26.5-21.5-48-48-48l-82.7 0c-8.5 0-16.6-3.4-22.6-9.4l-8.6-8.6c-9-9-21.2-14.1-33.9-14.1L336 0c-26.5 0-48 21.5-48 48l0 128c0 26.5 21.5 48 48 48zm0 288l192 0c26.5 0 48-21.5 48-48l0-96c0-26.5-21.5-48-48-48l-82.7 0c-8.5 0-16.6-3.4-22.6-9.4l-8.6-8.6c-9-9-21.2-14.1-33.9-14.1L336 288c-26.5 0-48 21.5-48 48l0 128c0 26.5 21.5 48 48 48z\"]\n};\nvar faVirgo = {\n  prefix: 'fas',\n  iconName: 'virgo',\n  icon: [640, 512, [], \"e850\", \"M368 32c61.9 0 112 50.1 112 112l0 26.8c14.5-6.9 30.8-10.8 48-10.8 61.9 0 112 50.1 112 112S589.9 384 528 384l-48 0 0 32c0 16.6 12.6 30.2 28.7 31.8l6.6 .3c16.1 1.6 28.7 15.3 28.7 31.8 0 17.7-14.3 32-32 32-53 0-96-43-96-96l0-32-16 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-176c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 304c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-304c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 304c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-320c0-16.6-12.6-30.2-28.7-31.8l-6.6-.3C44.6 94.2 32 80.6 32 64 32 46.3 46.3 32 64 32 91 32 115.3 43.1 132.7 61 152.6 43 179 32 208 32 239.3 32 267.7 44.9 288 65.7 308.3 44.9 336.6 32 368 32zM528 224c-26.5 0-48 21.5-48 48l0 48 48 0c26.5 0 48-21.5 48-48s-21.5-48-48-48z\"]\n};\nvar faBoxArchive = {\n  prefix: 'fas',\n  iconName: 'box-archive',\n  icon: [512, 512, [\"archive\"], \"f187\", \"M0 64C0 46.3 14.3 32 32 32l448 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96L0 64zM32 176l448 0 0 240c0 35.3-28.7 64-64 64L96 480c-35.3 0-64-28.7-64-64l0-240zm152 64c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0z\"]\n};\nvar faArchive = faBoxArchive;\nvar faTentArrowDownToLine = {\n  prefix: 'fas',\n  iconName: 'tent-arrow-down-to-line',\n  icon: [576, 512, [], \"e57e\", \"M185 121c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-31 31 0-102.1C120 2.7 109.3-8 96-8S72 2.7 72 16l0 102.1-31-31C31.6 77.7 16.4 77.7 7 87S-2.3 111.6 7 121l72 72c9.4 9.4 24.6 9.4 33.9 0l72-72zM155.8 260.6L132.1 448 32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l512 0c17.7 0 32-14.3 32-32 0-2.8-.4-5.5-1-8L548.2 260.7c-1.2-9.7-6.9-18.4-15.3-23.4L367.4 137.9c-10.2-6.1-22.9-6.1-33.1 .1L170.9 237.3c-8.3 5.1-13.9 13.7-15.1 23.3zM448 448l-97.1 0 0-149.4c0-5.9 4.7-10.6 10.6-10.6 4 0 7.7 2.3 9.5 5.9L448 448z\"]\n};\nvar faQrcode = {\n  prefix: 'fas',\n  iconName: 'qrcode',\n  icon: [448, 512, [], \"f029\", \"M64 160l64 0 0-64-64 0 0 64zM0 80C0 53.5 21.5 32 48 32l96 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-96 0c-26.5 0-48-21.5-48-48L0 80zM64 416l64 0 0-64-64 0 0 64zM0 336c0-26.5 21.5-48 48-48l96 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-96 0c-26.5 0-48-21.5-48-48l0-96zM320 96l0 64 64 0 0-64-64 0zM304 32l96 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-96 0c-26.5 0-48-21.5-48-48l0-96c0-26.5 21.5-48 48-48zM288 352a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm96 32c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm32-96a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm-32 32a32 32 0 1 1 -64 0 32 32 0 1 1 64 0z\"]\n};\nvar faDragon = {\n  prefix: 'fas',\n  iconName: 'dragon',\n  icon: [640, 512, [128009], \"f6d5\", \"M352 124.5l-51.9-13c-6.5-1.6-11.3-7.1-12-13.8s2.8-13.1 8.7-16.1l40.8-20.4-43.3-32.5c-5.5-4.1-7.8-11.3-5.6-17.9S297.1 0 304 0L464 0c30.2 0 58.7 14.2 76.8 38.4l57.6 76.8c6.2 8.3 9.6 18.4 9.6 28.8 0 26.5-21.5 48-48 48l-21.5 0c-17 0-33.3-6.7-45.3-18.7l-13.3-13.3-32 0 0 21.5c0 24.8 12.8 47.9 33.8 61.1l106.6 66.6c32.1 20.1 51.6 55.2 51.6 93.1 0 60.6-49.1 109.8-109.8 109.8L32.3 512c-3.3 0-6.6-.4-9.6-1.4-9.2-2.8-16.7-9.6-20.4-18.6-1.3-3.3-2.2-6.9-2.3-10.7-.2-3.7 .3-7.3 1.3-10.7 2.8-9.2 9.6-16.7 18.6-20.4 3-1.2 6.2-2 9.5-2.2L433.3 412c8.3-.7 14.7-7.7 14.7-16.1 0-4.3-1.7-8.4-4.7-11.4l-44.4-44.4c-30-30-46.9-70.7-46.9-113.1l0-102.5zM512 72.3c0-.1 0-.2 0-.3s0-.2 0-.3l0 .6zm-1.3 7.4L464.3 68.1c-.2 1.3-.3 2.6-.3 3.9 0 13.3 10.7 24 24 24 10.6 0 19.5-6.8 22.7-16.3zM130.9 116.5c16.3-14.5 40.4-16.2 58.5-4.1l130.6 87 0 27.5c0 32.8 8.4 64.8 24 93l-232 0c-6.7 0-12.7-4.2-15-10.4s-.5-13.3 4.6-17.7L171 232.3 18.4 255.8c-7 1.1-13.9-2.6-16.9-9S.1 232.8 5.4 228L130.9 116.5z\"]\n};\nvar faHourglassEnd = {\n  prefix: 'fas',\n  iconName: 'hourglass-end',\n  icon: [384, 512, [8987, \"hourglass-3\"], \"f253\", \"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64l0 11c0 42.4 16.9 83.1 46.9 113.1l67.9 67.9-67.9 67.9C48.9 353.9 32 394.6 32 437l0 11c-17.7 0-32 14.3-32 32s14.3 32 32 32l320 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-11c0-42.4-16.9-83.1-46.9-113.1l-67.9-67.9 67.9-67.9c30-30 46.9-70.7 46.9-113.1l0-11c17.7 0 32-14.3 32-32S369.7 0 352 0L32 0zM96 75l0-11 192 0 0 11c0 25.5-10.1 49.9-28.1 67.9l-67.9 67.9-67.9-67.9C106.1 124.9 96 100.4 96 75z\"]\n};\nvar faHourglass3 = faHourglassEnd;\nvar faGrip = {\n  prefix: 'fas',\n  iconName: 'grip',\n  icon: [512, 512, [58119, \"grid-horizontal\", \"grip-horizontal\"], \"f58d\", \"M88 96c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40l48 0zM280 224l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40zm192 0l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40zm0 192l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40zM280 288c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40l48 0zM88 416l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40z\"]\n};\nvar faGridHorizontal = faGrip;\nvar faGripHorizontal = faGrip;\nvar faBorderTopLeft = {\n  prefix: 'fas',\n  iconName: 'border-top-left',\n  icon: [448, 512, [\"border-style\"], \"f853\", \"M0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-352 352 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 32C28.7 32 0 60.7 0 96L0 448zm128 0c0 17.7 14.3 32 32 32s32-14.3 32-32-14.3-32-32-32-32 14.3-32 32zm128 0c0 17.7 14.3 32 32 32s32-14.3 32-32-14.3-32-32-32-32 14.3-32 32zm160 32c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zM384 192a32 32 0 1 0 64 0 32 32 0 1 0 -64 0zm32 160a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nvar faBorderStyle = faBorderTopLeft;\nvar faListUl = {\n  prefix: 'fas',\n  iconName: 'list-ul',\n  icon: [512, 512, [\"list-dots\"], \"f0ca\", \"M48 144a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM192 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L192 64zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-288 0zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-288 0zM48 464a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM96 256a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"]\n};\nvar faListDots = faListUl;\nvar faPeopleRobbery = {\n  prefix: 'fas',\n  iconName: 'people-robbery',\n  icon: [576, 512, [], \"e536\", \"M488.2 59.1C478.1 99.6 441.7 128 400 128s-78.1-28.4-88.2-68.9L303 24.2C298.8 7.1 281.4-3.3 264.2 1S236.7 22.6 241 39.8l8.7 34.9c11 44 40.2 79.6 78.3 99.6L328 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-305.7c38.1-20 67.3-55.6 78.3-99.6L559 39.8c4.3-17.1-6.1-34.5-23.3-38.8S501.2 7.1 497 24.2l-8.7 34.9zM400 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM80 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8 32c-35.3 0-64 28.7-64 64l0 96 0 .6 0 191.4c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-227.3 13 20.5c5.9 9.2 16.1 14.9 27 14.9l48 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-30.4 0-37.4-58.9C157.6 142 132.1 128 104.7 128L72 128z\"]\n};\nvar faMobileButton = {\n  prefix: 'fas',\n  iconName: 'mobile-button',\n  icon: [384, 512, [], \"f10b\", \"M80 0C44.7 0 16 28.7 16 64l0 384c0 35.3 28.7 64 64 64l224 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L80 0zM192 464c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faArrowDownAZ = {\n  prefix: 'fas',\n  iconName: 'arrow-down-a-z',\n  icon: [512, 512, [\"sort-alpha-asc\", \"sort-alpha-down\"], \"f15d\", \"M230.6 390.6l-80 80c-12.5 12.5-32.8 12.5-45.3 0l-80-80c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L96 370.7 96 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 306.7 25.4-25.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zm182-340.9c50.7 101.3 77.3 154.7 80 160 7.9 15.8 1.5 35-14.3 42.9s-35 1.5-42.9-14.3l-7.2-14.3-88.4 0-7.2 14.3c-7.9 15.8-27.1 22.2-42.9 14.3s-22.2-27.1-14.3-42.9c2.7-5.3 29.3-58.7 80-160 5.4-10.8 16.5-17.7 28.6-17.7s23.2 6.8 28.6 17.7zM384 135.6l-20.2 40.4 40.4 0-20.2-40.4zM288 320c0-17.7 14.3-32 32-32l128 0c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9L397.3 416 448 416c17.7 0 32 14.3 32 32s-14.3 32-32 32l-128 0c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9l73.4-73.4-50.7 0c-17.7 0-32-14.3-32-32z\"]\n};\nvar faSortAlphaAsc = faArrowDownAZ;\nvar faSortAlphaDown = faArrowDownAZ;\nvar faMoneyBill = {\n  prefix: 'fas',\n  iconName: 'money-bill',\n  icon: [512, 512, [], \"f0d6\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zm192 96a96 96 0 1 1 0 192 96 96 0 1 1 0-192zm192 24c0 4.4-3.6 8.1-8 7.5-29-3.6-51.9-26.6-55.5-55.5-.5-4.4 3.1-8 7.5-8l48 0c4.4 0 8 3.6 8 8l0 48zM64 328c0-4.4 3.6-8.1 8-7.5 29 3.6 51.9 26.6 55.5 55.5 .5 4.4-3.1 8-7.5 8l-48 0c-4.4 0-8-3.6-8-8l0-48zm8-136.5c-4.4 .5-8-3.1-8-7.5l0-48c0-4.4 3.6-8 8-8l48 0c4.4 0 8.1 3.6 7.5 8-3.6 29-26.6 51.9-55.5 55.5zm368 129c4.4-.5 8 3.1 8 7.5l0 48c0 4.4-3.6 8-8 8l-48 0c-4.4 0-8.1-3.6-7.5-8 3.6-29 26.6-51.9 55.5-55.5z\"]\n};\nvar faCircleMinus = {\n  prefix: 'fas',\n  iconName: 'circle-minus',\n  icon: [512, 512, [\"minus-circle\"], \"f056\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM168 232l176 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-176 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nvar faMinusCircle = faCircleMinus;\nvar faArrowPointer = {\n  prefix: 'fas',\n  iconName: 'arrow-pointer',\n  icon: [448, 512, [\"mouse-pointer\"], \"f245\", \"M77.3 2.5c8.1-4.1 17.9-3.2 25.1 2.3l320 239.9c8.3 6.2 11.6 17 8.4 26.8s-12.4 16.4-22.8 16.4l-152.3 0 88.9 177.7c7.9 15.8 1.5 35-14.3 42.9s-35 1.5-42.9-14.3l-88.9-177.7-91.3 121.8c-6.2 8.3-17 11.6-26.8 8.4S64 434.3 64 424L64 24c0-9.1 5.1-17.4 13.3-21.5z\"]\n};\nvar faMousePointer = faArrowPointer;\nvar faSquareShareNodes = {\n  prefix: 'fas',\n  iconName: 'square-share-nodes',\n  icon: [448, 512, [\"share-alt-square\"], \"f1e1\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM368 160c0 35.3-28.7 64-64 64-15.4 0-29.5-5.4-40.6-14.5l-85.3 46.5 85.3 46.5c11-9.1 25.2-14.5 40.6-14.5 35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64c0-2.5 .1-4.9 .4-7.3L158.5 300c-11.7 12.3-28.2 20-46.5 20-35.3 0-64-28.7-64-64s28.7-64 64-64c18.3 0 34.8 7.7 46.5 20l81.9-44.7c-.3-2.4-.4-4.9-.4-7.3 0-35.3 28.7-64 64-64s64 28.7 64 64z\"]\n};\nvar faShareAltSquare = faSquareShareNodes;\nvar faTableCellsLarge = {\n  prefix: 'fas',\n  iconName: 'table-cells-large',\n  icon: [448, 512, [\"th-large\"], \"f009\", \"M384 96l-128 0 0 128 128 0 0-128zm64 128l0 192c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 128zM64 288l0 128 128 0 0-128-128 0zm128-64l0-128-128 0 0 128 128 0zm64 64l0 128 128 0 0-128-128 0z\"]\n};\nvar faThLarge = faTableCellsLarge;\nvar faCat = {\n  prefix: 'fas',\n  iconName: 'cat',\n  icon: [576, 512, [128008], \"f6be\", \"M64 96c53 0 96 43 96 96l0 85.8c29.7-44.7 77.8-76.2 133.4-84 25.6 60 85.2 102.1 154.6 102.1 10.9 0 21.6-1.1 32-3.1L480 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-140.8-136 108.8 56 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-144 0c-53 0-96-43-96-96l0-224c0-16.6-12.6-30.2-28.7-31.8l-6.6-.3C44.6 158.2 32 144.6 32 128 32 110.3 46.3 96 64 96zM533.8 3.2C544.2-5.5 560 1.9 560 15.5L560 128c0 61.9-50.1 112-112 112S336 189.9 336 128l0-112.5c0-13.6 15.8-21 26.2-12.3L416 48 480 48 533.8 3.2zM400 108a20 20 0 1 0 0 40 20 20 0 1 0 0-40zm96 0a20 20 0 1 0 0 40 20 20 0 1 0 0-40z\"]\n};\nvar faCalendarWeek = {\n  prefix: 'fas',\n  iconName: 'calendar-week',\n  icon: [448, 512, [], \"f784\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 32 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 128C0 92.7 28.7 64 64 64l32 0 0-32c0-17.7 14.3-32 32-32zm0 256c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l192 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-192 0z\"]\n};\nvar faCodeCompare = {\n  prefix: 'fas',\n  iconName: 'code-compare',\n  icon: [512, 512, [], \"e13a\", \"M198.8 1.8c9-3.7 19.3-1.7 26.2 5.2l56 56c9.4 9.4 9.4 24.6 0 33.9l-56 56c-6.9 6.9-17.2 8.9-26.2 5.2S184 145.7 184 136l0-24-24 0c-17.7 0-32 14.3-32 32l0 214.7c28.3 12.3 48 40.5 48 73.3 0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3L64 144c0-53 43-96 96-96l24 0 0-24c0-9.7 5.8-18.5 14.8-22.2zM392 80a24 24 0 1 0 48 0 24 24 0 1 0 -48 0zm-8 73.3c-28.3-12.3-48-40.5-48-73.3 0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3L448 368c0 53-43 96-96 96l-24 0 0 24c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-56-56c-9.4-9.4-9.4-24.6 0-33.9l56-56c6.9-6.9 17.2-8.9 26.2-5.2S328 366.3 328 376l0 24 24 0c17.7 0 32-14.3 32-32l0-214.7zM72 432a24 24 0 1 0 48 0 24 24 0 1 0 -48 0z\"]\n};\nvar faLeo = {\n  prefix: 'fas',\n  iconName: 'leo',\n  icon: [512, 512, [], \"e84a\", \"M260 0c72.9 0 132 59.1 132 132l0 5.4-.1 1.4-23.8 270c.4 21.7 18.2 39.2 40 39.2 22.1 0 40-17.9 40-40l0-40c0-17.7 14.3-32 32-32s32 14.3 32 32l0 40c0 57.4-46.6 104-104 104S304 465.4 304 408l0-1.4 .1-1.4 23.9-270.6 0-2.6c0-37.6-30.4-68-68-68s-68 30.4-68 68l0 4c0 3.7 .3 7.3 .8 11l29.7 193.4c.9 6.1 1.4 12.2 1.4 18.4l0 9.2c0 61.9-50.1 112-112 112S0 429.9 0 368 50.1 256 112 256c11.7 0 23 1.8 33.7 5.1L129.6 156.7c-1.1-6.8-1.6-13.8-1.6-20.7l0-4C128 59.1 187.1 0 260 0zM112 320a48 48 0 1 0 0 96 48 48 0 1 0 0-96z\"]\n};\nvar faRoadCircleXmark = {\n  prefix: 'fas',\n  iconName: 'road-circle-xmark',\n  icon: [640, 512, [], \"e566\", \"M287.9 32l-76.2 0c-29.4 0-55.1 20.1-62.1 48.6L65.4 420.5C57.9 450.7 80.8 480 112 480l209.4 0c-11.2-24.4-17.4-51.4-17.4-80 0-28.6 6.2-55.7 17.4-80-.5 0-1 0-1.6 0-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 49.2c35.2-40 86.7-65.2 144.2-65.2 9 0 17.8 .6 26.4 1.8l-32-129.2C483.4 52.1 457.8 32 428.3 32l-76.5 0 0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zM496 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7l-36.7 36.7 36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-36.7-36.7-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l36.7-36.7-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l36.7 36.7 36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nvar faPallet = {\n  prefix: 'fas',\n  iconName: 'pallet',\n  icon: [576, 512, [], \"f482\", \"M32 320c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 64-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-64 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 320zm96 64l128 0 0 64-128 0 0-64zm192 0l128 0 0 64-128 0 0-64z\"]\n};\nvar faCakeCandles = {\n  prefix: 'fas',\n  iconName: 'cake-candles',\n  icon: [448, 512, [127874, \"birthday-cake\", \"cake\"], \"f1fd\", \"M86.4-10.5L61.8 31.6C58 38.1 56 45.6 56 53.2L56 56c0 22.1 17.9 40 40 40s40-17.9 40-40l0-2.8c0-7.6-2-15-5.8-21.6L105.6-10.5c-2-3.4-5.7-5.5-9.6-5.5s-7.6 2.1-9.6 5.5zm128 0L189.8 31.6c-3.8 6.5-5.8 14-5.8 21.6l0 2.8c0 22.1 17.9 40 40 40s40-17.9 40-40l0-2.8c0-7.6-2-15-5.8-21.6L233.6-10.5c-2-3.4-5.7-5.5-9.6-5.5s-7.6 2.1-9.6 5.5zM317.8 31.6c-3.8 6.5-5.8 14-5.8 21.6l0 2.8c0 22.1 17.9 40 40 40s40-17.9 40-40l0-2.8c0-7.6-2-15-5.8-21.6L361.6-10.5c-2-3.4-5.7-5.5-9.6-5.5s-7.6 2.1-9.6 5.5L317.8 31.6zM128 160c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 53.5C26.7 226.6 0 262.2 0 304l0 20.8c20.9 1.3 41.6 7.3 60.3 18l7.1 4.1c26.3 15 58.9 13.4 83.6-4.2 43.7-31.2 102.3-31.2 146 0 24.6 17.6 57.3 19.3 83.6 4.2l7.1-4.1c18.7-10.7 39.3-16.7 60.3-18l0-20.8c0-41.8-26.7-77.4-64-90.5l0-53.5c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 48-64 0 0-48c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 48-64 0 0-48zM448 373c-12.7 1.2-25.1 5-36.5 11.5l-7.1 4.1c-42.6 24.3-95.4 21.7-135.3-6.8-27-19.3-63.2-19.3-90.2 0-39.9 28.5-92.7 31.2-135.3 6.8l-7.1-4.1C25.1 378 12.7 374.1 0 373l0 75c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-75z\"]\n};\nvar faBirthdayCake = faCakeCandles;\nvar faCake = faCakeCandles;\nvar faBugSlash = {\n  prefix: 'fas',\n  iconName: 'bug-slash',\n  icon: [576, 512, [], \"e490\", \"M7-24.9c9.4-9.4 24.6-9.4 33.9 0L241.8 176 344 176c14.2 0 27.7 2.8 40 8l108.8-81.6c14.1-10.6 34.2-7.7 44.8 6.4s7.7 34.2-6.4 44.8l-97.8 73.3c5.3 8.9 9.3 18.7 11.8 29.1l98.8 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0 0 32c0 9.5-.8 18.7-2.4 27.8L569 503.1c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L7 9.1C-2.3-.3-2.3-15.5 7-24.9zM398.2 468c-23.2 22.1-53 37.2-86.2 42.2l0-128.4 86.2 86.2zM264 333.8l0 176.4c-51.2-7.7-94.5-39.7-117.7-83.9L83.2 473.6c-14.1 10.6-34.2 7.7-44.8-6.4s-7.7-34.2 6.4-44.8l83.4-62.5c-.1-2.6-.2-5.2-.2-7.9l0-32-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l98.8 0c3.3-13.9 9.3-26.7 17.6-37.8L264 333.8zM355.6 128l-82.4 0-72.3-72.3C216.1 22.8 249.4 0 288 0 341 0 384 43 384 96l0 3.6c0 15.7-12.7 28.4-28.4 28.4z\"]\n};\nvar faTarp = {\n  prefix: 'fas',\n  iconName: 'tarp',\n  icon: [512, 512, [], \"e57b\", \"M448 64c35.3 0 64 28.7 64 64l0 149.5c0 17-6.7 33.3-18.7 45.3L386.7 429.3c-12 12-28.3 18.7-45.3 18.7L64 448c-35.3 0-64-28.7-64-64L0 128C0 92.7 28.7 64 64 64l384 0zm5.5 208L360 272c-13.3 0-24 10.7-24 24l0 93.5 117.5-117.5zM96 192a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nvar faDiagramPredecessor = {\n  prefix: 'fas',\n  iconName: 'diagram-predecessor',\n  icon: [448, 512, [], \"e477\", \"M289.2 137.9c2.5-6 8.3-9.9 14.8-9.9l40 0 0-24c0-13.3-10.7-24-24-24l-98 0c1.3 5.1 2 10.5 2 16l0 64c0 35.3-28.7 64-64 64l-96 0c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l256 0c39.8 0 72 32.2 72 72l0 24 40 0c6.5 0 12.3 3.9 14.8 9.9s1.1 12.9-3.5 17.4l-64 64c-6.2 6.2-16.4 6.2-22.6 0l-64-64c-4.6-4.6-5.9-11.5-3.5-17.4zM384 352l-320 0 0 64 320 0 0-64zm64 64c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l320 0c35.3 0 64 28.7 64 64l0 64z\"]\n};\nvar faFaceFlushed = {\n  prefix: 'fas',\n  iconName: 'face-flushed',\n  icon: [512, 512, [128563, \"flushed\"], \"f579\", \"M0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zM168 392c0 13.3 10.7 24 24 24l128 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-128 0c-13.3 0-24 10.7-24 24zm-8-96a72 72 0 1 0 0-144 72 72 0 1 0 0 144zm264-72a72 72 0 1 0 -144 0 72 72 0 1 0 144 0zm-288 0a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm192 0a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nvar faFlushed = faFaceFlushed;\nvar faDiagramNext = {\n  prefix: 'fas',\n  iconName: 'diagram-next',\n  icon: [448, 512, [], \"e476\", \"M384 224c35.3 0 64-28.7 64-64l0-64c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96l0 64c0 35.3 28.7 64 64 64l128 0 0 64-32 0c-6.5 0-12.3 3.9-14.8 9.9s-1.1 12.9 3.5 17.4l64 64c6.2 6.2 16.4 6.2 22.6 0l64-64c4.6-4.6 5.9-11.5 3.5-17.4S294.5 288 288 288l-32 0 0-64 128 0zM64 288c-35.3 0-64 28.7-64 64l0 64c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-64c0-35.3-28.7-64-64-64l-34 0c5.6 21.7-.5 45.1-16.7 61.3l-64 64c-25 25-65.5 25-90.5 0l-64-64C98.6 333.1 92.4 309.7 98 288l-34 0z\"]\n};\nvar faAnchorCircleXmark = {\n  prefix: 'fas',\n  iconName: 'anchor-circle-xmark',\n  icon: [640, 512, [], \"e4ac\", \"M320.5 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm-32-96c-53 0-96 43-96 96 0 41.8 26.7 77.4 64 90.5l0 257.9c-62.9-14.3-110.2-69.7-111.9-136.5l16.1 14.1c10 8.7 25.1 7.7 33.9-2.3s7.7-25.1-2.3-33.9l-64-56c-9-7.9-22.6-7.9-31.6 0l-64 56c-10 8.7-11 23.9-2.3 33.9s23.9 11 33.9 2.3l16.2-14.2c2.1 113.1 94.4 204.1 208 204.1 16.6 0 32.7-1.9 48.2-5.6-20.3-30.5-32.2-67-32.2-106.4 0-27.3 5.7-53.3 16-76.9l0-136.6c37.3-13.2 64-48.7 64-90.5 0-53-43-96-96-96zm208 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7l-36.7 36.7 36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-36.7-36.7-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l36.7-36.7-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l36.7 36.7 36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nvar faPersonCircleXmark = {\n  prefix: 'fas',\n  iconName: 'person-circle-xmark',\n  icon: [640, 512, [], \"e543\", \"M280 24a56 56 0 1 0 -112 0 56 56 0 1 0 112 0zm24 212.7L341 286.6c12.8-17.5 28.5-32.7 46.3-45l-56.2-75.7C306 132 266.3 112 224 112s-82 20-107.2 53.9l-70.5 95c-10.5 14.2-7.6 34.2 6.6 44.8s34.2 7.6 44.8-6.6L144 236.7 144 512c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-8.8 7.2-16 16-16s16 7.2 16 16l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-275.3zM496 544a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm22.6-144l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-36.7-36.7-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l36.7-36.7-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l36.7 36.7 36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6L518.6 400z\"]\n};\nvar faSpa = {\n  prefix: 'fas',\n  iconName: 'spa',\n  icon: [576, 512, [\"lotus\"], \"f5bb\", \"M169.7 227.5c34.3 18.7 64.5 44.1 88.8 74.5 11.1 13.9 21 28.9 29.4 44.8 8.5-15.9 18.3-30.8 29.4-44.8 24.3-30.5 54.5-55.9 88.8-74.5 41.7-22.7 89.4-35.5 139.7-35.5l9.9 0c11.1 0 20.1 9 20.1 20.1 0 148-119.9 267.9-267.9 267.9l-40.2 0C119.9 480 0 360.1 0 212.1 0 201 9 192 20.1 192l9.9 0c50.4 0 98.1 12.8 139.7 35.5zM303.9 38c16.9 15.9 61.4 63.4 89 142.3-40.1 20.2-75.8 48.2-104.9 82.1-29.2-33.9-64.8-61.8-104.9-82.1 27.6-78.9 72.2-126.4 89-142.3 4.3-4.1 10-6 15.9-6s11.6 2 15.9 6z\"]\n};\nvar faLotus = faSpa;\nvar faAries = {\n  prefix: 'fas',\n  iconName: 'aries',\n  icon: [512, 512, [], \"e846\", \"M401.6 0c61.3 0 110.4 50.3 110.4 111 0 29.4-11.6 57.9-32.6 78.8l-8.8 8.8c-12.5 12.5-32.8 12.5-45.2 0s-12.5-32.8 0-45.2l8.8-8.8c8.8-8.8 13.8-21 13.8-33.6 0-25.9-21.1-47-46.4-47-22.5 0-41.7 16.1-45.7 38.2L287.5 485.6c0 .1-.1 .3-.1 .4-.2 .8-.3 1.6-.5 2.3-.1 .3-.1 .5-.2 .7-.2 .6-.4 1.3-.7 1.9-.2 .5-.4 1-.6 1.5-.1 .3-.3 .6-.4 .9-1.6 3.5-3.8 6.5-6.4 9.2-2 2-4.2 3.7-6.6 5.1-.2 .1-.3 .2-.5 .3-.7 .4-1.4 .7-2.1 1-.3 .1-.6 .3-.9 .4-.5 .2-1 .4-1.5 .6-.6 .2-1.2 .5-1.9 .7-.2 .1-.5 .2-.7 .2-.8 .2-1.6 .4-2.3 .5-.2 0-.3 .1-.4 .1-.2 0-.4 0-.6 .1-.7 .1-1.3 .2-2 .2-.4 0-.8 .1-1.2 .1-.6 0-1.2 .1-1.8 .1-.6 0-1.2 0-1.8-.1-.4 0-.8-.1-1.2-.1-.7-.1-1.4-.1-2-.2-.2 0-.4 0-.6-.1-.2 0-.3-.1-.5-.1-.8-.2-1.6-.3-2.3-.5-.3-.1-.5-.1-.8-.2-.6-.2-1.3-.4-1.9-.7-.5-.2-1-.4-1.5-.6-.3-.1-.6-.3-.9-.4-.7-.3-1.4-.7-2.1-1-.2-.1-.3-.2-.5-.3-2.4-1.4-4.7-3.1-6.6-5.1-2.6-2.6-4.8-5.7-6.4-9.2-.1-.2-.2-.3-.2-.5l-.5-1.1c-.1-.3-.2-.5-.3-.8-.2-.6-.5-1.2-.7-1.9-.1-.2-.2-.5-.2-.7-.2-.8-.4-1.6-.5-2.3 0-.1-.1-.3-.1-.4L156 102.2c-4-22.1-23.2-38.2-45.7-38.2-25.3 0-46.4 21.1-46.4 47 0 12.6 5 24.8 13.8 33.6l8.8 8.8c12.5 12.5 12.5 32.8 0 45.2s-32.8 12.5-45.2 0l-8.8-8.8C11.6 168.9 0 140.3 0 111 0 50.3 49.1 0 110.4 0 163.8 0 209.6 38.3 219 91l37 207 37-207c9.4-52.6 55.2-91 108.7-91z\"]\n};\nvar faBarsProgress = {\n  prefix: 'fas',\n  iconName: 'bars-progress',\n  icon: [448, 512, [\"tasks-alt\"], \"f828\", \"M288 160l96 0 0-64-96 0 0 64zM0 160L0 80C0 53.5 21.5 32 48 32l352 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48L48 224c-26.5 0-48-21.5-48-48l0-16zM160 416l224 0 0-64-224 0 0 64zM0 416l0-80c0-26.5 21.5-48 48-48l352 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48L48 480c-26.5 0-48-21.5-48-48l0-16z\"]\n};\nvar faTasksAlt = faBarsProgress;\nvar faHeartCircleCheck = {\n  prefix: 'fas',\n  iconName: 'heart-circle-check',\n  icon: [576, 512, [], \"e4fd\", \"M241 87.1l15 20.7 15-20.7C296 52.5 336.2 32 378.9 32 452.4 32 512 91.6 512 165.1l0 2.6c0 17.6-3.4 35.6-9.5 53.7-21.8-8.6-45.6-13.4-70.5-13.4-106 0-192 86-192 192 0 28.5 6.2 55.6 17.4 80-.5 0-.9 0-1.4 0-15.5 0-30.8-4.6-43.1-14.1-73-55.7-212.9-186-212.9-298.2l0-2.6C0 91.6 59.6 32 133.1 32 175.8 32 216 52.5 241 87.1zM288 400a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm201.4-60.9c-7.1-5.2-17.2-3.6-22.4 3.5l-53 72.9-26.8-26.8c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c3.3 3.3 7.9 5 12.6 4.6s8.9-2.8 11.7-6.5l64-88c5.2-7.1 3.6-17.2-3.5-22.3z\"]\n};\nvar faMarsStrokeRight = {\n  prefix: 'fas',\n  iconName: 'mars-stroke-right',\n  icon: [640, 512, [9897, \"mars-stroke-h\"], \"f22b\", \"M320.5 256a112 112 0 1 0 -224 0 112 112 0 1 0 224 0zM208.5 80c86.3 0 158.1 62.1 173.1 144.1 1-.1 1.9-.1 2.9-.1l16 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 61.4 0-22.4-28c-11-13.8-8.8-33.9 5-45s33.9-8.8 45 5l64 80c9.3 11.7 9.3 28.3 0 40l-64 80c-11 13.8-31.2 16-45 5s-16-31.2-5-45l22.4-28-61.4 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-16 0c-1 0-1.9 0-2.9-.1-15 82-86.8 144.1-173.1 144.1-97.2 0-176-78.8-176-176s78.8-176 176-176z\"]\n};\nvar faMarsStrokeH = faMarsStrokeRight;\nvar faTowerObservation = {\n  prefix: 'fas',\n  iconName: 'tower-observation',\n  icon: [448, 512, [], \"e586\", \"M209.7 3.4c9-4.5 19.6-4.5 28.6 0l160 80c15.8 7.9 22.2 27.1 14.3 42.9-5.6 11.2-16.9 17.7-28.6 17.7l0 80c0 17.7-14.3 32-32 32l-13 0 32 192 45 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l45 0 32-192-13 0c-17.7 0-32-14.3-32-32l0-80c-11.7 0-23-6.5-28.6-17.7-7.9-15.8-1.5-35 14.3-42.9l160-80zM310.7 448l-86.7-61.9-86.7 61.9 173.4 0zm-153-192l-3.5 21.2 69.9 49.9 69.9-49.9-3.5-21.2-132.7 0zm-12.3 73.9l-10.1 60.6 47.5-33.9-37.4-26.7zm119.9 26.7l47.5 33.9-10.1-60.6-37.4 26.7zM152 128c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0z\"]\n};\nvar faSterlingSign = {\n  prefix: 'fas',\n  iconName: 'sterling-sign',\n  icon: [384, 512, [163, \"gbp\", \"pound-sign\"], \"f154\", \"M91.3 288l-34.8 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l21.4 0C37.3 147.3 105.1 42 207.6 42l8.2 0c33.6 0 66.2 11.3 92.5 32.2l16.1 12.7c13.9 11 16.2 31.1 5.2 45s-31.1 16.2-45 5.2l-16.1-12.7c-15-11.9-33.6-18.4-52.8-18.4l-8.2 0c-57.3 0-94.7 59.9-69.7 111.4 3.6 7.4 6.6 14.9 9.1 22.6l149.5 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-141.2 0c1 35.3-8.7 70.6-28.9 100.9l-18.1 27.1 212.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-272 0c-11.8 0-22.6-6.5-28.2-16.9s-5-23 1.6-32.9l51.2-76.8c13.1-19.6 19.2-42.6 18.2-65.4z\"]\n};\nvar faGbp = faSterlingSign;\nvar faPoundSign = faSterlingSign;\nvar faFaucetDrip = {\n  prefix: 'fas',\n  iconName: 'faucet-drip',\n  icon: [512, 512, [128688], \"e006\", \"M224 32c-17.7 0-32 14.3-32 32L96 64C78.3 64 64 78.3 64 96s14.3 32 32 32l96 0 0 64-18.7 0c-8.5 0-16.6 3.4-22.6 9.4L128 224 32 224c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l100.1 0c20.2 29 53.9 48 91.9 48s71.7-19 91.9-48l36.1 0c17.7 0 32 14.3 32 32s14.3 32 32 32l64 0c17.7 0 32-14.3 32-32 0-88.4-71.6-160-160-160l-32 0-22.6-22.6c-6-6-14.1-9.4-22.6-9.4l-18.7 0 0-64 96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0c0-17.7-14.3-32-32-32zM436.8 455.4l-18.2 42.4c-1.8 4.1-2.7 8.6-2.7 13.1l0 1.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-1.2c0-4.5-.9-8.9-2.7-13.1l-18.2-42.4c-1.9-4.5-6.3-7.4-11.2-7.4s-9.2 2.9-11.2 7.4z\"]\n};\nvar faCircleInfo = {\n  prefix: 'fas',\n  iconName: 'circle-info',\n  icon: [512, 512, [\"info-circle\"], \"f05a\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM224 160a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm-8 64l48 0c13.3 0 24 10.7 24 24l0 88 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l24 0 0-64-24 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nvar faInfoCircle = faCircleInfo;\nvar faFeather = {\n  prefix: 'fas',\n  iconName: 'feather',\n  icon: [512, 512, [129718], \"f52d\", \"M352 0c41 0 80.3 16.3 109.2 45.2l5.5 5.5c29 29 45.3 68.3 45.3 109.2 0 24.1-5.7 47.6-16.2 68.8-1.9 3.7-5.3 6.5-9.3 7.7L374.5 270c-3.9 1.2-6.5 4.7-6.5 8.8 0 5.1 4.1 9.2 9.2 9.2l32.2 0c14.3 0 21.4 17.2 11.3 27.3l-22.4 22.4c-1.9 1.9-4.2 3.2-6.7 4l-81 24.3c-3.9 1.2-6.5 4.7-6.5 8.8 0 5.1 4.1 9.2 9.2 9.2 13.2 0 18.9 15.7 7.8 22.9-41.1 26.6-89.3 41.1-139 41.1l-86 0-48 48c-8.8 8.8-23.2 8.8-32 0s-8.8-23.2 0-32L256 224c8.8-8.8 8.8-23.2 0-32s-23.2-8.8-32 0L79.5 336.5c-5.7 5.7-15.5 1.7-15.5-6.4 0-67.9 27-133 75-181L242.8 45.2C271.7 16.3 311 0 352 0z\"]\n};\nvar faBowlRice = {\n  prefix: 'fas',\n  iconName: 'bowl-rice',\n  icon: [512, 512, [], \"e2eb\", \"M176 40c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24zm24 48l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zM56 160l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zM0 283.4C0 268.3 12.3 256 27.4 256l457.1 0c15.1 0 27.4 12.3 27.4 27.4 0 70.5-44.4 130.7-106.7 154.1L403.5 452c-2 16-15.6 28-31.8 28l-231.5 0c-16.1 0-29.8-12-31.8-28l-1.8-14.4C44.4 414.1 0 353.9 0 283.4zM224 184c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24zm-96 0c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24zM104 88l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm216 96c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24zM296 88l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm120 96c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24zM392 88l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zM296 16l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nvar faStarHalfStroke = {\n  prefix: 'fas',\n  iconName: 'star-half-stroke',\n  icon: [576, 512, [\"star-half-alt\"], \"f5c0\", \"M288.1 353.6c10 0 19.9 2.3 29 7l74.4 37.9-13-82.5c-3.2-20.2 3.5-40.7 17.9-55.2l59-59.1-82.5-13.1c-20.2-3.2-37.7-15.9-47-34.1l-38-74.4 0 273.6zM457.4 489c-7.3 5.3-17 6.1-25 2L288.1 417.6 143.8 491c-8 4.1-17.7 3.3-25-2s-11-14.2-9.6-23.2L134.4 305.9 20 191.4c-6.4-6.4-8.6-15.8-5.8-24.4s10.1-14.9 19.1-16.3l159.9-25.4 73.6-144.2c4.1-8 12.4-13.1 21.4-13.1s17.3 5.1 21.4 13.1L383 125.3 542.9 150.7c8.9 1.4 16.3 7.7 19.1 16.3s.5 18-5.8 24.4L441.7 305.9 467 465.8c1.4 8.9-2.3 17.9-9.6 23.2z\"]\n};\nvar faStarHalfAlt = faStarHalfStroke;\nvar faTemperatureArrowDown = {\n  prefix: 'fas',\n  iconName: 'temperature-arrow-down',\n  icon: [512, 512, [\"temperature-down\"], \"e03f\", \"M64.5 96c0-53 43-96 96-96s96 43 96 96l0 164.7c29.5 26.4 48 64.7 48 107.3 0 79.5-64.5 144-144 144s-144-64.5-144-144c0-42.6 18.5-81 48-107.3L64.5 96zm96 336c35.3 0 64-28.7 64-64 0-26.9-16.5-49.9-40-59.3l0-28.7c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 28.7c-23.5 9.5-40 32.5-40 59.3 0 35.3 28.7 64 64 64zM439.1 310.6c-6 6-14.1 9.4-22.6 9.4s-16.6-3.4-22.6-9.4l-64-64c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l9.4 9.4 0-178.7c0-17.7 14.3-32 32-32s32 14.3 32 32l0 178.7 9.4-9.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-64 64z\"]\n};\nvar faTemperatureDown = faTemperatureArrowDown;\nvar faMaskVentilator = {\n  prefix: 'fas',\n  iconName: 'mask-ventilator',\n  icon: [640, 512, [], \"e524\", \"M152.2 192c-15.4 38.3-24.2 77.2-24.2 108.8 0 13.3 1.5 26.2 4.4 38.7l-17-3.4c-29.9-6-51.4-32.2-51.4-62.8l0-81.3 88.2 0zm32.9-64L64 128c-35.3 0-64 28.7-64 64l0 81.3c0 61 43.1 113.5 102.9 125.5l66.3 13.3c18.7 22.1 42.9 40 70.8 51.8l0-87.8c-10.1-14.2-16-31.3-16-49.7 0-49.5 43-134.4 96-134.4 52.5 0 96 84.9 96 134.4 0 18.4-5.9 35.4-16 49.6l0 87.7c27.6-11.8 51.7-29.6 70.4-51.6l66.7-13.3c59.8-12 102.9-64.5 102.9-125.5l0-81.3c0-35.3-28.7-64-64-64l-121.5 0c-34.8-54.2-82.5-96-134.5-96-52.6 0-100.2 41.8-134.9 96zm302.5 64l88.4 0 0 81.3c0 30.5-21.5 56.8-51.4 62.8l-17 3.4c2.9-12.4 4.5-25.4 4.5-38.7 0-31.6-8.9-70.5-24.4-108.8zM288 320l0 192 64 0 0-192c0-17.7-14.3-32-32-32s-32 14.3-32 32z\"]\n};\nvar faFileVideo = {\n  prefix: 'fas',\n  iconName: 'file-video',\n  icon: [384, 512, [], \"f1c8\", \"M0 64C0 28.7 28.7 0 64 0L213.5 0c17 0 33.3 6.7 45.3 18.7L365.3 125.3c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm208-5.5l0 93.5c0 13.3 10.7 24 24 24L325.5 176 208 58.5zM80 304l0 96c0 17.7 14.3 32 32 32l96 0c17.7 0 32-14.3 32-32l0-24 35 35c3.2 3.2 7.5 5 12 5 9.4 0 17-7.6 17-17l0-94.1c0-9.4-7.6-17-17-17-4.5 0-8.8 1.8-12 5l-35 35 0-24c0-17.7-14.3-32-32-32l-96 0c-17.7 0-32 14.3-32 32z\"]\n};\nvar faArrowTrendDown = {\n  prefix: 'fas',\n  iconName: 'arrow-trend-down',\n  icon: [576, 512, [], \"e097\", \"M384 352c-17.7 0-32 14.3-32 32s14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-160c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 82.7-169.4-169.4c-12.5-12.5-32.8-12.5-45.3 0L192 242.7 54.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0L320 205.3 466.7 352 384 352z\"]\n};\nvar faOilCan = {\n  prefix: 'fas',\n  iconName: 'oil-can',\n  icon: [640, 512, [], \"f613\", \"M320 128c17.7 0 32-14.3 32-32s-14.3-32-32-32L192 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 32-176 0c-26.5 0-48 21.5-48 48l0 64.8c0 19 11.2 36.2 28.5 43.9l67.5 30 0 21.3c0 26.5 21.5 48 48 48l259.1 0c18.4 0 35.8-7.9 48-21.7L633.5 187.7c12.3-13.9-.3-35.4-18.4-31.5L448 192 397.5 166.8c-8.9-4.4-18.7-6.8-28.6-6.8l-80.9 0 0-32 32 0zM96 208l0 86.1-48-21.3 0-64.8 48 0z\"]\n};\nvar faPeopleCarryBox = {\n  prefix: 'fas',\n  iconName: 'people-carry-box',\n  icon: [576, 512, [\"people-carry\"], \"f4ce\", \"M64-32A56 56 0 1 1 64 80 56 56 0 1 1 64-32zM0 171.1c0-32.6 26.5-59.1 59.1-59.1 23.5 0 45.5 11.3 59.1 30.4l48.7 68.2c5.8 8.2 15.1 13.1 25.1 13.4l0-96c0-17.7 14.3-32 32-32l128 0c17.7 0 32 14.3 32 32l0 96c10-.3 19.3-5.2 25.1-13.4l48.7-68.2c13.6-19.1 35.6-30.4 59.1-30.4 32.6 0 59.1 26.5 59.1 59.1L576 272c0 30.2-14.2 58.7-38.4 76.8l-76.8 57.6c-8.1 6-12.8 15.5-12.8 25.6l0 80c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-80c0-30.2 14.2-58.7 38.4-76.8l41.6-31.2 0-80.1-2.8 3.9c-18 25.2-47.1 40.2-78.1 40.2L352 288c-.6 0-1.3 0-1.9-.1-.6 0-1.3 .1-1.9 .1l-120.4 0c-.6 0-1.3 0-1.9-.1-.6 0-1.3 .1-1.9 .1l-31.1 0c-31 0-60.1-15-78.1-40.2l-2.8-3.9 0 80.1 41.6 31.2C177.8 373.3 192 401.8 192 432l0 80c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-80c0-10.1-4.7-19.6-12.8-25.6L38.4 348.8C14.2 330.7 0 302.2 0 272L0 171.1zM0 379.3c3.1 2.7 6.3 5.4 9.6 7.9L64 428 64 512c0 17.7-14.3 32-32 32S0 529.7 0 512L0 379.3zM568 24a56 56 0 1 1 -112 0 56 56 0 1 1 112 0zm8 488c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-84 54.4-40.8c3.3-2.5 6.5-5.1 9.6-7.9L576 512z\"]\n};\nvar faPeopleCarry = faPeopleCarryBox;\nvar faChair = {\n  prefix: 'fas',\n  iconName: 'chair',\n  icon: [448, 512, [129681], \"f6c0\", \"M152 256l0-181.8c-24.5 20.5-40 51.4-40 85.8l0 96 40 0zm48 0l48 0 0-205.4c-7.7-1.7-15.8-2.6-24-2.6s-16.3 .9-24 2.6L200 256zM296 74.2l0 181.8 40 0 0-96c0-34.4-15.5-65.2-40-85.8zM32 256l32 0 0-96C64 71.6 135.6 0 224 0S384 71.6 384 160l0 96 32 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-256 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32z\"]\n};\nvar faWind = {\n  prefix: 'fas',\n  iconName: 'wind',\n  icon: [512, 512, [], \"f72e\", \"M288 32c0 17.7 14.3 32 32 32l40 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L32 112c-17.7 0-32 14.3-32 32s14.3 32 32 32l328 0c48.6 0 88-39.4 88-88S408.6 0 360 0L320 0c-17.7 0-32 14.3-32 32zm64 352c0 17.7 14.3 32 32 32l32 0c53 0 96-43 96-96s-43-96-96-96L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c-17.7 0-32 14.3-32 32zM128 512l40 0c48.6 0 88-39.4 88-88s-39.4-88-88-88L32 336c-17.7 0-32 14.3-32 32s14.3 32 32 32l136 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-40 0c-17.7 0-32 14.3-32 32s14.3 32 32 32z\"]\n};\nvar faLayerGroup = {\n  prefix: 'fas',\n  iconName: 'layer-group',\n  icon: [512, 512, [], \"f5fd\", \"M232.5 5.2c14.9-6.9 32.1-6.9 47 0l218.6 101c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L13.9 149.8C5.4 145.8 0 137.3 0 128s5.4-17.9 13.9-21.8L232.5 5.2zM48.1 218.4l164.3 75.9c27.7 12.8 59.6 12.8 87.3 0l164.3-75.9 34.1 15.8c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L13.9 277.8C5.4 273.8 0 265.3 0 256s5.4-17.9 13.9-21.8l34.1-15.8zM13.9 362.2l34.1-15.8 164.3 75.9c27.7 12.8 59.6 12.8 87.3 0l164.3-75.9 34.1 15.8c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L13.9 405.8C5.4 401.8 0 393.3 0 384s5.4-17.9 13.9-21.8z\"]\n};\nvar faHeadSideMask = {\n  prefix: 'fas',\n  iconName: 'head-side-mask',\n  icon: [512, 512, [], \"e063\", \"M445.9 193c-.1-.4-.2-.9-.2-1.3-15.7-108.4-108.9-191.7-221.7-191.7-85 0-159 47.4-196.9 117.2L283.3 288 456 288 442.9 336 336 336c-8.8 0-16 7.2-16 16s7.2 16 16 16l98.2 0-8.7 32-89.5 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80.6 0c-6.7 19.1-24.8 32-45.3 32L288 464c-17.7 0-32-14.3-32-32l0-104.5-247.5-165C3 182.1 0 202.7 0 224 0 278 19.1 327.5 50.9 366.2 58.9 375.9 64 387.8 64 400.4L64 464c0 26.5 21.5 48 48 48l127.3 0 .7 0 131.3 0c44.9 0 83.8-31.1 93.6-74.9l33.9-150.3c3.3-14.4-.3-29.5-9.7-41L445.9 193zM288 192a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nvar faHands = {\n  prefix: 'fas',\n  iconName: 'hands',\n  icon: [512, 512, [\"sign-language\", \"signing\"], \"f2a7\", \"M512 160l-.1 72.6c0 44.8-17.6 87.1-47.9 118.4-.3-77-40.1-148.4-105.4-189.3l-1.9-1.2c2.5-3.7 2.8-8.6 .4-12.7l-62-107.4c-6.6-11.5-2.7-26.2 8.8-32.8S330 5 336.6 16.5l68 117.8 0 0 0 0 43.3 75 .1-49.3c0-17.7 14.4-32 32-32s32 14.4 32 32zM298.4 124.2c-14.1-8.8-29.8-12.7-45.2-12.1L216.7 48.8c-6.6-11.5-2.7-26.2 8.8-32.8s26.2-2.7 32.8 8.8l67.1 116.2-27-16.9zM211.9 88.5l16.4 28.4c-15.1 5.5-28.6 15.6-38.3 29.7l-19.7-34.2c-6.6-11.5-2.7-26.2 8.8-32.8s26.2-2.7 32.8 8.8zm-46.4 63.7l12.5 21.7c-2 8.6-2.5 17.5-1.7 26.1l-4.3 0 0 0-34.4 0-13.7-23.8c-6.6-11.5-2.7-26.2 8.8-32.8s26.2-2.7 32.8 8.8zM228.9 175c9.4-15 29.1-19.5 44.1-10.2l60.2 37.6C384.7 234.7 416 291.2 416 352l0 8c0 83.9-68.1 152-152 152L88 512c-13.3 0-24-10.7-24-24s10.7-24 24-24l92 0c6.6 0 12-5.4 12-12s-5.4-12-12-12L56 440c-13.3 0-24-10.7-24-24s10.7-24 24-24l124 0c6.6 0 12-5.4 12-12s-5.4-12-12-12L24 368c-13.3 0-24-10.7-24-24s10.7-24 24-24l156 0c6.6 0 12-5.4 12-12s-5.4-12-12-12L56 296c-13.3 0-24-10.7-24-24s10.7-24 24-24l136 0 0 0 0 0 93.2 0-46.2-28.9c-15-9.4-19.5-29.1-10.2-44.1z\"]\n};\nvar faSignLanguage = faHands;\nvar faSigning = faHands;\nvar faTablets = {\n  prefix: 'fas',\n  iconName: 'tablets',\n  icon: [512, 512, [], \"f490\", \"M495.3 76.6c-4.6-8.7-16.3-9.7-23.3-2.7L297.9 248c-7 7-6 18.7 2.7 23.3 20.1 10.7 43 16.7 67.4 16.7 79.5 0 144-64.5 144-144 0-24.3-6-47.3-16.7-67.4zM240.7 211.4c4.6 8.7 16.3 9.7 23.3 2.7L438.1 40c7-7 6-18.7-2.7-23.3-20.1-10.7-43-16.7-67.4-16.7-79.5 0-144 64.5-144 144 0 24.3 6 47.3 16.7 67.4zM144 224C79.2 224 24.4 266.8 6.3 325.6 3.4 335.1 11 344 20.9 344l246.2 0c9.9 0 17.5-8.9 14.6-18.4-.9-3-1.9-5.9-3-8.7-37.4-18.1-68-48-87-84.8-14.9-5.2-30.9-8.1-47.6-8.1zM281.7 410.4c2.9-9.5-4.7-18.4-14.6-18.4L20.9 392C11 392 3.4 400.9 6.3 410.4 24.4 469.2 79.2 512 144 512s119.6-42.8 137.7-101.6z\"]\n};\nvar faWeightHanging = {\n  prefix: 'fas',\n  iconName: 'weight-hanging',\n  icon: [512, 512, [], \"f5cd\", \"M224 96a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm122.5 32c3.5-10 5.5-20.8 5.5-32 0-53-43-96-96-96s-96 43-96 96c0 11.2 1.9 22 5.5 32l-21.8 0c-28.3 0-53.2 18.5-61.3 45.6L2.4 440.2C.8 445.4 0 450.8 0 456.2 0 487 25 512 55.8 512l400.4 0c30.8 0 55.8-25 55.8-55.8 0-5.4-.8-10.8-2.4-16l-80-266.5c-8.1-27.1-33-45.6-61.3-45.6l-21.8 0z\"]\n};\nvar faDice = {\n  prefix: 'fas',\n  iconName: 'dice',\n  icon: [512, 512, [127922], \"f522\", \"M141.4 2.3C103-8 63.5 14.8 53.3 53.2L2.5 242.7C-7.8 281.1 15 320.6 53.4 330.9l189.5 50.8c38.4 10.3 77.9-12.5 88.2-50.9l50.8-189.5c10.3-38.4-12.5-77.9-50.9-88.2L141.4 2.3zm23 205.7a32 32 0 1 1 55.4-32 32 32 0 1 1 -55.4 32zM79.2 220.3a32 32 0 1 1 32 55.4 32 32 0 1 1 -32-55.4zm185 96.4a32 32 0 1 1 -32-55.4 32 32 0 1 1 32 55.4zm9-208.4a32 32 0 1 1 32 55.4 32 32 0 1 1 -32-55.4zm-121 14.4a32 32 0 1 1 -32-55.4 32 32 0 1 1 32 55.4zM418 192L377.4 343.2c-17.2 64-83 102-147 84.9l-38.3-10.3 0 30.2c0 35.3 28.7 64 64 64l192 0c35.3 0 64-28.7 64-64l0-192c0-35.3-28.7-64-64-64L418 192z\"]\n};\nvar faShopSlash = {\n  prefix: 'fas',\n  iconName: 'shop-slash',\n  icon: [576, 512, [\"store-alt-slash\"], \"e070\", \"M41-24.9c-9.4-9.4-24.6-9.4-33.9 0S-2.3-.3 7 9.1l528 528c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-57-57 0-190.3c26.8-1.9 48-24.3 48-51.6 0-8-1.9-16-5.5-23.2L497.7 67.4C486.8 45.7 464.7 32 440.4 32L135.6 32c-10.7 0-21 2.7-30.2 7.6L41-24.9zM321.8 256L448 256 448 382.2 321.8 256zM352 421.8l-64-64 0 10.2c0 8.8-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16l0-112 58.2 0-134.8-134.8-29.9 59.9c-3.6 7.2-5.5 15.1-5.5 23.2 0 27.3 21.2 49.7 48 51.6L64 432c0 26.5 21.5 48 48 48l192 0c26.5 0 48-21.5 48-48l0-10.2z\"]\n};\nvar faStoreAltSlash = faShopSlash;\nvar faSortDown = {\n  prefix: 'fas',\n  iconName: 'sort-down',\n  icon: [384, 512, [\"sort-desc\"], \"f0dd\", \"M32 288c-12.9 0-24.6 7.8-29.6 19.8S.2 333.5 9.4 342.6l160 160c12.5 12.5 32.8 12.5 45.3 0l160-160c9.2-9.2 11.9-22.9 6.9-34.9S364.9 288 352 288L32 288z\"]\n};\nvar faSortDesc = faSortDown;\nvar faPesetaSign = {\n  prefix: 'fas',\n  iconName: 'peseta-sign',\n  icon: [448, 512, [], \"e221\", \"M112 32C94.3 32 80 46.3 80 64l0 104-24 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l24 0 0 232c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 96 0c80.2 0 146.6-59 158.2-136l25.8 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-25.8 0C386.6 91 320.2 32 240 32L112 32zM333 168l-189 0 0-72 96 0c44.7 0 82.3 30.6 93 72zM144 216l189 0c-10.7 41.4-48.2 72-93 72l-96 0 0-72z\"]\n};\nvar faTabletScreenButton = {\n  prefix: 'fas',\n  iconName: 'tablet-screen-button',\n  icon: [448, 512, [\"tablet-alt\"], \"f3fa\", \"M0 64C0 28.7 28.7 0 64 0L384 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zM256 432a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM384 64l-320 0 0 288 320 0 0-288z\"]\n};\nvar faTabletAlt = faTabletScreenButton;\nvar faHandHoldingDollar = {\n  prefix: 'fas',\n  iconName: 'hand-holding-dollar',\n  icon: [576, 512, [\"hand-holding-usd\"], \"f4c0\", \"M288-16c-13.3 0-24 10.7-24 24l0 12-1.8 0c-36.6 0-66.2 29.7-66.2 66.2 0 33.4 24.9 61.6 58 65.7l61 7.6c5.1 .6 9 5 9 10.2 0 5.7-4.6 10.2-10.2 10.2L240 180c-15.5 0-28 12.5-28 28s12.5 28 28 28l24 0 0 12c0 13.3 10.7 24 24 24s24-10.7 24-24l0-12 1.8 0c36.6 0 66.2-29.7 66.2-66.2 0-33.4-24.9-61.6-58-65.7l-61-7.6c-5.1-.6-9-5-9-10.2 0-5.7 4.6-10.2 10.2-10.2L328 76c15.5 0 28-12.5 28-28s-12.5-28-28-28l-16 0 0-12c0-13.3-10.7-24-24-24zM109.3 341.5L66.7 384 32 384c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l320.5 0c29 0 57.3-9.3 80.7-26.5l126.6-93.3c17.8-13.1 21.6-38.1 8.5-55.9s-38.1-21.6-55.9-8.5L392.6 416 280 416c-13.3 0-24-10.7-24-24s10.7-24 24-24l72 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-152.2 0c-33.9 0-66.5 13.5-90.5 37.5z\"]\n};\nvar faHandHoldingUsd = faHandHoldingDollar;\nvar faShield = {\n  prefix: 'fas',\n  iconName: 'shield',\n  icon: [512, 512, [128737, \"shield-blank\"], \"f132\", \"M256 0c4.6 0 9.2 1 13.4 2.9L457.8 82.8c22 9.3 38.4 31 38.3 57.2-.5 99.2-41.3 280.7-213.6 363.2-16.7 8-36.1 8-52.8 0-172.4-82.5-213.1-264-213.6-363.2-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.9 1 251.4 0 256 0z\"]\n};\nvar faShieldBlank = faShield;\nvar faFaceLaugh = {\n  prefix: 'fas',\n  iconName: 'face-laugh',\n  icon: [512, 512, [\"laugh\"], \"f599\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM101.6 314c-3.7-13.7 7.5-26 21.7-26l265.4 0c14.2 0 25.4 12.3 21.7 26-18.5 68-80.6 118-154.4 118S120 382 101.6 314zM144 192a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nvar faLaugh = faFaceLaugh;\nvar faHandsHolding = {\n  prefix: 'fas',\n  iconName: 'hands-holding',\n  icon: [640, 512, [], \"f4c2\", \"M80 104c0-22.1-17.9-40-40-40S0 81.9 0 104L0 325.5c0 25.5 10.1 49.9 28.1 67.9L128 493.3c12 12 28.3 18.7 45.3 18.7l66.7 0c26.5 0 48-21.5 48-48l0-78.9c0-29.7-11.8-58.2-32.8-79.2l-25.3-25.3 0 0c-7.3-7.3-23.1-23.1-47.2-47.2-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3c24.1 24.1 39.9 39.9 47.2 47.2 11 11 9.2 29.2-3.7 37.8-9.7 6.5-22.7 5.2-31-3.1L98.7 309.5c-12-12-18.7-28.3-18.7-45.3L80 104zm480 0l0 160.2c0 17-6.7 33.3-18.7 45.3l-51.1 51.1c-8.3 8.3-21.3 9.6-31 3.1-12.9-8.6-14.7-26.9-3.7-37.8 7.3-7.3 23.1-23.1 47.2-47.2 12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-24.1 24.1-39.9 39.9-47.2 47.2l0 0-25.3 25.3c-21 21-32.8 49.5-32.8 79.2l0 78.9c0 26.5 21.5 48 48 48l66.7 0c17 0 33.3-6.7 45.3-18.7l99.9-99.9c18-18 28.1-42.4 28.1-67.9L640 104c0-22.1-17.9-40-40-40s-40 17.9-40 40z\"]\n};\nvar faCartShopping = {\n  prefix: 'fas',\n  iconName: 'cart-shopping',\n  icon: [640, 512, [128722, \"shopping-cart\"], \"f07a\", \"M24-16C10.7-16 0-5.3 0 8S10.7 32 24 32l45.3 0c3.9 0 7.2 2.8 7.9 6.6l52.1 286.3c6.2 34.2 36 59.1 70.8 59.1L456 384c13.3 0 24-10.7 24-24s-10.7-24-24-24l-255.9 0c-11.6 0-21.5-8.3-23.6-19.7l-5.1-28.3 303.6 0c30.8 0 57.2-21.9 62.9-52.2L568.9 69.9C572.6 50.2 557.5 32 537.4 32l-412.7 0-.4-2c-4.8-26.6-28-46-55.1-46L24-16zM208 512a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm224 0a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"]\n};\nvar faShoppingCart = faCartShopping;\nvar faOctagon = {\n  prefix: 'fas',\n  iconName: 'octagon',\n  icon: [512, 512, [128721], \"f306\", \"M188.6 .1c-17 0-33.3 6.7-45.3 18.7L19.2 143C7.2 155 .5 171.2 .5 188.2l0 135.6c0 17 6.7 33.3 18.7 45.3L143.4 493.2c12 12 28.3 18.7 45.3 18.7l135.6 0c17 0 33.3-6.7 45.3-18.7L493.6 369c12-12 18.7-28.3 18.7-45.3l0-135.6c0-17-6.7-33.3-18.7-45.3L369.5 18.8c-12-12-28.3-18.7-45.3-18.7L188.6 .1z\"]\n};\nvar faHandPointer = {\n  prefix: 'fas',\n  iconName: 'hand-pointer',\n  icon: [448, 512, [], \"f25a\", \"M128 40c0-22.1 17.9-40 40-40s40 17.9 40 40l0 148.2c8.5-7.6 19.7-12.2 32-12.2 20.6 0 38.2 13 45 31.2 8.8-9.3 21.2-15.2 35-15.2 25.3 0 46 19.5 47.9 44.3 8.5-7.7 19.8-12.3 32.1-12.3 26.5 0 48 21.5 48 48l0 112c0 70.7-57.3 128-128 128l-85.3 0c-5 0-9.9-.3-14.7-1-55.3-5.6-106.2-34-140-79L8 336c-13.3-17.7-9.7-42.7 8-56s42.7-9.7 56 8l56 74.7 0-322.7zM240 304c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-96zm48-16c-8.8 0-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-96c0-8.8-7.2-16-16-16zm80 16c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-96z\"]\n};\nvar faRegistered = {\n  prefix: 'fas',\n  iconName: 'registered',\n  icon: [512, 512, [174], \"f25d\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM200 144l80 0c39.8 0 72 32.2 72 72 0 28.9-17 53.8-41.6 65.3l30.2 50.3c6.8 11.4 3.1 26.1-8.2 32.9s-26.1 3.1-32.9-8.2l-41-68.3-34.4 0 0 56c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-176c0-13.3 10.7-24 24-24zm72 96l8 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-56 0 0 48 48 0z\"]\n};\nvar faHouseSignal = {\n  prefix: 'fas',\n  iconName: 'house-signal',\n  icon: [576, 512, [], \"e012\", \"M515.9 240l-19.9 0 0 144c0 35.3-28.7 64-64 64l-137 0c-24-91.7-93.5-165-183-194.3l0-13.7-19.9 0c-15.5 0-28.1-12.6-28.1-28.1 0-7.6 3.1-14.9 8.6-20.2L276.5-4.9C283.9-12 293.7-16 304-16s20.1 4 27.5 11.1L535.4 191.7c5.5 5.3 8.6 12.6 8.6 20.2 0 15.5-12.6 28.1-28.1 28.1zM280 192c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-48 0zM24 288c128.1 0 232 103.9 232 232 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-101.6-82.4-184-184-184-13.3 0-24-10.7-24-24s10.7-24 24-24zm8 192a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM0 408c0-13.3 10.7-24 24-24 75.1 0 136 60.9 136 136 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-48.6-39.4-88-88-88-13.3 0-24-10.7-24-24z\"]\n};\nvar faBangladeshiTakaSign = {\n  prefix: 'fas',\n  iconName: 'bangladeshi-taka-sign',\n  icon: [384, 512, [], \"e2e6\", \"M36 32.3C18.4 30.1 2.4 42.5 .3 60S10.5 93.6 28 95.8l7.9 1c16 2 28 15.6 28 31.8l0 31.5-40 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l40 0 0 176c0 53 43 96 96 96l32 0c106 0 192-86 192-192l0-32c0-53-43-96-96-96l-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l16 0c17.7 0 32 14.3 32 32l0 32c0 70.7-57.3 128-128 128l-32 0c-17.7 0-32-14.3-32-32l0-176 40 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-40 0 0-31.5C128 80.1 92 39.2 43.9 33.2l-7.9-1z\"]\n};\nvar icons = {\n  fa0: fa0,\n  fa1: fa1,\n  fa2: fa2,\n  fa3: fa3,\n  fa4: fa4,\n  fa5: fa5,\n  fa6: fa6,\n  fa7: fa7,\n  fa8: fa8,\n  fa9: fa9,\n  faDollarSign: faDollarSign,\n  faDollar: faDollar,\n  faUsd: faUsd,\n  faDog: faDog,\n  faTruckMoving: faTruckMoving,\n  faRotate: faRotate,\n  faSyncAlt: faSyncAlt,\n  faSquareMinus: faSquareMinus,\n  faMinusSquare: faMinusSquare,\n  faAlignJustify: faAlignJustify,\n  faCalendarCheck: faCalendarCheck,\n  faFaceKiss: faFaceKiss,\n  faKiss: faKiss,\n  faKitchenSet: faKitchenSet,\n  faDna: faDna,\n  faChildReaching: faChildReaching,\n  faPaste: faPaste,\n  faFileClipboard: faFileClipboard,\n  faMeteor: faMeteor,\n  faGears: faGears,\n  faCogs: faCogs,\n  faFileCirclePlus: faFileCirclePlus,\n  faIcicles: faIcicles,\n  faArrowTrendUp: faArrowTrendUp,\n  faHexagonNodesBolt: faHexagonNodesBolt,\n  faQuestion: faQuestion,\n  faHandsBound: faHandsBound,\n  faPersonWalkingLuggage: faPersonWalkingLuggage,\n  faFileArrowDown: faFileArrowDown,\n  faFileDownload: faFileDownload,\n  faPersonBooth: faPersonBooth,\n  faLocust: faLocust,\n  faRightLong: faRightLong,\n  faLongArrowAltRight: faLongArrowAltRight,\n  faTruckDroplet: faTruckDroplet,\n  faHandHoldingMedical: faHandHoldingMedical,\n  faHandPointLeft: faHandPointLeft,\n  faCalculator: faCalculator,\n  faMinus: faMinus,\n  faSubtract: faSubtract,\n  faArrowUpZA: faArrowUpZA,\n  faSortAlphaUpAlt: faSortAlphaUpAlt,\n  faMicrophoneSlash: faMicrophoneSlash,\n  faSquarePen: faSquarePen,\n  faPenSquare: faPenSquare,\n  faPencilSquare: faPencilSquare,\n  faHandFist: faHandFist,\n  faFistRaised: faFistRaised,\n  faCommentSms: faCommentSms,\n  faSms: faSms,\n  faSimCard: faSimCard,\n  faScaleBalanced: faScaleBalanced,\n  faBalanceScale: faBalanceScale,\n  faCar: faCar,\n  faAutomobile: faAutomobile,\n  faCropSimple: faCropSimple,\n  faCropAlt: faCropAlt,\n  faMedal: faMedal,\n  faScroll: faScroll,\n  faFileExcel: faFileExcel,\n  faFilter: faFilter,\n  faDrum: faDrum,\n  faMapPin: faMapPin,\n  faScaleUnbalancedFlip: faScaleUnbalancedFlip,\n  faBalanceScaleRight: faBalanceScaleRight,\n  faArrowsToCircle: faArrowsToCircle,\n  faEnvelope: faEnvelope,\n  faBaby: faBaby,\n  faSquareCaretDown: faSquareCaretDown,\n  faCaretSquareDown: faCaretSquareDown,\n  faTent: faTent,\n  faA: faA,\n  faParachuteBox: faParachuteBox,\n  faCartArrowDown: faCartArrowDown,\n  faBridgeCircleExclamation: faBridgeCircleExclamation,\n  faCloudArrowUp: faCloudArrowUp,\n  faCloudUpload: faCloudUpload,\n  faCloudUploadAlt: faCloudUploadAlt,\n  faAt: faAt,\n  faIndianRupeeSign: faIndianRupeeSign,\n  faIndianRupee: faIndianRupee,\n  faInr: faInr,\n  faTruck: faTruck,\n  faChalkboardUser: faChalkboardUser,\n  faChalkboardTeacher: faChalkboardTeacher,\n  faUserCheck: faUserCheck,\n  faUserNinja: faUserNinja,\n  faPlantWilt: faPlantWilt,\n  faWeightScale: faWeightScale,\n  faWeight: faWeight,\n  faCaretRight: faCaretRight,\n  faFlorinSign: faFlorinSign,\n  faBell: faBell,\n  faLariSign: faLariSign,\n  faMillSign: faMillSign,\n  faPersonSnowboarding: faPersonSnowboarding,\n  faSnowboarding: faSnowboarding,\n  faTty: faTty,\n  faTeletype: faTeletype,\n  faUsersRectangle: faUsersRectangle,\n  faMobile: faMobile,\n  faMobileAndroid: faMobileAndroid,\n  faMobilePhone: faMobilePhone,\n  faArrowsTurnToDots: faArrowsTurnToDots,\n  faExclamation: faExclamation,\n  faChurch: faChurch,\n  faToggleOff: faToggleOff,\n  faShoePrints: faShoePrints,\n  faFileCircleExclamation: faFileCircleExclamation,\n  faWallet: faWallet,\n  faMessage: faMessage,\n  faCommentAlt: faCommentAlt,\n  faTrophy: faTrophy,\n  faFaceDizzy: faFaceDizzy,\n  faDizzy: faDizzy,\n  faBacteria: faBacteria,\n  faEarDeaf: faEarDeaf,\n  faDeaf: faDeaf,\n  faDeafness: faDeafness,\n  faHardOfHearing: faHardOfHearing,\n  faPeopleArrows: faPeopleArrows,\n  faPeopleArrowsLeftRight: faPeopleArrowsLeftRight,\n  faHandsClapping: faHandsClapping,\n  faVirusCovidSlash: faVirusCovidSlash,\n  faCalendarDays: faCalendarDays,\n  faCalendarAlt: faCalendarAlt,\n  faDiamondTurnRight: faDiamondTurnRight,\n  faDirections: faDirections,\n  faHandPointUp: faHandPointUp,\n  faBezierCurve: faBezierCurve,\n  faPersonHalfDress: faPersonHalfDress,\n  faSquarePollHorizontal: faSquarePollHorizontal,\n  faPollH: faPollH,\n  faSchoolCircleXmark: faSchoolCircleXmark,\n  faHandLizard: faHandLizard,\n  faChalkboard: faChalkboard,\n  faBlackboard: faBlackboard,\n  faUpRightFromSquare: faUpRightFromSquare,\n  faExternalLinkAlt: faExternalLinkAlt,\n  faSquareFull: faSquareFull,\n  faClover: faClover,\n  faTeethOpen: faTeethOpen,\n  faBarsStaggered: faBarsStaggered,\n  faReorder: faReorder,\n  faStream: faStream,\n  faWarehouse: faWarehouse,\n  faSwatchbook: faSwatchbook,\n  faCampground: faCampground,\n  faPersonWalkingArrowRight: faPersonWalkingArrowRight,\n  faGlasses: faGlasses,\n  faCirclePause: faCirclePause,\n  faPauseCircle: faPauseCircle,\n  faMemory: faMemory,\n  faGift: faGift,\n  faMoneyBillWheat: faMoneyBillWheat,\n  faDungeon: faDungeon,\n  faSuitcaseMedical: faSuitcaseMedical,\n  faMedkit: faMedkit,\n  faPersonCane: faPersonCane,\n  faGauge: faGauge,\n  faDashboard: faDashboard,\n  faGaugeMed: faGaugeMed,\n  faTachometerAltAverage: faTachometerAltAverage,\n  faEnvelopeOpenText: faEnvelopeOpenText,\n  faToolbox: faToolbox,\n  faPowerOff: faPowerOff,\n  faSignal: faSignal,\n  faSignal5: faSignal5,\n  faSignalPerfect: faSignalPerfect,\n  faArrowsSpin: faArrowsSpin,\n  faJoint: faJoint,\n  faBraille: faBraille,\n  faBasketShopping: faBasketShopping,\n  faShoppingBasket: faShoppingBasket,\n  faBridge: faBridge,\n  faPlaneArrival: faPlaneArrival,\n  faCashRegister: faCashRegister,\n  faRing: faRing,\n  faAquarius: faAquarius,\n  faShareNodes: faShareNodes,\n  faShareAlt: faShareAlt,\n  faPersonCircleExclamation: faPersonCircleExclamation,\n  faBinoculars: faBinoculars,\n  faKipSign: faKipSign,\n  faHardDrive: faHardDrive,\n  faHdd: faHdd,\n  faRankingStar: faRankingStar,\n  faUserTie: faUserTie,\n  faEllipsis: faEllipsis,\n  faEllipsisH: faEllipsisH,\n  faStoreSlash: faStoreSlash,\n  faPercent: faPercent,\n  faPercentage: faPercentage,\n  faFileZipper: faFileZipper,\n  faFileArchive: faFileArchive,\n  faDisplay: faDisplay,\n  faIcons: faIcons,\n  faHeartMusicCameraBolt: faHeartMusicCameraBolt,\n  faRulerVertical: faRulerVertical,\n  faMapLocationDot: faMapLocationDot,\n  faMapMarkedAlt: faMapMarkedAlt,\n  faHeartCrack: faHeartCrack,\n  faHeartBroken: faHeartBroken,\n  faCow: faCow,\n  faRss: faRss,\n  faFeed: faFeed,\n  faMagnifyingGlass: faMagnifyingGlass,\n  faSearch: faSearch,\n  faCloudMoon: faCloudMoon,\n  faBoxesStacked: faBoxesStacked,\n  faBoxes: faBoxes,\n  faBoxesAlt: faBoxesAlt,\n  faCodeBranch: faCodeBranch,\n  faBan: faBan,\n  faCancel: faCancel,\n  faJugDetergent: faJugDetergent,\n  faReply: faReply,\n  faMailReply: faMailReply,\n  faSunPlantWilt: faSunPlantWilt,\n  faBacterium: faBacterium,\n  faRecordVinyl: faRecordVinyl,\n  faFloppyDisk: faFloppyDisk,\n  faSave: faSave,\n  faToiletsPortable: faToiletsPortable,\n  faO: faO,\n  faPalette: faPalette,\n  faUnlock: faUnlock,\n  faEarListen: faEarListen,\n  faAssistiveListeningSystems: faAssistiveListeningSystems,\n  faCodePullRequest: faCodePullRequest,\n  faKey: faKey,\n  faSkull: faSkull,\n  faMarsStrokeUp: faMarsStrokeUp,\n  faMarsStrokeV: faMarsStrokeV,\n  faFireFlameSimple: faFireFlameSimple,\n  faBurn: faBurn,\n  faTree: faTree,\n  faSmog: faSmog,\n  faS: faS,\n  faJedi: faJedi,\n  faPersonHiking: faPersonHiking,\n  faHiking: faHiking,\n  faArrowsUpToLine: faArrowsUpToLine,\n  faMarsDouble: faMarsDouble,\n  faThermometer: faThermometer,\n  faPaintbrush: faPaintbrush,\n  faPaintBrush: faPaintBrush,\n  faNeuter: faNeuter,\n  faSquarePhoneFlip: faSquarePhoneFlip,\n  faPhoneSquareAlt: faPhoneSquareAlt,\n  faFaceGrinTongueSquint: faFaceGrinTongueSquint,\n  faGrinTongueSquint: faGrinTongueSquint,\n  faCommentDollar: faCommentDollar,\n  faHippo: faHippo,\n  faBowlFood: faBowlFood,\n  faSquareVirus: faSquareVirus,\n  faCloudSunRain: faCloudSunRain,\n  faArrowRightLong: faArrowRightLong,\n  faLongArrowRight: faLongArrowRight,\n  faBuildingUn: faBuildingUn,\n  faTemperatureLow: faTemperatureLow,\n  faDoorOpen: faDoorOpen,\n  faAlignLeft: faAlignLeft,\n  faCamera: faCamera,\n  faCameraAlt: faCameraAlt,\n  faUsersRays: faUsersRays,\n  faRainbow: faRainbow,\n  faSitemap: faSitemap,\n  faFaceGrinStars: faFaceGrinStars,\n  faGrinStars: faGrinStars,\n  faSortUp: faSortUp,\n  faSortAsc: faSortAsc,\n  faEye: faEye,\n  faCaretLeft: faCaretLeft,\n  faAppleWhole: faAppleWhole,\n  faAppleAlt: faAppleAlt,\n  faScrollTorah: faScrollTorah,\n  faTorah: faTorah,\n  faHouseLock: faHouseLock,\n  faArrowsLeftRightToLine: faArrowsLeftRightToLine,\n  faTrash: faTrash,\n  faFaceSadTear: faFaceSadTear,\n  faSadTear: faSadTear,\n  faFax: faFax,\n  faPersonCirclePlus: faPersonCirclePlus,\n  faHamsa: faHamsa,\n  faPersonCircleQuestion: faPersonCircleQuestion,\n  faClipboardCheck: faClipboardCheck,\n  faShareFromSquare: faShareFromSquare,\n  faShareSquare: faShareSquare,\n  faReceipt: faReceipt,\n  faEquals: faEquals,\n  faChevronUp: faChevronUp,\n  faVirusSlash: faVirusSlash,\n  faSlash: faSlash,\n  faExpand: faExpand,\n  faNoteSticky: faNoteSticky,\n  faStickyNote: faStickyNote,\n  faTableColumns: faTableColumns,\n  faColumns: faColumns,\n  faPersonShelter: faPersonShelter,\n  faCircleNotch: faCircleNotch,\n  faWater: faWater,\n  faDeleteLeft: faDeleteLeft,\n  faBackspace: faBackspace,\n  faBroomBall: faBroomBall,\n  faQuidditch: faQuidditch,\n  faQuidditchBroomBall: faQuidditchBroomBall,\n  faJ: faJ,\n  faShuttleSpace: faShuttleSpace,\n  faSpaceShuttle: faSpaceShuttle,\n  faYinYang: faYinYang,\n  faStop: faStop,\n  faTrowel: faTrowel,\n  faHandBackFist: faHandBackFist,\n  faHandRock: faHandRock,\n  faTemperatureHigh: faTemperatureHigh,\n  faGreaterThan: faGreaterThan,\n  faCrutch: faCrutch,\n  faSeptagon: faSeptagon,\n  faHeptagon: faHeptagon,\n  faStreetView: faStreetView,\n  faWaveSquare: faWaveSquare,\n  faAngleLeft: faAngleLeft,\n  faScrewdriver: faScrewdriver,\n  faTractor: faTractor,\n  faBridgeCircleXmark: faBridgeCircleXmark,\n  faVials: faVials,\n  faStethoscope: faStethoscope,\n  faPodcast: faPodcast,\n  faArrowUpRightDots: faArrowUpRightDots,\n  faChessQueen: faChessQueen,\n  faAnchorCircleExclamation: faAnchorCircleExclamation,\n  faEllipsisVertical: faEllipsisVertical,\n  faEllipsisV: faEllipsisV,\n  faHeartCircleExclamation: faHeartCircleExclamation,\n  faBuildingCircleExclamation: faBuildingCircleExclamation,\n  faPersonArrowUpFromLine: faPersonArrowUpFromLine,\n  faNotEqual: faNotEqual,\n  faTrainTram: faTrainTram,\n  faPlaneDeparture: faPlaneDeparture,\n  faRightToBracket: faRightToBracket,\n  faSignInAlt: faSignInAlt,\n  faSdCard: faSdCard,\n  faHouseCircleExclamation: faHouseCircleExclamation,\n  faShekelSign: faShekelSign,\n  faIls: faIls,\n  faShekel: faShekel,\n  faSheqel: faSheqel,\n  faSheqelSign: faSheqelSign,\n  faRadio: faRadio,\n  faHandDots: faHandDots,\n  faAllergies: faAllergies,\n  faBookSkull: faBookSkull,\n  faBookDead: faBookDead,\n  faUnlockKeyhole: faUnlockKeyhole,\n  faUnlockAlt: faUnlockAlt,\n  faFileArrowUp: faFileArrowUp,\n  faFileUpload: faFileUpload,\n  faFaceGrinTears: faFaceGrinTears,\n  faGrinTears: faGrinTears,\n  faPenToSquare: faPenToSquare,\n  faEdit: faEdit,\n  faEarthEurope: faEarthEurope,\n  faGlobeEurope: faGlobeEurope,\n  faFaceGrinBeamSweat: faFaceGrinBeamSweat,\n  faGrinBeamSweat: faGrinBeamSweat,\n  faCircleHalfStroke: faCircleHalfStroke,\n  faAdjust: faAdjust,\n  faPersonMilitaryToPerson: faPersonMilitaryToPerson,\n  faTableCellsColumnLock: faTableCellsColumnLock,\n  faTruckFieldUn: faTruckFieldUn,\n  faClock: faClock,\n  faClockFour: faClockFour,\n  faBook: faBook,\n  faFaceLaughWink: faFaceLaughWink,\n  faLaughWink: faLaughWink,\n  faCloudMeatball: faCloudMeatball,\n  faChartArea: faChartArea,\n  faAreaChart: faAreaChart,\n  faRupiahSign: faRupiahSign,\n  faTextWidth: faTextWidth,\n  faSatellite: faSatellite,\n  faMagnifyingGlassMinus: faMagnifyingGlassMinus,\n  faSearchMinus: faSearchMinus,\n  faPeopleGroup: faPeopleGroup,\n  faSquareBinary: faSquareBinary,\n  faMasksTheater: faMasksTheater,\n  faTheaterMasks: faTheaterMasks,\n  faCartPlus: faCartPlus,\n  faHandsAslInterpreting: faHandsAslInterpreting,\n  faAmericanSignLanguageInterpreting: faAmericanSignLanguageInterpreting,\n  faAslInterpreting: faAslInterpreting,\n  faHandsAmericanSignLanguageInterpreting: faHandsAmericanSignLanguageInterpreting,\n  faTableCellsRowUnlock: faTableCellsRowUnlock,\n  faRocket: faRocket,\n  faShrimp: faShrimp,\n  faTengeSign: faTengeSign,\n  faTenge: faTenge,\n  faHouseChimneyMedical: faHouseChimneyMedical,\n  faClinicMedical: faClinicMedical,\n  faUsersSlash: faUsersSlash,\n  faPaperPlane: faPaperPlane,\n  faBookAtlas: faBookAtlas,\n  faAtlas: faAtlas,\n  faTable: faTable,\n  faHeart: faHeart,\n  faCircleChevronUp: faCircleChevronUp,\n  faChevronCircleUp: faChevronCircleUp,\n  faBatteryHalf: faBatteryHalf,\n  faBattery3: faBattery3,\n  faFontAwesome: faFontAwesome,\n  faFontAwesomeFlag: faFontAwesomeFlag,\n  faFontAwesomeLogoFull: faFontAwesomeLogoFull,\n  faHandcuffs: faHandcuffs,\n  faHatCowboySide: faHatCowboySide,\n  faIndustry: faIndustry,\n  faLinesLeaning: faLinesLeaning,\n  faPassport: faPassport,\n  faInfinity: faInfinity,\n  faClone: faClone,\n  faForward: faForward,\n  faM: faM,\n  faRoadSpikes: faRoadSpikes,\n  faMountain: faMountain,\n  faChess: faChess,\n  faTemperatureThreeQuarters: faTemperatureThreeQuarters,\n  faTemperature3: faTemperature3,\n  faThermometer3: faThermometer3,\n  faThermometerThreeQuarters: faThermometerThreeQuarters,\n  faB: faB,\n  faShieldVirus: faShieldVirus,\n  faLitecoinSign: faLitecoinSign,\n  faDiceD6: faDiceD6,\n  faGripLinesVertical: faGripLinesVertical,\n  faGolfBallTee: faGolfBallTee,\n  faGolfBall: faGolfBall,\n  faHexagon: faHexagon,\n  faFolderOpen: faFolderOpen,\n  faKaaba: faKaaba,\n  faHandHolding: faHandHolding,\n  faSingleQuoteRight: faSingleQuoteRight,\n  faBottleDroplet: faBottleDroplet,\n  faWindowMinimize: faWindowMinimize,\n  faChevronRight: faChevronRight,\n  faEgg: faEgg,\n  faLandmarkDome: faLandmarkDome,\n  faLandmarkAlt: faLandmarkAlt,\n  faWorm: faWorm,\n  faUserInjured: faUserInjured,\n  faStrikethrough: faStrikethrough,\n  faBlog: faBlog,\n  faStopwatch20: faStopwatch20,\n  faTruckPickup: faTruckPickup,\n  faSeedling: faSeedling,\n  faSprout: faSprout,\n  faTransgender: faTransgender,\n  faTransgenderAlt: faTransgenderAlt,\n  faStarHalf: faStarHalf,\n  faPhotoFilm: faPhotoFilm,\n  faPhotoVideo: faPhotoVideo,\n  faPictureInPicture: faPictureInPicture,\n  faPumpMedical: faPumpMedical,\n  faFire: faFire,\n  faMagnifyingGlassPlus: faMagnifyingGlassPlus,\n  faSearchPlus: faSearchPlus,\n  faFlask: faFlask,\n  faAlignRight: faAlignRight,\n  faCableCar: faCableCar,\n  faTram: faTram,\n  faKitMedical: faKitMedical,\n  faFirstAid: faFirstAid,\n  faGripLines: faGripLines,\n  faBurger: faBurger,\n  faHamburger: faHamburger,\n  faSnowman: faSnowman,\n  faHotel: faHotel,\n  faPrint: faPrint,\n  faVolleyball: faVolleyball,\n  faVolleyballBall: faVolleyballBall,\n  faTrafficLight: faTrafficLight,\n  faPlaneCircleCheck: faPlaneCircleCheck,\n  faUsers: faUsers,\n  faCertificate: faCertificate,\n  faAlarmClock: faAlarmClock,\n  faHelicopterSymbol: faHelicopterSymbol,\n  faHouseChimneyCrack: faHouseChimneyCrack,\n  faHouseDamage: faHouseDamage,\n  faPersonMilitaryPointing: faPersonMilitaryPointing,\n  faDatabase: faDatabase,\n  faNewspaper: faNewspaper,\n  faCloudRain: faCloudRain,\n  faMaximize: faMaximize,\n  faExpandArrowsAlt: faExpandArrowsAlt,\n  faLocationArrow: faLocationArrow,\n  faCity: faCity,\n  faXRay: faXRay,\n  faUmbrellaBeach: faUmbrellaBeach,\n  faArrowRightToBracket: faArrowRightToBracket,\n  faSignIn: faSignIn,\n  faHeadset: faHeadset,\n  faSplotch: faSplotch,\n  faUpLong: faUpLong,\n  faLongArrowAltUp: faLongArrowAltUp,\n  faHexagonNodes: faHexagonNodes,\n  faHospital: faHospital,\n  faHospitalAlt: faHospitalAlt,\n  faHospitalWide: faHospitalWide,\n  faPersonHarassing: faPersonHarassing,\n  faMoneyBillTrendUp: faMoneyBillTrendUp,\n  faPenRuler: faPenRuler,\n  faPencilRuler: faPencilRuler,\n  faRepeat: faRepeat,\n  faBone: faBone,\n  faFireFlameCurved: faFireFlameCurved,\n  faFireAlt: faFireAlt,\n  faBusSimple: faBusSimple,\n  faBusAlt: faBusAlt,\n  faVenusMars: faVenusMars,\n  faBlender: faBlender,\n  faU: faU,\n  faShare: faShare,\n  faMailForward: faMailForward,\n  faPhoneFlip: faPhoneFlip,\n  faPhoneAlt: faPhoneAlt,\n  faToiletPortable: faToiletPortable,\n  faPersonPregnant: faPersonPregnant,\n  faLessThan: faLessThan,\n  faSuperscript: faSuperscript,\n  faCircleStop: faCircleStop,\n  faStopCircle: faStopCircle,\n  faArrowsUpDown: faArrowsUpDown,\n  faArrowsV: faArrowsV,\n  faPooStorm: faPooStorm,\n  faPooBolt: faPooBolt,\n  faVideoSlash: faVideoSlash,\n  faSquareXmark: faSquareXmark,\n  faTimesSquare: faTimesSquare,\n  faXmarkSquare: faXmarkSquare,\n  faHandHoldingDroplet: faHandHoldingDroplet,\n  faHandHoldingWater: faHandHoldingWater,\n  faWonSign: faWonSign,\n  faKrw: faKrw,\n  faWon: faWon,\n  faObjectUngroup: faObjectUngroup,\n  faComment: faComment,\n  faHillAvalanche: faHillAvalanche,\n  faArrowsToEye: faArrowsToEye,\n  faSnowplow: faSnowplow,\n  faChartGantt: faChartGantt,\n  faVideo: faVideo,\n  faVideoCamera: faVideoCamera,\n  faChessPawn: faChessPawn,\n  faSynagogue: faSynagogue,\n  faBuildingCircleCheck: faBuildingCircleCheck,\n  faCalendarPlus: faCalendarPlus,\n  faWheelchairMove: faWheelchairMove,\n  faWheelchairAlt: faWheelchairAlt,\n  faUserShield: faUserShield,\n  faBold: faBold,\n  faHeartPulse: faHeartPulse,\n  faHeartbeat: faHeartbeat,\n  faSquareRootVariable: faSquareRootVariable,\n  faSquareRootAlt: faSquareRootAlt,\n  faHandsBubbles: faHandsBubbles,\n  faHandsWash: faHandsWash,\n  faMarker: faMarker,\n  faClipboard: faClipboard,\n  faPlaceOfWorship: faPlaceOfWorship,\n  faCannabis: faCannabis,\n  faPeopleRoof: faPeopleRoof,\n  faDisease: faDisease,\n  faBookBible: faBookBible,\n  faBible: faBible,\n  faChessBoard: faChessBoard,\n  faMars: faMars,\n  faLaptop: faLaptop,\n  faUserXmark: faUserXmark,\n  faUserTimes: faUserTimes,\n  faFlagUsa: faFlagUsa,\n  faHandMiddleFinger: faHandMiddleFinger,\n  faMortarPestle: faMortarPestle,\n  faHeadSideCough: faHeadSideCough,\n  faPlaneLock: faPlaneLock,\n  faBatteryThreeQuarters: faBatteryThreeQuarters,\n  faBattery4: faBattery4,\n  faFrancSign: faFrancSign,\n  faFilterCircleDollar: faFilterCircleDollar,\n  faFunnelDollar: faFunnelDollar,\n  faCheese: faCheese,\n  faCircleH: faCircleH,\n  faHospitalSymbol: faHospitalSymbol,\n  faSchool: faSchool,\n  faDiceFive: faDiceFive,\n  faTornado: faTornado,\n  faJetFighter: faJetFighter,\n  faFighterJet: faFighterJet,\n  faThumbsDown: faThumbsDown,\n  faBroom: faBroom,\n  faFileImport: faFileImport,\n  faArrowRightToFile: faArrowRightToFile,\n  faUtensils: faUtensils,\n  faCutlery: faCutlery,\n  faIdBadge: faIdBadge,\n  faSpider: faSpider,\n  faMobileRetro: faMobileRetro,\n  faSignsPost: faSignsPost,\n  faMapSigns: faMapSigns,\n  faGroupArrowsRotate: faGroupArrowsRotate,\n  faArrowsSplitUpAndLeft: faArrowsSplitUpAndLeft,\n  faFillDrip: faFillDrip,\n  faShieldHeart: faShieldHeart,\n  faPersonSkiingNordic: faPersonSkiingNordic,\n  faSkiingNordic: faSkiingNordic,\n  faSquareCheck: faSquareCheck,\n  faCheckSquare: faCheckSquare,\n  faBath: faBath,\n  faBathtub: faBathtub,\n  faChessBishop: faChessBishop,\n  faPrescriptionBottleMedical: faPrescriptionBottleMedical,\n  faPrescriptionBottleAlt: faPrescriptionBottleAlt,\n  faDrawPolygon: faDrawPolygon,\n  faVectorPolygon: faVectorPolygon,\n  faICursor: faICursor,\n  faHeartCirclePlus: faHeartCirclePlus,\n  faShieldDog: faShieldDog,\n  faGreaterThanEqual: faGreaterThanEqual,\n  faEnvelopeOpen: faEnvelopeOpen,\n  faMound: faMound,\n  faVoicemail: faVoicemail,\n  faVest: faVest,\n  faAudioDescription: faAudioDescription,\n  faW: faW,\n  faEyeDropper: faEyeDropper,\n  faEyeDropperEmpty: faEyeDropperEmpty,\n  faEyedropper: faEyedropper,\n  faCircleXmark: faCircleXmark,\n  faTimesCircle: faTimesCircle,\n  faXmarkCircle: faXmarkCircle,\n  faTrailer: faTrailer,\n  faTurkishLiraSign: faTurkishLiraSign,\n  faTry: faTry,\n  faTurkishLira: faTurkishLira,\n  faVolcano: faVolcano,\n  faWandSparkles: faWandSparkles,\n  faMicrophone: faMicrophone,\n  faCrown: faCrown,\n  faTentArrowTurnLeft: faTentArrowTurnLeft,\n  faTruckFast: faTruckFast,\n  faShippingFast: faShippingFast,\n  faUserPen: faUserPen,\n  faUserEdit: faUserEdit,\n  faUserClock: faUserClock,\n  faShower: faShower,\n  faSquareCaretUp: faSquareCaretUp,\n  faCaretSquareUp: faCaretSquareUp,\n  faMapLocation: faMapLocation,\n  faMapMarked: faMapMarked,\n  faPenFancy: faPenFancy,\n  faEuroSign: faEuroSign,\n  faEur: faEur,\n  faEuro: faEuro,\n  faHouseCircleXmark: faHouseCircleXmark,\n  faLiraSign: faLiraSign,\n  faYenSign: faYenSign,\n  faCny: faCny,\n  faJpy: faJpy,\n  faRmb: faRmb,\n  faYen: faYen,\n  faBoxOpen: faBoxOpen,\n  faTruckField: faTruckField,\n  faLocationPinLock: faLocationPinLock,\n  faPersonPraying: faPersonPraying,\n  faPray: faPray,\n  faClipboardList: faClipboardList,\n  faSackDollar: faSackDollar,\n  faMountainSun: faMountainSun,\n  faArrowUpWideShort: faArrowUpWideShort,\n  faSortAmountUp: faSortAmountUp,\n  faUsersLine: faUsersLine,\n  faStarOfDavid: faStarOfDavid,\n  faNotesMedical: faNotesMedical,\n  faAustralSign: faAustralSign,\n  faClipboardUser: faClipboardUser,\n  faFileImage: faFileImage,\n  faSquareCaretRight: faSquareCaretRight,\n  faCaretSquareRight: faCaretSquareRight,\n  faVial: faVial,\n  faHelicopter: faHelicopter,\n  faMitten: faMitten,\n  faGasPump: faGasPump,\n  faEnvelopeCircleCheck: faEnvelopeCircleCheck,\n  faPersonSkating: faPersonSkating,\n  faSkating: faSkating,\n  faSun: faSun,\n  faBaseball: faBaseball,\n  faBaseballBall: faBaseballBall,\n  faImage: faImage,\n  faNotdef: faNotdef,\n  faBasketball: faBasketball,\n  faBasketballBall: faBasketballBall,\n  faPencil: faPencil,\n  faPencilAlt: faPencilAlt,\n  faPersonWalkingArrowLoopLeft: faPersonWalkingArrowLoopLeft,\n  faDiceSix: faDiceSix,\n  faAnglesDown: faAnglesDown,\n  faAngleDoubleDown: faAngleDoubleDown,\n  faSyringe: faSyringe,\n  faWheatAwn: faWheatAwn,\n  faWheatAlt: faWheatAlt,\n  faPlaneUp: faPlaneUp,\n  faAlignCenter: faAlignCenter,\n  faHockeyPuck: faHockeyPuck,\n  faCircleArrowLeft: faCircleArrowLeft,\n  faArrowCircleLeft: faArrowCircleLeft,\n  faPlugCircleBolt: faPlugCircleBolt,\n  faRestroom: faRestroom,\n  faAnchorLock: faAnchorLock,\n  faTimeline: faTimeline,\n  faLightbulb: faLightbulb,\n  faCircleArrowRight: faCircleArrowRight,\n  faArrowCircleRight: faArrowCircleRight,\n  faMarsAndVenus: faMarsAndVenus,\n  faNetworkWired: faNetworkWired,\n  faBuildingShield: faBuildingShield,\n  faCode: faCode,\n  faFeatherPointed: faFeatherPointed,\n  faFeatherAlt: faFeatherAlt,\n  faFileCircleQuestion: faFileCircleQuestion,\n  faSignature: faSignature,\n  faEarthAmericas: faEarthAmericas,\n  faEarth: faEarth,\n  faEarthAmerica: faEarthAmerica,\n  faGlobeAmericas: faGlobeAmericas,\n  faCarrot: faCarrot,\n  faTemperatureFull: faTemperatureFull,\n  faTemperature4: faTemperature4,\n  faThermometer4: faThermometer4,\n  faThermometerFull: faThermometerFull,\n  faTableCellsRowLock: faTableCellsRowLock,\n  faBoltLightning: faBoltLightning,\n  faCloudShowersWater: faCloudShowersWater,\n  faArrowUpLong: faArrowUpLong,\n  faLongArrowUp: faLongArrowUp,\n  faAddressCard: faAddressCard,\n  faContactCard: faContactCard,\n  faVcard: faVcard,\n  faAngleRight: faAngleRight,\n  faFaceMeh: faFaceMeh,\n  faMeh: faMeh,\n  faArrowUpFromGroundWater: faArrowUpFromGroundWater,\n  faMap: faMap,\n  faUserPlus: faUserPlus,\n  faVenus: faVenus,\n  faDiagramSuccessor: faDiagramSuccessor,\n  faHeadSideCoughSlash: faHeadSideCoughSlash,\n  faDiagramProject: faDiagramProject,\n  faProjectDiagram: faProjectDiagram,\n  faTerminal: faTerminal,\n  faHouseFire: faHouseFire,\n  faMask: faMask,\n  faHurricane: faHurricane,\n  faEarthAfrica: faEarthAfrica,\n  faGlobeAfrica: faGlobeAfrica,\n  faThumbtack: faThumbtack,\n  faThumbTack: faThumbTack,\n  faHandPointDown: faHandPointDown,\n  faFaceMehBlank: faFaceMehBlank,\n  faMehBlank: faMehBlank,\n  faTemperatureEmpty: faTemperatureEmpty,\n  faTemperature0: faTemperature0,\n  faThermometer0: faThermometer0,\n  faThermometerEmpty: faThermometerEmpty,\n  faBorderNone: faBorderNone,\n  faHighlighter: faHighlighter,\n  faMoneyBillWave: faMoneyBillWave,\n  faToiletPaperSlash: faToiletPaperSlash,\n  faFileShield: faFileShield,\n  faTextHeight: faTextHeight,\n  faFaceGrinTongue: faFaceGrinTongue,\n  faGrinTongue: faGrinTongue,\n  faFileSignature: faFileSignature,\n  faBuildingWheat: faBuildingWheat,\n  faPlugCircleMinus: faPlugCircleMinus,\n  faFutbol: faFutbol,\n  faFutbolBall: faFutbolBall,\n  faSoccerBall: faSoccerBall,\n  faCirclePlus: faCirclePlus,\n  faPlusCircle: faPlusCircle,\n  faBrazilianRealSign: faBrazilianRealSign,\n  faStarAndCrescent: faStarAndCrescent,\n  faFaceSurprise: faFaceSurprise,\n  faSurprise: faSurprise,\n  faHospitalUser: faHospitalUser,\n  faArrowDownUpLock: faArrowDownUpLock,\n  faFolder: faFolder,\n  faFolderBlank: faFolderBlank,\n  faHollyBerry: faHollyBerry,\n  faVenusDouble: faVenusDouble,\n  faClipboardQuestion: faClipboardQuestion,\n  faHotdog: faHotdog,\n  faArrowUpFromBracket: faArrowUpFromBracket,\n  faMicroscope: faMicroscope,\n  faCloud: faCloud,\n  faBaseballBatBall: faBaseballBatBall,\n  faCarRear: faCarRear,\n  faCarAlt: faCarAlt,\n  faThumbtackSlash: faThumbtackSlash,\n  faThumbTackSlash: faThumbTackSlash,\n  faPlusMinus: faPlusMinus,\n  faHouseCircleCheck: faHouseCircleCheck,\n  faCalendarDay: faCalendarDay,\n  faLibra: faLibra,\n  faCircle: faCircle,\n  faMobileVibrate: faMobileVibrate,\n  faFaceGrinSquint: faFaceGrinSquint,\n  faGrinSquint: faGrinSquint,\n  faUsersBetweenLines: faUsersBetweenLines,\n  faHouseMedicalCircleXmark: faHouseMedicalCircleXmark,\n  faTableList: faTableList,\n  faThList: faThList,\n  faFlaskVial: faFlaskVial,\n  faCircleExclamation: faCircleExclamation,\n  faExclamationCircle: faExclamationCircle,\n  faTaxi: faTaxi,\n  faCab: faCab,\n  faTextSlash: faTextSlash,\n  faRemoveFormat: faRemoveFormat,\n  faPeoplePulling: faPeoplePulling,\n  faBackward: faBackward,\n  faCarBurst: faCarBurst,\n  faCarCrash: faCarCrash,\n  faLink: faLink,\n  faChain: faChain,\n  faBackwardStep: faBackwardStep,\n  faStepBackward: faStepBackward,\n  faX: faX,\n  faCircleUser: faCircleUser,\n  faUserCircle: faUserCircle,\n  faRectangleList: faRectangleList,\n  faListAlt: faListAlt,\n  faHand: faHand,\n  faHandPaper: faHandPaper,\n  faCancer: faCancer,\n  faVanShuttle: faVanShuttle,\n  faShuttleVan: faShuttleVan,\n  faStairs: faStairs,\n  faHorseHead: faHorseHead,\n  faVault: faVault,\n  faClosedCaptioningSlash: faClosedCaptioningSlash,\n  faDrumSteelpan: faDrumSteelpan,\n  faThumbsUp: faThumbsUp,\n  faStamp: faStamp,\n  faMenorah: faMenorah,\n  faChildren: faChildren,\n  faChartLine: faChartLine,\n  faLineChart: faLineChart,\n  faSquareEnvelope: faSquareEnvelope,\n  faEnvelopeSquare: faEnvelopeSquare,\n  faBanSmoking: faBanSmoking,\n  faSmokingBan: faSmokingBan,\n  faTruckFront: faTruckFront,\n  faBuilding: faBuilding,\n  faBullseye: faBullseye,\n  faArrowLeftLong: faArrowLeftLong,\n  faLongArrowLeft: faLongArrowLeft,\n  faChessRook: faChessRook,\n  faBlenderPhone: faBlenderPhone,\n  faArrowTurnUp: faArrowTurnUp,\n  faLevelUp: faLevelUp,\n  faBicycle: faBicycle,\n  faCircleArrowDown: faCircleArrowDown,\n  faArrowCircleDown: faArrowCircleDown,\n  faGear: faGear,\n  faCog: faCog,\n  faMarsAndVenusBurst: faMarsAndVenusBurst,\n  faOtter: faOtter,\n  faCircleChevronLeft: faCircleChevronLeft,\n  faChevronCircleLeft: faChevronCircleLeft,\n  faCircleQuestion: faCircleQuestion,\n  faQuestionCircle: faQuestionCircle,\n  faWalkieTalkie: faWalkieTalkie,\n  faUserGroup: faUserGroup,\n  faUserFriends: faUserFriends,\n  faHouseChimney: faHouseChimney,\n  faHomeLg: faHomeLg,\n  faRightFromBracket: faRightFromBracket,\n  faSignOutAlt: faSignOutAlt,\n  faFile: faFile,\n  faPlaneSlash: faPlaneSlash,\n  faCloudShowersHeavy: faCloudShowersHeavy,\n  faPersonFalling: faPersonFalling,\n  faTurnDown: faTurnDown,\n  faLevelDownAlt: faLevelDownAlt,\n  faUpRightAndDownLeftFromCenter: faUpRightAndDownLeftFromCenter,\n  faExpandAlt: faExpandAlt,\n  faUserTag: faUserTag,\n  faHandSparkles: faHandSparkles,\n  faArrowsToDot: faArrowsToDot,\n  faFaceSadCry: faFaceSadCry,\n  faSadCry: faSadCry,\n  faDongSign: faDongSign,\n  faPeopleLine: faPeopleLine,\n  faSquareRss: faSquareRss,\n  faRssSquare: faRssSquare,\n  faCalendarMinus: faCalendarMinus,\n  faChartDiagram: faChartDiagram,\n  faFaceTired: faFaceTired,\n  faTired: faTired,\n  faHandPointRight: faHandPointRight,\n  faArrowUp: faArrowUp,\n  faCubesStacked: faCubesStacked,\n  faChildCombatant: faChildCombatant,\n  faChildRifle: faChildRifle,\n  faVestPatches: faVestPatches,\n  faMartiniGlassEmpty: faMartiniGlassEmpty,\n  faGlassMartini: faGlassMartini,\n  faMagnet: faMagnet,\n  faRoadBarrier: faRoadBarrier,\n  faCompassDrafting: faCompassDrafting,\n  faDraftingCompass: faDraftingCompass,\n  faSquarePersonConfined: faSquarePersonConfined,\n  faPlateWheat: faPlateWheat,\n  faSignHanging: faSignHanging,\n  faSign: faSign,\n  faCarBattery: faCarBattery,\n  faBatteryCar: faBatteryCar,\n  faShirt: faShirt,\n  faTShirt: faTShirt,\n  faTshirt: faTshirt,\n  faParagraph: faParagraph,\n  faEnvelopesBulk: faEnvelopesBulk,\n  faMailBulk: faMailBulk,\n  faGuitar: faGuitar,\n  faSuitcase: faSuitcase,\n  faCircleUp: faCircleUp,\n  faArrowAltCircleUp: faArrowAltCircleUp,\n  faF: faF,\n  faXmarksLines: faXmarksLines,\n  faEarthOceania: faEarthOceania,\n  faGlobeOceania: faGlobeOceania,\n  faCommentSlash: faCommentSlash,\n  faPlay: faPlay,\n  faVialCircleCheck: faVialCircleCheck,\n  faBridgeCircleCheck: faBridgeCircleCheck,\n  faCediSign: faCediSign,\n  faPuzzlePiece: faPuzzlePiece,\n  faHelmetUn: faHelmetUn,\n  faGlassWater: faGlassWater,\n  faHeartCircleBolt: faHeartCircleBolt,\n  faPumpSoap: faPumpSoap,\n  faHandScissors: faHandScissors,\n  faDolly: faDolly,\n  faDollyBox: faDollyBox,\n  faPaperclip: faPaperclip,\n  faDemocrat: faDemocrat,\n  faSquareArrowUpRight: faSquareArrowUpRight,\n  faExternalLinkSquare: faExternalLinkSquare,\n  faFerry: faFerry,\n  faMosquito: faMosquito,\n  faBuildingCircleArrowRight: faBuildingCircleArrowRight,\n  faLeftRight: faLeftRight,\n  faArrowsAltH: faArrowsAltH,\n  faVirus: faVirus,\n  faGem: faGem,\n  faToilet: faToilet,\n  faSingleQuoteLeft: faSingleQuoteLeft,\n  faMoneyBills: faMoneyBills,\n  faTabletButton: faTabletButton,\n  faRectangleXmark: faRectangleXmark,\n  faRectangleTimes: faRectangleTimes,\n  faTimesRectangle: faTimesRectangle,\n  faWindowClose: faWindowClose,\n  faWrench: faWrench,\n  faTrashCan: faTrashCan,\n  faTrashAlt: faTrashAlt,\n  faTableCells: faTableCells,\n  faTh: faTh,\n  faRibbon: faRibbon,\n  faLandmarkFlag: faLandmarkFlag,\n  faUpDownLeftRight: faUpDownLeftRight,\n  faArrowsAlt: faArrowsAlt,\n  faCarSide: faCarSide,\n  faTrashArrowUp: faTrashArrowUp,\n  faTrashRestore: faTrashRestore,\n  faLifeRing: faLifeRing,\n  faCopyright: faCopyright,\n  faFilePrescription: faFilePrescription,\n  faEraser: faEraser,\n  faHourglassStart: faHourglassStart,\n  faHourglass1: faHourglass1,\n  faCircleLeft: faCircleLeft,\n  faArrowAltCircleLeft: faArrowAltCircleLeft,\n  faCruzeiroSign: faCruzeiroSign,\n  faSmoking: faSmoking,\n  faSquarePollVertical: faSquarePollVertical,\n  faPoll: faPoll,\n  faPersonCircleMinus: faPersonCircleMinus,\n  faBiohazard: faBiohazard,\n  faBellConcierge: faBellConcierge,\n  faConciergeBell: faConciergeBell,\n  faRulerHorizontal: faRulerHorizontal,\n  faHorse: faHorse,\n  faCalendar: faCalendar,\n  faHandsHoldingChild: faHandsHoldingChild,\n  faItalic: faItalic,\n  faKhanda: faKhanda,\n  faFaceFrownOpen: faFaceFrownOpen,\n  faFrownOpen: faFrownOpen,\n  faCheck: faCheck,\n  faFingerprint: faFingerprint,\n  faChargingStation: faChargingStation,\n  faUserLock: faUserLock,\n  faMobileScreenButton: faMobileScreenButton,\n  faMobileAlt: faMobileAlt,\n  faAnchorCircleCheck: faAnchorCircleCheck,\n  faPersonWalkingWithCane: faPersonWalkingWithCane,\n  faBlind: faBlind,\n  faFileWaveform: faFileWaveform,\n  faFileMedicalAlt: faFileMedicalAlt,\n  faHouseCrack: faHouseCrack,\n  faHatWizard: faHatWizard,\n  faUserDoctor: faUserDoctor,\n  faUserMd: faUserMd,\n  faChartBar: faChartBar,\n  faBarChart: faBarChart,\n  faSprayCanSparkles: faSprayCanSparkles,\n  faAirFreshener: faAirFreshener,\n  faBahtSign: faBahtSign,\n  faTemperatureArrowUp: faTemperatureArrowUp,\n  faTemperatureUp: faTemperatureUp,\n  faWebAwesome: faWebAwesome,\n  faNonBinary: faNonBinary,\n  faN: faN,\n  faArrowsUpDownLeftRight: faArrowsUpDownLeftRight,\n  faArrows: faArrows,\n  faHouse: faHouse,\n  faHome: faHome,\n  faHomeAlt: faHomeAlt,\n  faHomeLgAlt: faHomeLgAlt,\n  faSpinner: faSpinner,\n  faGavel: faGavel,\n  faLegal: faLegal,\n  faTicketSimple: faTicketSimple,\n  faTicketAlt: faTicketAlt,\n  faDove: faDove,\n  faTarpDroplet: faTarpDroplet,\n  faTreeCity: faTreeCity,\n  faTurnUp: faTurnUp,\n  faLevelUpAlt: faLevelUpAlt,\n  faTemperatureQuarter: faTemperatureQuarter,\n  faTemperature1: faTemperature1,\n  faThermometer1: faThermometer1,\n  faThermometerQuarter: faThermometerQuarter,\n  faSliders: faSliders,\n  faSlidersH: faSlidersH,\n  faMosque: faMosque,\n  faH: faH,\n  faInfo: faInfo,\n  faPersonWalking: faPersonWalking,\n  faWalking: faWalking,\n  faArrowTurnDown: faArrowTurnDown,\n  faLevelDown: faLevelDown,\n  faRoad: faRoad,\n  faSpiral: faSpiral,\n  faFaceFrown: faFaceFrown,\n  faFrown: faFrown,\n  faWineGlassEmpty: faWineGlassEmpty,\n  faWineGlassAlt: faWineGlassAlt,\n  faClapperboard: faClapperboard,\n  faForwardStep: faForwardStep,\n  faStepForward: faStepForward,\n  faSquareUpRight: faSquareUpRight,\n  faExternalLinkSquareAlt: faExternalLinkSquareAlt,\n  faBookJournalWhills: faBookJournalWhills,\n  faJournalWhills: faJournalWhills,\n  faChampagneGlasses: faChampagneGlasses,\n  faGlassCheers: faGlassCheers,\n  faDumpster: faDumpster,\n  faHeartCircleXmark: faHeartCircleXmark,\n  faComputer: faComputer,\n  faWandMagic: faWandMagic,\n  faMagic: faMagic,\n  faBrain: faBrain,\n  faBriefcaseMedical: faBriefcaseMedical,\n  faHouseMedicalCircleExclamation: faHouseMedicalCircleExclamation,\n  faCodeCommit: faCodeCommit,\n  faPersonBreastfeeding: faPersonBreastfeeding,\n  faPersonRays: faPersonRays,\n  faManatSign: faManatSign,\n  faSort: faSort,\n  faUnsorted: faUnsorted,\n  faCircleRadiation: faCircleRadiation,\n  faRadiationAlt: faRadiationAlt,\n  faLaptopCode: faLaptopCode,\n  faSink: faSink,\n  faArrowUpFromWaterPump: faArrowUpFromWaterPump,\n  faMicrophoneLinesSlash: faMicrophoneLinesSlash,\n  faMicrophoneAltSlash: faMicrophoneAltSlash,\n  faServer: faServer,\n  faUser: faUser,\n  faUserAlt: faUserAlt,\n  faUserLarge: faUserLarge,\n  faSnowflake: faSnowflake,\n  faTaurus: faTaurus,\n  faSkullCrossbones: faSkullCrossbones,\n  faPesoSign: faPesoSign,\n  faWineGlass: faWineGlass,\n  faTemperatureHalf: faTemperatureHalf,\n  faTemperature2: faTemperature2,\n  faThermometer2: faThermometer2,\n  faThermometerHalf: faThermometerHalf,\n  faTicket: faTicket,\n  faWheatAwnCircleExclamation: faWheatAwnCircleExclamation,\n  faArrowsTurnRight: faArrowsTurnRight,\n  faCandyCane: faCandyCane,\n  faWheelchair: faWheelchair,\n  faSpellCheck: faSpellCheck,\n  faVolumeOff: faVolumeOff,\n  faLungs: faLungs,\n  faBookmark: faBookmark,\n  faBarcode: faBarcode,\n  faListOl: faListOl,\n  faList12: faList12,\n  faListNumeric: faListNumeric,\n  faFileCircleXmark: faFileCircleXmark,\n  faCube: faCube,\n  faTape: faTape,\n  faBomb: faBomb,\n  faScaleUnbalanced: faScaleUnbalanced,\n  faBalanceScaleLeft: faBalanceScaleLeft,\n  faSquareCaretLeft: faSquareCaretLeft,\n  faCaretSquareLeft: faCaretSquareLeft,\n  faRuler: faRuler,\n  faI: faI,\n  faVolumeXmark: faVolumeXmark,\n  faVolumeMute: faVolumeMute,\n  faVolumeTimes: faVolumeTimes,\n  faArchway: faArchway,\n  faPersonDigging: faPersonDigging,\n  faDigging: faDigging,\n  faGaugeHigh: faGaugeHigh,\n  faTachometerAlt: faTachometerAlt,\n  faTachometerAltFast: faTachometerAltFast,\n  faGenderless: faGenderless,\n  faCloudSun: faCloudSun,\n  faArrowRight: faArrowRight,\n  faHandshake: faHandshake,\n  faHandshakeAlt: faHandshakeAlt,\n  faHandshakeSimple: faHandshakeSimple,\n  faPersonSkiing: faPersonSkiing,\n  faSkiing: faSkiing,\n  faBridgeWater: faBridgeWater,\n  faBuildingNgo: faBuildingNgo,\n  faIgloo: faIgloo,\n  faCircleDollarToSlot: faCircleDollarToSlot,\n  faDonate: faDonate,\n  faY: faY,\n  faFaceSmileWink: faFaceSmileWink,\n  faSmileWink: faSmileWink,\n  faDiceFour: faDiceFour,\n  faFaceGrinSquintTears: faFaceGrinSquintTears,\n  faGrinSquintTears: faGrinSquintTears,\n  faFileAudio: faFileAudio,\n  faArrowsDownToLine: faArrowsDownToLine,\n  faG: faG,\n  faVihara: faVihara,\n  faFlagCheckered: faFlagCheckered,\n  faGaugeSimple: faGaugeSimple,\n  faGaugeSimpleMed: faGaugeSimpleMed,\n  faTachometerAverage: faTachometerAverage,\n  faRightLeft: faRightLeft,\n  faExchangeAlt: faExchangeAlt,\n  faPills: faPills,\n  faExplosion: faExplosion,\n  faArrowsDownToPeople: faArrowsDownToPeople,\n  faUsersViewfinder: faUsersViewfinder,\n  faCarOn: faCarOn,\n  faSleigh: faSleigh,\n  faDumbbell: faDumbbell,\n  faBabyCarriage: faBabyCarriage,\n  faCarriageBaby: faCarriageBaby,\n  faKiwiBird: faKiwiBird,\n  faCalendarXmark: faCalendarXmark,\n  faCalendarTimes: faCalendarTimes,\n  faCircleDown: faCircleDown,\n  faArrowAltCircleDown: faArrowAltCircleDown,\n  faFileMedical: faFileMedical,\n  faXmark: faXmark,\n  faClose: faClose,\n  faMultiply: faMultiply,\n  faRemove: faRemove,\n  faTimes: faTimes,\n  faShapes: faShapes,\n  faTriangleCircleSquare: faTriangleCircleSquare,\n  faDiceOne: faDiceOne,\n  faLockOpen: faLockOpen,\n  faPepperHot: faPepperHot,\n  faDropletSlash: faDropletSlash,\n  faTintSlash: faTintSlash,\n  faDroplet: faDroplet,\n  faTint: faTint,\n  faFileLines: faFileLines,\n  faFileAlt: faFileAlt,\n  faFileText: faFileText,\n  faCommentsDollar: faCommentsDollar,\n  faMagnifyingGlassLocation: faMagnifyingGlassLocation,\n  faSearchLocation: faSearchLocation,\n  faFileInvoice: faFileInvoice,\n  faPentagon: faPentagon,\n  faRepublican: faRepublican,\n  faShop: faShop,\n  faStoreAlt: faStoreAlt,\n  faFilm: faFilm,\n  faFilmAlt: faFilmAlt,\n  faFilmSimple: faFilmSimple,\n  faBuildingCircleXmark: faBuildingCircleXmark,\n  faComments: faComments,\n  faTags: faTags,\n  faGun: faGun,\n  faCircleCheck: faCircleCheck,\n  faCheckCircle: faCheckCircle,\n  faScorpio: faScorpio,\n  faIdCardClip: faIdCardClip,\n  faIdCardAlt: faIdCardAlt,\n  faMoon: faMoon,\n  faOilWell: faOilWell,\n  faTachographDigital: faTachographDigital,\n  faDigitalTachograph: faDigitalTachograph,\n  faTablet: faTablet,\n  faTabletAndroid: faTabletAndroid,\n  faRubleSign: faRubleSign,\n  faRouble: faRouble,\n  faRub: faRub,\n  faRuble: faRuble,\n  faClosedCaptioning: faClosedCaptioning,\n  faPen: faPen,\n  faPlane: faPlane,\n  faImages: faImages,\n  faMobileScreen: faMobileScreen,\n  faMobileAndroidAlt: faMobileAndroidAlt,\n  faGuaraniSign: faGuaraniSign,\n  faBagShopping: faBagShopping,\n  faShoppingBag: faShoppingBag,\n  faCircleRight: faCircleRight,\n  faArrowAltCircleRight: faArrowAltCircleRight,\n  faPhoneVolume: faPhoneVolume,\n  faVolumeControlPhone: faVolumeControlPhone,\n  faCubes: faCubes,\n  faPhone: faPhone,\n  faToriiGate: faToriiGate,\n  faBacon: faBacon,\n  faPersonFallingBurst: faPersonFallingBurst,\n  faQuoteRight: faQuoteRight,\n  faQuoteRightAlt: faQuoteRightAlt,\n  faHouseMedicalFlag: faHouseMedicalFlag,\n  faPrescription: faPrescription,\n  faDiceThree: faDiceThree,\n  faBuildingLock: faBuildingLock,\n  faIdCard: faIdCard,\n  faDriversLicense: faDriversLicense,\n  faCirclePlay: faCirclePlay,\n  faPlayCircle: faPlayCircle,\n  faFaceLaughBeam: faFaceLaughBeam,\n  faLaughBeam: faLaughBeam,\n  faLeaf: faLeaf,\n  faHouseChimneyUser: faHouseChimneyUser,\n  faRotateRight: faRotateRight,\n  faRedoAlt: faRedoAlt,\n  faRotateForward: faRotateForward,\n  faTooth: faTooth,\n  faHouseChimneyWindow: faHouseChimneyWindow,\n  faMotorcycle: faMotorcycle,\n  faBackwardFast: faBackwardFast,\n  faFastBackward: faFastBackward,\n  faAddressBook: faAddressBook,\n  faContactBook: faContactBook,\n  faSailboat: faSailboat,\n  faBookBookmark: faBookBookmark,\n  faMagnifyingGlassArrowRight: faMagnifyingGlassArrowRight,\n  faMicrophoneLines: faMicrophoneLines,\n  faMicrophoneAlt: faMicrophoneAlt,\n  faReplyAll: faReplyAll,\n  faMailReplyAll: faMailReplyAll,\n  faUniversalAccess: faUniversalAccess,\n  faToiletPaper: faToiletPaper,\n  faToiletPaperAlt: faToiletPaperAlt,\n  faToiletPaperBlank: faToiletPaperBlank,\n  faVrCardboard: faVrCardboard,\n  faPizzaSlice: faPizzaSlice,\n  faSprayCan: faSprayCan,\n  faVolumeLow: faVolumeLow,\n  faVolumeDown: faVolumeDown,\n  faCross: faCross,\n  faPerson: faPerson,\n  faMale: faMale,\n  faHourglass: faHourglass,\n  faHourglassEmpty: faHourglassEmpty,\n  faFish: faFish,\n  faDrumstickBite: faDrumstickBite,\n  faChartSimple: faChartSimple,\n  faAtom: faAtom,\n  faP: faP,\n  faJetFighterUp: faJetFighterUp,\n  faPlugCircleXmark: faPlugCircleXmark,\n  faSheetPlastic: faSheetPlastic,\n  faV: faV,\n  faList: faList,\n  faListSquares: faListSquares,\n  faPisces: faPisces,\n  faSolarPanel: faSolarPanel,\n  faLandMineOn: faLandMineOn,\n  faHeadphones: faHeadphones,\n  faHeadphonesAlt: faHeadphonesAlt,\n  faHeadphonesSimple: faHeadphonesSimple,\n  faBus: faBus,\n  faFilePowerpoint: faFilePowerpoint,\n  faQuoteLeft: faQuoteLeft,\n  faQuoteLeftAlt: faQuoteLeftAlt,\n  faChevronDown: faChevronDown,\n  faEarthAsia: faEarthAsia,\n  faGlobeAsia: faGlobeAsia,\n  faCentSign: faCentSign,\n  faShieldCat: faShieldCat,\n  faSchoolCircleCheck: faSchoolCircleCheck,\n  faMartiniGlass: faMartiniGlass,\n  faGlassMartiniAlt: faGlassMartiniAlt,\n  faPlug: faPlug,\n  faPanorama: faPanorama,\n  faClockRotateLeft: faClockRotateLeft,\n  faHistory: faHistory,\n  faJarWheat: faJarWheat,\n  faCloudArrowDown: faCloudArrowDown,\n  faCloudDownload: faCloudDownload,\n  faCloudDownloadAlt: faCloudDownloadAlt,\n  faTruckRampBox: faTruckRampBox,\n  faTruckLoading: faTruckLoading,\n  faAngleDown: faAngleDown,\n  faPlugCircleCheck: faPlugCircleCheck,\n  faWindowMaximize: faWindowMaximize,\n  faHandsHoldingCircle: faHandsHoldingCircle,\n  faLocationPin: faLocationPin,\n  faMapMarker: faMapMarker,\n  faBowlingBall: faBowlingBall,\n  faCartFlatbed: faCartFlatbed,\n  faDollyFlatbed: faDollyFlatbed,\n  faHouseUser: faHouseUser,\n  faHomeUser: faHomeUser,\n  faGhost: faGhost,\n  faCommentNodes: faCommentNodes,\n  faPersonArrowDownToLine: faPersonArrowDownToLine,\n  faPlugCirclePlus: faPlugCirclePlus,\n  faPersonSwimming: faPersonSwimming,\n  faSwimmer: faSwimmer,\n  faCommentDots: faCommentDots,\n  faCommenting: faCommenting,\n  faChartPie: faChartPie,\n  faPieChart: faPieChart,\n  faFrog: faFrog,\n  faWineBottle: faWineBottle,\n  faInbox: faInbox,\n  faSquareH: faSquareH,\n  faHSquare: faHSquare,\n  faHouseMedical: faHouseMedical,\n  faCircleChevronRight: faCircleChevronRight,\n  faChevronCircleRight: faChevronCircleRight,\n  faFileCsv: faFileCsv,\n  faHatCowboy: faHatCowboy,\n  faFaceGrinTongueWink: faFaceGrinTongueWink,\n  faGrinTongueWink: faGrinTongueWink,\n  faL: faL,\n  faArrowDownShortWide: faArrowDownShortWide,\n  faSortAmountDesc: faSortAmountDesc,\n  faSortAmountDownAlt: faSortAmountDownAlt,\n  faHourglassHalf: faHourglassHalf,\n  faHourglass2: faHourglass2,\n  faSpoon: faSpoon,\n  faUtensilSpoon: faUtensilSpoon,\n  faCreditCard: faCreditCard,\n  faCreditCardAlt: faCreditCardAlt,\n  faFileInvoiceDollar: faFileInvoiceDollar,\n  faSpaghettiMonsterFlying: faSpaghettiMonsterFlying,\n  faPastafarianism: faPastafarianism,\n  faMartiniGlassCitrus: faMartiniGlassCitrus,\n  faCocktail: faCocktail,\n  faBullhorn: faBullhorn,\n  faBoxTissue: faBoxTissue,\n  faMattressPillow: faMattressPillow,\n  faChevronLeft: faChevronLeft,\n  faCloudMoonRain: faCloudMoonRain,\n  faArrowDown19: faArrowDown19,\n  faSortNumericAsc: faSortNumericAsc,\n  faSortNumericDown: faSortNumericDown,\n  faHandSpock: faHandSpock,\n  faWandMagicSparkles: faWandMagicSparkles,\n  faMagicWandSparkles: faMagicWandSparkles,\n  faCommentMedical: faCommentMedical,\n  faBellSlash: faBellSlash,\n  faHandshakeSlash: faHandshakeSlash,\n  faHandshakeAltSlash: faHandshakeAltSlash,\n  faHandshakeSimpleSlash: faHandshakeSimpleSlash,\n  faBottleWater: faBottleWater,\n  faDiceD20: faDiceD20,\n  faArrowDownZA: faArrowDownZA,\n  faSortAlphaDesc: faSortAlphaDesc,\n  faSortAlphaDownAlt: faSortAlphaDownAlt,\n  faBrush: faBrush,\n  faPersonWalkingDashedLineArrowRight: faPersonWalkingDashedLineArrowRight,\n  faArrowUpShortWide: faArrowUpShortWide,\n  faSortAmountUpAlt: faSortAmountUpAlt,\n  faGripVertical: faGripVertical,\n  faGridVertical: faGridVertical,\n  faCarTunnel: faCarTunnel,\n  faChartColumn: faChartColumn,\n  faCapricorn: faCapricorn,\n  faTruckArrowRight: faTruckArrowRight,\n  faTv: faTv,\n  faTelevision: faTelevision,\n  faTvAlt: faTvAlt,\n  faSection: faSection,\n  faPeace: faPeace,\n  faStar: faStar,\n  faFlag: faFlag,\n  faTriangleExclamation: faTriangleExclamation,\n  faExclamationTriangle: faExclamationTriangle,\n  faWarning: faWarning,\n  faSchoolCircleExclamation: faSchoolCircleExclamation,\n  faGraduationCap: faGraduationCap,\n  faMortarBoard: faMortarBoard,\n  faStore: faStore,\n  faUserAstronaut: faUserAstronaut,\n  faBuildingFlag: faBuildingFlag,\n  faMugSaucer: faMugSaucer,\n  faCoffee: faCoffee,\n  faLemon: faLemon,\n  faCaravan: faCaravan,\n  faQ: faQ,\n  faLock: faLock,\n  faPaintRoller: faPaintRoller,\n  faVolumeHigh: faVolumeHigh,\n  faVolumeUp: faVolumeUp,\n  faFolderPlus: faFolderPlus,\n  faMercury: faMercury,\n  faAnchor: faAnchor,\n  faSquareParking: faSquareParking,\n  faParking: faParking,\n  faHanukiah: faHanukiah,\n  faRotateLeft: faRotateLeft,\n  faRotateBack: faRotateBack,\n  faRotateBackward: faRotateBackward,\n  faUndoAlt: faUndoAlt,\n  faHeading: faHeading,\n  faHeader: faHeader,\n  faCrosshairs: faCrosshairs,\n  faCircleNodes: faCircleNodes,\n  faWindowRestore: faWindowRestore,\n  faR: faR,\n  faFilterCircleXmark: faFilterCircleXmark,\n  faGopuram: faGopuram,\n  faHeartCircleMinus: faHeartCircleMinus,\n  faStarOfLife: faStarOfLife,\n  faBusinessTime: faBusinessTime,\n  faBriefcaseClock: faBriefcaseClock,\n  faFireExtinguisher: faFireExtinguisher,\n  faArrowDownLong: faArrowDownLong,\n  faLongArrowDown: faLongArrowDown,\n  faUserMinus: faUserMinus,\n  faMoneyCheck: faMoneyCheck,\n  faHouseLaptop: faHouseLaptop,\n  faLaptopHouse: faLaptopHouse,\n  faDownload: faDownload,\n  faSagittarius: faSagittarius,\n  faCouch: faCouch,\n  faRoadLock: faRoadLock,\n  faScissors: faScissors,\n  faCut: faCut,\n  faBug: faBug,\n  faArrowRightFromBracket: faArrowRightFromBracket,\n  faSignOut: faSignOut,\n  faHandHoldingHand: faHandHoldingHand,\n  faStroopwafel: faStroopwafel,\n  faChild: faChild,\n  faIceCream: faIceCream,\n  faComputerMouse: faComputerMouse,\n  faMouse: faMouse,\n  faFaucet: faFaucet,\n  faAward: faAward,\n  faPersonDrowning: faPersonDrowning,\n  faCameraRotate: faCameraRotate,\n  faFaceGrinHearts: faFaceGrinHearts,\n  faGrinHearts: faGrinHearts,\n  faFileFragment: faFileFragment,\n  faPersonMilitaryRifle: faPersonMilitaryRifle,\n  faToggleOn: faToggleOn,\n  faLungsVirus: faLungsVirus,\n  faTableTennisPaddleBall: faTableTennisPaddleBall,\n  faPingPongPaddleBall: faPingPongPaddleBall,\n  faTableTennis: faTableTennis,\n  faBoxesPacking: faBoxesPacking,\n  faPersonChalkboard: faPersonChalkboard,\n  faDiceTwo: faDiceTwo,\n  faArrowRightArrowLeft: faArrowRightArrowLeft,\n  faExchange: faExchange,\n  faFootball: faFootball,\n  faFootballBall: faFootballBall,\n  faTruckMonster: faTruckMonster,\n  faAsterisk: faAsterisk,\n  faBatteryFull: faBatteryFull,\n  faBattery: faBattery,\n  faBattery5: faBattery5,\n  faChildDress: faChildDress,\n  faFaceKissBeam: faFaceKissBeam,\n  faKissBeam: faKissBeam,\n  faTrashCanArrowUp: faTrashCanArrowUp,\n  faTrashRestoreAlt: faTrashRestoreAlt,\n  faFont: faFont,\n  faBoreHole: faBoreHole,\n  faVirusCovid: faVirusCovid,\n  faFilePdf: faFilePdf,\n  faLanguage: faLanguage,\n  faShieldHalved: faShieldHalved,\n  faShieldAlt: faShieldAlt,\n  faCaretUp: faCaretUp,\n  faFilePen: faFilePen,\n  faFileEdit: faFileEdit,\n  faPersonBiking: faPersonBiking,\n  faBiking: faBiking,\n  faBookOpenReader: faBookOpenReader,\n  faBookReader: faBookReader,\n  faGlassWaterDroplet: faGlassWaterDroplet,\n  faTowerBroadcast: faTowerBroadcast,\n  faBroadcastTower: faBroadcastTower,\n  faMinimize: faMinimize,\n  faCompressArrowsAlt: faCompressArrowsAlt,\n  faArrowRightToCity: faArrowRightToCity,\n  faLaptopMedical: faLaptopMedical,\n  faBreadSlice: faBreadSlice,\n  faGlobe: faGlobe,\n  faFolderMinus: faFolderMinus,\n  faMaskFace: faMaskFace,\n  faBong: faBong,\n  faRoadBridge: faRoadBridge,\n  faArrowUp91: faArrowUp91,\n  faSortNumericUpAlt: faSortNumericUpAlt,\n  faMountainCity: faMountainCity,\n  faArrowDown91: faArrowDown91,\n  faSortNumericDesc: faSortNumericDesc,\n  faSortNumericDownAlt: faSortNumericDownAlt,\n  faFaceGrinWide: faFaceGrinWide,\n  faGrinAlt: faGrinAlt,\n  faPoop: faPoop,\n  faDharmachakra: faDharmachakra,\n  faBatteryQuarter: faBatteryQuarter,\n  faBattery2: faBattery2,\n  faAnkh: faAnkh,\n  faDiamond: faDiamond,\n  faSubscript: faSubscript,\n  faRupeeSign: faRupeeSign,\n  faRupee: faRupee,\n  faPersonRifle: faPersonRifle,\n  faD: faD,\n  faSquareNfi: faSquareNfi,\n  faTeeth: faTeeth,\n  faMagnifyingGlassDollar: faMagnifyingGlassDollar,\n  faSearchDollar: faSearchDollar,\n  faDumpsterFire: faDumpsterFire,\n  faUpload: faUpload,\n  faUserSlash: faUserSlash,\n  faUserAltSlash: faUserAltSlash,\n  faUserLargeSlash: faUserLargeSlash,\n  faArrowLeft: faArrowLeft,\n  faVialVirus: faVialVirus,\n  faCheckDouble: faCheckDouble,\n  faPaw: faPaw,\n  faHelmetSafety: faHelmetSafety,\n  faHardHat: faHardHat,\n  faHatHard: faHatHard,\n  faE: faE,\n  faFaceLaughSquint: faFaceLaughSquint,\n  faLaughSquint: faLaughSquint,\n  faDownLeftAndUpRightToCenter: faDownLeftAndUpRightToCenter,\n  faCompressAlt: faCompressAlt,\n  faGifts: faGifts,\n  faBed: faBed,\n  faMoneyBillTransfer: faMoneyBillTransfer,\n  faPersonRunning: faPersonRunning,\n  faRunning: faRunning,\n  faCircleChevronDown: faCircleChevronDown,\n  faChevronCircleDown: faChevronCircleDown,\n  faUserNurse: faUserNurse,\n  faFaceKissWinkHeart: faFaceKissWinkHeart,\n  faKissWinkHeart: faKissWinkHeart,\n  faFill: faFill,\n  faMoneyBill1Wave: faMoneyBill1Wave,\n  faMoneyBillWaveAlt: faMoneyBillWaveAlt,\n  faLandmark: faLandmark,\n  faMusic: faMusic,\n  faBookMedical: faBookMedical,\n  faShuffle: faShuffle,\n  faRandom: faRandom,\n  faUnderline: faUnderline,\n  faBuildingUser: faBuildingUser,\n  faRobot: faRobot,\n  faPlus: faPlus,\n  faAdd: faAdd,\n  faCopy: faCopy,\n  faChessKing: faChessKing,\n  faHouseFloodWater: faHouseFloodWater,\n  faBitcoinSign: faBitcoinSign,\n  faBox: faBox,\n  faSquarePlus: faSquarePlus,\n  faPlusSquare: faPlusSquare,\n  faArrowsLeftRight: faArrowsLeftRight,\n  faArrowsH: faArrowsH,\n  faFan: faFan,\n  faCrow: faCrow,\n  faFileCircleCheck: faFileCircleCheck,\n  faLinkSlash: faLinkSlash,\n  faChainBroken: faChainBroken,\n  faChainSlash: faChainSlash,\n  faUnlink: faUnlink,\n  faArrowRotateRight: faArrowRotateRight,\n  faArrowRightRotate: faArrowRightRotate,\n  faArrowRotateForward: faArrowRotateForward,\n  faRedo: faRedo,\n  faPenClip: faPenClip,\n  faPenAlt: faPenAlt,\n  faDoorClosed: faDoorClosed,\n  faArrowDownWideShort: faArrowDownWideShort,\n  faSortAmountAsc: faSortAmountAsc,\n  faSortAmountDown: faSortAmountDown,\n  faCaretDown: faCaretDown,\n  faK: faK,\n  faCheckToSlot: faCheckToSlot,\n  faVoteYea: faVoteYea,\n  faFishFins: faFishFins,\n  faCompress: faCompress,\n  faArrowUpAZ: faArrowUpAZ,\n  faSortAlphaUp: faSortAlphaUp,\n  faUserGraduate: faUserGraduate,\n  faFileCode: faFileCode,\n  faSoap: faSoap,\n  faRecycle: faRecycle,\n  faFaceGrinWink: faFaceGrinWink,\n  faGrinWink: faGrinWink,\n  faWaterLadder: faWaterLadder,\n  faLadderWater: faLadderWater,\n  faSwimmingPool: faSwimmingPool,\n  faGemini: faGemini,\n  faTowerCell: faTowerCell,\n  faColonSign: faColonSign,\n  faLaptopFile: faLaptopFile,\n  faBahai: faBahai,\n  faHaykal: faHaykal,\n  faMoneyBill1: faMoneyBill1,\n  faMoneyBillAlt: faMoneyBillAlt,\n  faCloudBolt: faCloudBolt,\n  faThunderstorm: faThunderstorm,\n  faEthernet: faEthernet,\n  faHryvniaSign: faHryvniaSign,\n  faHryvnia: faHryvnia,\n  faEyeSlash: faEyeSlash,\n  faCartFlatbedSuitcase: faCartFlatbedSuitcase,\n  faLuggageCart: faLuggageCart,\n  faRadiation: faRadiation,\n  faFileWord: faFileWord,\n  faBedPulse: faBedPulse,\n  faProcedures: faProcedures,\n  faTents: faTents,\n  faMugHot: faMugHot,\n  faBolt: faBolt,\n  faZap: faZap,\n  faJar: faJar,\n  faTruckPlane: faTruckPlane,\n  faHandHoldingHeart: faHandHoldingHeart,\n  faArrowRotateLeft: faArrowRotateLeft,\n  faArrowLeftRotate: faArrowLeftRotate,\n  faArrowRotateBack: faArrowRotateBack,\n  faArrowRotateBackward: faArrowRotateBackward,\n  faUndo: faUndo,\n  faFaceAngry: faFaceAngry,\n  faAngry: faAngry,\n  faBurst: faBurst,\n  faZ: faZ,\n  faBandage: faBandage,\n  faBandAid: faBandAid,\n  faPlaneCircleExclamation: faPlaneCircleExclamation,\n  faBusSide: faBusSide,\n  faBugs: faBugs,\n  faBeerMugEmpty: faBeerMugEmpty,\n  faBeer: faBeer,\n  faPersonCircleCheck: faPersonCircleCheck,\n  faStapler: faStapler,\n  faHouseMedicalCircleCheck: faHouseMedicalCircleCheck,\n  faNairaSign: faNairaSign,\n  faWifi: faWifi,\n  faWifi3: faWifi3,\n  faWifiStrong: faWifiStrong,\n  faMoneyCheckDollar: faMoneyCheckDollar,\n  faMoneyCheckAlt: faMoneyCheckAlt,\n  faEyeLowVision: faEyeLowVision,\n  faLowVision: faLowVision,\n  faCircleArrowUp: faCircleArrowUp,\n  faArrowCircleUp: faArrowCircleUp,\n  faCameraRetro: faCameraRetro,\n  faCapsules: faCapsules,\n  faPoo: faPoo,\n  faVolume: faVolume,\n  faVolumeMedium: faVolumeMedium,\n  faElevator: faElevator,\n  faTag: faTag,\n  faFileCircleMinus: faFileCircleMinus,\n  faDownLong: faDownLong,\n  faLongArrowAltDown: faLongArrowAltDown,\n  faCompactDisc: faCompactDisc,\n  faSuitcaseRolling: faSuitcaseRolling,\n  faBookQuran: faBookQuran,\n  faQuran: faQuran,\n  faPhoneSlash: faPhoneSlash,\n  faRoadCircleCheck: faRoadCircleCheck,\n  faShopLock: faShopLock,\n  faImagePortrait: faImagePortrait,\n  faPortrait: faPortrait,\n  faBridgeLock: faBridgeLock,\n  faHammer: faHammer,\n  faArrowUp19: faArrowUp19,\n  faSortNumericUp: faSortNumericUp,\n  faChessKnight: faChessKnight,\n  faHouseFloodWaterCircleArrowRight: faHouseFloodWaterCircleArrowRight,\n  faArrowUpRightFromSquare: faArrowUpRightFromSquare,\n  faExternalLink: faExternalLink,\n  faArrowDownUpAcrossLine: faArrowDownUpAcrossLine,\n  faFaceGrinBeam: faFaceGrinBeam,\n  faGrinBeam: faGrinBeam,\n  faRectangleAd: faRectangleAd,\n  faAd: faAd,\n  faBookTanakh: faBookTanakh,\n  faTanakh: faTanakh,\n  faHotTubPerson: faHotTubPerson,\n  faHotTub: faHotTub,\n  faFileHalfDashed: faFileHalfDashed,\n  faOutdent: faOutdent,\n  faDedent: faDedent,\n  faHandPeace: faHandPeace,\n  faHeadSideVirus: faHeadSideVirus,\n  faCompass: faCompass,\n  faPenNib: faPenNib,\n  faTentArrowsDown: faTentArrowsDown,\n  faForwardFast: faForwardFast,\n  faFastForward: faFastForward,\n  faCrop: faCrop,\n  faWhiskeyGlass: faWhiskeyGlass,\n  faGlassWhiskey: faGlassWhiskey,\n  faSquare: faSquare,\n  faFaceGrin: faFaceGrin,\n  faGrin: faGrin,\n  faFileContract: faFileContract,\n  faAngleUp: faAngleUp,\n  faFaceSmile: faFaceSmile,\n  faSmile: faSmile,\n  faPersonDressBurst: faPersonDressBurst,\n  faDivide: faDivide,\n  faCodeFork: faCodeFork,\n  faHouseFlag: faHouseFlag,\n  faBuildingColumns: faBuildingColumns,\n  faBank: faBank,\n  faInstitution: faInstitution,\n  faMuseum: faMuseum,\n  faUniversity: faUniversity,\n  faRug: faRug,\n  faCodeMerge: faCodeMerge,\n  faHouseTsunami: faHouseTsunami,\n  faMagnifyingGlassChart: faMagnifyingGlassChart,\n  faUmbrella: faUmbrella,\n  faHillRockslide: faHillRockslide,\n  faUserSecret: faUserSecret,\n  faPager: faPager,\n  faBriefcase: faBriefcase,\n  faTrowelBricks: faTrowelBricks,\n  faSocks: faSocks,\n  faT: faT,\n  faMicrochip: faMicrochip,\n  faTruckMedical: faTruckMedical,\n  faAmbulance: faAmbulance,\n  faOm: faOm,\n  faMosquitoNet: faMosquitoNet,\n  faPrescriptionBottle: faPrescriptionBottle,\n  faUsersGear: faUsersGear,\n  faUsersCog: faUsersCog,\n  faRoadCircleExclamation: faRoadCircleExclamation,\n  faPause: faPause,\n  faStaffSnake: faStaffSnake,\n  faRodAsclepius: faRodAsclepius,\n  faRodSnake: faRodSnake,\n  faStaffAesculapius: faStaffAesculapius,\n  faPiggyBank: faPiggyBank,\n  faMonument: faMonument,\n  faAnglesRight: faAnglesRight,\n  faAngleDoubleRight: faAngleDoubleRight,\n  faDesktop: faDesktop,\n  faDesktopAlt: faDesktopAlt,\n  faPlaneCircleXmark: faPlaneCircleXmark,\n  faRetweet: faRetweet,\n  faUserGear: faUserGear,\n  faUserCog: faUserCog,\n  faBorderAll: faBorderAll,\n  faCoins: faCoins,\n  faMarsStroke: faMarsStroke,\n  faHandshakeAngle: faHandshakeAngle,\n  faHandsHelping: faHandsHelping,\n  faArrowDown: faArrowDown,\n  faLocationDot: faLocationDot,\n  faMapMarkerAlt: faMapMarkerAlt,\n  faPlugCircleExclamation: faPlugCircleExclamation,\n  faCookieBite: faCookieBite,\n  faScrewdriverWrench: faScrewdriverWrench,\n  faTools: faTools,\n  faIndent: faIndent,\n  faBars: faBars,\n  faNavicon: faNavicon,\n  faHandsPraying: faHandsPraying,\n  faPrayingHands: faPrayingHands,\n  faViruses: faViruses,\n  faSchoolFlag: faSchoolFlag,\n  faTrademark: faTrademark,\n  faFireBurner: faFireBurner,\n  faFaceSmileBeam: faFaceSmileBeam,\n  faSmileBeam: faSmileBeam,\n  faTentArrowLeftRight: faTentArrowLeftRight,\n  faRoute: faRoute,\n  faAnglesUp: faAnglesUp,\n  faAngleDoubleUp: faAngleDoubleUp,\n  faBucket: faBucket,\n  faLessThanEqual: faLessThanEqual,\n  faFolderClosed: faFolderClosed,\n  faPersonThroughWindow: faPersonThroughWindow,\n  faSchoolLock: faSchoolLock,\n  faPersonBurst: faPersonBurst,\n  faLeftLong: faLeftLong,\n  faLongArrowAltLeft: faLongArrowAltLeft,\n  faLocationCrosshairs: faLocationCrosshairs,\n  faLocation: faLocation,\n  faPersonDotsFromLine: faPersonDotsFromLine,\n  faDiagnoses: faDiagnoses,\n  faGaugeSimpleHigh: faGaugeSimpleHigh,\n  faTachometer: faTachometer,\n  faTachometerFast: faTachometerFast,\n  faAnglesLeft: faAnglesLeft,\n  faAngleDoubleLeft: faAngleDoubleLeft,\n  faUpDown: faUpDown,\n  faArrowsAltV: faArrowsAltV,\n  faBatteryEmpty: faBatteryEmpty,\n  faBattery0: faBattery0,\n  faKeyboard: faKeyboard,\n  faCookie: faCookie,\n  faStopwatch: faStopwatch,\n  faEject: faEject,\n  faSatelliteDish: faSatelliteDish,\n  faFaceRollingEyes: faFaceRollingEyes,\n  faMehRollingEyes: faMehRollingEyes,\n  faListCheck: faListCheck,\n  faTasks: faTasks,\n  faSackXmark: faSackXmark,\n  faHashtag: faHashtag,\n  faTrain: faTrain,\n  faGamepad: faGamepad,\n  faFileExport: faFileExport,\n  faArrowRightFromFile: faArrowRightFromFile,\n  faFaceGrimace: faFaceGrimace,\n  faGrimace: faGrimace,\n  faTrainSubway: faTrainSubway,\n  faSubway: faSubway,\n  faCircleDot: faCircleDot,\n  faDotCircle: faDotCircle,\n  faObjectGroup: faObjectGroup,\n  faShip: faShip,\n  faC: faC,\n  faSquarePhone: faSquarePhone,\n  faPhoneSquare: faPhoneSquare,\n  faRulerCombined: faRulerCombined,\n  faArrowsRotate: faArrowsRotate,\n  faRefresh: faRefresh,\n  faSync: faSync,\n  faPersonDress: faPersonDress,\n  faFemale: faFemale,\n  faBookOpen: faBookOpen,\n  faFolderTree: faFolderTree,\n  faVirgo: faVirgo,\n  faBoxArchive: faBoxArchive,\n  faArchive: faArchive,\n  faTentArrowDownToLine: faTentArrowDownToLine,\n  faQrcode: faQrcode,\n  faDragon: faDragon,\n  faHourglassEnd: faHourglassEnd,\n  faHourglass3: faHourglass3,\n  faGrip: faGrip,\n  faGridHorizontal: faGridHorizontal,\n  faGripHorizontal: faGripHorizontal,\n  faBorderTopLeft: faBorderTopLeft,\n  faBorderStyle: faBorderStyle,\n  faListUl: faListUl,\n  faListDots: faListDots,\n  faPeopleRobbery: faPeopleRobbery,\n  faMobileButton: faMobileButton,\n  faArrowDownAZ: faArrowDownAZ,\n  faSortAlphaAsc: faSortAlphaAsc,\n  faSortAlphaDown: faSortAlphaDown,\n  faMoneyBill: faMoneyBill,\n  faCircleMinus: faCircleMinus,\n  faMinusCircle: faMinusCircle,\n  faArrowPointer: faArrowPointer,\n  faMousePointer: faMousePointer,\n  faSquareShareNodes: faSquareShareNodes,\n  faShareAltSquare: faShareAltSquare,\n  faTableCellsLarge: faTableCellsLarge,\n  faThLarge: faThLarge,\n  faCat: faCat,\n  faCalendarWeek: faCalendarWeek,\n  faCodeCompare: faCodeCompare,\n  faLeo: faLeo,\n  faRoadCircleXmark: faRoadCircleXmark,\n  faPallet: faPallet,\n  faCakeCandles: faCakeCandles,\n  faBirthdayCake: faBirthdayCake,\n  faCake: faCake,\n  faBugSlash: faBugSlash,\n  faTarp: faTarp,\n  faDiagramPredecessor: faDiagramPredecessor,\n  faFaceFlushed: faFaceFlushed,\n  faFlushed: faFlushed,\n  faDiagramNext: faDiagramNext,\n  faAnchorCircleXmark: faAnchorCircleXmark,\n  faPersonCircleXmark: faPersonCircleXmark,\n  faSpa: faSpa,\n  faLotus: faLotus,\n  faAries: faAries,\n  faBarsProgress: faBarsProgress,\n  faTasksAlt: faTasksAlt,\n  faHeartCircleCheck: faHeartCircleCheck,\n  faMarsStrokeRight: faMarsStrokeRight,\n  faMarsStrokeH: faMarsStrokeH,\n  faTowerObservation: faTowerObservation,\n  faSterlingSign: faSterlingSign,\n  faGbp: faGbp,\n  faPoundSign: faPoundSign,\n  faFaucetDrip: faFaucetDrip,\n  faCircleInfo: faCircleInfo,\n  faInfoCircle: faInfoCircle,\n  faFeather: faFeather,\n  faBowlRice: faBowlRice,\n  faStarHalfStroke: faStarHalfStroke,\n  faStarHalfAlt: faStarHalfAlt,\n  faTemperatureArrowDown: faTemperatureArrowDown,\n  faTemperatureDown: faTemperatureDown,\n  faMaskVentilator: faMaskVentilator,\n  faFileVideo: faFileVideo,\n  faArrowTrendDown: faArrowTrendDown,\n  faOilCan: faOilCan,\n  faPeopleCarryBox: faPeopleCarryBox,\n  faPeopleCarry: faPeopleCarry,\n  faChair: faChair,\n  faWind: faWind,\n  faLayerGroup: faLayerGroup,\n  faHeadSideMask: faHeadSideMask,\n  faHands: faHands,\n  faSignLanguage: faSignLanguage,\n  faSigning: faSigning,\n  faTablets: faTablets,\n  faWeightHanging: faWeightHanging,\n  faDice: faDice,\n  faShopSlash: faShopSlash,\n  faStoreAltSlash: faStoreAltSlash,\n  faSortDown: faSortDown,\n  faSortDesc: faSortDesc,\n  faPesetaSign: faPesetaSign,\n  faTabletScreenButton: faTabletScreenButton,\n  faTabletAlt: faTabletAlt,\n  faHandHoldingDollar: faHandHoldingDollar,\n  faHandHoldingUsd: faHandHoldingUsd,\n  faShield: faShield,\n  faShieldBlank: faShieldBlank,\n  faFaceLaugh: faFaceLaugh,\n  faLaugh: faLaugh,\n  faHandsHolding: faHandsHolding,\n  faCartShopping: faCartShopping,\n  faShoppingCart: faShoppingCart,\n  faOctagon: faOctagon,\n  faHandPointer: faHandPointer,\n  faRegistered: faRegistered,\n  faHouseSignal: faHouseSignal,\n  faBangladeshiTakaSign: faBangladeshiTakaSign\n};\n\nexport { icons as fas, prefix, fa0, fa1, fa2, fa3, fa4, fa5, fa6, fa7, fa8, fa9, faDollarSign, faDollar, faUsd, faDog, faTruckMoving, faRotate, faSyncAlt, faSquareMinus, faMinusSquare, faAlignJustify, faCalendarCheck, faFaceKiss, faKiss, faKitchenSet, faDna, faChildReaching, faPaste, faFileClipboard, faMeteor, faGears, faCogs, faFileCirclePlus, faIcicles, faArrowTrendUp, faHexagonNodesBolt, faQuestion, faHandsBound, faPersonWalkingLuggage, faFileArrowDown, faFileDownload, faPersonBooth, faLocust, faRightLong, faLongArrowAltRight, faTruckDroplet, faHandHoldingMedical, faHandPointLeft, faCalculator, faMinus, faSubtract, faArrowUpZA, faSortAlphaUpAlt, faMicrophoneSlash, faSquarePen, faPenSquare, faPencilSquare, faHandFist, faFistRaised, faCommentSms, faSms, faSimCard, faScaleBalanced, faBalanceScale, faCar, faAutomobile, faCropSimple, faCropAlt, faMedal, faScroll, faFileExcel, faFilter, faDrum, faMapPin, faScaleUnbalancedFlip, faBalanceScaleRight, faArrowsToCircle, faEnvelope, faBaby, faSquareCaretDown, faCaretSquareDown, faTent, faA, faParachuteBox, faCartArrowDown, faBridgeCircleExclamation, faCloudArrowUp, faCloudUpload, faCloudUploadAlt, faAt, faIndianRupeeSign, faIndianRupee, faInr, faTruck, faChalkboardUser, faChalkboardTeacher, faUserCheck, faUserNinja, faPlantWilt, faWeightScale, faWeight, faCaretRight, faFlorinSign, faBell, faLariSign, faMillSign, faPersonSnowboarding, faSnowboarding, faTty, faTeletype, faUsersRectangle, faMobile, faMobileAndroid, faMobilePhone, faArrowsTurnToDots, faExclamation, faChurch, faToggleOff, faShoePrints, faFileCircleExclamation, faWallet, faMessage, faCommentAlt, faTrophy, faFaceDizzy, faDizzy, faBacteria, faEarDeaf, faDeaf, faDeafness, faHardOfHearing, faPeopleArrows, faPeopleArrowsLeftRight, faHandsClapping, faVirusCovidSlash, faCalendarDays, faCalendarAlt, faDiamondTurnRight, faDirections, faHandPointUp, faBezierCurve, faPersonHalfDress, faSquarePollHorizontal, faPollH, faSchoolCircleXmark, faHandLizard, faChalkboard, faBlackboard, faUpRightFromSquare, faExternalLinkAlt, faSquareFull, faClover, faTeethOpen, faBarsStaggered, faReorder, faStream, faWarehouse, faSwatchbook, faCampground, faPersonWalkingArrowRight, faGlasses, faCirclePause, faPauseCircle, faMemory, faGift, faMoneyBillWheat, faDungeon, faSuitcaseMedical, faMedkit, faPersonCane, faGauge, faDashboard, faGaugeMed, faTachometerAltAverage, faEnvelopeOpenText, faToolbox, faPowerOff, faSignal, faSignal5, faSignalPerfect, faArrowsSpin, faJoint, faBraille, faBasketShopping, faShoppingBasket, faBridge, faPlaneArrival, faCashRegister, faRing, faAquarius, faShareNodes, faShareAlt, faPersonCircleExclamation, faBinoculars, faKipSign, faHardDrive, faHdd, faRankingStar, faUserTie, faEllipsis, faEllipsisH, faStoreSlash, faPercent, faPercentage, faFileZipper, faFileArchive, faDisplay, faIcons, faHeartMusicCameraBolt, faRulerVertical, faMapLocationDot, faMapMarkedAlt, faHeartCrack, faHeartBroken, faCow, faRss, faFeed, faMagnifyingGlass, faSearch, faCloudMoon, faBoxesStacked, faBoxes, faBoxesAlt, faCodeBranch, faBan, faCancel, faJugDetergent, faReply, faMailReply, faSunPlantWilt, faBacterium, faRecordVinyl, faFloppyDisk, faSave, faToiletsPortable, faO, faPalette, faUnlock, faEarListen, faAssistiveListeningSystems, faCodePullRequest, faKey, faSkull, faMarsStrokeUp, faMarsStrokeV, faFireFlameSimple, faBurn, faTree, faSmog, faS, faJedi, faPersonHiking, faHiking, faArrowsUpToLine, faMarsDouble, faThermometer, faPaintbrush, faPaintBrush, faNeuter, faSquarePhoneFlip, faPhoneSquareAlt, faFaceGrinTongueSquint, faGrinTongueSquint, faCommentDollar, faHippo, faBowlFood, faSquareVirus, faCloudSunRain, faArrowRightLong, faLongArrowRight, faBuildingUn, faTemperatureLow, faDoorOpen, faAlignLeft, faCamera, faCameraAlt, faUsersRays, faRainbow, faSitemap, faFaceGrinStars, faGrinStars, faSortUp, faSortAsc, faEye, faCaretLeft, faAppleWhole, faAppleAlt, faScrollTorah, faTorah, faHouseLock, faArrowsLeftRightToLine, faTrash, faFaceSadTear, faSadTear, faFax, faPersonCirclePlus, faHamsa, faPersonCircleQuestion, faClipboardCheck, faShareFromSquare, faShareSquare, faReceipt, faEquals, faChevronUp, faVirusSlash, faSlash, faExpand, faNoteSticky, faStickyNote, faTableColumns, faColumns, faPersonShelter, faCircleNotch, faWater, faDeleteLeft, faBackspace, faBroomBall, faQuidditch, faQuidditchBroomBall, faJ, faShuttleSpace, faSpaceShuttle, faYinYang, faStop, faTrowel, faHandBackFist, faHandRock, faTemperatureHigh, faGreaterThan, faCrutch, faSeptagon, faHeptagon, faStreetView, faWaveSquare, faAngleLeft, faScrewdriver, faTractor, faBridgeCircleXmark, faVials, faStethoscope, faPodcast, faArrowUpRightDots, faChessQueen, faAnchorCircleExclamation, faEllipsisVertical, faEllipsisV, faHeartCircleExclamation, faBuildingCircleExclamation, faPersonArrowUpFromLine, faNotEqual, faTrainTram, faPlaneDeparture, faRightToBracket, faSignInAlt, faSdCard, faHouseCircleExclamation, faShekelSign, faIls, faShekel, faSheqel, faSheqelSign, faRadio, faHandDots, faAllergies, faBookSkull, faBookDead, faUnlockKeyhole, faUnlockAlt, faFileArrowUp, faFileUpload, faFaceGrinTears, faGrinTears, faPenToSquare, faEdit, faEarthEurope, faGlobeEurope, faFaceGrinBeamSweat, faGrinBeamSweat, faCircleHalfStroke, faAdjust, faPersonMilitaryToPerson, faTableCellsColumnLock, faTruckFieldUn, faClock, faClockFour, faBook, faFaceLaughWink, faLaughWink, faCloudMeatball, faChartArea, faAreaChart, faRupiahSign, faTextWidth, faSatellite, faMagnifyingGlassMinus, faSearchMinus, faPeopleGroup, faSquareBinary, faMasksTheater, faTheaterMasks, faCartPlus, faHandsAslInterpreting, faAmericanSignLanguageInterpreting, faAslInterpreting, faHandsAmericanSignLanguageInterpreting, faTableCellsRowUnlock, faRocket, faShrimp, faTengeSign, faTenge, faHouseChimneyMedical, faClinicMedical, faUsersSlash, faPaperPlane, faBookAtlas, faAtlas, faTable, faHeart, faCircleChevronUp, faChevronCircleUp, faBatteryHalf, faBattery3, faFontAwesome, faFontAwesomeFlag, faFontAwesomeLogoFull, faHandcuffs, faHatCowboySide, faIndustry, faLinesLeaning, faPassport, faInfinity, faClone, faForward, faM, faRoadSpikes, faMountain, faChess, faTemperatureThreeQuarters, faTemperature3, faThermometer3, faThermometerThreeQuarters, faB, faShieldVirus, faLitecoinSign, faDiceD6, faGripLinesVertical, faGolfBallTee, faGolfBall, faHexagon, faFolderOpen, faKaaba, faHandHolding, faSingleQuoteRight, faBottleDroplet, faWindowMinimize, faChevronRight, faEgg, faLandmarkDome, faLandmarkAlt, faWorm, faUserInjured, faStrikethrough, faBlog, faStopwatch20, faTruckPickup, faSeedling, faSprout, faTransgender, faTransgenderAlt, faStarHalf, faPhotoFilm, faPhotoVideo, faPictureInPicture, faPumpMedical, faFire, faMagnifyingGlassPlus, faSearchPlus, faFlask, faAlignRight, faCableCar, faTram, faKitMedical, faFirstAid, faGripLines, faBurger, faHamburger, faSnowman, faHotel, faPrint, faVolleyball, faVolleyballBall, faTrafficLight, faPlaneCircleCheck, faUsers, faCertificate, faAlarmClock, faHelicopterSymbol, faHouseChimneyCrack, faHouseDamage, faPersonMilitaryPointing, faDatabase, faNewspaper, faCloudRain, faMaximize, faExpandArrowsAlt, faLocationArrow, faCity, faXRay, faUmbrellaBeach, faArrowRightToBracket, faSignIn, faHeadset, faSplotch, faUpLong, faLongArrowAltUp, faHexagonNodes, faHospital, faHospitalAlt, faHospitalWide, faPersonHarassing, faMoneyBillTrendUp, faPenRuler, faPencilRuler, faRepeat, faBone, faFireFlameCurved, faFireAlt, faBusSimple, faBusAlt, faVenusMars, faBlender, faU, faShare, faMailForward, faPhoneFlip, faPhoneAlt, faToiletPortable, faPersonPregnant, faLessThan, faSuperscript, faCircleStop, faStopCircle, faArrowsUpDown, faArrowsV, faPooStorm, faPooBolt, faVideoSlash, faSquareXmark, faTimesSquare, faXmarkSquare, faHandHoldingDroplet, faHandHoldingWater, faWonSign, faKrw, faWon, faObjectUngroup, faComment, faHillAvalanche, faArrowsToEye, faSnowplow, faChartGantt, faVideo, faVideoCamera, faChessPawn, faSynagogue, faBuildingCircleCheck, faCalendarPlus, faWheelchairMove, faWheelchairAlt, faUserShield, faBold, faHeartPulse, faHeartbeat, faSquareRootVariable, faSquareRootAlt, faHandsBubbles, faHandsWash, faMarker, faClipboard, faPlaceOfWorship, faCannabis, faPeopleRoof, faDisease, faBookBible, faBible, faChessBoard, faMars, faLaptop, faUserXmark, faUserTimes, faFlagUsa, faHandMiddleFinger, faMortarPestle, faHeadSideCough, faPlaneLock, faBatteryThreeQuarters, faBattery4, faFrancSign, faFilterCircleDollar, faFunnelDollar, faCheese, faCircleH, faHospitalSymbol, faSchool, faDiceFive, faTornado, faJetFighter, faFighterJet, faThumbsDown, faBroom, faFileImport, faArrowRightToFile, faUtensils, faCutlery, faIdBadge, faSpider, faMobileRetro, faSignsPost, faMapSigns, faGroupArrowsRotate, faArrowsSplitUpAndLeft, faFillDrip, faShieldHeart, faPersonSkiingNordic, faSkiingNordic, faSquareCheck, faCheckSquare, faBath, faBathtub, faChessBishop, faPrescriptionBottleMedical, faPrescriptionBottleAlt, faDrawPolygon, faVectorPolygon, faICursor, faHeartCirclePlus, faShieldDog, faGreaterThanEqual, faEnvelopeOpen, faMound, faVoicemail, faVest, faAudioDescription, faW, faEyeDropper, faEyeDropperEmpty, faEyedropper, faCircleXmark, faTimesCircle, faXmarkCircle, faTrailer, faTurkishLiraSign, faTry, faTurkishLira, faVolcano, faWandSparkles, faMicrophone, faCrown, faTentArrowTurnLeft, faTruckFast, faShippingFast, faUserPen, faUserEdit, faUserClock, faShower, faSquareCaretUp, faCaretSquareUp, faMapLocation, faMapMarked, faPenFancy, faEuroSign, faEur, faEuro, faHouseCircleXmark, faLiraSign, faYenSign, faCny, faJpy, faRmb, faYen, faBoxOpen, faTruckField, faLocationPinLock, faPersonPraying, faPray, faClipboardList, faSackDollar, faMountainSun, faArrowUpWideShort, faSortAmountUp, faUsersLine, faStarOfDavid, faNotesMedical, faAustralSign, faClipboardUser, faFileImage, faSquareCaretRight, faCaretSquareRight, faVial, faHelicopter, faMitten, faGasPump, faEnvelopeCircleCheck, faPersonSkating, faSkating, faSun, faBaseball, faBaseballBall, faImage, faNotdef, faBasketball, faBasketballBall, faPencil, faPencilAlt, faPersonWalkingArrowLoopLeft, faDiceSix, faAnglesDown, faAngleDoubleDown, faSyringe, faWheatAwn, faWheatAlt, faPlaneUp, faAlignCenter, faHockeyPuck, faCircleArrowLeft, faArrowCircleLeft, faPlugCircleBolt, faRestroom, faAnchorLock, faTimeline, faLightbulb, faCircleArrowRight, faArrowCircleRight, faMarsAndVenus, faNetworkWired, faBuildingShield, faCode, faFeatherPointed, faFeatherAlt, faFileCircleQuestion, faSignature, faEarthAmericas, faEarth, faEarthAmerica, faGlobeAmericas, faCarrot, faTemperatureFull, faTemperature4, faThermometer4, faThermometerFull, faTableCellsRowLock, faBoltLightning, faCloudShowersWater, faArrowUpLong, faLongArrowUp, faAddressCard, faContactCard, faVcard, faAngleRight, faFaceMeh, faMeh, faArrowUpFromGroundWater, faMap, faUserPlus, faVenus, faDiagramSuccessor, faHeadSideCoughSlash, faDiagramProject, faProjectDiagram, faTerminal, faHouseFire, faMask, faHurricane, faEarthAfrica, faGlobeAfrica, faThumbtack, faThumbTack, faHandPointDown, faFaceMehBlank, faMehBlank, faTemperatureEmpty, faTemperature0, faThermometer0, faThermometerEmpty, faBorderNone, faHighlighter, faMoneyBillWave, faToiletPaperSlash, faFileShield, faTextHeight, faFaceGrinTongue, faGrinTongue, faFileSignature, faBuildingWheat, faPlugCircleMinus, faFutbol, faFutbolBall, faSoccerBall, faCirclePlus, faPlusCircle, faBrazilianRealSign, faStarAndCrescent, faFaceSurprise, faSurprise, faHospitalUser, faArrowDownUpLock, faFolder, faFolderBlank, faHollyBerry, faVenusDouble, faClipboardQuestion, faHotdog, faArrowUpFromBracket, faMicroscope, faCloud, faBaseballBatBall, faCarRear, faCarAlt, faThumbtackSlash, faThumbTackSlash, faPlusMinus, faHouseCircleCheck, faCalendarDay, faLibra, faCircle, faMobileVibrate, faFaceGrinSquint, faGrinSquint, faUsersBetweenLines, faHouseMedicalCircleXmark, faTableList, faThList, faFlaskVial, faCircleExclamation, faExclamationCircle, faTaxi, faCab, faTextSlash, faRemoveFormat, faPeoplePulling, faBackward, faCarBurst, faCarCrash, faLink, faChain, faBackwardStep, faStepBackward, faX, faCircleUser, faUserCircle, faRectangleList, faListAlt, faHand, faHandPaper, faCancer, faVanShuttle, faShuttleVan, faStairs, faHorseHead, faVault, faClosedCaptioningSlash, faDrumSteelpan, faThumbsUp, faStamp, faMenorah, faChildren, faChartLine, faLineChart, faSquareEnvelope, faEnvelopeSquare, faBanSmoking, faSmokingBan, faTruckFront, faBuilding, faBullseye, faArrowLeftLong, faLongArrowLeft, faChessRook, faBlenderPhone, faArrowTurnUp, faLevelUp, faBicycle, faCircleArrowDown, faArrowCircleDown, faGear, faCog, faMarsAndVenusBurst, faOtter, faCircleChevronLeft, faChevronCircleLeft, faCircleQuestion, faQuestionCircle, faWalkieTalkie, faUserGroup, faUserFriends, faHouseChimney, faHomeLg, faRightFromBracket, faSignOutAlt, faFile, faPlaneSlash, faCloudShowersHeavy, faPersonFalling, faTurnDown, faLevelDownAlt, faUpRightAndDownLeftFromCenter, faExpandAlt, faUserTag, faHandSparkles, faArrowsToDot, faFaceSadCry, faSadCry, faDongSign, faPeopleLine, faSquareRss, faRssSquare, faCalendarMinus, faChartDiagram, faFaceTired, faTired, faHandPointRight, faArrowUp, faCubesStacked, faChildCombatant, faChildRifle, faVestPatches, faMartiniGlassEmpty, faGlassMartini, faMagnet, faRoadBarrier, faCompassDrafting, faDraftingCompass, faSquarePersonConfined, faPlateWheat, faSignHanging, faSign, faCarBattery, faBatteryCar, faShirt, faTShirt, faTshirt, faParagraph, faEnvelopesBulk, faMailBulk, faGuitar, faSuitcase, faCircleUp, faArrowAltCircleUp, faF, faXmarksLines, faEarthOceania, faGlobeOceania, faCommentSlash, faPlay, faVialCircleCheck, faBridgeCircleCheck, faCediSign, faPuzzlePiece, faHelmetUn, faGlassWater, faHeartCircleBolt, faPumpSoap, faHandScissors, faDolly, faDollyBox, faPaperclip, faDemocrat, faSquareArrowUpRight, faExternalLinkSquare, faFerry, faMosquito, faBuildingCircleArrowRight, faLeftRight, faArrowsAltH, faVirus, faGem, faToilet, faSingleQuoteLeft, faMoneyBills, faTabletButton, faRectangleXmark, faRectangleTimes, faTimesRectangle, faWindowClose, faWrench, faTrashCan, faTrashAlt, faTableCells, faTh, faRibbon, faLandmarkFlag, faUpDownLeftRight, faArrowsAlt, faCarSide, faTrashArrowUp, faTrashRestore, faLifeRing, faCopyright, faFilePrescription, faEraser, faHourglassStart, faHourglass1, faCircleLeft, faArrowAltCircleLeft, faCruzeiroSign, faSmoking, faSquarePollVertical, faPoll, faPersonCircleMinus, faBiohazard, faBellConcierge, faConciergeBell, faRulerHorizontal, faHorse, faCalendar, faHandsHoldingChild, faItalic, faKhanda, faFaceFrownOpen, faFrownOpen, faCheck, faFingerprint, faChargingStation, faUserLock, faMobileScreenButton, faMobileAlt, faAnchorCircleCheck, faPersonWalkingWithCane, faBlind, faFileWaveform, faFileMedicalAlt, faHouseCrack, faHatWizard, faUserDoctor, faUserMd, faChartBar, faBarChart, faSprayCanSparkles, faAirFreshener, faBahtSign, faTemperatureArrowUp, faTemperatureUp, faWebAwesome, faNonBinary, faN, faArrowsUpDownLeftRight, faArrows, faHouse, faHome, faHomeAlt, faHomeLgAlt, faSpinner, faGavel, faLegal, faTicketSimple, faTicketAlt, faDove, faTarpDroplet, faTreeCity, faTurnUp, faLevelUpAlt, faTemperatureQuarter, faTemperature1, faThermometer1, faThermometerQuarter, faSliders, faSlidersH, faMosque, faH, faInfo, faPersonWalking, faWalking, faArrowTurnDown, faLevelDown, faRoad, faSpiral, faFaceFrown, faFrown, faWineGlassEmpty, faWineGlassAlt, faClapperboard, faForwardStep, faStepForward, faSquareUpRight, faExternalLinkSquareAlt, faBookJournalWhills, faJournalWhills, faChampagneGlasses, faGlassCheers, faDumpster, faHeartCircleXmark, faComputer, faWandMagic, faMagic, faBrain, faBriefcaseMedical, faHouseMedicalCircleExclamation, faCodeCommit, faPersonBreastfeeding, faPersonRays, faManatSign, faSort, faUnsorted, faCircleRadiation, faRadiationAlt, faLaptopCode, faSink, faArrowUpFromWaterPump, faMicrophoneLinesSlash, faMicrophoneAltSlash, faServer, faUser, faUserAlt, faUserLarge, faSnowflake, faTaurus, faSkullCrossbones, faPesoSign, faWineGlass, faTemperatureHalf, faTemperature2, faThermometer2, faThermometerHalf, faTicket, faWheatAwnCircleExclamation, faArrowsTurnRight, faCandyCane, faWheelchair, faSpellCheck, faVolumeOff, faLungs, faBookmark, faBarcode, faListOl, faList12, faListNumeric, faFileCircleXmark, faCube, faTape, faBomb, faScaleUnbalanced, faBalanceScaleLeft, faSquareCaretLeft, faCaretSquareLeft, faRuler, faI, faVolumeXmark, faVolumeMute, faVolumeTimes, faArchway, faPersonDigging, faDigging, faGaugeHigh, faTachometerAlt, faTachometerAltFast, faGenderless, faCloudSun, faArrowRight, faHandshake, faHandshakeAlt, faHandshakeSimple, faPersonSkiing, faSkiing, faBridgeWater, faBuildingNgo, faIgloo, faCircleDollarToSlot, faDonate, faY, faFaceSmileWink, faSmileWink, faDiceFour, faFaceGrinSquintTears, faGrinSquintTears, faFileAudio, faArrowsDownToLine, faG, faVihara, faFlagCheckered, faGaugeSimple, faGaugeSimpleMed, faTachometerAverage, faRightLeft, faExchangeAlt, faPills, faExplosion, faArrowsDownToPeople, faUsersViewfinder, faCarOn, faSleigh, faDumbbell, faBabyCarriage, faCarriageBaby, faKiwiBird, faCalendarXmark, faCalendarTimes, faCircleDown, faArrowAltCircleDown, faFileMedical, faXmark, faClose, faMultiply, faRemove, faTimes, faShapes, faTriangleCircleSquare, faDiceOne, faLockOpen, faPepperHot, faDropletSlash, faTintSlash, faDroplet, faTint, faFileLines, faFileAlt, faFileText, faCommentsDollar, faMagnifyingGlassLocation, faSearchLocation, faFileInvoice, faPentagon, faRepublican, faShop, faStoreAlt, faFilm, faFilmAlt, faFilmSimple, faBuildingCircleXmark, faComments, faTags, faGun, faCircleCheck, faCheckCircle, faScorpio, faIdCardClip, faIdCardAlt, faMoon, faOilWell, faTachographDigital, faDigitalTachograph, faTablet, faTabletAndroid, faRubleSign, faRouble, faRub, faRuble, faClosedCaptioning, faPen, faPlane, faImages, faMobileScreen, faMobileAndroidAlt, faGuaraniSign, faBagShopping, faShoppingBag, faCircleRight, faArrowAltCircleRight, faPhoneVolume, faVolumeControlPhone, faCubes, faPhone, faToriiGate, faBacon, faPersonFallingBurst, faQuoteRight, faQuoteRightAlt, faHouseMedicalFlag, faPrescription, faDiceThree, faBuildingLock, faIdCard, faDriversLicense, faCirclePlay, faPlayCircle, faFaceLaughBeam, faLaughBeam, faLeaf, faHouseChimneyUser, faRotateRight, faRedoAlt, faRotateForward, faTooth, faHouseChimneyWindow, faMotorcycle, faBackwardFast, faFastBackward, faAddressBook, faContactBook, faSailboat, faBookBookmark, faMagnifyingGlassArrowRight, faMicrophoneLines, faMicrophoneAlt, faReplyAll, faMailReplyAll, faUniversalAccess, faToiletPaper, faToiletPaperAlt, faToiletPaperBlank, faVrCardboard, faPizzaSlice, faSprayCan, faVolumeLow, faVolumeDown, faCross, faPerson, faMale, faHourglass, faHourglassEmpty, faFish, faDrumstickBite, faChartSimple, faAtom, faP, faJetFighterUp, faPlugCircleXmark, faSheetPlastic, faV, faList, faListSquares, faPisces, faSolarPanel, faLandMineOn, faHeadphones, faHeadphonesAlt, faHeadphonesSimple, faBus, faFilePowerpoint, faQuoteLeft, faQuoteLeftAlt, faChevronDown, faEarthAsia, faGlobeAsia, faCentSign, faShieldCat, faSchoolCircleCheck, faMartiniGlass, faGlassMartiniAlt, faPlug, faPanorama, faClockRotateLeft, faHistory, faJarWheat, faCloudArrowDown, faCloudDownload, faCloudDownloadAlt, faTruckRampBox, faTruckLoading, faAngleDown, faPlugCircleCheck, faWindowMaximize, faHandsHoldingCircle, faLocationPin, faMapMarker, faBowlingBall, faCartFlatbed, faDollyFlatbed, faHouseUser, faHomeUser, faGhost, faCommentNodes, faPersonArrowDownToLine, faPlugCirclePlus, faPersonSwimming, faSwimmer, faCommentDots, faCommenting, faChartPie, faPieChart, faFrog, faWineBottle, faInbox, faSquareH, faHSquare, faHouseMedical, faCircleChevronRight, faChevronCircleRight, faFileCsv, faHatCowboy, faFaceGrinTongueWink, faGrinTongueWink, faL, faArrowDownShortWide, faSortAmountDesc, faSortAmountDownAlt, faHourglassHalf, faHourglass2, faSpoon, faUtensilSpoon, faCreditCard, faCreditCardAlt, faFileInvoiceDollar, faSpaghettiMonsterFlying, faPastafarianism, faMartiniGlassCitrus, faCocktail, faBullhorn, faBoxTissue, faMattressPillow, faChevronLeft, faCloudMoonRain, faArrowDown19, faSortNumericAsc, faSortNumericDown, faHandSpock, faWandMagicSparkles, faMagicWandSparkles, faCommentMedical, faBellSlash, faHandshakeSlash, faHandshakeAltSlash, faHandshakeSimpleSlash, faBottleWater, faDiceD20, faArrowDownZA, faSortAlphaDesc, faSortAlphaDownAlt, faBrush, faPersonWalkingDashedLineArrowRight, faArrowUpShortWide, faSortAmountUpAlt, faGripVertical, faGridVertical, faCarTunnel, faChartColumn, faCapricorn, faTruckArrowRight, faTv, faTelevision, faTvAlt, faSection, faPeace, faStar, faFlag, faTriangleExclamation, faExclamationTriangle, faWarning, faSchoolCircleExclamation, faGraduationCap, faMortarBoard, faStore, faUserAstronaut, faBuildingFlag, faMugSaucer, faCoffee, faLemon, faCaravan, faQ, faLock, faPaintRoller, faVolumeHigh, faVolumeUp, faFolderPlus, faMercury, faAnchor, faSquareParking, faParking, faHanukiah, faRotateLeft, faRotateBack, faRotateBackward, faUndoAlt, faHeading, faHeader, faCrosshairs, faCircleNodes, faWindowRestore, faR, faFilterCircleXmark, faGopuram, faHeartCircleMinus, faStarOfLife, faBusinessTime, faBriefcaseClock, faFireExtinguisher, faArrowDownLong, faLongArrowDown, faUserMinus, faMoneyCheck, faHouseLaptop, faLaptopHouse, faDownload, faSagittarius, faCouch, faRoadLock, faScissors, faCut, faBug, faArrowRightFromBracket, faSignOut, faHandHoldingHand, faStroopwafel, faChild, faIceCream, faComputerMouse, faMouse, faFaucet, faAward, faPersonDrowning, faCameraRotate, faFaceGrinHearts, faGrinHearts, faFileFragment, faPersonMilitaryRifle, faToggleOn, faLungsVirus, faTableTennisPaddleBall, faPingPongPaddleBall, faTableTennis, faBoxesPacking, faPersonChalkboard, faDiceTwo, faArrowRightArrowLeft, faExchange, faFootball, faFootballBall, faTruckMonster, faAsterisk, faBatteryFull, faBattery, faBattery5, faChildDress, faFaceKissBeam, faKissBeam, faTrashCanArrowUp, faTrashRestoreAlt, faFont, faBoreHole, faVirusCovid, faFilePdf, faLanguage, faShieldHalved, faShieldAlt, faCaretUp, faFilePen, faFileEdit, faPersonBiking, faBiking, faBookOpenReader, faBookReader, faGlassWaterDroplet, faTowerBroadcast, faBroadcastTower, faMinimize, faCompressArrowsAlt, faArrowRightToCity, faLaptopMedical, faBreadSlice, faGlobe, faFolderMinus, faMaskFace, faBong, faRoadBridge, faArrowUp91, faSortNumericUpAlt, faMountainCity, faArrowDown91, faSortNumericDesc, faSortNumericDownAlt, faFaceGrinWide, faGrinAlt, faPoop, faDharmachakra, faBatteryQuarter, faBattery2, faAnkh, faDiamond, faSubscript, faRupeeSign, faRupee, faPersonRifle, faD, faSquareNfi, faTeeth, faMagnifyingGlassDollar, faSearchDollar, faDumpsterFire, faUpload, faUserSlash, faUserAltSlash, faUserLargeSlash, faArrowLeft, faVialVirus, faCheckDouble, faPaw, faHelmetSafety, faHardHat, faHatHard, faE, faFaceLaughSquint, faLaughSquint, faDownLeftAndUpRightToCenter, faCompressAlt, faGifts, faBed, faMoneyBillTransfer, faPersonRunning, faRunning, faCircleChevronDown, faChevronCircleDown, faUserNurse, faFaceKissWinkHeart, faKissWinkHeart, faFill, faMoneyBill1Wave, faMoneyBillWaveAlt, faLandmark, faMusic, faBookMedical, faShuffle, faRandom, faUnderline, faBuildingUser, faRobot, faPlus, faAdd, faCopy, faChessKing, faHouseFloodWater, faBitcoinSign, faBox, faSquarePlus, faPlusSquare, faArrowsLeftRight, faArrowsH, faFan, faCrow, faFileCircleCheck, faLinkSlash, faChainBroken, faChainSlash, faUnlink, faArrowRotateRight, faArrowRightRotate, faArrowRotateForward, faRedo, faPenClip, faPenAlt, faDoorClosed, faArrowDownWideShort, faSortAmountAsc, faSortAmountDown, faCaretDown, faK, faCheckToSlot, faVoteYea, faFishFins, faCompress, faArrowUpAZ, faSortAlphaUp, faUserGraduate, faFileCode, faSoap, faRecycle, faFaceGrinWink, faGrinWink, faWaterLadder, faLadderWater, faSwimmingPool, faGemini, faTowerCell, faColonSign, faLaptopFile, faBahai, faHaykal, faMoneyBill1, faMoneyBillAlt, faCloudBolt, faThunderstorm, faEthernet, faHryvniaSign, faHryvnia, faEyeSlash, faCartFlatbedSuitcase, faLuggageCart, faRadiation, faFileWord, faBedPulse, faProcedures, faTents, faMugHot, faBolt, faZap, faJar, faTruckPlane, faHandHoldingHeart, faArrowRotateLeft, faArrowLeftRotate, faArrowRotateBack, faArrowRotateBackward, faUndo, faFaceAngry, faAngry, faBurst, faZ, faBandage, faBandAid, faPlaneCircleExclamation, faBusSide, faBugs, faBeerMugEmpty, faBeer, faPersonCircleCheck, faStapler, faHouseMedicalCircleCheck, faNairaSign, faWifi, faWifi3, faWifiStrong, faMoneyCheckDollar, faMoneyCheckAlt, faEyeLowVision, faLowVision, faCircleArrowUp, faArrowCircleUp, faCameraRetro, faCapsules, faPoo, faVolume, faVolumeMedium, faElevator, faTag, faFileCircleMinus, faDownLong, faLongArrowAltDown, faCompactDisc, faSuitcaseRolling, faBookQuran, faQuran, faPhoneSlash, faRoadCircleCheck, faShopLock, faImagePortrait, faPortrait, faBridgeLock, faHammer, faArrowUp19, faSortNumericUp, faChessKnight, faHouseFloodWaterCircleArrowRight, faArrowUpRightFromSquare, faExternalLink, faArrowDownUpAcrossLine, faFaceGrinBeam, faGrinBeam, faRectangleAd, faAd, faBookTanakh, faTanakh, faHotTubPerson, faHotTub, faFileHalfDashed, faOutdent, faDedent, faHandPeace, faHeadSideVirus, faCompass, faPenNib, faTentArrowsDown, faForwardFast, faFastForward, faCrop, faWhiskeyGlass, faGlassWhiskey, faSquare, faFaceGrin, faGrin, faFileContract, faAngleUp, faFaceSmile, faSmile, faPersonDressBurst, faDivide, faCodeFork, faHouseFlag, faBuildingColumns, faBank, faInstitution, faMuseum, faUniversity, faRug, faCodeMerge, faHouseTsunami, faMagnifyingGlassChart, faUmbrella, faHillRockslide, faUserSecret, faPager, faBriefcase, faTrowelBricks, faSocks, faT, faMicrochip, faTruckMedical, faAmbulance, faOm, faMosquitoNet, faPrescriptionBottle, faUsersGear, faUsersCog, faRoadCircleExclamation, faPause, faStaffSnake, faRodAsclepius, faRodSnake, faStaffAesculapius, faPiggyBank, faMonument, faAnglesRight, faAngleDoubleRight, faDesktop, faDesktopAlt, faPlaneCircleXmark, faRetweet, faUserGear, faUserCog, faBorderAll, faCoins, faMarsStroke, faHandshakeAngle, faHandsHelping, faArrowDown, faLocationDot, faMapMarkerAlt, faPlugCircleExclamation, faCookieBite, faScrewdriverWrench, faTools, faIndent, faBars, faNavicon, faHandsPraying, faPrayingHands, faViruses, faSchoolFlag, faTrademark, faFireBurner, faFaceSmileBeam, faSmileBeam, faTentArrowLeftRight, faRoute, faAnglesUp, faAngleDoubleUp, faBucket, faLessThanEqual, faFolderClosed, faPersonThroughWindow, faSchoolLock, faPersonBurst, faLeftLong, faLongArrowAltLeft, faLocationCrosshairs, faLocation, faPersonDotsFromLine, faDiagnoses, faGaugeSimpleHigh, faTachometer, faTachometerFast, faAnglesLeft, faAngleDoubleLeft, faUpDown, faArrowsAltV, faBatteryEmpty, faBattery0, faKeyboard, faCookie, faStopwatch, faEject, faSatelliteDish, faFaceRollingEyes, faMehRollingEyes, faListCheck, faTasks, faSackXmark, faHashtag, faTrain, faGamepad, faFileExport, faArrowRightFromFile, faFaceGrimace, faGrimace, faTrainSubway, faSubway, faCircleDot, faDotCircle, faObjectGroup, faShip, faC, faSquarePhone, faPhoneSquare, faRulerCombined, faArrowsRotate, faRefresh, faSync, faPersonDress, faFemale, faBookOpen, faFolderTree, faVirgo, faBoxArchive, faArchive, faTentArrowDownToLine, faQrcode, faDragon, faHourglassEnd, faHourglass3, faGrip, faGridHorizontal, faGripHorizontal, faBorderTopLeft, faBorderStyle, faListUl, faListDots, faPeopleRobbery, faMobileButton, faArrowDownAZ, faSortAlphaAsc, faSortAlphaDown, faMoneyBill, faCircleMinus, faMinusCircle, faArrowPointer, faMousePointer, faSquareShareNodes, faShareAltSquare, faTableCellsLarge, faThLarge, faCat, faCalendarWeek, faCodeCompare, faLeo, faRoadCircleXmark, faPallet, faCakeCandles, faBirthdayCake, faCake, faBugSlash, faTarp, faDiagramPredecessor, faFaceFlushed, faFlushed, faDiagramNext, faAnchorCircleXmark, faPersonCircleXmark, faSpa, faLotus, faAries, faBarsProgress, faTasksAlt, faHeartCircleCheck, faMarsStrokeRight, faMarsStrokeH, faTowerObservation, faSterlingSign, faGbp, faPoundSign, faFaucetDrip, faCircleInfo, faInfoCircle, faFeather, faBowlRice, faStarHalfStroke, faStarHalfAlt, faTemperatureArrowDown, faTemperatureDown, faMaskVentilator, faFileVideo, faArrowTrendDown, faOilCan, faPeopleCarryBox, faPeopleCarry, faChair, faWind, faLayerGroup, faHeadSideMask, faHands, faSignLanguage, faSigning, faTablets, faWeightHanging, faDice, faShopSlash, faStoreAltSlash, faSortDown, faSortDesc, faPesetaSign, faTabletScreenButton, faTabletAlt, faHandHoldingDollar, faHandHoldingUsd, faShield, faShieldBlank, faFaceLaugh, faLaugh, faHandsHolding, faCartShopping, faShoppingCart, faOctagon, faHandPointer, faRegistered, faHouseSignal, faBangladeshiTakaSign };\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","export const GRAY_100 = \"#2d2e2d\"\nexport const GRAY_90 = \"#4e4e4e\"\nexport const GRAY_80 = \"#5b5b5b\"\nexport const GRAY_70 = \"#767676\"\nexport const GRAY_60 = \"#a1a1a1\"\nexport const GRAY_50 = \"#c6c6c6\"\nexport const GRAY_30 = \"#dadada\"\nexport const GRAY_20 = \"#e7e7e7\"\nexport const GRAY_10 = \"#f2f2f2\"\nexport const GRAY_5 = \"#f7f7f7\"\n\nexport const GRAPHER_BACKGROUND = \"#fff\"\n\nexport const GRAPHER_DARK_TEXT = GRAY_80\nexport const GRAPHER_LIGHT_TEXT = GRAY_70\n\nexport const GRAPHER_DENIM = \"#4C6A9C\"\n\nexport const OWID_NO_DATA_GRAY = \"#6e7581\"\nexport const OWID_ERROR_COLOR = \"#ff0002\"\n","import * as React from \"react\"\nimport * as _ from \"lodash-es\"\nimport cx from \"clsx\"\nimport { Point, roundForSvg } from \"@ourworldindata/utils\"\nimport { GRAY_100 } from \"../color/ColorConstants.js\"\n\nexport type HeadAnchor = \"start\" | \"end\" | \"both\"\n\nexport interface BezierArrowProps {\n    /** Start coordinates */\n    start: Point\n    /** End coordinates */\n    end: Point\n\n    /** Bezier handle offset from start coordinates */\n    startHandleOffset?: Point\n    /** Bezier handle offset from end coordinates */\n    endHandleOffset?: Point\n\n    /** Start bezier handle coordinates; if given, startHandleOffset is ignored */\n    startHandle?: Point\n    /** End bezier handle coordinates; if given, endHandleOffset is ignored */\n    endHandle?: Point\n\n    headAnchor?: HeadAnchor\n    headLength?: number\n    headAngle?: number\n    headStyle?: \"solid\" | \"line\"\n\n    className?: string\n    width?: number\n    color?: string\n    opacity?: number\n    lineCaps?: \"round\" | \"sharp\"\n    style?: React.CSSProperties\n}\n\nexport function BezierArrow({\n    start,\n    end,\n    startHandleOffset = { x: 0, y: 0 },\n    endHandleOffset = { x: 0, y: 0 },\n    startHandle,\n    endHandle,\n    headAnchor = \"end\",\n    headLength,\n    headAngle = 45,\n    headStyle = \"line\",\n    lineCaps = \"round\",\n    className,\n    width = 1,\n    color = GRAY_100,\n    opacity = 1,\n    style,\n}: BezierArrowProps): React.ReactElement {\n    const startControlPoint = startHandle ?? addOffset(start, startHandleOffset)\n    const endControlPoint = endHandle ?? addOffset(end, endHandleOffset)\n\n    const headOptions = {\n        length: headLength ?? _.clamp(0.08 * dist(start, end), 4, 6),\n        theta: headAngle,\n        closed: headStyle === \"solid\",\n    }\n\n    const curvePath = bezierCurve(\n        start,\n        end,\n        startControlPoint,\n        endControlPoint\n    )\n\n    const startHeadPath =\n        headAnchor === \"start\" || headAnchor === \"both\"\n            ? arrowHead(\n                  start,\n                  resolveHandle(start, startControlPoint, end),\n                  headOptions\n              )\n            : undefined\n\n    const endHeadPath =\n        headAnchor === \"end\" || headAnchor === \"both\"\n            ? arrowHead(\n                  end,\n                  resolveHandle(end, endControlPoint, start),\n                  headOptions\n              )\n            : undefined\n\n    const curveStyle = {\n        stroke: color,\n        strokeWidth: width,\n        strokeLinecap: lineCaps === \"round\" ? \"round\" : \"butt\",\n        strokeLinejoin: lineCaps === \"round\" ? \"round\" : \"miter\",\n        fill: \"none\",\n    } as const\n    const arrowHeadStyle = {\n        ...curveStyle,\n        fill: headOptions.closed ? color : \"none\",\n    }\n\n    return (\n        <g className={cx(\"arrow\", className)} opacity={opacity} style={style}>\n            <path d={curvePath} style={curveStyle} />\n            {startHeadPath && <path d={startHeadPath} style={arrowHeadStyle} />}\n            {endHeadPath && <path d={endHeadPath} style={arrowHeadStyle} />}\n        </g>\n    )\n}\n\nfunction resolveHandle(\n    point: Point,\n    controlPoint: Point,\n    fallback: Point\n): Point {\n    return equals(point, controlPoint) ? fallback : controlPoint\n}\n\nfunction arrowHead(\n    point: Point,\n    handle: Point,\n    { length = 4, theta = 45, closed = false } = {}\n): string {\n    let xLen = handle.x - point.x\n    let yLen = handle.y - point.y\n\n    let distance = Math.sqrt(Math.pow(xLen, 2) + Math.pow(yLen, 2))\n    if (distance === 0) {\n        // No direction information — default to a horizontal head pointing right\n        xLen = -1\n        yLen = 0\n        distance = 1\n    }\n\n    const ratio = length / distance\n\n    const mid: Point = {\n        x: point.x + xLen * ratio,\n        y: point.y + yLen * ratio,\n    }\n\n    function rotate(p: Point, pivot: Point, deg: number): Point {\n        const rad = (deg * Math.PI) / 180\n        return {\n            x:\n                pivot.x +\n                (p.x - pivot.x) * Math.cos(rad) -\n                (p.y - pivot.y) * Math.sin(rad),\n            y:\n                pivot.y +\n                (p.x - pivot.x) * Math.sin(rad) +\n                (p.y - pivot.y) * Math.cos(rad),\n        }\n    }\n\n    return [\n        \"M\",\n        format(rotate(mid, point, theta)),\n        \"L\",\n        format(point),\n        \"L\",\n        format(rotate(mid, point, -theta)),\n        closed ? \"Z\" : \"\",\n    ].join(\" \")\n}\n\nconst bezierCurve = (\n    start: Point,\n    end: Point,\n    startHandle: Point,\n    endHandle: Point\n): string =>\n    [\n        \"M\",\n        format(start),\n        \"C\",\n        format(startHandle),\n        format(endHandle),\n        format(end),\n    ].join(\" \")\n\nconst format = (p: Point): string => `${roundForSvg(p.x)},${roundForSvg(p.y)}`\n\nconst addOffset = (p: Point, o: Point): Point => ({\n    x: p.x + o.x,\n    y: p.y + o.y,\n})\n\nconst equals = (p1: Point, p2: Point): boolean => p1.x === p2.x && p1.y === p2.y\n\nconst dist = (p1: Point, p2: Point): number =>\n    Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2))\n","import * as _ from \"lodash-es\"\nimport { observable, makeObservable } from \"mobx\"\nimport {\n    Color,\n    ColumnColorScale,\n    BinningStrategyIncludingManual,\n    ColorSchemeName,\n    ColorScaleConfigInterface,\n    MidpointMode,\n} from \"@ourworldindata/types\"\nimport {\n    trimObject,\n    deleteRuntimeAndUnchangedProps,\n    objectWithPersistablesToObject,\n    Persistable,\n    updatePersistables,\n} from \"@ourworldindata/utils\"\n\nimport { NO_DATA_LABEL } from \"./ColorScale\"\n\nexport class ColorScaleConfigDefaults implements ColorScaleConfigInterface {\n    // Color scheme\n    // ============\n\n    /** Key for a colorbrewer scheme */\n    baseColorScheme: ColorSchemeName | undefined = undefined\n\n    /** Reverse the order of colors in the color scheme (defined by `baseColorScheme`) */\n    colorSchemeInvert: boolean | undefined = undefined\n\n    // Numeric bins\n    // ============\n\n    /** The strategy for generating the bin boundaries */\n    binningStrategy: BinningStrategyIncludingManual = \"auto\"\n    createBinForMidpoint?: boolean\n    minValue?: number\n    maxValue?: number\n    midpoint?: number\n    midpointMode?: MidpointMode\n\n    /** Custom maximum brackets for each numeric bin. Only applied when strategy is `manual`. */\n    customNumericValues: number[] = []\n    /**\n     * Custom labels for each numeric bin. Only applied when strategy is `manual`.\n     * `undefined` or `null` falls back to default label.\n     * We need to handle `null` because JSON serializes `undefined` values\n     * inside arrays into `null`.\n     */\n    customNumericLabels: (string | undefined | null)[] = []\n\n    /** Whether `customNumericColors` are used to override the color scheme. */\n    customNumericColorsActive: boolean | undefined = undefined\n    /**\n     * Override some or all colors for the numerical color legend.\n     * `undefined` or `null` falls back the color scheme color.\n     * We need to handle `null` because JSON serializes `undefined` values\n     * inside arrays into `null`.\n     */\n    customNumericColors: (Color | undefined | null)[] = []\n\n    // Categorical bins\n    // ================\n\n    customCategoryColors: {\n        [key: string]: string | undefined\n    } = {}\n\n    customCategoryLabels: {\n        [key: string]: string | undefined\n    } = {}\n\n    // Allow hiding categories from the legend\n    customHiddenCategories: {\n        [key: string]: true | undefined\n    } = {}\n\n    // Other\n    // =====\n\n    /** A custom legend description. Only used in ScatterPlot legend titles for now. */\n    legendDescription: string | undefined = undefined\n\n    constructor() {\n        makeObservable(this, {\n            baseColorScheme: observable,\n            colorSchemeInvert: observable,\n            binningStrategy: observable,\n            customNumericValues: observable,\n            customNumericLabels: observable,\n            customNumericColorsActive: observable,\n            customNumericColors: observable,\n            customCategoryColors: observable.ref,\n            customCategoryLabels: observable.ref,\n            customHiddenCategories: observable.ref,\n            legendDescription: observable,\n            createBinForMidpoint: observable,\n            minValue: observable,\n            maxValue: observable,\n            midpoint: observable,\n            midpointMode: observable,\n        })\n    }\n}\n\nexport class ColorScaleConfig\n    extends ColorScaleConfigDefaults\n    implements Persistable\n{\n    updateFromObject(obj: Record<string, unknown>): void {\n        _.extend(this, obj)\n    }\n\n    toObject(): ColorScaleConfigInterface {\n        const obj: ColorScaleConfigInterface =\n            objectWithPersistablesToObject(this)\n        deleteRuntimeAndUnchangedProps(obj, new ColorScaleConfigDefaults())\n        return trimObject(obj)\n    }\n\n    constructor(obj?: Partial<ColorScaleConfig>) {\n        super()\n        updatePersistables(this, obj)\n    }\n\n    static fromDSL(scale: ColumnColorScale): ColorScaleConfig | undefined {\n        const colorSchemeInvert = scale.colorScaleInvert\n        const baseColorScheme = scale.colorScaleScheme as ColorSchemeName\n\n        const customNumericValues: number[] = []\n        const customNumericLabels: (string | undefined)[] = []\n        const customNumericColors: (Color | undefined)[] = []\n\n        if (scale.colorScaleNumericBins) {\n            customNumericValues.push(scale.colorScaleNumericMinValue ?? 0)\n\n            scale.colorScaleNumericBins\n                .split(INTER_BIN_DELIMITER)\n                .forEach((bin: string): void => {\n                    const [value, color, ...label] = bin.split(\n                        INTRA_BIN_DELIMITER\n                    ) as (string | undefined)[]\n                    if (!value) return\n                    customNumericValues.push(parseFloat(value))\n                    customNumericColors.push(color?.trim() || undefined)\n                    customNumericLabels.push(\n                        label.join(INTRA_BIN_DELIMITER).trim() || undefined\n                    )\n                })\n        }\n\n        const customNumericColorsActive =\n            customNumericColors.length > 0 ? true : undefined\n\n        const customCategoryColors: {\n            [key: string]: string | undefined\n        } = {}\n        const customCategoryLabels: {\n            [key: string]: string | undefined\n        } = {}\n        scale.colorScaleCategoricalBins\n            ?.split(INTER_BIN_DELIMITER)\n            .forEach((bin: string): void => {\n                const [value, color, ...label] = bin.split(\n                    INTRA_BIN_DELIMITER\n                ) as (string | undefined)[]\n                if (!value) return\n                customCategoryColors[value] = color?.trim() || undefined\n                customCategoryLabels[value] =\n                    label.join(INTRA_BIN_DELIMITER).trim() || undefined\n            })\n        if (scale.colorScaleNoDataLabel) {\n            customCategoryLabels[NO_DATA_LABEL] = scale.colorScaleNoDataLabel\n        }\n\n        // Use user-defined binning strategy, otherwise set to manual if user has\n        // defined custom bins\n        const binningStrategy = scale.colorScaleBinningStrategy\n            ? (scale.colorScaleBinningStrategy as BinningStrategyIncludingManual)\n            : scale.colorScaleNumericBins || scale.colorScaleCategoricalBins\n              ? \"manual\"\n              : undefined\n\n        const legendDescription = scale.colorScaleLegendDescription\n\n        const trimmed: Partial<ColorScaleConfig> = trimObject({\n            colorSchemeInvert,\n            baseColorScheme,\n            binningStrategy,\n            customNumericValues,\n            customNumericColors,\n            customNumericColorsActive,\n            customNumericLabels,\n            customCategoryLabels,\n            customCategoryColors,\n            legendDescription,\n        })\n\n        return _.isEmpty(trimmed) ? undefined : new ColorScaleConfig(trimmed)\n    }\n}\n\nconst INTER_BIN_DELIMITER = \";\"\nconst INTRA_BIN_DELIMITER = \",\"\n","import * as _ from \"lodash-es\"\nimport {\n    Color,\n    ColorSchemeInterface,\n    ColorSchemeName,\n} from \"@ourworldindata/types\"\n\n// TODO: Initialize CustomColorSchemes lazily\nexport const CustomColorSchemes: ColorSchemeInterface[] = []\n\nexport const OwidDistinctColors = {\n    Purple: \"#6d3e91\",\n    DarkOrange: \"#c05917\",\n    LightTeal: \"#58ac8c\",\n    Blue: \"#286bbb\",\n    Maroon: \"#883039\",\n    Camel: \"#bc8e5a\",\n    MidnightBlue: \"#00295b\",\n    DustyCoral: \"#c15065\",\n    DarkOliveGreen: \"#18470f\",\n    DarkCopper: \"#9a5129\",\n    Peach: \"#e56e5a\",\n    Mauve: \"#a2559c\",\n    Turquoise: \"#38aaba\",\n    OliveGreen: \"#578145\",\n    Cherry: \"#970046\",\n    Teal: \"#00847e\",\n    RustyOrange: \"#b13507\",\n    Denim: \"#4c6a9c\",\n    Fuchsia: \"#cf0a66\",\n    TealishGreen: \"#00875e\",\n    Copper: \"#b16214\",\n    DarkMauve: \"#8c4569\",\n    Lime: \"#3b8e1d\",\n    Coral: \"#d73c50\",\n} as const\n\n// These are variations of some of the colors above where the original color would have too little\n// contrast against a white background for thin lines or text elements\nexport const DarkerOwidDistinctColors: Record<string, string> = {\n    DarkOrangeDarker: \"#be5915\",\n    PeachDarker: \"#c4523e\",\n    LightTealDarker: \"#2c8465\",\n    TurquoiseDarker: \"#008291\",\n    CamelDarker: \"#996d39\",\n    LimeDarker: \"#338711\",\n}\n\nexport const DarkerHexByBaseHex = {\n    [OwidDistinctColors.DarkOrange]: DarkerOwidDistinctColors.DarkOrangeDarker,\n    [OwidDistinctColors.Peach]: DarkerOwidDistinctColors.PeachDarker,\n    [OwidDistinctColors.LightTeal]: DarkerOwidDistinctColors.LightTealDarker,\n    [OwidDistinctColors.Turquoise]: DarkerOwidDistinctColors.TurquoiseDarker,\n    [OwidDistinctColors.Camel]: DarkerOwidDistinctColors.CamelDarker,\n    [OwidDistinctColors.Lime]: DarkerOwidDistinctColors.LimeDarker,\n} as Record<string, string>\n\n// TODO: Make this into a lazy initialization\nexport const OwidDistinctLinesColors = {\n    ..._.omit(OwidDistinctColors, Object.keys(DarkerOwidDistinctColors)),\n    ...DarkerOwidDistinctColors,\n}\n\n// Below are 5 variations of the same colors in different permutations\nexport const CategoricalColorsPaletteA = [\n    OwidDistinctColors.Denim,\n    OwidDistinctColors.Maroon,\n    OwidDistinctColors.OliveGreen,\n    OwidDistinctColors.RustyOrange,\n    OwidDistinctColors.Copper,\n    OwidDistinctColors.Cherry,\n    OwidDistinctColors.Coral,\n    OwidDistinctColors.MidnightBlue,\n    OwidDistinctColors.Teal,\n    OwidDistinctColors.Camel,\n    OwidDistinctColors.Mauve,\n    OwidDistinctColors.DarkOliveGreen,\n]\n\nexport const CategoricalColorsPaletteB = [\n    OwidDistinctColors.Teal,\n    OwidDistinctColors.MidnightBlue,\n    OwidDistinctColors.DustyCoral,\n    OwidDistinctColors.Turquoise,\n    OwidDistinctColors.DarkMauve,\n    OwidDistinctColors.DarkOliveGreen,\n    OwidDistinctColors.RustyOrange,\n    OwidDistinctColors.Camel,\n    OwidDistinctColors.Blue,\n    OwidDistinctColors.Cherry,\n    OwidDistinctColors.LightTeal,\n    OwidDistinctColors.DarkCopper,\n    OwidDistinctColors.Peach,\n]\n\nexport const CategoricalColorsPaletteC = [\n    OwidDistinctColors.Purple,\n    OwidDistinctColors.DarkOrange,\n    OwidDistinctColors.LightTeal,\n    OwidDistinctColors.Blue,\n    OwidDistinctColors.Maroon,\n    OwidDistinctColors.Camel,\n    OwidDistinctColors.MidnightBlue,\n    OwidDistinctColors.DustyCoral,\n    OwidDistinctColors.DarkOliveGreen,\n    OwidDistinctColors.DarkCopper,\n    OwidDistinctColors.Peach,\n    OwidDistinctColors.Mauve,\n    OwidDistinctColors.Turquoise,\n    OwidDistinctColors.OliveGreen,\n    OwidDistinctColors.Cherry,\n    OwidDistinctColors.Teal,\n    OwidDistinctColors.RustyOrange,\n    OwidDistinctColors.Denim,\n    OwidDistinctColors.Fuchsia,\n    OwidDistinctColors.TealishGreen,\n    OwidDistinctColors.Copper,\n    OwidDistinctColors.DarkMauve,\n    OwidDistinctColors.Lime,\n    OwidDistinctColors.Coral,\n]\n\nexport const CategoricalColorsPaletteD = [\n    OwidDistinctColors.DustyCoral,\n    OwidDistinctColors.DarkOliveGreen,\n    OwidDistinctColors.Camel,\n    OwidDistinctColors.DarkMauve,\n    OwidDistinctColors.Turquoise,\n    OwidDistinctColors.TealishGreen,\n    OwidDistinctColors.Peach,\n    OwidDistinctColors.DarkCopper,\n    OwidDistinctColors.Fuchsia,\n    OwidDistinctColors.MidnightBlue,\n]\n\nexport const CategoricalColorsPaletteE = [\n    OwidDistinctColors.DarkCopper,\n    OwidDistinctColors.Peach,\n    OwidDistinctColors.Blue,\n    OwidDistinctColors.DarkOliveGreen,\n    OwidDistinctColors.Purple,\n    OwidDistinctColors.Teal,\n    OwidDistinctColors.Maroon,\n    OwidDistinctColors.Coral,\n    OwidDistinctColors.OliveGreen,\n    OwidDistinctColors.Camel,\n    OwidDistinctColors.DarkMauve,\n]\nexport const OwidDistinctColorScheme = {\n    name: ColorSchemeName[\"owid-distinct\"],\n    displayName: \"OWID Distinct\",\n    singleColorScale: false,\n    isDistinct: true,\n    // We use the feature of ColorSchemes to use the Palette A permutation\n    // for 12 categories or less and the Palette C to reach up to 24 different\n    // colors\n    colorSets: [CategoricalColorsPaletteA, CategoricalColorsPaletteC],\n}\nCustomColorSchemes.push(OwidDistinctColorScheme)\n\nconst OwidDistinctLinesPalette = [\n    OwidDistinctColors.Denim,\n    OwidDistinctColors.RustyOrange,\n    DarkerOwidDistinctColors.CamelDarker,\n    DarkerOwidDistinctColors.LightTealDarker,\n    OwidDistinctColors.Purple,\n    OwidDistinctColors.Maroon,\n    OwidDistinctColors.MidnightBlue,\n    OwidDistinctColors.Mauve,\n    OwidDistinctColors.DarkCopper,\n    DarkerOwidDistinctColors.TurquoiseDarker,\n    OwidDistinctColors.Cherry,\n    DarkerOwidDistinctColors.LimeDarker,\n    DarkerOwidDistinctColors.PeachDarker,\n    OwidDistinctColors.Blue,\n    OwidDistinctColors.DarkOliveGreen,\n    OwidDistinctColors.Coral,\n    OwidDistinctColors.Copper,\n    OwidDistinctColors.Teal,\n    OwidDistinctColors.Fuchsia,\n    OwidDistinctColors.OliveGreen,\n    DarkerOwidDistinctColors.DarkOrangeDarker,\n    OwidDistinctColors.DarkMauve,\n    OwidDistinctColors.TealishGreen,\n    OwidDistinctColors.DustyCoral,\n]\n\nexport const OwidDistinctLinesColorScheme = {\n    name: ColorSchemeName[\"OwidDistinctLines\"],\n    displayName: \"OWID Distinct (lines)\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [OwidDistinctLinesPalette],\n}\nCustomColorSchemes.push(OwidDistinctLinesColorScheme)\n\nexport const OwidCategoricalAScheme = {\n    name: ColorSchemeName[\"OwidCategoricalA\"],\n    displayName: \"OWID categorical A\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [CategoricalColorsPaletteA],\n}\nCustomColorSchemes.push(OwidCategoricalAScheme)\n\nexport const OwidCategoricalBScheme = {\n    name: ColorSchemeName[\"OwidCategoricalB\"],\n    displayName: \"OWID categorical B\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [CategoricalColorsPaletteB],\n}\nCustomColorSchemes.push(OwidCategoricalBScheme)\n\nexport const OwidCategoricalCScheme = {\n    name: ColorSchemeName[\"OwidCategoricalC\"],\n    displayName: \"OWID categorical C\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [CategoricalColorsPaletteC],\n}\nCustomColorSchemes.push(OwidCategoricalCScheme)\n\nexport const OwidCategoricalDScheme = {\n    name: ColorSchemeName[\"OwidCategoricalD\"],\n    displayName: \"OWID categorical D\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [CategoricalColorsPaletteD],\n}\nCustomColorSchemes.push(OwidCategoricalDScheme)\n\nexport const OwidCategoricalEScheme = {\n    name: ColorSchemeName[\"OwidCategoricalE\"],\n    displayName: \"OWID categorical E\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [CategoricalColorsPaletteE],\n}\nCustomColorSchemes.push(OwidCategoricalEScheme)\n\nexport const EnergyColors = {\n    Coal: OwidDistinctColors.Maroon,\n    Oil: OwidDistinctColors.DustyCoral,\n    Gas: OwidDistinctColors.Purple,\n    Biomass: OwidDistinctColors.DarkCopper,\n    Hydropower: OwidDistinctColors.Blue,\n    Nuclear: OwidDistinctColors.Teal,\n    Wind: OwidDistinctColors.MidnightBlue,\n    Solar: OwidDistinctColors.Peach,\n    OtherRenewables: OwidDistinctColors.OliveGreen,\n}\n\nconst EnergyColorPalette = [\n    EnergyColors.Coal,\n    EnergyColors.Oil,\n    EnergyColors.Gas,\n    EnergyColors.Biomass,\n    EnergyColors.Hydropower,\n    EnergyColors.Nuclear,\n    EnergyColors.Wind,\n    EnergyColors.Solar,\n    EnergyColors.OtherRenewables,\n]\n\nexport const OwidEnergy = {\n    name: ColorSchemeName[\"OwidEnergy\"],\n    displayName: \"OWID Energy\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [EnergyColorPalette],\n    colorMap: EnergyColors,\n}\nCustomColorSchemes.push(OwidEnergy)\n\nexport const OwidEnergyLines = getModifiedLinesColorScheme(OwidEnergy)\nCustomColorSchemes.push(OwidEnergyLines)\n\nCustomColorSchemes.push({\n    name: ColorSchemeName.stackedAreaDefault,\n    displayName: \"OWID 4 Color Gradient (=Owid Distinct)\",\n    singleColorScale: false,\n    isDistinct: true,\n    // TODO: this is now a copy of owid-distinct. After a data migration to get\n    // rid of stackedAreaDefault in existing chart configs we should replace it with\n    // owid-distinct\n    // We use the feature of ColorSchemes to use the Palette A permutation\n    // for 12 categories or less and the Palette C to reach up to 24 different\n    // colors\n    colorSets: [CategoricalColorsPaletteA, CategoricalColorsPaletteC],\n})\n\n/**\n * The canonical colors for the four World Bank income groups, used on both\n * charts and maps\n */\nexport const IncomeGroupColors = {\n    HighIncome: \"#0d8553\",\n    UpperMiddleIncome: \"#a1cb81\",\n    LowerMiddleIncome: \"#df9fdb\",\n    LowIncome: \"#974e94\",\n} as const\n\n/**\n * The muted color vocabulary designed for map fills (charts typically use\n * stronger colors instead)\n */\nexport const OwidMapColors: Record<string, Color> = {\n    // Main\n    MutedDenim: \"#526F9B\",\n    SoftOrange: \"#CC7641\",\n    MutedTeal: \"#238A84\",\n    SoftPurple: \"#77538F\",\n    Sand: \"#C3A27C\",\n    MutedCherry: \"#B04E74\",\n    LeafGreen: \"#6FA54F\",\n    SkyTurquoise: \"#5FB8C8\",\n    Lavendar: \"#8E97C7\",\n    Olive: \"#5B6D35\",\n\n    // Extended\n    LightDenim: \"#92D3DE\",\n    LightOrange: \"#E2A17A\",\n    LightTeal: \"#4FB2AC\",\n    LightPurple: \"#A07AB8\",\n    LightSand: \"#D8C0A2\",\n    LightCherry: \"#CB7FA0\",\n    LightGreen: \"#9DCA7B\",\n\n    // Special\n    Taupe: \"#B9B2A6\",\n    Mustard: \"#D9BC54\",\n    Tomato: \"#D94C3F\",\n\n    // Additional colors used only for provider maps; deliberately not part\n    // of the CategoricalMapPalette sets for the 'OWID Categorical Map'\n    SoftMagenta: \"#A35C86\",\n    MutedPlum: \"#6B3A62\",\n    LightPlum: \"#C49BC0\",\n} as const\n\n/**\n * Region name -> color dictionary for charts (not maps), used as the colorMap\n * of the \"Continents\" scheme, so a series whose name matches a key always gets\n * that color.\n */\nexport const ContinentColors = {\n    // World\n    World: OwidDistinctColors.DarkOliveGreen,\n\n    // Continents\n    Africa: OwidDistinctColors.Mauve,\n    Antarctica: OwidDistinctColors.DarkCopper,\n    Asia: OwidDistinctColors.Teal,\n    Europe: OwidDistinctColors.Denim,\n    NorthAmerica: OwidDistinctColors.Peach,\n    [\"North America\"]: OwidDistinctColors.Peach,\n    SouthAmerica: OwidDistinctColors.Maroon,\n    [\"South America\"]: OwidDistinctColors.Maroon,\n    Oceania: OwidDistinctColors.Turquoise,\n\n    // Sub-regions\n    SubSaharanAfrica: OwidDistinctColors.DarkMauve,\n    MiddleEastNorthAfrica: OwidDistinctColors.Purple,\n    CentralAsia: OwidDistinctColors.LightTeal,\n    EastAsia: OwidDistinctColors.TealishGreen,\n    SoutheastAsia: OwidDistinctColors.Lime,\n    SouthAsia: OwidDistinctColors.OliveGreen,\n    CentralAmericaAndCarribean: OwidDistinctColors.DustyCoral,\n    EasternEurope: OwidDistinctColors.Blue,\n    WesternEurope: OwidDistinctColors.MidnightBlue,\n    AustralasiaAndOceania: OwidDistinctColors.Copper,\n\n    // World Bank regions\n    \"East Asia and Pacific (WB)\": OwidDistinctColors.Copper,\n    \"Europe and Central Asia (WB)\": OwidDistinctColors.Denim,\n    \"Middle East, North Africa, Afghanistan and Pakistan (WB)\":\n        OwidDistinctColors.Camel,\n    \"North America (WB)\": OwidDistinctColors.Peach,\n    \"South Asia (WB)\": OwidDistinctColors.OliveGreen,\n    \"Sub-Saharan Africa (WB)\": OwidDistinctColors.DarkMauve,\n    \"Latin America and Caribbean (WB)\": OwidDistinctColors.Maroon,\n\n    // UN regions\n    \"Asia (UN)\": OwidDistinctColors.Teal,\n    \"Africa (UN)\": OwidDistinctColors.Mauve,\n    \"Europe (UN)\": OwidDistinctColors.Denim,\n    \"Oceania (UN)\": OwidDistinctColors.Turquoise,\n    \"Northern America (UN)\": OwidDistinctColors.Peach,\n    \"Latin America and the Caribbean (UN)\": OwidDistinctColors.Maroon,\n\n    // WHO regions\n    \"Africa (WHO)\": OwidDistinctColors.Mauve,\n    \"Europe (WHO)\": OwidDistinctColors.Denim,\n    \"Americas (WHO)\": OwidDistinctColors.Peach,\n    \"South-East Asia (WHO)\": OwidDistinctColors.Lime,\n    \"Western Pacific (WHO)\": OwidDistinctColors.Turquoise,\n    \"Eastern Mediterranean (WHO)\": OwidDistinctColors.Camel,\n\n    // Pew Research Center regions\n    \"Europe (Pew)\": OwidDistinctColors.Denim,\n    \"Asia-Pacific (Pew)\": OwidDistinctColors.Teal,\n    \"North America (Pew)\": OwidDistinctColors.Peach,\n    \"Sub-Saharan Africa (Pew)\": OwidDistinctColors.DarkMauve,\n    \"Latin America-Caribbean (Pew)\": OwidDistinctColors.Maroon,\n    \"Middle East-North Africa (Pew)\": OwidDistinctColors.Camel,\n\n    // UN SDG regions\n    \"Australia and New Zealand (UN SDG)\": OwidDistinctColors.Teal,\n    \"Central and Southern Asia (UN SDG)\": OwidDistinctColors.OliveGreen,\n    \"Eastern and South-Eastern Asia (UN SDG)\": OwidDistinctColors.Copper,\n    \"Europe and Northern America (UN SDG)\": OwidDistinctColors.Denim,\n    \"Latin America and the Caribbean (UN SDG)\": OwidDistinctColors.Maroon,\n    \"Northern Africa and Western Asia (UN SDG)\": OwidDistinctColors.Camel,\n    \"Oceania (UN SDG)\": OwidDistinctColors.Turquoise,\n    \"Sub-Saharan Africa (UN SDG)\": OwidDistinctColors.DarkMauve,\n\n    // Maddison Project Database regions\n    \"Western offshoots (Maddison)\": OwidDistinctColors.Peach,\n    \"Western Europe (Maddison)\": OwidDistinctColors.Denim,\n    \"Eastern Europe (Maddison)\": OwidDistinctColors.MidnightBlue,\n    \"Latin America (Maddison)\": OwidDistinctColors.Maroon,\n    \"East Asia (Maddison)\": OwidDistinctColors.Copper,\n    \"South and South East Asia (Maddison)\": OwidDistinctColors.OliveGreen,\n    \"Middle East and North Africa (Maddison)\": OwidDistinctColors.Camel,\n    \"Sub Saharan Africa (Maddison)\": OwidDistinctColors.DarkMauve,\n\n    // WID regions\n    \"North America (WID)\": OwidDistinctColors.Peach,\n    \"Latin America (WID)\": OwidDistinctColors.Maroon,\n    \"Europe (WID)\": OwidDistinctColors.Denim,\n    \"Russia and Central Asia (WID)\": OwidDistinctColors.LightTeal,\n    \"Middle East and North Africa (WID)\": OwidDistinctColors.Camel,\n    \"Sub-Saharan Africa (WID)\": OwidDistinctColors.DarkMauve,\n    \"East Asia (WID)\": OwidDistinctColors.TealishGreen,\n    \"South and South-East Asia (WID)\": OwidDistinctColors.OliveGreen,\n    \"Oceania (WID)\": OwidDistinctColors.Turquoise,\n\n    // Energy Institute regions\n    \"North America (EI)\": OwidDistinctColors.Peach,\n    \"South and Central America (EI)\": OwidDistinctColors.Maroon,\n    \"Europe (EI)\": OwidDistinctColors.Denim,\n    \"CIS (EI)\": OwidDistinctColors.MidnightBlue,\n    \"Middle East (EI)\": OwidDistinctColors.Camel,\n    \"Africa (EI)\": OwidDistinctColors.Mauve,\n    \"Asia Pacific (EI)\": OwidDistinctColors.Lime,\n\n    // IEA regions\n    \"North America (IEA)\": OwidDistinctColors.Peach,\n    \"Central and South America (IEA)\": OwidDistinctColors.Maroon,\n    \"Europe (IEA)\": OwidDistinctColors.Denim,\n    \"Eurasia (IEA)\": OwidDistinctColors.MidnightBlue,\n    \"Middle East (IEA)\": OwidDistinctColors.Camel,\n    \"Africa (IEA)\": OwidDistinctColors.Mauve,\n    \"Asia Pacific (IEA)\": OwidDistinctColors.Lime,\n\n    // Ember regions\n    \"North America (Ember)\": OwidDistinctColors.Peach,\n    \"Latin America and Caribbean (Ember)\": OwidDistinctColors.Maroon,\n    \"Europe (Ember)\": OwidDistinctColors.Denim,\n    \"Africa (Ember)\": OwidDistinctColors.Mauve,\n    \"Middle East (Ember)\": OwidDistinctColors.Camel,\n    \"Asia (Ember)\": OwidDistinctColors.Teal,\n    \"Oceania (Ember)\": OwidDistinctColors.Turquoise,\n\n    // FAO regions\n    \"Americas (FAO)\": OwidDistinctColors.Peach,\n    \"Africa (FAO)\": OwidDistinctColors.Mauve,\n    \"Europe (FAO)\": OwidDistinctColors.Denim,\n    \"Asia (FAO)\": OwidDistinctColors.Teal,\n    \"Oceania (FAO)\": OwidDistinctColors.Turquoise,\n\n    // FAO subregions (level 2)\n    \"Northern America (FAO)\": OwidDistinctColors.Peach,\n    \"Caribbean (FAO)\": OwidDistinctColors.Coral,\n    \"Central America (FAO)\": OwidDistinctColors.DustyCoral,\n    \"South America (FAO)\": OwidDistinctColors.Maroon,\n    \"Northern Africa (FAO)\": OwidDistinctColors.Purple,\n    \"Eastern Africa (FAO)\": OwidDistinctColors.Mauve,\n    \"Middle Africa (FAO)\": OwidDistinctColors.Cherry,\n    \"Southern Africa (FAO)\": OwidDistinctColors.DarkMauve,\n    \"Western Africa (FAO)\": OwidDistinctColors.Fuchsia,\n    \"Southern Europe (FAO)\": OwidDistinctColors.LightTeal,\n    \"Western Europe (FAO)\": OwidDistinctColors.Blue,\n    \"Northern Europe (FAO)\": OwidDistinctColors.Denim,\n    \"Eastern Europe (FAO)\": OwidDistinctColors.MidnightBlue,\n    \"Western Asia (FAO)\": OwidDistinctColors.Camel,\n    \"Central Asia (FAO)\": OwidDistinctColors.TealishGreen,\n    \"Southern Asia (FAO)\": OwidDistinctColors.OliveGreen,\n    \"Eastern Asia (FAO)\": OwidDistinctColors.Lime,\n    \"South-eastern Asia (FAO)\": OwidDistinctColors.DarkOrange,\n    \"Melanesia (FAO)\": OwidDistinctColors.Copper,\n    \"Micronesia (FAO)\": OwidDistinctColors.DarkCopper,\n    \"Polynesia (FAO)\": OwidDistinctColors.Turquoise,\n\n    // FAO SDG regions\n    \"Northern America and Europe (FAO)\": OwidDistinctColors.Denim,\n    \"Latin America and the Caribbean (FAO)\": OwidDistinctColors.Maroon,\n    \"Sub-Saharan Africa (FAO)\": OwidDistinctColors.DarkMauve,\n    \"Western Asia and Northern Africa (FAO)\": OwidDistinctColors.Camel,\n    \"Central Asia and Southern Asia (FAO)\": OwidDistinctColors.OliveGreen,\n    \"Eastern Asia and South-eastern Asia (FAO)\": OwidDistinctColors.Copper,\n    \"Australia and New Zealand (FAO)\": OwidDistinctColors.Teal,\n    \"Oceania excluding Australia and New Zealand (FAO)\":\n        OwidDistinctColors.Turquoise,\n\n    // ILO regions\n    \"Africa (ILO)\": OwidDistinctColors.Mauve,\n    \"Americas (ILO)\": OwidDistinctColors.Peach,\n    \"Arab States (ILO)\": OwidDistinctColors.Camel,\n    \"Asia and the Pacific (ILO)\": OwidDistinctColors.Teal,\n    \"Europe and Central Asia (ILO)\": OwidDistinctColors.Denim,\n\n    // ILO sub-regions\n    \"Northern Africa (ILO)\": OwidDistinctColors.Purple,\n    \"Sub-Saharan Africa (ILO)\": OwidDistinctColors.DarkMauve,\n    \"Latin America and the Caribbean (ILO)\": OwidDistinctColors.Maroon,\n    \"Northern America (ILO)\": OwidDistinctColors.Peach,\n    \"Eastern Asia (ILO)\": OwidDistinctColors.Lime,\n    \"South-Eastern Asia and the Pacific (ILO)\": OwidDistinctColors.Teal,\n    \"Southern Asia (ILO)\": OwidDistinctColors.OliveGreen,\n    \"Northern, Southern and Western Europe (ILO)\": OwidDistinctColors.Denim,\n    \"Eastern Europe (ILO)\": OwidDistinctColors.MidnightBlue,\n    \"Central and Western Asia (ILO)\": OwidDistinctColors.TealishGreen,\n\n    // UN M49 continents\n    \"Americas (UN M49)\": OwidDistinctColors.Peach,\n    \"Africa (UN M49)\": OwidDistinctColors.Mauve,\n    \"Europe (UN M49)\": OwidDistinctColors.Denim,\n    \"Asia (UN M49)\": OwidDistinctColors.Teal,\n    \"Oceania (UN M49)\": OwidDistinctColors.Turquoise,\n\n    // UN M49 regions\n    \"Australia and New Zealand (UN M49)\": OwidDistinctColors.Teal,\n    \"Central Asia (UN M49)\": OwidDistinctColors.TealishGreen,\n    \"Eastern Asia (UN M49)\": OwidDistinctColors.Lime,\n    \"Eastern Europe (UN M49)\": OwidDistinctColors.MidnightBlue,\n    \"Latin America and the Caribbean (UN M49)\": OwidDistinctColors.Maroon,\n    \"Melanesia (UN M49)\": OwidDistinctColors.Copper,\n    \"Micronesia (UN M49)\": OwidDistinctColors.DarkCopper,\n    \"Northern Africa (UN M49)\": OwidDistinctColors.Purple,\n    \"Northern America (UN M49)\": OwidDistinctColors.Peach,\n    \"Northern Europe (UN M49)\": OwidDistinctColors.Denim,\n    \"Polynesia (UN M49)\": OwidDistinctColors.Turquoise,\n    \"South-eastern Asia (UN M49)\": OwidDistinctColors.DarkOrange,\n    \"Southern Asia (UN M49)\": OwidDistinctColors.OliveGreen,\n    \"Southern Europe (UN M49)\": OwidDistinctColors.LightTeal,\n    \"Sub-Saharan Africa (UN M49)\": OwidDistinctColors.DarkMauve,\n    \"Western Asia (UN M49)\": OwidDistinctColors.Camel,\n    \"Western Europe (UN M49)\": OwidDistinctColors.Blue,\n\n    // UN M49 regions (level 3)\n    \"Caribbean (UN M49)\": OwidDistinctColors.Coral,\n    \"Central America (UN M49)\": OwidDistinctColors.DustyCoral,\n    \"South America (UN M49)\": OwidDistinctColors.Maroon,\n    \"Eastern Africa (UN M49)\": OwidDistinctColors.Mauve,\n    \"Middle Africa (UN M49)\": OwidDistinctColors.Cherry,\n    \"Southern Africa (UN M49)\": OwidDistinctColors.DarkMauve,\n    \"Western Africa (UN M49)\": OwidDistinctColors.Fuchsia,\n\n    // IHME GBD super-regions\n    \"High-income (IHME GBD)\": OwidDistinctColors.Denim,\n    \"Latin America and Caribbean (IHME GBD)\": OwidDistinctColors.Maroon,\n    \"Sub-Saharan Africa (IHME GBD)\": OwidDistinctColors.DarkMauve,\n    \"North Africa and Middle East (IHME GBD)\": OwidDistinctColors.Camel,\n    \"Central Europe, Eastern Europe, and Central Asia (IHME GBD)\":\n        OwidDistinctColors.MidnightBlue,\n    \"South Asia (IHME GBD)\": OwidDistinctColors.OliveGreen,\n    \"Southeast Asia, East Asia, and Oceania (IHME GBD)\":\n        OwidDistinctColors.Lime,\n\n    // IHME GBD regions (level 2)\n    \"High-income North America (IHME GBD)\": OwidDistinctColors.Peach,\n    \"Caribbean (IHME GBD)\": OwidDistinctColors.Coral,\n    \"Central Latin America (IHME GBD)\": OwidDistinctColors.DustyCoral,\n    \"Andean Latin America (IHME GBD)\": OwidDistinctColors.RustyOrange,\n    \"Tropical Latin America (IHME GBD)\": OwidDistinctColors.Maroon,\n    \"Southern Latin America (IHME GBD)\": OwidDistinctColors.Copper,\n    \"Western Sub-Saharan Africa (IHME GBD)\": OwidDistinctColors.Fuchsia,\n    \"Central Sub-Saharan Africa (IHME GBD)\": OwidDistinctColors.Cherry,\n    \"Eastern Sub-Saharan Africa (IHME GBD)\": OwidDistinctColors.Mauve,\n    \"Southern Sub-Saharan Africa (IHME GBD)\": OwidDistinctColors.DarkMauve,\n    \"Western Europe (IHME GBD)\": OwidDistinctColors.Blue,\n    \"Central Europe (IHME GBD)\": OwidDistinctColors.Denim,\n    \"Eastern Europe (IHME GBD)\": OwidDistinctColors.MidnightBlue,\n    \"Central Asia (IHME GBD)\": OwidDistinctColors.TealishGreen,\n    \"East Asia (IHME GBD)\": OwidDistinctColors.Lime,\n    \"Southeast Asia (IHME GBD)\": OwidDistinctColors.DarkOrange,\n    \"High-income Asia Pacific (IHME GBD)\": OwidDistinctColors.LightTeal,\n    \"Australasia (IHME GBD)\": OwidDistinctColors.Teal,\n    \"Oceania (IHME GBD)\": OwidDistinctColors.Turquoise,\n\n    // UCDP regions\n    \"Americas (UCDP)\": OwidDistinctColors.Peach,\n    \"Africa (UCDP)\": OwidDistinctColors.Mauve,\n    \"Middle East (UCDP)\": OwidDistinctColors.Camel,\n    \"Europe (UCDP)\": OwidDistinctColors.Denim,\n    \"Asia and Oceania (UCDP)\": OwidDistinctColors.Teal,\n\n    // Income groups\n    \"High-income countries\": IncomeGroupColors.HighIncome,\n    \"Upper-middle-income countries\": IncomeGroupColors.UpperMiddleIncome,\n    \"Lower-middle-income countries\": IncomeGroupColors.LowerMiddleIncome,\n    \"Low-income countries\": IncomeGroupColors.LowIncome,\n} as const\n\nconst ContinentColorPalette = [\n    ContinentColors.Africa,\n    ContinentColors.Asia,\n    ContinentColors.Europe,\n    ContinentColors.NorthAmerica,\n    ContinentColors.Oceania,\n    ContinentColors.SouthAmerica,\n    ContinentColors.World,\n    ContinentColors.SubSaharanAfrica,\n    ContinentColors.MiddleEastNorthAfrica,\n    ContinentColors.CentralAsia,\n    ContinentColors.EastAsia,\n    ContinentColors.SoutheastAsia,\n    ContinentColors.SouthAsia,\n    ContinentColors.CentralAmericaAndCarribean,\n    ContinentColors.EasternEurope,\n    ContinentColors.WesternEurope,\n    ContinentColors.AustralasiaAndOceania,\n    ContinentColors.Antarctica,\n]\n\n/**\n * The \"Continents\" scheme for charts: colors regions by name via\n * ContinentColors, other series positionally via ContinentColorPalette.\n */\nexport const ContinentColorsColorScheme = {\n    name: ColorSchemeName.continents,\n    displayName: \"Continents\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [ContinentColorPalette],\n    colorMap: ContinentColors,\n}\n\nCustomColorSchemes.push(ContinentColorsColorScheme)\n\nfunction getModifiedLinesColorScheme(\n    colorScheme: ColorSchemeInterface\n): ColorSchemeInterface {\n    const colors = colorScheme.colorSets[0]\n    const modifiedColors = colors.map((color) =>\n        color in DarkerHexByBaseHex ? DarkerHexByBaseHex[color] : color\n    )\n\n    // If the scheme has a colorMap, we need to create a modified version with darker colors\n    const modifiedColorMap = colorScheme.colorMap\n        ? _.mapValues(colorScheme.colorMap, (color) =>\n              color in DarkerHexByBaseHex ? DarkerHexByBaseHex[color] : color\n          )\n        : undefined\n\n    return {\n        ...colorScheme,\n        colorSets: [modifiedColors],\n        colorMap: modifiedColorMap,\n        name: colorScheme.name + \"Lines\",\n        displayName: (colorScheme.displayName ?? \"\") + \" (Lines)\",\n    }\n}\n\nexport const ContinentColorsLinesColorScheme = getModifiedLinesColorScheme(\n    ContinentColorsColorScheme\n)\n\nCustomColorSchemes.push(ContinentColorsLinesColorScheme)\n\nexport const SingleColorDenim = {\n    name: ColorSchemeName.SingleColorDenim,\n    displayName: \"Single color: Denim\",\n    singleColorScale: true,\n    isDistinct: true,\n    colorSets: [[OwidDistinctColors.Denim]],\n}\n\nCustomColorSchemes.push(SingleColorDenim)\n\nexport const SingleColorTeal = {\n    name: ColorSchemeName.SingleColorTeal,\n    displayName: \"Single color: Teal\",\n    singleColorScale: true,\n    isDistinct: true,\n    colorSets: [[OwidDistinctColors.Teal]],\n}\n\nCustomColorSchemes.push(SingleColorTeal)\n\nexport const SingleColorPurple = {\n    name: ColorSchemeName.SingleColorPurple,\n    displayName: \"Single color: Purple\",\n    singleColorScale: true,\n    isDistinct: true,\n    colorSets: [[OwidDistinctColors.Purple]],\n}\n\nCustomColorSchemes.push(SingleColorPurple)\n\nexport const SingleColorDustyCoral = {\n    name: ColorSchemeName.SingleColorDustyCoral,\n    displayName: \"Single color: Dusty coral\",\n    singleColorScale: true,\n    isDistinct: true,\n    colorSets: [[OwidDistinctColors.DustyCoral]],\n}\n\nCustomColorSchemes.push(SingleColorDustyCoral)\n\nexport const SingleColorDarkCopper = {\n    name: ColorSchemeName.SingleColorDarkCopper,\n    displayName: \"Single color: Dark copper\",\n    singleColorScale: true,\n    isDistinct: true,\n    colorSets: [[OwidDistinctColors.DarkCopper]],\n}\n\nCustomColorSchemes.push(SingleColorDarkCopper)\n\nexport const SingleColorGradientDenim = {\n    name: ColorSchemeName.SingleColorGradientDenim,\n    displayName: \"Single color gradient: Denim\",\n    singleColorScale: true,\n    isDistinct: false,\n    colorSets: [\n        [\n            \"#00173e\",\n            \"#152a55\",\n            \"#273f6c\",\n            \"#3a5484\",\n            \"#4e6b9e\",\n            \"#6683b5\",\n            \"#7f9bcd\",\n            \"#98b3e6\",\n            \"#b2ccff\",\n        ],\n    ],\n}\nCustomColorSchemes.push(SingleColorGradientDenim)\nexport const SingleColorGradientTeal = {\n    name: ColorSchemeName.SingleColorGradientTeal,\n    displayName: \"Single color gradient: Teal\",\n    singleColorScale: true,\n    isDistinct: false,\n    colorSets: [\n        [\n            \"#002926\",\n            \"#003f3b\",\n            \"#005551\",\n            \"#006e68\",\n            \"#088780\",\n            \"#339f98\",\n            \"#51b7b0\",\n            \"#6cd1c9\",\n            \"#86ebe3\",\n        ],\n    ],\n}\nCustomColorSchemes.push(SingleColorGradientTeal)\n\nexport const SingleColorGradientPurple = {\n    name: ColorSchemeName.SingleColorGradientPurple,\n    displayName: \"Single color gradient: Purple\",\n    singleColorScale: true,\n    isDistinct: false,\n    colorSets: [\n        [\n            \"#3d1161\",\n            \"#542777\",\n            \"#6b3d8f\",\n            \"#8354a2\",\n            \"#9c6bb4\",\n            \"#b484c6\",\n            \"#cd9dd9\",\n            \"#e5b7ec\",\n            \"#ffd1ff\",\n        ],\n    ],\n}\nCustomColorSchemes.push(SingleColorGradientPurple)\n\nexport const SingleColorGradientDustyCoral = {\n    name: ColorSchemeName.SingleColorGradientDustyCoral,\n    displayName: \"Single color gradient: DustyCoral\",\n    singleColorScale: true,\n    isDistinct: false,\n    colorSets: [\n        [\n            \"#580014\",\n            \"#711626\",\n            \"#8b293a\",\n            \"#a53c4e\",\n            \"#bf4e63\",\n            \"#d1697b\",\n            \"#e18495\",\n            \"#f09dae\",\n            \"#ffb8c9\",\n        ],\n    ],\n}\nCustomColorSchemes.push(SingleColorGradientDustyCoral)\nexport const SingleColorGradientDarkCopper = {\n    name: ColorSchemeName.SingleColorGradientDarkCopper,\n    displayName: \"Single color gradient: DarkCopper\",\n    singleColorScale: true,\n    isDistinct: false,\n    colorSets: [\n        [\n            \"#390000\",\n            \"#501510\",\n            \"#692919\",\n            \"#823d21\",\n            \"#9c532a\",\n            \"#b46a40\",\n            \"#cd8257\",\n            \"#e69a6e\",\n            \"#ffb285\",\n        ],\n    ],\n}\nCustomColorSchemes.push(SingleColorGradientDarkCopper)\n\nexport const BinaryMapPaletteA = {\n    name: ColorSchemeName.BinaryMapPaletteA,\n    displayName: \"Binary map palette A\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [[\"#dfc27d\", \"#80cdc1\"]],\n}\n\nCustomColorSchemes.push(BinaryMapPaletteA)\n\nexport const BinaryMapPaletteB = {\n    name: ColorSchemeName.BinaryMapPaletteB,\n    displayName: \"Binary map palette B\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [[\"#f1b6da\", \"#b8e186\"]],\n}\n\nCustomColorSchemes.push(BinaryMapPaletteB)\n\nexport const BinaryMapPaletteC = {\n    name: ColorSchemeName.BinaryMapPaletteC,\n    displayName: \"Binary map palette C\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [[\"#c2a5cf\", \"#a6dba0\"]],\n}\n\nCustomColorSchemes.push(BinaryMapPaletteC)\n\nexport const BinaryMapPaletteD = {\n    name: ColorSchemeName.BinaryMapPaletteD,\n    displayName: \"Binary map palette D\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [[\"#fdb863\", \"#b2abd2\"]],\n}\n\nCustomColorSchemes.push(BinaryMapPaletteD)\n\nexport const BinaryMapPaletteE = {\n    name: ColorSchemeName.BinaryMapPaletteE,\n    displayName: \"Binary map palette E\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [[\"#f4a582\", \"#92c5de\"]],\n}\n\nCustomColorSchemes.push(BinaryMapPaletteE)\n\nconst CategoricalMapPalette10 = [\n    OwidMapColors.MutedDenim,\n    OwidMapColors.SoftOrange,\n    OwidMapColors.MutedTeal,\n    OwidMapColors.SoftPurple,\n    OwidMapColors.Sand,\n    OwidMapColors.MutedCherry,\n    OwidMapColors.LeafGreen,\n    OwidMapColors.SkyTurquoise,\n    OwidMapColors.Lavendar,\n    OwidMapColors.Olive,\n]\n\nexport const CategoricalMapPalette17 = [\n    ...CategoricalMapPalette10,\n    OwidMapColors.LightDenim,\n    OwidMapColors.LightOrange,\n    OwidMapColors.LightTeal,\n    OwidMapColors.LightPurple,\n    OwidMapColors.LightSand,\n    OwidMapColors.LightCherry,\n    OwidMapColors.LightGreen,\n]\n\n/**\n * Region name -> color dictionary for maps (not charts), used as the colorMap\n * of OwidCategoricalMapScheme below, so categorical maps that color each country\n * by its region pick the right color. Mostly muted map colors — maps look\n * better with lighter colors, charts need stronger ones — with a few entries\n * inherited unchanged from the ContinentColors spread.\n * Also used by the map region hover tooltips.\n */\nexport const MapContinentColors = {\n    ...ContinentColors,\n\n    // Continents\n    Africa: OwidMapColors.LightPurple,\n    Antarctica: OwidMapColors.SoftOrange,\n    Asia: OwidMapColors.MutedTeal,\n    Europe: OwidMapColors.MutedDenim,\n    NorthAmerica: OwidMapColors.SoftOrange,\n    [\"North America\"]: OwidMapColors.SoftOrange,\n    SouthAmerica: OwidMapColors.MutedCherry,\n    [\"South America\"]: OwidMapColors.MutedCherry,\n    Oceania: OwidMapColors.SkyTurquoise,\n\n    // Sub-regions\n    SubSaharanAfrica: OwidMapColors.SoftPurple,\n    MiddleEastNorthAfrica: OwidMapColors.Sand,\n    CentralAsia: OwidMapColors.LightTeal,\n    EastAsia: OwidMapColors.LightGreen,\n    SoutheastAsia: OwidMapColors.LeafGreen,\n    SouthAsia: OwidMapColors.Olive,\n    CentralAmericaAndCarribean: OwidMapColors.MutedCherry,\n    EasternEurope: OwidMapColors.Lavendar,\n    WesternEurope: OwidMapColors.LightDenim,\n    AustralasiaAndOceania: OwidMapColors.Mustard,\n\n    // World Bank regions\n    \"East Asia and Pacific (WB)\": OwidMapColors.SkyTurquoise,\n    \"Europe and Central Asia (WB)\": OwidMapColors.MutedDenim,\n    \"Middle East, North Africa, Afghanistan and Pakistan (WB)\":\n        OwidMapColors.Sand,\n    \"North America (WB)\": OwidMapColors.SoftOrange,\n    \"South Asia (WB)\": OwidMapColors.Olive,\n    \"Sub-Saharan Africa (WB)\": OwidMapColors.LightPurple,\n    \"Latin America and Caribbean (WB)\": OwidMapColors.MutedCherry,\n\n    // UN regions\n    \"Asia (UN)\": OwidMapColors.MutedTeal,\n    \"Africa (UN)\": OwidMapColors.LightPurple,\n    \"Europe (UN)\": OwidMapColors.MutedDenim,\n    \"Oceania (UN)\": OwidMapColors.SkyTurquoise,\n    \"Northern America (UN)\": OwidMapColors.SoftOrange,\n    \"Latin America and the Caribbean (UN)\": OwidMapColors.MutedCherry,\n\n    // WHO regions\n    \"Africa (WHO)\": OwidMapColors.LightPurple,\n    \"Europe (WHO)\": OwidMapColors.MutedDenim,\n    \"Americas (WHO)\": OwidMapColors.SoftOrange,\n    \"South-East Asia (WHO)\": OwidMapColors.LeafGreen,\n    \"Western Pacific (WHO)\": OwidMapColors.SkyTurquoise,\n    \"Eastern Mediterranean (WHO)\": OwidMapColors.Sand,\n\n    // Pew Research Center regions\n    \"Europe (Pew)\": OwidMapColors.MutedDenim,\n    \"Asia-Pacific (Pew)\": OwidMapColors.MutedTeal,\n    \"North America (Pew)\": OwidMapColors.SoftOrange,\n    \"Sub-Saharan Africa (Pew)\": OwidMapColors.LightPurple,\n    \"Latin America-Caribbean (Pew)\": OwidMapColors.MutedCherry,\n    \"Middle East-North Africa (Pew)\": OwidMapColors.Sand,\n\n    // UN SDG regions\n    \"Australia and New Zealand (UN SDG)\": OwidMapColors.MutedTeal,\n    \"Central and Southern Asia (UN SDG)\": OwidMapColors.Olive,\n    \"Eastern and South-Eastern Asia (UN SDG)\": OwidMapColors.SoftOrange,\n    \"Europe and Northern America (UN SDG)\": OwidMapColors.MutedDenim,\n    \"Latin America and the Caribbean (UN SDG)\": OwidMapColors.MutedCherry,\n    \"Northern Africa and Western Asia (UN SDG)\": OwidMapColors.Sand,\n    \"Oceania (UN SDG)\": OwidMapColors.SkyTurquoise,\n    \"Sub-Saharan Africa (UN SDG)\": OwidMapColors.LightPurple,\n\n    // Maddison Project Database regions\n    \"Western offshoots (Maddison)\": OwidMapColors.SoftOrange,\n    \"Western Europe (Maddison)\": OwidMapColors.MutedDenim,\n    \"Eastern Europe (Maddison)\": OwidMapColors.LightDenim,\n    \"Latin America (Maddison)\": OwidMapColors.MutedCherry,\n    \"East Asia (Maddison)\": OwidMapColors.LightCherry,\n    \"South and South East Asia (Maddison)\": OwidMapColors.Olive,\n    \"Middle East and North Africa (Maddison)\": OwidMapColors.Sand,\n    \"Sub Saharan Africa (Maddison)\": OwidMapColors.LightPurple,\n\n    // WID regions\n    \"North America (WID)\": OwidMapColors.SoftOrange,\n    \"Latin America (WID)\": OwidMapColors.MutedCherry,\n    \"Europe (WID)\": OwidMapColors.MutedDenim,\n    \"Russia and Central Asia (WID)\": OwidMapColors.LightDenim,\n    \"Middle East and North Africa (WID)\": OwidMapColors.Sand,\n    \"Sub-Saharan Africa (WID)\": OwidMapColors.LightPurple,\n    \"East Asia (WID)\": OwidMapColors.LeafGreen,\n    \"South and South-East Asia (WID)\": OwidMapColors.Olive,\n    \"Oceania (WID)\": OwidMapColors.MutedTeal,\n\n    // Energy Institute regions\n    \"North America (EI)\": OwidMapColors.SoftOrange,\n    \"South and Central America (EI)\": OwidMapColors.MutedCherry,\n    \"Europe (EI)\": OwidMapColors.MutedDenim,\n    \"CIS (EI)\": OwidMapColors.LightDenim,\n    \"Middle East (EI)\": OwidMapColors.Sand,\n    \"Africa (EI)\": OwidMapColors.LightPurple,\n    \"Asia Pacific (EI)\": OwidMapColors.LeafGreen,\n\n    // IEA regions (mirroring the Energy Institute regions)\n    \"North America (IEA)\": OwidMapColors.SoftOrange,\n    \"Central and South America (IEA)\": OwidMapColors.MutedCherry,\n    \"Europe (IEA)\": OwidMapColors.MutedDenim,\n    \"Eurasia (IEA)\": OwidMapColors.LightDenim,\n    \"Middle East (IEA)\": OwidMapColors.Sand,\n    \"Africa (IEA)\": OwidMapColors.LightPurple,\n    \"Asia Pacific (IEA)\": OwidMapColors.LeafGreen,\n\n    // Ember regions\n    \"North America (Ember)\": OwidMapColors.SoftOrange,\n    \"Latin America and Caribbean (Ember)\": OwidMapColors.MutedCherry,\n    \"Europe (Ember)\": OwidMapColors.MutedDenim,\n    \"Africa (Ember)\": OwidMapColors.LightPurple,\n    \"Middle East (Ember)\": OwidMapColors.Sand,\n    \"Asia (Ember)\": OwidMapColors.MutedTeal,\n    \"Oceania (Ember)\": OwidMapColors.SkyTurquoise,\n\n    // FAO regions\n    \"Americas (FAO)\": OwidMapColors.SoftOrange,\n    \"Africa (FAO)\": OwidMapColors.LightPurple,\n    \"Europe (FAO)\": OwidMapColors.MutedDenim,\n    \"Asia (FAO)\": OwidMapColors.MutedTeal,\n    \"Oceania (FAO)\": OwidMapColors.SkyTurquoise,\n\n    // FAO subregions (level 2)\n    \"Northern America (FAO)\": OwidMapColors.SoftOrange,\n    \"Caribbean (FAO)\": OwidMapColors.Mustard,\n    \"Central America (FAO)\": OwidMapColors.MutedCherry,\n    \"South America (FAO)\": OwidMapColors.Tomato,\n    \"Northern Africa (FAO)\": OwidMapColors.SoftPurple,\n    \"Eastern Africa (FAO)\": OwidMapColors.LightPurple,\n    \"Middle Africa (FAO)\": OwidMapColors.SoftMagenta,\n    \"Southern Africa (FAO)\": OwidMapColors.MutedPlum,\n    \"Western Africa (FAO)\": OwidMapColors.LightPlum,\n    \"Southern Europe (FAO)\": OwidMapColors.LightTeal,\n    \"Western Europe (FAO)\": OwidMapColors.Lavendar,\n    \"Northern Europe (FAO)\": OwidMapColors.MutedDenim,\n    \"Eastern Europe (FAO)\": OwidMapColors.LightDenim,\n    \"Western Asia (FAO)\": OwidMapColors.Sand,\n    \"Central Asia (FAO)\": OwidMapColors.LightGreen,\n    \"Southern Asia (FAO)\": OwidMapColors.Olive,\n    \"Eastern Asia (FAO)\": OwidMapColors.LeafGreen,\n    \"South-eastern Asia (FAO)\": OwidMapColors.LightOrange,\n    \"Melanesia (FAO)\": OwidMapColors.LightCherry,\n    \"Micronesia (FAO)\": OwidMapColors.LightSand,\n    \"Polynesia (FAO)\": OwidMapColors.SkyTurquoise,\n\n    // FAO SDG regions (mirroring the UN SDG regions)\n    \"Northern America and Europe (FAO)\": OwidMapColors.MutedDenim,\n    \"Latin America and the Caribbean (FAO)\": OwidMapColors.MutedCherry,\n    \"Sub-Saharan Africa (FAO)\": OwidMapColors.LightPurple,\n    \"Western Asia and Northern Africa (FAO)\": OwidMapColors.Sand,\n    \"Central Asia and Southern Asia (FAO)\": OwidMapColors.Olive,\n    \"Eastern Asia and South-eastern Asia (FAO)\": OwidMapColors.SoftOrange,\n    \"Australia and New Zealand (FAO)\": OwidMapColors.MutedTeal,\n    \"Oceania excluding Australia and New Zealand (FAO)\":\n        OwidMapColors.SkyTurquoise,\n\n    // ILO regions\n    \"Africa (ILO)\": OwidMapColors.LightPurple,\n    \"Americas (ILO)\": OwidMapColors.SoftOrange,\n    \"Arab States (ILO)\": OwidMapColors.Sand,\n    \"Asia and the Pacific (ILO)\": OwidMapColors.MutedTeal,\n    \"Europe and Central Asia (ILO)\": OwidMapColors.MutedDenim,\n\n    // ILO sub-regions\n    \"Northern Africa (ILO)\": OwidMapColors.SoftPurple,\n    \"Sub-Saharan Africa (ILO)\": OwidMapColors.LightPurple,\n    \"Latin America and the Caribbean (ILO)\": OwidMapColors.MutedCherry,\n    \"Northern America (ILO)\": OwidMapColors.SoftOrange,\n    \"Eastern Asia (ILO)\": OwidMapColors.LeafGreen,\n    \"South-Eastern Asia and the Pacific (ILO)\": OwidMapColors.MutedTeal,\n    \"Southern Asia (ILO)\": OwidMapColors.Olive,\n    \"Northern, Southern and Western Europe (ILO)\": OwidMapColors.MutedDenim,\n    \"Eastern Europe (ILO)\": OwidMapColors.LightDenim,\n    \"Central and Western Asia (ILO)\": OwidMapColors.LightGreen,\n\n    // UN M49 continents\n    \"Americas (UN M49)\": OwidMapColors.SoftOrange,\n    \"Africa (UN M49)\": OwidMapColors.LightPurple,\n    \"Europe (UN M49)\": OwidMapColors.MutedDenim,\n    \"Asia (UN M49)\": OwidMapColors.MutedTeal,\n    \"Oceania (UN M49)\": OwidMapColors.SkyTurquoise,\n\n    // UN M49 regions\n    \"Australia and New Zealand (UN M49)\": OwidMapColors.MutedTeal,\n    \"Central Asia (UN M49)\": OwidMapColors.LightGreen,\n    \"Eastern Asia (UN M49)\": OwidMapColors.LeafGreen,\n    \"Eastern Europe (UN M49)\": OwidMapColors.LightDenim,\n    \"Latin America and the Caribbean (UN M49)\": OwidMapColors.MutedCherry,\n    \"Melanesia (UN M49)\": OwidMapColors.LightCherry,\n    \"Micronesia (UN M49)\": OwidMapColors.LightSand,\n    \"Northern Africa (UN M49)\": OwidMapColors.SoftPurple,\n    \"Northern America (UN M49)\": OwidMapColors.SoftOrange,\n    \"Northern Europe (UN M49)\": OwidMapColors.MutedDenim,\n    \"Polynesia (UN M49)\": OwidMapColors.SkyTurquoise,\n    \"South-eastern Asia (UN M49)\": OwidMapColors.LightOrange,\n    \"Southern Asia (UN M49)\": OwidMapColors.Olive,\n    \"Southern Europe (UN M49)\": OwidMapColors.LightTeal,\n    \"Sub-Saharan Africa (UN M49)\": OwidMapColors.LightPurple,\n    \"Western Asia (UN M49)\": OwidMapColors.Sand,\n    \"Western Europe (UN M49)\": OwidMapColors.Lavendar,\n\n    // UN M49 regions (level 3)\n    \"Caribbean (UN M49)\": OwidMapColors.Mustard,\n    \"Central America (UN M49)\": OwidMapColors.MutedCherry,\n    \"South America (UN M49)\": OwidMapColors.Tomato,\n    \"Eastern Africa (UN M49)\": OwidMapColors.LightPurple,\n    \"Middle Africa (UN M49)\": OwidMapColors.SoftMagenta,\n    \"Southern Africa (UN M49)\": OwidMapColors.MutedPlum,\n    \"Western Africa (UN M49)\": OwidMapColors.LightPlum,\n\n    // IHME GBD super-regions\n    \"High-income (IHME GBD)\": OwidMapColors.MutedDenim,\n    \"Latin America and Caribbean (IHME GBD)\": OwidMapColors.MutedCherry,\n    \"Sub-Saharan Africa (IHME GBD)\": OwidMapColors.LightPurple,\n    \"North Africa and Middle East (IHME GBD)\": OwidMapColors.Sand,\n    \"Central Europe, Eastern Europe, and Central Asia (IHME GBD)\":\n        OwidMapColors.LightDenim,\n    \"South Asia (IHME GBD)\": OwidMapColors.Olive,\n    \"Southeast Asia, East Asia, and Oceania (IHME GBD)\":\n        OwidMapColors.LeafGreen,\n\n    // IHME GBD regions (level 2)\n    \"High-income North America (IHME GBD)\": OwidMapColors.SoftOrange,\n    \"Caribbean (IHME GBD)\": OwidMapColors.Mustard,\n    \"Central Latin America (IHME GBD)\": OwidMapColors.MutedCherry,\n    \"Andean Latin America (IHME GBD)\": OwidMapColors.LightCherry,\n    \"Tropical Latin America (IHME GBD)\": OwidMapColors.Tomato,\n    \"Southern Latin America (IHME GBD)\": OwidMapColors.LightSand,\n    \"Western Sub-Saharan Africa (IHME GBD)\": OwidMapColors.LightPlum,\n    \"Central Sub-Saharan Africa (IHME GBD)\": OwidMapColors.SoftMagenta,\n    \"Eastern Sub-Saharan Africa (IHME GBD)\": OwidMapColors.LightPurple,\n    \"Southern Sub-Saharan Africa (IHME GBD)\": OwidMapColors.MutedPlum,\n    \"Western Europe (IHME GBD)\": OwidMapColors.Lavendar,\n    \"Central Europe (IHME GBD)\": OwidMapColors.MutedDenim,\n    \"Eastern Europe (IHME GBD)\": OwidMapColors.LightDenim,\n    \"Central Asia (IHME GBD)\": OwidMapColors.LightGreen,\n    \"East Asia (IHME GBD)\": OwidMapColors.LeafGreen,\n    \"Southeast Asia (IHME GBD)\": OwidMapColors.LightOrange,\n    \"High-income Asia Pacific (IHME GBD)\": OwidMapColors.LightTeal,\n    \"Australasia (IHME GBD)\": OwidMapColors.MutedTeal,\n    \"Oceania (IHME GBD)\": OwidMapColors.SkyTurquoise,\n\n    // UCDP regions\n    \"Americas (UCDP)\": OwidMapColors.SoftOrange,\n    \"Africa (UCDP)\": OwidMapColors.LightPurple,\n    \"Middle East (UCDP)\": OwidMapColors.Sand,\n    \"Europe (UCDP)\": OwidMapColors.MutedDenim,\n    \"Asia and Oceania (UCDP)\": OwidMapColors.MutedTeal,\n} as const\n\n/**\n * The preferred scheme for maps with categorical data: known regions are colored\n * by name via MapContinentColors, all other categories positionally from the\n * categorical map palettes.\n */\nexport const OwidCategoricalMapScheme = {\n    name: ColorSchemeName.OwidCategoricalMap,\n    displayName: \"OWID Categorical Map\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [CategoricalMapPalette10, CategoricalMapPalette17],\n    colorMap: MapContinentColors,\n}\nCustomColorSchemes.push(OwidCategoricalMapScheme)\n\nexport const DefaultColorScheme = OwidDistinctColorScheme\n\n// Perceptual color scales from https://github.com/politiken-journalism/scale-color-perceptual\nCustomColorSchemes.push({\n    name: ColorSchemeName.Viridis,\n    singleColorScale: false,\n    colorSets: [\n        [\n            \"#440154\",\n            \"#440256\",\n            \"#450457\",\n            \"#450559\",\n            \"#46075a\",\n            \"#46085c\",\n            \"#460a5d\",\n            \"#460b5e\",\n            \"#470d60\",\n            \"#470e61\",\n            \"#471063\",\n            \"#471164\",\n            \"#471365\",\n            \"#481467\",\n            \"#481668\",\n            \"#481769\",\n            \"#48186a\",\n            \"#481a6c\",\n            \"#481b6d\",\n            \"#481c6e\",\n            \"#481d6f\",\n            \"#481f70\",\n            \"#482071\",\n            \"#482173\",\n            \"#482374\",\n            \"#482475\",\n            \"#482576\",\n            \"#482677\",\n            \"#482878\",\n            \"#482979\",\n            \"#472a7a\",\n            \"#472c7a\",\n            \"#472d7b\",\n            \"#472e7c\",\n            \"#472f7d\",\n            \"#46307e\",\n            \"#46327e\",\n            \"#46337f\",\n            \"#463480\",\n            \"#453581\",\n            \"#453781\",\n            \"#453882\",\n            \"#443983\",\n            \"#443a83\",\n            \"#443b84\",\n            \"#433d84\",\n            \"#433e85\",\n            \"#423f85\",\n            \"#424086\",\n            \"#424186\",\n            \"#414287\",\n            \"#414487\",\n            \"#404588\",\n            \"#404688\",\n            \"#3f4788\",\n            \"#3f4889\",\n            \"#3e4989\",\n            \"#3e4a89\",\n            \"#3e4c8a\",\n            \"#3d4d8a\",\n            \"#3d4e8a\",\n            \"#3c4f8a\",\n            \"#3c508b\",\n            \"#3b518b\",\n            \"#3b528b\",\n            \"#3a538b\",\n            \"#3a548c\",\n            \"#39558c\",\n            \"#39568c\",\n            \"#38588c\",\n            \"#38598c\",\n            \"#375a8c\",\n            \"#375b8d\",\n            \"#365c8d\",\n            \"#365d8d\",\n            \"#355e8d\",\n            \"#355f8d\",\n            \"#34608d\",\n            \"#34618d\",\n            \"#33628d\",\n            \"#33638d\",\n            \"#32648e\",\n            \"#32658e\",\n            \"#31668e\",\n            \"#31678e\",\n            \"#31688e\",\n            \"#30698e\",\n            \"#306a8e\",\n            \"#2f6b8e\",\n            \"#2f6c8e\",\n            \"#2e6d8e\",\n            \"#2e6e8e\",\n            \"#2e6f8e\",\n            \"#2d708e\",\n            \"#2d718e\",\n            \"#2c718e\",\n            \"#2c728e\",\n            \"#2c738e\",\n            \"#2b748e\",\n            \"#2b758e\",\n            \"#2a768e\",\n            \"#2a778e\",\n            \"#2a788e\",\n            \"#29798e\",\n            \"#297a8e\",\n            \"#297b8e\",\n            \"#287c8e\",\n            \"#287d8e\",\n            \"#277e8e\",\n            \"#277f8e\",\n            \"#27808e\",\n            \"#26818e\",\n            \"#26828e\",\n            \"#26828e\",\n            \"#25838e\",\n            \"#25848e\",\n            \"#25858e\",\n            \"#24868e\",\n            \"#24878e\",\n            \"#23888e\",\n            \"#23898e\",\n            \"#238a8d\",\n            \"#228b8d\",\n            \"#228c8d\",\n            \"#228d8d\",\n            \"#218e8d\",\n            \"#218f8d\",\n            \"#21908d\",\n            \"#21918c\",\n            \"#20928c\",\n            \"#20928c\",\n            \"#20938c\",\n            \"#1f948c\",\n            \"#1f958b\",\n            \"#1f968b\",\n            \"#1f978b\",\n            \"#1f988b\",\n            \"#1f998a\",\n            \"#1f9a8a\",\n            \"#1e9b8a\",\n            \"#1e9c89\",\n            \"#1e9d89\",\n            \"#1f9e89\",\n            \"#1f9f88\",\n            \"#1fa088\",\n            \"#1fa188\",\n            \"#1fa187\",\n            \"#1fa287\",\n            \"#20a386\",\n            \"#20a486\",\n            \"#21a585\",\n            \"#21a685\",\n            \"#22a785\",\n            \"#22a884\",\n            \"#23a983\",\n            \"#24aa83\",\n            \"#25ab82\",\n            \"#25ac82\",\n            \"#26ad81\",\n            \"#27ad81\",\n            \"#28ae80\",\n            \"#29af7f\",\n            \"#2ab07f\",\n            \"#2cb17e\",\n            \"#2db27d\",\n            \"#2eb37c\",\n            \"#2fb47c\",\n            \"#31b57b\",\n            \"#32b67a\",\n            \"#34b679\",\n            \"#35b779\",\n            \"#37b878\",\n            \"#38b977\",\n            \"#3aba76\",\n            \"#3bbb75\",\n            \"#3dbc74\",\n            \"#3fbc73\",\n            \"#40bd72\",\n            \"#42be71\",\n            \"#44bf70\",\n            \"#46c06f\",\n            \"#48c16e\",\n            \"#4ac16d\",\n            \"#4cc26c\",\n            \"#4ec36b\",\n            \"#50c46a\",\n            \"#52c569\",\n            \"#54c568\",\n            \"#56c667\",\n            \"#58c765\",\n            \"#5ac864\",\n            \"#5cc863\",\n            \"#5ec962\",\n            \"#60ca60\",\n            \"#63cb5f\",\n            \"#65cb5e\",\n            \"#67cc5c\",\n            \"#69cd5b\",\n            \"#6ccd5a\",\n            \"#6ece58\",\n            \"#70cf57\",\n            \"#73d056\",\n            \"#75d054\",\n            \"#77d153\",\n            \"#7ad151\",\n            \"#7cd250\",\n            \"#7fd34e\",\n            \"#81d34d\",\n            \"#84d44b\",\n            \"#86d549\",\n            \"#89d548\",\n            \"#8bd646\",\n            \"#8ed645\",\n            \"#90d743\",\n            \"#93d741\",\n            \"#95d840\",\n            \"#98d83e\",\n            \"#9bd93c\",\n            \"#9dd93b\",\n            \"#a0da39\",\n            \"#a2da37\",\n            \"#a5db36\",\n            \"#a8db34\",\n            \"#aadc32\",\n            \"#addc30\",\n            \"#b0dd2f\",\n            \"#b2dd2d\",\n            \"#b5de2b\",\n            \"#b8de29\",\n            \"#bade28\",\n            \"#bddf26\",\n            \"#c0df25\",\n            \"#c2df23\",\n            \"#c5e021\",\n            \"#c8e020\",\n            \"#cae11f\",\n            \"#cde11d\",\n            \"#d0e11c\",\n            \"#d2e21b\",\n            \"#d5e21a\",\n            \"#d8e219\",\n            \"#dae319\",\n            \"#dde318\",\n            \"#dfe318\",\n            \"#e2e418\",\n            \"#e5e419\",\n            \"#e7e419\",\n            \"#eae51a\",\n            \"#ece51b\",\n            \"#efe51c\",\n            \"#f1e51d\",\n            \"#f4e61e\",\n            \"#f6e620\",\n            \"#f8e621\",\n            \"#fbe723\",\n            \"#fde725\",\n        ],\n    ],\n})\n\nCustomColorSchemes.push({\n    name: ColorSchemeName.Magma,\n    colorSets: [\n        [\n            \"#000004\",\n            \"#010005\",\n            \"#010106\",\n            \"#010108\",\n            \"#020109\",\n            \"#02020b\",\n            \"#02020d\",\n            \"#03030f\",\n            \"#030312\",\n            \"#040414\",\n            \"#050416\",\n            \"#060518\",\n            \"#06051a\",\n            \"#07061c\",\n            \"#08071e\",\n            \"#090720\",\n            \"#0a0822\",\n            \"#0b0924\",\n            \"#0c0926\",\n            \"#0d0a29\",\n            \"#0e0b2b\",\n            \"#100b2d\",\n            \"#110c2f\",\n            \"#120d31\",\n            \"#130d34\",\n            \"#140e36\",\n            \"#150e38\",\n            \"#160f3b\",\n            \"#180f3d\",\n            \"#19103f\",\n            \"#1a1042\",\n            \"#1c1044\",\n            \"#1d1147\",\n            \"#1e1149\",\n            \"#20114b\",\n            \"#21114e\",\n            \"#221150\",\n            \"#241253\",\n            \"#251255\",\n            \"#271258\",\n            \"#29115a\",\n            \"#2a115c\",\n            \"#2c115f\",\n            \"#2d1161\",\n            \"#2f1163\",\n            \"#311165\",\n            \"#331067\",\n            \"#341069\",\n            \"#36106b\",\n            \"#38106c\",\n            \"#390f6e\",\n            \"#3b0f70\",\n            \"#3d0f71\",\n            \"#3f0f72\",\n            \"#400f74\",\n            \"#420f75\",\n            \"#440f76\",\n            \"#451077\",\n            \"#471078\",\n            \"#491078\",\n            \"#4a1079\",\n            \"#4c117a\",\n            \"#4e117b\",\n            \"#4f127b\",\n            \"#51127c\",\n            \"#52137c\",\n            \"#54137d\",\n            \"#56147d\",\n            \"#57157e\",\n            \"#59157e\",\n            \"#5a167e\",\n            \"#5c167f\",\n            \"#5d177f\",\n            \"#5f187f\",\n            \"#601880\",\n            \"#621980\",\n            \"#641a80\",\n            \"#651a80\",\n            \"#671b80\",\n            \"#681c81\",\n            \"#6a1c81\",\n            \"#6b1d81\",\n            \"#6d1d81\",\n            \"#6e1e81\",\n            \"#701f81\",\n            \"#721f81\",\n            \"#732081\",\n            \"#752181\",\n            \"#762181\",\n            \"#782281\",\n            \"#792282\",\n            \"#7b2382\",\n            \"#7c2382\",\n            \"#7e2482\",\n            \"#802582\",\n            \"#812581\",\n            \"#832681\",\n            \"#842681\",\n            \"#862781\",\n            \"#882781\",\n            \"#892881\",\n            \"#8b2981\",\n            \"#8c2981\",\n            \"#8e2a81\",\n            \"#902a81\",\n            \"#912b81\",\n            \"#932b80\",\n            \"#942c80\",\n            \"#962c80\",\n            \"#982d80\",\n            \"#992d80\",\n            \"#9b2e7f\",\n            \"#9c2e7f\",\n            \"#9e2f7f\",\n            \"#a02f7f\",\n            \"#a1307e\",\n            \"#a3307e\",\n            \"#a5317e\",\n            \"#a6317d\",\n            \"#a8327d\",\n            \"#aa337d\",\n            \"#ab337c\",\n            \"#ad347c\",\n            \"#ae347b\",\n            \"#b0357b\",\n            \"#b2357b\",\n            \"#b3367a\",\n            \"#b5367a\",\n            \"#b73779\",\n            \"#b83779\",\n            \"#ba3878\",\n            \"#bc3978\",\n            \"#bd3977\",\n            \"#bf3a77\",\n            \"#c03a76\",\n            \"#c23b75\",\n            \"#c43c75\",\n            \"#c53c74\",\n            \"#c73d73\",\n            \"#c83e73\",\n            \"#ca3e72\",\n            \"#cc3f71\",\n            \"#cd4071\",\n            \"#cf4070\",\n            \"#d0416f\",\n            \"#d2426f\",\n            \"#d3436e\",\n            \"#d5446d\",\n            \"#d6456c\",\n            \"#d8456c\",\n            \"#d9466b\",\n            \"#db476a\",\n            \"#dc4869\",\n            \"#de4968\",\n            \"#df4a68\",\n            \"#e04c67\",\n            \"#e24d66\",\n            \"#e34e65\",\n            \"#e44f64\",\n            \"#e55064\",\n            \"#e75263\",\n            \"#e85362\",\n            \"#e95462\",\n            \"#ea5661\",\n            \"#eb5760\",\n            \"#ec5860\",\n            \"#ed5a5f\",\n            \"#ee5b5e\",\n            \"#ef5d5e\",\n            \"#f05f5e\",\n            \"#f1605d\",\n            \"#f2625d\",\n            \"#f2645c\",\n            \"#f3655c\",\n            \"#f4675c\",\n            \"#f4695c\",\n            \"#f56b5c\",\n            \"#f66c5c\",\n            \"#f66e5c\",\n            \"#f7705c\",\n            \"#f7725c\",\n            \"#f8745c\",\n            \"#f8765c\",\n            \"#f9785d\",\n            \"#f9795d\",\n            \"#f97b5d\",\n            \"#fa7d5e\",\n            \"#fa7f5e\",\n            \"#fa815f\",\n            \"#fb835f\",\n            \"#fb8560\",\n            \"#fb8761\",\n            \"#fc8961\",\n            \"#fc8a62\",\n            \"#fc8c63\",\n            \"#fc8e64\",\n            \"#fc9065\",\n            \"#fd9266\",\n            \"#fd9467\",\n            \"#fd9668\",\n            \"#fd9869\",\n            \"#fd9a6a\",\n            \"#fd9b6b\",\n            \"#fe9d6c\",\n            \"#fe9f6d\",\n            \"#fea16e\",\n            \"#fea36f\",\n            \"#fea571\",\n            \"#fea772\",\n            \"#fea973\",\n            \"#feaa74\",\n            \"#feac76\",\n            \"#feae77\",\n            \"#feb078\",\n            \"#feb27a\",\n            \"#feb47b\",\n            \"#feb67c\",\n            \"#feb77e\",\n            \"#feb97f\",\n            \"#febb81\",\n            \"#febd82\",\n            \"#febf84\",\n            \"#fec185\",\n            \"#fec287\",\n            \"#fec488\",\n            \"#fec68a\",\n            \"#fec88c\",\n            \"#feca8d\",\n            \"#fecc8f\",\n            \"#fecd90\",\n            \"#fecf92\",\n            \"#fed194\",\n            \"#fed395\",\n            \"#fed597\",\n            \"#fed799\",\n            \"#fed89a\",\n            \"#fdda9c\",\n            \"#fddc9e\",\n            \"#fddea0\",\n            \"#fde0a1\",\n            \"#fde2a3\",\n            \"#fde3a5\",\n            \"#fde5a7\",\n            \"#fde7a9\",\n            \"#fde9aa\",\n            \"#fdebac\",\n            \"#fcecae\",\n            \"#fceeb0\",\n            \"#fcf0b2\",\n            \"#fcf2b4\",\n            \"#fcf4b6\",\n            \"#fcf6b8\",\n            \"#fcf7b9\",\n            \"#fcf9bb\",\n            \"#fcfbbd\",\n            \"#fcfdbf\",\n        ],\n    ],\n})\n\nCustomColorSchemes.push({\n    name: ColorSchemeName.Plasma,\n    colorSets: [\n        [\n            \"#0d0887\",\n            \"#100788\",\n            \"#130789\",\n            \"#16078a\",\n            \"#19068c\",\n            \"#1b068d\",\n            \"#1d068e\",\n            \"#20068f\",\n            \"#220690\",\n            \"#240691\",\n            \"#260591\",\n            \"#280592\",\n            \"#2a0593\",\n            \"#2c0594\",\n            \"#2e0595\",\n            \"#2f0596\",\n            \"#310597\",\n            \"#330597\",\n            \"#350498\",\n            \"#370499\",\n            \"#38049a\",\n            \"#3a049a\",\n            \"#3c049b\",\n            \"#3e049c\",\n            \"#3f049c\",\n            \"#41049d\",\n            \"#43039e\",\n            \"#44039e\",\n            \"#46039f\",\n            \"#48039f\",\n            \"#4903a0\",\n            \"#4b03a1\",\n            \"#4c02a1\",\n            \"#4e02a2\",\n            \"#5002a2\",\n            \"#5102a3\",\n            \"#5302a3\",\n            \"#5502a4\",\n            \"#5601a4\",\n            \"#5801a4\",\n            \"#5901a5\",\n            \"#5b01a5\",\n            \"#5c01a6\",\n            \"#5e01a6\",\n            \"#6001a6\",\n            \"#6100a7\",\n            \"#6300a7\",\n            \"#6400a7\",\n            \"#6600a7\",\n            \"#6700a8\",\n            \"#6900a8\",\n            \"#6a00a8\",\n            \"#6c00a8\",\n            \"#6e00a8\",\n            \"#6f00a8\",\n            \"#7100a8\",\n            \"#7201a8\",\n            \"#7401a8\",\n            \"#7501a8\",\n            \"#7701a8\",\n            \"#7801a8\",\n            \"#7a02a8\",\n            \"#7b02a8\",\n            \"#7d03a8\",\n            \"#7e03a8\",\n            \"#8004a8\",\n            \"#8104a7\",\n            \"#8305a7\",\n            \"#8405a7\",\n            \"#8606a6\",\n            \"#8707a6\",\n            \"#8808a6\",\n            \"#8a09a5\",\n            \"#8b0aa5\",\n            \"#8d0ba5\",\n            \"#8e0ca4\",\n            \"#8f0da4\",\n            \"#910ea3\",\n            \"#920fa3\",\n            \"#9410a2\",\n            \"#9511a1\",\n            \"#9613a1\",\n            \"#9814a0\",\n            \"#99159f\",\n            \"#9a169f\",\n            \"#9c179e\",\n            \"#9d189d\",\n            \"#9e199d\",\n            \"#a01a9c\",\n            \"#a11b9b\",\n            \"#a21d9a\",\n            \"#a31e9a\",\n            \"#a51f99\",\n            \"#a62098\",\n            \"#a72197\",\n            \"#a82296\",\n            \"#aa2395\",\n            \"#ab2494\",\n            \"#ac2694\",\n            \"#ad2793\",\n            \"#ae2892\",\n            \"#b02991\",\n            \"#b12a90\",\n            \"#b22b8f\",\n            \"#b32c8e\",\n            \"#b42e8d\",\n            \"#b52f8c\",\n            \"#b6308b\",\n            \"#b7318a\",\n            \"#b83289\",\n            \"#ba3388\",\n            \"#bb3488\",\n            \"#bc3587\",\n            \"#bd3786\",\n            \"#be3885\",\n            \"#bf3984\",\n            \"#c03a83\",\n            \"#c13b82\",\n            \"#c23c81\",\n            \"#c33d80\",\n            \"#c43e7f\",\n            \"#c5407e\",\n            \"#c6417d\",\n            \"#c7427c\",\n            \"#c8437b\",\n            \"#c9447a\",\n            \"#ca457a\",\n            \"#cb4679\",\n            \"#cc4778\",\n            \"#cc4977\",\n            \"#cd4a76\",\n            \"#ce4b75\",\n            \"#cf4c74\",\n            \"#d04d73\",\n            \"#d14e72\",\n            \"#d24f71\",\n            \"#d35171\",\n            \"#d45270\",\n            \"#d5536f\",\n            \"#d5546e\",\n            \"#d6556d\",\n            \"#d7566c\",\n            \"#d8576b\",\n            \"#d9586a\",\n            \"#da5a6a\",\n            \"#da5b69\",\n            \"#db5c68\",\n            \"#dc5d67\",\n            \"#dd5e66\",\n            \"#de5f65\",\n            \"#de6164\",\n            \"#df6263\",\n            \"#e06363\",\n            \"#e16462\",\n            \"#e26561\",\n            \"#e26660\",\n            \"#e3685f\",\n            \"#e4695e\",\n            \"#e56a5d\",\n            \"#e56b5d\",\n            \"#e66c5c\",\n            \"#e76e5b\",\n            \"#e76f5a\",\n            \"#e87059\",\n            \"#e97158\",\n            \"#e97257\",\n            \"#ea7457\",\n            \"#eb7556\",\n            \"#eb7655\",\n            \"#ec7754\",\n            \"#ed7953\",\n            \"#ed7a52\",\n            \"#ee7b51\",\n            \"#ef7c51\",\n            \"#ef7e50\",\n            \"#f07f4f\",\n            \"#f0804e\",\n            \"#f1814d\",\n            \"#f1834c\",\n            \"#f2844b\",\n            \"#f3854b\",\n            \"#f3874a\",\n            \"#f48849\",\n            \"#f48948\",\n            \"#f58b47\",\n            \"#f58c46\",\n            \"#f68d45\",\n            \"#f68f44\",\n            \"#f79044\",\n            \"#f79143\",\n            \"#f79342\",\n            \"#f89441\",\n            \"#f89540\",\n            \"#f9973f\",\n            \"#f9983e\",\n            \"#f99a3e\",\n            \"#fa9b3d\",\n            \"#fa9c3c\",\n            \"#fa9e3b\",\n            \"#fb9f3a\",\n            \"#fba139\",\n            \"#fba238\",\n            \"#fca338\",\n            \"#fca537\",\n            \"#fca636\",\n            \"#fca835\",\n            \"#fca934\",\n            \"#fdab33\",\n            \"#fdac33\",\n            \"#fdae32\",\n            \"#fdaf31\",\n            \"#fdb130\",\n            \"#fdb22f\",\n            \"#fdb42f\",\n            \"#fdb52e\",\n            \"#feb72d\",\n            \"#feb82c\",\n            \"#feba2c\",\n            \"#febb2b\",\n            \"#febd2a\",\n            \"#febe2a\",\n            \"#fec029\",\n            \"#fdc229\",\n            \"#fdc328\",\n            \"#fdc527\",\n            \"#fdc627\",\n            \"#fdc827\",\n            \"#fdca26\",\n            \"#fdcb26\",\n            \"#fccd25\",\n            \"#fcce25\",\n            \"#fcd025\",\n            \"#fcd225\",\n            \"#fbd324\",\n            \"#fbd524\",\n            \"#fbd724\",\n            \"#fad824\",\n            \"#fada24\",\n            \"#f9dc24\",\n            \"#f9dd25\",\n            \"#f8df25\",\n            \"#f8e125\",\n            \"#f7e225\",\n            \"#f7e425\",\n            \"#f6e626\",\n            \"#f6e826\",\n            \"#f5e926\",\n            \"#f5eb27\",\n            \"#f4ed27\",\n            \"#f3ee27\",\n            \"#f3f027\",\n            \"#f2f227\",\n            \"#f1f426\",\n            \"#f1f525\",\n            \"#f0f724\",\n            \"#f0f921\",\n        ],\n    ],\n})\n\nCustomColorSchemes.push({\n    name: ColorSchemeName.Inferno,\n    colorSets: [\n        [\n            \"#000004\",\n            \"#010005\",\n            \"#010106\",\n            \"#010108\",\n            \"#02010a\",\n            \"#02020c\",\n            \"#02020e\",\n            \"#030210\",\n            \"#040312\",\n            \"#040314\",\n            \"#050417\",\n            \"#060419\",\n            \"#07051b\",\n            \"#08051d\",\n            \"#09061f\",\n            \"#0a0722\",\n            \"#0b0724\",\n            \"#0c0826\",\n            \"#0d0829\",\n            \"#0e092b\",\n            \"#10092d\",\n            \"#110a30\",\n            \"#120a32\",\n            \"#140b34\",\n            \"#150b37\",\n            \"#160b39\",\n            \"#180c3c\",\n            \"#190c3e\",\n            \"#1b0c41\",\n            \"#1c0c43\",\n            \"#1e0c45\",\n            \"#1f0c48\",\n            \"#210c4a\",\n            \"#230c4c\",\n            \"#240c4f\",\n            \"#260c51\",\n            \"#280b53\",\n            \"#290b55\",\n            \"#2b0b57\",\n            \"#2d0b59\",\n            \"#2f0a5b\",\n            \"#310a5c\",\n            \"#320a5e\",\n            \"#340a5f\",\n            \"#360961\",\n            \"#380962\",\n            \"#390963\",\n            \"#3b0964\",\n            \"#3d0965\",\n            \"#3e0966\",\n            \"#400a67\",\n            \"#420a68\",\n            \"#440a68\",\n            \"#450a69\",\n            \"#470b6a\",\n            \"#490b6a\",\n            \"#4a0c6b\",\n            \"#4c0c6b\",\n            \"#4d0d6c\",\n            \"#4f0d6c\",\n            \"#510e6c\",\n            \"#520e6d\",\n            \"#540f6d\",\n            \"#550f6d\",\n            \"#57106e\",\n            \"#59106e\",\n            \"#5a116e\",\n            \"#5c126e\",\n            \"#5d126e\",\n            \"#5f136e\",\n            \"#61136e\",\n            \"#62146e\",\n            \"#64156e\",\n            \"#65156e\",\n            \"#67166e\",\n            \"#69166e\",\n            \"#6a176e\",\n            \"#6c186e\",\n            \"#6d186e\",\n            \"#6f196e\",\n            \"#71196e\",\n            \"#721a6e\",\n            \"#741a6e\",\n            \"#751b6e\",\n            \"#771c6d\",\n            \"#781c6d\",\n            \"#7a1d6d\",\n            \"#7c1d6d\",\n            \"#7d1e6d\",\n            \"#7f1e6c\",\n            \"#801f6c\",\n            \"#82206c\",\n            \"#84206b\",\n            \"#85216b\",\n            \"#87216b\",\n            \"#88226a\",\n            \"#8a226a\",\n            \"#8c2369\",\n            \"#8d2369\",\n            \"#8f2469\",\n            \"#902568\",\n            \"#922568\",\n            \"#932667\",\n            \"#952667\",\n            \"#972766\",\n            \"#982766\",\n            \"#9a2865\",\n            \"#9b2964\",\n            \"#9d2964\",\n            \"#9f2a63\",\n            \"#a02a63\",\n            \"#a22b62\",\n            \"#a32c61\",\n            \"#a52c60\",\n            \"#a62d60\",\n            \"#a82e5f\",\n            \"#a92e5e\",\n            \"#ab2f5e\",\n            \"#ad305d\",\n            \"#ae305c\",\n            \"#b0315b\",\n            \"#b1325a\",\n            \"#b3325a\",\n            \"#b43359\",\n            \"#b63458\",\n            \"#b73557\",\n            \"#b93556\",\n            \"#ba3655\",\n            \"#bc3754\",\n            \"#bd3853\",\n            \"#bf3952\",\n            \"#c03a51\",\n            \"#c13a50\",\n            \"#c33b4f\",\n            \"#c43c4e\",\n            \"#c63d4d\",\n            \"#c73e4c\",\n            \"#c83f4b\",\n            \"#ca404a\",\n            \"#cb4149\",\n            \"#cc4248\",\n            \"#ce4347\",\n            \"#cf4446\",\n            \"#d04545\",\n            \"#d24644\",\n            \"#d34743\",\n            \"#d44842\",\n            \"#d54a41\",\n            \"#d74b3f\",\n            \"#d84c3e\",\n            \"#d94d3d\",\n            \"#da4e3c\",\n            \"#db503b\",\n            \"#dd513a\",\n            \"#de5238\",\n            \"#df5337\",\n            \"#e05536\",\n            \"#e15635\",\n            \"#e25734\",\n            \"#e35933\",\n            \"#e45a31\",\n            \"#e55c30\",\n            \"#e65d2f\",\n            \"#e75e2e\",\n            \"#e8602d\",\n            \"#e9612b\",\n            \"#ea632a\",\n            \"#eb6429\",\n            \"#eb6628\",\n            \"#ec6726\",\n            \"#ed6925\",\n            \"#ee6a24\",\n            \"#ef6c23\",\n            \"#ef6e21\",\n            \"#f06f20\",\n            \"#f1711f\",\n            \"#f1731d\",\n            \"#f2741c\",\n            \"#f3761b\",\n            \"#f37819\",\n            \"#f47918\",\n            \"#f57b17\",\n            \"#f57d15\",\n            \"#f67e14\",\n            \"#f68013\",\n            \"#f78212\",\n            \"#f78410\",\n            \"#f8850f\",\n            \"#f8870e\",\n            \"#f8890c\",\n            \"#f98b0b\",\n            \"#f98c0a\",\n            \"#f98e09\",\n            \"#fa9008\",\n            \"#fa9207\",\n            \"#fa9407\",\n            \"#fb9606\",\n            \"#fb9706\",\n            \"#fb9906\",\n            \"#fb9b06\",\n            \"#fb9d07\",\n            \"#fc9f07\",\n            \"#fca108\",\n            \"#fca309\",\n            \"#fca50a\",\n            \"#fca60c\",\n            \"#fca80d\",\n            \"#fcaa0f\",\n            \"#fcac11\",\n            \"#fcae12\",\n            \"#fcb014\",\n            \"#fcb216\",\n            \"#fcb418\",\n            \"#fbb61a\",\n            \"#fbb81d\",\n            \"#fbba1f\",\n            \"#fbbc21\",\n            \"#fbbe23\",\n            \"#fac026\",\n            \"#fac228\",\n            \"#fac42a\",\n            \"#fac62d\",\n            \"#f9c72f\",\n            \"#f9c932\",\n            \"#f9cb35\",\n            \"#f8cd37\",\n            \"#f8cf3a\",\n            \"#f7d13d\",\n            \"#f7d340\",\n            \"#f6d543\",\n            \"#f6d746\",\n            \"#f5d949\",\n            \"#f5db4c\",\n            \"#f4dd4f\",\n            \"#f4df53\",\n            \"#f4e156\",\n            \"#f3e35a\",\n            \"#f3e55d\",\n            \"#f2e661\",\n            \"#f2e865\",\n            \"#f2ea69\",\n            \"#f1ec6d\",\n            \"#f1ed71\",\n            \"#f1ef75\",\n            \"#f1f179\",\n            \"#f2f27d\",\n            \"#f2f482\",\n            \"#f3f586\",\n            \"#f3f68a\",\n            \"#f4f88e\",\n            \"#f5f992\",\n            \"#f6fa96\",\n            \"#f8fb9a\",\n            \"#f9fc9d\",\n            \"#fafda1\",\n            \"#fcffa4\",\n        ],\n    ],\n})\n","export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n    reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n    reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n    reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n    reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n    reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHex8: color_formatHex8,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n  return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb() {\n    return this;\n  },\n  clamp() {\n    return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n  },\n  displayable() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatHex8: rgb_formatHex8,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n  const a = clampa(this.opacity);\n  return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n  return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n  return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n  value = clampi(value);\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  clamp() {\n    return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n  },\n  displayable() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl() {\n    const a = clampa(this.opacity);\n    return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n  }\n}));\n\nfunction clamph(value) {\n  value = (value || 0) % 360;\n  return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n  return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n","export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n  const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n  return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n  if (value == null) return identity;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n  return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n  return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n  return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n  // p0 = [ux0, uy0, w0]\n  // p1 = [ux1, uy1, w1]\n  function zoom(p0, p1) {\n    var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n        ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n        dx = ux1 - ux0,\n        dy = uy1 - uy0,\n        d2 = dx * dx + dy * dy,\n        i,\n        S;\n\n    // Special case for u0 ≅ u1.\n    if (d2 < epsilon2) {\n      S = Math.log(w1 / w0) / rho;\n      i = function(t) {\n        return [\n          ux0 + t * dx,\n          uy0 + t * dy,\n          w0 * Math.exp(rho * t * S)\n        ];\n      }\n    }\n\n    // General case.\n    else {\n      var d1 = Math.sqrt(d2),\n          b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n          b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n          r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n          r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n      S = (r1 - r0) / rho;\n      i = function(t) {\n        var s = t * S,\n            coshr0 = cosh(r0),\n            u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n        return [\n          ux0 + u * dx,\n          uy0 + u * dy,\n          w0 * coshr0 / cosh(rho * s + r0)\n        ];\n      }\n    }\n\n    i.duration = S * 1000 * rho / Math.SQRT2;\n\n    return i;\n  }\n\n  zoom.rho = function(_) {\n    var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n    return zoomRho(_1, _2, _4);\n  };\n\n  return zoom;\n})(Math.SQRT2, 2, 4);\n","export default function(interpolator, n) {\n  var samples = new Array(n);\n  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n  return samples;\n}\n","import * as _ from \"lodash-es\"\nimport { Color } from \"@ourworldindata/types\"\nimport { rgb, color, RGBColor } from \"d3-color\"\nimport { interpolate } from \"d3-interpolate\"\n\nexport const interpolateArray = (\n    scaleArr: string[]\n): ((t: number) => string) => {\n    const N = scaleArr.length - 2 // -1 for spacings, -1 for number of interpolate fns\n    const intervalWidth = 1 / N\n    const intervals: Array<(t: number) => string> = []\n\n    for (let i = 0; i <= N; i++) {\n        intervals[i] = interpolate(rgb(scaleArr[i]), rgb(scaleArr[i + 1]))\n    }\n\n    return (t: number): string => {\n        if (t < 0 || t > 1)\n            throw new Error(\"Outside the allowed range of [0, 1]\")\n\n        const i = Math.floor(t * N)\n        const intervalOffset = i * intervalWidth\n\n        return intervals[i](t / intervalWidth - intervalOffset / intervalWidth)\n    }\n}\n\nexport function getLeastUsedColor(\n    availableColors: Color[],\n    usedColors: Color[]\n): Color | undefined {\n    // If there are unused colors, return the first available\n    const unusedColors = _.difference(availableColors, usedColors)\n    if (unusedColors.length > 0) return unusedColors[0]\n\n    // If all colors are used, we want to count the times each color is used, and use the most\n    // unused one.\n    const colorCounts = Object.entries(_.groupBy(usedColors)).map(\n        ([color, arr]): any[] => [color, arr.length]\n    )\n    const mostUnusedColor = _.minBy(colorCounts, ([, count]) => count) as [\n        string,\n        number,\n    ]\n    return mostUnusedColor[0]\n}\n\n// Taken from https://github.com/Qix-/color/blob/594a9af778f9a89541510bd1ae24061c82f24693/index.js#L287-L292\nfunction getYiq(rgb: RGBColor): number {\n    // YIQ equation from http://24ways.org/2010/calculating-color-contrast\n    return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000\n}\n\nexport function calculateLightnessScore(colorHex: Color): number | undefined {\n    const rgb = color(colorHex)?.rgb()\n    if (!rgb) return undefined\n    const yiq = getYiq(rgb)\n    return yiq / 255\n}\n\nexport function isDarkColor(colorSpecifier: string): boolean | undefined {\n    const rgb = color(colorSpecifier)?.rgb()\n    if (!rgb) return undefined\n    return getYiq(rgb) < 128\n}\n\n// See https://observablehq.com/@danielgavrilov/darken-colors-to-meet-a-target-contrast-ratio\nfunction darkenColorToTargetYiq(colorHex: Color, targetYiq: number): Color {\n    const c = color(colorHex)?.rgb()\n    if (!c) return colorHex\n    const darkenCoeff = getYiq(c) / targetYiq - 1.0\n    if (darkenCoeff > 0) return c.darker(darkenCoeff).formatHex()\n    return c.formatHex()\n}\n\nexport function darkenColorForLine(colorHex: Color): Color {\n    return darkenColorToTargetYiq(colorHex, 170)\n}\n\nexport function darkenColorForText(colorHex: Color): Color {\n    return darkenColorToTargetYiq(colorHex, 125)\n}\n\nexport function darkenColorForHighContrastText(colorHex: Color): Color {\n    return darkenColorToTargetYiq(colorHex, 105)\n}\n","import * as _ from \"lodash-es\"\nimport { rgb } from \"d3-color\"\nimport { interpolate } from \"d3-interpolate\"\nimport { lastOfNonEmptyArray, Color } from \"@ourworldindata/utils\"\nimport { ColorSchemeInterface } from \"@ourworldindata/types\"\nimport { interpolateArray } from \"./ColorUtils\"\n\nexport class ColorScheme implements ColorSchemeInterface {\n    name: string\n    colorSets: Color[][]\n    singleColorScale: boolean\n    isDistinct: boolean\n    colorMap?: Record<string, Color>\n\n    constructor(\n        name: string,\n        colorSets: Color[][],\n        singleColorScale?: boolean,\n        isDistinct?: boolean,\n        colorMap?: Record<string, Color>\n    ) {\n        this.name = name\n        this.colorSets = []\n        this.singleColorScale = !!singleColorScale\n        this.isDistinct = !!isDistinct\n        this.colorMap = colorMap\n        colorSets.forEach((set) => (this.colorSets[set.length] = set))\n    }\n\n    /** How many colors the scheme defines, before any interpolation */\n    get paletteSize(): number {\n        if (this.colorSets.length === 0) return 0\n        return lastOfNonEmptyArray(this.colorSets).length\n    }\n\n    improviseGradientFromShorter(\n        shortColors: Color[],\n        numColors: number\n    ): Color[] {\n        const newColors = _.clone(shortColors)\n\n        while (newColors.length < numColors) {\n            for (let index = newColors.length - 1; index > 0; index -= 1) {\n                const startColor = rgb(newColors[index - 1])\n                const endColor = rgb(newColors[index])\n                const newColor = interpolate(startColor, endColor)(0.5)\n                newColors.splice(index, 0, newColor)\n\n                if (newColors.length >= numColors) break\n            }\n        }\n\n        return newColors\n    }\n\n    improviseGradientFromLonger(\n        knownColors: Color[],\n        numColors: number\n    ): Color[] {\n        const newColors = []\n        const scale = interpolateArray(knownColors)\n        for (let index = 0; index < numColors; index++) {\n            newColors.push(scale(index / numColors))\n        }\n        return newColors\n    }\n\n    getGradientColors(numColors: number): Color[] {\n        const { colorSets } = this\n\n        if (colorSets[numColors]) return _.clone(colorSets[numColors])\n\n        const prevColors = colorSets\n            .toReversed()\n            .find((set) => set && set.length < numColors)\n        if (prevColors)\n            return this.improviseGradientFromShorter(prevColors, numColors)\n        else\n            return this.improviseGradientFromLonger(\n                colorSets.find((set) => !!set) as Color[],\n                numColors\n            )\n    }\n\n    getDistinctColors(numColors: number): Color[] {\n        const { colorSets } = this\n        if (colorSets.length === 0) return []\n        if (colorSets[numColors]) return _.clone(colorSets[numColors])\n\n        if (numColors > colorSets.length - 1) {\n            // If more colors are wanted than we have defined, have to improvise\n            const colorSet = lastOfNonEmptyArray(colorSets)\n            // Special case for colorSchemes with a single color where the usual interpolation would not work\n            if (colorSet.length === 1) return Array(numColors).fill(colorSet[0])\n            return this.improviseGradientFromShorter(colorSet, numColors)\n        }\n\n        // We have enough colors but not a specific set for this number-- improvise from the closest longer set\n        for (let i = numColors; i < colorSets.length; i++) {\n            if (colorSets[i]) {\n                return colorSets[i].slice(0, numColors)\n            }\n        }\n\n        return []\n    }\n\n    getColors(numColors: number): Color[] {\n        return this.isDistinct\n            ? this.getDistinctColors(numColors)\n            : this.getGradientColors(numColors)\n    }\n\n    getUniqValueColorMap(\n        uniqValues: any[],\n        inverseOrder?: boolean\n    ): Map<number, string> {\n        const colors = this.getColors(uniqValues.length) || []\n        if (inverseOrder) colors.reverse()\n\n        // We want to display same values using the same color, e.g. two values of 100 get the same shade of green\n        // Therefore, we create a map from all possible (unique) values to the corresponding color\n        const colorByValue = new Map<number, Color>()\n        uniqValues.forEach((value, index) =>\n            colorByValue.set(value, colors[index])\n        )\n        return colorByValue\n    }\n\n    static fromObject(\n        name: string,\n        colorSets: { [key: string]: Color[] },\n        singleColorScale?: boolean\n    ): ColorScheme {\n        const colorSetsArray: Color[][] = []\n        Object.keys(colorSets).forEach(\n            (numColors): string[] =>\n                (colorSetsArray[+numColors] = colorSets[numColors])\n        )\n        return new ColorScheme(name, colorSetsArray, singleColorScale)\n    }\n}\n","// This product includes color specifications and designs developed by Cynthia Brewer (http://colorbrewer.org/).\n// JavaScript specs as packaged in the D3 library (d3js.org). Please see license at http://colorbrewer.org/export/LICENSE.txt\n!function() {\n\nvar colorbrewer = {schemeGroups: {\nsequential: [\"BuGn\",\"BuPu\",\"GnBu\",\"OrRd\",\"PuBu\",\"PuBuGn\",\"PuRd\",\"RdPu\",\"YlGn\",\"YlGnBu\",\"YlOrBr\",\"YlOrRd\"],\nsinglehue:[\"Blues\",\"Greens\",\"Greys\",\"Oranges\",\"Purples\",\"Reds\"],\ndiverging: [\"BrBG\",\"PiYG\",\"PRGn\",\"PuOr\",\"RdBu\",\"RdGy\",\"RdYlBu\",\"RdYlGn\",\"Spectral\"],\nqualitative: [\"Accent\",\"Dark2\",\"Paired\",\"Pastel1\",\"Pastel2\",\"Set1\",\"Set2\",\"Set3\"]\n}, YlGn: {\n3: [\"#f7fcb9\",\"#addd8e\",\"#31a354\"],\n4: [\"#ffffcc\",\"#c2e699\",\"#78c679\",\"#238443\"],\n5: [\"#ffffcc\",\"#c2e699\",\"#78c679\",\"#31a354\",\"#006837\"],\n6: [\"#ffffcc\",\"#d9f0a3\",\"#addd8e\",\"#78c679\",\"#31a354\",\"#006837\"],\n7: [\"#ffffcc\",\"#d9f0a3\",\"#addd8e\",\"#78c679\",\"#41ab5d\",\"#238443\",\"#005a32\"],\n8: [\"#ffffe5\",\"#f7fcb9\",\"#d9f0a3\",\"#addd8e\",\"#78c679\",\"#41ab5d\",\"#238443\",\"#005a32\"],\n9: [\"#ffffe5\",\"#f7fcb9\",\"#d9f0a3\",\"#addd8e\",\"#78c679\",\"#41ab5d\",\"#238443\",\"#006837\",\"#004529\"]\n},YlGnBu: {\n3: [\"#edf8b1\",\"#7fcdbb\",\"#2c7fb8\"],\n4: [\"#ffffcc\",\"#a1dab4\",\"#41b6c4\",\"#225ea8\"],\n5: [\"#ffffcc\",\"#a1dab4\",\"#41b6c4\",\"#2c7fb8\",\"#253494\"],\n6: [\"#ffffcc\",\"#c7e9b4\",\"#7fcdbb\",\"#41b6c4\",\"#2c7fb8\",\"#253494\"],\n7: [\"#ffffcc\",\"#c7e9b4\",\"#7fcdbb\",\"#41b6c4\",\"#1d91c0\",\"#225ea8\",\"#0c2c84\"],\n8: [\"#ffffd9\",\"#edf8b1\",\"#c7e9b4\",\"#7fcdbb\",\"#41b6c4\",\"#1d91c0\",\"#225ea8\",\"#0c2c84\"],\n9: [\"#ffffd9\",\"#edf8b1\",\"#c7e9b4\",\"#7fcdbb\",\"#41b6c4\",\"#1d91c0\",\"#225ea8\",\"#253494\",\"#081d58\"]\n},GnBu: {\n3: [\"#e0f3db\",\"#a8ddb5\",\"#43a2ca\"],\n4: [\"#f0f9e8\",\"#bae4bc\",\"#7bccc4\",\"#2b8cbe\"],\n5: [\"#f0f9e8\",\"#bae4bc\",\"#7bccc4\",\"#43a2ca\",\"#0868ac\"],\n6: [\"#f0f9e8\",\"#ccebc5\",\"#a8ddb5\",\"#7bccc4\",\"#43a2ca\",\"#0868ac\"],\n7: [\"#f0f9e8\",\"#ccebc5\",\"#a8ddb5\",\"#7bccc4\",\"#4eb3d3\",\"#2b8cbe\",\"#08589e\"],\n8: [\"#f7fcf0\",\"#e0f3db\",\"#ccebc5\",\"#a8ddb5\",\"#7bccc4\",\"#4eb3d3\",\"#2b8cbe\",\"#08589e\"],\n9: [\"#f7fcf0\",\"#e0f3db\",\"#ccebc5\",\"#a8ddb5\",\"#7bccc4\",\"#4eb3d3\",\"#2b8cbe\",\"#0868ac\",\"#084081\"]\n},BuGn: {\n3: [\"#e5f5f9\",\"#99d8c9\",\"#2ca25f\"],\n4: [\"#edf8fb\",\"#b2e2e2\",\"#66c2a4\",\"#238b45\"],\n5: [\"#edf8fb\",\"#b2e2e2\",\"#66c2a4\",\"#2ca25f\",\"#006d2c\"],\n6: [\"#edf8fb\",\"#ccece6\",\"#99d8c9\",\"#66c2a4\",\"#2ca25f\",\"#006d2c\"],\n7: [\"#edf8fb\",\"#ccece6\",\"#99d8c9\",\"#66c2a4\",\"#41ae76\",\"#238b45\",\"#005824\"],\n8: [\"#f7fcfd\",\"#e5f5f9\",\"#ccece6\",\"#99d8c9\",\"#66c2a4\",\"#41ae76\",\"#238b45\",\"#005824\"],\n9: [\"#f7fcfd\",\"#e5f5f9\",\"#ccece6\",\"#99d8c9\",\"#66c2a4\",\"#41ae76\",\"#238b45\",\"#006d2c\",\"#00441b\"]\n},PuBuGn: {\n3: [\"#ece2f0\",\"#a6bddb\",\"#1c9099\"],\n4: [\"#f6eff7\",\"#bdc9e1\",\"#67a9cf\",\"#02818a\"],\n5: [\"#f6eff7\",\"#bdc9e1\",\"#67a9cf\",\"#1c9099\",\"#016c59\"],\n6: [\"#f6eff7\",\"#d0d1e6\",\"#a6bddb\",\"#67a9cf\",\"#1c9099\",\"#016c59\"],\n7: [\"#f6eff7\",\"#d0d1e6\",\"#a6bddb\",\"#67a9cf\",\"#3690c0\",\"#02818a\",\"#016450\"],\n8: [\"#fff7fb\",\"#ece2f0\",\"#d0d1e6\",\"#a6bddb\",\"#67a9cf\",\"#3690c0\",\"#02818a\",\"#016450\"],\n9: [\"#fff7fb\",\"#ece2f0\",\"#d0d1e6\",\"#a6bddb\",\"#67a9cf\",\"#3690c0\",\"#02818a\",\"#016c59\",\"#014636\"]\n},PuBu: {\n3: [\"#ece7f2\",\"#a6bddb\",\"#2b8cbe\"],\n4: [\"#f1eef6\",\"#bdc9e1\",\"#74a9cf\",\"#0570b0\"],\n5: [\"#f1eef6\",\"#bdc9e1\",\"#74a9cf\",\"#2b8cbe\",\"#045a8d\"],\n6: [\"#f1eef6\",\"#d0d1e6\",\"#a6bddb\",\"#74a9cf\",\"#2b8cbe\",\"#045a8d\"],\n7: [\"#f1eef6\",\"#d0d1e6\",\"#a6bddb\",\"#74a9cf\",\"#3690c0\",\"#0570b0\",\"#034e7b\"],\n8: [\"#fff7fb\",\"#ece7f2\",\"#d0d1e6\",\"#a6bddb\",\"#74a9cf\",\"#3690c0\",\"#0570b0\",\"#034e7b\"],\n9: [\"#fff7fb\",\"#ece7f2\",\"#d0d1e6\",\"#a6bddb\",\"#74a9cf\",\"#3690c0\",\"#0570b0\",\"#045a8d\",\"#023858\"]\n},BuPu: {\n3: [\"#e0ecf4\",\"#9ebcda\",\"#8856a7\"],\n4: [\"#edf8fb\",\"#b3cde3\",\"#8c96c6\",\"#88419d\"],\n5: [\"#edf8fb\",\"#b3cde3\",\"#8c96c6\",\"#8856a7\",\"#810f7c\"],\n6: [\"#edf8fb\",\"#bfd3e6\",\"#9ebcda\",\"#8c96c6\",\"#8856a7\",\"#810f7c\"],\n7: [\"#edf8fb\",\"#bfd3e6\",\"#9ebcda\",\"#8c96c6\",\"#8c6bb1\",\"#88419d\",\"#6e016b\"],\n8: [\"#f7fcfd\",\"#e0ecf4\",\"#bfd3e6\",\"#9ebcda\",\"#8c96c6\",\"#8c6bb1\",\"#88419d\",\"#6e016b\"],\n9: [\"#f7fcfd\",\"#e0ecf4\",\"#bfd3e6\",\"#9ebcda\",\"#8c96c6\",\"#8c6bb1\",\"#88419d\",\"#810f7c\",\"#4d004b\"]\n},RdPu: {\n3: [\"#fde0dd\",\"#fa9fb5\",\"#c51b8a\"],\n4: [\"#feebe2\",\"#fbb4b9\",\"#f768a1\",\"#ae017e\"],\n5: [\"#feebe2\",\"#fbb4b9\",\"#f768a1\",\"#c51b8a\",\"#7a0177\"],\n6: [\"#feebe2\",\"#fcc5c0\",\"#fa9fb5\",\"#f768a1\",\"#c51b8a\",\"#7a0177\"],\n7: [\"#feebe2\",\"#fcc5c0\",\"#fa9fb5\",\"#f768a1\",\"#dd3497\",\"#ae017e\",\"#7a0177\"],\n8: [\"#fff7f3\",\"#fde0dd\",\"#fcc5c0\",\"#fa9fb5\",\"#f768a1\",\"#dd3497\",\"#ae017e\",\"#7a0177\"],\n9: [\"#fff7f3\",\"#fde0dd\",\"#fcc5c0\",\"#fa9fb5\",\"#f768a1\",\"#dd3497\",\"#ae017e\",\"#7a0177\",\"#49006a\"]\n},PuRd: {\n3: [\"#e7e1ef\",\"#c994c7\",\"#dd1c77\"],\n4: [\"#f1eef6\",\"#d7b5d8\",\"#df65b0\",\"#ce1256\"],\n5: [\"#f1eef6\",\"#d7b5d8\",\"#df65b0\",\"#dd1c77\",\"#980043\"],\n6: [\"#f1eef6\",\"#d4b9da\",\"#c994c7\",\"#df65b0\",\"#dd1c77\",\"#980043\"],\n7: [\"#f1eef6\",\"#d4b9da\",\"#c994c7\",\"#df65b0\",\"#e7298a\",\"#ce1256\",\"#91003f\"],\n8: [\"#f7f4f9\",\"#e7e1ef\",\"#d4b9da\",\"#c994c7\",\"#df65b0\",\"#e7298a\",\"#ce1256\",\"#91003f\"],\n9: [\"#f7f4f9\",\"#e7e1ef\",\"#d4b9da\",\"#c994c7\",\"#df65b0\",\"#e7298a\",\"#ce1256\",\"#980043\",\"#67001f\"]\n},OrRd: {\n3: [\"#fee8c8\",\"#fdbb84\",\"#e34a33\"],\n4: [\"#fef0d9\",\"#fdcc8a\",\"#fc8d59\",\"#d7301f\"],\n5: [\"#fef0d9\",\"#fdcc8a\",\"#fc8d59\",\"#e34a33\",\"#b30000\"],\n6: [\"#fef0d9\",\"#fdd49e\",\"#fdbb84\",\"#fc8d59\",\"#e34a33\",\"#b30000\"],\n7: [\"#fef0d9\",\"#fdd49e\",\"#fdbb84\",\"#fc8d59\",\"#ef6548\",\"#d7301f\",\"#990000\"],\n8: [\"#fff7ec\",\"#fee8c8\",\"#fdd49e\",\"#fdbb84\",\"#fc8d59\",\"#ef6548\",\"#d7301f\",\"#990000\"],\n9: [\"#fff7ec\",\"#fee8c8\",\"#fdd49e\",\"#fdbb84\",\"#fc8d59\",\"#ef6548\",\"#d7301f\",\"#b30000\",\"#7f0000\"]\n},YlOrRd: {\n3: [\"#ffeda0\",\"#feb24c\",\"#f03b20\"],\n4: [\"#ffffb2\",\"#fecc5c\",\"#fd8d3c\",\"#e31a1c\"],\n5: [\"#ffffb2\",\"#fecc5c\",\"#fd8d3c\",\"#f03b20\",\"#bd0026\"],\n6: [\"#ffffb2\",\"#fed976\",\"#feb24c\",\"#fd8d3c\",\"#f03b20\",\"#bd0026\"],\n7: [\"#ffffb2\",\"#fed976\",\"#feb24c\",\"#fd8d3c\",\"#fc4e2a\",\"#e31a1c\",\"#b10026\"],\n8: [\"#ffffcc\",\"#ffeda0\",\"#fed976\",\"#feb24c\",\"#fd8d3c\",\"#fc4e2a\",\"#e31a1c\",\"#b10026\"],\n9: [\"#ffffcc\",\"#ffeda0\",\"#fed976\",\"#feb24c\",\"#fd8d3c\",\"#fc4e2a\",\"#e31a1c\",\"#bd0026\",\"#800026\"]\n},YlOrBr: {\n3: [\"#fff7bc\",\"#fec44f\",\"#d95f0e\"],\n4: [\"#ffffd4\",\"#fed98e\",\"#fe9929\",\"#cc4c02\"],\n5: [\"#ffffd4\",\"#fed98e\",\"#fe9929\",\"#d95f0e\",\"#993404\"],\n6: [\"#ffffd4\",\"#fee391\",\"#fec44f\",\"#fe9929\",\"#d95f0e\",\"#993404\"],\n7: [\"#ffffd4\",\"#fee391\",\"#fec44f\",\"#fe9929\",\"#ec7014\",\"#cc4c02\",\"#8c2d04\"],\n8: [\"#ffffe5\",\"#fff7bc\",\"#fee391\",\"#fec44f\",\"#fe9929\",\"#ec7014\",\"#cc4c02\",\"#8c2d04\"],\n9: [\"#ffffe5\",\"#fff7bc\",\"#fee391\",\"#fec44f\",\"#fe9929\",\"#ec7014\",\"#cc4c02\",\"#993404\",\"#662506\"]\n},Purples: {\n3: [\"#efedf5\",\"#bcbddc\",\"#756bb1\"],\n4: [\"#f2f0f7\",\"#cbc9e2\",\"#9e9ac8\",\"#6a51a3\"],\n5: [\"#f2f0f7\",\"#cbc9e2\",\"#9e9ac8\",\"#756bb1\",\"#54278f\"],\n6: [\"#f2f0f7\",\"#dadaeb\",\"#bcbddc\",\"#9e9ac8\",\"#756bb1\",\"#54278f\"],\n7: [\"#f2f0f7\",\"#dadaeb\",\"#bcbddc\",\"#9e9ac8\",\"#807dba\",\"#6a51a3\",\"#4a1486\"],\n8: [\"#fcfbfd\",\"#efedf5\",\"#dadaeb\",\"#bcbddc\",\"#9e9ac8\",\"#807dba\",\"#6a51a3\",\"#4a1486\"],\n9: [\"#fcfbfd\",\"#efedf5\",\"#dadaeb\",\"#bcbddc\",\"#9e9ac8\",\"#807dba\",\"#6a51a3\",\"#54278f\",\"#3f007d\"]\n},Blues: {\n3: [\"#deebf7\",\"#9ecae1\",\"#3182bd\"],\n4: [\"#eff3ff\",\"#bdd7e7\",\"#6baed6\",\"#2171b5\"],\n5: [\"#eff3ff\",\"#bdd7e7\",\"#6baed6\",\"#3182bd\",\"#08519c\"],\n6: [\"#eff3ff\",\"#c6dbef\",\"#9ecae1\",\"#6baed6\",\"#3182bd\",\"#08519c\"],\n7: [\"#eff3ff\",\"#c6dbef\",\"#9ecae1\",\"#6baed6\",\"#4292c6\",\"#2171b5\",\"#084594\"],\n8: [\"#f7fbff\",\"#deebf7\",\"#c6dbef\",\"#9ecae1\",\"#6baed6\",\"#4292c6\",\"#2171b5\",\"#084594\"],\n9: [\"#f7fbff\",\"#deebf7\",\"#c6dbef\",\"#9ecae1\",\"#6baed6\",\"#4292c6\",\"#2171b5\",\"#08519c\",\"#08306b\"]\n},Greens: {\n3: [\"#e5f5e0\",\"#a1d99b\",\"#31a354\"],\n4: [\"#edf8e9\",\"#bae4b3\",\"#74c476\",\"#238b45\"],\n5: [\"#edf8e9\",\"#bae4b3\",\"#74c476\",\"#31a354\",\"#006d2c\"],\n6: [\"#edf8e9\",\"#c7e9c0\",\"#a1d99b\",\"#74c476\",\"#31a354\",\"#006d2c\"],\n7: [\"#edf8e9\",\"#c7e9c0\",\"#a1d99b\",\"#74c476\",\"#41ab5d\",\"#238b45\",\"#005a32\"],\n8: [\"#f7fcf5\",\"#e5f5e0\",\"#c7e9c0\",\"#a1d99b\",\"#74c476\",\"#41ab5d\",\"#238b45\",\"#005a32\"],\n9: [\"#f7fcf5\",\"#e5f5e0\",\"#c7e9c0\",\"#a1d99b\",\"#74c476\",\"#41ab5d\",\"#238b45\",\"#006d2c\",\"#00441b\"]\n},Oranges: {\n3: [\"#fee6ce\",\"#fdae6b\",\"#e6550d\"],\n4: [\"#feedde\",\"#fdbe85\",\"#fd8d3c\",\"#d94701\"],\n5: [\"#feedde\",\"#fdbe85\",\"#fd8d3c\",\"#e6550d\",\"#a63603\"],\n6: [\"#feedde\",\"#fdd0a2\",\"#fdae6b\",\"#fd8d3c\",\"#e6550d\",\"#a63603\"],\n7: [\"#feedde\",\"#fdd0a2\",\"#fdae6b\",\"#fd8d3c\",\"#f16913\",\"#d94801\",\"#8c2d04\"],\n8: [\"#fff5eb\",\"#fee6ce\",\"#fdd0a2\",\"#fdae6b\",\"#fd8d3c\",\"#f16913\",\"#d94801\",\"#8c2d04\"],\n9: [\"#fff5eb\",\"#fee6ce\",\"#fdd0a2\",\"#fdae6b\",\"#fd8d3c\",\"#f16913\",\"#d94801\",\"#a63603\",\"#7f2704\"]\n},Reds: {\n3: [\"#fee0d2\",\"#fc9272\",\"#de2d26\"],\n4: [\"#fee5d9\",\"#fcae91\",\"#fb6a4a\",\"#cb181d\"],\n5: [\"#fee5d9\",\"#fcae91\",\"#fb6a4a\",\"#de2d26\",\"#a50f15\"],\n6: [\"#fee5d9\",\"#fcbba1\",\"#fc9272\",\"#fb6a4a\",\"#de2d26\",\"#a50f15\"],\n7: [\"#fee5d9\",\"#fcbba1\",\"#fc9272\",\"#fb6a4a\",\"#ef3b2c\",\"#cb181d\",\"#99000d\"],\n8: [\"#fff5f0\",\"#fee0d2\",\"#fcbba1\",\"#fc9272\",\"#fb6a4a\",\"#ef3b2c\",\"#cb181d\",\"#99000d\"],\n9: [\"#fff5f0\",\"#fee0d2\",\"#fcbba1\",\"#fc9272\",\"#fb6a4a\",\"#ef3b2c\",\"#cb181d\",\"#a50f15\",\"#67000d\"]\n},Greys: {\n3: [\"#f0f0f0\",\"#bdbdbd\",\"#636363\"],\n4: [\"#f7f7f7\",\"#cccccc\",\"#969696\",\"#525252\"],\n5: [\"#f7f7f7\",\"#cccccc\",\"#969696\",\"#636363\",\"#252525\"],\n6: [\"#f7f7f7\",\"#d9d9d9\",\"#bdbdbd\",\"#969696\",\"#636363\",\"#252525\"],\n7: [\"#f7f7f7\",\"#d9d9d9\",\"#bdbdbd\",\"#969696\",\"#737373\",\"#525252\",\"#252525\"],\n8: [\"#ffffff\",\"#f0f0f0\",\"#d9d9d9\",\"#bdbdbd\",\"#969696\",\"#737373\",\"#525252\",\"#252525\"],\n9: [\"#ffffff\",\"#f0f0f0\",\"#d9d9d9\",\"#bdbdbd\",\"#969696\",\"#737373\",\"#525252\",\"#252525\",\"#000000\"]\n},PuOr: {\n3: [\"#f1a340\",\"#f7f7f7\",\"#998ec3\"],\n4: [\"#e66101\",\"#fdb863\",\"#b2abd2\",\"#5e3c99\"],\n5: [\"#e66101\",\"#fdb863\",\"#f7f7f7\",\"#b2abd2\",\"#5e3c99\"],\n6: [\"#b35806\",\"#f1a340\",\"#fee0b6\",\"#d8daeb\",\"#998ec3\",\"#542788\"],\n7: [\"#b35806\",\"#f1a340\",\"#fee0b6\",\"#f7f7f7\",\"#d8daeb\",\"#998ec3\",\"#542788\"],\n8: [\"#b35806\",\"#e08214\",\"#fdb863\",\"#fee0b6\",\"#d8daeb\",\"#b2abd2\",\"#8073ac\",\"#542788\"],\n9: [\"#b35806\",\"#e08214\",\"#fdb863\",\"#fee0b6\",\"#f7f7f7\",\"#d8daeb\",\"#b2abd2\",\"#8073ac\",\"#542788\"],\n10: [\"#7f3b08\",\"#b35806\",\"#e08214\",\"#fdb863\",\"#fee0b6\",\"#d8daeb\",\"#b2abd2\",\"#8073ac\",\"#542788\",\"#2d004b\"],\n11: [\"#7f3b08\",\"#b35806\",\"#e08214\",\"#fdb863\",\"#fee0b6\",\"#f7f7f7\",\"#d8daeb\",\"#b2abd2\",\"#8073ac\",\"#542788\",\"#2d004b\"]\n},BrBG: {\n3: [\"#d8b365\",\"#f5f5f5\",\"#5ab4ac\"],\n4: [\"#a6611a\",\"#dfc27d\",\"#80cdc1\",\"#018571\"],\n5: [\"#a6611a\",\"#dfc27d\",\"#f5f5f5\",\"#80cdc1\",\"#018571\"],\n6: [\"#8c510a\",\"#d8b365\",\"#f6e8c3\",\"#c7eae5\",\"#5ab4ac\",\"#01665e\"],\n7: [\"#8c510a\",\"#d8b365\",\"#f6e8c3\",\"#f5f5f5\",\"#c7eae5\",\"#5ab4ac\",\"#01665e\"],\n8: [\"#8c510a\",\"#bf812d\",\"#dfc27d\",\"#f6e8c3\",\"#c7eae5\",\"#80cdc1\",\"#35978f\",\"#01665e\"],\n9: [\"#8c510a\",\"#bf812d\",\"#dfc27d\",\"#f6e8c3\",\"#f5f5f5\",\"#c7eae5\",\"#80cdc1\",\"#35978f\",\"#01665e\"],\n10: [\"#543005\",\"#8c510a\",\"#bf812d\",\"#dfc27d\",\"#f6e8c3\",\"#c7eae5\",\"#80cdc1\",\"#35978f\",\"#01665e\",\"#003c30\"],\n11: [\"#543005\",\"#8c510a\",\"#bf812d\",\"#dfc27d\",\"#f6e8c3\",\"#f5f5f5\",\"#c7eae5\",\"#80cdc1\",\"#35978f\",\"#01665e\",\"#003c30\"]\n},PRGn: {\n3: [\"#af8dc3\",\"#f7f7f7\",\"#7fbf7b\"],\n4: [\"#7b3294\",\"#c2a5cf\",\"#a6dba0\",\"#008837\"],\n5: [\"#7b3294\",\"#c2a5cf\",\"#f7f7f7\",\"#a6dba0\",\"#008837\"],\n6: [\"#762a83\",\"#af8dc3\",\"#e7d4e8\",\"#d9f0d3\",\"#7fbf7b\",\"#1b7837\"],\n7: [\"#762a83\",\"#af8dc3\",\"#e7d4e8\",\"#f7f7f7\",\"#d9f0d3\",\"#7fbf7b\",\"#1b7837\"],\n8: [\"#762a83\",\"#9970ab\",\"#c2a5cf\",\"#e7d4e8\",\"#d9f0d3\",\"#a6dba0\",\"#5aae61\",\"#1b7837\"],\n9: [\"#762a83\",\"#9970ab\",\"#c2a5cf\",\"#e7d4e8\",\"#f7f7f7\",\"#d9f0d3\",\"#a6dba0\",\"#5aae61\",\"#1b7837\"],\n10: [\"#40004b\",\"#762a83\",\"#9970ab\",\"#c2a5cf\",\"#e7d4e8\",\"#d9f0d3\",\"#a6dba0\",\"#5aae61\",\"#1b7837\",\"#00441b\"],\n11: [\"#40004b\",\"#762a83\",\"#9970ab\",\"#c2a5cf\",\"#e7d4e8\",\"#f7f7f7\",\"#d9f0d3\",\"#a6dba0\",\"#5aae61\",\"#1b7837\",\"#00441b\"]\n},PiYG: {\n3: [\"#e9a3c9\",\"#f7f7f7\",\"#a1d76a\"],\n4: [\"#d01c8b\",\"#f1b6da\",\"#b8e186\",\"#4dac26\"],\n5: [\"#d01c8b\",\"#f1b6da\",\"#f7f7f7\",\"#b8e186\",\"#4dac26\"],\n6: [\"#c51b7d\",\"#e9a3c9\",\"#fde0ef\",\"#e6f5d0\",\"#a1d76a\",\"#4d9221\"],\n7: [\"#c51b7d\",\"#e9a3c9\",\"#fde0ef\",\"#f7f7f7\",\"#e6f5d0\",\"#a1d76a\",\"#4d9221\"],\n8: [\"#c51b7d\",\"#de77ae\",\"#f1b6da\",\"#fde0ef\",\"#e6f5d0\",\"#b8e186\",\"#7fbc41\",\"#4d9221\"],\n9: [\"#c51b7d\",\"#de77ae\",\"#f1b6da\",\"#fde0ef\",\"#f7f7f7\",\"#e6f5d0\",\"#b8e186\",\"#7fbc41\",\"#4d9221\"],\n10: [\"#8e0152\",\"#c51b7d\",\"#de77ae\",\"#f1b6da\",\"#fde0ef\",\"#e6f5d0\",\"#b8e186\",\"#7fbc41\",\"#4d9221\",\"#276419\"],\n11: [\"#8e0152\",\"#c51b7d\",\"#de77ae\",\"#f1b6da\",\"#fde0ef\",\"#f7f7f7\",\"#e6f5d0\",\"#b8e186\",\"#7fbc41\",\"#4d9221\",\"#276419\"]\n},RdBu: {\n3: [\"#ef8a62\",\"#f7f7f7\",\"#67a9cf\"],\n4: [\"#ca0020\",\"#f4a582\",\"#92c5de\",\"#0571b0\"],\n5: [\"#ca0020\",\"#f4a582\",\"#f7f7f7\",\"#92c5de\",\"#0571b0\"],\n6: [\"#b2182b\",\"#ef8a62\",\"#fddbc7\",\"#d1e5f0\",\"#67a9cf\",\"#2166ac\"],\n7: [\"#b2182b\",\"#ef8a62\",\"#fddbc7\",\"#f7f7f7\",\"#d1e5f0\",\"#67a9cf\",\"#2166ac\"],\n8: [\"#b2182b\",\"#d6604d\",\"#f4a582\",\"#fddbc7\",\"#d1e5f0\",\"#92c5de\",\"#4393c3\",\"#2166ac\"],\n9: [\"#b2182b\",\"#d6604d\",\"#f4a582\",\"#fddbc7\",\"#f7f7f7\",\"#d1e5f0\",\"#92c5de\",\"#4393c3\",\"#2166ac\"],\n10: [\"#67001f\",\"#b2182b\",\"#d6604d\",\"#f4a582\",\"#fddbc7\",\"#d1e5f0\",\"#92c5de\",\"#4393c3\",\"#2166ac\",\"#053061\"],\n11: [\"#67001f\",\"#b2182b\",\"#d6604d\",\"#f4a582\",\"#fddbc7\",\"#f7f7f7\",\"#d1e5f0\",\"#92c5de\",\"#4393c3\",\"#2166ac\",\"#053061\"]\n},RdGy: {\n3: [\"#ef8a62\",\"#ffffff\",\"#999999\"],\n4: [\"#ca0020\",\"#f4a582\",\"#bababa\",\"#404040\"],\n5: [\"#ca0020\",\"#f4a582\",\"#ffffff\",\"#bababa\",\"#404040\"],\n6: [\"#b2182b\",\"#ef8a62\",\"#fddbc7\",\"#e0e0e0\",\"#999999\",\"#4d4d4d\"],\n7: [\"#b2182b\",\"#ef8a62\",\"#fddbc7\",\"#ffffff\",\"#e0e0e0\",\"#999999\",\"#4d4d4d\"],\n8: [\"#b2182b\",\"#d6604d\",\"#f4a582\",\"#fddbc7\",\"#e0e0e0\",\"#bababa\",\"#878787\",\"#4d4d4d\"],\n9: [\"#b2182b\",\"#d6604d\",\"#f4a582\",\"#fddbc7\",\"#ffffff\",\"#e0e0e0\",\"#bababa\",\"#878787\",\"#4d4d4d\"],\n10: [\"#67001f\",\"#b2182b\",\"#d6604d\",\"#f4a582\",\"#fddbc7\",\"#e0e0e0\",\"#bababa\",\"#878787\",\"#4d4d4d\",\"#1a1a1a\"],\n11: [\"#67001f\",\"#b2182b\",\"#d6604d\",\"#f4a582\",\"#fddbc7\",\"#ffffff\",\"#e0e0e0\",\"#bababa\",\"#878787\",\"#4d4d4d\",\"#1a1a1a\"]\n},RdYlBu: {\n3: [\"#fc8d59\",\"#ffffbf\",\"#91bfdb\"],\n4: [\"#d7191c\",\"#fdae61\",\"#abd9e9\",\"#2c7bb6\"],\n5: [\"#d7191c\",\"#fdae61\",\"#ffffbf\",\"#abd9e9\",\"#2c7bb6\"],\n6: [\"#d73027\",\"#fc8d59\",\"#fee090\",\"#e0f3f8\",\"#91bfdb\",\"#4575b4\"],\n7: [\"#d73027\",\"#fc8d59\",\"#fee090\",\"#ffffbf\",\"#e0f3f8\",\"#91bfdb\",\"#4575b4\"],\n8: [\"#d73027\",\"#f46d43\",\"#fdae61\",\"#fee090\",\"#e0f3f8\",\"#abd9e9\",\"#74add1\",\"#4575b4\"],\n9: [\"#d73027\",\"#f46d43\",\"#fdae61\",\"#fee090\",\"#ffffbf\",\"#e0f3f8\",\"#abd9e9\",\"#74add1\",\"#4575b4\"],\n10: [\"#a50026\",\"#d73027\",\"#f46d43\",\"#fdae61\",\"#fee090\",\"#e0f3f8\",\"#abd9e9\",\"#74add1\",\"#4575b4\",\"#313695\"],\n11: [\"#a50026\",\"#d73027\",\"#f46d43\",\"#fdae61\",\"#fee090\",\"#ffffbf\",\"#e0f3f8\",\"#abd9e9\",\"#74add1\",\"#4575b4\",\"#313695\"]\n},Spectral: {\n3: [\"#fc8d59\",\"#ffffbf\",\"#99d594\"],\n4: [\"#d7191c\",\"#fdae61\",\"#abdda4\",\"#2b83ba\"],\n5: [\"#d7191c\",\"#fdae61\",\"#ffffbf\",\"#abdda4\",\"#2b83ba\"],\n6: [\"#d53e4f\",\"#fc8d59\",\"#fee08b\",\"#e6f598\",\"#99d594\",\"#3288bd\"],\n7: [\"#d53e4f\",\"#fc8d59\",\"#fee08b\",\"#ffffbf\",\"#e6f598\",\"#99d594\",\"#3288bd\"],\n8: [\"#d53e4f\",\"#f46d43\",\"#fdae61\",\"#fee08b\",\"#e6f598\",\"#abdda4\",\"#66c2a5\",\"#3288bd\"],\n9: [\"#d53e4f\",\"#f46d43\",\"#fdae61\",\"#fee08b\",\"#ffffbf\",\"#e6f598\",\"#abdda4\",\"#66c2a5\",\"#3288bd\"],\n10: [\"#9e0142\",\"#d53e4f\",\"#f46d43\",\"#fdae61\",\"#fee08b\",\"#e6f598\",\"#abdda4\",\"#66c2a5\",\"#3288bd\",\"#5e4fa2\"],\n11: [\"#9e0142\",\"#d53e4f\",\"#f46d43\",\"#fdae61\",\"#fee08b\",\"#ffffbf\",\"#e6f598\",\"#abdda4\",\"#66c2a5\",\"#3288bd\",\"#5e4fa2\"]\n},RdYlGn: {\n3: [\"#fc8d59\",\"#ffffbf\",\"#91cf60\"],\n4: [\"#d7191c\",\"#fdae61\",\"#a6d96a\",\"#1a9641\"],\n5: [\"#d7191c\",\"#fdae61\",\"#ffffbf\",\"#a6d96a\",\"#1a9641\"],\n6: [\"#d73027\",\"#fc8d59\",\"#fee08b\",\"#d9ef8b\",\"#91cf60\",\"#1a9850\"],\n7: [\"#d73027\",\"#fc8d59\",\"#fee08b\",\"#ffffbf\",\"#d9ef8b\",\"#91cf60\",\"#1a9850\"],\n8: [\"#d73027\",\"#f46d43\",\"#fdae61\",\"#fee08b\",\"#d9ef8b\",\"#a6d96a\",\"#66bd63\",\"#1a9850\"],\n9: [\"#d73027\",\"#f46d43\",\"#fdae61\",\"#fee08b\",\"#ffffbf\",\"#d9ef8b\",\"#a6d96a\",\"#66bd63\",\"#1a9850\"],\n10: [\"#a50026\",\"#d73027\",\"#f46d43\",\"#fdae61\",\"#fee08b\",\"#d9ef8b\",\"#a6d96a\",\"#66bd63\",\"#1a9850\",\"#006837\"],\n11: [\"#a50026\",\"#d73027\",\"#f46d43\",\"#fdae61\",\"#fee08b\",\"#ffffbf\",\"#d9ef8b\",\"#a6d96a\",\"#66bd63\",\"#1a9850\",\"#006837\"]\n},Accent: {\n3: [\"#7fc97f\",\"#beaed4\",\"#fdc086\"],\n4: [\"#7fc97f\",\"#beaed4\",\"#fdc086\",\"#ffff99\"],\n5: [\"#7fc97f\",\"#beaed4\",\"#fdc086\",\"#ffff99\",\"#386cb0\"],\n6: [\"#7fc97f\",\"#beaed4\",\"#fdc086\",\"#ffff99\",\"#386cb0\",\"#f0027f\"],\n7: [\"#7fc97f\",\"#beaed4\",\"#fdc086\",\"#ffff99\",\"#386cb0\",\"#f0027f\",\"#bf5b17\"],\n8: [\"#7fc97f\",\"#beaed4\",\"#fdc086\",\"#ffff99\",\"#386cb0\",\"#f0027f\",\"#bf5b17\",\"#666666\"]\n},Dark2: {\n3: [\"#1b9e77\",\"#d95f02\",\"#7570b3\"],\n4: [\"#1b9e77\",\"#d95f02\",\"#7570b3\",\"#e7298a\"],\n5: [\"#1b9e77\",\"#d95f02\",\"#7570b3\",\"#e7298a\",\"#66a61e\"],\n6: [\"#1b9e77\",\"#d95f02\",\"#7570b3\",\"#e7298a\",\"#66a61e\",\"#e6ab02\"],\n7: [\"#1b9e77\",\"#d95f02\",\"#7570b3\",\"#e7298a\",\"#66a61e\",\"#e6ab02\",\"#a6761d\"],\n8: [\"#1b9e77\",\"#d95f02\",\"#7570b3\",\"#e7298a\",\"#66a61e\",\"#e6ab02\",\"#a6761d\",\"#666666\"]\n},Paired: {\n3: [\"#a6cee3\",\"#1f78b4\",\"#b2df8a\"],\n4: [\"#a6cee3\",\"#1f78b4\",\"#b2df8a\",\"#33a02c\"],\n5: [\"#a6cee3\",\"#1f78b4\",\"#b2df8a\",\"#33a02c\",\"#fb9a99\"],\n6: [\"#a6cee3\",\"#1f78b4\",\"#b2df8a\",\"#33a02c\",\"#fb9a99\",\"#e31a1c\"],\n7: [\"#a6cee3\",\"#1f78b4\",\"#b2df8a\",\"#33a02c\",\"#fb9a99\",\"#e31a1c\",\"#fdbf6f\"],\n8: [\"#a6cee3\",\"#1f78b4\",\"#b2df8a\",\"#33a02c\",\"#fb9a99\",\"#e31a1c\",\"#fdbf6f\",\"#ff7f00\"],\n9: [\"#a6cee3\",\"#1f78b4\",\"#b2df8a\",\"#33a02c\",\"#fb9a99\",\"#e31a1c\",\"#fdbf6f\",\"#ff7f00\",\"#cab2d6\"],\n10: [\"#a6cee3\",\"#1f78b4\",\"#b2df8a\",\"#33a02c\",\"#fb9a99\",\"#e31a1c\",\"#fdbf6f\",\"#ff7f00\",\"#cab2d6\",\"#6a3d9a\"],\n11: [\"#a6cee3\",\"#1f78b4\",\"#b2df8a\",\"#33a02c\",\"#fb9a99\",\"#e31a1c\",\"#fdbf6f\",\"#ff7f00\",\"#cab2d6\",\"#6a3d9a\",\"#ffff99\"],\n12: [\"#a6cee3\",\"#1f78b4\",\"#b2df8a\",\"#33a02c\",\"#fb9a99\",\"#e31a1c\",\"#fdbf6f\",\"#ff7f00\",\"#cab2d6\",\"#6a3d9a\",\"#ffff99\",\"#b15928\"]\n},Pastel1: {\n3: [\"#fbb4ae\",\"#b3cde3\",\"#ccebc5\"],\n4: [\"#fbb4ae\",\"#b3cde3\",\"#ccebc5\",\"#decbe4\"],\n5: [\"#fbb4ae\",\"#b3cde3\",\"#ccebc5\",\"#decbe4\",\"#fed9a6\"],\n6: [\"#fbb4ae\",\"#b3cde3\",\"#ccebc5\",\"#decbe4\",\"#fed9a6\",\"#ffffcc\"],\n7: [\"#fbb4ae\",\"#b3cde3\",\"#ccebc5\",\"#decbe4\",\"#fed9a6\",\"#ffffcc\",\"#e5d8bd\"],\n8: [\"#fbb4ae\",\"#b3cde3\",\"#ccebc5\",\"#decbe4\",\"#fed9a6\",\"#ffffcc\",\"#e5d8bd\",\"#fddaec\"],\n9: [\"#fbb4ae\",\"#b3cde3\",\"#ccebc5\",\"#decbe4\",\"#fed9a6\",\"#ffffcc\",\"#e5d8bd\",\"#fddaec\",\"#f2f2f2\"]\n},Pastel2: {\n3: [\"#b3e2cd\",\"#fdcdac\",\"#cbd5e8\"],\n4: [\"#b3e2cd\",\"#fdcdac\",\"#cbd5e8\",\"#f4cae4\"],\n5: [\"#b3e2cd\",\"#fdcdac\",\"#cbd5e8\",\"#f4cae4\",\"#e6f5c9\"],\n6: [\"#b3e2cd\",\"#fdcdac\",\"#cbd5e8\",\"#f4cae4\",\"#e6f5c9\",\"#fff2ae\"],\n7: [\"#b3e2cd\",\"#fdcdac\",\"#cbd5e8\",\"#f4cae4\",\"#e6f5c9\",\"#fff2ae\",\"#f1e2cc\"],\n8: [\"#b3e2cd\",\"#fdcdac\",\"#cbd5e8\",\"#f4cae4\",\"#e6f5c9\",\"#fff2ae\",\"#f1e2cc\",\"#cccccc\"]\n},Set1: {\n3: [\"#e41a1c\",\"#377eb8\",\"#4daf4a\"],\n4: [\"#e41a1c\",\"#377eb8\",\"#4daf4a\",\"#984ea3\"],\n5: [\"#e41a1c\",\"#377eb8\",\"#4daf4a\",\"#984ea3\",\"#ff7f00\"],\n6: [\"#e41a1c\",\"#377eb8\",\"#4daf4a\",\"#984ea3\",\"#ff7f00\",\"#ffff33\"],\n7: [\"#e41a1c\",\"#377eb8\",\"#4daf4a\",\"#984ea3\",\"#ff7f00\",\"#ffff33\",\"#a65628\"],\n8: [\"#e41a1c\",\"#377eb8\",\"#4daf4a\",\"#984ea3\",\"#ff7f00\",\"#ffff33\",\"#a65628\",\"#f781bf\"],\n9: [\"#e41a1c\",\"#377eb8\",\"#4daf4a\",\"#984ea3\",\"#ff7f00\",\"#ffff33\",\"#a65628\",\"#f781bf\",\"#999999\"]\n},Set2: {\n3: [\"#66c2a5\",\"#fc8d62\",\"#8da0cb\"],\n4: [\"#66c2a5\",\"#fc8d62\",\"#8da0cb\",\"#e78ac3\"],\n5: [\"#66c2a5\",\"#fc8d62\",\"#8da0cb\",\"#e78ac3\",\"#a6d854\"],\n6: [\"#66c2a5\",\"#fc8d62\",\"#8da0cb\",\"#e78ac3\",\"#a6d854\",\"#ffd92f\"],\n7: [\"#66c2a5\",\"#fc8d62\",\"#8da0cb\",\"#e78ac3\",\"#a6d854\",\"#ffd92f\",\"#e5c494\"],\n8: [\"#66c2a5\",\"#fc8d62\",\"#8da0cb\",\"#e78ac3\",\"#a6d854\",\"#ffd92f\",\"#e5c494\",\"#b3b3b3\"]\n},Set3: {\n3: [\"#8dd3c7\",\"#ffffb3\",\"#bebada\"],\n4: [\"#8dd3c7\",\"#ffffb3\",\"#bebada\",\"#fb8072\"],\n5: [\"#8dd3c7\",\"#ffffb3\",\"#bebada\",\"#fb8072\",\"#80b1d3\"],\n6: [\"#8dd3c7\",\"#ffffb3\",\"#bebada\",\"#fb8072\",\"#80b1d3\",\"#fdb462\"],\n7: [\"#8dd3c7\",\"#ffffb3\",\"#bebada\",\"#fb8072\",\"#80b1d3\",\"#fdb462\",\"#b3de69\"],\n8: [\"#8dd3c7\",\"#ffffb3\",\"#bebada\",\"#fb8072\",\"#80b1d3\",\"#fdb462\",\"#b3de69\",\"#fccde5\"],\n9: [\"#8dd3c7\",\"#ffffb3\",\"#bebada\",\"#fb8072\",\"#80b1d3\",\"#fdb462\",\"#b3de69\",\"#fccde5\",\"#d9d9d9\"],\n10: [\"#8dd3c7\",\"#ffffb3\",\"#bebada\",\"#fb8072\",\"#80b1d3\",\"#fdb462\",\"#b3de69\",\"#fccde5\",\"#d9d9d9\",\"#bc80bd\"],\n11: [\"#8dd3c7\",\"#ffffb3\",\"#bebada\",\"#fb8072\",\"#80b1d3\",\"#fdb462\",\"#b3de69\",\"#fccde5\",\"#d9d9d9\",\"#bc80bd\",\"#ccebc5\"],\n12: [\"#8dd3c7\",\"#ffffb3\",\"#bebada\",\"#fb8072\",\"#80b1d3\",\"#fdb462\",\"#b3de69\",\"#fccde5\",\"#d9d9d9\",\"#bc80bd\",\"#ccebc5\",\"#ffed6f\"]\n}};\n\nif (typeof define === \"function\" && define.amd) {\n    define(colorbrewer);\n} else if (typeof module === \"object\" && module.exports) {\n    module.exports = colorbrewer;\n} else {\n    this.colorbrewer = colorbrewer;\n}\n\n}();\n","import colorbrewer from \"colorbrewer\"\nimport {\n    Color,\n    ColorSchemeInterface,\n    ColorSchemeName,\n} from \"@ourworldindata/types\"\n\ntype ColorSchemeProps = { displayName: string; singleColorScale: boolean }\n\nconst ColorBrewerSchemeIndex: {\n    [key in ColorSchemeName]?: ColorSchemeProps\n} = {\n    YlGn: { displayName: \"Yellow-Green shades\", singleColorScale: true },\n    YlGnBu: {\n        displayName: \"Yellow-Green-Blue shades\",\n        singleColorScale: false,\n    },\n    GnBu: { displayName: \"Green-Blue shades\", singleColorScale: true },\n    BuGn: { displayName: \"Blue-Green shades\", singleColorScale: true },\n    PuBuGn: {\n        displayName: \"Purple-Blue-Green shades\",\n        singleColorScale: false,\n    },\n    BuPu: { displayName: \"Blue-Purple shades\", singleColorScale: true },\n    RdPu: { displayName: \"Red-Purple shades\", singleColorScale: true },\n    PuRd: { displayName: \"Purple-Red shades\", singleColorScale: true },\n    OrRd: { displayName: \"Orange-Red shades\", singleColorScale: true },\n    YlOrRd: {\n        displayName: \"Yellow-Orange-Red shades\",\n        singleColorScale: true,\n    },\n    YlOrBr: {\n        displayName: \"Yellow-Orange-Brown shades\",\n        singleColorScale: true,\n    },\n    Purples: { displayName: \"Purple shades\", singleColorScale: true },\n    Blues: { displayName: \"Blue shades\", singleColorScale: true },\n    Greens: { displayName: \"Green shades\", singleColorScale: true },\n    Oranges: { displayName: \"Orange shades\", singleColorScale: true },\n    Reds: { displayName: \"Red shades\", singleColorScale: true },\n    Greys: { displayName: \"Grey shades\", singleColorScale: true },\n    PuOr: { displayName: \"Purple-Orange\", singleColorScale: false },\n    BrBG: { displayName: \"Brown-Blue-Green\", singleColorScale: false },\n    PRGn: { displayName: \"Purple-Red-Green\", singleColorScale: false },\n    PiYG: { displayName: \"Magenta-Yellow-Green\", singleColorScale: false },\n    RdBu: { displayName: \"Red-Blue\", singleColorScale: false },\n    RdGy: { displayName: \"Red-Grey\", singleColorScale: false },\n    RdYlBu: { displayName: \"Red-Yellow-Blue\", singleColorScale: false },\n    Spectral: { displayName: \"Spectral colors\", singleColorScale: false },\n    RdYlGn: { displayName: \"Red-Yellow-Green\", singleColorScale: false },\n    Accent: { displayName: \"Accents\", singleColorScale: false },\n    Dark2: { displayName: \"Dark colors\", singleColorScale: false },\n    Paired: { displayName: \"Paired colors\", singleColorScale: false },\n    Pastel1: { displayName: \"Pastel 1 colors\", singleColorScale: false },\n    Pastel2: { displayName: \"Pastel 2 colors\", singleColorScale: false },\n    Set1: { displayName: \"Set 1 colors\", singleColorScale: false },\n    Set2: { displayName: \"Set 2 colors\", singleColorScale: false },\n    Set3: { displayName: \"Set 3 colors\", singleColorScale: false },\n    PuBu: { displayName: \"Purple-Blue shades\", singleColorScale: true },\n} as const\n\nexport const getColorBrewerScheme: (\n    name: string\n) => ColorSchemeInterface | undefined = (name: string) => {\n    const props = ColorBrewerSchemeIndex[name as ColorSchemeName]\n    const colorSets = (colorbrewer as any)[name]\n\n    if (!props || !colorSets) return undefined\n\n    const colorSetsArray: Color[][] = []\n    Object.keys(colorSets).forEach(\n        (numColors) => (colorSetsArray[+numColors] = colorSets[numColors])\n    )\n    return {\n        name,\n        displayName: props.displayName,\n        colorSets: colorSetsArray,\n        singleColorScale: props.singleColorScale,\n    }\n}\n","import * as _ from \"lodash-es\"\nimport { CustomColorSchemes } from \"./CustomSchemes\"\nimport { ColorScheme } from \"./ColorScheme\"\nimport { match } from \"ts-pattern\"\nimport {\n    GRAPHER_CHART_TYPES,\n    ColorSchemeInterface,\n    ColorSchemeName,\n    GRAPHER_MAP_TYPE,\n    GrapherChartOrMapType,\n} from \"@ourworldindata/types\"\nimport { getColorBrewerScheme } from \"./ColorBrewerSchemes.js\"\n\nfunction getPreferredSchemesByType(\n    type: GrapherChartOrMapType\n): ColorSchemeName[] {\n    // This function could also be a Map<GrapherChartOrMapType, ColorName[]> but\n    // by doing it as a function usign ts-pattern.match we get compile\n    // time safety that all enum cases in GrapherChartOrMapType are always handled here\n    return (\n        match(type)\n            .with(GRAPHER_CHART_TYPES.DiscreteBar, () => [\n                ColorSchemeName.SingleColorDenim,\n                ColorSchemeName.SingleColorDustyCoral,\n                ColorSchemeName.SingleColorPurple,\n                ColorSchemeName.SingleColorTeal,\n                ColorSchemeName.SingleColorDarkCopper,\n            ])\n            .with(GRAPHER_CHART_TYPES.LineChart, () => [\n                ColorSchemeName.OwidDistinctLines,\n            ])\n            .with(GRAPHER_CHART_TYPES.Marimekko, () => [\n                ColorSchemeName.continents,\n                ColorSchemeName.SingleColorDenim,\n                ColorSchemeName.SingleColorDustyCoral,\n                ColorSchemeName.SingleColorPurple,\n                ColorSchemeName.SingleColorTeal,\n                ColorSchemeName.SingleColorDarkCopper,\n                ColorSchemeName.OwidCategoricalA,\n                ColorSchemeName.OwidCategoricalB,\n                ColorSchemeName.OwidCategoricalC,\n                ColorSchemeName.OwidCategoricalD,\n                ColorSchemeName.OwidCategoricalE,\n            ])\n            .with(GRAPHER_CHART_TYPES.ScatterPlot, () => [\n                ColorSchemeName.continents,\n                ColorSchemeName.OwidDistinctLines,\n            ])\n            .with(GRAPHER_CHART_TYPES.SlopeChart, () => [\n                ColorSchemeName.continents,\n                ColorSchemeName.OwidDistinctLines,\n            ])\n            .with(GRAPHER_CHART_TYPES.StackedArea, () => [\n                ColorSchemeName[\"owid-distinct\"],\n                ColorSchemeName.OwidCategoricalA,\n                ColorSchemeName.OwidCategoricalB,\n                ColorSchemeName.OwidCategoricalC,\n                ColorSchemeName.OwidCategoricalD,\n                ColorSchemeName.OwidCategoricalE,\n                ColorSchemeName.SingleColorGradientDenim,\n                ColorSchemeName.SingleColorGradientTeal,\n                ColorSchemeName.SingleColorGradientPurple,\n                ColorSchemeName.SingleColorGradientDustyCoral,\n                ColorSchemeName.SingleColorGradientDarkCopper,\n            ])\n            .with(GRAPHER_CHART_TYPES.StackedBar, () => [\n                ColorSchemeName[\"owid-distinct\"],\n                ColorSchemeName.OwidCategoricalA,\n                ColorSchemeName.OwidCategoricalB,\n                ColorSchemeName.OwidCategoricalC,\n                ColorSchemeName.OwidCategoricalD,\n                ColorSchemeName.OwidCategoricalE,\n                ColorSchemeName.SingleColorGradientDenim,\n                ColorSchemeName.SingleColorGradientTeal,\n                ColorSchemeName.SingleColorGradientPurple,\n                ColorSchemeName.SingleColorGradientDustyCoral,\n                ColorSchemeName.SingleColorGradientDarkCopper,\n            ])\n            .with(GRAPHER_CHART_TYPES.StackedDiscreteBar, () => [\n                ColorSchemeName[\"owid-distinct\"],\n                ColorSchemeName.OwidCategoricalA,\n                ColorSchemeName.OwidCategoricalB,\n                ColorSchemeName.OwidCategoricalC,\n                ColorSchemeName.OwidCategoricalD,\n                ColorSchemeName.OwidCategoricalE,\n                ColorSchemeName.SingleColorGradientDenim,\n                ColorSchemeName.SingleColorGradientTeal,\n                ColorSchemeName.SingleColorGradientPurple,\n                ColorSchemeName.SingleColorGradientDustyCoral,\n                ColorSchemeName.SingleColorGradientDarkCopper,\n            ])\n            .with(GRAPHER_MAP_TYPE, () => [\n                ColorSchemeName.BinaryMapPaletteA,\n                ColorSchemeName.BinaryMapPaletteB,\n                ColorSchemeName.BinaryMapPaletteC,\n                ColorSchemeName.BinaryMapPaletteD,\n                ColorSchemeName.BinaryMapPaletteE,\n                ColorSchemeName.OwidCategoricalMap,\n            ])\n            .with(GRAPHER_CHART_TYPES.Swimlane, () => [\n                ColorSchemeName.OwidCategoricalA,\n                ColorSchemeName.OwidCategoricalB,\n                ColorSchemeName.OwidCategoricalC,\n                ColorSchemeName.OwidCategoricalD,\n                ColorSchemeName.OwidCategoricalE,\n                ColorSchemeName.SingleColorGradientDenim,\n                ColorSchemeName.SingleColorGradientTeal,\n                ColorSchemeName.SingleColorGradientPurple,\n                ColorSchemeName.SingleColorGradientDustyCoral,\n                ColorSchemeName.SingleColorGradientDarkCopper,\n            ])\n            // Dumbbell charts don't support color schemes\n            .with(GRAPHER_CHART_TYPES.Dumbbell, () => [])\n            .exhaustive()\n    )\n}\n\nconst initColorScheme = (scheme: ColorSchemeInterface): ColorScheme =>\n    new ColorScheme(\n        scheme.displayName ?? scheme.name,\n        scheme.colorSets,\n        scheme.singleColorScale,\n        scheme.isDistinct,\n        scheme.colorMap\n    )\n\nconst _colorSchemes = new Map<ColorSchemeName, ColorScheme>()\n\n// This object has a map-like appearance from the outside (with a .get() method),\n// but lazy-loads color schemes as they are requested\nexport const ColorSchemes = {\n    get: (name: ColorSchemeName): ColorScheme => {\n        if (!_colorSchemes.has(name)) {\n            const schemeRaw =\n                getColorBrewerScheme(name) ??\n                CustomColorSchemes.find((s) => s.name === name)\n            if (!schemeRaw) throw new Error(`Color scheme ${name} not found`)\n            const scheme = initColorScheme(schemeRaw)\n            _colorSchemes.set(name, scheme)\n        }\n        return _colorSchemes.get(name)!\n    },\n}\n\nconst getAllColorSchemes = (): Map<ColorSchemeName, ColorScheme> => {\n    return new Map(\n        Object.keys(ColorSchemeName).map((key) => [\n            key as ColorSchemeName,\n            ColorSchemes.get(key as ColorSchemeName),\n        ])\n    )\n}\n\nexport function getColorSchemeForChartType(type: GrapherChartOrMapType): {\n    [key in ColorSchemeName]: ColorScheme\n} {\n    const preferred = new Set(getPreferredSchemesByType(type))\n    const allSchemes = getAllColorSchemes()\n    const [preferredSchemes, otherSchemes] = _.partition(\n        [...allSchemes.entries()],\n        (schemeKeyValue) => preferred.has(schemeKeyValue[0])\n    )\n    return Object.fromEntries([...preferredSchemes, ...otherSchemes]) as {\n        [key in ColorSchemeName]: ColorScheme\n    }\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n    _[t] = [];\n  }\n  return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n  this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n    return {type: t, name: name};\n  });\n}\n\nDispatch.prototype = dispatch.prototype = {\n  constructor: Dispatch,\n  on: function(typename, callback) {\n    var _ = this._,\n        T = parseTypenames(typename + \"\", _),\n        t,\n        i = -1,\n        n = T.length;\n\n    // If no callback was specified, return the callback of the given type and name.\n    if (arguments.length < 2) {\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n      return;\n    }\n\n    // If a type was specified, set the callback for the given type and name.\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n    while (++i < n) {\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n    }\n\n    return this;\n  },\n  copy: function() {\n    var copy = {}, _ = this._;\n    for (var t in _) copy[t] = _[t].slice();\n    return new Dispatch(copy);\n  },\n  call: function(type, that) {\n    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  },\n  apply: function(type, that, args) {\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  }\n};\n\nfunction get(type, name) {\n  for (var i = 0, n = type.length, c; i < n; ++i) {\n    if ((c = type[i]).name === name) {\n      return c.value;\n    }\n  }\n}\n\nfunction set(type, name, callback) {\n  for (var i = 0, n = type.length; i < n; ++i) {\n    if (type[i].name === name) {\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n      break;\n    }\n  }\n  if (callback != null) type.push({name: name, value: callback});\n  return type;\n}\n\nexport default dispatch;\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\nexport default function(name) {\n  var fullname = namespace(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n  return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","function empty() {\n  return [];\n}\n\nexport default function(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n  return function() {\n    return array(select.apply(this, arguments));\n  };\n}\n\nexport default function(select) {\n  if (typeof select === \"function\") select = arrayAll(select);\n  else select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        subgroups.push(select.call(node, node.__data__, i, group));\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, parents);\n}\n","export default function(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n}\n\nexport function childMatcher(selector) {\n  return function(node) {\n    return node.matches(selector);\n  };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n  return function() {\n    return find.call(this.children, match);\n  };\n}\n\nfunction childFirst() {\n  return this.firstElementChild;\n}\n\nexport default function(match) {\n  return this.select(match == null ? childFirst\n      : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n  return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n  return function() {\n    return filter.call(this.children, match);\n  };\n}\n\nexport default function(match) {\n  return this.selectAll(match == null ? children\n      : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","export default function(update) {\n  return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n  this.ownerDocument = parent.ownerDocument;\n  this.namespaceURI = parent.namespaceURI;\n  this._next = null;\n  this._parent = parent;\n  this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n  constructor: EnterNode,\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n  var i = 0,\n      node,\n      groupLength = group.length,\n      dataLength = data.length;\n\n  // Put any non-null nodes that fit into update.\n  // Put any null nodes into enter.\n  // Put any remaining data into enter.\n  for (; i < dataLength; ++i) {\n    if (node = group[i]) {\n      node.__data__ = data[i];\n      update[i] = node;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Put any non-null nodes that don’t fit into exit.\n  for (; i < groupLength; ++i) {\n    if (node = group[i]) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n  var i,\n      node,\n      nodeByKeyValue = new Map,\n      groupLength = group.length,\n      dataLength = data.length,\n      keyValues = new Array(groupLength),\n      keyValue;\n\n  // Compute the key for each node.\n  // If multiple nodes have the same key, the duplicates are added to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if (node = group[i]) {\n      keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n      if (nodeByKeyValue.has(keyValue)) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue.set(keyValue, node);\n      }\n    }\n  }\n\n  // Compute the key for each datum.\n  // If there a node associated with this key, join and add it to update.\n  // If there is not (or the key is a duplicate), add it to enter.\n  for (i = 0; i < dataLength; ++i) {\n    keyValue = key.call(parent, data[i], i, data) + \"\";\n    if (node = nodeByKeyValue.get(keyValue)) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue.delete(keyValue);\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Add any remaining nodes that were not bound to data to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction datum(node) {\n  return node.__data__;\n}\n\nexport default function(value, key) {\n  if (!arguments.length) return Array.from(this, datum);\n\n  var bind = key ? bindKey : bindIndex,\n      parents = this._parents,\n      groups = this._groups;\n\n  if (typeof value !== \"function\") value = constant(value);\n\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n    var parent = parents[j],\n        group = groups[j],\n        groupLength = group.length,\n        data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n        dataLength = data.length,\n        enterGroup = enter[j] = new Array(dataLength),\n        updateGroup = update[j] = new Array(dataLength),\n        exitGroup = exit[j] = new Array(groupLength);\n\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n    // Now connect the enter nodes to their following update node, such that\n    // appendChild can insert the materialized enter node before this node,\n    // rather than at the end of the parent node.\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n      if (previous = enterGroup[i0]) {\n        if (i0 >= i1) i1 = i0 + 1;\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n        previous._next = next || null;\n      }\n    }\n  }\n\n  update = new Selection(update, parents);\n  update._enter = enter;\n  update._exit = exit;\n  return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n  return typeof data === \"object\" && \"length\" in data\n    ? data // Array, TypedArray, NodeList, array-like\n    : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n  var enter = this.enter(), update = this, exit = this.exit();\n  if (typeof onenter === \"function\") {\n    enter = onenter(enter);\n    if (enter) enter = enter.selection();\n  } else {\n    enter = enter.append(onenter + \"\");\n  }\n  if (onupdate != null) {\n    update = onupdate(update);\n    if (update) update = update.selection();\n  }\n  if (onexit == null) exit.remove(); else onexit(exit);\n  return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n  var selection = context.selection ? context.selection() : context;\n\n  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Selection(merges, this._parents);\n}\n","export default function() {\n\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n      if (node = group[i]) {\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n        next = node;\n      }\n    }\n  }\n\n  return this;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n  if (!compare) compare = ascending;\n\n  function compareNode(a, b) {\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n  }\n\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        sortgroup[i] = node;\n      }\n    }\n    sortgroup.sort(compareNode);\n  }\n\n  return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n  var callback = arguments[0];\n  arguments[0] = this;\n  callback.apply(null, arguments);\n  return this;\n}\n","export default function() {\n  return Array.from(this);\n}\n","export default function() {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n      var node = group[i];\n      if (node) return node;\n    }\n  }\n\n  return null;\n}\n","export default function() {\n  let size = 0;\n  for (const node of this) ++size; // eslint-disable-line no-unused-vars\n  return size;\n}\n","export default function() {\n  return !this.node();\n}\n","export default function(callback) {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\n    }\n  }\n\n  return this;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\nexport default function(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\nexport default function(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n}\n","function classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\nexport default function(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n}\n","function textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n}\n","function htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n}\n","function raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n  return this.each(raise);\n}\n","function lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n  return this.each(lower);\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n  var create = typeof name === \"function\" ? name : creator(name);\n  return this.select(function() {\n    return this.appendChild(create.apply(this, arguments));\n  });\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n  return null;\n}\n\nexport default function(name, before) {\n  var create = typeof name === \"function\" ? name : creator(name),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n  return this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n}\n","function remove() {\n  var parent = this.parentNode;\n  if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n  return this.each(remove);\n}\n","function selection_cloneShallow() {\n  var clone = this.cloneNode(false), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n  var clone = this.cloneNode(true), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","export default function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\n}\n","function contextListener(listener) {\n  return function(event) {\n    listener.call(this, event, this.__data__);\n  };\n}\n\nfunction parseTypenames(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, options) {\n  return function() {\n    var on = this.__on, o, listener = contextListener(value);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n        this.addEventListener(o.type, o.listener = listener, o.options = options);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, options);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nexport default function(typename, value, options) {\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n  return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n  var window = defaultView(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\nexport default function(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n}\n","export default function*() {\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) yield node;\n    }\n  }\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n  return this;\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  selectChild: selection_selectChild,\n  selectChildren: selection_selectChildren,\n  filter: selection_filter,\n  data: selection_data,\n  enter: selection_enter,\n  exit: selection_exit,\n  join: selection_join,\n  merge: selection_merge,\n  selection: selection_selection,\n  order: selection_order,\n  sort: selection_sort,\n  call: selection_call,\n  nodes: selection_nodes,\n  node: selection_node,\n  size: selection_size,\n  empty: selection_empty,\n  each: selection_each,\n  attr: selection_attr,\n  style: selection_style,\n  property: selection_property,\n  classed: selection_classed,\n  text: selection_text,\n  html: selection_html,\n  raise: selection_raise,\n  lower: selection_lower,\n  append: selection_append,\n  insert: selection_insert,\n  remove: selection_remove,\n  clone: selection_clone,\n  datum: selection_datum,\n  on: selection_on,\n  dispatch: selection_dispatch,\n  [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n      : new Selection([[selector]], root);\n}\n","export default function(event) {\n  let sourceEvent;\n  while (sourceEvent = event.sourceEvent) event = sourceEvent;\n  return event;\n}\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n  event = sourceEvent(event);\n  if (node === undefined) node = event.currentTarget;\n  if (node) {\n    var svg = node.ownerSVGElement || node;\n    if (svg.createSVGPoint) {\n      var point = svg.createSVGPoint();\n      point.x = event.clientX, point.y = event.clientY;\n      point = point.matrixTransform(node.getScreenCTM().inverse());\n      return [point.x, point.y];\n    }\n    if (node.getBoundingClientRect) {\n      var rect = node.getBoundingClientRect();\n      return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n    }\n  }\n  return [event.pageX, event.pageY];\n}\n","// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n  var root = view.document.documentElement,\n      selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n  if (\"onselectstart\" in root) {\n    selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\n  } else {\n    root.__noselect = root.style.MozUserSelect;\n    root.style.MozUserSelect = \"none\";\n  }\n}\n\nexport function yesdrag(view, noclick) {\n  var root = view.document.documentElement,\n      selection = select(view).on(\"dragstart.drag\", null);\n  if (noclick) {\n    selection.on(\"click.drag\", noevent, nonpassivecapture);\n    setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n  }\n  if (\"onselectstart\" in root) {\n    selection.on(\"selectstart.drag\", null);\n  } else {\n    root.style.MozUserSelect = root.__noselect;\n    delete root.__noselect;\n  }\n}\n","var frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nexport function Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nexport function timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nexport function timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(elapsed => {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n  var schedules = node.__transition;\n  if (!schedules) node.__transition = {};\n  else if (id in schedules) return;\n  create(node, id, {\n    name: name,\n    index: index, // For context during callback.\n    group: group, // For context during callback.\n    on: emptyOn,\n    tween: emptyTween,\n    time: timing.time,\n    delay: timing.delay,\n    duration: timing.duration,\n    ease: timing.ease,\n    timer: null,\n    state: CREATED\n  });\n}\n\nexport function init(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n  return schedule;\n}\n\nexport function set(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n  return schedule;\n}\n\nexport function get(node, id) {\n  var schedule = node.__transition;\n  if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n  return schedule;\n}\n\nfunction create(node, id, self) {\n  var schedules = node.__transition,\n      tween;\n\n  // Initialize the self timer when the transition is created.\n  // Note the actual delay is not known until the first callback!\n  schedules[id] = self;\n  self.timer = timer(schedule, 0, self.time);\n\n  function schedule(elapsed) {\n    self.state = SCHEDULED;\n    self.timer.restart(start, self.delay, self.time);\n\n    // If the elapsed delay is less than our first sleep, start immediately.\n    if (self.delay <= elapsed) start(elapsed - self.delay);\n  }\n\n  function start(elapsed) {\n    var i, j, n, o;\n\n    // If the state is not SCHEDULED, then we previously errored on start.\n    if (self.state !== SCHEDULED) return stop();\n\n    for (i in schedules) {\n      o = schedules[i];\n      if (o.name !== self.name) continue;\n\n      // While this element already has a starting transition during this frame,\n      // defer starting an interrupting transition until that transition has a\n      // chance to tick (and possibly end); see d3/d3-transition#54!\n      if (o.state === STARTED) return timeout(start);\n\n      // Interrupt the active transition, if any.\n      if (o.state === RUNNING) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n\n      // Cancel any pre-empted transitions.\n      else if (+i < id) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n    }\n\n    // Defer the first tick to end of the current frame; see d3/d3#1576.\n    // Note the transition may be canceled after start and before the first tick!\n    // Note this must be scheduled before the start event; see d3/d3-transition#16!\n    // Assuming this is successful, subsequent callbacks go straight to tick.\n    timeout(function() {\n      if (self.state === STARTED) {\n        self.state = RUNNING;\n        self.timer.restart(tick, self.delay, self.time);\n        tick(elapsed);\n      }\n    });\n\n    // Dispatch the start event.\n    // Note this must be done before the tween are initialized.\n    self.state = STARTING;\n    self.on.call(\"start\", node, node.__data__, self.index, self.group);\n    if (self.state !== STARTING) return; // interrupted\n    self.state = STARTED;\n\n    // Initialize the tween, deleting null tween.\n    tween = new Array(n = self.tween.length);\n    for (i = 0, j = -1; i < n; ++i) {\n      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n        tween[++j] = o;\n      }\n    }\n    tween.length = j + 1;\n  }\n\n  function tick(elapsed) {\n    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n        i = -1,\n        n = tween.length;\n\n    while (++i < n) {\n      tween[i].call(node, t);\n    }\n\n    // Dispatch the end event.\n    if (self.state === ENDING) {\n      self.on.call(\"end\", node, node.__data__, self.index, self.group);\n      stop();\n    }\n  }\n\n  function stop() {\n    self.state = ENDED;\n    self.timer.stop();\n    delete schedules[id];\n    for (var i in schedules) return; // eslint-disable-line no-unused-vars\n    delete node.__transition;\n  }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n  var schedules = node.__transition,\n      schedule,\n      active,\n      empty = true,\n      i;\n\n  if (!schedules) return;\n\n  name = name == null ? null : name + \"\";\n\n  for (i in schedules) {\n    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n    active = schedule.state > STARTING && schedule.state < ENDING;\n    schedule.state = ENDED;\n    schedule.timer.stop();\n    schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n    delete schedules[i];\n  }\n\n  if (empty) delete node.__transition;\n}\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n  return this.each(function() {\n    interrupt(this, name);\n  });\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n  var tween0, tween1;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = tween0 = tween;\n      for (var i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1 = tween1.slice();\n          tween1.splice(i, 1);\n          break;\n        }\n      }\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nfunction tweenFunction(id, name, value) {\n  var tween0, tween1;\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = (tween0 = tween).slice();\n      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1[i] = t;\n          break;\n        }\n      }\n      if (i === n) tween1.push(t);\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nexport default function(name, value) {\n  var id = this._id;\n\n  name += \"\";\n\n  if (arguments.length < 2) {\n    var tween = get(this.node(), id).tween;\n    for (var i = 0, n = tween.length, t; i < n; ++i) {\n      if ((t = tween[i]).name === name) {\n        return t.value;\n      }\n    }\n    return null;\n  }\n\n  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n  var id = transition._id;\n\n  transition.each(function() {\n    var schedule = set(this, id);\n    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n  });\n\n  return function(node) {\n    return get(node, id).value[name];\n  };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n  var c;\n  return (typeof b === \"number\" ? interpolateNumber\n      : b instanceof color ? interpolateRgb\n      : (c = color(b)) ? (b = c, interpolateRgb)\n      : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttribute(name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttributeNS(fullname.space, fullname.local);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttribute(name);\n    string0 = this.getAttribute(name);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n    string0 = this.getAttributeNS(fullname.space, fullname.local);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n  return this.attrTween(name, typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n      : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n      : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n  return function(t) {\n    this.setAttribute(name, i.call(this, t));\n  };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n  return function(t) {\n    this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n  };\n}\n\nfunction attrTweenNS(fullname, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction attrTween(name, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value) {\n  var key = \"attr.\" + name;\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  var fullname = namespace(name);\n  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n  return function() {\n    init(this, id).delay = +value.apply(this, arguments);\n  };\n}\n\nfunction delayConstant(id, value) {\n  return value = +value, function() {\n    init(this, id).delay = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? delayFunction\n          : delayConstant)(id, value))\n      : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n  return function() {\n    set(this, id).duration = +value.apply(this, arguments);\n  };\n}\n\nfunction durationConstant(id, value) {\n  return value = +value, function() {\n    set(this, id).duration = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? durationFunction\n          : durationConstant)(id, value))\n      : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    set(this, id).ease = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each(easeConstant(id, value))\n      : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (typeof v !== \"function\") throw new Error;\n    set(this, id).ease = v;\n  };\n}\n\nexport default function(value) {\n  if (typeof value !== \"function\") throw new Error;\n  return this.each(easeVarying(this._id, value));\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n  if (transition._id !== this._id) throw new Error;\n\n  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n  return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n    var i = t.indexOf(\".\");\n    if (i >= 0) t = t.slice(0, i);\n    return !t || t === \"start\";\n  });\n}\n\nfunction onFunction(id, name, listener) {\n  var on0, on1, sit = start(name) ? init : set;\n  return function() {\n    var schedule = sit(this, id),\n        on = schedule.on;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, listener) {\n  var id = this._id;\n\n  return arguments.length < 2\n      ? get(this.node(), id).on.on(name)\n      : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n  return function() {\n    var parent = this.parentNode;\n    for (var i in this.__transition) if (+i !== id) return;\n    if (parent) parent.removeChild(this);\n  };\n}\n\nexport default function() {\n  return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n        schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n          if (child = children[k]) {\n            schedule(child, name, id, k, children, inherit);\n          }\n        }\n        subgroups.push(children);\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n  return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        string1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, string10 = string1);\n  };\n}\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = style(this, name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction styleFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        value1 = value(this),\n        string1 = value1 + \"\";\n    if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction styleMaybeRemove(id, name) {\n  var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n  return function() {\n    var schedule = set(this, id),\n        on = schedule.on,\n        listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, value, priority) {\n  var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n  return value == null ? this\n      .styleTween(name, styleNull(name, i))\n      .on(\"end.style.\" + name, styleRemove(name))\n    : typeof value === \"function\" ? this\n      .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n      .each(styleMaybeRemove(this._id, name))\n    : this\n      .styleTween(name, styleConstant(name, i, value), priority)\n      .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n  return function(t) {\n    this.style.setProperty(name, i.call(this, t), priority);\n  };\n}\n\nfunction styleTween(name, value, priority) {\n  var t, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n    return t;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value, priority) {\n  var key = \"style.\" + (name += \"\");\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var value1 = value(this);\n    this.textContent = value1 == null ? \"\" : value1;\n  };\n}\n\nexport default function(value) {\n  return this.tween(\"text\", typeof value === \"function\"\n      ? textFunction(tweenValue(this, \"text\", value))\n      : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n  return function(t) {\n    this.textContent = i.call(this, t);\n  };\n}\n\nfunction textTween(value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(value) {\n  var key = \"text\";\n  if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n  var name = this._name,\n      id0 = this._id,\n      id1 = newId();\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        var inherit = get(node, id0);\n        schedule(node, name, id1, i, group, {\n          time: inherit.time + inherit.delay + inherit.duration,\n          delay: 0,\n          duration: inherit.duration,\n          ease: inherit.ease\n        });\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id1);\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n  var on0, on1, that = this, id = that._id, size = that.size();\n  return new Promise(function(resolve, reject) {\n    var cancel = {value: reject},\n        end = {value: function() { if (--size === 0) resolve(); }};\n\n    that.each(function() {\n      var schedule = set(this, id),\n          on = schedule.on;\n\n      // If this node shared a dispatch with the previous node,\n      // just assign the updated shared dispatch and we’re done!\n      // Otherwise, copy-on-write.\n      if (on !== on0) {\n        on1 = (on0 = on).copy();\n        on1._.cancel.push(cancel);\n        on1._.interrupt.push(cancel);\n        on1._.end.push(end);\n      }\n\n      schedule.on = on1;\n    });\n\n    // The selection was empty, resolve end immediately\n    if (size === 0) resolve();\n  });\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n  this._groups = groups;\n  this._parents = parents;\n  this._name = name;\n  this._id = id;\n}\n\nexport default function transition(name) {\n  return selection().transition(name);\n}\n\nexport function newId() {\n  return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n  constructor: Transition,\n  select: transition_select,\n  selectAll: transition_selectAll,\n  selectChild: selection_prototype.selectChild,\n  selectChildren: selection_prototype.selectChildren,\n  filter: transition_filter,\n  merge: transition_merge,\n  selection: transition_selection,\n  transition: transition_transition,\n  call: selection_prototype.call,\n  nodes: selection_prototype.nodes,\n  node: selection_prototype.node,\n  size: selection_prototype.size,\n  empty: selection_prototype.empty,\n  each: selection_prototype.each,\n  on: transition_on,\n  attr: transition_attr,\n  attrTween: transition_attrTween,\n  style: transition_style,\n  styleTween: transition_styleTween,\n  text: transition_text,\n  textTween: transition_textTween,\n  remove: transition_remove,\n  tween: transition_tween,\n  delay: transition_delay,\n  duration: transition_duration,\n  ease: transition_ease,\n  easeVarying: transition_easeVarying,\n  end: transition_end,\n  [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","export function cubicIn(t) {\n  return t * t * t;\n}\n\nexport function cubicOut(t) {\n  return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n  time: null, // Set on use.\n  delay: 0,\n  duration: 250,\n  ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n  var timing;\n  while (!(timing = node.__transition) || !(timing = timing[id])) {\n    if (!(node = node.parentNode)) {\n      throw new Error(`transition ${id} not found`);\n    }\n  }\n  return timing;\n}\n\nexport default function(name) {\n  var id,\n      timing;\n\n  if (name instanceof Transition) {\n    id = name._id, name = name._name;\n  } else {\n    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n  }\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        schedule(node, name, id, i, group, timing || inherit(node, id));\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolate} from \"d3-interpolate\";\nimport {pointer, select} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport BrushEvent from \"./event.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\nvar MODE_DRAG = {name: \"drag\"},\n    MODE_SPACE = {name: \"space\"},\n    MODE_HANDLE = {name: \"handle\"},\n    MODE_CENTER = {name: \"center\"};\n\nconst {abs, max, min} = Math;\n\nfunction number1(e) {\n  return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n  return [number1(e[0]), number1(e[1])];\n}\n\nvar X = {\n  name: \"x\",\n  handles: [\"w\", \"e\"].map(type),\n  input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },\n  output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n  name: \"y\",\n  handles: [\"n\", \"s\"].map(type),\n  input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },\n  output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n  name: \"xy\",\n  handles: [\"n\", \"w\", \"e\", \"s\", \"nw\", \"ne\", \"sw\", \"se\"].map(type),\n  input: function(xy) { return xy == null ? null : number2(xy); },\n  output: function(xy) { return xy; }\n};\n\nvar cursors = {\n  overlay: \"crosshair\",\n  selection: \"move\",\n  n: \"ns-resize\",\n  e: \"ew-resize\",\n  s: \"ns-resize\",\n  w: \"ew-resize\",\n  nw: \"nwse-resize\",\n  ne: \"nesw-resize\",\n  se: \"nwse-resize\",\n  sw: \"nesw-resize\"\n};\n\nvar flipX = {\n  e: \"w\",\n  w: \"e\",\n  nw: \"ne\",\n  ne: \"nw\",\n  se: \"sw\",\n  sw: \"se\"\n};\n\nvar flipY = {\n  n: \"s\",\n  s: \"n\",\n  nw: \"sw\",\n  ne: \"se\",\n  se: \"ne\",\n  sw: \"nw\"\n};\n\nvar signsX = {\n  overlay: +1,\n  selection: +1,\n  n: null,\n  e: +1,\n  s: null,\n  w: -1,\n  nw: -1,\n  ne: +1,\n  se: +1,\n  sw: -1\n};\n\nvar signsY = {\n  overlay: +1,\n  selection: +1,\n  n: -1,\n  e: null,\n  s: +1,\n  w: null,\n  nw: -1,\n  ne: -1,\n  se: +1,\n  sw: +1\n};\n\nfunction type(t) {\n  return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n  return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent() {\n  var svg = this.ownerSVGElement || this;\n  if (svg.hasAttribute(\"viewBox\")) {\n    svg = svg.viewBox.baseVal;\n    return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n  }\n  return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\n// Like d3.local, but with the name “__brush” rather than auto-generated.\nfunction local(node) {\n  while (!node.__brush) if (!(node = node.parentNode)) return;\n  return node.__brush;\n}\n\nfunction empty(extent) {\n  return extent[0][0] === extent[1][0]\n      || extent[0][1] === extent[1][1];\n}\n\nexport function brushSelection(node) {\n  var state = node.__brush;\n  return state ? state.dim.output(state.selection) : null;\n}\n\nexport function brushX() {\n  return brush(X);\n}\n\nexport function brushY() {\n  return brush(Y);\n}\n\nexport default function() {\n  return brush(XY);\n}\n\nfunction brush(dim) {\n  var extent = defaultExtent,\n      filter = defaultFilter,\n      touchable = defaultTouchable,\n      keys = true,\n      listeners = dispatch(\"start\", \"brush\", \"end\"),\n      handleSize = 6,\n      touchending;\n\n  function brush(group) {\n    var overlay = group\n        .property(\"__brush\", initialize)\n      .selectAll(\".overlay\")\n      .data([type(\"overlay\")]);\n\n    overlay.enter().append(\"rect\")\n        .attr(\"class\", \"overlay\")\n        .attr(\"pointer-events\", \"all\")\n        .attr(\"cursor\", cursors.overlay)\n      .merge(overlay)\n        .each(function() {\n          var extent = local(this).extent;\n          select(this)\n              .attr(\"x\", extent[0][0])\n              .attr(\"y\", extent[0][1])\n              .attr(\"width\", extent[1][0] - extent[0][0])\n              .attr(\"height\", extent[1][1] - extent[0][1]);\n        });\n\n    group.selectAll(\".selection\")\n      .data([type(\"selection\")])\n      .enter().append(\"rect\")\n        .attr(\"class\", \"selection\")\n        .attr(\"cursor\", cursors.selection)\n        .attr(\"fill\", \"#777\")\n        .attr(\"fill-opacity\", 0.3)\n        .attr(\"stroke\", \"#fff\")\n        .attr(\"shape-rendering\", \"crispEdges\");\n\n    var handle = group.selectAll(\".handle\")\n      .data(dim.handles, function(d) { return d.type; });\n\n    handle.exit().remove();\n\n    handle.enter().append(\"rect\")\n        .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n        .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n    group\n        .each(redraw)\n        .attr(\"fill\", \"none\")\n        .attr(\"pointer-events\", \"all\")\n        .on(\"mousedown.brush\", started)\n      .filter(touchable)\n        .on(\"touchstart.brush\", started)\n        .on(\"touchmove.brush\", touchmoved)\n        .on(\"touchend.brush touchcancel.brush\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  brush.move = function(group, selection, event) {\n    if (group.tween) {\n      group\n          .on(\"start.brush\", function(event) { emitter(this, arguments).beforestart().start(event); })\n          .on(\"interrupt.brush end.brush\", function(event) { emitter(this, arguments).end(event); })\n          .tween(\"brush\", function() {\n            var that = this,\n                state = that.__brush,\n                emit = emitter(that, arguments),\n                selection0 = state.selection,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n                i = interpolate(selection0, selection1);\n\n            function tween(t) {\n              state.selection = t === 1 && selection1 === null ? null : i(t);\n              redraw.call(that);\n              emit.brush();\n            }\n\n            return selection0 !== null && selection1 !== null ? tween : tween(1);\n          });\n    } else {\n      group\n          .each(function() {\n            var that = this,\n                args = arguments,\n                state = that.__brush,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n                emit = emitter(that, args).beforestart();\n\n            interrupt(that);\n            state.selection = selection1 === null ? null : selection1;\n            redraw.call(that);\n            emit.start(event).brush(event).end(event);\n          });\n    }\n  };\n\n  brush.clear = function(group, event) {\n    brush.move(group, null, event);\n  };\n\n  function redraw() {\n    var group = select(this),\n        selection = local(this).selection;\n\n    if (selection) {\n      group.selectAll(\".selection\")\n          .style(\"display\", null)\n          .attr(\"x\", selection[0][0])\n          .attr(\"y\", selection[0][1])\n          .attr(\"width\", selection[1][0] - selection[0][0])\n          .attr(\"height\", selection[1][1] - selection[0][1]);\n\n      group.selectAll(\".handle\")\n          .style(\"display\", null)\n          .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n          .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n          .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n          .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n    }\n\n    else {\n      group.selectAll(\".selection,.handle\")\n          .style(\"display\", \"none\")\n          .attr(\"x\", null)\n          .attr(\"y\", null)\n          .attr(\"width\", null)\n          .attr(\"height\", null);\n    }\n  }\n\n  function emitter(that, args, clean) {\n    var emit = that.__brush.emitter;\n    return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);\n  }\n\n  function Emitter(that, args, clean) {\n    this.that = that;\n    this.args = args;\n    this.state = that.__brush;\n    this.active = 0;\n    this.clean = clean;\n  }\n\n  Emitter.prototype = {\n    beforestart: function() {\n      if (++this.active === 1) this.state.emitter = this, this.starting = true;\n      return this;\n    },\n    start: function(event, mode) {\n      if (this.starting) this.starting = false, this.emit(\"start\", event, mode);\n      else this.emit(\"brush\", event);\n      return this;\n    },\n    brush: function(event, mode) {\n      this.emit(\"brush\", event, mode);\n      return this;\n    },\n    end: function(event, mode) {\n      if (--this.active === 0) delete this.state.emitter, this.emit(\"end\", event, mode);\n      return this;\n    },\n    emit: function(type, event, mode) {\n      var d = select(this.that).datum();\n      listeners.call(\n        type,\n        this.that,\n        new BrushEvent(type, {\n          sourceEvent: event,\n          target: brush,\n          selection: dim.output(this.state.selection),\n          mode,\n          dispatch: listeners\n        }),\n        d\n      );\n    }\n  };\n\n  function started(event) {\n    if (touchending && !event.touches) return;\n    if (!filter.apply(this, arguments)) return;\n\n    var that = this,\n        type = event.target.__data__.type,\n        mode = (keys && event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),\n        signX = dim === Y ? null : signsX[type],\n        signY = dim === X ? null : signsY[type],\n        state = local(that),\n        extent = state.extent,\n        selection = state.selection,\n        W = extent[0][0], w0, w1,\n        N = extent[0][1], n0, n1,\n        E = extent[1][0], e0, e1,\n        S = extent[1][1], s0, s1,\n        dx = 0,\n        dy = 0,\n        moving,\n        shifting = signX && signY && keys && event.shiftKey,\n        lockX,\n        lockY,\n        points = Array.from(event.touches || [event], t => {\n          const i = t.identifier;\n          t = pointer(t, that);\n          t.point0 = t.slice();\n          t.identifier = i;\n          return t;\n        });\n\n    interrupt(that);\n    var emit = emitter(that, arguments, true).beforestart();\n\n    if (type === \"overlay\") {\n      if (selection) moving = true;\n      const pts = [points[0], points[1] || points[0]];\n      state.selection = selection = [[\n          w0 = dim === Y ? W : min(pts[0][0], pts[1][0]),\n          n0 = dim === X ? N : min(pts[0][1], pts[1][1])\n        ], [\n          e0 = dim === Y ? E : max(pts[0][0], pts[1][0]),\n          s0 = dim === X ? S : max(pts[0][1], pts[1][1])\n        ]];\n      if (points.length > 1) move(event);\n    } else {\n      w0 = selection[0][0];\n      n0 = selection[0][1];\n      e0 = selection[1][0];\n      s0 = selection[1][1];\n    }\n\n    w1 = w0;\n    n1 = n0;\n    e1 = e0;\n    s1 = s0;\n\n    var group = select(that)\n        .attr(\"pointer-events\", \"none\");\n\n    var overlay = group.selectAll(\".overlay\")\n        .attr(\"cursor\", cursors[type]);\n\n    if (event.touches) {\n      emit.moved = moved;\n      emit.ended = ended;\n    } else {\n      var view = select(event.view)\n          .on(\"mousemove.brush\", moved, true)\n          .on(\"mouseup.brush\", ended, true);\n      if (keys) view\n          .on(\"keydown.brush\", keydowned, true)\n          .on(\"keyup.brush\", keyupped, true)\n\n      dragDisable(event.view);\n    }\n\n    redraw.call(that);\n    emit.start(event, mode.name);\n\n    function moved(event) {\n      for (const p of event.changedTouches || [event]) {\n        for (const d of points)\n          if (d.identifier === p.identifier) d.cur = pointer(p, that);\n      }\n      if (shifting && !lockX && !lockY && points.length === 1) {\n        const point = points[0];\n        if (abs(point.cur[0] - point[0]) > abs(point.cur[1] - point[1]))\n          lockY = true;\n        else\n          lockX = true;\n      }\n      for (const point of points)\n        if (point.cur) point[0] = point.cur[0], point[1] = point.cur[1];\n      moving = true;\n      noevent(event);\n      move(event);\n    }\n\n    function move(event) {\n      const point = points[0], point0 = point.point0;\n      var t;\n\n      dx = point[0] - point0[0];\n      dy = point[1] - point0[1];\n\n      switch (mode) {\n        case MODE_SPACE:\n        case MODE_DRAG: {\n          if (signX) dx = max(W - w0, min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n          if (signY) dy = max(N - n0, min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n          break;\n        }\n        case MODE_HANDLE: {\n          if (points[1]) {\n            if (signX) w1 = max(W, min(E, points[0][0])), e1 = max(W, min(E, points[1][0])), signX = 1;\n            if (signY) n1 = max(N, min(S, points[0][1])), s1 = max(N, min(S, points[1][1])), signY = 1;\n          } else {\n            if (signX < 0) dx = max(W - w0, min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n            else if (signX > 0) dx = max(W - e0, min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n            if (signY < 0) dy = max(N - n0, min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n            else if (signY > 0) dy = max(N - s0, min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n          }\n          break;\n        }\n        case MODE_CENTER: {\n          if (signX) w1 = max(W, min(E, w0 - dx * signX)), e1 = max(W, min(E, e0 + dx * signX));\n          if (signY) n1 = max(N, min(S, n0 - dy * signY)), s1 = max(N, min(S, s0 + dy * signY));\n          break;\n        }\n      }\n\n      if (e1 < w1) {\n        signX *= -1;\n        t = w0, w0 = e0, e0 = t;\n        t = w1, w1 = e1, e1 = t;\n        if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n      }\n\n      if (s1 < n1) {\n        signY *= -1;\n        t = n0, n0 = s0, s0 = t;\n        t = n1, n1 = s1, s1 = t;\n        if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n      }\n\n      if (state.selection) selection = state.selection; // May be set by brush.move!\n      if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n      if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n      if (selection[0][0] !== w1\n          || selection[0][1] !== n1\n          || selection[1][0] !== e1\n          || selection[1][1] !== s1) {\n        state.selection = [[w1, n1], [e1, s1]];\n        redraw.call(that);\n        emit.brush(event, mode.name);\n      }\n    }\n\n    function ended(event) {\n      nopropagation(event);\n      if (event.touches) {\n        if (event.touches.length) return;\n        if (touchending) clearTimeout(touchending);\n        touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n      } else {\n        dragEnable(event.view, moving);\n        view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n      }\n      group.attr(\"pointer-events\", \"all\");\n      overlay.attr(\"cursor\", cursors.overlay);\n      if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n      if (empty(selection)) state.selection = null, redraw.call(that);\n      emit.end(event, mode.name);\n    }\n\n    function keydowned(event) {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          shifting = signX && signY;\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_HANDLE) {\n            if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n            if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n            mode = MODE_CENTER;\n            move(event);\n          }\n          break;\n        }\n        case 32: { // SPACE; takes priority over ALT\n          if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n            if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n            mode = MODE_SPACE;\n            overlay.attr(\"cursor\", cursors.selection);\n            move(event);\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent(event);\n    }\n\n    function keyupped(event) {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          if (shifting) {\n            lockX = lockY = shifting = false;\n            move(event);\n          }\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n            if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n            mode = MODE_HANDLE;\n            move(event);\n          }\n          break;\n        }\n        case 32: { // SPACE\n          if (mode === MODE_SPACE) {\n            if (event.altKey) {\n              if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n              if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n              mode = MODE_CENTER;\n            } else {\n              if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n              if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n              mode = MODE_HANDLE;\n            }\n            overlay.attr(\"cursor\", cursors[type]);\n            move(event);\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent(event);\n    }\n  }\n\n  function touchmoved(event) {\n    emitter(this, arguments).moved(event);\n  }\n\n  function touchended(event) {\n    emitter(this, arguments).ended(event);\n  }\n\n  function initialize() {\n    var state = this.__brush || {selection: null};\n    state.extent = number2(extent.apply(this, arguments));\n    state.dim = dim;\n    return state;\n  }\n\n  brush.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant(number2(_)), brush) : extent;\n  };\n\n  brush.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), brush) : filter;\n  };\n\n  brush.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), brush) : touchable;\n  };\n\n  brush.handleSize = function(_) {\n    return arguments.length ? (handleSize = +_, brush) : handleSize;\n  };\n\n  brush.keyModifiers = function(_) {\n    return arguments.length ? (keys = !!_, brush) : keys;\n  };\n\n  brush.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? brush : value;\n  };\n\n  return brush;\n}\n","const pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n  this._ += strings[0];\n  for (let i = 1, n = strings.length; i < n; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  let d = Math.floor(digits);\n  if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  const k = 10 ** d;\n  return function(strings) {\n    this._ += strings[0];\n    for (let i = 1, n = strings.length; i < n; ++i) {\n      this._ += Math.round(arguments[i] * k) / k + strings[i];\n    }\n  };\n}\n\nexport class Path {\n  constructor(digits) {\n    this._x0 = this._y0 = // start of current subpath\n    this._x1 = this._y1 = null; // end of current subpath\n    this._ = \"\";\n    this._append = digits == null ? append : appendRound(digits);\n  }\n  moveTo(x, y) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n  }\n  closePath() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._append`Z`;\n    }\n  }\n  lineTo(x, y) {\n    this._append`L${this._x1 = +x},${this._y1 = +y}`;\n  }\n  quadraticCurveTo(x1, y1, x, y) {\n    this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  bezierCurveTo(x1, y1, x2, y2, x, y) {\n    this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  arcTo(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._append`M${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n      this._append`L${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      let x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon) {\n        this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n      }\n\n      this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n    }\n  }\n  arc(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._append`M${x0},${y0}`;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n      this._append`L${x0},${y0}`;\n    }\n\n    // Is this arc empty? We’re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau + tau;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon) {\n      this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n    }\n  }\n  rect(x, y, w, h) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n  }\n  toString() {\n    return this._;\n  }\n}\n\nexport function path() {\n  return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n  return new Path(+digits);\n}\n","export const epsilon = 1.1102230246251565e-16;\nexport const splitter = 134217729;\nexport const resulterrbound = (3 + 8 * epsilon) * epsilon;\n\n// fast_expansion_sum_zeroelim routine from oritinal code\nexport function sum(elen, e, flen, f, h) {\n    let Q, Qnew, hh, bvirt;\n    let enow = e[0];\n    let fnow = f[0];\n    let eindex = 0;\n    let findex = 0;\n    if ((fnow > enow) === (fnow > -enow)) {\n        Q = enow;\n        enow = e[++eindex];\n    } else {\n        Q = fnow;\n        fnow = f[++findex];\n    }\n    let hindex = 0;\n    if (eindex < elen && findex < flen) {\n        if ((fnow > enow) === (fnow > -enow)) {\n            Qnew = enow + Q;\n            hh = Q - (Qnew - enow);\n            enow = e[++eindex];\n        } else {\n            Qnew = fnow + Q;\n            hh = Q - (Qnew - fnow);\n            fnow = f[++findex];\n        }\n        Q = Qnew;\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n        while (eindex < elen && findex < flen) {\n            if ((fnow > enow) === (fnow > -enow)) {\n                Qnew = Q + enow;\n                bvirt = Qnew - Q;\n                hh = Q - (Qnew - bvirt) + (enow - bvirt);\n                enow = e[++eindex];\n            } else {\n                Qnew = Q + fnow;\n                bvirt = Qnew - Q;\n                hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n                fnow = f[++findex];\n            }\n            Q = Qnew;\n            if (hh !== 0) {\n                h[hindex++] = hh;\n            }\n        }\n    }\n    while (eindex < elen) {\n        Qnew = Q + enow;\n        bvirt = Qnew - Q;\n        hh = Q - (Qnew - bvirt) + (enow - bvirt);\n        enow = e[++eindex];\n        Q = Qnew;\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n    }\n    while (findex < flen) {\n        Qnew = Q + fnow;\n        bvirt = Qnew - Q;\n        hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n        fnow = f[++findex];\n        Q = Qnew;\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n    }\n    if (Q !== 0 || hindex === 0) {\n        h[hindex++] = Q;\n    }\n    return hindex;\n}\n\nexport function sum_three(alen, a, blen, b, clen, c, tmp, out) {\n    return sum(sum(alen, a, blen, b, tmp), tmp, clen, c, out);\n}\n\n// scale_expansion_zeroelim routine from oritinal code\nexport function scale(elen, e, b, h) {\n    let Q, sum, hh, product1, product0;\n    let bvirt, c, ahi, alo, bhi, blo;\n\n    c = splitter * b;\n    bhi = c - (c - b);\n    blo = b - bhi;\n    let enow = e[0];\n    Q = enow * b;\n    c = splitter * enow;\n    ahi = c - (c - enow);\n    alo = enow - ahi;\n    hh = alo * blo - (Q - ahi * bhi - alo * bhi - ahi * blo);\n    let hindex = 0;\n    if (hh !== 0) {\n        h[hindex++] = hh;\n    }\n    for (let i = 1; i < elen; i++) {\n        enow = e[i];\n        product1 = enow * b;\n        c = splitter * enow;\n        ahi = c - (c - enow);\n        alo = enow - ahi;\n        product0 = alo * blo - (product1 - ahi * bhi - alo * bhi - ahi * blo);\n        sum = Q + product0;\n        bvirt = sum - Q;\n        hh = Q - (sum - bvirt) + (product0 - bvirt);\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n        Q = product1 + sum;\n        hh = sum - (Q - product1);\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n    }\n    if (Q !== 0 || hindex === 0) {\n        h[hindex++] = Q;\n    }\n    return hindex;\n}\n\nexport function negate(elen, e) {\n    for (let i = 0; i < elen; i++) e[i] = -e[i];\n    return elen;\n}\n\nexport function estimate(elen, e) {\n    let Q = e[0];\n    for (let i = 1; i < elen; i++) Q += e[i];\n    return Q;\n}\n\nexport function vec(n) {\n    return new Float64Array(n);\n}\n","import {epsilon, splitter, resulterrbound, estimate, vec, sum} from './util.js';\n\nconst ccwerrboundA = (3 + 16 * epsilon) * epsilon;\nconst ccwerrboundB = (2 + 12 * epsilon) * epsilon;\nconst ccwerrboundC = (9 + 64 * epsilon) * epsilon * epsilon;\n\nconst B = vec(4);\nconst C1 = vec(8);\nconst C2 = vec(12);\nconst D = vec(16);\nconst u = vec(4);\n\nfunction orient2dadapt(ax, ay, bx, by, cx, cy, detsum) {\n    let acxtail, acytail, bcxtail, bcytail;\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n    const acx = ax - cx;\n    const bcx = bx - cx;\n    const acy = ay - cy;\n    const bcy = by - cy;\n\n    s1 = acx * bcy;\n    c = splitter * acx;\n    ahi = c - (c - acx);\n    alo = acx - ahi;\n    c = splitter * bcy;\n    bhi = c - (c - bcy);\n    blo = bcy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acy * bcx;\n    c = splitter * acy;\n    ahi = c - (c - acy);\n    alo = acy - ahi;\n    c = splitter * bcx;\n    bhi = c - (c - bcx);\n    blo = bcx - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    B[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    B[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    B[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    B[3] = u3;\n\n    let det = estimate(4, B);\n    let errbound = ccwerrboundB * detsum;\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    bvirt = ax - acx;\n    acxtail = ax - (acx + bvirt) + (bvirt - cx);\n    bvirt = bx - bcx;\n    bcxtail = bx - (bcx + bvirt) + (bvirt - cx);\n    bvirt = ay - acy;\n    acytail = ay - (acy + bvirt) + (bvirt - cy);\n    bvirt = by - bcy;\n    bcytail = by - (bcy + bvirt) + (bvirt - cy);\n\n    if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) {\n        return det;\n    }\n\n    errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det);\n    det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail);\n    if (det >= errbound || -det >= errbound) return det;\n\n    s1 = acxtail * bcy;\n    c = splitter * acxtail;\n    ahi = c - (c - acxtail);\n    alo = acxtail - ahi;\n    c = splitter * bcy;\n    bhi = c - (c - bcy);\n    blo = bcy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acytail * bcx;\n    c = splitter * acytail;\n    ahi = c - (c - acytail);\n    alo = acytail - ahi;\n    c = splitter * bcx;\n    bhi = c - (c - bcx);\n    blo = bcx - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    u[3] = u3;\n    const C1len = sum(4, B, 4, u, C1);\n\n    s1 = acx * bcytail;\n    c = splitter * acx;\n    ahi = c - (c - acx);\n    alo = acx - ahi;\n    c = splitter * bcytail;\n    bhi = c - (c - bcytail);\n    blo = bcytail - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acy * bcxtail;\n    c = splitter * acy;\n    ahi = c - (c - acy);\n    alo = acy - ahi;\n    c = splitter * bcxtail;\n    bhi = c - (c - bcxtail);\n    blo = bcxtail - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    u[3] = u3;\n    const C2len = sum(C1len, C1, 4, u, C2);\n\n    s1 = acxtail * bcytail;\n    c = splitter * acxtail;\n    ahi = c - (c - acxtail);\n    alo = acxtail - ahi;\n    c = splitter * bcytail;\n    bhi = c - (c - bcytail);\n    blo = bcytail - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acytail * bcxtail;\n    c = splitter * acytail;\n    ahi = c - (c - acytail);\n    alo = acytail - ahi;\n    c = splitter * bcxtail;\n    bhi = c - (c - bcxtail);\n    blo = bcxtail - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    u[3] = u3;\n    const Dlen = sum(C2len, C2, 4, u, D);\n\n    return D[Dlen - 1];\n}\n\nexport function orient2d(ax, ay, bx, by, cx, cy) {\n    const detleft = (ay - cy) * (bx - cx);\n    const detright = (ax - cx) * (by - cy);\n    const det = detleft - detright;\n\n    const detsum = Math.abs(detleft + detright);\n    if (Math.abs(det) >= ccwerrboundA * detsum) return det;\n\n    return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum);\n}\n\nexport function orient2dfast(ax, ay, bx, by, cx, cy) {\n    return (ay - cy) * (bx - cx) - (ax - cx) * (by - cy);\n}\n","import {epsilon, splitter, resulterrbound, estimate, vec, sum, scale} from './util.js';\n\nconst o3derrboundA = (7 + 56 * epsilon) * epsilon;\nconst o3derrboundB = (3 + 28 * epsilon) * epsilon;\nconst o3derrboundC = (26 + 288 * epsilon) * epsilon * epsilon;\n\nconst bc = vec(4);\nconst ca = vec(4);\nconst ab = vec(4);\nconst at_b = vec(4);\nconst at_c = vec(4);\nconst bt_c = vec(4);\nconst bt_a = vec(4);\nconst ct_a = vec(4);\nconst ct_b = vec(4);\nconst bct = vec(8);\nconst cat = vec(8);\nconst abt = vec(8);\nconst u = vec(4);\n\nconst _8 = vec(8);\nconst _8b = vec(8);\nconst _16 = vec(8);\nconst _12 = vec(12);\n\nlet fin = vec(192);\nlet fin2 = vec(192);\n\nfunction finadd(finlen, alen, a) {\n    finlen = sum(finlen, fin, alen, a, fin2);\n    const tmp = fin; fin = fin2; fin2 = tmp;\n    return finlen;\n}\n\nfunction tailinit(xtail, ytail, ax, ay, bx, by, a, b) {\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, t1, t0, u3, negate;\n    if (xtail === 0) {\n        if (ytail === 0) {\n            a[0] = 0;\n            b[0] = 0;\n            return 1;\n        } else {\n            negate = -ytail;\n            s1 = negate * ax;\n            c = splitter * negate;\n            ahi = c - (c - negate);\n            alo = negate - ahi;\n            c = splitter * ax;\n            bhi = c - (c - ax);\n            blo = ax - bhi;\n            a[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            a[1] = s1;\n            s1 = ytail * bx;\n            c = splitter * ytail;\n            ahi = c - (c - ytail);\n            alo = ytail - ahi;\n            c = splitter * bx;\n            bhi = c - (c - bx);\n            blo = bx - bhi;\n            b[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            b[1] = s1;\n            return 2;\n        }\n    } else {\n        if (ytail === 0) {\n            s1 = xtail * ay;\n            c = splitter * xtail;\n            ahi = c - (c - xtail);\n            alo = xtail - ahi;\n            c = splitter * ay;\n            bhi = c - (c - ay);\n            blo = ay - bhi;\n            a[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            a[1] = s1;\n            negate = -xtail;\n            s1 = negate * by;\n            c = splitter * negate;\n            ahi = c - (c - negate);\n            alo = negate - ahi;\n            c = splitter * by;\n            bhi = c - (c - by);\n            blo = by - bhi;\n            b[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            b[1] = s1;\n            return 2;\n        } else {\n            s1 = xtail * ay;\n            c = splitter * xtail;\n            ahi = c - (c - xtail);\n            alo = xtail - ahi;\n            c = splitter * ay;\n            bhi = c - (c - ay);\n            blo = ay - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = ytail * ax;\n            c = splitter * ytail;\n            ahi = c - (c - ytail);\n            alo = ytail - ahi;\n            c = splitter * ax;\n            bhi = c - (c - ax);\n            blo = ax - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 - t0;\n            bvirt = s0 - _i;\n            a[0] = s0 - (_i + bvirt) + (bvirt - t0);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 - t1;\n            bvirt = _0 - _i;\n            a[1] = _0 - (_i + bvirt) + (bvirt - t1);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            a[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            a[3] = u3;\n            s1 = ytail * bx;\n            c = splitter * ytail;\n            ahi = c - (c - ytail);\n            alo = ytail - ahi;\n            c = splitter * bx;\n            bhi = c - (c - bx);\n            blo = bx - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = xtail * by;\n            c = splitter * xtail;\n            ahi = c - (c - xtail);\n            alo = xtail - ahi;\n            c = splitter * by;\n            bhi = c - (c - by);\n            blo = by - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 - t0;\n            bvirt = s0 - _i;\n            b[0] = s0 - (_i + bvirt) + (bvirt - t0);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 - t1;\n            bvirt = _0 - _i;\n            b[1] = _0 - (_i + bvirt) + (bvirt - t1);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            b[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            b[3] = u3;\n            return 4;\n        }\n    }\n}\n\nfunction tailadd(finlen, a, b, k, z) {\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, u3;\n    s1 = a * b;\n    c = splitter * a;\n    ahi = c - (c - a);\n    alo = a - ahi;\n    c = splitter * b;\n    bhi = c - (c - b);\n    blo = b - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    c = splitter * k;\n    bhi = c - (c - k);\n    blo = k - bhi;\n    _i = s0 * k;\n    c = splitter * s0;\n    ahi = c - (c - s0);\n    alo = s0 - ahi;\n    u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);\n    _j = s1 * k;\n    c = splitter * s1;\n    ahi = c - (c - s1);\n    alo = s1 - ahi;\n    _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);\n    _k = _i + _0;\n    bvirt = _k - _i;\n    u[1] = _i - (_k - bvirt) + (_0 - bvirt);\n    u3 = _j + _k;\n    u[2] = _k - (u3 - _j);\n    u[3] = u3;\n    finlen = finadd(finlen, 4, u);\n    if (z !== 0) {\n        c = splitter * z;\n        bhi = c - (c - z);\n        blo = z - bhi;\n        _i = s0 * z;\n        c = splitter * s0;\n        ahi = c - (c - s0);\n        alo = s0 - ahi;\n        u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);\n        _j = s1 * z;\n        c = splitter * s1;\n        ahi = c - (c - s1);\n        alo = s1 - ahi;\n        _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);\n        _k = _i + _0;\n        bvirt = _k - _i;\n        u[1] = _i - (_k - bvirt) + (_0 - bvirt);\n        u3 = _j + _k;\n        u[2] = _k - (u3 - _j);\n        u[3] = u3;\n        finlen = finadd(finlen, 4, u);\n    }\n    return finlen;\n}\n\nfunction orient3dadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, permanent) {\n    let finlen;\n    let adxtail, bdxtail, cdxtail;\n    let adytail, bdytail, cdytail;\n    let adztail, bdztail, cdztail;\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, t1, t0, u3;\n\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n    const adz = az - dz;\n    const bdz = bz - dz;\n    const cdz = cz - dz;\n\n    s1 = bdx * cdy;\n    c = splitter * bdx;\n    ahi = c - (c - bdx);\n    alo = bdx - ahi;\n    c = splitter * cdy;\n    bhi = c - (c - cdy);\n    blo = cdy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cdx * bdy;\n    c = splitter * cdx;\n    ahi = c - (c - cdx);\n    alo = cdx - ahi;\n    c = splitter * bdy;\n    bhi = c - (c - bdy);\n    blo = bdy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    bc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    bc[3] = u3;\n    s1 = cdx * ady;\n    c = splitter * cdx;\n    ahi = c - (c - cdx);\n    alo = cdx - ahi;\n    c = splitter * ady;\n    bhi = c - (c - ady);\n    blo = ady - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = adx * cdy;\n    c = splitter * adx;\n    ahi = c - (c - adx);\n    alo = adx - ahi;\n    c = splitter * cdy;\n    bhi = c - (c - cdy);\n    blo = cdy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ca[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ca[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ca[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ca[3] = u3;\n    s1 = adx * bdy;\n    c = splitter * adx;\n    ahi = c - (c - adx);\n    alo = adx - ahi;\n    c = splitter * bdy;\n    bhi = c - (c - bdy);\n    blo = bdy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bdx * ady;\n    c = splitter * bdx;\n    ahi = c - (c - bdx);\n    alo = bdx - ahi;\n    c = splitter * ady;\n    bhi = c - (c - ady);\n    blo = ady - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ab[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ab[3] = u3;\n\n    finlen = sum(\n        sum(\n            scale(4, bc, adz, _8), _8,\n            scale(4, ca, bdz, _8b), _8b, _16), _16,\n        scale(4, ab, cdz, _8), _8, fin);\n\n    let det = estimate(finlen, fin);\n    let errbound = o3derrboundB * permanent;\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    bvirt = ax - adx;\n    adxtail = ax - (adx + bvirt) + (bvirt - dx);\n    bvirt = bx - bdx;\n    bdxtail = bx - (bdx + bvirt) + (bvirt - dx);\n    bvirt = cx - cdx;\n    cdxtail = cx - (cdx + bvirt) + (bvirt - dx);\n    bvirt = ay - ady;\n    adytail = ay - (ady + bvirt) + (bvirt - dy);\n    bvirt = by - bdy;\n    bdytail = by - (bdy + bvirt) + (bvirt - dy);\n    bvirt = cy - cdy;\n    cdytail = cy - (cdy + bvirt) + (bvirt - dy);\n    bvirt = az - adz;\n    adztail = az - (adz + bvirt) + (bvirt - dz);\n    bvirt = bz - bdz;\n    bdztail = bz - (bdz + bvirt) + (bvirt - dz);\n    bvirt = cz - cdz;\n    cdztail = cz - (cdz + bvirt) + (bvirt - dz);\n\n    if (adxtail === 0 && bdxtail === 0 && cdxtail === 0 &&\n        adytail === 0 && bdytail === 0 && cdytail === 0 &&\n        adztail === 0 && bdztail === 0 && cdztail === 0) {\n        return det;\n    }\n\n    errbound = o3derrboundC * permanent + resulterrbound * Math.abs(det);\n    det +=\n        adz * (bdx * cdytail + cdy * bdxtail - (bdy * cdxtail + cdx * bdytail)) + adztail * (bdx * cdy - bdy * cdx) +\n        bdz * (cdx * adytail + ady * cdxtail - (cdy * adxtail + adx * cdytail)) + bdztail * (cdx * ady - cdy * adx) +\n        cdz * (adx * bdytail + bdy * adxtail - (ady * bdxtail + bdx * adytail)) + cdztail * (adx * bdy - ady * bdx);\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    const at_len = tailinit(adxtail, adytail, bdx, bdy, cdx, cdy, at_b, at_c);\n    const bt_len = tailinit(bdxtail, bdytail, cdx, cdy, adx, ady, bt_c, bt_a);\n    const ct_len = tailinit(cdxtail, cdytail, adx, ady, bdx, bdy, ct_a, ct_b);\n\n    const bctlen = sum(bt_len, bt_c, ct_len, ct_b, bct);\n    finlen = finadd(finlen, scale(bctlen, bct, adz, _16), _16);\n\n    const catlen = sum(ct_len, ct_a, at_len, at_c, cat);\n    finlen = finadd(finlen, scale(catlen, cat, bdz, _16), _16);\n\n    const abtlen = sum(at_len, at_b, bt_len, bt_a, abt);\n    finlen = finadd(finlen, scale(abtlen, abt, cdz, _16), _16);\n\n    if (adztail !== 0) {\n        finlen = finadd(finlen, scale(4, bc, adztail, _12), _12);\n        finlen = finadd(finlen, scale(bctlen, bct, adztail, _16), _16);\n    }\n    if (bdztail !== 0) {\n        finlen = finadd(finlen, scale(4, ca, bdztail, _12), _12);\n        finlen = finadd(finlen, scale(catlen, cat, bdztail, _16), _16);\n    }\n    if (cdztail !== 0) {\n        finlen = finadd(finlen, scale(4, ab, cdztail, _12), _12);\n        finlen = finadd(finlen, scale(abtlen, abt, cdztail, _16), _16);\n    }\n\n    if (adxtail !== 0) {\n        if (bdytail !== 0) {\n            finlen = tailadd(finlen, adxtail, bdytail, cdz, cdztail);\n        }\n        if (cdytail !== 0) {\n            finlen = tailadd(finlen, -adxtail, cdytail, bdz, bdztail);\n        }\n    }\n    if (bdxtail !== 0) {\n        if (cdytail !== 0) {\n            finlen = tailadd(finlen, bdxtail, cdytail, adz, adztail);\n        }\n        if (adytail !== 0) {\n            finlen = tailadd(finlen, -bdxtail, adytail, cdz, cdztail);\n        }\n    }\n    if (cdxtail !== 0) {\n        if (adytail !== 0) {\n            finlen = tailadd(finlen, cdxtail, adytail, bdz, bdztail);\n        }\n        if (bdytail !== 0) {\n            finlen = tailadd(finlen, -cdxtail, bdytail, adz, adztail);\n        }\n    }\n\n    return fin[finlen - 1];\n}\n\nexport function orient3d(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz) {\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n    const adz = az - dz;\n    const bdz = bz - dz;\n    const cdz = cz - dz;\n\n    const bdxcdy = bdx * cdy;\n    const cdxbdy = cdx * bdy;\n\n    const cdxady = cdx * ady;\n    const adxcdy = adx * cdy;\n\n    const adxbdy = adx * bdy;\n    const bdxady = bdx * ady;\n\n    const det =\n        adz * (bdxcdy - cdxbdy) +\n        bdz * (cdxady - adxcdy) +\n        cdz * (adxbdy - bdxady);\n\n    const permanent =\n        (Math.abs(bdxcdy) + Math.abs(cdxbdy)) * Math.abs(adz) +\n        (Math.abs(cdxady) + Math.abs(adxcdy)) * Math.abs(bdz) +\n        (Math.abs(adxbdy) + Math.abs(bdxady)) * Math.abs(cdz);\n\n    const errbound = o3derrboundA * permanent;\n    if (det > errbound || -det > errbound) {\n        return det;\n    }\n\n    return orient3dadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, permanent);\n}\n\nexport function orient3dfast(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz) {\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n    const adz = az - dz;\n    const bdz = bz - dz;\n    const cdz = cz - dz;\n\n    return adx * (bdy * cdz - bdz * cdy) +\n        bdx * (cdy * adz - cdz * ady) +\n        cdx * (ady * bdz - adz * bdy);\n}\n","import {epsilon, splitter, resulterrbound, estimate, vec, sum, sum_three, scale} from './util.js';\n\nconst iccerrboundA = (10 + 96 * epsilon) * epsilon;\nconst iccerrboundB = (4 + 48 * epsilon) * epsilon;\nconst iccerrboundC = (44 + 576 * epsilon) * epsilon * epsilon;\n\nconst bc = vec(4);\nconst ca = vec(4);\nconst ab = vec(4);\nconst aa = vec(4);\nconst bb = vec(4);\nconst cc = vec(4);\nconst u = vec(4);\nconst v = vec(4);\nconst axtbc = vec(8);\nconst aytbc = vec(8);\nconst bxtca = vec(8);\nconst bytca = vec(8);\nconst cxtab = vec(8);\nconst cytab = vec(8);\nconst abt = vec(8);\nconst bct = vec(8);\nconst cat = vec(8);\nconst abtt = vec(4);\nconst bctt = vec(4);\nconst catt = vec(4);\n\nconst _8 = vec(8);\nconst _16 = vec(16);\nconst _16b = vec(16);\nconst _16c = vec(16);\nconst _32 = vec(32);\nconst _32b = vec(32);\nconst _48 = vec(48);\nconst _64 = vec(64);\n\nlet fin = vec(1152);\nlet fin2 = vec(1152);\n\nfunction finadd(finlen, a, alen) {\n    finlen = sum(finlen, fin, a, alen, fin2);\n    const tmp = fin; fin = fin2; fin2 = tmp;\n    return finlen;\n}\n\nfunction incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {\n    let finlen;\n    let adxtail, bdxtail, cdxtail, adytail, bdytail, cdytail;\n    let axtbclen, aytbclen, bxtcalen, bytcalen, cxtablen, cytablen;\n    let abtlen, bctlen, catlen;\n    let abttlen, bcttlen, cattlen;\n    let n1, n0;\n\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n\n    s1 = bdx * cdy;\n    c = splitter * bdx;\n    ahi = c - (c - bdx);\n    alo = bdx - ahi;\n    c = splitter * cdy;\n    bhi = c - (c - cdy);\n    blo = cdy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cdx * bdy;\n    c = splitter * cdx;\n    ahi = c - (c - cdx);\n    alo = cdx - ahi;\n    c = splitter * bdy;\n    bhi = c - (c - bdy);\n    blo = bdy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    bc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    bc[3] = u3;\n    s1 = cdx * ady;\n    c = splitter * cdx;\n    ahi = c - (c - cdx);\n    alo = cdx - ahi;\n    c = splitter * ady;\n    bhi = c - (c - ady);\n    blo = ady - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = adx * cdy;\n    c = splitter * adx;\n    ahi = c - (c - adx);\n    alo = adx - ahi;\n    c = splitter * cdy;\n    bhi = c - (c - cdy);\n    blo = cdy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ca[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ca[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ca[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ca[3] = u3;\n    s1 = adx * bdy;\n    c = splitter * adx;\n    ahi = c - (c - adx);\n    alo = adx - ahi;\n    c = splitter * bdy;\n    bhi = c - (c - bdy);\n    blo = bdy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bdx * ady;\n    c = splitter * bdx;\n    ahi = c - (c - bdx);\n    alo = bdx - ahi;\n    c = splitter * ady;\n    bhi = c - (c - ady);\n    blo = ady - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ab[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ab[3] = u3;\n\n    finlen = sum(\n        sum(\n            sum(\n                scale(scale(4, bc, adx, _8), _8, adx, _16), _16,\n                scale(scale(4, bc, ady, _8), _8, ady, _16b), _16b, _32), _32,\n            sum(\n                scale(scale(4, ca, bdx, _8), _8, bdx, _16), _16,\n                scale(scale(4, ca, bdy, _8), _8, bdy, _16b), _16b, _32b), _32b, _64), _64,\n        sum(\n            scale(scale(4, ab, cdx, _8), _8, cdx, _16), _16,\n            scale(scale(4, ab, cdy, _8), _8, cdy, _16b), _16b, _32), _32, fin);\n\n    let det = estimate(finlen, fin);\n    let errbound = iccerrboundB * permanent;\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    bvirt = ax - adx;\n    adxtail = ax - (adx + bvirt) + (bvirt - dx);\n    bvirt = ay - ady;\n    adytail = ay - (ady + bvirt) + (bvirt - dy);\n    bvirt = bx - bdx;\n    bdxtail = bx - (bdx + bvirt) + (bvirt - dx);\n    bvirt = by - bdy;\n    bdytail = by - (bdy + bvirt) + (bvirt - dy);\n    bvirt = cx - cdx;\n    cdxtail = cx - (cdx + bvirt) + (bvirt - dx);\n    bvirt = cy - cdy;\n    cdytail = cy - (cdy + bvirt) + (bvirt - dy);\n    if (adxtail === 0 && bdxtail === 0 && cdxtail === 0 && adytail === 0 && bdytail === 0 && cdytail === 0) {\n        return det;\n    }\n\n    errbound = iccerrboundC * permanent + resulterrbound * Math.abs(det);\n    det += ((adx * adx + ady * ady) * ((bdx * cdytail + cdy * bdxtail) - (bdy * cdxtail + cdx * bdytail)) +\n        2 * (adx * adxtail + ady * adytail) * (bdx * cdy - bdy * cdx)) +\n        ((bdx * bdx + bdy * bdy) * ((cdx * adytail + ady * cdxtail) - (cdy * adxtail + adx * cdytail)) +\n        2 * (bdx * bdxtail + bdy * bdytail) * (cdx * ady - cdy * adx)) +\n        ((cdx * cdx + cdy * cdy) * ((adx * bdytail + bdy * adxtail) - (ady * bdxtail + bdx * adytail)) +\n        2 * (cdx * cdxtail + cdy * cdytail) * (adx * bdy - ady * bdx));\n\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {\n        s1 = adx * adx;\n        c = splitter * adx;\n        ahi = c - (c - adx);\n        alo = adx - ahi;\n        s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);\n        t1 = ady * ady;\n        c = splitter * ady;\n        ahi = c - (c - ady);\n        alo = ady - ahi;\n        t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);\n        _i = s0 + t0;\n        bvirt = _i - s0;\n        aa[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n        _j = s1 + _i;\n        bvirt = _j - s1;\n        _0 = s1 - (_j - bvirt) + (_i - bvirt);\n        _i = _0 + t1;\n        bvirt = _i - _0;\n        aa[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n        u3 = _j + _i;\n        bvirt = u3 - _j;\n        aa[2] = _j - (u3 - bvirt) + (_i - bvirt);\n        aa[3] = u3;\n    }\n    if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {\n        s1 = bdx * bdx;\n        c = splitter * bdx;\n        ahi = c - (c - bdx);\n        alo = bdx - ahi;\n        s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);\n        t1 = bdy * bdy;\n        c = splitter * bdy;\n        ahi = c - (c - bdy);\n        alo = bdy - ahi;\n        t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);\n        _i = s0 + t0;\n        bvirt = _i - s0;\n        bb[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n        _j = s1 + _i;\n        bvirt = _j - s1;\n        _0 = s1 - (_j - bvirt) + (_i - bvirt);\n        _i = _0 + t1;\n        bvirt = _i - _0;\n        bb[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n        u3 = _j + _i;\n        bvirt = u3 - _j;\n        bb[2] = _j - (u3 - bvirt) + (_i - bvirt);\n        bb[3] = u3;\n    }\n    if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {\n        s1 = cdx * cdx;\n        c = splitter * cdx;\n        ahi = c - (c - cdx);\n        alo = cdx - ahi;\n        s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);\n        t1 = cdy * cdy;\n        c = splitter * cdy;\n        ahi = c - (c - cdy);\n        alo = cdy - ahi;\n        t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);\n        _i = s0 + t0;\n        bvirt = _i - s0;\n        cc[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n        _j = s1 + _i;\n        bvirt = _j - s1;\n        _0 = s1 - (_j - bvirt) + (_i - bvirt);\n        _i = _0 + t1;\n        bvirt = _i - _0;\n        cc[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n        u3 = _j + _i;\n        bvirt = u3 - _j;\n        cc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n        cc[3] = u3;\n    }\n\n    if (adxtail !== 0) {\n        axtbclen = scale(4, bc, adxtail, axtbc);\n        finlen = finadd(finlen, sum_three(\n            scale(axtbclen, axtbc, 2 * adx, _16), _16,\n            scale(scale(4, cc, adxtail, _8), _8, bdy, _16b), _16b,\n            scale(scale(4, bb, adxtail, _8), _8, -cdy, _16c), _16c, _32, _48), _48);\n    }\n    if (adytail !== 0) {\n        aytbclen = scale(4, bc, adytail, aytbc);\n        finlen = finadd(finlen, sum_three(\n            scale(aytbclen, aytbc, 2 * ady, _16), _16,\n            scale(scale(4, bb, adytail, _8), _8, cdx, _16b), _16b,\n            scale(scale(4, cc, adytail, _8), _8, -bdx, _16c), _16c, _32, _48), _48);\n    }\n    if (bdxtail !== 0) {\n        bxtcalen = scale(4, ca, bdxtail, bxtca);\n        finlen = finadd(finlen, sum_three(\n            scale(bxtcalen, bxtca, 2 * bdx, _16), _16,\n            scale(scale(4, aa, bdxtail, _8), _8, cdy, _16b), _16b,\n            scale(scale(4, cc, bdxtail, _8), _8, -ady, _16c), _16c, _32, _48), _48);\n    }\n    if (bdytail !== 0) {\n        bytcalen = scale(4, ca, bdytail, bytca);\n        finlen = finadd(finlen, sum_three(\n            scale(bytcalen, bytca, 2 * bdy, _16), _16,\n            scale(scale(4, cc, bdytail, _8), _8, adx, _16b), _16b,\n            scale(scale(4, aa, bdytail, _8), _8, -cdx, _16c), _16c, _32, _48), _48);\n    }\n    if (cdxtail !== 0) {\n        cxtablen = scale(4, ab, cdxtail, cxtab);\n        finlen = finadd(finlen, sum_three(\n            scale(cxtablen, cxtab, 2 * cdx, _16), _16,\n            scale(scale(4, bb, cdxtail, _8), _8, ady, _16b), _16b,\n            scale(scale(4, aa, cdxtail, _8), _8, -bdy, _16c), _16c, _32, _48), _48);\n    }\n    if (cdytail !== 0) {\n        cytablen = scale(4, ab, cdytail, cytab);\n        finlen = finadd(finlen, sum_three(\n            scale(cytablen, cytab, 2 * cdy, _16), _16,\n            scale(scale(4, aa, cdytail, _8), _8, bdx, _16b), _16b,\n            scale(scale(4, bb, cdytail, _8), _8, -adx, _16c), _16c, _32, _48), _48);\n    }\n\n    if (adxtail !== 0 || adytail !== 0) {\n        if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {\n            s1 = bdxtail * cdy;\n            c = splitter * bdxtail;\n            ahi = c - (c - bdxtail);\n            alo = bdxtail - ahi;\n            c = splitter * cdy;\n            bhi = c - (c - cdy);\n            blo = cdy - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = bdx * cdytail;\n            c = splitter * bdx;\n            ahi = c - (c - bdx);\n            alo = bdx - ahi;\n            c = splitter * cdytail;\n            bhi = c - (c - cdytail);\n            blo = cdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            u[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            u[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            u[3] = u3;\n            s1 = cdxtail * -bdy;\n            c = splitter * cdxtail;\n            ahi = c - (c - cdxtail);\n            alo = cdxtail - ahi;\n            c = splitter * -bdy;\n            bhi = c - (c - -bdy);\n            blo = -bdy - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = cdx * -bdytail;\n            c = splitter * cdx;\n            ahi = c - (c - cdx);\n            alo = cdx - ahi;\n            c = splitter * -bdytail;\n            bhi = c - (c - -bdytail);\n            blo = -bdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            v[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            v[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            v[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            v[3] = u3;\n            bctlen = sum(4, u, 4, v, bct);\n            s1 = bdxtail * cdytail;\n            c = splitter * bdxtail;\n            ahi = c - (c - bdxtail);\n            alo = bdxtail - ahi;\n            c = splitter * cdytail;\n            bhi = c - (c - cdytail);\n            blo = cdytail - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = cdxtail * bdytail;\n            c = splitter * cdxtail;\n            ahi = c - (c - cdxtail);\n            alo = cdxtail - ahi;\n            c = splitter * bdytail;\n            bhi = c - (c - bdytail);\n            blo = bdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 - t0;\n            bvirt = s0 - _i;\n            bctt[0] = s0 - (_i + bvirt) + (bvirt - t0);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 - t1;\n            bvirt = _0 - _i;\n            bctt[1] = _0 - (_i + bvirt) + (bvirt - t1);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            bctt[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            bctt[3] = u3;\n            bcttlen = 4;\n        } else {\n            bct[0] = 0;\n            bctlen = 1;\n            bctt[0] = 0;\n            bcttlen = 1;\n        }\n        if (adxtail !== 0) {\n            const len = scale(bctlen, bct, adxtail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(axtbclen, axtbc, adxtail, _16), _16,\n                scale(len, _16c, 2 * adx, _32), _32, _48), _48);\n\n            const len2 = scale(bcttlen, bctt, adxtail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * adx, _16), _16,\n                scale(len2, _8, adxtail, _16b), _16b,\n                scale(len, _16c, adxtail, _32), _32, _32b, _64), _64);\n\n            if (bdytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, cc, adxtail, _8), _8, bdytail, _16), _16);\n            }\n            if (cdytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, bb, -adxtail, _8), _8, cdytail, _16), _16);\n            }\n        }\n        if (adytail !== 0) {\n            const len = scale(bctlen, bct, adytail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(aytbclen, aytbc, adytail, _16), _16,\n                scale(len, _16c, 2 * ady, _32), _32, _48), _48);\n\n            const len2 = scale(bcttlen, bctt, adytail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * ady, _16), _16,\n                scale(len2, _8, adytail, _16b), _16b,\n                scale(len, _16c, adytail, _32), _32, _32b, _64), _64);\n        }\n    }\n    if (bdxtail !== 0 || bdytail !== 0) {\n        if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {\n            s1 = cdxtail * ady;\n            c = splitter * cdxtail;\n            ahi = c - (c - cdxtail);\n            alo = cdxtail - ahi;\n            c = splitter * ady;\n            bhi = c - (c - ady);\n            blo = ady - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = cdx * adytail;\n            c = splitter * cdx;\n            ahi = c - (c - cdx);\n            alo = cdx - ahi;\n            c = splitter * adytail;\n            bhi = c - (c - adytail);\n            blo = adytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            u[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            u[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            u[3] = u3;\n            n1 = -cdy;\n            n0 = -cdytail;\n            s1 = adxtail * n1;\n            c = splitter * adxtail;\n            ahi = c - (c - adxtail);\n            alo = adxtail - ahi;\n            c = splitter * n1;\n            bhi = c - (c - n1);\n            blo = n1 - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = adx * n0;\n            c = splitter * adx;\n            ahi = c - (c - adx);\n            alo = adx - ahi;\n            c = splitter * n0;\n            bhi = c - (c - n0);\n            blo = n0 - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            v[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            v[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            v[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            v[3] = u3;\n            catlen = sum(4, u, 4, v, cat);\n            s1 = cdxtail * adytail;\n            c = splitter * cdxtail;\n            ahi = c - (c - cdxtail);\n            alo = cdxtail - ahi;\n            c = splitter * adytail;\n            bhi = c - (c - adytail);\n            blo = adytail - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = adxtail * cdytail;\n            c = splitter * adxtail;\n            ahi = c - (c - adxtail);\n            alo = adxtail - ahi;\n            c = splitter * cdytail;\n            bhi = c - (c - cdytail);\n            blo = cdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 - t0;\n            bvirt = s0 - _i;\n            catt[0] = s0 - (_i + bvirt) + (bvirt - t0);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 - t1;\n            bvirt = _0 - _i;\n            catt[1] = _0 - (_i + bvirt) + (bvirt - t1);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            catt[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            catt[3] = u3;\n            cattlen = 4;\n        } else {\n            cat[0] = 0;\n            catlen = 1;\n            catt[0] = 0;\n            cattlen = 1;\n        }\n        if (bdxtail !== 0) {\n            const len = scale(catlen, cat, bdxtail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(bxtcalen, bxtca, bdxtail, _16), _16,\n                scale(len, _16c, 2 * bdx, _32), _32, _48), _48);\n\n            const len2 = scale(cattlen, catt, bdxtail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * bdx, _16), _16,\n                scale(len2, _8, bdxtail, _16b), _16b,\n                scale(len, _16c, bdxtail, _32), _32, _32b, _64), _64);\n\n            if (cdytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, aa, bdxtail, _8), _8, cdytail, _16), _16);\n            }\n            if (adytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, cc, -bdxtail, _8), _8, adytail, _16), _16);\n            }\n        }\n        if (bdytail !== 0) {\n            const len = scale(catlen, cat, bdytail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(bytcalen, bytca, bdytail, _16), _16,\n                scale(len, _16c, 2 * bdy, _32), _32, _48), _48);\n\n            const len2 = scale(cattlen, catt, bdytail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * bdy, _16), _16,\n                scale(len2, _8, bdytail, _16b), _16b,\n                scale(len, _16c, bdytail, _32), _32,  _32b, _64), _64);\n        }\n    }\n    if (cdxtail !== 0 || cdytail !== 0) {\n        if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {\n            s1 = adxtail * bdy;\n            c = splitter * adxtail;\n            ahi = c - (c - adxtail);\n            alo = adxtail - ahi;\n            c = splitter * bdy;\n            bhi = c - (c - bdy);\n            blo = bdy - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = adx * bdytail;\n            c = splitter * adx;\n            ahi = c - (c - adx);\n            alo = adx - ahi;\n            c = splitter * bdytail;\n            bhi = c - (c - bdytail);\n            blo = bdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            u[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            u[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            u[3] = u3;\n            n1 = -ady;\n            n0 = -adytail;\n            s1 = bdxtail * n1;\n            c = splitter * bdxtail;\n            ahi = c - (c - bdxtail);\n            alo = bdxtail - ahi;\n            c = splitter * n1;\n            bhi = c - (c - n1);\n            blo = n1 - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = bdx * n0;\n            c = splitter * bdx;\n            ahi = c - (c - bdx);\n            alo = bdx - ahi;\n            c = splitter * n0;\n            bhi = c - (c - n0);\n            blo = n0 - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            v[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            v[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            v[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            v[3] = u3;\n            abtlen = sum(4, u, 4, v, abt);\n            s1 = adxtail * bdytail;\n            c = splitter * adxtail;\n            ahi = c - (c - adxtail);\n            alo = adxtail - ahi;\n            c = splitter * bdytail;\n            bhi = c - (c - bdytail);\n            blo = bdytail - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = bdxtail * adytail;\n            c = splitter * bdxtail;\n            ahi = c - (c - bdxtail);\n            alo = bdxtail - ahi;\n            c = splitter * adytail;\n            bhi = c - (c - adytail);\n            blo = adytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 - t0;\n            bvirt = s0 - _i;\n            abtt[0] = s0 - (_i + bvirt) + (bvirt - t0);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 - t1;\n            bvirt = _0 - _i;\n            abtt[1] = _0 - (_i + bvirt) + (bvirt - t1);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            abtt[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            abtt[3] = u3;\n            abttlen = 4;\n        } else {\n            abt[0] = 0;\n            abtlen = 1;\n            abtt[0] = 0;\n            abttlen = 1;\n        }\n        if (cdxtail !== 0) {\n            const len = scale(abtlen, abt, cdxtail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(cxtablen, cxtab, cdxtail, _16), _16,\n                scale(len, _16c, 2 * cdx, _32), _32, _48), _48);\n\n            const len2 = scale(abttlen, abtt, cdxtail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * cdx, _16), _16,\n                scale(len2, _8, cdxtail, _16b), _16b,\n                scale(len, _16c, cdxtail, _32), _32, _32b, _64), _64);\n\n            if (adytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, bb, cdxtail, _8), _8, adytail, _16), _16);\n            }\n            if (bdytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, aa, -cdxtail, _8), _8, bdytail, _16), _16);\n            }\n        }\n        if (cdytail !== 0) {\n            const len = scale(abtlen, abt, cdytail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(cytablen, cytab, cdytail, _16), _16,\n                scale(len, _16c, 2 * cdy, _32), _32, _48), _48);\n\n            const len2 = scale(abttlen, abtt, cdytail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * cdy, _16), _16,\n                scale(len2, _8, cdytail, _16b), _16b,\n                scale(len, _16c, cdytail, _32), _32, _32b, _64), _64);\n        }\n    }\n\n    return fin[finlen - 1];\n}\n\nexport function incircle(ax, ay, bx, by, cx, cy, dx, dy) {\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n\n    const bdxcdy = bdx * cdy;\n    const cdxbdy = cdx * bdy;\n    const alift = adx * adx + ady * ady;\n\n    const cdxady = cdx * ady;\n    const adxcdy = adx * cdy;\n    const blift = bdx * bdx + bdy * bdy;\n\n    const adxbdy = adx * bdy;\n    const bdxady = bdx * ady;\n    const clift = cdx * cdx + cdy * cdy;\n\n    const det =\n        alift * (bdxcdy - cdxbdy) +\n        blift * (cdxady - adxcdy) +\n        clift * (adxbdy - bdxady);\n\n    const permanent =\n        (Math.abs(bdxcdy) + Math.abs(cdxbdy)) * alift +\n        (Math.abs(cdxady) + Math.abs(adxcdy)) * blift +\n        (Math.abs(adxbdy) + Math.abs(bdxady)) * clift;\n\n    const errbound = iccerrboundA * permanent;\n\n    if (det > errbound || -det > errbound) {\n        return det;\n    }\n    return incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent);\n}\n\nexport function incirclefast(ax, ay, bx, by, cx, cy, dx, dy) {\n    const adx = ax - dx;\n    const ady = ay - dy;\n    const bdx = bx - dx;\n    const bdy = by - dy;\n    const cdx = cx - dx;\n    const cdy = cy - dy;\n\n    const abdet = adx * bdy - bdx * ady;\n    const bcdet = bdx * cdy - cdx * bdy;\n    const cadet = cdx * ady - adx * cdy;\n    const alift = adx * adx + ady * ady;\n    const blift = bdx * bdx + bdy * bdy;\n    const clift = cdx * cdx + cdy * cdy;\n\n    return alift * bcdet + blift * cadet + clift * abdet;\n}\n","import {epsilon, splitter, resulterrbound, estimate, vec, sum, sum_three, scale, negate} from './util.js';\n\nconst isperrboundA = (16 + 224 * epsilon) * epsilon;\nconst isperrboundB = (5 + 72 * epsilon) * epsilon;\nconst isperrboundC = (71 + 1408 * epsilon) * epsilon * epsilon;\n\nconst ab = vec(4);\nconst bc = vec(4);\nconst cd = vec(4);\nconst de = vec(4);\nconst ea = vec(4);\nconst ac = vec(4);\nconst bd = vec(4);\nconst ce = vec(4);\nconst da = vec(4);\nconst eb = vec(4);\n\nconst abc = vec(24);\nconst bcd = vec(24);\nconst cde = vec(24);\nconst dea = vec(24);\nconst eab = vec(24);\nconst abd = vec(24);\nconst bce = vec(24);\nconst cda = vec(24);\nconst deb = vec(24);\nconst eac = vec(24);\n\nconst adet = vec(1152);\nconst bdet = vec(1152);\nconst cdet = vec(1152);\nconst ddet = vec(1152);\nconst edet = vec(1152);\nconst abdet = vec(2304);\nconst cddet = vec(2304);\nconst cdedet = vec(3456);\nconst deter = vec(5760);\n\nconst _8 = vec(8);\nconst _8b = vec(8);\nconst _8c = vec(8);\nconst _16 = vec(16);\nconst _24 = vec(24);\nconst _48 = vec(48);\nconst _48b = vec(48);\nconst _96 = vec(96);\nconst _192 = vec(192);\nconst _384x = vec(384);\nconst _384y = vec(384);\nconst _384z = vec(384);\nconst _768 = vec(768);\n\nfunction sum_three_scale(a, b, c, az, bz, cz, out) {\n    return sum_three(\n        scale(4, a, az, _8), _8,\n        scale(4, b, bz, _8b), _8b,\n        scale(4, c, cz, _8c), _8c, _16, out);\n}\n\nfunction liftexact(alen, a, blen, b, clen, c, dlen, d, x, y, z, out) {\n    const len = sum(\n        sum(alen, a, blen, b, _48), _48,\n        negate(sum(clen, c, dlen, d, _48b), _48b), _48b, _96);\n\n    return sum_three(\n        scale(scale(len, _96, x, _192), _192, x, _384x), _384x,\n        scale(scale(len, _96, y, _192), _192, y, _384y), _384y,\n        scale(scale(len, _96, z, _192), _192, z, _384z), _384z, _768, out);\n}\n\nfunction insphereexact(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez) {\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n    s1 = ax * by;\n    c = splitter * ax;\n    ahi = c - (c - ax);\n    alo = ax - ahi;\n    c = splitter * by;\n    bhi = c - (c - by);\n    blo = by - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bx * ay;\n    c = splitter * bx;\n    ahi = c - (c - bx);\n    alo = bx - ahi;\n    c = splitter * ay;\n    bhi = c - (c - ay);\n    blo = ay - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ab[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ab[3] = u3;\n    s1 = bx * cy;\n    c = splitter * bx;\n    ahi = c - (c - bx);\n    alo = bx - ahi;\n    c = splitter * cy;\n    bhi = c - (c - cy);\n    blo = cy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cx * by;\n    c = splitter * cx;\n    ahi = c - (c - cx);\n    alo = cx - ahi;\n    c = splitter * by;\n    bhi = c - (c - by);\n    blo = by - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    bc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    bc[3] = u3;\n    s1 = cx * dy;\n    c = splitter * cx;\n    ahi = c - (c - cx);\n    alo = cx - ahi;\n    c = splitter * dy;\n    bhi = c - (c - dy);\n    blo = dy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = dx * cy;\n    c = splitter * dx;\n    ahi = c - (c - dx);\n    alo = dx - ahi;\n    c = splitter * cy;\n    bhi = c - (c - cy);\n    blo = cy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    cd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    cd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    cd[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    cd[3] = u3;\n    s1 = dx * ey;\n    c = splitter * dx;\n    ahi = c - (c - dx);\n    alo = dx - ahi;\n    c = splitter * ey;\n    bhi = c - (c - ey);\n    blo = ey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = ex * dy;\n    c = splitter * ex;\n    ahi = c - (c - ex);\n    alo = ex - ahi;\n    c = splitter * dy;\n    bhi = c - (c - dy);\n    blo = dy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    de[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    de[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    de[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    de[3] = u3;\n    s1 = ex * ay;\n    c = splitter * ex;\n    ahi = c - (c - ex);\n    alo = ex - ahi;\n    c = splitter * ay;\n    bhi = c - (c - ay);\n    blo = ay - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = ax * ey;\n    c = splitter * ax;\n    ahi = c - (c - ax);\n    alo = ax - ahi;\n    c = splitter * ey;\n    bhi = c - (c - ey);\n    blo = ey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ea[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ea[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ea[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ea[3] = u3;\n    s1 = ax * cy;\n    c = splitter * ax;\n    ahi = c - (c - ax);\n    alo = ax - ahi;\n    c = splitter * cy;\n    bhi = c - (c - cy);\n    blo = cy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cx * ay;\n    c = splitter * cx;\n    ahi = c - (c - cx);\n    alo = cx - ahi;\n    c = splitter * ay;\n    bhi = c - (c - ay);\n    blo = ay - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ac[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ac[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ac[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ac[3] = u3;\n    s1 = bx * dy;\n    c = splitter * bx;\n    ahi = c - (c - bx);\n    alo = bx - ahi;\n    c = splitter * dy;\n    bhi = c - (c - dy);\n    blo = dy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = dx * by;\n    c = splitter * dx;\n    ahi = c - (c - dx);\n    alo = dx - ahi;\n    c = splitter * by;\n    bhi = c - (c - by);\n    blo = by - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    bd[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    bd[3] = u3;\n    s1 = cx * ey;\n    c = splitter * cx;\n    ahi = c - (c - cx);\n    alo = cx - ahi;\n    c = splitter * ey;\n    bhi = c - (c - ey);\n    blo = ey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = ex * cy;\n    c = splitter * ex;\n    ahi = c - (c - ex);\n    alo = ex - ahi;\n    c = splitter * cy;\n    bhi = c - (c - cy);\n    blo = cy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ce[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ce[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ce[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ce[3] = u3;\n    s1 = dx * ay;\n    c = splitter * dx;\n    ahi = c - (c - dx);\n    alo = dx - ahi;\n    c = splitter * ay;\n    bhi = c - (c - ay);\n    blo = ay - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = ax * dy;\n    c = splitter * ax;\n    ahi = c - (c - ax);\n    alo = ax - ahi;\n    c = splitter * dy;\n    bhi = c - (c - dy);\n    blo = dy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    da[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    da[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    da[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    da[3] = u3;\n    s1 = ex * by;\n    c = splitter * ex;\n    ahi = c - (c - ex);\n    alo = ex - ahi;\n    c = splitter * by;\n    bhi = c - (c - by);\n    blo = by - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bx * ey;\n    c = splitter * bx;\n    ahi = c - (c - bx);\n    alo = bx - ahi;\n    c = splitter * ey;\n    bhi = c - (c - ey);\n    blo = ey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    eb[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    eb[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    eb[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    eb[3] = u3;\n\n    const abclen = sum_three_scale(ab, bc, ac, cz, az, -bz, abc);\n    const bcdlen = sum_three_scale(bc, cd, bd, dz, bz, -cz, bcd);\n    const cdelen = sum_three_scale(cd, de, ce, ez, cz, -dz, cde);\n    const dealen = sum_three_scale(de, ea, da, az, dz, -ez, dea);\n    const eablen = sum_three_scale(ea, ab, eb, bz, ez, -az, eab);\n    const abdlen = sum_three_scale(ab, bd, da, dz, az, bz, abd);\n    const bcelen = sum_three_scale(bc, ce, eb, ez, bz, cz, bce);\n    const cdalen = sum_three_scale(cd, da, ac, az, cz, dz, cda);\n    const deblen = sum_three_scale(de, eb, bd, bz, dz, ez, deb);\n    const eaclen = sum_three_scale(ea, ac, ce, cz, ez, az, eac);\n\n    const deterlen = sum_three(\n        liftexact(cdelen, cde, bcelen, bce, deblen, deb, bcdlen, bcd, ax, ay, az, adet), adet,\n        liftexact(dealen, dea, cdalen, cda, eaclen, eac, cdelen, cde, bx, by, bz, bdet), bdet,\n        sum_three(\n            liftexact(eablen, eab, deblen, deb, abdlen, abd, dealen, dea, cx, cy, cz, cdet), cdet,\n            liftexact(abclen, abc, eaclen, eac, bcelen, bce, eablen, eab, dx, dy, dz, ddet), ddet,\n            liftexact(bcdlen, bcd, abdlen, abd, cdalen, cda, abclen, abc, ex, ey, ez, edet), edet, cddet, cdedet), cdedet, abdet, deter);\n\n    return deter[deterlen - 1];\n}\n\nconst xdet = vec(96);\nconst ydet = vec(96);\nconst zdet = vec(96);\nconst fin = vec(1152);\n\nfunction liftadapt(a, b, c, az, bz, cz, x, y, z, out) {\n    const len = sum_three_scale(a, b, c, az, bz, cz, _24);\n    return sum_three(\n        scale(scale(len, _24, x, _48), _48, x, xdet), xdet,\n        scale(scale(len, _24, y, _48), _48, y, ydet), ydet,\n        scale(scale(len, _24, z, _48), _48, z, zdet), zdet, _192, out);\n}\n\nfunction insphereadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez, permanent) {\n    let ab3, bc3, cd3, da3, ac3, bd3;\n\n    let aextail, bextail, cextail, dextail;\n    let aeytail, beytail, ceytail, deytail;\n    let aeztail, beztail, ceztail, deztail;\n\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0;\n\n    const aex = ax - ex;\n    const bex = bx - ex;\n    const cex = cx - ex;\n    const dex = dx - ex;\n    const aey = ay - ey;\n    const bey = by - ey;\n    const cey = cy - ey;\n    const dey = dy - ey;\n    const aez = az - ez;\n    const bez = bz - ez;\n    const cez = cz - ez;\n    const dez = dz - ez;\n\n    s1 = aex * bey;\n    c = splitter * aex;\n    ahi = c - (c - aex);\n    alo = aex - ahi;\n    c = splitter * bey;\n    bhi = c - (c - bey);\n    blo = bey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bex * aey;\n    c = splitter * bex;\n    ahi = c - (c - bex);\n    alo = bex - ahi;\n    c = splitter * aey;\n    bhi = c - (c - aey);\n    blo = aey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    ab3 = _j + _i;\n    bvirt = ab3 - _j;\n    ab[2] = _j - (ab3 - bvirt) + (_i - bvirt);\n    ab[3] = ab3;\n    s1 = bex * cey;\n    c = splitter * bex;\n    ahi = c - (c - bex);\n    alo = bex - ahi;\n    c = splitter * cey;\n    bhi = c - (c - cey);\n    blo = cey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cex * bey;\n    c = splitter * cex;\n    ahi = c - (c - cex);\n    alo = cex - ahi;\n    c = splitter * bey;\n    bhi = c - (c - bey);\n    blo = bey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    bc3 = _j + _i;\n    bvirt = bc3 - _j;\n    bc[2] = _j - (bc3 - bvirt) + (_i - bvirt);\n    bc[3] = bc3;\n    s1 = cex * dey;\n    c = splitter * cex;\n    ahi = c - (c - cex);\n    alo = cex - ahi;\n    c = splitter * dey;\n    bhi = c - (c - dey);\n    blo = dey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = dex * cey;\n    c = splitter * dex;\n    ahi = c - (c - dex);\n    alo = dex - ahi;\n    c = splitter * cey;\n    bhi = c - (c - cey);\n    blo = cey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    cd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    cd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    cd3 = _j + _i;\n    bvirt = cd3 - _j;\n    cd[2] = _j - (cd3 - bvirt) + (_i - bvirt);\n    cd[3] = cd3;\n    s1 = dex * aey;\n    c = splitter * dex;\n    ahi = c - (c - dex);\n    alo = dex - ahi;\n    c = splitter * aey;\n    bhi = c - (c - aey);\n    blo = aey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = aex * dey;\n    c = splitter * aex;\n    ahi = c - (c - aex);\n    alo = aex - ahi;\n    c = splitter * dey;\n    bhi = c - (c - dey);\n    blo = dey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    da[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    da[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    da3 = _j + _i;\n    bvirt = da3 - _j;\n    da[2] = _j - (da3 - bvirt) + (_i - bvirt);\n    da[3] = da3;\n    s1 = aex * cey;\n    c = splitter * aex;\n    ahi = c - (c - aex);\n    alo = aex - ahi;\n    c = splitter * cey;\n    bhi = c - (c - cey);\n    blo = cey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cex * aey;\n    c = splitter * cex;\n    ahi = c - (c - cex);\n    alo = cex - ahi;\n    c = splitter * aey;\n    bhi = c - (c - aey);\n    blo = aey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ac[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ac[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    ac3 = _j + _i;\n    bvirt = ac3 - _j;\n    ac[2] = _j - (ac3 - bvirt) + (_i - bvirt);\n    ac[3] = ac3;\n    s1 = bex * dey;\n    c = splitter * bex;\n    ahi = c - (c - bex);\n    alo = bex - ahi;\n    c = splitter * dey;\n    bhi = c - (c - dey);\n    blo = dey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = dex * bey;\n    c = splitter * dex;\n    ahi = c - (c - dex);\n    alo = dex - ahi;\n    c = splitter * bey;\n    bhi = c - (c - bey);\n    blo = bey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    bd3 = _j + _i;\n    bvirt = bd3 - _j;\n    bd[2] = _j - (bd3 - bvirt) + (_i - bvirt);\n    bd[3] = bd3;\n\n    const finlen = sum(\n        sum(\n            negate(liftadapt(bc, cd, bd, dez, bez, -cez, aex, aey, aez, adet), adet), adet,\n            liftadapt(cd, da, ac, aez, cez, dez, bex, bey, bez, bdet), bdet, abdet), abdet,\n        sum(\n            negate(liftadapt(da, ab, bd, bez, dez, aez, cex, cey, cez, cdet), cdet), cdet,\n            liftadapt(ab, bc, ac, cez, aez, -bez, dex, dey, dez, ddet), ddet, cddet), cddet, fin);\n\n    let det = estimate(finlen, fin);\n    let errbound = isperrboundB * permanent;\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    bvirt = ax - aex;\n    aextail = ax - (aex + bvirt) + (bvirt - ex);\n    bvirt = ay - aey;\n    aeytail = ay - (aey + bvirt) + (bvirt - ey);\n    bvirt = az - aez;\n    aeztail = az - (aez + bvirt) + (bvirt - ez);\n    bvirt = bx - bex;\n    bextail = bx - (bex + bvirt) + (bvirt - ex);\n    bvirt = by - bey;\n    beytail = by - (bey + bvirt) + (bvirt - ey);\n    bvirt = bz - bez;\n    beztail = bz - (bez + bvirt) + (bvirt - ez);\n    bvirt = cx - cex;\n    cextail = cx - (cex + bvirt) + (bvirt - ex);\n    bvirt = cy - cey;\n    ceytail = cy - (cey + bvirt) + (bvirt - ey);\n    bvirt = cz - cez;\n    ceztail = cz - (cez + bvirt) + (bvirt - ez);\n    bvirt = dx - dex;\n    dextail = dx - (dex + bvirt) + (bvirt - ex);\n    bvirt = dy - dey;\n    deytail = dy - (dey + bvirt) + (bvirt - ey);\n    bvirt = dz - dez;\n    deztail = dz - (dez + bvirt) + (bvirt - ez);\n    if (aextail === 0 && aeytail === 0 && aeztail === 0 &&\n        bextail === 0 && beytail === 0 && beztail === 0 &&\n        cextail === 0 && ceytail === 0 && ceztail === 0 &&\n        dextail === 0 && deytail === 0 && deztail === 0) {\n        return det;\n    }\n\n    errbound = isperrboundC * permanent + resulterrbound * Math.abs(det);\n\n    const abeps = (aex * beytail + bey * aextail) - (aey * bextail + bex * aeytail);\n    const bceps = (bex * ceytail + cey * bextail) - (bey * cextail + cex * beytail);\n    const cdeps = (cex * deytail + dey * cextail) - (cey * dextail + dex * ceytail);\n    const daeps = (dex * aeytail + aey * dextail) - (dey * aextail + aex * deytail);\n    const aceps = (aex * ceytail + cey * aextail) - (aey * cextail + cex * aeytail);\n    const bdeps = (bex * deytail + dey * bextail) - (bey * dextail + dex * beytail);\n    det +=\n        (((bex * bex + bey * bey + bez * bez) * ((cez * daeps + dez * aceps + aez * cdeps) +\n        (ceztail * da3 + deztail * ac3 + aeztail * cd3)) + (dex * dex + dey * dey + dez * dez) *\n        ((aez * bceps - bez * aceps + cez * abeps) + (aeztail * bc3 - beztail * ac3 + ceztail * ab3))) -\n        ((aex * aex + aey * aey + aez * aez) * ((bez * cdeps - cez * bdeps + dez * bceps) +\n        (beztail * cd3 - ceztail * bd3 + deztail * bc3)) + (cex * cex + cey * cey + cez * cez) *\n        ((dez * abeps + aez * bdeps + bez * daeps) + (deztail * ab3 + aeztail * bd3 + beztail * da3)))) +\n        2 * (((bex * bextail + bey * beytail + bez * beztail) * (cez * da3 + dez * ac3 + aez * cd3) +\n        (dex * dextail + dey * deytail + dez * deztail) * (aez * bc3 - bez * ac3 + cez * ab3)) -\n        ((aex * aextail + aey * aeytail + aez * aeztail) * (bez * cd3 - cez * bd3 + dez * bc3) +\n        (cex * cextail + cey * ceytail + cez * ceztail) * (dez * ab3 + aez * bd3 + bez * da3)));\n\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    return insphereexact(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez);\n}\n\nexport function insphere(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez) {\n    const aex = ax - ex;\n    const bex = bx - ex;\n    const cex = cx - ex;\n    const dex = dx - ex;\n    const aey = ay - ey;\n    const bey = by - ey;\n    const cey = cy - ey;\n    const dey = dy - ey;\n    const aez = az - ez;\n    const bez = bz - ez;\n    const cez = cz - ez;\n    const dez = dz - ez;\n\n    const aexbey = aex * bey;\n    const bexaey = bex * aey;\n    const ab = aexbey - bexaey;\n    const bexcey = bex * cey;\n    const cexbey = cex * bey;\n    const bc = bexcey - cexbey;\n    const cexdey = cex * dey;\n    const dexcey = dex * cey;\n    const cd = cexdey - dexcey;\n    const dexaey = dex * aey;\n    const aexdey = aex * dey;\n    const da = dexaey - aexdey;\n    const aexcey = aex * cey;\n    const cexaey = cex * aey;\n    const ac = aexcey - cexaey;\n    const bexdey = bex * dey;\n    const dexbey = dex * bey;\n    const bd = bexdey - dexbey;\n\n    const alift = aex * aex + aey * aey + aez * aez;\n    const blift = bex * bex + bey * bey + bez * bez;\n    const clift = cex * cex + cey * cey + cez * cez;\n    const dlift = dex * dex + dey * dey + dez * dez;\n\n    const det =\n        (clift * (dez * ab + aez * bd + bez * da) - dlift * (aez * bc - bez * ac + cez * ab)) +\n        (alift * (bez * cd - cez * bd + dez * bc) - blift * (cez * da + dez * ac + aez * cd));\n\n    const aezplus = Math.abs(aez);\n    const bezplus = Math.abs(bez);\n    const cezplus = Math.abs(cez);\n    const dezplus = Math.abs(dez);\n    const aexbeyplus = Math.abs(aexbey) + Math.abs(bexaey);\n    const bexceyplus = Math.abs(bexcey) + Math.abs(cexbey);\n    const cexdeyplus = Math.abs(cexdey) + Math.abs(dexcey);\n    const dexaeyplus = Math.abs(dexaey) + Math.abs(aexdey);\n    const aexceyplus = Math.abs(aexcey) + Math.abs(cexaey);\n    const bexdeyplus = Math.abs(bexdey) + Math.abs(dexbey);\n    const permanent =\n        (cexdeyplus * bezplus + bexdeyplus * cezplus + bexceyplus * dezplus) * alift +\n        (dexaeyplus * cezplus + aexceyplus * dezplus + cexdeyplus * aezplus) * blift +\n        (aexbeyplus * dezplus + bexdeyplus * aezplus + dexaeyplus * bezplus) * clift +\n        (bexceyplus * aezplus + aexceyplus * bezplus + aexbeyplus * cezplus) * dlift;\n\n    const errbound = isperrboundA * permanent;\n    if (det > errbound || -det > errbound) {\n        return det;\n    }\n    return -insphereadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez, permanent);\n}\n\nexport function inspherefast(pax, pay, paz, pbx, pby, pbz, pcx, pcy, pcz, pdx, pdy, pdz, pex, pey, pez) {\n    const aex = pax - pex;\n    const bex = pbx - pex;\n    const cex = pcx - pex;\n    const dex = pdx - pex;\n    const aey = pay - pey;\n    const bey = pby - pey;\n    const cey = pcy - pey;\n    const dey = pdy - pey;\n    const aez = paz - pez;\n    const bez = pbz - pez;\n    const cez = pcz - pez;\n    const dez = pdz - pez;\n\n    const ab = aex * bey - bex * aey;\n    const bc = bex * cey - cex * bey;\n    const cd = cex * dey - dex * cey;\n    const da = dex * aey - aex * dey;\n    const ac = aex * cey - cex * aey;\n    const bd = bex * dey - dex * bey;\n\n    const abc = aez * bc - bez * ac + cez * ab;\n    const bcd = bez * cd - cez * bd + dez * bc;\n    const cda = cez * da + dez * ac + aez * cd;\n    const dab = dez * ab + aez * bd + bez * da;\n\n    const alift = aex * aex + aey * aey + aez * aez;\n    const blift = bex * bex + bey * bey + bez * bez;\n    const clift = cex * cex + cey * cey + cez * cez;\n    const dlift = dex * dex + dey * dey + dez * dez;\n\n    return (clift * dab - dlift * abc) + (alift * bcd - blift * cda);\n}\n","export default function(d) {\n  const x = +this._x.call(null, d),\n      y = +this._y.call(null, d);\n  return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n  if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n  var parent,\n      node = tree._root,\n      leaf = {data: d},\n      x0 = tree._x0,\n      y0 = tree._y0,\n      x1 = tree._x1,\n      y1 = tree._y1,\n      xm,\n      ym,\n      xp,\n      yp,\n      right,\n      bottom,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return tree._root = leaf, tree;\n\n  // Find the existing leaf for the new point, or add it.\n  while (node.length) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n  }\n\n  // Is the new point is exactly coincident with the existing point?\n  xp = +tree._x.call(null, node.data);\n  yp = +tree._y.call(null, node.data);\n  if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n  // Otherwise, split the leaf node until the old and new point are separated.\n  do {\n    parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n  } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n  return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n  var d, i, n = data.length,\n      x,\n      y,\n      xz = new Array(n),\n      yz = new Array(n),\n      x0 = Infinity,\n      y0 = Infinity,\n      x1 = -Infinity,\n      y1 = -Infinity;\n\n  // Compute the points and their extent.\n  for (i = 0; i < n; ++i) {\n    if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n    xz[i] = x;\n    yz[i] = y;\n    if (x < x0) x0 = x;\n    if (x > x1) x1 = x;\n    if (y < y0) y0 = y;\n    if (y > y1) y1 = y;\n  }\n\n  // If there were no (valid) points, abort.\n  if (x0 > x1 || y0 > y1) return this;\n\n  // Expand the tree to cover the new points.\n  this.cover(x0, y0).cover(x1, y1);\n\n  // Add the new points.\n  for (i = 0; i < n; ++i) {\n    add(this, xz[i], yz[i], data[i]);\n  }\n\n  return this;\n}\n","export default function(x, y) {\n  if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n  var x0 = this._x0,\n      y0 = this._y0,\n      x1 = this._x1,\n      y1 = this._y1;\n\n  // If the quadtree has no extent, initialize them.\n  // Integer extent are necessary so that if we later double the extent,\n  // the existing quadrant boundaries don’t change due to floating point error!\n  if (isNaN(x0)) {\n    x1 = (x0 = Math.floor(x)) + 1;\n    y1 = (y0 = Math.floor(y)) + 1;\n  }\n\n  // Otherwise, double repeatedly to cover.\n  else {\n    var z = x1 - x0 || 1,\n        node = this._root,\n        parent,\n        i;\n\n    while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n      i = (y < y0) << 1 | (x < x0);\n      parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n      switch (i) {\n        case 0: x1 = x0 + z, y1 = y0 + z; break;\n        case 1: x0 = x1 - z, y1 = y0 + z; break;\n        case 2: x1 = x0 + z, y0 = y1 - z; break;\n        case 3: x0 = x1 - z, y0 = y1 - z; break;\n      }\n    }\n\n    if (this._root && this._root.length) this._root = node;\n  }\n\n  this._x0 = x0;\n  this._y0 = y0;\n  this._x1 = x1;\n  this._y1 = y1;\n  return this;\n}\n","export default function() {\n  var data = [];\n  this.visit(function(node) {\n    if (!node.length) do data.push(node.data); while (node = node.next)\n  });\n  return data;\n}\n","export default function(_) {\n  return arguments.length\n      ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n      : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","export default function(node, x0, y0, x1, y1) {\n  this.node = node;\n  this.x0 = x0;\n  this.y0 = y0;\n  this.x1 = x1;\n  this.y1 = y1;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n  var data,\n      x0 = this._x0,\n      y0 = this._y0,\n      x1,\n      y1,\n      x2,\n      y2,\n      x3 = this._x1,\n      y3 = this._y1,\n      quads = [],\n      node = this._root,\n      q,\n      i;\n\n  if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n  if (radius == null) radius = Infinity;\n  else {\n    x0 = x - radius, y0 = y - radius;\n    x3 = x + radius, y3 = y + radius;\n    radius *= radius;\n  }\n\n  while (q = quads.pop()) {\n\n    // Stop searching if this quadrant can’t contain a closer node.\n    if (!(node = q.node)\n        || (x1 = q.x0) > x3\n        || (y1 = q.y0) > y3\n        || (x2 = q.x1) < x0\n        || (y2 = q.y1) < y0) continue;\n\n    // Bisect the current quadrant.\n    if (node.length) {\n      var xm = (x1 + x2) / 2,\n          ym = (y1 + y2) / 2;\n\n      quads.push(\n        new Quad(node[3], xm, ym, x2, y2),\n        new Quad(node[2], x1, ym, xm, y2),\n        new Quad(node[1], xm, y1, x2, ym),\n        new Quad(node[0], x1, y1, xm, ym)\n      );\n\n      // Visit the closest quadrant first.\n      if (i = (y >= ym) << 1 | (x >= xm)) {\n        q = quads[quads.length - 1];\n        quads[quads.length - 1] = quads[quads.length - 1 - i];\n        quads[quads.length - 1 - i] = q;\n      }\n    }\n\n    // Visit this point. (Visiting coincident points isn’t necessary!)\n    else {\n      var dx = x - +this._x.call(null, node.data),\n          dy = y - +this._y.call(null, node.data),\n          d2 = dx * dx + dy * dy;\n      if (d2 < radius) {\n        var d = Math.sqrt(radius = d2);\n        x0 = x - d, y0 = y - d;\n        x3 = x + d, y3 = y + d;\n        data = node.data;\n      }\n    }\n  }\n\n  return data;\n}\n","export default function(d) {\n  if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n  var parent,\n      node = this._root,\n      retainer,\n      previous,\n      next,\n      x0 = this._x0,\n      y0 = this._y0,\n      x1 = this._x1,\n      y1 = this._y1,\n      x,\n      y,\n      xm,\n      ym,\n      right,\n      bottom,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return this;\n\n  // Find the leaf node for the point.\n  // While descending, also retain the deepest parent with a non-removed sibling.\n  if (node.length) while (true) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n    if (!node.length) break;\n    if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n  }\n\n  // Find the point to remove.\n  while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n  if (next = node.next) delete node.next;\n\n  // If there are multiple coincident points, remove just the point.\n  if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n  // If this is the root point, remove it.\n  if (!parent) return this._root = next, this;\n\n  // Remove this leaf.\n  next ? parent[i] = next : delete parent[i];\n\n  // If the parent now contains exactly one leaf, collapse superfluous parents.\n  if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n      && node === (parent[3] || parent[2] || parent[1] || parent[0])\n      && !node.length) {\n    if (retainer) retainer[j] = node;\n    else this._root = node;\n  }\n\n  return this;\n}\n\nexport function removeAll(data) {\n  for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n  return this;\n}\n","export default function() {\n  return this._root;\n}\n","export default function() {\n  var size = 0;\n  this.visit(function(node) {\n    if (!node.length) do ++size; while (node = node.next)\n  });\n  return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n  var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n  if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n  while (q = quads.pop()) {\n    if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n      var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n    }\n  }\n  return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n  var quads = [], next = [], q;\n  if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n  while (q = quads.pop()) {\n    var node = q.node;\n    if (node.length) {\n      var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n    }\n    next.push(q);\n  }\n  while (q = next.pop()) {\n    callback(q.node, q.x0, q.y0, q.x1, q.y1);\n  }\n  return this;\n}\n","export function defaultX(d) {\n  return d[0];\n}\n\nexport default function(_) {\n  return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n  return d[1];\n}\n\nexport default function(_) {\n  return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n  var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n  return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n  this._x = x;\n  this._y = y;\n  this._x0 = x0;\n  this._y0 = y0;\n  this._x1 = x1;\n  this._y1 = y1;\n  this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n  var copy = {data: leaf.data}, next = copy;\n  while (leaf = leaf.next) next = next.next = {data: leaf.data};\n  return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n  var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n      node = this._root,\n      nodes,\n      child;\n\n  if (!node) return copy;\n\n  if (!node.length) return copy._root = leaf_copy(node), copy;\n\n  nodes = [{source: node, target: copy._root = new Array(4)}];\n  while (node = nodes.pop()) {\n    for (var i = 0; i < 4; ++i) {\n      if (child = node.source[i]) {\n        if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n        else node.target[i] = leaf_copy(child);\n      }\n    }\n  }\n\n  return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n  let s = 1;\n  return () => (s = (a * s + c) % m) / m;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nexport function x(d) {\n  return d.x;\n}\n\nexport function y(d) {\n  return d.y;\n}\n\nvar initialRadius = 10,\n    initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n  var simulation,\n      alpha = 1,\n      alphaMin = 0.001,\n      alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n      alphaTarget = 0,\n      velocityDecay = 0.6,\n      forces = new Map(),\n      stepper = timer(step),\n      event = dispatch(\"tick\", \"end\"),\n      random = lcg();\n\n  if (nodes == null) nodes = [];\n\n  function step() {\n    tick();\n    event.call(\"tick\", simulation);\n    if (alpha < alphaMin) {\n      stepper.stop();\n      event.call(\"end\", simulation);\n    }\n  }\n\n  function tick(iterations) {\n    var i, n = nodes.length, node;\n\n    if (iterations === undefined) iterations = 1;\n\n    for (var k = 0; k < iterations; ++k) {\n      alpha += (alphaTarget - alpha) * alphaDecay;\n\n      forces.forEach(function(force) {\n        force(alpha);\n      });\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        if (node.fx == null) node.x += node.vx *= velocityDecay;\n        else node.x = node.fx, node.vx = 0;\n        if (node.fy == null) node.y += node.vy *= velocityDecay;\n        else node.y = node.fy, node.vy = 0;\n      }\n    }\n\n    return simulation;\n  }\n\n  function initializeNodes() {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.index = i;\n      if (node.fx != null) node.x = node.fx;\n      if (node.fy != null) node.y = node.fy;\n      if (isNaN(node.x) || isNaN(node.y)) {\n        var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n        node.x = radius * Math.cos(angle);\n        node.y = radius * Math.sin(angle);\n      }\n      if (isNaN(node.vx) || isNaN(node.vy)) {\n        node.vx = node.vy = 0;\n      }\n    }\n  }\n\n  function initializeForce(force) {\n    if (force.initialize) force.initialize(nodes, random);\n    return force;\n  }\n\n  initializeNodes();\n\n  return simulation = {\n    tick: tick,\n\n    restart: function() {\n      return stepper.restart(step), simulation;\n    },\n\n    stop: function() {\n      return stepper.stop(), simulation;\n    },\n\n    nodes: function(_) {\n      return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n    },\n\n    alpha: function(_) {\n      return arguments.length ? (alpha = +_, simulation) : alpha;\n    },\n\n    alphaMin: function(_) {\n      return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n    },\n\n    alphaDecay: function(_) {\n      return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n    },\n\n    alphaTarget: function(_) {\n      return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n    },\n\n    velocityDecay: function(_) {\n      return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n    },\n\n    randomSource: function(_) {\n      return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n    },\n\n    force: function(name, _) {\n      return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n    },\n\n    find: function(x, y, radius) {\n      var i = 0,\n          n = nodes.length,\n          dx,\n          dy,\n          d2,\n          node,\n          closest;\n\n      if (radius == null) radius = Infinity;\n      else radius *= radius;\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        dx = x - node.x;\n        dy = y - node.y;\n        d2 = dx * dx + dy * dy;\n        if (d2 < radius) closest = node, radius = d2;\n      }\n\n      return closest;\n    },\n\n    on: function(name, _) {\n      return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n    }\n  };\n}\n","import constant from \"./constant.js\";\n\nexport default function(x) {\n  var strength = constant(0.1),\n      nodes,\n      strengths,\n      xz;\n\n  if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n  function force(alpha) {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length;\n    strengths = new Array(n);\n    xz = new Array(n);\n    for (i = 0; i < n; ++i) {\n      strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n  };\n\n  force.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n  };\n\n  return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(y) {\n  var strength = constant(0.1),\n      nodes,\n      strengths,\n      yz;\n\n  if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\n\n  function force(alpha) {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length;\n    strengths = new Array(n);\n    yz = new Array(n);\n    for (i = 0; i < n; ++i) {\n      strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n  };\n\n  force.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\n  };\n\n  return force;\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var hypot = Math.hypot;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n  return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n  if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n    streamGeometryType[geometry.type](geometry, stream);\n  }\n}\n\nvar streamObjectType = {\n  Feature: function(object, stream) {\n    streamGeometry(object.geometry, stream);\n  },\n  FeatureCollection: function(object, stream) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) streamGeometry(features[i].geometry, stream);\n  }\n};\n\nvar streamGeometryType = {\n  Sphere: function(object, stream) {\n    stream.sphere();\n  },\n  Point: function(object, stream) {\n    object = object.coordinates;\n    stream.point(object[0], object[1], object[2]);\n  },\n  MultiPoint: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n  },\n  LineString: function(object, stream) {\n    streamLine(object.coordinates, stream, 0);\n  },\n  MultiLineString: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamLine(coordinates[i], stream, 0);\n  },\n  Polygon: function(object, stream) {\n    streamPolygon(object.coordinates, stream);\n  },\n  MultiPolygon: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamPolygon(coordinates[i], stream);\n  },\n  GeometryCollection: function(object, stream) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) streamGeometry(geometries[i], stream);\n  }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n  var i = -1, n = coordinates.length - closed, coordinate;\n  stream.lineStart();\n  while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n  stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n  var i = -1, n = coordinates.length;\n  stream.polygonStart();\n  while (++i < n) streamLine(coordinates[i], stream, 1);\n  stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n  if (object && streamObjectType.hasOwnProperty(object.type)) {\n    streamObjectType[object.type](object, stream);\n  } else {\n    streamGeometry(object, stream);\n  }\n}\n","import {Adder} from \"d3-array\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nexport var areaRingSum = new Adder();\n\n// hello?\n\nvar areaSum = new Adder(),\n    lambda00,\n    phi00,\n    lambda0,\n    cosPhi0,\n    sinPhi0;\n\nexport var areaStream = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaRingSum = new Adder();\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    var areaRing = +areaRingSum;\n    areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n    this.lineStart = this.lineEnd = this.point = noop;\n  },\n  sphere: function() {\n    areaSum.add(tau);\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n  areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n  areaStream.point = areaPoint;\n  lambda00 = lambda, phi00 = phi;\n  lambda *= radians, phi *= radians;\n  lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n  // Spherical excess E for a spherical triangle with vertices: south pole,\n  // previous point, current point.  Uses a formula derived from Cagnoli’s\n  // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n  var dLambda = lambda - lambda0,\n      sdLambda = dLambda >= 0 ? 1 : -1,\n      adLambda = sdLambda * dLambda,\n      cosPhi = cos(phi),\n      sinPhi = sin(phi),\n      k = sinPhi0 * sinPhi,\n      u = cosPhi0 * cosPhi + k * cos(adLambda),\n      v = k * sdLambda * sin(adLambda);\n  areaRingSum.add(atan2(v, u));\n\n  // Advance the previous points.\n  lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n  areaSum = new Adder();\n  stream(object, areaStream);\n  return areaSum * 2;\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n  return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n  var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n  return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n  return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n  a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n  return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n  var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n  d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import {Adder} from \"d3-array\";\nimport {areaStream, areaRingSum} from \"./area.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport {abs, degrees, epsilon, radians} from \"./math.js\";\nimport stream from \"./stream.js\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n    lambda2, // previous lambda-coordinate\n    lambda00, phi00, // first point\n    p0, // previous 3D point\n    deltaSum,\n    ranges,\n    range;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: boundsLineStart,\n  lineEnd: boundsLineEnd,\n  polygonStart: function() {\n    boundsStream.point = boundsRingPoint;\n    boundsStream.lineStart = boundsRingStart;\n    boundsStream.lineEnd = boundsRingEnd;\n    deltaSum = new Adder();\n    areaStream.polygonStart();\n  },\n  polygonEnd: function() {\n    areaStream.polygonEnd();\n    boundsStream.point = boundsPoint;\n    boundsStream.lineStart = boundsLineStart;\n    boundsStream.lineEnd = boundsLineEnd;\n    if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n    else if (deltaSum > epsilon) phi1 = 90;\n    else if (deltaSum < -epsilon) phi0 = -90;\n    range[0] = lambda0, range[1] = lambda1;\n  },\n  sphere: function() {\n    lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n  }\n};\n\nfunction boundsPoint(lambda, phi) {\n  ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n  var p = cartesian([lambda * radians, phi * radians]);\n  if (p0) {\n    var normal = cartesianCross(p0, p),\n        equatorial = [normal[1], -normal[0], 0],\n        inflection = cartesianCross(equatorial, normal);\n    cartesianNormalizeInPlace(inflection);\n    inflection = spherical(inflection);\n    var delta = lambda - lambda2,\n        sign = delta > 0 ? 1 : -1,\n        lambdai = inflection[0] * degrees * sign,\n        phii,\n        antimeridian = abs(delta) > 180;\n    if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n      phii = inflection[1] * degrees;\n      if (phii > phi1) phi1 = phii;\n    } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n      phii = -inflection[1] * degrees;\n      if (phii < phi0) phi0 = phii;\n    } else {\n      if (phi < phi0) phi0 = phi;\n      if (phi > phi1) phi1 = phi;\n    }\n    if (antimeridian) {\n      if (lambda < lambda2) {\n        if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n      } else {\n        if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n      }\n    } else {\n      if (lambda1 >= lambda0) {\n        if (lambda < lambda0) lambda0 = lambda;\n        if (lambda > lambda1) lambda1 = lambda;\n      } else {\n        if (lambda > lambda2) {\n          if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n        } else {\n          if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n        }\n      }\n    }\n  } else {\n    ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n  }\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n  p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n  boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n  range[0] = lambda0, range[1] = lambda1;\n  boundsStream.point = boundsPoint;\n  p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n  if (p0) {\n    var delta = lambda - lambda2;\n    deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n  } else {\n    lambda00 = lambda, phi00 = phi;\n  }\n  areaStream.point(lambda, phi);\n  linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n  areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n  boundsRingPoint(lambda00, phi00);\n  areaStream.lineEnd();\n  if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n  range[0] = lambda0, range[1] = lambda1;\n  p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n  return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n  return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n  return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n  var i, n, a, b, merged, deltaMax, delta;\n\n  phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n  ranges = [];\n  stream(feature, boundsStream);\n\n  // First, sort ranges by their minimum longitudes.\n  if (n = ranges.length) {\n    ranges.sort(rangeCompare);\n\n    // Then, merge any ranges that overlap.\n    for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n      b = ranges[i];\n      if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n        if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n        if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n      } else {\n        merged.push(a = b);\n      }\n    }\n\n    // Finally, find the largest gap between the merged ranges.\n    // The final bounding box will be the inverse of this gap.\n    for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n      b = merged[i];\n      if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n    }\n  }\n\n  ranges = range = null;\n\n  return lambda0 === Infinity || phi0 === Infinity\n      ? [[NaN, NaN], [NaN, NaN]]\n      : [[lambda0, phi0], [lambda1, phi1]];\n}\n","import {Adder} from \"d3-array\";\nimport {asin, atan2, cos, degrees, epsilon, epsilon2, hypot, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nvar W0, W1,\n    X0, Y0, Z0,\n    X1, Y1, Z1,\n    X2, Y2, Z2,\n    lambda00, phi00, // first point\n    x0, y0, z0; // previous point\n\nvar centroidStream = {\n  sphere: noop,\n  point: centroidPoint,\n  lineStart: centroidLineStart,\n  lineEnd: centroidLineEnd,\n  polygonStart: function() {\n    centroidStream.lineStart = centroidRingStart;\n    centroidStream.lineEnd = centroidRingEnd;\n  },\n  polygonEnd: function() {\n    centroidStream.lineStart = centroidLineStart;\n    centroidStream.lineEnd = centroidLineEnd;\n  }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi);\n  centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n  ++W0;\n  X0 += (x - X0) / W0;\n  Y0 += (y - Y0) / W0;\n  Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n  centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi);\n  x0 = cosPhi * cos(lambda);\n  y0 = cosPhi * sin(lambda);\n  z0 = sin(phi);\n  centroidStream.point = centroidLinePoint;\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi),\n      x = cosPhi * cos(lambda),\n      y = cosPhi * sin(lambda),\n      z = sin(phi),\n      w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n  W1 += w;\n  X1 += w * (x0 + (x0 = x));\n  Y1 += w * (y0 + (y0 = y));\n  Z1 += w * (z0 + (z0 = z));\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n  centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n  centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n  centroidRingPoint(lambda00, phi00);\n  centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n  lambda00 = lambda, phi00 = phi;\n  lambda *= radians, phi *= radians;\n  centroidStream.point = centroidRingPoint;\n  var cosPhi = cos(phi);\n  x0 = cosPhi * cos(lambda);\n  y0 = cosPhi * sin(lambda);\n  z0 = sin(phi);\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi),\n      x = cosPhi * cos(lambda),\n      y = cosPhi * sin(lambda),\n      z = sin(phi),\n      cx = y0 * z - z0 * y,\n      cy = z0 * x - x0 * z,\n      cz = x0 * y - y0 * x,\n      m = hypot(cx, cy, cz),\n      w = asin(m), // line weight = angle\n      v = m && -w / m; // area weight multiplier\n  X2.add(v * cx);\n  Y2.add(v * cy);\n  Z2.add(v * cz);\n  W1 += w;\n  X1 += w * (x0 + (x0 = x));\n  Y1 += w * (y0 + (y0 = y));\n  Z1 += w * (z0 + (z0 = z));\n  centroidPointCartesian(x0, y0, z0);\n}\n\nexport default function(object) {\n  W0 = W1 =\n  X0 = Y0 = Z0 =\n  X1 = Y1 = Z1 = 0;\n  X2 = new Adder();\n  Y2 = new Adder();\n  Z2 = new Adder();\n  stream(object, centroidStream);\n\n  var x = +X2,\n      y = +Y2,\n      z = +Z2,\n      m = hypot(x, y, z);\n\n  // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n  if (m < epsilon2) {\n    x = X1, y = Y1, z = Z1;\n    // If the feature has zero length, fall back to arithmetic mean of point vectors.\n    if (W1 < epsilon) x = X0, y = Y0, z = Z0;\n    m = hypot(x, y, z);\n    // If the feature still has an undefined ccentroid, then return.\n    if (m < epsilon2) return [NaN, NaN];\n  }\n\n  return [atan2(y, x) * degrees, asin(z / m) * degrees];\n}\n","export default function(a, b) {\n\n  function compose(x, y) {\n    return x = a(x, y), b(x[0], x[1]);\n  }\n\n  if (a.invert && b.invert) compose.invert = function(x, y) {\n    return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n  };\n\n  return compose;\n}\n","import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n  if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n  return [lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n  return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n    : rotationLambda(deltaLambda))\n    : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n    : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n  return function(lambda, phi) {\n    lambda += deltaLambda;\n    if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n    return [lambda, phi];\n  };\n}\n\nfunction rotationLambda(deltaLambda) {\n  var rotation = forwardRotationLambda(deltaLambda);\n  rotation.invert = forwardRotationLambda(-deltaLambda);\n  return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n  var cosDeltaPhi = cos(deltaPhi),\n      sinDeltaPhi = sin(deltaPhi),\n      cosDeltaGamma = cos(deltaGamma),\n      sinDeltaGamma = sin(deltaGamma);\n\n  function rotation(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaPhi + x * sinDeltaPhi;\n    return [\n      atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n      asin(k * cosDeltaGamma + y * sinDeltaGamma)\n    ];\n  }\n\n  rotation.invert = function(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaGamma - y * sinDeltaGamma;\n    return [\n      atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n      asin(k * cosDeltaPhi - x * sinDeltaPhi)\n    ];\n  };\n\n  return rotation;\n}\n\nexport default function(rotate) {\n  rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n  function forward(coordinates) {\n    coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  }\n\n  forward.invert = function(coordinates) {\n    coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  };\n\n  return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n  if (!delta) return;\n  var cosRadius = cos(radius),\n      sinRadius = sin(radius),\n      step = direction * delta;\n  if (t0 == null) {\n    t0 = radius + direction * tau;\n    t1 = radius - step / 2;\n  } else {\n    t0 = circleRadius(cosRadius, t0);\n    t1 = circleRadius(cosRadius, t1);\n    if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n  }\n  for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n    point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n    stream.point(point[0], point[1]);\n  }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n  point = cartesian(point), point[0] -= cosRadius;\n  cartesianNormalizeInPlace(point);\n  var radius = acos(-point[1]);\n  return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n  var center = constant([0, 0]),\n      radius = constant(90),\n      precision = constant(2),\n      ring,\n      rotate,\n      stream = {point: point};\n\n  function point(x, y) {\n    ring.push(x = rotate(x, y));\n    x[0] *= degrees, x[1] *= degrees;\n  }\n\n  function circle() {\n    var c = center.apply(this, arguments),\n        r = radius.apply(this, arguments) * radians,\n        p = precision.apply(this, arguments) * radians;\n    ring = [];\n    rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n    circleStream(stream, r, p, 1);\n    c = {type: \"Polygon\", coordinates: [ring]};\n    ring = rotate = null;\n    return c;\n  }\n\n  circle.center = function(_) {\n    return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n  };\n\n  circle.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n  };\n\n  circle.precision = function(_) {\n    return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n  };\n\n  return circle;\n}\n","import noop from \"../noop.js\";\n\nexport default function() {\n  var lines = [],\n      line;\n  return {\n    point: function(x, y, m) {\n      line.push([x, y, m]);\n    },\n    lineStart: function() {\n      lines.push(line = []);\n    },\n    lineEnd: noop,\n    rejoin: function() {\n      if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n    },\n    result: function() {\n      var result = lines;\n      lines = [];\n      line = null;\n      return result;\n    }\n  };\n}\n","import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n  return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n  this.x = point;\n  this.z = points;\n  this.o = other; // another intersection\n  this.e = entry; // is an entry?\n  this.v = false; // visited\n  this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n  var subject = [],\n      clip = [],\n      i,\n      n;\n\n  segments.forEach(function(segment) {\n    if ((n = segment.length - 1) <= 0) return;\n    var n, p0 = segment[0], p1 = segment[n], x;\n\n    if (pointEqual(p0, p1)) {\n      if (!p0[2] && !p1[2]) {\n        stream.lineStart();\n        for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n        stream.lineEnd();\n        return;\n      }\n      // handle degenerate cases by moving the point\n      p1[0] += 2 * epsilon;\n    }\n\n    subject.push(x = new Intersection(p0, segment, null, true));\n    clip.push(x.o = new Intersection(p0, null, x, false));\n    subject.push(x = new Intersection(p1, segment, null, false));\n    clip.push(x.o = new Intersection(p1, null, x, true));\n  });\n\n  if (!subject.length) return;\n\n  clip.sort(compareIntersection);\n  link(subject);\n  link(clip);\n\n  for (i = 0, n = clip.length; i < n; ++i) {\n    clip[i].e = startInside = !startInside;\n  }\n\n  var start = subject[0],\n      points,\n      point;\n\n  while (1) {\n    // Find first unvisited intersection.\n    var current = start,\n        isSubject = true;\n    while (current.v) if ((current = current.n) === start) return;\n    points = current.z;\n    stream.lineStart();\n    do {\n      current.v = current.o.v = true;\n      if (current.e) {\n        if (isSubject) {\n          for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.n.x, 1, stream);\n        }\n        current = current.n;\n      } else {\n        if (isSubject) {\n          points = current.p.z;\n          for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.p.x, -1, stream);\n        }\n        current = current.p;\n      }\n      current = current.o;\n      points = current.z;\n      isSubject = !isSubject;\n    } while (!current.v);\n    stream.lineEnd();\n  }\n}\n\nfunction link(array) {\n  if (!(n = array.length)) return;\n  var n,\n      i = 0,\n      a = array[0],\n      b;\n  while (++i < n) {\n    a.n = b = array[i];\n    b.p = a;\n    a = b;\n  }\n  a.n = b = array[0];\n  b.p = a;\n}\n","import {Adder} from \"d3-array\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nfunction longitude(point) {\n  return abs(point[0]) <= pi ? point[0] : sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n  var lambda = longitude(point),\n      phi = point[1],\n      sinPhi = sin(phi),\n      normal = [sin(lambda), -cos(lambda), 0],\n      angle = 0,\n      winding = 0;\n\n  var sum = new Adder();\n\n  if (sinPhi === 1) phi = halfPi + epsilon;\n  else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n  for (var i = 0, n = polygon.length; i < n; ++i) {\n    if (!(m = (ring = polygon[i]).length)) continue;\n    var ring,\n        m,\n        point0 = ring[m - 1],\n        lambda0 = longitude(point0),\n        phi0 = point0[1] / 2 + quarterPi,\n        sinPhi0 = sin(phi0),\n        cosPhi0 = cos(phi0);\n\n    for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n      var point1 = ring[j],\n          lambda1 = longitude(point1),\n          phi1 = point1[1] / 2 + quarterPi,\n          sinPhi1 = sin(phi1),\n          cosPhi1 = cos(phi1),\n          delta = lambda1 - lambda0,\n          sign = delta >= 0 ? 1 : -1,\n          absDelta = sign * delta,\n          antimeridian = absDelta > pi,\n          k = sinPhi0 * sinPhi1;\n\n      sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n      angle += antimeridian ? delta + sign * tau : delta;\n\n      // Are the longitudes either side of the point’s meridian (lambda),\n      // and are the latitudes smaller than the parallel (phi)?\n      if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n        var arc = cartesianCross(cartesian(point0), cartesian(point1));\n        cartesianNormalizeInPlace(arc);\n        var intersection = cartesianCross(normal, arc);\n        cartesianNormalizeInPlace(intersection);\n        var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n        if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n          winding += antimeridian ^ delta >= 0 ? 1 : -1;\n        }\n      }\n    }\n  }\n\n  // First, determine whether the South pole is inside or outside:\n  //\n  // It is inside if:\n  // * the polygon winds around it in a clockwise direction.\n  // * the polygon does not (cumulatively) wind around it, but has a negative\n  //   (counter-clockwise) area.\n  //\n  // Second, count the (signed) number of times a segment crosses a lambda\n  // from the point to the South pole.  If it is zero, then the point is the\n  // same side as the South pole.\n\n  return (angle < -epsilon || angle < epsilon && sum < -epsilon2) ^ (winding & 1);\n}\n","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n  return function(sink) {\n    var line = clipLine(sink),\n        ringBuffer = clipBuffer(),\n        ringSink = clipLine(ringBuffer),\n        polygonStarted = false,\n        polygon,\n        segments,\n        ring;\n\n    var clip = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        clip.point = pointRing;\n        clip.lineStart = ringStart;\n        clip.lineEnd = ringEnd;\n        segments = [];\n        polygon = [];\n      },\n      polygonEnd: function() {\n        clip.point = point;\n        clip.lineStart = lineStart;\n        clip.lineEnd = lineEnd;\n        segments = merge(segments);\n        var startInside = polygonContains(polygon, start);\n        if (segments.length) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n        } else if (startInside) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          interpolate(null, null, 1, sink);\n          sink.lineEnd();\n        }\n        if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n        segments = polygon = null;\n      },\n      sphere: function() {\n        sink.polygonStart();\n        sink.lineStart();\n        interpolate(null, null, 1, sink);\n        sink.lineEnd();\n        sink.polygonEnd();\n      }\n    };\n\n    function point(lambda, phi) {\n      if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n    }\n\n    function pointLine(lambda, phi) {\n      line.point(lambda, phi);\n    }\n\n    function lineStart() {\n      clip.point = pointLine;\n      line.lineStart();\n    }\n\n    function lineEnd() {\n      clip.point = point;\n      line.lineEnd();\n    }\n\n    function pointRing(lambda, phi) {\n      ring.push([lambda, phi]);\n      ringSink.point(lambda, phi);\n    }\n\n    function ringStart() {\n      ringSink.lineStart();\n      ring = [];\n    }\n\n    function ringEnd() {\n      pointRing(ring[0][0], ring[0][1]);\n      ringSink.lineEnd();\n\n      var clean = ringSink.clean(),\n          ringSegments = ringBuffer.result(),\n          i, n = ringSegments.length, m,\n          segment,\n          point;\n\n      ring.pop();\n      polygon.push(ring);\n      ring = null;\n\n      if (!n) return;\n\n      // No intersections.\n      if (clean & 1) {\n        segment = ringSegments[0];\n        if ((m = segment.length - 1) > 0) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n          sink.lineEnd();\n        }\n        return;\n      }\n\n      // Rejoin connected segments.\n      // TODO reuse ringBuffer.rejoin()?\n      if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n      segments.push(ringSegments.filter(validSegment));\n    }\n\n    return clip;\n  };\n}\n\nfunction validSegment(segment) {\n  return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n  return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n       - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n  function() { return true; },\n  clipAntimeridianLine,\n  clipAntimeridianInterpolate,\n  [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n  var lambda0 = NaN,\n      phi0 = NaN,\n      sign0 = NaN,\n      clean; // no intersections\n\n  return {\n    lineStart: function() {\n      stream.lineStart();\n      clean = 1;\n    },\n    point: function(lambda1, phi1) {\n      var sign1 = lambda1 > 0 ? pi : -pi,\n          delta = abs(lambda1 - lambda0);\n      if (abs(delta - pi) < epsilon) { // line crosses a pole\n        stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        stream.point(lambda1, phi0);\n        clean = 0;\n      } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n        if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n        if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n        phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        clean = 0;\n      }\n      stream.point(lambda0 = lambda1, phi0 = phi1);\n      sign0 = sign1;\n    },\n    lineEnd: function() {\n      stream.lineEnd();\n      lambda0 = phi0 = NaN;\n    },\n    clean: function() {\n      return 2 - clean; // if intersections, rejoin first and last segments\n    }\n  };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n  var cosPhi0,\n      cosPhi1,\n      sinLambda0Lambda1 = sin(lambda0 - lambda1);\n  return abs(sinLambda0Lambda1) > epsilon\n      ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n          - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n          / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n      : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n  var phi;\n  if (from == null) {\n    phi = direction * halfPi;\n    stream.point(-pi, phi);\n    stream.point(0, phi);\n    stream.point(pi, phi);\n    stream.point(pi, 0);\n    stream.point(pi, -phi);\n    stream.point(0, -phi);\n    stream.point(-pi, -phi);\n    stream.point(-pi, 0);\n    stream.point(-pi, phi);\n  } else if (abs(from[0] - to[0]) > epsilon) {\n    var lambda = from[0] < to[0] ? pi : -pi;\n    phi = direction * lambda / 2;\n    stream.point(-lambda, phi);\n    stream.point(0, phi);\n    stream.point(lambda, phi);\n  } else {\n    stream.point(to[0], to[1]);\n  }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n  var cr = cos(radius),\n      delta = 2 * radians,\n      smallRadius = cr > 0,\n      notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n  function interpolate(from, to, direction, stream) {\n    circleStream(stream, radius, delta, direction, from, to);\n  }\n\n  function visible(lambda, phi) {\n    return cos(lambda) * cos(phi) > cr;\n  }\n\n  // Takes a line and cuts into visible segments. Return values used for polygon\n  // clipping: 0 - there were intersections or the line was empty; 1 - no\n  // intersections 2 - there were intersections, and the first and last segments\n  // should be rejoined.\n  function clipLine(stream) {\n    var point0, // previous point\n        c0, // code for previous point\n        v0, // visibility of previous point\n        v00, // visibility of first point\n        clean; // no intersections\n    return {\n      lineStart: function() {\n        v00 = v0 = false;\n        clean = 1;\n      },\n      point: function(lambda, phi) {\n        var point1 = [lambda, phi],\n            point2,\n            v = visible(lambda, phi),\n            c = smallRadius\n              ? v ? 0 : code(lambda, phi)\n              : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n        if (!point0 && (v00 = v0 = v)) stream.lineStart();\n        if (v !== v0) {\n          point2 = intersect(point0, point1);\n          if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n            point1[2] = 1;\n        }\n        if (v !== v0) {\n          clean = 0;\n          if (v) {\n            // outside going in\n            stream.lineStart();\n            point2 = intersect(point1, point0);\n            stream.point(point2[0], point2[1]);\n          } else {\n            // inside going out\n            point2 = intersect(point0, point1);\n            stream.point(point2[0], point2[1], 2);\n            stream.lineEnd();\n          }\n          point0 = point2;\n        } else if (notHemisphere && point0 && smallRadius ^ v) {\n          var t;\n          // If the codes for two points are different, or are both zero,\n          // and there this segment intersects with the small circle.\n          if (!(c & c0) && (t = intersect(point1, point0, true))) {\n            clean = 0;\n            if (smallRadius) {\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1]);\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n            } else {\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1], 3);\n            }\n          }\n        }\n        if (v && (!point0 || !pointEqual(point0, point1))) {\n          stream.point(point1[0], point1[1]);\n        }\n        point0 = point1, v0 = v, c0 = c;\n      },\n      lineEnd: function() {\n        if (v0) stream.lineEnd();\n        point0 = null;\n      },\n      // Rejoin first and last segments if there were intersections and the first\n      // and last points were visible.\n      clean: function() {\n        return clean | ((v00 && v0) << 1);\n      }\n    };\n  }\n\n  // Intersects the great circle between a and b with the clip circle.\n  function intersect(a, b, two) {\n    var pa = cartesian(a),\n        pb = cartesian(b);\n\n    // We have two planes, n1.p = d1 and n2.p = d2.\n    // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n    var n1 = [1, 0, 0], // normal\n        n2 = cartesianCross(pa, pb),\n        n2n2 = cartesianDot(n2, n2),\n        n1n2 = n2[0], // cartesianDot(n1, n2),\n        determinant = n2n2 - n1n2 * n1n2;\n\n    // Two polar points.\n    if (!determinant) return !two && a;\n\n    var c1 =  cr * n2n2 / determinant,\n        c2 = -cr * n1n2 / determinant,\n        n1xn2 = cartesianCross(n1, n2),\n        A = cartesianScale(n1, c1),\n        B = cartesianScale(n2, c2);\n    cartesianAddInPlace(A, B);\n\n    // Solve |p(t)|^2 = 1.\n    var u = n1xn2,\n        w = cartesianDot(A, u),\n        uu = cartesianDot(u, u),\n        t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n    if (t2 < 0) return;\n\n    var t = sqrt(t2),\n        q = cartesianScale(u, (-w - t) / uu);\n    cartesianAddInPlace(q, A);\n    q = spherical(q);\n\n    if (!two) return q;\n\n    // Two intersection points.\n    var lambda0 = a[0],\n        lambda1 = b[0],\n        phi0 = a[1],\n        phi1 = b[1],\n        z;\n\n    if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n    var delta = lambda1 - lambda0,\n        polar = abs(delta - pi) < epsilon,\n        meridian = polar || delta < epsilon;\n\n    if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n    // Check that the first point is between a and b.\n    if (meridian\n        ? polar\n          ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n          : phi0 <= q[1] && q[1] <= phi1\n        : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n      var q1 = cartesianScale(u, (-w + t) / uu);\n      cartesianAddInPlace(q1, A);\n      return [q, spherical(q1)];\n    }\n  }\n\n  // Generates a 4-bit vector representing the location of a point relative to\n  // the small circle's bounding box.\n  function code(lambda, phi) {\n    var r = smallRadius ? radius : pi - radius,\n        code = 0;\n    if (lambda < -r) code |= 1; // left\n    else if (lambda > r) code |= 2; // right\n    if (phi < -r) code |= 4; // below\n    else if (phi > r) code |= 8; // above\n    return code;\n  }\n\n  return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","export default function(a, b, x0, y0, x1, y1) {\n  var ax = a[0],\n      ay = a[1],\n      bx = b[0],\n      by = b[1],\n      t0 = 0,\n      t1 = 1,\n      dx = bx - ax,\n      dy = by - ay,\n      r;\n\n  r = x0 - ax;\n  if (!dx && r > 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dx > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = x1 - ax;\n  if (!dx && r < 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dx > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  r = y0 - ay;\n  if (!dy && r > 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dy > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = y1 - ay;\n  if (!dy && r < 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dy > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n  if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n  return true;\n}\n","import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n  function visible(x, y) {\n    return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n  }\n\n  function interpolate(from, to, direction, stream) {\n    var a = 0, a1 = 0;\n    if (from == null\n        || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n        || comparePoint(from, to) < 0 ^ direction > 0) {\n      do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n      while ((a = (a + direction + 4) % 4) !== a1);\n    } else {\n      stream.point(to[0], to[1]);\n    }\n  }\n\n  function corner(p, direction) {\n    return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n        : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n        : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n        : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n  }\n\n  function compareIntersection(a, b) {\n    return comparePoint(a.x, b.x);\n  }\n\n  function comparePoint(a, b) {\n    var ca = corner(a, 1),\n        cb = corner(b, 1);\n    return ca !== cb ? ca - cb\n        : ca === 0 ? b[1] - a[1]\n        : ca === 1 ? a[0] - b[0]\n        : ca === 2 ? a[1] - b[1]\n        : b[0] - a[0];\n  }\n\n  return function(stream) {\n    var activeStream = stream,\n        bufferStream = clipBuffer(),\n        segments,\n        polygon,\n        ring,\n        x__, y__, v__, // first point\n        x_, y_, v_, // previous point\n        first,\n        clean;\n\n    var clipStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: polygonStart,\n      polygonEnd: polygonEnd\n    };\n\n    function point(x, y) {\n      if (visible(x, y)) activeStream.point(x, y);\n    }\n\n    function polygonInside() {\n      var winding = 0;\n\n      for (var i = 0, n = polygon.length; i < n; ++i) {\n        for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n          a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n          if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n          else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n        }\n      }\n\n      return winding;\n    }\n\n    // Buffer geometry within a polygon and then clip it en masse.\n    function polygonStart() {\n      activeStream = bufferStream, segments = [], polygon = [], clean = true;\n    }\n\n    function polygonEnd() {\n      var startInside = polygonInside(),\n          cleanInside = clean && startInside,\n          visible = (segments = merge(segments)).length;\n      if (cleanInside || visible) {\n        stream.polygonStart();\n        if (cleanInside) {\n          stream.lineStart();\n          interpolate(null, null, 1, stream);\n          stream.lineEnd();\n        }\n        if (visible) {\n          clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n        }\n        stream.polygonEnd();\n      }\n      activeStream = stream, segments = polygon = ring = null;\n    }\n\n    function lineStart() {\n      clipStream.point = linePoint;\n      if (polygon) polygon.push(ring = []);\n      first = true;\n      v_ = false;\n      x_ = y_ = NaN;\n    }\n\n    // TODO rather than special-case polygons, simply handle them separately.\n    // Ideally, coincident intersection points should be jittered to avoid\n    // clipping issues.\n    function lineEnd() {\n      if (segments) {\n        linePoint(x__, y__);\n        if (v__ && v_) bufferStream.rejoin();\n        segments.push(bufferStream.result());\n      }\n      clipStream.point = point;\n      if (v_) activeStream.lineEnd();\n    }\n\n    function linePoint(x, y) {\n      var v = visible(x, y);\n      if (polygon) ring.push([x, y]);\n      if (first) {\n        x__ = x, y__ = y, v__ = v;\n        first = false;\n        if (v) {\n          activeStream.lineStart();\n          activeStream.point(x, y);\n        }\n      } else {\n        if (v && v_) activeStream.point(x, y);\n        else {\n          var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n              b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n          if (clipLine(a, b, x0, y0, x1, y1)) {\n            if (!v_) {\n              activeStream.lineStart();\n              activeStream.point(a[0], a[1]);\n            }\n            activeStream.point(b[0], b[1]);\n            if (!v) activeStream.lineEnd();\n            clean = false;\n          } else if (v) {\n            activeStream.lineStart();\n            activeStream.point(x, y);\n            clean = false;\n          }\n        }\n      }\n      x_ = x, y_ = y, v_ = v;\n    }\n\n    return clipStream;\n  };\n}\n","import {Adder} from \"d3-array\";\nimport {abs, atan2, cos, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nvar lengthSum,\n    lambda0,\n    sinPhi0,\n    cosPhi0;\n\nvar lengthStream = {\n  sphere: noop,\n  point: noop,\n  lineStart: lengthLineStart,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop\n};\n\nfunction lengthLineStart() {\n  lengthStream.point = lengthPointFirst;\n  lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n  lengthStream.point = lengthStream.lineEnd = noop;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  lambda0 = lambda, sinPhi0 = sin(phi), cosPhi0 = cos(phi);\n  lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var sinPhi = sin(phi),\n      cosPhi = cos(phi),\n      delta = abs(lambda - lambda0),\n      cosDelta = cos(delta),\n      sinDelta = sin(delta),\n      x = cosPhi * sinDelta,\n      y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta,\n      z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta;\n  lengthSum.add(atan2(sqrt(x * x + y * y), z));\n  lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi;\n}\n\nexport default function(object) {\n  lengthSum = new Adder();\n  stream(object, lengthStream);\n  return +lengthSum;\n}\n","import length from \"./length.js\";\n\nvar coordinates = [null, null],\n    object = {type: \"LineString\", coordinates: coordinates};\n\nexport default function(a, b) {\n  coordinates[0] = a;\n  coordinates[1] = b;\n  return length(object);\n}\n","import {range} from \"d3-array\";\nimport {abs, ceil, epsilon} from \"./math.js\";\n\nfunction graticuleX(y0, y1, dy) {\n  var y = range(y0, y1 - epsilon, dy).concat(y1);\n  return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n  var x = range(x0, x1 - epsilon, dx).concat(x1);\n  return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nexport default function graticule() {\n  var x1, x0, X1, X0,\n      y1, y0, Y1, Y0,\n      dx = 10, dy = dx, DX = 90, DY = 360,\n      x, y, X, Y,\n      precision = 2.5;\n\n  function graticule() {\n    return {type: \"MultiLineString\", coordinates: lines()};\n  }\n\n  function lines() {\n    return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n        .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n        .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n        .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n  }\n\n  graticule.lines = function() {\n    return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n  };\n\n  graticule.outline = function() {\n    return {\n      type: \"Polygon\",\n      coordinates: [\n        X(X0).concat(\n        Y(Y1).slice(1),\n        X(X1).reverse().slice(1),\n        Y(Y0).reverse().slice(1))\n      ]\n    };\n  };\n\n  graticule.extent = function(_) {\n    if (!arguments.length) return graticule.extentMinor();\n    return graticule.extentMajor(_).extentMinor(_);\n  };\n\n  graticule.extentMajor = function(_) {\n    if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n    X0 = +_[0][0], X1 = +_[1][0];\n    Y0 = +_[0][1], Y1 = +_[1][1];\n    if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n    if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n    return graticule.precision(precision);\n  };\n\n  graticule.extentMinor = function(_) {\n    if (!arguments.length) return [[x0, y0], [x1, y1]];\n    x0 = +_[0][0], x1 = +_[1][0];\n    y0 = +_[0][1], y1 = +_[1][1];\n    if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n    if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n    return graticule.precision(precision);\n  };\n\n  graticule.step = function(_) {\n    if (!arguments.length) return graticule.stepMinor();\n    return graticule.stepMajor(_).stepMinor(_);\n  };\n\n  graticule.stepMajor = function(_) {\n    if (!arguments.length) return [DX, DY];\n    DX = +_[0], DY = +_[1];\n    return graticule;\n  };\n\n  graticule.stepMinor = function(_) {\n    if (!arguments.length) return [dx, dy];\n    dx = +_[0], dy = +_[1];\n    return graticule;\n  };\n\n  graticule.precision = function(_) {\n    if (!arguments.length) return precision;\n    precision = +_;\n    x = graticuleX(y0, y1, 90);\n    y = graticuleY(x0, x1, precision);\n    X = graticuleX(Y0, Y1, 90);\n    Y = graticuleY(X0, X1, precision);\n    return graticule;\n  };\n\n  return graticule\n      .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n      .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nexport function graticule10() {\n  return graticule()();\n}\n","import {asin, atan2, cos, degrees, haversin, radians, sin, sqrt} from \"./math.js\";\n\nexport default function(a, b) {\n  var x0 = a[0] * radians,\n      y0 = a[1] * radians,\n      x1 = b[0] * radians,\n      y1 = b[1] * radians,\n      cy0 = cos(y0),\n      sy0 = sin(y0),\n      cy1 = cos(y1),\n      sy1 = sin(y1),\n      kx0 = cy0 * cos(x0),\n      ky0 = cy0 * sin(x0),\n      kx1 = cy1 * cos(x1),\n      ky1 = cy1 * sin(x1),\n      d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),\n      k = sin(d);\n\n  var interpolate = d ? function(t) {\n    var B = sin(t *= d) / k,\n        A = sin(d - t) / k,\n        x = A * kx0 + B * kx1,\n        y = A * ky0 + B * ky1,\n        z = A * sy0 + B * sy1;\n    return [\n      atan2(y, x) * degrees,\n      atan2(z, sqrt(x * x + y * y)) * degrees\n    ];\n  } : function() {\n    return [x0 * degrees, y0 * degrees];\n  };\n\n  interpolate.distance = d;\n\n  return interpolate;\n}\n","export default x => x;\n","import {Adder} from \"d3-array\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = new Adder(),\n    areaRingSum = new Adder(),\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar areaStream = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n    areaSum.add(abs(areaRingSum));\n    areaRingSum = new Adder();\n  },\n  result: function() {\n    var area = areaSum / 2;\n    areaSum = new Adder();\n    return area;\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n  areaStream.point = areaPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n  areaRingSum.add(y0 * x - x0 * y);\n  x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n  areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n    y0 = x0,\n    x1 = -x0,\n    y1 = x1;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop,\n  result: function() {\n    var bounds = [[x0, y0], [x1, y1]];\n    x1 = y1 = -(y0 = x0 = Infinity);\n    return bounds;\n  }\n};\n\nfunction boundsPoint(x, y) {\n  if (x < x0) x0 = x;\n  if (x > x1) x1 = x;\n  if (y < y0) y0 = y;\n  if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n    Y0 = 0,\n    Z0 = 0,\n    X1 = 0,\n    Y1 = 0,\n    Z1 = 0,\n    X2 = 0,\n    Y2 = 0,\n    Z2 = 0,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar centroidStream = {\n  point: centroidPoint,\n  lineStart: centroidLineStart,\n  lineEnd: centroidLineEnd,\n  polygonStart: function() {\n    centroidStream.lineStart = centroidRingStart;\n    centroidStream.lineEnd = centroidRingEnd;\n  },\n  polygonEnd: function() {\n    centroidStream.point = centroidPoint;\n    centroidStream.lineStart = centroidLineStart;\n    centroidStream.lineEnd = centroidLineEnd;\n  },\n  result: function() {\n    var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n        : Z1 ? [X1 / Z1, Y1 / Z1]\n        : Z0 ? [X0 / Z0, Y0 / Z0]\n        : [NaN, NaN];\n    X0 = Y0 = Z0 =\n    X1 = Y1 = Z1 =\n    X2 = Y2 = Z2 = 0;\n    return centroid;\n  }\n};\n\nfunction centroidPoint(x, y) {\n  X0 += x;\n  Y0 += y;\n  ++Z0;\n}\n\nfunction centroidLineStart() {\n  centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n  centroidStream.point = centroidPointLine;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n  var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n  centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n  centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n  centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n  centroidStream.point = centroidPointRing;\n  centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n  var dx = x - x0,\n      dy = y - y0,\n      z = sqrt(dx * dx + dy * dy);\n\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n\n  z = y0 * x - x0 * y;\n  X2 += z * (x0 + x);\n  Y2 += z * (y0 + y);\n  Z2 += z * 3;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n  this._context = context;\n}\n\nPathContext.prototype = {\n  _radius: 4.5,\n  pointRadius: function(_) {\n    return this._radius = _, this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._context.closePath();\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._context.moveTo(x, y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._context.lineTo(x, y);\n        break;\n      }\n      default: {\n        this._context.moveTo(x + this._radius, y);\n        this._context.arc(x, y, this._radius, 0, tau);\n        break;\n      }\n    }\n  },\n  result: noop\n};\n","import {Adder} from \"d3-array\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = new Adder(),\n    lengthRing,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar lengthStream = {\n  point: noop,\n  lineStart: function() {\n    lengthStream.point = lengthPointFirst;\n  },\n  lineEnd: function() {\n    if (lengthRing) lengthPoint(x00, y00);\n    lengthStream.point = noop;\n  },\n  polygonStart: function() {\n    lengthRing = true;\n  },\n  polygonEnd: function() {\n    lengthRing = null;\n  },\n  result: function() {\n    var length = +lengthSum;\n    lengthSum = new Adder();\n    return length;\n  }\n};\n\nfunction lengthPointFirst(x, y) {\n  lengthStream.point = lengthPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n  x0 -= x, y0 -= y;\n  lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n  x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","// Simple caching for constant-radius points.\nlet cacheDigits, cacheAppend, cacheRadius, cacheCircle;\n\nexport default class PathString {\n  constructor(digits) {\n    this._append = digits == null ? append : appendRound(digits);\n    this._radius = 4.5;\n    this._ = \"\";\n  }\n  pointRadius(_) {\n    this._radius = +_;\n    return this;\n  }\n  polygonStart() {\n    this._line = 0;\n  }\n  polygonEnd() {\n    this._line = NaN;\n  }\n  lineStart() {\n    this._point = 0;\n  }\n  lineEnd() {\n    if (this._line === 0) this._ += \"Z\";\n    this._point = NaN;\n  }\n  point(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._append`M${x},${y}`;\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._append`L${x},${y}`;\n        break;\n      }\n      default: {\n        this._append`M${x},${y}`;\n        if (this._radius !== cacheRadius || this._append !== cacheAppend) {\n          const r = this._radius;\n          const s = this._;\n          this._ = \"\"; // stash the old string so we can cache the circle path fragment\n          this._append`m0,${r}a${r},${r} 0 1,1 0,${-2 * r}a${r},${r} 0 1,1 0,${2 * r}z`;\n          cacheRadius = r;\n          cacheAppend = this._append;\n          cacheCircle = this._;\n          this._ = s;\n        }\n        this._ += cacheCircle;\n        break;\n      }\n    }\n  }\n  result() {\n    const result = this._;\n    this._ = \"\";\n    return result.length ? result : null;\n  }\n}\n\nfunction append(strings) {\n  let i = 1;\n  this._ += strings[0];\n  for (const j = strings.length; i < j; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  const d = Math.floor(digits);\n  if (!(d >= 0)) throw new RangeError(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  if (d !== cacheDigits) {\n    const k = 10 ** d;\n    cacheDigits = d;\n    cacheAppend = function append(strings) {\n      let i = 1;\n      this._ += strings[0];\n      for (const j = strings.length; i < j; ++i) {\n        this._ += Math.round(arguments[i] * k) / k + strings[i];\n      }\n    };\n  }\n  return cacheAppend;\n}\n","import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n  let digits = 3,\n      pointRadius = 4.5,\n      projectionStream,\n      contextStream;\n\n  function path(object) {\n    if (object) {\n      if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n      stream(object, projectionStream(contextStream));\n    }\n    return contextStream.result();\n  }\n\n  path.area = function(object) {\n    stream(object, projectionStream(pathArea));\n    return pathArea.result();\n  };\n\n  path.measure = function(object) {\n    stream(object, projectionStream(pathMeasure));\n    return pathMeasure.result();\n  };\n\n  path.bounds = function(object) {\n    stream(object, projectionStream(pathBounds));\n    return pathBounds.result();\n  };\n\n  path.centroid = function(object) {\n    stream(object, projectionStream(pathCentroid));\n    return pathCentroid.result();\n  };\n\n  path.projection = function(_) {\n    if (!arguments.length) return projection;\n    projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream;\n    return path;\n  };\n\n  path.context = function(_) {\n    if (!arguments.length) return context;\n    contextStream = _ == null ? (context = null, new PathString(digits)) : new PathContext(context = _);\n    if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n    return path;\n  };\n\n  path.pointRadius = function(_) {\n    if (!arguments.length) return pointRadius;\n    pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n    return path;\n  };\n\n  path.digits = function(_) {\n    if (!arguments.length) return digits;\n    if (_ == null) digits = null;\n    else {\n      const d = Math.floor(_);\n      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n      digits = d;\n    }\n    if (context === null) contextStream = new PathString(digits);\n    return path;\n  };\n\n  return path.projection(projection).digits(digits).context(context);\n}\n","export default function(methods) {\n  return {\n    stream: transformer(methods)\n  };\n}\n\nexport function transformer(methods) {\n  return function(stream) {\n    var s = new TransformStream;\n    for (var key in methods) s[key] = methods[key];\n    s.stream = stream;\n    return s;\n  };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n  constructor: TransformStream,\n  point: function(x, y) { this.stream.point(x, y); },\n  sphere: function() { this.stream.sphere(); },\n  lineStart: function() { this.stream.lineStart(); },\n  lineEnd: function() { this.stream.lineEnd(); },\n  polygonStart: function() { this.stream.polygonStart(); },\n  polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n  var clip = projection.clipExtent && projection.clipExtent();\n  projection.scale(150).translate([0, 0]);\n  if (clip != null) projection.clipExtent(null);\n  geoStream(object, projection.stream(boundsStream));\n  fitBounds(boundsStream.result());\n  if (clip != null) projection.clipExtent(clip);\n  return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n  return fit(projection, function(b) {\n    var w = extent[1][0] - extent[0][0],\n        h = extent[1][1] - extent[0][1],\n        k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n        x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n        y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitSize(projection, size, object) {\n  return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n  return fit(projection, function(b) {\n    var w = +width,\n        k = w / (b[1][0] - b[0][0]),\n        x = (w - k * (b[1][0] + b[0][0])) / 2,\n        y = -k * b[0][1];\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n  return fit(projection, function(b) {\n    var h = +height,\n        k = h / (b[1][1] - b[0][1]),\n        x = -k * b[0][0],\n        y = (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n","import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n    cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n  return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n  return transformer({\n    point: function(x, y) {\n      x = project(x, y);\n      this.stream.point(x[0], x[1]);\n    }\n  });\n}\n\nfunction resample(project, delta2) {\n\n  function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n    var dx = x1 - x0,\n        dy = y1 - y0,\n        d2 = dx * dx + dy * dy;\n    if (d2 > 4 * delta2 && depth--) {\n      var a = a0 + a1,\n          b = b0 + b1,\n          c = c0 + c1,\n          m = sqrt(a * a + b * b + c * c),\n          phi2 = asin(c /= m),\n          lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n          p = project(lambda2, phi2),\n          x2 = p[0],\n          y2 = p[1],\n          dx2 = x2 - x0,\n          dy2 = y2 - y0,\n          dz = dy * dx2 - dx * dy2;\n      if (dz * dz / d2 > delta2 // perpendicular projected distance\n          || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n          || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n        stream.point(x2, y2);\n        resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n      }\n    }\n  }\n  return function(stream) {\n    var lambda00, x00, y00, a00, b00, c00, // first point\n        lambda0, x0, y0, a0, b0, c0; // previous point\n\n    var resampleStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n      polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n    };\n\n    function point(x, y) {\n      x = project(x, y);\n      stream.point(x[0], x[1]);\n    }\n\n    function lineStart() {\n      x0 = NaN;\n      resampleStream.point = linePoint;\n      stream.lineStart();\n    }\n\n    function linePoint(lambda, phi) {\n      var c = cartesian([lambda, phi]), p = project(lambda, phi);\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n      stream.point(x0, y0);\n    }\n\n    function lineEnd() {\n      resampleStream.point = point;\n      stream.lineEnd();\n    }\n\n    function ringStart() {\n      lineStart();\n      resampleStream.point = ringPoint;\n      resampleStream.lineEnd = ringEnd;\n    }\n\n    function ringPoint(lambda, phi) {\n      linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n      resampleStream.point = linePoint;\n    }\n\n    function ringEnd() {\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n      resampleStream.lineEnd = lineEnd;\n      lineEnd();\n    }\n\n    return resampleStream;\n  };\n}\n","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n  point: function(x, y) {\n    this.stream.point(x * radians, y * radians);\n  }\n});\n\nfunction transformRotate(rotate) {\n  return transformer({\n    point: function(x, y) {\n      var r = rotate(x, y);\n      return this.stream.point(r[0], r[1]);\n    }\n  });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [dx + k * x, dy - k * y];\n  }\n  transform.invert = function(x, y) {\n    return [(x - dx) / k * sx, (dy - y) / k * sy];\n  };\n  return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n  if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n  var cosAlpha = cos(alpha),\n      sinAlpha = sin(alpha),\n      a = cosAlpha * k,\n      b = sinAlpha * k,\n      ai = cosAlpha / k,\n      bi = sinAlpha / k,\n      ci = (sinAlpha * dy - cosAlpha * dx) / k,\n      fi = (sinAlpha * dx + cosAlpha * dy) / k;\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [a * x - b * y + dx, dy - b * x - a * y];\n  }\n  transform.invert = function(x, y) {\n    return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n  };\n  return transform;\n}\n\nexport default function projection(project) {\n  return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n  var project,\n      k = 150, // scale\n      x = 480, y = 250, // translate\n      lambda = 0, phi = 0, // center\n      deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n      alpha = 0, // post-rotate angle\n      sx = 1, // reflectX\n      sy = 1, // reflectX\n      theta = null, preclip = clipAntimeridian, // pre-clip angle\n      x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n      delta2 = 0.5, // precision\n      projectResample,\n      projectTransform,\n      projectRotateTransform,\n      cache,\n      cacheStream;\n\n  function projection(point) {\n    return projectRotateTransform(point[0] * radians, point[1] * radians);\n  }\n\n  function invert(point) {\n    point = projectRotateTransform.invert(point[0], point[1]);\n    return point && [point[0] * degrees, point[1] * degrees];\n  }\n\n  projection.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n  };\n\n  projection.preclip = function(_) {\n    return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n  };\n\n  projection.postclip = function(_) {\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n  };\n\n  projection.clipAngle = function(_) {\n    return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n  };\n\n  projection.clipExtent = function(_) {\n    return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  projection.scale = function(_) {\n    return arguments.length ? (k = +_, recenter()) : k;\n  };\n\n  projection.translate = function(_) {\n    return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n  };\n\n  projection.center = function(_) {\n    return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n  };\n\n  projection.rotate = function(_) {\n    return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n  };\n\n  projection.angle = function(_) {\n    return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n  };\n\n  projection.reflectX = function(_) {\n    return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n  };\n\n  projection.reflectY = function(_) {\n    return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n  };\n\n  projection.precision = function(_) {\n    return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n  };\n\n  projection.fitExtent = function(extent, object) {\n    return fitExtent(projection, extent, object);\n  };\n\n  projection.fitSize = function(size, object) {\n    return fitSize(projection, size, object);\n  };\n\n  projection.fitWidth = function(width, object) {\n    return fitWidth(projection, width, object);\n  };\n\n  projection.fitHeight = function(height, object) {\n    return fitHeight(projection, height, object);\n  };\n\n  function recenter() {\n    var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n        transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n    rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n    projectTransform = compose(project, transform);\n    projectRotateTransform = compose(rotate, projectTransform);\n    projectResample = resample(projectTransform, delta2);\n    return reset();\n  }\n\n  function reset() {\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  return function() {\n    project = projectAt.apply(this, arguments);\n    projection.invert = project.invert && invert;\n    return recenter();\n  };\n}\n","import {degrees, pi, radians} from \"../math.js\";\nimport {projectionMutator} from \"./index.js\";\n\nexport function conicProjection(projectAt) {\n  var phi0 = 0,\n      phi1 = pi / 3,\n      m = projectionMutator(projectAt),\n      p = m(phi0, phi1);\n\n  p.parallels = function(_) {\n    return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n  };\n\n  return p;\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math.js\";\n\nexport function azimuthalRaw(scale) {\n  return function(x, y) {\n    var cx = cos(x),\n        cy = cos(y),\n        k = scale(cx * cy);\n        if (k === Infinity) return [2, 0];\n    return [\n      k * cy * sin(x),\n      k * sin(y)\n    ];\n  }\n}\n\nexport function azimuthalInvert(angle) {\n  return function(x, y) {\n    var z = sqrt(x * x + y * y),\n        c = angle(z),\n        sc = sin(c),\n        cc = cos(c);\n    return [\n      atan2(x * sc, z * cc),\n      asin(z && y * sc / z)\n    ];\n  }\n}\n","import {asin, sqrt} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n  return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n  return 2 * asin(z / 2);\n});\n\nexport default function() {\n  return projection(azimuthalEqualAreaRaw)\n      .scale(124.75)\n      .clipAngle(180 - 1e-3);\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\n\nexport function mercatorRaw(lambda, phi) {\n  return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n  return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n  return mercatorProjection(mercatorRaw)\n      .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n  var m = projection(project),\n      center = m.center,\n      scale = m.scale,\n      translate = m.translate,\n      clipExtent = m.clipExtent,\n      x0 = null, y0, x1, y1; // clip extent\n\n  m.scale = function(_) {\n    return arguments.length ? (scale(_), reclip()) : scale();\n  };\n\n  m.translate = function(_) {\n    return arguments.length ? (translate(_), reclip()) : translate();\n  };\n\n  m.center = function(_) {\n    return arguments.length ? (center(_), reclip()) : center();\n  };\n\n  m.clipExtent = function(_) {\n    return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  function reclip() {\n    var k = pi * scale(),\n        t = m(rotation(m.rotate()).invert([0, 0]));\n    return clipExtent(x0 == null\n        ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n        ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n        : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n  }\n\n  return reclip();\n}\n","import {abs, atan, atan2, cos, epsilon, halfPi, log, pi, pow, sign, sin, sqrt, tan} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {mercatorRaw} from \"./mercator.js\";\n\nfunction tany(y) {\n  return tan((halfPi + y) / 2);\n}\n\nexport function conicConformalRaw(y0, y1) {\n  var cy0 = cos(y0),\n      n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n      f = cy0 * pow(tany(y0), n) / n;\n\n  if (!n) return mercatorRaw;\n\n  function project(x, y) {\n    if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n    else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n    var r = f / pow(tany(y), n);\n    return [r * sin(n * x), f - r * cos(n * x)];\n  }\n\n  project.invert = function(x, y) {\n    var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy),\n      l = atan2(x, abs(fy)) * sign(fy);\n    if (fy * n < 0)\n      l -= pi * sign(x) * sign(fy);\n    return [l / n, 2 * atan(pow(f / r, 1 / n)) - halfPi];\n  };\n\n  return project;\n}\n\nexport default function() {\n  return conicProjection(conicConformalRaw)\n      .scale(109.5)\n      .parallels([30, 30]);\n}\n","import {asin, cos, epsilon, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function orthographicRaw(x, y) {\n  return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n  return projection(orthographicRaw)\n      .scale(249.5)\n      .clipAngle(90 + epsilon);\n}\n","export function initRange(domain, range) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.range(domain); break;\n    default: this.range(range).domain(domain); break;\n  }\n  return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: {\n      if (typeof domain === \"function\") this.interpolator(domain);\n      else this.range(domain);\n      break;\n    }\n    default: {\n      this.domain(domain);\n      if (typeof interpolator === \"function\") this.interpolator(interpolator);\n      else this.range(interpolator);\n      break;\n    }\n  }\n  return this;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n  var index = new InternMap(),\n      domain = [],\n      range = [],\n      unknown = implicit;\n\n  function scale(d) {\n    let i = index.get(d);\n    if (i === undefined) {\n      if (unknown !== implicit) return unknown;\n      index.set(d, i = domain.push(d) - 1);\n    }\n    return range[i % range.length];\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [], index = new InternMap();\n    for (const value of _) {\n      if (index.has(value)) continue;\n      index.set(value, domain.push(value) - 1);\n    }\n    return scale;\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), scale) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return ordinal(domain, range).unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n  var scale = ordinal().unknown(undefined),\n      domain = scale.domain,\n      ordinalRange = scale.range,\n      r0 = 0,\n      r1 = 1,\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n\n  delete scale.unknown;\n\n  function rescale() {\n    var n = domain().length,\n        reverse = r1 < r0,\n        start = reverse ? r1 : r0,\n        stop = reverse ? r0 : r1;\n    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n    if (round) step = Math.floor(step);\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n    var values = sequence(n).map(function(i) { return start + step * i; });\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n  };\n\n  scale.rangeRound = function(_) {\n    return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n  };\n\n  scale.bandwidth = function() {\n    return bandwidth;\n  };\n\n  scale.step = function() {\n    return step;\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, rescale()) : round;\n  };\n\n  scale.padding = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n  };\n\n  scale.paddingInner = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n  };\n\n  scale.paddingOuter = function(_) {\n    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n  };\n\n  scale.align = function(_) {\n    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n  };\n\n  scale.copy = function() {\n    return band(domain(), [r0, r1])\n        .round(round)\n        .paddingInner(paddingInner)\n        .paddingOuter(paddingOuter)\n        .align(align);\n  };\n\n  return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n  var copy = scale.copy;\n\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n  delete scale.paddingOuter;\n\n  scale.copy = function() {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nexport function point() {\n  return pointish(band.apply(null, arguments).paddingInner(1));\n}\n","export default function constants(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function number(x) {\n  return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n  return x;\n}\n\nfunction normalize(a, b) {\n  return (b -= (a = +a))\n      ? function(x) { return (x - a) / b; }\n      : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n  var t;\n  if (a > b) t = a, a = b, b = t;\n  return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n  return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n  var j = Math.min(domain.length, range.length) - 1,\n      d = new Array(j),\n      r = new Array(j),\n      i = -1;\n\n  // Reverse descending domains.\n  if (domain[j] < domain[0]) {\n    domain = domain.slice().reverse();\n    range = range.slice().reverse();\n  }\n\n  while (++i < j) {\n    d[i] = normalize(domain[i], domain[i + 1]);\n    r[i] = interpolate(range[i], range[i + 1]);\n  }\n\n  return function(x) {\n    var i = bisect(domain, x, 1, j) - 1;\n    return r[i](d[i](x));\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .range(source.range())\n      .interpolate(source.interpolate())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport function transformer() {\n  var domain = unit,\n      range = unit,\n      interpolate = interpolateValue,\n      transform,\n      untransform,\n      unknown,\n      clamp = identity,\n      piecewise,\n      output,\n      input;\n\n  function rescale() {\n    var n = Math.min(domain.length, range.length);\n    if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n    piecewise = n > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n  }\n\n  scale.invert = function(y) {\n    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = Array.from(_), interpolate = interpolateRound, rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n  };\n\n  scale.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, rescale()) : interpolate;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t, u) {\n    transform = t, untransform = u;\n    return rescale();\n  };\n}\n\nexport default function continuous() {\n  return transformer()(identity, identity);\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n  var step = tickStep(start, stop, count),\n      precision;\n  specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n  switch (specifier.type) {\n    case \"s\": {\n      var value = Math.max(Math.abs(start), Math.abs(stop));\n      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n      return formatPrefix(specifier, value);\n    }\n    case \"\":\n    case \"e\":\n    case \"g\":\n    case \"p\":\n    case \"r\": {\n      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n      break;\n    }\n    case \"f\":\n    case \"%\": {\n      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n      break;\n    }\n  }\n  return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n  var domain = scale.domain;\n\n  scale.ticks = function(count) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    var d = domain();\n    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n  };\n\n  scale.nice = function(count) {\n    if (count == null) count = 10;\n\n    var d = domain();\n    var i0 = 0;\n    var i1 = d.length - 1;\n    var start = d[i0];\n    var stop = d[i1];\n    var prestep;\n    var step;\n    var maxIter = 10;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n    \n    while (maxIter-- > 0) {\n      step = tickIncrement(start, stop, count);\n      if (step === prestep) {\n        d[i0] = start\n        d[i1] = stop\n        return domain(d);\n      } else if (step > 0) {\n        start = Math.floor(start / step) * step;\n        stop = Math.ceil(stop / step) * step;\n      } else if (step < 0) {\n        start = Math.ceil(start * step) / step;\n        stop = Math.floor(stop * step) / step;\n      } else {\n        break;\n      }\n      prestep = step;\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nexport default function linear() {\n  var scale = continuous();\n\n  scale.copy = function() {\n    return copy(scale, linear());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n","export default function nice(domain, interval) {\n  domain = domain.slice();\n\n  var i0 = 0,\n      i1 = domain.length - 1,\n      x0 = domain[i0],\n      x1 = domain[i1],\n      t;\n\n  if (x1 < x0) {\n    t = i0, i0 = i1, i1 = t;\n    t = x0, x0 = x1, x1 = t;\n  }\n\n  domain[i0] = interval.floor(x0);\n  domain[i1] = interval.ceil(x1);\n  return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format, formatSpecifier} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n  return Math.log(x);\n}\n\nfunction transformExp(x) {\n  return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n  return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n  return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n  return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n  return base === 10 ? pow10\n      : base === Math.E ? Math.exp\n      : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n  return base === Math.E ? Math.log\n      : base === 10 && Math.log10\n      || base === 2 && Math.log2\n      || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n  return (x, k) => -f(-x, k);\n}\n\nexport function loggish(transform) {\n  const scale = transform(transformLog, transformExp);\n  const domain = scale.domain;\n  let base = 10;\n  let logs;\n  let pows;\n\n  function rescale() {\n    logs = logp(base), pows = powp(base);\n    if (domain()[0] < 0) {\n      logs = reflect(logs), pows = reflect(pows);\n      transform(transformLogn, transformExpn);\n    } else {\n      transform(transformLog, transformExp);\n    }\n    return scale;\n  }\n\n  scale.base = function(_) {\n    return arguments.length ? (base = +_, rescale()) : base;\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.ticks = count => {\n    const d = domain();\n    let u = d[0];\n    let v = d[d.length - 1];\n    const r = v < u;\n\n    if (r) ([u, v] = [v, u]);\n\n    let i = logs(u);\n    let j = logs(v);\n    let k;\n    let t;\n    const n = count == null ? 10 : +count;\n    let z = [];\n\n    if (!(base % 1) && j - i < n) {\n      i = Math.floor(i), j = Math.ceil(j);\n      if (u > 0) for (; i <= j; ++i) {\n        for (k = 1; k < base; ++k) {\n          t = i < 0 ? k / pows(-i) : k * pows(i);\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      } else for (; i <= j; ++i) {\n        for (k = base - 1; k >= 1; --k) {\n          t = i > 0 ? k / pows(-i) : k * pows(i);\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      }\n      if (z.length * 2 < n) z = ticks(u, v, n);\n    } else {\n      z = ticks(i, j, Math.min(j - i, n)).map(pows);\n    }\n    return r ? z.reverse() : z;\n  };\n\n  scale.tickFormat = (count, specifier) => {\n    if (count == null) count = 10;\n    if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n    if (typeof specifier !== \"function\") {\n      if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\n      specifier = format(specifier);\n    }\n    if (count === Infinity) return specifier;\n    const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n    return d => {\n      let i = d / pows(Math.round(logs(d)));\n      if (i * base < base - 0.5) i *= base;\n      return i <= k ? specifier(d) : \"\";\n    };\n  };\n\n  scale.nice = () => {\n    return domain(nice(domain(), {\n      floor: x => pows(Math.floor(logs(x))),\n      ceil: x => pows(Math.ceil(logs(x)))\n    }));\n  };\n\n  return scale;\n}\n\nexport default function log() {\n  const scale = loggish(transformer()).domain([1, 10]);\n  scale.copy = () => copy(scale, log()).base(scale.base());\n  initRange.apply(scale, arguments);\n  return scale;\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n  return function(x) {\n    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n  };\n}\n\nfunction transformSqrt(x) {\n  return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n  return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n  var scale = transform(identity, identity),\n      exponent = 1;\n\n  function rescale() {\n    return exponent === 1 ? transform(identity, identity)\n        : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n        : transform(transformPow(exponent), transformPow(1 / exponent));\n  }\n\n  scale.exponent = function(_) {\n    return arguments.length ? (exponent = +_, rescale()) : exponent;\n  };\n\n  return linearish(scale);\n}\n\nexport default function pow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, pow()).exponent(scale.exponent());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n\nexport function sqrt() {\n  return pow.apply(null, arguments).exponent(0.5);\n}\n","export default function(x) {\n  return function constant() {\n    return x;\n  };\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n  let digits = 3;\n\n  shape.digits = function(_) {\n    if (!arguments.length) return digits;\n    if (_ == null) {\n      digits = null;\n    } else {\n      const d = Math.floor(_);\n      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n      digits = d;\n    }\n    return shape;\n  };\n\n  return () => new Path(digits);\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n  return typeof x === \"object\" && \"length\" in x\n    ? x // Array, TypedArray, NodeList, array-like\n    : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","function Linear(context) {\n  this._context = context;\n}\n\nLinear.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // falls through\n      default: this._context.lineTo(x, y); break;\n    }\n  }\n};\n\nexport default function(context) {\n  return new Linear(context);\n}\n","export function x(p) {\n  return p[0];\n}\n\nexport function y(p) {\n  return p[1];\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n  var defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null,\n      path = withPath(line);\n\n  x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n  y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n  function line(data) {\n    var i,\n        n = (data = array(data)).length,\n        d,\n        defined0 = false,\n        buffer;\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) output.lineStart();\n        else output.lineEnd();\n      }\n      if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  line.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n  };\n\n  line.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n  };\n\n  line.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n  };\n\n  line.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n  };\n\n  line.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n  };\n\n  return line;\n}\n","export default x => () => x;\n","export default function ZoomEvent(type, {\n  sourceEvent,\n  target,\n  transform,\n  dispatch\n}) {\n  Object.defineProperties(this, {\n    type: {value: type, enumerable: true, configurable: true},\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n    target: {value: target, enumerable: true, configurable: true},\n    transform: {value: transform, enumerable: true, configurable: true},\n    _: {value: dispatch}\n  });\n}\n","export function Transform(k, x, y) {\n  this.k = k;\n  this.x = x;\n  this.y = y;\n}\n\nTransform.prototype = {\n  constructor: Transform,\n  scale: function(k) {\n    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n  },\n  translate: function(x, y) {\n    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n  },\n  apply: function(point) {\n    return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n  },\n  applyX: function(x) {\n    return x * this.k + this.x;\n  },\n  applyY: function(y) {\n    return y * this.k + this.y;\n  },\n  invert: function(location) {\n    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n  },\n  invertX: function(x) {\n    return (x - this.x) / this.k;\n  },\n  invertY: function(y) {\n    return (y - this.y) / this.k;\n  },\n  rescaleX: function(x) {\n    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n  },\n  rescaleY: function(y) {\n    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n  },\n  toString: function() {\n    return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n  }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n  while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n  return node.__zoom;\n}\n","export function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n  return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n  var e = this;\n  if (e instanceof SVGElement) {\n    e = e.ownerSVGElement || e;\n    if (e.hasAttribute(\"viewBox\")) {\n      e = e.viewBox.baseVal;\n      return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n    }\n    return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n  }\n  return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n  return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n  return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n  var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n      dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n      dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n      dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n  return transform.translate(\n    dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n    dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n  );\n}\n\nexport default function() {\n  var filter = defaultFilter,\n      extent = defaultExtent,\n      constrain = defaultConstrain,\n      wheelDelta = defaultWheelDelta,\n      touchable = defaultTouchable,\n      scaleExtent = [0, Infinity],\n      translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n      duration = 250,\n      interpolate = interpolateZoom,\n      listeners = dispatch(\"start\", \"zoom\", \"end\"),\n      touchstarting,\n      touchfirst,\n      touchending,\n      touchDelay = 500,\n      wheelDelay = 150,\n      clickDistance2 = 0,\n      tapDistance = 10;\n\n  function zoom(selection) {\n    selection\n        .property(\"__zoom\", defaultTransform)\n        .on(\"wheel.zoom\", wheeled, {passive: false})\n        .on(\"mousedown.zoom\", mousedowned)\n        .on(\"dblclick.zoom\", dblclicked)\n      .filter(touchable)\n        .on(\"touchstart.zoom\", touchstarted)\n        .on(\"touchmove.zoom\", touchmoved)\n        .on(\"touchend.zoom touchcancel.zoom\", touchended)\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  zoom.transform = function(collection, transform, point, event) {\n    var selection = collection.selection ? collection.selection() : collection;\n    selection.property(\"__zoom\", defaultTransform);\n    if (collection !== selection) {\n      schedule(collection, transform, point, event);\n    } else {\n      selection.interrupt().each(function() {\n        gesture(this, arguments)\n          .event(event)\n          .start()\n          .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n          .end();\n      });\n    }\n  };\n\n  zoom.scaleBy = function(selection, k, p, event) {\n    zoom.scaleTo(selection, function() {\n      var k0 = this.__zoom.k,\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return k0 * k1;\n    }, p, event);\n  };\n\n  zoom.scaleTo = function(selection, k, p, event) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t0 = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n          p1 = t0.invert(p0),\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n    }, p, event);\n  };\n\n  zoom.translateBy = function(selection, x, y, event) {\n    zoom.transform(selection, function() {\n      return constrain(this.__zoom.translate(\n        typeof x === \"function\" ? x.apply(this, arguments) : x,\n        typeof y === \"function\" ? y.apply(this, arguments) : y\n      ), extent.apply(this, arguments), translateExtent);\n    }, null, event);\n  };\n\n  zoom.translateTo = function(selection, x, y, p, event) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n      return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n        typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n        typeof y === \"function\" ? -y.apply(this, arguments) : -y\n      ), e, translateExtent);\n    }, p, event);\n  };\n\n  function scale(transform, k) {\n    k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n    return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n  }\n\n  function translate(transform, p0, p1) {\n    var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n    return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n  }\n\n  function centroid(extent) {\n    return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n  }\n\n  function schedule(transition, transform, point, event) {\n    transition\n        .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n        .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n        .tween(\"zoom\", function() {\n          var that = this,\n              args = arguments,\n              g = gesture(that, args).event(event),\n              e = extent.apply(that, args),\n              p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n              w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n              a = that.__zoom,\n              b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n              i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n          return function(t) {\n            if (t === 1) t = b; // Avoid rounding error on end.\n            else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n            g.zoom(null, t);\n          };\n        });\n  }\n\n  function gesture(that, args, clean) {\n    return (!clean && that.__zooming) || new Gesture(that, args);\n  }\n\n  function Gesture(that, args) {\n    this.that = that;\n    this.args = args;\n    this.active = 0;\n    this.sourceEvent = null;\n    this.extent = extent.apply(that, args);\n    this.taps = 0;\n  }\n\n  Gesture.prototype = {\n    event: function(event) {\n      if (event) this.sourceEvent = event;\n      return this;\n    },\n    start: function() {\n      if (++this.active === 1) {\n        this.that.__zooming = this;\n        this.emit(\"start\");\n      }\n      return this;\n    },\n    zoom: function(key, transform) {\n      if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n      if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n      if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n      this.that.__zoom = transform;\n      this.emit(\"zoom\");\n      return this;\n    },\n    end: function() {\n      if (--this.active === 0) {\n        delete this.that.__zooming;\n        this.emit(\"end\");\n      }\n      return this;\n    },\n    emit: function(type) {\n      var d = select(this.that).datum();\n      listeners.call(\n        type,\n        this.that,\n        new ZoomEvent(type, {\n          sourceEvent: this.sourceEvent,\n          target: zoom,\n          type,\n          transform: this.that.__zoom,\n          dispatch: listeners\n        }),\n        d\n      );\n    }\n  };\n\n  function wheeled(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var g = gesture(this, args).event(event),\n        t = this.__zoom,\n        k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n        p = pointer(event);\n\n    // If the mouse is in the same location as before, reuse it.\n    // If there were recent wheel events, reset the wheel idle timeout.\n    if (g.wheel) {\n      if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n        g.mouse[1] = t.invert(g.mouse[0] = p);\n      }\n      clearTimeout(g.wheel);\n    }\n\n    // If this wheel event won’t trigger a transform change, ignore it.\n    else if (t.k === k) return;\n\n    // Otherwise, capture the mouse point and location at the start.\n    else {\n      g.mouse = [p, t.invert(p)];\n      interrupt(this);\n      g.start();\n    }\n\n    noevent(event);\n    g.wheel = setTimeout(wheelidled, wheelDelay);\n    g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n    function wheelidled() {\n      g.wheel = null;\n      g.end();\n    }\n  }\n\n  function mousedowned(event, ...args) {\n    if (touchending || !filter.apply(this, arguments)) return;\n    var currentTarget = event.currentTarget,\n        g = gesture(this, args, true).event(event),\n        v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n        p = pointer(event, currentTarget),\n        x0 = event.clientX,\n        y0 = event.clientY;\n\n    dragDisable(event.view);\n    nopropagation(event);\n    g.mouse = [p, this.__zoom.invert(p)];\n    interrupt(this);\n    g.start();\n\n    function mousemoved(event) {\n      noevent(event);\n      if (!g.moved) {\n        var dx = event.clientX - x0, dy = event.clientY - y0;\n        g.moved = dx * dx + dy * dy > clickDistance2;\n      }\n      g.event(event)\n       .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n    }\n\n    function mouseupped(event) {\n      v.on(\"mousemove.zoom mouseup.zoom\", null);\n      dragEnable(event.view, g.moved);\n      noevent(event);\n      g.event(event).end();\n    }\n  }\n\n  function dblclicked(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var t0 = this.__zoom,\n        p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n        p1 = t0.invert(p0),\n        k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n        t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n    noevent(event);\n    if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n    else select(this).call(zoom.transform, t1, p0, event);\n  }\n\n  function touchstarted(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var touches = event.touches,\n        n = touches.length,\n        g = gesture(this, args, event.changedTouches.length === n).event(event),\n        started, i, t, p;\n\n    nopropagation(event);\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = pointer(t, this);\n      p = [p, this.__zoom.invert(p), t.identifier];\n      if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n      else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n    }\n\n    if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n    if (started) {\n      if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n      interrupt(this);\n      g.start();\n    }\n  }\n\n  function touchmoved(event, ...args) {\n    if (!this.__zooming) return;\n    var g = gesture(this, args).event(event),\n        touches = event.changedTouches,\n        n = touches.length, i, t, p, l;\n\n    noevent(event);\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = pointer(t, this);\n      if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n      else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n    }\n    t = g.that.__zoom;\n    if (g.touch1) {\n      var p0 = g.touch0[0], l0 = g.touch0[1],\n          p1 = g.touch1[0], l1 = g.touch1[1],\n          dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n          dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n      t = scale(t, Math.sqrt(dp / dl));\n      p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n      l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n    }\n    else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n    else return;\n\n    g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n  }\n\n  function touchended(event, ...args) {\n    if (!this.__zooming) return;\n    var g = gesture(this, args).event(event),\n        touches = event.changedTouches,\n        n = touches.length, i, t;\n\n    nopropagation(event);\n    if (touchending) clearTimeout(touchending);\n    touchending = setTimeout(function() { touchending = null; }, touchDelay);\n    for (i = 0; i < n; ++i) {\n      t = touches[i];\n      if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n      else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n    }\n    if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n    if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n    else {\n      g.end();\n      // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n      if (g.taps === 2) {\n        t = pointer(t, this);\n        if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n          var p = select(this).on(\"dblclick.zoom\");\n          if (p) p.apply(this, arguments);\n        }\n      }\n    }\n  }\n\n  zoom.wheelDelta = function(_) {\n    return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n  };\n\n  zoom.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n  };\n\n  zoom.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n  };\n\n  zoom.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n  };\n\n  zoom.scaleExtent = function(_) {\n    return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n  };\n\n  zoom.translateExtent = function(_) {\n    return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n  };\n\n  zoom.constrain = function(_) {\n    return arguments.length ? (constrain = _, zoom) : constrain;\n  };\n\n  zoom.duration = function(_) {\n    return arguments.length ? (duration = +_, zoom) : duration;\n  };\n\n  zoom.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, zoom) : interpolate;\n  };\n\n  zoom.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? zoom : value;\n  };\n\n  zoom.clickDistance = function(_) {\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n  };\n\n  zoom.tapDistance = function(_) {\n    return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n  };\n\n  return zoom;\n}\n","import { numberMagnitude, RequiredBy } from \"@ourworldindata/utils\"\nimport {\n    BinningStrategyIncludingManual,\n    LogBinningStrategy,\n    ResolvedLogBinningStrategy,\n} from \"@ourworldindata/types\"\nimport {\n    calcMagnitudeDiff,\n    pruneUnusedBins,\n    ResolvedBinningStrategyConfig,\n} from \"./BinningStrategies.js\"\nimport * as R from \"remeda\"\nimport { match } from \"ts-pattern\"\n\nexport const isLogBinningStrategy = (\n    strategy: BinningStrategyIncludingManual\n): strategy is LogBinningStrategy => strategy.startsWith(\"log-\")\n\n/**\n * Automatically chooses a log binning strategy based on the magnitude difference between the min and max values.\n * Very roughly, the resulting number of bins is roughly magnitudeDiff * numberOfLogSteps.\n *\n * The threshold numbers in here are chosen empirically by experimentation.\n * The main idea is that we want to ideally have 5-8 bins, and with the number of resulting bins very roughly\n * being `magnitudeDiff * numberOfLogSteps`, we arrive roughly at these thresholds:\n * - for magnitudeDiff < 2.6, and 3 log steps, we'll end up with up to 8 bins\n * - for magnitudeDiff between 2.6 and 3.6, and 2 log steps, we'll end up with 5 to 8 bins\n * - for magnitudeDiff >= 3.6, and 1 log step, we'll end up with >=4 bins\n * - ... there's probably also cases where we can end up with more than 8 bins, but these should be pretty rare\n *   (and in these case, the authors can still manually choose a different strategy)\n */\nconst autoChooseLogBinningStrategy = (\n    magnitudeDiff: number\n): ResolvedLogBinningStrategy => {\n    if (magnitudeDiff >= 3.6) {\n        return \"log-10\"\n    }\n    if (magnitudeDiff >= 2.6) {\n        return \"log-1-3\"\n    }\n    return \"log-1-2-5\"\n}\n\nexport const runLogBinningStrategy = (\n    conf: RequiredBy<ResolvedBinningStrategyConfig, \"minValue\" | \"maxValue\">,\n    { hasMidpoint }: { hasMidpoint?: boolean } = {}\n): number[] => {\n    const { minValue, maxValue } = conf\n\n    if (minValue <= 0 || maxValue <= 0) {\n        throw new Error(\"Log binning strategy only supports positive values\")\n    }\n\n    let resolvedStrategy: ResolvedLogBinningStrategy\n    if (conf.strategy === \"log-auto\") {\n        let magnitudeDiff = calcMagnitudeDiff(minValue, maxValue)\n        if (hasMidpoint) magnitudeDiff *= 1.8 // If there is a midpoint, we want to create fewer bins than we would otherwise\n        resolvedStrategy = autoChooseLogBinningStrategy(magnitudeDiff)\n    } else {\n        resolvedStrategy = conf.strategy as ResolvedLogBinningStrategy\n    }\n\n    const bins = match(resolvedStrategy)\n        .with(\"log-10\", () =>\n            createLogBins({ minValue, maxValue, logSteps: [1] })\n        )\n        .with(\"log-1-3\", () =>\n            createLogBins({ minValue, maxValue, logSteps: [1, 3] })\n        )\n        .with(\"log-1-2-5\", () =>\n            createLogBins({ minValue, maxValue, logSteps: [1, 2, 5] })\n        )\n        .exhaustive()\n\n    // Add the midpoint (most likely zero) if it is not already included in a bin\n    if (\n        !hasMidpoint &&\n        conf.midpoint !== undefined &&\n        bins[0] > conf.midpoint\n    ) {\n        bins.unshift(conf.midpoint)\n    }\n\n    return bins\n}\n\nconst createLogBins = ({\n    minValue,\n    maxValue,\n    logSteps,\n}: {\n    minValue: number\n    maxValue: number\n    logSteps: number[]\n}): number[] => {\n    if (minValue <= 0 || maxValue <= 0) {\n        throw new Error(\"createLogBins only supports positive values\")\n    }\n\n    // We need the -1 here to convert between magnitude and logarithms.\n    // Magnitude is defined such that magnitude(1) = 1, whereas log10(1) = 0.\n    // Because we generate factors as 10^magnitude, we need to adjust the values accordingly.\n    const exponentMin = numberMagnitude(minValue) - 1\n    const exponentMax = numberMagnitude(maxValue) - 1\n\n    const candidates = R.range(exponentMin, exponentMax + 1).flatMap(\n        (magnitude) => {\n            const factor = Math.pow(10, magnitude)\n            return logSteps.map((step) => step * factor)\n        }\n    )\n\n    // Adding this extra value at the end is useful if we have, for example, maxValue = 99.\n    // Then the candidates above will go up to 50 (if logSteps includes 5), and here we'll then\n    // add 100 to the mix.\n    if ((R.last(candidates) ?? 0) < maxValue) {\n        candidates.push(1 * Math.pow(10, exponentMax + 1))\n    }\n\n    return pruneUnusedBins(candidates, { minValue, maxValue })\n}\n","import {\n    BinningStrategyIncludingManual,\n    EqualSizeBinningStrategy,\n    ResolvedBinningStrategy,\n} from \"@ourworldindata/types\"\nimport {\n    normaliseToSingleDigitNumber,\n    RequiredBy,\n    roundSigFig,\n} from \"@ourworldindata/utils\"\nimport * as R from \"remeda\"\nimport { match, P } from \"ts-pattern\"\nimport { ResolvedBinningStrategyConfig } from \"./BinningStrategies.js\"\nimport * as Sentry from \"@sentry/browser\"\n\nexport const isEqualSizeBinningStrategy = (\n    strategy: BinningStrategyIncludingManual | ResolvedBinningStrategy\n): strategy is EqualSizeBinningStrategy => strategy.startsWith(\"equalSizeBins-\")\n\nexport const runEqualSizeBinningStrategy = (\n    conf: RequiredBy<ResolvedBinningStrategyConfig, \"minValue\" | \"maxValue\">,\n    { hasMidpoint }: { hasMidpoint?: boolean } = {}\n): number[] => {\n    if (!isEqualSizeBinningStrategy(conf.strategy)) {\n        throw new Error(\"Invalid strategy\")\n    }\n\n    const { minValue, maxValue } = conf\n    const targetBinCount = getTargetBinCountForEqualSizeBinsStrategy(\n        conf.strategy,\n        { hasMidpoint }\n    )\n    return createEqualSizeBins({ minValue, maxValue, targetBinCount })\n}\n\n/**\n * The equal-size binning strategies all operate with a range of target bins depending on the strategy.\n * For example, [5, 9] means that there should be at least 5 bins and at most 9.\n * If there is a midpoint, the number of bins needs to be adjusted downward, because we are potentially\n * creating up to twice as many bins overall.\n */\nconst getTargetBinCountForEqualSizeBinsStrategy = (\n    strategy: EqualSizeBinningStrategy,\n    { hasMidpoint }: { hasMidpoint?: boolean } = {}\n): readonly [number, number] => {\n    return match(strategy)\n        .with(\"equalSizeBins-few-bins\", () =>\n            hasMidpoint ? ([1, 3] as const) : ([2, 5] as const)\n        )\n        .with(\"equalSizeBins-normal\", () =>\n            hasMidpoint ? ([3, 6] as const) : ([5, 9] as const)\n        )\n        .with(\n            P.union(\"equalSizeBins-many-bins\", \"equalSizeBins-percent\"),\n            () => (hasMidpoint ? ([4, 8] as const) : ([8, 12] as const))\n        )\n        .exhaustive()\n}\n\nexport const createEqualSizeBins = ({\n    minValue,\n    maxValue,\n    targetBinCount,\n}: {\n    minValue: number\n    maxValue: number\n    targetBinCount: readonly number[]\n}): number[] => {\n    if (minValue > maxValue) {\n        throw new Error(\"minValue must be less than maxValue\")\n    }\n\n    const range = maxValue - minValue\n\n    // Normalise the range to be within 1 and 10\n    const { normalised: normalisedRange, factor } =\n        normaliseToSingleDigitNumber(range)\n\n    // These are all common and \"good\" step sizes\n    const stepSizeCandidates = [1, 0.1, 0.5, 0.2, 2, 3, 0.3, 0.75, 0.25]\n\n    // Compute the number of bins we would get for each candidate step size\n    const stepSizeInfo = stepSizeCandidates.map((candidateStepSize) => {\n        // if (normalisedRange === 0) return true\n\n        const numSteps = Math.ceil(normalisedRange / candidateStepSize)\n        return { stepSize: candidateStepSize, numSteps }\n        // return numSteps >= targetBinCount[0] && numSteps <= targetBinCount[1]\n    })\n\n    // Find the first step size that gives us the target bin count\n    let stepSize = stepSizeInfo.find(\n        (info) =>\n            info.numSteps >= targetBinCount[0] &&\n            info.numSteps <= targetBinCount[1]\n    )?.stepSize\n\n    if (stepSize === undefined) {\n        // It could be interesting to see which charts cause this, so we can further look into them\n        Sentry.captureMessage(\n            \"Equal size binning: Couldn't find a step size fitting targetBinCount; instead using next-best candidate\",\n            {\n                level: \"warning\",\n                extra: { targetBinCount, minValue, maxValue },\n            }\n        )\n\n        // prefer too many bins over too few (by weighing \"too many\" less highly than \"too few\")\n        const stepSizeDifference = (candidate: number): number =>\n            Math.max(candidate - targetBinCount[1], 0) * 1 + // this is how many more bins there are than targetBinCount specifies\n            Math.max(targetBinCount[0] - candidate, 0) * 2 // and this is how many fewer there are\n\n        // Find the step size that minimizes the distance function, i.e. such that we are not much above/below what targetBinCount requests\n        stepSize = R.firstBy(stepSizeInfo, (info) =>\n            stepSizeDifference(info.numSteps)\n        )?.stepSize\n    }\n\n    if (stepSize === undefined) {\n        // This should never happen\n        throw new Error(\"Could not find a valid step size\")\n    }\n\n    const actualStepSize = stepSize * factor\n\n    // Round min value to step size, e.g. if the step size is 20 then this would round 50 down to 40\n    const minValueRounded =\n        Math.floor(minValue / actualStepSize) * actualStepSize\n\n    const steps = Math.ceil((maxValue - minValueRounded) / actualStepSize)\n\n    return R.range(0, steps + 1).map((i) => {\n        const value = i * actualStepSize\n        return minValueRounded + roundSigFig(value, 3) // to avoid floating point issues\n    })\n}\n","import {\n    automaticBinningStrategies,\n    AutomaticBinningStrategy,\n    MidpointMode,\n    ResolvedBinningStrategy,\n} from \"@ourworldindata/types\"\nimport {\n    firstOfNonEmptyArray,\n    lastOfNonEmptyArray,\n} from \"@ourworldindata/utils\"\nimport { quantile } from \"d3\"\nimport { sortedUniq } from \"lodash-es\"\nimport * as R from \"remeda\"\nimport { match, P } from \"ts-pattern\"\nimport {\n    isLogBinningStrategy,\n    runLogBinningStrategy,\n} from \"./BinningStrategyLogarithmic.js\"\nimport {\n    isEqualSizeBinningStrategy,\n    runEqualSizeBinningStrategy,\n} from \"./BinningStrategyEqualSizeBins.js\"\n\n/**\n * Strategies:\n * - The log scales result in log-like steps, e.g. 1, 2, 5, 10, ...\n *   They are fully defined given a minValue, maxValue and steps, and\n *   then generate as many bins as needed to cover the range.\n *   `log-auto` chooses the step size automatically in order to get a decent number of bins.\n * - The equal size bins result in evenly spaced steps, e.g. 0, 1, 2, 3, ...\n *   They are defined by a minValue, maxValue, and a rough target number of bins.\n *   `equalSizeBins-few-bins` chooses a small number of bins, while\n *   `equalSizeBins-many-bins` chooses a large number of bins.\n *   They then generate nice round bin thresholds given the input data.\n * - `equalSizeBins-percent` is a special case, where for data that looks like percent\n *   from 0% to 100% we want to mostly use 0%, 10%, 20%, etc. bins.\n *\n * Midpoints:\n *  Sometimes, we do have a midpoint in our data. In many cases, a natural midpoint is zero\n *  (e.g. for year-over-year change, net migration, temperature anomaly, etc.), but other\n *  midpoints also make sense (e.g. for sex ratio, or survey responses ranging 0-10).\n *  If we have a midpoint, then we want to account for it when binning, and generate bins\n *  that are centered or symmetric around the midpoint.\n */\n\nexport interface BinningStrategyConfig {\n    strategy: AutomaticBinningStrategy\n    minValue?: number\n    maxValue?: number\n    sortedValues: number[]\n    isPercent?: boolean\n    numDecimalPlaces?: number\n    midpointMode?: MidpointMode\n    midpoint?: number\n    createBinForMidpoint?: boolean\n}\n\nexport interface ResolvedBinningStrategyConfig {\n    strategy: ResolvedBinningStrategy\n    minValue?: number\n    maxValue?: number\n    numDecimalPlaces?: number\n    sortedValues: number[]\n    midpointMode: MidpointMode\n    midpoint: number\n}\n\ninterface BinningStrategyOutput {\n    bins: number[]\n    midpoint?: number\n}\n\n// If the log10 difference between the min and max values is less than or equal\n// to 3, the data is considered to be close enough in magnitude to use equal-size bins.\n// This threshold was chosen empirically by aiming for a 75% / 25% split between\n// equal-size and log bins across our charts.\nconst AUTO_EQUAL_BINS_MAX_MAGNITUDE_DIFF = 3\n\n/**\n * Calculates the log10 difference between two numbers, i.e. compute x such that lowerValue * 10^x = upperValue.\n */\nexport const calcMagnitudeDiff = (\n    lowerValue: number,\n    upperValue: number\n): number => {\n    if (lowerValue > upperValue)\n        throw new Error(\"lowerValue must be less than upperValue\")\n\n    return Math.log10(upperValue) - Math.log10(lowerValue)\n}\n\nexport const pruneUnusedBins = (\n    bins: number[],\n    { minValue, maxValue }: { minValue?: number; maxValue?: number }\n): number[] => {\n    if (minValue !== undefined) {\n        bins = R.dropWhile(\n            bins,\n            (v, i) => bins[i + 1] !== undefined && bins[i + 1] <= minValue\n        )\n    }\n\n    if (maxValue !== undefined) {\n        bins = R.dropLastWhile(\n            bins,\n            (v, i) => bins[i - 1] !== undefined && bins[i - 1] >= maxValue\n        )\n    }\n\n    return bins\n}\n\nexport const runBinningStrategy = (\n    conf: BinningStrategyConfig\n): BinningStrategyOutput => {\n    if (conf.sortedValues.length === 0) {\n        return { bins: [0] }\n    }\n\n    conf.midpoint ??= 0\n\n    const hasValuesBelowMidpoint = conf.sortedValues[0] < conf.midpoint\n    const hasValuesAboveMidpoint =\n        lastOfNonEmptyArray(conf.sortedValues) > conf.midpoint\n    const hasValuesBelowAndAboveMidpoint =\n        hasValuesBelowMidpoint && hasValuesAboveMidpoint\n\n    if (hasValuesBelowAndAboveMidpoint && conf.midpointMode === undefined) {\n        // Default to symmetric midpoint if there are negative and positive values\n        conf.midpointMode ??= \"symmetric\"\n    }\n\n    conf.midpointMode ??= \"none\"\n\n    let resolvedStrategy: ResolvedBinningStrategy\n    if (conf.strategy === \"auto\") {\n        resolvedStrategy = autoChooseBinningStrategy(conf)\n    } else {\n        resolvedStrategy = conf.strategy\n    }\n\n    const validationResult = hasValidConfigForBinningStrategy(\n        conf.strategy,\n        conf\n    )\n    if (!validationResult.valid) return { bins: [0] } // Placeholder binning for invalid configurations\n\n    let bins = runBinningStrategyAroundMidpoint({\n        ...conf,\n        midpointMode: conf.midpointMode,\n        midpoint: conf.midpoint,\n        strategy: resolvedStrategy,\n    })\n\n    if (conf.createBinForMidpoint) {\n        const midpointIdx = R.sortedIndex(bins, conf.midpoint)\n        bins = bins.toSpliced(midpointIdx, 0, conf.midpoint)\n    }\n\n    return {\n        bins,\n        midpoint: conf.midpointMode !== \"none\" ? conf.midpoint : undefined,\n    }\n}\n\ntype MinMaxValueResult =\n    | { valid: true }\n    | { valid: false; reason: string; field: string }\n\nexport const hasValidConfigForBinningStrategy = (\n    strategy: AutomaticBinningStrategy,\n    config: { minValue?: number; maxValue?: number; midpoint?: number }\n): MinMaxValueResult => {\n    const { minValue, maxValue, midpoint } = config\n\n    if (!automaticBinningStrategies.includes(strategy))\n        return {\n            valid: false,\n            reason: `Binning: Invalid strategy '${strategy}'`,\n            field: \"binningStrategy\",\n        }\n\n    if (\n        minValue !== undefined &&\n        maxValue !== undefined &&\n        maxValue < minValue\n    ) {\n        return {\n            valid: false,\n            reason: \"Binning: minValue is greater than maxValue\",\n            field: \"minValue\",\n        }\n    }\n\n    return match(strategy)\n        .with(\"auto\", () => {\n            return { valid: true } as const\n        })\n        .when(isEqualSizeBinningStrategy, () => {\n            return { valid: true } as const\n        })\n        .when(isLogBinningStrategy, () => {\n            if (minValue !== undefined && minValue <= 0) {\n                return {\n                    valid: false,\n                    reason: \"Binning: Logarithmic binning requires non-zero positive minValue\",\n                    field: \"minValue\",\n                } as const\n            }\n            if (maxValue !== undefined && maxValue <= 0) {\n                return {\n                    valid: false,\n                    reason: \"Binning: Logarithmic binning requires non-zero positive maxValue\",\n                    field: \"maxValue\",\n                } as const\n            }\n            if (midpoint !== undefined && midpoint !== 0) {\n                return {\n                    valid: false,\n                    reason: \"Binning: Logarithmic binning does not support midpoints other than 0\",\n                    field: \"midpoint\",\n                } as const\n            }\n            return { valid: true } as const\n        })\n        .exhaustive()\n}\n\n/**\n * minValue and maxValue may either be explicitly given, or automatically computed from the data.\n * If auto-computed, they are based on some very much heuristic rules, based on quantiles etc.\n *\n * This also means that these lines contain a bunch of magic numbers, which have been chosen like so\n * because they work well in practice for most cases.\n */\nexport const computeMinMaxForStrategy = (\n    strategy: ResolvedBinningStrategy,\n    sortedValues: number[],\n    conf?: Partial<ResolvedBinningStrategyConfig>\n): { minValue: number; maxValue: number } => {\n    let { minValue, maxValue } = conf || {}\n    if (\n        conf?.midpointMode !== \"none\" &&\n        minValue !== undefined &&\n        conf?.midpoint !== undefined\n    ) {\n        // Ensure that the midpoint is within the min/max range, otherwise we'll get very weird results when mirroring around the midpoint\n        minValue = Math.max(minValue, conf.midpoint)\n    }\n    if (minValue !== undefined && maxValue !== undefined) {\n        maxValue = Math.max(minValue, maxValue)\n        return { minValue, maxValue }\n    }\n\n    match(strategy)\n        .with(\"equalSizeBins-percent\", () => {\n            // Percent strategy always uses 0 to 100\n            minValue ??= 0\n            maxValue ??= 100\n        })\n        .when(isEqualSizeBinningStrategy, () => {\n            const uniqValues = sortedUniq(sortedValues)\n            minValue ??= quantile(uniqValues, 0.05)\n            maxValue ??= quantile(uniqValues, 0.95)\n        })\n        .when(isLogBinningStrategy, () => {\n            const posValues = R.dropWhile(sortedValues, (v) => v <= 0)\n            if (posValues.length === 0) {\n                throw new Error(\"Log binning strategy requires positive values\")\n            }\n\n            const uniqValues = sortedUniq(posValues)\n            minValue ??= quantile(uniqValues, 0.15)\n            maxValue ??= quantile(uniqValues, 0.995)\n\n            if (minValue === undefined || maxValue === undefined)\n                throw new Error(\"Couldn't obtain minValue or maxValue\")\n\n            // Ensure that the min/max values are at least as high as the number of decimals precision.\n            // E.g. if we have 1 decimal place, the minimum value should be at least 0.1\n            if (conf?.numDecimalPlaces !== undefined) {\n                if (minValue > 0)\n                    minValue = Math.max(\n                        minValue,\n                        Math.pow(10, -conf.numDecimalPlaces)\n                    )\n                if (maxValue < 0)\n                    maxValue = Math.min(\n                        maxValue,\n                        -Math.pow(10, -conf.numDecimalPlaces)\n                    )\n            }\n        })\n        .exhaustive()\n\n    if (minValue === undefined || maxValue === undefined)\n        throw new Error(\"Couldn't obtain minValue or maxValue\")\n\n    // Ensure that we have minValue <= maxValue\n    maxValue = Math.max(minValue, maxValue)\n    return { minValue, maxValue }\n}\n\nconst runBinningStrategyAroundMidpoint = (\n    conf: ResolvedBinningStrategyConfig\n): number[] => {\n    if (\n        isLogBinningStrategy(conf.strategy) &&\n        conf.midpointMode !== \"none\" &&\n        conf.midpoint !== 0\n    ) {\n        throw new Error(\n            \"Log binning strategy does not support midpoints other than 0\"\n        )\n    }\n\n    const minValue = firstOfNonEmptyArray(conf.sortedValues)\n    const maxValue = lastOfNonEmptyArray(conf.sortedValues)\n\n    const bins = match(conf.midpointMode)\n        .with(\"none\", () => {\n            return runResolvedBinningStrategy(conf, { hasMidpoint: false })\n        })\n        .with(P.union(\"symmetric\", \"asymmetric\"), () => {\n            const leftRange = Math.max(conf.midpoint - minValue, 0)\n            const rightRange = Math.max(maxValue - conf.midpoint, 0)\n            const biggerRange = Math.max(leftRange, rightRange)\n\n            let posValues: number[]\n            if (biggerRange === leftRange) {\n                posValues = R.takeWhile(\n                    conf.sortedValues,\n                    (v) => v < conf.midpoint\n                )\n                    .map((v) => conf.midpoint - v)\n                    .reverse()\n            } else {\n                posValues = R.dropWhile(\n                    conf.sortedValues,\n                    (v) => v <= conf.midpoint\n                ).map((v) => v - conf.midpoint)\n            }\n\n            const binsRight = runResolvedBinningStrategy(\n                { ...conf, sortedValues: posValues },\n                { hasMidpoint: true }\n            )\n            const bins = mirrorBinsAroundMidpoint(binsRight, conf.midpoint)\n\n            if (conf.midpointMode === \"symmetric\") {\n                return bins\n            } else {\n                // asymmetric: create bins the same way, but then prune any unused ones\n\n                return pruneUnusedBins(bins, {\n                    minValue,\n                    maxValue,\n                })\n            }\n        })\n        .with(\"same-num-bins\", () => {\n            const leftValues = R.takeWhile(\n                conf.sortedValues,\n                (v) => v < conf.midpoint\n            )\n                .map((v) => conf.midpoint - v)\n                .reverse()\n\n            const rightValues = R.dropWhile(\n                conf.sortedValues,\n                (v) => v <= conf.midpoint\n            ).map((v) => v - conf.midpoint)\n\n            const binsRight = runResolvedBinningStrategy(\n                { ...conf, sortedValues: rightValues },\n                { hasMidpoint: true }\n            ).filter((v) => v !== 0)\n            const binsLeft = runResolvedBinningStrategy(\n                { ...conf, sortedValues: leftValues },\n                { hasMidpoint: true }\n            ).filter((v) => v !== 0)\n\n            return [\n                ...binsLeft.map((v) => conf.midpoint - v).reverse(),\n                conf.midpoint,\n                ...binsRight.map((v) => v + conf.midpoint),\n            ]\n        })\n        .with(undefined, () => {\n            throw new Error(\"Invalid unresolved midpoint mode\")\n        })\n        .exhaustive()\n\n    return bins\n}\n\nconst runResolvedBinningStrategy = (\n    conf: ResolvedBinningStrategyConfig,\n    { hasMidpoint }: { hasMidpoint: boolean }\n): number[] => {\n    const { minValue, maxValue } = computeMinMaxForStrategy(\n        conf.strategy,\n        conf.sortedValues,\n        conf\n    )\n    return match(conf.strategy)\n        .when(isEqualSizeBinningStrategy, () =>\n            runEqualSizeBinningStrategy(\n                { ...conf, minValue, maxValue },\n                { hasMidpoint }\n            )\n        )\n        .when(isLogBinningStrategy, () =>\n            runLogBinningStrategy(\n                { ...conf, minValue, maxValue },\n                { hasMidpoint }\n            )\n        )\n        .exhaustive()\n}\n\nconst autoChooseBinningStrategy = (\n    conf: BinningStrategyConfig\n): ResolvedBinningStrategy => {\n    if (conf.midpointMode !== \"none\") {\n        return \"equalSizeBins-normal\"\n    }\n\n    const posValuesOnly = R.dropWhile(conf.sortedValues, (v) => v <= 0)\n    if (posValuesOnly.length === 0) {\n        // All values are negative or zero, use equal size bins as a simple fallback (this is rare anyways)\n        return \"equalSizeBins-normal\"\n    }\n\n    // If either minValue or maxValue is non-positive, we cannot use log bins\n    const hasNegativeMinOrMaxValue =\n        (conf.minValue !== undefined && conf.minValue <= 0) ||\n        (conf.maxValue !== undefined && conf.maxValue <= 0)\n\n    let minValueForLog, maxValueForLog\n    if (hasNegativeMinOrMaxValue) {\n        minValueForLog = maxValueForLog = 0\n    } else {\n        const { minValue, maxValue } = computeMinMaxForStrategy(\n            \"log-auto\",\n            posValuesOnly,\n            { minValue: conf.minValue, maxValue: conf.maxValue }\n        )\n        minValueForLog = minValue\n        maxValueForLog = maxValue\n    }\n\n    const magnitudeDiff = calcMagnitudeDiff(minValueForLog, maxValueForLog)\n\n    if (\n        magnitudeDiff < AUTO_EQUAL_BINS_MAX_MAGNITUDE_DIFF ||\n        hasNegativeMinOrMaxValue\n    ) {\n        if (conf.isPercent) {\n            const lastValue = lastOfNonEmptyArray(posValuesOnly)\n            const percentile99 = quantile(posValuesOnly, 0.99)\n            if (\n                lastValue <= 100 &&\n                percentile99 !== undefined &&\n                percentile99 >= 60\n            ) {\n                return \"equalSizeBins-percent\"\n            }\n        }\n\n        return \"equalSizeBins-normal\"\n    }\n\n    return \"log-auto\"\n}\n\nexport const mirrorBinsAroundMidpoint = (\n    binOffsets: number[],\n    midpoint: number\n): number[] => {\n    const filteredRightBins = binOffsets.filter((v) => v !== 0)\n    const leftBins = filteredRightBins.map((v) => midpoint - v).reverse()\n    const rightBins = filteredRightBins.map((v) => v + midpoint)\n    return [...leftBins, midpoint, ...rightBins]\n}\n","import * as _ from \"lodash-es\"\nimport { computed, toJS, makeObservable } from \"mobx\"\nimport { ColorScaleConfig } from \"./ColorScaleConfig\"\nimport { mapNullToUndefined, sortNumeric } from \"@ourworldindata/utils\"\nimport { pairs } from \"d3-array\"\nimport { ColorSchemes } from \"../color/ColorSchemes\"\nimport { ColorScheme } from \"../color/ColorScheme\"\nimport { ColorScaleBin, NumericBin, CategoricalBin } from \"./ColorScaleBin\"\nimport { OWID_NO_DATA_GRAY } from \"./ColorConstants\"\nimport {\n    ColorScaleConfigInterface,\n    ColorSchemeName,\n    Color,\n    CoreValueType,\n    OwidVariableRoundingMode,\n} from \"@ourworldindata/types\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\nimport * as R from \"remeda\"\nimport { runBinningStrategy } from \"./BinningStrategies.js\"\n\nexport const NO_DATA_LABEL = \"No data\"\nexport const PROJECTED_DATA_LABEL = \"Projected data\"\nexport const INAPPLICABLE_LABEL = \"Not applicable\"\n\nexport const INAPPLICABLE_COLOR = \"#ccc\"\n\nexport interface ColorScaleManager {\n    colorScaleConfig?: ColorScaleConfigInterface\n    hasNoDataBin?: boolean\n    hasProjectedDataBin?: boolean\n    hasInapplicableBin?: boolean\n    defaultNoDataColor?: string\n    defaultBaseColorScheme?: ColorSchemeName\n    colorScaleColumn?: CoreColumn\n}\n\nexport class ColorScale {\n    private readonly manager: Readonly<ColorScaleManager>\n    constructor(manager: ColorScaleManager = {}) {\n        makeObservable(this)\n        this.manager = manager\n    }\n\n    // Config accessors\n\n    @computed get config(): ColorScaleConfigInterface {\n        return this.manager.colorScaleConfig ?? new ColorScaleConfig()\n    }\n\n    @computed get customNumericValues(): number[] {\n        return this.config.customNumericValues ?? []\n    }\n\n    @computed get customNumericColorsActive(): boolean {\n        return this.config.customNumericColorsActive ?? false\n    }\n\n    @computed get customNumericColors(): (Color | undefined)[] {\n        return this.customNumericColorsActive\n            ? mapNullToUndefined(this.config.customNumericColors)\n            : []\n    }\n\n    @computed get customHiddenCategories(): {\n        [key: string]: true | undefined\n    } {\n        return this.config.customHiddenCategories ?? {}\n    }\n\n    @computed get customNumericLabels(): (string | undefined)[] {\n        if (!this.isManualBuckets) return []\n\n        const labels =\n            mapNullToUndefined(toJS(this.config.customNumericLabels)) || []\n        while (labels.length < this.numNumericBins) labels.push(undefined)\n        return labels\n    }\n\n    @computed get isColorSchemeInverted(): boolean {\n        return this.config.colorSchemeInvert ?? false\n    }\n\n    @computed private get customCategoryLabels(): {\n        [key: string]: string | undefined\n    } {\n        return this.config.customCategoryLabels ?? {}\n    }\n\n    @computed get baseColorScheme(): ColorSchemeName {\n        return (\n            this.config.baseColorScheme ??\n            this.manager.defaultBaseColorScheme ??\n            ColorSchemeName.BuGn\n        )\n    }\n\n    @computed private get defaultColorScheme(): ColorScheme {\n        return ColorSchemes.get(ColorSchemeName.BuGn)\n    }\n\n    @computed private get defaultNoDataColor(): Color {\n        return this.manager.defaultNoDataColor ?? OWID_NO_DATA_GRAY\n    }\n\n    @computed get colorScaleColumn(): CoreColumn | undefined {\n        return this.manager.colorScaleColumn\n    }\n\n    @computed get legendDescription(): string | undefined {\n        return this.config.legendDescription\n    }\n\n    // Transforms\n\n    @computed private get hasNoDataBin(): boolean {\n        return this.manager.hasNoDataBin || false\n    }\n\n    @computed private get hasProjectedDataBin(): boolean {\n        return this.manager.hasProjectedDataBin || false\n    }\n\n    @computed private get hasInapplicableBin(): boolean {\n        return this.manager.hasInapplicableBin || false\n    }\n\n    @computed get sortedNumericValues(): number[] {\n        return sortNumeric(\n            this.colorScaleColumn?.values.filter(R.isNumber) ?? []\n        )\n    }\n\n    @computed private get minPossibleValue(): number | undefined {\n        return R.first(this.sortedNumericValues)\n    }\n\n    @computed private get maxPossibleValue(): number | undefined {\n        return R.last(this.sortedNumericValues)\n    }\n\n    @computed private get categoricalValues(): string[] {\n        return this.colorScaleColumn?.sortedUniqNonEmptyStringVals ?? []\n    }\n\n    @computed private get colorScheme(): ColorScheme {\n        return ColorSchemes.get(this.baseColorScheme) ?? this.defaultColorScheme\n    }\n\n    @computed get singleColorScale(): boolean {\n        return this.colorScheme.singleColorScale\n    }\n\n    @computed private get manualBinThresholds(): number[] {\n        if (!this.sortedNumericValues.length || this.numNumericBins <= 0)\n            return []\n\n        return this.customNumericValues\n    }\n\n    // When automatic classification is turned on, this takes the numeric map data\n    // and works out some discrete ranges to assign colors to\n    @computed get autoBinThresholds(): number[] {\n        if (this.config.binningStrategy === \"manual\") {\n            throw new Error(\n                \"Cannot compute automatic bin thresholds when binning is set to manual\"\n            )\n        }\n        return runBinningStrategy({\n            sortedValues: this.sortedNumericValues,\n            isPercent: this.colorScaleColumn?.shortUnit === \"%\",\n            numDecimalPlaces: this.colorScaleColumn?.numDecimalPlaces,\n\n            strategy: this.config.binningStrategy,\n            createBinForMidpoint: this.config.createBinForMidpoint,\n            minValue: this.config.minValue,\n            maxValue: this.config.maxValue,\n            midpoint: this.config.midpoint,\n            midpointMode: this.config.midpointMode,\n        }).bins\n    }\n\n    @computed private get bucketThresholds(): number[] {\n        return this.isManualBuckets\n            ? this.manualBinThresholds\n            : this.autoBinThresholds\n    }\n\n    @computed private get customCategoryColors(): { [key: string]: Color } {\n        // Provide default colors for the injected \"No data\" and \"Not applicable\"\n        // bins. They're added conditionally so that a data category that happens\n        // to share their name isn't hijacked away from its color scheme color.\n        // Note that on maps, the \"No data\" bin is rendered as a pattern with a\n        // fixed color, so its bin color is only used in a few places, e.g. for\n        // entities that don't belong in any color group on scatters/marimekkos\n        // or for the admin's color scale editor. The \"Not applicable\" bin color\n        // is the background of its map pattern.\n        return {\n            ...(this.hasNoDataBin\n                ? { [NO_DATA_LABEL]: this.defaultNoDataColor }\n                : undefined),\n            ...(this.hasInapplicableBin\n                ? { [INAPPLICABLE_LABEL]: INAPPLICABLE_COLOR }\n                : undefined),\n            ...this.config.customCategoryColors,\n        }\n    }\n\n    @computed get noDataColor(): Color {\n        return (\n            this.customCategoryColors[NO_DATA_LABEL] ?? this.defaultNoDataColor\n        )\n    }\n\n    @computed get inapplicableColor(): Color {\n        return (\n            this.customCategoryColors[INAPPLICABLE_LABEL] ?? INAPPLICABLE_COLOR\n        )\n    }\n\n    @computed get noDataLabel(): string {\n        return this.customCategoryLabels[NO_DATA_LABEL] ?? NO_DATA_LABEL\n    }\n\n    @computed get inapplicableLabel(): string {\n        return (\n            this.customCategoryLabels[INAPPLICABLE_LABEL] ?? INAPPLICABLE_LABEL\n        )\n    }\n\n    @computed get baseColors(): Color[] {\n        const { categoricalValues, colorScheme, isColorSchemeInverted } = this\n        const numColors = this.numNumericBins + categoricalValues.length\n        const colors = colorScheme.getColors(numColors)\n\n        if (isColorSchemeInverted) return colors.toReversed()\n        else return colors\n    }\n\n    @computed get isManualBuckets(): boolean {\n        return this.config.binningStrategy === \"manual\"\n    }\n\n    @computed get numNumericBins(): number {\n        if (!this.sortedNumericValues.length) return 0\n\n        return this.isManualBuckets\n            ? Math.max(this.customNumericValues.length - 1, 0)\n            : this.autoBinThresholds.length - 1\n    }\n\n    @computed private get numericLegendBins(): NumericBin[] {\n        const {\n            customNumericLabels,\n            minPossibleValue,\n            maxPossibleValue,\n            customNumericColors,\n            bucketThresholds,\n            baseColors,\n        } = this\n\n        if (minPossibleValue === undefined || maxPossibleValue === undefined)\n            return []\n\n        return pairs(bucketThresholds).map(([min, max], index) => {\n            const baseColor = baseColors[index]\n            const color = customNumericColors[index] ?? baseColor\n            const label = customNumericLabels[index]\n\n            const roundingOptions = {\n                roundingMode: OwidVariableRoundingMode.decimalPlaces,\n            }\n            const displayMin =\n                this.colorScaleColumn?.formatValueShort(min, roundingOptions) ??\n                min.toString()\n            const displayMax =\n                this.colorScaleColumn?.formatValueShort(max, roundingOptions) ??\n                max.toString()\n\n            const isFirst = index === 0\n            const isLast = index === bucketThresholds.length - 2\n            return new NumericBin({\n                isFirst,\n                isOpenLeft: isFirst && min > minPossibleValue,\n                isOpenRight: isLast && max < maxPossibleValue,\n                min,\n                max,\n                color,\n                label,\n                displayMin,\n                displayMax,\n            })\n        })\n    }\n\n    @computed get legendBins(): ColorScaleBin[] {\n        // todo: turn comment into unit test\n        // Will eventually produce something like this:\n        // [{ min: 10, max: 20, minText: \"10%\", maxText: \"20%\", color: '#faeaef' },\n        //  { min: 20, max: 30, minText: \"20%\", maxText: \"30%\", color: '#fefabc' },\n        //  { value: 'Foobar', text: \"Foobar Boop\", color: '#bbbbbb'}]\n        return [\n            ...this.numericLegendBins,\n            ...this.categoricalLegendBins,\n        ] as ColorScaleBin[]\n    }\n\n    @computed get categoricalLegendBins(): CategoricalBin[] {\n        const {\n            bucketThresholds,\n            baseColors,\n            hasNoDataBin,\n            hasProjectedDataBin,\n            hasInapplicableBin,\n            categoricalValues,\n            customCategoryColors,\n            customCategoryLabels,\n            customHiddenCategories,\n            colorScheme,\n        } = this\n\n        let allCategoricalValues = categoricalValues\n\n        // The injected bins below must be appended _after_ the data-driven\n        // values: the color scheme allocates colors for the data values only,\n        // so injecting a bin earlier would shift every subsequent data value\n        // onto its neighbour's color.\n\n        // Inject \"Not applicable\" bin for the indicator's reference entity\n        if (\n            hasInapplicableBin &&\n            !allCategoricalValues.includes(INAPPLICABLE_LABEL)\n        ) {\n            allCategoricalValues = [...allCategoricalValues, INAPPLICABLE_LABEL]\n        }\n\n        // Inject \"No data\" bin\n        if (hasNoDataBin && !allCategoricalValues.includes(NO_DATA_LABEL)) {\n            allCategoricalValues = [...allCategoricalValues, NO_DATA_LABEL]\n        }\n\n        // Inject \"Projected data\" bin\n        if (hasProjectedDataBin) {\n            allCategoricalValues = [\n                ...allCategoricalValues,\n                PROJECTED_DATA_LABEL,\n            ]\n        }\n\n        return allCategoricalValues.map((value, index) => {\n            const boundingOffset = _.isEmpty(bucketThresholds)\n                ? 0\n                : bucketThresholds.length - 1\n\n            // Use colorMap if available and the value exists in it\n            let baseColor: Color | undefined\n            if (colorScheme.colorMap && value in colorScheme.colorMap) {\n                baseColor = colorScheme.colorMap[value]\n            } else {\n                baseColor = baseColors[index + boundingOffset]\n            }\n\n            const color = customCategoryColors[value] ?? baseColor\n            const label = customCategoryLabels[value] ?? value\n\n            return new CategoricalBin({\n                index,\n                value,\n                color,\n                label,\n                isHidden: !!customHiddenCategories[value],\n            })\n        })\n    }\n\n    getBinForValue(\n        value: CoreValueType | undefined\n    ): ColorScaleBin | undefined {\n        return value === undefined\n            ? undefined\n            : this.legendBins.find((bin) => bin.contains(value))\n    }\n\n    getColor(value: CoreValueType | undefined): string | undefined {\n        if (value === undefined) return this.noDataColor\n        return this.getBinForValue(value)?.color\n    }\n}\n","import * as _ from \"lodash-es\"\nimport { Color, CoreValueType } from \"@ourworldindata/types\"\nimport {\n    NO_DATA_LABEL,\n    INAPPLICABLE_LABEL,\n    PROJECTED_DATA_LABEL,\n} from \"./ColorScale\"\n\ninterface BinProps {\n    color: Color\n    label?: string\n    fillPatternRef?: string\n    overlayPatternRef?: string\n}\n\ninterface NumericBinProps extends BinProps {\n    isFirst: boolean\n    isOpenLeft: boolean\n    isOpenRight: boolean\n    min: number\n    max: number\n    displayMin: string\n    displayMax: string\n}\n\ninterface CategoricalBinProps extends BinProps {\n    index: number\n    value: string\n    label: string\n    isHidden?: boolean\n    // Values this bin matches in addition to `value`. Set only for merged\n    // legend bins (see `mergeCategoricalBinsByLabelAndColor`).\n    additionalValues?: string[]\n}\n\nabstract class AbstractColorScaleBin<T extends BinProps> {\n    props: T\n    constructor(props: T) {\n        this.props = props\n    }\n    get color(): string {\n        return this.props.color\n    }\n    get fillPatternRef(): string | undefined {\n        return this.props.fillPatternRef\n    }\n    get overlayPatternRef(): string | undefined {\n        return this.props.overlayPatternRef\n    }\n    get label(): string | undefined {\n        return this.props.label\n    }\n}\n\nexport class NumericBin extends AbstractColorScaleBin<NumericBinProps> {\n    get min(): number {\n        return this.props.min\n    }\n    get max(): number {\n        return this.props.max\n    }\n    get minText(): string {\n        if (this.props.isOpenLeft) return \"\"\n        return this.props.displayMin\n    }\n    get maxText(): string {\n        if (this.props.isOpenRight) return \"\"\n        return this.props.displayMax\n    }\n    get text(): string {\n        return this.props.label || \"\"\n    }\n    get isHidden(): boolean {\n        return false\n    }\n\n    contains(value: CoreValueType | undefined): boolean {\n        if (typeof value !== \"number\") return false\n\n        // In looking at this code, it is important to realise that `isOpenLeft`, `isOpenRight`,\n        // and `isFirst` are _not_ mutually exclusive.\n        // For example, if both `isOpenRight` and `isFirst` are set, then we effectively want `value >= min`.\n\n        // If the bin is left-open, we just need to check the right side\n        if (this.props.isOpenLeft && value <= this.max) return true\n\n        // If the bin is right-open, we just need to check the left side\n        if (this.props.isOpenRight && value > this.min) return true\n\n        // If this is the first bin of the chart, we want to include the `min` value and thus use greater-equals\n        if (this.props.isFirst) {\n            return value >= this.min && value <= this.max\n        } else {\n            return value > this.min && value <= this.max\n        }\n    }\n\n    equals(other: ColorScaleBin): boolean {\n        return (\n            other instanceof NumericBin &&\n            this.min === other.min &&\n            this.max === other.max\n        )\n    }\n}\n\nexport class CategoricalBin extends AbstractColorScaleBin<CategoricalBinProps> {\n    get index(): number {\n        return this.props.index\n    }\n    get value(): string {\n        return this.props.value\n    }\n    get isHidden(): boolean | undefined {\n        return this.props.isHidden\n    }\n\n    get text(): string {\n        return this.props.label || this.props.value\n    }\n\n    /** All values this bin matches: `value` plus any values absorbed by merging */\n    get values(): string[] {\n        return [this.props.value, ...(this.props.additionalValues ?? [])]\n    }\n\n    contains(\n        value: CoreValueType | undefined,\n        { isProjection = false, isInapplicable = false } = {}\n    ): boolean {\n        if (isInapplicable) return this.props.value === INAPPLICABLE_LABEL\n\n        return (\n            (value === undefined && this.props.value === NO_DATA_LABEL) ||\n            (value !== undefined &&\n                isProjection &&\n                this.props.value === PROJECTED_DATA_LABEL) ||\n            (value !== undefined && this.values.some((v) => v === value))\n        )\n    }\n\n    equals(other: ColorScaleBin): boolean {\n        return (\n            other instanceof CategoricalBin &&\n            this.props.index === other.props.index\n        )\n    }\n}\n\n/** Bins with the same key render identical legend swatches */\nfunction makeSwatchKey(bin: CategoricalBin): string {\n    return JSON.stringify([\n        bin.text,\n        bin.color,\n        bin.fillPatternRef,\n        bin.overlayPatternRef,\n    ])\n}\n\n/**\n * Merge categorical bins that share the same displayed label, color *and*\n * pattern into a single bin, preserving the order of first appearance. This\n * avoids showing multiple visually indistinguishable swatches in a legend when\n * several categories are given the same custom label and color.\n *\n * The merged bin keeps the first bin's props (index, color, label, pattern) and\n * additionally matches all the values of the bins it absorbs, so hovering it\n * still highlights every entity in any of the merged categories, and hovering\n * such an entity still resolves back to this one bin.\n *\n * Unlike `dedupeRepeatedBins`, which drops repeated copies of the same bin,\n * this merges distinct categories.\n */\nexport function mergeCategoricalBinsByLabelAndColor(\n    bins: CategoricalBin[]\n): CategoricalBin[] {\n    const binsByKey = new Map<string, CategoricalBin>()\n    for (const bin of bins) {\n        const key = makeSwatchKey(bin)\n        const existing = binsByKey.get(key)\n        if (existing) {\n            binsByKey.set(\n                key,\n                new CategoricalBin({\n                    ...existing.props,\n                    additionalValues: [\n                        ...(existing.props.additionalValues ?? []),\n                        ...bin.values,\n                    ],\n                })\n            )\n        } else {\n            binsByKey.set(key, bin)\n        }\n    }\n    return [...binsByKey.values()]\n}\n\n/**\n * Drop repeated occurrences of the same bin, e.g. the same category appearing\n * once per facet, keeping the first occurrence unchanged.\n */\nexport function dedupeRepeatedBins<Bin extends ColorScaleBin>(\n    bins: Bin[]\n): Bin[] {\n    return _.uniqWith(bins, (binA, binB): boolean => {\n        // For categorical bins, the `.equals()` method isn't good enough,\n        // because it only compares `.index`, which in this case can be\n        // identical even when the bins are not, because they are coming\n        // from different charts (facets).\n        if (binA instanceof CategoricalBin) {\n            return binA.text === binB.text\n        }\n        return binA.equals(binB)\n    })\n}\n\nexport function isCategoricalBin(bin: ColorScaleBin): bin is CategoricalBin {\n    return bin instanceof CategoricalBin\n}\n\nexport function isNumericBin(bin: ColorScaleBin): bin is NumericBin {\n    return bin instanceof NumericBin\n}\n\nexport function isNoDataBin(bin: ColorScaleBin): bin is CategoricalBin {\n    return isCategoricalBin(bin) && bin.value === NO_DATA_LABEL\n}\n\nexport function isProjectedDataBin(bin: ColorScaleBin): bin is CategoricalBin {\n    return isCategoricalBin(bin) && bin.value === PROJECTED_DATA_LABEL\n}\n\nexport function isInapplicableBin(bin: ColorScaleBin): bin is CategoricalBin {\n    return isCategoricalBin(bin) && bin.value === INAPPLICABLE_LABEL\n}\n\nexport function addPatternRefToBin<Bin extends ColorScaleBin>(\n    bin: Bin,\n    fillPatternRef: string\n): Bin {\n    return (\n        isCategoricalBin(bin)\n            ? new CategoricalBin({ ...bin.props, fillPatternRef })\n            : new NumericBin({ ...bin.props, fillPatternRef })\n    ) as Bin\n}\n\nexport type ColorScaleBin = CategoricalBin | NumericBin\n","import { observable, computed, makeObservable } from \"mobx\"\nimport {\n    trimObject,\n    ColumnSlug,\n    DimensionProperty,\n    OwidVariableId,\n    Persistable,\n    updatePersistables,\n    OwidVariableDisplayConfig,\n    OwidChartDimensionInterface,\n    Time,\n    deleteRuntimeAndUnchangedProps,\n    objectWithPersistablesToObject,\n    type PersistedObject,\n} from \"@ourworldindata/utils\"\nimport {\n    type SlugDimensionInterface,\n    type IndicatorDimensionInterface,\n    isIndicatorDimension,\n} from \"@ourworldindata/types\"\nimport { OwidTable, CoreColumn } from \"@ourworldindata/core-table\"\n\nexport interface LegacyDimensionsManager {\n    table: OwidTable\n}\n\ntype IndicatorSource = Pick<\n    IndicatorDimensionInterface,\n    \"variableId\" | \"targetYear\"\n>\ntype SlugSource = Pick<SlugDimensionInterface, \"slug\">\ntype DimensionSource = IndicatorSource | SlugSource\n\nconst isIndicatorSource = (\n    source: DimensionSource\n): source is IndicatorSource => \"variableId\" in source\n\nexport function getIndicatorColumnSlug({\n    variableId,\n    targetYear,\n}: IndicatorSource): ColumnSlug {\n    if (targetYear !== undefined) return `${variableId}-${targetYear}`\n    return variableId.toString()\n}\n\nclass ChartDimensionDefaults {\n    property!: DimensionProperty\n    display = new OwidVariableDisplayConfig()\n\n    constructor() {\n        makeObservable(this, {\n            property: observable,\n            display: observable,\n        })\n    }\n}\n\nexport class ChartDimension\n    extends ChartDimensionDefaults\n    implements Persistable\n{\n    source!: DimensionSource\n\n    // ES-private so toJS() in toObject() doesn't walk into the manager\n    readonly #manager: LegacyDimensionsManager\n\n    constructor(\n        obj: OwidChartDimensionInterface,\n        manager: LegacyDimensionsManager\n    ) {\n        super()\n        makeObservable(this, { source: observable.ref })\n        this.#manager = manager\n        this.updateFromObject(obj)\n    }\n\n    @computed private get table(): OwidTable {\n        return this.#manager.table\n    }\n\n    updateFromObject(obj: OwidChartDimensionInterface): void {\n        if (obj.variableId !== undefined && obj.slug !== undefined)\n            console.warn(\n                \"A dimension names both a variableId and a slug. Using the variableId and ignoring the slug, so the column is named after the indicator.\"\n            )\n        if (obj.display) updatePersistables(this, { display: obj.display })\n\n        this.property = obj.property\n        this.source = isIndicatorDimension(obj)\n            ? { variableId: obj.variableId, targetYear: obj.targetYear }\n            : { slug: obj.slug }\n    }\n\n    toObject(): OwidChartDimensionInterface {\n        const obj: PersistedObject<ChartDimensionDefaults> =\n            objectWithPersistablesToObject(this)\n        deleteRuntimeAndUnchangedProps(obj, new ChartDimensionDefaults())\n        return trimObject({ ...obj, ...this.source })\n    }\n\n    @computed private get indicatorSource(): IndicatorSource | undefined {\n        return isIndicatorSource(this.source) ? this.source : undefined\n    }\n\n    @computed get variableId(): OwidVariableId | undefined {\n        return this.indicatorSource?.variableId\n    }\n\n    @computed get column(): CoreColumn {\n        return this.table.get(this.columnSlug)\n    }\n\n    @computed get columnSlug(): ColumnSlug {\n        return isIndicatorSource(this.source)\n            ? getIndicatorColumnSlug(this.source)\n            : this.source.slug\n    }\n\n    @computed get targetYear(): Time | undefined {\n        return this.indicatorSource?.targetYear\n    }\n\n    set targetYear(value: Time | undefined) {\n        if (!isIndicatorSource(this.source)) {\n            if (value === undefined) return\n            throw new Error(\n                `Cannot pin host column \"${this.source.slug}\" to a year; targetYear needs a variableId dimension`\n            )\n        }\n        this.source = { ...this.source, targetYear: value }\n    }\n}\n","import * as _ from \"lodash-es\"\n\nexport type Fragment = {\n    text: string\n    separator: string\n}\n\nexport function splitIntoFragments(\n    text: string,\n    separators = [\" \"]\n): Fragment[] {\n    if (_.isEmpty(text)) return []\n    const fragments: Fragment[] = []\n    let currText = \"\"\n    for (const char of text) {\n        if (separators.includes(char)) {\n            fragments.push({ text: currText, separator: char })\n            currText = \"\"\n        } else {\n            currText += char\n        }\n    }\n    fragments.push({ text: currText, separator: \"\" })\n    return fragments\n}\n\nexport function joinFragments(fragments: Fragment[]): string {\n    return fragments\n        .map(({ text, separator }) => text + separator)\n        .join(\"\")\n        .trim()\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport {\n    stripHTML,\n    Bounds,\n    FontFamily,\n    VerticalAlign,\n    imemo,\n    type RequiredBy,\n} from \"@ourworldindata/utils\"\nimport { Fragment, joinFragments, splitIntoFragments } from \"./TextWrapUtils\"\nimport { match } from \"ts-pattern\"\n\ndeclare type FontSize = number\n\ninterface TextWrapOptions {\n    maxWidth: number\n    lineHeight?: number\n    fontSize: FontSize\n    fontWeight?: number\n    fontFamily?: FontFamily\n    separators?: string[]\n    rawHtml?: boolean\n    verticalAlign?: VerticalAlign\n}\n\ntype TextWrapProps = { text: string } & TextWrapOptions\n\ninterface WrapLine {\n    text: string\n    width: number\n    height: number\n}\n\ninterface OpenHtmlTag {\n    tag: string // e.g. \"a\" for an <a> tag, or \"span\" for a <span> tag\n    fullTag: string // e.g. \"<a href='https://ourworldindata.org'>\"\n}\n\nconst HTML_OPENING_CLOSING_TAG_REGEX = /<(\\/?)([A-Za-z]+)( [^<>]*)?>/g\n\nfunction startsWithNewline(text: string): boolean {\n    return text.startsWith(\"\\n\")\n}\n\n/**\n * Shortens text to fit within a target width using binary search.\n * Returns the longest substring that fits within the target width.\n */\nexport const shortenForTargetWidth = (\n    text: string,\n    targetWidth: number,\n    fontSettings: {\n        fontSize?: number\n        fontWeight?: number\n        fontFamily?: FontFamily\n    } = {}\n): string => {\n    // Use binary search to find the largest substring that fits within the target width\n    let low = 0\n    let high = text.length\n    while (low <= high) {\n        const mid = (high + low) >> 1\n        const bounds = Bounds.forText(text.slice(0, mid), fontSettings)\n        if (bounds.width < targetWidth) {\n            low = mid + 1\n        } else {\n            high = mid - 1\n        }\n    }\n    return text.slice(0, low - 1)\n}\n\n/** Shortens text to fit within the target width and appends an ellipsis (…) */\nexport const shortenWithEllipsis = (\n    text: string,\n    targetWidth: number,\n    fontSettings: {\n        fontSize?: number\n        fontWeight?: number\n        fontFamily?: FontFamily\n    } = {}\n): string => {\n    const ellipsis = \"…\"\n    const ellipsisWidth = Bounds.forText(ellipsis, fontSettings).width\n    const availableWidth = targetWidth - ellipsisWidth\n    if (availableWidth <= 0) return \"\"\n    const truncatedText = shortenForTargetWidth(\n        text,\n        availableWidth,\n        fontSettings\n    )\n    return `${truncatedText}${ellipsis}`\n}\n\nexport interface ITextWrap {\n    readonly width: number\n    readonly height: number\n    readonly lastLineWidth: number\n    readonly singleLineHeight: number\n    readonly maxWidth: number\n    readonly fontSize: number\n    readonly fontWeight: number | undefined\n    readonly fontFamily: FontFamily | undefined\n    readonly lineHeight: number\n    readonly verticalAlign: VerticalAlign\n    readonly text: string\n    getPositionForSvgRendering(x: number, y: number): [number, number]\n}\n\n/**\n * The SVG position of the first line's baseline for a text wrap anchored\n * at (x, y), such that the HTML and SVG renderers position lines identically.\n */\nexport function getTextPositionForSvgRendering(\n    textWrap: ITextWrap,\n    x: number,\n    y: number\n): [number, number] {\n    const { fontSize, lineHeight, height, verticalAlign } = textWrap\n\n    // Magic number set through experimentation.\n    // The HTML and SVG renderers need to position lines identically.\n    // This number was tweaked until the overlaid HTML and SVG outputs\n    // overlap.\n    const HEIGHT_CORRECTION_FACTOR = 0.74\n\n    const textHeight = fontSize * HEIGHT_CORRECTION_FACTOR\n    const containerHeight = lineHeight * fontSize\n    const correctedY =\n        y + (containerHeight - (containerHeight - textHeight) / 2)\n\n    const renderY = match(verticalAlign)\n        .with(VerticalAlign.top, () => correctedY - height)\n        .with(VerticalAlign.middle, () => correctedY - height / 2)\n        .with(VerticalAlign.bottom, () => correctedY)\n        .exhaustive()\n\n    return [x, renderY]\n}\n\nexport const sumTextWrapHeights = (\n    elements: ITextWrap[],\n    spacer: number = 0\n): number =>\n    _.sum(elements.map((element) => element.height)) +\n    (elements.length - 1) * spacer\n\nexport class TextWrap implements ITextWrap {\n    private static readonly defaultOptions = {\n        maxWidth: Infinity,\n        lineHeight: 1.1,\n        separators: [\" \"],\n        verticalAlign: VerticalAlign.bottom,\n    } as const satisfies Partial<TextWrapProps>\n\n    private readonly initialProps: TextWrapProps\n    constructor(props: TextWrapProps) {\n        this.initialProps = props\n    }\n\n    @imemo get props(): RequiredBy<\n        TextWrapProps,\n        keyof typeof TextWrap.defaultOptions\n    > {\n        return { ...TextWrap.defaultOptions, ...this.initialProps }\n    }\n\n    @imemo get maxWidth(): number {\n        return this.props.maxWidth\n    }\n    @imemo get lineHeight(): number {\n        return this.props.lineHeight\n    }\n    @imemo get fontSize(): FontSize {\n        return this.props.fontSize\n    }\n    @imemo get fontWeight(): number | undefined {\n        return this.props.fontWeight\n    }\n    @imemo get fontFamily(): FontFamily | undefined {\n        return this.props.fontFamily\n    }\n    @imemo get verticalAlign(): VerticalAlign {\n        return this.props.verticalAlign\n    }\n    @imemo get text(): string {\n        return this.props.text\n    }\n    @imemo get separators(): string[] {\n        return this.props.separators\n    }\n\n    // We need to take care that HTML tags are not split across lines.\n    // Instead, we want every line to have opening and closing tags for all tags that appear.\n    // This is so we don't produce invalid HTML.\n    processHtmlTags(lines: WrapLine[]): WrapLine[] {\n        const currentlyOpenTags: OpenHtmlTag[] = []\n        for (const line of lines) {\n            // Prepend any still-open tags to the start of the line\n            const prependOpenTags = currentlyOpenTags\n                .map((t) => t.fullTag)\n                .join(\"\")\n\n            const tagMatches = line.text.matchAll(\n                HTML_OPENING_CLOSING_TAG_REGEX\n            )\n            for (const tag of tagMatches) {\n                const isOpeningTag = tag[1] !== \"/\"\n                if (isOpeningTag) {\n                    currentlyOpenTags.push({\n                        tag: tag[2],\n                        fullTag: tag[0],\n                    })\n                } else {\n                    if (\n                        !currentlyOpenTags.length ||\n                        currentlyOpenTags.at(-1)?.tag !== tag[2]\n                    ) {\n                        throw new Error(\n                            \"TextWrap: Opening and closing HTML tags do not match\"\n                        )\n                    }\n                    currentlyOpenTags.pop()\n                }\n            }\n\n            // Append any unclosed tags to the end of the line\n            const appendCloseTags = currentlyOpenTags\n                .toReversed()\n                .map((t) => `</${t.tag}>`)\n                .join(\"\")\n            line.text = prependOpenTags + line.text + appendCloseTags\n        }\n        return lines\n    }\n\n    @imemo get lines(): WrapLine[] {\n        const { text, separators, maxWidth, fontSize, fontWeight, fontFamily } =\n            this\n\n        // Prepend spaces so that the string is also split before newline characters\n        // See startsWithNewline\n        const fragments = splitIntoFragments(\n            text.replace(/\\n/g, \" \\n\"),\n            separators\n        )\n\n        const lines: WrapLine[] = []\n\n        let line: Fragment[] = []\n        let lineBounds = Bounds.empty()\n\n        fragments.forEach((fragment) => {\n            const nextLine = line.concat([fragment])\n\n            // Strip HTML if a raw string is passed\n            const text = this.props.rawHtml\n                ? stripHTML(joinFragments(nextLine))\n                : joinFragments(nextLine)\n\n            const nextBounds = Bounds.forText(text, {\n                fontSize,\n                fontWeight,\n                fontFamily,\n            })\n\n            if (\n                startsWithNewline(fragment.text) ||\n                (nextBounds.width > maxWidth && line.length >= 1)\n            ) {\n                // Introduce a newline _before_ this word\n                lines.push({\n                    text: joinFragments(line),\n                    width: lineBounds.width,\n                    height: lineBounds.height,\n                })\n                // ... and start a new line with this word (with a potential leading newline stripped)\n                const wordWithoutNewline = fragment.text.replace(/^\\n/, \"\")\n                line = [\n                    {\n                        text: wordWithoutNewline,\n                        separator: fragment.separator,\n                    },\n                ]\n                lineBounds = Bounds.forText(wordWithoutNewline, {\n                    fontSize,\n                    fontWeight,\n                    fontFamily,\n                })\n            } else {\n                line = nextLine\n                lineBounds = nextBounds\n            }\n        })\n\n        // Push the last line\n        if (line.length > 0)\n            lines.push({\n                text: joinFragments(line),\n                width: lineBounds.width,\n                height: lineBounds.height,\n            })\n\n        // Process HTML to ensure that each opening tag has a matching closing tag _in each line_\n        if (this.props.rawHtml) return this.processHtmlTags(lines)\n        else return lines\n    }\n\n    @imemo get lineCount(): number {\n        return this.lines.length\n    }\n\n    @imemo get singleLineHeight(): number {\n        return this.fontSize * this.lineHeight\n    }\n\n    @imemo get height(): number {\n        if (this.lineCount === 0) return 0\n        return this.lineCount * this.singleLineHeight\n    }\n\n    @imemo get width(): number {\n        return _.max(this.lines.map((l) => l.width)) ?? 0\n    }\n\n    @imemo get lastLineWidth(): number {\n        return R.last(this.lines)?.width ?? 0\n    }\n\n    @imemo get htmlStyle(): any {\n        const { fontSize, fontWeight, lineHeight } = this\n        return {\n            fontSize: fontSize.toFixed(2) + \"px\",\n            fontWeight: fontWeight,\n            lineHeight: lineHeight,\n            overflowY: \"visible\",\n        }\n    }\n\n    getPositionForSvgRendering(x: number, y: number): [number, number] {\n        return getTextPositionForSvgRendering(this, x, y)\n    }\n}\n","import * as React from \"react\"\nimport { TextWrap } from \"./TextWrap\"\nimport { roundForSvg } from \"@ourworldindata/utils\"\n\nexport function TextWrapSvg({\n    textWrap,\n    x,\n    y,\n    id,\n    ...svgTextProps\n}: {\n    textWrap: TextWrap\n    x: number\n    y: number\n    id?: string\n} & React.SVGProps<SVGTextElement>): React.ReactElement {\n    const { lines, fontSize, fontWeight, singleLineHeight, props } = textWrap\n\n    if (lines.length === 0) return <></>\n\n    const [renderX, renderY] = textWrap.getPositionForSvgRendering(x, y)\n\n    return (\n        <text\n            id={id}\n            fontSize={roundForSvg(fontSize)}\n            fontWeight={fontWeight}\n            x={roundForSvg(renderX)}\n            y={roundForSvg(renderY)}\n            {...svgTextProps}\n        >\n            {lines.map((line, i) => {\n                const lineX = renderX\n                const lineY = renderY + singleLineHeight * i\n\n                if (props.rawHtml)\n                    return (\n                        <tspan\n                            key={i}\n                            x={roundForSvg(lineX)}\n                            y={roundForSvg(lineY)}\n                            dangerouslySetInnerHTML={{ __html: line.text }}\n                        />\n                    )\n                else\n                    return (\n                        <tspan\n                            key={i}\n                            x={roundForSvg(lineX)}\n                            y={roundForSvg(lineY)}\n                        >\n                            {line.text}\n                        </tspan>\n                    )\n            })}\n        </text>\n    )\n}\n\nexport function TextWrapHtml({\n    textWrap,\n}: {\n    textWrap: TextWrap\n}): React.ReactElement | null {\n    const { props, lines } = textWrap\n\n    if (lines.length === 0) return null\n\n    return (\n        <span>\n            {lines.map((line, index) => {\n                const content = props.rawHtml ? (\n                    <span\n                        dangerouslySetInnerHTML={{\n                            __html: line.text,\n                        }}\n                    />\n                ) : (\n                    <span>{line.text}</span>\n                )\n                return (\n                    <React.Fragment key={index}>\n                        {content}\n                        <br />\n                    </React.Fragment>\n                )\n            })}\n        </span>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport {\n    cssFontFamily,\n    excludeUndefined,\n    imemo,\n    Bounds,\n    FontFamily,\n} from \"@ourworldindata/utils\"\nimport * as R from \"remeda\"\n\nconst SUPERSCRIPT_NUMERALS = {\n    \"0\": \"\\u2070\",\n    \"1\": \"\\u00b9\",\n    \"2\": \"\\u00b2\",\n    \"3\": \"\\u00b3\",\n    \"4\": \"\\u2074\",\n    \"5\": \"\\u2075\",\n    \"6\": \"\\u2076\",\n    \"7\": \"\\u2077\",\n    \"8\": \"\\u2078\",\n    \"9\": \"\\u2079\",\n}\n\n/**\n * Baseline shift that makes Figma's SVG importer start a new text node.\n *\n * Figma merges runs on the same baseline into one text node and applies some\n * of its first run's styles, like the font family or a leading run's font\n * weight, to the whole node. It also ignores `dx` on the merged runs. The\n * shift is too small to be visible in browsers.\n */\nexport const FIGMA_TEXT_NODE_BREAK_DY = 0.01\n\nexport interface IRFontParams {\n    fontSize?: number\n    fontWeight?: number\n    fontFamily?: FontFamily\n    isItalic?: boolean\n}\n\nexport interface IRBreakpoint {\n    tokenIndex: number\n    tokenStartOffset: number\n    breakOffset: number\n}\n\nexport interface IRToken {\n    width: number\n    fontParams?: IRFontParams\n    getBreakpointBefore(targetWidth: number): IRBreakpoint | undefined\n    toHTML(key?: React.Key): React.ReactElement | undefined\n    toSVG(key?: React.Key): React.ReactElement | undefined\n    toPlaintext(): string | undefined\n}\n\nexport class IRText implements IRToken {\n    constructor(\n        public text: string,\n        public fontParams?: IRFontParams\n    ) {}\n    @imemo get width(): number {\n        return Bounds.forText(this.text, this.fontParams).width\n    }\n    @imemo get height(): number {\n        return this.fontParams?.fontSize || 13\n    }\n    getBreakpointBefore(): undefined {\n        return undefined\n    }\n    toHTML(key?: React.Key): React.ReactElement {\n        return <span key={key}>{this.text}</span>\n    }\n    toSVG(key?: React.Key): React.ReactElement {\n        return <React.Fragment key={key}>{this.text}</React.Fragment>\n    }\n    toPlaintext(): string {\n        return this.text\n    }\n}\n\nexport class IRWhitespace implements IRToken {\n    constructor(public fontParams?: IRFontParams) {}\n    @imemo get width(): number {\n        return Bounds.forText(\" \", this.fontParams).width\n    }\n    getBreakpointBefore(): IRBreakpoint {\n        // Have to give it some `breakOffset` because we designate locations\n        // to split based on it, and `0` leads to being exactly in between tokens.\n        return { tokenIndex: 0, tokenStartOffset: 0, breakOffset: 0.0001 }\n    }\n    toHTML(key?: React.Key): React.ReactElement {\n        return <span key={key}> </span>\n    }\n    toSVG(key?: React.Key): React.ReactElement {\n        return <React.Fragment key={key}> </React.Fragment>\n    }\n    toPlaintext(): string {\n        return \" \"\n    }\n}\n\nexport class IRLineBreak implements IRToken {\n    get width(): number {\n        return 0\n    }\n    getBreakpointBefore(): undefined {\n        return undefined\n    }\n    toHTML(key?: React.Key): React.ReactElement {\n        return <br key={key} />\n    }\n    toSVG(): undefined {\n        // We have to deal with this special case in\n        // whatever procedure does text reflow.\n        return undefined\n    }\n    toPlaintext(): string {\n        return \"\\n\"\n    }\n}\n\nexport abstract class IRElement implements IRToken {\n    constructor(\n        public children: IRToken[],\n        public fontParams?: IRFontParams\n    ) {}\n\n    @imemo get width(): number {\n        return getLineWidth(this.children)\n    }\n\n    getBreakpointBefore(targetWidth: number): IRBreakpoint | undefined {\n        return getBreakpointBefore(this.children, targetWidth)\n    }\n\n    splitBefore(maxWidth: number): {\n        before: IRToken | undefined\n        after: IRToken | undefined\n    } {\n        const { before, after } = splitLineAtBreakpoint(this.children, maxWidth)\n        return {\n            // do not create tokens without children\n            before: before.length ? this.getClone(before) : undefined,\n            after: after.length ? this.getContinuationClone(after) : undefined,\n        }\n    }\n\n    splitOnLineBreaks(): IRToken[][] {\n        const lines = splitAllOnNewline(this.children)\n        if (lines.length > 1) {\n            return lines.map((tokens, index) =>\n                // Do not create a clone without children.\n                // There aren't any children in a line when the first or last\n                // token is a newline.\n                tokens.length\n                    ? [\n                          index === 0\n                              ? this.getClone(tokens)\n                              : this.getContinuationClone(tokens),\n                      ]\n                    : []\n            )\n        }\n        // Do not create copies of element\n        // if there are no newlines inside.\n        return [[this]]\n    }\n\n    abstract getClone(children: IRToken[]): IRElement\n\n    /**\n     * Clone holding the part of this element that continues on a new line\n     * after a wrap or line break. Same as `getClone` except that elements\n     * carrying gaps relative to the preceding content drop them here.\n     */\n    getContinuationClone(children: IRToken[]): IRElement {\n        return this.getClone(children)\n    }\n    abstract toHTML(key?: React.Key): React.ReactElement\n    abstract toSVG(key?: React.Key): React.ReactElement\n\n    toPlaintext(): string {\n        return lineToPlaintext(this.children)\n    }\n}\n\nexport class IRBold extends IRElement {\n    getClone(children: IRToken[]): IRBold {\n        return new IRBold(children, this.fontParams)\n    }\n    toHTML(key?: React.Key): React.ReactElement {\n        return (\n            <strong key={key}>\n                {this.children.map((child, i) => child.toHTML(i))}\n            </strong>\n        )\n    }\n    toSVG(key?: React.Key): React.ReactElement {\n        return (\n            <tspan key={key} style={{ fontWeight: 700 }}>\n                {this.children.map((child, i) => child.toSVG(i))}\n            </tspan>\n        )\n    }\n}\n\nexport class IRSpan extends IRElement {\n    getClone(children: IRToken[]): IRSpan {\n        return new IRSpan(children, this.fontParams)\n    }\n    toHTML(key?: React.Key): React.ReactElement {\n        return (\n            <span key={key}>\n                {this.children.map((child, i) => child.toHTML(i))}\n            </span>\n        )\n    }\n    toSVG(key?: React.Key): React.ReactElement {\n        return (\n            <tspan key={key}>\n                {this.children.map((child, i) => child.toSVG(i))}\n            </tspan>\n        )\n    }\n}\n\nexport interface IRFragmentStyle {\n    fontSize?: number\n    fontFamily?: FontFamily\n    fontWeight?: number\n    color?: string\n}\n\n/** Wraps the tokens of a single TextWrapGroup fragment */\nexport class IRFragment extends IRElement {\n    constructor(\n        public fragmentIndex: number,\n        children: IRToken[],\n        public styleDelta: IRFragmentStyle = {},\n        fontParams?: IRFontParams,\n        /** Horizontal space before the fragment on its line */\n        public inlineGap: number = 0,\n        /**\n         * Vertical space between the preceding line and the fragment's\n         * first line. It can't be rendered by an inline element; it is\n         * applied per line instead\n         */\n        public lineGap: number = 0\n    ) {\n        super(children, fontParams)\n    }\n    @imemo override get width(): number {\n        return this.inlineGap + getLineWidth(this.children)\n    }\n    /**\n     * Width of the space that opens the fragment's SVG run as part of its\n     * inline gap. Figma's SVG importer drops `dx` on runs it merges into one\n     * text node, so the gap can't be rendered by `dx` alone\n     */\n    @imemo private get leadingSpaceWidth(): number {\n        if (!this.inlineGap) return 0\n        return Math.min(\n            this.inlineGap,\n            Bounds.forText(\" \", this.fontParams).width\n        )\n    }\n    /**\n     * The inherited implementation operates on the children alone, but this\n     * fragment's width includes the inline gap, so breakpoints need to be\n     * shifted by the gap. The gap itself is a break opportunity (like the\n     * whitespace it replaces): if no internal breakpoint fits, the line may\n     * break right before the fragment.\n     */\n    override getBreakpointBefore(\n        targetWidth: number\n    ): IRBreakpoint | undefined {\n        if (!this.inlineGap) return super.getBreakpointBefore(targetWidth)\n        const internal = super.getBreakpointBefore(targetWidth - this.inlineGap)\n        if (internal && internal.breakOffset + this.inlineGap <= targetWidth)\n            return {\n                ...internal,\n                breakOffset: internal.breakOffset + this.inlineGap,\n            }\n        return { tokenIndex: 0, tokenStartOffset: 0, breakOffset: 0.0001 }\n    }\n    override splitBefore(maxWidth: number): {\n        before: IRToken | undefined\n        after: IRToken | undefined\n    } {\n        if (!this.inlineGap) return super.splitBefore(maxWidth)\n        // A break width within the gap moves the whole fragment to the next\n        // line, where it continues without the gap\n        if (maxWidth <= this.inlineGap)\n            return {\n                before: undefined,\n                after: this.getContinuationClone(this.children),\n            }\n        const { before, after } = splitLineAtBreakpoint(\n            this.children,\n            maxWidth - this.inlineGap\n        )\n        return {\n            before: before.length ? this.getClone(before) : undefined,\n            after: after.length ? this.getContinuationClone(after) : undefined,\n        }\n    }\n    getClone(children: IRToken[]): IRFragment {\n        return new IRFragment(\n            this.fragmentIndex,\n            children,\n            this.styleDelta,\n            this.fontParams,\n            this.inlineGap,\n            this.lineGap\n        )\n    }\n    override getContinuationClone(children: IRToken[]): IRFragment {\n        // The gaps space the fragment from the preceding content, so they\n        // don't carry over to continuation lines when the fragment wraps\n        return new IRFragment(\n            this.fragmentIndex,\n            children,\n            this.styleDelta,\n            this.fontParams\n        )\n    }\n    toHTML(key?: React.Key): React.ReactElement {\n        const children = this.children.map((child, i) => child.toHTML(i))\n        if (_.isEmpty(this.styleDelta) && !this.inlineGap)\n            return <React.Fragment key={key}>{children}</React.Fragment>\n        const { fontSize, fontFamily, fontWeight, color } = this.styleDelta\n        return (\n            <span\n                key={key}\n                style={{\n                    display: \"inline-block\",\n                    marginLeft: this.inlineGap || undefined,\n                    // Keep the fragment out of the line box calculation. The\n                    // line it sits on is already exactly as tall as this text\n                    // wrap says it is (its strut is the line's largest font\n                    // size times the line height), but a fragment rendered in\n                    // a different font can have its baseline sit low enough\n                    // within its own inline box for that box to poke out\n                    // below the strut and stretch the line. How far depends\n                    // on the font metrics the browser reads, so the same\n                    // fragment stretches the line in one browser and not in\n                    // another; zeroing the line height takes the fragment's\n                    // box out of the calculation without moving its glyphs,\n                    // which are positioned off the shared baseline.\n                    lineHeight: 0,\n                    fontSize,\n                    fontWeight,\n                    fontFamily: fontFamily\n                        ? cssFontFamily(fontFamily)\n                        : undefined,\n                    color,\n                }}\n            >\n                {children}\n            </span>\n        )\n    }\n    toSVG(key?: React.Key): React.ReactElement {\n        const children = this.children.map((child, i) => child.toSVG(i))\n        if (_.isEmpty(this.styleDelta) && !this.inlineGap)\n            return <React.Fragment key={key}>{children}</React.Fragment>\n        const { fontSize, fontFamily, fontWeight, color } = this.styleDelta\n        return (\n            <tspan\n                key={key}\n                dx={this.inlineGap - this.leadingSpaceWidth || undefined}\n                xmlSpace={this.inlineGap ? \"preserve\" : undefined}\n                fontSize={fontSize}\n                fontWeight={fontWeight}\n                fontFamily={fontFamily ? cssFontFamily(fontFamily) : undefined}\n                fill={color}\n            >\n                {this.inlineGap ? \" \" : null}\n                {children}\n            </tspan>\n        )\n    }\n}\n\nexport class IRSuperscript implements IRToken {\n    constructor(\n        public text: string,\n        public fontParams?: IRFontParams\n    ) {}\n    @imemo get width(): number {\n        return Bounds.forText(this.text, { fontSize: this.height / 2 }).width\n    }\n    @imemo get height(): number {\n        return this.fontParams?.fontSize || 16\n    }\n    getBreakpointBefore(): undefined {\n        return undefined\n    }\n    toHTML(key?: React.Key): React.ReactElement {\n        return <sup key={key}>{this.text}</sup>\n    }\n    toSVG(key?: React.Key): React.ReactElement {\n        // replace numerals with literals, for everything else let the font-feature handle it\n        const style = { fontFeatureSettings: '\"sups\"' }\n        const text = this.text.replace(/./g, (c) =>\n            _.get(SUPERSCRIPT_NUMERALS, c, c)\n        )\n        return (\n            <React.Fragment key={key}>\n                <tspan style={style}>{text}</tspan>\n            </React.Fragment>\n        )\n    }\n    toPlaintext(): string {\n        return this.text\n    }\n}\n\nexport class IRItalic extends IRElement {\n    getClone(children: IRToken[]): IRItalic {\n        return new IRItalic(children, this.fontParams)\n    }\n    toHTML(key?: React.Key): React.ReactElement {\n        return (\n            <em key={key}>\n                {this.children.map((child, i) => child.toHTML(i))}\n            </em>\n        )\n    }\n    toSVG(key?: React.Key): React.ReactElement {\n        return (\n            <tspan key={key} style={{ fontStyle: \"italic\" }}>\n                {this.children.map((child, i) => child.toSVG(i))}\n            </tspan>\n        )\n    }\n}\n\nexport class IRLink extends IRElement {\n    constructor(\n        public href: string,\n        children: IRToken[],\n        fontParams?: IRFontParams\n    ) {\n        super(children, fontParams)\n    }\n    getClone(children: IRToken[]): IRLink {\n        return new IRLink(this.href, children, this.fontParams)\n    }\n    toHTML(key?: React.Key): React.ReactElement {\n        return (\n            <a key={key} href={this.href}>\n                {this.children.map((child, i) => child.toHTML(i))}\n            </a>\n        )\n    }\n    toSVG(key?: React.Key): React.ReactElement {\n        return (\n            <a\n                key={key}\n                href={this.href}\n                style={{ textDecoration: \"underline\" }}\n            >\n                {this.children.map((child, i) => child.toSVG(i))}\n            </a>\n        )\n    }\n}\n\nexport class IRDetailOnDemand extends IRElement {\n    constructor(\n        public term: string,\n        children: IRToken[],\n        fontParams?: IRFontParams\n    ) {\n        super(children, fontParams)\n    }\n    getClone(children: IRToken[]): IRDetailOnDemand {\n        return new IRDetailOnDemand(this.term, children, this.fontParams)\n    }\n    toHTML(key?: React.Key): React.ReactElement {\n        return (\n            <span\n                key={key}\n                className=\"dod-span\"\n                data-id={this.term}\n                tabIndex={0}\n            >\n                {this.children.map((child, i) => child.toHTML(i))}\n            </span>\n        )\n    }\n    toSVG(key?: React.Key): React.ReactElement {\n        return (\n            <tspan key={key} className=\"dod-span\" data-id={this.term}>\n                {this.children.map((child, i) => child.toSVG(i))}\n            </tspan>\n        )\n    }\n}\n\nfunction splitAllOnNewline(tokens: IRToken[]): IRToken[][] {\n    if (!tokens.length) return []\n    let currentLine: IRToken[] = []\n    const lines: IRToken[][] = [currentLine]\n    const unproccessed: IRToken[] = [...tokens]\n    while (unproccessed.length > 0) {\n        const token = unproccessed.shift()!\n        if (token instanceof IRElement) {\n            const [firstLine, ...otherLines] = token.splitOnLineBreaks()\n            if (firstLine) currentLine.push(...firstLine)\n            if (otherLines.length) {\n                lines.push(...otherLines)\n                currentLine = R.last(lines)!\n            }\n        } else if (token instanceof IRLineBreak) {\n            currentLine = []\n            lines.push(currentLine)\n        } else {\n            currentLine.push(token)\n        }\n    }\n    return lines\n}\n\nexport function splitLineAtBreakpoint(\n    tokens: IRToken[],\n    breakWidth: number\n): { before: IRToken[]; after: IRToken[] } {\n    let i = 0\n    let offset = 0\n    // finding the token where the split should be\n    // NOTE: the token may not be splittable, which is why we need an exact\n    // `breakWidth` provided, not the line width.\n    while (i < tokens.length - 1 && offset + tokens[i].width < breakWidth) {\n        offset += tokens[i].width\n        i++\n    }\n    const token = tokens[i]\n    if (token instanceof IRElement) {\n        const { before, after } = token.splitBefore(breakWidth - offset)\n        return {\n            before: excludeUndefined([...tokens.slice(0, i), before]),\n            after: excludeUndefined([after, ...tokens.slice(i + 1)]),\n        }\n    } else {\n        return { before: tokens.slice(0, i), after: trimLeft(tokens.slice(i)) }\n    }\n}\n\nfunction trimLeft(tokens: IRToken[]): IRToken[] {\n    let i = 0\n    while (i < tokens.length && tokens[i] instanceof IRWhitespace) {\n        i++\n    }\n    return tokens.slice(i)\n}\n\n// Even though it says \"before\", it may return a breakpoint after, because\n// there is no earlier breakpoint in the line.\nexport function getBreakpointBefore(\n    tokens: IRToken[],\n    maxWidth: number\n): IRBreakpoint | undefined {\n    let tokenStartOffset = 0\n    let prevBreakpoint: IRBreakpoint | undefined = undefined\n    for (let index = 0; index < tokens.length; index++) {\n        const token = tokens[index]\n        const candidate = token.getBreakpointBefore(maxWidth - tokenStartOffset)\n        if (candidate !== undefined) {\n            if (\n                prevBreakpoint &&\n                candidate.breakOffset + tokenStartOffset > maxWidth\n            ) {\n                break\n            }\n            prevBreakpoint = {\n                tokenStartOffset,\n                tokenIndex: index,\n                breakOffset: candidate.breakOffset + tokenStartOffset,\n            }\n        }\n        tokenStartOffset += token.width\n    }\n    return prevBreakpoint\n}\n\nexport function getLineWidth(tokens: IRToken[]): number {\n    return _.sum(tokens.map((token) => token.width))\n}\n\n/**\n * The largest font size of any token on the line, or `undefined` if none of\n * the tokens specifies a font size.\n */\nexport function getLineFontSize(tokens: IRToken[]): number | undefined {\n    const tokenFontSize = (token: IRToken): number => {\n        const ownFontSize = token.fontParams?.fontSize ?? 0\n        const childrenFontSize =\n            token instanceof IRElement\n                ? (_.max(token.children.map(tokenFontSize)) ?? 0)\n                : 0\n        return Math.max(ownFontSize, childrenFontSize)\n    }\n    const maxFontSize = _.max(tokens.map(tokenFontSize)) ?? 0\n    return maxFontSize > 0 ? maxFontSize : undefined\n}\n\n/**\n * Extra vertical space (in px) above the line: the largest line gap of any\n * fragment on the line. Fragments carry a line gap when they were placed on\n * a new line with an explicit gap; it is rendered as a line margin (HTML)\n * or an extra baseline offset (SVG).\n */\nexport function getLineGap(tokens: IRToken[]): number {\n    return (\n        _.max(\n            tokens.map((token) =>\n                token instanceof IRFragment ? token.lineGap : 0\n            )\n        ) ?? 0\n    )\n}\n\n/**\n * Horizontal extents of all details-on-demand tokens on a line, relative to\n * the line's start. Recurses into container elements (fragments, bold, ...)\n * since DoDs may be arbitrarily nested, but not into the DoDs themselves.\n */\nexport function getDodUnderlineSegments(\n    tokens: IRToken[],\n    startOffset: number = 0\n): { x: number; width: number }[] {\n    const segments: { x: number; width: number }[] = []\n    let offset = startOffset\n    for (const token of tokens) {\n        if (token instanceof IRDetailOnDemand) {\n            segments.push({ x: offset, width: token.width })\n        } else if (token instanceof IRElement) {\n            // a fragment's children start after its inline gap\n            const inlineGap = token instanceof IRFragment ? token.inlineGap : 0\n            segments.push(\n                ...getDodUnderlineSegments(token.children, offset + inlineGap)\n            )\n        }\n        offset += token.width\n    }\n    return segments\n}\n\n// useful for debugging\nexport function lineToPlaintext(tokens: IRToken[]): string {\n    return tokens.map((t) => t.toPlaintext()).join(\"\")\n}\n\nexport const isTextToken = (token: IRToken): token is IRText | IRWhitespace =>\n    token instanceof IRText || token instanceof IRWhitespace\n\n/**\n * Merges adjacent text tokens, because the way we render text in React is otherwise\n * not very compatible with Google Translate, breaking our site in weird ways when\n * translated.\n * This is to be run _just before_ rendering to HTML, because it loses some\n * information and is not easily reversible.\n * See also https://github.com/owid/owid-grapher/issues/1785\n */\nexport const recursiveMergeTextTokens = (\n    tokens: IRToken[],\n    fontParams?: IRFontParams\n): IRToken[] => {\n    if (tokens.length === 0) return []\n\n    // merge adjacent text tokens into one\n    const mergedTextTokens: IRToken[] = tokens.reduce((acc, token) => {\n        if (isTextToken(token)) {\n            const l = R.last(acc)\n            if (l && isTextToken(l)) {\n                // replace last value in acc with merged text token\n                acc.pop()\n                return [\n                    ...acc,\n                    new IRText(\n                        l.toPlaintext() + token.toPlaintext(),\n                        fontParams\n                    ),\n                ]\n            }\n        }\n        return [...acc, token]\n    }, [] as IRToken[])\n\n    // recursively enter non-text tokens, and merge their children;\n    // elements that carry their own fontParams (e.g. IRFragment) pass those\n    // down so merged text keeps the correct measurement params\n    return mergedTextTokens.map((token) => {\n        if (token instanceof IRElement) {\n            return token.getClone(\n                recursiveMergeTextTokens(\n                    token.children,\n                    token.fontParams ?? fontParams\n                )\n            )\n        }\n        return token\n    })\n}\n\nexport function splitIntoLines(\n    tokens: IRToken[],\n    maxWidth: number\n): IRToken[][] {\n    const processedLines: IRToken[][] = []\n    const unprocessedLines: IRToken[][] = splitAllOnNewline(tokens)\n    while (unprocessedLines.length) {\n        const currentLine = unprocessedLines.shift()!\n        if (getLineWidth(currentLine) <= maxWidth) {\n            processedLines.push(currentLine)\n        } else {\n            const breakpoint = getBreakpointBefore(currentLine, maxWidth)\n            if (!breakpoint) {\n                processedLines.push(currentLine)\n            } else {\n                const { before, after } = splitLineAtBreakpoint(\n                    currentLine,\n                    breakpoint.breakOffset\n                )\n                processedLines.push(before)\n                unprocessedLines.unshift(after)\n            }\n        }\n    }\n    return processedLines\n}\n\n/**\n * Tokenizes plain text without any markdown parsing, so that literal markdown\n * characters (e.g. `*`, `_`, `[`) are preserved verbatim. Newlines become\n * hard line breaks.\n */\nexport function convertPlaintextToIRTokens(\n    text: string,\n    fontParams?: IRFontParams\n): IRToken[] {\n    const lines = text.split(\"\\n\")\n    return lines.flatMap((line, lineIndex) => {\n        const words = line.split(/\\s+/).filter((word) => word.length > 0)\n        const tokens: IRToken[] = words.flatMap((word, wordIndex) =>\n            wordIndex < words.length - 1\n                ? [new IRText(word, fontParams), new IRWhitespace(fontParams)]\n                : [new IRText(word, fontParams)]\n        )\n        return lineIndex < lines.length - 1\n            ? [...tokens, new IRLineBreak()]\n            : tokens\n    })\n}\n\nexport function appendReferenceNumbers(\n    tokens: IRToken[],\n    references: string[]\n): IRToken[] {\n    function traverse(token: IRToken, callback: (token: IRToken) => any): any {\n        if (token instanceof IRElement) {\n            token.children.flatMap((child) => traverse(child, callback))\n        }\n        return callback(token)\n    }\n\n    const appendedTokens: IRToken[] = _.cloneDeep(tokens).flatMap((token) =>\n        traverse(token, (token: IRToken) => {\n            if (token instanceof IRDetailOnDemand) {\n                const referenceIndex =\n                    references.findIndex((term) => term === token.term) + 1\n                if (referenceIndex === 0) return token\n                token.children.push(\n                    new IRSuperscript(String(referenceIndex), token.fontParams)\n                )\n            }\n            return token\n        })\n    )\n\n    return appendedTokens\n}\n","import * as _ from \"lodash-es\"\nimport { CSSProperties } from \"react\"\nimport {\n    cssFontFamily,\n    imemo,\n    FontFamily,\n    VerticalAlign,\n    type RequiredBy,\n} from \"@ourworldindata/utils\"\nimport * as R from \"remeda\"\nimport {\n    getTextPositionForSvgRendering,\n    type ITextWrap,\n} from \"../TextWrap/TextWrap.js\"\nimport {\n    appendReferenceNumbers,\n    getLineFontSize,\n    getLineGap,\n    lineToPlaintext,\n    recursiveMergeTextTokens,\n    splitIntoLines,\n    type IRFontParams,\n    type IRToken,\n} from \"./IRTokens.js\"\n\nexport interface TokenTextWrapOptions {\n    maxWidth: number\n    lineHeight: number\n    fontSize: number\n    fontWeight?: number\n    fontFamily?: FontFamily\n    verticalAlign: VerticalAlign\n    style?: CSSProperties\n    detailsOrderedByReference: string[]\n}\n\nexport type TokenTextWrapProps = {\n    fontSize: number\n    maxWidth?: number\n    lineHeight?: number\n    fontWeight?: number\n    fontFamily?: FontFamily\n    verticalAlign?: VerticalAlign\n    style?: CSSProperties\n    detailsOrderedByReference?: string[]\n}\n\n/**\n * Base class for text wraps that lay out a stream of IR tokens.\n *\n * Subclasses only provide the token stream (via the abstract `text` and\n * `tokens` getters); this class implements everything downstream of it:\n * - line-splitting against `maxWidth` (`htmlLines`, `svgLines`)\n * - metrics (`width`, `height`, `lineCount`, per-line heights and gaps)\n *\n * Known subclasses: `MarkdownTextWrap` (tokens parsed from a markdown string)\n * and `TextWrapGroup` (tokens assembled from multiple fragments).\n */\nexport abstract class AbstractTokenTextWrap<\n    Props extends TokenTextWrapProps = TokenTextWrapProps,\n> implements ITextWrap {\n    protected static readonly defaultOptions = {\n        maxWidth: Infinity,\n        lineHeight: 1.1,\n        verticalAlign: VerticalAlign.bottom,\n        detailsOrderedByReference: [] as string[],\n    } as const satisfies Partial<TokenTextWrapProps>\n\n    protected readonly initialProps: Props\n    constructor(props: Props) {\n        this.initialProps = props\n    }\n\n    // `defaultOptions` must not be `private`: private statics lose their\n    // inferred type in the emitted declaration file, which would make the\n    // `keyof typeof` below degenerate to `string | number | symbol` for\n    // package consumers (protected members keep their types).\n    @imemo get props(): RequiredBy<\n        Props,\n        keyof typeof AbstractTokenTextWrap.defaultOptions\n    > {\n        return {\n            ...AbstractTokenTextWrap.defaultOptions,\n            ...this.initialProps,\n        }\n    }\n\n    protected get options(): TokenTextWrapOptions {\n        // The cast is safe since the defaults guarantee that all required\n        // options are set, but TS can't verify this for a generic Props\n        return this.props as TokenTextWrapOptions\n    }\n\n    abstract get text(): string\n    abstract get tokens(): IRToken[]\n\n    @imemo get maxWidth(): number {\n        return this.options.maxWidth\n    }\n\n    @imemo get lineHeight(): number {\n        return this.options.lineHeight\n    }\n\n    @imemo get fontSize(): number {\n        return this.options.fontSize\n    }\n\n    @imemo get fontWeight(): number | undefined {\n        return this.options.fontWeight\n    }\n\n    @imemo get fontFamily(): FontFamily | undefined {\n        return this.options.fontFamily\n    }\n\n    @imemo get verticalAlign(): VerticalAlign {\n        return this.options.verticalAlign\n    }\n\n    @imemo get detailsOrderedByReference(): string[] {\n        return this.options.detailsOrderedByReference\n    }\n\n    @imemo get fontParams(): IRFontParams {\n        return {\n            fontFamily: this.fontFamily,\n            fontSize: this.fontSize,\n            fontWeight: this.fontWeight,\n        }\n    }\n\n    @imemo get plaintext(): string {\n        return this.htmlLines.map(lineToPlaintext).join(\"\\n\")\n    }\n\n    @imemo get htmlLines(): IRToken[][] {\n        const lines = splitIntoLines(this.tokens, this.maxWidth)\n        return lines.map((line) =>\n            recursiveMergeTextTokens(line, this.fontParams)\n        )\n    }\n\n    @imemo get svgLines(): IRToken[][] {\n        return splitIntoLines(this.tokens, this.maxWidth)\n    }\n\n    @imemo get svgLinesWithDodReferenceNumbers(): IRToken[][] {\n        const tokensWithReferenceNumbers = appendReferenceNumbers(\n            this.tokens,\n            this.detailsOrderedByReference\n        )\n        return splitIntoLines(tokensWithReferenceNumbers, this.maxWidth)\n    }\n\n    @imemo get width(): number {\n        const { htmlLines } = this\n        const lineLengths = htmlLines.map((tokens) =>\n            _.sumBy(tokens, (token) => token.width)\n        )\n        return _.max(lineLengths) ?? 0\n    }\n\n    @imemo get singleLineHeight(): number {\n        return this.fontSize * this.lineHeight\n    }\n\n    @imemo get lastLineWidth(): number {\n        return _.sumBy(R.last(this.htmlLines), (token) => token.width) ?? 0\n    }\n\n    @imemo get lineCount(): number {\n        return this.svgLines.length\n    }\n\n    getLineHeight(line: IRToken[]): number {\n        return (getLineFontSize(line) ?? this.fontSize) * this.lineHeight\n    }\n\n    /** Per-line line heights */\n    @imemo get lineHeights(): number[] {\n        return this.htmlLines.map((line) => this.getLineHeight(line))\n    }\n\n    /** Extra vertical space above each line */\n    @imemo get lineGaps(): number[] {\n        return this.htmlLines.map((line) => getLineGap(line))\n    }\n\n    @imemo get height(): number {\n        return _.sum(this.lineHeights) + _.sum(this.lineGaps)\n    }\n\n    @imemo get style(): CSSProperties {\n        return {\n            fontSize: this.fontSize,\n            fontWeight: this.fontWeight,\n            fontFamily: this.fontFamily\n                ? cssFontFamily(this.fontFamily)\n                : undefined,\n            ...this.options.style,\n            lineHeight: this.lineHeight,\n        }\n    }\n\n    getPositionForSvgRendering(x: number, y: number): [number, number] {\n        return getTextPositionForSvgRendering(this, x, y)\n    }\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n *   Whether to use `alt` for `image`s (default: `true`).\n * @property {boolean | null | undefined} [includeHtml=true]\n *   Whether to use `value` of HTML (default: `true`).\n */\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node’s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} [value]\n *   Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {string}\n *   Serialized `value`.\n */\nexport function toString(value, options) {\n  const settings = options || emptyOptions\n  const includeImageAlt =\n    typeof settings.includeImageAlt === 'boolean'\n      ? settings.includeImageAlt\n      : true\n  const includeHtml =\n    typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true\n\n  return one(value, includeImageAlt, includeHtml)\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized node.\n */\nfunction one(value, includeImageAlt, includeHtml) {\n  if (node(value)) {\n    if ('value' in value) {\n      return value.type === 'html' && !includeHtml ? '' : value.value\n    }\n\n    if (includeImageAlt && 'alt' in value && value.alt) {\n      return value.alt\n    }\n\n    if ('children' in value) {\n      return all(value.children, includeImageAlt, includeHtml)\n    }\n  }\n\n  if (Array.isArray(value)) {\n    return all(value, includeImageAlt, includeHtml)\n  }\n\n  return ''\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array<unknown>} values\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized nodes.\n */\nfunction all(values, includeImageAlt, includeHtml) {\n  /** @type {Array<string>} */\n  const result = []\n  let index = -1\n\n  while (++index < values.length) {\n    result[index] = one(values[index], includeImageAlt, includeHtml)\n  }\n\n  return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n *   Thing.\n * @returns {value is Nodes}\n *   Whether `value` is a node.\n */\nfunction node(value) {\n  return Boolean(value && typeof value === 'object')\n}\n","/// <reference lib=\"dom\" />\n\n/* eslint-env browser */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string|false}\n */\nexport function decodeNamedCharacterReference(value) {\n  const characterReference = '&' + value + ';'\n  element.innerHTML = characterReference\n  const char = element.textContent\n\n  // Some named character references do not require the closing semicolon\n  // (`&not`, for instance), which leads to situations where parsing the assumed\n  // named reference of `&notit;` will result in the string `¬it;`.\n  // When we encounter a trailing semicolon after parsing, and the character\n  // reference to decode was not a semicolon (`&semi;`), we can assume that the\n  // matching was not complete.\n  // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n  // yield `null`.\n  if (char.charCodeAt(char.length - 1) === 59 /* `;` */ && value !== 'semi') {\n    return false\n  }\n\n  // If the decoded string is equal to the input, the character reference was\n  // not valid.\n  // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n  // yield `null`.\n  return char === characterReference ? false : char\n}\n","/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {number} start\n *   Index to remove/insert at (can be negative).\n * @param {number} remove\n *   Number of items to remove.\n * @param {Array<T>} items\n *   Items to inject into `list`.\n * @returns {undefined}\n *   Nothing.\n */\nexport function splice(list, start, remove, items) {\n  const end = list.length;\n  let chunkStart = 0;\n  /** @type {Array<unknown>} */\n  let parameters;\n\n  // Make start between zero and `end` (included).\n  if (start < 0) {\n    start = -start > end ? 0 : end + start;\n  } else {\n    start = start > end ? end : start;\n  }\n  remove = remove > 0 ? remove : 0;\n\n  // No need to chunk the items if there’s only a couple (10k) items.\n  if (items.length < 10000) {\n    parameters = Array.from(items);\n    parameters.unshift(start, remove);\n    // @ts-expect-error Hush, it’s fine.\n    list.splice(...parameters);\n  } else {\n    // Delete `remove` items starting from `start`\n    if (remove) list.splice(start, remove);\n\n    // Insert the items in chunks to not cause stack overflows.\n    while (chunkStart < items.length) {\n      parameters = items.slice(chunkStart, chunkStart + 10000);\n      parameters.unshift(start, 0);\n      // @ts-expect-error Hush, it’s fine.\n      list.splice(...parameters);\n      chunkStart += 10000;\n      start += 10000;\n    }\n  }\n}\n\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {Array<T>} items\n *   Items to add to `list`.\n * @returns {Array<T>}\n *   Either `list` or `items`.\n */\nexport function push(list, items) {\n  if (list.length > 0) {\n    splice(list, list.length, 0, items);\n    return list;\n  }\n  return items;\n}","/**\n * @import {\n *   Extension,\n *   Handles,\n *   HtmlExtension,\n *   NormalizedExtension\n * } from 'micromark-util-types'\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine multiple syntax extensions into one.\n *\n * @param {ReadonlyArray<Extension>} extensions\n *   List of syntax extensions.\n * @returns {NormalizedExtension}\n *   A single combined extension.\n */\nexport function combineExtensions(extensions) {\n  /** @type {NormalizedExtension} */\n  const all = {}\n  let index = -1\n\n  while (++index < extensions.length) {\n    syntaxExtension(all, extensions[index])\n  }\n\n  return all\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all\n *   Extension to merge into.\n * @param {Extension} extension\n *   Extension to merge.\n * @returns {undefined}\n *   Nothing.\n */\nfunction syntaxExtension(all, extension) {\n  /** @type {keyof Extension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    /** @type {Record<string, unknown>} */\n    const left = maybe || (all[hook] = {})\n    /** @type {Record<string, unknown> | undefined} */\n    const right = extension[hook]\n    /** @type {string} */\n    let code\n\n    if (right) {\n      for (code in right) {\n        if (!hasOwnProperty.call(left, code)) left[code] = []\n        const value = right[code]\n        constructs(\n          // @ts-expect-error Looks like a list.\n          left[code],\n          Array.isArray(value) ? value : value ? [value] : []\n        )\n      }\n    }\n  }\n}\n\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {Array<unknown>} existing\n *   List of constructs to merge into.\n * @param {Array<unknown>} list\n *   List of constructs to merge.\n * @returns {undefined}\n *   Nothing.\n */\nfunction constructs(existing, list) {\n  let index = -1\n  /** @type {Array<unknown>} */\n  const before = []\n\n  while (++index < list.length) {\n    // @ts-expect-error Looks like an object.\n    ;(list[index].add === 'after' ? existing : before).push(list[index])\n  }\n\n  splice(existing, 0, 0, before)\n}\n\n/**\n * Combine multiple HTML extensions into one.\n *\n * @param {ReadonlyArray<HtmlExtension>} htmlExtensions\n *   List of HTML extensions.\n * @returns {HtmlExtension}\n *   Single combined HTML extension.\n */\nexport function combineHtmlExtensions(htmlExtensions) {\n  /** @type {HtmlExtension} */\n  const handlers = {}\n  let index = -1\n\n  while (++index < htmlExtensions.length) {\n    htmlExtension(handlers, htmlExtensions[index])\n  }\n\n  return handlers\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all\n *   Extension to merge into.\n * @param {HtmlExtension} extension\n *   Extension to merge.\n * @returns {undefined}\n *   Nothing.\n */\nfunction htmlExtension(all, extension) {\n  /** @type {keyof HtmlExtension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    const left = maybe || (all[hook] = {})\n    const right = extension[hook]\n    /** @type {keyof Handles} */\n    let type\n\n    if (right) {\n      for (type in right) {\n        // @ts-expect-error assume document vs regular handler are managed correctly.\n        left[type] = right[type]\n      }\n    }\n  }\n}\n","/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n *   Value to decode.\n * @param {number} base\n *   Numeric base.\n * @returns {string}\n *   Character.\n */\nexport function decodeNumericCharacterReference(value, base) {\n  const code = Number.parseInt(value, base);\n  if (\n  // C0 except for HT, LF, FF, CR, space.\n  code < 9 || code === 11 || code > 13 && code < 32 ||\n  // Control character (DEL) of C0, and C1 controls.\n  code > 126 && code < 160 ||\n  // Lone high surrogates and low surrogates.\n  code > 55_295 && code < 57_344 ||\n  // Noncharacters.\n  code > 64_975 && code < 65_008 || /* eslint-disable no-bitwise */\n  (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */\n  // Out of range\n  code > 1_114_111) {\n    return \"\\uFFFD\";\n  }\n  return String.fromCodePoint(code);\n}","/**\n * Normalize an identifier (as found in references, definitions).\n *\n * Collapses markdown whitespace, trim, and then lower- and uppercase.\n *\n * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their\n * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different\n * uppercase character (U+0398 (`Θ`)).\n * So, to get a canonical form, we perform both lower- and uppercase.\n *\n * Using uppercase last makes sure keys will never interact with default\n * prototypal values (such as `constructor`): nothing in the prototype of\n * `Object` is uppercase.\n *\n * @param {string} value\n *   Identifier to normalize.\n * @returns {string}\n *   Normalized identifier.\n */\nexport function normalizeIdentifier(value) {\n  return value\n  // Collapse markdown whitespace.\n  .replace(/[\\t\\n\\r ]+/g, \" \")\n  // Trim.\n  .replace(/^ | $/g, '')\n  // Some characters are considered “uppercase”, but if their lowercase\n  // counterpart is uppercased will result in a different uppercase\n  // character.\n  // Hence, to get that form, we perform both lower- and uppercase.\n  // Upper case makes sure keys will not interact with default prototypal\n  // methods: no method is uppercase.\n  .toLowerCase().toUpperCase();\n}","/**\n * @import {Code} from 'micromark-util-types'\n */\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAlpha = regexCheck(/[A-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/);\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function asciiControl(code) {\n  return (\n    // Special whitespace codes (which have negative values), C0 and Control\n    // character DEL\n    code !== null && (code < 32 || code === 127)\n  );\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiDigit = regexCheck(/\\d/);\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/);\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/);\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEnding(code) {\n  return code !== null && code < -2;\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEndingOrSpace(code) {\n  return code !== null && (code < 0 || code === 32);\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownSpace(code) {\n  return code === -2 || code === -1 || code === 32;\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const unicodePunctuation = regexCheck(/\\p{P}|\\p{S}/u);\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const unicodeWhitespace = regexCheck(/\\s/);\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n *   Expression.\n * @returns {(code: Code) => boolean}\n *   Check.\n */\nfunction regexCheck(regex) {\n  return check;\n\n  /**\n   * Check whether a code matches the bound regex.\n   *\n   * @param {Code} code\n   *   Character code.\n   * @returns {boolean}\n   *   Whether the character code matches the bound regex.\n   */\n  function check(code) {\n    return code !== null && code > -1 && regex.test(String.fromCharCode(code));\n  }\n}","import { asciiAlphanumeric } from 'micromark-util-character';\nimport { encode } from 'micromark-util-encode';\n/**\n * Make a value safe for injection as a URL.\n *\n * This encodes unsafe characters with percent-encoding and skips already\n * encoded sequences (see `normalizeUri`).\n * Further unsafe characters are encoded as character references (see\n * `micromark-util-encode`).\n *\n * A regex of allowed protocols can be given, in which case the URL is\n * sanitized.\n * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or\n * `/^https?$/i` for `img[src]` (this is what `github.com` allows).\n * If the URL includes an unknown protocol (one not matched by `protocol`, such\n * as a dangerous example, `javascript:`), the value is ignored.\n *\n * @param {string | null | undefined} url\n *   URI to sanitize.\n * @param {RegExp | null | undefined} [protocol]\n *   Allowed protocols.\n * @returns {string}\n *   Sanitized URI.\n */\nexport function sanitizeUri(url, protocol) {\n  const value = encode(normalizeUri(url || ''));\n  if (!protocol) {\n    return value;\n  }\n  const colon = value.indexOf(':');\n  const questionMark = value.indexOf('?');\n  const numberSign = value.indexOf('#');\n  const slash = value.indexOf('/');\n  if (\n  // If there is no protocol, it’s relative.\n  colon < 0 ||\n  // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n  slash > -1 && colon > slash || questionMark > -1 && colon > questionMark || numberSign > -1 && colon > numberSign ||\n  // It is a protocol, it should be allowed.\n  protocol.test(value.slice(0, colon))) {\n    return value;\n  }\n  return '';\n}\n\n/**\n * Normalize a URL.\n *\n * Encode unsafe characters with percent-encoding, skipping already encoded\n * sequences.\n *\n * @param {string} value\n *   URI to normalize.\n * @returns {string}\n *   Normalized URI.\n */\nexport function normalizeUri(value) {\n  /** @type {Array<string>} */\n  const result = [];\n  let index = -1;\n  let start = 0;\n  let skip = 0;\n  while (++index < value.length) {\n    const code = value.charCodeAt(index);\n    /** @type {string} */\n    let replace = '';\n\n    // A correct percent encoded value.\n    if (code === 37 && asciiAlphanumeric(value.charCodeAt(index + 1)) && asciiAlphanumeric(value.charCodeAt(index + 2))) {\n      skip = 2;\n    }\n    // ASCII.\n    else if (code < 128) {\n      if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) {\n        replace = String.fromCharCode(code);\n      }\n    }\n    // Astral.\n    else if (code > 55_295 && code < 57_344) {\n      const next = value.charCodeAt(index + 1);\n\n      // A correct surrogate pair.\n      if (code < 56_320 && next > 56_319 && next < 57_344) {\n        replace = String.fromCharCode(code, next);\n        skip = 1;\n      }\n      // Lone surrogate.\n      else {\n        replace = \"\\uFFFD\";\n      }\n    }\n    // Unicode.\n    else {\n      replace = String.fromCharCode(code);\n    }\n    if (replace) {\n      result.push(value.slice(start, index), encodeURIComponent(replace));\n      start = index + skip + 1;\n      replace = '';\n    }\n    if (skip) {\n      index += skip;\n      skip = 0;\n    }\n  }\n  return result.join('') + value.slice(start);\n}","/**\n * @import {Effects, State, TokenType} from 'micromark-util-types'\n */\n\nimport { markdownSpace } from 'micromark-util-character';\n\n// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`.\n\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   spaces in markdown are often optional, in which case this factory can be\n *     used and `ok` will be switched to whether spaces were found or not\n * *   one line ending or space can be detected with `markdownSpace(code)` right\n *     before using `factorySpace`\n *\n * ###### Examples\n *\n * Where `␉` represents a tab (plus how much it expands) and `␠` represents a\n * single space.\n *\n * ```markdown\n * ␉\n * ␠␠␠␠\n * ␉␠\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {TokenType} type\n *   Type (`' \\t'`).\n * @param {number | undefined} [max=Infinity]\n *   Max (exclusive).\n * @returns {State}\n *   Start state.\n */\nexport function factorySpace(effects, ok, type, max) {\n  const limit = max ? max - 1 : Number.POSITIVE_INFINITY;\n  let size = 0;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownSpace(code)) {\n      effects.enter(type);\n      return prefix(code);\n    }\n    return ok(code);\n  }\n\n  /** @type {State} */\n  function prefix(code) {\n    if (markdownSpace(code) && size++ < limit) {\n      effects.consume(code);\n      return prefix;\n    }\n    effects.exit(type);\n    return ok(code);\n  }\n}","/**\n * @import {\n *   InitialConstruct,\n *   Initializer,\n *   State,\n *   TokenizeContext,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {InitialConstruct} */\nexport const content = {\n  tokenize: initializeContent\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Initializer}\n *   Content.\n */\nfunction initializeContent(effects) {\n  const contentStart = effects.attempt(this.parser.constructs.contentInitial, afterContentStartConstruct, paragraphInitial);\n  /** @type {Token} */\n  let previous;\n  return contentStart;\n\n  /** @type {State} */\n  function afterContentStartConstruct(code) {\n    if (code === null) {\n      effects.consume(code);\n      return;\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, contentStart, \"linePrefix\");\n  }\n\n  /** @type {State} */\n  function paragraphInitial(code) {\n    effects.enter(\"paragraph\");\n    return lineStart(code);\n  }\n\n  /** @type {State} */\n  function lineStart(code) {\n    const token = effects.enter(\"chunkText\", {\n      contentType: \"text\",\n      previous\n    });\n    if (previous) {\n      previous.next = token;\n    }\n    previous = token;\n    return data(code);\n  }\n\n  /** @type {State} */\n  function data(code) {\n    if (code === null) {\n      effects.exit(\"chunkText\");\n      effects.exit(\"paragraph\");\n      effects.consume(code);\n      return;\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code);\n      effects.exit(\"chunkText\");\n      return lineStart;\n    }\n\n    // Data.\n    effects.consume(code);\n    return data;\n  }\n}","/**\n * @import {\n *   Construct,\n *   ContainerState,\n *   InitialConstruct,\n *   Initializer,\n *   Point,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @typedef {[Construct, ContainerState]} StackItem\n *   Construct and its state.\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {InitialConstruct} */\nexport const document = {\n  tokenize: initializeDocument\n};\n\n/** @type {Construct} */\nconst containerConstruct = {\n  tokenize: tokenizeContainer\n};\n\n/**\n * @this {TokenizeContext}\n *   Self.\n * @type {Initializer}\n *   Initializer.\n */\nfunction initializeDocument(effects) {\n  const self = this;\n  /** @type {Array<StackItem>} */\n  const stack = [];\n  let continued = 0;\n  /** @type {TokenizeContext | undefined} */\n  let childFlow;\n  /** @type {Token | undefined} */\n  let childToken;\n  /** @type {number} */\n  let lineStartOffset;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    // First we iterate through the open blocks, starting with the root\n    // document, and descending through last children down to the last open\n    // block.\n    // Each block imposes a condition that the line must satisfy if the block is\n    // to remain open.\n    // For example, a block quote requires a `>` character.\n    // A paragraph requires a non-blank line.\n    // In this phase we may match all or just some of the open blocks.\n    // But we cannot close unmatched blocks yet, because we may have a lazy\n    // continuation line.\n    if (continued < stack.length) {\n      const item = stack[continued];\n      self.containerState = item[1];\n      return effects.attempt(item[0].continuation, documentContinue, checkNewContainers)(code);\n    }\n\n    // Done.\n    return checkNewContainers(code);\n  }\n\n  /** @type {State} */\n  function documentContinue(code) {\n    continued++;\n\n    // Note: this field is called `_closeFlow` but it also closes containers.\n    // Perhaps a good idea to rename it but it’s already used in the wild by\n    // extensions.\n    if (self.containerState._closeFlow) {\n      self.containerState._closeFlow = undefined;\n      if (childFlow) {\n        closeFlow();\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when dealing with lazy lines in `writeToChild`.\n      const indexBeforeExits = self.events.length;\n      let indexBeforeFlow = indexBeforeExits;\n      /** @type {Point | undefined} */\n      let point;\n\n      // Find the flow chunk.\n      while (indexBeforeFlow--) {\n        if (self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === \"chunkFlow\") {\n          point = self.events[indexBeforeFlow][1].end;\n          break;\n        }\n      }\n      exitContainers(continued);\n\n      // Fix positions.\n      let index = indexBeforeExits;\n      while (index < self.events.length) {\n        self.events[index][1].end = {\n          ...point\n        };\n        index++;\n      }\n\n      // Inject the exits earlier (they’re still also at the end).\n      splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));\n\n      // Discard the duplicate exits.\n      self.events.length = index;\n      return checkNewContainers(code);\n    }\n    return start(code);\n  }\n\n  /** @type {State} */\n  function checkNewContainers(code) {\n    // Next, after consuming the continuation markers for existing blocks, we\n    // look for new block starts (e.g. `>` for a block quote).\n    // If we encounter a new block start, we close any blocks unmatched in\n    // step 1 before creating the new block as a child of the last matched\n    // block.\n    if (continued === stack.length) {\n      // No need to `check` whether there’s a container, of `exitContainers`\n      // would be moot.\n      // We can instead immediately `attempt` to parse one.\n      if (!childFlow) {\n        return documentContinued(code);\n      }\n\n      // If we have concrete content, such as block HTML or fenced code,\n      // we can’t have containers “pierce” into them, so we can immediately\n      // start.\n      if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n        return flowStart(code);\n      }\n\n      // If we do have flow, it could still be a blank line,\n      // but we’d be interrupting it w/ a new container if there’s a current\n      // construct.\n      // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer\n      // needed in micromark-extension-gfm-table@1.0.6).\n      self.interrupt = Boolean(childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack);\n    }\n\n    // Check if there is a new container.\n    self.containerState = {};\n    return effects.check(containerConstruct, thereIsANewContainer, thereIsNoNewContainer)(code);\n  }\n\n  /** @type {State} */\n  function thereIsANewContainer(code) {\n    if (childFlow) closeFlow();\n    exitContainers(continued);\n    return documentContinued(code);\n  }\n\n  /** @type {State} */\n  function thereIsNoNewContainer(code) {\n    self.parser.lazy[self.now().line] = continued !== stack.length;\n    lineStartOffset = self.now().offset;\n    return flowStart(code);\n  }\n\n  /** @type {State} */\n  function documentContinued(code) {\n    // Try new containers.\n    self.containerState = {};\n    return effects.attempt(containerConstruct, containerContinue, flowStart)(code);\n  }\n\n  /** @type {State} */\n  function containerContinue(code) {\n    continued++;\n    stack.push([self.currentConstruct, self.containerState]);\n    // Try another.\n    return documentContinued(code);\n  }\n\n  /** @type {State} */\n  function flowStart(code) {\n    if (code === null) {\n      if (childFlow) closeFlow();\n      exitContainers(0);\n      effects.consume(code);\n      return;\n    }\n    childFlow = childFlow || self.parser.flow(self.now());\n    effects.enter(\"chunkFlow\", {\n      _tokenizer: childFlow,\n      contentType: \"flow\",\n      previous: childToken\n    });\n    return flowContinue(code);\n  }\n\n  /** @type {State} */\n  function flowContinue(code) {\n    if (code === null) {\n      writeToChild(effects.exit(\"chunkFlow\"), true);\n      exitContainers(0);\n      effects.consume(code);\n      return;\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code);\n      writeToChild(effects.exit(\"chunkFlow\"));\n      // Get ready for the next line.\n      continued = 0;\n      self.interrupt = undefined;\n      return start;\n    }\n    effects.consume(code);\n    return flowContinue;\n  }\n\n  /**\n   * @param {Token} token\n   *   Token.\n   * @param {boolean | undefined} [endOfFile]\n   *   Whether the token is at the end of the file (default: `false`).\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function writeToChild(token, endOfFile) {\n    const stream = self.sliceStream(token);\n    if (endOfFile) stream.push(null);\n    token.previous = childToken;\n    if (childToken) childToken.next = token;\n    childToken = token;\n    childFlow.defineSkip(token.start);\n    childFlow.write(stream);\n\n    // Alright, so we just added a lazy line:\n    //\n    // ```markdown\n    // > a\n    // b.\n    //\n    // Or:\n    //\n    // > ~~~c\n    // d\n    //\n    // Or:\n    //\n    // > | e |\n    // f\n    // ```\n    //\n    // The construct in the second example (fenced code) does not accept lazy\n    // lines, so it marked itself as done at the end of its first line, and\n    // then the content construct parses `d`.\n    // Most constructs in markdown match on the first line: if the first line\n    // forms a construct, a non-lazy line can’t “unmake” it.\n    //\n    // The construct in the third example is potentially a GFM table, and\n    // those are *weird*.\n    // It *could* be a table, from the first line, if the following line\n    // matches a condition.\n    // In this case, that second line is lazy, which “unmakes” the first line\n    // and turns the whole into one content block.\n    //\n    // We’ve now parsed the non-lazy and the lazy line, and can figure out\n    // whether the lazy line started a new flow block.\n    // If it did, we exit the current containers between the two flow blocks.\n    if (self.parser.lazy[token.start.line]) {\n      let index = childFlow.events.length;\n      while (index--) {\n        if (\n        // The token starts before the line ending…\n        childFlow.events[index][1].start.offset < lineStartOffset && (\n        // …and either is not ended yet…\n        !childFlow.events[index][1].end ||\n        // …or ends after it.\n        childFlow.events[index][1].end.offset > lineStartOffset)) {\n          // Exit: there’s still something open, which means it’s a lazy line\n          // part of something.\n          return;\n        }\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when closing flow in `documentContinue`.\n      const indexBeforeExits = self.events.length;\n      let indexBeforeFlow = indexBeforeExits;\n      /** @type {boolean | undefined} */\n      let seen;\n      /** @type {Point | undefined} */\n      let point;\n\n      // Find the previous chunk (the one before the lazy line).\n      while (indexBeforeFlow--) {\n        if (self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === \"chunkFlow\") {\n          if (seen) {\n            point = self.events[indexBeforeFlow][1].end;\n            break;\n          }\n          seen = true;\n        }\n      }\n      exitContainers(continued);\n\n      // Fix positions.\n      index = indexBeforeExits;\n      while (index < self.events.length) {\n        self.events[index][1].end = {\n          ...point\n        };\n        index++;\n      }\n\n      // Inject the exits earlier (they’re still also at the end).\n      splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));\n\n      // Discard the duplicate exits.\n      self.events.length = index;\n    }\n  }\n\n  /**\n   * @param {number} size\n   *   Size.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function exitContainers(size) {\n    let index = stack.length;\n\n    // Exit open containers.\n    while (index-- > size) {\n      const entry = stack[index];\n      self.containerState = entry[1];\n      entry[0].exit.call(self, effects);\n    }\n    stack.length = size;\n  }\n  function closeFlow() {\n    childFlow.write([null]);\n    childToken = undefined;\n    childFlow = undefined;\n    self.containerState._closeFlow = undefined;\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n *   Tokenizer.\n */\nfunction tokenizeContainer(effects, ok, nok) {\n  // Always populated by defaults.\n\n  return factorySpace(effects, effects.attempt(this.parser.constructs.document, ok, nok), \"linePrefix\", this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4);\n}","/**\n * @import {Code} from 'micromark-util-types'\n */\n\nimport { markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > 👉 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n *   Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n *   Group.\n */\nexport function classifyCharacter(code) {\n  if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n    return 1;\n  }\n  if (unicodePunctuation(code)) {\n    return 2;\n  }\n}","/**\n * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types'\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {ReadonlyArray<{resolveAll?: Resolver | undefined}>} constructs\n *   List of constructs, optionally with `resolveAll`s.\n * @param {Array<Event>} events\n *   List of events.\n * @param {TokenizeContext} context\n *   Context used by `tokenize`.\n * @returns {Array<Event>}\n *   Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n  /** @type {Array<Resolver>} */\n  const called = []\n  let index = -1\n\n  while (++index < constructs.length) {\n    const resolve = constructs[index].resolveAll\n\n    if (resolve && !called.includes(resolve)) {\n      events = resolve(events, context)\n      called.push(resolve)\n    }\n  }\n\n  return events\n}\n","/**\n * @import {\n *   Code,\n *   Construct,\n *   Event,\n *   Point,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { push, splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const attention = {\n  name: 'attention',\n  resolveAll: resolveAllAttention,\n  tokenize: tokenizeAttention\n};\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n// eslint-disable-next-line complexity\nfunction resolveAllAttention(events, context) {\n  let index = -1;\n  /** @type {number} */\n  let open;\n  /** @type {Token} */\n  let group;\n  /** @type {Token} */\n  let text;\n  /** @type {Token} */\n  let openingSequence;\n  /** @type {Token} */\n  let closingSequence;\n  /** @type {number} */\n  let use;\n  /** @type {Array<Event>} */\n  let nextEvents;\n  /** @type {number} */\n  let offset;\n\n  // Walk through all events.\n  //\n  // Note: performance of this is fine on an mb of normal markdown, but it’s\n  // a bottleneck for malicious stuff.\n  while (++index < events.length) {\n    // Find a token that can close.\n    if (events[index][0] === 'enter' && events[index][1].type === 'attentionSequence' && events[index][1]._close) {\n      open = index;\n\n      // Now walk back to find an opener.\n      while (open--) {\n        // Find a token that can open the closer.\n        if (events[open][0] === 'exit' && events[open][1].type === 'attentionSequence' && events[open][1]._open &&\n        // If the markers are the same:\n        context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index][1]).charCodeAt(0)) {\n          // If the opening can close or the closing can open,\n          // and the close size *is not* a multiple of three,\n          // but the sum of the opening and closing size *is* multiple of three,\n          // then don’t match.\n          if ((events[open][1]._close || events[index][1]._open) && (events[index][1].end.offset - events[index][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index][1].end.offset - events[index][1].start.offset) % 3)) {\n            continue;\n          }\n\n          // Number of markers to use from the sequence.\n          use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index][1].end.offset - events[index][1].start.offset > 1 ? 2 : 1;\n          const start = {\n            ...events[open][1].end\n          };\n          const end = {\n            ...events[index][1].start\n          };\n          movePoint(start, -use);\n          movePoint(end, use);\n          openingSequence = {\n            type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n            start,\n            end: {\n              ...events[open][1].end\n            }\n          };\n          closingSequence = {\n            type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n            start: {\n              ...events[index][1].start\n            },\n            end\n          };\n          text = {\n            type: use > 1 ? \"strongText\" : \"emphasisText\",\n            start: {\n              ...events[open][1].end\n            },\n            end: {\n              ...events[index][1].start\n            }\n          };\n          group = {\n            type: use > 1 ? \"strong\" : \"emphasis\",\n            start: {\n              ...openingSequence.start\n            },\n            end: {\n              ...closingSequence.end\n            }\n          };\n          events[open][1].end = {\n            ...openingSequence.start\n          };\n          events[index][1].start = {\n            ...closingSequence.end\n          };\n          nextEvents = [];\n\n          // If there are more markers in the opening, add them before.\n          if (events[open][1].end.offset - events[open][1].start.offset) {\n            nextEvents = push(nextEvents, [['enter', events[open][1], context], ['exit', events[open][1], context]]);\n          }\n\n          // Opening.\n          nextEvents = push(nextEvents, [['enter', group, context], ['enter', openingSequence, context], ['exit', openingSequence, context], ['enter', text, context]]);\n\n          // Always populated by defaults.\n\n          // Between.\n          nextEvents = push(nextEvents, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + 1, index), context));\n\n          // Closing.\n          nextEvents = push(nextEvents, [['exit', text, context], ['enter', closingSequence, context], ['exit', closingSequence, context], ['exit', group, context]]);\n\n          // If there are more markers in the closing, add them after.\n          if (events[index][1].end.offset - events[index][1].start.offset) {\n            offset = 2;\n            nextEvents = push(nextEvents, [['enter', events[index][1], context], ['exit', events[index][1], context]]);\n          } else {\n            offset = 0;\n          }\n          splice(events, open - 1, index - open + 3, nextEvents);\n          index = open + nextEvents.length - offset - 2;\n          break;\n        }\n      }\n    }\n  }\n\n  // Remove remaining sequences.\n  index = -1;\n  while (++index < events.length) {\n    if (events[index][1].type === 'attentionSequence') {\n      events[index][1].type = 'data';\n    }\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAttention(effects, ok) {\n  const attentionMarkers = this.parser.constructs.attentionMarkers.null;\n  const previous = this.previous;\n  const before = classifyCharacter(previous);\n\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Before a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    marker = code;\n    effects.enter('attentionSequence');\n    return inside(code);\n  }\n\n  /**\n   * In a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code);\n      return inside;\n    }\n    const token = effects.exit('attentionSequence');\n\n    // To do: next major: move this to resolver, just like `markdown-rs`.\n    const after = classifyCharacter(code);\n\n    // Always populated by defaults.\n\n    const open = !after || after === 2 && before || attentionMarkers.includes(code);\n    const close = !before || before === 2 && after || attentionMarkers.includes(previous);\n    token._open = Boolean(marker === 42 ? open : open && (before || !close));\n    token._close = Boolean(marker === 42 ? close : close && (after || !open));\n    return ok(code);\n  }\n}\n\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n *   Point.\n * @param {number} offset\n *   Amount to move.\n * @returns {undefined}\n *   Nothing.\n */\nfunction movePoint(point, offset) {\n  point.column += offset;\n  point.offset += offset;\n  point._bufferIndex += offset;\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiAlphanumeric, asciiAlpha, asciiAtext, asciiControl } from 'micromark-util-character';\n/** @type {Construct} */\nexport const autolink = {\n  name: 'autolink',\n  tokenize: tokenizeAutolink\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAutolink(effects, ok, nok) {\n  let size = 0;\n  return start;\n\n  /**\n   * Start of an autolink.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *      ^\n   * > | a<user@example.com>b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"autolink\");\n    effects.enter(\"autolinkMarker\");\n    effects.consume(code);\n    effects.exit(\"autolinkMarker\");\n    effects.enter(\"autolinkProtocol\");\n    return open;\n  }\n\n  /**\n   * After `<`, at protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *       ^\n   * > | a<user@example.com>b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return schemeOrEmailAtext;\n    }\n    if (code === 64) {\n      return nok(code);\n    }\n    return emailAtext(code);\n  }\n\n  /**\n   * At second byte of protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeOrEmailAtext(code) {\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {\n      // Count the previous alphabetical from `open` too.\n      size = 1;\n      return schemeInsideOrEmailAtext(code);\n    }\n    return emailAtext(code);\n  }\n\n  /**\n   * In ambiguous protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeInsideOrEmailAtext(code) {\n    if (code === 58) {\n      effects.consume(code);\n      size = 0;\n      return urlInside;\n    }\n\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if ((code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && size++ < 32) {\n      effects.consume(code);\n      return schemeInsideOrEmailAtext;\n    }\n    size = 0;\n    return emailAtext(code);\n  }\n\n  /**\n   * After protocol, in URL.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function urlInside(code) {\n    if (code === 62) {\n      effects.exit(\"autolinkProtocol\");\n      effects.enter(\"autolinkMarker\");\n      effects.consume(code);\n      effects.exit(\"autolinkMarker\");\n      effects.exit(\"autolink\");\n      return ok;\n    }\n\n    // ASCII control, space, or `<`.\n    if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return urlInside;\n  }\n\n  /**\n   * In email atext.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtext(code) {\n    if (code === 64) {\n      effects.consume(code);\n      return emailAtSignOrDot;\n    }\n    if (asciiAtext(code)) {\n      effects.consume(code);\n      return emailAtext;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In label, after at-sign or dot.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                 ^       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtSignOrDot(code) {\n    return asciiAlphanumeric(code) ? emailLabel(code) : nok(code);\n  }\n\n  /**\n   * In label, where `.` and `>` are allowed.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailLabel(code) {\n    if (code === 46) {\n      effects.consume(code);\n      size = 0;\n      return emailAtSignOrDot;\n    }\n    if (code === 62) {\n      // Exit, then change the token type.\n      effects.exit(\"autolinkProtocol\").type = \"autolinkEmail\";\n      effects.enter(\"autolinkMarker\");\n      effects.consume(code);\n      effects.exit(\"autolinkMarker\");\n      effects.exit(\"autolink\");\n      return ok;\n    }\n    return emailValue(code);\n  }\n\n  /**\n   * In label, where `.` and `>` are *not* allowed.\n   *\n   * Though, this is also used in `emailLabel` to parse other values.\n   *\n   * ```markdown\n   * > | a<user.name@ex-ample.com>b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailValue(code) {\n    // ASCII alphanumeric or `-`.\n    if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n      const next = code === 45 ? emailValue : emailLabel;\n      effects.consume(code);\n      return next;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blankLine = {\n  partial: true,\n  tokenize: tokenizeBlankLine\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLine(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of blank line.\n   *\n   * > 👉 **Note**: `␠` represents a space character.\n   *\n   * ```markdown\n   * > | ␠␠␊\n   *     ^\n   * > | ␊\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    return markdownSpace(code) ? factorySpace(effects, after, \"linePrefix\")(code) : after(code);\n  }\n\n  /**\n   * At eof/eol, after optional whitespace.\n   *\n   * > 👉 **Note**: `␠` represents a space character.\n   *\n   * ```markdown\n   * > | ␠␠␊\n   *       ^\n   * > | ␊\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   Exiter,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blockQuote = {\n  continuation: {\n    tokenize: tokenizeBlockQuoteContinuation\n  },\n  exit,\n  name: 'blockQuote',\n  tokenize: tokenizeBlockQuoteStart\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of block quote.\n   *\n   * ```markdown\n   * > | > a\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 62) {\n      const state = self.containerState;\n      if (!state.open) {\n        effects.enter(\"blockQuote\", {\n          _container: true\n        });\n        state.open = true;\n      }\n      effects.enter(\"blockQuotePrefix\");\n      effects.enter(\"blockQuoteMarker\");\n      effects.consume(code);\n      effects.exit(\"blockQuoteMarker\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `>`, before optional whitespace.\n   *\n   * ```markdown\n   * > | > a\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (markdownSpace(code)) {\n      effects.enter(\"blockQuotePrefixWhitespace\");\n      effects.consume(code);\n      effects.exit(\"blockQuotePrefixWhitespace\");\n      effects.exit(\"blockQuotePrefix\");\n      return ok;\n    }\n    effects.exit(\"blockQuotePrefix\");\n    return ok(code);\n  }\n}\n\n/**\n * Start of block quote continuation.\n *\n * ```markdown\n *   | > a\n * > | > b\n *     ^\n * ```\n *\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n  const self = this;\n  return contStart;\n\n  /**\n   * Start of block quote continuation.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contStart(code) {\n    if (markdownSpace(code)) {\n      // Always populated by defaults.\n\n      return factorySpace(effects, contBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n    }\n    return contBefore(code);\n  }\n\n  /**\n   * At `>`, after optional whitespace.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contBefore(code) {\n    return effects.attempt(blockQuote, ok, nok)(code);\n  }\n}\n\n/** @type {Exiter} */\nfunction exit(effects) {\n  effects.exit(\"blockQuote\");\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiPunctuation } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterEscape = {\n  name: 'characterEscape',\n  tokenize: tokenizeCharacterEscape\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of character escape.\n   *\n   * ```markdown\n   * > | a\\*b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"characterEscape\");\n    effects.enter(\"escapeMarker\");\n    effects.consume(code);\n    effects.exit(\"escapeMarker\");\n    return inside;\n  }\n\n  /**\n   * After `\\`, at punctuation.\n   *\n   * ```markdown\n   * > | a\\*b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    // ASCII punctuation.\n    if (asciiPunctuation(code)) {\n      effects.enter(\"characterEscapeValue\");\n      effects.consume(code);\n      effects.exit(\"characterEscapeValue\");\n      effects.exit(\"characterEscape\");\n      return ok;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { asciiAlphanumeric, asciiDigit, asciiHexDigit } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterReference = {\n  name: 'characterReference',\n  tokenize: tokenizeCharacterReference\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterReference(effects, ok, nok) {\n  const self = this;\n  let size = 0;\n  /** @type {number} */\n  let max;\n  /** @type {(code: Code) => boolean} */\n  let test;\n  return start;\n\n  /**\n   * Start of character reference.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *      ^\n   * > | a&#123;b\n   *      ^\n   * > | a&#x9;b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"characterReference\");\n    effects.enter(\"characterReferenceMarker\");\n    effects.consume(code);\n    effects.exit(\"characterReferenceMarker\");\n    return open;\n  }\n\n  /**\n   * After `&`, at `#` for numeric references or alphanumeric for named\n   * references.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^\n   * > | a&#123;b\n   *       ^\n   * > | a&#x9;b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 35) {\n      effects.enter(\"characterReferenceMarkerNumeric\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarkerNumeric\");\n      return numeric;\n    }\n    effects.enter(\"characterReferenceValue\");\n    max = 31;\n    test = asciiAlphanumeric;\n    return value(code);\n  }\n\n  /**\n   * After `#`, at `x` for hexadecimals or digit for decimals.\n   *\n   * ```markdown\n   * > | a&#123;b\n   *        ^\n   * > | a&#x9;b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function numeric(code) {\n    if (code === 88 || code === 120) {\n      effects.enter(\"characterReferenceMarkerHexadecimal\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarkerHexadecimal\");\n      effects.enter(\"characterReferenceValue\");\n      max = 6;\n      test = asciiHexDigit;\n      return value;\n    }\n    effects.enter(\"characterReferenceValue\");\n    max = 7;\n    test = asciiDigit;\n    return value(code);\n  }\n\n  /**\n   * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n   *\n   * The character reference kind defines what and how many characters are\n   * allowed.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^^^\n   * > | a&#123;b\n   *        ^^^\n   * > | a&#x9;b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function value(code) {\n    if (code === 59 && size) {\n      const token = effects.exit(\"characterReferenceValue\");\n      if (test === asciiAlphanumeric && !decodeNamedCharacterReference(self.sliceSerialize(token))) {\n        return nok(code);\n      }\n\n      // To do: `markdown-rs` uses a different name:\n      // `CharacterReferenceMarkerSemi`.\n      effects.enter(\"characterReferenceMarker\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarker\");\n      effects.exit(\"characterReference\");\n      return ok;\n    }\n    if (test(code) && size++ < max) {\n      effects.consume(code);\n      return value;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nconst nonLazyContinuation = {\n  partial: true,\n  tokenize: tokenizeNonLazyContinuation\n};\n\n/** @type {Construct} */\nexport const codeFenced = {\n  concrete: true,\n  name: 'codeFenced',\n  tokenize: tokenizeCodeFenced\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n  const self = this;\n  /** @type {Construct} */\n  const closeStart = {\n    partial: true,\n    tokenize: tokenizeCloseStart\n  };\n  let initialPrefix = 0;\n  let sizeOpen = 0;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of code.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse whitespace like `markdown-rs`.\n    return beforeSequenceOpen(code);\n  }\n\n  /**\n   * In opening fence, after prefix, at sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeSequenceOpen(code) {\n    const tail = self.events[self.events.length - 1];\n    initialPrefix = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n    marker = code;\n    effects.enter(\"codeFenced\");\n    effects.enter(\"codeFencedFence\");\n    effects.enter(\"codeFencedFenceSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening fence sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *      ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === marker) {\n      sizeOpen++;\n      effects.consume(code);\n      return sequenceOpen;\n    }\n    if (sizeOpen < 3) {\n      return nok(code);\n    }\n    effects.exit(\"codeFencedFenceSequence\");\n    return markdownSpace(code) ? factorySpace(effects, infoBefore, \"whitespace\")(code) : infoBefore(code);\n  }\n\n  /**\n   * In opening fence, after the sequence (and optional whitespace), before info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function infoBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFencedFence\");\n      return self.interrupt ? ok(code) : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n    }\n    effects.enter(\"codeFencedFenceInfo\");\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return info(code);\n  }\n\n  /**\n   * In info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function info(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceInfo\");\n      return infoBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceInfo\");\n      return factorySpace(effects, metaBefore, \"whitespace\")(code);\n    }\n    if (code === 96 && code === marker) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return info;\n  }\n\n  /**\n   * In opening fence, after info and whitespace, before meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function metaBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return infoBefore(code);\n    }\n    effects.enter(\"codeFencedFenceMeta\");\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return meta(code);\n  }\n\n  /**\n   * In meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function meta(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceMeta\");\n      return infoBefore(code);\n    }\n    if (code === 96 && code === marker) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return meta;\n  }\n\n  /**\n   * At eol/eof in code, before a non-lazy closing fence or content.\n   *\n   * ```markdown\n   * > | ~~~js\n   *          ^\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function atNonLazyBreak(code) {\n    return effects.attempt(closeStart, after, contentBefore)(code);\n  }\n\n  /**\n   * Before code content, not a closing fence, at eol.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentBefore(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return contentStart;\n  }\n\n  /**\n   * Before code content, not a closing fence.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentStart(code) {\n    return initialPrefix > 0 && markdownSpace(code) ? factorySpace(effects, beforeContentChunk, \"linePrefix\", initialPrefix + 1)(code) : beforeContentChunk(code);\n  }\n\n  /**\n   * Before code content, after optional prefix.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeContentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n    }\n    effects.enter(\"codeFlowValue\");\n    return contentChunk(code);\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^^^^^^^^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFlowValue\");\n      return beforeContentChunk(code);\n    }\n    effects.consume(code);\n    return contentChunk;\n  }\n\n  /**\n   * After code.\n   *\n   * ```markdown\n   *   | ~~~js\n   *   | alert(1)\n   * > | ~~~\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    effects.exit(\"codeFenced\");\n    return ok(code);\n  }\n\n  /**\n   * @this {TokenizeContext}\n   *   Context.\n   * @type {Tokenizer}\n   */\n  function tokenizeCloseStart(effects, ok, nok) {\n    let size = 0;\n    return startBefore;\n\n    /**\n     *\n     *\n     * @type {State}\n     */\n    function startBefore(code) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return start;\n    }\n\n    /**\n     * Before closing fence, at optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function start(code) {\n      // Always populated by defaults.\n\n      // To do: `enter` here or in next state?\n      effects.enter(\"codeFencedFence\");\n      return markdownSpace(code) ? factorySpace(effects, beforeSequenceClose, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : beforeSequenceClose(code);\n    }\n\n    /**\n     * In closing fence, after optional whitespace, at sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function beforeSequenceClose(code) {\n      if (code === marker) {\n        effects.enter(\"codeFencedFenceSequence\");\n        return sequenceClose(code);\n      }\n      return nok(code);\n    }\n\n    /**\n     * In closing fence sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceClose(code) {\n      if (code === marker) {\n        size++;\n        effects.consume(code);\n        return sequenceClose;\n      }\n      if (size >= sizeOpen) {\n        effects.exit(\"codeFencedFenceSequence\");\n        return markdownSpace(code) ? factorySpace(effects, sequenceCloseAfter, \"whitespace\")(code) : sequenceCloseAfter(code);\n      }\n      return nok(code);\n    }\n\n    /**\n     * After closing fence sequence, after optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *        ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceCloseAfter(code) {\n      if (code === null || markdownLineEnding(code)) {\n        effects.exit(\"codeFencedFence\");\n        return ok(code);\n      }\n      return nok(code);\n    }\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return lineStart;\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function lineStart(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeIndented = {\n  name: 'codeIndented',\n  tokenize: tokenizeCodeIndented\n};\n\n/** @type {Construct} */\nconst furtherStart = {\n  partial: true,\n  tokenize: tokenizeFurtherStart\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeIndented(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of code (indented).\n   *\n   * > **Parsing note**: it is not needed to check if this first line is a\n   * > filled line (that it has a non-whitespace character), because blank lines\n   * > are parsed already, so we never run into that.\n   *\n   * ```markdown\n   * > |     aaa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: manually check if interrupting like `markdown-rs`.\n\n    effects.enter(\"codeIndented\");\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? atBreak(code) : nok(code);\n  }\n\n  /**\n   * At a break.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === null) {\n      return after(code);\n    }\n    if (markdownLineEnding(code)) {\n      return effects.attempt(furtherStart, atBreak, after)(code);\n    }\n    effects.enter(\"codeFlowValue\");\n    return inside(code);\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFlowValue\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return inside;\n  }\n\n  /** @type {State} */\n  function after(code) {\n    effects.exit(\"codeIndented\");\n    // To do: allow interrupting like `markdown-rs`.\n    // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeFurtherStart(effects, ok, nok) {\n  const self = this;\n  return furtherStart;\n\n  /**\n   * At eol, trying to parse another indent.\n   *\n   * ```markdown\n   * > |     aaa\n   *            ^\n   *   |     bbb\n   * ```\n   *\n   * @type {State}\n   */\n  function furtherStart(code) {\n    // To do: improve `lazy` / `pierce` handling.\n    // If this is a lazy line, it can’t be code.\n    if (self.parser.lazy[self.now().line]) {\n      return nok(code);\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return furtherStart;\n    }\n\n    // To do: the code here in `micromark-js` is a bit different from\n    // `markdown-rs` because there it can attempt spaces.\n    // We can’t yet.\n    //\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? ok(code) : markdownLineEnding(code) ? furtherStart(code) : nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   Previous,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeText = {\n  name: 'codeText',\n  previous,\n  resolve: resolveCodeText,\n  tokenize: tokenizeCodeText\n};\n\n// To do: next major: don’t resolve, like `markdown-rs`.\n/** @type {Resolver} */\nfunction resolveCodeText(events) {\n  let tailExitIndex = events.length - 4;\n  let headEnterIndex = 3;\n  /** @type {number} */\n  let index;\n  /** @type {number | undefined} */\n  let enter;\n\n  // If we start and end with an EOL or a space.\n  if ((events[headEnterIndex][1].type === \"lineEnding\" || events[headEnterIndex][1].type === 'space') && (events[tailExitIndex][1].type === \"lineEnding\" || events[tailExitIndex][1].type === 'space')) {\n    index = headEnterIndex;\n\n    // And we have data.\n    while (++index < tailExitIndex) {\n      if (events[index][1].type === \"codeTextData\") {\n        // Then we have padding.\n        events[headEnterIndex][1].type = \"codeTextPadding\";\n        events[tailExitIndex][1].type = \"codeTextPadding\";\n        headEnterIndex += 2;\n        tailExitIndex -= 2;\n        break;\n      }\n    }\n  }\n\n  // Merge adjacent spaces and data.\n  index = headEnterIndex - 1;\n  tailExitIndex++;\n  while (++index <= tailExitIndex) {\n    if (enter === undefined) {\n      if (index !== tailExitIndex && events[index][1].type !== \"lineEnding\") {\n        enter = index;\n      }\n    } else if (index === tailExitIndex || events[index][1].type === \"lineEnding\") {\n      events[enter][1].type = \"codeTextData\";\n      if (index !== enter + 2) {\n        events[enter][1].end = events[index - 1][1].end;\n        events.splice(enter + 2, index - enter - 2);\n        tailExitIndex -= index - enter - 2;\n        index = enter + 2;\n      }\n      enter = undefined;\n    }\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Previous}\n */\nfunction previous(code) {\n  // If there is a previous code, there will always be a tail.\n  return code !== 96 || this.events[this.events.length - 1][1].type === \"characterEscape\";\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeText(effects, ok, nok) {\n  const self = this;\n  let sizeOpen = 0;\n  /** @type {number} */\n  let size;\n  /** @type {Token} */\n  let token;\n  return start;\n\n  /**\n   * Start of code (text).\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * > | \\`a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"codeText\");\n    effects.enter(\"codeTextSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 96) {\n      effects.consume(code);\n      sizeOpen++;\n      return sequenceOpen;\n    }\n    effects.exit(\"codeTextSequence\");\n    return between(code);\n  }\n\n  /**\n   * Between something and something else.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function between(code) {\n    // EOF.\n    if (code === null) {\n      return nok(code);\n    }\n\n    // To do: next major: don’t do spaces in resolve, but when compiling,\n    // like `markdown-rs`.\n    // Tabs don’t work, and virtual spaces don’t make sense.\n    if (code === 32) {\n      effects.enter('space');\n      effects.consume(code);\n      effects.exit('space');\n      return between;\n    }\n\n    // Closing fence? Could also be data.\n    if (code === 96) {\n      token = effects.enter(\"codeTextSequence\");\n      size = 0;\n      return sequenceClose(code);\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return between;\n    }\n\n    // Data.\n    effects.enter(\"codeTextData\");\n    return data(code);\n  }\n\n  /**\n   * In data.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (code === null || code === 32 || code === 96 || markdownLineEnding(code)) {\n      effects.exit(\"codeTextData\");\n      return between(code);\n    }\n    effects.consume(code);\n    return data;\n  }\n\n  /**\n   * In closing sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceClose(code) {\n    // More.\n    if (code === 96) {\n      effects.consume(code);\n      size++;\n      return sequenceClose;\n    }\n\n    // Done!\n    if (size === sizeOpen) {\n      effects.exit(\"codeTextSequence\");\n      effects.exit(\"codeText\");\n      return ok(code);\n    }\n\n    // More or less accents: mark as data.\n    token.type = \"codeTextData\";\n    return data(code);\n  }\n}","/**\n * Some of the internal operations of micromark do lots of editing\n * operations on very large arrays. This runs into problems with two\n * properties of most circa-2020 JavaScript interpreters:\n *\n *  - Array-length modifications at the high end of an array (push/pop) are\n *    expected to be common and are implemented in (amortized) time\n *    proportional to the number of elements added or removed, whereas\n *    other operations (shift/unshift and splice) are much less efficient.\n *  - Function arguments are passed on the stack, so adding tens of thousands\n *    of elements to an array with `arr.push(...newElements)` will frequently\n *    cause stack overflows. (see <https://stackoverflow.com/questions/22123769/rangeerror-maximum-call-stack-size-exceeded-why>)\n *\n * SpliceBuffers are an implementation of gap buffers, which are a\n * generalization of the \"queue made of two stacks\" idea. The splice buffer\n * maintains a cursor, and moving the cursor has cost proportional to the\n * distance the cursor moves, but inserting, deleting, or splicing in\n * new information at the cursor is as efficient as the push/pop operation.\n * This allows for an efficient sequence of splices (or pushes, pops, shifts,\n * or unshifts) as long such edits happen at the same part of the array or\n * generally sweep through the array from the beginning to the end.\n *\n * The interface for splice buffers also supports large numbers of inputs by\n * passing a single array argument rather passing multiple arguments on the\n * function call stack.\n *\n * @template T\n *   Item type.\n */\nexport class SpliceBuffer {\n  /**\n   * @param {ReadonlyArray<T> | null | undefined} [initial]\n   *   Initial items (optional).\n   * @returns\n   *   Splice buffer.\n   */\n  constructor(initial) {\n    /** @type {Array<T>} */\n    this.left = initial ? [...initial] : [];\n    /** @type {Array<T>} */\n    this.right = [];\n  }\n\n  /**\n   * Array access;\n   * does not move the cursor.\n   *\n   * @param {number} index\n   *   Index.\n   * @return {T}\n   *   Item.\n   */\n  get(index) {\n    if (index < 0 || index >= this.left.length + this.right.length) {\n      throw new RangeError('Cannot access index `' + index + '` in a splice buffer of size `' + (this.left.length + this.right.length) + '`');\n    }\n    if (index < this.left.length) return this.left[index];\n    return this.right[this.right.length - index + this.left.length - 1];\n  }\n\n  /**\n   * The length of the splice buffer, one greater than the largest index in the\n   * array.\n   */\n  get length() {\n    return this.left.length + this.right.length;\n  }\n\n  /**\n   * Remove and return `list[0]`;\n   * moves the cursor to `0`.\n   *\n   * @returns {T | undefined}\n   *   Item, optional.\n   */\n  shift() {\n    this.setCursor(0);\n    return this.right.pop();\n  }\n\n  /**\n   * Slice the buffer to get an array;\n   * does not move the cursor.\n   *\n   * @param {number} start\n   *   Start.\n   * @param {number | null | undefined} [end]\n   *   End (optional).\n   * @returns {Array<T>}\n   *   Array of items.\n   */\n  slice(start, end) {\n    /** @type {number} */\n    const stop = end === null || end === undefined ? Number.POSITIVE_INFINITY : end;\n    if (stop < this.left.length) {\n      return this.left.slice(start, stop);\n    }\n    if (start > this.left.length) {\n      return this.right.slice(this.right.length - stop + this.left.length, this.right.length - start + this.left.length).reverse();\n    }\n    return this.left.slice(start).concat(this.right.slice(this.right.length - stop + this.left.length).reverse());\n  }\n\n  /**\n   * Mimics the behavior of Array.prototype.splice() except for the change of\n   * interface necessary to avoid segfaults when patching in very large arrays.\n   *\n   * This operation moves cursor is moved to `start` and results in the cursor\n   * placed after any inserted items.\n   *\n   * @param {number} start\n   *   Start;\n   *   zero-based index at which to start changing the array;\n   *   negative numbers count backwards from the end of the array and values\n   *   that are out-of bounds are clamped to the appropriate end of the array.\n   * @param {number | null | undefined} [deleteCount=0]\n   *   Delete count (default: `0`);\n   *   maximum number of elements to delete, starting from start.\n   * @param {Array<T> | null | undefined} [items=[]]\n   *   Items to include in place of the deleted items (default: `[]`).\n   * @return {Array<T>}\n   *   Any removed items.\n   */\n  splice(start, deleteCount, items) {\n    /** @type {number} */\n    const count = deleteCount || 0;\n    this.setCursor(Math.trunc(start));\n    const removed = this.right.splice(this.right.length - count, Number.POSITIVE_INFINITY);\n    if (items) chunkedPush(this.left, items);\n    return removed.reverse();\n  }\n\n  /**\n   * Remove and return the highest-numbered item in the array, so\n   * `list[list.length - 1]`;\n   * Moves the cursor to `length`.\n   *\n   * @returns {T | undefined}\n   *   Item, optional.\n   */\n  pop() {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    return this.left.pop();\n  }\n\n  /**\n   * Inserts a single item to the high-numbered side of the array;\n   * moves the cursor to `length`.\n   *\n   * @param {T} item\n   *   Item.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  push(item) {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    this.left.push(item);\n  }\n\n  /**\n   * Inserts many items to the high-numbered side of the array.\n   * Moves the cursor to `length`.\n   *\n   * @param {Array<T>} items\n   *   Items.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  pushMany(items) {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    chunkedPush(this.left, items);\n  }\n\n  /**\n   * Inserts a single item to the low-numbered side of the array;\n   * Moves the cursor to `0`.\n   *\n   * @param {T} item\n   *   Item.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  unshift(item) {\n    this.setCursor(0);\n    this.right.push(item);\n  }\n\n  /**\n   * Inserts many items to the low-numbered side of the array;\n   * moves the cursor to `0`.\n   *\n   * @param {Array<T>} items\n   *   Items.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  unshiftMany(items) {\n    this.setCursor(0);\n    chunkedPush(this.right, items.reverse());\n  }\n\n  /**\n   * Move the cursor to a specific position in the array. Requires\n   * time proportional to the distance moved.\n   *\n   * If `n < 0`, the cursor will end up at the beginning.\n   * If `n > length`, the cursor will end up at the end.\n   *\n   * @param {number} n\n   *   Position.\n   * @return {undefined}\n   *   Nothing.\n   */\n  setCursor(n) {\n    if (n === this.left.length || n > this.left.length && this.right.length === 0 || n < 0 && this.left.length === 0) return;\n    if (n < this.left.length) {\n      // Move cursor to the this.left\n      const removed = this.left.splice(n, Number.POSITIVE_INFINITY);\n      chunkedPush(this.right, removed.reverse());\n    } else {\n      // Move cursor to the this.right\n      const removed = this.right.splice(this.left.length + this.right.length - n, Number.POSITIVE_INFINITY);\n      chunkedPush(this.left, removed.reverse());\n    }\n  }\n}\n\n/**\n * Avoid stack overflow by pushing items onto the stack in segments\n *\n * @template T\n *   Item type.\n * @param {Array<T>} list\n *   List to inject into.\n * @param {ReadonlyArray<T>} right\n *   Items to inject.\n * @return {undefined}\n *   Nothing.\n */\nfunction chunkedPush(list, right) {\n  /** @type {number} */\n  let chunkStart = 0;\n  if (right.length < 10000) {\n    list.push(...right);\n  } else {\n    while (chunkStart < right.length) {\n      list.push(...right.slice(chunkStart, chunkStart + 10000));\n      chunkStart += 10000;\n    }\n  }\n}","/**\n * @import {Chunk, Event, Token} from 'micromark-util-types'\n */\n\nimport { splice } from 'micromark-util-chunked';\nimport { SpliceBuffer } from './lib/splice-buffer.js';\n\n// Hidden API exposed for testing.\nexport { SpliceBuffer } from './lib/splice-buffer.js';\n\n/**\n * Tokenize subcontent.\n *\n * @param {Array<Event>} eventsArray\n *   List of events.\n * @returns {boolean}\n *   Whether subtokens were found.\n */\n// eslint-disable-next-line complexity\nexport function subtokenize(eventsArray) {\n  /** @type {Record<string, number>} */\n  const jumps = {};\n  let index = -1;\n  /** @type {Event} */\n  let event;\n  /** @type {number | undefined} */\n  let lineIndex;\n  /** @type {number} */\n  let otherIndex;\n  /** @type {Event} */\n  let otherEvent;\n  /** @type {Array<Event>} */\n  let parameters;\n  /** @type {Array<Event>} */\n  let subevents;\n  /** @type {boolean | undefined} */\n  let more;\n  const events = new SpliceBuffer(eventsArray);\n  while (++index < events.length) {\n    while (index in jumps) {\n      index = jumps[index];\n    }\n    event = events.get(index);\n\n    // Add a hook for the GFM tasklist extension, which needs to know if text\n    // is in the first content of a list item.\n    if (index && event[1].type === \"chunkFlow\" && events.get(index - 1)[1].type === \"listItemPrefix\") {\n      subevents = event[1]._tokenizer.events;\n      otherIndex = 0;\n      if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"lineEndingBlank\") {\n        otherIndex += 2;\n      }\n      if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"content\") {\n        while (++otherIndex < subevents.length) {\n          if (subevents[otherIndex][1].type === \"content\") {\n            break;\n          }\n          if (subevents[otherIndex][1].type === \"chunkText\") {\n            subevents[otherIndex][1]._isInFirstContentOfListItem = true;\n            otherIndex++;\n          }\n        }\n      }\n    }\n\n    // Enter.\n    if (event[0] === 'enter') {\n      if (event[1].contentType) {\n        Object.assign(jumps, subcontent(events, index));\n        index = jumps[index];\n        more = true;\n      }\n    }\n    // Exit.\n    else if (event[1]._container) {\n      otherIndex = index;\n      lineIndex = undefined;\n      while (otherIndex--) {\n        otherEvent = events.get(otherIndex);\n        if (otherEvent[1].type === \"lineEnding\" || otherEvent[1].type === \"lineEndingBlank\") {\n          if (otherEvent[0] === 'enter') {\n            if (lineIndex) {\n              events.get(lineIndex)[1].type = \"lineEndingBlank\";\n            }\n            otherEvent[1].type = \"lineEnding\";\n            lineIndex = otherIndex;\n          }\n        } else if (otherEvent[1].type === \"linePrefix\" || otherEvent[1].type === \"listItemIndent\") {\n          // Move past.\n        } else {\n          break;\n        }\n      }\n      if (lineIndex) {\n        // Fix position.\n        event[1].end = {\n          ...events.get(lineIndex)[1].start\n        };\n\n        // Switch container exit w/ line endings.\n        parameters = events.slice(lineIndex, index);\n        parameters.unshift(event);\n        events.splice(lineIndex, index - lineIndex + 1, parameters);\n      }\n    }\n  }\n\n  // The changes to the `events` buffer must be copied back into the eventsArray\n  splice(eventsArray, 0, Number.POSITIVE_INFINITY, events.slice(0));\n  return !more;\n}\n\n/**\n * Tokenize embedded tokens.\n *\n * @param {SpliceBuffer<Event>} events\n *   Events.\n * @param {number} eventIndex\n *   Index.\n * @returns {Record<string, number>}\n *   Gaps.\n */\nfunction subcontent(events, eventIndex) {\n  const token = events.get(eventIndex)[1];\n  const context = events.get(eventIndex)[2];\n  let startPosition = eventIndex - 1;\n  /** @type {Array<number>} */\n  const startPositions = [];\n  let tokenizer = token._tokenizer;\n  if (!tokenizer) {\n    tokenizer = context.parser[token.contentType](token.start);\n    if (token._contentTypeTextTrailing) {\n      tokenizer._contentTypeTextTrailing = true;\n    }\n  }\n  const childEvents = tokenizer.events;\n  /** @type {Array<[number, number]>} */\n  const jumps = [];\n  /** @type {Record<string, number>} */\n  const gaps = {};\n  /** @type {Array<Chunk>} */\n  let stream;\n  /** @type {Token | undefined} */\n  let previous;\n  let index = -1;\n  /** @type {Token | undefined} */\n  let current = token;\n  let adjust = 0;\n  let start = 0;\n  const breaks = [start];\n\n  // Loop forward through the linked tokens to pass them in order to the\n  // subtokenizer.\n  while (current) {\n    // Find the position of the event for this token.\n    while (events.get(++startPosition)[1] !== current) {\n      // Empty.\n    }\n    startPositions.push(startPosition);\n    if (!current._tokenizer) {\n      stream = context.sliceStream(current);\n      if (!current.next) {\n        stream.push(null);\n      }\n      if (previous) {\n        tokenizer.defineSkip(current.start);\n      }\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = true;\n      }\n      tokenizer.write(stream);\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = undefined;\n      }\n    }\n\n    // Unravel the next token.\n    previous = current;\n    current = current.next;\n  }\n\n  // Now, loop back through all events (and linked tokens), to figure out which\n  // parts belong where.\n  current = token;\n  while (++index < childEvents.length) {\n    if (\n    // Find a void token that includes a break.\n    childEvents[index][0] === 'exit' && childEvents[index - 1][0] === 'enter' && childEvents[index][1].type === childEvents[index - 1][1].type && childEvents[index][1].start.line !== childEvents[index][1].end.line) {\n      start = index + 1;\n      breaks.push(start);\n      // Help GC.\n      current._tokenizer = undefined;\n      current.previous = undefined;\n      current = current.next;\n    }\n  }\n\n  // Help GC.\n  tokenizer.events = [];\n\n  // If there’s one more token (which is the cases for lines that end in an\n  // EOF), that’s perfect: the last point we found starts it.\n  // If there isn’t then make sure any remaining content is added to it.\n  if (current) {\n    // Help GC.\n    current._tokenizer = undefined;\n    current.previous = undefined;\n  } else {\n    breaks.pop();\n  }\n\n  // Now splice the events from the subtokenizer into the current events,\n  // moving back to front so that splice indices aren’t affected.\n  index = breaks.length;\n  while (index--) {\n    const slice = childEvents.slice(breaks[index], breaks[index + 1]);\n    const start = startPositions.pop();\n    jumps.push([start, start + slice.length - 1]);\n    events.splice(start, 2, slice);\n  }\n  jumps.reverse();\n  index = -1;\n  while (++index < jumps.length) {\n    gaps[adjust + jumps[index][0]] = adjust + jumps[index][1];\n    adjust += jumps[index][1] - jumps[index][0] - 1;\n  }\n  return gaps;\n}","/**\n * @import {\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { subtokenize } from 'micromark-util-subtokenize';\n/**\n * No name because it must not be turned off.\n * @type {Construct}\n */\nexport const content = {\n  resolve: resolveContent,\n  tokenize: tokenizeContent\n};\n\n/** @type {Construct} */\nconst continuationConstruct = {\n  partial: true,\n  tokenize: tokenizeContinuation\n};\n\n/**\n * Content is transparent: it’s parsed right now. That way, definitions are also\n * parsed right now: before text in paragraphs (specifically, media) are parsed.\n *\n * @type {Resolver}\n */\nfunction resolveContent(events) {\n  subtokenize(events);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeContent(effects, ok) {\n  /** @type {Token | undefined} */\n  let previous;\n  return chunkStart;\n\n  /**\n   * Before a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkStart(code) {\n    effects.enter(\"content\");\n    previous = effects.enter(\"chunkContent\", {\n      contentType: \"content\"\n    });\n    return chunkInside(code);\n  }\n\n  /**\n   * In a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkInside(code) {\n    if (code === null) {\n      return contentEnd(code);\n    }\n\n    // To do: in `markdown-rs`, each line is parsed on its own, and everything\n    // is stitched together resolving.\n    if (markdownLineEnding(code)) {\n      return effects.check(continuationConstruct, contentContinue, contentEnd)(code);\n    }\n\n    // Data.\n    effects.consume(code);\n    return chunkInside;\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentEnd(code) {\n    effects.exit(\"chunkContent\");\n    effects.exit(\"content\");\n    return ok(code);\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentContinue(code) {\n    effects.consume(code);\n    effects.exit(\"chunkContent\");\n    previous.next = effects.enter(\"chunkContent\", {\n      contentType: \"content\",\n      previous\n    });\n    previous = previous.next;\n    return chunkInside;\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeContinuation(effects, ok, nok) {\n  const self = this;\n  return startLookahead;\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function startLookahead(code) {\n    effects.exit(\"chunkContent\");\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, prefixed, \"linePrefix\");\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function prefixed(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code);\n    }\n\n    // Always populated by defaults.\n\n    const tail = self.events[self.events.length - 1];\n    if (!self.parser.constructs.disable.null.includes('codeIndented') && tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4) {\n      return ok(code);\n    }\n    return effects.interrupt(self.parser.constructs.flow, nok, ok)(code);\n  }\n}","/**\n * @import {Effects, State, TokenType} from 'micromark-util-types'\n */\n\nimport { asciiControl, markdownLineEndingOrSpace, markdownLineEnding } from 'micromark-util-character';\n/**\n * Parse destinations.\n *\n * ###### Examples\n *\n * ```markdown\n * <a>\n * <a\\>b>\n * <a b>\n * <a)>\n * a\n * a\\)b\n * a(b)c\n * a(b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type for whole (`<a>` or `b`).\n * @param {TokenType} literalType\n *   Type when enclosed (`<a>`).\n * @param {TokenType} literalMarkerType\n *   Type for enclosing (`<` and `>`).\n * @param {TokenType} rawType\n *   Type when not enclosed (`b`).\n * @param {TokenType} stringType\n *   Type for the value (`a` or `b`).\n * @param {number | undefined} [max=Infinity]\n *   Depth of nested parens (inclusive).\n * @returns {State}\n *   Start state.\n */\nexport function factoryDestination(effects, ok, nok, type, literalType, literalMarkerType, rawType, stringType, max) {\n  const limit = max || Number.POSITIVE_INFINITY;\n  let balance = 0;\n  return start;\n\n  /**\n   * Start of destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *     ^\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 60) {\n      effects.enter(type);\n      effects.enter(literalType);\n      effects.enter(literalMarkerType);\n      effects.consume(code);\n      effects.exit(literalMarkerType);\n      return enclosedBefore;\n    }\n\n    // ASCII control, space, closing paren.\n    if (code === null || code === 32 || code === 41 || asciiControl(code)) {\n      return nok(code);\n    }\n    effects.enter(type);\n    effects.enter(rawType);\n    effects.enter(stringType);\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return raw(code);\n  }\n\n  /**\n   * After `<`, at an enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedBefore(code) {\n    if (code === 62) {\n      effects.enter(literalMarkerType);\n      effects.consume(code);\n      effects.exit(literalMarkerType);\n      effects.exit(literalType);\n      effects.exit(type);\n      return ok;\n    }\n    effects.enter(stringType);\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return enclosed(code);\n  }\n\n  /**\n   * In enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosed(code) {\n    if (code === 62) {\n      effects.exit(\"chunkString\");\n      effects.exit(stringType);\n      return enclosedBefore(code);\n    }\n    if (code === null || code === 60 || markdownLineEnding(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return code === 92 ? enclosedEscape : enclosed;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | <a\\*a>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedEscape(code) {\n    if (code === 60 || code === 62 || code === 92) {\n      effects.consume(code);\n      return enclosed;\n    }\n    return enclosed(code);\n  }\n\n  /**\n   * In raw destination.\n   *\n   * ```markdown\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function raw(code) {\n    if (!balance && (code === null || code === 41 || markdownLineEndingOrSpace(code))) {\n      effects.exit(\"chunkString\");\n      effects.exit(stringType);\n      effects.exit(rawType);\n      effects.exit(type);\n      return ok(code);\n    }\n    if (balance < limit && code === 40) {\n      effects.consume(code);\n      balance++;\n      return raw;\n    }\n    if (code === 41) {\n      effects.consume(code);\n      balance--;\n      return raw;\n    }\n\n    // ASCII control (but *not* `\\0`) and space and `(`.\n    // Note: in `markdown-rs`, `\\0` exists in codes, in `micromark-js` it\n    // doesn’t.\n    if (code === null || code === 32 || code === 40 || asciiControl(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return code === 92 ? rawEscape : raw;\n  }\n\n  /**\n   * After `\\`, at special character.\n   *\n   * ```markdown\n   * > | a\\*a\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function rawEscape(code) {\n    if (code === 40 || code === 41 || code === 92) {\n      effects.consume(code);\n      return raw;\n    }\n    return raw(code);\n  }\n}","/**\n * @import {\n *   Effects,\n *   State,\n *   TokenizeContext,\n *   TokenType\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/**\n * Parse labels.\n *\n * > 👉 **Note**: labels in markdown are capped at 999 characters in the string.\n *\n * ###### Examples\n *\n * ```markdown\n * [a]\n * [a\n * b]\n * [a\\]b]\n * ```\n *\n * @this {TokenizeContext}\n *   Tokenize context.\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole label (`[a]`).\n * @param {TokenType} markerType\n *   Type for the markers (`[` and `]`).\n * @param {TokenType} stringType\n *   Type for the identifier (`a`).\n * @returns {State}\n *   Start state.\n */\nexport function factoryLabel(effects, ok, nok, type, markerType, stringType) {\n  const self = this;\n  let size = 0;\n  /** @type {boolean} */\n  let seen;\n  return start;\n\n  /**\n   * Start of label.\n   *\n   * ```markdown\n   * > | [a]\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(type);\n    effects.enter(markerType);\n    effects.consume(code);\n    effects.exit(markerType);\n    effects.enter(stringType);\n    return atBreak;\n  }\n\n  /**\n   * In label, at something, before something else.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (size > 999 || code === null || code === 91 || code === 93 && !seen ||\n    // To do: remove in the future once we’ve switched from\n    // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n    // which doesn’t need this.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    code === 94 && !size && '_hiddenFootnoteSupport' in self.parser.constructs) {\n      return nok(code);\n    }\n    if (code === 93) {\n      effects.exit(stringType);\n      effects.enter(markerType);\n      effects.consume(code);\n      effects.exit(markerType);\n      effects.exit(type);\n      return ok;\n    }\n\n    // To do: indent? Link chunks and EOLs together?\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return atBreak;\n    }\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return labelInside(code);\n  }\n\n  /**\n   * In label, in text.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelInside(code) {\n    if (code === null || code === 91 || code === 93 || markdownLineEnding(code) || size++ > 999) {\n      effects.exit(\"chunkString\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    if (!seen) seen = !markdownSpace(code);\n    return code === 92 ? labelEscape : labelInside;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | [a\\*a]\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code);\n      size++;\n      return labelInside;\n    }\n    return labelInside(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Effects,\n *   State,\n *   TokenType\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/**\n * Parse titles.\n *\n * ###### Examples\n *\n * ```markdown\n * \"a\"\n * 'b'\n * (c)\n * \"a\n * b\"\n * 'a\n *     b'\n * (a\\)b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole title (`\"a\"`, `'b'`, `(c)`).\n * @param {TokenType} markerType\n *   Type for the markers (`\"`, `'`, `(`, and `)`).\n * @param {TokenType} stringType\n *   Type for the value (`a`).\n * @returns {State}\n *   Start state.\n */\nexport function factoryTitle(effects, ok, nok, type, markerType, stringType) {\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of title.\n   *\n   * ```markdown\n   * > | \"a\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      effects.enter(type);\n      effects.enter(markerType);\n      effects.consume(code);\n      effects.exit(markerType);\n      marker = code === 40 ? 41 : code;\n      return begin;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After opening marker.\n   *\n   * This is also used at the closing marker.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function begin(code) {\n    if (code === marker) {\n      effects.enter(markerType);\n      effects.consume(code);\n      effects.exit(markerType);\n      effects.exit(type);\n      return ok;\n    }\n    effects.enter(stringType);\n    return atBreak(code);\n  }\n\n  /**\n   * At something, before something else.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.exit(stringType);\n      return begin(marker);\n    }\n    if (code === null) {\n      return nok(code);\n    }\n\n    // Note: blank lines can’t exist in content.\n    if (markdownLineEnding(code)) {\n      // To do: use `space_or_tab_eol_with_options`, connect.\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return factorySpace(effects, atBreak, \"linePrefix\");\n    }\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return inside(code);\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker || code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return code === 92 ? escape : inside;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | \"a\\*b\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function escape(code) {\n    if (code === marker || code === 92) {\n      effects.consume(code);\n      return inside;\n    }\n    return inside(code);\n  }\n}","/**\n * @import {Effects, State} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   line endings or spaces in markdown are often optional, in which case this\n *     factory can be used and `ok` will be switched to whether spaces were found\n *     or not\n * *   one line ending or space can be detected with\n *     `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace`\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @returns {State}\n *   Start state.\n */\nexport function factoryWhitespace(effects, ok) {\n  /** @type {boolean} */\n  let seen;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      seen = true;\n      return start;\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, start, seen ? \"linePrefix\" : \"lineSuffix\")(code);\n    }\n    return ok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factorySpace } from 'micromark-factory-space';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\n/** @type {Construct} */\nexport const definition = {\n  name: 'definition',\n  tokenize: tokenizeDefinition\n};\n\n/** @type {Construct} */\nconst titleBefore = {\n  partial: true,\n  tokenize: tokenizeTitleBefore\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeDefinition(effects, ok, nok) {\n  const self = this;\n  /** @type {string} */\n  let identifier;\n  return start;\n\n  /**\n   * At start of a definition.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // Do not interrupt paragraphs (but do follow definitions).\n    // To do: do `interrupt` the way `markdown-rs` does.\n    // To do: parse whitespace the way `markdown-rs` does.\n    effects.enter(\"definition\");\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at `[`.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    // To do: parse whitespace the way `markdown-rs` does.\n\n    return factoryLabel.call(self, effects, labelAfter,\n    // Note: we don’t need to reset the way `markdown-rs` does.\n    nok, \"definitionLabel\", \"definitionLabelMarker\", \"definitionLabelString\")(code);\n  }\n\n  /**\n   * After label.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAfter(code) {\n    identifier = normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1));\n    if (code === 58) {\n      effects.enter(\"definitionMarker\");\n      effects.consume(code);\n      effects.exit(\"definitionMarker\");\n      return markerAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After marker.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function markerAfter(code) {\n    // Note: whitespace is optional.\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, destinationBefore)(code) : destinationBefore(code);\n  }\n\n  /**\n   * Before destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationBefore(code) {\n    return factoryDestination(effects, destinationAfter,\n    // Note: we don’t need to reset the way `markdown-rs` does.\n    nok, \"definitionDestination\", \"definitionDestinationLiteral\", \"definitionDestinationLiteralMarker\", \"definitionDestinationRaw\", \"definitionDestinationString\")(code);\n  }\n\n  /**\n   * After destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationAfter(code) {\n    return effects.attempt(titleBefore, after, after)(code);\n  }\n\n  /**\n   * After definition.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return markdownSpace(code) ? factorySpace(effects, afterWhitespace, \"whitespace\")(code) : afterWhitespace(code);\n  }\n\n  /**\n   * After definition, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterWhitespace(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"definition\");\n\n      // Note: we don’t care about uniqueness.\n      // It’s likely that that doesn’t happen very frequently.\n      // It is more likely that it wastes precious time.\n      self.parser.defined.push(identifier);\n\n      // To do: `markdown-rs` interrupt.\n      // // You’d be interrupting.\n      // tokenizer.interrupt = true\n      return ok(code);\n    }\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeTitleBefore(effects, ok, nok) {\n  return titleBefore;\n\n  /**\n   * After destination, at whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleBefore(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, beforeMarker)(code) : nok(code);\n  }\n\n  /**\n   * At title.\n   *\n   * ```markdown\n   *   | [a]: b\n   * > | \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeMarker(code) {\n    return factoryTitle(effects, titleAfter, nok, \"definitionTitle\", \"definitionTitleMarker\", \"definitionTitleString\")(code);\n  }\n\n  /**\n   * After title.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfter(code) {\n    return markdownSpace(code) ? factorySpace(effects, titleAfterOptionalWhitespace, \"whitespace\")(code) : titleAfterOptionalWhitespace(code);\n  }\n\n  /**\n   * After title, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfterOptionalWhitespace(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const hardBreakEscape = {\n  name: 'hardBreakEscape',\n  tokenize: tokenizeHardBreakEscape\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of a hard break (escape).\n   *\n   * ```markdown\n   * > | a\\\n   *      ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"hardBreakEscape\");\n    effects.consume(code);\n    return after;\n  }\n\n  /**\n   * After `\\`, at eol.\n   *\n   * ```markdown\n   * > | a\\\n   *       ^\n   *   | b\n   * ```\n   *\n   *  @type {State}\n   */\n  function after(code) {\n    if (markdownLineEnding(code)) {\n      effects.exit(\"hardBreakEscape\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {Construct} */\nexport const headingAtx = {\n  name: 'headingAtx',\n  resolve: resolveHeadingAtx,\n  tokenize: tokenizeHeadingAtx\n};\n\n/** @type {Resolver} */\nfunction resolveHeadingAtx(events, context) {\n  let contentEnd = events.length - 2;\n  let contentStart = 3;\n  /** @type {Token} */\n  let content;\n  /** @type {Token} */\n  let text;\n\n  // Prefix whitespace, part of the opening.\n  if (events[contentStart][1].type === \"whitespace\") {\n    contentStart += 2;\n  }\n\n  // Suffix whitespace, part of the closing.\n  if (contentEnd - 2 > contentStart && events[contentEnd][1].type === \"whitespace\") {\n    contentEnd -= 2;\n  }\n  if (events[contentEnd][1].type === \"atxHeadingSequence\" && (contentStart === contentEnd - 1 || contentEnd - 4 > contentStart && events[contentEnd - 2][1].type === \"whitespace\")) {\n    contentEnd -= contentStart + 1 === contentEnd ? 2 : 4;\n  }\n  if (contentEnd > contentStart) {\n    content = {\n      type: \"atxHeadingText\",\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end\n    };\n    text = {\n      type: \"chunkText\",\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end,\n      contentType: \"text\"\n    };\n    splice(events, contentStart, contentEnd - contentStart + 1, [['enter', content, context], ['enter', text, context], ['exit', text, context], ['exit', content, context]]);\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n  let size = 0;\n  return start;\n\n  /**\n   * Start of a heading (atx).\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    effects.enter(\"atxHeading\");\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at `#`.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"atxHeadingSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 35 && size++ < 6) {\n      effects.consume(code);\n      return sequenceOpen;\n    }\n\n    // Always at least one `#`.\n    if (code === null || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"atxHeadingSequence\");\n      return atBreak(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ## aa\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === 35) {\n      effects.enter(\"atxHeadingSequence\");\n      return sequenceFurther(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"atxHeading\");\n      // To do: interrupt like `markdown-rs`.\n      // // Feel free to interrupt.\n      // tokenizer.interrupt = false\n      return ok(code);\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, atBreak, \"whitespace\")(code);\n    }\n\n    // To do: generate `data` tokens, add the `text` token later.\n    // Needs edit map, see: `markdown.rs`.\n    effects.enter(\"atxHeadingText\");\n    return data(code);\n  }\n\n  /**\n   * In further sequence (after whitespace).\n   *\n   * Could be normal “visible” hashes in the heading or a final sequence.\n   *\n   * ```markdown\n   * > | ## aa ##\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceFurther(code) {\n    if (code === 35) {\n      effects.consume(code);\n      return sequenceFurther;\n    }\n    effects.exit(\"atxHeadingSequence\");\n    return atBreak(code);\n  }\n\n  /**\n   * In text.\n   *\n   * ```markdown\n   * > | ## aa\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"atxHeadingText\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return data;\n  }\n}","/**\n * List of lowercase HTML “block” tag names.\n *\n * The list, when parsing HTML (flow), results in more relaxed rules (condition\n * 6).\n * Because they are known blocks, the HTML-like syntax doesn’t have to be\n * strictly parsed.\n * For tag names not in this list, a more strict algorithm (condition 7) is used\n * to detect whether the HTML-like syntax is seen as HTML (flow) or not.\n *\n * This is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `search` was added in `CommonMark@0.31`.\n */\nexport const htmlBlockNames = [\n  'address',\n  'article',\n  'aside',\n  'base',\n  'basefont',\n  'blockquote',\n  'body',\n  'caption',\n  'center',\n  'col',\n  'colgroup',\n  'dd',\n  'details',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'frame',\n  'frameset',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hr',\n  'html',\n  'iframe',\n  'legend',\n  'li',\n  'link',\n  'main',\n  'menu',\n  'menuitem',\n  'nav',\n  'noframes',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'param',\n  'search',\n  'section',\n  'summary',\n  'table',\n  'tbody',\n  'td',\n  'tfoot',\n  'th',\n  'thead',\n  'title',\n  'tr',\n  'track',\n  'ul'\n]\n\n/**\n * List of lowercase HTML “raw” tag names.\n *\n * The list, when parsing HTML (flow), results in HTML that can include lines\n * without exiting, until a closing tag also in this list is found (condition\n * 1).\n *\n * This module is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`.\n */\nexport const htmlRawNames = ['pre', 'script', 'style', 'textarea']\n","/**\n * @import {\n *   Code,\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { htmlBlockNames, htmlRawNames } from 'micromark-util-html-tag-name';\nimport { blankLine } from './blank-line.js';\n\n/** @type {Construct} */\nexport const htmlFlow = {\n  concrete: true,\n  name: 'htmlFlow',\n  resolveTo: resolveToHtmlFlow,\n  tokenize: tokenizeHtmlFlow\n};\n\n/** @type {Construct} */\nconst blankLineBefore = {\n  partial: true,\n  tokenize: tokenizeBlankLineBefore\n};\nconst nonLazyContinuationStart = {\n  partial: true,\n  tokenize: tokenizeNonLazyContinuationStart\n};\n\n/** @type {Resolver} */\nfunction resolveToHtmlFlow(events) {\n  let index = events.length;\n  while (index--) {\n    if (events[index][0] === 'enter' && events[index][1].type === \"htmlFlow\") {\n      break;\n    }\n  }\n  if (index > 1 && events[index - 2][1].type === \"linePrefix\") {\n    // Add the prefix start to the HTML token.\n    events[index][1].start = events[index - 2][1].start;\n    // Add the prefix start to the HTML line token.\n    events[index + 1][1].start = events[index - 2][1].start;\n    // Remove the line prefix.\n    events.splice(index - 2, 2);\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n  const self = this;\n  /** @type {number} */\n  let marker;\n  /** @type {boolean} */\n  let closingTag;\n  /** @type {string} */\n  let buffer;\n  /** @type {number} */\n  let index;\n  /** @type {Code} */\n  let markerB;\n  return start;\n\n  /**\n   * Start of HTML (flow).\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    return before(code);\n  }\n\n  /**\n   * At `<`, after optional whitespace.\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"htmlFlow\");\n    effects.enter(\"htmlFlowData\");\n    effects.consume(code);\n    return open;\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | <x />\n   *      ^\n   * > | <!doctype>\n   *      ^\n   * > | <!--xxx-->\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code);\n      return declarationOpen;\n    }\n    if (code === 47) {\n      effects.consume(code);\n      closingTag = true;\n      return tagCloseStart;\n    }\n    if (code === 63) {\n      effects.consume(code);\n      marker = 3;\n      // To do:\n      // tokenizer.concrete = true\n      // To do: use `markdown-rs` style interrupt.\n      // While we’re in an instruction instead of a declaration, we’re on a `?`\n      // right now, so we do need to search for `>`, similar to declarations.\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      // Always the case.\n      effects.consume(code);\n      buffer = String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *       ^\n   * > | <!--xxx-->\n   *       ^\n   * > | <![CDATA[>&<]]>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code);\n      marker = 2;\n      return commentOpenInside;\n    }\n    if (code === 91) {\n      effects.consume(code);\n      marker = 5;\n      index = 0;\n      return cdataOpenInside;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      marker = 4;\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!-`, inside a comment, at another `-`.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<![`, inside CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *        ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = \"CDATA[\";\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code);\n      if (index === value.length) {\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok : continuation;\n      }\n      return cdataOpenInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | </x>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    if (asciiAlpha(code)) {\n      // Always the case.\n      effects.consume(code);\n      buffer = String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In tag name.\n   *\n   * ```markdown\n   * > | <ab>\n   *      ^^\n   * > | </ab>\n   *       ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagName(code) {\n    if (code === null || code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      const slash = code === 47;\n      const name = buffer.toLowerCase();\n      if (!slash && !closingTag && htmlRawNames.includes(name)) {\n        marker = 1;\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code);\n      }\n      if (htmlBlockNames.includes(buffer.toLowerCase())) {\n        marker = 6;\n        if (slash) {\n          effects.consume(code);\n          return basicSelfClosing;\n        }\n\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code);\n      }\n      marker = 7;\n      // Do not support complete HTML when interrupting.\n      return self.interrupt && !self.parser.lazy[self.now().line] ? nok(code) : closingTag ? completeClosingTagAfter(code) : completeAttributeNameBefore(code);\n    }\n\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      buffer += String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After closing slash of a basic tag name.\n   *\n   * ```markdown\n   * > | <div/>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function basicSelfClosing(code) {\n    if (code === 62) {\n      effects.consume(code);\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuation;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After closing slash of a complete tag name.\n   *\n   * ```markdown\n   * > | <x/>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeClosingTagAfter(code) {\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeClosingTagAfter;\n    }\n    return completeEnd(code);\n  }\n\n  /**\n   * At an attribute name.\n   *\n   * At first, this state is used after a complete tag name, after whitespace,\n   * where it expects optional attributes or the end of the tag.\n   * It is also reused after attributes, when expecting more optional\n   * attributes.\n   *\n   * ```markdown\n   * > | <a />\n   *        ^\n   * > | <a :b>\n   *        ^\n   * > | <a _b>\n   *        ^\n   * > | <a b>\n   *        ^\n   * > | <a >\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameBefore(code) {\n    if (code === 47) {\n      effects.consume(code);\n      return completeEnd;\n    }\n\n    // ASCII alphanumerical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code);\n      return completeAttributeName;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeNameBefore;\n    }\n    return completeEnd(code);\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | <a :b>\n   *         ^\n   * > | <a _b>\n   *         ^\n   * > | <a b>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeName(code) {\n    // ASCII alphanumerical and `-`, `.`, `:`, and `_`.\n    if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return completeAttributeName;\n    }\n    return completeAttributeNameAfter(code);\n  }\n\n  /**\n   * After attribute name, at an optional initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b>\n   *         ^\n   * > | <a b=c>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code);\n      return completeAttributeValueBefore;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeNameAfter;\n    }\n    return completeAttributeNameBefore(code);\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * > | <a b=\"c\">\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueBefore(code) {\n    if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n      return nok(code);\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code);\n      markerB = code;\n      return completeAttributeValueQuoted;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeValueBefore;\n    }\n    return completeAttributeValueUnquoted(code);\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *           ^\n   * > | <a b='c'>\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuoted(code) {\n    if (code === markerB) {\n      effects.consume(code);\n      markerB = null;\n      return completeAttributeValueQuotedAfter;\n    }\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return completeAttributeValueQuoted;\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueUnquoted(code) {\n    if (code === null || code === 34 || code === 39 || code === 47 || code === 60 || code === 61 || code === 62 || code === 96 || markdownLineEndingOrSpace(code)) {\n      return completeAttributeNameAfter(code);\n    }\n    effects.consume(code);\n    return completeAttributeValueUnquoted;\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the\n   * end of the tag.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownSpace(code)) {\n      return completeAttributeNameBefore(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In certain circumstances of a complete tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeEnd(code) {\n    if (code === 62) {\n      effects.consume(code);\n      return completeAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `>` in a complete tag.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAfter(code) {\n    if (code === null || markdownLineEnding(code)) {\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return continuation(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In continuation of any HTML kind.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuation(code) {\n    if (code === 45 && marker === 2) {\n      effects.consume(code);\n      return continuationCommentInside;\n    }\n    if (code === 60 && marker === 1) {\n      effects.consume(code);\n      return continuationRawTagOpen;\n    }\n    if (code === 62 && marker === 4) {\n      effects.consume(code);\n      return continuationClose;\n    }\n    if (code === 63 && marker === 3) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    if (code === 93 && marker === 5) {\n      effects.consume(code);\n      return continuationCdataInside;\n    }\n    if (markdownLineEnding(code) && (marker === 6 || marker === 7)) {\n      effects.exit(\"htmlFlowData\");\n      return effects.check(blankLineBefore, continuationAfter, continuationStart)(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"htmlFlowData\");\n      return continuationStart(code);\n    }\n    effects.consume(code);\n    return continuation;\n  }\n\n  /**\n   * In continuation, at eol.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStart(code) {\n    return effects.check(nonLazyContinuationStart, continuationStartNonLazy, continuationAfter)(code);\n  }\n\n  /**\n   * In continuation, at eol, before non-lazy content.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStartNonLazy(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return continuationBefore;\n  }\n\n  /**\n   * In continuation, before non-lazy content.\n   *\n   * ```markdown\n   *   | <x>\n   * > | asd\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return continuationStart(code);\n    }\n    effects.enter(\"htmlFlowData\");\n    return continuation(code);\n  }\n\n  /**\n   * In comment continuation, after one `-`, expecting another.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCommentInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In raw continuation, after `<`, at `/`.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawTagOpen(code) {\n    if (code === 47) {\n      effects.consume(code);\n      buffer = '';\n      return continuationRawEndTag;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In raw continuation, after `</`, in a raw tag name.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                             ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawEndTag(code) {\n    if (code === 62) {\n      const name = buffer.toLowerCase();\n      if (htmlRawNames.includes(name)) {\n        effects.consume(code);\n        return continuationClose;\n      }\n      return continuation(code);\n    }\n    if (asciiAlpha(code) && buffer.length < 8) {\n      // Always the case.\n      effects.consume(code);\n      buffer += String.fromCharCode(code);\n      return continuationRawEndTag;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In cdata continuation, after `]`, expecting `]>`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *                  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCdataInside(code) {\n    if (code === 93) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In declaration or instruction continuation, at `>`.\n   *\n   * ```markdown\n   * > | <!-->\n   *         ^\n   * > | <?>\n   *       ^\n   * > | <!q>\n   *        ^\n   * > | <!--ab-->\n   *             ^\n   * > | <![CDATA[>&<]]>\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationDeclarationInside(code) {\n    if (code === 62) {\n      effects.consume(code);\n      return continuationClose;\n    }\n\n    // More dashes.\n    if (code === 45 && marker === 2) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In closed continuation: everything we get until the eol/eof is part of it.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationClose(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"htmlFlowData\");\n      return continuationAfter(code);\n    }\n    effects.consume(code);\n    return continuationClose;\n  }\n\n  /**\n   * Done.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationAfter(code) {\n    effects.exit(\"htmlFlow\");\n    // // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    // // No longer concrete.\n    // tokenizer.concrete = false\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuationStart(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * At eol, before continuation.\n   *\n   * ```markdown\n   * > | * ```js\n   *            ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * A continuation.\n   *\n   * ```markdown\n   *   | * ```js\n   * > | b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n  return start;\n\n  /**\n   * Before eol, expecting blank line.\n   *\n   * ```markdown\n   * > | <div>\n   *          ^\n   *   |\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return effects.attempt(blankLine, ok, nok);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const htmlText = {\n  name: 'htmlText',\n  tokenize: tokenizeHtmlText\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n  const self = this;\n  /** @type {NonNullable<Code> | undefined} */\n  let marker;\n  /** @type {number} */\n  let index;\n  /** @type {State} */\n  let returnState;\n  return start;\n\n  /**\n   * Start of HTML (text).\n   *\n   * ```markdown\n   * > | a <b> c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"htmlText\");\n    effects.enter(\"htmlTextData\");\n    effects.consume(code);\n    return open;\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | a <b> c\n   *        ^\n   * > | a <!doctype> c\n   *        ^\n   * > | a <!--b--> c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code);\n      return declarationOpen;\n    }\n    if (code === 47) {\n      effects.consume(code);\n      return tagCloseStart;\n    }\n    if (code === 63) {\n      effects.consume(code);\n      return instruction;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return tagOpen;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | a <!doctype> c\n   *         ^\n   * > | a <!--b--> c\n   *         ^\n   * > | a <![CDATA[>&<]]> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentOpenInside;\n    }\n    if (code === 91) {\n      effects.consume(code);\n      index = 0;\n      return cdataOpenInside;\n    }\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return declaration;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In a comment, after `<!-`, at another `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentEnd;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In comment.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function comment(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 45) {\n      effects.consume(code);\n      return commentClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = comment;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return comment;\n  }\n\n  /**\n   * In comment, after `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentClose(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentEnd;\n    }\n    return comment(code);\n  }\n\n  /**\n   * In comment, after `--`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentEnd(code) {\n    return code === 62 ? end(code) : code === 45 ? commentClose(code) : comment(code);\n  }\n\n  /**\n   * After `<![`, in CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *          ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = \"CDATA[\";\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code);\n      return index === value.length ? cdata : cdataOpenInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In CDATA.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdata(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 93) {\n      effects.consume(code);\n      return cdataClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = cdata;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return cdata;\n  }\n\n  /**\n   * In CDATA, after `]`, at another `]`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataClose(code) {\n    if (code === 93) {\n      effects.consume(code);\n      return cdataEnd;\n    }\n    return cdata(code);\n  }\n\n  /**\n   * In CDATA, after `]]`, at `>`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataEnd(code) {\n    if (code === 62) {\n      return end(code);\n    }\n    if (code === 93) {\n      effects.consume(code);\n      return cdataEnd;\n    }\n    return cdata(code);\n  }\n\n  /**\n   * In declaration.\n   *\n   * ```markdown\n   * > | a <!b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declaration(code) {\n    if (code === null || code === 62) {\n      return end(code);\n    }\n    if (markdownLineEnding(code)) {\n      returnState = declaration;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return declaration;\n  }\n\n  /**\n   * In instruction.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instruction(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 63) {\n      effects.consume(code);\n      return instructionClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = instruction;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return instruction;\n  }\n\n  /**\n   * In instruction, after `?`, at `>`.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instructionClose(code) {\n    return code === 62 ? end(code) : instruction(code);\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return tagClose;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `</x`, in a tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagClose(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagClose;\n    }\n    return tagCloseBetween(code);\n  }\n\n  /**\n   * In closing tag, after tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseBetween(code) {\n    if (markdownLineEnding(code)) {\n      returnState = tagCloseBetween;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagCloseBetween;\n    }\n    return end(code);\n  }\n\n  /**\n   * After `<x`, in opening tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpen(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagOpen;\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In opening tag, after tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenBetween(code) {\n    if (code === 47) {\n      effects.consume(code);\n      return end;\n    }\n\n    // ASCII alphabetical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code);\n      return tagOpenAttributeName;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenBetween;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenBetween;\n    }\n    return end(code);\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeName(code) {\n    // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n    if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagOpenAttributeName;\n    }\n    return tagOpenAttributeNameAfter(code);\n  }\n\n  /**\n   * After attribute name, before initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code);\n      return tagOpenAttributeValueBefore;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeNameAfter;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenAttributeNameAfter;\n    }\n    return tagOpenBetween(code);\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueBefore(code) {\n    if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n      return nok(code);\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code);\n      marker = code;\n      return tagOpenAttributeValueQuoted;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueBefore;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenAttributeValueBefore;\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueUnquoted;\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuoted(code) {\n    if (code === marker) {\n      effects.consume(code);\n      marker = undefined;\n      return tagOpenAttributeValueQuotedAfter;\n    }\n    if (code === null) {\n      return nok(code);\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueQuoted;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueQuoted;\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueUnquoted(code) {\n    if (code === null || code === 34 || code === 39 || code === 60 || code === 61 || code === 96) {\n      return nok(code);\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueUnquoted;\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the end\n   * of the tag.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In certain circumstances of a tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function end(code) {\n    if (code === 62) {\n      effects.consume(code);\n      effects.exit(\"htmlTextData\");\n      effects.exit(\"htmlText\");\n      return ok;\n    }\n    return nok(code);\n  }\n\n  /**\n   * At eol.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   * > | a <!--a\n   *            ^\n   *   | b-->\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingBefore(code) {\n    effects.exit(\"htmlTextData\");\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return lineEndingAfter;\n  }\n\n  /**\n   * After eol, at optional whitespace.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfter(code) {\n    // Always populated by defaults.\n\n    return markdownSpace(code) ? factorySpace(effects, lineEndingAfterPrefix, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : lineEndingAfterPrefix(code);\n  }\n\n  /**\n   * After eol, after optional whitespace.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfterPrefix(code) {\n    effects.enter(\"htmlTextData\");\n    return returnState(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   Event,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const labelEnd = {\n  name: 'labelEnd',\n  resolveAll: resolveAllLabelEnd,\n  resolveTo: resolveToLabelEnd,\n  tokenize: tokenizeLabelEnd\n};\n\n/** @type {Construct} */\nconst resourceConstruct = {\n  tokenize: tokenizeResource\n};\n/** @type {Construct} */\nconst referenceFullConstruct = {\n  tokenize: tokenizeReferenceFull\n};\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {\n  tokenize: tokenizeReferenceCollapsed\n};\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n  let index = -1;\n  /** @type {Array<Event>} */\n  const newEvents = [];\n  while (++index < events.length) {\n    const token = events[index][1];\n    newEvents.push(events[index]);\n    if (token.type === \"labelImage\" || token.type === \"labelLink\" || token.type === \"labelEnd\") {\n      // Remove the marker.\n      const offset = token.type === \"labelImage\" ? 4 : 2;\n      token.type = \"data\";\n      index += offset;\n    }\n  }\n\n  // If the events are equal, we don't have to copy newEvents to events\n  if (events.length !== newEvents.length) {\n    splice(events, 0, events.length, newEvents);\n  }\n  return events;\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n  let index = events.length;\n  let offset = 0;\n  /** @type {Token} */\n  let token;\n  /** @type {number | undefined} */\n  let open;\n  /** @type {number | undefined} */\n  let close;\n  /** @type {Array<Event>} */\n  let media;\n\n  // Find an opening.\n  while (index--) {\n    token = events[index][1];\n    if (open) {\n      // If we see another link, or inactive link label, we’ve been here before.\n      if (token.type === \"link\" || token.type === \"labelLink\" && token._inactive) {\n        break;\n      }\n\n      // Mark other link openings as inactive, as we can’t have links in\n      // links.\n      if (events[index][0] === 'enter' && token.type === \"labelLink\") {\n        token._inactive = true;\n      }\n    } else if (close) {\n      if (events[index][0] === 'enter' && (token.type === \"labelImage\" || token.type === \"labelLink\") && !token._balanced) {\n        open = index;\n        if (token.type !== \"labelLink\") {\n          offset = 2;\n          break;\n        }\n      }\n    } else if (token.type === \"labelEnd\") {\n      close = index;\n    }\n  }\n  const group = {\n    type: events[open][1].type === \"labelLink\" ? \"link\" : \"image\",\n    start: {\n      ...events[open][1].start\n    },\n    end: {\n      ...events[events.length - 1][1].end\n    }\n  };\n  const label = {\n    type: \"label\",\n    start: {\n      ...events[open][1].start\n    },\n    end: {\n      ...events[close][1].end\n    }\n  };\n  const text = {\n    type: \"labelText\",\n    start: {\n      ...events[open + offset + 2][1].end\n    },\n    end: {\n      ...events[close - 2][1].start\n    }\n  };\n  media = [['enter', group, context], ['enter', label, context]];\n\n  // Opening marker.\n  media = push(media, events.slice(open + 1, open + offset + 3));\n\n  // Text open.\n  media = push(media, [['enter', text, context]]);\n\n  // Always populated by defaults.\n\n  // Between.\n  media = push(media, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context));\n\n  // Text close, marker close, label close.\n  media = push(media, [['exit', text, context], events[close - 2], events[close - 1], ['exit', label, context]]);\n\n  // Reference, resource, or so.\n  media = push(media, events.slice(close + 1));\n\n  // Media close.\n  media = push(media, [['exit', group, context]]);\n  splice(events, open, events.length, media);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n  const self = this;\n  let index = self.events.length;\n  /** @type {Token} */\n  let labelStart;\n  /** @type {boolean} */\n  let defined;\n\n  // Find an opening.\n  while (index--) {\n    if ((self.events[index][1].type === \"labelImage\" || self.events[index][1].type === \"labelLink\") && !self.events[index][1]._balanced) {\n      labelStart = self.events[index][1];\n      break;\n    }\n  }\n  return start;\n\n  /**\n   * Start of label end.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // If there is not an okay opening.\n    if (!labelStart) {\n      return nok(code);\n    }\n\n    // If the corresponding label (link) start is marked as inactive,\n    // it means we’d be wrapping a link, like this:\n    //\n    // ```markdown\n    // > | a [b [c](d) e](f) g.\n    //                  ^\n    // ```\n    //\n    // We can’t have that, so it’s just balanced brackets.\n    if (labelStart._inactive) {\n      return labelEndNok(code);\n    }\n    defined = self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize({\n      start: labelStart.end,\n      end: self.now()\n    })));\n    effects.enter(\"labelEnd\");\n    effects.enter(\"labelMarker\");\n    effects.consume(code);\n    effects.exit(\"labelMarker\");\n    effects.exit(\"labelEnd\");\n    return after;\n  }\n\n  /**\n   * After `]`.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n    // an extension.\n\n    // Resource (`[asd](fgh)`)?\n    if (code === 40) {\n      return effects.attempt(resourceConstruct, labelEndOk, defined ? labelEndOk : labelEndNok)(code);\n    }\n\n    // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n    if (code === 91) {\n      return effects.attempt(referenceFullConstruct, labelEndOk, defined ? referenceNotFull : labelEndNok)(code);\n    }\n\n    // Shortcut (`[asd]`) reference?\n    return defined ? labelEndOk(code) : labelEndNok(code);\n  }\n\n  /**\n   * After `]`, at `[`, but not at a full reference.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] b\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceNotFull(code) {\n    return effects.attempt(referenceCollapsedConstruct, labelEndOk, labelEndNok)(code);\n  }\n\n  /**\n   * Done, we found something.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *           ^\n   * > | [a][b] c\n   *           ^\n   * > | [a][] b\n   *          ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndOk(code) {\n    // Note: `markdown-rs` does a bunch of stuff here.\n    return ok(code);\n  }\n\n  /**\n   * Done, it’s nothing.\n   *\n   * There was an okay opening, but we didn’t match anything.\n   *\n   * ```markdown\n   * > | [a](b c\n   *        ^\n   * > | [a][b c\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndNok(code) {\n    labelStart._balanced = true;\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n  return resourceStart;\n\n  /**\n   * At a resource.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceStart(code) {\n    effects.enter(\"resource\");\n    effects.enter(\"resourceMarker\");\n    effects.consume(code);\n    effects.exit(\"resourceMarker\");\n    return resourceBefore;\n  }\n\n  /**\n   * In resource, after `(`, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBefore(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceOpen)(code) : resourceOpen(code);\n  }\n\n  /**\n   * In resource, after optional whitespace, at `)` or a destination.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceOpen(code) {\n    if (code === 41) {\n      return resourceEnd(code);\n    }\n    return factoryDestination(effects, resourceDestinationAfter, resourceDestinationMissing, \"resourceDestination\", \"resourceDestinationLiteral\", \"resourceDestinationLiteralMarker\", \"resourceDestinationRaw\", \"resourceDestinationString\", 32)(code);\n  }\n\n  /**\n   * In resource, after destination, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationAfter(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceBetween)(code) : resourceEnd(code);\n  }\n\n  /**\n   * At invalid destination.\n   *\n   * ```markdown\n   * > | [a](<<) b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationMissing(code) {\n    return nok(code);\n  }\n\n  /**\n   * In resource, after destination and whitespace, at `(` or title.\n   *\n   * ```markdown\n   * > | [a](b ) c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBetween(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      return factoryTitle(effects, resourceTitleAfter, nok, \"resourceTitle\", \"resourceTitleMarker\", \"resourceTitleString\")(code);\n    }\n    return resourceEnd(code);\n  }\n\n  /**\n   * In resource, after title, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b \"c\") d\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceTitleAfter(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceEnd)(code) : resourceEnd(code);\n  }\n\n  /**\n   * In resource, at `)`.\n   *\n   * ```markdown\n   * > | [a](b) d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceEnd(code) {\n    if (code === 41) {\n      effects.enter(\"resourceMarker\");\n      effects.consume(code);\n      effects.exit(\"resourceMarker\");\n      effects.exit(\"resource\");\n      return ok;\n    }\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n  const self = this;\n  return referenceFull;\n\n  /**\n   * In a reference (full), at the `[`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFull(code) {\n    return factoryLabel.call(self, effects, referenceFullAfter, referenceFullMissing, \"reference\", \"referenceMarker\", \"referenceString\")(code);\n  }\n\n  /**\n   * In a reference (full), after `]`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullAfter(code) {\n    return self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1))) ? ok(code) : nok(code);\n  }\n\n  /**\n   * In reference (full) that was missing.\n   *\n   * ```markdown\n   * > | [a][b d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullMissing(code) {\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n  return referenceCollapsedStart;\n\n  /**\n   * In reference (collapsed), at `[`.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceCollapsedStart(code) {\n    // We only attempt a collapsed label if there’s a `[`.\n\n    effects.enter(\"reference\");\n    effects.enter(\"referenceMarker\");\n    effects.consume(code);\n    effects.exit(\"referenceMarker\");\n    return referenceCollapsedOpen;\n  }\n\n  /**\n   * In reference (collapsed), at `]`.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *         ^\n   * ```\n   *\n   *  @type {State}\n   */\n  function referenceCollapsedOpen(code) {\n    if (code === 93) {\n      effects.enter(\"referenceMarker\");\n      effects.consume(code);\n      effects.exit(\"referenceMarker\");\n      effects.exit(\"reference\");\n      return ok;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartImage = {\n  name: 'labelStartImage',\n  resolveAll: labelEnd.resolveAll,\n  tokenize: tokenizeLabelStartImage\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of label (image) start.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"labelImage\");\n    effects.enter(\"labelImageMarker\");\n    effects.consume(code);\n    effects.exit(\"labelImageMarker\");\n    return open;\n  }\n\n  /**\n   * After `!`, at `[`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 91) {\n      effects.enter(\"labelMarker\");\n      effects.consume(code);\n      effects.exit(\"labelMarker\");\n      effects.exit(\"labelImage\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `![`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *         ^\n   * ```\n   *\n   * This is needed in because, when GFM footnotes are enabled, images never\n   * form when started with a `^`.\n   * Instead, links form:\n   *\n   * ```markdown\n   * ![^a](b)\n   *\n   * ![^a][b]\n   *\n   * [b]: c\n   * ```\n   *\n   * ```html\n   * <p>!<a href=\\\"b\\\">^a</a></p>\n   * <p>!<a href=\\\"c\\\">^a</a></p>\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // To do: use a new field to do this, this is still needed for\n    // `micromark-extension-gfm-footnote`, but the `label-start-link`\n    // behavior isn’t.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartLink = {\n  name: 'labelStartLink',\n  resolveAll: labelEnd.resolveAll,\n  tokenize: tokenizeLabelStartLink\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of label (link) start.\n   *\n   * ```markdown\n   * > | a [b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"labelLink\");\n    effects.enter(\"labelMarker\");\n    effects.consume(code);\n    effects.exit(\"labelMarker\");\n    effects.exit(\"labelLink\");\n    return after;\n  }\n\n  /** @type {State} */\n  function after(code) {\n    // To do: this isn’t needed in `micromark-extension-gfm-footnote`,\n    // remove.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const lineEnding = {\n  name: 'lineEnding',\n  tokenize: tokenizeLineEnding\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, ok, \"linePrefix\");\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const thematicBreak = {\n  name: 'thematicBreak',\n  tokenize: tokenizeThematicBreak\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeThematicBreak(effects, ok, nok) {\n  let size = 0;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of thematic break.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"thematicBreak\");\n    // To do: parse indent like `markdown-rs`.\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at marker.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    marker = code;\n    return atBreak(code);\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.enter(\"thematicBreakSequence\");\n      return sequence(code);\n    }\n    if (size >= 3 && (code === null || markdownLineEnding(code))) {\n      effects.exit(\"thematicBreak\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequence(code) {\n    if (code === marker) {\n      effects.consume(code);\n      size++;\n      return sequence;\n    }\n    effects.exit(\"thematicBreakSequence\");\n    return markdownSpace(code) ? factorySpace(effects, atBreak, \"whitespace\")(code) : atBreak(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   Exiter,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiDigit, markdownSpace } from 'micromark-util-character';\nimport { blankLine } from './blank-line.js';\nimport { thematicBreak } from './thematic-break.js';\n\n/** @type {Construct} */\nexport const list = {\n  continuation: {\n    tokenize: tokenizeListContinuation\n  },\n  exit: tokenizeListEnd,\n  name: 'list',\n  tokenize: tokenizeListStart\n};\n\n/** @type {Construct} */\nconst listItemPrefixWhitespaceConstruct = {\n  partial: true,\n  tokenize: tokenizeListItemPrefixWhitespace\n};\n\n/** @type {Construct} */\nconst indentConstruct = {\n  partial: true,\n  tokenize: tokenizeIndent\n};\n\n// To do: `markdown-rs` parses list items on their own and later stitches them\n// together.\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListStart(effects, ok, nok) {\n  const self = this;\n  const tail = self.events[self.events.length - 1];\n  let initialSize = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n  let size = 0;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    const kind = self.containerState.type || (code === 42 || code === 43 || code === 45 ? \"listUnordered\" : \"listOrdered\");\n    if (kind === \"listUnordered\" ? !self.containerState.marker || code === self.containerState.marker : asciiDigit(code)) {\n      if (!self.containerState.type) {\n        self.containerState.type = kind;\n        effects.enter(kind, {\n          _container: true\n        });\n      }\n      if (kind === \"listUnordered\") {\n        effects.enter(\"listItemPrefix\");\n        return code === 42 || code === 45 ? effects.check(thematicBreak, nok, atMarker)(code) : atMarker(code);\n      }\n      if (!self.interrupt || code === 49) {\n        effects.enter(\"listItemPrefix\");\n        effects.enter(\"listItemValue\");\n        return inside(code);\n      }\n    }\n    return nok(code);\n  }\n\n  /** @type {State} */\n  function inside(code) {\n    if (asciiDigit(code) && ++size < 10) {\n      effects.consume(code);\n      return inside;\n    }\n    if ((!self.interrupt || size < 2) && (self.containerState.marker ? code === self.containerState.marker : code === 41 || code === 46)) {\n      effects.exit(\"listItemValue\");\n      return atMarker(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * @type {State}\n   **/\n  function atMarker(code) {\n    effects.enter(\"listItemMarker\");\n    effects.consume(code);\n    effects.exit(\"listItemMarker\");\n    self.containerState.marker = self.containerState.marker || code;\n    return effects.check(blankLine,\n    // Can’t be empty when interrupting.\n    self.interrupt ? nok : onBlank, effects.attempt(listItemPrefixWhitespaceConstruct, endOfPrefix, otherPrefix));\n  }\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.initialBlankLine = true;\n    initialSize++;\n    return endOfPrefix(code);\n  }\n\n  /** @type {State} */\n  function otherPrefix(code) {\n    if (markdownSpace(code)) {\n      effects.enter(\"listItemPrefixWhitespace\");\n      effects.consume(code);\n      effects.exit(\"listItemPrefixWhitespace\");\n      return endOfPrefix;\n    }\n    return nok(code);\n  }\n\n  /** @type {State} */\n  function endOfPrefix(code) {\n    self.containerState.size = initialSize + self.sliceSerialize(effects.exit(\"listItemPrefix\"), true).length;\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListContinuation(effects, ok, nok) {\n  const self = this;\n  self.containerState._closeFlow = undefined;\n  return effects.check(blankLine, onBlank, notBlank);\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.furtherBlankLines = self.containerState.furtherBlankLines || self.containerState.initialBlankLine;\n\n    // We have a blank line.\n    // Still, try to consume at most the items size.\n    return factorySpace(effects, ok, \"listItemIndent\", self.containerState.size + 1)(code);\n  }\n\n  /** @type {State} */\n  function notBlank(code) {\n    if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n      self.containerState.furtherBlankLines = undefined;\n      self.containerState.initialBlankLine = undefined;\n      return notInCurrentItem(code);\n    }\n    self.containerState.furtherBlankLines = undefined;\n    self.containerState.initialBlankLine = undefined;\n    return effects.attempt(indentConstruct, ok, notInCurrentItem)(code);\n  }\n\n  /** @type {State} */\n  function notInCurrentItem(code) {\n    // While we do continue, we signal that the flow should be closed.\n    self.containerState._closeFlow = true;\n    // As we’re closing flow, we’re no longer interrupting.\n    self.interrupt = undefined;\n    // Always populated by defaults.\n\n    return factorySpace(effects, effects.attempt(list, ok, nok), \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n  const self = this;\n  return factorySpace(effects, afterPrefix, \"listItemIndent\", self.containerState.size + 1);\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"listItemIndent\" && tail[2].sliceSerialize(tail[1], true).length === self.containerState.size ? ok(code) : nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Exiter}\n */\nfunction tokenizeListEnd(effects) {\n  effects.exit(this.containerState.type);\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n  const self = this;\n\n  // Always populated by defaults.\n\n  return factorySpace(effects, afterPrefix, \"listItemPrefixWhitespace\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + 1);\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return !markdownSpace(code) && tail && tail[1].type === \"listItemPrefixWhitespace\" ? ok(code) : nok(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const setextUnderline = {\n  name: 'setextUnderline',\n  resolveTo: resolveToSetextUnderline,\n  tokenize: tokenizeSetextUnderline\n};\n\n/** @type {Resolver} */\nfunction resolveToSetextUnderline(events, context) {\n  // To do: resolve like `markdown-rs`.\n  let index = events.length;\n  /** @type {number | undefined} */\n  let content;\n  /** @type {number | undefined} */\n  let text;\n  /** @type {number | undefined} */\n  let definition;\n\n  // Find the opening of the content.\n  // It’ll always exist: we don’t tokenize if it isn’t there.\n  while (index--) {\n    if (events[index][0] === 'enter') {\n      if (events[index][1].type === \"content\") {\n        content = index;\n        break;\n      }\n      if (events[index][1].type === \"paragraph\") {\n        text = index;\n      }\n    }\n    // Exit\n    else {\n      if (events[index][1].type === \"content\") {\n        // Remove the content end (if needed we’ll add it later)\n        events.splice(index, 1);\n      }\n      if (!definition && events[index][1].type === \"definition\") {\n        definition = index;\n      }\n    }\n  }\n  const heading = {\n    type: \"setextHeading\",\n    start: {\n      ...events[content][1].start\n    },\n    end: {\n      ...events[events.length - 1][1].end\n    }\n  };\n\n  // Change the paragraph to setext heading text.\n  events[text][1].type = \"setextHeadingText\";\n\n  // If we have definitions in the content, we’ll keep on having content,\n  // but we need move it.\n  if (definition) {\n    events.splice(text, 0, ['enter', heading, context]);\n    events.splice(definition + 1, 0, ['exit', events[content][1], context]);\n    events[content][1].end = {\n      ...events[definition][1].end\n    };\n  } else {\n    events[content][1] = heading;\n  }\n\n  // Add the heading exit at the end.\n  events.push(['exit', heading, context]);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n  const self = this;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * At start of heading (setext) underline.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    let index = self.events.length;\n    /** @type {boolean | undefined} */\n    let paragraph;\n    // Find an opening.\n    while (index--) {\n      // Skip enter/exit of line ending, line prefix, and content.\n      // We can now either have a definition or a paragraph.\n      if (self.events[index][1].type !== \"lineEnding\" && self.events[index][1].type !== \"linePrefix\" && self.events[index][1].type !== \"content\") {\n        paragraph = self.events[index][1].type === \"paragraph\";\n        break;\n      }\n    }\n\n    // To do: handle lazy/pierce like `markdown-rs`.\n    // To do: parse indent like `markdown-rs`.\n    if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n      effects.enter(\"setextHeadingLine\");\n      marker = code;\n      return before(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * After optional whitespace, at `-` or `=`.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"setextHeadingLineSequence\");\n    return inside(code);\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code);\n      return inside;\n    }\n    effects.exit(\"setextHeadingLineSequence\");\n    return markdownSpace(code) ? factorySpace(effects, after, \"lineSuffix\")(code) : after(code);\n  }\n\n  /**\n   * After sequence, after optional whitespace.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"setextHeadingLine\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   InitialConstruct,\n *   Initializer,\n *   State,\n *   TokenizeContext\n * } from 'micromark-util-types'\n */\n\nimport { blankLine, content } from 'micromark-core-commonmark';\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {InitialConstruct} */\nexport const flow = {\n  tokenize: initializeFlow\n};\n\n/**\n * @this {TokenizeContext}\n *   Self.\n * @type {Initializer}\n *   Initializer.\n */\nfunction initializeFlow(effects) {\n  const self = this;\n  const initial = effects.attempt(\n  // Try to parse a blank line.\n  blankLine, atBlankEnding,\n  // Try to parse initial flow (essentially, only code).\n  effects.attempt(this.parser.constructs.flowInitial, afterConstruct, factorySpace(effects, effects.attempt(this.parser.constructs.flow, afterConstruct, effects.attempt(content, afterConstruct)), \"linePrefix\")));\n  return initial;\n\n  /** @type {State} */\n  function atBlankEnding(code) {\n    if (code === null) {\n      effects.consume(code);\n      return;\n    }\n    effects.enter(\"lineEndingBlank\");\n    effects.consume(code);\n    effects.exit(\"lineEndingBlank\");\n    self.currentConstruct = undefined;\n    return initial;\n  }\n\n  /** @type {State} */\n  function afterConstruct(code) {\n    if (code === null) {\n      effects.consume(code);\n      return;\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    self.currentConstruct = undefined;\n    return initial;\n  }\n}","/**\n * @import {\n *   Code,\n *   InitialConstruct,\n *   Initializer,\n *   Resolver,\n *   State,\n *   TokenizeContext\n * } from 'micromark-util-types'\n */\n\nexport const resolver = {\n  resolveAll: createResolver()\n};\nexport const string = initializeFactory('string');\nexport const text = initializeFactory('text');\n\n/**\n * @param {'string' | 'text'} field\n *   Field.\n * @returns {InitialConstruct}\n *   Construct.\n */\nfunction initializeFactory(field) {\n  return {\n    resolveAll: createResolver(field === 'text' ? resolveAllLineSuffixes : undefined),\n    tokenize: initializeText\n  };\n\n  /**\n   * @this {TokenizeContext}\n   *   Context.\n   * @type {Initializer}\n   */\n  function initializeText(effects) {\n    const self = this;\n    const constructs = this.parser.constructs[field];\n    const text = effects.attempt(constructs, start, notText);\n    return start;\n\n    /** @type {State} */\n    function start(code) {\n      return atBreak(code) ? text(code) : notText(code);\n    }\n\n    /** @type {State} */\n    function notText(code) {\n      if (code === null) {\n        effects.consume(code);\n        return;\n      }\n      effects.enter(\"data\");\n      effects.consume(code);\n      return data;\n    }\n\n    /** @type {State} */\n    function data(code) {\n      if (atBreak(code)) {\n        effects.exit(\"data\");\n        return text(code);\n      }\n\n      // Data.\n      effects.consume(code);\n      return data;\n    }\n\n    /**\n     * @param {Code} code\n     *   Code.\n     * @returns {boolean}\n     *   Whether the code is a break.\n     */\n    function atBreak(code) {\n      if (code === null) {\n        return true;\n      }\n      const list = constructs[code];\n      let index = -1;\n      if (list) {\n        // Always populated by defaults.\n\n        while (++index < list.length) {\n          const item = list[index];\n          if (!item.previous || item.previous.call(self, self.previous)) {\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n  }\n}\n\n/**\n * @param {Resolver | undefined} [extraResolver]\n *   Resolver.\n * @returns {Resolver}\n *   Resolver.\n */\nfunction createResolver(extraResolver) {\n  return resolveAllText;\n\n  /** @type {Resolver} */\n  function resolveAllText(events, context) {\n    let index = -1;\n    /** @type {number | undefined} */\n    let enter;\n\n    // A rather boring computation (to merge adjacent `data` events) which\n    // improves mm performance by 29%.\n    while (++index <= events.length) {\n      if (enter === undefined) {\n        if (events[index] && events[index][1].type === \"data\") {\n          enter = index;\n          index++;\n        }\n      } else if (!events[index] || events[index][1].type !== \"data\") {\n        // Don’t do anything if there is one data token.\n        if (index !== enter + 2) {\n          events[enter][1].end = events[index - 1][1].end;\n          events.splice(enter + 2, index - enter - 2);\n          index = enter + 2;\n        }\n        enter = undefined;\n      }\n    }\n    return extraResolver ? extraResolver(events, context) : events;\n  }\n}\n\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can’t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\nfunction resolveAllLineSuffixes(events, context) {\n  let eventIndex = 0; // Skip first.\n\n  while (++eventIndex <= events.length) {\n    if ((eventIndex === events.length || events[eventIndex][1].type === \"lineEnding\") && events[eventIndex - 1][1].type === \"data\") {\n      const data = events[eventIndex - 1][1];\n      const chunks = context.sliceStream(data);\n      let index = chunks.length;\n      let bufferIndex = -1;\n      let size = 0;\n      /** @type {boolean | undefined} */\n      let tabs;\n      while (index--) {\n        const chunk = chunks[index];\n        if (typeof chunk === 'string') {\n          bufferIndex = chunk.length;\n          while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n            size++;\n            bufferIndex--;\n          }\n          if (bufferIndex) break;\n          bufferIndex = -1;\n        }\n        // Number\n        else if (chunk === -2) {\n          tabs = true;\n          size++;\n        } else if (chunk === -1) {\n          // Empty\n        } else {\n          // Replacement character, exit.\n          index++;\n          break;\n        }\n      }\n\n      // Allow final trailing whitespace.\n      if (context._contentTypeTextTrailing && eventIndex === events.length) {\n        size = 0;\n      }\n      if (size) {\n        const token = {\n          type: eventIndex === events.length || tabs || size < 2 ? \"lineSuffix\" : \"hardBreakTrailing\",\n          start: {\n            _bufferIndex: index ? bufferIndex : data.start._bufferIndex + bufferIndex,\n            _index: data.start._index + index,\n            line: data.end.line,\n            column: data.end.column - size,\n            offset: data.end.offset - size\n          },\n          end: {\n            ...data.end\n          }\n        };\n        data.end = {\n          ...token.start\n        };\n        if (data.start.offset === data.end.offset) {\n          Object.assign(data, token);\n        } else {\n          events.splice(eventIndex, 0, ['enter', token, context], ['exit', token, context]);\n          eventIndex += 2;\n        }\n      }\n      eventIndex++;\n    }\n  }\n  return events;\n}","/**\n * @import {Extension} from 'micromark-util-types'\n */\n\nimport { attention, autolink, blockQuote, characterEscape, characterReference, codeFenced, codeIndented, codeText, definition, hardBreakEscape, headingAtx, htmlFlow, htmlText, labelEnd, labelStartImage, labelStartLink, lineEnding, list, setextUnderline, thematicBreak } from 'micromark-core-commonmark';\nimport { resolver as resolveText } from './initialize/text.js';\n\n/** @satisfies {Extension['document']} */\nexport const document = {\n  [42]: list,\n  [43]: list,\n  [45]: list,\n  [48]: list,\n  [49]: list,\n  [50]: list,\n  [51]: list,\n  [52]: list,\n  [53]: list,\n  [54]: list,\n  [55]: list,\n  [56]: list,\n  [57]: list,\n  [62]: blockQuote\n};\n\n/** @satisfies {Extension['contentInitial']} */\nexport const contentInitial = {\n  [91]: definition\n};\n\n/** @satisfies {Extension['flowInitial']} */\nexport const flowInitial = {\n  [-2]: codeIndented,\n  [-1]: codeIndented,\n  [32]: codeIndented\n};\n\n/** @satisfies {Extension['flow']} */\nexport const flow = {\n  [35]: headingAtx,\n  [42]: thematicBreak,\n  [45]: [setextUnderline, thematicBreak],\n  [60]: htmlFlow,\n  [61]: setextUnderline,\n  [95]: thematicBreak,\n  [96]: codeFenced,\n  [126]: codeFenced\n};\n\n/** @satisfies {Extension['string']} */\nexport const string = {\n  [38]: characterReference,\n  [92]: characterEscape\n};\n\n/** @satisfies {Extension['text']} */\nexport const text = {\n  [-5]: lineEnding,\n  [-4]: lineEnding,\n  [-3]: lineEnding,\n  [33]: labelStartImage,\n  [38]: characterReference,\n  [42]: attention,\n  [60]: [autolink, htmlText],\n  [91]: labelStartLink,\n  [92]: [hardBreakEscape, characterEscape],\n  [93]: labelEnd,\n  [95]: attention,\n  [96]: codeText\n};\n\n/** @satisfies {Extension['insideSpan']} */\nexport const insideSpan = {\n  null: [attention, resolveText]\n};\n\n/** @satisfies {Extension['attentionMarkers']} */\nexport const attentionMarkers = {\n  null: [42, 95]\n};\n\n/** @satisfies {Extension['disable']} */\nexport const disable = {\n  null: []\n};","/**\n * @import {\n *   Chunk,\n *   Code,\n *   ConstructRecord,\n *   Construct,\n *   Effects,\n *   InitialConstruct,\n *   ParseContext,\n *   Point,\n *   State,\n *   TokenizeContext,\n *   Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @callback Restore\n *   Restore the state.\n * @returns {undefined}\n *   Nothing.\n *\n * @typedef Info\n *   Info.\n * @property {Restore} restore\n *   Restore.\n * @property {number} from\n *   From.\n *\n * @callback ReturnHandle\n *   Handle a successful run.\n * @param {Construct} construct\n *   Construct.\n * @param {Info} info\n *   Info.\n * @returns {undefined}\n *   Nothing.\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn’t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n *   Parser.\n * @param {InitialConstruct} initialize\n *   Construct.\n * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from]\n *   Point (optional).\n * @returns {TokenizeContext}\n *   Context.\n */\nexport function createTokenizer(parser, initialize, from) {\n  /** @type {Point} */\n  let point = {\n    _bufferIndex: -1,\n    _index: 0,\n    line: from && from.line || 1,\n    column: from && from.column || 1,\n    offset: from && from.offset || 0\n  };\n  /** @type {Record<string, number>} */\n  const columnStart = {};\n  /** @type {Array<Construct>} */\n  const resolveAllConstructs = [];\n  /** @type {Array<Chunk>} */\n  let chunks = [];\n  /** @type {Array<Token>} */\n  let stack = [];\n  /** @type {boolean | undefined} */\n  let consumed = true;\n\n  /**\n   * Tools used for tokenizing.\n   *\n   * @type {Effects}\n   */\n  const effects = {\n    attempt: constructFactory(onsuccessfulconstruct),\n    check: constructFactory(onsuccessfulcheck),\n    consume,\n    enter,\n    exit,\n    interrupt: constructFactory(onsuccessfulcheck, {\n      interrupt: true\n    })\n  };\n\n  /**\n   * State and tools for resolving and serializing.\n   *\n   * @type {TokenizeContext}\n   */\n  const context = {\n    code: null,\n    containerState: {},\n    defineSkip,\n    events: [],\n    now,\n    parser,\n    previous: null,\n    sliceSerialize,\n    sliceStream,\n    write\n  };\n\n  /**\n   * The state function.\n   *\n   * @type {State | undefined}\n   */\n  let state = initialize.tokenize.call(context, effects);\n\n  /**\n   * Track which character we expect to be consumed, to catch bugs.\n   *\n   * @type {Code}\n   */\n  let expectedCode;\n  if (initialize.resolveAll) {\n    resolveAllConstructs.push(initialize);\n  }\n  return context;\n\n  /** @type {TokenizeContext['write']} */\n  function write(slice) {\n    chunks = push(chunks, slice);\n    main();\n\n    // Exit if we’re not done, resolve might change stuff.\n    if (chunks[chunks.length - 1] !== null) {\n      return [];\n    }\n    addResult(initialize, 0);\n\n    // Otherwise, resolve, and exit.\n    context.events = resolveAll(resolveAllConstructs, context.events, context);\n    return context.events;\n  }\n\n  //\n  // Tools.\n  //\n\n  /** @type {TokenizeContext['sliceSerialize']} */\n  function sliceSerialize(token, expandTabs) {\n    return serializeChunks(sliceStream(token), expandTabs);\n  }\n\n  /** @type {TokenizeContext['sliceStream']} */\n  function sliceStream(token) {\n    return sliceChunks(chunks, token);\n  }\n\n  /** @type {TokenizeContext['now']} */\n  function now() {\n    // This is a hot path, so we clone manually instead of `Object.assign({}, point)`\n    const {\n      _bufferIndex,\n      _index,\n      line,\n      column,\n      offset\n    } = point;\n    return {\n      _bufferIndex,\n      _index,\n      line,\n      column,\n      offset\n    };\n  }\n\n  /** @type {TokenizeContext['defineSkip']} */\n  function defineSkip(value) {\n    columnStart[value.line] = value.column;\n    accountForPotentialSkip();\n  }\n\n  //\n  // State management.\n  //\n\n  /**\n   * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n   * `consume`).\n   * Here is where we walk through the chunks, which either include strings of\n   * several characters, or numerical character codes.\n   * The reason to do this in a loop instead of a call is so the stack can\n   * drain.\n   *\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function main() {\n    /** @type {number} */\n    let chunkIndex;\n    while (point._index < chunks.length) {\n      const chunk = chunks[point._index];\n\n      // If we’re in a buffer chunk, loop through it.\n      if (typeof chunk === 'string') {\n        chunkIndex = point._index;\n        if (point._bufferIndex < 0) {\n          point._bufferIndex = 0;\n        }\n        while (point._index === chunkIndex && point._bufferIndex < chunk.length) {\n          go(chunk.charCodeAt(point._bufferIndex));\n        }\n      } else {\n        go(chunk);\n      }\n    }\n  }\n\n  /**\n   * Deal with one code.\n   *\n   * @param {Code} code\n   *   Code.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function go(code) {\n    consumed = undefined;\n    expectedCode = code;\n    state = state(code);\n  }\n\n  /** @type {Effects['consume']} */\n  function consume(code) {\n    if (markdownLineEnding(code)) {\n      point.line++;\n      point.column = 1;\n      point.offset += code === -3 ? 2 : 1;\n      accountForPotentialSkip();\n    } else if (code !== -1) {\n      point.column++;\n      point.offset++;\n    }\n\n    // Not in a string chunk.\n    if (point._bufferIndex < 0) {\n      point._index++;\n    } else {\n      point._bufferIndex++;\n\n      // At end of string chunk.\n      if (point._bufferIndex ===\n      // Points w/ non-negative `_bufferIndex` reference\n      // strings.\n      /** @type {string} */\n      chunks[point._index].length) {\n        point._bufferIndex = -1;\n        point._index++;\n      }\n    }\n\n    // Expose the previous character.\n    context.previous = code;\n\n    // Mark as consumed.\n    consumed = true;\n  }\n\n  /** @type {Effects['enter']} */\n  function enter(type, fields) {\n    /** @type {Token} */\n    // @ts-expect-error Patch instead of assign required fields to help GC.\n    const token = fields || {};\n    token.type = type;\n    token.start = now();\n    context.events.push(['enter', token, context]);\n    stack.push(token);\n    return token;\n  }\n\n  /** @type {Effects['exit']} */\n  function exit(type) {\n    const token = stack.pop();\n    token.end = now();\n    context.events.push(['exit', token, context]);\n    return token;\n  }\n\n  /**\n   * Use results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulconstruct(construct, info) {\n    addResult(construct, info.from);\n  }\n\n  /**\n   * Discard results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulcheck(_, info) {\n    info.restore();\n  }\n\n  /**\n   * Factory to attempt/check/interrupt.\n   *\n   * @param {ReturnHandle} onreturn\n   *   Callback.\n   * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n   *   Fields.\n   */\n  function constructFactory(onreturn, fields) {\n    return hook;\n\n    /**\n     * Handle either an object mapping codes to constructs, a list of\n     * constructs, or a single construct.\n     *\n     * @param {Array<Construct> | ConstructRecord | Construct} constructs\n     *   Constructs.\n     * @param {State} returnState\n     *   State.\n     * @param {State | undefined} [bogusState]\n     *   State.\n     * @returns {State}\n     *   State.\n     */\n    function hook(constructs, returnState, bogusState) {\n      /** @type {ReadonlyArray<Construct>} */\n      let listOfConstructs;\n      /** @type {number} */\n      let constructIndex;\n      /** @type {Construct} */\n      let currentConstruct;\n      /** @type {Info} */\n      let info;\n      return Array.isArray(constructs) ? /* c8 ignore next 1 */\n      handleListOfConstructs(constructs) : 'tokenize' in constructs ?\n      // Looks like a construct.\n      handleListOfConstructs([(/** @type {Construct} */constructs)]) : handleMapOfConstructs(constructs);\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {ConstructRecord} map\n       *   Constructs.\n       * @returns {State}\n       *   State.\n       */\n      function handleMapOfConstructs(map) {\n        return start;\n\n        /** @type {State} */\n        function start(code) {\n          const left = code !== null && map[code];\n          const all = code !== null && map.null;\n          const list = [\n          // To do: add more extension tests.\n          /* c8 ignore next 2 */\n          ...(Array.isArray(left) ? left : left ? [left] : []), ...(Array.isArray(all) ? all : all ? [all] : [])];\n          return handleListOfConstructs(list)(code);\n        }\n      }\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {ReadonlyArray<Construct>} list\n       *   Constructs.\n       * @returns {State}\n       *   State.\n       */\n      function handleListOfConstructs(list) {\n        listOfConstructs = list;\n        constructIndex = 0;\n        if (list.length === 0) {\n          return bogusState;\n        }\n        return handleConstruct(list[constructIndex]);\n      }\n\n      /**\n       * Handle a single construct.\n       *\n       * @param {Construct} construct\n       *   Construct.\n       * @returns {State}\n       *   State.\n       */\n      function handleConstruct(construct) {\n        return start;\n\n        /** @type {State} */\n        function start(code) {\n          // To do: not needed to store if there is no bogus state, probably?\n          // Currently doesn’t work because `inspect` in document does a check\n          // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n          // by not storing.\n          info = store();\n          currentConstruct = construct;\n          if (!construct.partial) {\n            context.currentConstruct = construct;\n          }\n\n          // Always populated by defaults.\n\n          if (construct.name && context.parser.constructs.disable.null.includes(construct.name)) {\n            return nok(code);\n          }\n          return construct.tokenize.call(\n          // If we do have fields, create an object w/ `context` as its\n          // prototype.\n          // This allows a “live binding”, which is needed for `interrupt`.\n          fields ? Object.assign(Object.create(context), fields) : context, effects, ok, nok)(code);\n        }\n      }\n\n      /** @type {State} */\n      function ok(code) {\n        consumed = true;\n        onreturn(currentConstruct, info);\n        return returnState;\n      }\n\n      /** @type {State} */\n      function nok(code) {\n        consumed = true;\n        info.restore();\n        if (++constructIndex < listOfConstructs.length) {\n          return handleConstruct(listOfConstructs[constructIndex]);\n        }\n        return bogusState;\n      }\n    }\n  }\n\n  /**\n   * @param {Construct} construct\n   *   Construct.\n   * @param {number} from\n   *   From.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function addResult(construct, from) {\n    if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n      resolveAllConstructs.push(construct);\n    }\n    if (construct.resolve) {\n      splice(context.events, from, context.events.length - from, construct.resolve(context.events.slice(from), context));\n    }\n    if (construct.resolveTo) {\n      context.events = construct.resolveTo(context.events, context);\n    }\n  }\n\n  /**\n   * Store state.\n   *\n   * @returns {Info}\n   *   Info.\n   */\n  function store() {\n    const startPoint = now();\n    const startPrevious = context.previous;\n    const startCurrentConstruct = context.currentConstruct;\n    const startEventsIndex = context.events.length;\n    const startStack = Array.from(stack);\n    return {\n      from: startEventsIndex,\n      restore\n    };\n\n    /**\n     * Restore state.\n     *\n     * @returns {undefined}\n     *   Nothing.\n     */\n    function restore() {\n      point = startPoint;\n      context.previous = startPrevious;\n      context.currentConstruct = startCurrentConstruct;\n      context.events.length = startEventsIndex;\n      stack = startStack;\n      accountForPotentialSkip();\n    }\n  }\n\n  /**\n   * Move the current point a bit forward in the line when it’s on a column\n   * skip.\n   *\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function accountForPotentialSkip() {\n    if (point.line in columnStart && point.column < 2) {\n      point.column = columnStart[point.line];\n      point.offset += columnStart[point.line] - 1;\n    }\n  }\n}\n\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {ReadonlyArray<Chunk>} chunks\n *   Chunks.\n * @param {Pick<Token, 'end' | 'start'>} token\n *   Token.\n * @returns {Array<Chunk>}\n *   Chunks.\n */\nfunction sliceChunks(chunks, token) {\n  const startIndex = token.start._index;\n  const startBufferIndex = token.start._bufferIndex;\n  const endIndex = token.end._index;\n  const endBufferIndex = token.end._bufferIndex;\n  /** @type {Array<Chunk>} */\n  let view;\n  if (startIndex === endIndex) {\n    // @ts-expect-error `_bufferIndex` is used on string chunks.\n    view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)];\n  } else {\n    view = chunks.slice(startIndex, endIndex);\n    if (startBufferIndex > -1) {\n      const head = view[0];\n      if (typeof head === 'string') {\n        view[0] = head.slice(startBufferIndex);\n        /* c8 ignore next 4 -- used to be used, no longer */\n      } else {\n        view.shift();\n      }\n    }\n    if (endBufferIndex > 0) {\n      // @ts-expect-error `_bufferIndex` is used on string chunks.\n      view.push(chunks[endIndex].slice(0, endBufferIndex));\n    }\n  }\n  return view;\n}\n\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {ReadonlyArray<Chunk>} chunks\n *   Chunks.\n * @param {boolean | undefined} [expandTabs=false]\n *   Whether to expand tabs (default: `false`).\n * @returns {string}\n *   Result.\n */\nfunction serializeChunks(chunks, expandTabs) {\n  let index = -1;\n  /** @type {Array<string>} */\n  const result = [];\n  /** @type {boolean | undefined} */\n  let atTab;\n  while (++index < chunks.length) {\n    const chunk = chunks[index];\n    /** @type {string} */\n    let value;\n    if (typeof chunk === 'string') {\n      value = chunk;\n    } else switch (chunk) {\n      case -5:\n        {\n          value = \"\\r\";\n          break;\n        }\n      case -4:\n        {\n          value = \"\\n\";\n          break;\n        }\n      case -3:\n        {\n          value = \"\\r\" + \"\\n\";\n          break;\n        }\n      case -2:\n        {\n          value = expandTabs ? \" \" : \"\\t\";\n          break;\n        }\n      case -1:\n        {\n          if (!expandTabs && atTab) continue;\n          value = \" \";\n          break;\n        }\n      default:\n        {\n          // Currently only replacement character.\n          value = String.fromCharCode(chunk);\n        }\n    }\n    atTab = chunk === -2;\n    result.push(value);\n  }\n  return result.join('');\n}","/**\n * @import {\n *   Create,\n *   FullNormalizedExtension,\n *   InitialConstruct,\n *   ParseContext,\n *   ParseOptions\n * } from 'micromark-util-types'\n */\n\nimport { combineExtensions } from 'micromark-util-combine-extensions';\nimport { content } from './initialize/content.js';\nimport { document } from './initialize/document.js';\nimport { flow } from './initialize/flow.js';\nimport { string, text } from './initialize/text.js';\nimport * as defaultConstructs from './constructs.js';\nimport { createTokenizer } from './create-tokenizer.js';\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n *   Configuration (optional).\n * @returns {ParseContext}\n *   Parser.\n */\nexport function parse(options) {\n  const settings = options || {};\n  const constructs = /** @type {FullNormalizedExtension} */\n  combineExtensions([defaultConstructs, ...(settings.extensions || [])]);\n\n  /** @type {ParseContext} */\n  const parser = {\n    constructs,\n    content: create(content),\n    defined: [],\n    document: create(document),\n    flow: create(flow),\n    lazy: {},\n    string: create(string),\n    text: create(text)\n  };\n  return parser;\n\n  /**\n   * @param {InitialConstruct} initial\n   *   Construct to start with.\n   * @returns {Create}\n   *   Create a tokenizer.\n   */\n  function create(initial) {\n    return creator;\n    /** @type {Create} */\n    function creator(from) {\n      return createTokenizer(parser, initial, from);\n    }\n  }\n}","/**\n * @import {Event} from 'micromark-util-types'\n */\n\nimport { subtokenize } from 'micromark-util-subtokenize';\n\n/**\n * @param {Array<Event>} events\n *   Events.\n * @returns {Array<Event>}\n *   Events.\n */\nexport function postprocess(events) {\n  while (!subtokenize(events)) {\n    // Empty\n  }\n  return events;\n}","/**\n * @import {Chunk, Code, Encoding, Value} from 'micromark-util-types'\n */\n\n/**\n * @callback Preprocessor\n *   Preprocess a value.\n * @param {Value} value\n *   Value.\n * @param {Encoding | null | undefined} [encoding]\n *   Encoding when `value` is a typed array (optional).\n * @param {boolean | null | undefined} [end=false]\n *   Whether this is the last chunk (default: `false`).\n * @returns {Array<Chunk>}\n *   Chunks.\n */\n\nconst search = /[\\0\\t\\n\\r]/g;\n\n/**\n * @returns {Preprocessor}\n *   Preprocess a value.\n */\nexport function preprocess() {\n  let column = 1;\n  let buffer = '';\n  /** @type {boolean | undefined} */\n  let start = true;\n  /** @type {boolean | undefined} */\n  let atCarriageReturn;\n  return preprocessor;\n\n  /** @type {Preprocessor} */\n  // eslint-disable-next-line complexity\n  function preprocessor(value, encoding, end) {\n    /** @type {Array<Chunk>} */\n    const chunks = [];\n    /** @type {RegExpMatchArray | null} */\n    let match;\n    /** @type {number} */\n    let next;\n    /** @type {number} */\n    let startPosition;\n    /** @type {number} */\n    let endPosition;\n    /** @type {Code} */\n    let code;\n    value = buffer + (typeof value === 'string' ? value.toString() : new TextDecoder(encoding || undefined).decode(value));\n    startPosition = 0;\n    buffer = '';\n    if (start) {\n      // To do: `markdown-rs` actually parses BOMs (byte order mark).\n      if (value.charCodeAt(0) === 65279) {\n        startPosition++;\n      }\n      start = undefined;\n    }\n    while (startPosition < value.length) {\n      search.lastIndex = startPosition;\n      match = search.exec(value);\n      endPosition = match && match.index !== undefined ? match.index : value.length;\n      code = value.charCodeAt(endPosition);\n      if (!match) {\n        buffer = value.slice(startPosition);\n        break;\n      }\n      if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n        chunks.push(-3);\n        atCarriageReturn = undefined;\n      } else {\n        if (atCarriageReturn) {\n          chunks.push(-5);\n          atCarriageReturn = undefined;\n        }\n        if (startPosition < endPosition) {\n          chunks.push(value.slice(startPosition, endPosition));\n          column += endPosition - startPosition;\n        }\n        switch (code) {\n          case 0:\n            {\n              chunks.push(65533);\n              column++;\n              break;\n            }\n          case 9:\n            {\n              next = Math.ceil(column / 4) * 4;\n              chunks.push(-2);\n              while (column++ < next) chunks.push(-1);\n              break;\n            }\n          case 10:\n            {\n              chunks.push(-4);\n              column = 1;\n              break;\n            }\n          default:\n            {\n              atCarriageReturn = true;\n              column = 1;\n            }\n        }\n      }\n      startPosition = endPosition + 1;\n    }\n    if (end) {\n      if (atCarriageReturn) chunks.push(-5);\n      if (buffer) chunks.push(buffer);\n      chunks.push(null);\n    }\n    return chunks;\n  }\n}","import { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nconst characterEscapeOrReference = /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi;\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n *   Value to decode.\n * @returns {string}\n *   Decoded value.\n */\nexport function decodeString(value) {\n  return value.replace(characterEscapeOrReference, decode);\n}\n\n/**\n * @param {string} $0\n *   Match.\n * @param {string} $1\n *   Character escape.\n * @param {string} $2\n *   Character reference.\n * @returns {string}\n *   Decoded value\n */\nfunction decode($0, $1, $2) {\n  if ($1) {\n    // Escape.\n    return $1;\n  }\n\n  // Reference.\n  const head = $2.charCodeAt(0);\n  if (head === 35) {\n    const head = $2.charCodeAt(1);\n    const hex = head === 120 || head === 88;\n    return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10);\n  }\n  return decodeNamedCharacterReference($2) || $0;\n}","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Point | PointLike | Position | PositionLike | null | undefined} [value]\n *   Node, position, or point.\n * @returns {string}\n *   Pretty printed positional info of a node (`string`).\n *\n *   In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n *   or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n *   column, `s` for `start`, and `e` for end.\n *   An empty string (`''`) is returned if the given value is neither `node`,\n *   `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n  // Nothing.\n  if (!value || typeof value !== 'object') {\n    return ''\n  }\n\n  // Node.\n  if ('position' in value || 'type' in value) {\n    return position(value.position)\n  }\n\n  // Position.\n  if ('start' in value || 'end' in value) {\n    return position(value)\n  }\n\n  // Point.\n  if ('line' in value || 'column' in value) {\n    return point(value)\n  }\n\n  // ?\n  return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n  return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n  return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n  return value && typeof value === 'number' ? value : 1\n}\n","/**\n * @import {\n *   Break,\n *   Blockquote,\n *   Code,\n *   Definition,\n *   Emphasis,\n *   Heading,\n *   Html,\n *   Image,\n *   InlineCode,\n *   Link,\n *   ListItem,\n *   List,\n *   Nodes,\n *   Paragraph,\n *   PhrasingContent,\n *   ReferenceType,\n *   Root,\n *   Strong,\n *   Text,\n *   ThematicBreak\n * } from 'mdast'\n * @import {\n *   Encoding,\n *   Event,\n *   Token,\n *   Value\n * } from 'micromark-util-types'\n * @import {Point} from 'unist'\n * @import {\n *   CompileContext,\n *   CompileData,\n *   Config,\n *   Extension,\n *   Handle,\n *   OnEnterError,\n *   Options\n * } from './types.js'\n */\n\nimport { toString } from 'mdast-util-to-string';\nimport { parse, postprocess, preprocess } from 'micromark';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nimport { decodeString } from 'micromark-util-decode-string';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { stringifyPosition } from 'unist-util-stringify-position';\nconst own = {}.hasOwnProperty;\n\n/**\n * Turn markdown into a syntax tree.\n *\n * @overload\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @overload\n * @param {Value} value\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @param {Value} value\n *   Markdown to parse.\n * @param {Encoding | Options | null | undefined} [encoding]\n *   Character encoding for when `value` is `Buffer`.\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {Root}\n *   mdast tree.\n */\nexport function fromMarkdown(value, encoding, options) {\n  if (typeof encoding !== 'string') {\n    options = encoding;\n    encoding = undefined;\n  }\n  return compiler(options)(postprocess(parse(options).document().write(preprocess()(value, encoding, true))));\n}\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n  /** @type {Config} */\n  const config = {\n    transforms: [],\n    canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n    enter: {\n      autolink: opener(link),\n      autolinkProtocol: onenterdata,\n      autolinkEmail: onenterdata,\n      atxHeading: opener(heading),\n      blockQuote: opener(blockQuote),\n      characterEscape: onenterdata,\n      characterReference: onenterdata,\n      codeFenced: opener(codeFlow),\n      codeFencedFenceInfo: buffer,\n      codeFencedFenceMeta: buffer,\n      codeIndented: opener(codeFlow, buffer),\n      codeText: opener(codeText, buffer),\n      codeTextData: onenterdata,\n      data: onenterdata,\n      codeFlowValue: onenterdata,\n      definition: opener(definition),\n      definitionDestinationString: buffer,\n      definitionLabelString: buffer,\n      definitionTitleString: buffer,\n      emphasis: opener(emphasis),\n      hardBreakEscape: opener(hardBreak),\n      hardBreakTrailing: opener(hardBreak),\n      htmlFlow: opener(html, buffer),\n      htmlFlowData: onenterdata,\n      htmlText: opener(html, buffer),\n      htmlTextData: onenterdata,\n      image: opener(image),\n      label: buffer,\n      link: opener(link),\n      listItem: opener(listItem),\n      listItemValue: onenterlistitemvalue,\n      listOrdered: opener(list, onenterlistordered),\n      listUnordered: opener(list),\n      paragraph: opener(paragraph),\n      reference: onenterreference,\n      referenceString: buffer,\n      resourceDestinationString: buffer,\n      resourceTitleString: buffer,\n      setextHeading: opener(heading),\n      strong: opener(strong),\n      thematicBreak: opener(thematicBreak)\n    },\n    exit: {\n      atxHeading: closer(),\n      atxHeadingSequence: onexitatxheadingsequence,\n      autolink: closer(),\n      autolinkEmail: onexitautolinkemail,\n      autolinkProtocol: onexitautolinkprotocol,\n      blockQuote: closer(),\n      characterEscapeValue: onexitdata,\n      characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n      characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n      characterReferenceValue: onexitcharacterreferencevalue,\n      characterReference: onexitcharacterreference,\n      codeFenced: closer(onexitcodefenced),\n      codeFencedFence: onexitcodefencedfence,\n      codeFencedFenceInfo: onexitcodefencedfenceinfo,\n      codeFencedFenceMeta: onexitcodefencedfencemeta,\n      codeFlowValue: onexitdata,\n      codeIndented: closer(onexitcodeindented),\n      codeText: closer(onexitcodetext),\n      codeTextData: onexitdata,\n      data: onexitdata,\n      definition: closer(),\n      definitionDestinationString: onexitdefinitiondestinationstring,\n      definitionLabelString: onexitdefinitionlabelstring,\n      definitionTitleString: onexitdefinitiontitlestring,\n      emphasis: closer(),\n      hardBreakEscape: closer(onexithardbreak),\n      hardBreakTrailing: closer(onexithardbreak),\n      htmlFlow: closer(onexithtmlflow),\n      htmlFlowData: onexitdata,\n      htmlText: closer(onexithtmltext),\n      htmlTextData: onexitdata,\n      image: closer(onexitimage),\n      label: onexitlabel,\n      labelText: onexitlabeltext,\n      lineEnding: onexitlineending,\n      link: closer(onexitlink),\n      listItem: closer(),\n      listOrdered: closer(),\n      listUnordered: closer(),\n      paragraph: closer(),\n      referenceString: onexitreferencestring,\n      resourceDestinationString: onexitresourcedestinationstring,\n      resourceTitleString: onexitresourcetitlestring,\n      resource: onexitresource,\n      setextHeading: closer(onexitsetextheading),\n      setextHeadingLineSequence: onexitsetextheadinglinesequence,\n      setextHeadingText: onexitsetextheadingtext,\n      strong: closer(),\n      thematicBreak: closer()\n    }\n  };\n  configure(config, (options || {}).mdastExtensions || []);\n\n  /** @type {CompileData} */\n  const data = {};\n  return compile;\n\n  /**\n   * Turn micromark events into an mdast tree.\n   *\n   * @param {Array<Event>} events\n   *   Events.\n   * @returns {Root}\n   *   mdast tree.\n   */\n  function compile(events) {\n    /** @type {Root} */\n    let tree = {\n      type: 'root',\n      children: []\n    };\n    /** @type {Omit<CompileContext, 'sliceSerialize'>} */\n    const context = {\n      stack: [tree],\n      tokenStack: [],\n      config,\n      enter,\n      exit,\n      buffer,\n      resume,\n      data\n    };\n    /** @type {Array<number>} */\n    const listStack = [];\n    let index = -1;\n    while (++index < events.length) {\n      // We preprocess lists to add `listItem` tokens, and to infer whether\n      // items the list itself are spread out.\n      if (events[index][1].type === \"listOrdered\" || events[index][1].type === \"listUnordered\") {\n        if (events[index][0] === 'enter') {\n          listStack.push(index);\n        } else {\n          const tail = listStack.pop();\n          index = prepareList(events, tail, index);\n        }\n      }\n    }\n    index = -1;\n    while (++index < events.length) {\n      const handler = config[events[index][0]];\n      if (own.call(handler, events[index][1].type)) {\n        handler[events[index][1].type].call(Object.assign({\n          sliceSerialize: events[index][2].sliceSerialize\n        }, context), events[index][1]);\n      }\n    }\n\n    // Handle tokens still being open.\n    if (context.tokenStack.length > 0) {\n      const tail = context.tokenStack[context.tokenStack.length - 1];\n      const handler = tail[1] || defaultOnError;\n      handler.call(context, undefined, tail[0]);\n    }\n\n    // Figure out `root` position.\n    tree.position = {\n      start: point(events.length > 0 ? events[0][1].start : {\n        line: 1,\n        column: 1,\n        offset: 0\n      }),\n      end: point(events.length > 0 ? events[events.length - 2][1].end : {\n        line: 1,\n        column: 1,\n        offset: 0\n      })\n    };\n\n    // Call transforms.\n    index = -1;\n    while (++index < config.transforms.length) {\n      tree = config.transforms[index](tree) || tree;\n    }\n    return tree;\n  }\n\n  /**\n   * @param {Array<Event>} events\n   * @param {number} start\n   * @param {number} length\n   * @returns {number}\n   */\n  function prepareList(events, start, length) {\n    let index = start - 1;\n    let containerBalance = -1;\n    let listSpread = false;\n    /** @type {Token | undefined} */\n    let listItem;\n    /** @type {number | undefined} */\n    let lineIndex;\n    /** @type {number | undefined} */\n    let firstBlankLineIndex;\n    /** @type {boolean | undefined} */\n    let atMarker;\n    while (++index <= length) {\n      const event = events[index];\n      switch (event[1].type) {\n        case \"listUnordered\":\n        case \"listOrdered\":\n        case \"blockQuote\":\n          {\n            if (event[0] === 'enter') {\n              containerBalance++;\n            } else {\n              containerBalance--;\n            }\n            atMarker = undefined;\n            break;\n          }\n        case \"lineEndingBlank\":\n          {\n            if (event[0] === 'enter') {\n              if (listItem && !atMarker && !containerBalance && !firstBlankLineIndex) {\n                firstBlankLineIndex = index;\n              }\n              atMarker = undefined;\n            }\n            break;\n          }\n        case \"linePrefix\":\n        case \"listItemValue\":\n        case \"listItemMarker\":\n        case \"listItemPrefix\":\n        case \"listItemPrefixWhitespace\":\n          {\n            // Empty.\n\n            break;\n          }\n        default:\n          {\n            atMarker = undefined;\n          }\n      }\n      if (!containerBalance && event[0] === 'enter' && event[1].type === \"listItemPrefix\" || containerBalance === -1 && event[0] === 'exit' && (event[1].type === \"listUnordered\" || event[1].type === \"listOrdered\")) {\n        if (listItem) {\n          let tailIndex = index;\n          lineIndex = undefined;\n          while (tailIndex--) {\n            const tailEvent = events[tailIndex];\n            if (tailEvent[1].type === \"lineEnding\" || tailEvent[1].type === \"lineEndingBlank\") {\n              if (tailEvent[0] === 'exit') continue;\n              if (lineIndex) {\n                events[lineIndex][1].type = \"lineEndingBlank\";\n                listSpread = true;\n              }\n              tailEvent[1].type = \"lineEnding\";\n              lineIndex = tailIndex;\n            } else if (tailEvent[1].type === \"linePrefix\" || tailEvent[1].type === \"blockQuotePrefix\" || tailEvent[1].type === \"blockQuotePrefixWhitespace\" || tailEvent[1].type === \"blockQuoteMarker\" || tailEvent[1].type === \"listItemIndent\") {\n              // Empty\n            } else {\n              break;\n            }\n          }\n          if (firstBlankLineIndex && (!lineIndex || firstBlankLineIndex < lineIndex)) {\n            listItem._spread = true;\n          }\n\n          // Fix position.\n          listItem.end = Object.assign({}, lineIndex ? events[lineIndex][1].start : event[1].end);\n          events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]);\n          index++;\n          length++;\n        }\n\n        // Create a new list item.\n        if (event[1].type === \"listItemPrefix\") {\n          /** @type {Token} */\n          const item = {\n            type: 'listItem',\n            _spread: false,\n            start: Object.assign({}, event[1].start),\n            // @ts-expect-error: we’ll add `end` in a second.\n            end: undefined\n          };\n          listItem = item;\n          events.splice(index, 0, ['enter', item, event[2]]);\n          index++;\n          length++;\n          firstBlankLineIndex = undefined;\n          atMarker = true;\n        }\n      }\n    }\n    events[start][1]._spread = listSpread;\n    return length;\n  }\n\n  /**\n   * Create an opener handle.\n   *\n   * @param {(token: Token) => Nodes} create\n   *   Create a node.\n   * @param {Handle | undefined} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function opener(create, and) {\n    return open;\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {undefined}\n     */\n    function open(token) {\n      enter.call(this, create(token), token);\n      if (and) and.call(this, token);\n    }\n  }\n\n  /**\n   * @type {CompileContext['buffer']}\n   */\n  function buffer() {\n    this.stack.push({\n      type: 'fragment',\n      children: []\n    });\n  }\n\n  /**\n   * @type {CompileContext['enter']}\n   */\n  function enter(node, token, errorHandler) {\n    const parent = this.stack[this.stack.length - 1];\n    /** @type {Array<Nodes>} */\n    const siblings = parent.children;\n    siblings.push(node);\n    this.stack.push(node);\n    this.tokenStack.push([token, errorHandler || undefined]);\n    node.position = {\n      start: point(token.start),\n      // @ts-expect-error: `end` will be patched later.\n      end: undefined\n    };\n  }\n\n  /**\n   * Create a closer handle.\n   *\n   * @param {Handle | undefined} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function closer(and) {\n    return close;\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {undefined}\n     */\n    function close(token) {\n      if (and) and.call(this, token);\n      exit.call(this, token);\n    }\n  }\n\n  /**\n   * @type {CompileContext['exit']}\n   */\n  function exit(token, onExitError) {\n    const node = this.stack.pop();\n    const open = this.tokenStack.pop();\n    if (!open) {\n      throw new Error('Cannot close `' + token.type + '` (' + stringifyPosition({\n        start: token.start,\n        end: token.end\n      }) + '): it’s not open');\n    } else if (open[0].type !== token.type) {\n      if (onExitError) {\n        onExitError.call(this, token, open[0]);\n      } else {\n        const handler = open[1] || defaultOnError;\n        handler.call(this, token, open[0]);\n      }\n    }\n    node.position.end = point(token.end);\n  }\n\n  /**\n   * @type {CompileContext['resume']}\n   */\n  function resume() {\n    return toString(this.stack.pop());\n  }\n\n  //\n  // Handlers.\n  //\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistordered() {\n    this.data.expectingFirstListItemValue = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistitemvalue(token) {\n    if (this.data.expectingFirstListItemValue) {\n      const ancestor = this.stack[this.stack.length - 2];\n      ancestor.start = Number.parseInt(this.sliceSerialize(token), 10);\n      this.data.expectingFirstListItemValue = undefined;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfenceinfo() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.lang = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfencemeta() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.meta = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfence() {\n    // Exit if this is the closing fence.\n    if (this.data.flowCodeInside) return;\n    this.buffer();\n    this.data.flowCodeInside = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefenced() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '');\n    this.data.flowCodeInside = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodeindented() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data.replace(/(\\r?\\n|\\r)$/g, '');\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitionlabelstring(token) {\n    const label = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.label = label;\n    node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiontitlestring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.title = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiondestinationstring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.url = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitatxheadingsequence(token) {\n    const node = this.stack[this.stack.length - 1];\n    if (!node.depth) {\n      const depth = this.sliceSerialize(token).length;\n      node.depth = depth;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadingtext() {\n    this.data.setextHeadingSlurpLineEnding = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadinglinesequence(token) {\n    const node = this.stack[this.stack.length - 1];\n    node.depth = this.sliceSerialize(token).codePointAt(0) === 61 ? 1 : 2;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheading() {\n    this.data.setextHeadingSlurpLineEnding = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterdata(token) {\n    const node = this.stack[this.stack.length - 1];\n    /** @type {Array<Nodes>} */\n    const siblings = node.children;\n    let tail = siblings[siblings.length - 1];\n    if (!tail || tail.type !== 'text') {\n      // Add a new text node.\n      tail = text();\n      tail.position = {\n        start: point(token.start),\n        // @ts-expect-error: we’ll add `end` later.\n        end: undefined\n      };\n      siblings.push(tail);\n    }\n    this.stack.push(tail);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitdata(token) {\n    const tail = this.stack.pop();\n    tail.value += this.sliceSerialize(token);\n    tail.position.end = point(token.end);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlineending(token) {\n    const context = this.stack[this.stack.length - 1];\n    // If we’re at a hard break, include the line ending in there.\n    if (this.data.atHardBreak) {\n      const tail = context.children[context.children.length - 1];\n      tail.position.end = point(token.end);\n      this.data.atHardBreak = undefined;\n      return;\n    }\n    if (!this.data.setextHeadingSlurpLineEnding && config.canContainEols.includes(context.type)) {\n      onenterdata.call(this, token);\n      onexitdata.call(this, token);\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithardbreak() {\n    this.data.atHardBreak = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmlflow() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmltext() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcodetext() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlink() {\n    const node = this.stack[this.stack.length - 1];\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n\n    // To do: clean.\n    if (this.data.inReference) {\n      /** @type {ReferenceType} */\n      const referenceType = this.data.referenceType || 'shortcut';\n      node.type += 'Reference';\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType;\n      // @ts-expect-error: mutate.\n      delete node.url;\n      delete node.title;\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier;\n      // @ts-expect-error: mutate.\n      delete node.label;\n    }\n    this.data.referenceType = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitimage() {\n    const node = this.stack[this.stack.length - 1];\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n\n    // To do: clean.\n    if (this.data.inReference) {\n      /** @type {ReferenceType} */\n      const referenceType = this.data.referenceType || 'shortcut';\n      node.type += 'Reference';\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType;\n      // @ts-expect-error: mutate.\n      delete node.url;\n      delete node.title;\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier;\n      // @ts-expect-error: mutate.\n      delete node.label;\n    }\n    this.data.referenceType = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabeltext(token) {\n    const string = this.sliceSerialize(token);\n    const ancestor = this.stack[this.stack.length - 2];\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    ancestor.label = decodeString(string);\n    // @ts-expect-error: same as above.\n    ancestor.identifier = normalizeIdentifier(string).toLowerCase();\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabel() {\n    const fragment = this.stack[this.stack.length - 1];\n    const value = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    // Assume a reference.\n    this.data.inReference = true;\n    if (node.type === 'link') {\n      /** @type {Array<PhrasingContent>} */\n      const children = fragment.children;\n      node.children = children;\n    } else {\n      node.alt = value;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcedestinationstring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.url = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcetitlestring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.title = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresource() {\n    this.data.inReference = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterreference() {\n    this.data.referenceType = 'collapsed';\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitreferencestring(token) {\n    const label = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    node.label = label;\n    // @ts-expect-error: same as above.\n    node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n    this.data.referenceType = 'full';\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcharacterreferencemarker(token) {\n    this.data.characterReferenceType = token.type;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreferencevalue(token) {\n    const data = this.sliceSerialize(token);\n    const type = this.data.characterReferenceType;\n    /** @type {string} */\n    let value;\n    if (type) {\n      value = decodeNumericCharacterReference(data, type === \"characterReferenceMarkerNumeric\" ? 10 : 16);\n      this.data.characterReferenceType = undefined;\n    } else {\n      const result = decodeNamedCharacterReference(data);\n      value = result;\n    }\n    const tail = this.stack[this.stack.length - 1];\n    tail.value += value;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreference(token) {\n    const tail = this.stack.pop();\n    tail.position.end = point(token.end);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkprotocol(token) {\n    onexitdata.call(this, token);\n    const node = this.stack[this.stack.length - 1];\n    node.url = this.sliceSerialize(token);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkemail(token) {\n    onexitdata.call(this, token);\n    const node = this.stack[this.stack.length - 1];\n    node.url = 'mailto:' + this.sliceSerialize(token);\n  }\n\n  //\n  // Creaters.\n  //\n\n  /** @returns {Blockquote} */\n  function blockQuote() {\n    return {\n      type: 'blockquote',\n      children: []\n    };\n  }\n\n  /** @returns {Code} */\n  function codeFlow() {\n    return {\n      type: 'code',\n      lang: null,\n      meta: null,\n      value: ''\n    };\n  }\n\n  /** @returns {InlineCode} */\n  function codeText() {\n    return {\n      type: 'inlineCode',\n      value: ''\n    };\n  }\n\n  /** @returns {Definition} */\n  function definition() {\n    return {\n      type: 'definition',\n      identifier: '',\n      label: null,\n      title: null,\n      url: ''\n    };\n  }\n\n  /** @returns {Emphasis} */\n  function emphasis() {\n    return {\n      type: 'emphasis',\n      children: []\n    };\n  }\n\n  /** @returns {Heading} */\n  function heading() {\n    return {\n      type: 'heading',\n      // @ts-expect-error `depth` will be set later.\n      depth: 0,\n      children: []\n    };\n  }\n\n  /** @returns {Break} */\n  function hardBreak() {\n    return {\n      type: 'break'\n    };\n  }\n\n  /** @returns {Html} */\n  function html() {\n    return {\n      type: 'html',\n      value: ''\n    };\n  }\n\n  /** @returns {Image} */\n  function image() {\n    return {\n      type: 'image',\n      title: null,\n      url: '',\n      alt: null\n    };\n  }\n\n  /** @returns {Link} */\n  function link() {\n    return {\n      type: 'link',\n      title: null,\n      url: '',\n      children: []\n    };\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {List}\n   */\n  function list(token) {\n    return {\n      type: 'list',\n      ordered: token.type === 'listOrdered',\n      start: null,\n      spread: token._spread,\n      children: []\n    };\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {ListItem}\n   */\n  function listItem(token) {\n    return {\n      type: 'listItem',\n      spread: token._spread,\n      checked: null,\n      children: []\n    };\n  }\n\n  /** @returns {Paragraph} */\n  function paragraph() {\n    return {\n      type: 'paragraph',\n      children: []\n    };\n  }\n\n  /** @returns {Strong} */\n  function strong() {\n    return {\n      type: 'strong',\n      children: []\n    };\n  }\n\n  /** @returns {Text} */\n  function text() {\n    return {\n      type: 'text',\n      value: ''\n    };\n  }\n\n  /** @returns {ThematicBreak} */\n  function thematicBreak() {\n    return {\n      type: 'thematicBreak'\n    };\n  }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n *   Point-like value.\n * @returns {Point}\n *   unist point.\n */\nfunction point(d) {\n  return {\n    line: d.line,\n    column: d.column,\n    offset: d.offset\n  };\n}\n\n/**\n * @param {Config} combined\n * @param {Array<Array<Extension> | Extension>} extensions\n * @returns {undefined}\n */\nfunction configure(combined, extensions) {\n  let index = -1;\n  while (++index < extensions.length) {\n    const value = extensions[index];\n    if (Array.isArray(value)) {\n      configure(combined, value);\n    } else {\n      extension(combined, value);\n    }\n  }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {undefined}\n */\nfunction extension(combined, extension) {\n  /** @type {keyof Extension} */\n  let key;\n  for (key in extension) {\n    if (own.call(extension, key)) {\n      switch (key) {\n        case 'canContainEols':\n          {\n            const right = extension[key];\n            if (right) {\n              combined[key].push(...right);\n            }\n            break;\n          }\n        case 'transforms':\n          {\n            const right = extension[key];\n            if (right) {\n              combined[key].push(...right);\n            }\n            break;\n          }\n        case 'enter':\n        case 'exit':\n          {\n            const right = extension[key];\n            if (right) {\n              Object.assign(combined[key], right);\n            }\n            break;\n          }\n        // No default\n      }\n    }\n  }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n  if (left) {\n    throw new Error('Cannot close `' + left.type + '` (' + stringifyPosition({\n      start: left.start,\n      end: left.end\n    }) + '): a different token (`' + right.type + '`, ' + stringifyPosition({\n      start: right.start,\n      end: right.end\n    }) + ') is open');\n  } else {\n    throw new Error('Cannot close document, a token (`' + right.type + '`, ' + stringifyPosition({\n      start: right.start,\n      end: right.end\n    }) + ') is still open');\n  }\n}","export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n *   Check that an arbitrary value is a node.\n * @param {unknown} this\n *   The given context.\n * @param {unknown} [node]\n *   Anything (typically a node).\n * @param {number | null | undefined} [index]\n *   The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n *   The node’s parent.\n * @returns {boolean}\n *   Whether this is a node and passes a test.\n *\n * @typedef {Record<string, unknown> | Node} Props\n *   Object to check for equivalence.\n *\n *   Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array<Props | TestFunction | string> | Props | TestFunction | string | null | undefined} Test\n *   Check for an arbitrary node.\n *\n * @callback TestFunction\n *   Check if a node passes a test.\n * @param {unknown} this\n *   The given context.\n * @param {Node} node\n *   A node.\n * @param {number | undefined} [index]\n *   The node’s position in its parent.\n * @param {Parent | undefined} [parent]\n *   The node’s parent.\n * @returns {boolean | undefined | void}\n *   Whether this node passes the test.\n *\n *   Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n *   Thing to check, typically `Node`.\n * @param {Test} test\n *   A check for a specific node.\n * @param {number | null | undefined} index\n *   The node’s position in its parent.\n * @param {Parent | null | undefined} parent\n *   The node’s parent.\n * @param {unknown} context\n *   Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n *   Whether `node` is a node and passes a test.\n */\nexport const is =\n  // Note: overloads in JSDoc can’t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends string>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n   *   (<Condition extends Props>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n   *   (<Condition extends TestFunction>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n   *   ((node?: null | undefined) => false) &\n   *   ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n   *   ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n   * )}\n   */\n  (\n    /**\n     * @param {unknown} [node]\n     * @param {Test} [test]\n     * @param {number | null | undefined} [index]\n     * @param {Parent | null | undefined} [parent]\n     * @param {unknown} [context]\n     * @returns {boolean}\n     */\n    // eslint-disable-next-line max-params\n    function (node, test, index, parent, context) {\n      const check = convert(test)\n\n      if (\n        index !== undefined &&\n        index !== null &&\n        (typeof index !== 'number' ||\n          index < 0 ||\n          index === Number.POSITIVE_INFINITY)\n      ) {\n        throw new Error('Expected positive finite index')\n      }\n\n      if (\n        parent !== undefined &&\n        parent !== null &&\n        (!is(parent) || !parent.children)\n      ) {\n        throw new Error('Expected parent node')\n      }\n\n      if (\n        (parent === undefined || parent === null) !==\n        (index === undefined || index === null)\n      ) {\n        throw new Error('Expected both parent and index')\n      }\n\n      return looksLikeANode(node)\n        ? check.call(context, node, index, parent)\n        : false\n    }\n  )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n *   *   when nullish, checks if `node` is a `Node`.\n *   *   when `string`, works like passing `(node) => node.type === test`.\n *   *   when `function` checks if function passed the node is true.\n *   *   when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n *   *   when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n *   An assertion.\n */\nexport const convert =\n  // Note: overloads in JSDoc can’t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n   *   (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n   *   (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n   *   ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n   *   ((test?: Test) => Check)\n   * )}\n   */\n  (\n    /**\n     * @param {Test} [test]\n     * @returns {Check}\n     */\n    function (test) {\n      if (test === null || test === undefined) {\n        return ok\n      }\n\n      if (typeof test === 'function') {\n        return castFactory(test)\n      }\n\n      if (typeof test === 'object') {\n        return Array.isArray(test) ? anyFactory(test) : propsFactory(test)\n      }\n\n      if (typeof test === 'string') {\n        return typeFactory(test)\n      }\n\n      throw new Error('Expected function, string, or object as test')\n    }\n  )\n\n/**\n * @param {Array<Props | TestFunction | string>} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n  /** @type {Array<Check>} */\n  const checks = []\n  let index = -1\n\n  while (++index < tests.length) {\n    checks[index] = convert(tests[index])\n  }\n\n  return castFactory(any)\n\n  /**\n   * @this {unknown}\n   * @type {TestFunction}\n   */\n  function any(...parameters) {\n    let index = -1\n\n    while (++index < checks.length) {\n      if (checks[index].apply(this, parameters)) return true\n    }\n\n    return false\n  }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propsFactory(check) {\n  const checkAsRecord = /** @type {Record<string, unknown>} */ (check)\n\n  return castFactory(all)\n\n  /**\n   * @param {Node} node\n   * @returns {boolean}\n   */\n  function all(node) {\n    const nodeAsRecord = /** @type {Record<string, unknown>} */ (\n      /** @type {unknown} */ (node)\n    )\n\n    /** @type {string} */\n    let key\n\n    for (key in check) {\n      if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n    }\n\n    return true\n  }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n  return castFactory(type)\n\n  /**\n   * @param {Node} node\n   */\n  function type(node) {\n    return node && node.type === check\n  }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n  return check\n\n  /**\n   * @this {unknown}\n   * @type {Check}\n   */\n  function check(value, index, parent) {\n    return Boolean(\n      looksLikeANode(value) &&\n        testFunction.call(\n          this,\n          value,\n          typeof index === 'number' ? index : undefined,\n          parent || undefined\n        )\n    )\n  }\n}\n\nfunction ok() {\n  return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n  return value !== null && typeof value === 'object' && 'type' in value\n}\n","/**\n * @param {string} d\n * @returns {string}\n */\nexport function color(d) {\n  return d\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n *   Test from `unist-util-is`.\n *\n *   Note: we have remove and add `undefined`, because otherwise when generating\n *   automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n *   which doesn’t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n *   Fn extends (value: any) => value is infer Thing\n *   ? Thing\n *   : Fallback\n * )} Predicate\n *   Get the value of a type guard `Fn`.\n * @template Fn\n *   Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n *   Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n *   Check extends null | undefined // No test.\n *   ? Value\n *   : Value extends {type: Check} // String (type) test.\n *   ? Value\n *   : Value extends Check // Partial test.\n *   ? Value\n *   : Check extends Function // Function test.\n *   ? Predicate<Check, Value> extends Value\n *     ? Predicate<Check, Value>\n *     : never\n *   : never // Some other test?\n * )} MatchesOne\n *   Check whether a node matches a primitive check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n *   Check extends Array<any>\n *   ? MatchesOne<Value, Check[keyof Check]>\n *   : MatchesOne<Value, Check>\n * )} Matches\n *   Check whether a node matches a check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n *   Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n *   Increment a number in the type system.\n * @template {Uint} [I=0]\n *   Index.\n */\n\n/**\n * @typedef {(\n *   Node extends UnistParent\n *   ? Node extends {children: Array<infer Children>}\n *     ? Child extends Children ? Node : never\n *     : never\n *   : never\n * )} InternalParent\n *   Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n *   Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Depth extends Max\n *   ? never\n *   :\n *     | InternalParent<Node, Child>\n *     | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {InternalAncestor<InclusiveDescendant<Tree>, Child>} Ancestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Tree extends UnistParent\n *     ? Depth extends Max\n *       ? Tree\n *       : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n *     : Tree\n * )} InclusiveDescendant\n *   Collect all (inclusive) descendants of `Tree`.\n *\n *   > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n *   > recurse without actually running into an infinite loop, which the\n *   > previous version did.\n *   >\n *   > Practically, a max of `2` is typically enough assuming a `Root` is\n *   > passed, but it doesn’t improve performance.\n *   > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n *   > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n *   Tree type.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} Action\n *   Union of the action types.\n *\n * @typedef {number} Index\n *   Move to the sibling at `index` next (after node itself is completely\n *   traversed).\n *\n *   Useful if mutating the tree, such as removing the node the visitor is\n *   currently on, or any of its previous siblings.\n *   Results less than 0 or greater than or equal to `children.length` stop\n *   traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n *   List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n *   Any value that can be returned from a visitor.\n */\n\n/**\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform the parent of node (the last of `ancestors`).\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of an ancestor still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Array<VisitedParents>} ancestors\n *   Ancestors of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n *   Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n *   Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Matches<InclusiveDescendant<Tree>, Check>, Ancestor<Tree, Matches<InclusiveDescendant<Tree>, Check>>>} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parents`.\n * @template {UnistNode} [Tree=UnistNode]\n *   Tree type.\n * @template {Test} [Check=Test]\n *   Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly<ActionTuple>} */\nconst empty = []\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n *   Tree to traverse.\n * @param {Visitor | Test} test\n *   `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n *   Handle each node.\n * @param {boolean | null | undefined} [reverse]\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n *   Nothing.\n *\n * @template {UnistNode} Tree\n *   Node type.\n * @template {Test} Check\n *   `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n  /** @type {Test} */\n  let check\n\n  if (typeof test === 'function' && typeof visitor !== 'function') {\n    reverse = visitor\n    // @ts-expect-error no visitor given, so `visitor` is test.\n    visitor = test\n  } else {\n    // @ts-expect-error visitor given, so `test` isn’t a visitor.\n    check = test\n  }\n\n  const is = convert(check)\n  const step = reverse ? -1 : 1\n\n  factory(tree, undefined, [])()\n\n  /**\n   * @param {UnistNode} node\n   * @param {number | undefined} index\n   * @param {Array<UnistParent>} parents\n   */\n  function factory(node, index, parents) {\n    const value = /** @type {Record<string, unknown>} */ (\n      node && typeof node === 'object' ? node : {}\n    )\n\n    if (typeof value.type === 'string') {\n      const name =\n        // `hast`\n        typeof value.tagName === 'string'\n          ? value.tagName\n          : // `xast`\n          typeof value.name === 'string'\n          ? value.name\n          : undefined\n\n      Object.defineProperty(visit, 'name', {\n        value:\n          'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n      })\n    }\n\n    return visit\n\n    function visit() {\n      /** @type {Readonly<ActionTuple>} */\n      let result = empty\n      /** @type {Readonly<ActionTuple>} */\n      let subresult\n      /** @type {number} */\n      let offset\n      /** @type {Array<UnistParent>} */\n      let grandparents\n\n      if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n        // @ts-expect-error: `visitor` is now a visitor.\n        result = toResult(visitor(node, parents))\n\n        if (result[0] === EXIT) {\n          return result\n        }\n      }\n\n      if ('children' in node && node.children) {\n        const nodeAsParent = /** @type {UnistParent} */ (node)\n\n        if (nodeAsParent.children && result[0] !== SKIP) {\n          offset = (reverse ? nodeAsParent.children.length : -1) + step\n          grandparents = parents.concat(nodeAsParent)\n\n          while (offset > -1 && offset < nodeAsParent.children.length) {\n            const child = nodeAsParent.children[offset]\n\n            subresult = factory(child, offset, grandparents)()\n\n            if (subresult[0] === EXIT) {\n              return subresult\n            }\n\n            offset =\n              typeof subresult[1] === 'number' ? subresult[1] : offset + step\n          }\n        }\n      }\n\n      return result\n    }\n  }\n}\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n *   Valid return values from visitors.\n * @returns {Readonly<ActionTuple>}\n *   Clean result.\n */\nfunction toResult(value) {\n  if (Array.isArray(value)) {\n    return value\n  }\n\n  if (typeof value === 'number') {\n    return [CONTINUE, value]\n  }\n\n  return value === null || value === undefined ? empty : [value]\n}\n","/**\n * @import {Nodes, Parents, PhrasingContent, Root, Text} from 'mdast'\n * @import {BuildVisitor, Test, VisitorResult} from 'unist-util-visit-parents'\n */\n\n/**\n * @typedef RegExpMatchObject\n *   Info on the match.\n * @property {number} index\n *   The index of the search at which the result was found.\n * @property {string} input\n *   A copy of the search string in the text node.\n * @property {[...Array<Parents>, Text]} stack\n *   All ancestors of the text node, where the last node is the text itself.\n *\n * @typedef {RegExp | string} Find\n *   Pattern to find.\n *\n *   Strings are escaped and then turned into global expressions.\n *\n * @typedef {Array<FindAndReplaceTuple>} FindAndReplaceList\n *   Several find and replaces, in array form.\n *\n * @typedef {[Find, Replace?]} FindAndReplaceTuple\n *   Find and replace in tuple form.\n *\n * @typedef {ReplaceFunction | string | null | undefined} Replace\n *   Thing to replace with.\n *\n * @callback ReplaceFunction\n *   Callback called when a search matches.\n * @param {...any} parameters\n *   The parameters are the result of corresponding search expression:\n *\n *   * `value` (`string`) — whole match\n *   * `...capture` (`Array<string>`) — matches from regex capture groups\n *   * `match` (`RegExpMatchObject`) — info on the match\n * @returns {Array<PhrasingContent> | PhrasingContent | string | false | null | undefined}\n *   Thing to replace with.\n *\n *   * when `null`, `undefined`, `''`, remove the match\n *   * …or when `false`, do not replace at all\n *   * …or when `string`, replace with a text node of that value\n *   * …or when `Node` or `Array<Node>`, replace with those nodes\n *\n * @typedef {[RegExp, ReplaceFunction]} Pair\n *   Normalized find and replace.\n *\n * @typedef {Array<Pair>} Pairs\n *   All find and replaced.\n *\n * @typedef Options\n *   Configuration.\n * @property {Test | null | undefined} [ignore]\n *   Test for which nodes to ignore (optional).\n */\n\nimport escape from 'escape-string-regexp'\nimport {visitParents} from 'unist-util-visit-parents'\nimport {convert} from 'unist-util-is'\n\n/**\n * Find patterns in a tree and replace them.\n *\n * The algorithm searches the tree in *preorder* for complete values in `Text`\n * nodes.\n * Partial matches are not supported.\n *\n * @param {Nodes} tree\n *   Tree to change.\n * @param {FindAndReplaceList | FindAndReplaceTuple} list\n *   Patterns to find.\n * @param {Options | null | undefined} [options]\n *   Configuration (when `find` is not `Find`).\n * @returns {undefined}\n *   Nothing.\n */\nexport function findAndReplace(tree, list, options) {\n  const settings = options || {}\n  const ignored = convert(settings.ignore || [])\n  const pairs = toPairs(list)\n  let pairIndex = -1\n\n  while (++pairIndex < pairs.length) {\n    visitParents(tree, 'text', visitor)\n  }\n\n  /** @type {BuildVisitor<Root, 'text'>} */\n  function visitor(node, parents) {\n    let index = -1\n    /** @type {Parents | undefined} */\n    let grandparent\n\n    while (++index < parents.length) {\n      const parent = parents[index]\n      /** @type {Array<Nodes> | undefined} */\n      const siblings = grandparent ? grandparent.children : undefined\n\n      if (\n        ignored(\n          parent,\n          siblings ? siblings.indexOf(parent) : undefined,\n          grandparent\n        )\n      ) {\n        return\n      }\n\n      grandparent = parent\n    }\n\n    if (grandparent) {\n      return handler(node, parents)\n    }\n  }\n\n  /**\n   * Handle a text node which is not in an ignored parent.\n   *\n   * @param {Text} node\n   *   Text node.\n   * @param {Array<Parents>} parents\n   *   Parents.\n   * @returns {VisitorResult}\n   *   Result.\n   */\n  function handler(node, parents) {\n    const parent = parents[parents.length - 1]\n    const find = pairs[pairIndex][0]\n    const replace = pairs[pairIndex][1]\n    let start = 0\n    /** @type {Array<Nodes>} */\n    const siblings = parent.children\n    const index = siblings.indexOf(node)\n    let change = false\n    /** @type {Array<PhrasingContent>} */\n    let nodes = []\n\n    find.lastIndex = 0\n\n    let match = find.exec(node.value)\n\n    while (match) {\n      const position = match.index\n      /** @type {RegExpMatchObject} */\n      const matchObject = {\n        index: match.index,\n        input: match.input,\n        stack: [...parents, node]\n      }\n      let value = replace(...match, matchObject)\n\n      if (typeof value === 'string') {\n        value = value.length > 0 ? {type: 'text', value} : undefined\n      }\n\n      // It wasn’t a match after all.\n      if (value === false) {\n        // False acts as if there was no match.\n        // So we need to reset `lastIndex`, which currently being at the end of\n        // the current match, to the beginning.\n        find.lastIndex = position + 1\n      } else {\n        if (start !== position) {\n          nodes.push({\n            type: 'text',\n            value: node.value.slice(start, position)\n          })\n        }\n\n        if (Array.isArray(value)) {\n          nodes.push(...value)\n        } else if (value) {\n          nodes.push(value)\n        }\n\n        start = position + match[0].length\n        change = true\n      }\n\n      if (!find.global) {\n        break\n      }\n\n      match = find.exec(node.value)\n    }\n\n    if (change) {\n      if (start < node.value.length) {\n        nodes.push({type: 'text', value: node.value.slice(start)})\n      }\n\n      parent.children.splice(index, 1, ...nodes)\n    } else {\n      nodes = [node]\n    }\n\n    return index + nodes.length\n  }\n}\n\n/**\n * Turn a tuple or a list of tuples into pairs.\n *\n * @param {FindAndReplaceList | FindAndReplaceTuple} tupleOrList\n *   Schema.\n * @returns {Pairs}\n *   Clean pairs.\n */\nfunction toPairs(tupleOrList) {\n  /** @type {Pairs} */\n  const result = []\n\n  if (!Array.isArray(tupleOrList)) {\n    throw new TypeError('Expected find and replace tuple or list of tuples')\n  }\n\n  /** @type {FindAndReplaceList} */\n  // @ts-expect-error: correct.\n  const list =\n    !tupleOrList[0] || Array.isArray(tupleOrList[0])\n      ? tupleOrList\n      : [tupleOrList]\n\n  let index = -1\n\n  while (++index < list.length) {\n    const tuple = list[index]\n    result.push([toExpression(tuple[0]), toFunction(tuple[1])])\n  }\n\n  return result\n}\n\n/**\n * Turn a find into an expression.\n *\n * @param {Find} find\n *   Find.\n * @returns {RegExp}\n *   Expression.\n */\nfunction toExpression(find) {\n  return typeof find === 'string' ? new RegExp(escape(find), 'g') : find\n}\n\n/**\n * Turn a replace into a function.\n *\n * @param {Replace} replace\n *   Replace.\n * @returns {ReplaceFunction}\n *   Function.\n */\nfunction toFunction(replace) {\n  return typeof replace === 'function'\n    ? replace\n    : function () {\n        return replace\n      }\n}\n","import { findAndReplace } from \"mdast-util-find-and-replace\"\n\n// This regex matches:\n//   \"http\"\n//   an optional \"s\"\n//   two / characters\n//   The subdomains and hostname: Any word or numeric character or \"-\" one or more times followed by a period\n//   The TLD: Any word or numeric character or \"-\" one or more times (the TLD is optional, and URLs like localhost are also valid)\n//   The port: A colon followed by one or more digits (optional)\n//   The path, query string and fragment: A forward slash followed by any word or numeric character (unicode classes so umlauts like ö match\n//       as well as any of the following: .+?:%&=~#) zero or more times. Note that we exclude space even though that is valid in a URL but it tends\n//       to make the match too greedy.\n//       We match the same subgroup [\\p{L}\\p{N}_\\-.\\+/?:%&=~#] twice, once with a * and then excactly once but without interpuncation characters .?:\n//       This is to make sure that we don't match trailing punctuation as part of the URL (\"This is an http://example.com.\" - note that the leading\n//       period should not be part of the URL)\n//       Finally, the very last part is a lone forward slash which would not be matched by the previous subgroup.\nexport const urlRegex =\n    /https?:\\/\\/([\\w-]+\\.)*[\\w-]+(:\\d+)?((\\/[\\p{L}\\p{N}_\\-.+/?:%&=~#]*[\\p{L}\\p{N}_\\-+/%&=~#])|\\/)?/gu\n\nexport function remarkPlainLinks() {\n    const turnIntoLink = (value: string) => {\n        return {\n            type: \"link\" as const,\n            url: value,\n            children: [\n                {\n                    type: \"text\" as const,\n                    value: value,\n                },\n            ],\n        }\n    }\n    return (tree: any) => {\n        findAndReplace(tree, [[urlRegex, turnIntoLink]])\n    }\n}\n","import { imemo, Bounds } from \"@ourworldindata/utils\"\nimport { type ITextWrap } from \"../TextWrap/TextWrap.js\"\nimport { fromMarkdown } from \"mdast-util-from-markdown\"\nimport type { Root, RootContent } from \"mdast\"\nimport { match } from \"ts-pattern\"\nimport { urlRegex } from \"../markdown/remarkPlainLinks.js\"\nimport * as R from \"remeda\"\nimport {\n    IRBold,\n    IRDetailOnDemand,\n    IRItalic,\n    IRLineBreak,\n    IRLink,\n    IRText,\n    IRWhitespace,\n    type IRFontParams,\n    type IRToken,\n} from \"./IRTokens.js\"\nimport {\n    AbstractTokenTextWrap,\n    type TokenTextWrapProps,\n} from \"./AbstractTokenTextWrap.js\"\n\ntype MarkdownTextWrapProps = { text: string } & TokenTextWrapProps\n\nexport class MarkdownTextWrap extends AbstractTokenTextWrap<MarkdownTextWrapProps> {\n    @imemo get text(): string {\n        return normalizeMarkdownNewlines(this.props.text)\n    }\n\n    @imemo get tokens(): IRToken[] {\n        return convertMarkdownToIRTokens(this.text, this.fontParams)\n    }\n}\n\n/**\n * Normalizes newline variants into markdown hard line breaks.\n *\n * NOTE: ❗Here we deviate from the normal markdown spec. We replace \\n with <SPACE><SPACE>\\n to make sure that single \\n are treated as\n * actual line breaks but only if none of the other markdown line break rules apply.\n * This is a bit different to how markdown usually works but we have a substantial\n * amount of legacy charts that use newlines in this way and it seems that it is\n * better to support this simple case than to do a data migration of many chart subtitles.\n */\nexport function normalizeMarkdownNewlines(baseText: string): string {\n    // This replace is a bit funky - we want to make sure that single \\n are treated as\n    // actual line breaks but only if none of the other markdown line break rules apply.\n    // These are:\n    // - \\n\\n is always a new paragraph\n    // - Two spaces before \\n is a line break (this rule is not entirely checked as we only check for a single space)\n    // - A backslash before \\n is a line break\n    // The code below normalizes all cases to <SPACE><SPACE>\\n which will lead to them surviving the markdown parsing\n    let text = baseText.trim()\n    text = text.replaceAll(\"\\n\\n\", \"@@LINEBREAK@@\")\n    text = text.replaceAll(\"\\\\\\n\", \"@@LINEBREAK@@\")\n    text = text.replaceAll(\"  \\n\", \"@@LINEBREAK@@\")\n    text = text.replaceAll(\"\\n\", \"  \\n\")\n    text = text.replaceAll(\"@@LINEBREAK@@\", \"  \\n\")\n    return text\n}\n\nexport function convertMarkdownToIRTokens(\n    markdown: string,\n    fontParams?: IRFontParams\n): IRToken[] {\n    const ast: Root = fromMarkdown(markdown)\n    const children = ast.children.flatMap((item) =>\n        convertMarkdownNodeToIRTokens(item, fontParams)\n    )\n    // ensure that there are no leading or trailing line breaks\n    return R.dropLastWhile(\n        R.dropWhile(children, (token) => token instanceof IRLineBreak),\n        (token) => token instanceof IRLineBreak\n    )\n}\n\n// When using mdast types version 4 this should be typed as:\n// node: RootContentMap[keyof RootContentMap]\nfunction convertMarkdownNodeToIRTokens(\n    node: RootContent,\n    fontParams: IRFontParams = {}\n): IRToken[] {\n    const converted = match(node)\n        .with(\n            {\n                type: \"blockquote\",\n            },\n            (item) => {\n                return item.children.flatMap((child) =>\n                    convertMarkdownNodeToIRTokens(child, fontParams)\n                )\n            }\n        )\n        .with(\n            {\n                type: \"break\",\n            },\n            (_) => {\n                return [new IRLineBreak()]\n            }\n        )\n        .with(\n            {\n                type: \"code\",\n            },\n            (item) => {\n                return [new IRText(item.value, fontParams)]\n            }\n        )\n        .with(\n            {\n                type: \"emphasis\",\n            },\n            (item) => {\n                return [\n                    new IRItalic(\n                        item.children.flatMap((child) =>\n                            convertMarkdownNodeToIRTokens(child, {\n                                ...fontParams,\n                                isItalic: true,\n                            })\n                        )\n                    ),\n                ]\n            }\n        )\n        .with(\n            {\n                type: \"heading\",\n            },\n            (item) => {\n                return item.children.flatMap((child) =>\n                    convertMarkdownNodeToIRTokens(child, fontParams)\n                )\n            }\n        )\n        .with(\n            {\n                type: \"html\",\n            },\n            (item) => {\n                return [new IRText(item.value, fontParams)]\n            }\n        )\n        .with(\n            {\n                type: \"image\",\n            },\n            (item) => {\n                return [new IRText(item.alt ?? \"\", fontParams)]\n            }\n        )\n        .with(\n            {\n                type: \"inlineCode\",\n            },\n            (item) => {\n                return [new IRText(item.value, fontParams)]\n            }\n        )\n        .with(\n            {\n                type: \"link\",\n            },\n            (item) => {\n                if (item.url.startsWith(\"#dod:\")) {\n                    const term = item.url.replace(\"#dod:\", \"\")\n                    return [\n                        new IRDetailOnDemand(\n                            term,\n                            item.children.flatMap((child) =>\n                                convertMarkdownNodeToIRTokens(child, fontParams)\n                            ),\n                            fontParams\n                        ),\n                    ]\n                } else\n                    return [\n                        new IRLink(\n                            item.url,\n                            item.children.flatMap((child) =>\n                                convertMarkdownNodeToIRTokens(child, fontParams)\n                            )\n                        ),\n                    ]\n            }\n        )\n        .with(\n            {\n                type: \"list\",\n            },\n            (item) => {\n                if (item.ordered)\n                    return item.children.flatMap((child, index) => [\n                        new IRLineBreak(),\n                        new IRText(`${index + 1}) `, fontParams),\n                        ...convertMarkdownNodeToIRTokens(child, fontParams),\n                    ])\n                else\n                    return item.children.flatMap((child) => [\n                        new IRLineBreak(),\n                        new IRText(`• `, fontParams),\n                        ...convertMarkdownNodeToIRTokens(child, fontParams),\n                    ])\n            }\n        )\n        .with(\n            {\n                type: \"listItem\",\n            },\n            (item) => {\n                return item.children.flatMap((child) =>\n                    convertMarkdownNodeToIRTokens(child, fontParams)\n                )\n            }\n        )\n        .with(\n            {\n                type: \"paragraph\",\n            },\n            (item) => {\n                return item.children.flatMap((child) =>\n                    convertMarkdownNodeToIRTokens(child, fontParams)\n                )\n            }\n        )\n        .with(\n            {\n                type: \"strong\",\n            },\n            (item) => {\n                return [\n                    new IRBold(\n                        item.children.flatMap((child) =>\n                            convertMarkdownNodeToIRTokens(child, {\n                                ...fontParams,\n                                fontWeight: 700,\n                            })\n                        )\n                    ),\n                ]\n            }\n        )\n        .with(\n            {\n                type: \"text\",\n            },\n            (item) => {\n                const splitted = item.value.split(/\\s+/)\n                const tokens = splitted.flatMap((text, i) => {\n                    const textNode = new IRText(text, fontParams)\n                    const node = text.match(urlRegex)\n                        ? new IRLink(text, [textNode], fontParams)\n                        : textNode\n                    if (i < splitted.length - 1) {\n                        return [node, new IRWhitespace(fontParams)]\n                    } else return [node]\n                })\n                return tokens\n            }\n        )\n        .with(\n            {\n                type: \"thematicBreak\",\n            },\n            (_) => {\n                return [new IRText(\"---\", fontParams)]\n            }\n        )\n        .with(\n            {\n                type: \"delete\",\n            },\n            (item) => {\n                return item.children.flatMap((child) =>\n                    convertMarkdownNodeToIRTokens(child, fontParams)\n                )\n            }\n        )\n        // Now lets finish this with blocks for FootnoteDefinition, Definition, ImageReference, LinkReference, FootnoteReference, and Table\n        .with(\n            {\n                type: \"footnoteDefinition\",\n            },\n            (item) => {\n                return item.children.flatMap((child) =>\n                    convertMarkdownNodeToIRTokens(child, fontParams)\n                )\n            }\n        )\n        .with(\n            {\n                type: \"definition\",\n            },\n            (item) => {\n                return [\n                    new IRText(`${item.identifier}: ${item.label}`, fontParams),\n                ]\n            }\n        )\n        .with(\n            {\n                type: \"imageReference\",\n            },\n            (item) => {\n                return [\n                    new IRText(`${item.identifier}: ${item.label}`, fontParams),\n                ]\n            }\n        )\n        .with(\n            {\n                type: \"linkReference\",\n            },\n            (item) => {\n                return [\n                    new IRText(`${item.identifier}: ${item.label}`, fontParams),\n                ]\n            }\n        )\n        .with(\n            {\n                type: \"footnoteReference\",\n            },\n            (item) => {\n                return [\n                    new IRText(`${item.identifier}: ${item.label}`, fontParams),\n                ]\n            }\n        )\n        .with(\n            {\n                type: \"table\",\n            },\n            (item) => {\n                return item.children.flatMap((child) =>\n                    convertMarkdownNodeToIRTokens(child, fontParams)\n                )\n            }\n        )\n        .with(\n            {\n                type: \"tableCell\",\n            },\n            (item) => {\n                return item.children.flatMap((child) =>\n                    convertMarkdownNodeToIRTokens(child, fontParams)\n                )\n            }\n        )\n        // and now TableRow and Yaml\n        .with(\n            {\n                type: \"tableRow\",\n            },\n            (item) => {\n                return item.children.flatMap((child) =>\n                    convertMarkdownNodeToIRTokens(child, fontParams)\n                )\n            }\n        )\n        .with(\n            {\n                type: \"yaml\",\n            },\n            (item) => {\n                return [new IRText(item.value, fontParams)]\n            }\n        )\n        .exhaustive()\n    return converted\n}\n\nexport function toPlaintext(markdown: string): string {\n    return new MarkdownTextWrap({\n        text: markdown,\n        fontSize: 10, // doesn't matter, but is a mandatory field\n    }).plaintext\n}\n\n/** Checks whether a piece of text fits on the last line of an existing text wrap */\nexport function canAppendTextToLastLine({\n    existingTextWrap,\n    textToAppend,\n    reservedWidth = 0,\n}: {\n    existingTextWrap: ITextWrap\n    textToAppend: string\n    /** Width to reserve for non-text elements (e.g. icons) */\n    reservedWidth?: number\n}): boolean {\n    const { maxWidth, lastLineWidth, fontSize, fontWeight, fontFamily } =\n        existingTextWrap\n\n    const spaceWidth = Bounds.forText(\" \", { fontSize }).width\n    const availableWidthInLastLine =\n        maxWidth - lastLineWidth - spaceWidth - reservedWidth\n\n    if (availableWidthInLastLine <= 0) return false\n\n    const secondaryTextWrap = new MarkdownTextWrap({\n        text: textToAppend,\n        maxWidth: availableWidthInLastLine,\n        fontSize,\n        fontWeight,\n        fontFamily,\n    })\n\n    return secondaryTextWrap.svgLines.length === 1\n}\n","import * as R from \"remeda\"\nimport { Bounds, imemo, omitUndefinedValues } from \"@ourworldindata/utils\"\nimport {\n    convertPlaintextToIRTokens,\n    getLineWidth,\n    IRFontParams,\n    IRFragment,\n    IRFragmentStyle,\n    IRLineBreak,\n    IRToken,\n    IRWhitespace,\n    splitIntoLines,\n} from \"./IRTokens.js\"\nimport {\n    AbstractTokenTextWrap,\n    type TokenTextWrapProps,\n} from \"./AbstractTokenTextWrap.js\"\nimport {\n    convertMarkdownToIRTokens,\n    normalizeMarkdownNewlines,\n} from \"./MarkdownTextWrap.js\"\n\n/**\n * A single fragment of a TextWrapGroup. The inherited style props act as\n * overrides that fall back to the group-level style when not given.\n */\nexport interface TextWrapFragment extends IRFragmentStyle {\n    text: string\n\n    /** Parse the text as markdown (including details on demand) */\n    markdown?: boolean\n\n    /**\n     * Placement relative to the preceding content:\n     * - \"avoid-wrap\" places the fragment on the current line if it fits there\n     *    in its entirety and on a new line otherwise\n     * - \"continue-line\" continues on the current line unconditionally and lets\n     *    the fragment wrap freely\n     * - \"always\" always starts a new line\n     */\n    newLine?: \"avoid-wrap\" | \"continue-line\" | \"always\"\n\n    /**\n     * Horizontal gap between the preceding content and this fragment.\n     * Only applies when the fragment is placed inline (continues a line)\n     */\n    inlineGap?: number\n\n    /**\n     * Vertical gap between the preceding line and this fragment.\n     * Only applies when the fragment is placed on a new line\n     */\n    newLineGap?: number\n}\n\ntype TextWrapGroupProps = {\n    fragments: TextWrapFragment[]\n} & TokenTextWrapProps\n\n/**\n * Wraps a sequence of text fragments, each with its own font style, into\n * lines. A fragment is treated as an unbreakable unit where possible: with\n * the default \"avoid-wrap\" placement it continues on the current line only\n * if it fits there in its entirety, and otherwise starts a new line, where\n * it may wrap internally if it is longer than a full line.\n */\nexport class TextWrapGroup extends AbstractTokenTextWrap<TextWrapGroupProps> {\n    @imemo get fragments(): TextWrapFragment[] {\n        return this.props.fragments.filter(\n            (fragment) => fragment.text.trim().length > 0\n        )\n    }\n\n    @imemo get text(): string {\n        return this.fragments.map((fragment) => fragment.text).join(\" \")\n    }\n\n    private getFragmentFontParams(fragment: TextWrapFragment): IRFontParams {\n        return {\n            fontFamily: fragment.fontFamily ?? this.fontFamily,\n            fontSize: fragment.fontSize ?? this.fontSize,\n            fontWeight: fragment.fontWeight ?? this.fontWeight,\n        }\n    }\n\n    /** Style props in which the fragment differs from the group-level style */\n    private getFragmentStyleDelta(fragment: TextWrapFragment): IRFragmentStyle {\n        return omitUndefinedValues({\n            fontSize:\n                fragment.fontSize !== this.fontSize\n                    ? fragment.fontSize\n                    : undefined,\n            fontFamily:\n                fragment.fontFamily !== this.fontFamily\n                    ? fragment.fontFamily\n                    : undefined,\n            fontWeight:\n                fragment.fontWeight !== this.fontWeight\n                    ? fragment.fontWeight\n                    : undefined,\n            color: fragment.color,\n        })\n    }\n\n    private makeFragmentElement(\n        fragment: TextWrapFragment,\n        index: number\n    ): IRFragment {\n        const fontParams = this.getFragmentFontParams(fragment)\n        const children = fragment.markdown\n            ? convertMarkdownToIRTokens(\n                  normalizeMarkdownNewlines(fragment.text),\n                  fontParams\n              )\n            : convertPlaintextToIRTokens(fragment.text, fontParams)\n        return new IRFragment(\n            index,\n            children,\n            this.getFragmentStyleDelta(fragment),\n            fontParams\n        )\n    }\n\n    /** The number of lines each fragment spans */\n    @imemo get fragmentLineCounts(): number[] {\n        return this.fragments.map(\n            (_, index) =>\n                this.svgLines.filter((line) =>\n                    line.some(\n                        (token) =>\n                            token instanceof IRFragment &&\n                            token.fragmentIndex === index\n                    )\n                ).length\n        )\n    }\n\n    @imemo get tokens(): IRToken[] {\n        const tokens: IRToken[] = []\n        this.fragments.forEach((fragment, index) => {\n            const element = this.makeFragmentElement(fragment, index)\n\n            const elementWithGap = (gaps: {\n                inlineGap?: number\n                lineGap?: number\n            }): IRFragment =>\n                new IRFragment(\n                    index,\n                    element.children,\n                    element.styleDelta,\n                    element.fontParams,\n                    gaps.inlineGap,\n                    gaps.lineGap\n                )\n\n            const pushOnNewLine = (): void => {\n                tokens.push(\n                    new IRLineBreak(),\n                    fragment.newLineGap\n                        ? elementWithGap({ lineGap: fragment.newLineGap })\n                        : element\n                )\n            }\n\n            const pushOnCurrentLine = (): void => {\n                if (fragment.inlineGap !== undefined) {\n                    tokens.push(\n                        elementWithGap({ inlineGap: fragment.inlineGap })\n                    )\n                } else {\n                    tokens.push(new IRWhitespace(this.fontParams), element)\n                }\n            }\n\n            if (index === 0) {\n                tokens.push(element)\n                return\n            }\n\n            const newLine = fragment.newLine ?? \"avoid-wrap\"\n            if (newLine === \"always\") {\n                pushOnNewLine()\n                return\n            }\n            if (newLine === \"continue-line\") {\n                pushOnCurrentLine()\n                return\n            }\n\n            // \"avoid-wrap\": place the fragment on the current line only if it\n            // fits there in its entirety, otherwise start a new line\n            const lines = splitIntoLines(tokens, this.maxWidth)\n            const lastLineWidth = getLineWidth(R.last(lines) ?? [])\n            const spaceWidth = Bounds.forText(\" \", {\n                fontSize: this.fontSize,\n            }).width\n            const gapWidth = fragment.inlineGap ?? spaceWidth\n            const availableWidth = this.maxWidth - lastLineWidth - gapWidth\n            const fitsOnCurrentLine =\n                availableWidth > 0 &&\n                splitIntoLines([element], availableWidth).length === 1\n            if (fitsOnCurrentLine) {\n                pushOnCurrentLine()\n            } else {\n                pushOnNewLine()\n            }\n        })\n\n        return tokens\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport { DetailsMarker } from \"@ourworldindata/types\"\nimport {\n    getDodUnderlineSegments,\n    getLineFontSize,\n    getLineGap,\n    FIGMA_TEXT_NODE_BREAK_DY,\n    IRToken,\n} from \"./IRTokens.js\"\nimport { AbstractTokenTextWrap } from \"./AbstractTokenTextWrap.js\"\nimport { omitUndefinedValues, roundForSvg } from \"@ourworldindata/utils\"\n\nfunction MarkdownTextWrapLine({\n    line,\n    style,\n}: {\n    line: IRToken[]\n    style?: React.CSSProperties\n}): React.ReactElement {\n    return (\n        <span\n            className=\"markdown-text-wrap__line\"\n            style={omitUndefinedValues(style)}\n        >\n            {line.length ? line.map((token, i) => token.toHTML(i)) : <br />}\n        </span>\n    )\n}\n\nexport function MarkdownTextWrapHtml({\n    textWrap,\n}: {\n    textWrap: AbstractTokenTextWrap\n}): React.ReactElement | null {\n    const { htmlLines } = textWrap\n    if (htmlLines.length === 0) return null\n    return (\n        <span style={textWrap.style} className=\"markdown-text-wrap\">\n            {htmlLines.map((line, i) => {\n                const plaintextLine = line\n                    .map((token) => token.toPlaintext())\n                    .join(\"\")\n\n                const lineFontSize = getLineFontSize(line) ?? textWrap.fontSize\n                const lineGap = getLineGap(line)\n\n                const style = {\n                    fontSize:\n                        lineFontSize !== textWrap.fontSize\n                            ? lineFontSize\n                            : undefined,\n                    marginTop: lineGap > 0 ? lineGap : undefined,\n                }\n\n                return (\n                    <MarkdownTextWrapLine\n                        key={`${plaintextLine}-${i}`}\n                        line={line}\n                        style={style}\n                    />\n                )\n            })}\n        </span>\n    )\n}\n\nexport function MarkdownTextWrapSvg({\n    textWrap,\n    x,\n    y,\n    detailsMarker = \"superscript\",\n    id,\n    ...svgTextProps\n}: {\n    textWrap: AbstractTokenTextWrap\n    x: number\n    y: number\n    detailsMarker?: DetailsMarker\n    id?: string\n} & React.SVGProps<SVGTextElement>): React.ReactElement {\n    const lines =\n        detailsMarker === \"superscript\"\n            ? textWrap.svgLinesWithDodReferenceNumbers\n            : textWrap.svgLines\n    if (lines.length === 0) return <></>\n\n    const [, yOffset] = textWrap.getPositionForSvgRendering(x, y)\n\n    // Set the font family as an attribute rather than in `style`: otherwise they'll\n    // break the Figma import\n    const { fontFamily, ...style } = textWrap.style\n\n    // The first line's baseline is given by yOffset; every subsequent line\n    // advances the baseline by its own line height plus its line gap\n    const lineHeights = lines.map(\n        (line) => textWrap.getLineHeight(line) + getLineGap(line)\n    )\n    const getLineY = (lineIndex: number): number =>\n        yOffset + _.sum(lineHeights.slice(1, lineIndex + 1))\n\n    return (\n        <g id={id} className=\"markdown-text-wrap\">\n            <text\n                x={roundForSvg(x)}\n                y={roundForSvg(yOffset)}\n                fontFamily={fontFamily}\n                style={style}\n                {...svgTextProps}\n            >\n                {lines.map((line, lineIndex) => {\n                    const lineX = roundForSvg(x)\n                    const lineY = roundForSvg(getLineY(lineIndex))\n                    return (\n                        <tspan key={lineIndex} x={lineX} y={lineY}>\n                            {renderSvgLine(line, {\n                                x: lineX,\n                                y: lineY,\n                                textAnchor: svgTextProps.textAnchor,\n                            })}\n                        </tspan>\n                    )\n                })}\n            </text>\n            {/* SVG doesn't support dotted underlines, so we draw them manually */}\n            {detailsMarker === \"underline\" &&\n                lines.map((line, lineIndex) => {\n                    const lineY = roundForSvg(getLineY(lineIndex) + 2)\n                    return getDodUnderlineSegments(line).map(\n                        (segment, segmentIndex) => (\n                            <line\n                                key={`${lineIndex}-${segmentIndex}`}\n                                className=\"dod-underline\"\n                                x1={roundForSvg(x + segment.x)}\n                                y1={lineY}\n                                x2={roundForSvg(x + segment.x + segment.width)}\n                                y2={lineY}\n                                stroke=\"currentColor\"\n                                strokeWidth={1}\n                                strokeDasharray={1}\n                                // important for rotated text\n                                transform={svgTextProps?.transform}\n                            />\n                        )\n                    )\n                })}\n        </g>\n    )\n}\n\ninterface SvgLinePosition {\n    x: number\n    y: number\n    textAnchor?: string\n}\n\nfunction renderSvgLine(\n    line: IRToken[],\n    position: SvgLinePosition\n): React.ReactNode[] {\n    const nodes = line.map((token, tokenIndex) => token.toSVG(tokenIndex))\n    const [first, ...rest] = nodes\n\n    const startsWithPlainText = !isTspan(first) && !isStyledElement(first)\n    if (startsWithPlainText) return nodes\n\n    return correctLineStartForFigma(first, rest, position)\n}\n\n/**\n * Rewrites a line that starts with a nested element for Figma's SVG import\n *\n * <tspan x=\"10\" y=\"32\">\n *      <tspan style=\"font-weight:700\">Data source:</tspan> UN WPP\n * </tspan>\n *\n * becomes\n *\n * <tspan x=\"10\" y=\"32\">\n *   <tspan style=\"font-weight:700\" x=\"10\" y=\"32\">Data source:</tspan>\n *   <tspan dy=\"0.01\" xml:space=\"preserve\"> UN WPP</tspan>\n * </tspan>\n */\nfunction correctLineStartForFigma(\n    first: React.ReactNode,\n    rest: React.ReactNode[],\n    { x, y, textAnchor }: SvgLinePosition\n): React.ReactNode[] {\n    // Figma joins a line that starts with a nested tspan onto the previous\n    // line. Repeating the line's x/y on the nested tspan keeps the break.\n    const positionedFirst = isTspan(first)\n        ? React.cloneElement(first, { x, y })\n        : first\n\n    const isStartAnchored = !textAnchor || textAnchor === \"start\"\n    const needsNodeBreak =\n        isStartAnchored && isStyledElement(first) && rest.length > 0\n    if (!needsNodeBreak) return [positionedFirst, ...rest]\n\n    // Figma styles a whole text node like its first run, so split off the rest\n    return [\n        positionedFirst,\n        <tspan\n            key=\"rest\"\n            dy={FIGMA_TEXT_NODE_BREAK_DY}\n            // librsvg (Wikimedia's renderer) drops a leading space otherwise\n            xmlSpace=\"preserve\"\n        >\n            {rest}\n        </tspan>,\n    ]\n}\n\ntype SvgElement = React.ReactElement<React.SVGProps<SVGTSpanElement>>\n\nfunction isTspan(node: React.ReactNode): node is SvgElement {\n    return React.isValidElement(node) && node.type === \"tspan\"\n}\n\nfunction isStyledElement(node: React.ReactNode): boolean {\n    if (!React.isValidElement<React.SVGProps<SVGTSpanElement>>(node))\n        return false\n    return (\n        node.type === \"a\" ||\n        _.some(node.props.style, (value) => value !== undefined)\n    )\n}\n","/**\n * @typedef Options\n *   Configuration for `stringify`.\n * @property {boolean} [padLeft=true]\n *   Whether to pad a space before a token.\n * @property {boolean} [padRight=false]\n *   Whether to pad a space after a token.\n */\n\n/**\n * @typedef {Options} StringifyOptions\n *   Please use `StringifyOptions` instead.\n */\n\n/**\n * Parse comma-separated tokens to an array.\n *\n * @param {string} value\n *   Comma-separated tokens.\n * @returns {Array<string>}\n *   List of tokens.\n */\nexport function parse(value) {\n  /** @type {Array<string>} */\n  const tokens = []\n  const input = String(value || '')\n  let index = input.indexOf(',')\n  let start = 0\n  /** @type {boolean} */\n  let end = false\n\n  while (!end) {\n    if (index === -1) {\n      index = input.length\n      end = true\n    }\n\n    const token = input.slice(start, index).trim()\n\n    if (token || !end) {\n      tokens.push(token)\n    }\n\n    start = index + 1\n    index = input.indexOf(',', start)\n  }\n\n  return tokens\n}\n\n/**\n * Serialize an array of strings or numbers to comma-separated tokens.\n *\n * @param {Array<string|number>} values\n *   List of tokens.\n * @param {Options} [options]\n *   Configuration for `stringify` (optional).\n * @returns {string}\n *   Comma-separated tokens.\n */\nexport function stringify(values, options) {\n  const settings = options || {}\n\n  // Ensure the last empty entry is seen.\n  const input = values[values.length - 1] === '' ? [...values, ''] : values\n\n  return input\n    .join(\n      (settings.padRight ? ' ' : '') +\n        ',' +\n        (settings.padLeft === false ? '' : ' ')\n    )\n    .trim()\n}\n","/**\n * @typedef Options\n *   Configuration.\n * @property {boolean | null | undefined} [jsx=false]\n *   Support JSX identifiers (default: `false`).\n */\n\nconst startRe = /[$_\\p{ID_Start}]/u\nconst contRe = /[$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst contReJsx = /[-$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst nameRe = /^[$_\\p{ID_Start}][$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\nconst nameReJsx = /^[$_\\p{ID_Start}][-$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Checks if the given code point can start an identifier.\n *\n * @param {number | undefined} code\n *   Code point to check.\n * @returns {boolean}\n *   Whether `code` can start an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function start(code) {\n  return code ? startRe.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given code point can continue an identifier.\n *\n * @param {number | undefined} code\n *   Code point to check.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {boolean}\n *   Whether `code` can continue an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function cont(code, options) {\n  const settings = options || emptyOptions\n  const re = settings.jsx ? contReJsx : contRe\n  return code ? re.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given value is a valid identifier name.\n *\n * @param {string} name\n *   Identifier to check.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {boolean}\n *   Whether `name` can be an identifier.\n */\nexport function name(name, options) {\n  const settings = options || emptyOptions\n  const re = settings.jsx ? nameReJsx : nameRe\n  return re.test(name)\n}\n","/**\n * @typedef {import('hast').Nodes} Nodes\n */\n\n// HTML whitespace expression.\n// See <https://infra.spec.whatwg.org/#ascii-whitespace>.\nconst re = /[ \\t\\n\\f\\r]/g\n\n/**\n * Check if the given value is *inter-element whitespace*.\n *\n * @param {Nodes | string} thing\n *   Thing to check (`Node` or `string`).\n * @returns {boolean}\n *   Whether the `value` is inter-element whitespace (`boolean`): consisting of\n *   zero or more of space, tab (`\\t`), line feed (`\\n`), carriage return\n *   (`\\r`), or form feed (`\\f`); if a node is passed it must be a `Text` node,\n *   whose `value` field is checked.\n */\nexport function whitespace(thing) {\n  return typeof thing === 'object'\n    ? thing.type === 'text'\n      ? empty(thing.value)\n      : false\n    : empty(thing)\n}\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nfunction empty(value) {\n  return value.replace(re, '') === ''\n}\n","/**\n * @import {Schema as SchemaType, Space} from 'property-information'\n */\n\n/** @type {SchemaType} */\nexport class Schema {\n  /**\n   * @param {SchemaType['property']} property\n   *   Property.\n   * @param {SchemaType['normal']} normal\n   *   Normal.\n   * @param {Space | undefined} [space]\n   *   Space.\n   * @returns\n   *   Schema.\n   */\n  constructor(property, normal, space) {\n    this.normal = normal\n    this.property = property\n\n    if (space) {\n      this.space = space\n    }\n  }\n}\n\nSchema.prototype.normal = {}\nSchema.prototype.property = {}\nSchema.prototype.space = undefined\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {ReadonlyArray<Schema>} definitions\n *   Definitions.\n * @param {Space | undefined} [space]\n *   Space.\n * @returns {Schema}\n *   Schema.\n */\nexport function merge(definitions, space) {\n  /** @type {Record<string, Info>} */\n  const property = {}\n  /** @type {Record<string, string>} */\n  const normal = {}\n\n  for (const definition of definitions) {\n    Object.assign(property, definition.property)\n    Object.assign(normal, definition.normal)\n  }\n\n  return new Schema(property, normal, space)\n}\n","/**\n * Get the cleaned case insensitive form of an attribute or property.\n *\n * @param {string} value\n *   An attribute-like or property-like name.\n * @returns {string}\n *   Value that can be used to look up the properly cased property on a\n *   `Schema`.\n */\nexport function normalize(value) {\n  return value.toLowerCase()\n}\n","/**\n * @import {Info as InfoType} from 'property-information'\n */\n\n/** @type {InfoType} */\nexport class Info {\n  /**\n   * @param {string} property\n   *   Property.\n   * @param {string} attribute\n   *   Attribute.\n   * @returns\n   *   Info.\n   */\n  constructor(property, attribute) {\n    this.attribute = attribute\n    this.property = property\n  }\n}\n\nInfo.prototype.attribute = ''\nInfo.prototype.booleanish = false\nInfo.prototype.boolean = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.defined = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.number = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.property = ''\nInfo.prototype.spaceSeparated = false\nInfo.prototype.space = undefined\n","let powers = 0\n\nexport const boolean = increment()\nexport const booleanish = increment()\nexport const overloadedBoolean = increment()\nexport const number = increment()\nexport const spaceSeparated = increment()\nexport const commaSeparated = increment()\nexport const commaOrSpaceSeparated = increment()\n\nfunction increment() {\n  return 2 ** ++powers\n}\n","/**\n * @import {Space} from 'property-information'\n */\n\nimport {Info} from './info.js'\nimport * as types from './types.js'\n\nconst checks = /** @type {ReadonlyArray<keyof typeof types>} */ (\n  Object.keys(types)\n)\n\nexport class DefinedInfo extends Info {\n  /**\n   * @constructor\n   * @param {string} property\n   *   Property.\n   * @param {string} attribute\n   *   Attribute.\n   * @param {number | null | undefined} [mask]\n   *   Mask.\n   * @param {Space | undefined} [space]\n   *   Space.\n   * @returns\n   *   Info.\n   */\n  constructor(property, attribute, mask, space) {\n    let index = -1\n\n    super(property, attribute)\n\n    mark(this, 'space', space)\n\n    if (typeof mask === 'number') {\n      while (++index < checks.length) {\n        const check = checks[index]\n        mark(this, checks[index], (mask & types[check]) === types[check])\n      }\n    }\n  }\n}\n\nDefinedInfo.prototype.defined = true\n\n/**\n * @template {keyof DefinedInfo} Key\n *   Key type.\n * @param {DefinedInfo} values\n *   Info.\n * @param {Key} key\n *   Key.\n * @param {DefinedInfo[Key]} value\n *   Value.\n * @returns {undefined}\n *   Nothing.\n */\nfunction mark(values, key, value) {\n  if (value) {\n    values[key] = value\n  }\n}\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\n/**\n * @typedef Definition\n *   Definition of a schema.\n * @property {Record<string, string> | undefined} [attributes]\n *   Normalzed names to special attribute case.\n * @property {ReadonlyArray<string> | undefined} [mustUseProperty]\n *   Normalized names that must be set as properties.\n * @property {Record<string, number | null>} properties\n *   Property names to their types.\n * @property {Space | undefined} [space]\n *   Space.\n * @property {Transform} transform\n *   Transform a property name.\n */\n\n/**\n * @callback Transform\n *   Transform.\n * @param {Record<string, string>} attributes\n *   Attributes.\n * @param {string} property\n *   Property.\n * @returns {string}\n *   Attribute.\n */\n\nimport {normalize} from '../normalize.js'\nimport {DefinedInfo} from './defined-info.js'\nimport {Schema} from './schema.js'\n\n/**\n * @param {Definition} definition\n *   Definition.\n * @returns {Schema}\n *   Schema.\n */\nexport function create(definition) {\n  /** @type {Record<string, Info>} */\n  const properties = {}\n  /** @type {Record<string, string>} */\n  const normals = {}\n\n  for (const [property, value] of Object.entries(definition.properties)) {\n    const info = new DefinedInfo(\n      property,\n      definition.transform(definition.attributes || {}, property),\n      value,\n      definition.space\n    )\n\n    if (\n      definition.mustUseProperty &&\n      definition.mustUseProperty.includes(property)\n    ) {\n      info.mustUseProperty = true\n    }\n\n    properties[property] = info\n\n    normals[normalize(property)] = property\n    normals[normalize(info.attribute)] = property\n  }\n\n  return new Schema(properties, normals, definition.space)\n}\n","import {create} from './util/create.js'\nimport {booleanish, number, spaceSeparated} from './util/types.js'\n\nexport const aria = create({\n  properties: {\n    ariaActiveDescendant: null,\n    ariaAtomic: booleanish,\n    ariaAutoComplete: null,\n    ariaBusy: booleanish,\n    ariaChecked: booleanish,\n    ariaColCount: number,\n    ariaColIndex: number,\n    ariaColSpan: number,\n    ariaControls: spaceSeparated,\n    ariaCurrent: null,\n    ariaDescribedBy: spaceSeparated,\n    ariaDetails: null,\n    ariaDisabled: booleanish,\n    ariaDropEffect: spaceSeparated,\n    ariaErrorMessage: null,\n    ariaExpanded: booleanish,\n    ariaFlowTo: spaceSeparated,\n    ariaGrabbed: booleanish,\n    ariaHasPopup: null,\n    ariaHidden: booleanish,\n    ariaInvalid: null,\n    ariaKeyShortcuts: null,\n    ariaLabel: null,\n    ariaLabelledBy: spaceSeparated,\n    ariaLevel: number,\n    ariaLive: null,\n    ariaModal: booleanish,\n    ariaMultiLine: booleanish,\n    ariaMultiSelectable: booleanish,\n    ariaOrientation: null,\n    ariaOwns: spaceSeparated,\n    ariaPlaceholder: null,\n    ariaPosInSet: number,\n    ariaPressed: booleanish,\n    ariaReadOnly: booleanish,\n    ariaRelevant: null,\n    ariaRequired: booleanish,\n    ariaRoleDescription: spaceSeparated,\n    ariaRowCount: number,\n    ariaRowIndex: number,\n    ariaRowSpan: number,\n    ariaSelected: booleanish,\n    ariaSetSize: number,\n    ariaSort: null,\n    ariaValueMax: number,\n    ariaValueMin: number,\n    ariaValueNow: number,\n    ariaValueText: null,\n    role: null\n  },\n  transform(_, property) {\n    return property === 'role'\n      ? property\n      : 'aria-' + property.slice(4).toLowerCase()\n  }\n})\n","/**\n * @param {Record<string, string>} attributes\n *   Attributes.\n * @param {string} attribute\n *   Attribute.\n * @returns {string}\n *   Transformed attribute.\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n  return attribute in attributes ? attributes[attribute] : attribute\n}\n","import {caseSensitiveTransform} from './case-sensitive-transform.js'\n\n/**\n * @param {Record<string, string>} attributes\n *   Attributes.\n * @param {string} property\n *   Property.\n * @returns {string}\n *   Transformed property.\n */\nexport function caseInsensitiveTransform(attributes, property) {\n  return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n","import {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n  booleanish,\n  boolean,\n  commaSeparated,\n  number,\n  overloadedBoolean,\n  spaceSeparated\n} from './util/types.js'\n\nexport const html = create({\n  attributes: {\n    acceptcharset: 'accept-charset',\n    classname: 'class',\n    htmlfor: 'for',\n    httpequiv: 'http-equiv'\n  },\n  mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n  properties: {\n    // Standard Properties.\n    abbr: null,\n    accept: commaSeparated,\n    acceptCharset: spaceSeparated,\n    accessKey: spaceSeparated,\n    action: null,\n    allow: null,\n    allowFullScreen: boolean,\n    allowPaymentRequest: boolean,\n    allowUserMedia: boolean,\n    alt: null,\n    as: null,\n    async: boolean,\n    autoCapitalize: null,\n    autoComplete: spaceSeparated,\n    autoFocus: boolean,\n    autoPlay: boolean,\n    blocking: spaceSeparated,\n    capture: null,\n    charSet: null,\n    checked: boolean,\n    cite: null,\n    className: spaceSeparated,\n    cols: number,\n    colSpan: null,\n    content: null,\n    contentEditable: booleanish,\n    controls: boolean,\n    controlsList: spaceSeparated,\n    coords: number | commaSeparated,\n    crossOrigin: null,\n    data: null,\n    dateTime: null,\n    decoding: null,\n    default: boolean,\n    defer: boolean,\n    dir: null,\n    dirName: null,\n    disabled: boolean,\n    download: overloadedBoolean,\n    draggable: booleanish,\n    encType: null,\n    enterKeyHint: null,\n    fetchPriority: null,\n    form: null,\n    formAction: null,\n    formEncType: null,\n    formMethod: null,\n    formNoValidate: boolean,\n    formTarget: null,\n    headers: spaceSeparated,\n    height: number,\n    hidden: overloadedBoolean,\n    high: number,\n    href: null,\n    hrefLang: null,\n    htmlFor: spaceSeparated,\n    httpEquiv: spaceSeparated,\n    id: null,\n    imageSizes: null,\n    imageSrcSet: null,\n    inert: boolean,\n    inputMode: null,\n    integrity: null,\n    is: null,\n    isMap: boolean,\n    itemId: null,\n    itemProp: spaceSeparated,\n    itemRef: spaceSeparated,\n    itemScope: boolean,\n    itemType: spaceSeparated,\n    kind: null,\n    label: null,\n    lang: null,\n    language: null,\n    list: null,\n    loading: null,\n    loop: boolean,\n    low: number,\n    manifest: null,\n    max: null,\n    maxLength: number,\n    media: null,\n    method: null,\n    min: null,\n    minLength: number,\n    multiple: boolean,\n    muted: boolean,\n    name: null,\n    nonce: null,\n    noModule: boolean,\n    noValidate: boolean,\n    onAbort: null,\n    onAfterPrint: null,\n    onAuxClick: null,\n    onBeforeMatch: null,\n    onBeforePrint: null,\n    onBeforeToggle: null,\n    onBeforeUnload: null,\n    onBlur: null,\n    onCancel: null,\n    onCanPlay: null,\n    onCanPlayThrough: null,\n    onChange: null,\n    onClick: null,\n    onClose: null,\n    onContextLost: null,\n    onContextMenu: null,\n    onContextRestored: null,\n    onCopy: null,\n    onCueChange: null,\n    onCut: null,\n    onDblClick: null,\n    onDrag: null,\n    onDragEnd: null,\n    onDragEnter: null,\n    onDragExit: null,\n    onDragLeave: null,\n    onDragOver: null,\n    onDragStart: null,\n    onDrop: null,\n    onDurationChange: null,\n    onEmptied: null,\n    onEnded: null,\n    onError: null,\n    onFocus: null,\n    onFormData: null,\n    onHashChange: null,\n    onInput: null,\n    onInvalid: null,\n    onKeyDown: null,\n    onKeyPress: null,\n    onKeyUp: null,\n    onLanguageChange: null,\n    onLoad: null,\n    onLoadedData: null,\n    onLoadedMetadata: null,\n    onLoadEnd: null,\n    onLoadStart: null,\n    onMessage: null,\n    onMessageError: null,\n    onMouseDown: null,\n    onMouseEnter: null,\n    onMouseLeave: null,\n    onMouseMove: null,\n    onMouseOut: null,\n    onMouseOver: null,\n    onMouseUp: null,\n    onOffline: null,\n    onOnline: null,\n    onPageHide: null,\n    onPageShow: null,\n    onPaste: null,\n    onPause: null,\n    onPlay: null,\n    onPlaying: null,\n    onPopState: null,\n    onProgress: null,\n    onRateChange: null,\n    onRejectionHandled: null,\n    onReset: null,\n    onResize: null,\n    onScroll: null,\n    onScrollEnd: null,\n    onSecurityPolicyViolation: null,\n    onSeeked: null,\n    onSeeking: null,\n    onSelect: null,\n    onSlotChange: null,\n    onStalled: null,\n    onStorage: null,\n    onSubmit: null,\n    onSuspend: null,\n    onTimeUpdate: null,\n    onToggle: null,\n    onUnhandledRejection: null,\n    onUnload: null,\n    onVolumeChange: null,\n    onWaiting: null,\n    onWheel: null,\n    open: boolean,\n    optimum: number,\n    pattern: null,\n    ping: spaceSeparated,\n    placeholder: null,\n    playsInline: boolean,\n    popover: null,\n    popoverTarget: null,\n    popoverTargetAction: null,\n    poster: null,\n    preload: null,\n    readOnly: boolean,\n    referrerPolicy: null,\n    rel: spaceSeparated,\n    required: boolean,\n    reversed: boolean,\n    rows: number,\n    rowSpan: number,\n    sandbox: spaceSeparated,\n    scope: null,\n    scoped: boolean,\n    seamless: boolean,\n    selected: boolean,\n    shadowRootClonable: boolean,\n    shadowRootDelegatesFocus: boolean,\n    shadowRootMode: null,\n    shape: null,\n    size: number,\n    sizes: null,\n    slot: null,\n    span: number,\n    spellCheck: booleanish,\n    src: null,\n    srcDoc: null,\n    srcLang: null,\n    srcSet: null,\n    start: number,\n    step: null,\n    style: null,\n    tabIndex: number,\n    target: null,\n    title: null,\n    translate: null,\n    type: null,\n    typeMustMatch: boolean,\n    useMap: null,\n    value: booleanish,\n    width: number,\n    wrap: null,\n    writingSuggestions: null,\n\n    // Legacy.\n    // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n    align: null, // Several. Use CSS `text-align` instead,\n    aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n    archive: spaceSeparated, // `<object>`. List of URIs to archives\n    axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n    background: null, // `<body>`. Use CSS `background-image` instead\n    bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n    border: number, // `<table>`. Use CSS `border-width` instead,\n    borderColor: null, // `<table>`. Use CSS `border-color` instead,\n    bottomMargin: number, // `<body>`\n    cellPadding: null, // `<table>`\n    cellSpacing: null, // `<table>`\n    char: null, // Several table elements. When `align=char`, sets the character to align on\n    charOff: null, // Several table elements. When `char`, offsets the alignment\n    classId: null, // `<object>`\n    clear: null, // `<br>`. Use CSS `clear` instead\n    code: null, // `<object>`\n    codeBase: null, // `<object>`\n    codeType: null, // `<object>`\n    color: null, // `<font>` and `<hr>`. Use CSS instead\n    compact: boolean, // Lists. Use CSS to reduce space between items instead\n    declare: boolean, // `<object>`\n    event: null, // `<script>`\n    face: null, // `<font>`. Use CSS instead\n    frame: null, // `<table>`\n    frameBorder: null, // `<iframe>`. Use CSS `border` instead\n    hSpace: number, // `<img>` and `<object>`\n    leftMargin: number, // `<body>`\n    link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n    longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n    lowSrc: null, // `<img>`. Use a `<picture>`\n    marginHeight: number, // `<body>`\n    marginWidth: number, // `<body>`\n    noResize: boolean, // `<frame>`\n    noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n    noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n    noWrap: boolean, // `<td>` and `<th>`\n    object: null, // `<applet>`\n    profile: null, // `<head>`\n    prompt: null, // `<isindex>`\n    rev: null, // `<link>`\n    rightMargin: number, // `<body>`\n    rules: null, // `<table>`\n    scheme: null, // `<meta>`\n    scrolling: booleanish, // `<frame>`. Use overflow in the child context\n    standby: null, // `<object>`\n    summary: null, // `<table>`\n    text: null, // `<body>`. Use CSS `color` instead\n    topMargin: number, // `<body>`\n    valueType: null, // `<param>`\n    version: null, // `<html>`. Use a doctype.\n    vAlign: null, // Several. Use CSS `vertical-align` instead\n    vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n    vSpace: number, // `<img>` and `<object>`\n\n    // Non-standard Properties.\n    allowTransparency: null,\n    autoCorrect: null,\n    autoSave: null,\n    disablePictureInPicture: boolean,\n    disableRemotePlayback: boolean,\n    prefix: null,\n    property: null,\n    results: number,\n    security: null,\n    unselectable: null\n  },\n  space: 'html',\n  transform: caseInsensitiveTransform\n})\n","import {caseSensitiveTransform} from './util/case-sensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n  boolean,\n  commaOrSpaceSeparated,\n  commaSeparated,\n  number,\n  spaceSeparated\n} from './util/types.js'\n\nexport const svg = create({\n  attributes: {\n    accentHeight: 'accent-height',\n    alignmentBaseline: 'alignment-baseline',\n    arabicForm: 'arabic-form',\n    baselineShift: 'baseline-shift',\n    capHeight: 'cap-height',\n    className: 'class',\n    clipPath: 'clip-path',\n    clipRule: 'clip-rule',\n    colorInterpolation: 'color-interpolation',\n    colorInterpolationFilters: 'color-interpolation-filters',\n    colorProfile: 'color-profile',\n    colorRendering: 'color-rendering',\n    crossOrigin: 'crossorigin',\n    dataType: 'datatype',\n    dominantBaseline: 'dominant-baseline',\n    enableBackground: 'enable-background',\n    fillOpacity: 'fill-opacity',\n    fillRule: 'fill-rule',\n    floodColor: 'flood-color',\n    floodOpacity: 'flood-opacity',\n    fontFamily: 'font-family',\n    fontSize: 'font-size',\n    fontSizeAdjust: 'font-size-adjust',\n    fontStretch: 'font-stretch',\n    fontStyle: 'font-style',\n    fontVariant: 'font-variant',\n    fontWeight: 'font-weight',\n    glyphName: 'glyph-name',\n    glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n    glyphOrientationVertical: 'glyph-orientation-vertical',\n    hrefLang: 'hreflang',\n    horizAdvX: 'horiz-adv-x',\n    horizOriginX: 'horiz-origin-x',\n    horizOriginY: 'horiz-origin-y',\n    imageRendering: 'image-rendering',\n    letterSpacing: 'letter-spacing',\n    lightingColor: 'lighting-color',\n    markerEnd: 'marker-end',\n    markerMid: 'marker-mid',\n    markerStart: 'marker-start',\n    navDown: 'nav-down',\n    navDownLeft: 'nav-down-left',\n    navDownRight: 'nav-down-right',\n    navLeft: 'nav-left',\n    navNext: 'nav-next',\n    navPrev: 'nav-prev',\n    navRight: 'nav-right',\n    navUp: 'nav-up',\n    navUpLeft: 'nav-up-left',\n    navUpRight: 'nav-up-right',\n    onAbort: 'onabort',\n    onActivate: 'onactivate',\n    onAfterPrint: 'onafterprint',\n    onBeforePrint: 'onbeforeprint',\n    onBegin: 'onbegin',\n    onCancel: 'oncancel',\n    onCanPlay: 'oncanplay',\n    onCanPlayThrough: 'oncanplaythrough',\n    onChange: 'onchange',\n    onClick: 'onclick',\n    onClose: 'onclose',\n    onCopy: 'oncopy',\n    onCueChange: 'oncuechange',\n    onCut: 'oncut',\n    onDblClick: 'ondblclick',\n    onDrag: 'ondrag',\n    onDragEnd: 'ondragend',\n    onDragEnter: 'ondragenter',\n    onDragExit: 'ondragexit',\n    onDragLeave: 'ondragleave',\n    onDragOver: 'ondragover',\n    onDragStart: 'ondragstart',\n    onDrop: 'ondrop',\n    onDurationChange: 'ondurationchange',\n    onEmptied: 'onemptied',\n    onEnd: 'onend',\n    onEnded: 'onended',\n    onError: 'onerror',\n    onFocus: 'onfocus',\n    onFocusIn: 'onfocusin',\n    onFocusOut: 'onfocusout',\n    onHashChange: 'onhashchange',\n    onInput: 'oninput',\n    onInvalid: 'oninvalid',\n    onKeyDown: 'onkeydown',\n    onKeyPress: 'onkeypress',\n    onKeyUp: 'onkeyup',\n    onLoad: 'onload',\n    onLoadedData: 'onloadeddata',\n    onLoadedMetadata: 'onloadedmetadata',\n    onLoadStart: 'onloadstart',\n    onMessage: 'onmessage',\n    onMouseDown: 'onmousedown',\n    onMouseEnter: 'onmouseenter',\n    onMouseLeave: 'onmouseleave',\n    onMouseMove: 'onmousemove',\n    onMouseOut: 'onmouseout',\n    onMouseOver: 'onmouseover',\n    onMouseUp: 'onmouseup',\n    onMouseWheel: 'onmousewheel',\n    onOffline: 'onoffline',\n    onOnline: 'ononline',\n    onPageHide: 'onpagehide',\n    onPageShow: 'onpageshow',\n    onPaste: 'onpaste',\n    onPause: 'onpause',\n    onPlay: 'onplay',\n    onPlaying: 'onplaying',\n    onPopState: 'onpopstate',\n    onProgress: 'onprogress',\n    onRateChange: 'onratechange',\n    onRepeat: 'onrepeat',\n    onReset: 'onreset',\n    onResize: 'onresize',\n    onScroll: 'onscroll',\n    onSeeked: 'onseeked',\n    onSeeking: 'onseeking',\n    onSelect: 'onselect',\n    onShow: 'onshow',\n    onStalled: 'onstalled',\n    onStorage: 'onstorage',\n    onSubmit: 'onsubmit',\n    onSuspend: 'onsuspend',\n    onTimeUpdate: 'ontimeupdate',\n    onToggle: 'ontoggle',\n    onUnload: 'onunload',\n    onVolumeChange: 'onvolumechange',\n    onWaiting: 'onwaiting',\n    onZoom: 'onzoom',\n    overlinePosition: 'overline-position',\n    overlineThickness: 'overline-thickness',\n    paintOrder: 'paint-order',\n    panose1: 'panose-1',\n    pointerEvents: 'pointer-events',\n    referrerPolicy: 'referrerpolicy',\n    renderingIntent: 'rendering-intent',\n    shapeRendering: 'shape-rendering',\n    stopColor: 'stop-color',\n    stopOpacity: 'stop-opacity',\n    strikethroughPosition: 'strikethrough-position',\n    strikethroughThickness: 'strikethrough-thickness',\n    strokeDashArray: 'stroke-dasharray',\n    strokeDashOffset: 'stroke-dashoffset',\n    strokeLineCap: 'stroke-linecap',\n    strokeLineJoin: 'stroke-linejoin',\n    strokeMiterLimit: 'stroke-miterlimit',\n    strokeOpacity: 'stroke-opacity',\n    strokeWidth: 'stroke-width',\n    tabIndex: 'tabindex',\n    textAnchor: 'text-anchor',\n    textDecoration: 'text-decoration',\n    textRendering: 'text-rendering',\n    transformOrigin: 'transform-origin',\n    typeOf: 'typeof',\n    underlinePosition: 'underline-position',\n    underlineThickness: 'underline-thickness',\n    unicodeBidi: 'unicode-bidi',\n    unicodeRange: 'unicode-range',\n    unitsPerEm: 'units-per-em',\n    vAlphabetic: 'v-alphabetic',\n    vHanging: 'v-hanging',\n    vIdeographic: 'v-ideographic',\n    vMathematical: 'v-mathematical',\n    vectorEffect: 'vector-effect',\n    vertAdvY: 'vert-adv-y',\n    vertOriginX: 'vert-origin-x',\n    vertOriginY: 'vert-origin-y',\n    wordSpacing: 'word-spacing',\n    writingMode: 'writing-mode',\n    xHeight: 'x-height',\n    // These were camelcased in Tiny. Now lowercased in SVG 2\n    playbackOrder: 'playbackorder',\n    timelineBegin: 'timelinebegin'\n  },\n  properties: {\n    about: commaOrSpaceSeparated,\n    accentHeight: number,\n    accumulate: null,\n    additive: null,\n    alignmentBaseline: null,\n    alphabetic: number,\n    amplitude: number,\n    arabicForm: null,\n    ascent: number,\n    attributeName: null,\n    attributeType: null,\n    azimuth: number,\n    bandwidth: null,\n    baselineShift: null,\n    baseFrequency: null,\n    baseProfile: null,\n    bbox: null,\n    begin: null,\n    bias: number,\n    by: null,\n    calcMode: null,\n    capHeight: number,\n    className: spaceSeparated,\n    clip: null,\n    clipPath: null,\n    clipPathUnits: null,\n    clipRule: null,\n    color: null,\n    colorInterpolation: null,\n    colorInterpolationFilters: null,\n    colorProfile: null,\n    colorRendering: null,\n    content: null,\n    contentScriptType: null,\n    contentStyleType: null,\n    crossOrigin: null,\n    cursor: null,\n    cx: null,\n    cy: null,\n    d: null,\n    dataType: null,\n    defaultAction: null,\n    descent: number,\n    diffuseConstant: number,\n    direction: null,\n    display: null,\n    dur: null,\n    divisor: number,\n    dominantBaseline: null,\n    download: boolean,\n    dx: null,\n    dy: null,\n    edgeMode: null,\n    editable: null,\n    elevation: number,\n    enableBackground: null,\n    end: null,\n    event: null,\n    exponent: number,\n    externalResourcesRequired: null,\n    fill: null,\n    fillOpacity: number,\n    fillRule: null,\n    filter: null,\n    filterRes: null,\n    filterUnits: null,\n    floodColor: null,\n    floodOpacity: null,\n    focusable: null,\n    focusHighlight: null,\n    fontFamily: null,\n    fontSize: null,\n    fontSizeAdjust: null,\n    fontStretch: null,\n    fontStyle: null,\n    fontVariant: null,\n    fontWeight: null,\n    format: null,\n    fr: null,\n    from: null,\n    fx: null,\n    fy: null,\n    g1: commaSeparated,\n    g2: commaSeparated,\n    glyphName: commaSeparated,\n    glyphOrientationHorizontal: null,\n    glyphOrientationVertical: null,\n    glyphRef: null,\n    gradientTransform: null,\n    gradientUnits: null,\n    handler: null,\n    hanging: number,\n    hatchContentUnits: null,\n    hatchUnits: null,\n    height: null,\n    href: null,\n    hrefLang: null,\n    horizAdvX: number,\n    horizOriginX: number,\n    horizOriginY: number,\n    id: null,\n    ideographic: number,\n    imageRendering: null,\n    initialVisibility: null,\n    in: null,\n    in2: null,\n    intercept: number,\n    k: number,\n    k1: number,\n    k2: number,\n    k3: number,\n    k4: number,\n    kernelMatrix: commaOrSpaceSeparated,\n    kernelUnitLength: null,\n    keyPoints: null, // SEMI_COLON_SEPARATED\n    keySplines: null, // SEMI_COLON_SEPARATED\n    keyTimes: null, // SEMI_COLON_SEPARATED\n    kerning: null,\n    lang: null,\n    lengthAdjust: null,\n    letterSpacing: null,\n    lightingColor: null,\n    limitingConeAngle: number,\n    local: null,\n    markerEnd: null,\n    markerMid: null,\n    markerStart: null,\n    markerHeight: null,\n    markerUnits: null,\n    markerWidth: null,\n    mask: null,\n    maskContentUnits: null,\n    maskUnits: null,\n    mathematical: null,\n    max: null,\n    media: null,\n    mediaCharacterEncoding: null,\n    mediaContentEncodings: null,\n    mediaSize: number,\n    mediaTime: null,\n    method: null,\n    min: null,\n    mode: null,\n    name: null,\n    navDown: null,\n    navDownLeft: null,\n    navDownRight: null,\n    navLeft: null,\n    navNext: null,\n    navPrev: null,\n    navRight: null,\n    navUp: null,\n    navUpLeft: null,\n    navUpRight: null,\n    numOctaves: null,\n    observer: null,\n    offset: null,\n    onAbort: null,\n    onActivate: null,\n    onAfterPrint: null,\n    onBeforePrint: null,\n    onBegin: null,\n    onCancel: null,\n    onCanPlay: null,\n    onCanPlayThrough: null,\n    onChange: null,\n    onClick: null,\n    onClose: null,\n    onCopy: null,\n    onCueChange: null,\n    onCut: null,\n    onDblClick: null,\n    onDrag: null,\n    onDragEnd: null,\n    onDragEnter: null,\n    onDragExit: null,\n    onDragLeave: null,\n    onDragOver: null,\n    onDragStart: null,\n    onDrop: null,\n    onDurationChange: null,\n    onEmptied: null,\n    onEnd: null,\n    onEnded: null,\n    onError: null,\n    onFocus: null,\n    onFocusIn: null,\n    onFocusOut: null,\n    onHashChange: null,\n    onInput: null,\n    onInvalid: null,\n    onKeyDown: null,\n    onKeyPress: null,\n    onKeyUp: null,\n    onLoad: null,\n    onLoadedData: null,\n    onLoadedMetadata: null,\n    onLoadStart: null,\n    onMessage: null,\n    onMouseDown: null,\n    onMouseEnter: null,\n    onMouseLeave: null,\n    onMouseMove: null,\n    onMouseOut: null,\n    onMouseOver: null,\n    onMouseUp: null,\n    onMouseWheel: null,\n    onOffline: null,\n    onOnline: null,\n    onPageHide: null,\n    onPageShow: null,\n    onPaste: null,\n    onPause: null,\n    onPlay: null,\n    onPlaying: null,\n    onPopState: null,\n    onProgress: null,\n    onRateChange: null,\n    onRepeat: null,\n    onReset: null,\n    onResize: null,\n    onScroll: null,\n    onSeeked: null,\n    onSeeking: null,\n    onSelect: null,\n    onShow: null,\n    onStalled: null,\n    onStorage: null,\n    onSubmit: null,\n    onSuspend: null,\n    onTimeUpdate: null,\n    onToggle: null,\n    onUnload: null,\n    onVolumeChange: null,\n    onWaiting: null,\n    onZoom: null,\n    opacity: null,\n    operator: null,\n    order: null,\n    orient: null,\n    orientation: null,\n    origin: null,\n    overflow: null,\n    overlay: null,\n    overlinePosition: number,\n    overlineThickness: number,\n    paintOrder: null,\n    panose1: null,\n    path: null,\n    pathLength: number,\n    patternContentUnits: null,\n    patternTransform: null,\n    patternUnits: null,\n    phase: null,\n    ping: spaceSeparated,\n    pitch: null,\n    playbackOrder: null,\n    pointerEvents: null,\n    points: null,\n    pointsAtX: number,\n    pointsAtY: number,\n    pointsAtZ: number,\n    preserveAlpha: null,\n    preserveAspectRatio: null,\n    primitiveUnits: null,\n    propagate: null,\n    property: commaOrSpaceSeparated,\n    r: null,\n    radius: null,\n    referrerPolicy: null,\n    refX: null,\n    refY: null,\n    rel: commaOrSpaceSeparated,\n    rev: commaOrSpaceSeparated,\n    renderingIntent: null,\n    repeatCount: null,\n    repeatDur: null,\n    requiredExtensions: commaOrSpaceSeparated,\n    requiredFeatures: commaOrSpaceSeparated,\n    requiredFonts: commaOrSpaceSeparated,\n    requiredFormats: commaOrSpaceSeparated,\n    resource: null,\n    restart: null,\n    result: null,\n    rotate: null,\n    rx: null,\n    ry: null,\n    scale: null,\n    seed: null,\n    shapeRendering: null,\n    side: null,\n    slope: null,\n    snapshotTime: null,\n    specularConstant: number,\n    specularExponent: number,\n    spreadMethod: null,\n    spacing: null,\n    startOffset: null,\n    stdDeviation: null,\n    stemh: null,\n    stemv: null,\n    stitchTiles: null,\n    stopColor: null,\n    stopOpacity: null,\n    strikethroughPosition: number,\n    strikethroughThickness: number,\n    string: null,\n    stroke: null,\n    strokeDashArray: commaOrSpaceSeparated,\n    strokeDashOffset: null,\n    strokeLineCap: null,\n    strokeLineJoin: null,\n    strokeMiterLimit: number,\n    strokeOpacity: number,\n    strokeWidth: null,\n    style: null,\n    surfaceScale: number,\n    syncBehavior: null,\n    syncBehaviorDefault: null,\n    syncMaster: null,\n    syncTolerance: null,\n    syncToleranceDefault: null,\n    systemLanguage: commaOrSpaceSeparated,\n    tabIndex: number,\n    tableValues: null,\n    target: null,\n    targetX: number,\n    targetY: number,\n    textAnchor: null,\n    textDecoration: null,\n    textRendering: null,\n    textLength: null,\n    timelineBegin: null,\n    title: null,\n    transformBehavior: null,\n    type: null,\n    typeOf: commaOrSpaceSeparated,\n    to: null,\n    transform: null,\n    transformOrigin: null,\n    u1: null,\n    u2: null,\n    underlinePosition: number,\n    underlineThickness: number,\n    unicode: null,\n    unicodeBidi: null,\n    unicodeRange: null,\n    unitsPerEm: number,\n    values: null,\n    vAlphabetic: number,\n    vMathematical: number,\n    vectorEffect: null,\n    vHanging: number,\n    vIdeographic: number,\n    version: null,\n    vertAdvY: number,\n    vertOriginX: number,\n    vertOriginY: number,\n    viewBox: null,\n    viewTarget: null,\n    visibility: null,\n    width: null,\n    widths: null,\n    wordSpacing: null,\n    writingMode: null,\n    x: null,\n    x1: null,\n    x2: null,\n    xChannelSelector: null,\n    xHeight: number,\n    y: null,\n    y1: null,\n    y2: null,\n    yChannelSelector: null,\n    z: null,\n    zoomAndPan: null\n  },\n  space: 'svg',\n  transform: caseSensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xlink = create({\n  properties: {\n    xLinkActuate: null,\n    xLinkArcRole: null,\n    xLinkHref: null,\n    xLinkRole: null,\n    xLinkShow: null,\n    xLinkTitle: null,\n    xLinkType: null\n  },\n  space: 'xlink',\n  transform(_, property) {\n    return 'xlink:' + property.slice(5).toLowerCase()\n  }\n})\n","import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n  attributes: {xmlnsxlink: 'xmlns:xlink'},\n  properties: {xmlnsXLink: null, xmlns: null},\n  space: 'xmlns',\n  transform: caseInsensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xml = create({\n  properties: {xmlBase: null, xmlLang: null, xmlSpace: null},\n  space: 'xml',\n  transform(_, property) {\n    return 'xml:' + property.slice(3).toLowerCase()\n  }\n})\n","/**\n * Special cases for React (`Record<string, string>`).\n *\n * `hast` is close to `React` but differs in a couple of cases.\n * To get a React property from a hast property,\n * check if it is in `hastToReact`.\n * If it is, use the corresponding value;\n * otherwise, use the hast property.\n *\n * @type {Record<string, string>}\n */\nexport const hastToReact = {\n  classId: 'classID',\n  dataType: 'datatype',\n  itemId: 'itemID',\n  strokeDashArray: 'strokeDasharray',\n  strokeDashOffset: 'strokeDashoffset',\n  strokeLineCap: 'strokeLinecap',\n  strokeLineJoin: 'strokeLinejoin',\n  strokeMiterLimit: 'strokeMiterlimit',\n  typeOf: 'typeof',\n  xLinkActuate: 'xlinkActuate',\n  xLinkArcRole: 'xlinkArcrole',\n  xLinkHref: 'xlinkHref',\n  xLinkRole: 'xlinkRole',\n  xLinkShow: 'xlinkShow',\n  xLinkTitle: 'xlinkTitle',\n  xLinkType: 'xlinkType',\n  xmlnsXLink: 'xmlnsXlink'\n}\n","/**\n * @import {Schema} from 'property-information'\n */\n\nimport {DefinedInfo} from './util/defined-info.js'\nimport {Info} from './util/info.js'\nimport {normalize} from './normalize.js'\n\nconst cap = /[A-Z]/g\nconst dash = /-[a-z]/g\nconst valid = /^data[-\\w.:]+$/i\n\n/**\n * Look up info on a property.\n *\n * In most cases the given `schema` contains info on the property.\n * All standard,\n * most legacy,\n * and some non-standard properties are supported.\n * For these cases,\n * the returned `Info` has hints about the value of the property.\n *\n * `name` can also be a valid data attribute or property,\n * in which case an `Info` object with the correctly cased `attribute` and\n * `property` is returned.\n *\n * `name` can be an unknown attribute,\n * in which case an `Info` object with `attribute` and `property` set to the\n * given name is returned.\n * It is not recommended to provide unsupported legacy or recently specced\n * properties.\n *\n *\n * @param {Schema} schema\n *   Schema;\n *   either the `html` or `svg` export.\n * @param {string} value\n *   An attribute-like or property-like name;\n *   it will be passed through `normalize` to hopefully find the correct info.\n * @returns {Info}\n *   Info.\n */\nexport function find(schema, value) {\n  const normal = normalize(value)\n  let property = value\n  let Type = Info\n\n  if (normal in schema.normal) {\n    return schema.property[schema.normal[normal]]\n  }\n\n  if (normal.length > 4 && normal.slice(0, 4) === 'data' && valid.test(value)) {\n    // Attribute or property.\n    if (value.charAt(4) === '-') {\n      // Turn it into a property.\n      const rest = value.slice(5).replace(dash, camelcase)\n      property = 'data' + rest.charAt(0).toUpperCase() + rest.slice(1)\n    } else {\n      // Turn it into an attribute.\n      const rest = value.slice(4)\n\n      if (!dash.test(rest)) {\n        let dashes = rest.replace(cap, kebab)\n\n        if (dashes.charAt(0) !== '-') {\n          dashes = '-' + dashes\n        }\n\n        value = 'data' + dashes\n      }\n    }\n\n    Type = DefinedInfo\n  }\n\n  return new Type(property, value)\n}\n\n/**\n * @param {string} $0\n *   Value.\n * @returns {string}\n *   Kebab.\n */\nfunction kebab($0) {\n  return '-' + $0.toLowerCase()\n}\n\n/**\n * @param {string} $0\n *   Value.\n * @returns {string}\n *   Camel.\n */\nfunction camelcase($0) {\n  return $0.charAt(1).toUpperCase()\n}\n","// Note: types exposed from `index.d.ts`.\nimport {merge} from './lib/util/merge.js'\nimport {aria} from './lib/aria.js'\nimport {html as htmlBase} from './lib/html.js'\nimport {svg as svgBase} from './lib/svg.js'\nimport {xlink} from './lib/xlink.js'\nimport {xmlns} from './lib/xmlns.js'\nimport {xml} from './lib/xml.js'\n\nexport {hastToReact} from './lib/hast-to-react.js'\n\nexport const html = merge([aria, htmlBase, xlink, xmlns, xml], 'html')\n\nexport {find} from './lib/find.js'\nexport {normalize} from './lib/normalize.js'\n\nexport const svg = merge([aria, svgBase, xlink, xmlns, xml], 'svg')\n","/**\n * Parse space-separated tokens to an array of strings.\n *\n * @param {string} value\n *   Space-separated tokens.\n * @returns {Array<string>}\n *   List of tokens.\n */\nexport function parse(value) {\n  const input = String(value || '').trim()\n  return input ? input.split(/[ \\t\\n\\r\\f]+/g) : []\n}\n\n/**\n * Serialize an array of strings as space separated-tokens.\n *\n * @param {Array<string|number>} values\n *   List of tokens.\n * @returns {string}\n *   Space-separated tokens.\n */\nexport function stringify(values) {\n  return values.join(' ').trim()\n}\n","// http://www.w3.org/TR/CSS21/grammar.html\n// https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027\nvar COMMENT_REGEX = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\n\nvar NEWLINE_REGEX = /\\n/g;\nvar WHITESPACE_REGEX = /^\\s*/;\n\n// declaration\nvar PROPERTY_REGEX = /^(\\*?[-#/*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/;\nvar COLON_REGEX = /^:\\s*/;\nvar VALUE_REGEX = /^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};])+)/;\nvar SEMICOLON_REGEX = /^[;\\s]*/;\n\n// https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\nvar TRIM_REGEX = /^\\s+|\\s+$/g;\n\n// strings\nvar NEWLINE = '\\n';\nvar FORWARD_SLASH = '/';\nvar ASTERISK = '*';\nvar EMPTY_STRING = '';\n\n// types\nvar TYPE_COMMENT = 'comment';\nvar TYPE_DECLARATION = 'declaration';\n\n/**\n * @param {String} style\n * @param {Object} [options]\n * @return {Object[]}\n * @throws {TypeError}\n * @throws {Error}\n */\nmodule.exports = function (style, options) {\n  if (typeof style !== 'string') {\n    throw new TypeError('First argument must be a string');\n  }\n\n  if (!style) return [];\n\n  options = options || {};\n\n  /**\n   * Positional.\n   */\n  var lineno = 1;\n  var column = 1;\n\n  /**\n   * Update lineno and column based on `str`.\n   *\n   * @param {String} str\n   */\n  function updatePosition(str) {\n    var lines = str.match(NEWLINE_REGEX);\n    if (lines) lineno += lines.length;\n    var i = str.lastIndexOf(NEWLINE);\n    column = ~i ? str.length - i : column + str.length;\n  }\n\n  /**\n   * Mark position and patch `node.position`.\n   *\n   * @return {Function}\n   */\n  function position() {\n    var start = { line: lineno, column: column };\n    return function (node) {\n      node.position = new Position(start);\n      whitespace();\n      return node;\n    };\n  }\n\n  /**\n   * Store position information for a node.\n   *\n   * @constructor\n   * @property {Object} start\n   * @property {Object} end\n   * @property {undefined|String} source\n   */\n  function Position(start) {\n    this.start = start;\n    this.end = { line: lineno, column: column };\n    this.source = options.source;\n  }\n\n  /**\n   * Non-enumerable source string.\n   */\n  Position.prototype.content = style;\n\n  var errorsList = [];\n\n  /**\n   * Error `msg`.\n   *\n   * @param {String} msg\n   * @throws {Error}\n   */\n  function error(msg) {\n    var err = new Error(\n      options.source + ':' + lineno + ':' + column + ': ' + msg\n    );\n    err.reason = msg;\n    err.filename = options.source;\n    err.line = lineno;\n    err.column = column;\n    err.source = style;\n\n    if (options.silent) {\n      errorsList.push(err);\n    } else {\n      throw err;\n    }\n  }\n\n  /**\n   * Match `re` and return captures.\n   *\n   * @param {RegExp} re\n   * @return {undefined|Array}\n   */\n  function match(re) {\n    var m = re.exec(style);\n    if (!m) return;\n    var str = m[0];\n    updatePosition(str);\n    style = style.slice(str.length);\n    return m;\n  }\n\n  /**\n   * Parse whitespace.\n   */\n  function whitespace() {\n    match(WHITESPACE_REGEX);\n  }\n\n  /**\n   * Parse comments.\n   *\n   * @param {Object[]} [rules]\n   * @return {Object[]}\n   */\n  function comments(rules) {\n    var c;\n    rules = rules || [];\n    while ((c = comment())) {\n      if (c !== false) {\n        rules.push(c);\n      }\n    }\n    return rules;\n  }\n\n  /**\n   * Parse comment.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function comment() {\n    var pos = position();\n    if (FORWARD_SLASH != style.charAt(0) || ASTERISK != style.charAt(1)) return;\n\n    var i = 2;\n    while (\n      EMPTY_STRING != style.charAt(i) &&\n      (ASTERISK != style.charAt(i) || FORWARD_SLASH != style.charAt(i + 1))\n    ) {\n      ++i;\n    }\n    i += 2;\n\n    if (EMPTY_STRING === style.charAt(i - 1)) {\n      return error('End of comment missing');\n    }\n\n    var str = style.slice(2, i - 2);\n    column += 2;\n    updatePosition(str);\n    style = style.slice(i);\n    column += 2;\n\n    return pos({\n      type: TYPE_COMMENT,\n      comment: str\n    });\n  }\n\n  /**\n   * Parse declaration.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function declaration() {\n    var pos = position();\n\n    // prop\n    var prop = match(PROPERTY_REGEX);\n    if (!prop) return;\n    comment();\n\n    // :\n    if (!match(COLON_REGEX)) return error(\"property missing ':'\");\n\n    // val\n    var val = match(VALUE_REGEX);\n\n    var ret = pos({\n      type: TYPE_DECLARATION,\n      property: trim(prop[0].replace(COMMENT_REGEX, EMPTY_STRING)),\n      value: val\n        ? trim(val[0].replace(COMMENT_REGEX, EMPTY_STRING))\n        : EMPTY_STRING\n    });\n\n    // ;\n    match(SEMICOLON_REGEX);\n\n    return ret;\n  }\n\n  /**\n   * Parse declarations.\n   *\n   * @return {Object[]}\n   */\n  function declarations() {\n    var decls = [];\n\n    comments(decls);\n\n    // declarations\n    var decl;\n    while ((decl = declaration())) {\n      if (decl !== false) {\n        decls.push(decl);\n        comments(decls);\n      }\n    }\n\n    return decls;\n  }\n\n  whitespace();\n  return declarations();\n};\n\n/**\n * Trim `str`.\n *\n * @param {String} str\n * @return {String}\n */\nfunction trim(str) {\n  return str ? str.replace(TRIM_REGEX, EMPTY_STRING) : EMPTY_STRING;\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = StyleToObject;\nvar inline_style_parser_1 = __importDefault(require(\"inline-style-parser\"));\n/**\n * Parses inline style to object.\n *\n * @param style - Inline style.\n * @param iterator - Iterator.\n * @returns - Style object or null.\n *\n * @example Parsing inline style to object:\n *\n * ```js\n * import parse from 'style-to-object';\n * parse('line-height: 42;'); // { 'line-height': '42' }\n * ```\n */\nfunction StyleToObject(style, iterator) {\n    var styleObject = null;\n    if (!style || typeof style !== 'string') {\n        return styleObject;\n    }\n    var declarations = (0, inline_style_parser_1.default)(style);\n    var hasIterator = typeof iterator === 'function';\n    declarations.forEach(function (declaration) {\n        if (declaration.type !== 'declaration') {\n            return;\n        }\n        var property = declaration.property, value = declaration.value;\n        if (hasIterator) {\n            iterator(property, value, declaration);\n        }\n        else if (value) {\n            styleObject = styleObject || {};\n            styleObject[property] = value;\n        }\n    });\n    return styleObject;\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.camelCase = void 0;\nvar CUSTOM_PROPERTY_REGEX = /^--[a-zA-Z0-9_-]+$/;\nvar HYPHEN_REGEX = /-([a-z])/g;\nvar NO_HYPHEN_REGEX = /^[^-]+$/;\nvar VENDOR_PREFIX_REGEX = /^-(webkit|moz|ms|o|khtml)-/;\nvar MS_VENDOR_PREFIX_REGEX = /^-(ms)-/;\n/**\n * Checks whether to skip camelCase.\n */\nvar skipCamelCase = function (property) {\n    return !property ||\n        NO_HYPHEN_REGEX.test(property) ||\n        CUSTOM_PROPERTY_REGEX.test(property);\n};\n/**\n * Replacer that capitalizes first character.\n */\nvar capitalize = function (match, character) {\n    return character.toUpperCase();\n};\n/**\n * Replacer that removes beginning hyphen of vendor prefix property.\n */\nvar trimHyphen = function (match, prefix) { return \"\".concat(prefix, \"-\"); };\n/**\n * CamelCases a CSS property.\n */\nvar camelCase = function (property, options) {\n    if (options === void 0) { options = {}; }\n    if (skipCamelCase(property)) {\n        return property;\n    }\n    property = property.toLowerCase();\n    if (options.reactCompat) {\n        // `-ms` vendor prefix should not be capitalized\n        property = property.replace(MS_VENDOR_PREFIX_REGEX, trimHyphen);\n    }\n    else {\n        // for non-React, remove first hyphen so vendor prefix is not capitalized\n        property = property.replace(VENDOR_PREFIX_REGEX, trimHyphen);\n    }\n    return property.replace(HYPHEN_REGEX, capitalize);\n};\nexports.camelCase = camelCase;\n//# sourceMappingURL=utilities.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nvar style_to_object_1 = __importDefault(require(\"style-to-object\"));\nvar utilities_1 = require(\"./utilities\");\n/**\n * Parses CSS inline style to JavaScript object (camelCased).\n */\nfunction StyleToJS(style, options) {\n    var output = {};\n    if (!style || typeof style !== 'string') {\n        return output;\n    }\n    (0, style_to_object_1.default)(style, function (property, value) {\n        // skip CSS comment\n        if (property && value) {\n            output[(0, utilities_1.camelCase)(property, options)] = value;\n        }\n    });\n    return output;\n}\nStyleToJS.default = StyleToJS;\nmodule.exports = StyleToJS;\n//# sourceMappingURL=index.js.map","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Get the ending point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointEnd = point('end')\n\n/**\n * Get the starting point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointStart = point('start')\n\n/**\n * Get the positional info of `node`.\n *\n * @param {'end' | 'start'} type\n *   Side.\n * @returns\n *   Getter.\n */\nfunction point(type) {\n  return point\n\n  /**\n   * Get the point info of `node` at a bound side.\n   *\n   * @param {Node | NodeLike | null | undefined} [node]\n   * @returns {Point | undefined}\n   */\n  function point(node) {\n    const point = (node && node.position && node.position[type]) || {}\n\n    if (\n      typeof point.line === 'number' &&\n      point.line > 0 &&\n      typeof point.column === 'number' &&\n      point.column > 0\n    ) {\n      return {\n        line: point.line,\n        column: point.column,\n        offset:\n          typeof point.offset === 'number' && point.offset > -1\n            ? point.offset\n            : undefined\n      }\n    }\n  }\n}\n\n/**\n * Get the positional info of `node`.\n *\n * @param {Node | NodeLike | null | undefined} [node]\n *   Node.\n * @returns {Position | undefined}\n *   Position.\n */\nexport function position(node) {\n  const start = pointStart(node)\n  const end = pointEnd(node)\n\n  if (start && end) {\n    return {start, end}\n  }\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef Options\n *   Configuration.\n * @property {Array<Node> | null | undefined} [ancestors]\n *   Stack of (inclusive) ancestor nodes surrounding the message (optional).\n * @property {Error | null | undefined} [cause]\n *   Original error cause of the message (optional).\n * @property {Point | Position | null | undefined} [place]\n *   Place of message (optional).\n * @property {string | null | undefined} [ruleId]\n *   Category of message (optional, example: `'my-rule'`).\n * @property {string | null | undefined} [source]\n *   Namespace of who sent the message (optional, example: `'my-package'`).\n */\n\nimport {stringifyPosition} from 'unist-util-stringify-position'\n\n/**\n * Message.\n */\nexport class VFileMessage extends Error {\n  /**\n   * Create a message for `reason`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Options | null | undefined} [options]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | Options | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns\n   *   Instance of `VFileMessage`.\n   */\n  // eslint-disable-next-line complexity\n  constructor(causeOrReason, optionsOrParentOrPlace, origin) {\n    super()\n\n    if (typeof optionsOrParentOrPlace === 'string') {\n      origin = optionsOrParentOrPlace\n      optionsOrParentOrPlace = undefined\n    }\n\n    /** @type {string} */\n    let reason = ''\n    /** @type {Options} */\n    let options = {}\n    let legacyCause = false\n\n    if (optionsOrParentOrPlace) {\n      // Point.\n      if (\n        'line' in optionsOrParentOrPlace &&\n        'column' in optionsOrParentOrPlace\n      ) {\n        options = {place: optionsOrParentOrPlace}\n      }\n      // Position.\n      else if (\n        'start' in optionsOrParentOrPlace &&\n        'end' in optionsOrParentOrPlace\n      ) {\n        options = {place: optionsOrParentOrPlace}\n      }\n      // Node.\n      else if ('type' in optionsOrParentOrPlace) {\n        options = {\n          ancestors: [optionsOrParentOrPlace],\n          place: optionsOrParentOrPlace.position\n        }\n      }\n      // Options.\n      else {\n        options = {...optionsOrParentOrPlace}\n      }\n    }\n\n    if (typeof causeOrReason === 'string') {\n      reason = causeOrReason\n    }\n    // Error.\n    else if (!options.cause && causeOrReason) {\n      legacyCause = true\n      reason = causeOrReason.message\n      options.cause = causeOrReason\n    }\n\n    if (!options.ruleId && !options.source && typeof origin === 'string') {\n      const index = origin.indexOf(':')\n\n      if (index === -1) {\n        options.ruleId = origin\n      } else {\n        options.source = origin.slice(0, index)\n        options.ruleId = origin.slice(index + 1)\n      }\n    }\n\n    if (!options.place && options.ancestors && options.ancestors) {\n      const parent = options.ancestors[options.ancestors.length - 1]\n\n      if (parent) {\n        options.place = parent.position\n      }\n    }\n\n    const start =\n      options.place && 'start' in options.place\n        ? options.place.start\n        : options.place\n\n    /* eslint-disable no-unused-expressions */\n    /**\n     * Stack of ancestor nodes surrounding the message.\n     *\n     * @type {Array<Node> | undefined}\n     */\n    this.ancestors = options.ancestors || undefined\n\n    /**\n     * Original error cause of the message.\n     *\n     * @type {Error | undefined}\n     */\n    this.cause = options.cause || undefined\n\n    /**\n     * Starting column of message.\n     *\n     * @type {number | undefined}\n     */\n    this.column = start ? start.column : undefined\n\n    /**\n     * State of problem.\n     *\n     * * `true` — error, file not usable\n     * * `false` — warning, change may be needed\n     * * `undefined` — change likely not needed\n     *\n     * @type {boolean | null | undefined}\n     */\n    this.fatal = undefined\n\n    /**\n     * Path of a file (used throughout the `VFile` ecosystem).\n     *\n     * @type {string | undefined}\n     */\n    this.file\n\n    // Field from `Error`.\n    /**\n     * Reason for message.\n     *\n     * @type {string}\n     */\n    this.message = reason\n\n    /**\n     * Starting line of error.\n     *\n     * @type {number | undefined}\n     */\n    this.line = start ? start.line : undefined\n\n    // Field from `Error`.\n    /**\n     * Serialized positional info of message.\n     *\n     * On normal errors, this would be something like `ParseError`, buit in\n     * `VFile` messages we use this space to show where an error happened.\n     */\n    this.name = stringifyPosition(options.place) || '1:1'\n\n    /**\n     * Place of message.\n     *\n     * @type {Point | Position | undefined}\n     */\n    this.place = options.place || undefined\n\n    /**\n     * Reason for message, should use markdown.\n     *\n     * @type {string}\n     */\n    this.reason = this.message\n\n    /**\n     * Category of message (example: `'my-rule'`).\n     *\n     * @type {string | undefined}\n     */\n    this.ruleId = options.ruleId || undefined\n\n    /**\n     * Namespace of message (example: `'my-package'`).\n     *\n     * @type {string | undefined}\n     */\n    this.source = options.source || undefined\n\n    // Field from `Error`.\n    /**\n     * Stack of message.\n     *\n     * This is used by normal errors to show where something happened in\n     * programming code, irrelevant for `VFile` messages,\n     *\n     * @type {string}\n     */\n    this.stack =\n      legacyCause && options.cause && typeof options.cause.stack === 'string'\n        ? options.cause.stack\n        : ''\n\n    // The following fields are “well known”.\n    // Not standard.\n    // Feel free to add other non-standard fields to your messages.\n\n    /**\n     * Specify the source value that’s being reported, which is deemed\n     * incorrect.\n     *\n     * @type {string | undefined}\n     */\n    this.actual\n\n    /**\n     * Suggest acceptable values that can be used instead of `actual`.\n     *\n     * @type {Array<string> | undefined}\n     */\n    this.expected\n\n    /**\n     * Long form description of the message (you should use markdown).\n     *\n     * @type {string | undefined}\n     */\n    this.note\n\n    /**\n     * Link to docs for the message.\n     *\n     * > 👉 **Note**: this must be an absolute URL that can be passed as `x`\n     * > to `new URL(x)`.\n     *\n     * @type {string | undefined}\n     */\n    this.url\n    /* eslint-enable no-unused-expressions */\n  }\n}\n\nVFileMessage.prototype.file = ''\nVFileMessage.prototype.name = ''\nVFileMessage.prototype.reason = ''\nVFileMessage.prototype.message = ''\nVFileMessage.prototype.stack = ''\nVFileMessage.prototype.column = undefined\nVFileMessage.prototype.line = undefined\nVFileMessage.prototype.ancestors = undefined\nVFileMessage.prototype.cause = undefined\nVFileMessage.prototype.fatal = undefined\nVFileMessage.prototype.place = undefined\nVFileMessage.prototype.ruleId = undefined\nVFileMessage.prototype.source = undefined\n","/**\n * @import {Identifier, Literal, MemberExpression} from 'estree'\n * @import {Jsx, JsxDev, Options, Props} from 'hast-util-to-jsx-runtime'\n * @import {Element, Nodes, Parents, Root, Text} from 'hast'\n * @import {MdxFlowExpressionHast, MdxTextExpressionHast} from 'mdast-util-mdx-expression'\n * @import {MdxJsxFlowElementHast, MdxJsxTextElementHast} from 'mdast-util-mdx-jsx'\n * @import {MdxjsEsmHast} from 'mdast-util-mdxjs-esm'\n * @import {Position} from 'unist'\n * @import {Child, Create, Field, JsxElement, State, Style} from './types.js'\n */\n\nimport {stringify as commas} from 'comma-separated-tokens'\nimport {ok as assert} from 'devlop'\nimport {name as isIdentifierName} from 'estree-util-is-identifier-name'\nimport {whitespace} from 'hast-util-whitespace'\nimport {find, hastToReact, html, svg} from 'property-information'\nimport {stringify as spaces} from 'space-separated-tokens'\nimport styleToJs from 'style-to-js'\nimport {pointStart} from 'unist-util-position'\nimport {VFileMessage} from 'vfile-message'\n\n// To do: next major: `Object.hasOwn`.\nconst own = {}.hasOwnProperty\n\n/** @type {Map<string, number>} */\nconst emptyMap = new Map()\n\nconst cap = /[A-Z]/g\n\n// `react-dom` triggers a warning for *any* white space in tables.\n// To follow GFM, `mdast-util-to-hast` injects line endings between elements.\n// Other tools might do so too, but they don’t do here, so we remove all of\n// that.\n\n// See: <https://github.com/facebook/react/pull/7081>.\n// See: <https://github.com/facebook/react/pull/7515>.\n// See: <https://github.com/remarkjs/remark-react/issues/64>.\n// See: <https://github.com/rehypejs/rehype-react/pull/29>.\n// See: <https://github.com/rehypejs/rehype-react/pull/32>.\n// See: <https://github.com/rehypejs/rehype-react/pull/45>.\nconst tableElements = new Set(['table', 'tbody', 'thead', 'tfoot', 'tr'])\n\nconst tableCellElement = new Set(['td', 'th'])\n\nconst docs = 'https://github.com/syntax-tree/hast-util-to-jsx-runtime'\n\n/**\n * Transform a hast tree to preact, react, solid, svelte, vue, etc.,\n * with an automatic JSX runtime.\n *\n * @param {Nodes} tree\n *   Tree to transform.\n * @param {Options} options\n *   Configuration (required).\n * @returns {JsxElement}\n *   JSX element.\n */\n\nexport function toJsxRuntime(tree, options) {\n  if (!options || options.Fragment === undefined) {\n    throw new TypeError('Expected `Fragment` in options')\n  }\n\n  const filePath = options.filePath || undefined\n  /** @type {Create} */\n  let create\n\n  if (options.development) {\n    if (typeof options.jsxDEV !== 'function') {\n      throw new TypeError(\n        'Expected `jsxDEV` in options when `development: true`'\n      )\n    }\n\n    create = developmentCreate(filePath, options.jsxDEV)\n  } else {\n    if (typeof options.jsx !== 'function') {\n      throw new TypeError('Expected `jsx` in production options')\n    }\n\n    if (typeof options.jsxs !== 'function') {\n      throw new TypeError('Expected `jsxs` in production options')\n    }\n\n    create = productionCreate(filePath, options.jsx, options.jsxs)\n  }\n\n  /** @type {State} */\n  const state = {\n    Fragment: options.Fragment,\n    ancestors: [],\n    components: options.components || {},\n    create,\n    elementAttributeNameCase: options.elementAttributeNameCase || 'react',\n    evaluater: options.createEvaluater ? options.createEvaluater() : undefined,\n    filePath,\n    ignoreInvalidStyle: options.ignoreInvalidStyle || false,\n    passKeys: options.passKeys !== false,\n    passNode: options.passNode || false,\n    schema: options.space === 'svg' ? svg : html,\n    stylePropertyNameCase: options.stylePropertyNameCase || 'dom',\n    tableCellAlignToStyle: options.tableCellAlignToStyle !== false\n  }\n\n  const result = one(state, tree, undefined)\n\n  // JSX element.\n  if (result && typeof result !== 'string') {\n    return result\n  }\n\n  // Text node or something that turned into nothing.\n  return state.create(\n    tree,\n    state.Fragment,\n    {children: result || undefined},\n    undefined\n  )\n}\n\n/**\n * Transform a node.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Nodes} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction one(state, node, key) {\n  if (node.type === 'element') {\n    return element(state, node, key)\n  }\n\n  if (node.type === 'mdxFlowExpression' || node.type === 'mdxTextExpression') {\n    return mdxExpression(state, node)\n  }\n\n  if (node.type === 'mdxJsxFlowElement' || node.type === 'mdxJsxTextElement') {\n    return mdxJsxElement(state, node, key)\n  }\n\n  if (node.type === 'mdxjsEsm') {\n    return mdxEsm(state, node)\n  }\n\n  if (node.type === 'root') {\n    return root(state, node, key)\n  }\n\n  if (node.type === 'text') {\n    return text(state, node)\n  }\n}\n\n/**\n * Handle element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Element} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction element(state, node, key) {\n  const parentSchema = state.schema\n  let schema = parentSchema\n\n  if (node.tagName.toLowerCase() === 'svg' && parentSchema.space === 'html') {\n    schema = svg\n    state.schema = schema\n  }\n\n  state.ancestors.push(node)\n\n  const type = findComponentFromName(state, node.tagName, false)\n  const props = createElementProps(state, node)\n  let children = createChildren(state, node)\n\n  if (tableElements.has(node.tagName)) {\n    children = children.filter(function (child) {\n      return typeof child === 'string' ? !whitespace(child) : true\n    })\n  }\n\n  addNode(state, props, type, node)\n  addChildren(props, children)\n\n  // Restore.\n  state.ancestors.pop()\n  state.schema = parentSchema\n\n  return state.create(node, type, props, key)\n}\n\n/**\n * Handle MDX expression.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxFlowExpressionHast | MdxTextExpressionHast} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxExpression(state, node) {\n  if (node.data && node.data.estree && state.evaluater) {\n    const program = node.data.estree\n    const expression = program.body[0]\n    assert(expression.type === 'ExpressionStatement')\n\n    // Assume result is a child.\n    return /** @type {Child | undefined} */ (\n      state.evaluater.evaluateExpression(expression.expression)\n    )\n  }\n\n  crashEstree(state, node.position)\n}\n\n/**\n * Handle MDX ESM.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxjsEsmHast} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxEsm(state, node) {\n  if (node.data && node.data.estree && state.evaluater) {\n    // Assume result is a child.\n    return /** @type {Child | undefined} */ (\n      state.evaluater.evaluateProgram(node.data.estree)\n    )\n  }\n\n  crashEstree(state, node.position)\n}\n\n/**\n * Handle MDX JSX.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxJsxElement(state, node, key) {\n  const parentSchema = state.schema\n  let schema = parentSchema\n\n  if (node.name === 'svg' && parentSchema.space === 'html') {\n    schema = svg\n    state.schema = schema\n  }\n\n  state.ancestors.push(node)\n\n  const type =\n    node.name === null\n      ? state.Fragment\n      : findComponentFromName(state, node.name, true)\n  const props = createJsxElementProps(state, node)\n  const children = createChildren(state, node)\n\n  addNode(state, props, type, node)\n  addChildren(props, children)\n\n  // Restore.\n  state.ancestors.pop()\n  state.schema = parentSchema\n\n  return state.create(node, type, props, key)\n}\n\n/**\n * Handle root.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Root} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction root(state, node, key) {\n  /** @type {Props} */\n  const props = {}\n\n  addChildren(props, createChildren(state, node))\n\n  return state.create(node, state.Fragment, props, key)\n}\n\n/**\n * Handle text.\n *\n * @param {State} _\n *   Info passed around.\n * @param {Text} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction text(_, node) {\n  return node.value\n}\n\n/**\n * Add `node` to props.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Props} props\n *   Props.\n * @param {unknown} type\n *   Type.\n * @param {Element | MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n *   Node.\n * @returns {undefined}\n *   Nothing.\n */\nfunction addNode(state, props, type, node) {\n  // If this is swapped out for a component:\n  if (typeof type !== 'string' && type !== state.Fragment && state.passNode) {\n    props.node = node\n  }\n}\n\n/**\n * Add children to props.\n *\n * @param {Props} props\n *   Props.\n * @param {Array<Child>} children\n *   Children.\n * @returns {undefined}\n *   Nothing.\n */\nfunction addChildren(props, children) {\n  if (children.length > 0) {\n    const value = children.length > 1 ? children : children[0]\n\n    if (value) {\n      props.children = value\n    }\n  }\n}\n\n/**\n * @param {string | undefined} _\n *   Path to file.\n * @param {Jsx} jsx\n *   Dynamic.\n * @param {Jsx} jsxs\n *   Static.\n * @returns {Create}\n *   Create a production element.\n */\nfunction productionCreate(_, jsx, jsxs) {\n  return create\n  /** @type {Create} */\n  function create(_, type, props, key) {\n    // Only an array when there are 2 or more children.\n    const isStaticChildren = Array.isArray(props.children)\n    const fn = isStaticChildren ? jsxs : jsx\n    return key ? fn(type, props, key) : fn(type, props)\n  }\n}\n\n/**\n * @param {string | undefined} filePath\n *   Path to file.\n * @param {JsxDev} jsxDEV\n *   Development.\n * @returns {Create}\n *   Create a development element.\n */\nfunction developmentCreate(filePath, jsxDEV) {\n  return create\n  /** @type {Create} */\n  function create(node, type, props, key) {\n    // Only an array when there are 2 or more children.\n    const isStaticChildren = Array.isArray(props.children)\n    const point = pointStart(node)\n    return jsxDEV(\n      type,\n      props,\n      key,\n      isStaticChildren,\n      {\n        columnNumber: point ? point.column - 1 : undefined,\n        fileName: filePath,\n        lineNumber: point ? point.line : undefined\n      },\n      undefined\n    )\n  }\n}\n\n/**\n * Create props from an element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Element} node\n *   Current element.\n * @returns {Props}\n *   Props.\n */\nfunction createElementProps(state, node) {\n  /** @type {Props} */\n  const props = {}\n  /** @type {string | undefined} */\n  let alignValue\n  /** @type {string} */\n  let prop\n\n  for (prop in node.properties) {\n    if (prop !== 'children' && own.call(node.properties, prop)) {\n      const result = createProperty(state, prop, node.properties[prop])\n\n      if (result) {\n        const [key, value] = result\n\n        if (\n          state.tableCellAlignToStyle &&\n          key === 'align' &&\n          typeof value === 'string' &&\n          tableCellElement.has(node.tagName)\n        ) {\n          alignValue = value\n        } else {\n          props[key] = value\n        }\n      }\n    }\n  }\n\n  if (alignValue) {\n    // Assume style is an object.\n    const style = /** @type {Style} */ (props.style || (props.style = {}))\n    style[state.stylePropertyNameCase === 'css' ? 'text-align' : 'textAlign'] =\n      alignValue\n  }\n\n  return props\n}\n\n/**\n * Create props from a JSX element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n *   Current JSX element.\n * @returns {Props}\n *   Props.\n */\nfunction createJsxElementProps(state, node) {\n  /** @type {Props} */\n  const props = {}\n\n  for (const attribute of node.attributes) {\n    if (attribute.type === 'mdxJsxExpressionAttribute') {\n      if (attribute.data && attribute.data.estree && state.evaluater) {\n        const program = attribute.data.estree\n        const expression = program.body[0]\n        assert(expression.type === 'ExpressionStatement')\n        const objectExpression = expression.expression\n        assert(objectExpression.type === 'ObjectExpression')\n        const property = objectExpression.properties[0]\n        assert(property.type === 'SpreadElement')\n\n        Object.assign(\n          props,\n          state.evaluater.evaluateExpression(property.argument)\n        )\n      } else {\n        crashEstree(state, node.position)\n      }\n    } else {\n      // For JSX, the author is responsible of passing in the correct values.\n      const name = attribute.name\n      /** @type {unknown} */\n      let value\n\n      if (attribute.value && typeof attribute.value === 'object') {\n        if (\n          attribute.value.data &&\n          attribute.value.data.estree &&\n          state.evaluater\n        ) {\n          const program = attribute.value.data.estree\n          const expression = program.body[0]\n          assert(expression.type === 'ExpressionStatement')\n          value = state.evaluater.evaluateExpression(expression.expression)\n        } else {\n          crashEstree(state, node.position)\n        }\n      } else {\n        value = attribute.value === null ? true : attribute.value\n      }\n\n      // Assume a prop.\n      props[name] = /** @type {Props[keyof Props]} */ (value)\n    }\n  }\n\n  return props\n}\n\n/**\n * Create children.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Parents} node\n *   Current element.\n * @returns {Array<Child>}\n *   Children.\n */\nfunction createChildren(state, node) {\n  /** @type {Array<Child>} */\n  const children = []\n  let index = -1\n  /** @type {Map<string, number>} */\n  // Note: test this when Solid doesn’t want to merge my upcoming PR.\n  /* c8 ignore next */\n  const countsByName = state.passKeys ? new Map() : emptyMap\n\n  while (++index < node.children.length) {\n    const child = node.children[index]\n    /** @type {string | undefined} */\n    let key\n\n    if (state.passKeys) {\n      const name =\n        child.type === 'element'\n          ? child.tagName\n          : child.type === 'mdxJsxFlowElement' ||\n              child.type === 'mdxJsxTextElement'\n            ? child.name\n            : undefined\n\n      if (name) {\n        const count = countsByName.get(name) || 0\n        key = name + '-' + count\n        countsByName.set(name, count + 1)\n      }\n    }\n\n    const result = one(state, child, key)\n    if (result !== undefined) children.push(result)\n  }\n\n  return children\n}\n\n/**\n * Handle a property.\n *\n * @param {State} state\n *   Info passed around.\n * @param {string} prop\n *   Key.\n * @param {Array<number | string> | boolean | number | string | null | undefined} value\n *   hast property value.\n * @returns {Field | undefined}\n *   Field for runtime, optional.\n */\nfunction createProperty(state, prop, value) {\n  const info = find(state.schema, prop)\n\n  // Ignore nullish and `NaN` values.\n  if (\n    value === null ||\n    value === undefined ||\n    (typeof value === 'number' && Number.isNaN(value))\n  ) {\n    return\n  }\n\n  if (Array.isArray(value)) {\n    // Accept `array`.\n    // Most props are space-separated.\n    value = info.commaSeparated ? commas(value) : spaces(value)\n  }\n\n  // React only accepts `style` as object.\n  if (info.property === 'style') {\n    let styleObject =\n      typeof value === 'object' ? value : parseStyle(state, String(value))\n\n    if (state.stylePropertyNameCase === 'css') {\n      styleObject = transformStylesToCssCasing(styleObject)\n    }\n\n    return ['style', styleObject]\n  }\n\n  return [\n    state.elementAttributeNameCase === 'react' && info.space\n      ? hastToReact[info.property] || info.property\n      : info.attribute,\n    value\n  ]\n}\n\n/**\n * Parse a CSS declaration to an object.\n *\n * @param {State} state\n *   Info passed around.\n * @param {string} value\n *   CSS declarations.\n * @returns {Style}\n *   Properties.\n * @throws\n *   Throws `VFileMessage` when CSS cannot be parsed.\n */\nfunction parseStyle(state, value) {\n  try {\n    return styleToJs(value, {reactCompat: true})\n  } catch (error) {\n    if (state.ignoreInvalidStyle) {\n      return {}\n    }\n\n    const cause = /** @type {Error} */ (error)\n    const message = new VFileMessage('Cannot parse `style` attribute', {\n      ancestors: state.ancestors,\n      cause,\n      ruleId: 'style',\n      source: 'hast-util-to-jsx-runtime'\n    })\n    message.file = state.filePath || undefined\n    message.url = docs + '#cannot-parse-style-attribute'\n\n    throw message\n  }\n}\n\n/**\n * Create a JSX name from a string.\n *\n * @param {State} state\n *   To do.\n * @param {string} name\n *   Name.\n * @param {boolean} allowExpression\n *   Allow member expressions and identifiers.\n * @returns {unknown}\n *   To do.\n */\nfunction findComponentFromName(state, name, allowExpression) {\n  /** @type {Identifier | Literal | MemberExpression} */\n  let result\n\n  if (!allowExpression) {\n    result = {type: 'Literal', value: name}\n  } else if (name.includes('.')) {\n    const identifiers = name.split('.')\n    let index = -1\n    /** @type {Identifier | Literal | MemberExpression | undefined} */\n    let node\n\n    while (++index < identifiers.length) {\n      /** @type {Identifier | Literal} */\n      const prop = isIdentifierName(identifiers[index])\n        ? {type: 'Identifier', name: identifiers[index]}\n        : {type: 'Literal', value: identifiers[index]}\n      node = node\n        ? {\n            type: 'MemberExpression',\n            object: node,\n            property: prop,\n            computed: Boolean(index && prop.type === 'Literal'),\n            optional: false\n          }\n        : prop\n    }\n\n    assert(node, 'always a result')\n    result = node\n  } else {\n    result =\n      isIdentifierName(name) && !/^[a-z]/.test(name)\n        ? {type: 'Identifier', name}\n        : {type: 'Literal', value: name}\n  }\n\n  // Only literals can be passed in `components` currently.\n  // No identifiers / member expressions.\n  if (result.type === 'Literal') {\n    const name = /** @type {string | number} */ (result.value)\n    return own.call(state.components, name) ? state.components[name] : name\n  }\n\n  // Assume component.\n  if (state.evaluater) {\n    return state.evaluater.evaluateExpression(result)\n  }\n\n  crashEstree(state)\n}\n\n/**\n * @param {State} state\n * @param {Position | undefined} [place]\n * @returns {never}\n */\nfunction crashEstree(state, place) {\n  const message = new VFileMessage(\n    'Cannot handle MDX estrees without `createEvaluater`',\n    {\n      ancestors: state.ancestors,\n      place,\n      ruleId: 'mdx-estree',\n      source: 'hast-util-to-jsx-runtime'\n    }\n  )\n  message.file = state.filePath || undefined\n  message.url = docs + '#cannot-handle-mdx-estrees-without-createevaluater'\n\n  throw message\n}\n\n/**\n * Transform a DOM casing style object to a CSS casing style object.\n *\n * @param {Style} domCasing\n * @returns {Style}\n */\nfunction transformStylesToCssCasing(domCasing) {\n  /** @type {Style} */\n  const cssCasing = {}\n  /** @type {string} */\n  let from\n\n  for (from in domCasing) {\n    if (own.call(domCasing, from)) {\n      cssCasing[transformStyleToCssCasing(from)] = domCasing[from]\n    }\n  }\n\n  return cssCasing\n}\n\n/**\n * Transform a DOM casing style field to a CSS casing style field.\n *\n * @param {string} from\n * @returns {string}\n */\nfunction transformStyleToCssCasing(from) {\n  let to = from.replace(cap, toDash)\n  // Handle `ms-xxx` -> `-ms-xxx`.\n  if (to.slice(0, 3) === 'ms-') to = '-' + to\n  return to\n}\n\n/**\n * Make `$0` dash cased.\n *\n * @param {string} $0\n *   Capitalized ASCII leter.\n * @returns {string}\n *   Dash and lower letter.\n */\nfunction toDash($0) {\n  return '-' + $0.toLowerCase()\n}\n","/**\n * HTML URL properties.\n *\n * Each key is a property name and each value is a list of tag names it applies\n * to or `null` if it applies to all elements.\n *\n * @type {Record<string, Array<string> | null>}\n */\nexport const urlAttributes = {\n  action: ['form'],\n  cite: ['blockquote', 'del', 'ins', 'q'],\n  data: ['object'],\n  formAction: ['button', 'input'],\n  href: ['a', 'area', 'base', 'link'],\n  icon: ['menuitem'],\n  itemId: null,\n  manifest: ['html'],\n  ping: ['a', 'area'],\n  poster: ['video'],\n  src: [\n    'audio',\n    'embed',\n    'iframe',\n    'img',\n    'input',\n    'script',\n    'source',\n    'track',\n    'video'\n  ]\n}\n","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').Options} FromMarkdownOptions\n * @typedef {import('unified').Parser<Root>} Parser\n * @typedef {import('unified').Processor<Root>} Processor\n */\n\n/**\n * @typedef {Omit<FromMarkdownOptions, 'extensions' | 'mdastExtensions'>} Options\n */\n\nimport {fromMarkdown} from 'mdast-util-from-markdown'\n\n/**\n * Aadd support for parsing from markdown.\n *\n * @param {Readonly<Options> | null | undefined} [options]\n *   Configuration (optional).\n * @returns {undefined}\n *   Nothing.\n */\nexport default function remarkParse(options) {\n  /** @type {Processor} */\n  // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n  const self = this\n\n  self.parser = parser\n\n  /**\n   * @type {Parser}\n   */\n  function parser(doc) {\n    return fromMarkdown(doc, {\n      ...self.data('settings'),\n      ...options,\n      // Note: these options are not in the readme.\n      // The goal is for them to be set by plugins on `data` instead of being\n      // passed by users.\n      extensions: self.data('micromarkExtensions') || [],\n      mdastExtensions: self.data('fromMarkdownExtensions') || []\n    })\n  }\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Blockquote} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `blockquote` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Blockquote} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function blockquote(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'blockquote',\n    properties: {},\n    children: state.wrap(state.all(node), true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Text} from 'hast'\n * @import {Break} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `break` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Break} node\n *   mdast node.\n * @returns {Array<Element | Text>}\n *   hast element content.\n */\nexport function hardBreak(state, node) {\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'br', properties: {}, children: []}\n  state.patch(node, result)\n  return [state.applyData(node, result), {type: 'text', value: '\\n'}]\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {Code} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `code` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Code} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function code(state, node) {\n  const value = node.value ? node.value + '\\n' : ''\n  /** @type {Properties} */\n  const properties = {}\n  // Someone can write `js&#x20;python&#x9;ruby`.\n  const language = node.lang ? node.lang.split(/\\s+/) : []\n\n  // GH/CM still drop the non-first languages.\n  if (language.length > 0) {\n    properties.className = ['language-' + language[0]]\n  }\n\n  // Create `<code>`.\n  /** @type {Element} */\n  let result = {\n    type: 'element',\n    tagName: 'code',\n    properties,\n    children: [{type: 'text', value}]\n  }\n\n  if (node.meta) {\n    result.data = {meta: node.meta}\n  }\n\n  state.patch(node, result)\n  result = state.applyData(node, result)\n\n  // Create `<pre>`.\n  result = {type: 'element', tagName: 'pre', properties: {}, children: [result]}\n  state.patch(node, result)\n  return result\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Delete} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `delete` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Delete} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strikethrough(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'del',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Emphasis} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `emphasis` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Emphasis} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function emphasis(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'em',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {FootnoteReference} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `footnoteReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {FootnoteReference} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function footnoteReference(state, node) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const id = String(node.identifier).toUpperCase()\n  const safeId = normalizeUri(id.toLowerCase())\n  const index = state.footnoteOrder.indexOf(id)\n  /** @type {number} */\n  let counter\n\n  let reuseCounter = state.footnoteCounts.get(id)\n\n  if (reuseCounter === undefined) {\n    reuseCounter = 0\n    state.footnoteOrder.push(id)\n    counter = state.footnoteOrder.length\n  } else {\n    counter = index + 1\n  }\n\n  reuseCounter += 1\n  state.footnoteCounts.set(id, reuseCounter)\n\n  /** @type {Element} */\n  const link = {\n    type: 'element',\n    tagName: 'a',\n    properties: {\n      href: '#' + clobberPrefix + 'fn-' + safeId,\n      id:\n        clobberPrefix +\n        'fnref-' +\n        safeId +\n        (reuseCounter > 1 ? '-' + reuseCounter : ''),\n      dataFootnoteRef: true,\n      ariaDescribedBy: ['footnote-label']\n    },\n    children: [{type: 'text', value: String(counter)}]\n  }\n  state.patch(node, link)\n\n  /** @type {Element} */\n  const sup = {\n    type: 'element',\n    tagName: 'sup',\n    properties: {},\n    children: [link]\n  }\n  state.patch(node, sup)\n  return state.applyData(node, sup)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Heading} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `heading` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Heading} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function heading(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'h' + node.depth,\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Html} from 'mdast'\n * @import {State} from '../state.js'\n * @import {Raw} from '../../index.js'\n */\n\n/**\n * Turn an mdast `html` node into hast (`raw` node in dangerous mode, otherwise\n * nothing).\n *\n * @param {State} state\n *   Info passed around.\n * @param {Html} node\n *   mdast node.\n * @returns {Element | Raw | undefined}\n *   hast node.\n */\nexport function html(state, node) {\n  if (state.options.allowDangerousHtml) {\n    /** @type {Raw} */\n    const result = {type: 'raw', value: node.value}\n    state.patch(node, result)\n    return state.applyData(node, result)\n  }\n\n  return undefined\n}\n","/**\n * @import {ElementContent} from 'hast'\n * @import {Reference, Nodes} from 'mdast'\n * @import {State} from './state.js'\n */\n\n/**\n * Return the content of a reference without definition as plain text.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Extract<Nodes, Reference>} node\n *   Reference node (image, link).\n * @returns {Array<ElementContent>}\n *   hast content.\n */\nexport function revert(state, node) {\n  const subtype = node.referenceType\n  let suffix = ']'\n\n  if (subtype === 'collapsed') {\n    suffix += '[]'\n  } else if (subtype === 'full') {\n    suffix += '[' + (node.label || node.identifier) + ']'\n  }\n\n  if (node.type === 'imageReference') {\n    return [{type: 'text', value: '![' + node.alt + suffix}]\n  }\n\n  const contents = state.all(node)\n  const head = contents[0]\n\n  if (head && head.type === 'text') {\n    head.value = '[' + head.value\n  } else {\n    contents.unshift({type: 'text', value: '['})\n  }\n\n  const tail = contents[contents.length - 1]\n\n  if (tail && tail.type === 'text') {\n    tail.value += suffix\n  } else {\n    contents.push({type: 'text', value: suffix})\n  }\n\n  return contents\n}\n","/**\n * @import {ElementContent, Element, Properties} from 'hast'\n * @import {ImageReference} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `imageReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ImageReference} node\n *   mdast node.\n * @returns {Array<ElementContent> | ElementContent}\n *   hast node.\n */\nexport function imageReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(definition.url || ''), alt: node.alt}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {Image} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `image` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Image} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function image(state, node) {\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(node.url)}\n\n  if (node.alt !== null && node.alt !== undefined) {\n    properties.alt = node.alt\n  }\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Text} from 'hast'\n * @import {InlineCode} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `inlineCode` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {InlineCode} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function inlineCode(state, node) {\n  /** @type {Text} */\n  const text = {type: 'text', value: node.value.replace(/\\r?\\n|\\r/g, ' ')}\n  state.patch(node, text)\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'code',\n    properties: {},\n    children: [text]\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {ElementContent, Element, Properties} from 'hast'\n * @import {LinkReference} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `linkReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {LinkReference} node\n *   mdast node.\n * @returns {Array<ElementContent> | ElementContent}\n *   hast node.\n */\nexport function linkReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(definition.url || '')}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {Link} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `link` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Link} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function link(state, node) {\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(node.url)}\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {ElementContent, Element, Properties} from 'hast'\n * @import {ListItem, Parents} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `listItem` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ListItem} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function listItem(state, node, parent) {\n  const results = state.all(node)\n  const loose = parent ? listLoose(parent) : listItemLoose(node)\n  /** @type {Properties} */\n  const properties = {}\n  /** @type {Array<ElementContent>} */\n  const children = []\n\n  if (typeof node.checked === 'boolean') {\n    const head = results[0]\n    /** @type {Element} */\n    let paragraph\n\n    if (head && head.type === 'element' && head.tagName === 'p') {\n      paragraph = head\n    } else {\n      paragraph = {type: 'element', tagName: 'p', properties: {}, children: []}\n      results.unshift(paragraph)\n    }\n\n    if (paragraph.children.length > 0) {\n      paragraph.children.unshift({type: 'text', value: ' '})\n    }\n\n    paragraph.children.unshift({\n      type: 'element',\n      tagName: 'input',\n      properties: {type: 'checkbox', checked: node.checked, disabled: true},\n      children: []\n    })\n\n    // According to github-markdown-css, this class hides bullet.\n    // See: <https://github.com/sindresorhus/github-markdown-css>.\n    properties.className = ['task-list-item']\n  }\n\n  let index = -1\n\n  while (++index < results.length) {\n    const child = results[index]\n\n    // Add eols before nodes, except if this is a loose, first paragraph.\n    if (\n      loose ||\n      index !== 0 ||\n      child.type !== 'element' ||\n      child.tagName !== 'p'\n    ) {\n      children.push({type: 'text', value: '\\n'})\n    }\n\n    if (child.type === 'element' && child.tagName === 'p' && !loose) {\n      children.push(...child.children)\n    } else {\n      children.push(child)\n    }\n  }\n\n  const tail = results[results.length - 1]\n\n  // Add a final eol.\n  if (tail && (loose || tail.type !== 'element' || tail.tagName !== 'p')) {\n    children.push({type: 'text', value: '\\n'})\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'li', properties, children}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n\n/**\n * @param {Parents} node\n * @return {Boolean}\n */\nfunction listLoose(node) {\n  let loose = false\n  if (node.type === 'list') {\n    loose = node.spread || false\n    const children = node.children\n    let index = -1\n\n    while (!loose && ++index < children.length) {\n      loose = listItemLoose(children[index])\n    }\n  }\n\n  return loose\n}\n\n/**\n * @param {ListItem} node\n * @return {Boolean}\n */\nfunction listItemLoose(node) {\n  const spread = node.spread\n\n  return spread === null || spread === undefined\n    ? node.children.length > 1\n    : spread\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {List} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `list` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {List} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function list(state, node) {\n  /** @type {Properties} */\n  const properties = {}\n  const results = state.all(node)\n  let index = -1\n\n  if (typeof node.start === 'number' && node.start !== 1) {\n    properties.start = node.start\n  }\n\n  // Like GitHub, add a class for custom styling.\n  while (++index < results.length) {\n    const child = results[index]\n\n    if (\n      child.type === 'element' &&\n      child.tagName === 'li' &&\n      child.properties &&\n      Array.isArray(child.properties.className) &&\n      child.properties.className.includes('task-list-item')\n    ) {\n      properties.className = ['contains-task-list']\n      break\n    }\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: node.ordered ? 'ol' : 'ul',\n    properties,\n    children: state.wrap(results, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Paragraph} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `paragraph` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Paragraph} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function paragraph(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'p',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Parents as HastParents, Root as HastRoot} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `root` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastRoot} node\n *   mdast node.\n * @returns {HastParents}\n *   hast node.\n */\nexport function root(state, node) {\n  /** @type {HastRoot} */\n  const result = {type: 'root', children: state.wrap(state.all(node))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Strong} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `strong` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Strong} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strong(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'strong',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Table} from 'mdast'\n * @import {Element} from 'hast'\n * @import {State} from '../state.js'\n */\n\nimport {pointEnd, pointStart} from 'unist-util-position'\n\n/**\n * Turn an mdast `table` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Table} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function table(state, node) {\n  const rows = state.all(node)\n  const firstRow = rows.shift()\n  /** @type {Array<Element>} */\n  const tableContent = []\n\n  if (firstRow) {\n    /** @type {Element} */\n    const head = {\n      type: 'element',\n      tagName: 'thead',\n      properties: {},\n      children: state.wrap([firstRow], true)\n    }\n    state.patch(node.children[0], head)\n    tableContent.push(head)\n  }\n\n  if (rows.length > 0) {\n    /** @type {Element} */\n    const body = {\n      type: 'element',\n      tagName: 'tbody',\n      properties: {},\n      children: state.wrap(rows, true)\n    }\n\n    const start = pointStart(node.children[1])\n    const end = pointEnd(node.children[node.children.length - 1])\n    if (start && end) body.position = {start, end}\n    tableContent.push(body)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'table',\n    properties: {},\n    children: state.wrap(tableContent, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, ElementContent, Properties} from 'hast'\n * @import {Parents, TableRow} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `tableRow` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableRow} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function tableRow(state, node, parent) {\n  const siblings = parent ? parent.children : undefined\n  // Generate a body row when without parent.\n  const rowIndex = siblings ? siblings.indexOf(node) : 1\n  const tagName = rowIndex === 0 ? 'th' : 'td'\n  // To do: option to use `style`?\n  const align = parent && parent.type === 'table' ? parent.align : undefined\n  const length = align ? align.length : node.children.length\n  let cellIndex = -1\n  /** @type {Array<ElementContent>} */\n  const cells = []\n\n  while (++cellIndex < length) {\n    // Note: can also be undefined.\n    const cell = node.children[cellIndex]\n    /** @type {Properties} */\n    const properties = {}\n    const alignValue = align ? align[cellIndex] : undefined\n\n    if (alignValue) {\n      properties.align = alignValue\n    }\n\n    /** @type {Element} */\n    let result = {type: 'element', tagName, properties, children: []}\n\n    if (cell) {\n      result.children = state.all(cell)\n      state.patch(cell, result)\n      result = state.applyData(cell, result)\n    }\n\n    cells.push(result)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'tr',\n    properties: {},\n    children: state.wrap(cells, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {TableCell} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `tableCell` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableCell} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function tableCell(state, node) {\n  // Note: this function is normally not called: see `table-row` for how rows\n  // and their cells are compiled.\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'td', // Assume body cell.\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","const tab = 9 /* `\\t` */\nconst space = 32 /* ` ` */\n\n/**\n * Remove initial and final spaces and tabs at the line breaks in `value`.\n * Does not trim initial and final spaces and tabs of the value itself.\n *\n * @param {string} value\n *   Value to trim.\n * @returns {string}\n *   Trimmed value.\n */\nexport function trimLines(value) {\n  const source = String(value)\n  const search = /\\r?\\n|\\r/g\n  let match = search.exec(source)\n  let last = 0\n  /** @type {Array<string>} */\n  const lines = []\n\n  while (match) {\n    lines.push(\n      trimLine(source.slice(last, match.index), last > 0, true),\n      match[0]\n    )\n\n    last = match.index + match[0].length\n    match = search.exec(source)\n  }\n\n  lines.push(trimLine(source.slice(last), last > 0, false))\n\n  return lines.join('')\n}\n\n/**\n * @param {string} value\n *   Line to trim.\n * @param {boolean} start\n *   Whether to trim the start of the line.\n * @param {boolean} end\n *   Whether to trim the end of the line.\n * @returns {string}\n *   Trimmed line.\n */\nfunction trimLine(value, start, end) {\n  let startIndex = 0\n  let endIndex = value.length\n\n  if (start) {\n    let code = value.codePointAt(startIndex)\n\n    while (code === tab || code === space) {\n      startIndex++\n      code = value.codePointAt(startIndex)\n    }\n  }\n\n  if (end) {\n    let code = value.codePointAt(endIndex - 1)\n\n    while (code === tab || code === space) {\n      endIndex--\n      code = value.codePointAt(endIndex - 1)\n    }\n  }\n\n  return endIndex > startIndex ? value.slice(startIndex, endIndex) : ''\n}\n","/**\n * @import {Element as HastElement, Text as HastText} from 'hast'\n * @import {Text as MdastText} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {trimLines} from 'trim-lines'\n\n/**\n * Turn an mdast `text` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastText} node\n *   mdast node.\n * @returns {HastElement | HastText}\n *   hast node.\n */\nexport function text(state, node) {\n  /** @type {HastText} */\n  const result = {type: 'text', value: trimLines(String(node.value))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {ThematicBreak} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `thematicBreak` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ThematicBreak} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function thematicBreak(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'hr',\n    properties: {},\n    children: []\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Handlers} from '../state.js'\n */\n\nimport {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {strikethrough} from './delete.js'\nimport {emphasis} from './emphasis.js'\nimport {footnoteReference} from './footnote-reference.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {imageReference} from './image-reference.js'\nimport {image} from './image.js'\nimport {inlineCode} from './inline-code.js'\nimport {linkReference} from './link-reference.js'\nimport {link} from './link.js'\nimport {listItem} from './list-item.js'\nimport {list} from './list.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {table} from './table.js'\nimport {tableRow} from './table-row.js'\nimport {tableCell} from './table-cell.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default handlers for nodes.\n *\n * @satisfies {Handlers}\n */\nexport const handlers = {\n  blockquote,\n  break: hardBreak,\n  code,\n  delete: strikethrough,\n  emphasis,\n  footnoteReference,\n  heading,\n  html,\n  imageReference,\n  image,\n  inlineCode,\n  linkReference,\n  link,\n  listItem,\n  list,\n  paragraph,\n  // @ts-expect-error: root is different, but hard to type.\n  root,\n  strong,\n  table,\n  tableCell,\n  tableRow,\n  text,\n  thematicBreak,\n  toml: ignore,\n  yaml: ignore,\n  definition: ignore,\n  footnoteDefinition: ignore\n}\n\n// Return nothing for nodes that are ignored.\nfunction ignore() {\n  return undefined\n}\n","import {\n  VOID, PRIMITIVE,\n  ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst env = typeof self === 'object' ? self : globalThis;\n\nconst deserializer = ($, _) => {\n  const as = (out, index) => {\n    $.set(index, out);\n    return out;\n  };\n\n  const unpair = index => {\n    if ($.has(index))\n      return $.get(index);\n\n    const [type, value] = _[index];\n    switch (type) {\n      case PRIMITIVE:\n      case VOID:\n        return as(value, index);\n      case ARRAY: {\n        const arr = as([], index);\n        for (const index of value)\n          arr.push(unpair(index));\n        return arr;\n      }\n      case OBJECT: {\n        const object = as({}, index);\n        for (const [key, index] of value)\n          object[unpair(key)] = unpair(index);\n        return object;\n      }\n      case DATE:\n        return as(new Date(value), index);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as(new RegExp(source, flags), index);\n      }\n      case MAP: {\n        const map = as(new Map, index);\n        for (const [key, index] of value)\n          map.set(unpair(key), unpair(index));\n        return map;\n      }\n      case SET: {\n        const set = as(new Set, index);\n        for (const index of value)\n          set.add(unpair(index));\n        return set;\n      }\n      case ERROR: {\n        const {name, message} = value;\n        return as(new env[name](message), index);\n      }\n      case BIGINT:\n        return as(BigInt(value), index);\n      case 'BigInt':\n        return as(Object(BigInt(value)), index);\n      case 'ArrayBuffer':\n        return as(new Uint8Array(value).buffer, value);\n      case 'DataView': {\n        const { buffer } = new Uint8Array(value);\n        return as(new DataView(buffer), value);\n      }\n    }\n    return as(new env[type](value), index);\n  };\n\n  return unpair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns a deserialized value from a serialized array of Records.\n * @param {Record[]} serialized a previously serialized value.\n * @returns {any}\n */\nexport const deserialize = serialized => deserializer(new Map, serialized)(0);\n","import {\n  VOID, PRIMITIVE,\n  ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst EMPTY = '';\n\nconst {toString} = {};\nconst {keys} = Object;\n\nconst typeOf = value => {\n  const type = typeof value;\n  if (type !== 'object' || !value)\n    return [PRIMITIVE, type];\n\n  const asString = toString.call(value).slice(8, -1);\n  switch (asString) {\n    case 'Array':\n      return [ARRAY, EMPTY];\n    case 'Object':\n      return [OBJECT, EMPTY];\n    case 'Date':\n      return [DATE, EMPTY];\n    case 'RegExp':\n      return [REGEXP, EMPTY];\n    case 'Map':\n      return [MAP, EMPTY];\n    case 'Set':\n      return [SET, EMPTY];\n    case 'DataView':\n      return [ARRAY, asString];\n  }\n\n  if (asString.includes('Array'))\n    return [ARRAY, asString];\n\n  if (asString.includes('Error'))\n    return [ERROR, asString];\n\n  return [OBJECT, asString];\n};\n\nconst shouldSkip = ([TYPE, type]) => (\n  TYPE === PRIMITIVE &&\n  (type === 'function' || type === 'symbol')\n);\n\nconst serializer = (strict, json, $, _) => {\n\n  const as = (out, value) => {\n    const index = _.push(out) - 1;\n    $.set(value, index);\n    return index;\n  };\n\n  const pair = value => {\n    if ($.has(value))\n      return $.get(value);\n\n    let [TYPE, type] = typeOf(value);\n    switch (TYPE) {\n      case PRIMITIVE: {\n        let entry = value;\n        switch (type) {\n          case 'bigint':\n            TYPE = BIGINT;\n            entry = value.toString();\n            break;\n          case 'function':\n          case 'symbol':\n            if (strict)\n              throw new TypeError('unable to serialize ' + type);\n            entry = null;\n            break;\n          case 'undefined':\n            return as([VOID], value);\n        }\n        return as([TYPE, entry], value);\n      }\n      case ARRAY: {\n        if (type) {\n          let spread = value;\n          if (type === 'DataView') {\n            spread = new Uint8Array(value.buffer);\n          }\n          else if (type === 'ArrayBuffer') {\n            spread = new Uint8Array(value);\n          }\n          return as([type, [...spread]], value);\n        }\n\n        const arr = [];\n        const index = as([TYPE, arr], value);\n        for (const entry of value)\n          arr.push(pair(entry));\n        return index;\n      }\n      case OBJECT: {\n        if (type) {\n          switch (type) {\n            case 'BigInt':\n              return as([type, value.toString()], value);\n            case 'Boolean':\n            case 'Number':\n            case 'String':\n              return as([type, value.valueOf()], value);\n          }\n        }\n\n        if (json && ('toJSON' in value))\n          return pair(value.toJSON());\n\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const key of keys(value)) {\n          if (strict || !shouldSkip(typeOf(value[key])))\n            entries.push([pair(key), pair(value[key])]);\n        }\n        return index;\n      }\n      case DATE:\n        return as([TYPE, value.toISOString()], value);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as([TYPE, {source, flags}], value);\n      }\n      case MAP: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const [key, entry] of value) {\n          if (strict || !(shouldSkip(typeOf(key)) || shouldSkip(typeOf(entry))))\n            entries.push([pair(key), pair(entry)]);\n        }\n        return index;\n      }\n      case SET: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const entry of value) {\n          if (strict || !shouldSkip(typeOf(entry)))\n            entries.push(pair(entry));\n        }\n        return index;\n      }\n    }\n\n    const {message} = value;\n    return as([TYPE, {name: type, message}], value);\n  };\n\n  return pair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} value a serializable value.\n * @param {{json?: boolean, lossy?: boolean}?} options an object with a `lossy` or `json` property that,\n *  if `true`, will not throw errors on incompatible types, and behave more\n *  like JSON stringify would behave. Symbol and Function will be discarded.\n * @returns {Record[]}\n */\n export const serialize = (value, {json, lossy} = {}) => {\n  const _ = [];\n  return serializer(!(json || lossy), !!json, new Map, _)(value), _;\n};\n","import {deserialize} from './deserialize.js';\nimport {serialize} from './serialize.js';\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} any a serializable value.\n * @param {{transfer?: any[], json?: boolean, lossy?: boolean}?} options an object with\n * a transfer option (ignored when polyfilled) and/or non standard fields that\n * fallback to the polyfill if present.\n * @returns {Record[]}\n */\nexport default typeof structuredClone === \"function\" ?\n  /* c8 ignore start */\n  (any, options) => (\n    options && ('json' in options || 'lossy' in options) ?\n      deserialize(serialize(any, options)) : structuredClone(any)\n  ) :\n  (any, options) => deserialize(serialize(any, options));\n  /* c8 ignore stop */\n\nexport {deserialize, serialize};\n","/**\n * @import {ElementContent, Element} from 'hast'\n * @import {State} from './state.js'\n */\n\n/**\n * @callback FootnoteBackContentTemplate\n *   Generate content for the backreference dynamically.\n *\n *   For the following markdown:\n *\n *   ```markdown\n *   Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n *   [^remark]: things about remark\n *   [^micromark]: things about micromark\n *   ```\n *\n *   This function will be called with:\n *\n *   *  `0` and `0` for the backreference from `things about micromark` to\n *      `alpha`, as it is the first used definition, and the first call to it\n *   *  `0` and `1` for the backreference from `things about micromark` to\n *      `bravo`, as it is the first used definition, and the second call to it\n *   *  `1` and `0` for the backreference from `things about remark` to\n *      `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {Array<ElementContent> | ElementContent | string}\n *   Content for the backreference when linking back from definitions to their\n *   reference.\n *\n * @callback FootnoteBackLabelTemplate\n *   Generate a back label dynamically.\n *\n *   For the following markdown:\n *\n *   ```markdown\n *   Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n *   [^remark]: things about remark\n *   [^micromark]: things about micromark\n *   ```\n *\n *   This function will be called with:\n *\n *   *  `0` and `0` for the backreference from `things about micromark` to\n *      `alpha`, as it is the first used definition, and the first call to it\n *   *  `0` and `1` for the backreference from `things about micromark` to\n *      `bravo`, as it is the first used definition, and the second call to it\n *   *  `1` and `0` for the backreference from `things about remark` to\n *      `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {string}\n *   Back label to use when linking back from definitions to their reference.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Generate the default content that GitHub uses on backreferences.\n *\n * @param {number} _\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {Array<ElementContent>}\n *   Content.\n */\nexport function defaultFootnoteBackContent(_, rereferenceIndex) {\n  /** @type {Array<ElementContent>} */\n  const result = [{type: 'text', value: '↩'}]\n\n  if (rereferenceIndex > 1) {\n    result.push({\n      type: 'element',\n      tagName: 'sup',\n      properties: {},\n      children: [{type: 'text', value: String(rereferenceIndex)}]\n    })\n  }\n\n  return result\n}\n\n/**\n * Generate the default label that GitHub uses on backreferences.\n *\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {string}\n *   Label.\n */\nexport function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n  return (\n    'Back to reference ' +\n    (referenceIndex + 1) +\n    (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n  )\n}\n\n/**\n * Generate a hast footer for called footnote definitions.\n *\n * @param {State} state\n *   Info passed around.\n * @returns {Element | undefined}\n *   `section` element or `undefined`.\n */\n// eslint-disable-next-line complexity\nexport function footer(state) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const footnoteBackContent =\n    state.options.footnoteBackContent || defaultFootnoteBackContent\n  const footnoteBackLabel =\n    state.options.footnoteBackLabel || defaultFootnoteBackLabel\n  const footnoteLabel = state.options.footnoteLabel || 'Footnotes'\n  const footnoteLabelTagName = state.options.footnoteLabelTagName || 'h2'\n  const footnoteLabelProperties = state.options.footnoteLabelProperties || {\n    className: ['sr-only']\n  }\n  /** @type {Array<ElementContent>} */\n  const listItems = []\n  let referenceIndex = -1\n\n  while (++referenceIndex < state.footnoteOrder.length) {\n    const definition = state.footnoteById.get(\n      state.footnoteOrder[referenceIndex]\n    )\n\n    if (!definition) {\n      continue\n    }\n\n    const content = state.all(definition)\n    const id = String(definition.identifier).toUpperCase()\n    const safeId = normalizeUri(id.toLowerCase())\n    let rereferenceIndex = 0\n    /** @type {Array<ElementContent>} */\n    const backReferences = []\n    const counts = state.footnoteCounts.get(id)\n\n    // eslint-disable-next-line no-unmodified-loop-condition\n    while (counts !== undefined && ++rereferenceIndex <= counts) {\n      if (backReferences.length > 0) {\n        backReferences.push({type: 'text', value: ' '})\n      }\n\n      let children =\n        typeof footnoteBackContent === 'string'\n          ? footnoteBackContent\n          : footnoteBackContent(referenceIndex, rereferenceIndex)\n\n      if (typeof children === 'string') {\n        children = {type: 'text', value: children}\n      }\n\n      backReferences.push({\n        type: 'element',\n        tagName: 'a',\n        properties: {\n          href:\n            '#' +\n            clobberPrefix +\n            'fnref-' +\n            safeId +\n            (rereferenceIndex > 1 ? '-' + rereferenceIndex : ''),\n          dataFootnoteBackref: '',\n          ariaLabel:\n            typeof footnoteBackLabel === 'string'\n              ? footnoteBackLabel\n              : footnoteBackLabel(referenceIndex, rereferenceIndex),\n          className: ['data-footnote-backref']\n        },\n        children: Array.isArray(children) ? children : [children]\n      })\n    }\n\n    const tail = content[content.length - 1]\n\n    if (tail && tail.type === 'element' && tail.tagName === 'p') {\n      const tailTail = tail.children[tail.children.length - 1]\n      if (tailTail && tailTail.type === 'text') {\n        tailTail.value += ' '\n      } else {\n        tail.children.push({type: 'text', value: ' '})\n      }\n\n      tail.children.push(...backReferences)\n    } else {\n      content.push(...backReferences)\n    }\n\n    /** @type {Element} */\n    const listItem = {\n      type: 'element',\n      tagName: 'li',\n      properties: {id: clobberPrefix + 'fn-' + safeId},\n      children: state.wrap(content, true)\n    }\n\n    state.patch(definition, listItem)\n\n    listItems.push(listItem)\n  }\n\n  if (listItems.length === 0) {\n    return\n  }\n\n  return {\n    type: 'element',\n    tagName: 'section',\n    properties: {dataFootnotes: true, className: ['footnotes']},\n    children: [\n      {\n        type: 'element',\n        tagName: footnoteLabelTagName,\n        properties: {\n          ...structuredClone(footnoteLabelProperties),\n          id: 'footnote-label'\n        },\n        children: [{type: 'text', value: footnoteLabel}]\n      },\n      {type: 'text', value: '\\n'},\n      {\n        type: 'element',\n        tagName: 'ol',\n        properties: {},\n        children: state.wrap(listItems, true)\n      },\n      {type: 'text', value: '\\n'}\n    ]\n  }\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n *   Test from `unist-util-is`.\n *\n *   Note: we have remove and add `undefined`, because otherwise when generating\n *   automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n *   which doesn’t work when publishing on npm.\n */\n\n// To do: use types from `unist-util-visit-parents` when it’s released.\n\n/**\n * @typedef {(\n *   Fn extends (value: any) => value is infer Thing\n *   ? Thing\n *   : Fallback\n * )} Predicate\n *   Get the value of a type guard `Fn`.\n * @template Fn\n *   Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n *   Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n *   Check extends null | undefined // No test.\n *   ? Value\n *   : Value extends {type: Check} // String (type) test.\n *   ? Value\n *   : Value extends Check // Partial test.\n *   ? Value\n *   : Check extends Function // Function test.\n *   ? Predicate<Check, Value> extends Value\n *     ? Predicate<Check, Value>\n *     : never\n *   : never // Some other test?\n * )} MatchesOne\n *   Check whether a node matches a primitive check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n *   Check extends Array<any>\n *   ? MatchesOne<Value, Check[keyof Check]>\n *   : MatchesOne<Value, Check>\n * )} Matches\n *   Check whether a node matches a check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n *   Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n *   Increment a number in the type system.\n * @template {Uint} [I=0]\n *   Index.\n */\n\n/**\n * @typedef {(\n *   Node extends UnistParent\n *   ? Node extends {children: Array<infer Children>}\n *     ? Child extends Children ? Node : never\n *     : never\n *   : never\n * )} InternalParent\n *   Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n *   Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Depth extends Max\n *   ? never\n *   :\n *     | InternalParent<Node, Child>\n *     | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {(\n *   Tree extends UnistParent\n *     ? Depth extends Max\n *       ? Tree\n *       : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n *     : Tree\n * )} InclusiveDescendant\n *   Collect all (inclusive) descendants of `Tree`.\n *\n *   > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n *   > recurse without actually running into an infinite loop, which the\n *   > previous version did.\n *   >\n *   > Practically, a max of `2` is typically enough assuming a `Root` is\n *   > passed, but it doesn’t improve performance.\n *   > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n *   > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n *   Tree type.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform `parent`.\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of `parent` still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Visited extends UnistNode ? number | undefined : never} index\n *   Index of `node` in `parent`.\n * @param {Ancestor extends UnistParent ? Ancestor | undefined : never} parent\n *   Parent of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n *   Visited node type.\n * @template {UnistParent} [Ancestor=UnistParent]\n *   Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Visited, Parent<Ancestor, Visited>>} BuildVisitorFromMatch\n *   Build a typed `Visitor` function from a node and all possible parents.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Visited\n *   Node type.\n * @template {UnistParent} Ancestor\n *   Parent type.\n */\n\n/**\n * @typedef {(\n *   BuildVisitorFromMatch<\n *     Matches<Descendant, Check>,\n *     Extract<Descendant, UnistParent>\n *   >\n * )} BuildVisitorFromDescendants\n *   Build a typed `Visitor` function from a list of descendants and a test.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Descendant\n *   Node type.\n * @template {Test} Check\n *   Test type.\n */\n\n/**\n * @typedef {(\n *   BuildVisitorFromDescendants<\n *     InclusiveDescendant<Tree>,\n *     Check\n *   >\n * )} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} [Tree=UnistNode]\n *   Node type.\n * @template {Test} [Check=Test]\n *   Test type.\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n *   Tree to traverse.\n * @param {Visitor | Test} testOrVisitor\n *   `unist-util-is`-compatible test (optional, omit to pass a visitor).\n * @param {Visitor | boolean | null | undefined} [visitorOrReverse]\n *   Handle each node (when test is omitted, pass `reverse`).\n * @param {boolean | null | undefined} [maybeReverse=false]\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n *   Nothing.\n *\n * @template {UnistNode} Tree\n *   Node type.\n * @template {Test} Check\n *   `unist-util-is`-compatible test.\n */\nexport function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n  /** @type {boolean | null | undefined} */\n  let reverse\n  /** @type {Test} */\n  let test\n  /** @type {Visitor} */\n  let visitor\n\n  if (\n    typeof testOrVisitor === 'function' &&\n    typeof visitorOrReverse !== 'function'\n  ) {\n    test = undefined\n    visitor = testOrVisitor\n    reverse = visitorOrReverse\n  } else {\n    // @ts-expect-error: assume the overload with test was given.\n    test = testOrVisitor\n    // @ts-expect-error: assume the overload with test was given.\n    visitor = visitorOrReverse\n    reverse = maybeReverse\n  }\n\n  visitParents(tree, test, overload, reverse)\n\n  /**\n   * @param {UnistNode} node\n   * @param {Array<UnistParent>} parents\n   */\n  function overload(node, parents) {\n    const parent = parents[parents.length - 1]\n    const index = parent ? parent.children.indexOf(node) : undefined\n    return visitor(node, index, parent)\n  }\n}\n","/**\n * @import {\n *   ElementContent as HastElementContent,\n *   Element as HastElement,\n *   Nodes as HastNodes,\n *   Properties as HastProperties,\n *   RootContent as HastRootContent,\n *   Text as HastText\n * } from 'hast'\n * @import {\n *   Definition as MdastDefinition,\n *   FootnoteDefinition as MdastFootnoteDefinition,\n *   Nodes as MdastNodes,\n *   Parents as MdastParents\n * } from 'mdast'\n * @import {VFile} from 'vfile'\n * @import {\n *   FootnoteBackContentTemplate,\n *   FootnoteBackLabelTemplate\n * } from './footer.js'\n */\n\n/**\n * @callback Handler\n *   Handle a node.\n * @param {State} state\n *   Info passed around.\n * @param {any} node\n *   mdast node to handle.\n * @param {MdastParents | undefined} parent\n *   Parent of `node`.\n * @returns {Array<HastElementContent> | HastElementContent | undefined}\n *   hast node.\n *\n * @typedef {Partial<Record<MdastNodes['type'], Handler>>} Handlers\n *   Handle nodes.\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n *   Whether to persist raw HTML in markdown in the hast tree (default:\n *   `false`).\n * @property {string | null | undefined} [clobberPrefix='user-content-']\n *   Prefix to use before the `id` property on footnotes to prevent them from\n *   *clobbering* (default: `'user-content-'`).\n *\n *   Pass `''` for trusted markdown and when you are careful with\n *   polyfilling.\n *   You could pass a different prefix.\n *\n *   DOM clobbering is this:\n *\n *   ```html\n *   <p id=\"x\"></p>\n *   <script>alert(x) // `x` now refers to the `p#x` DOM element</script>\n *   ```\n *\n *   The above example shows that elements are made available by browsers, by\n *   their ID, on the `window` object.\n *   This is a security risk because you might be expecting some other variable\n *   at that place.\n *   It can also break polyfills.\n *   Using a prefix solves these problems.\n * @property {VFile | null | undefined} [file]\n *   Corresponding virtual file representing the input document (optional).\n * @property {FootnoteBackContentTemplate | string | null | undefined} [footnoteBackContent]\n *   Content of the backreference back to references (default: `defaultFootnoteBackContent`).\n *\n *   The default value is:\n *\n *   ```js\n *   function defaultFootnoteBackContent(_, rereferenceIndex) {\n *     const result = [{type: 'text', value: '↩'}]\n *\n *     if (rereferenceIndex > 1) {\n *       result.push({\n *         type: 'element',\n *         tagName: 'sup',\n *         properties: {},\n *         children: [{type: 'text', value: String(rereferenceIndex)}]\n *       })\n *     }\n *\n *     return result\n *   }\n *   ```\n *\n *   This content is used in the `a` element of each backreference (the `↩`\n *   links).\n * @property {FootnoteBackLabelTemplate | string | null | undefined} [footnoteBackLabel]\n *   Label to describe the backreference back to references (default:\n *   `defaultFootnoteBackLabel`).\n *\n *   The default value is:\n *\n *   ```js\n *   function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n *    return (\n *      'Back to reference ' +\n *      (referenceIndex + 1) +\n *      (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n *    )\n *   }\n *   ```\n *\n *   Change it when the markdown is not in English.\n *\n *   This label is used in the `ariaLabel` property on each backreference\n *   (the `↩` links).\n *   It affects users of assistive technology.\n * @property {string | null | undefined} [footnoteLabel='Footnotes']\n *   Textual label to use for the footnotes section (default: `'Footnotes'`).\n *\n *   Change it when the markdown is not in English.\n *\n *   This label is typically hidden visually (assuming a `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass different properties with the `footnoteLabelProperties` option.\n * @property {HastProperties | null | undefined} [footnoteLabelProperties={className: ['sr-only']}]\n *   Properties to use on the footnote label (default: `{className:\n *   ['sr-only']}`).\n *\n *   Change it to show the label and add other properties.\n *\n *   This label is typically hidden visually (assuming an `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass an empty string.\n *   You can also add different properties.\n *\n *   > **Note**: `id: 'footnote-label'` is always added, because footnote\n *   > calls use it with `aria-describedby` to provide an accessible label.\n * @property {string | null | undefined} [footnoteLabelTagName='h2']\n *   HTML tag name to use for the footnote label element (default: `'h2'`).\n *\n *   Change it to match your document structure.\n *\n *   This label is typically hidden visually (assuming a `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass different properties with the `footnoteLabelProperties` option.\n * @property {Handlers | null | undefined} [handlers]\n *   Extra handlers for nodes (optional).\n * @property {Array<MdastNodes['type']> | null | undefined} [passThrough]\n *   List of custom mdast node types to pass through (keep) in hast (note that\n *   the node itself is passed, but eventual children are transformed)\n *   (optional).\n * @property {Handler | null | undefined} [unknownHandler]\n *   Handler for all unknown nodes (optional).\n *\n * @typedef State\n *   Info passed around.\n * @property {(node: MdastNodes) => Array<HastElementContent>} all\n *   Transform the children of an mdast parent to hast.\n * @property {<Type extends HastNodes>(from: MdastNodes, to: Type) => HastElement | Type} applyData\n *   Honor the `data` of `from`, and generate an element instead of `node`.\n * @property {Map<string, MdastDefinition>} definitionById\n *   Definitions by their identifier.\n * @property {Map<string, MdastFootnoteDefinition>} footnoteById\n *   Footnote definitions by their identifier.\n * @property {Map<string, number>} footnoteCounts\n *   Counts for how often the same footnote was called.\n * @property {Array<string>} footnoteOrder\n *   Identifiers of order when footnote calls first appear in tree order.\n * @property {Handlers} handlers\n *   Applied handlers.\n * @property {(node: MdastNodes, parent: MdastParents | undefined) => Array<HastElementContent> | HastElementContent | undefined} one\n *   Transform an mdast node to hast.\n * @property {Options} options\n *   Configuration.\n * @property {(from: MdastNodes, node: HastNodes) => undefined} patch\n *   Copy a node’s positional info.\n * @property {<Type extends HastRootContent>(nodes: Array<Type>, loose?: boolean | undefined) => Array<HastText | Type>} wrap\n *   Wrap `nodes` with line endings between each node, adds initial/final line endings when `loose`.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {visit} from 'unist-util-visit'\nimport {position} from 'unist-util-position'\nimport {handlers as defaultHandlers} from './handlers/index.js'\n\nconst own = {}.hasOwnProperty\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Create `state` from an mdast tree.\n *\n * @param {MdastNodes} tree\n *   mdast node to transform.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {State}\n *   `state` function.\n */\nexport function createState(tree, options) {\n  const settings = options || emptyOptions\n  /** @type {Map<string, MdastDefinition>} */\n  const definitionById = new Map()\n  /** @type {Map<string, MdastFootnoteDefinition>} */\n  const footnoteById = new Map()\n  /** @type {Map<string, number>} */\n  const footnoteCounts = new Map()\n  /** @type {Handlers} */\n  // @ts-expect-error: the root handler returns a root.\n  // Hard to type.\n  const handlers = {...defaultHandlers, ...settings.handlers}\n\n  /** @type {State} */\n  const state = {\n    all,\n    applyData,\n    definitionById,\n    footnoteById,\n    footnoteCounts,\n    footnoteOrder: [],\n    handlers,\n    one,\n    options: settings,\n    patch,\n    wrap\n  }\n\n  visit(tree, function (node) {\n    if (node.type === 'definition' || node.type === 'footnoteDefinition') {\n      const map = node.type === 'definition' ? definitionById : footnoteById\n      const id = String(node.identifier).toUpperCase()\n\n      // Mimick CM behavior of link definitions.\n      // See: <https://github.com/syntax-tree/mdast-util-definitions/blob/9032189/lib/index.js#L20-L21>.\n      if (!map.has(id)) {\n        // @ts-expect-error: node type matches map.\n        map.set(id, node)\n      }\n    }\n  })\n\n  return state\n\n  /**\n   * Transform an mdast node into a hast node.\n   *\n   * @param {MdastNodes} node\n   *   mdast node.\n   * @param {MdastParents | undefined} [parent]\n   *   Parent of `node`.\n   * @returns {Array<HastElementContent> | HastElementContent | undefined}\n   *   Resulting hast node.\n   */\n  function one(node, parent) {\n    const type = node.type\n    const handle = state.handlers[type]\n\n    if (own.call(state.handlers, type) && handle) {\n      return handle(state, node, parent)\n    }\n\n    if (state.options.passThrough && state.options.passThrough.includes(type)) {\n      if ('children' in node) {\n        const {children, ...shallow} = node\n        const result = structuredClone(shallow)\n        // @ts-expect-error: TS doesn’t understand…\n        result.children = state.all(node)\n        // @ts-expect-error: TS doesn’t understand…\n        return result\n      }\n\n      // @ts-expect-error: it’s custom.\n      return structuredClone(node)\n    }\n\n    const unknown = state.options.unknownHandler || defaultUnknownHandler\n\n    return unknown(state, node, parent)\n  }\n\n  /**\n   * Transform the children of an mdast node into hast nodes.\n   *\n   * @param {MdastNodes} parent\n   *   mdast node to compile\n   * @returns {Array<HastElementContent>}\n   *   Resulting hast nodes.\n   */\n  function all(parent) {\n    /** @type {Array<HastElementContent>} */\n    const values = []\n\n    if ('children' in parent) {\n      const nodes = parent.children\n      let index = -1\n      while (++index < nodes.length) {\n        const result = state.one(nodes[index], parent)\n\n        // To do: see if we van clean this? Can we merge texts?\n        if (result) {\n          if (index && nodes[index - 1].type === 'break') {\n            if (!Array.isArray(result) && result.type === 'text') {\n              result.value = trimMarkdownSpaceStart(result.value)\n            }\n\n            if (!Array.isArray(result) && result.type === 'element') {\n              const head = result.children[0]\n\n              if (head && head.type === 'text') {\n                head.value = trimMarkdownSpaceStart(head.value)\n              }\n            }\n          }\n\n          if (Array.isArray(result)) {\n            values.push(...result)\n          } else {\n            values.push(result)\n          }\n        }\n      }\n    }\n\n    return values\n  }\n}\n\n/**\n * Copy a node’s positional info.\n *\n * @param {MdastNodes} from\n *   mdast node to copy from.\n * @param {HastNodes} to\n *   hast node to copy into.\n * @returns {undefined}\n *   Nothing.\n */\nfunction patch(from, to) {\n  if (from.position) to.position = position(from)\n}\n\n/**\n * Honor the `data` of `from` and maybe generate an element instead of `to`.\n *\n * @template {HastNodes} Type\n *   Node type.\n * @param {MdastNodes} from\n *   mdast node to use data from.\n * @param {Type} to\n *   hast node to change.\n * @returns {HastElement | Type}\n *   Nothing.\n */\nfunction applyData(from, to) {\n  /** @type {HastElement | Type} */\n  let result = to\n\n  // Handle `data.hName`, `data.hProperties, `data.hChildren`.\n  if (from && from.data) {\n    const hName = from.data.hName\n    const hChildren = from.data.hChildren\n    const hProperties = from.data.hProperties\n\n    if (typeof hName === 'string') {\n      // Transforming the node resulted in an element with a different name\n      // than wanted:\n      if (result.type === 'element') {\n        result.tagName = hName\n      }\n      // Transforming the node resulted in a non-element, which happens for\n      // raw, text, and root nodes (unless custom handlers are passed).\n      // The intent of `hName` is to create an element, but likely also to keep\n      // the content around (otherwise: pass `hChildren`).\n      else {\n        /** @type {Array<HastElementContent>} */\n        // @ts-expect-error: assume no doctypes in `root`.\n        const children = 'children' in result ? result.children : [result]\n        result = {type: 'element', tagName: hName, properties: {}, children}\n      }\n    }\n\n    if (result.type === 'element' && hProperties) {\n      Object.assign(result.properties, structuredClone(hProperties))\n    }\n\n    if (\n      'children' in result &&\n      result.children &&\n      hChildren !== null &&\n      hChildren !== undefined\n    ) {\n      result.children = hChildren\n    }\n  }\n\n  return result\n}\n\n/**\n * Transform an unknown node.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastNodes} node\n *   Unknown mdast node.\n * @returns {HastElement | HastText}\n *   Resulting hast node.\n */\nfunction defaultUnknownHandler(state, node) {\n  const data = node.data || {}\n  /** @type {HastElement | HastText} */\n  const result =\n    'value' in node &&\n    !(own.call(data, 'hProperties') || own.call(data, 'hChildren'))\n      ? {type: 'text', value: node.value}\n      : {\n          type: 'element',\n          tagName: 'div',\n          properties: {},\n          children: state.all(node)\n        }\n\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n\n/**\n * Wrap `nodes` with line endings between each node.\n *\n * @template {HastRootContent} Type\n *   Node type.\n * @param {Array<Type>} nodes\n *   List of nodes to wrap.\n * @param {boolean | undefined} [loose=false]\n *   Whether to add line endings at start and end (default: `false`).\n * @returns {Array<HastText | Type>}\n *   Wrapped nodes.\n */\nexport function wrap(nodes, loose) {\n  /** @type {Array<HastText | Type>} */\n  const result = []\n  let index = -1\n\n  if (loose) {\n    result.push({type: 'text', value: '\\n'})\n  }\n\n  while (++index < nodes.length) {\n    if (index) result.push({type: 'text', value: '\\n'})\n    result.push(nodes[index])\n  }\n\n  if (loose && nodes.length > 0) {\n    result.push({type: 'text', value: '\\n'})\n  }\n\n  return result\n}\n\n/**\n * Trim spaces and tabs at the start of `value`.\n *\n * @param {string} value\n *   Value to trim.\n * @returns {string}\n *   Result.\n */\nfunction trimMarkdownSpaceStart(value) {\n  let index = 0\n  let code = value.charCodeAt(index)\n\n  while (code === 9 || code === 32) {\n    index++\n    code = value.charCodeAt(index)\n  }\n\n  return value.slice(index)\n}\n","/**\n * @import {Nodes as HastNodes} from 'hast'\n * @import {Nodes as MdastNodes} from 'mdast'\n * @import {Options} from './state.js'\n */\n\nimport {ok as assert} from 'devlop'\nimport {footer} from './footer.js'\nimport {createState} from './state.js'\n\n/**\n * Transform mdast to hast.\n *\n * ##### Notes\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most utilities ignore `raw` nodes but two notable ones don’t:\n *\n * *   `hast-util-to-html` also has an option `allowDangerousHtml` which will\n *     output the raw HTML.\n *     This is typically discouraged as noted by the option name but is useful\n *     if you completely trust authors\n * *   `hast-util-raw` can handle the raw embedded HTML strings by parsing them\n *     into standard hast nodes (`element`, `text`, etc).\n *     This is a heavy task as it needs a full HTML parser, but it is the only\n *     way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `mdast-util-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=x></p>\n * <script>alert(x) // `x` now refers to the DOM `p#x` element</script>\n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * Example: headings (DOM clobbering) in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * *   when the node has a `value` (and doesn’t have `data.hName`,\n *     `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n *     node\n * *   otherwise, create a `<div>` element (which could be changed with\n *     `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @param {MdastNodes} tree\n *   mdast tree.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {HastNodes}\n *   hast tree.\n */\nexport function toHast(tree, options) {\n  const state = createState(tree, options)\n  const node = state.one(tree, undefined)\n  const foot = footer(state)\n  /** @type {HastNodes} */\n  const result = Array.isArray(node)\n    ? {type: 'root', children: node}\n    : node || {type: 'root', children: []}\n\n  if (foot) {\n    // If there’s a footer, there were definitions, meaning block\n    // content.\n    // So `result` is a parent node.\n    assert('children' in result)\n    result.children.push({type: 'text', value: '\\n'}, foot)\n  }\n\n  return result\n}\n","/**\n * @import {Root as HastRoot} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {Options as ToHastOptions} from 'mdast-util-to-hast'\n * @import {Processor} from 'unified'\n * @import {VFile} from 'vfile'\n */\n\n/**\n * @typedef {Omit<ToHastOptions, 'file'>} Options\n *\n * @callback TransformBridge\n *   Bridge-mode.\n *\n *   Runs the destination with the new hast tree.\n *   Discards result.\n * @param {MdastRoot} tree\n *   Tree.\n * @param {VFile} file\n *   File.\n * @returns {Promise<undefined>}\n *   Nothing.\n *\n * @callback TransformMutate\n *  Mutate-mode.\n *\n *  Further transformers run on the hast tree.\n * @param {MdastRoot} tree\n *   Tree.\n * @param {VFile} file\n *   File.\n * @returns {HastRoot}\n *   Tree (hast).\n */\n\nimport {toHast} from 'mdast-util-to-hast'\n\n/**\n * Turn markdown into HTML.\n *\n * ##### Notes\n *\n * ###### Signature\n *\n * * if a processor is given,\n *   runs the (rehype) plugins used on it with a hast tree,\n *   then discards the result (*bridge mode*)\n * * otherwise,\n *   returns a hast tree,\n *   the plugins used after `remarkRehype` are rehype plugins (*mutate mode*)\n *\n * > 👉 **Note**:\n * > It’s highly unlikely that you want to pass a `processor`.\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most plugins ignore `raw` nodes but two notable ones don’t:\n *\n * * `rehype-stringify` also has an option `allowDangerousHtml` which will\n *   output the raw HTML.\n *   This is typically discouraged as noted by the option name but is useful if\n *   you completely trust authors\n * * `rehype-raw` can handle the raw embedded HTML strings by parsing them\n *   into standard hast nodes (`element`, `text`, etc);\n *   this is a heavy task as it needs a full HTML parser,\n *   but it is the only way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark,\n * which we follow by default.\n * They are supported by GitHub,\n * so footnotes can be enabled in markdown with `remark-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes,\n * which is hidden for sighted users but shown to assistive technology.\n * When your page is not in English,\n * you must define translated values.\n *\n * Back references use ARIA attributes,\n * but the section label itself uses a heading that is hidden with an\n * `sr-only` class.\n * To show it to sighted users,\n * define different attributes in `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem,\n * as it links footnote calls to footnote definitions on the page through `id`\n * attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=x></p>\n * <script>alert(x) // `x` now refers to the DOM `p#x` element</script>\n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * *Example: headings (DOM clobbering)* in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * * when the node has a `value`\n *   (and doesn’t have `data.hName`, `data.hProperties`, or `data.hChildren`,\n *   see later),\n *   create a hast `text` node\n * * otherwise,\n *   create a `<div>` element (which could be changed with `data.hName`),\n *   with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @overload\n * @param {Processor} processor\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformBridge}\n *\n * @overload\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformMutate}\n *\n * @overload\n * @param {Readonly<Options> | Processor | null | undefined} [destination]\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformBridge | TransformMutate}\n *\n * @param {Readonly<Options> | Processor | null | undefined} [destination]\n *   Processor or configuration (optional).\n * @param {Readonly<Options> | null | undefined} [options]\n *   When a processor was given,\n *   configuration (optional).\n * @returns {TransformBridge | TransformMutate}\n *   Transform.\n */\nexport default function remarkRehype(destination, options) {\n  if (destination && 'run' in destination) {\n    /**\n     * @type {TransformBridge}\n     */\n    return async function (tree, file) {\n      // Cast because root in -> root out.\n      const hastTree = /** @type {HastRoot} */ (\n        toHast(tree, {file, ...options})\n      )\n      await destination.run(hastTree, file)\n    }\n  }\n\n  /**\n   * @type {TransformMutate}\n   */\n  return function (tree, file) {\n    // Cast because root in -> root out.\n    // To do: in the future, disallow ` || options` fallback.\n    // With `unified-engine`, `destination` can be `undefined` but\n    // `options` will be the file set.\n    // We should not pass that as `options`.\n    return /** @type {HastRoot} */ (\n      toHast(tree, {file, ...(destination || options)})\n    )\n  }\n}\n","/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n *   Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n  if (error) {\n    throw error\n  }\n}\n","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","// To do: remove `void`s\n// To do: remove `null` from output of our APIs, allow it as user APIs.\n\n/**\n * @typedef {(error?: Error | null | undefined, ...output: Array<any>) => void} Callback\n *   Callback.\n *\n * @typedef {(...input: Array<any>) => any} Middleware\n *   Ware.\n *\n * @typedef Pipeline\n *   Pipeline.\n * @property {Run} run\n *   Run the pipeline.\n * @property {Use} use\n *   Add middleware.\n *\n * @typedef {(...input: Array<any>) => void} Run\n *   Call all middleware.\n *\n *   Calls `done` on completion with either an error or the output of the\n *   last middleware.\n *\n *   > 👉 **Note**: as the length of input defines whether async functions get a\n *   > `next` function,\n *   > it’s recommended to keep `input` at one value normally.\n\n *\n * @typedef {(fn: Middleware) => Pipeline} Use\n *   Add middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n *   Pipeline.\n */\nexport function trough() {\n  /** @type {Array<Middleware>} */\n  const fns = []\n  /** @type {Pipeline} */\n  const pipeline = {run, use}\n\n  return pipeline\n\n  /** @type {Run} */\n  function run(...values) {\n    let middlewareIndex = -1\n    /** @type {Callback} */\n    const callback = values.pop()\n\n    if (typeof callback !== 'function') {\n      throw new TypeError('Expected function as last argument, not ' + callback)\n    }\n\n    next(null, ...values)\n\n    /**\n     * Run the next `fn`, or we’re done.\n     *\n     * @param {Error | null | undefined} error\n     * @param {Array<any>} output\n     */\n    function next(error, ...output) {\n      const fn = fns[++middlewareIndex]\n      let index = -1\n\n      if (error) {\n        callback(error)\n        return\n      }\n\n      // Copy non-nullish input into values.\n      while (++index < values.length) {\n        if (output[index] === null || output[index] === undefined) {\n          output[index] = values[index]\n        }\n      }\n\n      // Save the newly created `output` for the next call.\n      values = output\n\n      // Next or done.\n      if (fn) {\n        wrap(fn, next)(...output)\n      } else {\n        callback(null, ...output)\n      }\n    }\n  }\n\n  /** @type {Use} */\n  function use(middelware) {\n    if (typeof middelware !== 'function') {\n      throw new TypeError(\n        'Expected `middelware` to be a function, not ' + middelware\n      )\n    }\n\n    fns.push(middelware)\n    return pipeline\n  }\n}\n\n/**\n * Wrap `middleware` into a uniform interface.\n *\n * You can pass all input to the resulting function.\n * `callback` is then called with the output of `middleware`.\n *\n * If `middleware` accepts more arguments than the later given in input,\n * an extra `done` function is passed to it after that input,\n * which must be called by `middleware`.\n *\n * The first value in `input` is the main input value.\n * All other input values are the rest input values.\n * The values given to `callback` are the input values,\n * merged with every non-nullish output value.\n *\n * * if `middleware` throws an error,\n *   returns a promise that is rejected,\n *   or calls the given `done` function with an error,\n *   `callback` is called with that error\n * * if `middleware` returns a value or returns a promise that is resolved,\n *   that value is the main output value\n * * if `middleware` calls `done`,\n *   all non-nullish values except for the first one (the error) overwrite the\n *   output values\n *\n * @param {Middleware} middleware\n *   Function to wrap.\n * @param {Callback} callback\n *   Callback called with the output of `middleware`.\n * @returns {Run}\n *   Wrapped middleware.\n */\nexport function wrap(middleware, callback) {\n  /** @type {boolean} */\n  let called\n\n  return wrapped\n\n  /**\n   * Call `middleware`.\n   * @this {any}\n   * @param {Array<any>} parameters\n   * @returns {void}\n   */\n  function wrapped(...parameters) {\n    const fnExpectsCallback = middleware.length > parameters.length\n    /** @type {any} */\n    let result\n\n    if (fnExpectsCallback) {\n      parameters.push(done)\n    }\n\n    try {\n      result = middleware.apply(this, parameters)\n    } catch (error) {\n      const exception = /** @type {Error} */ (error)\n\n      // Well, this is quite the pickle.\n      // `middleware` received a callback and called it synchronously, but that\n      // threw an error.\n      // The only thing left to do is to throw the thing instead.\n      if (fnExpectsCallback && called) {\n        throw exception\n      }\n\n      return done(exception)\n    }\n\n    if (!fnExpectsCallback) {\n      if (result && result.then && typeof result.then === 'function') {\n        result.then(then, done)\n      } else if (result instanceof Error) {\n        done(result)\n      } else {\n        then(result)\n      }\n    }\n  }\n\n  /**\n   * Call `callback`, only once.\n   *\n   * @type {Callback}\n   */\n  function done(error, ...output) {\n    if (!called) {\n      called = true\n      callback(error, ...output)\n    }\n  }\n\n  /**\n   * Call `done` with one value.\n   *\n   * @param {any} [value]\n   */\n  function then(value) {\n    done(null, value)\n  }\n}\n","// A derivative work based on:\n// <https://github.com/browserify/path-browserify>.\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node’s internal `path` module:\n// <https://github.com/nodejs/node/blob/master/lib/path.js>.\n// Which is licensed:\n//\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nexport const minpath = {basename, dirname, extname, join, sep: '/'}\n\n/* eslint-disable max-depth, complexity */\n\n/**\n * Get the basename from a path.\n *\n * @param {string} path\n *   File path.\n * @param {string | null | undefined} [extname]\n *   Extension to strip.\n * @returns {string}\n *   Stem or basename.\n */\nfunction basename(path, extname) {\n  if (extname !== undefined && typeof extname !== 'string') {\n    throw new TypeError('\"ext\" argument must be a string')\n  }\n\n  assertPath(path)\n  let start = 0\n  let end = -1\n  let index = path.length\n  /** @type {boolean | undefined} */\n  let seenNonSlash\n\n  if (\n    extname === undefined ||\n    extname.length === 0 ||\n    extname.length > path.length\n  ) {\n    while (index--) {\n      if (path.codePointAt(index) === 47 /* `/` */) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now.\n        if (seenNonSlash) {\n          start = index + 1\n          break\n        }\n      } else if (end < 0) {\n        // We saw the first non-path separator, mark this as the end of our\n        // path component.\n        seenNonSlash = true\n        end = index + 1\n      }\n    }\n\n    return end < 0 ? '' : path.slice(start, end)\n  }\n\n  if (extname === path) {\n    return ''\n  }\n\n  let firstNonSlashEnd = -1\n  let extnameIndex = extname.length - 1\n\n  while (index--) {\n    if (path.codePointAt(index) === 47 /* `/` */) {\n      // If we reached a path separator that was not part of a set of path\n      // separators at the end of the string, stop now.\n      if (seenNonSlash) {\n        start = index + 1\n        break\n      }\n    } else {\n      if (firstNonSlashEnd < 0) {\n        // We saw the first non-path separator, remember this index in case\n        // we need it if the extension ends up not matching.\n        seenNonSlash = true\n        firstNonSlashEnd = index + 1\n      }\n\n      if (extnameIndex > -1) {\n        // Try to match the explicit extension.\n        if (path.codePointAt(index) === extname.codePointAt(extnameIndex--)) {\n          if (extnameIndex < 0) {\n            // We matched the extension, so mark this as the end of our path\n            // component\n            end = index\n          }\n        } else {\n          // Extension does not match, so our result is the entire path\n          // component\n          extnameIndex = -1\n          end = firstNonSlashEnd\n        }\n      }\n    }\n  }\n\n  if (start === end) {\n    end = firstNonSlashEnd\n  } else if (end < 0) {\n    end = path.length\n  }\n\n  return path.slice(start, end)\n}\n\n/**\n * Get the dirname from a path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   File path.\n */\nfunction dirname(path) {\n  assertPath(path)\n\n  if (path.length === 0) {\n    return '.'\n  }\n\n  let end = -1\n  let index = path.length\n  /** @type {boolean | undefined} */\n  let unmatchedSlash\n\n  // Prefix `--` is important to not run on `0`.\n  while (--index) {\n    if (path.codePointAt(index) === 47 /* `/` */) {\n      if (unmatchedSlash) {\n        end = index\n        break\n      }\n    } else if (!unmatchedSlash) {\n      // We saw the first non-path separator\n      unmatchedSlash = true\n    }\n  }\n\n  return end < 0\n    ? path.codePointAt(0) === 47 /* `/` */\n      ? '/'\n      : '.'\n    : end === 1 && path.codePointAt(0) === 47 /* `/` */\n      ? '//'\n      : path.slice(0, end)\n}\n\n/**\n * Get an extname from a path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   Extname.\n */\nfunction extname(path) {\n  assertPath(path)\n\n  let index = path.length\n\n  let end = -1\n  let startPart = 0\n  let startDot = -1\n  // Track the state of characters (if any) we see before our first dot and\n  // after any path separator we find.\n  let preDotState = 0\n  /** @type {boolean | undefined} */\n  let unmatchedSlash\n\n  while (index--) {\n    const code = path.codePointAt(index)\n\n    if (code === 47 /* `/` */) {\n      // If we reached a path separator that was not part of a set of path\n      // separators at the end of the string, stop now.\n      if (unmatchedSlash) {\n        startPart = index + 1\n        break\n      }\n\n      continue\n    }\n\n    if (end < 0) {\n      // We saw the first non-path separator, mark this as the end of our\n      // extension.\n      unmatchedSlash = true\n      end = index + 1\n    }\n\n    if (code === 46 /* `.` */) {\n      // If this is our first dot, mark it as the start of our extension.\n      if (startDot < 0) {\n        startDot = index\n      } else if (preDotState !== 1) {\n        preDotState = 1\n      }\n    } else if (startDot > -1) {\n      // We saw a non-dot and non-path separator before our dot, so we should\n      // have a good chance at having a non-empty extension.\n      preDotState = -1\n    }\n  }\n\n  if (\n    startDot < 0 ||\n    end < 0 ||\n    // We saw a non-dot character immediately before the dot.\n    preDotState === 0 ||\n    // The (right-most) trimmed path component is exactly `..`.\n    (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n  ) {\n    return ''\n  }\n\n  return path.slice(startDot, end)\n}\n\n/**\n * Join segments from a path.\n *\n * @param {Array<string>} segments\n *   Path segments.\n * @returns {string}\n *   File path.\n */\nfunction join(...segments) {\n  let index = -1\n  /** @type {string | undefined} */\n  let joined\n\n  while (++index < segments.length) {\n    assertPath(segments[index])\n\n    if (segments[index]) {\n      joined =\n        joined === undefined ? segments[index] : joined + '/' + segments[index]\n    }\n  }\n\n  return joined === undefined ? '.' : normalize(joined)\n}\n\n/**\n * Normalize a basic file path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   File path.\n */\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\nfunction normalize(path) {\n  assertPath(path)\n\n  const absolute = path.codePointAt(0) === 47 /* `/` */\n\n  // Normalize the path according to POSIX rules.\n  let value = normalizeString(path, !absolute)\n\n  if (value.length === 0 && !absolute) {\n    value = '.'\n  }\n\n  if (value.length > 0 && path.codePointAt(path.length - 1) === 47 /* / */) {\n    value += '/'\n  }\n\n  return absolute ? '/' + value : value\n}\n\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n *   File path.\n * @param {boolean} allowAboveRoot\n *   Whether `..` can move above root.\n * @returns {string}\n *   File path.\n */\nfunction normalizeString(path, allowAboveRoot) {\n  let result = ''\n  let lastSegmentLength = 0\n  let lastSlash = -1\n  let dots = 0\n  let index = -1\n  /** @type {number | undefined} */\n  let code\n  /** @type {number} */\n  let lastSlashIndex\n\n  while (++index <= path.length) {\n    if (index < path.length) {\n      code = path.codePointAt(index)\n    } else if (code === 47 /* `/` */) {\n      break\n    } else {\n      code = 47 /* `/` */\n    }\n\n    if (code === 47 /* `/` */) {\n      if (lastSlash === index - 1 || dots === 1) {\n        // Empty.\n      } else if (lastSlash !== index - 1 && dots === 2) {\n        if (\n          result.length < 2 ||\n          lastSegmentLength !== 2 ||\n          result.codePointAt(result.length - 1) !== 46 /* `.` */ ||\n          result.codePointAt(result.length - 2) !== 46 /* `.` */\n        ) {\n          if (result.length > 2) {\n            lastSlashIndex = result.lastIndexOf('/')\n\n            if (lastSlashIndex !== result.length - 1) {\n              if (lastSlashIndex < 0) {\n                result = ''\n                lastSegmentLength = 0\n              } else {\n                result = result.slice(0, lastSlashIndex)\n                lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n              }\n\n              lastSlash = index\n              dots = 0\n              continue\n            }\n          } else if (result.length > 0) {\n            result = ''\n            lastSegmentLength = 0\n            lastSlash = index\n            dots = 0\n            continue\n          }\n        }\n\n        if (allowAboveRoot) {\n          result = result.length > 0 ? result + '/..' : '..'\n          lastSegmentLength = 2\n        }\n      } else {\n        if (result.length > 0) {\n          result += '/' + path.slice(lastSlash + 1, index)\n        } else {\n          result = path.slice(lastSlash + 1, index)\n        }\n\n        lastSegmentLength = index - lastSlash - 1\n      }\n\n      lastSlash = index\n      dots = 0\n    } else if (code === 46 /* `.` */ && dots > -1) {\n      dots++\n    } else {\n      dots = -1\n    }\n  }\n\n  return result\n}\n\n/**\n * Make sure `path` is a string.\n *\n * @param {string} path\n *   File path.\n * @returns {asserts path is string}\n *   Nothing.\n */\nfunction assertPath(path) {\n  if (typeof path !== 'string') {\n    throw new TypeError(\n      'Path must be a string. Received ' + JSON.stringify(path)\n    )\n  }\n}\n\n/* eslint-enable max-depth, complexity */\n","// Somewhat based on:\n// <https://github.com/defunctzombie/node-process/blob/master/browser.js>.\n// But I don’t think one tiny line of code can be copyrighted. 😅\nexport const minproc = {cwd}\n\nfunction cwd() {\n  return '/'\n}\n","/**\n * Checks if a value has the shape of a WHATWG URL object.\n *\n * Using a symbol or instanceof would not be able to recognize URL objects\n * coming from other implementations (e.g. in Electron), so instead we are\n * checking some well known properties for a lack of a better test.\n *\n * We use `href` and `protocol` as they are the only properties that are\n * easy to retrieve and calculate due to the lazy nature of the getters.\n *\n * We check for auth attribute to distinguish legacy url instance with\n * WHATWG URL instance.\n *\n * @param {unknown} fileUrlOrPath\n *   File path or URL.\n * @returns {fileUrlOrPath is URL}\n *   Whether it’s a URL.\n */\n// From: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js#L720>\nexport function isUrl(fileUrlOrPath) {\n  return Boolean(\n    fileUrlOrPath !== null &&\n      typeof fileUrlOrPath === 'object' &&\n      'href' in fileUrlOrPath &&\n      fileUrlOrPath.href &&\n      'protocol' in fileUrlOrPath &&\n      fileUrlOrPath.protocol &&\n      // @ts-expect-error: indexing is fine.\n      fileUrlOrPath.auth === undefined\n  )\n}\n","import {isUrl} from './minurl.shared.js'\n\nexport {isUrl} from './minurl.shared.js'\n\n// See: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js>\n\n/**\n * @param {URL | string} path\n *   File URL.\n * @returns {string}\n *   File URL.\n */\nexport function urlToPath(path) {\n  if (typeof path === 'string') {\n    path = new URL(path)\n  } else if (!isUrl(path)) {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError(\n      'The \"path\" argument must be of type string or an instance of URL. Received `' +\n        path +\n        '`'\n    )\n    error.code = 'ERR_INVALID_ARG_TYPE'\n    throw error\n  }\n\n  if (path.protocol !== 'file:') {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError('The URL must be of scheme file')\n    error.code = 'ERR_INVALID_URL_SCHEME'\n    throw error\n  }\n\n  return getPathFromURLPosix(path)\n}\n\n/**\n * Get a path from a POSIX URL.\n *\n * @param {URL} url\n *   URL.\n * @returns {string}\n *   File path.\n */\nfunction getPathFromURLPosix(url) {\n  if (url.hostname !== '') {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError(\n      'File URL host must be \"localhost\" or empty on darwin'\n    )\n    error.code = 'ERR_INVALID_FILE_URL_HOST'\n    throw error\n  }\n\n  const pathname = url.pathname\n  let index = -1\n\n  while (++index < pathname.length) {\n    if (\n      pathname.codePointAt(index) === 37 /* `%` */ &&\n      pathname.codePointAt(index + 1) === 50 /* `2` */\n    ) {\n      const third = pathname.codePointAt(index + 2)\n      if (third === 70 /* `F` */ || third === 102 /* `f` */) {\n        /** @type {NodeJS.ErrnoException} */\n        const error = new TypeError(\n          'File URL path must not include encoded / characters'\n        )\n        error.code = 'ERR_INVALID_FILE_URL_PATH'\n        throw error\n      }\n    }\n  }\n\n  return decodeURIComponent(pathname)\n}\n","/**\n * @import {Node, Point, Position} from 'unist'\n * @import {Options as MessageOptions} from 'vfile-message'\n * @import {Compatible, Data, Map, Options, Value} from 'vfile'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n */\n\nimport {VFileMessage} from 'vfile-message'\nimport {minpath} from '#minpath'\nimport {minproc} from '#minproc'\nimport {urlToPath, isUrl} from '#minurl'\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n */\nconst order = /** @type {const} */ ([\n  'history',\n  'path',\n  'basename',\n  'stem',\n  'extname',\n  'dirname'\n])\n\nexport class VFile {\n  /**\n   * Create a new virtual file.\n   *\n   * `options` is treated as:\n   *\n   * *   `string` or `Uint8Array` — `{value: options}`\n   * *   `URL` — `{path: options}`\n   * *   `VFile` — shallow copies its data over to the new file\n   * *   `object` — all fields are shallow copied over to the new file\n   *\n   * Path related fields are set in the following order (least specific to\n   * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n   * `dirname`.\n   *\n   * You cannot set `dirname` or `extname` without setting either `history`,\n   * `path`, `basename`, or `stem` too.\n   *\n   * @param {Compatible | null | undefined} [value]\n   *   File value.\n   * @returns\n   *   New instance.\n   */\n  constructor(value) {\n    /** @type {Options | VFile} */\n    let options\n\n    if (!value) {\n      options = {}\n    } else if (isUrl(value)) {\n      options = {path: value}\n    } else if (typeof value === 'string' || isUint8Array(value)) {\n      options = {value}\n    } else {\n      options = value\n    }\n\n    /* eslint-disable no-unused-expressions */\n\n    /**\n     * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n     *\n     * @type {string}\n     */\n    // Prevent calling `cwd` (which could be expensive) if it’s not needed;\n    // the empty string will be overridden in the next block.\n    this.cwd = 'cwd' in options ? '' : minproc.cwd()\n\n    /**\n     * Place to store custom info (default: `{}`).\n     *\n     * It’s OK to store custom data directly on the file but moving it to\n     * `data` is recommended.\n     *\n     * @type {Data}\n     */\n    this.data = {}\n\n    /**\n     * List of file paths the file moved between.\n     *\n     * The first is the original path and the last is the current path.\n     *\n     * @type {Array<string>}\n     */\n    this.history = []\n\n    /**\n     * List of messages associated with the file.\n     *\n     * @type {Array<VFileMessage>}\n     */\n    this.messages = []\n\n    /**\n     * Raw value.\n     *\n     * @type {Value}\n     */\n    this.value\n\n    // The below are non-standard, they are “well-known”.\n    // As in, used in several tools.\n    /**\n     * Source map.\n     *\n     * This type is equivalent to the `RawSourceMap` type from the `source-map`\n     * module.\n     *\n     * @type {Map | null | undefined}\n     */\n    this.map\n\n    /**\n     * Custom, non-string, compiled, representation.\n     *\n     * This is used by unified to store non-string results.\n     * One example is when turning markdown into React nodes.\n     *\n     * @type {unknown}\n     */\n    this.result\n\n    /**\n     * Whether a file was saved to disk.\n     *\n     * This is used by vfile reporters.\n     *\n     * @type {boolean}\n     */\n    this.stored\n    /* eslint-enable no-unused-expressions */\n\n    // Set path related properties in the correct order.\n    let index = -1\n\n    while (++index < order.length) {\n      const field = order[index]\n\n      // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n      // `vfile`s too.\n      if (\n        field in options &&\n        options[field] !== undefined &&\n        options[field] !== null\n      ) {\n        // @ts-expect-error: TS doesn’t understand basic reality.\n        this[field] = field === 'history' ? [...options[field]] : options[field]\n      }\n    }\n\n    /** @type {string} */\n    let field\n\n    // Set non-path related properties.\n    for (field in options) {\n      // @ts-expect-error: fine to set other things.\n      if (!order.includes(field)) {\n        // @ts-expect-error: fine to set other things.\n        this[field] = options[field]\n      }\n    }\n  }\n\n  /**\n   * Get the basename (including extname) (example: `'index.min.js'`).\n   *\n   * @returns {string | undefined}\n   *   Basename.\n   */\n  get basename() {\n    return typeof this.path === 'string'\n      ? minpath.basename(this.path)\n      : undefined\n  }\n\n  /**\n   * Set basename (including extname) (`'index.min.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   *\n   * @param {string} basename\n   *   Basename.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set basename(basename) {\n    assertNonEmpty(basename, 'basename')\n    assertPart(basename, 'basename')\n    this.path = minpath.join(this.dirname || '', basename)\n  }\n\n  /**\n   * Get the parent path (example: `'~'`).\n   *\n   * @returns {string | undefined}\n   *   Dirname.\n   */\n  get dirname() {\n    return typeof this.path === 'string'\n      ? minpath.dirname(this.path)\n      : undefined\n  }\n\n  /**\n   * Set the parent path (example: `'~'`).\n   *\n   * Cannot be set if there’s no `path` yet.\n   *\n   * @param {string | undefined} dirname\n   *   Dirname.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set dirname(dirname) {\n    assertPath(this.basename, 'dirname')\n    this.path = minpath.join(dirname || '', this.basename)\n  }\n\n  /**\n   * Get the extname (including dot) (example: `'.js'`).\n   *\n   * @returns {string | undefined}\n   *   Extname.\n   */\n  get extname() {\n    return typeof this.path === 'string'\n      ? minpath.extname(this.path)\n      : undefined\n  }\n\n  /**\n   * Set the extname (including dot) (example: `'.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be set if there’s no `path` yet.\n   *\n   * @param {string | undefined} extname\n   *   Extname.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set extname(extname) {\n    assertPart(extname, 'extname')\n    assertPath(this.dirname, 'extname')\n\n    if (extname) {\n      if (extname.codePointAt(0) !== 46 /* `.` */) {\n        throw new Error('`extname` must start with `.`')\n      }\n\n      if (extname.includes('.', 1)) {\n        throw new Error('`extname` cannot contain multiple dots')\n      }\n    }\n\n    this.path = minpath.join(this.dirname, this.stem + (extname || ''))\n  }\n\n  /**\n   * Get the full path (example: `'~/index.min.js'`).\n   *\n   * @returns {string}\n   *   Path.\n   */\n  get path() {\n    return this.history[this.history.length - 1]\n  }\n\n  /**\n   * Set the full path (example: `'~/index.min.js'`).\n   *\n   * Cannot be nullified.\n   * You can set a file URL (a `URL` object with a `file:` protocol) which will\n   * be turned into a path with `url.fileURLToPath`.\n   *\n   * @param {URL | string} path\n   *   Path.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set path(path) {\n    if (isUrl(path)) {\n      path = urlToPath(path)\n    }\n\n    assertNonEmpty(path, 'path')\n\n    if (this.path !== path) {\n      this.history.push(path)\n    }\n  }\n\n  /**\n   * Get the stem (basename w/o extname) (example: `'index.min'`).\n   *\n   * @returns {string | undefined}\n   *   Stem.\n   */\n  get stem() {\n    return typeof this.path === 'string'\n      ? minpath.basename(this.path, this.extname)\n      : undefined\n  }\n\n  /**\n   * Set the stem (basename w/o extname) (example: `'index.min'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   *\n   * @param {string} stem\n   *   Stem.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set stem(stem) {\n    assertNonEmpty(stem, 'stem')\n    assertPart(stem, 'stem')\n    this.path = minpath.join(this.dirname || '', stem + (this.extname || ''))\n  }\n\n  // Normal prototypal methods.\n  /**\n   * Create a fatal message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `true` (error; file not usable)\n   * and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {never}\n   *   Never.\n   * @throws {VFileMessage}\n   *   Message.\n   */\n  fail(causeOrReason, optionsOrParentOrPlace, origin) {\n    // @ts-expect-error: the overloads are fine.\n    const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n    message.fatal = true\n\n    throw message\n  }\n\n  /**\n   * Create an info message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `undefined` (info; change\n   * likely not needed) and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  info(causeOrReason, optionsOrParentOrPlace, origin) {\n    // @ts-expect-error: the overloads are fine.\n    const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n    message.fatal = undefined\n\n    return message\n  }\n\n  /**\n   * Create a message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `false` (warning; change may be\n   * needed) and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  message(causeOrReason, optionsOrParentOrPlace, origin) {\n    const message = new VFileMessage(\n      // @ts-expect-error: the overloads are fine.\n      causeOrReason,\n      optionsOrParentOrPlace,\n      origin\n    )\n\n    if (this.path) {\n      message.name = this.path + ':' + message.name\n      message.file = this.path\n    }\n\n    message.fatal = false\n\n    this.messages.push(message)\n\n    return message\n  }\n\n  /**\n   * Serialize the file.\n   *\n   * > **Note**: which encodings are supported depends on the engine.\n   * > For info on Node.js, see:\n   * > <https://nodejs.org/api/util.html#whatwg-supported-encodings>.\n   *\n   * @param {string | null | undefined} [encoding='utf8']\n   *   Character encoding to understand `value` as when it’s a `Uint8Array`\n   *   (default: `'utf-8'`).\n   * @returns {string}\n   *   Serialized file.\n   */\n  toString(encoding) {\n    if (this.value === undefined) {\n      return ''\n    }\n\n    if (typeof this.value === 'string') {\n      return this.value\n    }\n\n    const decoder = new TextDecoder(encoding || undefined)\n    return decoder.decode(this.value)\n  }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n *   File path part.\n * @param {string} name\n *   Part name.\n * @returns {undefined}\n *   Nothing.\n */\nfunction assertPart(part, name) {\n  if (part && part.includes(minpath.sep)) {\n    throw new Error(\n      '`' + name + '` cannot be a path: did not expect `' + minpath.sep + '`'\n    )\n  }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n *   Thing.\n * @param {string} name\n *   Part name.\n * @returns {asserts part is string}\n *   Nothing.\n */\nfunction assertNonEmpty(part, name) {\n  if (!part) {\n    throw new Error('`' + name + '` cannot be empty')\n  }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n *   Path.\n * @param {string} name\n *   Dependency name.\n * @returns {asserts path is string}\n *   Nothing.\n */\nfunction assertPath(path, name) {\n  if (!path) {\n    throw new Error('Setting `' + name + '` requires `path` to be set too')\n  }\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n *   thing.\n * @returns {value is Uint8Array}\n *   Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'byteLength' in value &&\n      'byteOffset' in value\n  )\n}\n","export const CallableInstance =\n  /**\n   * @type {new <Parameters extends Array<unknown>, Result>(property: string | symbol) => (...parameters: Parameters) => Result}\n   */\n  (\n    /** @type {unknown} */\n    (\n      /**\n       * @this {Function}\n       * @param {string | symbol} property\n       * @returns {(...parameters: Array<unknown>) => unknown}\n       */\n      function (property) {\n        const self = this\n        const constr = self.constructor\n        const proto = /** @type {Record<string | symbol, Function>} */ (\n          // Prototypes do exist.\n          // type-coverage:ignore-next-line\n          constr.prototype\n        )\n        const value = proto[property]\n        /** @type {(...parameters: Array<unknown>) => unknown} */\n        const apply = function () {\n          return value.apply(apply, arguments)\n        }\n\n        Object.setPrototypeOf(apply, proto)\n\n        // Not needed for us in `unified`: we only call this on the `copy`\n        // function,\n        // and we don't need to add its fields (`length`, `name`)\n        // over.\n        // See also: GH-246.\n        // const names = Object.getOwnPropertyNames(value)\n        //\n        // for (const p of names) {\n        //   const descriptor = Object.getOwnPropertyDescriptor(value, p)\n        //   if (descriptor) Object.defineProperty(apply, p, descriptor)\n        // }\n\n        return apply\n      }\n    )\n  )\n","/**\n * @typedef {import('trough').Pipeline} Pipeline\n *\n * @typedef {import('unist').Node} Node\n *\n * @typedef {import('vfile').Compatible} Compatible\n * @typedef {import('vfile').Value} Value\n *\n * @typedef {import('../index.js').CompileResultMap} CompileResultMap\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Settings} Settings\n */\n\n/**\n * @typedef {CompileResultMap[keyof CompileResultMap]} CompileResults\n *   Acceptable results from compilers.\n *\n *   To register custom results, add them to\n *   {@linkcode CompileResultMap}.\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The node that the compiler receives (default: `Node`).\n * @template {CompileResults} [Result=CompileResults]\n *   The thing that the compiler yields (default: `CompileResults`).\n * @callback Compiler\n *   A **compiler** handles the compiling of a syntax tree to something else\n *   (in most cases, text) (TypeScript type).\n *\n *   It is used in the stringify phase and called with a {@linkcode Node}\n *   and {@linkcode VFile} representation of the document to compile.\n *   It should return the textual representation of the given tree (typically\n *   `string`).\n *\n *   > **Note**: unified typically compiles by serializing: most compilers\n *   > return `string` (or `Uint8Array`).\n *   > Some compilers, such as the one configured with\n *   > [`rehype-react`][rehype-react], return other values (in this case, a\n *   > React tree).\n *   > If you’re using a compiler that doesn’t serialize, expect different\n *   > result values.\n *   >\n *   > To register custom results in TypeScript, add them to\n *   > {@linkcode CompileResultMap}.\n *\n *   [rehype-react]: https://github.com/rehypejs/rehype-react\n * @param {Tree} tree\n *   Tree to compile.\n * @param {VFile} file\n *   File associated with `tree`.\n * @returns {Result}\n *   New content: compiled text (`string` or `Uint8Array`, for `file.value`) or\n *   something else (for `file.result`).\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The node that the parser yields (default: `Node`)\n * @callback Parser\n *   A **parser** handles the parsing of text to a syntax tree.\n *\n *   It is used in the parse phase and is called with a `string` and\n *   {@linkcode VFile} of the document to parse.\n *   It must return the syntax tree representation of the given file\n *   ({@linkcode Node}).\n * @param {string} document\n *   Document to parse.\n * @param {VFile} file\n *   File associated with `document`.\n * @returns {Tree}\n *   Node representing the given file.\n */\n\n/**\n * @typedef {(\n *   Plugin<Array<any>, any, any> |\n *   PluginTuple<Array<any>, any, any> |\n *   Preset\n * )} Pluggable\n *   Union of the different ways to add plugins and settings.\n */\n\n/**\n * @typedef {Array<Pluggable>} PluggableList\n *   List of plugins and presets.\n */\n\n// Note: we can’t use `callback` yet as it messes up `this`:\n//  <https://github.com/microsoft/TypeScript/issues/55197>.\n/**\n * @template {Array<unknown>} [PluginParameters=[]]\n *   Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=Node]\n *   Value that is expected as input (default: `Node`).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node it expects.\n *   *   If the plugin sets a {@linkcode Parser}, this should be\n *       `string`.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be the\n *       node it expects.\n * @template [Output=Input]\n *   Value that is yielded as output (default: `Input`).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node that that yields.\n *   *   If the plugin sets a {@linkcode Parser}, this should be the\n *       node that it yields.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be\n *       result it yields.\n * @typedef {(\n *   (this: Processor, ...parameters: PluginParameters) =>\n *     Input extends string ? // Parser.\n *        Output extends Node | undefined ? undefined | void : never :\n *     Output extends CompileResults ? // Compiler.\n *        Input extends Node | undefined ? undefined | void : never :\n *     Transformer<\n *       Input extends Node ? Input : Node,\n *       Output extends Node ? Output : Node\n *     > | undefined | void\n * )} Plugin\n *   Single plugin.\n *\n *   Plugins configure the processors they are applied on in the following\n *   ways:\n *\n *   *   they change the processor, such as the parser, the compiler, or by\n *       configuring data\n *   *   they specify how to handle trees and files\n *\n *   In practice, they are functions that can receive options and configure the\n *   processor (`this`).\n *\n *   > **Note**: plugins are called when the processor is *frozen*, not when\n *   > they are applied.\n */\n\n/**\n * Tuple of a plugin and its configuration.\n *\n * The first item is a plugin, the rest are its parameters.\n *\n * @template {Array<unknown>} [TupleParameters=[]]\n *   Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=undefined]\n *   Value that is expected as input (optional).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node it expects.\n *   *   If the plugin sets a {@linkcode Parser}, this should be\n *       `string`.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be the\n *       node it expects.\n * @template [Output=undefined] (optional).\n *   Value that is yielded as output.\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node that that yields.\n *   *   If the plugin sets a {@linkcode Parser}, this should be the\n *       node that it yields.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be\n *       result it yields.\n * @typedef {(\n *   [\n *     plugin: Plugin<TupleParameters, Input, Output>,\n *     ...parameters: TupleParameters\n *   ]\n * )} PluginTuple\n */\n\n/**\n * @typedef Preset\n *   Sharable configuration.\n *\n *   They can contain plugins and settings.\n * @property {PluggableList | undefined} [plugins]\n *   List of plugins and presets (optional).\n * @property {Settings | undefined} [settings]\n *   Shared settings for parsers and compilers (optional).\n */\n\n/**\n * @template {VFile} [File=VFile]\n *   The file that the callback receives (default: `VFile`).\n * @callback ProcessCallback\n *   Callback called when the process is done.\n *\n *   Called with either an error or a result.\n * @param {Error | undefined} [error]\n *   Fatal error (optional).\n * @param {File | undefined} [file]\n *   Processed file (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The tree that the callback receives (default: `Node`).\n * @callback RunCallback\n *   Callback called when transformers are done.\n *\n *   Called with either an error or results.\n * @param {Error | undefined} [error]\n *   Fatal error (optional).\n * @param {Tree | undefined} [tree]\n *   Transformed tree (optional).\n * @param {VFile | undefined} [file]\n *   File (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Output=Node]\n *   Node type that the transformer yields (default: `Node`).\n * @callback TransformCallback\n *   Callback passed to transforms.\n *\n *   If the signature of a `transformer` accepts a third argument, the\n *   transformer may perform asynchronous operations, and must call it.\n * @param {Error | undefined} [error]\n *   Fatal error to stop the process (optional).\n * @param {Output | undefined} [tree]\n *   New, changed, tree (optional).\n * @param {VFile | undefined} [file]\n *   New, changed, file (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Input=Node]\n *   Node type that the transformer expects (default: `Node`).\n * @template {Node} [Output=Input]\n *   Node type that the transformer yields (default: `Input`).\n * @callback Transformer\n *   Transformers handle syntax trees and files.\n *\n *   They are functions that are called each time a syntax tree and file are\n *   passed through the run phase.\n *   When an error occurs in them (either because it’s thrown, returned,\n *   rejected, or passed to `next`), the process stops.\n *\n *   The run phase is handled by [`trough`][trough], see its documentation for\n *   the exact semantics of these functions.\n *\n *   > **Note**: you should likely ignore `next`: don’t accept it.\n *   > it supports callback-style async work.\n *   > But promises are likely easier to reason about.\n *\n *   [trough]: https://github.com/wooorm/trough#function-fninput-next\n * @param {Input} tree\n *   Tree to handle.\n * @param {VFile} file\n *   File to handle.\n * @param {TransformCallback<Output>} next\n *   Callback.\n * @returns {(\n *   Promise<Output | undefined | void> |\n *   Promise<never> | // For some reason this is needed separately.\n *   Output |\n *   Error |\n *   undefined |\n *   void\n * )}\n *   If you accept `next`, nothing.\n *   Otherwise:\n *\n *   *   `Error` — fatal error to stop the process\n *   *   `Promise<undefined>` or `undefined` — the next transformer keeps using\n *       same tree\n *   *   `Promise<Node>` or `Node` — new, changed, tree\n */\n\n/**\n * @template {Node | undefined} ParseTree\n *   Output of `parse`.\n * @template {Node | undefined} HeadTree\n *   Input for `run`.\n * @template {Node | undefined} TailTree\n *   Output for `run`.\n * @template {Node | undefined} CompileTree\n *   Input of `stringify`.\n * @template {CompileResults | undefined} CompileResult\n *   Output of `stringify`.\n * @template {Node | string | undefined} Input\n *   Input of plugin.\n * @template Output\n *   Output of plugin (optional).\n * @typedef {(\n *   Input extends string\n *     ? Output extends Node | undefined\n *       ? // Parser.\n *         Processor<\n *           Output extends undefined ? ParseTree : Output,\n *           HeadTree,\n *           TailTree,\n *           CompileTree,\n *           CompileResult\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : Output extends CompileResults\n *     ? Input extends Node | undefined\n *       ? // Compiler.\n *         Processor<\n *           ParseTree,\n *           HeadTree,\n *           TailTree,\n *           Input extends undefined ? CompileTree : Input,\n *           Output extends undefined ? CompileResult : Output\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : Input extends Node | undefined\n *     ? Output extends Node | undefined\n *       ? // Transform.\n *         Processor<\n *           ParseTree,\n *           HeadTree extends undefined ? Input : HeadTree,\n *           Output extends undefined ? TailTree : Output,\n *           CompileTree,\n *           CompileResult\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : // Unknown.\n *       Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * )} UsePlugin\n *   Create a processor based on the input/output of a {@link Plugin plugin}.\n */\n\n/**\n * @template {CompileResults | undefined} Result\n *   Node type that the transformer yields.\n * @typedef {(\n *   Result extends Value | undefined ?\n *     VFile :\n *     VFile & {result: Result}\n *   )} VFileWithOutput\n *   Type to generate a {@linkcode VFile} corresponding to a compiler result.\n *\n *   If a result that is not acceptable on a `VFile` is used, that will\n *   be stored on the `result` field of {@linkcode VFile}.\n */\n\nimport {bail} from 'bail'\nimport extend from 'extend'\nimport {ok as assert} from 'devlop'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\nimport {CallableInstance} from './callable-instance.js'\n\n// To do: next major: drop `Compiler`, `Parser`: prefer lowercase.\n\n// To do: we could start yielding `never` in TS when a parser is missing and\n// `parse` is called.\n// Currently, we allow directly setting `processor.parser`, which is untyped.\n\nconst own = {}.hasOwnProperty\n\n/**\n * @template {Node | undefined} [ParseTree=undefined]\n *   Output of `parse` (optional).\n * @template {Node | undefined} [HeadTree=undefined]\n *   Input for `run` (optional).\n * @template {Node | undefined} [TailTree=undefined]\n *   Output for `run` (optional).\n * @template {Node | undefined} [CompileTree=undefined]\n *   Input of `stringify` (optional).\n * @template {CompileResults | undefined} [CompileResult=undefined]\n *   Output of `stringify` (optional).\n * @extends {CallableInstance<[], Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>>}\n */\nexport class Processor extends CallableInstance {\n  /**\n   * Create a processor.\n   */\n  constructor() {\n    // If `Processor()` is called (w/o new), `copy` is called instead.\n    super('copy')\n\n    /**\n     * Compiler to use (deprecated).\n     *\n     * @deprecated\n     *   Use `compiler` instead.\n     * @type {(\n     *   Compiler<\n     *     CompileTree extends undefined ? Node : CompileTree,\n     *     CompileResult extends undefined ? CompileResults : CompileResult\n     *   > |\n     *   undefined\n     * )}\n     */\n    this.Compiler = undefined\n\n    /**\n     * Parser to use (deprecated).\n     *\n     * @deprecated\n     *   Use `parser` instead.\n     * @type {(\n     *   Parser<ParseTree extends undefined ? Node : ParseTree> |\n     *   undefined\n     * )}\n     */\n    this.Parser = undefined\n\n    // Note: the following fields are considered private.\n    // However, they are needed for tests, and TSC generates an untyped\n    // `private freezeIndex` field for, which trips `type-coverage` up.\n    // Instead, we use `@deprecated` to visualize that they shouldn’t be used.\n    /**\n     * Internal list of configured plugins.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Array<PluginTuple<Array<unknown>>>}\n     */\n    this.attachers = []\n\n    /**\n     * Compiler to use.\n     *\n     * @type {(\n     *   Compiler<\n     *     CompileTree extends undefined ? Node : CompileTree,\n     *     CompileResult extends undefined ? CompileResults : CompileResult\n     *   > |\n     *   undefined\n     * )}\n     */\n    this.compiler = undefined\n\n    /**\n     * Internal state to track where we are while freezing.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {number}\n     */\n    this.freezeIndex = -1\n\n    /**\n     * Internal state to track whether we’re frozen.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {boolean | undefined}\n     */\n    this.frozen = undefined\n\n    /**\n     * Internal state.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Data}\n     */\n    this.namespace = {}\n\n    /**\n     * Parser to use.\n     *\n     * @type {(\n     *   Parser<ParseTree extends undefined ? Node : ParseTree> |\n     *   undefined\n     * )}\n     */\n    this.parser = undefined\n\n    /**\n     * Internal list of configured transformers.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Pipeline}\n     */\n    this.transformers = trough()\n  }\n\n  /**\n   * Copy a processor.\n   *\n   * @deprecated\n   *   This is a private internal method and should not be used.\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   New *unfrozen* processor ({@linkcode Processor}) that is\n   *   configured to work the same as its ancestor.\n   *   When the descendant processor is configured in the future it does not\n   *   affect the ancestral processor.\n   */\n  copy() {\n    // Cast as the type parameters will be the same after attaching.\n    const destination =\n      /** @type {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>} */ (\n        new Processor()\n      )\n    let index = -1\n\n    while (++index < this.attachers.length) {\n      const attacher = this.attachers[index]\n      destination.use(...attacher)\n    }\n\n    destination.data(extend(true, {}, this.namespace))\n\n    return destination\n  }\n\n  /**\n   * Configure the processor with info available to all plugins.\n   * Information is stored in an object.\n   *\n   * Typically, options can be given to a specific plugin, but sometimes it\n   * makes sense to have information shared with several plugins.\n   * For example, a list of HTML elements that are self-closing, which is\n   * needed during all phases.\n   *\n   * > **Note**: setting information cannot occur on *frozen* processors.\n   * > Call the processor first to create a new unfrozen processor.\n   *\n   * > **Note**: to register custom data in TypeScript, augment the\n   * > {@linkcode Data} interface.\n   *\n   * @example\n   *   This example show how to get and set info:\n   *\n   *   ```js\n   *   import {unified} from 'unified'\n   *\n   *   const processor = unified().data('alpha', 'bravo')\n   *\n   *   processor.data('alpha') // => 'bravo'\n   *\n   *   processor.data() // => {alpha: 'bravo'}\n   *\n   *   processor.data({charlie: 'delta'})\n   *\n   *   processor.data() // => {charlie: 'delta'}\n   *   ```\n   *\n   * @template {keyof Data} Key\n   *\n   * @overload\n   * @returns {Data}\n   *\n   * @overload\n   * @param {Data} dataset\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {Key} key\n   * @returns {Data[Key]}\n   *\n   * @overload\n   * @param {Key} key\n   * @param {Data[Key]} value\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @param {Data | Key} [key]\n   *   Key to get or set, or entire dataset to set, or nothing to get the\n   *   entire dataset (optional).\n   * @param {Data[Key]} [value]\n   *   Value to set (optional).\n   * @returns {unknown}\n   *   The current processor when setting, the value at `key` when getting, or\n   *   the entire dataset when getting without key.\n   */\n  data(key, value) {\n    if (typeof key === 'string') {\n      // Set `key`.\n      if (arguments.length === 2) {\n        assertUnfrozen('data', this.frozen)\n        this.namespace[key] = value\n        return this\n      }\n\n      // Get `key`.\n      return (own.call(this.namespace, key) && this.namespace[key]) || undefined\n    }\n\n    // Set space.\n    if (key) {\n      assertUnfrozen('data', this.frozen)\n      this.namespace = key\n      return this\n    }\n\n    // Get space.\n    return this.namespace\n  }\n\n  /**\n   * Freeze a processor.\n   *\n   * Frozen processors are meant to be extended and not to be configured\n   * directly.\n   *\n   * When a processor is frozen it cannot be unfrozen.\n   * New processors working the same way can be created by calling the\n   * processor.\n   *\n   * It’s possible to freeze processors explicitly by calling `.freeze()`.\n   * Processors freeze automatically when `.parse()`, `.run()`, `.runSync()`,\n   * `.stringify()`, `.process()`, or `.processSync()` are called.\n   *\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   The current processor.\n   */\n  freeze() {\n    if (this.frozen) {\n      return this\n    }\n\n    // Cast so that we can type plugins easier.\n    // Plugins are supposed to be usable on different processors, not just on\n    // this exact processor.\n    const self = /** @type {Processor} */ (/** @type {unknown} */ (this))\n\n    while (++this.freezeIndex < this.attachers.length) {\n      const [attacher, ...options] = this.attachers[this.freezeIndex]\n\n      if (options[0] === false) {\n        continue\n      }\n\n      if (options[0] === true) {\n        options[0] = undefined\n      }\n\n      const transformer = attacher.call(self, ...options)\n\n      if (typeof transformer === 'function') {\n        this.transformers.use(transformer)\n      }\n    }\n\n    this.frozen = true\n    this.freezeIndex = Number.POSITIVE_INFINITY\n\n    return this\n  }\n\n  /**\n   * Parse text to a syntax tree.\n   *\n   * > **Note**: `parse` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `parse` performs the parse phase, not the run phase or other\n   * > phases.\n   *\n   * @param {Compatible | undefined} [file]\n   *   file to parse (optional); typically `string` or `VFile`; any value\n   *   accepted as `x` in `new VFile(x)`.\n   * @returns {ParseTree extends undefined ? Node : ParseTree}\n   *   Syntax tree representing `file`.\n   */\n  parse(file) {\n    this.freeze()\n    const realFile = vfile(file)\n    const parser = this.parser || this.Parser\n    assertParser('parse', parser)\n    return parser(String(realFile), realFile)\n  }\n\n  /**\n   * Process the given file as configured on the processor.\n   *\n   * > **Note**: `process` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `process` performs the parse, run, and stringify phases.\n   *\n   * @overload\n   * @param {Compatible | undefined} file\n   * @param {ProcessCallback<VFileWithOutput<CompileResult>>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {Compatible | undefined} [file]\n   * @returns {Promise<VFileWithOutput<CompileResult>>}\n   *\n   * @param {Compatible | undefined} [file]\n   *   File (optional); typically `string` or `VFile`]; any value accepted as\n   *   `x` in `new VFile(x)`.\n   * @param {ProcessCallback<VFileWithOutput<CompileResult>> | undefined} [done]\n   *   Callback (optional).\n   * @returns {Promise<VFile> | undefined}\n   *   Nothing if `done` is given.\n   *   Otherwise a promise, rejected with a fatal error or resolved with the\n   *   processed file.\n   *\n   *   The parsed, transformed, and compiled value is available at\n   *   `file.value` (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most\n   *   > compilers return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  process(file, done) {\n    const self = this\n\n    this.freeze()\n    assertParser('process', this.parser || this.Parser)\n    assertCompiler('process', this.compiler || this.Compiler)\n\n    return done ? executor(undefined, done) : new Promise(executor)\n\n    // Note: `void`s needed for TS.\n    /**\n     * @param {((file: VFileWithOutput<CompileResult>) => undefined | void) | undefined} resolve\n     * @param {(error: Error | undefined) => undefined | void} reject\n     * @returns {undefined}\n     */\n    function executor(resolve, reject) {\n      const realFile = vfile(file)\n      // Assume `ParseTree` (the result of the parser) matches `HeadTree` (the\n      // input of the first transform).\n      const parseTree =\n        /** @type {HeadTree extends undefined ? Node : HeadTree} */ (\n          /** @type {unknown} */ (self.parse(realFile))\n        )\n\n      self.run(parseTree, realFile, function (error, tree, file) {\n        if (error || !tree || !file) {\n          return realDone(error)\n        }\n\n        // Assume `TailTree` (the output of the last transform) matches\n        // `CompileTree` (the input of the compiler).\n        const compileTree =\n          /** @type {CompileTree extends undefined ? Node : CompileTree} */ (\n            /** @type {unknown} */ (tree)\n          )\n\n        const compileResult = self.stringify(compileTree, file)\n\n        if (looksLikeAValue(compileResult)) {\n          file.value = compileResult\n        } else {\n          file.result = compileResult\n        }\n\n        realDone(error, /** @type {VFileWithOutput<CompileResult>} */ (file))\n      })\n\n      /**\n       * @param {Error | undefined} error\n       * @param {VFileWithOutput<CompileResult> | undefined} [file]\n       * @returns {undefined}\n       */\n      function realDone(error, file) {\n        if (error || !file) {\n          reject(error)\n        } else if (resolve) {\n          resolve(file)\n        } else {\n          assert(done, '`done` is defined if `resolve` is not')\n          done(undefined, file)\n        }\n      }\n    }\n  }\n\n  /**\n   * Process the given file as configured on the processor.\n   *\n   * An error is thrown if asynchronous transforms are configured.\n   *\n   * > **Note**: `processSync` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `processSync` performs the parse, run, and stringify phases.\n   *\n   * @param {Compatible | undefined} [file]\n   *   File (optional); typically `string` or `VFile`; any value accepted as\n   *   `x` in `new VFile(x)`.\n   * @returns {VFileWithOutput<CompileResult>}\n   *   The processed file.\n   *\n   *   The parsed, transformed, and compiled value is available at\n   *   `file.value` (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most\n   *   > compilers return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  processSync(file) {\n    /** @type {boolean} */\n    let complete = false\n    /** @type {VFileWithOutput<CompileResult> | undefined} */\n    let result\n\n    this.freeze()\n    assertParser('processSync', this.parser || this.Parser)\n    assertCompiler('processSync', this.compiler || this.Compiler)\n\n    this.process(file, realDone)\n    assertDone('processSync', 'process', complete)\n    assert(result, 'we either bailed on an error or have a tree')\n\n    return result\n\n    /**\n     * @type {ProcessCallback<VFileWithOutput<CompileResult>>}\n     */\n    function realDone(error, file) {\n      complete = true\n      bail(error)\n      result = file\n    }\n  }\n\n  /**\n   * Run *transformers* on a syntax tree.\n   *\n   * > **Note**: `run` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `run` performs the run phase, not other phases.\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {Compatible | undefined} file\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {Compatible | undefined} [file]\n   * @returns {Promise<TailTree extends undefined ? Node : TailTree>}\n   *\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   *   Tree to transform and inspect.\n   * @param {(\n   *   RunCallback<TailTree extends undefined ? Node : TailTree> |\n   *   Compatible\n   * )} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} [done]\n   *   Callback (optional).\n   * @returns {Promise<TailTree extends undefined ? Node : TailTree> | undefined}\n   *   Nothing if `done` is given.\n   *   Otherwise, a promise rejected with a fatal error or resolved with the\n   *   transformed tree.\n   */\n  run(tree, file, done) {\n    assertNode(tree)\n    this.freeze()\n\n    const transformers = this.transformers\n\n    if (!done && typeof file === 'function') {\n      done = file\n      file = undefined\n    }\n\n    return done ? executor(undefined, done) : new Promise(executor)\n\n    // Note: `void`s needed for TS.\n    /**\n     * @param {(\n     *   ((tree: TailTree extends undefined ? Node : TailTree) => undefined | void) |\n     *   undefined\n     * )} resolve\n     * @param {(error: Error) => undefined | void} reject\n     * @returns {undefined}\n     */\n    function executor(resolve, reject) {\n      assert(\n        typeof file !== 'function',\n        '`file` can’t be a `done` anymore, we checked'\n      )\n      const realFile = vfile(file)\n      transformers.run(tree, realFile, realDone)\n\n      /**\n       * @param {Error | undefined} error\n       * @param {Node} outputTree\n       * @param {VFile} file\n       * @returns {undefined}\n       */\n      function realDone(error, outputTree, file) {\n        const resultingTree =\n          /** @type {TailTree extends undefined ? Node : TailTree} */ (\n            outputTree || tree\n          )\n\n        if (error) {\n          reject(error)\n        } else if (resolve) {\n          resolve(resultingTree)\n        } else {\n          assert(done, '`done` is defined if `resolve` is not')\n          done(undefined, resultingTree, file)\n        }\n      }\n    }\n  }\n\n  /**\n   * Run *transformers* on a syntax tree.\n   *\n   * An error is thrown if asynchronous transforms are configured.\n   *\n   * > **Note**: `runSync` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `runSync` performs the run phase, not other phases.\n   *\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   *   Tree to transform and inspect.\n   * @param {Compatible | undefined} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @returns {TailTree extends undefined ? Node : TailTree}\n   *   Transformed tree.\n   */\n  runSync(tree, file) {\n    /** @type {boolean} */\n    let complete = false\n    /** @type {(TailTree extends undefined ? Node : TailTree) | undefined} */\n    let result\n\n    this.run(tree, file, realDone)\n\n    assertDone('runSync', 'run', complete)\n    assert(result, 'we either bailed on an error or have a tree')\n    return result\n\n    /**\n     * @type {RunCallback<TailTree extends undefined ? Node : TailTree>}\n     */\n    function realDone(error, tree) {\n      bail(error)\n      result = tree\n      complete = true\n    }\n  }\n\n  /**\n   * Compile a syntax tree.\n   *\n   * > **Note**: `stringify` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `stringify` performs the stringify phase, not the run phase\n   * > or other phases.\n   *\n   * @param {CompileTree extends undefined ? Node : CompileTree} tree\n   *   Tree to compile.\n   * @param {Compatible | undefined} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @returns {CompileResult extends undefined ? Value : CompileResult}\n   *   Textual representation of the tree (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most compilers\n   *   > return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  stringify(tree, file) {\n    this.freeze()\n    const realFile = vfile(file)\n    const compiler = this.compiler || this.Compiler\n    assertCompiler('stringify', compiler)\n    assertNode(tree)\n\n    return compiler(tree, realFile)\n  }\n\n  /**\n   * Configure the processor to use a plugin, a list of usable values, or a\n   * preset.\n   *\n   * If the processor is already using a plugin, the previous plugin\n   * configuration is changed based on the options that are passed in.\n   * In other words, the plugin is not added a second time.\n   *\n   * > **Note**: `use` cannot be called on *frozen* processors.\n   * > Call the processor first to create a new unfrozen processor.\n   *\n   * @example\n   *   There are many ways to pass plugins to `.use()`.\n   *   This example gives an overview:\n   *\n   *   ```js\n   *   import {unified} from 'unified'\n   *\n   *   unified()\n   *     // Plugin with options:\n   *     .use(pluginA, {x: true, y: true})\n   *     // Passing the same plugin again merges configuration (to `{x: true, y: false, z: true}`):\n   *     .use(pluginA, {y: false, z: true})\n   *     // Plugins:\n   *     .use([pluginB, pluginC])\n   *     // Two plugins, the second with options:\n   *     .use([pluginD, [pluginE, {}]])\n   *     // Preset with plugins and settings:\n   *     .use({plugins: [pluginF, [pluginG, {}]], settings: {position: false}})\n   *     // Settings only:\n   *     .use({settings: {position: false}})\n   *   ```\n   *\n   * @template {Array<unknown>} [Parameters=[]]\n   * @template {Node | string | undefined} [Input=undefined]\n   * @template [Output=Input]\n   *\n   * @overload\n   * @param {Preset | null | undefined} [preset]\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {PluggableList} list\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {Plugin<Parameters, Input, Output>} plugin\n   * @param {...(Parameters | [boolean])} parameters\n   * @returns {UsePlugin<ParseTree, HeadTree, TailTree, CompileTree, CompileResult, Input, Output>}\n   *\n   * @param {PluggableList | Plugin | Preset | null | undefined} value\n   *   Usable value.\n   * @param {...unknown} parameters\n   *   Parameters, when a plugin is given as a usable value.\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   Current processor.\n   */\n  use(value, ...parameters) {\n    const attachers = this.attachers\n    const namespace = this.namespace\n\n    assertUnfrozen('use', this.frozen)\n\n    if (value === null || value === undefined) {\n      // Empty.\n    } else if (typeof value === 'function') {\n      addPlugin(value, parameters)\n    } else if (typeof value === 'object') {\n      if (Array.isArray(value)) {\n        addList(value)\n      } else {\n        addPreset(value)\n      }\n    } else {\n      throw new TypeError('Expected usable value, not `' + value + '`')\n    }\n\n    return this\n\n    /**\n     * @param {Pluggable} value\n     * @returns {undefined}\n     */\n    function add(value) {\n      if (typeof value === 'function') {\n        addPlugin(value, [])\n      } else if (typeof value === 'object') {\n        if (Array.isArray(value)) {\n          const [plugin, ...parameters] =\n            /** @type {PluginTuple<Array<unknown>>} */ (value)\n          addPlugin(plugin, parameters)\n        } else {\n          addPreset(value)\n        }\n      } else {\n        throw new TypeError('Expected usable value, not `' + value + '`')\n      }\n    }\n\n    /**\n     * @param {Preset} result\n     * @returns {undefined}\n     */\n    function addPreset(result) {\n      if (!('plugins' in result) && !('settings' in result)) {\n        throw new Error(\n          'Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither'\n        )\n      }\n\n      addList(result.plugins)\n\n      if (result.settings) {\n        namespace.settings = extend(true, namespace.settings, result.settings)\n      }\n    }\n\n    /**\n     * @param {PluggableList | null | undefined} plugins\n     * @returns {undefined}\n     */\n    function addList(plugins) {\n      let index = -1\n\n      if (plugins === null || plugins === undefined) {\n        // Empty.\n      } else if (Array.isArray(plugins)) {\n        while (++index < plugins.length) {\n          const thing = plugins[index]\n          add(thing)\n        }\n      } else {\n        throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n      }\n    }\n\n    /**\n     * @param {Plugin} plugin\n     * @param {Array<unknown>} parameters\n     * @returns {undefined}\n     */\n    function addPlugin(plugin, parameters) {\n      let index = -1\n      let entryIndex = -1\n\n      while (++index < attachers.length) {\n        if (attachers[index][0] === plugin) {\n          entryIndex = index\n          break\n        }\n      }\n\n      if (entryIndex === -1) {\n        attachers.push([plugin, ...parameters])\n      }\n      // Only set if there was at least a `primary` value, otherwise we’d change\n      // `arguments.length`.\n      else if (parameters.length > 0) {\n        let [primary, ...rest] = parameters\n        const currentPrimary = attachers[entryIndex][1]\n        if (isPlainObj(currentPrimary) && isPlainObj(primary)) {\n          primary = extend(true, currentPrimary, primary)\n        }\n\n        attachers[entryIndex] = [plugin, primary, ...rest]\n      }\n    }\n  }\n}\n\n// Note: this returns a *callable* instance.\n// That’s why it’s documented as a function.\n/**\n * Create a new processor.\n *\n * @example\n *   This example shows how a new processor can be created (from `remark`) and linked\n *   to **stdin**(4) and **stdout**(4).\n *\n *   ```js\n *   import process from 'node:process'\n *   import concatStream from 'concat-stream'\n *   import {remark} from 'remark'\n *\n *   process.stdin.pipe(\n *     concatStream(function (buf) {\n *       process.stdout.write(String(remark().processSync(buf)))\n *     })\n *   )\n *   ```\n *\n * @returns\n *   New *unfrozen* processor (`processor`).\n *\n *   This processor is configured to work the same as its ancestor.\n *   When the descendant processor is configured in the future it does not\n *   affect the ancestral processor.\n */\nexport const unified = new Processor().freeze()\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `parser`')\n  }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `compiler`')\n  }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n  if (frozen) {\n    throw new Error(\n      'Cannot call `' +\n        name +\n        '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n    )\n  }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n  // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n  // type-coverage:ignore-next-line\n  if (!isPlainObj(node) || typeof node.type !== 'string') {\n    throw new TypeError('Expected node, got `' + node + '`')\n    // Fine.\n  }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n  if (!complete) {\n    throw new Error(\n      '`' + name + '` finished async. Use `' + asyncName + '` instead'\n    )\n  }\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n  return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'message' in value &&\n      'messages' in value\n  )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is Value}\n */\nfunction looksLikeAValue(value) {\n  return typeof value === 'string' || isUint8Array(value)\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n *   thing.\n * @returns {value is Uint8Array}\n *   Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'byteLength' in value &&\n      'byteOffset' in value\n  )\n}\n","/**\n * @import {Element, Nodes, Parents, Root} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {ComponentType, JSX, ReactElement, ReactNode} from 'react'\n * @import {Options as RemarkRehypeOptions} from 'remark-rehype'\n * @import {BuildVisitor} from 'unist-util-visit'\n * @import {PluggableList, Processor} from 'unified'\n */\n\n/**\n * @callback AllowElement\n *   Filter elements.\n * @param {Readonly<Element>} element\n *   Element to check.\n * @param {number} index\n *   Index of `element` in `parent`.\n * @param {Readonly<Parents> | undefined} parent\n *   Parent of `element`.\n * @returns {boolean | null | undefined}\n *   Whether to allow `element` (default: `false`).\n */\n\n/**\n * @typedef ExtraProps\n *   Extra fields we pass.\n * @property {Element | undefined} [node]\n *   passed when `passNode` is on.\n */\n\n/**\n * @typedef {{\n *   [Key in keyof JSX.IntrinsicElements]?: ComponentType<JSX.IntrinsicElements[Key] & ExtraProps> | keyof JSX.IntrinsicElements\n * }} Components\n *   Map tag names to components.\n */\n\n/**\n * @typedef Deprecation\n *   Deprecation.\n * @property {string} from\n *   Old field.\n * @property {string} id\n *   ID in readme.\n * @property {keyof Options} [to]\n *   New field.\n */\n\n/**\n * @typedef Options\n *   Configuration.\n * @property {AllowElement | null | undefined} [allowElement]\n *   Filter elements (optional);\n *   `allowedElements` / `disallowedElements` is used first.\n * @property {ReadonlyArray<string> | null | undefined} [allowedElements]\n *   Tag names to allow (default: all tag names);\n *   cannot combine w/ `disallowedElements`.\n * @property {string | null | undefined} [children]\n *   Markdown.\n * @property {Components | null | undefined} [components]\n *   Map tag names to components.\n * @property {ReadonlyArray<string> | null | undefined} [disallowedElements]\n *   Tag names to disallow (default: `[]`);\n *   cannot combine w/ `allowedElements`.\n * @property {PluggableList | null | undefined} [rehypePlugins]\n *   List of rehype plugins to use.\n * @property {PluggableList | null | undefined} [remarkPlugins]\n *   List of remark plugins to use.\n * @property {Readonly<RemarkRehypeOptions> | null | undefined} [remarkRehypeOptions]\n *   Options to pass through to `remark-rehype`.\n * @property {boolean | null | undefined} [skipHtml=false]\n *   Ignore HTML in markdown completely (default: `false`).\n * @property {boolean | null | undefined} [unwrapDisallowed=false]\n *   Extract (unwrap) what’s in disallowed elements (default: `false`);\n *   normally when say `strong` is not allowed, it and it’s children are dropped,\n *   with `unwrapDisallowed` the element itself is replaced by its children.\n * @property {UrlTransform | null | undefined} [urlTransform]\n *   Change URLs (default: `defaultUrlTransform`)\n */\n\n/**\n * @typedef HooksOptionsOnly\n *   Configuration specifically for {@linkcode MarkdownHooks}.\n * @property {ReactNode | null | undefined} [fallback]\n *   Content to render while the processor processing the markdown (optional).\n */\n\n/**\n * @typedef {Options & HooksOptionsOnly} HooksOptions\n *   Configuration for {@linkcode MarkdownHooks};\n *   extends the regular {@linkcode Options} with a `fallback` prop.\n */\n\n/**\n * @callback UrlTransform\n *   Transform all URLs.\n * @param {string} url\n *   URL.\n * @param {string} key\n *   Property name (example: `'href'`).\n * @param {Readonly<Element>} node\n *   Node.\n * @returns {string | null | undefined}\n *   Transformed URL (optional).\n */\n\nimport {unreachable} from 'devlop'\nimport {toJsxRuntime} from 'hast-util-to-jsx-runtime'\nimport {urlAttributes} from 'html-url-attributes'\nimport {Fragment, jsx, jsxs} from 'react/jsx-runtime'\nimport {useEffect, useState} from 'react'\nimport remarkParse from 'remark-parse'\nimport remarkRehype from 'remark-rehype'\nimport {unified} from 'unified'\nimport {visit} from 'unist-util-visit'\nimport {VFile} from 'vfile'\n\nconst changelog =\n  'https://github.com/remarkjs/react-markdown/blob/main/changelog.md'\n\n/** @type {PluggableList} */\nconst emptyPlugins = []\n/** @type {Readonly<RemarkRehypeOptions>} */\nconst emptyRemarkRehypeOptions = {allowDangerousHtml: true}\nconst safeProtocol = /^(https?|ircs?|mailto|xmpp)$/i\n\n// Mutable because we `delete` any time it’s used and a message is sent.\n/** @type {ReadonlyArray<Readonly<Deprecation>>} */\nconst deprecations = [\n  {from: 'astPlugins', id: 'remove-buggy-html-in-markdown-parser'},\n  {from: 'allowDangerousHtml', id: 'remove-buggy-html-in-markdown-parser'},\n  {\n    from: 'allowNode',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'allowElement'\n  },\n  {\n    from: 'allowedTypes',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'allowedElements'\n  },\n  {from: 'className', id: 'remove-classname'},\n  {\n    from: 'disallowedTypes',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'disallowedElements'\n  },\n  {from: 'escapeHtml', id: 'remove-buggy-html-in-markdown-parser'},\n  {from: 'includeElementIndex', id: '#remove-includeelementindex'},\n  {\n    from: 'includeNodeIndex',\n    id: 'change-includenodeindex-to-includeelementindex'\n  },\n  {from: 'linkTarget', id: 'remove-linktarget'},\n  {from: 'plugins', id: 'change-plugins-to-remarkplugins', to: 'remarkPlugins'},\n  {from: 'rawSourcePos', id: '#remove-rawsourcepos'},\n  {from: 'renderers', id: 'change-renderers-to-components', to: 'components'},\n  {from: 'source', id: 'change-source-to-children', to: 'children'},\n  {from: 'sourcePos', id: '#remove-sourcepos'},\n  {from: 'transformImageUri', id: '#add-urltransform', to: 'urlTransform'},\n  {from: 'transformLinkUri', id: '#add-urltransform', to: 'urlTransform'}\n]\n\n/**\n * Component to render markdown.\n *\n * This is a synchronous component.\n * When using async plugins,\n * see {@linkcode MarkdownAsync} or {@linkcode MarkdownHooks}.\n *\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {ReactElement}\n *   React element.\n */\nexport function Markdown(options) {\n  const processor = createProcessor(options)\n  const file = createFile(options)\n  return post(processor.runSync(processor.parse(file), file), options)\n}\n\n/**\n * Component to render markdown with support for async plugins\n * through async/await.\n *\n * Components returning promises are supported on the server.\n * For async support on the client,\n * see {@linkcode MarkdownHooks}.\n *\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {Promise<ReactElement>}\n *   Promise to a React element.\n */\nexport async function MarkdownAsync(options) {\n  const processor = createProcessor(options)\n  const file = createFile(options)\n  const tree = await processor.run(processor.parse(file), file)\n  return post(tree, options)\n}\n\n/**\n * Component to render markdown with support for async plugins through hooks.\n *\n * This uses `useEffect` and `useState` hooks.\n * Hooks run on the client and do not immediately render something.\n * For async support on the server,\n * see {@linkcode MarkdownAsync}.\n *\n * @param {Readonly<HooksOptions>} options\n *   Props.\n * @returns {ReactNode}\n *   React node.\n */\nexport function MarkdownHooks(options) {\n  const processor = createProcessor(options)\n  const [error, setError] = useState(\n    /** @type {Error | undefined} */ (undefined)\n  )\n  const [tree, setTree] = useState(/** @type {Root | undefined} */ (undefined))\n\n  useEffect(\n    function () {\n      let cancelled = false\n      const file = createFile(options)\n\n      processor.run(processor.parse(file), file, function (error, tree) {\n        if (!cancelled) {\n          setError(error)\n          setTree(tree)\n        }\n      })\n\n      /**\n       * @returns {undefined}\n       *   Nothing.\n       */\n      return function () {\n        cancelled = true\n      }\n    },\n    [\n      options.children,\n      options.rehypePlugins,\n      options.remarkPlugins,\n      options.remarkRehypeOptions\n    ]\n  )\n\n  if (error) throw error\n\n  return tree ? post(tree, options) : options.fallback\n}\n\n/**\n * Set up the `unified` processor.\n *\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {Processor<MdastRoot, MdastRoot, Root, undefined, undefined>}\n *   Result.\n */\nfunction createProcessor(options) {\n  const rehypePlugins = options.rehypePlugins || emptyPlugins\n  const remarkPlugins = options.remarkPlugins || emptyPlugins\n  const remarkRehypeOptions = options.remarkRehypeOptions\n    ? {...options.remarkRehypeOptions, ...emptyRemarkRehypeOptions}\n    : emptyRemarkRehypeOptions\n\n  const processor = unified()\n    .use(remarkParse)\n    .use(remarkPlugins)\n    .use(remarkRehype, remarkRehypeOptions)\n    .use(rehypePlugins)\n\n  return processor\n}\n\n/**\n * Set up the virtual file.\n *\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {VFile}\n *   Result.\n */\nfunction createFile(options) {\n  const children = options.children || ''\n  const file = new VFile()\n\n  if (typeof children === 'string') {\n    file.value = children\n  } else {\n    unreachable(\n      'Unexpected value `' +\n        children +\n        '` for `children` prop, expected `string`'\n    )\n  }\n\n  return file\n}\n\n/**\n * Process the result from unified some more.\n *\n * @param {Nodes} tree\n *   Tree.\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {ReactElement}\n *   React element.\n */\nfunction post(tree, options) {\n  const allowedElements = options.allowedElements\n  const allowElement = options.allowElement\n  const components = options.components\n  const disallowedElements = options.disallowedElements\n  const skipHtml = options.skipHtml\n  const unwrapDisallowed = options.unwrapDisallowed\n  const urlTransform = options.urlTransform || defaultUrlTransform\n\n  for (const deprecation of deprecations) {\n    if (Object.hasOwn(options, deprecation.from)) {\n      unreachable(\n        'Unexpected `' +\n          deprecation.from +\n          '` prop, ' +\n          (deprecation.to\n            ? 'use `' + deprecation.to + '` instead'\n            : 'remove it') +\n          ' (see <' +\n          changelog +\n          '#' +\n          deprecation.id +\n          '> for more info)'\n      )\n    }\n  }\n\n  if (allowedElements && disallowedElements) {\n    unreachable(\n      'Unexpected combined `allowedElements` and `disallowedElements`, expected one or the other'\n    )\n  }\n\n  visit(tree, transform)\n\n  return toJsxRuntime(tree, {\n    Fragment,\n    components,\n    ignoreInvalidStyle: true,\n    jsx,\n    jsxs,\n    passKeys: true,\n    passNode: true\n  })\n\n  /** @type {BuildVisitor<Root>} */\n  function transform(node, index, parent) {\n    if (node.type === 'raw' && parent && typeof index === 'number') {\n      if (skipHtml) {\n        parent.children.splice(index, 1)\n      } else {\n        parent.children[index] = {type: 'text', value: node.value}\n      }\n\n      return index\n    }\n\n    if (node.type === 'element') {\n      /** @type {string} */\n      let key\n\n      for (key in urlAttributes) {\n        if (\n          Object.hasOwn(urlAttributes, key) &&\n          Object.hasOwn(node.properties, key)\n        ) {\n          const value = node.properties[key]\n          const test = urlAttributes[key]\n          if (test === null || test.includes(node.tagName)) {\n            node.properties[key] = urlTransform(String(value || ''), key, node)\n          }\n        }\n      }\n    }\n\n    if (node.type === 'element') {\n      let remove = allowedElements\n        ? !allowedElements.includes(node.tagName)\n        : disallowedElements\n          ? disallowedElements.includes(node.tagName)\n          : false\n\n      if (!remove && allowElement && typeof index === 'number') {\n        remove = !allowElement(node, index, parent)\n      }\n\n      if (remove && parent && typeof index === 'number') {\n        if (unwrapDisallowed && node.children) {\n          parent.children.splice(index, 1, ...node.children)\n        } else {\n          parent.children.splice(index, 1)\n        }\n\n        return index\n      }\n    }\n  }\n}\n\n/**\n * Make a URL safe.\n *\n * @satisfies {UrlTransform}\n * @param {string} value\n *   URL.\n * @returns {string}\n *   Safe URL.\n */\nexport function defaultUrlTransform(value) {\n  // Same as:\n  // <https://github.com/micromark/micromark/blob/929275e/packages/micromark-util-sanitize-uri/dev/index.js#L34>\n  // But without the `encode` part.\n  const colon = value.indexOf(':')\n  const questionMark = value.indexOf('?')\n  const numberSign = value.indexOf('#')\n  const slash = value.indexOf('/')\n\n  if (\n    // If there is no protocol, it’s relative.\n    colon === -1 ||\n    // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n    (slash !== -1 && colon > slash) ||\n    (questionMark !== -1 && colon > questionMark) ||\n    (numberSign !== -1 && colon > numberSign) ||\n    // It is a protocol, it should be allowed.\n    safeProtocol.test(value.slice(0, colon))\n  ) {\n    return value\n  }\n\n  return ''\n}\n","import * as React from \"react\"\nimport Markdown, {\n    type Options as MarkdownOptions,\n    type Components as MarkdownComponents,\n} from \"react-markdown\"\nimport { remarkPlainLinks } from \"./markdown/remarkPlainLinks.js\"\nimport { visit } from \"unist-util-visit\"\nimport type { Plugin } from \"unified\"\nimport type { Root, ElementContent } from \"hast\"\n\ntype SimpleMarkdownTextProps = {\n    text: string\n    useParagraphs?: boolean // by default, text is wrapped in <p> tags\n    openLinksInNewTab?: boolean // by default, links open in the same tab\n    dataTrackNote?: string // if set, every link gets this data-track-note for click tracking\n    dodTrackNote?: string // if set, every details-on-demand span gets this data-dod-track-note\n}\n\nconst transformDodLinks: Plugin<[{ dodTrackNote?: string }?], Root> = (\n    options\n) => {\n    return function (tree) {\n        visit(tree, \"element\", function (node) {\n            if (node.tagName === \"a\")\n                if (\n                    node.properties &&\n                    typeof node.properties.href === \"string\" &&\n                    node.properties.href.startsWith(\"#dod:\")\n                ) {\n                    // use a regex to split the #dod: part from the term of the href. Use a named capture group\n                    // to capture the term\n                    const match = node.properties.href.match(/#dod:(?<term>.+)/)\n                    if (match) {\n                        node.tagName = \"span\"\n                        node.properties.class = \"dod-span\"\n                        node.properties[\"data-id\"] = match.groups?.term\n                        node.properties[\"aria-expanded\"] = \"false\"\n                        node.properties[\"tabindex\"] = 0\n                        if (options?.dodTrackNote)\n                            node.properties[\"data-dod-track-note\"] =\n                                options.dodTrackNote\n                        delete node.properties.href\n                    }\n                }\n        })\n    }\n}\n\n/**\n * Rehype plugin that transforms `{#hex: colored text}` syntax into\n * `<span style=\"color: #hex\">colored text</span>`.\n *\n * Example: `I am normal.{#f00: red text here}. More normal text.`\n */\nconst COLOR_SYNTAX_REGEX = /\\{(#[0-9a-fA-F]{3,8}):\\s*(.*?)\\}/g\n\nconst transformColorSyntax: Plugin<[], Root> = () => {\n    return function (tree) {\n        visit(tree, \"text\", function (node, index, parent) {\n            if (!parent || index === undefined) return\n            const text = node.value\n            const matches = [...text.matchAll(COLOR_SYNTAX_REGEX)]\n            if (matches.length === 0) return\n\n            const children: ElementContent[] = []\n            let lastIndex = 0\n\n            for (const match of matches) {\n                // Text before the match\n                if (match.index > lastIndex) {\n                    children.push({\n                        type: \"text\",\n                        value: text.slice(lastIndex, match.index),\n                    })\n                }\n                // Colored span\n                children.push({\n                    type: \"element\",\n                    tagName: \"span\",\n                    properties: { style: `color: ${match[1]}` },\n                    children: [{ type: \"text\", value: match[2] }],\n                })\n                lastIndex = match.index + match[0].length\n            }\n\n            // Text after the last match\n            if (lastIndex < text.length) {\n                children.push({\n                    type: \"text\",\n                    value: text.slice(lastIndex),\n                })\n            }\n\n            // Replace the text node with the new children\n            parent.children.splice(index, 1, ...children)\n        })\n    }\n}\n\n// NOTE: We currently don't need to render markdown in React. We should be able\n// to render it only during baking/on the server and pass the HTML as string.\n// This way we could reduce the bundle size by not including a markdown library\n// and improve performance.\nexport class SimpleMarkdownText extends React.Component<SimpleMarkdownTextProps> {\n    get useParagraphs(): boolean {\n        return this.props.useParagraphs ?? true\n    }\n\n    get markdownCustomComponents(): MarkdownComponents | undefined {\n        const components: MarkdownComponents = {}\n\n        if (!this.useParagraphs) {\n            // \"unwrap\" the text by rendering <p /> as a react fragment\n            components.p = ({ children }) => (\n                <React.Fragment>{children}</React.Fragment>\n            )\n        }\n\n        if (this.props.openLinksInNewTab || this.props.dataTrackNote) {\n            // react-markdown passes its hast `node`; don't spread it onto the DOM\n            components.a = ({ children, node: _node, ...props }) => (\n                <a\n                    {...props}\n                    target={this.props.openLinksInNewTab ? \"_blank\" : undefined}\n                    data-track-note={this.props.dataTrackNote}\n                >\n                    {children}\n                </a>\n            )\n        }\n\n        return Object.keys(components).length > 0 ? components : undefined\n    }\n\n    override render(): React.ReactElement | null {\n        const options: Omit<MarkdownOptions, \"children\"> = {\n            rehypePlugins: [\n                [transformDodLinks, { dodTrackNote: this.props.dodTrackNote }],\n                transformColorSyntax,\n            ],\n            remarkPlugins: [remarkPlainLinks],\n            components: this.markdownCustomComponents,\n        }\n        return <Markdown {...options}>{this.props.text}</Markdown>\n    }\n}\n\n// TODO: remove this component once all backported indicators\n// etc have switched from HTML to markdown for their sources\nexport const HtmlOrSimpleMarkdownText = (props: {\n    text: string\n    /** Only applied to the markdown branch; raw HTML is rendered as-is. */\n    openLinksInNewTab?: boolean\n}): React.ReactElement => {\n    // check the text for closing a, li or p tags. If\n    // one is found, render using dangerouslySetInnerHTML,\n    // otherwise use SimpleMarkdownText\n    const { text } = props\n    const htmlRegex = /<\\/(a|li|p)>/\n    const match = text.match(htmlRegex)\n    if (match) {\n        return <span dangerouslySetInnerHTML={{ __html: text }} />\n    } else {\n        return (\n            <SimpleMarkdownText\n                text={text}\n                openLinksInNewTab={props.openLinksInNewTab}\n            />\n        )\n    }\n}\n","import { createRoot } from \"react-dom/client\"\nimport { flushSync } from \"react-dom\"\n\nexport const reactRenderToStringClientOnly = (\n    element: React.ReactElement\n): string => {\n    if (typeof document === \"undefined\") {\n        throw new Error(\n            \"reactRenderToStringClientOnly can only be used in a browser environment\"\n        )\n    }\n\n    // This is the React-recommended way of rendering a component to HTML on the client-side, see https://react.dev/reference/react-dom/server/renderToString#removing-rendertostring-from-the-client-code\n    const div = document.createElement(\"div\")\n    const root = createRoot(div)\n    flushSync(() => root.render(element))\n    const html = div.innerHTML\n    root.unmount()\n    return html\n}\n","import tippy, { type Instance, type Props } from \"tippy.js\"\nimport type { DetailDictionary } from \"@ourworldindata/utils\"\nimport { MarkdownTextWrap } from \"./MarkdownTextWrap/MarkdownTextWrap.js\"\nimport { MarkdownTextWrapHtml } from \"./MarkdownTextWrap/MarkdownTextWrapComponents.js\"\nimport { reactRenderToStringClientOnly } from \"./reactUtil.js\"\n\ndeclare global {\n    interface Window {\n        details?: DetailDictionary\n    }\n}\n\n/** Tippy props shared by all DoD tooltips. */\nexport const DOD_TIPPY_PROPS: Partial<Props> = {\n    allowHTML: true,\n    // Add hide delay to allow users reaching the tooltip with a mouse before\n    // it hides in tricky edge cases, e.g. when the DoD spans multiple lines.\n    delay: [null, 200],\n    interactive: true,\n    hideOnClick: false,\n    arrow: false,\n    theme: \"light dod\",\n    appendTo: () => document.body,\n}\n\nexport function renderDodContentHtml(text: string): string {\n    const markdownTextWrap = new MarkdownTextWrap({\n        text,\n        fontSize: 12,\n        lineHeight: 1.55,\n    })\n    return reactRenderToStringClientOnly(\n        <div className=\"dod-container\">\n            <MarkdownTextWrapHtml textWrap={markdownTextWrap} />\n        </div>\n    )\n}\n\nexport type InitializeDetailsOnDemandOptions = {\n    details: DetailDictionary\n    onDodShown?: (id: string, dodSpan: Element) => void\n}\n\nlet cleanupPreviousInitialization: (() => void) | undefined\n\n/**\n * Makes the DoD spans on the page show their tooltip on hover or touch.\n *\n * Calling this again replaces a previous initialization. Returns a cleanup\n * function for callers that don't live as long as the page, e.g. admin\n * components.\n */\nexport function initializeDetailsOnDemand({\n    details,\n    onDodShown,\n}: InitializeDetailsOnDemandOptions): () => void {\n    cleanupPreviousInitialization?.()\n\n    // Grapher reads the details from here when rendering static exports\n    window.details = details\n\n    const instancesByDodSpan = new Map<Element, Instance>()\n\n    document.addEventListener(\"mouseover\", handleEvent, { passive: true })\n    document.addEventListener(\"touchstart\", handleEvent, { passive: true })\n\n    function handleEvent(event: MouseEvent | TouchEvent): void {\n        const target = event.target\n        if (!(target instanceof Element)) return\n        if (!target.classList.contains(\"dod-span\")) return\n\n        const id = target.getAttribute(\"data-id\")\n        if (id) showDod(id, target)\n    }\n\n    function showDod(id: string, dodSpan: Element): void {\n        const existingInstance = instancesByDodSpan.get(dodSpan)\n        if (existingInstance) {\n            existingInstance.show()\n            return\n        }\n\n        const dod = details[id]\n        if (!dod) return\n\n        const instance = tippy(dodSpan, {\n            ...DOD_TIPPY_PROPS,\n            content: renderDodContentHtml(dod.text),\n            aria: {\n                content: \"labelledby\",\n            },\n            onShow: () => {\n                hideDodsNotContaining(dodSpan)\n                onDodShown?.(id, dodSpan)\n            },\n        })\n        instancesByDodSpan.set(dodSpan, instance)\n    }\n\n    /** Hides all open DoDs except the ones the given DoD span is nested in. */\n    function hideDodsNotContaining(dodSpan: Element): void {\n        for (const instance of instancesByDodSpan.values()) {\n            if (instance.state.isVisible && !instance.popper.contains(dodSpan))\n                instance.hide()\n        }\n    }\n\n    function cleanupDetailsOnDemand(): void {\n        document.removeEventListener(\"mouseover\", handleEvent)\n        document.removeEventListener(\"touchstart\", handleEvent)\n        for (const instance of instancesByDodSpan.values()) instance.destroy()\n        instancesByDodSpan.clear()\n    }\n\n    cleanupPreviousInitialization = cleanupDetailsOnDemand\n    return cleanupDetailsOnDemand\n}\n","import {\n    OwidGdoc,\n    ContentGraphLinkType,\n    OwidGdocType,\n} from \"@ourworldindata/types\"\nimport {\n    spansToUnformattedPlainText,\n    gdocUrlRegex,\n    Span,\n    Url,\n    detailOnDemandRegex,\n    guidedChartRegex,\n    getPrefixedGdocPath,\n} from \"@ourworldindata/utils\"\nimport urlSlug from \"url-slug\"\nimport { P, match } from \"ts-pattern\"\n\nexport function getLinkType(urlString: string): ContentGraphLinkType {\n    const url = Url.fromURL(urlString)\n    if (url.isGoogleDoc) {\n        return ContentGraphLinkType.Gdoc\n    }\n    if (url.isGrapher) {\n        return ContentGraphLinkType.Grapher\n    }\n    if (url.isExplorer) {\n        return ContentGraphLinkType.Explorer\n    }\n    if (url.isDod) {\n        return ContentGraphLinkType.Dod\n    }\n    if (url.isGuidedChart) {\n        return ContentGraphLinkType.GuidedChart\n    }\n    return ContentGraphLinkType.Url\n}\n\nexport function checkIsInternalLink(url: string): boolean {\n    return [\"gdoc\", \"grapher\", \"explorer\"].includes(getLinkType(url))\n}\n\nexport function getUrlTarget(urlString: string): string {\n    const url = Url.fromURL(urlString)\n    if (url.isGoogleDoc) {\n        const gdocsMatch = urlString.match(gdocUrlRegex)\n        if (gdocsMatch) {\n            const [_, gdocId] = gdocsMatch\n            return gdocId\n        }\n    }\n    if (url.isDod) {\n        const dodMatch = urlString.match(detailOnDemandRegex)\n        if (dodMatch) {\n            const [_, dodId] = dodMatch\n            return dodId\n        }\n    }\n    if (url.isGuidedChart) {\n        const guidedChartMatch = urlString.match(guidedChartRegex)\n        if (guidedChartMatch) {\n            const [_, guidedChartId] = guidedChartMatch\n            return guidedChartId\n        }\n    }\n    if ((url.isGrapher || url.isExplorer) && url.slug) {\n        return url.slug\n    }\n    return urlString\n}\n\nexport function convertHeadingTextToId(headingText: Span[]): string {\n    return urlSlug(spansToUnformattedPlainText(headingText))\n}\n\nexport const getBakePath = (\n    bakedSiteDir: string,\n    gdoc: { slug: string; content: { type?: OwidGdocType } }\n): string => {\n    return getPrefixedGdocPath(bakedSiteDir, gdoc)\n}\n\nexport const getCanonicalUrl = (\n    baseUrl: string,\n    gdoc: { slug: string; content: { type?: OwidGdocType } }\n): string => {\n    return getPrefixedGdocPath(baseUrl, gdoc)\n}\n\nexport const getCanonicalPath = (slug: string, type: OwidGdocType): string => {\n    return getCanonicalUrl(\"\", {\n        slug,\n        content: {\n            type,\n        },\n    })\n}\n\nexport function getPageTitle(gdoc: OwidGdoc) {\n    return match(gdoc)\n        .with(\n            {\n                content: {\n                    type: OwidGdocType.Homepage,\n                },\n            },\n            // <Head> uses the default title of \"Our World in Data\" when pageTitle is undefined\n            // Otherwise we'd get \" - Our World in Data\" appended to whatever title we return here\n            () => undefined\n        )\n        .with(\n            {\n                content: {\n                    type: P.union(\n                        OwidGdocType.Article,\n                        OwidGdocType.TopicPage,\n                        OwidGdocType.LinearTopicPage,\n                        OwidGdocType.AboutPage,\n                        OwidGdocType.DataInsight,\n                        OwidGdocType.Author,\n                        OwidGdocType.Announcement,\n                        OwidGdocType.FeaturedViz\n                    ),\n                },\n            },\n            (match) => match.content.title\n        )\n        .with(\n            {\n                content: { type: OwidGdocType.Profile },\n            },\n            (match) => {\n                const entityName = match.content.instantiatedEntity?.name\n                const isCountry = match.content.instantiatedEntity?.isCountry\n                const profileType = isCountry ? \"Country\" : \"Region\"\n                // e.g. \"Energy Country Profile\"\n                const profileTitle = `${match.content.title} ${profileType} Profile`\n\n                return entityName\n                    ? `${entityName} - ${profileTitle}`\n                    : ` ${profileTitle}`\n            }\n        )\n        .with(\n            {\n                content: {\n                    type: P.optional(P.union(OwidGdocType.Fragment, undefined)),\n                },\n            },\n            () => undefined\n        )\n        .exhaustive()\n}\n","import { faMinus, faPlus } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport type { ReactNode } from \"react\"\nimport cx from \"clsx\"\n\nexport const ExpandableToggle = ({\n    label,\n    content,\n    alwaysVisibleDescription,\n    isExpandedDefault = false,\n    hasTeaser = false,\n    contentId,\n    onToggle,\n}: {\n    label: string\n    content?: ReactNode\n    alwaysVisibleDescription?: ReactNode\n    isExpandedDefault?: boolean\n    hasTeaser?: boolean\n    contentId?: string\n    /** Called with the new open state whenever the toggle expands or collapses. */\n    onToggle?: (isOpen: boolean) => void\n}) => (\n    <details\n        className={cx(\"ExpandableToggle\", {\n            \"ExpandableToggle--teaser\": hasTeaser,\n        })}\n        open={isExpandedDefault}\n        // React 19 simulates bubbling for `toggle`, so a nested <details>\n        // inside the content would otherwise fire this handler too. Guard to\n        // only react to this element's own toggle.\n        onToggle={(e) => {\n            if (e.target === e.currentTarget) onToggle?.(e.currentTarget.open)\n        }}\n    >\n        <summary className=\"ExpandableToggle__container\">\n            <div className=\"ExpandableToggle__button\">\n                <div>\n                    <h4 className=\"ExpandableToggle__title\">{label}</h4>\n                    {alwaysVisibleDescription && (\n                        <div className=\"ExpandableToggle__description\">\n                            {alwaysVisibleDescription}\n                        </div>\n                    )}\n                </div>\n\n                {/* We show both the opened and closed icons, and use CSS to hide/show them based on the state */}\n                <FontAwesomeIcon\n                    className=\"ExpandableToggle__icon ExpandableToggle__icon--expand\"\n                    icon={faPlus}\n                />\n                <FontAwesomeIcon\n                    className=\"ExpandableToggle__icon ExpandableToggle__icon--collapse\"\n                    icon={faMinus}\n                />\n            </div>\n\n            {/* If there is a teaser, we need to place the content element inside the summary so it is visible even when the details element is closed.\n            Also, make it inert so it isn't included in the browser Cmd-F search - instead, the browser will auto-expand it when searching for content that's currently collapsed */}\n            {hasTeaser && (\n                <div className=\"ExpandableToggle__teaser\" inert>\n                    {content}\n                </div>\n            )}\n        </summary>\n        <div className=\"ExpandableToggle__content\" id={contentId}>\n            {content}\n        </div>\n    </details>\n)\n","export const DATAPAGE_ABOUT_THIS_DATA_SECTION_ID = \"about-this-data\" as const\nexport const DATAPAGE_SOURCES_AND_PROCESSING_SECTION_ID =\n    \"sources-and-processing\" as const\nexport const REUSE_THIS_WORK_SECTION_ID = \"reuse-this-work\"\nexport const INDICATOR_PROCESSING_SECTION_ID = \"indicator-processing\"\n","import * as React from \"react\"\nimport {\n    OwidProcessingLevel,\n    getProcessingPhraseForAttribution,\n    formatSourceDate,\n    getDateRange,\n    openLinkInNewTabAttrs,\n} from \"@ourworldindata/utils\"\nimport { DATAPAGE_SOURCES_AND_PROCESSING_SECTION_ID } from \"../SharedDataPageConstants.js\"\nimport { SimpleMarkdownText } from \"../SimpleMarkdownText.js\"\n\nexport const makeSource = ({\n    attribution,\n    owidProcessingLevel,\n    isEmbeddedInADataPage,\n    processingId = DATAPAGE_SOURCES_AND_PROCESSING_SECTION_ID,\n}: {\n    attribution?: string\n    owidProcessingLevel?: OwidProcessingLevel\n    isEmbeddedInADataPage?: boolean\n    processingId?: string\n}): React.ReactNode => {\n    if (!attribution) return null\n    const isEmbedded = isEmbeddedInADataPage ?? true\n    const processingLevelPhrase = getProcessingPhraseForAttribution(\n        attribution,\n        owidProcessingLevel\n    )\n    return (\n        <>\n            <SimpleMarkdownText text={attribution} useParagraphs={false} />\n            {processingLevelPhrase && (\n                <>\n                    {\" – \"}\n                    {isEmbedded ? (\n                        <a\n                            href={`#${processingId}`}\n                            data-track-note=\"data_processing_level\"\n                        >\n                            {processingLevelPhrase}\n                        </a>\n                    ) : (\n                        processingLevelPhrase\n                    )}{\" \"}\n                    by Our World in Data\n                </>\n            )}\n        </>\n    )\n}\n\nexport const makeLastUpdated = ({\n    lastUpdated,\n}: {\n    lastUpdated?: string\n}): React.ReactNode => {\n    return formatSourceDate(lastUpdated, \"MMMM D, YYYY\")\n}\n\nexport const makeNextUpdate = ({\n    nextUpdate,\n}: {\n    nextUpdate?: string\n}): React.ReactNode => {\n    return formatSourceDate(nextUpdate, \"MMMM YYYY\")\n}\n\nexport const makeDateRange = ({\n    dateRange,\n}: {\n    dateRange?: string\n}): React.ReactNode => {\n    if (!dateRange) return null\n    return getDateRange(dateRange)\n}\n\nexport const makeUnit = ({ unit }: { unit?: string }): React.ReactNode => {\n    if (!unit) return null\n    return unit\n}\n\nexport const makeUnitConversionFactor = ({\n    unitConversionFactor,\n}: {\n    unitConversionFactor?: number\n}): React.ReactNode => {\n    if (!unitConversionFactor || unitConversionFactor === 1) return null\n    return unitConversionFactor\n}\n\nconst splitSourceTextIntoFragments = (text: string | undefined): string[] => {\n    return text ? text.split(\";\").map((fragment) => fragment.trim()) : []\n}\n\nexport const makeLinks = ({\n    link,\n    trackNote,\n    openLinksInNewTab,\n}: {\n    link?: string\n    trackNote?: string\n    /** Open links in a new tab, e.g. when rendered inside an iframe. */\n    openLinksInNewTab?: boolean\n}): React.ReactNode => {\n    if (!link) return null\n    const linkFragments = splitSourceTextIntoFragments(link)\n    return linkFragments.map((urlOrText, index) => {\n        const isUrl = urlOrText.startsWith(\"http\") && !urlOrText.match(/\\s/)\n        return (\n            <React.Fragment key={urlOrText}>\n                <span>\n                    {isUrl ? (\n                        <a\n                            href={urlOrText}\n                            data-track-note={trackNote}\n                            {...openLinkInNewTabAttrs(openLinksInNewTab)}\n                        >\n                            {urlOrText}\n                        </a>\n                    ) : (\n                        <SimpleMarkdownText\n                            text={urlOrText}\n                            useParagraphs={false}\n                            openLinksInNewTab={openLinksInNewTab}\n                        />\n                    )}\n                </span>\n                {index < linkFragments.length - 1 && <br />}\n            </React.Fragment>\n        )\n    })\n}\n","import { SimpleMarkdownText } from \"../SimpleMarkdownText.js\"\nimport { faArrowDown } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { openLinkInNewTabAttrs } from \"@ourworldindata/utils\"\n\nexport interface IndicatorProcessingProps {\n    descriptionProcessing: string | undefined\n    trackNote?: string\n    dodTrackNote?: string\n    openLinksInNewTab?: boolean\n}\n\nexport const IndicatorProcessing = (props: IndicatorProcessingProps) => {\n    return (\n        <div className=\"indicator-processing\">\n            <div className=\"data-processing\">\n                <p>\n                    All data and visualizations on Our World in Data rely on\n                    data sourced from one or several original data providers.\n                    Preparing this original data involves several processing\n                    steps. Depending on the data, this can include standardizing\n                    country names and world region definitions, converting\n                    units, calculating derived indicators such as per capita\n                    measures, as well as adding or adapting metadata such as the\n                    name or the description given to an indicator.\n                </p>\n                <p>\n                    At the link below you can find a detailed description of the\n                    structure of our data pipeline, including links to all the\n                    code used to prepare data across Our World in Data.\n                </p>\n            </div>\n            <a\n                href=\"https://docs.owid.io/projects/etl/\"\n                className=\"indicator-processing__link\"\n                data-track-note={props.trackNote}\n                {...openLinkInNewTabAttrs(props.openLinksInNewTab)}\n            >\n                Read about our data pipeline\n                <FontAwesomeIcon icon={faArrowDown} />\n            </a>\n            {props.descriptionProcessing && (\n                <div className=\"indicator-processing-callout\">\n                    <h5 className=\"indicator-processing-callout__title\">\n                        Notes on our processing step for this indicator\n                    </h5>\n                    <div className=\"indicator-processing-callout__content\">\n                        <SimpleMarkdownText\n                            text={props.descriptionProcessing.trim()}\n                            dataTrackNote={props.trackNote}\n                            dodTrackNote={props.dodTrackNote}\n                            openLinksInNewTab={props.openLinksInNewTab}\n                        />\n                    </div>\n                </div>\n            )}\n        </div>\n    )\n}\n","import { faChevronDown, faChevronUp } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport cx from \"clsx\"\nimport { useRef } from \"react\"\n\ninterface MetadataBoxExpanderProps {\n    /** Rendered above the fold, outside the <details> */\n    preview?: React.ReactNode\n    /**\n     * Rendered inside the <details> as real content, not text hidden with CSS,\n     * which find-in-page could not reach\n     * https://chromestatus.com/feature/5032469667512320\n     */\n    children: React.ReactNode\n    showMoreLabel?: string\n    detailsRef?: React.RefObject<HTMLDetailsElement | null>\n    onToggle?: (isOpen: boolean) => void\n    className?: string\n}\n\n/**\n * An expander whose <summary> is the toggle in both directions, with the\n * viewport held in place on collapse.\n *\n * The scroll compensation is only correct while an ancestor sets\n * `overflow-anchor: none`.\n */\nexport function MetadataBoxExpander({\n    preview,\n    children,\n    showMoreLabel = \"Show more\",\n    detailsRef,\n    onToggle,\n    className,\n}: MetadataBoxExpanderProps): React.ReactElement {\n    const fallbackDetailsRef = useRef<HTMLDetailsElement | null>(null)\n    const resolvedDetailsRef = detailsRef ?? fallbackDetailsRef\n    const summaryRef = useRef<HTMLElement>(null)\n\n    const handleSummaryClick = (event: React.MouseEvent<HTMLElement>): void => {\n        const details = resolvedDetailsRef.current\n        const summary = summaryRef.current\n        if (!details?.open || !summary) return // expanding — let the native toggle run\n        event.preventDefault()\n        const before = summary.getBoundingClientRect().top\n        details.open = false\n        const after = summary.getBoundingClientRect().top\n        window.scrollBy(0, after - before)\n    }\n\n    return (\n        <div className={cx(\"metadata-box-expander\", className)}>\n            {preview && (\n                <div className=\"metadata-box-expander__preview metadata-box-expander__prose\">\n                    {preview}\n                </div>\n            )}\n            <details\n                className=\"metadata-box-expander__details\"\n                ref={resolvedDetailsRef}\n                // React 19 simulates bubbling for `toggle`, so toggles from\n                // nested <details> in the content would otherwise fire this\n                // handler too. Guard to only react to this element's own toggle.\n                onToggle={(e) => {\n                    if (e.target !== e.currentTarget) return\n                    onToggle?.(e.currentTarget.open)\n                }}\n            >\n                <summary\n                    className=\"metadata-box-expander__summary\"\n                    ref={summaryRef}\n                    onClick={handleSummaryClick}\n                >\n                    <span className=\"metadata-box-expander__show-more\">\n                        {showMoreLabel}{\" \"}\n                        <FontAwesomeIcon\n                            className=\"metadata-box-expander__chevron\"\n                            icon={faChevronDown}\n                        />\n                    </span>\n                    <span className=\"metadata-box-expander__show-less\">\n                        Show less{\" \"}\n                        <FontAwesomeIcon\n                            className=\"metadata-box-expander__chevron\"\n                            icon={faChevronUp}\n                        />\n                    </span>\n                </summary>\n                {children}\n            </details>\n        </div>\n    )\n}\n","import { faChevronUp } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\n\ninterface MetadataBoxCollapseButtonProps {\n    detailsRef: React.RefObject<HTMLDetailsElement | null>\n}\n\nexport function MetadataBoxCollapseButton({\n    detailsRef,\n}: MetadataBoxCollapseButtonProps): React.ReactElement {\n    return (\n        <button\n            type=\"button\"\n            className=\"metadata-box-collapse-button\"\n            onClick={() => {\n                if (detailsRef.current) detailsRef.current.open = false\n            }}\n        >\n            Show less\n            <FontAwesomeIcon\n                icon={faChevronUp}\n                className=\"metadata-box-collapse-button__chevron\"\n            />\n        </button>\n    )\n}\n","import cx from \"clsx\"\nimport { Children } from \"react\"\n\ninterface MetadataBoxSectionProps {\n    title?: string\n    id?: string\n    className?: string\n    children: React.ReactNode\n}\n\nexport function MetadataBoxSection({\n    title,\n    id,\n    className,\n    children,\n}: MetadataBoxSectionProps): React.ReactElement | null {\n    if (Children.toArray(children).length === 0) return null\n    return (\n        <section className={cx(\"metadata-box-section\", className)}>\n            {title && (\n                <h2 className=\"metadata-box-section__title\" id={id}>\n                    {title}\n                </h2>\n            )}\n            {children}\n        </section>\n    )\n}\n","/** The closing notice of a metadata box, asking readers to cite data providers */\nexport function MetadataBoxReuseNotice({\n    children,\n}: {\n    /** A licence line, rendered as a second paragraph */\n    children?: React.ReactNode\n}): React.ReactElement {\n    return (\n        <>\n            <p>\n                All data produced by third-party providers and made available by\n                Our World in Data are subject to the license terms from the\n                original providers. Our work would not be possible without the\n                data providers we rely on, so we ask you to always cite them\n                appropriately. This is crucial to allow data providers to\n                continue doing their work, enhancing, maintaining and updating\n                valuable data.\n            </p>\n            {children && <p>{children}</p>}\n        </>\n    )\n}\n","import cx from \"clsx\"\n\nexport function MetadataBoxKeyData({\n    children,\n}: {\n    children: React.ReactNode\n}): React.ReactElement {\n    return <dl className=\"metadata-box-key-data\">{children}</dl>\n}\n\ninterface MetadataBoxKeyDataRowProps {\n    label: string\n    isFullWidth?: boolean\n    /** Hides the label visually */\n    isLabelScreenReaderOnly?: boolean\n    labelClassName?: string\n    children: React.ReactNode\n}\n\nexport function MetadataBoxKeyDataRow({\n    label,\n    isFullWidth,\n    isLabelScreenReaderOnly,\n    labelClassName,\n    children,\n}: MetadataBoxKeyDataRowProps): React.ReactElement {\n    return (\n        <div\n            className={cx(\"metadata-box-key-data__row\", {\n                \"metadata-box-key-data__row--full-width\": isFullWidth,\n            })}\n        >\n            <dt\n                className={\n                    isLabelScreenReaderOnly\n                        ? \"sr-only\"\n                        : cx(\"metadata-box-key-data__key\", labelClassName)\n                }\n            >\n                {label}\n            </dt>\n            <dd className=\"metadata-box-key-data__value\">{children}</dd>\n        </div>\n    )\n}\n","import {\n    CHART_LICENSES,\n    DEFAULT_CHART_LICENSE,\n    LicenseOption,\n} from \"@ourworldindata/types\"\n\n// The license blurb shown in the \"Reuse this work\" section of data pages.\n// Charts default to CC BY; a stricter license can be set in the chart config\n// when a data provider requires it.\nexport function ChartLicenseNotice({\n    license = DEFAULT_CHART_LICENSE,\n}: {\n    license?: LicenseOption\n}): React.ReactElement {\n    const ccBy = CHART_LICENSES[DEFAULT_CHART_LICENSE]\n\n    if (license === DEFAULT_CHART_LICENSE)\n        return (\n            <>\n                All data, visualizations, and code produced by Our World in Data\n                are completely open access under the{\" \"}\n                <a href={ccBy.url}>Creative Commons BY license</a>. You have the\n                permission to use, distribute, and reproduce these in any\n                medium, provided the source and authors are credited.\n            </>\n        )\n\n    const chartLicense = CHART_LICENSES[license]\n    return (\n        <>\n            The visualization on this page is licensed under the{\" \"}\n            <a href={chartLicense.url}>\n                Creative Commons {chartLicense.name.replace(/^CC /, \"\")} license\n            </a>\n            , in line with the license terms of the data provider.\n        </>\n    )\n}\n","import { BespokeMetadata } from \"@ourworldindata/types\"\nimport cx from \"clsx\"\nimport { SimpleMarkdownText } from \"../SimpleMarkdownText.js\"\n\nexport const BESPOKE_METADATA_TITLE = \"About this data\"\n\n/** A bespoke viz's metadata title and the short description under it */\nexport function BespokeMetadataHeading({\n    metadata,\n    headingLevel = \"h2\",\n    className,\n}: {\n    metadata: BespokeMetadata\n    headingLevel?: \"h2\" | \"h3\"\n    className?: string\n}): React.ReactElement | null {\n    const Heading = headingLevel\n\n    if (!metadata.title) return null\n\n    return (\n        <div className={cx(\"bespoke-metadata-heading\", className)}>\n            <Heading className=\"bespoke-metadata-heading__title\">\n                {metadata.title}\n            </Heading>\n            {metadata.descriptionShort && (\n                <div className=\"bespoke-metadata-heading__description\">\n                    <SimpleMarkdownText text={metadata.descriptionShort} />\n                </div>\n            )}\n        </div>\n    )\n}\n","import { BespokeMetadata } from \"@ourworldindata/types\"\nimport {\n    getAttributionFragmentsFromBespokeMetadata,\n    getLastUpdatedFromVariable,\n    getNextUpdateFromVariable,\n} from \"@ourworldindata/utils\"\nimport {\n    makeDateRange,\n    makeLastUpdated,\n    makeNextUpdate,\n    makeSource,\n    makeUnit,\n} from \"../IndicatorKeyData/IndicatorKeyData.js\"\n\nexport interface BespokeMetadataKeyDataRow {\n    label: string\n    value: React.ReactNode\n    isFullWidth?: boolean\n    labelClassName?: string\n}\n\nexport function getBespokeKeyDataRows(\n    metadata: BespokeMetadata\n): BespokeMetadataKeyDataRow[] {\n    const attributions = getAttributionFragmentsFromBespokeMetadata(metadata)\n\n    const lastUpdated = getLastUpdatedFromVariable(metadata)\n    const nextUpdate = lastUpdated\n        ? getNextUpdateFromVariable(metadata)\n        : undefined\n\n    return [\n        {\n            label: \"Data source\",\n            value: makeSource({\n                attribution: attributions.join(\"; \"),\n                owidProcessingLevel: metadata.processingLevel,\n                isEmbeddedInADataPage: false,\n            }),\n            labelClassName: \"metadata-box-key-data__key--source\",\n        },\n        {\n            label: \"Unit\",\n            value: makeUnit({ unit: metadata.unit }),\n        },\n        {\n            label: \"Date range\",\n            // A timespan that isn't a year range prints as authored\n            value:\n                makeDateRange({ dateRange: metadata.timespan }) ??\n                metadata.timespan,\n        },\n        {\n            label: \"Last updated\",\n            value: makeLastUpdated({ lastUpdated }),\n        },\n        {\n            label: \"Next expected update\",\n            value: makeNextUpdate({ nextUpdate }),\n        },\n    ].filter((row) => !!row.value)\n}\n","import { BespokeMetadata } from \"@ourworldindata/types\"\nimport {\n    MetadataBoxKeyData,\n    MetadataBoxKeyDataRow,\n} from \"../MetadataBox/MetadataBoxKeyData.js\"\nimport { getBespokeKeyDataRows } from \"./bespokeKeyDataRows.js\"\n\nexport function BespokeMetadataKeyData({\n    metadata,\n}: {\n    metadata: BespokeMetadata\n}): React.ReactElement | null {\n    const rows = getBespokeKeyDataRows(metadata)\n\n    if (rows.length === 0) return null\n\n    return (\n        <MetadataBoxKeyData>\n            {rows.map(({ label, value, isFullWidth, labelClassName }) => (\n                <MetadataBoxKeyDataRow\n                    key={label}\n                    label={label}\n                    isFullWidth={isFullWidth}\n                    labelClassName={labelClassName}\n                >\n                    {value}\n                </MetadataBoxKeyDataRow>\n            ))}\n        </MetadataBoxKeyData>\n    )\n}\n","import { HTMLAttributes, useEffect, useState } from \"react\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faCopy } from \"@fortawesome/free-solid-svg-icons\"\nimport { canWriteToClipboard, copyToClipboard } from \"@ourworldindata/utils\"\nimport cx from \"clsx\"\nimport { SimpleMarkdownText } from \"../SimpleMarkdownText\"\n\nexport const CodeSnippet = ({\n    className,\n    code,\n    theme = \"dark\",\n    isTruncated = false,\n    useMarkdown = false,\n\n    // If true, always show the copy button (even if clipboard API is not available).\n    // Useful for the admin, where we're often running in HTTP contexts, but have fallbacks\n    // for copying to clipboard.\n    forceShowCopyButton = false,\n    codeAttributes,\n    onCopy,\n}: {\n    className?: string\n    code: string\n    theme?: \"dark\" | \"light\"\n    isTruncated?: boolean\n    useMarkdown?: boolean\n    forceShowCopyButton?: boolean\n    codeAttributes?: HTMLAttributes<HTMLElement> & Record<string, string>\n    onCopy?: () => void\n}) => {\n    const [canCopy, setCanCopy] = useState(false)\n    const [hasCopied, setHasCopied] = useState(false)\n\n    useEffect(() => {\n        void canWriteToClipboard().then(setCanCopy)\n    }, [])\n\n    const copy = async () => {\n        try {\n            const success = await copyToClipboard(code)\n            if (!success) return\n\n            onCopy?.()\n            setHasCopied(true)\n            // reset CSS animation\n            setTimeout(() => setHasCopied(false), 2000)\n        } catch (err) {\n            console.error(\n                \"Couldn't copy to clipboard using navigator.clipboard\",\n                err\n            )\n        }\n    }\n\n    return (\n        <div\n            className={cx(\n                `wp-code-snippet wp-code-snippet--${theme}`,\n                className\n            )}\n        >\n            <pre className=\"wp-block-code\">\n                <code\n                    className={cx(\"wp-code-snippet__code\", {\n                        \"wp-code-snippet__code--is-truncated\": isTruncated,\n                    })}\n                    {...codeAttributes}\n                >\n                    {useMarkdown ? (\n                        <SimpleMarkdownText text={code} useParagraphs={false} />\n                    ) : (\n                        code\n                    )}\n                </code>\n            </pre>\n            {(canCopy || forceShowCopyButton) && (\n                <button\n                    className={cx(\"code-copy-button\", {\n                        \"code-copy-button--has-copied\": hasCopied,\n                    })}\n                    onClick={copy}\n                    aria-label=\"Copy to clipboard\"\n                >\n                    {hasCopied ? \"Copied!\" : <FontAwesomeIcon icon={faCopy} />}\n                </button>\n            )}\n        </div>\n    )\n}\n","import { CodeSnippet } from \"../CodeSnippet/CodeSnippet.js\"\n\nexport const DataCitation = (props: {\n    citationShort: string\n    citationLong: string\n    onCopy?: (citation: \"citation_data_short\" | \"citation_data_full\") => void\n}) => {\n    return (\n        <div className=\"data-citation\">\n            {props.citationShort && (\n                <div className=\"data-citation__item\">\n                    <p className=\"citation__paragraph\">\n                        <span className=\"citation__type\">In-line citation</span>\n                        If you have limited space (e.g. in data visualizations),\n                        you can use this abbreviated in-line citation:\n                    </p>\n                    <CodeSnippet\n                        code={props.citationShort}\n                        theme=\"light\"\n                        useMarkdown={true}\n                        onCopy={() => props.onCopy?.(\"citation_data_short\")}\n                    />\n                </div>\n            )}\n            {props.citationLong && (\n                <div className=\"data-citation__item\">\n                    <p className=\"citation__paragraph\">\n                        <span className=\"citation__type\">Full citation</span>\n                    </p>\n                    <CodeSnippet\n                        code={props.citationLong}\n                        theme=\"light\"\n                        useMarkdown={true}\n                        onCopy={() => props.onCopy?.(\"citation_data_full\")}\n                    />\n                </div>\n            )}\n        </div>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport cx from \"clsx\"\nimport { ExpandableToggle } from \"../ExpandableToggle/ExpandableToggle.js\"\nimport { DisplaySource, formatSourceDate } from \"@ourworldindata/utils\"\nimport { SimpleMarkdownText } from \"../SimpleMarkdownText.js\"\nimport { CodeSnippet } from \"../CodeSnippet/CodeSnippet.js\"\nimport { REUSE_THIS_WORK_SECTION_ID } from \"../SharedDataPageConstants.js\"\nimport { makeLinks } from \"../IndicatorKeyData/IndicatorKeyData.js\"\n\nexport interface IndicatorSourcesProps {\n    sources: DisplaySource[]\n    isEmbeddedInADataPage?: boolean // true by default\n    hideReuseThisWorkText?: boolean\n    hideTeasers?: boolean\n    /** Called when an expandable source toggle is expanded or collapsed.\n     * `index` is the position of the source among the deduplicated sources. */\n    onSourceToggle?: (\n        source: DisplaySource,\n        index: number,\n        isOpen: boolean\n    ) => void\n    retrievedFromTrackNote?: string\n    descriptionTrackNote?: string\n    dodTrackNote?: string\n    /** Open links in a new tab, e.g. when rendered inside an iframe whose\n     *  host page can't be navigated away from. */\n    openLinksInNewTab?: boolean\n}\n\nexport const IndicatorSources = (props: IndicatorSourcesProps) => {\n    const isEmbeddedInADataPage = props.isEmbeddedInADataPage ?? true\n    const uniqueSources = _.uniqBy(props.sources, \"label\")\n\n    return (\n        <div\n            className={cx(\"indicator-sources\", {\n                \"indicator-sources--single\": uniqueSources.length === 1,\n            })}\n        >\n            {uniqueSources.map((source: DisplaySource, idx: number) => {\n                const content = (\n                    <SourceContent\n                        source={source}\n                        isEmbeddedInADataPage={isEmbeddedInADataPage}\n                        hideReuseThisWorkText={props.hideReuseThisWorkText}\n                        retrievedFromTrackNote={props.retrievedFromTrackNote}\n                        descriptionTrackNote={props.descriptionTrackNote}\n                        dodTrackNote={props.dodTrackNote}\n                        openLinksInNewTab={props.openLinksInNewTab}\n                    />\n                )\n                const useExpandableToggle =\n                    source.description || source.citation\n                return useExpandableToggle ? (\n                    <ExpandableToggle\n                        key={source.label}\n                        label={source.label}\n                        content={content}\n                        hasTeaser={!props.hideTeasers}\n                        onToggle={\n                            props.onSourceToggle\n                                ? (isOpen) =>\n                                      props.onSourceToggle?.(\n                                          source,\n                                          idx,\n                                          isOpen\n                                      )\n                                : undefined\n                        }\n                    />\n                ) : (\n                    <NonExpandable\n                        key={source.label}\n                        label={source.label}\n                        content={content}\n                    />\n                )\n            })}\n        </div>\n    )\n}\n\nconst NonExpandable = (props: { label: string; content: React.ReactNode }) => {\n    return (\n        <div className=\"NonExpandable\">\n            <h4 className=\"NonExpandable__title\">{props.label}</h4>\n            <div className=\"NonExpandable__content\">{props.content}</div>\n        </div>\n    )\n}\n\nconst SourceContent = (props: {\n    source: DisplaySource\n    isEmbeddedInADataPage: boolean\n    hideReuseThisWorkText?: boolean\n    retrievedFromTrackNote?: string\n    descriptionTrackNote?: string\n    dodTrackNote?: string\n    openLinksInNewTab?: boolean\n}) => {\n    const { source } = props\n    const retrievedOn = formatSourceDate(source.retrievedOn, \"MMMM D, YYYY\")\n    const showKeyInfo =\n        source.dataPublishedBy ||\n        retrievedOn ||\n        (source.retrievedFrom && source.retrievedFrom.length > 0) ||\n        source.citation\n    return (\n        <div className=\"source\">\n            {source.description && (\n                <div className=\"description\">\n                    <SimpleMarkdownText\n                        text={source.description.trim()}\n                        dataTrackNote={props.descriptionTrackNote}\n                        dodTrackNote={props.dodTrackNote}\n                        openLinksInNewTab={props.openLinksInNewTab}\n                    />\n                </div>\n            )}\n            {showKeyInfo && (\n                <div className=\"source-key-data-blocks\">\n                    {source.dataPublishedBy && (\n                        <div className=\"source-key-data source-key-data--span-2\">\n                            <div className=\"source-key-data__title\">\n                                Data published by\n                            </div>\n                            <div className=\"source-key-data__content\">\n                                <SimpleMarkdownText\n                                    text={source.dataPublishedBy.trim()}\n                                    dataTrackNote={props.descriptionTrackNote}\n                                    dodTrackNote={props.dodTrackNote}\n                                    openLinksInNewTab={props.openLinksInNewTab}\n                                />\n                            </div>\n                        </div>\n                    )}\n                    {retrievedOn && (\n                        <div\n                            className={cx(\"source-key-data\", {\n                                \"source-key-data--span-2\":\n                                    !source.retrievedFrom ||\n                                    source.retrievedFrom.length === 0,\n                            })}\n                        >\n                            <div className=\"source-key-data__title\">\n                                Retrieved on\n                            </div>\n                            <div className=\"source-key-data__content\">\n                                {retrievedOn}\n                            </div>\n                        </div>\n                    )}\n                    {source.retrievedFrom &&\n                        source.retrievedFrom.length > 0 && (\n                            <div\n                                className={cx(\"source-key-data\", {\n                                    \"source-key-data--span-2\": !retrievedOn,\n                                })}\n                            >\n                                <div className=\"source-key-data__title\">\n                                    Retrieved from\n                                </div>\n                                <div className=\"source-key-data__content\">\n                                    {makeLinks({\n                                        link: source.retrievedFrom,\n                                        trackNote: props.retrievedFromTrackNote,\n                                        openLinksInNewTab:\n                                            props.openLinksInNewTab,\n                                    })}\n                                </div>\n                            </div>\n                        )}\n                    {source.citation && (\n                        <div className=\"source-key-data source-key-data-citation source-key-data--span-2\">\n                            <div className=\"source-key-data__title\">\n                                Citation\n                            </div>\n                            <div className=\"source-key-data__content\">\n                                This is the citation of the original data\n                                obtained from the source, prior to any\n                                processing or adaptation by Our World in Data.{\" \"}\n                                {props.isEmbeddedInADataPage &&\n                                    !props.hideReuseThisWorkText && (\n                                        <>\n                                            To cite data downloaded from this\n                                            page, please use the suggested\n                                            citation given in{\" \"}\n                                            <a\n                                                href={`#${REUSE_THIS_WORK_SECTION_ID}`}\n                                            >\n                                                Reuse This Work\n                                            </a>{\" \"}\n                                            below.\n                                        </>\n                                    )}\n                                <CodeSnippet\n                                    code={source.citation.trim()}\n                                    theme=\"light\"\n                                    useMarkdown={true}\n                                />\n                            </div>\n                        </div>\n                    )}\n                </div>\n            )}\n        </div>\n    )\n}\n","import { BespokeMetadata } from \"@ourworldindata/types\"\nimport {\n    getAttributionFragmentsFromBespokeMetadata,\n    getIndicatorCitations,\n    prepareSourcesForDisplay,\n} from \"@ourworldindata/utils\"\nimport { ChartLicenseNotice } from \"../ChartLicenseNotice/ChartLicenseNotice.js\"\nimport { CodeSnippet } from \"../CodeSnippet/CodeSnippet.js\"\nimport { DataCitation } from \"../DataCitation/DataCitation.js\"\nimport { ExpandableToggle } from \"../ExpandableToggle/ExpandableToggle.js\"\nimport { IndicatorProcessing } from \"../IndicatorProcessing/IndicatorProcessing.js\"\nimport { IndicatorSources } from \"../IndicatorSources/IndicatorSources.js\"\nimport { MetadataBoxReuseNotice } from \"../MetadataBox/MetadataBoxReuseNotice.js\"\nimport { MetadataBoxSection } from \"../MetadataBox/MetadataBoxSection.js\"\nimport { SimpleMarkdownText } from \"../SimpleMarkdownText.js\"\n\nexport function BespokeMetadataSections({\n    metadata,\n    citationUrl,\n    pageCitation,\n}: {\n    metadata: BespokeMetadata\n    citationUrl?: string\n    /** The page's own citation, shown alongside the data's */\n    pageCitation?: string\n}): React.ReactElement {\n    const faqs = metadata.faqs ?? []\n    const sources = prepareSourcesForDisplay({\n        origins: metadata.origins ?? [],\n        source: undefined,\n    })\n    const attributions = getAttributionFragmentsFromBespokeMetadata(metadata)\n    const { short: citationShort, long: citationLong } = getIndicatorCitations({\n        indicatorTitle: { title: metadata.title ?? \"\" },\n        origins: metadata.origins ?? [],\n        attributions,\n        attributionShort: metadata.attributionShort,\n        titleVariant: metadata.titleVariant,\n        owidProcessingLevel: metadata.processingLevel,\n        citationUrl,\n    })\n\n    return (\n        <>\n            <MetadataBoxSection\n                title=\"Frequently asked questions\"\n                className=\"metadata-box-section--faqs\"\n            >\n                {faqs.map((faq) => (\n                    <ExpandableToggle\n                        key={faq.question}\n                        label={faq.question}\n                        content={<SimpleMarkdownText text={faq.answer} />}\n                    />\n                ))}\n                {metadata.descriptionProcessing && (\n                    <ExpandableToggle\n                        label=\"How did Our World in Data process this data?\"\n                        content={\n                            <IndicatorProcessing\n                                descriptionProcessing={\n                                    metadata.descriptionProcessing\n                                }\n                            />\n                        }\n                    />\n                )}\n            </MetadataBoxSection>\n            <MetadataBoxSection title=\"Documentation from data sources\">\n                {metadata.descriptionFromProducer && (\n                    <ExpandableToggle\n                        label={\n                            metadata.attributionShort || \"Principal data source\"\n                        }\n                        content={\n                            <SimpleMarkdownText\n                                text={metadata.descriptionFromProducer}\n                            />\n                        }\n                    />\n                )}\n            </MetadataBoxSection>\n            <MetadataBoxSection title=\"Data sources\">\n                {sources.length > 0 && (\n                    <IndicatorSources\n                        sources={sources}\n                        isEmbeddedInADataPage={false}\n                        hideReuseThisWorkText\n                        hideTeasers\n                    />\n                )}\n            </MetadataBoxSection>\n            <MetadataBoxSection\n                title=\"How to cite\"\n                className=\"bespoke-metadata-sections__citation\"\n            >\n                {pageCitation && (\n                    <ExpandableToggle\n                        label=\"How to cite this page\"\n                        content={\n                            <>\n                                <p className=\"citation__paragraph\">\n                                    To cite this page overall, including any\n                                    descriptions or explanations of the data\n                                    authored by Our World in Data, please use\n                                    the following citation:\n                                </p>\n                                <CodeSnippet\n                                    code={pageCitation}\n                                    theme=\"light\"\n                                    useMarkdown={true}\n                                />\n                            </>\n                        }\n                    />\n                )}\n                {attributions.length > 0 && metadata.title && (\n                    <ExpandableToggle\n                        label=\"How to cite this data\"\n                        content={\n                            <DataCitation\n                                citationShort={citationShort}\n                                citationLong={citationLong}\n                            />\n                        }\n                    />\n                )}\n            </MetadataBoxSection>\n            <MetadataBoxSection className=\"bespoke-metadata-sections__reuse-notice\">\n                <MetadataBoxReuseNotice>\n                    <ChartLicenseNotice license={metadata.license} />\n                </MetadataBoxReuseNotice>\n            </MetadataBoxSection>\n        </>\n    )\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /**\n * Calls all functions in the order they were chained with the same arguments.\n */ function $a4e76a5424781910$export$e08e3b67e392101e(...callbacks) {\n    return (...args)=>{\n        for (let callback of callbacks)if (typeof callback === 'function') callback(...args);\n    };\n}\n\n\nexport {$a4e76a5424781910$export$e08e3b67e392101e as chain};\n//# sourceMappingURL=chain.mjs.map\n","import $3ARPR$react from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $c4867b2f328c2698$export$e5c5a5f917a5871c = typeof document !== 'undefined' ? (0, $3ARPR$react).useLayoutEffect : ()=>{};\n\n\nexport {$c4867b2f328c2698$export$e5c5a5f917a5871c as useLayoutEffect};\n//# sourceMappingURL=useLayoutEffect.mjs.map\n","import $bl59K$react, {useContext as $bl59K$useContext, useState as $bl59K$useState, useMemo as $bl59K$useMemo, useLayoutEffect as $bl59K$useLayoutEffect, useRef as $bl59K$useRef} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // We must avoid a circular dependency with @react-aria/utils, and this useLayoutEffect is\n// guarded by a check that it only runs on the client side.\n// eslint-disable-next-line rsp-rules/use-layout-effect-rule\n\n// Default context value to use in case there is no SSRProvider. This is fine for\n// client-only apps. In order to support multiple copies of React Aria potentially\n// being on the page at once, the prefix is set to a random number. SSRProvider\n// will reset this to zero for consistency between server and client, so in the\n// SSR case multiple copies of React Aria is not supported.\nconst $c7eafbbe1ea5834e$var$defaultContext = {\n    prefix: String(Math.round(Math.random() * 10000000000)),\n    current: 0\n};\nconst $c7eafbbe1ea5834e$var$SSRContext = /*#__PURE__*/ (0, $bl59K$react).createContext($c7eafbbe1ea5834e$var$defaultContext);\nconst $c7eafbbe1ea5834e$var$IsSSRContext = /*#__PURE__*/ (0, $bl59K$react).createContext(false);\n// This is only used in React < 18.\nfunction $c7eafbbe1ea5834e$var$LegacySSRProvider(props) {\n    let cur = (0, $bl59K$useContext)($c7eafbbe1ea5834e$var$SSRContext);\n    let counter = $c7eafbbe1ea5834e$var$useCounter(cur === $c7eafbbe1ea5834e$var$defaultContext);\n    let [isSSR, setIsSSR] = (0, $bl59K$useState)(true);\n    let value = (0, $bl59K$useMemo)(()=>({\n            // If this is the first SSRProvider, start with an empty string prefix, otherwise\n            // append and increment the counter.\n            prefix: cur === $c7eafbbe1ea5834e$var$defaultContext ? '' : `${cur.prefix}-${counter}`,\n            current: 0\n        }), [\n        cur,\n        counter\n    ]);\n    // If on the client, and the component was initially server rendered,\n    // then schedule a layout effect to update the component after hydration.\n    if (typeof document !== 'undefined') // This if statement technically breaks the rules of hooks, but is safe\n    // because the condition never changes after mounting.\n    // oxlint-disable-next-line react/react-compiler, react-hooks/rules-of-hooks\n    (0, $bl59K$useLayoutEffect)(()=>{\n        // oxlint-disable-next-line react/react-compiler\n        setIsSSR(false);\n    }, []);\n    return /*#__PURE__*/ (0, $bl59K$react).createElement($c7eafbbe1ea5834e$var$SSRContext.Provider, {\n        value: value\n    }, /*#__PURE__*/ (0, $bl59K$react).createElement($c7eafbbe1ea5834e$var$IsSSRContext.Provider, {\n        value: isSSR\n    }, props.children));\n}\nlet $c7eafbbe1ea5834e$var$warnedAboutSSRProvider = false;\nfunction $c7eafbbe1ea5834e$export$9f8ac96af4b1b2ae(props) {\n    // oxlint-disable-next-line react/react-compiler\n    if (typeof (0, $bl59K$react)['useId'] === 'function') {\n        if (process.env.NODE_ENV !== 'test' && process.env.NODE_ENV !== 'production' && !$c7eafbbe1ea5834e$var$warnedAboutSSRProvider) {\n            console.warn('In React 18, SSRProvider is not necessary and is a noop. You can remove it from your app.');\n            // oxlint-disable-next-line react/react-compiler\n            $c7eafbbe1ea5834e$var$warnedAboutSSRProvider = true;\n        }\n        return /*#__PURE__*/ (0, $bl59K$react).createElement((0, $bl59K$react).Fragment, null, props.children);\n    }\n    return /*#__PURE__*/ (0, $bl59K$react).createElement($c7eafbbe1ea5834e$var$LegacySSRProvider, props);\n}\nlet $c7eafbbe1ea5834e$var$canUseDOM = Boolean(typeof window !== 'undefined' && window.document && window.document.createElement);\nlet $c7eafbbe1ea5834e$var$componentIds = new WeakMap();\nfunction $c7eafbbe1ea5834e$var$useCounter(isDisabled = false) {\n    let ctx = (0, $bl59K$useContext)($c7eafbbe1ea5834e$var$SSRContext);\n    let ref = (0, $bl59K$useRef)(null);\n    // eslint-disable-next-line rsp-rules/pure-render\n    // oxlint-disable-next-line react/react-compiler, rsp-rules/pure-render\n    if (ref.current === null && !isDisabled) {\n        // In strict mode, React renders components twice, and the ref will be reset to null on the second render.\n        // This means our id counter will be incremented twice instead of once. This is a problem because on the\n        // server, components are only rendered once and so ids generated on the server won't match the client.\n        // In React 18, useId was introduced to solve this, but it is not available in older versions. So to solve this\n        // we need to use some React internals to access the underlying Fiber instance, which is stable between renders.\n        // This is exposed as ReactCurrentOwner in development, which is all we need since StrictMode only runs in development.\n        // To ensure that we only increment the global counter once, we store the starting id for this component in\n        // a weak map associated with the Fiber. On the second render, we reset the global counter to this value.\n        // Since React runs the second render immediately after the first, this is safe.\n        let currentOwner = // @ts-ignore\n        (0, $bl59K$react).__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED?.ReactCurrentOwner?.current;\n        if (currentOwner) {\n            let prevComponentValue = $c7eafbbe1ea5834e$var$componentIds.get(currentOwner);\n            if (prevComponentValue == null) // On the first render, and first call to useId, store the id and state in our weak map.\n            $c7eafbbe1ea5834e$var$componentIds.set(currentOwner, {\n                id: ctx.current,\n                state: currentOwner.memoizedState\n            });\n            else if (currentOwner.memoizedState !== prevComponentValue.state) {\n                // On the second render, the memoizedState gets reset by React.\n                // Reset the counter, and remove from the weak map so we don't\n                // do this for subsequent useId calls.\n                // oxlint-disable-next-line react/react-compiler\n                ctx.current = prevComponentValue.id;\n                $c7eafbbe1ea5834e$var$componentIds.delete(currentOwner);\n            }\n        }\n        // eslint-disable-next-line rsp-rules/pure-render\n        // oxlint-disable-next-line react/react-compiler, rsp-rules/pure-render\n        ref.current = ++ctx.current;\n    }\n    // eslint-disable-next-line rsp-rules/pure-render\n    // oxlint-disable-next-line react/react-compiler, rsp-rules/pure-render\n    return ref.current;\n}\nfunction $c7eafbbe1ea5834e$var$useLegacySSRSafeId(defaultId) {\n    let ctx = (0, $bl59K$useContext)($c7eafbbe1ea5834e$var$SSRContext);\n    // If we are rendering in a non-DOM environment, and there's no SSRProvider,\n    // provide a warning to hint to the developer to add one.\n    if (ctx === $c7eafbbe1ea5834e$var$defaultContext && !$c7eafbbe1ea5834e$var$canUseDOM && process.env.NODE_ENV !== 'production') console.warn('When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.');\n    let counter = $c7eafbbe1ea5834e$var$useCounter(!!defaultId);\n    let prefix = ctx === $c7eafbbe1ea5834e$var$defaultContext && process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${ctx.prefix}`;\n    return defaultId || `${prefix}-${counter}`;\n}\nfunction $c7eafbbe1ea5834e$var$useModernSSRSafeId(defaultId) {\n    let id = (0, $bl59K$react).useId();\n    let [didSSR] = (0, $bl59K$useState)($c7eafbbe1ea5834e$export$535bd6ca7f90a273());\n    let prefix = didSSR || process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${$c7eafbbe1ea5834e$var$defaultContext.prefix}`;\n    return defaultId || `${prefix}-${id}`;\n}\nconst $c7eafbbe1ea5834e$export$619500959fc48b26 = typeof (0, $bl59K$react)['useId'] === 'function' ? $c7eafbbe1ea5834e$var$useModernSSRSafeId : $c7eafbbe1ea5834e$var$useLegacySSRSafeId;\nfunction $c7eafbbe1ea5834e$var$getSnapshot() {\n    return false;\n}\nfunction $c7eafbbe1ea5834e$var$getServerSnapshot() {\n    return true;\n}\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction $c7eafbbe1ea5834e$var$subscribe(onStoreChange) {\n    // noop\n    return ()=>{};\n}\nfunction $c7eafbbe1ea5834e$export$535bd6ca7f90a273() {\n    // In React 18, we can use useSyncExternalStore to detect if we're server rendering or hydrating.\n    // oxlint-disable-next-line react/react-compiler\n    if (typeof (0, $bl59K$react)['useSyncExternalStore'] === 'function') // oxlint-disable-next-line react/react-compiler\n    return (0, $bl59K$react)['useSyncExternalStore']($c7eafbbe1ea5834e$var$subscribe, $c7eafbbe1ea5834e$var$getSnapshot, $c7eafbbe1ea5834e$var$getServerSnapshot);\n    // oxlint-disable-next-line react/react-compiler, react-hooks/rules-of-hooks\n    return (0, $bl59K$useContext)($c7eafbbe1ea5834e$var$IsSSRContext);\n}\n\n\nexport {$c7eafbbe1ea5834e$export$9f8ac96af4b1b2ae as SSRProvider, $c7eafbbe1ea5834e$export$535bd6ca7f90a273 as useIsSSR, $c7eafbbe1ea5834e$export$619500959fc48b26 as useSSRSafeId};\n//# sourceMappingURL=SSRProvider.mjs.map\n","import {useLayoutEffect as $c4867b2f328c2698$export$e5c5a5f917a5871c} from \"./useLayoutEffect.mjs\";\nimport {useState as $dPTrK$useState, useRef as $dPTrK$useRef, useCallback as $dPTrK$useCallback} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $1a716630a9e3a599$export$14d238f342723f25(defaultValue) {\n    let [value, setValue] = (0, $dPTrK$useState)(defaultValue);\n    // Keep an up to date copy of value in a ref so we can access the current value in the generator.\n    // This allows us to maintain a stable queue function.\n    let currValue = (0, $dPTrK$useRef)(value);\n    let effect = (0, $dPTrK$useRef)(null);\n    // Store the function in a ref so we can always access the current version\n    // which has the proper `value` in scope.\n    let nextRef = (0, $dPTrK$useRef)(()=>{\n        if (!effect.current) return;\n        // Run the generator to the next yield.\n        let newValue = effect.current.next();\n        // If the generator is done, reset the effect.\n        if (newValue.done) {\n            effect.current = null;\n            return;\n        }\n        // If the value is the same as the current value,\n        // then continue to the next yield. Otherwise,\n        // set the value in state and wait for the next layout effect.\n        if (currValue.current === newValue.value) nextRef.current();\n        else setValue(newValue.value);\n    });\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        currValue.current = value;\n        // If there is an effect currently running, continue to the next yield.\n        if (effect.current) nextRef.current();\n    });\n    let queue = (0, $dPTrK$useCallback)((fn)=>{\n        effect.current = fn(currValue.current);\n        nextRef.current();\n    }, [\n        nextRef\n    ]);\n    return [\n        value,\n        queue\n    ];\n}\n\n\nexport {$1a716630a9e3a599$export$14d238f342723f25 as useValueEffect};\n//# sourceMappingURL=useValueEffect.mjs.map\n","import {useLayoutEffect as $c4867b2f328c2698$export$e5c5a5f917a5871c} from \"./useLayoutEffect.mjs\";\nimport {useSSRSafeId as $c7eafbbe1ea5834e$export$619500959fc48b26} from \"../ssr/SSRProvider.mjs\";\nimport {useValueEffect as $1a716630a9e3a599$export$14d238f342723f25} from \"./useValueEffect.mjs\";\nimport {useState as $4QKZm$useState, useRef as $4QKZm$useRef, useEffect as $4QKZm$useEffect, useCallback as $4QKZm$useCallback} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n// copied from SSRProvider.tsx to reduce exports, if needed again, consider sharing\nlet $390e54f620492c70$var$canUseDOM = Boolean(typeof window !== 'undefined' && window.document && window.document.createElement);\nlet $390e54f620492c70$export$d41a04c74483c6ef = new Map();\n// This allows us to clean up the idsUpdaterMap when the id is no longer used.\n// Map is a strong reference, so unused ids wouldn't be cleaned up otherwise.\n// This can happen in suspended components where mount/unmount is not called.\nlet $390e54f620492c70$var$registry;\nif (typeof FinalizationRegistry !== 'undefined') $390e54f620492c70$var$registry = new FinalizationRegistry((heldValue)=>{\n    $390e54f620492c70$export$d41a04c74483c6ef.delete(heldValue);\n});\nlet $390e54f620492c70$var$registeredIds = new WeakMap();\nfunction $390e54f620492c70$export$f680877a34711e37(defaultId) {\n    let [value, setValue] = (0, $4QKZm$useState)(defaultId);\n    let nextId = (0, $4QKZm$useRef)(null);\n    let res = (0, $c7eafbbe1ea5834e$export$619500959fc48b26)(value);\n    let cleanupRef = (0, $4QKZm$useRef)(null);\n    // These are intentionally disabled the compiler, these functions just read the identity\n    // of the ref, not the value inside current.\n    // oxlint-disable-next-line react/react-compiler\n    let registeredId = $390e54f620492c70$var$registeredIds.get(cleanupRef);\n    if ($390e54f620492c70$var$registry && registeredId !== res) {\n        if (registeredId != null) // oxlint-disable-next-line react/react-compiler\n        $390e54f620492c70$var$registry.unregister(cleanupRef);\n        // oxlint-disable-next-line react/react-compiler\n        $390e54f620492c70$var$registry.register(cleanupRef, res, cleanupRef);\n        // oxlint-disable-next-line react/react-compiler\n        $390e54f620492c70$var$registeredIds.set(cleanupRef, res);\n    }\n    if ($390e54f620492c70$var$canUseDOM) {\n        const cacheIdRef = $390e54f620492c70$export$d41a04c74483c6ef.get(res);\n        // oxlint-disable-next-line react/react-compiler\n        if (cacheIdRef && !cacheIdRef.includes(nextId)) // oxlint-disable-next-line react/react-compiler\n        cacheIdRef.push(nextId);\n        else // oxlint-disable-next-line react/react-compiler\n        $390e54f620492c70$export$d41a04c74483c6ef.set(res, [\n            nextId\n        ]);\n    }\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        let r = res;\n        return ()=>{\n            // In Suspense, the cleanup function may be not called\n            // when it is though, also remove it from the finalization registry.\n            if ($390e54f620492c70$var$registry) {\n                $390e54f620492c70$var$registry.unregister(cleanupRef);\n                $390e54f620492c70$var$registeredIds.delete(cleanupRef);\n            }\n            $390e54f620492c70$export$d41a04c74483c6ef.delete(r);\n        };\n    }, [\n        res\n    ]);\n    // This cannot cause an infinite loop because the ref is always cleaned up.\n    // eslint-disable-next-line\n    (0, $4QKZm$useEffect)(()=>{\n        let newId = nextId.current;\n        if (newId) setValue(newId);\n        return ()=>{\n            if (newId) nextId.current = null;\n        };\n    });\n    return res;\n}\nfunction $390e54f620492c70$export$cd8c9cb68f842629(idA, idB) {\n    if (idA === idB) return idA;\n    let setIdsA = $390e54f620492c70$export$d41a04c74483c6ef.get(idA);\n    if (setIdsA) {\n        setIdsA.forEach((ref)=>ref.current = idB);\n        return idB;\n    }\n    let setIdsB = $390e54f620492c70$export$d41a04c74483c6ef.get(idB);\n    if (setIdsB) {\n        setIdsB.forEach((ref)=>ref.current = idA);\n        return idA;\n    }\n    return idB;\n}\nfunction $390e54f620492c70$export$b4cc09c592e8fdb8(depArray = []) {\n    let id = $390e54f620492c70$export$f680877a34711e37();\n    let [resolvedId, setResolvedId] = (0, $1a716630a9e3a599$export$14d238f342723f25)(id);\n    let updateId = (0, $4QKZm$useCallback)(()=>{\n        setResolvedId(function*() {\n            yield id;\n            yield document.getElementById(id) ? id : undefined;\n        });\n    // oxlint-disable-next-line react/react-compiler\n    }, [\n        id,\n        setResolvedId\n    ]);\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(updateId, [\n        id,\n        updateId,\n        ...depArray\n    ]);\n    return resolvedId;\n}\n\n\nexport {$390e54f620492c70$export$d41a04c74483c6ef as idsUpdaterMap, $390e54f620492c70$export$f680877a34711e37 as useId, $390e54f620492c70$export$cd8c9cb68f842629 as mergeIds, $390e54f620492c70$export$b4cc09c592e8fdb8 as useSlotId};\n//# sourceMappingURL=useId.mjs.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $4064df0d6f9620e1$export$c9058316764c140e(...refs) {\n    if (refs.length === 1 && refs[0]) return refs[0];\n    return (value)=>{\n        let hasCleanup = false;\n        const cleanups = refs.map((ref)=>{\n            const cleanup = $4064df0d6f9620e1$var$setRef(ref, value);\n            hasCleanup ||= typeof cleanup == 'function';\n            return cleanup;\n        });\n        if (hasCleanup) return ()=>{\n            cleanups.forEach((cleanup, i)=>{\n                if (typeof cleanup === 'function') cleanup();\n                else $4064df0d6f9620e1$var$setRef(refs[i], null);\n            });\n        };\n    };\n}\nfunction $4064df0d6f9620e1$var$setRef(ref, value) {\n    if (typeof ref === 'function') return ref(value);\n    else if (ref != null) ref.current = value;\n}\n\n\nexport {$4064df0d6f9620e1$export$c9058316764c140e as mergeRefs};\n//# sourceMappingURL=mergeRefs.mjs.map\n","import {chain as $a4e76a5424781910$export$e08e3b67e392101e} from \"./chain.mjs\";\nimport {mergeIds as $390e54f620492c70$export$cd8c9cb68f842629} from \"./useId.mjs\";\nimport {mergeRefs as $4064df0d6f9620e1$export$c9058316764c140e} from \"./mergeRefs.mjs\";\nimport $aPpn7$clsx from \"clsx\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nfunction $bbaa08b3cd72f041$export$9d1611c77c2fe928(...args) {\n    // Start with a base clone of the first argument. This is a lot faster than starting\n    // with an empty object and adding properties as we go.\n    let result = {\n        ...args[0]\n    };\n    for(let i = 1; i < args.length; i++){\n        let props = args[i];\n        for(let key in props){\n            let a = result[key];\n            let b = props[key];\n            // Chain events\n            if (typeof a === 'function' && typeof b === 'function' && // This is a lot faster than a regex.\n            key[0] === 'o' && key[1] === 'n' && key.charCodeAt(2) >= /* 'A' */ 65 && key.charCodeAt(2) <= /* 'Z' */ 90) result[key] = (0, $a4e76a5424781910$export$e08e3b67e392101e)(a, b);\n            else if ((key === 'className' || key === 'UNSAFE_className') && typeof a === 'string' && typeof b === 'string') result[key] = (0, $aPpn7$clsx)(a, b);\n            else if (key === 'id' && a && b) result.id = (0, $390e54f620492c70$export$cd8c9cb68f842629)(a, b);\n            else if (key === 'ref' && a && b) result.ref = (0, $4064df0d6f9620e1$export$c9058316764c140e)(a, b);\n            else result[key] = b !== undefined ? b : a;\n        }\n    }\n    return result;\n}\n\n\nexport {$bbaa08b3cd72f041$export$9d1611c77c2fe928 as mergeProps};\n//# sourceMappingURL=mergeProps.mjs.map\n","import {useRef as $i6EpZ$useRef, useCallback as $i6EpZ$useCallback, useMemo as $i6EpZ$useMemo} from \"react\";\n\n/*\n * Copyright 2021 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $03e8ab2d84d7657a$export$4338b53315abf666(ref) {\n    const objRef = (0, $i6EpZ$useRef)(null);\n    const cleanupRef = (0, $i6EpZ$useRef)(undefined);\n    const refEffect = (0, $i6EpZ$useCallback)((instance)=>{\n        if (typeof ref === 'function') {\n            const refCallback = ref;\n            const refCleanup = refCallback(instance);\n            return ()=>{\n                if (typeof refCleanup === 'function') refCleanup();\n                else refCallback(null);\n            };\n        } else if (ref) {\n            // oxlint-disable-next-line react/react-compiler\n            ref.current = instance;\n            return ()=>{\n                ref.current = null;\n            };\n        }\n    }, [\n        ref\n    ]);\n    return (0, $i6EpZ$useMemo)(()=>({\n            get current () {\n                return objRef.current;\n            },\n            set current (value){\n                objRef.current = value;\n                if (cleanupRef.current) {\n                    cleanupRef.current();\n                    cleanupRef.current = undefined;\n                }\n                if (value != null) cleanupRef.current = refEffect(value);\n            }\n        }), // oxlint-disable-next-line react/react-compiler\n    [\n        refEffect\n    ]);\n}\n\n\nexport {$03e8ab2d84d7657a$export$4338b53315abf666 as useObjectRef};\n//# sourceMappingURL=useObjectRef.mjs.map\n","import {mergeProps as $ahdqC$mergeProps} from \"react-aria/mergeProps\";\nimport {mergeRefs as $ahdqC$mergeRefs} from \"react-aria/mergeRefs\";\nimport $ahdqC$react, {useMemo as $ahdqC$useMemo, useContext as $ahdqC$useContext, useState as $ahdqC$useState, useRef as $ahdqC$useRef, useCallback as $ahdqC$useCallback, forwardRef as $ahdqC$forwardRef} from \"react\";\nimport {useLayoutEffect as $ahdqC$useLayoutEffect} from \"react-aria/private/utils/useLayoutEffect\";\nimport {useObjectRef as $ahdqC$useObjectRef} from \"react-aria/useObjectRef\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nconst $7230ffa83bc0c2cf$export$c62b8e45d58ddad9 = Symbol('default');\nfunction $7230ffa83bc0c2cf$export$2881499e37b75b9a({ values: values, children: children }) {\n    for (let [Context, value] of values)// @ts-ignore\n    children = /*#__PURE__*/ (0, $ahdqC$react).createElement(Context.Provider, {\n        value: value\n    }, children);\n    return children;\n}\nfunction $7230ffa83bc0c2cf$export$4d86445c2cf5e3(props) {\n    let { className: className, style: style, children: children, defaultClassName: defaultClassName, defaultChildren: defaultChildren, defaultStyle: defaultStyle, values: values, render: render } = props;\n    return (0, $ahdqC$useMemo)(()=>{\n        let computedClassName;\n        let computedStyle;\n        let computedChildren;\n        if (typeof className === 'function') computedClassName = className({\n            ...values,\n            defaultClassName: defaultClassName\n        });\n        else computedClassName = className;\n        if (typeof style === 'function') computedStyle = style({\n            ...values,\n            defaultStyle: defaultStyle || {}\n        });\n        else computedStyle = style;\n        if (typeof children === 'function') computedChildren = children({\n            ...values,\n            defaultChildren: defaultChildren\n        });\n        else if (children == null) computedChildren = defaultChildren;\n        else computedChildren = children;\n        return {\n            className: computedClassName ?? defaultClassName,\n            style: computedStyle || defaultStyle ? {\n                ...defaultStyle,\n                ...computedStyle\n            } : undefined,\n            children: computedChildren ?? defaultChildren,\n            'data-rac': '',\n            render: render ? (props)=>render(props, values) : undefined\n        };\n    }, [\n        className,\n        style,\n        children,\n        defaultClassName,\n        defaultChildren,\n        defaultStyle,\n        values,\n        render\n    ]);\n}\nfunction $7230ffa83bc0c2cf$export$c245e6201fed2f75(// https://stackoverflow.com/questions/60898079/typescript-type-t-or-function-t-usage\nvalue, wrap) {\n    return (renderProps)=>wrap(typeof value === 'function' ? value(renderProps) : value, renderProps);\n}\nfunction $7230ffa83bc0c2cf$export$fabf2dc03a41866e(context, slot) {\n    let ctx = (0, $ahdqC$useContext)(context);\n    if (slot === null) // An explicit `null` slot means don't use context.\n    return null;\n    if (ctx && typeof ctx === 'object' && 'slots' in ctx && ctx.slots) {\n        let slotKey = slot || $7230ffa83bc0c2cf$export$c62b8e45d58ddad9;\n        if (!ctx.slots[slotKey]) {\n            let availableSlots = new Intl.ListFormat().format(Object.keys(ctx.slots).map((p)=>`\"${p}\"`));\n            let errorMessage = slot ? `Invalid slot \"${slot}\".` : 'A slot prop is required.';\n            throw new Error(`${errorMessage} Valid slot names are ${availableSlots}.`);\n        }\n        return ctx.slots[slotKey];\n    }\n    // @ts-ignore\n    return ctx;\n}\nfunction $7230ffa83bc0c2cf$export$29f1550f4b0d4415(props, ref, context) {\n    let ctx = $7230ffa83bc0c2cf$export$fabf2dc03a41866e(context, props.slot) || {};\n    let { ref: contextRef, ...contextProps } = ctx;\n    let mergedRef = (0, $ahdqC$useObjectRef)((0, $ahdqC$useMemo)(()=>(0, $ahdqC$mergeRefs)(ref, contextRef), [\n        ref,\n        contextRef\n    ]));\n    let mergedProps = (0, $ahdqC$mergeProps)(contextProps, props);\n    // mergeProps does not merge `style`. Adding this there might be a breaking change.\n    if ('style' in contextProps && contextProps.style && 'style' in props && props.style) {\n        if (typeof contextProps.style === 'function' || typeof props.style === 'function') // @ts-ignore\n        mergedProps.style = (renderProps)=>{\n            let contextStyle = typeof contextProps.style === 'function' ? contextProps.style(renderProps) : contextProps.style;\n            let defaultStyle = {\n                ...renderProps.defaultStyle,\n                ...contextStyle\n            };\n            let style = typeof props.style === 'function' ? props.style({\n                ...renderProps,\n                defaultStyle: defaultStyle\n            }) : props.style;\n            return {\n                ...defaultStyle,\n                ...style\n            };\n        };\n        else // @ts-ignore\n        mergedProps.style = {\n            ...contextProps.style,\n            ...props.style\n        };\n    }\n    return [\n        mergedProps,\n        mergedRef\n    ];\n}\nfunction $7230ffa83bc0c2cf$export$9d4c57ee4c6ffdd8(initialState = true) {\n    // Initial state is typically based on the parent having an aria-label or aria-labelledby.\n    // If it does, this value should be false so that we don't update the state and cause a rerender when we go through the layoutEffect\n    let [hasSlot, setHasSlot] = (0, $ahdqC$useState)(initialState);\n    let hasRun = (0, $ahdqC$useRef)(false);\n    // A callback ref which will run when the slotted element mounts.\n    // This should happen before the useLayoutEffect below.\n    let ref = (0, $ahdqC$useCallback)((el)=>{\n        hasRun.current = true;\n        setHasSlot(!!el);\n    }, []);\n    // If the callback hasn't been called, then reset to false.\n    (0, $ahdqC$useLayoutEffect)(()=>{\n        if (!hasRun.current) setHasSlot(false);\n    }, []);\n    return [\n        ref,\n        hasSlot\n    ];\n}\nfunction $7230ffa83bc0c2cf$export$ef03459518577ad4(props) {\n    const prefix = /^(data-.*)$/;\n    let filteredProps = {};\n    for(const prop in props)if (!prefix.test(prop)) filteredProps[prop] = props[prop];\n    return filteredProps;\n}\nfunction $7230ffa83bc0c2cf$var$DOMElement(ElementType, props, forwardedRef) {\n    let { render: render, ...otherProps } = props;\n    let elementRef = (0, $ahdqC$useRef)(null);\n    let ref = (0, $ahdqC$useMemo)(()=>(0, $ahdqC$mergeRefs)(forwardedRef, elementRef), [\n        forwardedRef,\n        elementRef\n    ]);\n    (0, $ahdqC$useLayoutEffect)(()=>{\n        if (process.env.NODE_ENV !== 'production' && render) {\n            if (!elementRef.current) console.warn('Ref was not connected to DOM element returned by custom `render` function. Did you forget to pass through or merge the `ref`?');\n            else if (elementRef.current.localName !== ElementType) console.warn(`Unexpected DOM element returned by custom \\`render\\` function. Expected <${ElementType}>, got <${elementRef.current.localName}>. This may break the component behavior and accessibility.`);\n        }\n    }, [\n        ElementType,\n        render\n    ]);\n    let domProps = {\n        ...otherProps,\n        ref: ref\n    };\n    if (render) return render(domProps, undefined);\n    return /*#__PURE__*/ (0, $ahdqC$react).createElement(ElementType, domProps);\n}\nconst $7230ffa83bc0c2cf$var$domComponentCache = {};\nconst $7230ffa83bc0c2cf$export$df3a06d6289f983e = new Proxy({}, {\n    get (target, elementType) {\n        if (typeof elementType !== 'string') return undefined;\n        let res = $7230ffa83bc0c2cf$var$domComponentCache[elementType];\n        if (!res) {\n            res = /*#__PURE__*/ (0, $ahdqC$forwardRef)($7230ffa83bc0c2cf$var$DOMElement.bind(null, elementType));\n            $7230ffa83bc0c2cf$var$domComponentCache[elementType] = res;\n        }\n        return res;\n    }\n});\n\n\nexport {$7230ffa83bc0c2cf$export$c62b8e45d58ddad9 as DEFAULT_SLOT, $7230ffa83bc0c2cf$export$2881499e37b75b9a as Provider, $7230ffa83bc0c2cf$export$4d86445c2cf5e3 as useRenderProps, $7230ffa83bc0c2cf$export$c245e6201fed2f75 as composeRenderProps, $7230ffa83bc0c2cf$export$fabf2dc03a41866e as useSlottedContext, $7230ffa83bc0c2cf$export$29f1550f4b0d4415 as useContextProps, $7230ffa83bc0c2cf$export$9d4c57ee4c6ffdd8 as useSlot, $7230ffa83bc0c2cf$export$ef03459518577ad4 as removeDataAttributes, $7230ffa83bc0c2cf$export$df3a06d6289f983e as dom};\n//# sourceMappingURL=utils.mjs.map\n","/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Custom event names for updating the autocomplete's aria-activedecendant.\nconst $8b2399d051d06d4c$export$447a38995de2c711 = 'react-aria-clear-focus';\nconst $8b2399d051d06d4c$export$831c820ad60f9d12 = 'react-aria-focus';\n\n\nexport {$8b2399d051d06d4c$export$447a38995de2c711 as CLEAR_FOCUS_EVENT, $8b2399d051d06d4c$export$831c820ad60f9d12 as FOCUS_EVENT};\n//# sourceMappingURL=constants.mjs.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ const $d447af545b77c9f1$export$b204af158042fbac = (target)=>{\n    if ($d447af545b77c9f1$var$isWindow(target)) return target.document;\n    if ($d447af545b77c9f1$export$62858bae88b53fd0(target)) return target;\n    // @ts-expect-error Ensure safe access in SSR environments.\n    return target?.ownerDocument ?? (typeof document !== 'undefined' ? document : undefined);\n};\nconst $d447af545b77c9f1$export$f21a1ffae260145a = (target)=>{\n    let ownerDocument = $d447af545b77c9f1$export$b204af158042fbac(target);\n    // @ts-expect-error Ensure safe access in SSR environments.\n    return ownerDocument?.defaultView ?? (typeof window !== 'undefined' ? window : undefined);\n};\nfunction $d447af545b77c9f1$export$8ee0fc9ee280b4ee(value) {\n    return value !== null && typeof value === 'object' && 'nodeType' in value && typeof value.nodeType === 'number';\n}\n/**\n * Type guard that checks if a value is a Window. Uses window self reference checks to\n * distinguish Window from other values.\n */ function $d447af545b77c9f1$var$isWindow(value) {\n    return typeof value === 'object' && value != null && 'window' in value && value.window === value;\n}\nfunction $d447af545b77c9f1$export$62858bae88b53fd0(value) {\n    return $d447af545b77c9f1$export$8ee0fc9ee280b4ee(value) && value.nodeType === 9;\n}\nfunction $d447af545b77c9f1$export$af51f0f06c0f328a(value) {\n    // 11 = DOCUMENT_FRAGMENT_NODE\n    return $d447af545b77c9f1$export$8ee0fc9ee280b4ee(value) && value.nodeType === 11 && 'host' in value;\n}\nfunction $d447af545b77c9f1$export$f531f92e2a15358f(target, event, listener, options) {\n    if (listener == null || target == null) return ()=>{};\n    let eventTargets = Array.isArray(target) ? target : [\n        target\n    ];\n    for (let eventTarget of eventTargets)eventTarget.addEventListener(event, listener, options);\n    return ()=>{\n        for (let eventTarget of eventTargets)eventTarget.removeEventListener(event, listener, options);\n    };\n}\nfunction $d447af545b77c9f1$export$37a5fde709c1db82(target, property, value, priority) {\n    if (target == null) return ()=>{};\n    let restore = new Array();\n    let styleTargets = Array.isArray(target) ? target : [\n        target\n    ];\n    for (let styleTarget of styleTargets){\n        let initialValue = styleTarget.style.getPropertyValue(property);\n        let initialPriority = styleTarget.style.getPropertyPriority(property);\n        styleTarget.style.setProperty(property, value, priority);\n        restore.unshift(()=>{\n            if (initialValue) styleTarget.style.setProperty(property, initialValue, initialPriority);\n            else styleTarget.style.removeProperty(property);\n        });\n    }\n    return ()=>{\n        for (let cleanup of restore)cleanup();\n    };\n}\n\n\nexport {$d447af545b77c9f1$export$b204af158042fbac as getOwnerDocument, $d447af545b77c9f1$export$62858bae88b53fd0 as isDocument, $d447af545b77c9f1$export$f21a1ffae260145a as getOwnerWindow, $d447af545b77c9f1$export$8ee0fc9ee280b4ee as isNode, $d447af545b77c9f1$export$af51f0f06c0f328a as isShadowRoot, $d447af545b77c9f1$export$f531f92e2a15358f as addEvent, $d447af545b77c9f1$export$37a5fde709c1db82 as setStyle};\n//# sourceMappingURL=domHelpers.mjs.map\n","/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ let $6a20a7989e6c817a$var$_tableNestedRows = false;\nlet $6a20a7989e6c817a$var$_shadowDOM = false;\nfunction $6a20a7989e6c817a$export$d9d8a0f82de49530() {\n    $6a20a7989e6c817a$var$_tableNestedRows = true;\n}\nfunction $6a20a7989e6c817a$export$1b00cb14a96194e6() {\n    return $6a20a7989e6c817a$var$_tableNestedRows;\n}\nfunction $6a20a7989e6c817a$export$12b151d9882e9985() {\n    $6a20a7989e6c817a$var$_shadowDOM = true;\n}\nfunction $6a20a7989e6c817a$export$98658e8c59125e6a() {\n    return $6a20a7989e6c817a$var$_shadowDOM;\n}\n\n\nexport {$6a20a7989e6c817a$export$d9d8a0f82de49530 as enableTableNestedRows, $6a20a7989e6c817a$export$1b00cb14a96194e6 as tableNestedRows, $6a20a7989e6c817a$export$12b151d9882e9985 as enableShadowDOM, $6a20a7989e6c817a$export$98658e8c59125e6a as shadowDOM};\n//# sourceMappingURL=flags.mjs.map\n","import {getOwnerWindow as $d447af545b77c9f1$export$f21a1ffae260145a, isShadowRoot as $d447af545b77c9f1$export$af51f0f06c0f328a} from \"../domHelpers.mjs\";\nimport {shadowDOM as $eXv8n$shadowDOM} from \"react-stately/private/flags/flags\";\n\n// Source: https://github.com/microsoft/tabster/blob/a89fc5d7e332d48f68d03b1ca6e344489d1c3898/src/Shadowdomize/DOMFunctions.ts#L16\n/* eslint-disable rsp-rules/no-non-shadow-contains, rsp-rules/safe-event-target */ \n\nfunction $23f2114a1b82827e$export$4282f70798064fe0(node, otherNode) {\n    if (!(0, $eXv8n$shadowDOM)()) return otherNode && node ? node.contains(otherNode) : false;\n    if (!node || !otherNode) return false;\n    let currentNode = otherNode;\n    while(currentNode != null){\n        if (currentNode === node) return true;\n        if (typeof currentNode.assignedElements !== 'function' && currentNode.assignedSlot?.parentNode) // Element is slotted\n        currentNode = currentNode.assignedSlot.parentNode;\n        else if ((0, $d447af545b77c9f1$export$af51f0f06c0f328a)(currentNode)) // Element is in shadow root\n        currentNode = currentNode.host;\n        else currentNode = currentNode.parentNode;\n    }\n    return false;\n}\nconst $23f2114a1b82827e$export$cd4e5573fbe2b576 = (doc = document)=>{\n    if (!(0, $eXv8n$shadowDOM)()) return doc.activeElement;\n    let activeElement = doc.activeElement;\n    while(activeElement && 'shadowRoot' in activeElement && activeElement.shadowRoot?.activeElement)activeElement = activeElement.shadowRoot.activeElement;\n    return activeElement;\n};\nfunction $23f2114a1b82827e$export$e58f029f0fbfdb29(event) {\n    if ((0, $eXv8n$shadowDOM)() && event.target instanceof Element && event.target.shadowRoot) {\n        if ('composedPath' in event) return event.composedPath()[0] ?? null;\n        else if ('composedPath' in event.nativeEvent) return event.nativeEvent.composedPath()[0] ?? null;\n    }\n    return event.target;\n}\nfunction $23f2114a1b82827e$export$da7af4355d792141(from, to) {\n    // If `to` is coming from a ref, its type technically allows `null`.\n    // In practice, this function will generally be called from within a useEffect.\n    // If the ref has not resolved by that point, then a coding error has been made.\n    // Better to return an empty array than `[window]`, which may appear to work\n    // in the light DOM, but fail in the shadow DOM.\n    if (to === null) return [];\n    to = to ?? (0, $d447af545b77c9f1$export$f21a1ffae260145a)(from);\n    let targets = [\n        to\n    ];\n    if (!(0, $eXv8n$shadowDOM)() || !from || from === to) return targets;\n    // The root `to` itself lives in. The event already reaches `to` once\n    // it is inside this root, so we must NOT collect this root or anything above\n    // it — only the shadow roots strictly between `refNode` and `to`.\n    // `window` has no getRootNode; its boundary is the document, which the walk\n    // reaches naturally (the document is not a ShadowRoot, so the loop exits).\n    let toRoot = 'getRootNode' in to ? to.getRootNode() : null;\n    let current = from.getRootNode() ?? null;\n    while((0, $d447af545b77c9f1$export$af51f0f06c0f328a)(current) && current !== toRoot){\n        // order shouldn't matter\n        targets.push(current);\n        current = current.host.getRootNode();\n    }\n    return targets;\n}\nfunction $23f2114a1b82827e$export$b4f377a2b6254582(node) {\n    if (!node) return false;\n    // Get the active element within the node's parent shadow root (or the document). Can return null.\n    let root = node.getRootNode();\n    let ownerWindow = (0, $d447af545b77c9f1$export$f21a1ffae260145a)(node);\n    if (!(root instanceof ownerWindow.Document || root instanceof ownerWindow.ShadowRoot)) return false;\n    let activeElement = root.activeElement;\n    // Check if the active element is within this node. These nodes are within the same shadow root.\n    return activeElement != null && node.contains(activeElement);\n}\n\n\nexport {$23f2114a1b82827e$export$4282f70798064fe0 as nodeContains, $23f2114a1b82827e$export$cd4e5573fbe2b576 as getActiveElement, $23f2114a1b82827e$export$e58f029f0fbfdb29 as getEventTarget, $23f2114a1b82827e$export$da7af4355d792141 as getPropagationTargets, $23f2114a1b82827e$export$b4f377a2b6254582 as isFocusWithin};\n//# sourceMappingURL=DOMFunctions.mjs.map\n","import {getActiveElement as $23f2114a1b82827e$export$cd4e5573fbe2b576} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {getOwnerDocument as $d447af545b77c9f1$export$b204af158042fbac} from \"../utils/domHelpers.mjs\";\n\n\n\nfunction $b72f3f7b3b5f42c6$export$76e4e37e5339496d(to) {\n    let from = $b72f3f7b3b5f42c6$export$759df0d867455a91((0, $d447af545b77c9f1$export$b204af158042fbac)(to));\n    if (from !== to) {\n        if (from) $b72f3f7b3b5f42c6$export$6c5dc7e81d2cc29a(from, to);\n        if (to) $b72f3f7b3b5f42c6$export$2b35b76d2e30e129(to, from);\n    }\n}\nfunction $b72f3f7b3b5f42c6$export$6c5dc7e81d2cc29a(from, to) {\n    from.dispatchEvent(new FocusEvent('blur', {\n        relatedTarget: to\n    }));\n    from.dispatchEvent(new FocusEvent('focusout', {\n        bubbles: true,\n        relatedTarget: to\n    }));\n}\nfunction $b72f3f7b3b5f42c6$export$2b35b76d2e30e129(to, from) {\n    to.dispatchEvent(new FocusEvent('focus', {\n        relatedTarget: from\n    }));\n    to.dispatchEvent(new FocusEvent('focusin', {\n        bubbles: true,\n        relatedTarget: from\n    }));\n}\nfunction $b72f3f7b3b5f42c6$export$759df0d867455a91(document) {\n    let activeElement = (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)(document);\n    let activeDescendant = activeElement?.getAttribute('aria-activedescendant');\n    if (activeDescendant) return document.getElementById(activeDescendant) || activeElement;\n    return activeElement;\n}\n\n\nexport {$b72f3f7b3b5f42c6$export$76e4e37e5339496d as moveVirtualFocus, $b72f3f7b3b5f42c6$export$759df0d867455a91 as getVirtuallyFocusedElement, $b72f3f7b3b5f42c6$export$6c5dc7e81d2cc29a as dispatchVirtualBlur, $b72f3f7b3b5f42c6$export$2b35b76d2e30e129 as dispatchVirtualFocus};\n//# sourceMappingURL=virtualFocus.mjs.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $1969ac565cfec8d0$export$de79e2c695e052f3(element) {\n    element.focus({\n        preventScroll: true\n    });\n}\n\n\nexport {$1969ac565cfec8d0$export$de79e2c695e052f3 as focusWithoutScrolling};\n//# sourceMappingURL=focusWithoutScrolling.mjs.map\n","import {getOwnerWindow as $d447af545b77c9f1$export$f21a1ffae260145a} from \"./domHelpers.mjs\";\n\n/*\n * Copyright 2021 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $ae77152785188400$var$supportsCheckVisibility = typeof Element !== 'undefined' && 'checkVisibility' in Element.prototype;\nfunction $ae77152785188400$var$isStyleVisible(element) {\n    const windowObject = (0, $d447af545b77c9f1$export$f21a1ffae260145a)(element);\n    if (!(element instanceof windowObject.HTMLElement) && !(element instanceof windowObject.SVGElement)) return false;\n    let { display: display, visibility: visibility } = element.style;\n    let isVisible = display !== 'none' && visibility !== 'hidden' && visibility !== 'collapse';\n    if (isVisible) {\n        const { getComputedStyle: getComputedStyle } = (0, $d447af545b77c9f1$export$f21a1ffae260145a)(element);\n        let { display: computedDisplay, visibility: computedVisibility } = getComputedStyle(element);\n        isVisible = computedDisplay !== 'none' && computedVisibility !== 'hidden' && computedVisibility !== 'collapse';\n    }\n    return isVisible;\n}\nfunction $ae77152785188400$var$isAttributeVisible(element, childElement) {\n    return !element.hasAttribute('hidden') && // Ignore HiddenSelect when tree walking.\n    !element.hasAttribute('data-react-aria-prevent-focus') && (element.nodeName === 'DETAILS' && childElement && childElement.nodeName !== 'SUMMARY' ? element.hasAttribute('open') : true);\n}\nfunction $ae77152785188400$export$e989c0fffaa6b27a(element, childElement) {\n    if ($ae77152785188400$var$supportsCheckVisibility) return element.checkVisibility({\n        visibilityProperty: true\n    }) && !element.closest('[data-react-aria-prevent-focus]');\n    return element.nodeName !== '#comment' && $ae77152785188400$var$isStyleVisible(element) && $ae77152785188400$var$isAttributeVisible(element, childElement) && (!element.parentElement || $ae77152785188400$export$e989c0fffaa6b27a(element.parentElement, element));\n}\n\n\nexport {$ae77152785188400$export$e989c0fffaa6b27a as isElementVisible};\n//# sourceMappingURL=isElementVisible.mjs.map\n","import {getOwnerWindow as $d447af545b77c9f1$export$f21a1ffae260145a} from \"./domHelpers.mjs\";\nimport {isElementVisible as $ae77152785188400$export$e989c0fffaa6b27a} from \"./isElementVisible.mjs\";\n\n/*\n * Copyright 2025 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nconst $3b8b240c1bf84ab9$var$focusableElements = [\n    'input:not([disabled]):not([type=hidden])',\n    'select:not([disabled])',\n    'textarea:not([disabled])',\n    'button:not([disabled])',\n    'a[href]',\n    'area[href]',\n    'summary',\n    'iframe',\n    'object',\n    'embed',\n    'audio[controls]',\n    'video[controls]',\n    '[contenteditable]:not([contenteditable^=\"false\"])',\n    'permission'\n];\nconst $3b8b240c1bf84ab9$var$FOCUSABLE_ELEMENT_SELECTOR = $3b8b240c1bf84ab9$var$focusableElements.join(':not([hidden]),') + ',[tabindex]:not([disabled]):not([hidden])';\n$3b8b240c1bf84ab9$var$focusableElements.push('[tabindex]:not([tabindex=\"-1\"]):not([disabled])');\nconst $3b8b240c1bf84ab9$var$TABBABLE_ELEMENT_SELECTOR = $3b8b240c1bf84ab9$var$focusableElements.join(':not([hidden]):not([tabindex=\"-1\"]),');\nfunction $3b8b240c1bf84ab9$export$4c063cf1350e6fed(element, options) {\n    return element.matches($3b8b240c1bf84ab9$var$FOCUSABLE_ELEMENT_SELECTOR) && !$3b8b240c1bf84ab9$var$isInert(element) && (options?.skipVisibilityCheck || (0, $ae77152785188400$export$e989c0fffaa6b27a)(element));\n}\nfunction $3b8b240c1bf84ab9$export$bebd5a1431fec25d(element) {\n    return element.matches($3b8b240c1bf84ab9$var$TABBABLE_ELEMENT_SELECTOR) && (0, $ae77152785188400$export$e989c0fffaa6b27a)(element) && !$3b8b240c1bf84ab9$var$isInert(element);\n}\nfunction $3b8b240c1bf84ab9$var$isInert(element) {\n    let node = element;\n    while(node != null){\n        if (node instanceof (0, $d447af545b77c9f1$export$f21a1ffae260145a)(node).HTMLElement && node.inert) return true;\n        node = node.parentElement;\n    }\n    return false;\n}\n\n\nexport {$3b8b240c1bf84ab9$export$4c063cf1350e6fed as isFocusable, $3b8b240c1bf84ab9$export$bebd5a1431fec25d as isTabbable};\n//# sourceMappingURL=isFocusable.mjs.map\n","import {focusWithoutScrolling as $1969ac565cfec8d0$export$de79e2c695e052f3} from \"../utils/focusWithoutScrolling.mjs\";\nimport {getActiveElement as $23f2114a1b82827e$export$cd4e5573fbe2b576, getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29, nodeContains as $23f2114a1b82827e$export$4282f70798064fe0} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {getOwnerWindow as $d447af545b77c9f1$export$f21a1ffae260145a, isNode as $d447af545b77c9f1$export$8ee0fc9ee280b4ee, isShadowRoot as $d447af545b77c9f1$export$af51f0f06c0f328a} from \"../utils/domHelpers.mjs\";\nimport {isFocusable as $3b8b240c1bf84ab9$export$4c063cf1350e6fed} from \"../utils/isFocusable.mjs\";\nimport {useLayoutEffect as $c4867b2f328c2698$export$e5c5a5f917a5871c} from \"../utils/useLayoutEffect.mjs\";\nimport {useRef as $lIB5W$useRef, useCallback as $lIB5W$useCallback} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\nfunction $a92dc41f639950be$export$525bc4921d56d4a(nativeEvent) {\n    let event = nativeEvent;\n    event.nativeEvent = nativeEvent;\n    event.isDefaultPrevented = ()=>event.defaultPrevented;\n    // cancelBubble is technically deprecated in the spec, but still supported in all browsers.\n    event.isPropagationStopped = ()=>event.cancelBubble;\n    event.persist = ()=>{};\n    return event;\n}\nfunction $a92dc41f639950be$export$c2b7abe5d61ec696(event, target) {\n    Object.defineProperty(event, 'target', {\n        value: target\n    });\n    Object.defineProperty(event, 'currentTarget', {\n        value: target\n    });\n}\nfunction $a92dc41f639950be$export$715c682d09d639cc(onBlur) {\n    let stateRef = (0, $lIB5W$useRef)({\n        isFocused: false,\n        observer: null\n    });\n    // Clean up MutationObserver on unmount. See below.\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        const state = stateRef.current;\n        return ()=>{\n            if (state.observer) {\n                state.observer.disconnect();\n                state.observer = null;\n            }\n        };\n    }, []);\n    // This function is called during a React onFocus event.\n    return (0, $lIB5W$useCallback)((e)=>{\n        // React does not fire onBlur when an element is disabled. https://github.com/facebook/react/issues/9142\n        // Most browsers fire a native focusout event in this case, except for Firefox. In that case, we use a\n        // MutationObserver to watch for the disabled attribute, and dispatch these events ourselves.\n        // For browsers that do, focusout fires before the MutationObserver, so onBlur should not fire twice.\n        let eventTarget = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n        if (eventTarget instanceof HTMLButtonElement || eventTarget instanceof HTMLInputElement || eventTarget instanceof HTMLTextAreaElement || eventTarget instanceof HTMLSelectElement) {\n            stateRef.current.isFocused = true;\n            let target = eventTarget;\n            let onBlurHandler = (e)=>{\n                stateRef.current.isFocused = false;\n                if (target.disabled) {\n                    // For backward compatibility, dispatch a (fake) React synthetic event.\n                    let event = $a92dc41f639950be$export$525bc4921d56d4a(e);\n                    onBlur?.(event);\n                }\n                // We no longer need the MutationObserver once the target is blurred.\n                if (stateRef.current.observer) {\n                    stateRef.current.observer.disconnect();\n                    stateRef.current.observer = null;\n                }\n            };\n            target.addEventListener('focusout', onBlurHandler, {\n                once: true\n            });\n            stateRef.current.observer = new MutationObserver(()=>{\n                if (stateRef.current.isFocused && target.disabled) {\n                    stateRef.current.observer?.disconnect();\n                    let relatedTargetEl = target === (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)() ? null : (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)();\n                    target.dispatchEvent(new FocusEvent('blur', {\n                        relatedTarget: relatedTargetEl\n                    }));\n                    target.dispatchEvent(new FocusEvent('focusout', {\n                        bubbles: true,\n                        relatedTarget: relatedTargetEl\n                    }));\n                }\n            });\n            stateRef.current.observer.observe(target, {\n                attributes: true,\n                attributeFilter: [\n                    'disabled'\n                ]\n            });\n        }\n    }, [\n        onBlur\n    ]);\n}\nlet $a92dc41f639950be$export$fda7da73ab5d4c48 = false;\nfunction $a92dc41f639950be$export$cabe61c495ee3649(target) {\n    // The browser will focus the nearest focusable ancestor of our target.\n    while(target && !(0, $3b8b240c1bf84ab9$export$4c063cf1350e6fed)(target, {\n        skipVisibilityCheck: true\n    }))target = target.parentElement;\n    let ownerWindow = (0, $d447af545b77c9f1$export$f21a1ffae260145a)(target);\n    let activeElement = (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)(ownerWindow.document);\n    if (!activeElement || activeElement === target) return;\n    // Listen on the target's root (document or shadow root) so we catch focus events inside\n    // shadow DOM; they do not reach the main window.\n    let targetRoot = target?.getRootNode();\n    let root = targetRoot != null && (0, $d447af545b77c9f1$export$af51f0f06c0f328a)(targetRoot) ? targetRoot : (0, $d447af545b77c9f1$export$f21a1ffae260145a)(target);\n    // Focus is \"moving to target\" when it moves to the button or to a descendant of the button\n    // (e.g. SVG icon)\n    let isFocusMovingToTarget = (focusTarget)=>focusTarget === target || (0, $d447af545b77c9f1$export$8ee0fc9ee280b4ee)(focusTarget) && (0, $23f2114a1b82827e$export$4282f70798064fe0)(target, focusTarget);\n    // Blur/focusout events have their target as the element losing focus. Stop propagation when\n    // that is the previously focused element (activeElement) or a descendant (e.g. in shadow DOM).\n    let isBlurFromActiveElement = (eventTarget)=>eventTarget === activeElement || activeElement != null && (0, $d447af545b77c9f1$export$8ee0fc9ee280b4ee)(eventTarget) && (0, $23f2114a1b82827e$export$4282f70798064fe0)(activeElement, eventTarget);\n    $a92dc41f639950be$export$fda7da73ab5d4c48 = true;\n    let isRefocusing = false;\n    let onBlur = (e)=>{\n        if (isBlurFromActiveElement((0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e)) || isRefocusing) e.stopImmediatePropagation();\n    };\n    let onFocusOut = (e)=>{\n        if (isBlurFromActiveElement((0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e)) || isRefocusing) {\n            e.stopImmediatePropagation();\n            // If there was no focusable ancestor, we don't expect a focus event.\n            // Re-focus the original active element here.\n            if (!target && !isRefocusing) {\n                isRefocusing = true;\n                (0, $1969ac565cfec8d0$export$de79e2c695e052f3)(activeElement);\n                cleanup();\n            }\n        }\n    };\n    let onFocus = (e)=>{\n        if (isFocusMovingToTarget((0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e)) || isRefocusing) e.stopImmediatePropagation();\n    };\n    let onFocusIn = (e)=>{\n        if (isFocusMovingToTarget((0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e)) || isRefocusing) {\n            e.stopImmediatePropagation();\n            if (!isRefocusing) {\n                isRefocusing = true;\n                (0, $1969ac565cfec8d0$export$de79e2c695e052f3)(activeElement);\n                cleanup();\n            }\n        }\n    };\n    root.addEventListener('blur', onBlur, true);\n    root.addEventListener('focusout', onFocusOut, true);\n    root.addEventListener('focusin', onFocusIn, true);\n    root.addEventListener('focus', onFocus, true);\n    let cleanup = ()=>{\n        cancelAnimationFrame(raf);\n        root.removeEventListener('blur', onBlur, true);\n        root.removeEventListener('focusout', onFocusOut, true);\n        root.removeEventListener('focusin', onFocusIn, true);\n        root.removeEventListener('focus', onFocus, true);\n        $a92dc41f639950be$export$fda7da73ab5d4c48 = false;\n        isRefocusing = false;\n    };\n    let raf = requestAnimationFrame(cleanup);\n    return cleanup;\n}\n\n\nexport {$a92dc41f639950be$export$525bc4921d56d4a as createSyntheticEvent, $a92dc41f639950be$export$c2b7abe5d61ec696 as setEventTarget, $a92dc41f639950be$export$715c682d09d639cc as useSyntheticBlurEvent, $a92dc41f639950be$export$fda7da73ab5d4c48 as ignoreFocusEvent, $a92dc41f639950be$export$cabe61c495ee3649 as preventFocus};\n//# sourceMappingURL=utils.mjs.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $2add3ce32c6007eb$var$testUserAgent(re) {\n    if (typeof window === 'undefined' || window.navigator == null) return false;\n    let brands = window.navigator['userAgentData']?.brands;\n    return Array.isArray(brands) && brands.some((brand)=>re.test(brand.brand)) || re.test(window.navigator.userAgent);\n}\nfunction $2add3ce32c6007eb$var$testPlatform(re) {\n    return typeof window !== 'undefined' && window.navigator != null ? re.test(window.navigator['userAgentData']?.platform || window.navigator.platform) : false;\n}\nfunction $2add3ce32c6007eb$var$cached(fn) {\n    if (process.env.NODE_ENV === 'test') return fn;\n    let res = null;\n    return ()=>{\n        if (res == null) res = fn();\n        return res;\n    };\n}\nconst $2add3ce32c6007eb$export$9ac100e40613ea10 = $2add3ce32c6007eb$var$cached(function() {\n    return $2add3ce32c6007eb$var$testPlatform(/^Mac/i);\n});\nconst $2add3ce32c6007eb$export$186c6964ca17d99 = $2add3ce32c6007eb$var$cached(function() {\n    return $2add3ce32c6007eb$var$testPlatform(/^iPhone/i);\n});\nconst $2add3ce32c6007eb$export$7bef049ce92e4224 = $2add3ce32c6007eb$var$cached(function() {\n    return $2add3ce32c6007eb$var$testPlatform(/^iPad/i) || // iPadOS 13 lies and says it's a Mac, but we can distinguish by detecting touch support.\n    $2add3ce32c6007eb$export$9ac100e40613ea10() && navigator.maxTouchPoints > 1;\n});\nconst $2add3ce32c6007eb$export$fedb369cb70207f1 = $2add3ce32c6007eb$var$cached(function() {\n    return $2add3ce32c6007eb$export$186c6964ca17d99() || $2add3ce32c6007eb$export$7bef049ce92e4224();\n});\nconst $2add3ce32c6007eb$export$e1865c3bedcd822b = $2add3ce32c6007eb$var$cached(function() {\n    return $2add3ce32c6007eb$export$9ac100e40613ea10() || $2add3ce32c6007eb$export$fedb369cb70207f1();\n});\nconst $2add3ce32c6007eb$export$78551043582a6a98 = $2add3ce32c6007eb$var$cached(function() {\n    return $2add3ce32c6007eb$var$testUserAgent(/AppleWebKit/i) && ($2add3ce32c6007eb$export$fedb369cb70207f1() || !$2add3ce32c6007eb$export$6446a186d09e379e());\n});\nconst $2add3ce32c6007eb$export$95df08bae54cb4df = $2add3ce32c6007eb$var$cached(function() {\n    return $2add3ce32c6007eb$export$78551043582a6a98() && !$2add3ce32c6007eb$export$6446a186d09e379e() && !$2add3ce32c6007eb$export$b7d78993b74f766d();\n});\nconst $2add3ce32c6007eb$export$6446a186d09e379e = $2add3ce32c6007eb$var$cached(function() {\n    return $2add3ce32c6007eb$var$testUserAgent(/Chrome|CriOS|CrMo/i);\n});\nconst $2add3ce32c6007eb$export$a11b0059900ceec8 = $2add3ce32c6007eb$var$cached(function() {\n    return $2add3ce32c6007eb$var$testUserAgent(/Android/i);\n});\nconst $2add3ce32c6007eb$export$b7d78993b74f766d = $2add3ce32c6007eb$var$cached(function() {\n    return $2add3ce32c6007eb$var$testUserAgent(/(Firefox|FxiOS)/i);\n});\n\n\nexport {$2add3ce32c6007eb$export$9ac100e40613ea10 as isMac, $2add3ce32c6007eb$export$186c6964ca17d99 as isIPhone, $2add3ce32c6007eb$export$7bef049ce92e4224 as isIPad, $2add3ce32c6007eb$export$fedb369cb70207f1 as isIOS, $2add3ce32c6007eb$export$e1865c3bedcd822b as isAppleDevice, $2add3ce32c6007eb$export$78551043582a6a98 as isWebKit, $2add3ce32c6007eb$export$6446a186d09e379e as isChrome, $2add3ce32c6007eb$export$95df08bae54cb4df as isSafari, $2add3ce32c6007eb$export$b7d78993b74f766d as isFirefox, $2add3ce32c6007eb$export$a11b0059900ceec8 as isAndroid};\n//# sourceMappingURL=platform.mjs.map\n","import {isAndroid as $2add3ce32c6007eb$export$a11b0059900ceec8} from \"./platform.mjs\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $b5c62b033c25b96d$export$60278871457622de(event) {\n    // JAWS/NVDA with Firefox.\n    if (event.pointerType === '' && event.isTrusted) return true;\n    // Android TalkBack's detail value varies depending on the event listener providing the event so we have specific logic here instead\n    // If pointerType is defined, event is from a click listener. For events from mousedown listener, detail === 0 is a sufficient check\n    // to detect TalkBack virtual clicks.\n    if ((0, $2add3ce32c6007eb$export$a11b0059900ceec8)() && event.pointerType) return event.type === 'click' && event.buttons === 1;\n    return event.detail === 0 && !event.pointerType;\n}\nfunction $b5c62b033c25b96d$export$29bf1b5f2c56cf63(event) {\n    // If the pointer size is zero, then we assume it's from a screen reader.\n    // Android TalkBack double tap will sometimes return a event with width and height of 1\n    // and pointerType === 'mouse' so we need to check for a specific combination of event attributes.\n    // Cannot use \"event.pressure === 0\" as the sole check due to Safari pointer events always returning pressure === 0\n    // instead of .5, see https://bugs.webkit.org/show_bug.cgi?id=206216. event.pointerType === 'mouse' is to distingush\n    // Talkback double tap from Windows Firefox touch screen press\n    return !(0, $2add3ce32c6007eb$export$a11b0059900ceec8)() && event.width === 0 && event.height === 0 || (0, $2add3ce32c6007eb$export$a11b0059900ceec8)() && event.width === 1 && event.height === 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === 'mouse';\n}\n\n\nexport {$b5c62b033c25b96d$export$60278871457622de as isVirtualClick, $b5c62b033c25b96d$export$29bf1b5f2c56cf63 as isVirtualPointerEvent};\n//# sourceMappingURL=isVirtualEvent.mjs.map\n","import {focusWithoutScrolling as $1969ac565cfec8d0$export$de79e2c695e052f3} from \"./focusWithoutScrolling.mjs\";\nimport {isIPad as $2add3ce32c6007eb$export$7bef049ce92e4224, isMac as $2add3ce32c6007eb$export$9ac100e40613ea10, isWebKit as $2add3ce32c6007eb$export$78551043582a6a98} from \"./platform.mjs\";\nimport $epzQQ$react, {createContext as $epzQQ$createContext, useMemo as $epzQQ$useMemo, useContext as $epzQQ$useContext} from \"react\";\n\n/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $caaf0dd3060ed57c$var$RouterContext = /*#__PURE__*/ (0, $epzQQ$createContext)({\n    isNative: true,\n    open: $caaf0dd3060ed57c$var$openSyntheticLink,\n    useHref: (href)=>href\n});\nfunction $caaf0dd3060ed57c$export$323e4fc2fa4753fb(props) {\n    let { children: children, navigate: navigate, useHref: useHref } = props;\n    let ctx = (0, $epzQQ$useMemo)(()=>({\n            isNative: false,\n            open: (target, modifiers, href, routerOptions)=>{\n                $caaf0dd3060ed57c$var$getSyntheticLink(target, (link)=>{\n                    if ($caaf0dd3060ed57c$export$efa8c9099e530235(link, modifiers)) navigate(href, routerOptions);\n                    else $caaf0dd3060ed57c$export$95185d699e05d4d7(link, modifiers);\n                });\n            },\n            useHref: useHref || ((href)=>href)\n        }), [\n        navigate,\n        useHref\n    ]);\n    return /*#__PURE__*/ (0, $epzQQ$react).createElement($caaf0dd3060ed57c$var$RouterContext.Provider, {\n        value: ctx\n    }, children);\n}\nfunction $caaf0dd3060ed57c$export$9a302a45f65d0572() {\n    return (0, $epzQQ$useContext)($caaf0dd3060ed57c$var$RouterContext);\n}\nfunction $caaf0dd3060ed57c$export$efa8c9099e530235(link, modifiers) {\n    // Use getAttribute here instead of link.target. Firefox will default link.target to \"_parent\" when inside an iframe.\n    let target = link.getAttribute('target');\n    return (!target || target === '_self') && link.origin === location.origin && !link.hasAttribute('download') && !modifiers.metaKey && // open in new tab (mac)\n    !modifiers.ctrlKey && // open in new tab (windows)\n    !modifiers.altKey && // download\n    !modifiers.shiftKey;\n}\nfunction $caaf0dd3060ed57c$export$95185d699e05d4d7(target, modifiers, setOpening = true) {\n    let { metaKey: metaKey, ctrlKey: ctrlKey, altKey: altKey, shiftKey: shiftKey } = modifiers;\n    // WebKit does not support firing click events with modifier keys, but does support keyboard events.\n    // https://github.com/WebKit/WebKit/blob/c03d0ac6e6db178f90923a0a63080b5ca210d25f/Source/WebCore/html/HTMLAnchorElement.cpp#L184\n    let event = (0, $2add3ce32c6007eb$export$78551043582a6a98)() && (0, $2add3ce32c6007eb$export$9ac100e40613ea10)() && !(0, $2add3ce32c6007eb$export$7bef049ce92e4224)() && process.env.NODE_ENV !== 'test' ? new KeyboardEvent('keydown', {\n        keyIdentifier: 'Enter',\n        metaKey: metaKey,\n        ctrlKey: ctrlKey,\n        altKey: altKey,\n        shiftKey: shiftKey\n    }) : new MouseEvent('click', {\n        metaKey: metaKey,\n        ctrlKey: ctrlKey,\n        altKey: altKey,\n        shiftKey: shiftKey,\n        detail: 1,\n        bubbles: true,\n        cancelable: true\n    });\n    $caaf0dd3060ed57c$export$95185d699e05d4d7.isOpening = setOpening;\n    (0, $1969ac565cfec8d0$export$de79e2c695e052f3)(target);\n    target.dispatchEvent(event);\n    $caaf0dd3060ed57c$export$95185d699e05d4d7.isOpening = false;\n}\n// https://github.com/parcel-bundler/parcel/issues/8724\n$caaf0dd3060ed57c$export$95185d699e05d4d7.isOpening = false;\nfunction $caaf0dd3060ed57c$var$getSyntheticLink(target, open) {\n    if (target instanceof HTMLAnchorElement) open(target);\n    else if (target.hasAttribute('data-href')) {\n        let link = document.createElement('a');\n        link.href = target.getAttribute('data-href');\n        if (target.hasAttribute('data-target')) link.target = target.getAttribute('data-target');\n        if (target.hasAttribute('data-rel')) link.rel = target.getAttribute('data-rel');\n        if (target.hasAttribute('data-download')) link.download = target.getAttribute('data-download');\n        if (target.hasAttribute('data-ping')) link.ping = target.getAttribute('data-ping');\n        if (target.hasAttribute('data-referrer-policy')) link.referrerPolicy = target.getAttribute('data-referrer-policy');\n        target.appendChild(link);\n        open(link);\n        target.removeChild(link);\n    }\n}\nfunction $caaf0dd3060ed57c$var$openSyntheticLink(target, modifiers) {\n    $caaf0dd3060ed57c$var$getSyntheticLink(target, (link)=>$caaf0dd3060ed57c$export$95185d699e05d4d7(link, modifiers));\n}\nfunction $caaf0dd3060ed57c$export$bdc77b0c0a3a85d6(props) {\n    let router = $caaf0dd3060ed57c$export$9a302a45f65d0572();\n    // oxlint-disable-next-line react/react-compiler\n    const href = router.useHref(props.href ?? '');\n    return {\n        'data-href': props.href ? href : undefined,\n        'data-target': props.target,\n        'data-rel': props.rel,\n        'data-download': props.download,\n        'data-ping': props.ping,\n        'data-referrer-policy': props.referrerPolicy\n    };\n}\nfunction $caaf0dd3060ed57c$export$51437d503373d223(props) {\n    return {\n        'data-href': props.href,\n        'data-target': props.target,\n        'data-rel': props.rel,\n        'data-download': props.download,\n        'data-ping': props.ping,\n        'data-referrer-policy': props.referrerPolicy\n    };\n}\nfunction $caaf0dd3060ed57c$export$7e924b3091a3bd18(props) {\n    let router = $caaf0dd3060ed57c$export$9a302a45f65d0572();\n    // oxlint-disable-next-line react/react-compiler\n    const href = router.useHref(props?.href ?? '');\n    let linkProps = {};\n    if (props) {\n        for (let key of [\n            'href',\n            'target',\n            'rel',\n            'download',\n            'ping',\n            'referrerPolicy'\n        ])if (key in props && props[key] !== undefined) linkProps[key] = key === 'href' ? href : props[key];\n    }\n    return linkProps;\n}\nfunction $caaf0dd3060ed57c$export$13aea1a3cb5e3f1f(e, router, href, routerOptions) {\n    // If a custom router is provided, prevent default and forward if this link should client navigate.\n    if (!router.isNative && e.currentTarget instanceof HTMLAnchorElement && e.currentTarget.href && // If props are applied to a router Link component, it may have already prevented default.\n    !e.isDefaultPrevented() && $caaf0dd3060ed57c$export$efa8c9099e530235(e.currentTarget, e) && href) {\n        e.preventDefault();\n        router.open(e.currentTarget, e, href, routerOptions);\n    }\n}\n\n\nexport {$caaf0dd3060ed57c$export$323e4fc2fa4753fb as RouterProvider, $caaf0dd3060ed57c$export$efa8c9099e530235 as shouldClientNavigate, $caaf0dd3060ed57c$export$95185d699e05d4d7 as openLink, $caaf0dd3060ed57c$export$9a302a45f65d0572 as useRouter, $caaf0dd3060ed57c$export$bdc77b0c0a3a85d6 as useSyntheticLinkProps, $caaf0dd3060ed57c$export$51437d503373d223 as getSyntheticLinkProps, $caaf0dd3060ed57c$export$7e924b3091a3bd18 as useLinkProps, $caaf0dd3060ed57c$export$13aea1a3cb5e3f1f as handleLinkClick};\n//# sourceMappingURL=openLink.mjs.map\n","import {getActiveElement as $23f2114a1b82827e$export$cd4e5573fbe2b576, getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {getOwnerDocument as $d447af545b77c9f1$export$b204af158042fbac, getOwnerWindow as $d447af545b77c9f1$export$f21a1ffae260145a} from \"../utils/domHelpers.mjs\";\nimport {ignoreFocusEvent as $a92dc41f639950be$export$fda7da73ab5d4c48} from \"./utils.mjs\";\nimport {isMac as $2add3ce32c6007eb$export$9ac100e40613ea10} from \"../utils/platform.mjs\";\nimport {isVirtualClick as $b5c62b033c25b96d$export$60278871457622de} from \"../utils/isVirtualEvent.mjs\";\nimport {openLink as $caaf0dd3060ed57c$export$95185d699e05d4d7} from \"../utils/openLink.mjs\";\nimport {useIsSSR as $c7eafbbe1ea5834e$export$535bd6ca7f90a273} from \"../ssr/SSRProvider.mjs\";\nimport {useState as $7U4qw$useState, useEffect as $7U4qw$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\n\n\n\n\n\n\nlet $8f5a2122b0992be3$var$currentModality = null;\nlet $8f5a2122b0992be3$var$currentPointerType = 'keyboard';\nconst $8f5a2122b0992be3$export$901e90a13c50a14e = new Set();\nlet $8f5a2122b0992be3$export$d90243b58daecda7 = new Map(); // We use a map here to support setting event listeners across multiple document objects.\nlet $8f5a2122b0992be3$var$hasEventBeforeFocus = false;\nlet $8f5a2122b0992be3$var$hasBlurredWindowRecently = false;\n// Only Tab or Esc keys will make focus visible on text input elements\nconst $8f5a2122b0992be3$var$FOCUS_VISIBLE_INPUT_KEYS = {\n    Tab: true,\n    Escape: true\n};\nfunction $8f5a2122b0992be3$var$triggerChangeHandlers(modality, e) {\n    for (let handler of $8f5a2122b0992be3$export$901e90a13c50a14e)handler(modality, e);\n}\n/**\n * Helper function to determine if a KeyboardEvent is unmodified and could make keyboard focus\n * styles visible.\n */ function $8f5a2122b0992be3$var$isValidKey(e) {\n    // Control and Shift keys trigger when navigating back to the tab with keyboard.\n    return !(e.metaKey || !(0, $2add3ce32c6007eb$export$9ac100e40613ea10)() && e.altKey || e.ctrlKey || e.key === 'Control' || e.key === 'Shift' || e.key === 'Meta');\n}\nfunction $8f5a2122b0992be3$var$handleKeyboardEvent(e) {\n    $8f5a2122b0992be3$var$hasEventBeforeFocus = true;\n    if (!(0, $caaf0dd3060ed57c$export$95185d699e05d4d7).isOpening && $8f5a2122b0992be3$var$isValidKey(e)) {\n        $8f5a2122b0992be3$var$currentModality = 'keyboard';\n        $8f5a2122b0992be3$var$currentPointerType = 'keyboard';\n        $8f5a2122b0992be3$var$triggerChangeHandlers('keyboard', e);\n    }\n}\nfunction $8f5a2122b0992be3$var$handlePointerEvent(e) {\n    $8f5a2122b0992be3$var$currentModality = 'pointer';\n    $8f5a2122b0992be3$var$currentPointerType = 'pointerType' in e ? e.pointerType : 'mouse';\n    if (e.type === 'mousedown' || e.type === 'pointerdown') {\n        $8f5a2122b0992be3$var$hasEventBeforeFocus = true;\n        $8f5a2122b0992be3$var$triggerChangeHandlers('pointer', e);\n    }\n}\nfunction $8f5a2122b0992be3$var$handleClickEvent(e) {\n    if (!(0, $caaf0dd3060ed57c$export$95185d699e05d4d7).isOpening && (0, $b5c62b033c25b96d$export$60278871457622de)(e)) {\n        $8f5a2122b0992be3$var$hasEventBeforeFocus = true;\n        $8f5a2122b0992be3$var$currentModality = 'virtual';\n        $8f5a2122b0992be3$var$currentPointerType = 'virtual';\n    }\n}\nfunction $8f5a2122b0992be3$var$handleFocusEvent(e) {\n    if (0, $a92dc41f639950be$export$fda7da73ab5d4c48) return;\n    let target = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n    let ownerWindow = (0, $d447af545b77c9f1$export$f21a1ffae260145a)(target);\n    let ownerDocument = (0, $d447af545b77c9f1$export$b204af158042fbac)(target);\n    // When the window regains focus, the browser restores focus to the element that was focused\n    // before, firing a focus event the user did not initiate. handleWindowBlur sets\n    // hasBlurredWindowRecently so restored focus doesn't switch to virtual modality below, but\n    // Safari fires the window/element focus pair twice when returning to a tab or app and the first\n    // element focus event clears the flag, so re-arm it whenever the window itself is focused.\n    // Like handleWindowBlur, this intentionally doesn't check isTrusted.\n    if (target === ownerWindow) {\n        $8f5a2122b0992be3$var$hasBlurredWindowRecently = true;\n        return;\n    }\n    // Firefox fires two extra focus events when the user first clicks into an iframe:\n    // first on the window, then on the document. We ignore these events so they don't\n    // cause keyboard focus rings to appear.\n    if (target === ownerDocument || !e.isTrusted) return;\n    // If a focus event occurs without a preceding keyboard or pointer event, switch to virtual modality.\n    // This occurs, for example, when navigating a form with the next/previous buttons on iOS.\n    if (!$8f5a2122b0992be3$var$hasEventBeforeFocus && !$8f5a2122b0992be3$var$hasBlurredWindowRecently) {\n        $8f5a2122b0992be3$var$currentModality = 'virtual';\n        $8f5a2122b0992be3$var$currentPointerType = 'virtual';\n        $8f5a2122b0992be3$var$triggerChangeHandlers('virtual', e);\n    }\n    $8f5a2122b0992be3$var$hasEventBeforeFocus = false;\n    $8f5a2122b0992be3$var$hasBlurredWindowRecently = false;\n}\nfunction $8f5a2122b0992be3$var$handleWindowBlur() {\n    if (0, $a92dc41f639950be$export$fda7da73ab5d4c48) return;\n    // When the window is blurred, reset state. This is necessary when tabbing out of the window,\n    // for example, since a subsequent focus event won't be fired.\n    $8f5a2122b0992be3$var$hasEventBeforeFocus = false;\n    $8f5a2122b0992be3$var$hasBlurredWindowRecently = true;\n}\nfunction $8f5a2122b0992be3$var$handleInvalidEvent(e) {\n    let startingActiveElement = (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)((0, $d447af545b77c9f1$export$b204af158042fbac)((0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e)));\n    queueMicrotask(()=>{\n        // If focus was moved to a different element after the form became invalid,\n        // then it was likely a forms library that moved focus to the first invalid field.\n        // In this case, we want to set the modality to keyboard.\n        if ((0, $23f2114a1b82827e$export$cd4e5573fbe2b576)((0, $d447af545b77c9f1$export$b204af158042fbac)((0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) !== startingActiveElement) $8f5a2122b0992be3$export$8397ddfc504fdb9a('keyboard');\n    });\n}\n/**\n * Setup global event listeners to control when keyboard focus style should be visible.\n */ function $8f5a2122b0992be3$var$setupGlobalFocusEvents(element) {\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof window === 'undefined' || typeof document === 'undefined') return;\n    const windowObject = (0, $d447af545b77c9f1$export$f21a1ffae260145a)(element);\n    const documentObject = (0, $d447af545b77c9f1$export$b204af158042fbac)(element);\n    if ($8f5a2122b0992be3$export$d90243b58daecda7.get(windowObject)) return;\n    // Programmatic focus() calls shouldn't affect the current input modality.\n    // However, we need to detect other cases when a focus event occurs without\n    // a preceding user event (e.g. screen reader focus). Overriding the focus\n    // method on HTMLElement.prototype is a bit hacky, but works.\n    // defineProperty (not assignment) so this works even if `focus` is currently\n    // a getter-only accessor — e.g. when @testing-library/user-event's setup()\n    // has instrumented it. Plain assignment throws in that case.\n    let focus = windowObject.HTMLElement.prototype.focus;\n    Reflect.defineProperty(windowObject.HTMLElement.prototype, 'focus', {\n        configurable: true,\n        writable: true,\n        value: function() {\n            $8f5a2122b0992be3$var$hasEventBeforeFocus = true;\n            focus.apply(this, arguments);\n        }\n    });\n    documentObject.addEventListener('keydown', $8f5a2122b0992be3$var$handleKeyboardEvent, true);\n    documentObject.addEventListener('keyup', $8f5a2122b0992be3$var$handleKeyboardEvent, true);\n    documentObject.addEventListener('click', $8f5a2122b0992be3$var$handleClickEvent, true);\n    documentObject.addEventListener('invalid', $8f5a2122b0992be3$var$handleInvalidEvent, true);\n    // Register focus events on the window so they are sure to happen\n    // before React's event listeners (registered on the document).\n    windowObject.addEventListener('focus', $8f5a2122b0992be3$var$handleFocusEvent, true);\n    windowObject.addEventListener('blur', $8f5a2122b0992be3$var$handleWindowBlur, false);\n    if (typeof PointerEvent !== 'undefined') {\n        documentObject.addEventListener('pointerdown', $8f5a2122b0992be3$var$handlePointerEvent, true);\n        documentObject.addEventListener('pointermove', $8f5a2122b0992be3$var$handlePointerEvent, true);\n        documentObject.addEventListener('pointerup', $8f5a2122b0992be3$var$handlePointerEvent, true);\n    } else if (process.env.NODE_ENV === 'test') {\n        documentObject.addEventListener('mousedown', $8f5a2122b0992be3$var$handlePointerEvent, true);\n        documentObject.addEventListener('mousemove', $8f5a2122b0992be3$var$handlePointerEvent, true);\n        documentObject.addEventListener('mouseup', $8f5a2122b0992be3$var$handlePointerEvent, true);\n    }\n    // Add unmount handler\n    windowObject.addEventListener('beforeunload', ()=>{\n        $8f5a2122b0992be3$var$tearDownWindowFocusTracking(element);\n    }, {\n        once: true\n    });\n    $8f5a2122b0992be3$export$d90243b58daecda7.set(windowObject, {\n        focus: focus\n    });\n}\nconst $8f5a2122b0992be3$var$tearDownWindowFocusTracking = (element, loadListener)=>{\n    const windowObject = (0, $d447af545b77c9f1$export$f21a1ffae260145a)(element);\n    const documentObject = (0, $d447af545b77c9f1$export$b204af158042fbac)(element);\n    if (loadListener) documentObject.removeEventListener('DOMContentLoaded', loadListener);\n    if (!$8f5a2122b0992be3$export$d90243b58daecda7.has(windowObject)) return;\n    Reflect.defineProperty(windowObject.HTMLElement.prototype, 'focus', {\n        configurable: true,\n        writable: true,\n        value: $8f5a2122b0992be3$export$d90243b58daecda7.get(windowObject).focus\n    });\n    documentObject.removeEventListener('keydown', $8f5a2122b0992be3$var$handleKeyboardEvent, true);\n    documentObject.removeEventListener('keyup', $8f5a2122b0992be3$var$handleKeyboardEvent, true);\n    documentObject.removeEventListener('click', $8f5a2122b0992be3$var$handleClickEvent, true);\n    documentObject.removeEventListener('invalid', $8f5a2122b0992be3$var$handleInvalidEvent, true);\n    windowObject.removeEventListener('focus', $8f5a2122b0992be3$var$handleFocusEvent, true);\n    windowObject.removeEventListener('blur', $8f5a2122b0992be3$var$handleWindowBlur, false);\n    if (typeof PointerEvent !== 'undefined') {\n        documentObject.removeEventListener('pointerdown', $8f5a2122b0992be3$var$handlePointerEvent, true);\n        documentObject.removeEventListener('pointermove', $8f5a2122b0992be3$var$handlePointerEvent, true);\n        documentObject.removeEventListener('pointerup', $8f5a2122b0992be3$var$handlePointerEvent, true);\n    } else if (process.env.NODE_ENV === 'test') {\n        documentObject.removeEventListener('mousedown', $8f5a2122b0992be3$var$handlePointerEvent, true);\n        documentObject.removeEventListener('mousemove', $8f5a2122b0992be3$var$handlePointerEvent, true);\n        documentObject.removeEventListener('mouseup', $8f5a2122b0992be3$var$handlePointerEvent, true);\n    }\n    $8f5a2122b0992be3$export$d90243b58daecda7.delete(windowObject);\n};\nfunction $8f5a2122b0992be3$export$2f1888112f558a7d(element) {\n    const documentObject = (0, $d447af545b77c9f1$export$b204af158042fbac)(element);\n    let loadListener;\n    if (documentObject.readyState !== 'loading') $8f5a2122b0992be3$var$setupGlobalFocusEvents(element);\n    else {\n        loadListener = ()=>{\n            $8f5a2122b0992be3$var$setupGlobalFocusEvents(element);\n        };\n        documentObject.addEventListener('DOMContentLoaded', loadListener);\n    }\n    return ()=>$8f5a2122b0992be3$var$tearDownWindowFocusTracking(element, loadListener);\n}\n// Server-side rendering does not have the document object defined\n// eslint-disable-next-line no-restricted-globals\nif (typeof document !== 'undefined') $8f5a2122b0992be3$export$2f1888112f558a7d();\nfunction $8f5a2122b0992be3$export$b9b3dfddab17db27() {\n    return $8f5a2122b0992be3$var$currentModality !== 'pointer';\n}\nfunction $8f5a2122b0992be3$export$630ff653c5ada6a9() {\n    return $8f5a2122b0992be3$var$currentModality;\n}\nfunction $8f5a2122b0992be3$export$8397ddfc504fdb9a(modality) {\n    $8f5a2122b0992be3$var$currentModality = modality;\n    $8f5a2122b0992be3$var$currentPointerType = modality === 'pointer' ? 'mouse' : modality;\n    $8f5a2122b0992be3$var$triggerChangeHandlers(modality, null);\n}\nfunction $8f5a2122b0992be3$export$887a228355cf7d95() {\n    return $8f5a2122b0992be3$var$currentPointerType;\n}\nfunction $8f5a2122b0992be3$export$98e20ec92f614cfe() {\n    $8f5a2122b0992be3$var$setupGlobalFocusEvents();\n    let [modality, setModality] = (0, $7U4qw$useState)($8f5a2122b0992be3$var$currentModality);\n    (0, $7U4qw$useEffect)(()=>{\n        let handler = ()=>{\n            setModality($8f5a2122b0992be3$var$currentModality);\n        };\n        $8f5a2122b0992be3$export$901e90a13c50a14e.add(handler);\n        return ()=>{\n            $8f5a2122b0992be3$export$901e90a13c50a14e.delete(handler);\n        };\n    }, []);\n    return (0, $c7eafbbe1ea5834e$export$535bd6ca7f90a273)() ? null : modality;\n}\nconst $8f5a2122b0992be3$var$nonTextInputTypes = new Set([\n    'checkbox',\n    'radio',\n    'range',\n    'color',\n    'file',\n    'image',\n    'button',\n    'submit',\n    'reset'\n]);\n/**\n * If this is attached to text input component, return if the event is a focus event (Tab/Escape\n * keys pressed) so that focus visible style can be properly set.\n */ function $8f5a2122b0992be3$var$isKeyboardFocusEvent(isTextInput, modality, e) {\n    let eventTarget = e ? (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e) : undefined;\n    let ownerDocument = (0, $d447af545b77c9f1$export$b204af158042fbac)(eventTarget);\n    let ownerWindow = (0, $d447af545b77c9f1$export$f21a1ffae260145a)(eventTarget);\n    const IHTMLInputElement = typeof ownerWindow !== 'undefined' ? ownerWindow.HTMLInputElement : HTMLInputElement;\n    const IHTMLTextAreaElement = typeof ownerWindow !== 'undefined' ? ownerWindow.HTMLTextAreaElement : HTMLTextAreaElement;\n    const IHTMLElement = typeof ownerWindow !== 'undefined' ? ownerWindow.HTMLElement : HTMLElement;\n    const IKeyboardEvent = typeof ownerWindow !== 'undefined' ? ownerWindow.KeyboardEvent : KeyboardEvent;\n    // For keyboard events that occur on a non-input element that will move focus into input element (aka ArrowLeft going from Datepicker button to the main input group)\n    // we need to rely on the user passing isTextInput into here. This way we can skip toggling focus visiblity for said input element\n    let activeElement = (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)(ownerDocument);\n    isTextInput = isTextInput || activeElement instanceof IHTMLInputElement && !$8f5a2122b0992be3$var$nonTextInputTypes.has(activeElement.type) || activeElement instanceof IHTMLTextAreaElement || activeElement instanceof IHTMLElement && activeElement.isContentEditable;\n    return !(isTextInput && modality === 'keyboard' && e instanceof IKeyboardEvent && !$8f5a2122b0992be3$var$FOCUS_VISIBLE_INPUT_KEYS[e.key]);\n}\nfunction $8f5a2122b0992be3$export$ffd9e5021c1fb2d6(props = {}) {\n    let { isTextInput: isTextInput, autoFocus: autoFocus } = props;\n    let [isFocusVisibleState, setFocusVisible] = (0, $7U4qw$useState)(autoFocus || $8f5a2122b0992be3$export$b9b3dfddab17db27());\n    $8f5a2122b0992be3$export$ec71b4b83ac08ec3((isFocusVisible)=>{\n        setFocusVisible(isFocusVisible);\n    }, [\n        isTextInput\n    ], {\n        isTextInput: isTextInput\n    });\n    return {\n        isFocusVisible: isFocusVisibleState\n    };\n}\nfunction $8f5a2122b0992be3$export$ec71b4b83ac08ec3(fn, deps, opts) {\n    $8f5a2122b0992be3$var$setupGlobalFocusEvents();\n    (0, $7U4qw$useEffect)(()=>{\n        if (opts?.enabled === false) return;\n        let handler = (modality, e)=>{\n            // We want to early return for any keyboard events that occur inside text inputs EXCEPT for Tab and Escape\n            if (!$8f5a2122b0992be3$var$isKeyboardFocusEvent(!!opts?.isTextInput, modality, e)) return;\n            fn($8f5a2122b0992be3$export$b9b3dfddab17db27());\n        };\n        $8f5a2122b0992be3$export$901e90a13c50a14e.add(handler);\n        return ()=>{\n            $8f5a2122b0992be3$export$901e90a13c50a14e.delete(handler);\n        };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, deps);\n}\n\n\nexport {$8f5a2122b0992be3$export$901e90a13c50a14e as changeHandlers, $8f5a2122b0992be3$export$d90243b58daecda7 as hasSetupGlobalListeners, $8f5a2122b0992be3$export$8397ddfc504fdb9a as setInteractionModality, $8f5a2122b0992be3$export$2f1888112f558a7d as addWindowFocusTracking, $8f5a2122b0992be3$export$b9b3dfddab17db27 as isFocusVisible, $8f5a2122b0992be3$export$630ff653c5ada6a9 as getInteractionModality, $8f5a2122b0992be3$export$887a228355cf7d95 as getPointerType, $8f5a2122b0992be3$export$98e20ec92f614cfe as useInteractionModality, $8f5a2122b0992be3$export$ffd9e5021c1fb2d6 as useFocusVisible, $8f5a2122b0992be3$export$ec71b4b83ac08ec3 as useFocusVisibleListener};\n//# sourceMappingURL=useFocusVisible.mjs.map\n","var $9dd2209c22b301e2$exports = {};\n$9dd2209c22b301e2$exports = {\n    \"collectionLabel\": `Suggestions`\n};\n\n\nexport {$9dd2209c22b301e2$exports as default};\n//# sourceMappingURL=en-US.mjs.map\n","import $3gLSz$intlautocompletearAEmjs from \"../intl/autocomplete/ar-AE.mjs\";\nimport $3gLSz$intlautocompletebgBGmjs from \"../intl/autocomplete/bg-BG.mjs\";\nimport $3gLSz$intlautocompletecsCZmjs from \"../intl/autocomplete/cs-CZ.mjs\";\nimport $3gLSz$intlautocompletedaDKmjs from \"../intl/autocomplete/da-DK.mjs\";\nimport $3gLSz$intlautocompletedeDEmjs from \"../intl/autocomplete/de-DE.mjs\";\nimport $3gLSz$intlautocompleteelGRmjs from \"../intl/autocomplete/el-GR.mjs\";\nimport $3gLSz$intlautocompleteenUSmjs from \"../intl/autocomplete/en-US.mjs\";\nimport $3gLSz$intlautocompleteesESmjs from \"../intl/autocomplete/es-ES.mjs\";\nimport $3gLSz$intlautocompleteetEEmjs from \"../intl/autocomplete/et-EE.mjs\";\nimport $3gLSz$intlautocompletefiFImjs from \"../intl/autocomplete/fi-FI.mjs\";\nimport $3gLSz$intlautocompletefrFRmjs from \"../intl/autocomplete/fr-FR.mjs\";\nimport $3gLSz$intlautocompleteheILmjs from \"../intl/autocomplete/he-IL.mjs\";\nimport $3gLSz$intlautocompletehrHRmjs from \"../intl/autocomplete/hr-HR.mjs\";\nimport $3gLSz$intlautocompletehuHUmjs from \"../intl/autocomplete/hu-HU.mjs\";\nimport $3gLSz$intlautocompleteitITmjs from \"../intl/autocomplete/it-IT.mjs\";\nimport $3gLSz$intlautocompletejaJPmjs from \"../intl/autocomplete/ja-JP.mjs\";\nimport $3gLSz$intlautocompletekoKRmjs from \"../intl/autocomplete/ko-KR.mjs\";\nimport $3gLSz$intlautocompleteltLTmjs from \"../intl/autocomplete/lt-LT.mjs\";\nimport $3gLSz$intlautocompletelvLVmjs from \"../intl/autocomplete/lv-LV.mjs\";\nimport $3gLSz$intlautocompletenbNOmjs from \"../intl/autocomplete/nb-NO.mjs\";\nimport $3gLSz$intlautocompletenlNLmjs from \"../intl/autocomplete/nl-NL.mjs\";\nimport $3gLSz$intlautocompleteplPLmjs from \"../intl/autocomplete/pl-PL.mjs\";\nimport $3gLSz$intlautocompleteptBRmjs from \"../intl/autocomplete/pt-BR.mjs\";\nimport $3gLSz$intlautocompleteptPTmjs from \"../intl/autocomplete/pt-PT.mjs\";\nimport $3gLSz$intlautocompleteroROmjs from \"../intl/autocomplete/ro-RO.mjs\";\nimport $3gLSz$intlautocompleteruRUmjs from \"../intl/autocomplete/ru-RU.mjs\";\nimport $3gLSz$intlautocompleteskSKmjs from \"../intl/autocomplete/sk-SK.mjs\";\nimport $3gLSz$intlautocompleteslSImjs from \"../intl/autocomplete/sl-SI.mjs\";\nimport $3gLSz$intlautocompletesrSPmjs from \"../intl/autocomplete/sr-SP.mjs\";\nimport $3gLSz$intlautocompletesvSEmjs from \"../intl/autocomplete/sv-SE.mjs\";\nimport $3gLSz$intlautocompletetrTRmjs from \"../intl/autocomplete/tr-TR.mjs\";\nimport $3gLSz$intlautocompleteukUAmjs from \"../intl/autocomplete/uk-UA.mjs\";\nimport $3gLSz$intlautocompletezhCNmjs from \"../intl/autocomplete/zh-CN.mjs\";\nimport $3gLSz$intlautocompletezhTWmjs from \"../intl/autocomplete/zh-TW.mjs\";\n\nvar $f4ee495ec2e82b79$exports = {};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$f4ee495ec2e82b79$exports = {\n    \"ar-AE\": $3gLSz$intlautocompletearAEmjs,\n    \"bg-BG\": $3gLSz$intlautocompletebgBGmjs,\n    \"cs-CZ\": $3gLSz$intlautocompletecsCZmjs,\n    \"da-DK\": $3gLSz$intlautocompletedaDKmjs,\n    \"de-DE\": $3gLSz$intlautocompletedeDEmjs,\n    \"el-GR\": $3gLSz$intlautocompleteelGRmjs,\n    \"en-US\": $3gLSz$intlautocompleteenUSmjs,\n    \"es-ES\": $3gLSz$intlautocompleteesESmjs,\n    \"et-EE\": $3gLSz$intlautocompleteetEEmjs,\n    \"fi-FI\": $3gLSz$intlautocompletefiFImjs,\n    \"fr-FR\": $3gLSz$intlautocompletefrFRmjs,\n    \"he-IL\": $3gLSz$intlautocompleteheILmjs,\n    \"hr-HR\": $3gLSz$intlautocompletehrHRmjs,\n    \"hu-HU\": $3gLSz$intlautocompletehuHUmjs,\n    \"it-IT\": $3gLSz$intlautocompleteitITmjs,\n    \"ja-JP\": $3gLSz$intlautocompletejaJPmjs,\n    \"ko-KR\": $3gLSz$intlautocompletekoKRmjs,\n    \"lt-LT\": $3gLSz$intlautocompleteltLTmjs,\n    \"lv-LV\": $3gLSz$intlautocompletelvLVmjs,\n    \"nb-NO\": $3gLSz$intlautocompletenbNOmjs,\n    \"nl-NL\": $3gLSz$intlautocompletenlNLmjs,\n    \"pl-PL\": $3gLSz$intlautocompleteplPLmjs,\n    \"pt-BR\": $3gLSz$intlautocompleteptBRmjs,\n    \"pt-PT\": $3gLSz$intlautocompleteptPTmjs,\n    \"ro-RO\": $3gLSz$intlautocompleteroROmjs,\n    \"ru-RU\": $3gLSz$intlautocompleteruRUmjs,\n    \"sk-SK\": $3gLSz$intlautocompleteskSKmjs,\n    \"sl-SI\": $3gLSz$intlautocompleteslSImjs,\n    \"sr-SP\": $3gLSz$intlautocompletesrSPmjs,\n    \"sv-SE\": $3gLSz$intlautocompletesvSEmjs,\n    \"tr-TR\": $3gLSz$intlautocompletetrTRmjs,\n    \"uk-UA\": $3gLSz$intlautocompleteukUAmjs,\n    \"zh-CN\": $3gLSz$intlautocompletezhCNmjs,\n    \"zh-TW\": $3gLSz$intlautocompletezhTWmjs\n};\n\n\nexport {$f4ee495ec2e82b79$exports as default};\n//# sourceMappingURL=intlStrings.mjs.map\n","import {getOwnerDocument as $d447af545b77c9f1$export$b204af158042fbac, getOwnerWindow as $d447af545b77c9f1$export$f21a1ffae260145a} from \"./domHelpers.mjs\";\n\n/*\n * Copyright 2026 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $7096878c21af5e66$export$a929f3f93e2cc67e(key, doc) {\n    let ownerWindow = (0, $d447af545b77c9f1$export$f21a1ffae260145a)(doc);\n    let ownerDocument = (0, $d447af545b77c9f1$export$b204af158042fbac)(doc);\n    if (ownerDocument == null || ownerWindow == null) return;\n    let content = undefined;\n    let selector = `meta[name=\"${CSS.escape(key)}\"], meta[property=\"${CSS.escape(key)}\"]`;\n    let meta = ownerDocument.querySelector(selector);\n    if (meta && meta instanceof ownerWindow.HTMLMetaElement) {\n        if (key === 'csp-nonce' && meta.nonce) content ??= meta.nonce || undefined;\n        if (meta.content) content ??= meta.content || undefined;\n    }\n    if (key === 'csp-nonce') content ??= ownerWindow.__webpack_nonce__ || globalThis.__webpack_nonce__ || undefined;\n    return content;\n}\n\n\nexport {$7096878c21af5e66$export$a929f3f93e2cc67e as getMetaValue};\n//# sourceMappingURL=getMetaValue.mjs.map\n","import {addEvent as $d447af545b77c9f1$export$f531f92e2a15358f} from \"./domHelpers.mjs\";\nimport {getActiveElement as $23f2114a1b82827e$export$cd4e5573fbe2b576, getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29} from \"./shadowdom/DOMFunctions.mjs\";\nimport {getMetaValue as $7096878c21af5e66$export$a929f3f93e2cc67e} from \"./getMetaValue.mjs\";\nimport {isAndroid as $2add3ce32c6007eb$export$a11b0059900ceec8, isMac as $2add3ce32c6007eb$export$9ac100e40613ea10, isWebKit as $2add3ce32c6007eb$export$78551043582a6a98} from \"./platform.mjs\";\nimport {isFocusable as $3b8b240c1bf84ab9$export$4c063cf1350e6fed} from \"./isFocusable.mjs\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nconst $bb39c0fc1c19b34c$var$KEYBOARD_HEIGHT = 100;\nconst $bb39c0fc1c19b34c$var$KEYBOARD_TIMEOUT = 600;\n// Tracks layout state of the on-screen keyboard.\nconst $bb39c0fc1c19b34c$var$state = {\n    isOpen: false,\n    screenWidth: 0,\n    screenHeight: 0,\n    screenAngle: 0,\n    screenTimeout: 0,\n    startTimeStamp: 0,\n    endTimeStamp: 0,\n    resizeTimeStamp: 0,\n    resizeTimeout: 0\n};\n// HTML input types that do not cause the software keyboard to appear.\nconst $bb39c0fc1c19b34c$var$nonTextInputTypes = new Set([\n    'checkbox',\n    'radio',\n    'range',\n    'color',\n    'file',\n    'image',\n    'button',\n    'submit',\n    'reset'\n]);\nif (process.env.NODE_ENV === 'test' && typeof window !== 'undefined' && !Reflect.has(window, 'visualViewport')) {\n    const visualViewport = Object.assign(new EventTarget(), {\n        offsetTop: 0,\n        offsetLeft: 0,\n        pageTop: 0,\n        pageLeft: 0,\n        scale: 1\n    });\n    Reflect.defineProperty(visualViewport, 'width', {\n        get: ()=>window.innerWidth,\n        configurable: true\n    });\n    Reflect.defineProperty(visualViewport, 'height', {\n        get: ()=>window.innerHeight,\n        configurable: true\n    });\n    Reflect.defineProperty(window, 'visualViewport', {\n        value: visualViewport,\n        configurable: true,\n        writable: true\n    });\n}\nif (process.env.NODE_ENV === 'test' && typeof window !== 'undefined' && !Reflect.has(window.screen, 'orientation')) {\n    const orientation = Object.assign(new EventTarget(), {\n        type: 'landscape-primary'\n    });\n    Reflect.defineProperty(window.screen, 'orientation', {\n        value: orientation,\n        configurable: true,\n        writable: true\n    });\n    Reflect.defineProperty(window.screen.orientation, 'angle', {\n        get: ()=>window.orientation ?? 0,\n        configurable: true\n    });\n}\nfunction $bb39c0fc1c19b34c$var$getTouchScreen() {\n    // Normalize the screen by any scaling to get the layout coordinate space.\n    let screenWidth = Number(window.visualViewport?.width ?? window.innerWidth);\n    let screenHeight = Number(window.visualViewport?.height ?? window.innerHeight);\n    let visualScale = Number(window.visualViewport?.scale ?? 1);\n    return {\n        width: screenWidth * visualScale,\n        height: screenHeight * visualScale,\n        angle: window.screen.orientation?.angle ?? 0\n    };\n}\nfunction $bb39c0fc1c19b34c$var$onResizeStart(e) {\n    // So we don't constantly call clearTimeout and setTimeout, keep track of the\n    // current timeout time and only reschedule the timer when it is getting close.\n    if ($bb39c0fc1c19b34c$var$state.resizeTimeStamp <= e.timeStamp + 50) {\n        $bb39c0fc1c19b34c$var$state.resizeTimeStamp = e.timeStamp + 150;\n        window.clearTimeout($bb39c0fc1c19b34c$var$state.resizeTimeout);\n        $bb39c0fc1c19b34c$var$state.resizeTimeout = window.setTimeout($bb39c0fc1c19b34c$var$onResizeEnd, 150);\n    }\n}\nfunction $bb39c0fc1c19b34c$var$onResizeEnd() {\n    let viewportMeta = (0, $7096878c21af5e66$export$a929f3f93e2cc67e)('viewport');\n    // Overlaying keyboards do not impact geometry, so there is nothing to measure.\n    // https://caniuse.com/mdn-html_elements_meta_name_viewport_interactive-widget\n    if ((0, $2add3ce32c6007eb$export$a11b0059900ceec8)() && viewportMeta?.includes('overlays-content')) return;\n    let time = performance.now();\n    let screen = $bb39c0fc1c19b34c$var$getTouchScreen();\n    let elapsed = time - $bb39c0fc1c19b34c$var$state.startTimeStamp;\n    let delta = $bb39c0fc1c19b34c$var$state.screenHeight - screen.height;\n    let rotation = $bb39c0fc1c19b34c$var$state.screenAngle - screen.angle;\n    // Update the screen once an open keyboard that rotated along closes. The state swap was\n    // deferred, so the old width predicts the height it should close towards.\n    if (Math.abs(rotation) % 180 && $bb39c0fc1c19b34c$var$state.screenWidth - screen.height < $bb39c0fc1c19b34c$var$KEYBOARD_HEIGHT) {\n        $bb39c0fc1c19b34c$var$state.screenWidth = screen.width;\n        $bb39c0fc1c19b34c$var$state.screenHeight = screen.height;\n        $bb39c0fc1c19b34c$var$state.screenAngle = screen.angle;\n        delta = 0;\n    }\n    // Update the screen if a resize happens outside the capture timeframe. We debounce\n    // because WebKit may fire its single opening resize before the focus event.\n    if (elapsed > $bb39c0fc1c19b34c$var$KEYBOARD_TIMEOUT) {\n        window.clearTimeout($bb39c0fc1c19b34c$var$state.screenTimeout);\n        $bb39c0fc1c19b34c$var$state.screenTimeout = window.setTimeout(()=>{\n            let activeElement = document.hasFocus() ? (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)() : null;\n            let willKeyboardOpen = $bb39c0fc1c19b34c$export$c57958e35f31ed73(activeElement);\n            let screen = $bb39c0fc1c19b34c$var$getTouchScreen();\n            if (Math.abs($bb39c0fc1c19b34c$var$state.screenAngle - screen.angle) % 180) return;\n            if ($bb39c0fc1c19b34c$var$state.isOpen && willKeyboardOpen) return;\n            $bb39c0fc1c19b34c$var$state.screenWidth = screen.width;\n            $bb39c0fc1c19b34c$var$state.screenHeight = screen.height;\n            $bb39c0fc1c19b34c$var$state.screenAngle = screen.angle;\n            $bb39c0fc1c19b34c$var$state.isOpen = false;\n        }, $bb39c0fc1c19b34c$var$KEYBOARD_TIMEOUT);\n    }\n    // Otherwise, record an opening if the height changed by more than our threshold.\n    // This may fail if the layout viewport changes for other reasons during this timeframe.\n    if (elapsed <= $bb39c0fc1c19b34c$var$KEYBOARD_TIMEOUT && delta >= $bb39c0fc1c19b34c$var$KEYBOARD_HEIGHT) $bb39c0fc1c19b34c$var$state.endTimeStamp = time;\n    // Store the new open state since the viewport is stable when this is reached.\n    $bb39c0fc1c19b34c$var$state.isOpen = delta >= $bb39c0fc1c19b34c$var$KEYBOARD_HEIGHT;\n}\nfunction $bb39c0fc1c19b34c$var$onOrientationChange() {\n    let screen = $bb39c0fc1c19b34c$var$getTouchScreen();\n    let rotation = $bb39c0fc1c19b34c$var$state.screenAngle - screen.angle;\n    // Rotation may cause the resize buffer to be filled, but we need to make sure a screen\n    // estimate is already available in case focus lands before it expires. This could fail\n    // if a top bar exceeds the keyboard threshold, in which case we may need to revisit.\n    if (Math.abs(rotation) % 180 && !$bb39c0fc1c19b34c$var$state.isOpen) {\n        let width = $bb39c0fc1c19b34c$var$state.screenWidth;\n        let height = $bb39c0fc1c19b34c$var$state.screenHeight;\n        $bb39c0fc1c19b34c$var$state.screenWidth = height;\n        $bb39c0fc1c19b34c$var$state.screenHeight = width;\n    }\n    if (!$bb39c0fc1c19b34c$var$state.isOpen) $bb39c0fc1c19b34c$var$state.screenAngle = screen.angle;\n}\nfunction $bb39c0fc1c19b34c$var$onFocus(e) {\n    let target = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n    let willKeyboardOpen = $bb39c0fc1c19b34c$export$c57958e35f31ed73(target);\n    let time = performance.now();\n    let screen = $bb39c0fc1c19b34c$var$getTouchScreen();\n    let delta = $bb39c0fc1c19b34c$var$state.screenHeight - screen.height;\n    // Update the screen and start the timer if we are about to open.\n    if (delta < $bb39c0fc1c19b34c$var$KEYBOARD_HEIGHT && willKeyboardOpen) {\n        $bb39c0fc1c19b34c$var$state.screenWidth = screen.width;\n        $bb39c0fc1c19b34c$var$state.screenHeight = screen.height;\n        $bb39c0fc1c19b34c$var$state.screenAngle = screen.angle;\n        $bb39c0fc1c19b34c$var$state.startTimeStamp = time;\n    }\n    // This focus will open a keyboard so reset the buffer.\n    if (willKeyboardOpen) window.clearTimeout($bb39c0fc1c19b34c$var$state.screenTimeout);\n    // Stop the timer if the keyboard is already open.\n    if (delta >= $bb39c0fc1c19b34c$var$KEYBOARD_HEIGHT && willKeyboardOpen) $bb39c0fc1c19b34c$var$state.endTimeStamp = time;\n}\nfunction $bb39c0fc1c19b34c$var$setupGlobalEvents() {\n    let screen = $bb39c0fc1c19b34c$var$getTouchScreen();\n    // WebKit only fires a single event per resize.\n    (0, $d447af545b77c9f1$export$f531f92e2a15358f)(window.visualViewport, 'resize', (0, $2add3ce32c6007eb$export$78551043582a6a98)() ? $bb39c0fc1c19b34c$var$onResizeEnd : $bb39c0fc1c19b34c$var$onResizeStart);\n    // oxlint-disable-next-line - looks like the lint for this is a little too aggressive\n    (0, $d447af545b77c9f1$export$f531f92e2a15358f)(window.screen.orientation, 'change', $bb39c0fc1c19b34c$var$onOrientationChange);\n    (0, $d447af545b77c9f1$export$f531f92e2a15358f)(window, 'focus', $bb39c0fc1c19b34c$var$onFocus, {\n        capture: true,\n        passive: true\n    });\n    // Store the initial screen dimensions.\n    $bb39c0fc1c19b34c$var$state.screenWidth = screen.width;\n    $bb39c0fc1c19b34c$var$state.screenHeight = screen.height;\n    $bb39c0fc1c19b34c$var$state.screenAngle = screen.angle;\n}\nif (typeof document !== 'undefined') {\n    if (document.readyState !== 'loading') $bb39c0fc1c19b34c$var$setupGlobalEvents();\n    else (0, $d447af545b77c9f1$export$f531f92e2a15358f)(document, 'DOMContentLoaded', $bb39c0fc1c19b34c$var$setupGlobalEvents);\n}\nfunction $bb39c0fc1c19b34c$export$a986ed8aea890397() {\n    let viewportMeta = (0, $7096878c21af5e66$export$a929f3f93e2cc67e)('viewport');\n    // Overlaying keyboards do not impact geometry, so there is nothing to await.\n    // https://caniuse.com/mdn-html_elements_meta_name_viewport_interactive-widget\n    if ((0, $2add3ce32c6007eb$export$a11b0059900ceec8)() && viewportMeta?.includes('overlays-content')) return false;\n    // WebKit may resize before focus, but an open keyboard always means we have support.\n    if ($bb39c0fc1c19b34c$var$state.isOpen) return true;\n    // As long as no input has ever been focused, we return default support.\n    if (!$bb39c0fc1c19b34c$var$state.startTimeStamp) return window.navigator.maxTouchPoints > 0;\n    // If keyboard geometry changed within the timeout period, we have support.\n    if ($bb39c0fc1c19b34c$var$state.endTimeStamp >= $bb39c0fc1c19b34c$var$state.startTimeStamp) return true;\n    // If a geometry change is mid-flight we return the most recent support.\n    // Supported platforms may have a hardware keyboard, which this won't catch, but thats\n    // about as far as we can reasonably go to exclude non-touch devices.\n    return performance.now() - $bb39c0fc1c19b34c$var$state.startTimeStamp <= $bb39c0fc1c19b34c$var$KEYBOARD_TIMEOUT ? $bb39c0fc1c19b34c$var$state.endTimeStamp > 0 || window.navigator.maxTouchPoints > 0 : false;\n}\nfunction $bb39c0fc1c19b34c$export$c57958e35f31ed73(target) {\n    if (!(target instanceof Element) || !(0, $3b8b240c1bf84ab9$export$4c063cf1350e6fed)(target)) return false;\n    let isTextArea = target instanceof HTMLTextAreaElement;\n    let isEditable = target instanceof HTMLElement && target.isContentEditable;\n    let isTextInput = target instanceof HTMLInputElement && !$bb39c0fc1c19b34c$var$nonTextInputTypes.has(target.type);\n    return isTextArea || isEditable || isTextInput;\n}\nfunction $bb39c0fc1c19b34c$export$16792effe837dba3(event) {\n    return (0, $2add3ce32c6007eb$export$9ac100e40613ea10)() ? event.metaKey : event.ctrlKey;\n}\nfunction $bb39c0fc1c19b34c$export$b1f1c83775b8b5f7() {\n    return $bb39c0fc1c19b34c$var$state.isOpen;\n}\n\n\nexport {$bb39c0fc1c19b34c$export$c57958e35f31ed73 as willOpenKeyboard, $bb39c0fc1c19b34c$export$a986ed8aea890397 as supportsKeyboard, $bb39c0fc1c19b34c$export$16792effe837dba3 as isCtrlKeyPressed, $bb39c0fc1c19b34c$export$b1f1c83775b8b5f7 as isKeyboardOpen};\n//# sourceMappingURL=keyboard.mjs.map\n","import {useLayoutEffect as $c4867b2f328c2698$export$e5c5a5f917a5871c} from \"./useLayoutEffect.mjs\";\nimport $emnFQ$react, {useRef as $emnFQ$useRef, useCallback as $emnFQ$useCallback} from \"react\";\n\n/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n// Use the earliest effect type possible. useInsertionEffect runs during the mutation phase,\n// before all layout effects, but is available only in React 18 and later.\nconst $fe16bffc7a557bf0$var$useEarlyEffect = (0, $emnFQ$react)['useInsertionEffect'] ?? (0, $c4867b2f328c2698$export$e5c5a5f917a5871c);\nfunction $fe16bffc7a557bf0$export$7f54fc3180508a52(fn) {\n    const ref = (0, $emnFQ$useRef)(null);\n    $fe16bffc7a557bf0$var$useEarlyEffect(()=>{\n        ref.current = fn;\n    }, [\n        fn\n    ]);\n    // @ts-ignore\n    return (0, $emnFQ$useCallback)((...args)=>{\n        const f = ref.current;\n        return f?.(...args);\n    }, []);\n}\n\n\nexport {$fe16bffc7a557bf0$export$7f54fc3180508a52 as useEffectEvent};\n//# sourceMappingURL=useEffectEvent.mjs.map\n","import {addEvent as $d447af545b77c9f1$export$f531f92e2a15358f} from \"./domHelpers.mjs\";\nimport {useEffectEvent as $fe16bffc7a557bf0$export$7f54fc3180508a52} from \"./useEffectEvent.mjs\";\nimport {useEffect as $jBdOV$useEffect} from \"react\";\n\n/*\n * Copyright 2021 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nfunction $600b3cf69ae46262$export$90fc3a17d93f704c(ref, event, listener, options) {\n    let handleEvent = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)(listener);\n    let isDisabled = listener == null;\n    (0, $jBdOV$useEffect)(()=>{\n        if (isDisabled || ref.current == null) return;\n        return (0, $d447af545b77c9f1$export$f531f92e2a15358f)(ref.current, event, handleEvent, options);\n    }, [\n        ref,\n        event,\n        options,\n        isDisabled\n    ]);\n}\n\n\nexport {$600b3cf69ae46262$export$90fc3a17d93f704c as useEvent};\n//# sourceMappingURL=useEvent.mjs.map\n","import {useId as $390e54f620492c70$export$f680877a34711e37} from \"./useId.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $e8ac3c3f5d4bae7f$export$d6875122194c7b44(props, defaultLabel) {\n    let { id: id, 'aria-label': label, 'aria-labelledby': labelledBy } = props;\n    // If there is both an aria-label and aria-labelledby,\n    // combine them by pointing to the element itself.\n    id = (0, $390e54f620492c70$export$f680877a34711e37)(id);\n    if (labelledBy && label) {\n        let ids = new Set([\n            id,\n            ...labelledBy.trim().split(/\\s+/)\n        ]);\n        labelledBy = [\n            ...ids\n        ].join(' ');\n    } else if (labelledBy) labelledBy = labelledBy.trim().split(/\\s+/).join(' ');\n    // If no labels are provided, use the default\n    if (!label && !labelledBy && defaultLabel) label = defaultLabel;\n    return {\n        id: id,\n        'aria-label': label,\n        'aria-labelledby': labelledBy\n    };\n}\n\n\nexport {$e8ac3c3f5d4bae7f$export$d6875122194c7b44 as useLabels};\n//# sourceMappingURL=useLabels.mjs.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // https://en.wikipedia.org/wiki/Right-to-left\nconst $d805ff57cab8bee2$var$RTL_SCRIPTS = new Set([\n    'Arab',\n    'Syrc',\n    'Samr',\n    'Mand',\n    'Thaa',\n    'Mend',\n    'Nkoo',\n    'Adlm',\n    'Rohg',\n    'Hebr'\n]);\nconst $d805ff57cab8bee2$var$RTL_LANGS = new Set([\n    'ae',\n    'ar',\n    'arc',\n    'bcc',\n    'bqi',\n    'ckb',\n    'dv',\n    'fa',\n    'glk',\n    'he',\n    'ku',\n    'mzn',\n    'nqo',\n    'pnb',\n    'ps',\n    'sd',\n    'ug',\n    'ur',\n    'yi'\n]);\nfunction $d805ff57cab8bee2$export$702d680b21cbd764(localeString) {\n    // If the Intl.Locale API is available, use it to get the locale's text direction.\n    if (Intl.Locale) {\n        let locale = new Intl.Locale(localeString).maximize();\n        // Use the text info object to get the direction if possible.\n        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/getTextInfo\n        let textInfo = // @ts-ignore - this was implemented as a property by some browsers before it was standardized as a function.\n        typeof locale.getTextInfo === 'function' ? locale.getTextInfo() : locale.textInfo;\n        if (textInfo) return textInfo.direction === 'rtl';\n        // Fallback: guess using the script.\n        // This is more accurate than guessing by language, since languages can be written in multiple scripts.\n        if (locale.script) return $d805ff57cab8bee2$var$RTL_SCRIPTS.has(locale.script);\n    }\n    // If not, just guess by the language (first part of the locale)\n    let lang = localeString.split('-')[0];\n    return $d805ff57cab8bee2$var$RTL_LANGS.has(lang);\n}\n\n\nexport {$d805ff57cab8bee2$export$702d680b21cbd764 as isRTL};\n//# sourceMappingURL=utils.mjs.map\n","import {isRTL as $d805ff57cab8bee2$export$702d680b21cbd764} from \"./utils.mjs\";\nimport {useIsSSR as $c7eafbbe1ea5834e$export$535bd6ca7f90a273} from \"../ssr/SSRProvider.mjs\";\nimport {useState as $lEF9U$useState, useEffect as $lEF9U$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n// Locale passed from server by PackageLocalizationProvider.\nconst $520a025cdb0d710d$var$localeSymbol = Symbol.for('react-aria.i18n.locale');\nfunction $520a025cdb0d710d$export$f09106e7c6677ec5() {\n    let locale = typeof window !== 'undefined' && window[$520a025cdb0d710d$var$localeSymbol] || // @ts-ignore\n    typeof navigator !== 'undefined' && (navigator.language || navigator.userLanguage) || 'en-US';\n    try {\n        Intl.DateTimeFormat.supportedLocalesOf([\n            locale\n        ]);\n    } catch  {\n        locale = 'en-US';\n    }\n    return {\n        locale: locale,\n        direction: (0, $d805ff57cab8bee2$export$702d680b21cbd764)(locale) ? 'rtl' : 'ltr'\n    };\n}\nlet $520a025cdb0d710d$var$currentLocale = $520a025cdb0d710d$export$f09106e7c6677ec5();\nlet $520a025cdb0d710d$var$listeners = new Set();\nfunction $520a025cdb0d710d$var$updateLocale() {\n    $520a025cdb0d710d$var$currentLocale = $520a025cdb0d710d$export$f09106e7c6677ec5();\n    for (let listener of $520a025cdb0d710d$var$listeners)listener($520a025cdb0d710d$var$currentLocale);\n}\nfunction $520a025cdb0d710d$export$188ec29ebc2bdc3a() {\n    let isSSR = (0, $c7eafbbe1ea5834e$export$535bd6ca7f90a273)();\n    let [defaultLocale, setDefaultLocale] = (0, $lEF9U$useState)($520a025cdb0d710d$var$currentLocale);\n    (0, $lEF9U$useEffect)(()=>{\n        if ($520a025cdb0d710d$var$listeners.size === 0) window.addEventListener('languagechange', $520a025cdb0d710d$var$updateLocale);\n        $520a025cdb0d710d$var$listeners.add(setDefaultLocale);\n        return ()=>{\n            $520a025cdb0d710d$var$listeners.delete(setDefaultLocale);\n            if ($520a025cdb0d710d$var$listeners.size === 0) window.removeEventListener('languagechange', $520a025cdb0d710d$var$updateLocale);\n        };\n    }, []);\n    // We cannot determine the browser's language on the server, so default to\n    // en-US. This will be updated after hydration on the client to the correct value.\n    if (isSSR) {\n        let locale = typeof window !== 'undefined' && window[$520a025cdb0d710d$var$localeSymbol];\n        return {\n            locale: locale || 'en-US',\n            direction: 'ltr'\n        };\n    }\n    return defaultLocale;\n}\n\n\nexport {$520a025cdb0d710d$export$f09106e7c6677ec5 as getDefaultLocale, $520a025cdb0d710d$export$188ec29ebc2bdc3a as useDefaultLocale};\n//# sourceMappingURL=useDefaultLocale.mjs.map\n","import {isRTL as $d805ff57cab8bee2$export$702d680b21cbd764} from \"./utils.mjs\";\nimport {useDefaultLocale as $520a025cdb0d710d$export$188ec29ebc2bdc3a} from \"./useDefaultLocale.mjs\";\nimport $01Dwp$react, {useContext as $01Dwp$useContext} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $2eb8e6d23f3d0cb0$var$I18nContext = /*#__PURE__*/ (0, $01Dwp$react).createContext(null);\n/**\n * Internal component that handles the case when locale is provided.\n */ function $2eb8e6d23f3d0cb0$var$I18nProviderWithLocale(props) {\n    let { locale: locale, children: children } = props;\n    let value = (0, $01Dwp$react).useMemo(()=>({\n            locale: locale,\n            direction: (0, $d805ff57cab8bee2$export$702d680b21cbd764)(locale) ? 'rtl' : 'ltr'\n        }), [\n        locale\n    ]);\n    return /*#__PURE__*/ (0, $01Dwp$react).createElement($2eb8e6d23f3d0cb0$var$I18nContext.Provider, {\n        value: value\n    }, children);\n}\n/**\n * Internal component that handles the case when no locale is provided.\n */ function $2eb8e6d23f3d0cb0$var$I18nProviderWithDefaultLocale(props) {\n    let { children: children } = props;\n    let defaultLocale = (0, $520a025cdb0d710d$export$188ec29ebc2bdc3a)();\n    return /*#__PURE__*/ (0, $01Dwp$react).createElement($2eb8e6d23f3d0cb0$var$I18nContext.Provider, {\n        value: defaultLocale\n    }, children);\n}\nfunction $2eb8e6d23f3d0cb0$export$a54013f0d02a8f82(props) {\n    let { locale: locale, children: children } = props;\n    // Conditionally render different components to avoid calling useDefaultLocale.\n    // This is necessary because useDefaultLocale triggers a re-render.\n    if (locale) return /*#__PURE__*/ (0, $01Dwp$react).createElement($2eb8e6d23f3d0cb0$var$I18nProviderWithLocale, {\n        locale: locale,\n        children: children\n    });\n    return /*#__PURE__*/ (0, $01Dwp$react).createElement($2eb8e6d23f3d0cb0$var$I18nProviderWithDefaultLocale, {\n        children: children\n    });\n}\nfunction $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7() {\n    let defaultLocale = (0, $520a025cdb0d710d$export$188ec29ebc2bdc3a)();\n    let context = (0, $01Dwp$useContext)($2eb8e6d23f3d0cb0$var$I18nContext);\n    return context || defaultLocale;\n}\n\n\nexport {$2eb8e6d23f3d0cb0$export$a54013f0d02a8f82 as I18nProvider, $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7 as useLocale};\n//# sourceMappingURL=I18nProvider.mjs.map\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ const $a747a10fe70a57da$var$localeSymbol = Symbol.for('react-aria.i18n.locale');\nconst $a747a10fe70a57da$var$stringsSymbol = Symbol.for('react-aria.i18n.strings');\nlet $a747a10fe70a57da$var$cachedGlobalStrings = undefined;\nclass $a747a10fe70a57da$export$c17fa47878dc55b6 {\n    constructor(messages, defaultLocale = 'en-US'){\n        // Clone messages so we don't modify the original object.\n        // Filter out entries with falsy values which may have been caused by applying optimize-locales-plugin.\n        this.strings = Object.fromEntries(Object.entries(messages).filter(([, v])=>v));\n        this.defaultLocale = defaultLocale;\n    }\n    /** Returns a localized string for the given key and locale. */ getStringForLocale(key, locale) {\n        let strings = this.getStringsForLocale(locale);\n        let string = strings[key];\n        if (!string) throw new Error(`Could not find intl message ${key} in ${locale} locale`);\n        return string;\n    }\n    /** Returns all localized strings for the given locale. */ getStringsForLocale(locale) {\n        let strings = this.strings[locale];\n        if (!strings) {\n            strings = $a747a10fe70a57da$var$getStringsForLocale(locale, this.strings, this.defaultLocale);\n            this.strings[locale] = strings;\n        }\n        return strings;\n    }\n    static getGlobalDictionaryForPackage(packageName) {\n        if (typeof window === 'undefined') return null;\n        let locale = window[$a747a10fe70a57da$var$localeSymbol];\n        if ($a747a10fe70a57da$var$cachedGlobalStrings === undefined) {\n            let globalStrings = window[$a747a10fe70a57da$var$stringsSymbol];\n            if (!globalStrings) return null;\n            $a747a10fe70a57da$var$cachedGlobalStrings = {};\n            for(let pkg in globalStrings)$a747a10fe70a57da$var$cachedGlobalStrings[pkg] = new $a747a10fe70a57da$export$c17fa47878dc55b6({\n                [locale]: globalStrings[pkg]\n            }, locale);\n        }\n        let dictionary = $a747a10fe70a57da$var$cachedGlobalStrings?.[packageName];\n        if (!dictionary) throw new Error(`Strings for package \"${packageName}\" were not included by LocalizedStringProvider. Please add it to the list passed to createLocalizedStringDictionary.`);\n        return dictionary;\n    }\n}\nfunction $a747a10fe70a57da$var$getStringsForLocale(locale, strings, defaultLocale = 'en-US') {\n    // If there is an exact match, use it.\n    if (strings[locale]) return strings[locale];\n    // Attempt to find the closest match by language.\n    // For example, if the locale is fr-CA (French Canadian), but there is only\n    // an fr-FR (France) set of strings, use that.\n    // This could be replaced with Intl.LocaleMatcher once it is supported.\n    // https://github.com/tc39/proposal-intl-localematcher\n    let language = $a747a10fe70a57da$var$getLanguage(locale);\n    // If the locale has an explicit script (e.g. sr-Latn-RS), prefer a\n    // language-script match (sr-Latn) over a language-only match (sr), since\n    // those may represent entirely different scripts.\n    let script = $a747a10fe70a57da$var$getScript(locale);\n    if (script && strings[`${language}-${script}`]) return strings[`${language}-${script}`];\n    if (strings[language]) return strings[language];\n    for(let key in strings){\n        if (key.startsWith(language + '-')) return strings[key];\n    }\n    // Nothing close, use english.\n    return strings[defaultLocale];\n}\nfunction $a747a10fe70a57da$var$getLanguage(locale) {\n    // @ts-ignore\n    if (Intl.Locale) // @ts-ignore\n    return new Intl.Locale(locale).language;\n    return locale.split('-')[0];\n}\nfunction $a747a10fe70a57da$var$getScript(locale) {\n    // @ts-ignore\n    if (Intl.Locale) // @ts-ignore\n    return new Intl.Locale(locale).script;\n    return undefined;\n}\n\n\nexport {$a747a10fe70a57da$export$c17fa47878dc55b6 as LocalizedStringDictionary};\n//# sourceMappingURL=LocalizedStringDictionary.mjs.map\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ const $b27c684a33948c64$var$pluralRulesCache = new Map();\nconst $b27c684a33948c64$var$numberFormatCache = new Map();\nclass $b27c684a33948c64$export$2f817fcdc4b89ae0 {\n    constructor(locale, strings){\n        this.locale = locale;\n        this.strings = strings;\n    }\n    /** Formats a localized string for the given key with the provided variables. */ format(key, variables) {\n        let message = this.strings.getStringForLocale(key, this.locale);\n        return typeof message === 'function' ? message(variables, this) : message;\n    }\n    plural(count, options, type = 'cardinal') {\n        let opt = options['=' + count];\n        if (opt) return typeof opt === 'function' ? opt() : opt;\n        let key = this.locale + ':' + type;\n        let pluralRules = $b27c684a33948c64$var$pluralRulesCache.get(key);\n        if (!pluralRules) {\n            pluralRules = new Intl.PluralRules(this.locale, {\n                type: type\n            });\n            $b27c684a33948c64$var$pluralRulesCache.set(key, pluralRules);\n        }\n        let selected = pluralRules.select(count);\n        opt = options[selected] || options.other;\n        return typeof opt === 'function' ? opt() : opt;\n    }\n    number(value) {\n        let numberFormat = $b27c684a33948c64$var$numberFormatCache.get(this.locale);\n        if (!numberFormat) {\n            numberFormat = new Intl.NumberFormat(this.locale);\n            $b27c684a33948c64$var$numberFormatCache.set(this.locale, numberFormat);\n        }\n        return numberFormat.format(value);\n    }\n    select(options, value) {\n        let opt = options[value] || options.other;\n        return typeof opt === 'function' ? opt() : opt;\n    }\n}\n\n\nexport {$b27c684a33948c64$export$2f817fcdc4b89ae0 as LocalizedStringFormatter};\n//# sourceMappingURL=LocalizedStringFormatter.mjs.map\n","import {useLocale as $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7} from \"./I18nProvider.mjs\";\nimport {LocalizedStringDictionary as $hwcjY$LocalizedStringDictionary, LocalizedStringFormatter as $hwcjY$LocalizedStringFormatter} from \"@internationalized/string\";\nimport {useMemo as $hwcjY$useMemo} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $cf2482eff2eeeec2$var$cache = new WeakMap();\nfunction $cf2482eff2eeeec2$var$getCachedDictionary(strings) {\n    let dictionary = $cf2482eff2eeeec2$var$cache.get(strings);\n    if (!dictionary) {\n        dictionary = new (0, $hwcjY$LocalizedStringDictionary)(strings);\n        $cf2482eff2eeeec2$var$cache.set(strings, dictionary);\n    }\n    return dictionary;\n}\nfunction $cf2482eff2eeeec2$export$87b761675e8eaa10(strings, packageName) {\n    return packageName && (0, $hwcjY$LocalizedStringDictionary).getGlobalDictionaryForPackage(packageName) || $cf2482eff2eeeec2$var$getCachedDictionary(strings);\n}\nfunction $cf2482eff2eeeec2$export$f12b703ca79dfbb1(strings, packageName) {\n    let { locale: locale } = (0, $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7)();\n    let dictionary = $cf2482eff2eeeec2$export$87b761675e8eaa10(strings, packageName);\n    return (0, $hwcjY$useMemo)(()=>new (0, $hwcjY$LocalizedStringFormatter)(locale, dictionary), [\n        locale,\n        dictionary\n    ]);\n}\n\n\nexport {$cf2482eff2eeeec2$export$87b761675e8eaa10 as useLocalizedStringDictionary, $cf2482eff2eeeec2$export$f12b703ca79dfbb1 as useLocalizedStringFormatter};\n//# sourceMappingURL=useLocalizedStringFormatter.mjs.map\n","import {CLEAR_FOCUS_EVENT as $8b2399d051d06d4c$export$447a38995de2c711, FOCUS_EVENT as $8b2399d051d06d4c$export$831c820ad60f9d12} from \"../utils/constants.mjs\";\nimport {dispatchVirtualBlur as $b72f3f7b3b5f42c6$export$6c5dc7e81d2cc29a, dispatchVirtualFocus as $b72f3f7b3b5f42c6$export$2b35b76d2e30e129, getVirtuallyFocusedElement as $b72f3f7b3b5f42c6$export$759df0d867455a91, moveVirtualFocus as $b72f3f7b3b5f42c6$export$76e4e37e5339496d} from \"../focus/virtualFocus.mjs\";\nimport {getActiveElement as $23f2114a1b82827e$export$cd4e5573fbe2b576, getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {getInteractionModality as $8f5a2122b0992be3$export$630ff653c5ada6a9, getPointerType as $8f5a2122b0992be3$export$887a228355cf7d95} from \"../interactions/useFocusVisible.mjs\";\nimport {getOwnerDocument as $d447af545b77c9f1$export$b204af158042fbac} from \"../utils/domHelpers.mjs\";\nimport $7qCLe$intlStringsmjs from \"./intlStrings.mjs\";\nimport {isAndroid as $2add3ce32c6007eb$export$a11b0059900ceec8, isIOS as $2add3ce32c6007eb$export$fedb369cb70207f1} from \"../utils/platform.mjs\";\nimport {isCtrlKeyPressed as $bb39c0fc1c19b34c$export$16792effe837dba3} from \"../utils/keyboard.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {mergeRefs as $4064df0d6f9620e1$export$c9058316764c140e} from \"../utils/mergeRefs.mjs\";\nimport {useEffectEvent as $fe16bffc7a557bf0$export$7f54fc3180508a52} from \"../utils/useEffectEvent.mjs\";\nimport {useEvent as $600b3cf69ae46262$export$90fc3a17d93f704c} from \"../utils/useEvent.mjs\";\nimport {useId as $390e54f620492c70$export$f680877a34711e37} from \"../utils/useId.mjs\";\nimport {useLabels as $e8ac3c3f5d4bae7f$export$d6875122194c7b44} from \"../utils/useLabels.mjs\";\nimport {useLayoutEffect as $c4867b2f328c2698$export$e5c5a5f917a5871c} from \"../utils/useLayoutEffect.mjs\";\nimport {useLocalizedStringFormatter as $cf2482eff2eeeec2$export$f12b703ca79dfbb1} from \"../i18n/useLocalizedStringFormatter.mjs\";\nimport {useObjectRef as $03e8ab2d84d7657a$export$4338b53315abf666} from \"../utils/useObjectRef.mjs\";\nimport {useRef as $7qCLe$useRef, useState as $7qCLe$useState, useEffect as $7qCLe$useEffect, useCallback as $7qCLe$useCallback, useMemo as $7qCLe$useMemo} from \"react\";\n\n\nfunction $parcel$interopDefault(a) {\n  return a && a.__esModule ? a.default : a;\n}\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction $134103e19bdfd846$export$1e40b3ca02d92d21(props, state) {\n    let { inputRef: inputRef, collectionRef: collectionRef, filter: filter, disableAutoFocusFirst: disableAutoFocusFirst = false, disableVirtualFocus: disableVirtualFocus = false } = props;\n    let collectionId = (0, $390e54f620492c70$export$f680877a34711e37)();\n    let timeout = (0, $7qCLe$useRef)(undefined);\n    let delayNextActiveDescendant = (0, $7qCLe$useRef)(false);\n    let queuedActiveDescendant = (0, $7qCLe$useRef)(null);\n    // For mobile screen readers, we don't want virtual focus, instead opting to disable FocusScope's restoreFocus and manually\n    // moving focus back to the subtriggers\n    let isMobileScreenReader = (0, $8f5a2122b0992be3$export$630ff653c5ada6a9)() === 'virtual' && ((0, $2add3ce32c6007eb$export$fedb369cb70207f1)() || (0, $2add3ce32c6007eb$export$a11b0059900ceec8)());\n    let [shouldUseVirtualFocus, setShouldUseVirtualFocus] = (0, $7qCLe$useState)(!isMobileScreenReader && !disableVirtualFocus);\n    // Tracks if a collection has been connected to the autocomplete. If false, we don't want to add various attributes to the autocomplete input\n    // since it isn't attached to a filterable collection (e.g. Tabs)\n    let [hasCollection, setHasCollection] = (0, $7qCLe$useState)(false);\n    let [autoFocusOnMount, setAutoFocusOnMount] = (0, $7qCLe$useState)(false);\n    (0, $7qCLe$useEffect)(()=>{\n        return ()=>clearTimeout(timeout.current);\n    }, []);\n    let updateActiveDescendantEvent = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)((e)=>{\n        // Ensure input is focused if the user clicks on the collection directly.\n        // don't trigger on touch so that mobile keyboard doesnt appear when tapping on options\n        if (!e.isTrusted && shouldUseVirtualFocus && inputRef.current && (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)((0, $d447af545b77c9f1$export$b204af158042fbac)(inputRef.current)) !== inputRef.current && (0, $8f5a2122b0992be3$export$887a228355cf7d95)() !== 'touch') inputRef.current.focus();\n        let target = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n        if (e.isTrusted || !target || queuedActiveDescendant.current === target.id) return;\n        clearTimeout(timeout.current);\n        if (target !== collectionRef.current) {\n            if (delayNextActiveDescendant.current) {\n                queuedActiveDescendant.current = target.id;\n                timeout.current = setTimeout(()=>{\n                    state.setFocusedNodeId(target.id);\n                }, 500);\n            } else {\n                queuedActiveDescendant.current = target.id;\n                state.setFocusedNodeId(target.id);\n            }\n        } else if (queuedActiveDescendant.current && !document.getElementById(queuedActiveDescendant.current)) {\n            // If we recieve a focus event refocusing the collection, either we have newly refocused the input and are waiting for the\n            // wrapped collection to refocus the previously focused node if any OR\n            // we are in a state where we've filtered to such a point that there aren't any matching items in the collection to focus.\n            // In this case we want to clear tracked item if any and clear active descendant\n            queuedActiveDescendant.current = null;\n            state.setFocusedNodeId(null);\n        }\n        delayNextActiveDescendant.current = false;\n    });\n    let [collectionNode, setCollectionNode] = (0, $7qCLe$useState)(null);\n    let callbackRef = (0, $7qCLe$useCallback)((node)=>{\n        setCollectionNode(node);\n        if (node != null) {\n            // If useSelectableCollection isn't passed shouldUseVirtualFocus even when useAutocomplete provides it\n            // that means the collection doesn't support it (e.g. Table). If that is the case, we need to disable it here regardless\n            // of what the user's provided so that the input doesn't recieve the onKeyDown and autocomplete props.\n            if (node.getAttribute('tabindex') != null) setShouldUseVirtualFocus(false);\n            setHasCollection(true);\n        } else setHasCollection(false);\n    }, []);\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        if (collectionNode != null) // When typing forward, we want to delay the setting of active descendant to not interrupt the native screen reader announcement\n        // of the letter you just typed. If we recieve another focus event then we clear the queued update\n        collectionNode.addEventListener('focusin', updateActiveDescendantEvent);\n        return ()=>{\n            collectionNode?.removeEventListener('focusin', updateActiveDescendantEvent);\n        };\n    }, [\n        collectionNode\n    ]);\n    // Make sure to memo so that React doesn't keep registering a new event listeners on every rerender of the wrapped collection\n    let mergedCollectionRef = (0, $03e8ab2d84d7657a$export$4338b53315abf666)(// oxlint-disable-next-line react/react-compiler\n    (0, $7qCLe$useMemo)(()=>(0, $4064df0d6f9620e1$export$c9058316764c140e)(collectionRef, callbackRef), [\n        collectionRef,\n        callbackRef\n    ]));\n    let focusFirstItem = (0, $7qCLe$useCallback)(()=>{\n        if (!collectionRef.current) {\n            setAutoFocusOnMount(true);\n            return;\n        }\n        delayNextActiveDescendant.current = true;\n        collectionRef.current?.dispatchEvent(new CustomEvent((0, $8b2399d051d06d4c$export$831c820ad60f9d12), {\n            cancelable: true,\n            bubbles: true,\n            detail: {\n                focusStrategy: 'first'\n            }\n        }));\n    }, [\n        collectionRef\n    ]);\n    let clearVirtualFocus = (0, $7qCLe$useCallback)((clearFocusKey)=>{\n        setAutoFocusOnMount(false);\n        (0, $b72f3f7b3b5f42c6$export$76e4e37e5339496d)((0, $23f2114a1b82827e$export$cd4e5573fbe2b576)());\n        queuedActiveDescendant.current = null;\n        state.setFocusedNodeId(null);\n        let clearFocusEvent = new CustomEvent((0, $8b2399d051d06d4c$export$447a38995de2c711), {\n            cancelable: true,\n            bubbles: true,\n            detail: {\n                clearFocusKey: clearFocusKey\n            }\n        });\n        clearTimeout(timeout.current);\n        delayNextActiveDescendant.current = false;\n        collectionRef.current?.dispatchEvent(clearFocusEvent);\n    }, [\n        collectionRef,\n        state\n    ]);\n    let lastInputType = (0, $7qCLe$useRef)('');\n    (0, $600b3cf69ae46262$export$90fc3a17d93f704c)(inputRef, 'beforeinput', (e)=>{\n        let { inputType: inputType } = e;\n        lastInputType.current = inputType;\n    });\n    let onChange = (value)=>{\n        // Tell wrapped collection to focus the first element in the list when typing forward and to clear focused key when modifying the text via\n        // copy paste/backspacing/undo/redo for screen reader announcements\n        if ((lastInputType.current === 'insertText' || // IME composition (e.g. CJK input) reports 'insertCompositionText'/'insertFromComposition'\n        // instead of 'insertText'. Treat these as forward typing so the first item gets virtual focus.\n        lastInputType.current === 'insertCompositionText' || lastInputType.current === 'insertFromComposition') && !disableAutoFocusFirst) focusFirstItem();\n        else if (lastInputType.current && (lastInputType.current.includes('insert') || lastInputType.current.includes('delete') || lastInputType.current.includes('history'))) {\n            clearVirtualFocus(true);\n            // If onChange was triggered before the timeout actually updated the activedescendant, we need to fire\n            // our own dispatchVirtualFocus so focusVisible gets reapplied on the input\n            if ((0, $b72f3f7b3b5f42c6$export$759df0d867455a91)(document) === inputRef.current) (0, $b72f3f7b3b5f42c6$export$2b35b76d2e30e129)(inputRef.current, null);\n        }\n        state.setInputValue(value);\n    };\n    let keyDownTarget = (0, $7qCLe$useRef)(null);\n    // For textfield specific keydown operations\n    let onKeyDown = (e)=>{\n        keyDownTarget.current = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n        if (e.nativeEvent.isComposing) return;\n        let focusedNodeId = queuedActiveDescendant.current;\n        if (focusedNodeId !== null && (0, $d447af545b77c9f1$export$b204af158042fbac)(inputRef.current).getElementById(focusedNodeId) == null) {\n            // if the focused id doesn't exist in document, then we need to clear the tracked focused node, otherwise\n            // we will be attempting to fire key events on a non-existing node instead of trying to focus the newly swapped wrapped collection.\n            // This can happen if you are swapping out the Autocomplete wrapped collection component like in the docs search.\n            queuedActiveDescendant.current = null;\n            focusedNodeId = null;\n        }\n        switch(e.key){\n            case 'a':\n                if ((0, $bb39c0fc1c19b34c$export$16792effe837dba3)(e)) return;\n                break;\n            case 'Escape':\n                // Early return for Escape here so it doesn't leak the Escape event from the simulated collection event below and\n                // close the dialog prematurely. Ideally that should be up to the discretion of the input element hence the check\n                // for isPropagationStopped\n                if (e.isDefaultPrevented()) return;\n                break;\n            case ' ':\n                // Space shouldn't trigger onAction so early return.\n                return;\n            case 'Tab':\n                // Don't propogate Tab down to the collection, otherwise we will try to focus the collection via useSelectableCollection's Tab handler (aka shift tab logic)\n                // We want FocusScope to handle Tab if one exists (aka sub dialog), so special casepropogate\n                if ('continuePropagation' in e) e.continuePropagation();\n                return;\n            case 'Home':\n            case 'End':\n            case 'PageDown':\n            case 'PageUp':\n            case 'ArrowUp':\n            case 'ArrowDown':\n            case 'ArrowRight':\n            case 'ArrowLeft':\n                {\n                    if ((e.key === 'Home' || e.key === 'End') && focusedNodeId == null && e.shiftKey) return;\n                    // If there is text within the input field, we'll want continue propagating events down\n                    // to the wrapped collection if there is a focused node so that a user can continue moving the\n                    // virtual focus. However, if the user doesn't have a focus in the collection, just move the text\n                    // cursor instead. They can move focus down into the collection via down/up arrow if need be\n                    if (e.key === 'ArrowRight' || e.key === 'ArrowLeft') {\n                        if (focusedNodeId == null) {\n                            if (!e.isPropagationStopped()) e.stopPropagation();\n                            return;\n                        }\n                        break;\n                    }\n                    // Prevent these keys from moving the text cursor in the input\n                    e.preventDefault();\n                    // Move virtual focus into the wrapped collection\n                    let focusCollection = new CustomEvent((0, $8b2399d051d06d4c$export$831c820ad60f9d12), {\n                        cancelable: true,\n                        bubbles: true\n                    });\n                    collectionRef.current?.dispatchEvent(focusCollection);\n                    break;\n                }\n        }\n        // Emulate the keyboard events that happen in the input field in the wrapped collection. This is for triggering things like onAction via Enter\n        // or moving focus from one item to another. Stop propagation on the input event if it isn't already stopped so it doesn't leak out. For events\n        // like ESC, the dispatched event below will bubble out of the collection and be stopped if handled by useSelectableCollection, otherwise will bubble\n        // as expected\n        if (!e.isPropagationStopped()) e.stopPropagation();\n        let shouldPerformDefaultAction = true;\n        if (collectionRef.current !== null) {\n            if (focusedNodeId == null) shouldPerformDefaultAction = collectionRef.current?.dispatchEvent(new KeyboardEvent(e.nativeEvent.type, e.nativeEvent)) || false;\n            else {\n                let item = document.getElementById(focusedNodeId);\n                if (item) shouldPerformDefaultAction = item?.dispatchEvent(new KeyboardEvent(e.nativeEvent.type, e.nativeEvent)) || false;\n            }\n        }\n        if (shouldPerformDefaultAction) switch(e.key){\n            case 'ArrowLeft':\n            case 'ArrowRight':\n                // Clear the activedescendant so NVDA announcements aren't interrupted but retain the focused key in the collection so the\n                // user's keyboard navigation restarts from where they left off\n                clearVirtualFocus();\n                break;\n            case 'Enter':\n                // Trigger click action on item when Enter key was pressed.\n                if (focusedNodeId != null) {\n                    let item = document.getElementById(focusedNodeId);\n                    item?.dispatchEvent(new PointerEvent('click', e.nativeEvent));\n                }\n                break;\n        }\n        else // TODO: check if we can do this, want to stop textArea from using its default Enter behavior so items are properly triggered\n        e.preventDefault();\n    };\n    let onKeyUpCapture = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)((e)=>{\n        // Dispatch simulated key up events for things like triggering links in listbox\n        // Make sure to stop the propagation of the input keyup event so that the simulated keyup/down pair\n        // is detected by usePress instead of the original keyup originating from the input\n        if ((0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e) === keyDownTarget.current) {\n            e.stopImmediatePropagation();\n            let focusedNodeId = queuedActiveDescendant.current;\n            if (focusedNodeId == null) collectionRef.current?.dispatchEvent(new KeyboardEvent(e.type, e));\n            else {\n                let item = document.getElementById(focusedNodeId);\n                item?.dispatchEvent(new KeyboardEvent(e.type, e));\n            }\n        }\n    });\n    (0, $7qCLe$useEffect)(()=>{\n        document.addEventListener('keyup', onKeyUpCapture, true);\n        return ()=>{\n            document.removeEventListener('keyup', onKeyUpCapture, true);\n        };\n    }, []);\n    let stringFormatter = (0, $cf2482eff2eeeec2$export$f12b703ca79dfbb1)((0, ($parcel$interopDefault($7qCLe$intlStringsmjs))), '@react-aria/autocomplete');\n    let collectionProps = (0, $e8ac3c3f5d4bae7f$export$d6875122194c7b44)({\n        id: collectionId,\n        'aria-label': stringFormatter.format('collectionLabel')\n    });\n    let filterFn = (0, $7qCLe$useCallback)((nodeTextValue, node)=>{\n        if (filter) return filter(nodeTextValue, state.inputValue, node);\n        return true;\n    }, [\n        state.inputValue,\n        filter\n    ]);\n    // Be sure to clear/restore the virtual + collection focus when blurring/refocusing the field so we only show the\n    // focus ring on the virtually focused collection when are actually interacting with the Autocomplete\n    let onBlur = (e)=>{\n        if (!e.isTrusted) return;\n        let lastFocusedNode = queuedActiveDescendant.current ? document.getElementById(queuedActiveDescendant.current) : null;\n        if (lastFocusedNode) (0, $b72f3f7b3b5f42c6$export$6c5dc7e81d2cc29a)(lastFocusedNode, e.relatedTarget);\n    };\n    let onFocus = (e)=>{\n        if (!e.isTrusted) return;\n        let curFocusedNode = queuedActiveDescendant.current ? document.getElementById(queuedActiveDescendant.current) : null;\n        if (curFocusedNode) {\n            let target = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n            queueMicrotask(()=>{\n                // instead of focusing the last focused node, just focus the collection instead and have the collection handle what item to focus via useSelectableCollection/Item\n                (0, $b72f3f7b3b5f42c6$export$6c5dc7e81d2cc29a)(target, collectionRef.current);\n                (0, $b72f3f7b3b5f42c6$export$2b35b76d2e30e129)(collectionRef.current, target);\n            });\n        }\n    };\n    // Clicking back into the input can happen after focus moved elsewhere in the dialog, while\n    // virtual focus is still on an option. Clear virtual focus on pointer down so mouse\n    // interactions restore the input state before the click's focus handling runs.\n    // Touch is excluded because touch interactions should not move focus back to the input.\n    let onPointerDown = (e)=>{\n        if (e.button !== 0 || e.pointerType === 'touch' || queuedActiveDescendant.current == null || inputRef.current == null) return;\n        if ((0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e) === inputRef.current) clearVirtualFocus();\n    };\n    // Only apply the autocomplete specific behaviors if the collection component wrapped by it is actually\n    // being filtered/allows filtering by the Autocomplete.\n    let inputProps = {\n        value: state.inputValue,\n        onChange: onChange\n    };\n    let virtualFocusProps = {\n        onKeyDown: onKeyDown,\n        'aria-activedescendant': state.focusedNodeId ?? undefined,\n        onBlur: onBlur,\n        onFocus: onFocus,\n        onPointerDown: onPointerDown\n    };\n    inputProps = {\n        ...inputProps,\n        ...shouldUseVirtualFocus && hasCollection && virtualFocusProps,\n        enterKeyHint: 'go',\n        'aria-controls': hasCollection ? collectionId : undefined,\n        // TODO: readd proper logic for completionMode = complete (aria-autocomplete: both)\n        'aria-autocomplete': 'list',\n        // This disable's iOS's autocorrect suggestions, since the autocomplete provides its own suggestions.\n        autoCorrect: 'off',\n        // This disable's the macOS Safari spell check auto corrections.\n        spellCheck: 'false',\n        autoComplete: 'off'\n    };\n    return {\n        inputProps: inputProps,\n        collectionProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(collectionProps, {\n            shouldUseVirtualFocus: shouldUseVirtualFocus,\n            disallowTypeAhead: shouldUseVirtualFocus,\n            autoFocus: autoFocusOnMount ? 'first' : false\n        }),\n        collectionRef: mergedCollectionRef,\n        filter: filter != null ? filterFn : undefined\n    };\n}\n\n\nexport {$134103e19bdfd846$export$1e40b3ca02d92d21 as useAutocomplete};\n//# sourceMappingURL=useAutocomplete.mjs.map\n","import $1CcWn$react, {useState as $1CcWn$useState, useRef as $1CcWn$useRef, useEffect as $1CcWn$useEffect, useReducer as $1CcWn$useReducer, useCallback as $1CcWn$useCallback} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n// Use the earliest effect possible to reset the ref below.\nconst $3e6197669829fe11$var$useEarlyEffect = typeof document !== 'undefined' || parseInt((0, $1CcWn$react).version, 10) >= 19 ? (0, $1CcWn$react)['useInsertionEffect'] ?? (0, $1CcWn$react).useLayoutEffect : ()=>{};\nfunction $3e6197669829fe11$export$40bfa8c7b0832715(value, defaultValue, onChange) {\n    // Store the value in both state and a ref. The state value will only be used when uncontrolled.\n    // The ref is used to track the most current value, which is passed to the function setState callback.\n    let [stateValue, setStateValue] = (0, $1CcWn$useState)(value || defaultValue);\n    let valueRef = (0, $1CcWn$useRef)(stateValue);\n    let isControlledRef = (0, $1CcWn$useRef)(value !== undefined);\n    let isControlled = value !== undefined;\n    (0, $1CcWn$useEffect)(()=>{\n        let wasControlled = isControlledRef.current;\n        if (wasControlled !== isControlled && process.env.NODE_ENV !== 'production') console.warn(`WARN: A component changed from ${wasControlled ? 'controlled' : 'uncontrolled'} to ${isControlled ? 'controlled' : 'uncontrolled'}.`);\n        isControlledRef.current = isControlled;\n    }, [\n        isControlled\n    ]);\n    // After each render, update the ref to the current value.\n    // This ensures that the setState callback argument is reset.\n    // Note: the effect should not have any dependencies so that controlled values always reset.\n    let currentValue = isControlled ? value : stateValue;\n    $3e6197669829fe11$var$useEarlyEffect(()=>{\n        valueRef.current = currentValue;\n    });\n    let [, forceUpdate] = (0, $1CcWn$useReducer)(()=>({}), {});\n    let setValue = (0, $1CcWn$useCallback)((value, ...args)=>{\n        // @ts-ignore - TS doesn't know that T cannot be a function.\n        let newValue = typeof value === 'function' ? value(valueRef.current) : value;\n        if (!Object.is(valueRef.current, newValue)) {\n            // Update the ref so that the next setState callback has the most recent value.\n            valueRef.current = newValue;\n            setStateValue(newValue);\n            // Always trigger a re-render, even when controlled, so that the layout effect above runs to reset the value.\n            forceUpdate();\n            // Trigger onChange. Note that if setState is called multiple times in a single event,\n            // onChange will be called for each one instead of only once.\n            onChange?.(newValue, ...args);\n        }\n    }, [\n        onChange\n    ]);\n    return [\n        currentValue,\n        setValue\n    ];\n}\n\n\nexport {$3e6197669829fe11$export$40bfa8c7b0832715 as useControlledState};\n//# sourceMappingURL=useControlledState.mjs.map\n","import {useControlledState as $3e6197669829fe11$export$40bfa8c7b0832715} from \"../utils/useControlledState.mjs\";\nimport {useState as $7kYgW$useState} from \"react\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $436a01f8a2730afd$export$ce1595f6e1a63433(props) {\n    let { onInputChange: propsOnInputChange, inputValue: propsInputValue, defaultInputValue: propsDefaultInputValue = '' } = props;\n    let onInputChange = (value)=>{\n        if (propsOnInputChange) propsOnInputChange(value);\n    };\n    let [focusedNodeId, setFocusedNodeId] = (0, $7kYgW$useState)(null);\n    let [inputValue, setInputValue] = (0, $3e6197669829fe11$export$40bfa8c7b0832715)(propsInputValue, propsDefaultInputValue, onInputChange);\n    return {\n        inputValue: inputValue,\n        setInputValue: setInputValue,\n        focusedNodeId: focusedNodeId,\n        setFocusedNodeId: setFocusedNodeId\n    };\n}\n\n\nexport {$436a01f8a2730afd$export$ce1595f6e1a63433 as useAutocompleteState};\n//# sourceMappingURL=useAutocompleteState.mjs.map\n","import {Provider as $7230ffa83bc0c2cf$export$2881499e37b75b9a, removeDataAttributes as $7230ffa83bc0c2cf$export$ef03459518577ad4, useSlottedContext as $7230ffa83bc0c2cf$export$fabf2dc03a41866e} from \"./utils.mjs\";\nimport {useAutocomplete as $1J3Gn$useAutocomplete} from \"react-aria/useAutocomplete\";\nimport {useAutocompleteState as $1J3Gn$useAutocompleteState} from \"react-stately/private/autocomplete/useAutocompleteState\";\nimport {mergeProps as $1J3Gn$mergeProps} from \"react-aria/mergeProps\";\nimport $1J3Gn$react, {createContext as $1J3Gn$createContext, useRef as $1J3Gn$useRef} from \"react\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nconst $4b38b5b75ecc6208$export$36e687af51cd0967 = /*#__PURE__*/ (0, $1J3Gn$createContext)(null);\nconst $4b38b5b75ecc6208$export$68ee3368b6d68148 = /*#__PURE__*/ (0, $1J3Gn$createContext)(null);\nconst $4b38b5b75ecc6208$export$b0d3ecf7112093a7 = /*#__PURE__*/ (0, $1J3Gn$createContext)(null);\nconst $4b38b5b75ecc6208$export$698f465ec27e93df = /*#__PURE__*/ (0, $1J3Gn$createContext)(null);\nfunction $4b38b5b75ecc6208$export$2f2b9559550c7bbc(props) {\n    let ctx = (0, $7230ffa83bc0c2cf$export$fabf2dc03a41866e)($4b38b5b75ecc6208$export$36e687af51cd0967, props.slot);\n    props = (0, $1J3Gn$mergeProps)(ctx, props);\n    let { filter: filter, disableAutoFocusFirst: disableAutoFocusFirst } = props;\n    let state = (0, $1J3Gn$useAutocompleteState)(props);\n    let inputRef = (0, $1J3Gn$useRef)(null);\n    let collectionRef = (0, $1J3Gn$useRef)(null);\n    let { inputProps: inputProps, collectionProps: collectionProps, collectionRef: mergedCollectionRef, filter: filterFn } = (0, $1J3Gn$useAutocomplete)({\n        ...(0, $7230ffa83bc0c2cf$export$ef03459518577ad4)(props),\n        filter: filter,\n        disableAutoFocusFirst: disableAutoFocusFirst,\n        inputRef: inputRef,\n        collectionRef: collectionRef\n    }, state);\n    return /*#__PURE__*/ (0, $1J3Gn$react).createElement((0, $7230ffa83bc0c2cf$export$2881499e37b75b9a), {\n        values: [\n            [\n                $4b38b5b75ecc6208$export$68ee3368b6d68148,\n                state\n            ],\n            [\n                $4b38b5b75ecc6208$export$698f465ec27e93df,\n                {\n                    ...inputProps,\n                    ref: inputRef\n                }\n            ],\n            [\n                $4b38b5b75ecc6208$export$b0d3ecf7112093a7,\n                {\n                    ...collectionProps,\n                    filter: filterFn,\n                    ref: mergedCollectionRef\n                }\n            ]\n        ]\n    }, props.children);\n}\n\n\nexport {$4b38b5b75ecc6208$export$36e687af51cd0967 as AutocompleteContext, $4b38b5b75ecc6208$export$68ee3368b6d68148 as AutocompleteStateContext, $4b38b5b75ecc6208$export$b0d3ecf7112093a7 as SelectableCollectionContext, $4b38b5b75ecc6208$export$698f465ec27e93df as FieldInputContext, $4b38b5b75ecc6208$export$2f2b9559550c7bbc as Autocomplete};\n//# sourceMappingURL=Autocomplete.mjs.map\n","/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ class $6f0c29017aeec335$export$d68d59712b04d9d1 {\n    constructor(key){\n        this.value = null;\n        this.level = 0;\n        this.hasChildNodes = false;\n        this.rendered = null;\n        this.textValue = '';\n        this['aria-label'] = undefined;\n        this.index = 0;\n        this.parentKey = null;\n        this.prevKey = null;\n        this.nextKey = null;\n        this.firstChildKey = null;\n        this.lastChildKey = null;\n        this.props = {};\n        this.colSpan = null;\n        this.colIndex = null;\n        this.type = this.constructor.type;\n        this.key = key;\n    }\n    get childNodes() {\n        throw new Error('childNodes is not supported');\n    }\n    clone() {\n        let node = new this.constructor(this.key);\n        node.value = this.value;\n        node.level = this.level;\n        node.hasChildNodes = this.hasChildNodes;\n        node.rendered = this.rendered;\n        node.textValue = this.textValue;\n        node['aria-label'] = this['aria-label'];\n        node.index = this.index;\n        node.parentKey = this.parentKey;\n        node.prevKey = this.prevKey;\n        node.nextKey = this.nextKey;\n        node.firstChildKey = this.firstChildKey;\n        node.lastChildKey = this.lastChildKey;\n        node.props = this.props;\n        node.render = this.render;\n        node.colSpan = this.colSpan;\n        node.colIndex = this.colIndex;\n        return node;\n    }\n    filter(collection, newCollection, // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    filterFn) {\n        let clone = this.clone();\n        newCollection.addDescendants(clone, collection);\n        return clone;\n    }\n}\nclass $6f0c29017aeec335$export$b1918e978f1ee46f extends $6f0c29017aeec335$export$d68d59712b04d9d1 {\n    filter(collection, newCollection, filterFn) {\n        let [firstKey, lastKey] = $6f0c29017aeec335$var$filterChildren(collection, newCollection, this.firstChildKey, filterFn);\n        let newNode = this.clone();\n        newNode.firstChildKey = firstKey;\n        newNode.lastChildKey = lastKey;\n        return newNode;\n    }\n}\nclass $6f0c29017aeec335$export$5ae2504e948afce5 extends $6f0c29017aeec335$export$d68d59712b04d9d1 {\n    static{\n        this.type = 'header';\n    }\n}\nclass $6f0c29017aeec335$export$8258a0665a675899 extends $6f0c29017aeec335$export$d68d59712b04d9d1 {\n    static{\n        this.type = 'loader';\n    }\n}\nclass $6f0c29017aeec335$export$fd11f34e1d07f134 extends $6f0c29017aeec335$export$b1918e978f1ee46f {\n    static{\n        this.type = 'item';\n    }\n    filter(collection, newCollection, filterFn) {\n        if (filterFn(this.textValue, this)) {\n            let clone = this.clone();\n            newCollection.addDescendants(clone, collection);\n            return clone;\n        }\n        return null;\n    }\n}\nclass $6f0c29017aeec335$export$437f11dc9b403b78 extends $6f0c29017aeec335$export$b1918e978f1ee46f {\n    static{\n        this.type = 'section';\n    }\n    filter(collection, newCollection, filterFn) {\n        let filteredSection = super.filter(collection, newCollection, filterFn);\n        if (filteredSection) {\n            if (filteredSection.lastChildKey !== null) {\n                let lastChild = collection.getItem(filteredSection.lastChildKey);\n                if (lastChild && lastChild.type !== 'header') return filteredSection;\n            }\n        }\n        return null;\n    }\n}\nclass $6f0c29017aeec335$export$408d25a4e12db025 {\n    get size() {\n        return this.itemCount;\n    }\n    getKeys() {\n        return this.keyMap.keys();\n    }\n    *[Symbol.iterator]() {\n        let node = this.firstKey != null ? this.keyMap.get(this.firstKey) : undefined;\n        while(node){\n            yield node;\n            node = node.nextKey != null ? this.keyMap.get(node.nextKey) : undefined;\n        }\n    }\n    getChildren(key) {\n        let keyMap = this.keyMap;\n        return {\n            *[Symbol.iterator] () {\n                let parent = keyMap.get(key);\n                let node = parent?.firstChildKey != null ? keyMap.get(parent.firstChildKey) : null;\n                while(node){\n                    yield node;\n                    node = node.nextKey != null ? keyMap.get(node.nextKey) : undefined;\n                }\n            }\n        };\n    }\n    getKeyBefore(key) {\n        let node = this.keyMap.get(key);\n        if (!node) return null;\n        if (node.prevKey != null) {\n            node = this.keyMap.get(node.prevKey);\n            while(node && node.type !== 'item' && node.lastChildKey != null)node = this.keyMap.get(node.lastChildKey);\n            return node?.key ?? null;\n        }\n        return node.parentKey;\n    }\n    getKeyAfter(key) {\n        let node = this.keyMap.get(key);\n        if (!node) return null;\n        if (node.type !== 'item' && node.firstChildKey != null) return node.firstChildKey;\n        while(node){\n            if (node.nextKey != null) return node.nextKey;\n            if (node.parentKey != null) node = this.keyMap.get(node.parentKey);\n            else return null;\n        }\n        return null;\n    }\n    getFirstKey() {\n        return this.firstKey;\n    }\n    getLastKey() {\n        let node = this.lastKey != null ? this.keyMap.get(this.lastKey) : null;\n        while(node?.lastChildKey != null)node = this.keyMap.get(node.lastChildKey);\n        return node?.key ?? null;\n    }\n    getItem(key) {\n        return this.keyMap.get(key) ?? null;\n    }\n    at() {\n        throw new Error('Not implemented');\n    }\n    clone() {\n        // We need to clone using this.constructor so that subclasses have the right prototype.\n        // TypeScript isn't happy about this yet.\n        // https://github.com/microsoft/TypeScript/issues/3841\n        let Constructor = this.constructor;\n        let collection = new Constructor();\n        collection.keyMap = new Map(this.keyMap);\n        collection.firstKey = this.firstKey;\n        collection.lastKey = this.lastKey;\n        collection.itemCount = this.itemCount;\n        return collection;\n    }\n    addNode(node) {\n        if (this.frozen) throw new Error('Cannot add a node to a frozen collection');\n        if (node.type === 'item' && this.keyMap.get(node.key) == null) this.itemCount++;\n        this.keyMap.set(node.key, node);\n    }\n    // Deeply add a node and its children to the collection from another collection, primarily used when filtering a collection\n    addDescendants(node, oldCollection) {\n        this.addNode(node);\n        let children = oldCollection.getChildren(node.key);\n        for (let child of children)this.addDescendants(child, oldCollection);\n    }\n    removeNode(key) {\n        if (this.frozen) throw new Error('Cannot remove a node to a frozen collection');\n        let node = this.keyMap.get(key);\n        if (node != null && node.type === 'item') this.itemCount--;\n        this.keyMap.delete(key);\n    }\n    commit(firstKey, lastKey, isSSR = false) {\n        if (this.frozen) throw new Error('Cannot commit a frozen collection');\n        this.firstKey = firstKey;\n        this.lastKey = lastKey;\n        this.frozen = !isSSR;\n    }\n    filter(filterFn) {\n        let newCollection = new this.constructor();\n        let [firstKey, lastKey] = $6f0c29017aeec335$var$filterChildren(this, newCollection, this.firstKey, filterFn);\n        newCollection?.commit(firstKey, lastKey);\n        return newCollection;\n    }\n    constructor(){\n        this.keyMap = new Map();\n        this.firstKey = null;\n        this.lastKey = null;\n        this.frozen = false;\n        this.itemCount = 0;\n    }\n}\nfunction $6f0c29017aeec335$var$filterChildren(collection, newCollection, firstChildKey, filterFn) {\n    // loop over the siblings for firstChildKey\n    // create new nodes based on calling node.filter for each child\n    // if it returns null then don't include it, otherwise update its prev/next keys\n    // add them to the newCollection\n    if (firstChildKey == null) return [\n        null,\n        null\n    ];\n    let firstNode = null;\n    let lastNode = null;\n    let currentNode = collection.getItem(firstChildKey);\n    while(currentNode != null){\n        let newNode = currentNode.filter(collection, newCollection, filterFn);\n        if (newNode != null) {\n            newNode.nextKey = null;\n            if (lastNode) {\n                newNode.prevKey = lastNode.key;\n                lastNode.nextKey = newNode.key;\n            }\n            if (firstNode == null) firstNode = newNode;\n            newCollection.addNode(newNode);\n            lastNode = newNode;\n        }\n        currentNode = currentNode.nextKey != null ? collection.getItem(currentNode.nextKey) : null;\n    }\n    // TODO: this is pretty specific to dividers but doesn't feel like there is a good way to get around it since we only can know\n    // to filter the last separator in a collection only after performing a filter for the rest of the contents after it\n    // Its gross that it needs to live here, might be nice if somehow we could have this live in the separator code\n    if (lastNode && lastNode.type === 'separator') {\n        let prevKey = lastNode.prevKey;\n        newCollection.removeNode(lastNode.key);\n        if (prevKey != null) {\n            lastNode = newCollection.getItem(prevKey);\n            lastNode.nextKey = null;\n        } else lastNode = null;\n    }\n    return [\n        firstNode?.key ?? null,\n        lastNode?.key ?? null\n    ];\n}\n\n\nexport {$6f0c29017aeec335$export$d68d59712b04d9d1 as CollectionNode, $6f0c29017aeec335$export$b1918e978f1ee46f as FilterableNode, $6f0c29017aeec335$export$5ae2504e948afce5 as HeaderNode, $6f0c29017aeec335$export$8258a0665a675899 as LoaderNode, $6f0c29017aeec335$export$fd11f34e1d07f134 as ItemNode, $6f0c29017aeec335$export$437f11dc9b403b78 as SectionNode, $6f0c29017aeec335$export$408d25a4e12db025 as BaseCollection};\n//# sourceMappingURL=BaseCollection.mjs.map\n","/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ class $96ead35620b8fd36$export$410b0c854570d131 {\n    constructor(ownerDocument){\n        this._firstChild = null;\n        this._lastChild = null;\n        this._previousSibling = null;\n        this._nextSibling = null;\n        this._parentNode = null;\n        this._minInvalidChildIndex = null;\n        this.ownerDocument = ownerDocument;\n    }\n    *[Symbol.iterator]() {\n        let node = this.firstChild;\n        while(node){\n            yield node;\n            node = node.nextSibling;\n        }\n    }\n    get firstChild() {\n        return this._firstChild;\n    }\n    set firstChild(firstChild) {\n        this._firstChild = firstChild;\n        this.ownerDocument.markDirty(this);\n    }\n    get lastChild() {\n        return this._lastChild;\n    }\n    set lastChild(lastChild) {\n        this._lastChild = lastChild;\n        this.ownerDocument.markDirty(this);\n    }\n    get previousSibling() {\n        return this._previousSibling;\n    }\n    set previousSibling(previousSibling) {\n        this._previousSibling = previousSibling;\n        this.ownerDocument.markDirty(this);\n    }\n    get nextSibling() {\n        return this._nextSibling;\n    }\n    set nextSibling(nextSibling) {\n        this._nextSibling = nextSibling;\n        this.ownerDocument.markDirty(this);\n    }\n    get parentNode() {\n        return this._parentNode;\n    }\n    set parentNode(parentNode) {\n        this._parentNode = parentNode;\n        this.ownerDocument.markDirty(this);\n    }\n    get isConnected() {\n        return this.parentNode?.isConnected || false;\n    }\n    invalidateChildIndices(child) {\n        if (this._minInvalidChildIndex == null || !this._minInvalidChildIndex.isConnected || child.index < this._minInvalidChildIndex.index) {\n            this._minInvalidChildIndex = child;\n            this.ownerDocument.markDirty(this);\n        }\n    }\n    updateChildIndices() {\n        let node = this._minInvalidChildIndex;\n        while(node){\n            node.index = node.previousSibling ? node.previousSibling.index + 1 : 0;\n            node = node.nextSibling;\n        }\n        this._minInvalidChildIndex = null;\n    }\n    appendChild(child) {\n        if (child.parentNode) child.parentNode.removeChild(child);\n        if (this.firstChild == null) this.firstChild = child;\n        if (this.lastChild) {\n            this.lastChild.nextSibling = child;\n            child.index = this.lastChild.index + 1;\n            child.previousSibling = this.lastChild;\n        } else {\n            child.previousSibling = null;\n            child.index = 0;\n        }\n        child.parentNode = this;\n        child.nextSibling = null;\n        this.lastChild = child;\n        this.ownerDocument.markDirty(this);\n        if (this.isConnected) this.ownerDocument.queueUpdate();\n    }\n    insertBefore(newNode, referenceNode) {\n        if (referenceNode == null) return this.appendChild(newNode);\n        if (newNode.parentNode) newNode.parentNode.removeChild(newNode);\n        newNode.nextSibling = referenceNode;\n        newNode.previousSibling = referenceNode.previousSibling;\n        // Ensure that the newNode's index is less than that of the reference node so that\n        // invalidateChildIndices will properly use the newNode as the _minInvalidChildIndex, thus making sure\n        // we will properly update the indexes of all sibiling nodes after the newNode. The value here doesn't matter\n        // since updateChildIndices should calculate the proper indexes.\n        newNode.index = referenceNode.index - 1;\n        if (this.firstChild === referenceNode) this.firstChild = newNode;\n        else if (referenceNode.previousSibling) referenceNode.previousSibling.nextSibling = newNode;\n        referenceNode.previousSibling = newNode;\n        newNode.parentNode = referenceNode.parentNode;\n        this.invalidateChildIndices(newNode);\n        if (this.isConnected) this.ownerDocument.queueUpdate();\n    }\n    removeChild(child) {\n        if (child.parentNode !== this) return;\n        if (this._minInvalidChildIndex === child) this._minInvalidChildIndex = null;\n        if (child.nextSibling) {\n            this.invalidateChildIndices(child.nextSibling);\n            child.nextSibling.previousSibling = child.previousSibling;\n        }\n        if (child.previousSibling) child.previousSibling.nextSibling = child.nextSibling;\n        if (this.firstChild === child) this.firstChild = child.nextSibling;\n        if (this.lastChild === child) this.lastChild = child.previousSibling;\n        child.parentNode = null;\n        child.nextSibling = null;\n        child.previousSibling = null;\n        child.index = 0;\n        this.ownerDocument.markDirty(child);\n        if (this.isConnected) this.ownerDocument.queueUpdate();\n    }\n    addEventListener() {}\n    removeEventListener() {}\n    get previousVisibleSibling() {\n        let node = this.previousSibling;\n        while(node && node.isHidden)node = node.previousSibling;\n        return node;\n    }\n    get nextVisibleSibling() {\n        let node = this.nextSibling;\n        while(node && node.isHidden)node = node.nextSibling;\n        return node;\n    }\n    get firstVisibleChild() {\n        let node = this.firstChild;\n        while(node && node.isHidden)node = node.nextSibling;\n        return node;\n    }\n    get lastVisibleChild() {\n        let node = this.lastChild;\n        while(node && node.isHidden)node = node.previousSibling;\n        return node;\n    }\n}\nclass $96ead35620b8fd36$export$dc064fe9e59310fd extends $96ead35620b8fd36$export$410b0c854570d131 {\n    constructor(type, ownerDocument){\n        super(ownerDocument), this.nodeType = 8 // COMMENT_NODE (we'd use ELEMENT_NODE but React DevTools will fail to get its dimensions)\n        , this.isMutated = true, this._index = 0, this.isHidden = false;\n        this.node = null;\n    }\n    get index() {\n        return this._index;\n    }\n    set index(index) {\n        this._index = index;\n        this.ownerDocument.markDirty(this);\n    }\n    get level() {\n        if (this.parentNode instanceof $96ead35620b8fd36$export$dc064fe9e59310fd) return this.parentNode.level + (this.parentNode.node?.type === 'item' ? 1 : 0);\n        return 0;\n    }\n    /**\n   * Lazily gets a mutable instance of a Node. If the node has already\n   * been cloned during this update cycle, it just returns the existing one.\n   */ getMutableNode() {\n        if (this.node == null) return null;\n        if (!this.isMutated) {\n            this.node = this.node.clone();\n            this.isMutated = true;\n        }\n        this.ownerDocument.markDirty(this);\n        return this.node;\n    }\n    updateNode() {\n        let nextSibling = this.nextVisibleSibling;\n        let node = this.getMutableNode();\n        if (node == null) return;\n        node.index = this.index;\n        node.level = this.level;\n        node.parentKey = this.parentNode instanceof $96ead35620b8fd36$export$dc064fe9e59310fd ? this.parentNode.node?.key ?? null : null;\n        node.prevKey = this.previousVisibleSibling?.node?.key ?? null;\n        node.nextKey = nextSibling?.node?.key ?? null;\n        node.hasChildNodes = !!this.firstChild;\n        node.firstChildKey = this.firstVisibleChild?.node?.key ?? null;\n        node.lastChildKey = this.lastVisibleChild?.node?.key ?? null;\n        // Update the colIndex of sibling nodes if this node has a colSpan.\n        if ((node.colSpan != null || node.colIndex != null) && nextSibling) {\n            // This queues the next sibling for update, which means this happens recursively.\n            let nextColIndex = (node.colIndex ?? node.index) + (node.colSpan ?? 1);\n            if (nextSibling.node != null && nextColIndex !== nextSibling.node.colIndex) {\n                let siblingNode = nextSibling.getMutableNode();\n                siblingNode.colIndex = nextColIndex;\n            }\n        }\n    }\n    setProps(obj, ref, CollectionNodeClass, rendered, render) {\n        let node;\n        let { value: value1, textValue: textValue, id: id, ...props } = obj;\n        if (this.node == null) {\n            node = new CollectionNodeClass(id ?? `react-aria-${++this.ownerDocument.nodeId}`);\n            this.node = node;\n        } else node = this.getMutableNode();\n        props.ref = ref;\n        node.props = props;\n        node.rendered = rendered;\n        node.render = render;\n        node.value = value1;\n        if (obj['aria-label']) node['aria-label'] = obj['aria-label'];\n        node.textValue = textValue || (typeof props.children === 'string' ? props.children : '') || obj['aria-label'] || '';\n        if (id != null && id !== node.key) throw new Error('Cannot change the id of an item');\n        if (props.colSpan != null) node.colSpan = props.colSpan;\n        if (this.isConnected) this.ownerDocument.queueUpdate();\n    }\n    get style() {\n        // React sets display: none to hide elements during Suspense.\n        // We'll handle this by setting the element to hidden and invalidating\n        // its siblings/parent. Hidden elements remain in the Document, but\n        // are removed from the Collection.\n        let element = this;\n        return {\n            get display () {\n                return element.isHidden ? 'none' : '';\n            },\n            set display (value){\n                let isHidden = value === 'none';\n                if (element.isHidden !== isHidden) {\n                    // Mark parent node dirty if this element is currently the first or last visible child.\n                    if (element.parentNode?.firstVisibleChild === element || element.parentNode?.lastVisibleChild === element) element.ownerDocument.markDirty(element.parentNode);\n                    // Mark sibling visible elements dirty.\n                    let prev = element.previousVisibleSibling;\n                    let next = element.nextVisibleSibling;\n                    if (prev) element.ownerDocument.markDirty(prev);\n                    if (next) element.ownerDocument.markDirty(next);\n                    // Mark self dirty.\n                    element.isHidden = isHidden;\n                    element.ownerDocument.markDirty(element);\n                }\n            }\n        };\n    }\n    hasAttribute() {}\n    setAttribute() {}\n    setAttributeNS() {}\n    removeAttribute() {}\n}\nclass $96ead35620b8fd36$export$b34a105447964f9f extends $96ead35620b8fd36$export$410b0c854570d131 {\n    constructor(collection){\n        // @ts-ignore\n        super(null), this.nodeType = 11 // DOCUMENT_FRAGMENT_NODE\n        , this.ownerDocument = this, this.dirtyNodes = new Set(), this.isSSR = false, this.nodeId = 0, this.nodesByProps = new WeakMap(), this.keyOwners = new Map(), this.nextCollection = null, this.subscriptions = new Set(), this.queuedRender = false, this.inSubscription = false;\n        this.collection = collection;\n        this.nextCollection = collection;\n    }\n    get isConnected() {\n        return true;\n    }\n    createElement(type) {\n        return new $96ead35620b8fd36$export$dc064fe9e59310fd(type, this);\n    }\n    getMutableCollection() {\n        if (!this.nextCollection) this.nextCollection = this.collection.clone();\n        return this.nextCollection;\n    }\n    markDirty(node) {\n        this.dirtyNodes.add(node);\n    }\n    addNode(element) {\n        if (element.isHidden || element.node == null) return;\n        if (process.env.NODE_ENV !== 'production') {\n            // Two elements with the same key would corrupt the linked list of sibling keys, which\n            // silently drops items or makes key traversal loop forever. Removed and hidden elements\n            // release their key in removeNode before any node is added, so a different owner here\n            // is a live duplicate.\n            let key = element.node.key;\n            let owner = this.keyOwners.get(key);\n            if (owner && owner !== element) throw new Error(`Duplicate key \"${String(key)}\" found in collection. Every item in a collection must have a unique key.`);\n            this.keyOwners.set(key, element);\n        }\n        let collection = this.getMutableCollection();\n        if (!collection.getItem(element.node.key)) for (let child of element)this.addNode(child);\n        collection.addNode(element.node);\n    }\n    removeNode(node) {\n        for (let child of node)this.removeNode(child);\n        if (node.node) {\n            let collection = this.getMutableCollection();\n            collection.removeNode(node.node.key);\n            if (process.env.NODE_ENV !== 'production' && this.keyOwners.get(node.node.key) === node) this.keyOwners.delete(node.node.key);\n        }\n    }\n    /** Finalizes the collection update, updating all nodes and freezing the collection. */ getCollection() {\n        // If in a subscription update, return return the existing collection.\n        // React will call getCollection again during render, at which point all the updates will be complete.\n        if (this.inSubscription) return this.collection;\n        // Reset queuedRender to false when getCollection is called during render.\n        this.queuedRender = false;\n        this.updateCollection();\n        return this.collection;\n    }\n    updateCollection() {\n        // First, remove disconnected nodes and update the indices of dirty element children.\n        for (let element of this.dirtyNodes)if (element instanceof $96ead35620b8fd36$export$dc064fe9e59310fd && (!element.isConnected || element.isHidden)) this.removeNode(element);\n        else element.updateChildIndices();\n        // Next, update dirty collection nodes.\n        for (let element of this.dirtyNodes)if (element instanceof $96ead35620b8fd36$export$dc064fe9e59310fd) {\n            if (element.isConnected && !element.isHidden) {\n                element.updateNode();\n                this.addNode(element);\n            }\n            if (element.node) this.dirtyNodes.delete(element);\n            element.isMutated = false;\n        } else this.dirtyNodes.delete(element);\n        // Finally, update the collection.\n        if (this.nextCollection) {\n            this.nextCollection.commit(this.firstVisibleChild?.node?.key ?? null, this.lastVisibleChild?.node?.key ?? null, this.isSSR);\n            if (!this.isSSR) {\n                this.collection = this.nextCollection;\n                this.nextCollection = null;\n            }\n        }\n    }\n    queueUpdate() {\n        if (this.dirtyNodes.size === 0 || this.queuedRender) return;\n        // Only trigger subscriptions once during an update, when the first item changes.\n        // React's useSyncExternalStore will call getCollection immediately, to check whether the snapshot changed.\n        // If so, React will queue a render to happen after the current commit to our fake DOM finishes.\n        // We track whether getCollection is called in a subscription, and once it is called during render,\n        // we reset queuedRender back to false.\n        this.queuedRender = true;\n        this.inSubscription = true;\n        // Clone the collection to ensure that React queues a render. It will call getCollection again\n        // during render, at which point all the updates will be complete and we can return\n        // the new collection.\n        if (!this.isSSR) this.collection = this.collection.clone();\n        for (let fn of this.subscriptions)fn();\n        this.inSubscription = false;\n    }\n    subscribe(fn) {\n        this.subscriptions.add(fn);\n        // Ensure that React reads the collection if we re-subscribe after updates were\n        // already queued. When a hidden Activity is revealed, child nodes re-attach and call\n        // queueUpdate before we can re-subscribe, so the notification is lost.\n        if (this.queuedRender) fn();\n        return ()=>this.subscriptions.delete(fn);\n    }\n    resetAfterSSR() {\n        if (this.isSSR) {\n            this.isSSR = false;\n            this.firstChild = null;\n            this.lastChild = null;\n            this.nodeId = 0;\n            this.keyOwners.clear();\n        }\n    }\n}\n\n\nexport {$96ead35620b8fd36$export$410b0c854570d131 as BaseNode, $96ead35620b8fd36$export$dc064fe9e59310fd as ElementNode, $96ead35620b8fd36$export$b34a105447964f9f as Document};\n//# sourceMappingURL=Document.mjs.map\n","import {useMemo as $2NO26$useMemo, cloneElement as $2NO26$cloneElement} from \"react\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $a80bd3e9349588e7$export$727c8fc270210f13(props) {\n    let { children: children, items: items, idScope: idScope, addIdAndValue: addIdAndValue, dependencies: dependencies = [] } = props;\n    // In development, invalidate when the children function updates (e.g. HMR).\n    let childrenString = (0, $2NO26$useMemo)(()=>process.env.NODE_ENV !== 'production' && typeof children === 'function' ? children.toString() : undefined, [\n        children\n    ]);\n    // Invalidate the cache whenever dependencies change.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    // oxlint-disable-next-line react/react-compiler, react-hooks/exhaustive-deps\n    let cache = (0, $2NO26$useMemo)(()=>new WeakMap(), [\n        ...dependencies,\n        childrenString\n    ]);\n    return (0, $2NO26$useMemo)(()=>{\n        if (items && typeof children === 'function') {\n            let res = [];\n            for (let item of items){\n                let cacheKey = $a80bd3e9349588e7$var$isWeakKey(item) ? item : null;\n                let rendered = cacheKey ? cache.get(cacheKey) : null;\n                if (!rendered) {\n                    rendered = children(item);\n                    // @ts-ignore\n                    let id = rendered.props.id ?? item?.key ?? item?.id;\n                    if (idScope != null && rendered.props.id == null && id != null) id = idScope + ':' + id;\n                    // If no id is inferred from data, use the index as the React key.\n                    // An id will be generated by the collection document.\n                    let key = id ?? res.length;\n                    // Note: only works if wrapped Item passes through id...\n                    rendered = (0, $2NO26$cloneElement)(rendered, addIdAndValue ? {\n                        key: key,\n                        id: id,\n                        value: item\n                    } : {\n                        key: key\n                    });\n                    if (cacheKey) cache.set(cacheKey, rendered);\n                }\n                res.push(rendered);\n            }\n            return res;\n        } else if (typeof children !== 'function') return children;\n    }, [\n        children,\n        items,\n        cache,\n        idScope,\n        addIdAndValue\n    ]);\n}\nfunction $a80bd3e9349588e7$var$isWeakKey(value) {\n    switch(typeof value){\n        case 'object':\n            return value != null;\n        case 'function':\n        case 'symbol':\n            return true;\n        default:\n            return false;\n    }\n}\n\n\nexport {$a80bd3e9349588e7$export$727c8fc270210f13 as useCachedChildren};\n//# sourceMappingURL=useCachedChildren.mjs.map\n","import {addEvent as $d447af545b77c9f1$export$f531f92e2a15358f} from \"./domHelpers.mjs\";\nimport {getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29} from \"./shadowdom/DOMFunctions.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n// We store a global list of elements that are currently transitioning,\n// mapped to a set of CSS properties that are transitioning for that element.\n// This is necessary rather than a simple count of transitions because of browser\n// bugs, e.g. Chrome sometimes fires both transitionend and transitioncancel rather\n// than one or the other. So we need to track what's actually transitioning so that\n// we can ignore these duplicate events.\nconst $081cb5757e08788e$var$transitionsByElement = new Map();\nconst $081cb5757e08788e$var$transitionCallbacks = new Set();\nfunction $081cb5757e08788e$var$isTransitionEvent(event) {\n    return 'propertyName' in event;\n}\nfunction $081cb5757e08788e$var$onTransitionStart(e) {\n    let eventTarget = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n    if (!$081cb5757e08788e$var$isTransitionEvent(e) || !eventTarget) return;\n    // Add the transitioning property to the list for this element.\n    let transitions = $081cb5757e08788e$var$transitionsByElement.get(eventTarget);\n    if (!transitions) {\n        transitions = new Set();\n        $081cb5757e08788e$var$transitionsByElement.set(eventTarget, transitions);\n        // The transitioncancel event must be registered on the element itself, rather than as a global\n        // event. This enables us to handle when the node is deleted from the document while it is transitioning.\n        // In that case, the cancel event would have nowhere to bubble to so we need to handle it directly.\n        eventTarget.addEventListener('transitioncancel', $081cb5757e08788e$var$onTransitionEnd, {\n            once: true\n        });\n    }\n    transitions.add(e.propertyName);\n}\nfunction $081cb5757e08788e$var$onTransitionEnd(e) {\n    let eventTarget = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n    if (!$081cb5757e08788e$var$isTransitionEvent(e) || !eventTarget) return;\n    // Remove property from list of transitioning properties.\n    let properties = $081cb5757e08788e$var$transitionsByElement.get(eventTarget);\n    if (!properties) return;\n    properties.delete(e.propertyName);\n    // If empty, remove transitioncancel event, and remove the element from the list of transitioning elements.\n    if (properties.size === 0) {\n        eventTarget.removeEventListener('transitioncancel', $081cb5757e08788e$var$onTransitionEnd);\n        $081cb5757e08788e$var$transitionsByElement.delete(eventTarget);\n    }\n    // If no transitioning elements, call all of the queued callbacks.\n    if ($081cb5757e08788e$var$transitionsByElement.size === 0) for (let callback of $081cb5757e08788e$var$transitionCallbacks){\n        callback(true);\n        $081cb5757e08788e$var$transitionCallbacks.delete(callback);\n    }\n}\nfunction $081cb5757e08788e$var$setupGlobalEvents() {\n    (0, $d447af545b77c9f1$export$f531f92e2a15358f)(document, 'transitionrun', $081cb5757e08788e$var$onTransitionStart);\n    (0, $d447af545b77c9f1$export$f531f92e2a15358f)(document, 'transitionend', $081cb5757e08788e$var$onTransitionEnd);\n}\n/**\n * Cleans up any elements that are no longer in the document.\n * This is necessary because we can't rely on transitionend events to fire\n * for elements that are removed from the document while transitioning.\n */ function $081cb5757e08788e$var$cleanupDetachedElements() {\n    for (const [eventTarget] of $081cb5757e08788e$var$transitionsByElement)// Similar to `eventTarget instanceof Element && !eventTarget.isConnected`, but avoids\n    // the explicit instanceof check, since it may be different in different contexts.\n    if ('isConnected' in eventTarget && !eventTarget.isConnected) $081cb5757e08788e$var$transitionsByElement.delete(eventTarget);\n}\nif (typeof document !== 'undefined') {\n    if (document.readyState !== 'loading') $081cb5757e08788e$var$setupGlobalEvents();\n    else (0, $d447af545b77c9f1$export$f531f92e2a15358f)(document, 'DOMContentLoaded', $081cb5757e08788e$var$setupGlobalEvents);\n}\nfunction $081cb5757e08788e$export$24490316f764c430(fn) {\n    // Wait one frame to see if an animation starts, e.g. a transition on mount.\n    let frame = window.requestAnimationFrame(()=>{\n        $081cb5757e08788e$var$cleanupDetachedElements();\n        // If no transitions are running, call the function immediately.\n        // Otherwise, add it to a list of callbacks to run at the end of the animation.\n        if ($081cb5757e08788e$var$transitionsByElement.size === 0) return fn(false);\n        $081cb5757e08788e$var$transitionCallbacks.add(fn);\n    });\n    return ()=>{\n        window.cancelAnimationFrame(frame);\n        $081cb5757e08788e$var$transitionCallbacks.delete(fn);\n    };\n}\n\n\nexport {$081cb5757e08788e$export$24490316f764c430 as runAfterTransition};\n//# sourceMappingURL=runAfterTransition.mjs.map\n","import {focusWithoutScrolling as $1969ac565cfec8d0$export$de79e2c695e052f3} from \"../utils/focusWithoutScrolling.mjs\";\nimport {getActiveElement as $23f2114a1b82827e$export$cd4e5573fbe2b576} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {getInteractionModality as $8f5a2122b0992be3$export$630ff653c5ada6a9} from \"./useFocusVisible.mjs\";\nimport {getOwnerDocument as $d447af545b77c9f1$export$b204af158042fbac} from \"../utils/domHelpers.mjs\";\nimport {runAfterTransition as $081cb5757e08788e$export$24490316f764c430} from \"../utils/runAfterTransition.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nfunction $f192c2f16961cbe0$export$80f3e147d781571c(element) {\n    if (!element.isConnected) return;\n    // If the user is interacting with a virtual cursor, e.g. screen reader, then\n    // wait until after any animated transitions that are currently occurring on\n    // the page before shifting focus. This avoids issues with VoiceOver on iOS\n    // causing the page to scroll when moving focus if the element is transitioning\n    // from off the screen.\n    const ownerDocument = (0, $d447af545b77c9f1$export$b204af158042fbac)(element);\n    if ((0, $8f5a2122b0992be3$export$630ff653c5ada6a9)() === 'virtual') {\n        let lastFocusedElement = (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)(ownerDocument);\n        (0, $081cb5757e08788e$export$24490316f764c430)(()=>{\n            const activeElement = (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)(ownerDocument);\n            // If focus did not move or focus was lost to the body, and the element is still in the document, focus it.\n            if ((activeElement === lastFocusedElement || activeElement === ownerDocument.body) && element.isConnected) (0, $1969ac565cfec8d0$export$de79e2c695e052f3)(element);\n        });\n    } else (0, $1969ac565cfec8d0$export$de79e2c695e052f3)(element);\n}\n\n\nexport {$f192c2f16961cbe0$export$80f3e147d781571c as focusSafely};\n//# sourceMappingURL=focusSafely.mjs.map\n","import {getActiveElement as $23f2114a1b82827e$export$cd4e5573fbe2b576, getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {getOwnerDocument as $d447af545b77c9f1$export$b204af158042fbac} from \"../utils/domHelpers.mjs\";\nimport {useSyntheticBlurEvent as $a92dc41f639950be$export$715c682d09d639cc} from \"./utils.mjs\";\nimport {useCallback as $3siB1$useCallback} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\n\n\nfunction $1e74c67db218ce67$export$f8168d8dd8fd66e6(props) {\n    let { isDisabled: isDisabled, onFocus: onFocusProp, onBlur: onBlurProp, onFocusChange: onFocusChange } = props;\n    const onBlur = (0, $3siB1$useCallback)((e)=>{\n        if ((0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e) === e.currentTarget) {\n            if (onBlurProp) onBlurProp(e);\n            if (onFocusChange) onFocusChange(false);\n            return true;\n        }\n    }, [\n        onBlurProp,\n        onFocusChange\n    ]);\n    const onSyntheticFocus = (0, $a92dc41f639950be$export$715c682d09d639cc)(onBlur);\n    const onFocus = (0, $3siB1$useCallback)((e)=>{\n        // Double check that document.activeElement actually matches e.target in case a previously chained\n        // focus handler already moved focus somewhere else.\n        let eventTarget = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n        const ownerDocument = (0, $d447af545b77c9f1$export$b204af158042fbac)(eventTarget);\n        const activeElement = ownerDocument ? (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)(ownerDocument) : (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)();\n        if (eventTarget === e.currentTarget && eventTarget === activeElement) {\n            if (onFocusProp) onFocusProp(e);\n            if (onFocusChange) onFocusChange(true);\n            onSyntheticFocus(e);\n        }\n    }, [\n        onFocusChange,\n        onFocusProp,\n        onSyntheticFocus\n    ]);\n    return {\n        focusProps: {\n            onFocus: !isDisabled && (onFocusProp || onFocusChange || onBlurProp) ? onFocus : undefined,\n            onBlur: !isDisabled && (onBlurProp || onFocusChange) ? onBlur : undefined\n        }\n    };\n}\n\n\nexport {$1e74c67db218ce67$export$f8168d8dd8fd66e6 as useFocus};\n//# sourceMappingURL=useFocus.mjs.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $8dba16319206abb6$export$48d1ea6320830260(handler) {\n    if (!handler) return undefined;\n    return (e)=>{\n        let shouldStopPropagation = true;\n        let event = {\n            ...e,\n            preventDefault () {\n                e.preventDefault();\n            },\n            isDefaultPrevented () {\n                return e.isDefaultPrevented();\n            },\n            stopPropagation () {\n                if (shouldStopPropagation && process.env.NODE_ENV !== 'production') console.error('stopPropagation is now the default behavior for events in React Spectrum. You can use continuePropagation() to revert this behavior.');\n                else shouldStopPropagation = true;\n            },\n            continuePropagation () {\n                shouldStopPropagation = false;\n                // nested createEventHandler might have set continue propagation so we should continue\n                // propagation on wrappers\n                if (typeof e.continuePropagation === 'function') e.continuePropagation();\n            },\n            isPropagationStopped () {\n                return shouldStopPropagation;\n            }\n        };\n        handler(event);\n        // nested createEventHandler calls may already have stopped propagation\n        if (shouldStopPropagation && !(typeof e.isPropagationStopped === 'function' && e.isPropagationStopped())) e.stopPropagation();\n    };\n}\n\n\nexport {$8dba16319206abb6$export$48d1ea6320830260 as createEventHandler};\n//# sourceMappingURL=createEventHandler.mjs.map\n","import {isMac as $2add3ce32c6007eb$export$9ac100e40613ea10} from \"../utils/platform.mjs\";\n\n/*\n * Copyright 2025 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n/** Modifier names in shortcut strings (case-insensitive). Order in the string does not matter. */ const $cbf729ad7eb217b0$var$MODIFIER_NAMES = new Set([\n    'shift',\n    'alt',\n    'control',\n    'meta',\n    'mod' // OS dependent - Cmd on Mac, Control on Windows/Linux\n]);\n/** Canonical modifier order for stable keys (sorted, fixed order). */ const $cbf729ad7eb217b0$var$CANONICAL_MODIFIER_ORDER = [\n    'Alt',\n    'Control',\n    'Meta',\n    'Shift'\n];\nfunction $cbf729ad7eb217b0$export$9932402e211e7315(parsed) {\n    let set = new Set();\n    if (parsed.alt) set.add('Alt');\n    if (parsed.shift) set.add('Shift');\n    if (parsed.ctrl) set.add('Control');\n    if (parsed.meta) set.add('Meta');\n    if (parsed.mod) set.add((0, $2add3ce32c6007eb$export$9ac100e40613ea10)() ? 'Meta' : 'Control');\n    return set;\n}\nfunction $cbf729ad7eb217b0$export$bf26c410e1f8fe6d(e) {\n    let set = new Set();\n    if (e.altKey) set.add('Alt');\n    if (e.ctrlKey) set.add('Control');\n    if (e.metaKey) set.add('Meta');\n    if (e.shiftKey) set.add('Shift');\n    return set;\n}\nfunction $cbf729ad7eb217b0$var$sortedModifierTokens(set) {\n    return $cbf729ad7eb217b0$var$CANONICAL_MODIFIER_ORDER.filter((name)=>set.has(name));\n}\nfunction $cbf729ad7eb217b0$export$d636f01a2eaffd51(spec) {\n    let parts = spec.split('+').reduce((prev, part)=>{\n        let lower = part.toLowerCase();\n        if ($cbf729ad7eb217b0$var$MODIFIER_NAMES.has(lower)) {\n            if (lower === 'shift') prev.shift = true;\n            else if (lower === 'alt') prev.alt = true;\n            else if (lower === 'control') prev.ctrl = true;\n            else if (lower === 'meta') prev.meta = true;\n            else if (lower === 'mod') prev.mod = true;\n        } else prev.key = part;\n        return prev;\n    }, {\n        shift: false,\n        alt: false,\n        ctrl: false,\n        meta: false,\n        mod: false,\n        key: ''\n    });\n    if (parts.key === '') throw new Error(`Invalid keyboard shortcut: \"${spec}\". Must include exactly one non-modifier key (e.g. \"a\", \"Enter\", \"ArrowDown\"). Combine any of Shift, Alt, Ctrl, Meta, and Mod.`);\n    return parts;\n}\nfunction $cbf729ad7eb217b0$var$normalizeEventKey(key) {\n    return key.toLowerCase();\n}\n/** Short aliases for common keys (shortcut side, before match). */ const $cbf729ad7eb217b0$var$KEY_ALIASES = {\n    space: ' ',\n    esc: 'escape',\n    del: 'delete',\n    ins: 'insert',\n    left: 'arrowleft',\n    right: 'arrowright',\n    up: 'arrowup',\n    down: 'arrowdown',\n    pageup: 'pageup',\n    pagedown: 'pagedown'\n};\n/** Canonical key segment (lowercase); aliases like `down` → `arrowdown`. */ function $cbf729ad7eb217b0$var$canonicalKeyFromSpecKey(specKey) {\n    let k = $cbf729ad7eb217b0$var$normalizeEventKey(specKey);\n    let aliased = $cbf729ad7eb217b0$var$KEY_ALIASES[k];\n    return aliased != null ? aliased : k;\n}\nfunction $cbf729ad7eb217b0$export$6cfa2ace150c84a5(parsed) {\n    let mods = $cbf729ad7eb217b0$var$sortedModifierTokens($cbf729ad7eb217b0$export$9932402e211e7315(parsed));\n    let key = $cbf729ad7eb217b0$var$canonicalKeyFromSpecKey(parsed.key);\n    return mods.length > 0 ? `${mods.join('+')}+${key}` : key;\n}\nfunction $cbf729ad7eb217b0$export$786304bda41dd69f(e) {\n    let mods = $cbf729ad7eb217b0$var$sortedModifierTokens($cbf729ad7eb217b0$export$bf26c410e1f8fe6d(e));\n    let key = $cbf729ad7eb217b0$var$normalizeEventKey(e.key);\n    let prefix = mods.length > 0 ? `${mods.join('+')}+` : '';\n    return prefix + key;\n}\nfunction $cbf729ad7eb217b0$export$2fd1fc8039383ae1(bindings) {\n    let map = new Map();\n    for (let [spec, action] of Object.entries(bindings)){\n        let parsed = $cbf729ad7eb217b0$export$d636f01a2eaffd51(spec);\n        map.set($cbf729ad7eb217b0$export$6cfa2ace150c84a5(parsed), action);\n    }\n    return (e)=>{\n        let canonical = $cbf729ad7eb217b0$export$786304bda41dd69f(e);\n        let action = map.get(canonical);\n        let result = action?.(e);\n        if (result === undefined && action !== undefined) result = {\n            shouldContinuePropagation: false,\n            shouldPreventDefault: true\n        };\n        else if (typeof result === 'boolean') result = {\n            shouldContinuePropagation: !result,\n            shouldPreventDefault: result\n        };\n        if (result?.shouldPreventDefault) e.preventDefault();\n        if (!action || result?.shouldContinuePropagation) e.continuePropagation();\n    };\n}\n\n\nexport {$cbf729ad7eb217b0$export$9932402e211e7315 as modifierSetFromParsed, $cbf729ad7eb217b0$export$bf26c410e1f8fe6d as modifierSetFromEvent, $cbf729ad7eb217b0$export$d636f01a2eaffd51 as parseKeyboardShortcut, $cbf729ad7eb217b0$export$6cfa2ace150c84a5 as canonicalKeyboardShortcut, $cbf729ad7eb217b0$export$786304bda41dd69f as keyboardEventToCanonicalShortcut, $cbf729ad7eb217b0$export$2fd1fc8039383ae1 as createKeyboardShortcutHandler};\n//# sourceMappingURL=createKeyboardShortcutHandler.mjs.map\n","import {chain as $a4e76a5424781910$export$e08e3b67e392101e} from \"../utils/chain.mjs\";\nimport {createEventHandler as $8dba16319206abb6$export$48d1ea6320830260} from \"./createEventHandler.mjs\";\nimport {createKeyboardShortcutHandler as $cbf729ad7eb217b0$export$2fd1fc8039383ae1} from \"./createKeyboardShortcutHandler.mjs\";\nimport {getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29, nodeContains as $23f2114a1b82827e$export$4282f70798064fe0} from \"../utils/shadowdom/DOMFunctions.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nfunction $8296dad1a4c5e0dc$export$8f71654801c2f7cd(props) {\n    let { shortcuts: shortcuts, allowRepeats: allowRepeats = false, allowComposing: allowComposing = false } = props;\n    let onKeyDown;\n    let onKeyUp;\n    if (shortcuts) {\n        let shortcutHandler = (0, $cbf729ad7eb217b0$export$2fd1fc8039383ae1)(shortcuts);\n        let shortcutOnKeyDown = (0, $8dba16319206abb6$export$48d1ea6320830260)((e)=>{\n            // If keyboard event didn't originate from a child of the current target,\n            // then it's a React event coming through a portal. We should ignore it.\n            if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) {\n                e.continuePropagation();\n                return;\n            }\n            if (e.nativeEvent?.repeat && !allowRepeats || e.nativeEvent?.isComposing && !allowComposing) {\n                e.continuePropagation();\n                return;\n            }\n            shortcutHandler(e);\n        });\n        let shortcutOnKeyUp = (0, $8dba16319206abb6$export$48d1ea6320830260)((e)=>{\n            // If keyboard event didn't originate from a child of the current target,\n            // then it's a React event coming through a portal. We should ignore it.\n            if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) {\n                e.continuePropagation();\n                return;\n            }\n            if (e.nativeEvent?.repeat && !allowRepeats || e.nativeEvent?.isComposing && !allowComposing) {\n                e.continuePropagation();\n                return;\n            }\n            // implement shortcut handler on keyup, what should the map be called? or should it be another syntax on shortcuts?\n            e.continuePropagation();\n        });\n        onKeyDown = props.onKeyDown ? (0, $a4e76a5424781910$export$e08e3b67e392101e)(props.onKeyDown, shortcutOnKeyDown) : shortcutOnKeyDown;\n        onKeyUp = props.onKeyUp ? (0, $a4e76a5424781910$export$e08e3b67e392101e)(props.onKeyUp, shortcutOnKeyUp) : shortcutOnKeyUp;\n    } else {\n        onKeyDown = (0, $8dba16319206abb6$export$48d1ea6320830260)(props.onKeyDown);\n        onKeyUp = (0, $8dba16319206abb6$export$48d1ea6320830260)(props.onKeyUp);\n    }\n    return {\n        keyboardProps: props.isDisabled ? {} : {\n            onKeyDown: onKeyDown,\n            onKeyUp: onKeyUp\n        }\n    };\n}\n\n\nexport {$8296dad1a4c5e0dc$export$8f71654801c2f7cd as useKeyboard};\n//# sourceMappingURL=useKeyboard.mjs.map\n","import {useLayoutEffect as $c4867b2f328c2698$export$e5c5a5f917a5871c} from \"./useLayoutEffect.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $b7115c395c64f7b5$export$4debdb1a3f0fa79e(context, ref) {\n    // oxlint-disable-next-line react/react-compiler\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        if (context && context.ref && ref) {\n            // oxlint-disable-next-line react/react-compiler\n            context.ref.current = ref.current;\n            return ()=>{\n                if (context.ref) // oxlint-disable-next-line react-hooks/exhaustive-deps\n                context.ref.current = null;\n            };\n        }\n    });\n}\n\n\nexport {$b7115c395c64f7b5$export$4debdb1a3f0fa79e as useSyncRef};\n//# sourceMappingURL=useSyncRef.mjs.map\n","import {focusSafely as $f192c2f16961cbe0$export$80f3e147d781571c} from \"./focusSafely.mjs\";\nimport {getOwnerWindow as $d447af545b77c9f1$export$f21a1ffae260145a} from \"../utils/domHelpers.mjs\";\nimport {isFocusable as $3b8b240c1bf84ab9$export$4c063cf1350e6fed} from \"../utils/isFocusable.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {mergeRefs as $4064df0d6f9620e1$export$c9058316764c140e} from \"../utils/mergeRefs.mjs\";\nimport {useFocus as $1e74c67db218ce67$export$f8168d8dd8fd66e6} from \"./useFocus.mjs\";\nimport {useKeyboard as $8296dad1a4c5e0dc$export$8f71654801c2f7cd} from \"./useKeyboard.mjs\";\nimport {useObjectRef as $03e8ab2d84d7657a$export$4338b53315abf666} from \"../utils/useObjectRef.mjs\";\nimport {useSyncRef as $b7115c395c64f7b5$export$4debdb1a3f0fa79e} from \"../utils/useSyncRef.mjs\";\nimport $fKWKs$react, {useContext as $fKWKs$useContext, useRef as $fKWKs$useRef, useEffect as $fKWKs$useEffect, forwardRef as $fKWKs$forwardRef} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\nlet $d1116acdf220c2da$export$f9762fab77588ecb = /*#__PURE__*/ (0, $fKWKs$react).createContext(null);\nfunction $d1116acdf220c2da$var$useFocusableContext(ref) {\n    let context = (0, $fKWKs$useContext)($d1116acdf220c2da$export$f9762fab77588ecb) || {};\n    (0, $b7115c395c64f7b5$export$4debdb1a3f0fa79e)(context, ref);\n    // eslint-disable-next-line\n    let { ref: _, ...otherProps } = context;\n    return otherProps;\n}\nconst $d1116acdf220c2da$export$13f3202a3e5ddd5 = /*#__PURE__*/ (0, $fKWKs$react).forwardRef(function FocusableProvider(props, ref) {\n    let { children: children, ...otherProps } = props;\n    let objRef = (0, $03e8ab2d84d7657a$export$4338b53315abf666)(ref);\n    let context = {\n        ...otherProps,\n        ref: objRef\n    };\n    return /*#__PURE__*/ (0, $fKWKs$react).createElement($d1116acdf220c2da$export$f9762fab77588ecb.Provider, {\n        value: context\n    }, children);\n});\nfunction $d1116acdf220c2da$export$4c014de7c8940b4c(props, domRef) {\n    let { focusProps: focusProps } = (0, $1e74c67db218ce67$export$f8168d8dd8fd66e6)(props);\n    let { keyboardProps: keyboardProps } = (0, $8296dad1a4c5e0dc$export$8f71654801c2f7cd)(props);\n    let interactions = (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(focusProps, keyboardProps);\n    let domProps = $d1116acdf220c2da$var$useFocusableContext(domRef);\n    let interactionProps = props.isDisabled ? {} : domProps;\n    let autoFocusRef = (0, $fKWKs$useRef)(props.autoFocus);\n    (0, $fKWKs$useEffect)(()=>{\n        if (autoFocusRef.current && domRef.current) (0, $f192c2f16961cbe0$export$80f3e147d781571c)(domRef.current);\n        autoFocusRef.current = false;\n    }, [\n        domRef\n    ]);\n    // Always set a tabIndex so that Safari allows focusing native buttons and inputs.\n    let tabIndex = props.excludeFromTabOrder ? -1 : 0;\n    if (props.isDisabled) tabIndex = undefined;\n    return {\n        focusableProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)({\n            ...interactions,\n            tabIndex: tabIndex\n        }, interactionProps)\n    };\n}\nconst $d1116acdf220c2da$export$35a3bebf7ef2d934 = /*#__PURE__*/ (0, $fKWKs$forwardRef)(({ children: children, ...props }, ref)=>{\n    ref = (0, $03e8ab2d84d7657a$export$4338b53315abf666)(ref);\n    let { focusableProps: focusableProps } = $d1116acdf220c2da$export$4c014de7c8940b4c(props, ref);\n    let child = (0, $fKWKs$react).Children.only(children);\n    (0, $fKWKs$useEffect)(()=>{\n        if (process.env.NODE_ENV === 'production') return;\n        let el = ref.current;\n        if (!el || !(el instanceof (0, $d447af545b77c9f1$export$f21a1ffae260145a)(el).Element)) {\n            console.error('<Focusable> child must forward its ref to a DOM element.');\n            return;\n        }\n        if (!props.isDisabled && !(0, $3b8b240c1bf84ab9$export$4c063cf1350e6fed)(el, {\n            skipVisibilityCheck: true\n        })) {\n            console.warn('<Focusable> child must be focusable. Please ensure the tabIndex prop is passed through.');\n            return;\n        }\n        if (el.localName !== 'button' && el.localName !== 'input' && el.localName !== 'select' && el.localName !== 'textarea' && el.localName !== 'a' && el.localName !== 'area' && el.localName !== 'summary' && el.localName !== 'img' && el.localName !== 'svg') {\n            let role = el.getAttribute('role');\n            if (!role) console.warn('<Focusable> child must have an interactive ARIA role.');\n            else if (// https://w3c.github.io/aria/#widget_roles\n            role !== 'application' && role !== 'button' && role !== 'checkbox' && role !== 'combobox' && role !== 'gridcell' && role !== 'link' && role !== 'menuitem' && role !== 'menuitemcheckbox' && role !== 'menuitemradio' && role !== 'option' && role !== 'radio' && role !== 'searchbox' && role !== 'separator' && role !== 'slider' && role !== 'spinbutton' && role !== 'switch' && role !== 'tab' && role !== 'tabpanel' && role !== 'textbox' && role !== 'treeitem' && // aria-describedby is also announced on these roles\n            role !== 'img' && role !== 'meter' && role !== 'progressbar') console.warn(`<Focusable> child must have an interactive ARIA role. Got \"${role}\".`);\n        }\n    }, [\n        ref,\n        props.isDisabled\n    ]);\n    // @ts-ignore\n    let childRef = parseInt((0, $fKWKs$react).version, 10) < 19 ? child.ref : child.props.ref;\n    return /*#__PURE__*/ (0, $fKWKs$react).cloneElement(child, {\n        ...(0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(focusableProps, child.props),\n        // @ts-ignore\n        // oxlint-disable-next-line react/react-compiler\n        ref: (0, $4064df0d6f9620e1$export$c9058316764c140e)(childRef, ref)\n    });\n});\n\n\nexport {$d1116acdf220c2da$export$f9762fab77588ecb as FocusableContext, $d1116acdf220c2da$export$13f3202a3e5ddd5 as FocusableProvider, $d1116acdf220c2da$export$4c014de7c8940b4c as useFocusable, $d1116acdf220c2da$export$35a3bebf7ef2d934 as Focusable};\n//# sourceMappingURL=useFocusable.mjs.map\n","import $iuCOg$react, {createContext as $iuCOg$createContext, useContext as $iuCOg$useContext, forwardRef as $iuCOg$forwardRef} from \"react\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n// React doesn't understand the <template> element, which doesn't have children like a normal element.\n// It will throw an error during hydration when it expects the firstChild to contain content rendered\n// on the server, when in reality, the browser will have placed this inside the `content` document fragment.\n// This monkey patches the firstChild property for our special hidden template elements to work around this error.\n// does the same for appendChild/removeChild/insertBefore as per the issue below\n// See https://github.com/facebook/react/issues/19932\nif (typeof HTMLTemplateElement !== 'undefined') {\n    Object.defineProperty(HTMLTemplateElement.prototype, 'firstChild', {\n        configurable: true,\n        enumerable: true,\n        get: function() {\n            return this.content.firstChild;\n        }\n    });\n    Object.defineProperty(HTMLTemplateElement.prototype, 'appendChild', {\n        configurable: true,\n        enumerable: true,\n        value: function(node) {\n            return this.content.appendChild(node);\n        }\n    });\n    Object.defineProperty(HTMLTemplateElement.prototype, 'removeChild', {\n        configurable: true,\n        enumerable: true,\n        value: function(node) {\n            return this.content.removeChild(node);\n        }\n    });\n    Object.defineProperty(HTMLTemplateElement.prototype, 'insertBefore', {\n        configurable: true,\n        enumerable: true,\n        value: function(node, child) {\n            return this.content.insertBefore(node, child);\n        }\n    });\n}\nconst $d7f64c32b702fe2c$export$94b6d0abf7d33e8c = /*#__PURE__*/ (0, $iuCOg$createContext)(false);\nfunction $d7f64c32b702fe2c$export$8dc98ba7eadeaa56(props) {\n    let isHidden = (0, $iuCOg$useContext)($d7f64c32b702fe2c$export$94b6d0abf7d33e8c);\n    if (isHidden) // Don't hide again if we are already hidden.\n    return /*#__PURE__*/ (0, $iuCOg$react).createElement((0, $iuCOg$react).Fragment, null, props.children);\n    let children = /*#__PURE__*/ (0, $iuCOg$react).createElement($d7f64c32b702fe2c$export$94b6d0abf7d33e8c.Provider, {\n        value: true\n    }, props.children);\n    // In SSR, portals are not supported by React. Instead, always render into a <template>\n    // element, which the browser will never display to the user. In addition, the\n    // content is not part of the accessible DOM tree, so it won't affect ids or other accessibility attributes.\n    return /*#__PURE__*/ (0, $iuCOg$react).createElement(\"template\", null, children);\n}\nfunction $d7f64c32b702fe2c$export$86427a43e3e48ebb(fn) {\n    let Wrapper = (props, ref)=>{\n        let isHidden = (0, $iuCOg$useContext)($d7f64c32b702fe2c$export$94b6d0abf7d33e8c);\n        if (isHidden) return null;\n        // oxlint-disable-next-line react/react-compiler\n        return fn(props, ref);\n    };\n    // @ts-ignore - for react dev tools\n    Wrapper.displayName = fn.displayName || fn.name;\n    return (0, $iuCOg$forwardRef)(Wrapper);\n}\nfunction $d7f64c32b702fe2c$export$b5d7cc18bb8d2b59() {\n    return (0, $iuCOg$useContext)($d7f64c32b702fe2c$export$94b6d0abf7d33e8c);\n}\n\n\nexport {$d7f64c32b702fe2c$export$94b6d0abf7d33e8c as HiddenContext, $d7f64c32b702fe2c$export$8dc98ba7eadeaa56 as Hidden, $d7f64c32b702fe2c$export$86427a43e3e48ebb as createHideableComponent, $d7f64c32b702fe2c$export$b5d7cc18bb8d2b59 as useIsHidden};\n//# sourceMappingURL=Hidden.mjs.map\n","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n  useState = React.useState,\n  useEffect = React.useEffect,\n  useLayoutEffect = React.useLayoutEffect,\n  useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n  var value = getSnapshot(),\n    _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n    inst = _useState[0].inst,\n    forceUpdate = _useState[1];\n  useLayoutEffect(\n    function () {\n      inst.value = value;\n      inst.getSnapshot = getSnapshot;\n      checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n    },\n    [subscribe, value, getSnapshot]\n  );\n  useEffect(\n    function () {\n      checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n      return subscribe(function () {\n        checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n      });\n    },\n    [subscribe]\n  );\n  useDebugValue(value);\n  return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n  var latestGetSnapshot = inst.getSnapshot;\n  inst = inst.value;\n  try {\n    var nextValue = latestGetSnapshot();\n    return !objectIs(inst, nextValue);\n  } catch (error) {\n    return !0;\n  }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n  return getSnapshot();\n}\nvar shim =\n  \"undefined\" === typeof window ||\n  \"undefined\" === typeof window.document ||\n  \"undefined\" === typeof window.document.createElement\n    ? useSyncExternalStore$1\n    : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n  void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n  module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","import {BaseCollection as $6f0c29017aeec335$export$408d25a4e12db025, CollectionNode as $6f0c29017aeec335$export$d68d59712b04d9d1} from \"./BaseCollection.mjs\";\nimport {Document as $96ead35620b8fd36$export$b34a105447964f9f} from \"./Document.mjs\";\nimport {useCachedChildren as $a80bd3e9349588e7$export$727c8fc270210f13} from \"./useCachedChildren.mjs\";\nimport {FocusableContext as $d1116acdf220c2da$export$f9762fab77588ecb} from \"../interactions/useFocusable.mjs\";\nimport {Hidden as $d7f64c32b702fe2c$export$8dc98ba7eadeaa56} from \"./Hidden.mjs\";\nimport {useIsSSR as $c7eafbbe1ea5834e$export$535bd6ca7f90a273} from \"../ssr/SSRProvider.mjs\";\nimport {createPortal as $kT5Ur$createPortal} from \"react-dom\";\nimport $kT5Ur$react, {createContext as $kT5Ur$createContext, useContext as $kT5Ur$useContext, useRef as $kT5Ur$useRef, useCallback as $kT5Ur$useCallback, useState as $kT5Ur$useState, forwardRef as $kT5Ur$forwardRef, useMemo as $kT5Ur$useMemo} from \"react\";\nimport {useSyncExternalStore as $kT5Ur$useSyncExternalStore} from \"use-sync-external-store/shim/index.js\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\nconst $42ceafc619f9c3ba$var$ShallowRenderContext = /*#__PURE__*/ (0, $kT5Ur$createContext)(false);\nconst $42ceafc619f9c3ba$var$CollectionDocumentContext = /*#__PURE__*/ (0, $kT5Ur$createContext)(null);\nfunction $42ceafc619f9c3ba$export$bf788dd355e3a401(props) {\n    // If a document was provided above us, we're already in a hidden tree. Just render the content.\n    let doc = (0, $kT5Ur$useContext)($42ceafc619f9c3ba$var$CollectionDocumentContext);\n    if (doc) // The React types prior to 18 did not allow returning ReactNode from components\n    // even though the actual implementation since React 16 did.\n    // We must return ReactElement so that TS does not complain that <CollectionBuilder>\n    // is not a valid JSX element with React 16 and 17 types.\n    // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/20544\n    return props.content;\n    // Otherwise, render a hidden copy of the children so that we can build the collection before constructing the state.\n    // This should always come before the real DOM content so we have built the collection by the time it renders during SSR.\n    // This is fine. CollectionDocumentContext never changes after mounting.\n    // oxlint-disable-next-line react/react-compiler, react-hooks/rules-of-hooks\n    let { collection: collection, document: document } = $42ceafc619f9c3ba$var$useCollectionDocument(props.createCollection);\n    return /*#__PURE__*/ (0, $kT5Ur$react).createElement((0, $kT5Ur$react).Fragment, null, /*#__PURE__*/ (0, $kT5Ur$react).createElement((0, $d7f64c32b702fe2c$export$8dc98ba7eadeaa56), null, /*#__PURE__*/ (0, $kT5Ur$react).createElement($42ceafc619f9c3ba$var$CollectionDocumentContext.Provider, {\n        value: document\n    }, props.content)), /*#__PURE__*/ (0, $kT5Ur$react).createElement($42ceafc619f9c3ba$var$CollectionInner, {\n        render: props.children,\n        collection: collection\n    }));\n}\nfunction $42ceafc619f9c3ba$var$CollectionInner({ collection: collection, render: render }) {\n    return render(collection);\n}\n// React 16 and 17 don't support useSyncExternalStore natively, and the shim provided by React does not support getServerSnapshot.\n// This wrapper uses the shim, but additionally calls getServerSnapshot during SSR (according to SSRProvider).\nfunction $42ceafc619f9c3ba$var$useSyncExternalStoreFallback(subscribe, getSnapshot, getServerSnapshot) {\n    let isSSR = (0, $c7eafbbe1ea5834e$export$535bd6ca7f90a273)();\n    let isSSRRef = (0, $kT5Ur$useRef)(isSSR);\n    // This is read immediately inside the wrapper, which also runs during render.\n    // We just need a ref to avoid invalidating the callback itself, which\n    // would cause React to re-run the callback more than necessary.\n    // eslint-disable-next-line rsp-rules/pure-render\n    // oxlint-disable-next-line react/react-compiler, rsp-rules/pure-render\n    isSSRRef.current = isSSR;\n    let getSnapshotWrapper = (0, $kT5Ur$useCallback)(()=>{\n        return isSSRRef.current ? getServerSnapshot() : getSnapshot();\n    }, [\n        getSnapshot,\n        getServerSnapshot\n    ]);\n    return (0, $kT5Ur$useSyncExternalStore)(subscribe, getSnapshotWrapper);\n}\nconst $42ceafc619f9c3ba$var$useSyncExternalStore = typeof (0, $kT5Ur$react)['useSyncExternalStore'] === 'function' ? (0, $kT5Ur$react)['useSyncExternalStore'] : $42ceafc619f9c3ba$var$useSyncExternalStoreFallback;\nfunction $42ceafc619f9c3ba$var$useCollectionDocument(createCollection) {\n    // The document instance is mutable, and should never change between renders.\n    // useSyncExternalStore is used to subscribe to updates, which vends immutable Collection objects.\n    let [document] = (0, $kT5Ur$useState)(()=>new (0, $96ead35620b8fd36$export$b34a105447964f9f)(createCollection?.() || new (0, $6f0c29017aeec335$export$408d25a4e12db025)()));\n    let subscribe = (0, $kT5Ur$useCallback)((fn)=>document.subscribe(fn), [\n        document\n    ]);\n    let getSnapshot = (0, $kT5Ur$useCallback)(()=>{\n        let collection = document.getCollection();\n        if (document.isSSR) // After SSR is complete, reset the document to empty so it is ready for React to render the portal into.\n        // We do this _after_ getting the collection above so that the collection still has content in it from SSR\n        // during the current render, before React has finished the client render.\n        document.resetAfterSSR();\n        return collection;\n    }, [\n        document\n    ]);\n    let getServerSnapshot = (0, $kT5Ur$useCallback)(()=>{\n        // oxlint-disable-next-line react/react-compiler\n        document.isSSR = true;\n        return document.getCollection();\n    }, [\n        document\n    ]);\n    let collection = $42ceafc619f9c3ba$var$useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n    return {\n        collection: collection,\n        document: document\n    };\n}\nconst $42ceafc619f9c3ba$var$SSRContext = /*#__PURE__*/ (0, $kT5Ur$createContext)(null);\nfunction $42ceafc619f9c3ba$var$createCollectionNodeClass(type) {\n    let NodeClass = class extends (0, $6f0c29017aeec335$export$d68d59712b04d9d1) {\n        static{\n            this.type = type;\n        }\n    };\n    return NodeClass;\n}\nfunction $42ceafc619f9c3ba$var$useSSRCollectionNode(CollectionNodeClass, props, ref, rendered, children, render) {\n    // To prevent breaking change, if CollectionNodeClass is a string, create a CollectionNodeClass using the string as the type\n    if (typeof CollectionNodeClass === 'string') // oxlint-disable-next-line react/react-compiler\n    CollectionNodeClass = $42ceafc619f9c3ba$var$createCollectionNodeClass(CollectionNodeClass);\n    // During SSR, portals are not supported, so the collection children will be wrapped in an SSRContext.\n    // Since SSR occurs only once, we assume that the elements are rendered in order and never re-render.\n    // Therefore we can create elements in our collection document during render so that they are in the\n    // collection by the time we need to use the collection to render to the real DOM.\n    // After hydration, we switch to client rendering using the portal.\n    let itemRef = (0, $kT5Ur$useCallback)((element)=>{\n        element?.setProps(props, ref, CollectionNodeClass, rendered, render);\n    }, [\n        props,\n        ref,\n        rendered,\n        render,\n        CollectionNodeClass\n    ]);\n    let parentNode = (0, $kT5Ur$useContext)($42ceafc619f9c3ba$var$SSRContext);\n    if (parentNode) {\n        // Guard against double rendering in strict mode.\n        let element = parentNode.ownerDocument.nodesByProps.get(props);\n        if (!element) {\n            element = parentNode.ownerDocument.createElement(CollectionNodeClass.type);\n            element.setProps(props, ref, CollectionNodeClass, rendered, render);\n            parentNode.appendChild(element);\n            parentNode.ownerDocument.updateCollection();\n            parentNode.ownerDocument.nodesByProps.set(props, element);\n        }\n        return children ? /*#__PURE__*/ (0, $kT5Ur$react).createElement($42ceafc619f9c3ba$var$SSRContext.Provider, {\n            value: element\n        }, children) : null;\n    }\n    // @ts-ignore\n    return /*#__PURE__*/ (0, $kT5Ur$react).createElement(CollectionNodeClass.type, {\n        ref: itemRef\n    }, children);\n}\nfunction $42ceafc619f9c3ba$export$18af5c7a9e9b3664(CollectionNodeClass, render) {\n    let Component = ({ node: node })=>render(node.props, node.props.ref, node);\n    let Result = (0, $kT5Ur$forwardRef)((props, ref)=>{\n        let focusableProps = (0, $kT5Ur$useContext)((0, $d1116acdf220c2da$export$f9762fab77588ecb));\n        let isShallow = (0, $kT5Ur$useContext)($42ceafc619f9c3ba$var$ShallowRenderContext);\n        if (!isShallow) {\n            if (render.length >= 3) throw new Error(render.name + ' cannot be rendered outside a collection.');\n            return render(props, ref);\n        }\n        return $42ceafc619f9c3ba$var$useSSRCollectionNode(CollectionNodeClass, props, ref, 'children' in props ? props.children : null, null, (node)=>// Forward FocusableContext to real DOM tree so tooltips work.\n            /*#__PURE__*/ (0, $kT5Ur$react).createElement((0, $d1116acdf220c2da$export$f9762fab77588ecb).Provider, {\n                value: focusableProps\n            }, /*#__PURE__*/ (0, $kT5Ur$react).createElement(Component, {\n                node: node\n            })));\n    });\n    // @ts-ignore\n    Result.displayName = render.name;\n    return Result;\n}\nfunction $42ceafc619f9c3ba$export$e953bb1cd0f19726(CollectionNodeClass, render, useChildren = $42ceafc619f9c3ba$var$useCollectionChildren) {\n    let Component = ({ node: node })=>render(node.props, node.props.ref, node);\n    let Result = (0, $kT5Ur$forwardRef)((props, ref)=>{\n        let children = useChildren(props);\n        return $42ceafc619f9c3ba$var$useSSRCollectionNode(CollectionNodeClass, props, ref, null, children, (node)=>/*#__PURE__*/ (0, $kT5Ur$react).createElement(Component, {\n                node: node\n            })) ?? /*#__PURE__*/ (0, $kT5Ur$react).createElement((0, $kT5Ur$react).Fragment, null);\n    });\n    // @ts-ignore\n    Result.displayName = render.name;\n    return Result;\n}\nfunction $42ceafc619f9c3ba$var$useCollectionChildren(options) {\n    return (0, $a80bd3e9349588e7$export$727c8fc270210f13)({\n        ...options,\n        addIdAndValue: true\n    });\n}\nconst $42ceafc619f9c3ba$var$CollectionContext = /*#__PURE__*/ (0, $kT5Ur$createContext)(null);\nfunction $42ceafc619f9c3ba$export$fb8073518f34e6ec(props) {\n    let ctx = (0, $kT5Ur$useContext)($42ceafc619f9c3ba$var$CollectionContext);\n    let dependencies = (ctx?.dependencies || []).concat(props.dependencies);\n    let idScope = props.idScope ?? ctx?.idScope;\n    let children = $42ceafc619f9c3ba$var$useCollectionChildren({\n        ...props,\n        idScope: idScope,\n        dependencies: dependencies\n    });\n    let doc = (0, $kT5Ur$useContext)($42ceafc619f9c3ba$var$CollectionDocumentContext);\n    if (doc) children = /*#__PURE__*/ (0, $kT5Ur$react).createElement($42ceafc619f9c3ba$var$CollectionRoot, null, children);\n    // Propagate dependencies and idScope to child collections.\n    ctx = (0, $kT5Ur$useMemo)(()=>({\n            dependencies: // oxlint-disable-next-line react-hooks/exhaustive-deps\n            dependencies,\n            idScope: idScope\n        }), // eslint-disable-next-line react-hooks/exhaustive-deps\n    // oxlint-disable-next-line react/react-compiler, react-hooks/exhaustive-deps\n    [\n        idScope,\n        ...dependencies\n    ]);\n    return /*#__PURE__*/ (0, $kT5Ur$react).createElement($42ceafc619f9c3ba$var$CollectionContext.Provider, {\n        value: ctx\n    }, children);\n}\nfunction $42ceafc619f9c3ba$var$CollectionRoot({ children: children }) {\n    let doc = (0, $kT5Ur$useContext)($42ceafc619f9c3ba$var$CollectionDocumentContext);\n    let wrappedChildren = (0, $kT5Ur$useMemo)(()=>/*#__PURE__*/ (0, $kT5Ur$react).createElement($42ceafc619f9c3ba$var$CollectionDocumentContext.Provider, {\n            value: null\n        }, /*#__PURE__*/ (0, $kT5Ur$react).createElement($42ceafc619f9c3ba$var$ShallowRenderContext.Provider, {\n            value: true\n        }, children)), [\n        children\n    ]);\n    // During SSR, we render the content directly, and append nodes to the document during render.\n    // The collection children return null so that nothing is actually rendered into the HTML.\n    return (0, $c7eafbbe1ea5834e$export$535bd6ca7f90a273)() ? /*#__PURE__*/ (0, $kT5Ur$react).createElement($42ceafc619f9c3ba$var$SSRContext.Provider, {\n        value: doc\n    }, wrappedChildren) : /*#__PURE__*/ (0, $kT5Ur$createPortal)(wrappedChildren, doc);\n}\n\n\nexport {$42ceafc619f9c3ba$export$bf788dd355e3a401 as CollectionBuilder, $42ceafc619f9c3ba$export$18af5c7a9e9b3664 as createLeafComponent, $42ceafc619f9c3ba$export$e953bb1cd0f19726 as createBranchComponent, $42ceafc619f9c3ba$export$fb8073518f34e6ec as Collection};\n//# sourceMappingURL=CollectionBuilder.mjs.map\n","import {createBranchComponent as $f0m83$createBranchComponent} from \"react-aria/CollectionBuilder\";\nimport $f0m83$react, {createContext as $f0m83$createContext, useContext as $f0m83$useContext, isValidElement as $f0m83$isValidElement, cloneElement as $f0m83$cloneElement, useMemo as $f0m83$useMemo} from \"react\";\nimport {useCachedChildren as $f0m83$useCachedChildren} from \"react-aria/private/collections/useCachedChildren\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $263ab7fc0f95ccdb$export$d40e14dec8b060a8 = /*#__PURE__*/ (0, $f0m83$createContext)(null);\nconst $263ab7fc0f95ccdb$export$6e2c8f0811a474ce = /*#__PURE__*/ (0, $f0m83$createBranchComponent)('section', (props, ref, section)=>{\n    let { name: name, render: render } = (0, $f0m83$useContext)($263ab7fc0f95ccdb$export$d40e14dec8b060a8);\n    if (process.env.NODE_ENV !== 'production') console.warn(`<Section> is deprecated. Please use <${name}> instead.`);\n    return render(props, ref, section, 'react-aria-Section');\n});\nconst $263ab7fc0f95ccdb$export$a164736487e3f0ae = {\n    CollectionRoot ({ collection: collection, renderDropIndicator: renderDropIndicator }) {\n        return $263ab7fc0f95ccdb$var$useCollectionRender(collection, null, renderDropIndicator);\n    },\n    CollectionBranch ({ collection: collection, parent: parent, renderDropIndicator: renderDropIndicator }) {\n        return $263ab7fc0f95ccdb$var$useCollectionRender(collection, parent, renderDropIndicator);\n    }\n};\nfunction $263ab7fc0f95ccdb$var$useCollectionRender(collection, parent, renderDropIndicator) {\n    return (0, $f0m83$useCachedChildren)({\n        items: parent ? collection.getChildren(parent.key) : collection,\n        dependencies: [\n            renderDropIndicator\n        ],\n        children (node) {\n            // Return a empty fragment since we don't want to render the content twice\n            // If we don't skip the content node here, we end up rendering them twice in a Tree since we also render the content node in TreeItem\n            if (node.type === 'content') return /*#__PURE__*/ (0, $f0m83$react).createElement((0, $f0m83$react).Fragment, null);\n            let rendered = node.render(node);\n            if (!renderDropIndicator || node.type !== 'item') return rendered;\n            return /*#__PURE__*/ (0, $f0m83$react).createElement((0, $f0m83$react).Fragment, null, renderDropIndicator({\n                type: 'item',\n                key: node.key,\n                dropPosition: 'before'\n            }), rendered, $263ab7fc0f95ccdb$export$2dbbd341daed716d(collection, node, renderDropIndicator));\n        }\n    });\n}\nfunction $263ab7fc0f95ccdb$export$2dbbd341daed716d(collection, node, renderDropIndicator) {\n    let key = node.key;\n    let keyAfter = collection.getKeyAfter(key);\n    let nextItemInFlattenedCollection = keyAfter != null ? collection.getItem(keyAfter) : null;\n    while(nextItemInFlattenedCollection != null && nextItemInFlattenedCollection.type !== 'item'){\n        keyAfter = collection.getKeyAfter(nextItemInFlattenedCollection.key);\n        nextItemInFlattenedCollection = keyAfter != null ? collection.getItem(keyAfter) : null;\n    }\n    let nextItemInSameLevel = node.nextKey != null ? collection.getItem(node.nextKey) : null;\n    while(nextItemInSameLevel != null && nextItemInSameLevel.type !== 'item')nextItemInSameLevel = nextItemInSameLevel.nextKey != null ? collection.getItem(nextItemInSameLevel.nextKey) : null;\n    // Render one or more \"after\" drop indicators when the next item in the flattened collection\n    // has a smaller level, is not an item, or there are no more items in the collection.\n    // Otherwise, the \"after\" position is equivalent to the next item's \"before\" position.\n    let afterIndicators = [];\n    if (nextItemInSameLevel == null) {\n        let current = node;\n        while(current?.type === 'item' && (!nextItemInFlattenedCollection || current.parentKey !== nextItemInFlattenedCollection.parentKey && nextItemInFlattenedCollection.level < current.level)){\n            let indicator = renderDropIndicator({\n                type: 'item',\n                key: current.key,\n                dropPosition: 'after'\n            });\n            if (/*#__PURE__*/ (0, $f0m83$isValidElement)(indicator)) afterIndicators.push(/*#__PURE__*/ (0, $f0m83$cloneElement)(indicator, {\n                key: `${current.key}-after`\n            }));\n            current = current.parentKey != null ? collection.getItem(current.parentKey) : null;\n        }\n    }\n    return afterIndicators;\n}\nconst $263ab7fc0f95ccdb$export$4feb769f8ddf26c5 = /*#__PURE__*/ (0, $f0m83$createContext)($263ab7fc0f95ccdb$export$a164736487e3f0ae);\nfunction $263ab7fc0f95ccdb$export$90e00781bc59d8f9(focusedKey) {\n    return (0, $f0m83$useMemo)(()=>focusedKey != null ? new Set([\n            focusedKey\n        ]) : null, [\n        focusedKey\n    ]);\n}\n\n\nexport {$263ab7fc0f95ccdb$export$d40e14dec8b060a8 as SectionContext, $263ab7fc0f95ccdb$export$6e2c8f0811a474ce as Section, $263ab7fc0f95ccdb$export$a164736487e3f0ae as DefaultCollectionRenderer, $263ab7fc0f95ccdb$export$2dbbd341daed716d as renderAfterDropIndicators, $263ab7fc0f95ccdb$export$4feb769f8ddf26c5 as CollectionRendererContext, $263ab7fc0f95ccdb$export$90e00781bc59d8f9 as usePersistedKeys};\n//# sourceMappingURL=Collection.mjs.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ const $8e9d2fae0ecb9001$var$DOMPropNames = new Set([\n    'id'\n]);\nconst $8e9d2fae0ecb9001$var$labelablePropNames = new Set([\n    'aria-label',\n    'aria-labelledby',\n    'aria-describedby',\n    'aria-details'\n]);\n// See LinkDOMProps in dom.d.ts.\nconst $8e9d2fae0ecb9001$var$linkPropNames = new Set([\n    'href',\n    'hrefLang',\n    'target',\n    'rel',\n    'download',\n    'ping',\n    'referrerPolicy'\n]);\nconst $8e9d2fae0ecb9001$var$globalAttrs = new Set([\n    'dir',\n    'lang',\n    'hidden',\n    'inert',\n    'translate',\n    'suppressHydrationWarning'\n]);\nconst $8e9d2fae0ecb9001$var$globalEvents = new Set([\n    'onClick',\n    'onAuxClick',\n    'onContextMenu',\n    'onDoubleClick',\n    'onMouseDown',\n    'onMouseEnter',\n    'onMouseLeave',\n    'onMouseMove',\n    'onMouseOut',\n    'onMouseOver',\n    'onMouseUp',\n    'onTouchCancel',\n    'onTouchEnd',\n    'onTouchMove',\n    'onTouchStart',\n    'onPointerDown',\n    'onPointerMove',\n    'onPointerUp',\n    'onPointerCancel',\n    'onPointerEnter',\n    'onPointerLeave',\n    'onPointerOver',\n    'onPointerOut',\n    'onGotPointerCapture',\n    'onLostPointerCapture',\n    'onScroll',\n    'onWheel',\n    'onAnimationStart',\n    'onAnimationEnd',\n    'onAnimationIteration',\n    'onTransitionCancel',\n    'onTransitionEnd',\n    'onTransitionRun',\n    'onTransitionStart'\n]);\nconst $8e9d2fae0ecb9001$var$propRe = /^(data-.*)$/;\nfunction $8e9d2fae0ecb9001$export$457c3d6518dd4c6f(props, opts = {}) {\n    let { labelable: labelable, isLink: isLink, global: global, events: events = global, propNames: propNames } = opts;\n    let filteredProps = {};\n    for(const prop in props)if (Object.prototype.hasOwnProperty.call(props, prop) && ($8e9d2fae0ecb9001$var$DOMPropNames.has(prop) || labelable && $8e9d2fae0ecb9001$var$labelablePropNames.has(prop) || isLink && $8e9d2fae0ecb9001$var$linkPropNames.has(prop) || global && $8e9d2fae0ecb9001$var$globalAttrs.has(prop) || events && ($8e9d2fae0ecb9001$var$globalEvents.has(prop) || prop.endsWith('Capture') && $8e9d2fae0ecb9001$var$globalEvents.has(prop.slice(0, -7))) || propNames?.has(prop) || $8e9d2fae0ecb9001$var$propRe.test(prop))) filteredProps[prop] = props[prop];\n    return filteredProps;\n}\n\n\nexport {$8e9d2fae0ecb9001$export$457c3d6518dd4c6f as filterDOMProps};\n//# sourceMappingURL=filterDOMProps.mjs.map\n","import {getOwnerDocument as $d447af545b77c9f1$export$b204af158042fbac} from \"../utils/domHelpers.mjs\";\nimport {isIOS as $2add3ce32c6007eb$export$fedb369cb70207f1, isWebKit as $2add3ce32c6007eb$export$78551043582a6a98} from \"../utils/platform.mjs\";\nimport {runAfterTransition as $081cb5757e08788e$export$24490316f764c430} from \"../utils/runAfterTransition.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n// Note that state only matters here for iOS. Non-iOS gets user-select: none applied to the target element\n// rather than at the document level so we just need to apply/remove user-select: none for each pressed element individually\nlet $cbf007e418543821$var$state = 'default';\nlet $cbf007e418543821$var$savedUserSelect = '';\nlet $cbf007e418543821$var$modifiedElementMap = new WeakMap();\nfunction $cbf007e418543821$export$16a4697467175487(target) {\n    if ((0, $2add3ce32c6007eb$export$fedb369cb70207f1)() && (0, $2add3ce32c6007eb$export$78551043582a6a98)()) {\n        if ($cbf007e418543821$var$state === 'default') {\n            const documentObject = (0, $d447af545b77c9f1$export$b204af158042fbac)(target);\n            $cbf007e418543821$var$savedUserSelect = documentObject.documentElement.style.webkitUserSelect;\n            documentObject.documentElement.style.webkitUserSelect = 'none';\n        }\n        $cbf007e418543821$var$state = 'disabled';\n    } else if (target instanceof HTMLElement || target instanceof SVGElement) {\n        // If not iOS, store the target's original user-select and change to user-select: none\n        // Ignore state since it doesn't apply for non iOS\n        let property = 'userSelect' in target.style ? 'userSelect' : 'webkitUserSelect';\n        $cbf007e418543821$var$modifiedElementMap.set(target, target.style[property]);\n        target.style[property] = 'none';\n    }\n}\nfunction $cbf007e418543821$export$b0d6fa1ab32e3295(target) {\n    if ((0, $2add3ce32c6007eb$export$fedb369cb70207f1)() && (0, $2add3ce32c6007eb$export$78551043582a6a98)()) {\n        // If the state is already default, there's nothing to do.\n        // If it is restoring, then there's no need to queue a second restore.\n        if ($cbf007e418543821$var$state !== 'disabled') return;\n        $cbf007e418543821$var$state = 'restoring';\n        // There appears to be a delay on iOS where selection still might occur\n        // after pointer up, so wait a bit before removing user-select.\n        setTimeout(()=>{\n            // Wait for any CSS transitions to complete so we don't recompute style\n            // for the whole page in the middle of the animation and cause jank.\n            (0, $081cb5757e08788e$export$24490316f764c430)(()=>{\n                // Avoid race conditions\n                if ($cbf007e418543821$var$state === 'restoring') {\n                    const documentObject = (0, $d447af545b77c9f1$export$b204af158042fbac)(target);\n                    if (documentObject.documentElement.style.webkitUserSelect === 'none') documentObject.documentElement.style.webkitUserSelect = $cbf007e418543821$var$savedUserSelect || '';\n                    $cbf007e418543821$var$savedUserSelect = '';\n                    $cbf007e418543821$var$state = 'default';\n                }\n            });\n        }, 300);\n    } else if (target instanceof HTMLElement || target instanceof SVGElement) // If not iOS, restore the target's original user-select if any\n    // Ignore state since it doesn't apply for non iOS\n    {\n        if (target && $cbf007e418543821$var$modifiedElementMap.has(target)) {\n            let targetOldUserSelect = $cbf007e418543821$var$modifiedElementMap.get(target);\n            let property = 'userSelect' in target.style ? 'userSelect' : 'webkitUserSelect';\n            if (target.style[property] === 'none') target.style[property] = targetOldUserSelect;\n            if (target.getAttribute('style') === '') target.removeAttribute('style');\n            $cbf007e418543821$var$modifiedElementMap.delete(target);\n        }\n    }\n}\n\n\nexport {$cbf007e418543821$export$16a4697467175487 as disableTextSelection, $cbf007e418543821$export$b0d6fa1ab32e3295 as restoreTextSelection};\n//# sourceMappingURL=textSelection.mjs.map\n","import {getMetaValue as $7096878c21af5e66$export$a929f3f93e2cc67e} from \"./getMetaValue.mjs\";\nimport {getOwnerDocument as $d447af545b77c9f1$export$b204af158042fbac} from \"./domHelpers.mjs\";\n\n/*\n * Copyright 2026 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nlet $2b2d34ff061957fb$var$nonceCache = new WeakMap();\nfunction $2b2d34ff061957fb$export$88b319273f3705b4() {\n    $2b2d34ff061957fb$var$nonceCache = new WeakMap();\n}\nfunction $2b2d34ff061957fb$export$2b85b721e524d74b(doc) {\n    let ownerDocument = (0, $d447af545b77c9f1$export$b204af158042fbac)(doc);\n    let nonce = $2b2d34ff061957fb$var$nonceCache.get(ownerDocument);\n    nonce ??= (0, $7096878c21af5e66$export$a929f3f93e2cc67e)('csp-nonce', ownerDocument);\n    if (nonce !== undefined) $2b2d34ff061957fb$var$nonceCache.set(ownerDocument, nonce);\n    return nonce;\n}\n\n\nexport {$2b2d34ff061957fb$export$88b319273f3705b4 as resetNonceCache, $2b2d34ff061957fb$export$2b85b721e524d74b as getNonce};\n//# sourceMappingURL=getNonce.mjs.map\n","import $kV9Vy$react from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $24f9a20f226ad820$export$5165eccb35aaadb5 = (0, $kV9Vy$react).createContext({\n    register: ()=>{}\n});\n$24f9a20f226ad820$export$5165eccb35aaadb5.displayName = 'PressResponderContext';\n\n\nexport {$24f9a20f226ad820$export$5165eccb35aaadb5 as PressResponderContext};\n//# sourceMappingURL=context.mjs.map\n","import {useRef as $awe0O$useRef, useCallback as $awe0O$useCallback, useEffect as $awe0O$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $48a7d519b337145d$export$4eaf04e54aa8eed6() {\n    let globalListeners = (0, $awe0O$useRef)(new Map());\n    let addGlobalListener = (0, $awe0O$useCallback)((eventTarget, type, listener, options)=>{\n        // Make sure we remove the listener after it is called with the `once` option.\n        let fn = options?.once ? (...args)=>{\n            globalListeners.current.delete(listener);\n            listener(...args);\n        } : listener;\n        globalListeners.current.set(listener, {\n            type: type,\n            eventTarget: eventTarget,\n            fn: fn,\n            options: options\n        });\n        eventTarget.addEventListener(type, fn, options);\n    }, []);\n    let removeGlobalListener = (0, $awe0O$useCallback)((eventTarget, type, listener, options)=>{\n        let fn = globalListeners.current.get(listener)?.fn || listener;\n        eventTarget.removeEventListener(type, fn, options);\n        globalListeners.current.delete(listener);\n    }, []);\n    let removeAllGlobalListeners = (0, $awe0O$useCallback)(()=>{\n        globalListeners.current.forEach((value, key)=>{\n            removeGlobalListener(value.eventTarget, value.type, key, value.options);\n        });\n    }, [\n        removeGlobalListener\n    ]);\n    (0, $awe0O$useEffect)(()=>{\n        return removeAllGlobalListeners;\n    }, [\n        removeAllGlobalListeners\n    ]);\n    return {\n        addGlobalListener: addGlobalListener,\n        removeGlobalListener: removeGlobalListener,\n        removeAllGlobalListeners: removeAllGlobalListeners\n    };\n}\n\n\nexport {$48a7d519b337145d$export$4eaf04e54aa8eed6 as useGlobalListeners};\n//# sourceMappingURL=useGlobalListeners.mjs.map\n","import {chain as $a4e76a5424781910$export$e08e3b67e392101e} from \"../utils/chain.mjs\";\nimport {createSyntheticEvent as $a92dc41f639950be$export$525bc4921d56d4a, preventFocus as $a92dc41f639950be$export$cabe61c495ee3649, setEventTarget as $a92dc41f639950be$export$c2b7abe5d61ec696} from \"./utils.mjs\";\nimport {disableTextSelection as $cbf007e418543821$export$16a4697467175487, restoreTextSelection as $cbf007e418543821$export$b0d6fa1ab32e3295} from \"./textSelection.mjs\";\nimport {focusWithoutScrolling as $1969ac565cfec8d0$export$de79e2c695e052f3} from \"../utils/focusWithoutScrolling.mjs\";\nimport {getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29, nodeContains as $23f2114a1b82827e$export$4282f70798064fe0} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {getNonce as $2b2d34ff061957fb$export$2b85b721e524d74b} from \"../utils/getNonce.mjs\";\nimport {getOwnerDocument as $d447af545b77c9f1$export$b204af158042fbac, getOwnerWindow as $d447af545b77c9f1$export$f21a1ffae260145a} from \"../utils/domHelpers.mjs\";\nimport {isMac as $2add3ce32c6007eb$export$9ac100e40613ea10} from \"../utils/platform.mjs\";\nimport {isVirtualClick as $b5c62b033c25b96d$export$60278871457622de, isVirtualPointerEvent as $b5c62b033c25b96d$export$29bf1b5f2c56cf63} from \"../utils/isVirtualEvent.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {openLink as $caaf0dd3060ed57c$export$95185d699e05d4d7} from \"../utils/openLink.mjs\";\nimport {PressResponderContext as $24f9a20f226ad820$export$5165eccb35aaadb5} from \"./context.mjs\";\nimport {useEffectEvent as $fe16bffc7a557bf0$export$7f54fc3180508a52} from \"../utils/useEffectEvent.mjs\";\nimport {useGlobalListeners as $48a7d519b337145d$export$4eaf04e54aa8eed6} from \"../utils/useGlobalListeners.mjs\";\nimport {useSyncRef as $b7115c395c64f7b5$export$4debdb1a3f0fa79e} from \"../utils/useSyncRef.mjs\";\nimport {flushSync as $fL2C6$flushSync} from \"react-dom\";\nimport {useContext as $fL2C6$useContext, useState as $fL2C6$useState, useRef as $fL2C6$useRef, useCallback as $fL2C6$useCallback, useEffect as $fL2C6$useEffect, useMemo as $fL2C6$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction $d27d541f9569d26d$var$usePressResponderContext(props) {\n    // Consume context from <PressResponder> and merge with props.\n    let context = (0, $fL2C6$useContext)((0, $24f9a20f226ad820$export$5165eccb35aaadb5));\n    if (context) {\n        // Prevent mergeProps from merging ref.\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        let { register: register, ref: ref, ...contextProps } = context;\n        props = (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(contextProps, props);\n        register();\n    }\n    (0, $b7115c395c64f7b5$export$4debdb1a3f0fa79e)(context, props.ref);\n    return props;\n}\nclass $d27d541f9569d26d$var$PressEvent {\n    #shouldStopPropagation;\n    constructor(type, pointerType, originalEvent, state){\n        this.#shouldStopPropagation = true;\n        let currentTarget = state?.target ?? originalEvent.currentTarget;\n        const rect = currentTarget?.getBoundingClientRect();\n        let x, y = 0;\n        let clientX, clientY = null;\n        if (originalEvent.clientX != null && originalEvent.clientY != null) {\n            clientX = originalEvent.clientX;\n            clientY = originalEvent.clientY;\n        }\n        if (rect) {\n            if (clientX != null && clientY != null) {\n                x = clientX - rect.left;\n                y = clientY - rect.top;\n            } else {\n                x = rect.width / 2;\n                y = rect.height / 2;\n            }\n        }\n        this.type = type;\n        this.pointerType = pointerType;\n        this.target = originalEvent.currentTarget;\n        this.shiftKey = originalEvent.shiftKey;\n        this.metaKey = originalEvent.metaKey;\n        this.ctrlKey = originalEvent.ctrlKey;\n        this.altKey = originalEvent.altKey;\n        this.x = x;\n        this.y = y;\n        this.key = originalEvent.key;\n    }\n    continuePropagation() {\n        this.#shouldStopPropagation = false;\n    }\n    get shouldStopPropagation() {\n        return this.#shouldStopPropagation;\n    }\n}\nconst $d27d541f9569d26d$var$LINK_CLICKED = Symbol('linkClicked');\nconst $d27d541f9569d26d$var$STYLE_ID = 'react-aria-pressable-style';\nconst $d27d541f9569d26d$var$PRESSABLE_ATTRIBUTE = 'data-react-aria-pressable';\nfunction $d27d541f9569d26d$export$45712eceda6fad21(props) {\n    let { onPress: onPress, onPressChange: onPressChange, onPressStart: onPressStart, onPressEnd: onPressEnd, onPressUp: onPressUp, onClick: onClick, isDisabled: isDisabled, isPressed: isPressedProp, preventFocusOnPress: preventFocusOnPress, shouldCancelOnPointerExit: shouldCancelOnPointerExit, allowTextSelectionOnPress: allowTextSelectionOnPress, ref: domRef, ...domProps } = $d27d541f9569d26d$var$usePressResponderContext(props);\n    let [isPressed, setPressed] = (0, $fL2C6$useState)(false);\n    let ref = (0, $fL2C6$useRef)({\n        isPressed: false,\n        ignoreEmulatedMouseEvents: false,\n        didFirePressStart: false,\n        isTriggeringEvent: false,\n        activePointerId: null,\n        target: null,\n        isOverTarget: false,\n        pointerType: null,\n        disposables: []\n    });\n    let { addGlobalListener: addGlobalListener, removeAllGlobalListeners: removeAllGlobalListeners } = (0, $48a7d519b337145d$export$4eaf04e54aa8eed6)();\n    let triggerPressStart = (0, $fL2C6$useCallback)((originalEvent, pointerType)=>{\n        let state = ref.current;\n        if (isDisabled || state.didFirePressStart) return false;\n        let shouldStopPropagation = true;\n        state.isTriggeringEvent = true;\n        if (onPressStart) {\n            let event = new $d27d541f9569d26d$var$PressEvent('pressstart', pointerType, originalEvent);\n            onPressStart(event);\n            shouldStopPropagation = event.shouldStopPropagation;\n        }\n        if (onPressChange) onPressChange(true);\n        state.isTriggeringEvent = false;\n        state.didFirePressStart = true;\n        setPressed(true);\n        return shouldStopPropagation;\n    }, [\n        isDisabled,\n        onPressStart,\n        onPressChange\n    ]);\n    let triggerPressEnd = (0, $fL2C6$useCallback)((originalEvent, pointerType, wasPressed = true)=>{\n        let state = ref.current;\n        if (!state.didFirePressStart) return false;\n        state.didFirePressStart = false;\n        state.isTriggeringEvent = true;\n        let shouldStopPropagation = true;\n        if (onPressEnd) {\n            let event = new $d27d541f9569d26d$var$PressEvent('pressend', pointerType, originalEvent);\n            onPressEnd(event);\n            shouldStopPropagation = event.shouldStopPropagation;\n        }\n        if (onPressChange) onPressChange(false);\n        setPressed(false);\n        if (onPress && wasPressed && !isDisabled) {\n            let event = new $d27d541f9569d26d$var$PressEvent('press', pointerType, originalEvent);\n            onPress(event);\n            shouldStopPropagation &&= event.shouldStopPropagation;\n        }\n        state.isTriggeringEvent = false;\n        return shouldStopPropagation;\n    }, [\n        isDisabled,\n        onPressEnd,\n        onPressChange,\n        onPress\n    ]);\n    let triggerPressEndEvent = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)(triggerPressEnd);\n    let triggerPressUp = (0, $fL2C6$useCallback)((originalEvent, pointerType)=>{\n        let state = ref.current;\n        if (isDisabled) return false;\n        if (onPressUp) {\n            state.isTriggeringEvent = true;\n            let event = new $d27d541f9569d26d$var$PressEvent('pressup', pointerType, originalEvent);\n            onPressUp(event);\n            state.isTriggeringEvent = false;\n            return event.shouldStopPropagation;\n        }\n        return true;\n    }, [\n        isDisabled,\n        onPressUp\n    ]);\n    let triggerPressUpEvent = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)(triggerPressUp);\n    let cancel = (0, $fL2C6$useCallback)((e)=>{\n        let state = ref.current;\n        if (state.isPressed && state.target) {\n            if (state.didFirePressStart && state.pointerType != null) triggerPressEnd($d27d541f9569d26d$var$createEvent(state.target, e), state.pointerType, false);\n            state.isPressed = false;\n            state.isOverTarget = false;\n            state.activePointerId = null;\n            state.pointerType = null;\n            removeAllGlobalListeners();\n            if (!allowTextSelectionOnPress) (0, $cbf007e418543821$export$b0d6fa1ab32e3295)(state.target);\n            for (let dispose of state.disposables)dispose();\n            state.disposables = [];\n        }\n    }, [\n        allowTextSelectionOnPress,\n        removeAllGlobalListeners,\n        triggerPressEnd\n    ]);\n    let cancelEvent = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)(cancel);\n    (0, $fL2C6$useEffect)(()=>{\n        if (isDisabled && ref.current.isPressed) cancelEvent({\n            currentTarget: ref.current.target,\n            shiftKey: false,\n            ctrlKey: false,\n            metaKey: false,\n            altKey: false\n        });\n    }, [\n        isDisabled\n    ]);\n    let cancelOnPointerExit = (0, $fL2C6$useCallback)((e)=>{\n        if (shouldCancelOnPointerExit) cancel(e);\n    }, [\n        shouldCancelOnPointerExit,\n        cancel\n    ]);\n    let triggerClick = (0, $fL2C6$useCallback)((e)=>{\n        if (isDisabled) return;\n        onClick?.(e);\n    }, [\n        isDisabled,\n        onClick\n    ]);\n    let triggerSyntheticClick = (0, $fL2C6$useCallback)((e, target)=>{\n        if (isDisabled) return;\n        // Some third-party libraries pass in onClick instead of onPress.\n        // Create a fake mouse event and trigger onClick as well.\n        // This matches the browser's native activation behavior for certain elements (e.g. button).\n        // https://html.spec.whatwg.org/#activation\n        // https://html.spec.whatwg.org/#fire-a-synthetic-pointer-event\n        if (onClick) {\n            let event = new MouseEvent('click', e);\n            (0, $a92dc41f639950be$export$c2b7abe5d61ec696)(event, target);\n            onClick((0, $a92dc41f639950be$export$525bc4921d56d4a)(event));\n        }\n    }, [\n        isDisabled,\n        onClick\n    ]);\n    let pressProps = (0, $fL2C6$useMemo)(()=>{\n        let state = ref.current;\n        let pressProps = {\n            onKeyDown (e) {\n                if ($d27d541f9569d26d$var$isValidKeyboardEvent(e.nativeEvent, e.currentTarget) && (0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) {\n                    if ($d27d541f9569d26d$var$shouldPreventDefaultKeyboard((0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e), e.key)) e.preventDefault();\n                    // If the event is repeating, it may have started on a different element\n                    // after which focus moved to the current element. Ignore these events and\n                    // only handle the first key down event.\n                    let shouldStopPropagation = true;\n                    if (!state.isPressed && !e.repeat) {\n                        state.target = e.currentTarget;\n                        state.isPressed = true;\n                        state.pointerType = 'keyboard';\n                        shouldStopPropagation = triggerPressStart(e, 'keyboard');\n                    }\n                    // Focus may move before the key up event, so register the event on the document\n                    // instead of the same element where the key down event occurred. Make it capturing so that it will trigger\n                    // before stopPropagation from useKeyboard on a child element may happen and thus we can still call triggerPress for the parent element.\n                    let originalTarget = e.currentTarget;\n                    let pressUp = (e)=>{\n                        if ($d27d541f9569d26d$var$isValidKeyboardEvent(e, originalTarget) && !e.repeat && (0, $23f2114a1b82827e$export$4282f70798064fe0)(originalTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e)) && state.target) triggerPressUpEvent($d27d541f9569d26d$var$createEvent(state.target, e), 'keyboard');\n                    };\n                    addGlobalListener((0, $d447af545b77c9f1$export$b204af158042fbac)(e.currentTarget), 'keyup', (0, $a4e76a5424781910$export$e08e3b67e392101e)(pressUp, onKeyUp), true);\n                    if (shouldStopPropagation) e.stopPropagation();\n                    // Keep track of the keydown events that occur while the Meta (e.g. Command) key is held.\n                    // macOS has a bug where keyup events are not fired while the Meta key is down.\n                    // When the Meta key itself is released we will get an event for that, and we'll act as if\n                    // all of these other keys were released as well.\n                    // https://bugs.chromium.org/p/chromium/issues/detail?id=1393524\n                    // https://bugs.webkit.org/show_bug.cgi?id=55291\n                    // https://bugzilla.mozilla.org/show_bug.cgi?id=1299553\n                    if (e.metaKey && (0, $2add3ce32c6007eb$export$9ac100e40613ea10)()) state.metaKeyEvents?.set(e.key, e.nativeEvent);\n                } else if (e.key === 'Meta') state.metaKeyEvents = new Map();\n            },\n            onClick (e) {\n                if (e && !(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n                if (e && e.button === 0 && !state.isTriggeringEvent && !(0, $caaf0dd3060ed57c$export$95185d699e05d4d7).isOpening) {\n                    let shouldStopPropagation = true;\n                    if (isDisabled) e.preventDefault();\n                    // If triggered from a screen reader or by using element.click(),\n                    // trigger as if it were a keyboard click.\n                    if (!state.ignoreEmulatedMouseEvents && !state.isPressed && (state.pointerType === 'virtual' || (0, $b5c62b033c25b96d$export$60278871457622de)(e.nativeEvent))) {\n                        let stopPressStart = triggerPressStart(e, 'virtual');\n                        let stopPressUp = triggerPressUpEvent(e, 'virtual');\n                        let stopPressEnd = triggerPressEndEvent(e, 'virtual');\n                        triggerClick(e);\n                        shouldStopPropagation = stopPressStart && stopPressUp && stopPressEnd;\n                    } else if (state.isPressed && state.pointerType !== 'keyboard') {\n                        let pointerType = state.pointerType || e.nativeEvent.pointerType || 'virtual';\n                        let stopPressUp = triggerPressUpEvent($d27d541f9569d26d$var$createEvent(e.currentTarget, e), pointerType);\n                        let stopPressEnd = triggerPressEndEvent($d27d541f9569d26d$var$createEvent(e.currentTarget, e), pointerType, true);\n                        shouldStopPropagation = stopPressUp && stopPressEnd;\n                        state.isOverTarget = false;\n                        triggerClick(e);\n                        // oxlint-disable-next-line react/react-compiler\n                        cancelEvent(e);\n                    }\n                    state.ignoreEmulatedMouseEvents = false;\n                    if (shouldStopPropagation) e.stopPropagation();\n                }\n            }\n        };\n        let onKeyUp = (e)=>{\n            if (state.isPressed && state.target && $d27d541f9569d26d$var$isValidKeyboardEvent(e, state.target)) {\n                if ($d27d541f9569d26d$var$shouldPreventDefaultKeyboard((0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e), e.key)) e.preventDefault();\n                let target = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n                let wasPressed = (0, $23f2114a1b82827e$export$4282f70798064fe0)(state.target, target);\n                triggerPressEndEvent($d27d541f9569d26d$var$createEvent(state.target, e), 'keyboard', wasPressed);\n                if (wasPressed) triggerSyntheticClick(e, state.target);\n                removeAllGlobalListeners();\n                // If a link was triggered with a key other than Enter, open the URL ourselves.\n                // This means the link has a role override, and the default browser behavior\n                // only applies when using the Enter key.\n                if (e.key !== 'Enter' && $d27d541f9569d26d$var$isHTMLAnchorLink(state.target) && (0, $23f2114a1b82827e$export$4282f70798064fe0)(state.target, target) && !e[$d27d541f9569d26d$var$LINK_CLICKED]) {\n                    // Store a hidden property on the event so we only trigger link click once,\n                    // even if there are multiple usePress instances attached to the element.\n                    e[$d27d541f9569d26d$var$LINK_CLICKED] = true;\n                    (0, $caaf0dd3060ed57c$export$95185d699e05d4d7)(state.target, e, false);\n                }\n                state.isPressed = false;\n                state.metaKeyEvents?.delete(e.key);\n            } else if (e.key === 'Meta' && state.metaKeyEvents?.size) {\n                // If we recorded keydown events that occurred while the Meta key was pressed,\n                // and those haven't received keyup events already, fire keyup events ourselves.\n                // See comment above for more info about the macOS bug causing this.\n                let events = state.metaKeyEvents;\n                state.metaKeyEvents = undefined;\n                for (let event of events.values())state.target?.dispatchEvent(new KeyboardEvent('keyup', event));\n            }\n        };\n        if (typeof PointerEvent !== 'undefined') {\n            pressProps.onPointerDown = (e)=>{\n                // Only handle left clicks, and ignore events that bubbled through portals.\n                if (e.button !== 0 || !(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n                // iOS safari fires pointer events from VoiceOver with incorrect coordinates/target.\n                // Ignore and let the onClick handler take care of it instead.\n                // https://bugs.webkit.org/show_bug.cgi?id=222627\n                // https://bugs.webkit.org/show_bug.cgi?id=223202\n                if ((0, $b5c62b033c25b96d$export$29bf1b5f2c56cf63)(e.nativeEvent)) {\n                    state.pointerType = 'virtual';\n                    return;\n                }\n                state.pointerType = e.pointerType;\n                let shouldStopPropagation = true;\n                if (!state.isPressed) {\n                    state.isPressed = true;\n                    state.isOverTarget = true;\n                    state.activePointerId = e.pointerId;\n                    state.target = e.currentTarget;\n                    if (!allowTextSelectionOnPress) (0, $cbf007e418543821$export$16a4697467175487)(state.target);\n                    shouldStopPropagation = triggerPressStart(e, state.pointerType);\n                    // Release pointer capture so that touch interactions can leave the original target.\n                    // This enables onPointerLeave and onPointerEnter to fire.\n                    let target = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n                    if ('releasePointerCapture' in target) {\n                        if ('hasPointerCapture' in target) {\n                            if (target.hasPointerCapture(e.pointerId)) target.releasePointerCapture(e.pointerId);\n                        } else target.releasePointerCapture(e.pointerId);\n                    }\n                    addGlobalListener((0, $d447af545b77c9f1$export$b204af158042fbac)(e.currentTarget), 'pointerup', onPointerUp, false);\n                    addGlobalListener((0, $d447af545b77c9f1$export$b204af158042fbac)(e.currentTarget), 'pointercancel', onPointerCancel, false);\n                }\n                if (shouldStopPropagation) e.stopPropagation();\n            };\n            pressProps.onMouseDown = (e)=>{\n                if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n                if (e.button === 0) {\n                    if (preventFocusOnPress) {\n                        let dispose = (0, $a92dc41f639950be$export$cabe61c495ee3649)(e.target);\n                        if (dispose) state.disposables.push(dispose);\n                    }\n                    e.stopPropagation();\n                }\n            };\n            pressProps.onPointerUp = (e)=>{\n                // iOS fires pointerup with zero width and height, so check the pointerType recorded during pointerdown.\n                if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e)) || state.pointerType === 'virtual') return;\n                // Only handle left clicks. If isPressed is true, delay until onClick.\n                if (e.button === 0 && !state.isPressed) triggerPressUpEvent(e, state.pointerType || e.pointerType);\n            };\n            pressProps.onPointerEnter = (e)=>{\n                if (e.pointerId === state.activePointerId && state.target && !state.isOverTarget && state.pointerType != null) {\n                    state.isOverTarget = true;\n                    triggerPressStart($d27d541f9569d26d$var$createEvent(state.target, e), state.pointerType);\n                }\n            };\n            pressProps.onPointerLeave = (e)=>{\n                if (e.pointerId === state.activePointerId && state.target && state.isOverTarget && state.pointerType != null) {\n                    state.isOverTarget = false;\n                    triggerPressEndEvent($d27d541f9569d26d$var$createEvent(state.target, e), state.pointerType, false);\n                    cancelOnPointerExit(e);\n                }\n            };\n            let onPointerUp = (e)=>{\n                if (e.pointerId === state.activePointerId && state.isPressed && e.button === 0 && state.target) {\n                    if ((0, $23f2114a1b82827e$export$4282f70798064fe0)(state.target, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e)) && state.pointerType != null) {\n                        // Wait for onClick to fire onPress. This avoids browser issues when the DOM\n                        // is mutated between onPointerUp and onClick, and is more compatible with third party libraries.\n                        // https://github.com/adobe/react-spectrum/issues/1513\n                        // https://issues.chromium.org/issues/40732224\n                        // However, iOS and Android do not focus or fire onClick after a long press.\n                        // We work around this by triggering a click ourselves after a timeout.\n                        // This timeout is canceled during the click event in case the real one fires first.\n                        // The timeout must be at least 32ms, because Safari on iOS delays the click event on\n                        // non-form elements without certain ARIA roles (for hover emulation).\n                        // https://github.com/WebKit/WebKit/blob/dccfae42bb29bd4bdef052e469f604a9387241c0/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm#L875-L892\n                        let clicked = false;\n                        let timeout = setTimeout(()=>{\n                            if (state.isPressed && state.target instanceof HTMLElement) {\n                                if (clicked) cancelEvent(e);\n                                else {\n                                    (0, $1969ac565cfec8d0$export$de79e2c695e052f3)(state.target);\n                                    state.target.click();\n                                }\n                            }\n                        }, 80);\n                        // Use a capturing listener to track if a click occurred.\n                        // If stopPropagation is called it may never reach our handler.\n                        addGlobalListener(e.currentTarget, 'click', ()=>clicked = true, true);\n                        state.disposables.push(()=>clearTimeout(timeout));\n                    } else cancelEvent(e);\n                    // Ignore subsequent onPointerLeave event before onClick on touch devices.\n                    state.isOverTarget = false;\n                }\n            };\n            let onPointerCancel = (e)=>{\n                cancelEvent(e);\n            };\n            pressProps.onDragStart = (e)=>{\n                if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n                // Safari does not call onPointerCancel when a drag starts, whereas Chrome and Firefox do.\n                cancelEvent(e);\n            };\n        } else if (process.env.NODE_ENV === 'test') {\n            // NOTE: this fallback branch is entirely used by unit tests.\n            // All browsers now support pointer events, but JSDOM still does not.\n            pressProps.onMouseDown = (e)=>{\n                // Only handle left clicks\n                if (e.button !== 0 || !(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n                if (state.ignoreEmulatedMouseEvents) {\n                    e.stopPropagation();\n                    return;\n                }\n                state.isPressed = true;\n                state.isOverTarget = true;\n                state.target = e.currentTarget;\n                state.pointerType = (0, $b5c62b033c25b96d$export$60278871457622de)(e.nativeEvent) ? 'virtual' : 'mouse';\n                // Flush sync so that focus moved during react re-renders occurs before we yield back to the browser.\n                let shouldStopPropagation = (0, $fL2C6$flushSync)(()=>triggerPressStart(e, state.pointerType));\n                if (shouldStopPropagation) e.stopPropagation();\n                if (preventFocusOnPress) {\n                    let dispose = (0, $a92dc41f639950be$export$cabe61c495ee3649)(e.target);\n                    if (dispose) state.disposables.push(dispose);\n                }\n                addGlobalListener((0, $d447af545b77c9f1$export$b204af158042fbac)(e.currentTarget), 'mouseup', onMouseUp, false);\n            };\n            pressProps.onMouseEnter = (e)=>{\n                if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n                let shouldStopPropagation = true;\n                if (state.isPressed && !state.ignoreEmulatedMouseEvents && state.pointerType != null) {\n                    state.isOverTarget = true;\n                    shouldStopPropagation = triggerPressStart(e, state.pointerType);\n                }\n                if (shouldStopPropagation) e.stopPropagation();\n            };\n            pressProps.onMouseLeave = (e)=>{\n                if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n                let shouldStopPropagation = true;\n                if (state.isPressed && !state.ignoreEmulatedMouseEvents && state.pointerType != null) {\n                    state.isOverTarget = false;\n                    shouldStopPropagation = triggerPressEndEvent(e, state.pointerType, false);\n                    cancelOnPointerExit(e);\n                }\n                if (shouldStopPropagation) e.stopPropagation();\n            };\n            pressProps.onMouseUp = (e)=>{\n                if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n                if (!state.ignoreEmulatedMouseEvents && e.button === 0 && !state.isPressed) triggerPressUpEvent(e, state.pointerType || 'mouse');\n            };\n            let onMouseUp = (e)=>{\n                // Only handle left clicks\n                if (e.button !== 0) return;\n                if (state.ignoreEmulatedMouseEvents) {\n                    state.ignoreEmulatedMouseEvents = false;\n                    return;\n                }\n                if (state.target && (0, $23f2114a1b82827e$export$4282f70798064fe0)(state.target, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e)) && state.pointerType != null) ;\n                else cancelEvent(e);\n                state.isOverTarget = false;\n            };\n            pressProps.onTouchStart = (e)=>{\n                if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n                let touch = $d27d541f9569d26d$var$getTouchFromEvent(e.nativeEvent);\n                if (!touch) return;\n                state.activePointerId = touch.identifier;\n                state.ignoreEmulatedMouseEvents = true;\n                state.isOverTarget = true;\n                state.isPressed = true;\n                state.target = e.currentTarget;\n                state.pointerType = 'touch';\n                if (!allowTextSelectionOnPress) (0, $cbf007e418543821$export$16a4697467175487)(state.target);\n                let shouldStopPropagation = triggerPressStart($d27d541f9569d26d$var$createTouchEvent(state.target, e), state.pointerType);\n                if (shouldStopPropagation) e.stopPropagation();\n                addGlobalListener((0, $d447af545b77c9f1$export$f21a1ffae260145a)(e.currentTarget), 'scroll', onScroll, true);\n            };\n            pressProps.onTouchMove = (e)=>{\n                if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n                if (!state.isPressed) {\n                    e.stopPropagation();\n                    return;\n                }\n                let touch = $d27d541f9569d26d$var$getTouchById(e.nativeEvent, state.activePointerId);\n                let shouldStopPropagation = true;\n                if (touch && $d27d541f9569d26d$var$isOverTarget(touch, e.currentTarget)) {\n                    if (!state.isOverTarget && state.pointerType != null) {\n                        state.isOverTarget = true;\n                        shouldStopPropagation = triggerPressStart($d27d541f9569d26d$var$createTouchEvent(state.target, e), state.pointerType);\n                    }\n                } else if (state.isOverTarget && state.pointerType != null) {\n                    state.isOverTarget = false;\n                    shouldStopPropagation = triggerPressEndEvent($d27d541f9569d26d$var$createTouchEvent(state.target, e), state.pointerType, false);\n                    cancelOnPointerExit($d27d541f9569d26d$var$createTouchEvent(state.target, e));\n                }\n                if (shouldStopPropagation) e.stopPropagation();\n            };\n            pressProps.onTouchEnd = (e)=>{\n                if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n                if (!state.isPressed) {\n                    e.stopPropagation();\n                    return;\n                }\n                let touch = $d27d541f9569d26d$var$getTouchById(e.nativeEvent, state.activePointerId);\n                let shouldStopPropagation = true;\n                if (touch && $d27d541f9569d26d$var$isOverTarget(touch, e.currentTarget) && state.pointerType != null) {\n                    triggerPressUpEvent($d27d541f9569d26d$var$createTouchEvent(state.target, e), state.pointerType);\n                    shouldStopPropagation = triggerPressEndEvent($d27d541f9569d26d$var$createTouchEvent(state.target, e), state.pointerType);\n                    triggerSyntheticClick(e.nativeEvent, state.target);\n                } else if (state.isOverTarget && state.pointerType != null) shouldStopPropagation = triggerPressEndEvent($d27d541f9569d26d$var$createTouchEvent(state.target, e), state.pointerType, false);\n                if (shouldStopPropagation) e.stopPropagation();\n                state.isPressed = false;\n                state.activePointerId = null;\n                state.isOverTarget = false;\n                state.ignoreEmulatedMouseEvents = true;\n                if (state.target && !allowTextSelectionOnPress) (0, $cbf007e418543821$export$b0d6fa1ab32e3295)(state.target);\n                removeAllGlobalListeners();\n            };\n            pressProps.onTouchCancel = (e)=>{\n                if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n                e.stopPropagation();\n                if (state.isPressed) cancelEvent($d27d541f9569d26d$var$createTouchEvent(state.target, e));\n            };\n            let onScroll = (e)=>{\n                if (state.isPressed && (0, $23f2114a1b82827e$export$4282f70798064fe0)((0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e), state.target)) cancelEvent({\n                    currentTarget: state.target,\n                    shiftKey: false,\n                    ctrlKey: false,\n                    metaKey: false,\n                    altKey: false\n                });\n            };\n            pressProps.onDragStart = (e)=>{\n                if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n                cancelEvent(e);\n            };\n        }\n        return pressProps;\n    }, [\n        addGlobalListener,\n        isDisabled,\n        preventFocusOnPress,\n        removeAllGlobalListeners,\n        allowTextSelectionOnPress,\n        cancelOnPointerExit,\n        triggerPressStart,\n        triggerClick,\n        triggerSyntheticClick\n    ]);\n    // Avoid onClick delay for double tap to zoom by default.\n    (0, $fL2C6$useEffect)(()=>{\n        if (!domRef || process.env.NODE_ENV === 'test') return;\n        const ownerDocument = (0, $d447af545b77c9f1$export$b204af158042fbac)(domRef.current);\n        if (!ownerDocument || !ownerDocument.head || ownerDocument.getElementById($d27d541f9569d26d$var$STYLE_ID)) return;\n        const style = ownerDocument.createElement('style');\n        style.id = $d27d541f9569d26d$var$STYLE_ID;\n        let nonce = (0, $2b2d34ff061957fb$export$2b85b721e524d74b)(ownerDocument);\n        if (nonce) style.nonce = nonce;\n        // touchAction: 'manipulation' is supposed to be equivalent, but in\n        // Safari it causes onPointerCancel not to fire on scroll.\n        // https://bugs.webkit.org/show_bug.cgi?id=240917\n        style.textContent = `\n@layer {\n  [${$d27d541f9569d26d$var$PRESSABLE_ATTRIBUTE}] {\n    touch-action: pan-x pan-y pinch-zoom;\n  }\n}\n    `.trim();\n        ownerDocument.head.prepend(style);\n    }, [\n        domRef\n    ]);\n    // Remove user-select: none in case component unmounts immediately after pressStart\n    (0, $fL2C6$useEffect)(()=>{\n        let state = ref.current;\n        return ()=>{\n            if (!allowTextSelectionOnPress) (0, $cbf007e418543821$export$b0d6fa1ab32e3295)(state.target ?? undefined);\n            for (let dispose of state.disposables)dispose();\n            state.disposables = [];\n        };\n    }, [\n        allowTextSelectionOnPress\n    ]);\n    return {\n        isPressed: isPressedProp || isPressed,\n        // oxlint-disable-next-line react/react-compiler\n        pressProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(domProps, pressProps, {\n            [$d27d541f9569d26d$var$PRESSABLE_ATTRIBUTE]: true\n        })\n    };\n}\nfunction $d27d541f9569d26d$var$isHTMLAnchorLink(target) {\n    return target.tagName === 'A' && target.hasAttribute('href');\n}\nfunction $d27d541f9569d26d$var$isValidKeyboardEvent(event, currentTarget) {\n    const { key: key, code: code } = event;\n    const element = currentTarget;\n    const role = element.getAttribute('role');\n    // Accessibility for keyboards. Space and Enter only.\n    // \"Spacebar\" is for IE 11\n    return (key === 'Enter' || key === ' ' || key === 'Spacebar' || code === 'Space') && !(element instanceof (0, $d447af545b77c9f1$export$f21a1ffae260145a)(element).HTMLInputElement && !$d27d541f9569d26d$var$isValidInputKey(element, key) || element instanceof (0, $d447af545b77c9f1$export$f21a1ffae260145a)(element).HTMLTextAreaElement || element.isContentEditable) && // Links should only trigger with Enter key\n    !((role === 'link' || !role && $d27d541f9569d26d$var$isHTMLAnchorLink(element)) && key !== 'Enter');\n}\nfunction $d27d541f9569d26d$var$getTouchFromEvent(event) {\n    const { targetTouches: targetTouches } = event;\n    if (targetTouches.length > 0) return targetTouches[0];\n    return null;\n}\nfunction $d27d541f9569d26d$var$getTouchById(event, pointerId) {\n    const changedTouches = event.changedTouches;\n    for(let i = 0; i < changedTouches.length; i++){\n        const touch = changedTouches[i];\n        if (touch.identifier === pointerId) return touch;\n    }\n    return null;\n}\nfunction $d27d541f9569d26d$var$createTouchEvent(target, e) {\n    let clientX = 0;\n    let clientY = 0;\n    if (e.targetTouches && e.targetTouches.length === 1) {\n        clientX = e.targetTouches[0].clientX;\n        clientY = e.targetTouches[0].clientY;\n    }\n    return {\n        currentTarget: target,\n        shiftKey: e.shiftKey,\n        ctrlKey: e.ctrlKey,\n        metaKey: e.metaKey,\n        altKey: e.altKey,\n        clientX: clientX,\n        clientY: clientY\n    };\n}\nfunction $d27d541f9569d26d$var$createEvent(target, e) {\n    let clientX = e.clientX;\n    let clientY = e.clientY;\n    return {\n        currentTarget: target,\n        shiftKey: e.shiftKey,\n        ctrlKey: e.ctrlKey,\n        metaKey: e.metaKey,\n        altKey: e.altKey,\n        clientX: clientX,\n        clientY: clientY,\n        key: e.key\n    };\n}\nfunction $d27d541f9569d26d$var$getPointClientRect(point) {\n    let offsetX = 0;\n    let offsetY = 0;\n    if (point.width !== undefined) offsetX = point.width / 2;\n    else if (point.radiusX !== undefined) offsetX = point.radiusX;\n    if (point.height !== undefined) offsetY = point.height / 2;\n    else if (point.radiusY !== undefined) offsetY = point.radiusY;\n    return {\n        top: point.clientY - offsetY,\n        right: point.clientX + offsetX,\n        bottom: point.clientY + offsetY,\n        left: point.clientX - offsetX\n    };\n}\nfunction $d27d541f9569d26d$var$areRectanglesOverlapping(a, b) {\n    // check if they cannot overlap on x axis\n    if (a.left > b.right || b.left > a.right) return false;\n    // check if they cannot overlap on y axis\n    if (a.top > b.bottom || b.top > a.bottom) return false;\n    return true;\n}\nfunction $d27d541f9569d26d$var$isOverTarget(point, target) {\n    let rect = target.getBoundingClientRect();\n    let pointRect = $d27d541f9569d26d$var$getPointClientRect(point);\n    return $d27d541f9569d26d$var$areRectanglesOverlapping(rect, pointRect);\n}\nfunction $d27d541f9569d26d$var$shouldPreventDefaultUp(target) {\n    if (target instanceof HTMLInputElement) return false;\n    if (target instanceof HTMLButtonElement) return target.type !== 'submit' && target.type !== 'reset';\n    if ($d27d541f9569d26d$var$isHTMLAnchorLink(target)) return false;\n    return true;\n}\nfunction $d27d541f9569d26d$var$shouldPreventDefaultKeyboard(target, key) {\n    // Don't prevent the contextmenu shortcut on mac.\n    if ((0, $2add3ce32c6007eb$export$9ac100e40613ea10)() && key === 'Enter') return false;\n    if (target instanceof HTMLInputElement) {\n        if (key === 'Enter' && (target.type === 'checkbox' || target.type === 'radio')) // Enter on a checkbox or radio should do an implicit form submission, but not toggle the input.\n        return false;\n        return !$d27d541f9569d26d$var$isValidInputKey(target, key);\n    }\n    return $d27d541f9569d26d$var$shouldPreventDefaultUp(target);\n}\nconst $d27d541f9569d26d$var$nonTextInputTypes = new Set([\n    'checkbox',\n    'radio',\n    'range',\n    'color',\n    'file',\n    'image',\n    'button',\n    'submit',\n    'reset'\n]);\nfunction $d27d541f9569d26d$var$isValidInputKey(target, key) {\n    // Only space should toggle checkboxes and radios, not enter.\n    return target.type === 'checkbox' || target.type === 'radio' ? key === ' ' : $d27d541f9569d26d$var$nonTextInputTypes.has(target.type);\n}\n\n\nexport {$d27d541f9569d26d$export$45712eceda6fad21 as usePress};\n//# sourceMappingURL=usePress.mjs.map\n","import {createSyntheticEvent as $a92dc41f639950be$export$525bc4921d56d4a, setEventTarget as $a92dc41f639950be$export$c2b7abe5d61ec696, useSyntheticBlurEvent as $a92dc41f639950be$export$715c682d09d639cc} from \"./utils.mjs\";\nimport {getActiveElement as $23f2114a1b82827e$export$cd4e5573fbe2b576, getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29, nodeContains as $23f2114a1b82827e$export$4282f70798064fe0} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {getOwnerDocument as $d447af545b77c9f1$export$b204af158042fbac} from \"../utils/domHelpers.mjs\";\nimport {useGlobalListeners as $48a7d519b337145d$export$4eaf04e54aa8eed6} from \"../utils/useGlobalListeners.mjs\";\nimport {useRef as $5319z$useRef, useCallback as $5319z$useCallback} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\n\n\n\nfunction $2c9edc598a03d523$export$420e68273165f4ec(props) {\n    let { isDisabled: isDisabled, onBlurWithin: onBlurWithin, onFocusWithin: onFocusWithin, onFocusWithinChange: onFocusWithinChange } = props;\n    let state = (0, $5319z$useRef)({\n        isFocusWithin: false\n    });\n    let { addGlobalListener: addGlobalListener, removeAllGlobalListeners: removeAllGlobalListeners } = (0, $48a7d519b337145d$export$4eaf04e54aa8eed6)();\n    let onBlur = (0, $5319z$useCallback)((e)=>{\n        // Ignore events bubbling through portals.\n        if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n        // We don't want to trigger onBlurWithin and then immediately onFocusWithin again\n        // when moving focus inside the element. Only trigger if the currentTarget doesn't\n        // include the relatedTarget (where focus is moving).\n        if (state.current.isFocusWithin && !(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, e.relatedTarget)) {\n            state.current.isFocusWithin = false;\n            removeAllGlobalListeners();\n            if (onBlurWithin) onBlurWithin(e);\n            if (onFocusWithinChange) onFocusWithinChange(false);\n        }\n    }, [\n        onBlurWithin,\n        onFocusWithinChange,\n        state,\n        removeAllGlobalListeners\n    ]);\n    let onSyntheticFocus = (0, $a92dc41f639950be$export$715c682d09d639cc)(onBlur);\n    let onFocus = (0, $5319z$useCallback)((e)=>{\n        // Ignore events bubbling through portals.\n        if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n        // Double check that document.activeElement actually matches e.target in case a previously chained\n        // focus handler already moved focus somewhere else.\n        let eventTarget = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n        const ownerDocument = (0, $d447af545b77c9f1$export$b204af158042fbac)(eventTarget);\n        const activeElement = (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)(ownerDocument);\n        if (!state.current.isFocusWithin && activeElement === eventTarget) {\n            if (onFocusWithin) onFocusWithin(e);\n            if (onFocusWithinChange) onFocusWithinChange(true);\n            state.current.isFocusWithin = true;\n            onSyntheticFocus(e);\n            // Browsers don't fire blur events when elements are removed from the DOM.\n            // However, if a focus event occurs outside the element we're tracking, we\n            // can manually fire onBlur.\n            let currentTarget = e.currentTarget;\n            addGlobalListener(ownerDocument, 'focus', (e)=>{\n                let eventTarget = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n                if (state.current.isFocusWithin && !(0, $23f2114a1b82827e$export$4282f70798064fe0)(currentTarget, eventTarget)) {\n                    let nativeEvent = new ownerDocument.defaultView.FocusEvent('blur', {\n                        relatedTarget: eventTarget\n                    });\n                    (0, $a92dc41f639950be$export$c2b7abe5d61ec696)(nativeEvent, currentTarget);\n                    let event = (0, $a92dc41f639950be$export$525bc4921d56d4a)(nativeEvent);\n                    onBlur(event);\n                }\n            }, {\n                capture: true\n            });\n        }\n    }, [\n        onFocusWithin,\n        onFocusWithinChange,\n        onSyntheticFocus,\n        addGlobalListener,\n        onBlur\n    ]);\n    if (isDisabled) return {\n        focusWithinProps: {\n            // These cannot be null, that would conflict in mergeProps\n            onFocus: undefined,\n            onBlur: undefined\n        }\n    };\n    return {\n        focusWithinProps: {\n            onFocus: onFocus,\n            onBlur: onBlur\n        }\n    };\n}\n\n\nexport {$2c9edc598a03d523$export$420e68273165f4ec as useFocusWithin};\n//# sourceMappingURL=useFocusWithin.mjs.map\n","import {isFocusVisible as $8f5a2122b0992be3$export$b9b3dfddab17db27, useFocusVisibleListener as $8f5a2122b0992be3$export$ec71b4b83ac08ec3} from \"../interactions/useFocusVisible.mjs\";\nimport {useFocus as $1e74c67db218ce67$export$f8168d8dd8fd66e6} from \"../interactions/useFocus.mjs\";\nimport {useFocusWithin as $2c9edc598a03d523$export$420e68273165f4ec} from \"../interactions/useFocusWithin.mjs\";\nimport {useRef as $3s2y0$useRef, useState as $3s2y0$useState, useCallback as $3s2y0$useCallback} from \"react\";\n\n\n\n\n\nfunction $0c4a58759813079a$export$4e328f61c538687f(props = {}) {\n    let { autoFocus: autoFocus = false, isTextInput: isTextInput, within: within } = props;\n    let state = (0, $3s2y0$useRef)({\n        isFocused: false,\n        isFocusVisible: autoFocus || (0, $8f5a2122b0992be3$export$b9b3dfddab17db27)()\n    });\n    let [isFocused, setFocused] = (0, $3s2y0$useState)(false);\n    let [isFocusVisibleState, setFocusVisible] = (0, $3s2y0$useState)(// oxlint-disable-next-line react/react-compiler\n    ()=>state.current.isFocused && state.current.isFocusVisible);\n    let updateState = (0, $3s2y0$useCallback)(()=>setFocusVisible(state.current.isFocused && state.current.isFocusVisible), []);\n    let onFocusChange = (0, $3s2y0$useCallback)((isFocused)=>{\n        state.current.isFocused = isFocused;\n        state.current.isFocusVisible = (0, $8f5a2122b0992be3$export$b9b3dfddab17db27)();\n        setFocused(isFocused);\n        updateState();\n    }, [\n        updateState\n    ]);\n    (0, $8f5a2122b0992be3$export$ec71b4b83ac08ec3)((isFocusVisible)=>{\n        state.current.isFocusVisible = isFocusVisible;\n        updateState();\n    }, [\n        isTextInput,\n        isFocused\n    ], {\n        enabled: isFocused,\n        isTextInput: isTextInput\n    });\n    let { focusProps: focusProps } = (0, $1e74c67db218ce67$export$f8168d8dd8fd66e6)({\n        isDisabled: within,\n        onFocusChange: onFocusChange\n    });\n    let { focusWithinProps: focusWithinProps } = (0, $2c9edc598a03d523$export$420e68273165f4ec)({\n        isDisabled: !within,\n        onFocusWithinChange: onFocusChange\n    });\n    return {\n        isFocused: isFocused,\n        isFocusVisible: isFocusVisibleState,\n        focusProps: within ? focusWithinProps : focusProps\n    };\n}\n\n\nexport {$0c4a58759813079a$export$4e328f61c538687f as useFocusRing};\n//# sourceMappingURL=useFocusRing.mjs.map\n","import {getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29, nodeContains as $23f2114a1b82827e$export$4282f70798064fe0} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {getOwnerDocument as $d447af545b77c9f1$export$b204af158042fbac} from \"../utils/domHelpers.mjs\";\nimport {useGlobalListeners as $48a7d519b337145d$export$4eaf04e54aa8eed6} from \"../utils/useGlobalListeners.mjs\";\nimport {useState as $hZqKM$useState, useRef as $hZqKM$useRef, useEffect as $hZqKM$useEffect, useMemo as $hZqKM$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\n\n\n// iOS fires onPointerEnter twice: once with pointerType=\"touch\" and again with pointerType=\"mouse\".\n// We want to ignore these emulated events so they do not trigger hover behavior.\n// See https://bugs.webkit.org/show_bug.cgi?id=214609.\nlet $e969f22b6713ca4a$var$globalIgnoreEmulatedMouseEvents = false;\nlet $e969f22b6713ca4a$var$hoverCount = 0;\nfunction $e969f22b6713ca4a$var$setGlobalIgnoreEmulatedMouseEvents() {\n    $e969f22b6713ca4a$var$globalIgnoreEmulatedMouseEvents = true;\n    // Clear globalIgnoreEmulatedMouseEvents after a short timeout. iOS fires onPointerEnter\n    // with pointerType=\"mouse\" immediately after onPointerUp and before onFocus. On other\n    // devices that don't have this quirk, we don't want to ignore a mouse hover sometime in\n    // the distant future because a user previously touched the element.\n    setTimeout(()=>{\n        $e969f22b6713ca4a$var$globalIgnoreEmulatedMouseEvents = false;\n    }, 500);\n}\nfunction $e969f22b6713ca4a$var$handleGlobalPointerEvent(e) {\n    if (e.pointerType === 'touch') $e969f22b6713ca4a$var$setGlobalIgnoreEmulatedMouseEvents();\n}\nfunction $e969f22b6713ca4a$var$setupGlobalTouchEvents() {\n    let ownerDocument = (0, $d447af545b77c9f1$export$b204af158042fbac)(null);\n    if (typeof ownerDocument === 'undefined') return;\n    if ($e969f22b6713ca4a$var$hoverCount === 0) {\n        if (typeof PointerEvent !== 'undefined') ownerDocument.addEventListener('pointerup', $e969f22b6713ca4a$var$handleGlobalPointerEvent);\n        else if (process.env.NODE_ENV === 'test') ownerDocument.addEventListener('touchend', $e969f22b6713ca4a$var$setGlobalIgnoreEmulatedMouseEvents);\n    }\n    $e969f22b6713ca4a$var$hoverCount++;\n    return ()=>{\n        $e969f22b6713ca4a$var$hoverCount--;\n        if ($e969f22b6713ca4a$var$hoverCount > 0) return;\n        if (typeof PointerEvent !== 'undefined') ownerDocument.removeEventListener('pointerup', $e969f22b6713ca4a$var$handleGlobalPointerEvent);\n        else if (process.env.NODE_ENV === 'test') ownerDocument.removeEventListener('touchend', $e969f22b6713ca4a$var$setGlobalIgnoreEmulatedMouseEvents);\n    };\n}\nfunction $e969f22b6713ca4a$export$ae780daf29e6d456(props) {\n    let { onHoverStart: onHoverStart, onHoverChange: onHoverChange, onHoverEnd: onHoverEnd, isDisabled: isDisabled } = props;\n    let [isHovered, setHovered] = (0, $hZqKM$useState)(false);\n    let state = (0, $hZqKM$useRef)({\n        isHovered: false,\n        ignoreEmulatedMouseEvents: false,\n        pointerType: '',\n        target: null\n    }).current;\n    (0, $hZqKM$useEffect)($e969f22b6713ca4a$var$setupGlobalTouchEvents, []);\n    let { addGlobalListener: addGlobalListener, removeAllGlobalListeners: removeAllGlobalListeners } = (0, $48a7d519b337145d$export$4eaf04e54aa8eed6)();\n    let { hoverProps: hoverProps, triggerHoverEnd: triggerHoverEnd } = (0, $hZqKM$useMemo)(()=>{\n        let triggerHoverStart = (event, pointerType)=>{\n            state.pointerType = pointerType;\n            if (isDisabled || pointerType === 'touch' || state.isHovered || !(0, $23f2114a1b82827e$export$4282f70798064fe0)(event.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(event))) return;\n            state.isHovered = true;\n            let target = event.currentTarget;\n            state.target = target;\n            // When an element that is hovered over is removed, no pointerleave event is fired by the browser,\n            // even though the originally hovered target may have shrunk in size so it is no longer hovered.\n            // However, a pointerover event will be fired on the new target the mouse is over.\n            // In Chrome this happens immediately. In Safari and Firefox, it happens upon moving the mouse one pixel.\n            addGlobalListener((0, $d447af545b77c9f1$export$b204af158042fbac)((0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(event)), 'pointerover', (e)=>{\n                if (state.isHovered && state.target && !(0, $23f2114a1b82827e$export$4282f70798064fe0)(state.target, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) // oxlint-disable-next-line react/react-compiler\n                triggerHoverEnd(e, e.pointerType);\n            }, {\n                capture: true\n            });\n            if (onHoverStart) onHoverStart({\n                type: 'hoverstart',\n                target: target,\n                pointerType: pointerType\n            });\n            if (onHoverChange) onHoverChange(true);\n            setHovered(true);\n        };\n        let triggerHoverEnd = (event, pointerType)=>{\n            let target = state.target;\n            state.pointerType = '';\n            state.target = null;\n            if (pointerType === 'touch' || !state.isHovered || !target) return;\n            state.isHovered = false;\n            removeAllGlobalListeners();\n            if (onHoverEnd) onHoverEnd({\n                type: 'hoverend',\n                target: target,\n                pointerType: pointerType\n            });\n            if (onHoverChange) onHoverChange(false);\n            setHovered(false);\n        };\n        let hoverProps = {};\n        if (typeof PointerEvent !== 'undefined') {\n            hoverProps.onPointerEnter = (e)=>{\n                if ($e969f22b6713ca4a$var$globalIgnoreEmulatedMouseEvents && e.pointerType === 'mouse') return;\n                triggerHoverStart(e, e.pointerType);\n            };\n            hoverProps.onPointerLeave = (e)=>{\n                if (!isDisabled && (0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) triggerHoverEnd(e, e.pointerType);\n            };\n        } else if (process.env.NODE_ENV === 'test') {\n            hoverProps.onTouchStart = ()=>{\n                state.ignoreEmulatedMouseEvents = true;\n            };\n            hoverProps.onMouseEnter = (e)=>{\n                if (!state.ignoreEmulatedMouseEvents && !$e969f22b6713ca4a$var$globalIgnoreEmulatedMouseEvents) triggerHoverStart(e, 'mouse');\n                state.ignoreEmulatedMouseEvents = false;\n            };\n            hoverProps.onMouseLeave = (e)=>{\n                if (!isDisabled && (0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) triggerHoverEnd(e, 'mouse');\n            };\n        }\n        return {\n            hoverProps: hoverProps,\n            triggerHoverEnd: triggerHoverEnd\n        };\n    }, [\n        onHoverStart,\n        onHoverChange,\n        onHoverEnd,\n        isDisabled,\n        state,\n        addGlobalListener,\n        removeAllGlobalListeners\n    ]);\n    (0, $hZqKM$useEffect)(()=>{\n        // Call the triggerHoverEnd as soon as isDisabled changes to true\n        // Safe to call triggerHoverEnd, it will early return if we aren't currently hovering\n        if (isDisabled) triggerHoverEnd({\n            currentTarget: state.target\n        }, state.pointerType);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [\n        isDisabled\n    ]);\n    return {\n        hoverProps: hoverProps,\n        isHovered: isHovered\n    };\n}\n\n\nexport {$e969f22b6713ca4a$export$ae780daf29e6d456 as useHover};\n//# sourceMappingURL=useHover.mjs.map\n","import {dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415} from \"./utils.mjs\";\nimport {createHideableComponent as $32wDz$createHideableComponent} from \"react-aria/private/collections/Hidden\";\nimport $32wDz$react, {createContext as $32wDz$createContext} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $43a3b93638fe5db9$export$75b6ee27786ba447 = /*#__PURE__*/ (0, $32wDz$createContext)({});\nconst $43a3b93638fe5db9$export$b04be29aa201d4f5 = /*#__PURE__*/ (0, $32wDz$createHideableComponent)(function Label(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $43a3b93638fe5db9$export$75b6ee27786ba447);\n    let { elementType: elementType = 'label', ...labelProps } = props;\n    let ElementType = (0, $7230ffa83bc0c2cf$export$df3a06d6289f983e)[elementType];\n    // @ts-ignore\n    return /*#__PURE__*/ (0, $32wDz$react).createElement(ElementType, {\n        className: \"react-aria-Label\",\n        ...labelProps,\n        ref: ref\n    });\n});\n\n\nexport {$43a3b93638fe5db9$export$75b6ee27786ba447 as LabelContext, $43a3b93638fe5db9$export$b04be29aa201d4f5 as Label};\n//# sourceMappingURL=Label.mjs.map\n","import {useId as $390e54f620492c70$export$f680877a34711e37} from \"../utils/useId.mjs\";\nimport {useLabels as $e8ac3c3f5d4bae7f$export$d6875122194c7b44} from \"../utils/useLabels.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $0beb20c9744a2065$export$8467354a121f1b9f(props) {\n    let { id: id, label: label, 'aria-labelledby': ariaLabelledby, 'aria-label': ariaLabel, labelElementType: labelElementType = 'label' } = props;\n    id = (0, $390e54f620492c70$export$f680877a34711e37)(id);\n    let labelId = (0, $390e54f620492c70$export$f680877a34711e37)();\n    let labelProps = {};\n    if (label) {\n        ariaLabelledby = ariaLabelledby ? `${labelId} ${ariaLabelledby}` : labelId;\n        labelProps = {\n            id: labelId,\n            htmlFor: labelElementType === 'label' ? id : undefined\n        };\n    } else if (!ariaLabelledby && !ariaLabel && process.env.NODE_ENV !== 'production') console.warn('If you do not provide a visible label, you must specify an aria-label or aria-labelledby attribute for accessibility');\n    let fieldProps = (0, $e8ac3c3f5d4bae7f$export$d6875122194c7b44)({\n        id: id,\n        'aria-label': ariaLabel,\n        'aria-labelledby': ariaLabelledby\n    });\n    return {\n        labelProps: labelProps,\n        fieldProps: fieldProps\n    };\n}\n\n\nexport {$0beb20c9744a2065$export$8467354a121f1b9f as useLabel};\n//# sourceMappingURL=useLabel.mjs.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ let $1dfb119a85e764e5$var$formatterCache = new Map();\nlet $1dfb119a85e764e5$var$supportsSignDisplay = false;\ntry {\n    $1dfb119a85e764e5$var$supportsSignDisplay = new Intl.NumberFormat('de-DE', {\n        signDisplay: 'exceptZero'\n    }).resolvedOptions().signDisplay === 'exceptZero';\n// eslint-disable-next-line no-empty\n} catch  {}\nclass $1dfb119a85e764e5$export$cc77c4ff7e8673c5 {\n    constructor(locale, options = {}){\n        this.numberFormatter = $1dfb119a85e764e5$var$getCachedNumberFormatter(locale, options);\n        this.options = options;\n    }\n    /**\n   * Formats a number value as a string, according to the locale and options provided to the\n   * constructor.\n   */ format(value) {\n        let res = '';\n        if (!$1dfb119a85e764e5$var$supportsSignDisplay && this.options.signDisplay != null) res = $1dfb119a85e764e5$export$711b50b3c525e0f2(this.numberFormatter, this.options.signDisplay, value);\n        else res = this.numberFormatter.format(value);\n        return res;\n    }\n    /** Formats a number to an array of parts such as separators, digits, punctuation, and more. */ formatToParts(value) {\n        // TODO: implement signDisplay for formatToParts\n        return this.numberFormatter.formatToParts(value);\n    }\n    /** Formats a number range as a string. */ formatRange(start, end) {\n        if (typeof this.numberFormatter.formatRange === 'function') return this.numberFormatter.formatRange(start, end);\n        if (end < start) throw new RangeError('End date must be >= start date');\n        // Very basic fallback for old browsers.\n        return `${this.format(start)} \\u{2013} ${this.format(end)}`;\n    }\n    /** Formats a number range as an array of parts. */ formatRangeToParts(start, end) {\n        if (typeof this.numberFormatter.formatRangeToParts === 'function') return this.numberFormatter.formatRangeToParts(start, end);\n        if (end < start) throw new RangeError('End date must be >= start date');\n        let startParts = this.numberFormatter.formatToParts(start);\n        let endParts = this.numberFormatter.formatToParts(end);\n        return [\n            ...startParts.map((p)=>({\n                    ...p,\n                    source: 'startRange'\n                })),\n            {\n                type: 'literal',\n                value: \" \\u2013 \",\n                source: 'shared'\n            },\n            ...endParts.map((p)=>({\n                    ...p,\n                    source: 'endRange'\n                }))\n        ];\n    }\n    /** Returns the resolved formatting options based on the values passed to the constructor. */ resolvedOptions() {\n        let options = this.numberFormatter.resolvedOptions();\n        if (!$1dfb119a85e764e5$var$supportsSignDisplay && this.options.signDisplay != null) options = {\n            ...options,\n            signDisplay: this.options.signDisplay\n        };\n        return options;\n    }\n}\nfunction $1dfb119a85e764e5$var$getCachedNumberFormatter(locale, options = {}) {\n    let { numberingSystem: numberingSystem } = options;\n    if (numberingSystem && locale.includes('-nu-')) {\n        if (!locale.includes('-u-')) locale += '-u-';\n        locale += `-nu-${numberingSystem}`;\n    }\n    let cacheKey = locale + (options ? Object.entries(options).sort((a, b)=>a[0] < b[0] ? -1 : 1).join() : '');\n    if ($1dfb119a85e764e5$var$formatterCache.has(cacheKey)) return $1dfb119a85e764e5$var$formatterCache.get(cacheKey);\n    let numberFormatter = new Intl.NumberFormat(locale, options);\n    $1dfb119a85e764e5$var$formatterCache.set(cacheKey, numberFormatter);\n    return numberFormatter;\n}\nfunction $1dfb119a85e764e5$export$711b50b3c525e0f2(numberFormat, signDisplay, num) {\n    if (signDisplay === 'auto') return numberFormat.format(num);\n    else if (signDisplay === 'never') return numberFormat.format(Math.abs(num));\n    else {\n        let needsPositiveSign = false;\n        if (signDisplay === 'always') needsPositiveSign = num > 0 || Object.is(num, 0);\n        else if (signDisplay === 'exceptZero') {\n            if (Object.is(num, -0) || Object.is(num, 0)) num = Math.abs(num);\n            else needsPositiveSign = num > 0;\n        }\n        if (needsPositiveSign) {\n            let negative = numberFormat.format(-num);\n            let noSign = numberFormat.format(num);\n            // ignore RTL/LTR marker character\n            let minus = negative.replace(noSign, '').replace(/\\u200e|\\u061C/, '');\n            if ([\n                ...minus\n            ].length !== 1) console.warn('@react-aria/i18n polyfill for NumberFormat signDisplay: Unsupported case');\n            let positive = negative.replace(noSign, '!!!').replace(minus, '+').replace('!!!', noSign);\n            return positive;\n        } else return numberFormat.format(num);\n    }\n}\n\n\nexport {$1dfb119a85e764e5$export$cc77c4ff7e8673c5 as NumberFormatter, $1dfb119a85e764e5$export$711b50b3c525e0f2 as numberFormatSignDisplayPolyfill};\n//# sourceMappingURL=NumberFormatter.mjs.map\n","import {NumberFormatter as $1dfb119a85e764e5$export$cc77c4ff7e8673c5} from \"./NumberFormatter.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $eb76cf4feb040f77$var$CURRENCY_SIGN_REGEX = new RegExp('^.*\\\\(.*\\\\).*$');\nconst $eb76cf4feb040f77$var$NUMBERING_SYSTEMS = [\n    'latn',\n    'arab',\n    'hanidec',\n    'deva',\n    'beng',\n    'fullwide'\n];\nclass $eb76cf4feb040f77$export$cd11ab140839f11d {\n    constructor(locale, options = {}){\n        this.locale = locale;\n        this.options = options;\n    }\n    /**\n   * Parses the given string to a number. Returns NaN if a valid number could not be parsed.\n   */ parse(value) {\n        return $eb76cf4feb040f77$var$getNumberParserImpl(this.locale, this.options, value).parse(value);\n    }\n    /**\n   * Returns whether the given string could potentially be a valid number. This should be used to\n   * validate user input as the user types. If a `minValue` or `maxValue` is provided, the validity\n   * of the minus/plus sign characters can be checked.\n   */ isValidPartialNumber(value, minValue, maxValue) {\n        return $eb76cf4feb040f77$var$getNumberParserImpl(this.locale, this.options, value).isValidPartialNumber(value, minValue, maxValue);\n    }\n    /**\n   * Returns a numbering system for which the given string is valid in the current locale.\n   * If no numbering system could be detected, the default numbering system for the current\n   * locale is returned.\n   */ getNumberingSystem(value) {\n        return $eb76cf4feb040f77$var$getNumberParserImpl(this.locale, this.options, value).options.numberingSystem;\n    }\n}\nconst $eb76cf4feb040f77$var$numberParserCache = new Map();\nfunction $eb76cf4feb040f77$var$getNumberParserImpl(locale, options, value) {\n    // First try the default numbering system for the provided locale\n    let defaultParser = $eb76cf4feb040f77$var$getCachedNumberParser(locale, options);\n    // If that doesn't match, and the locale doesn't include a hard coded numbering system,\n    // try each of the other supported numbering systems until we find one that matches.\n    if (!locale.includes('-nu-') && !defaultParser.isValidPartialNumber(value)) {\n        for (let numberingSystem of $eb76cf4feb040f77$var$NUMBERING_SYSTEMS)if (numberingSystem !== defaultParser.options.numberingSystem) {\n            let parser = $eb76cf4feb040f77$var$getCachedNumberParser(locale + (locale.includes('-u-') ? '-nu-' : '-u-nu-') + numberingSystem, options);\n            if (parser.isValidPartialNumber(value)) return parser;\n        }\n    }\n    return defaultParser;\n}\nfunction $eb76cf4feb040f77$var$getCachedNumberParser(locale, options) {\n    let cacheKey = locale + (options ? Object.entries(options).sort((a, b)=>a[0] < b[0] ? -1 : 1).join() : '');\n    let parser = $eb76cf4feb040f77$var$numberParserCache.get(cacheKey);\n    if (!parser) {\n        parser = new $eb76cf4feb040f77$var$NumberParserImpl(locale, options);\n        $eb76cf4feb040f77$var$numberParserCache.set(cacheKey, parser);\n    }\n    return parser;\n}\n// The actual number parser implementation. Instances of this class are cached\n// based on the locale, options, and detected numbering system.\nclass $eb76cf4feb040f77$var$NumberParserImpl {\n    constructor(locale, options = {}){\n        this.locale = locale;\n        // see https://tc39.es/ecma402/#sec-setnfdigitoptions, when using roundingIncrement, the maximumFractionDigits and minimumFractionDigits must be equal\n        // by default, they are 0 and 3 respectively, so we set them to 0 if neither are set\n        if (options.roundingIncrement !== 1 && options.roundingIncrement != null) {\n            if (options.maximumFractionDigits == null && options.minimumFractionDigits == null) {\n                options.maximumFractionDigits = 0;\n                options.minimumFractionDigits = 0;\n            } else if (options.maximumFractionDigits == null) options.maximumFractionDigits = options.minimumFractionDigits;\n            else if (options.minimumFractionDigits == null) options.minimumFractionDigits = options.maximumFractionDigits;\n        // if both are specified, let the normal Range Error be thrown\n        }\n        this.formatter = new Intl.NumberFormat(locale, options);\n        this.options = this.formatter.resolvedOptions();\n        this.symbols = $eb76cf4feb040f77$var$getSymbols(locale, this.formatter, this.options, options);\n        if (this.options.style === 'percent' && ((this.options.minimumFractionDigits ?? 0) > 18 || (this.options.maximumFractionDigits ?? 0) > 18)) console.warn('NumberParser cannot handle percentages with greater than 18 decimal places, please reduce the number in your options.');\n    }\n    parse(value) {\n        let isGroupSymbolAllowed = this.formatter.resolvedOptions().useGrouping;\n        // to parse the number, we need to remove anything that isn't actually part of the number, for example we want '-10.40' not '-10.40 USD'\n        let fullySanitizedValue = this.sanitize(value);\n        // Return NaN if there is a group symbol but useGrouping is false\n        if (!isGroupSymbolAllowed && this.symbols.group && fullySanitizedValue.includes(this.symbols.group)) return NaN;\n        else if (this.symbols.group) fullySanitizedValue = fullySanitizedValue.replaceAll(this.symbols.group, '');\n        if (this.symbols.decimal) fullySanitizedValue = fullySanitizedValue.replace(this.symbols.decimal, '.');\n        if (this.symbols.minusSign) fullySanitizedValue = fullySanitizedValue.replace(this.symbols.minusSign, '-');\n        fullySanitizedValue = fullySanitizedValue.replace(this.symbols.numeral, this.symbols.index);\n        if (this.options.style === 'percent') {\n            // javascript is bad at dividing by 100 and maintaining the same significant figures, so perform it on the string before parsing\n            let isNegative = fullySanitizedValue.indexOf('-');\n            fullySanitizedValue = fullySanitizedValue.replace('-', '');\n            fullySanitizedValue = fullySanitizedValue.replace('+', '');\n            let index = fullySanitizedValue.indexOf('.');\n            if (index === -1) index = fullySanitizedValue.length;\n            fullySanitizedValue = fullySanitizedValue.replace('.', '');\n            if (index - 2 === 0) fullySanitizedValue = `0.${fullySanitizedValue}`;\n            else if (index - 2 === -1) fullySanitizedValue = `0.0${fullySanitizedValue}`;\n            else if (index - 2 === -2) fullySanitizedValue = '0.00';\n            else fullySanitizedValue = `${fullySanitizedValue.slice(0, index - 2)}.${fullySanitizedValue.slice(index - 2)}`;\n            if (isNegative > -1) fullySanitizedValue = `-${fullySanitizedValue}`;\n        }\n        let newValue = fullySanitizedValue ? +fullySanitizedValue : NaN;\n        if (isNaN(newValue)) return NaN;\n        if (this.options.style === 'percent') {\n            // extra step for rounding percents to what our formatter would output\n            let options = {\n                ...this.options,\n                style: 'decimal',\n                minimumFractionDigits: Math.min((this.options.minimumFractionDigits ?? 0) + 2, 20),\n                maximumFractionDigits: Math.min((this.options.maximumFractionDigits ?? 0) + 2, 20)\n            };\n            return new $eb76cf4feb040f77$export$cd11ab140839f11d(this.locale, options).parse(new (0, $1dfb119a85e764e5$export$cc77c4ff7e8673c5)(this.locale, options).format(newValue));\n        }\n        // accounting will always be stripped to a positive number, so if it's accounting and has a () around everything, then we need to make it negative again\n        if (this.options.currencySign === 'accounting' && $eb76cf4feb040f77$var$CURRENCY_SIGN_REGEX.test(value)) newValue = -1 * newValue;\n        return newValue;\n    }\n    sanitize(value) {\n        let isGroupSymbolAllowed = this.formatter.resolvedOptions().useGrouping;\n        // If the value is only a unit and it matches one of the formatted numbers where the value is part of the unit and doesn't have any numerals, then\n        // return the known value for that case.\n        if (this.symbols.noNumeralUnits.length > 0 && this.symbols.noNumeralUnits.find((obj)=>obj.unit === value)) return this.symbols.noNumeralUnits.find((obj)=>obj.unit === value).value.toString();\n        value = value.replace(this.symbols.literals, '');\n        // Replace the ASCII minus sign with the minus sign used in the current locale\n        // so that both are allowed in case the user's keyboard doesn't have the locale's minus sign.\n        if (this.symbols.minusSign) value = value.replace('-', this.symbols.minusSign);\n        // In arab numeral system, their decimal character is 1643, but most keyboards don't type that\n        // instead they use the , (44) character or apparently the (1548) character.\n        if (this.options.numberingSystem === 'arab') {\n            if (this.symbols.decimal) {\n                value = $eb76cf4feb040f77$var$replaceAll(value, ',', this.symbols.decimal);\n                value = $eb76cf4feb040f77$var$replaceAll(value, String.fromCharCode(1548), this.symbols.decimal);\n            }\n            if (this.symbols.group && isGroupSymbolAllowed) value = $eb76cf4feb040f77$var$replaceAll(value, '.', this.symbols.group);\n        }\n        // In some locale styles, such as swiss currency, the group character can be a special single quote\n        // that keyboards don't typically have. This expands the character to include the easier to type single quote.\n        if (this.symbols.group === \"\\u2019\" && value.includes(\"'\") && isGroupSymbolAllowed) value = $eb76cf4feb040f77$var$replaceAll(value, \"'\", this.symbols.group);\n        // On newer ICU versions, the special single quote has been normalized, so we need to backport.\n        if (this.symbols.group === \"'\" && value.includes(\"\\u2019\") && isGroupSymbolAllowed) value = $eb76cf4feb040f77$var$replaceAll(value, \"\\u2019\", this.symbols.group);\n        // fr-FR group character is narrow non-breaking space, char code 8239 (U+202F), but that's not a key on the french keyboard,\n        // so allow space and non-breaking space as a group char as well\n        if (this.options.locale === 'fr-FR' && this.symbols.group && isGroupSymbolAllowed) {\n            value = $eb76cf4feb040f77$var$replaceAll(value, ' ', this.symbols.group);\n            value = $eb76cf4feb040f77$var$replaceAll(value, /\\u00A0/g, this.symbols.group);\n        }\n        return value;\n    }\n    isValidPartialNumber(value, minValue = -Infinity, maxValue = Infinity) {\n        let isGroupSymbolAllowed = this.formatter.resolvedOptions().useGrouping;\n        value = this.sanitize(value);\n        // Remove minus or plus sign, which must be at the start of the string.\n        if (this.symbols.minusSign && value.startsWith(this.symbols.minusSign) && minValue < 0) value = value.slice(this.symbols.minusSign.length);\n        else if (this.symbols.plusSign && value.startsWith(this.symbols.plusSign) && maxValue > 0) value = value.slice(this.symbols.plusSign.length);\n        // Numbers that can't have any decimal values fail if a decimal character is typed\n        if (this.symbols.decimal && value.indexOf(this.symbols.decimal) > -1 && this.options.maximumFractionDigits === 0) return false;\n        // Remove numerals, groups, and decimals\n        if (this.symbols.group && isGroupSymbolAllowed) value = $eb76cf4feb040f77$var$replaceAll(value, this.symbols.group, '');\n        value = value.replace(this.symbols.numeral, '');\n        if (this.symbols.decimal) value = value.replace(this.symbols.decimal, '');\n        // The number is valid if there are no remaining characters\n        return value.length === 0;\n    }\n}\nconst $eb76cf4feb040f77$var$nonLiteralParts = new Set([\n    'decimal',\n    'fraction',\n    'integer',\n    'minusSign',\n    'plusSign',\n    'group'\n]);\n// This list is derived from https://www.unicode.org/cldr/charts/49/supplemental/language_plural_rules.html#comparison and includes\n// all unique numbers which we need to check in order to determine all the plural forms for a given locale.\n// Run scripts/generateAllPlurals.mjs to generate this list.\nconst $eb76cf4feb040f77$var$pluralNumbers = [\n    0,\n    4,\n    2,\n    1,\n    11,\n    20,\n    3,\n    7,\n    100,\n    21,\n    0.1,\n    1.1\n];\nfunction $eb76cf4feb040f77$var$getSymbols(locale, formatter, intlOptions, originalOptions) {\n    // formatter needs access to all decimal places in order to generate the correct literal strings for the plural set\n    let symbolFormatter = new Intl.NumberFormat(locale, {\n        ...intlOptions,\n        // Resets so we get the full range of symbols\n        minimumSignificantDigits: 1,\n        maximumSignificantDigits: 21,\n        roundingIncrement: 1,\n        roundingPriority: 'auto',\n        roundingMode: 'halfExpand',\n        useGrouping: true\n    });\n    // Note: some locale's don't add a group symbol until there is a ten thousands place\n    let allParts = symbolFormatter.formatToParts(-10000.111);\n    let posAllParts = symbolFormatter.formatToParts(10000.111);\n    let pluralParts = $eb76cf4feb040f77$var$pluralNumbers.map((n)=>symbolFormatter.formatToParts(n));\n    // if the plural parts include a unit but no integer or fraction, then we need to add the unit to the special set\n    let noNumeralUnits = pluralParts.map((p, i)=>{\n        let unit = p.find((p)=>p.type === 'unit');\n        if (unit && !p.some((p)=>p.type === 'integer' || p.type === 'fraction')) return {\n            unit: unit.value,\n            value: $eb76cf4feb040f77$var$pluralNumbers[i]\n        };\n        return null;\n    }).filter((p)=>!!p);\n    let minusSign = allParts.find((p)=>p.type === 'minusSign')?.value ?? '-';\n    let plusSign = posAllParts.find((p)=>p.type === 'plusSign')?.value;\n    // Safari does not support the signDisplay option, but our number parser polyfills it.\n    // If no plus sign was returned, but the original options contained signDisplay, default to the '+' character.\n    if (!plusSign && (originalOptions?.signDisplay === 'exceptZero' || originalOptions?.signDisplay === 'always')) plusSign = '+';\n    // If maximumSignificantDigits is 1 (the minimum) then we won't get decimal characters out of the above formatters\n    // Percent also defaults to 0 fractionDigits, so we need to make a new one that isn't percent to get an accurate decimal\n    let decimalParts = new Intl.NumberFormat(locale, {\n        ...intlOptions,\n        minimumFractionDigits: 2,\n        maximumFractionDigits: 2\n    }).formatToParts(0.001);\n    let decimal = decimalParts.find((p)=>p.type === 'decimal')?.value;\n    let group = allParts.find((p)=>p.type === 'group')?.value;\n    // this set is also for a regex, it's all literals that might be in the string we want to eventually parse that\n    // don't contribute to the numerical value\n    let allPartsLiterals = allParts.filter((p)=>!$eb76cf4feb040f77$var$nonLiteralParts.has(p.type)).map((p)=>$eb76cf4feb040f77$var$escapeRegex(p.value));\n    let pluralPartsLiterals = pluralParts.flatMap((p)=>p.filter((p)=>!$eb76cf4feb040f77$var$nonLiteralParts.has(p.type)).map((p)=>$eb76cf4feb040f77$var$escapeRegex(p.value)));\n    let sortedLiterals = [\n        ...new Set([\n            ...allPartsLiterals,\n            ...pluralPartsLiterals\n        ])\n    ].sort((a, b)=>b.length - a.length);\n    // Match both whitespace and formatting characters\n    let literals = sortedLiterals.length === 0 ? new RegExp('\\\\p{White_Space}|\\\\p{Cf}', 'gu') : new RegExp(`${sortedLiterals.join('|')}|\\\\p{White_Space}|\\\\p{Cf}`, 'gu');\n    // These are for replacing non-latn characters with the latn equivalent\n    let numerals = [\n        ...new Intl.NumberFormat(intlOptions.locale, {\n            useGrouping: false\n        }).format(9876543210)\n    ].reverse();\n    let indexes = new Map(numerals.map((d, i)=>[\n            d,\n            i\n        ]));\n    let numeral = new RegExp(`[${numerals.join('')}]`, 'g');\n    let index = (d)=>String(indexes.get(d));\n    return {\n        minusSign: minusSign,\n        plusSign: plusSign,\n        decimal: decimal,\n        group: group,\n        literals: literals,\n        numeral: numeral,\n        numerals: numerals,\n        index: index,\n        noNumeralUnits: noNumeralUnits\n    };\n}\nfunction $eb76cf4feb040f77$var$replaceAll(str, find, replace) {\n    if (str.replaceAll) return str.replaceAll(find, replace);\n    return str.split(find).join(replace);\n}\nfunction $eb76cf4feb040f77$var$escapeRegex(string) {\n    return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n\nexport {$eb76cf4feb040f77$export$cd11ab140839f11d as NumberParser};\n//# sourceMappingURL=NumberParser.mjs.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /**\n * Takes a value and forces it to the closest min/max if it's outside. Also forces it to the closest\n * valid step.\n */ function $240e9101ba2842f5$export$7d15b64cf5a3a4c4(value, min = -Infinity, max = Infinity) {\n    let newValue = Math.min(Math.max(value, min), max);\n    return newValue;\n}\nfunction $240e9101ba2842f5$export$e1a7b8e69ef6c52f(value, step) {\n    let roundedValue = value;\n    let precision = 0;\n    let stepString = step.toString();\n    // Handle negative exponents in exponential notation (e.g., \"1e-7\" → precision 8)\n    let eIndex = stepString.toLowerCase().indexOf('e-');\n    if (eIndex > 0) precision = Math.abs(Math.floor(Math.log10(Math.abs(step)))) + eIndex;\n    else {\n        let pointIndex = stepString.indexOf('.');\n        if (pointIndex >= 0) precision = stepString.length - pointIndex;\n    }\n    if (precision > 0) {\n        let pow = Math.pow(10, precision);\n        roundedValue = Math.round(roundedValue * pow) / pow;\n    }\n    return roundedValue;\n}\nfunction $240e9101ba2842f5$export$cb6e0bb50bc19463(value, min, max, step) {\n    min = Number(min);\n    max = Number(max);\n    let remainder = (value - (isNaN(min) ? 0 : min)) % step;\n    let snappedValue = $240e9101ba2842f5$export$e1a7b8e69ef6c52f(Math.abs(remainder) * 2 >= step ? value + Math.sign(remainder) * (step - Math.abs(remainder)) : value - remainder, step);\n    if (!isNaN(min)) {\n        if (snappedValue < min) snappedValue = min;\n        else if (!isNaN(max) && snappedValue > max) snappedValue = min + Math.floor($240e9101ba2842f5$export$e1a7b8e69ef6c52f((max - min) / step, step)) * step;\n    } else if (!isNaN(max) && snappedValue > max) snappedValue = Math.floor($240e9101ba2842f5$export$e1a7b8e69ef6c52f(max / step, step)) * step;\n    // correct floating point behavior by rounding to step precision\n    snappedValue = $240e9101ba2842f5$export$e1a7b8e69ef6c52f(snappedValue, step);\n    return snappedValue;\n}\nfunction $240e9101ba2842f5$export$b6268554fba451f(value, digits, base = 10) {\n    const pow = Math.pow(base, digits);\n    return Math.round(value * pow) / pow;\n}\n\n\nexport {$240e9101ba2842f5$export$7d15b64cf5a3a4c4 as clamp, $240e9101ba2842f5$export$e1a7b8e69ef6c52f as roundToStepPrecision, $240e9101ba2842f5$export$cb6e0bb50bc19463 as snapValueToStep, $240e9101ba2842f5$export$b6268554fba451f as toFixedNumber};\n//# sourceMappingURL=number.mjs.map\n","import {dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415, useRenderProps as $7230ffa83bc0c2cf$export$4d86445c2cf5e3, useSlot as $7230ffa83bc0c2cf$export$9d4c57ee4c6ffdd8} from \"./utils.mjs\";\nimport {LabelContext as $43a3b93638fe5db9$export$75b6ee27786ba447} from \"./Label.mjs\";\nimport {useProgressBar as $8MuvO$useProgressBar} from \"react-aria/useProgressBar\";\nimport {clamp as $8MuvO$clamp} from \"react-stately/private/utils/number\";\nimport {filterDOMProps as $8MuvO$filterDOMProps} from \"react-aria/filterDOMProps\";\nimport {mergeProps as $8MuvO$mergeProps} from \"react-aria/mergeProps\";\nimport $8MuvO$react, {createContext as $8MuvO$createContext, forwardRef as $8MuvO$forwardRef} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\nconst $6c0095e7e99364f2$export$e9f3bf65a26ce129 = /*#__PURE__*/ (0, $8MuvO$createContext)(null);\nconst $6c0095e7e99364f2$export$c17561cb55d4db30 = /*#__PURE__*/ (0, $8MuvO$forwardRef)(function ProgressBar(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $6c0095e7e99364f2$export$e9f3bf65a26ce129);\n    let { value: value = 0, minValue: minValue = 0, maxValue: maxValue = 100, isIndeterminate: isIndeterminate = false } = props;\n    value = (0, $8MuvO$clamp)(value, minValue, maxValue);\n    let [labelRef, label] = (0, $7230ffa83bc0c2cf$export$9d4c57ee4c6ffdd8)(!props['aria-label'] && !props['aria-labelledby']);\n    let { progressBarProps: progressBarProps, labelProps: labelProps } = (0, $8MuvO$useProgressBar)({\n        ...props,\n        label: label\n    });\n    let range = maxValue - minValue;\n    // Calculate the width of the progress bar as a percentage\n    let percentage = undefined;\n    if (!isIndeterminate) {\n        if (range === 0) percentage = 0;\n        else percentage = (value - minValue) / range * 100;\n    }\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        defaultClassName: 'react-aria-ProgressBar',\n        values: {\n            percentage: percentage,\n            valueText: progressBarProps['aria-valuetext'],\n            isIndeterminate: isIndeterminate\n        }\n    });\n    let DOMProps = (0, $8MuvO$filterDOMProps)(props, {\n        global: true\n    });\n    return /*#__PURE__*/ (0, $8MuvO$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...(0, $8MuvO$mergeProps)(DOMProps, renderProps, progressBarProps),\n        ref: ref,\n        slot: props.slot || undefined\n    }, /*#__PURE__*/ (0, $8MuvO$react).createElement((0, $43a3b93638fe5db9$export$75b6ee27786ba447).Provider, {\n        value: {\n            ...labelProps,\n            ref: labelRef,\n            elementType: 'span'\n        }\n    }, renderProps.children));\n});\n\n\nexport {$6c0095e7e99364f2$export$e9f3bf65a26ce129 as ProgressBarContext, $6c0095e7e99364f2$export$c17561cb55d4db30 as ProgressBar};\n//# sourceMappingURL=ProgressBar.mjs.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /* Inspired by https://github.com/AlmeroSteyn/react-aria-live */ const $a46cf152bb926da5$var$LIVEREGION_TIMEOUT_DELAY = 7000;\nlet $a46cf152bb926da5$var$liveAnnouncer = null;\nfunction $a46cf152bb926da5$export$a9b970dcc4ae71a9(message, assertiveness = 'assertive', timeout = $a46cf152bb926da5$var$LIVEREGION_TIMEOUT_DELAY) {\n    if (!$a46cf152bb926da5$var$liveAnnouncer) {\n        $a46cf152bb926da5$var$liveAnnouncer = new $a46cf152bb926da5$var$LiveAnnouncer();\n        // wait for the live announcer regions to be added to the dom, then announce\n        // otherwise Safari won't announce the message if it's added too quickly\n        // found most times less than 100ms were not consistent when announcing with Safari\n        // IS_REACT_ACT_ENVIRONMENT is used by React 18. Previous versions checked for the `jest` global.\n        // https://github.com/reactwg/react-18/discussions/102\n        // if we're in a test environment, announce without waiting\n        if (// @ts-ignore\n        !(typeof IS_REACT_ACT_ENVIRONMENT === 'boolean' ? IS_REACT_ACT_ENVIRONMENT : typeof jest !== 'undefined')) setTimeout(()=>{\n            if ($a46cf152bb926da5$var$liveAnnouncer?.isAttached()) $a46cf152bb926da5$var$liveAnnouncer?.announce(message, assertiveness, timeout);\n        }, 100);\n        else $a46cf152bb926da5$var$liveAnnouncer.announce(message, assertiveness, timeout);\n    } else $a46cf152bb926da5$var$liveAnnouncer.announce(message, assertiveness, timeout);\n}\nfunction $a46cf152bb926da5$export$d10ae4f68404609a(assertiveness) {\n    if ($a46cf152bb926da5$var$liveAnnouncer) $a46cf152bb926da5$var$liveAnnouncer.clear(assertiveness);\n}\nfunction $a46cf152bb926da5$export$d8686216b8b81b2f() {\n    if ($a46cf152bb926da5$var$liveAnnouncer) {\n        $a46cf152bb926da5$var$liveAnnouncer.destroy();\n        $a46cf152bb926da5$var$liveAnnouncer = null;\n    }\n}\n// LiveAnnouncer is implemented using vanilla DOM, not React. That's because as of React 18\n// ReactDOM.render is deprecated, and the replacement, ReactDOM.createRoot is moved into a\n// subpath import `react-dom/client`. That makes it hard for us to support multiple React versions.\n// As a global API, we can't use portals without introducing a breaking API change. LiveAnnouncer\n// is simple enough to implement without React, so that's what we do here.\n// See this discussion for more details: https://github.com/reactwg/react-18/discussions/125#discussioncomment-2382638\nclass $a46cf152bb926da5$var$LiveAnnouncer {\n    constructor(){\n        this.node = null;\n        this.assertiveLog = null;\n        this.politeLog = null;\n        if (typeof document !== 'undefined') {\n            this.node = document.createElement('div');\n            this.node.dataset.liveAnnouncer = 'true';\n            // copied from VisuallyHidden\n            Object.assign(this.node.style, {\n                border: 0,\n                clip: 'rect(0 0 0 0)',\n                clipPath: 'inset(50%)',\n                height: '1px',\n                margin: '-1px',\n                overflow: 'hidden',\n                padding: 0,\n                position: 'absolute',\n                width: '1px',\n                whiteSpace: 'nowrap'\n            });\n            this.assertiveLog = this.createLog('assertive');\n            this.node.appendChild(this.assertiveLog);\n            this.politeLog = this.createLog('polite');\n            this.node.appendChild(this.politeLog);\n            document.body.prepend(this.node);\n        }\n    }\n    isAttached() {\n        return this.node?.isConnected;\n    }\n    createLog(ariaLive) {\n        let node = document.createElement('div');\n        node.setAttribute('role', 'log');\n        node.setAttribute('aria-live', ariaLive);\n        node.setAttribute('aria-relevant', 'additions');\n        return node;\n    }\n    destroy() {\n        if (!this.node) return;\n        document.body.removeChild(this.node);\n        this.node = null;\n    }\n    announce(message, assertiveness = 'assertive', timeout = $a46cf152bb926da5$var$LIVEREGION_TIMEOUT_DELAY) {\n        if (!this.node) return;\n        let node = document.createElement('div');\n        if (typeof message === 'object') {\n            // To read an aria-labelledby, the element must have an appropriate role, such as img.\n            node.setAttribute('role', 'img');\n            node.setAttribute('aria-labelledby', message['aria-labelledby']);\n        } else node.textContent = message;\n        if (assertiveness === 'assertive') this.assertiveLog?.appendChild(node);\n        else this.politeLog?.appendChild(node);\n        if (message !== '') setTimeout(()=>{\n            node.remove();\n        }, timeout);\n    }\n    clear(assertiveness) {\n        if (!this.node) return;\n        if ((!assertiveness || assertiveness === 'assertive') && this.assertiveLog) this.assertiveLog.innerHTML = '';\n        if ((!assertiveness || assertiveness === 'polite') && this.politeLog) this.politeLog.innerHTML = '';\n    }\n}\n\n\nexport {$a46cf152bb926da5$export$a9b970dcc4ae71a9 as announce, $a46cf152bb926da5$export$d10ae4f68404609a as clearAnnouncer, $a46cf152bb926da5$export$d8686216b8b81b2f as destroyAnnouncer};\n//# sourceMappingURL=LiveAnnouncer.mjs.map\n","import {filterDOMProps as $8e9d2fae0ecb9001$export$457c3d6518dd4c6f} from \"../utils/filterDOMProps.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {useFocusable as $d1116acdf220c2da$export$4c014de7c8940b4c} from \"../interactions/useFocusable.mjs\";\nimport {usePress as $d27d541f9569d26d$export$45712eceda6fad21} from \"../interactions/usePress.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nfunction $ac4318a9c075bb9f$export$ea18c227d4417cc3(props, ref) {\n    let { elementType: elementType = 'button', isDisabled: isDisabled, onPress: onPress, onPressStart: onPressStart, onPressEnd: onPressEnd, onPressUp: onPressUp, onPressChange: onPressChange, preventFocusOnPress: preventFocusOnPress, allowFocusWhenDisabled: // @ts-ignore - undocumented\n    allowFocusWhenDisabled, onClick: onClick, href: href, target: target, rel: rel, type: type = 'button' } = props;\n    let additionalProps;\n    if (elementType === 'button') additionalProps = {\n        type: type,\n        disabled: isDisabled,\n        form: props.form,\n        formAction: props.formAction,\n        formEncType: props.formEncType,\n        formMethod: props.formMethod,\n        formNoValidate: props.formNoValidate,\n        formTarget: props.formTarget,\n        name: props.name,\n        value: props.value\n    };\n    else additionalProps = {\n        role: 'button',\n        href: elementType === 'a' && !isDisabled ? href : undefined,\n        target: elementType === 'a' ? target : undefined,\n        type: elementType === 'input' ? type : undefined,\n        disabled: elementType === 'input' ? isDisabled : undefined,\n        'aria-disabled': !isDisabled || elementType === 'input' ? undefined : isDisabled,\n        rel: elementType === 'a' ? rel : undefined\n    };\n    let { pressProps: pressProps, isPressed: isPressed } = (0, $d27d541f9569d26d$export$45712eceda6fad21)({\n        onPressStart: onPressStart,\n        onPressEnd: onPressEnd,\n        onPressChange: onPressChange,\n        onPress: onPress,\n        onPressUp: onPressUp,\n        onClick: onClick,\n        isDisabled: isDisabled,\n        preventFocusOnPress: preventFocusOnPress,\n        ref: ref\n    });\n    let { focusableProps: focusableProps } = (0, $d1116acdf220c2da$export$4c014de7c8940b4c)(props, ref);\n    if (allowFocusWhenDisabled) // oxlint-disable-next-line react/react-compiler\n    focusableProps.tabIndex = isDisabled ? -1 : focusableProps.tabIndex;\n    let buttonProps = (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(focusableProps, pressProps, (0, $8e9d2fae0ecb9001$export$457c3d6518dd4c6f)(props, {\n        labelable: true\n    }));\n    return {\n        isPressed: isPressed,\n        buttonProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(additionalProps, buttonProps, {\n            'aria-haspopup': props['aria-haspopup'],\n            'aria-expanded': props['aria-expanded'],\n            'aria-controls': props['aria-controls'],\n            'aria-pressed': props['aria-pressed'],\n            'aria-current': props['aria-current'],\n            'aria-disabled': props['aria-disabled']\n        })\n    };\n}\n\n\nexport {$ac4318a9c075bb9f$export$ea18c227d4417cc3 as useButton};\n//# sourceMappingURL=useButton.mjs.map\n","import {dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415, useRenderProps as $7230ffa83bc0c2cf$export$4d86445c2cf5e3} from \"./utils.mjs\";\nimport {ProgressBarContext as $6c0095e7e99364f2$export$e9f3bf65a26ce129} from \"./ProgressBar.mjs\";\nimport {announce as $9s8kH$announce} from \"react-aria/private/live-announcer/LiveAnnouncer\";\nimport {useButton as $9s8kH$useButton} from \"react-aria/useButton\";\nimport {createHideableComponent as $9s8kH$createHideableComponent} from \"react-aria/private/collections/Hidden\";\nimport {filterDOMProps as $9s8kH$filterDOMProps} from \"react-aria/filterDOMProps\";\nimport {mergeProps as $9s8kH$mergeProps} from \"react-aria/mergeProps\";\nimport $9s8kH$react, {createContext as $9s8kH$createContext, useRef as $9s8kH$useRef, useEffect as $9s8kH$useEffect} from \"react\";\nimport {useFocusRing as $9s8kH$useFocusRing} from \"react-aria/useFocusRing\";\nimport {useHover as $9s8kH$useHover} from \"react-aria/useHover\";\nimport {useId as $9s8kH$useId} from \"react-aria/useId\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\nconst $7705c033048f6da7$export$24d547caef80ccd1 = /*#__PURE__*/ (0, $9s8kH$createContext)({});\nconst $7705c033048f6da7$export$353f5b6fc5456de1 = /*#__PURE__*/ (0, $9s8kH$createHideableComponent)(function Button(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $7705c033048f6da7$export$24d547caef80ccd1);\n    let ctx = props;\n    let { isPending: isPending } = ctx;\n    let { buttonProps: buttonProps, isPressed: isPressed } = (0, $9s8kH$useButton)(props, ref);\n    buttonProps = $7705c033048f6da7$var$useDisableInteractions(buttonProps, isPending);\n    let { focusProps: focusProps, isFocused: isFocused, isFocusVisible: isFocusVisible } = (0, $9s8kH$useFocusRing)(props);\n    let { hoverProps: hoverProps, isHovered: isHovered } = (0, $9s8kH$useHover)({\n        ...props,\n        isDisabled: props.isDisabled || isPending\n    });\n    let renderValues = {\n        isHovered: isHovered,\n        isPressed: (ctx.isPressed || isPressed) && !isPending,\n        isFocused: isFocused,\n        isFocusVisible: isFocusVisible,\n        isDisabled: props.isDisabled || false,\n        isPending: isPending ?? false\n    };\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        values: renderValues,\n        defaultClassName: 'react-aria-Button'\n    });\n    let buttonId = (0, $9s8kH$useId)(buttonProps.id);\n    let progressId = (0, $9s8kH$useId)();\n    let ariaLabelledby = buttonProps['aria-labelledby'];\n    if (isPending) {\n        // aria-labelledby wins over aria-label\n        // https://www.w3.org/TR/accname-1.2/#computation-steps\n        if (ariaLabelledby) ariaLabelledby = `${ariaLabelledby} ${progressId}`;\n        else if (buttonProps['aria-label']) ariaLabelledby = `${buttonId} ${progressId}`;\n    }\n    let wasPending = (0, $9s8kH$useRef)(isPending);\n    (0, $9s8kH$useEffect)(()=>{\n        let message = {\n            'aria-labelledby': ariaLabelledby || buttonId\n        };\n        if (!wasPending.current && isFocused && isPending) (0, $9s8kH$announce)(message, 'assertive');\n        else if (wasPending.current && isFocused && !isPending) (0, $9s8kH$announce)(message, 'assertive');\n        wasPending.current = isPending;\n    }, [\n        isPending,\n        isFocused,\n        ariaLabelledby,\n        buttonId\n    ]);\n    let DOMProps = (0, $9s8kH$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.onClick;\n    return /*#__PURE__*/ (0, $9s8kH$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).button, {\n        ...(0, $9s8kH$mergeProps)(DOMProps, renderProps, buttonProps, focusProps, hoverProps),\n        // When the button is in a pending state, we want to stop implicit form submission (ie. when the user presses enter on a text input).\n        // We do this by changing the button's type to button.\n        type: buttonProps.type === 'submit' && isPending ? 'button' : buttonProps.type,\n        id: buttonId,\n        ref: ref,\n        \"aria-labelledby\": ariaLabelledby,\n        slot: props.slot || undefined,\n        \"aria-disabled\": isPending ? 'true' : buttonProps['aria-disabled'],\n        \"data-disabled\": props.isDisabled || undefined,\n        \"data-pressed\": renderValues.isPressed || undefined,\n        \"data-hovered\": isHovered || undefined,\n        \"data-focused\": isFocused || undefined,\n        \"data-pending\": isPending || undefined,\n        \"data-focus-visible\": isFocusVisible || undefined\n    }, /*#__PURE__*/ (0, $9s8kH$react).createElement((0, $6c0095e7e99364f2$export$e9f3bf65a26ce129).Provider, {\n        value: {\n            id: progressId\n        }\n    }, renderProps.children));\n});\n// Events to preserve when isPending is true (for tooltips and other overlays)\nconst $7705c033048f6da7$var$PRESERVED_EVENT_PATTERN = /Focus|Blur|Hover|Pointer(Enter|Leave|Over|Out)|Mouse(Enter|Leave|Over|Out)/;\nfunction $7705c033048f6da7$var$useDisableInteractions(props, isPending) {\n    if (isPending) {\n        for(const key in props)if (key.startsWith('on') && !$7705c033048f6da7$var$PRESERVED_EVENT_PATTERN.test(key)) props[key] = undefined;\n        props.href = undefined;\n        props.target = undefined;\n    }\n    return props;\n}\n\n\nexport {$7705c033048f6da7$export$24d547caef80ccd1 as ButtonContext, $7705c033048f6da7$export$353f5b6fc5456de1 as Button};\n//# sourceMappingURL=Button.mjs.map\n","import {dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415} from \"./utils.mjs\";\nimport $6Xi9O$react, {createContext as $6Xi9O$createContext, forwardRef as $6Xi9O$forwardRef} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nconst $2ec61d1d4f780267$export$d688439359537581 = /*#__PURE__*/ (0, $6Xi9O$createContext)({});\nconst $2ec61d1d4f780267$export$a8a3e93435678ff9 = /*#__PURE__*/ (0, $6Xi9O$forwardRef)(function Heading(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $2ec61d1d4f780267$export$d688439359537581);\n    let { children: children, level: level = 3, className: className, ...domProps } = props;\n    let Element = (0, $7230ffa83bc0c2cf$export$df3a06d6289f983e)[`h${level}`];\n    return /*#__PURE__*/ (0, $6Xi9O$react).createElement(Element, {\n        ...domProps,\n        ref: ref,\n        className: className ?? 'react-aria-Heading'\n    }, children);\n});\n\n\nexport {$2ec61d1d4f780267$export$d688439359537581 as HeadingContext, $2ec61d1d4f780267$export$a8a3e93435678ff9 as Heading};\n//# sourceMappingURL=Heading.mjs.map\n","import {dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415} from \"./utils.mjs\";\nimport {createHideableComponent as $cGkLv$createHideableComponent} from \"react-aria/private/collections/Hidden\";\nimport $cGkLv$react, {createContext as $cGkLv$createContext} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $efe09c6d1c304b50$export$9afb8bc826b033ea = /*#__PURE__*/ (0, $cGkLv$createContext)({});\nconst $efe09c6d1c304b50$export$5f1af8db9871e1d6 = /*#__PURE__*/ (0, $cGkLv$createHideableComponent)(function Text(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $efe09c6d1c304b50$export$9afb8bc826b033ea);\n    let { elementType: elementType = 'span', ...domProps } = props;\n    let ElementType = (0, $7230ffa83bc0c2cf$export$df3a06d6289f983e)[elementType];\n    // @ts-ignore\n    return /*#__PURE__*/ (0, $cGkLv$react).createElement(ElementType, {\n        className: \"react-aria-Text\",\n        ...domProps,\n        ref: ref\n    });\n});\n\n\nexport {$efe09c6d1c304b50$export$9afb8bc826b033ea as TextContext, $efe09c6d1c304b50$export$5f1af8db9871e1d6 as Text};\n//# sourceMappingURL=Text.mjs.map\n","import {useRef as $1QAm5$useRef} from \"react\";\n\n/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /* eslint-disable rsp-rules/pure-render */ \nfunction $9c268ab73a5d55e5$export$722debc0e56fea39(value, isEqual) {\n    // Using a ref during render is ok here because it's only an optimization – both values are equivalent.\n    // If a render is thrown away, it'll still work the same no matter if the next render is the same or not.\n    let lastValue = (0, $1QAm5$useRef)(null);\n    // oxlint-disable-next-line react/react-compiler\n    if (value && lastValue.current && isEqual(value, lastValue.current)) // oxlint-disable-next-line react/react-compiler\n    value = lastValue.current;\n    // oxlint-disable-next-line react/react-compiler\n    lastValue.current = value;\n    return value;\n}\n\n\nexport {$9c268ab73a5d55e5$export$722debc0e56fea39 as useDeepMemo};\n//# sourceMappingURL=useDeepMemo.mjs.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $09ec6a572d60460f$export$842a2cf37af977e1(amount, numerator) {\n    return amount - numerator * Math.floor(amount / numerator);\n}\n\n\nexport {$09ec6a572d60460f$export$842a2cf37af977e1 as mod};\n//# sourceMappingURL=utils.mjs.map\n","import {CalendarDate as $2aaf608024c21ca1$export$99faa760c7908e4f} from \"../CalendarDate.mjs\";\nimport {mod as $09ec6a572d60460f$export$842a2cf37af977e1} from \"../utils.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\n\nconst $93635573935797de$var$EPOCH = 1721426; // 001/01/03 Julian C.E.\nfunction $93635573935797de$export$f297eb839006d339(era, year, month, day) {\n    year = $93635573935797de$export$c36e0ecb2d4fa69d(era, year);\n    let y1 = year - 1;\n    let monthOffset = -2;\n    if (month <= 2) monthOffset = 0;\n    else if ($93635573935797de$export$553d7fa8e3805fc0(year)) monthOffset = -1;\n    return $93635573935797de$var$EPOCH - 1 + 365 * y1 + Math.floor(y1 / 4) - Math.floor(y1 / 100) + Math.floor(y1 / 400) + Math.floor((367 * month - 362) / 12 + monthOffset + day);\n}\nfunction $93635573935797de$export$553d7fa8e3805fc0(year) {\n    return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\nfunction $93635573935797de$export$c36e0ecb2d4fa69d(era, year) {\n    return era === 'BC' ? 1 - year : year;\n}\nfunction $93635573935797de$export$4475b7e617eb123c(year) {\n    let era = 'AD';\n    if (year <= 0) {\n        era = 'BC';\n        year = 1 - year;\n    }\n    return [\n        era,\n        year\n    ];\n}\nconst $93635573935797de$var$daysInMonth = {\n    standard: [\n        31,\n        28,\n        31,\n        30,\n        31,\n        30,\n        31,\n        31,\n        30,\n        31,\n        30,\n        31\n    ],\n    leapyear: [\n        31,\n        29,\n        31,\n        30,\n        31,\n        30,\n        31,\n        31,\n        30,\n        31,\n        30,\n        31\n    ]\n};\nclass $93635573935797de$export$80ee6245ec4f29ec {\n    fromJulianDay(jd) {\n        let jd0 = jd;\n        let depoch = jd0 - $93635573935797de$var$EPOCH;\n        let quadricent = Math.floor(depoch / 146097);\n        let dqc = (0, $09ec6a572d60460f$export$842a2cf37af977e1)(depoch, 146097);\n        let cent = Math.floor(dqc / 36524);\n        let dcent = (0, $09ec6a572d60460f$export$842a2cf37af977e1)(dqc, 36524);\n        let quad = Math.floor(dcent / 1461);\n        let dquad = (0, $09ec6a572d60460f$export$842a2cf37af977e1)(dcent, 1461);\n        let yindex = Math.floor(dquad / 365);\n        let extendedYear = quadricent * 400 + cent * 100 + quad * 4 + yindex + (cent !== 4 && yindex !== 4 ? 1 : 0);\n        let [era, year] = $93635573935797de$export$4475b7e617eb123c(extendedYear);\n        let yearDay = jd0 - $93635573935797de$export$f297eb839006d339(era, year, 1, 1);\n        let leapAdj = 2;\n        if (jd0 < $93635573935797de$export$f297eb839006d339(era, year, 3, 1)) leapAdj = 0;\n        else if ($93635573935797de$export$553d7fa8e3805fc0(year)) leapAdj = 1;\n        let month = Math.floor(((yearDay + leapAdj) * 12 + 373) / 367);\n        let day = jd0 - $93635573935797de$export$f297eb839006d339(era, year, month, 1) + 1;\n        return new (0, $2aaf608024c21ca1$export$99faa760c7908e4f)(era, year, month, day);\n    }\n    toJulianDay(date) {\n        return $93635573935797de$export$f297eb839006d339(date.era, date.year, date.month, date.day);\n    }\n    getDaysInMonth(date) {\n        return $93635573935797de$var$daysInMonth[$93635573935797de$export$553d7fa8e3805fc0(date.year) ? 'leapyear' : 'standard'][date.month - 1];\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    getMonthsInYear(date) {\n        return 12;\n    }\n    getDaysInYear(date) {\n        return $93635573935797de$export$553d7fa8e3805fc0(date.year) ? 366 : 365;\n    }\n    getMaximumMonthsInYear() {\n        return 12;\n    }\n    getMaximumDaysInMonth() {\n        return 31;\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    getYearsInEra(date) {\n        return 9999;\n    }\n    getEras() {\n        return [\n            'BC',\n            'AD'\n        ];\n    }\n    isInverseEra(date) {\n        return date.era === 'BC';\n    }\n    balanceDate(date) {\n        if (date.year <= 0) {\n            date.era = date.era === 'BC' ? 'AD' : 'BC';\n            date.year = 1 - date.year;\n        }\n    }\n    constructor(){\n        this.identifier = 'gregory';\n    }\n}\n\n\nexport {$93635573935797de$export$f297eb839006d339 as gregorianToJulianDay, $93635573935797de$export$c36e0ecb2d4fa69d as getExtendedYear, $93635573935797de$export$553d7fa8e3805fc0 as isLeapYear, $93635573935797de$export$4475b7e617eb123c as fromExtendedYear, $93635573935797de$export$80ee6245ec4f29ec as GregorianCalendar};\n//# sourceMappingURL=GregorianCalendar.mjs.map\n","import {fromAbsolute as $d07e34cce18680fd$export$1b96692a1ba042ac, toAbsolute as $d07e34cce18680fd$export$5107c82f94518f5c, toCalendar as $d07e34cce18680fd$export$b4a036af3fc0b032, toCalendarDate as $d07e34cce18680fd$export$93522d1a439f3617} from \"./conversion.mjs\";\nimport {weekStartData as $d2ca8165c9aa885a$export$7a5acbd77d414bd9} from \"./weekStartData.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $ad063034c8620db8$export$ea39ec197993aef0(a, b) {\n    b = (0, $d07e34cce18680fd$export$b4a036af3fc0b032)(b, a.calendar);\n    return a.era === b.era && a.year === b.year && a.month === b.month && a.day === b.day;\n}\nfunction $ad063034c8620db8$export$a18c89cbd24170ff(a, b) {\n    b = (0, $d07e34cce18680fd$export$b4a036af3fc0b032)(b, a.calendar);\n    // In the Japanese calendar, months can span multiple eras/years, so only compare the first of the month.\n    a = $ad063034c8620db8$export$a5a3b454ada2268e(a);\n    b = $ad063034c8620db8$export$a5a3b454ada2268e(b);\n    return a.era === b.era && a.year === b.year && a.month === b.month;\n}\nfunction $ad063034c8620db8$export$5841f9eb9773f25f(a, b) {\n    b = (0, $d07e34cce18680fd$export$b4a036af3fc0b032)(b, a.calendar);\n    a = $ad063034c8620db8$export$f91e89d3d0406102(a);\n    b = $ad063034c8620db8$export$f91e89d3d0406102(b);\n    return a.era === b.era && a.year === b.year;\n}\nfunction $ad063034c8620db8$export$91b62ebf2ba703ee(a, b) {\n    return $ad063034c8620db8$export$dbc69fd56b53d5e(a.calendar, b.calendar) && $ad063034c8620db8$export$ea39ec197993aef0(a, b);\n}\nfunction $ad063034c8620db8$export$5a8da0c44a3afdf2(a, b) {\n    return $ad063034c8620db8$export$dbc69fd56b53d5e(a.calendar, b.calendar) && $ad063034c8620db8$export$a18c89cbd24170ff(a, b);\n}\nfunction $ad063034c8620db8$export$ea840f5a6dda8147(a, b) {\n    return $ad063034c8620db8$export$dbc69fd56b53d5e(a.calendar, b.calendar) && $ad063034c8620db8$export$5841f9eb9773f25f(a, b);\n}\nfunction $ad063034c8620db8$export$dbc69fd56b53d5e(a, b) {\n    return a.isEqual?.(b) ?? b.isEqual?.(a) ?? a.identifier === b.identifier;\n}\nfunction $ad063034c8620db8$export$629b0a497aa65267(date, timeZone) {\n    return $ad063034c8620db8$export$ea39ec197993aef0(date, $ad063034c8620db8$export$d0bdf45af03a6ea3(timeZone));\n}\nconst $ad063034c8620db8$var$DAY_MAP = {\n    sun: 0,\n    mon: 1,\n    tue: 2,\n    wed: 3,\n    thu: 4,\n    fri: 5,\n    sat: 6\n};\nfunction $ad063034c8620db8$export$2061056d06d7cdf7(date, locale, firstDayOfWeek) {\n    let julian = date.calendar.toJulianDay(date);\n    // If julian is negative, then julian % 7 will be negative, so we adjust\n    // accordingly.  Julian day 0 is Monday.\n    let weekStart = firstDayOfWeek ? $ad063034c8620db8$var$DAY_MAP[firstDayOfWeek] : $ad063034c8620db8$var$getWeekStart(locale);\n    let dayOfWeek = Math.ceil(julian + 1 - weekStart) % 7;\n    if (dayOfWeek < 0) dayOfWeek += 7;\n    return dayOfWeek;\n}\nfunction $ad063034c8620db8$export$461939dd4422153(timeZone) {\n    return (0, $d07e34cce18680fd$export$1b96692a1ba042ac)(Date.now(), timeZone);\n}\nfunction $ad063034c8620db8$export$d0bdf45af03a6ea3(timeZone) {\n    return (0, $d07e34cce18680fd$export$93522d1a439f3617)($ad063034c8620db8$export$461939dd4422153(timeZone));\n}\nfunction $ad063034c8620db8$export$68781ddf31c0090f(a, b) {\n    return a.calendar.toJulianDay(a) - b.calendar.toJulianDay(b);\n}\nfunction $ad063034c8620db8$export$c19a80a9721b80f6(a, b) {\n    return $ad063034c8620db8$var$timeToMs(a) - $ad063034c8620db8$var$timeToMs(b);\n}\nfunction $ad063034c8620db8$var$timeToMs(a) {\n    return a.hour * 3600000 + a.minute * 60000 + a.second * 1000 + a.millisecond;\n}\nfunction $ad063034c8620db8$export$126c91c941de7e(a, timeZone) {\n    let ms = (0, $d07e34cce18680fd$export$5107c82f94518f5c)(a, timeZone);\n    let tomorrow = a.add({\n        days: 1\n    });\n    let tomorrowMs = (0, $d07e34cce18680fd$export$5107c82f94518f5c)(tomorrow, timeZone);\n    return (tomorrowMs - ms) / 3600000;\n}\nlet $ad063034c8620db8$var$localTimeZone = null;\nlet $ad063034c8620db8$var$localTimeZoneOverride = false;\nfunction $ad063034c8620db8$export$aa8b41735afcabd2() {\n    if ($ad063034c8620db8$var$localTimeZone == null) $ad063034c8620db8$var$localTimeZone = new Intl.DateTimeFormat().resolvedOptions().timeZone;\n    return $ad063034c8620db8$var$localTimeZone;\n}\nfunction $ad063034c8620db8$export$61a9d83ceb59a3dd(timeZone) {\n    $ad063034c8620db8$var$localTimeZoneOverride = true;\n    $ad063034c8620db8$var$localTimeZone = timeZone;\n}\nfunction $ad063034c8620db8$export$55753838ffe79333() {\n    $ad063034c8620db8$var$localTimeZoneOverride = false;\n    $ad063034c8620db8$var$localTimeZone = null;\n}\nfunction $ad063034c8620db8$export$6ab69b273755230b() {\n    return $ad063034c8620db8$var$localTimeZoneOverride;\n}\nfunction $ad063034c8620db8$export$a5a3b454ada2268e(date) {\n    // Use `subtract` instead of `set` so we don't get constrained in an era.\n    return date.subtract({\n        days: date.day - 1\n    });\n}\nfunction $ad063034c8620db8$export$a2258d9c4118825c(date) {\n    return date.add({\n        days: date.calendar.getDaysInMonth(date) - date.day\n    });\n}\nfunction $ad063034c8620db8$export$f91e89d3d0406102(date) {\n    return $ad063034c8620db8$export$a5a3b454ada2268e(date.subtract({\n        months: date.month - 1\n    }));\n}\nfunction $ad063034c8620db8$export$8b7aa55c66d5569e(date) {\n    return $ad063034c8620db8$export$a2258d9c4118825c(date.add({\n        months: date.calendar.getMonthsInYear(date) - date.month\n    }));\n}\nfunction $ad063034c8620db8$export$5412ac11713b72ad(date) {\n    if (date.calendar.getMinimumMonthInYear) return date.calendar.getMinimumMonthInYear(date);\n    return 1;\n}\nfunction $ad063034c8620db8$export$b2f4953d301981d5(date) {\n    if (date.calendar.getMinimumDayInMonth) return date.calendar.getMinimumDayInMonth(date);\n    return 1;\n}\nfunction $ad063034c8620db8$export$42c81a444fbfb5d4(date, locale, firstDayOfWeek) {\n    let dayOfWeek = $ad063034c8620db8$export$2061056d06d7cdf7(date, locale, firstDayOfWeek);\n    return date.subtract({\n        days: dayOfWeek\n    });\n}\nfunction $ad063034c8620db8$export$ef8b6d9133084f4e(date, locale, firstDayOfWeek) {\n    return $ad063034c8620db8$export$42c81a444fbfb5d4(date, locale, firstDayOfWeek).add({\n        days: 6\n    });\n}\nconst $ad063034c8620db8$var$cachedRegions = new Map();\nconst $ad063034c8620db8$var$cachedWeekInfo = new Map();\nfunction $ad063034c8620db8$var$getRegion(locale) {\n    // If the Intl.Locale API is available, use it to get the region for the locale.\n    // @ts-ignore\n    if (Intl.Locale) {\n        // Constructing an Intl.Locale is expensive, so cache the result.\n        let region = $ad063034c8620db8$var$cachedRegions.get(locale);\n        if (!region) {\n            // @ts-ignore\n            region = new Intl.Locale(locale).maximize().region;\n            if (region) $ad063034c8620db8$var$cachedRegions.set(locale, region);\n        }\n        return region;\n    }\n    // If not, just try splitting the string.\n    // If the second part of the locale string is 'u',\n    // then this is a unicode extension, so ignore it.\n    // Otherwise, it should be the region.\n    let part = locale.split('-')[1];\n    return part === 'u' ? undefined : part;\n}\nfunction $ad063034c8620db8$var$getWeekStart(locale) {\n    // TODO: use Intl.Locale for this once browsers support the weekInfo property\n    // https://github.com/tc39/proposal-intl-locale-info\n    let weekInfo = $ad063034c8620db8$var$cachedWeekInfo.get(locale);\n    if (!weekInfo) {\n        if (Intl.Locale) {\n            // @ts-ignore\n            let localeInst = new Intl.Locale(locale);\n            if ('getWeekInfo' in localeInst) {\n                weekInfo = localeInst.getWeekInfo();\n                if (weekInfo) {\n                    $ad063034c8620db8$var$cachedWeekInfo.set(locale, weekInfo);\n                    return weekInfo.firstDay;\n                }\n            }\n        }\n        let region = $ad063034c8620db8$var$getRegion(locale);\n        if (locale.includes('-fw-')) {\n            // pull the value for the attribute fw from strings such as en-US-u-ca-iso8601-fw-tue or en-US-u-ca-iso8601-fw-mon-nu-thai\n            // where the fw attribute could be followed by another unicode locale extension or not\n            let day = locale.split('-fw-')[1].split('-')[0];\n            if (day === 'mon') weekInfo = {\n                firstDay: 1\n            };\n            else if (day === 'tue') weekInfo = {\n                firstDay: 2\n            };\n            else if (day === 'wed') weekInfo = {\n                firstDay: 3\n            };\n            else if (day === 'thu') weekInfo = {\n                firstDay: 4\n            };\n            else if (day === 'fri') weekInfo = {\n                firstDay: 5\n            };\n            else if (day === 'sat') weekInfo = {\n                firstDay: 6\n            };\n            else weekInfo = {\n                firstDay: 0\n            };\n        } else if (locale.includes('-ca-iso8601')) weekInfo = {\n            firstDay: 1\n        };\n        else weekInfo = {\n            firstDay: region ? (0, $d2ca8165c9aa885a$export$7a5acbd77d414bd9)[region] || 0 : 0\n        };\n        $ad063034c8620db8$var$cachedWeekInfo.set(locale, weekInfo);\n    }\n    return weekInfo.firstDay;\n}\nfunction $ad063034c8620db8$export$ccc1b2479e7dd654(date, locale, firstDayOfWeek) {\n    let days = date.calendar.getDaysInMonth(date);\n    return Math.ceil(($ad063034c8620db8$export$2061056d06d7cdf7($ad063034c8620db8$export$a5a3b454ada2268e(date), locale, firstDayOfWeek) + days) / 7);\n}\nfunction $ad063034c8620db8$export$5c333a116e949cdd(a, b) {\n    if (a && b) return a.compare(b) <= 0 ? a : b;\n    return a || b;\n}\nfunction $ad063034c8620db8$export$a75f2bff57811055(a, b) {\n    if (a && b) return a.compare(b) >= 0 ? a : b;\n    return a || b;\n}\nconst $ad063034c8620db8$var$WEEKEND_DATA = {\n    AF: [\n        4,\n        5\n    ],\n    AE: [\n        5,\n        6\n    ],\n    BH: [\n        5,\n        6\n    ],\n    DZ: [\n        5,\n        6\n    ],\n    EG: [\n        5,\n        6\n    ],\n    IL: [\n        5,\n        6\n    ],\n    IQ: [\n        5,\n        6\n    ],\n    IR: [\n        5,\n        5\n    ],\n    JO: [\n        5,\n        6\n    ],\n    KW: [\n        5,\n        6\n    ],\n    LY: [\n        5,\n        6\n    ],\n    OM: [\n        5,\n        6\n    ],\n    QA: [\n        5,\n        6\n    ],\n    SA: [\n        5,\n        6\n    ],\n    SD: [\n        5,\n        6\n    ],\n    SY: [\n        5,\n        6\n    ],\n    YE: [\n        5,\n        6\n    ]\n};\nfunction $ad063034c8620db8$export$618d60ea299da42(date, locale) {\n    let julian = date.calendar.toJulianDay(date);\n    // If julian is negative, then julian % 7 will be negative, so we adjust\n    // accordingly.  Julian day 0 is Monday.\n    let dayOfWeek = Math.ceil(julian + 1) % 7;\n    if (dayOfWeek < 0) dayOfWeek += 7;\n    let region = $ad063034c8620db8$var$getRegion(locale);\n    // Use Intl.Locale for this once weekInfo is supported.\n    // https://github.com/tc39/proposal-intl-locale-info\n    let [start, end] = $ad063034c8620db8$var$WEEKEND_DATA[region] || [\n        6,\n        0\n    ];\n    return dayOfWeek === start || dayOfWeek === end;\n}\nfunction $ad063034c8620db8$export$ee9d87258e1d19ed(date, locale) {\n    return !$ad063034c8620db8$export$618d60ea299da42(date, locale);\n}\n\n\nexport {$ad063034c8620db8$export$ea39ec197993aef0 as isSameDay, $ad063034c8620db8$export$a18c89cbd24170ff as isSameMonth, $ad063034c8620db8$export$a5a3b454ada2268e as startOfMonth, $ad063034c8620db8$export$5841f9eb9773f25f as isSameYear, $ad063034c8620db8$export$f91e89d3d0406102 as startOfYear, $ad063034c8620db8$export$91b62ebf2ba703ee as isEqualDay, $ad063034c8620db8$export$dbc69fd56b53d5e as isEqualCalendar, $ad063034c8620db8$export$5a8da0c44a3afdf2 as isEqualMonth, $ad063034c8620db8$export$ea840f5a6dda8147 as isEqualYear, $ad063034c8620db8$export$629b0a497aa65267 as isToday, $ad063034c8620db8$export$d0bdf45af03a6ea3 as today, $ad063034c8620db8$export$2061056d06d7cdf7 as getDayOfWeek, $ad063034c8620db8$export$461939dd4422153 as now, $ad063034c8620db8$export$68781ddf31c0090f as compareDate, $ad063034c8620db8$export$c19a80a9721b80f6 as compareTime, $ad063034c8620db8$export$126c91c941de7e as getHoursInDay, $ad063034c8620db8$export$aa8b41735afcabd2 as getLocalTimeZone, $ad063034c8620db8$export$61a9d83ceb59a3dd as setLocalTimeZone, $ad063034c8620db8$export$55753838ffe79333 as resetLocalTimeZone, $ad063034c8620db8$export$6ab69b273755230b as isLocalTimeZoneOverridden, $ad063034c8620db8$export$a2258d9c4118825c as endOfMonth, $ad063034c8620db8$export$8b7aa55c66d5569e as endOfYear, $ad063034c8620db8$export$5412ac11713b72ad as getMinimumMonthInYear, $ad063034c8620db8$export$b2f4953d301981d5 as getMinimumDayInMonth, $ad063034c8620db8$export$42c81a444fbfb5d4 as startOfWeek, $ad063034c8620db8$export$ef8b6d9133084f4e as endOfWeek, $ad063034c8620db8$export$ccc1b2479e7dd654 as getWeeksInMonth, $ad063034c8620db8$export$5c333a116e949cdd as minDate, $ad063034c8620db8$export$a75f2bff57811055 as maxDate, $ad063034c8620db8$export$618d60ea299da42 as isWeekend, $ad063034c8620db8$export$ee9d87258e1d19ed as isWeekday};\n//# sourceMappingURL=queries.mjs.map\n","import {CalendarDate as $2aaf608024c21ca1$export$99faa760c7908e4f, CalendarDateTime as $2aaf608024c21ca1$export$ca871e8dbb80966f, Time as $2aaf608024c21ca1$export$680ea196effce5f, ZonedDateTime as $2aaf608024c21ca1$export$d3b7288e7994edea} from \"./CalendarDate.mjs\";\nimport {constrain as $435a2ceaa8778ed8$export$c4e2ecac49351ef2} from \"./manipulation.mjs\";\nimport {getExtendedYear as $93635573935797de$export$c36e0ecb2d4fa69d, GregorianCalendar as $93635573935797de$export$80ee6245ec4f29ec} from \"./calendars/GregorianCalendar.mjs\";\nimport {getLocalTimeZone as $ad063034c8620db8$export$aa8b41735afcabd2, isEqualCalendar as $ad063034c8620db8$export$dbc69fd56b53d5e, isLocalTimeZoneOverridden as $ad063034c8620db8$export$6ab69b273755230b} from \"./queries.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from the TC39 Temporal proposal.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\n\n\n\nfunction $d07e34cce18680fd$export$bd4fb2bc8bb06fb(date) {\n    date = $d07e34cce18680fd$export$b4a036af3fc0b032(date, new (0, $93635573935797de$export$80ee6245ec4f29ec)());\n    let year = (0, $93635573935797de$export$c36e0ecb2d4fa69d)(date.era, date.year);\n    return $d07e34cce18680fd$var$epochFromParts(year, date.month, date.day, date.hour, date.minute, date.second, date.millisecond);\n}\nfunction $d07e34cce18680fd$var$epochFromParts(year, month, day, hour, minute, second, millisecond) {\n    // Note: Date.UTC() interprets one and two-digit years as being in the\n    // 20th century, so don't use it\n    let date = new Date();\n    date.setUTCHours(hour, minute, second, millisecond);\n    date.setUTCFullYear(year, month - 1, day);\n    return date.getTime();\n}\nfunction $d07e34cce18680fd$export$59c99f3515d3493f(ms, timeZone) {\n    // Fast path for UTC.\n    if (timeZone === 'UTC') return 0;\n    // Fast path: for local timezone after 1970, use native Date.\n    // Skip this fast path if the local timezone was explicitly overridden via setLocalTimeZone,\n    // since native Date always uses the browser's timezone, not the overridden one.\n    if (ms > 0 && timeZone === (0, $ad063034c8620db8$export$aa8b41735afcabd2)() && !(0, $ad063034c8620db8$export$6ab69b273755230b)()) return new Date(ms).getTimezoneOffset() * -60000;\n    let { year: year, month: month, day: day, hour: hour, minute: minute, second: second } = $d07e34cce18680fd$var$getTimeZoneParts(ms, timeZone);\n    let utc = $d07e34cce18680fd$var$epochFromParts(year, month, day, hour, minute, second, 0);\n    return utc - Math.floor(ms / 1000) * 1000;\n}\nconst $d07e34cce18680fd$var$formattersByTimeZone = new Map();\nfunction $d07e34cce18680fd$var$getTimeZoneParts(ms, timeZone) {\n    let formatter = $d07e34cce18680fd$var$formattersByTimeZone.get(timeZone);\n    if (!formatter) {\n        formatter = new Intl.DateTimeFormat('en-US', {\n            timeZone: timeZone,\n            hour12: false,\n            era: 'short',\n            year: 'numeric',\n            month: 'numeric',\n            day: 'numeric',\n            hour: 'numeric',\n            minute: 'numeric',\n            second: 'numeric'\n        });\n        $d07e34cce18680fd$var$formattersByTimeZone.set(timeZone, formatter);\n    }\n    let parts = formatter.formatToParts(new Date(ms));\n    let namedParts = {};\n    for (let part of parts)if (part.type !== 'literal') namedParts[part.type] = part.value;\n    return {\n        // Firefox returns B instead of BC... https://bugzilla.mozilla.org/show_bug.cgi?id=1752253\n        year: namedParts.era === 'BC' || namedParts.era === 'B' ? -namedParts.year + 1 : +namedParts.year,\n        month: +namedParts.month,\n        day: +namedParts.day,\n        hour: namedParts.hour === '24' ? 0 : +namedParts.hour,\n        minute: +namedParts.minute,\n        second: +namedParts.second\n    };\n}\nconst $d07e34cce18680fd$var$DAYMILLIS = 86400000;\nfunction $d07e34cce18680fd$export$136f38efe7caf549(date, timeZone) {\n    let ms = $d07e34cce18680fd$export$bd4fb2bc8bb06fb(date);\n    let earlier = ms - $d07e34cce18680fd$export$59c99f3515d3493f(ms - $d07e34cce18680fd$var$DAYMILLIS, timeZone);\n    let later = ms - $d07e34cce18680fd$export$59c99f3515d3493f(ms + $d07e34cce18680fd$var$DAYMILLIS, timeZone);\n    return $d07e34cce18680fd$var$getValidWallTimes(date, timeZone, earlier, later);\n}\nfunction $d07e34cce18680fd$var$getValidWallTimes(date, timeZone, earlier, later) {\n    let found = earlier === later ? [\n        earlier\n    ] : [\n        earlier,\n        later\n    ];\n    return found.filter((absolute)=>$d07e34cce18680fd$var$isValidWallTime(date, timeZone, absolute));\n}\nfunction $d07e34cce18680fd$var$isValidWallTime(date, timeZone, absolute) {\n    let parts = $d07e34cce18680fd$var$getTimeZoneParts(absolute, timeZone);\n    return date.year === parts.year && date.month === parts.month && date.day === parts.day && date.hour === parts.hour && date.minute === parts.minute && date.second === parts.second;\n}\nfunction $d07e34cce18680fd$export$5107c82f94518f5c(date, timeZone, disambiguation = 'compatible') {\n    let dateTime = $d07e34cce18680fd$export$b21e0b124e224484(date);\n    // Fast path: if the time zone is UTC, use native Date.\n    if (timeZone === 'UTC') return $d07e34cce18680fd$export$bd4fb2bc8bb06fb(dateTime);\n    // Fast path: if the time zone is the local timezone and disambiguation is compatible, use native Date.\n    // Skip this fast path if the local timezone was explicitly overridden via setLocalTimeZone,\n    // since native Date always uses the browser's timezone, not the overridden one.\n    if (timeZone === (0, $ad063034c8620db8$export$aa8b41735afcabd2)() && disambiguation === 'compatible' && !(0, $ad063034c8620db8$export$6ab69b273755230b)()) {\n        dateTime = $d07e34cce18680fd$export$b4a036af3fc0b032(dateTime, new (0, $93635573935797de$export$80ee6245ec4f29ec)());\n        // Don't use Date constructor here because two-digit years are interpreted in the 20th century.\n        let date = new Date();\n        let year = (0, $93635573935797de$export$c36e0ecb2d4fa69d)(dateTime.era, dateTime.year);\n        date.setFullYear(year, dateTime.month - 1, dateTime.day);\n        date.setHours(dateTime.hour, dateTime.minute, dateTime.second, dateTime.millisecond);\n        return date.getTime();\n    }\n    let ms = $d07e34cce18680fd$export$bd4fb2bc8bb06fb(dateTime);\n    let offsetBefore = $d07e34cce18680fd$export$59c99f3515d3493f(ms - $d07e34cce18680fd$var$DAYMILLIS, timeZone);\n    let offsetAfter = $d07e34cce18680fd$export$59c99f3515d3493f(ms + $d07e34cce18680fd$var$DAYMILLIS, timeZone);\n    let valid = $d07e34cce18680fd$var$getValidWallTimes(dateTime, timeZone, ms - offsetBefore, ms - offsetAfter);\n    if (valid.length === 1) return valid[0];\n    if (valid.length > 1) switch(disambiguation){\n        // 'compatible' means 'earlier' for \"fall back\" transitions\n        case 'compatible':\n        case 'earlier':\n            return valid[0];\n        case 'later':\n            return valid[valid.length - 1];\n        case 'reject':\n            throw new RangeError('Multiple possible absolute times found');\n    }\n    switch(disambiguation){\n        case 'earlier':\n            return Math.min(ms - offsetBefore, ms - offsetAfter);\n        // 'compatible' means 'later' for \"spring forward\" transitions\n        case 'compatible':\n        case 'later':\n            return Math.max(ms - offsetBefore, ms - offsetAfter);\n        case 'reject':\n            throw new RangeError('No such absolute time found');\n    }\n}\nfunction $d07e34cce18680fd$export$e67a095c620b86fe(dateTime, timeZone, disambiguation = 'compatible') {\n    return new Date($d07e34cce18680fd$export$5107c82f94518f5c(dateTime, timeZone, disambiguation));\n}\nfunction $d07e34cce18680fd$export$1b96692a1ba042ac(ms, timeZone) {\n    let offset = $d07e34cce18680fd$export$59c99f3515d3493f(ms, timeZone);\n    let date = new Date(ms + offset);\n    let year = date.getUTCFullYear();\n    let month = date.getUTCMonth() + 1;\n    let day = date.getUTCDate();\n    let hour = date.getUTCHours();\n    let minute = date.getUTCMinutes();\n    let second = date.getUTCSeconds();\n    let millisecond = date.getUTCMilliseconds();\n    return new (0, $2aaf608024c21ca1$export$d3b7288e7994edea)(year < 1 ? 'BC' : 'AD', year < 1 ? -year + 1 : year, month, day, timeZone, offset, hour, minute, second, millisecond);\n}\nfunction $d07e34cce18680fd$export$e57ff100d91bd4b9(date, timeZone) {\n    return $d07e34cce18680fd$export$1b96692a1ba042ac(date.getTime(), timeZone);\n}\nfunction $d07e34cce18680fd$export$d7f92bcd3596b086(date) {\n    return $d07e34cce18680fd$export$e57ff100d91bd4b9(date, (0, $ad063034c8620db8$export$aa8b41735afcabd2)());\n}\nfunction $d07e34cce18680fd$export$93522d1a439f3617(dateTime) {\n    return new (0, $2aaf608024c21ca1$export$99faa760c7908e4f)(dateTime.calendar, dateTime.era, dateTime.year, dateTime.month, dateTime.day);\n}\nfunction $d07e34cce18680fd$export$6f4d78149f3f53ac(date) {\n    return {\n        era: date.era,\n        year: date.year,\n        month: date.month,\n        day: date.day\n    };\n}\nfunction $d07e34cce18680fd$export$4d0393e732857be5(date) {\n    return {\n        hour: date.hour,\n        minute: date.minute,\n        second: date.second,\n        millisecond: date.millisecond\n    };\n}\nfunction $d07e34cce18680fd$export$b21e0b124e224484(date, time) {\n    let hour = 0, minute = 0, second = 0, millisecond = 0;\n    if ('timeZone' in date) ({ hour: hour, minute: minute, second: second, millisecond: millisecond } = date);\n    else if ('hour' in date && !time) return date;\n    if (time) ({ hour: hour, minute: minute, second: second, millisecond: millisecond } = time);\n    return new (0, $2aaf608024c21ca1$export$ca871e8dbb80966f)(date.calendar, date.era, date.year, date.month, date.day, hour, minute, second, millisecond);\n}\nfunction $d07e34cce18680fd$export$d33f79e3ffc3dc83(dateTime) {\n    return new (0, $2aaf608024c21ca1$export$680ea196effce5f)(dateTime.hour, dateTime.minute, dateTime.second, dateTime.millisecond);\n}\nfunction $d07e34cce18680fd$export$b4a036af3fc0b032(date, calendar) {\n    if ((0, $ad063034c8620db8$export$dbc69fd56b53d5e)(date.calendar, calendar)) return date;\n    let calendarDate = calendar.fromJulianDay(date.calendar.toJulianDay(date));\n    let copy = date.copy();\n    copy.calendar = calendar;\n    copy.era = calendarDate.era;\n    copy.year = calendarDate.year;\n    copy.month = calendarDate.month;\n    copy.day = calendarDate.day;\n    (0, $435a2ceaa8778ed8$export$c4e2ecac49351ef2)(copy);\n    return copy;\n}\nfunction $d07e34cce18680fd$export$84c95a83c799e074(date, timeZone, disambiguation) {\n    if (date instanceof (0, $2aaf608024c21ca1$export$d3b7288e7994edea)) {\n        if (date.timeZone === timeZone) return date;\n        return $d07e34cce18680fd$export$538b00033cc11c75(date, timeZone);\n    }\n    let ms = $d07e34cce18680fd$export$5107c82f94518f5c(date, timeZone, disambiguation);\n    return $d07e34cce18680fd$export$1b96692a1ba042ac(ms, timeZone);\n}\nfunction $d07e34cce18680fd$export$83aac07b4c37b25(date) {\n    let ms = $d07e34cce18680fd$export$bd4fb2bc8bb06fb(date) - date.offset;\n    return new Date(ms);\n}\nfunction $d07e34cce18680fd$export$538b00033cc11c75(date, timeZone) {\n    let ms = $d07e34cce18680fd$export$bd4fb2bc8bb06fb(date) - date.offset;\n    return $d07e34cce18680fd$export$b4a036af3fc0b032($d07e34cce18680fd$export$1b96692a1ba042ac(ms, timeZone), date.calendar);\n}\nfunction $d07e34cce18680fd$export$d9b67bc93c097491(date) {\n    return $d07e34cce18680fd$export$538b00033cc11c75(date, (0, $ad063034c8620db8$export$aa8b41735afcabd2)());\n}\n\n\nexport {$d07e34cce18680fd$export$bd4fb2bc8bb06fb as epochFromDate, $d07e34cce18680fd$export$b4a036af3fc0b032 as toCalendar, $d07e34cce18680fd$export$59c99f3515d3493f as getTimeZoneOffset, $d07e34cce18680fd$export$136f38efe7caf549 as possibleAbsolutes, $d07e34cce18680fd$export$5107c82f94518f5c as toAbsolute, $d07e34cce18680fd$export$b21e0b124e224484 as toCalendarDateTime, $d07e34cce18680fd$export$e67a095c620b86fe as toDate, $d07e34cce18680fd$export$1b96692a1ba042ac as fromAbsolute, $d07e34cce18680fd$export$e57ff100d91bd4b9 as fromDate, $d07e34cce18680fd$export$d7f92bcd3596b086 as fromDateToLocal, $d07e34cce18680fd$export$93522d1a439f3617 as toCalendarDate, $d07e34cce18680fd$export$6f4d78149f3f53ac as toDateFields, $d07e34cce18680fd$export$4d0393e732857be5 as toTimeFields, $d07e34cce18680fd$export$d33f79e3ffc3dc83 as toTime, $d07e34cce18680fd$export$84c95a83c799e074 as toZoned, $d07e34cce18680fd$export$538b00033cc11c75 as toTimeZone, $d07e34cce18680fd$export$83aac07b4c37b25 as zonedToDate, $d07e34cce18680fd$export$d9b67bc93c097491 as toLocalTimeZone};\n//# sourceMappingURL=conversion.mjs.map\n","import {epochFromDate as $d07e34cce18680fd$export$bd4fb2bc8bb06fb, fromAbsolute as $d07e34cce18680fd$export$1b96692a1ba042ac, toAbsolute as $d07e34cce18680fd$export$5107c82f94518f5c, toCalendar as $d07e34cce18680fd$export$b4a036af3fc0b032, toCalendarDateTime as $d07e34cce18680fd$export$b21e0b124e224484} from \"./conversion.mjs\";\nimport {GregorianCalendar as $93635573935797de$export$80ee6245ec4f29ec} from \"./calendars/GregorianCalendar.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nconst $435a2ceaa8778ed8$var$ONE_HOUR = 3600000;\nfunction $435a2ceaa8778ed8$export$e16d8520af44a096(date, duration) {\n    let mutableDate = date.copy();\n    let days = 'hour' in mutableDate ? $435a2ceaa8778ed8$var$addTimeFields(mutableDate, duration) : 0;\n    $435a2ceaa8778ed8$var$addYears(mutableDate, duration.years || 0);\n    if (mutableDate.calendar.balanceYearMonth) mutableDate.calendar.balanceYearMonth(mutableDate, date);\n    mutableDate.month += duration.months || 0;\n    $435a2ceaa8778ed8$var$balanceYearMonth(mutableDate);\n    $435a2ceaa8778ed8$var$constrainMonthDay(mutableDate);\n    mutableDate.day += (duration.weeks || 0) * 7;\n    mutableDate.day += duration.days || 0;\n    mutableDate.day += days;\n    $435a2ceaa8778ed8$var$balanceDay(mutableDate);\n    if (mutableDate.calendar.balanceDate) mutableDate.calendar.balanceDate(mutableDate);\n    // Constrain in case adding ended up with a date outside the valid range for the calendar system.\n    // The behavior here is slightly different than when constraining in the `set` function in that\n    // we adjust smaller fields to their minimum/maximum values rather than constraining each field\n    // individually. This matches the general behavior of `add` vs `set` regarding how fields are balanced.\n    if (mutableDate.year < 1) {\n        mutableDate.year = 1;\n        mutableDate.month = 1;\n        mutableDate.day = 1;\n    }\n    let maxYear = mutableDate.calendar.getYearsInEra(mutableDate);\n    if (mutableDate.year > maxYear) {\n        let isInverseEra = mutableDate.calendar.isInverseEra?.(mutableDate);\n        mutableDate.year = maxYear;\n        mutableDate.month = isInverseEra ? 1 : mutableDate.calendar.getMonthsInYear(mutableDate);\n        mutableDate.day = isInverseEra ? 1 : mutableDate.calendar.getDaysInMonth(mutableDate);\n    }\n    if (mutableDate.month < 1) {\n        mutableDate.month = 1;\n        mutableDate.day = 1;\n    }\n    let maxMonth = mutableDate.calendar.getMonthsInYear(mutableDate);\n    if (mutableDate.month > maxMonth) {\n        mutableDate.month = maxMonth;\n        mutableDate.day = mutableDate.calendar.getDaysInMonth(mutableDate);\n    }\n    mutableDate.day = Math.max(1, Math.min(mutableDate.calendar.getDaysInMonth(mutableDate), mutableDate.day));\n    return mutableDate;\n}\nfunction $435a2ceaa8778ed8$var$addYears(date, years) {\n    if (date.calendar.isInverseEra?.(date)) years = -years;\n    date.year += years;\n}\nfunction $435a2ceaa8778ed8$var$balanceYearMonth(date) {\n    while(date.month < 1){\n        $435a2ceaa8778ed8$var$addYears(date, -1);\n        date.month += date.calendar.getMonthsInYear(date);\n    }\n    let monthsInYear = 0;\n    while(date.month > (monthsInYear = date.calendar.getMonthsInYear(date))){\n        date.month -= monthsInYear;\n        $435a2ceaa8778ed8$var$addYears(date, 1);\n    }\n}\nfunction $435a2ceaa8778ed8$var$balanceDay(date) {\n    while(date.day < 1){\n        date.month--;\n        $435a2ceaa8778ed8$var$balanceYearMonth(date);\n        date.day += date.calendar.getDaysInMonth(date);\n    }\n    while(date.day > date.calendar.getDaysInMonth(date)){\n        date.day -= date.calendar.getDaysInMonth(date);\n        date.month++;\n        $435a2ceaa8778ed8$var$balanceYearMonth(date);\n    }\n}\nfunction $435a2ceaa8778ed8$var$constrainMonthDay(date) {\n    date.month = Math.max(1, Math.min(date.calendar.getMonthsInYear(date), date.month));\n    date.day = Math.max(1, Math.min(date.calendar.getDaysInMonth(date), date.day));\n}\nfunction $435a2ceaa8778ed8$export$c4e2ecac49351ef2(date) {\n    if (date.calendar.constrainDate) date.calendar.constrainDate(date);\n    date.year = Math.max(1, Math.min(date.calendar.getYearsInEra(date), date.year));\n    $435a2ceaa8778ed8$var$constrainMonthDay(date);\n}\nfunction $435a2ceaa8778ed8$export$3e2544e88a25bff8(duration) {\n    let inverseDuration = {};\n    for(let key in duration)if (typeof duration[key] === 'number') inverseDuration[key] = -duration[key];\n    return inverseDuration;\n}\nfunction $435a2ceaa8778ed8$export$4e2d2ead65e5f7e3(date, duration) {\n    return $435a2ceaa8778ed8$export$e16d8520af44a096(date, $435a2ceaa8778ed8$export$3e2544e88a25bff8(duration));\n}\nfunction $435a2ceaa8778ed8$export$adaa4cf7ef1b65be(date, fields) {\n    let mutableDate = date.copy();\n    if (fields.era != null) mutableDate.era = fields.era;\n    if (fields.year != null) mutableDate.year = fields.year;\n    if (fields.month != null) mutableDate.month = fields.month;\n    if (fields.day != null) mutableDate.day = fields.day;\n    $435a2ceaa8778ed8$export$c4e2ecac49351ef2(mutableDate);\n    return mutableDate;\n}\nfunction $435a2ceaa8778ed8$export$e5d5e1c1822b6e56(value, fields) {\n    let mutableValue = value.copy();\n    if (fields.hour != null) mutableValue.hour = fields.hour;\n    if (fields.minute != null) mutableValue.minute = fields.minute;\n    if (fields.second != null) mutableValue.second = fields.second;\n    if (fields.millisecond != null) mutableValue.millisecond = fields.millisecond;\n    $435a2ceaa8778ed8$export$7555de1e070510cb(mutableValue);\n    return mutableValue;\n}\nfunction $435a2ceaa8778ed8$var$balanceTime(time) {\n    time.second += Math.floor(time.millisecond / 1000);\n    time.millisecond = $435a2ceaa8778ed8$var$nonNegativeMod(time.millisecond, 1000);\n    time.minute += Math.floor(time.second / 60);\n    time.second = $435a2ceaa8778ed8$var$nonNegativeMod(time.second, 60);\n    time.hour += Math.floor(time.minute / 60);\n    time.minute = $435a2ceaa8778ed8$var$nonNegativeMod(time.minute, 60);\n    let days = Math.floor(time.hour / 24);\n    time.hour = $435a2ceaa8778ed8$var$nonNegativeMod(time.hour, 24);\n    return days;\n}\nfunction $435a2ceaa8778ed8$export$7555de1e070510cb(time) {\n    time.millisecond = Math.max(0, Math.min(time.millisecond, 999));\n    time.second = Math.max(0, Math.min(time.second, 59));\n    time.minute = Math.max(0, Math.min(time.minute, 59));\n    time.hour = Math.max(0, Math.min(time.hour, 23));\n}\nfunction $435a2ceaa8778ed8$var$nonNegativeMod(a, b) {\n    let result = a % b;\n    if (result < 0) result += b;\n    return result;\n}\nfunction $435a2ceaa8778ed8$var$addTimeFields(time, duration) {\n    time.hour += duration.hours || 0;\n    time.minute += duration.minutes || 0;\n    time.second += duration.seconds || 0;\n    time.millisecond += duration.milliseconds || 0;\n    return $435a2ceaa8778ed8$var$balanceTime(time);\n}\nfunction $435a2ceaa8778ed8$export$7ed87b6bc2506470(time, duration) {\n    let res = time.copy();\n    $435a2ceaa8778ed8$var$addTimeFields(res, duration);\n    return res;\n}\nfunction $435a2ceaa8778ed8$export$fe34d3a381cd7501(time, duration) {\n    return $435a2ceaa8778ed8$export$7ed87b6bc2506470(time, $435a2ceaa8778ed8$export$3e2544e88a25bff8(duration));\n}\nfunction $435a2ceaa8778ed8$export$d52ced6badfb9a4c(value, field, amount, options) {\n    let mutable = value.copy();\n    switch(field){\n        case 'era':\n            {\n                let eras = value.calendar.getEras();\n                let eraIndex = eras.indexOf(value.era);\n                if (eraIndex < 0) throw new Error('Invalid era: ' + value.era);\n                eraIndex = $435a2ceaa8778ed8$var$cycleValue(eraIndex, amount, 0, eras.length - 1, options?.round);\n                mutable.era = eras[eraIndex];\n                // Constrain the year and other fields within the era, so the era doesn't change when we balance below.\n                $435a2ceaa8778ed8$export$c4e2ecac49351ef2(mutable);\n                break;\n            }\n        case 'year':\n            if (mutable.calendar.isInverseEra?.(mutable)) amount = -amount;\n            // The year field should not cycle within the era as that can cause weird behavior affecting other fields.\n            // We need to also allow values < 1 so that decrementing goes to the previous era. If we get -Infinity back\n            // we know we wrapped around after reaching 9999 (the maximum), so set the year back to 1.\n            mutable.year = $435a2ceaa8778ed8$var$cycleValue(value.year, amount, -Infinity, 9999, options?.round);\n            if (mutable.year === -Infinity) mutable.year = 1;\n            if (mutable.calendar.balanceYearMonth) mutable.calendar.balanceYearMonth(mutable, value);\n            break;\n        case 'month':\n            mutable.month = $435a2ceaa8778ed8$var$cycleValue(value.month, amount, 1, value.calendar.getMonthsInYear(value), options?.round);\n            break;\n        case 'day':\n            mutable.day = $435a2ceaa8778ed8$var$cycleValue(value.day, amount, 1, value.calendar.getDaysInMonth(value), options?.round);\n            break;\n        default:\n            throw new Error('Unsupported field ' + field);\n    }\n    if (value.calendar.balanceDate) value.calendar.balanceDate(mutable);\n    $435a2ceaa8778ed8$export$c4e2ecac49351ef2(mutable);\n    return mutable;\n}\nfunction $435a2ceaa8778ed8$export$dd02b3e0007dfe28(value, field, amount, options) {\n    let mutable = value.copy();\n    switch(field){\n        case 'hour':\n            {\n                let hours = value.hour;\n                let min = 0;\n                let max = 23;\n                if (options?.hourCycle === 12) {\n                    let isPM = hours >= 12;\n                    min = isPM ? 12 : 0;\n                    max = isPM ? 23 : 11;\n                }\n                mutable.hour = $435a2ceaa8778ed8$var$cycleValue(hours, amount, min, max, options?.round);\n                break;\n            }\n        case 'minute':\n            mutable.minute = $435a2ceaa8778ed8$var$cycleValue(value.minute, amount, 0, 59, options?.round);\n            break;\n        case 'second':\n            mutable.second = $435a2ceaa8778ed8$var$cycleValue(value.second, amount, 0, 59, options?.round);\n            break;\n        case 'millisecond':\n            mutable.millisecond = $435a2ceaa8778ed8$var$cycleValue(value.millisecond, amount, 0, 999, options?.round);\n            break;\n        default:\n            throw new Error('Unsupported field ' + field);\n    }\n    return mutable;\n}\nfunction $435a2ceaa8778ed8$var$cycleValue(value, amount, min, max, round = false) {\n    if (round) {\n        value += Math.sign(amount);\n        if (value < min) value = max;\n        let div = Math.abs(amount);\n        if (amount > 0) value = Math.ceil(value / div) * div;\n        else value = Math.floor(value / div) * div;\n        if (value > max) value = min;\n    } else {\n        value += amount;\n        if (value < min) value = max - (min - value - 1);\n        else if (value > max) value = min + (value - max - 1);\n    }\n    return value;\n}\nfunction $435a2ceaa8778ed8$export$96b1d28349274637(dateTime, duration) {\n    let ms;\n    if (duration.years != null && duration.years !== 0 || duration.months != null && duration.months !== 0 || duration.weeks != null && duration.weeks !== 0 || duration.days != null && duration.days !== 0) {\n        let res = $435a2ceaa8778ed8$export$e16d8520af44a096((0, $d07e34cce18680fd$export$b21e0b124e224484)(dateTime), {\n            years: duration.years,\n            months: duration.months,\n            weeks: duration.weeks,\n            days: duration.days\n        });\n        // Changing the date may change the timezone offset, so we need to recompute\n        // using the 'compatible' disambiguation.\n        ms = (0, $d07e34cce18680fd$export$5107c82f94518f5c)(res, dateTime.timeZone);\n    } else // Otherwise, preserve the offset of the original date.\n    ms = (0, $d07e34cce18680fd$export$bd4fb2bc8bb06fb)(dateTime) - dateTime.offset;\n    // Perform time manipulation in milliseconds rather than on the original time fields to account for DST.\n    // For example, adding one hour during a DST transition may result in the hour field staying the same or\n    // skipping an hour. This results in the offset field changing value instead of the specified field.\n    ms += duration.milliseconds || 0;\n    ms += (duration.seconds || 0) * 1000;\n    ms += (duration.minutes || 0) * 60000;\n    ms += (duration.hours || 0) * 3600000;\n    let res = (0, $d07e34cce18680fd$export$1b96692a1ba042ac)(ms, dateTime.timeZone);\n    return (0, $d07e34cce18680fd$export$b4a036af3fc0b032)(res, dateTime.calendar);\n}\nfunction $435a2ceaa8778ed8$export$6814caac34ca03c7(dateTime, duration) {\n    return $435a2ceaa8778ed8$export$96b1d28349274637(dateTime, $435a2ceaa8778ed8$export$3e2544e88a25bff8(duration));\n}\nfunction $435a2ceaa8778ed8$export$9a297d111fc86b79(dateTime, field, amount, options) {\n    // For date fields, we want the time to remain consistent and the UTC offset to potentially change to account for DST changes.\n    // For time fields, we want the time to change by the amount given. This may result in the hour field staying the same, but the UTC\n    // offset changing in the case of a backward DST transition, or skipping an hour in the case of a forward DST transition.\n    switch(field){\n        case 'hour':\n            {\n                let min = 0;\n                let max = 23;\n                if (options?.hourCycle === 12) {\n                    let isPM = dateTime.hour >= 12;\n                    min = isPM ? 12 : 0;\n                    max = isPM ? 23 : 11;\n                }\n                // The minimum and maximum hour may be affected by daylight saving time.\n                // For example, it might jump forward at midnight, and skip 1am.\n                // Or it might end at midnight and repeat the 11pm hour. To handle this, we get\n                // the possible absolute times for the min and max, and find the maximum range\n                // that is within the current day.\n                let plainDateTime = (0, $d07e34cce18680fd$export$b21e0b124e224484)(dateTime);\n                let minDate = (0, $d07e34cce18680fd$export$b4a036af3fc0b032)($435a2ceaa8778ed8$export$e5d5e1c1822b6e56(plainDateTime, {\n                    hour: min\n                }), new (0, $93635573935797de$export$80ee6245ec4f29ec)());\n                let minAbsolute = [\n                    (0, $d07e34cce18680fd$export$5107c82f94518f5c)(minDate, dateTime.timeZone, 'earlier'),\n                    (0, $d07e34cce18680fd$export$5107c82f94518f5c)(minDate, dateTime.timeZone, 'later')\n                ].filter((ms)=>(0, $d07e34cce18680fd$export$1b96692a1ba042ac)(ms, dateTime.timeZone).day === minDate.day)[0];\n                let maxDate = (0, $d07e34cce18680fd$export$b4a036af3fc0b032)($435a2ceaa8778ed8$export$e5d5e1c1822b6e56(plainDateTime, {\n                    hour: max\n                }), new (0, $93635573935797de$export$80ee6245ec4f29ec)());\n                let maxAbsolute = [\n                    (0, $d07e34cce18680fd$export$5107c82f94518f5c)(maxDate, dateTime.timeZone, 'earlier'),\n                    (0, $d07e34cce18680fd$export$5107c82f94518f5c)(maxDate, dateTime.timeZone, 'later')\n                ].filter((ms)=>(0, $d07e34cce18680fd$export$1b96692a1ba042ac)(ms, dateTime.timeZone).day === maxDate.day).pop();\n                // Since hours may repeat, we need to operate on the absolute time in milliseconds.\n                // This is done in hours from the Unix epoch so that cycleValue works correctly,\n                // and then converted back to milliseconds.\n                let ms = (0, $d07e34cce18680fd$export$bd4fb2bc8bb06fb)(dateTime) - dateTime.offset;\n                let hours = Math.floor(ms / $435a2ceaa8778ed8$var$ONE_HOUR);\n                let remainder = ms % $435a2ceaa8778ed8$var$ONE_HOUR;\n                ms = $435a2ceaa8778ed8$var$cycleValue(hours, amount, Math.floor(minAbsolute / $435a2ceaa8778ed8$var$ONE_HOUR), Math.floor(maxAbsolute / $435a2ceaa8778ed8$var$ONE_HOUR), options?.round) * $435a2ceaa8778ed8$var$ONE_HOUR + remainder;\n                // Now compute the new timezone offset, and convert the absolute time back to local time.\n                return (0, $d07e34cce18680fd$export$b4a036af3fc0b032)((0, $d07e34cce18680fd$export$1b96692a1ba042ac)(ms, dateTime.timeZone), dateTime.calendar);\n            }\n        case 'minute':\n        case 'second':\n        case 'millisecond':\n            // @ts-ignore\n            return $435a2ceaa8778ed8$export$dd02b3e0007dfe28(dateTime, field, amount, options);\n        case 'era':\n        case 'year':\n        case 'month':\n        case 'day':\n            {\n                let res = $435a2ceaa8778ed8$export$d52ced6badfb9a4c((0, $d07e34cce18680fd$export$b21e0b124e224484)(dateTime), field, amount, options);\n                let ms = (0, $d07e34cce18680fd$export$5107c82f94518f5c)(res, dateTime.timeZone);\n                return (0, $d07e34cce18680fd$export$b4a036af3fc0b032)((0, $d07e34cce18680fd$export$1b96692a1ba042ac)(ms, dateTime.timeZone), dateTime.calendar);\n            }\n        default:\n            throw new Error('Unsupported field ' + field);\n    }\n}\nfunction $435a2ceaa8778ed8$export$31b5430eb18be4f8(dateTime, fields, disambiguation) {\n    // Set the date/time fields, and recompute the UTC offset to account for DST changes.\n    // We also need to validate by converting back to a local time in case hours are skipped during forward DST transitions.\n    let plainDateTime = (0, $d07e34cce18680fd$export$b21e0b124e224484)(dateTime);\n    let res = $435a2ceaa8778ed8$export$e5d5e1c1822b6e56($435a2ceaa8778ed8$export$adaa4cf7ef1b65be(plainDateTime, fields), fields);\n    // If the resulting plain date time values are equal, return the original time.\n    // We don't want to change the offset when setting the time to the same value.\n    if (res.compare(plainDateTime) === 0) return dateTime;\n    let ms = (0, $d07e34cce18680fd$export$5107c82f94518f5c)(res, dateTime.timeZone, disambiguation);\n    return (0, $d07e34cce18680fd$export$b4a036af3fc0b032)((0, $d07e34cce18680fd$export$1b96692a1ba042ac)(ms, dateTime.timeZone), dateTime.calendar);\n}\n\n\nexport {$435a2ceaa8778ed8$export$e16d8520af44a096 as add, $435a2ceaa8778ed8$export$c4e2ecac49351ef2 as constrain, $435a2ceaa8778ed8$export$3e2544e88a25bff8 as invertDuration, $435a2ceaa8778ed8$export$4e2d2ead65e5f7e3 as subtract, $435a2ceaa8778ed8$export$adaa4cf7ef1b65be as set, $435a2ceaa8778ed8$export$e5d5e1c1822b6e56 as setTime, $435a2ceaa8778ed8$export$7555de1e070510cb as constrainTime, $435a2ceaa8778ed8$export$7ed87b6bc2506470 as addTime, $435a2ceaa8778ed8$export$fe34d3a381cd7501 as subtractTime, $435a2ceaa8778ed8$export$d52ced6badfb9a4c as cycleDate, $435a2ceaa8778ed8$export$dd02b3e0007dfe28 as cycleTime, $435a2ceaa8778ed8$export$96b1d28349274637 as addZoned, $435a2ceaa8778ed8$export$6814caac34ca03c7 as subtractZoned, $435a2ceaa8778ed8$export$9a297d111fc86b79 as cycleZoned, $435a2ceaa8778ed8$export$31b5430eb18be4f8 as setZoned};\n//# sourceMappingURL=manipulation.mjs.map\n","import {CalendarDate as $2aaf608024c21ca1$export$99faa760c7908e4f, CalendarDateTime as $2aaf608024c21ca1$export$ca871e8dbb80966f, Time as $2aaf608024c21ca1$export$680ea196effce5f, ZonedDateTime as $2aaf608024c21ca1$export$d3b7288e7994edea} from \"./CalendarDate.mjs\";\nimport {epochFromDate as $d07e34cce18680fd$export$bd4fb2bc8bb06fb, fromAbsolute as $d07e34cce18680fd$export$1b96692a1ba042ac, possibleAbsolutes as $d07e34cce18680fd$export$136f38efe7caf549, toAbsolute as $d07e34cce18680fd$export$5107c82f94518f5c, toCalendar as $d07e34cce18680fd$export$b4a036af3fc0b032, toCalendarDateTime as $d07e34cce18680fd$export$b21e0b124e224484, toTimeZone as $d07e34cce18680fd$export$538b00033cc11c75} from \"./conversion.mjs\";\nimport {getLocalTimeZone as $ad063034c8620db8$export$aa8b41735afcabd2} from \"./queries.mjs\";\nimport {GregorianCalendar as $93635573935797de$export$80ee6245ec4f29ec} from \"./calendars/GregorianCalendar.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nconst $58246871e4652552$var$TIME_RE = /^(\\d{2})(?::(\\d{2}))?(?::(\\d{2}))?(\\.\\d+)?$/;\nconst $58246871e4652552$var$DATE_RE = /^([+-]\\d{6}|\\d{4})-(\\d{2})-(\\d{2})$/;\nconst $58246871e4652552$var$DATE_TIME_RE = /^([+-]\\d{6}|\\d{4})-(\\d{2})-(\\d{2})(?:T(\\d{2}))?(?::(\\d{2}))?(?::(\\d{2}))?(\\.\\d+)?$/;\nconst $58246871e4652552$var$ZONED_DATE_TIME_RE = /^([+-]\\d{6}|\\d{4})-(\\d{2})-(\\d{2})(?:T(\\d{2}))?(?::(\\d{2}))?(?::(\\d{2}))?(\\.\\d+)?(?:([+-]\\d{2})(?::?(\\d{2}))?(?::?(\\d{2}))?)?\\[(.*?)\\]$/;\nconst $58246871e4652552$var$ABSOLUTE_RE = /^([+-]\\d{6}|\\d{4})-(\\d{2})-(\\d{2})(?:T(\\d{2}))?(?::(\\d{2}))?(?::(\\d{2}))?(\\.\\d+)?(?:(?:([+-]\\d{2})(?::?(\\d{2}))?)|Z)$/;\nconst $58246871e4652552$var$DATE_TIME_DURATION_RE = /^((?<negative>-)|\\+)?P((?<years>\\d*)Y)?((?<months>\\d*)M)?((?<weeks>\\d*)W)?((?<days>\\d*)D)?((?<time>T)((?<hours>\\d*[.,]?\\d{1,9})H)?((?<minutes>\\d*[.,]?\\d{1,9})M)?((?<seconds>\\d*[.,]?\\d{1,9})S)?)?$/;\nconst $58246871e4652552$var$requiredDurationTimeGroups = [\n    'hours',\n    'minutes',\n    'seconds'\n];\nconst $58246871e4652552$var$requiredDurationGroups = [\n    'years',\n    'months',\n    'weeks',\n    'days',\n    ...$58246871e4652552$var$requiredDurationTimeGroups\n];\nfunction $58246871e4652552$export$c9698ec7f05a07e1(value) {\n    let m = value.match($58246871e4652552$var$TIME_RE);\n    if (!m) throw new Error('Invalid ISO 8601 time string: ' + value);\n    return new (0, $2aaf608024c21ca1$export$680ea196effce5f)($58246871e4652552$var$parseNumber(m[1], 0, 23), m[2] ? $58246871e4652552$var$parseNumber(m[2], 0, 59) : 0, m[3] ? $58246871e4652552$var$parseNumber(m[3], 0, 59) : 0, m[4] ? $58246871e4652552$var$parseNumber(m[4], 0, Infinity) * 1000 : 0);\n}\nfunction $58246871e4652552$export$6b862160d295c8e(value) {\n    let m = value.match($58246871e4652552$var$DATE_RE);\n    if (!m) {\n        if ($58246871e4652552$var$ABSOLUTE_RE.test(value)) throw new Error(`Invalid ISO 8601 date string: ${value}. Use parseAbsolute() instead.`);\n        throw new Error('Invalid ISO 8601 date string: ' + value);\n    }\n    let date = new (0, $2aaf608024c21ca1$export$99faa760c7908e4f)($58246871e4652552$var$parseNumber(m[1], 0, 9999), $58246871e4652552$var$parseNumber(m[2], 1, 12), 1);\n    date.day = $58246871e4652552$var$parseNumber(m[3], 1, date.calendar.getDaysInMonth(date));\n    return date;\n}\nfunction $58246871e4652552$export$588937bcd60ade55(value) {\n    let m = value.match($58246871e4652552$var$DATE_TIME_RE);\n    if (!m) {\n        if ($58246871e4652552$var$ABSOLUTE_RE.test(value)) throw new Error(`Invalid ISO 8601 date time string: ${value}. Use parseAbsolute() instead.`);\n        throw new Error('Invalid ISO 8601 date time string: ' + value);\n    }\n    let year = $58246871e4652552$var$parseNumber(m[1], -9999, 9999);\n    let era = year < 1 ? 'BC' : 'AD';\n    let date = new (0, $2aaf608024c21ca1$export$ca871e8dbb80966f)(era, year < 1 ? -year + 1 : year, $58246871e4652552$var$parseNumber(m[2], 1, 12), 1, m[4] ? $58246871e4652552$var$parseNumber(m[4], 0, 23) : 0, m[5] ? $58246871e4652552$var$parseNumber(m[5], 0, 59) : 0, m[6] ? $58246871e4652552$var$parseNumber(m[6], 0, 59) : 0, m[7] ? $58246871e4652552$var$parseNumber(m[7], 0, Infinity) * 1000 : 0);\n    date.day = $58246871e4652552$var$parseNumber(m[3], 0, date.calendar.getDaysInMonth(date));\n    return date;\n}\nfunction $58246871e4652552$export$fd7893f06e92a6a4(value, disambiguation) {\n    let m = value.match($58246871e4652552$var$ZONED_DATE_TIME_RE);\n    if (!m) throw new Error('Invalid ISO 8601 date time string: ' + value);\n    let year = $58246871e4652552$var$parseNumber(m[1], -9999, 9999);\n    let era = year < 1 ? 'BC' : 'AD';\n    let date = new (0, $2aaf608024c21ca1$export$d3b7288e7994edea)(era, year < 1 ? -year + 1 : year, $58246871e4652552$var$parseNumber(m[2], 1, 12), 1, m[11], 0, m[4] ? $58246871e4652552$var$parseNumber(m[4], 0, 23) : 0, m[5] ? $58246871e4652552$var$parseNumber(m[5], 0, 59) : 0, m[6] ? $58246871e4652552$var$parseNumber(m[6], 0, 59) : 0, m[7] ? $58246871e4652552$var$parseNumber(m[7], 0, Infinity) * 1000 : 0);\n    date.day = $58246871e4652552$var$parseNumber(m[3], 0, date.calendar.getDaysInMonth(date));\n    let plainDateTime = (0, $d07e34cce18680fd$export$b21e0b124e224484)(date);\n    let ms;\n    if (m[8]) {\n        let hourOffset = $58246871e4652552$var$parseNumber(m[8], -23, 23);\n        date.offset = Math.sign(hourOffset) * (Math.abs(hourOffset) * 3600000 + $58246871e4652552$var$parseNumber(m[9] ?? '0', 0, 59) * 60000 + $58246871e4652552$var$parseNumber(m[10] ?? '0', 0, 59) * 1000);\n        ms = (0, $d07e34cce18680fd$export$bd4fb2bc8bb06fb)(date) - date.offset;\n        // Validate offset against parsed date.\n        let absolutes = (0, $d07e34cce18680fd$export$136f38efe7caf549)(plainDateTime, date.timeZone);\n        if (!absolutes.includes(ms)) throw new Error(`Offset ${$58246871e4652552$var$offsetToString(date.offset)} is invalid for ${$58246871e4652552$export$4223de14708adc63(date)} in ${date.timeZone}`);\n    } else // Convert to absolute and back to fix invalid times due to DST.\n    ms = (0, $d07e34cce18680fd$export$5107c82f94518f5c)((0, $d07e34cce18680fd$export$b21e0b124e224484)(plainDateTime), date.timeZone, disambiguation);\n    return (0, $d07e34cce18680fd$export$1b96692a1ba042ac)(ms, date.timeZone);\n}\nfunction $58246871e4652552$export$5adfdab05168c219(value, timeZone) {\n    let m = value.match($58246871e4652552$var$ABSOLUTE_RE);\n    if (!m) throw new Error('Invalid ISO 8601 date time string: ' + value);\n    let year = $58246871e4652552$var$parseNumber(m[1], -9999, 9999);\n    let era = year < 1 ? 'BC' : 'AD';\n    let date = new (0, $2aaf608024c21ca1$export$d3b7288e7994edea)(era, year < 1 ? -year + 1 : year, $58246871e4652552$var$parseNumber(m[2], 1, 12), 1, timeZone, 0, m[4] ? $58246871e4652552$var$parseNumber(m[4], 0, 23) : 0, m[5] ? $58246871e4652552$var$parseNumber(m[5], 0, 59) : 0, m[6] ? $58246871e4652552$var$parseNumber(m[6], 0, 59) : 0, m[7] ? $58246871e4652552$var$parseNumber(m[7], 0, Infinity) * 1000 : 0);\n    date.day = $58246871e4652552$var$parseNumber(m[3], 0, date.calendar.getDaysInMonth(date));\n    if (m[8]) date.offset = $58246871e4652552$var$parseNumber(m[8], -23, 23) * 3600000 + $58246871e4652552$var$parseNumber(m[9] ?? '0', 0, 59) * 60000;\n    return (0, $d07e34cce18680fd$export$538b00033cc11c75)(date, timeZone);\n}\nfunction $58246871e4652552$export$8e384432362ed0f0(value) {\n    return $58246871e4652552$export$5adfdab05168c219(value, (0, $ad063034c8620db8$export$aa8b41735afcabd2)());\n}\nfunction $58246871e4652552$var$parseNumber(value, min, max) {\n    let val = Number(value);\n    if (val < min || val > max) throw new RangeError(`Value out of range: ${min} <= ${val} <= ${max}`);\n    return val;\n}\nfunction $58246871e4652552$export$f59dee82248f5ad4(time) {\n    return `${String(time.hour).padStart(2, '0')}:${String(time.minute).padStart(2, '0')}:${String(time.second).padStart(2, '0')}${time.millisecond ? String(time.millisecond / 1000).slice(1) : ''}`;\n}\nfunction $58246871e4652552$export$60dfd74aa96791bd(date) {\n    let gregorianDate = (0, $d07e34cce18680fd$export$b4a036af3fc0b032)(date, new (0, $93635573935797de$export$80ee6245ec4f29ec)());\n    let year;\n    if (gregorianDate.era === 'BC') year = gregorianDate.year === 1 ? '0000' : '-' + String(Math.abs(1 - gregorianDate.year)).padStart(6, '00');\n    else year = String(gregorianDate.year).padStart(4, '0');\n    return `${year}-${String(gregorianDate.month).padStart(2, '0')}-${String(gregorianDate.day).padStart(2, '0')}`;\n}\nfunction $58246871e4652552$export$4223de14708adc63(date) {\n    // @ts-ignore\n    return `${$58246871e4652552$export$60dfd74aa96791bd(date)}T${$58246871e4652552$export$f59dee82248f5ad4(date)}`;\n}\nfunction $58246871e4652552$var$offsetToString(offset) {\n    let sign = Math.sign(offset) < 0 ? '-' : '+';\n    offset = Math.abs(offset);\n    let offsetHours = Math.floor(offset / 3600000);\n    let offsetMinutes = Math.floor(offset % 3600000 / 60000);\n    let offsetSeconds = Math.floor(offset % 3600000 % 60000 / 1000);\n    let stringOffset = `${sign}${String(offsetHours).padStart(2, '0')}:${String(offsetMinutes).padStart(2, '0')}`;\n    if (offsetSeconds !== 0) stringOffset += `:${String(offsetSeconds).padStart(2, '0')}`;\n    return stringOffset;\n}\nfunction $58246871e4652552$export$bf79f1ebf4b18792(date) {\n    return `${$58246871e4652552$export$4223de14708adc63(date)}${$58246871e4652552$var$offsetToString(date.offset)}[${date.timeZone}]`;\n}\nfunction $58246871e4652552$export$ecae829bb3747ea6(value) {\n    const match = value.match($58246871e4652552$var$DATE_TIME_DURATION_RE);\n    if (!match) throw new Error(`Invalid ISO 8601 Duration string: ${value}`);\n    const parseDurationGroup = (group, isNegative)=>{\n        if (!group) return 0;\n        try {\n            const sign = isNegative ? -1 : 1;\n            return sign * Number(group.replace(',', '.'));\n        } catch  {\n            throw new Error(`Invalid ISO 8601 Duration string: ${value}`);\n        }\n    };\n    const isNegative = !!match.groups?.negative;\n    const hasRequiredGroups = $58246871e4652552$var$requiredDurationGroups.some((group)=>match.groups?.[group]);\n    if (!hasRequiredGroups) throw new Error(`Invalid ISO 8601 Duration string: ${value}`);\n    const durationStringIncludesTime = match.groups?.time;\n    if (durationStringIncludesTime) {\n        const hasRequiredDurationTimeGroups = $58246871e4652552$var$requiredDurationTimeGroups.some((group)=>match.groups?.[group]);\n        if (!hasRequiredDurationTimeGroups) throw new Error(`Invalid ISO 8601 Duration string: ${value}`);\n    }\n    const duration = {\n        years: parseDurationGroup(match.groups?.years, isNegative),\n        months: parseDurationGroup(match.groups?.months, isNegative),\n        weeks: parseDurationGroup(match.groups?.weeks, isNegative),\n        days: parseDurationGroup(match.groups?.days, isNegative),\n        hours: parseDurationGroup(match.groups?.hours, isNegative),\n        minutes: parseDurationGroup(match.groups?.minutes, isNegative),\n        seconds: parseDurationGroup(match.groups?.seconds, isNegative)\n    };\n    if (duration.hours !== undefined && duration.hours % 1 !== 0 && (duration.minutes || duration.seconds)) throw new Error(`Invalid ISO 8601 Duration string: ${value} - only the smallest unit can be fractional`);\n    if (duration.minutes !== undefined && duration.minutes % 1 !== 0 && duration.seconds) throw new Error(`Invalid ISO 8601 Duration string: ${value} - only the smallest unit can be fractional`);\n    return duration;\n}\n\n\nexport {$58246871e4652552$export$c9698ec7f05a07e1 as parseTime, $58246871e4652552$export$6b862160d295c8e as parseDate, $58246871e4652552$export$588937bcd60ade55 as parseDateTime, $58246871e4652552$export$fd7893f06e92a6a4 as parseZonedDateTime, $58246871e4652552$export$4223de14708adc63 as dateTimeToString, $58246871e4652552$export$5adfdab05168c219 as parseAbsolute, $58246871e4652552$export$8e384432362ed0f0 as parseAbsoluteToLocal, $58246871e4652552$export$f59dee82248f5ad4 as timeToString, $58246871e4652552$export$60dfd74aa96791bd as dateToString, $58246871e4652552$export$bf79f1ebf4b18792 as zonedDateTimeToString, $58246871e4652552$export$ecae829bb3747ea6 as parseDuration};\n//# sourceMappingURL=string.mjs.map\n","import {add as $435a2ceaa8778ed8$export$e16d8520af44a096, addTime as $435a2ceaa8778ed8$export$7ed87b6bc2506470, addZoned as $435a2ceaa8778ed8$export$96b1d28349274637, constrain as $435a2ceaa8778ed8$export$c4e2ecac49351ef2, constrainTime as $435a2ceaa8778ed8$export$7555de1e070510cb, cycleDate as $435a2ceaa8778ed8$export$d52ced6badfb9a4c, cycleTime as $435a2ceaa8778ed8$export$dd02b3e0007dfe28, cycleZoned as $435a2ceaa8778ed8$export$9a297d111fc86b79, set as $435a2ceaa8778ed8$export$adaa4cf7ef1b65be, setTime as $435a2ceaa8778ed8$export$e5d5e1c1822b6e56, setZoned as $435a2ceaa8778ed8$export$31b5430eb18be4f8, subtract as $435a2ceaa8778ed8$export$4e2d2ead65e5f7e3, subtractTime as $435a2ceaa8778ed8$export$fe34d3a381cd7501, subtractZoned as $435a2ceaa8778ed8$export$6814caac34ca03c7} from \"./manipulation.mjs\";\nimport {compareDate as $ad063034c8620db8$export$68781ddf31c0090f, compareTime as $ad063034c8620db8$export$c19a80a9721b80f6} from \"./queries.mjs\";\nimport {dateTimeToString as $58246871e4652552$export$4223de14708adc63, dateToString as $58246871e4652552$export$60dfd74aa96791bd, timeToString as $58246871e4652552$export$f59dee82248f5ad4, zonedDateTimeToString as $58246871e4652552$export$bf79f1ebf4b18792} from \"./string.mjs\";\nimport {GregorianCalendar as $93635573935797de$export$80ee6245ec4f29ec} from \"./calendars/GregorianCalendar.mjs\";\nimport {toCalendarDateTime as $d07e34cce18680fd$export$b21e0b124e224484, toDate as $d07e34cce18680fd$export$e67a095c620b86fe, toZoned as $d07e34cce18680fd$export$84c95a83c799e074, zonedToDate as $d07e34cce18680fd$export$83aac07b4c37b25} from \"./conversion.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nfunction $2aaf608024c21ca1$var$shiftArgs(args) {\n    let calendar = typeof args[0] === 'object' ? args.shift() : new (0, $93635573935797de$export$80ee6245ec4f29ec)();\n    let era;\n    if (typeof args[0] === 'string') era = args.shift();\n    else {\n        let eras = calendar.getEras();\n        era = eras[eras.length - 1];\n    }\n    let year = args.shift();\n    let month = args.shift();\n    let day = args.shift();\n    return [\n        calendar,\n        era,\n        year,\n        month,\n        day\n    ];\n}\nclass $2aaf608024c21ca1$export$99faa760c7908e4f {\n    // This prevents TypeScript from allowing other types with the same fields to match.\n    // i.e. a ZonedDateTime should not be be passable to a parameter that expects CalendarDate.\n    // If that behavior is desired, use the AnyCalendarDate interface instead.\n    // @ts-ignore\n    #type;\n    constructor(...args){\n        let [calendar, era, year, month, day] = $2aaf608024c21ca1$var$shiftArgs(args);\n        this.calendar = calendar;\n        this.era = era;\n        this.year = year;\n        this.month = month;\n        this.day = day;\n        (0, $435a2ceaa8778ed8$export$c4e2ecac49351ef2)(this);\n    }\n    /** Returns a copy of this date. */ copy() {\n        if (this.era) return new $2aaf608024c21ca1$export$99faa760c7908e4f(this.calendar, this.era, this.year, this.month, this.day);\n        else return new $2aaf608024c21ca1$export$99faa760c7908e4f(this.calendar, this.year, this.month, this.day);\n    }\n    /** Returns a new `CalendarDate` with the given duration added to it. */ add(duration) {\n        return (0, $435a2ceaa8778ed8$export$e16d8520af44a096)(this, duration);\n    }\n    /** Returns a new `CalendarDate` with the given duration subtracted from it. */ subtract(duration) {\n        return (0, $435a2ceaa8778ed8$export$4e2d2ead65e5f7e3)(this, duration);\n    }\n    /**\n   * Returns a new `CalendarDate` with the given fields set to the provided values. Other fields\n   * will be constrained accordingly.\n   */ set(fields) {\n        return (0, $435a2ceaa8778ed8$export$adaa4cf7ef1b65be)(this, fields);\n    }\n    /**\n   * Returns a new `CalendarDate` with the given field adjusted by a specified amount.\n   * When the resulting value reaches the limits of the field, it wraps around.\n   */ cycle(field, amount, options) {\n        return (0, $435a2ceaa8778ed8$export$d52ced6badfb9a4c)(this, field, amount, options);\n    }\n    /**\n   * Converts the date to a native JavaScript Date object, with the time set to midnight in the\n   * given time zone.\n   */ toDate(timeZone) {\n        return (0, $d07e34cce18680fd$export$e67a095c620b86fe)(this, timeZone);\n    }\n    /** Converts the date to an ISO 8601 formatted string. */ toString() {\n        return (0, $58246871e4652552$export$60dfd74aa96791bd)(this);\n    }\n    /**\n   * Compares this date with another. A negative result indicates that this date is before the given\n   * one, and a positive date indicates that it is after.\n   */ compare(b) {\n        return (0, $ad063034c8620db8$export$68781ddf31c0090f)(this, b);\n    }\n}\nclass $2aaf608024c21ca1$export$680ea196effce5f {\n    // This prevents TypeScript from allowing other types with the same fields to match.\n    // @ts-ignore\n    #type;\n    constructor(hour = 0, minute = 0, second = 0, millisecond = 0){\n        this.hour = hour;\n        this.minute = minute;\n        this.second = second;\n        this.millisecond = millisecond;\n        (0, $435a2ceaa8778ed8$export$7555de1e070510cb)(this);\n    }\n    /** Returns a copy of this time. */ copy() {\n        return new $2aaf608024c21ca1$export$680ea196effce5f(this.hour, this.minute, this.second, this.millisecond);\n    }\n    /** Returns a new `Time` with the given duration added to it. */ add(duration) {\n        return (0, $435a2ceaa8778ed8$export$7ed87b6bc2506470)(this, duration);\n    }\n    /** Returns a new `Time` with the given duration subtracted from it. */ subtract(duration) {\n        return (0, $435a2ceaa8778ed8$export$fe34d3a381cd7501)(this, duration);\n    }\n    /**\n   * Returns a new `Time` with the given fields set to the provided values. Other fields will be\n   * constrained accordingly.\n   */ set(fields) {\n        return (0, $435a2ceaa8778ed8$export$e5d5e1c1822b6e56)(this, fields);\n    }\n    /**\n   * Returns a new `Time` with the given field adjusted by a specified amount.\n   * When the resulting value reaches the limits of the field, it wraps around.\n   */ cycle(field, amount, options) {\n        return (0, $435a2ceaa8778ed8$export$dd02b3e0007dfe28)(this, field, amount, options);\n    }\n    /** Converts the time to an ISO 8601 formatted string. */ toString() {\n        return (0, $58246871e4652552$export$f59dee82248f5ad4)(this);\n    }\n    /**\n   * Compares this time with another. A negative result indicates that this time is before the given\n   * one, and a positive time indicates that it is after.\n   */ compare(b) {\n        return (0, $ad063034c8620db8$export$c19a80a9721b80f6)(this, b);\n    }\n}\nclass $2aaf608024c21ca1$export$ca871e8dbb80966f {\n    // This prevents TypeScript from allowing other types with the same fields to match.\n    // @ts-ignore\n    #type;\n    constructor(...args){\n        let [calendar, era, year, month, day] = $2aaf608024c21ca1$var$shiftArgs(args);\n        this.calendar = calendar;\n        this.era = era;\n        this.year = year;\n        this.month = month;\n        this.day = day;\n        this.hour = args.shift() || 0;\n        this.minute = args.shift() || 0;\n        this.second = args.shift() || 0;\n        this.millisecond = args.shift() || 0;\n        (0, $435a2ceaa8778ed8$export$c4e2ecac49351ef2)(this);\n    }\n    /** Returns a copy of this date. */ copy() {\n        if (this.era) return new $2aaf608024c21ca1$export$ca871e8dbb80966f(this.calendar, this.era, this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n        else return new $2aaf608024c21ca1$export$ca871e8dbb80966f(this.calendar, this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n    }\n    /** Returns a new `CalendarDateTime` with the given duration added to it. */ add(duration) {\n        return (0, $435a2ceaa8778ed8$export$e16d8520af44a096)(this, duration);\n    }\n    /** Returns a new `CalendarDateTime` with the given duration subtracted from it. */ subtract(duration) {\n        return (0, $435a2ceaa8778ed8$export$4e2d2ead65e5f7e3)(this, duration);\n    }\n    /**\n   * Returns a new `CalendarDateTime` with the given fields set to the provided values. Other fields\n   * will be constrained accordingly.\n   */ set(fields) {\n        return (0, $435a2ceaa8778ed8$export$adaa4cf7ef1b65be)((0, $435a2ceaa8778ed8$export$e5d5e1c1822b6e56)(this, fields), fields);\n    }\n    /**\n   * Returns a new `CalendarDateTime` with the given field adjusted by a specified amount.\n   * When the resulting value reaches the limits of the field, it wraps around.\n   */ cycle(field, amount, options) {\n        switch(field){\n            case 'era':\n            case 'year':\n            case 'month':\n            case 'day':\n                return (0, $435a2ceaa8778ed8$export$d52ced6badfb9a4c)(this, field, amount, options);\n            default:\n                return (0, $435a2ceaa8778ed8$export$dd02b3e0007dfe28)(this, field, amount, options);\n        }\n    }\n    /** Converts the date to a native JavaScript Date object in the given time zone. */ toDate(timeZone, disambiguation) {\n        return (0, $d07e34cce18680fd$export$e67a095c620b86fe)(this, timeZone, disambiguation);\n    }\n    /** Converts the date to an ISO 8601 formatted string. */ toString() {\n        return (0, $58246871e4652552$export$4223de14708adc63)(this);\n    }\n    /**\n   * Compares this date with another. A negative result indicates that this date is before the given\n   * one, and a positive date indicates that it is after.\n   */ compare(b) {\n        let res = (0, $ad063034c8620db8$export$68781ddf31c0090f)(this, b);\n        if (res === 0) return (0, $ad063034c8620db8$export$c19a80a9721b80f6)(this, (0, $d07e34cce18680fd$export$b21e0b124e224484)(b));\n        return res;\n    }\n}\nclass $2aaf608024c21ca1$export$d3b7288e7994edea {\n    // This prevents TypeScript from allowing other types with the same fields to match.\n    // @ts-ignore\n    #type;\n    constructor(...args){\n        let [calendar, era, year, month, day] = $2aaf608024c21ca1$var$shiftArgs(args);\n        let timeZone = args.shift();\n        let offset = args.shift();\n        this.calendar = calendar;\n        this.era = era;\n        this.year = year;\n        this.month = month;\n        this.day = day;\n        this.timeZone = timeZone;\n        this.offset = offset;\n        this.hour = args.shift() || 0;\n        this.minute = args.shift() || 0;\n        this.second = args.shift() || 0;\n        this.millisecond = args.shift() || 0;\n        (0, $435a2ceaa8778ed8$export$c4e2ecac49351ef2)(this);\n    }\n    /** Returns a copy of this date. */ copy() {\n        if (this.era) return new $2aaf608024c21ca1$export$d3b7288e7994edea(this.calendar, this.era, this.year, this.month, this.day, this.timeZone, this.offset, this.hour, this.minute, this.second, this.millisecond);\n        else return new $2aaf608024c21ca1$export$d3b7288e7994edea(this.calendar, this.year, this.month, this.day, this.timeZone, this.offset, this.hour, this.minute, this.second, this.millisecond);\n    }\n    /** Returns a new `ZonedDateTime` with the given duration added to it. */ add(duration) {\n        return (0, $435a2ceaa8778ed8$export$96b1d28349274637)(this, duration);\n    }\n    /** Returns a new `ZonedDateTime` with the given duration subtracted from it. */ subtract(duration) {\n        return (0, $435a2ceaa8778ed8$export$6814caac34ca03c7)(this, duration);\n    }\n    /**\n   * Returns a new `ZonedDateTime` with the given fields set to the provided values. Other fields\n   * will be constrained accordingly.\n   */ set(fields, disambiguation) {\n        return (0, $435a2ceaa8778ed8$export$31b5430eb18be4f8)(this, fields, disambiguation);\n    }\n    /**\n   * Returns a new `ZonedDateTime` with the given field adjusted by a specified amount.\n   * When the resulting value reaches the limits of the field, it wraps around.\n   */ cycle(field, amount, options) {\n        return (0, $435a2ceaa8778ed8$export$9a297d111fc86b79)(this, field, amount, options);\n    }\n    /** Converts the date to a native JavaScript Date object. */ toDate() {\n        return (0, $d07e34cce18680fd$export$83aac07b4c37b25)(this);\n    }\n    /**\n   * Converts the date to an ISO 8601 formatted string, including the UTC offset and time zone\n   * identifier.\n   */ toString() {\n        return (0, $58246871e4652552$export$bf79f1ebf4b18792)(this);\n    }\n    /** Converts the date to an ISO 8601 formatted string in UTC. */ toAbsoluteString() {\n        return this.toDate().toISOString();\n    }\n    /**\n   * Compares this date with another. A negative result indicates that this date is before the given\n   * one, and a positive date indicates that it is after.\n   */ compare(b) {\n        // TODO: Is this a bad idea??\n        return this.toDate().getTime() - (0, $d07e34cce18680fd$export$84c95a83c799e074)(b, this.timeZone).toDate().getTime();\n    }\n}\n\n\nexport {$2aaf608024c21ca1$export$99faa760c7908e4f as CalendarDate, $2aaf608024c21ca1$export$680ea196effce5f as Time, $2aaf608024c21ca1$export$ca871e8dbb80966f as CalendarDateTime, $2aaf608024c21ca1$export$d3b7288e7994edea as ZonedDateTime};\n//# sourceMappingURL=CalendarDate.mjs.map\n","import {CalendarDate as $2aaf608024c21ca1$export$99faa760c7908e4f} from \"../CalendarDate.mjs\";\nimport {GregorianCalendar as $93635573935797de$export$80ee6245ec4f29ec} from \"./GregorianCalendar.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from the TC39 Temporal proposal.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\n\nconst $34b940b49ba042df$var$ERA_START_DATES = [\n    [\n        1868,\n        9,\n        8\n    ],\n    [\n        1912,\n        7,\n        30\n    ],\n    [\n        1926,\n        12,\n        25\n    ],\n    [\n        1989,\n        1,\n        8\n    ],\n    [\n        2019,\n        5,\n        1\n    ]\n];\nconst $34b940b49ba042df$var$ERA_END_DATES = [\n    [\n        1912,\n        7,\n        29\n    ],\n    [\n        1926,\n        12,\n        24\n    ],\n    [\n        1989,\n        1,\n        7\n    ],\n    [\n        2019,\n        4,\n        30\n    ]\n];\nconst $34b940b49ba042df$var$ERA_ADDENDS = [\n    1867,\n    1911,\n    1925,\n    1988,\n    2018\n];\nconst $34b940b49ba042df$var$ERA_NAMES = [\n    'meiji',\n    'taisho',\n    'showa',\n    'heisei',\n    'reiwa'\n];\nfunction $34b940b49ba042df$var$findEraFromGregorianDate(date) {\n    const idx = $34b940b49ba042df$var$ERA_START_DATES.findIndex(([year, month, day])=>{\n        if (date.year < year) return true;\n        if (date.year === year && date.month < month) return true;\n        if (date.year === year && date.month === month && date.day < day) return true;\n        return false;\n    });\n    if (idx === -1) return $34b940b49ba042df$var$ERA_START_DATES.length - 1;\n    if (idx === 0) return 0;\n    return idx - 1;\n}\nfunction $34b940b49ba042df$var$toGregorian(date) {\n    let eraAddend = $34b940b49ba042df$var$ERA_ADDENDS[$34b940b49ba042df$var$ERA_NAMES.indexOf(date.era)];\n    if (!eraAddend) throw new Error('Unknown era: ' + date.era);\n    return new (0, $2aaf608024c21ca1$export$99faa760c7908e4f)(date.year + eraAddend, date.month, date.day);\n}\nclass $34b940b49ba042df$export$b746ab2b60cdffbf extends (0, $93635573935797de$export$80ee6245ec4f29ec) {\n    fromJulianDay(jd) {\n        let date = super.fromJulianDay(jd);\n        let era = $34b940b49ba042df$var$findEraFromGregorianDate(date);\n        return new (0, $2aaf608024c21ca1$export$99faa760c7908e4f)(this, $34b940b49ba042df$var$ERA_NAMES[era], date.year - $34b940b49ba042df$var$ERA_ADDENDS[era], date.month, date.day);\n    }\n    toJulianDay(date) {\n        return super.toJulianDay($34b940b49ba042df$var$toGregorian(date));\n    }\n    balanceDate(date) {\n        let gregorianDate = $34b940b49ba042df$var$toGregorian(date);\n        let era = $34b940b49ba042df$var$findEraFromGregorianDate(gregorianDate);\n        if ($34b940b49ba042df$var$ERA_NAMES[era] !== date.era) {\n            date.era = $34b940b49ba042df$var$ERA_NAMES[era];\n            date.year = gregorianDate.year - $34b940b49ba042df$var$ERA_ADDENDS[era];\n        }\n        // Constrain in case we went before the first supported era.\n        this.constrainDate(date);\n    }\n    constrainDate(date) {\n        let idx = $34b940b49ba042df$var$ERA_NAMES.indexOf(date.era);\n        let end = $34b940b49ba042df$var$ERA_END_DATES[idx];\n        if (end != null) {\n            let [endYear, endMonth, endDay] = end;\n            // Constrain the year to the maximum possible value in the era.\n            // Then constrain the month and day fields within that.\n            let maxYear = endYear - $34b940b49ba042df$var$ERA_ADDENDS[idx];\n            date.year = Math.max(1, Math.min(maxYear, date.year));\n            if (date.year === maxYear) {\n                date.month = Math.min(endMonth, date.month);\n                if (date.month === endMonth) date.day = Math.min(endDay, date.day);\n            }\n        }\n        if (date.year === 1 && idx >= 0) {\n            let [, startMonth, startDay] = $34b940b49ba042df$var$ERA_START_DATES[idx];\n            date.month = Math.max(startMonth, date.month);\n            if (date.month === startMonth) date.day = Math.max(startDay, date.day);\n        }\n    }\n    getEras() {\n        return $34b940b49ba042df$var$ERA_NAMES;\n    }\n    getYearsInEra(date) {\n        // Get the number of years in the era, taking into account the date's month and day fields.\n        let era = $34b940b49ba042df$var$ERA_NAMES.indexOf(date.era);\n        let cur = $34b940b49ba042df$var$ERA_START_DATES[era];\n        let next = $34b940b49ba042df$var$ERA_START_DATES[era + 1];\n        if (next == null) // 9999 gregorian is the maximum year allowed.\n        return 9999 - cur[0] + 1;\n        let years = next[0] - cur[0];\n        if (date.month < next[1] || date.month === next[1] && date.day < next[2]) years++;\n        return years;\n    }\n    getDaysInMonth(date) {\n        return super.getDaysInMonth($34b940b49ba042df$var$toGregorian(date));\n    }\n    getMinimumMonthInYear(date) {\n        let start = $34b940b49ba042df$var$getMinimums(date);\n        return start ? start[1] : 1;\n    }\n    getMinimumDayInMonth(date) {\n        let start = $34b940b49ba042df$var$getMinimums(date);\n        return start && date.month === start[1] ? start[2] : 1;\n    }\n    constructor(...args){\n        super(...args), this.identifier = 'japanese';\n    }\n}\nfunction $34b940b49ba042df$var$getMinimums(date) {\n    if (date.year === 1) {\n        let idx = $34b940b49ba042df$var$ERA_NAMES.indexOf(date.era);\n        return $34b940b49ba042df$var$ERA_START_DATES[idx];\n    }\n}\n\n\nexport {$34b940b49ba042df$export$b746ab2b60cdffbf as JapaneseCalendar};\n//# sourceMappingURL=JapaneseCalendar.mjs.map\n","import {CalendarDate as $2aaf608024c21ca1$export$99faa760c7908e4f} from \"../CalendarDate.mjs\";\nimport {fromExtendedYear as $93635573935797de$export$4475b7e617eb123c, getExtendedYear as $93635573935797de$export$c36e0ecb2d4fa69d, GregorianCalendar as $93635573935797de$export$80ee6245ec4f29ec} from \"./GregorianCalendar.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\n\nconst $63d4eafd4d826996$var$BUDDHIST_ERA_START = -543;\nclass $63d4eafd4d826996$export$42d20a78301dee44 extends (0, $93635573935797de$export$80ee6245ec4f29ec) {\n    fromJulianDay(jd) {\n        let gregorianDate = super.fromJulianDay(jd);\n        let year = (0, $93635573935797de$export$c36e0ecb2d4fa69d)(gregorianDate.era, gregorianDate.year);\n        return new (0, $2aaf608024c21ca1$export$99faa760c7908e4f)(this, year - $63d4eafd4d826996$var$BUDDHIST_ERA_START, gregorianDate.month, gregorianDate.day);\n    }\n    toJulianDay(date) {\n        return super.toJulianDay($63d4eafd4d826996$var$toGregorian(date));\n    }\n    getEras() {\n        return [\n            'BE'\n        ];\n    }\n    getDaysInMonth(date) {\n        return super.getDaysInMonth($63d4eafd4d826996$var$toGregorian(date));\n    }\n    balanceDate() {}\n    constructor(...args){\n        super(...args), this.identifier = 'buddhist';\n    }\n}\nfunction $63d4eafd4d826996$var$toGregorian(date) {\n    let [era, year] = (0, $93635573935797de$export$4475b7e617eb123c)(date.year + $63d4eafd4d826996$var$BUDDHIST_ERA_START);\n    return new (0, $2aaf608024c21ca1$export$99faa760c7908e4f)(era, year, date.month, date.day);\n}\n\n\nexport {$63d4eafd4d826996$export$42d20a78301dee44 as BuddhistCalendar};\n//# sourceMappingURL=BuddhistCalendar.mjs.map\n","import {CalendarDate as $2aaf608024c21ca1$export$99faa760c7908e4f} from \"../CalendarDate.mjs\";\nimport {fromExtendedYear as $93635573935797de$export$4475b7e617eb123c, getExtendedYear as $93635573935797de$export$c36e0ecb2d4fa69d, GregorianCalendar as $93635573935797de$export$80ee6245ec4f29ec} from \"./GregorianCalendar.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\n\nconst $c009cc5f64923054$var$TAIWAN_ERA_START = 1911;\nfunction $c009cc5f64923054$var$gregorianYear(date) {\n    return date.era === 'minguo' ? date.year + $c009cc5f64923054$var$TAIWAN_ERA_START : 1 - date.year + $c009cc5f64923054$var$TAIWAN_ERA_START;\n}\nfunction $c009cc5f64923054$var$gregorianToTaiwan(year) {\n    let y = year - $c009cc5f64923054$var$TAIWAN_ERA_START;\n    if (y > 0) return [\n        'minguo',\n        y\n    ];\n    else return [\n        'before_minguo',\n        1 - y\n    ];\n}\nclass $c009cc5f64923054$export$65e01080afcb0799 extends (0, $93635573935797de$export$80ee6245ec4f29ec) {\n    fromJulianDay(jd) {\n        let date = super.fromJulianDay(jd);\n        let extendedYear = (0, $93635573935797de$export$c36e0ecb2d4fa69d)(date.era, date.year);\n        let [era, year] = $c009cc5f64923054$var$gregorianToTaiwan(extendedYear);\n        return new (0, $2aaf608024c21ca1$export$99faa760c7908e4f)(this, era, year, date.month, date.day);\n    }\n    toJulianDay(date) {\n        return super.toJulianDay($c009cc5f64923054$var$toGregorian(date));\n    }\n    getEras() {\n        return [\n            'before_minguo',\n            'minguo'\n        ];\n    }\n    balanceDate(date) {\n        let [era, year] = $c009cc5f64923054$var$gregorianToTaiwan($c009cc5f64923054$var$gregorianYear(date));\n        date.era = era;\n        date.year = year;\n    }\n    isInverseEra(date) {\n        return date.era === 'before_minguo';\n    }\n    getDaysInMonth(date) {\n        return super.getDaysInMonth($c009cc5f64923054$var$toGregorian(date));\n    }\n    getYearsInEra(date) {\n        return date.era === 'before_minguo' ? 9999 : 9999 - $c009cc5f64923054$var$TAIWAN_ERA_START;\n    }\n    constructor(...args){\n        super(...args), this.identifier = 'roc' // Republic of China\n        ;\n    }\n}\nfunction $c009cc5f64923054$var$toGregorian(date) {\n    let [era, year] = (0, $93635573935797de$export$4475b7e617eb123c)($c009cc5f64923054$var$gregorianYear(date));\n    return new (0, $2aaf608024c21ca1$export$99faa760c7908e4f)(era, year, date.month, date.day);\n}\n\n\nexport {$c009cc5f64923054$export$65e01080afcb0799 as TaiwanCalendar};\n//# sourceMappingURL=TaiwanCalendar.mjs.map\n","import {CalendarDate as $2aaf608024c21ca1$export$99faa760c7908e4f} from \"../CalendarDate.mjs\";\nimport {mod as $09ec6a572d60460f$export$842a2cf37af977e1} from \"../utils.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\n\nconst $a0cc0739a536c3b1$var$PERSIAN_EPOCH = 1948320;\n// Number of days from the start of the year to the start of each month.\nconst $a0cc0739a536c3b1$var$MONTH_START = [\n    0,\n    31,\n    62,\n    93,\n    124,\n    155,\n    186,\n    216,\n    246,\n    276,\n    306,\n    336 // Esfand\n];\nclass $a0cc0739a536c3b1$export$37fccdbfd14c5939 {\n    fromJulianDay(jd) {\n        let daysSinceEpoch = jd - $a0cc0739a536c3b1$var$PERSIAN_EPOCH;\n        let year = 1 + Math.floor((33 * daysSinceEpoch + 3) / 12053);\n        let farvardin1 = 365 * (year - 1) + Math.floor((8 * year + 21) / 33);\n        let dayOfYear = daysSinceEpoch - farvardin1;\n        let month = dayOfYear < 216 ? Math.floor(dayOfYear / 31) : Math.floor((dayOfYear - 6) / 30);\n        let day = dayOfYear - $a0cc0739a536c3b1$var$MONTH_START[month] + 1;\n        return new (0, $2aaf608024c21ca1$export$99faa760c7908e4f)(this, year, month + 1, day);\n    }\n    toJulianDay(date) {\n        let jd = $a0cc0739a536c3b1$var$PERSIAN_EPOCH - 1 + 365 * (date.year - 1) + Math.floor((8 * date.year + 21) / 33);\n        jd += $a0cc0739a536c3b1$var$MONTH_START[date.month - 1];\n        jd += date.day;\n        return jd;\n    }\n    getMonthsInYear() {\n        return 12;\n    }\n    getDaysInMonth(date) {\n        if (date.month <= 6) return 31;\n        if (date.month <= 11) return 30;\n        let isLeapYear = (0, $09ec6a572d60460f$export$842a2cf37af977e1)(25 * date.year + 11, 33) < 8;\n        return isLeapYear ? 30 : 29;\n    }\n    getMaximumMonthsInYear() {\n        return 12;\n    }\n    getMaximumDaysInMonth() {\n        return 31;\n    }\n    getEras() {\n        return [\n            'AP'\n        ];\n    }\n    getYearsInEra() {\n        // 9378-10-10 persian is 9999-12-31 gregorian.\n        // Round down to 9377 to set the maximum full year.\n        return 9377;\n    }\n    constructor(){\n        this.identifier = 'persian';\n    }\n}\n\n\nexport {$a0cc0739a536c3b1$export$37fccdbfd14c5939 as PersianCalendar};\n//# sourceMappingURL=PersianCalendar.mjs.map\n","import {CalendarDate as $2aaf608024c21ca1$export$99faa760c7908e4f} from \"../CalendarDate.mjs\";\nimport {fromExtendedYear as $93635573935797de$export$4475b7e617eb123c, GregorianCalendar as $93635573935797de$export$80ee6245ec4f29ec, gregorianToJulianDay as $93635573935797de$export$f297eb839006d339, isLeapYear as $93635573935797de$export$553d7fa8e3805fc0} from \"./GregorianCalendar.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\n\n// Starts in 78 AD,\nconst $11fa67a177e45470$var$INDIAN_ERA_START = 78;\n// The Indian year starts 80 days later than the Gregorian year.\nconst $11fa67a177e45470$var$INDIAN_YEAR_START = 80;\nclass $11fa67a177e45470$export$39f31c639fa15726 extends (0, $93635573935797de$export$80ee6245ec4f29ec) {\n    fromJulianDay(jd) {\n        // Gregorian date for Julian day\n        let date = super.fromJulianDay(jd);\n        // Year in Saka era\n        let indianYear = date.year - $11fa67a177e45470$var$INDIAN_ERA_START;\n        // Day number in Gregorian year (starting from 0)\n        let yDay = jd - (0, $93635573935797de$export$f297eb839006d339)(date.era, date.year, 1, 1);\n        let leapMonth;\n        if (yDay < $11fa67a177e45470$var$INDIAN_YEAR_START) {\n            //  Day is at the end of the preceding Saka year\n            indianYear--;\n            // Days in leapMonth this year, previous Gregorian year\n            leapMonth = (0, $93635573935797de$export$553d7fa8e3805fc0)(date.year - 1) ? 31 : 30;\n            yDay += leapMonth + 155 + 90 + 10;\n        } else {\n            // Days in leapMonth this year\n            leapMonth = (0, $93635573935797de$export$553d7fa8e3805fc0)(date.year) ? 31 : 30;\n            yDay -= $11fa67a177e45470$var$INDIAN_YEAR_START;\n        }\n        let indianMonth;\n        let indianDay;\n        if (yDay < leapMonth) {\n            indianMonth = 1;\n            indianDay = yDay + 1;\n        } else {\n            let mDay = yDay - leapMonth;\n            if (mDay < 155) {\n                indianMonth = Math.floor(mDay / 31) + 2;\n                indianDay = mDay % 31 + 1;\n            } else {\n                mDay -= 155;\n                indianMonth = Math.floor(mDay / 30) + 7;\n                indianDay = mDay % 30 + 1;\n            }\n        }\n        return new (0, $2aaf608024c21ca1$export$99faa760c7908e4f)(this, indianYear, indianMonth, indianDay);\n    }\n    toJulianDay(date) {\n        let extendedYear = date.year + $11fa67a177e45470$var$INDIAN_ERA_START;\n        let [era, year] = (0, $93635573935797de$export$4475b7e617eb123c)(extendedYear);\n        let leapMonth;\n        let jd;\n        if ((0, $93635573935797de$export$553d7fa8e3805fc0)(year)) {\n            leapMonth = 31;\n            jd = (0, $93635573935797de$export$f297eb839006d339)(era, year, 3, 21);\n        } else {\n            leapMonth = 30;\n            jd = (0, $93635573935797de$export$f297eb839006d339)(era, year, 3, 22);\n        }\n        if (date.month === 1) return jd + date.day - 1;\n        jd += leapMonth + Math.min(date.month - 2, 5) * 31;\n        if (date.month >= 8) jd += (date.month - 7) * 30;\n        jd += date.day - 1;\n        return jd;\n    }\n    getDaysInMonth(date) {\n        if (date.month === 1 && (0, $93635573935797de$export$553d7fa8e3805fc0)(date.year + $11fa67a177e45470$var$INDIAN_ERA_START)) return 31;\n        if (date.month >= 2 && date.month <= 6) return 31;\n        return 30;\n    }\n    getYearsInEra() {\n        // 9999-12-31 gregorian is 9920-10-10 indian.\n        // Round down to 9919 for the last full year.\n        return 9919;\n    }\n    getEras() {\n        return [\n            'saka'\n        ];\n    }\n    balanceDate() {}\n    constructor(...args){\n        super(...args), this.identifier = 'indian';\n    }\n}\n\n\nexport {$11fa67a177e45470$export$39f31c639fa15726 as IndianCalendar};\n//# sourceMappingURL=IndianCalendar.mjs.map\n","import {CalendarDate as $2aaf608024c21ca1$export$99faa760c7908e4f} from \"../CalendarDate.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\nconst $fd4f9bc1ba0e49a8$var$CIVIL_EPOC = 1948440; // CE 622 July 16 Friday (Julian calendar) / CE 622 July 19 (Gregorian calendar)\nconst $fd4f9bc1ba0e49a8$var$ASTRONOMICAL_EPOC = 1948439; // CE 622 July 15 Thursday (Julian calendar)\nconst $fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_START = 1300;\nconst $fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_END = 1600;\nconst $fd4f9bc1ba0e49a8$var$UMALQURA_START_DAYS = 460322;\nfunction $fd4f9bc1ba0e49a8$var$islamicToJulianDay(epoch, year, month, day) {\n    return day + Math.ceil(29.5 * (month - 1)) + (year - 1) * 354 + Math.floor((3 + 11 * year) / 30) + epoch - 1;\n}\nfunction $fd4f9bc1ba0e49a8$var$julianDayToIslamic(calendar, epoch, jd) {\n    let year = Math.floor((30 * (jd - epoch) + 10646) / 10631);\n    let month = Math.min(12, Math.ceil((jd - (29 + $fd4f9bc1ba0e49a8$var$islamicToJulianDay(epoch, year, 1, 1))) / 29.5) + 1);\n    let day = jd - $fd4f9bc1ba0e49a8$var$islamicToJulianDay(epoch, year, month, 1) + 1;\n    return new (0, $2aaf608024c21ca1$export$99faa760c7908e4f)(calendar, year, month, day);\n}\nfunction $fd4f9bc1ba0e49a8$var$isLeapYear(year) {\n    return (14 + 11 * year) % 30 < 11;\n}\nclass $fd4f9bc1ba0e49a8$export$2066795aadd37bfc {\n    fromJulianDay(jd) {\n        return $fd4f9bc1ba0e49a8$var$julianDayToIslamic(this, $fd4f9bc1ba0e49a8$var$CIVIL_EPOC, jd);\n    }\n    toJulianDay(date) {\n        return $fd4f9bc1ba0e49a8$var$islamicToJulianDay($fd4f9bc1ba0e49a8$var$CIVIL_EPOC, date.year, date.month, date.day);\n    }\n    getDaysInMonth(date) {\n        let length = 29 + date.month % 2;\n        if (date.month === 12 && $fd4f9bc1ba0e49a8$var$isLeapYear(date.year)) length++;\n        return length;\n    }\n    getMonthsInYear() {\n        return 12;\n    }\n    getDaysInYear(date) {\n        return $fd4f9bc1ba0e49a8$var$isLeapYear(date.year) ? 355 : 354;\n    }\n    getMaximumMonthsInYear() {\n        return 12;\n    }\n    getMaximumDaysInMonth() {\n        return 30;\n    }\n    getYearsInEra() {\n        // 9999 gregorian\n        return 9665;\n    }\n    getEras() {\n        return [\n            'AH'\n        ];\n    }\n    constructor(){\n        this.identifier = 'islamic-civil';\n    }\n}\nclass $fd4f9bc1ba0e49a8$export$37f0887f2f9d22f7 extends $fd4f9bc1ba0e49a8$export$2066795aadd37bfc {\n    fromJulianDay(jd) {\n        return $fd4f9bc1ba0e49a8$var$julianDayToIslamic(this, $fd4f9bc1ba0e49a8$var$ASTRONOMICAL_EPOC, jd);\n    }\n    toJulianDay(date) {\n        return $fd4f9bc1ba0e49a8$var$islamicToJulianDay($fd4f9bc1ba0e49a8$var$ASTRONOMICAL_EPOC, date.year, date.month, date.day);\n    }\n    constructor(...args){\n        super(...args), this.identifier = 'islamic-tbla';\n    }\n}\n// Generated by scripts/generate-umalqura.js\nconst $fd4f9bc1ba0e49a8$var$UMALQURA_DATA = 'qgpUDckO1AbqBmwDrQpVBakGkgepC9QF2gpcBS0NlQZKB1QLagutBa4ETwoXBYsGpQbVCtYCWwmdBE0KJg2VDawFtgm6AlsKKwWVCsoG6Qr0AnYJtgJWCcoKpAvSC9kF3AJtCU0FpQpSC6ULtAW2CVcFlwJLBaMGUgdlC2oFqworBZUMSg2lDcoF1gpXCasESwmlClILagt1BXYCtwhbBFUFqQW0BdoJ3QRuAjYJqgpUDbIN1QXaAlsJqwRVCkkLZAtxC7QFtQpVCiUNkg7JDtQG6QprCasEkwpJDaQNsg25CroEWworBZUKKgtVC1wFvQQ9Ah0JlQpKC1oLbQW2AjsJmwRVBqkGVAdqC2wFrQpVBSkLkgupC9QF2gpaBasKlQVJB2QHqgu1BbYCVgpNDiULUgtqC60FrgIvCZcESwalBqwG1gpdBZ0ETQoWDZUNqgW1BdoCWwmtBJUFygbkBuoK9QS2AlYJqgpUC9IL2QXqAm0JrQSVCkoLpQuyBbUJ1gSXCkcFkwZJB1ULagVrCisFiwpGDaMNygXWCtsEawJLCaUKUgtpC3UFdgG3CFsCKwVlBbQF2gntBG0BtgimClINqQ3UBdoKWwmrBFMGKQdiB6kLsgW1ClUFJQuSDckO0gbpCmsFqwRVCikNVA2qDbUJugQ7CpsETQqqCtUK2gJdCV4ELgqaDFUNsga5BroEXQotBZUKUguoC7QLuQXaAloJSgukDdEO6AZqC20FNQWVBkoNqA3UDdoGWwWdAisGFQtKC5ULqgWuCi4JjwwnBZUGqgbWCl0FnQI=';\nlet $fd4f9bc1ba0e49a8$var$UMALQURA_MONTHLENGTH;\nlet $fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_START_TABLE;\nfunction $fd4f9bc1ba0e49a8$var$umalquraYearStart(year) {\n    return $fd4f9bc1ba0e49a8$var$UMALQURA_START_DAYS + $fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_START_TABLE[year - $fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_START];\n}\nfunction $fd4f9bc1ba0e49a8$var$umalquraMonthLength(year, month) {\n    let idx = year - $fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_START;\n    let mask = 0x01 << 11 - (month - 1);\n    if (($fd4f9bc1ba0e49a8$var$UMALQURA_MONTHLENGTH[idx] & mask) === 0) return 29;\n    else return 30;\n}\nfunction $fd4f9bc1ba0e49a8$var$umalquraMonthStart(year, month) {\n    let day = $fd4f9bc1ba0e49a8$var$umalquraYearStart(year);\n    for(let i = 1; i < month; i++)day += $fd4f9bc1ba0e49a8$var$umalquraMonthLength(year, i);\n    return day;\n}\nfunction $fd4f9bc1ba0e49a8$var$umalquraYearLength(year) {\n    return $fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_START_TABLE[year + 1 - $fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_START] - $fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_START_TABLE[year - $fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_START];\n}\nclass $fd4f9bc1ba0e49a8$export$5baab4758c231076 extends $fd4f9bc1ba0e49a8$export$2066795aadd37bfc {\n    constructor(){\n        super(), this.identifier = 'islamic-umalqura';\n        if (!$fd4f9bc1ba0e49a8$var$UMALQURA_MONTHLENGTH) $fd4f9bc1ba0e49a8$var$UMALQURA_MONTHLENGTH = new Uint16Array(Uint8Array.from(atob($fd4f9bc1ba0e49a8$var$UMALQURA_DATA), (c)=>c.charCodeAt(0)).buffer);\n        if (!$fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_START_TABLE) {\n            $fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_START_TABLE = new Uint32Array($fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_END - $fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_START + 1);\n            let yearStart = 0;\n            for(let year = $fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_START; year <= $fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_END; year++){\n                $fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_START_TABLE[year - $fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_START] = yearStart;\n                for(let i = 1; i <= 12; i++)yearStart += $fd4f9bc1ba0e49a8$var$umalquraMonthLength(year, i);\n            }\n        }\n    }\n    fromJulianDay(jd) {\n        let days = jd - $fd4f9bc1ba0e49a8$var$CIVIL_EPOC;\n        let startDays = $fd4f9bc1ba0e49a8$var$umalquraYearStart($fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_START);\n        let endDays = $fd4f9bc1ba0e49a8$var$umalquraYearStart($fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_END);\n        if (days < startDays || days > endDays) return super.fromJulianDay(jd);\n        else {\n            let y = $fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_START - 1;\n            let m = 1;\n            let d = 1;\n            while(d > 0){\n                y++;\n                d = days - $fd4f9bc1ba0e49a8$var$umalquraYearStart(y) + 1;\n                let yearLength = $fd4f9bc1ba0e49a8$var$umalquraYearLength(y);\n                if (d === yearLength) {\n                    m = 12;\n                    break;\n                } else if (d < yearLength) {\n                    let monthLength = $fd4f9bc1ba0e49a8$var$umalquraMonthLength(y, m);\n                    m = 1;\n                    while(d > monthLength){\n                        d -= monthLength;\n                        m++;\n                        monthLength = $fd4f9bc1ba0e49a8$var$umalquraMonthLength(y, m);\n                    }\n                    break;\n                }\n            }\n            return new (0, $2aaf608024c21ca1$export$99faa760c7908e4f)(this, y, m, days - $fd4f9bc1ba0e49a8$var$umalquraMonthStart(y, m) + 1);\n        }\n    }\n    toJulianDay(date) {\n        if (date.year < $fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_START || date.year > $fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_END) return super.toJulianDay(date);\n        return $fd4f9bc1ba0e49a8$var$CIVIL_EPOC + $fd4f9bc1ba0e49a8$var$umalquraMonthStart(date.year, date.month) + (date.day - 1);\n    }\n    getDaysInMonth(date) {\n        if (date.year < $fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_START || date.year > $fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_END) return super.getDaysInMonth(date);\n        return $fd4f9bc1ba0e49a8$var$umalquraMonthLength(date.year, date.month);\n    }\n    getDaysInYear(date) {\n        if (date.year < $fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_START || date.year > $fd4f9bc1ba0e49a8$var$UMALQURA_YEAR_END) return super.getDaysInYear(date);\n        return $fd4f9bc1ba0e49a8$var$umalquraYearLength(date.year);\n    }\n}\n\n\nexport {$fd4f9bc1ba0e49a8$export$2066795aadd37bfc as IslamicCivilCalendar, $fd4f9bc1ba0e49a8$export$37f0887f2f9d22f7 as IslamicTabularCalendar, $fd4f9bc1ba0e49a8$export$5baab4758c231076 as IslamicUmalquraCalendar};\n//# sourceMappingURL=IslamicCalendar.mjs.map\n","import {CalendarDate as $2aaf608024c21ca1$export$99faa760c7908e4f} from \"../CalendarDate.mjs\";\nimport {mod as $09ec6a572d60460f$export$842a2cf37af977e1} from \"../utils.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\n\nconst $f39495b96f9dbac6$var$HEBREW_EPOCH = 347997;\n// Hebrew date calculations are performed in terms of days, hours, and\n// \"parts\" (or halakim), which are 1/1080 of an hour, or 3 1/3 seconds.\nconst $f39495b96f9dbac6$var$HOUR_PARTS = 1080;\nconst $f39495b96f9dbac6$var$DAY_PARTS = 24 * $f39495b96f9dbac6$var$HOUR_PARTS;\n// An approximate value for the length of a lunar month.\n// It is used to calculate the approximate year and month of a given\n// absolute date.\nconst $f39495b96f9dbac6$var$MONTH_DAYS = 29;\nconst $f39495b96f9dbac6$var$MONTH_FRACT = 12 * $f39495b96f9dbac6$var$HOUR_PARTS + 793;\nconst $f39495b96f9dbac6$var$MONTH_PARTS = $f39495b96f9dbac6$var$MONTH_DAYS * $f39495b96f9dbac6$var$DAY_PARTS + $f39495b96f9dbac6$var$MONTH_FRACT;\nfunction $f39495b96f9dbac6$var$isLeapYear(year) {\n    return (0, $09ec6a572d60460f$export$842a2cf37af977e1)(year * 7 + 1, 19) < 7;\n}\n// Test for delay of start of new year and to avoid\n// Sunday, Wednesday, and Friday as start of the new year.\nfunction $f39495b96f9dbac6$var$hebrewDelay1(year) {\n    let months = Math.floor((235 * year - 234) / 19);\n    let parts = 12084 + 13753 * months;\n    let day = months * 29 + Math.floor(parts / 25920);\n    if ((0, $09ec6a572d60460f$export$842a2cf37af977e1)(3 * (day + 1), 7) < 3) day += 1;\n    return day;\n}\n// Check for delay in start of new year due to length of adjacent years\nfunction $f39495b96f9dbac6$var$hebrewDelay2(year) {\n    let last = $f39495b96f9dbac6$var$hebrewDelay1(year - 1);\n    let present = $f39495b96f9dbac6$var$hebrewDelay1(year);\n    let next = $f39495b96f9dbac6$var$hebrewDelay1(year + 1);\n    if (next - present === 356) return 2;\n    if (present - last === 382) return 1;\n    return 0;\n}\nfunction $f39495b96f9dbac6$var$startOfYear(year) {\n    return $f39495b96f9dbac6$var$hebrewDelay1(year) + $f39495b96f9dbac6$var$hebrewDelay2(year);\n}\nfunction $f39495b96f9dbac6$var$getDaysInYear(year) {\n    return $f39495b96f9dbac6$var$startOfYear(year + 1) - $f39495b96f9dbac6$var$startOfYear(year);\n}\nfunction $f39495b96f9dbac6$var$getYearType(year) {\n    let yearLength = $f39495b96f9dbac6$var$getDaysInYear(year);\n    if (yearLength > 380) yearLength -= 30; // Subtract length of leap month.\n    switch(yearLength){\n        case 353:\n            return 0; // deficient\n        case 354:\n            return 1; // normal\n        case 355:\n            return 2; // complete\n    }\n}\nfunction $f39495b96f9dbac6$var$getDaysInMonth(year, month) {\n    // Normalize month numbers from 1 - 13, even on non-leap years\n    if (month >= 6 && !$f39495b96f9dbac6$var$isLeapYear(year)) month++;\n    // First of all, dispose of fixed-length 29 day months\n    if (month === 4 || month === 7 || month === 9 || month === 11 || month === 13) return 29;\n    let yearType = $f39495b96f9dbac6$var$getYearType(year);\n    // If it's Heshvan, days depend on length of year\n    if (month === 2) return yearType === 2 ? 30 : 29;\n    // Similarly, Kislev varies with the length of year\n    if (month === 3) return yearType === 0 ? 29 : 30;\n    // Adar I only exists in leap years\n    if (month === 6) return $f39495b96f9dbac6$var$isLeapYear(year) ? 30 : 0;\n    return 30;\n}\nclass $f39495b96f9dbac6$export$ca405048b8fb5af {\n    fromJulianDay(jd) {\n        let d = jd - $f39495b96f9dbac6$var$HEBREW_EPOCH;\n        let m = d * $f39495b96f9dbac6$var$DAY_PARTS / $f39495b96f9dbac6$var$MONTH_PARTS; // Months (approx)\n        let year = Math.floor((19 * m + 234) / 235) + 1; // Years (approx)\n        let ys = $f39495b96f9dbac6$var$startOfYear(year); // 1st day of year\n        let dayOfYear = Math.floor(d - ys);\n        // Because of the postponement rules, it's possible to guess wrong.  Fix it.\n        while(dayOfYear < 1){\n            year--;\n            ys = $f39495b96f9dbac6$var$startOfYear(year);\n            dayOfYear = Math.floor(d - ys);\n        }\n        // Now figure out which month we're in, and the date within that month\n        let month = 1;\n        let monthStart = 0;\n        while(monthStart < dayOfYear){\n            monthStart += $f39495b96f9dbac6$var$getDaysInMonth(year, month);\n            month++;\n        }\n        month--;\n        monthStart -= $f39495b96f9dbac6$var$getDaysInMonth(year, month);\n        let day = dayOfYear - monthStart;\n        return new (0, $2aaf608024c21ca1$export$99faa760c7908e4f)(this, year, month, day);\n    }\n    toJulianDay(date) {\n        let jd = $f39495b96f9dbac6$var$startOfYear(date.year);\n        for(let month = 1; month < date.month; month++)jd += $f39495b96f9dbac6$var$getDaysInMonth(date.year, month);\n        return jd + date.day + $f39495b96f9dbac6$var$HEBREW_EPOCH;\n    }\n    getDaysInMonth(date) {\n        return $f39495b96f9dbac6$var$getDaysInMonth(date.year, date.month);\n    }\n    getMonthsInYear(date) {\n        return $f39495b96f9dbac6$var$isLeapYear(date.year) ? 13 : 12;\n    }\n    getDaysInYear(date) {\n        return $f39495b96f9dbac6$var$getDaysInYear(date.year);\n    }\n    getMaximumMonthsInYear() {\n        return 13;\n    }\n    getMaximumDaysInMonth() {\n        return 30;\n    }\n    getYearsInEra() {\n        // 6239 gregorian\n        return 9999;\n    }\n    getEras() {\n        return [\n            'AM'\n        ];\n    }\n    balanceYearMonth(date, previousDate) {\n        // Keep date in the same month when switching between leap years and non leap years\n        if (previousDate.year !== date.year) {\n            if ($f39495b96f9dbac6$var$isLeapYear(previousDate.year) && !$f39495b96f9dbac6$var$isLeapYear(date.year) && previousDate.month > 6) date.month--;\n            else if (!$f39495b96f9dbac6$var$isLeapYear(previousDate.year) && $f39495b96f9dbac6$var$isLeapYear(date.year) && previousDate.month > 6) date.month++;\n        }\n    }\n    constructor(){\n        this.identifier = 'hebrew';\n    }\n}\n\n\nexport {$f39495b96f9dbac6$export$ca405048b8fb5af as HebrewCalendar};\n//# sourceMappingURL=HebrewCalendar.mjs.map\n","import {CalendarDate as $2aaf608024c21ca1$export$99faa760c7908e4f} from \"../CalendarDate.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\nconst $97cfca9efd59523d$var$ETHIOPIC_EPOCH = 1723856;\nconst $97cfca9efd59523d$var$COPTIC_EPOCH = 1824665;\n// The delta between Amete Alem 1 and Amete Mihret 1\n// AA 5501 = AM 1\nconst $97cfca9efd59523d$var$AMETE_MIHRET_DELTA = 5500;\nfunction $97cfca9efd59523d$var$ceToJulianDay(epoch, year, month, day) {\n    return epoch + // difference from Julian epoch to 1,1,1\n    365 * year + // number of days from years\n    Math.floor(year / 4) + // extra day of leap year\n    30 * (month - 1) + // number of days from months (1 based)\n    day - 1 // number of days for present month (1 based)\n    ;\n}\nfunction $97cfca9efd59523d$var$julianDayToCE(epoch, jd) {\n    let year = Math.floor(4 * (jd - epoch) / 1461);\n    // Years are 365 * year + floor(year / 4) days long, slightly less than the\n    // 365.25 day average assumed by the estimate above. As a result, the estimate\n    // can be one year too low on the first day of a year (3 of every 4 years).\n    if (jd >= $97cfca9efd59523d$var$ceToJulianDay(epoch, year + 1, 1, 1)) year++;\n    let month = 1 + Math.floor((jd - $97cfca9efd59523d$var$ceToJulianDay(epoch, year, 1, 1)) / 30);\n    let day = jd + 1 - $97cfca9efd59523d$var$ceToJulianDay(epoch, year, month, 1);\n    return [\n        year,\n        month,\n        day\n    ];\n}\nfunction $97cfca9efd59523d$var$getLeapDay(year) {\n    return Math.floor(year % 4 / 3);\n}\nfunction $97cfca9efd59523d$var$getDaysInMonth(year, month) {\n    // The Ethiopian and Coptic calendars have 13 months, 12 of 30 days each and\n    // an intercalary month at the end of the year of 5 or 6 days, depending whether\n    // the year is a leap year or not. The Leap Year follows the same rules as the\n    // Julian Calendar so that the extra month always has six days in the year before\n    // a Julian Leap Year.\n    if (month % 13 !== 0) // not intercalary month\n    return 30;\n    else // intercalary month 5 days + possible leap day\n    return $97cfca9efd59523d$var$getLeapDay(year) + 5;\n}\nclass $97cfca9efd59523d$export$26ba6eab5e20cd7d {\n    fromJulianDay(jd) {\n        let [year, month, day] = $97cfca9efd59523d$var$julianDayToCE($97cfca9efd59523d$var$ETHIOPIC_EPOCH, jd);\n        let era = 'AM';\n        if (year <= 0) {\n            era = 'AA';\n            year += $97cfca9efd59523d$var$AMETE_MIHRET_DELTA;\n        }\n        return new (0, $2aaf608024c21ca1$export$99faa760c7908e4f)(this, era, year, month, day);\n    }\n    toJulianDay(date) {\n        let year = date.year;\n        if (date.era === 'AA') year -= $97cfca9efd59523d$var$AMETE_MIHRET_DELTA;\n        return $97cfca9efd59523d$var$ceToJulianDay($97cfca9efd59523d$var$ETHIOPIC_EPOCH, year, date.month, date.day);\n    }\n    getDaysInMonth(date) {\n        return $97cfca9efd59523d$var$getDaysInMonth(date.year, date.month);\n    }\n    getMonthsInYear() {\n        return 13;\n    }\n    getDaysInYear(date) {\n        return 365 + $97cfca9efd59523d$var$getLeapDay(date.year);\n    }\n    getMaximumMonthsInYear() {\n        return 13;\n    }\n    getMaximumDaysInMonth() {\n        return 30;\n    }\n    getYearsInEra(date) {\n        // 9999-12-31 gregorian is 9992-20-02 ethiopic.\n        // Round down to 9991 for the last full year.\n        // AA 9999-01-01 ethiopic is 4506-09-30 gregorian.\n        return date.era === 'AA' ? 9999 : 9991;\n    }\n    getEras() {\n        return [\n            'AA',\n            'AM'\n        ];\n    }\n    constructor(){\n        this.identifier = 'ethiopic';\n    }\n}\nclass $97cfca9efd59523d$export$d72e0c37005a4914 extends $97cfca9efd59523d$export$26ba6eab5e20cd7d {\n    fromJulianDay(jd) {\n        let [year, month, day] = $97cfca9efd59523d$var$julianDayToCE($97cfca9efd59523d$var$ETHIOPIC_EPOCH, jd);\n        year += $97cfca9efd59523d$var$AMETE_MIHRET_DELTA;\n        return new (0, $2aaf608024c21ca1$export$99faa760c7908e4f)(this, 'AA', year, month, day);\n    }\n    getEras() {\n        return [\n            'AA'\n        ];\n    }\n    getYearsInEra() {\n        // 9999-13-04 ethioaa is the maximum date, which is equivalent to 4506-09-29 gregorian.\n        return 9999;\n    }\n    constructor(...args){\n        super(...args), this.identifier = 'ethioaa' // also known as 'ethiopic-amete-alem' in ICU\n        ;\n    }\n}\nclass $97cfca9efd59523d$export$fe6243cbe1a4b7c1 extends $97cfca9efd59523d$export$26ba6eab5e20cd7d {\n    fromJulianDay(jd) {\n        let [year, month, day] = $97cfca9efd59523d$var$julianDayToCE($97cfca9efd59523d$var$COPTIC_EPOCH, jd);\n        let era = 'CE';\n        if (year <= 0) {\n            era = 'BCE';\n            year = 1 - year;\n        }\n        return new (0, $2aaf608024c21ca1$export$99faa760c7908e4f)(this, era, year, month, day);\n    }\n    toJulianDay(date) {\n        let year = date.year;\n        if (date.era === 'BCE') year = 1 - year;\n        return $97cfca9efd59523d$var$ceToJulianDay($97cfca9efd59523d$var$COPTIC_EPOCH, year, date.month, date.day);\n    }\n    getDaysInMonth(date) {\n        let year = date.year;\n        if (date.era === 'BCE') year = 1 - year;\n        return $97cfca9efd59523d$var$getDaysInMonth(year, date.month);\n    }\n    isInverseEra(date) {\n        return date.era === 'BCE';\n    }\n    balanceDate(date) {\n        if (date.year <= 0) {\n            date.era = date.era === 'BCE' ? 'CE' : 'BCE';\n            date.year = 1 - date.year;\n        }\n    }\n    getEras() {\n        return [\n            'BCE',\n            'CE'\n        ];\n    }\n    getYearsInEra(date) {\n        // 9999-12-30 gregorian is 9716-02-20 coptic.\n        // Round down to 9715 for the last full year.\n        // BCE 9999-01-01 coptic is BC 9716-06-15 gregorian.\n        return date.era === 'BCE' ? 9999 : 9715;\n    }\n    constructor(...args){\n        super(...args), this.identifier = 'coptic';\n    }\n}\n\n\nexport {$97cfca9efd59523d$export$26ba6eab5e20cd7d as EthiopicCalendar, $97cfca9efd59523d$export$d72e0c37005a4914 as EthiopicAmeteAlemCalendar, $97cfca9efd59523d$export$fe6243cbe1a4b7c1 as CopticCalendar};\n//# sourceMappingURL=EthiopicCalendar.mjs.map\n","import {BuddhistCalendar as $63d4eafd4d826996$export$42d20a78301dee44} from \"./calendars/BuddhistCalendar.mjs\";\nimport {CopticCalendar as $97cfca9efd59523d$export$fe6243cbe1a4b7c1, EthiopicAmeteAlemCalendar as $97cfca9efd59523d$export$d72e0c37005a4914, EthiopicCalendar as $97cfca9efd59523d$export$26ba6eab5e20cd7d} from \"./calendars/EthiopicCalendar.mjs\";\nimport {GregorianCalendar as $93635573935797de$export$80ee6245ec4f29ec} from \"./calendars/GregorianCalendar.mjs\";\nimport {HebrewCalendar as $f39495b96f9dbac6$export$ca405048b8fb5af} from \"./calendars/HebrewCalendar.mjs\";\nimport {IndianCalendar as $11fa67a177e45470$export$39f31c639fa15726} from \"./calendars/IndianCalendar.mjs\";\nimport {IslamicCivilCalendar as $fd4f9bc1ba0e49a8$export$2066795aadd37bfc, IslamicTabularCalendar as $fd4f9bc1ba0e49a8$export$37f0887f2f9d22f7, IslamicUmalquraCalendar as $fd4f9bc1ba0e49a8$export$5baab4758c231076} from \"./calendars/IslamicCalendar.mjs\";\nimport {JapaneseCalendar as $34b940b49ba042df$export$b746ab2b60cdffbf} from \"./calendars/JapaneseCalendar.mjs\";\nimport {PersianCalendar as $a0cc0739a536c3b1$export$37fccdbfd14c5939} from \"./calendars/PersianCalendar.mjs\";\nimport {TaiwanCalendar as $c009cc5f64923054$export$65e01080afcb0799} from \"./calendars/TaiwanCalendar.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\nfunction $84102b64e5ca022f$export$dd0bbc9b26defe37(name) {\n    switch(name){\n        case 'buddhist':\n            return new (0, $63d4eafd4d826996$export$42d20a78301dee44)();\n        case 'ethiopic':\n            return new (0, $97cfca9efd59523d$export$26ba6eab5e20cd7d)();\n        case 'ethioaa':\n            return new (0, $97cfca9efd59523d$export$d72e0c37005a4914)();\n        case 'coptic':\n            return new (0, $97cfca9efd59523d$export$fe6243cbe1a4b7c1)();\n        case 'hebrew':\n            return new (0, $f39495b96f9dbac6$export$ca405048b8fb5af)();\n        case 'indian':\n            return new (0, $11fa67a177e45470$export$39f31c639fa15726)();\n        case 'islamic-civil':\n            return new (0, $fd4f9bc1ba0e49a8$export$2066795aadd37bfc)();\n        case 'islamic-tbla':\n            return new (0, $fd4f9bc1ba0e49a8$export$37f0887f2f9d22f7)();\n        case 'islamic-umalqura':\n            return new (0, $fd4f9bc1ba0e49a8$export$5baab4758c231076)();\n        case 'japanese':\n            return new (0, $34b940b49ba042df$export$b746ab2b60cdffbf)();\n        case 'persian':\n            return new (0, $a0cc0739a536c3b1$export$37fccdbfd14c5939)();\n        case 'roc':\n            return new (0, $c009cc5f64923054$export$65e01080afcb0799)();\n        case 'gregory':\n        default:\n            return new (0, $93635573935797de$export$80ee6245ec4f29ec)();\n    }\n}\n\n\nexport {$84102b64e5ca022f$export$dd0bbc9b26defe37 as createCalendar};\n//# sourceMappingURL=createCalendar.mjs.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ let $12a3c853105e5a70$var$formatterCache = new Map();\nclass $12a3c853105e5a70$export$ad991b66133851cf {\n    constructor(locale, options = {}){\n        this.formatter = $12a3c853105e5a70$var$getCachedDateFormatter(locale, options);\n        this.options = options;\n    }\n    /**\n   * Formats a date as a string according to the locale and format options passed to the\n   * constructor.\n   */ format(value) {\n        return this.formatter.format(value);\n    }\n    /** Formats a date to an array of parts such as separators, numbers, punctuation, and more. */ formatToParts(value) {\n        return this.formatter.formatToParts(value);\n    }\n    /** Formats a date range as a string. */ formatRange(start, end) {\n        // @ts-ignore\n        if (typeof this.formatter.formatRange === 'function') // @ts-ignore\n        return this.formatter.formatRange(start, end);\n        if (end < start) throw new RangeError('End date must be >= start date');\n        // Very basic fallback for old browsers.\n        return `${this.formatter.format(start)} \\u{2013} ${this.formatter.format(end)}`;\n    }\n    /** Formats a date range as an array of parts. */ formatRangeToParts(start, end) {\n        // @ts-ignore\n        if (typeof this.formatter.formatRangeToParts === 'function') // @ts-ignore\n        return this.formatter.formatRangeToParts(start, end);\n        if (end < start) throw new RangeError('End date must be >= start date');\n        let startParts = this.formatter.formatToParts(start);\n        let endParts = this.formatter.formatToParts(end);\n        return [\n            ...startParts.map((p)=>({\n                    ...p,\n                    source: 'startRange'\n                })),\n            {\n                type: 'literal',\n                value: \" \\u2013 \",\n                source: 'shared'\n            },\n            ...endParts.map((p)=>({\n                    ...p,\n                    source: 'endRange'\n                }))\n        ];\n    }\n    /** Returns the resolved formatting options based on the values passed to the constructor. */ resolvedOptions() {\n        let resolvedOptions = this.formatter.resolvedOptions();\n        if ($12a3c853105e5a70$var$hasBuggyResolvedHourCycle()) {\n            if (!this.resolvedHourCycle) this.resolvedHourCycle = $12a3c853105e5a70$var$getResolvedHourCycle(resolvedOptions.locale, this.options);\n            resolvedOptions.hourCycle = this.resolvedHourCycle;\n            resolvedOptions.hour12 = this.resolvedHourCycle === 'h11' || this.resolvedHourCycle === 'h12';\n        }\n        // Safari uses a different name for the Ethiopic (Amete Alem) calendar.\n        // https://bugs.webkit.org/show_bug.cgi?id=241564\n        if (resolvedOptions.calendar === 'ethiopic-amete-alem') resolvedOptions.calendar = 'ethioaa';\n        return resolvedOptions;\n    }\n}\n// There are multiple bugs involving the hour12 and hourCycle options in various browser engines.\n//   - Chrome [1] (and the ECMA 402 spec [2]) resolve hour12: false in English and other locales to h24 (24:00 - 23:59)\n//     rather than h23 (00:00 - 23:59). Same can happen with hour12: true in French, which Chrome resolves to h11 (00:00 - 11:59)\n//     rather than h12 (12:00 - 11:59).\n//   - WebKit returns an incorrect hourCycle resolved option in the French locale due to incorrect parsing of 'h' literal\n//     in the resolved pattern. It also formats incorrectly when specifying the hourCycle option for the same reason. [3]\n// [1] https://bugs.chromium.org/p/chromium/issues/detail?id=1045791\n// [2] https://github.com/tc39/ecma402/issues/402\n// [3] https://bugs.webkit.org/show_bug.cgi?id=229313\n// https://github.com/unicode-org/cldr/blob/018b55eff7ceb389c7e3fc44e2f657eae3b10b38/common/supplemental/supplementalData.xml#L4774-L4802\nconst $12a3c853105e5a70$var$hour12Preferences = {\n    true: {\n        // Only Japanese uses the h11 style for 12 hour time. All others use h12.\n        ja: 'h11'\n    },\n    false: {\n    }\n};\nfunction $12a3c853105e5a70$var$getCachedDateFormatter(locale, options = {}) {\n    // Work around buggy hour12 behavior in Chrome / ECMA 402 spec by using hourCycle instead.\n    // Only apply the workaround if the issue is detected, because the hourCycle option is buggy in Safari.\n    if (typeof options.hour12 === 'boolean' && $12a3c853105e5a70$var$hasBuggyHour12Behavior()) {\n        options = {\n            ...options\n        };\n        let pref = $12a3c853105e5a70$var$hour12Preferences[String(options.hour12)][locale.split('-')[0]];\n        let defaultHourCycle = options.hour12 ? 'h12' : 'h23';\n        options.hourCycle = pref ?? defaultHourCycle;\n        delete options.hour12;\n    }\n    let cacheKey = locale + (options ? Object.entries(options).sort((a, b)=>a[0] < b[0] ? -1 : 1).join() : '');\n    if ($12a3c853105e5a70$var$formatterCache.has(cacheKey)) return $12a3c853105e5a70$var$formatterCache.get(cacheKey);\n    let numberFormatter = new Intl.DateTimeFormat(locale, options);\n    $12a3c853105e5a70$var$formatterCache.set(cacheKey, numberFormatter);\n    return numberFormatter;\n}\nlet $12a3c853105e5a70$var$_hasBuggyHour12Behavior = null;\nfunction $12a3c853105e5a70$var$hasBuggyHour12Behavior() {\n    if ($12a3c853105e5a70$var$_hasBuggyHour12Behavior == null) $12a3c853105e5a70$var$_hasBuggyHour12Behavior = new Intl.DateTimeFormat('en-US', {\n        hour: 'numeric',\n        hour12: false\n    }).format(new Date(2020, 2, 3, 0)) === '24';\n    return $12a3c853105e5a70$var$_hasBuggyHour12Behavior;\n}\nlet $12a3c853105e5a70$var$_hasBuggyResolvedHourCycle = null;\nfunction $12a3c853105e5a70$var$hasBuggyResolvedHourCycle() {\n    if ($12a3c853105e5a70$var$_hasBuggyResolvedHourCycle == null) $12a3c853105e5a70$var$_hasBuggyResolvedHourCycle = new Intl.DateTimeFormat('fr', {\n        hour: 'numeric',\n        hour12: false\n    }).resolvedOptions().hourCycle === 'h12';\n    return $12a3c853105e5a70$var$_hasBuggyResolvedHourCycle;\n}\nfunction $12a3c853105e5a70$var$getResolvedHourCycle(locale, options) {\n    if (!options.timeStyle && !options.hour) return undefined;\n    // Work around buggy results in resolved hourCycle and hour12 options in WebKit.\n    // Format the minimum possible hour and maximum possible hour in a day and parse the results.\n    locale = locale.replace(/(-u-)?-nu-[a-zA-Z0-9]+/, '');\n    locale += (locale.includes('-u-') ? '' : '-u') + '-nu-latn';\n    let formatter = $12a3c853105e5a70$var$getCachedDateFormatter(locale, {\n        ...options,\n        timeZone: undefined // use local timezone\n    });\n    let min = parseInt(formatter.formatToParts(new Date(2020, 2, 3, 0)).find((p)=>p.type === 'hour').value, 10);\n    let max = parseInt(formatter.formatToParts(new Date(2020, 2, 3, 23)).find((p)=>p.type === 'hour').value, 10);\n    if (min === 0 && max === 23) return 'h23';\n    if (min === 24 && max === 23) return 'h24';\n    if (min === 0 && max === 11) return 'h11';\n    if (min === 12 && max === 11) return 'h12';\n    throw new Error('Unexpected hour cycle result');\n}\n\n\nexport {$12a3c853105e5a70$export$ad991b66133851cf as DateFormatter};\n//# sourceMappingURL=DateFormatter.mjs.map\n","import {useDeepMemo as $9c268ab73a5d55e5$export$722debc0e56fea39} from \"../utils/useDeepMemo.mjs\";\nimport {useLocale as $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7} from \"./I18nProvider.mjs\";\nimport {DateFormatter as $guoDu$DateFormatter} from \"@internationalized/date\";\nimport {useMemo as $guoDu$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nfunction $60f33508b4cd9d3b$export$85fd5fdf27bacc79(options) {\n    // Reuse last options object if it is shallowly equal, which allows the useMemo result to also be reused.\n    options = (0, $9c268ab73a5d55e5$export$722debc0e56fea39)(options ?? {}, $60f33508b4cd9d3b$var$isEqual);\n    let { locale: locale } = (0, $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7)();\n    return (0, $guoDu$useMemo)(()=>new (0, $guoDu$DateFormatter)(locale, options), [\n        locale,\n        options\n    ]);\n}\nfunction $60f33508b4cd9d3b$var$isEqual(a, b) {\n    if (a === b) return true;\n    let aKeys = Object.keys(a);\n    let bKeys = Object.keys(b);\n    if (aKeys.length !== bKeys.length) return false;\n    for (let key of aKeys){\n        if (b[key] !== a[key]) return false;\n    }\n    return true;\n}\n\n\nexport {$60f33508b4cd9d3b$export$85fd5fdf27bacc79 as useDateFormatter};\n//# sourceMappingURL=useDateFormatter.mjs.map\n","/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $901761b40e390936$export$2bb74740c4e19def(node, checkForOverflow) {\n    if (!node) return false;\n    let style = window.getComputedStyle(node);\n    let root = document.scrollingElement || document.documentElement;\n    let isScrollable = /(auto|scroll)/.test(style.overflow + style.overflowX + style.overflowY);\n    // Root element has `visible` overflow by default, but is scrollable nonetheless.\n    if (node === root && style.overflow !== 'hidden') isScrollable = true;\n    if (isScrollable && checkForOverflow) isScrollable = node.scrollHeight !== node.clientHeight || node.scrollWidth !== node.clientWidth;\n    return isScrollable;\n}\n\n\nexport {$901761b40e390936$export$2bb74740c4e19def as isScrollable};\n//# sourceMappingURL=isScrollable.mjs.map\n","import {isScrollable as $901761b40e390936$export$2bb74740c4e19def} from \"./isScrollable.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $3578607fe3d4b096$export$cfa2225e87938781(node, checkForOverflow) {\n    let scrollableNode = node;\n    if ((0, $901761b40e390936$export$2bb74740c4e19def)(scrollableNode, checkForOverflow)) scrollableNode = scrollableNode.parentElement;\n    while(scrollableNode && !(0, $901761b40e390936$export$2bb74740c4e19def)(scrollableNode, checkForOverflow))scrollableNode = scrollableNode.parentElement;\n    return scrollableNode || document.scrollingElement || document.documentElement;\n}\n\n\nexport {$3578607fe3d4b096$export$cfa2225e87938781 as getScrollParent};\n//# sourceMappingURL=getScrollParent.mjs.map\n","import {isScrollable as $901761b40e390936$export$2bb74740c4e19def} from \"./isScrollable.mjs\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $76d97191f0f90600$export$94ed1c92c7beeb22(node, checkForOverflow) {\n    let parentElements = [];\n    let root = document.scrollingElement || document.documentElement;\n    while(node){\n        if ((0, $901761b40e390936$export$2bb74740c4e19def)(node, checkForOverflow)) parentElements.push(node);\n        if (node === root) break;\n        node = node.parentElement;\n    }\n    return parentElements;\n}\n\n\nexport {$76d97191f0f90600$export$94ed1c92c7beeb22 as getScrollParents};\n//# sourceMappingURL=getScrollParents.mjs.map\n","import {getScrollParents as $76d97191f0f90600$export$94ed1c92c7beeb22} from \"./getScrollParents.mjs\";\nimport {isIOS as $2add3ce32c6007eb$export$fedb369cb70207f1, isWebKit as $2add3ce32c6007eb$export$78551043582a6a98} from \"./platform.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $51a3e22a5186a962$export$53a0910f038337bd(scrollView, element, opts = {}) {\n    if (scrollView === element) return;\n    let target = element.getBoundingClientRect();\n    $51a3e22a5186a962$export$f064fd83a2c6e9ca(scrollView, element, target, opts);\n}\nfunction $51a3e22a5186a962$export$f064fd83a2c6e9ca(scrollView, element, target, opts = {}) {\n    let { block: block = 'nearest', inline: inline = 'nearest' } = opts;\n    let y = scrollView.scrollTop;\n    let x = scrollView.scrollLeft;\n    let view = scrollView.getBoundingClientRect();\n    let itemStyle = window.getComputedStyle(element);\n    let viewStyle = window.getComputedStyle(scrollView);\n    let root = document.scrollingElement || document.documentElement;\n    let isRoot = scrollView === root;\n    let viewTop = scrollView === root ? 0 : view.top;\n    let viewBottom = scrollView === root ? scrollView.clientHeight : view.bottom;\n    let viewLeft = scrollView === root ? 0 : view.left;\n    let viewRight = scrollView === root ? scrollView.clientWidth : view.right;\n    let scrollMarginTop = parseFloat(itemStyle.scrollMarginTop) || 0;\n    let scrollMarginBottom = parseFloat(itemStyle.scrollMarginBottom) || 0;\n    let scrollMarginLeft = parseFloat(itemStyle.scrollMarginLeft) || 0;\n    let scrollMarginRight = parseFloat(itemStyle.scrollMarginRight) || 0;\n    let scrollPaddingTop = parseFloat(viewStyle.scrollPaddingTop) || 0;\n    let scrollPaddingBottom = parseFloat(viewStyle.scrollPaddingBottom) || 0;\n    let scrollPaddingLeft = parseFloat(viewStyle.scrollPaddingLeft) || 0;\n    let scrollPaddingRight = parseFloat(viewStyle.scrollPaddingRight) || 0;\n    let borderTopWidth = parseFloat(viewStyle.borderTopWidth) || 0;\n    let borderBottomWidth = parseFloat(viewStyle.borderBottomWidth) || 0;\n    let borderLeftWidth = parseFloat(viewStyle.borderLeftWidth) || 0;\n    let borderRightWidth = parseFloat(viewStyle.borderRightWidth) || 0;\n    let scrollAreaTop = target.top - scrollMarginTop;\n    let scrollAreaBottom = target.bottom + scrollMarginBottom;\n    let scrollAreaLeft = target.left - scrollMarginLeft;\n    let scrollAreaRight = target.right + scrollMarginRight;\n    let scrollBarOffsetX = scrollView === root ? 0 : borderLeftWidth + borderRightWidth;\n    let scrollBarOffsetY = scrollView === root ? 0 : borderTopWidth + borderBottomWidth;\n    let scrollBarWidth = scrollView === root ? 0 : scrollView.offsetWidth - scrollView.clientWidth - scrollBarOffsetX;\n    let scrollBarHeight = scrollView === root ? 0 : scrollView.offsetHeight - scrollView.clientHeight - scrollBarOffsetY;\n    let scrollPortTop = viewTop + (isRoot ? 0 : borderTopWidth) + scrollPaddingTop;\n    let scrollPortBottom = viewBottom - (isRoot ? 0 : borderBottomWidth) - scrollPaddingBottom - scrollBarHeight;\n    let scrollPortLeft = viewLeft + (isRoot ? 0 : borderLeftWidth) + scrollPaddingLeft;\n    let scrollPortRight = viewRight - (isRoot ? 0 : borderRightWidth) - scrollPaddingRight;\n    // WebKit on iOS always positions the scrollbar on the right ¯\\_(ツ)_/¯\n    if ((0, $2add3ce32c6007eb$export$fedb369cb70207f1)() && (0, $2add3ce32c6007eb$export$78551043582a6a98)() || viewStyle.direction === 'ltr') scrollPortRight -= scrollBarWidth;\n    else if (viewStyle.direction === 'rtl') scrollPortLeft += scrollBarWidth;\n    let shouldScrollBlock = scrollAreaTop < scrollPortTop || scrollAreaBottom > scrollPortBottom;\n    let shouldScrollInline = scrollAreaLeft < scrollPortLeft || scrollAreaRight > scrollPortRight;\n    if (shouldScrollBlock && block === 'start') y += scrollAreaTop - scrollPortTop;\n    else if (shouldScrollBlock && block === 'center') y += (scrollAreaTop + scrollAreaBottom) / 2 - (scrollPortTop + scrollPortBottom) / 2;\n    else if (shouldScrollBlock && block === 'end') y += scrollAreaBottom - scrollPortBottom;\n    else if (shouldScrollBlock && block === 'nearest') {\n        let start = scrollAreaTop - scrollPortTop;\n        let end = scrollAreaBottom - scrollPortBottom;\n        y += Math.abs(start) <= Math.abs(end) ? start : end;\n    }\n    if (shouldScrollInline && inline === 'start') x += scrollAreaLeft - scrollPortLeft;\n    else if (shouldScrollInline && inline === 'center') x += (scrollAreaLeft + scrollAreaRight) / 2 - (scrollPortLeft + scrollPortRight) / 2;\n    else if (shouldScrollInline && inline === 'end') x += scrollAreaRight - scrollPortRight;\n    else if (shouldScrollInline && inline === 'nearest') {\n        let start = scrollAreaLeft - scrollPortLeft;\n        let end = scrollAreaRight - scrollPortRight;\n        x += Math.abs(start) <= Math.abs(end) ? start : end;\n    }\n    if (process.env.NODE_ENV === 'test') {\n        scrollView.scrollLeft = x;\n        scrollView.scrollTop = y;\n        return;\n    }\n    scrollView.scrollTo({\n        left: x,\n        top: y\n    });\n}\nfunction $51a3e22a5186a962$export$c826860796309d1b(targetElement, opts = {}) {\n    let { containingElement: containingElement } = opts;\n    if (targetElement && targetElement.isConnected) {\n        let root = document.scrollingElement || document.documentElement;\n        let isScrollPrevented = window.getComputedStyle(root).overflow === 'hidden';\n        if (!isScrollPrevented) {\n            let { left: originalLeft, top: originalTop } = targetElement.getBoundingClientRect();\n            // use scrollIntoView({block: 'nearest'}) instead of .focus to check if the element is fully in view or not since .focus()\n            // won't cause a scroll if the element is already focused and doesn't behave consistently when an element is partially out of view horizontally vs vertically\n            targetElement?.scrollIntoView?.({\n                block: 'nearest'\n            });\n            let { left: newLeft, top: newTop } = targetElement.getBoundingClientRect();\n            // Account for sub pixel differences from rounding\n            if (Math.abs(originalLeft - newLeft) > 1 || Math.abs(originalTop - newTop) > 1) {\n                containingElement?.scrollIntoView?.({\n                    block: 'center',\n                    inline: 'center'\n                });\n                targetElement.scrollIntoView?.({\n                    block: 'nearest'\n                });\n            }\n        } else {\n            let { left: originalLeft, top: originalTop } = targetElement.getBoundingClientRect();\n            // If scrolling is prevented, we don't want to scroll the body since it might move the overlay partially offscreen and the user can't scroll it back into view.\n            let scrollParents = (0, $76d97191f0f90600$export$94ed1c92c7beeb22)(targetElement, true);\n            for (let scrollParent of scrollParents)$51a3e22a5186a962$export$53a0910f038337bd(scrollParent, targetElement);\n            let { left: newLeft, top: newTop } = targetElement.getBoundingClientRect();\n            // Account for sub pixel differences from rounding\n            if (Math.abs(originalLeft - newLeft) > 1 || Math.abs(originalTop - newTop) > 1) {\n                scrollParents = containingElement ? (0, $76d97191f0f90600$export$94ed1c92c7beeb22)(containingElement, true) : [];\n                // scroll containing element into view first, then rescroll target element into view like the non chrome flow above\n                for (let scrollParent of scrollParents)$51a3e22a5186a962$export$53a0910f038337bd(scrollParent, containingElement, {\n                    block: 'center',\n                    inline: 'center'\n                });\n                for (let scrollParent of (0, $76d97191f0f90600$export$94ed1c92c7beeb22)(targetElement, true))$51a3e22a5186a962$export$53a0910f038337bd(scrollParent, targetElement);\n            }\n        }\n    }\n}\n\n\nexport {$51a3e22a5186a962$export$53a0910f038337bd as scrollIntoView, $51a3e22a5186a962$export$f064fd83a2c6e9ca as scrollRectIntoView, $51a3e22a5186a962$export$c826860796309d1b as scrollIntoViewport};\n//# sourceMappingURL=scrollIntoView.mjs.map\n","import {useLayoutEffect as $c4867b2f328c2698$export$e5c5a5f917a5871c} from \"./useLayoutEffect.mjs\";\nimport {useState as $4UXHm$useState} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nlet $121970af65029459$var$descriptionId = 0;\nconst $121970af65029459$var$descriptionNodes = new Map();\nfunction $121970af65029459$export$f8aeda7b10753fa1(description) {\n    let [id, setId] = (0, $4UXHm$useState)();\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        if (!description) return;\n        let desc = $121970af65029459$var$descriptionNodes.get(description);\n        if (!desc) {\n            let id = `react-aria-description-${$121970af65029459$var$descriptionId++}`;\n            setId(id);\n            let node = document.createElement('div');\n            node.id = id;\n            node.style.display = 'none';\n            node.textContent = description;\n            document.body.appendChild(node);\n            desc = {\n                refCount: 0,\n                element: node\n            };\n            $121970af65029459$var$descriptionNodes.set(description, desc);\n        } else setId(desc.element.id);\n        desc.refCount++;\n        return ()=>{\n            if (desc && --desc.refCount === 0) {\n                desc.element.remove();\n                $121970af65029459$var$descriptionNodes.delete(description);\n            }\n        };\n    }, [\n        description\n    ]);\n    return {\n        'aria-describedby': description ? id : undefined\n    };\n}\n\n\nexport {$121970af65029459$export$f8aeda7b10753fa1 as useDescription};\n//# sourceMappingURL=useDescription.mjs.map\n","import {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {useFocusWithin as $2c9edc598a03d523$export$420e68273165f4ec} from \"../interactions/useFocusWithin.mjs\";\nimport $48drk$react, {useState as $48drk$useState, useMemo as $48drk$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $ea3928288112382f$var$styles = {\n    border: 0,\n    clip: 'rect(0 0 0 0)',\n    clipPath: 'inset(50%)',\n    height: '1px',\n    margin: '-1px',\n    overflow: 'hidden',\n    padding: 0,\n    position: 'absolute',\n    width: '1px',\n    whiteSpace: 'nowrap'\n};\nfunction $ea3928288112382f$export$a966af930f325cab(props = {}) {\n    let { style: style, isFocusable: isFocusable } = props;\n    let [isFocused, setFocused] = (0, $48drk$useState)(false);\n    let { focusWithinProps: focusWithinProps } = (0, $2c9edc598a03d523$export$420e68273165f4ec)({\n        isDisabled: !isFocusable,\n        onFocusWithinChange: (val)=>setFocused(val)\n    });\n    // If focused, don't hide the element.\n    let combinedStyles = (0, $48drk$useMemo)(()=>{\n        if (isFocused) // oxlint-disable-next-line react/react-compiler\n        return style;\n        else if (style) return {\n            ...$ea3928288112382f$var$styles,\n            ...style\n        };\n        else return $ea3928288112382f$var$styles;\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [\n        isFocused\n    ]);\n    return {\n        visuallyHiddenProps: {\n            ...focusWithinProps,\n            style: combinedStyles\n        }\n    };\n}\nfunction $ea3928288112382f$export$439d29a4e110a164(props) {\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    let { children: children, elementType: Element = 'div', isFocusable: isFocusable, style: style, ...otherProps } = props;\n    let { visuallyHiddenProps: visuallyHiddenProps } = $ea3928288112382f$export$a966af930f325cab(props);\n    return /*#__PURE__*/ (0, $48drk$react).createElement(Element, (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(otherProps, visuallyHiddenProps), children);\n}\n\n\nexport {$ea3928288112382f$export$a966af930f325cab as useVisuallyHidden, $ea3928288112382f$export$439d29a4e110a164 as VisuallyHidden};\n//# sourceMappingURL=VisuallyHidden.mjs.map\n","import {useRenderProps as $7230ffa83bc0c2cf$export$4d86445c2cf5e3} from \"./utils.mjs\";\nimport {Text as $efe09c6d1c304b50$export$5f1af8db9871e1d6} from \"./Text.mjs\";\nimport {filterDOMProps as $QpkXT$filterDOMProps} from \"react-aria/filterDOMProps\";\nimport $QpkXT$react, {createContext as $QpkXT$createContext, forwardRef as $QpkXT$forwardRef, useContext as $QpkXT$useContext} from \"react\";\n\n/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nconst $1f3c3b1a70cec653$export$ff05c3ac10437e03 = /*#__PURE__*/ (0, $QpkXT$createContext)(null);\nconst $1f3c3b1a70cec653$export$f551688fc98f2e09 = /*#__PURE__*/ (0, $QpkXT$forwardRef)(function FieldError(props, ref) {\n    let validation = (0, $QpkXT$useContext)($1f3c3b1a70cec653$export$ff05c3ac10437e03);\n    if (!validation?.isInvalid) return null;\n    return /*#__PURE__*/ (0, $QpkXT$react).createElement($1f3c3b1a70cec653$var$FieldErrorInner, {\n        ...props,\n        ref: ref\n    });\n});\nconst $1f3c3b1a70cec653$var$FieldErrorInner = /*#__PURE__*/ (0, $QpkXT$forwardRef)((props, ref)=>{\n    let validation = (0, $QpkXT$useContext)($1f3c3b1a70cec653$export$ff05c3ac10437e03);\n    let { elementType: elementType, ...restProps } = props;\n    let domProps = (0, $QpkXT$filterDOMProps)(restProps, {\n        global: true\n    });\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...restProps,\n        defaultClassName: 'react-aria-FieldError',\n        defaultChildren: validation.validationErrors.length === 0 ? undefined : validation.validationErrors.join(' '),\n        values: validation\n    });\n    if (renderProps.children == null) return null;\n    return /*#__PURE__*/ (0, $QpkXT$react).createElement((0, $efe09c6d1c304b50$export$5f1af8db9871e1d6), {\n        slot: \"errorMessage\",\n        elementType: elementType,\n        ...domProps,\n        ...renderProps,\n        ref: ref\n    });\n});\n\n\nexport {$1f3c3b1a70cec653$export$ff05c3ac10437e03 as FieldErrorContext, $1f3c3b1a70cec653$export$f551688fc98f2e09 as FieldError};\n//# sourceMappingURL=FieldError.mjs.map\n","import {createContext as $8AuPP$createContext, useMemo as $8AuPP$useMemo, useContext as $8AuPP$useContext, useState as $8AuPP$useState, useRef as $8AuPP$useRef, useEffect as $8AuPP$useEffect} from \"react\";\n\n/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $fd2148440a13ec26$export$aca958c65c314e6c = {\n    badInput: false,\n    customError: false,\n    patternMismatch: false,\n    rangeOverflow: false,\n    rangeUnderflow: false,\n    stepMismatch: false,\n    tooLong: false,\n    tooShort: false,\n    typeMismatch: false,\n    valueMissing: false,\n    valid: true\n};\nconst $fd2148440a13ec26$var$CUSTOM_VALIDITY_STATE = {\n    ...$fd2148440a13ec26$export$aca958c65c314e6c,\n    customError: true,\n    valid: false\n};\nconst $fd2148440a13ec26$export$dad6ae84456c676a = {\n    isInvalid: false,\n    validationDetails: $fd2148440a13ec26$export$aca958c65c314e6c,\n    validationErrors: []\n};\nconst $fd2148440a13ec26$export$571b5131b7e65c11 = (0, $8AuPP$createContext)({});\nconst $fd2148440a13ec26$export$a763b9476acd3eb = '__reactAriaFormValidationState';\nfunction $fd2148440a13ec26$export$fc1a364ae1f3ff10(props) {\n    // Private prop for parent components to pass state to children.\n    if (props[$fd2148440a13ec26$export$a763b9476acd3eb]) {\n        let { realtimeValidation: realtimeValidation, displayValidation: displayValidation, updateValidation: updateValidation, resetValidation: resetValidation, commitValidation: commitValidation } = props[$fd2148440a13ec26$export$a763b9476acd3eb];\n        return {\n            realtimeValidation: realtimeValidation,\n            displayValidation: displayValidation,\n            updateValidation: updateValidation,\n            resetValidation: resetValidation,\n            commitValidation: commitValidation\n        };\n    }\n    // oxlint-disable-next-line react/react-compiler, react-hooks/rules-of-hooks\n    return $fd2148440a13ec26$var$useFormValidationStateImpl(props);\n}\nfunction $fd2148440a13ec26$var$useFormValidationStateImpl(props) {\n    let { isInvalid: isInvalid, validationState: validationState, name: name, value: value, builtinValidation: builtinValidation, validate: validate, validationBehavior: validationBehavior = 'aria' } = props;\n    // backward compatibility.\n    if (validationState) isInvalid ||= validationState === 'invalid';\n    // If the isInvalid prop is controlled, update validation result in realtime.\n    let controlledError = isInvalid !== undefined ? {\n        isInvalid: isInvalid,\n        validationErrors: [],\n        validationDetails: $fd2148440a13ec26$var$CUSTOM_VALIDITY_STATE\n    } : null;\n    // Perform custom client side validation.\n    let clientError = (0, $8AuPP$useMemo)(()=>{\n        if (!validate || value == null) return null;\n        let validateErrors = $fd2148440a13ec26$var$runValidate(validate, value);\n        return $fd2148440a13ec26$var$getValidationResult(validateErrors);\n    }, [\n        validate,\n        value\n    ]);\n    if (builtinValidation?.validationDetails.valid) builtinValidation = undefined;\n    // Get relevant server errors from the form.\n    let serverErrors = (0, $8AuPP$useContext)($fd2148440a13ec26$export$571b5131b7e65c11);\n    let serverErrorMessages = (0, $8AuPP$useMemo)(()=>{\n        if (name) return Array.isArray(name) ? name.flatMap((name)=>$fd2148440a13ec26$var$asArray(serverErrors[name])) : $fd2148440a13ec26$var$asArray(serverErrors[name]);\n        return [];\n    }, [\n        serverErrors,\n        name\n    ]);\n    // Show server errors when the form gets a new value, and clear when the user changes the value.\n    let [lastServerErrors, setLastServerErrors] = (0, $8AuPP$useState)(serverErrors);\n    let [isServerErrorCleared, setServerErrorCleared] = (0, $8AuPP$useState)(false);\n    if (serverErrors !== lastServerErrors) {\n        setLastServerErrors(serverErrors);\n        setServerErrorCleared(false);\n    }\n    let serverError = (0, $8AuPP$useMemo)(()=>$fd2148440a13ec26$var$getValidationResult(isServerErrorCleared ? [] : serverErrorMessages), [\n        isServerErrorCleared,\n        serverErrorMessages\n    ]);\n    // Track the next validation state in a ref until commitValidation is called.\n    let nextValidation = (0, $8AuPP$useRef)($fd2148440a13ec26$export$dad6ae84456c676a);\n    let [currentValidity, setCurrentValidity] = (0, $8AuPP$useState)($fd2148440a13ec26$export$dad6ae84456c676a);\n    let lastError = (0, $8AuPP$useRef)($fd2148440a13ec26$export$dad6ae84456c676a);\n    let commitValidation = ()=>{\n        if (!commitQueued) return;\n        setCommitQueued(false);\n        let error = clientError || builtinValidation || nextValidation.current;\n        if (!$fd2148440a13ec26$var$isEqualValidation(error, lastError.current)) {\n            lastError.current = error;\n            setCurrentValidity(error);\n        }\n    };\n    let [commitQueued, setCommitQueued] = (0, $8AuPP$useState)(false);\n    (0, $8AuPP$useEffect)(commitValidation);\n    // realtimeValidation is used to update the native input element's state based on custom validation logic.\n    // displayValidation is the currently displayed validation state that the user sees (e.g. on input change/form submit).\n    // With validationBehavior=\"aria\", all errors are displayed in realtime rather than on submit.\n    let realtimeValidation = controlledError || serverError || clientError || builtinValidation || $fd2148440a13ec26$export$dad6ae84456c676a;\n    let displayValidation = validationBehavior === 'native' ? controlledError || serverError || currentValidity : controlledError || serverError || clientError || builtinValidation || currentValidity;\n    return {\n        realtimeValidation: realtimeValidation,\n        displayValidation: displayValidation,\n        updateValidation (value) {\n            // If validationBehavior is 'aria', update in realtime. Otherwise, store in a ref until commit.\n            if (validationBehavior === 'aria' && !$fd2148440a13ec26$var$isEqualValidation(currentValidity, value)) setCurrentValidity(value);\n            else nextValidation.current = value;\n        },\n        resetValidation () {\n            // Update the currently displayed validation state to valid on form reset,\n            // even if the native validity says it isn't. It'll show again on the next form submit.\n            let error = $fd2148440a13ec26$export$dad6ae84456c676a;\n            if (!$fd2148440a13ec26$var$isEqualValidation(error, lastError.current)) {\n                lastError.current = error;\n                setCurrentValidity(error);\n            }\n            // Do not commit validation after the next render. This avoids a condition where\n            // useSelect calls commitValidation inside an onReset handler.\n            if (validationBehavior === 'native') setCommitQueued(false);\n            setServerErrorCleared(true);\n        },\n        commitValidation () {\n            // Commit validation state so the user sees it on blur/change/submit. Also clear any server errors.\n            // Wait until after the next render to commit so that the latest value has been validated.\n            if (validationBehavior === 'native') setCommitQueued(true);\n            setServerErrorCleared(true);\n        }\n    };\n}\nfunction $fd2148440a13ec26$var$asArray(v) {\n    if (!v) return [];\n    return Array.isArray(v) ? v : [\n        v\n    ];\n}\nfunction $fd2148440a13ec26$var$runValidate(validate, value) {\n    if (typeof validate === 'function') {\n        let e = validate(value);\n        if (e && typeof e !== 'boolean') return $fd2148440a13ec26$var$asArray(e);\n    }\n    return [];\n}\nfunction $fd2148440a13ec26$var$getValidationResult(errors) {\n    return errors.length ? {\n        isInvalid: true,\n        validationErrors: errors,\n        validationDetails: $fd2148440a13ec26$var$CUSTOM_VALIDITY_STATE\n    } : null;\n}\nfunction $fd2148440a13ec26$var$isEqualValidation(a, b) {\n    if (a === b) return true;\n    return !!a && !!b && a.isInvalid === b.isInvalid && a.validationErrors.length === b.validationErrors.length && a.validationErrors.every((a, i)=>a === b.validationErrors[i]) && Object.entries(a.validationDetails).every(([k, v])=>b.validationDetails[k] === v);\n}\nfunction $fd2148440a13ec26$export$75ee7c75d68f5b0e(...results) {\n    let errors = new Set();\n    let isInvalid = false;\n    let validationDetails = {\n        ...$fd2148440a13ec26$export$aca958c65c314e6c\n    };\n    for (let v of results){\n        for (let e of v.validationErrors)errors.add(e);\n        // Only these properties apply for checkboxes.\n        isInvalid ||= v.isInvalid;\n        for(let key in validationDetails)validationDetails[key] ||= v.validationDetails[key];\n    }\n    validationDetails.valid = !isInvalid;\n    return {\n        isInvalid: isInvalid,\n        validationErrors: [\n            ...errors\n        ],\n        validationDetails: validationDetails\n    };\n}\n\n\nexport {$fd2148440a13ec26$export$aca958c65c314e6c as VALID_VALIDITY_STATE, $fd2148440a13ec26$export$dad6ae84456c676a as DEFAULT_VALIDATION_RESULT, $fd2148440a13ec26$export$571b5131b7e65c11 as FormValidationContext, $fd2148440a13ec26$export$a763b9476acd3eb as privateValidationStateProp, $fd2148440a13ec26$export$fc1a364ae1f3ff10 as useFormValidationState, $fd2148440a13ec26$export$75ee7c75d68f5b0e as mergeValidation};\n//# sourceMappingURL=useFormValidationState.mjs.map\n","import {dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415} from \"./utils.mjs\";\nimport {FormValidationContext as $iSTzu$FormValidationContext} from \"react-stately/private/form/useFormValidationState\";\nimport $iSTzu$react, {createContext as $iSTzu$createContext, forwardRef as $iSTzu$forwardRef} from \"react\";\n\n/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $cdaed739b1139372$export$c24727297075ec6a = /*#__PURE__*/ (0, $iSTzu$createContext)(null);\nconst $cdaed739b1139372$export$a7fed597f4b8afd8 = /*#__PURE__*/ (0, $iSTzu$forwardRef)(function Form(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $cdaed739b1139372$export$c24727297075ec6a);\n    let { validationErrors: validationErrors, validationBehavior: validationBehavior = 'native', children: children, className: className, ...domProps } = props;\n    return /*#__PURE__*/ (0, $iSTzu$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).form, {\n        noValidate: validationBehavior !== 'native',\n        ...domProps,\n        ref: ref,\n        className: className || 'react-aria-Form'\n    }, /*#__PURE__*/ (0, $iSTzu$react).createElement($cdaed739b1139372$export$c24727297075ec6a.Provider, {\n        value: {\n            ...props,\n            validationBehavior: validationBehavior\n        }\n    }, /*#__PURE__*/ (0, $iSTzu$react).createElement((0, $iSTzu$FormValidationContext).Provider, {\n        value: validationErrors ?? {}\n    }, children)));\n});\n\n\nexport {$cdaed739b1139372$export$c24727297075ec6a as FormContext, $cdaed739b1139372$export$a7fed597f4b8afd8 as Form};\n//# sourceMappingURL=Form.mjs.map\n","import {useLabel as $0beb20c9744a2065$export$8467354a121f1b9f} from \"./useLabel.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {useSlotId as $390e54f620492c70$export$b4cc09c592e8fdb8} from \"../utils/useId.mjs\";\n\n/*\n * Copyright 2021 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nfunction $191c9b6d48a0a4e2$export$294aa081a6c6f55d(props) {\n    let { description: description, errorMessage: errorMessage, isInvalid: isInvalid, validationState: validationState } = props;\n    let { labelProps: labelProps, fieldProps: fieldProps } = (0, $0beb20c9744a2065$export$8467354a121f1b9f)(props);\n    let descriptionId = (0, $390e54f620492c70$export$b4cc09c592e8fdb8)([\n        Boolean(description),\n        Boolean(errorMessage),\n        isInvalid,\n        validationState\n    ]);\n    let errorMessageId = (0, $390e54f620492c70$export$b4cc09c592e8fdb8)([\n        Boolean(description),\n        Boolean(errorMessage),\n        isInvalid,\n        validationState\n    ]);\n    fieldProps = (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(fieldProps, {\n        'aria-describedby': [\n            descriptionId,\n            // Use aria-describedby for error message because aria-errormessage is unsupported using VoiceOver or NVDA. See https://github.com/adobe/react-spectrum/issues/1346#issuecomment-740136268\n            errorMessageId,\n            props['aria-describedby']\n        ].filter(Boolean).join(' ') || undefined\n    });\n    return {\n        labelProps: labelProps,\n        fieldProps: fieldProps,\n        descriptionProps: {\n            id: descriptionId\n        },\n        errorMessageProps: {\n            id: errorMessageId\n        }\n    };\n}\n\n\nexport {$191c9b6d48a0a4e2$export$294aa081a6c6f55d as useField};\n//# sourceMappingURL=useField.mjs.map\n","import {useEffectEvent as $fe16bffc7a557bf0$export$7f54fc3180508a52} from \"./useEffectEvent.mjs\";\nimport {useEffect as $1HUBd$useEffect} from \"react\";\n\n/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $3274bf1495747a7b$export$5add1d006293d136(ref, initialValue, onReset) {\n    let handleReset = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)((e)=>{\n        if (onReset && !e.defaultPrevented) onReset(initialValue);\n    });\n    (0, $1HUBd$useEffect)(()=>{\n        let form = ref?.current?.form;\n        // 'reset' does not compose across shadow DOM boundaries, but this listener is intentionally\n        // scoped to this specific form element (not a global target), so shadow root propagation does\n        // not apply here.\n        // oxlint-disable-next-line rsp-rules/no-non-composing-event-listener\n        form?.addEventListener('reset', handleReset);\n        return ()=>{\n            form?.removeEventListener('reset', handleReset);\n        };\n    }, [\n        ref\n    ]);\n}\n\n\nexport {$3274bf1495747a7b$export$5add1d006293d136 as useFormReset};\n//# sourceMappingURL=useFormReset.mjs.map\n","import {getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {setInteractionModality as $8f5a2122b0992be3$export$8397ddfc504fdb9a} from \"../interactions/useFocusVisible.mjs\";\nimport {useEffectEvent as $fe16bffc7a557bf0$export$7f54fc3180508a52} from \"../utils/useEffectEvent.mjs\";\nimport {useLayoutEffect as $c4867b2f328c2698$export$e5c5a5f917a5871c} from \"../utils/useLayoutEffect.mjs\";\nimport {useRef as $axvKP$useRef, useEffect as $axvKP$useEffect} from \"react\";\n\n/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nfunction $860f7da480e22816$export$b8473d3665f3a75a(props, state, ref) {\n    let { validationBehavior: validationBehavior, focus: focus } = props;\n    // This is a useLayoutEffect so that it runs before the useEffect in useFormValidationState, which commits the validation change.\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        if (validationBehavior === 'native' && ref?.current && 'setCustomValidity' in ref.current && !ref.current.disabled) {\n            let errorMessage = state.realtimeValidation.isInvalid ? state.realtimeValidation.validationErrors.join(' ') || 'Invalid value.' : '';\n            ref.current.setCustomValidity(errorMessage);\n            // Prevent default tooltip for validation message.\n            // https://bugzilla.mozilla.org/show_bug.cgi?id=605277\n            if (!ref.current.hasAttribute('title')) ref.current.title = '';\n            if (!state.realtimeValidation.isInvalid) state.updateValidation($860f7da480e22816$var$getNativeValidity(ref.current));\n        }\n    });\n    let isIgnoredReset = (0, $axvKP$useRef)(false);\n    let onReset = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)(()=>{\n        if (!isIgnoredReset.current) state.resetValidation();\n    });\n    let onInvalid = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)((e)=>{\n        // Only commit validation if we are not already displaying one.\n        // This avoids clearing server errors that the user didn't actually fix.\n        if (!state.displayValidation.isInvalid) state.commitValidation();\n        // Auto focus the first invalid input in a form, unless the error already had its default prevented.\n        let form = ref?.current?.form;\n        if (!e.defaultPrevented && ref && form && $860f7da480e22816$var$getFirstInvalidInput(form) === ref.current) {\n            if (focus) focus();\n            else ref.current?.focus();\n            // Always show focus ring.\n            (0, $8f5a2122b0992be3$export$8397ddfc504fdb9a)('keyboard');\n        }\n        // Prevent default browser error UI from appearing.\n        e.preventDefault();\n    });\n    let onChange = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)(()=>{\n        state.commitValidation();\n    });\n    (0, $axvKP$useEffect)(()=>{\n        let input = ref?.current;\n        if (!input) return;\n        let form = input.form;\n        let reset = form?.reset;\n        if (form) // Try to detect React's automatic form reset behavior so we don't clear\n        // validation errors that are returned by server actions.\n        // To do this, we ignore programmatic form resets that occur outside a user event.\n        // This is best-effort. There may be false positives, e.g. setTimeout.\n        // oxlint-disable-next-line react/react-compiler\n        form.reset = ()=>{\n            // React uses MessageChannel for scheduling, so ignore 'message' events.\n            isIgnoredReset.current = !window.event || window.event.type === 'message' && (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(window.event) instanceof MessagePort;\n            reset?.call(form);\n            isIgnoredReset.current = false;\n        };\n        // 'change' and 'reset' do not compose across shadow DOM boundaries, but these listeners are\n        // intentionally scoped to this specific input/form element (not a global target), so shadow\n        // root propagation does not apply here.\n        input.addEventListener('invalid', onInvalid);\n        // oxlint-disable-next-line rsp-rules/no-non-composing-event-listener\n        input.addEventListener('change', onChange);\n        // oxlint-disable-next-line rsp-rules/no-non-composing-event-listener\n        form?.addEventListener('reset', onReset);\n        return ()=>{\n            input.removeEventListener('invalid', onInvalid);\n            input.removeEventListener('change', onChange);\n            form?.removeEventListener('reset', onReset);\n            if (form) // @ts-ignore\n            form.reset = reset;\n        };\n    }, [\n        ref,\n        validationBehavior\n    ]);\n}\nfunction $860f7da480e22816$var$getValidity(input) {\n    // The native ValidityState object is live, meaning each property is a getter that returns the current state.\n    // We need to create a snapshot of the validity state at the time this function is called to avoid unpredictable React renders.\n    let validity = input.validity;\n    return {\n        badInput: validity.badInput,\n        customError: validity.customError,\n        patternMismatch: validity.patternMismatch,\n        rangeOverflow: validity.rangeOverflow,\n        rangeUnderflow: validity.rangeUnderflow,\n        stepMismatch: validity.stepMismatch,\n        tooLong: validity.tooLong,\n        tooShort: validity.tooShort,\n        typeMismatch: validity.typeMismatch,\n        valueMissing: validity.valueMissing,\n        valid: validity.valid\n    };\n}\nfunction $860f7da480e22816$var$getNativeValidity(input) {\n    return {\n        isInvalid: !input.validity.valid,\n        validationDetails: $860f7da480e22816$var$getValidity(input),\n        validationErrors: input.validationMessage ? [\n            input.validationMessage\n        ] : []\n    };\n}\nfunction $860f7da480e22816$var$getFirstInvalidInput(form) {\n    for(let i = 0; i < form.elements.length; i++){\n        let element = form.elements[i];\n        if (element.validity?.valid === false) return element;\n    }\n    return null;\n}\n\n\nexport {$860f7da480e22816$export$b8473d3665f3a75a as useFormValidation};\n//# sourceMappingURL=useFormValidation.mjs.map\n","import {useId as $390e54f620492c70$export$f680877a34711e37} from \"./useId.mjs\";\nimport {useLayoutEffect as $c4867b2f328c2698$export$e5c5a5f917a5871c} from \"./useLayoutEffect.mjs\";\nimport {useState as $hga0N$useState, useRef as $hga0N$useRef, useCallback as $hga0N$useCallback} from \"react\";\n\n/*\n * Copyright 2026 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nfunction $4c14b02d5228be26$export$9d4c57ee4c6ffdd8(initialState = true) {\n    // Initial state is typically based on the parent having an aria-label or aria-labelledby.\n    // If it does, this value should be false so that we don't update the state and cause a rerender when we go through the layoutEffect\n    let [hasSlot, setHasSlot] = (0, $hga0N$useState)(initialState);\n    let hasRun = (0, $hga0N$useRef)(false);\n    // A callback ref which will run when the slotted element mounts.\n    // This should happen before the useLayoutEffect below.\n    let ref = (0, $hga0N$useCallback)((el)=>{\n        hasRun.current = true;\n        setHasSlot(!!el);\n    }, []);\n    // If the callback hasn't been called, then reset to false.\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        if (!hasRun.current) setHasSlot(false);\n    }, []);\n    return [\n        ref,\n        hasSlot\n    ];\n}\nfunction $4c14b02d5228be26$export$ed2feabec4a533f4(initialState = true) {\n    let id = (0, $390e54f620492c70$export$f680877a34711e37)();\n    let [ref, hasSlot] = $4c14b02d5228be26$export$9d4c57ee4c6ffdd8(initialState);\n    return {\n        id: hasSlot ? id : undefined,\n        ref: ref\n    };\n}\n\n\nexport {$4c14b02d5228be26$export$9d4c57ee4c6ffdd8 as useSlot, $4c14b02d5228be26$export$ed2feabec4a533f4 as useSlotId2};\n//# sourceMappingURL=useSlot.mjs.map\n","import {useControlledState as $3e6197669829fe11$export$40bfa8c7b0832715} from \"../utils/useControlledState.mjs\";\nimport {useState as $dAajM$useState} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $fd3c5e01e837dc20$export$8042c6c013fd5226(props = {}) {\n    let { isReadOnly: isReadOnly } = props;\n    // have to provide an empty function so useControlledState doesn't throw a fit\n    // can't use useControlledState's prop calling because we need the event object from the change\n    let [isSelected, setSelected] = (0, $3e6197669829fe11$export$40bfa8c7b0832715)(props.isSelected, props.defaultSelected || false, props.onChange);\n    let [initialValue] = (0, $dAajM$useState)(isSelected);\n    function updateSelected(value) {\n        if (!isReadOnly) setSelected(value);\n    }\n    function toggleState() {\n        if (!isReadOnly) setSelected(!isSelected);\n    }\n    return {\n        isSelected: isSelected,\n        defaultSelected: props.defaultSelected ?? initialValue,\n        setSelected: updateSelected,\n        toggle: toggleState\n    };\n}\n\n\nexport {$fd3c5e01e837dc20$export$8042c6c013fd5226 as useToggleState};\n//# sourceMappingURL=useToggleState.mjs.map\n","import {dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415, useRenderProps as $7230ffa83bc0c2cf$export$4d86445c2cf5e3} from \"./utils.mjs\";\nimport {useHover as $1mD4M$useHover} from \"react-aria/useHover\";\nimport {mergeProps as $1mD4M$mergeProps} from \"react-aria/mergeProps\";\nimport $1mD4M$react, {createContext as $1mD4M$createContext, forwardRef as $1mD4M$forwardRef} from \"react\";\nimport {useFocusRing as $1mD4M$useFocusRing} from \"react-aria/useFocusRing\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nconst $3a442827418ebe87$export$f9c6924e160136d1 = /*#__PURE__*/ (0, $1mD4M$createContext)({});\nconst $3a442827418ebe87$export$eb2fcfdbd7ba97d4 = /*#__PURE__*/ (0, $1mD4M$forwardRef)(function Group(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $3a442827418ebe87$export$f9c6924e160136d1);\n    let { isDisabled: isDisabled, isInvalid: isInvalid, isReadOnly: isReadOnly, onHoverStart: onHoverStart, onHoverChange: onHoverChange, onHoverEnd: onHoverEnd, ...otherProps } = props;\n    isDisabled ??= !!props['aria-disabled'] && props['aria-disabled'] !== 'false';\n    isInvalid ??= !!props['aria-invalid'] && props['aria-invalid'] !== 'false';\n    let { hoverProps: hoverProps, isHovered: isHovered } = (0, $1mD4M$useHover)({\n        onHoverStart: onHoverStart,\n        onHoverChange: onHoverChange,\n        onHoverEnd: onHoverEnd,\n        isDisabled: isDisabled\n    });\n    let { isFocused: isFocused, isFocusVisible: isFocusVisible, focusProps: focusProps } = (0, $1mD4M$useFocusRing)({\n        within: true\n    });\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        values: {\n            isHovered: isHovered,\n            isFocusWithin: isFocused,\n            isFocusVisible: isFocusVisible,\n            isDisabled: isDisabled,\n            isInvalid: isInvalid\n        },\n        defaultClassName: 'react-aria-Group'\n    });\n    return /*#__PURE__*/ (0, $1mD4M$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...(0, $1mD4M$mergeProps)(otherProps, focusProps, hoverProps),\n        ...renderProps,\n        ref: ref,\n        role: props.role ?? 'group',\n        slot: props.slot ?? undefined,\n        \"data-focus-within\": isFocused || undefined,\n        \"data-hovered\": isHovered || undefined,\n        \"data-focus-visible\": isFocusVisible || undefined,\n        \"data-disabled\": isDisabled || undefined,\n        \"data-invalid\": isInvalid || undefined,\n        \"data-readonly\": isReadOnly || undefined\n    }, renderProps.children);\n});\n\n\nexport {$3a442827418ebe87$export$f9c6924e160136d1 as GroupContext, $3a442827418ebe87$export$eb2fcfdbd7ba97d4 as Group};\n//# sourceMappingURL=Group.mjs.map\n","import {dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415, useRenderProps as $7230ffa83bc0c2cf$export$4d86445c2cf5e3} from \"./utils.mjs\";\nimport {createHideableComponent as $1aA6s$createHideableComponent} from \"react-aria/private/collections/Hidden\";\nimport {mergeProps as $1aA6s$mergeProps} from \"react-aria/mergeProps\";\nimport $1aA6s$react, {createContext as $1aA6s$createContext} from \"react\";\nimport {useFocusRing as $1aA6s$useFocusRing} from \"react-aria/useFocusRing\";\nimport {useHover as $1aA6s$useHover} from \"react-aria/useHover\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\nconst $41fb335299a4a39e$export$37fb8590cf2c088c = /*#__PURE__*/ (0, $1aA6s$createContext)({});\nlet $41fb335299a4a39e$var$filterHoverProps = (props)=>{\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    let { onHoverStart: onHoverStart, onHoverChange: onHoverChange, onHoverEnd: onHoverEnd, ...otherProps } = props;\n    return otherProps;\n};\nconst $41fb335299a4a39e$export$f5b8910cec6cf069 = /*#__PURE__*/ (0, $1aA6s$createHideableComponent)(function Input(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $41fb335299a4a39e$export$37fb8590cf2c088c);\n    let { hoverProps: hoverProps, isHovered: isHovered } = (0, $1aA6s$useHover)({\n        ...props,\n        isDisabled: props.disabled\n    });\n    let { isFocused: isFocused, isFocusVisible: isFocusVisible, focusProps: focusProps } = (0, $1aA6s$useFocusRing)({\n        isTextInput: true,\n        autoFocus: props.autoFocus\n    });\n    let isInvalid = !!props['aria-invalid'] && props['aria-invalid'] !== 'false';\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        values: {\n            isHovered: isHovered,\n            isFocused: isFocused,\n            isFocusVisible: isFocusVisible,\n            isDisabled: props.disabled || false,\n            isInvalid: isInvalid\n        },\n        defaultClassName: 'react-aria-Input'\n    });\n    return /*#__PURE__*/ (0, $1aA6s$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).input, {\n        ...(0, $1aA6s$mergeProps)($41fb335299a4a39e$var$filterHoverProps(props), focusProps, hoverProps),\n        ...renderProps,\n        ref: ref,\n        \"data-focused\": isFocused || undefined,\n        \"data-disabled\": props.disabled || undefined,\n        \"data-hovered\": isHovered || undefined,\n        \"data-focus-visible\": isFocusVisible || undefined,\n        \"data-invalid\": isInvalid || undefined\n    });\n});\n\n\nexport {$41fb335299a4a39e$export$37fb8590cf2c088c as InputContext, $41fb335299a4a39e$export$f5b8910cec6cf069 as Input};\n//# sourceMappingURL=Input.mjs.map\n","import {filterDOMProps as $8e9d2fae0ecb9001$export$457c3d6518dd4c6f} from \"../utils/filterDOMProps.mjs\";\nimport {getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {useField as $191c9b6d48a0a4e2$export$294aa081a6c6f55d} from \"../label/useField.mjs\";\nimport {useFocusable as $d1116acdf220c2da$export$4c014de7c8940b4c} from \"../interactions/useFocusable.mjs\";\nimport {useFormReset as $3274bf1495747a7b$export$5add1d006293d136} from \"../utils/useFormReset.mjs\";\nimport {useFormValidation as $860f7da480e22816$export$b8473d3665f3a75a} from \"../form/useFormValidation.mjs\";\nimport $70eGi$react, {useState as $70eGi$useState} from \"react\";\nimport {useControlledState as $70eGi$useControlledState} from \"react-stately/useControlledState\";\nimport {useFormValidationState as $70eGi$useFormValidationState} from \"react-stately/private/form/useFormValidationState\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\nfunction $054f71d2330da2e3$export$712718f7aec83d5(props, ref) {\n    let { inputElementType: inputElementType = 'input', isDisabled: isDisabled = false, isRequired: isRequired = false, isReadOnly: isReadOnly = false, type: type = 'text', validationBehavior: validationBehavior = 'aria' } = props;\n    let [value, setValue] = (0, $70eGi$useControlledState)(props.value, props.defaultValue || '', props.onChange);\n    let { focusableProps: focusableProps } = (0, $d1116acdf220c2da$export$4c014de7c8940b4c)(props, ref);\n    let validationState = (0, $70eGi$useFormValidationState)({\n        ...props,\n        value: value\n    });\n    let { isInvalid: isInvalid, validationErrors: validationErrors, validationDetails: validationDetails } = validationState.displayValidation;\n    let { labelProps: labelProps, fieldProps: fieldProps, descriptionProps: descriptionProps, errorMessageProps: errorMessageProps } = (0, $191c9b6d48a0a4e2$export$294aa081a6c6f55d)({\n        ...props,\n        isInvalid: isInvalid,\n        errorMessage: props.errorMessage || validationErrors\n    });\n    let domProps = (0, $8e9d2fae0ecb9001$export$457c3d6518dd4c6f)(props, {\n        labelable: true\n    });\n    const inputOnlyProps = {\n        type: type,\n        pattern: props.pattern\n    };\n    let [initialValue] = (0, $70eGi$useState)(value);\n    (0, $3274bf1495747a7b$export$5add1d006293d136)(ref, props.defaultValue ?? initialValue, setValue);\n    (0, $860f7da480e22816$export$b8473d3665f3a75a)(props, validationState, ref);\n    return {\n        labelProps: labelProps,\n        inputProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(domProps, inputElementType === 'input' ? inputOnlyProps : undefined, {\n            disabled: isDisabled,\n            readOnly: isReadOnly,\n            required: isRequired && validationBehavior === 'native',\n            'aria-required': isRequired && validationBehavior === 'aria' || undefined,\n            'aria-invalid': isInvalid || undefined,\n            'aria-errormessage': props['aria-errormessage'],\n            'aria-activedescendant': props['aria-activedescendant'],\n            'aria-autocomplete': props['aria-autocomplete'],\n            'aria-haspopup': props['aria-haspopup'],\n            'aria-controls': props['aria-controls'],\n            value: value,\n            onChange: (e)=>setValue((0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e).value),\n            autoComplete: props.autoComplete,\n            autoCapitalize: props.autoCapitalize,\n            maxLength: props.maxLength,\n            minLength: props.minLength,\n            name: props.name,\n            form: props.form,\n            placeholder: props.placeholder,\n            inputMode: props.inputMode,\n            autoCorrect: props.autoCorrect,\n            spellCheck: props.spellCheck,\n            [parseInt((0, $70eGi$react).version, 10) >= 17 ? 'enterKeyHint' : 'enterkeyhint']: props.enterKeyHint,\n            // Clipboard events\n            onCopy: props.onCopy,\n            onCut: props.onCut,\n            onPaste: props.onPaste,\n            // Composition events\n            onCompositionEnd: props.onCompositionEnd,\n            onCompositionStart: props.onCompositionStart,\n            onCompositionUpdate: props.onCompositionUpdate,\n            // Selection events\n            onSelect: props.onSelect,\n            // Input events\n            onBeforeInput: props.onBeforeInput,\n            onInput: props.onInput,\n            ...focusableProps,\n            ...fieldProps\n        }),\n        descriptionProps: descriptionProps,\n        errorMessageProps: errorMessageProps,\n        isInvalid: isInvalid,\n        validationErrors: validationErrors,\n        validationDetails: validationDetails\n    };\n}\n\n\nexport {$054f71d2330da2e3$export$712718f7aec83d5 as useTextField};\n//# sourceMappingURL=useTextField.mjs.map\n","var $df59f74ff621f180$exports = {};\n$df59f74ff621f180$exports = {\n    \"Empty\": `Empty`\n};\n\n\nexport {$df59f74ff621f180$exports as default};\n//# sourceMappingURL=en-US.mjs.map\n","import $lhGmr$intlspinbuttonarAEmjs from \"../intl/spinbutton/ar-AE.mjs\";\nimport $lhGmr$intlspinbuttonbgBGmjs from \"../intl/spinbutton/bg-BG.mjs\";\nimport $lhGmr$intlspinbuttoncsCZmjs from \"../intl/spinbutton/cs-CZ.mjs\";\nimport $lhGmr$intlspinbuttondaDKmjs from \"../intl/spinbutton/da-DK.mjs\";\nimport $lhGmr$intlspinbuttondeDEmjs from \"../intl/spinbutton/de-DE.mjs\";\nimport $lhGmr$intlspinbuttonelGRmjs from \"../intl/spinbutton/el-GR.mjs\";\nimport $lhGmr$intlspinbuttonenUSmjs from \"../intl/spinbutton/en-US.mjs\";\nimport $lhGmr$intlspinbuttonesESmjs from \"../intl/spinbutton/es-ES.mjs\";\nimport $lhGmr$intlspinbuttonetEEmjs from \"../intl/spinbutton/et-EE.mjs\";\nimport $lhGmr$intlspinbuttonfiFImjs from \"../intl/spinbutton/fi-FI.mjs\";\nimport $lhGmr$intlspinbuttonfrFRmjs from \"../intl/spinbutton/fr-FR.mjs\";\nimport $lhGmr$intlspinbuttonheILmjs from \"../intl/spinbutton/he-IL.mjs\";\nimport $lhGmr$intlspinbuttonhrHRmjs from \"../intl/spinbutton/hr-HR.mjs\";\nimport $lhGmr$intlspinbuttonhuHUmjs from \"../intl/spinbutton/hu-HU.mjs\";\nimport $lhGmr$intlspinbuttonitITmjs from \"../intl/spinbutton/it-IT.mjs\";\nimport $lhGmr$intlspinbuttonjaJPmjs from \"../intl/spinbutton/ja-JP.mjs\";\nimport $lhGmr$intlspinbuttonkoKRmjs from \"../intl/spinbutton/ko-KR.mjs\";\nimport $lhGmr$intlspinbuttonltLTmjs from \"../intl/spinbutton/lt-LT.mjs\";\nimport $lhGmr$intlspinbuttonlvLVmjs from \"../intl/spinbutton/lv-LV.mjs\";\nimport $lhGmr$intlspinbuttonnbNOmjs from \"../intl/spinbutton/nb-NO.mjs\";\nimport $lhGmr$intlspinbuttonnlNLmjs from \"../intl/spinbutton/nl-NL.mjs\";\nimport $lhGmr$intlspinbuttonplPLmjs from \"../intl/spinbutton/pl-PL.mjs\";\nimport $lhGmr$intlspinbuttonptBRmjs from \"../intl/spinbutton/pt-BR.mjs\";\nimport $lhGmr$intlspinbuttonptPTmjs from \"../intl/spinbutton/pt-PT.mjs\";\nimport $lhGmr$intlspinbuttonroROmjs from \"../intl/spinbutton/ro-RO.mjs\";\nimport $lhGmr$intlspinbuttonruRUmjs from \"../intl/spinbutton/ru-RU.mjs\";\nimport $lhGmr$intlspinbuttonskSKmjs from \"../intl/spinbutton/sk-SK.mjs\";\nimport $lhGmr$intlspinbuttonslSImjs from \"../intl/spinbutton/sl-SI.mjs\";\nimport $lhGmr$intlspinbuttonsrSPmjs from \"../intl/spinbutton/sr-SP.mjs\";\nimport $lhGmr$intlspinbuttonsvSEmjs from \"../intl/spinbutton/sv-SE.mjs\";\nimport $lhGmr$intlspinbuttontrTRmjs from \"../intl/spinbutton/tr-TR.mjs\";\nimport $lhGmr$intlspinbuttonukUAmjs from \"../intl/spinbutton/uk-UA.mjs\";\nimport $lhGmr$intlspinbuttonzhCNmjs from \"../intl/spinbutton/zh-CN.mjs\";\nimport $lhGmr$intlspinbuttonzhTWmjs from \"../intl/spinbutton/zh-TW.mjs\";\n\nvar $6279e3628ec747df$exports = {};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$6279e3628ec747df$exports = {\n    \"ar-AE\": $lhGmr$intlspinbuttonarAEmjs,\n    \"bg-BG\": $lhGmr$intlspinbuttonbgBGmjs,\n    \"cs-CZ\": $lhGmr$intlspinbuttoncsCZmjs,\n    \"da-DK\": $lhGmr$intlspinbuttondaDKmjs,\n    \"de-DE\": $lhGmr$intlspinbuttondeDEmjs,\n    \"el-GR\": $lhGmr$intlspinbuttonelGRmjs,\n    \"en-US\": $lhGmr$intlspinbuttonenUSmjs,\n    \"es-ES\": $lhGmr$intlspinbuttonesESmjs,\n    \"et-EE\": $lhGmr$intlspinbuttonetEEmjs,\n    \"fi-FI\": $lhGmr$intlspinbuttonfiFImjs,\n    \"fr-FR\": $lhGmr$intlspinbuttonfrFRmjs,\n    \"he-IL\": $lhGmr$intlspinbuttonheILmjs,\n    \"hr-HR\": $lhGmr$intlspinbuttonhrHRmjs,\n    \"hu-HU\": $lhGmr$intlspinbuttonhuHUmjs,\n    \"it-IT\": $lhGmr$intlspinbuttonitITmjs,\n    \"ja-JP\": $lhGmr$intlspinbuttonjaJPmjs,\n    \"ko-KR\": $lhGmr$intlspinbuttonkoKRmjs,\n    \"lt-LT\": $lhGmr$intlspinbuttonltLTmjs,\n    \"lv-LV\": $lhGmr$intlspinbuttonlvLVmjs,\n    \"nb-NO\": $lhGmr$intlspinbuttonnbNOmjs,\n    \"nl-NL\": $lhGmr$intlspinbuttonnlNLmjs,\n    \"pl-PL\": $lhGmr$intlspinbuttonplPLmjs,\n    \"pt-BR\": $lhGmr$intlspinbuttonptBRmjs,\n    \"pt-PT\": $lhGmr$intlspinbuttonptPTmjs,\n    \"ro-RO\": $lhGmr$intlspinbuttonroROmjs,\n    \"ru-RU\": $lhGmr$intlspinbuttonruRUmjs,\n    \"sk-SK\": $lhGmr$intlspinbuttonskSKmjs,\n    \"sl-SI\": $lhGmr$intlspinbuttonslSImjs,\n    \"sr-SP\": $lhGmr$intlspinbuttonsrSPmjs,\n    \"sv-SE\": $lhGmr$intlspinbuttonsvSEmjs,\n    \"tr-TR\": $lhGmr$intlspinbuttontrTRmjs,\n    \"uk-UA\": $lhGmr$intlspinbuttonukUAmjs,\n    \"zh-CN\": $lhGmr$intlspinbuttonzhCNmjs,\n    \"zh-TW\": $lhGmr$intlspinbuttonzhTWmjs\n};\n\n\nexport {$6279e3628ec747df$exports as default};\n//# sourceMappingURL=intlStrings.mjs.map\n","import {announce as $a46cf152bb926da5$export$a9b970dcc4ae71a9, clearAnnouncer as $a46cf152bb926da5$export$d10ae4f68404609a} from \"../live-announcer/LiveAnnouncer.mjs\";\nimport $bBWcS$intlStringsmjs from \"./intlStrings.mjs\";\nimport {useEffectEvent as $fe16bffc7a557bf0$export$7f54fc3180508a52} from \"../utils/useEffectEvent.mjs\";\nimport {useGlobalListeners as $48a7d519b337145d$export$4eaf04e54aa8eed6} from \"../utils/useGlobalListeners.mjs\";\nimport {useKeyboard as $8296dad1a4c5e0dc$export$8f71654801c2f7cd} from \"../interactions/useKeyboard.mjs\";\nimport {useLocalizedStringFormatter as $cf2482eff2eeeec2$export$f12b703ca79dfbb1} from \"../i18n/useLocalizedStringFormatter.mjs\";\nimport {useRef as $bBWcS$useRef, useCallback as $bBWcS$useCallback, useEffect as $bBWcS$useEffect, useState as $bBWcS$useState} from \"react\";\n\n\nfunction $parcel$interopDefault(a) {\n  return a && a.__esModule ? a.default : a;\n}\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\nconst $757ec6630f26125c$var$noop = ()=>{};\nfunction $757ec6630f26125c$export$e908e06f4b8e3402(props) {\n    const _async = (0, $bBWcS$useRef)(undefined);\n    let { value: value, textValue: textValue, minValue: minValue, maxValue: maxValue, isDisabled: isDisabled, isReadOnly: isReadOnly, isRequired: isRequired, onIncrement: onIncrement, onIncrementPage: onIncrementPage, onDecrement: onDecrement, onDecrementPage: onDecrementPage, onDecrementToMin: onDecrementToMin, onIncrementToMax: onIncrementToMax } = props;\n    const stringFormatter = (0, $cf2482eff2eeeec2$export$f12b703ca79dfbb1)((0, ($parcel$interopDefault($bBWcS$intlStringsmjs))), '@react-aria/spinbutton');\n    let isSpinning = (0, $bBWcS$useRef)(false);\n    const clearAsync = (0, $bBWcS$useCallback)(()=>{\n        clearTimeout(_async.current);\n        isSpinning.current = false;\n    }, []);\n    const clearAsyncEvent = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)(()=>{\n        clearAsync();\n    });\n    (0, $bBWcS$useEffect)(()=>{\n        return ()=>clearAsyncEvent();\n    }, []);\n    let { keyboardProps: keyboardProps } = (0, $8296dad1a4c5e0dc$export$8f71654801c2f7cd)({\n        isDisabled: isDisabled || isReadOnly,\n        shortcuts: {\n            PageUp: ()=>{\n                if (onIncrementPage) {\n                    onIncrementPage();\n                    return;\n                }\n                if (onIncrement) {\n                    onIncrement();\n                    return;\n                }\n                return false;\n            },\n            ArrowUp: ()=>{\n                if (onIncrement) {\n                    onIncrement();\n                    return;\n                }\n                return false;\n            },\n            PageDown: ()=>{\n                if (onDecrementPage) {\n                    onDecrementPage();\n                    return;\n                }\n                if (onDecrement) {\n                    onDecrement();\n                    return;\n                }\n                return false;\n            },\n            ArrowDown: ()=>{\n                if (onDecrement) {\n                    onDecrement();\n                    return;\n                }\n                return false;\n            },\n            Home: ()=>{\n                if (onDecrementToMin) {\n                    onDecrementToMin();\n                    return;\n                }\n                return false;\n            },\n            End: ()=>{\n                if (onIncrementToMax) {\n                    onIncrementToMax();\n                    return;\n                }\n                return false;\n            }\n        },\n        allowRepeats: true\n    });\n    let isFocused = (0, $bBWcS$useRef)(false);\n    let onFocus = ()=>{\n        isFocused.current = true;\n    };\n    let onBlur = ()=>{\n        isFocused.current = false;\n    };\n    // Replace Unicode hyphen-minus (U+002D) with minus sign (U+2212).\n    // This ensures that macOS VoiceOver announces it as \"minus\" even with other characters between the minus sign\n    // and the number (e.g. currency symbol). Otherwise it announces nothing because it assumes the character is a hyphen.\n    // In addition, replace the empty string with the word \"Empty\" so that iOS VoiceOver does not read \"50%\" for an empty field.\n    let ariaTextValue = textValue === '' ? stringFormatter.format('Empty') : (textValue || `${value}`).replace('-', '\\u2212');\n    (0, $bBWcS$useEffect)(()=>{\n        if (isFocused.current) {\n            (0, $a46cf152bb926da5$export$d10ae4f68404609a)('assertive');\n            (0, $a46cf152bb926da5$export$a9b970dcc4ae71a9)(ariaTextValue, 'assertive');\n        }\n    }, [\n        ariaTextValue\n    ]);\n    // For touch users, if they move their finger like they're scrolling, we don't want to trigger a spin.\n    let onPointerCancel = (0, $bBWcS$useCallback)(()=>{\n        clearAsync();\n    }, [\n        clearAsync\n    ]);\n    const onIncrementEvent = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)(onIncrement ?? $757ec6630f26125c$var$noop);\n    const onDecrementEvent = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)(onDecrement ?? $757ec6630f26125c$var$noop);\n    const stepUpEvent = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)(()=>{\n        if (maxValue === undefined || isNaN(maxValue) || value === undefined || isNaN(value) || value < maxValue) {\n            onIncrementEvent();\n            // oxlint-disable-next-line react/react-compiler\n            onIncrementPressStartEvent(60);\n        }\n    });\n    const onIncrementPressStartEvent = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)((initialStepDelay)=>{\n        clearAsyncEvent();\n        isSpinning.current = true;\n        // Start spinning after initial delay\n        _async.current = window.setTimeout(stepUpEvent, initialStepDelay);\n    });\n    const stepDownEvent = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)(()=>{\n        if (minValue === undefined || isNaN(minValue) || value === undefined || isNaN(value) || value > minValue) {\n            onDecrementEvent();\n            // oxlint-disable-next-line react/react-compiler\n            onDecrementPressStartEvent(60);\n        }\n    });\n    const onDecrementPressStartEvent = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)((initialStepDelay)=>{\n        clearAsyncEvent();\n        isSpinning.current = true;\n        // Start spinning after initial delay\n        _async.current = window.setTimeout(stepDownEvent, initialStepDelay);\n    });\n    let cancelContextMenu = (e)=>{\n        e.preventDefault();\n    };\n    let { addGlobalListener: addGlobalListener, removeAllGlobalListeners: removeAllGlobalListeners } = (0, $48a7d519b337145d$export$4eaf04e54aa8eed6)();\n    // Tracks in touch if the press end event was preceded by a press up.\n    // If it wasn't, then we know the finger left the button while still in contact with the screen.\n    // This means that the user is trying to scroll or interact in some way that shouldn't trigger\n    // an increment or decrement.\n    let isUp = (0, $bBWcS$useRef)(false);\n    let [isIncrementPressed, setIsIncrementPressed] = (0, $bBWcS$useState)(null);\n    (0, $bBWcS$useEffect)(()=>{\n        if (isIncrementPressed === 'touch') onIncrementPressStartEvent(600);\n        else if (isIncrementPressed) onIncrementPressStartEvent(400);\n        else if (!isIncrementPressed) clearAsyncEvent();\n    }, [\n        isIncrementPressed\n    ]);\n    let [isDecrementPressed, setIsDecrementPressed] = (0, $bBWcS$useState)(null);\n    (0, $bBWcS$useEffect)(()=>{\n        if (isDecrementPressed === 'touch') onDecrementPressStartEvent(600);\n        else if (isDecrementPressed) onDecrementPressStartEvent(400);\n        else if (!isDecrementPressed) clearAsyncEvent();\n    }, [\n        isDecrementPressed\n    ]);\n    return {\n        spinButtonProps: {\n            role: 'spinbutton',\n            'aria-valuenow': value !== undefined && !isNaN(value) ? value : undefined,\n            'aria-valuetext': ariaTextValue,\n            'aria-valuemin': minValue,\n            'aria-valuemax': maxValue,\n            'aria-disabled': isDisabled || undefined,\n            'aria-readonly': isReadOnly || undefined,\n            'aria-required': isRequired || undefined,\n            ...keyboardProps,\n            onFocus: onFocus,\n            onBlur: onBlur\n        },\n        incrementButtonProps: {\n            onPressStart: (e)=>{\n                clearAsync();\n                if (e.pointerType !== 'touch') {\n                    onIncrement?.();\n                    setIsIncrementPressed('mouse');\n                } else {\n                    addGlobalListener(window, 'pointercancel', onPointerCancel, {\n                        capture: true\n                    });\n                    isUp.current = false;\n                    // For touch users, don't trigger a decrement on press start, we'll wait for the press end to trigger it if\n                    // the control isn't spinning.\n                    setIsIncrementPressed('touch');\n                }\n                addGlobalListener(window, 'contextmenu', cancelContextMenu);\n            },\n            onPressUp: (e)=>{\n                clearAsync();\n                if (e.pointerType === 'touch') isUp.current = true;\n                removeAllGlobalListeners();\n                setIsIncrementPressed(null);\n            },\n            onPressEnd: (e)=>{\n                clearAsync();\n                if (e.pointerType === 'touch') {\n                    if (!isSpinning.current && isUp.current) onIncrement?.();\n                }\n                isUp.current = false;\n                setIsIncrementPressed(null);\n            },\n            onFocus: onFocus,\n            onBlur: onBlur\n        },\n        decrementButtonProps: {\n            onPressStart: (e)=>{\n                clearAsync();\n                if (e.pointerType !== 'touch') {\n                    onDecrement?.();\n                    setIsDecrementPressed('mouse');\n                } else {\n                    addGlobalListener(window, 'pointercancel', onPointerCancel, {\n                        capture: true\n                    });\n                    isUp.current = false;\n                    // For touch users, don't trigger a decrement on press start, we'll wait for the press end to trigger it if\n                    // the control isn't spinning.\n                    setIsDecrementPressed('touch');\n                }\n            },\n            onPressUp: (e)=>{\n                clearAsync();\n                if (e.pointerType === 'touch') isUp.current = true;\n                removeAllGlobalListeners();\n                setIsDecrementPressed(null);\n            },\n            onPressEnd: (e)=>{\n                clearAsync();\n                if (e.pointerType === 'touch') {\n                    if (!isSpinning.current && isUp.current) onDecrement?.();\n                }\n                isUp.current = false;\n                setIsDecrementPressed(null);\n            },\n            onFocus: onFocus,\n            onBlur: onBlur\n        }\n    };\n}\n\n\nexport {$757ec6630f26125c$export$e908e06f4b8e3402 as useSpinButton};\n//# sourceMappingURL=useSpinButton.mjs.map\n","var $8977cb565542571b$exports = {};\n$8977cb565542571b$exports = {\n    \"selectPlaceholder\": `Select an item`,\n    \"tableResizer\": `Resizer`,\n    \"dropzoneLabel\": `DropZone`,\n    \"colorSwatchPicker\": `Color swatches`\n};\n\n\nexport {$8977cb565542571b$exports as default};\n//# sourceMappingURL=en-US.mjs.map\n","import $aQscD$intlarAEmjs from \"./intl/ar-AE.mjs\";\nimport $aQscD$intlbgBGmjs from \"./intl/bg-BG.mjs\";\nimport $aQscD$intlcsCZmjs from \"./intl/cs-CZ.mjs\";\nimport $aQscD$intldaDKmjs from \"./intl/da-DK.mjs\";\nimport $aQscD$intldeDEmjs from \"./intl/de-DE.mjs\";\nimport $aQscD$intlelGRmjs from \"./intl/el-GR.mjs\";\nimport $aQscD$intlenUSmjs from \"./intl/en-US.mjs\";\nimport $aQscD$intlesESmjs from \"./intl/es-ES.mjs\";\nimport $aQscD$intletEEmjs from \"./intl/et-EE.mjs\";\nimport $aQscD$intlfiFImjs from \"./intl/fi-FI.mjs\";\nimport $aQscD$intlfrFRmjs from \"./intl/fr-FR.mjs\";\nimport $aQscD$intlheILmjs from \"./intl/he-IL.mjs\";\nimport $aQscD$intlhrHRmjs from \"./intl/hr-HR.mjs\";\nimport $aQscD$intlhuHUmjs from \"./intl/hu-HU.mjs\";\nimport $aQscD$intlitITmjs from \"./intl/it-IT.mjs\";\nimport $aQscD$intljaJPmjs from \"./intl/ja-JP.mjs\";\nimport $aQscD$intlkoKRmjs from \"./intl/ko-KR.mjs\";\nimport $aQscD$intlltLTmjs from \"./intl/lt-LT.mjs\";\nimport $aQscD$intllvLVmjs from \"./intl/lv-LV.mjs\";\nimport $aQscD$intlnbNOmjs from \"./intl/nb-NO.mjs\";\nimport $aQscD$intlnlNLmjs from \"./intl/nl-NL.mjs\";\nimport $aQscD$intlplPLmjs from \"./intl/pl-PL.mjs\";\nimport $aQscD$intlptBRmjs from \"./intl/pt-BR.mjs\";\nimport $aQscD$intlptPTmjs from \"./intl/pt-PT.mjs\";\nimport $aQscD$intlroROmjs from \"./intl/ro-RO.mjs\";\nimport $aQscD$intlruRUmjs from \"./intl/ru-RU.mjs\";\nimport $aQscD$intlskSKmjs from \"./intl/sk-SK.mjs\";\nimport $aQscD$intlslSImjs from \"./intl/sl-SI.mjs\";\nimport $aQscD$intlsrSPmjs from \"./intl/sr-SP.mjs\";\nimport $aQscD$intlsvSEmjs from \"./intl/sv-SE.mjs\";\nimport $aQscD$intltrTRmjs from \"./intl/tr-TR.mjs\";\nimport $aQscD$intlukUAmjs from \"./intl/uk-UA.mjs\";\nimport $aQscD$intlzhCNmjs from \"./intl/zh-CN.mjs\";\nimport $aQscD$intlzhTWmjs from \"./intl/zh-TW.mjs\";\n\nvar $aa5f63badbfee5df$exports = {};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$aa5f63badbfee5df$exports = {\n    \"ar-AE\": $aQscD$intlarAEmjs,\n    \"bg-BG\": $aQscD$intlbgBGmjs,\n    \"cs-CZ\": $aQscD$intlcsCZmjs,\n    \"da-DK\": $aQscD$intldaDKmjs,\n    \"de-DE\": $aQscD$intldeDEmjs,\n    \"el-GR\": $aQscD$intlelGRmjs,\n    \"en-US\": $aQscD$intlenUSmjs,\n    \"es-ES\": $aQscD$intlesESmjs,\n    \"et-EE\": $aQscD$intletEEmjs,\n    \"fi-FI\": $aQscD$intlfiFImjs,\n    \"fr-FR\": $aQscD$intlfrFRmjs,\n    \"he-IL\": $aQscD$intlheILmjs,\n    \"hr-HR\": $aQscD$intlhrHRmjs,\n    \"hu-HU\": $aQscD$intlhuHUmjs,\n    \"it-IT\": $aQscD$intlitITmjs,\n    \"ja-JP\": $aQscD$intljaJPmjs,\n    \"ko-KR\": $aQscD$intlkoKRmjs,\n    \"lt-LT\": $aQscD$intlltLTmjs,\n    \"lv-LV\": $aQscD$intllvLVmjs,\n    \"nb-NO\": $aQscD$intlnbNOmjs,\n    \"nl-NL\": $aQscD$intlnlNLmjs,\n    \"pl-PL\": $aQscD$intlplPLmjs,\n    \"pt-BR\": $aQscD$intlptBRmjs,\n    \"pt-PT\": $aQscD$intlptPTmjs,\n    \"ro-RO\": $aQscD$intlroROmjs,\n    \"ru-RU\": $aQscD$intlruRUmjs,\n    \"sk-SK\": $aQscD$intlskSKmjs,\n    \"sl-SI\": $aQscD$intlslSImjs,\n    \"sr-SP\": $aQscD$intlsrSPmjs,\n    \"sv-SE\": $aQscD$intlsvSEmjs,\n    \"tr-TR\": $aQscD$intltrTRmjs,\n    \"uk-UA\": $aQscD$intlukUAmjs,\n    \"zh-CN\": $aQscD$intlzhCNmjs,\n    \"zh-TW\": $aQscD$intlzhTWmjs\n};\n\n\nexport {$aa5f63badbfee5df$exports as default};\n//# sourceMappingURL=intlStrings.mjs.map\n","import $k30rM$react, {createContext as $k30rM$createContext, forwardRef as $k30rM$forwardRef, useContext as $k30rM$useContext, useCallback as $k30rM$useCallback, useMemo as $k30rM$useMemo} from \"react\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $f9554a667e4f0374$export$d188a835a7bc5783 = /*#__PURE__*/ (0, $k30rM$createContext)({});\nconst $f9554a667e4f0374$export$f55761759794cf55 = /*#__PURE__*/ (0, $k30rM$createContext)(null);\nconst $f9554a667e4f0374$export$62ed72bc21f6b8a6 = /*#__PURE__*/ (0, $k30rM$forwardRef)(function DropIndicator(props, ref) {\n    let { render: render } = (0, $k30rM$useContext)($f9554a667e4f0374$export$f55761759794cf55);\n    return /*#__PURE__*/ (0, $k30rM$react).createElement((0, $k30rM$react).Fragment, null, render(props, ref));\n});\nfunction $f9554a667e4f0374$export$971707d8a129a1f7(dragAndDropHooks, dropState) {\n    let renderDropIndicator = dragAndDropHooks?.renderDropIndicator;\n    let isVirtualDragging = dragAndDropHooks?.isVirtualDragging?.();\n    let fn = (0, $k30rM$useCallback)((target)=>{\n        // Only show drop indicators when virtual dragging or this is the current drop target.\n        // oxlint-disable-next-line react/react-compiler\n        if (isVirtualDragging || dropState?.isDropTarget(target)) return renderDropIndicator ? renderDropIndicator(target) : /*#__PURE__*/ (0, $k30rM$react).createElement($f9554a667e4f0374$export$62ed72bc21f6b8a6, {\n            target: target\n        });\n    }, // We invalidate whenever the target changes.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [\n        dropState?.target,\n        isVirtualDragging,\n        renderDropIndicator\n    ]);\n    return dragAndDropHooks?.useDropIndicator ? fn : undefined;\n}\nfunction $f9554a667e4f0374$export$d1e8e3fbb7461f6(selectionManager, dragAndDropHooks, dropState) {\n    // Persist the focused key and the drop target key.\n    let focusedKey = selectionManager.focusedKey;\n    let dropTargetKey = null;\n    if (dragAndDropHooks?.isVirtualDragging?.() && dropState?.target?.type === 'item') {\n        dropTargetKey = dropState.target.key;\n        if (dropState.target.dropPosition === 'after') {\n            // Normalize to the \"before\" drop position since we only render those to the DOM.\n            let nextKey = dropState.collection.getKeyAfter(dropTargetKey);\n            let lastDescendantKey = null;\n            if (nextKey != null) {\n                let targetLevel = dropState.collection.getItem(dropTargetKey)?.level ?? 0;\n                // Skip over any rows that are descendants of the target (\"after\" position should be after all children)\n                while(nextKey != null){\n                    let node = dropState.collection.getItem(nextKey);\n                    // eslint-disable-next-line max-depth\n                    if (!node) break;\n                    // Skip over non-item nodes (e.g., loaders) since they can't be drop targets.\n                    // eslint-disable-next-line max-depth\n                    if (node.type !== 'item') {\n                        nextKey = dropState.collection.getKeyAfter(nextKey);\n                        continue;\n                    }\n                    // Stop once we find an item at the same level or higher\n                    // eslint-disable-next-line max-depth\n                    if ((node.level ?? 0) <= targetLevel) break;\n                    lastDescendantKey = nextKey;\n                    nextKey = dropState.collection.getKeyAfter(nextKey);\n                }\n            }\n            // If nextKey is null (end of collection), use the last descendant\n            dropTargetKey = nextKey ?? lastDescendantKey ?? dropTargetKey;\n        }\n    }\n    return (0, $k30rM$useMemo)(()=>{\n        return new Set([\n            focusedKey,\n            dropTargetKey\n        ].filter((k)=>k != null));\n    }, [\n        focusedKey,\n        dropTargetKey\n    ]);\n}\n\n\nexport {$f9554a667e4f0374$export$d188a835a7bc5783 as DragAndDropContext, $f9554a667e4f0374$export$f55761759794cf55 as DropIndicatorContext, $f9554a667e4f0374$export$62ed72bc21f6b8a6 as DropIndicator, $f9554a667e4f0374$export$971707d8a129a1f7 as useRenderDropIndicator, $f9554a667e4f0374$export$d1e8e3fbb7461f6 as useDndPersistedKeys};\n//# sourceMappingURL=DragAndDrop.mjs.map\n","import {dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415} from \"./utils.mjs\";\nimport {createLeafComponent as $gfOZh$createLeafComponent} from \"react-aria/CollectionBuilder\";\nimport {HeaderNode as $gfOZh$HeaderNode} from \"react-aria/private/collections/BaseCollection\";\nimport $gfOZh$react, {createContext as $gfOZh$createContext} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nconst $53e61d82d8b8611d$export$e0e4026c12a8bdbb = /*#__PURE__*/ (0, $gfOZh$createContext)({});\nconst $53e61d82d8b8611d$export$8b251419efc915eb = /*#__PURE__*/ (0, $gfOZh$createLeafComponent)((0, $gfOZh$HeaderNode), function Header(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $53e61d82d8b8611d$export$e0e4026c12a8bdbb);\n    return /*#__PURE__*/ (0, $gfOZh$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).header, {\n        className: \"react-aria-Header\",\n        ...props,\n        ref: ref\n    }, props.children);\n});\n\n\nexport {$53e61d82d8b8611d$export$e0e4026c12a8bdbb as HeaderContext, $53e61d82d8b8611d$export$8b251419efc915eb as Header};\n//# sourceMappingURL=Header.mjs.map\n","import {dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, useRenderProps as $7230ffa83bc0c2cf$export$4d86445c2cf5e3} from \"./utils.mjs\";\nimport {flushSync as $3Lq00$flushSync} from \"react-dom\";\nimport $3Lq00$react, {createContext as $3Lq00$createContext, useRef as $3Lq00$useRef, forwardRef as $3Lq00$forwardRef, useState as $3Lq00$useState, useContext as $3Lq00$useContext} from \"react\";\nimport {useLayoutEffect as $3Lq00$useLayoutEffect} from \"react-aria/private/utils/useLayoutEffect\";\nimport {useObjectRef as $3Lq00$useObjectRef} from \"react-aria/useObjectRef\";\n\n/*\n * Copyright 2025 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nconst $792f28e438b9ad5f$var$SharedElementContext = /*#__PURE__*/ (0, $3Lq00$createContext)(null);\nfunction $792f28e438b9ad5f$export$758399f318e6385a(props) {\n    let ref = (0, $3Lq00$useRef)({});\n    return /*#__PURE__*/ (0, $3Lq00$react).createElement($792f28e438b9ad5f$var$SharedElementContext.Provider, {\n        value: ref\n    }, props.children);\n}\nconst $792f28e438b9ad5f$export$c34620ff8881d89f = /*#__PURE__*/ (0, $3Lq00$forwardRef)(function SharedElement(props, ref) {\n    let { name: name, isVisible: isVisible = true, children: children, className: className, style: style, render: render, ...divProps } = props;\n    let [state, setState] = (0, $3Lq00$useState)(isVisible ? 'visible' : 'hidden');\n    let scopeRef = (0, $3Lq00$useContext)($792f28e438b9ad5f$var$SharedElementContext);\n    if (!scopeRef) throw new Error('<SharedElement> must be rendered inside a <SharedElementTransition>');\n    if (isVisible && state === 'hidden') setState('visible');\n    ref = (0, $3Lq00$useObjectRef)(ref);\n    (0, $3Lq00$useLayoutEffect)(()=>{\n        let element = ref.current;\n        let scope = scopeRef.current;\n        let prevSnapshot = scope[name];\n        let frame = null;\n        if (element && isVisible && prevSnapshot) {\n            // Element is transitioning from a previous instance.\n            setState('visible');\n            let animations = element.getAnimations();\n            // Set properties to animate from.\n            let values = prevSnapshot.style.map(([property, prevValue])=>{\n                let value = element.style[property];\n                if (property === 'translate') {\n                    let prevRect = prevSnapshot.rect;\n                    let currentItem = element.getBoundingClientRect();\n                    let deltaX = prevRect.left - currentItem?.left;\n                    let deltaY = prevRect.top - currentItem?.top;\n                    element.style.translate = `${deltaX}px ${deltaY}px`;\n                } else element.style[property] = prevValue;\n                return [\n                    property,\n                    value\n                ];\n            });\n            // Cancel any new animations triggered by these properties.\n            for (let a of element.getAnimations())if (!animations.includes(a)) a.cancel();\n            // Remove overrides after one frame to animate to the current values.\n            frame = requestAnimationFrame(()=>{\n                frame = null;\n                for (let [property, value] of values)element.style[property] = value;\n            });\n            delete scope[name];\n        } else if (element && isVisible && !prevSnapshot) {\n            // No previous instance exists, apply the entering state.\n            queueMicrotask(()=>(0, $3Lq00$flushSync)(()=>setState('entering')));\n            frame = requestAnimationFrame(()=>{\n                frame = null;\n                setState('visible');\n            });\n        } else if (element && !isVisible) // Wait until layout effects finish, and check if a snapshot still exists.\n        // If so, no new SharedElement consumed it, so enter the exiting state.\n        queueMicrotask(()=>{\n            if (scope[name]) {\n                delete scope[name];\n                (0, $3Lq00$flushSync)(()=>setState('exiting'));\n                Promise.all(element.getAnimations().map((a)=>a.finished)).then(()=>setState('hidden')).catch(()=>{});\n            } else // Snapshot was consumed by another instance, unmount.\n            setState('hidden');\n        });\n        return ()=>{\n            if (frame != null) cancelAnimationFrame(frame);\n            if (element && element.isConnected && !element.hasAttribute('data-exiting')) {\n                // On unmount, store a snapshot of the rectangle and computed style for transitioning properties.\n                let style = window.getComputedStyle(element);\n                if (style.transitionProperty !== 'none') {\n                    let transitionProperty = style.transitionProperty.split(/\\s*,\\s*/);\n                    scope[name] = {\n                        rect: element.getBoundingClientRect(),\n                        style: transitionProperty.map((p)=>[\n                                p,\n                                style[p]\n                            ])\n                    };\n                }\n            }\n        };\n    }, [\n        ref,\n        scopeRef,\n        name,\n        isVisible\n    ]);\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        children: children,\n        className: className,\n        style: style,\n        render: render,\n        values: {\n            isEntering: state === 'entering',\n            isExiting: state === 'exiting'\n        }\n    });\n    if (state === 'hidden') return null;\n    return /*#__PURE__*/ (0, $3Lq00$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...divProps,\n        ...renderProps,\n        ref: ref,\n        \"data-entering\": state === 'entering' || undefined,\n        \"data-exiting\": state === 'exiting' || undefined\n    });\n});\n\n\nexport {$792f28e438b9ad5f$export$758399f318e6385a as SharedElementTransition, $792f28e438b9ad5f$export$c34620ff8881d89f as SharedElement};\n//# sourceMappingURL=SharedElementTransition.mjs.map\n","import {useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415} from \"./utils.mjs\";\nimport {SharedElement as $792f28e438b9ad5f$export$c34620ff8881d89f} from \"./SharedElementTransition.mjs\";\nimport $31sgV$react, {createContext as $31sgV$createContext, forwardRef as $31sgV$forwardRef} from \"react\";\n\n/*\n * Copyright 2025 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $91fe5e721c7f36c1$export$c9549807523555e0 = /*#__PURE__*/ (0, $31sgV$createContext)({\n    isSelected: false\n});\nconst $91fe5e721c7f36c1$export$17f80983afe4e444 = /*#__PURE__*/ (0, $31sgV$forwardRef)(function SelectionIndicator(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $91fe5e721c7f36c1$export$c9549807523555e0);\n    let { isSelected: isSelected, ...otherProps } = props;\n    return /*#__PURE__*/ (0, $31sgV$react).createElement((0, $792f28e438b9ad5f$export$c34620ff8881d89f), {\n        ...otherProps,\n        ref: ref,\n        className: props.className || 'react-aria-SelectionIndicator',\n        name: \"SelectionIndicator\",\n        isVisible: isSelected\n    });\n});\n\n\nexport {$91fe5e721c7f36c1$export$c9549807523555e0 as SelectionIndicatorContext, $91fe5e721c7f36c1$export$17f80983afe4e444 as SelectionIndicator};\n//# sourceMappingURL=SelectionIndicator.mjs.map\n","import {dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415} from \"./utils.mjs\";\nimport {useSeparator as $adn6H$useSeparator} from \"react-aria/useSeparator\";\nimport {CollectionNode as $adn6H$CollectionNode} from \"react-aria/private/collections/BaseCollection\";\nimport {createLeafComponent as $adn6H$createLeafComponent} from \"react-aria/CollectionBuilder\";\nimport {filterDOMProps as $adn6H$filterDOMProps} from \"react-aria/filterDOMProps\";\nimport {mergeProps as $adn6H$mergeProps} from \"react-aria/mergeProps\";\nimport $adn6H$react, {createContext as $adn6H$createContext} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\nconst $e28ab3efe3e87743$export$6615d83f6de245ce = /*#__PURE__*/ (0, $adn6H$createContext)({});\nclass $e28ab3efe3e87743$export$7750289ca694c0b5 extends (0, $adn6H$CollectionNode) {\n    static{\n        this.type = 'separator';\n    }\n    filter(collection, newCollection) {\n        let prevItem = newCollection.getItem(this.prevKey);\n        if (prevItem && prevItem.type !== 'separator') {\n            let clone = this.clone();\n            newCollection.addDescendants(clone, collection);\n            return clone;\n        }\n        return null;\n    }\n}\nconst $e28ab3efe3e87743$export$1ff3c3f08ae963c0 = /*#__PURE__*/ (0, $adn6H$createLeafComponent)($e28ab3efe3e87743$export$7750289ca694c0b5, function Separator(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $e28ab3efe3e87743$export$6615d83f6de245ce);\n    let { elementType: elementType, orientation: orientation, style: style, className: className, slot: slot, ...otherProps } = props;\n    let Element = elementType || 'hr';\n    if (Element === 'hr' && orientation === 'vertical') Element = 'div';\n    let ElementType = (0, $7230ffa83bc0c2cf$export$df3a06d6289f983e)[Element];\n    let { separatorProps: separatorProps } = (0, $adn6H$useSeparator)({\n        ...otherProps,\n        elementType: elementType,\n        orientation: orientation\n    });\n    let DOMProps = (0, $adn6H$filterDOMProps)(props, {\n        global: true\n    });\n    return /*#__PURE__*/ (0, $adn6H$react).createElement(ElementType, {\n        render: props.render,\n        ...(0, $adn6H$mergeProps)(DOMProps, separatorProps),\n        style: style,\n        className: className ?? 'react-aria-Separator',\n        ref: ref,\n        slot: slot || undefined\n    });\n});\n\n\nexport {$e28ab3efe3e87743$export$6615d83f6de245ce as SeparatorContext, $e28ab3efe3e87743$export$7750289ca694c0b5 as SeparatorNode, $e28ab3efe3e87743$export$1ff3c3f08ae963c0 as Separator};\n//# sourceMappingURL=Separator.mjs.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ const $cd088b5c0d7b27b4$export$3585ede4d035bf14 = new WeakMap();\nfunction $cd088b5c0d7b27b4$var$normalizeKey(key) {\n    if (typeof key === 'string') return key.replace(/\\s*/g, '');\n    return '' + key;\n}\nfunction $cd088b5c0d7b27b4$export$9145995848b05025(state, itemKey) {\n    let data = $cd088b5c0d7b27b4$export$3585ede4d035bf14.get(state);\n    if (!data) throw new Error('Unknown list');\n    return `${data.id}-option-${$cd088b5c0d7b27b4$var$normalizeKey(itemKey)}`;\n}\n\n\nexport {$cd088b5c0d7b27b4$export$3585ede4d035bf14 as listData, $cd088b5c0d7b27b4$export$9145995848b05025 as getItemId};\n//# sourceMappingURL=utils.mjs.map\n","import {nodeContains as $23f2114a1b82827e$export$4282f70798064fe0} from \"./DOMFunctions.mjs\";\nimport {shadowDOM as $kGVXB$shadowDOM} from \"react-stately/private/flags/flags\";\n\n// https://github.com/microsoft/tabster/blob/a89fc5d7e332d48f68d03b1ca6e344489d1c3898/src/Shadowdomize/ShadowTreeWalker.ts\n\n\nclass $654b97e09f2a30c1$export$63eb3ababa9c55c4 {\n    constructor(doc, root, whatToShow, filter){\n        this._walkerStack = [];\n        this._currentSetFor = new Set();\n        this._acceptNode = (node)=>{\n            if (node.nodeType === Node.ELEMENT_NODE) {\n                const shadowRoot = node.shadowRoot;\n                if (shadowRoot) {\n                    const walker = this._doc.createTreeWalker(shadowRoot, this.whatToShow, {\n                        acceptNode: this._acceptNode\n                    });\n                    this._walkerStack.unshift(walker);\n                    return NodeFilter.FILTER_ACCEPT;\n                } else {\n                    if (typeof this.filter === 'function') return this.filter(node);\n                    else if (this.filter?.acceptNode) return this.filter.acceptNode(node);\n                    else if (this.filter === null) return NodeFilter.FILTER_ACCEPT;\n                }\n            }\n            return NodeFilter.FILTER_SKIP;\n        };\n        this._doc = doc;\n        this.root = root;\n        this.filter = filter ?? null;\n        this.whatToShow = whatToShow ?? NodeFilter.SHOW_ALL;\n        this._currentNode = root;\n        this._walkerStack.unshift(doc.createTreeWalker(root, whatToShow, this._acceptNode));\n        const shadowRoot = root.shadowRoot;\n        if (shadowRoot) {\n            const walker = this._doc.createTreeWalker(shadowRoot, this.whatToShow, {\n                acceptNode: this._acceptNode\n            });\n            this._walkerStack.unshift(walker);\n        }\n    }\n    get currentNode() {\n        return this._currentNode;\n    }\n    set currentNode(node) {\n        if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(this.root, node)) throw new Error('Cannot set currentNode to a node that is not contained by the root node.');\n        const walkers = [];\n        let curNode = node;\n        let currentWalkerCurrentNode = node;\n        this._currentNode = node;\n        while(curNode && curNode !== this.root)if (curNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n            const shadowRoot = curNode;\n            const walker = this._doc.createTreeWalker(shadowRoot, this.whatToShow, {\n                acceptNode: this._acceptNode\n            });\n            walkers.push(walker);\n            walker.currentNode = currentWalkerCurrentNode;\n            this._currentSetFor.add(walker);\n            curNode = currentWalkerCurrentNode = shadowRoot.host;\n        } else curNode = curNode.parentNode;\n        const walker = this._doc.createTreeWalker(this.root, this.whatToShow, {\n            acceptNode: this._acceptNode\n        });\n        walkers.push(walker);\n        walker.currentNode = currentWalkerCurrentNode;\n        this._currentSetFor.add(walker);\n        this._walkerStack = walkers;\n    }\n    get doc() {\n        return this._doc;\n    }\n    firstChild() {\n        let currentNode = this.currentNode;\n        let newNode = this.nextNode();\n        if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(currentNode, newNode)) {\n            this.currentNode = currentNode;\n            return null;\n        }\n        if (newNode) this.currentNode = newNode;\n        return newNode;\n    }\n    lastChild() {\n        let walker = this._walkerStack[0];\n        let newNode = walker.lastChild();\n        if (newNode) this.currentNode = newNode;\n        return newNode;\n    }\n    nextNode() {\n        const nextNode = this._walkerStack[0].nextNode();\n        if (nextNode) {\n            const shadowRoot = nextNode.shadowRoot;\n            if (shadowRoot) {\n                let nodeResult;\n                if (typeof this.filter === 'function') nodeResult = this.filter(nextNode);\n                else if (this.filter?.acceptNode) nodeResult = this.filter.acceptNode(nextNode);\n                if (nodeResult === NodeFilter.FILTER_ACCEPT) {\n                    this.currentNode = nextNode;\n                    return nextNode;\n                }\n                // _acceptNode should have added new walker for this shadow,\n                // go in recursively.\n                let newNode = this.nextNode();\n                if (newNode) this.currentNode = newNode;\n                return newNode;\n            }\n            if (nextNode) this.currentNode = nextNode;\n            return nextNode;\n        } else {\n            if (this._walkerStack.length > 1) {\n                this._walkerStack.shift();\n                let newNode = this.nextNode();\n                if (newNode) this.currentNode = newNode;\n                return newNode;\n            } else return null;\n        }\n    }\n    previousNode() {\n        const currentWalker = this._walkerStack[0];\n        if (currentWalker.currentNode === currentWalker.root) {\n            if (this._currentSetFor.has(currentWalker)) {\n                this._currentSetFor.delete(currentWalker);\n                if (this._walkerStack.length > 1) {\n                    this._walkerStack.shift();\n                    let newNode = this.previousNode();\n                    if (newNode) this.currentNode = newNode;\n                    return newNode;\n                } else return null;\n            }\n            return null;\n        }\n        const previousNode = currentWalker.previousNode();\n        if (previousNode) {\n            const shadowRoot = previousNode.shadowRoot;\n            if (shadowRoot) {\n                let nodeResult;\n                if (typeof this.filter === 'function') nodeResult = this.filter(previousNode);\n                else if (this.filter?.acceptNode) nodeResult = this.filter.acceptNode(previousNode);\n                if (nodeResult === NodeFilter.FILTER_ACCEPT) {\n                    if (previousNode) this.currentNode = previousNode;\n                    return previousNode;\n                }\n                // _acceptNode should have added new walker for this shadow,\n                // go in recursively.\n                let newNode = this.lastChild();\n                if (newNode) this.currentNode = newNode;\n                return newNode;\n            }\n            if (previousNode) this.currentNode = previousNode;\n            return previousNode;\n        } else {\n            if (this._walkerStack.length > 1) {\n                this._walkerStack.shift();\n                let newNode = this.previousNode();\n                if (newNode) this.currentNode = newNode;\n                return newNode;\n            } else return null;\n        }\n    }\n    /**\n   * @deprecated\n   */ nextSibling() {\n        // if (__DEV__) {\n        //     throw new Error(\"Method not implemented.\");\n        // }\n        return null;\n    }\n    /**\n   * @deprecated\n   */ previousSibling() {\n        // if (__DEV__) {\n        //     throw new Error(\"Method not implemented.\");\n        // }\n        return null;\n    }\n    /**\n   * @deprecated\n   */ parentNode() {\n        // if (__DEV__) {\n        //     throw new Error(\"Method not implemented.\");\n        // }\n        return null;\n    }\n}\nfunction $654b97e09f2a30c1$export$4d0f8be8b12a7ef6(doc, root, whatToShow, filter) {\n    if ((0, $kGVXB$shadowDOM)()) return new $654b97e09f2a30c1$export$63eb3ababa9c55c4(doc, root, whatToShow, filter);\n    return doc.createTreeWalker(root, whatToShow, filter);\n}\n\n\nexport {$654b97e09f2a30c1$export$63eb3ababa9c55c4 as ShadowTreeWalker, $654b97e09f2a30c1$export$4d0f8be8b12a7ef6 as createShadowTreeWalker};\n//# sourceMappingURL=ShadowTreeWalker.mjs.map\n","import {createShadowTreeWalker as $654b97e09f2a30c1$export$4d0f8be8b12a7ef6} from \"../utils/shadowdom/ShadowTreeWalker.mjs\";\nimport {focusSafely as $f192c2f16961cbe0$export$80f3e147d781571c} from \"../interactions/focusSafely.mjs\";\nimport {getActiveElement as $23f2114a1b82827e$export$cd4e5573fbe2b576, getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29, nodeContains as $23f2114a1b82827e$export$4282f70798064fe0} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {getInteractionModality as $8f5a2122b0992be3$export$630ff653c5ada6a9} from \"../interactions/useFocusVisible.mjs\";\nimport {getOwnerDocument as $d447af545b77c9f1$export$b204af158042fbac, getOwnerWindow as $d447af545b77c9f1$export$f21a1ffae260145a} from \"../utils/domHelpers.mjs\";\nimport {isAndroid as $2add3ce32c6007eb$export$a11b0059900ceec8, isChrome as $2add3ce32c6007eb$export$6446a186d09e379e} from \"../utils/platform.mjs\";\nimport {isFocusable as $3b8b240c1bf84ab9$export$4c063cf1350e6fed, isTabbable as $3b8b240c1bf84ab9$export$bebd5a1431fec25d} from \"../utils/isFocusable.mjs\";\nimport {useLayoutEffect as $c4867b2f328c2698$export$e5c5a5f917a5871c} from \"../utils/useLayoutEffect.mjs\";\nimport $jmfRy$react, {useRef as $jmfRy$useRef, useContext as $jmfRy$useContext, useMemo as $jmfRy$useMemo, useEffect as $jmfRy$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\nconst $535772f9d2c1f38d$var$FocusContext = /*#__PURE__*/ (0, $jmfRy$react).createContext(null);\nconst $535772f9d2c1f38d$var$RESTORE_FOCUS_EVENT = 'react-aria-focus-scope-restore';\nlet $535772f9d2c1f38d$var$activeScope = null;\nfunction $535772f9d2c1f38d$export$20e40289641fbbb6(props) {\n    let { children: children, contain: contain, restoreFocus: restoreFocus, autoFocus: autoFocus } = props;\n    let startRef = (0, $jmfRy$useRef)(null);\n    let endRef = (0, $jmfRy$useRef)(null);\n    let scopeRef = (0, $jmfRy$useRef)([]);\n    let { parentNode: parentNode } = (0, $jmfRy$useContext)($535772f9d2c1f38d$var$FocusContext) || {};\n    // Create a tree node here so we can add children to it even before it is added to the tree.\n    let node = (0, $jmfRy$useMemo)(()=>new $535772f9d2c1f38d$var$TreeNode({\n            scopeRef: scopeRef\n        }), [\n        scopeRef\n    ]);\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        // If a new scope mounts outside the active scope, (e.g. DialogContainer launched from a menu),\n        // use the active scope as the parent instead of the parent from context. Layout effects run bottom\n        // up, so if the parent is not yet added to the tree, don't do this. Only the outer-most FocusScope\n        // that is being added should get the activeScope as its parent.\n        let parent = parentNode || $535772f9d2c1f38d$export$d06fae2ee68b101e.root;\n        if ($535772f9d2c1f38d$export$d06fae2ee68b101e.getTreeNode(parent.scopeRef) && $535772f9d2c1f38d$var$activeScope && !$535772f9d2c1f38d$var$isAncestorScope($535772f9d2c1f38d$var$activeScope, parent.scopeRef)) {\n            let activeNode = $535772f9d2c1f38d$export$d06fae2ee68b101e.getTreeNode($535772f9d2c1f38d$var$activeScope);\n            if (activeNode) parent = activeNode;\n        }\n        // Add the node to the parent, and to the tree.\n        parent.addChild(node);\n        $535772f9d2c1f38d$export$d06fae2ee68b101e.addNode(node);\n    }, [\n        node,\n        parentNode\n    ]);\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        let node = $535772f9d2c1f38d$export$d06fae2ee68b101e.getTreeNode(scopeRef);\n        if (node) node.contain = !!contain;\n    }, [\n        contain\n    ]);\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        // Find all rendered nodes between the sentinels and add them to the scope.\n        let node = startRef.current?.nextSibling;\n        let nodes = [];\n        let stopPropagation = (e)=>e.stopPropagation();\n        while(node && node !== endRef.current){\n            nodes.push(node);\n            // Stop custom restore focus event from propagating to parent focus scopes.\n            node.addEventListener($535772f9d2c1f38d$var$RESTORE_FOCUS_EVENT, stopPropagation);\n            node = node.nextSibling;\n        }\n        scopeRef.current = nodes;\n        return ()=>{\n            for (let node of nodes)node.removeEventListener($535772f9d2c1f38d$var$RESTORE_FOCUS_EVENT, stopPropagation);\n        };\n    }, [\n        children\n    ]);\n    $535772f9d2c1f38d$var$useActiveScopeTracker(scopeRef, restoreFocus, contain);\n    $535772f9d2c1f38d$var$useFocusContainment(scopeRef, contain);\n    $535772f9d2c1f38d$var$useRestoreFocus(scopeRef, restoreFocus, contain);\n    $535772f9d2c1f38d$var$useAutoFocus(scopeRef, autoFocus);\n    // This needs to be an effect so that activeScope is updated after the FocusScope tree is complete.\n    // It cannot be a useLayoutEffect because the parent of this node hasn't been attached in the tree yet.\n    (0, $jmfRy$useEffect)(()=>{\n        const activeElement = (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)((0, $d447af545b77c9f1$export$b204af158042fbac)(scopeRef.current ? scopeRef.current[0] : undefined));\n        let scope = null;\n        if ($535772f9d2c1f38d$var$isElementInScope(activeElement, scopeRef.current)) {\n            // We need to traverse the focusScope tree and find the bottom most scope that\n            // contains the active element and set that as the activeScope.\n            for (let node of $535772f9d2c1f38d$export$d06fae2ee68b101e.traverse())if (node.scopeRef && $535772f9d2c1f38d$var$isElementInScope(activeElement, node.scopeRef.current)) scope = node;\n            if (scope === $535772f9d2c1f38d$export$d06fae2ee68b101e.getTreeNode(scopeRef)) $535772f9d2c1f38d$var$activeScope = scope.scopeRef;\n        }\n    }, [\n        scopeRef\n    ]);\n    // This layout effect cleanup is so that the tree node is removed synchronously with react before the RAF\n    // in useRestoreFocus cleanup runs.\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        return ()=>{\n            // Scope may have been re-parented.\n            let parentScope = $535772f9d2c1f38d$export$d06fae2ee68b101e.getTreeNode(scopeRef)?.parent?.scopeRef ?? null;\n            if ((scopeRef === $535772f9d2c1f38d$var$activeScope || $535772f9d2c1f38d$var$isAncestorScope(scopeRef, $535772f9d2c1f38d$var$activeScope)) && (!parentScope || $535772f9d2c1f38d$export$d06fae2ee68b101e.getTreeNode(parentScope))) $535772f9d2c1f38d$var$activeScope = parentScope;\n            $535772f9d2c1f38d$export$d06fae2ee68b101e.removeTreeNode(scopeRef);\n        };\n    }, [\n        scopeRef\n    ]);\n    // oxlint-disable-next-line react/react-compiler\n    let focusManager = (0, $jmfRy$useMemo)(()=>$535772f9d2c1f38d$var$createFocusManagerForScope(scopeRef), []);\n    let value = (0, $jmfRy$useMemo)(()=>({\n            focusManager: focusManager,\n            parentNode: node\n        }), [\n        node,\n        focusManager\n    ]);\n    return /*#__PURE__*/ (0, $jmfRy$react).createElement($535772f9d2c1f38d$var$FocusContext.Provider, {\n        value: value\n    }, /*#__PURE__*/ (0, $jmfRy$react).createElement(\"span\", {\n        \"data-focus-scope-start\": true,\n        hidden: true,\n        ref: startRef\n    }), children, /*#__PURE__*/ (0, $jmfRy$react).createElement(\"span\", {\n        \"data-focus-scope-end\": true,\n        hidden: true,\n        ref: endRef\n    }));\n}\nfunction $535772f9d2c1f38d$export$10c5169755ce7bd7() {\n    return (0, $jmfRy$useContext)($535772f9d2c1f38d$var$FocusContext)?.focusManager;\n}\nfunction $535772f9d2c1f38d$var$createFocusManagerForScope(scopeRef) {\n    return {\n        focusNext (opts = {}) {\n            let scope = scopeRef.current;\n            let { from: from, tabbable: tabbable, wrap: wrap, accept: accept } = opts;\n            let node = from || (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)((0, $d447af545b77c9f1$export$b204af158042fbac)(scope[0] ?? undefined));\n            let sentinel = scope[0].previousElementSibling;\n            let scopeRoot = $535772f9d2c1f38d$var$getScopeRoot(scope);\n            let walker = $535772f9d2c1f38d$export$2d6ec8fc375ceafa(scopeRoot, {\n                tabbable: tabbable,\n                accept: accept\n            }, scope);\n            walker.currentNode = $535772f9d2c1f38d$var$isElementInScope(node, scope) ? node : sentinel;\n            let nextNode = walker.nextNode();\n            if (!nextNode && wrap) {\n                walker.currentNode = sentinel;\n                nextNode = walker.nextNode();\n            }\n            if (nextNode) $535772f9d2c1f38d$var$focusElement(nextNode, true);\n            return nextNode;\n        },\n        focusPrevious (opts = {}) {\n            let scope = scopeRef.current;\n            let { from: from, tabbable: tabbable, wrap: wrap, accept: accept } = opts;\n            let node = from || (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)((0, $d447af545b77c9f1$export$b204af158042fbac)(scope[0] ?? undefined));\n            let sentinel = scope[scope.length - 1].nextElementSibling;\n            let scopeRoot = $535772f9d2c1f38d$var$getScopeRoot(scope);\n            let walker = $535772f9d2c1f38d$export$2d6ec8fc375ceafa(scopeRoot, {\n                tabbable: tabbable,\n                accept: accept\n            }, scope);\n            walker.currentNode = $535772f9d2c1f38d$var$isElementInScope(node, scope) ? node : sentinel;\n            let previousNode = walker.previousNode();\n            if (!previousNode && wrap) {\n                walker.currentNode = sentinel;\n                previousNode = walker.previousNode();\n            }\n            if (previousNode) $535772f9d2c1f38d$var$focusElement(previousNode, true);\n            return previousNode;\n        },\n        focusFirst (opts = {}) {\n            let scope = scopeRef.current;\n            let { tabbable: tabbable, accept: accept } = opts;\n            let scopeRoot = $535772f9d2c1f38d$var$getScopeRoot(scope);\n            let walker = $535772f9d2c1f38d$export$2d6ec8fc375ceafa(scopeRoot, {\n                tabbable: tabbable,\n                accept: accept\n            }, scope);\n            walker.currentNode = scope[0].previousElementSibling;\n            let nextNode = walker.nextNode();\n            if (nextNode) $535772f9d2c1f38d$var$focusElement(nextNode, true);\n            return nextNode;\n        },\n        focusLast (opts = {}) {\n            let scope = scopeRef.current;\n            let { tabbable: tabbable, accept: accept } = opts;\n            let scopeRoot = $535772f9d2c1f38d$var$getScopeRoot(scope);\n            let walker = $535772f9d2c1f38d$export$2d6ec8fc375ceafa(scopeRoot, {\n                tabbable: tabbable,\n                accept: accept\n            }, scope);\n            walker.currentNode = scope[scope.length - 1].nextElementSibling;\n            let previousNode = walker.previousNode();\n            if (previousNode) $535772f9d2c1f38d$var$focusElement(previousNode, true);\n            return previousNode;\n        }\n    };\n}\nfunction $535772f9d2c1f38d$var$getScopeRoot(scope) {\n    return scope[0].parentElement;\n}\nfunction $535772f9d2c1f38d$var$shouldContainFocus(scopeRef) {\n    let scope = $535772f9d2c1f38d$export$d06fae2ee68b101e.getTreeNode($535772f9d2c1f38d$var$activeScope);\n    while(scope && scope.scopeRef !== scopeRef){\n        if (scope.contain) return false;\n        scope = scope.parent;\n    }\n    return true;\n}\nfunction $535772f9d2c1f38d$var$getRadiosInGroup(element) {\n    if (!element.form) // Radio buttons outside a form - query the document\n    return Array.from((0, $d447af545b77c9f1$export$b204af158042fbac)(element).querySelectorAll(`input[type=\"radio\"][name=\"${CSS.escape(element.name)}\"]`)).filter((radio)=>!radio.form);\n    // namedItem returns RadioNodeList (iterable) for 2+ elements, but a single Element for exactly 1.\n    // https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormControlsCollection/namedItem\n    const radioList = element.form.elements.namedItem(element.name);\n    let ownerWindow = (0, $d447af545b77c9f1$export$f21a1ffae260145a)(element);\n    if (radioList instanceof ownerWindow.RadioNodeList) return Array.from(radioList).filter((el)=>el instanceof ownerWindow.HTMLInputElement);\n    if (radioList instanceof ownerWindow.HTMLInputElement) return [\n        radioList\n    ];\n    return [];\n}\nfunction $535772f9d2c1f38d$var$isTabbableRadio(element) {\n    if (element.checked) return true;\n    const radios = $535772f9d2c1f38d$var$getRadiosInGroup(element);\n    return radios.length > 0 && !radios.some((radio)=>radio.checked);\n}\nfunction $535772f9d2c1f38d$var$useFocusContainment(scopeRef, contain) {\n    let focusedNode = (0, $jmfRy$useRef)(undefined);\n    let raf = (0, $jmfRy$useRef)(undefined);\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        let scope = scopeRef.current;\n        if (!contain) {\n            // if contain was changed, then we should cancel any ongoing waits to pull focus back into containment\n            if (raf.current) {\n                cancelAnimationFrame(raf.current);\n                raf.current = undefined;\n            }\n            return;\n        }\n        const ownerDocument = (0, $d447af545b77c9f1$export$b204af158042fbac)(scope ? scope[0] : undefined);\n        // Handle the Tab key to contain focus within the scope\n        let onKeyDown = (e)=>{\n            if (e.key !== 'Tab' || e.altKey || e.ctrlKey || e.metaKey || !$535772f9d2c1f38d$var$shouldContainFocus(scopeRef) || e.isComposing) return;\n            let focusedElement = (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)(ownerDocument);\n            let scope = scopeRef.current;\n            if (!scope || !$535772f9d2c1f38d$var$isElementInScope(focusedElement, scope)) return;\n            let scopeRoot = $535772f9d2c1f38d$var$getScopeRoot(scope);\n            let walker = $535772f9d2c1f38d$export$2d6ec8fc375ceafa(scopeRoot, {\n                tabbable: true\n            }, scope);\n            if (!focusedElement) return;\n            walker.currentNode = focusedElement;\n            let nextElement = e.shiftKey ? walker.previousNode() : walker.nextNode();\n            if (!nextElement) {\n                walker.currentNode = e.shiftKey ? scope[scope.length - 1].nextElementSibling : scope[0].previousElementSibling;\n                nextElement = e.shiftKey ? walker.previousNode() : walker.nextNode();\n            }\n            e.preventDefault();\n            if (nextElement) {\n                $535772f9d2c1f38d$var$focusElement(nextElement, true);\n                if (nextElement instanceof (0, $d447af545b77c9f1$export$f21a1ffae260145a)(nextElement).HTMLInputElement) nextElement.select();\n            }\n        };\n        let onFocus = (e)=>{\n            // If focusing an element in a child scope of the currently active scope, the child becomes active.\n            // Moving out of the active scope to an ancestor is not allowed.\n            if ((!$535772f9d2c1f38d$var$activeScope || $535772f9d2c1f38d$var$isAncestorScope($535772f9d2c1f38d$var$activeScope, scopeRef)) && $535772f9d2c1f38d$var$isElementInScope((0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e), scopeRef.current)) {\n                $535772f9d2c1f38d$var$activeScope = scopeRef;\n                focusedNode.current = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n            } else if ($535772f9d2c1f38d$var$shouldContainFocus(scopeRef) && !$535772f9d2c1f38d$var$isElementInChildScope((0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e), scopeRef)) {\n                // If a focus event occurs outside the active scope (e.g. user tabs from browser location bar),\n                // restore focus to the previously focused node or the first tabbable element in the active scope.\n                if (focusedNode.current) $535772f9d2c1f38d$var$focusElement(focusedNode.current);\n                else if ($535772f9d2c1f38d$var$activeScope && $535772f9d2c1f38d$var$activeScope.current) $535772f9d2c1f38d$var$focusFirstInScope($535772f9d2c1f38d$var$activeScope.current);\n            } else if ($535772f9d2c1f38d$var$shouldContainFocus(scopeRef)) focusedNode.current = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n        };\n        let onBlur = (e)=>{\n            // Firefox doesn't shift focus back to the Dialog properly without this\n            if (raf.current) cancelAnimationFrame(raf.current);\n            raf.current = requestAnimationFrame(()=>{\n                // Patches infinite focus coersion loop for Android Talkback where the user isn't able to move the virtual cursor\n                // if within a containing focus scope. Bug filed against Chrome: https://issuetracker.google.com/issues/384844019.\n                // Note that this means focus can leave focus containing modals due to this, but it is isolated to Chrome Talkback.\n                let modality = (0, $8f5a2122b0992be3$export$630ff653c5ada6a9)();\n                let shouldSkipFocusRestore = (modality === 'virtual' || modality === null) && (0, $2add3ce32c6007eb$export$a11b0059900ceec8)() && (0, $2add3ce32c6007eb$export$6446a186d09e379e)();\n                // Use document.activeElement instead of e.relatedTarget so we can tell if user clicked into iframe\n                let activeElement = (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)(ownerDocument);\n                if (!shouldSkipFocusRestore && activeElement && $535772f9d2c1f38d$var$shouldContainFocus(scopeRef) && !$535772f9d2c1f38d$var$isElementInChildScope(activeElement, scopeRef)) {\n                    $535772f9d2c1f38d$var$activeScope = scopeRef;\n                    let target = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n                    if (target && target.isConnected) {\n                        focusedNode.current = target;\n                        $535772f9d2c1f38d$var$focusElement(focusedNode.current);\n                    } else if ($535772f9d2c1f38d$var$activeScope.current) $535772f9d2c1f38d$var$focusFirstInScope($535772f9d2c1f38d$var$activeScope.current);\n                }\n            });\n        };\n        ownerDocument.addEventListener('keydown', onKeyDown, false);\n        ownerDocument.addEventListener('focusin', onFocus, false);\n        scope?.forEach((element)=>element.addEventListener('focusin', onFocus, false));\n        scope?.forEach((element)=>element.addEventListener('focusout', onBlur, false));\n        return ()=>{\n            ownerDocument.removeEventListener('keydown', onKeyDown, false);\n            ownerDocument.removeEventListener('focusin', onFocus, false);\n            scope?.forEach((element)=>element.removeEventListener('focusin', onFocus, false));\n            scope?.forEach((element)=>element.removeEventListener('focusout', onBlur, false));\n        };\n    }, [\n        scopeRef,\n        contain\n    ]);\n    // This is a useLayoutEffect so it is guaranteed to run before our async synthetic blur\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        return ()=>{\n            if (raf.current) cancelAnimationFrame(raf.current);\n        };\n    }, [\n        raf\n    ]);\n}\nfunction $535772f9d2c1f38d$var$isElementInAnyScope(element) {\n    return $535772f9d2c1f38d$var$isElementInChildScope(element);\n}\nfunction $535772f9d2c1f38d$var$isElementInScope(element, scope) {\n    if (!element) return false;\n    if (!scope) return false;\n    return scope.some((node)=>(0, $23f2114a1b82827e$export$4282f70798064fe0)(node, element));\n}\nfunction $535772f9d2c1f38d$var$isElementInChildScope(element, scope = null) {\n    // If the element is within a top layer element (e.g. toasts), always allow moving focus there.\n    if (element instanceof Element && element.closest('[data-react-aria-top-layer]')) return true;\n    // node.contains in isElementInScope covers child scopes that are also DOM children,\n    // but does not cover child scopes in portals.\n    for (let { scopeRef: s } of $535772f9d2c1f38d$export$d06fae2ee68b101e.traverse($535772f9d2c1f38d$export$d06fae2ee68b101e.getTreeNode(scope))){\n        if (s && $535772f9d2c1f38d$var$isElementInScope(element, s.current)) return true;\n    }\n    return false;\n}\nfunction $535772f9d2c1f38d$export$1258395f99bf9cbf(element) {\n    return $535772f9d2c1f38d$var$isElementInChildScope(element, $535772f9d2c1f38d$var$activeScope);\n}\nfunction $535772f9d2c1f38d$var$isAncestorScope(ancestor, scope) {\n    let parent = $535772f9d2c1f38d$export$d06fae2ee68b101e.getTreeNode(scope)?.parent;\n    while(parent){\n        if (parent.scopeRef === ancestor) return true;\n        parent = parent.parent;\n    }\n    return false;\n}\nfunction $535772f9d2c1f38d$var$focusElement(element, scroll = false) {\n    if (element != null && !scroll) try {\n        (0, $f192c2f16961cbe0$export$80f3e147d781571c)(element);\n    } catch  {\n    // ignore\n    }\n    else if (element != null) try {\n        element.focus();\n    } catch  {\n    // ignore\n    }\n}\nfunction $535772f9d2c1f38d$var$getFirstInScope(scope, tabbable = true) {\n    let sentinel = scope[0].previousElementSibling;\n    let scopeRoot = $535772f9d2c1f38d$var$getScopeRoot(scope);\n    let walker = $535772f9d2c1f38d$export$2d6ec8fc375ceafa(scopeRoot, {\n        tabbable: tabbable\n    }, scope);\n    walker.currentNode = sentinel;\n    let nextNode = walker.nextNode();\n    // If the scope does not contain a tabbable element, use the first focusable element.\n    if (tabbable && !nextNode) {\n        scopeRoot = $535772f9d2c1f38d$var$getScopeRoot(scope);\n        walker = $535772f9d2c1f38d$export$2d6ec8fc375ceafa(scopeRoot, {\n            tabbable: false\n        }, scope);\n        walker.currentNode = sentinel;\n        nextNode = walker.nextNode();\n    }\n    // TreeWalker.nextNode() returns null when the scope contains no focusable element.\n    return nextNode;\n}\nfunction $535772f9d2c1f38d$var$focusFirstInScope(scope, tabbable = true) {\n    $535772f9d2c1f38d$var$focusElement($535772f9d2c1f38d$var$getFirstInScope(scope, tabbable));\n}\nfunction $535772f9d2c1f38d$var$useAutoFocus(scopeRef, autoFocus) {\n    const autoFocusRef = (0, $jmfRy$react).useRef(autoFocus);\n    (0, $jmfRy$useEffect)(()=>{\n        if (autoFocusRef.current) {\n            $535772f9d2c1f38d$var$activeScope = scopeRef;\n            const ownerDocument = (0, $d447af545b77c9f1$export$b204af158042fbac)(scopeRef.current ? scopeRef.current[0] : undefined);\n            if (!$535772f9d2c1f38d$var$isElementInScope((0, $23f2114a1b82827e$export$cd4e5573fbe2b576)(ownerDocument), $535772f9d2c1f38d$var$activeScope.current) && scopeRef.current) $535772f9d2c1f38d$var$focusFirstInScope(scopeRef.current);\n        }\n        autoFocusRef.current = false;\n    }, [\n        scopeRef\n    ]);\n}\nfunction $535772f9d2c1f38d$var$useActiveScopeTracker(scopeRef, restore, contain) {\n    // tracks the active scope, in case restore and contain are both false.\n    // if either are true, this is tracked in useRestoreFocus or useFocusContainment.\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        if (restore || contain) return;\n        let scope = scopeRef.current;\n        const ownerDocument = (0, $d447af545b77c9f1$export$b204af158042fbac)(scope ? scope[0] : undefined);\n        let onFocus = (e)=>{\n            let target = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n            if ($535772f9d2c1f38d$var$isElementInScope(target, scopeRef.current)) $535772f9d2c1f38d$var$activeScope = scopeRef;\n            else if (!$535772f9d2c1f38d$var$isElementInAnyScope(target)) $535772f9d2c1f38d$var$activeScope = null;\n        };\n        ownerDocument.addEventListener('focusin', onFocus, false);\n        scope?.forEach((element)=>element.addEventListener('focusin', onFocus, false));\n        return ()=>{\n            ownerDocument.removeEventListener('focusin', onFocus, false);\n            scope?.forEach((element)=>element.removeEventListener('focusin', onFocus, false));\n        };\n    }, [\n        scopeRef,\n        restore,\n        contain\n    ]);\n}\nfunction $535772f9d2c1f38d$var$shouldRestoreFocus(scopeRef) {\n    let scope = $535772f9d2c1f38d$export$d06fae2ee68b101e.getTreeNode($535772f9d2c1f38d$var$activeScope);\n    while(scope && scope.scopeRef !== scopeRef){\n        if (scope.nodeToRestore) return false;\n        scope = scope.parent;\n    }\n    return scope?.scopeRef === scopeRef;\n}\nfunction $535772f9d2c1f38d$var$useRestoreFocus(scopeRef, restoreFocus, contain) {\n    // create a ref during render instead of useLayoutEffect so the active element is saved before a child with autoFocus=true mounts.\n    const nodeToRestoreRef = (0, $jmfRy$useRef)(typeof document !== 'undefined' ? (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)(// oxlint-disable-next-line react/react-compiler\n    (0, $d447af545b77c9f1$export$b204af158042fbac)(scopeRef.current ? scopeRef.current[0] : undefined)) : null);\n    // restoring scopes should all track if they are active regardless of contain, but contain already tracks it plus logic to contain the focus\n    // restoring-non-containing scopes should only care if they become active so they can perform the restore\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        let scope = scopeRef.current;\n        const ownerDocument = (0, $d447af545b77c9f1$export$b204af158042fbac)(scope ? scope[0] : undefined);\n        if (!restoreFocus || contain) return;\n        let onFocus = ()=>{\n            // If focusing an element in a child scope of the currently active scope, the child becomes active.\n            // Moving out of the active scope to an ancestor is not allowed.\n            if ((!$535772f9d2c1f38d$var$activeScope || $535772f9d2c1f38d$var$isAncestorScope($535772f9d2c1f38d$var$activeScope, scopeRef)) && $535772f9d2c1f38d$var$isElementInScope((0, $23f2114a1b82827e$export$cd4e5573fbe2b576)(ownerDocument), scopeRef.current)) $535772f9d2c1f38d$var$activeScope = scopeRef;\n        };\n        ownerDocument.addEventListener('focusin', onFocus, false);\n        scope?.forEach((element)=>element.addEventListener('focusin', onFocus, false));\n        return ()=>{\n            ownerDocument.removeEventListener('focusin', onFocus, false);\n            scope?.forEach((element)=>element.removeEventListener('focusin', onFocus, false));\n        };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [\n        scopeRef,\n        contain\n    ]);\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        const ownerDocument = (0, $d447af545b77c9f1$export$b204af158042fbac)(scopeRef.current ? scopeRef.current[0] : undefined);\n        if (!restoreFocus) return;\n        // Handle the Tab key so that tabbing out of the scope goes to the next element\n        // after the node that had focus when the scope mounted. This is important when\n        // using portals for overlays, so that focus goes to the expected element when\n        // tabbing out of the overlay.\n        let onKeyDown = (e)=>{\n            if (e.key !== 'Tab' || e.altKey || e.ctrlKey || e.metaKey || !$535772f9d2c1f38d$var$shouldContainFocus(scopeRef) || e.isComposing) return;\n            let focusedElement = ownerDocument.activeElement;\n            if (!$535772f9d2c1f38d$var$isElementInChildScope(focusedElement, scopeRef) || !$535772f9d2c1f38d$var$shouldRestoreFocus(scopeRef)) return;\n            let treeNode = $535772f9d2c1f38d$export$d06fae2ee68b101e.getTreeNode(scopeRef);\n            if (!treeNode) return;\n            let nodeToRestore = treeNode.nodeToRestore;\n            // Create a DOM tree walker that matches all tabbable elements\n            let walker = $535772f9d2c1f38d$export$2d6ec8fc375ceafa(ownerDocument.body, {\n                tabbable: true\n            });\n            // Find the next tabbable element after the currently focused element\n            walker.currentNode = focusedElement;\n            let nextElement = e.shiftKey ? walker.previousNode() : walker.nextNode();\n            if (!nodeToRestore || !nodeToRestore.isConnected || nodeToRestore === ownerDocument.body) {\n                nodeToRestore = undefined;\n                treeNode.nodeToRestore = undefined;\n            }\n            // If there is no next element, or it is outside the current scope, move focus to the\n            // next element after the node to restore to instead.\n            if ((!nextElement || !$535772f9d2c1f38d$var$isElementInChildScope(nextElement, scopeRef)) && nodeToRestore) {\n                walker.currentNode = nodeToRestore;\n                // Skip over elements within the scope, in case the scope immediately follows the node to restore.\n                do nextElement = e.shiftKey ? walker.previousNode() : walker.nextNode();\n                while ($535772f9d2c1f38d$var$isElementInChildScope(nextElement, scopeRef));\n                e.preventDefault();\n                e.stopPropagation();\n                if (nextElement) $535772f9d2c1f38d$var$focusElement(nextElement, true);\n                else // If there is no next element and the nodeToRestore isn't within a FocusScope (i.e. we are leaving the top level focus scope)\n                // then move focus to the body.\n                // Otherwise restore focus to the nodeToRestore (e.g menu within a popover -> tabbing to close the menu should move focus to menu trigger)\n                if (!$535772f9d2c1f38d$var$isElementInAnyScope(nodeToRestore)) focusedElement.blur();\n                else $535772f9d2c1f38d$var$focusElement(nodeToRestore, true);\n            }\n        };\n        if (!contain) ownerDocument.addEventListener('keydown', onKeyDown, true);\n        return ()=>{\n            if (!contain) ownerDocument.removeEventListener('keydown', onKeyDown, true);\n        };\n    }, [\n        scopeRef,\n        restoreFocus,\n        contain\n    ]);\n    // useLayoutEffect instead of useEffect so the active element is saved synchronously instead of asynchronously.\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        const ownerDocument = (0, $d447af545b77c9f1$export$b204af158042fbac)(scopeRef.current ? scopeRef.current[0] : undefined);\n        if (!restoreFocus) return;\n        let treeNode = $535772f9d2c1f38d$export$d06fae2ee68b101e.getTreeNode(scopeRef);\n        if (!treeNode) return;\n        treeNode.nodeToRestore = nodeToRestoreRef.current ?? undefined;\n        return ()=>{\n            let treeNode = $535772f9d2c1f38d$export$d06fae2ee68b101e.getTreeNode(scopeRef);\n            if (!treeNode) return;\n            let nodeToRestore = treeNode.nodeToRestore;\n            // if we already lost focus to the body and this was the active scope, then we should attempt to restore\n            let activeElement = (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)(ownerDocument);\n            if (restoreFocus && nodeToRestore && (activeElement && $535772f9d2c1f38d$var$isElementInChildScope(activeElement, scopeRef) || activeElement === ownerDocument.body && $535772f9d2c1f38d$var$shouldRestoreFocus(scopeRef))) {\n                // freeze the focusScopeTree so it persists after the raf, otherwise during unmount nodes are removed from it\n                let clonedTree = $535772f9d2c1f38d$export$d06fae2ee68b101e.clone();\n                requestAnimationFrame(()=>{\n                    // Only restore focus if we've lost focus to the body, the alternative is that focus has been purposefully moved elsewhere\n                    if (ownerDocument.activeElement === ownerDocument.body) {\n                        // look up the tree starting with our scope to find a nodeToRestore still in the DOM\n                        let treeNode = clonedTree.getTreeNode(scopeRef);\n                        while(treeNode){\n                            if (treeNode.nodeToRestore && treeNode.nodeToRestore.isConnected) {\n                                $535772f9d2c1f38d$var$restoreFocusToElement(treeNode.nodeToRestore);\n                                return;\n                            }\n                            treeNode = treeNode.parent;\n                        }\n                        // If no nodeToRestore was found, focus the first element in the nearest\n                        // ancestor scope that is still in the tree.\n                        treeNode = clonedTree.getTreeNode(scopeRef);\n                        while(treeNode){\n                            if (treeNode.scopeRef && // TODO: this is probably a false positive based on naming, it's not a real ref, rename.\n                            // oxlint-disable-next-line react-hooks/exhaustive-deps\n                            treeNode.scopeRef.current && $535772f9d2c1f38d$export$d06fae2ee68b101e.getTreeNode(treeNode.scopeRef)) {\n                                // oxlint-disable-next-line react-hooks/exhaustive-deps\n                                let node = $535772f9d2c1f38d$var$getFirstInScope(treeNode.scopeRef.current, true);\n                                // The scope may have nothing focusable in it, e.g. if its focusable\n                                // content was removed or hidden. Keep walking up in that case.\n                                if (node) {\n                                    $535772f9d2c1f38d$var$restoreFocusToElement(node);\n                                    return;\n                                }\n                            }\n                            treeNode = treeNode.parent;\n                        }\n                    }\n                });\n            }\n        };\n    }, [\n        scopeRef,\n        restoreFocus\n    ]);\n}\nfunction $535772f9d2c1f38d$var$restoreFocusToElement(node) {\n    // Dispatch a custom event that parent elements can intercept to customize focus restoration.\n    // For example, virtualized collection components reuse DOM elements, so the original element\n    // might still exist in the DOM but representing a different item.\n    if (node.dispatchEvent(new CustomEvent($535772f9d2c1f38d$var$RESTORE_FOCUS_EVENT, {\n        bubbles: true,\n        cancelable: true\n    }))) $535772f9d2c1f38d$var$focusElement(node);\n}\nfunction $535772f9d2c1f38d$export$2d6ec8fc375ceafa(root, opts, scope) {\n    let filter = opts?.tabbable ? (0, $3b8b240c1bf84ab9$export$bebd5a1431fec25d) : (0, $3b8b240c1bf84ab9$export$4c063cf1350e6fed);\n    // Ensure that root is an Element or fall back appropriately\n    let rootElement = root?.nodeType === Node.ELEMENT_NODE ? root : null;\n    // Determine the document to use\n    let doc = (0, $d447af545b77c9f1$export$b204af158042fbac)(rootElement);\n    // Create a TreeWalker, ensuring the root is an Element or Document\n    let walker = (0, $654b97e09f2a30c1$export$4d0f8be8b12a7ef6)(doc, root || doc, NodeFilter.SHOW_ELEMENT, {\n        acceptNode (node) {\n            // Skip nodes inside the starting node.\n            if ((0, $23f2114a1b82827e$export$4282f70798064fe0)(opts?.from, node)) return NodeFilter.FILTER_REJECT;\n            if (opts?.tabbable && node.tagName === 'INPUT' && node.getAttribute('type') === 'radio') {\n                // If the radio is in a form, we can get all the other radios by name\n                if (!$535772f9d2c1f38d$var$isTabbableRadio(node)) return NodeFilter.FILTER_REJECT;\n                // If the radio is in the same group as the current node and none are selected, we can skip it\n                if (walker.currentNode.tagName === 'INPUT' && walker.currentNode.type === 'radio' && walker.currentNode.name === node.name) return NodeFilter.FILTER_REJECT;\n            }\n            if (filter(node) && (!scope || $535772f9d2c1f38d$var$isElementInScope(node, scope)) && (!opts?.accept || opts.accept(node))) return NodeFilter.FILTER_ACCEPT;\n            return NodeFilter.FILTER_SKIP;\n        }\n    });\n    if (opts?.from) walker.currentNode = opts.from;\n    return walker;\n}\nfunction $535772f9d2c1f38d$export$c5251b9e124bf29(ref, defaultOptions = {}) {\n    return {\n        focusNext (opts = {}) {\n            let root = ref.current;\n            if (!root) return null;\n            let { from: from, tabbable: tabbable = defaultOptions.tabbable, wrap: wrap = defaultOptions.wrap, accept: accept = defaultOptions.accept } = opts;\n            let node = from || (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)((0, $d447af545b77c9f1$export$b204af158042fbac)(root));\n            let walker = $535772f9d2c1f38d$export$2d6ec8fc375ceafa(root, {\n                tabbable: tabbable,\n                accept: accept\n            });\n            if ((0, $23f2114a1b82827e$export$4282f70798064fe0)(root, node)) walker.currentNode = node;\n            let nextNode = walker.nextNode();\n            if (!nextNode && wrap) {\n                walker.currentNode = root;\n                nextNode = walker.nextNode();\n            }\n            if (nextNode) $535772f9d2c1f38d$var$focusElement(nextNode, true);\n            return nextNode;\n        },\n        focusPrevious (opts = defaultOptions) {\n            let root = ref.current;\n            if (!root) return null;\n            let { from: from, tabbable: tabbable = defaultOptions.tabbable, wrap: wrap = defaultOptions.wrap, accept: accept = defaultOptions.accept } = opts;\n            let node = from || (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)((0, $d447af545b77c9f1$export$b204af158042fbac)(root));\n            let walker = $535772f9d2c1f38d$export$2d6ec8fc375ceafa(root, {\n                tabbable: tabbable,\n                accept: accept\n            });\n            if ((0, $23f2114a1b82827e$export$4282f70798064fe0)(root, node)) walker.currentNode = node;\n            else {\n                let next = $535772f9d2c1f38d$var$last(walker);\n                if (next) $535772f9d2c1f38d$var$focusElement(next, true);\n                return next ?? null;\n            }\n            let previousNode = walker.previousNode();\n            if (!previousNode && wrap) {\n                walker.currentNode = root;\n                let lastNode = $535772f9d2c1f38d$var$last(walker);\n                if (!lastNode) // couldn't wrap\n                return null;\n                previousNode = lastNode;\n            }\n            if (previousNode) $535772f9d2c1f38d$var$focusElement(previousNode, true);\n            return previousNode ?? null;\n        },\n        focusFirst (opts = defaultOptions) {\n            let root = ref.current;\n            if (!root) return null;\n            let { tabbable: tabbable = defaultOptions.tabbable, accept: accept = defaultOptions.accept } = opts;\n            let walker = $535772f9d2c1f38d$export$2d6ec8fc375ceafa(root, {\n                tabbable: tabbable,\n                accept: accept\n            });\n            let nextNode = walker.nextNode();\n            if (nextNode) $535772f9d2c1f38d$var$focusElement(nextNode, true);\n            return nextNode;\n        },\n        focusLast (opts = defaultOptions) {\n            let root = ref.current;\n            if (!root) return null;\n            let { tabbable: tabbable = defaultOptions.tabbable, accept: accept = defaultOptions.accept } = opts;\n            let walker = $535772f9d2c1f38d$export$2d6ec8fc375ceafa(root, {\n                tabbable: tabbable,\n                accept: accept\n            });\n            let next = $535772f9d2c1f38d$var$last(walker);\n            if (next) $535772f9d2c1f38d$var$focusElement(next, true);\n            return next ?? null;\n        }\n    };\n}\nfunction $535772f9d2c1f38d$var$last(walker) {\n    let next = undefined;\n    let last;\n    do {\n        last = walker.lastChild();\n        if (last) next = last;\n    }while (last);\n    return next;\n}\nclass $535772f9d2c1f38d$var$Tree {\n    constructor(){\n        this.fastMap = new Map();\n        this.root = new $535772f9d2c1f38d$var$TreeNode({\n            scopeRef: null\n        });\n        this.fastMap.set(null, this.root);\n    }\n    get size() {\n        return this.fastMap.size;\n    }\n    getTreeNode(data) {\n        return this.fastMap.get(data);\n    }\n    addTreeNode(scopeRef, parent, nodeToRestore) {\n        let parentNode = this.fastMap.get(parent ?? null);\n        if (!parentNode) return;\n        let node = new $535772f9d2c1f38d$var$TreeNode({\n            scopeRef: scopeRef\n        });\n        parentNode.addChild(node);\n        node.parent = parentNode;\n        this.fastMap.set(scopeRef, node);\n        if (nodeToRestore) node.nodeToRestore = nodeToRestore;\n    }\n    addNode(node) {\n        this.fastMap.set(node.scopeRef, node);\n    }\n    removeTreeNode(scopeRef) {\n        // never remove the root\n        if (scopeRef === null) return;\n        let node = this.fastMap.get(scopeRef);\n        if (!node) return;\n        let parentNode = node.parent;\n        // when we remove a scope, check if any sibling scopes are trying to restore focus to something inside the scope we're removing\n        // if we are, then replace the siblings restore with the restore from the scope we're removing\n        for (let current of this.traverse())if (current !== node && node.nodeToRestore && current.nodeToRestore && node.scopeRef && node.scopeRef.current && $535772f9d2c1f38d$var$isElementInScope(current.nodeToRestore, node.scopeRef.current)) current.nodeToRestore = node.nodeToRestore;\n        let children = node.children;\n        if (parentNode) {\n            parentNode.removeChild(node);\n            if (children.size > 0) children.forEach((child)=>parentNode && parentNode.addChild(child));\n        }\n        this.fastMap.delete(node.scopeRef);\n    }\n    // Pre Order Depth First\n    *traverse(node = this.root) {\n        if (node.scopeRef != null) yield node;\n        if (node.children.size > 0) for (let child of node.children)yield* this.traverse(child);\n    }\n    clone() {\n        let newTree = new $535772f9d2c1f38d$var$Tree();\n        for (let node of this.traverse())newTree.addTreeNode(node.scopeRef, node.parent?.scopeRef ?? null, node.nodeToRestore);\n        return newTree;\n    }\n}\nclass $535772f9d2c1f38d$var$TreeNode {\n    constructor(props){\n        this.children = new Set();\n        this.contain = false;\n        this.scopeRef = props.scopeRef;\n    }\n    addChild(node) {\n        this.children.add(node);\n        node.parent = this;\n    }\n    removeChild(node) {\n        this.children.delete(node);\n        node.parent = undefined;\n    }\n}\nlet $535772f9d2c1f38d$export$d06fae2ee68b101e = new $535772f9d2c1f38d$var$Tree();\n\n\nexport {$535772f9d2c1f38d$export$20e40289641fbbb6 as FocusScope, $535772f9d2c1f38d$export$d06fae2ee68b101e as focusScopeTree, $535772f9d2c1f38d$export$10c5169755ce7bd7 as useFocusManager, $535772f9d2c1f38d$export$2d6ec8fc375ceafa as getFocusableTreeWalker, $535772f9d2c1f38d$export$1258395f99bf9cbf as isElementInChildOfActiveScope, $535772f9d2c1f38d$export$c5251b9e124bf29 as createFocusManager};\n//# sourceMappingURL=FocusScope.mjs.map\n","import {isAppleDevice as $2add3ce32c6007eb$export$e1865c3bedcd822b} from \"../utils/platform.mjs\";\nimport {useId as $390e54f620492c70$export$f680877a34711e37} from \"../utils/useId.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $22bbea12c2567021$export$d3e3bd3e26688c04(e) {\n    // Ctrl + Arrow Up/Arrow Down has a system wide meaning on macOS, so use Alt instead.\n    // On Windows and Ubuntu, Alt + Space has a system wide meaning.\n    return (0, $2add3ce32c6007eb$export$e1865c3bedcd822b)() ? e.altKey : e.ctrlKey;\n}\nfunction $22bbea12c2567021$export$c3d8340acf92597f(collectionRef, key) {\n    let selector = `[data-key=\"${CSS.escape(String(key))}\"]`;\n    let collection = collectionRef.current?.dataset.collection;\n    if (collection) selector = `[data-collection=\"${CSS.escape(collection)}\"]${selector}`;\n    return collectionRef.current?.querySelector(selector);\n}\nconst $22bbea12c2567021$var$collectionMap = new WeakMap();\nfunction $22bbea12c2567021$export$881eb0d9f3605d9d(collection) {\n    let id = (0, $390e54f620492c70$export$f680877a34711e37)();\n    $22bbea12c2567021$var$collectionMap.set(collection, id);\n    return id;\n}\nfunction $22bbea12c2567021$export$6aeb1680a0ae8741(collection) {\n    return $22bbea12c2567021$var$collectionMap.get(collection);\n}\n\n\nexport {$22bbea12c2567021$export$d3e3bd3e26688c04 as isNonContiguousSelectionModifier, $22bbea12c2567021$export$c3d8340acf92597f as getItemElement, $22bbea12c2567021$export$881eb0d9f3605d9d as useCollectionId, $22bbea12c2567021$export$6aeb1680a0ae8741 as getCollectionId};\n//# sourceMappingURL=utils.mjs.map\n","import {getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29, nodeContains as $23f2114a1b82827e$export$4282f70798064fe0} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {useRef as $dLAPo$useRef, useEffect as $dLAPo$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n/**\n * Controls how long to wait before clearing the typeahead buffer.\n */ const $f5a4a9a3486154da$var$TYPEAHEAD_DEBOUNCE_WAIT_MS = 1000; // 1 second\nfunction $f5a4a9a3486154da$export$e32c88dfddc6e1d8(options) {\n    let { keyboardDelegate: keyboardDelegate, selectionManager: selectionManager, onTypeSelect: onTypeSelect } = options;\n    let state = (0, $dLAPo$useRef)({\n        search: '',\n        timeout: undefined\n    });\n    let onKeyDownCapture = (e)=>{\n        // if we're in the middle of a search, then a spacebar should be treated as a search and we should not propagate the event\n        // since we handle this one in a capture phase, we should ignore it in the bubble phase\n        if (state.current.search.length > 0 && e.key === ' ') {\n            e.preventDefault();\n            if (!('continuePropagation' in e) || 'continuePropagation' in e && !e.isPropagationStopped()) e.stopPropagation();\n            state.current.search += ' ';\n            if (keyboardDelegate.getKeyForSearch != null) {\n                // Use the delegate to find a key to focus.\n                // Prioritize items after the currently focused item, falling back to searching the whole list.\n                let key = keyboardDelegate.getKeyForSearch(state.current.search, selectionManager.focusedKey);\n                // If no key found, search from the top.\n                if (key == null) key = keyboardDelegate.getKeyForSearch(state.current.search);\n                if (key != null) {\n                    selectionManager.setFocusedKey(key);\n                    if (onTypeSelect) onTypeSelect(key);\n                }\n            }\n            clearTimeout(state.current.timeout);\n            state.current.timeout = setTimeout(()=>{\n                state.current.search = '';\n            }, $f5a4a9a3486154da$var$TYPEAHEAD_DEBOUNCE_WAIT_MS);\n        }\n    };\n    let onKeyDown = (e)=>{\n        let character = $f5a4a9a3486154da$var$getStringForKey(e.key);\n        if (!character || e.ctrlKey || e.metaKey || e.altKey || !(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e)) || state.current.search.length === 0 && character === ' ') return;\n        state.current.search += character;\n        if (keyboardDelegate.getKeyForSearch != null) {\n            // Use the delegate to find a key to focus.\n            // Prioritize items after the currently focused item, falling back to searching the whole list.\n            let key = keyboardDelegate.getKeyForSearch(state.current.search, selectionManager.focusedKey);\n            if (key == null) key = keyboardDelegate.getKeyForSearch(state.current.search);\n            if (key != null) {\n                selectionManager.setFocusedKey(key);\n                if (onTypeSelect) onTypeSelect(key);\n                e.preventDefault();\n                if (!('continuePropagation' in e)) e.stopPropagation();\n            } else {\n                // if still nothing then the type to select is done and everything is reset\n                state.current.search = '';\n                clearTimeout(state.current.timeout);\n                state.current.timeout = undefined;\n                return;\n            }\n        }\n        clearTimeout(state.current.timeout);\n        state.current.timeout = setTimeout(()=>{\n            state.current.search = '';\n        }, $f5a4a9a3486154da$var$TYPEAHEAD_DEBOUNCE_WAIT_MS);\n    };\n    (0, $dLAPo$useEffect)(()=>{\n        let timeout = state.current.timeout;\n        return ()=>{\n            clearTimeout(timeout);\n        };\n    }, [\n        state\n    ]);\n    return {\n        typeSelectProps: {\n            // Using a capturing listener to catch the keydown event before\n            // other hooks in order to handle the Spacebar event.\n            onKeyDownCapture: keyboardDelegate.getKeyForSearch ? onKeyDownCapture : undefined,\n            onKeyDown: keyboardDelegate.getKeyForSearch ? onKeyDown : undefined\n        }\n    };\n}\nfunction $f5a4a9a3486154da$var$getStringForKey(key) {\n    // If the key is of length 1, it is an ASCII value.\n    // Otherwise, if there are no ASCII characters in the key name,\n    // it is a Unicode character.\n    // See https://www.w3.org/TR/uievents-key/\n    if (key.length === 1 || !/^[A-Z]/i.test(key)) return key;\n    return '';\n}\n\n\nexport {$f5a4a9a3486154da$export$e32c88dfddc6e1d8 as useTypeSelect};\n//# sourceMappingURL=useTypeSelect.mjs.map\n","import {useLayoutEffect as $c4867b2f328c2698$export$e5c5a5f917a5871c} from \"./useLayoutEffect.mjs\";\nimport {useRef as $cgy5r$useRef} from \"react\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $a475cdc2445827b5$export$72ef708ab07251f1(effect, dependencies) {\n    const isInitialMount = (0, $cgy5r$useRef)(true);\n    const lastDeps = (0, $cgy5r$useRef)(null);\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        isInitialMount.current = true;\n        return ()=>{\n            isInitialMount.current = false;\n        };\n    }, []);\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        if (isInitialMount.current) isInitialMount.current = false;\n        else if (!lastDeps.current || dependencies.some((dep, i)=>!Object.is(dep, lastDeps[i]))) effect();\n        lastDeps.current = dependencies;\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, dependencies);\n}\n\n\nexport {$a475cdc2445827b5$export$72ef708ab07251f1 as useUpdateLayoutEffect};\n//# sourceMappingURL=useUpdateLayoutEffect.mjs.map\n","import {CLEAR_FOCUS_EVENT as $8b2399d051d06d4c$export$447a38995de2c711, FOCUS_EVENT as $8b2399d051d06d4c$export$831c820ad60f9d12} from \"../utils/constants.mjs\";\nimport {dispatchVirtualFocus as $b72f3f7b3b5f42c6$export$2b35b76d2e30e129, moveVirtualFocus as $b72f3f7b3b5f42c6$export$76e4e37e5339496d} from \"../focus/virtualFocus.mjs\";\nimport {focusSafely as $f192c2f16961cbe0$export$80f3e147d781571c} from \"../interactions/focusSafely.mjs\";\nimport {focusWithoutScrolling as $1969ac565cfec8d0$export$de79e2c695e052f3} from \"../utils/focusWithoutScrolling.mjs\";\nimport {getActiveElement as $23f2114a1b82827e$export$cd4e5573fbe2b576, getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29, isFocusWithin as $23f2114a1b82827e$export$b4f377a2b6254582, nodeContains as $23f2114a1b82827e$export$4282f70798064fe0} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {getFocusableTreeWalker as $535772f9d2c1f38d$export$2d6ec8fc375ceafa} from \"../focus/FocusScope.mjs\";\nimport {getInteractionModality as $8f5a2122b0992be3$export$630ff653c5ada6a9} from \"../interactions/useFocusVisible.mjs\";\nimport {getItemElement as $22bbea12c2567021$export$c3d8340acf92597f, isNonContiguousSelectionModifier as $22bbea12c2567021$export$d3e3bd3e26688c04, useCollectionId as $22bbea12c2567021$export$881eb0d9f3605d9d} from \"./utils.mjs\";\nimport {isCtrlKeyPressed as $bb39c0fc1c19b34c$export$16792effe837dba3} from \"../utils/keyboard.mjs\";\nimport {isMac as $2add3ce32c6007eb$export$9ac100e40613ea10} from \"../utils/platform.mjs\";\nimport {isTabbable as $3b8b240c1bf84ab9$export$bebd5a1431fec25d} from \"../utils/isFocusable.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {scrollIntoView as $51a3e22a5186a962$export$53a0910f038337bd, scrollIntoViewport as $51a3e22a5186a962$export$c826860796309d1b} from \"../utils/scrollIntoView.mjs\";\nimport {useEvent as $600b3cf69ae46262$export$90fc3a17d93f704c} from \"../utils/useEvent.mjs\";\nimport {useKeyboard as $8296dad1a4c5e0dc$export$8f71654801c2f7cd} from \"../interactions/useKeyboard.mjs\";\nimport {useLocale as $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7} from \"../i18n/I18nProvider.mjs\";\nimport {useRouter as $caaf0dd3060ed57c$export$9a302a45f65d0572} from \"../utils/openLink.mjs\";\nimport {useTypeSelect as $f5a4a9a3486154da$export$e32c88dfddc6e1d8} from \"./useTypeSelect.mjs\";\nimport {useUpdateLayoutEffect as $a475cdc2445827b5$export$72ef708ab07251f1} from \"../utils/useUpdateLayoutEffect.mjs\";\nimport {flushSync as $V3AJM$flushSync} from \"react-dom\";\nimport {useRef as $V3AJM$useRef, useEffect as $V3AJM$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction $d667c2af82d35a98$export$d6daf82dcd84e87c(options) {\n    let { selectionManager: manager, keyboardDelegate: delegate, ref: ref, autoFocus: autoFocus = false, shouldFocusWrap: shouldFocusWrap = false, disallowEmptySelection: disallowEmptySelection = false, disallowSelectAll: disallowSelectAll = false, escapeKeyBehavior: escapeKeyBehavior = 'clearSelection', selectOnFocus: selectOnFocus = manager.selectionBehavior === 'replace', disallowTypeAhead: disallowTypeAhead = false, shouldUseVirtualFocus: shouldUseVirtualFocus, allowsTabNavigation: allowsTabNavigation = false, scrollRef: // If no scrollRef is provided, assume the collection ref is the scrollable region\n    scrollRef = ref, linkBehavior: linkBehavior = 'action', UNSTABLE_focusOnEntry: UNSTABLE_focusOnEntry } = options;\n    let { direction: direction } = (0, $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7)();\n    let router = (0, $caaf0dd3060ed57c$export$9a302a45f65d0572)();\n    const navigateToKey = (e, key, childFocus)=>{\n        if (key != null) {\n            if (manager.isLink(key) && linkBehavior === 'selection' && selectOnFocus && !(0, $22bbea12c2567021$export$d3e3bd3e26688c04)(e)) {\n                // Set focused key and re-render synchronously to bring item into view if needed.\n                (0, $V3AJM$flushSync)(()=>{\n                    manager.setFocusedKey(key, childFocus);\n                });\n                let item = (0, $22bbea12c2567021$export$c3d8340acf92597f)(ref, key);\n                let itemProps = manager.getItemProps(key);\n                if (item) {\n                    router.open(item, e, itemProps.href, itemProps.routerOptions);\n                    return;\n                }\n                return false;\n            }\n            manager.setFocusedKey(key, childFocus);\n            if (manager.isLink(key) && linkBehavior === 'override') return false;\n            if (e.shiftKey && manager.selectionMode === 'multiple') {\n                manager.extendSelection(key);\n                return;\n            } else if (selectOnFocus && !(0, $22bbea12c2567021$export$d3e3bd3e26688c04)(e)) {\n                manager.replaceSelection(key);\n                return;\n            }\n        }\n        return false;\n    };\n    let arrowDown = (e)=>{\n        if (delegate.getKeyBelow) {\n            let nextKey = manager.focusedKey != null ? delegate.getKeyBelow?.(manager.focusedKey) : delegate.getFirstKey?.();\n            if (nextKey == null && shouldFocusWrap) nextKey = delegate.getFirstKey?.(manager.focusedKey);\n            if (nextKey != null) {\n                navigateToKey(e, nextKey);\n                return;\n            }\n        }\n        return false;\n    };\n    let arrowUp = (e)=>{\n        if (delegate.getKeyAbove) {\n            let nextKey = manager.focusedKey != null ? delegate.getKeyAbove?.(manager.focusedKey) : delegate.getLastKey?.();\n            if (nextKey == null && shouldFocusWrap) nextKey = delegate.getLastKey?.(manager.focusedKey);\n            if (nextKey != null) {\n                navigateToKey(e, nextKey);\n                return;\n            }\n        }\n        return false;\n    };\n    let home = (e)=>{\n        if (delegate.getFirstKey) {\n            if (manager.focusedKey === null && e.shiftKey) return false;\n            // TODO: should Home and End also be reversed in column reverse aka Home goes to top? Or should Home always to to the \"first\" (bottom)\n            let firstKey = delegate.getFirstKey(manager.focusedKey, (0, $bb39c0fc1c19b34c$export$16792effe837dba3)(e));\n            manager.setFocusedKey(firstKey);\n            if (firstKey != null) {\n                if ((0, $bb39c0fc1c19b34c$export$16792effe837dba3)(e) && e.shiftKey && manager.selectionMode === 'multiple') {\n                    manager.extendSelection(firstKey);\n                    return;\n                } else if (selectOnFocus) {\n                    manager.replaceSelection(firstKey);\n                    return;\n                }\n            }\n        }\n        return false;\n    };\n    let arrowLeft = (e)=>{\n        if (delegate.getKeyLeftOf) {\n            let nextKey = manager.focusedKey != null ? delegate.getKeyLeftOf?.(manager.focusedKey) : delegate.getFirstKey?.();\n            if (nextKey == null && shouldFocusWrap) nextKey = direction === 'rtl' ? delegate.getFirstKey?.(manager.focusedKey) : delegate.getLastKey?.(manager.focusedKey);\n            if (nextKey != null) {\n                navigateToKey(e, nextKey, direction === 'rtl' ? 'first' : 'last');\n                return;\n            }\n        }\n        return false;\n    };\n    let arrowRight = (e)=>{\n        if (delegate.getKeyRightOf) {\n            let nextKey = manager.focusedKey != null ? delegate.getKeyRightOf?.(manager.focusedKey) : delegate.getFirstKey?.();\n            if (nextKey == null && shouldFocusWrap) nextKey = direction === 'rtl' ? delegate.getLastKey?.(manager.focusedKey) : delegate.getFirstKey?.(manager.focusedKey);\n            if (nextKey != null) {\n                navigateToKey(e, nextKey, direction === 'rtl' ? 'last' : 'first');\n                return;\n            }\n        }\n        return false;\n    };\n    let end = (e)=>{\n        if (delegate.getLastKey) {\n            if (manager.focusedKey === null && e.shiftKey) return false;\n            let lastKey = delegate.getLastKey(manager.focusedKey, (0, $bb39c0fc1c19b34c$export$16792effe837dba3)(e));\n            manager.setFocusedKey(lastKey);\n            if (lastKey != null) {\n                if ((0, $bb39c0fc1c19b34c$export$16792effe837dba3)(e) && e.shiftKey && manager.selectionMode === 'multiple') {\n                    manager.extendSelection(lastKey);\n                    return;\n                } else if (selectOnFocus) {\n                    manager.replaceSelection(lastKey);\n                    return;\n                }\n            }\n        }\n        return false;\n    };\n    let pageDown = (e)=>{\n        if (delegate.getKeyPageBelow && manager.focusedKey != null) {\n            let nextKey = delegate.getKeyPageBelow(manager.focusedKey);\n            if (nextKey != null) return navigateToKey(e, nextKey);\n        }\n        return false;\n    };\n    let pageUp = (e)=>{\n        if (delegate.getKeyPageAbove && manager.focusedKey != null) {\n            let nextKey = delegate.getKeyPageAbove(manager.focusedKey);\n            if (nextKey != null) return navigateToKey(e, nextKey);\n        }\n        return false;\n    };\n    let aHandler = ()=>{\n        if (manager.selectionMode === 'multiple' && disallowSelectAll !== true) {\n            manager.selectAll();\n            return;\n        }\n        return false;\n    };\n    let escape = ()=>{\n        if (escapeKeyBehavior === 'clearSelection' && !disallowEmptySelection && manager.selectedKeys.size !== 0) {\n            manager.clearSelection();\n            return;\n        }\n        return false;\n    };\n    let tab = ()=>{\n        if (!allowsTabNavigation && ref.current) {\n            // There may be elements that are \"tabbable\" inside a collection (e.g. in a grid cell).\n            // However, collections should be treated as a single tab stop, with arrow key navigation internally.\n            // We don't control the rendering of these, so we can't override the tabIndex to prevent tabbing.\n            // Instead, we handle the Tab key, and move focus manually to the first/last tabbable element\n            // in the collection, so that the browser default behavior will apply starting from that element\n            // rather than the currently focused one.\n            let walker = (0, $535772f9d2c1f38d$export$2d6ec8fc375ceafa)(ref.current, {\n                tabbable: true\n            });\n            let next = undefined;\n            let last;\n            do {\n                last = walker.lastChild();\n                if (last) next = last;\n            }while (last);\n            // If the active element is NOT tabbable but is contained by an element that IS tabbable (aka the cell), the browser will actually move focus to\n            // the containing element. We need to special case this so that tab will move focus out of the grid instead of looping between\n            // focusing the containing cell and back to the non-tabbable child element\n            let activeElement = (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)();\n            if (next && (!(0, $23f2114a1b82827e$export$b4f377a2b6254582)(next) || activeElement && !(0, $3b8b240c1bf84ab9$export$bebd5a1431fec25d)(activeElement))) (0, $1969ac565cfec8d0$export$de79e2c695e052f3)(next);\n        }\n        return {\n            shouldContinuePropagation: true,\n            shouldPreventDefault: false\n        };\n    };\n    let shiftTab = ()=>{\n        if (!allowsTabNavigation && ref.current) ref.current.focus();\n        return {\n            shouldContinuePropagation: true,\n            shouldPreventDefault: false\n        };\n    };\n    let withShiftSel = (key, callback)=>{\n        return {\n            [(0, $2add3ce32c6007eb$export$9ac100e40613ea10)() ? key + '+Shift+Alt' : key + '+Shift+Control']: callback,\n            [key + '+Shift']: callback,\n            [(0, $2add3ce32c6007eb$export$9ac100e40613ea10)() ? key + '+Alt' : key + '+Control']: callback,\n            [key]: callback\n        };\n    };\n    // oxlint-disable react/react-compiler\n    let { keyboardProps: repeatKeyboardProps } = (0, $8296dad1a4c5e0dc$export$8f71654801c2f7cd)({\n        shortcuts: {\n            ...withShiftSel('ArrowDown', arrowDown),\n            ...withShiftSel('ArrowUp', arrowUp),\n            ...withShiftSel('ArrowLeft', arrowLeft),\n            ...withShiftSel('ArrowRight', arrowRight),\n            ...withShiftSel('PageDown', pageDown),\n            ...withShiftSel('PageUp', pageUp)\n        },\n        allowRepeats: true\n    });\n    // oxlint-disable react/react-compiler\n    let { keyboardProps: keyboardProps } = (0, $8296dad1a4c5e0dc$export$8f71654801c2f7cd)({\n        shortcuts: {\n            ...withShiftSel('Home', home),\n            ...withShiftSel('End', end),\n            'Mod+A': aHandler,\n            Escape: escape,\n            Tab: tab,\n            'Tab+Shift': shiftTab\n        }\n    });\n    // oxlint-enable react/react-compiler\n    // Store the scroll position so we can restore it later.\n    /// TODO: should this happen all the time??\n    let scrollPos = (0, $V3AJM$useRef)({\n        top: 0,\n        left: 0\n    });\n    (0, $600b3cf69ae46262$export$90fc3a17d93f704c)(scrollRef, 'scroll', ()=>{\n        scrollPos.current = {\n            top: scrollRef.current?.scrollTop ?? 0,\n            left: scrollRef.current?.scrollLeft ?? 0\n        };\n    });\n    let onFocus = (e)=>{\n        if (manager.isFocused) {\n            // If a focus event bubbled through a portal, reset focus state.\n            if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) manager.setFocused(false);\n            return;\n        }\n        // Focus events can bubble through portals. Ignore these events.\n        if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n        let modality = (0, $8f5a2122b0992be3$export$630ff653c5ada6a9)();\n        manager.setFocused(true);\n        let navigateToKey = (key)=>{\n            if (key != null) {\n                manager.setFocusedKey(key);\n                if (selectOnFocus && !manager.isSelected(key)) manager.replaceSelection(key);\n            }\n        };\n        // we need the \"virtual\" modality case checks here because shift tabbing from the prompt field's attachment card back into the\n        // thread is a virtual focus event (the tab handler in onKeyDown focuses the ref of the attachmentList aka TagGroup via a focus() call, hence the virtual modality)\n        if (UNSTABLE_focusOnEntry && (modality === 'keyboard' || modality === 'virtual')) // always go to the first item in the Thread when tabbing forwards/backwards into the collection\n        // since it is probably more important to the user to see the new prompt reply rather than go to the last focused key\n        navigateToKey(UNSTABLE_focusOnEntry === 'first' ? delegate.getFirstKey?.() : delegate.getLastKey?.());\n        else if (manager.focusedKey == null) {\n            // If the user hasn't yet interacted with the collection, there will be no focusedKey set.\n            // Attempt to detect whether the user is tabbing forward or backward into the collection\n            // and either focus the first or last item accordingly.\n            let relatedTarget = e.relatedTarget;\n            if (relatedTarget && e.currentTarget.compareDocumentPosition(relatedTarget) & Node.DOCUMENT_POSITION_FOLLOWING) navigateToKey(manager.lastSelectedKey ?? delegate.getLastKey?.());\n            else navigateToKey(manager.firstSelectedKey ?? delegate.getFirstKey?.());\n        } else if (scrollRef.current) {\n            // Restore the scroll position to what it was before.\n            scrollRef.current.scrollTop = scrollPos.current.top;\n            scrollRef.current.scrollLeft = scrollPos.current.left;\n        }\n        if (manager.focusedKey != null && scrollRef.current) {\n            // Refocus and scroll the focused item into view if it exists within the scrollable region.\n            let element = (0, $22bbea12c2567021$export$c3d8340acf92597f)(ref, manager.focusedKey);\n            if (element instanceof HTMLElement) {\n                // This prevents a flash of focus on the first/last element in the collection, or the collection itself.\n                if (!(0, $23f2114a1b82827e$export$b4f377a2b6254582)(element) && !shouldUseVirtualFocus) (0, $1969ac565cfec8d0$export$de79e2c695e052f3)(element);\n                if (modality === 'keyboard' || UNSTABLE_focusOnEntry && modality === 'virtual') (0, $51a3e22a5186a962$export$c826860796309d1b)(element, {\n                    containingElement: ref.current\n                });\n            }\n        }\n    };\n    let onBlur = (e)=>{\n        // Don't set blurred and then focused again if moving focus within the collection.\n        if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, e.relatedTarget)) manager.setFocused(false);\n    };\n    // Ref to track whether the first item in the collection should be automatically focused. Specifically used for autocomplete when user types\n    // to focus the first key AFTER the collection updates.\n    // TODO: potentially expand the usage of this\n    let shouldVirtualFocusFirst = (0, $V3AJM$useRef)(false);\n    // Add event listeners for custom virtual events. These handle updating the focused key in response to various keyboard events\n    // at the autocomplete level\n    // TODO: fix type later\n    (0, $600b3cf69ae46262$export$90fc3a17d93f704c)(ref, (0, $8b2399d051d06d4c$export$831c820ad60f9d12), !shouldUseVirtualFocus ? undefined : (e)=>{\n        let { detail: detail } = e;\n        e.stopPropagation();\n        manager.setFocused(true);\n        // If the user is typing forwards, autofocus the first option in the list.\n        if (detail?.focusStrategy === 'first') shouldVirtualFocusFirst.current = true;\n    });\n    // update active descendant\n    let firstKey = delegate.getFirstKey?.() ?? null;\n    (0, $a475cdc2445827b5$export$72ef708ab07251f1)(()=>{\n        if (shouldVirtualFocusFirst.current) {\n            // If no focusable items exist in the list, make sure to clear any activedescendant that may still exist and move focus back to\n            // the original active element (e.g. the autocomplete input)\n            if (firstKey == null) {\n                let previousActiveElement = (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)();\n                (0, $b72f3f7b3b5f42c6$export$76e4e37e5339496d)(ref.current);\n                (0, $b72f3f7b3b5f42c6$export$2b35b76d2e30e129)(previousActiveElement, null);\n                // If there wasn't a focusable key but the collection had items, then that means we aren't in an intermediate load state and all keys are disabled.\n                // Reset shouldVirtualFocusFirst so that we don't erronously autofocus an item when the collection is filtered again.\n                if (manager.collection.size > 0) shouldVirtualFocusFirst.current = false;\n            } else {\n                manager.setFocusedKey(firstKey);\n                // Only set shouldVirtualFocusFirst to false if we've successfully set the first key as the focused key\n                // If there wasn't a key to focus, we might be in a temporary loading state so we'll want to still focus the first key\n                // after the collection updates after load\n                shouldVirtualFocusFirst.current = false;\n            }\n        }\n    }, [\n        firstKey,\n        manager.collection.size\n    ]);\n    // reset focus first flag\n    (0, $a475cdc2445827b5$export$72ef708ab07251f1)(()=>{\n        // If user causes the focused key to change in any other way, clear shouldVirtualFocusFirst so we don't\n        // accidentally move focus from under them. Skip this if the collection was empty because we might be in a load\n        // state and will still want to focus the first item after load\n        if (manager.collection.size > 0) shouldVirtualFocusFirst.current = false;\n    }, [\n        manager.focusedKey\n    ]);\n    (0, $600b3cf69ae46262$export$90fc3a17d93f704c)(ref, (0, $8b2399d051d06d4c$export$447a38995de2c711), !shouldUseVirtualFocus ? undefined : (e)=>{\n        e.stopPropagation();\n        manager.setFocused(false);\n        if (e.detail?.clearFocusKey) manager.setFocusedKey(null);\n    });\n    const autoFocusRef = (0, $V3AJM$useRef)(autoFocus);\n    const didAutoFocusRef = (0, $V3AJM$useRef)(false);\n    (0, $V3AJM$useEffect)(()=>{\n        if (autoFocusRef.current) {\n            let focusedKey = null;\n            // Check focus strategy to determine which item to focus\n            if (autoFocus === 'first') focusedKey = delegate.getFirstKey?.() ?? null;\n            if (autoFocus === 'last') focusedKey = delegate.getLastKey?.() ?? null;\n            // If there are any selected keys, make the first one the new focus target\n            let selectedKeys = manager.selectedKeys;\n            if (selectedKeys.size) {\n                for (let key of selectedKeys)if (manager.canSelectItem(key)) {\n                    focusedKey = key;\n                    break;\n                }\n            }\n            manager.setFocused(true);\n            manager.setFocusedKey(focusedKey);\n            if (focusedKey != null && selectOnFocus && !selectedKeys.size && manager.canSelectItem(focusedKey)) manager.replaceSelection(focusedKey);\n            // If no default focus key is selected, focus the collection itself.\n            if (focusedKey == null && !shouldUseVirtualFocus && ref.current) (0, $f192c2f16961cbe0$export$80f3e147d781571c)(ref.current);\n            // Wait until the collection has items to autofocus.\n            if (manager.collection.size > 0) {\n                autoFocusRef.current = false;\n                didAutoFocusRef.current = true;\n            }\n        }\n    });\n    // Scroll the focused element into view when the focusedKey changes.\n    let lastFocusedKey = (0, $V3AJM$useRef)(manager.focusedKey);\n    let raf = (0, $V3AJM$useRef)(null);\n    (0, $V3AJM$useEffect)(()=>{\n        if (manager.isFocused && manager.focusedKey != null && (manager.focusedKey !== lastFocusedKey.current || didAutoFocusRef.current) && scrollRef.current && ref.current) {\n            let modality = (0, $8f5a2122b0992be3$export$630ff653c5ada6a9)();\n            let element = (0, $22bbea12c2567021$export$c3d8340acf92597f)(ref, manager.focusedKey);\n            if (!(element instanceof HTMLElement)) // If item element wasn't found, return early (don't update autoFocusRef and lastFocusedKey).\n            // The collection may initially be empty (e.g. virtualizer), so wait until the element exists.\n            return;\n            if (modality === 'keyboard' || didAutoFocusRef.current) {\n                if (raf.current) cancelAnimationFrame(raf.current);\n                raf.current = requestAnimationFrame(()=>{\n                    if (scrollRef.current) {\n                        (0, $51a3e22a5186a962$export$53a0910f038337bd)(scrollRef.current, element);\n                        // Avoid scroll in iOS VO, since it may cause overlay to close (i.e. RAC submenu)\n                        if (modality !== 'virtual') (0, $51a3e22a5186a962$export$c826860796309d1b)(element, {\n                            containingElement: ref.current\n                        });\n                    }\n                });\n            }\n        }\n        // If the focused key becomes null (e.g. the last item is deleted), focus the whole collection.\n        if (!shouldUseVirtualFocus && manager.isFocused && manager.focusedKey == null && lastFocusedKey.current != null && ref.current) (0, $f192c2f16961cbe0$export$80f3e147d781571c)(ref.current);\n        lastFocusedKey.current = manager.focusedKey;\n        didAutoFocusRef.current = false;\n    });\n    (0, $V3AJM$useEffect)(()=>{\n        return ()=>{\n            if (raf.current) cancelAnimationFrame(raf.current);\n        };\n    }, []);\n    // Intercept FocusScope restoration since virtualized collections can reuse DOM nodes.\n    (0, $600b3cf69ae46262$export$90fc3a17d93f704c)(ref, 'react-aria-focus-scope-restore', (e)=>{\n        e.preventDefault();\n        manager.setFocused(true);\n    });\n    let handlers = {\n        ...(0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(keyboardProps, repeatKeyboardProps),\n        onFocus: onFocus,\n        onBlur: onBlur,\n        onMouseDown (e) {\n            // Ignore events that bubbled through portals.\n            if (scrollRef.current === (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e)) // Prevent focus going to the collection when clicking on the scrollbar.\n            e.preventDefault();\n        }\n    };\n    let { typeSelectProps: typeSelectProps } = (0, $f5a4a9a3486154da$export$e32c88dfddc6e1d8)({\n        keyboardDelegate: delegate,\n        selectionManager: manager\n    });\n    if (!disallowTypeAhead) // oxlint-disable-next-line react/react-compiler\n    handlers = (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(typeSelectProps, handlers);\n    // If nothing is focused within the collection, make the collection itself tabbable.\n    // This will be marshalled to either the first or last item depending on where focus came from.\n    let tabIndex = undefined;\n    if (!shouldUseVirtualFocus) tabIndex = manager.focusedKey == null ? 0 : -1;\n    let collectionId = (0, $22bbea12c2567021$export$881eb0d9f3605d9d)(manager.collection);\n    return {\n        // oxlint-disable-next-line react/react-compiler\n        collectionProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(handlers, {\n            tabIndex: tabIndex,\n            'data-collection': collectionId\n        })\n    };\n}\n\n\nexport {$d667c2af82d35a98$export$d6daf82dcd84e87c as useSelectableCollection};\n//# sourceMappingURL=useSelectableCollection.mjs.map\n","import {getItemElement as $22bbea12c2567021$export$c3d8340acf92597f} from \"./utils.mjs\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nclass $a83747cc3f035330$export$8f5ed9ff9f511381 {\n    constructor(ref){\n        this.ref = ref;\n    }\n    getItemRect(key) {\n        let container = this.ref.current;\n        if (!container) return null;\n        let item = key != null ? (0, $22bbea12c2567021$export$c3d8340acf92597f)(this.ref, key) : null;\n        if (!item) return null;\n        let containerRect = container.getBoundingClientRect();\n        let itemRect = item.getBoundingClientRect();\n        return {\n            x: itemRect.left - containerRect.left - container.clientLeft + container.scrollLeft,\n            y: itemRect.top - containerRect.top - container.clientTop + container.scrollTop,\n            width: itemRect.width,\n            height: itemRect.height\n        };\n    }\n    getContentSize() {\n        let container = this.ref.current;\n        return {\n            width: container?.scrollWidth ?? 0,\n            height: container?.scrollHeight ?? 0\n        };\n    }\n    getVisibleRect() {\n        let container = this.ref.current;\n        return {\n            x: container?.scrollLeft ?? 0,\n            y: container?.scrollTop ?? 0,\n            width: container?.clientWidth ?? 0,\n            height: container?.clientHeight ?? 0\n        };\n    }\n}\n\n\nexport {$a83747cc3f035330$export$8f5ed9ff9f511381 as DOMLayoutDelegate};\n//# sourceMappingURL=DOMLayoutDelegate.mjs.map\n","import {DOMLayoutDelegate as $a83747cc3f035330$export$8f5ed9ff9f511381} from \"./DOMLayoutDelegate.mjs\";\nimport {getItemElement as $22bbea12c2567021$export$c3d8340acf92597f} from \"./utils.mjs\";\nimport {isScrollable as $901761b40e390936$export$2bb74740c4e19def} from \"../utils/isScrollable.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nclass $ae8f8d98b2b18f2f$export$a05409b8bb224a5a {\n    constructor(...args){\n        if (args.length === 1) {\n            let opts = args[0];\n            this.collection = opts.collection;\n            this.ref = opts.ref;\n            this.collator = opts.collator;\n            this.disabledKeys = opts.disabledKeys || new Set();\n            this.disabledBehavior = opts.disabledBehavior || 'all';\n            this.orientation = opts.orientation || 'vertical';\n            this.direction = opts.direction;\n            this.layout = opts.layout || 'stack';\n            this.layoutDelegate = opts.layoutDelegate || new (0, $a83747cc3f035330$export$8f5ed9ff9f511381)(opts.ref);\n        } else {\n            this.collection = args[0];\n            this.disabledKeys = args[1];\n            this.ref = args[2];\n            this.collator = args[3];\n            this.layout = 'stack';\n            this.orientation = 'vertical';\n            this.disabledBehavior = 'all';\n            this.layoutDelegate = new (0, $a83747cc3f035330$export$8f5ed9ff9f511381)(this.ref);\n        }\n        // If this is a vertical stack, remove the left/right methods completely\n        // so they aren't called by useDroppableCollection.\n        if (this.layout === 'stack' && this.orientation === 'vertical') {\n            this.getKeyLeftOf = undefined;\n            this.getKeyRightOf = undefined;\n        }\n    }\n    isDisabled(item) {\n        return this.disabledBehavior === 'all' && (item.props?.isDisabled || this.disabledKeys.has(item.key)) && item.props?.disabledBehavior !== 'selection';\n    }\n    findNextNonDisabled(key, getNext, includeDisabled = false) {\n        let nextKey = key;\n        while(nextKey != null){\n            let item = this.collection.getItem(nextKey);\n            if (item?.type === 'item' && (includeDisabled || !this.isDisabled(item))) return nextKey;\n            nextKey = getNext(nextKey);\n        }\n        return null;\n    }\n    getNextKey(key, options) {\n        let nextKey = key;\n        nextKey = this.collection.getKeyAfter(nextKey);\n        return this.findNextNonDisabled(nextKey, (key)=>this.collection.getKeyAfter(key), options?.includeDisabled);\n    }\n    getPreviousKey(key, options) {\n        let nextKey = key;\n        nextKey = this.collection.getKeyBefore(nextKey);\n        return this.findNextNonDisabled(nextKey, (key)=>this.collection.getKeyBefore(key), options?.includeDisabled);\n    }\n    findKey(key, nextKey, shouldSkip) {\n        let tempKey = key;\n        let itemRect = this.layoutDelegate.getItemRect(tempKey);\n        if (!itemRect || tempKey == null) return null;\n        // Find the item above or below in the same column.\n        let prevRect = itemRect;\n        do {\n            tempKey = nextKey(tempKey);\n            if (tempKey == null) break;\n            itemRect = this.layoutDelegate.getItemRect(tempKey);\n        }while (itemRect && shouldSkip(prevRect, itemRect) && tempKey != null);\n        return tempKey;\n    }\n    isSameRow(prevRect, itemRect) {\n        return prevRect.y === itemRect.y || prevRect.x !== itemRect.x;\n    }\n    isSameColumn(prevRect, itemRect) {\n        return prevRect.x === itemRect.x || prevRect.y !== itemRect.y;\n    }\n    // checks to see if the next/prev key is spatially above/below the current key. If not, that means we are in\n    // a reversed column layout and need to adjust appropriately\n    // TODO: still need to see how this works with virtualizer once there is handling for the reverse layout\n    // this felt like a simpler approach then changing getKeyAbove/Below to be purely spatial calculations\n    isReversed(key) {\n        let nextKey = this.getNextKey(key);\n        let currentEl = (0, $22bbea12c2567021$export$c3d8340acf92597f)(this.ref, key);\n        if (nextKey != null) {\n            let nextEl = (0, $22bbea12c2567021$export$c3d8340acf92597f)(this.ref, nextKey);\n            if (!currentEl || !nextEl) return false;\n            return currentEl.getBoundingClientRect().top > nextEl.getBoundingClientRect().top;\n        }\n        let prevKey = this.getPreviousKey(key);\n        if (prevKey != null) {\n            let prevEl = (0, $22bbea12c2567021$export$c3d8340acf92597f)(this.ref, prevKey);\n            if (!currentEl || !prevEl) return false;\n            return prevEl.getBoundingClientRect().top > currentEl.getBoundingClientRect().top;\n        }\n        return false;\n    }\n    getKeyBelow(key, options) {\n        if (this.layout === 'grid' && this.orientation === 'vertical') return this.findKey(key, (key)=>this.getNextKey(key, options), this.isSameRow);\n        else if (this.orientation === 'vertical') return this.isReversed(key) ? this.getPreviousKey(key, options) : this.getNextKey(key, options);\n        else return this.getNextKey(key, options);\n    }\n    getKeyAbove(key, options) {\n        if (this.layout === 'grid' && this.orientation === 'vertical') return this.findKey(key, (key)=>this.getPreviousKey(key, options), this.isSameRow);\n        else if (this.orientation === 'vertical') return this.isReversed(key) ? this.getNextKey(key, options) : this.getPreviousKey(key, options);\n        else return this.getPreviousKey(key, options);\n    }\n    getNextColumn(key, right, options) {\n        return right ? this.getPreviousKey(key, options) : this.getNextKey(key, options);\n    }\n    getKeyRightOf(key, options) {\n        // This is a temporary solution for CardView until we refactor useSelectableCollection.\n        // https://github.com/orgs/adobe/projects/19/views/32?pane=issue&itemId=77825042\n        let layoutDelegateMethod = this.direction === 'ltr' ? 'getKeyRightOf' : 'getKeyLeftOf';\n        if (this.layoutDelegate[layoutDelegateMethod]) {\n            key = this.layoutDelegate[layoutDelegateMethod](key);\n            return this.findNextNonDisabled(key, (key)=>this.layoutDelegate[layoutDelegateMethod](key), options?.includeDisabled);\n        }\n        if (this.layout === 'grid') {\n            if (this.orientation === 'vertical') return this.getNextColumn(key, this.direction === 'rtl', options);\n            else return this.findKey(key, (key)=>this.getNextColumn(key, this.direction === 'rtl', options), this.isSameColumn);\n        } else if (this.orientation === 'horizontal') return this.getNextColumn(key, this.direction === 'rtl', options);\n        return null;\n    }\n    getKeyLeftOf(key, options) {\n        let layoutDelegateMethod = this.direction === 'ltr' ? 'getKeyLeftOf' : 'getKeyRightOf';\n        if (this.layoutDelegate[layoutDelegateMethod]) {\n            key = this.layoutDelegate[layoutDelegateMethod](key);\n            return this.findNextNonDisabled(key, (key)=>this.layoutDelegate[layoutDelegateMethod](key), options?.includeDisabled);\n        }\n        if (this.layout === 'grid') {\n            if (this.orientation === 'vertical') return this.getNextColumn(key, this.direction === 'ltr', options);\n            else return this.findKey(key, (key)=>this.getNextColumn(key, this.direction === 'ltr', options), this.isSameColumn);\n        } else if (this.orientation === 'horizontal') return this.getNextColumn(key, this.direction === 'ltr', options);\n        return null;\n    }\n    getFirstKey() {\n        let key = this.collection.getFirstKey();\n        return this.findNextNonDisabled(key, (key)=>this.collection.getKeyAfter(key));\n    }\n    getLastKey() {\n        let key = this.collection.getLastKey();\n        return this.findNextNonDisabled(key, (key)=>this.collection.getKeyBefore(key));\n    }\n    getKeyPageAbove(key) {\n        let menu = this.ref.current;\n        let itemRect = this.layoutDelegate.getItemRect(key);\n        if (!itemRect) return null;\n        let reversed = this.isReversed(key);\n        if (menu && !(0, $901761b40e390936$export$2bb74740c4e19def)(menu)) return this.getFirstKey();\n        let nextKey = key;\n        if (this.orientation === 'horizontal') {\n            let pageX = Math.max(0, itemRect.x + itemRect.width - this.layoutDelegate.getVisibleRect().width);\n            while(itemRect && itemRect.x > pageX && nextKey != null){\n                nextKey = this.getKeyAbove(nextKey);\n                itemRect = nextKey == null ? null : this.layoutDelegate.getItemRect(nextKey);\n            }\n        } else {\n            let visibleRect = this.layoutDelegate.getVisibleRect();\n            // column reverse makes y negative for items so we need to instead do current pos - height instead\n            let pageY = reversed ? itemRect.y - visibleRect.height : Math.max(0, itemRect.y + itemRect.height - visibleRect.height);\n            while(itemRect && itemRect.y > pageY && nextKey != null){\n                nextKey = this.getKeyAbove(nextKey);\n                itemRect = nextKey == null ? null : this.layoutDelegate.getItemRect(nextKey);\n            }\n        }\n        return nextKey ?? (reversed ? this.getLastKey() : this.getFirstKey());\n    }\n    getKeyPageBelow(key) {\n        let menu = this.ref.current;\n        let itemRect = this.layoutDelegate.getItemRect(key);\n        if (!itemRect) return null;\n        let reversed = this.isReversed(key);\n        if (menu && !(0, $901761b40e390936$export$2bb74740c4e19def)(menu)) return this.getLastKey();\n        let nextKey = key;\n        if (this.orientation === 'horizontal') {\n            let pageX = Math.min(this.layoutDelegate.getContentSize().width, itemRect.x - itemRect.width + this.layoutDelegate.getVisibleRect().width);\n            while(itemRect && itemRect.x < pageX && nextKey != null){\n                nextKey = this.getKeyBelow(nextKey);\n                itemRect = nextKey == null ? null : this.layoutDelegate.getItemRect(nextKey);\n            }\n        } else {\n            let pageY = Math.min(this.layoutDelegate.getContentSize().height, itemRect.y - itemRect.height + this.layoutDelegate.getVisibleRect().height);\n            while(itemRect && itemRect.y < pageY && nextKey != null){\n                nextKey = this.getKeyBelow(nextKey);\n                itemRect = nextKey == null ? null : this.layoutDelegate.getItemRect(nextKey);\n            }\n        }\n        return nextKey ?? (reversed ? this.getFirstKey() : this.getLastKey());\n    }\n    getKeyForSearch(search, fromKey) {\n        if (!this.collator) return null;\n        let collection = this.collection;\n        let key = fromKey || this.getFirstKey();\n        while(key != null){\n            let item = collection.getItem(key);\n            if (!item) return null;\n            let substring = item.textValue.slice(0, search.length);\n            if (item.textValue && this.collator.compare(substring, search) === 0) return key;\n            key = this.getNextKey(key);\n        }\n        return null;\n    }\n}\n\n\nexport {$ae8f8d98b2b18f2f$export$a05409b8bb224a5a as ListKeyboardDelegate};\n//# sourceMappingURL=ListKeyboardDelegate.mjs.map\n","import {useLocale as $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7} from \"./I18nProvider.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nlet $673d46fce3e5717d$var$cache = new Map();\nfunction $673d46fce3e5717d$export$a16aca283550c30d(options) {\n    let { locale: locale } = (0, $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7)();\n    let cacheKey = locale + (options ? Object.entries(options).sort((a, b)=>a[0] < b[0] ? -1 : 1).join() : '');\n    if ($673d46fce3e5717d$var$cache.has(cacheKey)) return $673d46fce3e5717d$var$cache.get(cacheKey);\n    let formatter = new Intl.Collator(locale, options);\n    $673d46fce3e5717d$var$cache.set(cacheKey, formatter);\n    return formatter;\n}\n\n\nexport {$673d46fce3e5717d$export$a16aca283550c30d as useCollator};\n//# sourceMappingURL=useCollator.mjs.map\n","import {useSelectableCollection as $d667c2af82d35a98$export$d6daf82dcd84e87c} from \"./useSelectableCollection.mjs\";\nimport {ListKeyboardDelegate as $ae8f8d98b2b18f2f$export$a05409b8bb224a5a} from \"./ListKeyboardDelegate.mjs\";\nimport {useCollator as $673d46fce3e5717d$export$a16aca283550c30d} from \"../i18n/useCollator.mjs\";\nimport {useMemo as $7JLm2$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nfunction $64903b4b31b6bb2a$export$b95089534ab7c1fd(props) {\n    let { selectionManager: selectionManager, collection: collection, disabledKeys: disabledKeys, ref: ref, keyboardDelegate: keyboardDelegate, layoutDelegate: layoutDelegate, orientation: orientation } = props;\n    // By default, a KeyboardDelegate is provided which uses the DOM to query layout information (e.g. for page up/page down).\n    // When virtualized, the layout object will be passed in as a prop and override this.\n    let collator = (0, $673d46fce3e5717d$export$a16aca283550c30d)({\n        usage: 'search',\n        sensitivity: 'base'\n    });\n    let disabledBehavior = selectionManager.disabledBehavior;\n    let delegate = (0, $7JLm2$useMemo)(()=>keyboardDelegate || new (0, $ae8f8d98b2b18f2f$export$a05409b8bb224a5a)({\n            collection: collection,\n            disabledKeys: disabledKeys,\n            disabledBehavior: disabledBehavior,\n            ref: ref,\n            collator: collator,\n            layoutDelegate: layoutDelegate,\n            orientation: orientation\n        }), [\n        keyboardDelegate,\n        layoutDelegate,\n        collection,\n        disabledKeys,\n        ref,\n        collator,\n        disabledBehavior,\n        orientation\n    ]);\n    let { collectionProps: collectionProps } = (0, $d667c2af82d35a98$export$d6daf82dcd84e87c)({\n        ...props,\n        ref: ref,\n        selectionManager: selectionManager,\n        keyboardDelegate: delegate\n    });\n    return {\n        listProps: collectionProps\n    };\n}\n\n\nexport {$64903b4b31b6bb2a$export$b95089534ab7c1fd as useSelectableList};\n//# sourceMappingURL=useSelectableList.mjs.map\n","import {filterDOMProps as $8e9d2fae0ecb9001$export$457c3d6518dd4c6f} from \"../utils/filterDOMProps.mjs\";\nimport {listData as $cd088b5c0d7b27b4$export$3585ede4d035bf14} from \"./utils.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {useFocusWithin as $2c9edc598a03d523$export$420e68273165f4ec} from \"../interactions/useFocusWithin.mjs\";\nimport {useId as $390e54f620492c70$export$f680877a34711e37} from \"../utils/useId.mjs\";\nimport {useLabel as $0beb20c9744a2065$export$8467354a121f1b9f} from \"../label/useLabel.mjs\";\nimport {useSelectableList as $64903b4b31b6bb2a$export$b95089534ab7c1fd} from \"../selection/useSelectableList.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\nfunction $686593f99a1df089$export$50eacbbf140a3141(props, state, ref) {\n    let domProps = (0, $8e9d2fae0ecb9001$export$457c3d6518dd4c6f)(props, {\n        labelable: true\n    });\n    // Use props instead of state here. We don't want this to change due to long press.\n    let selectionBehavior = props.selectionBehavior || 'toggle';\n    let orientation = props.orientation || 'vertical';\n    let linkBehavior = props.linkBehavior || (selectionBehavior === 'replace' ? 'action' : 'override');\n    if (selectionBehavior === 'toggle' && linkBehavior === 'action') // linkBehavior=\"action\" does not work with selectionBehavior=\"toggle\" because there is no way\n    // to initiate selection (checkboxes are not allowed inside a listbox). Link items will not be\n    // selectable in this configuration.\n    linkBehavior = 'override';\n    let { listProps: listProps } = (0, $64903b4b31b6bb2a$export$b95089534ab7c1fd)({\n        ...props,\n        ref: ref,\n        selectionManager: state.selectionManager,\n        collection: state.collection,\n        disabledKeys: state.disabledKeys,\n        linkBehavior: linkBehavior\n    });\n    let { focusWithinProps: focusWithinProps } = (0, $2c9edc598a03d523$export$420e68273165f4ec)({\n        onFocusWithin: props.onFocus,\n        onBlurWithin: props.onBlur,\n        onFocusWithinChange: props.onFocusChange\n    });\n    // Share list id and some props with child options.\n    let id = (0, $390e54f620492c70$export$f680877a34711e37)(props.id);\n    (0, $cd088b5c0d7b27b4$export$3585ede4d035bf14).set(state, {\n        id: id,\n        shouldUseVirtualFocus: props.shouldUseVirtualFocus,\n        shouldSelectOnPressUp: props.shouldSelectOnPressUp,\n        shouldFocusOnHover: props.shouldFocusOnHover,\n        isVirtualized: props.isVirtualized,\n        onAction: props.onAction,\n        linkBehavior: linkBehavior,\n        // @ts-ignore\n        UNSTABLE_itemBehavior: props['UNSTABLE_itemBehavior']\n    });\n    let { labelProps: labelProps, fieldProps: fieldProps } = (0, $0beb20c9744a2065$export$8467354a121f1b9f)({\n        ...props,\n        id: id,\n        // listbox is not an HTML input element so it\n        // shouldn't be labeled by a <label> element.\n        labelElementType: 'span'\n    });\n    return {\n        labelProps: labelProps,\n        listBoxProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(domProps, focusWithinProps, state.selectionManager.selectionMode === 'multiple' ? {\n            'aria-multiselectable': 'true'\n        } : {}, {\n            role: 'listbox',\n            'aria-orientation': orientation,\n            ...(0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(fieldProps, listProps)\n        })\n    };\n}\n\n\nexport {$686593f99a1df089$export$50eacbbf140a3141 as useListBox};\n//# sourceMappingURL=useListBox.mjs.map\n","import {focusWithoutScrolling as $1969ac565cfec8d0$export$de79e2c695e052f3} from \"../utils/focusWithoutScrolling.mjs\";\nimport {getOwnerDocument as $d447af545b77c9f1$export$b204af158042fbac, getOwnerWindow as $d447af545b77c9f1$export$f21a1ffae260145a} from \"../utils/domHelpers.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {useDescription as $121970af65029459$export$f8aeda7b10753fa1} from \"../utils/useDescription.mjs\";\nimport {useGlobalListeners as $48a7d519b337145d$export$4eaf04e54aa8eed6} from \"../utils/useGlobalListeners.mjs\";\nimport {usePress as $d27d541f9569d26d$export$45712eceda6fad21} from \"./usePress.mjs\";\nimport {useRef as $cZVsC$useRef} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\nconst $7b01448eaad0fe7c$var$DEFAULT_THRESHOLD = 500;\nfunction $7b01448eaad0fe7c$export$c24ed0104d07eab9(props) {\n    let { isDisabled: isDisabled, pointerType: pointerType, onLongPressStart: onLongPressStart, onLongPressEnd: onLongPressEnd, onLongPress: onLongPress, threshold: threshold = $7b01448eaad0fe7c$var$DEFAULT_THRESHOLD, accessibilityDescription: accessibilityDescription } = props;\n    const timeRef = (0, $cZVsC$useRef)(undefined);\n    let { addGlobalListener: addGlobalListener, removeAllGlobalListeners: removeAllGlobalListeners } = (0, $48a7d519b337145d$export$4eaf04e54aa8eed6)();\n    let isAcceptedPointerType = (e)=>pointerType ? e.pointerType === pointerType : e.pointerType === 'mouse' || e.pointerType === 'touch';\n    let { pressProps: pressProps } = (0, $d27d541f9569d26d$export$45712eceda6fad21)({\n        isDisabled: isDisabled,\n        onPressStart (e) {\n            e.continuePropagation();\n            if (isAcceptedPointerType(e)) {\n                if (onLongPressStart) onLongPressStart({\n                    ...e,\n                    type: 'longpressstart'\n                });\n                timeRef.current = setTimeout(()=>{\n                    // Prevent other usePress handlers from also handling this event.\n                    e.target.dispatchEvent(new PointerEvent('pointercancel', {\n                        bubbles: true\n                    }));\n                    // Prevent default click action (e.g. opening a link) after a long press.\n                    addGlobalListener(e.target, 'click', (e)=>e.preventDefault(), {\n                        once: true\n                    });\n                    // Ensure target is focused. On touch devices, browsers typically focus on pointer up.\n                    if ((0, $d447af545b77c9f1$export$b204af158042fbac)(e.target).activeElement !== e.target) (0, $1969ac565cfec8d0$export$de79e2c695e052f3)(e.target);\n                    if (onLongPress) onLongPress({\n                        ...e,\n                        type: 'longpress'\n                    });\n                    timeRef.current = undefined;\n                }, threshold);\n                // Prevent context menu, which may be opened on long press on touch devices\n                if (e.pointerType === 'touch') addGlobalListener(e.target, 'contextmenu', (e)=>e.preventDefault(), {\n                    once: true\n                });\n                let ownerWindow = (0, $d447af545b77c9f1$export$f21a1ffae260145a)(e.target);\n                addGlobalListener(ownerWindow, 'pointerup', ()=>{\n                    // If no contextmenu/click event is fired quickly after pointerup, remove the handler\n                    // so future events outside a long press are not prevented.\n                    setTimeout(()=>{\n                        removeAllGlobalListeners();\n                    }, 100);\n                }, {\n                    once: true\n                });\n            }\n        },\n        onPressEnd (e) {\n            if (timeRef.current) clearTimeout(timeRef.current);\n            if (onLongPressEnd && isAcceptedPointerType(e)) onLongPressEnd({\n                ...e,\n                type: 'longpressend'\n            });\n        }\n    });\n    let descriptionProps = (0, $121970af65029459$export$f8aeda7b10753fa1)(onLongPress && !isDisabled ? accessibilityDescription : undefined);\n    return {\n        longPressProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(pressProps, descriptionProps)\n    };\n}\n\n\nexport {$7b01448eaad0fe7c$export$c24ed0104d07eab9 as useLongPress};\n//# sourceMappingURL=useLongPress.mjs.map\n","import {chain as $a4e76a5424781910$export$e08e3b67e392101e} from \"../utils/chain.mjs\";\nimport {focusSafely as $f192c2f16961cbe0$export$80f3e147d781571c} from \"../interactions/focusSafely.mjs\";\nimport {getActiveElement as $23f2114a1b82827e$export$cd4e5573fbe2b576, getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {getCollectionId as $22bbea12c2567021$export$6aeb1680a0ae8741, isNonContiguousSelectionModifier as $22bbea12c2567021$export$d3e3bd3e26688c04} from \"./utils.mjs\";\nimport {isCtrlKeyPressed as $bb39c0fc1c19b34c$export$16792effe837dba3} from \"../utils/keyboard.mjs\";\nimport {isTabbable as $3b8b240c1bf84ab9$export$bebd5a1431fec25d} from \"../utils/isFocusable.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {moveVirtualFocus as $b72f3f7b3b5f42c6$export$76e4e37e5339496d} from \"../focus/virtualFocus.mjs\";\nimport {openLink as $caaf0dd3060ed57c$export$95185d699e05d4d7, useRouter as $caaf0dd3060ed57c$export$9a302a45f65d0572} from \"../utils/openLink.mjs\";\nimport {usePress as $d27d541f9569d26d$export$45712eceda6fad21} from \"../interactions/usePress.mjs\";\nimport {useId as $390e54f620492c70$export$f680877a34711e37} from \"../utils/useId.mjs\";\nimport {useLongPress as $7b01448eaad0fe7c$export$c24ed0104d07eab9} from \"../interactions/useLongPress.mjs\";\nimport {useEffect as $iQN4Y$useEffect, useRef as $iQN4Y$useRef} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\n\n\nfunction $f6ba6936bfd098a0$export$ecf600387e221c37(options) {\n    let { id: id, selectionManager: manager, key: key, ref: ref, shouldSelectOnPressUp: shouldSelectOnPressUp, shouldUseVirtualFocus: shouldUseVirtualFocus, focus: focus, isDisabled: isDisabled, onAction: onAction, allowsDifferentPressOrigin: allowsDifferentPressOrigin, linkBehavior: linkBehavior = 'action' } = options;\n    let router = (0, $caaf0dd3060ed57c$export$9a302a45f65d0572)();\n    id = (0, $390e54f620492c70$export$f680877a34711e37)(id);\n    let onSelect = (e)=>{\n        if (e.pointerType === 'keyboard' && (0, $22bbea12c2567021$export$d3e3bd3e26688c04)(e)) manager.toggleSelection(key);\n        else {\n            if (manager.selectionMode === 'none') return;\n            if (manager.isLink(key)) {\n                if (linkBehavior === 'selection' && ref.current) {\n                    let itemProps = manager.getItemProps(key);\n                    router.open(ref.current, e, itemProps.href, itemProps.routerOptions);\n                    // Always set selected keys back to what they were so that select and combobox close.\n                    manager.setSelectedKeys(manager.selectedKeys);\n                    return;\n                } else if (linkBehavior === 'override' || linkBehavior === 'none') return;\n            }\n            if (manager.selectionMode === 'single') {\n                if (manager.isSelected(key) && !manager.disallowEmptySelection) manager.toggleSelection(key);\n                else manager.replaceSelection(key);\n            } else if (e && e.shiftKey) manager.extendSelection(key);\n            else if (manager.selectionBehavior === 'toggle' || e && ((0, $bb39c0fc1c19b34c$export$16792effe837dba3)(e) || e.pointerType === 'touch' || e.pointerType === 'virtual')) // if touch or virtual (VO) then we just want to toggle, otherwise it's impossible to multi select because they don't have modifier keys\n            manager.toggleSelection(key);\n            else manager.replaceSelection(key);\n        }\n    };\n    // Focus the associated DOM node when this item becomes the focusedKey\n    // TODO: can't make this useLayoutEffect bacause it breaks menus inside dialogs\n    // However, if this is a useEffect, it runs twice and dispatches two blur events and immediately sets\n    // aria-activeDescendant in useAutocomplete... I've worked around this for now\n    (0, $iQN4Y$useEffect)(()=>{\n        let isFocused = key === manager.focusedKey;\n        if (isFocused && manager.isFocused) {\n            if (!shouldUseVirtualFocus) {\n                if (focus) focus();\n                else if ((0, $23f2114a1b82827e$export$cd4e5573fbe2b576)() !== ref.current && ref.current) (0, $f192c2f16961cbe0$export$80f3e147d781571c)(ref.current);\n            } else (0, $b72f3f7b3b5f42c6$export$76e4e37e5339496d)(ref.current);\n        }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [\n        ref,\n        key,\n        manager.focusedKey,\n        manager.childFocusStrategy,\n        manager.isFocused,\n        shouldUseVirtualFocus\n    ]);\n    isDisabled = isDisabled || manager.isDisabled(key);\n    // Set tabIndex to 0 if the element is focused, or -1 otherwise so that only the last focused\n    // item is tabbable.  If using virtual focus, don't set a tabIndex at all so that VoiceOver\n    // on iOS 14 doesn't try to move real DOM focus to the item anyway.\n    let itemProps = {};\n    if (!shouldUseVirtualFocus && !isDisabled) itemProps = {\n        tabIndex: key === manager.focusedKey ? 0 : -1,\n        onFocus (e) {\n            if ((0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e) === ref.current) manager.setFocusedKey(key);\n        }\n    };\n    else if (isDisabled) itemProps.onMouseDown = (e)=>{\n        // Prevent focus going to the body when clicking on a disabled item.\n        e.preventDefault();\n    };\n    (0, $iQN4Y$useEffect)(()=>{\n        if (isDisabled && manager.focusedKey === key) manager.setFocusedKey(null);\n    }, [\n        manager,\n        isDisabled,\n        key\n    ]);\n    // With checkbox selection, onAction (i.e. navigation) becomes primary, and occurs on a single click of the row.\n    // Clicking the checkbox enters selection mode, after which clicking anywhere on any row toggles selection for that row.\n    // With highlight selection, onAction is secondary, and occurs on double click. Single click selects the row.\n    // With touch, onAction occurs on single tap, and long press enters selection mode.\n    let isLinkOverride = manager.isLink(key) && linkBehavior === 'override';\n    let isActionOverride = onAction && options['UNSTABLE_itemBehavior'] === 'action';\n    let hasLinkAction = manager.isLink(key) && linkBehavior !== 'selection' && linkBehavior !== 'none';\n    let allowsSelection = !isDisabled && manager.canSelectItem(key) && !isLinkOverride && !isActionOverride;\n    let allowsActions = (onAction || hasLinkAction) && !isDisabled;\n    let hasPrimaryAction = allowsActions && (manager.selectionBehavior === 'replace' ? !allowsSelection : !allowsSelection || manager.isEmpty);\n    let hasSecondaryAction = allowsActions && allowsSelection && manager.selectionBehavior === 'replace';\n    let hasAction = hasPrimaryAction || hasSecondaryAction;\n    let modality = (0, $iQN4Y$useRef)(null);\n    let longPressEnabled = hasAction && allowsSelection;\n    let longPressEnabledOnPressStart = (0, $iQN4Y$useRef)(false);\n    let hadPrimaryActionOnPressStart = (0, $iQN4Y$useRef)(false);\n    let collectionItemProps = manager.getItemProps(key);\n    let performAction = (e)=>{\n        if (onAction) {\n            onAction();\n            ref.current?.dispatchEvent(new CustomEvent('react-aria-item-action', {\n                bubbles: true\n            }));\n        }\n        if (hasLinkAction && ref.current) router.open(ref.current, e, collectionItemProps.href, collectionItemProps.routerOptions);\n    };\n    // By default, selection occurs on pointer down. This can be strange if selecting an\n    // item causes the UI to disappear immediately (e.g. menus).\n    // If shouldSelectOnPressUp is true, we use onPressUp instead of onPressStart.\n    // onPress requires a pointer down event on the same element as pointer up. For menus,\n    // we want to be able to have the pointer down on the trigger that opens the menu and\n    // the pointer up on the menu item rather than requiring a separate press.\n    // For keyboard events, selection still occurs on key down.\n    let itemPressProps = {\n        ref: ref\n    };\n    if (shouldSelectOnPressUp) {\n        // oxlint-disable-next-line react/react-compiler\n        itemPressProps.onPressStart = (e)=>{\n            modality.current = e.pointerType;\n            longPressEnabledOnPressStart.current = longPressEnabled;\n            if (e.pointerType === 'keyboard' && (!hasAction || $f6ba6936bfd098a0$var$isSelectionKey(e.key))) onSelect(e);\n        };\n        // If allowsDifferentPressOrigin and interacting with mouse, make selection happen on pressUp (e.g. open menu on press down, selection on menu item happens on press up.)\n        // Otherwise, have selection happen onPress (prevents listview row selection when clicking on interactable elements in the row)\n        if (!allowsDifferentPressOrigin) // oxlint-disable-next-line react/react-compiler\n        itemPressProps.onPress = (e)=>{\n            if (hasPrimaryAction || hasSecondaryAction && e.pointerType !== 'mouse') {\n                if (e.pointerType === 'keyboard' && !$f6ba6936bfd098a0$var$isActionKey(e.key)) return;\n                performAction(e);\n            } else if (e.pointerType !== 'keyboard' && allowsSelection) onSelect(e);\n        };\n        else {\n            // oxlint-disable-next-line react/react-compiler\n            itemPressProps.onPressUp = hasPrimaryAction ? undefined : (e)=>{\n                if (e.pointerType === 'mouse' && allowsSelection) onSelect(e);\n            };\n            // oxlint-disable-next-line react/react-compiler\n            itemPressProps.onPress = hasPrimaryAction ? performAction : (e)=>{\n                if (e.pointerType !== 'keyboard' && e.pointerType !== 'mouse' && allowsSelection) onSelect(e);\n            };\n        }\n    } else {\n        // oxlint-disable-next-line react/react-compiler\n        itemPressProps.onPressStart = (e)=>{\n            modality.current = e.pointerType;\n            longPressEnabledOnPressStart.current = longPressEnabled;\n            hadPrimaryActionOnPressStart.current = hasPrimaryAction;\n            // Select on mouse down unless there is a primary action which will occur on mouse up.\n            // For keyboard, select on key down. If there is an action, the Space key selects on key down,\n            // and the Enter key performs onAction on key up.\n            if (allowsSelection && (e.pointerType === 'mouse' && !hasPrimaryAction || e.pointerType === 'keyboard' && (!allowsActions || $f6ba6936bfd098a0$var$isSelectionKey(e.key)))) onSelect(e);\n        };\n        // oxlint-disable-next-line react/react-compiler\n        itemPressProps.onPress = (e)=>{\n            // Selection occurs on touch up. Primary actions always occur on pointer up.\n            // Both primary and secondary actions occur on Enter key up. The only exception\n            // is secondary actions, which occur on double click with a mouse.\n            if (e.pointerType === 'touch' || e.pointerType === 'pen' || e.pointerType === 'virtual' || e.pointerType === 'keyboard' && hasAction && $f6ba6936bfd098a0$var$isActionKey(e.key) || e.pointerType === 'mouse' && hadPrimaryActionOnPressStart.current) {\n                if (hasAction) performAction(e);\n                else if (allowsSelection) onSelect(e);\n            }\n        };\n    }\n    let collectionId = (0, $22bbea12c2567021$export$6aeb1680a0ae8741)(manager.collection);\n    itemProps['data-collection'] = collectionId;\n    itemProps['data-key'] = key;\n    // oxlint-disable-next-line react/react-compiler\n    itemPressProps.preventFocusOnPress = shouldUseVirtualFocus;\n    // When using virtual focus, make sure the focused key gets updated on press.\n    if (shouldUseVirtualFocus) // oxlint-disable-next-line react/react-compiler\n    itemPressProps = (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(itemPressProps, {\n        onPressStart (e) {\n            if (e.pointerType !== 'touch') {\n                manager.setFocused(true);\n                manager.setFocusedKey(key);\n            }\n        },\n        onPress (e) {\n            if (e.pointerType === 'touch') {\n                manager.setFocused(true);\n                manager.setFocusedKey(key);\n            }\n        }\n    });\n    if (collectionItemProps) {\n        for (let key of [\n            'onPressStart',\n            'onPressEnd',\n            'onPressChange',\n            'onPress',\n            'onPressUp',\n            'onClick'\n        ])if (collectionItemProps[key]) // oxlint-disable-next-line react/react-compiler\n        itemPressProps[key] = (0, $a4e76a5424781910$export$e08e3b67e392101e)(itemPressProps[key], collectionItemProps[key]);\n    }\n    let { pressProps: pressProps, isPressed: isPressed } = (0, $d27d541f9569d26d$export$45712eceda6fad21)(itemPressProps);\n    // Double clicking with a mouse with selectionBehavior = 'replace' performs an action.\n    let onDoubleClick = hasSecondaryAction ? (e)=>{\n        if (modality.current === 'mouse') {\n            e.stopPropagation();\n            e.preventDefault();\n            performAction(e);\n        }\n    } : undefined;\n    // Long pressing an item with touch when selectionBehavior = 'replace' switches the selection behavior\n    // to 'toggle'. This changes the single tap behavior from performing an action (i.e. navigating) to\n    // selecting, and may toggle the appearance of a UI affordance like checkboxes on each item.\n    let { longPressProps: longPressProps } = (0, $7b01448eaad0fe7c$export$c24ed0104d07eab9)({\n        isDisabled: !longPressEnabled,\n        onLongPress (e) {\n            if (e.pointerType === 'touch') {\n                onSelect(e);\n                manager.setSelectionBehavior('toggle');\n            }\n        }\n    });\n    // Prevent native drag and drop on long press if we also select on long press.\n    // Once the user is in selection mode, they can long press again to drag.\n    // Use a capturing listener to ensure this runs before useDrag, regardless of\n    // the order the props get merged.\n    let onDragStartCapture = (e)=>{\n        if (modality.current === 'touch' && longPressEnabledOnPressStart.current) e.preventDefault();\n    };\n    // Prevent default on link clicks so that we control exactly\n    // when they open (to match selection behavior).\n    let onClick = linkBehavior !== 'none' && manager.isLink(key) ? (e)=>{\n        if (!(0, $caaf0dd3060ed57c$export$95185d699e05d4d7).isOpening) e.preventDefault();\n    } : undefined;\n    let mergedItemProps = (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(// oxlint-disable-next-line react/react-compiler\n    itemProps, allowsSelection || hasPrimaryAction || shouldUseVirtualFocus && !isDisabled ? pressProps : {}, longPressEnabled ? longPressProps : {}, // oxlint-disable-next-line react/react-compiler\n    {\n        onDoubleClick: onDoubleClick,\n        onDragStartCapture: onDragStartCapture,\n        onClick: onClick,\n        id: id\n    }, // Prevent DOM focus from moving on mouse down when using virtual focus\n    shouldUseVirtualFocus ? {\n        onMouseDown: (e)=>e.preventDefault()\n    } : undefined);\n    // Guard against presses triggering selection when they happen on interactive children or collection items from different collections\n    // will need to trigger selection if the target is itself a collection item belonging to the same collection parent (aka a cell in a row) but\n    // not if the target is a child of a different collections aka taggroup in table cell.\n    let isChildInteraction = (target)=>{\n        let el = target;\n        while(el && el !== ref.current){\n            let elCollection = el.getAttribute('data-collection');\n            if (elCollection != null) return elCollection !== collectionId;\n            el = el.parentElement;\n        }\n        return (0, $3b8b240c1bf84ab9$export$bebd5a1431fec25d)(target);\n    };\n    let baseOnPointerDown = mergedItemProps.onPointerDown;\n    mergedItemProps.onPointerDown = (e)=>{\n        let target = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n        if (target && target !== ref.current && isChildInteraction(target)) {\n            e.stopPropagation();\n            return;\n        }\n        baseOnPointerDown?.(e);\n    };\n    let baseOnMouseDown = mergedItemProps.onMouseDown;\n    mergedItemProps.onMouseDown = (e)=>{\n        let target = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n        if (target && target !== ref.current && isChildInteraction(target)) {\n            e.stopPropagation();\n            return;\n        }\n        baseOnMouseDown?.(e);\n    };\n    return {\n        itemProps: mergedItemProps,\n        isPressed: isPressed,\n        isSelected: manager.isSelected(key),\n        isFocused: manager.isFocused && manager.focusedKey === key,\n        isDisabled: isDisabled,\n        allowsSelection: allowsSelection,\n        hasAction: hasAction\n    };\n}\nfunction $f6ba6936bfd098a0$var$isActionKey(key) {\n    return key === 'Enter';\n}\nfunction $f6ba6936bfd098a0$var$isSelectionKey(key) {\n    return key === ' ';\n}\n\n\nexport {$f6ba6936bfd098a0$export$ecf600387e221c37 as useSelectableItem};\n//# sourceMappingURL=useSelectableItem.mjs.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $cd5ea4b915021f1d$export$1005530eda016c13(node, collection) {\n    // New API: call collection.getChildren with the node key.\n    if (typeof collection.getChildren === 'function') return collection.getChildren(node.key);\n    // Old API: access childNodes directly.\n    return node.childNodes;\n}\nfunction $cd5ea4b915021f1d$export$fbdeaa6a76694f71(iterable) {\n    return $cd5ea4b915021f1d$export$5f3398f8733f90e2(iterable, 0);\n}\nfunction $cd5ea4b915021f1d$export$5f3398f8733f90e2(iterable, index) {\n    if (index < 0) return undefined;\n    let i = 0;\n    for (let item of iterable){\n        if (i === index) return item;\n        i++;\n    }\n}\nfunction $cd5ea4b915021f1d$export$7475b2c64539e4cf(iterable) {\n    let lastItem = undefined;\n    for (let value of iterable)lastItem = value;\n    return lastItem;\n}\nfunction $cd5ea4b915021f1d$export$8c434b3a7a4dad6(collection, a, b) {\n    // If the two nodes have the same parent, compare their indices.\n    if (a.parentKey === b.parentKey) return a.index - b.index;\n    // Otherwise, collect all of the ancestors from each node, and find the first one that doesn't match starting from the root.\n    // Include the base nodes in case we are comparing nodes of different levels so that we can compare the higher node to the lower level node's\n    // ancestor of the same level\n    let aAncestors = [\n        ...$cd5ea4b915021f1d$var$getAncestors(collection, a),\n        a\n    ];\n    let bAncestors = [\n        ...$cd5ea4b915021f1d$var$getAncestors(collection, b),\n        b\n    ];\n    let firstNonMatchingAncestor = aAncestors.slice(0, bAncestors.length).findIndex((a, i)=>a !== bAncestors[i]);\n    if (firstNonMatchingAncestor !== -1) {\n        // Compare the indices of two children within the common ancestor.\n        a = aAncestors[firstNonMatchingAncestor];\n        b = bAncestors[firstNonMatchingAncestor];\n        return a.index - b.index;\n    }\n    // If there isn't a non matching ancestor, we might be in a case where one of the nodes is the ancestor of the other.\n    if (aAncestors.findIndex((node)=>node === b) >= 0) return 1;\n    else if (bAncestors.findIndex((node)=>node === a) >= 0) return -1;\n    // 🤷\n    return -1;\n}\nfunction $cd5ea4b915021f1d$var$getAncestors(collection, node) {\n    let parents = [];\n    let currNode = node;\n    while(currNode?.parentKey != null){\n        currNode = collection.getItem(currNode.parentKey);\n        if (currNode) parents.unshift(currNode);\n    }\n    return parents;\n}\n\n\nexport {$cd5ea4b915021f1d$export$1005530eda016c13 as getChildNodes, $cd5ea4b915021f1d$export$fbdeaa6a76694f71 as getFirstItem, $cd5ea4b915021f1d$export$5f3398f8733f90e2 as getNthItem, $cd5ea4b915021f1d$export$7475b2c64539e4cf as getLastItem, $cd5ea4b915021f1d$export$8c434b3a7a4dad6 as compareNodeOrder};\n//# sourceMappingURL=getChildNodes.mjs.map\n","import {getChildNodes as $cd5ea4b915021f1d$export$1005530eda016c13} from \"./getChildNodes.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $2efe10d3f1f9e31e$var$cache = new WeakMap();\nfunction $2efe10d3f1f9e31e$export$77d5aafae4e095b2(collection) {\n    let count = $2efe10d3f1f9e31e$var$cache.get(collection);\n    if (count != null) return count;\n    // TS isn't smart enough to know we've ensured count is a number, so use a new variable\n    let counter = 0;\n    let countItems = (items)=>{\n        for (let item of items){\n            if (item.type === 'section') countItems((0, $cd5ea4b915021f1d$export$1005530eda016c13)(item, collection));\n            else if (item.type === 'item') counter++;\n        }\n    };\n    countItems(collection);\n    $2efe10d3f1f9e31e$var$cache.set(collection, counter);\n    return counter;\n}\n\n\nexport {$2efe10d3f1f9e31e$export$77d5aafae4e095b2 as getItemCount};\n//# sourceMappingURL=getItemCount.mjs.map\n","import {chain as $a4e76a5424781910$export$e08e3b67e392101e} from \"../utils/chain.mjs\";\nimport {filterDOMProps as $8e9d2fae0ecb9001$export$457c3d6518dd4c6f} from \"../utils/filterDOMProps.mjs\";\nimport {getItemId as $cd088b5c0d7b27b4$export$9145995848b05025, listData as $cd088b5c0d7b27b4$export$3585ede4d035bf14} from \"./utils.mjs\";\nimport {isFocusVisible as $8f5a2122b0992be3$export$b9b3dfddab17db27} from \"../interactions/useFocusVisible.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {useSelectableItem as $f6ba6936bfd098a0$export$ecf600387e221c37} from \"../selection/useSelectableItem.mjs\";\nimport {useHover as $e969f22b6713ca4a$export$ae780daf29e6d456} from \"../interactions/useHover.mjs\";\nimport {useLinkProps as $caaf0dd3060ed57c$export$7e924b3091a3bd18} from \"../utils/openLink.mjs\";\nimport {useSlotId as $390e54f620492c70$export$b4cc09c592e8fdb8} from \"../utils/useId.mjs\";\nimport {getItemCount as $i8Bql$getItemCount} from \"react-stately/private/collections/getItemCount\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\nfunction $dae966e193913d1b$export$497855f14858aa34(props, state, ref) {\n    let { key: key } = props;\n    let data = (0, $cd088b5c0d7b27b4$export$3585ede4d035bf14).get(state);\n    let isDisabled = props.isDisabled ?? state.selectionManager.isDisabled(key);\n    let isSelected = props.isSelected ?? state.selectionManager.isSelected(key);\n    let shouldSelectOnPressUp = props.shouldSelectOnPressUp ?? data?.shouldSelectOnPressUp;\n    let shouldFocusOnHover = props.shouldFocusOnHover ?? data?.shouldFocusOnHover;\n    let shouldUseVirtualFocus = props.shouldUseVirtualFocus ?? data?.shouldUseVirtualFocus;\n    let isVirtualized = props.isVirtualized ?? data?.isVirtualized;\n    let labelId = (0, $390e54f620492c70$export$b4cc09c592e8fdb8)();\n    let descriptionId = (0, $390e54f620492c70$export$b4cc09c592e8fdb8)();\n    let optionProps = {\n        role: 'option',\n        'aria-disabled': isDisabled || undefined,\n        'aria-selected': state.selectionManager.selectionMode !== 'none' ? isSelected : undefined,\n        'aria-label': props['aria-label'],\n        'aria-labelledby': labelId,\n        'aria-describedby': descriptionId\n    };\n    let item = state.collection.getItem(key);\n    if (isVirtualized) {\n        let index = Number(item?.index);\n        optionProps['aria-posinset'] = Number.isNaN(index) ? undefined : index + 1;\n        optionProps['aria-setsize'] = (0, $i8Bql$getItemCount)(state.collection);\n    }\n    let onAction = data?.onAction ? ()=>data?.onAction?.(key) : undefined;\n    let id = (0, $cd088b5c0d7b27b4$export$9145995848b05025)(state, key);\n    let { itemProps: itemProps, isPressed: isPressed, isFocused: isFocused, hasAction: hasAction, allowsSelection: allowsSelection } = (0, $f6ba6936bfd098a0$export$ecf600387e221c37)({\n        selectionManager: state.selectionManager,\n        key: key,\n        ref: ref,\n        shouldSelectOnPressUp: shouldSelectOnPressUp,\n        allowsDifferentPressOrigin: shouldSelectOnPressUp && shouldFocusOnHover,\n        isVirtualized: isVirtualized,\n        shouldUseVirtualFocus: shouldUseVirtualFocus,\n        isDisabled: isDisabled,\n        onAction: onAction || item?.props?.onAction ? (0, $a4e76a5424781910$export$e08e3b67e392101e)(item?.props?.onAction, onAction) : undefined,\n        linkBehavior: data?.linkBehavior,\n        // @ts-ignore\n        UNSTABLE_itemBehavior: data?.['UNSTABLE_itemBehavior'],\n        id: id\n    });\n    let { hoverProps: hoverProps } = (0, $e969f22b6713ca4a$export$ae780daf29e6d456)({\n        isDisabled: isDisabled || !shouldFocusOnHover,\n        onHoverStart () {\n            if (!(0, $8f5a2122b0992be3$export$b9b3dfddab17db27)()) {\n                state.selectionManager.setFocused(true);\n                state.selectionManager.setFocusedKey(key);\n            }\n        }\n    });\n    let domProps = (0, $8e9d2fae0ecb9001$export$457c3d6518dd4c6f)(item?.props);\n    delete domProps.id;\n    let linkProps = (0, $caaf0dd3060ed57c$export$7e924b3091a3bd18)(item?.props);\n    return {\n        optionProps: {\n            ...optionProps,\n            ...(0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(domProps, itemProps, hoverProps, linkProps),\n            id: id\n        },\n        labelProps: {\n            id: labelId\n        },\n        descriptionProps: {\n            id: descriptionId\n        },\n        isFocused: isFocused,\n        isFocusVisible: isFocused && state.selectionManager.isFocused && (0, $8f5a2122b0992be3$export$b9b3dfddab17db27)(),\n        isSelected: isSelected,\n        isDisabled: isDisabled,\n        isPressed: isPressed,\n        allowsSelection: allowsSelection,\n        hasAction: hasAction\n    };\n}\n\n\nexport {$dae966e193913d1b$export$497855f14858aa34 as useOption};\n//# sourceMappingURL=useOption.mjs.map\n","import {useId as $390e54f620492c70$export$f680877a34711e37} from \"../utils/useId.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $3d6c959d2ef57b72$export$c3f9f39876e4bc7(props) {\n    let { heading: heading, 'aria-label': ariaLabel } = props;\n    let headingId = (0, $390e54f620492c70$export$f680877a34711e37)();\n    return {\n        itemProps: {\n            role: 'presentation'\n        },\n        headingProps: heading ? {\n            // Technically, listbox cannot contain headings according to ARIA.\n            // We hide the heading from assistive technology, using role=\"presentation\",\n            // and only use it as a visual label for the nested group.\n            id: headingId,\n            role: 'presentation',\n            onMouseDown: (e)=>{\n                // Prevent DOM focus from moving on mouse down when using virtual focus\n                e.preventDefault();\n            }\n        } : {},\n        groupProps: {\n            role: 'group',\n            'aria-label': ariaLabel,\n            'aria-labelledby': heading ? headingId : undefined\n        }\n    };\n}\n\n\nexport {$3d6c959d2ef57b72$export$c3f9f39876e4bc7 as useListBoxSection};\n//# sourceMappingURL=useListBoxSection.mjs.map\n","import {version as $gfwmN$version} from \"react\";\n\n\nfunction $b24d1bc31a0f941d$export$a9d04c5684123369(value) {\n    const pieces = (0, $gfwmN$version).split('.');\n    const major = parseInt(pieces[0], 10);\n    if (major >= 19) return value;\n    // compatibility with React < 19\n    return value ? 'true' : undefined;\n}\n\n\nexport {$b24d1bc31a0f941d$export$a9d04c5684123369 as inertValue};\n//# sourceMappingURL=inertValue.mjs.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ class $f664a81d022446b5$export$d085fb9e920b5ca7 {\n    constructor(nodes){\n        this.keyMap = new Map();\n        this.firstKey = null;\n        this.lastKey = null;\n        this.iterable = nodes;\n        let visit = (node)=>{\n            this.keyMap.set(node.key, node);\n            if (node.childNodes && node.type === 'section') for (let child of node.childNodes)visit(child);\n        };\n        for (let node of nodes)visit(node);\n        let last = null;\n        let index = 0;\n        let size = 0;\n        for (let [key, node] of this.keyMap){\n            if (last) {\n                last.nextKey = key;\n                node.prevKey = last.key;\n            } else {\n                this.firstKey = key;\n                node.prevKey = undefined;\n            }\n            if (node.type === 'item') node.index = index++;\n            // Only count sections and items when determining size so that\n            // loaders and separators in RAC/S2 don't influence the emptyState determination\n            if (node.type === 'section' || node.type === 'item') size++;\n            last = node;\n            // Set nextKey as undefined since this might be the last node\n            // If it isn't the last node, last.nextKey will properly set at start of new loop\n            last.nextKey = undefined;\n        }\n        this._size = size;\n        this.lastKey = last?.key ?? null;\n    }\n    *[Symbol.iterator]() {\n        yield* this.iterable;\n    }\n    get size() {\n        return this._size;\n    }\n    getKeys() {\n        return this.keyMap.keys();\n    }\n    getKeyBefore(key) {\n        let node = this.keyMap.get(key);\n        return node ? node.prevKey ?? null : null;\n    }\n    getKeyAfter(key) {\n        let node = this.keyMap.get(key);\n        return node ? node.nextKey ?? null : null;\n    }\n    getFirstKey() {\n        return this.firstKey;\n    }\n    getLastKey() {\n        return this.lastKey;\n    }\n    getItem(key) {\n        return this.keyMap.get(key) ?? null;\n    }\n    at(idx) {\n        const keys = [\n            ...this.getKeys()\n        ];\n        return this.getItem(keys[idx]);\n    }\n    getChildren(key) {\n        let node = this.keyMap.get(key);\n        return node?.childNodes || [];\n    }\n}\n\n\nexport {$f664a81d022446b5$export$d085fb9e920b5ca7 as ListCollection};\n//# sourceMappingURL=ListCollection.mjs.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ class $8b2540e09867b15e$export$52baac22726c72bf extends Set {\n    constructor(keys, anchorKey, currentKey){\n        super(keys);\n        if (keys instanceof $8b2540e09867b15e$export$52baac22726c72bf) {\n            this.anchorKey = anchorKey ?? keys.anchorKey;\n            this.currentKey = currentKey ?? keys.currentKey;\n        } else {\n            this.anchorKey = anchorKey ?? null;\n            this.currentKey = currentKey ?? null;\n        }\n    }\n}\n\n\nexport {$8b2540e09867b15e$export$52baac22726c72bf as Selection};\n//# sourceMappingURL=Selection.mjs.map\n","import {Selection as $8b2540e09867b15e$export$52baac22726c72bf} from \"./Selection.mjs\";\nimport {useControlledState as $3e6197669829fe11$export$40bfa8c7b0832715} from \"../utils/useControlledState.mjs\";\nimport {useRef as $7w3VE$useRef, useState as $7w3VE$useState, useMemo as $7w3VE$useMemo, useEffect as $7w3VE$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nfunction $60f19cefd567a3e4$var$equalSets(setA, setB) {\n    if (setA.size !== setB.size) return false;\n    for (let item of setA){\n        if (!setB.has(item)) return false;\n    }\n    return true;\n}\nfunction $60f19cefd567a3e4$export$253fe78d46329472(props) {\n    let { selectionMode: selectionMode = 'none', disallowEmptySelection: disallowEmptySelection = false, allowDuplicateSelectionEvents: allowDuplicateSelectionEvents, selectionBehavior: selectionBehaviorProp = 'toggle', disabledBehavior: disabledBehavior = 'all' } = props;\n    // We want synchronous updates to `isFocused` and `focusedKey` after their setters are called.\n    // But we also need to trigger a react re-render. So, we have both a ref (sync) and state (async).\n    let isFocusedRef = (0, $7w3VE$useRef)(false);\n    let [, setFocused] = (0, $7w3VE$useState)(false);\n    let focusedKeyRef = (0, $7w3VE$useRef)(null);\n    let childFocusStrategyRef = (0, $7w3VE$useRef)(null);\n    let [, setFocusedKey] = (0, $7w3VE$useState)(null);\n    let selectedKeysProp = (0, $7w3VE$useMemo)(()=>$60f19cefd567a3e4$var$convertSelection(props.selectedKeys), [\n        props.selectedKeys\n    ]);\n    let defaultSelectedKeys = (0, $7w3VE$useMemo)(()=>$60f19cefd567a3e4$var$convertSelection(props.defaultSelectedKeys, new (0, $8b2540e09867b15e$export$52baac22726c72bf)()), [\n        props.defaultSelectedKeys\n    ]);\n    let [selectedKeys, setSelectedKeys] = (0, $3e6197669829fe11$export$40bfa8c7b0832715)(selectedKeysProp, defaultSelectedKeys, props.onSelectionChange);\n    let disabledKeysProp = (0, $7w3VE$useMemo)(()=>props.disabledKeys ? new Set(props.disabledKeys) : new Set(), [\n        props.disabledKeys\n    ]);\n    let [selectionBehavior, setSelectionBehavior] = (0, $7w3VE$useState)(selectionBehaviorProp);\n    // If the selectionBehavior prop is set to replace, but the current state is toggle (e.g. due to long press\n    // to enter selection mode on touch), and the selection becomes empty, reset the selection behavior.\n    if (selectionBehaviorProp === 'replace' && selectionBehavior === 'toggle' && typeof selectedKeys === 'object' && selectedKeys.size === 0) setSelectionBehavior('replace');\n    // If the selectionBehavior prop changes, update the state as well.\n    let lastSelectionBehavior = (0, $7w3VE$useRef)(selectionBehaviorProp);\n    (0, $7w3VE$useEffect)(()=>{\n        if (selectionBehaviorProp !== lastSelectionBehavior.current) {\n            setSelectionBehavior(selectionBehaviorProp);\n            lastSelectionBehavior.current = selectionBehaviorProp;\n        }\n    }, [\n        selectionBehaviorProp\n    ]);\n    return {\n        selectionMode: selectionMode,\n        disallowEmptySelection: disallowEmptySelection,\n        selectionBehavior: selectionBehavior,\n        setSelectionBehavior: setSelectionBehavior,\n        get isFocused () {\n            return isFocusedRef.current;\n        },\n        setFocused (f) {\n            isFocusedRef.current = f;\n            setFocused(f);\n        },\n        get focusedKey () {\n            return focusedKeyRef.current;\n        },\n        get childFocusStrategy () {\n            return childFocusStrategyRef.current;\n        },\n        setFocusedKey (k, childFocusStrategy = 'first') {\n            focusedKeyRef.current = k;\n            childFocusStrategyRef.current = childFocusStrategy;\n            setFocusedKey(k);\n        },\n        selectedKeys: selectedKeys,\n        setSelectedKeys (keys) {\n            if (allowDuplicateSelectionEvents || !$60f19cefd567a3e4$var$equalSets(keys, selectedKeys)) setSelectedKeys(keys);\n        },\n        disabledKeys: disabledKeysProp,\n        disabledBehavior: disabledBehavior\n    };\n}\nfunction $60f19cefd567a3e4$var$convertSelection(selection, defaultValue) {\n    if (!selection) return defaultValue;\n    return selection === 'all' ? 'all' : new (0, $8b2540e09867b15e$export$52baac22726c72bf)(selection);\n}\n\n\nexport {$60f19cefd567a3e4$export$253fe78d46329472 as useMultipleSelectionState};\n//# sourceMappingURL=useMultipleSelectionState.mjs.map\n","import {compareNodeOrder as $cd5ea4b915021f1d$export$8c434b3a7a4dad6, getChildNodes as $cd5ea4b915021f1d$export$1005530eda016c13, getFirstItem as $cd5ea4b915021f1d$export$fbdeaa6a76694f71} from \"../collections/getChildNodes.mjs\";\nimport {Selection as $8b2540e09867b15e$export$52baac22726c72bf} from \"./Selection.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nclass $4a07ac835f260f78$export$6c8a5aaad13c9852 {\n    constructor(collection, state, options){\n        this.collection = collection;\n        this.state = state;\n        this.allowsCellSelection = options?.allowsCellSelection ?? false;\n        this._isSelectAll = null;\n        this.layoutDelegate = options?.layoutDelegate || null;\n        this.fullCollection = options?.fullCollection || null;\n    }\n    /**\n   * The type of selection that is allowed in the collection.\n   */ get selectionMode() {\n        return this.state.selectionMode;\n    }\n    /**\n   * Whether the collection allows empty selection.\n   */ get disallowEmptySelection() {\n        return this.state.disallowEmptySelection;\n    }\n    /**\n   * The selection behavior for the collection.\n   */ get selectionBehavior() {\n        return this.state.selectionBehavior;\n    }\n    /**\n   * Sets the selection behavior for the collection.\n   */ setSelectionBehavior(selectionBehavior) {\n        this.state.setSelectionBehavior(selectionBehavior);\n    }\n    /**\n   * Whether the collection is currently focused.\n   */ get isFocused() {\n        return this.state.isFocused;\n    }\n    /**\n   * Sets whether the collection is focused.\n   */ setFocused(isFocused) {\n        this.state.setFocused(isFocused);\n    }\n    /**\n   * The current focused key in the collection.\n   */ get focusedKey() {\n        return this.state.focusedKey;\n    }\n    /** Whether the first or last child of the focused key should receive focus. */ get childFocusStrategy() {\n        return this.state.childFocusStrategy;\n    }\n    /**\n   * Sets the focused key.\n   */ setFocusedKey(key, childFocusStrategy) {\n        if (key == null || this.collection.getItem(key)) this.state.setFocusedKey(key, childFocusStrategy);\n    }\n    /**\n   * The currently selected keys in the collection.\n   */ get selectedKeys() {\n        return this.state.selectedKeys === 'all' ? new Set(this.getSelectAllKeys()) : this.state.selectedKeys;\n    }\n    /**\n   * The raw selection value for the collection.\n   * Either 'all' for select all, or a set of keys.\n   */ get rawSelection() {\n        return this.state.selectedKeys;\n    }\n    /**\n   * Returns whether a key is selected.\n   */ isSelected(key) {\n        if (this.state.selectionMode === 'none') return false;\n        let mappedKey = this.getKey(key);\n        if (mappedKey == null) return false;\n        return this.state.selectedKeys === 'all' ? this.canSelectItem(mappedKey) : this.state.selectedKeys.has(mappedKey);\n    }\n    /**\n   * Whether the selection is empty.\n   */ get isEmpty() {\n        return this.state.selectedKeys !== 'all' && this.state.selectedKeys.size === 0;\n    }\n    /**\n   * Whether all items in the collection are selected.\n   */ get isSelectAll() {\n        if (this.isEmpty) return false;\n        if (this.state.selectedKeys === 'all') return true;\n        if (this._isSelectAll != null) return this._isSelectAll;\n        let allKeys = this.getSelectAllKeys();\n        let selectedKeys = this.state.selectedKeys;\n        this._isSelectAll = allKeys.every((k)=>selectedKeys.has(k));\n        return this._isSelectAll;\n    }\n    get firstSelectedKey() {\n        let first = null;\n        for (let key of this.state.selectedKeys){\n            let item = this.collection.getItem(key);\n            if (!first || item && (0, $cd5ea4b915021f1d$export$8c434b3a7a4dad6)(this.collection, item, first) < 0) first = item;\n        }\n        return first?.key ?? null;\n    }\n    get lastSelectedKey() {\n        let last = null;\n        for (let key of this.state.selectedKeys){\n            let item = this.collection.getItem(key);\n            if (!last || item && (0, $cd5ea4b915021f1d$export$8c434b3a7a4dad6)(this.collection, item, last) > 0) last = item;\n        }\n        return last?.key ?? null;\n    }\n    get disabledKeys() {\n        return this.state.disabledKeys;\n    }\n    get disabledBehavior() {\n        return this.state.disabledBehavior;\n    }\n    /**\n   * Extends the selection to the given key.\n   */ extendSelection(toKey) {\n        if (this.selectionMode === 'none') return;\n        if (this.selectionMode === 'single') {\n            this.replaceSelection(toKey);\n            return;\n        }\n        let mappedToKey = this.getKey(toKey);\n        if (mappedToKey == null) return;\n        let selection;\n        // Only select the one key if coming from a select all.\n        if (this.state.selectedKeys === 'all') selection = new (0, $8b2540e09867b15e$export$52baac22726c72bf)([\n            mappedToKey\n        ], mappedToKey, mappedToKey);\n        else {\n            let selectedKeys = this.state.selectedKeys;\n            let anchorKey = selectedKeys.anchorKey ?? mappedToKey;\n            selection = new (0, $8b2540e09867b15e$export$52baac22726c72bf)(selectedKeys, anchorKey, mappedToKey);\n            for (let key of this.getKeyRange(anchorKey, selectedKeys.currentKey ?? mappedToKey))selection.delete(key);\n            for (let key of this.getKeyRange(mappedToKey, anchorKey))if (this.canSelectItem(key)) selection.add(key);\n        }\n        this.state.setSelectedKeys(selection);\n    }\n    getKeyRange(from, to) {\n        let fromItem = this.collection.getItem(from);\n        let toItem = this.collection.getItem(to);\n        if (fromItem && toItem) {\n            if ((0, $cd5ea4b915021f1d$export$8c434b3a7a4dad6)(this.collection, fromItem, toItem) <= 0) return this.getKeyRangeInternal(from, to);\n            return this.getKeyRangeInternal(to, from);\n        }\n        return [];\n    }\n    getKeyRangeInternal(from, to) {\n        if (this.layoutDelegate?.getKeyRange) return this.layoutDelegate.getKeyRange(from, to);\n        let keys = [];\n        let key = from;\n        while(key != null){\n            let item = this.collection.getItem(key);\n            if (item && (item.type === 'item' || item.type === 'cell' && this.allowsCellSelection)) keys.push(key);\n            if (key === to) return keys;\n            key = this.collection.getKeyAfter(key);\n        }\n        return [];\n    }\n    getKey(key) {\n        let item = this.collection.getItem(key);\n        if (!item) // ¯\\_(ツ)_/¯\n        return key;\n        // If cell selection is allowed, just return the key.\n        if (item.type === 'cell' && this.allowsCellSelection) return key;\n        // Find a parent item to select\n        while(item && item.type !== 'item' && item.parentKey != null)item = this.collection.getItem(item.parentKey);\n        if (!item || item.type !== 'item') return null;\n        return item.key;\n    }\n    /**\n   * Toggles whether the given key is selected.\n   */ toggleSelection(key) {\n        if (this.selectionMode === 'none') return;\n        if (this.selectionMode === 'single' && !this.isSelected(key)) {\n            this.replaceSelection(key);\n            return;\n        }\n        let mappedKey = this.getKey(key);\n        if (mappedKey == null) return;\n        let keys = new (0, $8b2540e09867b15e$export$52baac22726c72bf)(this.state.selectedKeys === 'all' ? this.getSelectAllKeys() : this.state.selectedKeys);\n        if (keys.has(mappedKey)) keys.delete(mappedKey);\n        else if (this.canSelectItem(mappedKey)) {\n            keys.add(mappedKey);\n            keys.anchorKey = mappedKey;\n            keys.currentKey = mappedKey;\n        }\n        if (this.disallowEmptySelection && keys.size === 0) return;\n        this.state.setSelectedKeys(keys);\n    }\n    /**\n   * Replaces the selection with only the given key.\n   */ replaceSelection(key) {\n        if (this.selectionMode === 'none') return;\n        let mappedKey = this.getKey(key);\n        if (mappedKey == null) return;\n        let selection = this.canSelectItem(mappedKey) ? new (0, $8b2540e09867b15e$export$52baac22726c72bf)([\n            mappedKey\n        ], mappedKey, mappedKey) : new (0, $8b2540e09867b15e$export$52baac22726c72bf)();\n        this.state.setSelectedKeys(selection);\n    }\n    /**\n   * Replaces the selection with the given keys.\n   */ setSelectedKeys(keys) {\n        if (this.selectionMode === 'none') return;\n        let selection = new (0, $8b2540e09867b15e$export$52baac22726c72bf)();\n        for (let key of keys){\n            let mappedKey = this.getKey(key);\n            if (mappedKey != null) {\n                selection.add(mappedKey);\n                if (this.selectionMode === 'single') break;\n            }\n        }\n        this.state.setSelectedKeys(selection);\n    }\n    getSelectAllKeys() {\n        // Use the full (unfiltered) collection when available so that materializing\n        // the 'all' selection includes items that are currently filtered out (e.g. by Autocomplete).\n        let collection = this.fullCollection ?? this.collection;\n        let keys = [];\n        let addKeys = (key)=>{\n            while(key != null){\n                if (this.canSelectItemIn(key, collection)) {\n                    let item = collection.getItem(key);\n                    if (item?.type === 'item') keys.push(key);\n                    // Add child keys. If cell selection is allowed, then include item children too.\n                    if (item?.hasChildNodes && (this.allowsCellSelection || item.type !== 'item')) addKeys((0, $cd5ea4b915021f1d$export$fbdeaa6a76694f71)((0, $cd5ea4b915021f1d$export$1005530eda016c13)(item, collection))?.key ?? null);\n                }\n                key = collection.getKeyAfter(key);\n            }\n        };\n        addKeys(collection.getFirstKey());\n        return keys;\n    }\n    /**\n   * Selects all items in the collection.\n   */ selectAll() {\n        if (!this.isSelectAll && this.selectionMode === 'multiple') this.state.setSelectedKeys('all');\n    }\n    /**\n   * Removes all keys from the selection.\n   */ clearSelection() {\n        if (!this.disallowEmptySelection && (this.state.selectedKeys === 'all' || this.state.selectedKeys.size > 0)) this.state.setSelectedKeys(new (0, $8b2540e09867b15e$export$52baac22726c72bf)());\n    }\n    /**\n   * Toggles between select all and an empty selection.\n   */ toggleSelectAll() {\n        if (this.isSelectAll) this.clearSelection();\n        else this.selectAll();\n    }\n    select(key, e) {\n        if (this.selectionMode === 'none') return;\n        if (this.selectionMode === 'single') {\n            if (this.isSelected(key) && !this.disallowEmptySelection) this.toggleSelection(key);\n            else this.replaceSelection(key);\n        } else if (this.selectionBehavior === 'toggle' || e && (e.pointerType === 'touch' || e.pointerType === 'virtual')) // if touch or virtual (VO) then we just want to toggle, otherwise it's impossible to multi select because they don't have modifier keys\n        this.toggleSelection(key);\n        else this.replaceSelection(key);\n    }\n    /**\n   * Returns whether the current selection is equal to the given selection.\n   */ isSelectionEqual(selection) {\n        if (selection === this.state.selectedKeys) return true;\n        // Check if the set of keys match.\n        let selectedKeys = this.selectedKeys;\n        if (selection.size !== selectedKeys.size) return false;\n        for (let key of selection){\n            if (!selectedKeys.has(key)) return false;\n        }\n        for (let key of selectedKeys){\n            if (!selection.has(key)) return false;\n        }\n        return true;\n    }\n    canSelectItem(key) {\n        return this.canSelectItemIn(key, this.collection);\n    }\n    canSelectItemIn(key, collection) {\n        if (this.state.selectionMode === 'none' || this.state.disabledKeys.has(key)) return false;\n        let item = collection.getItem(key);\n        if (!item || item?.props?.isDisabled || item.type === 'cell' && !this.allowsCellSelection) return false;\n        return true;\n    }\n    isDisabled(key) {\n        let item = this.collection.getItem(key);\n        return this.state.disabledBehavior === 'all' && (this.state.disabledKeys.has(key) || !!item?.props?.isDisabled) && item?.props?.disabledBehavior !== 'selection';\n    }\n    isLink(key) {\n        return !!this.collection.getItem(key)?.props?.href;\n    }\n    getItemProps(key) {\n        return this.collection.getItem(key)?.props;\n    }\n    withCollection(collection) {\n        return new $4a07ac835f260f78$export$6c8a5aaad13c9852(collection, this.state, {\n            allowsCellSelection: this.allowsCellSelection,\n            layoutDelegate: this.layoutDelegate || undefined,\n            fullCollection: this.fullCollection ?? this.collection\n        });\n    }\n}\n\n\nexport {$4a07ac835f260f78$export$6c8a5aaad13c9852 as SelectionManager};\n//# sourceMappingURL=SelectionManager.mjs.map\n","import $jO8i1$react from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nclass $bda7a7e55e1ff206$export$bf788dd355e3a401 {\n    build(props, context) {\n        this.context = context;\n        return $bda7a7e55e1ff206$var$iterable(()=>this.iterateCollection(props));\n    }\n    *iterateCollection(props) {\n        let { children: children, items: items } = props;\n        if ((0, $jO8i1$react).isValidElement(children) && children.type === (0, $jO8i1$react).Fragment) yield* this.iterateCollection({\n            children: children.props.children,\n            items: items\n        });\n        else if (typeof children === 'function') {\n            if (!items) throw new Error('props.children was a function but props.items is missing');\n            let index = 0;\n            for (let item of items){\n                yield* this.getFullNode({\n                    value: item,\n                    index: index\n                }, {\n                    renderer: children\n                });\n                index++;\n            }\n        } else {\n            let items = [];\n            (0, $jO8i1$react).Children.forEach(children, (child)=>{\n                if (child) items.push(child);\n            });\n            let index = 0;\n            for (let item of items){\n                let nodes = this.getFullNode({\n                    element: item,\n                    index: index\n                }, {});\n                for (let node of nodes){\n                    index++;\n                    yield node;\n                }\n            }\n        }\n    }\n    getKey(item, partialNode, state, parentKey) {\n        if (item.key != null) return item.key;\n        if (partialNode.type === 'cell' && partialNode.key != null) return `${parentKey}${partialNode.key}`;\n        let v = partialNode.value;\n        if (v != null) {\n            let key = v.key ?? v.id;\n            if (key == null) throw new Error('No key found for item');\n            return key;\n        }\n        return parentKey ? `${parentKey}.${partialNode.index}` : `$.${partialNode.index}`;\n    }\n    getChildState(state, partialNode) {\n        return {\n            renderer: partialNode.renderer || state.renderer\n        };\n    }\n    *getFullNode(partialNode, state, parentKey, parentNode) {\n        if ((0, $jO8i1$react).isValidElement(partialNode.element) && partialNode.element.type === (0, $jO8i1$react).Fragment) {\n            let children = [];\n            (0, $jO8i1$react).Children.forEach(partialNode.element.props.children, (child)=>{\n                children.push(child);\n            });\n            let index = partialNode.index ?? 0;\n            for (const child of children)yield* this.getFullNode({\n                element: child,\n                index: index++\n            }, state, parentKey, parentNode);\n            return;\n        }\n        // If there's a value instead of an element on the node, and a parent renderer function is available,\n        // use it to render an element for the value.\n        let element = partialNode.element;\n        if (!element && partialNode.value && state && state.renderer) {\n            let cached = this.cache.get(partialNode.value);\n            if (cached && (!cached.shouldInvalidate || !cached.shouldInvalidate(this.context))) {\n                cached.index = partialNode.index;\n                cached.parentKey = parentNode ? parentNode.key : null;\n                yield cached;\n                return;\n            }\n            element = state.renderer(partialNode.value);\n        }\n        // If there's an element with a getCollectionNode function on its type, then it's a supported component.\n        // Call this function to get a partial node, and recursively build a full node from there.\n        if ((0, $jO8i1$react).isValidElement(element)) {\n            let type = element.type;\n            if (typeof type !== 'function' && typeof type.getCollectionNode !== 'function') {\n                let name = element.type;\n                throw new Error(`Unknown element <${name}> in collection.`);\n            }\n            let childNodes = type.getCollectionNode(element.props, this.context);\n            let index = partialNode.index ?? 0;\n            let result = childNodes.next();\n            while(!result.done && result.value){\n                let childNode = result.value;\n                partialNode.index = index;\n                let nodeKey = childNode.key ?? null;\n                if (nodeKey == null) nodeKey = childNode.element ? null : this.getKey(element, partialNode, state, parentKey);\n                let nodes = this.getFullNode({\n                    ...childNode,\n                    key: nodeKey,\n                    index: index,\n                    wrapper: $bda7a7e55e1ff206$var$compose(partialNode.wrapper, childNode.wrapper)\n                }, this.getChildState(state, childNode), parentKey ? `${parentKey}${element.key}` : element.key, parentNode);\n                let children = [\n                    ...nodes\n                ];\n                for (let node of children){\n                    // Cache the node based on its value\n                    node.value = childNode.value ?? partialNode.value ?? null;\n                    if (node.value) this.cache.set(node.value, node);\n                    // The partial node may have specified a type for the child in order to specify a constraint.\n                    // Verify that the full node that was built recursively matches this type.\n                    if (partialNode.type && node.type !== partialNode.type) throw new Error(`Unsupported type <${$bda7a7e55e1ff206$var$capitalize(node.type)}> in <${$bda7a7e55e1ff206$var$capitalize(parentNode?.type ?? 'unknown parent type')}>. Only <${$bda7a7e55e1ff206$var$capitalize(partialNode.type)}> is supported.`);\n                    index++;\n                    yield node;\n                }\n                result = childNodes.next(children);\n            }\n            return;\n        }\n        // Ignore invalid elements\n        if (partialNode.key == null || partialNode.type == null) return;\n        // Create full node\n        let builder = this;\n        let node = {\n            type: partialNode.type,\n            props: partialNode.props,\n            key: partialNode.key,\n            parentKey: parentNode ? parentNode.key : null,\n            value: partialNode.value ?? null,\n            level: (parentNode?.level ?? 0) + (parentNode?.type === 'item' ? 1 : 0),\n            index: partialNode.index,\n            rendered: partialNode.rendered,\n            textValue: partialNode.textValue ?? '',\n            'aria-label': partialNode['aria-label'],\n            wrapper: partialNode.wrapper,\n            shouldInvalidate: partialNode.shouldInvalidate,\n            hasChildNodes: partialNode.hasChildNodes || false,\n            childNodes: $bda7a7e55e1ff206$var$iterable(function*() {\n                if (!partialNode.hasChildNodes || !partialNode.childNodes) return;\n                let index = 0;\n                for (let child of partialNode.childNodes()){\n                    // Ensure child keys are globally unique by prepending the parent node's key\n                    if (child.key != null) // TODO: Remove this line entirely and enforce that users always provide unique keys.\n                    // Currently this line will have issues when a parent has a key `a` and a child with key `bc`\n                    // but another parent has key `ab` and its child has a key `c`. The combined keys would result in both\n                    // children having a key of `abc`.\n                    child.key = `${node.key}${child.key}`;\n                    let nodes = builder.getFullNode({\n                        ...child,\n                        index: index\n                    }, builder.getChildState(state, child), node.key, node);\n                    for (let node of nodes){\n                        index++;\n                        yield node;\n                    }\n                }\n            })\n        };\n        yield node;\n    }\n    constructor(){\n        this.cache = new WeakMap();\n    }\n}\n// Wraps an iterator function as an iterable object, and caches the results.\nfunction $bda7a7e55e1ff206$var$iterable(iterator) {\n    let cache = [];\n    let iterable = null;\n    return {\n        *[Symbol.iterator] () {\n            for (let item of cache)yield item;\n            if (!iterable) iterable = iterator();\n            for (let item of iterable){\n                cache.push(item);\n                yield item;\n            }\n        }\n    };\n}\nfunction $bda7a7e55e1ff206$var$compose(outer, inner) {\n    if (outer && inner) return (element)=>outer(inner(element));\n    if (outer) return outer;\n    if (inner) return inner;\n}\nfunction $bda7a7e55e1ff206$var$capitalize(str) {\n    return str[0].toUpperCase() + str.slice(1);\n}\n\n\nexport {$bda7a7e55e1ff206$export$bf788dd355e3a401 as CollectionBuilder};\n//# sourceMappingURL=CollectionBuilder.mjs.map\n","import {CollectionBuilder as $bda7a7e55e1ff206$export$bf788dd355e3a401} from \"./CollectionBuilder.mjs\";\nimport {useMemo as $emYU7$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $d03379b88399b8c5$export$6cd28814d92fa9c9(props, factory, context) {\n    let builder = (0, $emYU7$useMemo)(()=>new (0, $bda7a7e55e1ff206$export$bf788dd355e3a401)(), []);\n    let { children: children, items: items, collection: collection } = props;\n    let result = (0, $emYU7$useMemo)(()=>{\n        if (collection) return collection;\n        let nodes = builder.build({\n            children: children,\n            items: items\n        }, context);\n        return factory(nodes);\n    }, [\n        builder,\n        children,\n        items,\n        collection,\n        context,\n        factory\n    ]);\n    return result;\n}\n\n\nexport {$d03379b88399b8c5$export$6cd28814d92fa9c9 as useCollection};\n//# sourceMappingURL=useCollection.mjs.map\n","import {ListCollection as $f664a81d022446b5$export$d085fb9e920b5ca7} from \"./ListCollection.mjs\";\nimport {useMultipleSelectionState as $60f19cefd567a3e4$export$253fe78d46329472} from \"../selection/useMultipleSelectionState.mjs\";\nimport {SelectionManager as $4a07ac835f260f78$export$6c8a5aaad13c9852} from \"../selection/SelectionManager.mjs\";\nimport {useCollection as $d03379b88399b8c5$export$6cd28814d92fa9c9} from \"../collections/useCollection.mjs\";\nimport {useMemo as $3yt54$useMemo, useCallback as $3yt54$useCallback, useRef as $3yt54$useRef, useEffect as $3yt54$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nfunction $b14b6f590b50af39$export$2f645645f7bca764(props) {\n    let { filter: filter, layoutDelegate: layoutDelegate } = props;\n    let selectionState = (0, $60f19cefd567a3e4$export$253fe78d46329472)(props);\n    let disabledKeys = (0, $3yt54$useMemo)(()=>props.disabledKeys ? new Set(props.disabledKeys) : new Set(), [\n        props.disabledKeys\n    ]);\n    let factory = (0, $3yt54$useCallback)((nodes)=>filter ? new (0, $f664a81d022446b5$export$d085fb9e920b5ca7)(filter(nodes)) : new (0, $f664a81d022446b5$export$d085fb9e920b5ca7)(nodes), [\n        filter\n    ]);\n    let context = (0, $3yt54$useMemo)(()=>({\n            suppressTextValueWarning: props.suppressTextValueWarning\n        }), [\n        props.suppressTextValueWarning\n    ]);\n    let collection = (0, $d03379b88399b8c5$export$6cd28814d92fa9c9)(props, factory, context);\n    let selectionManager = (0, $3yt54$useMemo)(()=>new (0, $4a07ac835f260f78$export$6c8a5aaad13c9852)(collection, selectionState, {\n            layoutDelegate: layoutDelegate\n        }), [\n        collection,\n        selectionState,\n        layoutDelegate\n    ]);\n    $b14b6f590b50af39$var$useFocusedKeyReset(collection, selectionManager);\n    return {\n        collection: collection,\n        disabledKeys: disabledKeys,\n        selectionManager: selectionManager\n    };\n}\nfunction $b14b6f590b50af39$export$ba9d38c0f1bf2b36(state, filterFn) {\n    let collection = (0, $3yt54$useMemo)(()=>filterFn ? state.collection.filter(filterFn) : state.collection, [\n        state.collection,\n        filterFn\n    ]);\n    let selectionManager = state.selectionManager.withCollection(collection);\n    $b14b6f590b50af39$var$useFocusedKeyReset(collection, selectionManager);\n    return {\n        collection: collection,\n        selectionManager: selectionManager,\n        disabledKeys: state.disabledKeys\n    };\n}\nfunction $b14b6f590b50af39$var$useFocusedKeyReset(collection, selectionManager) {\n    // Reset focused key if that item is deleted from the collection.\n    const cachedCollection = (0, $3yt54$useRef)(null);\n    (0, $3yt54$useEffect)(()=>{\n        if (selectionManager.focusedKey != null && !collection.getItem(selectionManager.focusedKey) && cachedCollection.current) {\n            // Walk forward in the old collection to find the next key that still exists in the new collection.\n            let key = cachedCollection.current.getKeyAfter(selectionManager.focusedKey);\n            let nextFocusedKey = null;\n            while(key != null){\n                let node = collection.getItem(key);\n                if (node && node.type === 'item' && !selectionManager.isDisabled(key)) {\n                    nextFocusedKey = key;\n                    break;\n                }\n                key = cachedCollection.current.getKeyAfter(key);\n            }\n            // If no such key exists, walk backward.\n            if (nextFocusedKey == null) {\n                key = cachedCollection.current.getKeyBefore(selectionManager.focusedKey);\n                while(key != null){\n                    let node = collection.getItem(key);\n                    if (node && node.type === 'item' && !selectionManager.isDisabled(key)) {\n                        nextFocusedKey = key;\n                        break;\n                    }\n                    key = cachedCollection.current.getKeyBefore(key);\n                }\n            }\n            selectionManager.setFocusedKey(nextFocusedKey);\n        }\n        cachedCollection.current = collection;\n    }, [\n        collection,\n        selectionManager\n    ]);\n}\n\n\nexport {$b14b6f590b50af39$export$2f645645f7bca764 as useListState, $b14b6f590b50af39$export$ba9d38c0f1bf2b36 as UNSTABLE_useFilteredListState};\n//# sourceMappingURL=useListState.mjs.map\n","import {getScrollParent as $3578607fe3d4b096$export$cfa2225e87938781} from \"./getScrollParent.mjs\";\nimport {useEffectEvent as $fe16bffc7a557bf0$export$7f54fc3180508a52} from \"./useEffectEvent.mjs\";\nimport {useLayoutEffect as $c4867b2f328c2698$export$e5c5a5f917a5871c} from \"./useLayoutEffect.mjs\";\nimport {useRef as $9bhd4$useRef} from \"react\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nfunction $0407362eaf54473e$export$ccaea96c28e8b9e7(props, ref) {\n    let { collection: collection, onLoadMore: onLoadMore, scrollOffset: scrollOffset = 1, direction: direction = 'end' } = props;\n    let sentinelObserver = (0, $9bhd4$useRef)(null);\n    let triggerLoadMore = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)((entries)=>{\n        // Use \"isIntersecting\" over an equality check of 0 since it seems like there is cases where\n        // a intersection ratio of 0 can be reported when isIntersecting is actually true\n        for (let entry of entries)// Note that this will be called if the collection changes, even if onLoadMore was already called and is being processed.\n        // Up to user discretion as to how to handle these multiple onLoadMore calls\n        if (entry.isIntersecting && onLoadMore) onLoadMore();\n    });\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        if (ref.current) {\n            // Tear down and set up a new IntersectionObserver when the collection changes so that we can properly trigger additional loadMores if there is room for more items\n            // Need to do this tear down and set up since using a large rootMargin will mean the observer's callback isn't called even when scrolling the item into view beause its visibility hasn't actually changed\n            // https://codesandbox.io/p/sandbox/magical-swanson-dhgp89?file=%2Fsrc%2FApp.js%3A21%2C21\n            const margin = 100 * scrollOffset;\n            // For direction='start', right/left margins have no affect for vertical scroll containers. We are not supporting reverse horizontal scroll containers for now.\n            const rootMargin = direction === 'start' ? `${margin}% 0px 0px 0px` : `0px ${margin}% ${margin}% ${margin}%`;\n            sentinelObserver.current = new IntersectionObserver(triggerLoadMore, {\n                root: (0, $3578607fe3d4b096$export$cfa2225e87938781)(ref?.current),\n                rootMargin: rootMargin\n            });\n            sentinelObserver.current.observe(ref.current);\n        }\n        return ()=>{\n            if (sentinelObserver.current) sentinelObserver.current.disconnect();\n        };\n    }, [\n        collection,\n        ref,\n        scrollOffset,\n        direction\n    ]);\n}\n\n\nexport {$0407362eaf54473e$export$ccaea96c28e8b9e7 as useLoadMoreSentinel};\n//# sourceMappingURL=useLoadMoreSentinel.mjs.map\n","import {DEFAULT_SLOT as $7230ffa83bc0c2cf$export$c62b8e45d58ddad9, dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, Provider as $7230ffa83bc0c2cf$export$2881499e37b75b9a, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415, useRenderProps as $7230ffa83bc0c2cf$export$4d86445c2cf5e3, useSlot as $7230ffa83bc0c2cf$export$9d4c57ee4c6ffdd8} from \"./utils.mjs\";\nimport {CollectionRendererContext as $263ab7fc0f95ccdb$export$4feb769f8ddf26c5, SectionContext as $263ab7fc0f95ccdb$export$d40e14dec8b060a8} from \"./Collection.mjs\";\nimport {DragAndDropContext as $f9554a667e4f0374$export$d188a835a7bc5783, DropIndicatorContext as $f9554a667e4f0374$export$f55761759794cf55, useDndPersistedKeys as $f9554a667e4f0374$export$d1e8e3fbb7461f6, useRenderDropIndicator as $f9554a667e4f0374$export$971707d8a129a1f7} from \"./DragAndDrop.mjs\";\nimport {HeaderContext as $53e61d82d8b8611d$export$e0e4026c12a8bdbb} from \"./Header.mjs\";\nimport {SelectableCollectionContext as $4b38b5b75ecc6208$export$b0d3ecf7112093a7} from \"./Autocomplete.mjs\";\nimport {SelectionIndicatorContext as $91fe5e721c7f36c1$export$c9549807523555e0} from \"./SelectionIndicator.mjs\";\nimport {SeparatorContext as $e28ab3efe3e87743$export$6615d83f6de245ce} from \"./Separator.mjs\";\nimport {SharedElementTransition as $792f28e438b9ad5f$export$758399f318e6385a} from \"./SharedElementTransition.mjs\";\nimport {TextContext as $efe09c6d1c304b50$export$9afb8bc826b033ea} from \"./Text.mjs\";\nimport {useListBox as $c4d6w$useListBox, useListBoxSection as $c4d6w$useListBoxSection, useOption as $c4d6w$useOption} from \"react-aria/useListBox\";\nimport {Collection as $c4d6w$Collection} from \"react-aria/Collection\";\nimport {CollectionBuilder as $c4d6w$CollectionBuilder, createBranchComponent as $c4d6w$createBranchComponent, createLeafComponent as $c4d6w$createLeafComponent} from \"react-aria/CollectionBuilder\";\nimport {filterDOMProps as $c4d6w$filterDOMProps} from \"react-aria/filterDOMProps\";\nimport {FocusScope as $c4d6w$FocusScope} from \"react-aria/FocusScope\";\nimport {inertValue as $c4d6w$inertValue} from \"react-aria/private/utils/inertValue\";\nimport {SectionNode as $c4d6w$SectionNode, ItemNode as $c4d6w$ItemNode, LoaderNode as $c4d6w$LoaderNode} from \"react-aria/private/collections/BaseCollection\";\nimport {ListKeyboardDelegate as $c4d6w$ListKeyboardDelegate} from \"react-aria/ListKeyboardDelegate\";\nimport {useListState as $c4d6w$useListState, UNSTABLE_useFilteredListState as $c4d6w$UNSTABLE_useFilteredListState} from \"react-stately/useListState\";\nimport {useLoadMoreSentinel as $c4d6w$useLoadMoreSentinel} from \"react-aria/private/utils/useLoadMoreSentinel\";\nimport {mergeProps as $c4d6w$mergeProps} from \"react-aria/mergeProps\";\nimport $c4d6w$react, {createContext as $c4d6w$createContext, forwardRef as $c4d6w$forwardRef, useContext as $c4d6w$useContext, useMemo as $c4d6w$useMemo, useRef as $c4d6w$useRef, useEffect as $c4d6w$useEffect} from \"react\";\nimport {useCollator as $c4d6w$useCollator} from \"react-aria/useCollator\";\nimport {useFocus as $c4d6w$useFocus} from \"react-aria/useFocus\";\nimport {useFocusRing as $c4d6w$useFocusRing} from \"react-aria/useFocusRing\";\nimport {useHover as $c4d6w$useHover} from \"react-aria/useHover\";\nimport {useKeyboard as $c4d6w$useKeyboard} from \"react-aria/useKeyboard\";\nimport {useLocale as $c4d6w$useLocale} from \"react-aria/I18nProvider\";\nimport {useObjectRef as $c4d6w$useObjectRef} from \"react-aria/useObjectRef\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst $928221da08ecbc62$export$7ff8f37d2d81a48d = /*#__PURE__*/ (0, $c4d6w$createContext)(null);\nconst $928221da08ecbc62$export$7c5906fe4f1f2af2 = /*#__PURE__*/ (0, $c4d6w$createContext)(null);\nconst $928221da08ecbc62$export$41f133550aa26f48 = /*#__PURE__*/ (0, $c4d6w$forwardRef)(function ListBox(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $928221da08ecbc62$export$7ff8f37d2d81a48d);\n    let state = (0, $c4d6w$useContext)($928221da08ecbc62$export$7c5906fe4f1f2af2);\n    // The structure of ListBox is a bit strange because it needs to work inside other components like ComboBox and Select.\n    // Those components render two copies of their children so that the collection can be built even when the popover is closed.\n    // The first copy sends a collection document via context which we render the collection portal into.\n    // The second copy sends a ListState object via context which we use to render the ListBox without rebuilding the state.\n    // Otherwise, we have a standalone ListBox, so we need to create a collection and state ourselves.\n    if (state) return /*#__PURE__*/ (0, $c4d6w$react).createElement($928221da08ecbc62$var$ListBoxInner, {\n        state: state,\n        props: props,\n        listBoxRef: ref\n    });\n    return /*#__PURE__*/ (0, $c4d6w$react).createElement((0, $c4d6w$CollectionBuilder), {\n        content: /*#__PURE__*/ (0, $c4d6w$react).createElement((0, $c4d6w$Collection), props)\n    }, (collection)=>/*#__PURE__*/ (0, $c4d6w$react).createElement($928221da08ecbc62$var$StandaloneListBox, {\n            props: props,\n            listBoxRef: ref,\n            collection: collection\n        }));\n});\nfunction $928221da08ecbc62$var$StandaloneListBox({ props: props, listBoxRef: listBoxRef, collection: collection }) {\n    props = {\n        ...props,\n        collection: collection,\n        children: null,\n        items: null\n    };\n    let { layoutDelegate: layoutDelegate } = (0, $c4d6w$useContext)((0, $263ab7fc0f95ccdb$export$4feb769f8ddf26c5));\n    let state = (0, $c4d6w$useListState)({\n        ...props,\n        layoutDelegate: layoutDelegate\n    });\n    return /*#__PURE__*/ (0, $c4d6w$react).createElement($928221da08ecbc62$var$ListBoxInner, {\n        state: state,\n        props: props,\n        listBoxRef: listBoxRef\n    });\n}\nfunction $928221da08ecbc62$var$ListBoxInner({ state: inputState, props: props, listBoxRef: listBoxRef }) {\n    // oxlint-disable-next-line react/react-compiler\n    [props, listBoxRef] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, listBoxRef, (0, $4b38b5b75ecc6208$export$b0d3ecf7112093a7));\n    let { dragAndDropHooks: dragAndDropHooks, layout: layout = 'stack', orientation: orientation = 'vertical', filter: filter } = props;\n    // oxlint-disable-next-line react/react-compiler\n    let state = (0, $c4d6w$UNSTABLE_useFilteredListState)(inputState, filter);\n    let { collection: collection, selectionManager: selectionManager } = state;\n    let isListDraggable = !!dragAndDropHooks?.useDraggableCollectionState;\n    let isListDroppable = !!dragAndDropHooks?.useDroppableCollectionState;\n    let { direction: direction } = (0, $c4d6w$useLocale)();\n    let { disabledBehavior: disabledBehavior, disabledKeys: disabledKeys } = selectionManager;\n    let collator = (0, $c4d6w$useCollator)({\n        usage: 'search',\n        sensitivity: 'base'\n    });\n    let { isVirtualized: isVirtualized, layoutDelegate: layoutDelegate, dropTargetDelegate: ctxDropTargetDelegate, CollectionRoot: CollectionRoot } = (0, $c4d6w$useContext)((0, $263ab7fc0f95ccdb$export$4feb769f8ddf26c5));\n    let keyboardDelegate = (0, $c4d6w$useMemo)(// oxlint-disable-next-line react/react-compiler\n    ()=>props.keyboardDelegate || new (0, $c4d6w$ListKeyboardDelegate)({\n            collection: collection,\n            collator: collator,\n            ref: listBoxRef,\n            disabledKeys: disabledKeys,\n            disabledBehavior: disabledBehavior,\n            layout: layout,\n            orientation: orientation,\n            direction: direction,\n            layoutDelegate: layoutDelegate\n        }), [\n        collection,\n        collator,\n        listBoxRef,\n        disabledBehavior,\n        disabledKeys,\n        orientation,\n        direction,\n        props.keyboardDelegate,\n        layout,\n        layoutDelegate\n    ]);\n    let { listBoxProps: listBoxProps } = (0, $c4d6w$useListBox)({\n        ...props,\n        shouldSelectOnPressUp: isListDraggable || props.shouldSelectOnPressUp,\n        keyboardDelegate: keyboardDelegate,\n        isVirtualized: isVirtualized\n    }, state, listBoxRef);\n    let dragHooksProvided = (0, $c4d6w$useRef)(isListDraggable);\n    let dropHooksProvided = (0, $c4d6w$useRef)(isListDroppable);\n    (0, $c4d6w$useEffect)(()=>{\n        if (process.env.NODE_ENV === 'production') return;\n        if (dragHooksProvided.current !== isListDraggable) console.warn('Drag hooks were provided during one render, but not another. This should be avoided as it may produce unexpected behavior.');\n        if (dropHooksProvided.current !== isListDroppable) console.warn('Drop hooks were provided during one render, but not another. This should be avoided as it may produce unexpected behavior.');\n    }, [\n        isListDraggable,\n        isListDroppable\n    ]);\n    let dragState = undefined;\n    let dropState = undefined;\n    let droppableCollection = undefined;\n    let isRootDropTarget = false;\n    let dragPreview = null;\n    let preview = (0, $c4d6w$useRef)(null);\n    if (isListDraggable && dragAndDropHooks) {\n        // oxlint-disable-next-line react/react-compiler\n        dragState = dragAndDropHooks.useDraggableCollectionState({\n            collection: collection,\n            selectionManager: selectionManager,\n            preview: dragAndDropHooks.renderDragPreview ? preview : undefined\n        });\n        // oxlint-disable-next-line react/react-compiler\n        dragAndDropHooks.useDraggableCollection({}, dragState, listBoxRef);\n        let DragPreview = dragAndDropHooks.DragPreview;\n        dragPreview = dragAndDropHooks.renderDragPreview ? /*#__PURE__*/ (0, $c4d6w$react).createElement(DragPreview, {\n            ref: preview\n        }, dragAndDropHooks.renderDragPreview) : null;\n    }\n    if (isListDroppable && dragAndDropHooks) {\n        // oxlint-disable-next-line react/react-compiler\n        dropState = dragAndDropHooks.useDroppableCollectionState({\n            collection: collection,\n            selectionManager: selectionManager\n        });\n        let dropTargetDelegate = dragAndDropHooks.dropTargetDelegate || ctxDropTargetDelegate || new dragAndDropHooks.ListDropTargetDelegate(collection, listBoxRef, {\n            orientation: orientation,\n            layout: layout,\n            direction: direction\n        });\n        // oxlint-disable-next-line react/react-compiler\n        droppableCollection = dragAndDropHooks.useDroppableCollection({\n            keyboardDelegate: keyboardDelegate,\n            dropTargetDelegate: dropTargetDelegate\n        }, dropState, listBoxRef);\n        isRootDropTarget = dropState.isDropTarget({\n            type: 'root'\n        });\n    }\n    let { focusProps: focusProps, isFocused: isFocused, isFocusVisible: isFocusVisible } = (0, $c4d6w$useFocusRing)();\n    let isEmpty = state.collection.size === 0;\n    let renderValues = {\n        isDropTarget: isRootDropTarget,\n        isEmpty: isEmpty,\n        isFocused: isFocused,\n        isFocusVisible: isFocusVisible,\n        layout: props.layout || 'stack',\n        orientation: orientation,\n        state: state\n    };\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        children: undefined,\n        defaultClassName: 'react-aria-ListBox',\n        values: renderValues\n    });\n    let emptyState = null;\n    if (isEmpty && props.renderEmptyState) emptyState = /*#__PURE__*/ (0, $c4d6w$react).createElement(\"div\", {\n        // eslint-disable-next-line\n        role: \"option\",\n        style: {\n            display: 'contents'\n        }\n    }, props.renderEmptyState(renderValues));\n    let DOMProps = (0, $c4d6w$filterDOMProps)(props, {\n        global: true\n    });\n    return /*#__PURE__*/ (0, $c4d6w$react).createElement((0, $c4d6w$FocusScope), null, /*#__PURE__*/ (0, $c4d6w$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...(0, $c4d6w$mergeProps)(DOMProps, renderProps, listBoxProps, focusProps, droppableCollection?.collectionProps),\n        ref: listBoxRef,\n        slot: props.slot || undefined,\n        onScroll: props.onScroll,\n        \"data-drop-target\": isRootDropTarget || undefined,\n        \"data-empty\": isEmpty || undefined,\n        \"data-focused\": isFocused || undefined,\n        \"data-focus-visible\": isFocusVisible || undefined,\n        \"data-layout\": props.layout || 'stack',\n        \"data-orientation\": orientation\n    }, /*#__PURE__*/ (0, $c4d6w$react).createElement((0, $7230ffa83bc0c2cf$export$2881499e37b75b9a), {\n        values: [\n            [\n                $928221da08ecbc62$export$7ff8f37d2d81a48d,\n                props\n            ],\n            [\n                $928221da08ecbc62$export$7c5906fe4f1f2af2,\n                state\n            ],\n            [\n                (0, $f9554a667e4f0374$export$d188a835a7bc5783),\n                {\n                    dragAndDropHooks: dragAndDropHooks,\n                    dragState: dragState,\n                    dropState: dropState\n                }\n            ],\n            [\n                (0, $e28ab3efe3e87743$export$6615d83f6de245ce),\n                {\n                    elementType: 'div'\n                }\n            ],\n            [\n                (0, $f9554a667e4f0374$export$f55761759794cf55),\n                {\n                    render: $928221da08ecbc62$var$ListBoxDropIndicatorWrapper\n                }\n            ],\n            [\n                (0, $263ab7fc0f95ccdb$export$d40e14dec8b060a8),\n                {\n                    name: 'ListBoxSection',\n                    render: $928221da08ecbc62$var$ListBoxSectionInner\n                }\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $c4d6w$react).createElement((0, $792f28e438b9ad5f$export$758399f318e6385a), null, /*#__PURE__*/ (0, $c4d6w$react).createElement(CollectionRoot, {\n        collection: collection,\n        scrollRef: listBoxRef,\n        persistedKeys: (0, $f9554a667e4f0374$export$d1e8e3fbb7461f6)(selectionManager, dragAndDropHooks, dropState),\n        renderDropIndicator: (0, $f9554a667e4f0374$export$971707d8a129a1f7)(dragAndDropHooks, dropState)\n    }))), emptyState, dragPreview));\n}\nfunction $928221da08ecbc62$var$ListBoxSectionInner(props, ref, section, className = 'react-aria-ListBoxSection') {\n    let state = (0, $c4d6w$useContext)($928221da08ecbc62$export$7c5906fe4f1f2af2);\n    let { dragAndDropHooks: dragAndDropHooks, dropState: dropState } = (0, $c4d6w$useContext)((0, $f9554a667e4f0374$export$d188a835a7bc5783));\n    let { CollectionBranch: CollectionBranch } = (0, $c4d6w$useContext)((0, $263ab7fc0f95ccdb$export$4feb769f8ddf26c5));\n    let [headingRef, heading] = (0, $7230ffa83bc0c2cf$export$9d4c57ee4c6ffdd8)();\n    let { headingProps: headingProps, groupProps: groupProps } = (0, $c4d6w$useListBoxSection)({\n        heading: heading,\n        'aria-label': props['aria-label'] ?? undefined\n    });\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        id: undefined,\n        children: undefined,\n        defaultClassName: className,\n        values: undefined\n    });\n    let DOMProps = (0, $c4d6w$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.id;\n    return /*#__PURE__*/ (0, $c4d6w$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).section, {\n        ...(0, $c4d6w$mergeProps)(DOMProps, renderProps, groupProps),\n        ref: ref\n    }, /*#__PURE__*/ (0, $c4d6w$react).createElement((0, $53e61d82d8b8611d$export$e0e4026c12a8bdbb).Provider, {\n        value: {\n            ...headingProps,\n            ref: headingRef\n        }\n    }, /*#__PURE__*/ (0, $c4d6w$react).createElement(CollectionBranch, {\n        collection: state.collection,\n        parent: section,\n        renderDropIndicator: (0, $f9554a667e4f0374$export$971707d8a129a1f7)(dragAndDropHooks, dropState)\n    })));\n}\nconst $928221da08ecbc62$export$dca12b0bb56e4fc = /*#__PURE__*/ (0, $c4d6w$createBranchComponent)((0, $c4d6w$SectionNode), $928221da08ecbc62$var$ListBoxSectionInner);\nconst $928221da08ecbc62$export$a11e76429ed99b4 = /*#__PURE__*/ (0, $c4d6w$createLeafComponent)((0, $c4d6w$ItemNode), function ListBoxItem(props, forwardedRef, item) {\n    let ref = (0, $c4d6w$useObjectRef)(forwardedRef);\n    let state = (0, $c4d6w$useContext)($928221da08ecbc62$export$7c5906fe4f1f2af2);\n    let { dragAndDropHooks: dragAndDropHooks, dragState: dragState, dropState: dropState } = (0, $c4d6w$useContext)((0, $f9554a667e4f0374$export$d188a835a7bc5783));\n    let isDraggable = dragState && !(dragState.isDisabled || dragState.selectionManager.isDisabled(item.key));\n    let { optionProps: optionProps, labelProps: labelProps, descriptionProps: descriptionProps, ...states } = (0, $c4d6w$useOption)({\n        key: item.key,\n        'aria-label': props?.['aria-label']\n    }, state, ref);\n    let { hoverProps: hoverProps, isHovered: isHovered } = (0, $c4d6w$useHover)({\n        isDisabled: !states.allowsSelection && !states.hasAction && !isDraggable,\n        onHoverStart: item.props.onHoverStart,\n        onHoverChange: item.props.onHoverChange,\n        onHoverEnd: item.props.onHoverEnd\n    });\n    let { keyboardProps: keyboardProps } = (0, $c4d6w$useKeyboard)(props);\n    let { focusProps: focusProps } = (0, $c4d6w$useFocus)(props);\n    let draggableItem = null;\n    if (dragState && dragAndDropHooks) draggableItem = dragAndDropHooks.useDraggableItem({\n        key: item.key,\n        hasAction: states.hasAction\n    }, dragState);\n    let droppableItem = null;\n    if (dropState && dragAndDropHooks) droppableItem = dragAndDropHooks.useDroppableItem({\n        target: {\n            type: 'item',\n            key: item.key,\n            dropPosition: 'on'\n        }\n    }, dropState, ref);\n    let isDragging = dragState && dragState.isDragging(item.key);\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        id: undefined,\n        children: props.children,\n        defaultClassName: 'react-aria-ListBoxItem',\n        values: {\n            ...states,\n            isHovered: isHovered,\n            selectionMode: state.selectionManager.selectionMode,\n            selectionBehavior: state.selectionManager.selectionBehavior,\n            allowsDragging: !!dragState,\n            isDragging: isDragging,\n            isDropTarget: droppableItem?.isDropTarget\n        }\n    });\n    (0, $c4d6w$useEffect)(()=>{\n        if (!item.textValue && process.env.NODE_ENV !== 'production') console.warn('A `textValue` prop is required for <ListBoxItem> elements with non-plain text children in order to support accessibility features such as type to select.');\n    }, [\n        item.textValue\n    ]);\n    let ElementType = props.href ? (0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).a : (0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div;\n    let DOMProps = (0, $c4d6w$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.id;\n    delete DOMProps.onClick;\n    if (props.href && optionProps.tabIndex == null) optionProps.tabIndex = -1;\n    return /*#__PURE__*/ (0, $c4d6w$react).createElement(ElementType, {\n        ...(0, $c4d6w$mergeProps)(DOMProps, renderProps, optionProps, hoverProps, keyboardProps, focusProps, draggableItem?.dragProps, droppableItem?.dropProps),\n        ref: ref,\n        \"data-allows-dragging\": !!dragState || undefined,\n        \"data-selected\": states.isSelected || undefined,\n        \"data-disabled\": states.isDisabled || undefined,\n        \"data-hovered\": isHovered || undefined,\n        \"data-focused\": states.isFocused || undefined,\n        \"data-focus-visible\": states.isFocusVisible || undefined,\n        \"data-pressed\": states.isPressed || undefined,\n        \"data-dragging\": isDragging || undefined,\n        \"data-drop-target\": droppableItem?.isDropTarget || undefined,\n        \"data-selection-mode\": state.selectionManager.selectionMode === 'none' ? undefined : state.selectionManager.selectionMode\n    }, /*#__PURE__*/ (0, $c4d6w$react).createElement((0, $7230ffa83bc0c2cf$export$2881499e37b75b9a), {\n        values: [\n            [\n                (0, $efe09c6d1c304b50$export$9afb8bc826b033ea),\n                {\n                    slots: {\n                        [(0, $7230ffa83bc0c2cf$export$c62b8e45d58ddad9)]: labelProps,\n                        label: labelProps,\n                        description: descriptionProps\n                    }\n                }\n            ],\n            [\n                (0, $91fe5e721c7f36c1$export$c9549807523555e0),\n                {\n                    isSelected: states.isSelected\n                }\n            ]\n        ]\n    }, renderProps.children));\n});\nfunction $928221da08ecbc62$var$ListBoxDropIndicatorWrapper(props, ref) {\n    ref = (0, $c4d6w$useObjectRef)(ref);\n    let { dragAndDropHooks: dragAndDropHooks, dropState: dropState } = (0, $c4d6w$useContext)((0, $f9554a667e4f0374$export$d188a835a7bc5783));\n    // oxlint-disable-next-line react/react-compiler\n    let { dropIndicatorProps: dropIndicatorProps, isHidden: isHidden, isDropTarget: isDropTarget } = dragAndDropHooks.useDropIndicator(props, dropState, ref);\n    if (isHidden) return null;\n    return /*#__PURE__*/ (0, $c4d6w$react).createElement($928221da08ecbc62$var$ListBoxDropIndicatorForwardRef, {\n        ...props,\n        dropIndicatorProps: dropIndicatorProps,\n        isDropTarget: isDropTarget,\n        ref: ref\n    });\n}\nfunction $928221da08ecbc62$var$ListBoxDropIndicator(props, ref) {\n    let { dropIndicatorProps: dropIndicatorProps, isDropTarget: isDropTarget, ...otherProps } = props;\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...otherProps,\n        defaultClassName: 'react-aria-DropIndicator',\n        values: {\n            isDropTarget: isDropTarget\n        }\n    });\n    return /*#__PURE__*/ (0, $c4d6w$react).createElement((0, $c4d6w$react).Fragment, null, /*#__PURE__*/ (0, $c4d6w$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...dropIndicatorProps,\n        ...renderProps,\n        role: \"option\",\n        ref: ref,\n        \"data-drop-target\": isDropTarget || undefined\n    }));\n}\nconst $928221da08ecbc62$var$ListBoxDropIndicatorForwardRef = /*#__PURE__*/ (0, $c4d6w$forwardRef)($928221da08ecbc62$var$ListBoxDropIndicator);\nconst $928221da08ecbc62$export$8e6d031a08cf56a1 = (0, $c4d6w$createLeafComponent)((0, $c4d6w$LoaderNode), function ListBoxLoadingIndicator(props, ref, item) {\n    let state = (0, $c4d6w$useContext)($928221da08ecbc62$export$7c5906fe4f1f2af2);\n    let { isLoading: isLoading, onLoadMore: onLoadMore, scrollOffset: scrollOffset, ...otherProps } = props;\n    let sentinelRef = (0, $c4d6w$useRef)(null);\n    let memoedLoadMoreProps = (0, $c4d6w$useMemo)(()=>({\n            onLoadMore: onLoadMore,\n            collection: state?.collection,\n            sentinelRef: sentinelRef,\n            scrollOffset: scrollOffset\n        }), [\n        onLoadMore,\n        scrollOffset,\n        state?.collection\n    ]);\n    (0, $c4d6w$useLoadMoreSentinel)(memoedLoadMoreProps, sentinelRef);\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...otherProps,\n        id: undefined,\n        children: item.rendered,\n        defaultClassName: 'react-aria-ListBoxLoadingIndicator',\n        values: undefined\n    });\n    let optionProps = {\n        // For Android talkback\n        tabIndex: -1\n    };\n    return /*#__PURE__*/ (0, $c4d6w$react).createElement((0, $c4d6w$react).Fragment, null, /*#__PURE__*/ (0, $c4d6w$react).createElement(\"div\", {\n        style: {\n            position: 'relative',\n            width: 0,\n            height: 0\n        },\n        inert: (0, $c4d6w$inertValue)(true)\n    }, /*#__PURE__*/ (0, $c4d6w$react).createElement(\"div\", {\n        \"data-testid\": \"loadMoreSentinel\",\n        ref: sentinelRef,\n        style: {\n            position: 'absolute',\n            height: 1,\n            width: 1\n        }\n    })), isLoading && renderProps.children && /*#__PURE__*/ (0, $c4d6w$react).createElement((0, $c4d6w$react).Fragment, null, /*#__PURE__*/ (0, $c4d6w$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...(0, $c4d6w$mergeProps)((0, $c4d6w$filterDOMProps)(props, {\n            global: true\n        }), optionProps),\n        ...renderProps,\n        // aria-selected isn't needed here since this option is not selectable.\n        role: \"option\",\n        ref: ref\n    }, renderProps.children)));\n});\n\n\nexport {$928221da08ecbc62$export$7ff8f37d2d81a48d as ListBoxContext, $928221da08ecbc62$export$7c5906fe4f1f2af2 as ListStateContext, $928221da08ecbc62$export$41f133550aa26f48 as ListBox, $928221da08ecbc62$export$dca12b0bb56e4fc as ListBoxSection, $928221da08ecbc62$export$a11e76429ed99b4 as ListBoxItem, $928221da08ecbc62$export$8e6d031a08cf56a1 as ListBoxLoadMoreItem};\n//# sourceMappingURL=ListBox.mjs.map\n","import {dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415, useRenderProps as $7230ffa83bc0c2cf$export$4d86445c2cf5e3} from \"./utils.mjs\";\nimport {filterDOMProps as $cVyXW$filterDOMProps} from \"react-aria/filterDOMProps\";\nimport $cVyXW$react, {createContext as $cVyXW$createContext, forwardRef as $cVyXW$forwardRef} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $4fcfe18fac72dabd$export$2de4954e8ae13b9f = /*#__PURE__*/ (0, $cVyXW$createContext)({\n    placement: 'bottom'\n});\nconst $4fcfe18fac72dabd$export$746d02f47f4d381 = /*#__PURE__*/ (0, $cVyXW$forwardRef)(function OverlayArrow(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $4fcfe18fac72dabd$export$2de4954e8ae13b9f);\n    let placement = props.placement;\n    let style = {\n        position: 'absolute',\n        transform: placement === 'top' || placement === 'bottom' ? 'translateX(-50%)' : 'translateY(-50%)'\n    };\n    if (placement != null) style[placement] = '100%';\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        defaultClassName: 'react-aria-OverlayArrow',\n        values: {\n            placement: placement\n        }\n    });\n    // remove undefined values from renderProps.style object so that it can be\n    // spread merged with the other style object\n    if (renderProps.style) Object.keys(renderProps.style).forEach((key)=>renderProps.style[key] === undefined && delete renderProps.style[key]);\n    let DOMProps = (0, $cVyXW$filterDOMProps)(props);\n    return /*#__PURE__*/ (0, $cVyXW$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...DOMProps,\n        ...renderProps,\n        style: {\n            ...style,\n            ...renderProps.style\n        },\n        ref: ref,\n        \"data-placement\": placement\n    });\n});\n\n\nexport {$4fcfe18fac72dabd$export$2de4954e8ae13b9f as OverlayArrowContext, $4fcfe18fac72dabd$export$746d02f47f4d381 as OverlayArrow};\n//# sourceMappingURL=OverlayArrow.mjs.map\n","import {createShadowTreeWalker as $654b97e09f2a30c1$export$4d0f8be8b12a7ef6} from \"../utils/shadowdom/ShadowTreeWalker.mjs\";\nimport {getOwnerDocument as $d447af545b77c9f1$export$b204af158042fbac, getOwnerWindow as $d447af545b77c9f1$export$f21a1ffae260145a, isShadowRoot as $d447af545b77c9f1$export$af51f0f06c0f328a} from \"../utils/domHelpers.mjs\";\nimport {nodeContains as $23f2114a1b82827e$export$4282f70798064fe0} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {shadowDOM as $6UjbS$shadowDOM} from \"react-stately/private/flags/flags\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nconst $58196c8d6a1f38fc$var$supportsInert = typeof HTMLElement !== 'undefined' && 'inert' in HTMLElement.prototype;\nfunction $58196c8d6a1f38fc$var$isAlwaysVisibleNode(node) {\n    return node.dataset.liveAnnouncer === 'true' || node.dataset.reactAriaTopLayer !== undefined;\n}\n// Keeps a ref count of all hidden elements. Added to when hiding an element, and\n// subtracted from when showing it again. When it reaches zero, aria-hidden is removed.\nlet $58196c8d6a1f38fc$var$refCountMap = new WeakMap();\nlet $58196c8d6a1f38fc$var$observerStack = [];\nfunction $58196c8d6a1f38fc$export$1c3ebcada18427bf(targets, options) {\n    let windowObj = (0, $d447af545b77c9f1$export$f21a1ffae260145a)(targets?.[0]);\n    let opts = options instanceof windowObj.Element ? {\n        root: options\n    } : options;\n    let root = opts?.root ?? document.body;\n    let shouldUseInert = opts?.shouldUseInert && $58196c8d6a1f38fc$var$supportsInert;\n    let visibleNodes = new Set(targets);\n    let hiddenNodes = new Set();\n    let getHidden = (element)=>{\n        return shouldUseInert && element instanceof windowObj.HTMLElement ? element.inert : element.getAttribute('aria-hidden') === 'true';\n    };\n    let setHidden = (element, hidden)=>{\n        if (shouldUseInert && element instanceof windowObj.HTMLElement) element.inert = hidden;\n        else if (hidden) element.setAttribute('aria-hidden', 'true');\n        else {\n            element.removeAttribute('aria-hidden');\n            if (element instanceof windowObj.HTMLElement) // We only ever call setHidden with hidden = false when the nodeCount is 1 aka\n            // we are trying to make the element visible to screen readers again, so remove inert as well\n            element.inert = false;\n        }\n    };\n    let shadowRootsToWatch = new Set();\n    if ((0, $6UjbS$shadowDOM)()) {\n        // Find all shadow roots that enclose the targets, walking up the host chain\n        // until we reach the tree that `root` lives in. Each enclosing ShadowRoot\n        // needs its own MutationObserver because it does not cross shadow\n        // boundaries, so the observer on `root` cannot see mutations inside them.\n        let boundary = root.getRootNode();\n        for (let target of targets){\n            let current = target.getRootNode();\n            while((0, $d447af545b77c9f1$export$af51f0f06c0f328a)(current) && current !== boundary){\n                shadowRootsToWatch.add(current);\n                current = current.host.getRootNode();\n            }\n        }\n    }\n    let walk = (root)=>{\n        // Keep live announcer and top layer elements (e.g. toasts) visible.\n        for (let element of root.querySelectorAll('[data-live-announcer], [data-react-aria-top-layer]'))visibleNodes.add(element);\n        let acceptNode = (node)=>{\n            // Skip this node and its children if it is one of the target nodes, or a live announcer.\n            // Also skip children of already hidden nodes, as aria-hidden is recursive. An exception is\n            // made for elements with role=\"row\" since VoiceOver on iOS has issues hiding elements with role=\"row\".\n            // For that case we want to hide the cells inside as well (https://bugs.webkit.org/show_bug.cgi?id=222623).\n            if (hiddenNodes.has(node) || visibleNodes.has(node) || node.parentElement && hiddenNodes.has(node.parentElement) && node.parentElement.getAttribute('role') !== 'row') return NodeFilter.FILTER_REJECT;\n            // Skip this node but continue to children if one of the targets is inside the node.\n            for (let target of visibleNodes){\n                if ((0, $23f2114a1b82827e$export$4282f70798064fe0)(node, target)) return NodeFilter.FILTER_SKIP;\n            }\n            return NodeFilter.FILTER_ACCEPT;\n        };\n        let walker = (0, $654b97e09f2a30c1$export$4d0f8be8b12a7ef6)((0, $d447af545b77c9f1$export$b204af158042fbac)(root), root, NodeFilter.SHOW_ELEMENT, {\n            acceptNode: acceptNode\n        });\n        // TreeWalker does not include the root.\n        let acceptRoot = acceptNode(root);\n        if (acceptRoot === NodeFilter.FILTER_ACCEPT) hide(root);\n        if (acceptRoot !== NodeFilter.FILTER_REJECT) {\n            let node = walker.nextNode();\n            while(node != null){\n                hide(node);\n                node = walker.nextNode();\n            }\n        }\n    };\n    let hide = (node)=>{\n        let refCount = $58196c8d6a1f38fc$var$refCountMap.get(node) ?? 0;\n        // If already aria-hidden, and the ref count is zero, then this element\n        // was already hidden and there's nothing for us to do.\n        if (getHidden(node) && refCount === 0) return;\n        if (refCount === 0) setHidden(node, true);\n        hiddenNodes.add(node);\n        $58196c8d6a1f38fc$var$refCountMap.set(node, refCount + 1);\n    };\n    // If there is already a MutationObserver listening from a previous call,\n    // disconnect it so the new on takes over.\n    if ($58196c8d6a1f38fc$var$observerStack.length) $58196c8d6a1f38fc$var$observerStack[$58196c8d6a1f38fc$var$observerStack.length - 1].disconnect();\n    walk(root);\n    let observer = new MutationObserver((changes)=>{\n        for (let change of changes){\n            if (change.type !== 'childList') continue;\n            // If the parent element of the added nodes is not within one of the targets,\n            // and not already inside a hidden node, hide all of the new children.\n            if (change.target.isConnected && ![\n                ...visibleNodes,\n                ...hiddenNodes\n            ].some((node)=>(0, $23f2114a1b82827e$export$4282f70798064fe0)(node, change.target))) for (let node of change.addedNodes){\n                if ((node instanceof HTMLElement || node instanceof SVGElement) && $58196c8d6a1f38fc$var$isAlwaysVisibleNode(node)) visibleNodes.add(node);\n                else if (node instanceof Element) walk(node);\n            }\n            if ((0, $6UjbS$shadowDOM)()) {\n                // if any of the observed shadow roots were removed, stop observing them\n                for (let shadowRoot of shadowRootsToWatch)if (!shadowRoot.isConnected) {\n                    observer.disconnect();\n                    break;\n                }\n            }\n        }\n    });\n    observer.observe(root, {\n        childList: true,\n        subtree: true\n    });\n    let shadowObservers = new Set();\n    if ((0, $6UjbS$shadowDOM)()) for (let shadowRoot of shadowRootsToWatch){\n        // Disconnect single target instead of all https://github.com/whatwg/dom/issues/126\n        let shadowObserver = new MutationObserver((changes)=>{\n            for (let change of changes){\n                if (change.type !== 'childList') continue;\n                // If the parent element of the added nodes is not within one of the targets,\n                // and not already inside a hidden node, hide all of the new children.\n                if (change.target.isConnected && ![\n                    ...visibleNodes,\n                    ...hiddenNodes\n                ].some((node)=>(0, $23f2114a1b82827e$export$4282f70798064fe0)(node, change.target))) for (let node of change.addedNodes){\n                    if ((node instanceof HTMLElement || node instanceof SVGElement) && $58196c8d6a1f38fc$var$isAlwaysVisibleNode(node)) visibleNodes.add(node);\n                    else if (node instanceof Element) walk(node);\n                }\n                if ((0, $6UjbS$shadowDOM)()) {\n                    // if any of the observed shadow roots were removed, stop observing them\n                    for (let shadowRoot of shadowRootsToWatch)if (!shadowRoot.isConnected) {\n                        observer.disconnect();\n                        break;\n                    }\n                }\n            }\n        });\n        shadowObserver.observe(shadowRoot, {\n            childList: true,\n            subtree: true\n        });\n        shadowObservers.add(shadowObserver);\n    }\n    let observerWrapper = {\n        visibleNodes: visibleNodes,\n        hiddenNodes: hiddenNodes,\n        observe () {\n            observer.observe(root, {\n                childList: true,\n                subtree: true\n            });\n        },\n        disconnect () {\n            observer.disconnect();\n        }\n    };\n    $58196c8d6a1f38fc$var$observerStack.push(observerWrapper);\n    return ()=>{\n        observer.disconnect();\n        if ((0, $6UjbS$shadowDOM)()) for (let shadowObserver of shadowObservers)shadowObserver.disconnect();\n        for (let node of hiddenNodes){\n            let count = $58196c8d6a1f38fc$var$refCountMap.get(node);\n            if (count == null) continue;\n            if (count === 1) {\n                setHidden(node, false);\n                $58196c8d6a1f38fc$var$refCountMap.delete(node);\n            } else $58196c8d6a1f38fc$var$refCountMap.set(node, count - 1);\n        }\n        // Remove this observer from the stack, and start the previous one.\n        if (observerWrapper === $58196c8d6a1f38fc$var$observerStack[$58196c8d6a1f38fc$var$observerStack.length - 1]) {\n            $58196c8d6a1f38fc$var$observerStack.pop();\n            if ($58196c8d6a1f38fc$var$observerStack.length) $58196c8d6a1f38fc$var$observerStack[$58196c8d6a1f38fc$var$observerStack.length - 1].observe();\n        } else $58196c8d6a1f38fc$var$observerStack.splice($58196c8d6a1f38fc$var$observerStack.indexOf(observerWrapper), 1);\n    };\n}\nfunction $58196c8d6a1f38fc$export$1020fa7f77e17884(element) {\n    let observer = $58196c8d6a1f38fc$var$observerStack[$58196c8d6a1f38fc$var$observerStack.length - 1];\n    if (observer && !observer.visibleNodes.has(element)) {\n        observer.visibleNodes.add(element);\n        return ()=>{\n            observer.visibleNodes.delete(element);\n        };\n    }\n}\n\n\nexport {$58196c8d6a1f38fc$export$1c3ebcada18427bf as ariaHideOutside, $58196c8d6a1f38fc$export$1020fa7f77e17884 as keepVisible};\n//# sourceMappingURL=ariaHideOutside.mjs.map\n","import {isWebKit as $2add3ce32c6007eb$export$78551043582a6a98} from \"../utils/platform.mjs\";\nimport {nodeContains as $23f2114a1b82827e$export$4282f70798064fe0} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {clamp as $c49fX$clamp} from \"react-stately/private/utils/number\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $954926fb6168ae2a$var$AXIS = {\n    top: 'top',\n    bottom: 'top',\n    left: 'left',\n    right: 'left'\n};\nconst $954926fb6168ae2a$var$FLIPPED_DIRECTION = {\n    top: 'bottom',\n    bottom: 'top',\n    left: 'right',\n    right: 'left'\n};\nconst $954926fb6168ae2a$var$CROSS_AXIS = {\n    top: 'left',\n    left: 'top'\n};\nconst $954926fb6168ae2a$var$AXIS_SIZE = {\n    top: 'height',\n    left: 'width'\n};\nconst $954926fb6168ae2a$var$TOTAL_SIZE = {\n    width: 'totalWidth',\n    height: 'totalHeight'\n};\nconst $954926fb6168ae2a$var$PARSED_PLACEMENT_CACHE = {};\nlet $954926fb6168ae2a$var$getVisualViewport = ()=>typeof document !== 'undefined' ? window.visualViewport : null;\nfunction $954926fb6168ae2a$var$getContainerDimensions(containerNode, visualViewport) {\n    let width = 0, height = 0, totalWidth = 0, totalHeight = 0, top = 0, left = 0;\n    let scroll = {};\n    let isPinchZoomedIn = (visualViewport?.scale ?? 1) > 1;\n    // In the case where the container is `html` or `body` and the container doesn't have something like `position: relative`,\n    // then position absolute will be positioned relative to the viewport, also known as the `initial containing block`.\n    // That's why we use the visual viewport instead.\n    if (containerNode.tagName === 'BODY' || containerNode.tagName === 'HTML') {\n        let documentElement = document.documentElement;\n        totalWidth = documentElement.clientWidth;\n        totalHeight = documentElement.clientHeight;\n        width = visualViewport?.width ?? totalWidth;\n        height = visualViewport?.height ?? totalHeight;\n        scroll.top = documentElement.scrollTop || containerNode.scrollTop;\n        scroll.left = documentElement.scrollLeft || containerNode.scrollLeft;\n        // The goal of the below is to get a top/left value that represents the top/left of the visual viewport with\n        // respect to the layout viewport origin. This combined with the scrollTop/scrollLeft will allow us to calculate\n        // coordinates/values with respect to the visual viewport or with respect to the layout viewport.\n        // Uses pageTop/pageLeft instead of offsetTop/offsetLeft because WebKit misreports those during pans.\n        if (visualViewport) {\n            top = Math.max(0, visualViewport.pageTop - (scroll.top ?? 0));\n            left = Math.max(0, visualViewport.pageLeft - (scroll.left ?? 0));\n        }\n    } else {\n        ({ width: width, height: height, top: top, left: left } = $954926fb6168ae2a$var$getOffset(containerNode, false));\n        scroll.top = containerNode.scrollTop;\n        scroll.left = containerNode.scrollLeft;\n        totalWidth = width;\n        totalHeight = height;\n    }\n    if ((0, $2add3ce32c6007eb$export$78551043582a6a98)() && (containerNode.tagName === 'BODY' || containerNode.tagName === 'HTML') && isPinchZoomedIn) {\n        // Safari will report a non-zero scrollTop/Left for the non-scrolling body/HTML element when pinch zoomed in unlike other browsers.\n        // Set to zero for parity calculations so we get consistent positioning of overlays across all browsers.\n        // Also switch to visualViewport.pageTop/pageLeft so that we still accomodate for scroll positioning for body/HTML elements that are actually scrollable\n        // before pinch zoom happens\n        scroll.top = 0;\n        scroll.left = 0;\n        top = visualViewport?.pageTop ?? 0;\n        left = visualViewport?.pageLeft ?? 0;\n    }\n    return {\n        width: width,\n        height: height,\n        totalWidth: totalWidth,\n        totalHeight: totalHeight,\n        scroll: scroll,\n        top: top,\n        left: left\n    };\n}\nfunction $954926fb6168ae2a$var$getScroll(node) {\n    return {\n        top: node.scrollTop,\n        left: node.scrollLeft,\n        width: node.scrollWidth,\n        height: node.scrollHeight\n    };\n}\n// Determines the amount of space required when moving the overlay to ensure it remains in the boundary\nfunction $954926fb6168ae2a$var$getDelta(axis, offset, size, // The dimensions of the boundary element that the popover is\n// positioned within (most of the time this is the <body>).\nboundaryDimensions, // The dimensions of the containing block element that the popover is\n// positioned relative to (e.g. parent with position: relative).\n// Usually this is the same as the boundary element, but if the popover\n// is portaled somewhere other than the body and has an ancestor with\n// position: relative/absolute, it will be different.\ncontainerDimensions, padding, containerOffsetWithBoundary) {\n    let containerScroll = containerDimensions.scroll[axis] ?? 0;\n    // The height/width of the boundary. Matches the axis along which we are adjusting the overlay position\n    let boundarySize = boundaryDimensions[$954926fb6168ae2a$var$AXIS_SIZE[axis]];\n    // Calculate the edges of the boundary (accomodating for the boundary padding) and the edges of the overlay.\n    // Note that these values are with respect to the visual viewport (aka 0,0 is the top left of the viewport)\n    let boundaryStartEdge = containerOffsetWithBoundary[axis] + boundaryDimensions.scroll[$954926fb6168ae2a$var$AXIS[axis]] + padding;\n    let boundaryEndEdge = containerOffsetWithBoundary[axis] + boundaryDimensions.scroll[$954926fb6168ae2a$var$AXIS[axis]] + boundarySize - padding;\n    // transformed value of the left edge of the overlay\n    let startEdgeOffset = offset - containerScroll + boundaryDimensions.scroll[$954926fb6168ae2a$var$AXIS[axis]] + containerOffsetWithBoundary[axis] - boundaryDimensions[$954926fb6168ae2a$var$AXIS[axis]];\n    // transformed value of the right edge of the overlay\n    let endEdgeOffset = offset - containerScroll + size + boundaryDimensions.scroll[$954926fb6168ae2a$var$AXIS[axis]] + containerOffsetWithBoundary[axis] - boundaryDimensions[$954926fb6168ae2a$var$AXIS[axis]];\n    // If any of the overlay edges falls outside of the boundary, shift the overlay the required amount to align one of the overlay's\n    // edges with the closest boundary edge.\n    if (startEdgeOffset < boundaryStartEdge) return boundaryStartEdge - startEdgeOffset;\n    else if (endEdgeOffset > boundaryEndEdge) return Math.max(boundaryEndEdge - endEdgeOffset, boundaryStartEdge - startEdgeOffset);\n    else return 0;\n}\nfunction $954926fb6168ae2a$var$getMargins(node) {\n    let style = window.getComputedStyle(node);\n    return {\n        top: parseInt(style.marginTop, 10) || 0,\n        bottom: parseInt(style.marginBottom, 10) || 0,\n        left: parseInt(style.marginLeft, 10) || 0,\n        right: parseInt(style.marginRight, 10) || 0\n    };\n}\nfunction $954926fb6168ae2a$var$parsePlacement(input) {\n    if ($954926fb6168ae2a$var$PARSED_PLACEMENT_CACHE[input]) return $954926fb6168ae2a$var$PARSED_PLACEMENT_CACHE[input];\n    let [placement, crossPlacement] = input.split(' ');\n    let axis = $954926fb6168ae2a$var$AXIS[placement] || 'right';\n    let crossAxis = $954926fb6168ae2a$var$CROSS_AXIS[axis];\n    if (!$954926fb6168ae2a$var$AXIS[crossPlacement]) crossPlacement = 'center';\n    let size = $954926fb6168ae2a$var$AXIS_SIZE[axis];\n    let crossSize = $954926fb6168ae2a$var$AXIS_SIZE[crossAxis];\n    $954926fb6168ae2a$var$PARSED_PLACEMENT_CACHE[input] = {\n        placement: placement,\n        crossPlacement: crossPlacement,\n        axis: axis,\n        crossAxis: crossAxis,\n        size: size,\n        crossSize: crossSize\n    };\n    return $954926fb6168ae2a$var$PARSED_PLACEMENT_CACHE[input];\n}\nfunction $954926fb6168ae2a$var$computePosition(childOffset, boundaryDimensions, overlaySize, placementInfo, offset, crossOffset, containerOffsetWithBoundary, isContainerPositioned, arrowSize, arrowBoundaryOffset, containerDimensions) {\n    let { placement: placement, crossPlacement: crossPlacement, axis: axis, crossAxis: crossAxis, size: size, crossSize: crossSize } = placementInfo;\n    let position = {};\n    // button position\n    position[crossAxis] = childOffset[crossAxis] ?? 0;\n    if (crossPlacement === 'center') //  + (button size / 2) - (overlay size / 2)\n    // at this point the overlay center should match the button center\n    position[crossAxis] += ((childOffset[crossSize] ?? 0) - (overlaySize[crossSize] ?? 0)) / 2;\n    else if (crossPlacement !== crossAxis) //  + (button size) - (overlay size)\n    // at this point the overlay bottom should match the button bottom\n    position[crossAxis] += (childOffset[crossSize] ?? 0) - (overlaySize[crossSize] ?? 0);\n     /* else {\n    the overlay top should match the button top\n  } */ \n    position[crossAxis] += crossOffset;\n    // overlay top or left overlapping arrow with button bottom or right\n    const minPosition = childOffset[crossAxis] - overlaySize[crossSize] + arrowSize + arrowBoundaryOffset;\n    // overlay bottom or right overlapping arrow with button top or left\n    const maxPosition = childOffset[crossAxis] + childOffset[crossSize] - arrowSize - arrowBoundaryOffset;\n    position[crossAxis] = (0, $c49fX$clamp)(position[crossAxis], minPosition, maxPosition);\n    // Floor these so the position isn't placed on a partial pixel, only whole pixels. Shouldn't matter if it was floored or ceiled, so chose one.\n    if (placement === axis) {\n        // If the container is positioned (non-static), then we use the container's actual\n        // height, as `bottom` will be relative to this height.  But if the container is static,\n        // then it can only be the `document.body`, and `bottom` will be relative to _its_\n        // container.\n        let containerHeight = isContainerPositioned ? containerDimensions[size] : containerDimensions[$954926fb6168ae2a$var$TOTAL_SIZE[size]];\n        position[$954926fb6168ae2a$var$FLIPPED_DIRECTION[axis]] = Math.floor(containerHeight - childOffset[axis] + offset);\n    } else position[axis] = Math.floor(childOffset[axis] + childOffset[size] + offset);\n    return position;\n}\nfunction $954926fb6168ae2a$var$getMaxHeight(position, boundaryDimensions, containerOffsetWithBoundary, isContainerPositioned, margins, padding, overlayHeight, heightGrowthDirection, containerDimensions, isContainerDescendentOfBoundary, visualViewport) {\n    // For cases where position is set via \"bottom\" instead of \"top\", we need to calculate the true overlay top\n    // with respect to the container.\n    let overlayTop = (position.top != null ? position.top : containerDimensions[$954926fb6168ae2a$var$TOTAL_SIZE.height] - (position.bottom ?? 0) - overlayHeight) - (containerDimensions.scroll.top ?? 0);\n    // calculate the dimentions of the \"boundingRect\" which is most restrictive top/bottom of the boundaryRect and the visual view port\n    let boundaryToContainerTransformOffset = isContainerDescendentOfBoundary ? containerOffsetWithBoundary.top : 0;\n    let boundingRect = {\n        // This should be boundary top in container coord system vs viewport top in container coord system\n        // For the viewport top, there are several cases\n        // 1. pinchzoom case where we want the viewports offset top as top here\n        // 2. case where container is offset from the boundary and is contained by the boundary. In this case the top we want here is NOT 0, we want to take boundary's top even though is is a negative number OR the visual viewport, whichever is more restrictive\n        top: Math.max(boundaryDimensions.top + boundaryToContainerTransformOffset, (visualViewport?.offsetTop ?? boundaryDimensions.top) + boundaryToContainerTransformOffset),\n        bottom: Math.min(boundaryDimensions.top + boundaryDimensions.height + boundaryToContainerTransformOffset, (visualViewport?.offsetTop ?? 0) + (visualViewport?.height ?? 0))\n    };\n    let maxHeight = heightGrowthDirection !== 'top' ? Math.max(0, boundingRect.bottom - // this is the bottom of the boundary\n    overlayTop - // this is the top of the overlay\n    ((margins.top ?? 0) + (margins.bottom ?? 0) + padding // save additional space for margin and padding\n    )) : Math.max(0, overlayTop + overlayHeight - // this is the bottom of the overlay\n    boundingRect.top - // this is the top of the boundary\n    ((margins.top ?? 0) + (margins.bottom ?? 0) + padding // save additional space for margin and padding\n    ));\n    return maxHeight;\n}\nfunction $954926fb6168ae2a$var$getAvailableSpace(boundaryDimensions, containerOffsetWithBoundary, childOffset, margins, padding, placementInfo, containerDimensions, isContainerDescendentOfBoundary) {\n    let { placement: placement, axis: axis, size: size } = placementInfo;\n    if (placement === axis) return Math.max(0, childOffset[axis] - // trigger start\n    (containerDimensions.scroll[axis] ?? 0) - // transform trigger position to be with respect to viewport 0,0\n    (boundaryDimensions[axis] + (isContainerDescendentOfBoundary ? containerOffsetWithBoundary[axis] : 0)) - // boundary start\n    (margins[axis] ?? 0) - // margins usually for arrows or other decorations\n    margins[$954926fb6168ae2a$var$FLIPPED_DIRECTION[axis]] - padding); // padding between overlay and boundary\n    return Math.max(0, boundaryDimensions[size] + boundaryDimensions[axis] + (isContainerDescendentOfBoundary ? containerOffsetWithBoundary[axis] : 0) - childOffset[axis] - childOffset[size] + (containerDimensions.scroll[axis] ?? 0) - (margins[axis] ?? 0) - margins[$954926fb6168ae2a$var$FLIPPED_DIRECTION[axis]] - padding);\n}\nfunction $954926fb6168ae2a$export$6839422d1f33cee9(placementInput, childOffset, overlaySize, scrollSize, margins, padding, flip, boundaryDimensions, containerDimensions, containerOffsetWithBoundary, offset, crossOffset, isContainerPositioned, userSetMaxHeight, arrowSize, arrowBoundaryOffset, isContainerDescendentOfBoundary, visualViewport) {\n    let placementInfo = $954926fb6168ae2a$var$parsePlacement(placementInput);\n    let { size: size, crossAxis: crossAxis, crossSize: crossSize, placement: placement, crossPlacement: crossPlacement } = placementInfo;\n    let position = $954926fb6168ae2a$var$computePosition(childOffset, boundaryDimensions, overlaySize, placementInfo, offset, crossOffset, containerOffsetWithBoundary, isContainerPositioned, arrowSize, arrowBoundaryOffset, containerDimensions);\n    let normalizedOffset = offset;\n    let space = $954926fb6168ae2a$var$getAvailableSpace(boundaryDimensions, containerOffsetWithBoundary, childOffset, margins, padding + offset, placementInfo, containerDimensions, isContainerDescendentOfBoundary);\n    // Check if the scroll size of the overlay is greater than the available space to determine if we need to flip\n    if (flip && overlaySize[size] > space) {\n        let flippedPlacementInfo = $954926fb6168ae2a$var$parsePlacement(`${$954926fb6168ae2a$var$FLIPPED_DIRECTION[placement]} ${crossPlacement}`);\n        let flippedPosition = $954926fb6168ae2a$var$computePosition(childOffset, boundaryDimensions, overlaySize, flippedPlacementInfo, offset, crossOffset, containerOffsetWithBoundary, isContainerPositioned, arrowSize, arrowBoundaryOffset, containerDimensions);\n        let flippedSpace = $954926fb6168ae2a$var$getAvailableSpace(boundaryDimensions, containerOffsetWithBoundary, childOffset, margins, padding + offset, flippedPlacementInfo, containerDimensions, isContainerDescendentOfBoundary);\n        // If the available space for the flipped position is greater than the original available space, flip.\n        if (flippedSpace > space) {\n            placementInfo = flippedPlacementInfo;\n            position = flippedPosition;\n            normalizedOffset = offset;\n        }\n    }\n    // Determine the direction the height of the overlay can grow so that we can choose how to calculate the max height\n    let heightGrowthDirection = 'bottom';\n    if (placementInfo.axis === 'top') {\n        if (placementInfo.placement === 'top') heightGrowthDirection = 'top';\n        else if (placementInfo.placement === 'bottom') heightGrowthDirection = 'bottom';\n    } else if (placementInfo.crossAxis === 'top') {\n        if (placementInfo.crossPlacement === 'top') heightGrowthDirection = 'bottom';\n        else if (placementInfo.crossPlacement === 'bottom') heightGrowthDirection = 'top';\n    }\n    let delta = $954926fb6168ae2a$var$getDelta(crossAxis, position[crossAxis], overlaySize[crossSize], boundaryDimensions, containerDimensions, padding, containerOffsetWithBoundary);\n    position[crossAxis] += delta;\n    let maxHeight = $954926fb6168ae2a$var$getMaxHeight(position, boundaryDimensions, containerOffsetWithBoundary, isContainerPositioned, margins, padding, overlaySize.height, heightGrowthDirection, containerDimensions, isContainerDescendentOfBoundary, visualViewport);\n    if (userSetMaxHeight && userSetMaxHeight < maxHeight) maxHeight = userSetMaxHeight;\n    overlaySize.height = Math.min(overlaySize.height, maxHeight);\n    position = $954926fb6168ae2a$var$computePosition(childOffset, boundaryDimensions, overlaySize, placementInfo, normalizedOffset, crossOffset, containerOffsetWithBoundary, isContainerPositioned, arrowSize, arrowBoundaryOffset, containerDimensions);\n    delta = $954926fb6168ae2a$var$getDelta(crossAxis, position[crossAxis], overlaySize[crossSize], boundaryDimensions, containerDimensions, padding, containerOffsetWithBoundary);\n    position[crossAxis] += delta;\n    let arrowPosition = {};\n    // All values are transformed so that 0 is at the top/left of the overlay depending on the orientation\n    // Prefer the arrow being in the center of the trigger/overlay anchor element\n    // childOffset[crossAxis] + .5 * childOffset[crossSize] = absolute position with respect to the trigger's coordinate system that would place the arrow in the center of the trigger\n    // position[crossAxis] - margins[AXIS[crossAxis]] = value use to transform the position to a value with respect to the overlay's coordinate system. A child element's (aka arrow) position absolute's \"0\"\n    // is positioned after the margin of its parent (aka overlay) so we need to subtract it to get the proper coordinate transform\n    let origin = childOffset[crossAxis] - position[crossAxis] - margins[$954926fb6168ae2a$var$AXIS[crossAxis]];\n    let preferredArrowPosition = origin + 0.5 * childOffset[crossSize];\n    // Min/Max position limits for the arrow with respect to the overlay\n    const arrowMinPosition = arrowSize / 2 + arrowBoundaryOffset;\n    // overlaySize[crossSize] - margins = true size of the overlay\n    const overlayMargin = $954926fb6168ae2a$var$AXIS[crossAxis] === 'left' ? (margins.left ?? 0) + (margins.right ?? 0) : (margins.top ?? 0) + (margins.bottom ?? 0);\n    const arrowMaxPosition = overlaySize[crossSize] - overlayMargin - arrowSize / 2 - arrowBoundaryOffset;\n    // Min/Max position limits for the arrow with respect to the trigger/overlay anchor element\n    // Same margin accomodation done here as well as for the preferredArrowPosition\n    const arrowOverlappingChildMinEdge = childOffset[crossAxis] + arrowSize / 2 - (position[crossAxis] + margins[$954926fb6168ae2a$var$AXIS[crossAxis]]);\n    const arrowOverlappingChildMaxEdge = childOffset[crossAxis] + childOffset[crossSize] - arrowSize / 2 - (position[crossAxis] + margins[$954926fb6168ae2a$var$AXIS[crossAxis]]);\n    // Clamp the arrow positioning so that it always is within the bounds of the anchor and the overlay\n    const arrowPositionOverlappingChild = (0, $c49fX$clamp)(preferredArrowPosition, arrowOverlappingChildMinEdge, arrowOverlappingChildMaxEdge);\n    arrowPosition[crossAxis] = (0, $c49fX$clamp)(arrowPositionOverlappingChild, arrowMinPosition, arrowMaxPosition);\n    // If there is an arrow, use that as the origin so that animations are smooth.\n    // Otherwise use the target edge.\n    ({ placement: placement, crossPlacement: crossPlacement } = placementInfo);\n    if (arrowSize) origin = arrowPosition[crossAxis];\n    else if (crossPlacement === 'right') origin += childOffset[crossSize];\n    else if (crossPlacement === 'center') origin += childOffset[crossSize] / 2;\n    let crossOrigin = placement === 'left' || placement === 'top' ? overlaySize[size] : 0;\n    let triggerAnchorPoint = {\n        x: placement === 'top' || placement === 'bottom' ? origin : crossOrigin,\n        y: placement === 'left' || placement === 'right' ? origin : crossOrigin\n    };\n    return {\n        position: position,\n        maxHeight: maxHeight,\n        arrowOffsetLeft: arrowPosition.left,\n        arrowOffsetTop: arrowPosition.top,\n        placement: placement,\n        triggerAnchorPoint: triggerAnchorPoint\n    };\n}\nfunction $954926fb6168ae2a$export$b3ceb0cbf1056d98(opts) {\n    let { placement: placement, targetNode: targetNode, overlayNode: overlayNode, scrollNode: scrollNode, padding: padding, shouldFlip: shouldFlip, boundaryElement: boundaryElement, offset: offset, crossOffset: crossOffset, maxHeight: maxHeight, arrowSize: arrowSize = 0, arrowBoundaryOffset: arrowBoundaryOffset = 0, targetRect: targetRect } = opts;\n    let visualViewport = $954926fb6168ae2a$var$getVisualViewport();\n    let container = overlayNode instanceof HTMLElement ? $954926fb6168ae2a$var$getContainingBlock(overlayNode) : document.documentElement;\n    let isViewportContainer = container === document.documentElement;\n    const containerPositionStyle = window.getComputedStyle(container).position;\n    let isContainerPositioned = !!containerPositionStyle && containerPositionStyle !== 'static';\n    let childOffset = isViewportContainer ? $954926fb6168ae2a$var$getOffset(targetNode, false, targetRect) : $954926fb6168ae2a$var$getPosition(targetNode, container, false, targetRect);\n    if (!isViewportContainer) {\n        let { marginTop: marginTop, marginLeft: marginLeft } = window.getComputedStyle(targetNode);\n        childOffset.top += parseInt(marginTop, 10) || 0;\n        childOffset.left += parseInt(marginLeft, 10) || 0;\n    }\n    let overlaySize = $954926fb6168ae2a$var$getOffset(overlayNode, true);\n    let margins = $954926fb6168ae2a$var$getMargins(overlayNode);\n    overlaySize.width += (margins.left ?? 0) + (margins.right ?? 0);\n    overlaySize.height += (margins.top ?? 0) + (margins.bottom ?? 0);\n    let scrollSize = $954926fb6168ae2a$var$getScroll(scrollNode);\n    // Note that due to logic inside getContainerDimensions, for cases where the boundary element is the body, we will return\n    // a height/width that matches the visual viewport size rather than the body's height/width (aka for zoom it will be zoom adjusted size)\n    // and a top/left that is adjusted as well (will return the top/left of the zoomed in viewport, or 0,0 for a non-zoomed body)\n    // Otherwise this returns the height/width of a arbitrary boundary element, and its top/left with respect to the viewport (NOTE THIS MEANS IT DOESNT INCLUDE SCROLL)\n    let boundaryDimensions = $954926fb6168ae2a$var$getContainerDimensions(boundaryElement, visualViewport);\n    let containerDimensions = $954926fb6168ae2a$var$getContainerDimensions(container, visualViewport);\n    // There are several difference cases of how to calculate the containerOffsetWithBoundary:\n    // - boundaryElement is body or HTML and the container is an arbitrary element in the boundary (aka submenu with parent menu as container in v3)\n    // - boundaryElement and container are both body or HTML element (aka standard popover case)\n    // - boundaryElement is customized by the user. Container can also be arbitrary (either body/HTML or some other element)\n    // containerOffsetWithBoundary should always return a value that is the boundary's coordinate offset with respect to the container coord system (container is 0, 0)\n    let containerOffsetWithBoundary;\n    if ((boundaryElement.tagName === 'BODY' || boundaryElement.tagName === 'HTML') && !isViewportContainer) {\n        // Use getRect instead of getOffset because boundaryDimensions for BODY/HTML is in viewport coordinate space,\n        // not document coordinate space\n        let containerRect = $954926fb6168ae2a$export$4b834cebd9e5cebe(container, false);\n        // the offset should be negative because if container is at viewport position x,y, then viewport top (aka 0)\n        // is at position -x,y in container-relative coordinates\n        containerOffsetWithBoundary = {\n            top: -(containerRect.top - boundaryDimensions.top),\n            left: -(containerRect.left - boundaryDimensions.left),\n            width: 0,\n            height: 0\n        };\n    } else if ((boundaryElement.tagName === 'BODY' || boundaryElement.tagName === 'HTML') && isViewportContainer) // both are the same viewport container, no offset needed\n    containerOffsetWithBoundary = {\n        top: 0,\n        left: 0,\n        width: 0,\n        height: 0\n    };\n    else // This returns the boundary's coordinate with respect to the container. This case captures cases such as when you provide a custom boundary\n    // like in ScrollingBoundaryContainerExample in Popover.stories.\n    containerOffsetWithBoundary = $954926fb6168ae2a$var$getPosition(boundaryElement, container, false);\n    let isContainerDescendentOfBoundary = (0, $23f2114a1b82827e$export$4282f70798064fe0)(boundaryElement, container);\n    return $954926fb6168ae2a$export$6839422d1f33cee9(placement, childOffset, overlaySize, scrollSize, margins, padding, shouldFlip, boundaryDimensions, containerDimensions, containerOffsetWithBoundary, offset, crossOffset, isContainerPositioned, maxHeight, arrowSize, arrowBoundaryOffset, isContainerDescendentOfBoundary, visualViewport);\n}\nfunction $954926fb6168ae2a$export$4b834cebd9e5cebe(node, ignoreScale) {\n    let { top: top, left: left, width: width, height: height } = node.getBoundingClientRect();\n    // Use offsetWidth and offsetHeight if this is an HTML element, so that\n    // the size is not affected by scale transforms.\n    if (ignoreScale && node instanceof node.ownerDocument.defaultView.HTMLElement) {\n        width = node.offsetWidth;\n        height = node.offsetHeight;\n    }\n    return {\n        top: top,\n        left: left,\n        width: width,\n        height: height\n    };\n}\nfunction $954926fb6168ae2a$var$getOffset(node, ignoreScale, overrideRect) {\n    let { top: top, left: left, width: width, height: height } = overrideRect || $954926fb6168ae2a$export$4b834cebd9e5cebe(node, ignoreScale);\n    let { scrollTop: scrollTop, scrollLeft: scrollLeft, clientTop: clientTop, clientLeft: clientLeft } = document.documentElement;\n    return {\n        top: top + scrollTop - clientTop,\n        left: left + scrollLeft - clientLeft,\n        width: width,\n        height: height\n    };\n}\nfunction $954926fb6168ae2a$var$getPosition(node, parent, ignoreScale, overrideRect) {\n    let style = window.getComputedStyle(node);\n    let offset;\n    if (style.position === 'fixed') offset = overrideRect || $954926fb6168ae2a$export$4b834cebd9e5cebe(node, ignoreScale);\n    else {\n        offset = $954926fb6168ae2a$var$getOffset(node, ignoreScale, overrideRect);\n        let parentOffset = $954926fb6168ae2a$var$getOffset(parent, ignoreScale);\n        let parentStyle = window.getComputedStyle(parent);\n        parentOffset.top += (parseInt(parentStyle.borderTopWidth, 10) || 0) - parent.scrollTop;\n        parentOffset.left += (parseInt(parentStyle.borderLeftWidth, 10) || 0) - parent.scrollLeft;\n        offset.top -= parentOffset.top;\n        offset.left -= parentOffset.left;\n    }\n    offset.top -= parseInt(style.marginTop, 10) || 0;\n    offset.left -= parseInt(style.marginLeft, 10) || 0;\n    return offset;\n}\n// Returns the containing block of an element, which is the element that\n// this element will be positioned relative to.\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block\nfunction $954926fb6168ae2a$var$getContainingBlock(node) {\n    // The offsetParent of an element in most cases equals the containing block.\n    // https://w3c.github.io/csswg-drafts/cssom-view/#dom-htmlelement-offsetparent\n    let offsetParent = node.offsetParent;\n    // The offsetParent algorithm terminates at the document body,\n    // even if the body is not a containing block. Double check that\n    // and use the documentElement if so.\n    if (offsetParent && offsetParent === document.body && window.getComputedStyle(offsetParent).position === 'static' && !$954926fb6168ae2a$var$isContainingBlock(offsetParent)) offsetParent = document.documentElement;\n    // TODO(later): handle table elements?\n    // The offsetParent can be null if the element has position: fixed, or a few other cases.\n    // We have to walk up the tree manually in this case because fixed positioned elements\n    // are still positioned relative to their containing block, which is not always the viewport.\n    if (offsetParent == null) {\n        offsetParent = node.parentElement;\n        while(offsetParent && !$954926fb6168ae2a$var$isContainingBlock(offsetParent))offsetParent = offsetParent.parentElement;\n    }\n    // Fall back to the viewport.\n    return offsetParent || document.documentElement;\n}\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\nfunction $954926fb6168ae2a$var$isContainingBlock(node) {\n    let style = window.getComputedStyle(node);\n    return style.transform !== 'none' || /transform|perspective/.test(style.willChange) || style.filter !== 'none' || style.contain === 'paint' || 'backdropFilter' in style && style.backdropFilter !== 'none' || 'WebkitBackdropFilter' in style && style.WebkitBackdropFilter !== 'none';\n}\n\n\nexport {$954926fb6168ae2a$export$6839422d1f33cee9 as calculatePositionInternal, $954926fb6168ae2a$export$b3ceb0cbf1056d98 as calculatePosition, $954926fb6168ae2a$export$4b834cebd9e5cebe as getRect};\n//# sourceMappingURL=calculatePosition.mjs.map\n","import {addEvent as $d447af545b77c9f1$export$f531f92e2a15358f} from \"../utils/domHelpers.mjs\";\nimport {getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29, getPropagationTargets as $23f2114a1b82827e$export$da7af4355d792141, nodeContains as $23f2114a1b82827e$export$4282f70798064fe0} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {useEffect as $8Mq5d$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $22e2f5f6490788e8$export$f6211563215e3b37 = new WeakMap();\nfunction $22e2f5f6490788e8$export$18fc8428861184da(opts) {\n    let { triggerRef: triggerRef, isOpen: isOpen, onClose: onClose } = opts;\n    (0, $8Mq5d$useEffect)(()=>{\n        if (!isOpen || onClose === null) return;\n        let onScroll = (e)=>{\n            // Ignore if scrolling an scrollable region outside the trigger's tree.\n            let target = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n            // window is not a Node and doesn't have contain, but window contains everything\n            if (!triggerRef.current || target instanceof Node && !(0, $23f2114a1b82827e$export$4282f70798064fe0)(target, triggerRef.current)) return;\n            // Ignore scroll events on any input or textarea as the cursor position can cause it to scroll\n            // such as in a combobox. Clicking the dropdown button places focus on the input, and if the\n            // text inside the input extends beyond the 'end', then it will scroll so the cursor is visible at the end.\n            if (target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement) return;\n            let onCloseHandler = onClose || $22e2f5f6490788e8$export$f6211563215e3b37.get(triggerRef.current);\n            if (onCloseHandler) onCloseHandler();\n        };\n        return (0, $d447af545b77c9f1$export$f531f92e2a15358f)((0, $23f2114a1b82827e$export$da7af4355d792141)(triggerRef.current), 'scroll', onScroll, true);\n    }, [\n        isOpen,\n        onClose,\n        triggerRef\n    ]);\n}\n\n\nexport {$22e2f5f6490788e8$export$f6211563215e3b37 as onCloseMap, $22e2f5f6490788e8$export$18fc8428861184da as useCloseOnScroll};\n//# sourceMappingURL=useCloseOnScroll.mjs.map\n","import {useEffectEvent as $fe16bffc7a557bf0$export$7f54fc3180508a52} from \"./useEffectEvent.mjs\";\nimport {useEffect as $aLvW6$useEffect} from \"react\";\n\n\n\nfunction $970072cf4b13fde3$var$hasResizeObserver() {\n    return typeof window.ResizeObserver !== 'undefined';\n}\nfunction $970072cf4b13fde3$export$683480f191c0e3ea(options) {\n    // Only call onResize from inside the effect, otherwise we'll void our assumption that\n    // useEffectEvents are safe to pass in.\n    const { ref: ref, box: box, onResize: onResize } = options;\n    let onResizeEvent = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)(onResize);\n    (0, $aLvW6$useEffect)(()=>{\n        let element = ref?.current;\n        if (!element) return;\n        if (!$970072cf4b13fde3$var$hasResizeObserver()) {\n            window.addEventListener('resize', onResizeEvent, false);\n            return ()=>{\n                window.removeEventListener('resize', onResizeEvent, false);\n            };\n        } else {\n            const resizeObserverInstance = new window.ResizeObserver((entries)=>{\n                if (!entries.length) return;\n                onResizeEvent();\n            });\n            resizeObserverInstance.observe(element, {\n                box: box\n            });\n            return ()=>{\n                if (element) resizeObserverInstance.unobserve(element);\n            };\n        }\n    }, [\n        ref,\n        box\n    ]);\n}\n\n\nexport {$970072cf4b13fde3$export$683480f191c0e3ea as useResizeObserver};\n//# sourceMappingURL=useResizeObserver.mjs.map\n","import {addEvent as $d447af545b77c9f1$export$f531f92e2a15358f} from \"../utils/domHelpers.mjs\";\nimport {calculatePosition as $954926fb6168ae2a$export$b3ceb0cbf1056d98, getRect as $954926fb6168ae2a$export$4b834cebd9e5cebe} from \"./calculatePosition.mjs\";\nimport {getActiveElement as $23f2114a1b82827e$export$cd4e5573fbe2b576, getPropagationTargets as $23f2114a1b82827e$export$da7af4355d792141, isFocusWithin as $23f2114a1b82827e$export$b4f377a2b6254582} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {useCloseOnScroll as $22e2f5f6490788e8$export$18fc8428861184da} from \"./useCloseOnScroll.mjs\";\nimport {useLayoutEffect as $c4867b2f328c2698$export$e5c5a5f917a5871c} from \"../utils/useLayoutEffect.mjs\";\nimport {useLocale as $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7} from \"../i18n/I18nProvider.mjs\";\nimport {useResizeObserver as $970072cf4b13fde3$export$683480f191c0e3ea} from \"../utils/useResizeObserver.mjs\";\nimport {useState as $jKzS8$useState, useRef as $jKzS8$useRef, useEffect as $jKzS8$useEffect, useCallback as $jKzS8$useCallback} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\nlet $b3526bc71400be8d$var$visualViewport = typeof document !== 'undefined' ? window.visualViewport : null;\nfunction $b3526bc71400be8d$export$d39e1813b3bdd0e1(props) {\n    let { direction: direction } = (0, $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7)();\n    let { arrowSize: arrowSize, targetRef: targetRef, overlayRef: overlayRef, arrowRef: arrowRef, scrollRef: scrollRef = overlayRef, placement: placement = 'bottom', containerPadding: containerPadding = 12, shouldFlip: shouldFlip = true, boundaryElement: boundaryElement = typeof document !== 'undefined' ? document.body : null, offset: offset = 0, crossOffset: crossOffset = 0, shouldUpdatePosition: shouldUpdatePosition = true, isOpen: isOpen = true, onClose: onClose, maxHeight: maxHeight, arrowBoundaryOffset: arrowBoundaryOffset = 0, getTargetRect: getTargetRect } = props;\n    let [position, setPosition] = (0, $jKzS8$useState)(null);\n    let deps = [\n        shouldUpdatePosition,\n        placement,\n        // oxlint-disable-next-line react/react-compiler\n        overlayRef.current,\n        // oxlint-disable-next-line react/react-compiler\n        targetRef.current,\n        // oxlint-disable-next-line react/react-compiler\n        arrowRef?.current,\n        // oxlint-disable-next-line react/react-compiler\n        scrollRef.current,\n        containerPadding,\n        shouldFlip,\n        boundaryElement,\n        offset,\n        crossOffset,\n        isOpen,\n        direction,\n        maxHeight,\n        arrowBoundaryOffset,\n        arrowSize\n    ];\n    // Note, the position freezing breaks if body sizes itself dynamicly with the visual viewport but that might\n    // just be a non-realistic use case\n    // Upon opening a overlay, record the current visual viewport scale so we can freeze the overlay styles\n    let lastScale = (0, $jKzS8$useRef)($b3526bc71400be8d$var$visualViewport?.scale);\n    (0, $jKzS8$useEffect)(()=>{\n        if (isOpen) lastScale.current = $b3526bc71400be8d$var$visualViewport?.scale;\n    }, [\n        isOpen\n    ]);\n    let updatePosition = (0, $jKzS8$useCallback)(()=>{\n        if (shouldUpdatePosition === false || !isOpen || !overlayRef.current || !targetRef.current || !boundaryElement) return;\n        if ($b3526bc71400be8d$var$visualViewport?.scale !== lastScale.current) return;\n        // Determine a scroll anchor based on the focused element.\n        // This stores the offset of the anchor element from the scroll container\n        // so it can be restored after repositioning. This way if the overlay height\n        // changes, the focused element appears to stay in the same position.\n        let anchor = null;\n        if (scrollRef.current && (0, $23f2114a1b82827e$export$b4f377a2b6254582)(scrollRef.current)) {\n            let anchorRect = (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)()?.getBoundingClientRect();\n            let scrollRect = scrollRef.current.getBoundingClientRect();\n            // Anchor from the top if the offset is in the top half of the scrollable element,\n            // otherwise anchor from the bottom.\n            anchor = {\n                type: 'top',\n                offset: (anchorRect?.top ?? 0) - scrollRect.top\n            };\n            if (anchor.offset > scrollRect.height / 2) {\n                anchor.type = 'bottom';\n                anchor.offset = (anchorRect?.bottom ?? 0) - scrollRect.bottom;\n            }\n        }\n        // Always reset the overlay's previous max height if not defined by the user so that we can compensate for\n        // RAC collections populating after a second render and properly set a correct max height + positioning when it populates.\n        let overlay = overlayRef.current;\n        if (!maxHeight && overlayRef.current) {\n            overlay.style.top = '0px';\n            overlay.style.bottom = '';\n            overlay.style.maxHeight = (window.visualViewport?.height ?? window.innerHeight) + 'px';\n        }\n        let position = (0, $954926fb6168ae2a$export$b3ceb0cbf1056d98)({\n            placement: $b3526bc71400be8d$var$translateRTL(placement, direction),\n            overlayNode: overlayRef.current,\n            targetNode: targetRef.current,\n            scrollNode: scrollRef.current || overlayRef.current,\n            padding: containerPadding,\n            shouldFlip: shouldFlip,\n            boundaryElement: boundaryElement,\n            offset: offset,\n            crossOffset: crossOffset,\n            maxHeight: maxHeight,\n            arrowSize: arrowSize ?? (arrowRef?.current ? (0, $954926fb6168ae2a$export$4b834cebd9e5cebe)(arrowRef.current, true).width : 0),\n            arrowBoundaryOffset: arrowBoundaryOffset,\n            targetRect: getTargetRect?.(targetRef.current)\n        });\n        if (!position.position) return;\n        // Modify overlay styles directly so positioning happens immediately without the need of a second render\n        // This is so we don't have to delay autoFocus scrolling or delay applying preventScroll for popovers\n        overlay.style.top = '';\n        overlay.style.bottom = '';\n        overlay.style.left = '';\n        overlay.style.right = '';\n        Object.keys(position.position).forEach((key)=>overlay.style[key] = position.position[key] + 'px');\n        overlay.style.maxHeight = position.maxHeight != null ? position.maxHeight + 'px' : '';\n        // Restore scroll position relative to anchor element.\n        let activeElement = (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)();\n        if (anchor && activeElement && scrollRef.current) {\n            let anchorRect = activeElement.getBoundingClientRect();\n            let scrollRect = scrollRef.current.getBoundingClientRect();\n            let newOffset = anchorRect[anchor.type] - scrollRect[anchor.type];\n            scrollRef.current.scrollTop += newOffset - anchor.offset;\n        }\n        // Trigger a set state for a second render anyway for arrow positioning\n        setPosition(position);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    // oxlint-disable-next-line react/react-compiler, react-hooks/exhaustive-deps\n    }, deps);\n    // Update position when anything changes\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    // oxlint-disable-next-line react/react-compiler, react-hooks/exhaustive-deps\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(updatePosition, deps);\n    // Update position on window resize\n    $b3526bc71400be8d$var$useResize(updatePosition);\n    // Update position when the overlay changes size (might need to flip).\n    (0, $970072cf4b13fde3$export$683480f191c0e3ea)({\n        ref: overlayRef,\n        onResize: updatePosition\n    });\n    // Update position when the target changes size (might need to flip).\n    (0, $970072cf4b13fde3$export$683480f191c0e3ea)({\n        ref: targetRef,\n        onResize: updatePosition\n    });\n    // Reposition the overlay and do not close on scroll while the visual viewport is resizing.\n    // This will ensure that overlays adjust their positioning when the iOS virtual keyboard appears.\n    let isResizing = (0, $jKzS8$useRef)(false);\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        let timeout;\n        let onResize = ()=>{\n            isResizing.current = true;\n            clearTimeout(timeout);\n            timeout = setTimeout(()=>{\n                isResizing.current = false;\n            }, 500);\n            updatePosition();\n        };\n        // Only reposition the overlay if a scroll event happens immediately as a result of resize (aka the virtual keyboard has appears)\n        // We don't want to reposition the overlay if the user has pinch zoomed in and is scrolling the viewport around.\n        let onScroll = ()=>{\n            if (isResizing.current) onResize();\n        };\n        $b3526bc71400be8d$var$visualViewport?.addEventListener('resize', onResize);\n        $b3526bc71400be8d$var$visualViewport?.addEventListener('scroll', onScroll);\n        let cleanup = (0, $d447af545b77c9f1$export$f531f92e2a15358f)(// @ts-expect-error\n        (0, $23f2114a1b82827e$export$da7af4355d792141)(window), 'scroll', onScroll);\n        return ()=>{\n            $b3526bc71400be8d$var$visualViewport?.removeEventListener('resize', onResize);\n            $b3526bc71400be8d$var$visualViewport?.removeEventListener('scroll', onScroll);\n            cleanup();\n        };\n    }, [\n        updatePosition\n    ]);\n    let close = (0, $jKzS8$useCallback)(()=>{\n        if (!isResizing.current) onClose?.();\n    }, [\n        onClose,\n        isResizing\n    ]);\n    // When scrolling a parent scrollable region of the trigger (other than the body),\n    // we hide the popover. Otherwise, its position would be incorrect.\n    (0, $22e2f5f6490788e8$export$18fc8428861184da)({\n        triggerRef: targetRef,\n        isOpen: isOpen,\n        onClose: onClose && close\n    });\n    return {\n        overlayProps: {\n            style: {\n                position: position ? 'absolute' : 'fixed',\n                top: !position ? 0 : undefined,\n                left: !position ? 0 : undefined,\n                zIndex: 100000,\n                ...position?.position,\n                maxHeight: position?.maxHeight ?? '100vh'\n            }\n        },\n        placement: position?.placement ?? null,\n        triggerAnchorPoint: position?.triggerAnchorPoint ?? null,\n        arrowProps: {\n            'aria-hidden': 'true',\n            role: 'presentation',\n            style: {\n                left: position?.arrowOffsetLeft,\n                top: position?.arrowOffsetTop\n            }\n        },\n        updatePosition: updatePosition\n    };\n}\nfunction $b3526bc71400be8d$var$useResize(onResize) {\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        window.addEventListener('resize', onResize, false);\n        return ()=>{\n            window.removeEventListener('resize', onResize, false);\n        };\n    }, [\n        onResize\n    ]);\n}\nfunction $b3526bc71400be8d$var$translateRTL(position, direction) {\n    if (direction === 'rtl') return position.replace('start', 'right').replace('end', 'left');\n    return position.replace('start', 'left').replace('end', 'right');\n}\n\n\nexport {$b3526bc71400be8d$export$d39e1813b3bdd0e1 as useOverlayPosition};\n//# sourceMappingURL=useOverlayPosition.mjs.map\n","import {getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29, nodeContains as $23f2114a1b82827e$export$4282f70798064fe0} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {getOwnerDocument as $d447af545b77c9f1$export$b204af158042fbac} from \"../utils/domHelpers.mjs\";\nimport {useEffectEvent as $fe16bffc7a557bf0$export$7f54fc3180508a52} from \"../utils/useEffectEvent.mjs\";\nimport {useRef as $a2uwp$useRef, useEffect as $a2uwp$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\n\n\nfunction $e260d131964da0f9$export$872b660ac5a1ff98(props) {\n    let { ref: ref, onInteractOutside: onInteractOutside, isDisabled: isDisabled, onInteractOutsideStart: onInteractOutsideStart } = props;\n    let stateRef = (0, $a2uwp$useRef)({\n        isPointerDown: false,\n        ignoreEmulatedMouseEvents: false\n    });\n    let onPointerDown = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)((e)=>{\n        if (onInteractOutside && $e260d131964da0f9$var$isValidEvent(e, ref)) {\n            if (onInteractOutsideStart) onInteractOutsideStart(e);\n            stateRef.current.isPointerDown = true;\n        }\n    });\n    let triggerInteractOutside = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)((e)=>{\n        if (onInteractOutside) onInteractOutside(e);\n    });\n    (0, $a2uwp$useEffect)(()=>{\n        let state = stateRef.current;\n        if (isDisabled) return;\n        const element = ref.current;\n        const documentObject = (0, $d447af545b77c9f1$export$b204af158042fbac)(element);\n        // Use pointer events if available. Otherwise, fall back to mouse and touch events.\n        if (typeof PointerEvent !== 'undefined') {\n            let onClick = (e)=>{\n                if (state.isPointerDown && $e260d131964da0f9$var$isValidEvent(e, ref)) triggerInteractOutside(e);\n                state.isPointerDown = false;\n            };\n            // changing these to capture phase fixed combobox\n            // Use click instead of pointerup to avoid Android Chrome issue\n            // https://issues.chromium.org/issues/40732224\n            documentObject.addEventListener('pointerdown', onPointerDown, true);\n            documentObject.addEventListener('click', onClick, true);\n            return ()=>{\n                documentObject.removeEventListener('pointerdown', onPointerDown, true);\n                documentObject.removeEventListener('click', onClick, true);\n            };\n        } else if (process.env.NODE_ENV === 'test') {\n            let onMouseUp = (e)=>{\n                if (state.ignoreEmulatedMouseEvents) state.ignoreEmulatedMouseEvents = false;\n                else if (state.isPointerDown && $e260d131964da0f9$var$isValidEvent(e, ref)) triggerInteractOutside(e);\n                state.isPointerDown = false;\n            };\n            let onTouchEnd = (e)=>{\n                state.ignoreEmulatedMouseEvents = true;\n                if (state.isPointerDown && $e260d131964da0f9$var$isValidEvent(e, ref)) triggerInteractOutside(e);\n                state.isPointerDown = false;\n            };\n            documentObject.addEventListener('mousedown', onPointerDown, true);\n            documentObject.addEventListener('mouseup', onMouseUp, true);\n            documentObject.addEventListener('touchstart', onPointerDown, true);\n            documentObject.addEventListener('touchend', onTouchEnd, true);\n            return ()=>{\n                documentObject.removeEventListener('mousedown', onPointerDown, true);\n                documentObject.removeEventListener('mouseup', onMouseUp, true);\n                documentObject.removeEventListener('touchstart', onPointerDown, true);\n                documentObject.removeEventListener('touchend', onTouchEnd, true);\n            };\n        }\n    }, [\n        ref,\n        isDisabled\n    ]);\n}\nfunction $e260d131964da0f9$var$isValidEvent(event, ref) {\n    if (event.button > 0) return false;\n    let target = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(event);\n    if (target) {\n        // if the event target is no longer in the document, ignore\n        const ownerDocument = target.ownerDocument;\n        if (!ownerDocument || !(0, $23f2114a1b82827e$export$4282f70798064fe0)(ownerDocument.documentElement, target)) return false;\n        // If the target is within a top layer element (e.g. toasts), ignore.\n        if (target.closest('[data-react-aria-top-layer]')) return false;\n    }\n    if (!ref.current) return false;\n    // When the event source is inside a Shadow DOM, event.target is just the shadow root.\n    // Using event.composedPath instead means we can get the actual element inside the shadow root.\n    // This only works if the shadow root is open, there is no way to detect if it is closed.\n    // If the event composed path contains the ref, interaction is inside.\n    return !event.composedPath().includes(ref.current);\n}\n\n\nexport {$e260d131964da0f9$export$872b660ac5a1ff98 as useInteractOutside};\n//# sourceMappingURL=useInteractOutside.mjs.map\n","import {getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {isElementInChildOfActiveScope as $535772f9d2c1f38d$export$1258395f99bf9cbf} from \"../focus/FocusScope.mjs\";\nimport {useFocusWithin as $2c9edc598a03d523$export$420e68273165f4ec} from \"../interactions/useFocusWithin.mjs\";\nimport {useInteractOutside as $e260d131964da0f9$export$872b660ac5a1ff98} from \"../interactions/useInteractOutside.mjs\";\nimport {useKeyboard as $8296dad1a4c5e0dc$export$8f71654801c2f7cd} from \"../interactions/useKeyboard.mjs\";\nimport {useRef as $eUNmN$useRef, useEffect as $eUNmN$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\nconst $77844860df94ba23$var$visibleOverlays = [];\nfunction $77844860df94ba23$export$ea8f71083e90600f(props, ref) {\n    let { onClose: onClose, shouldCloseOnBlur: shouldCloseOnBlur, isOpen: isOpen, isDismissable: isDismissable = false, isKeyboardDismissDisabled: isKeyboardDismissDisabled = false, shouldCloseOnInteractOutside: shouldCloseOnInteractOutside } = props;\n    let lastVisibleOverlay = (0, $eUNmN$useRef)(undefined);\n    // Add the overlay ref to the stack of visible overlays on mount, and remove on unmount.\n    (0, $eUNmN$useEffect)(()=>{\n        if (isOpen && !$77844860df94ba23$var$visibleOverlays.includes(ref)) {\n            $77844860df94ba23$var$visibleOverlays.push(ref);\n            return ()=>{\n                let index = $77844860df94ba23$var$visibleOverlays.indexOf(ref);\n                if (index >= 0) $77844860df94ba23$var$visibleOverlays.splice(index, 1);\n            };\n        }\n    }, [\n        isOpen,\n        ref\n    ]);\n    // Only hide the overlay when it is the topmost visible overlay in the stack\n    let onHide = ()=>{\n        if ($77844860df94ba23$var$visibleOverlays[$77844860df94ba23$var$visibleOverlays.length - 1] === ref && onClose) onClose();\n    };\n    let onInteractOutsideStart = (e)=>{\n        const topMostOverlay = $77844860df94ba23$var$visibleOverlays[$77844860df94ba23$var$visibleOverlays.length - 1];\n        lastVisibleOverlay.current = topMostOverlay;\n        if (!shouldCloseOnInteractOutside || shouldCloseOnInteractOutside((0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) {\n            if (topMostOverlay === ref) e.stopPropagation();\n        }\n    };\n    let onInteractOutside = (e)=>{\n        if (!shouldCloseOnInteractOutside || shouldCloseOnInteractOutside((0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) {\n            if ($77844860df94ba23$var$visibleOverlays[$77844860df94ba23$var$visibleOverlays.length - 1] === ref) e.stopPropagation();\n            if (lastVisibleOverlay.current === ref) onHide();\n        }\n        lastVisibleOverlay.current = undefined;\n    };\n    // Handle the escape key\n    let { keyboardProps: keyboardProps } = (0, $8296dad1a4c5e0dc$export$8f71654801c2f7cd)({\n        shortcuts: {\n            Escape: ()=>{\n                if (!isKeyboardDismissDisabled) {\n                    onHide();\n                    return;\n                }\n                return false;\n            }\n        }\n    });\n    // Handle clicking outside the overlay to close it\n    (0, $e260d131964da0f9$export$872b660ac5a1ff98)({\n        ref: ref,\n        onInteractOutside: isDismissable && isOpen ? onInteractOutside : undefined,\n        onInteractOutsideStart: onInteractOutsideStart\n    });\n    let { focusWithinProps: focusWithinProps } = (0, $2c9edc598a03d523$export$420e68273165f4ec)({\n        isDisabled: !shouldCloseOnBlur,\n        onBlurWithin: (e)=>{\n            // Do not close if relatedTarget is null, which means focus is lost to the body.\n            // That can happen when switching tabs, or due to a VoiceOver/Chrome bug with Control+Option+Arrow navigation.\n            // Clicking on the body to close the overlay should already be handled by useInteractOutside.\n            // https://github.com/adobe/react-spectrum/issues/4130\n            // https://github.com/adobe/react-spectrum/issues/4922\n            //\n            // If focus is moving into a child focus scope (e.g. menu inside a dialog),\n            // do not close the outer overlay. At this point, the active scope should\n            // still be the outer overlay, since blur events run before focus.\n            if (!e.relatedTarget || (0, $535772f9d2c1f38d$export$1258395f99bf9cbf)(e.relatedTarget)) return;\n            if (!shouldCloseOnInteractOutside || shouldCloseOnInteractOutside(e.relatedTarget)) onClose?.();\n        }\n    });\n    return {\n        overlayProps: {\n            ...keyboardProps,\n            ...focusWithinProps\n        },\n        underlayProps: {}\n    };\n}\n\n\nexport {$77844860df94ba23$export$ea8f71083e90600f as useOverlay};\n//# sourceMappingURL=useOverlay.mjs.map\n","import {getActiveElement as $23f2114a1b82827e$export$cd4e5573fbe2b576} from \"./shadowdom/DOMFunctions.mjs\";\nimport {isKeyboardOpen as $bb39c0fc1c19b34c$export$b1f1c83775b8b5f7, supportsKeyboard as $bb39c0fc1c19b34c$export$a986ed8aea890397, willOpenKeyboard as $bb39c0fc1c19b34c$export$c57958e35f31ed73} from \"./keyboard.mjs\";\nimport {isWebKit as $2add3ce32c6007eb$export$78551043582a6a98} from \"./platform.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $e0a0e4399f316b76$var$WEBKIT_OPEN_DELAY = 200;\nconst $e0a0e4399f316b76$var$TRANSITION_FRAMETIME = 50;\nconst $e0a0e4399f316b76$var$TRANSITION_TIMEOUT = 600;\nconst $e0a0e4399f316b76$var$listenersByWindow = new WeakMap();\nconst $e0a0e4399f316b76$var$transitionCallbacks = new Set();\nconst $e0a0e4399f316b76$var$resizeCallbacks = new Set();\nfunction $e0a0e4399f316b76$var$onTransitionFrame(wasOpenKeyboard, signal) {\n    let isOpenKeyboard = (0, $bb39c0fc1c19b34c$export$b1f1c83775b8b5f7)();\n    // Flush resize callbacks when the keyboard has affected layout or we ran out of time.\n    if (wasOpenKeyboard !== isOpenKeyboard || signal.aborted) for (let callback of $e0a0e4399f316b76$var$resizeCallbacks){\n        callback(isOpenKeyboard);\n        $e0a0e4399f316b76$var$resizeCallbacks.delete(callback);\n    }\n    // WebKit only fires a single resize event at the start of an opening transition.\n    // The animation takes ~200ms, so restart the listener and flush when it runs out of time.\n    if (!wasOpenKeyboard && isOpenKeyboard && (0, $2add3ce32c6007eb$export$78551043582a6a98)() && !signal.aborted) {\n        window.clearInterval($e0a0e4399f316b76$var$listenersByWindow.get(window));\n        $e0a0e4399f316b76$var$listenersByWindow.set(window, $e0a0e4399f316b76$var$setupGlobalListeners($e0a0e4399f316b76$var$WEBKIT_OPEN_DELAY));\n        return;\n    }\n    // Flush transition callbacks when the animation has completed or we ran out of time.\n    if (wasOpenKeyboard !== isOpenKeyboard || signal.aborted) for (let callback of $e0a0e4399f316b76$var$transitionCallbacks){\n        callback(isOpenKeyboard);\n        $e0a0e4399f316b76$var$transitionCallbacks.delete(callback);\n    }\n    // Cancel the observer when no pending updates remain or we ran out of time.\n    if ($e0a0e4399f316b76$var$resizeCallbacks.size + $e0a0e4399f316b76$var$transitionCallbacks.size <= 0 || signal.aborted) {\n        window.clearInterval($e0a0e4399f316b76$var$listenersByWindow.get(window));\n        $e0a0e4399f316b76$var$listenersByWindow.delete(window);\n    }\n}\nfunction $e0a0e4399f316b76$var$setupGlobalListeners(timeout = $e0a0e4399f316b76$var$TRANSITION_TIMEOUT) {\n    return window.setInterval($e0a0e4399f316b76$var$onTransitionFrame, $e0a0e4399f316b76$var$TRANSITION_FRAMETIME, (0, $bb39c0fc1c19b34c$export$b1f1c83775b8b5f7)(), AbortSignal.timeout(timeout));\n}\nfunction $e0a0e4399f316b76$export$b80f73f72d03c10f(fn) {\n    // Flush synchronously when keyboard is unsupported. This is default for non-touch devices\n    // or devices which did not open their OSK within our opening timeout.\n    if (!(0, $bb39c0fc1c19b34c$export$a986ed8aea890397)()) return fn(false), ()=>{};\n    // Wait two frames to see if focus lands on an input.\n    let frame = window.requestAnimationFrame(()=>{\n        frame = window.requestAnimationFrame(()=>{\n            let activeElement = document.hasFocus() ? (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)() : null;\n            let willKeyboardOpen = (0, $bb39c0fc1c19b34c$export$c57958e35f31ed73)(activeElement);\n            // If keyboard won't change, call the function immediately.\n            if ((0, $bb39c0fc1c19b34c$export$b1f1c83775b8b5f7)() === willKeyboardOpen) return fn(willKeyboardOpen);\n            // On close, fire immediately since consumers may assert the ICB.\n            if ((0, $bb39c0fc1c19b34c$export$b1f1c83775b8b5f7)() && !willKeyboardOpen) return fn(willKeyboardOpen);\n            $e0a0e4399f316b76$var$resizeCallbacks.add(fn);\n            if (!$e0a0e4399f316b76$var$listenersByWindow.has(window)) $e0a0e4399f316b76$var$listenersByWindow.set(window, $e0a0e4399f316b76$var$setupGlobalListeners());\n        });\n    });\n    return ()=>{\n        window.cancelAnimationFrame(frame);\n        $e0a0e4399f316b76$var$resizeCallbacks.delete(fn);\n    };\n}\nfunction $e0a0e4399f316b76$export$c82b8fe1ad51fcd9(fn) {\n    // Flush synchronously when keyboard is unsupported. This is default for non-touch devices\n    // or devices which did not open their OSK within our opening timeout.\n    if (!(0, $bb39c0fc1c19b34c$export$a986ed8aea890397)()) return fn(false), ()=>{};\n    // Wait two frames to see if focus lands on an input.\n    let frame = window.requestAnimationFrame(()=>{\n        frame = window.requestAnimationFrame(()=>{\n            let activeElement = document.hasFocus() ? (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)() : null;\n            let willKeyboardOpen = (0, $bb39c0fc1c19b34c$export$c57958e35f31ed73)(activeElement);\n            // If keyboard won't transition, fire immediately.\n            if ((0, $bb39c0fc1c19b34c$export$b1f1c83775b8b5f7)() === willKeyboardOpen) return fn(willKeyboardOpen);\n            $e0a0e4399f316b76$var$transitionCallbacks.add(fn);\n            if (!$e0a0e4399f316b76$var$listenersByWindow.has(window)) $e0a0e4399f316b76$var$listenersByWindow.set(window, $e0a0e4399f316b76$var$setupGlobalListeners());\n        });\n    });\n    return ()=>{\n        window.cancelAnimationFrame(frame);\n        $e0a0e4399f316b76$var$transitionCallbacks.delete(fn);\n    };\n}\n\n\nexport {$e0a0e4399f316b76$export$b80f73f72d03c10f as runAfterKeyboard, $e0a0e4399f316b76$export$c82b8fe1ad51fcd9 as runAfterKeyboardTransition};\n//# sourceMappingURL=runAfterKeyboard.mjs.map\n","import {addEvent as $d447af545b77c9f1$export$f531f92e2a15358f, setStyle as $d447af545b77c9f1$export$37a5fde709c1db82} from \"../utils/domHelpers.mjs\";\nimport {chain as $a4e76a5424781910$export$e08e3b67e392101e} from \"../utils/chain.mjs\";\nimport {getActiveElement as $23f2114a1b82827e$export$cd4e5573fbe2b576, getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {getNonce as $2b2d34ff061957fb$export$2b85b721e524d74b} from \"../utils/getNonce.mjs\";\nimport {getScrollParent as $3578607fe3d4b096$export$cfa2225e87938781} from \"../utils/getScrollParent.mjs\";\nimport {isIOS as $2add3ce32c6007eb$export$fedb369cb70207f1, isWebKit as $2add3ce32c6007eb$export$78551043582a6a98} from \"../utils/platform.mjs\";\nimport {isScrollable as $901761b40e390936$export$2bb74740c4e19def} from \"../utils/isScrollable.mjs\";\nimport {runAfterKeyboard as $e0a0e4399f316b76$export$b80f73f72d03c10f, runAfterKeyboardTransition as $e0a0e4399f316b76$export$c82b8fe1ad51fcd9} from \"../utils/runAfterKeyboard.mjs\";\nimport {supportsKeyboard as $bb39c0fc1c19b34c$export$a986ed8aea890397, willOpenKeyboard as $bb39c0fc1c19b34c$export$c57958e35f31ed73} from \"../utils/keyboard.mjs\";\nimport {useLayoutEffect as $c4867b2f328c2698$export$e5c5a5f917a5871c} from \"../utils/useLayoutEffect.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\nconst $0644e3663365bfe5$var$visualViewport = typeof document !== 'undefined' && window.visualViewport;\n// The number of active usePreventScroll calls. Used to determine whether to revert back to the original page style/scroll position\nlet $0644e3663365bfe5$var$preventScrollCount = 0;\nlet $0644e3663365bfe5$var$restore;\nfunction $0644e3663365bfe5$export$ee0f7cc6afcd1c18(options = {}) {\n    let { isDisabled: isDisabled, UNSTABLE_overrideFocus: UNSTABLE_overrideFocus } = options;\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        if (isDisabled) return;\n        $0644e3663365bfe5$var$preventScrollCount++;\n        if ($0644e3663365bfe5$var$preventScrollCount === 1) {\n            if ((0, $2add3ce32c6007eb$export$fedb369cb70207f1)() && (0, $2add3ce32c6007eb$export$78551043582a6a98)()) $0644e3663365bfe5$var$restore = $0644e3663365bfe5$var$preventScrollMobileWebKit();\n            else $0644e3663365bfe5$var$restore = $0644e3663365bfe5$var$preventScrollStandard(UNSTABLE_overrideFocus);\n        }\n        return ()=>{\n            $0644e3663365bfe5$var$preventScrollCount--;\n            if ($0644e3663365bfe5$var$preventScrollCount === 0) $0644e3663365bfe5$var$restore();\n        };\n    }, [\n        isDisabled,\n        UNSTABLE_overrideFocus\n    ]);\n}\n// For most browsers, all we need to do is set `overflow: hidden` on the root element, and\n// add some padding to prevent the page from shifting when the scrollbar is hidden.\nfunction $0644e3663365bfe5$var$preventScrollStandard(UNSTABLE_overrideFocus) {\n    let scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n    return (0, $a4e76a5424781910$export$e08e3b67e392101e)(scrollbarWidth > 0 && // Use scrollbar-gutter when supported because it also works for fixed positioned elements.\n    ('scrollbarGutter' in document.documentElement.style ? (0, $d447af545b77c9f1$export$37a5fde709c1db82)(document.documentElement, 'scrollbar-gutter', 'stable') : (0, $d447af545b77c9f1$export$37a5fde709c1db82)(document.documentElement, 'padding-right', `${scrollbarWidth}px`)), (0, $d447af545b77c9f1$export$37a5fde709c1db82)(document.documentElement, 'overflow', 'hidden'), UNSTABLE_overrideFocus && $0644e3663365bfe5$var$overrideFocus(), UNSTABLE_overrideFocus && (0, $bb39c0fc1c19b34c$export$a986ed8aea890397)() && $0644e3663365bfe5$var$handleBlur());\n}\n// Mobile Safari is a whole different beast. Even with overflow: hidden,\n// it still scrolls the page in many situations:\n//\n// 1. When the bottom toolbar and address bar are collapsed, page scrolling is always allowed.\n// 2. When the keyboard is visible, the viewport does not resize. Instead, the keyboard covers part of\n//    it, so it becomes scrollable.\n// 3. When tapping on an input, the page always scrolls so that the input is centered in the visual viewport.\n//    This may cause even fixed position elements to scroll off the screen.\n// 4. When using the next/previous buttons in the keyboard to navigate between inputs, the whole page always\n//    scrolls, even if the input is inside a nested scrollable element that could be scrolled instead.\n//\n// In order to work around these cases, and prevent scrolling without jankiness, we do a few things:\n//\n// 1. Prevent default on `touchmove` events that are not in a scrollable element. This prevents touch scrolling\n//    on the window.\n// 2. Set `overscroll-behavior: contain` on nested scrollable regions so they do not scroll the page when at\n//    the top or bottom. Work around a bug where this does not work when the element does not actually overflow\n//    by preventing default in a `touchmove` event. This is best effort: we can't prevent default when pinch\n//    zooming or when an element contains text selection, which may allow scrolling in some cases.\n// 3. Prevent default on `touchend` events on input elements and handle focusing the element ourselves.\nfunction $0644e3663365bfe5$var$preventScrollMobileWebKit() {\n    // Set overflow hidden so scrollIntoViewport() (useSelectableCollection) sees isScrollPrevented and\n    // scrolls only scroll parents instead of calling native scrollIntoView() which moves the window.\n    let restoreOverflow = (0, $d447af545b77c9f1$export$37a5fde709c1db82)(document.documentElement, 'overflow', 'hidden');\n    let scrollable;\n    let allowTouchMove = false;\n    let onTouchStart = (e)=>{\n        // Store the nearest scrollable parent element from the element that the user touched.\n        let target = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n        scrollable = (0, $901761b40e390936$export$2bb74740c4e19def)(target, true) ? target : (0, $3578607fe3d4b096$export$cfa2225e87938781)(target, true);\n        allowTouchMove = false;\n        // If the target is selected, don't preventDefault in touchmove to allow user to adjust selection.\n        let selection = target.ownerDocument.defaultView.getSelection();\n        if (selection && !selection.isCollapsed && selection.containsNode(target, true)) allowTouchMove = true;\n        // If this is a range input, allow touch move to allow user to adjust the slider value\n        if (e.composedPath().some((el)=>el instanceof HTMLInputElement && el.type === 'range')) allowTouchMove = true;\n        // If this is a focused input element with a selected range, allow user to drag the selection handles.\n        if ('selectionStart' in target && 'selectionEnd' in target && target.selectionStart < target.selectionEnd && target.ownerDocument.activeElement === target) allowTouchMove = true;\n    };\n    // Prevent scrolling up when at the top and scrolling down when at the bottom\n    // of a nested scrollable area, otherwise mobile Safari will start scrolling\n    // the window instead.\n    // This must be applied before the touchstart event as of iOS 26, so inject it as a <style> element.\n    let style = document.createElement('style');\n    let nonce = (0, $2b2d34ff061957fb$export$2b85b721e524d74b)();\n    if (nonce) style.nonce = nonce;\n    style.textContent = `\n@layer {\n  * {\n    overscroll-behavior: contain;\n  }\n}`.trim();\n    document.head.prepend(style);\n    let onTouchMove = (e)=>{\n        // Allow pinch-zooming.\n        if (e.touches.length === 2 || allowTouchMove) return;\n        // Prevent scrolling the window.\n        if (!scrollable || scrollable === document.documentElement || scrollable === document.body) {\n            e.preventDefault();\n            return;\n        }\n        // overscroll-behavior should prevent scroll chaining, but currently does not\n        // if the element doesn't actually overflow. https://bugs.webkit.org/show_bug.cgi?id=243452\n        // This checks that both the width and height do not overflow, otherwise we might\n        // block horizontal scrolling too. In that case, adding `touch-action: pan-x` to\n        // the element will prevent vertical page scrolling. We can't add that automatically\n        // because it must be set before the touchstart event.\n        if (scrollable.scrollHeight === scrollable.clientHeight && scrollable.scrollWidth === scrollable.clientWidth) e.preventDefault();\n    };\n    let restoreFocus = $0644e3663365bfe5$var$overrideFocus();\n    let removeEvents = (0, $a4e76a5424781910$export$e08e3b67e392101e)((0, $d447af545b77c9f1$export$f531f92e2a15358f)(document, 'touchstart', onTouchStart, {\n        passive: false,\n        capture: true\n    }), (0, $d447af545b77c9f1$export$f531f92e2a15358f)(document, 'touchmove', onTouchMove, {\n        passive: false,\n        capture: true\n    }), $0644e3663365bfe5$var$handleBlur());\n    return ()=>{\n        restoreOverflow();\n        removeEvents();\n        style.remove();\n        restoreFocus();\n    };\n}\nfunction $0644e3663365bfe5$var$handleBlur() {\n    let onBlur = (e)=>{\n        let target = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n        let relatedTarget = e.relatedTarget;\n        if (relatedTarget && (0, $bb39c0fc1c19b34c$export$c57958e35f31ed73)(relatedTarget)) // Re-focus programmatically to have the override below perform the scroll.\n        relatedTarget.focus();\n        else if (!relatedTarget) {\n            // When tapping the Done button on the keyboard, focus moves to the body.\n            // FocusScope will then restore focus back to the input. Later when tapping\n            // the same input again, it is already focused, so no blur event will fire,\n            // resulting in the flow above never running and Safari's native scrolling occurring.\n            // Instead, move focus to the parent focusable element (e.g. the dialog).\n            let focusable = target.parentElement?.closest('[tabindex]');\n            focusable?.focus({\n                preventScroll: true\n            });\n        }\n    };\n    return (0, $d447af545b77c9f1$export$f531f92e2a15358f)(document, 'blur', onBlur, true);\n}\nfunction $0644e3663365bfe5$var$overrideFocus() {\n    // Override programmatic focus to scroll into view without scrolling the whole page.\n    let focus = HTMLElement.prototype.focus;\n    Reflect.defineProperty(HTMLElement.prototype, 'focus', {\n        configurable: true,\n        writable: true,\n        value: function(opts) {\n            // Focus the element without scrolling the page.\n            focus.call(this, {\n                ...opts,\n                preventScroll: true\n            });\n            if (!opts || !opts.preventScroll) {\n                let scroll = ()=>{\n                    let activeElement = (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)();\n                    if (activeElement === this) $0644e3663365bfe5$var$scrollIntoView(this);\n                };\n                (0, $e0a0e4399f316b76$export$b80f73f72d03c10f)((isOpen)=>isOpen ? scroll() : (0, $e0a0e4399f316b76$export$c82b8fe1ad51fcd9)(()=>scroll()));\n            }\n        }\n    });\n    return ()=>{\n        Reflect.defineProperty(HTMLElement.prototype, 'focus', {\n            configurable: true,\n            writable: true,\n            value: focus\n        });\n    };\n}\nfunction $0644e3663365bfe5$var$scrollIntoView(target) {\n    let root = document.scrollingElement || document.documentElement;\n    let nextTarget = target;\n    while(nextTarget && nextTarget !== root && nextTarget.isConnected){\n        // Find the parent scrollable element and adjust the scroll position if the target is not already in view.\n        let scrollable = (0, $3578607fe3d4b096$export$cfa2225e87938781)(nextTarget);\n        if (scrollable !== document.documentElement && scrollable !== document.body && scrollable !== nextTarget) {\n            let scrollableRect = scrollable.getBoundingClientRect();\n            let targetRect = nextTarget.getBoundingClientRect();\n            if (targetRect.top < scrollableRect.top || targetRect.bottom > scrollableRect.top + nextTarget.clientHeight) {\n                let bottom = scrollableRect.bottom;\n                if ($0644e3663365bfe5$var$visualViewport) bottom = Math.min(bottom, $0644e3663365bfe5$var$visualViewport.offsetTop + $0644e3663365bfe5$var$visualViewport.height);\n                // Center within the viewport.\n                let adjustment = targetRect.top - scrollableRect.top - ((bottom - scrollableRect.top) / 2 - targetRect.height / 2);\n                scrollable.scrollTo({\n                    // Clamp to the valid range to prevent over-scrolling.\n                    top: Math.max(0, Math.min(scrollable.scrollHeight - scrollable.clientHeight, scrollable.scrollTop + adjustment)),\n                    behavior: 'smooth'\n                });\n            }\n        }\n        nextTarget = scrollable.parentElement;\n    }\n}\n\n\nexport {$0644e3663365bfe5$export$ee0f7cc6afcd1c18 as usePreventScroll};\n//# sourceMappingURL=usePreventScroll.mjs.map\n","import {ariaHideOutside as $58196c8d6a1f38fc$export$1c3ebcada18427bf, keepVisible as $58196c8d6a1f38fc$export$1020fa7f77e17884} from \"./ariaHideOutside.mjs\";\nimport {useOverlayPosition as $b3526bc71400be8d$export$d39e1813b3bdd0e1} from \"./useOverlayPosition.mjs\";\nimport {useFocusWithin as $2c9edc598a03d523$export$420e68273165f4ec} from \"../interactions/useFocusWithin.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {useOverlay as $77844860df94ba23$export$ea8f71083e90600f} from \"./useOverlay.mjs\";\nimport {usePreventScroll as $0644e3663365bfe5$export$ee0f7cc6afcd1c18} from \"./usePreventScroll.mjs\";\nimport {useEffect as $eBJzm$useEffect} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\nfunction $f8a024fbad3a5a2e$export$542a6fd13ac93354(props, state) {\n    let { triggerRef: triggerRef, popoverRef: popoverRef, groupRef: groupRef, isNonModal: isNonModal, isKeyboardDismissDisabled: isKeyboardDismissDisabled, shouldCloseOnInteractOutside: shouldCloseOnInteractOutside, ...otherProps } = props;\n    let isSubmenu = otherProps['trigger'] === 'SubmenuTrigger';\n    let { overlayProps: overlayProps, underlayProps: underlayProps } = (0, $77844860df94ba23$export$ea8f71083e90600f)({\n        isOpen: state.isOpen,\n        onClose: state.close,\n        shouldCloseOnBlur: true,\n        isDismissable: !isNonModal || isSubmenu,\n        isKeyboardDismissDisabled: isKeyboardDismissDisabled,\n        shouldCloseOnInteractOutside: shouldCloseOnInteractOutside\n    }, groupRef ?? popoverRef);\n    let { overlayProps: positionProps, arrowProps: arrowProps, placement: placement, triggerAnchorPoint: origin } = (0, $b3526bc71400be8d$export$d39e1813b3bdd0e1)({\n        ...otherProps,\n        targetRef: triggerRef,\n        overlayRef: popoverRef,\n        isOpen: state.isOpen,\n        onClose: isNonModal && !isSubmenu ? state.close : null,\n        getTargetRect: otherProps.getTargetRect ?? (state.point ? ()=>new DOMRect(state.point.x, state.point.y, 0, 0) : undefined)\n    });\n    (0, $0644e3663365bfe5$export$ee0f7cc6afcd1c18)({\n        isDisabled: isNonModal || !state.isOpen\n    });\n    (0, $eBJzm$useEffect)(()=>{\n        if (state.isOpen && popoverRef.current) {\n            if (isNonModal) return (0, $58196c8d6a1f38fc$export$1020fa7f77e17884)(groupRef?.current ?? popoverRef.current);\n            else return (0, $58196c8d6a1f38fc$export$1c3ebcada18427bf)([\n                groupRef?.current ?? popoverRef.current\n            ], {\n                shouldUseInert: true\n            });\n        }\n    }, [\n        isNonModal,\n        state.isOpen,\n        popoverRef,\n        groupRef\n    ]);\n    let { focusWithinProps: focusWithinProps } = (0, $2c9edc598a03d523$export$420e68273165f4ec)(props);\n    return {\n        popoverProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(overlayProps, positionProps, focusWithinProps),\n        arrowProps: arrowProps,\n        underlayProps: underlayProps,\n        placement: placement,\n        triggerAnchorPoint: origin\n    };\n}\n\n\nexport {$f8a024fbad3a5a2e$export$542a6fd13ac93354 as usePopover};\n//# sourceMappingURL=usePopover.mjs.map\n","var $ea518f18e6f13288$exports = {};\n$ea518f18e6f13288$exports = {\n    \"dismiss\": `Dismiss`\n};\n\n\nexport {$ea518f18e6f13288$exports as default};\n//# sourceMappingURL=en-US.mjs.map\n","import $9W4zk$intloverlaysarAEmjs from \"../intl/overlays/ar-AE.mjs\";\nimport $9W4zk$intloverlaysbgBGmjs from \"../intl/overlays/bg-BG.mjs\";\nimport $9W4zk$intloverlayscsCZmjs from \"../intl/overlays/cs-CZ.mjs\";\nimport $9W4zk$intloverlaysdaDKmjs from \"../intl/overlays/da-DK.mjs\";\nimport $9W4zk$intloverlaysdeDEmjs from \"../intl/overlays/de-DE.mjs\";\nimport $9W4zk$intloverlayselGRmjs from \"../intl/overlays/el-GR.mjs\";\nimport $9W4zk$intloverlaysenUSmjs from \"../intl/overlays/en-US.mjs\";\nimport $9W4zk$intloverlaysesESmjs from \"../intl/overlays/es-ES.mjs\";\nimport $9W4zk$intloverlaysetEEmjs from \"../intl/overlays/et-EE.mjs\";\nimport $9W4zk$intloverlaysfiFImjs from \"../intl/overlays/fi-FI.mjs\";\nimport $9W4zk$intloverlaysfrFRmjs from \"../intl/overlays/fr-FR.mjs\";\nimport $9W4zk$intloverlaysheILmjs from \"../intl/overlays/he-IL.mjs\";\nimport $9W4zk$intloverlayshrHRmjs from \"../intl/overlays/hr-HR.mjs\";\nimport $9W4zk$intloverlayshuHUmjs from \"../intl/overlays/hu-HU.mjs\";\nimport $9W4zk$intloverlaysitITmjs from \"../intl/overlays/it-IT.mjs\";\nimport $9W4zk$intloverlaysjaJPmjs from \"../intl/overlays/ja-JP.mjs\";\nimport $9W4zk$intloverlayskoKRmjs from \"../intl/overlays/ko-KR.mjs\";\nimport $9W4zk$intloverlaysltLTmjs from \"../intl/overlays/lt-LT.mjs\";\nimport $9W4zk$intloverlayslvLVmjs from \"../intl/overlays/lv-LV.mjs\";\nimport $9W4zk$intloverlaysnbNOmjs from \"../intl/overlays/nb-NO.mjs\";\nimport $9W4zk$intloverlaysnlNLmjs from \"../intl/overlays/nl-NL.mjs\";\nimport $9W4zk$intloverlaysplPLmjs from \"../intl/overlays/pl-PL.mjs\";\nimport $9W4zk$intloverlaysptBRmjs from \"../intl/overlays/pt-BR.mjs\";\nimport $9W4zk$intloverlaysptPTmjs from \"../intl/overlays/pt-PT.mjs\";\nimport $9W4zk$intloverlaysroROmjs from \"../intl/overlays/ro-RO.mjs\";\nimport $9W4zk$intloverlaysruRUmjs from \"../intl/overlays/ru-RU.mjs\";\nimport $9W4zk$intloverlaysskSKmjs from \"../intl/overlays/sk-SK.mjs\";\nimport $9W4zk$intloverlaysslSImjs from \"../intl/overlays/sl-SI.mjs\";\nimport $9W4zk$intloverlayssrSPmjs from \"../intl/overlays/sr-SP.mjs\";\nimport $9W4zk$intloverlayssvSEmjs from \"../intl/overlays/sv-SE.mjs\";\nimport $9W4zk$intloverlaystrTRmjs from \"../intl/overlays/tr-TR.mjs\";\nimport $9W4zk$intloverlaysukUAmjs from \"../intl/overlays/uk-UA.mjs\";\nimport $9W4zk$intloverlayszhCNmjs from \"../intl/overlays/zh-CN.mjs\";\nimport $9W4zk$intloverlayszhTWmjs from \"../intl/overlays/zh-TW.mjs\";\n\nvar $8ad4f9eb0c0f6434$exports = {};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$8ad4f9eb0c0f6434$exports = {\n    \"ar-AE\": $9W4zk$intloverlaysarAEmjs,\n    \"bg-BG\": $9W4zk$intloverlaysbgBGmjs,\n    \"cs-CZ\": $9W4zk$intloverlayscsCZmjs,\n    \"da-DK\": $9W4zk$intloverlaysdaDKmjs,\n    \"de-DE\": $9W4zk$intloverlaysdeDEmjs,\n    \"el-GR\": $9W4zk$intloverlayselGRmjs,\n    \"en-US\": $9W4zk$intloverlaysenUSmjs,\n    \"es-ES\": $9W4zk$intloverlaysesESmjs,\n    \"et-EE\": $9W4zk$intloverlaysetEEmjs,\n    \"fi-FI\": $9W4zk$intloverlaysfiFImjs,\n    \"fr-FR\": $9W4zk$intloverlaysfrFRmjs,\n    \"he-IL\": $9W4zk$intloverlaysheILmjs,\n    \"hr-HR\": $9W4zk$intloverlayshrHRmjs,\n    \"hu-HU\": $9W4zk$intloverlayshuHUmjs,\n    \"it-IT\": $9W4zk$intloverlaysitITmjs,\n    \"ja-JP\": $9W4zk$intloverlaysjaJPmjs,\n    \"ko-KR\": $9W4zk$intloverlayskoKRmjs,\n    \"lt-LT\": $9W4zk$intloverlaysltLTmjs,\n    \"lv-LV\": $9W4zk$intloverlayslvLVmjs,\n    \"nb-NO\": $9W4zk$intloverlaysnbNOmjs,\n    \"nl-NL\": $9W4zk$intloverlaysnlNLmjs,\n    \"pl-PL\": $9W4zk$intloverlaysplPLmjs,\n    \"pt-BR\": $9W4zk$intloverlaysptBRmjs,\n    \"pt-PT\": $9W4zk$intloverlaysptPTmjs,\n    \"ro-RO\": $9W4zk$intloverlaysroROmjs,\n    \"ru-RU\": $9W4zk$intloverlaysruRUmjs,\n    \"sk-SK\": $9W4zk$intloverlaysskSKmjs,\n    \"sl-SI\": $9W4zk$intloverlaysslSImjs,\n    \"sr-SP\": $9W4zk$intloverlayssrSPmjs,\n    \"sv-SE\": $9W4zk$intloverlayssvSEmjs,\n    \"tr-TR\": $9W4zk$intloverlaystrTRmjs,\n    \"uk-UA\": $9W4zk$intloverlaysukUAmjs,\n    \"zh-CN\": $9W4zk$intloverlayszhCNmjs,\n    \"zh-TW\": $9W4zk$intloverlayszhTWmjs\n};\n\n\nexport {$8ad4f9eb0c0f6434$exports as default};\n//# sourceMappingURL=intlStrings.mjs.map\n","import $3Rxt5$intlStringsmjs from \"./intlStrings.mjs\";\nimport {useLabels as $e8ac3c3f5d4bae7f$export$d6875122194c7b44} from \"../utils/useLabels.mjs\";\nimport {useLocalizedStringFormatter as $cf2482eff2eeeec2$export$f12b703ca79dfbb1} from \"../i18n/useLocalizedStringFormatter.mjs\";\nimport {VisuallyHidden as $ea3928288112382f$export$439d29a4e110a164} from \"../visually-hidden/VisuallyHidden.mjs\";\nimport $3Rxt5$react from \"react\";\n\n\nfunction $parcel$interopDefault(a) {\n  return a && a.__esModule ? a.default : a;\n}\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nfunction $081058010ef8962e$export$2317d149ed6f78c4(props) {\n    let { onDismiss: onDismiss, ...otherProps } = props;\n    let stringFormatter = (0, $cf2482eff2eeeec2$export$f12b703ca79dfbb1)((0, ($parcel$interopDefault($3Rxt5$intlStringsmjs))), '@react-aria/overlays');\n    let labels = (0, $e8ac3c3f5d4bae7f$export$d6875122194c7b44)(otherProps, stringFormatter.format('dismiss'));\n    let onClick = ()=>{\n        if (onDismiss) onDismiss();\n    };\n    return /*#__PURE__*/ (0, $3Rxt5$react).createElement((0, $ea3928288112382f$export$439d29a4e110a164), null, /*#__PURE__*/ (0, $3Rxt5$react).createElement(\"button\", {\n        ...labels,\n        tabIndex: -1,\n        onClick: onClick,\n        style: {\n            width: 1,\n            height: 1\n        }\n    }));\n}\n\n\nexport {$081058010ef8962e$export$2317d149ed6f78c4 as DismissButton};\n//# sourceMappingURL=DismissButton.mjs.map\n","import {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {PressResponderContext as $24f9a20f226ad820$export$5165eccb35aaadb5} from \"./context.mjs\";\nimport {useObjectRef as $03e8ab2d84d7657a$export$4338b53315abf666} from \"../utils/useObjectRef.mjs\";\nimport {useSyncRef as $b7115c395c64f7b5$export$4debdb1a3f0fa79e} from \"../utils/useSyncRef.mjs\";\nimport $iXgbh$react, {useRef as $iXgbh$useRef, useContext as $iXgbh$useContext, useEffect as $iXgbh$useEffect, useMemo as $iXgbh$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nconst $0d47b37c475c5231$export$3351871ee4b288b8 = /*#__PURE__*/ (0, $iXgbh$react).forwardRef(({ children: children, ...props }, ref)=>{\n    let isRegistered = (0, $iXgbh$useRef)(false);\n    let prevContext = (0, $iXgbh$useContext)((0, $24f9a20f226ad820$export$5165eccb35aaadb5));\n    // oxlint-disable-next-line react/react-compiler\n    let context = (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(prevContext || {}, {\n        ...props,\n        register () {\n            isRegistered.current = true;\n            if (prevContext) prevContext.register();\n        }\n    });\n    context.ref = (0, $03e8ab2d84d7657a$export$4338b53315abf666)(ref || prevContext?.ref);\n    (0, $b7115c395c64f7b5$export$4debdb1a3f0fa79e)(prevContext, context.ref);\n    (0, $iXgbh$useEffect)(()=>{\n        if (!isRegistered.current) {\n            if (process.env.NODE_ENV !== 'production') console.warn(\"A PressResponder was rendered without a pressable child. Either call the usePress hook, or wrap your DOM node with <Pressable> component.\");\n            isRegistered.current = true; // only warn once in strict mode.\n        }\n    }, []);\n    return /*#__PURE__*/ (0, $iXgbh$react).createElement((0, $24f9a20f226ad820$export$5165eccb35aaadb5).Provider, {\n        value: context\n    }, children);\n});\nfunction $0d47b37c475c5231$export$cf75428e0b9ed1ea({ children: children }) {\n    let context = (0, $iXgbh$useMemo)(()=>({\n            register: ()=>{}\n        }), []);\n    return /*#__PURE__*/ (0, $iXgbh$react).createElement((0, $24f9a20f226ad820$export$5165eccb35aaadb5).Provider, {\n        value: context\n    }, children);\n}\n\n\nexport {$0d47b37c475c5231$export$3351871ee4b288b8 as PressResponder, $0d47b37c475c5231$export$cf75428e0b9ed1ea as ClearPressResponder};\n//# sourceMappingURL=PressResponder.mjs.map\n","import $9DQBE$react, {createContext as $9DQBE$createContext, useContext as $9DQBE$useContext} from \"react\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $72abaeab4d80592f$export$60d741e20e0aa309 = /*#__PURE__*/ (0, $9DQBE$createContext)({});\nfunction $72abaeab4d80592f$export$78efe591171d7d45(props) {\n    let { getContainer: getContainer } = props;\n    let { getContainer: ctxGetContainer } = $72abaeab4d80592f$export$9fc1347d4195ccb3();\n    return /*#__PURE__*/ (0, $9DQBE$react).createElement($72abaeab4d80592f$export$60d741e20e0aa309.Provider, {\n        value: {\n            getContainer: getContainer === null ? undefined : getContainer ?? ctxGetContainer\n        }\n    }, props.children);\n}\nfunction $72abaeab4d80592f$export$9fc1347d4195ccb3() {\n    return (0, $9DQBE$useContext)($72abaeab4d80592f$export$60d741e20e0aa309) ?? {};\n}\n\n\nexport {$72abaeab4d80592f$export$60d741e20e0aa309 as PortalContext, $72abaeab4d80592f$export$78efe591171d7d45 as UNSAFE_PortalProvider, $72abaeab4d80592f$export$9fc1347d4195ccb3 as useUNSAFE_PortalContext};\n//# sourceMappingURL=PortalProvider.mjs.map\n","import {ClearPressResponder as $0d47b37c475c5231$export$cf75428e0b9ed1ea} from \"../interactions/PressResponder.mjs\";\nimport {FocusableContext as $d1116acdf220c2da$export$f9762fab77588ecb} from \"../interactions/useFocusable.mjs\";\nimport {FocusScope as $535772f9d2c1f38d$export$20e40289641fbbb6} from \"../focus/FocusScope.mjs\";\nimport {useIsSSR as $c7eafbbe1ea5834e$export$535bd6ca7f90a273} from \"../ssr/SSRProvider.mjs\";\nimport {useLayoutEffect as $c4867b2f328c2698$export$e5c5a5f917a5871c} from \"../utils/useLayoutEffect.mjs\";\nimport {useUNSAFE_PortalContext as $72abaeab4d80592f$export$9fc1347d4195ccb3} from \"./PortalProvider.mjs\";\nimport $3wX5A$react, {useState as $3wX5A$useState, useMemo as $3wX5A$useMemo, useContext as $3wX5A$useContext} from \"react\";\nimport $3wX5A$reactdom from \"react-dom\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\nconst $d7a937236970dc7f$export$a2200b96afd16271 = /*#__PURE__*/ (0, $3wX5A$react).createContext(null);\nfunction $d7a937236970dc7f$export$c6fdb837b070b4ff(props) {\n    let isSSR = (0, $c7eafbbe1ea5834e$export$535bd6ca7f90a273)();\n    let { portalContainer: portalContainer = isSSR ? null : document.body, isExiting: isExiting } = props;\n    let [contain, setContain] = (0, $3wX5A$useState)(false);\n    let contextValue = (0, $3wX5A$useMemo)(()=>({\n            contain: contain,\n            setContain: setContain\n        }), [\n        contain,\n        setContain\n    ]);\n    let { getContainer: getContainer } = (0, $72abaeab4d80592f$export$9fc1347d4195ccb3)();\n    if (!props.portalContainer && getContainer) portalContainer = getContainer();\n    if (!portalContainer) return null;\n    let contents = props.children;\n    if (!props.disableFocusManagement) contents = /*#__PURE__*/ (0, $3wX5A$react).createElement((0, $535772f9d2c1f38d$export$20e40289641fbbb6), {\n        restoreFocus: true,\n        contain: (props.shouldContainFocus || contain) && !isExiting\n    }, contents);\n    contents = /*#__PURE__*/ (0, $3wX5A$react).createElement($d7a937236970dc7f$export$a2200b96afd16271.Provider, {\n        value: contextValue\n    }, /*#__PURE__*/ (0, $3wX5A$react).createElement((0, $0d47b37c475c5231$export$cf75428e0b9ed1ea), null, /*#__PURE__*/ (0, $3wX5A$react).createElement((0, $d1116acdf220c2da$export$f9762fab77588ecb).Provider, {\n        value: null\n    }, contents)));\n    return /*#__PURE__*/ (0, $3wX5A$reactdom).createPortal(contents, portalContainer);\n}\nfunction $d7a937236970dc7f$export$14c98a7594375490() {\n    let ctx = (0, $3wX5A$useContext)($d7a937236970dc7f$export$a2200b96afd16271);\n    let setContain = ctx?.setContain;\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        setContain?.(true);\n    }, [\n        setContain\n    ]);\n}\n\n\nexport {$d7a937236970dc7f$export$a2200b96afd16271 as OverlayContext, $d7a937236970dc7f$export$c6fdb837b070b4ff as Overlay, $d7a937236970dc7f$export$14c98a7594375490 as useOverlayFocusContain};\n//# sourceMappingURL=Overlay.mjs.map\n","import {useControlledState as $3e6197669829fe11$export$40bfa8c7b0832715} from \"../utils/useControlledState.mjs\";\nimport {useState as $kE40A$useState, useCallback as $kE40A$useCallback} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $f11fb0bcf1b2687a$export$61c6a8c84e605fb6(props) {\n    let [isOpen, setOpen] = (0, $3e6197669829fe11$export$40bfa8c7b0832715)(props.isOpen, props.defaultOpen || false, props.onOpenChange);\n    let [point, setPoint] = (0, $kE40A$useState)(null);\n    const open = (0, $kE40A$useCallback)(()=>{\n        setOpen(true);\n    }, [\n        setOpen\n    ]);\n    const close = (0, $kE40A$useCallback)(()=>{\n        setOpen(false);\n    }, [\n        setOpen\n    ]);\n    const toggle = (0, $kE40A$useCallback)(()=>{\n        setOpen(!isOpen);\n    }, [\n        setOpen,\n        isOpen\n    ]);\n    return {\n        isOpen: isOpen,\n        setOpen: setOpen,\n        open: open,\n        close: close,\n        toggle: toggle,\n        point: point,\n        setPoint: setPoint\n    };\n}\n\n\nexport {$f11fb0bcf1b2687a$export$61c6a8c84e605fb6 as useOverlayTriggerState};\n//# sourceMappingURL=useOverlayTriggerState.mjs.map\n","import {chain as $a4e76a5424781910$export$e08e3b67e392101e} from \"./chain.mjs\";\nimport {setStyle as $d447af545b77c9f1$export$37a5fde709c1db82} from \"./domHelpers.mjs\";\nimport {useEffectEvent as $fe16bffc7a557bf0$export$7f54fc3180508a52} from \"./useEffectEvent.mjs\";\nimport {useLayoutEffect as $c4867b2f328c2698$export$e5c5a5f917a5871c} from \"./useLayoutEffect.mjs\";\nimport {flushSync as $5MIG0$flushSync} from \"react-dom\";\nimport {useState as $5MIG0$useState, useCallback as $5MIG0$useCallback, useRef as $5MIG0$useRef} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\nfunction $fcc7165e876206c6$export$6d3443f2c48bfc20(ref, isReady = true, onEnter) {\n    let [isEntering, setEntering] = (0, $5MIG0$useState)(true);\n    let isAnimationReady = isEntering && isReady;\n    // Hide the element while it prepares for entry, using only non-layout-thrashing attributes.\n    // This prevents accidental flashes of content in scenarios where no hidden styling is applied\n    // while the enter animation is not yet ready (e.g. popovers prior to placement calculation).\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        if (!isReady && ref.current) return (0, $a4e76a5424781910$export$e08e3b67e392101e)((0, $d447af545b77c9f1$export$37a5fde709c1db82)(ref.current, 'opacity', '0'), (0, $d447af545b77c9f1$export$37a5fde709c1db82)(ref.current, 'clip', 'rect(0 0 0 0)'), (0, $d447af545b77c9f1$export$37a5fde709c1db82)(ref.current, 'clip-path', 'inset(50%)'), (0, $d447af545b77c9f1$export$37a5fde709c1db82)(ref.current, 'mask-image', 'linear-gradient(#0000, #0000)'));\n    }, [\n        ref,\n        isReady\n    ]);\n    // There are two cases for entry animations:\n    // 1. CSS @keyframes. The `animation` property is set during the isEntering state, and it is removed after the animation finishes.\n    // 2. CSS transitions. The initial styles are applied during the isEntering state, and removed immediately, causing the transition to occur.\n    //\n    // In the second case, cancel any transitions that were triggered prior to the isEntering = false state (when the transition is supposed to start).\n    // This can happen when isReady starts as false (e.g. popovers prior to placement calculation).\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        if (isAnimationReady && ref.current && 'getAnimations' in ref.current) {\n            for (let animation of ref.current.getAnimations())if (animation instanceof CSSTransition) animation.cancel();\n        }\n    }, [\n        ref,\n        isAnimationReady\n    ]);\n    $fcc7165e876206c6$var$useAnimation(ref, isAnimationReady, onEnter, (0, $5MIG0$useCallback)(()=>setEntering(false), []));\n    return isAnimationReady;\n}\nfunction $fcc7165e876206c6$export$45fda7c47f93fd48(ref, isOpen, onExit) {\n    let [exitState, setExitState] = (0, $5MIG0$useState)(isOpen ? 'open' : 'closed');\n    switch(exitState){\n        case 'open':\n            // If isOpen becomes false, set the state to exiting.\n            if (!isOpen) setExitState('exiting');\n            break;\n        case 'closed':\n        case 'exiting':\n            // If we are exiting and isOpen becomes true, the animation was interrupted.\n            // Reset the state to open.\n            if (isOpen) setExitState('open');\n            break;\n    }\n    let isExiting = exitState === 'exiting';\n    $fcc7165e876206c6$var$useAnimation(ref, isExiting, onExit, (0, $5MIG0$useCallback)(()=>{\n        // Set the state to closed, which will cause the element to be unmounted.\n        setExitState((state)=>state === 'exiting' ? 'closed' : state);\n    }, []));\n    return isExiting;\n}\nfunction $fcc7165e876206c6$var$useAnimation(ref, isActive, onStart, onEnd) {\n    let isActiveRef = (0, $5MIG0$useRef)(null);\n    let start = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)(onStart);\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        if (isActive && ref.current && isActiveRef.current !== isActive) {\n            isActiveRef.current = isActive;\n            if (!('getAnimations' in ref.current)) {\n                // JSDOM\n                onEnd();\n                return;\n            }\n            let startPromise = start?.(ref.current);\n            let animations = ref.current.getAnimations().filter((a)=>(typeof DocumentTimeline === 'undefined' || a.timeline instanceof DocumentTimeline) && a.playState === 'running');\n            if (animations.length === 0 && !startPromise) {\n                onEnd();\n                return;\n            }\n            Promise.all([\n                startPromise,\n                ...animations.map((a)=>a.finished)\n            ]).then(()=>{\n                (0, $5MIG0$flushSync)(()=>{\n                    onEnd();\n                });\n            }).catch(()=>{});\n        }\n        isActiveRef.current = isActive;\n    }, [\n        ref,\n        isActive,\n        onEnd\n    ]);\n}\n\n\nexport {$fcc7165e876206c6$export$6d3443f2c48bfc20 as useEnterAnimation, $fcc7165e876206c6$export$45fda7c47f93fd48 as useExitAnimation};\n//# sourceMappingURL=animation.mjs.map\n","import {dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415, useRenderProps as $7230ffa83bc0c2cf$export$4d86445c2cf5e3} from \"./utils.mjs\";\nimport {OverlayArrowContext as $4fcfe18fac72dabd$export$2de4954e8ae13b9f} from \"./OverlayArrow.mjs\";\nimport {OverlayTriggerStateContext as $f2ff30fde7b014be$export$d2f961adcb0afbe} from \"./Dialog.mjs\";\nimport {usePopover as $g4jvP$usePopover} from \"react-aria/usePopover\";\nimport {DismissButton as $g4jvP$DismissButton, Overlay as $g4jvP$Overlay} from \"react-aria/Overlay\";\nimport {filterDOMProps as $g4jvP$filterDOMProps} from \"react-aria/filterDOMProps\";\nimport {focusSafely as $g4jvP$focusSafely} from \"react-aria/private/interactions/focusSafely\";\nimport {getInteractionModality as $g4jvP$getInteractionModality} from \"react-aria/private/interactions/useFocusVisible\";\nimport {isFocusWithin as $g4jvP$isFocusWithin} from \"react-aria/private/utils/shadowdom/DOMFunctions\";\nimport {mergeProps as $g4jvP$mergeProps} from \"react-aria/mergeProps\";\nimport {useOverlayTriggerState as $g4jvP$useOverlayTriggerState} from \"react-stately/useOverlayTriggerState\";\nimport $g4jvP$react, {createContext as $g4jvP$createContext, forwardRef as $g4jvP$forwardRef, useContext as $g4jvP$useContext, useRef as $g4jvP$useRef, useState as $g4jvP$useState, useEffect as $g4jvP$useEffect, useMemo as $g4jvP$useMemo, useCallback as $g4jvP$useCallback} from \"react\";\nimport {runAfterKeyboard as $g4jvP$runAfterKeyboard} from \"react-aria/private/utils/runAfterKeyboard\";\nimport {useExitAnimation as $g4jvP$useExitAnimation, useEnterAnimation as $g4jvP$useEnterAnimation} from \"react-aria/private/utils/animation\";\nimport {useIsHidden as $g4jvP$useIsHidden} from \"react-aria/private/collections/Hidden\";\nimport {useLayoutEffect as $g4jvP$useLayoutEffect} from \"react-aria/private/utils/useLayoutEffect\";\nimport {useLocale as $g4jvP$useLocale} from \"react-aria/I18nProvider\";\nimport {useResizeObserver as $g4jvP$useResizeObserver} from \"react-aria/private/utils/useResizeObserver\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst $542a13ca2fa5b484$export$9b9a0cd73afb7ca4 = /*#__PURE__*/ (0, $g4jvP$createContext)(null);\n// Stores a ref for the portal container for a group of popovers (e.g. submenus).\nconst $542a13ca2fa5b484$var$PopoverGroupContext = /*#__PURE__*/ (0, $g4jvP$createContext)(null);\nconst $542a13ca2fa5b484$export$5b6b19405a83ff9d = /*#__PURE__*/ (0, $g4jvP$forwardRef)(function Popover(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $542a13ca2fa5b484$export$9b9a0cd73afb7ca4);\n    let contextState = (0, $g4jvP$useContext)((0, $f2ff30fde7b014be$export$d2f961adcb0afbe));\n    let localState = (0, $g4jvP$useOverlayTriggerState)(props);\n    let state = props.isOpen != null || props.defaultOpen != null || !contextState ? localState : contextState;\n    // Skip the automatic exit animation when closing instantly (e.g. swapping between previews\n    // during warmup). An explicitly provided isExiting prop still takes precedence.\n    let exitAnimation = (0, $g4jvP$useExitAnimation)(ref, state.isOpen);\n    let isExiting = props.isExiting || !props.shouldSkipAnimation && exitAnimation || false;\n    let isHidden = (0, $g4jvP$useIsHidden)();\n    let { direction: direction } = (0, $g4jvP$useLocale)();\n    // If we are in a hidden tree, we still need to preserve our children.\n    if (isHidden) {\n        let children = props.children;\n        if (typeof children === 'function') children = children({\n            trigger: props.trigger || null,\n            placement: 'bottom',\n            isEntering: false,\n            isExiting: false,\n            defaultChildren: null\n        });\n        return /*#__PURE__*/ (0, $g4jvP$react).createElement((0, $g4jvP$react).Fragment, null, children);\n    }\n    if (state && !state.isOpen && !isExiting) return null;\n    return /*#__PURE__*/ (0, $g4jvP$react).createElement($542a13ca2fa5b484$var$PopoverInner, {\n        ...props,\n        triggerRef: props.triggerRef,\n        state: state,\n        popoverRef: ref,\n        isExiting: isExiting,\n        dir: direction\n    });\n});\nfunction $542a13ca2fa5b484$var$PopoverInner({ state: state, isExiting: isExiting, UNSTABLE_portalContainer: UNSTABLE_portalContainer, clearContexts: clearContexts, ...props }) {\n    // Calculate the arrow size internally (and remove props.arrowSize from PopoverProps)\n    // Referenced from: packages/@react-spectrum/tooltip/src/TooltipTrigger.tsx\n    let arrowRef = (0, $g4jvP$useRef)(null);\n    let containerRef = (0, $g4jvP$useRef)(null);\n    let groupCtx = (0, $g4jvP$useContext)($542a13ca2fa5b484$var$PopoverGroupContext);\n    let isSubPopover = groupCtx && props.trigger === 'SubmenuTrigger';\n    let [isOpen, setIsOpen] = (0, $g4jvP$useState)(false);\n    let { popoverProps: popoverProps, underlayProps: underlayProps, arrowProps: arrowProps, placement: placement, triggerAnchorPoint: triggerAnchorPoint } = (0, $g4jvP$usePopover)({\n        ...props,\n        offset: props.offset ?? 8,\n        arrowRef: arrowRef,\n        // If this is a submenu/subdialog, use the root popover's container\n        // to detect outside interaction and add aria-hidden.\n        groupRef: isSubPopover ? groupCtx : containerRef\n    }, state);\n    let ref = props.popoverRef;\n    // Skip the automatic entry animation when opening instantly (e.g. swapping between previews\n    // during warmup). An explicitly provided isEntering prop still takes precedence.\n    let enterAnimation = (0, $g4jvP$useEnterAnimation)(ref, !!placement && isOpen);\n    // oxlint-disable-next-line react/react-compiler\n    let isEntering = props.isEntering || !props.shouldSkipAnimation && enterAnimation || false;\n    // oxlint-disable-next-line react/react-compiler\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        // oxlint-disable-next-line react/react-compiler\n        ...props,\n        defaultClassName: 'react-aria-Popover',\n        // oxlint-disable-next-line react/react-compiler\n        values: {\n            // oxlint-disable-next-line react/react-compiler\n            trigger: props.trigger || null,\n            placement: placement,\n            isEntering: // oxlint-disable-next-line react/react-compiler\n            isEntering,\n            isExiting: isExiting\n        }\n    });\n    // Automatically render Popover with role=dialog except when isNonModal is true,\n    // or a dialog is already nested inside the popover.\n    let shouldBeDialog = // oxlint-disable-next-line react/react-compiler\n    !props.isNonModal || props.trigger === 'SubmenuTrigger' || props.trigger === 'PreviewTrigger';\n    // oxlint-disable-next-line react/react-compiler\n    let [isDialog, setDialog] = (0, $g4jvP$useState)(props.trigger === 'PreviewTrigger');\n    (0, $g4jvP$useLayoutEffect)(()=>{\n        if (ref.current) setDialog(shouldBeDialog && !ref.current.querySelector('[role=dialog]'));\n    }, [\n        ref,\n        shouldBeDialog\n    ]);\n    // Focus the popover itself on mount, unless a child element is already focused.\n    // Skip this for submenus since hovering a submenutrigger should keep focus on the trigger\n    // oxlint-disable react/react-compiler\n    (0, $g4jvP$useEffect)(()=>{\n        if (isDialog && props.trigger !== 'PreviewTrigger' && (props.trigger !== 'SubmenuTrigger' || (0, $g4jvP$getInteractionModality)() !== 'pointer') && ref.current && !(0, $g4jvP$isFocusWithin)(ref.current)) (0, $g4jvP$focusSafely)(ref.current);\n    }, [\n        isDialog,\n        ref,\n        props.trigger\n    ]);\n    // oxlint-enable react/react-compiler\n    let children = (0, $g4jvP$useMemo)(()=>{\n        let children = renderProps.children;\n        for (let Context of [\n            $542a13ca2fa5b484$export$9b9a0cd73afb7ca4,\n            ...clearContexts ?? []\n        ])children = /*#__PURE__*/ (0, $g4jvP$react).createElement(Context.Provider, {\n            value: null\n        }, children);\n        return children;\n    }, [\n        renderProps.children,\n        clearContexts\n    ]);\n    let [triggerWidth, setTriggerWidth] = (0, $g4jvP$useState)(null);\n    // oxlint-disable-next-line react/react-compiler\n    let onResize = (0, $g4jvP$useCallback)(()=>{\n        if (props.triggerRef.current) setTriggerWidth(props.triggerRef.current.getBoundingClientRect().width + 'px');\n    }, [\n        props.triggerRef\n    ]);\n    (0, $g4jvP$useLayoutEffect)(onResize, [\n        onResize\n    ]);\n    // oxlint-disable-next-line react/react-compiler\n    (0, $g4jvP$useResizeObserver)({\n        // oxlint-disable-next-line react/react-compiler\n        ref: renderProps.style?.['--trigger-width'] ? undefined : props.triggerRef,\n        onResize: onResize\n    });\n    let style = {\n        ...popoverProps.style,\n        '--trigger-anchor-point': triggerAnchorPoint ? `${triggerAnchorPoint.x}px ${triggerAnchorPoint.y}px` : undefined,\n        ...renderProps.style,\n        '--trigger-width': renderProps.style?.['--trigger-width'] || triggerWidth\n    };\n    // Since our trigger may open the OSK, we defer the reveal, as a courtesy, to avoid layout shift.\n    (0, $g4jvP$useLayoutEffect)(()=>(0, $g4jvP$runAfterKeyboard)(()=>setIsOpen(true)), []);\n    // oxlint-disable react/react-compiler\n    let overlay = /*#__PURE__*/ (0, $g4jvP$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...(0, $g4jvP$mergeProps)((0, $g4jvP$filterDOMProps)(props, {\n            global: true\n        }), popoverProps),\n        ...renderProps,\n        id: isDialog ? props.id : undefined,\n        role: isDialog ? 'dialog' : undefined,\n        tabIndex: isDialog ? -1 : undefined,\n        \"aria-label\": props['aria-label'],\n        \"aria-labelledby\": props['aria-labelledby'],\n        ref: ref,\n        slot: props.slot || undefined,\n        style: style,\n        dir: props.dir,\n        \"data-trigger\": props.trigger,\n        \"data-placement\": placement,\n        \"data-entering\": isEntering || undefined,\n        \"data-exiting\": isExiting || undefined\n    }, !props.isNonModal && /*#__PURE__*/ (0, $g4jvP$react).createElement((0, $g4jvP$DismissButton), {\n        onDismiss: state.close\n    }), /*#__PURE__*/ (0, $g4jvP$react).createElement((0, $4fcfe18fac72dabd$export$2de4954e8ae13b9f).Provider, {\n        value: {\n            ...arrowProps,\n            placement: placement,\n            ref: arrowRef\n        }\n    }, children), /*#__PURE__*/ (0, $g4jvP$react).createElement((0, $g4jvP$DismissButton), {\n        onDismiss: state.close\n    }));\n    // oxlint-enable react/react-compiler\n    // If this is a root popover, render an extra div to act as the portal container for submenus/subdialogs.\n    if (!isSubPopover) // oxlint-disable react/react-compiler\n    return /*#__PURE__*/ (0, $g4jvP$react).createElement((0, $g4jvP$Overlay), {\n        ...props,\n        shouldContainFocus: isDialog && props.trigger !== 'PreviewTrigger',\n        isExiting: isExiting,\n        portalContainer: UNSTABLE_portalContainer\n    }, !props.isNonModal && state.isOpen && /*#__PURE__*/ (0, $g4jvP$react).createElement(\"div\", {\n        \"data-testid\": \"underlay\",\n        ...underlayProps,\n        style: {\n            position: 'fixed',\n            inset: 0\n        }\n    }), /*#__PURE__*/ (0, $g4jvP$react).createElement(\"div\", {\n        ref: containerRef,\n        style: {\n            display: 'contents'\n        }\n    }, /*#__PURE__*/ (0, $g4jvP$react).createElement($542a13ca2fa5b484$var$PopoverGroupContext.Provider, {\n        value: containerRef\n    }, overlay)));\n    // Submenus/subdialogs are mounted into the root popover's container.\n    // oxlint-disable react/react-compiler\n    return /*#__PURE__*/ (0, $g4jvP$react).createElement((0, $g4jvP$Overlay), {\n        ...props,\n        shouldContainFocus: isDialog && props.trigger !== 'PreviewTrigger',\n        isExiting: isExiting,\n        portalContainer: UNSTABLE_portalContainer ?? groupCtx?.current ?? undefined\n    }, overlay);\n// oxlint-enable react/react-compiler\n}\n\n\nexport {$542a13ca2fa5b484$export$9b9a0cd73afb7ca4 as PopoverContext, $542a13ca2fa5b484$export$5b6b19405a83ff9d as Popover};\n//# sourceMappingURL=Popover.mjs.map\n","import {dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415} from \"./utils.mjs\";\nimport $91cTq$react, {createContext as $91cTq$createContext, forwardRef as $91cTq$forwardRef} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nconst $650bea62ab5f5f0f$export$744d98a3b8a94e1c = /*#__PURE__*/ (0, $91cTq$createContext)({});\nconst $650bea62ab5f5f0f$export$16e4d70cc375e707 = /*#__PURE__*/ (0, $91cTq$forwardRef)(function Keyboard(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $650bea62ab5f5f0f$export$744d98a3b8a94e1c);\n    return /*#__PURE__*/ (0, $91cTq$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).kbd, {\n        dir: \"ltr\",\n        ...props,\n        ref: ref\n    });\n});\n\n\nexport {$650bea62ab5f5f0f$export$744d98a3b8a94e1c as KeyboardContext, $650bea62ab5f5f0f$export$16e4d70cc375e707 as Keyboard};\n//# sourceMappingURL=Keyboard.mjs.map\n","var $788d77bcaab07d29$exports = {};\n$788d77bcaab07d29$exports = {\n    \"longPressMessage\": `Long press or press Alt + ArrowDown to open menu`\n};\n\n\nexport {$788d77bcaab07d29$exports as default};\n//# sourceMappingURL=en-US.mjs.map\n","import $ljvjO$intlmenuarAEmjs from \"../intl/menu/ar-AE.mjs\";\nimport $ljvjO$intlmenubgBGmjs from \"../intl/menu/bg-BG.mjs\";\nimport $ljvjO$intlmenucsCZmjs from \"../intl/menu/cs-CZ.mjs\";\nimport $ljvjO$intlmenudaDKmjs from \"../intl/menu/da-DK.mjs\";\nimport $ljvjO$intlmenudeDEmjs from \"../intl/menu/de-DE.mjs\";\nimport $ljvjO$intlmenuelGRmjs from \"../intl/menu/el-GR.mjs\";\nimport $ljvjO$intlmenuenUSmjs from \"../intl/menu/en-US.mjs\";\nimport $ljvjO$intlmenuesESmjs from \"../intl/menu/es-ES.mjs\";\nimport $ljvjO$intlmenuetEEmjs from \"../intl/menu/et-EE.mjs\";\nimport $ljvjO$intlmenufiFImjs from \"../intl/menu/fi-FI.mjs\";\nimport $ljvjO$intlmenufrFRmjs from \"../intl/menu/fr-FR.mjs\";\nimport $ljvjO$intlmenuheILmjs from \"../intl/menu/he-IL.mjs\";\nimport $ljvjO$intlmenuhrHRmjs from \"../intl/menu/hr-HR.mjs\";\nimport $ljvjO$intlmenuhuHUmjs from \"../intl/menu/hu-HU.mjs\";\nimport $ljvjO$intlmenuitITmjs from \"../intl/menu/it-IT.mjs\";\nimport $ljvjO$intlmenujaJPmjs from \"../intl/menu/ja-JP.mjs\";\nimport $ljvjO$intlmenukoKRmjs from \"../intl/menu/ko-KR.mjs\";\nimport $ljvjO$intlmenultLTmjs from \"../intl/menu/lt-LT.mjs\";\nimport $ljvjO$intlmenulvLVmjs from \"../intl/menu/lv-LV.mjs\";\nimport $ljvjO$intlmenunbNOmjs from \"../intl/menu/nb-NO.mjs\";\nimport $ljvjO$intlmenunlNLmjs from \"../intl/menu/nl-NL.mjs\";\nimport $ljvjO$intlmenuplPLmjs from \"../intl/menu/pl-PL.mjs\";\nimport $ljvjO$intlmenuptBRmjs from \"../intl/menu/pt-BR.mjs\";\nimport $ljvjO$intlmenuptPTmjs from \"../intl/menu/pt-PT.mjs\";\nimport $ljvjO$intlmenuroROmjs from \"../intl/menu/ro-RO.mjs\";\nimport $ljvjO$intlmenuruRUmjs from \"../intl/menu/ru-RU.mjs\";\nimport $ljvjO$intlmenuskSKmjs from \"../intl/menu/sk-SK.mjs\";\nimport $ljvjO$intlmenuslSImjs from \"../intl/menu/sl-SI.mjs\";\nimport $ljvjO$intlmenusrSPmjs from \"../intl/menu/sr-SP.mjs\";\nimport $ljvjO$intlmenusvSEmjs from \"../intl/menu/sv-SE.mjs\";\nimport $ljvjO$intlmenutrTRmjs from \"../intl/menu/tr-TR.mjs\";\nimport $ljvjO$intlmenuukUAmjs from \"../intl/menu/uk-UA.mjs\";\nimport $ljvjO$intlmenuzhCNmjs from \"../intl/menu/zh-CN.mjs\";\nimport $ljvjO$intlmenuzhTWmjs from \"../intl/menu/zh-TW.mjs\";\n\nvar $bdff4dd8fb5956de$exports = {};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$bdff4dd8fb5956de$exports = {\n    \"ar-AE\": $ljvjO$intlmenuarAEmjs,\n    \"bg-BG\": $ljvjO$intlmenubgBGmjs,\n    \"cs-CZ\": $ljvjO$intlmenucsCZmjs,\n    \"da-DK\": $ljvjO$intlmenudaDKmjs,\n    \"de-DE\": $ljvjO$intlmenudeDEmjs,\n    \"el-GR\": $ljvjO$intlmenuelGRmjs,\n    \"en-US\": $ljvjO$intlmenuenUSmjs,\n    \"es-ES\": $ljvjO$intlmenuesESmjs,\n    \"et-EE\": $ljvjO$intlmenuetEEmjs,\n    \"fi-FI\": $ljvjO$intlmenufiFImjs,\n    \"fr-FR\": $ljvjO$intlmenufrFRmjs,\n    \"he-IL\": $ljvjO$intlmenuheILmjs,\n    \"hr-HR\": $ljvjO$intlmenuhrHRmjs,\n    \"hu-HU\": $ljvjO$intlmenuhuHUmjs,\n    \"it-IT\": $ljvjO$intlmenuitITmjs,\n    \"ja-JP\": $ljvjO$intlmenujaJPmjs,\n    \"ko-KR\": $ljvjO$intlmenukoKRmjs,\n    \"lt-LT\": $ljvjO$intlmenultLTmjs,\n    \"lv-LV\": $ljvjO$intlmenulvLVmjs,\n    \"nb-NO\": $ljvjO$intlmenunbNOmjs,\n    \"nl-NL\": $ljvjO$intlmenunlNLmjs,\n    \"pl-PL\": $ljvjO$intlmenuplPLmjs,\n    \"pt-BR\": $ljvjO$intlmenuptBRmjs,\n    \"pt-PT\": $ljvjO$intlmenuptPTmjs,\n    \"ro-RO\": $ljvjO$intlmenuroROmjs,\n    \"ru-RU\": $ljvjO$intlmenuruRUmjs,\n    \"sk-SK\": $ljvjO$intlmenuskSKmjs,\n    \"sl-SI\": $ljvjO$intlmenuslSImjs,\n    \"sr-SP\": $ljvjO$intlmenusrSPmjs,\n    \"sv-SE\": $ljvjO$intlmenusvSEmjs,\n    \"tr-TR\": $ljvjO$intlmenutrTRmjs,\n    \"uk-UA\": $ljvjO$intlmenuukUAmjs,\n    \"zh-CN\": $ljvjO$intlmenuzhCNmjs,\n    \"zh-TW\": $ljvjO$intlmenuzhTWmjs\n};\n\n\nexport {$bdff4dd8fb5956de$exports as default};\n//# sourceMappingURL=intlStrings.mjs.map\n","import {isIOS as $2add3ce32c6007eb$export$fedb369cb70207f1, isMac as $2add3ce32c6007eb$export$9ac100e40613ea10} from \"../utils/platform.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {useLongPress as $7b01448eaad0fe7c$export$c24ed0104d07eab9} from \"./useLongPress.mjs\";\nimport {useRef as $bhKyt$useRef} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nfunction $00dce70c89c7306c$export$2464060fb1e12fa6(props) {\n    // How to trigger context menu events on various platforms:\n    // - macOS\n    //   - Mouse right click\n    //   - Control + click\n    //   - Control + Enter (does not fire the contextmenu event in certain WebKit / Chrome versions - https://bugs.webkit.org/show_bug.cgi?id=302049, https://issues.chromium.org/issues/369897039)\n    //   - Control + Option + Shift + M with VoiceOver\n    // - Windows / Linux\n    //   - Mouse right click\n    //   - Shift + F10\n    //   - Long press on a touch screen\n    // - iOS\n    //   - Long press (does not fire contextmenu event - https://bugs.webkit.org/show_bug.cgi?id=213953)\n    // - Android\n    //   - Long press\n    let { onContextMenu: onContextMenu } = props;\n    let firedContextMenuEvent = (0, $bhKyt$useRef)(false);\n    // iOS does not fire the contextmenu event, so use long press.\n    let { longPressProps: longPressProps } = (0, $7b01448eaad0fe7c$export$c24ed0104d07eab9)({\n        onLongPressStart () {\n            firedContextMenuEvent.current = false;\n        },\n        onLongPress (e) {\n            if (!firedContextMenuEvent.current) onContextMenu?.({\n                target: e.target,\n                x: e.x,\n                y: e.y\n            });\n            else firedContextMenuEvent.current = false;\n        }\n    });\n    if (!onContextMenu) return {\n        contextMenuProps: {}\n    };\n    return {\n        // oxlint-disable-next-line react/react-compiler - it says we are reading a ref during render but that's not true...\n        contextMenuProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)((0, $2add3ce32c6007eb$export$fedb369cb70207f1)() ? longPressProps : {}, {\n            onContextMenu (e) {\n                e.stopPropagation();\n                e.preventDefault();\n                firedContextMenuEvent.current = true;\n                let rect = e.currentTarget.getBoundingClientRect();\n                onContextMenu({\n                    target: e.currentTarget,\n                    x: e.clientX - rect.x,\n                    y: e.clientY - rect.y\n                });\n            },\n            onKeyDown (e) {\n                // macOS has a default keyboard shortcut to show the contextmenu: Ctrl + Enter.\n                // However, some versions of Safari and Chrome do not trigger the contextmenu event.\n                // Fixed in https://github.com/WebKit/WebKit/pull/62278 (currently in WekKit nightly) and\n                // https://github.com/chromium/chromium/commit/268c876c191cd4712c2d1043aab9760fb71d9be5 (Chrome 147).\n                // Remove this workaround once those are broadly available.\n                // An additional bug still occurs when the target has a border-radius: https://bugs.webkit.org/show_bug.cgi?id=317496\n                if ((0, $2add3ce32c6007eb$export$9ac100e40613ea10)()) {\n                    if (e.ctrlKey && e.key === 'Enter') {\n                        firedContextMenuEvent.current = false;\n                        let target = e.currentTarget;\n                        e.stopPropagation();\n                        setTimeout(()=>{\n                            if (!firedContextMenuEvent.current) {\n                                let rect = target.getBoundingClientRect();\n                                onContextMenu({\n                                    target: target,\n                                    x: rect.width / 2,\n                                    y: rect.height / 2\n                                });\n                            } else firedContextMenuEvent.current = false;\n                        }, 10);\n                    }\n                }\n            }\n        })\n    };\n}\n\n\nexport {$00dce70c89c7306c$export$2464060fb1e12fa6 as useContextMenu};\n//# sourceMappingURL=useContextMenu.mjs.map\n","import {onCloseMap as $22e2f5f6490788e8$export$f6211563215e3b37} from \"./useCloseOnScroll.mjs\";\nimport {useId as $390e54f620492c70$export$f680877a34711e37} from \"../utils/useId.mjs\";\nimport {useEffect as $i8XK3$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nfunction $f282e36c29c025e8$export$f9d5c8beee7d008d(props, state, ref) {\n    let { type: type } = props;\n    let { isOpen: isOpen } = state;\n    // Backward compatibility. Share state close function with useOverlayPosition so it can close on scroll\n    // without forcing users to pass onClose.\n    (0, $i8XK3$useEffect)(()=>{\n        if (ref && ref.current) (0, $22e2f5f6490788e8$export$f6211563215e3b37).set(ref.current, state.close);\n    });\n    // Aria 1.1 supports multiple values for aria-haspopup other than just menus.\n    // https://www.w3.org/TR/wai-aria-1.1/#aria-haspopup\n    // However, we only add it for menus for now because screen readers often\n    // announce it as a menu even for other values.\n    let ariaHasPopup = undefined;\n    if (type === 'menu') ariaHasPopup = true;\n    else if (type === 'listbox') ariaHasPopup = 'listbox';\n    let overlayId = (0, $390e54f620492c70$export$f680877a34711e37)();\n    return {\n        triggerProps: {\n            'aria-haspopup': ariaHasPopup,\n            'aria-expanded': isOpen,\n            'aria-controls': isOpen ? overlayId : undefined,\n            onPress: state.toggle\n        },\n        overlayProps: {\n            id: overlayId\n        }\n    };\n}\n\n\nexport {$f282e36c29c025e8$export$f9d5c8beee7d008d as useOverlayTrigger};\n//# sourceMappingURL=useOverlayTrigger.mjs.map\n","import {focusWithoutScrolling as $1969ac565cfec8d0$export$de79e2c695e052f3} from \"../utils/focusWithoutScrolling.mjs\";\nimport {getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport $1SpDQ$intlStringsmjs from \"./intlStrings.mjs\";\nimport {useContextMenu as $00dce70c89c7306c$export$2464060fb1e12fa6} from \"../interactions/useContextMenu.mjs\";\nimport {useId as $390e54f620492c70$export$f680877a34711e37} from \"../utils/useId.mjs\";\nimport {useKeyboard as $8296dad1a4c5e0dc$export$8f71654801c2f7cd} from \"../interactions/useKeyboard.mjs\";\nimport {useLocalizedStringFormatter as $cf2482eff2eeeec2$export$f12b703ca79dfbb1} from \"../i18n/useLocalizedStringFormatter.mjs\";\nimport {useLongPress as $7b01448eaad0fe7c$export$c24ed0104d07eab9} from \"../interactions/useLongPress.mjs\";\nimport {useOverlayTrigger as $f282e36c29c025e8$export$f9d5c8beee7d008d} from \"../overlays/useOverlayTrigger.mjs\";\nimport {useEffect as $1SpDQ$useEffect} from \"react\";\n\n\nfunction $parcel$interopDefault(a) {\n  return a && a.__esModule ? a.default : a;\n}\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\nfunction $f19b83c1486f45cc$export$dc9c12ed27dd1b49(props, state, ref) {\n    let { type: type = 'menu', isDisabled: isDisabled, trigger: trigger = 'press' } = props;\n    let menuTriggerId = (0, $390e54f620492c70$export$f680877a34711e37)();\n    let { triggerProps: triggerProps, overlayProps: overlayProps } = (0, $f282e36c29c025e8$export$f9d5c8beee7d008d)({\n        type: type\n    }, state, ref);\n    let open = (shouldOpen, e, focusStrategy = 'first')=>{\n        if (!shouldOpen || e.isDefaultPrevented()) return false;\n        state.toggle(focusStrategy);\n    };\n    // React puts listeners on the same root, so even if propagation was stopped, immediate propagation is still possible.\n    // useTypeSelect will handle the spacebar first if it's running, so we don't want to open if it's handled it already.\n    // We use isDefaultPrevented() instead of isPropagationStopped() because createEventHandler stops propagation by default.\n    // And default prevented means that the event was handled by something else (typeahead), so we don't want to open the menu.\n    let { keyboardProps: keyboardProps } = (0, $8296dad1a4c5e0dc$export$8f71654801c2f7cd)({\n        isDisabled: isDisabled,\n        shortcuts: {\n            Enter: (e)=>{\n                return open(trigger !== 'longPress', e, 'first');\n            },\n            ' ': (e)=>{\n                return open(trigger !== 'longPress', e, 'first');\n            },\n            ArrowDown: (e)=>{\n                return open(trigger !== 'longPress', e, 'first');\n            },\n            ArrowUp: (e)=>{\n                return open(trigger !== 'longPress', e, 'last');\n            },\n            'Alt+Enter': (e)=>{\n                return open(trigger === 'longPress', e, 'first');\n            },\n            'Alt+ ': (e)=>{\n                return open(trigger === 'longPress', e, 'first');\n            },\n            // Alt+Arrow* must open for both trigger modes: for `press` it matches the same `e.key` cases as\n            // plain Arrow*; for `longPress`, plain arrows are ignored elsewhere and Alt+Arrow is the opener\n            // (see legacy `if (trigger === 'longPress' && !e.altKey) return` before the ArrowDown/Up switch).\n            'Alt+ArrowDown': (e)=>{\n                return open(true, e, 'first');\n            },\n            'Alt+ArrowUp': (e)=>{\n                return open(true, e, 'last');\n            }\n        }\n    });\n    let stringFormatter = (0, $cf2482eff2eeeec2$export$f12b703ca79dfbb1)((0, ($parcel$interopDefault($1SpDQ$intlStringsmjs))), '@react-aria/menu');\n    let { longPressProps: longPressProps } = (0, $7b01448eaad0fe7c$export$c24ed0104d07eab9)({\n        isDisabled: isDisabled || trigger !== 'longPress',\n        accessibilityDescription: stringFormatter.format('longPressMessage'),\n        onLongPressStart () {\n            state.close();\n        },\n        onLongPress () {\n            state.open('first');\n        }\n    });\n    let pressProps = {\n        preventFocusOnPress: true,\n        onPressStart (e) {\n            // For consistency with native, open the menu on mouse/key down, but touch up.\n            if (e.pointerType !== 'touch' && e.pointerType !== 'keyboard' && !isDisabled) {\n                // Ensure trigger has focus before opening the menu so it can be restored by FocusScope on close.\n                (0, $1969ac565cfec8d0$export$de79e2c695e052f3)(e.target);\n                // If opened with a screen reader, auto focus the first item.\n                // Otherwise, the menu itself will be focused.\n                state.open(e.pointerType === 'virtual' ? 'first' : null);\n            }\n        },\n        onPress (e) {\n            if (e.pointerType === 'touch' && !isDisabled) {\n                // Ensure trigger has focus before opening the menu so it can be restored by FocusScope on close.\n                (0, $1969ac565cfec8d0$export$de79e2c695e052f3)(e.target);\n                state.toggle();\n            }\n        }\n    };\n    // omit onPress from triggerProps since we override it above.\n    // oxlint-disable-next-line react/react-compiler\n    delete triggerProps.onPress;\n    let { contextMenuProps: contextMenuProps } = (0, $00dce70c89c7306c$export$2464060fb1e12fa6)({\n        onContextMenu (e) {\n            // This is not a DOM event, so the linter is incorrect.\n            // eslint-disable-next-line rsp-rules/safe-event-target\n            let rect = e.target.getBoundingClientRect();\n            state.setPoint({\n                x: rect.x + e.x,\n                y: rect.y + e.y\n            });\n            state.open();\n        }\n    });\n    (0, $1SpDQ$useEffect)(()=>{\n        // Close context menus when right clicking outside. The browser's context menu will appear instead.\n        if (state.isOpen && trigger === 'contextMenu') {\n            let onContextMenu = (e)=>{\n                // Checking if the target is the body works because everything outside the menu is inert.\n                if ((e.button === 2 || e.button === 0 && e.ctrlKey === true) && (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e) === document.body) state.close();\n            };\n            document.addEventListener('mousedown', onContextMenu);\n            return ()=>document.removeEventListener('mousedown', onContextMenu);\n        }\n    }, [\n        state,\n        trigger\n    ]);\n    let interactionProps;\n    if (trigger === 'press') interactionProps = {\n        ...pressProps,\n        ...keyboardProps\n    };\n    else if (trigger === 'longPress') interactionProps = {\n        ...longPressProps,\n        ...keyboardProps\n    };\n    else if (trigger === 'contextMenu') {\n        interactionProps = contextMenuProps;\n        // Remove aria-haspopup and associated attributes from context menu triggers.\n        // aria-haspopup indicates that the trigger opens a menu on activation (i.e. click/Enter),\n        // which is not the case for context menus, so this would lead to confusing announcements.\n        // Context menus are equally discoverable (or not) by sighted and non-sighted users,\n        // so we don't need a screen reader specific announcement.\n        // See https://github.com/w3c/aria/issues/1971 for further discussion.\n        let { 'aria-haspopup': _a, 'aria-expanded': _b, 'aria-controls': _c, ...rest } = triggerProps;\n        triggerProps = rest;\n    }\n    return {\n        // @ts-ignore - TODO we pass out both DOMAttributes AND AriaButtonProps, but useButton will discard the longPress event handlers, it's only through PressResponder magic that this works for RSP and RAC. it does not work in aria examples\n        menuTriggerProps: {\n            ...triggerProps,\n            ...interactionProps,\n            id: menuTriggerId\n        },\n        menuProps: {\n            ...overlayProps,\n            'aria-labelledby': menuTriggerId,\n            autoFocus: state.focusStrategy || true,\n            onClose: state.close\n        }\n    };\n}\n\n\nexport {$f19b83c1486f45cc$export$dc9c12ed27dd1b49 as useMenuTrigger};\n//# sourceMappingURL=useMenuTrigger.mjs.map\n","/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ const $d5765cd7be93edd1$export$6f49b4016bfc8d56 = new WeakMap();\n\n\nexport {$d5765cd7be93edd1$export$6f49b4016bfc8d56 as menuData};\n//# sourceMappingURL=utils.mjs.map\n","import {filterDOMProps as $8e9d2fae0ecb9001$export$457c3d6518dd4c6f} from \"../utils/filterDOMProps.mjs\";\nimport {menuData as $d5765cd7be93edd1$export$6f49b4016bfc8d56} from \"./utils.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {useSelectableList as $64903b4b31b6bb2a$export$b95089534ab7c1fd} from \"../selection/useSelectableList.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nfunction $a2d69d6ee8486855$export$38eaa17faae8f579(props, state, ref) {\n    let { shouldFocusWrap: shouldFocusWrap = true, onKeyDown: onKeyDown, onKeyUp: onKeyUp, ...otherProps } = props;\n    if (!props['aria-label'] && !props['aria-labelledby'] && process.env.NODE_ENV !== 'production') console.warn('An aria-label or aria-labelledby prop is required for accessibility.');\n    let domProps = (0, $8e9d2fae0ecb9001$export$457c3d6518dd4c6f)(props, {\n        labelable: true\n    });\n    let { listProps: listProps } = (0, $64903b4b31b6bb2a$export$b95089534ab7c1fd)({\n        ...otherProps,\n        ref: ref,\n        selectionManager: state.selectionManager,\n        collection: state.collection,\n        disabledKeys: state.disabledKeys,\n        shouldFocusWrap: shouldFocusWrap,\n        linkBehavior: 'override'\n    });\n    (0, $d5765cd7be93edd1$export$6f49b4016bfc8d56).set(state, {\n        onClose: props.onClose,\n        onAction: props.onAction,\n        shouldUseVirtualFocus: props.shouldUseVirtualFocus\n    });\n    return {\n        menuProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(domProps, {\n            onKeyDown: onKeyDown,\n            onKeyUp: onKeyUp\n        }, {\n            role: 'menu',\n            ...listProps,\n            onKeyDown: (e)=>{\n                // don't clear the menu selected keys if the user is presses escape since escape closes the menu\n                if (e.key !== 'Escape' || props.shouldUseVirtualFocus) listProps.onKeyDown?.(e);\n            }\n        })\n    };\n}\n\n\nexport {$a2d69d6ee8486855$export$38eaa17faae8f579 as useMenu};\n//# sourceMappingURL=useMenu.mjs.map\n","import {filterDOMProps as $8e9d2fae0ecb9001$export$457c3d6518dd4c6f} from \"../utils/filterDOMProps.mjs\";\nimport {getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {handleLinkClick as $caaf0dd3060ed57c$export$13aea1a3cb5e3f1f, useLinkProps as $caaf0dd3060ed57c$export$7e924b3091a3bd18, useRouter as $caaf0dd3060ed57c$export$9a302a45f65d0572} from \"../utils/openLink.mjs\";\nimport {isFocusVisible as $8f5a2122b0992be3$export$b9b3dfddab17db27, setInteractionModality as $8f5a2122b0992be3$export$8397ddfc504fdb9a} from \"../interactions/useFocusVisible.mjs\";\nimport {menuData as $d5765cd7be93edd1$export$6f49b4016bfc8d56} from \"./utils.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {useFocusable as $d1116acdf220c2da$export$4c014de7c8940b4c} from \"../interactions/useFocusable.mjs\";\nimport {useHover as $e969f22b6713ca4a$export$ae780daf29e6d456} from \"../interactions/useHover.mjs\";\nimport {useKeyboard as $8296dad1a4c5e0dc$export$8f71654801c2f7cd} from \"../interactions/useKeyboard.mjs\";\nimport {usePress as $d27d541f9569d26d$export$45712eceda6fad21} from \"../interactions/usePress.mjs\";\nimport {useSelectableItem as $f6ba6936bfd098a0$export$ecf600387e221c37} from \"../selection/useSelectableItem.mjs\";\nimport {useSlotId as $390e54f620492c70$export$b4cc09c592e8fdb8} from \"../utils/useId.mjs\";\nimport {getItemCount as $2sTAp$getItemCount} from \"react-stately/private/collections/getItemCount\";\nimport {useRef as $2sTAp$useRef} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction $1a9c2c840fd36413$export$9d32628fc2aea7da(props, state, ref) {\n    let { id: id, key: key, closeOnSelect: closeOnSelect, shouldCloseOnSelect: shouldCloseOnSelect, isVirtualized: isVirtualized, 'aria-haspopup': hasPopup, onPressStart: onPressStart, onPressUp: pressUpProp, onPress: onPress, onPressChange: pressChangeProp, onPressEnd: onPressEnd, onClick: onClickProp, onHoverStart: hoverStartProp, onHoverChange: onHoverChange, onHoverEnd: onHoverEnd, onKeyDown: onKeyDown, onKeyUp: onKeyUp, onFocus: onFocus, onFocusChange: onFocusChange, onBlur: onBlur, selectionManager: selectionManager = state.selectionManager } = props;\n    let isTrigger = !!hasPopup;\n    let isTriggerExpanded = isTrigger && props['aria-expanded'] === 'true';\n    let isDisabled = props.isDisabled ?? selectionManager.isDisabled(key);\n    let isSelected = props.isSelected ?? selectionManager.isSelected(key);\n    let data = (0, $d5765cd7be93edd1$export$6f49b4016bfc8d56).get(state);\n    let item = state.collection.getItem(key);\n    let onClose = props.onClose || data.onClose;\n    let router = (0, $caaf0dd3060ed57c$export$9a302a45f65d0572)();\n    let performAction = ()=>{\n        if (isTrigger) return;\n        if (item?.props?.onAction) item.props.onAction();\n        else if (props.onAction) props.onAction(key);\n        if (data.onAction) {\n            // Must reassign to variable otherwise `this` binding gets messed up. Something to do with WeakMap.\n            let onAction = data.onAction;\n            onAction(key, item?.value);\n        }\n    };\n    let role = 'menuitem';\n    if (!isTrigger) {\n        if (selectionManager.selectionMode === 'single') role = 'menuitemradio';\n        else if (selectionManager.selectionMode === 'multiple') role = 'menuitemcheckbox';\n    }\n    let labelId = (0, $390e54f620492c70$export$b4cc09c592e8fdb8)();\n    let descriptionId = (0, $390e54f620492c70$export$b4cc09c592e8fdb8)();\n    let keyboardId = (0, $390e54f620492c70$export$b4cc09c592e8fdb8)();\n    let ariaProps = {\n        id: id,\n        'aria-disabled': isDisabled || undefined,\n        role: role,\n        'aria-label': props['aria-label'],\n        'aria-labelledby': labelId,\n        'aria-describedby': [\n            props['aria-describedby'],\n            descriptionId,\n            keyboardId\n        ].filter(Boolean).join(' ') || undefined,\n        'aria-controls': props['aria-controls'],\n        'aria-haspopup': hasPopup,\n        'aria-expanded': props['aria-expanded']\n    };\n    if (selectionManager.selectionMode !== 'none' && !isTrigger) ariaProps['aria-checked'] = isSelected;\n    if (isVirtualized) {\n        let index = Number(item?.index);\n        ariaProps['aria-posinset'] = Number.isNaN(index) ? undefined : index + 1;\n        ariaProps['aria-setsize'] = (0, $2sTAp$getItemCount)(state.collection);\n    }\n    let isPressedRef = (0, $2sTAp$useRef)(false);\n    let onPressChange = (isPressed)=>{\n        pressChangeProp?.(isPressed);\n        isPressedRef.current = isPressed;\n    };\n    let interaction = (0, $2sTAp$useRef)(null);\n    let onPressUp = (e)=>{\n        if (e.pointerType !== 'keyboard') interaction.current = {\n            pointerType: e.pointerType\n        };\n        // If interacting with mouse, allow the user to mouse down on the trigger button,\n        // drag, and release over an item (matching native behavior).\n        if (e.pointerType === 'mouse') {\n            if (!isPressedRef.current) e.target.click();\n        }\n        pressUpProp?.(e);\n    };\n    let onClick = (e)=>{\n        onClickProp?.(e);\n        performAction();\n        (0, $caaf0dd3060ed57c$export$13aea1a3cb5e3f1f)(e, router, item.props.href, item?.props.routerOptions);\n        let shouldClose = interaction.current?.pointerType === 'keyboard' ? interaction.current?.key === 'Enter' || selectionManager.selectionMode === 'none' || selectionManager.isLink(key) : selectionManager.selectionMode !== 'multiple' || selectionManager.isLink(key);\n        shouldClose = shouldCloseOnSelect ?? closeOnSelect ?? shouldClose;\n        if (onClose && !isTrigger && shouldClose) onClose();\n        interaction.current = null;\n    };\n    let { itemProps: itemProps, isFocused: isFocused } = (0, $f6ba6936bfd098a0$export$ecf600387e221c37)({\n        id: id,\n        selectionManager: selectionManager,\n        key: key,\n        ref: ref,\n        shouldSelectOnPressUp: true,\n        allowsDifferentPressOrigin: true,\n        // Disable all handling of links in useSelectable item\n        // because we handle it ourselves. The behavior of menus\n        // is slightly different from other collections because\n        // actions are performed on key down rather than key up.\n        linkBehavior: 'none',\n        shouldUseVirtualFocus: data.shouldUseVirtualFocus\n    });\n    let { pressProps: pressProps, isPressed: isPressed } = (0, $d27d541f9569d26d$export$45712eceda6fad21)({\n        onPressStart: onPressStart,\n        onPress: onPress,\n        onPressUp: onPressUp,\n        onPressChange: onPressChange,\n        onPressEnd: onPressEnd,\n        isDisabled: isDisabled\n    });\n    let { hoverProps: hoverProps } = (0, $e969f22b6713ca4a$export$ae780daf29e6d456)({\n        isDisabled: isDisabled,\n        onHoverStart (e) {\n            // Hovering over an already expanded sub dialog trigger should keep focus in the dialog.\n            if (!(0, $8f5a2122b0992be3$export$b9b3dfddab17db27)() && !(isTriggerExpanded && hasPopup)) {\n                selectionManager.setFocused(true);\n                selectionManager.setFocusedKey(key);\n            }\n            hoverStartProp?.(e);\n        },\n        onHoverChange: onHoverChange,\n        onHoverEnd: onHoverEnd\n    });\n    let { keyboardProps: keyboardProps } = (0, $8296dad1a4c5e0dc$export$8f71654801c2f7cd)({\n        shortcuts: {\n            ' ': (e)=>{\n                interaction.current = {\n                    pointerType: 'keyboard',\n                    key: ' '\n                };\n                (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e).click();\n                // click above sets modality to \"virtual\", need to set interaction modality back to 'keyboard' so focusSafely calls properly move focus\n                // to the newly opened submenu's first item.\n                (0, $8f5a2122b0992be3$export$8397ddfc504fdb9a)('keyboard');\n            },\n            Enter: (e)=>{\n                interaction.current = {\n                    pointerType: 'keyboard',\n                    key: 'Enter'\n                };\n                let target = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n                // Trigger click unless this is a link. Links with real DOM focus activate on Enter natively.\n                // With virtual focus (e.g. Autocomplete) focus stays on the input and useAutocomplete dispatches\n                // keydown here then follows with a synthetic click only if dispatchEvent was not canceled—so\n                // links must not preventDefault on that keydown.\n                if (target.tagName !== 'A') {\n                    target.click();\n                    (0, $8f5a2122b0992be3$export$8397ddfc504fdb9a)('keyboard');\n                    return;\n                }\n                (0, $8f5a2122b0992be3$export$8397ddfc504fdb9a)('keyboard');\n                return {\n                    shouldPreventDefault: false,\n                    shouldContinuePropagation: false\n                };\n            }\n        },\n        onKeyDown: onKeyDown,\n        onKeyUp: onKeyUp\n    });\n    let { focusableProps: focusableProps } = (0, $d1116acdf220c2da$export$4c014de7c8940b4c)({\n        onBlur: onBlur,\n        onFocus: onFocus,\n        onFocusChange: onFocusChange\n    }, ref);\n    let domProps = (0, $8e9d2fae0ecb9001$export$457c3d6518dd4c6f)(item?.props);\n    delete domProps.id;\n    let linkProps = (0, $caaf0dd3060ed57c$export$7e924b3091a3bd18)(item?.props);\n    return {\n        menuItemProps: {\n            ...ariaProps,\n            ...(0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(domProps, linkProps, isTrigger ? {\n                onFocus: itemProps.onFocus,\n                'data-collection': itemProps['data-collection'],\n                'data-key': itemProps['data-key']\n            } : itemProps, pressProps, hoverProps, keyboardProps, focusableProps, // Prevent DOM focus from moving on mouse down when using virtual focus or this is a submenu/subdialog trigger.\n            data.shouldUseVirtualFocus || isTrigger ? {\n                onMouseDown: (e)=>e.preventDefault()\n            } : undefined, // oxlint-disable-next-line react/react-compiler\n            isDisabled ? undefined : {\n                onClick: onClick\n            }),\n            // If a submenu is expanded, set the tabIndex to -1 so that shift tabbing goes out of the menu instead of the parent menu item.\n            tabIndex: itemProps.tabIndex != null && isTriggerExpanded && !data.shouldUseVirtualFocus ? -1 : itemProps.tabIndex\n        },\n        labelProps: {\n            id: labelId\n        },\n        descriptionProps: {\n            id: descriptionId\n        },\n        keyboardShortcutProps: {\n            id: keyboardId\n        },\n        isFocused: isFocused,\n        isFocusVisible: isFocused && selectionManager.isFocused && (0, $8f5a2122b0992be3$export$b9b3dfddab17db27)() && !isTriggerExpanded,\n        isSelected: isSelected,\n        isPressed: isPressed,\n        isDisabled: isDisabled\n    };\n}\n\n\nexport {$1a9c2c840fd36413$export$9d32628fc2aea7da as useMenuItem};\n//# sourceMappingURL=useMenuItem.mjs.map\n","import {useId as $390e54f620492c70$export$f680877a34711e37} from \"../utils/useId.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $7355d4e5c49461b6$export$73f7a44322579622(props) {\n    let { heading: heading, 'aria-label': ariaLabel } = props;\n    let headingId = (0, $390e54f620492c70$export$f680877a34711e37)();\n    return {\n        itemProps: {\n            role: 'presentation'\n        },\n        headingProps: heading ? {\n            // Techincally, menus cannot contain headings according to ARIA.\n            // We hide the heading from assistive technology, using role=\"presentation\",\n            // and only use it as a label for the nested group.\n            id: headingId,\n            role: 'presentation'\n        } : {},\n        groupProps: {\n            role: 'group',\n            'aria-label': ariaLabel,\n            'aria-labelledby': heading ? headingId : undefined\n        }\n    };\n}\n\n\nexport {$7355d4e5c49461b6$export$73f7a44322579622 as useMenuSection};\n//# sourceMappingURL=useMenuSection.mjs.map\n","import {useOverlayTriggerState as $f11fb0bcf1b2687a$export$61c6a8c84e605fb6} from \"../overlays/useOverlayTriggerState.mjs\";\nimport {useState as $aoDK0$useState} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $e3403870bfb691da$export$79fefeb1c2091ac3(props) {\n    let overlayTriggerState = (0, $f11fb0bcf1b2687a$export$61c6a8c84e605fb6)(props);\n    let [focusStrategy, setFocusStrategy] = (0, $aoDK0$useState)(null);\n    let [expandedKeysStack, setExpandedKeysStack] = (0, $aoDK0$useState)([]);\n    let closeAll = ()=>{\n        setExpandedKeysStack([]);\n        overlayTriggerState.close();\n    };\n    let openSubmenu = (triggerKey, level)=>{\n        setExpandedKeysStack((oldStack)=>{\n            if (level > oldStack.length) return oldStack;\n            return [\n                ...oldStack.slice(0, level),\n                triggerKey\n            ];\n        });\n    };\n    let closeSubmenu = (triggerKey, level)=>{\n        setExpandedKeysStack((oldStack)=>{\n            let key = oldStack[level];\n            if (key === triggerKey) return oldStack.slice(0, level);\n            else return oldStack;\n        });\n    };\n    return {\n        focusStrategy: focusStrategy,\n        ...overlayTriggerState,\n        open (focusStrategy = null) {\n            setFocusStrategy(focusStrategy);\n            overlayTriggerState.open();\n        },\n        toggle (focusStrategy = null) {\n            setFocusStrategy(focusStrategy);\n            overlayTriggerState.toggle();\n        },\n        close () {\n            closeAll();\n        },\n        expandedKeysStack: expandedKeysStack,\n        openSubmenu: openSubmenu,\n        closeSubmenu: closeSubmenu\n    };\n}\n\n\nexport {$e3403870bfb691da$export$79fefeb1c2091ac3 as useMenuTriggerState};\n//# sourceMappingURL=useMenuTriggerState.mjs.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ class $df1fcc684d3b021a$export$863faf230ee2118a {\n    constructor(nodes, { expandedKeys: expandedKeys } = {}){\n        this.keyMap = new Map();\n        this.firstKey = null;\n        this.lastKey = null;\n        this.iterable = nodes;\n        expandedKeys = expandedKeys || new Set();\n        let visit = (node)=>{\n            this.keyMap.set(node.key, node);\n            if (node.childNodes && (node.type === 'section' || expandedKeys.has(node.key))) for (let child of node.childNodes)visit(child);\n        };\n        for (let node of nodes)visit(node);\n        let last = null;\n        let index = 0;\n        for (let [key, node] of this.keyMap){\n            if (last) {\n                last.nextKey = key;\n                node.prevKey = last.key;\n            } else {\n                this.firstKey = key;\n                node.prevKey = undefined;\n            }\n            if (node.type === 'item') node.index = index++;\n            last = node;\n            // Set nextKey as undefined since this might be the last node\n            // If it isn't the last node, last.nextKey will properly set at start of new loop\n            last.nextKey = undefined;\n        }\n        this.lastKey = last?.key ?? null;\n    }\n    *[Symbol.iterator]() {\n        yield* this.iterable;\n    }\n    get size() {\n        return this.keyMap.size;\n    }\n    getKeys() {\n        return this.keyMap.keys();\n    }\n    getKeyBefore(key) {\n        let node = this.keyMap.get(key);\n        return node ? node.prevKey ?? null : null;\n    }\n    getKeyAfter(key) {\n        let node = this.keyMap.get(key);\n        return node ? node.nextKey ?? null : null;\n    }\n    getFirstKey() {\n        return this.firstKey;\n    }\n    getLastKey() {\n        return this.lastKey;\n    }\n    getItem(key) {\n        return this.keyMap.get(key) ?? null;\n    }\n    at(idx) {\n        const keys = [\n            ...this.getKeys()\n        ];\n        return this.getItem(keys[idx]);\n    }\n}\n\n\nexport {$df1fcc684d3b021a$export$863faf230ee2118a as TreeCollection};\n//# sourceMappingURL=TreeCollection.mjs.map\n","import {SelectionManager as $4a07ac835f260f78$export$6c8a5aaad13c9852} from \"../selection/SelectionManager.mjs\";\nimport {TreeCollection as $df1fcc684d3b021a$export$863faf230ee2118a} from \"./TreeCollection.mjs\";\nimport {useCollection as $d03379b88399b8c5$export$6cd28814d92fa9c9} from \"../collections/useCollection.mjs\";\nimport {useControlledState as $3e6197669829fe11$export$40bfa8c7b0832715} from \"../utils/useControlledState.mjs\";\nimport {useMultipleSelectionState as $60f19cefd567a3e4$export$253fe78d46329472} from \"../selection/useMultipleSelectionState.mjs\";\nimport {useMemo as $aXIpm$useMemo, useCallback as $aXIpm$useCallback, useEffect as $aXIpm$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\nfunction $6b915bde6cd300dd$export$728d6ba534403756(props) {\n    let { onExpandedChange: onExpandedChange } = props;\n    let [expandedKeys, setExpandedKeys] = (0, $3e6197669829fe11$export$40bfa8c7b0832715)(props.expandedKeys ? new Set(props.expandedKeys) : undefined, props.defaultExpandedKeys ? new Set(props.defaultExpandedKeys) : new Set(), onExpandedChange);\n    let selectionState = (0, $60f19cefd567a3e4$export$253fe78d46329472)(props);\n    let disabledKeys = (0, $aXIpm$useMemo)(()=>props.disabledKeys ? new Set(props.disabledKeys) : new Set(), [\n        props.disabledKeys\n    ]);\n    let tree = (0, $d03379b88399b8c5$export$6cd28814d92fa9c9)(props, (0, $aXIpm$useCallback)((nodes)=>new (0, $df1fcc684d3b021a$export$863faf230ee2118a)(nodes, {\n            expandedKeys: expandedKeys\n        }), [\n        expandedKeys\n    ]), null);\n    // Reset focused key if that item is deleted from the collection.\n    (0, $aXIpm$useEffect)(()=>{\n        if (selectionState.focusedKey != null && !tree.getItem(selectionState.focusedKey)) selectionState.setFocusedKey(null);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [\n        tree,\n        selectionState.focusedKey\n    ]);\n    let onToggle = (key)=>{\n        setExpandedKeys($6b915bde6cd300dd$var$toggleKey(expandedKeys, key));\n    };\n    return {\n        collection: tree,\n        expandedKeys: expandedKeys,\n        disabledKeys: disabledKeys,\n        toggleKey: onToggle,\n        setExpandedKeys: setExpandedKeys,\n        selectionManager: new (0, $4a07ac835f260f78$export$6c8a5aaad13c9852)(tree, selectionState)\n    };\n}\nfunction $6b915bde6cd300dd$var$toggleKey(set, key) {\n    let res = new Set(set);\n    if (res.has(key)) res.delete(key);\n    else res.add(key);\n    return res;\n}\n\n\nexport {$6b915bde6cd300dd$export$728d6ba534403756 as useTreeState};\n//# sourceMappingURL=useTreeState.mjs.map\n","import {DEFAULT_SLOT as $7230ffa83bc0c2cf$export$c62b8e45d58ddad9, dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, Provider as $7230ffa83bc0c2cf$export$2881499e37b75b9a, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415, useRenderProps as $7230ffa83bc0c2cf$export$4d86445c2cf5e3, useSlot as $7230ffa83bc0c2cf$export$9d4c57ee4c6ffdd8, useSlottedContext as $7230ffa83bc0c2cf$export$fabf2dc03a41866e} from \"./utils.mjs\";\nimport {CollectionRendererContext as $263ab7fc0f95ccdb$export$4feb769f8ddf26c5, SectionContext as $263ab7fc0f95ccdb$export$d40e14dec8b060a8, usePersistedKeys as $263ab7fc0f95ccdb$export$90e00781bc59d8f9} from \"./Collection.mjs\";\nimport {FieldInputContext as $4b38b5b75ecc6208$export$698f465ec27e93df, SelectableCollectionContext as $4b38b5b75ecc6208$export$b0d3ecf7112093a7} from \"./Autocomplete.mjs\";\nimport {HeaderContext as $53e61d82d8b8611d$export$e0e4026c12a8bdbb} from \"./Header.mjs\";\nimport {KeyboardContext as $650bea62ab5f5f0f$export$744d98a3b8a94e1c} from \"./Keyboard.mjs\";\nimport {OverlayTriggerStateContext as $f2ff30fde7b014be$export$d2f961adcb0afbe} from \"./Dialog.mjs\";\nimport {PopoverContext as $542a13ca2fa5b484$export$9b9a0cd73afb7ca4} from \"./Popover.mjs\";\nimport {SelectionIndicatorContext as $91fe5e721c7f36c1$export$c9549807523555e0} from \"./SelectionIndicator.mjs\";\nimport {SeparatorContext as $e28ab3efe3e87743$export$6615d83f6de245ce} from \"./Separator.mjs\";\nimport {SharedElementTransition as $792f28e438b9ad5f$export$758399f318e6385a} from \"./SharedElementTransition.mjs\";\nimport {TextContext as $efe09c6d1c304b50$export$9afb8bc826b033ea} from \"./Text.mjs\";\nimport {useMenuTrigger as $7xe5e$useMenuTrigger, useSubmenuTrigger as $7xe5e$useSubmenuTrigger, useMenu as $7xe5e$useMenu, useMenuSection as $7xe5e$useMenuSection, useMenuItem as $7xe5e$useMenuItem} from \"react-aria/useMenu\";\nimport {CollectionNode as $7xe5e$CollectionNode, SectionNode as $7xe5e$SectionNode, ItemNode as $7xe5e$ItemNode, LoaderNode as $7xe5e$LoaderNode} from \"react-aria/private/collections/BaseCollection\";\nimport {useMenuTriggerState as $7xe5e$useMenuTriggerState, useSubmenuTriggerState as $7xe5e$useSubmenuTriggerState} from \"react-stately/useMenuTriggerState\";\nimport {Collection as $7xe5e$Collection} from \"react-aria/Collection\";\nimport {createBranchComponent as $7xe5e$createBranchComponent, CollectionBuilder as $7xe5e$CollectionBuilder, createLeafComponent as $7xe5e$createLeafComponent} from \"react-aria/CollectionBuilder\";\nimport {filterDOMProps as $7xe5e$filterDOMProps} from \"react-aria/filterDOMProps\";\nimport {FocusScope as $7xe5e$FocusScope} from \"react-aria/FocusScope\";\nimport {inertValue as $7xe5e$inertValue} from \"react-aria/private/utils/inertValue\";\nimport {useLoadMoreSentinel as $7xe5e$useLoadMoreSentinel} from \"react-aria/private/utils/useLoadMoreSentinel\";\nimport {mergeProps as $7xe5e$mergeProps} from \"react-aria/mergeProps\";\nimport {PressResponder as $7xe5e$PressResponder} from \"react-aria/private/interactions/PressResponder\";\nimport $7xe5e$react, {createContext as $7xe5e$createContext, useRef as $7xe5e$useRef, useContext as $7xe5e$useContext, forwardRef as $7xe5e$forwardRef, useMemo as $7xe5e$useMemo} from \"react\";\nimport {SelectionManager as $7xe5e$SelectionManager} from \"react-stately/private/selection/SelectionManager\";\nimport {useTreeState as $7xe5e$useTreeState} from \"react-stately/useTreeState\";\nimport {useHover as $7xe5e$useHover} from \"react-aria/useHover\";\nimport {useIsHidden as $7xe5e$useIsHidden} from \"react-aria/private/collections/Hidden\";\nimport {useMultipleSelectionState as $7xe5e$useMultipleSelectionState} from \"react-stately/useMultipleSelectionState\";\nimport {useObjectRef as $7xe5e$useObjectRef} from \"react-aria/useObjectRef\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst $49319ee1285aa241$export$c7e742effb1c51e2 = /*#__PURE__*/ (0, $7xe5e$createContext)(null);\nconst $49319ee1285aa241$export$24aad8519b95b41b = /*#__PURE__*/ (0, $7xe5e$createContext)(null);\nconst $49319ee1285aa241$export$795aec4671cbae19 = /*#__PURE__*/ (0, $7xe5e$createContext)(null);\nconst $49319ee1285aa241$var$SelectionManagerContext = /*#__PURE__*/ (0, $7xe5e$createContext)(null);\nfunction $49319ee1285aa241$export$27d2ad3c5815583e(props) {\n    let state = (0, $7xe5e$useMenuTriggerState)(props);\n    let ref = (0, $7xe5e$useRef)(null);\n    let { menuTriggerProps: menuTriggerProps, menuProps: menuProps } = (0, $7xe5e$useMenuTrigger)({\n        ...props,\n        type: 'menu'\n    }, state, ref);\n    let scrollRef = (0, $7xe5e$useRef)(null);\n    // If within a collection (e.g. Tabs), render nothing.\n    // Not using createHideableComponent for this because that also creates a forwardRef.\n    let isHidden = (0, $7xe5e$useIsHidden)();\n    if (isHidden) return null;\n    return /*#__PURE__*/ (0, $7xe5e$react).createElement((0, $7230ffa83bc0c2cf$export$2881499e37b75b9a), {\n        values: [\n            [\n                $49319ee1285aa241$export$c7e742effb1c51e2,\n                {\n                    ...menuProps,\n                    ref: scrollRef\n                }\n            ],\n            [\n                (0, $f2ff30fde7b014be$export$d2f961adcb0afbe),\n                state\n            ],\n            [\n                $49319ee1285aa241$export$795aec4671cbae19,\n                state\n            ],\n            [\n                (0, $542a13ca2fa5b484$export$9b9a0cd73afb7ca4),\n                {\n                    trigger: 'MenuTrigger',\n                    triggerRef: ref,\n                    scrollRef: scrollRef,\n                    placement: 'bottom start',\n                    'aria-labelledby': menuProps['aria-labelledby'],\n                    offset: props.trigger === 'contextMenu' ? 0 : undefined\n                }\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $7xe5e$react).createElement((0, $7xe5e$PressResponder), {\n        ...menuTriggerProps,\n        ref: ref,\n        isPressed: state.isOpen\n    }, props.children));\n}\nconst $49319ee1285aa241$var$SubmenuTriggerContext = /*#__PURE__*/ (0, $7xe5e$createContext)(null);\nclass $49319ee1285aa241$var$SubmenuTriggerNode extends (0, $7xe5e$CollectionNode) {\n    static{\n        this.type = 'submenutrigger';\n    }\n    filter(collection, newCollection, filterFn) {\n        let triggerNode = collection.getItem(this.firstChildKey);\n        if (triggerNode && filterFn(triggerNode.textValue, this)) {\n            let clone = this.clone();\n            newCollection.addDescendants(clone, collection);\n            return clone;\n        }\n        return null;\n    }\n}\nconst $49319ee1285aa241$export$ecabc99eeffab7ca = /*#__PURE__*/ (0, $7xe5e$createBranchComponent)($49319ee1285aa241$var$SubmenuTriggerNode, (props, ref, item)=>{\n    let { CollectionBranch: CollectionBranch } = (0, $7xe5e$useContext)((0, $263ab7fc0f95ccdb$export$4feb769f8ddf26c5));\n    let state = (0, $7xe5e$useContext)($49319ee1285aa241$export$24aad8519b95b41b);\n    let rootMenuTriggerState = (0, $7xe5e$useContext)($49319ee1285aa241$export$795aec4671cbae19);\n    let submenuTriggerState = (0, $7xe5e$useSubmenuTriggerState)({\n        triggerKey: item.key\n    }, rootMenuTriggerState);\n    let submenuRef = (0, $7xe5e$useRef)(null);\n    let itemRef = (0, $7xe5e$useObjectRef)(ref);\n    let { parentMenuRef: parentMenuRef, shouldUseVirtualFocus: shouldUseVirtualFocus } = (0, $7xe5e$useContext)($49319ee1285aa241$var$SubmenuTriggerContext);\n    let { submenuTriggerProps: submenuTriggerProps, submenuProps: submenuProps, popoverProps: popoverProps } = (0, $7xe5e$useSubmenuTrigger)({\n        parentMenuRef: parentMenuRef,\n        submenuRef: submenuRef,\n        delay: props.delay,\n        shouldUseVirtualFocus: shouldUseVirtualFocus\n    }, submenuTriggerState, itemRef);\n    return /*#__PURE__*/ (0, $7xe5e$react).createElement((0, $7230ffa83bc0c2cf$export$2881499e37b75b9a), {\n        values: [\n            [\n                $49319ee1285aa241$var$MenuItemContext,\n                {\n                    ...submenuTriggerProps,\n                    onAction: undefined,\n                    ref: itemRef\n                }\n            ],\n            [\n                $49319ee1285aa241$export$c7e742effb1c51e2,\n                {\n                    ref: submenuRef,\n                    ...submenuProps\n                }\n            ],\n            [\n                (0, $f2ff30fde7b014be$export$d2f961adcb0afbe),\n                submenuTriggerState\n            ],\n            [\n                (0, $542a13ca2fa5b484$export$9b9a0cd73afb7ca4),\n                {\n                    trigger: 'SubmenuTrigger',\n                    triggerRef: itemRef,\n                    placement: 'end top',\n                    'aria-labelledby': submenuProps['aria-labelledby'],\n                    ...popoverProps\n                }\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $7xe5e$react).createElement(CollectionBranch, {\n        collection: state.collection,\n        parent: item\n    }), props.children[1]);\n}, (props)=>props.children[0]);\nconst $49319ee1285aa241$export$d9b273488cd8ce6f = /*#__PURE__*/ (0, $7xe5e$forwardRef)(function Menu(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $49319ee1285aa241$export$c7e742effb1c51e2);\n    // Delay rendering the actual menu until we have the collection so that auto focus works properly.\n    return /*#__PURE__*/ (0, $7xe5e$react).createElement((0, $7xe5e$CollectionBuilder), {\n        content: /*#__PURE__*/ (0, $7xe5e$react).createElement((0, $7xe5e$Collection), props)\n    }, (collection)=>/*#__PURE__*/ (0, $7xe5e$react).createElement($49319ee1285aa241$var$MenuInner, {\n            props: props,\n            collection: collection,\n            menuRef: ref\n        }));\n});\nfunction $49319ee1285aa241$var$MenuInner({ props: props, collection: collection, menuRef: ref }) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, (0, $4b38b5b75ecc6208$export$b0d3ecf7112093a7));\n    let { filter: filter, ...autocompleteMenuProps } = props;\n    let filteredCollection = (0, $7xe5e$useMemo)(()=>filter ? collection.filter(filter) : collection, [\n        collection,\n        filter\n    ]);\n    let state = (0, $7xe5e$useTreeState)({\n        ...props,\n        collection: filteredCollection,\n        children: undefined\n    });\n    let triggerState = (0, $7xe5e$useContext)($49319ee1285aa241$export$795aec4671cbae19);\n    let { isVirtualized: isVirtualized, CollectionRoot: CollectionRoot } = (0, $7xe5e$useContext)((0, $263ab7fc0f95ccdb$export$4feb769f8ddf26c5));\n    let { menuProps: menuProps } = (0, $7xe5e$useMenu)({\n        ...props,\n        isVirtualized: isVirtualized,\n        onClose: props.onClose || triggerState?.close\n    }, state, ref);\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        children: undefined,\n        defaultClassName: 'react-aria-Menu',\n        values: {\n            isEmpty: state.collection.size === 0\n        }\n    });\n    let emptyState = null;\n    if (state.collection.size === 0 && props.renderEmptyState) emptyState = /*#__PURE__*/ (0, $7xe5e$react).createElement(\"div\", {\n        role: \"menuitem\",\n        style: {\n            display: 'contents'\n        }\n    }, props.renderEmptyState());\n    let DOMProps = (0, $7xe5e$filterDOMProps)(props, {\n        global: true\n    });\n    return /*#__PURE__*/ (0, $7xe5e$react).createElement((0, $7xe5e$FocusScope), null, /*#__PURE__*/ (0, $7xe5e$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...(0, $7xe5e$mergeProps)(DOMProps, renderProps, menuProps),\n        ref: ref,\n        slot: props.slot || undefined,\n        \"data-empty\": state.collection.size === 0 || undefined,\n        onScroll: props.onScroll\n    }, /*#__PURE__*/ (0, $7xe5e$react).createElement((0, $7230ffa83bc0c2cf$export$2881499e37b75b9a), {\n        values: [\n            [\n                $49319ee1285aa241$export$24aad8519b95b41b,\n                state\n            ],\n            [\n                (0, $e28ab3efe3e87743$export$6615d83f6de245ce),\n                {\n                    elementType: 'div'\n                }\n            ],\n            [\n                (0, $263ab7fc0f95ccdb$export$d40e14dec8b060a8),\n                {\n                    name: 'MenuSection',\n                    render: $49319ee1285aa241$var$MenuSectionInner\n                }\n            ],\n            [\n                $49319ee1285aa241$var$SubmenuTriggerContext,\n                {\n                    parentMenuRef: ref,\n                    shouldUseVirtualFocus: autocompleteMenuProps?.shouldUseVirtualFocus\n                }\n            ],\n            [\n                $49319ee1285aa241$var$MenuItemContext,\n                {\n                    shouldCloseOnSelect: props.shouldCloseOnSelect\n                }\n            ],\n            [\n                (0, $4b38b5b75ecc6208$export$b0d3ecf7112093a7),\n                null\n            ],\n            [\n                (0, $4b38b5b75ecc6208$export$698f465ec27e93df),\n                null\n            ],\n            [\n                $49319ee1285aa241$var$SelectionManagerContext,\n                state.selectionManager\n            ],\n            /* Ensure root MenuTriggerState is defined, in case Menu is rendered outside a MenuTrigger. */ /* We assume the context can never change between defined and undefined. */ // oxlint-disable-next-line react/react-compiler, react-hooks/rules-of-hooks\n            [\n                $49319ee1285aa241$export$795aec4671cbae19,\n                triggerState ?? (0, $7xe5e$useMenuTriggerState)({})\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $7xe5e$react).createElement((0, $792f28e438b9ad5f$export$758399f318e6385a), null, /*#__PURE__*/ (0, $7xe5e$react).createElement(CollectionRoot, {\n        collection: state.collection,\n        persistedKeys: (0, $263ab7fc0f95ccdb$export$90e00781bc59d8f9)(state.selectionManager.focusedKey),\n        scrollRef: ref\n    }))), emptyState));\n}\n// A subclass of SelectionManager that forwards focus-related properties to the parent,\n// but has its own local selection state.\nclass $49319ee1285aa241$var$GroupSelectionManager extends (0, $7xe5e$SelectionManager) {\n    constructor(parent, state){\n        super(parent.collection, state);\n        this.parent = parent;\n    }\n    get focusedKey() {\n        return this.parent.focusedKey;\n    }\n    get isFocused() {\n        return this.parent.isFocused;\n    }\n    setFocusedKey(key, childFocusStrategy) {\n        return this.parent.setFocusedKey(key, childFocusStrategy);\n    }\n    setFocused(isFocused) {\n        this.parent.setFocused(isFocused);\n    }\n    get childFocusStrategy() {\n        return this.parent.childFocusStrategy;\n    }\n}\nfunction $49319ee1285aa241$var$MenuSectionInner(props, ref, section, className = 'react-aria-MenuSection') {\n    let state = (0, $7xe5e$useContext)($49319ee1285aa241$export$24aad8519b95b41b);\n    let { CollectionBranch: CollectionBranch } = (0, $7xe5e$useContext)((0, $263ab7fc0f95ccdb$export$4feb769f8ddf26c5));\n    let [headingRef, heading] = (0, $7230ffa83bc0c2cf$export$9d4c57ee4c6ffdd8)();\n    let { headingProps: headingProps, groupProps: groupProps } = (0, $7xe5e$useMenuSection)({\n        heading: heading,\n        'aria-label': section.props['aria-label'] ?? undefined\n    });\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        id: undefined,\n        children: undefined,\n        defaultClassName: className,\n        className: section.props?.className,\n        style: section.props?.style,\n        values: undefined\n    });\n    let parent = (0, $7xe5e$useContext)($49319ee1285aa241$var$SelectionManagerContext);\n    let selectionState = (0, $7xe5e$useMultipleSelectionState)(props);\n    let manager = props.selectionMode != null ? new $49319ee1285aa241$var$GroupSelectionManager(parent, selectionState) : parent;\n    let closeOnSelect = (0, $7230ffa83bc0c2cf$export$fabf2dc03a41866e)($49319ee1285aa241$var$MenuItemContext)?.shouldCloseOnSelect;\n    let DOMProps = (0, $7xe5e$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.id;\n    return /*#__PURE__*/ (0, $7xe5e$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).section, {\n        ...(0, $7xe5e$mergeProps)(DOMProps, renderProps, groupProps),\n        ref: ref\n    }, /*#__PURE__*/ (0, $7xe5e$react).createElement((0, $7230ffa83bc0c2cf$export$2881499e37b75b9a), {\n        values: [\n            [\n                (0, $53e61d82d8b8611d$export$e0e4026c12a8bdbb),\n                {\n                    ...headingProps,\n                    ref: headingRef\n                }\n            ],\n            [\n                $49319ee1285aa241$var$SelectionManagerContext,\n                manager\n            ],\n            [\n                $49319ee1285aa241$var$MenuItemContext,\n                {\n                    shouldCloseOnSelect: props.shouldCloseOnSelect ?? closeOnSelect\n                }\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $7xe5e$react).createElement(CollectionBranch, {\n        collection: state.collection,\n        parent: section\n    })));\n}\nconst $49319ee1285aa241$export$4b1545b4f2016d26 = /*#__PURE__*/ (0, $7xe5e$createBranchComponent)((0, $7xe5e$SectionNode), $49319ee1285aa241$var$MenuSectionInner);\nconst $49319ee1285aa241$var$MenuItemContext = /*#__PURE__*/ (0, $7xe5e$createContext)(null);\nconst $49319ee1285aa241$export$2ce376c2cc3355c8 = /*#__PURE__*/ (0, $7xe5e$createLeafComponent)((0, $7xe5e$ItemNode), function MenuItem(props, forwardedRef, item) {\n    [props, forwardedRef] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, forwardedRef, $49319ee1285aa241$var$MenuItemContext);\n    let id = (0, $7230ffa83bc0c2cf$export$fabf2dc03a41866e)($49319ee1285aa241$var$MenuItemContext)?.id;\n    let state = (0, $7xe5e$useContext)($49319ee1285aa241$export$24aad8519b95b41b);\n    let ref = (0, $7xe5e$useObjectRef)(forwardedRef);\n    let selectionManager = (0, $7xe5e$useContext)($49319ee1285aa241$var$SelectionManagerContext);\n    let { isVirtualized: isVirtualized } = (0, $7xe5e$useContext)((0, $263ab7fc0f95ccdb$export$4feb769f8ddf26c5));\n    let { menuItemProps: menuItemProps, labelProps: labelProps, descriptionProps: descriptionProps, keyboardShortcutProps: keyboardShortcutProps, ...states } = (0, $7xe5e$useMenuItem)({\n        ...props,\n        id: id,\n        key: item.key,\n        selectionManager: selectionManager,\n        isVirtualized: isVirtualized\n    }, state, ref);\n    let { hoverProps: hoverProps, isHovered: isHovered } = (0, $7xe5e$useHover)({\n        isDisabled: states.isDisabled\n    });\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        id: undefined,\n        children: item.rendered,\n        defaultClassName: 'react-aria-MenuItem',\n        values: {\n            ...states,\n            isHovered: isHovered,\n            isFocusVisible: states.isFocusVisible,\n            selectionMode: selectionManager.selectionMode,\n            selectionBehavior: selectionManager.selectionBehavior,\n            hasSubmenu: !!props['aria-haspopup'],\n            isOpen: props['aria-expanded'] === 'true'\n        }\n    });\n    let ElementType = props.href ? (0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).a : (0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div;\n    let DOMProps = (0, $7xe5e$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.id;\n    delete DOMProps.onClick;\n    return /*#__PURE__*/ (0, $7xe5e$react).createElement(ElementType, {\n        ...(0, $7xe5e$mergeProps)(DOMProps, renderProps, menuItemProps, hoverProps),\n        ref: ref,\n        \"data-disabled\": states.isDisabled || undefined,\n        \"data-hovered\": isHovered || undefined,\n        \"data-focused\": states.isFocused || undefined,\n        \"data-focus-visible\": states.isFocusVisible || undefined,\n        \"data-pressed\": states.isPressed || undefined,\n        \"data-selected\": states.isSelected || undefined,\n        \"data-selection-mode\": selectionManager.selectionMode === 'none' ? undefined : selectionManager.selectionMode,\n        \"data-has-submenu\": !!props['aria-haspopup'] || undefined,\n        \"data-open\": props['aria-expanded'] === 'true' || undefined\n    }, /*#__PURE__*/ (0, $7xe5e$react).createElement((0, $7230ffa83bc0c2cf$export$2881499e37b75b9a), {\n        values: [\n            [\n                (0, $efe09c6d1c304b50$export$9afb8bc826b033ea),\n                {\n                    slots: {\n                        [(0, $7230ffa83bc0c2cf$export$c62b8e45d58ddad9)]: labelProps,\n                        label: labelProps,\n                        description: descriptionProps\n                    }\n                }\n            ],\n            [\n                (0, $650bea62ab5f5f0f$export$744d98a3b8a94e1c),\n                keyboardShortcutProps\n            ],\n            [\n                (0, $91fe5e721c7f36c1$export$c9549807523555e0),\n                {\n                    isSelected: states.isSelected\n                }\n            ]\n        ]\n    }, renderProps.children));\n});\nconst $49319ee1285aa241$export$93aba29d3a678058 = (0, $7xe5e$createLeafComponent)((0, $7xe5e$LoaderNode), function MenuLoadingIndicator(props, ref, item) {\n    let state = (0, $7xe5e$useContext)($49319ee1285aa241$export$24aad8519b95b41b);\n    let { isLoading: isLoading, onLoadMore: onLoadMore, scrollOffset: scrollOffset, ...otherProps } = props;\n    let sentinelRef = (0, $7xe5e$useRef)(null);\n    let memoedLoadMoreProps = (0, $7xe5e$useMemo)(()=>({\n            onLoadMore: onLoadMore,\n            collection: state?.collection,\n            sentinelRef: sentinelRef,\n            scrollOffset: scrollOffset\n        }), [\n        onLoadMore,\n        scrollOffset,\n        state?.collection\n    ]);\n    (0, $7xe5e$useLoadMoreSentinel)(memoedLoadMoreProps, sentinelRef);\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...otherProps,\n        id: undefined,\n        children: item.rendered,\n        defaultClassName: 'react-aria-MenuLoadingIndicator',\n        values: undefined\n    });\n    let itemProps = {\n        // For Android talkback\n        tabIndex: -1\n    };\n    return /*#__PURE__*/ (0, $7xe5e$react).createElement((0, $7xe5e$react).Fragment, null, /*#__PURE__*/ (0, $7xe5e$react).createElement(\"div\", {\n        style: {\n            position: 'relative',\n            width: 0,\n            height: 0\n        },\n        inert: (0, $7xe5e$inertValue)(true)\n    }, /*#__PURE__*/ (0, $7xe5e$react).createElement(\"div\", {\n        \"data-testid\": \"loadMoreSentinel\",\n        ref: sentinelRef,\n        style: {\n            position: 'absolute',\n            height: 1,\n            width: 1\n        }\n    })), isLoading && renderProps.children && /*#__PURE__*/ (0, $7xe5e$react).createElement((0, $7xe5e$react).Fragment, null, /*#__PURE__*/ (0, $7xe5e$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...(0, $7xe5e$mergeProps)((0, $7xe5e$filterDOMProps)(props, {\n            global: true\n        }), itemProps),\n        ...renderProps,\n        role: \"menuitem\",\n        ref: ref\n    }, renderProps.children)));\n});\n\n\nexport {$49319ee1285aa241$export$c7e742effb1c51e2 as MenuContext, $49319ee1285aa241$export$24aad8519b95b41b as MenuStateContext, $49319ee1285aa241$export$795aec4671cbae19 as RootMenuTriggerStateContext, $49319ee1285aa241$export$27d2ad3c5815583e as MenuTrigger, $49319ee1285aa241$export$ecabc99eeffab7ca as SubmenuTrigger, $49319ee1285aa241$export$d9b273488cd8ce6f as Menu, $49319ee1285aa241$export$4b1545b4f2016d26 as MenuSection, $49319ee1285aa241$export$2ce376c2cc3355c8 as MenuItem, $49319ee1285aa241$export$93aba29d3a678058 as MenuLoadMoreItem};\n//# sourceMappingURL=Menu.mjs.map\n","import {filterDOMProps as $8e9d2fae0ecb9001$export$457c3d6518dd4c6f} from \"../utils/filterDOMProps.mjs\";\nimport {focusSafely as $f192c2f16961cbe0$export$80f3e147d781571c} from \"../interactions/focusSafely.mjs\";\nimport {getActiveElement as $23f2114a1b82827e$export$cd4e5573fbe2b576, isFocusWithin as $23f2114a1b82827e$export$b4f377a2b6254582} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {useOverlayFocusContain as $d7a937236970dc7f$export$14c98a7594375490} from \"../overlays/Overlay.mjs\";\nimport {useSlotId as $390e54f620492c70$export$b4cc09c592e8fdb8} from \"../utils/useId.mjs\";\nimport {useRef as $8glMc$useRef, useEffect as $8glMc$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\nfunction $13150e6629d46e45$export$d55e7ee900f34e93(props, ref) {\n    let { role: role = 'dialog', isEntering: isEntering } = props;\n    let titleId = (0, $390e54f620492c70$export$b4cc09c592e8fdb8)();\n    titleId = props['aria-label'] ? undefined : titleId;\n    let contentId = (0, $390e54f620492c70$export$b4cc09c592e8fdb8)();\n    contentId = role === 'alertdialog' && !props['aria-describedby'] ? contentId : undefined;\n    let isRefocusing = (0, $8glMc$useRef)(false);\n    // Focus the dialog itself on mount (or once it has entered), unless a child element is already focused.\n    (0, $8glMc$useEffect)(()=>{\n        if (!isEntering && ref.current && !(0, $23f2114a1b82827e$export$b4f377a2b6254582)(ref.current)) {\n            (0, $f192c2f16961cbe0$export$80f3e147d781571c)(ref.current);\n            // Safari on iOS does not move the VoiceOver cursor to the dialog\n            // or announce that it has opened until it has rendered. A workaround\n            // is to wait for half a second, then blur and re-focus the dialog.\n            let timeout = setTimeout(()=>{\n                // Check that the dialog is still focused, or focused was lost to the body.\n                if ((0, $23f2114a1b82827e$export$cd4e5573fbe2b576)() === ref.current || (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)() === document.body) {\n                    isRefocusing.current = true;\n                    if (ref.current) {\n                        ref.current.blur();\n                        (0, $f192c2f16961cbe0$export$80f3e147d781571c)(ref.current);\n                    }\n                    isRefocusing.current = false;\n                }\n            }, 500);\n            return ()=>{\n                clearTimeout(timeout);\n            };\n        }\n    }, [\n        ref,\n        isEntering\n    ]);\n    (0, $d7a937236970dc7f$export$14c98a7594375490)();\n    // Warn in dev mode if the dialog has no accessible title.\n    // This catches a common mistake where useDialog and useOverlayTriggerState\n    // are used in the same component, causing the title element to not be\n    // in the DOM when useSlotId queries for it.\n    // Check the DOM element directly since aria-labelledby may be added by\n    // wrapper components (e.g. RAC Dialog uses trigger ID as a fallback).\n    let hasWarned = (0, $8glMc$useRef)(false);\n    (0, $8glMc$useEffect)(()=>{\n        if (process.env.NODE_ENV !== 'production' && !hasWarned.current && ref.current) {\n            let el = ref.current;\n            let hasAriaLabel = el.hasAttribute('aria-label');\n            let hasAriaLabelledby = el.hasAttribute('aria-labelledby');\n            if (!hasAriaLabel && !hasAriaLabelledby) {\n                console.warn(\"A dialog must have a title for accessibility. Either provide an aria-label or aria-labelledby prop, or render a heading element inside the dialog.\");\n                hasWarned.current = true;\n            }\n        }\n    });\n    let ariaDescribedby = props['aria-describedby'] ?? contentId;\n    // We do not use aria-modal due to a Safari bug which forces the first focusable element to be focused\n    // on mount when inside an iframe, no matter which element we programmatically focus.\n    // See https://bugs.webkit.org/show_bug.cgi?id=211934.\n    // useModal sets aria-hidden on all elements outside the dialog, so the dialog will behave as a modal\n    // even without aria-modal on the dialog itself.\n    return {\n        dialogProps: {\n            ...(0, $8e9d2fae0ecb9001$export$457c3d6518dd4c6f)(props, {\n                labelable: true\n            }),\n            role: role,\n            tabIndex: -1,\n            'aria-labelledby': props['aria-labelledby'] ?? titleId,\n            'aria-describedby': ariaDescribedby,\n            // Prevent blur events from reaching useOverlay, which may cause\n            // popovers to close. Since focus is contained within the dialog,\n            // we don't want this to occur due to the above useEffect.\n            onBlur: (e)=>{\n                if (isRefocusing.current) e.stopPropagation();\n            }\n        },\n        titleProps: {\n            id: titleId\n        },\n        contentProps: {\n            id: contentId\n        }\n    };\n}\n\n\nexport {$13150e6629d46e45$export$d55e7ee900f34e93 as useDialog};\n//# sourceMappingURL=useDialog.mjs.map\n","import {ButtonContext as $7705c033048f6da7$export$24d547caef80ccd1} from \"./Button.mjs\";\nimport {DEFAULT_SLOT as $7230ffa83bc0c2cf$export$c62b8e45d58ddad9, dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, Provider as $7230ffa83bc0c2cf$export$2881499e37b75b9a, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415, useRenderProps as $7230ffa83bc0c2cf$export$4d86445c2cf5e3} from \"./utils.mjs\";\nimport {HeadingContext as $2ec61d1d4f780267$export$d688439359537581} from \"./Heading.mjs\";\nimport {PopoverContext as $542a13ca2fa5b484$export$9b9a0cd73afb7ca4} from \"./Popover.mjs\";\nimport {RootMenuTriggerStateContext as $49319ee1285aa241$export$795aec4671cbae19} from \"./Menu.mjs\";\nimport {TextContext as $efe09c6d1c304b50$export$9afb8bc826b033ea} from \"./Text.mjs\";\nimport {useDialog as $gV8PY$useDialog} from \"react-aria/useDialog\";\nimport {filterDOMProps as $gV8PY$filterDOMProps} from \"react-aria/filterDOMProps\";\nimport {mergeProps as $gV8PY$mergeProps} from \"react-aria/mergeProps\";\nimport {PressResponder as $gV8PY$PressResponder} from \"react-aria/private/interactions/PressResponder\";\nimport $gV8PY$react, {createContext as $gV8PY$createContext, useRef as $gV8PY$useRef, forwardRef as $gV8PY$forwardRef, useContext as $gV8PY$useContext} from \"react\";\nimport {useId as $gV8PY$useId} from \"react-aria/useId\";\nimport {useIsHidden as $gV8PY$useIsHidden} from \"react-aria/private/collections/Hidden\";\nimport {useMenuTriggerState as $gV8PY$useMenuTriggerState} from \"react-stately/useMenuTriggerState\";\nimport {useOverlayTrigger as $gV8PY$useOverlayTrigger} from \"react-aria/useOverlayTrigger\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst $f2ff30fde7b014be$export$8b93a07348a7730c = /*#__PURE__*/ (0, $gV8PY$createContext)(null);\nconst $f2ff30fde7b014be$export$d2f961adcb0afbe = /*#__PURE__*/ (0, $gV8PY$createContext)(null);\nfunction $f2ff30fde7b014be$export$2e1e1122cf0cba88(props) {\n    // Use useMenuTriggerState instead of useOverlayTriggerState in case a menu is embedded in the dialog.\n    // This is needed to handle submenus.\n    let state = (0, $gV8PY$useMenuTriggerState)(props);\n    let buttonRef = (0, $gV8PY$useRef)(null);\n    let { triggerProps: triggerProps, overlayProps: overlayProps } = (0, $gV8PY$useOverlayTrigger)({\n        type: 'dialog'\n    }, state, buttonRef);\n    // Label dialog by the trigger as a fallback if there is no title slot.\n    // This is done in RAC instead of hooks because otherwise we cannot distinguish\n    // between context and props. Normally aria-labelledby overrides the title\n    // but when sent by context we want the title to win.\n    // oxlint-disable-next-line react/react-compiler\n    triggerProps.id = (0, $gV8PY$useId)();\n    // oxlint-disable-next-line react/react-compiler\n    overlayProps['aria-labelledby'] = triggerProps.id;\n    // If within a collection (e.g. Tabs), render nothing.\n    // Not using createHideableComponent for this because that also creates a forwardRef.\n    let isHidden = (0, $gV8PY$useIsHidden)();\n    if (isHidden) return null;\n    return /*#__PURE__*/ (0, $gV8PY$react).createElement((0, $7230ffa83bc0c2cf$export$2881499e37b75b9a), {\n        values: [\n            [\n                $f2ff30fde7b014be$export$d2f961adcb0afbe,\n                state\n            ],\n            [\n                (0, $49319ee1285aa241$export$795aec4671cbae19),\n                state\n            ],\n            [\n                $f2ff30fde7b014be$export$8b93a07348a7730c,\n                overlayProps\n            ],\n            [\n                (0, $542a13ca2fa5b484$export$9b9a0cd73afb7ca4),\n                {\n                    trigger: 'DialogTrigger',\n                    triggerRef: buttonRef,\n                    id: overlayProps.id,\n                    'aria-labelledby': overlayProps['aria-labelledby']\n                }\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $gV8PY$react).createElement((0, $gV8PY$PressResponder), {\n        ...triggerProps,\n        ref: buttonRef,\n        isPressed: state.isOpen\n    }, props.children));\n}\nconst $f2ff30fde7b014be$export$3ddf2d174ce01153 = /*#__PURE__*/ (0, $gV8PY$forwardRef)(function Dialog(props, ref) {\n    let originalAriaLabelledby = props['aria-labelledby'];\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $f2ff30fde7b014be$export$8b93a07348a7730c);\n    let { dialogProps: dialogProps, titleProps: titleProps, contentProps: contentProps } = (0, $gV8PY$useDialog)({\n        ...props,\n        // Only pass aria-labelledby from props, not context.\n        // Context is used as a fallback below.\n        'aria-labelledby': originalAriaLabelledby\n    }, ref);\n    let state = (0, $gV8PY$useContext)($f2ff30fde7b014be$export$d2f961adcb0afbe);\n    if (!dialogProps['aria-label'] && !dialogProps['aria-labelledby']) {\n        // If aria-labelledby exists on props, we know it came from context.\n        // Use that as a fallback in case there is no title slot.\n        if (props['aria-labelledby']) dialogProps['aria-labelledby'] = props['aria-labelledby'];\n        else if (process.env.NODE_ENV !== 'production') console.warn('If a Dialog does not contain a <Heading slot=\"title\">, it must have an aria-label or aria-labelledby attribute for accessibility.');\n    }\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        defaultClassName: 'react-aria-Dialog',\n        className: props.className,\n        style: props.style,\n        children: props.children,\n        values: {\n            close: state?.close || (()=>{})\n        }\n    });\n    let DOMProps = (0, $gV8PY$filterDOMProps)(props, {\n        global: true\n    });\n    return /*#__PURE__*/ (0, $gV8PY$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).section, {\n        ...(0, $gV8PY$mergeProps)(DOMProps, renderProps, dialogProps),\n        render: props.render,\n        ref: ref,\n        slot: props.slot || undefined\n    }, /*#__PURE__*/ (0, $gV8PY$react).createElement((0, $7230ffa83bc0c2cf$export$2881499e37b75b9a), {\n        values: [\n            [\n                (0, $2ec61d1d4f780267$export$d688439359537581),\n                {\n                    slots: {\n                        [(0, $7230ffa83bc0c2cf$export$c62b8e45d58ddad9)]: {},\n                        title: {\n                            ...titleProps,\n                            level: 2\n                        }\n                    }\n                }\n            ],\n            [\n                (0, $efe09c6d1c304b50$export$9afb8bc826b033ea),\n                {\n                    slots: {\n                        [(0, $7230ffa83bc0c2cf$export$c62b8e45d58ddad9)]: {},\n                        description: contentProps\n                    }\n                }\n            ],\n            [\n                (0, $7705c033048f6da7$export$24d547caef80ccd1),\n                {\n                    slots: {\n                        [(0, $7230ffa83bc0c2cf$export$c62b8e45d58ddad9)]: {},\n                        close: {\n                            onPress: ()=>state?.close()\n                        }\n                    }\n                }\n            ]\n        ]\n    }, renderProps.children));\n});\n\n\nexport {$f2ff30fde7b014be$export$8b93a07348a7730c as DialogContext, $f2ff30fde7b014be$export$d2f961adcb0afbe as OverlayTriggerStateContext, $f2ff30fde7b014be$export$2e1e1122cf0cba88 as DialogTrigger, $f2ff30fde7b014be$export$3ddf2d174ce01153 as Dialog};\n//# sourceMappingURL=Dialog.mjs.map\n","import {useCollator as $673d46fce3e5717d$export$a16aca283550c30d} from \"./useCollator.mjs\";\nimport {useCallback as $cX3gV$useCallback, useMemo as $cX3gV$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $ef182bb9912241d8$export$3274cf84b703fff(options) {\n    let collator = (0, $673d46fce3e5717d$export$a16aca283550c30d)({\n        usage: 'search',\n        ...options\n    });\n    // TODO(later): these methods don't currently support the ignorePunctuation option.\n    let startsWith = (0, $cX3gV$useCallback)((string, substring)=>{\n        if (substring.length === 0) return true;\n        // Normalize both strings so we can slice safely\n        // TODO: take into account the ignorePunctuation option as well...\n        string = string.normalize('NFC');\n        substring = substring.normalize('NFC');\n        return collator.compare(string.slice(0, substring.length), substring) === 0;\n    }, [\n        collator\n    ]);\n    let endsWith = (0, $cX3gV$useCallback)((string, substring)=>{\n        if (substring.length === 0) return true;\n        string = string.normalize('NFC');\n        substring = substring.normalize('NFC');\n        return collator.compare(string.slice(-substring.length), substring) === 0;\n    }, [\n        collator\n    ]);\n    let contains = (0, $cX3gV$useCallback)((string, substring)=>{\n        if (substring.length === 0) return true;\n        string = string.normalize('NFC');\n        substring = substring.normalize('NFC');\n        let scan = 0;\n        let sliceLen = substring.length;\n        for(; scan + sliceLen <= string.length; scan++){\n            let slice = string.slice(scan, scan + sliceLen);\n            if (collator.compare(substring, slice) === 0) return true;\n        }\n        return false;\n    }, [\n        collator\n    ]);\n    return (0, $cX3gV$useMemo)(()=>({\n            startsWith: startsWith,\n            endsWith: endsWith,\n            contains: contains\n        }), [\n        startsWith,\n        endsWith,\n        contains\n    ]);\n}\n\n\nexport {$ef182bb9912241d8$export$3274cf84b703fff as useFilter};\n//# sourceMappingURL=useFilter.mjs.map\n","import {useLocale as $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7} from \"./I18nProvider.mjs\";\nimport {useMemo as $1mob3$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $b4eb6eb8d15fb21e$export$a2f47a3d2973640(options = {}) {\n    let { locale: locale } = (0, $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7)();\n    return (0, $1mob3$useMemo)(()=>new Intl.ListFormat(locale, options), [\n        locale,\n        options\n    ]);\n}\n\n\nexport {$b4eb6eb8d15fb21e$export$a2f47a3d2973640 as useListFormatter};\n//# sourceMappingURL=useListFormatter.mjs.map\n","import {toCalendarDate as $9FtGl$toCalendarDate, toCalendarDateTime as $9FtGl$toCalendarDateTime, toLocalTimeZone as $9FtGl$toLocalTimeZone, parseDateTime as $9FtGl$parseDateTime, parseDate as $9FtGl$parseDate} from \"@internationalized/date\";\nimport {getEventTarget as $9FtGl$getEventTarget} from \"react-aria/private/utils/shadowdom/DOMFunctions\";\nimport $9FtGl$react from \"react\";\nimport {useVisuallyHidden as $9FtGl$useVisuallyHidden} from \"react-aria/VisuallyHidden\";\n\n/*\n * Copyright 2025 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nconst $5a15223dacad897a$var$dateSegments = [\n    'day',\n    'month',\n    'year'\n];\nconst $5a15223dacad897a$var$granularityMap = {\n    hour: 1,\n    minute: 2,\n    second: 3\n};\nfunction $5a15223dacad897a$export$f6a685cd1acbd1fa(props, state) {\n    let { autoComplete: autoComplete, isDisabled: isDisabled, name: name } = props;\n    let { visuallyHiddenProps: visuallyHiddenProps } = (0, $9FtGl$useVisuallyHidden)({\n        style: {\n            // Prevent page scrolling.\n            position: 'fixed',\n            top: 0,\n            left: 0\n        }\n    });\n    let inputStep = 60;\n    if (state.granularity === 'second') inputStep = 1;\n    else if (state.granularity === 'hour') inputStep = 3600;\n    let dateValue = '';\n    if (state.value) {\n        if (state.granularity === 'day') dateValue = (0, $9FtGl$toCalendarDate)(state.value).toString();\n        else dateValue = (0, $9FtGl$toCalendarDateTime)('timeZone' in state.value ? (0, $9FtGl$toLocalTimeZone)(state.value) : state.value).toString();\n    }\n    let inputType = state.granularity === 'day' ? 'date' : 'datetime-local';\n    let timeSegments = [\n        'hour',\n        'minute',\n        'second'\n    ];\n    // Depending on the granularity, we only want to validate certain time segments\n    let end = 0;\n    if (timeSegments.includes(state.granularity)) {\n        end = $5a15223dacad897a$var$granularityMap[state.granularity];\n        timeSegments = timeSegments.slice(0, end);\n    }\n    return {\n        containerProps: {\n            ...visuallyHiddenProps,\n            'aria-hidden': true,\n            // @ts-ignore\n            ['data-react-aria-prevent-focus']: true,\n            // @ts-ignore\n            ['data-a11y-ignore']: 'aria-hidden-focus'\n        },\n        inputProps: {\n            tabIndex: -1,\n            autoComplete: autoComplete,\n            disabled: isDisabled,\n            type: inputType,\n            // We set the form prop to an empty string to prevent the hidden date input's value from being submitted\n            form: '',\n            name: name,\n            step: inputStep,\n            value: dateValue,\n            onChange: (e)=>{\n                let targetString = (0, $9FtGl$getEventTarget)(e).value.toString();\n                if (targetString) try {\n                    let targetValue = (0, $9FtGl$parseDateTime)(targetString);\n                    if (state.granularity === 'day') targetValue = (0, $9FtGl$parseDate)(targetString);\n                    // We check to to see if setSegment exists in the state since it only exists in DateFieldState and not DatePickerState.\n                    // The setValue method has different behavior depending on if it's coming from DateFieldState or DatePickerState.\n                    // In DateFieldState, setValue firsts checks to make sure that each segment is filled before committing the newValue\n                    // which is why in the code below we first set each segment to validate it before committing the new value.\n                    // However, in DatePickerState, since we have to be able to commit values from the Calendar popover, we are also able to\n                    // set a new value when the field itself is empty.\n                    if ('setSegment' in state) for(let type in targetValue){\n                        // eslint-disable-next-line max-depth\n                        if ($5a15223dacad897a$var$dateSegments.includes(type)) state.setSegment(type, targetValue[type]);\n                        // eslint-disable-next-line max-depth\n                        if (timeSegments.includes(type)) state.setSegment(type, targetValue[type]);\n                    }\n                    state.setValue(targetValue);\n                } catch  {\n                // ignore\n                }\n            }\n        }\n    };\n}\nfunction $5a15223dacad897a$export$eefa3e19139f00f3(props) {\n    let { state: state } = props;\n    let { containerProps: containerProps, inputProps: inputProps } = $5a15223dacad897a$export$f6a685cd1acbd1fa({\n        ...props\n    }, state);\n    return /*#__PURE__*/ (0, $9FtGl$react).createElement(\"div\", {\n        ...containerProps,\n        \"data-testid\": \"hidden-dateinput-container\"\n    }, /*#__PURE__*/ (0, $9FtGl$react).createElement(\"input\", inputProps));\n}\n\n\nexport {$5a15223dacad897a$export$f6a685cd1acbd1fa as useHiddenDateInput, $5a15223dacad897a$export$eefa3e19139f00f3 as HiddenDateInput};\n//# sourceMappingURL=HiddenDateInput.mjs.map\n","var $f55b2b490fefc83f$exports = {};\n$f55b2b490fefc83f$exports = {\n    \"era\": `era`,\n    \"year\": `year`,\n    \"month\": `month`,\n    \"day\": `day`,\n    \"hour\": `hour`,\n    \"minute\": `minute`,\n    \"second\": `second`,\n    \"dayPeriod\": `AM/PM`,\n    \"calendar\": `Calendar`,\n    \"startDate\": `Start Date`,\n    \"endDate\": `End Date`,\n    \"weekday\": `day of the week`,\n    \"timeZoneName\": `time zone`,\n    \"selectedDateDescription\": (args)=>`Selected Date: ${args.date}`,\n    \"selectedRangeDescription\": (args)=>`Selected Range: ${args.startDate} to ${args.endDate}`,\n    \"selectedTimeDescription\": (args)=>`Selected Time: ${args.time}`\n};\n\n\nexport {$f55b2b490fefc83f$exports as default};\n//# sourceMappingURL=en-US.mjs.map\n","import $645EV$intldatepickerarAEmjs from \"../intl/datepicker/ar-AE.mjs\";\nimport $645EV$intldatepickerbgBGmjs from \"../intl/datepicker/bg-BG.mjs\";\nimport $645EV$intldatepickercsCZmjs from \"../intl/datepicker/cs-CZ.mjs\";\nimport $645EV$intldatepickerdaDKmjs from \"../intl/datepicker/da-DK.mjs\";\nimport $645EV$intldatepickerdeDEmjs from \"../intl/datepicker/de-DE.mjs\";\nimport $645EV$intldatepickerelGRmjs from \"../intl/datepicker/el-GR.mjs\";\nimport $645EV$intldatepickerenUSmjs from \"../intl/datepicker/en-US.mjs\";\nimport $645EV$intldatepickeresESmjs from \"../intl/datepicker/es-ES.mjs\";\nimport $645EV$intldatepickeretEEmjs from \"../intl/datepicker/et-EE.mjs\";\nimport $645EV$intldatepickerfiFImjs from \"../intl/datepicker/fi-FI.mjs\";\nimport $645EV$intldatepickerfrFRmjs from \"../intl/datepicker/fr-FR.mjs\";\nimport $645EV$intldatepickerheILmjs from \"../intl/datepicker/he-IL.mjs\";\nimport $645EV$intldatepickerhrHRmjs from \"../intl/datepicker/hr-HR.mjs\";\nimport $645EV$intldatepickerhuHUmjs from \"../intl/datepicker/hu-HU.mjs\";\nimport $645EV$intldatepickeritITmjs from \"../intl/datepicker/it-IT.mjs\";\nimport $645EV$intldatepickerjaJPmjs from \"../intl/datepicker/ja-JP.mjs\";\nimport $645EV$intldatepickerkoKRmjs from \"../intl/datepicker/ko-KR.mjs\";\nimport $645EV$intldatepickerltLTmjs from \"../intl/datepicker/lt-LT.mjs\";\nimport $645EV$intldatepickerlvLVmjs from \"../intl/datepicker/lv-LV.mjs\";\nimport $645EV$intldatepickernbNOmjs from \"../intl/datepicker/nb-NO.mjs\";\nimport $645EV$intldatepickernlNLmjs from \"../intl/datepicker/nl-NL.mjs\";\nimport $645EV$intldatepickerplPLmjs from \"../intl/datepicker/pl-PL.mjs\";\nimport $645EV$intldatepickerptBRmjs from \"../intl/datepicker/pt-BR.mjs\";\nimport $645EV$intldatepickerptPTmjs from \"../intl/datepicker/pt-PT.mjs\";\nimport $645EV$intldatepickerroROmjs from \"../intl/datepicker/ro-RO.mjs\";\nimport $645EV$intldatepickerruRUmjs from \"../intl/datepicker/ru-RU.mjs\";\nimport $645EV$intldatepickerskSKmjs from \"../intl/datepicker/sk-SK.mjs\";\nimport $645EV$intldatepickerslSImjs from \"../intl/datepicker/sl-SI.mjs\";\nimport $645EV$intldatepickersrSPmjs from \"../intl/datepicker/sr-SP.mjs\";\nimport $645EV$intldatepickersvSEmjs from \"../intl/datepicker/sv-SE.mjs\";\nimport $645EV$intldatepickertrTRmjs from \"../intl/datepicker/tr-TR.mjs\";\nimport $645EV$intldatepickerukUAmjs from \"../intl/datepicker/uk-UA.mjs\";\nimport $645EV$intldatepickerzhCNmjs from \"../intl/datepicker/zh-CN.mjs\";\nimport $645EV$intldatepickerzhTWmjs from \"../intl/datepicker/zh-TW.mjs\";\n\nvar $0014db39426443c5$exports = {};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$0014db39426443c5$exports = {\n    \"ar-AE\": $645EV$intldatepickerarAEmjs,\n    \"bg-BG\": $645EV$intldatepickerbgBGmjs,\n    \"cs-CZ\": $645EV$intldatepickercsCZmjs,\n    \"da-DK\": $645EV$intldatepickerdaDKmjs,\n    \"de-DE\": $645EV$intldatepickerdeDEmjs,\n    \"el-GR\": $645EV$intldatepickerelGRmjs,\n    \"en-US\": $645EV$intldatepickerenUSmjs,\n    \"es-ES\": $645EV$intldatepickeresESmjs,\n    \"et-EE\": $645EV$intldatepickeretEEmjs,\n    \"fi-FI\": $645EV$intldatepickerfiFImjs,\n    \"fr-FR\": $645EV$intldatepickerfrFRmjs,\n    \"he-IL\": $645EV$intldatepickerheILmjs,\n    \"hr-HR\": $645EV$intldatepickerhrHRmjs,\n    \"hu-HU\": $645EV$intldatepickerhuHUmjs,\n    \"it-IT\": $645EV$intldatepickeritITmjs,\n    \"ja-JP\": $645EV$intldatepickerjaJPmjs,\n    \"ko-KR\": $645EV$intldatepickerkoKRmjs,\n    \"lt-LT\": $645EV$intldatepickerltLTmjs,\n    \"lv-LV\": $645EV$intldatepickerlvLVmjs,\n    \"nb-NO\": $645EV$intldatepickernbNOmjs,\n    \"nl-NL\": $645EV$intldatepickernlNLmjs,\n    \"pl-PL\": $645EV$intldatepickerplPLmjs,\n    \"pt-BR\": $645EV$intldatepickerptBRmjs,\n    \"pt-PT\": $645EV$intldatepickerptPTmjs,\n    \"ro-RO\": $645EV$intldatepickerroROmjs,\n    \"ru-RU\": $645EV$intldatepickerruRUmjs,\n    \"sk-SK\": $645EV$intldatepickerskSKmjs,\n    \"sl-SI\": $645EV$intldatepickerslSImjs,\n    \"sr-SP\": $645EV$intldatepickersrSPmjs,\n    \"sv-SE\": $645EV$intldatepickersvSEmjs,\n    \"tr-TR\": $645EV$intldatepickertrTRmjs,\n    \"uk-UA\": $645EV$intldatepickerukUAmjs,\n    \"zh-CN\": $645EV$intldatepickerzhCNmjs,\n    \"zh-TW\": $645EV$intldatepickerzhTWmjs\n};\n\n\nexport {$0014db39426443c5$exports as default};\n//# sourceMappingURL=intlStrings.mjs.map\n","import {createFocusManager as $535772f9d2c1f38d$export$c5251b9e124bf29, getFocusableTreeWalker as $535772f9d2c1f38d$export$2d6ec8fc375ceafa} from \"../focus/FocusScope.mjs\";\nimport {getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {useKeyboard as $8296dad1a4c5e0dc$export$8f71654801c2f7cd} from \"../interactions/useKeyboard.mjs\";\nimport {useLocale as $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7} from \"../i18n/I18nProvider.mjs\";\nimport {usePress as $d27d541f9569d26d$export$45712eceda6fad21} from \"../interactions/usePress.mjs\";\nimport {useMemo as $855dK$useMemo} from \"react\";\n\n\n\n\n\n\n\n\nfunction $6a440d0e2d99dd46$export$4a931266a3838b86(state, ref, disableArrowNavigation) {\n    let { direction: direction } = (0, $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7)();\n    // oxlint-disable-next-line react/react-compiler\n    let focusManager = (0, $855dK$useMemo)(()=>(0, $535772f9d2c1f38d$export$c5251b9e124bf29)(ref), [\n        ref\n    ]);\n    let { keyboardProps: keyboardProps } = (0, $8296dad1a4c5e0dc$export$8f71654801c2f7cd)({\n        shortcuts: {\n            'Alt+ArrowDown': ()=>{\n                if ('setOpen' in state) {\n                    state.setOpen(true);\n                    return;\n                }\n                return false;\n            },\n            'Alt+ArrowUp': ()=>{\n                if ('setOpen' in state) {\n                    state.setOpen(true);\n                    return;\n                }\n                return false;\n            },\n            ArrowLeft: (e)=>{\n                if (disableArrowNavigation) return false;\n                if (direction === 'rtl') {\n                    if (ref.current) {\n                        let target = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n                        let prev = $6a440d0e2d99dd46$var$findNextSegment(ref.current, target.getBoundingClientRect().left, -1);\n                        if (prev) {\n                            prev.focus();\n                            return;\n                        }\n                    }\n                } else {\n                    focusManager.focusPrevious();\n                    return;\n                }\n                return false;\n            },\n            ArrowRight: (e)=>{\n                if (disableArrowNavigation) return false;\n                if (direction === 'rtl') {\n                    if (ref.current) {\n                        let target = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n                        let next = $6a440d0e2d99dd46$var$findNextSegment(ref.current, target.getBoundingClientRect().left, 1);\n                        if (next) {\n                            next.focus();\n                            return;\n                        }\n                    }\n                } else {\n                    focusManager.focusNext();\n                    return;\n                }\n                return false;\n            }\n        },\n        allowRepeats: true\n    });\n    // Focus the first placeholder segment from the end on mouse down/touch up in the field.\n    let focusLast = ()=>{\n        if (!ref.current) return;\n        // Try to find the segment prior to the element that was clicked on.\n        let target = window.event ? (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(window.event) : null;\n        let walker = (0, $535772f9d2c1f38d$export$2d6ec8fc375ceafa)(ref.current, {\n            tabbable: true\n        });\n        if (target) {\n            walker.currentNode = target;\n            target = walker.previousNode();\n        }\n        // If no target found, find the last element from the end.\n        if (!target) {\n            let last;\n            do {\n                last = walker.lastChild();\n                if (last) target = last;\n            }while (last);\n        }\n        // Now go backwards until we find an element that is not a placeholder.\n        while(target?.hasAttribute('data-placeholder')){\n            let prev = walker.previousNode();\n            if (prev && prev.hasAttribute('data-placeholder')) target = prev;\n            else break;\n        }\n        if (target) target.focus();\n    };\n    let { pressProps: pressProps } = (0, $d27d541f9569d26d$export$45712eceda6fad21)({\n        preventFocusOnPress: true,\n        allowTextSelectionOnPress: true,\n        onPressStart (e) {\n            if (e.pointerType === 'mouse') focusLast();\n        },\n        onPress (e) {\n            if (e.pointerType === 'touch' || e.pointerType === 'pen') focusLast();\n        }\n    });\n    // oxlint-disable-next-line react/react-compiler\n    return (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(pressProps, keyboardProps);\n}\nfunction $6a440d0e2d99dd46$var$findNextSegment(group, fromX, direction) {\n    let walker = (0, $535772f9d2c1f38d$export$2d6ec8fc375ceafa)(group, {\n        tabbable: true\n    });\n    let node = walker.nextNode();\n    let closest = null;\n    let closestDistance = Infinity;\n    while(node){\n        let x = node.getBoundingClientRect().left;\n        let distance = x - fromX;\n        let absoluteDistance = Math.abs(distance);\n        if (Math.sign(distance) === direction && absoluteDistance < closestDistance) {\n            closest = node;\n            closestDistance = absoluteDistance;\n        }\n        node = walker.nextNode();\n    }\n    return closest;\n}\n\n\nexport {$6a440d0e2d99dd46$export$4a931266a3838b86 as useDatePickerGroup};\n//# sourceMappingURL=useDatePickerGroup.mjs.map\n","import {createFocusManager as $535772f9d2c1f38d$export$c5251b9e124bf29} from \"../focus/FocusScope.mjs\";\nimport {filterDOMProps as $8e9d2fae0ecb9001$export$457c3d6518dd4c6f} from \"../utils/filterDOMProps.mjs\";\nimport $GVr02$intlStringsmjs from \"./intlStrings.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {useDatePickerGroup as $6a440d0e2d99dd46$export$4a931266a3838b86} from \"./useDatePickerGroup.mjs\";\nimport {useDescription as $121970af65029459$export$f8aeda7b10753fa1} from \"../utils/useDescription.mjs\";\nimport {useField as $191c9b6d48a0a4e2$export$294aa081a6c6f55d} from \"../label/useField.mjs\";\nimport {useFocusWithin as $2c9edc598a03d523$export$420e68273165f4ec} from \"../interactions/useFocusWithin.mjs\";\nimport {useFormReset as $3274bf1495747a7b$export$5add1d006293d136} from \"../utils/useFormReset.mjs\";\nimport {useFormValidation as $860f7da480e22816$export$b8473d3665f3a75a} from \"../form/useFormValidation.mjs\";\nimport {useLocalizedStringFormatter as $cf2482eff2eeeec2$export$f12b703ca79dfbb1} from \"../i18n/useLocalizedStringFormatter.mjs\";\nimport {useRef as $GVr02$useRef, useMemo as $GVr02$useMemo, useEffect as $GVr02$useEffect} from \"react\";\n\n\nfunction $parcel$interopDefault(a) {\n  return a && a.__esModule ? a.default : a;\n}\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\n\nconst $7541913c0284d84b$export$653eddfc964b0f8a = new WeakMap();\nconst $7541913c0284d84b$export$300019f83c56d282 = '__reactAriaDateFieldRole';\nconst $7541913c0284d84b$export$7b3062cd49e80452 = '__reactAriaDateFieldFocusManager';\nfunction $7541913c0284d84b$export$5591b0b878c1a989(props, state, ref) {\n    let { isInvalid: isInvalid, validationErrors: validationErrors, validationDetails: validationDetails } = state.displayValidation;\n    let { labelProps: labelProps, fieldProps: fieldProps, descriptionProps: descriptionProps, errorMessageProps: errorMessageProps } = (0, $191c9b6d48a0a4e2$export$294aa081a6c6f55d)({\n        ...props,\n        labelElementType: 'span',\n        isInvalid: isInvalid,\n        errorMessage: props.errorMessage || validationErrors\n    });\n    let valueOnFocus = (0, $GVr02$useRef)(null);\n    let { focusWithinProps: focusWithinProps } = (0, $2c9edc598a03d523$export$420e68273165f4ec)({\n        ...props,\n        onFocusWithin (e) {\n            valueOnFocus.current = state.value;\n            props.onFocus?.(e);\n        },\n        onBlurWithin: (e)=>{\n            state.confirmPlaceholder();\n            if (state.value !== valueOnFocus.current) state.commitValidation();\n            props.onBlur?.(e);\n        },\n        onFocusWithinChange: props.onFocusChange\n    });\n    let stringFormatter = (0, $cf2482eff2eeeec2$export$f12b703ca79dfbb1)((0, ($parcel$interopDefault($GVr02$intlStringsmjs))), '@react-aria/datepicker');\n    let message = state.maxGranularity === 'hour' ? 'selectedTimeDescription' : 'selectedDateDescription';\n    let field = state.maxGranularity === 'hour' ? 'time' : 'date';\n    let description = state.value ? stringFormatter.format(message, {\n        [field]: state.formatValue({\n            month: 'long'\n        })\n    }) : '';\n    let descProps = (0, $121970af65029459$export$f8aeda7b10753fa1)(description);\n    // If within a date picker or date range picker, the date field will have role=\"presentation\" and an aria-describedby\n    // will be passed in that references the value (e.g. entire range). Otherwise, add the field's value description.\n    let describedBy = props[$7541913c0284d84b$export$300019f83c56d282] === 'presentation' ? fieldProps['aria-describedby'] : [\n        descProps['aria-describedby'],\n        fieldProps['aria-describedby']\n    ].filter(Boolean).join(' ') || undefined;\n    let propsFocusManager = props[$7541913c0284d84b$export$7b3062cd49e80452];\n    let focusManager = (0, $GVr02$useMemo)(()=>propsFocusManager || (0, $535772f9d2c1f38d$export$c5251b9e124bf29)(ref), [\n        propsFocusManager,\n        ref\n    ]);\n    let groupProps = (0, $6a440d0e2d99dd46$export$4a931266a3838b86)(state, ref, props[$7541913c0284d84b$export$300019f83c56d282] === 'presentation');\n    // Pass labels and other information to segments.\n    $7541913c0284d84b$export$653eddfc964b0f8a.set(state, {\n        ariaLabel: props['aria-label'],\n        ariaLabelledBy: [\n            labelProps.id,\n            props['aria-labelledby']\n        ].filter(Boolean).join(' ') || undefined,\n        ariaDescribedBy: describedBy,\n        focusManager: focusManager\n    });\n    let autoFocusRef = (0, $GVr02$useRef)(props.autoFocus);\n    // When used within a date picker or date range picker, the field gets role=\"presentation\"\n    // rather than role=\"group\". Since the date picker/date range picker already has a role=\"group\"\n    // with a label and description, and the segments are already labeled by this as well, this\n    // avoids very verbose duplicate announcements.\n    let fieldDOMProps;\n    if (props[$7541913c0284d84b$export$300019f83c56d282] === 'presentation') fieldDOMProps = {\n        role: 'presentation'\n    };\n    else fieldDOMProps = (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(fieldProps, {\n        role: 'group',\n        'aria-disabled': props.isDisabled || undefined,\n        'aria-describedby': describedBy\n    });\n    (0, $GVr02$useEffect)(()=>{\n        if (autoFocusRef.current) focusManager.focusFirst();\n        autoFocusRef.current = false;\n    }, [\n        focusManager\n    ]);\n    (0, $3274bf1495747a7b$export$5add1d006293d136)(props.inputRef, state.defaultValue, state.setValue);\n    (0, $860f7da480e22816$export$b8473d3665f3a75a)({\n        ...props,\n        focus () {\n            focusManager.focusFirst();\n        }\n    }, state, props.inputRef);\n    let inputProps = {\n        type: 'hidden',\n        name: props.name,\n        form: props.form,\n        value: state.value?.toString() || '',\n        disabled: props.isDisabled\n    };\n    if (props.validationBehavior === 'native') {\n        // Use a hidden <input type=\"text\"> rather than <input type=\"hidden\">\n        // so that an empty value blocks HTML form submission when the field is required.\n        inputProps.type = 'text';\n        inputProps.hidden = true;\n        inputProps.required = props.isRequired;\n        // Ignore react warning.\n        inputProps.onChange = ()=>{};\n    }\n    let domProps = (0, $8e9d2fae0ecb9001$export$457c3d6518dd4c6f)(props);\n    return {\n        labelProps: {\n            ...labelProps,\n            onClick: ()=>{\n                focusManager.focusFirst();\n            }\n        },\n        fieldProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(domProps, fieldDOMProps, groupProps, focusWithinProps, {\n            onKeyDown: props.onKeyDown,\n            onKeyUp: props.onKeyUp,\n            style: {\n                unicodeBidi: 'isolate'\n            }\n        }),\n        inputProps: inputProps,\n        descriptionProps: descriptionProps,\n        errorMessageProps: errorMessageProps,\n        isInvalid: isInvalid,\n        validationErrors: validationErrors,\n        validationDetails: validationDetails\n    };\n}\nfunction $7541913c0284d84b$export$4c842f6a241dc825(props, state, ref) {\n    let res = $7541913c0284d84b$export$5591b0b878c1a989(props, state, ref);\n    // oxlint-disable-next-line react/react-compiler\n    res.inputProps.value = state.timeValue?.toString() || '';\n    return res;\n}\n\n\nexport {$7541913c0284d84b$export$653eddfc964b0f8a as hookData, $7541913c0284d84b$export$300019f83c56d282 as roleSymbol, $7541913c0284d84b$export$7b3062cd49e80452 as focusManagerSymbol, $7541913c0284d84b$export$5591b0b878c1a989 as useDateField, $7541913c0284d84b$export$4c842f6a241dc825 as useTimeField};\n//# sourceMappingURL=useDateField.mjs.map\n","import $5vIuz$intlStringsmjs from \"./intlStrings.mjs\";\nimport {useLocale as $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7} from \"../i18n/I18nProvider.mjs\";\nimport {useLocalizedStringDictionary as $cf2482eff2eeeec2$export$87b761675e8eaa10} from \"../i18n/useLocalizedStringFormatter.mjs\";\nimport {useMemo as $5vIuz$useMemo} from \"react\";\n\n\nfunction $parcel$interopDefault(a) {\n  return a && a.__esModule ? a.default : a;\n}\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nfunction $40cf8faa4dad0740$export$d42c60378c8168f8() {\n    let { locale: locale } = (0, $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7)();\n    let dictionary = (0, $cf2482eff2eeeec2$export$87b761675e8eaa10)((0, ($parcel$interopDefault($5vIuz$intlStringsmjs))), '@react-aria/datepicker');\n    return (0, $5vIuz$useMemo)(()=>{\n        // Try to use Intl.DisplayNames if possible. It may be supported in browsers, but not support the dateTimeField\n        // type as that was only added in v2. https://github.com/tc39/intl-displaynames-v2\n        try {\n            return new Intl.DisplayNames(locale, {\n                type: 'dateTimeField'\n            });\n        } catch  {\n            return new $40cf8faa4dad0740$var$DisplayNamesPolyfill(locale, dictionary);\n        }\n    }, [\n        locale,\n        dictionary\n    ]);\n}\nclass $40cf8faa4dad0740$var$DisplayNamesPolyfill {\n    constructor(locale, dictionary){\n        this.locale = locale;\n        this.dictionary = dictionary;\n    }\n    of(field) {\n        return this.dictionary.getStringForLocale(field, this.locale);\n    }\n}\n\n\nexport {$40cf8faa4dad0740$export$d42c60378c8168f8 as useDisplayNames};\n//# sourceMappingURL=useDisplayNames.mjs.map\n","import {getActiveElement as $23f2114a1b82827e$export$cd4e5573fbe2b576, nodeContains as $23f2114a1b82827e$export$4282f70798064fe0} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {getScrollParent as $3578607fe3d4b096$export$cfa2225e87938781} from \"../utils/getScrollParent.mjs\";\nimport {hookData as $7541913c0284d84b$export$653eddfc964b0f8a} from \"./useDateField.mjs\";\nimport {isIOS as $2add3ce32c6007eb$export$fedb369cb70207f1} from \"../utils/platform.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {scrollIntoViewport as $51a3e22a5186a962$export$c826860796309d1b} from \"../utils/scrollIntoView.mjs\";\nimport {useDateFormatter as $60f33508b4cd9d3b$export$85fd5fdf27bacc79} from \"../i18n/useDateFormatter.mjs\";\nimport {useDisplayNames as $40cf8faa4dad0740$export$d42c60378c8168f8} from \"./useDisplayNames.mjs\";\nimport {useEvent as $600b3cf69ae46262$export$90fc3a17d93f704c} from \"../utils/useEvent.mjs\";\nimport {useFilter as $ef182bb9912241d8$export$3274cf84b703fff} from \"../i18n/useFilter.mjs\";\nimport {useId as $390e54f620492c70$export$f680877a34711e37} from \"../utils/useId.mjs\";\nimport {useKeyboard as $8296dad1a4c5e0dc$export$8f71654801c2f7cd} from \"../interactions/useKeyboard.mjs\";\nimport {useLabels as $e8ac3c3f5d4bae7f$export$d6875122194c7b44} from \"../utils/useLabels.mjs\";\nimport {useLayoutEffect as $c4867b2f328c2698$export$e5c5a5f917a5871c} from \"../utils/useLayoutEffect.mjs\";\nimport {useLocale as $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7} from \"../i18n/I18nProvider.mjs\";\nimport {useSpinButton as $757ec6630f26125c$export$e908e06f4b8e3402} from \"../spinbutton/useSpinButton.mjs\";\nimport {toCalendar as $dk9mG$toCalendar, CalendarDate as $dk9mG$CalendarDate} from \"@internationalized/date\";\nimport {NumberParser as $dk9mG$NumberParser} from \"@internationalized/number\";\nimport $dk9mG$react, {useRef as $dk9mG$useRef, useMemo as $dk9mG$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction $d51706f903be7eab$export$1315d136e6f7581(segment, state, ref) {\n    let enteredKeys = (0, $dk9mG$useRef)('');\n    let { locale: locale, direction: direction } = (0, $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7)();\n    let displayNames = (0, $40cf8faa4dad0740$export$d42c60378c8168f8)();\n    let { ariaLabel: ariaLabel, ariaLabelledBy: ariaLabelledBy, ariaDescribedBy: ariaDescribedBy, focusManager: focusManager } = (0, $7541913c0284d84b$export$653eddfc964b0f8a).get(state);\n    let textValue = segment.isPlaceholder ? '' : segment.text;\n    let options = (0, $dk9mG$useMemo)(()=>state.dateFormatter.resolvedOptions(), [\n        state.dateFormatter\n    ]);\n    let monthDateFormatter = (0, $60f33508b4cd9d3b$export$85fd5fdf27bacc79)({\n        month: 'long',\n        timeZone: options.timeZone\n    });\n    let hourDateFormatter = (0, $60f33508b4cd9d3b$export$85fd5fdf27bacc79)({\n        hour: 'numeric',\n        hour12: options.hour12,\n        timeZone: options.timeZone\n    });\n    if (segment.type === 'month' && !segment.isPlaceholder) {\n        let monthTextValue = monthDateFormatter.format(state.dateValue);\n        textValue = monthTextValue !== textValue ? `${textValue} \\u{2013} ${monthTextValue}` : monthTextValue;\n    } else if (segment.type === 'hour' && !segment.isPlaceholder) textValue = hourDateFormatter.format(state.dateValue);\n    let { spinButtonProps: spinButtonProps } = (0, $757ec6630f26125c$export$e908e06f4b8e3402)({\n        // The ARIA spec says aria-valuenow is optional if there's no value, but aXe seems to require it.\n        // This doesn't seem to have any negative effects with real AT since we also use aria-valuetext.\n        // https://github.com/dequelabs/axe-core/issues/3505\n        value: segment.value ?? undefined,\n        textValue: textValue,\n        minValue: segment.minValue,\n        maxValue: segment.maxValue,\n        isDisabled: state.isDisabled,\n        isReadOnly: state.isReadOnly || !segment.isEditable,\n        isRequired: state.isRequired,\n        onIncrement: ()=>{\n            enteredKeys.current = '';\n            state.increment(segment.type);\n        },\n        onDecrement: ()=>{\n            enteredKeys.current = '';\n            state.decrement(segment.type);\n        },\n        onIncrementPage: ()=>{\n            enteredKeys.current = '';\n            state.incrementPage(segment.type);\n        },\n        onDecrementPage: ()=>{\n            enteredKeys.current = '';\n            state.decrementPage(segment.type);\n        },\n        onIncrementToMax: ()=>{\n            enteredKeys.current = '';\n            state.incrementToMax(segment.type);\n        },\n        onDecrementToMin: ()=>{\n            enteredKeys.current = '';\n            state.decrementToMin(segment.type);\n        }\n    });\n    let parser = (0, $dk9mG$useMemo)(()=>new (0, $dk9mG$NumberParser)(locale, {\n            maximumFractionDigits: 0\n        }), [\n        locale\n    ]);\n    let backspace = ()=>{\n        if (segment.text === segment.placeholder) focusManager.focusPrevious();\n        if (parser.isValidPartialNumber(segment.text) && !state.isReadOnly && !segment.isPlaceholder) {\n            let newValue = segment.text.slice(0, -1);\n            let parsed = parser.parse(newValue);\n            newValue = parsed === 0 ? '' : newValue;\n            if (newValue.length === 0 || parsed === 0) state.clearSegment(segment.type);\n            else state.setSegment(segment.type, parsed);\n            enteredKeys.current = newValue;\n        } else if (segment.type === 'dayPeriod' || segment.type === 'era') state.clearSegment(segment.type);\n    };\n    let { keyboardProps: keyboardProps } = (0, $8296dad1a4c5e0dc$export$8f71654801c2f7cd)({\n        shortcuts: {\n            Backspace: ()=>{\n                backspace();\n            },\n            Delete: ()=>{\n                backspace();\n            },\n            'Mod+a': ()=>{\n            // Firefox does not fire selectstart for Ctrl/Cmd + A\n            // https://bugzilla.mozilla.org/show_bug.cgi?id=1742153\n            }\n        },\n        allowRepeats: true\n    });\n    // Safari dayPeriod option doesn't work...\n    let { startsWith: startsWith } = (0, $ef182bb9912241d8$export$3274cf84b703fff)({\n        sensitivity: 'base'\n    });\n    let amPmFormatter = (0, $60f33508b4cd9d3b$export$85fd5fdf27bacc79)({\n        hour: 'numeric',\n        hour12: true\n    });\n    let am = (0, $dk9mG$useMemo)(()=>{\n        let date = new Date();\n        date.setHours(0);\n        return amPmFormatter.formatToParts(date).find((part)=>part.type === 'dayPeriod').value;\n    }, [\n        amPmFormatter\n    ]);\n    let pm = (0, $dk9mG$useMemo)(()=>{\n        let date = new Date();\n        date.setHours(12);\n        return amPmFormatter.formatToParts(date).find((part)=>part.type === 'dayPeriod').value;\n    }, [\n        amPmFormatter\n    ]);\n    // Get a list of formatted era names so users can type the first character to choose one.\n    let eraFormatter = (0, $60f33508b4cd9d3b$export$85fd5fdf27bacc79)({\n        year: 'numeric',\n        era: 'narrow',\n        timeZone: 'UTC'\n    });\n    let eras = (0, $dk9mG$useMemo)(()=>{\n        if (segment.type !== 'era') return [];\n        let date = (0, $dk9mG$toCalendar)(new (0, $dk9mG$CalendarDate)(1, 1, 1), state.calendar);\n        let eras = state.calendar.getEras().map((era)=>{\n            let eraDate = date.set({\n                year: 1,\n                month: 1,\n                day: 1,\n                era: era\n            }).toDate('UTC');\n            let parts = eraFormatter.formatToParts(eraDate);\n            // Some eras have no localized name in CLDR (e.g. the Coptic 'BCE' era), in which case\n            // Intl omits the era part entirely. Fall back to the era identifier so it stays typeable.\n            let formatted = parts.find((p)=>p.type === 'era')?.value ?? era;\n            return {\n                era: era,\n                formatted: formatted\n            };\n        });\n        // Remove the common prefix from formatted values. This is so that in calendars with eras like\n        // ERA0 and ERA1 (e.g. Ethiopic), users can press \"0\" and \"1\" to select an era. In other cases,\n        // the first letter is used.\n        let prefixLength = $d51706f903be7eab$var$commonPrefixLength(eras.map((era)=>era.formatted));\n        if (prefixLength) for (let era of eras)era.formatted = era.formatted.slice(prefixLength);\n        return eras;\n    }, [\n        eraFormatter,\n        state.calendar,\n        segment.type\n    ]);\n    let onInput = (key)=>{\n        if (state.isDisabled || state.isReadOnly) return;\n        let newValue = enteredKeys.current + key;\n        switch(segment.type){\n            case 'dayPeriod':\n                if (startsWith(am, key)) state.setSegment('dayPeriod', 0);\n                else if (startsWith(pm, key)) state.setSegment('dayPeriod', 1);\n                else break;\n                focusManager.focusNext();\n                break;\n            case 'era':\n                {\n                    let matched = eras.find((e)=>startsWith(e.formatted, key));\n                    if (matched) {\n                        state.setSegment('era', matched.era);\n                        focusManager.focusNext();\n                    }\n                    break;\n                }\n            case 'day':\n            case 'hour':\n            case 'minute':\n            case 'second':\n            case 'month':\n            case 'year':\n                {\n                    if (!parser.isValidPartialNumber(newValue)) return;\n                    let numberValue = parser.parse(newValue);\n                    let segmentValue = numberValue;\n                    if (segment.maxValue !== undefined && numberValue > segment.maxValue) segmentValue = parser.parse(key);\n                    if (isNaN(numberValue)) return;\n                    state.setSegment(segment.type, segmentValue);\n                    if (segment.maxValue !== undefined && (Number(numberValue + '0') > segment.maxValue || newValue.length >= String(segment.maxValue).length)) {\n                        enteredKeys.current = '';\n                        focusManager.focusNext();\n                    } else enteredKeys.current = newValue;\n                    break;\n                }\n        }\n    };\n    let onFocus = ()=>{\n        enteredKeys.current = '';\n        if (ref.current) (0, $51a3e22a5186a962$export$c826860796309d1b)(ref.current, {\n            containingElement: (0, $3578607fe3d4b096$export$cfa2225e87938781)(ref.current)\n        });\n        // Collapse selection to start or Chrome won't fire input events.\n        let selection = window.getSelection();\n        selection?.collapse(ref.current);\n    };\n    let documentRef = (0, $dk9mG$useRef)(typeof document !== 'undefined' ? document : null);\n    (0, $600b3cf69ae46262$export$90fc3a17d93f704c)(documentRef, 'selectionchange', ()=>{\n        // Enforce that the selection is collapsed when inside a date segment.\n        // Otherwise, when tapping on a segment in Android Chrome and then entering text,\n        // composition events will be fired that break the DOM structure and crash the page.\n        let selection = window.getSelection();\n        // Only collapse while focused, otherwise a stale anchor left in the segment (e.g. on Firefox)\n        // steals focus back into it on selectionchange. See #10259.\n        if (selection?.anchorNode && (0, $23f2114a1b82827e$export$4282f70798064fe0)(ref.current, selection?.anchorNode) && (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)() === ref.current) selection.collapse(ref.current);\n    });\n    let compositionRef = (0, $dk9mG$useRef)('');\n    (0, $600b3cf69ae46262$export$90fc3a17d93f704c)(ref, 'beforeinput', (e)=>{\n        if (!ref.current) return;\n        e.preventDefault();\n        switch(e.inputType){\n            case 'deleteContentBackward':\n            case 'deleteContentForward':\n                if (parser.isValidPartialNumber(segment.text) && !state.isReadOnly) backspace();\n                break;\n            case 'insertCompositionText':\n                // insertCompositionText cannot be canceled.\n                // Record the current state of the element so we can restore it in the `input` event below.\n                compositionRef.current = ref.current.textContent;\n                // Safari gets stuck in a composition state unless we also assign to the value here.\n                // eslint-disable-next-line no-self-assign\n                ref.current.textContent = ref.current.textContent;\n                break;\n            default:\n                if (e.data != null) onInput(e.data);\n                break;\n        }\n    });\n    (0, $600b3cf69ae46262$export$90fc3a17d93f704c)(ref, 'input', (e)=>{\n        let { inputType: inputType, data: data } = e;\n        switch(inputType){\n            case 'insertCompositionText':\n                // Reset the DOM to how it was in the beforeinput event.\n                if (ref.current) ref.current.textContent = compositionRef.current;\n                // Android sometimes fires key presses of letters as composition events. Need to handle am/pm keys here too.\n                // Can also happen e.g. with Pinyin keyboard on iOS.\n                if (data != null && (startsWith(am, data) || startsWith(pm, data))) onInput(data);\n                break;\n        }\n    });\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        let element = ref.current;\n        return ()=>{\n            // If the focused segment is removed, focus the previous one, or the next one if there was no previous one.\n            if ((0, $23f2114a1b82827e$export$cd4e5573fbe2b576)() === element) {\n                let prev = focusManager.focusPrevious();\n                if (!prev) focusManager.focusNext();\n            }\n        };\n    }, [\n        ref,\n        focusManager\n    ]);\n    // spinbuttons cannot be focused with VoiceOver on iOS.\n    let touchPropOverrides = (0, $2add3ce32c6007eb$export$fedb369cb70207f1)() || segment.type === 'timeZoneName' ? {\n        role: 'textbox',\n        'aria-valuemax': null,\n        'aria-valuemin': null,\n        'aria-valuetext': null,\n        'aria-valuenow': null\n    } : {};\n    // Only apply aria-describedby to the first segment, unless the field is invalid. This avoids it being\n    // read every time the user navigates to a new segment.\n    let firstSegment = (0, $dk9mG$useMemo)(()=>state.segments.find((s)=>s.isEditable), [\n        state.segments\n    ]);\n    if (segment !== firstSegment && !state.isInvalid) ariaDescribedBy = undefined;\n    let id = (0, $390e54f620492c70$export$f680877a34711e37)();\n    let isEditable = !state.isDisabled && !state.isReadOnly && segment.isEditable;\n    // Prepend the label passed from the field to each segment name.\n    // This is needed because VoiceOver on iOS does not announce groups.\n    let name = segment.type === 'literal' ? '' : displayNames.of(segment.type);\n    let labelProps = (0, $e8ac3c3f5d4bae7f$export$d6875122194c7b44)({\n        'aria-label': `${name}${ariaLabel ? `, ${ariaLabel}` : ''}${ariaLabelledBy ? ', ' : ''}`,\n        'aria-labelledby': ariaLabelledBy\n    });\n    // Literal segments should not be visible to screen readers. We don't really need any of the above,\n    // but the rules of hooks mean hooks cannot be conditional so we have to put this condition here.\n    if (segment.type === 'literal') return {\n        segmentProps: {\n            'aria-hidden': true\n        }\n    };\n    let segmentStyle = {\n        caretColor: 'transparent'\n    };\n    if (direction === 'rtl') {\n        // While the bidirectional algorithm seems to work properly on inline elements with actual values, it returns different results for placeholder strings.\n        // To ensure placeholder render in correct format, we apply the CSS equivalent of LRE (left-to-right embedding). See https://www.unicode.org/reports/tr9/#Explicit_Directional_Embeddings.\n        // However, we apply this to both placeholders and date segments with an actual value because the date segments will shift around when deleting otherwise.\n        segmentStyle.unicodeBidi = 'embed';\n        let format = options[segment.type];\n        if (format === 'numeric' || format === '2-digit') segmentStyle.direction = 'ltr';\n    }\n    return {\n        // oxlint-disable-next-line react/react-compiler\n        segmentProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(spinButtonProps, labelProps, {\n            id: id,\n            ...touchPropOverrides,\n            ...keyboardProps,\n            'aria-invalid': state.isInvalid ? 'true' : undefined,\n            'aria-describedby': ariaDescribedBy,\n            'aria-readonly': state.isReadOnly || !segment.isEditable ? 'true' : undefined,\n            'data-placeholder': segment.isPlaceholder || undefined,\n            contentEditable: isEditable,\n            suppressContentEditableWarning: isEditable,\n            spellCheck: isEditable ? 'false' : undefined,\n            autoCorrect: isEditable ? 'off' : undefined,\n            // Capitalization was changed in React 17...\n            [parseInt((0, $dk9mG$react).version, 10) >= 17 ? 'enterKeyHint' : 'enterkeyhint']: isEditable ? 'next' : undefined,\n            inputMode: state.isDisabled || segment.type === 'dayPeriod' || segment.type === 'era' || !isEditable ? undefined : 'numeric',\n            tabIndex: state.isDisabled ? undefined : 0,\n            onFocus: onFocus,\n            style: segmentStyle,\n            // Prevent pointer events from reaching useDatePickerGroup, and allow native browser behavior to focus the segment.\n            onPointerDown (e) {\n                e.stopPropagation();\n            },\n            onMouseDown (e) {\n                e.stopPropagation();\n            }\n        })\n    };\n}\nfunction $d51706f903be7eab$var$commonPrefixLength(strings) {\n    // Sort the strings, and compare the characters in the first and last to find the common prefix.\n    strings.sort();\n    let first = strings[0];\n    let last = strings[strings.length - 1];\n    for(let i = 0; i < first.length; i++){\n        if (first[i] !== last[i]) return i;\n    }\n    return 0;\n}\n\n\nexport {$d51706f903be7eab$export$1315d136e6f7581 as useDateSegment};\n//# sourceMappingURL=useDateSegment.mjs.map\n","var $6b7f94ed17767636$exports = {};\n$6b7f94ed17767636$exports = {\n    \"rangeUnderflow\": (args)=>`Value must be ${args.minValue} or later.`,\n    \"rangeOverflow\": (args)=>`Value must be ${args.maxValue} or earlier.`,\n    \"rangeReversed\": `Start date must be before end date.`,\n    \"unavailableDate\": `Selected date unavailable.`\n};\n\n\nexport {$6b7f94ed17767636$exports as default};\n//# sourceMappingURL=en-US.mjs.map\n","import $3ANuo$intldatepickerarAEmjs from \"../intl/datepicker/ar-AE.mjs\";\nimport $3ANuo$intldatepickerbgBGmjs from \"../intl/datepicker/bg-BG.mjs\";\nimport $3ANuo$intldatepickercsCZmjs from \"../intl/datepicker/cs-CZ.mjs\";\nimport $3ANuo$intldatepickerdaDKmjs from \"../intl/datepicker/da-DK.mjs\";\nimport $3ANuo$intldatepickerdeDEmjs from \"../intl/datepicker/de-DE.mjs\";\nimport $3ANuo$intldatepickerelGRmjs from \"../intl/datepicker/el-GR.mjs\";\nimport $3ANuo$intldatepickerenUSmjs from \"../intl/datepicker/en-US.mjs\";\nimport $3ANuo$intldatepickeresESmjs from \"../intl/datepicker/es-ES.mjs\";\nimport $3ANuo$intldatepickeretEEmjs from \"../intl/datepicker/et-EE.mjs\";\nimport $3ANuo$intldatepickerfiFImjs from \"../intl/datepicker/fi-FI.mjs\";\nimport $3ANuo$intldatepickerfrFRmjs from \"../intl/datepicker/fr-FR.mjs\";\nimport $3ANuo$intldatepickerheILmjs from \"../intl/datepicker/he-IL.mjs\";\nimport $3ANuo$intldatepickerhrHRmjs from \"../intl/datepicker/hr-HR.mjs\";\nimport $3ANuo$intldatepickerhuHUmjs from \"../intl/datepicker/hu-HU.mjs\";\nimport $3ANuo$intldatepickeritITmjs from \"../intl/datepicker/it-IT.mjs\";\nimport $3ANuo$intldatepickerjaJPmjs from \"../intl/datepicker/ja-JP.mjs\";\nimport $3ANuo$intldatepickerkoKRmjs from \"../intl/datepicker/ko-KR.mjs\";\nimport $3ANuo$intldatepickerltLTmjs from \"../intl/datepicker/lt-LT.mjs\";\nimport $3ANuo$intldatepickerlvLVmjs from \"../intl/datepicker/lv-LV.mjs\";\nimport $3ANuo$intldatepickernbNOmjs from \"../intl/datepicker/nb-NO.mjs\";\nimport $3ANuo$intldatepickernlNLmjs from \"../intl/datepicker/nl-NL.mjs\";\nimport $3ANuo$intldatepickerplPLmjs from \"../intl/datepicker/pl-PL.mjs\";\nimport $3ANuo$intldatepickerptBRmjs from \"../intl/datepicker/pt-BR.mjs\";\nimport $3ANuo$intldatepickerptPTmjs from \"../intl/datepicker/pt-PT.mjs\";\nimport $3ANuo$intldatepickerroROmjs from \"../intl/datepicker/ro-RO.mjs\";\nimport $3ANuo$intldatepickerruRUmjs from \"../intl/datepicker/ru-RU.mjs\";\nimport $3ANuo$intldatepickerskSKmjs from \"../intl/datepicker/sk-SK.mjs\";\nimport $3ANuo$intldatepickerslSImjs from \"../intl/datepicker/sl-SI.mjs\";\nimport $3ANuo$intldatepickersrSPmjs from \"../intl/datepicker/sr-SP.mjs\";\nimport $3ANuo$intldatepickersvSEmjs from \"../intl/datepicker/sv-SE.mjs\";\nimport $3ANuo$intldatepickertrTRmjs from \"../intl/datepicker/tr-TR.mjs\";\nimport $3ANuo$intldatepickerukUAmjs from \"../intl/datepicker/uk-UA.mjs\";\nimport $3ANuo$intldatepickerzhCNmjs from \"../intl/datepicker/zh-CN.mjs\";\nimport $3ANuo$intldatepickerzhTWmjs from \"../intl/datepicker/zh-TW.mjs\";\n\nvar $d0d4459aa9ffd727$exports = {};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$d0d4459aa9ffd727$exports = {\n    \"ar-AE\": $3ANuo$intldatepickerarAEmjs,\n    \"bg-BG\": $3ANuo$intldatepickerbgBGmjs,\n    \"cs-CZ\": $3ANuo$intldatepickercsCZmjs,\n    \"da-DK\": $3ANuo$intldatepickerdaDKmjs,\n    \"de-DE\": $3ANuo$intldatepickerdeDEmjs,\n    \"el-GR\": $3ANuo$intldatepickerelGRmjs,\n    \"en-US\": $3ANuo$intldatepickerenUSmjs,\n    \"es-ES\": $3ANuo$intldatepickeresESmjs,\n    \"et-EE\": $3ANuo$intldatepickeretEEmjs,\n    \"fi-FI\": $3ANuo$intldatepickerfiFImjs,\n    \"fr-FR\": $3ANuo$intldatepickerfrFRmjs,\n    \"he-IL\": $3ANuo$intldatepickerheILmjs,\n    \"hr-HR\": $3ANuo$intldatepickerhrHRmjs,\n    \"hu-HU\": $3ANuo$intldatepickerhuHUmjs,\n    \"it-IT\": $3ANuo$intldatepickeritITmjs,\n    \"ja-JP\": $3ANuo$intldatepickerjaJPmjs,\n    \"ko-KR\": $3ANuo$intldatepickerkoKRmjs,\n    \"lt-LT\": $3ANuo$intldatepickerltLTmjs,\n    \"lv-LV\": $3ANuo$intldatepickerlvLVmjs,\n    \"nb-NO\": $3ANuo$intldatepickernbNOmjs,\n    \"nl-NL\": $3ANuo$intldatepickernlNLmjs,\n    \"pl-PL\": $3ANuo$intldatepickerplPLmjs,\n    \"pt-BR\": $3ANuo$intldatepickerptBRmjs,\n    \"pt-PT\": $3ANuo$intldatepickerptPTmjs,\n    \"ro-RO\": $3ANuo$intldatepickerroROmjs,\n    \"ru-RU\": $3ANuo$intldatepickerruRUmjs,\n    \"sk-SK\": $3ANuo$intldatepickerskSKmjs,\n    \"sl-SI\": $3ANuo$intldatepickerslSImjs,\n    \"sr-SP\": $3ANuo$intldatepickersrSPmjs,\n    \"sv-SE\": $3ANuo$intldatepickersvSEmjs,\n    \"tr-TR\": $3ANuo$intldatepickertrTRmjs,\n    \"uk-UA\": $3ANuo$intldatepickerukUAmjs,\n    \"zh-CN\": $3ANuo$intldatepickerzhCNmjs,\n    \"zh-TW\": $3ANuo$intldatepickerzhTWmjs\n};\n\n\nexport {$d0d4459aa9ffd727$exports as default};\n//# sourceMappingURL=intlStrings.mjs.map\n","import $7hc54$intlStringsmjs from \"./intlStrings.mjs\";\nimport {mergeValidation as $fd2148440a13ec26$export$75ee7c75d68f5b0e, VALID_VALIDITY_STATE as $fd2148440a13ec26$export$aca958c65c314e6c} from \"../form/useFormValidationState.mjs\";\nimport {DateFormatter as $7hc54$DateFormatter, Time as $7hc54$Time, toCalendar as $7hc54$toCalendar, now as $7hc54$now, getLocalTimeZone as $7hc54$getLocalTimeZone, toCalendarDate as $7hc54$toCalendarDate, toCalendarDateTime as $7hc54$toCalendarDateTime} from \"@internationalized/date\";\nimport {LocalizedStringDictionary as $7hc54$LocalizedStringDictionary, LocalizedStringFormatter as $7hc54$LocalizedStringFormatter} from \"@internationalized/string\";\nimport {useState as $7hc54$useState} from \"react\";\n\n\nfunction $parcel$interopDefault(a) {\n  return a && a.__esModule ? a.default : a;\n}\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nconst $8b141f2f71e88f85$var$dictionary = new (0, $7hc54$LocalizedStringDictionary)((0, ($parcel$interopDefault($7hc54$intlStringsmjs))));\nfunction $8b141f2f71e88f85$var$getLocale() {\n    // Match browser language setting here, NOT react-aria's I18nProvider, so that we match other browser-provided\n    // validation messages, which to not respect our provider's language.\n    let locale = // @ts-ignore\n    typeof navigator !== 'undefined' && (navigator.language || navigator.userLanguage) || 'en-US';\n    try {\n        Intl.DateTimeFormat.supportedLocalesOf([\n            locale\n        ]);\n    } catch  {\n        locale = 'en-US';\n    }\n    return locale;\n}\nfunction $8b141f2f71e88f85$export$f18627323ab57ac0(value, minValue, maxValue, isDateUnavailable, options) {\n    let rangeOverflow = value != null && maxValue != null && value.compare(maxValue) > 0;\n    let rangeUnderflow = value != null && minValue != null && value.compare(minValue) < 0;\n    let isUnavailable = value != null && isDateUnavailable?.(value) || false;\n    let isInvalid = rangeOverflow || rangeUnderflow || isUnavailable;\n    let errors = [];\n    if (isInvalid) {\n        let locale = $8b141f2f71e88f85$var$getLocale();\n        let strings = (0, $7hc54$LocalizedStringDictionary).getGlobalDictionaryForPackage('@react-stately/datepicker') || $8b141f2f71e88f85$var$dictionary;\n        let formatter = new (0, $7hc54$LocalizedStringFormatter)(locale, strings);\n        let dateFormatter = new (0, $7hc54$DateFormatter)(locale, $8b141f2f71e88f85$export$7e319ea407e63bc0({}, options));\n        let timeZone = dateFormatter.resolvedOptions().timeZone;\n        if (rangeUnderflow && minValue != null) errors.push(formatter.format('rangeUnderflow', {\n            minValue: dateFormatter.format(minValue.toDate(timeZone))\n        }));\n        if (rangeOverflow && maxValue != null) errors.push(formatter.format('rangeOverflow', {\n            maxValue: dateFormatter.format(maxValue.toDate(timeZone))\n        }));\n        if (isUnavailable) errors.push(formatter.format('unavailableDate'));\n    }\n    return {\n        isInvalid: isInvalid,\n        validationErrors: errors,\n        validationDetails: {\n            badInput: isUnavailable,\n            customError: false,\n            patternMismatch: false,\n            rangeOverflow: rangeOverflow,\n            rangeUnderflow: rangeUnderflow,\n            stepMismatch: false,\n            tooLong: false,\n            tooShort: false,\n            typeMismatch: false,\n            valueMissing: false,\n            valid: !isInvalid\n        }\n    };\n}\nfunction $8b141f2f71e88f85$export$80ff8fc0ae339c13(value, minValue, maxValue, isDateUnavailable, options) {\n    let startValidation = $8b141f2f71e88f85$export$f18627323ab57ac0(value?.start ?? null, minValue, maxValue, isDateUnavailable, options);\n    let endValidation = $8b141f2f71e88f85$export$f18627323ab57ac0(value?.end ?? null, minValue, maxValue, isDateUnavailable, options);\n    let result = (0, $fd2148440a13ec26$export$75ee7c75d68f5b0e)(startValidation, endValidation);\n    if (value?.end != null && value.start != null && value.end.compare(value.start) < 0) {\n        let strings = (0, $7hc54$LocalizedStringDictionary).getGlobalDictionaryForPackage('@react-stately/datepicker') || $8b141f2f71e88f85$var$dictionary;\n        result = (0, $fd2148440a13ec26$export$75ee7c75d68f5b0e)(result, {\n            isInvalid: true,\n            validationErrors: [\n                strings.getStringForLocale('rangeReversed', $8b141f2f71e88f85$var$getLocale())\n            ],\n            validationDetails: {\n                ...(0, $fd2148440a13ec26$export$aca958c65c314e6c),\n                rangeUnderflow: true,\n                rangeOverflow: true,\n                valid: false\n            }\n        });\n    }\n    return result;\n}\nconst $8b141f2f71e88f85$var$DEFAULT_FIELD_OPTIONS = {\n    year: 'numeric',\n    month: 'numeric',\n    day: 'numeric',\n    hour: 'numeric',\n    minute: '2-digit',\n    second: '2-digit'\n};\nconst $8b141f2f71e88f85$var$TWO_DIGIT_FIELD_OPTIONS = {\n    year: 'numeric',\n    month: '2-digit',\n    day: '2-digit',\n    hour: '2-digit',\n    minute: '2-digit',\n    second: '2-digit'\n};\nfunction $8b141f2f71e88f85$export$7e319ea407e63bc0(fieldOptions, options) {\n    let defaultFieldOptions = options.shouldForceLeadingZeros ? $8b141f2f71e88f85$var$TWO_DIGIT_FIELD_OPTIONS : $8b141f2f71e88f85$var$DEFAULT_FIELD_OPTIONS;\n    fieldOptions = {\n        ...defaultFieldOptions,\n        ...fieldOptions\n    };\n    let granularity = options.granularity || 'minute';\n    let keys = Object.keys(fieldOptions);\n    let startIdx = keys.indexOf(options.maxGranularity ?? 'year');\n    if (startIdx < 0) startIdx = 0;\n    let endIdx = keys.indexOf(granularity);\n    if (endIdx < 0) endIdx = 2;\n    if (startIdx > endIdx) throw new Error('maxGranularity must be greater than granularity');\n    let opts = keys.slice(startIdx, endIdx + 1).reduce((opts, key)=>{\n        opts[key] = fieldOptions[key];\n        return opts;\n    }, {});\n    if (options.hourCycle != null) opts.hour12 = options.hourCycle === 12;\n    opts.timeZone = options.timeZone || 'UTC';\n    let hasTime = granularity === 'hour' || granularity === 'minute' || granularity === 'second';\n    if (hasTime && options.timeZone && !options.hideTimeZone) opts.timeZoneName = 'short';\n    if (options.showEra && startIdx === 0) opts.era = 'short';\n    return opts;\n}\nfunction $8b141f2f71e88f85$export$c5221a78ef73c5e9(placeholderValue) {\n    if (placeholderValue && 'hour' in placeholderValue) return placeholderValue;\n    return new (0, $7hc54$Time)();\n}\nfunction $8b141f2f71e88f85$export$61a490a80c552550(value, calendar) {\n    if (value === null) return null;\n    if (!value) return undefined;\n    return (0, $7hc54$toCalendar)(value, calendar);\n}\nfunction $8b141f2f71e88f85$export$66aa2b09de4b1ea5(placeholderValue, granularity, calendar, timeZone) {\n    if (placeholderValue) return $8b141f2f71e88f85$export$61a490a80c552550(placeholderValue, calendar);\n    let date = (0, $7hc54$toCalendar)((0, $7hc54$now)(timeZone ?? (0, $7hc54$getLocalTimeZone)()).set({\n        hour: 0,\n        minute: 0,\n        second: 0,\n        millisecond: 0\n    }), calendar);\n    if (granularity === 'year' || granularity === 'month' || granularity === 'day') return (0, $7hc54$toCalendarDate)(date);\n    if (!timeZone) return (0, $7hc54$toCalendarDateTime)(date);\n    return date;\n}\nfunction $8b141f2f71e88f85$export$2440da353cedad43(v, granularity) {\n    // Compute default granularity and time zone from the value. If the value becomes null, keep the last values.\n    let defaultTimeZone = v && 'timeZone' in v ? v.timeZone : undefined;\n    let defaultGranularity = v && 'minute' in v ? 'minute' : 'day';\n    // props.granularity must actually exist in the value if one is provided.\n    if (v && granularity && !(granularity in v)) throw new Error('Invalid granularity ' + granularity + ' for value ' + v.toString());\n    let [lastValue, setLastValue] = (0, $7hc54$useState)([\n        defaultGranularity,\n        defaultTimeZone\n    ]);\n    // If the granularity or time zone changed, update the last value.\n    if (v && (lastValue[0] !== defaultGranularity || lastValue[1] !== defaultTimeZone)) setLastValue([\n        defaultGranularity,\n        defaultTimeZone\n    ]);\n    if (!granularity) granularity = v ? defaultGranularity : lastValue[0];\n    let timeZone = v ? defaultTimeZone : lastValue[1];\n    return [\n        granularity,\n        timeZone\n    ];\n}\n\n\nexport {$8b141f2f71e88f85$export$f18627323ab57ac0 as getValidationResult, $8b141f2f71e88f85$export$7e319ea407e63bc0 as getFormatOptions, $8b141f2f71e88f85$export$80ff8fc0ae339c13 as getRangeValidationResult, $8b141f2f71e88f85$export$c5221a78ef73c5e9 as getPlaceholderTime, $8b141f2f71e88f85$export$61a490a80c552550 as convertValue, $8b141f2f71e88f85$export$66aa2b09de4b1ea5 as createPlaceholderDate, $8b141f2f71e88f85$export$2440da353cedad43 as useDefaultProps};\n//# sourceMappingURL=utils.mjs.map\n","import {LocalizedStringDictionary as $bwGbA$LocalizedStringDictionary} from \"@internationalized/string\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n// These placeholders are based on the strings used by the <input type=\"date\">\n// implementations in Chrome and Firefox. Additional languages are supported\n// here than React Spectrum's typical translations.\nconst $8e5fbb9a25791ca0$var$placeholders = new (0, $bwGbA$LocalizedStringDictionary)({\n    ach: {\n        year: 'mwaka',\n        month: 'dwe',\n        day: 'nino'\n    },\n    af: {\n        year: 'jjjj',\n        month: 'mm',\n        day: 'dd'\n    },\n    am: {\n        year: \"\\u12D3\\u12D3\\u12D3\\u12D3\",\n        month: \"\\u121A\\u121C\",\n        day: \"\\u1240\\u1240\"\n    },\n    an: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'dd'\n    },\n    ar: {\n        year: \"\\u0633\\u0646\\u0629\",\n        month: \"\\u0634\\u0647\\u0631\",\n        day: \"\\u064A\\u0648\\u0645\"\n    },\n    ast: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'dd'\n    },\n    az: {\n        year: 'iiii',\n        month: 'aa',\n        day: 'gg'\n    },\n    be: {\n        year: \"\\u0433\\u0433\\u0433\\u0433\",\n        month: \"\\u043C\\u043C\",\n        day: \"\\u0434\\u0434\"\n    },\n    bg: {\n        year: \"\\u0433\\u0433\\u0433\\u0433\",\n        month: \"\\u043C\\u043C\",\n        day: \"\\u0434\\u0434\"\n    },\n    bn: {\n        year: 'yyyy',\n        month: \"\\u09AE\\u09BF\\u09AE\\u09BF\",\n        day: 'dd'\n    },\n    br: {\n        year: 'bbbb',\n        month: 'mm',\n        day: 'dd'\n    },\n    bs: {\n        year: 'gggg',\n        month: 'mm',\n        day: 'dd'\n    },\n    ca: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'dd'\n    },\n    cak: {\n        year: 'jjjj',\n        month: 'ii',\n        day: \"q'q'\"\n    },\n    ckb: {\n        year: \"\\u0633\\u0627\\u06B5\",\n        month: \"\\u0645\\u0627\\u0646\\u06AF\",\n        day: \"\\u0695\\u06C6\\u0698\"\n    },\n    cs: {\n        year: 'rrrr',\n        month: 'mm',\n        day: 'dd'\n    },\n    cy: {\n        year: 'bbbb',\n        month: 'mm',\n        day: 'dd'\n    },\n    da: {\n        year: \"\\xe5\\xe5\\xe5\\xe5\",\n        month: 'mm',\n        day: 'dd'\n    },\n    de: {\n        year: 'jjjj',\n        month: 'mm',\n        day: 'tt'\n    },\n    dsb: {\n        year: 'llll',\n        month: 'mm',\n        day: \"\\u017A\\u017A\"\n    },\n    el: {\n        year: \"\\u03B5\\u03B5\\u03B5\\u03B5\",\n        month: \"\\u03BC\\u03BC\",\n        day: \"\\u03B7\\u03B7\"\n    },\n    en: {\n        year: 'yyyy',\n        month: 'mm',\n        day: 'dd'\n    },\n    eo: {\n        year: 'jjjj',\n        month: 'mm',\n        day: 'tt'\n    },\n    es: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'dd'\n    },\n    et: {\n        year: 'aaaa',\n        month: 'kk',\n        day: 'pp'\n    },\n    eu: {\n        year: 'uuuu',\n        month: 'hh',\n        day: 'ee'\n    },\n    fa: {\n        year: \"\\u0633\\u0627\\u0644\",\n        month: \"\\u0645\\u0627\\u0647\",\n        day: \"\\u0631\\u0648\\u0632\"\n    },\n    ff: {\n        year: 'hhhh',\n        month: 'll',\n        day: \"\\xf1\\xf1\"\n    },\n    fi: {\n        year: 'vvvv',\n        month: 'kk',\n        day: 'pp'\n    },\n    fr: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'jj'\n    },\n    fy: {\n        year: 'jjjj',\n        month: 'mm',\n        day: 'dd'\n    },\n    ga: {\n        year: 'bbbb',\n        month: 'mm',\n        day: 'll'\n    },\n    gd: {\n        year: 'bbbb',\n        month: 'mm',\n        day: 'll'\n    },\n    gl: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'dd'\n    },\n    he: {\n        year: \"\\u05E9\\u05E0\\u05D4\",\n        month: \"\\u05D7\\u05D5\\u05D3\\u05E9\",\n        day: \"\\u05D9\\u05D5\\u05DD\"\n    },\n    hr: {\n        year: 'gggg',\n        month: 'mm',\n        day: 'dd'\n    },\n    hsb: {\n        year: 'llll',\n        month: 'mm',\n        day: 'dd'\n    },\n    hu: {\n        year: \"\\xe9\\xe9\\xe9\\xe9\",\n        month: 'hh',\n        day: 'nn'\n    },\n    ia: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'dd'\n    },\n    id: {\n        year: 'tttt',\n        month: 'bb',\n        day: 'hh'\n    },\n    is: {\n        year: \"\\xe1\\xe1\\xe1\\xe1\",\n        month: 'mm',\n        day: 'dd'\n    },\n    it: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'gg'\n    },\n    ja: {\n        year: \"\\u5E74\",\n        month: \"\\u6708\",\n        day: \"\\u65E5\"\n    },\n    ka: {\n        year: \"\\u10EC\\u10EC\\u10EC\\u10EC\",\n        month: \"\\u10D7\\u10D7\",\n        day: \"\\u10E0\\u10E0\"\n    },\n    kk: {\n        year: \"\\u0436\\u0436\\u0436\\u0436\",\n        month: \"\\u0430\\u0430\",\n        day: \"\\u043A\\u043A\"\n    },\n    kn: {\n        year: \"\\u0CB5\\u0CB5\\u0CB5\\u0CB5\",\n        month: \"\\u0CAE\\u0CBF\\u0CAE\\u0CC0\",\n        day: \"\\u0CA6\\u0CBF\\u0CA6\\u0CBF\"\n    },\n    ko: {\n        year: \"\\uC5F0\\uB3C4\",\n        month: \"\\uC6D4\",\n        day: \"\\uC77C\"\n    },\n    lb: {\n        year: 'jjjj',\n        month: 'mm',\n        day: 'dd'\n    },\n    lo: {\n        year: \"\\u0E9B\\u0E9B\\u0E9B\\u0E9B\",\n        month: \"\\u0E94\\u0E94\",\n        day: \"\\u0EA7\\u0EA7\"\n    },\n    lt: {\n        year: 'mmmm',\n        month: 'mm',\n        day: 'dd'\n    },\n    lv: {\n        year: 'gggg',\n        month: 'mm',\n        day: 'dd'\n    },\n    meh: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'dd'\n    },\n    ml: {\n        year: \"\\u0D35\\u0D7C\\u0D37\\u0D02\",\n        month: \"\\u0D2E\\u0D3E\\u0D38\\u0D02\",\n        day: \"\\u0D24\\u0D40\\u0D2F\\u0D24\\u0D3F\"\n    },\n    ms: {\n        year: 'tttt',\n        month: 'mm',\n        day: 'hh'\n    },\n    nb: {\n        year: \"\\xe5\\xe5\\xe5\\xe5\",\n        month: 'mm',\n        day: 'dd'\n    },\n    nl: {\n        year: 'jjjj',\n        month: 'mm',\n        day: 'dd'\n    },\n    nn: {\n        year: \"\\xe5\\xe5\\xe5\\xe5\",\n        month: 'mm',\n        day: 'dd'\n    },\n    no: {\n        year: \"\\xe5\\xe5\\xe5\\xe5\",\n        month: 'mm',\n        day: 'dd'\n    },\n    oc: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'jj'\n    },\n    pl: {\n        year: 'rrrr',\n        month: 'mm',\n        day: 'dd'\n    },\n    pt: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'dd'\n    },\n    rm: {\n        year: 'oooo',\n        month: 'mm',\n        day: 'dd'\n    },\n    ro: {\n        year: 'aaaa',\n        month: 'll',\n        day: 'zz'\n    },\n    ru: {\n        year: \"\\u0433\\u0433\\u0433\\u0433\",\n        month: \"\\u043C\\u043C\",\n        day: \"\\u0434\\u0434\"\n    },\n    sc: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'dd'\n    },\n    scn: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'jj'\n    },\n    sk: {\n        year: 'rrrr',\n        month: 'mm',\n        day: 'dd'\n    },\n    sl: {\n        year: 'llll',\n        month: 'mm',\n        day: 'dd'\n    },\n    sr: {\n        year: \"\\u0433\\u0433\\u0433\\u0433\",\n        month: \"\\u043C\\u043C\",\n        day: \"\\u0434\\u0434\"\n    },\n    'sr-Latn': {\n        year: 'gggg',\n        month: 'mm',\n        day: 'dd'\n    },\n    sv: {\n        year: \"\\xe5\\xe5\\xe5\\xe5\",\n        month: 'mm',\n        day: 'dd'\n    },\n    szl: {\n        year: 'rrrr',\n        month: 'mm',\n        day: 'dd'\n    },\n    tg: {\n        year: \"\\u0441\\u0441\\u0441\\u0441\",\n        month: \"\\u043C\\u043C\",\n        day: \"\\u0440\\u0440\"\n    },\n    th: {\n        year: \"\\u0E1B\\u0E1B\\u0E1B\\u0E1B\",\n        month: \"\\u0E14\\u0E14\",\n        day: \"\\u0E27\\u0E27\"\n    },\n    tr: {\n        year: 'yyyy',\n        month: 'aa',\n        day: 'gg'\n    },\n    uk: {\n        year: \"\\u0440\\u0440\\u0440\\u0440\",\n        month: \"\\u043C\\u043C\",\n        day: \"\\u0434\\u0434\"\n    },\n    'zh-CN': {\n        year: \"\\u5E74\",\n        month: \"\\u6708\",\n        day: \"\\u65E5\"\n    },\n    'zh-TW': {\n        year: \"\\u5E74\",\n        month: \"\\u6708\",\n        day: \"\\u65E5\"\n    }\n}, 'en');\nfunction $8e5fbb9a25791ca0$export$d3f5c5e0a5023fa0(field, value, locale) {\n    // Use the actual placeholder value for the era and day period fields.\n    if (field === 'era' || field === 'dayPeriod') return value;\n    if (field === 'year' || field === 'month' || field === 'day') return $8e5fbb9a25791ca0$var$placeholders.getStringForLocale(field, locale);\n    // For time fields (e.g. hour, minute, etc.), use two dashes as the placeholder.\n    return \"\\u2013\\u2013\";\n}\n\n\nexport {$8e5fbb9a25791ca0$export$d3f5c5e0a5023fa0 as getPlaceholder};\n//# sourceMappingURL=placeholders.mjs.map\n","import {CalendarDate as $cMyEu$CalendarDate} from \"@internationalized/date\";\n\n/*\n * Copyright 2026 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nclass $0e8931c783099b4f$export$ae165b50d181e1ef {\n    constructor(calendar, hourCycle, dateValue){\n        this.era = dateValue?.era ?? null;\n        this.calendar = calendar;\n        this.year = dateValue?.year ?? null;\n        this.month = dateValue?.month ?? null;\n        this.day = dateValue?.day ?? null;\n        this.hour = dateValue?.hour ?? null;\n        this.hourCycle = hourCycle;\n        this.dayPeriod = null;\n        this.minute = dateValue?.minute ?? null;\n        this.second = dateValue?.second ?? null;\n        this.millisecond = dateValue?.millisecond ?? null;\n        this.offset = 'offset' in (dateValue ?? {}) ? dateValue.offset : null;\n        // Convert the hour from 24 hour time to the given hour cycle.\n        if (this.hour != null) {\n            let [dayPeriod, hour] = $0e8931c783099b4f$var$toHourCycle(this.hour, hourCycle);\n            this.dayPeriod = dayPeriod;\n            this.hour = hour;\n        }\n    }\n    copy() {\n        let res = new $0e8931c783099b4f$export$ae165b50d181e1ef(this.calendar, this.hourCycle);\n        res.era = this.era;\n        res.year = this.year;\n        res.month = this.month;\n        res.day = this.day;\n        res.hour = this.hour;\n        res.dayPeriod = this.dayPeriod;\n        res.minute = this.minute;\n        res.second = this.second;\n        res.millisecond = this.millisecond;\n        res.offset = this.offset;\n        return res;\n    }\n    /** Checks whether all the specified segments have a value. */ isComplete(segments) {\n        return segments.every((segment)=>this[segment] != null);\n    }\n    /** Checks whether the given date value matches this value for the specified segments. */ validate(dt, segments) {\n        return segments.every((segment)=>{\n            if ((segment === 'hour' || segment === 'dayPeriod') && 'hour' in dt) {\n                let [dayPeriod, hour] = $0e8931c783099b4f$var$toHourCycle(dt.hour, this.hourCycle);\n                return this.dayPeriod === dayPeriod && this.hour === hour;\n            }\n            return this[segment] === dt[segment];\n        });\n    }\n    /** Checks if the date is empty (i.e. all specified segments are null). */ isCleared(segments) {\n        return segments.every((segment)=>this[segment] === null);\n    }\n    /** Sets the given field. */ set(field, value, placeholder) {\n        let result = this.copy();\n        result[field] = value;\n        if (field === 'hour' && result.dayPeriod == null && 'hour' in placeholder) result.dayPeriod = $0e8931c783099b4f$var$toHourCycle(placeholder.hour, this.hourCycle)[0];\n        if (field === 'year' && result.era == null) result.era = placeholder.era;\n        // clear offset when a date/time field changes since it may no longer be valid\n        if (field !== 'second' && field !== 'literal' && field !== 'timeZoneName') result.offset = null;\n        return result;\n    }\n    /** Sets the given field to null. */ clear(field) {\n        let result = this.copy();\n        // @ts-ignore\n        result[field] = null;\n        if (field === 'year') result.era = null;\n        // clear offset when a field is cleared since it may no longer be valid\n        result.offset = null;\n        return result;\n    }\n    /**\n   * Increments or decrements the given field. If it is null, then it is set to the placeholder\n   * value.\n   */ cycle(field, amount, placeholder, displaySegments) {\n        let res = this.copy();\n        // If field is null, default to placeholder.\n        if (res[field] == null && field !== 'dayPeriod' && field !== 'era') {\n            if (field === 'hour' && 'hour' in placeholder) {\n                let [dayPeriod, hour] = $0e8931c783099b4f$var$toHourCycle(placeholder.hour, this.hourCycle);\n                res.dayPeriod = dayPeriod;\n                res.hour = hour;\n            } else res[field] = placeholder[field];\n            if (field === 'year' && res.era == null) res.era = placeholder.era;\n            return res;\n        }\n        switch(field){\n            case 'era':\n                {\n                    let eras = this.calendar.getEras();\n                    let index = eras.indexOf(res.era);\n                    index = $0e8931c783099b4f$var$cycleValue(index, amount, 0, eras.length - 1);\n                    res.era = eras[index];\n                    break;\n                }\n            case 'year':\n                {\n                    // Use CalendarDate to cycle so that we update the era when going between 1 AD and 1 BC.\n                    let date = new (0, $cMyEu$CalendarDate)(this.calendar, this.era ?? placeholder.era, this.year ?? placeholder.year, this.month ?? 1, this.day ?? 1);\n                    date = date.cycle(field, amount, {\n                        round: field === 'year'\n                    });\n                    res.era = date.era;\n                    res.year = date.year;\n                    break;\n                }\n            case 'month':\n                res.month = $0e8931c783099b4f$var$cycleValue(res.month ?? 1, amount, 1, this.calendar.getMaximumMonthsInYear());\n                break;\n            case 'day':\n                // Allow incrementing up to the maximum number of days in any month.\n                res.day = $0e8931c783099b4f$var$cycleValue(res.day ?? 1, amount, 1, this.calendar.getMaximumDaysInMonth());\n                break;\n            case 'hour':\n                {\n                    // if date is fully defined or it is just a time field, and we have a time zone, use toValue to get a ZonedDateTime to cycle\n                    // so DST fallback is properly handled\n                    let hasDateSegements = displaySegments.some((s)=>[\n                            'year',\n                            'month',\n                            'day'\n                        ].includes(s));\n                    if ('timeZone' in placeholder && (!hasDateSegements || res.year != null && res.month != null && res.day != null)) {\n                        let date = this.toValue(placeholder);\n                        date = date.cycle('hour', amount, {\n                            hourCycle: this.hourCycle === 'h12' ? 12 : 24,\n                            round: false\n                        });\n                        let [dayPeriod, adjustedHour] = $0e8931c783099b4f$var$toHourCycle(date.hour, this.hourCycle);\n                        res.hour = adjustedHour;\n                        res.dayPeriod = dayPeriod;\n                        res.offset = date.offset;\n                    } else {\n                        let hours = res.hour ?? 0;\n                        let limits = this.getSegmentLimits('hour');\n                        res.hour = $0e8931c783099b4f$var$cycleValue(hours, amount, limits.minValue, limits.maxValue);\n                        if (res.dayPeriod == null && 'hour' in placeholder) res.dayPeriod = $0e8931c783099b4f$var$toHourCycle(placeholder.hour, this.hourCycle)[0];\n                    }\n                    break;\n                }\n            case 'dayPeriod':\n                res.dayPeriod = $0e8931c783099b4f$var$cycleValue(res.dayPeriod ?? 0, amount, 0, 1);\n                break;\n            case 'minute':\n                res.minute = $0e8931c783099b4f$var$cycleValue(res.minute ?? 0, amount, 0, 59, true);\n                break;\n            case 'second':\n                res.second = $0e8931c783099b4f$var$cycleValue(res.second ?? 0, amount, 0, 59, true);\n                break;\n        }\n        return res;\n    }\n    /**\n   * Converts the incomplete date to a full date value, using the provided value for any unset\n   * fields.\n   */ toValue(value) {\n        if ('hour' in value) {\n            let hour = this.hour;\n            if (hour != null) hour = $0e8931c783099b4f$var$fromHourCycle(hour, this.dayPeriod ?? 0, this.hourCycle);\n            else if (this.hourCycle === 'h12' || this.hourCycle === 'h11') hour = this.dayPeriod === 1 ? 12 : 0;\n            let res = value.set({\n                era: this.era ?? value.era,\n                year: this.year ?? value.year,\n                month: this.month ?? value.month,\n                day: this.day ?? value.day,\n                hour: hour ?? value.hour,\n                minute: this.minute ?? value.minute,\n                second: this.second ?? value.second,\n                millisecond: this.millisecond ?? value.millisecond\n            });\n            if ('offset' in res && this.offset != null && res.offset !== this.offset) res = res.add({\n                milliseconds: res.offset - this.offset\n            });\n            return res;\n        } else return value.set({\n            era: this.era ?? value.era,\n            year: this.year ?? value.year,\n            month: this.month ?? value.month,\n            day: this.day ?? value.day\n        });\n    }\n    getSegmentLimits(type) {\n        switch(type){\n            case 'era':\n                {\n                    let eras = this.calendar.getEras();\n                    return {\n                        value: this.era != null ? eras.indexOf(this.era) : eras.length - 1,\n                        minValue: 0,\n                        maxValue: eras.length - 1\n                    };\n                }\n            case 'year':\n                return {\n                    value: this.year,\n                    minValue: 1,\n                    maxValue: 9999\n                };\n            case 'month':\n                return {\n                    value: this.month,\n                    minValue: 1,\n                    maxValue: this.calendar.getMaximumMonthsInYear()\n                };\n            case 'day':\n                return {\n                    value: this.day,\n                    minValue: 1,\n                    maxValue: this.calendar.getMaximumDaysInMonth()\n                };\n            case 'dayPeriod':\n                return {\n                    value: this.dayPeriod,\n                    minValue: 0,\n                    maxValue: 1\n                };\n            case 'hour':\n                {\n                    let minValue = 0;\n                    let maxValue = 23;\n                    if (this.hourCycle === 'h12') {\n                        minValue = 1;\n                        maxValue = 12;\n                    } else if (this.hourCycle === 'h11') {\n                        minValue = 0;\n                        maxValue = 11;\n                    }\n                    return {\n                        value: this.hour,\n                        minValue: minValue,\n                        maxValue: maxValue\n                    };\n                }\n            case 'minute':\n                return {\n                    value: this.minute,\n                    minValue: 0,\n                    maxValue: 59\n                };\n            case 'second':\n                return {\n                    value: this.second,\n                    minValue: 0,\n                    maxValue: 59\n                };\n        }\n    }\n}\nfunction $0e8931c783099b4f$var$cycleValue(value, amount, min, max, round = false) {\n    if (round) {\n        value += Math.sign(amount);\n        if (value < min) value = max;\n        let div = Math.abs(amount);\n        if (amount > 0) value = Math.ceil(value / div) * div;\n        else value = Math.floor(value / div) * div;\n        if (value > max) value = min;\n    } else {\n        value += amount;\n        if (value < min) value = max - (min - value - 1);\n        else if (value > max) value = min + (value - max - 1);\n    }\n    return value;\n}\nfunction $0e8931c783099b4f$var$toHourCycle(hour, hourCycle) {\n    let dayPeriod = hour >= 12 ? 1 : 0;\n    switch(hourCycle){\n        case 'h11':\n            // Hours are numbered from 0 to 11. Used in Japan.\n            if (hour >= 12) hour -= 12;\n            break;\n        case 'h12':\n            // Hours are numbered from 12 (representing 0) to 11.\n            if (hour === 0) hour = 12;\n            else if (hour > 12) hour -= 12;\n            break;\n        case 'h23':\n            // 24 hour time, numbered 0 to 23.\n            dayPeriod = null;\n            break;\n        case 'h24':\n            // 24 hour time numbered 24 to 23. Unused but supported by Intl.DateTimeFormat.\n            hour += 1;\n            dayPeriod = null;\n    }\n    return [\n        dayPeriod,\n        hour\n    ];\n}\nfunction $0e8931c783099b4f$var$fromHourCycle(hour, dayPeriod, hourCycle) {\n    switch(hourCycle){\n        case 'h11':\n            if (dayPeriod === 1) hour += 12;\n            break;\n        case 'h12':\n            if (hour === 12) hour = 0;\n            if (dayPeriod === 1) hour += 12;\n            break;\n        case 'h24':\n            hour -= 1;\n            break;\n    }\n    return hour;\n}\n\n\nexport {$0e8931c783099b4f$export$ae165b50d181e1ef as IncompleteDate};\n//# sourceMappingURL=IncompleteDate.mjs.map\n","import {convertValue as $8b141f2f71e88f85$export$61a490a80c552550, createPlaceholderDate as $8b141f2f71e88f85$export$66aa2b09de4b1ea5, getFormatOptions as $8b141f2f71e88f85$export$7e319ea407e63bc0, getValidationResult as $8b141f2f71e88f85$export$f18627323ab57ac0, useDefaultProps as $8b141f2f71e88f85$export$2440da353cedad43} from \"./utils.mjs\";\nimport {useFormValidationState as $fd2148440a13ec26$export$fc1a364ae1f3ff10} from \"../form/useFormValidationState.mjs\";\nimport {getPlaceholder as $8e5fbb9a25791ca0$export$d3f5c5e0a5023fa0} from \"./placeholders.mjs\";\nimport {IncompleteDate as $0e8931c783099b4f$export$ae165b50d181e1ef} from \"./IncompleteDate.mjs\";\nimport {useControlledState as $3e6197669829fe11$export$40bfa8c7b0832715} from \"../utils/useControlledState.mjs\";\nimport {DateFormatter as $cV3Es$DateFormatter, isEqualCalendar as $cV3Es$isEqualCalendar, toCalendar as $cV3Es$toCalendar, GregorianCalendar as $cV3Es$GregorianCalendar} from \"@internationalized/date\";\nimport {NumberFormatter as $cV3Es$NumberFormatter} from \"@internationalized/number\";\nimport {useMemo as $cV3Es$useMemo, useState as $cV3Es$useState} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\nconst $8e7461aabf74661f$var$EDITABLE_SEGMENTS = {\n    year: true,\n    month: true,\n    day: true,\n    hour: true,\n    minute: true,\n    second: true,\n    dayPeriod: true,\n    era: true\n};\nconst $8e7461aabf74661f$var$PAGE_STEP = {\n    year: 5,\n    month: 2,\n    day: 7,\n    hour: 2,\n    minute: 15,\n    second: 15\n};\nconst $8e7461aabf74661f$var$TYPE_MAPPING = {\n    // Node seems to convert everything to lowercase...\n    dayperiod: 'dayPeriod',\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatToParts#named_years\n    relatedYear: 'year',\n    yearName: 'literal',\n    unknown: 'literal'\n};\nfunction $8e7461aabf74661f$export$60e84778edff6d26(props) {\n    let { locale: locale, createCalendar: createCalendar, hideTimeZone: hideTimeZone, isDisabled: isDisabled = false, isReadOnly: isReadOnly = false, isRequired: isRequired = false, minValue: minValue, maxValue: maxValue, isDateUnavailable: isDateUnavailable } = props;\n    let v = props.value || props.defaultValue || props.placeholderValue || null;\n    let [granularity, defaultTimeZone] = (0, $8b141f2f71e88f85$export$2440da353cedad43)(v, props.granularity);\n    let timeZone = defaultTimeZone || 'UTC';\n    // props.granularity must actually exist in the value if one is provided.\n    if (v && !(granularity in v)) throw new Error('Invalid granularity ' + granularity + ' for value ' + v.toString());\n    // Resolve default hour cycle and calendar system.\n    let [calendar, hourCycle] = (0, $cV3Es$useMemo)(()=>{\n        let formatter = new (0, $cV3Es$DateFormatter)(locale, {\n            dateStyle: 'short',\n            timeStyle: 'short',\n            hour12: props.hourCycle != null ? props.hourCycle === 12 : undefined\n        });\n        let opts = formatter.resolvedOptions();\n        let calendar = createCalendar(opts.calendar);\n        return [\n            calendar,\n            opts.hourCycle\n        ];\n    }, [\n        locale,\n        props.hourCycle,\n        createCalendar\n    ]);\n    let [value, setDate] = (0, $3e6197669829fe11$export$40bfa8c7b0832715)(props.value, props.defaultValue ?? null, props.onChange);\n    let [initialValue] = (0, $cV3Es$useState)(value);\n    let calendarValue = (0, $cV3Es$useMemo)(()=>(0, $8b141f2f71e88f85$export$61a490a80c552550)(value, calendar) ?? null, [\n        value,\n        calendar\n    ]);\n    let [displayValue, setDisplayValue] = (0, $cV3Es$useState)(()=>new (0, $0e8931c783099b4f$export$ae165b50d181e1ef)(calendar, hourCycle, calendarValue));\n    let showEra = calendar.identifier === 'gregory' && displayValue.era === 'BC';\n    let formatOpts = (0, $cV3Es$useMemo)(()=>({\n            granularity: granularity,\n            maxGranularity: props.maxGranularity ?? 'year',\n            timeZone: defaultTimeZone,\n            hideTimeZone: hideTimeZone,\n            hourCycle: props.hourCycle,\n            showEra: showEra,\n            shouldForceLeadingZeros: props.shouldForceLeadingZeros\n        }), [\n        props.maxGranularity,\n        granularity,\n        props.hourCycle,\n        props.shouldForceLeadingZeros,\n        defaultTimeZone,\n        hideTimeZone,\n        showEra\n    ]);\n    let opts = (0, $cV3Es$useMemo)(()=>(0, $8b141f2f71e88f85$export$7e319ea407e63bc0)({}, formatOpts), [\n        formatOpts\n    ]);\n    let dateFormatter = (0, $cV3Es$useMemo)(()=>new (0, $cV3Es$DateFormatter)(locale, opts), [\n        locale,\n        opts\n    ]);\n    let resolvedOptions = (0, $cV3Es$useMemo)(()=>dateFormatter.resolvedOptions(), [\n        dateFormatter\n    ]);\n    let placeholder = (0, $cV3Es$useMemo)(()=>(0, $8b141f2f71e88f85$export$66aa2b09de4b1ea5)(props.placeholderValue, granularity, calendar, defaultTimeZone), [\n        props.placeholderValue,\n        granularity,\n        calendar,\n        defaultTimeZone\n    ]);\n    let displaySegments = (0, $cV3Es$useMemo)(()=>{\n        let is12HourClock = hourCycle === 'h11' || hourCycle === 'h12';\n        let segments = [\n            'era',\n            'year',\n            'month',\n            'day',\n            'hour',\n            ...is12HourClock ? [\n                'dayPeriod'\n            ] : [],\n            'minute',\n            'second'\n        ];\n        let minIndex = segments.indexOf(props.maxGranularity || 'era');\n        let maxIndex = segments.indexOf(granularity === 'hour' && is12HourClock ? 'dayPeriod' : granularity);\n        return segments.slice(minIndex, maxIndex + 1);\n    }, [\n        props.maxGranularity,\n        granularity,\n        hourCycle\n    ]);\n    let [lastValue, setLastValue] = (0, $cV3Es$useState)(calendarValue);\n    let [lastCalendar, setLastCalendar] = (0, $cV3Es$useState)(calendar);\n    let [lastHourCycle, setLastHourCycle] = (0, $cV3Es$useState)(hourCycle);\n    if (calendarValue !== lastValue || hourCycle !== lastHourCycle || !(0, $cV3Es$isEqualCalendar)(calendar, lastCalendar)) {\n        displayValue = new (0, $0e8931c783099b4f$export$ae165b50d181e1ef)(calendar, hourCycle, calendarValue);\n        setLastValue(calendarValue);\n        setLastCalendar(calendar);\n        setLastHourCycle(hourCycle);\n        setDisplayValue(displayValue);\n    }\n    let setValue = (newValue)=>{\n        if (props.isDisabled || props.isReadOnly) return;\n        if (newValue == null || newValue instanceof (0, $0e8931c783099b4f$export$ae165b50d181e1ef) && newValue.isCleared(displaySegments)) {\n            setDisplayValue(new (0, $0e8931c783099b4f$export$ae165b50d181e1ef)(calendar, hourCycle, calendarValue));\n            setDate(null);\n        } else if (!(newValue instanceof (0, $0e8931c783099b4f$export$ae165b50d181e1ef))) {\n            // The display calendar should not have any effect on the emitted value.\n            // Emit dates in the same calendar as the original value, if any, otherwise gregorian.\n            newValue = (0, $cV3Es$toCalendar)(newValue, v?.calendar || new (0, $cV3Es$GregorianCalendar)());\n            setDisplayValue(new (0, $0e8931c783099b4f$export$ae165b50d181e1ef)(calendar, hourCycle, calendarValue));\n            setDate(newValue);\n        } else {\n            // If the new value is complete and valid, trigger onChange eagerly.\n            // If it represents an incomplete or invalid value (e.g. February 30th),\n            // wait until the field is blurred to trigger onChange.\n            if (newValue.isComplete(displaySegments)) {\n                let dateValue = newValue.toValue(calendarValue ?? placeholder);\n                if (newValue.validate(dateValue, displaySegments)) {\n                    let newDateValue = (0, $cV3Es$toCalendar)(dateValue, v?.calendar || new (0, $cV3Es$GregorianCalendar)());\n                    if (!value || newDateValue.compare(value) !== 0) {\n                        setDisplayValue(new (0, $0e8931c783099b4f$export$ae165b50d181e1ef)(calendar, hourCycle, calendarValue)); // reset in case prop isn't updated\n                        setDate(newDateValue);\n                        return;\n                    }\n                }\n            }\n            // Incomplete/invalid value. Set temporary display override.\n            setDisplayValue(newValue);\n        }\n    };\n    let dateValue = (0, $cV3Es$useMemo)(()=>{\n        let v = displayValue.toValue(calendarValue ?? placeholder);\n        return v.toDate(timeZone);\n    }, [\n        displayValue,\n        timeZone,\n        calendarValue,\n        placeholder\n    ]);\n    let segments = (0, $cV3Es$useMemo)(()=>$8e7461aabf74661f$var$processSegments(dateValue, displayValue, dateFormatter, resolvedOptions, calendar, locale, granularity), [\n        dateValue,\n        dateFormatter,\n        resolvedOptions,\n        displayValue,\n        calendar,\n        locale,\n        granularity\n    ]);\n    let adjustSegment = (type, amount)=>{\n        setValue(displayValue.cycle(type, amount, placeholder, displaySegments));\n    };\n    let builtinValidation = (0, $cV3Es$useMemo)(()=>(0, $8b141f2f71e88f85$export$f18627323ab57ac0)(value, minValue, maxValue, isDateUnavailable, formatOpts), [\n        value,\n        minValue,\n        maxValue,\n        isDateUnavailable,\n        formatOpts\n    ]);\n    let validation = (0, $fd2148440a13ec26$export$fc1a364ae1f3ff10)({\n        ...props,\n        value: value,\n        builtinValidation: builtinValidation\n    });\n    let isValueInvalid = validation.displayValidation.isInvalid;\n    let validationState = props.validationState || (isValueInvalid ? 'invalid' : null);\n    return {\n        ...validation,\n        value: calendarValue,\n        defaultValue: props.defaultValue ?? initialValue,\n        dateValue: dateValue,\n        calendar: calendar,\n        setValue: setValue,\n        segments: segments,\n        dateFormatter: dateFormatter,\n        validationState: validationState,\n        isInvalid: isValueInvalid,\n        granularity: granularity,\n        maxGranularity: props.maxGranularity ?? 'year',\n        isDisabled: isDisabled,\n        isReadOnly: isReadOnly,\n        isRequired: isRequired,\n        increment (part) {\n            adjustSegment(part, 1);\n        },\n        decrement (part) {\n            adjustSegment(part, -1);\n        },\n        incrementPage (part) {\n            adjustSegment(part, $8e7461aabf74661f$var$PAGE_STEP[part] || 1);\n        },\n        decrementPage (part) {\n            adjustSegment(part, -($8e7461aabf74661f$var$PAGE_STEP[part] || 1));\n        },\n        incrementToMax (part) {\n            let maxValue = part === 'hour' && hourCycle === 'h12' ? 11 : displayValue.getSegmentLimits(part).maxValue;\n            setValue(displayValue.set(part, maxValue, placeholder));\n        },\n        decrementToMin (part) {\n            let minValue = part === 'hour' && hourCycle === 'h12' ? 12 : displayValue.getSegmentLimits(part).minValue;\n            setValue(displayValue.set(part, minValue, placeholder));\n        },\n        setSegment (part, v) {\n            setValue(displayValue.set(part, v, placeholder));\n        },\n        confirmPlaceholder () {\n            if (props.isDisabled || props.isReadOnly) return;\n            // If the display value is complete but invalid, we need to constrain it and emit onChange on blur.\n            if (displayValue.isComplete(displaySegments)) {\n                let dateValue = displayValue.toValue(calendarValue ?? placeholder);\n                let newDateValue = (0, $cV3Es$toCalendar)(dateValue, v?.calendar || new (0, $cV3Es$GregorianCalendar)());\n                if (!value || newDateValue.compare(value) !== 0) setDate(newDateValue);\n                setDisplayValue(new (0, $0e8931c783099b4f$export$ae165b50d181e1ef)(calendar, hourCycle, calendarValue));\n            }\n        },\n        clearSegment (part) {\n            let value = displayValue;\n            if (part !== 'timeZoneName' && part !== 'literal') value = displayValue.clear(part);\n            setValue(value);\n        },\n        formatValue (fieldOptions) {\n            if (!calendarValue) return '';\n            let formatOptions = (0, $8b141f2f71e88f85$export$7e319ea407e63bc0)(fieldOptions, formatOpts);\n            let formatter = new (0, $cV3Es$DateFormatter)(locale, formatOptions);\n            return formatter.format(dateValue);\n        },\n        getDateFormatter (locale, formatOptions) {\n            let newOptions = {\n                ...formatOpts,\n                ...formatOptions\n            };\n            let newFormatOptions = (0, $8b141f2f71e88f85$export$7e319ea407e63bc0)({}, newOptions);\n            return new (0, $cV3Es$DateFormatter)(locale, newFormatOptions);\n        }\n    };\n}\nfunction $8e7461aabf74661f$var$processSegments(dateValue, displayValue, dateFormatter, resolvedOptions, calendar, locale, granularity) {\n    let timeValue = [\n        'hour',\n        'minute',\n        'second'\n    ];\n    let segments = dateFormatter.formatToParts(dateValue);\n    // In order to allow formatting temporarily invalid dates during editing (e.g. February 30th),\n    // use a NumberFormatter to manually format segments directly from raw numbers.\n    // When the user blurs the date field, the invalid segments will be constrained.\n    let numberFormatter = new (0, $cV3Es$NumberFormatter)(locale, {\n        useGrouping: false\n    });\n    let twoDigitFormatter = new (0, $cV3Es$NumberFormatter)(locale, {\n        useGrouping: false,\n        minimumIntegerDigits: 2\n    });\n    for (let segment of segments)if (segment.type === 'year' || segment.type === 'month' || segment.type === 'day' || segment.type === 'hour') {\n        let value = displayValue[segment.type] ?? 0;\n        if (resolvedOptions[segment.type] === '2-digit') segment.value = twoDigitFormatter.format(value);\n        else segment.value = numberFormatter.format(value);\n    }\n    let processedSegments = [];\n    for (let segment of segments){\n        let type = $8e7461aabf74661f$var$TYPE_MAPPING[segment.type] || segment.type;\n        let isEditable = $8e7461aabf74661f$var$EDITABLE_SEGMENTS[type];\n        if (type === 'era' && calendar.getEras().length === 1) isEditable = false;\n        let isPlaceholder = $8e7461aabf74661f$var$EDITABLE_SEGMENTS[type] && displayValue[segment.type] == null;\n        let placeholder = $8e7461aabf74661f$var$EDITABLE_SEGMENTS[type] ? (0, $8e5fbb9a25791ca0$export$d3f5c5e0a5023fa0)(type, segment.value, locale) : null;\n        let dateSegment = {\n            type: type,\n            text: isPlaceholder ? placeholder : segment.value,\n            ...displayValue.getSegmentLimits(type),\n            isPlaceholder: isPlaceholder,\n            placeholder: placeholder,\n            isEditable: isEditable\n        };\n        // There is an issue in RTL languages where time fields render (minute:hour) instead of (hour:minute).\n        // To force an LTR direction on the time field since, we wrap the time segments in LRI (left-to-right) isolate unicode. See https://www.w3.org/International/questions/qa-bidi-unicode-controls.\n        // These unicode characters will be added to the array of processed segments as literals and will mark the start and end of the embedded direction change.\n        if (type === 'hour') {\n            // This marks the start of the embedded direction change.\n            processedSegments.push({\n                type: 'literal',\n                text: '\\u2066',\n                isPlaceholder: false,\n                placeholder: '',\n                isEditable: false\n            });\n            processedSegments.push(dateSegment);\n            // This marks the end of the embedded direction change in the case that the granularity it set to \"hour\".\n            if (type === granularity) processedSegments.push({\n                type: 'literal',\n                text: '\\u2069',\n                isPlaceholder: false,\n                placeholder: '',\n                isEditable: false\n            });\n        } else if (timeValue.includes(type) && type === granularity) {\n            processedSegments.push(dateSegment);\n            // This marks the end of the embedded direction change.\n            processedSegments.push({\n                type: 'literal',\n                text: '\\u2069',\n                isPlaceholder: false,\n                placeholder: '',\n                isEditable: false\n            });\n        } else // We only want to \"wrap\" the unicode around segments that are hour, minute, or second. If they aren't, just process as normal.\n        processedSegments.push(dateSegment);\n    }\n    return processedSegments;\n}\n\n\nexport {$8e7461aabf74661f$export$60e84778edff6d26 as useDateFieldState};\n//# sourceMappingURL=useDateFieldState.mjs.map\n","import {dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, Provider as $7230ffa83bc0c2cf$export$2881499e37b75b9a, removeDataAttributes as $7230ffa83bc0c2cf$export$ef03459518577ad4, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415, useRenderProps as $7230ffa83bc0c2cf$export$4d86445c2cf5e3, useSlot as $7230ffa83bc0c2cf$export$9d4c57ee4c6ffdd8, useSlottedContext as $7230ffa83bc0c2cf$export$fabf2dc03a41866e} from \"./utils.mjs\";\nimport {FieldErrorContext as $1f3c3b1a70cec653$export$ff05c3ac10437e03} from \"./FieldError.mjs\";\nimport {FormContext as $cdaed739b1139372$export$c24727297075ec6a} from \"./Form.mjs\";\nimport {Group as $3a442827418ebe87$export$eb2fcfdbd7ba97d4, GroupContext as $3a442827418ebe87$export$f9c6924e160136d1} from \"./Group.mjs\";\nimport {HiddenDateInput as $5a15223dacad897a$export$eefa3e19139f00f3} from \"./HiddenDateInput.mjs\";\nimport {Input as $41fb335299a4a39e$export$f5b8910cec6cf069, InputContext as $41fb335299a4a39e$export$37fb8590cf2c088c} from \"./Input.mjs\";\nimport {LabelContext as $43a3b93638fe5db9$export$75b6ee27786ba447} from \"./Label.mjs\";\nimport {TextContext as $efe09c6d1c304b50$export$9afb8bc826b033ea} from \"./Text.mjs\";\nimport {useDateField as $lX0XJ$useDateField, useDateSegment as $lX0XJ$useDateSegment} from \"react-aria/useDateField\";\nimport {useTimeField as $lX0XJ$useTimeField} from \"react-aria/useTimeField\";\nimport {createCalendar as $lX0XJ$createCalendar} from \"@internationalized/date\";\nimport {useDateFieldState as $lX0XJ$useDateFieldState} from \"react-stately/useDateFieldState\";\nimport {filterDOMProps as $lX0XJ$filterDOMProps} from \"react-aria/filterDOMProps\";\nimport {mergeProps as $lX0XJ$mergeProps} from \"react-aria/mergeProps\";\nimport $lX0XJ$react, {createContext as $lX0XJ$createContext, forwardRef as $lX0XJ$forwardRef, useRef as $lX0XJ$useRef, useContext as $lX0XJ$useContext, cloneElement as $lX0XJ$cloneElement} from \"react\";\nimport {useTimeFieldState as $lX0XJ$useTimeFieldState} from \"react-stately/useTimeFieldState\";\nimport {useFocusRing as $lX0XJ$useFocusRing} from \"react-aria/useFocusRing\";\nimport {useHover as $lX0XJ$useHover} from \"react-aria/useHover\";\nimport {useLocale as $lX0XJ$useLocale} from \"react-aria/I18nProvider\";\nimport {useObjectRef as $lX0XJ$useObjectRef} from \"react-aria/useObjectRef\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst $5400c097f4765e59$export$7b3e670c86da5fe8 = /*#__PURE__*/ (0, $lX0XJ$createContext)(null);\nconst $5400c097f4765e59$export$8e17ddc448e87c1e = /*#__PURE__*/ (0, $lX0XJ$createContext)(null);\nconst $5400c097f4765e59$export$3b08bebcf796eea0 = /*#__PURE__*/ (0, $lX0XJ$createContext)(null);\nconst $5400c097f4765e59$export$5d8dc44abd10a920 = /*#__PURE__*/ (0, $lX0XJ$createContext)(null);\nconst $5400c097f4765e59$export$d9781c7894a82487 = /*#__PURE__*/ (0, $lX0XJ$forwardRef)(function DateField(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $5400c097f4765e59$export$7b3e670c86da5fe8);\n    let { validationBehavior: formValidationBehavior } = (0, $7230ffa83bc0c2cf$export$fabf2dc03a41866e)((0, $cdaed739b1139372$export$c24727297075ec6a)) || {};\n    let validationBehavior = props.validationBehavior ?? formValidationBehavior ?? 'native';\n    let { locale: locale } = (0, $lX0XJ$useLocale)();\n    let state = (0, $lX0XJ$useDateFieldState)({\n        ...props,\n        locale: locale,\n        createCalendar: $lX0XJ$createCalendar,\n        validationBehavior: validationBehavior\n    });\n    let fieldRef = (0, $lX0XJ$useRef)(null);\n    let [labelRef, label] = (0, $7230ffa83bc0c2cf$export$9d4c57ee4c6ffdd8)(!props['aria-label'] && !props['aria-labelledby']);\n    let inputRef = (0, $lX0XJ$useRef)(null);\n    let { labelProps: labelProps, fieldProps: fieldProps, inputProps: inputProps, descriptionProps: descriptionProps, errorMessageProps: errorMessageProps, ...validation } = (0, $lX0XJ$useDateField)({\n        ...(0, $7230ffa83bc0c2cf$export$ef03459518577ad4)(props),\n        label: label,\n        inputRef: inputRef,\n        validationBehavior: validationBehavior\n    }, state, fieldRef);\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...(0, $7230ffa83bc0c2cf$export$ef03459518577ad4)(props),\n        values: {\n            state: state,\n            isInvalid: state.isInvalid,\n            isDisabled: state.isDisabled,\n            isReadOnly: state.isReadOnly,\n            isRequired: props.isRequired || false\n        },\n        defaultClassName: 'react-aria-DateField'\n    });\n    let DOMProps = (0, $lX0XJ$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.id;\n    return /*#__PURE__*/ (0, $lX0XJ$react).createElement((0, $7230ffa83bc0c2cf$export$2881499e37b75b9a), {\n        values: [\n            [\n                $5400c097f4765e59$export$3b08bebcf796eea0,\n                state\n            ],\n            [\n                (0, $3a442827418ebe87$export$f9c6924e160136d1),\n                {\n                    ...fieldProps,\n                    ref: fieldRef,\n                    isInvalid: state.isInvalid,\n                    isDisabled: state.isDisabled\n                }\n            ],\n            [\n                (0, $41fb335299a4a39e$export$37fb8590cf2c088c),\n                {\n                    ...inputProps,\n                    ref: inputRef\n                }\n            ],\n            [\n                (0, $43a3b93638fe5db9$export$75b6ee27786ba447),\n                {\n                    ...labelProps,\n                    ref: labelRef,\n                    elementType: 'span'\n                }\n            ],\n            [\n                (0, $efe09c6d1c304b50$export$9afb8bc826b033ea),\n                {\n                    slots: {\n                        description: descriptionProps,\n                        errorMessage: errorMessageProps\n                    }\n                }\n            ],\n            [\n                (0, $1f3c3b1a70cec653$export$ff05c3ac10437e03),\n                validation\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $lX0XJ$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...DOMProps,\n        ...renderProps,\n        ref: ref,\n        slot: props.slot || undefined,\n        \"data-invalid\": state.isInvalid || undefined,\n        \"data-disabled\": state.isDisabled || undefined,\n        \"data-readonly\": state.isReadOnly || undefined,\n        \"data-required\": props.isRequired || undefined\n    }), /*#__PURE__*/ (0, $lX0XJ$react).createElement((0, $5a15223dacad897a$export$eefa3e19139f00f3), {\n        autoComplete: props.autoComplete,\n        name: props.name,\n        isDisabled: props.isDisabled,\n        state: state\n    }));\n});\nconst $5400c097f4765e59$export$5eaee2322dd727eb = /*#__PURE__*/ (0, $lX0XJ$forwardRef)(function TimeField(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $5400c097f4765e59$export$8e17ddc448e87c1e);\n    let { validationBehavior: formValidationBehavior } = (0, $7230ffa83bc0c2cf$export$fabf2dc03a41866e)((0, $cdaed739b1139372$export$c24727297075ec6a)) || {};\n    let validationBehavior = props.validationBehavior ?? formValidationBehavior ?? 'native';\n    let { locale: locale } = (0, $lX0XJ$useLocale)();\n    let state = (0, $lX0XJ$useTimeFieldState)({\n        ...props,\n        locale: locale,\n        validationBehavior: validationBehavior\n    });\n    let fieldRef = (0, $lX0XJ$useRef)(null);\n    let [labelRef, label] = (0, $7230ffa83bc0c2cf$export$9d4c57ee4c6ffdd8)(!props['aria-label'] && !props['aria-labelledby']);\n    let inputRef = (0, $lX0XJ$useRef)(null);\n    let { labelProps: labelProps, fieldProps: fieldProps, inputProps: inputProps, descriptionProps: descriptionProps, errorMessageProps: errorMessageProps, ...validation } = (0, $lX0XJ$useTimeField)({\n        ...(0, $7230ffa83bc0c2cf$export$ef03459518577ad4)(props),\n        label: label,\n        inputRef: inputRef,\n        validationBehavior: validationBehavior\n    }, state, fieldRef);\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        values: {\n            state: state,\n            isInvalid: state.isInvalid,\n            isDisabled: state.isDisabled,\n            isReadOnly: state.isReadOnly,\n            isRequired: props.isRequired || false\n        },\n        defaultClassName: 'react-aria-TimeField'\n    });\n    let DOMProps = (0, $lX0XJ$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.id;\n    return /*#__PURE__*/ (0, $lX0XJ$react).createElement((0, $7230ffa83bc0c2cf$export$2881499e37b75b9a), {\n        values: [\n            [\n                $5400c097f4765e59$export$5d8dc44abd10a920,\n                state\n            ],\n            [\n                (0, $3a442827418ebe87$export$f9c6924e160136d1),\n                {\n                    ...fieldProps,\n                    ref: fieldRef,\n                    isInvalid: state.isInvalid,\n                    isDisabled: state.isDisabled\n                }\n            ],\n            [\n                (0, $41fb335299a4a39e$export$37fb8590cf2c088c),\n                {\n                    ...inputProps,\n                    ref: inputRef\n                }\n            ],\n            [\n                (0, $43a3b93638fe5db9$export$75b6ee27786ba447),\n                {\n                    ...labelProps,\n                    ref: labelRef,\n                    elementType: 'span'\n                }\n            ],\n            [\n                (0, $efe09c6d1c304b50$export$9afb8bc826b033ea),\n                {\n                    slots: {\n                        description: descriptionProps,\n                        errorMessage: errorMessageProps\n                    }\n                }\n            ],\n            [\n                (0, $1f3c3b1a70cec653$export$ff05c3ac10437e03),\n                validation\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $lX0XJ$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...DOMProps,\n        ...renderProps,\n        ref: ref,\n        slot: props.slot || undefined,\n        \"data-invalid\": state.isInvalid || undefined,\n        \"data-disabled\": state.isDisabled || undefined,\n        \"data-readonly\": state.isReadOnly || undefined,\n        \"data-required\": props.isRequired || undefined\n    }));\n});\nconst $5400c097f4765e59$export$7edc06cf1783b30f = /*#__PURE__*/ (0, $lX0XJ$forwardRef)(function DateInput(props, ref) {\n    // If state is provided by DateField/TimeField, just render.\n    // Otherwise (e.g. in DatePicker), we need to call hooks and create state ourselves.\n    let dateFieldState = (0, $lX0XJ$useContext)($5400c097f4765e59$export$3b08bebcf796eea0);\n    let timeFieldState = (0, $lX0XJ$useContext)($5400c097f4765e59$export$5d8dc44abd10a920);\n    return dateFieldState || timeFieldState ? /*#__PURE__*/ (0, $lX0XJ$react).createElement($5400c097f4765e59$var$DateInputInner, {\n        ...props,\n        ref: ref\n    }) : /*#__PURE__*/ (0, $lX0XJ$react).createElement($5400c097f4765e59$var$DateInputStandalone, {\n        ...props,\n        ref: ref\n    });\n});\nconst $5400c097f4765e59$var$DateInputStandalone = /*#__PURE__*/ (0, $lX0XJ$forwardRef)((props, ref)=>{\n    let [dateFieldProps, fieldRef] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)({\n        slot: props.slot\n    }, ref, $5400c097f4765e59$export$7b3e670c86da5fe8);\n    let { locale: locale } = (0, $lX0XJ$useLocale)();\n    let state = (0, $lX0XJ$useDateFieldState)({\n        ...dateFieldProps,\n        locale: locale,\n        createCalendar: $lX0XJ$createCalendar\n    });\n    let inputRef = (0, $lX0XJ$useRef)(null);\n    let { fieldProps: fieldProps, inputProps: inputProps } = (0, $lX0XJ$useDateField)({\n        ...dateFieldProps,\n        inputRef: inputRef\n    }, state, fieldRef);\n    return /*#__PURE__*/ (0, $lX0XJ$react).createElement((0, $7230ffa83bc0c2cf$export$2881499e37b75b9a), {\n        values: [\n            [\n                $5400c097f4765e59$export$3b08bebcf796eea0,\n                state\n            ],\n            [\n                (0, $41fb335299a4a39e$export$37fb8590cf2c088c),\n                {\n                    ...inputProps,\n                    ref: inputRef\n                }\n            ],\n            [\n                (0, $3a442827418ebe87$export$f9c6924e160136d1),\n                {\n                    ...fieldProps,\n                    ref: fieldRef,\n                    isInvalid: state.isInvalid,\n                    isDisabled: state.isDisabled\n                }\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $lX0XJ$react).createElement($5400c097f4765e59$var$DateInputInner, props));\n});\nconst $5400c097f4765e59$var$DateInputInner = /*#__PURE__*/ (0, $lX0XJ$forwardRef)((props, ref)=>{\n    let { className: className, children: children } = props;\n    let dateFieldState = (0, $lX0XJ$useContext)($5400c097f4765e59$export$3b08bebcf796eea0);\n    let timeFieldState = (0, $lX0XJ$useContext)($5400c097f4765e59$export$5d8dc44abd10a920);\n    let state = dateFieldState ?? timeFieldState;\n    return /*#__PURE__*/ (0, $lX0XJ$react).createElement((0, $lX0XJ$react).Fragment, null, /*#__PURE__*/ (0, $lX0XJ$react).createElement((0, $3a442827418ebe87$export$eb2fcfdbd7ba97d4), {\n        ...props,\n        ref: ref,\n        slot: props.slot || undefined,\n        className: className ?? 'react-aria-DateInput',\n        isReadOnly: state.isReadOnly,\n        isInvalid: state.isInvalid,\n        isDisabled: state.isDisabled\n    }, state.segments.map((segment, i)=>/*#__PURE__*/ (0, $lX0XJ$cloneElement)(children(segment), {\n            key: i\n        }))), /*#__PURE__*/ (0, $lX0XJ$react).createElement((0, $41fb335299a4a39e$export$f5b8910cec6cf069), {\n        className: \"\"\n    }));\n});\nconst $5400c097f4765e59$export$336ab7fa954c4b5f = /*#__PURE__*/ (0, $lX0XJ$forwardRef)(function DateSegment({ segment: segment, ...otherProps }, ref) {\n    let dateFieldState = (0, $lX0XJ$useContext)($5400c097f4765e59$export$3b08bebcf796eea0);\n    let timeFieldState = (0, $lX0XJ$useContext)($5400c097f4765e59$export$5d8dc44abd10a920);\n    let state = dateFieldState ?? timeFieldState;\n    let domRef = (0, $lX0XJ$useObjectRef)(ref);\n    let { segmentProps: segmentProps } = (0, $lX0XJ$useDateSegment)(segment, state, domRef);\n    let { focusProps: focusProps, isFocused: isFocused, isFocusVisible: isFocusVisible } = (0, $lX0XJ$useFocusRing)();\n    let { hoverProps: hoverProps, isHovered: isHovered } = (0, $lX0XJ$useHover)({\n        ...otherProps,\n        isDisabled: state.isDisabled || segment.type === 'literal'\n    });\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...otherProps,\n        values: {\n            ...segment,\n            isReadOnly: state.isReadOnly,\n            isInvalid: state.isInvalid,\n            isDisabled: state.isDisabled,\n            isHovered: isHovered,\n            isFocused: isFocused,\n            isFocusVisible: isFocusVisible\n        },\n        defaultChildren: segment.text,\n        defaultClassName: 'react-aria-DateSegment'\n    });\n    return /*#__PURE__*/ (0, $lX0XJ$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).span, {\n        ...(0, $lX0XJ$mergeProps)((0, $lX0XJ$filterDOMProps)(otherProps, {\n            global: true\n        }), segmentProps, focusProps, hoverProps),\n        ...renderProps,\n        style: segmentProps.style,\n        ref: domRef,\n        \"data-placeholder\": segment.isPlaceholder || undefined,\n        \"data-invalid\": state.isInvalid || undefined,\n        \"data-readonly\": state.isReadOnly || undefined,\n        \"data-disabled\": state.isDisabled || undefined,\n        \"data-type\": segment.type,\n        \"data-hovered\": isHovered || undefined,\n        \"data-focused\": isFocused || undefined,\n        \"data-focus-visible\": isFocusVisible || undefined\n    });\n});\n\n\nexport {$5400c097f4765e59$export$7b3e670c86da5fe8 as DateFieldContext, $5400c097f4765e59$export$8e17ddc448e87c1e as TimeFieldContext, $5400c097f4765e59$export$3b08bebcf796eea0 as DateFieldStateContext, $5400c097f4765e59$export$5d8dc44abd10a920 as TimeFieldStateContext, $5400c097f4765e59$export$d9781c7894a82487 as DateField, $5400c097f4765e59$export$5eaee2322dd727eb as TimeField, $5400c097f4765e59$export$7edc06cf1783b30f as DateInput, $5400c097f4765e59$export$336ab7fa954c4b5f as DateSegment};\n//# sourceMappingURL=DateField.mjs.map\n","import {useEvent as $600b3cf69ae46262$export$90fc3a17d93f704c} from \"../utils/useEvent.mjs\";\nimport {useId as $390e54f620492c70$export$f680877a34711e37} from \"../utils/useId.mjs\";\nimport {useIsSSR as $c7eafbbe1ea5834e$export$535bd6ca7f90a273} from \"../ssr/SSRProvider.mjs\";\nimport {useLayoutEffect as $c4867b2f328c2698$export$e5c5a5f917a5871c} from \"../utils/useLayoutEffect.mjs\";\nimport {flushSync as $cbhof$flushSync} from \"react-dom\";\nimport {useRef as $cbhof$useRef, useCallback as $cbhof$useCallback, useEffect as $cbhof$useEffect} from \"react\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\nfunction $89a3495b7d82e671$export$6e3e27031a30522f(props, state, ref) {\n    let { isDisabled: isDisabled } = props;\n    let triggerId = (0, $390e54f620492c70$export$f680877a34711e37)();\n    let panelId = (0, $390e54f620492c70$export$f680877a34711e37)();\n    let isSSR = (0, $c7eafbbe1ea5834e$export$535bd6ca7f90a273)();\n    let raf = (0, $cbhof$useRef)(null);\n    let handleBeforeMatch = (0, $cbhof$useCallback)(()=>{\n        // Wait a frame to revert browser's removal of hidden attribute\n        raf.current = requestAnimationFrame(()=>{\n            if (ref.current) ref.current.setAttribute('hidden', 'until-found');\n        });\n        // Force sync state update\n        (0, $cbhof$flushSync)(()=>{\n            state.toggle();\n        });\n    }, [\n        ref,\n        state\n    ]);\n    // @ts-ignore https://github.com/facebook/react/pull/24741\n    (0, $600b3cf69ae46262$export$90fc3a17d93f704c)(ref, 'beforematch', handleBeforeMatch);\n    let isExpandedRef = (0, $cbhof$useRef)(null);\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        // Cancel any pending RAF to prevent stale updates\n        if (raf.current) cancelAnimationFrame(raf.current);\n        if (ref.current && !isSSR) {\n            let panel = ref.current;\n            if (isExpandedRef.current == null || typeof panel.getAnimations !== 'function') {\n                // On initial render (and in tests), set attributes without animation.\n                if (state.isExpanded) {\n                    panel.removeAttribute('hidden');\n                    panel.style.setProperty('--disclosure-panel-width', 'auto');\n                    panel.style.setProperty('--disclosure-panel-height', 'auto');\n                } else {\n                    panel.setAttribute('hidden', 'until-found');\n                    panel.style.setProperty('--disclosure-panel-width', '0px');\n                    panel.style.setProperty('--disclosure-panel-height', '0px');\n                }\n            } else if (state.isExpanded !== isExpandedRef.current) {\n                if (state.isExpanded) {\n                    panel.removeAttribute('hidden');\n                    // Set the width and height as pixels so they can be animated.\n                    panel.style.setProperty('--disclosure-panel-width', panel.scrollWidth + 'px');\n                    panel.style.setProperty('--disclosure-panel-height', panel.scrollHeight + 'px');\n                    Promise.all(panel.getAnimations().map((a)=>a.finished)).then(()=>{\n                        // After the animations complete, switch back to auto so the content can resize.\n                        panel.style.setProperty('--disclosure-panel-width', 'auto');\n                        panel.style.setProperty('--disclosure-panel-height', 'auto');\n                    }).catch(()=>{});\n                } else {\n                    panel.style.setProperty('--disclosure-panel-width', panel.scrollWidth + 'px');\n                    panel.style.setProperty('--disclosure-panel-height', panel.scrollHeight + 'px');\n                    // Force style re-calculation to trigger animations.\n                    window.getComputedStyle(panel).height;\n                    // Animate to zero size.\n                    panel.style.setProperty('--disclosure-panel-width', '0px');\n                    panel.style.setProperty('--disclosure-panel-height', '0px');\n                    // Wait for animations to apply the hidden attribute.\n                    Promise.all(panel.getAnimations().map((a)=>a.finished)).then(()=>panel.setAttribute('hidden', 'until-found')).catch(()=>{});\n                }\n            }\n            isExpandedRef.current = state.isExpanded;\n        }\n    }, [\n        isDisabled,\n        ref,\n        state.isExpanded,\n        isSSR\n    ]);\n    (0, $cbhof$useEffect)(()=>{\n        return ()=>{\n            if (raf.current) cancelAnimationFrame(raf.current);\n        };\n    }, []);\n    return {\n        buttonProps: {\n            id: triggerId,\n            'aria-expanded': state.isExpanded,\n            'aria-controls': panelId,\n            onPress: (e)=>{\n                if (!isDisabled && e.pointerType !== 'keyboard') state.toggle();\n            },\n            isDisabled: isDisabled,\n            onPressStart (e) {\n                if (e.pointerType === 'keyboard' && !isDisabled) state.toggle();\n            }\n        },\n        panelProps: {\n            id: panelId,\n            // This can be overridden at the panel element level.\n            role: 'group',\n            'aria-labelledby': triggerId,\n            'aria-hidden': !state.isExpanded,\n            hidden: isSSR ? !state.isExpanded : undefined\n        }\n    };\n}\n\n\nexport {$89a3495b7d82e671$export$6e3e27031a30522f as useDisclosure};\n//# sourceMappingURL=useDisclosure.mjs.map\n","import {useControlledState as $3e6197669829fe11$export$40bfa8c7b0832715} from \"../utils/useControlledState.mjs\";\nimport {useMemo as $ilT6J$useMemo, useEffect as $ilT6J$useEffect} from \"react\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $29a18fa139197b5c$export$f36461af0ef4707d(props) {\n    let { allowsMultipleExpanded: allowsMultipleExpanded = false, isDisabled: isDisabled = false } = props;\n    let [expandedKeys, setExpandedKeys] = (0, $3e6197669829fe11$export$40bfa8c7b0832715)((0, $ilT6J$useMemo)(()=>props.expandedKeys ? new Set(props.expandedKeys) : undefined, [\n        props.expandedKeys\n    ]), (0, $ilT6J$useMemo)(()=>props.defaultExpandedKeys ? new Set(props.defaultExpandedKeys) : new Set(), [\n        props.defaultExpandedKeys\n    ]), props.onExpandedChange);\n    (0, $ilT6J$useEffect)(()=>{\n        // Ensure only one item is expanded if allowsMultipleExpanded is false.\n        if (!allowsMultipleExpanded && expandedKeys.size > 1) {\n            let firstKey = expandedKeys.values().next().value;\n            if (firstKey != null) setExpandedKeys(new Set([\n                firstKey\n            ]));\n        }\n    });\n    return {\n        allowsMultipleExpanded: allowsMultipleExpanded,\n        isDisabled: isDisabled,\n        expandedKeys: expandedKeys,\n        setExpandedKeys: setExpandedKeys,\n        toggleKey (key) {\n            let keys;\n            if (allowsMultipleExpanded) {\n                keys = new Set(expandedKeys);\n                if (keys.has(key)) keys.delete(key);\n                else keys.add(key);\n            } else keys = new Set(expandedKeys.has(key) ? [] : [\n                key\n            ]);\n            setExpandedKeys(keys);\n        }\n    };\n}\n\n\nexport {$29a18fa139197b5c$export$f36461af0ef4707d as useDisclosureGroupState};\n//# sourceMappingURL=useDisclosureGroupState.mjs.map\n","import {useControlledState as $3e6197669829fe11$export$40bfa8c7b0832715} from \"../utils/useControlledState.mjs\";\nimport {useCallback as $aw5JV$useCallback} from \"react\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $086b1fd51041276f$export$3fcbf6e4407997e0(props) {\n    let [isExpanded, setExpanded] = (0, $3e6197669829fe11$export$40bfa8c7b0832715)(props.isExpanded, props.defaultExpanded || false, props.onExpandedChange);\n    const expand = (0, $aw5JV$useCallback)(()=>{\n        setExpanded(true);\n    }, [\n        setExpanded\n    ]);\n    const collapse = (0, $aw5JV$useCallback)(()=>{\n        setExpanded(false);\n    }, [\n        setExpanded\n    ]);\n    const toggle = (0, $aw5JV$useCallback)(()=>{\n        setExpanded(!isExpanded);\n    }, [\n        setExpanded,\n        isExpanded\n    ]);\n    return {\n        isExpanded: isExpanded,\n        setExpanded: setExpanded,\n        expand: expand,\n        collapse: collapse,\n        toggle: toggle\n    };\n}\n\n\nexport {$086b1fd51041276f$export$3fcbf6e4407997e0 as useDisclosureState};\n//# sourceMappingURL=useDisclosureState.mjs.map\n","import {ButtonContext as $7705c033048f6da7$export$24d547caef80ccd1} from \"./Button.mjs\";\nimport {DEFAULT_SLOT as $7230ffa83bc0c2cf$export$c62b8e45d58ddad9, dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, Provider as $7230ffa83bc0c2cf$export$2881499e37b75b9a, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415, useRenderProps as $7230ffa83bc0c2cf$export$4d86445c2cf5e3} from \"./utils.mjs\";\nimport {useDisclosure as $evqUs$useDisclosure} from \"react-aria/useDisclosure\";\nimport {useDisclosureGroupState as $evqUs$useDisclosureGroupState} from \"react-stately/useDisclosureGroupState\";\nimport {useDisclosureState as $evqUs$useDisclosureState} from \"react-stately/useDisclosureState\";\nimport {filterDOMProps as $evqUs$filterDOMProps} from \"react-aria/filterDOMProps\";\nimport {mergeProps as $evqUs$mergeProps} from \"react-aria/mergeProps\";\nimport {mergeRefs as $evqUs$mergeRefs} from \"react-aria/mergeRefs\";\nimport $evqUs$react, {createContext as $evqUs$createContext, forwardRef as $evqUs$forwardRef, useContext as $evqUs$useContext} from \"react\";\nimport {useFocusRing as $evqUs$useFocusRing} from \"react-aria/useFocusRing\";\nimport {useId as $evqUs$useId} from \"react-aria/useId\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\nconst $a3e16eab0ea4036c$export$1d40e3e0cc4d5de = /*#__PURE__*/ (0, $evqUs$createContext)(null);\nconst $a3e16eab0ea4036c$export$944aceb4f8c89f10 = /*#__PURE__*/ (0, $evqUs$forwardRef)(function DisclosureGroup(props, ref) {\n    let state = (0, $evqUs$useDisclosureGroupState)(props);\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        defaultClassName: 'react-aria-DisclosureGroup',\n        values: {\n            isDisabled: state.isDisabled,\n            state: state\n        }\n    });\n    let domProps = (0, $evqUs$filterDOMProps)(props, {\n        global: true\n    });\n    return /*#__PURE__*/ (0, $evqUs$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...domProps,\n        ...renderProps,\n        ref: ref,\n        \"data-disabled\": props.isDisabled || undefined\n    }, /*#__PURE__*/ (0, $evqUs$react).createElement($a3e16eab0ea4036c$export$1d40e3e0cc4d5de.Provider, {\n        value: state\n    }, renderProps.children));\n});\nconst $a3e16eab0ea4036c$export$d665dd135a51b28a = /*#__PURE__*/ (0, $evqUs$createContext)(null);\nconst $a3e16eab0ea4036c$export$dab3ea4a6ef094da = /*#__PURE__*/ (0, $evqUs$createContext)(null);\nconst $a3e16eab0ea4036c$var$InternalDisclosureContext = /*#__PURE__*/ (0, $evqUs$createContext)(null);\nconst $a3e16eab0ea4036c$export$74a362b31437ec83 = /*#__PURE__*/ (0, $evqUs$forwardRef)(function Disclosure(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $a3e16eab0ea4036c$export$d665dd135a51b28a);\n    let groupState = (0, $evqUs$useContext)($a3e16eab0ea4036c$export$1d40e3e0cc4d5de);\n    let { id: id, ...otherProps } = props;\n    // Generate an id if one wasn't provided.\n    // (can't pass id into useId since it can also be a number)\n    let defaultId = (0, $evqUs$useId)();\n    id ||= defaultId;\n    let isExpanded = groupState ? groupState.expandedKeys.has(id) : props.isExpanded;\n    let state = (0, $evqUs$useDisclosureState)({\n        ...props,\n        isExpanded: isExpanded,\n        onExpandedChange (isExpanded) {\n            if (groupState) groupState.toggleKey(id);\n            props.onExpandedChange?.(isExpanded);\n        }\n    });\n    let panelRef = (0, $evqUs$react).useRef(null);\n    let isDisabled = props.isDisabled || groupState?.isDisabled || false;\n    let { buttonProps: buttonProps, panelProps: panelProps } = (0, $evqUs$useDisclosure)({\n        ...props,\n        isExpanded: isExpanded,\n        isDisabled: isDisabled\n    }, state, panelRef);\n    let { isFocusVisible: isFocusVisibleWithin, focusProps: focusWithinProps } = (0, $evqUs$useFocusRing)({\n        within: true\n    });\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        id: undefined,\n        defaultClassName: 'react-aria-Disclosure',\n        values: {\n            isExpanded: state.isExpanded,\n            isDisabled: isDisabled,\n            isFocusVisibleWithin: isFocusVisibleWithin,\n            state: state\n        }\n    });\n    let domProps = (0, $evqUs$filterDOMProps)(otherProps, {\n        global: true\n    });\n    return /*#__PURE__*/ (0, $evqUs$react).createElement((0, $7230ffa83bc0c2cf$export$2881499e37b75b9a), {\n        values: [\n            [\n                (0, $7705c033048f6da7$export$24d547caef80ccd1),\n                {\n                    slots: {\n                        [(0, $7230ffa83bc0c2cf$export$c62b8e45d58ddad9)]: {},\n                        trigger: buttonProps\n                    }\n                }\n            ],\n            [\n                $a3e16eab0ea4036c$var$InternalDisclosureContext,\n                {\n                    panelProps: panelProps,\n                    panelRef: panelRef\n                }\n            ],\n            [\n                $a3e16eab0ea4036c$export$dab3ea4a6ef094da,\n                state\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $evqUs$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...(0, $evqUs$mergeProps)(domProps, renderProps, focusWithinProps),\n        ref: ref,\n        \"data-expanded\": state.isExpanded || undefined,\n        \"data-disabled\": isDisabled || undefined,\n        \"data-focus-visible-within\": isFocusVisibleWithin || undefined\n    }, renderProps.children));\n});\nconst $a3e16eab0ea4036c$export$feabaa331e1d464c = /*#__PURE__*/ (0, $evqUs$forwardRef)(function DisclosurePanel(props, ref) {\n    let { role: role = 'group' } = props;\n    let { panelProps: panelProps, panelRef: panelRef } = (0, $evqUs$useContext)($a3e16eab0ea4036c$var$InternalDisclosureContext);\n    let { isFocusVisible: isFocusVisibleWithin, focusProps: focusWithinProps } = (0, $evqUs$useFocusRing)({\n        within: true\n    });\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        defaultClassName: 'react-aria-DisclosurePanel',\n        values: {\n            isFocusVisibleWithin: isFocusVisibleWithin\n        }\n    });\n    let DOMProps = (0, $evqUs$filterDOMProps)(props, {\n        global: true,\n        labelable: true\n    });\n    return /*#__PURE__*/ (0, $evqUs$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...(0, $evqUs$mergeProps)(DOMProps, renderProps, panelProps, focusWithinProps),\n        ref: (0, $evqUs$mergeRefs)(ref, panelRef),\n        role: role,\n        \"data-focus-visible-within\": isFocusVisibleWithin || undefined\n    }, /*#__PURE__*/ (0, $evqUs$react).createElement((0, $7230ffa83bc0c2cf$export$2881499e37b75b9a), {\n        values: [\n            [\n                (0, $7705c033048f6da7$export$24d547caef80ccd1),\n                null\n            ]\n        ]\n    }, props.children));\n});\n\n\nexport {$a3e16eab0ea4036c$export$1d40e3e0cc4d5de as DisclosureGroupStateContext, $a3e16eab0ea4036c$export$944aceb4f8c89f10 as DisclosureGroup, $a3e16eab0ea4036c$export$d665dd135a51b28a as DisclosureContext, $a3e16eab0ea4036c$export$dab3ea4a6ef094da as DisclosureStateContext, $a3e16eab0ea4036c$export$74a362b31437ec83 as Disclosure, $a3e16eab0ea4036c$export$feabaa331e1d464c as DisclosurePanel};\n//# sourceMappingURL=Disclosure.mjs.map\n","import {getFocusableTreeWalker as $535772f9d2c1f38d$export$2d6ec8fc375ceafa} from \"./FocusScope.mjs\";\nimport {useLayoutEffect as $c4867b2f328c2698$export$e5c5a5f917a5871c} from \"../utils/useLayoutEffect.mjs\";\nimport {useState as $Pt4LU$useState} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nfunction $bf14c9739fda2eb3$export$eac1895992b9f3d6(ref, options) {\n    let isDisabled = options?.isDisabled;\n    let [hasTabbableChild, setHasTabbableChild] = (0, $Pt4LU$useState)(false);\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        if (ref?.current && !isDisabled) {\n            let update = ()=>{\n                if (ref.current) {\n                    let walker = (0, $535772f9d2c1f38d$export$2d6ec8fc375ceafa)(ref.current, {\n                        tabbable: true\n                    });\n                    setHasTabbableChild(!!walker.nextNode());\n                }\n            };\n            update();\n            // Update when new elements are inserted, or the tabIndex/disabled attribute updates.\n            let observer = new MutationObserver(update);\n            observer.observe(ref.current, {\n                subtree: true,\n                childList: true,\n                attributes: true,\n                attributeFilter: [\n                    'tabIndex',\n                    'disabled'\n                ]\n            });\n            return ()=>{\n                // Disconnect mutation observer when a React update occurs on the top-level component\n                // so we update synchronously after re-rendering. Otherwise React will emit act warnings\n                // in tests since mutation observers fire asynchronously. The mutation observer is necessary\n                // so we also update if a child component re-renders and adds/removes something tabbable.\n                observer.disconnect();\n            };\n        }\n    });\n    return isDisabled ? false : hasTabbableChild;\n}\n\n\nexport {$bf14c9739fda2eb3$export$eac1895992b9f3d6 as useHasTabbableChild};\n//# sourceMappingURL=useHasTabbableChild.mjs.map\n","import {useOverlayTriggerState as $f11fb0bcf1b2687a$export$61c6a8c84e605fb6} from \"../overlays/useOverlayTriggerState.mjs\";\nimport {useState as $auOuY$useState, useMemo as $auOuY$useMemo, useRef as $auOuY$useRef, useEffect as $auOuY$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nconst $3834487504f4fc00$var$TOOLTIP_DELAY = 1500; // this seems to be a 1.5 second delay, check with design\nconst $3834487504f4fc00$var$TOOLTIP_COOLDOWN = 500;\nlet $3834487504f4fc00$var$tooltips = {};\nlet $3834487504f4fc00$var$tooltipId = 0;\nlet $3834487504f4fc00$var$globalWarmedUp = false;\nlet $3834487504f4fc00$var$globalWarmUpTimeout = null;\nlet $3834487504f4fc00$var$globalCooldownTimeout = null;\nfunction $3834487504f4fc00$export$4d40659c25ecb50b(props = {}) {\n    let { delay: delay = $3834487504f4fc00$var$TOOLTIP_DELAY, closeDelay: closeDelay = $3834487504f4fc00$var$TOOLTIP_COOLDOWN } = props;\n    let { isOpen: isOpen, open: open, close: close } = (0, $f11fb0bcf1b2687a$export$61c6a8c84e605fb6)(props);\n    // Whether the current open/close transition should skip its animation. Set when swapping\n    // between tooltips during the global warmup period.\n    let [shouldSkipAnimation, setIsInstant] = (0, $auOuY$useState)(false);\n    let id = (0, $auOuY$useMemo)(()=>`${++$3834487504f4fc00$var$tooltipId}`, []);\n    let closeTimeout = (0, $auOuY$useRef)(null);\n    let closeCallback = (0, $auOuY$useRef)(close);\n    let ensureTooltipEntry = ()=>{\n        $3834487504f4fc00$var$tooltips[id] = hideTooltip;\n    };\n    let closeOpenTooltips = ()=>{\n        for(let hideTooltipId in $3834487504f4fc00$var$tooltips)if (hideTooltipId !== id) {\n            // Close other open tooltips instantly (no exit animation), since they are being\n            // replaced by this one during the warmup period.\n            $3834487504f4fc00$var$tooltips[hideTooltipId](true, true);\n            delete $3834487504f4fc00$var$tooltips[hideTooltipId];\n        }\n    };\n    let showTooltip = (instant)=>{\n        if (closeTimeout.current) clearTimeout(closeTimeout.current);\n        closeTimeout.current = null;\n        closeOpenTooltips();\n        ensureTooltipEntry();\n        setIsInstant(!!instant);\n        $3834487504f4fc00$var$globalWarmedUp = true;\n        open();\n        if ($3834487504f4fc00$var$globalWarmUpTimeout) {\n            clearTimeout($3834487504f4fc00$var$globalWarmUpTimeout);\n            $3834487504f4fc00$var$globalWarmUpTimeout = null;\n        }\n        if ($3834487504f4fc00$var$globalCooldownTimeout) {\n            clearTimeout($3834487504f4fc00$var$globalCooldownTimeout);\n            $3834487504f4fc00$var$globalCooldownTimeout = null;\n        }\n    };\n    let hideTooltip = (immediate, instant)=>{\n        setIsInstant(!!instant);\n        if (immediate || closeDelay <= 0) {\n            if (closeTimeout.current) clearTimeout(closeTimeout.current);\n            closeTimeout.current = null;\n            closeCallback.current();\n        } else if (!closeTimeout.current) closeTimeout.current = setTimeout(()=>{\n            closeTimeout.current = null;\n            closeCallback.current();\n        }, closeDelay);\n        if ($3834487504f4fc00$var$globalWarmUpTimeout) {\n            clearTimeout($3834487504f4fc00$var$globalWarmUpTimeout);\n            $3834487504f4fc00$var$globalWarmUpTimeout = null;\n        }\n        if ($3834487504f4fc00$var$globalWarmedUp) {\n            if ($3834487504f4fc00$var$globalCooldownTimeout) clearTimeout($3834487504f4fc00$var$globalCooldownTimeout);\n            $3834487504f4fc00$var$globalCooldownTimeout = setTimeout(()=>{\n                delete $3834487504f4fc00$var$tooltips[id];\n                $3834487504f4fc00$var$globalCooldownTimeout = null;\n                $3834487504f4fc00$var$globalWarmedUp = false;\n            }, Math.max($3834487504f4fc00$var$TOOLTIP_COOLDOWN, closeDelay));\n        }\n    };\n    let warmupTooltip = ()=>{\n        closeOpenTooltips();\n        ensureTooltipEntry();\n        if (!isOpen && !$3834487504f4fc00$var$globalWarmedUp) {\n            if ($3834487504f4fc00$var$globalWarmUpTimeout) clearTimeout($3834487504f4fc00$var$globalWarmUpTimeout);\n            $3834487504f4fc00$var$globalWarmUpTimeout = setTimeout(()=>{\n                $3834487504f4fc00$var$globalWarmUpTimeout = null;\n                $3834487504f4fc00$var$globalWarmedUp = true;\n                // First tooltip in a sequence: animate in.\n                showTooltip(false);\n            }, delay);\n        } else if (!isOpen) // Already warmed up: appear instantly without an animation.\n        showTooltip(true);\n    };\n    (0, $auOuY$useEffect)(()=>{\n        closeCallback.current = close;\n    }, [\n        close\n    ]);\n    (0, $auOuY$useEffect)(()=>{\n        return ()=>{\n            if (closeTimeout.current) clearTimeout(closeTimeout.current);\n            let tooltip = $3834487504f4fc00$var$tooltips[id];\n            if (tooltip) delete $3834487504f4fc00$var$tooltips[id];\n        };\n    }, [\n        id\n    ]);\n    return {\n        isOpen: isOpen,\n        shouldSkipAnimation: shouldSkipAnimation,\n        open: (immediate)=>{\n            if (!immediate && delay > 0 && !closeTimeout.current) warmupTooltip();\n            else // Immediate opens (e.g. focus, or delay of 0) appear instantly without an animation\n            // only if another tooltip is already warmed up.\n            showTooltip($3834487504f4fc00$var$globalWarmedUp);\n        },\n        close: hideTooltip\n    };\n}\n\n\nexport {$3834487504f4fc00$export$4d40659c25ecb50b as useTooltipTriggerState};\n//# sourceMappingURL=useTooltipTriggerState.mjs.map\n","import {ariaHideOutside as $58196c8d6a1f38fc$export$1c3ebcada18427bf, keepVisible as $58196c8d6a1f38fc$export$1020fa7f77e17884} from \"./ariaHideOutside.mjs\";\nimport {useOverlay as $77844860df94ba23$export$ea8f71083e90600f} from \"./useOverlay.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {useOverlayFocusContain as $d7a937236970dc7f$export$14c98a7594375490} from \"./Overlay.mjs\";\nimport {usePreventScroll as $0644e3663365bfe5$export$ee0f7cc6afcd1c18} from \"./usePreventScroll.mjs\";\nimport {useEffect as $22yBd$useEffect} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\nfunction $5698867baeb53f4e$export$dbc0f175b25fb0fb(props, state, ref) {\n    let { overlayProps: overlayProps, underlayProps: underlayProps } = (0, $77844860df94ba23$export$ea8f71083e90600f)({\n        ...props,\n        isOpen: state.isOpen,\n        onClose: state.close\n    }, ref);\n    (0, $0644e3663365bfe5$export$ee0f7cc6afcd1c18)({\n        isDisabled: !state.isOpen,\n        UNSTABLE_overrideFocus: props.UNSTABLE_overrideFocus\n    });\n    (0, $d7a937236970dc7f$export$14c98a7594375490)();\n    let { isEntering: isEntering } = props;\n    (0, $22yBd$useEffect)(()=>{\n        if (state.isOpen && ref.current) {\n            if (isEntering) // Prevent a parent modal from hiding this one while it is entering.\n            return (0, $58196c8d6a1f38fc$export$1020fa7f77e17884)(ref.current);\n            return (0, $58196c8d6a1f38fc$export$1c3ebcada18427bf)([\n                ref.current\n            ], {\n                shouldUseInert: true\n            });\n        }\n    }, [\n        state.isOpen,\n        isEntering,\n        ref\n    ]);\n    return {\n        modalProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(overlayProps),\n        underlayProps: underlayProps\n    };\n}\n\n\nexport {$5698867baeb53f4e$export$dbc0f175b25fb0fb as useModalOverlay};\n//# sourceMappingURL=useModalOverlay.mjs.map\n","import {getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29} from \"./shadowdom/DOMFunctions.mjs\";\nimport {isIOS as $2add3ce32c6007eb$export$fedb369cb70207f1, isWebKit as $2add3ce32c6007eb$export$78551043582a6a98} from \"./platform.mjs\";\nimport {runAfterKeyboard as $e0a0e4399f316b76$export$b80f73f72d03c10f} from \"./runAfterKeyboard.mjs\";\nimport {useIsSSR as $c7eafbbe1ea5834e$export$535bd6ca7f90a273} from \"../ssr/SSRProvider.mjs\";\nimport {willOpenKeyboard as $bb39c0fc1c19b34c$export$c57958e35f31ed73} from \"./keyboard.mjs\";\nimport {useRef as $99N2Z$useRef, useState as $99N2Z$useState, useEffect as $99N2Z$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\nlet $6066a2c586ade9e1$var$visualViewport = typeof document !== 'undefined' && window.visualViewport;\nfunction $6066a2c586ade9e1$export$d699905dd57c73ca() {\n    let isSSR = (0, $c7eafbbe1ea5834e$export$535bd6ca7f90a273)();\n    let unmountRef = (0, $99N2Z$useRef)(null);\n    let [size, setSize] = (0, $99N2Z$useState)(()=>isSSR ? {\n            width: 0,\n            height: 0\n        } : $6066a2c586ade9e1$var$getViewportSize());\n    (0, $99N2Z$useEffect)(()=>{\n        let updateSize = (newSize)=>{\n            setSize((size)=>{\n                if (newSize.width === size.width && newSize.height === size.height) return size;\n                return newSize;\n            });\n        };\n        // Use visualViewport api to track available height even on iOS virtual keyboard opening\n        let onResize = ()=>{\n            // Ignore updates when zoomed.\n            if ($6066a2c586ade9e1$var$visualViewport && $6066a2c586ade9e1$var$visualViewport.scale > 1) return;\n            updateSize($6066a2c586ade9e1$var$getViewportSize());\n        };\n        // When closing the keyboard, WebKit on iOS does not fire the visual viewport resize event until the animation is complete.\n        // We can anticipate this and resize early by handling the blur event and using the layout size.\n        let onBlur = (e)=>{\n            if ($6066a2c586ade9e1$var$visualViewport && $6066a2c586ade9e1$var$visualViewport.scale > 1) return;\n            if (!(0, $bb39c0fc1c19b34c$export$c57958e35f31ed73)((0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n            unmountRef.current = (0, $e0a0e4399f316b76$export$b80f73f72d03c10f)((isOpen)=>{\n                if (isOpen) return;\n                updateSize({\n                    width: document.documentElement.clientWidth,\n                    height: document.documentElement.clientHeight\n                });\n            });\n        };\n        updateSize($6066a2c586ade9e1$var$getViewportSize());\n        if ((0, $2add3ce32c6007eb$export$fedb369cb70207f1)() && (0, $2add3ce32c6007eb$export$78551043582a6a98)()) window.addEventListener('blur', onBlur, true);\n        if (!$6066a2c586ade9e1$var$visualViewport) window.addEventListener('resize', onResize);\n        else $6066a2c586ade9e1$var$visualViewport.addEventListener('resize', onResize);\n        return ()=>{\n            unmountRef.current?.();\n            if ((0, $2add3ce32c6007eb$export$fedb369cb70207f1)() && (0, $2add3ce32c6007eb$export$78551043582a6a98)()) window.removeEventListener('blur', onBlur, true);\n            if (!$6066a2c586ade9e1$var$visualViewport) window.removeEventListener('resize', onResize);\n            else $6066a2c586ade9e1$var$visualViewport.removeEventListener('resize', onResize);\n        };\n    }, []);\n    return size;\n}\n/**\n * Get the viewport size without the scrollbar.\n */ function $6066a2c586ade9e1$var$getViewportSize() {\n    return {\n        // Multiply by the visualViewport scale to get the \"natural\" size, unaffected by pinch zooming.\n        width: $6066a2c586ade9e1$var$visualViewport ? // the visual viewport and the document element to ensure that the scrollbar width is always excluded.\n        // See: https://github.com/w3c/csswg-drafts/issues/8099\n        Math.min($6066a2c586ade9e1$var$visualViewport.width * $6066a2c586ade9e1$var$visualViewport.scale, document.documentElement.clientWidth) : document.documentElement.clientWidth,\n        height: $6066a2c586ade9e1$var$visualViewport ? $6066a2c586ade9e1$var$visualViewport.height * $6066a2c586ade9e1$var$visualViewport.scale : document.documentElement.clientHeight\n    };\n}\n\n\nexport {$6066a2c586ade9e1$export$d699905dd57c73ca as useViewportSize};\n//# sourceMappingURL=useViewportSize.mjs.map\n","import {dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, Provider as $7230ffa83bc0c2cf$export$2881499e37b75b9a, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415, useRenderProps as $7230ffa83bc0c2cf$export$4d86445c2cf5e3} from \"./utils.mjs\";\nimport {DialogContext as $f2ff30fde7b014be$export$8b93a07348a7730c, OverlayTriggerStateContext as $f2ff30fde7b014be$export$d2f961adcb0afbe} from \"./Dialog.mjs\";\nimport {useModalOverlay as $gJBoF$useModalOverlay} from \"react-aria/useModalOverlay\";\nimport {Overlay as $gJBoF$Overlay, DismissButton as $gJBoF$DismissButton} from \"react-aria/Overlay\";\nimport {filterDOMProps as $gJBoF$filterDOMProps} from \"react-aria/filterDOMProps\";\nimport {isScrollable as $gJBoF$isScrollable} from \"react-aria/private/utils/isScrollable\";\nimport {mergeProps as $gJBoF$mergeProps} from \"react-aria/mergeProps\";\nimport {mergeRefs as $gJBoF$mergeRefs} from \"react-aria/mergeRefs\";\nimport {useOverlayTriggerState as $gJBoF$useOverlayTriggerState} from \"react-stately/useOverlayTriggerState\";\nimport $gJBoF$react, {createContext as $gJBoF$createContext, forwardRef as $gJBoF$forwardRef, useContext as $gJBoF$useContext, useRef as $gJBoF$useRef, useState as $gJBoF$useState, useMemo as $gJBoF$useMemo} from \"react\";\nimport {runAfterKeyboard as $gJBoF$runAfterKeyboard} from \"react-aria/private/utils/runAfterKeyboard\";\nimport {useExitAnimation as $gJBoF$useExitAnimation, useEnterAnimation as $gJBoF$useEnterAnimation} from \"react-aria/private/utils/animation\";\nimport {useIsSSR as $gJBoF$useIsSSR} from \"react-aria/SSRProvider\";\nimport {useLayoutEffect as $gJBoF$useLayoutEffect} from \"react-aria/private/utils/useLayoutEffect\";\nimport {useObjectRef as $gJBoF$useObjectRef} from \"react-aria/useObjectRef\";\nimport {useViewportSize as $gJBoF$useViewportSize} from \"react-aria/private/utils/useViewportSize\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst $8b8d26808cb8cb53$export$ab57792b9b6974a6 = /*#__PURE__*/ (0, $gJBoF$createContext)(null);\nconst $8b8d26808cb8cb53$export$6bc057cefccad9c8 = /*#__PURE__*/ (0, $gJBoF$createContext)(null);\nconst $8b8d26808cb8cb53$export$2b77a92f1a5ad772 = /*#__PURE__*/ (0, $gJBoF$forwardRef)(function Modal(props, ref) {\n    let ctx = (0, $gJBoF$useContext)($8b8d26808cb8cb53$export$6bc057cefccad9c8);\n    if (ctx) {\n        if (process.env.NODE_ENV !== 'production' && (props.onOpenChange || props.defaultOpen !== undefined || props.isOpen !== undefined)) {\n            // create a list of props that are passed in but not allowed when using an external ModalOverlay\n            const invalidSet = new Set([\n                'isDismissable',\n                'isKeyboardDismissDisabled',\n                'isOpen',\n                'defaultOpen',\n                'onOpenChange',\n                'isEntering',\n                'isExiting',\n                'UNSTABLE_portalContainer',\n                'shouldCloseOnInteractOutside'\n            ]);\n            const invalidProps = Object.keys(props).filter((key)=>invalidSet.has(key));\n            console.warn(`This modal is already wrapped in a ModalOverlay, props [${invalidProps.join(', ')}] should be placed on the ModalOverlay instead.`);\n        }\n        return /*#__PURE__*/ (0, $gJBoF$react).createElement($8b8d26808cb8cb53$var$ModalContent, {\n            ...props,\n            modalRef: ref\n        }, props.children);\n    }\n    let { isDismissable: isDismissable, isKeyboardDismissDisabled: isKeyboardDismissDisabled, isOpen: isOpen, defaultOpen: defaultOpen, onOpenChange: onOpenChange, children: children, isEntering: isEntering, isExiting: isExiting, UNSTABLE_portalContainer: UNSTABLE_portalContainer, shouldCloseOnInteractOutside: shouldCloseOnInteractOutside, ...otherProps } = props;\n    return /*#__PURE__*/ (0, $gJBoF$react).createElement($8b8d26808cb8cb53$export$8948f78d83984c69, {\n        isDismissable: isDismissable,\n        isKeyboardDismissDisabled: isKeyboardDismissDisabled,\n        isOpen: isOpen,\n        defaultOpen: defaultOpen,\n        onOpenChange: onOpenChange,\n        isEntering: isEntering,\n        isExiting: isExiting,\n        UNSTABLE_portalContainer: UNSTABLE_portalContainer,\n        shouldCloseOnInteractOutside: shouldCloseOnInteractOutside\n    }, /*#__PURE__*/ (0, $gJBoF$react).createElement($8b8d26808cb8cb53$var$ModalContent, {\n        ...otherProps,\n        modalRef: ref\n    }, children));\n});\nfunction $8b8d26808cb8cb53$var$ModalOverlayWithForwardRef(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $8b8d26808cb8cb53$export$ab57792b9b6974a6);\n    let contextState = (0, $gJBoF$useContext)((0, $f2ff30fde7b014be$export$d2f961adcb0afbe));\n    let localState = (0, $gJBoF$useOverlayTriggerState)(props);\n    let state = props.isOpen != null || props.defaultOpen != null || !contextState ? localState : contextState;\n    if (state === contextState) {\n        if (process.env.NODE_ENV !== 'production' && (props.onOpenChange || props.defaultOpen !== undefined || props.isOpen !== undefined)) console.warn('This modals state is controlled by a trigger, place onOpenChange on the trigger instead.');\n    }\n    let objectRef = (0, $gJBoF$useObjectRef)(ref);\n    let modalRef = (0, $gJBoF$useRef)(null);\n    let isOverlayExiting = (0, $gJBoF$useExitAnimation)(objectRef, state.isOpen, props.onExit);\n    let onExitRef = (0, $gJBoF$useRef)(null);\n    let isModalExiting = (0, $gJBoF$useExitAnimation)(modalRef, state.isOpen, (element)=>onExitRef.current?.(element));\n    let isExiting = isOverlayExiting || isModalExiting || props.isExiting || false;\n    let isSSR = (0, $gJBoF$useIsSSR)();\n    if (!state.isOpen && !isExiting || isSSR) return null;\n    return /*#__PURE__*/ (0, $gJBoF$react).createElement($8b8d26808cb8cb53$var$ModalOverlayInner, {\n        ...props,\n        state: state,\n        isExiting: isExiting,\n        overlayRef: objectRef,\n        modalRef: modalRef,\n        onExitRef: onExitRef\n    });\n}\nconst $8b8d26808cb8cb53$export$8948f78d83984c69 = /*#__PURE__*/ (0, $gJBoF$forwardRef)($8b8d26808cb8cb53$var$ModalOverlayWithForwardRef);\nfunction $8b8d26808cb8cb53$var$ModalOverlayInner({ UNSTABLE_portalContainer: UNSTABLE_portalContainer, UNSTABLE_deferUntilEntered: UNSTABLE_deferUntilEntered, ...props }) {\n    let modalRef = props.modalRef;\n    let { state: state } = props;\n    let [isOpen, setIsOpen] = (0, $gJBoF$useState)(false);\n    let entering = (0, $gJBoF$useEnterAnimation)(props.overlayRef, isOpen, props.onEnter) || props.isEntering || false;\n    let isDeferred = !!UNSTABLE_deferUntilEntered && (!isOpen || entering);\n    let { modalProps: modalProps, underlayProps: underlayProps } = (0, $gJBoF$useModalOverlay)({\n        ...props,\n        isEntering: isDeferred\n    }, state, modalRef);\n    // Pass the entering state to the dialog so it waits to move focus until the modal has entered.\n    let dialogContext = (0, $gJBoF$useContext)((0, $f2ff30fde7b014be$export$8b93a07348a7730c));\n    let mergedDialogContext = UNSTABLE_deferUntilEntered ? $8b8d26808cb8cb53$var$mergeDialogContext(dialogContext, {\n        isEntering: isDeferred\n    }) : dialogContext;\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        defaultClassName: 'react-aria-ModalOverlay',\n        values: {\n            isEntering: entering,\n            isExiting: props.isExiting,\n            state: state\n        }\n    });\n    let viewport = (0, $gJBoF$useViewportSize)();\n    let pageWidth = undefined;\n    let pageHeight = undefined;\n    if (typeof document !== 'undefined') {\n        let scrollingElement = (0, $gJBoF$isScrollable)(document.body) ? document.body : document.scrollingElement || document.documentElement;\n        // Prevent Firefox from adding scrollbars when the page has a fractional width/height.\n        let fractionalWidthDifference = scrollingElement.getBoundingClientRect().width % 1;\n        let fractionalHeightDifference = scrollingElement.getBoundingClientRect().height % 1;\n        pageWidth = scrollingElement.scrollWidth - fractionalWidthDifference;\n        pageHeight = scrollingElement.scrollHeight - fractionalHeightDifference;\n    }\n    let style = {\n        ...renderProps.style,\n        '--visual-viewport-width': viewport.width + 'px',\n        '--visual-viewport-height': viewport.height + 'px',\n        '--page-width': pageWidth !== undefined ? pageWidth + 'px' : undefined,\n        '--page-height': pageHeight !== undefined ? pageHeight + 'px' : undefined\n    };\n    // Since an auto-focused input may open the OSK, we defer the reveal, as a courtesy, to avoid layout shift.\n    (0, $gJBoF$useLayoutEffect)(()=>(0, $gJBoF$runAfterKeyboard)(()=>setIsOpen(true)), []);\n    // oxlint-disable react/react-compiler\n    return /*#__PURE__*/ (0, $gJBoF$react).createElement((0, $gJBoF$Overlay), {\n        isExiting: props.isExiting,\n        portalContainer: UNSTABLE_portalContainer\n    }, /*#__PURE__*/ (0, $gJBoF$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...(0, $gJBoF$mergeProps)((0, $gJBoF$filterDOMProps)(props, {\n            global: true\n        }), underlayProps),\n        ...renderProps,\n        style: style,\n        ref: props.overlayRef,\n        \"data-entering\": entering || undefined,\n        \"data-exiting\": props.isExiting || undefined\n    }, /*#__PURE__*/ (0, $gJBoF$react).createElement((0, $7230ffa83bc0c2cf$export$2881499e37b75b9a), {\n        values: [\n            [\n                $8b8d26808cb8cb53$export$6bc057cefccad9c8,\n                {\n                    modalProps: modalProps,\n                    modalRef: modalRef,\n                    isExiting: props.isExiting,\n                    onExitRef: props.onExitRef,\n                    isOpen: isOpen,\n                    isDismissable: props.isDismissable\n                }\n            ],\n            [\n                (0, $f2ff30fde7b014be$export$d2f961adcb0afbe),\n                state\n            ],\n            [\n                (0, $f2ff30fde7b014be$export$8b93a07348a7730c),\n                mergedDialogContext\n            ]\n        ]\n    }, renderProps.children)));\n// oxlint-enable react/react-compiler\n}\nfunction $8b8d26808cb8cb53$var$mergeDialogContext(context, props) {\n    if (context && 'slots' in context && context.slots) {\n        let slots = {};\n        for(let key in context.slots)slots[key] = {\n            ...context.slots[key],\n            ...props\n        };\n        return {\n            ...context,\n            slots: slots\n        };\n    }\n    return {\n        ...context,\n        ...props\n    };\n}\nfunction $8b8d26808cb8cb53$var$ModalContent(props) {\n    let { modalProps: modalProps, modalRef: modalRef, isExiting: isExiting, onExitRef: onExitRef, isDismissable: isDismissable, isOpen: isOpen } = (0, $gJBoF$useContext)($8b8d26808cb8cb53$export$6bc057cefccad9c8);\n    let state = (0, $gJBoF$useContext)((0, $f2ff30fde7b014be$export$d2f961adcb0afbe));\n    let mergedRefs = (0, $gJBoF$useMemo)(()=>(0, $gJBoF$mergeRefs)(props.modalRef, modalRef), [\n        props.modalRef,\n        modalRef\n    ]);\n    let ref = (0, $gJBoF$useObjectRef)(mergedRefs);\n    let entering = (0, $gJBoF$useEnterAnimation)(ref, isOpen, props.onEnter);\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        defaultClassName: 'react-aria-Modal',\n        values: {\n            isEntering: entering,\n            isExiting: isExiting,\n            state: state\n        }\n    });\n    (0, $gJBoF$useLayoutEffect)(()=>{\n        if (onExitRef) onExitRef.current = props.onExit;\n    });\n    return /*#__PURE__*/ (0, $gJBoF$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...(0, $gJBoF$mergeProps)((0, $gJBoF$filterDOMProps)(props, {\n            global: true\n        }), modalProps),\n        ...renderProps,\n        ref: ref,\n        \"data-entering\": entering || undefined,\n        \"data-exiting\": isExiting || undefined\n    }, isDismissable && /*#__PURE__*/ (0, $gJBoF$react).createElement((0, $gJBoF$DismissButton), {\n        onDismiss: state.close\n    }), renderProps.children);\n}\n\n\nexport {$8b8d26808cb8cb53$export$ab57792b9b6974a6 as ModalContext, $8b8d26808cb8cb53$export$6bc057cefccad9c8 as InternalModalContext, $8b8d26808cb8cb53$export$2b77a92f1a5ad772 as Modal, $8b8d26808cb8cb53$export$8948f78d83984c69 as ModalOverlay};\n//# sourceMappingURL=Modal.mjs.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ const $640b6b92b30fd41a$export$37b65e5b5444d35c = new WeakMap();\n\n\nexport {$640b6b92b30fd41a$export$37b65e5b5444d35c as radioGroupData};\n//# sourceMappingURL=utils.mjs.map\n","import {filterDOMProps as $8e9d2fae0ecb9001$export$457c3d6518dd4c6f} from \"../utils/filterDOMProps.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {radioGroupData as $640b6b92b30fd41a$export$37b65e5b5444d35c} from \"./utils.mjs\";\nimport {useFocusable as $d1116acdf220c2da$export$4c014de7c8940b4c} from \"../interactions/useFocusable.mjs\";\nimport {useFormReset as $3274bf1495747a7b$export$5add1d006293d136} from \"../utils/useFormReset.mjs\";\nimport {useFormValidation as $860f7da480e22816$export$b8473d3665f3a75a} from \"../form/useFormValidation.mjs\";\nimport {usePress as $d27d541f9569d26d$export$45712eceda6fad21} from \"../interactions/usePress.mjs\";\nimport {useSlotId2 as $4c14b02d5228be26$export$ed2feabec4a533f4} from \"../utils/useSlot.mjs\";\nimport {useMemo as $jgf8P$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\nfunction $405627c100c5b965$export$37b0961d2f4751e2(props, state, ref) {\n    let { value: value, children: children, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledby, onPressStart: onPressStart, onPressEnd: onPressEnd, onPressChange: onPressChange, onPress: onPress, onPressUp: onPressUp, onClick: onClick } = props;\n    const isDisabled = props.isDisabled || state.isDisabled;\n    let hasChildren = children != null;\n    let hasAriaLabel = ariaLabel != null || ariaLabelledby != null;\n    if (!hasChildren && !hasAriaLabel && process.env.NODE_ENV !== 'production') console.warn('If you do not provide children, you must specify an aria-label for accessibility');\n    let checked = state.selectedValue === value;\n    let onChange = (e)=>{\n        e.stopPropagation();\n        state.setSelectedValue(value);\n    };\n    // Handle press state for keyboard interactions and cases where labelProps is not used.\n    let { pressProps: pressProps, isPressed: isPressed } = (0, $d27d541f9569d26d$export$45712eceda6fad21)({\n        onPressStart: onPressStart,\n        onPressEnd: onPressEnd,\n        onPressChange: onPressChange,\n        onPress: onPress,\n        onPressUp: onPressUp,\n        onClick: onClick,\n        isDisabled: isDisabled\n    });\n    // Handle press state on the label.\n    let { pressProps: labelProps, isPressed: isLabelPressed } = (0, $d27d541f9569d26d$export$45712eceda6fad21)({\n        onPressStart: onPressStart,\n        onPressEnd: onPressEnd,\n        onPressChange: onPressChange,\n        onPressUp: onPressUp,\n        onClick: onClick,\n        isDisabled: isDisabled,\n        onPress (e) {\n            onPress?.(e);\n            state.setSelectedValue(value);\n            ref.current?.focus();\n        }\n    });\n    let { focusableProps: focusableProps } = (0, $d1116acdf220c2da$export$4c014de7c8940b4c)((0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(props, {\n        onFocus: ()=>state.setLastFocusedValue(value)\n    }), ref);\n    let interactions = (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(pressProps, focusableProps);\n    let domProps = (0, $8e9d2fae0ecb9001$export$457c3d6518dd4c6f)(props, {\n        labelable: true\n    });\n    let tabIndex = -1;\n    if (state.selectedValue != null) {\n        if (state.selectedValue === value) tabIndex = 0;\n    } else if (state.lastFocusedValue === value || state.lastFocusedValue == null) tabIndex = 0;\n    if (isDisabled) tabIndex = undefined;\n    let { name: name, form: form, descriptionId: descriptionId, errorMessageId: errorMessageId, validationBehavior: validationBehavior } = (0, $640b6b92b30fd41a$export$37b65e5b5444d35c).get(state);\n    (0, $3274bf1495747a7b$export$5add1d006293d136)(ref, state.defaultSelectedValue, state.setSelectedValue);\n    (0, $860f7da480e22816$export$b8473d3665f3a75a)({\n        validationBehavior: validationBehavior\n    }, state, ref);\n    let descriptionProps = (0, $4c14b02d5228be26$export$ed2feabec4a533f4)();\n    return {\n        labelProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(labelProps, (0, $jgf8P$useMemo)(()=>({\n                onClick: (e)=>e.preventDefault(),\n                // Prevent label from being focused when mouse down on it.\n                // Note, this does not prevent the input from being focused in the `click` event.\n                onMouseDown: (e)=>e.preventDefault()\n            }), [])),\n        inputProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(domProps, {\n            ...interactions,\n            type: 'radio',\n            name: name,\n            form: form,\n            tabIndex: tabIndex,\n            disabled: isDisabled,\n            required: state.isRequired && validationBehavior === 'native',\n            checked: checked,\n            value: value,\n            onChange: onChange,\n            'aria-describedby': [\n                props['aria-describedby'],\n                descriptionProps.id,\n                state.isInvalid ? errorMessageId : null,\n                descriptionId\n            ].filter(Boolean).join(' ') || undefined\n        }),\n        descriptionProps: descriptionProps,\n        isDisabled: isDisabled,\n        isSelected: checked,\n        isPressed: isPressed || isLabelPressed\n    };\n}\n\n\nexport {$405627c100c5b965$export$37b0961d2f4751e2 as useRadio};\n//# sourceMappingURL=useRadio.mjs.map\n","import {filterDOMProps as $8e9d2fae0ecb9001$export$457c3d6518dd4c6f} from \"../utils/filterDOMProps.mjs\";\nimport {getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {getFocusableTreeWalker as $535772f9d2c1f38d$export$2d6ec8fc375ceafa} from \"../focus/FocusScope.mjs\";\nimport {getOwnerWindow as $d447af545b77c9f1$export$f21a1ffae260145a} from \"../utils/domHelpers.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {radioGroupData as $640b6b92b30fd41a$export$37b65e5b5444d35c} from \"./utils.mjs\";\nimport {useField as $191c9b6d48a0a4e2$export$294aa081a6c6f55d} from \"../label/useField.mjs\";\nimport {useFocusWithin as $2c9edc598a03d523$export$420e68273165f4ec} from \"../interactions/useFocusWithin.mjs\";\nimport {useId as $390e54f620492c70$export$f680877a34711e37} from \"../utils/useId.mjs\";\nimport {useKeyboard as $8296dad1a4c5e0dc$export$8f71654801c2f7cd} from \"../interactions/useKeyboard.mjs\";\nimport {useLocale as $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7} from \"../i18n/I18nProvider.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\nfunction $eecdee08e0d8a75f$export$62b9571f283ff5c2(props, state) {\n    let { name: name, form: form, isReadOnly: isReadOnly, isRequired: isRequired, isDisabled: isDisabled, orientation: orientation = 'vertical', validationBehavior: validationBehavior = 'aria' } = props;\n    let { direction: direction } = (0, $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7)();\n    let { isInvalid: isInvalid, validationErrors: validationErrors, validationDetails: validationDetails } = state.displayValidation;\n    let { labelProps: labelProps, fieldProps: fieldProps, descriptionProps: descriptionProps, errorMessageProps: errorMessageProps } = (0, $191c9b6d48a0a4e2$export$294aa081a6c6f55d)({\n        ...props,\n        // Radio group is not an HTML input element so it\n        // shouldn't be labeled by a <label> element.\n        labelElementType: 'span',\n        isInvalid: state.isInvalid,\n        errorMessage: props.errorMessage || validationErrors\n    });\n    let domProps = (0, $8e9d2fae0ecb9001$export$457c3d6518dd4c6f)(props, {\n        labelable: true\n    });\n    // When the radio group loses focus, reset the focusable radio to null if\n    // there is no selection. This allows tabbing into the group from either\n    // direction to go to the first or last radio.\n    let { focusWithinProps: focusWithinProps } = (0, $2c9edc598a03d523$export$420e68273165f4ec)({\n        onBlurWithin (e) {\n            props.onBlur?.(e);\n            if (!state.selectedValue) state.setLastFocusedValue(null);\n        },\n        onFocusWithin: props.onFocus,\n        onFocusWithinChange: props.onFocusChange\n    });\n    function getNextElement(nextDir, e) {\n        let walker = (0, $535772f9d2c1f38d$export$2d6ec8fc375ceafa)(e.currentTarget, {\n            from: (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e),\n            accept: (node)=>node instanceof (0, $d447af545b77c9f1$export$f21a1ffae260145a)(node).HTMLInputElement && node.type === 'radio'\n        });\n        let nextElem;\n        if (nextDir === 'next') {\n            nextElem = walker.nextNode();\n            if (!nextElem) {\n                walker.currentNode = e.currentTarget;\n                nextElem = walker.firstChild();\n            }\n        } else {\n            nextElem = walker.previousNode();\n            if (!nextElem) {\n                walker.currentNode = e.currentTarget;\n                nextElem = walker.lastChild();\n            }\n        }\n        if (nextElem) {\n            // Call focus on nextElem so that keyboard navigation scrolls the radio into view\n            nextElem.focus();\n            state.setSelectedValue(nextElem.value);\n            return true;\n        }\n        return false;\n    }\n    let { keyboardProps: keyboardProps } = (0, $8296dad1a4c5e0dc$export$8f71654801c2f7cd)({\n        shortcuts: {\n            ArrowRight: (e)=>{\n                let nextDir = direction === 'rtl' && orientation !== 'vertical' ? 'prev' : 'next';\n                return getNextElement(nextDir, e);\n            },\n            ArrowLeft: (e)=>{\n                let nextDir = direction === 'rtl' && orientation !== 'vertical' ? 'next' : 'prev';\n                return getNextElement(nextDir, e);\n            },\n            ArrowDown: (e)=>{\n                return getNextElement('next', e);\n            },\n            ArrowUp: (e)=>{\n                return getNextElement('prev', e);\n            }\n        },\n        allowRepeats: true\n    });\n    let groupName = (0, $390e54f620492c70$export$f680877a34711e37)(name);\n    (0, $640b6b92b30fd41a$export$37b65e5b5444d35c).set(state, {\n        name: groupName,\n        form: form,\n        descriptionId: descriptionProps.id,\n        errorMessageId: errorMessageProps.id,\n        validationBehavior: validationBehavior\n    });\n    return {\n        radioGroupProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(domProps, {\n            // https://www.w3.org/TR/wai-aria-1.2/#radiogroup\n            role: 'radiogroup',\n            ...keyboardProps,\n            'aria-invalid': state.isInvalid || undefined,\n            'aria-errormessage': props['aria-errormessage'],\n            'aria-readonly': isReadOnly || undefined,\n            'aria-required': isRequired || undefined,\n            'aria-disabled': isDisabled || undefined,\n            'aria-orientation': orientation,\n            ...fieldProps,\n            ...focusWithinProps\n        }),\n        labelProps: labelProps,\n        descriptionProps: descriptionProps,\n        errorMessageProps: errorMessageProps,\n        isInvalid: isInvalid,\n        validationErrors: validationErrors,\n        validationDetails: validationDetails\n    };\n}\n\n\nexport {$eecdee08e0d8a75f$export$62b9571f283ff5c2 as useRadioGroup};\n//# sourceMappingURL=useRadioGroup.mjs.map\n","import {useFormValidationState as $fd2148440a13ec26$export$fc1a364ae1f3ff10} from \"../form/useFormValidationState.mjs\";\nimport {useControlledState as $3e6197669829fe11$export$40bfa8c7b0832715} from \"../utils/useControlledState.mjs\";\nimport {useMemo as $6Hs9a$useMemo, useState as $6Hs9a$useState} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nlet $384704861d32dbed$var$instance = Math.round(Math.random() * 10000000000);\nlet $384704861d32dbed$var$i = 0;\nfunction $384704861d32dbed$export$bca9d026f8e704eb(props) {\n    // Preserved here for backward compatibility. React Aria now generates the name instead of stately.\n    let name = (0, $6Hs9a$useMemo)(()=>props.name || `radio-group-${$384704861d32dbed$var$instance}-${++$384704861d32dbed$var$i}`, [\n        props.name\n    ]);\n    let [selectedValue, setSelected] = (0, $3e6197669829fe11$export$40bfa8c7b0832715)(props.value, props.defaultValue ?? null, props.onChange);\n    let [initialValue] = (0, $6Hs9a$useState)(selectedValue);\n    let [lastFocusedValue, setLastFocusedValue] = (0, $6Hs9a$useState)(null);\n    let validation = (0, $fd2148440a13ec26$export$fc1a364ae1f3ff10)({\n        ...props,\n        value: selectedValue\n    });\n    let setSelectedValue = (value)=>{\n        if (!props.isReadOnly && !props.isDisabled) {\n            setSelected(value);\n            validation.commitValidation();\n        }\n    };\n    let isInvalid = validation.displayValidation.isInvalid;\n    return {\n        ...validation,\n        name: name,\n        selectedValue: selectedValue,\n        defaultSelectedValue: props.value !== undefined ? initialValue : props.defaultValue ?? null,\n        setSelectedValue: setSelectedValue,\n        lastFocusedValue: lastFocusedValue,\n        setLastFocusedValue: setLastFocusedValue,\n        isDisabled: props.isDisabled || false,\n        isReadOnly: props.isReadOnly || false,\n        isRequired: props.isRequired || false,\n        validationState: props.validationState || (isInvalid ? 'invalid' : null),\n        isInvalid: isInvalid\n    };\n}\n\n\nexport {$384704861d32dbed$export$bca9d026f8e704eb as useRadioGroupState};\n//# sourceMappingURL=useRadioGroupState.mjs.map\n","import {dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, Provider as $7230ffa83bc0c2cf$export$2881499e37b75b9a, removeDataAttributes as $7230ffa83bc0c2cf$export$ef03459518577ad4, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415, useRenderProps as $7230ffa83bc0c2cf$export$4d86445c2cf5e3, useSlot as $7230ffa83bc0c2cf$export$9d4c57ee4c6ffdd8, useSlottedContext as $7230ffa83bc0c2cf$export$fabf2dc03a41866e} from \"./utils.mjs\";\nimport {FieldErrorContext as $1f3c3b1a70cec653$export$ff05c3ac10437e03} from \"./FieldError.mjs\";\nimport {FormContext as $cdaed739b1139372$export$c24727297075ec6a} from \"./Form.mjs\";\nimport {LabelContext as $43a3b93638fe5db9$export$75b6ee27786ba447} from \"./Label.mjs\";\nimport {SelectionIndicatorContext as $91fe5e721c7f36c1$export$c9549807523555e0} from \"./SelectionIndicator.mjs\";\nimport {SharedElementTransition as $792f28e438b9ad5f$export$758399f318e6385a} from \"./SharedElementTransition.mjs\";\nimport {TextContext as $efe09c6d1c304b50$export$9afb8bc826b033ea} from \"./Text.mjs\";\nimport {useRadioGroup as $64B8K$useRadioGroup, useRadio as $64B8K$useRadio} from \"react-aria/useRadioGroup\";\nimport {filterDOMProps as $64B8K$filterDOMProps} from \"react-aria/filterDOMProps\";\nimport {mergeProps as $64B8K$mergeProps} from \"react-aria/mergeProps\";\nimport {mergeRefs as $64B8K$mergeRefs} from \"react-aria/mergeRefs\";\nimport {useRadioGroupState as $64B8K$useRadioGroupState} from \"react-stately/useRadioGroupState\";\nimport $64B8K$react, {createContext as $64B8K$createContext, forwardRef as $64B8K$forwardRef, useMemo as $64B8K$useMemo, useContext as $64B8K$useContext} from \"react\";\nimport {useFocusRing as $64B8K$useFocusRing} from \"react-aria/useFocusRing\";\nimport {useHover as $64B8K$useHover} from \"react-aria/useHover\";\nimport {useObjectRef as $64B8K$useObjectRef} from \"react-aria/useObjectRef\";\nimport {VisuallyHidden as $64B8K$VisuallyHidden} from \"react-aria/VisuallyHidden\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst $fe21c36db05242bb$export$a79eda4ff50e30b6 = /*#__PURE__*/ (0, $64B8K$createContext)(null);\nconst $fe21c36db05242bb$export$b118023277d4a5c3 = /*#__PURE__*/ (0, $64B8K$createContext)(null);\nconst $fe21c36db05242bb$export$29c6814b341e632b = /*#__PURE__*/ (0, $64B8K$createContext)(null);\nconst $fe21c36db05242bb$export$29d84393af70866c = /*#__PURE__*/ (0, $64B8K$createContext)(null);\nconst $fe21c36db05242bb$export$a98f0dcb43a68a25 = /*#__PURE__*/ (0, $64B8K$forwardRef)(function RadioGroup(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $fe21c36db05242bb$export$a79eda4ff50e30b6);\n    let { validationBehavior: formValidationBehavior } = (0, $7230ffa83bc0c2cf$export$fabf2dc03a41866e)((0, $cdaed739b1139372$export$c24727297075ec6a)) || {};\n    let validationBehavior = props.validationBehavior ?? formValidationBehavior ?? 'native';\n    let state = (0, $64B8K$useRadioGroupState)({\n        ...props,\n        validationBehavior: validationBehavior\n    });\n    let [labelRef, label] = (0, $7230ffa83bc0c2cf$export$9d4c57ee4c6ffdd8)(!props['aria-label'] && !props['aria-labelledby']);\n    let { radioGroupProps: radioGroupProps, labelProps: labelProps, descriptionProps: descriptionProps, errorMessageProps: errorMessageProps, ...validation } = (0, $64B8K$useRadioGroup)({\n        ...props,\n        label: label,\n        validationBehavior: validationBehavior\n    }, state);\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        values: {\n            orientation: props.orientation || 'vertical',\n            isDisabled: state.isDisabled,\n            isReadOnly: state.isReadOnly,\n            isRequired: state.isRequired,\n            isInvalid: state.isInvalid,\n            state: state\n        },\n        defaultClassName: 'react-aria-RadioGroup'\n    });\n    let DOMProps = (0, $64B8K$filterDOMProps)(props, {\n        global: true\n    });\n    return /*#__PURE__*/ (0, $64B8K$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...(0, $64B8K$mergeProps)(DOMProps, renderProps, radioGroupProps),\n        ref: ref,\n        slot: props.slot || undefined,\n        \"data-orientation\": props.orientation || 'vertical',\n        \"data-invalid\": state.isInvalid || undefined,\n        \"data-disabled\": state.isDisabled || undefined,\n        \"data-readonly\": state.isReadOnly || undefined,\n        \"data-required\": state.isRequired || undefined\n    }, /*#__PURE__*/ (0, $64B8K$react).createElement((0, $7230ffa83bc0c2cf$export$2881499e37b75b9a), {\n        values: [\n            [\n                $fe21c36db05242bb$export$29d84393af70866c,\n                state\n            ],\n            [\n                (0, $43a3b93638fe5db9$export$75b6ee27786ba447),\n                {\n                    ...labelProps,\n                    ref: labelRef,\n                    elementType: 'span'\n                }\n            ],\n            [\n                (0, $efe09c6d1c304b50$export$9afb8bc826b033ea),\n                {\n                    slots: {\n                        description: descriptionProps,\n                        errorMessage: errorMessageProps\n                    }\n                }\n            ],\n            [\n                (0, $1f3c3b1a70cec653$export$ff05c3ac10437e03),\n                validation\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $64B8K$react).createElement((0, $792f28e438b9ad5f$export$758399f318e6385a), null, renderProps.children)));\n});\nconst $fe21c36db05242bb$export$d7b12c4107be0d61 = /*#__PURE__*/ (0, $64B8K$forwardRef)(function Radio(props, ref) {\n    let { inputRef: userProvidedInputRef = null, ...otherProps } = props;\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(otherProps, ref, $fe21c36db05242bb$export$b118023277d4a5c3);\n    let state = (0, $64B8K$react).useContext($fe21c36db05242bb$export$29d84393af70866c);\n    let inputRef = (0, $64B8K$useObjectRef)((0, $64B8K$useMemo)(()=>(0, $64B8K$mergeRefs)(userProvidedInputRef, props.inputRef !== undefined ? props.inputRef : null), [\n        userProvidedInputRef,\n        props.inputRef\n    ]));\n    let aria = (0, $64B8K$useRadio)({\n        ...(0, $7230ffa83bc0c2cf$export$ef03459518577ad4)(props),\n        // ReactNode type doesn't allow function children.\n        children: typeof props.children === 'function' ? true : props.children\n    }, state, inputRef);\n    return /*#__PURE__*/ (0, $64B8K$react).createElement($fe21c36db05242bb$var$InternalRadioContext.Provider, {\n        value: {\n            ...aria,\n            inputRef: inputRef,\n            defaultClassName: 'react-aria-Radio'\n        }\n    }, /*#__PURE__*/ (0, $64B8K$react).createElement($fe21c36db05242bb$export$f4422ae58352e179, {\n        ...props,\n        ref: ref\n    }));\n});\nconst $fe21c36db05242bb$var$InternalRadioContext = /*#__PURE__*/ (0, $64B8K$createContext)(null);\nconst $fe21c36db05242bb$export$4aaf0c609b3e241e = /*#__PURE__*/ (0, $64B8K$forwardRef)(function RadioField(props, ref) {\n    let { inputRef: userProvidedInputRef = null, ...otherProps } = props;\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(otherProps, ref, $fe21c36db05242bb$export$29c6814b341e632b);\n    let state = (0, $64B8K$react).useContext($fe21c36db05242bb$export$29d84393af70866c);\n    let inputRef = (0, $64B8K$useObjectRef)((0, $64B8K$useMemo)(()=>(0, $64B8K$mergeRefs)(userProvidedInputRef, props.inputRef !== undefined ? props.inputRef : null), [\n        userProvidedInputRef,\n        props.inputRef\n    ]));\n    let aria = (0, $64B8K$useRadio)({\n        ...(0, $7230ffa83bc0c2cf$export$ef03459518577ad4)(props),\n        // ReactNode type doesn't allow function children.\n        children: typeof props.children === 'function' ? true : props.children\n    }, state, inputRef);\n    let { descriptionProps: descriptionProps, isSelected: isSelected, isDisabled: isDisabled } = aria;\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        defaultClassName: 'react-aria-RadioField',\n        values: {\n            isSelected: isSelected,\n            isDisabled: isDisabled,\n            isReadOnly: state.isReadOnly,\n            isInvalid: state.isInvalid,\n            isRequired: state.isRequired\n        }\n    });\n    let DOMProps = (0, $64B8K$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.id;\n    delete DOMProps.onClick;\n    return /*#__PURE__*/ (0, $64B8K$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...(0, $64B8K$mergeProps)(DOMProps, renderProps),\n        ref: ref,\n        \"data-selected\": isSelected || undefined,\n        \"data-disabled\": isDisabled || undefined,\n        \"data-readonly\": state.isReadOnly || undefined,\n        \"data-invalid\": state.isInvalid || undefined,\n        \"data-required\": state.isRequired || undefined\n    }, /*#__PURE__*/ (0, $64B8K$react).createElement((0, $7230ffa83bc0c2cf$export$2881499e37b75b9a), {\n        values: [\n            [\n                (0, $91fe5e721c7f36c1$export$c9549807523555e0),\n                {\n                    isSelected: isSelected\n                }\n            ],\n            [\n                $fe21c36db05242bb$var$InternalRadioContext,\n                {\n                    ...aria,\n                    inputRef: inputRef,\n                    defaultClassName: 'react-aria-RadioButton'\n                }\n            ],\n            [\n                (0, $efe09c6d1c304b50$export$9afb8bc826b033ea),\n                {\n                    slots: {\n                        description: descriptionProps\n                    }\n                }\n            ]\n        ]\n    }, renderProps.children));\n});\nconst $fe21c36db05242bb$export$f4422ae58352e179 = /*#__PURE__*/ (0, $64B8K$forwardRef)(function RadioButton(props, ref) {\n    let { labelProps: labelProps, inputProps: inputProps, isSelected: isSelected, isDisabled: isDisabled, isPressed: isPressed, defaultClassName: defaultClassName, inputRef: inputRef } = (0, $64B8K$useContext)($fe21c36db05242bb$var$InternalRadioContext);\n    let state = (0, $64B8K$react).useContext($fe21c36db05242bb$export$29d84393af70866c);\n    let { isFocused: isFocused, isFocusVisible: isFocusVisible, focusProps: focusProps } = (0, $64B8K$useFocusRing)();\n    let interactionDisabled = isDisabled || state.isReadOnly;\n    let { hoverProps: hoverProps, isHovered: isHovered } = (0, $64B8K$useHover)({\n        ...props,\n        isDisabled: interactionDisabled\n    });\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        defaultClassName: defaultClassName,\n        values: {\n            isSelected: isSelected,\n            isPressed: isPressed,\n            isHovered: isHovered,\n            isFocused: isFocused,\n            isFocusVisible: isFocusVisible,\n            isDisabled: isDisabled,\n            isReadOnly: state.isReadOnly,\n            isInvalid: state.isInvalid,\n            isRequired: state.isRequired\n        }\n    });\n    let DOMProps = (0, $64B8K$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.id;\n    delete DOMProps.onClick;\n    return /*#__PURE__*/ (0, $64B8K$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).label, {\n        ...(0, $64B8K$mergeProps)(DOMProps, labelProps, hoverProps, renderProps),\n        ref: ref,\n        \"data-selected\": isSelected || undefined,\n        \"data-pressed\": isPressed || undefined,\n        \"data-hovered\": isHovered || undefined,\n        \"data-focused\": isFocused || undefined,\n        \"data-focus-visible\": isFocusVisible || undefined,\n        \"data-disabled\": isDisabled || undefined,\n        \"data-readonly\": state.isReadOnly || undefined,\n        \"data-invalid\": state.isInvalid || undefined,\n        \"data-required\": state.isRequired || undefined\n    }, /*#__PURE__*/ (0, $64B8K$react).createElement((0, $64B8K$VisuallyHidden), {\n        elementType: \"span\"\n    }, /*#__PURE__*/ (0, $64B8K$react).createElement(\"input\", {\n        ...(0, $64B8K$mergeProps)(inputProps, focusProps),\n        ref: inputRef\n    })), renderProps.children);\n});\n\n\nexport {$fe21c36db05242bb$export$a79eda4ff50e30b6 as RadioGroupContext, $fe21c36db05242bb$export$b118023277d4a5c3 as RadioContext, $fe21c36db05242bb$export$29c6814b341e632b as RadioFieldContext, $fe21c36db05242bb$export$29d84393af70866c as RadioGroupStateContext, $fe21c36db05242bb$export$a98f0dcb43a68a25 as RadioGroup, $fe21c36db05242bb$export$d7b12c4107be0d61 as Radio, $fe21c36db05242bb$export$f4422ae58352e179 as RadioButton, $fe21c36db05242bb$export$4aaf0c609b3e241e as RadioField};\n//# sourceMappingURL=RadioGroup.mjs.map\n","var $0b5fc13def2a30c7$exports = {};\n$0b5fc13def2a30c7$exports = {\n    \"Clear search\": `Clear search`\n};\n\n\nexport {$0b5fc13def2a30c7$exports as default};\n//# sourceMappingURL=en-US.mjs.map\n","import $dHW54$intlsearchfieldarAEmjs from \"../intl/searchfield/ar-AE.mjs\";\nimport $dHW54$intlsearchfieldbgBGmjs from \"../intl/searchfield/bg-BG.mjs\";\nimport $dHW54$intlsearchfieldcsCZmjs from \"../intl/searchfield/cs-CZ.mjs\";\nimport $dHW54$intlsearchfielddaDKmjs from \"../intl/searchfield/da-DK.mjs\";\nimport $dHW54$intlsearchfielddeDEmjs from \"../intl/searchfield/de-DE.mjs\";\nimport $dHW54$intlsearchfieldelGRmjs from \"../intl/searchfield/el-GR.mjs\";\nimport $dHW54$intlsearchfieldenUSmjs from \"../intl/searchfield/en-US.mjs\";\nimport $dHW54$intlsearchfieldesESmjs from \"../intl/searchfield/es-ES.mjs\";\nimport $dHW54$intlsearchfieldetEEmjs from \"../intl/searchfield/et-EE.mjs\";\nimport $dHW54$intlsearchfieldfiFImjs from \"../intl/searchfield/fi-FI.mjs\";\nimport $dHW54$intlsearchfieldfrFRmjs from \"../intl/searchfield/fr-FR.mjs\";\nimport $dHW54$intlsearchfieldheILmjs from \"../intl/searchfield/he-IL.mjs\";\nimport $dHW54$intlsearchfieldhrHRmjs from \"../intl/searchfield/hr-HR.mjs\";\nimport $dHW54$intlsearchfieldhuHUmjs from \"../intl/searchfield/hu-HU.mjs\";\nimport $dHW54$intlsearchfielditITmjs from \"../intl/searchfield/it-IT.mjs\";\nimport $dHW54$intlsearchfieldjaJPmjs from \"../intl/searchfield/ja-JP.mjs\";\nimport $dHW54$intlsearchfieldkoKRmjs from \"../intl/searchfield/ko-KR.mjs\";\nimport $dHW54$intlsearchfieldltLTmjs from \"../intl/searchfield/lt-LT.mjs\";\nimport $dHW54$intlsearchfieldlvLVmjs from \"../intl/searchfield/lv-LV.mjs\";\nimport $dHW54$intlsearchfieldnbNOmjs from \"../intl/searchfield/nb-NO.mjs\";\nimport $dHW54$intlsearchfieldnlNLmjs from \"../intl/searchfield/nl-NL.mjs\";\nimport $dHW54$intlsearchfieldplPLmjs from \"../intl/searchfield/pl-PL.mjs\";\nimport $dHW54$intlsearchfieldptBRmjs from \"../intl/searchfield/pt-BR.mjs\";\nimport $dHW54$intlsearchfieldptPTmjs from \"../intl/searchfield/pt-PT.mjs\";\nimport $dHW54$intlsearchfieldroROmjs from \"../intl/searchfield/ro-RO.mjs\";\nimport $dHW54$intlsearchfieldruRUmjs from \"../intl/searchfield/ru-RU.mjs\";\nimport $dHW54$intlsearchfieldskSKmjs from \"../intl/searchfield/sk-SK.mjs\";\nimport $dHW54$intlsearchfieldslSImjs from \"../intl/searchfield/sl-SI.mjs\";\nimport $dHW54$intlsearchfieldsrSPmjs from \"../intl/searchfield/sr-SP.mjs\";\nimport $dHW54$intlsearchfieldsvSEmjs from \"../intl/searchfield/sv-SE.mjs\";\nimport $dHW54$intlsearchfieldtrTRmjs from \"../intl/searchfield/tr-TR.mjs\";\nimport $dHW54$intlsearchfieldukUAmjs from \"../intl/searchfield/uk-UA.mjs\";\nimport $dHW54$intlsearchfieldzhCNmjs from \"../intl/searchfield/zh-CN.mjs\";\nimport $dHW54$intlsearchfieldzhTWmjs from \"../intl/searchfield/zh-TW.mjs\";\n\nvar $cb1bf3901ab9f046$exports = {};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$cb1bf3901ab9f046$exports = {\n    \"ar-AE\": $dHW54$intlsearchfieldarAEmjs,\n    \"bg-BG\": $dHW54$intlsearchfieldbgBGmjs,\n    \"cs-CZ\": $dHW54$intlsearchfieldcsCZmjs,\n    \"da-DK\": $dHW54$intlsearchfielddaDKmjs,\n    \"de-DE\": $dHW54$intlsearchfielddeDEmjs,\n    \"el-GR\": $dHW54$intlsearchfieldelGRmjs,\n    \"en-US\": $dHW54$intlsearchfieldenUSmjs,\n    \"es-ES\": $dHW54$intlsearchfieldesESmjs,\n    \"et-EE\": $dHW54$intlsearchfieldetEEmjs,\n    \"fi-FI\": $dHW54$intlsearchfieldfiFImjs,\n    \"fr-FR\": $dHW54$intlsearchfieldfrFRmjs,\n    \"he-IL\": $dHW54$intlsearchfieldheILmjs,\n    \"hr-HR\": $dHW54$intlsearchfieldhrHRmjs,\n    \"hu-HU\": $dHW54$intlsearchfieldhuHUmjs,\n    \"it-IT\": $dHW54$intlsearchfielditITmjs,\n    \"ja-JP\": $dHW54$intlsearchfieldjaJPmjs,\n    \"ko-KR\": $dHW54$intlsearchfieldkoKRmjs,\n    \"lt-LT\": $dHW54$intlsearchfieldltLTmjs,\n    \"lv-LV\": $dHW54$intlsearchfieldlvLVmjs,\n    \"nb-NO\": $dHW54$intlsearchfieldnbNOmjs,\n    \"nl-NL\": $dHW54$intlsearchfieldnlNLmjs,\n    \"pl-PL\": $dHW54$intlsearchfieldplPLmjs,\n    \"pt-BR\": $dHW54$intlsearchfieldptBRmjs,\n    \"pt-PT\": $dHW54$intlsearchfieldptPTmjs,\n    \"ro-RO\": $dHW54$intlsearchfieldroROmjs,\n    \"ru-RU\": $dHW54$intlsearchfieldruRUmjs,\n    \"sk-SK\": $dHW54$intlsearchfieldskSKmjs,\n    \"sl-SI\": $dHW54$intlsearchfieldslSImjs,\n    \"sr-SP\": $dHW54$intlsearchfieldsrSPmjs,\n    \"sv-SE\": $dHW54$intlsearchfieldsvSEmjs,\n    \"tr-TR\": $dHW54$intlsearchfieldtrTRmjs,\n    \"uk-UA\": $dHW54$intlsearchfieldukUAmjs,\n    \"zh-CN\": $dHW54$intlsearchfieldzhCNmjs,\n    \"zh-TW\": $dHW54$intlsearchfieldzhTWmjs\n};\n\n\nexport {$cb1bf3901ab9f046$exports as default};\n//# sourceMappingURL=intlStrings.mjs.map\n","import {useTextField as $054f71d2330da2e3$export$712718f7aec83d5} from \"../textfield/useTextField.mjs\";\nimport $kb1Sb$intlStringsmjs from \"./intlStrings.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {useKeyboard as $8296dad1a4c5e0dc$export$8f71654801c2f7cd} from \"../interactions/useKeyboard.mjs\";\nimport {useLocalizedStringFormatter as $cf2482eff2eeeec2$export$f12b703ca79dfbb1} from \"../i18n/useLocalizedStringFormatter.mjs\";\n\n\nfunction $parcel$interopDefault(a) {\n  return a && a.__esModule ? a.default : a;\n}\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nfunction $44614525ec969a63$export$9bb30bbe003b82e0(props, state, inputRef) {\n    let stringFormatter = (0, $cf2482eff2eeeec2$export$f12b703ca79dfbb1)((0, ($parcel$interopDefault($kb1Sb$intlStringsmjs))), '@react-aria/searchfield');\n    let { isDisabled: isDisabled, isReadOnly: isReadOnly, onSubmit: onSubmit, onClear: onClear, type: type = 'search' } = props;\n    let { keyboardProps: keyboardProps } = (0, $8296dad1a4c5e0dc$export$8f71654801c2f7cd)({\n        isDisabled: isDisabled || isReadOnly,\n        shortcuts: {\n            Enter: ()=>{\n                if (onSubmit) {\n                    // for backward compatibility;\n                    // otherwise, \"Enter\" on an input would trigger a form submit, the default browser behavior\n                    onSubmit(state.value);\n                    return;\n                }\n                return false;\n            },\n            Escape: ()=>{\n                // Also check the inputRef value for the case where the value was set directly on the input element instead of going through\n                // the hook\n                if (state.value === '' && (!inputRef.current || inputRef.current.value === '')) return false;\n                state.setValue('');\n                onClear?.();\n            }\n        }\n    });\n    let onClearButtonClick = ()=>{\n        state.setValue('');\n        if (onClear) onClear();\n    };\n    let onPressStart = ()=>{\n        // this is in PressStart for mobile so that touching the clear button doesn't remove focus from\n        // the input and close the keyboard\n        inputRef.current?.focus();\n    };\n    let { labelProps: labelProps, inputProps: inputProps, descriptionProps: descriptionProps, errorMessageProps: errorMessageProps, ...validation } = (0, $054f71d2330da2e3$export$712718f7aec83d5)({\n        ...props,\n        value: state.value,\n        onChange: state.setValue,\n        onKeyDown: props.onKeyDown,\n        onKeyUp: props.onKeyUp,\n        type: type\n    }, inputRef);\n    return {\n        labelProps: labelProps,\n        // An edge case, in Autocomplete, if the keyboard hanlders are not in this order, then\n        // Escape runs autocomplete/listbox first, then the search-field shortcut returns false and\n        // continues propagation, leaking Escape to a parent Dialog.\n        inputProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(keyboardProps, {\n            ...inputProps,\n            // already handled by useSearchFieldState\n            defaultValue: undefined\n        }),\n        clearButtonProps: {\n            'aria-label': stringFormatter.format('Clear search'),\n            excludeFromTabOrder: true,\n            preventFocusOnPress: true,\n            isDisabled: isDisabled || isReadOnly,\n            onPress: onClearButtonClick,\n            onPressStart: onPressStart\n        },\n        descriptionProps: descriptionProps,\n        errorMessageProps: errorMessageProps,\n        ...validation\n    };\n}\n\n\nexport {$44614525ec969a63$export$9bb30bbe003b82e0 as useSearchField};\n//# sourceMappingURL=useSearchField.mjs.map\n","import {useControlledState as $3e6197669829fe11$export$40bfa8c7b0832715} from \"../utils/useControlledState.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $56baeede9f35e022$export$3f8be18b0f41eaf2(props) {\n    let [value, setValue] = (0, $3e6197669829fe11$export$40bfa8c7b0832715)($56baeede9f35e022$var$toString(props.value), $56baeede9f35e022$var$toString(props.defaultValue) || '', props.onChange);\n    return {\n        value: value,\n        setValue: setValue\n    };\n}\nfunction $56baeede9f35e022$var$toString(val) {\n    if (val == null) return;\n    return val.toString();\n}\n\n\nexport {$56baeede9f35e022$export$3f8be18b0f41eaf2 as useSearchFieldState};\n//# sourceMappingURL=useSearchFieldState.mjs.map\n","import {ButtonContext as $7705c033048f6da7$export$24d547caef80ccd1} from \"./Button.mjs\";\nimport {dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, Provider as $7230ffa83bc0c2cf$export$2881499e37b75b9a, removeDataAttributes as $7230ffa83bc0c2cf$export$ef03459518577ad4, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415, useRenderProps as $7230ffa83bc0c2cf$export$4d86445c2cf5e3, useSlot as $7230ffa83bc0c2cf$export$9d4c57ee4c6ffdd8, useSlottedContext as $7230ffa83bc0c2cf$export$fabf2dc03a41866e} from \"./utils.mjs\";\nimport {FieldErrorContext as $1f3c3b1a70cec653$export$ff05c3ac10437e03} from \"./FieldError.mjs\";\nimport {FieldInputContext as $4b38b5b75ecc6208$export$698f465ec27e93df} from \"./Autocomplete.mjs\";\nimport {FormContext as $cdaed739b1139372$export$c24727297075ec6a} from \"./Form.mjs\";\nimport {GroupContext as $3a442827418ebe87$export$f9c6924e160136d1} from \"./Group.mjs\";\nimport {InputContext as $41fb335299a4a39e$export$37fb8590cf2c088c} from \"./Input.mjs\";\nimport {LabelContext as $43a3b93638fe5db9$export$75b6ee27786ba447} from \"./Label.mjs\";\nimport {TextContext as $efe09c6d1c304b50$export$9afb8bc826b033ea} from \"./Text.mjs\";\nimport {useSearchField as $gpBJB$useSearchField} from \"react-aria/useSearchField\";\nimport {createHideableComponent as $gpBJB$createHideableComponent} from \"react-aria/private/collections/Hidden\";\nimport {filterDOMProps as $gpBJB$filterDOMProps} from \"react-aria/filterDOMProps\";\nimport $gpBJB$react, {createContext as $gpBJB$createContext, useRef as $gpBJB$useRef} from \"react\";\nimport {useSearchFieldState as $gpBJB$useSearchFieldState} from \"react-stately/useSearchFieldState\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\n\n\n\nconst $29a5029ff43c9612$export$d1c4e4c63cb03a11 = /*#__PURE__*/ (0, $gpBJB$createContext)(null);\nconst $29a5029ff43c9612$export$b94867ecbd698f21 = /*#__PURE__*/ (0, $gpBJB$createHideableComponent)(function SearchField(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $29a5029ff43c9612$export$d1c4e4c63cb03a11);\n    let { validationBehavior: formValidationBehavior } = (0, $7230ffa83bc0c2cf$export$fabf2dc03a41866e)((0, $cdaed739b1139372$export$c24727297075ec6a)) || {};\n    let validationBehavior = props.validationBehavior ?? formValidationBehavior ?? 'native';\n    let inputRef = (0, $gpBJB$useRef)(null);\n    [props, inputRef] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, inputRef, (0, $4b38b5b75ecc6208$export$698f465ec27e93df));\n    let [labelRef, label] = (0, $7230ffa83bc0c2cf$export$9d4c57ee4c6ffdd8)(!props['aria-label'] && !props['aria-labelledby']);\n    let state = (0, $gpBJB$useSearchFieldState)({\n        ...props,\n        validationBehavior: validationBehavior\n    });\n    let { labelProps: labelProps, inputProps: inputProps, clearButtonProps: clearButtonProps, descriptionProps: descriptionProps, errorMessageProps: errorMessageProps, ...validation } = (0, $gpBJB$useSearchField)({\n        ...(0, $7230ffa83bc0c2cf$export$ef03459518577ad4)(props),\n        label: label,\n        validationBehavior: validationBehavior\n    }, state, inputRef);\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        values: {\n            isEmpty: state.value === '',\n            isDisabled: props.isDisabled || false,\n            isInvalid: validation.isInvalid || false,\n            isReadOnly: props.isReadOnly || false,\n            isRequired: props.isRequired || false,\n            state: state\n        },\n        defaultClassName: 'react-aria-SearchField'\n    });\n    let DOMProps = (0, $gpBJB$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.id;\n    return /*#__PURE__*/ (0, $gpBJB$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...DOMProps,\n        ...renderProps,\n        ref: ref,\n        slot: props.slot || undefined,\n        \"data-empty\": state.value === '' || undefined,\n        \"data-disabled\": props.isDisabled || undefined,\n        \"data-invalid\": validation.isInvalid || undefined,\n        \"data-readonly\": props.isReadOnly || undefined,\n        \"data-required\": props.isRequired || undefined\n    }, /*#__PURE__*/ (0, $gpBJB$react).createElement((0, $7230ffa83bc0c2cf$export$2881499e37b75b9a), {\n        values: [\n            [\n                (0, $43a3b93638fe5db9$export$75b6ee27786ba447),\n                {\n                    ...labelProps,\n                    ref: labelRef\n                }\n            ],\n            [\n                (0, $41fb335299a4a39e$export$37fb8590cf2c088c),\n                {\n                    ...inputProps,\n                    ref: inputRef\n                }\n            ],\n            [\n                (0, $7705c033048f6da7$export$24d547caef80ccd1),\n                clearButtonProps\n            ],\n            [\n                (0, $efe09c6d1c304b50$export$9afb8bc826b033ea),\n                {\n                    slots: {\n                        description: descriptionProps,\n                        errorMessage: errorMessageProps\n                    }\n                }\n            ],\n            [\n                (0, $3a442827418ebe87$export$f9c6924e160136d1),\n                {\n                    isInvalid: validation.isInvalid,\n                    isDisabled: props.isDisabled || false\n                }\n            ],\n            [\n                (0, $1f3c3b1a70cec653$export$ff05c3ac10437e03),\n                validation\n            ]\n        ]\n    }, renderProps.children));\n});\n\n\nexport {$29a5029ff43c9612$export$d1c4e4c63cb03a11 as SearchFieldContext, $29a5029ff43c9612$export$b94867ecbd698f21 as SearchField};\n//# sourceMappingURL=SearchField.mjs.map\n","import {chain as $a4e76a5424781910$export$e08e3b67e392101e} from \"../utils/chain.mjs\";\nimport {filterDOMProps as $8e9d2fae0ecb9001$export$457c3d6518dd4c6f} from \"../utils/filterDOMProps.mjs\";\nimport {ListKeyboardDelegate as $ae8f8d98b2b18f2f$export$a05409b8bb224a5a} from \"../selection/ListKeyboardDelegate.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {nodeContains as $23f2114a1b82827e$export$4282f70798064fe0} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {setInteractionModality as $8f5a2122b0992be3$export$8397ddfc504fdb9a} from \"../interactions/useFocusVisible.mjs\";\nimport {useCollator as $673d46fce3e5717d$export$a16aca283550c30d} from \"../i18n/useCollator.mjs\";\nimport {useField as $191c9b6d48a0a4e2$export$294aa081a6c6f55d} from \"../label/useField.mjs\";\nimport {useId as $390e54f620492c70$export$f680877a34711e37} from \"../utils/useId.mjs\";\nimport {useKeyboard as $8296dad1a4c5e0dc$export$8f71654801c2f7cd} from \"../interactions/useKeyboard.mjs\";\nimport {useMenuTrigger as $f19b83c1486f45cc$export$dc9c12ed27dd1b49} from \"../menu/useMenuTrigger.mjs\";\nimport {useTypeSelect as $f5a4a9a3486154da$export$e32c88dfddc6e1d8} from \"../selection/useTypeSelect.mjs\";\nimport {useMemo as $dmsVn$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\n\n\nconst $c0a45cd074520508$export$703601b7e90536f8 = new WeakMap();\nfunction $c0a45cd074520508$export$e64b2f635402ca43(props, state, ref) {\n    let { keyboardDelegate: keyboardDelegate, isDisabled: isDisabled, isRequired: isRequired, name: name, form: form, validationBehavior: validationBehavior = 'aria' } = props;\n    // By default, a KeyboardDelegate is provided which uses the DOM to query layout information (e.g. for page up/page down).\n    // When virtualized, the layout object will be passed in as a prop and override this.\n    let collator = (0, $673d46fce3e5717d$export$a16aca283550c30d)({\n        usage: 'search',\n        sensitivity: 'base'\n    });\n    let delegate = (0, $dmsVn$useMemo)(()=>keyboardDelegate || new (0, $ae8f8d98b2b18f2f$export$a05409b8bb224a5a)(state.collection, state.disabledKeys, ref, collator), [\n        keyboardDelegate,\n        state.collection,\n        state.disabledKeys,\n        collator,\n        ref\n    ]);\n    let { menuTriggerProps: menuTriggerProps, menuProps: menuProps } = (0, $f19b83c1486f45cc$export$dc9c12ed27dd1b49)({\n        isDisabled: isDisabled,\n        type: 'listbox'\n    }, state, ref);\n    let { keyboardProps: keyboardProps } = (0, $8296dad1a4c5e0dc$export$8f71654801c2f7cd)({\n        shortcuts: {\n            ArrowLeft: ()=>{\n                if (state.selectionManager.selectionMode === 'multiple') return false;\n                let key = state.selectedKey != null ? delegate.getKeyAbove?.(state.selectedKey) : delegate.getFirstKey?.();\n                if (key != null) state.setSelectedKey(key);\n            },\n            ArrowRight: ()=>{\n                if (state.selectionManager.selectionMode === 'multiple') return false;\n                let key = state.selectedKey != null ? delegate.getKeyBelow?.(state.selectedKey) : delegate.getFirstKey?.();\n                if (key != null) state.setSelectedKey(key);\n            }\n        },\n        allowRepeats: true,\n        onKeyDown: props.onKeyDown,\n        onKeyUp: props.onKeyUp\n    });\n    let { typeSelectProps: typeSelectProps } = (0, $f5a4a9a3486154da$export$e32c88dfddc6e1d8)({\n        keyboardDelegate: delegate,\n        selectionManager: state.selectionManager,\n        onTypeSelect (key) {\n            state.setSelectedKey(key);\n        }\n    });\n    let { isInvalid: isInvalid, validationErrors: validationErrors, validationDetails: validationDetails } = state.displayValidation;\n    let { labelProps: labelProps, fieldProps: fieldProps, descriptionProps: descriptionProps, errorMessageProps: errorMessageProps } = (0, $191c9b6d48a0a4e2$export$294aa081a6c6f55d)({\n        ...props,\n        labelElementType: 'span',\n        isInvalid: isInvalid,\n        errorMessage: props.errorMessage || validationErrors\n    });\n    if (state.selectionManager.selectionMode === 'multiple') typeSelectProps = {};\n    let domProps = (0, $8e9d2fae0ecb9001$export$457c3d6518dd4c6f)(props, {\n        labelable: true\n    });\n    let triggerProps = (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(typeSelectProps, menuTriggerProps, fieldProps);\n    let valueId = (0, $390e54f620492c70$export$f680877a34711e37)();\n    $c0a45cd074520508$export$703601b7e90536f8.set(state, {\n        isDisabled: isDisabled,\n        isRequired: isRequired,\n        name: name,\n        form: form,\n        validationBehavior: validationBehavior\n    });\n    return {\n        labelProps: {\n            ...labelProps,\n            onClick: ()=>{\n                if (!props.isDisabled) {\n                    ref.current?.focus();\n                    // Show the focus ring so the user knows where focus went\n                    (0, $8f5a2122b0992be3$export$8397ddfc504fdb9a)('keyboard');\n                }\n            }\n        },\n        triggerProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(domProps, {\n            ...triggerProps,\n            isDisabled: isDisabled,\n            onKeyDown: (0, $a4e76a5424781910$export$e08e3b67e392101e)(triggerProps.onKeyDown, keyboardProps.onKeyDown),\n            onKeyUp: keyboardProps.onKeyUp,\n            'aria-labelledby': [\n                valueId,\n                triggerProps['aria-labelledby'],\n                triggerProps['aria-label'] && !triggerProps['aria-labelledby'] ? triggerProps.id : null\n            ].filter(Boolean).join(' '),\n            onFocus (e) {\n                if (state.isFocused) return;\n                if (props.onFocus) props.onFocus(e);\n                if (props.onFocusChange) props.onFocusChange(true);\n                state.setFocused(true);\n            },\n            onBlur (e) {\n                if (state.isOpen) return;\n                if (props.onBlur) props.onBlur(e);\n                if (props.onFocusChange) props.onFocusChange(false);\n                state.setFocused(false);\n            }\n        }),\n        valueProps: {\n            id: valueId\n        },\n        menuProps: {\n            ...menuProps,\n            onAction: undefined,\n            autoFocus: state.focusStrategy || true,\n            shouldSelectOnPressUp: true,\n            shouldFocusOnHover: true,\n            disallowEmptySelection: true,\n            linkBehavior: 'selection',\n            onBlur: (e)=>{\n                if ((0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, e.relatedTarget)) return;\n                if (props.onBlur) props.onBlur(e);\n                if (props.onFocusChange) props.onFocusChange(false);\n                state.setFocused(false);\n            },\n            'aria-labelledby': [\n                fieldProps['aria-labelledby'],\n                triggerProps['aria-label'] && !fieldProps['aria-labelledby'] ? triggerProps.id : null\n            ].filter(Boolean).join(' ')\n        },\n        descriptionProps: descriptionProps,\n        errorMessageProps: errorMessageProps,\n        isInvalid: isInvalid,\n        validationErrors: validationErrors,\n        validationDetails: validationDetails,\n        hiddenSelectProps: {\n            isDisabled: isDisabled,\n            name: name,\n            label: props.label,\n            state: state,\n            triggerRef: ref,\n            form: form\n        }\n    };\n}\n\n\nexport {$c0a45cd074520508$export$703601b7e90536f8 as selectData, $c0a45cd074520508$export$e64b2f635402ca43 as useSelect};\n//# sourceMappingURL=useSelect.mjs.map\n","import {getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {selectData as $c0a45cd074520508$export$703601b7e90536f8} from \"./useSelect.mjs\";\nimport {useFormReset as $3274bf1495747a7b$export$5add1d006293d136} from \"../utils/useFormReset.mjs\";\nimport {useFormValidation as $860f7da480e22816$export$b8473d3665f3a75a} from \"../form/useFormValidation.mjs\";\nimport {useVisuallyHidden as $ea3928288112382f$export$a966af930f325cab} from \"../visually-hidden/VisuallyHidden.mjs\";\nimport $8AqU6$react, {useCallback as $8AqU6$useCallback, useRef as $8AqU6$useRef} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\nfunction $b046d185a4525d56$export$f809e80f58e251d1(props, state, triggerRef) {\n    let data = (0, $c0a45cd074520508$export$703601b7e90536f8).get(state) || {};\n    let { autoComplete: autoComplete, name: name = data.name, form: form = data.form, isDisabled: isDisabled = data.isDisabled } = props;\n    let { validationBehavior: validationBehavior, isRequired: isRequired } = data;\n    let { visuallyHiddenProps: visuallyHiddenProps } = (0, $ea3928288112382f$export$a966af930f325cab)({\n        style: {\n            // Prevent page scrolling.\n            position: 'fixed',\n            top: 0,\n            left: 0\n        }\n    });\n    (0, $3274bf1495747a7b$export$5add1d006293d136)(props.selectRef, state.defaultValue, state.setValue);\n    (0, $860f7da480e22816$export$b8473d3665f3a75a)({\n        validationBehavior: validationBehavior,\n        focus: ()=>triggerRef.current?.focus()\n    }, state, props.selectRef);\n    let setValue = state.setValue;\n    // Used for both onChange and onInput, so accept the common supertype of both event types.\n    let onChange = (0, $8AqU6$useCallback)((e)=>{\n        let eventTarget = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n        if (eventTarget.multiple) setValue(Array.from(eventTarget.selectedOptions, (option)=>option.value));\n        else setValue(e.currentTarget.value);\n    }, [\n        setValue\n    ]);\n    // In Safari, the <select> cannot have `display: none` or `hidden` for autofill to work.\n    // In Firefox, there must be a <label> to identify the <select> whereas other browsers\n    // seem to identify it just by surrounding text.\n    // The solution is to use <VisuallyHidden> to hide the elements, which clips the elements to a\n    // 1px rectangle. In addition, we hide from screen readers with aria-hidden, and make the <select>\n    // non tabbable with tabIndex={-1}.\n    return {\n        containerProps: {\n            ...visuallyHiddenProps,\n            'aria-hidden': true,\n            // @ts-ignore\n            ['data-react-aria-prevent-focus']: true,\n            // @ts-ignore\n            ['data-a11y-ignore']: 'aria-hidden-focus'\n        },\n        inputProps: {\n            style: {\n                display: 'none'\n            }\n        },\n        selectProps: {\n            tabIndex: -1,\n            autoComplete: autoComplete,\n            disabled: isDisabled,\n            multiple: state.selectionManager.selectionMode === 'multiple',\n            required: validationBehavior === 'native' && isRequired,\n            name: name,\n            form: form,\n            value: state.value ?? '',\n            onChange: onChange,\n            onInput: onChange\n        }\n    };\n}\nfunction $b046d185a4525d56$export$cbd84cdb2e668835(props) {\n    let { state: state, triggerRef: triggerRef, label: label, name: name, form: form, isDisabled: isDisabled } = props;\n    let selectRef = (0, $8AqU6$useRef)(null);\n    let inputRef = (0, $8AqU6$useRef)(null);\n    let { containerProps: containerProps, selectProps: selectProps } = $b046d185a4525d56$export$f809e80f58e251d1({\n        ...props,\n        selectRef: state.collection.size <= 300 ? selectRef : inputRef\n    }, state, triggerRef);\n    let values = Array.isArray(state.value) ? state.value : [\n        state.value\n    ];\n    // If used in a <form>, use a hidden input so the value can be submitted to a server.\n    // If the collection isn't too big, use a hidden <select> element for this so that browser\n    // autofill will work. Otherwise, use an <input type=\"hidden\">.\n    if (state.collection.size <= 300) return /*#__PURE__*/ (0, $8AqU6$react).createElement(\"div\", {\n        ...containerProps,\n        \"data-testid\": \"hidden-select-container\"\n    }, /*#__PURE__*/ (0, $8AqU6$react).createElement(\"label\", null, label, /*#__PURE__*/ (0, $8AqU6$react).createElement(\"select\", {\n        ...selectProps,\n        ref: selectRef\n    }, /*#__PURE__*/ (0, $8AqU6$react).createElement(\"option\", {\n        value: \"\",\n        label: '\\u00A0'\n    }, '\\u00A0'), [\n        ...state.collection.getKeys()\n    ].map((key)=>{\n        let item = state.collection.getItem(key);\n        if (item && item.type === 'item') return /*#__PURE__*/ (0, $8AqU6$react).createElement(\"option\", {\n            key: item.key,\n            value: item.key\n        }, item.textValue);\n    }), state.collection.size === 0 && name && values.map((value, i)=>/*#__PURE__*/ (0, $8AqU6$react).createElement(\"option\", {\n            key: i,\n            value: value ?? ''\n        })))));\n    else if (name) {\n        let data = (0, $c0a45cd074520508$export$703601b7e90536f8).get(state) || {};\n        let { validationBehavior: validationBehavior } = data;\n        // Always render at least one hidden input to ensure required form submission.\n        if (values.length === 0) values = [\n            null\n        ];\n        let res = values.map((value, i)=>{\n            let inputProps = {\n                type: 'hidden',\n                autoComplete: selectProps.autoComplete,\n                name: name,\n                form: form,\n                disabled: isDisabled,\n                value: value ?? ''\n            };\n            if (validationBehavior === 'native') // Use a hidden <input type=\"text\"> rather than <input type=\"hidden\">\n            // so that an empty value blocks HTML form submission when the field is required.\n            return /*#__PURE__*/ (0, $8AqU6$react).createElement(\"input\", {\n                key: i,\n                ...inputProps,\n                ref: i === 0 ? inputRef : null,\n                style: {\n                    display: 'none'\n                },\n                type: \"text\",\n                required: i === 0 ? selectProps.required : false,\n                onChange: ()=>{\n                /** Ignore react warning. */ }\n            });\n            return /*#__PURE__*/ (0, $8AqU6$react).createElement(\"input\", {\n                key: i,\n                ...inputProps,\n                ref: i === 0 ? inputRef : null\n            });\n        });\n        return /*#__PURE__*/ (0, $8AqU6$react).createElement((0, $8AqU6$react).Fragment, null, res);\n    }\n    return null;\n}\n\n\nexport {$b046d185a4525d56$export$f809e80f58e251d1 as useHiddenSelect, $b046d185a4525d56$export$cbd84cdb2e668835 as HiddenSelect};\n//# sourceMappingURL=HiddenSelect.mjs.map\n","import {useFormValidationState as $fd2148440a13ec26$export$fc1a364ae1f3ff10} from \"../form/useFormValidationState.mjs\";\nimport {useListState as $b14b6f590b50af39$export$2f645645f7bca764} from \"../list/useListState.mjs\";\nimport {useOverlayTriggerState as $f11fb0bcf1b2687a$export$61c6a8c84e605fb6} from \"../overlays/useOverlayTriggerState.mjs\";\nimport {useControlledState as $3e6197669829fe11$export$40bfa8c7b0832715} from \"../utils/useControlledState.mjs\";\nimport {useState as $5t5rb$useState, useMemo as $5t5rb$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nfunction $29256f53a2edafe9$export$5159ec8b34d4ec12(props) {\n    let { selectionMode: selectionMode = 'single', shouldCloseOnSelect: shouldCloseOnSelect = selectionMode === 'single' } = props;\n    let triggerState = (0, $f11fb0bcf1b2687a$export$61c6a8c84e605fb6)(props);\n    let [focusStrategy, setFocusStrategy] = (0, $5t5rb$useState)(null);\n    let defaultValue = (0, $5t5rb$useMemo)(()=>{\n        return props.defaultValue !== undefined ? props.defaultValue : selectionMode === 'single' ? props.defaultSelectedKey ?? null : [];\n    }, [\n        props.defaultValue,\n        props.defaultSelectedKey,\n        selectionMode\n    ]);\n    let value = (0, $5t5rb$useMemo)(()=>{\n        return props.value !== undefined ? props.value : selectionMode === 'single' ? props.selectedKey : undefined;\n    }, [\n        props.value,\n        props.selectedKey,\n        selectionMode\n    ]);\n    let [controlledValue, setControlledValue] = (0, $3e6197669829fe11$export$40bfa8c7b0832715)(value, defaultValue, props.onChange);\n    // Only display the first selected item if in single selection mode but the value is an array.\n    let displayValue = selectionMode === 'single' && Array.isArray(controlledValue) ? controlledValue[0] : controlledValue;\n    let setValue = (value)=>{\n        if (selectionMode === 'single') {\n            let key = Array.isArray(value) ? value[0] ?? null : value;\n            setControlledValue(key);\n            if (key !== displayValue) props.onSelectionChange?.(key);\n        } else {\n            let keys = [];\n            if (Array.isArray(value)) keys = value;\n            else if (value != null) keys = [\n                value\n            ];\n            setControlledValue(keys);\n        }\n    };\n    // oxlint-disable-next-line react/react-compiler\n    let listState = (0, $b14b6f590b50af39$export$2f645645f7bca764)({\n        ...props,\n        selectionMode: selectionMode,\n        disallowEmptySelection: selectionMode === 'single',\n        allowDuplicateSelectionEvents: true,\n        selectedKeys: (0, $5t5rb$useMemo)(()=>$29256f53a2edafe9$var$convertValue(displayValue), [\n            displayValue\n        ]),\n        onSelectionChange: (keys)=>{\n            // impossible, but TS doesn't know that\n            if (keys === 'all') return;\n            if (selectionMode === 'single') {\n                let key = keys.values().next().value ?? null;\n                setValue(key);\n            } else setValue([\n                ...keys\n            ]);\n            if (shouldCloseOnSelect) triggerState.close();\n            validationState.commitValidation();\n        }\n    });\n    let selectedKey = listState.selectionManager.firstSelectedKey;\n    let selectedItems = (0, $5t5rb$useMemo)(()=>{\n        return [\n            ...listState.selectionManager.selectedKeys\n        ].map((key)=>listState.collection.getItem(key)).filter((item)=>item != null);\n    }, [\n        listState.selectionManager.selectedKeys,\n        listState.collection\n    ]);\n    let validationState = (0, $fd2148440a13ec26$export$fc1a364ae1f3ff10)({\n        ...props,\n        value: Array.isArray(displayValue) && displayValue.length === 0 ? null : displayValue\n    });\n    let [isFocused, setFocused] = (0, $5t5rb$useState)(false);\n    let [initialValue] = (0, $5t5rb$useState)(displayValue);\n    return {\n        ...validationState,\n        ...listState,\n        ...triggerState,\n        value: displayValue,\n        defaultValue: defaultValue ?? initialValue,\n        setValue: setValue,\n        selectedKey: selectedKey,\n        setSelectedKey: setValue,\n        selectedItem: selectedItems[0] ?? null,\n        selectedItems: selectedItems,\n        defaultSelectedKey: props.defaultSelectedKey ?? (props.selectionMode === 'single' ? initialValue : null),\n        focusStrategy: focusStrategy,\n        open (focusStrategy = null) {\n            // Don't open if the collection is empty.\n            if (listState.collection.size !== 0 || props.allowsEmptyCollection) {\n                setFocusStrategy(focusStrategy);\n                triggerState.open();\n            }\n        },\n        toggle (focusStrategy = null) {\n            if (listState.collection.size !== 0 || props.allowsEmptyCollection) {\n                setFocusStrategy(focusStrategy);\n                triggerState.toggle();\n            }\n        },\n        isFocused: isFocused,\n        setFocused: setFocused\n    };\n}\nfunction $29256f53a2edafe9$var$convertValue(value) {\n    if (value === undefined) return undefined;\n    if (value === null) return [];\n    return Array.isArray(value) ? value : [\n        value\n    ];\n}\n\n\nexport {$29256f53a2edafe9$export$5159ec8b34d4ec12 as useSelectState};\n//# sourceMappingURL=useSelectState.mjs.map\n","import {ButtonContext as $7705c033048f6da7$export$24d547caef80ccd1} from \"./Button.mjs\";\nimport {dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, Provider as $7230ffa83bc0c2cf$export$2881499e37b75b9a, removeDataAttributes as $7230ffa83bc0c2cf$export$ef03459518577ad4, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415, useRenderProps as $7230ffa83bc0c2cf$export$4d86445c2cf5e3, useSlot as $7230ffa83bc0c2cf$export$9d4c57ee4c6ffdd8, useSlottedContext as $7230ffa83bc0c2cf$export$fabf2dc03a41866e} from \"./utils.mjs\";\nimport {FieldErrorContext as $1f3c3b1a70cec653$export$ff05c3ac10437e03} from \"./FieldError.mjs\";\nimport {FormContext as $cdaed739b1139372$export$c24727297075ec6a} from \"./Form.mjs\";\nimport $2l4Cq$intlStringsmjs from \"./intlStrings.mjs\";\nimport {LabelContext as $43a3b93638fe5db9$export$75b6ee27786ba447} from \"./Label.mjs\";\nimport {ListBoxContext as $928221da08ecbc62$export$7ff8f37d2d81a48d, ListStateContext as $928221da08ecbc62$export$7c5906fe4f1f2af2} from \"./ListBox.mjs\";\nimport {OverlayTriggerStateContext as $f2ff30fde7b014be$export$d2f961adcb0afbe} from \"./Dialog.mjs\";\nimport {PopoverContext as $542a13ca2fa5b484$export$9b9a0cd73afb7ca4} from \"./Popover.mjs\";\nimport {TextContext as $efe09c6d1c304b50$export$9afb8bc826b033ea} from \"./Text.mjs\";\nimport {useSelect as $2l4Cq$useSelect, HiddenSelect as $2l4Cq$HiddenSelect} from \"react-aria/useSelect\";\nimport {CollectionBuilder as $2l4Cq$CollectionBuilder} from \"react-aria/CollectionBuilder\";\nimport {createHideableComponent as $2l4Cq$createHideableComponent} from \"react-aria/private/collections/Hidden\";\nimport {filterDOMProps as $2l4Cq$filterDOMProps} from \"react-aria/filterDOMProps\";\nimport {mergeProps as $2l4Cq$mergeProps} from \"react-aria/mergeProps\";\nimport $2l4Cq$react, {createContext as $2l4Cq$createContext, useMemo as $2l4Cq$useMemo, useRef as $2l4Cq$useRef, useContext as $2l4Cq$useContext, Fragment as $2l4Cq$Fragment} from \"react\";\nimport {useSelectState as $2l4Cq$useSelectState} from \"react-stately/useSelectState\";\nimport {useFocusRing as $2l4Cq$useFocusRing} from \"react-aria/useFocusRing\";\nimport {useListFormatter as $2l4Cq$useListFormatter} from \"react-aria/useListFormatter\";\nimport {useLocalizedStringFormatter as $2l4Cq$useLocalizedStringFormatter} from \"react-aria/useLocalizedStringFormatter\";\n\n\nfunction $parcel$interopDefault(a) {\n  return a && a.__esModule ? a.default : a;\n}\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst $c8bb816105474884$export$7540cee5be7dc19b = /*#__PURE__*/ (0, $2l4Cq$createContext)(null);\nconst $c8bb816105474884$export$ef445b55be0601bd = /*#__PURE__*/ (0, $2l4Cq$createContext)(null);\nconst $c8bb816105474884$export$ef9b1a59e592288f = /*#__PURE__*/ (0, $2l4Cq$createHideableComponent)(function Select(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $c8bb816105474884$export$7540cee5be7dc19b);\n    let { children: children, isDisabled: isDisabled = false, isInvalid: isInvalid = false, isRequired: isRequired = false } = props;\n    let content = (0, $2l4Cq$useMemo)(()=>typeof children === 'function' ? children({\n            isOpen: false,\n            isDisabled: isDisabled,\n            isInvalid: isInvalid,\n            isRequired: isRequired,\n            isFocused: false,\n            isFocusVisible: false,\n            defaultChildren: null\n        }) : children, [\n        children,\n        isDisabled,\n        isInvalid,\n        isRequired\n    ]);\n    return /*#__PURE__*/ (0, $2l4Cq$react).createElement((0, $2l4Cq$CollectionBuilder), {\n        content: content\n    }, (collection)=>/*#__PURE__*/ (0, $2l4Cq$react).createElement($c8bb816105474884$var$SelectInner, {\n            props: props,\n            collection: collection,\n            selectRef: ref\n        }));\n});\n// Contexts to clear inside the popover.\nconst $c8bb816105474884$var$CLEAR_CONTEXTS = [\n    (0, $43a3b93638fe5db9$export$75b6ee27786ba447),\n    (0, $7705c033048f6da7$export$24d547caef80ccd1),\n    (0, $efe09c6d1c304b50$export$9afb8bc826b033ea)\n];\nfunction $c8bb816105474884$var$SelectInner({ props: props, selectRef: ref, collection: collection }) {\n    let { validationBehavior: formValidationBehavior } = (0, $7230ffa83bc0c2cf$export$fabf2dc03a41866e)((0, $cdaed739b1139372$export$c24727297075ec6a)) || {};\n    let validationBehavior = props.validationBehavior ?? formValidationBehavior ?? 'native';\n    let state = (0, $2l4Cq$useSelectState)({\n        ...props,\n        collection: collection,\n        children: undefined,\n        validationBehavior: validationBehavior\n    });\n    let { isFocusVisible: isFocusVisible, focusProps: focusProps } = (0, $2l4Cq$useFocusRing)({\n        within: true\n    });\n    // Get props for child elements from useSelect\n    let buttonRef = (0, $2l4Cq$useRef)(null);\n    let [labelRef, label] = (0, $7230ffa83bc0c2cf$export$9d4c57ee4c6ffdd8)(!props['aria-label'] && !props['aria-labelledby']);\n    let { labelProps: labelProps, triggerProps: triggerProps, valueProps: valueProps, menuProps: menuProps, descriptionProps: descriptionProps, errorMessageProps: errorMessageProps, hiddenSelectProps: hiddenSelectProps, ...validation } = (0, $2l4Cq$useSelect)({\n        ...(0, $7230ffa83bc0c2cf$export$ef03459518577ad4)(props),\n        label: label,\n        validationBehavior: validationBehavior\n    }, state, buttonRef);\n    // Only expose a subset of state to renderProps function to avoid infinite render loop\n    let renderPropsState = (0, $2l4Cq$useMemo)(()=>({\n            isOpen: state.isOpen,\n            isFocused: state.isFocused,\n            isFocusVisible: isFocusVisible,\n            isDisabled: props.isDisabled || false,\n            isInvalid: validation.isInvalid || false,\n            isRequired: props.isRequired || false\n        }), [\n        state.isOpen,\n        state.isFocused,\n        isFocusVisible,\n        props.isDisabled,\n        validation.isInvalid,\n        props.isRequired\n    ]);\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        values: renderPropsState,\n        defaultClassName: 'react-aria-Select'\n    });\n    let DOMProps = (0, $2l4Cq$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.id;\n    let scrollRef = (0, $2l4Cq$useRef)(null);\n    return /*#__PURE__*/ (0, $2l4Cq$react).createElement((0, $7230ffa83bc0c2cf$export$2881499e37b75b9a), {\n        values: [\n            [\n                $c8bb816105474884$export$7540cee5be7dc19b,\n                props\n            ],\n            [\n                $c8bb816105474884$export$ef445b55be0601bd,\n                state\n            ],\n            [\n                $c8bb816105474884$export$f8f745c04421623f,\n                valueProps\n            ],\n            [\n                (0, $43a3b93638fe5db9$export$75b6ee27786ba447),\n                {\n                    ...labelProps,\n                    ref: labelRef,\n                    elementType: 'span'\n                }\n            ],\n            [\n                (0, $7705c033048f6da7$export$24d547caef80ccd1),\n                {\n                    ...triggerProps,\n                    ref: buttonRef,\n                    isPressed: state.isOpen,\n                    autoFocus: props.autoFocus\n                }\n            ],\n            [\n                (0, $f2ff30fde7b014be$export$d2f961adcb0afbe),\n                state\n            ],\n            [\n                (0, $542a13ca2fa5b484$export$9b9a0cd73afb7ca4),\n                {\n                    trigger: 'Select',\n                    triggerRef: buttonRef,\n                    scrollRef: scrollRef,\n                    placement: 'bottom start',\n                    'aria-labelledby': menuProps['aria-labelledby'],\n                    clearContexts: $c8bb816105474884$var$CLEAR_CONTEXTS\n                }\n            ],\n            [\n                (0, $928221da08ecbc62$export$7ff8f37d2d81a48d),\n                {\n                    ...menuProps,\n                    ref: scrollRef\n                }\n            ],\n            [\n                (0, $928221da08ecbc62$export$7c5906fe4f1f2af2),\n                state\n            ],\n            [\n                (0, $efe09c6d1c304b50$export$9afb8bc826b033ea),\n                {\n                    slots: {\n                        description: descriptionProps,\n                        errorMessage: errorMessageProps\n                    }\n                }\n            ],\n            [\n                (0, $1f3c3b1a70cec653$export$ff05c3ac10437e03),\n                validation\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $2l4Cq$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...(0, $2l4Cq$mergeProps)(DOMProps, renderProps, focusProps),\n        ref: ref,\n        slot: props.slot || undefined,\n        \"data-focused\": state.isFocused || undefined,\n        \"data-focus-visible\": isFocusVisible || undefined,\n        \"data-open\": state.isOpen || undefined,\n        \"data-disabled\": props.isDisabled || undefined,\n        \"data-invalid\": validation.isInvalid || undefined,\n        \"data-required\": props.isRequired || undefined\n    }, renderProps.children, /*#__PURE__*/ (0, $2l4Cq$react).createElement((0, $2l4Cq$HiddenSelect), {\n        ...hiddenSelectProps,\n        autoComplete: props.autoComplete\n    })));\n}\nconst $c8bb816105474884$export$f8f745c04421623f = /*#__PURE__*/ (0, $2l4Cq$createContext)(null);\nconst $c8bb816105474884$export$e288731fd71264f0 = /*#__PURE__*/ (0, $2l4Cq$createHideableComponent)(function SelectValue(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $c8bb816105474884$export$f8f745c04421623f);\n    let state = (0, $2l4Cq$useContext)($c8bb816105474884$export$ef445b55be0601bd);\n    let { placeholder: placeholder } = (0, $7230ffa83bc0c2cf$export$fabf2dc03a41866e)($c8bb816105474884$export$7540cee5be7dc19b);\n    let rendered = state.selectedItems.map((item)=>{\n        let rendered = item.props?.children;\n        // If the selected item has a function as a child, we need to call it to render to React.JSX.\n        if (typeof rendered === 'function') {\n            let fn = rendered;\n            rendered = fn({\n                isHovered: false,\n                isPressed: false,\n                isSelected: false,\n                isFocused: false,\n                isFocusVisible: false,\n                isDisabled: false,\n                selectionMode: 'single',\n                selectionBehavior: 'toggle'\n            });\n        }\n        return rendered;\n    });\n    let formatter = (0, $2l4Cq$useListFormatter)();\n    let textValue = (0, $2l4Cq$useMemo)(()=>state.selectedItems.map((item)=>item?.textValue), [\n        state.selectedItems\n    ]);\n    let selectionMode = state.selectionManager.selectionMode;\n    let selectedText = (0, $2l4Cq$useMemo)(()=>selectionMode === 'single' ? textValue[0] ?? '' : formatter.format(textValue), [\n        selectionMode,\n        formatter,\n        textValue\n    ]);\n    let defaultChildren = (0, $2l4Cq$useMemo)(()=>{\n        if (selectionMode === 'single') return rendered[0];\n        let parts = formatter.formatToParts(textValue);\n        if (parts.length === 0) return null;\n        let index = 0;\n        return parts.map((part)=>{\n            if (part.type === 'element') return /*#__PURE__*/ (0, $2l4Cq$react).createElement((0, $2l4Cq$Fragment), {\n                key: index\n            }, rendered[index++]);\n            else return part.value;\n        });\n    }, [\n        selectionMode,\n        formatter,\n        textValue,\n        rendered\n    ]);\n    let stringFormatter = (0, $2l4Cq$useLocalizedStringFormatter)((0, ($parcel$interopDefault($2l4Cq$intlStringsmjs))), 'react-aria-components');\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        defaultChildren: defaultChildren ?? placeholder ?? stringFormatter.format('selectPlaceholder'),\n        defaultClassName: 'react-aria-SelectValue',\n        values: {\n            selectedItem: state.selectedItems[0]?.value ?? null,\n            selectedItems: (0, $2l4Cq$useMemo)(()=>state.selectedItems.map((item)=>item.value ?? null), [\n                state.selectedItems\n            ]),\n            selectedText: selectedText,\n            isPlaceholder: state.selectedItems.length === 0,\n            state: state\n        }\n    });\n    let DOMProps = (0, $2l4Cq$filterDOMProps)(props, {\n        global: true\n    });\n    return /*#__PURE__*/ (0, $2l4Cq$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).span, {\n        ref: ref,\n        ...DOMProps,\n        ...renderProps,\n        \"data-placeholder\": state.selectedItems.length === 0 || undefined\n    }, /*#__PURE__*/ (0, $2l4Cq$react).createElement((0, $efe09c6d1c304b50$export$9afb8bc826b033ea).Provider, {\n        value: undefined\n    }, renderProps.children));\n});\n\n\nexport {$c8bb816105474884$export$7540cee5be7dc19b as SelectContext, $c8bb816105474884$export$ef445b55be0601bd as SelectStateContext, $c8bb816105474884$export$ef9b1a59e592288f as Select, $c8bb816105474884$export$f8f745c04421623f as SelectValueContext, $c8bb816105474884$export$e288731fd71264f0 as SelectValue};\n//# sourceMappingURL=Select.mjs.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ const $a251981b23baaa12$export$c5f62239608282b6 = new WeakMap();\nfunction $a251981b23baaa12$export$567fc7097e064344(state, key, role) {\n    if (!state) // this case should only happen in the first render before the tabs are registered\n    return '';\n    if (typeof key === 'string') key = key.replace(/\\s+/g, '');\n    let baseId = $a251981b23baaa12$export$c5f62239608282b6.get(state);\n    if (process.env.NODE_ENV !== 'production' && !baseId) console.error('There is no tab id, please check if you have rendered the tab panel before the tab list.');\n    return `${baseId}-${role}-${key}`;\n}\n\n\nexport {$a251981b23baaa12$export$c5f62239608282b6 as tabsIds, $a251981b23baaa12$export$567fc7097e064344 as generateId};\n//# sourceMappingURL=utils.mjs.map\n","import {filterDOMProps as $8e9d2fae0ecb9001$export$457c3d6518dd4c6f} from \"../utils/filterDOMProps.mjs\";\nimport {generateId as $a251981b23baaa12$export$567fc7097e064344} from \"./utils.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {useFocusable as $d1116acdf220c2da$export$4c014de7c8940b4c} from \"../interactions/useFocusable.mjs\";\nimport {useLinkProps as $caaf0dd3060ed57c$export$7e924b3091a3bd18} from \"../utils/openLink.mjs\";\nimport {useSelectableItem as $f6ba6936bfd098a0$export$ecf600387e221c37} from \"../selection/useSelectableItem.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\nfunction $1b6fa05bad3d7740$export$fdf4756d5b8ef90a(props, state, ref) {\n    let { key: key, isDisabled: propsDisabled, shouldSelectOnPressUp: shouldSelectOnPressUp } = props;\n    let { selectionManager: manager, selectedKey: selectedKey } = state;\n    let isSelected = key === selectedKey;\n    let isDisabled = propsDisabled || state.isDisabled || state.selectionManager.isDisabled(key);\n    let item = state.collection.getItem(key);\n    let { itemProps: itemProps, isPressed: isPressed } = (0, $f6ba6936bfd098a0$export$ecf600387e221c37)({\n        selectionManager: manager,\n        key: key,\n        ref: ref,\n        isDisabled: isDisabled,\n        // Link tabs should behave like native anchors (navigate on press up)\n        // This avoids reopening beforeunload dialogs when browsers replay\n        // queued pointer enter/leave events after cancellation.\n        shouldSelectOnPressUp: shouldSelectOnPressUp ?? item?.props.href != null,\n        linkBehavior: 'selection'\n    });\n    let tabId = (0, $a251981b23baaa12$export$567fc7097e064344)(state, key, 'tab');\n    let tabPanelId = (0, $a251981b23baaa12$export$567fc7097e064344)(state, key, 'tabpanel');\n    let { tabIndex: tabIndex } = itemProps;\n    let domProps = (0, $8e9d2fae0ecb9001$export$457c3d6518dd4c6f)(item?.props, {\n        labelable: true\n    });\n    delete domProps.id;\n    let linkProps = (0, $caaf0dd3060ed57c$export$7e924b3091a3bd18)(item?.props);\n    let { focusableProps: focusableProps } = (0, $d1116acdf220c2da$export$4c014de7c8940b4c)({\n        ...item?.props,\n        isDisabled: isDisabled\n    }, ref);\n    return {\n        tabProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(domProps, focusableProps, linkProps, itemProps, {\n            id: tabId,\n            'aria-selected': isSelected,\n            'aria-disabled': isDisabled || undefined,\n            'aria-controls': isSelected ? tabPanelId : undefined,\n            tabIndex: isDisabled ? undefined : tabIndex,\n            role: 'tab'\n        }),\n        isSelected: isSelected,\n        isDisabled: isDisabled,\n        isPressed: isPressed\n    };\n}\n\n\nexport {$1b6fa05bad3d7740$export$fdf4756d5b8ef90a as useTab};\n//# sourceMappingURL=useTab.mjs.map\n","import {generateId as $a251981b23baaa12$export$567fc7097e064344} from \"./utils.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {useHasTabbableChild as $bf14c9739fda2eb3$export$eac1895992b9f3d6} from \"../focus/useHasTabbableChild.mjs\";\nimport {useLabels as $e8ac3c3f5d4bae7f$export$d6875122194c7b44} from \"../utils/useLabels.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nfunction $7d951241dadd72e4$export$fae0121b5afe572d(props, state, ref) {\n    // The tabpanel should have tabIndex=0 when there are no tabbable elements within it.\n    // Otherwise, tabbing from the focused tab should go directly to the first tabbable element\n    // within the tabpanel.\n    let tabIndex = (0, $bf14c9739fda2eb3$export$eac1895992b9f3d6)(ref) ? undefined : 0;\n    const id = (0, $a251981b23baaa12$export$567fc7097e064344)(state, props.id ?? state?.selectedKey, 'tabpanel');\n    const tabPanelProps = (0, $e8ac3c3f5d4bae7f$export$d6875122194c7b44)({\n        ...props,\n        id: id,\n        'aria-labelledby': (0, $a251981b23baaa12$export$567fc7097e064344)(state, state?.selectedKey, 'tab')\n    });\n    return {\n        tabPanelProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(tabPanelProps, {\n            tabIndex: tabIndex,\n            role: 'tabpanel',\n            'aria-describedby': props['aria-describedby'],\n            'aria-details': props['aria-details']\n        })\n    };\n}\n\n\nexport {$7d951241dadd72e4$export$fae0121b5afe572d as useTabPanel};\n//# sourceMappingURL=useTabPanel.mjs.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ class $a226bee26c88efd7$export$15010ca3c1abe90b {\n    constructor(collection, direction, orientation, disabledKeys = new Set()){\n        this.collection = collection;\n        // getKeyLeftOf/getKeyRightOf follow the locale's text direction regardless of orientation,\n        // so ArrowLeft always moves to the next tab in RTL. getKeyAbove/getKeyBelow are never flipped.\n        this.flipDirection = direction === 'rtl';\n        this.disabledKeys = disabledKeys;\n        this.tabDirection = orientation === 'horizontal';\n    }\n    getKeyLeftOf(key) {\n        if (this.flipDirection) return this.getNextKey(key);\n        return this.getPreviousKey(key);\n    }\n    getKeyRightOf(key) {\n        if (this.flipDirection) return this.getPreviousKey(key);\n        return this.getNextKey(key);\n    }\n    isDisabled(key) {\n        return this.disabledKeys.has(key) || !!this.collection.getItem(key)?.props?.isDisabled;\n    }\n    getFirstKey() {\n        let key = this.collection.getFirstKey();\n        if (key != null && this.isDisabled(key)) key = this.getNextKey(key);\n        return key;\n    }\n    getLastKey() {\n        let key = this.collection.getLastKey();\n        if (key != null && this.isDisabled(key)) key = this.getPreviousKey(key);\n        return key;\n    }\n    getKeyAbove(key) {\n        if (this.tabDirection) return null;\n        return this.getPreviousKey(key);\n    }\n    getKeyBelow(key) {\n        if (this.tabDirection) return null;\n        return this.getNextKey(key);\n    }\n    getNextKey(startKey) {\n        let key = startKey;\n        do {\n            key = this.collection.getKeyAfter(key);\n            if (key == null) key = this.collection.getFirstKey();\n        }while (key != null && this.isDisabled(key) && key !== startKey);\n        return key;\n    }\n    getPreviousKey(startKey) {\n        let key = startKey;\n        do {\n            key = this.collection.getKeyBefore(key);\n            if (key == null) key = this.collection.getLastKey();\n        }while (key != null && this.isDisabled(key) && key !== startKey);\n        return key;\n    }\n}\n\n\nexport {$a226bee26c88efd7$export$15010ca3c1abe90b as TabsKeyboardDelegate};\n//# sourceMappingURL=TabsKeyboardDelegate.mjs.map\n","import {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {tabsIds as $a251981b23baaa12$export$c5f62239608282b6} from \"./utils.mjs\";\nimport {TabsKeyboardDelegate as $a226bee26c88efd7$export$15010ca3c1abe90b} from \"./TabsKeyboardDelegate.mjs\";\nimport {useId as $390e54f620492c70$export$f680877a34711e37} from \"../utils/useId.mjs\";\nimport {useLabels as $e8ac3c3f5d4bae7f$export$d6875122194c7b44} from \"../utils/useLabels.mjs\";\nimport {useLocale as $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7} from \"../i18n/I18nProvider.mjs\";\nimport {useSelectableCollection as $d667c2af82d35a98$export$d6daf82dcd84e87c} from \"../selection/useSelectableCollection.mjs\";\nimport {useMemo as $4mYNK$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\nfunction $83428e53deb13caf$export$773e389e644c5874(props, state, ref) {\n    let { orientation: orientation = 'horizontal', keyboardActivation: keyboardActivation = 'automatic' } = props;\n    let { collection: collection, selectionManager: manager, disabledKeys: disabledKeys } = state;\n    let { direction: direction } = (0, $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7)();\n    let delegate = (0, $4mYNK$useMemo)(()=>new (0, $a226bee26c88efd7$export$15010ca3c1abe90b)(collection, direction, orientation, disabledKeys), [\n        collection,\n        disabledKeys,\n        orientation,\n        direction\n    ]);\n    let { collectionProps: collectionProps } = (0, $d667c2af82d35a98$export$d6daf82dcd84e87c)({\n        ref: ref,\n        selectionManager: manager,\n        keyboardDelegate: delegate,\n        selectOnFocus: keyboardActivation === 'automatic',\n        disallowEmptySelection: true,\n        scrollRef: ref,\n        linkBehavior: 'selection'\n    });\n    // Compute base id for all tabs\n    let tabsId = (0, $390e54f620492c70$export$f680877a34711e37)();\n    (0, $a251981b23baaa12$export$c5f62239608282b6).set(state, tabsId);\n    let tabListLabelProps = (0, $e8ac3c3f5d4bae7f$export$d6875122194c7b44)({\n        ...props,\n        id: tabsId\n    });\n    return {\n        tabListProps: {\n            ...(0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(collectionProps, tabListLabelProps),\n            role: 'tablist',\n            'aria-orientation': orientation,\n            tabIndex: undefined\n        }\n    };\n}\n\n\nexport {$83428e53deb13caf$export$773e389e644c5874 as useTabList};\n//# sourceMappingURL=useTabList.mjs.map\n","import {useListState as $b14b6f590b50af39$export$2f645645f7bca764} from \"./useListState.mjs\";\nimport {useControlledState as $3e6197669829fe11$export$40bfa8c7b0832715} from \"../utils/useControlledState.mjs\";\nimport {useMemo as $jhfZc$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nfunction $0fdb127d377ffd84$export$e7f05e985daf4b5f(props) {\n    let [selectedKey, setSelectedKey] = (0, $3e6197669829fe11$export$40bfa8c7b0832715)(props.selectedKey, props.defaultSelectedKey ?? null, props.onSelectionChange);\n    let selectedKeys = (0, $jhfZc$useMemo)(()=>selectedKey != null ? [\n            selectedKey\n        ] : [], [\n        selectedKey\n    ]);\n    let { collection: collection, disabledKeys: disabledKeys, selectionManager: selectionManager } = (0, $b14b6f590b50af39$export$2f645645f7bca764)({\n        ...props,\n        selectionMode: 'single',\n        disallowEmptySelection: true,\n        allowDuplicateSelectionEvents: true,\n        selectedKeys: selectedKeys,\n        onSelectionChange: (keys)=>{\n            // impossible, but TS doesn't know that\n            if (keys === 'all') return;\n            let key = keys.values().next().value ?? null;\n            // Always fire onSelectionChange, even if the key is the same\n            // as the current key (useControlledState does not).\n            if (key === selectedKey && props.onSelectionChange) props.onSelectionChange(key);\n            setSelectedKey(key);\n        }\n    });\n    let selectedItem = selectedKey != null ? collection.getItem(selectedKey) : null;\n    return {\n        collection: collection,\n        disabledKeys: disabledKeys,\n        selectionManager: selectionManager,\n        selectedKey: selectedKey,\n        setSelectedKey: setSelectedKey,\n        selectedItem: selectedItem\n    };\n}\n\n\nexport {$0fdb127d377ffd84$export$e7f05e985daf4b5f as useSingleSelectListState};\n//# sourceMappingURL=useSingleSelectListState.mjs.map\n","import {useSingleSelectListState as $0fdb127d377ffd84$export$e7f05e985daf4b5f} from \"../list/useSingleSelectListState.mjs\";\nimport {useRef as $eOo4G$useRef, useEffect as $eOo4G$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $caeb030f09a278a1$export$4ba071daf4e486(props) {\n    let state = (0, $0fdb127d377ffd84$export$e7f05e985daf4b5f)({\n        ...props,\n        onSelectionChange: props.onSelectionChange ? (key)=>{\n            if (key != null) props.onSelectionChange?.(key);\n        } : undefined,\n        suppressTextValueWarning: true,\n        defaultSelectedKey: props.defaultSelectedKey ?? $caeb030f09a278a1$var$findDefaultSelectedKey(props.collection, props.disabledKeys ? new Set(props.disabledKeys) : new Set()) ?? undefined\n    });\n    let { selectionManager: selectionManager, collection: collection, selectedKey: currentSelectedKey } = state;\n    let lastSelectedKey = (0, $eOo4G$useRef)(currentSelectedKey);\n    (0, $eOo4G$useEffect)(()=>{\n        // Ensure a tab is always selected (in case no selected key was specified or if selected item was deleted from collection)\n        let selectedKey = currentSelectedKey;\n        if (props.selectedKey == null && (selectionManager.isEmpty || selectedKey == null || !collection.getItem(selectedKey))) {\n            selectedKey = $caeb030f09a278a1$var$findDefaultSelectedKey(collection, state.disabledKeys);\n            if (selectedKey != null) // directly set selection because replace/toggle selection won't consider disabled keys\n            selectionManager.setSelectedKeys([\n                selectedKey\n            ]);\n        }\n        // If the tablist doesn't have focus and the selected key changes or if there isn't a focused key yet, change focused key to the selected key if it exists.\n        if (selectedKey != null && selectionManager.focusedKey == null || !selectionManager.isFocused && selectedKey !== lastSelectedKey.current) selectionManager.setFocusedKey(selectedKey);\n        lastSelectedKey.current = selectedKey;\n    });\n    return {\n        ...state,\n        isDisabled: props.isDisabled || false\n    };\n}\nfunction $caeb030f09a278a1$var$findDefaultSelectedKey(collection, disabledKeys) {\n    let selectedKey = null;\n    if (collection) {\n        selectedKey = collection.getFirstKey();\n        // loop over tabs until we find one that isn't disabled and select that\n        while(selectedKey != null && (disabledKeys.has(selectedKey) || collection.getItem(selectedKey)?.props?.isDisabled) && selectedKey !== collection.getLastKey())selectedKey = collection.getKeyAfter(selectedKey);\n        // if this check is true, then every item is disabled, it makes more sense to default to the first key than the last\n        if (selectedKey != null && (disabledKeys.has(selectedKey) || collection.getItem(selectedKey)?.props?.isDisabled) && selectedKey === collection.getLastKey()) selectedKey = collection.getFirstKey();\n    }\n    return selectedKey;\n}\n\n\nexport {$caeb030f09a278a1$export$4ba071daf4e486 as useTabListState};\n//# sourceMappingURL=useTabListState.mjs.map\n","import {dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, Provider as $7230ffa83bc0c2cf$export$2881499e37b75b9a, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415, useRenderProps as $7230ffa83bc0c2cf$export$4d86445c2cf5e3, useSlottedContext as $7230ffa83bc0c2cf$export$fabf2dc03a41866e} from \"./utils.mjs\";\nimport {CollectionRendererContext as $263ab7fc0f95ccdb$export$4feb769f8ddf26c5, DefaultCollectionRenderer as $263ab7fc0f95ccdb$export$a164736487e3f0ae, usePersistedKeys as $263ab7fc0f95ccdb$export$90e00781bc59d8f9} from \"./Collection.mjs\";\nimport {SelectionIndicatorContext as $91fe5e721c7f36c1$export$c9549807523555e0} from \"./SelectionIndicator.mjs\";\nimport {SharedElementTransition as $792f28e438b9ad5f$export$758399f318e6385a} from \"./SharedElementTransition.mjs\";\nimport {useTabList as $4KeVI$useTabList, useTab as $4KeVI$useTab, useTabPanel as $4KeVI$useTabPanel} from \"react-aria/useTabList\";\nimport {Collection as $4KeVI$Collection} from \"react-aria/Collection\";\nimport {CollectionBuilder as $4KeVI$CollectionBuilder, createLeafComponent as $4KeVI$createLeafComponent} from \"react-aria/CollectionBuilder\";\nimport {CollectionNode as $4KeVI$CollectionNode} from \"react-aria/private/collections/BaseCollection\";\nimport {createHideableComponent as $4KeVI$createHideableComponent} from \"react-aria/private/collections/Hidden\";\nimport {filterDOMProps as $4KeVI$filterDOMProps} from \"react-aria/filterDOMProps\";\nimport {inertValue as $4KeVI$inertValue} from \"react-aria/private/utils/inertValue\";\nimport {mergeProps as $4KeVI$mergeProps} from \"react-aria/mergeProps\";\nimport $4KeVI$react, {createContext as $4KeVI$createContext, forwardRef as $4KeVI$forwardRef, useMemo as $4KeVI$useMemo, useContext as $4KeVI$useContext, useRef as $4KeVI$useRef, useState as $4KeVI$useState} from \"react\";\nimport {useTabListState as $4KeVI$useTabListState} from \"react-stately/useTabListState\";\nimport {useExitAnimation as $4KeVI$useExitAnimation, useEnterAnimation as $4KeVI$useEnterAnimation} from \"react-aria/private/utils/animation\";\nimport {useFocusRing as $4KeVI$useFocusRing} from \"react-aria/useFocusRing\";\nimport {useHover as $4KeVI$useHover} from \"react-aria/useHover\";\nimport {useLayoutEffect as $4KeVI$useLayoutEffect} from \"react-aria/private/utils/useLayoutEffect\";\nimport {useObjectRef as $4KeVI$useObjectRef} from \"react-aria/useObjectRef\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst $b4f18e3395fe64d7$export$cfa7aa87c26e7d1f = /*#__PURE__*/ (0, $4KeVI$createContext)(null);\nconst $b4f18e3395fe64d7$export$364712098d2aa57c = /*#__PURE__*/ (0, $4KeVI$createContext)(null);\nconst $b4f18e3395fe64d7$export$b2539bed5023c21c = /*#__PURE__*/ (0, $4KeVI$forwardRef)(function Tabs(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $b4f18e3395fe64d7$export$cfa7aa87c26e7d1f);\n    let { children: children, orientation: orientation = 'horizontal' } = props;\n    children = (0, $4KeVI$useMemo)(()=>typeof children === 'function' ? children({\n            orientation: orientation,\n            defaultChildren: null\n        }) : children, [\n        children,\n        orientation\n    ]);\n    return /*#__PURE__*/ (0, $4KeVI$react).createElement((0, $4KeVI$CollectionBuilder), {\n        content: children\n    }, (collection)=>/*#__PURE__*/ (0, $4KeVI$react).createElement($b4f18e3395fe64d7$var$TabsInner, {\n            props: props,\n            collection: collection,\n            tabsRef: ref\n        }));\n});\nfunction $b4f18e3395fe64d7$var$TabsInner({ props: props, tabsRef: ref, collection: collection }) {\n    let { orientation: orientation = 'horizontal' } = props;\n    let state = (0, $4KeVI$useTabListState)({\n        ...props,\n        collection: collection,\n        children: undefined\n    });\n    let { focusProps: focusProps, isFocused: isFocused, isFocusVisible: isFocusVisible } = (0, $4KeVI$useFocusRing)({\n        within: true\n    });\n    let values = (0, $4KeVI$useMemo)(()=>({\n            orientation: orientation,\n            isFocusWithin: isFocused,\n            isFocusVisible: isFocusVisible\n        }), [\n        orientation,\n        isFocused,\n        isFocusVisible\n    ]);\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        defaultClassName: 'react-aria-Tabs',\n        values: values\n    });\n    let DOMProps = (0, $4KeVI$filterDOMProps)(props, {\n        global: true\n    });\n    return /*#__PURE__*/ (0, $4KeVI$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...(0, $4KeVI$mergeProps)(DOMProps, renderProps, focusProps),\n        ref: ref,\n        slot: props.slot || undefined,\n        \"data-focused\": isFocused || undefined,\n        \"data-orientation\": orientation,\n        \"data-focus-visible\": isFocusVisible || undefined,\n        \"data-disabled\": state.isDisabled || undefined\n    }, /*#__PURE__*/ (0, $4KeVI$react).createElement((0, $7230ffa83bc0c2cf$export$2881499e37b75b9a), {\n        values: [\n            [\n                $b4f18e3395fe64d7$export$cfa7aa87c26e7d1f,\n                props\n            ],\n            [\n                $b4f18e3395fe64d7$export$364712098d2aa57c,\n                state\n            ]\n        ]\n    }, renderProps.children));\n}\nconst $b4f18e3395fe64d7$export$e51a686c67fdaa2d = /*#__PURE__*/ (0, $4KeVI$forwardRef)(function TabList(props, ref) {\n    let state = (0, $4KeVI$useContext)($b4f18e3395fe64d7$export$364712098d2aa57c);\n    return state ? /*#__PURE__*/ (0, $4KeVI$react).createElement($b4f18e3395fe64d7$var$TabListInner, {\n        props: props,\n        forwardedRef: ref\n    }) : /*#__PURE__*/ (0, $4KeVI$react).createElement((0, $4KeVI$Collection), props);\n});\nfunction $b4f18e3395fe64d7$var$TabListInner({ props: props, forwardedRef: ref }) {\n    let state = (0, $4KeVI$useContext)($b4f18e3395fe64d7$export$364712098d2aa57c);\n    let { CollectionRoot: CollectionRoot } = (0, $4KeVI$useContext)((0, $263ab7fc0f95ccdb$export$4feb769f8ddf26c5));\n    let { orientation: orientation = 'horizontal', keyboardActivation: keyboardActivation = 'automatic' } = (0, $7230ffa83bc0c2cf$export$fabf2dc03a41866e)($b4f18e3395fe64d7$export$cfa7aa87c26e7d1f);\n    let objectRef = (0, $4KeVI$useObjectRef)(ref);\n    let { tabListProps: tabListProps } = (0, $4KeVI$useTabList)({\n        ...props,\n        orientation: orientation,\n        keyboardActivation: keyboardActivation\n    }, state, objectRef);\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        children: null,\n        defaultClassName: 'react-aria-TabList',\n        values: {\n            orientation: orientation,\n            state: state\n        }\n    });\n    let DOMProps = (0, $4KeVI$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.id;\n    return /*#__PURE__*/ (0, $4KeVI$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...(0, $4KeVI$mergeProps)(DOMProps, renderProps, tabListProps),\n        ref: objectRef,\n        \"data-orientation\": orientation || undefined\n    }, /*#__PURE__*/ (0, $4KeVI$react).createElement((0, $792f28e438b9ad5f$export$758399f318e6385a), null, /*#__PURE__*/ (0, $4KeVI$react).createElement(CollectionRoot, {\n        collection: state.collection,\n        persistedKeys: (0, $263ab7fc0f95ccdb$export$90e00781bc59d8f9)(state.selectionManager.focusedKey)\n    })));\n}\nclass $b4f18e3395fe64d7$var$TabItemNode extends (0, $4KeVI$CollectionNode) {\n    static{\n        this.type = 'item';\n    }\n}\nconst $b4f18e3395fe64d7$export$3e41faf802a29e71 = /*#__PURE__*/ (0, $4KeVI$createLeafComponent)($b4f18e3395fe64d7$var$TabItemNode, (props, forwardedRef, item)=>{\n    let state = (0, $4KeVI$useContext)($b4f18e3395fe64d7$export$364712098d2aa57c);\n    let ref = (0, $4KeVI$useObjectRef)(forwardedRef);\n    let { tabProps: tabProps, isSelected: isSelected, isDisabled: isDisabled, isPressed: isPressed } = (0, $4KeVI$useTab)({\n        key: item.key,\n        ...props\n    }, state, ref);\n    let { focusProps: focusProps, isFocused: isFocused, isFocusVisible: isFocusVisible } = (0, $4KeVI$useFocusRing)();\n    let { hoverProps: hoverProps, isHovered: isHovered } = (0, $4KeVI$useHover)({\n        isDisabled: isDisabled,\n        onHoverStart: props.onHoverStart,\n        onHoverEnd: props.onHoverEnd,\n        onHoverChange: props.onHoverChange\n    });\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        id: undefined,\n        children: item.rendered,\n        defaultClassName: 'react-aria-Tab',\n        values: {\n            isSelected: isSelected,\n            isDisabled: isDisabled,\n            isFocused: isFocused,\n            isFocusVisible: isFocusVisible,\n            isPressed: isPressed,\n            isHovered: isHovered\n        }\n    });\n    let ElementType = item.props.href ? (0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).a : (0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div;\n    let DOMProps = (0, $4KeVI$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.id;\n    delete DOMProps.onClick;\n    return /*#__PURE__*/ (0, $4KeVI$react).createElement(ElementType, {\n        ...(0, $4KeVI$mergeProps)(DOMProps, renderProps, tabProps, focusProps, hoverProps),\n        ref: ref,\n        \"data-selected\": isSelected || undefined,\n        \"data-disabled\": isDisabled || undefined,\n        \"data-focused\": isFocused || undefined,\n        \"data-focus-visible\": isFocusVisible || undefined,\n        \"data-pressed\": isPressed || undefined,\n        \"data-hovered\": isHovered || undefined\n    }, /*#__PURE__*/ (0, $4KeVI$react).createElement((0, $91fe5e721c7f36c1$export$c9549807523555e0).Provider, {\n        value: {\n            isSelected: isSelected\n        }\n    }, renderProps.children));\n});\nconst $b4f18e3395fe64d7$export$5dae8d435677f210 = /*#__PURE__*/ (0, $4KeVI$createHideableComponent)(function TabPanels(props, forwardedRef) {\n    let state = (0, $4KeVI$useContext)($b4f18e3395fe64d7$export$364712098d2aa57c);\n    let ref = (0, $4KeVI$useObjectRef)(forwardedRef);\n    let selectedKeyRef = (0, $4KeVI$useRef)(state.selectedKey);\n    let prevSize = (0, $4KeVI$useRef)(null);\n    let hasTransition = (0, $4KeVI$useRef)(null);\n    (0, $4KeVI$useLayoutEffect)(()=>{\n        let el = ref.current;\n        if (!el) return;\n        if (hasTransition.current == null) hasTransition.current = /width|height|block-size|inline-size|all/.test(window.getComputedStyle(el).transition);\n        if (hasTransition.current && selectedKeyRef.current != null && selectedKeyRef.current !== state.selectedKey) {\n            // Measure auto size.\n            el.style.setProperty('--tab-panel-width', 'auto');\n            el.style.setProperty('--tab-panel-height', 'auto');\n            let { width: width, height: height } = el.getBoundingClientRect();\n            if (prevSize.current && (prevSize.current.width !== width || prevSize.current.height !== height)) {\n                // Revert to previous size.\n                el.style.setProperty('--tab-panel-width', prevSize.current.width + 'px');\n                el.style.setProperty('--tab-panel-height', prevSize.current.height + 'px');\n                // Force style re-calculation to trigger animations.\n                window.getComputedStyle(el).height;\n                // Animate to current pixel size.\n                el.style.setProperty('--tab-panel-width', width + 'px');\n                el.style.setProperty('--tab-panel-height', height + 'px');\n                // When animations complete, revert back to auto size.\n                Promise.all(el.getAnimations().map((a)=>a.finished)).then(()=>{\n                    el.style.setProperty('--tab-panel-width', 'auto');\n                    el.style.setProperty('--tab-panel-height', 'auto');\n                }).catch(()=>{});\n            }\n        }\n        selectedKeyRef.current = state.selectedKey;\n    }, [\n        ref,\n        state.selectedKey\n    ]);\n    // Store previous size before DOM updates occur.\n    // This breaks the rules of hooks because there is no effect that runs _before_ DOM updates.\n    if (state.selectedKey != null && // eslint-disable-next-line rsp-rules/pure-render\n    state.selectedKey !== selectedKeyRef.current && ref.current && // eslint-disable-next-line rsp-rules/pure-render\n    hasTransition.current) // eslint-disable-next-line rsp-rules/pure-render\n    prevSize.current = ref.current.getBoundingClientRect();\n    let DOMProps = (0, $4KeVI$filterDOMProps)(props, {\n        labelable: true,\n        global: true\n    });\n    delete DOMProps.id;\n    return /*#__PURE__*/ (0, $4KeVI$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        render: props.render,\n        ...DOMProps,\n        ref: ref,\n        style: props.style,\n        className: props.className || 'react-aria-TabPanels'\n    }, /*#__PURE__*/ (0, $4KeVI$react).createElement((0, $4KeVI$Collection), props));\n});\nconst $b4f18e3395fe64d7$export$3d96ec278d3efce4 = /*#__PURE__*/ (0, $4KeVI$createHideableComponent)(function TabPanel(props, forwardedRef) {\n    const state = (0, $4KeVI$useContext)($b4f18e3395fe64d7$export$364712098d2aa57c);\n    let ref = (0, $4KeVI$useObjectRef)(forwardedRef);\n    // Track if the tab panel was initially selected on mount (after extra render to populate the collection).\n    // In this case, we don't want to trigger animations.\n    let isSelected = state.selectedKey === props.id;\n    let [isInitiallySelected, setInitiallySelected] = (0, $4KeVI$useState)(state.selectedKey != null ? isSelected : null);\n    if (isInitiallySelected == null && state.selectedKey != null) setInitiallySelected(isSelected);\n    else if (!isSelected && isInitiallySelected) setInitiallySelected(false);\n    let isExiting = (0, $4KeVI$useExitAnimation)(ref, isSelected);\n    if (!isSelected && !props.shouldForceMount && !isExiting) return null;\n    return /*#__PURE__*/ (0, $4KeVI$react).createElement($b4f18e3395fe64d7$var$TabPanelInner, {\n        ...props,\n        tabPanelRef: ref,\n        isInitiallySelected: isInitiallySelected || false,\n        isExiting: isExiting\n    });\n});\nfunction $b4f18e3395fe64d7$var$TabPanelInner(props) {\n    let state = (0, $4KeVI$useContext)($b4f18e3395fe64d7$export$364712098d2aa57c);\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    let { id: id, tabPanelRef: ref, isInitiallySelected: isInitiallySelected, isExiting: isExiting, ...otherProps } = props;\n    let { tabPanelProps: tabPanelProps } = (0, $4KeVI$useTabPanel)(props, state, ref);\n    let { focusProps: focusProps, isFocused: isFocused, isFocusVisible: isFocusVisible } = (0, $4KeVI$useFocusRing)();\n    let isSelected = state.selectedKey === props.id;\n    let isEntering = (0, $4KeVI$useEnterAnimation)(ref) && !isInitiallySelected;\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        defaultClassName: 'react-aria-TabPanel',\n        values: {\n            isFocused: isFocused,\n            isFocusVisible: isFocusVisible,\n            // @ts-ignore - compatibility with React < 19\n            isInert: (0, $4KeVI$inertValue)(!isSelected),\n            isEntering: isEntering,\n            isExiting: isExiting,\n            state: state\n        }\n    });\n    let DOMProps = (0, $4KeVI$filterDOMProps)(otherProps, {\n        global: true\n    });\n    delete DOMProps.id;\n    let domProps = isSelected ? (0, $4KeVI$mergeProps)(DOMProps, tabPanelProps, focusProps, renderProps) : (0, $4KeVI$mergeProps)(DOMProps, renderProps);\n    return /*#__PURE__*/ (0, $4KeVI$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...domProps,\n        ref: ref,\n        \"data-focused\": isFocused || undefined,\n        \"data-focus-visible\": isFocusVisible || undefined,\n        // @ts-ignore\n        inert: (0, $4KeVI$inertValue)(!isSelected || props.inert),\n        \"data-inert\": !isSelected ? 'true' : undefined,\n        \"data-entering\": isEntering || undefined,\n        \"data-exiting\": isExiting || undefined\n    }, /*#__PURE__*/ (0, $4KeVI$react).createElement((0, $7230ffa83bc0c2cf$export$2881499e37b75b9a), {\n        values: [\n            [\n                $b4f18e3395fe64d7$export$cfa7aa87c26e7d1f,\n                null\n            ],\n            [\n                $b4f18e3395fe64d7$export$364712098d2aa57c,\n                null\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $4KeVI$react).createElement((0, $263ab7fc0f95ccdb$export$4feb769f8ddf26c5).Provider, {\n        value: (0, $263ab7fc0f95ccdb$export$a164736487e3f0ae)\n    }, renderProps.children)));\n}\n\n\nexport {$b4f18e3395fe64d7$export$cfa7aa87c26e7d1f as TabsContext, $b4f18e3395fe64d7$export$364712098d2aa57c as TabListStateContext, $b4f18e3395fe64d7$export$b2539bed5023c21c as Tabs, $b4f18e3395fe64d7$export$e51a686c67fdaa2d as TabList, $b4f18e3395fe64d7$export$3e41faf802a29e71 as Tab, $b4f18e3395fe64d7$export$5dae8d435677f210 as TabPanels, $b4f18e3395fe64d7$export$3d96ec278d3efce4 as TabPanel};\n//# sourceMappingURL=Tabs.mjs.map\n","import {useButton as $ac4318a9c075bb9f$export$ea18c227d4417cc3} from \"./useButton.mjs\";\nimport {chain as $a4e76a5424781910$export$e08e3b67e392101e} from \"../utils/chain.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nfunction $b54a524c670b905d$export$51e84d46ca0bc451(props, state, ref) {\n    const { isSelected: isSelected } = state;\n    const { isPressed: isPressed, buttonProps: buttonProps } = (0, $ac4318a9c075bb9f$export$ea18c227d4417cc3)({\n        ...props,\n        onPress: (0, $a4e76a5424781910$export$e08e3b67e392101e)(state.toggle, props.onPress)\n    }, ref);\n    return {\n        isPressed: isPressed,\n        isSelected: isSelected,\n        isDisabled: props.isDisabled || false,\n        buttonProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(buttonProps, {\n            'aria-pressed': isSelected\n        })\n    };\n}\n\n\nexport {$b54a524c670b905d$export$51e84d46ca0bc451 as useToggleButton};\n//# sourceMappingURL=useToggleButton.mjs.map\n","import {createFocusManager as $535772f9d2c1f38d$export$c5251b9e124bf29} from \"../focus/FocusScope.mjs\";\nimport {filterDOMProps as $8e9d2fae0ecb9001$export$457c3d6518dd4c6f} from \"../utils/filterDOMProps.mjs\";\nimport {getActiveElement as $23f2114a1b82827e$export$cd4e5573fbe2b576, getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29, nodeContains as $23f2114a1b82827e$export$4282f70798064fe0} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {useLayoutEffect as $c4867b2f328c2698$export$e5c5a5f917a5871c} from \"../utils/useLayoutEffect.mjs\";\nimport {useLocale as $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7} from \"../i18n/I18nProvider.mjs\";\nimport {useState as $jBcN3$useState, useRef as $jBcN3$useRef} from \"react\";\n\n/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\nfunction $afa781ff67c1cd08$export$fa142eb1681c520(props, ref) {\n    const { 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, orientation: orientation = 'horizontal' } = props;\n    let [isInToolbar, setInToolbar] = (0, $jBcN3$useState)(false);\n    // should be safe because re-calling set state with the same value it already has is a no-op\n    // this will allow us to react should a parent re-render and change its role though\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    (0, $c4867b2f328c2698$export$e5c5a5f917a5871c)(()=>{\n        setInToolbar(!!(ref.current && ref.current.parentElement?.closest('[role=\"toolbar\"]')));\n    });\n    const { direction: direction } = (0, $2eb8e6d23f3d0cb0$export$43bb16f9c6d9e3f7)();\n    const shouldReverse = direction === 'rtl' && orientation === 'horizontal';\n    // oxlint-disable-next-line react/react-compiler\n    let focusManager = (0, $535772f9d2c1f38d$export$c5251b9e124bf29)(ref);\n    const onKeyDown = (e)=>{\n        // don't handle portalled events\n        if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n        if (orientation === 'horizontal' && e.key === 'ArrowRight' || orientation === 'vertical' && e.key === 'ArrowDown') {\n            if (shouldReverse) focusManager.focusPrevious();\n            else focusManager.focusNext();\n        } else if (orientation === 'horizontal' && e.key === 'ArrowLeft' || orientation === 'vertical' && e.key === 'ArrowUp') {\n            if (shouldReverse) focusManager.focusNext();\n            else focusManager.focusPrevious();\n        } else if (e.key === 'Tab') {\n            // When the tab key is pressed, we want to move focus\n            // out of the entire toolbar. To do this, move focus\n            // to the first or last focusable child, and let the\n            // browser handle the Tab key as usual from there.\n            lastFocused.current = (0, $23f2114a1b82827e$export$cd4e5573fbe2b576)();\n            if (e.shiftKey) focusManager.focusFirst();\n            else focusManager.focusLast();\n            return;\n        } else // if we didn't handle anything, return early so we don't preventDefault\n        return;\n        // Prevent arrow keys from being handled by nested action groups.\n        e.stopPropagation();\n        e.preventDefault();\n    };\n    // Record the last focused child when focus moves out of the toolbar.\n    const lastFocused = (0, $jBcN3$useRef)(null);\n    const onBlur = (e)=>{\n        if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, e.relatedTarget) && !lastFocused.current) lastFocused.current = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n    };\n    // Restore focus to the last focused child when focus returns into the toolbar.\n    // If the element was removed, do nothing, either the first item in the first group,\n    // or the last item in the last group will be focused, depending on direction.\n    const onFocus = (e)=>{\n        if (lastFocused.current && !(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, e.relatedTarget) && (0, $23f2114a1b82827e$export$4282f70798064fe0)(ref.current, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) {\n            lastFocused.current?.focus();\n            lastFocused.current = null;\n        }\n    };\n    return {\n        toolbarProps: {\n            ...(0, $8e9d2fae0ecb9001$export$457c3d6518dd4c6f)(props, {\n                labelable: true\n            }),\n            role: !isInToolbar ? 'toolbar' : 'group',\n            'aria-orientation': orientation,\n            'aria-label': ariaLabel,\n            'aria-labelledby': ariaLabel == null ? ariaLabelledBy : undefined,\n            onKeyDownCapture: !isInToolbar ? onKeyDown : undefined,\n            onFocusCapture: !isInToolbar ? onFocus : undefined,\n            onBlurCapture: !isInToolbar ? onBlur : undefined\n        }\n    };\n}\n\n\nexport {$afa781ff67c1cd08$export$fa142eb1681c520 as useToolbar};\n//# sourceMappingURL=useToolbar.mjs.map\n","import {useToggleButton as $b54a524c670b905d$export$51e84d46ca0bc451} from \"./useToggleButton.mjs\";\nimport {useToolbar as $afa781ff67c1cd08$export$fa142eb1681c520} from \"../toolbar/useToolbar.mjs\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $162557ba4d6f08dd$export$dd5580ae642f110f(props, state, ref) {\n    let { isDisabled: isDisabled } = props;\n    let { toolbarProps: toolbarProps } = (0, $afa781ff67c1cd08$export$fa142eb1681c520)(props, ref);\n    return {\n        groupProps: {\n            ...toolbarProps,\n            role: state.selectionMode === 'single' ? 'radiogroup' : toolbarProps.role,\n            'aria-disabled': isDisabled\n        }\n    };\n}\nfunction $162557ba4d6f08dd$export$bc53712daae3d6e6(props, state, ref) {\n    let toggleState = {\n        isSelected: state.selectedKeys.has(props.id),\n        defaultSelected: false,\n        setSelected (isSelected) {\n            state.setSelected(props.id, isSelected);\n        },\n        toggle () {\n            state.toggleKey(props.id);\n        }\n    };\n    let { isPressed: isPressed, isSelected: isSelected, isDisabled: isDisabled, buttonProps: buttonProps } = (0, $b54a524c670b905d$export$51e84d46ca0bc451)({\n        ...props,\n        id: undefined,\n        isDisabled: props.isDisabled || state.isDisabled\n    }, toggleState, ref);\n    if (state.selectionMode === 'single') {\n        // oxlint-disable-next-line react/react-compiler\n        buttonProps.role = 'radio';\n        // oxlint-disable-next-line react/react-compiler\n        buttonProps['aria-checked'] = toggleState.isSelected;\n        // oxlint-disable-next-line react/react-compiler\n        delete buttonProps['aria-pressed'];\n    }\n    return {\n        isPressed: isPressed,\n        isSelected: isSelected,\n        isDisabled: isDisabled,\n        buttonProps: buttonProps\n    };\n}\n\n\nexport {$162557ba4d6f08dd$export$dd5580ae642f110f as useToggleButtonGroup, $162557ba4d6f08dd$export$bc53712daae3d6e6 as useToggleButtonGroupItem};\n//# sourceMappingURL=useToggleButtonGroup.mjs.map\n","import {useControlledState as $3e6197669829fe11$export$40bfa8c7b0832715} from \"../utils/useControlledState.mjs\";\nimport {useMemo as $44j85$useMemo} from \"react\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $3d8ad31c4c1725e9$export$8deac67f4addf270(props) {\n    let { selectionMode: selectionMode = 'single', disallowEmptySelection: disallowEmptySelection, isDisabled: isDisabled = false } = props;\n    let [selectedKeys, setSelectedKeys] = (0, $3e6197669829fe11$export$40bfa8c7b0832715)((0, $44j85$useMemo)(()=>props.selectedKeys ? new Set(props.selectedKeys) : undefined, [\n        props.selectedKeys\n    ]), (0, $44j85$useMemo)(()=>props.defaultSelectedKeys ? new Set(props.defaultSelectedKeys) : new Set(), [\n        props.defaultSelectedKeys\n    ]), props.onSelectionChange);\n    return {\n        selectionMode: selectionMode,\n        isDisabled: isDisabled,\n        selectedKeys: selectedKeys,\n        setSelectedKeys: setSelectedKeys,\n        toggleKey (key) {\n            let keys;\n            if (selectionMode === 'multiple') {\n                keys = new Set(selectedKeys);\n                if (keys.has(key) && (!disallowEmptySelection || keys.size > 1)) keys.delete(key);\n                else keys.add(key);\n            } else keys = new Set(selectedKeys.has(key) && !disallowEmptySelection ? [] : [\n                key\n            ]);\n            setSelectedKeys(keys);\n        },\n        setSelected (key, isSelected) {\n            if (isSelected !== selectedKeys.has(key)) this.toggleKey(key);\n        }\n    };\n}\n\n\nexport {$3d8ad31c4c1725e9$export$8deac67f4addf270 as useToggleGroupState};\n//# sourceMappingURL=useToggleGroupState.mjs.map\n","import {dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415, useRenderProps as $7230ffa83bc0c2cf$export$4d86445c2cf5e3} from \"./utils.mjs\";\nimport {SharedElementTransition as $792f28e438b9ad5f$export$758399f318e6385a} from \"./SharedElementTransition.mjs\";\nimport {useToggleButtonGroup as $9mIod$useToggleButtonGroup} from \"react-aria/useToggleButtonGroup\";\nimport {filterDOMProps as $9mIod$filterDOMProps} from \"react-aria/filterDOMProps\";\nimport {mergeProps as $9mIod$mergeProps} from \"react-aria/mergeProps\";\nimport $9mIod$react, {createContext as $9mIod$createContext, forwardRef as $9mIod$forwardRef} from \"react\";\nimport {useToggleGroupState as $9mIod$useToggleGroupState} from \"react-stately/useToggleGroupState\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\nconst $bc25b811ec97a172$export$298258635ae0dd97 = /*#__PURE__*/ (0, $9mIod$createContext)({});\nconst $bc25b811ec97a172$export$a8a71863db173133 = /*#__PURE__*/ (0, $9mIod$createContext)(null);\nconst $bc25b811ec97a172$export$40258cc1d95ff477 = /*#__PURE__*/ (0, $9mIod$forwardRef)(function ToggleButtonGroup(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $bc25b811ec97a172$export$298258635ae0dd97);\n    let state = (0, $9mIod$useToggleGroupState)(props);\n    let { groupProps: groupProps } = (0, $9mIod$useToggleButtonGroup)(props, state, ref);\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        values: {\n            orientation: props.orientation || 'horizontal',\n            isDisabled: state.isDisabled,\n            state: state\n        },\n        defaultClassName: 'react-aria-ToggleButtonGroup'\n    });\n    let DOMProps = (0, $9mIod$filterDOMProps)(props, {\n        global: true\n    });\n    return /*#__PURE__*/ (0, $9mIod$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...(0, $9mIod$mergeProps)(DOMProps, renderProps, groupProps),\n        ref: ref,\n        slot: props.slot || undefined,\n        \"data-orientation\": props.orientation || 'horizontal',\n        \"data-disabled\": props.isDisabled || undefined\n    }, /*#__PURE__*/ (0, $9mIod$react).createElement($bc25b811ec97a172$export$a8a71863db173133.Provider, {\n        value: state\n    }, /*#__PURE__*/ (0, $9mIod$react).createElement((0, $792f28e438b9ad5f$export$758399f318e6385a), null, renderProps.children)));\n});\n\n\nexport {$bc25b811ec97a172$export$298258635ae0dd97 as ToggleButtonGroupContext, $bc25b811ec97a172$export$a8a71863db173133 as ToggleGroupStateContext, $bc25b811ec97a172$export$40258cc1d95ff477 as ToggleButtonGroup};\n//# sourceMappingURL=ToggleButtonGroup.mjs.map\n","import {dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415, useRenderProps as $7230ffa83bc0c2cf$export$4d86445c2cf5e3} from \"./utils.mjs\";\nimport {SelectionIndicatorContext as $91fe5e721c7f36c1$export$c9549807523555e0} from \"./SelectionIndicator.mjs\";\nimport {ToggleGroupStateContext as $bc25b811ec97a172$export$a8a71863db173133} from \"./ToggleButtonGroup.mjs\";\nimport {useToggleButton as $2YxXO$useToggleButton} from \"react-aria/useToggleButton\";\nimport {filterDOMProps as $2YxXO$filterDOMProps} from \"react-aria/filterDOMProps\";\nimport {mergeProps as $2YxXO$mergeProps} from \"react-aria/mergeProps\";\nimport $2YxXO$react, {createContext as $2YxXO$createContext, forwardRef as $2YxXO$forwardRef, useContext as $2YxXO$useContext} from \"react\";\nimport {useToggleState as $2YxXO$useToggleState} from \"react-stately/useToggleState\";\nimport {useFocusRing as $2YxXO$useFocusRing} from \"react-aria/useFocusRing\";\nimport {useHover as $2YxXO$useHover} from \"react-aria/useHover\";\nimport {useToggleButtonGroupItem as $2YxXO$useToggleButtonGroupItem} from \"react-aria/useToggleButtonGroup\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\nconst $75afe627ae0cc0fa$export$43506d75ebd2e218 = /*#__PURE__*/ (0, $2YxXO$createContext)({});\nconst $75afe627ae0cc0fa$export$d2b052e7b4be1756 = /*#__PURE__*/ (0, $2YxXO$forwardRef)(function ToggleButton(props, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $75afe627ae0cc0fa$export$43506d75ebd2e218);\n    let groupState = (0, $2YxXO$useContext)((0, $bc25b811ec97a172$export$a8a71863db173133));\n    let state = (0, $2YxXO$useToggleState)(groupState && props.id != null ? {\n        isSelected: groupState.selectedKeys.has(props.id),\n        onChange (isSelected) {\n            groupState.setSelected(props.id, isSelected);\n        }\n    } : props);\n    let { buttonProps: buttonProps, isPressed: isPressed, isSelected: isSelected, isDisabled: isDisabled } = groupState && props.id != null ? (0, $2YxXO$useToggleButtonGroupItem)({\n        ...props,\n        id: props.id\n    }, groupState, ref) : (0, $2YxXO$useToggleButton)({\n        ...props,\n        id: props.id != null ? String(props.id) : undefined\n    }, state, ref);\n    let { focusProps: focusProps, isFocused: isFocused, isFocusVisible: isFocusVisible } = (0, $2YxXO$useFocusRing)(props);\n    let { hoverProps: hoverProps, isHovered: isHovered } = (0, $2YxXO$useHover)({\n        ...props,\n        isDisabled: isDisabled\n    });\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        id: undefined,\n        values: {\n            isHovered: isHovered,\n            isPressed: isPressed,\n            isFocused: isFocused,\n            isSelected: state.isSelected,\n            isFocusVisible: isFocusVisible,\n            isDisabled: isDisabled,\n            state: state\n        },\n        defaultClassName: 'react-aria-ToggleButton'\n    });\n    let DOMProps = (0, $2YxXO$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.id;\n    delete DOMProps.onClick;\n    return /*#__PURE__*/ (0, $2YxXO$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).button, {\n        ...(0, $2YxXO$mergeProps)(DOMProps, renderProps, buttonProps, focusProps, hoverProps),\n        ref: ref,\n        slot: props.slot || undefined,\n        \"data-focused\": isFocused || undefined,\n        \"data-disabled\": isDisabled || undefined,\n        \"data-pressed\": isPressed || undefined,\n        \"data-selected\": isSelected || undefined,\n        \"data-hovered\": isHovered || undefined,\n        \"data-focus-visible\": isFocusVisible || undefined\n    }, /*#__PURE__*/ (0, $2YxXO$react).createElement((0, $91fe5e721c7f36c1$export$c9549807523555e0).Provider, {\n        value: {\n            isSelected: isSelected\n        }\n    }, renderProps.children));\n});\n\n\nexport {$75afe627ae0cc0fa$export$43506d75ebd2e218 as ToggleButtonContext, $75afe627ae0cc0fa$export$d2b052e7b4be1756 as ToggleButton};\n//# sourceMappingURL=ToggleButton.mjs.map\n","import {useIsSSR as $c7eafbbe1ea5834e$export$535bd6ca7f90a273} from \"../ssr/SSRProvider.mjs\";\nimport {useUNSAFE_PortalContext as $72abaeab4d80592f$export$9fc1347d4195ccb3} from \"./PortalProvider.mjs\";\nimport $eXzCv$react, {useContext as $eXzCv$useContext, useState as $eXzCv$useState, useMemo as $eXzCv$useMemo, useEffect as $eXzCv$useEffect} from \"react\";\nimport $eXzCv$reactdom from \"react-dom\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nconst $c07df45195231803$var$Context = /*#__PURE__*/ (0, $eXzCv$react).createContext(null);\nfunction $c07df45195231803$export$178405afcd8c5eb(props) {\n    let { children: children } = props;\n    let parent = (0, $eXzCv$useContext)($c07df45195231803$var$Context);\n    let [modalCount, setModalCount] = (0, $eXzCv$useState)(0);\n    let context = (0, $eXzCv$useMemo)(()=>({\n            parent: parent,\n            modalCount: modalCount,\n            addModal () {\n                setModalCount((count)=>count + 1);\n                if (parent) parent.addModal();\n            },\n            removeModal () {\n                setModalCount((count)=>count - 1);\n                if (parent) parent.removeModal();\n            }\n        }), [\n        parent,\n        modalCount\n    ]);\n    return /*#__PURE__*/ (0, $eXzCv$react).createElement($c07df45195231803$var$Context.Provider, {\n        value: context\n    }, children);\n}\nfunction $c07df45195231803$export$d9aaed4c3ece1bc0() {\n    let context = (0, $eXzCv$useContext)($c07df45195231803$var$Context);\n    return {\n        modalProviderProps: {\n            'aria-hidden': context && context.modalCount > 0 ? true : undefined\n        }\n    };\n}\n/**\n * Creates a root node that will be aria-hidden if there are other modals open.\n */ function $c07df45195231803$var$OverlayContainerDOM(props) {\n    let { modalProviderProps: modalProviderProps } = $c07df45195231803$export$d9aaed4c3ece1bc0();\n    return /*#__PURE__*/ (0, $eXzCv$react).createElement(\"div\", {\n        \"data-overlay-container\": true,\n        ...props,\n        ...modalProviderProps\n    });\n}\nfunction $c07df45195231803$export$bf688221f59024e5(props) {\n    return /*#__PURE__*/ (0, $eXzCv$react).createElement($c07df45195231803$export$178405afcd8c5eb, null, /*#__PURE__*/ (0, $eXzCv$react).createElement($c07df45195231803$var$OverlayContainerDOM, props));\n}\nfunction $c07df45195231803$export$b47c3594eab58386(props) {\n    let isSSR = (0, $c7eafbbe1ea5834e$export$535bd6ca7f90a273)();\n    let { portalContainer: portalContainer = isSSR ? null : document.body, ...rest } = props;\n    let { getContainer: getContainer } = (0, $72abaeab4d80592f$export$9fc1347d4195ccb3)();\n    if (!props.portalContainer && getContainer) portalContainer = getContainer();\n    (0, $eXzCv$react).useEffect(()=>{\n        if (portalContainer?.closest('[data-overlay-container]')) throw new Error('An OverlayContainer must not be inside another container. Please change the portalContainer prop.');\n    }, [\n        portalContainer\n    ]);\n    if (!portalContainer) return null;\n    let contents = /*#__PURE__*/ (0, $eXzCv$react).createElement($c07df45195231803$export$bf688221f59024e5, rest);\n    return /*#__PURE__*/ (0, $eXzCv$reactdom).createPortal(contents, portalContainer);\n}\nfunction $c07df45195231803$export$33ffd74ebf07f060(options) {\n    // Add aria-hidden to all parent providers on mount, and restore on unmount.\n    let context = (0, $eXzCv$useContext)($c07df45195231803$var$Context);\n    if (!context) throw new Error('Modal is not contained within a provider');\n    (0, $eXzCv$useEffect)(()=>{\n        if (options?.isDisabled || !context || !context.parent) return;\n        // The immediate context is from the provider containing this modal, so we only\n        // want to trigger aria-hidden on its parents not on the modal provider itself.\n        context.parent.addModal();\n        return ()=>{\n            if (context && context.parent) context.parent.removeModal();\n        };\n    }, [\n        context,\n        context.parent,\n        options?.isDisabled\n    ]);\n    return {\n        modalProps: {\n            'data-ismodal': !options?.isDisabled\n        }\n    };\n}\n\n\nexport {$c07df45195231803$export$178405afcd8c5eb as ModalProvider, $c07df45195231803$export$d9aaed4c3ece1bc0 as useModalProvider, $c07df45195231803$export$bf688221f59024e5 as OverlayProvider, $c07df45195231803$export$b47c3594eab58386 as OverlayContainer, $c07df45195231803$export$33ffd74ebf07f060 as useModal};\n//# sourceMappingURL=useModal.mjs.map\n","import {filterDOMProps as $8e9d2fae0ecb9001$export$457c3d6518dd4c6f} from \"../utils/filterDOMProps.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {useHover as $e969f22b6713ca4a$export$ae780daf29e6d456} from \"../interactions/useHover.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nfunction $8c383cffc84c9982$export$1c4b08e0eca38426(props, state) {\n    let domProps = (0, $8e9d2fae0ecb9001$export$457c3d6518dd4c6f)(props, {\n        labelable: true\n    });\n    let { hoverProps: hoverProps } = (0, $e969f22b6713ca4a$export$ae780daf29e6d456)({\n        onHoverStart: ()=>state?.open(true),\n        onHoverEnd: ()=>state?.close()\n    });\n    return {\n        tooltipProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(domProps, hoverProps, {\n            role: 'tooltip'\n        })\n    };\n}\n\n\nexport {$8c383cffc84c9982$export$1c4b08e0eca38426 as useTooltip};\n//# sourceMappingURL=useTooltip.mjs.map\n","import {getInteractionModality as $8f5a2122b0992be3$export$630ff653c5ada6a9, isFocusVisible as $8f5a2122b0992be3$export$b9b3dfddab17db27} from \"../interactions/useFocusVisible.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {useFocusable as $d1116acdf220c2da$export$4c014de7c8940b4c} from \"../interactions/useFocusable.mjs\";\nimport {useHover as $e969f22b6713ca4a$export$ae780daf29e6d456} from \"../interactions/useHover.mjs\";\nimport {useId as $390e54f620492c70$export$f680877a34711e37} from \"../utils/useId.mjs\";\nimport {useRef as $t8vQD$useRef, useEffect as $t8vQD$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\nfunction $85908aa8a35f0fac$export$a6da6c504e4bba8b(props, state, ref) {\n    let { isDisabled: isDisabled, trigger: trigger, shouldCloseOnPress: shouldCloseOnPress = true } = props;\n    let tooltipId = (0, $390e54f620492c70$export$f680877a34711e37)();\n    let isHovered = (0, $t8vQD$useRef)(false);\n    let isFocused = (0, $t8vQD$useRef)(false);\n    let handleShow = ()=>{\n        if (isHovered.current || isFocused.current) state.open(isFocused.current);\n    };\n    let handleHide = (immediate)=>{\n        if (!isHovered.current && !isFocused.current) state.close(immediate);\n    };\n    (0, $t8vQD$useEffect)(()=>{\n        let onKeyDown = (e)=>{\n            if (ref && ref.current) // Escape after clicking something can give it keyboard focus\n            // dismiss tooltip on esc key press\n            {\n                if (e.key === 'Escape') {\n                    e.stopPropagation();\n                    state.close(true);\n                }\n            }\n        };\n        if (state.isOpen) {\n            document.addEventListener('keydown', onKeyDown, true);\n            return ()=>{\n                document.removeEventListener('keydown', onKeyDown, true);\n            };\n        }\n    }, [\n        ref,\n        state\n    ]);\n    let onHoverStart = ()=>{\n        if (trigger === 'focus') return;\n        // In chrome, if you hover a trigger, then another element obscures it, due to keyboard\n        // interactions for example, hover will end. When hover is restored after that element disappears,\n        // focus moves on for example, then the tooltip will reopen. We check the modality to know if the hover\n        // is the result of moving the mouse.\n        if ((0, $8f5a2122b0992be3$export$630ff653c5ada6a9)() === 'pointer') isHovered.current = true;\n        else isHovered.current = false;\n        handleShow();\n    };\n    let onHoverEnd = ()=>{\n        if (trigger === 'focus') return;\n        // no matter how the trigger is left, we should close the tooltip\n        isFocused.current = false;\n        isHovered.current = false;\n        handleHide();\n    };\n    let onPressStart = ()=>{\n        // if shouldCloseOnPress is false, we should not close the tooltip\n        if (!shouldCloseOnPress) return;\n        // no matter how the trigger is pressed, we should close the tooltip\n        isFocused.current = false;\n        isHovered.current = false;\n        handleHide(true);\n    };\n    let onFocus = ()=>{\n        let isVisible = (0, $8f5a2122b0992be3$export$b9b3dfddab17db27)();\n        if (isVisible) {\n            isFocused.current = true;\n            handleShow();\n        }\n    };\n    let onBlur = ()=>{\n        isFocused.current = false;\n        isHovered.current = false;\n        handleHide(true);\n    };\n    let { hoverProps: hoverProps } = (0, $e969f22b6713ca4a$export$ae780daf29e6d456)({\n        isDisabled: isDisabled,\n        onHoverStart: onHoverStart,\n        onHoverEnd: onHoverEnd\n    });\n    let { focusableProps: focusableProps } = (0, $d1116acdf220c2da$export$4c014de7c8940b4c)({\n        isDisabled: isDisabled,\n        onFocus: onFocus,\n        onBlur: onBlur\n    }, ref);\n    return {\n        triggerProps: {\n            'aria-describedby': state.isOpen ? tooltipId : undefined,\n            // oxlint-disable-next-line react/react-compiler\n            ...(0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(focusableProps, hoverProps, {\n                onPointerDown: onPressStart,\n                onKeyDown: onPressStart\n            }),\n            tabIndex: undefined\n        },\n        tooltipProps: {\n            id: tooltipId\n        }\n    };\n}\n\n\nexport {$85908aa8a35f0fac$export$a6da6c504e4bba8b as useTooltipTrigger};\n//# sourceMappingURL=useTooltipTrigger.mjs.map\n","import {dom as $7230ffa83bc0c2cf$export$df3a06d6289f983e, Provider as $7230ffa83bc0c2cf$export$2881499e37b75b9a, useContextProps as $7230ffa83bc0c2cf$export$29f1550f4b0d4415, useRenderProps as $7230ffa83bc0c2cf$export$4d86445c2cf5e3} from \"./utils.mjs\";\nimport {OverlayArrowContext as $4fcfe18fac72dabd$export$2de4954e8ae13b9f} from \"./OverlayArrow.mjs\";\nimport {useOverlayPosition as $4nVq8$useOverlayPosition} from \"react-aria/useOverlayPosition\";\nimport {filterDOMProps as $4nVq8$filterDOMProps} from \"react-aria/filterDOMProps\";\nimport {FocusableProvider as $4nVq8$FocusableProvider} from \"react-aria/private/interactions/useFocusable\";\nimport {mergeProps as $4nVq8$mergeProps} from \"react-aria/mergeProps\";\nimport {OverlayContainer as $4nVq8$OverlayContainer} from \"react-aria/private/overlays/useModal\";\nimport $4nVq8$react, {createContext as $4nVq8$createContext, useRef as $4nVq8$useRef, forwardRef as $4nVq8$forwardRef, useContext as $4nVq8$useContext} from \"react\";\nimport {useTooltipTriggerState as $4nVq8$useTooltipTriggerState} from \"react-stately/useTooltipTriggerState\";\nimport {useExitAnimation as $4nVq8$useExitAnimation, useEnterAnimation as $4nVq8$useEnterAnimation} from \"react-aria/private/utils/animation\";\nimport {useTooltipTrigger as $4nVq8$useTooltipTrigger, useTooltip as $4nVq8$useTooltip} from \"react-aria/useTooltipTrigger\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\nconst $05a50f7d78b03ad9$export$7a7623236eec67fa = /*#__PURE__*/ (0, $4nVq8$createContext)(null);\nconst $05a50f7d78b03ad9$export$39ae08fa83328b12 = /*#__PURE__*/ (0, $4nVq8$createContext)(null);\nfunction $05a50f7d78b03ad9$export$8c610744efcf8a1d(props) {\n    let state = (0, $4nVq8$useTooltipTriggerState)(props);\n    let ref = (0, $4nVq8$useRef)(null);\n    let { triggerProps: triggerProps, tooltipProps: tooltipProps } = (0, $4nVq8$useTooltipTrigger)(props, state, ref);\n    return /*#__PURE__*/ (0, $4nVq8$react).createElement((0, $7230ffa83bc0c2cf$export$2881499e37b75b9a), {\n        values: [\n            [\n                $05a50f7d78b03ad9$export$7a7623236eec67fa,\n                state\n            ],\n            [\n                $05a50f7d78b03ad9$export$39ae08fa83328b12,\n                {\n                    ...tooltipProps,\n                    triggerRef: ref\n                }\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $4nVq8$react).createElement((0, $4nVq8$FocusableProvider), {\n        ...triggerProps,\n        ref: ref\n    }, props.children));\n}\nconst $05a50f7d78b03ad9$export$28c660c63b792dea = /*#__PURE__*/ (0, $4nVq8$forwardRef)(function Tooltip({ UNSTABLE_portalContainer: UNSTABLE_portalContainer, ...props }, ref) {\n    [props, ref] = (0, $7230ffa83bc0c2cf$export$29f1550f4b0d4415)(props, ref, $05a50f7d78b03ad9$export$39ae08fa83328b12);\n    let contextState = (0, $4nVq8$useContext)($05a50f7d78b03ad9$export$7a7623236eec67fa);\n    let localState = (0, $4nVq8$useTooltipTriggerState)(props);\n    let state = props.isOpen != null || props.defaultOpen != null || !contextState ? localState : contextState;\n    // Skip the automatic exit animation when closing instantly (e.g. swapping between tooltips\n    // during warmup). An explicitly provided isExiting prop still takes precedence.\n    let exitAnimation = (0, $4nVq8$useExitAnimation)(ref, state.isOpen);\n    let isExiting = props.isExiting || !state.shouldSkipAnimation && exitAnimation || false;\n    if (!state.isOpen && !isExiting) return null;\n    return /*#__PURE__*/ (0, $4nVq8$react).createElement((0, $4nVq8$OverlayContainer), {\n        portalContainer: UNSTABLE_portalContainer\n    }, /*#__PURE__*/ (0, $4nVq8$react).createElement($05a50f7d78b03ad9$var$TooltipInner, {\n        ...props,\n        tooltipRef: ref,\n        isExiting: isExiting\n    }));\n});\nfunction $05a50f7d78b03ad9$var$TooltipInner(props) {\n    let state = (0, $4nVq8$useContext)($05a50f7d78b03ad9$export$7a7623236eec67fa);\n    let arrowRef = (0, $4nVq8$useRef)(null);\n    let { overlayProps: overlayProps, arrowProps: arrowProps, placement: placement, triggerAnchorPoint: triggerAnchorPoint } = (0, $4nVq8$useOverlayPosition)({\n        placement: props.placement || 'top',\n        targetRef: props.triggerRef,\n        overlayRef: props.tooltipRef,\n        arrowRef: arrowRef,\n        offset: props.offset,\n        crossOffset: props.crossOffset,\n        isOpen: state.isOpen,\n        arrowBoundaryOffset: props.arrowBoundaryOffset,\n        shouldFlip: props.shouldFlip,\n        containerPadding: props.containerPadding,\n        onClose: ()=>state.close(true)\n    });\n    // Skip the automatic entry animation when opening instantly (e.g. swapping between tooltips\n    // during warmup). An explicitly provided isEntering prop still takes precedence.\n    let enterAnimation = (0, $4nVq8$useEnterAnimation)(props.tooltipRef, !!placement);\n    let isEntering = props.isEntering || !state.shouldSkipAnimation && enterAnimation || false;\n    let renderProps = (0, $7230ffa83bc0c2cf$export$4d86445c2cf5e3)({\n        ...props,\n        defaultClassName: 'react-aria-Tooltip',\n        values: {\n            placement: placement,\n            isEntering: isEntering,\n            isExiting: props.isExiting,\n            state: state\n        }\n    });\n    props = (0, $4nVq8$mergeProps)(props, overlayProps);\n    let { tooltipProps: tooltipProps } = (0, $4nVq8$useTooltip)(props, state);\n    let DOMProps = (0, $4nVq8$filterDOMProps)(props, {\n        global: true\n    });\n    // oxlint-disable react/react-compiler\n    return /*#__PURE__*/ (0, $4nVq8$react).createElement((0, $7230ffa83bc0c2cf$export$df3a06d6289f983e).div, {\n        ...(0, $4nVq8$mergeProps)(DOMProps, renderProps, tooltipProps),\n        ref: props.tooltipRef,\n        style: {\n            ...overlayProps.style,\n            '--trigger-anchor-point': triggerAnchorPoint ? `${triggerAnchorPoint.x}px ${triggerAnchorPoint.y}px` : undefined,\n            ...renderProps.style\n        },\n        \"data-placement\": placement ?? undefined,\n        \"data-entering\": isEntering || undefined,\n        \"data-exiting\": props.isExiting || undefined\n    }, /*#__PURE__*/ (0, $4nVq8$react).createElement((0, $4fcfe18fac72dabd$export$2de4954e8ae13b9f).Provider, {\n        value: {\n            ...arrowProps,\n            placement: placement,\n            ref: arrowRef\n        }\n    }, renderProps.children));\n// oxlint-enable react/react-compiler\n}\n\n\nexport {$05a50f7d78b03ad9$export$7a7623236eec67fa as TooltipTriggerStateContext, $05a50f7d78b03ad9$export$39ae08fa83328b12 as TooltipContext, $05a50f7d78b03ad9$export$8c610744efcf8a1d as TooltipTrigger, $05a50f7d78b03ad9$export$28c660c63b792dea as Tooltip};\n//# sourceMappingURL=Tooltip.mjs.map\n","import * as React from \"react\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faInfoCircle } from \"@fortawesome/free-solid-svg-icons\"\nimport cx from \"clsx\"\nimport {\n    TooltipTrigger,\n    Tooltip,\n    Button,\n    OverlayArrow,\n} from \"react-aria-components\"\n\nexport const LabeledSwitch = ({\n    className,\n    label,\n    value,\n    tooltip,\n    tracking,\n    disabled,\n    onToggle,\n}: {\n    value?: boolean\n    label?: string\n    tooltip?: string\n    tracking?: string\n    onToggle: () => any\n    className?: string\n    disabled?: boolean\n}): React.ReactElement => {\n    return (\n        <div\n            className={cx(\n                \"labeled-switch\",\n                { \"labeled-switch--disabled\": disabled },\n                className\n            )}\n        >\n            <label>\n                <input\n                    type=\"checkbox\"\n                    checked={value}\n                    disabled={disabled}\n                    onChange={onToggle}\n                    data-track-note={tracking}\n                />\n                <div data-track-note=\"\" className=\"outer\">\n                    <div className=\"inner\"></div>\n                </div>\n                {label}\n                {tooltip && (\n                    <TooltipTrigger delay={0}>\n                        <Button\n                            className=\"tooltip-trigger\"\n                            aria-label=\"More information about this setting\"\n                        >\n                            <FontAwesomeIcon icon={faInfoCircle} />\n                        </Button>\n                        <Tooltip\n                            className=\"react-aria-tooltip\"\n                            placement=\"top\"\n                            offset={8}\n                        >\n                            <OverlayArrow className=\"react-aria-tooltip__overlay-arrow\">\n                                <svg width={8} height={8} viewBox=\"0 0 8 8\">\n                                    <path d=\"M0 0 L4 4 L8 0\" />\n                                </svg>\n                            </OverlayArrow>\n                            {tooltip}\n                        </Tooltip>\n                    </TooltipTrigger>\n                )}\n            </label>\n            {tooltip && (\n                <div className=\"labeled-switch-subtitle\">{tooltip}</div>\n            )}\n        </div>\n    )\n}\n","import * as React from \"react\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faCheck } from \"@fortawesome/free-solid-svg-icons\"\nimport cx from \"clsx\"\n\nexport const Checkbox = ({\n    className,\n    checked,\n    onChange,\n    label,\n    disabled,\n    id,\n    autoComplete,\n    \"data-test\": testHook,\n}: {\n    className?: string\n    checked: boolean\n    onChange: React.ChangeEventHandler<HTMLInputElement>\n    label: React.ReactNode\n    disabled?: boolean\n    id?: string\n    autoComplete?: React.InputHTMLAttributes<HTMLInputElement>[\"autoComplete\"]\n    \"data-test\"?: string\n}) => {\n    return (\n        <div\n            className={cx(\n                \"checkbox\",\n                { \"checkbox--disabled\": disabled },\n                className\n            )}\n        >\n            <label>\n                <input\n                    id={id}\n                    type=\"checkbox\"\n                    data-test={testHook}\n                    checked={checked}\n                    onChange={onChange}\n                    disabled={disabled}\n                    autoComplete={autoComplete}\n                />\n                <div className=\"custom\">\n                    {checked && <FontAwesomeIcon icon={faCheck} />}\n                </div>\n                <div className=\"label\">{label}</div>\n            </label>\n        </div>\n    )\n}\n","import * as React from \"react\"\nimport cx from \"clsx\"\n\nexport const RadioButton = ({\n    className,\n    checked,\n    onChange,\n    label,\n    group,\n    disabled,\n    id,\n    \"data-test\": testHook,\n}: {\n    className?: string\n    checked: boolean\n    onChange: React.ChangeEventHandler<HTMLInputElement>\n    label: React.ReactNode\n    group?: string\n    disabled?: boolean\n    id?: string\n    \"data-test\"?: string\n}) => {\n    return (\n        <div className={cx(\"radio\", className)}>\n            <label>\n                <input\n                    type=\"radio\"\n                    id={id}\n                    data-test={testHook}\n                    disabled={disabled}\n                    name={group}\n                    checked={checked}\n                    onChange={onChange}\n                />\n                <div className=\"outer\">\n                    {checked && <div className=\"inner\" />}\n                </div>\n                <div className=\"label\">{label}</div>\n            </label>\n        </div>\n    )\n}\n","import * as React from \"react\"\nimport cx from \"clsx\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faXmark } from \"@fortawesome/free-solid-svg-icons\"\n\n// keep in sync with $size in CloseButton.scss\nexport const CLOSE_BUTTON_WIDTH = 32\nexport const CLOSE_BUTTON_HEIGHT = 32\n\nexport function CloseButton({\n    onClick,\n    className,\n}: {\n    onClick: React.MouseEventHandler<HTMLButtonElement>\n    className?: string\n}) {\n    return (\n        <button\n            type=\"button\"\n            className={cx(\"close-button\", className)}\n            onClick={onClick}\n            aria-label=\"Close\"\n        >\n            <FontAwesomeIcon icon={faXmark} />\n        </button>\n    )\n}\n","import * as React from \"react\"\nimport cx from \"clsx\"\nimport { CloseButton } from \"./closeButton/CloseButton.js\"\n\nexport function OverlayHeader({\n    title,\n    onTitleClick,\n    onDismiss,\n    className,\n}: {\n    title: string\n    onTitleClick?: () => void\n    onDismiss?: () => void\n    className?: string\n}): React.ReactElement {\n    return (\n        <div className={cx(\"overlay-header\", className)}>\n            <h2\n                className={cx(\"title\", {\n                    clickable: !!onTitleClick,\n                })}\n                onClick={onTitleClick}\n            >\n                {title}\n            </h2>\n            {onDismiss && <CloseButton onClick={onDismiss} />}\n        </div>\n    )\n}\n","import * as React from \"react\"\nimport { forwardRef } from \"react\"\nimport cx from \"clsx\"\n\nexport type TextInputProps = React.InputHTMLAttributes<HTMLInputElement> & {\n    className?: string\n}\n\nexport const TextInput = forwardRef<HTMLInputElement, TextInputProps>(\n    function TextInput({ className, ...props }: TextInputProps, ref) {\n        return (\n            <input\n                className={cx(\"text-input\", className)}\n                ref={ref}\n                {...props}\n            />\n        )\n    }\n)\n","import { hydrateRoot } from \"react-dom/client\"\nimport { CodeSnippet } from \"./CodeSnippet.js\"\n\nexport function hydrateCodeSnippets() {\n    const codeSnippets = document.querySelectorAll(\"div.wp-code-snippet\")\n    codeSnippets.forEach((snippet) => {\n        const code =\n            snippet.querySelector(\".wp-block-code code\")?.textContent || \"\"\n\n        if (!snippet.parentElement) return\n        hydrateRoot(snippet.parentElement, <CodeSnippet code={code} />)\n    })\n}\n","export function DownloadIconFull() {\n    return (\n        <svg width=\"34\" height=\"24\" fill=\"none\" viewBox=\"0 0 34 24\">\n            <rect width=\"10\" height=\"6\" y=\"1\" fill=\"#577291\" rx=\"3\" />\n            <rect width=\"10\" height=\"6\" x=\"12\" y=\"1\" fill=\"#577291\" rx=\"3\" />\n            <rect width=\"10\" height=\"6\" x=\"24\" y=\"1\" fill=\"#577291\" rx=\"3\" />\n            <rect width=\"10\" height=\"6\" y=\"9\" fill=\"#577291\" rx=\"3\" />\n            <rect width=\"10\" height=\"6\" x=\"12\" y=\"9\" fill=\"#577291\" rx=\"3\" />\n            <rect width=\"10\" height=\"6\" x=\"24\" y=\"9\" fill=\"#577291\" rx=\"3\" />\n            <rect width=\"10\" height=\"6\" y=\"17\" fill=\"#577291\" rx=\"3\" />\n            <rect width=\"10\" height=\"6\" x=\"12\" y=\"17\" fill=\"#577291\" rx=\"3\" />\n            <rect width=\"10\" height=\"6\" x=\"24\" y=\"17\" fill=\"#577291\" rx=\"3\" />\n        </svg>\n    )\n}\n","export function DownloadIconSelected() {\n    return (\n        <svg width=\"34\" height=\"24\" fill=\"none\" viewBox=\"0 0 34 24\">\n            <rect width=\"10\" height=\"6\" y=\"1\" fill=\"#577291\" rx=\"3\" />\n            <rect width=\"10\" height=\"6\" x=\"12\" y=\"1\" fill=\"#577291\" rx=\"3\" />\n            <rect width=\"10\" height=\"6\" x=\"24\" y=\"1\" fill=\"#a4b6ca\" rx=\"3\" />\n            <rect width=\"10\" height=\"6\" y=\"9\" fill=\"#577291\" rx=\"3\" />\n            <rect width=\"10\" height=\"6\" x=\"12\" y=\"9\" fill=\"#577291\" rx=\"3\" />\n            <rect width=\"10\" height=\"6\" x=\"24\" y=\"9\" fill=\"#a4b6ca\" rx=\"3\" />\n            <rect width=\"10\" height=\"6\" y=\"17\" fill=\"#a4b6ca\" rx=\"3\" />\n            <rect width=\"10\" height=\"6\" x=\"12\" y=\"17\" fill=\"#a4b6ca\" rx=\"3\" />\n            <rect width=\"10\" height=\"6\" x=\"24\" y=\"17\" fill=\"#a4b6ca\" rx=\"3\" />\n        </svg>\n    )\n}\n","import * as React from \"react\"\nimport { useState } from \"react\"\nimport cx from \"clsx\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faDownload, faSpinner } from \"@fortawesome/free-solid-svg-icons\"\nimport { DownloadIconFull } from \"../icons/DownloadIconFull.js\"\nimport { DownloadIconSelected } from \"../icons/DownloadIconSelected.js\"\nimport { useSpinDelay } from \"@ourworldindata/utils\"\n\nexport function DownloadButton({\n    className,\n    title,\n    description,\n    icon,\n    previewImageUrl,\n    previewImageDimensions,\n    imageStyle,\n    trackingNote,\n    onClick,\n    disabled,\n}: {\n    className?: string\n    title: string\n    description: string\n    icon?: \"full\" | \"selected\"\n    previewImageUrl?: string\n    previewImageDimensions?: { width: number; height: number }\n    imageStyle?: React.CSSProperties\n    trackingNote?: string\n    onClick: () => void | Promise<void>\n    disabled?: boolean\n}) {\n    const [isDownloading, setIsDownloading] = useState(false)\n    const showLoading = useSpinDelay(isDownloading, {\n        delay: 300,\n        ssr: false,\n    })\n\n    const handleClick = async (): Promise<void> => {\n        setIsDownloading(true)\n\n        try {\n            await onClick()\n        } finally {\n            setIsDownloading(false)\n        }\n    }\n\n    return (\n        <button\n            className={cx(\"download-button\", className, {\n                \"download-button--loading\": showLoading,\n            })}\n            onClick={handleClick}\n            data-track-note={trackingNote}\n            disabled={disabled || isDownloading || showLoading}\n        >\n            {icon && (\n                <div className=\"download-button__icon\">\n                    {icon === \"full\" ? (\n                        <DownloadIconFull />\n                    ) : (\n                        <DownloadIconSelected />\n                    )}\n                </div>\n            )}\n            {(previewImageUrl || previewImageDimensions) && (\n                <div\n                    className=\"download-button__preview-image\"\n                    style={previewImageDimensions}\n                >\n                    {previewImageUrl && (\n                        <img\n                            src={previewImageUrl}\n                            width={previewImageDimensions?.width}\n                            height={previewImageDimensions?.height}\n                            style={imageStyle}\n                            alt=\"\"\n                        />\n                    )}\n                </div>\n            )}\n            <div className=\"download-button__content\">\n                <h4 className=\"download-button__title\">{title}</h4>\n                <div className=\"download-button__description-wrapper\">\n                    <p className=\"download-button__description\">\n                        {description}\n                    </p>\n                    {showLoading && (\n                        <p className=\"download-button__loading-label\">\n                            Loading…\n                        </p>\n                    )}\n                </div>\n            </div>\n            <div className=\"download-button__download-icon\">\n                {showLoading ? (\n                    <FontAwesomeIcon icon={faSpinner} spin />\n                ) : (\n                    <FontAwesomeIcon icon={faDownload} />\n                )}\n            </div>\n        </button>\n    )\n}\n","import { AnchorHTMLAttributes } from \"react\"\nimport cx from \"clsx\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faDownload } from \"@fortawesome/free-solid-svg-icons\"\nimport { DownloadIconFull } from \"../icons/DownloadIconFull.js\"\nimport { DownloadIconSelected } from \"../icons/DownloadIconSelected.js\"\n\nexport function DownloadButtonLink({\n    className,\n    title,\n    description,\n    icon,\n    trackingNote,\n    href,\n    download,\n    ...anchorProps\n}: {\n    className?: string\n    title: string\n    description: string\n    icon?: \"full\" | \"selected\"\n    trackingNote?: string\n    href: string\n    download?: string\n} & AnchorHTMLAttributes<HTMLAnchorElement>) {\n    return (\n        <a\n            className={cx(\"download-button download-button-link\", className)}\n            href={href}\n            download={download}\n            data-track-note={trackingNote}\n            {...anchorProps}\n        >\n            {icon && (\n                <div className=\"download-button__icon\">\n                    {icon === \"full\" ? (\n                        <DownloadIconFull />\n                    ) : (\n                        <DownloadIconSelected />\n                    )}\n                </div>\n            )}\n            <div className=\"download-button__content\">\n                <h4 className=\"download-button__title\">{title}</h4>\n                <div className=\"download-button__description-wrapper\">\n                    <p className=\"download-button__description\">\n                        {description}\n                    </p>\n                </div>\n            </div>\n            <div className=\"download-button__download-icon\">\n                <FontAwesomeIcon icon={faDownload} />\n            </div>\n        </a>\n    )\n}\n","import { useId } from \"react\"\nimport { RadioButton } from \"../RadioButton.js\"\nimport { OwidColumnDef } from \"@ourworldindata/types\"\n\nexport function DownloadApiOptions({\n    onlyVisible,\n    onOnlyVisibleChange,\n    shortColNames,\n    onShortColNamesChange,\n    firstYColDef,\n}: {\n    onlyVisible: boolean\n    onOnlyVisibleChange: (onlyVisible: boolean) => void\n    shortColNames: boolean\n    onShortColNamesChange: (shortColNames: boolean) => void\n    firstYColDef?: OwidColumnDef\n}) {\n    const groupPrefix = useId()\n    const exLongName = firstYColDef?.name\n    const exShortName = firstYColDef?.shortName\n    const shortNamesAvailable = !!exShortName\n\n    return (\n        <>\n            <section className=\"download-api-options__config-list\">\n                <RadioButton\n                    label=\"Download full data, including all entities and time points\"\n                    group={`${groupPrefix}-onlyVisible`}\n                    checked={!onlyVisible}\n                    onChange={() => onOnlyVisibleChange(false)}\n                />\n                <RadioButton\n                    label=\"Download only the currently selected data visible in the chart\"\n                    group={`${groupPrefix}-onlyVisible`}\n                    checked={onlyVisible}\n                    onChange={() => onOnlyVisibleChange(true)}\n                />\n            </section>\n            {shortNamesAvailable && (\n                <section className=\"download-api-options__config-list\">\n                    <div>\n                        <RadioButton\n                            label=\"Long column names\"\n                            group={`${groupPrefix}-shortColNames`}\n                            checked={!shortColNames}\n                            onChange={() => onShortColNamesChange(false)}\n                        />\n                        <p>\n                            e.g. <code>{exLongName}</code>\n                        </p>\n                    </div>\n                    <div>\n                        <RadioButton\n                            label=\"Shortened column names\"\n                            group={`${groupPrefix}-shortColNames`}\n                            checked={shortColNames}\n                            onChange={() => onShortColNamesChange(true)}\n                        />\n                        <p>\n                            e.g.{\" \"}\n                            <code style={{ wordBreak: \"break-all\" }}>\n                                {exShortName}\n                            </code>\n                        </p>\n                    </div>\n                </section>\n            )}\n        </>\n    )\n}\n","import cx from \"clsx\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { IconDefinition, faArrowRight } from \"@fortawesome/free-solid-svg-icons\"\n\ntype ButtonCommonProps = {\n    text?: string\n    className?: string\n    style?: React.CSSProperties\n    theme:\n        | \"solid-vermillion\"\n        | \"solid-blue\"\n        | \"solid-dark-blue\"\n        | \"solid-light-blue\"\n        | \"outline-vermillion\"\n        | \"outline-dark-blue\"\n        | \"outline-light-blue\"\n        | \"outline-white\"\n    /** Set to null to hide the icon */\n    icon?: IconDefinition | null\n    iconPosition?: \"left\" | \"right\"\n    dataTrackNote?: string\n    disabled?: boolean\n    ariaLabel?: string\n}\n\ntype WithHrefProps = {\n    href: string\n    onClick?: never\n    type?: never\n}\n\ntype WithOnClickProps = {\n    onClick?: () => void\n    href?: never\n    type?: \"button\" | \"submit\"\n}\n\nexport type ButtonProps =\n    | (ButtonCommonProps & WithHrefProps)\n    | (ButtonCommonProps & WithOnClickProps)\n\nexport const Button = ({\n    theme = \"solid-vermillion\",\n    className,\n    style,\n    href,\n    onClick,\n    text,\n    ariaLabel,\n    type = \"button\",\n    icon = faArrowRight,\n    iconPosition = \"right\",\n    dataTrackNote,\n    disabled,\n}: ButtonProps) => {\n    const classes = cx(\"owid-btn\", `owid-btn--${theme}`, className, {\n        \"owid-btn--icon-only\": icon && !text,\n    })\n    const content = (\n        <>\n            {iconPosition === \"left\" && icon && (\n                <FontAwesomeIcon\n                    className={cx({ \"owid-btn--icon-left\": text })}\n                    icon={icon}\n                />\n            )}\n            {text && <span>{text}</span>}\n            {iconPosition !== \"left\" && icon && (\n                <FontAwesomeIcon\n                    className={cx({ \"owid-btn--icon-right\": text })}\n                    icon={icon}\n                />\n            )}\n        </>\n    )\n\n    if (href) {\n        const aProps = {\n            href: disabled ? undefined : href,\n            className: classes,\n            style,\n            \"data-track-note\": dataTrackNote,\n            onClick: disabled\n                ? (e: React.MouseEvent) => e.preventDefault()\n                : undefined,\n            \"aria-label\": ariaLabel,\n            \"aria-disabled\": disabled,\n        }\n        return <a {...aProps}>{content}</a>\n    }\n\n    const buttonProps = {\n        type,\n        className: classes,\n        style,\n        onClick,\n        \"aria-label\": ariaLabel,\n        \"data-track-note\": dataTrackNote,\n        disabled,\n    }\n    return <button {...buttonProps}>{content}</button>\n}\n","import * as React from \"react\"\nimport { Color } from \"@ourworldindata/types\"\nimport { roundForSvg } from \"@ourworldindata/utils\"\n\n// The default ratio between a text's font size and the halo's outline width\nconst TEXT_OUTLINE_FACTOR = 0.25\n\ninterface HaloProps {\n    id: string\n    children: React.ReactElement<React.HTMLAttributes<HTMLElement>>\n    show?: boolean\n    outlineColor?: Color\n    outlineWidth?: number\n    fontSize?: number // Derives the outline width from the given font size\n    style?: React.CSSProperties\n}\n\nconst defaultHaloStyle: React.CSSProperties = {\n    fill: \"#fff\",\n    stroke: \"#fff\",\n    strokeLinecap: \"round\",\n    strokeLinejoin: \"round\",\n    userSelect: \"none\",\n}\n\nexport function Halo(props: HaloProps): React.ReactElement {\n    const show = props.show ?? true\n    if (!show) return props.children\n\n    const outlineWidth =\n        props.outlineWidth ??\n        (props.fontSize !== undefined\n            ? TEXT_OUTLINE_FACTOR * props.fontSize\n            : 2)\n\n    const defaultStyle = {\n        ...defaultHaloStyle,\n        strokeWidth: roundForSvg(outlineWidth),\n        fill: props.outlineColor ?? defaultHaloStyle.fill,\n        stroke: props.outlineColor ?? defaultHaloStyle.stroke,\n    }\n    const halo = React.cloneElement(props.children, {\n        id: props.id,\n        style: {\n            ...defaultStyle,\n            ...props.style,\n        },\n    })\n    return (\n        <React.Fragment key={props.id}>\n            {halo}\n            {props.children}\n        </React.Fragment>\n    )\n}\n","import * as React from \"react\"\nimport ReactDOM from \"react-dom\"\n\ninterface BodyPortalProps {\n    children: React.ReactNode\n    containerClassName?: string\n}\n\n/**\n * Renders a component on Body instead of inside the current tree.\n * See https://react.dev/reference/react-dom/createPortal\n */\nexport class BodyPortal extends React.Component<BodyPortalProps> {\n    private element: HTMLDivElement | null = null\n\n    override componentDidMount(): void {\n        if (typeof document !== \"undefined\") {\n            this.element = document.createElement(\"div\")\n            if (this.props.containerClassName)\n                this.element.className = this.props.containerClassName\n\n            document.body.appendChild(this.element)\n            // Force a re-render now that `this.el` is available for the portal\n            this.forceUpdate()\n        }\n    }\n\n    override componentWillUnmount(): void {\n        // Remove the element from the body if it was added\n        if (this.element && this.element.parentNode === document.body) {\n            document.body.removeChild(this.element)\n        }\n        this.element = null // Clean up the reference\n    }\n\n    override render(): React.ReactPortal | null {\n        if (!this.element) return null\n        return ReactDOM.createPortal(this.props.children, this.element)\n    }\n}\n","import * as React from \"react\"\nimport { Bounds } from \"@ourworldindata/utils\"\n\nconst DEFAULT_COLOR = \"#333\"\n\nexport const LoadingIndicator = (props: {\n    backgroundColor?: string\n    bounds?: Bounds\n    color?: string\n    title?: string\n}): React.ReactElement => {\n    return (\n        <div\n            className=\"loading-indicator\"\n            title={props.title}\n            style={{\n                backgroundColor: props.backgroundColor,\n                ...props.bounds?.toCSS(),\n            }}\n        >\n            <span\n                style={{\n                    borderColor: props.color || DEFAULT_COLOR,\n                }}\n            />\n        </div>\n    )\n}\n","export function NonRedistributableDataNotice({\n    sourceLinks,\n    listClassName,\n}: {\n    sourceLinks?: string[]\n    listClassName?: string\n}) {\n    return (\n        <>\n            The data is published under a license that doesn't allow us to\n            redistribute it.\n            {sourceLinks && sourceLinks.length > 0 && (\n                <>\n                    {\" \"}\n                    Please visit the\n                    {sourceLinks.length > 1\n                        ? \" data publishers' websites \"\n                        : \" data publisher's website \"}\n                    for more details:\n                    <ul className={listClassName}>\n                        {sourceLinks.map((link) => (\n                            <li key={link}>\n                                <a href={link} target=\"_blank\" rel=\"noopener\">\n                                    {link}\n                                </a>\n                            </li>\n                        ))}\n                    </ul>\n                </>\n            )}\n        </>\n    )\n}\n","import * as React from \"react\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faChartBar,\n    faChartColumn,\n    faChartLine,\n    faEarthAmericas,\n    faTable,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    GRAPHER_CHART_TYPES,\n    GRAPHER_TAB_NAMES,\n    GrapherChartType,\n    GrapherTabName,\n} from \"@ourworldindata/types\"\n\nexport function GrapherTabIcon({\n    tab,\n}: {\n    tab: GrapherTabName\n}): React.ReactElement {\n    switch (tab) {\n        case GRAPHER_TAB_NAMES.Table:\n            return <FontAwesomeIcon icon={faTable} />\n        case GRAPHER_TAB_NAMES.WorldMap:\n            return <FontAwesomeIcon icon={faEarthAmericas} />\n        default:\n            return chartIcons[tab]\n    }\n}\n\nconst chartIcons: Record<GrapherChartType, React.ReactElement> = {\n    // Line chart\n    [GRAPHER_CHART_TYPES.LineChart]: <FontAwesomeIcon icon={faChartLine} />,\n\n    // Bar charts\n    [GRAPHER_CHART_TYPES.DiscreteBar]: <FontAwesomeIcon icon={faChartColumn} />,\n    [GRAPHER_CHART_TYPES.StackedBar]: <FontAwesomeIcon icon={faChartColumn} />,\n    [GRAPHER_CHART_TYPES.StackedDiscreteBar]: (\n        <FontAwesomeIcon icon={faChartBar} />\n    ),\n\n    // Scatter\n    [GRAPHER_CHART_TYPES.ScatterPlot]: (\n        <svg width=\"13\" height=\"13\" fill=\"none\" viewBox=\"2 1.5 13 13\">\n            <path\n                fill=\"currentColor\"\n                fillRule=\"evenodd\"\n                d=\"M13.2 14h-10A1.2 1.2 0 0 1 2 12.8v-10a.8.8 0 1 1 1.6 0V12c0 .22.18.4.4.4h9.2a.8.8 0 0 1 0 1.6m-.16-10a1.04 1.04 0 1 1-2.08 0 1.04 1.04 0 0 1 2.08 0m-1.6 3.6a1.04 1.04 0 1 1-2.08 0 1.04 1.04 0 0 1 2.08 0m-4 2a1.04 1.04 0 1 1-2.08 0 1.04 1.04 0 0 1 2.08 0m.8-4.8a1.04 1.04 0 1 1-2.08 0 1.04 1.04 0 0 1 2.08 0\"\n                clipRule=\"evenodd\"\n            />\n        </svg>\n    ),\n\n    // Marimekko\n    [GRAPHER_CHART_TYPES.Marimekko]: (\n        <svg width=\"13\" height=\"13\" fill=\"none\" viewBox=\"1 2 14 13\">\n            <path\n                fill=\"currentColor\"\n                stroke=\"currentColor\"\n                strokeWidth=\".1\"\n                d=\"M13.5 1.45h-11A1.05 1.05 0 0 0 1.45 2.5v11a1.05 1.05 0 0 0 1.05 1.05h11a1.05 1.05 0 0 0 1.05-1.05v-11a1.05 1.05 0 0 0-1.05-1.05Zm-.05 3.5h-2.9v-2.4h2.9zm-4-1h-2.9v-1.4h2.9zm0 1.1v3.9h-2.9v-3.9zm-4 5.9h-2.9v-4.9h2.9zm1.1-.9h2.9v3.4h-2.9zm4-4h2.9v1.9h-2.9zm-5.1-3.5v2.4h-2.9v-2.4zm-2.9 9.5h2.9v1.4h-2.9zm8 1.4v-4.4h2.9v4.4z\"\n            />\n        </svg>\n    ),\n\n    // Stacked area\n    [GRAPHER_CHART_TYPES.StackedArea]: (\n        <svg width=\"13\" height=\"13\" fill=\"none\" viewBox=\"0 0 14 14\">\n            <g\n                stroke=\"currentColor\"\n                strokeLinecap=\"round\"\n                strokeLinejoin=\"round\"\n                strokeWidth=\"1.6\"\n            >\n                <path d=\"M1 12.458V1.542L5.764 4.06l7.145-2.52v10.917H1Z\" />\n                <path d=\"m1 9.481 4.764-1.985 7.145 1.191\" />\n            </g>\n        </svg>\n    ),\n\n    // Slope chart\n    [GRAPHER_CHART_TYPES.SlopeChart]: (\n        <svg width=\"13\" height=\"13\" fill=\"none\" viewBox=\"1 1 14 14\">\n            <path\n                stroke=\"currentColor\"\n                strokeLinecap=\"round\"\n                strokeLinejoin=\"round\"\n                strokeWidth=\"1.6\"\n                d=\"M2 2.3v11.267M14 2.3v11.267M2 3.3l12 9M2 11l12 1m0-7.7-12 5\"\n            />\n        </svg>\n    ),\n\n    // Dumbbell\n    [GRAPHER_CHART_TYPES.Dumbbell]: (\n        <svg width=\"13\" height=\"13\" fill=\"none\" viewBox=\"1 1 13 13\">\n            <path\n                fill=\"currentColor\"\n                d=\"M11.991 10.295a1.51 1.51 0 0 1 0 3.017c-.518 0-.974-.262-1.246-.66h-2.22a1.508 1.508 0 1 1 .107-1.508h2.005a1.51 1.51 0 0 1 1.354-.85m0-4.148a1.508 1.508 0 1 1-1.304 2.262H4.813A1.506 1.506 0 0 1 2 7.655a1.508 1.508 0 0 1 2.813-.754h5.874c.26-.45.746-.753 1.304-.754M8.221 2a1.509 1.509 0 1 1-1.246 2.356h-2.22A1.507 1.507 0 0 1 2 3.508a1.508 1.508 0 0 1 2.862-.66h2.004A1.51 1.51 0 0 1 8.221 2\"\n            />\n        </svg>\n    ),\n\n    // Swimlane\n    [GRAPHER_CHART_TYPES.Swimlane]: (\n        <svg width=\"13\" height=\"13\" fill=\"none\" viewBox=\"1 1 14 13\">\n            <path\n                fill=\"currentColor\"\n                d=\"M6 11a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1zm8-5a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1zM8 1a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1z\"\n            />\n        </svg>\n    ),\n}\n","import cx from \"clsx\"\nimport { GrapherTrendArrowDirection } from \"@ourworldindata/types\"\n\nconst ARROW_PATHS = {\n    up: \"M14 0H5a1 1 0 0 0 0 2h6.586L.293 13.293l1.414 1.414L13 3.414V10a1 1 0 0 0 2 0V1a1 1 0 0 0-1-1\",\n    down: \"M14 4a1 1 0 0 0-1 1v6.586L1.56.146.147 1.56 11.587 13H5a1 1 0 0 0 0 2h9a1 1 0 0 0 1-1V5a1 1 0 0 0-1-1\",\n    right: \"M19.592 6.824 13.228.46a.999.999 0 1 0-1.414 1.414l4.657 4.657H.5v2h15.971l-4.657 4.657a.999.999 0 1 0 1.414 1.414l6.364-6.364a1 1 0 0 0 0-1.414\",\n} as const\n\n// Default semantic coloring by direction.\nconst SEMANTIC_COLORS: Record<GrapherTrendArrowDirection, string> = {\n    up: \"#2c8465\", // Green\n    down: \"#cc3b55\", // Red\n    right: \"#787878\", // Grey\n}\n\nexport function GrapherTrendArrow({\n    direction,\n    color,\n    className,\n}: {\n    direction: GrapherTrendArrowDirection\n    color?: string\n    className?: string\n}): React.ReactElement {\n    return (\n        <svg\n            className={cx(\"GrapherTrendArrow\", direction, className)}\n            style={{ fill: color ?? SEMANTIC_COLORS[direction] }}\n            xmlns=\"http://www.w3.org/2000/svg\"\n            viewBox={`0 0 ${direction === \"right\" ? 20 : 15} 15`}\n        >\n            <path d={ARROW_PATHS[direction]} />\n        </svg>\n    )\n}\n","import { useMediaQuery } from \"usehooks-ts\"\n\nconst REDUCED_MOTION_QUERY = \"(prefers-reduced-motion: reduce)\"\n\nexport function getPrefersReducedMotion(): boolean {\n    return (\n        typeof window !== \"undefined\" &&\n        window.matchMedia(REDUCED_MOTION_QUERY).matches\n    )\n}\n\nexport const usePrefersReducedMotion = () => useMediaQuery(REDUCED_MOTION_QUERY)\n","// THIS IS A GENERATED FILE, DO NOT EDIT DIRECTLY\n\n// GENERATED BY devTools/schema/buildGrapherSchema.ts\n\nimport { GrapherInterface } from \"@ourworldindata/types\"\n\nexport const latestSchemaVersion = \"012\" as const\nexport const outdatedSchemaVersions = [\n    \"001\",\n    \"002\",\n    \"003\",\n    \"004\",\n    \"005\",\n    \"006\",\n    \"007\",\n    \"008\",\n    \"009\",\n    \"010\",\n    \"011\",\n] as const\n\nexport const defaultGrapherConfig = {\n    $schema: \"https://files.ourworldindata.org/schemas/grapher-schema.012.json\",\n    license: \"cc-by\",\n    selectedEntityNames: [],\n    focusedSeriesNames: [],\n    excludedEntityNames: [],\n    includedEntityNames: [],\n    inapplicableEntityNames: [],\n    addCountryMode: \"add-country\",\n    entityType: \"country or region\",\n    entityTypePlural: \"countries and regions\",\n    facettingLabelByYVariables: \"metric\",\n    chartTypes: [\"LineChart\", \"DiscreteBar\"],\n    hasMapTab: false,\n    tab: \"chart\",\n    xAxis: {\n        removePointsOutsideDomain: false,\n        scaleType: \"linear\",\n        max: \"auto\",\n        canChangeScaleType: false,\n        facetDomain: \"shared\",\n    },\n    yAxis: {\n        removePointsOutsideDomain: false,\n        scaleType: \"linear\",\n        max: \"auto\",\n        canChangeScaleType: false,\n        facetDomain: \"shared\",\n    },\n    colorScale: {\n        binningStrategy: \"auto\",\n        midpoint: 0,\n        createBinForMidpoint: false,\n        customNumericColorsActive: false,\n        colorSchemeInvert: false,\n    },\n    map: {\n        region: \"World\",\n        hideTimeline: false,\n        colorScale: {\n            binningStrategy: \"auto\",\n            midpoint: 0,\n            createBinForMidpoint: false,\n            customNumericColorsActive: false,\n            colorSchemeInvert: false,\n        },\n        toleranceStrategy: \"closest\",\n        tooltipUseCustomLabels: false,\n        time: \"latest\",\n        selectedEntityNames: [],\n    },\n    dumbbell: {\n        connectorStyle: \"arrow\",\n        valueLabelMode: \"absolute\",\n    },\n    swimlane: {\n        segmentLabelMode: \"categoryAndTimeRange\",\n    },\n    invertColorScheme: false,\n    logo: \"owid\",\n    hideSeriesLabels: false,\n    hideLogo: false,\n    hideRelativeToggle: true,\n    hideConnectedScatterLines: false,\n    hideScatterLabels: false,\n    hideTotalValueLabel: false,\n    hideFacetControl: true,\n    hideAnnotationFieldsInTitle: {\n        entity: false,\n        time: false,\n        changeInPrefix: false,\n    },\n    minTime: \"earliest\",\n    maxTime: \"latest\",\n    timelineMinTime: \"earliest\",\n    timelineMaxTime: \"latest\",\n    hideTimeline: false,\n    stackMode: \"absolute\",\n    zoomToSelection: false,\n    showYearLabels: false,\n    showNoDataArea: true,\n    compareEndPointsOnly: false,\n    matchingEntitiesOnly: false,\n    missingDataStrategy: \"auto\",\n    scatterPointLabelStrategy: \"year\",\n    selectedFacetStrategy: \"none\",\n    sortBy: \"total\",\n    sortOrder: \"desc\",\n    comparisonLines: [],\n    relatedQuestions: [],\n} as GrapherInterface\n","import {\n    EntityName,\n    GRAPHER_CHART_TYPES,\n    GrapherChartType,\n} from \"@ourworldindata/types\"\nimport { Bounds } from \"@ourworldindata/utils\"\nimport { defaultGrapherConfig } from \"../schema/defaultGrapherConfig.js\"\n\nexport const GRAPHER_PROD_URL = \"https://ourworldindata.org\"\n\nexport const GRAPHER_EMBEDDED_FIGURE_ATTR = \"data-grapher-src\"\n\nexport const GRAPHER_NARRATIVE_CHART_CONFIG_FIGURE_ATTR =\n    \"data-grapher-narrative-chart-config\"\n\nexport const GRAPHER_ROUTE_FOLDER = \"grapher\"\n\nexport const GRAPHER_PAGE_BODY_CLASS = \"StandaloneGrapherOrExplorerPage\"\nexport const GRAPHER_IS_IN_IFRAME_CLASS = \"IsInIframe\"\nexport const GRAPHER_TIMELINE_CLASS = \"GrapherTimeline\"\nexport const GRAPHER_SIDE_PANEL_CLASS = \"side-panel\"\nexport const GRAPHER_SETTINGS_CLASS = \"GrapherSettingsPopover\"\n\n// The Figma plugin uses these class names to identify sections of the chart\nexport const GRAPHER_CHART_AREA_CLASS = \"chart-area\"\nexport const GRAPHER_HEADER_CLASS = \"header\"\nexport const GRAPHER_FOOTER_CLASS = \"footer\"\n\nexport const DEFAULT_GRAPHER_ENTITY_TYPE = \"country or region\"\nexport const DEFAULT_GRAPHER_ENTITY_TYPE_PLURAL = \"countries and regions\"\n\nexport const DEFAULT_GRAPHER_WIDTH = 850\nexport const DEFAULT_GRAPHER_HEIGHT = 600\n\n// Keep in sync with $grapher-thumbnail-width and $grapher-thumbnail-height in Grapher.scss\nexport const GRAPHER_THUMBNAIL_WIDTH = 300\nexport const GRAPHER_THUMBNAIL_HEIGHT = 160\n\n// Image widths used for generating srcSet (1x and 2x for high-DPI displays)\nexport const GRAPHER_IMAGE_WIDTH_1X = 850\nexport const GRAPHER_IMAGE_WIDTH_2X = 1700\n\nexport const GRAPHER_SQUARE_SIZE = 540\n\nexport const DEFAULT_GRAPHER_BOUNDS = new Bounds(\n    0,\n    0,\n    DEFAULT_GRAPHER_WIDTH,\n    DEFAULT_GRAPHER_HEIGHT\n)\n\nexport const DEFAULT_GRAPHER_BOUNDS_SQUARE = new Bounds(\n    0,\n    0,\n    GRAPHER_SQUARE_SIZE,\n    GRAPHER_SQUARE_SIZE\n)\n\nexport const NARROW_CHART_WIDTH = 320\n\nexport const GRAPHER_FRAME_PADDING_VERTICAL = 16\nexport const GRAPHER_FRAME_PADDING_HORIZONTAL = 16\n\nexport const STATIC_EXPORT_DETAIL_SPACING = 8\n\nexport const GRAPHER_OPACITY_MUTED = 0.5\n\nexport const GRAPHER_AREA_OPACITY_DEFAULT = 0.8\nexport const GRAPHER_AREA_OPACITY_MUTED = 0.3\nexport const GRAPHER_AREA_OPACITY_HIGHLIGHTED = 1\n\nexport const BASE_FONT_SIZE = 16\n\n// keep in sync with $max-tooltip-width in Tooltip.scss\nexport const GRAPHER_MAX_TOOLTIP_WIDTH = 400\n\nexport const latestGrapherConfigSchema = defaultGrapherConfig.$schema\n\nexport enum CookieKey {\n    isAdmin = \"isAdmin\",\n}\n\nexport const WORLD_ENTITY_NAME = \"World\"\n\nexport const isWorldEntityName = (entityName: EntityName): boolean =>\n    entityName === WORLD_ENTITY_NAME\n\nexport const CONTINENTS_INDICATOR_ID = 900801 // \"Countries Continent\"\n\nexport const isContinentsVariableId = (id: string | number): boolean =>\n    id.toString() === CONTINENTS_INDICATOR_ID.toString()\n\n// ETL paths are composed of channel/namespace/version/dataset/table#columnname\n// We want to identify the any version of these two columns (added whitespaces for readability):\n// grapher / demography / ANY VERSION / population / population # population\n// grapher / demography / ANY VERSION / population / historical # population_historical\nconst population_regex =\n    /^grapher\\/demography\\/[\\d-]+\\/population\\/(population#population|historical#population_historical)$/\n\n/**\n * Manually configured list of institutions that publish geographic regions,\n * but that the ETL's regions file doesn't know about yet.\n *\n * By convention, entities are named with the format 'RegionName (Publisher)',\n * such as 'Africa (PIP)' or 'Africa (GCP)'.\n *\n * These identifiers are used to compile groups of regions for the filter\n * dropdown in the entity selector and on the data tab.\n *\n * Ideally, all regions would be defined in the ETL's regions file,\n * but currently we need to maintain this manual configuration until the\n * regions file is more complete. Publishers that *are* in the regions file\n * don't belong here.\n */\nexport const ADDITIONAL_REGION_PUBLISHERS = [\n    \"pip\",\n    \"gcp\",\n    \"niaid\",\n    \"unicef\",\n    \"unaids\",\n    \"undp\",\n    \"oecd\",\n    \"unsd\",\n] as const\n\nexport type AdditionalRegionPublisher =\n    (typeof ADDITIONAL_REGION_PUBLISHERS)[number]\n\nexport const isPopulationVariableETLPath = (path: string): boolean => {\n    return population_regex.test(path)\n}\n\nexport enum Patterns {\n    /** No-data hatch used by legends, chart elements and the globe */\n    noDataPattern = \"noDataPattern\",\n    /** Viewport-scaled no-data hatch used by 2D maps */\n    noDataPatternForMap = \"noDataPatternForMap\",\n    /** Not-applicable hatch used by legends and the globe */\n    inapplicablePattern = \"inapplicablePattern\",\n    /** Viewport-scaled not-applicable hatch used by 2D maps */\n    inapplicablePatternForMap = \"inapplicablePatternForMap\",\n    /** Dot pattern for maps and the globe */\n    projectedDataPattern = \"projectedDataPattern\",\n    /** Dot pattern for the legend */\n    projectedDataPatternForLegend = \"projectedDataPatternForLegend\",\n}\n\n/**\n * SVG ids are resolved document-wide, so every grapher on a page needs its own\n * pattern ids. Otherwise, `url(#id)` resolves to the pattern of the first\n * grapher on the page, which doesn't render if that grapher is hidden (e.g.\n * inside a collapsed accordion or an inactive tab).\n */\nexport function makePatternId(baseId: string, idSuffix?: string): string {\n    return idSuffix ? `${baseId}-${idSuffix}` : baseId\n}\n\n/**\n * Set as the `font-family` attribute rather than inside `style`: otherwise,\n * the font will not get picked up by Figma correctly.\n */\nexport const SVG_FONT_FAMILY =\n    \"Lato, 'Helvetica Neue', Helvetica, Arial, 'Liberation Sans', sans-serif\"\n\nexport const SVG_STYLE_PROPS: React.CSSProperties = {\n    fontFeatureSettings: '\"liga\", \"kern\", \"calt\", \"lnum\"', // keep in sync with typography.scss$default-font-features\n    textRendering: \"geometricPrecision\",\n    WebkitFontSmoothing: \"antialiased\",\n}\n\nexport enum GrapherModal {\n    Sources = \"sources\",\n    Download = \"download\",\n    Embed = \"embed\",\n}\n\nexport const CHART_TYPES_THAT_SHOW_ALL_ENTITIES: GrapherChartType[] = [\n    GRAPHER_CHART_TYPES.ScatterPlot,\n    GRAPHER_CHART_TYPES.Marimekko,\n]\n\nexport interface FontSettings {\n    fontSize: number\n    fontWeight: number\n    lineHeight: number\n}\n","import { makeObservable } from \"mobx\";\nimport { useState } from \"react\";\nif (!useState) {\n    throw new Error(\"mobx-react-lite requires React with Hooks support\");\n}\nif (!makeObservable) {\n    throw new Error(\"mobx-react-lite@3 requires mobx at least version 6 to be available\");\n}\n//# sourceMappingURL=assertEnvironment.js.map","import { configure } from \"mobx\";\nexport function defaultNoopBatch(callback) {\n    callback();\n}\nexport function observerBatching(reactionScheduler) {\n    if (!reactionScheduler) {\n        reactionScheduler = defaultNoopBatch;\n        if (\"production\" !== process.env.NODE_ENV) {\n            console.warn(\"[MobX] Failed to get unstable_batched updates from react-dom / react-native\");\n        }\n    }\n    configure({ reactionScheduler: reactionScheduler });\n}\nexport var isObserverBatched = function () {\n    if (\"production\" !== process.env.NODE_ENV) {\n        console.warn(\"[MobX] Deprecated\");\n    }\n    return true;\n};\n//# sourceMappingURL=observerBatching.js.map","import { getDependencyTree } from \"mobx\";\nexport function printDebugValue(v) {\n    return getDependencyTree(v);\n}\n//# sourceMappingURL=printDebugValue.js.map","export var REGISTRY_FINALIZE_AFTER = 10000;\nexport var REGISTRY_SWEEP_INTERVAL = 10000;\nvar TimerBasedFinalizationRegistry = /** @class */ (function () {\n    function TimerBasedFinalizationRegistry(finalize) {\n        var _this = this;\n        Object.defineProperty(this, \"finalize\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: finalize\n        });\n        Object.defineProperty(this, \"registrations\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: new Map()\n        });\n        Object.defineProperty(this, \"sweepTimeout\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        // Bound so it can be used directly as setTimeout callback.\n        Object.defineProperty(this, \"sweep\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: function (maxAge) {\n                if (maxAge === void 0) { maxAge = REGISTRY_FINALIZE_AFTER; }\n                // cancel timeout so we can force sweep anytime\n                clearTimeout(_this.sweepTimeout);\n                _this.sweepTimeout = undefined;\n                var now = Date.now();\n                _this.registrations.forEach(function (registration, token) {\n                    if (now - registration.registeredAt >= maxAge) {\n                        _this.finalize(registration.value);\n                        _this.registrations.delete(token);\n                    }\n                });\n                if (_this.registrations.size > 0) {\n                    _this.scheduleSweep();\n                }\n            }\n        });\n        // Bound so it can be exported directly as clearTimers test utility.\n        Object.defineProperty(this, \"finalizeAllImmediately\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: function () {\n                _this.sweep(0);\n            }\n        });\n    }\n    // Token is actually required with this impl\n    Object.defineProperty(TimerBasedFinalizationRegistry.prototype, \"register\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (target, value, token) {\n            this.registrations.set(token, {\n                value: value,\n                registeredAt: Date.now()\n            });\n            this.scheduleSweep();\n        }\n    });\n    Object.defineProperty(TimerBasedFinalizationRegistry.prototype, \"unregister\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (token) {\n            this.registrations.delete(token);\n        }\n    });\n    Object.defineProperty(TimerBasedFinalizationRegistry.prototype, \"scheduleSweep\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            if (this.sweepTimeout === undefined) {\n                this.sweepTimeout = setTimeout(this.sweep, REGISTRY_SWEEP_INTERVAL);\n            }\n        }\n    });\n    return TimerBasedFinalizationRegistry;\n}());\nexport { TimerBasedFinalizationRegistry };\nexport var UniversalFinalizationRegistry = typeof FinalizationRegistry !== \"undefined\"\n    ? FinalizationRegistry\n    : TimerBasedFinalizationRegistry;\n//# sourceMappingURL=UniversalFinalizationRegistry.js.map","import { UniversalFinalizationRegistry } from \"./UniversalFinalizationRegistry\";\nexport var observerFinalizationRegistry = new UniversalFinalizationRegistry(function (adm) {\n    var _a;\n    (_a = adm.reaction) === null || _a === void 0 ? void 0 : _a.dispose();\n    adm.reaction = null;\n});\n//# sourceMappingURL=observerFinalizationRegistry.js.map","var globalIsUsingStaticRendering = false;\nexport function enableStaticRendering(enable) {\n    globalIsUsingStaticRendering = enable;\n}\nexport function isUsingStaticRendering() {\n    return globalIsUsingStaticRendering;\n}\n//# sourceMappingURL=staticRendering.js.map","var __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nimport { Reaction } from \"mobx\";\nimport React from \"react\";\nimport { printDebugValue } from \"./utils/printDebugValue\";\nimport { observerFinalizationRegistry } from \"./utils/observerFinalizationRegistry\";\nimport { isUsingStaticRendering } from \"./staticRendering\";\nfunction observerComponentNameFor(baseComponentName) {\n    return \"observer\".concat(baseComponentName);\n}\n/**\n * We use class to make it easier to detect in heap snapshots by name\n */\nvar ObjectToBeRetainedByReact = /** @class */ (function () {\n    function ObjectToBeRetainedByReact() {\n    }\n    return ObjectToBeRetainedByReact;\n}());\nfunction objectToBeRetainedByReactFactory() {\n    return new ObjectToBeRetainedByReact();\n}\nexport function useObserver(fn, baseComponentName) {\n    if (baseComponentName === void 0) { baseComponentName = \"observed\"; }\n    if (isUsingStaticRendering()) {\n        return fn();\n    }\n    var _a = __read(React.useState(objectToBeRetainedByReactFactory), 1), objectRetainedByReact = _a[0];\n    // Force update, see #2982\n    var _b = __read(React.useState(), 2), setState = _b[1];\n    var forceUpdate = function () { return setState([]); };\n    // StrictMode/ConcurrentMode/Suspense may mean that our component is\n    // rendered and abandoned multiple times, so we need to track leaked\n    // Reactions.\n    var admRef = React.useRef(null);\n    if (!admRef.current) {\n        // First render\n        admRef.current = {\n            reaction: null,\n            mounted: false,\n            changedBeforeMount: false\n        };\n    }\n    var adm = admRef.current;\n    if (!adm.reaction) {\n        // First render or component was not committed and reaction was disposed by registry\n        adm.reaction = new Reaction(observerComponentNameFor(baseComponentName), function () {\n            // Observable has changed, meaning we want to re-render\n            // BUT if we're a component that hasn't yet got to the useEffect()\n            // stage, we might be a component that _started_ to render, but\n            // got dropped, and we don't want to make state changes then.\n            // (It triggers warnings in StrictMode, for a start.)\n            if (adm.mounted) {\n                // We have reached useEffect(), so we're mounted, and can trigger an update\n                forceUpdate();\n            }\n            else {\n                // We haven't yet reached useEffect(), so we'll need to trigger a re-render\n                // when (and if) useEffect() arrives.\n                adm.changedBeforeMount = true;\n            }\n        });\n        observerFinalizationRegistry.register(objectRetainedByReact, adm, adm);\n    }\n    React.useDebugValue(adm.reaction, printDebugValue);\n    React.useEffect(function () {\n        observerFinalizationRegistry.unregister(adm);\n        adm.mounted = true;\n        if (adm.reaction) {\n            if (adm.changedBeforeMount) {\n                // Got a change before mount, force an update\n                adm.changedBeforeMount = false;\n                forceUpdate();\n            }\n        }\n        else {\n            // The reaction we set up in our render has been disposed.\n            // This can be due to bad timings of renderings, e.g. our\n            // component was paused for a _very_ long time, and our\n            // reaction got cleaned up\n            // Re-create the reaction\n            adm.reaction = new Reaction(observerComponentNameFor(baseComponentName), function () {\n                // We've definitely already been mounted at this point\n                forceUpdate();\n            });\n            forceUpdate();\n        }\n        return function () {\n            adm.reaction.dispose();\n            adm.reaction = null;\n            adm.mounted = false;\n            adm.changedBeforeMount = false;\n        };\n    }, []);\n    // render the original component, but have the\n    // reaction track the observables, so that rendering\n    // can be invalidated (see above) once a dependency changes\n    var rendering;\n    var exception;\n    adm.reaction.track(function () {\n        try {\n            rendering = fn();\n        }\n        catch (e) {\n            exception = e;\n        }\n    });\n    if (exception) {\n        throw exception; // re-throw any exceptions caught during rendering\n    }\n    return rendering;\n}\n//# sourceMappingURL=useObserver.js.map","import { forwardRef, memo } from \"react\";\nimport { isUsingStaticRendering } from \"./staticRendering\";\nimport { useObserver } from \"./useObserver\";\nvar warnObserverOptionsDeprecated = true;\nvar hasSymbol = typeof Symbol === \"function\" && Symbol.for;\n// Using react-is had some issues (and operates on elements, not on types), see #608 / #609\nvar ReactForwardRefSymbol = hasSymbol\n    ? Symbol.for(\"react.forward_ref\")\n    : typeof forwardRef === \"function\" && forwardRef(function (props) { return null; })[\"$$typeof\"];\nvar ReactMemoSymbol = hasSymbol\n    ? Symbol.for(\"react.memo\")\n    : typeof memo === \"function\" && memo(function (props) { return null; })[\"$$typeof\"];\n// n.b. base case is not used for actual typings or exported in the typing files\nexport function observer(baseComponent, \n// TODO remove in next major\noptions) {\n    var _a;\n    if (process.env.NODE_ENV !== \"production\" && warnObserverOptionsDeprecated && options) {\n        warnObserverOptionsDeprecated = false;\n        console.warn(\"[mobx-react-lite] `observer(fn, { forwardRef: true })` is deprecated, use `observer(React.forwardRef(fn))`\");\n    }\n    if (ReactMemoSymbol && baseComponent[\"$$typeof\"] === ReactMemoSymbol) {\n        throw new Error(\"[mobx-react-lite] You are trying to use `observer` on a function component wrapped in either another `observer` or `React.memo`. The observer already applies 'React.memo' for you.\");\n    }\n    // The working of observer is explained step by step in this talk: https://www.youtube.com/watch?v=cPF4iBedoF0&feature=youtu.be&t=1307\n    if (isUsingStaticRendering()) {\n        return baseComponent;\n    }\n    var useForwardRef = (_a = options === null || options === void 0 ? void 0 : options.forwardRef) !== null && _a !== void 0 ? _a : false;\n    var render = baseComponent;\n    var baseComponentName = baseComponent.displayName || baseComponent.name;\n    // If already wrapped with forwardRef, unwrap,\n    // so we can patch render and apply memo\n    if (ReactForwardRefSymbol && baseComponent[\"$$typeof\"] === ReactForwardRefSymbol) {\n        useForwardRef = true;\n        render = baseComponent[\"render\"];\n        if (typeof render !== \"function\") {\n            throw new Error(\"[mobx-react-lite] `render` property of ForwardRef was not a function\");\n        }\n    }\n    var observerComponent = function (props, ref) {\n        return useObserver(function () { return render(props, ref); }, baseComponentName);\n    };\n    // Don't set `displayName` for anonymous components,\n    // so the `displayName` can be customized by user, see #3192.\n    if (baseComponentName !== \"\") {\n        ;\n        observerComponent.displayName = baseComponentName;\n    }\n    // Support legacy context: `contextTypes` must be applied before `memo`\n    if (baseComponent.contextTypes) {\n        ;\n        observerComponent.contextTypes = baseComponent.contextTypes;\n    }\n    if (useForwardRef) {\n        // `forwardRef` must be applied prior `memo`\n        // `forwardRef(observer(cmp))` throws:\n        // \"forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))\"\n        observerComponent = forwardRef(observerComponent);\n    }\n    // memo; we are not interested in deep updates\n    // in props; we assume that if deep objects are changed,\n    // this is in observables, which would have been tracked anyway\n    observerComponent = memo(observerComponent);\n    copyStaticProperties(baseComponent, observerComponent);\n    if (\"production\" !== process.env.NODE_ENV) {\n        Object.defineProperty(observerComponent, \"contextTypes\", {\n            set: function () {\n                var _a;\n                throw new Error(\"[mobx-react-lite] `\".concat(this.displayName || ((_a = this.type) === null || _a === void 0 ? void 0 : _a.displayName) || \"Component\", \".contextTypes` must be set before applying `observer`.\"));\n            }\n        });\n    }\n    return observerComponent;\n}\n// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js\nvar hoistBlackList = {\n    $$typeof: true,\n    render: true,\n    compare: true,\n    type: true,\n    // Don't redefine `displayName`,\n    // it's defined as getter-setter pair on `memo` (see #3192).\n    displayName: true\n};\nfunction copyStaticProperties(base, target) {\n    Object.keys(base).forEach(function (key) {\n        if (!hoistBlackList[key]) {\n            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key));\n        }\n    });\n}\n//# sourceMappingURL=observer.js.map","var _a;\nimport \"./utils/assertEnvironment\";\nimport { unstable_batchedUpdates as batch } from \"./utils/reactBatchedUpdates\";\nimport { observerBatching } from \"./utils/observerBatching\";\nimport { useDeprecated } from \"./utils/utils\";\nimport { useObserver as useObserverOriginal } from \"./useObserver\";\nimport { enableStaticRendering } from \"./staticRendering\";\nimport { observerFinalizationRegistry } from \"./utils/observerFinalizationRegistry\";\nobserverBatching(batch);\nexport { isUsingStaticRendering, enableStaticRendering } from \"./staticRendering\";\nexport { observer } from \"./observer\";\nexport { Observer } from \"./ObserverComponent\";\nexport { useLocalObservable } from \"./useLocalObservable\";\nexport { useLocalStore } from \"./useLocalStore\";\nexport { useAsObservableSource } from \"./useAsObservableSource\";\nexport var clearTimers = (_a = observerFinalizationRegistry[\"finalizeAllImmediately\"]) !== null && _a !== void 0 ? _a : (function () { });\nexport function useObserver(fn, baseComponentName) {\n    if (baseComponentName === void 0) { baseComponentName = \"observed\"; }\n    if (\"production\" !== process.env.NODE_ENV) {\n        useDeprecated(\"[mobx-react-lite] 'useObserver(fn)' is deprecated. Use `<Observer>{fn}</Observer>` instead, or wrap the entire component in `observer`.\");\n    }\n    return useObserverOriginal(fn, baseComponentName);\n}\nexport { isObserverBatched, observerBatching } from \"./utils/observerBatching\";\nexport function useStaticRendering(enable) {\n    if (\"production\" !== process.env.NODE_ENV) {\n        console.warn(\"[mobx-react-lite] 'useStaticRendering' is deprecated, use 'enableStaticRendering' instead\");\n    }\n    enableStaticRendering(enable);\n}\n//# sourceMappingURL=index.js.map","import { _allowStateReadsStart, _allowStateReadsEnd, $mobx, _allowStateChanges, createAtom, Reaction, untracked, isObservableMap, isObservableObject, isObservableArray, observable } from 'mobx';\nimport React__default, { PureComponent, Component } from 'react';\nimport { isUsingStaticRendering, observer as observer$1 } from 'mobx-react-lite';\nexport { Observer, enableStaticRendering, isUsingStaticRendering, observerBatching, useAsObservableSource, useLocalObservable, useLocalStore, useObserver, useStaticRendering } from 'mobx-react-lite';\n\nvar symbolId = 0;\n\nfunction createSymbol(name) {\n  if (typeof Symbol === \"function\") {\n    return Symbol(name);\n  }\n\n  var symbol = \"__$mobx-react \" + name + \" (\" + symbolId + \")\";\n  symbolId++;\n  return symbol;\n}\n\nvar createdSymbols = {};\nfunction newSymbol(name) {\n  if (!createdSymbols[name]) {\n    createdSymbols[name] = createSymbol(name);\n  }\n\n  return createdSymbols[name];\n}\nfunction shallowEqual(objA, objB) {\n  //From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n  if (is(objA, objB)) {\n    return true;\n  }\n\n  if (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n\n  if (keysA.length !== keysB.length) {\n    return false;\n  }\n\n  for (var i = 0; i < keysA.length; i++) {\n    if (!Object.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction is(x, y) {\n  // From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n  if (x === y) {\n    return x !== 0 || 1 / x === 1 / y;\n  } else {\n    return x !== x && y !== y;\n  }\n} // based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js\n\n\nvar hoistBlackList = {\n  $$typeof: 1,\n  render: 1,\n  compare: 1,\n  type: 1,\n  childContextTypes: 1,\n  contextType: 1,\n  contextTypes: 1,\n  defaultProps: 1,\n  getDefaultProps: 1,\n  getDerivedStateFromError: 1,\n  getDerivedStateFromProps: 1,\n  mixins: 1,\n  displayName: 1,\n  propTypes: 1\n};\nfunction copyStaticProperties(base, target) {\n  var protoProps = Object.getOwnPropertyNames(Object.getPrototypeOf(base));\n  Object.getOwnPropertyNames(base).forEach(function (key) {\n    if (!hoistBlackList[key] && protoProps.indexOf(key) === -1) {\n      Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key));\n    }\n  });\n}\n/**\r\n * Helper to set `prop` to `this` as non-enumerable (hidden prop)\r\n * @param target\r\n * @param prop\r\n * @param value\r\n */\n\nfunction setHiddenProp(target, prop, value) {\n  if (!Object.hasOwnProperty.call(target, prop)) {\n    Object.defineProperty(target, prop, {\n      enumerable: false,\n      configurable: true,\n      writable: true,\n      value: value\n    });\n  } else {\n    target[prop] = value;\n  }\n}\n/**\r\n * Utilities for patching componentWillUnmount, to make sure @disposeOnUnmount works correctly icm with user defined hooks\r\n * and the handler provided by mobx-react\r\n */\n\nvar mobxMixins = /*#__PURE__*/newSymbol(\"patchMixins\");\nvar mobxPatchedDefinition = /*#__PURE__*/newSymbol(\"patchedDefinition\");\n\nfunction getMixins(target, methodName) {\n  var mixins = target[mobxMixins] = target[mobxMixins] || {};\n  var methodMixins = mixins[methodName] = mixins[methodName] || {};\n  methodMixins.locks = methodMixins.locks || 0;\n  methodMixins.methods = methodMixins.methods || [];\n  return methodMixins;\n}\n\nfunction wrapper(realMethod, mixins) {\n  var _this = this;\n\n  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n    args[_key - 2] = arguments[_key];\n  }\n\n  // locks are used to ensure that mixins are invoked only once per invocation, even on recursive calls\n  mixins.locks++;\n\n  try {\n    var retVal;\n\n    if (realMethod !== undefined && realMethod !== null) {\n      retVal = realMethod.apply(this, args);\n    }\n\n    return retVal;\n  } finally {\n    mixins.locks--;\n\n    if (mixins.locks === 0) {\n      mixins.methods.forEach(function (mx) {\n        mx.apply(_this, args);\n      });\n    }\n  }\n}\n\nfunction wrapFunction(realMethod, mixins) {\n  var fn = function fn() {\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    wrapper.call.apply(wrapper, [this, realMethod, mixins].concat(args));\n  };\n\n  return fn;\n}\n\nfunction patch(target, methodName, mixinMethod) {\n  var mixins = getMixins(target, methodName);\n\n  if (mixins.methods.indexOf(mixinMethod) < 0) {\n    mixins.methods.push(mixinMethod);\n  }\n\n  var oldDefinition = Object.getOwnPropertyDescriptor(target, methodName);\n\n  if (oldDefinition && oldDefinition[mobxPatchedDefinition]) {\n    // already patched definition, do not repatch\n    return;\n  }\n\n  var originalMethod = target[methodName];\n  var newDefinition = createDefinition(target, methodName, oldDefinition ? oldDefinition.enumerable : undefined, mixins, originalMethod);\n  Object.defineProperty(target, methodName, newDefinition);\n}\n\nfunction createDefinition(target, methodName, enumerable, mixins, originalMethod) {\n  var _ref;\n\n  var wrappedFunc = wrapFunction(originalMethod, mixins);\n  return _ref = {}, _ref[mobxPatchedDefinition] = true, _ref.get = function get() {\n    return wrappedFunc;\n  }, _ref.set = function set(value) {\n    if (this === target) {\n      wrappedFunc = wrapFunction(value, mixins);\n    } else {\n      // when it is an instance of the prototype/a child prototype patch that particular case again separately\n      // since we need to store separate values depending on wether it is the actual instance, the prototype, etc\n      // e.g. the method for super might not be the same as the method for the prototype which might be not the same\n      // as the method for the instance\n      var newDefinition = createDefinition(this, methodName, enumerable, mixins, value);\n      Object.defineProperty(this, methodName, newDefinition);\n    }\n  }, _ref.configurable = true, _ref.enumerable = enumerable, _ref;\n}\n\nvar mobxAdminProperty = $mobx || \"$mobx\"; // BC\n\nvar mobxObserverProperty = /*#__PURE__*/newSymbol(\"isMobXReactObserver\");\nvar mobxIsUnmounted = /*#__PURE__*/newSymbol(\"isUnmounted\");\nvar skipRenderKey = /*#__PURE__*/newSymbol(\"skipRender\");\nvar isForcingUpdateKey = /*#__PURE__*/newSymbol(\"isForcingUpdate\");\nfunction makeClassComponentObserver(componentClass) {\n  var target = componentClass.prototype;\n\n  if (componentClass[mobxObserverProperty]) {\n    var displayName = getDisplayName(target);\n    console.warn(\"The provided component class (\" + displayName + \")\\n                has already been declared as an observer component.\");\n  } else {\n    componentClass[mobxObserverProperty] = true;\n  }\n\n  if (target.componentWillReact) {\n    throw new Error(\"The componentWillReact life-cycle event is no longer supported\");\n  }\n\n  if (componentClass[\"__proto__\"] !== PureComponent) {\n    if (!target.shouldComponentUpdate) {\n      target.shouldComponentUpdate = observerSCU;\n    } else if (target.shouldComponentUpdate !== observerSCU) {\n      // n.b. unequal check, instead of existence check, as @observer might be on superclass as well\n      throw new Error(\"It is not allowed to use shouldComponentUpdate in observer based components.\");\n    }\n  } // this.props and this.state are made observable, just to make sure @computed fields that\n  // are defined inside the component, and which rely on state or props, re-compute if state or props change\n  // (otherwise the computed wouldn't update and become stale on props change, since props are not observable)\n  // However, this solution is not without it's own problems: https://github.com/mobxjs/mobx-react/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Aobservable-props-or-not+\n\n\n  makeObservableProp(target, \"props\");\n  makeObservableProp(target, \"state\");\n\n  if (componentClass.contextType) {\n    makeObservableProp(target, \"context\");\n  }\n\n  var originalRender = target.render;\n\n  if (typeof originalRender !== \"function\") {\n    var _displayName = getDisplayName(target);\n\n    throw new Error(\"[mobx-react] class component (\" + _displayName + \") is missing `render` method.\" + \"\\n`observer` requires `render` being a function defined on prototype.\" + \"\\n`render = () => {}` or `render = function() {}` is not supported.\");\n  }\n\n  target.render = function () {\n    this.render = isUsingStaticRendering() ? originalRender : createReactiveRender.call(this, originalRender);\n    return this.render();\n  };\n\n  patch(target, \"componentDidMount\", function () {\n    this[mobxIsUnmounted] = false;\n\n    if (!this.render[mobxAdminProperty]) {\n      // Reaction is re-created automatically during render, but a component can re-mount and skip render #3395.\n      // To re-create the reaction and re-subscribe to relevant observables we have to force an update.\n      Component.prototype.forceUpdate.call(this);\n    }\n  });\n  patch(target, \"componentWillUnmount\", function () {\n    if (isUsingStaticRendering()) {\n      return;\n    }\n\n    var reaction = this.render[mobxAdminProperty];\n\n    if (reaction) {\n      reaction.dispose(); // Forces reaction to be re-created on next render\n\n      this.render[mobxAdminProperty] = null;\n    } else {\n      // Render may have been hot-swapped and/or overridden by a subclass.\n      var _displayName2 = getDisplayName(this);\n\n      console.warn(\"The reactive render of an observer class component (\" + _displayName2 + \")\\n                was overridden after MobX attached. This may result in a memory leak if the\\n                overridden reactive render was not properly disposed.\");\n    }\n\n    this[mobxIsUnmounted] = true;\n  });\n  return componentClass;\n} // Generates a friendly name for debugging\n\nfunction getDisplayName(comp) {\n  return comp.displayName || comp.name || comp.constructor && (comp.constructor.displayName || comp.constructor.name) || \"<component>\";\n}\n\nfunction createReactiveRender(originalRender) {\n  var _this = this;\n\n  /**\r\n   * If props are shallowly modified, react will render anyway,\r\n   * so atom.reportChanged() should not result in yet another re-render\r\n   */\n  setHiddenProp(this, skipRenderKey, false);\n  /**\r\n   * forceUpdate will re-assign this.props. We don't want that to cause a loop,\r\n   * so detect these changes\r\n   */\n\n  setHiddenProp(this, isForcingUpdateKey, false);\n  var initialName = getDisplayName(this);\n  var boundOriginalRender = originalRender.bind(this);\n  var isRenderingPending = false;\n\n  var createReaction = function createReaction() {\n    var reaction = new Reaction(initialName + \".render()\", function () {\n      if (!isRenderingPending) {\n        // N.B. Getting here *before mounting* means that a component constructor has side effects (see the relevant test in misc.test.tsx)\n        // This unidiomatic React usage but React will correctly warn about this so we continue as usual\n        // See #85 / Pull #44\n        isRenderingPending = true;\n\n        if (_this[mobxIsUnmounted] !== true) {\n          var hasError = true;\n\n          try {\n            setHiddenProp(_this, isForcingUpdateKey, true);\n\n            if (!_this[skipRenderKey]) {\n              Component.prototype.forceUpdate.call(_this);\n            }\n\n            hasError = false;\n          } finally {\n            setHiddenProp(_this, isForcingUpdateKey, false);\n\n            if (hasError) {\n              reaction.dispose(); // Forces reaction to be re-created on next render\n\n              _this.render[mobxAdminProperty] = null;\n            }\n          }\n        }\n      }\n    });\n    reaction[\"reactComponent\"] = _this;\n    return reaction;\n  };\n\n  function reactiveRender() {\n    var _reactiveRender$mobxA;\n\n    isRenderingPending = false; // Create reaction lazily to support re-mounting #3395\n\n    var reaction = (_reactiveRender$mobxA = reactiveRender[mobxAdminProperty]) != null ? _reactiveRender$mobxA : reactiveRender[mobxAdminProperty] = createReaction();\n    var exception = undefined;\n    var rendering = undefined;\n    reaction.track(function () {\n      try {\n        // TODO@major\n        // Optimization: replace with _allowStateChangesStart/End (not available in mobx@6.0.0)\n        rendering = _allowStateChanges(false, boundOriginalRender);\n      } catch (e) {\n        exception = e;\n      }\n    });\n\n    if (exception) {\n      throw exception;\n    }\n\n    return rendering;\n  }\n\n  return reactiveRender;\n}\n\nfunction observerSCU(nextProps, nextState) {\n  if (isUsingStaticRendering()) {\n    console.warn(\"[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side.\");\n  } // update on any state changes (as is the default)\n\n\n  if (this.state !== nextState) {\n    return true;\n  } // update if props are shallowly not equal, inspired by PureRenderMixin\n  // we could return just 'false' here, and avoid the `skipRender` checks etc\n  // however, it is nicer if lifecycle events are triggered like usually,\n  // so we return true here if props are shallowly modified.\n\n\n  return !shallowEqual(this.props, nextProps);\n}\n\nfunction makeObservableProp(target, propName) {\n  var valueHolderKey = newSymbol(\"reactProp_\" + propName + \"_valueHolder\");\n  var atomHolderKey = newSymbol(\"reactProp_\" + propName + \"_atomHolder\");\n\n  function getAtom() {\n    if (!this[atomHolderKey]) {\n      setHiddenProp(this, atomHolderKey, createAtom(\"reactive \" + propName));\n    }\n\n    return this[atomHolderKey];\n  }\n\n  Object.defineProperty(target, propName, {\n    configurable: true,\n    enumerable: true,\n    get: function get() {\n      var prevReadState = false; // Why this check? BC?\n      // @ts-expect-error\n\n      if (_allowStateReadsStart && _allowStateReadsEnd) {\n        prevReadState = _allowStateReadsStart(true);\n      }\n\n      getAtom.call(this).reportObserved(); // Why this check? BC?\n      // @ts-expect-error\n\n      if (_allowStateReadsStart && _allowStateReadsEnd) {\n        _allowStateReadsEnd(prevReadState);\n      }\n\n      return this[valueHolderKey];\n    },\n    set: function set(v) {\n      if (!this[isForcingUpdateKey] && !shallowEqual(this[valueHolderKey], v)) {\n        setHiddenProp(this, valueHolderKey, v);\n        setHiddenProp(this, skipRenderKey, true);\n        getAtom.call(this).reportChanged();\n        setHiddenProp(this, skipRenderKey, false);\n      } else {\n        setHiddenProp(this, valueHolderKey, v);\n      }\n    }\n  });\n}\n\n/**\r\n * Observer function / decorator\r\n */\n\nfunction observer(component) {\n  if (component[\"isMobxInjector\"] === true) {\n    console.warn(\"Mobx observer: You are trying to use `observer` on a component that already has `inject`. Please apply `observer` before applying `inject`\");\n  }\n\n  if (Object.prototype.isPrototypeOf.call(Component, component) || Object.prototype.isPrototypeOf.call(PureComponent, component)) {\n    // Class component\n    return makeClassComponentObserver(component);\n  } else {\n    // Function component\n    return observer$1(component);\n  }\n}\n\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nvar _excluded = [\"children\"];\nvar MobXProviderContext = /*#__PURE__*/React__default.createContext({});\nfunction Provider(props) {\n  var children = props.children,\n      stores = _objectWithoutPropertiesLoose(props, _excluded);\n\n  var parentValue = React__default.useContext(MobXProviderContext);\n  var mutableProviderRef = React__default.useRef(_extends({}, parentValue, stores));\n  var value = mutableProviderRef.current;\n\n  if (process.env.NODE_ENV !== \"production\") {\n    var newValue = _extends({}, value, stores); // spread in previous state for the context based stores\n\n\n    if (!shallowEqual(value, newValue)) {\n      throw new Error(\"MobX Provider: The set of provided stores has changed. See: https://github.com/mobxjs/mobx-react#the-set-of-provided-stores-has-changed-error.\");\n    }\n  }\n\n  return React__default.createElement(MobXProviderContext.Provider, {\n    value: value\n  }, children);\n}\nProvider.displayName = \"MobXProvider\";\n\n/**\r\n * Store Injection\r\n */\n\nfunction createStoreInjector(grabStoresFn, component, injectNames, makeReactive) {\n  // Support forward refs\n  var Injector = React__default.forwardRef(function (props, ref) {\n    var newProps = _extends({}, props);\n\n    var context = React__default.useContext(MobXProviderContext);\n    Object.assign(newProps, grabStoresFn(context || {}, newProps) || {});\n\n    if (ref) {\n      newProps.ref = ref;\n    }\n\n    return React__default.createElement(component, newProps);\n  });\n  if (makeReactive) Injector = observer(Injector);\n  Injector[\"isMobxInjector\"] = true; // assigned late to suppress observer warning\n  // Static fields from component should be visible on the generated Injector\n\n  copyStaticProperties(component, Injector);\n  Injector[\"wrappedComponent\"] = component;\n  Injector.displayName = getInjectName(component, injectNames);\n  return Injector;\n}\n\nfunction getInjectName(component, injectNames) {\n  var displayName;\n  var componentName = component.displayName || component.name || component.constructor && component.constructor.name || \"Component\";\n  if (injectNames) displayName = \"inject-with-\" + injectNames + \"(\" + componentName + \")\";else displayName = \"inject(\" + componentName + \")\";\n  return displayName;\n}\n\nfunction grabStoresByName(storeNames) {\n  return function (baseStores, nextProps) {\n    storeNames.forEach(function (storeName) {\n      if (storeName in nextProps // prefer props over stores\n      ) return;\n      if (!(storeName in baseStores)) throw new Error(\"MobX injector: Store '\" + storeName + \"' is not available! Make sure it is provided by some Provider\");\n      nextProps[storeName] = baseStores[storeName];\n    });\n    return nextProps;\n  };\n}\n/**\r\n * higher order component that injects stores to a child.\r\n * takes either a varargs list of strings, which are stores read from the context,\r\n * or a function that manually maps the available stores from the context to props:\r\n * storesToProps(mobxStores, props, context) => newProps\r\n */\n\n\nfunction inject() {\n  for (var _len = arguments.length, storeNames = new Array(_len), _key = 0; _key < _len; _key++) {\n    storeNames[_key] = arguments[_key];\n  }\n\n  if (typeof arguments[0] === \"function\") {\n    var grabStoresFn = arguments[0];\n    return function (componentClass) {\n      return createStoreInjector(grabStoresFn, componentClass, grabStoresFn.name, true);\n    };\n  } else {\n    return function (componentClass) {\n      return createStoreInjector(grabStoresByName(storeNames), componentClass, storeNames.join(\"-\"), false);\n    };\n  }\n}\n\nvar protoStoreKey = /*#__PURE__*/newSymbol(\"disposeOnUnmountProto\");\nvar instStoreKey = /*#__PURE__*/newSymbol(\"disposeOnUnmountInst\");\n\nfunction runDisposersOnWillUnmount() {\n  var _this = this;\n  [].concat(this[protoStoreKey] || [], this[instStoreKey] || []).forEach(function (propKeyOrFunction) {\n    var prop = typeof propKeyOrFunction === \"string\" ? _this[propKeyOrFunction] : propKeyOrFunction;\n\n    if (prop !== undefined && prop !== null) {\n      if (Array.isArray(prop)) prop.map(function (f) {\n        return f();\n      });else prop();\n    }\n  });\n}\n\nfunction disposeOnUnmount(target, propertyKeyOrFunction) {\n  if (Array.isArray(propertyKeyOrFunction)) {\n    return propertyKeyOrFunction.map(function (fn) {\n      return disposeOnUnmount(target, fn);\n    });\n  }\n\n  var c = Object.getPrototypeOf(target).constructor;\n  var c2 = Object.getPrototypeOf(target.constructor); // Special case for react-hot-loader\n\n  var c3 = Object.getPrototypeOf(Object.getPrototypeOf(target));\n\n  if (!(c === React__default.Component || c === React__default.PureComponent || c2 === React__default.Component || c2 === React__default.PureComponent || c3 === React__default.Component || c3 === React__default.PureComponent)) {\n    throw new Error(\"[mobx-react] disposeOnUnmount only supports direct subclasses of React.Component or React.PureComponent.\");\n  }\n\n  if (typeof propertyKeyOrFunction !== \"string\" && typeof propertyKeyOrFunction !== \"function\" && !Array.isArray(propertyKeyOrFunction)) {\n    throw new Error(\"[mobx-react] disposeOnUnmount only works if the parameter is either a property key or a function.\");\n  } // decorator's target is the prototype, so it doesn't have any instance properties like props\n\n\n  var isDecorator = typeof propertyKeyOrFunction === \"string\"; // add property key / function we want run (disposed) to the store\n\n  var componentWasAlreadyModified = !!target[protoStoreKey] || !!target[instStoreKey];\n  var store = isDecorator ? // decorators are added to the prototype store\n  target[protoStoreKey] || (target[protoStoreKey] = []) : // functions are added to the instance store\n  target[instStoreKey] || (target[instStoreKey] = []);\n  store.push(propertyKeyOrFunction); // tweak the component class componentWillUnmount if not done already\n\n  if (!componentWasAlreadyModified) {\n    patch(target, \"componentWillUnmount\", runDisposersOnWillUnmount);\n  } // return the disposer as is if invoked as a non decorator\n\n\n  if (typeof propertyKeyOrFunction !== \"string\") {\n    return propertyKeyOrFunction;\n  }\n}\n\nfunction createChainableTypeChecker(validator) {\n  function checkType(isRequired, props, propName, componentName, location, propFullName) {\n    for (var _len = arguments.length, rest = new Array(_len > 6 ? _len - 6 : 0), _key = 6; _key < _len; _key++) {\n      rest[_key - 6] = arguments[_key];\n    }\n\n    return untracked(function () {\n      componentName = componentName || \"<<anonymous>>\";\n      propFullName = propFullName || propName;\n\n      if (props[propName] == null) {\n        if (isRequired) {\n          var actual = props[propName] === null ? \"null\" : \"undefined\";\n          return new Error(\"The \" + location + \" `\" + propFullName + \"` is marked as required \" + \"in `\" + componentName + \"`, but its value is `\" + actual + \"`.\");\n        }\n\n        return null;\n      } else {\n        // @ts-ignore rest arg is necessary for some React internals - fails tests otherwise\n        return validator.apply(void 0, [props, propName, componentName, location, propFullName].concat(rest));\n      }\n    });\n  }\n\n  var chainedCheckType = checkType.bind(null, false); // Add isRequired to satisfy Requirable\n\n  chainedCheckType.isRequired = checkType.bind(null, true);\n  return chainedCheckType;\n} // Copied from React.PropTypes\n\n\nfunction isSymbol(propType, propValue) {\n  // Native Symbol.\n  if (propType === \"symbol\") {\n    return true;\n  } // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n\n\n  if (propValue[\"@@toStringTag\"] === \"Symbol\") {\n    return true;\n  } // Fallback for non-spec compliant Symbols which are polyfilled.\n\n\n  if (typeof Symbol === \"function\" && propValue instanceof Symbol) {\n    return true;\n  }\n\n  return false;\n} // Copied from React.PropTypes\n\n\nfunction getPropType(propValue) {\n  var propType = typeof propValue;\n\n  if (Array.isArray(propValue)) {\n    return \"array\";\n  }\n\n  if (propValue instanceof RegExp) {\n    // Old webkits (at least until Android 4.0) return 'function' rather than\n    // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n    // passes PropTypes.object.\n    return \"object\";\n  }\n\n  if (isSymbol(propType, propValue)) {\n    return \"symbol\";\n  }\n\n  return propType;\n} // This handles more types than `getPropType`. Only used for error messages.\n// Copied from React.PropTypes\n\n\nfunction getPreciseType(propValue) {\n  var propType = getPropType(propValue);\n\n  if (propType === \"object\") {\n    if (propValue instanceof Date) {\n      return \"date\";\n    } else if (propValue instanceof RegExp) {\n      return \"regexp\";\n    }\n  }\n\n  return propType;\n}\n\nfunction createObservableTypeCheckerCreator(allowNativeType, mobxType) {\n  return createChainableTypeChecker(function (props, propName, componentName, location, propFullName) {\n    return untracked(function () {\n      if (allowNativeType) {\n        if (getPropType(props[propName]) === mobxType.toLowerCase()) return null;\n      }\n\n      var mobxChecker;\n\n      switch (mobxType) {\n        case \"Array\":\n          mobxChecker = isObservableArray;\n          break;\n\n        case \"Object\":\n          mobxChecker = isObservableObject;\n          break;\n\n        case \"Map\":\n          mobxChecker = isObservableMap;\n          break;\n\n        default:\n          throw new Error(\"Unexpected mobxType: \" + mobxType);\n      }\n\n      var propValue = props[propName];\n\n      if (!mobxChecker(propValue)) {\n        var preciseType = getPreciseType(propValue);\n        var nativeTypeExpectationMessage = allowNativeType ? \" or javascript `\" + mobxType.toLowerCase() + \"`\" : \"\";\n        return new Error(\"Invalid prop `\" + propFullName + \"` of type `\" + preciseType + \"` supplied to\" + \" `\" + componentName + \"`, expected `mobx.Observable\" + mobxType + \"`\" + nativeTypeExpectationMessage + \".\");\n      }\n\n      return null;\n    });\n  });\n}\n\nfunction createObservableArrayOfTypeChecker(allowNativeType, typeChecker) {\n  return createChainableTypeChecker(function (props, propName, componentName, location, propFullName) {\n    for (var _len2 = arguments.length, rest = new Array(_len2 > 5 ? _len2 - 5 : 0), _key2 = 5; _key2 < _len2; _key2++) {\n      rest[_key2 - 5] = arguments[_key2];\n    }\n\n    return untracked(function () {\n      if (typeof typeChecker !== \"function\") {\n        return new Error(\"Property `\" + propFullName + \"` of component `\" + componentName + \"` has \" + \"invalid PropType notation.\");\n      } else {\n        var error = createObservableTypeCheckerCreator(allowNativeType, \"Array\")(props, propName, componentName, location, propFullName);\n        if (error instanceof Error) return error;\n        var propValue = props[propName];\n\n        for (var i = 0; i < propValue.length; i++) {\n          error = typeChecker.apply(void 0, [propValue, i, componentName, location, propFullName + \"[\" + i + \"]\"].concat(rest));\n          if (error instanceof Error) return error;\n        }\n\n        return null;\n      }\n    });\n  });\n}\n\nvar observableArray = /*#__PURE__*/createObservableTypeCheckerCreator(false, \"Array\");\nvar observableArrayOf = /*#__PURE__*/createObservableArrayOfTypeChecker.bind(null, false);\nvar observableMap = /*#__PURE__*/createObservableTypeCheckerCreator(false, \"Map\");\nvar observableObject = /*#__PURE__*/createObservableTypeCheckerCreator(false, \"Object\");\nvar arrayOrObservableArray = /*#__PURE__*/createObservableTypeCheckerCreator(true, \"Array\");\nvar arrayOrObservableArrayOf = /*#__PURE__*/createObservableArrayOfTypeChecker.bind(null, true);\nvar objectOrObservableObject = /*#__PURE__*/createObservableTypeCheckerCreator(true, \"Object\");\nvar PropTypes = {\n  observableArray: observableArray,\n  observableArrayOf: observableArrayOf,\n  observableMap: observableMap,\n  observableObject: observableObject,\n  arrayOrObservableArray: arrayOrObservableArray,\n  arrayOrObservableArrayOf: arrayOrObservableArrayOf,\n  objectOrObservableObject: objectOrObservableObject\n};\n\nif (!Component) throw new Error(\"mobx-react requires React to be available\");\nif (!observable) throw new Error(\"mobx-react requires mobx to be available\");\n\nexport { MobXProviderContext, PropTypes, Provider, disposeOnUnmount, inject, observer };\n//# sourceMappingURL=mobxreact.esm.js.map\n","import { EntityName } from \"@ourworldindata/types\"\nimport { action, computed, makeObservable, observable } from \"mobx\"\n\nexport class SelectionArray {\n    private readonly store: Set<EntityName> = new Set()\n\n    constructor(selectedEntityNames: EntityName[] = []) {\n        makeObservable<SelectionArray, \"store\">(this, { store: observable })\n\n        for (const name of selectedEntityNames) {\n            this.store.add(name)\n        }\n    }\n\n    @computed get selectedEntityNames(): EntityName[] {\n        return [...this.store]\n    }\n\n    @computed get hasSelection(): boolean {\n        return this.numSelectedEntities > 0\n    }\n\n    @computed get isEmpty(): boolean {\n        return this.store.size === 0\n    }\n\n    has(entityName: EntityName): boolean {\n        return this.store.has(entityName)\n    }\n\n    @computed get numSelectedEntities(): number {\n        return this.store.size\n    }\n\n    @computed get selectedSet(): Set<EntityName> {\n        return new Set(this.store)\n    }\n\n    // Clears and sets selected entities\n    @action.bound setSelectedEntities(entityNames: EntityName[]): this {\n        this.clearSelection()\n        return this.addToSelection(entityNames)\n    }\n\n    @action.bound addToSelection(entityNames: EntityName[]): this {\n        for (const name of entityNames) this.selectEntity(name)\n        return this\n    }\n\n    @action.bound clearSelection(): void {\n        this.store.clear()\n    }\n\n    @action.bound toggleSelection(entityName: EntityName): this {\n        return this.store.has(entityName)\n            ? this.deselectEntity(entityName)\n            : this.selectEntity(entityName)\n    }\n\n    @action.bound selectEntity(entityName: EntityName): this {\n        this.store.add(entityName)\n        return this\n    }\n\n    @action.bound deselectEntity(entityName: EntityName): this {\n        this.store.delete(entityName)\n        return this\n    }\n\n    @action.bound selectEntities(entityNames: EntityName[]): this {\n        for (const name of entityNames) this.selectEntity(name)\n        return this\n    }\n\n    @action.bound deselectEntities(entityNames: EntityName[]): this {\n        for (const name of entityNames) this.deselectEntity(name)\n        return this\n    }\n}\n","/**\n * Previously when we get a blank for a value, or a string where we expect a number, etc,\n * we parse things as simply undefineds or nulls or NaN. Since authors are uploading data\n * from our sources at runtime, and errors in source data are extremely common, it may be helpful\n * to parse those invalid values into specific types, to provide better error message and perhaps\n * in the future suggested autocorrections or workarounds.\n *\n * For a good read on the \"Errors are values\" pattern: https://blog.golang.org/errors-are-values\n */\n\nimport { ErrorValue } from \"@ourworldindata/types\"\n\nclass NaNButShouldBeNumber extends ErrorValue {}\nexport class DroppedForTesting extends ErrorValue {}\nclass InvalidOnALogScale extends ErrorValue {}\nclass UndefinedButShouldBeNumber extends ErrorValue {}\nclass NullButShouldBeNumber extends ErrorValue {}\nclass BlankButShouldBeNumber extends ErrorValue {}\nclass UndefinedButShouldBeString extends ErrorValue {}\nclass NullButShouldBeString extends ErrorValue {}\nclass NotAParseableNumberButShouldBeNumber extends ErrorValue {}\nexport class DivideByZeroError extends ErrorValue {}\nclass NoValueWithinTolerance extends ErrorValue {}\nclass NoMatchingValueAfterJoin extends ErrorValue {}\nexport class ValueTooLow extends ErrorValue {}\nclass NoValueToCompareAgainst extends ErrorValue {}\nclass FilteredValue extends ErrorValue {}\nclass NoValueForInterpolation extends ErrorValue {}\nclass InvalidNegativeValue extends ErrorValue {}\nclass NoMatchingVariableId extends ErrorValue {}\n\n// todo: if we don't export this, get an error in Transforms. should be fixable, see: https://github.com/microsoft/TypeScript/issues/5711\nexport class MissingValuePlaceholder extends ErrorValue {}\n\nexport const ErrorValueTypes = {\n    NaNButShouldBeNumber: new NaNButShouldBeNumber(),\n    DroppedForTesting: new DroppedForTesting(),\n    InvalidOnALogScale: new InvalidOnALogScale(),\n    UndefinedButShouldBeNumber: new UndefinedButShouldBeNumber(),\n    NullButShouldBeNumber: new NullButShouldBeNumber(),\n    BlankButShouldBeNumber: new BlankButShouldBeNumber(),\n    UndefinedButShouldBeString: new UndefinedButShouldBeString(),\n    NullButShouldBeString: new NullButShouldBeString(),\n    MissingValuePlaceholder: new MissingValuePlaceholder(),\n    NotAParseableNumberButShouldBeNumber:\n        new NotAParseableNumberButShouldBeNumber(),\n    DivideByZeroError: new DivideByZeroError(),\n    NoValueWithinTolerance: new NoValueWithinTolerance(),\n    NoMatchingValueAfterJoin: new NoMatchingValueAfterJoin(),\n    ValueTooLow: new ValueTooLow(),\n    NoValueToCompareAgainst: new NoValueToCompareAgainst(),\n    FilteredValue: new FilteredValue(),\n    NoValueForInterpolation: new NoValueForInterpolation(),\n    InvalidNegativeValue: new InvalidNegativeValue(),\n    NoMatchingVariableId: new NoMatchingVariableId(),\n}\n\n// https://github.com/robertmassaioli/ts-is-present\n// A predicate for filtering an array of valid and error values that returns the correct type\nexport const isNotErrorValue = <TYPE>(item: TYPE | ErrorValue): item is TYPE =>\n    !(item instanceof ErrorValue)\n\nexport const isNotErrorValueOrEmptyCell = <K>(\n    value: K\n): value is Exclude<K, ErrorValue | undefined> =>\n    value !== undefined && isNotErrorValue(value)\n\nexport const defaultIfErrorValue = <TYPE>(\n    item: TYPE | ErrorValue,\n    defaultValue?: TYPE\n): TYPE | undefined => (isNotErrorValue(item) ? item : defaultValue)\n","import {\n    ColumnSlug,\n    ColumnTypeNames,\n    CoreColumnDef,\n    OwidColumnDef,\n    OwidTableSlugs,\n} from \"@ourworldindata/types\"\nimport { getTimeInterval, isSubYearly } from \"@ourworldindata/utils\"\nimport { CoreTable } from \"./CoreTable.js\"\n\nexport function timeColumnSlugFromColumnDef(\n    def: OwidColumnDef\n): OwidTableSlugs.Day | OwidTableSlugs.Year {\n    // Day-encoded (sub-yearly) time lands in the day bucket,\n    // everything else in the year bucket\n    return isSubYearly(getTimeInterval(def.display))\n        ? OwidTableSlugs.Day\n        : OwidTableSlugs.Year\n}\n\nexport function makeOriginalTimeSlugFromColumnSlug(slug: ColumnSlug): string {\n    return `${slug}-originalTime`\n}\n\nexport function makeOriginalStartTimeSlugFromColumnSlug(\n    slug: ColumnSlug\n): string {\n    return `${slug}-originalStartTime`\n}\n\nexport function makeOriginalValueSlugFromColumnSlug(slug: ColumnSlug): string {\n    return `${slug}-originalValue`\n}\n\nexport const makeAnnotationsSlug = (columnSlug: string): string =>\n    `${columnSlug}-annotations`\n\nexport function getOriginalTimeColumnSlug(\n    table: CoreTable,\n    slug: ColumnSlug\n): ColumnSlug {\n    const originalTimeSlug = makeOriginalTimeSlugFromColumnSlug(slug)\n    if (table.has(originalTimeSlug)) return originalTimeSlug\n    return table.timeColumn.slug\n}\n\nexport function getOriginalStartTimeColumnSlug(\n    table: CoreTable,\n    slug: ColumnSlug\n): ColumnSlug {\n    const originalStartTimeSlug = makeOriginalStartTimeSlugFromColumnSlug(slug)\n    if (table.has(originalStartTimeSlug)) return originalStartTimeSlug\n    return table.timeColumn.slug\n}\n\nexport function getOriginalValueColumnSlug(\n    table: CoreTable,\n    slug: ColumnSlug\n): ColumnSlug | undefined {\n    const originalValueSlug = makeOriginalValueSlugFromColumnSlug(slug)\n    if (table.has(originalValueSlug)) return originalValueSlug\n    return undefined\n}\n\nexport function toPercentageColumnDef(\n    columnDef: CoreColumnDef,\n    type = ColumnTypeNames.Percentage\n): CoreColumnDef {\n    // Drops all values that can hinder the correct display of a percentage column\n    // (e.g. a \"kWh\" unit or a numDecimalPlaces value of 0)\n    return {\n        ...columnDef,\n        type,\n        unit: undefined,\n        shortUnit: undefined,\n        display: {\n            ...columnDef.display,\n            unit: undefined,\n            shortUnit: undefined,\n            roundingMode: undefined,\n            numDecimalPlaces: undefined,\n            conversionFactor: undefined,\n        },\n    }\n}\n","import * as _ from \"lodash-es\"\nimport {\n    anyToString,\n    csvEscape,\n    formatYear,\n    formatDay,\n    convertDaysSinceEpochToDate,\n    convertDateToDaysSinceEpoch,\n    plainUtcTimestamp,\n    withUniformSpacing,\n    sortNumeric,\n    omitUndefinedValues,\n    isPresent,\n    dayjs,\n    OwidSource,\n    formatValue,\n    checkIsVeryShortUnit,\n    TickFormattingOptions,\n    OwidVariableDisplayConfigInterface,\n    ColumnSlug,\n    PrimitiveType,\n    imemo,\n    ToleranceStrategy,\n    IndicatorTitleWithFragments,\n    stripOuterParentheses,\n    getTimeInterval,\n} from \"@ourworldindata/utils\"\nimport { CoreTable } from \"./CoreTable.js\"\nimport type { OwidTable } from \"./OwidTable.js\"\nimport {\n    Time,\n    JsTypes,\n    CoreValueType,\n    ColumnTypeNames,\n    CoreColumnDef,\n    OwidColumnDef,\n    EntityName,\n    OwidVariableRow,\n    ErrorValue,\n    OwidVariableRoundingMode,\n    TimeInterval,\n} from \"@ourworldindata/types\"\nimport { ErrorValueTypes, isNotErrorValue } from \"./ErrorValues.js\"\nimport {\n    getOriginalStartTimeColumnSlug,\n    getOriginalTimeColumnSlug,\n    getOriginalValueColumnSlug,\n} from \"./OwidTableUtil.js\"\nimport * as R from \"remeda\"\n\nexport abstract class AbstractCoreColumn<\n    JS_TYPE extends PrimitiveType,\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> {\n    def: DEF_TYPE\n    table: TABLE_TYPE\n\n    constructor(table: TABLE_TYPE, def: DEF_TYPE) {\n        this.table = table\n        this.def = def\n    }\n\n    abstract jsType: JsTypes\n\n    parse(val: unknown): any {\n        return val\n    }\n\n    /** Type guard to check if this column belongs to an OwidTable */\n    private isOwidColumn(): this is AbstractCoreColumn<\n        JS_TYPE,\n        OwidTable,\n        OwidColumnDef\n    > {\n        return this.table.isOwidTable()\n    }\n\n    @imemo get isMissing(): boolean {\n        return this instanceof MissingColumn\n    }\n\n    @imemo get isTimeColumn(): boolean {\n        return this instanceof TimeColumn\n    }\n\n    @imemo get hasNumberFormatting(): boolean {\n        return this instanceof AbstractColumnWithNumberFormatting\n    }\n\n    // todo: migrate from unitConversionFactor to computed columns instead. then delete this.\n    // note: unitConversionFactor is used >400 times in charts and >800 times in variables!!!\n    @imemo get unitConversionFactor(): number {\n        return this.display?.conversionFactor ?? 1\n    }\n\n    @imemo get isAllIntegers(): boolean {\n        return false\n    }\n\n    @imemo get tolerance(): number {\n        return this.display?.tolerance ?? this.def.tolerance ?? 0\n    }\n\n    @imemo get toleranceStrategy(): ToleranceStrategy | undefined {\n        return this.def.toleranceStrategy\n    }\n\n    @imemo get display(): OwidVariableDisplayConfigInterface | undefined {\n        return this.def.display\n    }\n\n    @imemo get timeInterval(): TimeInterval {\n        return getTimeInterval(this.display)\n    }\n\n    abstract formatValue(\n        value: unknown,\n        options?: TickFormattingOptions\n    ): string\n\n    formatValueShortWithAbbreviations(\n        value: unknown,\n        options?: TickFormattingOptions\n    ): string {\n        return this.formatValue(value, options)\n    }\n\n    formatValueShort(value: unknown, options?: TickFormattingOptions): string {\n        return this.formatValue(value, options)\n    }\n\n    formatValueLong(value: unknown, options?: TickFormattingOptions): string {\n        return this.formatValue(value, options)\n    }\n\n    formatForTick(value: unknown, options?: TickFormattingOptions): string {\n        return this.formatValueShort(value, options)\n    }\n\n    // A method for formatting for CSV\n    formatForCsv(value: JS_TYPE): string {\n        return csvEscape(anyToString(value))\n    }\n\n    formatTime(time: number): string {\n        return this.originalTimeColumn.formatValue(time)\n    }\n\n    formatTimeShort(time: number): string {\n        return this.formatTime(time)\n    }\n\n    /** Where the period a time value stands for ends, formatted short */\n    formatTimeShortEnd(time: number): string {\n        return this.formatTimeShort(time)\n    }\n\n    /** Formats a start/end time pair */\n    formatTimeRange(startTime: number, endTime: number): string {\n        return `${this.formatTime(startTime)} to ${this.formatTime(endTime)}`\n    }\n\n    /** Formats a start/end time pair as a comparison of two time points */\n    formatTimeComparison(startTime: number, endTime: number): string {\n        return `${this.formatTime(startTime)} vs. ${this.formatTime(endTime)}`\n    }\n\n    @imemo get roundingMode(): OwidVariableRoundingMode {\n        return (\n            this.display?.roundingMode ?? OwidVariableRoundingMode.decimalPlaces\n        )\n    }\n\n    @imemo get roundsToFixedDecimals(): boolean {\n        return this.roundingMode === OwidVariableRoundingMode.decimalPlaces\n    }\n\n    @imemo get roundsToSignificantFigures(): boolean {\n        return this.roundingMode === OwidVariableRoundingMode.significantFigures\n    }\n\n    @imemo get numDecimalPlaces(): number {\n        return this.display?.numDecimalPlaces ?? 2\n    }\n\n    @imemo get numSignificantFigures(): number {\n        return this.display?.numSignificantFigures ?? 3\n    }\n\n    @imemo get unit(): string | undefined {\n        const unit = this.display?.unit ?? this.def.unit\n        return unit?.trim()\n    }\n\n    @imemo get shortUnit(): string | undefined {\n        const shortUnit =\n            this.display?.shortUnit ?? this.def.shortUnit ?? undefined\n        if (shortUnit !== undefined) return shortUnit\n\n        const unit = this.unit\n\n        if (!unit) return undefined\n\n        if (unit.length < 3) return unit\n        if (checkIsVeryShortUnit(unit[0])) return unit[0]\n\n        return undefined\n    }\n\n    /**\n     * Returns the full unit string for display, but only if it is different from the shortUnit.\n     * This avoids redundant display of units when the short and full units are the same.\n     * Also strips parentheses from the beginning and end of the unit.\n     */\n    @imemo get displayUnit(): string | undefined {\n        // The unit is considered trivial if it is the same as the short unit\n        const tooTrivial = this.unit === this.shortUnit\n        const displayUnit = !tooTrivial ? this.unit : undefined\n\n        // Remove parentheses from the beginning and end of the unit\n        const strippedUnit = displayUnit\n            ? stripOuterParentheses(displayUnit)\n            : undefined\n\n        return strippedUnit\n    }\n\n    // Returns a map where the key is a series slug such as \"name\" and the value is a set\n    // of all the unique values that this column has for that particular series.\n    getUniqueValuesGroupedBy(\n        indexColumnSlug: ColumnSlug\n    ): Map<PrimitiveType, Set<PrimitiveType>> {\n        const map = new Map<PrimitiveType, Set<PrimitiveType>>()\n        const values = this.values\n        const indexValues = this.table.getValuesAtIndices(\n            indexColumnSlug,\n            this.validRowIndices\n        ) as PrimitiveType[]\n        indexValues.forEach((indexVal, index) => {\n            if (!map.has(indexVal)) map.set(indexVal, new Set())\n            map.get(indexVal)!.add(values[index])\n        })\n        return map\n    }\n\n    @imemo get description(): string | undefined {\n        return this.def.description\n    }\n\n    @imemo get isEmpty(): boolean {\n        return this.valuesIncludingErrorValues.length === 0\n    }\n\n    @imemo get name(): string {\n        return this.def.name ?? this.def.slug\n    }\n\n    @imemo get nonEmptyName(): string {\n        return this.def.name || this.def.slug\n    }\n\n    @imemo get displayName(): string {\n        return (\n            this.display?.name ??\n            // this is a bit of an unusual fallback - if display.name is not given, titlePublic is the next best thing before name\n            this.def.presentation?.titlePublic ??\n            this.name ??\n            \"\"\n        )\n    }\n\n    @imemo get nonEmptyDisplayName(): string {\n        return (\n            this.display?.name ||\n            // this is a bit of an unusual fallback - if display.name is not given, titlePublic is the next best thing before name\n            this.def.presentation?.titlePublic ||\n            this.nonEmptyName\n        )\n    }\n\n    @imemo get titlePublicOrDisplayName(): IndicatorTitleWithFragments {\n        return this.def.presentation?.titlePublic\n            ? {\n                  title: this.def.presentation?.titlePublic,\n                  attributionShort: this.def.presentation?.attributionShort,\n                  titleVariant: this.def.presentation?.titleVariant,\n              }\n            : { title: this.display?.name || this.name || \"\" }\n    }\n\n    @imemo get datasetId(): number | undefined {\n        return this.def.datasetId\n    }\n\n    @imemo get datasetName(): string | undefined {\n        return this.def.datasetName\n    }\n\n    // todo: is the isString necessary?\n    @imemo get sortedUniqNonEmptyStringVals(): JS_TYPE[] {\n        return Array.from(\n            new Set(this.values.filter(R.isString).filter((i) => i))\n        ).sort()\n    }\n\n    @imemo get slug(): string {\n        return this.def.slug\n    }\n\n    @imemo get valuesToIndices(): Map<any, number[]> {\n        const map = new Map<any, number[]>()\n        this.valuesIncludingErrorValues.forEach((value, index) => {\n            if (!map.has(value)) map.set(value, [])\n            map.get(value)!.push(index)\n        })\n        return map\n    }\n\n    indicesWhere(value: JS_TYPE | JS_TYPE[]): any {\n        const queries = Array.isArray(value) ? value : [value]\n        return _.union(\n            ...queries\n                .map((val) => this.valuesToIndices.get(val))\n                .filter(isPresent)\n        )\n    }\n\n    // We approximate whether a column is parsed simply by looking at the first row.\n    needsParsing(value: unknown): boolean {\n        // Skip parsing if explicit flag is set\n        if (this.def.skipParsing) return false\n\n        // Never parse computeds. The computed should return the correct JS type. Ideally we can provide some error messaging around this.\n        if (this.def.transform) return false\n\n        // If we already tried to parse it and failed we consider it \"parsed\"\n        if (value instanceof ErrorValue) return false\n\n        // If the passed value is of the correct type consider the column parsed.\n        if (typeof value === this.jsType) return false\n        return true\n    }\n\n    @imemo get isProjection(): boolean {\n        return !!this.display?.isProjection\n    }\n\n    @imemo get uniqValues(): JS_TYPE[] {\n        const set = this.uniqValuesAsSet\n\n        // Turn into array, faster than spread operator\n        const arr = new Array(set.size)\n        let i = 0\n        set.forEach((val) => (arr[i++] = val))\n        return arr\n    }\n\n    @imemo get uniqValuesAsSet(): Set<JS_TYPE> {\n        return new Set(this.values)\n    }\n\n    /**\n     * Returns all values including ErrorValues..\n     * Normally you want just the valid values, like `[45000, 50000, ...]`. But sometimes you\n     * need the ErrorValues too like `[45000, DivideByZeroError, 50000,...]`\n     */\n    @imemo get valuesIncludingErrorValues(): CoreValueType[] {\n        const { table, slug } = this\n        return table.has(slug) ? table.columnStore[slug] : []\n    }\n\n    @imemo get validRowIndices(): number[] {\n        const indices: number[] = []\n        for (let i = 0; i < this.valuesIncludingErrorValues.length; i++) {\n            const value = this.valuesIncludingErrorValues[i]\n            if (isNotErrorValue(value)) indices.push(i)\n        }\n        return indices\n    }\n\n    @imemo get values(): JS_TYPE[] {\n        const values: JS_TYPE[] = []\n\n        // eslint-disable-next-line @typescript-eslint/prefer-for-of\n        for (let i = 0; i < this.valuesIncludingErrorValues.length; i++) {\n            const value = this.valuesIncludingErrorValues[i]\n            if (isNotErrorValue(value)) values.push(value as JS_TYPE)\n        }\n        return values\n    }\n\n    @imemo get originalTimeColumnSlug(): string {\n        return getOriginalTimeColumnSlug(this.table, this.slug)\n    }\n\n    @imemo get originalTimeColumn(): CoreColumn {\n        return this.table.get(this.originalTimeColumnSlug)\n    }\n\n    @imemo get originalStartTimeColumnSlug(): string {\n        return getOriginalStartTimeColumnSlug(this.table, this.slug)\n    }\n\n    @imemo get originalStartTimeColumn(): CoreColumn {\n        return this.table.get(this.originalStartTimeColumnSlug)\n    }\n\n    @imemo get originalTimes(): number[] {\n        const { originalTimeColumnSlug } = this\n        if (!originalTimeColumnSlug) return []\n        return this.table.getValuesAtIndices(\n            originalTimeColumnSlug,\n            this.validRowIndices\n        ) as number[]\n    }\n\n    @imemo get originalValueColumnSlug(): string | undefined {\n        return getOriginalValueColumnSlug(this.table, this.slug)\n    }\n\n    @imemo get originalValues(): JS_TYPE[] {\n        const { originalValueColumnSlug } = this\n        if (!originalValueColumnSlug) return []\n        return this.table.getValuesAtIndices(\n            originalValueColumnSlug,\n            this.validRowIndices\n        ) as JS_TYPE[]\n    }\n\n    @imemo get minValue(): JS_TYPE | undefined {\n        return _.min(this.values)\n    }\n\n    @imemo get maxValue(): JS_TYPE | undefined {\n        return _.max(this.values)\n    }\n\n    @imemo get numErrorValues(): number {\n        return this.valuesIncludingErrorValues.length - this.numValues\n    }\n\n    // Number of correctly parsed values\n    @imemo get numValues(): number {\n        return this.values.length\n    }\n\n    @imemo get numUniqs(): number {\n        return this.uniqValuesAsSet.size\n    }\n\n    @imemo get valuesAscending(): JS_TYPE[] {\n        const values = this.values.slice()\n        return this.jsType === \"string\" ? values.sort() : sortNumeric(values)\n    }\n\n    get source(): OwidSource {\n        const { def } = this\n        return {\n            name: def.sourceName,\n            link: def.sourceLink,\n            dataPublishedBy: def.dataPublishedBy,\n            dataPublisherSource: def.dataPublisherSource,\n            retrievedDate: def.retrievedDate,\n            additionalInfo: def.additionalInfo,\n        }\n    }\n\n    @imemo private get allTimes(): Time[] {\n        return this.table.getTimesAtIndices(this.validRowIndices)\n    }\n\n    @imemo get uniqTimesAsc(): Time[] {\n        return sortNumeric(_.uniq(this.allTimes))\n    }\n\n    @imemo get maxTime(): Time {\n        return _.max(this.allTimes) as Time\n    }\n\n    @imemo get minTime(): Time {\n        return _.min(this.allTimes) as Time\n    }\n\n    @imemo get uniqEntityNames(): EntityName[] {\n        return _.uniq(this.allEntityNames)\n    }\n\n    @imemo private get allEntityNames(): EntityName[] {\n        // Type guard: early return if not OwidColumn\n        if (!this.isOwidColumn()) return []\n\n        return this.table.getValuesAtIndices(\n            this.table.entityNameSlug,\n            this.validRowIndices\n        ) as EntityName[]\n    }\n\n    // Assumes table is sorted by time\n    @imemo get owidRows(): OwidVariableRow<JS_TYPE>[] {\n        const entities = this.allEntityNames\n        const times = this.allTimes\n        const values = this.values\n        const originalTimes = this.originalTimes\n        const originalValues = this.originalValues\n        return _.range(0, originalTimes.length).map((index) => {\n            return omitUndefinedValues({\n                entityName: entities[index],\n                time: times[index],\n                value: values[index],\n                originalTime: originalTimes[index],\n                originalValue: originalValues[index],\n            })\n        })\n    }\n\n    @imemo get owidRowsByEntityName(): Map<\n        EntityName,\n        OwidVariableRow<JS_TYPE>[]\n    > {\n        return Map.groupBy(this.owidRows, (row) => row.entityName)\n    }\n\n    @imemo get owidRowByEntityNameAndTime(): Map<\n        EntityName,\n        Map<Time, OwidVariableRow<JS_TYPE>>\n    > {\n        const valueByEntityNameAndTime = new Map<\n            EntityName,\n            Map<Time, OwidVariableRow<JS_TYPE>>\n        >()\n        this.owidRows.forEach((row) => {\n            if (!valueByEntityNameAndTime.has(row.entityName))\n                valueByEntityNameAndTime.set(row.entityName, new Map())\n            valueByEntityNameAndTime.get(row.entityName)!.set(row.time, row)\n        })\n        return valueByEntityNameAndTime\n    }\n\n    @imemo get valuesByTime(): Map<Time, JS_TYPE[]> {\n        const map = new Map<Time, JS_TYPE[]>()\n        this.owidRows.forEach((row) => {\n            if (!map.has(row.time)) map.set(row.time, [])\n            map.get(row.time)!.push(row.value)\n        })\n        return map\n    }\n\n    @imemo get valueByTimeAndEntityName(): Map<Time, Map<EntityName, JS_TYPE>> {\n        const valueByTimeAndEntityName = new Map<\n            Time,\n            Map<EntityName, JS_TYPE>\n        >()\n        this.owidRows.forEach((row) => {\n            if (!valueByTimeAndEntityName.has(row.time))\n                valueByTimeAndEntityName.set(row.time, new Map())\n            valueByTimeAndEntityName\n                .get(row.time)!\n                .set(row.entityName, row.value)\n        })\n        return valueByTimeAndEntityName\n    }\n\n    // NOTE: this uses the original times, so any tolerance is effectively unapplied.\n    @imemo get valueByEntityNameAndOriginalTime(): Map<\n        EntityName,\n        Map<Time, JS_TYPE>\n    > {\n        const valueByEntityNameAndTime = new Map<\n            EntityName,\n            Map<Time, JS_TYPE>\n        >()\n        this.owidRows.forEach((row) => {\n            if (!valueByEntityNameAndTime.has(row.entityName))\n                valueByEntityNameAndTime.set(row.entityName, new Map())\n            valueByEntityNameAndTime\n                .get(row.entityName)!\n                .set(row.originalTime, row.value)\n        })\n        return valueByEntityNameAndTime\n    }\n\n    // Not using owidRows for performance reasons\n    @imemo get latestValueByEntityName(): Map<EntityName, JS_TYPE> {\n        const map = new Map<EntityName, JS_TYPE>()\n\n        const entityNames = this.allEntityNames\n        const values = this.values\n\n        // The table is sorted by time, so later rows overwrite earlier ones,\n        // leaving each entity mapped to its latest value\n        for (let i = 0; i < values.length; i++) {\n            map.set(entityNames[i], values[i])\n        }\n\n        return map\n    }\n}\n\nexport type CoreColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> = AbstractCoreColumn<any, TABLE_TYPE, DEF_TYPE>\n\nexport class MissingColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends AbstractCoreColumn<any, TABLE_TYPE, DEF_TYPE> {\n    jsType = JsTypes.string\n\n    formatValue(): string {\n        return \"\"\n    }\n}\n\nclass StringColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends AbstractCoreColumn<string, TABLE_TYPE, DEF_TYPE> {\n    jsType = JsTypes.string\n\n    formatValue(value: unknown): string {\n        return anyToString(value)\n    }\n\n    override parse(val: unknown): any {\n        if (val === null) return ErrorValueTypes.NullButShouldBeString\n        if (val === undefined) return ErrorValueTypes.UndefinedButShouldBeString\n        return String(val) || \"\"\n    }\n}\n\nclass SeriesAnnotationColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends StringColumn<TABLE_TYPE, DEF_TYPE> {}\nclass CategoricalColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends StringColumn<TABLE_TYPE, DEF_TYPE> {}\n\nclass OrdinalColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends CategoricalColumn<TABLE_TYPE, DEF_TYPE> {\n    @imemo get allowedValuesSorted(): string[] | undefined {\n        return this.def.sort\n    }\n\n    @imemo override get sortedUniqNonEmptyStringVals(): string[] {\n        return this.allowedValuesSorted\n            ? this.allowedValuesSorted\n            : super.sortedUniqNonEmptyStringVals\n    }\n}\n\nclass RegionColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends OrdinalColumn<TABLE_TYPE, DEF_TYPE> {}\nclass ContinentColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends RegionColumn<TABLE_TYPE, DEF_TYPE> {}\nclass ColorColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends CategoricalColumn<TABLE_TYPE, DEF_TYPE> {}\n\nclass BooleanColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends AbstractCoreColumn<boolean, TABLE_TYPE, DEF_TYPE> {\n    jsType = JsTypes.boolean\n\n    formatValue(value: unknown): \"true\" | \"false\" {\n        return value ? \"true\" : \"false\"\n    }\n\n    override parse(val: unknown): boolean {\n        return !!val\n    }\n}\n\nabstract class AbstractColumnWithNumberFormatting<\n    T extends PrimitiveType,\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends AbstractCoreColumn<T, TABLE_TYPE, DEF_TYPE> {\n    jsType = JsTypes.number\n\n    formatValue(value: unknown, options?: TickFormattingOptions): string {\n        if (_.isNumber(value)) {\n            return formatValue(value, {\n                roundingMode: this.roundingMode,\n                numDecimalPlaces: this.numDecimalPlaces,\n                numSignificantFigures: this.numSignificantFigures,\n                ...options,\n            })\n        }\n        return \"\"\n    }\n\n    override formatValueShortWithAbbreviations(\n        value: unknown,\n        options?: TickFormattingOptions\n    ): string {\n        return super.formatValueShortWithAbbreviations(value, {\n            numberAbbreviation: \"short\",\n            // only include a unit if it's very short (e.g. %, $ or £)\n            ...omitUndefinedValues({\n                unit:\n                    this.shortUnit !== undefined &&\n                    checkIsVeryShortUnit(this.shortUnit)\n                        ? this.shortUnit\n                        : undefined,\n            }),\n            ...options,\n        })\n    }\n\n    override formatValueShort(\n        value: unknown,\n        options?: TickFormattingOptions\n    ): string {\n        return super.formatValueShort(value, {\n            ...omitUndefinedValues({\n                unit: this.shortUnit,\n            }),\n            ...options,\n        })\n    }\n\n    override formatValueLong(\n        value: unknown,\n        options?: TickFormattingOptions\n    ): string {\n        return super.formatValueLong(value, {\n            ...omitUndefinedValues({\n                unit: this.unit,\n            }),\n            ...options,\n        })\n    }\n\n    @imemo override get isAllIntegers(): boolean {\n        return this.values.every(\n            (val) => typeof val === \"number\" && val % 1 === 0\n        )\n    }\n}\n\n/**\n * We strive to have clearly typed variables in the future, but for now our\n * grapher variables are still untyped. Most are number-only, but we also have some\n * string-only, and even some mixed ones.\n * Hence, NumberOrStringColumn is used to store grapher variables.\n * It extends AbstractColumnWithNumberFormatting, which ensures that we have\n * implementations of formatValueShortWithAbbreviations and the like already.\n * -- @marcelgerber, 2022-07-01\n */\nclass NumberOrStringColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends AbstractColumnWithNumberFormatting<\n    number | string,\n    TABLE_TYPE,\n    DEF_TYPE\n> {\n    override formatValue(\n        value: unknown,\n        options?: TickFormattingOptions\n    ): string {\n        if (_.isNumber(value)) {\n            return super.formatValue(value, options)\n        }\n        return anyToString(value)\n    }\n    override parse(val: unknown): number | string | ErrorValue {\n        if (val === null) return ErrorValueTypes.NullButShouldBeNumber\n        if (val === undefined) return ErrorValueTypes.UndefinedButShouldBeNumber\n        if (Number.isNaN(val)) return ErrorValueTypes.NaNButShouldBeNumber\n\n        const valAsString = String(val)\n        const num = parseFloat(valAsString)\n        if (Number.isNaN(num)) return valAsString // return string value\n\n        return num\n    }\n}\n\nabstract class AbstractNumericColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends AbstractColumnWithNumberFormatting<number, TABLE_TYPE, DEF_TYPE> {\n    override parse(val: unknown): number | ErrorValue {\n        if (val === null) return ErrorValueTypes.NullButShouldBeNumber\n        if (val === undefined) return ErrorValueTypes.UndefinedButShouldBeNumber\n        if (val === \"\") return ErrorValueTypes.BlankButShouldBeNumber\n        if (isNaN(Number(val))) return ErrorValueTypes.NaNButShouldBeNumber\n\n        const res = this._parse(val)\n        if (isNaN(res))\n            return ErrorValueTypes.NotAParseableNumberButShouldBeNumber\n\n        return res\n    }\n\n    protected _parse(val: unknown): number {\n        return parseFloat(String(val))\n    }\n}\n\nclass NumericColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends AbstractNumericColumn<TABLE_TYPE, DEF_TYPE> {}\nclass NumericCategoricalColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends AbstractNumericColumn<TABLE_TYPE, DEF_TYPE> {}\n\nclass IntegerColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends NumericColumn<TABLE_TYPE, DEF_TYPE> {\n    override formatValue(\n        value: unknown,\n        options?: TickFormattingOptions\n    ): string {\n        return super.formatValue(value, {\n            numDecimalPlaces: 0,\n            ...options,\n        })\n    }\n\n    protected override _parse(val: unknown): number {\n        return parseInt(String(val))\n    }\n}\n\nclass CurrencyColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends NumericColumn<TABLE_TYPE, DEF_TYPE> {\n    override formatValue(\n        value: unknown,\n        options?: TickFormattingOptions\n    ): string {\n        return super.formatValue(value, {\n            roundingMode: OwidVariableRoundingMode.decimalPlaces,\n            numDecimalPlaces: 0,\n            unit: this.shortUnit,\n            ...options,\n        })\n    }\n\n    @imemo override get shortUnit(): string {\n        return \"$\"\n    }\n}\n\n// Expects 50% to be 50\nclass PercentageColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends NumericColumn<TABLE_TYPE, DEF_TYPE> {\n    override formatValue(\n        value: number,\n        options?: TickFormattingOptions\n    ): string {\n        return super.formatValue(value, {\n            unit: this.shortUnit,\n            numDecimalPlaces: 1,\n            ...options,\n        })\n    }\n\n    @imemo override get shortUnit(): string {\n        return \"%\"\n    }\n}\n\n// Same as %, but indicates it's part of a group of columns that add up to 100%.\n// Might not need this.\nclass RelativePercentageColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends PercentageColumn<TABLE_TYPE, DEF_TYPE> {}\n\nclass PercentChangeOverTimeColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends PercentageColumn<TABLE_TYPE, DEF_TYPE> {\n    override formatValue(\n        value: number,\n        options?: TickFormattingOptions\n    ): string {\n        return super.formatValue(value, {\n            showPlus: true,\n            ...options,\n        })\n    }\n}\n\nclass DecimalPercentageColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends PercentageColumn<TABLE_TYPE, DEF_TYPE> {}\nclass RatioColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends NumericColumn<TABLE_TYPE, DEF_TYPE> {}\n\n// todo: remove. should not be in coretable\nclass EntityIdColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends NumericCategoricalColumn<TABLE_TYPE, DEF_TYPE> {}\nclass EntityCodeColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends CategoricalColumn<TABLE_TYPE, DEF_TYPE> {}\nclass EntityNameColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends CategoricalColumn<TABLE_TYPE, DEF_TYPE> {}\n\n// todo: cleanup time columns. current schema is a little incorrect.\nexport abstract class TimeColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends AbstractCoreColumn<number, TABLE_TYPE, DEF_TYPE> {\n    jsType = JsTypes.number\n\n    /** The word placed before a formatted time, e.g. \"in\" or \"on\" */\n    abstract preposition: string\n\n    /** Human-readable name of the time interval, e.g. \"Year\" or \"Month\" */\n    abstract intervalName: string\n\n    /** The length of one period, in the column's unit of time */\n    protected periodLength = 1\n\n    @imemo override get displayName(): string {\n        return _.capitalize(this.name)\n    }\n\n    override formatTime(time: number): string {\n        return this.formatValue(time)\n    }\n\n    override parse(val: unknown): number | ErrorValue {\n        return parseInt(String(val))\n    }\n\n    /**\n     * Given the sorted, de-duplicated times present in the data, returns them\n     * with gaps filled so that positions are uniformly spaced (one filler per\n     * missing step)\n     */\n    getUniformlySpacedTimes(sortedTimes: number[]): number[] {\n        return withUniformSpacing(sortedTimes)\n    }\n\n    /** The time `count` periods after `time` */\n    addPeriods(time: Time, count: number): Time {\n        return time + count * this.periodLength\n    }\n\n    /** The number of periods from `startTime` to `endTime`, both included */\n    countPeriods(startTime: Time, endTime: Time): number {\n        return Math.floor((endTime - startTime) / this.periodLength) + 1\n    }\n\n    /** Every time from `startTime` to `endTime`, one period apart */\n    getConsecutiveTimes(startTime: Time, endTime: Time): Time[] {\n        return R.range(0, this.countPeriods(startTime, endTime)).map((index) =>\n            this.addPeriods(startTime, index)\n        )\n    }\n}\n\nclass YearColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends TimeColumn<TABLE_TYPE, DEF_TYPE> {\n    intervalName = \"Year\"\n    preposition = \"in\"\n\n    override get timeInterval(): TimeInterval {\n        return TimeInterval.Year\n    }\n\n    formatValue(value: number): string {\n        // Include BCE\n        return formatYear(value)\n    }\n}\n\n// Formatting a day value goes through dayjs and is slow, and these formatters\n// run once per row in hot paths (CSV export, axis ticks, tooltips),\n// so we memoize per value\nconst memoFormatDay = _.memoize(\n    (value: number): string => formatDay(value) // \"Jan 21, 2020\"\n)\nconst memoFormatDayCsv = _.memoize(\n    (value: number): string => formatDay(value, { format: \"YYYY-MM-DD\" }) // \"2020-01-21\"\n)\nconst memoFormatMonth = _.memoize(\n    (value: number): string => formatDay(value, { format: \"MMM YYYY\" }) // \"Jan 2023\"\n)\nconst memoFormatMonthCsv = _.memoize(\n    (value: number): string => formatDay(value, { format: \"YYYY-MM\" }) // \"2023-01\"\n)\nconst memoFormatWeek = _.memoize((value: number): string => {\n    const monday = convertDaysSinceEpochToDate(value).startOf(\"isoWeek\")\n    return `Week of ${monday.format(\"MMM D, YYYY\")}` // \"Week of Jan 20, 2020\"\n})\nconst memoFormatWeekCsv = _.memoize((value: number): string => {\n    const date = convertDaysSinceEpochToDate(value)\n    const ww = String(date.isoWeek()).padStart(2, \"0\")\n    return `${date.isoWeekYear()}-W${ww}` // \"2023-W03\"\n})\nconst memoFormatQuarter = _.memoize((value: number): string => {\n    const date = convertDaysSinceEpochToDate(value)\n    return `Q${date.quarter()} ${date.year()}` // \"Q1 2023\"\n})\nconst memoFormatQuarterCsv = _.memoize((value: number): string => {\n    const date = convertDaysSinceEpochToDate(value)\n    return `${date.year()}-Q${date.quarter()}` // \"2023-Q1\"\n})\nconst memoParseDate = _.memoize((value: string): Time =>\n    convertDateToDaysSinceEpoch(dayjs.utc(value))\n)\n\nclass DayColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends TimeColumn<TABLE_TYPE, DEF_TYPE> {\n    intervalName = \"Day\"\n    preposition = \"on\"\n\n    override get timeInterval(): TimeInterval {\n        return TimeInterval.Day\n    }\n\n    formatValue(value: number): string {\n        return memoFormatDay(value)\n    }\n\n    override formatForCsv(value: number): string {\n        return memoFormatDayCsv(value)\n    }\n}\nclass DateColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends DayColumn<TABLE_TYPE, DEF_TYPE> {\n    override parse(val: unknown): number {\n        // skip parsing if a date is a number, it's already been parsed\n        if (typeof val === \"number\") return val\n        return memoParseDate(String(val))\n    }\n}\n\n/**\n * A sub-yearly column whose periods vary in length (months, quarters), so it\n * steps through the calendar instead of by a fixed `periodLength`.\n *\n * We don't use dayjs here because its `diff`, `add` and `startOf` are quite\n * slow, and we call these methods on many table rows in hot paths.\n */\nabstract class MonthBasedPeriodColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends DayColumn<TABLE_TYPE, DEF_TYPE> {\n    /** The number of calendar months in one period, e.g. 3 for quarters */\n    protected abstract monthsPerPeriod: number\n\n    /**\n     * Whole periods since January of year 0 (not EPOCH_DATE), so period\n     * boundaries fall on calendar boundaries. For example, Feb 2020 is month\n     * 2020 × 12 + 1 = 24241, or quarter ⌊24241 / 3⌋ = 8080 (Q1 2020).\n     */\n    private periodsSinceYearZero(time: Time): number {\n        const date = convertDaysSinceEpochToDate(time)\n        const monthsSinceYearZero = date.year() * 12 + date.month()\n        return Math.floor(monthsSinceYearZero / this.monthsPerPeriod)\n    }\n\n    private startOfPeriod(periodsSinceYearZero: number): Time {\n        const monthsSinceYearZero = periodsSinceYearZero * this.monthsPerPeriod\n        const year = Math.floor(monthsSinceYearZero / 12)\n        const month = monthsSinceYearZero - year * 12\n        const date = dayjs.utc(plainUtcTimestamp(year, month, 1))\n        return convertDateToDaysSinceEpoch(date)\n    }\n\n    override addPeriods(time: Time, count: number): Time {\n        return this.startOfPeriod(this.periodsSinceYearZero(time) + count)\n    }\n\n    override countPeriods(startTime: Time, endTime: Time): number {\n        return (\n            this.periodsSinceYearZero(endTime) -\n            this.periodsSinceYearZero(startTime) +\n            1\n        )\n    }\n\n    // custom implementation, so we don't need to run\n    // `periodsSinceYearZero(startTime)` over and over\n    override getConsecutiveTimes(startTime: Time, endTime: Time): Time[] {\n        const firstPeriod = this.periodsSinceYearZero(startTime)\n        const lastPeriod = this.periodsSinceYearZero(endTime)\n        return R.range(firstPeriod, lastPeriod + 1).map((period) =>\n            this.startOfPeriod(period)\n        )\n    }\n\n    override getUniformlySpacedTimes(sortedTimes: Time[]): Time[] {\n        const periods = new Set(\n            sortedTimes.map((time) => this.periodsSinceYearZero(time))\n        )\n        return withUniformSpacing([...periods]).map((period) =>\n            this.startOfPeriod(period)\n        )\n    }\n}\n\nclass MonthColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends MonthBasedPeriodColumn<TABLE_TYPE, DEF_TYPE> {\n    override intervalName = \"Month\"\n    override preposition = \"in\"\n    protected monthsPerPeriod = 1\n\n    override get timeInterval(): TimeInterval {\n        return TimeInterval.Month\n    }\n\n    override formatValue(value: number): string {\n        return memoFormatMonth(value) // \"Jan 2023\"\n    }\n\n    override formatForCsv(value: number): string {\n        return memoFormatMonthCsv(value) // \"2023-01\"\n    }\n}\n\n// A sub-yearly week column, storing days-since-epoch\n// (a representative day per week)\nclass WeekColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends DayColumn<TABLE_TYPE, DEF_TYPE> {\n    override intervalName = \"Week\"\n    override preposition = \"in\"\n    protected override periodLength = 7\n\n    override get timeInterval(): TimeInterval {\n        return TimeInterval.Week\n    }\n\n    override formatValue(value: number): string {\n        return memoFormatWeek(value) // \"Week of Jan 20, 2020\"\n    }\n\n    override formatForCsv(value: number): string {\n        return memoFormatWeekCsv(value) // \"2023-W03\"\n    }\n\n    // The plain week-start date (ISO-week Monday), e.g. \"Jun 1, 2026\"\n    override formatTimeShort(time: number): string {\n        const monday = convertDaysSinceEpochToDate(time).startOf(\"isoWeek\")\n        return monday.format(\"MMM D, YYYY\")\n    }\n\n    // The plain week-end date (ISO-week Sunday), e.g. \"Jun 7, 2026\"\n    override formatTimeShortEnd(time: number): string {\n        const sunday = convertDaysSinceEpochToDate(time).endOf(\"isoWeek\")\n        return sunday.format(\"MMM D, YYYY\")\n    }\n\n    // The span from the first day of the start week (ISO-week Monday) to the\n    // last day of the end week (Sunday), e.g. \"Jun 1, 2026 to Jul 12, 2026\".\n    override formatTimeRange(startTime: number, endTime: number): string {\n        return `${this.formatTimeShort(startTime)} to ${this.formatTimeShortEnd(endTime)}`\n    }\n}\n\n// A sub-yearly quarter column, storing days-since-epoch\n// (a representative day per quarter)\nclass QuarterColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends MonthBasedPeriodColumn<TABLE_TYPE, DEF_TYPE> {\n    override intervalName = \"Quarter\"\n    override preposition = \"in\"\n    protected monthsPerPeriod = 3\n\n    override get timeInterval(): TimeInterval {\n        return TimeInterval.Quarter\n    }\n\n    override formatValue(value: number): string {\n        return memoFormatQuarter(value) // \"Q1 2023\"\n    }\n\n    override formatForCsv(value: number): string {\n        return memoFormatQuarterCsv(value) // \"2023-Q1\"\n    }\n\n    // The quarter's start month, e.g. \"Jan 2026\"\n    override formatTimeShort(time: number): string {\n        return convertDaysSinceEpochToDate(time)\n            .startOf(\"quarter\")\n            .format(\"MMM YYYY\")\n    }\n\n    // The quarter's end month, e.g. \"Mar 2026\"\n    override formatTimeShortEnd(time: number): string {\n        return convertDaysSinceEpochToDate(time)\n            .endOf(\"quarter\")\n            .format(\"MMM YYYY\")\n    }\n\n    // The span from the first month of the start quarter to the last month of\n    // the end quarter, e.g. \"Jan 2025 to Dec 2026\"\n    override formatTimeRange(startTime: number, endTime: number): string {\n        return `${this.formatTimeShort(startTime)} to ${this.formatTimeShortEnd(endTime)}`\n    }\n}\n\n// A decade column, storing literal years (a representative year per decade)\nclass DecadeColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends YearColumn<TABLE_TYPE, DEF_TYPE> {\n    override intervalName = \"Decade\"\n    override preposition = \"in the\" // \"in the 2020s\"\n    protected override periodLength = 10\n\n    override get timeInterval(): TimeInterval {\n        return TimeInterval.Decade\n    }\n\n    // The first year of the decade the given year belongs to, e.g. 2025 → 2020\n    private static startOfDecade(year: number): number {\n        return Math.floor(year / 10) * 10\n    }\n\n    override formatValue(value: number): string {\n        const decade = DecadeColumn.startOfDecade(value)\n        return decade < 0 ? `${Math.abs(decade)}s BCE` : `${decade}s` // \"2020s\"\n    }\n\n    override formatForCsv(value: number): string {\n        return this.formatValue(value)\n    }\n}\n\nclass PopulationColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends IntegerColumn<TABLE_TYPE, DEF_TYPE> {}\nclass PopulationDensityColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends NumericColumn<TABLE_TYPE, DEF_TYPE> {}\n\nclass AgeColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends NumericColumn<TABLE_TYPE, DEF_TYPE> {}\n\nexport const ColumnTypeMap = {\n    String: StringColumn,\n    SeriesAnnotation: SeriesAnnotationColumn,\n    Categorical: CategoricalColumn,\n    Ordinal: OrdinalColumn,\n    Region: RegionColumn,\n    Continent: ContinentColumn,\n    NumberOrString: NumberOrStringColumn,\n    Numeric: NumericColumn,\n    Day: DayColumn,\n    Date: DateColumn,\n    Year: YearColumn,\n    Quarter: QuarterColumn,\n    Month: MonthColumn,\n    Week: WeekColumn,\n    Decade: DecadeColumn,\n    Time: TimeColumn,\n    Boolean: BooleanColumn,\n    Currency: CurrencyColumn,\n    Percentage: PercentageColumn,\n    RelativePercentage: RelativePercentageColumn,\n    Integer: IntegerColumn,\n    DecimalPercentage: DecimalPercentageColumn,\n    PercentChangeOverTime: PercentChangeOverTimeColumn,\n    Ratio: RatioColumn,\n    Color: ColorColumn,\n    EntityCode: EntityCodeColumn,\n    EntityId: EntityIdColumn,\n    EntityName: EntityNameColumn,\n    Population: PopulationColumn,\n    PopulationDensity: PopulationDensityColumn,\n    Age: AgeColumn,\n}\n\n// Keep this in. This is used as a compile-time check that ColumnTypeMap covers all\n// column names defined in ColumnTypeNames, since that is quite difficult to ensure\n// otherwise without losing inferred type information.\nColumnTypeMap satisfies { [key in ColumnTypeNames]: unknown }\n","/* @license\nPapa Parse\nv5.5.3\nhttps://github.com/mholt/PapaParse\nLicense: MIT\n*/\n((e,t)=>{\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof module&&\"undefined\"!=typeof exports?module.exports=t():e.Papa=t()})(this,function r(){var n=\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:void 0!==n?n:{};var d,s=!n.document&&!!n.postMessage,a=n.IS_PAPA_WORKER||!1,o={},h=0,v={};function u(e){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine=\"\",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},function(e){var t=b(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null);this._handle=new i(t),(this._handle.streamer=this)._config=t}.call(this,e),this.parseChunk=function(t,e){var i=parseInt(this._config.skipFirstNLines)||0;if(this.isFirstChunk&&0<i){let e=this._config.newline;e||(r=this._config.quoteChar||'\"',e=this._handle.guessLineEndings(t,r)),t=[...t.split(e).slice(i)].join(e)}this.isFirstChunk&&U(this._config.beforeFirstChunk)&&void 0!==(r=this._config.beforeFirstChunk(t))&&(t=r),this.isFirstChunk=!1,this._halted=!1;var i=this._partialLine+t,r=(this._partialLine=\"\",this._handle.parse(i,this._baseIndex,!this._finished));if(!this._handle.paused()&&!this._handle.aborted()){t=r.meta.cursor,i=(this._finished||(this._partialLine=i.substring(t-this._baseIndex),this._baseIndex=t),r&&r.data&&(this._rowCount+=r.data.length),this._finished||this._config.preview&&this._rowCount>=this._config.preview);if(a)n.postMessage({results:r,workerId:v.WORKER_ID,finished:i});else if(U(this._config.chunk)&&!e){if(this._config.chunk(r,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);this._completeResults=r=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(r.data),this._completeResults.errors=this._completeResults.errors.concat(r.errors),this._completeResults.meta=r.meta),this._completed||!i||!U(this._config.complete)||r&&r.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),i||r&&r.meta.paused||this._nextChunk(),r}this._halted=!0},this._sendError=function(e){U(this._config.error)?this._config.error(e):a&&this._config.error&&n.postMessage({workerId:v.WORKER_ID,error:e,finished:!1})}}function f(e){var r;(e=e||{}).chunkSize||(e.chunkSize=v.RemoteChunkSize),u.call(this,e),this._nextChunk=s?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(r=new XMLHttpRequest,this._config.withCredentials&&(r.withCredentials=this._config.withCredentials),s||(r.onload=y(this._chunkLoaded,this),r.onerror=y(this._chunkError,this)),r.open(this._config.downloadRequestBody?\"POST\":\"GET\",this._input,!s),this._config.downloadRequestHeaders){var e,t=this._config.downloadRequestHeaders;for(e in t)r.setRequestHeader(e,t[e])}var i;this._config.chunkSize&&(i=this._start+this._config.chunkSize-1,r.setRequestHeader(\"Range\",\"bytes=\"+this._start+\"-\"+i));try{r.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}s&&0===r.status&&this._chunkError()}},this._chunkLoaded=function(){4===r.readyState&&(r.status<200||400<=r.status?this._chunkError():(this._start+=this._config.chunkSize||r.responseText.length,this._finished=!this._config.chunkSize||this._start>=(e=>null!==(e=e.getResponseHeader(\"Content-Range\"))?parseInt(e.substring(e.lastIndexOf(\"/\")+1)):-1)(r),this.parseChunk(r.responseText)))},this._chunkError=function(e){e=r.statusText||e;this._sendError(new Error(e))}}function l(e){(e=e||{}).chunkSize||(e.chunkSize=v.LocalChunkSize),u.call(this,e);var i,r,n=\"undefined\"!=typeof FileReader;this.stream=function(e){this._input=e,r=e.slice||e.webkitSlice||e.mozSlice,n?((i=new FileReader).onload=y(this._chunkLoaded,this),i.onerror=y(this._chunkError,this)):i=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount<this._config.preview)||this._readChunk()},this._readChunk=function(){var e=this._input,t=(this._config.chunkSize&&(t=Math.min(this._start+this._config.chunkSize,this._input.size),e=r.call(e,this._start,t)),i.readAsText(e,this._config.encoding));n||this._chunkLoaded({target:{result:t}})},this._chunkLoaded=function(e){this._start+=this._config.chunkSize,this._finished=!this._config.chunkSize||this._start>=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(i.error)}}function c(e){var i;u.call(this,e=e||{}),this.stream=function(e){return i=e,this._nextChunk()},this._nextChunk=function(){var e,t;if(!this._finished)return e=this._config.chunkSize,i=e?(t=i.substring(0,e),i.substring(e)):(t=i,\"\"),this._finished=!i,this.parseChunk(t)}}function p(e){u.call(this,e=e||{});var t=[],i=!0,r=!1;this.pause=function(){u.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){u.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on(\"data\",this._streamData),this._input.on(\"end\",this._streamEnd),this._input.on(\"error\",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):i=!0},this._streamData=y(function(e){try{t.push(\"string\"==typeof e?e:e.toString(this._config.encoding)),i&&(i=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=y(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=y(function(){this._streamCleanUp(),r=!0,this._streamData(\"\")},this),this._streamCleanUp=y(function(){this._input.removeListener(\"data\",this._streamData),this._input.removeListener(\"end\",this._streamEnd),this._input.removeListener(\"error\",this._streamError)},this)}function i(m){var n,s,a,t,o=Math.pow(2,53),h=-o,u=/^\\s*-?(\\d+\\.?|\\.\\d+|\\d+\\.\\d+)([eE][-+]?\\d+)?\\s*$/,d=/^((\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z)))$/,i=this,r=0,f=0,l=!1,e=!1,c=[],p={data:[],errors:[],meta:{}};function y(e){return\"greedy\"===m.skipEmptyLines?\"\"===e.join(\"\").trim():1===e.length&&0===e[0].length}function g(){if(p&&a&&(k(\"Delimiter\",\"UndetectableDelimiter\",\"Unable to auto-detect delimiting character; defaulted to '\"+v.DefaultDelimiter+\"'\"),a=!1),m.skipEmptyLines&&(p.data=p.data.filter(function(e){return!y(e)})),_()){if(p)if(Array.isArray(p.data[0])){for(var e=0;_()&&e<p.data.length;e++)p.data[e].forEach(t);p.data.splice(0,1)}else p.data.forEach(t);function t(e,t){U(m.transformHeader)&&(e=m.transformHeader(e,t)),c.push(e)}}function i(e,t){for(var i=m.header?{}:[],r=0;r<e.length;r++){var n=r,s=e[r],s=((e,t)=>(e=>(m.dynamicTypingFunction&&void 0===m.dynamicTyping[e]&&(m.dynamicTyping[e]=m.dynamicTypingFunction(e)),!0===(m.dynamicTyping[e]||m.dynamicTyping)))(e)?\"true\"===t||\"TRUE\"===t||\"false\"!==t&&\"FALSE\"!==t&&((e=>{if(u.test(e)){e=parseFloat(e);if(h<e&&e<o)return 1}})(t)?parseFloat(t):d.test(t)?new Date(t):\"\"===t?null:t):t)(n=m.header?r>=c.length?\"__parsed_extra\":c[r]:n,s=m.transform?m.transform(s,n):s);\"__parsed_extra\"===n?(i[n]=i[n]||[],i[n].push(s)):i[n]=s}return m.header&&(r>c.length?k(\"FieldMismatch\",\"TooManyFields\",\"Too many fields: expected \"+c.length+\" fields but parsed \"+r,f+t):r<c.length&&k(\"FieldMismatch\",\"TooFewFields\",\"Too few fields: expected \"+c.length+\" fields but parsed \"+r,f+t)),i}var r;p&&(m.header||m.dynamicTyping||m.transform)&&(r=1,!p.data.length||Array.isArray(p.data[0])?(p.data=p.data.map(i),r=p.data.length):p.data=i(p.data,0),m.header&&p.meta&&(p.meta.fields=c),f+=r)}function _(){return m.header&&0===c.length}function k(e,t,i,r){e={type:e,code:t,message:i};void 0!==r&&(e.row=r),p.errors.push(e)}U(m.step)&&(t=m.step,m.step=function(e){p=e,_()?g():(g(),0!==p.data.length&&(r+=e.data.length,m.preview&&r>m.preview?s.abort():(p.data=p.data[0],t(p,i))))}),this.parse=function(e,t,i){var r=m.quoteChar||'\"',r=(m.newline||(m.newline=this.guessLineEndings(e,r)),a=!1,m.delimiter?U(m.delimiter)&&(m.delimiter=m.delimiter(e),p.meta.delimiter=m.delimiter):((r=((e,t,i,r,n)=>{var s,a,o,h;n=n||[\",\",\"\\t\",\"|\",\";\",v.RECORD_SEP,v.UNIT_SEP];for(var u=0;u<n.length;u++){for(var d,f=n[u],l=0,c=0,p=0,g=(o=void 0,new E({comments:r,delimiter:f,newline:t,preview:10}).parse(e)),_=0;_<g.data.length;_++)i&&y(g.data[_])?p++:(d=g.data[_].length,c+=d,void 0===o?o=d:0<d&&(l+=Math.abs(d-o),o=d));0<g.data.length&&(c/=g.data.length-p),(void 0===a||l<=a)&&(void 0===h||h<c)&&1.99<c&&(a=l,s=f,h=c)}return{successful:!!(m.delimiter=s),bestDelimiter:s}})(e,m.newline,m.skipEmptyLines,m.comments,m.delimitersToGuess)).successful?m.delimiter=r.bestDelimiter:(a=!0,m.delimiter=v.DefaultDelimiter),p.meta.delimiter=m.delimiter),b(m));return m.preview&&m.header&&r.preview++,n=e,s=new E(r),p=s.parse(n,t,i),g(),l?{meta:{paused:!0}}:p||{meta:{paused:!1}}},this.paused=function(){return l},this.pause=function(){l=!0,s.abort(),n=U(m.chunk)?\"\":n.substring(s.getCharIndex())},this.resume=function(){i.streamer._halted?(l=!1,i.streamer.parseChunk(n,!0)):setTimeout(i.resume,3)},this.aborted=function(){return e},this.abort=function(){e=!0,s.abort(),p.meta.aborted=!0,U(m.complete)&&m.complete(p),n=\"\"},this.guessLineEndings=function(e,t){e=e.substring(0,1048576);var t=new RegExp(P(t)+\"([^]*?)\"+P(t),\"gm\"),i=(e=e.replace(t,\"\")).split(\"\\r\"),t=e.split(\"\\n\"),e=1<t.length&&t[0].length<i[0].length;if(1===i.length||e)return\"\\n\";for(var r=0,n=0;n<i.length;n++)\"\\n\"===i[n][0]&&r++;return r>=i.length/2?\"\\r\\n\":\"\\r\"}}function P(e){return e.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function E(C){var S=(C=C||{}).delimiter,O=C.newline,x=C.comments,I=C.step,A=C.preview,T=C.fastMode,D=null,L=!1,F=null==C.quoteChar?'\"':C.quoteChar,j=F;if(void 0!==C.escapeChar&&(j=C.escapeChar),(\"string\"!=typeof S||-1<v.BAD_DELIMITERS.indexOf(S))&&(S=\",\"),x===S)throw new Error(\"Comment character same as delimiter\");!0===x?x=\"#\":(\"string\"!=typeof x||-1<v.BAD_DELIMITERS.indexOf(x))&&(x=!1),\"\\n\"!==O&&\"\\r\"!==O&&\"\\r\\n\"!==O&&(O=\"\\n\");var z=0,M=!1;this.parse=function(i,t,r){if(\"string\"!=typeof i)throw new Error(\"Input must be a string\");var n=i.length,e=S.length,s=O.length,a=x.length,o=U(I),h=[],u=[],d=[],f=z=0;if(!i)return w();if(T||!1!==T&&-1===i.indexOf(F)){for(var l=i.split(O),c=0;c<l.length;c++){if(d=l[c],z+=d.length,c!==l.length-1)z+=O.length;else if(r)return w();if(!x||d.substring(0,a)!==x){if(o){if(h=[],k(d.split(S)),R(),M)return w()}else k(d.split(S));if(A&&A<=c)return h=h.slice(0,A),w(!0)}}return w()}for(var p=i.indexOf(S,z),g=i.indexOf(O,z),_=new RegExp(P(j)+P(F),\"g\"),m=i.indexOf(F,z);;)if(i[z]===F)for(m=z,z++;;){if(-1===(m=i.indexOf(F,m+1)))return r||u.push({type:\"Quotes\",code:\"MissingQuotes\",message:\"Quoted field unterminated\",row:h.length,index:z}),E();if(m===n-1)return E(i.substring(z,m).replace(_,F));if(F===j&&i[m+1]===j)m++;else if(F===j||0===m||i[m-1]!==j){-1!==p&&p<m+1&&(p=i.indexOf(S,m+1));var y=v(-1===(g=-1!==g&&g<m+1?i.indexOf(O,m+1):g)?p:Math.min(p,g));if(i.substr(m+1+y,e)===S){d.push(i.substring(z,m).replace(_,F)),i[z=m+1+y+e]!==F&&(m=i.indexOf(F,z)),p=i.indexOf(S,z),g=i.indexOf(O,z);break}y=v(g);if(i.substring(m+1+y,m+1+y+s)===O){if(d.push(i.substring(z,m).replace(_,F)),b(m+1+y+s),p=i.indexOf(S,z),m=i.indexOf(F,z),o&&(R(),M))return w();if(A&&h.length>=A)return w(!0);break}u.push({type:\"Quotes\",code:\"InvalidQuotes\",message:\"Trailing quote on quoted field is malformed\",row:h.length,index:z}),m++}}else if(x&&0===d.length&&i.substring(z,z+a)===x){if(-1===g)return w();z=g+s,g=i.indexOf(O,z),p=i.indexOf(S,z)}else if(-1!==p&&(p<g||-1===g))d.push(i.substring(z,p)),z=p+e,p=i.indexOf(S,z);else{if(-1===g)break;if(d.push(i.substring(z,g)),b(g+s),o&&(R(),M))return w();if(A&&h.length>=A)return w(!0)}return E();function k(e){h.push(e),f=z}function v(e){var t=0;return t=-1!==e&&(e=i.substring(m+1,e))&&\"\"===e.trim()?e.length:t}function E(e){return r||(void 0===e&&(e=i.substring(z)),d.push(e),z=n,k(d),o&&R()),w()}function b(e){z=e,k(d),d=[],g=i.indexOf(O,z)}function w(e){if(C.header&&!t&&h.length&&!L){var s=h[0],a=Object.create(null),o=new Set(s);let n=!1;for(let r=0;r<s.length;r++){let i=s[r];if(a[i=U(C.transformHeader)?C.transformHeader(i,r):i]){let e,t=a[i];for(;e=i+\"_\"+t,t++,o.has(e););o.add(e),s[r]=e,a[i]++,n=!0,(D=null===D?{}:D)[e]=i}else a[i]=1,s[r]=i;o.add(i)}n&&console.warn(\"Duplicate headers found and renamed.\"),L=!0}return{data:h,errors:u,meta:{delimiter:S,linebreak:O,aborted:M,truncated:!!e,cursor:f+(t||0),renamedHeaders:D}}}function R(){I(w()),h=[],u=[]}},this.abort=function(){M=!0},this.getCharIndex=function(){return z}}function g(e){var t=e.data,i=o[t.workerId],r=!1;if(t.error)i.userError(t.error,t.file);else if(t.results&&t.results.data){var n={abort:function(){r=!0,_(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:m,resume:m};if(U(i.userStep)){for(var s=0;s<t.results.data.length&&(i.userStep({data:t.results.data[s],errors:t.results.errors,meta:t.results.meta},n),!r);s++);delete t.results}else U(i.userChunk)&&(i.userChunk(t.results,n,t.file),delete t.results)}t.finished&&!r&&_(t.workerId,t.results)}function _(e,t){var i=o[e];U(i.userComplete)&&i.userComplete(t),i.terminate(),delete o[e]}function m(){throw new Error(\"Not implemented.\")}function b(e){if(\"object\"!=typeof e||null===e)return e;var t,i=Array.isArray(e)?[]:{};for(t in e)i[t]=b(e[t]);return i}function y(e,t){return function(){e.apply(t,arguments)}}function U(e){return\"function\"==typeof e}return v.parse=function(e,t){var i=(t=t||{}).dynamicTyping||!1;U(i)&&(t.dynamicTypingFunction=i,i={});if(t.dynamicTyping=i,t.transform=!!U(t.transform)&&t.transform,!t.worker||!v.WORKERS_SUPPORTED)return i=null,v.NODE_STREAM_INPUT,\"string\"==typeof e?(e=(e=>65279!==e.charCodeAt(0)?e:e.slice(1))(e),i=new(t.download?f:c)(t)):!0===e.readable&&U(e.read)&&U(e.on)?i=new p(t):(n.File&&e instanceof File||e instanceof Object)&&(i=new l(t)),i.stream(e);(i=(()=>{var e;return!!v.WORKERS_SUPPORTED&&(e=(()=>{var e=n.URL||n.webkitURL||null,t=r.toString();return v.BLOB_URL||(v.BLOB_URL=e.createObjectURL(new Blob([\"var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; \",\"(\",t,\")();\"],{type:\"text/javascript\"})))})(),(e=new n.Worker(e)).onmessage=g,e.id=h++,o[e.id]=e)})()).userStep=t.step,i.userChunk=t.chunk,i.userComplete=t.complete,i.userError=t.error,t.step=U(t.step),t.chunk=U(t.chunk),t.complete=U(t.complete),t.error=U(t.error),delete t.worker,i.postMessage({input:e,config:t,workerId:i.id})},v.unparse=function(e,t){var n=!1,_=!0,m=\",\",y=\"\\r\\n\",s='\"',a=s+s,i=!1,r=null,o=!1,h=((()=>{if(\"object\"==typeof t){if(\"string\"!=typeof t.delimiter||v.BAD_DELIMITERS.filter(function(e){return-1!==t.delimiter.indexOf(e)}).length||(m=t.delimiter),\"boolean\"!=typeof t.quotes&&\"function\"!=typeof t.quotes&&!Array.isArray(t.quotes)||(n=t.quotes),\"boolean\"!=typeof t.skipEmptyLines&&\"string\"!=typeof t.skipEmptyLines||(i=t.skipEmptyLines),\"string\"==typeof t.newline&&(y=t.newline),\"string\"==typeof t.quoteChar&&(s=t.quoteChar),\"boolean\"==typeof t.header&&(_=t.header),Array.isArray(t.columns)){if(0===t.columns.length)throw new Error(\"Option columns is empty\");r=t.columns}void 0!==t.escapeChar&&(a=t.escapeChar+s),t.escapeFormulae instanceof RegExp?o=t.escapeFormulae:\"boolean\"==typeof t.escapeFormulae&&t.escapeFormulae&&(o=/^[=+\\-@\\t\\r].*$/)}})(),new RegExp(P(s),\"g\"));\"string\"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return u(null,e,i);if(\"object\"==typeof e[0])return u(r||Object.keys(e[0]),e,i)}else if(\"object\"==typeof e)return\"string\"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||r),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:\"object\"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||\"object\"==typeof e.data[0]||(e.data=[e.data])),u(e.fields||[],e.data||[],i);throw new Error(\"Unable to serialize unrecognized input\");function u(e,t,i){var r=\"\",n=(\"string\"==typeof e&&(e=JSON.parse(e)),\"string\"==typeof t&&(t=JSON.parse(t)),Array.isArray(e)&&0<e.length),s=!Array.isArray(t[0]);if(n&&_){for(var a=0;a<e.length;a++)0<a&&(r+=m),r+=k(e[a],a);0<t.length&&(r+=y)}for(var o=0;o<t.length;o++){var h=(n?e:t[o]).length,u=!1,d=n?0===Object.keys(t[o]).length:0===t[o].length;if(i&&!n&&(u=\"greedy\"===i?\"\"===t[o].join(\"\").trim():1===t[o].length&&0===t[o][0].length),\"greedy\"===i&&n){for(var f=[],l=0;l<h;l++){var c=s?e[l]:l;f.push(t[o][c])}u=\"\"===f.join(\"\").trim()}if(!u){for(var p=0;p<h;p++){0<p&&!d&&(r+=m);var g=n&&s?e[p]:p;r+=k(t[o][g],p)}o<t.length-1&&(!i||0<h&&!d)&&(r+=y)}}return r}function k(e,t){var i,r;return null==e?\"\":e.constructor===Date?JSON.stringify(e).slice(1,25):(r=!1,o&&\"string\"==typeof e&&o.test(e)&&(e=\"'\"+e,r=!0),i=e.toString().replace(h,a),(r=r||!0===n||\"function\"==typeof n&&n(e,t)||Array.isArray(n)&&n[t]||((e,t)=>{for(var i=0;i<t.length;i++)if(-1<e.indexOf(t[i]))return!0;return!1})(i,v.BAD_DELIMITERS)||-1<i.indexOf(m)||\" \"===i.charAt(0)||\" \"===i.charAt(i.length-1))?s+i+s:i)}},v.RECORD_SEP=String.fromCharCode(30),v.UNIT_SEP=String.fromCharCode(31),v.BYTE_ORDER_MARK=\"\\ufeff\",v.BAD_DELIMITERS=[\"\\r\",\"\\n\",'\"',v.BYTE_ORDER_MARK],v.WORKERS_SUPPORTED=!s&&!!n.Worker,v.NODE_STREAM_INPUT=1,v.LocalChunkSize=10485760,v.RemoteChunkSize=5242880,v.DefaultDelimiter=\",\",v.Parser=E,v.ParserHandle=i,v.NetworkStreamer=f,v.FileStreamer=l,v.StringStreamer=c,v.ReadableStreamStreamer=p,n.jQuery&&((d=n.jQuery).fn.parse=function(o){var i=o.config||{},h=[];return this.each(function(e){if(!(\"INPUT\"===d(this).prop(\"tagName\").toUpperCase()&&\"file\"===d(this).attr(\"type\").toLowerCase()&&n.FileReader)||!this.files||0===this.files.length)return!0;for(var t=0;t<this.files.length;t++)h.push({file:this.files[t],inputElem:this,instanceConfig:d.extend({},i)})}),e(),this;function e(){if(0===h.length)U(o.complete)&&o.complete();else{var e,t,i,r,n=h[0];if(U(o.before)){var s=o.before(n.file,n.inputElem);if(\"object\"==typeof s){if(\"abort\"===s.action)return e=\"AbortError\",t=n.file,i=n.inputElem,r=s.reason,void(U(o.error)&&o.error({name:e},t,i,r));if(\"skip\"===s.action)return void u();\"object\"==typeof s.config&&(n.instanceConfig=d.extend(n.instanceConfig,s.config))}else if(\"skip\"===s)return void u()}var a=n.instanceConfig.complete;n.instanceConfig.complete=function(e){U(a)&&a(e,n.file,n.inputElem),u()},v.parse(n.file,n.instanceConfig)}}function u(){h.splice(0,1),e()}}),a&&(n.onmessage=function(e){e=e.data;void 0===v.WORKER_ID&&e&&(v.WORKER_ID=e.workerId);\"string\"==typeof e.input?n.postMessage({workerId:v.WORKER_ID,results:v.parse(e.input,e.config),finished:!0}):(n.File&&e.input instanceof File||e.input instanceof Object)&&(e=v.parse(e.input,e.config))&&n.postMessage({workerId:v.WORKER_ID,results:e,finished:!0})}),(f.prototype=Object.create(u.prototype)).constructor=f,(l.prototype=Object.create(u.prototype)).constructor=l,(c.prototype=Object.create(c.prototype)).constructor=c,(p.prototype=Object.create(u.prototype)).constructor=p,v});","import * as _ from \"lodash-es\"\nimport * as Papa from \"papaparse\"\nimport * as R from \"remeda\"\nimport { sampleFrom, slugifySameCase, ColumnSlug } from \"@ourworldindata/utils\"\nimport {\n    CoreColumnStore,\n    CoreRow,\n    CoreMatrix,\n    Time,\n    CoreValueType,\n    ColumnTypeNames,\n    CoreColumnDef,\n    ErrorValue,\n    OwidEntityCodeColumnDef,\n    OwidEntityIdColumnDef,\n    OwidEntityNameColumnDef,\n    OwidTableSlugs,\n} from \"@ourworldindata/types\"\nimport { ErrorValueTypes, DroppedForTesting } from \"./ErrorValues.js\"\n\nexport const columnStoreToRows = (\n    columnStore: CoreColumnStore\n): Record<string, CoreValueType>[] => {\n    const firstCol = Object.values(columnStore)[0]\n    if (!firstCol) return []\n    const slugs = Object.keys(columnStore)\n    return firstCol.map((val, index) => {\n        const newRow: Record<string, CoreValueType> = {}\n        slugs.forEach((slug) => {\n            newRow[slug] = columnStore[slug][index]\n        })\n        return newRow\n    })\n}\n\n// If string exceeds maxLength, will replace the end char with a ... and drop the rest\nexport const truncate = (str: string, maxLength: number): string =>\n    str.length > maxLength ? `${str.slice(0, maxLength - 3)}...` : str\n\n// Picks a type for each column from the first row then autotypes all rows after that so all values in\n// a column will have the same type. Only chooses between strings and numbers.\nconst numberOnly = /^-?\\d+\\.?\\d*$/\ntype RawRow = Record<string, unknown> | undefined\ntype ParsedRow = Record<string, string | number | ErrorValue> | undefined | null\nexport const makeAutoTypeFn = (\n    numericSlugs?: ColumnSlug[]\n): ((object?: RawRow) => ParsedRow) => {\n    const slugToType: any = {}\n    numericSlugs?.forEach((slug) => {\n        slugToType[slug] = \"number\"\n    })\n    return (object: RawRow): ParsedRow => {\n        for (const columnSlug in object) {\n            const value = object[columnSlug]\n            const type = slugToType[columnSlug]\n            if (type === \"string\") {\n                object[columnSlug] = value\n                continue\n            }\n\n            const number = parseFloat(value as string) // The \"+\" type casting that d3 does for perf converts \"\" to 0, so use parseFloat.\n            if (type === \"number\") {\n                object[columnSlug] = isNaN(number)\n                    ? ErrorValueTypes.NaNButShouldBeNumber\n                    : number\n                continue\n            }\n\n            if (isNaN(number) || !numberOnly.test(value as string)) {\n                object[columnSlug] = value\n                slugToType[columnSlug] = \"string\"\n                continue\n            }\n\n            object[columnSlug] = number\n            slugToType[columnSlug] = \"number\"\n        }\n        return object as ParsedRow\n    }\n}\n\n// Removes whitespace and non-word characters from column slugs if any exist.\n// The original names are moved to the name property on the column def.\nexport const standardizeSlugs = (\n    rows: CoreRow[]\n): { rows: CoreRow[]; defs: { name: string; slug: string }[] } | undefined => {\n    const firstRow = rows[0] ?? {}\n    const colsToRename = Object.keys(firstRow)\n        .map((name) => {\n            return {\n                name,\n                slug: slugifySameCase(name),\n            }\n        })\n        .filter((col) => col.name !== col.slug)\n    if (!colsToRename.length) return undefined\n\n    rows.forEach((row: CoreRow) => {\n        colsToRename.forEach((col) => {\n            row[col.slug] = row[col.name]\n            delete row[col.name]\n        })\n    })\n\n    return { rows, defs: colsToRename }\n}\n\nexport const guessColumnDefFromSlugAndRow = (\n    slug: string,\n    sampleValue: unknown\n): CoreColumnDef => {\n    const valueType = typeof sampleValue\n\n    const name = slug\n\n    if (slug === \"Entity\")\n        return {\n            slug,\n            type: ColumnTypeNames.EntityName,\n            name,\n        }\n\n    if (slug === \"day\")\n        return {\n            slug,\n            type: ColumnTypeNames.Day,\n            name: \"Day\",\n        }\n\n    if (slug === \"year\" || slug === \"Year\")\n        return {\n            slug,\n            type: ColumnTypeNames.Year,\n            name: \"Year\",\n        }\n\n    if (slug === OwidTableSlugs.EntityName) return OwidEntityNameColumnDef\n    if (slug === OwidTableSlugs.EntityCode) return OwidEntityCodeColumnDef\n    if (slug === OwidTableSlugs.EntityId) return OwidEntityIdColumnDef\n\n    if (slug === \"date\")\n        return {\n            slug,\n            type: ColumnTypeNames.Date,\n            name: \"Date\",\n        }\n\n    if (valueType === \"number\")\n        return {\n            slug,\n            type: ColumnTypeNames.Numeric,\n            name,\n        }\n\n    if (valueType === \"string\") {\n        if (String(sampleValue).match(/^\\d+$/))\n            return {\n                slug,\n                type: ColumnTypeNames.Numeric,\n                name,\n            }\n    }\n\n    return { slug, type: ColumnTypeNames.String, name }\n}\n\nexport const makeRowFromColumnStore = (\n    rowIndex: number,\n    columnStore: CoreColumnStore\n): CoreRow => {\n    const row: CoreRow = {}\n    Object.entries(columnStore).forEach(([slug, col]) => {\n        if (col.length <= rowIndex) row[slug] = undefined\n        else row[slug] = col[rowIndex]\n    })\n    return row\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface, @typescript-eslint/no-empty-object-type\nexport interface InterpolationContext {}\n\nexport interface LinearInterpolationContext extends InterpolationContext {\n    // whether to extrapolate a variable at the start or end, where we cannot do linear interpolation\n    // but need to just copy over the first/last value present over to empty fields.\n    // e.g. [Error, Error, 2, 3, 4] would become [2, 2, 2, 3, 4] with extrapolateAtStart=true.\n    extrapolateAtStart?: boolean\n    extrapolateAtEnd?: boolean\n}\n\nexport interface ToleranceInterpolationContext extends InterpolationContext {\n    timeToleranceForwards: number\n    timeToleranceBackwards: number\n}\n\nexport type InterpolationProvider<C extends InterpolationContext> = (\n    valuesSortedByTimeAsc: CoreValueType[],\n    timesAsc: Time[],\n    validIndices: number[],\n    context: C,\n    start: number,\n    end: number\n) => void\n\nexport function linearInterpolation(\n    valuesSortedByTimeAsc: CoreValueType[],\n    timesAsc: Time[],\n    validIndices: number[],\n    context: LinearInterpolationContext,\n    start: number = 0,\n    end: number = valuesSortedByTimeAsc.length\n): void {\n    if (!valuesSortedByTimeAsc.length) return\n\n    const startIndexInValidIndices = R.sortedIndex(validIndices, start)\n    const endIndexInValidIndices = R.sortedIndex(validIndices, end)\n\n    const distBetweenStartAndEnd =\n        endIndexInValidIndices - startIndexInValidIndices\n\n    if (distBetweenStartAndEnd === 0) {\n        // No valid values in this range, we can short-circuit\n        for (let index = start; index < end; index++) {\n            valuesSortedByTimeAsc[index] =\n                ErrorValueTypes.NoValueForInterpolation\n        }\n        return\n    }\n    // All values in this range are already valid, we don't need to do anything\n    else if (distBetweenStartAndEnd === end - start) {\n        return\n    }\n\n    let currentValidIndexPointer = startIndexInValidIndices\n    let prevNonBlankIndex: number | undefined = undefined\n    let nextNonBlankIndex: number | undefined = undefined\n\n    for (let index = start; index < end; index++) {\n        if (\n            nextNonBlankIndex !== -1 &&\n            (nextNonBlankIndex === undefined || nextNonBlankIndex <= index)\n        ) {\n            nextNonBlankIndex = validIndices[currentValidIndexPointer] ?? -1\n            if (nextNonBlankIndex >= end) {\n                nextNonBlankIndex = -1\n            }\n        }\n\n        // Check whether the current index has a valid value\n        if (index === nextNonBlankIndex) {\n            prevNonBlankIndex = index\n            currentValidIndexPointer++\n            continue\n        }\n\n        const timeOfCurrent = timesAsc[index]\n\n        const timeOfPrevIndex =\n            prevNonBlankIndex !== undefined\n                ? (timesAsc[prevNonBlankIndex] ?? -Infinity)\n                : -Infinity\n        const timeOfNextIndex = timesAsc[nextNonBlankIndex] ?? Infinity\n\n        const prevValue: number | undefined =\n            prevNonBlankIndex !== undefined\n                ? (valuesSortedByTimeAsc[prevNonBlankIndex] as\n                      | number\n                      | undefined)\n                : undefined\n        const nextValue: number | undefined = valuesSortedByTimeAsc[\n            nextNonBlankIndex\n        ] as number | undefined\n\n        let value\n        if (typeof prevValue === \"number\" && typeof nextValue === \"number\") {\n            const distLeft = timeOfCurrent - timeOfPrevIndex\n            const distRight = timeOfNextIndex - timeOfCurrent\n            value =\n                (prevValue * distRight + nextValue * distLeft) /\n                (distLeft + distRight)\n        } else if (typeof prevValue === \"number\" && context.extrapolateAtEnd)\n            value = prevValue\n        else if (typeof nextValue === \"number\" && context.extrapolateAtStart)\n            value = nextValue\n        else value = ErrorValueTypes.NoValueForInterpolation\n\n        valuesSortedByTimeAsc[index] = value\n    }\n}\n\nexport function toleranceInterpolation(\n    valuesSortedByTimeAsc: CoreValueType[],\n    timesAsc: Time[],\n    validIndices: number[],\n    context: ToleranceInterpolationContext,\n    start: number = 0,\n    end: number = valuesSortedByTimeAsc.length\n): void {\n    if (!valuesSortedByTimeAsc.length) return\n\n    // `validIndices` contains the indexes of all non-error values in `valuesSortedByTimeAsc`.\n    // Here, we find the *indexes* of where `start` and `end` appear in `validIndices` (note that\n    // `start` and `end` themselves are indexes into `valuesSortedByTimeAsc`).\n    const startIndexInValidIndices = R.sortedIndex(validIndices, start)\n    const endIndexInValidIndices = R.sortedIndex(validIndices, end)\n\n    const distBetweenStartAndEnd =\n        endIndexInValidIndices - startIndexInValidIndices\n\n    // If the two indices are the same, then there are no valid values in this range.\n    if (distBetweenStartAndEnd === 0) {\n        // No valid values in this range, we can short-circuit\n        for (let index = start; index < end; index++) {\n            valuesSortedByTimeAsc[index] =\n                ErrorValueTypes.NoValueWithinTolerance\n        }\n        return\n    }\n    // All values in this range are valid, we can short-circuit\n    else if (distBetweenStartAndEnd === end - start) {\n        return\n    }\n    // If the two indices differ by 1, then there is only one valid value in this range.\n    else if (distBetweenStartAndEnd === 1) {\n        // Only one valid value in this range, we can short-circuit\n        const onlyValidIndex = validIndices[startIndexInValidIndices]\n        const timeOfOnlyValid = timesAsc[onlyValidIndex]\n\n        for (let index = start; index < end; index++) {\n            if (index === onlyValidIndex) continue\n\n            const timeOfCurrent = timesAsc[index]\n            const timeDiff = timeOfOnlyValid - timeOfCurrent\n            if (\n                (timeDiff < 0 &&\n                    Math.abs(timeDiff) <= context.timeToleranceBackwards) ||\n                (timeDiff > 0 &&\n                    Math.abs(timeDiff) <= context.timeToleranceForwards)\n            ) {\n                valuesSortedByTimeAsc[index] =\n                    valuesSortedByTimeAsc[onlyValidIndex]\n                timesAsc[index] = timeOfOnlyValid\n            } else {\n                valuesSortedByTimeAsc[index] =\n                    ErrorValueTypes.NoValueWithinTolerance\n            }\n        }\n        return\n    }\n\n    let currentValidIndexPointer = startIndexInValidIndices\n    let prevNonBlankIndex: number | undefined = undefined\n    let nextNonBlankIndex: number | undefined = undefined\n\n    for (let index = start; index < end; index++) {\n        if (\n            nextNonBlankIndex !== -1 &&\n            (nextNonBlankIndex === undefined || nextNonBlankIndex <= index)\n        ) {\n            nextNonBlankIndex = validIndices[currentValidIndexPointer] ?? -1\n            if (nextNonBlankIndex >= end) {\n                nextNonBlankIndex = -1\n            }\n        }\n\n        // Check whether the current index has a valid value\n        if (index === nextNonBlankIndex) {\n            prevNonBlankIndex = index\n            currentValidIndexPointer++\n            continue\n        }\n\n        const timeOfCurrent = timesAsc[index]\n\n        const timeOfPrevIndex =\n            prevNonBlankIndex !== undefined\n                ? (timesAsc[prevNonBlankIndex] ?? -Infinity)\n                : -Infinity\n        const timeOfNextIndex = timesAsc[nextNonBlankIndex] ?? Infinity\n\n        const prevTimeDiff = timeOfCurrent - timeOfPrevIndex\n        const nextTimeDiff = timeOfNextIndex - timeOfCurrent\n\n        if (\n            nextNonBlankIndex !== undefined &&\n            nextNonBlankIndex !== -1 &&\n            nextTimeDiff <= prevTimeDiff &&\n            nextTimeDiff <= context.timeToleranceForwards\n        ) {\n            valuesSortedByTimeAsc[index] =\n                valuesSortedByTimeAsc[nextNonBlankIndex]\n            timesAsc[index] = timesAsc[nextNonBlankIndex]\n        } else if (\n            prevNonBlankIndex !== undefined &&\n            prevTimeDiff <= context.timeToleranceBackwards\n        ) {\n            valuesSortedByTimeAsc[index] =\n                valuesSortedByTimeAsc[prevNonBlankIndex]\n            timesAsc[index] = timesAsc[prevNonBlankIndex]\n        } else\n            valuesSortedByTimeAsc[index] =\n                ErrorValueTypes.NoValueWithinTolerance\n    }\n}\n\n// A dumb function for making a function that makes a key for a row given certain columns.\nexport const makeKeyFn = (\n    columnStore: CoreColumnStore,\n    columnSlugs: ColumnSlug[]\n): ((rowIndex: number) => string) => {\n    const cols = columnSlugs.map((slug) => columnStore[slug])\n\n    const toStr = (val: CoreValueType): string =>\n        val === null || val === undefined\n            ? \"\"\n            : typeof val === \"string\"\n              ? val\n              : (val as any) + \"\"\n\n    // perf: this function is performance-critical, and so for the common cases of 1, 2, or 3 columns, we can provide a\n    // faster implementation.\n    if (cols.length === 0) return () => \"\"\n    if (cols.length === 1) {\n        const col = cols[0]\n        return (rowIndex: number): string => toStr(col[rowIndex])\n    }\n    if (cols.length === 2) {\n        const col0 = cols[0],\n            col1 = cols[1]\n        return (rowIndex: number): string =>\n            `${toStr(col0[rowIndex])} ${toStr(col1[rowIndex])}`\n    }\n    if (cols.length === 3) {\n        const col0 = cols[0],\n            col1 = cols[1],\n            col2 = cols[2]\n        return (rowIndex: number): string =>\n            `${toStr(col0[rowIndex])} ${toStr(col1[rowIndex])} ${toStr(\n                col2[rowIndex]\n            )}`\n    }\n\n    return (rowIndex: number): string =>\n        // toString() handles `undefined` and `null` values, which can be in the table.\n        cols.map((col) => toStr(col[rowIndex])).join(\" \")\n}\n\nconst getColumnStoreLength = (store: CoreColumnStore): number => {\n    return _.max(Object.values(store).map((v) => v.length)) ?? 0\n}\n\nexport const concatColumnStores = (\n    stores: CoreColumnStore[],\n    slugsToKeep?: ColumnSlug[]\n): CoreColumnStore => {\n    if (!stores.length) return {}\n\n    const lengths = stores.map(getColumnStoreLength)\n    const slugs = slugsToKeep ?? Object.keys(R.first(stores)!)\n\n    const newColumnStore: CoreColumnStore = {}\n\n    // The below code is performance-critical.\n    // That's why it's written using for loops and mutable arrays rather than using map or flatMap:\n    // To this day, that's still faster in JS.\n    slugs.forEach((slug) => {\n        let newColumnValues: CoreValueType[] = []\n        for (const [i, store] of stores.entries()) {\n            const values = store[slug] ?? []\n            const toFill = Math.max(0, lengths[i] - values.length)\n\n            newColumnValues = newColumnValues.concat(values)\n            if (toFill > 0) {\n                newColumnValues = newColumnValues.concat(\n                    new Array(toFill).fill(\n                        ErrorValueTypes.MissingValuePlaceholder\n                    )\n                )\n            }\n        }\n        newColumnStore[slug] = newColumnValues\n    })\n    return newColumnStore\n}\n\nexport const rowsToColumnStore = (rows: CoreRow[]): CoreColumnStore => {\n    const columnsObject: CoreColumnStore = {}\n    if (!rows.length) return columnsObject\n\n    Object.keys(rows[0]).forEach((slug) => {\n        columnsObject[slug] = rows.map((row) => row[slug])\n    })\n    return columnsObject\n}\n\nconst guessColumnDefsFromRows = (\n    rows: CoreRow[],\n    definedSlugs: Map<ColumnSlug, any>\n): CoreColumnDef[] => {\n    if (!rows[0]) return []\n    return Object.keys(rows[0])\n        .filter((slug) => !definedSlugs.has(slug))\n        .map((slug) => {\n            const firstRowWithValue = rows.find(\n                (row) =>\n                    row[slug] !== undefined &&\n                    row[slug] !== null &&\n                    row[slug] !== \"\"\n            )\n            const firstValue = firstRowWithValue\n                ? firstRowWithValue[slug]\n                : undefined\n\n            return guessColumnDefFromSlugAndRow(slug, firstValue)\n        })\n}\n\nexport const autodetectColumnDefs = (\n    rowsOrColumnStore: CoreColumnStore | CoreRow[],\n    definedSlugs: Map<ColumnSlug, any>\n): CoreColumnDef[] => {\n    if (!Array.isArray(rowsOrColumnStore)) {\n        const columnStore = rowsOrColumnStore\n        return Object.keys(columnStore)\n            .filter((slug) => !definedSlugs.has(slug))\n            .map((slug) => {\n                return guessColumnDefFromSlugAndRow(\n                    slug,\n                    columnStore[slug].find(\n                        (val) => val !== undefined && val !== null\n                    )\n                )\n            })\n    }\n    return guessColumnDefsFromRows(rowsOrColumnStore, definedSlugs)\n}\n\n// Convenience method when you are replacing columns\nexport const replaceDef = <ColumnDef extends CoreColumnDef>(\n    defs: ColumnDef[],\n    newDefs: ColumnDef[]\n): ColumnDef[] =>\n    defs.map((def) => {\n        const newDef = newDefs.find((newDef) => newDef.slug === def.slug)\n        return newDef ?? def\n    })\n\nexport const renameColumnStore = (\n    columnStore: CoreColumnStore,\n    columnRenameMap: { [columnSlug: string]: ColumnSlug }\n): CoreColumnStore => {\n    const newStore: CoreColumnStore = {}\n    Object.keys(columnStore).forEach((slug) => {\n        if (columnRenameMap[slug])\n            newStore[columnRenameMap[slug]] = columnStore[slug]\n        else newStore[slug] = columnStore[slug]\n    })\n    return newStore\n}\n\n// Returns a Set of random indexes to drop in an array, preserving the order of the array\nexport const getDropIndexes = (\n    arrayLength: number,\n    howMany: number,\n    seed = Date.now()\n): Set<number> => new Set(sampleFrom(_.range(0, arrayLength), howMany, seed))\n\nexport const replaceRandomCellsInColumnStore = (\n    columnStore: CoreColumnStore,\n    howMany = 1,\n    columnSlugs: ColumnSlug[] = [],\n    seed = Date.now(),\n    replacementGenerator: () => any = (): DroppedForTesting =>\n        ErrorValueTypes.DroppedForTesting\n): CoreColumnStore => {\n    const newStore: CoreColumnStore = Object.assign({}, columnStore)\n    columnSlugs.forEach((slug) => {\n        const values = newStore[slug]\n        const indexesToDrop = getDropIndexes(values.length, howMany, seed)\n        newStore[slug] = values.map((value, index) =>\n            indexesToDrop.has(index) ? replacementGenerator() : value\n        )\n    })\n    return newStore\n}\n\nexport class Timer {\n    constructor() {\n        this._tickTime = Date.now()\n        this._firstTickTime = this._tickTime\n    }\n\n    private _tickTime: number\n    private readonly _firstTickTime: number\n\n    tick(msg?: string): number {\n        const elapsed = Date.now() - this._tickTime\n        // eslint-disable-next-line no-console\n        if (msg) console.log(`${elapsed}ms ${msg}`)\n        this._tickTime = Date.now()\n        return elapsed\n    }\n\n    getTotalElapsedTime(): number {\n        return Date.now() - this._firstTickTime\n    }\n}\n\nexport const rowsFromMatrix = (matrix: CoreMatrix): any[] => {\n    const table = trimMatrix(matrix)\n    const header = table[0]\n    return table.slice(1).map((row) => {\n        const newRow: any = {}\n        header.forEach((col, index) => {\n            newRow[col] = row[index]\n        })\n        return newRow\n    })\n}\n\nconst trimEmptyColumns = (matrix: CoreMatrix): CoreMatrix =>\n    matrix.map(trimArray)\nexport const trimMatrix = (matrix: CoreMatrix): CoreMatrix =>\n    trimEmptyColumns(trimEmptyRows(matrix))\n\nexport const matrixToDelimited = (\n    table: CoreMatrix,\n    delimiter = \"\\t\"\n): string => {\n    return table\n        .map((row: any) =>\n            row\n                .map((cell: any) =>\n                    cell === null || cell === undefined ? \"\" : cell\n                )\n                .join(delimiter)\n        )\n        .join(\"\\n\")\n}\n\n/**\n * An array object representing all parsed rows. The array is enhanced with a property listing\n * the names of the parsed columns.\n */\nexport interface DSVParsedArray<T> extends Array<T> {\n    /**\n     * List of column names.\n     */\n    columns: Array<keyof T>\n}\n\nexport const parseDelimited = (\n    str: string,\n    delimiter?: string,\n    parseFn?: (rawRow: RawRow) => ParsedRow\n): DSVParsedArray<Record<string, any>> => {\n    // Convert PapaParse result to D3 format for backwards compatibility\n    const papaParseToD3 = ({\n        data,\n        meta,\n    }: Papa.ParseResult<any>): DSVParsedArray<Record<string, any>> => {\n        const dsvParsed = data as DSVParsedArray<Record<string, any>>\n        dsvParsed.columns = meta.fields || []\n\n        // Some downstream methods expect all rows to have fields for all columns,\n        // even if they are missing in that row. This loop ensures that.\n        for (const row of dsvParsed) {\n            for (const col of dsvParsed.columns) {\n                if (!(col in row)) row[col] = \"\"\n            }\n        }\n\n        return dsvParsed\n    }\n\n    const result = Papa.parse(str, {\n        delimiter: delimiter ?? detectDelimiter(str),\n        header: true,\n        skipEmptyLines: true,\n        transformHeader: (header: string) => header.trim(),\n        transform: (value: string) => value.trim(),\n    })\n\n    if (parseFn) {\n        result.data = result.data.map((rawRow) => parseFn(rawRow as RawRow))\n    }\n\n    return papaParseToD3(result)\n}\n\nexport const detectDelimiter = (str: string): \"\\t\" | \",\" | \" \" =>\n    str.includes(\"\\t\") ? \"\\t\" : str.includes(\",\") ? \",\" : \" \"\n\nexport const rowsToMatrix = (rows: any[]): CoreMatrix | undefined =>\n    rows.length\n        ? [Object.keys(rows[0]), ...rows.map((row) => Object.values(row))]\n        : undefined\n\nconst isRowEmpty = (row: any[]): boolean => row.every(isCellEmpty)\n\nexport const isCellEmpty = (cell: unknown): boolean =>\n    cell === null || cell === undefined || cell === \"\"\n\nexport const trimEmptyRows = (matrix: CoreMatrix): CoreMatrix => {\n    let trimAt = undefined\n    for (let rowIndex = matrix.length - 1; rowIndex >= 0; rowIndex--) {\n        if (!isRowEmpty(matrix[rowIndex])) break\n        trimAt = rowIndex\n    }\n    return trimAt === undefined ? matrix : matrix.slice(0, trimAt)\n}\n\nexport const trimArray = (arr: any[]): any[] => {\n    let rightIndex: number\n    for (rightIndex = arr.length - 1; rightIndex >= 0; rightIndex--) {\n        if (!isCellEmpty(arr[rightIndex])) break\n    }\n    return arr.slice(0, rightIndex + 1)\n}\n\nconst applyNewSortOrder = (arr: any[], newOrder: number[]): any[] => {\n    const newArr = new Array(arr.length)\n    for (let i = 0; i < newOrder.length; i++) {\n        const index = newOrder[i]\n        newArr[i] = arr[index]\n    }\n    return newArr\n}\n\nexport const sortColumnStore = (\n    columnStore: CoreColumnStore,\n    slugs: ColumnSlug[]\n): CoreColumnStore => {\n    const firstCol = Object.values(columnStore)[0]\n    if (!firstCol) return {}\n    const len = firstCol.length\n    const sortFn = makeSortByFn(columnStore, slugs)\n\n    // Check if column store is already sorted.\n    // If it's not sorted, we will detect that within the first few iterations usually.\n    let isSorted = true\n    for (let i = 0; i < len - 1; i++) {\n        if (sortFn(i, i + 1) > 0) {\n            isSorted = false\n            break\n        }\n    }\n    // Column store is already sorted; return existing store unchanged\n    if (isSorted) return columnStore\n\n    const newStore: CoreColumnStore = {}\n    // Compute an array of the new sort order, i.e. [0, 1, 2, ...] -> [2, 0, 1]\n    const newOrder = _.range(0, len).sort(sortFn)\n    Object.entries(columnStore).forEach(([slug, colValues]) => {\n        newStore[slug] = applyNewSortOrder(colValues, newOrder)\n    })\n\n    return newStore\n}\n\nconst makeSortByFn = (\n    columnStore: CoreColumnStore,\n    columnSlugs: ColumnSlug[]\n): ((indexA: number, indexB: number) => 1 | 0 | -1) => {\n    const cols = columnSlugs.map((slug) => columnStore[slug])\n\n    return (indexA: number, indexB: number): 1 | 0 | -1 => {\n        const nodeAFirst = -1\n        const nodeBFirst = 1\n\n        // eslint-disable-next-line @typescript-eslint/prefer-for-of\n        for (let colIndex = 0; colIndex < cols.length; colIndex++) {\n            const col = cols[colIndex]\n            const av = col[indexA]\n            const bv = col[indexB]\n            if (av < bv) return nodeAFirst\n            if (av > bv) return nodeBFirst\n            // todo: handle ErrorValues\n        }\n        return 0\n    }\n}\n\nexport const emptyColumnsInFirstRowInDelimited = (str: string): string[] => {\n    // todo: don't split a big string here, just do a faster first line scan\n    const shortCsv = parseDelimited(str.split(\"\\n\").slice(0, 2).join(\"\\n\"))\n    const firstRow: any = shortCsv[0] ?? {}\n    const emptySlugs: string[] = []\n    Object.keys(firstRow).forEach((slug) => {\n        if (firstRow[slug] === \"\") emptySlugs.push(slug)\n    })\n    return emptySlugs\n}\n","import * as _ from \"lodash-es\"\nimport { ColumnSlug } from \"@ourworldindata/utils\"\nimport {\n    ErrorValue,\n    CoreColumnDef,\n    CoreColumnStore,\n    Time,\n    CoreValueType,\n} from \"@ourworldindata/types\"\nimport {\n    ErrorValueTypes,\n    isNotErrorValue,\n    MissingValuePlaceholder,\n    ValueTooLow,\n    DivideByZeroError,\n} from \"./ErrorValues.js\"\nimport * as R from \"remeda\"\n\nexport enum TransformParamType {\n    /** Column with time */\n    TimeSlug = \"TimeSlug\",\n    /** Column with entity */\n    EntitySlug = \"EntitySlug\",\n    /** Column with data */\n    DataSlug = \"DataSlug\",\n    Number = \"Number\",\n    String = \"String\",\n}\n\ninterface TransformParam {\n    type: TransformParamType\n}\n\ninterface Transform {\n    params: TransformParam[]\n    fn: (...args: any[]) => CoreValueType[]\n}\n\n// In Grapher we return just the years for which we have values for. This puts MissingValuePlaceholder\n// in the spots where we are missing values (added to make computing rolling windows easier).\n// Takes an array of value/year pairs and expands it so that there is an undefined\n// for each missing value from the first year to the last year, preserving the position of\n// the existing values.\nexport const insertMissingValuePlaceholders = (\n    values: number[],\n    times: number[]\n): (number | MissingValuePlaceholder)[] => {\n    const startTime = times[0]\n    const endTime = times[times.length - 1]\n    const filledRange = []\n    let time = startTime\n    const timeToValueIndex = new Map()\n    times.forEach((time, index) => {\n        timeToValueIndex.set(time, index)\n    })\n    while (time <= endTime) {\n        filledRange.push(\n            timeToValueIndex.has(time)\n                ? values[timeToValueIndex.get(time)]\n                : ErrorValueTypes.MissingValuePlaceholder\n        )\n        time++\n    }\n    return filledRange\n}\n\n// todo: add the precision param to ensure no floating point effects\nexport function computeRollingAverage(\n    numbers: (number | undefined | null | ErrorValue)[],\n    windowSize: number,\n    align: \"right\" | \"center\" = \"right\"\n): (number | ErrorValue)[] {\n    const result: (number | ErrorValue)[] = []\n\n    for (let valueIndex = 0; valueIndex < numbers.length; valueIndex++) {\n        // If a value is undefined in the original input, keep it undefined in the output\n        const currentVal = numbers[valueIndex]\n        if (currentVal === null) {\n            result[valueIndex] = ErrorValueTypes.NullButShouldBeNumber\n            continue\n        } else if (currentVal === undefined) {\n            result[valueIndex] = ErrorValueTypes.UndefinedButShouldBeNumber\n            continue\n        } else if (currentVal instanceof ErrorValue) {\n            result[valueIndex] = currentVal\n            continue\n        }\n\n        // Take away 1 for the current value (windowSize=1 means no smoothing & no expansion)\n        const expand = windowSize - 1\n\n        // With centered smoothing, expand uneven windows asymmetrically (ceil & floor) to ensure\n        // a correct number of window values get taken into account.\n        // Arbitrarily biased towards left (past).\n        const expandLeft = align === \"center\" ? Math.ceil(expand / 2) : expand\n        const expandRight = align === \"center\" ? Math.floor(expand / 2) : 0\n\n        const startIndex = Math.max(valueIndex - expandLeft, 0)\n        const endIndex = Math.min(valueIndex + expandRight, numbers.length - 1)\n\n        let count = 0\n        let sum = 0\n        for (\n            let windowIndex = startIndex;\n            windowIndex <= endIndex;\n            windowIndex++\n        ) {\n            const value = numbers[windowIndex]\n            if (\n                value !== undefined &&\n                value !== null &&\n                !(value instanceof ErrorValue)\n            ) {\n                sum += value\n                count++\n            }\n        }\n\n        result[valueIndex] = sum / count\n    }\n\n    return result\n}\n\n// Assumptions: data is sorted by entity, then time\n// todo: move tests over from CE\nconst timeSinceEntityExceededThreshold: Transform = {\n    params: [\n        { type: TransformParamType.TimeSlug },\n        { type: TransformParamType.EntitySlug },\n        { type: TransformParamType.DataSlug },\n        { type: TransformParamType.String },\n    ],\n    fn: (\n        columnStore: CoreColumnStore,\n        timeSlug: ColumnSlug,\n        entitySlug: ColumnSlug,\n        columnSlug: ColumnSlug,\n        thresholdAsString: string\n    ): (number | ValueTooLow)[] => {\n        const threshold = parseFloat(thresholdAsString)\n        const groupValues = columnStore[entitySlug] as string[]\n        const columnValues = columnStore[columnSlug] as number[]\n        const timeValues = columnStore[timeSlug] as number[]\n        let currentGroup: string\n        let groupExceededThresholdAtTime: number\n        return columnValues.map((value, index) => {\n            const group = groupValues[index]\n            const currentTime = timeValues[index]\n            if (group !== currentGroup) {\n                if (!isNotErrorValue(value)) return value\n                if (value < threshold) return ErrorValueTypes.ValueTooLow\n\n                currentGroup = group\n                groupExceededThresholdAtTime = currentTime\n            }\n            return currentTime - groupExceededThresholdAtTime\n        })\n    },\n}\n\n// Assumptions: data is sorted by entity, then time\n// todo: move tests over from CE\nconst rollingAverage: Transform = {\n    params: [\n        { type: TransformParamType.TimeSlug },\n        { type: TransformParamType.EntitySlug },\n        { type: TransformParamType.DataSlug },\n        { type: TransformParamType.Number },\n    ],\n    fn: (\n        columnStore: CoreColumnStore,\n        timeSlug: ColumnSlug,\n        entitySlug: ColumnSlug,\n        columnSlug: ColumnSlug,\n        windowSize: number\n    ): (number | ErrorValue)[] => {\n        const entityNames = columnStore[entitySlug] as string[]\n        const columnValues = columnStore[columnSlug] as number[]\n        const timeValues = columnStore[timeSlug] as number[]\n        const len = entityNames.length\n        if (!len) return []\n        let currentEntity = entityNames[0]\n        let currentValues: number[] = []\n        let currentTimes: Time[] = []\n\n        const groups: (number | ErrorValue)[][] = []\n        for (let rowIndex = 0; rowIndex <= len; rowIndex++) {\n            const entityName = entityNames[rowIndex]\n            const value = columnValues[rowIndex]\n            const time = timeValues[rowIndex]\n            if (currentEntity !== entityName) {\n                const averages = computeRollingAverage(\n                    insertMissingValuePlaceholders(currentValues, currentTimes),\n                    windowSize\n                ).filter(\n                    (value) =>\n                        !(value === ErrorValueTypes.MissingValuePlaceholder)\n                ) // filter the placeholders back out\n                groups.push(averages)\n                if (value === undefined) break // We iterate to <= so that we push the last row\n                currentValues = []\n                currentTimes = []\n                currentEntity = entityName\n            }\n            currentValues.push(value)\n            currentTimes.push(time)\n        }\n        return groups.flat()\n    },\n}\n\nconst divideBy: Transform = {\n    params: [\n        { type: TransformParamType.DataSlug },\n        { type: TransformParamType.DataSlug },\n    ],\n    fn: (\n        columnStore: CoreColumnStore,\n        numeratorSlug: ColumnSlug,\n        denominatorSlug: ColumnSlug\n    ): (number | DivideByZeroError)[] => {\n        const numeratorValues = columnStore[numeratorSlug] as number[]\n        const denominatorValues = columnStore[denominatorSlug] as number[]\n        return denominatorValues.map((denominator, index) => {\n            if (denominator === 0) return ErrorValueTypes.DivideByZeroError\n            const numerator = numeratorValues[index]\n            if (!isNotErrorValue(numerator)) return numerator\n            if (!isNotErrorValue(denominator)) return denominator\n            return numerator / denominator\n        })\n    },\n}\n\nconst multiplyBy: Transform = {\n    params: [\n        { type: TransformParamType.DataSlug },\n        { type: TransformParamType.Number },\n    ],\n    fn: (\n        columnStore: CoreColumnStore,\n        columnSlug: ColumnSlug,\n        factor: number\n    ): (number | ErrorValue)[] =>\n        columnStore[columnSlug].map((value) =>\n            isNotErrorValue(value) ? (value as number) * factor : value\n        ),\n}\n\nconst subtract: Transform = {\n    params: [\n        { type: TransformParamType.DataSlug },\n        { type: TransformParamType.DataSlug },\n    ],\n    fn: (\n        columnStore: CoreColumnStore,\n        columnSlugA: ColumnSlug,\n        columnSlugB: ColumnSlug\n    ): number[] => {\n        const values = columnStore[columnSlugA] as number[]\n        const subValues = columnStore[columnSlugB] as number[]\n        return subValues.map((subValue, index) => {\n            const value = values[index]\n            if (!isNotErrorValue(value)) return value\n            if (!isNotErrorValue(subValue)) return subValue\n            return value - subValue\n        })\n    },\n}\n\n// Assumptions: data is sorted by entity, then time, and time is a continous integer with a row for each time step.\n// todo: move tests over from CE\nconst percentChange: Transform = {\n    params: [\n        { type: TransformParamType.TimeSlug },\n        { type: TransformParamType.EntitySlug },\n        { type: TransformParamType.DataSlug },\n        { type: TransformParamType.Number },\n    ],\n    fn: (\n        columnStore: CoreColumnStore,\n        _timeSlug: ColumnSlug,\n        entitySlug: ColumnSlug,\n        columnSlug: ColumnSlug,\n        windowSize: number\n    ): (number | ErrorValue)[] => {\n        const entityNames = columnStore[entitySlug] as string[]\n        const columnValues = columnStore[columnSlug] as number[]\n\n        // If windowSize is 0 then there is zero change for every valid value\n        if (!windowSize)\n            return columnValues.map((val) => (isNotErrorValue(val) ? 0 : val))\n\n        let currentEntity: string\n        return columnValues.map((value: any, index) => {\n            const entity = entityNames[index]\n            const previousEntity = entityNames[index - windowSize] as any\n            const previousValue = columnValues[index - windowSize] as any\n            if (\n                !currentEntity ||\n                currentEntity !== entity ||\n                previousEntity !== entity\n            ) {\n                currentEntity = entity\n                return ErrorValueTypes.NoValueToCompareAgainst\n            }\n            if (previousValue instanceof ErrorValue) return previousValue\n            if (value instanceof ErrorValue) return value\n\n            if (previousValue === 0) return ErrorValueTypes.DivideByZeroError\n            if (previousValue === undefined)\n                return ErrorValueTypes.NoValueToCompareAgainst\n\n            return (100 * (value - previousValue)) / previousValue\n        })\n    },\n}\n\n// Todo: remove?\nconst asPercentageOf: Transform = {\n    params: [\n        { type: TransformParamType.DataSlug },\n        { type: TransformParamType.DataSlug },\n    ],\n    fn: (\n        columnStore: CoreColumnStore,\n        numeratorSlug: ColumnSlug,\n        denominatorSlug: ColumnSlug\n    ): (number | DivideByZeroError)[] =>\n        divideBy\n            .fn(columnStore, numeratorSlug, denominatorSlug)\n            .map((num: any) => (typeof num === \"number\" ? 100 * num : num)),\n}\n\nconst duplicate: Transform = {\n    params: [{ type: TransformParamType.DataSlug }],\n    fn: (\n        columnStore: CoreColumnStore,\n        columnSlug: ColumnSlug\n    ): CoreValueType[] => _.cloneDeep(columnStore[columnSlug]),\n}\n\nconst availableTransforms = {\n    asPercentageOf,\n    timeSinceEntityExceededThreshold,\n    divideBy,\n    rollingAverage,\n    percentChange,\n    multiplyBy,\n    subtract,\n    duplicate,\n} as const\n\ntype TransformName = keyof typeof availableTransforms\nexport const availableTransformNames = Object.keys(\n    availableTransforms\n) as TransformName[]\n\nconst isTransformName = (word: string): word is TransformName =>\n    availableTransformNames.includes(word as any)\n\n/**\n * Extracts the transform name and params from a transform string.\n *\n * For example, 'rollingAverage time entity population 5' is parsed as\n * {\n *     transformName: 'rollingAverage',\n *     params: [\n *        { type: TransformParamType.TimeSlug, value: 'time' },\n *        { type: TransformParamType.EntitySlug, value: 'entity' },\n *        { type: TransformParamType.DataSlug, value: 'population' },\n *        { type: TransformParamType.Number, value: '5' },\n *    ]\n * }\n */\nexport const parseTransformString = (\n    transform: string\n):\n    | {\n          transformName: TransformName\n          params: { type: TransformParamType; value: string }[]\n      }\n    | undefined => {\n    const words = transform.split(\" \")\n\n    const transformName = words.find((word) => isTransformName(word))\n\n    if (!transformName) {\n        console.warn(`Warning: transform '${transformName}' not found`)\n        return\n    }\n\n    const values = words.filter((word) => word !== transformName)\n\n    // Extract data slugs from transforms (i.e. columns with data, not time or entity)\n    const paramDefs = availableTransforms[transformName].params\n    const params = R.zip(paramDefs, values).map(([paramDef, value]) => {\n        return { type: paramDef.type, value }\n    })\n\n    return { transformName, params }\n}\n\nexport const applyTransforms = (\n    columnStore: CoreColumnStore,\n    defs: CoreColumnDef[]\n): CoreColumnStore => {\n    for (const def of defs) {\n        if (!def.transform || def.transformHasRun) continue\n        const { transformName, params = [] } =\n            parseTransformString(def.transform) ?? {}\n        const paramValues = params.map(({ value }) => value)\n        if (!transformName) continue\n        const { fn } = availableTransforms[transformName]\n        try {\n            columnStore[def.slug] = fn(columnStore, ...paramValues)\n            def.transformHasRun = true\n        } catch (err) {\n            console.error(\n                `Error performing transform '${def.transform}' for column '${\n                    def.slug\n                }'. Expected args: ${fn.length}. Provided args: ${\n                    1 + paramValues.length\n                }. Ran as ${transformName}(columnStore, ${paramValues\n                    .map((param) => `\"${param}\"`)\n                    .join(\",\")}).`\n            )\n            console.error(err)\n        }\n    }\n    return columnStore\n}\n","import * as _ from \"lodash-es\"\nimport {\n    intersection,\n    isPresent,\n    ColumnSlug,\n    PrimitiveType,\n    imemo,\n    merge,\n} from \"@ourworldindata/utils\"\nimport {\n    CoreColumn,\n    ColumnTypeMap,\n    MissingColumn,\n    TimeColumn,\n} from \"./CoreTableColumns.js\"\nimport {\n    CoreColumnStore,\n    CoreRow,\n    CoreTableInputOption,\n    Time,\n    TransformType,\n    ValueRange,\n    CoreQuery,\n    CoreValueType,\n    InputType,\n    CoreMatrix,\n    TableSlug,\n    ColumnTypeNames,\n    CoreColumnDef,\n    JsTypes,\n    OwidTableSlugs,\n} from \"@ourworldindata/types\"\nimport {\n    makeAutoTypeFn,\n    columnStoreToRows,\n    makeKeyFn,\n    makeRowFromColumnStore,\n    standardizeSlugs,\n    concatColumnStores,\n    rowsToColumnStore,\n    autodetectColumnDefs,\n    renameColumnStore,\n    replaceRandomCellsInColumnStore,\n    parseDelimited,\n    rowsFromMatrix,\n    sortColumnStore,\n    emptyColumnsInFirstRowInDelimited,\n    truncate,\n} from \"./CoreTableUtils.js\"\nimport {\n    ErrorValueTypes,\n    isNotErrorValue,\n    DroppedForTesting,\n} from \"./ErrorValues.js\"\nimport { applyTransforms, parseTransformString } from \"./Transforms.js\"\n\ninterface AdvancedOptions {\n    tableDescription?: string\n    transformCategory?: TransformType\n    parent?: CoreTable\n    filterMask?: FilterMask\n    tableSlug?: TableSlug\n    forceReuseColumnStore?: boolean\n}\n\n// The complex generic with default here just enables you to optionally specify a more\n// narrow interface for the input rows. This is helpful for OwidTable.\nexport class CoreTable<\n    ROW_TYPE extends CoreRow = CoreRow,\n    COL_DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> {\n    private readonly _columns: Map<ColumnSlug, CoreColumn<this, COL_DEF_TYPE>> =\n        new Map()\n    protected readonly parent?: this\n    readonly tableDescription: string\n    private readonly timeToLoad: number = 0\n    private readonly initTime = Date.now()\n\n    private readonly originalInput: CoreTableInputOption\n    private readonly advancedOptions: AdvancedOptions\n\n    private readonly inputColumnDefs: COL_DEF_TYPE[]\n    constructor(\n        input: CoreTableInputOption = [],\n        inputColumnDefs: COL_DEF_TYPE[] | string = [],\n        advancedOptions: AdvancedOptions = {}\n    ) {\n        const start = Date.now() // Perf aid\n        const { parent, tableDescription = \"\" } = advancedOptions\n\n        this.originalInput = input\n        this.tableDescription = tableDescription\n        this.parent = parent as this\n        this.inputColumnDefs =\n            typeof inputColumnDefs === \"string\"\n                ? columnDefinitionsFromInput<COL_DEF_TYPE>(inputColumnDefs)\n                : inputColumnDefs\n\n        // Column definitions with a \"duplicate\" transform are merged with the column definition of the specified source column\n        this.inputColumnDefs = this.inputColumnDefs.map((def) => {\n            if (!def.transform) return def\n            const transform = parseTransformString(def.transform)\n            if (transform?.transformName !== \"duplicate\") return def\n\n            const sourceSlug = transform.params[0].value\n            const sourceDef = this.inputColumnDefs.find(\n                (def) => def.slug === sourceSlug\n            )\n            return merge(sourceDef, def)\n        })\n\n        // If any values were passed in, copy those to column store now and then remove them from column definitions.\n        // todo: remove values property entirely? may be an anti-pattern.\n        this.inputColumnDefs = this.inputColumnDefs.map((def) => {\n            if (!def.values) return def\n            this.valuesFromColumnDefs[def.slug] = def.values\n            const copy = {\n                ...def,\n            }\n            delete copy.values\n            return copy\n        })\n\n        this.inputColumnDefs.forEach((def) => this.setColumn(def))\n\n        this.advancedOptions = advancedOptions\n\n        // If this has a parent table, than we expect all defs. This makes \"deletes\" and \"renames\" fast.\n        // If this is the first input table, then we do a simple check to generate any missing column defs.\n        if (!parent)\n            autodetectColumnDefs(this.inputColumnStore, this._columns).forEach(\n                (def) => this.setColumn(def as COL_DEF_TYPE)\n            )\n\n        this.timeToLoad = Date.now() - start // Perf aid\n    }\n\n    private valuesFromColumnDefs: CoreColumnStore = {}\n\n    // A method currently used just in debugging but may be useful in the author backend.\n    // If your charts look funny, a good thing to check is if the autodetected columns are wrong.\n    get autodetectedColumnDefs(): CoreTable {\n        const providedSlugs = new Set(\n            this.inputColumnDefs.map((def) => def.slug)\n        )\n        return new CoreTable(\n            this.defs.filter((def) => !providedSlugs.has(def.slug))\n        )\n    }\n\n    isOwidTable(): boolean {\n        return false\n    }\n\n    @imemo get transformCategory(): TransformType {\n        const { advancedOptions, inputType } = this\n        if (advancedOptions.transformCategory)\n            return advancedOptions.transformCategory\n\n        if (inputType === InputType.Delimited)\n            return TransformType.LoadFromDelimited\n        if (inputType === InputType.Matrix) return TransformType.LoadFromMatrix\n        if (inputType === InputType.RowStore)\n            return TransformType.LoadFromRowStore\n        return TransformType.LoadFromColumnStore\n    }\n\n    // If the input is a column store, returns that. If it is DSV, parses that and turns it into a column store.\n    // If it is a Rows[], turns it into a column store.\n    @imemo private get inputColumnStore(): CoreColumnStore {\n        const { originalInput, inputType } = this\n\n        if (inputType === InputType.Delimited)\n            return this.delimitedAsColumnStore\n        else if (inputType === InputType.Matrix)\n            return rowsToColumnStore(\n                rowsFromMatrix(originalInput as CoreMatrix)\n            )\n        else if (inputType === InputType.RowStore)\n            return rowsToColumnStore(originalInput as CoreRow[])\n        return originalInput as CoreColumnStore\n    }\n\n    // This can, in theory, be used to detect whether we can reuse the input column store, which can save us time parsing.\n    // However, I'm not entirely sure whether the conditions included here are complete, so we don't currently use it.\n    // We do use `advancedOptions.forceReuseColumnStore`, however.\n    @imemo get canReuseInputColumnStore(): boolean {\n        const { inputColumnDefs, valuesFromColumnDefs, columnSlugs } = this\n\n        const storeHasAllColumns = columnSlugs.every(\n            (slug) => slug in this.inputColumnStore\n        )\n\n        const columnsFromTransforms = inputColumnDefs.filter(\n            (def) => def.transform && !def.transformHasRun\n        )\n\n        return (\n            !this.colsToParse.length &&\n            storeHasAllColumns &&\n            !Object.keys(valuesFromColumnDefs).length &&\n            !columnsFromTransforms.length\n        )\n    }\n\n    @imemo get columnStore(): CoreColumnStore {\n        const { inputColumnStore, advancedOptions } = this\n\n        if (advancedOptions.forceReuseColumnStore) {\n            if (advancedOptions.filterMask)\n                return advancedOptions.filterMask.apply(inputColumnStore)\n            else return inputColumnStore\n        }\n\n        const {\n            valuesFromColumnDefs,\n            inputColumnsToParsedColumnStore,\n            inputColumnDefs,\n        } = this\n\n        // Set blank columns\n        let columnStore = Object.assign(\n            {},\n            this.blankColumnStore,\n            inputColumnStore,\n            valuesFromColumnDefs\n        )\n\n        // Overwrite any non-parsed columns with parsed values\n        if (Object.keys(inputColumnsToParsedColumnStore).length)\n            columnStore = Object.assign(\n                columnStore,\n                inputColumnsToParsedColumnStore\n            )\n\n        // If we ever pass Mobx observable arrays, we need to convert them to regular arrays.\n        // Otherwise, operations like `.concat()` will break in unexpected ways.\n        // See https://github.com/mobxjs/mobx/blob/mobx4and5/docs/best/pitfalls.md\n        // Also, see https://github.com/owid/owid-grapher/issues/2948 for an issue caused by this problem.\n        type CoreValueArrayThatMayBeMobxProxy = CoreValueType[] & {\n            toJS?: () => CoreValueType[]\n        }\n\n        for (const [slug, values] of Object.entries(columnStore)) {\n            const valuesThatMayBeMobxProxy =\n                values as CoreValueArrayThatMayBeMobxProxy\n            if (typeof valuesThatMayBeMobxProxy.toJS === \"function\") {\n                columnStore[slug] = valuesThatMayBeMobxProxy.toJS()\n            }\n        }\n\n        const columnsFromTransforms = inputColumnDefs.filter(\n            (def) => def.transform && !def.transformHasRun\n        ) // todo: sort by graph dependency order\n        if (columnsFromTransforms.length) {\n            columnStore = applyTransforms(columnStore, columnsFromTransforms)\n        }\n\n        return advancedOptions.filterMask\n            ? advancedOptions.filterMask.apply(columnStore)\n            : columnStore\n    }\n\n    private get blankColumnStore(): CoreColumnStore {\n        const columnsObject: CoreColumnStore = {}\n        this.columnSlugs.forEach((slug) => {\n            columnsObject[slug] = []\n        })\n        return columnsObject\n    }\n\n    @imemo private get delimitedAsColumnStore(): CoreColumnStore {\n        const { originalInput, _numericColumnSlugs } = this\n        const parsed = parseDelimited(\n            originalInput as string,\n            undefined,\n            makeAutoTypeFn(_numericColumnSlugs)\n        ) as any\n        // Remove the columns object from the parsed object\n        delete parsed.columns\n\n        const renamedRows = standardizeSlugs(parsed) // todo: pass renamed defs back in.\n        return rowsToColumnStore(renamedRows ? renamedRows.rows : parsed)\n    }\n\n    get tableSlug(): string | undefined {\n        return this.advancedOptions.tableSlug\n    }\n\n    private get inputColumnsToParsedColumnStore(): CoreColumnStore {\n        const { inputColumnStore, colsToParse } = this\n        const columnsObject: CoreColumnStore = {}\n        if (!colsToParse.length) return columnsObject\n        const missingCols: CoreColumn<this>[] = []\n        let len = 0\n        colsToParse.forEach((col) => {\n            const { slug } = col\n            const unparsedVals = inputColumnStore[slug]\n            if (!unparsedVals) {\n                missingCols.push(col)\n                return\n            }\n            columnsObject[slug] = unparsedVals.map((val) => col.parse(val))\n            len = columnsObject[slug].length\n        })\n\n        // If column defs were provided but there were no values provided for those columns, create blank columns the same size\n        // as the filled columns.\n        missingCols.forEach(\n            (col) =>\n                (columnsObject[col.slug] = _.range(0, len).map(() =>\n                    col.parse(undefined)\n                ))\n        )\n        return columnsObject\n    }\n\n    private get colsToParse(): CoreColumn<this>[] {\n        const { inputType, columnsAsArray, inputColumnStore } = this\n        const columnsToMaybeParse = columnsAsArray.filter(\n            (col) => !col.def.skipParsing\n        )\n        const firstInputRow = makeRowFromColumnStore(0, inputColumnStore)\n        if (inputType === InputType.Delimited) {\n            const missingTypes = new Set(\n                this.getColumns(\n                    emptyColumnsInFirstRowInDelimited(\n                        this.originalInput as string\n                    )\n                )\n            ) // Our autotyping is poor if the first value in a column is empty\n            return columnsToMaybeParse.filter(\n                (col) =>\n                    col.needsParsing(firstInputRow[col.slug]) ||\n                    missingTypes.has(col)\n            )\n        }\n\n        if (this.parent || !firstInputRow) return []\n\n        // The default behavior is to assume some missing or bad data in user data, so we always parse the full input the first time we load\n        // user data, with the exception of columns that have values passed directly.\n        // Todo: measure the perf hit and add a parameter to opt out of this this if you know the data is complete?\n        const alreadyTypedSlugs = new Set(\n            Object.keys(this.valuesFromColumnDefs)\n        )\n        if (this.isRoot) {\n            return columnsToMaybeParse.filter(\n                (col) => !alreadyTypedSlugs.has(col.slug)\n            )\n        }\n\n        return columnsToMaybeParse.filter(\n            (col) =>\n                !alreadyTypedSlugs.has(col.slug) ||\n                col.needsParsing(firstInputRow[col.slug])\n        )\n    }\n\n    private setColumn(def: COL_DEF_TYPE): void {\n        const { type, slug } = def\n        const ColumnType = (type && ColumnTypeMap[type]) || ColumnTypeMap.String\n        this._columns.set(slug, new ColumnType(this, def))\n    }\n\n    protected transform(\n        rowsOrColumnStore: ROW_TYPE[] | CoreColumnStore | CoreMatrix,\n        defs: COL_DEF_TYPE[],\n        tableDescription: string,\n        transformCategory: TransformType,\n        filterMask?: FilterMask\n    ): this {\n        // The combo of the \"this\" return type and then casting this to any allows subclasses to create transforms of the\n        // same type. The \"any\" typing is very brief (the returned type will have the same type as the instance being transformed).\n        return new (this.constructor as any)(rowsOrColumnStore, defs, {\n            parent: this,\n            tableDescription,\n            transformCategory,\n            filterMask,\n        })\n    }\n\n    protected noopTransform(tableDescription: string): this {\n        return new (this.constructor as any)(this.columnStore, this.defs, {\n            parent: this,\n            tableDescription,\n            transformCategory: TransformType.Noop,\n            forceReuseColumnStore: true,\n        })\n    }\n\n    // Time between when the parent table finished loading and this table started constructing.\n    // A large time may just be due to a transform only happening after a user action, or it\n    // could be do to other sync code executing between transforms.\n    private get betweenTime(): number {\n        return this.parent\n            ? this.initTime - (this.parent.initTime + this.parent.timeToLoad)\n            : 0\n    }\n\n    @imemo get rows(): ROW_TYPE[] {\n        return columnStoreToRows(this.columnStore) as ROW_TYPE[]\n    }\n\n    @imemo get indices(): number[] {\n        return _.range(0, this.numRows)\n    }\n\n    *[Symbol.iterator](): Generator<CoreRow, void, unknown> {\n        const { columnStore, numRows } = this\n        for (let index = 0; index < numRows; index++) {\n            yield makeRowFromColumnStore(index, columnStore)\n        }\n    }\n\n    getTimesAtIndices(indices: number[]): number[] {\n        if (!indices.length) return []\n        return this.getValuesAtIndices(this.timeColumn.slug, indices) as Time[]\n    }\n\n    getValuesAtIndices(\n        columnSlug: ColumnSlug,\n        indices: number[]\n    ): CoreValueType[] {\n        const values = this.get(columnSlug).valuesIncludingErrorValues\n        return indices.map((index) => values[index])\n    }\n\n    @imemo get firstRow(): ROW_TYPE {\n        return makeRowFromColumnStore(0, this.columnStore) as ROW_TYPE\n    }\n\n    @imemo get lastRow(): ROW_TYPE {\n        return makeRowFromColumnStore(\n            this.numRows - 1,\n            this.columnStore\n        ) as ROW_TYPE\n    }\n\n    @imemo get numRows(): number {\n        const firstColValues = Object.values(this.columnStore)[0]\n        return firstColValues ? firstColValues.length : 0\n    }\n\n    @imemo get numColumns(): number {\n        return this.columnSlugs.length\n    }\n\n    get(columnSlug: ColumnSlug | undefined): CoreColumn<this, COL_DEF_TYPE> {\n        if (columnSlug === undefined)\n            return new MissingColumn(this, {\n                slug: `undefined_slug`,\n            } as COL_DEF_TYPE)\n        return (\n            this._columns.get(columnSlug) ??\n            new MissingColumn(this, { slug: columnSlug } as COL_DEF_TYPE)\n        )\n    }\n\n    has(columnSlug: ColumnSlug | undefined): boolean {\n        if (columnSlug === undefined) return false\n        return this._columns.has(columnSlug)\n    }\n\n    getFirstColumnWithType(\n        columnTypeName: ColumnTypeNames\n    ): CoreColumn<this, COL_DEF_TYPE> | undefined {\n        return this.columnsAsArray.find(\n            (col) => col.def.type === columnTypeName\n        )\n    }\n\n    @imemo get timeColumn(): TimeColumn | MissingColumn {\n        // \"time\" is the canonical time column slug.\n        // See LegacyToOwidTable where this column is injected for all Graphers.\n        const maybeTimeColumn = this.get(OwidTableSlugs.Time)\n        if (maybeTimeColumn instanceof ColumnTypeMap.Time)\n            return maybeTimeColumn\n        // If a valid \"time\" column doesn't exist, find _some_ time column to use.\n        // This is somewhat unreliable and currently only used to infer the time\n        // column on explorers.\n        return (this.columnsAsArray.find(\n            (col) => col instanceof ColumnTypeMap.Day\n        ) ??\n            this.columnsAsArray.find(\n                (col) => col instanceof ColumnTypeMap.Date\n            ) ??\n            this.columnsAsArray.find(\n                (col) => col instanceof ColumnTypeMap.Year\n            ) ??\n            maybeTimeColumn) as TimeColumn | MissingColumn\n    }\n\n    @imemo private get columnsWithParseErrors(): CoreColumn<this>[] {\n        return this.columnsAsArray.filter((col) => col.numErrorValues)\n    }\n\n    @imemo get numColumnsWithErrorValues(): number {\n        return this.columnsWithParseErrors.length\n    }\n\n    @imemo get numErrorValues(): number {\n        return _.sum(this.columnsAsArray.map((col) => col.numErrorValues))\n    }\n\n    @imemo get numValidCells(): number {\n        return _.sum(this.columnsAsArray.map((col) => col.numValues))\n    }\n\n    @imemo get colStoreIsEqualToParent(): boolean {\n        return this.parent\n            ? this.columnStore === this.parent.columnStore\n            : false\n    }\n\n    get rootTable(): this {\n        return this.parent ? this.parent.rootTable : this\n    }\n\n    /**\n     * Returns a string map (aka index) where the keys are the combined string values of columnSlug[], and the values\n     * are the indices for the rows that match.\n     *\n     * {country: \"USA\", population: 100}\n     *\n     * So `table.rowIndex([\"country\", \"population\"]).get(\"USA 100\")` would return [0].\n     *\n     */\n    rowIndex(columnSlugs: ColumnSlug[]): Map<string, number[]> {\n        const index = new Map<string, number[]>()\n        const keyFn = makeKeyFn(this.columnStore, columnSlugs)\n        for (let i = 0; i < this.numRows; i++) {\n            const key = keyFn(i)\n            if (index.has(key)) index.get(key)!.push(i)\n            else index.set(key, [i])\n        }\n        return index\n    }\n\n    /**\n     * Returns a map (aka index) where the keys are the values of the indexColumnSlug, and the values\n     * are the values of the valueColumnSlug.\n     *\n     * {country: \"USA\", population: 100}\n     *\n     * So `table.valueIndex(\"country\", \"population\").get(\"USA\")` would return 100.\n     *\n     */\n    protected valueIndex(\n        indexColumnSlug: ColumnSlug,\n        valueColumnSlug: ColumnSlug\n    ): Map<PrimitiveType, PrimitiveType> {\n        const indexCol = this.get(indexColumnSlug)\n        const valueCol = this.get(valueColumnSlug)\n        const indexValues = indexCol.valuesIncludingErrorValues\n        const valueValues = valueCol.valuesIncludingErrorValues\n        const valueIndices = new Set(valueCol.validRowIndices)\n        const intersection = indexCol.validRowIndices.filter((index) =>\n            valueIndices.has(index)\n        )\n\n        const map = new Map<PrimitiveType, PrimitiveType>()\n        intersection.forEach((index) => {\n            map.set(\n                indexValues[index] as PrimitiveType,\n                valueValues[index] as PrimitiveType\n            )\n        })\n        return map\n    }\n\n    grep(searchStringOrRegex: string | RegExp): this {\n        return this.rowFilter((row) => {\n            const line = Object.values(row).join(\" \")\n            return typeof searchStringOrRegex === \"string\"\n                ? line.includes(searchStringOrRegex)\n                : searchStringOrRegex.test(line)\n        }, `Kept rows that matched '${searchStringOrRegex.toString()}'`)\n    }\n\n    rowFilter(\n        predicate: (row: ROW_TYPE, index: number) => boolean,\n        opName: string\n    ): this {\n        const mask = new FilterMask(this.numRows, this.rows.map(predicate)) // Warning: this will be slow\n        if (mask.isNoop()) return this.noopTransform(opName)\n\n        return this.transform(\n            this.columnStore,\n            this.defs,\n            opName,\n            TransformType.FilterRows,\n            mask\n        )\n    }\n\n    columnFilter(\n        columnSlug: ColumnSlug,\n        predicate: (value: CoreValueType, index: number) => boolean,\n        opName: string\n    ): this {\n        const mask = new FilterMask(\n            this.numRows,\n            this.get(columnSlug).valuesIncludingErrorValues.map(predicate)\n        )\n        if (mask.isNoop()) return this.noopTransform(opName)\n\n        return this.transform(\n            this.columnStore,\n            this.defs,\n            opName,\n            TransformType.FilterRows,\n            mask\n        )\n    }\n\n    sortBy(slugs: ColumnSlug[]): this {\n        const description = `Sort by ${slugs.join(\",\")}`\n        const sorted = sortColumnStore(this.columnStore, slugs)\n\n        if (sorted === this.columnStore) return this.noopTransform(description)\n        else\n            return this.transform(\n                sorted,\n                this.defs,\n                description,\n                TransformType.SortRows\n            )\n    }\n\n    // Assumes table is sorted by columnSlug. Returns an array representing the starting index of each new group.\n    protected groupBoundaries(columnSlug: ColumnSlug): number[] {\n        const values = this.get(columnSlug).valuesIncludingErrorValues\n        const arr: number[] = []\n        let last: CoreValueType | undefined = undefined\n        for (let i = 0; i < values.length; i++) {\n            const val = values[i]\n            if (val !== last) {\n                arr.push(i)\n                last = val\n            }\n        }\n        // Include the end of the last group, which doesn't result in a change in value above.\n        if (values?.length) {\n            arr.push(values.length)\n        }\n        return arr\n    }\n\n    @imemo get defs(): COL_DEF_TYPE[] {\n        return this.columnsAsArray.map((col) => col.def)\n    }\n\n    @imemo get columnNames(): string[] {\n        return this.columnsAsArray.map((col) => col.name)\n    }\n\n    @imemo get columnTypes(): (ColumnTypeNames | undefined)[] {\n        return this.columnsAsArray.map((col) => col.def.type)\n    }\n\n    @imemo get columnJsTypes(): JsTypes[] {\n        return this.columnsAsArray.map((col) => col.jsType)\n    }\n\n    @imemo get columnSlugs(): string[] {\n        return Array.from(this._columns.keys())\n    }\n\n    @imemo get numericColumnSlugs(): string[] {\n        return this._numericColumnSlugs\n    }\n\n    private get _numericColumnSlugs(): string[] {\n        return this._columnsAsArray\n            .filter((col) => col instanceof ColumnTypeMap.Numeric)\n            .map((col) => col.slug)\n    }\n\n    private get _columnsAsArray(): CoreColumn<this, COL_DEF_TYPE>[] {\n        return Array.from(this._columns.values())\n    }\n\n    @imemo get columnsAsArray(): CoreColumn<this, COL_DEF_TYPE>[] {\n        return this._columnsAsArray\n    }\n\n    getColumns(slugs: ColumnSlug[]): CoreColumn<this, COL_DEF_TYPE>[] {\n        return slugs.map((slug) => this.get(slug))\n    }\n\n    // Get the min and max for multiple columns at once\n    domainFor(slugs: ColumnSlug[]): ValueRange {\n        const cols = this.getColumns(slugs)\n        const mins = cols.map((col) => col.minValue)\n        const maxes = cols.map((col) => col.maxValue)\n        return [_.min(mins), _.max(maxes)]\n    }\n\n    private get isRoot(): boolean {\n        return !this.parent\n    }\n\n    dump(rowLimit = 30): void {\n        this.dumpPipeline()\n        this.dumpColumns()\n        this.dumpRows(rowLimit)\n    }\n\n    dumpPipeline(): void {\n        // eslint-disable-next-line no-console\n        console.table(this.ancestors.map((tb) => tb.explanation))\n    }\n\n    dumpColumns(): void {\n        // eslint-disable-next-line no-console\n        console.table(this.explainColumns)\n    }\n\n    rowsFrom(start: number, end: number): any {\n        if (start >= this.numRows) return []\n        if (end > this.numRows) end = this.numRows\n        return _.range(start, end).map((index) =>\n            makeRowFromColumnStore(index, this.columnStore)\n        )\n    }\n\n    dumpRows(rowLimit = 30): void {\n        // eslint-disable-next-line no-console\n        console.table(this.rowsFrom(0, rowLimit), this.columnSlugs)\n    }\n\n    dumpInputTable(): void {\n        // eslint-disable-next-line no-console\n        console.table(this.inputAsTable)\n    }\n\n    @imemo private get inputType(): InputType {\n        const { originalInput } = this\n        if (typeof originalInput === \"string\") return InputType.Delimited\n        if (Array.isArray(originalInput))\n            return Array.isArray(originalInput[0])\n                ? InputType.Matrix\n                : InputType.RowStore\n        return InputType.ColumnStore\n    }\n\n    @imemo private get inputColumnStoreToRows(): Record<\n        string,\n        CoreValueType\n    >[] {\n        return columnStoreToRows(this.inputColumnStore)\n    }\n\n    @imemo private get inputAsTable():\n        | Record<string, CoreValueType>[]\n        | CoreTableInputOption {\n        const { inputType } = this\n        return inputType === InputType.ColumnStore\n            ? this.inputColumnStoreToRows\n            : inputType === InputType.Matrix\n              ? rowsFromMatrix(this.originalInput as CoreMatrix)\n              : this.originalInput\n    }\n\n    @imemo private get explainColumns(): Record<string, unknown>[] {\n        return this.columnsAsArray.map((col) => {\n            const {\n                slug,\n                jsType,\n                name,\n                numValues,\n                numErrorValues,\n                displayName,\n                def,\n            } = col\n            return {\n                slug,\n                type: def.type,\n                jsType,\n                name,\n                numValues,\n                numErrorValues,\n                displayName,\n                color: def.color,\n            }\n        })\n    }\n\n    get ancestors(): this[] {\n        return this.parent ? [...this.parent.ancestors, this] : [this]\n    }\n\n    @imemo private get numColsToParse(): number {\n        return this.colsToParse.length\n    }\n\n    private get explanation(): Record<string, unknown> {\n        // todo: is there a better way to do this in JS?\n        const {\n            tableDescription,\n            transformCategory,\n            numColumns,\n            numRows,\n            betweenTime,\n            timeToLoad,\n            numColsToParse,\n            numValidCells,\n            numErrorValues,\n            numColumnsWithErrorValues,\n            colStoreIsEqualToParent,\n        } = this\n        return {\n            tableDescription: truncate(tableDescription, 40),\n            transformCategory,\n            numColumns,\n            numRows,\n            betweenTime,\n            timeToLoad,\n            numColsToParse,\n            numValidCells,\n            numErrorValues,\n            numColumnsWithErrorValues,\n            colStoreIsEqualToParent,\n        }\n    }\n\n    rowsAt(indices: number[]): ROW_TYPE[] {\n        const { columnStore } = this\n        return indices.map(\n            (index) => makeRowFromColumnStore(index, columnStore) as ROW_TYPE\n        )\n    }\n\n    findRows(query: CoreQuery): ROW_TYPE[] {\n        return this.rowsAt(this.findRowsIndices(query))\n    }\n\n    findRowsIndices(query: CoreQuery): any {\n        const slugs = Object.keys(query)\n        if (!slugs.length) return this.indices\n        const arrs = this.getColumns(slugs).map((col) =>\n            col.indicesWhere(query[col.slug])\n        )\n        return intersection(...arrs)\n    }\n\n    indexOf(row: ROW_TYPE): any {\n        return this.findRowsIndices(row)[0] ?? -1\n    }\n\n    where(query: CoreQuery): this {\n        const rows = this.findRows(query)\n        const queryDescription = Object.entries(query)\n            .map(([col, value]) => `${col}=${value}`)\n            .join(\"&\")\n\n        return this.transform(\n            rows,\n            this.defs,\n            `Selecting ${rows.length} rows where ${queryDescription}`,\n            TransformType.FilterRows\n        )\n    }\n\n    appendRows(rows: ROW_TYPE[], opDescription: string): this {\n        return this.concat(\n            [\n                new (this.constructor as typeof CoreTable)(rows, this.defs, {\n                    parent: this,\n                }),\n            ],\n            opDescription\n        )\n    }\n\n    updateDefs(fn: (def: COL_DEF_TYPE) => COL_DEF_TYPE): this {\n        return this.transform(\n            this.columnStore,\n            this.defs.map(fn),\n            `Updated column defs`,\n            TransformType.UpdateColumnDefs\n        )\n    }\n\n    select(slugs: ColumnSlug[]): this {\n        const newStore: CoreColumnStore = {}\n\n        // Build defs in the order specified by slugs\n        const defs = slugs\n            .filter((slug) => this.has(slug))\n            .map((slug) => this.get(slug).def)\n\n        // Build column store with the same columns\n        slugs.forEach((slug) => {\n            if (this.columnStore[slug] !== undefined) {\n                newStore[slug] = this.columnStore[slug]\n            }\n        })\n\n        return this.transform(\n            newStore,\n            defs,\n            `Kept columns '${slugs}'`,\n            TransformType.FilterColumns\n        )\n    }\n\n    dropColumns(slugs: ColumnSlug[], message?: string): this {\n        const columnsToDrop = new Set(slugs)\n        const newStore = {\n            ...this.columnStore,\n        }\n        const defs = this.columnsAsArray\n            .filter((col) => !columnsToDrop.has(col.slug))\n            .map((col) => col.def)\n        slugs.forEach((slug) => {\n            delete newStore[slug]\n        })\n        return this.transform(\n            newStore,\n            defs,\n            message ?? `Dropped columns '${slugs}'`,\n            TransformType.FilterColumns\n        )\n    }\n\n    isRowEmpty(index: number): boolean {\n        const { columnStore } = this\n        return (\n            this.columnSlugs\n                .map((slug) => columnStore[slug][index])\n                .filter((value) => isNotErrorValue(value) && value !== \"\")\n                .length === 0\n        )\n    }\n\n    dropEmptyRows(): this {\n        return this.dropRowsAt(\n            this.indices\n                .map((index) => (this.isRowEmpty(index) ? index : null))\n                .filter(isPresent)\n        )\n    }\n\n    dropRowsWithErrorValuesForAnyColumn(slugs: ColumnSlug[]): this {\n        return this.rowFilter(\n            (row) => slugs.every((slug) => isNotErrorValue(row[slug])),\n            `Drop rows with empty or ErrorValues in any column: ${slugs.join(\n                \", \"\n            )}`\n        )\n    }\n\n    dropRowsWithErrorValuesForAllColumns(slugs: ColumnSlug[]): this {\n        return this.rowFilter(\n            (row) => slugs.some((slug) => isNotErrorValue(row[slug])),\n            `Drop rows with empty or ErrorValues in every column: ${slugs.join(\n                \", \"\n            )}`\n        )\n    }\n\n    renameColumn(oldSlug: ColumnSlug, newSlug: ColumnSlug): this {\n        return this.renameColumns({ [oldSlug]: newSlug })\n    }\n\n    // Todo: improve typings. After renaming a column the row interface should change. Applies to some other methods as well.\n    renameColumns(columnRenameMap: { [columnSlug: string]: ColumnSlug }): this {\n        const oldSlugs = Object.keys(columnRenameMap)\n        const newSlugs = Object.values(columnRenameMap)\n\n        const message =\n            `Renamed ` +\n            oldSlugs\n                .map((name, index) => `'${name}' to '${newSlugs[index]}'`)\n                .join(\" and \")\n\n        return this.transform(\n            renameColumnStore(this.columnStore, columnRenameMap),\n            this.defs.map((def) =>\n                oldSlugs.includes(def.slug)\n                    ? {\n                          ...def,\n                          slug: newSlugs[oldSlugs.indexOf(def.slug)],\n                      }\n                    : def\n            ),\n            message,\n            TransformType.RenameColumns\n        )\n    }\n\n    dropRowsAt(indices: number[], message?: string): this {\n        const mask = new FilterMask(this.numRows, indices, false)\n        if (mask.isNoop())\n            return this.noopTransform(message ?? `Dropping 0 rows`)\n\n        return this.transform(\n            this.columnStore,\n            this.defs,\n            message ?? `Dropping ${indices.length} rows`,\n            TransformType.FilterRows,\n            mask\n        )\n    }\n\n    replaceCells(\n        columnSlugs: ColumnSlug[],\n        replaceFn: (val: CoreValueType, index: number) => CoreValueType\n    ): this {\n        const newStore: CoreColumnStore = { ...this.columnStore }\n        columnSlugs.forEach((slug) => {\n            newStore[slug] = newStore[slug].map(replaceFn)\n        })\n        return this.transform(\n            newStore,\n            this.defs,\n            `Replaced all cells across columns ${columnSlugs.join(\" and \")}`,\n            TransformType.UpdateRows\n        )\n    }\n\n    combineColumns(\n        columnSlugs: ColumnSlug[],\n        def: COL_DEF_TYPE,\n        combineFn: (\n            row: Record<ColumnSlug, { value: CoreValueType; time: Time }>,\n            time: Time\n        ) => CoreValueType\n    ): this {\n        if (columnSlugs.length === 0) return this\n        const newStore: CoreColumnStore = { ...this.columnStore }\n        newStore[def.slug] = this.indices.map((index) => {\n            const time = this.timeColumn.valuesIncludingErrorValues[index]\n\n            const row: Record<\n                ColumnSlug,\n                { value: CoreValueType; time: Time }\n            > = {}\n            columnSlugs.forEach((slug) => {\n                row[slug] = {\n                    value: this.get(slug).valuesIncludingErrorValues[index],\n                    time: this.get(slug).originalTimeColumn\n                        .valuesIncludingErrorValues[index] as Time,\n                }\n            })\n\n            return combineFn(row, time as Time)\n        })\n        return this.transform(\n            newStore,\n            [...this.defs, def],\n            `Combined columns '${columnSlugs.join(\", \")}' into '${def.slug}'`,\n            TransformType.CombineColumns\n        )\n    }\n\n    replaceNonPositiveCellsForLogScale(columnSlugs: ColumnSlug[] = []): this {\n        return this.replaceCells(columnSlugs, (val) =>\n            typeof val !== \"number\" || val <= 0\n                ? ErrorValueTypes.InvalidOnALogScale\n                : val\n        )\n    }\n\n    replaceNegativeCellsWithErrorValues(columnSlugs: ColumnSlug[] = []): this {\n        return this.replaceCells(columnSlugs, (val) =>\n            typeof val !== \"number\" || val < 0\n                ? ErrorValueTypes.InvalidNegativeValue\n                : val\n        )\n    }\n\n    replaceNonNumericCellsWithErrorValues(columnSlugs: ColumnSlug[]): this {\n        return this.replaceCells(columnSlugs, (val) =>\n            !_.isNumber(val) ? ErrorValueTypes.NaNButShouldBeNumber : val\n        )\n    }\n\n    replaceRandomCells(\n        howMany = 1,\n        columnSlugs: ColumnSlug[] = [],\n        seed = Date.now(),\n        replacementGenerator: () => any = (): DroppedForTesting =>\n            ErrorValueTypes.DroppedForTesting\n    ): this {\n        return this.transform(\n            replaceRandomCellsInColumnStore(\n                this.columnStore,\n                howMany,\n                columnSlugs,\n                seed,\n                replacementGenerator\n            ),\n            this.defs,\n            `Replaced a random ${howMany} cells in ${columnSlugs.join(\n                \" and \"\n            )}`,\n            TransformType.UpdateRows\n        )\n    }\n\n    appendColumns(defs: COL_DEF_TYPE[]): this {\n        return this.transform(\n            this.columnStore,\n            this.defs.concat(defs),\n            `Appended columns ${defs\n                .map((def) => `'${def.slug}'`)\n                .join(\" and \")}`,\n            TransformType.AppendColumns\n        )\n    }\n\n    duplicateColumn(slug: ColumnSlug, overrides: COL_DEF_TYPE): this {\n        return this.transform(\n            {\n                ...this.columnStore,\n                [overrides.slug]: this.columnStore[slug],\n            },\n            this.defs.concat([\n                {\n                    ...this.get(slug).def,\n                    ...overrides,\n                },\n            ]),\n            `Duplicated column '${slug}' to column '${overrides.slug}'`,\n            TransformType.AppendColumns\n        )\n    }\n\n    appendColumnsIfNew(defs: COL_DEF_TYPE[]): this {\n        return this.appendColumns(defs.filter((def) => !this.has(def.slug)))\n    }\n\n    toMatrix(): any[][] {\n        const slugs = this.columnSlugs\n        const rows = this.rows.map((row) =>\n            slugs.map((slug) =>\n                isNotErrorValue(row[slug]) ? row[slug] : undefined\n            )\n        )\n        return [this.columnSlugs, ...rows]\n    }\n\n    // Same as toMatrix, but preserves error types\n    toTypedMatrix(): any[][] {\n        const slugs = this.columnSlugs\n        const rows = this.rows.map((row) => slugs.map((slug) => row[slug]))\n        return [this.columnSlugs, ...rows]\n    }\n\n    concat(tables: CoreTable[], message: string = `Combined tables`): this {\n        const all = [this, ...tables] as CoreTable[]\n        const defs = all.flatMap((table) => table.defs) as COL_DEF_TYPE[]\n        const uniqDefs = _.uniqBy(defs, (def) => def.slug)\n        return this.transform(\n            concatColumnStores(\n                all.map((table) => table.columnStore),\n                uniqDefs.map((def) => def.slug)\n            ),\n            uniqDefs,\n            message,\n            TransformType.Concat\n        )\n    }\n\n    /**\n     * Ensure a row exists for all values in columnSlug1 × columnSlug2 × ...\n     *\n     * For example, if we have a table:\n     *\n     *   ```\n     *   entityName, year, …\n     *   UK, 2000, …\n     *   UK, 2005, …\n     *   USA, 2003, …\n     *   ```\n     *\n     * After `complete([\"entityName\", \"year\"])`, we'd get:\n     *\n     *   ```\n     *   entityName, year, …\n     *   UK, 2000, …\n     *   UK, 2003, …\n     *   UK, 2005, …\n     *   USA, 2000, …\n     *   USA, 2003, …\n     *   USA, 2005, …\n     *   ```\n     *\n     */\n    complete(columnSlugs: [ColumnSlug, ColumnSlug]): this {\n        if (columnSlugs.length !== 2)\n            throw new Error(\"Can only run complete() for exactly 2 columns\")\n\n        const [slug1, slug2] = columnSlugs\n        const col1 = this.get(slug1)\n        const col2 = this.get(slug2)\n\n        // The output table will have exactly this many rows, since we assume that [col1, col2] are primary keys\n        // (i.e. there are no two rows with the same key), and every combination that doesn't exist yet we will add.\n        const cartesianProductSize = col1.numUniqs * col2.numUniqs\n        if (this.numRows >= cartesianProductSize) {\n            if (this.numRows > cartesianProductSize)\n                throw new Error(\"Table has more rows than expected\")\n\n            // Table is already complete\n            return this\n        }\n\n        // Map that points from a value in col1 to a set of values in col2.\n        // It's filled with all the values that already exist in the table, so we\n        // can later take the difference.\n        const existingRowValues = new Map<CoreValueType, Set<CoreValueType>>()\n        for (const index of this.indices) {\n            const val1 = col1.values[index]\n            const val2 = col2.values[index]\n            if (!existingRowValues.has(val1))\n                existingRowValues.set(val1, new Set([val2]))\n            else existingRowValues.get(val1)!.add(val2)\n        }\n\n        // The below code should be as performant as possible, since it's often iterating over hundreds of thousands of rows.\n        // The below implementation has been benchmarked against a few alternatives (using flatMap, map, and Array.from), and\n        // is the fastest.\n        // See https://jsperf.app/zudoye.\n        const rowsToAddCol1: CoreValueType[] = []\n        const rowsToAddCol2: CoreValueType[] = []\n        const col2UniqValuesCount = col2.uniqValuesAsSet.size\n        // Add rows for all combinations of values that are not contained in `existingRowValues`.\n        for (const val1 of col1.uniqValuesAsSet) {\n            const existingVals2 = existingRowValues.get(val1)\n\n            // perf: if all values in col2 are already present for this value in col1, skip\n            // this iteration. This is a relatively common case, so we can save some time.\n            if (existingVals2?.size === col2UniqValuesCount) continue\n\n            // Find the values in col2 that need to be inserted for this value in col1: col2.uniqValuesAsSet - existingVals2\n            const diff = new Set(col2.uniqValuesAsSet)\n            for (const val2 of existingVals2 || []) diff.delete(val2)\n\n            for (const val2 of diff) {\n                rowsToAddCol1.push(val1)\n                rowsToAddCol2.push(val2)\n            }\n        }\n        const appendColumnStore: CoreColumnStore = {\n            [slug1]: rowsToAddCol1,\n            [slug2]: rowsToAddCol2,\n        }\n        const appendTable = new (this.constructor as typeof CoreTable)(\n            appendColumnStore,\n            this.defs,\n            { parent: this }\n        )\n\n        return this.concat(\n            [appendTable],\n            `Append missing combos of ${columnSlugs}`\n        )\n    }\n\n    static getPreposition(col: TimeColumn | CoreColumn): string {\n        return col instanceof TimeColumn ? col.preposition : \"in\"\n    }\n}\n\nclass FilterMask {\n    private readonly mask: boolean[]\n    private readonly numRows: number\n    constructor(\n        numRows: number,\n        input: boolean[] | number[],\n        keepThese = true\n    ) {\n        this.numRows = numRows\n        if (typeof input[0] === \"boolean\") this.mask = input as boolean[]\n        else {\n            const set = new Set(input as number[])\n            this.mask = _.range(0, numRows).map((index) =>\n                set.has(index) ? keepThese : !keepThese\n            )\n        }\n    }\n\n    isNoop(): boolean {\n        return this.mask.every((value) => value)\n    }\n\n    apply(columnStore: CoreColumnStore): CoreColumnStore {\n        const columnsObject: CoreColumnStore = {}\n        const keepIndexes: number[] = []\n        for (let i = 0; i < this.numRows; i++) {\n            if (this.mask[i]) keepIndexes.push(i)\n        }\n\n        // Optimization: early return if we're keeping all rows\n        if (keepIndexes.length === this.numRows) {\n            return columnStore\n        }\n\n        Object.keys(columnStore).forEach((slug) => {\n            const originalColumn = columnStore[slug]\n            const newColumn: CoreValueType[] = new Array(keepIndexes.length)\n            for (let i = 0; i < keepIndexes.length; i++) {\n                newColumn[i] = originalColumn[keepIndexes[i]]\n            }\n\n            columnsObject[slug] = newColumn\n        })\n        return columnsObject\n    }\n}\n\n/**\n * Allows you to store your column definitions in CSV/TSV like:\n * slug,name,type etc.\n *\n * todo: define all column def property types\n */\nexport const columnDefinitionsFromInput = <T extends CoreRow>(\n    input: CoreTableInputOption\n): T[] =>\n    new CoreTable<T>(input).columnFilter(\n        \"slug\",\n        (value) => !!value,\n        \"Keep only column defs with a slug\"\n    ).rows\n","import * as _ from \"lodash-es\"\nimport {\n    intersectionOfSets,\n    findClosestTimeIndex,\n    sortNumeric,\n    getClosestTimePairs,\n    sortedFindClosest,\n    cagr,\n    isPresent,\n    TimeBound,\n    ColumnSlug,\n    imemo,\n    ToleranceStrategy,\n    sortedFindClosestIndex,\n    csvEscape,\n} from \"@ourworldindata/utils\"\nimport {\n    Time,\n    TimeRange,\n    TransformType,\n    CoreColumnStore,\n    Color,\n    CoreValueType,\n    ColumnTypeNames,\n    EntityName,\n    OwidColumnDef,\n    OwidRow,\n    OwidTableSlugs,\n    ErrorValue,\n    ToleranceOptions,\n    CoreColumnDef,\n} from \"@ourworldindata/types\"\nimport { CoreTable } from \"./CoreTable.js\"\nimport { ErrorValueTypes, isNotErrorValue } from \"./ErrorValues.js\"\nimport {\n    getOriginalTimeColumnSlug,\n    makeOriginalValueSlugFromColumnSlug,\n    makeOriginalTimeSlugFromColumnSlug,\n    makeOriginalStartTimeSlugFromColumnSlug,\n    timeColumnSlugFromColumnDef,\n    toPercentageColumnDef,\n    makeAnnotationsSlug,\n} from \"./OwidTableUtil.js\"\nimport {\n    linearInterpolation,\n    toleranceInterpolation,\n    replaceDef,\n    InterpolationProvider,\n    InterpolationContext,\n} from \"./CoreTableUtils.js\"\nimport { CoreColumn, ColumnTypeMap, TimeColumn } from \"./CoreTableColumns.js\"\n\nexport type OwidColumn = CoreColumn<OwidTable, OwidColumnDef>\n\n// An OwidTable is a subset of Table. An OwidTable always has EntityName, EntityCode, EntityId, and Time columns,\n// and value column(s). Whether or not we need in the long run is uncertain and it may just be a stepping stone\n// to go from our Variables paradigm to the Table paradigm.\nexport class OwidTable extends CoreTable<OwidRow, OwidColumnDef> {\n    override isOwidTable(): boolean {\n        return true\n    }\n\n    static async fromUrl(\n        url: string,\n        columnDefs: OwidColumnDef[] = []\n    ): Promise<OwidTable> {\n        const response = await fetch(url)\n        if (!response.ok)\n            throw new Error(\n                `Failed to fetch CSV from ${url}: ${response.status} ${response.statusText}`\n            )\n        const csv = await response.text()\n        return new OwidTable(csv, columnDefs)\n    }\n\n    @imemo get availableEntityNames(): any[] {\n        return Array.from(this.availableEntityNameSet)\n    }\n\n    @imemo get availableEntityNameSet(): Set<string> {\n        return this.entityNameColumn.uniqValuesAsSet\n    }\n\n    @imemo get entityNameColumn(): OwidColumn {\n        return (\n            this.getFirstColumnWithType(ColumnTypeNames.EntityName) ??\n            this.get(OwidTableSlugs.EntityName)\n        )\n    }\n\n    @imemo get entityNameSlug(): string {\n        return this.entityNameColumn.slug\n    }\n\n    @imemo get entityCodeColumn(): OwidColumn {\n        return (\n            this.getFirstColumnWithType(ColumnTypeNames.EntityCode) ??\n            this.get(OwidTableSlugs.EntityCode)\n        )\n    }\n\n    @imemo get entityCodeSlug(): string {\n        return this.entityCodeColumn.slug\n    }\n\n    @imemo get entityIdColumn(): OwidColumn {\n        return (\n            this.getFirstColumnWithType(ColumnTypeNames.EntityId) ??\n            this.get(OwidTableSlugs.EntityId)\n        )\n    }\n\n    @imemo get entityIdSlug(): string {\n        return this.entityIdColumn.slug\n    }\n\n    @imemo get minTime(): Time | undefined {\n        return _.min(this.allTimes)\n    }\n\n    @imemo get maxTime(): Time | undefined {\n        return _.max(this.allTimes)\n    }\n\n    /** The first and last time in the table, undefined if it has no times */\n    @imemo get timeRange(): TimeRange | undefined {\n        const { minTime, maxTime } = this\n        if (minTime === undefined || maxTime === undefined) return undefined\n        return [minTime, maxTime]\n    }\n\n    @imemo private get allTimes(): Time[] {\n        return this.get(this.timeColumn.slug).values\n    }\n\n    @imemo get rowIndicesByEntityName(): Map<string, number[]> {\n        return this.rowIndex([this.entityNameSlug])\n    }\n\n    getAnnotationColumnSlug(columnDef: OwidColumnDef): string | undefined {\n        return _.isEmpty(columnDef?.annotationsColumnSlug)\n            ? makeAnnotationsSlug(columnDef.slug)\n            : columnDef.annotationsColumnSlug\n    }\n\n    // todo: instead of this we should probably make annotations another property on charts—something like \"annotationsColumnSlugs\"\n    getAnnotationColumnForColumn(columnSlug: ColumnSlug): OwidColumn {\n        const def = this.get(columnSlug).def\n        const slug = this.getAnnotationColumnSlug(def)\n        return this.get(slug)\n    }\n\n    getTimesUniqSortedAscForColumns(columnSlugs: ColumnSlug[]): number[] {\n        // todo: should be easy to speed up if necessary.\n        return sortNumeric(\n            _.uniq(\n                this.getColumns(columnSlugs)\n                    .filter((col) => col)\n                    .flatMap((col) => col.uniqTimesAsc)\n            )\n        )\n    }\n\n    timeDomainFor(slugs: ColumnSlug[]): [Time | undefined, Time | undefined] {\n        const cols = this.getColumns(slugs)\n        const mins = cols.map((col) => col.minTime)\n        const maxes = cols.map((col) => col.maxTime)\n        return [_.min(mins), _.max(maxes)]\n    }\n\n    originalTimeDomainFor(\n        slugs: ColumnSlug[]\n    ): [Time | undefined, Time | undefined] {\n        const cols = this.getColumns(slugs)\n        const mins = cols.map((col) => _.min(col.originalTimes))\n        const maxes = cols.map((col) => _.max(col.originalTimes))\n        return [_.min(mins), _.max(maxes)]\n    }\n\n    filterByEntityNames(names: EntityName[]): this {\n        const namesSet = new Set(names)\n        return this.columnFilter(\n            this.entityNameSlug,\n            (value) => namesSet.has(value as string),\n            `Filter out all entities except '${names}'`\n        )\n    }\n\n    filterByEntityNamesUsingIncludeExcludePattern({\n        excluded,\n        included,\n    }: {\n        excluded?: EntityName[]\n        included?: EntityName[]\n    }): this {\n        if (!included && !excluded) return this\n\n        const excludedSet = new Set(excluded)\n        const includedSet = new Set(included)\n\n        const excludeFilter = (entityName: EntityName): boolean =>\n            !excludedSet.has(entityName)\n        const includeFilter =\n            includedSet.size > 0\n                ? (entityName: EntityName): boolean =>\n                      includedSet.has(entityName)\n                : (): boolean => true\n\n        const filterFn = (entityName: any): boolean =>\n            excludeFilter(entityName) && includeFilter(entityName)\n\n        const excludedList = excluded ? excluded.join(\", \") : \"\"\n        const includedList = included ? included.join(\", \") : \"\"\n\n        return this.columnFilter(\n            this.entityNameSlug,\n            filterFn,\n            `Excluded entities specified by author: ${excludedList} - Included entities specified by author: ${includedList}`\n        )\n    }\n\n    // Does a stable sort by time. You can refer to this table for fast time filtering.\n    @imemo private get sortedByTime(): this {\n        if (this.timeColumn.isMissing) return this\n        return this.sortBy([this.timeColumn.slug])\n    }\n\n    filterByTimeRange(start: TimeBound, end: TimeBound): this {\n        if (this.isBlank) return this\n\n        // Nothing to filter by if the table has no times\n        if (!this.timeRange) return this\n        const [minTime, maxTime] = this.timeRange\n\n        // We may want to do this time adjustment in Grapher instead of here\n        const adjustedStart = start === Infinity ? maxTime : start\n        const adjustedEnd = end === -Infinity ? minTime : end\n        // TODO: we should set a time column onload so we don't have to worry about it again\n        const timeColumnSlug = this.timeColumn?.slug || OwidTableSlugs.Time\n\n        const description = `Keep only rows with Time between ${adjustedStart} - ${adjustedEnd}`\n\n        // perf: if the time range is greater than the table's time range, we can skip the filter\n        if (adjustedStart <= minTime && adjustedEnd >= maxTime)\n            return this.noopTransform(description).sortedByTime\n\n        return this.columnFilter(\n            timeColumnSlug,\n            (time) =>\n                (time as number) >= adjustedStart &&\n                (time as number) <= adjustedEnd,\n            description\n\n            // Sorting by time, because incidentally some parts of the code depended on this method\n            // returning sorted rows.\n        ).sortedByTime\n    }\n\n    filterByTargetTimes(targetTimes: Time[], tolerance = 0): this {\n        const timeColumn = this.timeColumn\n        const timeValues = timeColumn.valuesIncludingErrorValues\n\n        // The common case here is that the tolerance is set to 0, in which case we can simply filter\n        // the time column for the target times.\n        if (tolerance === 0) {\n            const targetTimesSet = new Set(targetTimes)\n            return this.columnFilter(\n                timeColumn.slug,\n                (time) => targetTimesSet.has(time as number),\n                `Keep only rows with time equal to one of the target times: ${targetTimes.join(\n                    \", \"\n                )}`\n            )\n        }\n\n        // If tolerance isn't 0, then we need to find the closest time for each entity, while incorporating the tolerance.\n        const entityNameToIndices = this.rowIndicesByEntityName\n        const matchingIndices = new Set<number>()\n        this.availableEntityNames.forEach((entityName) => {\n            const indices = entityNameToIndices.get(entityName) || []\n            const allTimesAsc = indices\n                .map((index) => ({ time: timeValues[index] as number, index }))\n                .sort((a, b) => a.time - b.time)\n\n            targetTimes.forEach((targetTime) => {\n                const index = findClosestTimeIndex(\n                    allTimesAsc.map((t) => t.time),\n                    targetTime,\n                    tolerance\n                )\n                const closest =\n                    index === undefined ? undefined : allTimesAsc[index]\n                if (closest !== undefined) matchingIndices.add(closest.index)\n            })\n        })\n\n        return this.columnFilter(\n            this.entityNameSlug,\n            (row, index) => matchingIndices.has(index),\n            `Keep a row for each entity for each of the closest times ${targetTimes.join(\n                \", \"\n            )} with tolerance ${tolerance}`\n        )\n    }\n\n    hasAnyColumnNoValidValue(slugs: ColumnSlug[]): boolean {\n        return slugs.some((slug) => this.get(slug).numValues === 0)\n    }\n\n    dropAllRows(): this {\n        return this.dropRowsAt(this.indices, \"Drop all rows\")\n    }\n\n    dropRowsWithErrorValuesForColumn(slug: ColumnSlug): this {\n        return this.columnFilter(\n            slug,\n            (value) => isNotErrorValue(value),\n            `Drop rows with empty or ErrorValues in ${slug} column`\n        )\n    }\n\n    // Drop _all rows_ for an entity if there is any column that has no valid values for that entity.\n    dropEntitiesThatHaveNoDataInSomeColumn(columnSlugs: ColumnSlug[]): this {\n        const indexesByEntityName = this.rowIndicesByEntityName\n\n        // Iterate over all entities, and remove them as we go if they have no data in some column\n        const entityNamesToKeep = new Set(indexesByEntityName.keys())\n\n        for (const slug of columnSlugs) {\n            const col = this.get(slug)\n\n            // Optimization, if there are no error values in this column, we can skip this column\n            if (col.numErrorValues === 0) continue\n\n            for (const entityName of entityNamesToKeep) {\n                const indicesForEntityName = indexesByEntityName.get(entityName)\n                if (!indicesForEntityName)\n                    throw new Error(\"Unexpected: entity not found in index map\")\n\n                // Optimization: We don't care about the number of valid/error values, we just need\n                // to know if there is at least one valid value\n                const hasSomeValidValueForEntityInCol =\n                    indicesForEntityName.some((index) =>\n                        isNotErrorValue(col.valuesIncludingErrorValues[index])\n                    )\n\n                // Optimization: If we find a column that this entity has no data in we can remove\n                // it immediately, no need to iterate over other columns also\n                if (!hasSomeValidValueForEntityInCol)\n                    entityNamesToKeep.delete(entityName)\n            }\n        }\n\n        const entityNamesToDrop =\n            this.availableEntityNameSet.difference(entityNamesToKeep)\n        const droppedEntitiesStr =\n            entityNamesToDrop.size > 0\n                ? [...entityNamesToDrop].join(\", \")\n                : \"(None)\"\n\n        if (entityNamesToDrop.size === 0) {\n            return this.noopTransform(\n                `Drop entities that have no data in some column`\n            )\n        }\n\n        return this.columnFilter(\n            this.entityNameSlug,\n            (rowEntityName) => entityNamesToKeep.has(rowEntityName as string),\n            `Drop ${entityNamesToDrop.size} entities that have no data in some column: ${columnSlugs.join(\", \")}.\\nDropped entities: ${droppedEntitiesStr}`\n        )\n    }\n\n    // Drop _all rows_ for an entity if all columns have at least one invalid or missing value for that entity.\n    dropEntitiesThatHaveSomeMissingOrErrorValueInAllColumns(\n        columnSlugs: ColumnSlug[]\n    ): this {\n        const indexesByEntityName = this.rowIndicesByEntityName\n        const uniqTimes = new Set(this.allTimes)\n\n        // entity names to iterate over\n        const entityNamesToIterateOver = new Set(indexesByEntityName.keys())\n\n        // set of entities we want to keep\n        const entityNamesToKeep = new Set<string>()\n\n        // total number of entities\n        const entityCount = entityNamesToIterateOver.size\n\n        // helper function to generate operation name\n        const makeOpName = (entityNamesToKeep: Set<EntityName>): string => {\n            const entityNamesToDrop =\n                this.availableEntityNameSet.difference(entityNamesToKeep)\n            const droppedEntitiesStr =\n                entityNamesToDrop.size > 0\n                    ? [...entityNamesToDrop].join(\", \")\n                    : \"(None)\"\n            return `Drop entities that have some missing or error value in all column: ${columnSlugs.join(\", \")}.\\nDropped entities: ${droppedEntitiesStr}`\n        }\n\n        // Optimization: if there is a column that has a valid data entry for\n        // every entity and every time, we are done\n        for (const slug of columnSlugs) {\n            const col = this.get(slug)\n\n            if (\n                col.numValues === entityCount * uniqTimes.size &&\n                col.numErrorValues === 0\n            ) {\n                const entityNamesToKeep = new Set(indexesByEntityName.keys())\n\n                return this.columnFilter(\n                    this.entityNameSlug,\n                    (rowEntityName) =>\n                        entityNamesToKeep.has(rowEntityName as string),\n                    makeOpName(entityNamesToKeep)\n                )\n            }\n        }\n\n        for (const slug of columnSlugs) {\n            const col = this.get(slug)\n\n            for (const entityName of entityNamesToIterateOver) {\n                const indicesForEntityName = indexesByEntityName.get(entityName)\n                if (!indicesForEntityName)\n                    throw new Error(\"Unexpected: entity not found in index map\")\n\n                // Optimization: If the column is missing values for the entity,\n                // we know we can't make a decision yet, so we skip this entity\n                if (indicesForEntityName.length < uniqTimes.size) continue\n\n                // Optimization: We don't care about the number of valid/error\n                // values, we just need to know if there is at least one invalid value\n                const hasSomeInvalidValueForEntityInCol =\n                    indicesForEntityName.some(\n                        (index) =>\n                            !isNotErrorValue(\n                                col.valuesIncludingErrorValues[index]\n                            )\n                    )\n\n                // Optimization: If all values are valid, we know we want to keep this entity,\n                // so we remove it from the entities to iterate over\n                if (!hasSomeInvalidValueForEntityInCol) {\n                    entityNamesToKeep.add(entityName)\n                    entityNamesToIterateOver.delete(entityName)\n                }\n            }\n        }\n\n        return this.columnFilter(\n            this.entityNameSlug,\n            (rowEntityName) => entityNamesToKeep.has(rowEntityName as string),\n            makeOpName(entityNamesToKeep)\n        )\n    }\n\n    private sumsByTime(columnSlug: ColumnSlug): Map<number, number> {\n        const timeValues = this.timeColumn.values\n        const values = this.get(columnSlug).values as number[]\n        if (timeValues.length !== values.length)\n            // Throwing here may seem drastic but this will lead to an error in any case if the lengths are different\n            // (can happen when dropping rows with errors is done incorrectly).\n            // When it happens then throwing here is an easier to diagnose error\n            throw Error(\n                `Tried to run sumsByTime when timeValues (${timeValues.length}) and values (${values.length}) had different length`\n            )\n        const map = new Map<number, number>()\n        timeValues.forEach((time, index) =>\n            map.set(time, (map.get(time) ?? 0) + values[index])\n        )\n        return map\n    }\n\n    // todo: this needs tests (and/or drop in favor of someone else's package)\n    // Shows how much each entity contributed to the given column for each time period\n    toPercentageFromEachEntityForEachTime(columnSlug: ColumnSlug): this {\n        if (!this.has(columnSlug)) return this\n        const timeColumn = this.timeColumn\n        const col = this.get(columnSlug)\n        const timeTotals = this.sumsByTime(columnSlug)\n        const timeValues = timeColumn.values\n        const newDefs = replaceDef(this.defs, [\n            toPercentageColumnDef(col.def, ColumnTypeNames.RelativePercentage),\n        ])\n        const newColumnStore: CoreColumnStore = {\n            ...this.columnStore,\n            [columnSlug]: this.columnStore[columnSlug].map((val, index) => {\n                const timeTotal = timeTotals.get(timeValues[index])\n                if (timeTotal === 0) return ErrorValueTypes.DivideByZeroError\n                return (100 * (val as number)) / timeTotal!\n            }),\n        }\n        return this.transform(\n            newColumnStore,\n            newDefs,\n            `Transformed ${columnSlug} column to be % contribution of each entity for that time`,\n            TransformType.UpdateColumnDefsAndApply\n        )\n    }\n\n    // If you want to see how much each column contributed to the entity for that year, use this.\n    // NB: Uses absolute value. So if one entity added 100, and another -100, they both would have contributed \"50%\" to that year.\n    // Otherwise we'd have NaN.\n    toPercentageFromEachColumnForEachEntityAndTime(\n        columnSlugs: ColumnSlug[]\n    ): this {\n        columnSlugs = columnSlugs.filter((slug) => this.has(slug))\n        if (!columnSlugs.length) return this\n\n        const newDefs = this.defs.map((def) => {\n            if (columnSlugs.includes(def.slug))\n                return toPercentageColumnDef(\n                    def,\n                    ColumnTypeNames.RelativePercentage\n                )\n            return def\n        })\n\n        const columnStore = this.columnStore\n        const columnStorePatch: CoreColumnStore = {}\n\n        const totals = new Array(this.numRows).fill(0).map((__, i) =>\n            _.sumBy(columnSlugs, (slug) => {\n                const value = columnStore[slug][i]\n                return _.isNumber(value) ? Math.abs(value) : 0\n            })\n        )\n\n        columnSlugs.forEach((slug) => {\n            columnStorePatch[slug] = columnStore[slug].map((value, i) => {\n                const total = totals[i]\n                if (!_.isNumber(value) || !_.isNumber(total)) return value\n                if (total === 0) return ErrorValueTypes.DivideByZeroError\n                return (100 * Math.abs(value)) / total\n            })\n        })\n\n        const newColumnStore = {\n            ...columnStore,\n            ...columnStorePatch,\n        }\n\n        return this.transform(\n            newColumnStore,\n            newDefs,\n            `Transformed columns from absolute numbers to % of abs sum of ${columnSlugs.join(\n                \",\"\n            )} `,\n            TransformType.UpdateColumnDefs\n        )\n    }\n\n    // todo: this needs tests (and/or drop in favor of someone else's package)\n    // If you wanted to build a table showing something like GDP growth relative to 1950, use this.\n    toTotalGrowthForEachColumnComparedToStartTime(\n        startTimeBound: TimeBound,\n        columnSlugs: ColumnSlug[]\n    ): this {\n        if (this.timeColumn.isMissing) return this\n        const timeColumnSlug = this.timeColumn.slug\n        const newDefs = this.defs.map((def) => {\n            if (columnSlugs.includes(def.slug))\n                return toPercentageColumnDef(\n                    def,\n                    ColumnTypeNames.PercentChangeOverTime\n                )\n            return def\n        })\n        const newRows = Object.values(\n            _.groupBy(this.sortedByTime.rows, (row) => row[this.entityNameSlug])\n        ).flatMap((rowsForSingleEntity) => {\n            columnSlugs.forEach((valueSlug) => {\n                let comparisonValue: number\n                rowsForSingleEntity = rowsForSingleEntity.map(\n                    (row: Readonly<OwidRow>) => {\n                        const newRow = {\n                            ...row,\n                        }\n\n                        const value = row[valueSlug]\n\n                        if (row[timeColumnSlug] < startTimeBound) {\n                            newRow[valueSlug] =\n                                ErrorValueTypes.MissingValuePlaceholder\n                        } else if (!_.isNumber(value)) {\n                            newRow[valueSlug] =\n                                ErrorValueTypes.NaNButShouldBeNumber\n                        } else if (comparisonValue !== undefined) {\n                            // Note: comparisonValue can be negative!\n                            // +value / -comparisonValue = negative growth, which is incorrect.\n                            newRow[valueSlug] =\n                                (100 * (value - comparisonValue)) /\n                                Math.abs(comparisonValue)\n                        } else if (value === 0) {\n                            newRow[valueSlug] =\n                                ErrorValueTypes.MissingValuePlaceholder\n                        } else {\n                            comparisonValue = value\n                            newRow[valueSlug] = 0\n                        }\n\n                        return newRow\n                    }\n                )\n            })\n            return rowsForSingleEntity\n        })\n\n        return this.transform(\n            newRows,\n            newDefs,\n            `Transformed columns from absolute values to % of time ${startTimeBound} for columns ${columnSlugs.join(\n                \",\"\n            )} `,\n            TransformType.UpdateColumnDefs\n        )\n    }\n\n    keepMinTimeAndMaxTimeForEachEntityOnly(): this {\n        const indexMap = this.rowIndicesByEntityName\n        const timeColumn = this.timeColumn\n        if (timeColumn.isMissing) return this\n        const timeValues = timeColumn.valuesIncludingErrorValues\n        const matchingIndices = new Set<number>()\n        indexMap.forEach((indices) =>\n            [_.minBy, _.maxBy]\n                .map((f) => f(indices, (index) => timeValues[index]))\n                .filter(isPresent)\n                .forEach((index) => matchingIndices.add(index))\n        )\n        return this.columnFilter(\n            timeColumn.slug,\n            (row, index) => matchingIndices.has(index),\n            `Keep minTime & maxTime rows only for each entity`\n        )\n    }\n\n    private getAverageAnnualChangeIndicesByEntity(\n        columnSlugs: ColumnSlug[]\n    ): Map<EntityName, [number, number]> {\n        const columns = columnSlugs.map((slug) => this.get(slug))\n        const indexMap = this.rowIndicesByEntityName\n        const timeValues = this.timeColumn.valuesIncludingErrorValues\n\n        // Find indices of min & max rows\n        const entityNameToIndices = new Map<EntityName, [number, number]>()\n        indexMap.forEach((indices, entityName) => {\n            // We are discarding every row which contains a 0 for any columnSlug.\n            // Technically, to be more correct, we should support distinct min/max indices for each\n            // columnSlug, but that only makes a tiny difference in a tiny subset of charts.\n            const nonZeroValueIndices = indices.filter((index) =>\n                columns.every((col) => {\n                    const value = col.valuesIncludingErrorValues[index]\n                    return _.isNumber(value) && value !== 0\n                })\n            )\n            const minIndex = _.minBy(\n                nonZeroValueIndices,\n                (index) => timeValues[index]\n            )\n            const maxIndex = _.maxBy(indices, (index) => timeValues[index])\n            if (minIndex === undefined || maxIndex === undefined) return\n\n            const allValuePairsHaveDistinctTime = columns.every((col) => {\n                const originalTimes =\n                    this.columnStore[col.originalTimeColumnSlug]\n                return originalTimes[minIndex] !== originalTimes[maxIndex]\n            })\n            if (allValuePairsHaveDistinctTime)\n                entityNameToIndices.set(entityName, [minIndex, maxIndex])\n        })\n\n        return entityNameToIndices\n    }\n\n    toAverageAnnualChangeForEachEntity(columnSlugs: ColumnSlug[]): this {\n        columnSlugs = columnSlugs.filter((slug) => this.has(slug))\n        if (\n            this.timeColumn.isMissing ||\n            !(this.timeColumn instanceof ColumnTypeMap.Year) ||\n            columnSlugs.length === 0\n        )\n            return this\n\n        const columns = columnSlugs.map((slug) => this.get(slug))\n        const entityNameToIndices =\n            this.getAverageAnnualChangeIndicesByEntity(columnSlugs)\n\n        // Overwrite table rows\n        const rows: OwidRow[] = []\n        entityNameToIndices.forEach((indices) => {\n            const [startRow, endRow] = this.rowsAt(indices)\n\n            const newRow: OwidRow = { ...endRow }\n            columns.forEach((col) => {\n                const timeSlug = col.originalTimeColumnSlug\n\n                const startTime = startRow[timeSlug]\n                const endTime = endRow[timeSlug]\n                const yearsElapsed = endTime - startTime\n\n                const startValue = startRow[col.slug]\n                const endValue = endRow[col.slug]\n\n                // Update to average annual change\n                newRow[col.slug] = cagr(startValue, endValue, yearsElapsed)\n\n                // Add original start time column\n                const startTimeSlug = makeOriginalStartTimeSlugFromColumnSlug(\n                    col.slug\n                )\n                newRow[startTimeSlug] = startTime\n            })\n\n            rows.push(newRow)\n        })\n\n        const newDefs: CoreColumnDef[] = [\n            ...replaceDef(\n                this.defs,\n                columns.map((col) =>\n                    toPercentageColumnDef(\n                        col.def,\n                        ColumnTypeNames.PercentChangeOverTime\n                    )\n                )\n            ),\n            ...columns.map((col) => {\n                return {\n                    ...this.timeColumn.def,\n                    slug: makeOriginalStartTimeSlugFromColumnSlug(col.slug),\n                    derivedFrom: {\n                        columnSlug: col.slug,\n                        relationship: \"originalStartTime\",\n                    },\n                } satisfies OwidColumnDef\n            }),\n        ]\n\n        return this.transform(\n            rows,\n            newDefs,\n            `Average annual change for columns: ${columnSlugs.join(\", \")}`,\n            TransformType.UpdateRows\n        )\n    }\n\n    toPrettyCsv(options?: {\n        excludeColumns?: ColumnSlug[]\n        sortBy?: ColumnSlug[]\n        useShortNames?: boolean\n    }): string {\n        const {\n            excludeColumns = [this.entityIdSlug],\n            sortBy = [this.entityNameSlug],\n            useShortNames = false,\n        } = options ?? {}\n\n        const makeShortName = (name: string): string =>\n            name.toLowerCase().replace(/\\s+/g, \"_\")\n\n        const getLabelForColumn = (col: OwidColumn): string => {\n            const def = col.def\n            return useShortNames\n                ? (def.shortName ?? makeShortName(col.nonEmptyDisplayName))\n                : col.nonEmptyDisplayName\n        }\n\n        const formatDataColumnName = (col: OwidColumn): string => {\n            const def = col.def\n\n            let label = getLabelForColumn(col)\n\n            if (def.targetTime !== undefined) {\n                const targetTime = col.formatTime(def.targetTime)\n                label += useShortNames\n                    ? `__in_${targetTime}`\n                    : ` in ${targetTime}`\n            }\n\n            if (def.display?.isProjection)\n                label += useShortNames ? \"__projected\" : \" (Projected)\"\n\n            if (col.def.derivedFrom?.relationship === \"annotations\") {\n                const dataSlug = col.def.derivedFrom.columnSlug\n                const dataColumn = this.get(dataSlug)\n                const suffix = useShortNames\n                    ? \"__annotations\"\n                    : \" (Annotations)\"\n                label = `${getLabelForColumn(dataColumn)}${suffix}`\n            }\n\n            return label\n        }\n\n        const formatTimeColumnName = (col: TimeColumn): string => {\n            const timeString = useShortNames\n                ? makeShortName(col.intervalName)\n                : col.intervalName\n\n            if (col.def.derivedFrom?.relationship === \"originalTime\") {\n                const dataSlug = col.def.derivedFrom.columnSlug\n                const dataColumn = this.get(dataSlug)\n\n                const suffix = useShortNames\n                    ? `__original_${timeString.toLowerCase()}`\n                    : ` (Original ${timeString})`\n\n                return formatDataColumnName(dataColumn) + suffix\n            }\n\n            return timeString\n        }\n\n        const formatColumnName = (col: OwidColumn): string =>\n            col instanceof TimeColumn\n                ? formatTimeColumnName(col)\n                : formatDataColumnName(col)\n\n        return this.dropColumns(excludeColumns)\n            .sortBy(sortBy)\n            .toCsv({ formatColumnName })\n    }\n\n    toCsv(options?: {\n        delimiter?: string\n        formatColumnName?: (col: OwidColumn) => string\n    }): string {\n        const {\n            delimiter = \",\",\n            formatColumnName = (col: OwidColumn): string => col.slug,\n        } = options ?? {}\n\n        const header =\n            this.columnsAsArray\n                .map((col) => csvEscape(formatColumnName(col)))\n                .join(delimiter) + \"\\n\"\n\n        const body = this.rows\n            .map((row) =>\n                this.columnsAsArray.map((col) => {\n                    const value = row[col.slug]\n                    return isNotErrorValue(value)\n                        ? (col.formatForCsv(value) ?? \"\")\n                        : \"\"\n                })\n            )\n            .map((row) => row.join(delimiter))\n            .join(\"\\n\")\n\n        return header + body\n    }\n\n    @imemo get entityNameColorIndex(): Map<EntityName, Color> {\n        return this.valueIndex(\n            this.entityNameSlug,\n            OwidTableSlugs.EntityColor\n        ) as Map<EntityName, Color>\n    }\n\n    getColorForEntityName(entityName: EntityName): Color | undefined {\n        return this.entityNameColorIndex.get(entityName)\n    }\n\n    @imemo get entityNameToCodeMap(): Map<EntityName, string> {\n        return this.valueIndex(this.entityNameSlug, this.entityCodeSlug) as Map<\n            EntityName,\n            string\n        >\n    }\n\n    @imemo get columnDisplayNameToColorMap(): Map<string, Color> {\n        return new Map(\n            this.columnsAsArray\n                .filter((col) => col.def.color)\n                .map((col) => [col.displayName, col.def.color!])\n        )\n    }\n\n    // This assumes the table is sorted where the times for entity names go in asc order.\n    // The whole table does not have to be sorted by time.\n    getLatestValueForEntity(\n        entityName: EntityName,\n        columnSlug: ColumnSlug\n    ): CoreValueType | undefined {\n        const indices = this.rowIndicesByEntityName.get(entityName)\n        if (!indices) return undefined\n        const values = this.get(columnSlug).valuesIncludingErrorValues\n        const descending = indices.toReversed()\n        const index = descending.find(\n            (index) => !(values[index] instanceof ErrorValue)\n        )\n        return index !== undefined ? values[index] : undefined\n    }\n\n    entitiesWith(columnSlugs: ColumnSlug[]): Set<EntityName> {\n        if (!columnSlugs.length) return new Set()\n        if (columnSlugs.length === 1)\n            return new Set(this.get(columnSlugs[0]).uniqEntityNames)\n\n        return intersectionOfSets<EntityName>(\n            columnSlugs.map((slug) => new Set(this.get(slug).uniqEntityNames))\n        )\n    }\n\n    // Retrieves the two columns `columnSlug` and `timeColumnSlug` from the table and\n    // passes their values to the respective interpolation method.\n    // `withAllRows` is expected to be completed and sorted.\n    private interpolate<K extends InterpolationContext>(\n        withAllRows: this,\n        columnSlug: ColumnSlug,\n        timeColumnSlug: ColumnSlug,\n        interpolation: InterpolationProvider<K>,\n        context: K\n    ): { values: CoreValueType[]; times: number[] } {\n        const groupBoundaries = withAllRows.groupBoundaries(this.entityNameSlug)\n        const col = withAllRows.get(columnSlug)\n        const validIndices = col.validRowIndices\n        const newValues = col.valuesIncludingErrorValues.slice()\n        const newTimes = withAllRows\n            .get(timeColumnSlug)\n            .valuesIncludingErrorValues.slice() as Time[]\n        groupBoundaries.forEach((_, index) => {\n            interpolation(\n                newValues,\n                newTimes,\n                validIndices,\n                context,\n                groupBoundaries[index],\n                groupBoundaries[index + 1]\n            )\n        })\n\n        return {\n            values: newValues,\n            times: newTimes,\n        }\n    }\n\n    // TODO generalize `interpolateColumnWithTolerance` and `interpolateColumnLinearly` more\n    // There are finicky details in both of them that complicate this\n    interpolateColumnWithTolerance(\n        columnSlug: ColumnSlug,\n        { toleranceStrategyOverride, toleranceOverride }: ToleranceOptions = {}\n    ): this {\n        // If the column doesn't exist, return the table unchanged.\n        if (!this.has(columnSlug)) return this\n\n        const column = this.get(columnSlug)\n        const columnDef = column.def\n        const tolerance = toleranceOverride ?? column.tolerance ?? 0\n        const toleranceStrategy =\n            toleranceStrategyOverride ??\n            column.toleranceStrategy ??\n            ToleranceStrategy.closest\n\n        const timeColumnOfTable = !this.timeColumn.isMissing\n            ? this.timeColumn\n            : // CovidTable does not have a day or year column so we need to use time.\n              this.get(OwidTableSlugs.Time)\n\n        const maybeTimeColumnOfValue =\n            getOriginalTimeColumnSlug(this, columnSlug) ??\n            timeColumnSlugFromColumnDef(columnDef)\n        const timeColumnOfValue = this.get(maybeTimeColumnOfValue)\n        const originalTimeSlug = makeOriginalTimeSlugFromColumnSlug(columnSlug)\n\n        let columnStore: CoreColumnStore\n        if (tolerance) {\n            const withAllRows = this.complete([\n                this.entityNameSlug,\n                timeColumnOfTable.slug,\n            ]).sortBy([this.entityNameSlug, timeColumnOfTable.slug])\n\n            const interpolateInBothDirections =\n                !toleranceStrategy ||\n                toleranceStrategy === ToleranceStrategy.closest\n            const interpolateBackwards =\n                interpolateInBothDirections ||\n                toleranceStrategy === ToleranceStrategy.backwards\n            const interpolateForwards =\n                interpolateInBothDirections ||\n                toleranceStrategy === ToleranceStrategy.forwards\n\n            const interpolationResult = this.interpolate(\n                withAllRows,\n                columnSlug,\n                timeColumnOfValue.slug,\n                toleranceInterpolation,\n                {\n                    timeToleranceBackwards: interpolateBackwards\n                        ? tolerance\n                        : 0,\n                    timeToleranceForwards: interpolateForwards ? tolerance : 0,\n                }\n            )\n\n            columnStore = {\n                ...withAllRows.columnStore,\n                [columnSlug]: interpolationResult.values,\n                [originalTimeSlug]: interpolationResult.times,\n            }\n        } else {\n            // If there is no tolerance still append the tolerance column\n            columnStore = {\n                ...this.columnStore,\n                [originalTimeSlug]:\n                    timeColumnOfValue.valuesIncludingErrorValues,\n            }\n        }\n\n        return this.transform(\n            columnStore,\n            [\n                ...this.defs,\n                {\n                    ...timeColumnOfValue.def,\n                    slug: originalTimeSlug,\n                    display: { includeInTable: false },\n                    derivedFrom: { columnSlug, relationship: \"originalTime\" },\n                },\n            ],\n            `Interpolated values in column ${columnSlug} with tolerance ${tolerance} and appended column ${originalTimeSlug} with the original times`,\n            TransformType.UpdateColumnDefs\n        )\n    }\n\n    interpolateColumnLinearly(\n        columnSlug: ColumnSlug,\n        extrapolate: boolean = false\n    ): this {\n        // If the column doesn't exist, return the table unchanged.\n        if (!this.has(columnSlug)) return this\n\n        const column = this.get(columnSlug)\n        const columnDef = column.def\n\n        const maybeTimeColumnSlug =\n            getOriginalTimeColumnSlug(this, columnSlug) ??\n            timeColumnSlugFromColumnDef(columnDef)\n        const timeColumn =\n            this.get(maybeTimeColumnSlug) ?? this.get(OwidTableSlugs.Time) // CovidTable does not have a day or year column so we need to use time.\n\n        const originalColumnSlug =\n            makeOriginalValueSlugFromColumnSlug(columnSlug)\n        const originalColumnDef: OwidColumnDef = {\n            ...columnDef,\n            slug: originalColumnSlug,\n            display: { includeInTable: false },\n            derivedFrom: { columnSlug, relationship: \"originalValue\" },\n        }\n\n        // todo: we can probably do this once early in the pipeline so we dont have to do it again since complete and sort can be expensive.\n        const withAllRows = this.complete([\n            this.entityNameSlug,\n            timeColumn.slug,\n        ]).sortBy([this.entityNameSlug, timeColumn.slug])\n\n        const interpolationResult = this.interpolate(\n            withAllRows,\n            columnSlug,\n            timeColumn.slug,\n            linearInterpolation,\n            { extrapolateAtStart: extrapolate, extrapolateAtEnd: extrapolate }\n        )\n\n        const originalValues = withAllRows.has(originalColumnSlug)\n            ? withAllRows.columnStore[originalColumnSlug]\n            : withAllRows.columnStore[columnSlug]\n\n        const columnStore = {\n            ...withAllRows.columnStore,\n            [originalColumnSlug]: originalValues,\n            [columnSlug]: interpolationResult.values,\n        }\n\n        return this.transform(\n            columnStore,\n            [\n                ...this.defs,\n                originalColumnDef,\n                {\n                    ...timeColumn.def,\n                },\n            ],\n            `Interpolated values in column ${columnSlug} linearly and appended column ${originalColumnSlug} with the original values`,\n            TransformType.UpdateColumnDefs\n        )\n    }\n\n    interpolateColumnsByClosestTimeMatch(\n        columnSlugA: ColumnSlug,\n        columnSlugB: ColumnSlug\n    ): this {\n        if (!this.has(columnSlugA) || !this.has(columnSlugB)) return this\n\n        const columnA = this.get(columnSlugA)\n        const columnB = this.get(columnSlugB)\n\n        const toleranceA = columnA.tolerance ?? 0\n        const toleranceB = columnB.tolerance ?? 0\n\n        // If the columns are of mismatching time types, then we can't do any time matching.\n        // This can happen when we have a ScatterPlot with days in one column, and a column with\n        // xOverrideYear.\n        // We also don't need to do any time matching when the tolerance of both columns is 0.\n        if (\n            this.timeColumn.isMissing ||\n            this.timeColumn.slug !== columnA.originalTimeColumnSlug ||\n            this.timeColumn.slug !== columnB.originalTimeColumnSlug ||\n            (toleranceA === 0 && toleranceB === 0)\n        ) {\n            return this\n        }\n\n        const maxDiff = Math.max(toleranceA, toleranceB)\n\n        const withAllRows = this.complete([\n            this.entityNameSlug,\n            this.timeColumn.slug,\n        ]).sortBy([this.entityNameSlug, this.timeColumn.slug])\n\n        // Existing columns\n        const valuesA = withAllRows.get(columnA.slug).valuesIncludingErrorValues\n        const valuesB = withAllRows.get(columnB.slug).valuesIncludingErrorValues\n        const times = withAllRows.timeColumn\n            .valuesIncludingErrorValues as Time[]\n\n        // New columns\n        const newValuesA = new Array(times.length).fill(\n            ErrorValueTypes.NoValueWithinTolerance\n        )\n        const newValuesB = new Array(times.length).fill(\n            ErrorValueTypes.NoValueWithinTolerance\n        )\n        const newTimesA = new Array(times.length).fill(\n            ErrorValueTypes.NoValueWithinTolerance\n        )\n        const newTimesB = new Array(times.length).fill(\n            ErrorValueTypes.NoValueWithinTolerance\n        )\n\n        const groupBoundaries = withAllRows.groupBoundaries(this.entityNameSlug)\n\n        for (let i = 1; i < groupBoundaries.length; i++) {\n            const startIndex = groupBoundaries[i - 1]\n            const endIndex = groupBoundaries[i]\n            const numRows = endIndex - startIndex\n\n            const availableTimesA = []\n            const availableTimesB = []\n\n            for (let index = startIndex; index < endIndex; index++) {\n                if (isNotErrorValue(valuesA[index]))\n                    availableTimesA.push(times[index])\n                if (isNotErrorValue(valuesB[index]))\n                    availableTimesB.push(times[index])\n            }\n\n            if (availableTimesA.length === 0 || availableTimesB.length === 0) {\n                // If one of the columns has no values, we can't do any interpolation\n                continue\n            }\n            if (\n                availableTimesA.length === numRows &&\n                availableTimesB.length === numRows\n            ) {\n                // If all values are available, we can skip the interpolation and just copy all values\n                for (let index = startIndex; index < endIndex; index++) {\n                    newValuesA[index] = valuesA[index]\n                    newValuesB[index] = valuesB[index]\n                    newTimesA[index] = times[index]\n                    newTimesB[index] = times[index]\n                }\n                continue\n            }\n\n            const timePairs = getClosestTimePairs(\n                availableTimesA,\n                availableTimesB,\n                maxDiff\n            )\n            const timeAtoTimeB = new Map(timePairs)\n            const pairedTimesInA = sortNumeric(Array.from(timeAtoTimeB.keys()))\n\n            for (let index = startIndex; index < endIndex; index++) {\n                const currentTime = times[index]\n\n                const candidateTimeA = sortedFindClosest(\n                    pairedTimesInA,\n                    currentTime\n                )\n                if (candidateTimeA === undefined) continue\n\n                if (Math.abs(currentTime - candidateTimeA) > toleranceA)\n                    continue\n\n                const candidateTimeB = timeAtoTimeB.get(candidateTimeA)\n\n                if (\n                    candidateTimeB === undefined ||\n                    Math.abs(currentTime - candidateTimeB) > toleranceB\n                ) {\n                    continue\n                }\n\n                const candidateIndexA = sortedFindClosestIndex(\n                    times,\n                    candidateTimeA,\n                    startIndex,\n                    endIndex\n                )\n\n                const candidateIndexB = sortedFindClosestIndex(\n                    times,\n                    candidateTimeB,\n                    startIndex,\n                    endIndex\n                )\n\n                newValuesA[index] = valuesA[candidateIndexA]\n                newValuesB[index] = valuesB[candidateIndexB]\n                newTimesA[index] = times[candidateIndexA]\n                newTimesB[index] = times[candidateIndexB]\n            }\n        }\n\n        const originalTimeColumnASlug = makeOriginalTimeSlugFromColumnSlug(\n            columnA.slug\n        )\n        const originalTimeColumnBSlug = makeOriginalTimeSlugFromColumnSlug(\n            columnB.slug\n        )\n\n        const columnStore = {\n            ...withAllRows.columnStore,\n            [columnA.slug]: newValuesA,\n            [columnB.slug]: newValuesB,\n            [originalTimeColumnASlug]: newTimesA,\n            [originalTimeColumnBSlug]: newTimesB,\n        }\n\n        return withAllRows.transform(\n            columnStore,\n            [\n                ...withAllRows.defs,\n                {\n                    ...withAllRows.timeColumn.def,\n                    slug: originalTimeColumnASlug,\n                    derivedFrom: {\n                        columnSlug: columnA.slug,\n                        relationship: \"originalTime\",\n                    },\n                },\n                {\n                    ...withAllRows.timeColumn.def,\n                    slug: originalTimeColumnBSlug,\n                    derivedFrom: {\n                        columnSlug: columnB.slug,\n                        relationship: \"originalTime\",\n                    },\n                },\n            ],\n            `Interpolated values`,\n            TransformType.UpdateColumnDefs\n        )\n    }\n\n    sampleEntityName(howMany = 1): any[] {\n        return this.availableEntityNames.slice(0, howMany)\n    }\n\n    get isBlank(): boolean {\n        return !this.numRows\n    }\n}\n\nconst BLANK_TABLE_MESSAGE = `Table is empty.`\n\n// This just assures that even an emtpty OwidTable will have an entityName column. Probably a cleaner way to do this pattern (add a defaultColumns prop??)\nexport const BlankOwidTable = (\n    tableSlug = `blankOwidTable`,\n    extraTableDescription = \"\"\n): OwidTable =>\n    new OwidTable(\n        undefined,\n        [\n            { slug: OwidTableSlugs.EntityName },\n            { slug: OwidTableSlugs.Year, type: ColumnTypeNames.Year },\n        ],\n        {\n            tableDescription: BLANK_TABLE_MESSAGE + extraTableDescription,\n            tableSlug,\n        }\n    )\n","export class InteractionState {\n    /**\n     * Whether the series is currently interacted with\n     */\n    private readonly _isInteractedWith: boolean = false\n\n    /**\n     * Whether _any_ series in a chart is currently interacted with\n     */\n    private readonly _isInteractionModeActive: boolean = false\n\n    /**\n     * If `isInteractedWith` is true, then the given series is currently active,\n     * (typically hovered or focused). If `isInteractionModeActive` is true, then\n     * _any_ series in the chart is currently interacted with.\n     *\n     * If `isInteractedWith` is true, then `isInteractionModeActive` must also\n     * be true. If the series isn't currently interacted with, `isInteractionModeActive`\n     * can either be true (some other series is interacted with) or false\n     * (no series is interacted with).\n     */\n    constructor(isInteractedWith = false, isInteractionModeActive?: boolean) {\n        this._isInteractedWith = isInteractedWith\n        this._isInteractionModeActive = isInteractedWith\n            ? true // Must be active if the series is currently interacted with\n            : (isInteractionModeActive ?? isInteractedWith)\n    }\n\n    /**\n     * Creates an InteractionState by comparing a given value against the\n     * currently active value\n     */\n    static for<T>(\n        currentValue: T | undefined,\n        activeValue: T | undefined\n    ): InteractionState {\n        const isInteractedWith =\n            activeValue !== undefined && currentValue === activeValue\n        const isInteractionModeActive = activeValue !== undefined\n        return new InteractionState(isInteractedWith, isInteractionModeActive)\n    }\n\n    /**\n     * Whether the chart is in an idle state, i.e. no series are currently\n     * being interacted with\n     */\n    get idle(): boolean {\n        return !this._isInteractionModeActive\n    }\n\n    /**\n     * Whether the series is currently interacted with\n     */\n    get active(): boolean {\n        return this._isInteractedWith\n    }\n\n    /**\n     * Whether the series is in the foreground, i.e. either the chart isn't\n     * currently interacted with (i.e. all series are in the foreground by\n     * default) or the series itself is currently interacted with\n     */\n    get foreground(): boolean {\n        return !this._isInteractionModeActive || this._isInteractedWith\n    }\n\n    /**\n     * Whether the series is in the background, i.e. the chart is currently\n     * interacted with, but the given series isn't\n     */\n    get background(): boolean {\n        return this._isInteractionModeActive && !this._isInteractedWith\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport {\n    Bounds,\n    Box,\n    excludeUndefined,\n    getRegionByName,\n    Url,\n} from \"@ourworldindata/utils\"\nimport {\n    SeriesStrategy,\n    EntityName,\n    SeriesName,\n    ColumnSlug,\n    GrapherTabName,\n    GRAPHER_TAB_NAMES,\n    ProjectionColumnInfo,\n    CoreValueType,\n    PrimitiveType,\n    ColumnTypeNames,\n    Time,\n    SortBy,\n    SortConfig,\n    SortOrder,\n    OwidVariableRow,\n    TimeInterval,\n} from \"@ourworldindata/types\"\nimport { LineChartSeries } from \"../lineCharts/LineChartConstants\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { ChartManager } from \"./ChartManager\"\nimport {\n    SVG_FONT_FAMILY,\n    SVG_STYLE_PROPS,\n    BASE_FONT_SIZE,\n    Patterns,\n    makePatternId,\n    GRAPHER_IMAGE_WIDTH_1X,\n    GRAPHER_IMAGE_WIDTH_2X,\n    FontSettings,\n} from \"../core/GrapherConstants\"\nimport { ChartSeries } from \"./ChartInterface\"\nimport {\n    CoreColumn,\n    ErrorValueTypes,\n    isNotErrorValueOrEmptyCell,\n    OwidTable,\n} from \"@ourworldindata/core-table\"\nimport { GRAPHER_BACKGROUND } from \"../color/ColorConstants\"\nimport { InteractionState } from \"../interaction/InteractionState\"\n\nimport * as R from \"remeda\"\n\nexport const autoDetectYColumnSlugs = (manager: ChartManager): string[] => {\n    if (manager.yColumnSlugs?.length) return manager.yColumnSlugs\n    if (manager.yColumnSlug) return [manager.yColumnSlug]\n    return manager.table.numericColumnSlugs\n}\n\nexport const getDefaultFailMessage = (manager: ChartManager): string => {\n    if (manager.table.rootTable.isBlank) return `No table loaded yet`\n    if (manager.table.rootTable.entityNameColumn.isMissing)\n        return `Table is missing an EntityName column`\n    if (manager.table.rootTable.timeColumn.isMissing)\n        return `Table is missing a Time column`\n    const yColumnSlugs = autoDetectYColumnSlugs(manager)\n    if (!yColumnSlugs.length) return \"Missing Y axis column\"\n    const selection = makeSelectionArray(manager.selection)\n    if (!selection.hasSelection) return `No ${manager.entityType} selected`\n    return \"\"\n}\n\nexport const getSeriesKey = (\n    series: LineChartSeries,\n    index: number\n): string => {\n    return `${series.seriesName}-${series.color}-${\n        series.isProjection ? \"projection\" : \"\"\n    }-${index}`\n}\n\nexport const autoDetectSeriesStrategy = (\n    manager: ChartManager,\n    handleProjections: boolean = false\n): SeriesStrategy => {\n    if (manager.seriesStrategy) return manager.seriesStrategy\n\n    let columnThreshold: number = 1\n\n    if (handleProjections && manager.transformedTable) {\n        const yColumnSlugs = autoDetectYColumnSlugs(manager)\n        const yColumns = yColumnSlugs.map((slug) =>\n            manager.transformedTable!.get(slug)\n        )\n        const hasNormalAndProjectedSeries =\n            yColumns.some((col) => col.isProjection) &&\n            yColumns.some((col) => !col.isProjection)\n        if (hasNormalAndProjectedSeries) {\n            columnThreshold = 2\n        }\n    }\n\n    return autoDetectYColumnSlugs(manager).length > columnThreshold\n        ? SeriesStrategy.column\n        : SeriesStrategy.entity\n}\n\nexport interface ClipPath {\n    id: string\n    element: React.ReactElement\n}\n\nexport const makeClipPath = (props: {\n    name?: string\n    renderUid: number\n    box: Box\n}): {\n    id: string\n    element: React.ReactElement\n} => {\n    const name = props.name ?? \"boundsClip\"\n    const id = `${name}-${props.renderUid}`\n    return {\n        id: `url(#${id})`,\n        element: (\n            <defs>\n                <clipPath id={id}>\n                    <rect {...props.box}></rect>\n                </clipPath>\n            </defs>\n        ),\n    }\n}\n\nexport const makeSelectionArray = (\n    selection?: SelectionArray | EntityName[]\n): SelectionArray =>\n    selection instanceof SelectionArray\n        ? selection\n        : new SelectionArray(selection ?? [])\n\nexport function getShortNameForEntity(entityName: string): string | undefined {\n    const region = getRegionByName(entityName)\n    return region?.shortName\n}\n\nexport function isTargetOutsideElement(\n    target: EventTarget,\n    element: Node\n): boolean {\n    const targetNode = target as Node\n    return (\n        !element.contains(targetNode) &&\n        // check that the target is still mounted to the document (we also get\n        // click events on nodes that have since been removed by React)\n        document.contains(targetNode)\n    )\n}\n\nexport function getHoverStateForSeries(\n    series: ChartSeries,\n    props: {\n        hoveredSeriesNames: SeriesName[]\n        // Usually the hover mode is active when there is\n        // at least one hovered element. But sometimes the hover\n        // mode might be active although there are no hovered elements.\n        // For example, when the facet legend is hovered but a particular\n        // chart doesn't plot the hovered element.\n        isHoverModeActive?: boolean\n    }\n): InteractionState {\n    const hoveredSeriesNames = props.hoveredSeriesNames\n    const isHoverModeActive =\n        props.isHoverModeActive ?? hoveredSeriesNames.length > 0\n\n    const isActive = hoveredSeriesNames.includes(series.seriesName)\n\n    return new InteractionState(isActive, isHoverModeActive)\n}\n\n/** Useful for sorting series by their interaction state */\nexport function byHoverThenFocusState(series: {\n    hover: InteractionState\n    focus: InteractionState\n}): number {\n    // active series rank highest and hover trumps focus\n    if (series.hover.active) return 4\n    if (series.focus.active) return 3\n\n    // series in their default state rank in the middle\n    if (!series.hover.background && !series.focus.background) return 2\n\n    // background series rank lowest\n    return 1\n}\n\n/**\n * Given a URL for a CF function grapher thumbnail, generate a srcSet for the image at different widths\n * @param defaultSrc - `https://ourworldindata.org/grapher/thumbnail/life-expectancy.png?tab=chart`\n * @returns srcSet - `https://ourworldindata.org/grapher/thumbnail/life-expectancy.png?tab=chart&imWidth=850 850w, https://ourworldindata.org/grapher/thumbnail/life-expectancy.png?tab=chart&imWidth=1700 1700w`\n */\nexport function generateGrapherImageSrcSet(defaultSrc: string): string {\n    const url = Url.fromURL(defaultSrc)\n    const existingQueryParams = url.queryParams\n    const imWidths = [\n        GRAPHER_IMAGE_WIDTH_1X.toString(),\n        GRAPHER_IMAGE_WIDTH_2X.toString(),\n    ]\n    const srcSet = imWidths\n        .map((imWidth) => {\n            return `${url.setQueryParams({ ...existingQueryParams, imWidth }).fullUrl} ${imWidth}w`\n        })\n        .join(\", \")\n\n    return srcSet\n}\n\nexport const isChartTab = (tab: GrapherTabName): boolean =>\n    tab !== GRAPHER_TAB_NAMES.Table && tab !== GRAPHER_TAB_NAMES.WorldMap\n\nexport const isMapTab = (tab: GrapherTabName): boolean =>\n    tab === GRAPHER_TAB_NAMES.WorldMap\n\nexport function combineHistoricalAndProjectionColumns(\n    table: OwidTable,\n    info: ProjectionColumnInfo,\n    options?: { shouldAddIsProjectionColumn: boolean }\n): OwidTable {\n    const {\n        historicalSlug,\n        projectedSlug,\n        combinedSlug,\n        slugForIsProjectionColumn,\n    } = info\n\n    const transformFn = (\n        row: Record<ColumnSlug, { value: CoreValueType; time: Time }>,\n        time: Time\n    ): { isProjection: boolean; value: PrimitiveType } | undefined => {\n        // It's possible to have both a historical and a projected value\n        // for a given year. In that case, we prefer the historical value.\n\n        const historical = row[historicalSlug]\n        const projected = row[projectedSlug]\n\n        const historicalTimeDiff = Math.abs(historical.time - time)\n        const projectionTimeDiff = Math.abs(projected.time - time)\n\n        if (\n            isNotErrorValueOrEmptyCell(historical.value) &&\n            // If tolerance was applied to the historical column, we need to\n            // make sure the interpolated historical value doesn't get picked\n            // over the actual projected value\n            historicalTimeDiff <= projectionTimeDiff\n        )\n            return { value: historical.value, isProjection: false }\n\n        if (isNotErrorValueOrEmptyCell(projected.value)) {\n            return { value: projected.value, isProjection: true }\n        }\n\n        return undefined\n    }\n\n    // Combine the historical and projected values into a single column\n    table = table.combineColumns(\n        [projectedSlug, historicalSlug],\n        { ...table.get(projectedSlug).def, slug: combinedSlug },\n        (row, time) =>\n            transformFn(row, time)?.value ??\n            ErrorValueTypes.MissingValuePlaceholder\n    )\n\n    // Add a column indicating whether the value is a projection or not\n    if (options?.shouldAddIsProjectionColumn)\n        table = table.combineColumns(\n            [projectedSlug, historicalSlug],\n            {\n                slug: slugForIsProjectionColumn,\n                type: ColumnTypeNames.Boolean,\n            },\n            (row, time) =>\n                transformFn(row, time)?.isProjection ??\n                ErrorValueTypes.MissingValuePlaceholder\n        )\n\n    return table\n}\n\nexport function NoDataPattern({\n    patternId = Patterns.noDataPattern,\n    scale = 1,\n}: {\n    patternId?: string\n    scale?: number\n}): React.ReactElement {\n    const roundedScale = R.round(scale, 3)\n    const patternTransforms = excludeUndefined([\n        `rotate(-45 2 2)`,\n        roundedScale !== 1 ? `scale(${roundedScale})` : undefined,\n    ])\n    return (\n        <pattern\n            id={patternId}\n            patternUnits=\"userSpaceOnUse\"\n            width=\"4\"\n            height=\"4\"\n            patternTransform={patternTransforms.join(\" \")}\n        >\n            <path d=\"M -1,2 l 6,0\" stroke=\"#ccc\" strokeWidth={0.7} />\n        </pattern>\n    )\n}\n\nexport function ChartPatternDefs({\n    scale = 1,\n    idSuffix,\n}: {\n    scale?: number\n    idSuffix?: string\n}): React.ReactElement {\n    return (\n        <defs>\n            <NoDataPattern\n                patternId={makePatternId(Patterns.noDataPattern, idSuffix)}\n                scale={scale}\n            />\n        </defs>\n    )\n}\n\nexport function getChartSvgProps({\n    fontSize,\n}: {\n    fontSize?: number\n}): React.SVGProps<SVGSVGElement> {\n    return {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        version: \"1.1\",\n        fontFamily: SVG_FONT_FAMILY,\n        fontSize: fontSize ?? BASE_FONT_SIZE,\n        style: {\n            ...SVG_STYLE_PROPS,\n            // Needs to be set here or else pngs will have a black or\n            // transparent background; resvg in the cloudflare functions\n            // relies on it to paint the png background, too\n            backgroundColor: GRAPHER_BACKGROUND,\n        },\n    }\n}\n\nexport type SortKeyFn<T> = (item: T) => number | string | undefined\n\n/** A sort key that leaves items in their input order */\nexport const keepInputOrder = Symbol(\"keepInputOrder\")\n\nexport type SortKey<T> = SortKeyFn<T> | SortKeyFn<T>[] | typeof keepInputOrder\n\nexport type SortKeyFunctions<T> = Partial<Record<SortBy, SortKey<T>>>\n\n/** Sort key that orders items by their value in `sortColumn` */\nexport function sortByColumnValue<T>(\n    sortColumn: CoreColumn | undefined,\n    getEntityName: (item: T) => EntityName\n): SortKeyFn<T> {\n    return (item) =>\n        sortColumn?.latestValueByEntityName.get(getEntityName(item)) ?? 0\n}\n\nexport function sortByConfig<T>(\n    items: readonly T[],\n    sortConfig: SortConfig,\n    keyFns: SortKeyFunctions<T>\n): T[] {\n    const sortByKey = sortConfig.sortBy ?? SortBy.total\n    const sortByFunc = keyFns[sortByKey] ?? keepInputOrder\n    const sortOrder = sortConfig.sortOrder ?? SortOrder.desc\n\n    if (sortByFunc === keepInputOrder)\n        return sortOrder === SortOrder.desc ? items.toReversed() : [...items]\n\n    const sortedRows = _.sortBy(items, sortByFunc)\n\n    return sortOrder === SortOrder.desc ? sortedRows.toReversed() : sortedRows\n}\n\nexport function textWidth(text: string, fontSettings: FontSettings): number {\n    return Bounds.forText(text, fontSettings).width\n}\n\nexport function roundFontSize(fontSize: number): number {\n    return Math.round(fontSize * 2) / 2\n}\n\nexport function scaleFontSize(\n    sizeAtBase16: number,\n    baseFontSize: number\n): number {\n    return roundFontSize((sizeAtBase16 / BASE_FONT_SIZE) * baseFontSize)\n}\n\n/**\n * Checks whether a pair of observations spanning two points in time is valid\n * given tolerance\n */\nexport function isToleranceDistanceValid(args: {\n    start: OwidVariableRow<number>\n    end: OwidVariableRow<number>\n    tolerance: number\n}): boolean {\n    const { start, end, tolerance } = args\n\n    if (start.originalTime >= end.originalTime) return false\n\n    const isToleranceAppliedToStart = start.originalTime !== start.time\n    const isToleranceAppliedToEnd = end.originalTime !== end.time\n    if (!isToleranceAppliedToStart && !isToleranceAppliedToEnd) return true\n\n    const minRequiredGap = Math.min(tolerance, end.time - start.time)\n    return end.originalTime - start.originalTime >= minRequiredGap\n}\n\nexport function formatTimeSpan(count: number, interval: TimeInterval): string {\n    return count === 1 ? `a ${interval}` : `${count} ${interval}s`\n}\n","import * as React from \"react\"\nimport cx from \"clsx\"\nimport { action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { BodyPortal } from \"@ourworldindata/components\"\nimport { isTargetOutsideElement } from \"../chart/ChartUtils\"\n\ninterface FullScreenProps {\n    children: React.ReactNode\n    onDismiss: () => void\n    isDimmed?: boolean\n}\n\n@observer\nexport class FullScreen extends React.Component<FullScreenProps> {\n    content = React.createRef<HTMLDivElement>()\n\n    constructor(props: FullScreenProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @action.bound onDocumentClick(e: React.MouseEvent): void {\n        if (\n            this.content?.current &&\n            isTargetOutsideElement(e.target, this.content.current)\n        )\n            this.props.onDismiss()\n    }\n\n    @action.bound onDocumentKeyDown(e: KeyboardEvent): void {\n        if (e.key === \"Escape\") this.props.onDismiss()\n    }\n\n    override componentDidMount(): void {\n        document.addEventListener(\"keydown\", this.onDocumentKeyDown)\n    }\n\n    override componentWillUnmount(): void {\n        document.removeEventListener(\"keydown\", this.onDocumentKeyDown)\n    }\n\n    override render() {\n        return (\n            <BodyPortal>\n                <div\n                    className={cx(\"FullScreenOverlay\", {\n                        \"FullScreenOverlay--dimmed\": this.props.isDimmed,\n                    })}\n                    role=\"dialog\"\n                    aria-modal=\"true\"\n                    onClick={this.onDocumentClick}\n                >\n                    <div className=\"FullScreenContent\" ref={this.content}>\n                        {this.props.children}\n                    </div>\n                </div>\n            </BodyPortal>\n        )\n    }\n}\n","import * as React from \"react\"\nimport {\n    GrapherTooltipAnchor,\n    GrapherTrendArrowDirection,\n} from \"@ourworldindata/utils\"\n// Structural stand-in for mobx's IObservableValue, so the published type\n// declarations don't require mobx to be installed.\nexport interface ObservableValue<T> {\n    get(): T\n    set(value: T): void\n}\n\nexport interface TooltipManager {\n    // We can't pass the property directly because we need it to be observable\n    tooltip?: ObservableValue<TooltipProps | undefined>\n}\n\n/**\n * Controls the fade transition behavior for tooltips.\n * - \"delayed\": Good for charts with gaps between targetable areas\n * - \"immediate\": Better if the tooltip is displayed for all points in the chart's bounds\n * - \"none\": Disables the fade transition altogether\n */\nexport type TooltipFadeMode = \"delayed\" | \"immediate\" | \"none\"\n\nexport enum TooltipFooterIcon {\n    Notice = \"notice\",\n    Stripes = \"stripes\",\n    Significance = \"significance\",\n    None = \"none\",\n}\n\nexport interface FooterItem {\n    icon: TooltipFooterIcon\n    text: string\n}\n\nexport interface TooltipProps {\n    id: number | string\n    x?: number\n    y?: number\n    offsetX?: number\n    offsetY?: number\n    offsetXDirection?: \"left\" | \"right\"\n    offsetYDirection?: \"upward\" | \"downward\"\n    title?: string | number // header text\n    titleAnnotation?: string // rendered next to the title, but muted\n    subtitle?: string | number // header deck\n    subtitleFormat?: \"notice\" | \"unit\" // optional postprocessing for subtitle\n    footer?: FooterItem[]\n    style?: React.CSSProperties // css overrides (particularly width/maxWidth)\n    dissolve?: TooltipFadeMode // flag that the tooltip should begin fading out\n    children?: React.ReactNode\n    dismiss?: () => void\n}\n\nexport interface TooltipValueProps {\n    label?: string\n    unit?: string\n    value?: React.ReactNode\n    color?: string\n    isProjection?: boolean\n    originalTime?: string // actual year data was drawn from (when ≠ target year)\n    showSignificanceSuperscript?: boolean // show significance-s superscript if applicable\n    labelVariant?: \"label+unit\" | \"unit-only\"\n    noDataLabel?: string\n    detail?: string // secondary line under the value\n}\n\nexport interface TooltipValueRangeProps {\n    label?: string\n    unit?: string\n    values: [string | undefined, string | undefined]\n    trend?: GrapherTrendArrowDirection\n    colors?: string[] // value colors, matched by indices\n    arrowColor?: string // explicit color for the trend arrow\n    originalTimes?: (string | undefined)[] // actual year data was drawn from (when ≠ target year)\n    showSignificanceSuperscript?: boolean // show significance-s superscript if applicable\n    labelVariant?: \"label+unit\" | \"unit-only\"\n}\n\nexport interface TooltipTableProps {\n    columns: TooltipTableColumn[]\n    rows: TooltipTableRow[]\n    totals?: (number | undefined)[]\n}\n\ninterface TooltipTableColumn {\n    label: string\n    formatValue: (value: unknown) => string\n}\n\ninterface TooltipTableRow {\n    name: string\n    annotation?: string\n    swatch?: {\n        color?: string // css color string for the series's swatch\n        opacity?: number\n    }\n    focused?: boolean // highlighted (based on hovered series in chart)\n    blurred?: boolean // greyed out (typically due to missing data)\n    striped?: boolean // use textured swatch (to show data is extrapolated)\n    originalTime?: string // actual year data was drawn (when ≠ target year)\n    values: (string | number | undefined)[]\n}\n\nexport interface TooltipVariableProps {\n    label?: string\n    unit?: string\n    color?: string\n    isProjection?: boolean\n    originalTimes?: (string | undefined)[]\n    labelVariant?: \"label+unit\" | \"unit-only\"\n    detail?: string\n    children?: React.ReactNode\n}\n\nexport interface TooltipTableData {\n    value: number\n    fake?: boolean\n}\n\nexport interface TooltipContainerProps {\n    containerBounds?: { width: number; height: number }\n    anchor?: GrapherTooltipAnchor\n}\n\nexport const TooltipContext = React.createContext<\n    Pick<TooltipContainerProps, \"anchor\">\n>({})\n","export function makeAxisLabel({\n    label,\n    displayUnit,\n}: {\n    label: string\n    displayUnit?: string\n}): {\n    mainLabel: string // shown in bold\n    unit?: string // shown in normal weight, usually in parens\n} {\n    // No unit to display\n    if (!displayUnit) return { mainLabel: label }\n\n    // Extract text in parens at the end of the label,\n    // e.g. \"Population (millions)\" is split into \"Population \" and \"(millions)\"\n    const [\n        _fullMatch,\n        untrimmedMainLabelText = undefined,\n        labelTextInParens = undefined,\n    ] = label.trim().match(/^(.*?)(\\([^()]*\\))?$/s) ?? []\n    const mainLabelText = untrimmedMainLabelText?.trim() ?? \"\"\n\n    // Don't show unit twice if it's contained in the label\n    const displayLabel =\n        labelTextInParens === `(${displayUnit})` ? mainLabelText : label\n\n    return { mainLabel: displayLabel, unit: displayUnit }\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport classnames from \"clsx\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faInfoCircle, faS } from \"@fortawesome/free-solid-svg-icons\"\nimport { formatInlineList, GrapherTooltipAnchor } from \"@ourworldindata/utils\"\nimport { GrapherTrendArrow } from \"@ourworldindata/components\"\nimport {\n    TooltipValueProps,\n    TooltipValueRangeProps,\n    TooltipContext,\n    TooltipTableProps,\n    TooltipVariableProps,\n} from \"./TooltipProps\"\nimport { makeAxisLabel } from \"../axis/AxisUtils.js\"\nimport * as R from \"remeda\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\n\ntype TooltipValueType = number | string | undefined\n\nconst NO_DATA_LABEL = \"No data\"\nexport const NO_DATA_COLOR = \"#999\"\n\nexport function TooltipValue({\n    label,\n    unit,\n    value,\n    color,\n    originalTime,\n    isProjection,\n    labelVariant = \"label+unit\",\n    showSignificanceSuperscript,\n    noDataLabel = NO_DATA_LABEL,\n    detail,\n}: TooltipValueProps): React.ReactElement {\n    const hasNoData = value === undefined || value === null\n    const displayValue = value || noDataLabel\n    const displayColor = hasNoData ? NO_DATA_COLOR : color\n\n    const superscript = showSignificanceSuperscript ? (\n        <SignificanceIcon asSuperscript={true} />\n    ) : null\n\n    return (\n        <Variable\n            label={label}\n            unit={unit}\n            color={displayColor}\n            isProjection={isProjection}\n            originalTimes={originalTime ? [originalTime] : undefined}\n            labelVariant={labelVariant}\n            detail={detail}\n        >\n            <span>\n                {displayValue}\n                {superscript}\n            </span>\n        </Variable>\n    )\n}\n\nexport function TooltipValueRange({\n    label,\n    unit,\n    values,\n    colors,\n    arrowColor,\n    originalTimes,\n    trend,\n    labelVariant = \"label+unit\",\n    showSignificanceSuperscript,\n}: TooltipValueRangeProps): React.ReactElement | null {\n    const [firstTerm, lastTerm] = values\n\n    if (firstTerm === undefined && lastTerm === undefined) return null\n\n    const superscript = showSignificanceSuperscript ? (\n        <SignificanceIcon asSuperscript={true} />\n    ) : null\n\n    // Use the explicit arrow color if given; otherwise use a neutral color\n    // when the value terms are colored, or fallback to semantic coloring\n    const trendArrowColor = arrowColor ?? (colors ? \"#787878\" : undefined)\n\n    return (\n        <Variable\n            label={label}\n            unit={unit}\n            originalTimes={originalTimes}\n            labelVariant={labelVariant}\n        >\n            <span className=\"range\">\n                <span className=\"term\">\n                    <span style={{ color: colors?.[0] }}>{firstTerm}</span>\n                    {!lastTerm && superscript}\n                </span>\n                {trend && (\n                    <GrapherTrendArrow\n                        direction={trend}\n                        color={trendArrowColor}\n                    />\n                )}\n                {lastTerm && (\n                    <span className=\"term\">\n                        <span style={{ color: colors?.[1] }}>{lastTerm}</span>\n                        {superscript}\n                    </span>\n                )}\n            </span>\n        </Variable>\n    )\n}\n\nfunction Variable({\n    label,\n    unit,\n    children,\n    color,\n    originalTimes,\n    isProjection,\n    labelVariant = \"label+unit\",\n    detail,\n}: TooltipVariableProps): React.ReactElement {\n    const { mainLabel: columnName, unit: formattedUnit } = makeAxisLabel({\n        label: label || \"\",\n        displayUnit: unit,\n    })\n\n    const displayOriginalTimes =\n        _.uniq((originalTimes ?? []).filter((t) => t !== undefined)).join(\n            \"\\u2013\"\n        ) || null\n\n    return (\n        <div\n            className={classnames(\"variable\", {\n                \"variable--no-name\": labelVariant === \"unit-only\",\n            })}\n        >\n            <div className=\"definition\">\n                {columnName && <span className=\"name\">{columnName}</span>}\n                {formattedUnit && formattedUnit.length > 1 && (\n                    <span className=\"unit\">{formattedUnit}</span>\n                )}\n                {isProjection && (\n                    <span className=\"projection\">projected data</span>\n                )}\n            </div>\n            <div className=\"values\" style={{ color }}>\n                {children}\n                {displayOriginalTimes && (\n                    <span className=\"time-notice\">\n                        <FontAwesomeIcon icon={faInfoCircle} />\n                        {displayOriginalTimes}\n                    </span>\n                )}\n            </div>\n            {detail && <div className=\"detail\">{detail}</div>}\n        </div>\n    )\n}\n\nexport function TooltipTable({\n    columns,\n    rows,\n    totals = [],\n}: TooltipTableProps): React.ReactElement | null {\n    const context = React.useContext(TooltipContext)\n    const focal = rows.some((row) => row.focused)\n    const swatched = rows.some((row) => row.swatch)\n\n    const tooEmpty =\n        rows.length < 2 ||\n        totals.every((value) => value === undefined) ||\n        rows.some(({ values }) => values.every((value) => value === undefined))\n    const tooTrivial = R.zip(columns, totals).every(\n        ([column, total]) => !!column?.formatValue(total).match(/^100(\\.0+)?%/)\n    )\n    const showTotals = totals && !(tooEmpty || tooTrivial)\n\n    // if the tooltip is pinned to the bottom, show the total at the top,\n    // so that it's always visible even if the tooltip is scrollable\n    const showTotalsAtTop = context?.anchor === GrapherTooltipAnchor.Bottom\n\n    const totalsCells = R.zip(columns, totals).map(([column, total]) => (\n        <td key={column?.label} className=\"series-value\">\n            {column && total !== undefined ? column.formatValue(total) : null}\n        </td>\n    ))\n\n    return (\n        <table className={classnames(\"series-list\", { focal, swatched })}>\n            {columns.length > 1 && (\n                <thead>\n                    <tr>\n                        <td className=\"series-color\"></td>\n                        <td className=\"series-name\"></td>\n                        {columns.map((column) => (\n                            <td className=\"series-value\" key={column.label}>\n                                {column.label}\n                            </td>\n                        ))}\n                    </tr>\n                </thead>\n            )}\n            <tbody>\n                {showTotals && showTotalsAtTop && (\n                    <>\n                        <tr className=\"total--top\">\n                            <td className=\"series-color\"></td>\n                            <td className=\"series-name\">Total</td>\n                            {totalsCells}\n                        </tr>\n                        <tr className=\"spacer\"></tr>\n                    </>\n                )}\n                {rows.map((row) => {\n                    const {\n                        name,\n                        focused,\n                        blurred,\n                        striped,\n                        annotation,\n                        values,\n                        originalTime,\n                        swatch = {},\n                    } = row\n                    const {\n                        color: swatchColor = \"transparent\",\n                        opacity: swatchOpacity = 1,\n                    } = swatch\n\n                    const [_m, seriesName, seriesParenthetical] =\n                        name.trim().match(/^(.*?)(\\([^()]*\\))?$/) ?? []\n\n                    return (\n                        <tr\n                            key={name}\n                            className={classnames({\n                                focused,\n                                blurred,\n                                striped,\n                            })}\n                        >\n                            <td className=\"series-color\">\n                                <div\n                                    className=\"swatch\"\n                                    style={{\n                                        backgroundColor: swatchColor,\n                                        opacity: swatchOpacity,\n                                    }}\n                                />\n                            </td>\n                            <td className=\"series-name\">\n                                {seriesName}\n                                {seriesParenthetical && (\n                                    <span className=\"parenthetical\">\n                                        {seriesParenthetical}\n                                    </span>\n                                )}\n                                {annotation && (\n                                    <span className=\"annotation\">\n                                        {annotation}\n                                    </span>\n                                )}\n                            </td>\n                            {R.zip(columns, values).map(([column, value]) => {\n                                const missing = value === undefined\n                                return column ? (\n                                    <td\n                                        key={column.label}\n                                        className={classnames(\"series-value\", {\n                                            missing,\n                                        })}\n                                    >\n                                        {!missing && column.formatValue(value)}\n                                    </td>\n                                ) : null\n                            })}\n                            {originalTime && (\n                                <td className=\"time-notice\">\n                                    <FontAwesomeIcon icon={faInfoCircle} />{\" \"}\n                                    {originalTime}\n                                </td>\n                            )}\n                        </tr>\n                    )\n                })}\n                {showTotals && !showTotalsAtTop && (\n                    <>\n                        <tr className=\"spacer\"></tr>\n                        <tr className=\"total\">\n                            <td className=\"series-color\"></td>\n                            <td className=\"series-name\">Total</td>\n                            {totalsCells}\n                        </tr>\n                    </>\n                )}\n            </tbody>\n        </table>\n    )\n}\n\nexport function SignificanceIcon({\n    asSuperscript = false,\n}: {\n    asSuperscript?: boolean\n}): React.ReactElement {\n    return (\n        <div\n            className={classnames(\"icon-circled-s\", {\n                \"as-superscript\": asSuperscript,\n            })}\n        >\n            <div className=\"circle\" />\n            <FontAwesomeIcon icon={faS} />\n        </div>\n    )\n}\n\nexport function makeTooltipToleranceNotice(\n    targetTime: string,\n    {\n        plural = false,\n        originalTime,\n    }: { plural?: boolean; originalTime?: string } = {}\n): string {\n    const dataPoint = plural ? \"data points\" : \"data point\"\n    const originalTimeNotice = originalTime ? ` (${originalTime})` : \"\"\n    return `Data not available for ${targetTime}. Showing closest available ${dataPoint}${originalTimeNotice} instead`\n}\n\nexport function makeTooltipRoundingNotice(\n    numSignificantFigures: number[],\n    { plural }: { plural: boolean } = { plural: true }\n): string {\n    const uniqueNumSigFigs = _.uniq(numSignificantFigures)\n    const formattedNumSigFigs = formatInlineList(_.sortBy(uniqueNumSigFigs), {\n        connector: \"or\",\n    })\n\n    const values = plural ? \"Values\" : \"Value\"\n    const are = plural ? \"are\" : \"is\"\n    const figures = formattedNumSigFigs === \"1\" ? \"figure\" : \"figures\"\n    return `${values} ${are} rounded to ${formattedNumSigFigs} significant ${figures}`\n}\n\nexport function toTooltipTableColumns(\n    columns: CoreColumn | CoreColumn[]\n): TooltipTableProps[\"columns\"] {\n    const columnsArray = Array.isArray(columns) ? columns : [columns]\n\n    return columnsArray.map((column) => ({\n        label: column.displayName,\n        formatValue: (value: unknown): string =>\n            column.formatValueShort(value, { trailingZeroes: true }),\n    }))\n}\n\nexport function formatTooltipRangeValues(\n    values: TooltipValueType[],\n    column: CoreColumn,\n    noDataLabel: string = NO_DATA_LABEL\n): [string, string] {\n    const formatTooltipValueShort = (value: TooltipValueType): string =>\n        formatTooltipValue(\n            value,\n            (value) => column.formatValueShort(value),\n            noDataLabel\n        )\n    const formatTooltipValueShortWithAbbreviations = (\n        value: TooltipValueType\n    ): string =>\n        formatTooltipValue(\n            value,\n            (value) => column.formatValueShortWithAbbreviations(value),\n            noDataLabel\n        )\n\n    const [firstValue, lastValue] = values.map((v) =>\n        formatTooltipValueShort(v)\n    )\n\n    const [firstTerm, lastTerm] =\n        // TODO: would be nicer to actually measure the typeset text but we would need to\n        // add Lato's metrics to the `string-pixel-width` module to use Bounds.forText\n        _.sum([firstValue?.length, lastValue?.length]) > 20\n            ? values.map((v) => formatTooltipValueShortWithAbbreviations(v))\n            : [firstValue, lastValue]\n\n    return [firstTerm, lastTerm]\n}\n\nfunction formatTooltipValue(\n    value: TooltipValueType,\n    formatValue: (value: number) => string,\n    noDataLabel: string = NO_DATA_LABEL\n): string {\n    if (value === undefined) return noDataLabel\n    if (typeof value === \"string\") return value\n    return formatValue(value)\n}\n","import { observable, computed, action, makeObservable } from \"mobx\"\nimport { PointVector } from \"@ourworldindata/utils\"\nimport { TooltipFadeMode } from \"./TooltipProps\"\n\nconst TOOLTIP_FADE_DURATION = 400 // $fade-time + $fade-delay in scss\n\ninterface TooltipStateArgs {\n    fade?: TooltipFadeMode\n}\n\nexport class PlainTooltipState<T> {\n    position = new PointVector(0, 0)\n\n    protected _target: T | undefined = undefined\n    protected _timer: number | undefined = undefined\n    protected _fade: TooltipFadeMode\n\n    constructor({ fade }: TooltipStateArgs = {}) {\n        this._fade = fade ?? \"delayed\"\n    }\n\n    get target(): T | undefined {\n        return this._target\n    }\n\n    set target(newTarget: T | null) {\n        this.setTarget(newTarget)\n    }\n\n    get fading(): TooltipFadeMode | undefined {\n        // returns \"delayed\"|\"immediate\" during the timeout after clearing the target\n        return !!this._timer && !!this._target ? this._fade : undefined\n    }\n\n    protected setTarget(newTarget: T | null): void {\n        // delay clearing the target (and hiding the tooltip) for a bit to prevent\n        // flicker when frobbing between neighboring elements and allow an opacity\n        // transition to smoothly fade the tooltip out\n        clearTimeout(this._timer)\n\n        if (newTarget === null) {\n            const speed = { delayed: 1, immediate: 0.5, none: 0 }[this._fade]\n            this._timer = window.setTimeout(\n                () => this.resetTarget(),\n                speed * TOOLTIP_FADE_DURATION\n            )\n        } else {\n            this._target = newTarget\n            this._timer = undefined\n        }\n    }\n\n    protected resetTarget(): void {\n        this._target = undefined\n        this._timer = undefined\n    }\n}\n\nexport class TooltipState<T> extends PlainTooltipState<T> {\n    constructor(args?: TooltipStateArgs) {\n        super(args)\n\n        makeObservable<\n            this,\n            \"_target\" | \"_timer\" | \"setTarget\" | \"resetTarget\"\n        >(this, {\n            // observables\n            position: observable,\n            _target: observable,\n            _timer: observable,\n\n            // computed (getters)\n            target: computed,\n            fading: computed,\n\n            // actions\n            setTarget: action.bound,\n            resetTarget: action.bound,\n        })\n    }\n}\n","import * as React from \"react\"\nimport { faInfoCircle } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport classnames from \"clsx\"\nimport { match } from \"ts-pattern\"\nimport * as R from \"remeda\"\nimport {\n    GrapherTooltipAnchor,\n    stripOuterParentheses,\n} from \"@ourworldindata/utils\"\nimport {\n    TooltipProps,\n    TooltipContainerProps,\n    TooltipContext,\n    TooltipFooterIcon,\n} from \"./TooltipProps\"\nimport { SignificanceIcon } from \"./TooltipContents.js\"\n\nexport class TooltipCard extends React.Component<\n    TooltipProps & TooltipContainerProps\n> {\n    private readonly base = React.createRef<HTMLDivElement>()\n    private tooltipWidth: number = 0\n    private tooltipHeight: number = 0\n\n    /** Re-renders before paint when the size changed, since the position depends on it */\n    private updateDimensions(): void {\n        if (!this.base.current) return\n        const el = this.base.current\n        const width = el.scrollWidth + 2 * el.clientLeft // account for left/right border\n        const height = el.scrollHeight + 2 * el.clientTop // account for top/bottom border\n        if (width === this.tooltipWidth && height === this.tooltipHeight) return\n        this.tooltipWidth = width\n        this.tooltipHeight = height\n        this.forceUpdate()\n    }\n\n    private get tooltipStyle(): React.CSSProperties {\n        const { tooltipWidth, tooltipHeight } = this\n        const {\n            containerBounds,\n            anchor,\n            x = 0,\n            y = 0,\n            offsetX = 0,\n            offsetY = 0,\n        } = this.props\n        const isPinnedToBottom = anchor === GrapherTooltipAnchor.Bottom\n\n        const containerWidth = containerBounds?.width\n        const containerHeight = containerBounds?.height\n\n        const style = { ...this.props.style }\n\n        // if container dimensions are given, we make sure the tooltip\n        // is positioned within the container bounds\n        if (containerWidth && containerHeight && !isPinnedToBottom) {\n            let adjustedOffsetY = offsetY\n            let adjustedOffsetX = offsetX\n\n            if (this.props.offsetYDirection === \"upward\") {\n                adjustedOffsetY = -offsetY - tooltipHeight\n            }\n\n            if (this.props.offsetXDirection === \"left\" && x > tooltipWidth) {\n                adjustedOffsetX = -offsetX - tooltipWidth\n            }\n\n            // Ensure tooltip remains inside chart\n            let left = x + adjustedOffsetX\n            let top = y + adjustedOffsetY\n            if (tooltipHeight && tooltipWidth) {\n                if (left + tooltipWidth > containerWidth)\n                    left -= tooltipWidth + 2 * adjustedOffsetX // flip left\n                if (top + tooltipHeight * 0.75 > containerHeight)\n                    top -= tooltipHeight + 2 * adjustedOffsetY // flip upwards eventually...\n\n                // Clamp to prevent any overflow\n                left = R.clamp(left, {\n                    min: 0,\n                    max: containerWidth - tooltipWidth,\n                })\n                top = R.clamp(top, {\n                    min: 0,\n                    max: containerHeight - tooltipHeight,\n                })\n            }\n\n            style.position = \"absolute\"\n            style.left = left\n            style.top = top\n\n            // Set a max-height to prevent the case where the tooltip contents grow, causing the tooltip to overflow the\n            // container briefly until it is rerendered with the updated bounds. The quickly-appearing scrollbar is\n            // jarring and causes unneeded, brief content reflows and resize events.\n            // The max-height together with overflow: clip prevents the tooltip from overflowing, instead briefly\n            // cutting off content until the bounds are updated in the next render.\n            style.maxHeight = containerHeight - top\n            style.overflow = \"clip\"\n        }\n\n        // ignore the given width and max-width if the tooltip position is fixed\n        // since we want to use the full width of the screen in that case\n        if (isPinnedToBottom && (style.width || style.maxWidth)) {\n            style.width = style.maxWidth = undefined\n        }\n\n        return style\n    }\n\n    override componentDidMount(): void {\n        this.updateDimensions()\n    }\n\n    override componentDidUpdate(): void {\n        this.updateDimensions()\n    }\n\n    override render(): React.ReactElement {\n        let {\n            id,\n            title,\n            titleAnnotation,\n            subtitle,\n            subtitleFormat,\n            footer,\n            dissolve,\n            children,\n            anchor,\n        } = this.props\n        const isPinnedToBottom = anchor === GrapherTooltipAnchor.Bottom\n\n        // add a preposition to unit-based subtitles\n        const hasHeader = title !== undefined || subtitle !== undefined\n        if (!!subtitle && subtitleFormat === \"unit\") {\n            const unit = subtitle.toString()\n            const preposition = !unit.match(/^(per|in|\\() /i) ? \"in \" : \"\"\n            subtitle = preposition + stripOuterParentheses(unit)\n        }\n\n        // flag the year in the header and add note in footer (if necessary)\n        const timeNotice = !!subtitle && subtitleFormat === \"notice\"\n\n        // style the box differently if just displaying title/subtitle\n        const plain = hasHeader && !children\n\n        // skip transition delay if requested\n        const immediate = dissolve === \"immediate\"\n\n        return (\n            <TooltipContext.Provider value={{ anchor }}>\n                <div\n                    className={classnames(\"tooltip-container\", {\n                        \"fixed-bottom\": isPinnedToBottom,\n                    })}\n                >\n                    <div\n                        ref={this.base}\n                        id={id?.toString()}\n                        role=\"tooltip\"\n                        className={classnames(\"Tooltip\", {\n                            plain,\n                            dissolve,\n                            immediate,\n                        })}\n                        style={this.tooltipStyle}\n                    >\n                        {hasHeader && (\n                            <div className=\"frontmatter\">\n                                {title && (\n                                    <div className=\"title\">\n                                        {title}{\" \"}\n                                        <span className=\"annotation\">\n                                            {titleAnnotation}\n                                        </span>\n                                    </div>\n                                )}\n                                {subtitle && (\n                                    <div className=\"subtitle\">\n                                        {timeNotice && (\n                                            <TooltipIcon\n                                                icon={TooltipFooterIcon.Notice}\n                                            />\n                                        )}\n                                        <span>{subtitle}</span>\n                                    </div>\n                                )}\n                            </div>\n                        )}\n                        <div className=\"content-and-endmatter\">\n                            {children && (\n                                <div className=\"content\">{children}</div>\n                            )}\n                            {footer && footer.length > 0 && (\n                                <div\n                                    className={classnames(\"endmatter\", {\n                                        \"multiple-lines\": footer.length > 1,\n                                    })}\n                                >\n                                    {footer?.map(({ icon, text }) => (\n                                        <div\n                                            key={text}\n                                            className={classnames(\"line\", {\n                                                \"icon-sig\":\n                                                    icon ===\n                                                    TooltipFooterIcon.Significance,\n                                                \"no-icon\":\n                                                    icon ===\n                                                    TooltipFooterIcon.None,\n                                            })}\n                                        >\n                                            <TooltipIcon icon={icon} />\n                                            <p>{text}</p>\n                                        </div>\n                                    ))}\n                                </div>\n                            )}\n                        </div>\n                    </div>\n                </div>\n            </TooltipContext.Provider>\n        )\n    }\n}\n\nfunction TooltipIcon({\n    icon,\n}: {\n    icon: TooltipFooterIcon\n}): React.ReactElement | null {\n    return match(icon)\n        .with(TooltipFooterIcon.Notice, () => (\n            <FontAwesomeIcon className=\"icon\" icon={faInfoCircle} />\n        ))\n        .with(TooltipFooterIcon.Stripes, () => (\n            <div className=\"stripes icon\"></div>\n        ))\n        .with(TooltipFooterIcon.Significance, () => (\n            <div className=\"icon\">\n                <SignificanceIcon />\n            </div>\n        ))\n        .with(TooltipFooterIcon.None, () => null)\n        .exhaustive()\n}\n","import * as React from \"react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    TooltipProps,\n    TooltipManager,\n    TooltipContainerProps,\n} from \"./TooltipProps\"\nimport { TooltipCard } from \"./TooltipCard.js\"\n\ninterface ManagedTooltipContainerProps extends TooltipContainerProps {\n    tooltipManager: TooltipManager\n}\n\n@observer\nexport class TooltipContainer extends React.Component<ManagedTooltipContainerProps> {\n    constructor(props: ManagedTooltipContainerProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed private get tooltip(): TooltipProps | undefined {\n        const { tooltip } = this.props.tooltipManager\n        return tooltip?.get()\n    }\n\n    override render(): React.ReactElement | null {\n        const { props, tooltip } = this\n        if (!tooltip) return null\n        return <TooltipCard {...props} {...tooltip} />\n    }\n}\n\ninterface ManagedTooltipProps extends TooltipProps {\n    tooltipManager: TooltipManager\n}\n\n@observer\nexport class Tooltip extends React.Component<ManagedTooltipProps> {\n    constructor(props: ManagedTooltipProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    override componentDidMount(): void {\n        this.connectTooltipToContainer()\n    }\n\n    @action.bound private connectTooltipToContainer(): void {\n        this.props.tooltipManager.tooltip?.set(this.props)\n    }\n\n    @action.bound private removeToolTipFromContainer(): void {\n        const { tooltip } = this.props.tooltipManager\n        // Clear the shared tooltip only if this instance still owns it.\n        // This prevents an older tooltip (e.g. from another facet) from\n        // clearing the active one and causing flicker while moving between facets.\n        if (tooltip?.get()?.id === this.props.id) tooltip.set(undefined)\n    }\n\n    override componentDidUpdate(): void {\n        this.connectTooltipToContainer()\n    }\n\n    override componentWillUnmount(): void {\n        this.removeToolTipFromContainer()\n    }\n\n    override render(): null {\n        return null\n    }\n}\n","import * as React from \"react\"\nimport cx from \"clsx\"\nimport { UNSAFE_PortalProvider } from \"react-aria\"\nimport { Dialog, Modal as AriaModal, ModalOverlay } from \"react-aria-components\"\nimport { Bounds } from \"@ourworldindata/utils\"\n\ninterface ModalProps {\n    bounds: Bounds\n    onDismiss: () => void\n    ariaLabel: string\n    grapherRef: React.RefObject<HTMLDivElement | null>\n    children?: React.ReactNode\n    /** By default the modal height fits its content */\n    isHeightFixed?: boolean\n    alignVertical?: \"top\" | \"center\" | \"bottom\"\n}\n\nexport function Modal({\n    bounds,\n    onDismiss,\n    ariaLabel,\n    grapherRef,\n    children,\n    isHeightFixed = false,\n    alignVertical = \"center\",\n}: ModalProps): React.ReactElement {\n    const contentStyle: React.CSSProperties = {\n        left: bounds.left,\n        width: bounds.width,\n        maxHeight: bounds.height,\n    }\n\n    if (isHeightFixed) {\n        contentStyle.height = bounds.height\n    }\n\n    if (alignVertical === \"bottom\") {\n        contentStyle.bottom = bounds.y\n    } else if (alignVertical === \"top\") {\n        contentStyle.top = bounds.y\n    }\n\n    return (\n        <UNSAFE_PortalProvider getContainer={() => grapherRef.current}>\n            <ModalOverlay\n                className=\"modal-overlay\"\n                isOpen\n                onOpenChange={(isOpen) => {\n                    if (!isOpen) onDismiss()\n                }}\n                isDismissable\n            >\n                <AriaModal\n                    className={cx(\n                        \"modal-panel\",\n                        `modal-panel--${alignVertical}`\n                    )}\n                    style={contentStyle}\n                >\n                    <Dialog\n                        className=\"modal-panel-dialog\"\n                        aria-label={ariaLabel}\n                    >\n                        {/* Restore the default portal container for nested\n                            overlays such as dropdowns. */}\n                        <UNSAFE_PortalProvider getContainer={null}>\n                            {children}\n                        </UNSAFE_PortalProvider>\n                    </Dialog>\n                </AriaModal>\n            </ModalOverlay>\n        </UNSAFE_PortalProvider>\n    )\n}\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"indefinite\"] = factory();\n\telse\n\t\troot[\"indefinite\"] = factory();\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 769:\n/***/ ((__unused_webpack_module, exports) => {\n\nvar STARTS_WITH_VOWEL = /^[aeiouAEIOU]/;\n\n/**\n * Array#indexOf is faster IF the word starts with \"a\" (for example),\n * but negligibly faster when you have to .toLowerCase() the word, and\n * slower if the word happens to start with (e.g.) \"u.\"\n */\nexports.startsWithVowel = function (word) {\n  return STARTS_WITH_VOWEL.test(word);\n};\nexports.capitalize = function (article, opts) {\n  if (opts.capitalize) {\n    article = \"\".concat(article.charAt(0).toUpperCase()).concat(article.slice(1));\n  }\n  return article;\n};\n\n/***/ }),\n\n/***/ 393:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar _require = __webpack_require__(769),\n  capitalize = _require.capitalize;\nvar irregulars = __webpack_require__(725);\nvar rules = __webpack_require__(803);\nvar indefinite = function indefinite(word) {\n  var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var article;\n\n  /**\n   * I'd really prefer to use for of here, but babel converts that\n   * to something using Symbol.iterator, which PhantomJS chokes on.\n   */\n  rules.some(function (rule) {\n    if (rule.check(word, opts)) {\n      article = rule.run(word, opts);\n      return true;\n    }\n  });\n  return handleOptions(article, opts, word);\n};\nvar handleOptions = function handleOptions(article, opts, word) {\n  article = capitalize(article, opts);\n  if (opts.articleOnly) {\n    return article;\n  }\n  return \"\".concat(article, \" \").concat(word);\n};\nindefinite.irregularWords = irregulars.list;\nmodule.exports = indefinite;\n\n/***/ }),\n\n/***/ 725:\n/***/ ((__unused_webpack_module, exports) => {\n\nexports.check = function (word, ending) {\n  if (ending) {\n    // If the word ends in the ending, remove it.\n    var regex = new RegExp(\"\".concat(ending, \"$\"));\n    word = word.replace(regex, '');\n    if (word.length <= 1) {\n      return false;\n    }\n  }\n  return exports.list.indexOf(word) > -1;\n};\n\n/**\n * Here follows a List of words that take irregular articles because their\n * first letter is either a consonant pronounced like a vowel (hour) or a\n * vowel proncounced like a consonant (ukelele). Note that this is not only\n * nouns because adjectives and adverbs that start with these letters could\n * also follow an article when they identify a later noun, as in \"a useless\n * tool.\"\n *\n * This is not an attempt at a complete list, but rather a collection of\n * words used in at least moderate frequency. A list of ALL irregular words\n * would be too exhaustive to compile without some sort of tool.\n * http://www.thefreedictionary.com/words-that-start-with-eu says there are\n * over 1800 words starting with \"eu\" alone.\n *\n * At least for now, this list omits proper names, as they aren't USUALLY\n * used in such a way as to require an _indefinite_ article. I can't think,\n * for example, of a case where you'd want to say \"a Eustace.\"\n */\nexports.list = [\n// Nouns: eu like y\n'eunuch', 'eucalyptus', 'eugenics', 'eulogy', 'euphemism', 'euphony', 'euphoria', 'eureka',\n// Adjectives: eu like y\n'euro', 'european', 'euphemistic', 'euphonic', 'euphoric',\n// Adverbs: eu like y\n'euphemistically', 'euphonically', 'euphorically',\n// Nouns: silent h\n'heir', 'heiress', 'herb', 'homage', 'honesty', 'honor', 'honour', 'honoree', 'hour',\n// Adjectives: silent h\n'honest', 'honorous', 'honorific', 'honorable', 'honourable',\n// Adverbs: silent h\n'honestly', 'hourly',\n// Nouns: o like w\n'one', 'ouija',\n// Adjectives: o like w\n'once',\n// Adverbs: o like w\n\n// Nouns: u like y\n'ubiquity', 'udometer', 'ufo', 'uke', 'ukelele', 'ululate', 'unicorn', 'unicycle', 'uniform', 'unify', 'union', 'unison', 'unit', 'unity', 'universe', 'university', 'upas', 'ural', 'uranium', 'urea', 'ureter', 'urethra', 'urine', 'urologist', 'urology', 'urus', 'usage', 'use', 'user', 'usual', 'usurp', 'usurper', 'usury', 'utensil', 'uterus', 'utility', 'utopia', 'utricle', 'uvarovite', 'uvea', 'uvula', 'utah', 'utahn',\n// Adjectives: u like y\n'ubiquitous', 'ugandan', 'ukrainian', 'unanimous', 'unicameral', 'unified', 'unique', 'unisex', 'universal', 'urinal', 'urological', 'useful', 'useless', 'usurious', 'utilitarian', 'utopic',\n// Adverbs: u like y\n'ubiquitously', 'unanimously', 'unicamerally', 'uniquely', 'universally', 'urologically', 'usefully', 'uselessly', 'usuriously',\n// Nouns: y like i\n'yttria', 'yggdrasil', 'ylem', 'yperite', 'ytterbia', 'ytterbium', 'yttrium',\n// Adjectives: y like i\n'ytterbous', 'ytterbic', 'yttric',\n// Single letters\n'f', 'h', 'l', 'm', 'n', 'r', 's', 'u', 'x'];\n\n/***/ }),\n\n/***/ 803:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nmodule.exports = [__webpack_require__(374), __webpack_require__(532), __webpack_require__(202)];\n\n/***/ }),\n\n/***/ 532:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\nvar _require = __webpack_require__(769),\n  startsWithVowel = _require.startsWithVowel;\nvar ACRONYM = /^[A-Z]+$/;\nvar IRREGULAR_ACRONYM = /^[UFHLMNRSX]/;\nvar isIrregularAcronym = function isIrregularAcronym(word) {\n  return IRREGULAR_ACRONYM.test(word.charAt(0));\n};\n\n/**\n * Both = a && b\n * Neither = !a && !b\n * In the case of Booleans, this means\n * either both true or both false, so\n * we can just compare the equality of\n * a and b.\n */\nvar bothOrNeither = function bothOrNeither(a, b) {\n  return a === b;\n};\n\n/**\n * If the entirety of the first word is capital letters\n * and case insensitivity is off, it's an acronym.\n */\nexports.check = function (word, _ref) {\n  var caseInsensitive = _ref.caseInsensitive;\n  return caseInsensitive ? false : ACRONYM.test(word.split(' ')[0]);\n};\nexports.run = function (word) {\n  var isIrregular = isIrregularAcronym(word);\n  var initialVowel = startsWithVowel(word);\n  /*\n   * If it starts with U: \"a\"\n   * If it starts with any other vowel: \"an\"\n   * If it starts with F, H, L, M, N, R, S, or X: \"an\"\n   * If it starts with any other consonant: \"a\"\n   */\n  var article = bothOrNeither(initialVowel, isIrregular) ? 'a' : 'an';\n  return article;\n};\n\n/***/ }),\n\n/***/ 374:\n/***/ ((__unused_webpack_module, exports) => {\n\nvar NUMBERS = /^([0-9,]+)/;\nvar EIGHT_ELEVEN_EIGHTEEN = /^(11|8|18)/;\nvar ELEVEN_EIGHTEEN = /^(11|18)/;\nexports.check = function (word) {\n  return NUMBERS.test(word);\n};\nexports.run = function (word, opts) {\n  var number = word.toString().match(NUMBERS)[1].replace(/,/g, '');\n  var article = 'a';\n  if (EIGHT_ELEVEN_EIGHTEEN.test(number)) {\n    var startsWith11Or18 = ELEVEN_EIGHTEEN.test(number);\n\n    // If the number starts with 11 or 18 and is of length 4,\n    // the pronunciation is ambiguous so check opts.numbers to see\n    // how to render it. Otherwise, if it starts with 11 or 18\n    // and has 2, 5, 8, 11, etc. digits, use 'an.' Finally, if it\n    // starts with an 8, use 'an.' For everything else, use 'a.'\n    if (startsWith11Or18 && number.length === 4) {\n      article = opts.numbers === 'colloquial' ? 'an' : 'a';\n    } else if (startsWith11Or18 && (number.length - 2) % 3 === 0) {\n      article = 'an';\n    } else {\n      article = number.startsWith('8') ? 'an' : 'a';\n    }\n  }\n  return article;\n};\n\n/***/ }),\n\n/***/ 202:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\nvar _require = __webpack_require__(769),\n  startsWithVowel = _require.startsWithVowel;\nvar irregulars = __webpack_require__(725);\nvar EXTRAS = /[\\s'-]/;\nvar getFirst = function getFirst(word) {\n  return word.split(EXTRAS)[0].toLowerCase();\n};\nvar xor = function xor(a, b) {\n  return (a || b) && !(a && b);\n};\n\n/**\n * Try some variations on the word to determine whether it's irregular.\n * Specifically, try trimming s, then es, then ed because those are common\n * forms of plurals and past tense verbs (which can be used like adjectives).\n */\nvar checkForIrregulars = function checkForIrregulars(part) {\n  return [null, 's', 'es', 'ed'].reduce(function (memo, ending) {\n    return memo || irregulars.check(part, ending);\n  }, false);\n};\nexports.check = function () {\n  return true;\n};\nexports.run = function (word, opts) {\n  // Only check the first word. Also, if it's hyphenated, only\n  // check the first part. Finally, if it's possessive, ignore\n  // the possessive part.\n  var first = getFirst(word);\n  var isIrregular = checkForIrregulars(first);\n\n  /**\n  * If it starts with a vowel and isn't irregular: \"an\"\n  * If it starts with a vowel and IS irregular: \"a\"\n  * If it starts with a consonant and isn't irregular: \"a\"\n  * If it starts with a consonant and IS irregular: \"an\"\n  */\n  var article = xor(startsWithVowel(word), isIrregular) ? 'an' : 'a';\n  return article;\n};\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module is referenced by other modules so it can't be inlined\n/******/ \tvar __webpack_exports__ = __webpack_require__(393);\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});","/*! @license Rematrix v0.2.2\n\n\tCopyright 2018 Fisssion LLC.\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy\n\tof this software and associated documentation files (the \"Software\"), to deal\n\tin the Software without restriction, including without limitation the rights\n\tto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n\tcopies of the Software, and to permit persons to whom the Software is\n\tfurnished to do so, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in\n\tall copies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n\tTHE SOFTWARE.\n*/\n/**\n * @module Rematrix\n */\n\n/**\n * Transformation matrices in the browser come in two flavors:\n *\n *  - `matrix` using 6 values (short)\n *  - `matrix3d` using 16 values (long)\n *\n * This utility follows this [conversion guide](https://goo.gl/EJlUQ1)\n * to expand short form matrices to their equivalent long form.\n *\n * @param  {array} source - Accepts both short and long form matrices.\n * @return {array}\n */\nfunction format(source) {\n\tif (source.constructor !== Array) {\n\t\tthrow new TypeError('Expected array.')\n\t}\n\tif (source.length === 16) {\n\t\treturn source\n\t}\n\tif (source.length === 6) {\n\t\tvar matrix = identity();\n\t\tmatrix[0] = source[0];\n\t\tmatrix[1] = source[1];\n\t\tmatrix[4] = source[2];\n\t\tmatrix[5] = source[3];\n\t\tmatrix[12] = source[4];\n\t\tmatrix[13] = source[5];\n\t\treturn matrix\n\t}\n\tthrow new RangeError('Expected array with either 6 or 16 values.')\n}\n\n/**\n * Returns a matrix representing no transformation. The product of any matrix\n * multiplied by the identity matrix will be the original matrix.\n *\n * > **Tip:** Similar to how `5 * 1 === 5`, where `1` is the identity.\n *\n * @return {array}\n */\nfunction identity() {\n\tvar matrix = [];\n\tfor (var i = 0; i < 16; i++) {\n\t\ti % 5 == 0 ? matrix.push(1) : matrix.push(0);\n\t}\n\treturn matrix\n}\n\n/**\n * Returns a matrix describing the inverse transformation of the source\n * matrix. The product of any matrix multiplied by its inverse will be the\n * identity matrix.\n *\n * > **Tip:** Similar to how `5 * (1/5) === 1`, where `1/5` is the inverse.\n *\n * @param  {array} source - Accepts both short and long form matrices.\n * @return {array}\n */\nfunction inverse(source) {\n\tvar m = format(source);\n\n\tvar s0 = m[0] * m[5] - m[4] * m[1];\n\tvar s1 = m[0] * m[6] - m[4] * m[2];\n\tvar s2 = m[0] * m[7] - m[4] * m[3];\n\tvar s3 = m[1] * m[6] - m[5] * m[2];\n\tvar s4 = m[1] * m[7] - m[5] * m[3];\n\tvar s5 = m[2] * m[7] - m[6] * m[3];\n\n\tvar c5 = m[10] * m[15] - m[14] * m[11];\n\tvar c4 = m[9] * m[15] - m[13] * m[11];\n\tvar c3 = m[9] * m[14] - m[13] * m[10];\n\tvar c2 = m[8] * m[15] - m[12] * m[11];\n\tvar c1 = m[8] * m[14] - m[12] * m[10];\n\tvar c0 = m[8] * m[13] - m[12] * m[9];\n\n\tvar determinant = 1 / (s0 * c5 - s1 * c4 + s2 * c3 + s3 * c2 - s4 * c1 + s5 * c0);\n\n\tif (isNaN(determinant) || determinant === Infinity) {\n\t\tthrow new Error('Inverse determinant attempted to divide by zero.')\n\t}\n\n\treturn [\n\t\t(m[5] * c5 - m[6] * c4 + m[7] * c3) * determinant,\n\t\t(-m[1] * c5 + m[2] * c4 - m[3] * c3) * determinant,\n\t\t(m[13] * s5 - m[14] * s4 + m[15] * s3) * determinant,\n\t\t(-m[9] * s5 + m[10] * s4 - m[11] * s3) * determinant,\n\n\t\t(-m[4] * c5 + m[6] * c2 - m[7] * c1) * determinant,\n\t\t(m[0] * c5 - m[2] * c2 + m[3] * c1) * determinant,\n\t\t(-m[12] * s5 + m[14] * s2 - m[15] * s1) * determinant,\n\t\t(m[8] * s5 - m[10] * s2 + m[11] * s1) * determinant,\n\n\t\t(m[4] * c4 - m[5] * c2 + m[7] * c0) * determinant,\n\t\t(-m[0] * c4 + m[1] * c2 - m[3] * c0) * determinant,\n\t\t(m[12] * s4 - m[13] * s2 + m[15] * s0) * determinant,\n\t\t(-m[8] * s4 + m[9] * s2 - m[11] * s0) * determinant,\n\n\t\t(-m[4] * c3 + m[5] * c1 - m[6] * c0) * determinant,\n\t\t(m[0] * c3 - m[1] * c1 + m[2] * c0) * determinant,\n\t\t(-m[12] * s3 + m[13] * s1 - m[14] * s0) * determinant,\n\t\t(m[8] * s3 - m[9] * s1 + m[10] * s0) * determinant\n\t]\n}\n\n/**\n * Returns a 4x4 matrix describing the combined transformations\n * of both arguments.\n *\n * > **Note:** Order is very important. For example, rotating 45°\n * along the Z-axis, followed by translating 500 pixels along the\n * Y-axis... is not the same as translating 500 pixels along the\n * Y-axis, followed by rotating 45° along on the Z-axis.\n *\n * @param  {array} m - Accepts both short and long form matrices.\n * @param  {array} x - Accepts both short and long form matrices.\n * @return {array}\n */\nfunction multiply(m, x) {\n\tvar fm = format(m);\n\tvar fx = format(x);\n\tvar product = [];\n\n\tfor (var i = 0; i < 4; i++) {\n\t\tvar row = [fm[i], fm[i + 4], fm[i + 8], fm[i + 12]];\n\t\tfor (var j = 0; j < 4; j++) {\n\t\t\tvar k = j * 4;\n\t\t\tvar col = [fx[k], fx[k + 1], fx[k + 2], fx[k + 3]];\n\t\t\tvar result =\n\t\t\t\trow[0] * col[0] + row[1] * col[1] + row[2] * col[2] + row[3] * col[3];\n\n\t\t\tproduct[i + k] = result;\n\t\t}\n\t}\n\n\treturn product\n}\n\n/**\n * Attempts to return a 4x4 matrix describing the CSS transform\n * matrix passed in, but will return the identity matrix as a\n * fallback.\n *\n * **Tip:** In virtually all cases, this method is used to convert\n * a CSS matrix (retrieved as a `string` from computed styles) to\n * its equivalent array format.\n *\n * @param  {string} source - String containing a valid CSS `matrix` or `matrix3d` property.\n * @return {array}\n */\nfunction parse(source) {\n\tif (typeof source === 'string') {\n\t\tvar match = source.match(/matrix(3d)?\\(([^)]+)\\)/);\n\t\tif (match) {\n\t\t\tvar raw = match[2].split(', ').map(parseFloat);\n\t\t\treturn format(raw)\n\t\t}\n\t}\n\treturn identity()\n}\n\n/**\n * Returns a 4x4 matrix describing Z-axis rotation.\n *\n * @param  {number} angle - Measured in degrees.\n * @return {array}\n */\nfunction rotate(angle) {\n\treturn rotateZ(angle)\n}\n\n/**\n * Returns a 4x4 matrix describing X-axis rotation.\n *\n * @param  {number} angle - Measured in degrees.\n * @return {array}\n */\nfunction rotateX(angle) {\n\tvar theta = Math.PI / 180 * angle;\n\tvar matrix = identity();\n\n\tmatrix[5] = matrix[10] = Math.cos(theta);\n\tmatrix[6] = matrix[9] = Math.sin(theta);\n\tmatrix[9] *= -1;\n\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing Y-axis rotation.\n *\n * @param  {number} angle - Measured in degrees.\n * @return {array}\n */\nfunction rotateY(angle) {\n\tvar theta = Math.PI / 180 * angle;\n\tvar matrix = identity();\n\n\tmatrix[0] = matrix[10] = Math.cos(theta);\n\tmatrix[2] = matrix[8] = Math.sin(theta);\n\tmatrix[2] *= -1;\n\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing Z-axis rotation.\n *\n * @param  {number} angle - Measured in degrees.\n * @return {array}\n */\nfunction rotateZ(angle) {\n\tvar theta = Math.PI / 180 * angle;\n\tvar matrix = identity();\n\n\tmatrix[0] = matrix[5] = Math.cos(theta);\n\tmatrix[1] = matrix[4] = Math.sin(theta);\n\tmatrix[4] *= -1;\n\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing 2D scaling. The first argument\n * is used for both X and Y-axis scaling, unless an optional\n * second argument is provided to explicitly define Y-axis scaling.\n *\n * @param  {number} scalar    - Decimal multiplier.\n * @param  {number} [scalarY] - Decimal multiplier.\n * @return {array}\n */\nfunction scale(scalar, scalarY) {\n\tvar matrix = identity();\n\n\tmatrix[0] = scalar;\n\tmatrix[5] = typeof scalarY === 'number' ? scalarY : scalar;\n\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing X-axis scaling.\n *\n * @param  {number} scalar - Decimal multiplier.\n * @return {array}\n */\nfunction scaleX(scalar) {\n\tvar matrix = identity();\n\tmatrix[0] = scalar;\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing Y-axis scaling.\n *\n * @param  {number} scalar - Decimal multiplier.\n * @return {array}\n */\nfunction scaleY(scalar) {\n\tvar matrix = identity();\n\tmatrix[5] = scalar;\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing Z-axis scaling.\n *\n * @param  {number} scalar - Decimal multiplier.\n * @return {array}\n */\nfunction scaleZ(scalar) {\n\tvar matrix = identity();\n\tmatrix[10] = scalar;\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing shear. The first argument\n * defines X-axis shearing, and an optional second argument\n * defines Y-axis shearing.\n *\n * @param  {number} angleX   - Measured in degrees.\n * @param  {number} [angleY] - Measured in degrees.\n * @return {array}\n */\nfunction skew(angleX, angleY) {\n\tvar thetaX = Math.PI / 180 * angleX;\n\tvar matrix = identity();\n\n\tmatrix[4] = Math.tan(thetaX);\n\n\tif (angleY) {\n\t\tvar thetaY = Math.PI / 180 * angleY;\n\t\tmatrix[1] = Math.tan(thetaY);\n\t}\n\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing X-axis shear.\n *\n * @param  {number} angle - Measured in degrees.\n * @return {array}\n */\nfunction skewX(angle) {\n\tvar theta = Math.PI / 180 * angle;\n\tvar matrix = identity();\n\n\tmatrix[4] = Math.tan(theta);\n\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing Y-axis shear.\n *\n * @param  {number} angle - Measured in degrees\n * @return {array}\n */\nfunction skewY(angle) {\n\tvar theta = Math.PI / 180 * angle;\n\tvar matrix = identity();\n\n\tmatrix[1] = Math.tan(theta);\n\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing 2D translation. The first\n * argument defines X-axis translation, and an optional second\n * argument defines Y-axis translation.\n *\n * @param  {number} distanceX   - Measured in pixels.\n * @param  {number} [distanceY] - Measured in pixels.\n * @return {array}\n */\nfunction translate(distanceX, distanceY) {\n\tvar matrix = identity();\n\tmatrix[12] = distanceX;\n\n\tif (distanceY) {\n\t\tmatrix[13] = distanceY;\n\t}\n\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing X-axis translation.\n *\n * @param  {number} distance - Measured in pixels.\n * @return {array}\n */\nfunction translateX(distance) {\n\tvar matrix = identity();\n\tmatrix[12] = distance;\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing Y-axis translation.\n *\n * @param  {number} distance - Measured in pixels.\n * @return {array}\n */\nfunction translateY(distance) {\n\tvar matrix = identity();\n\tmatrix[13] = distance;\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing Z-axis translation.\n *\n * @param  {number} distance - Measured in pixels.\n * @return {array}\n */\nfunction translateZ(distance) {\n\tvar matrix = identity();\n\tmatrix[14] = distance;\n\treturn matrix\n}\n\nexport { format, identity, inverse, multiply, parse, rotate, rotateX, rotateY, rotateZ, scale, scaleX, scaleY, scaleZ, skew, skewX, skewY, translate, translateX, translateY, translateZ };\n","import*as t from\"rematrix\";var e=function(t){return\"number\"==typeof t},i=function(t){return\"function\"==typeof t},n=function(t){return\"[object Object]\"===Object.prototype.toString.call(t)},r=function(t){return Array.prototype.slice.apply(t)},s=function(t){var e=t.reduce(function(t,e){return t[e]=(t[e]||0)+1,t},{});return Object.keys(e).filter(function(t){return e[t]>1})};function a(t){return[].slice.call(arguments,1).forEach(function(e){if(e)for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])}),t}var o,l=function(t,e,i){return t+(e-t)*i},p={__proto__:null,isNumber:e,isFunction:i,isObject:n,toArray:r,getDuplicateValsAsStrings:s,assign:a,tweenProp:l},c=\"data-flip-id\",u=\"data-inverse-flip-id\",d=\"data-portal-key\",f=\"data-exit-container\",h={__proto__:null,DATA_FLIP_ID:c,DATA_INVERSE_FLIP_ID:u,DATA_FLIP_COMPONENT_ID:\"data-flip-component-id\",DATA_FLIP_CONFIG:\"data-flip-config\",DATA_PORTAL_KEY:d,DATA_EXIT_CONTAINER:f},g={noWobble:{stiffness:200,damping:26},gentle:{stiffness:120,damping:14},veryGentle:{stiffness:130,damping:17},wobbly:{stiffness:180,damping:12},stiff:{stiffness:260,damping:26}},m=function(t){return n(t)?t:Object.keys(g).indexOf(t)>-1?g[t]:{}};\"undefined\"!=typeof window&&(o=window.requestAnimationFrame);var v=o=o||function(t){window.setTimeout(t,1e3/60)},y=Date.now(),_=\"object\"==typeof performance&&\"function\"==typeof performance.now?function(){return performance.now()}:function(){return Date.now()-y};function S(t,e){var i=t.indexOf(e);-1!==i&&t.splice(i,1)}var E=/*#__PURE__*/function(){function t(){}return t.prototype.run=function(){var t=this;v(function(){t.springSystem.loop(_())})},t}(),A=function(){this.position=0,this.velocity=0},C=0,b=.001,I=/*#__PURE__*/function(){function t(t){this._id=\"s\"+C++,this._springSystem=t,this.listeners=[],this._startValue=0,this._currentState=new A,this._displacementFromRestThreshold=.001,this._endValue=0,this._overshootClampingEnabled=!1,this._previousState=new A,this._restSpeedThreshold=.001,this._tempState=new A,this._timeAccumulator=0,this._wasAtRest=!0,this._cachedSpringConfig={}}var e=t.prototype;return e.getId=function(){return this._id},e.destroy=function(){this.listeners=[],this._springSystem.deregisterSpring(this)},e.setSpringConfig=function(t){return this._springConfig=t,this},e.getCurrentValue=function(){return this._currentState.position},e.getDisplacementDistanceForState=function(t){return Math.abs(this._endValue-t.position)},e.setEndValue=function(t){if(t===this._endValue)return this;if(this.prevEndValue=t,this._endValue===t&&this.isAtRest())return this;this._startValue=this.getCurrentValue(),this._endValue=t,this._springSystem.activateSpring(this.getId());for(var e=0,i=this.listeners.length;e<i;e++){var n=this.listeners[e].onSpringEndStateChange;n&&n(this)}return this},e.setVelocity=function(t){return t===this._currentState.velocity||(this._currentState.velocity=t,this._springSystem.activateSpring(this.getId())),this},e.setCurrentValue=function(t){this._startValue=t,this._currentState.position=t;for(var e=0,i=this.listeners.length;e<i;e++){var n=this.listeners[e];n.onSpringUpdate&&n.onSpringUpdate(this)}return this},e.setAtRest=function(){return this._endValue=this._currentState.position,this._tempState.position=this._currentState.position,this._currentState.velocity=0,this},e.setOvershootClampingEnabled=function(t){return this._overshootClampingEnabled=t,this},e.isOvershooting=function(){var t=this._startValue,e=this._endValue;return this._springConfig.tension>0&&(t<e&&this.getCurrentValue()>e||t>e&&this.getCurrentValue()<e)},e.advance=function(t,e){var i=this.isAtRest();if(!i||!this._wasAtRest){var n=e;e>.064&&(n=.064),this._timeAccumulator+=n;for(var r,s,a,o,l,p,c=this._springConfig.tension,u=this._springConfig.friction,d=this._currentState.position,f=this._currentState.velocity,h=this._tempState.position,g=this._tempState.velocity;this._timeAccumulator>=b;)this._timeAccumulator-=b,this._timeAccumulator<b&&(this._previousState.position=d,this._previousState.velocity=f),s=c*(this._endValue-h)-u*f,o=c*(this._endValue-(h=d+(r=f)*b*.5))-u*(g=f+s*b*.5),p=c*(this._endValue-(h=d+(a=g)*b*.5))-u*(g=f+o*b*.5),h=d+(l=g)*b,d+=1/6*(r+2*(a+l)+(g=f+p*b))*b,f+=1/6*(s+2*(o+p)+(c*(this._endValue-h)-u*g))*b;this._tempState.position=h,this._tempState.velocity=g,this._currentState.position=d,this._currentState.velocity=f,this._timeAccumulator>0&&this._interpolate(this._timeAccumulator/b),(this.isAtRest()||this._overshootClampingEnabled&&this.isOvershooting())&&(this._springConfig.tension>0?(this._startValue=this._endValue,this._currentState.position=this._endValue):(this._endValue=this._currentState.position,this._startValue=this._endValue),this.setVelocity(0),i=!0);var m=!1;this._wasAtRest&&(this._wasAtRest=!1,m=!0);var v=!1;i&&(this._wasAtRest=!0,v=!0),this.notifyPositionUpdated(m,v)}},e.notifyPositionUpdated=function(t,e){var i=this;this.listeners.filter(Boolean).forEach(function(n){t&&n.onSpringActivate&&!i._onActivateCalled&&(n.onSpringActivate(i),i._onActivateCalled=!0),n.onSpringUpdate&&n.onSpringUpdate(i),e&&n.onSpringAtRest&&n.onSpringAtRest(i)})},e.systemShouldAdvance=function(){return!this.isAtRest()||!this.wasAtRest()},e.wasAtRest=function(){return this._wasAtRest},e.isAtRest=function(){return Math.abs(this._currentState.velocity)<this._restSpeedThreshold&&(this.getDisplacementDistanceForState(this._currentState)<=this._displacementFromRestThreshold||0===this._springConfig.tension)},e._interpolate=function(t){this._currentState.position=this._currentState.position*t+this._previousState.position*(1-t),this._currentState.velocity=this._currentState.velocity*t+this._previousState.velocity*(1-t)},e.addListener=function(t){return this.listeners.push(t),this},e.addOneTimeListener=function(t){var e=this;return Object.keys(t).forEach(function(i){var n;t[i]=(n=t[i],function(){n.apply(void 0,[].slice.call(arguments)),e.removeListener(t)})}),this.listeners.push(t),this},e.removeListener=function(t){return S(this.listeners,t),this},t}(),w=/*#__PURE__*/function(){function t(t){this.looper=t||new E,this.looper.springSystem=this,this.listeners=[],this._activeSprings=[],this._idleSpringIndices=[],this._isIdle=!0,this._lastTimeMillis=-1,this._springRegistry={}}var e=t.prototype;return e.createSpring=function(t,e){return this.createSpringWithConfig({tension:t,friction:e})},e.createSpringWithConfig=function(t){var e=new I(this);return this.registerSpring(e),e.setSpringConfig(t),e},e.getIsIdle=function(){return this._isIdle},e.registerSpring=function(t){this._springRegistry[t.getId()]=t},e.deregisterSpring=function(t){S(this._activeSprings,t),delete this._springRegistry[t.getId()]},e.advance=function(t,e){for(var i=this;this._idleSpringIndices.length>0;)this._idleSpringIndices.pop();for(this._activeSprings.filter(Boolean).forEach(function(n){n.systemShouldAdvance()?n.advance(t/1e3,e/1e3):i._idleSpringIndices.push(i._activeSprings.indexOf(n))});this._idleSpringIndices.length>0;){var n=this._idleSpringIndices.pop();n>=0&&this._activeSprings.splice(n,1)}},e.loop=function(t){var e;-1===this._lastTimeMillis&&(this._lastTimeMillis=t-1);var i=t-this._lastTimeMillis;this._lastTimeMillis=t;var n=0,r=this.listeners.length;for(n=0;n<r;n++)(e=this.listeners[n]).onBeforeIntegrate&&e.onBeforeIntegrate(this);for(this.advance(t,i),0===this._activeSprings.length&&(this._isIdle=!0,this._lastTimeMillis=-1),n=0;n<r;n++)(e=this.listeners[n]).onAfterIntegrate&&e.onAfterIntegrate(this);this._isIdle||this.looper.run()},e.activateSpring=function(t){var e=this._springRegistry[t];-1===this._activeSprings.indexOf(e)&&this._activeSprings.push(e),this.getIsIdle()&&(this._isIdle=!1,this.looper.run())},t}(),O=new w,x=function(t){var e=t.springConfig,i=e.overshootClamping,n=t.getOnUpdateFunc,r=t.onAnimationEnd,s=t.onSpringActivate,a=O.createSpring(e.stiffness,e.damping);a.setOvershootClampingEnabled(!!i);var o={onSpringActivate:s,onSpringAtRest:function(){a.destroy(),r()},onSpringUpdate:n({spring:a,onAnimationEnd:r})};return a.addListener(o),a},U=function(t){var e=x(t);return e.setEndValue(1),e},V=function(t,e){if(void 0===e&&(e={}),t&&t.length){e.reverse&&t.reverse();var i,n=\"number\"!=typeof(i=e.speed)?1.1:1+Math.min(Math.max(5*i,0),5),r=1/Math.max(Math.min(t.length,100),10),s=t.map(function(t,e){var i=t.getOnUpdateFunc;return t.getOnUpdateFunc=function(t){var a=i(t);return function(t){var i=t.getCurrentValue();(i=i<.01?0:i>.99?1:i)>=r&&s[e+1]&&s[e+1](Math.max(Math.min(i*n,1),0)),a(t)}},t}).map(function(t){var e=x(t);if(e)return e.setEndValue.bind(e)}).filter(Boolean);s[0]&&s[0](1)}},F=function(t){return[0,1,4,5,12,13].map(function(e){return t[e]})},P=function(t){return t.top<window.innerHeight&&t.bottom>0&&t.left<window.innerWidth&&t.right>0};function D(t){return JSON.parse(t.dataset.flipConfig||\"{}\")}var R=function(t,e){var i;return a(t,((i={})[e[0]]=e[1],i))},T=function(t,e){return r(e?document.querySelectorAll(\"[\"+d+'=\"'+e+'\"]'):t.querySelectorAll(\"[\"+c+\"]\"))},M=function(t){return t.map(function(t){return[t,t.getBoundingClientRect()]})},k=!0,j=function(){return k=!1},B=function(){return k=!0},N=function(){return k},L=function(n){var o=n.cachedOrderedFlipIds,p=void 0===o?[]:o,f=n.inProgressAnimations,h=void 0===f?{}:f,v=n.flippedElementPositionsBeforeUpdate,y=void 0===v?{}:v,_=n.flipCallbacks,S=void 0===_?{}:_,E=n.containerEl,A=n.applyTransformOrigin,C=n.spring,b=n.debug,I=n.portalKey,w=n.staggerConfig,O=void 0===w?{}:w,x=n.decisionData,j=void 0===x?{}:x,B=n.handleEnterUpdateDelete,N=n.onComplete,L=n.onStart;if(k&&!window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches){var q,X=M(T((q={element:E,portalKey:I}).element,q.portalKey)).map(function(t){var e=t[0],i=t[1],n=window.getComputedStyle(e);return[e.dataset.flipId,{element:e,rect:i,opacity:parseFloat(n.opacity),transform:n.transform}]}).reduce(R,{}),Y=function(t){var e=t.containerEl,i=t.portalKey;return i?function(t){return function(e){return r(document.querySelectorAll(\"[\"+d+'=\"'+t+'\"]'+e))}}(i):e?function(t){var e=Math.random().toFixed(5);return t.dataset.flipperId=e,function(i){return r(t.querySelectorAll('[data-flipper-id=\"'+e+'\"] '+i))}}(e):function(){return[]}}({containerEl:E,portalKey:I}),W=function(t){return function(e){return t(\"[\"+c+'=\"'+e+'\"]')[0]}}(Y),K=function(t){return y[t]&&X[t]},H=Object.keys(y).concat(Object.keys(X)).filter(function(t){return!K(t)}),J={flipCallbacks:S,getElement:W,flippedElementPositionsBeforeUpdate:y,flippedElementPositionsAfterUpdate:X,inProgressAnimations:h,decisionData:j},z=function(t){var e,i=t.unflippedIds,n=t.flipCallbacks,r=t.getElement,s=t.flippedElementPositionsBeforeUpdate,a=t.flippedElementPositionsAfterUpdate,o=t.inProgressAnimations,l=t.decisionData,p=i.filter(function(t){return a[t]}).filter(function(t){return n[t]&&n[t].onAppear}),c=i.filter(function(t){return s[t]&&n[t]&&n[t].onExit}),u=new Promise(function(t){e=t}),d=[],f=0,h=c.map(function(t,i){var r=s[t].domDataForExitAnimations,a=r.element,p=r.parent,c=r.childPosition,u=c.top,h=c.left,g=c.width,m=c.height;\"static\"===getComputedStyle(p).position&&(p.style.position=\"relative\"),a.style.transform=\"matrix(1, 0, 0, 1, 0, 0)\",a.style.position=\"absolute\",a.style.top=u+\"px\",a.style.left=h+\"px\",a.style.height=m+\"px\",a.style.width=g+\"px\";var v=d.filter(function(t){return t[0]===p})[0];v||(v=[p,document.createDocumentFragment()],d.push(v)),v[1].appendChild(a),f+=1;var y=function(){try{p.removeChild(a)}catch(t){}finally{0==(f-=1)&&e()}};return o[t]={stop:y},function(){return n[t].onExit(a,i,y,l)}});return d.forEach(function(t){t[0].appendChild(t[1])}),h.length||e(),{hideEnteringElements:function(){p.forEach(function(t){var e=r(t);e&&(e.style.opacity=\"0\")})},animateEnteringElements:function(){p.forEach(function(t,e){var i=r(t);i&&n[t].onAppear(i,e,l)})},animateExitingElements:function(){return h.forEach(function(t){return t()}),u}}}(a({},J,{unflippedIds:H})),G=z.hideEnteringElements,Q=z.animateEnteringElements,Z=z.animateExitingElements,$=a({},J,{containerEl:E,flippedIds:p.filter(K),applyTransformOrigin:A,spring:C,debug:b,staggerConfig:O,scopedSelector:Y,onComplete:N});L&&L(E,j);var tt=function(n){var o,p=n.flippedIds,c=n.flipCallbacks,d=n.inProgressAnimations,f=n.flippedElementPositionsBeforeUpdate,h=n.flippedElementPositionsAfterUpdate,v=n.applyTransformOrigin,y=n.spring,_=n.getElement,S=n.debug,E=n.staggerConfig,A=void 0===E?{}:E,C=n.decisionData,b=void 0===C?{}:C,I=n.onComplete,w=n.containerEl,O=new Promise(function(t){o=t});if(I&&O.then(function(){return I(w,b)}),!p.length)return function(){return o([]),O};var x=[],R=_(p[0]),T=R?R.ownerDocument.querySelector(\"body\"):document.querySelector(\"body\");s(p);var M=p.map(function(n){var s=f[n].rect,p=h[n].rect,_=f[n].opacity,S=h[n].opacity,E=p.width<1||p.height<1,A=h[n].element;if(!P(s)&&!P(p))return!1;if(!A)return!1;var C,I,w,O=D(A),U=(w=(I=void 0===(C={flipperSpring:y,flippedSpring:O.spring})?{}:C).flippedSpring,a({},g.noWobble,m(I.flipperSpring),m(w))),V=!0===O.stagger?\"default\":O.stagger,R={element:A,id:n,stagger:V,springConfig:U};if(c[n]&&c[n].shouldFlip&&!c[n].shouldFlip(b.previous,b.current))return!1;var k=Math.abs(s.left-p.left)+Math.abs(s.top-p.top),j=Math.abs(s.width-p.width)+Math.abs(s.height-p.height),B=Math.abs(S-_);if(0===s.height&&0===p.height||0===s.width&&0===p.width||k<.5&&j<.5&&B<.01)return!1;var N=t.parse(h[n].transform),L={matrix:N},q={matrix:[]},X=[N];O.translate&&(X.push(t.translateX(s.left-p.left)),X.push(t.translateY(s.top-p.top))),O.scale&&(X.push(t.scaleX(Math.max(s.width,1)/Math.max(p.width,1))),X.push(t.scaleY(Math.max(s.height,1)/Math.max(p.height,1)))),O.opacity&&(q.opacity=_,L.opacity=S);var Y=[];if(!c[n]||!c[n].shouldInvert||c[n].shouldInvert(b.previous,b.current)){var W=function(t,e){return r(t.querySelectorAll(\"[\"+u+'=\"'+e+'\"]'))}(A,n);Y=W.map(function(t){return[t,D(t)]})}q.matrix=F(X.reduce(t.multiply)),L.matrix=F(L.matrix);var K,H=function(t){var i=t.element,n=t.invertedChildren,r=t.body;return function(t){var s=t.matrix,a=t.opacity,o=t.forceMinVals;if(e(a)&&(i.style.opacity=a+\"\"),o&&(i.style.minHeight=\"1px\",i.style.minWidth=\"1px\"),s){var l=function(t){return\"matrix(\"+t.join(\", \")+\")\"}(s);i.style.transform=l,n&&function(t){var e=t.matrix,i=t.body;t.invertedChildren.forEach(function(t){var n=t[0],r=t[1];if(i.contains(n)){var s=e[0],a=e[3],o=e[5],l={translateX:0,translateY:0,scaleX:1,scaleY:1},p=\"\";r.translate&&(l.translateX=-e[4]/s,l.translateY=-o/a,p+=\"translate(\"+l.translateX+\"px, \"+l.translateY+\"px)\"),r.scale&&(l.scaleX=1/s,l.scaleY=1/a,p+=\" scale(\"+l.scaleX+\", \"+l.scaleY+\")\"),n.style.transform=p}})}({invertedChildren:n,matrix:s,body:r})}}}({element:A,invertedChildren:Y,body:T});if(c[n]&&c[n].onComplete){var J=c[n].onComplete;K=function(){return J(A,b)}}var z=e(q.opacity)&&e(L.opacity)&&q.opacity!==L.opacity,G=!1;return a({},R,{stagger:V,springConfig:U,getOnUpdateFunc:function(t){var e=t.spring,i=t.onAnimationEnd;return d[n]={destroy:e.destroy.bind(e),onAnimationEnd:i},function(t){c[n]&&c[n].onSpringUpdate&&c[n].onSpringUpdate(t.getCurrentValue()),G||(G=!0,c[n]&&c[n].onStart&&c[n].onStart(A,b));var e=t.getCurrentValue();if(T.contains(A)){var i={matrix:[]};i.matrix=q.matrix.map(function(t,i){return l(t,L.matrix[i],e)}),z&&(i.opacity=l(q.opacity,L.opacity,e)),H(i)}else t.destroy()}},initializeFlip:function(){H({matrix:q.matrix,opacity:z?q.opacity:void 0,forceMinVals:E}),c[n]&&c[n].onStartImmediate&&c[n].onStartImmediate(A,b),O.transformOrigin?A.style.transformOrigin=O.transformOrigin:v&&(A.style.transformOrigin=\"0 0\"),Y.forEach(function(t){var e=t[0],i=t[1];i.transformOrigin?e.style.transformOrigin=i.transformOrigin:v&&(e.style.transformOrigin=\"0 0\")})},onAnimationEnd:function(t){delete d[n],i(K)&&K(),A.style.transform=\"\",Y.forEach(function(t){t[0].style.transform=\"\"}),E&&A&&(A.style.minHeight=\"\",A.style.minWidth=\"\"),t||(x.push(n),x.length>=M.length&&o(x))},delayUntil:O.delayUntil})}).filter(Boolean);if(M.forEach(function(t){return(0,t.initializeFlip)()}),S)return function(){};var k=M.filter(function(t){return t.delayUntil&&(e=t.delayUntil,M.filter(function(t){return t.id===e}).length);var e}),j={},B={},N={};k.forEach(function(t){t.stagger?(N[t.stagger]=!0,B[t.delayUntil]?B[t.delayUntil].push(t.stagger):B[t.delayUntil]=[t.stagger]):j[t.delayUntil]?j[t.delayUntil].push(t):j[t.delayUntil]=[t]});var L=M.filter(function(t){return t.stagger}).reduce(function(t,e){return t[e.stagger]?t[e.stagger].push(e):t[e.stagger]=[e],t},{}),q=M.filter(function(t){return-1===k.indexOf(t)});return q.forEach(function(t){t.onSpringActivate=function(){j[t.id]&&j[t.id].forEach(U),B[t.id]&&Object.keys(B[t.id].reduce(function(t,e){var i;return a(t,((i={})[e]=!0,i))},{})).forEach(function(t){V(L[t],A[t])})}}),function(){return M.length||o([]),q.filter(function(t){return!t.stagger}).forEach(U),Object.keys(L).forEach(function(t){N[t]||V(L[t],A[t])}),O}}($);B?B({hideEnteringElements:G,animateEnteringElements:Q,animateExitingElements:Z,animateFlippedElements:tt}):(G(),Z().then(Q),tt())}},q=function(t){var e=t.element,i=t.flipCallbacks,n=void 0===i?{}:i,s=t.inProgressAnimations,o=void 0===s?{}:s,l=T(e,t.portalKey),p=r(e.querySelectorAll(\"[\"+u+\"]\")),c={},d=[],h={};l.filter(function(t){return n&&n[t.dataset.flipId]&&n[t.dataset.flipId].onExit}).forEach(function(t){var e=t.parentNode;if(t.closest){var i=t.closest(\"[\"+f+\"]\");i&&(e=i)}var n=d.findIndex(function(t){return t[0]===e});-1===n&&(d.push([e,e.getBoundingClientRect()]),n=d.length-1),c[t.dataset.flipId]=d[n][1],h[t.dataset.flipId]=e});var g=M(l),m=g.map(function(t){var e=t[0],i=t[1],r={};if(n&&n[e.dataset.flipId]&&n[e.dataset.flipId].onExit){var s=c[e.dataset.flipId];a(r,{element:e,parent:h[e.dataset.flipId],childPosition:{top:i.top-s.top,left:i.left-s.left,width:i.width,height:i.height}})}return[e.dataset.flipId,{rect:i,opacity:parseFloat(window.getComputedStyle(e).opacity||\"1\"),domDataForExitAnimations:r}]}).reduce(R,{});return function(t,e){Object.keys(t).forEach(function(e){t[e].destroy&&t[e].destroy(),t[e].onAnimationEnd&&t[e].onAnimationEnd(!0),delete t[e]}),e.forEach(function(t){t.style.transform=\"\",t.style.opacity=\"\"})}(o,l.concat(p)),{flippedElementPositions:m,cachedOrderedFlipIds:g.map(function(t){return t[0].dataset.flipId})}},X=/*#__PURE__*/function(){function t(t){this.element=void 0,this.staggerConfig=void 0,this.applyTransformOrigin=!0,this.handleEnterUpdateDelete=void 0,this.debug=void 0,this.spring=void 0,this.inProgressAnimations=void 0,this.flipCallbacks=void 0,this.snapshot=void 0,this.onComplete=void 0,this.onStart=void 0,a(this,t),this.inProgressAnimations={},this.flipCallbacks={},this.recordBeforeUpdate=this.recordBeforeUpdate.bind(this),this.update=this.update.bind(this),this.addFlipped=this.addFlipped.bind(this),this.addInverted=this.addInverted.bind(this)}var e=t.prototype;return e.recordBeforeUpdate=function(){this.snapshot=q({element:this.element,flipCallbacks:this.flipCallbacks,inProgressAnimations:this.inProgressAnimations})},e.update=function(t,e){this.snapshot&&(L({flippedElementPositionsBeforeUpdate:this.snapshot.flippedElementPositions,cachedOrderedFlipIds:this.snapshot.cachedOrderedFlipIds,containerEl:this.element,inProgressAnimations:this.inProgressAnimations,flipCallbacks:this.flipCallbacks,applyTransformOrigin:this.applyTransformOrigin,spring:this.spring,debug:this.debug,staggerConfig:this.staggerConfig,handleEnterUpdateDelete:this.handleEnterUpdateDelete,decisionData:{previous:t,current:e},onComplete:this.onComplete,onStart:this.onStart}),delete this.snapshot)},e.addFlipped=function(t){var e=t.element,i=t.flipId,n=t.opacity,r=t.translate,s=t.scale,o=t.transformOrigin,l=t.spring,p=t.stagger,c=t.delayUntil,u=t.onAppear,d=t.onStart,f=t.onSpringUpdate,h=t.onComplete,g=t.onExit,m=t.shouldFlip,v=t.shouldInvert;if(!e)throw new Error(\"no element provided\");if(!i)throw new Error(\"No flipId provided\");var y={scale:s,translate:r,opacity:n,transformOrigin:o,spring:l,stagger:p,delayUntil:c};y.scale||y.translate||y.opacity||a(y,{translate:!0,scale:!0,opacity:!0}),i&&(e.dataset.flipId=String(i)),e.dataset.flipConfig=JSON.stringify(y),this.flipCallbacks[i]={shouldFlip:m,shouldInvert:v,onAppear:u,onStart:d,onSpringUpdate:f,onComplete:h,onExit:g}},e.addInverted=function(t){var e=t.element,i=t.parent,n=t.opacity,r=t.translate,s=t.scale,o=t.transformOrigin;if(!e)throw new Error(\"no element provided\");if(!i)throw new Error(\"parent must be provided\");var l=i.dataset.flipId,p={scale:s,translate:r,opacity:n,transformOrigin:o};p.scale||p.translate||p.opacity||a(p,{translate:!0,scale:!0,opacity:!0}),e.dataset.inverseFlipId=l,e.dataset.flipConfig=JSON.stringify(p)},t}(),Y=new w,W=function(t){var e=t.values,i=t.onUpdate,n=t.delay,r=void 0===n?0:n,s=t.onComplete,o=a({},g.noWobble,m(t.config)),p=o.overshootClamping,c=Y.createSpring(o.stiffness,o.damping);return c.setOvershootClampingEnabled(!!p),c.addListener({onSpringAtRest:function(t){s&&s(),t.destroy()},onSpringUpdate:function(t){var n=t.getCurrentValue();if(!e)return i(n);var r=Object.keys(e).map(function(t){return[t,l(e[t][0],e[t][1],n)]}).reduce(function(t,e){var i;return Object.assign(t,((i={})[e[0]]=e[1],i))},{});i(r)}}),r?setTimeout(function(){c.setEndValue(1)},r):c.setEndValue(1),c};export{X as Flipper,h as constants,j as disableFlip,B as enableFlip,q as getFlippedElementPositionsBeforeUpdate,N as isFlipEnabled,L as onFlipKeyUpdate,W as spring,p as utilities};\n//# sourceMappingURL=index.es.js.map\n","import{getFlippedElementPositionsBeforeUpdate as e,onFlipKeyUpdate as t,utilities as r,constants as n}from\"flip-toolkit\";export{disableFlip,enableFlip,isFlipEnabled,spring}from\"flip-toolkit\";import i,{createContext as o,Component as p,Children as l,cloneElement as a}from\"react\";import\"prop-types\";function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},s.apply(this,arguments)}function c(e,t){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},c(e,t)}function d(e,t){if(null==e)return{};var r,n,i={},o=Object.keys(e);for(n=0;n<o.length;n++)t.indexOf(r=o[n])>=0||(i[r]=e[r]);return i}var f=/*#__PURE__*/o({}),u=/*#__PURE__*/o(\"portal\"),h=/*#__PURE__*/function(r){var n,o;function p(){for(var e,t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return(e=r.call.apply(r,[this].concat(n))||this).inProgressAnimations={},e.flipCallbacks={},e.el=void 0,e}o=r,(n=p).prototype=Object.create(o.prototype),n.prototype.constructor=n,c(n,o);var l=p.prototype;return l.getSnapshotBeforeUpdate=function(t){return t.flipKey!==this.props.flipKey&&this.el?e({element:this.el,flipCallbacks:this.flipCallbacks,inProgressAnimations:this.inProgressAnimations,portalKey:this.props.portalKey}):null},l.componentDidUpdate=function(e,r,n){this.props.flipKey!==e.flipKey&&this.el&&t({flippedElementPositionsBeforeUpdate:n.flippedElementPositions,cachedOrderedFlipIds:n.cachedOrderedFlipIds,containerEl:this.el,inProgressAnimations:this.inProgressAnimations,flipCallbacks:this.flipCallbacks,applyTransformOrigin:this.props.applyTransformOrigin,spring:this.props.spring,debug:this.props.debug,portalKey:this.props.portalKey,staggerConfig:this.props.staggerConfig,handleEnterUpdateDelete:this.props.handleEnterUpdateDelete,decisionData:{previous:e.decisionData,current:this.props.decisionData},onComplete:this.props.onComplete,onStart:this.props.onStart})},l.render=function(){var e=this,t=this.props,r=t.portalKey,n=/*#__PURE__*/i.createElement(f.Provider,{value:this.flipCallbacks},/*#__PURE__*/i.createElement(t.element,{className:t.className,ref:function(t){return e.el=t}},this.props.children));return r&&(n=/*#__PURE__*/i.createElement(u.Provider,{value:r},n)),n},p}(p);h.defaultProps={applyTransformOrigin:!0,element:\"div\"};var m=[\"children\",\"flipId\",\"inverseFlipId\",\"portalKey\"],y=[\"children\",\"flipId\",\"shouldFlip\",\"shouldInvert\",\"onAppear\",\"onStart\",\"onStartImmediate\",\"onComplete\",\"onExit\",\"onSpringUpdate\"],g=function(e){var t,i=e.children,o=e.flipId,p=e.inverseFlipId,s=e.portalKey,c=d(e,m),f=i,u=function(e){return\"function\"==typeof e}(f);if(!u)try{f=l.only(i)}catch(e){throw new Error(\"Each Flipped component must wrap a single child\")}c.scale||c.translate||c.opacity||r.assign(c,{translate:!0,scale:!0,opacity:!0});var h=((t={})[n.DATA_FLIP_CONFIG]=JSON.stringify(c),t);return void 0!==o?h[n.DATA_FLIP_ID]=String(o):p&&(h[n.DATA_INVERSE_FLIP_ID]=String(p)),void 0!==s&&(h[n.DATA_PORTAL_KEY]=s),u?f(h):/*#__PURE__*/a(f,h)},v=function(e){var t=e.children,n=e.flipId,o=e.shouldFlip,p=e.shouldInvert,l=e.onAppear,a=e.onStart,c=e.onStartImmediate,h=e.onComplete,m=e.onExit,v=e.onSpringUpdate,I=d(e,y);return t?I.inverseFlipId?/*#__PURE__*/i.createElement(g,s({},I),t):/*#__PURE__*/i.createElement(u.Consumer,null,function(e){/*#__PURE__*/return i.createElement(f.Consumer,null,function(d){return r.isObject(d)&&n&&(d[n]={shouldFlip:o,shouldInvert:p,onAppear:l,onStart:a,onStartImmediate:c,onComplete:h,onExit:m,onSpringUpdate:v}),/*#__PURE__*/i.createElement(g,s({flipId:n},I,{portalKey:e}),t)})}):null};v.displayName=\"Flipped\";var I=function(e){var t;/*#__PURE__*/return a(e.children,((t={})[n.DATA_EXIT_CONTAINER]=!0,t))};export{I as ExitContainer,v as Flipped,h as Flipper};\n//# sourceMappingURL=index.es.js.map\n","import * as React from \"react\"\nimport classnames from \"clsx\"\nimport { IconDefinition } from \"@fortawesome/fontawesome-svg-core/index\"\nimport {\n    faSortAlphaUpAlt,\n    faSortAlphaDown,\n    faSortAmountUpAlt,\n    faSortAmountDown,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { SortOrder } from \"@ourworldindata/types\"\n\nexport function SortIcon(props: {\n    type?: \"text\" | \"numeric\"\n    isActiveIcon?: boolean\n    order: SortOrder\n}): React.ReactElement {\n    const type = props.type ?? \"numeric\"\n    const isActiveIcon = props.isActiveIcon ?? false\n\n    let faIcon: IconDefinition\n\n    if (type === \"text\")\n        faIcon =\n            props.order === SortOrder.desc ? faSortAlphaUpAlt : faSortAlphaDown\n    else\n        faIcon =\n            props.order === SortOrder.desc\n                ? faSortAmountDown\n                : faSortAmountUpAlt\n\n    return (\n        <span\n            className={classnames({ \"sort-icon\": true, active: isActiveIcon })}\n        >\n            <FontAwesomeIcon icon={faIcon} />\n        </span>\n    )\n}\n","import cx from \"clsx\"\nimport * as React from \"react\"\nimport { useMemo } from \"react\"\nimport {\n    Autocomplete,\n    Button,\n    Header,\n    Input,\n    Key,\n    ListBox,\n    ListBoxItem,\n    ListBoxSection,\n    Popover,\n    SearchField,\n    Select,\n    SelectValue,\n    useFilter,\n} from \"react-aria-components\"\nimport { faTimesCircle } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { isTouchDevice } from \"@ourworldindata/utils\"\n\nexport interface BasicDropdownOption {\n    value: string\n    label: React.ReactNode\n    trackNote?: string\n}\n\nexport interface DropdownOptionGroup<\n    DropdownOption extends BasicDropdownOption,\n> {\n    label: React.ReactNode\n    options: DropdownOption[]\n}\n\nexport type DropdownCollectionItem<\n    DropdownOption extends BasicDropdownOption,\n> = DropdownOption | DropdownOptionGroup<DropdownOption>\n\nexport type DropdownCollection<DropdownOption extends BasicDropdownOption> =\n    DropdownCollectionItem<DropdownOption>[]\n\nexport interface DropdownProps<DropdownOption extends BasicDropdownOption> {\n    className?: string\n    menuClassName?: string\n    options: DropdownCollection<DropdownOption>\n    value?: DropdownOption | null\n    inputValue?: string\n    onChange?: (option: DropdownOption | null) => void\n    onInputChange?: (value: string) => void\n    placeholder?: string\n    isDisabled?: boolean\n    isClearable?: boolean\n    isLoading?: boolean\n    isSearchable?: boolean\n    renderTriggerValue?: (\n        option: DropdownOption | null\n    ) => React.ReactNode | undefined\n    renderMenuOption?: (option: DropdownOption) => React.ReactNode\n    \"data-track-note\"?: string\n    \"aria-label\"?: string\n}\n\nfunction isOptionGroup<DropdownOption extends BasicDropdownOption>(\n    item: DropdownCollectionItem<DropdownOption>\n): item is DropdownOptionGroup<DropdownOption> {\n    return (item as DropdownOptionGroup<DropdownOption>).options !== undefined\n}\n\nfunction flattenOptions<DropdownOption extends BasicDropdownOption>(\n    options: DropdownCollection<DropdownOption>\n): DropdownOption[] {\n    return options.flatMap((item) =>\n        isOptionGroup(item) ? item.options : [item]\n    )\n}\n\nexport function Dropdown<DropdownOption extends BasicDropdownOption>({\n    className,\n    // We use a separate prop for the menu's className because the Popover\n    // (menu) doesn't render as a child of the select, so it's not trivial to\n    // style it using the main className.\n    menuClassName,\n    options,\n    value,\n    inputValue,\n    onChange,\n    onInputChange,\n    placeholder,\n    isDisabled,\n    isClearable,\n    isLoading,\n    isSearchable,\n    renderTriggerValue,\n    renderMenuOption,\n    ...otherProps\n}: DropdownProps<DropdownOption>): React.ReactElement {\n    const { contains } = useFilter({ sensitivity: \"base\" })\n    const flatOptions = useMemo(() => flattenOptions(options), [options])\n    const selectedValue = value ?? null\n\n    function handleSelectionChange(key: Key | null): void {\n        if (key === null) {\n            onChange?.(null)\n            return\n        }\n\n        if (typeof key === \"number\") return\n        const selected = flatOptions.find((option) => option.value === key)\n        if (selected) {\n            onChange?.(selected)\n        }\n    }\n\n    const listBox = (\n        <ListBox className=\"grapher-dropdown-listbox\">\n            {options.map((item, index) =>\n                isOptionGroup(item) ? (\n                    <ListBoxSection\n                        key={`section-${index}`}\n                        id={`section-${index}`}\n                        className=\"group\"\n                    >\n                        <Header className=\"group-heading\">{item.label}</Header>\n                        {item.options.map((option) => (\n                            <ListBoxItem\n                                className=\"option\"\n                                key={option.value}\n                                id={option.value}\n                                textValue={\n                                    typeof option.label === \"string\"\n                                        ? option.label\n                                        : String(option.value)\n                                }\n                                data-track-note={option.trackNote}\n                            >\n                                {renderMenuOption\n                                    ? renderMenuOption(option)\n                                    : option.label}\n                            </ListBoxItem>\n                        ))}\n                    </ListBoxSection>\n                ) : (\n                    <ListBoxItem\n                        className=\"option\"\n                        key={item.value}\n                        id={item.value}\n                        textValue={\n                            typeof item.label === \"string\"\n                                ? item.label\n                                : String(item.value)\n                        }\n                        data-track-note={item.trackNote}\n                    >\n                        {renderMenuOption ? renderMenuOption(item) : item.label}\n                    </ListBoxItem>\n                )\n            )}\n        </ListBox>\n    )\n\n    const popover = (\n        <Popover\n            className={cx(\"grapher-dropdown-menu\", menuClassName)}\n            offset={4}\n        >\n            {isSearchable ? (\n                // If inputValue is provided, the component is controlled\n                // and we expect the filtering to happen outside of it.\n                <Autocomplete filter={inputValue ? undefined : contains}>\n                    <SearchField\n                        className=\"grapher-dropdown-search\"\n                        aria-label=\"Search\"\n                        autoFocus\n                        value={inputValue}\n                        onChange={onInputChange}\n                    >\n                        <span className=\"grapher-dropdown-search-icon\" />\n                        <Input\n                            className=\"grapher-dropdown-search-input\"\n                            style={{\n                                fontSize: isTouchDevice() ? 16 : undefined,\n                            }}\n                        />\n                        <Button className=\"grapher-dropdown-search-reset\">\n                            <FontAwesomeIcon icon={faTimesCircle} aria-hidden />\n                        </Button>\n                    </SearchField>\n                    {listBox}\n                </Autocomplete>\n            ) : (\n                listBox\n            )}\n        </Popover>\n    )\n\n    return (\n        <Select\n            className={cx(\"grapher-dropdown\", className)}\n            // null means no selection, undefined means the component is\n            // uncontrolled, so we need to set it explicitly.\n            value={value?.value ?? null}\n            onChange={handleSelectionChange}\n            placeholder={placeholder}\n            isDisabled={isDisabled}\n            {...otherProps}\n        >\n            <Button\n                className={cx(\"control\", {\n                    loading: isLoading,\n                })}\n            >\n                <SelectValue className=\"select-value\">\n                    {({ selectedItems, defaultChildren }) => {\n                        if (renderTriggerValue && selectedItems.length === 1) {\n                            return renderTriggerValue(selectedValue)\n                        }\n                        return defaultChildren\n                    }}\n                </SelectValue>\n            </Button>\n            {isClearable && value && (\n                <Button\n                    className=\"clear-indicator\"\n                    slot={null}\n                    type=\"button\"\n                    onPress={() => onChange?.(null)}\n                    aria-label=\"Clear selection\"\n                />\n            )}\n            {popover}\n        </Select>\n    )\n}\n","import { computed, makeObservable } from \"mobx\"\nimport { SelectionArray } from \"./SelectionArray\"\nimport {\n    Aggregate,\n    checkHasMembers,\n    checkIsCountry,\n    Continent,\n    Country,\n    EntityName,\n    excludeUndefined,\n    getCountryNamesForRegion,\n    getRegionByName,\n    IncomeGroup,\n    Region,\n} from \"@ourworldindata/utils\"\nimport * as R from \"remeda\"\n\nexport class MapSelectionArray extends SelectionArray {\n    constructor(selectedEntityNames: EntityName[] = []) {\n        super(selectedEntityNames)\n\n        makeObservable(this)\n    }\n\n    @computed private get selectedEntitiesWithRegionInfo(): Region[] {\n        return excludeUndefined(\n            this.selectedEntityNames.map((name) => getRegionByName(name))\n        )\n    }\n\n    @computed get selectedCountries(): Country[] {\n        return this.selectedEntitiesWithRegionInfo.filter((region) =>\n            checkIsCountry(region)\n        )\n    }\n\n    @computed get selectedCountryNames(): EntityName[] {\n        return this.selectedCountries.map((country) => country.name)\n    }\n\n    @computed get hasCountries(): boolean {\n        return this.selectedCountries.length > 0\n    }\n\n    /**\n     * Subset of the selected countries that are part of the selected regions.\n     * Returns all selected countries if no region is selected.\n     */\n    @computed get selectedCountryNamesInForeground(): EntityName[] {\n        if (!this.hasRegions) return this.selectedCountryNames\n        const memberCountries = this.countryNamesForSelectedRegionsSet\n        return this.selectedCountries\n            .filter((country) => memberCountries.has(country.name))\n            .map((country) => country.name)\n    }\n\n    /**\n     * Complement of `selectedCountryNamesInForeground`.\n     * Subset of the selected countries that are not part of any selected region.\n     * Returns an empty list if no region is selected.\n     */\n    @computed get selectedCountryNamesInBackground(): EntityName[] {\n        return R.difference(\n            this.selectedCountryNames,\n            this.selectedCountryNamesInForeground\n        )\n    }\n\n    /**\n     * List of selected regions where a region is any geographic entity that\n     * is made up of a set of countries.\n     */\n    @computed get selectedRegions(): (Continent | Aggregate | IncomeGroup)[] {\n        return this.selectedEntitiesWithRegionInfo.filter(\n            (region): region is Continent | Aggregate | IncomeGroup =>\n                checkHasMembers(region) && region.code !== \"OWID_WRL\"\n        )\n    }\n\n    @computed get selectedRegionNames(): EntityName[] {\n        return this.selectedRegions.map((region) => region.name)\n    }\n\n    @computed get hasRegions(): boolean {\n        return this.selectedRegions.length > 0\n    }\n\n    @computed get countryNamesForSelectedRegionsSet(): Set<EntityName> {\n        return new Set(\n            this.selectedRegions.flatMap((region) =>\n                getCountryNamesForRegion(region)\n            )\n        )\n    }\n\n    @computed get countryNamesForSelectedRegions(): EntityName[] {\n        return Array.from(this.countryNamesForSelectedRegionsSet)\n    }\n}\n","import { ColorScaleBin } from \"../color/ColorScaleBin\"\nimport { Bounds, ColumnSlug } from \"@ourworldindata/utils\"\nimport {\n    Color,\n    EntityName,\n    MapRegionName,\n    SeriesName,\n    GlobeRegionName,\n    ProjectionColumnInfo,\n    type GrapherInteractionEvent,\n    Time,\n} from \"@ourworldindata/types\"\nimport { ChartManager } from \"../chart/ChartManager\"\nimport { MapConfig } from \"./MapConfig\"\nimport { ChartSeries } from \"../chart/ChartInterface\"\nimport { GlobeController } from \"./GlobeController\"\nimport { MapSelectionArray } from \"../selection/MapSelectionArray.js\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\nimport * as R from \"remeda\"\nimport { InteractionState } from \"../interaction/InteractionState\"\n\nexport declare type SVGMouseEvent = React.MouseEvent<SVGElement>\n\nexport type GeoFeature = GeoJSON.Feature<GeoJSON.GeometryObject>\nexport type MapBracket = ColorScaleBin\n\nexport const MAP_HOVER_TARGET_RANGE = 20\n\nexport const DEFAULT_STROKE_COLOR = \"#333\"\nexport const HOVER_STROKE_COLOR = \"#111\"\n\nexport const DEFAULT_STROKE_WIDTH = 0.3\nexport const HOVER_STROKE_WIDTH = 1.5\nexport const SELECTED_STROKE_WIDTH = 1\n\nexport const BLUR_FILL_OPACITY = 0.2\nexport const BLUR_STROKE_OPACITY = 0.5\n\nexport const PROJECTED_DATA_LEGEND_COLOR = \"#ffffff\"\n\nexport const MAP_CHART_CLASSNAME = \"MapChart\"\nexport const CHOROPLETH_MAP_CLASSNAME = \"ChoroplethMap\"\nexport const GEO_FEATURES_CLASSNAME = \"GeoFeatures\"\n\nexport const DEFAULT_GLOBE_ZOOM = 1\nexport const GLOBE_MIN_ZOOM = 1\nexport const GLOBE_MAX_ZOOM = 5\nexport const GLOBE_COUNTRY_ZOOM = 2.5\n\nexport const GLOBE_LATITUDE_MIN = -65\nexport const GLOBE_LATITUDE_MAX = 65\n\nexport const DEFAULT_GLOBE_SIZE = 500 // defined by d3\nexport const DEFAULT_GLOBE_ROTATION: [number, number] = [-30, 20] // Atlantic ocean (i.e. Americas & Europe)\nexport const DEFAULT_GLOBE_ROTATIONS_FOR_TIME: Record<\n    \"UTC_MORNING\" | \"UTC_MIDDAY\" | \"UTC_EVENING\",\n    [number, number]\n> = {\n    UTC_MORNING: [110, 15], // Asia & Oceania\n    UTC_MIDDAY: [20, 20], // Europe & Africa\n    UTC_EVENING: [-90, 15], // North & South America\n}\n\nexport const ANNOTATION_COLOR_DARK = HOVER_STROKE_COLOR\nexport const ANNOTATION_COLOR_LIGHT = \"#fff\"\n\nexport const ANNOTATION_FONT_SIZE_INTERNAL_DEFAULT = 11\nexport const ANNOTATION_FONT_SIZE_INTERNAL_MIN = 7\nexport const ANNOTATION_FONT_SIZE_EXTERNAL_DEFAULT = 8\nexport const ANNOTATION_FONT_SIZE_EXTERNAL_MAX = 11\n\nexport const ANNOTATION_MARKER_LINE_LENGTH_DEFAULT = 6\nexport const ANNOTATION_MARKER_LINE_LENGTH_MAX = 10\n\nexport const MAP_REGION_LABELS: Record<MapRegionName, string> = {\n    World: \"World\",\n    Africa: \"Africa\",\n    NorthAmerica: \"North America\",\n    SouthAmerica: \"South America\",\n    Asia: \"Asia\",\n    Europe: \"Europe\",\n    Oceania: \"Oceania\",\n}\n\nexport const MAP_REGION_NAMES = R.invert(MAP_REGION_LABELS)\n\nexport interface ChoroplethSeries extends ChartSeries {\n    color: Color\n    value: number | string\n    time: number\n    isProjection?: boolean\n}\n\nexport type ChoroplethSeriesByName = Map<SeriesName, ChoroplethSeries>\n\nexport interface ChoroplethMapManager {\n    choroplethData: ChoroplethSeriesByName\n    choroplethMapBounds: Bounds\n    mapConfig: MapConfig\n    mapColumn: CoreColumn\n    globeController?: GlobeController\n    selectionArray?: MapSelectionArray\n    fontSize?: number\n    getHoverState?: (featureId: string) => InteractionState\n    isSelected?: (featureId: string) => boolean\n    onMapMouseOver?: (d: GeoFeature) => void\n    onMapMouseLeave?: () => void\n    isMapSelectionEnabled?: boolean\n    isStatic?: boolean\n    patternScale?: number\n    patternIdSuffix?: string\n    binColors?: string[]\n    hasProjectedData?: boolean\n    inapplicableEntityNamesSet?: Set<EntityName>\n    inapplicableColor?: Color\n    mapViewport?: MapViewport\n    isFaceted?: boolean\n}\n\nexport enum RenderFeatureType {\n    Map = \"map\",\n    Globe = \"globe\",\n}\n\nexport interface RenderFeature {\n    type: RenderFeatureType\n    id: string\n    geo: GeoFeature\n    geoCentroid: [number, number] // unprojected\n    geoBounds: Bounds // unprojected\n}\n\nexport interface MapRenderFeature extends RenderFeature {\n    type: RenderFeatureType.Map\n    path: string\n    projBounds: Bounds\n}\n\nexport interface GlobeRenderFeature extends RenderFeature {\n    type: RenderFeatureType.Globe\n}\n\nexport interface MapChartManager extends ChartManager {\n    mapColumnSlug?: ColumnSlug\n    mapConfig?: MapConfig\n    inapplicableEntityNames?: EntityName[]\n    targetTime?: Time\n    globeController?: GlobeController\n    isMapSelectionEnabled?: boolean\n    highlightedTimesInTooltip?: [Time, Time]\n    mapViewport?: MapViewport\n    isFaceted?: boolean\n    logGrapherInteractionEvent?: (\n        action: GrapherInteractionEvent,\n        target?: string\n    ) => void\n    projectionColumnInfoBySlug?: Map<ColumnSlug, ProjectionColumnInfo>\n}\n\nexport interface GlobeViewport {\n    rotation: [number, number]\n    zoom: number\n}\n\nexport interface MapViewport {\n    x: number\n    y: number\n    width: number\n    height: number\n    ratio: number\n}\n\nexport const GLOBE_VIEWPORTS: Record<GlobeRegionName, GlobeViewport> = {\n    Europe: { rotation: [10, 55], zoom: 2.95 },\n    Africa: { rotation: [20, 0], zoom: 1.55 },\n    NorthAmerica: { rotation: [-94.5, 43], zoom: 1.5 },\n    SouthAmerica: { rotation: [-62, -22], zoom: 1.75 },\n    Asia: { rotation: [81, 26], zoom: 1.85 },\n    Oceania: { rotation: [152.65, -18.8], zoom: 2 },\n}\n\n/** Viewport for each region, defined by center and width+height in fractional coordinates */\nexport const MAP_VIEWPORTS: Record<MapRegionName, MapViewport> = {\n    World: { x: 0.545, y: 0.5, width: 0.91, height: 1.01, ratio: 2.1 },\n    Europe: { x: 0.53, y: 0.21, width: 0.2, height: 0.2, ratio: 1.77 },\n    Africa: { x: 0.48, y: 0.7, width: 0.21, height: 0.38, ratio: 1.07 },\n    NorthAmerica: { x: 0.46, y: 0.4, width: 0.19, height: 0.35, ratio: 1.12 },\n    SouthAmerica: { x: 0.52, y: 0.815, width: 0.1, height: 0.26, ratio: 0.62 },\n    Asia: { x: 0.74, y: 0.45, width: 0.36, height: 0.5, ratio: 1.65 },\n    Oceania: { x: 0.51, y: 0.75, width: 0.1, height: 0.2, ratio: 1.47 },\n}\n\n// On narrow screens, the 2D map extends into the frame padding, leaving only this much space on either side\nexport const MAP_NARROW_FRAME_PADDING_HORIZONTAL = 4\n\nexport interface Circle {\n    cx: number // center x\n    cy: number // center y\n    r: number // radius\n}\n\nexport interface Ellipse {\n    cx: number // center x\n    cy: number // center y\n    rx: number // radius on the x-axis\n    ry: number // radius on the y-axis\n}\n\n// ellipse expressed in lon/lat\nexport interface EllipseCoords {\n    cx: number\n    cy: number\n    left: number // left x\n    top: number // top y\n}\n\ninterface BaseAnnotation {\n    id: string\n    feature: RenderFeature\n    placedBounds: Bounds\n    text: string\n    fontSize: number\n    color: string\n}\n\nexport interface InternalAnnotation extends BaseAnnotation {\n    type: \"internal\"\n    ellipse: Ellipse\n}\n\nexport interface ExternalAnnotation extends BaseAnnotation {\n    type: \"external\"\n    direction: Direction\n    anchor: [number, number]\n}\n\nexport type Annotation = InternalAnnotation | ExternalAnnotation\n\nexport type Direction =\n    | \"left\"\n    | \"right\"\n    | \"top\"\n    | \"bottom\"\n    | \"leftTop\"\n    | \"leftBottom\"\n    | \"rightTop\"\n    | \"rightBottom\"\n\nexport type MapColumnInfo =\n    // the map column isn't a projection\n    | { type: \"historical\"; slug: ColumnSlug }\n    // the map column is a projection without an historical counterpart\n    | { type: \"projected\"; slug: ColumnSlug }\n    // the map column is a projection and has an historical counterpart\n    | ({\n          type: \"historical+projected\"\n          slug: ColumnSlug\n      } & ProjectionColumnInfo)\n","import { observable, makeObservable } from \"mobx\"\nimport {\n    GlobeConfig,\n    MapRegionName,\n    MapConfigInterface,\n    TimeBound,\n    EntityName,\n} from \"@ourworldindata/types\"\nimport { ColorScaleConfig } from \"../color/ColorScaleConfig\"\nimport {\n    ColumnSlug,\n    Persistable,\n    updatePersistables,\n    objectWithPersistablesToObject,\n    deleteRuntimeAndUnchangedProps,\n    maxTimeBoundFromJSONOrPositiveInfinity,\n    maxTimeToJSON,\n    minTimeToJSON,\n    trimObject,\n    NoUndefinedValues,\n    ToleranceStrategy,\n    minTimeBoundFromJSONOrNegativeInfinity,\n} from \"@ourworldindata/utils\"\nimport { MapSelectionArray } from \"../selection/MapSelectionArray\"\nimport { DEFAULT_GLOBE_ROTATION, DEFAULT_GLOBE_ZOOM } from \"./MapChartConstants\"\nimport * as R from \"remeda\"\n\n// MapConfig holds the data and underlying logic needed by MapTab.\n// It wraps the map property on ChartConfig.\n// TODO: migrate database config & only pass legend props\nclass MapConfigDefaults {\n    columnSlug: ColumnSlug | undefined = undefined\n    time: TimeBound | undefined = undefined\n    startTime: TimeBound | undefined = undefined\n    timeTolerance: number | undefined = undefined\n    toleranceStrategy: ToleranceStrategy | undefined = undefined\n    hideTimeline: boolean | undefined = undefined\n    region = MapRegionName.World\n\n    globe: GlobeConfig = {\n        isActive: false,\n        rotation: DEFAULT_GLOBE_ROTATION, // specified as [lot, lan]\n        zoom: DEFAULT_GLOBE_ZOOM,\n    }\n\n    colorScale = new ColorScaleConfig()\n    // Show the label from colorSchemeLabels in the tooltip instead of the numeric value\n    tooltipUseCustomLabels: boolean | undefined = undefined\n\n    constructor() {\n        makeObservable(this, {\n            columnSlug: observable,\n            time: observable,\n            startTime: observable,\n            timeTolerance: observable,\n            toleranceStrategy: observable,\n            hideTimeline: observable,\n            region: observable,\n            globe: observable,\n            colorScale: observable,\n            tooltipUseCustomLabels: observable,\n        })\n    }\n}\n\nexport class MapConfig extends MapConfigDefaults implements Persistable {\n    // Runtime-only state\n    selection = new MapSelectionArray()\n    hoverCountry?: EntityName\n\n    updateFromObject(obj: Partial<MapConfigInterface>): void {\n        updatePersistables(this, obj)\n\n        this.time = maxTimeBoundFromJSONOrPositiveInfinity(obj.time)\n\n        // If a start time is provided, use it; otherwise, set it to the end time\n        // so that a single map (not a facetted one) is shown by default\n        if (obj.startTime) {\n            this.startTime = minTimeBoundFromJSONOrNegativeInfinity(\n                obj.startTime\n            )\n        } else {\n            this.startTime = this.time\n        }\n\n        // Map [lat, lon] to the internally used [lon, lat]\n        if (obj.globe?.rotation) {\n            this.globe = {\n                ...this.globe,\n                rotation:\n                    obj.globe.rotation.toReversed() as GlobeConfig[\"rotation\"],\n            }\n        }\n\n        // Update selection\n        if (obj.selectedEntityNames)\n            this.selection.setSelectedEntities(obj.selectedEntityNames)\n    }\n\n    toObject(): NoUndefinedValues<MapConfigInterface> {\n        const obj: MapConfigInterface = objectWithPersistablesToObject(this)\n        deleteRuntimeAndUnchangedProps(obj, new MapConfigDefaults())\n\n        if (obj.time) obj.time = maxTimeToJSON(this.time)\n        if (obj.startTime) obj.startTime = minTimeToJSON(this.startTime)\n\n        // No need to store the startTime if it's the same as the end time\n        if (obj.startTime === obj.time) delete obj.startTime\n\n        // Persist selection\n        obj.selectedEntityNames = this.selection.selectedEntityNames\n\n        // Don't persist globe settings if the globe isn't active\n        if (!obj.globe?.isActive) delete obj.globe\n\n        // Round rotation coordinates before persisting\n        if (obj.globe?.rotation)\n            obj.globe = {\n                ...obj.globe,\n                rotation: [\n                    // we use [lon, lat] internally, but persist [lat, lon]\n                    R.round(obj.globe.rotation[1], 2),\n                    R.round(obj.globe.rotation[0], 2),\n                ],\n            }\n\n        // Round zoom level before persisting\n        if (obj.globe?.zoom) {\n            obj.globe = {\n                ...obj.globe,\n                zoom: R.round(obj.globe.zoom, 2),\n            }\n        }\n\n        return trimObject(obj)\n    }\n\n    constructor(obj?: Partial<MapConfigInterface>) {\n        super()\n        makeObservable(this, {\n            selection: observable,\n            hoverCountry: observable,\n        })\n        if (obj) this.updateFromObject(obj)\n    }\n\n    isContinentActive(): this is MapConfigWithActiveContinent {\n        return this.region !== MapRegionName.World\n    }\n\n    is2dContinentActive(): this is MapConfigWithActiveContinent {\n        return this.isContinentActive() && !this.globe.isActive\n    }\n}\n\ntype MapConfigWithActiveContinent = MapConfig & {\n    region: Exclude<MapRegionName, \"World\">\n}\n","import * as _ from \"lodash-es\"\nimport { EntityName } from \"@ourworldindata/types\"\nimport {\n    getRegionPublishers,\n    Country,\n    excludeUndefined,\n    getRegionByName,\n    parseRegionNameSuffix,\n    toPublisherLookupKey,\n    type RegionPublisher,\n} from \"@ourworldindata/utils\"\nimport {\n    ADDITIONAL_REGION_PUBLISHERS,\n    isWorldEntityName,\n    type AdditionalRegionPublisher,\n} from \"./GrapherConstants\"\nimport * as R from \"remeda\"\n\ntype OwidRegionGroup =\n    | \"countries\"\n    | \"continents\"\n    | \"incomeGroups\"\n    | \"historicalCountries\"\n\n/** Any institution we can recognise from an entity name's suffix */\nexport type AnyRegionPublisher = RegionPublisher | AdditionalRegionPublisher\n\nexport type RegionGroupKey = OwidRegionGroup | AnyRegionPublisher\n\n/**\n * The name each group of regions is shown under in the entity selector\n * and on the data tab\n */\nexport const regionGroupLabels: Record<RegionGroupKey, string> = {\n    // OWID-defined region groups\n    countries: \"Countries\",\n    continents: \"Continents\", // OWID-defined continents\n    incomeGroups: \"Income groups\",\n    historicalCountries: \"Historical countries and regions\", // e.g. USSR, Austria-Hungary\n\n    // Publishers whose regions are defined in regions.ts\n    who: \"World Health Organization regions\",\n    wb: \"World Bank regions\",\n    pew: \"Pew Research Center regions\",\n    un: \"United Nations regions\",\n    un_m49: \"United Nations M49 regions\",\n    un_sdg: \"UN Sustainable Development Goals regions\",\n    iea: \"International Energy Agency regions\",\n    ei: \"Energy Institute regions\",\n    ember: \"Ember regions\",\n    maddison: \"Maddison Project Database regions\",\n    wid: \"World Inequality Database regions\",\n    ilo: \"International Labour Organization regions\",\n    fao: \"Food and Agriculture Organization regions\",\n    ihme_gbd: \"IHME Global Burden of Disease regions\",\n    ucdp: \"Uppsala Conflict Data Program regions\",\n\n    // Publishers with no region definitions in regions.ts\n    unsd: \"UN Statistics Division regions\",\n    pip: \"PIP regions\", // World Bank’s Poverty and Inequality Platform\n    gcp: \"Global Carbon Project regions\",\n    niaid: \"NIAID regions\", // National Institute of Allergy and Infectious Diseases\n    unicef: \"UNICEF regions\",\n    unaids: \"UNAIDS regions\", // Joint United Nations Programme on HIV and AIDS\n    undp: \"UN Development Programme regions\",\n    oecd: \"OECD regions\", // Organisation for Economic Co-operation and Development\n}\n\nconst regionGroupKeySet = new Set<string>(Object.keys(regionGroupLabels))\nconst regionPublisherSet = new Set<string>([\n    ...getRegionPublishers(),\n    ...ADDITIONAL_REGION_PUBLISHERS,\n])\n\nexport interface RegionGroup {\n    regionGroupKey: RegionGroupKey\n    entityNames: EntityName[]\n}\n\nexport type EntitiesByRegionGroup = Map<RegionGroupKey, EntityName[]>\n\nconst publishersByLookupKey = new Map<string, AnyRegionPublisher>(\n    [...regionPublisherSet].map((key) => [\n        toPublisherLookupKey(key),\n        key as AnyRegionPublisher,\n    ])\n)\n\nexport function groupEntitiesByRegionType(\n    entityNames: EntityName[]\n): RegionGroup[] {\n    // The 'World' entity shouldn't show up in any of the groups\n    const availableEntityNames = entityNames.filter(\n        (entityName) => !isWorldEntityName(entityName)\n    )\n\n    // Map entities to their regions\n    const availableRegions = excludeUndefined(\n        availableEntityNames.map((entityName) => getRegionByName(entityName))\n    )\n\n    // Group regions by type\n    const regionsGroupedByType = _.groupBy(\n        availableRegions,\n        (r) => r.regionType\n    )\n\n    const entitiesByRegionGroup: RegionGroup[] = []\n\n    // Split countries into historical and non-historical\n    const [historicalCountries, nonHistoricalCountries] = R.partition(\n        regionsGroupedByType.country ?? [],\n        (country) => !!(country as Country).isHistorical\n    )\n\n    // Add the 'countries' group\n    if (nonHistoricalCountries.length > 0) {\n        entitiesByRegionGroup.push({\n            regionGroupKey: \"countries\",\n            entityNames: nonHistoricalCountries.map((region) => region.name),\n        })\n    }\n\n    // Add the 'continents' group\n    if (regionsGroupedByType.continent) {\n        entitiesByRegionGroup.push({\n            regionGroupKey: \"continents\",\n            entityNames: regionsGroupedByType.continent.map(\n                (region) => region.name\n            ),\n        })\n    }\n\n    // Add the 'incomeGroups' group\n    if (regionsGroupedByType.income_group) {\n        // match by name instead of relying on the regions file because\n        // some charts have income groups that aren't listed in the regions\n        // file, e.g. 'Lower-middle-income countries'\n        const incomeGroups = availableEntityNames.filter(\n            (entityName) =>\n                entityName.includes(\"income countries\") ||\n                // matches 'No income group available', for example\n                entityName.includes(\"income group\")\n        )\n\n        entitiesByRegionGroup.push({\n            regionGroupKey: \"incomeGroups\",\n            entityNames: incomeGroups,\n        })\n    }\n\n    const entitiesByPublisher = R.groupBy(\n        availableEntityNames,\n        (entityName) => parseLabel(entityName).publisherKey\n    )\n\n    for (const [publisher, entityNames] of R.entries(entitiesByPublisher)) {\n        entitiesByRegionGroup.push({ regionGroupKey: publisher, entityNames })\n    }\n\n    // Add a group for historical countries\n    if (historicalCountries.length > 0) {\n        entitiesByRegionGroup.push({\n            regionGroupKey: \"historicalCountries\",\n            entityNames: historicalCountries.map((region) => region.name),\n        })\n    }\n\n    return entitiesByRegionGroup\n}\n\nexport interface ParsedLabel {\n    raw: string // e.g. \"Africa (UN)\"\n    name: string // e.g. \"Africa\"\n    suffix?: string // e.g. \"UN\"\n    publisherKey?: AnyRegionPublisher // e.g. \"un\"\n}\n\nexport function parseLabel(raw: string): ParsedLabel {\n    const parsed = parseRegionNameSuffix(raw)\n    if (!parsed) return { raw, name: raw }\n\n    const { name, suffix } = parsed\n    const publisherKey = publishersByLookupKey.get(toPublisherLookupKey(suffix))\n    if (!publisherKey) return { raw, name, suffix }\n\n    return { raw, name, suffix, publisherKey }\n}\n\nexport function isAnyRegionPublisher(\n    candidate: string\n): candidate is AnyRegionPublisher {\n    return regionPublisherSet.has(candidate)\n}\n\nexport function isEntityRegionGroupKey(\n    candidate: string\n): candidate is RegionGroupKey {\n    return regionGroupKeySet.has(candidate)\n}\n","import {\n    faCircleXmark,\n    faMagnifyingGlass,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport * as React from \"react\"\nimport { forwardRef } from \"react\"\nimport cx from \"clsx\"\nimport { isTouchDevice } from \"@ourworldindata/utils\"\n\nexport const SearchField = forwardRef<\n    HTMLInputElement,\n    {\n        className?: string\n        value: string\n        placeholder: string\n        trackNote: string\n        onChange: (value: string) => void\n        onClear: () => void\n        onKeyDown?: (event: KeyboardEvent) => void\n    }\n>(function SearchField(\n    { className, value, placeholder, trackNote, onChange, onClear, onKeyDown },\n    ref\n): React.ReactElement {\n    return (\n        <div\n            className={cx(className, \"grapher-search-field\", {\n                \"grapher-search-field--empty\": !value,\n            })}\n        >\n            <FontAwesomeIcon className=\"search-icon\" icon={faMagnifyingGlass} />\n            <input\n                ref={ref}\n                type=\"search\"\n                value={value}\n                onChange={(event) => onChange(event.currentTarget.value)}\n                onKeyDown={(event) => onKeyDown?.(event.nativeEvent)}\n                data-track-note={trackNote}\n                aria-label={placeholder}\n                // prevent auto-zoom on ios\n                style={{ fontSize: isTouchDevice() ? 16 : undefined }}\n            />\n            {/* We don't use the input's built-in placeholder because\n                we want the input text and placeholder text to have different\n                font sizes, which isn't well-supported across browsers.\n                The input text needs to be 16px to prevent auto-zoom on iOS,\n                but the placeholder text should have a smaller font size. */}\n            {!value && (\n                <span className=\"search-placeholder\">{placeholder}</span>\n            )}\n            {value && (\n                <button\n                    type=\"button\"\n                    className=\"clear\"\n                    onClick={() => onClear()}\n                >\n                    <FontAwesomeIcon icon={faCircleXmark} />\n                </button>\n            )}\n        </div>\n    )\n})\n","import * as _ from \"lodash-es\"\nimport {\n    AssetMap,\n    CatalogDataForKey,\n    CatalogKey,\n    ColumnTypeNames,\n    NumericCatalogKey,\n    OwidColumnDef,\n} from \"@ourworldindata/types\"\nimport { fetchJson, readFromAssetMap } from \"@ourworldindata/utils\"\n\n/**\n * Gets the asset map key for a catalog path.\n * E.g., \"population\" -> \"catalog/population.json\"\n */\nexport function getCatalogAssetKey(key: CatalogKey): string {\n    return `catalog/${key}.json`\n}\n\n/** Paths to catalog data files */\nconst catalogPaths: Record<CatalogKey, `${string}.json`> = {\n    population: \"population/population.json\",\n    gdp: \"gdp/gdp.json\",\n    neighbors: \"neighbours/neighbours.json\",\n}\n\n/** Column definitions with display metadata for numeric catalog data */\nexport const columnDefsByCatalogKey: Record<NumericCatalogKey, OwidColumnDef> =\n    {\n        population: {\n            slug: \"catalog-population\",\n            name: \"Population\",\n            type: ColumnTypeNames.Integer,\n        },\n        gdp: {\n            slug: \"catalog-gdp\",\n            name: \"GDP per capita\",\n            type: ColumnTypeNames.Integer,\n            shortUnit: \"$\",\n        },\n    }\n\n/** Resolves the URL for a catalog data file */\nfunction getCatalogDataUrl<K extends CatalogKey>(\n    key: K,\n    { baseUrl, assetMap }: { baseUrl: string; assetMap?: AssetMap }\n): string {\n    const assetKey = getCatalogAssetKey(key)\n    const catalogPath = `${baseUrl}/external/owid_grapher/latest/${catalogPaths[key]}`\n    return readFromAssetMap(assetMap, {\n        path: assetKey,\n        fallback: catalogPath,\n    })\n}\n\n/** Loads indicator data from the OWID catalog */\nasync function _loadCatalogData<K extends CatalogKey>(\n    key: K,\n    options: { baseUrl: string; assetMap?: AssetMap }\n): Promise<CatalogDataForKey<K>> {\n    const url = getCatalogDataUrl(key, options)\n    return fetchJson(url)\n}\n\nexport const loadCatalogData = _.memoize(_loadCatalogData, (key, options) =>\n    getCatalogDataUrl(key, options)\n)\n","import type { NumericCatalogKey } from \"@ourworldindata/types\"\nimport { columnDefsByCatalogKey } from \"../core/loadCatalogData.js\"\n\n/** Catalog indicators that can be loaded on demand for sorting in EntitySelector */\nexport const EXTERNAL_SORT_INDICATOR_DEFINITIONS = [\n    {\n        catalogKey: \"population\" satisfies NumericCatalogKey,\n        slug: columnDefsByCatalogKey[\"population\"].slug,\n        label: \"Population\",\n    },\n    {\n        catalogKey: \"gdp\" satisfies NumericCatalogKey,\n        slug: columnDefsByCatalogKey[\"gdp\"].slug,\n        label: \"GDP per capita (int. $)\",\n    },\n] as const\n\nexport type ExternalSortIndicatorDefinition =\n    (typeof EXTERNAL_SORT_INDICATOR_DEFINITIONS)[number]\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport { observer } from \"mobx-react\"\nimport {\n    computed,\n    action,\n    comparer,\n    reaction,\n    when,\n    IReactionDisposer,\n    makeObservable,\n} from \"mobx\"\nimport cx from \"clsx\"\nimport a from \"indefinite\"\nimport {\n    isTouchDevice,\n    SortOrder,\n    isFiniteWithGuard,\n    CoreValueType,\n    getUserCountryInformation,\n    regions,\n    Tippy,\n    excludeUndefined,\n    FuzzySearch,\n    getUserNavigatorLanguagesNonEnglish,\n    getRegionAlternativeNames,\n    checkIsOwidIncomeGroupCode,\n    checkHasMembers,\n    Region,\n    getRegionByName,\n    makeSafeForCSS,\n    convertDaysSinceEpochToDate,\n    isSubYearly,\n} from \"@ourworldindata/utils\"\nimport {\n    Checkbox,\n    RadioButton,\n    OverlayHeader,\n} from \"@ourworldindata/components\"\nimport {\n    faLocationArrow,\n    faArrowRightArrowLeft,\n    faFilter,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { Flipper, Flipped } from \"react-flip-toolkit\"\nimport {\n    combineHistoricalAndProjectionColumns,\n    makeSelectionArray,\n} from \"../chart/ChartUtils.js\"\nimport {\n    DEFAULT_GRAPHER_ENTITY_TYPE,\n    DEFAULT_GRAPHER_ENTITY_TYPE_PLURAL,\n    isPopulationVariableETLPath,\n    isWorldEntityName,\n} from \"../core/GrapherConstants\"\nimport {\n    CoreColumn,\n    makeOriginalTimeSlugFromColumnSlug,\n    OwidTable,\n} from \"@ourworldindata/core-table\"\nimport { SortIcon } from \"../controls/SortIcon\"\nimport { Dropdown } from \"../controls/Dropdown\"\nimport { scaleLinear, type ScaleLinear } from \"d3-scale\"\nimport {\n    AdditionalGrapherDataFetchFn,\n    CatalogNumericDataPoint,\n    ColumnSlug,\n    ColumnTypeNames,\n    EntityName,\n    NumericCatalogKey,\n    OwidColumnDef,\n    OwidTableSlugs,\n    ProjectionColumnInfo,\n    Time,\n    ToleranceStrategy,\n    type EntitySelectorEvent,\n} from \"@ourworldindata/types\"\nimport * as R from \"remeda\"\nimport { MapConfig } from \"../mapCharts/MapConfig\"\nimport { match } from \"ts-pattern\"\nimport {\n    regionGroupLabels,\n    EntitiesByRegionGroup,\n    RegionGroupKey,\n    RegionGroup,\n    isAnyRegionPublisher,\n    parseLabel,\n} from \"../core/RegionGroups\"\nimport { SearchField } from \"../controls/SearchField\"\nimport { MAP_REGION_LABELS } from \"../mapCharts/MapChartConstants.js\"\nimport { columnDefsByCatalogKey } from \"../core/loadCatalogData.js\"\nimport {\n    EXTERNAL_SORT_INDICATOR_DEFINITIONS,\n    type ExternalSortIndicatorDefinition,\n} from \"./EntitySelectorConstants.js\"\n\nexport type CoreColumnBySlug = Record<ColumnSlug, CoreColumn>\n\ntype EntityFilter = RegionGroupKey | \"all\"\n\ntype ValueBySlugAndTimeAndEntityName<T> = Map<\n    ColumnSlug,\n    Map<Time, Map<EntityName, T>>\n>\n\nexport interface EntitySelectorState {\n    searchInput: string\n    sortConfig: SortConfig\n    entityFilter: EntityFilter\n    localEntityNames?: string[]\n    interpolatedSortColumnsBySlug?: CoreColumnBySlug\n    isProjectionBySlugAndTimeAndEntityName?: ValueBySlugAndTimeAndEntityName<boolean>\n    isLoadingExternalSortColumn?: boolean\n}\n\nexport interface EntitySelectorManager {\n    entitySelectorState: Partial<EntitySelectorState>\n    table: OwidTable\n    tableForSelection: OwidTable\n    selection: SelectionArray\n    entityType?: string\n    entityTypePlural?: string\n    // TODO: Use the column slugs currently in use, if possible\n    inputColumnSlugs?: ColumnSlug[]\n    isEntitySelectorModalOrDrawerOpen?: boolean\n    canChangeEntity?: boolean\n    canHighlightEntities?: boolean\n    endTime?: Time\n    isOnMapTab?: boolean\n    isOnScatterTab?: boolean\n    xColumnSlug?: ColumnSlug\n    mapConfig?: MapConfig\n    mapColumnSlug?: ColumnSlug\n    isEntityMutedInSelector?: (entityName: EntityName) => boolean\n    onSelectEntity?: (entityName: EntityName) => void\n    onDeselectEntity?: (entityName: EntityName) => void\n    onClearEntities?: () => void\n    regionGroups?: RegionGroup[]\n    entitiesByRegionGroup?: EntitiesByRegionGroup\n    isReady?: boolean\n    logEntitySelectorEvent: (\n        action: EntitySelectorEvent,\n        target?: string\n    ) => void\n    additionalDataLoaderFn?: AdditionalGrapherDataFetchFn\n    projectionColumnInfoBySlug?: Map<ColumnSlug, ProjectionColumnInfo>\n}\n\ninterface SortConfig {\n    slug: ColumnSlug\n    order: SortOrder\n}\n\ntype SearchableEntity = {\n    name: string\n    sortColumnValues: Record<ColumnSlug, CoreValueType | undefined>\n    isLocal?: boolean\n    alternativeNames?: string[]\n    regionInfo?: Region\n}\n\ninterface SortDropdownOption {\n    type:\n        | \"name\" // sorted by name\n        | \"chart-indicator\" // sorted by chart column\n        | \"external-indicator\" // sorted by an external indicator\n    value: string // slug\n    slug: string\n    label: string\n    formattedTime?: string\n    trackNote?: string // unused\n}\n\ninterface FilterDropdownOption {\n    value: EntityFilter\n    label: string\n    count: number\n    trackNote?: string // unused\n}\n\nconst regionNamesSet = new Set(regions.map((region) => region.name))\n\ninterface EntitySelectorProps {\n    manager: EntitySelectorManager\n    selection?: SelectionArray\n    autoFocus?: boolean\n    onDismiss?: () => void\n}\n\n@observer\nexport class EntitySelector extends React.Component<EntitySelectorProps> {\n    scrollableContainer = React.createRef<HTMLDivElement>()\n    searchFieldRef = React.createRef<HTMLInputElement>()\n    contentRef = React.createRef<HTMLDivElement>()\n\n    private readonly sortConfigByName: SortConfig = {\n        slug: this.table.entityNameSlug,\n        order: SortOrder.asc,\n    }\n\n    private readonly disposers: IReactionDisposer[] = []\n\n    constructor(props: EntitySelectorProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    override componentDidMount(): void {\n        void this.populateLocalEntities()\n\n        if (this.props.autoFocus && !isTouchDevice())\n            this.searchFieldRef.current?.focus()\n\n        // scroll to the top when the search input changes\n        this.disposers.push(\n            reaction(\n                () => this.searchInput,\n                () => {\n                    if (this.scrollableContainer.current)\n                        this.scrollableContainer.current.scrollTop = 0\n                }\n            )\n        )\n\n        // the initial sorting strategy depends on data,\n        // which is why we wait for Grapher to be ready\n        this.disposers.push(\n            when(\n                () => !!this.manager.isReady,\n                () => this.initSortConfig()\n            )\n        )\n\n        // Mdims and explorers can change the columns available for sorting, and\n        // we need to change the sort config accordingly\n        this.disposers.push(\n            reaction(\n                () => ({\n                    slugs: this.sortOptions.map((option) => option.slug),\n                    isReady: this.manager.isReady,\n                }),\n                () => this.updateSortConfigIfOptionHasBecomeUnavailable(),\n                { equals: comparer.structural }\n            )\n        )\n    }\n\n    override componentWillUnmount(): void {\n        if (this.timeoutId) clearTimeout(this.timeoutId)\n        this.disposers.forEach((dispose) => dispose())\n    }\n\n    @action.bound private set(newState: Partial<EntitySelectorState>): void {\n        const correctedState = { ...newState }\n\n        if (newState.sortConfig !== undefined) {\n            const correctedSortConfig = { ...newState.sortConfig }\n\n            const shouldBeSortedByName =\n                newState.sortConfig.slug === this.table.entityNameSlug\n\n            // sort names in ascending order by default\n            if (shouldBeSortedByName && !this.isSortedByName) {\n                correctedSortConfig.order = SortOrder.asc\n            }\n\n            // sort values in descending order by default\n            if (!shouldBeSortedByName && this.isSortedByName) {\n                correctedSortConfig.order = SortOrder.desc\n            }\n\n            correctedState.sortConfig = correctedSortConfig\n        }\n\n        this.manager.entitySelectorState = {\n            ...this.manager.entitySelectorState,\n            ...correctedState,\n        }\n    }\n\n    getDefaultSortConfig(): SortConfig {\n        const chartIndicatorSortOptions = this.sortOptions.filter(\n            (option) => option.type === \"chart-indicator\"\n        )\n\n        // default to sorting by the first chart column if there is only one\n        if (chartIndicatorSortOptions.length === 1) {\n            const { slug } = chartIndicatorSortOptions[0]\n            this.setInterpolatedSortColumnBySlug(slug)\n            return { slug, order: SortOrder.desc }\n        }\n\n        return this.sortConfigByName\n    }\n\n    updateSortConfigIfOptionHasBecomeUnavailable() {\n        // We don't want to update the sort config when `sortOptions` are not ready,\n        // because the new chart dimensions are currently loading\n        if (!this.manager.isReady) return\n        if (!this.manager.inputColumnSlugs?.length) return\n\n        // Check whether the current sort option is still available in the newly-updated\n        // sortOptions\n        if (\n            !this.sortOptions.some(\n                (option) => option.slug === this.sortConfig.slug\n            )\n        ) {\n            this.set({ sortConfig: this.getDefaultSortConfig() })\n        }\n    }\n\n    initSortConfig(): void {\n        this.set({ sortConfig: this.getDefaultSortConfig() })\n    }\n\n    resetInterpolatedMapColumn(): void {\n        const { mapColumnSlug } = this.manager\n        const sortSlug = this.sortConfig.slug\n\n        // no need to reset the map column slug if it doesn't exist or isn't set\n        if (\n            !mapColumnSlug ||\n            !this.interpolatedSortColumnsBySlug[mapColumnSlug]\n        )\n            return\n\n        if (sortSlug === mapColumnSlug) {\n            // if the map column slug is currently selected, re-calculate its\n            // tolerance because the map and chart tab might have different\n            // tolerance settings\n            this.setInterpolatedSortColumn(\n                this.interpolateSortColumn(mapColumnSlug)\n            )\n        } else {\n            // otherwise, delete it and it will be re-calculated when necessary\n            delete this.manager.entitySelectorState\n                .interpolatedSortColumnsBySlug?.[mapColumnSlug]\n        }\n    }\n\n    @action.bound async populateLocalEntities(): Promise<void> {\n        try {\n            const localCountryInfo = await getUserCountryInformation()\n            if (!localCountryInfo) return\n\n            const countryRegionsWithoutIncomeGroups = localCountryInfo.regions\n                ? localCountryInfo.regions.filter(\n                      (region) => !checkIsOwidIncomeGroupCode(region)\n                  )\n                : []\n\n            const userEntityCodes = [\n                localCountryInfo.code,\n                ...countryRegionsWithoutIncomeGroups,\n            ]\n\n            const userRegions = regions.filter((region) =>\n                userEntityCodes.includes(region.code)\n            )\n\n            const sortedUserRegions = _.sortBy(userRegions, (region) =>\n                userEntityCodes.indexOf(region.code)\n            )\n\n            const localEntityNames = sortedUserRegions.map(\n                (region) => region.name\n            )\n\n            if (localEntityNames) this.set({ localEntityNames })\n        } catch {\n            // ignore\n        }\n    }\n\n    private setInterpolatedSortColumn(column: CoreColumn): void {\n        this.set({\n            interpolatedSortColumnsBySlug: {\n                ...this.interpolatedSortColumnsBySlug,\n                [column.slug]: column,\n            },\n        })\n    }\n\n    private setIsProjectionForSlug(\n        slug: ColumnSlug,\n        valuesByTimeAndEntityName: Map<Time, Map<EntityName, boolean>>\n    ): void {\n        const { isProjectionBySlugAndTimeAndEntityName } = this\n        isProjectionBySlugAndTimeAndEntityName.set(\n            slug,\n            valuesByTimeAndEntityName\n        )\n        this.set({ isProjectionBySlugAndTimeAndEntityName })\n    }\n\n    /** Time scatters plot time on the x-axis */\n    @computed private get isTimeScatter(): boolean {\n        return (\n            !!this.manager.isOnScatterTab &&\n            this.manager.xColumnSlug === undefined\n        )\n    }\n\n    @computed private get toleranceOverride(): {\n        value?: number\n        strategy?: ToleranceStrategy\n    } {\n        // For time scatters, use infinite tolerance so entities show data\n        // from any available time point instead of \"No data\"\n        if (this.isTimeScatter) return { value: Infinity }\n\n        // Use the given map tolerance if on the map tab\n        const tolerance = this.manager.isOnMapTab\n            ? this.mapConfig.timeTolerance\n            : undefined\n        const toleranceStrategy = this.manager.isOnMapTab\n            ? this.mapConfig.toleranceStrategy\n            : undefined\n\n        return { value: tolerance, strategy: toleranceStrategy }\n    }\n\n    private interpolateSortColumn(slug: ColumnSlug): CoreColumn {\n        return this.inputTable\n            .interpolateColumnWithTolerance(slug, {\n                toleranceOverride: this.toleranceOverride.value,\n                toleranceStrategyOverride: this.toleranceOverride.strategy,\n            })\n            .get(slug)\n    }\n\n    private interpolateAndCombineSortColumns(\n        info: ProjectionColumnInfo\n    ): OwidTable {\n        const { projectedSlug, historicalSlug } = info\n\n        // Interpolate the historical and projected columns separately\n        const table = this.table\n            .interpolateColumnWithTolerance(historicalSlug, {\n                toleranceOverride: this.toleranceOverride.value,\n                toleranceStrategyOverride: this.toleranceOverride.strategy,\n            })\n            .interpolateColumnWithTolerance(projectedSlug, {\n                toleranceOverride: this.toleranceOverride.value,\n                toleranceStrategyOverride: this.toleranceOverride.strategy,\n            })\n\n        // Combine the interpolated columns\n        return combineHistoricalAndProjectionColumns(table, info, {\n            shouldAddIsProjectionColumn: true,\n        })\n    }\n\n    private setInterpolatedSortColumnBySlug(slug: ColumnSlug): void {\n        if (this.interpolatedSortColumnsBySlug[slug]) return\n\n        // If the column is a projection and has an historical counterpart,\n        // then combine the projected and historical data into a single column\n        const projectionInfo = this.projectionColumnInfoByCombinedSlug.get(slug)\n        if (projectionInfo) {\n            const table = this.interpolateAndCombineSortColumns(projectionInfo)\n\n            const combinedColumn = table.get(projectionInfo.combinedSlug)\n            const isProjectionValues = table.get(\n                projectionInfo.slugForIsProjectionColumn\n            ).valueByTimeAndEntityName\n\n            this.setInterpolatedSortColumn(combinedColumn)\n            this.setIsProjectionForSlug(\n                projectionInfo.combinedSlug,\n                isProjectionValues\n            )\n\n            return\n        }\n\n        const column = this.interpolateSortColumn(slug)\n        this.setInterpolatedSortColumn(column)\n    }\n\n    private clearSearchInput(): void {\n        this.set({ searchInput: \"\" })\n    }\n\n    private resetEntityFilter(): void {\n        this.set({ entityFilter: undefined })\n    }\n\n    private updateSortSlug(newSlug: ColumnSlug) {\n        this.set({\n            sortConfig: {\n                slug: newSlug,\n                order: this.sortConfig.order,\n            },\n        })\n    }\n\n    private toggleSortOrder() {\n        const newOrder =\n            this.sortConfig.order === SortOrder.asc\n                ? SortOrder.desc\n                : SortOrder.asc\n        this.set({\n            sortConfig: {\n                slug: this.sortConfig.slug,\n                order: newOrder,\n            },\n        })\n    }\n\n    @computed private get chartHasSubYearlyData(): boolean {\n        return this.numericalChartColumns.some((column) =>\n            isSubYearly(column.timeInterval)\n        )\n    }\n\n    private isExternalIndicator(slug: ColumnSlug): boolean {\n        return this.externalSortIndicatorDefinitions.some(\n            (external) => slug === external.slug\n        )\n    }\n\n    /**\n     * Returns the time at which to look up sort values in the given column.\n     * For external catalog indicators, this is the column's max year, since\n     * those columns are collapsed to a single year on load.\n     */\n    private resolveLookupTimeForColumn(time: Time, column: CoreColumn): Time {\n        // External catalog columns are collapsed to a single year (the\n        // catalog's max year) by loadAndSetExternalSortColumn, so the lookup\n        // time is fixed regardless of the chart's endTime\n        const isExternal = this.isExternalIndicator(column.slug)\n        if (isExternal) return column.maxTime ?? time\n\n        return time\n    }\n\n    private getSortColumnLabelTime(time: Time, column: CoreColumn): Time {\n        const lookupTime = this.resolveLookupTimeForColumn(time, column)\n\n        // External catalog columns use their own max year as the lookup time\n        const isExternal = this.isExternalIndicator(column.slug)\n        if (isExternal) return lookupTime\n\n        // When the chart uses day-encoded times but this column is yearly,\n        // convert the lookup time back to a year before formatting the label\n        if (this.chartHasSubYearlyData && !isSubYearly(column.timeInterval)) {\n            return convertDaysSinceEpochToDate(lookupTime).year()\n        }\n\n        return lookupTime\n    }\n\n    private formatTimeForSortColumnLabel(\n        time: Time,\n        column: CoreColumn\n    ): string {\n        const labelTime = this.getSortColumnLabelTime(time, column)\n        return column.formatTime(labelTime)\n    }\n\n    @computed private get manager(): EntitySelectorManager {\n        return this.props.manager\n    }\n\n    @computed private get endTime(): Time {\n        return this.manager.endTime ?? this.table.maxTime!\n    }\n\n    @computed private get mapConfig(): MapConfig {\n        return this.manager.mapConfig ?? new MapConfig()\n    }\n\n    private isEntityMuted(entityName: EntityName): boolean {\n        return this.manager.isEntityMutedInSelector?.(entityName) ?? false\n    }\n\n    @computed private get title(): string {\n        return this.manager.isOnMapTab\n            ? `Select ${this.entityType.plural}`\n            : this.manager.canHighlightEntities\n              ? `Select ${this.entityType.plural}`\n              : this.manager.canChangeEntity\n                ? `Choose ${a(this.entityType.singular)}`\n                : `Add/remove ${this.entityType.plural}`\n    }\n\n    @computed private get searchPlaceholderEntityType(): string {\n        if (isAnyRegionPublisher(this.entityFilter)) return \"region\"\n\n        return match(this.entityFilter)\n            .with(\"all\", () => this.entityType.singular)\n            .with(\"countries\", () => \"country\")\n            .with(\"continents\", () => \"continent\")\n            .with(\"incomeGroups\", () => \"income group\")\n            .with(\"historicalCountries\", () => \"country or region\")\n            .exhaustive()\n    }\n\n    @computed private get searchInput(): string {\n        return this.manager.entitySelectorState.searchInput ?? \"\"\n    }\n\n    @computed get sortConfig(): SortConfig {\n        return (\n            this.manager.entitySelectorState.sortConfig ?? this.sortConfigByName\n        )\n    }\n\n    isSortSlugValid(slug: ColumnSlug): boolean {\n        return this.sortOptions.some((option) => option.value === slug)\n    }\n\n    isEntityFilterValid(entityFilter: EntityFilter): boolean {\n        return this.filterOptions.some(\n            (option) => option.value === entityFilter\n        )\n    }\n\n    @computed private get entityFilter(): EntityFilter {\n        return (\n            this.manager.entitySelectorState.entityFilter ??\n            this.filterOptions[0]?.value ??\n            \"all\"\n        )\n    }\n\n    @computed private get localEntityNames(): string[] | undefined {\n        return this.manager.entitySelectorState.localEntityNames\n    }\n\n    @computed private get interpolatedSortColumnsBySlug(): CoreColumnBySlug {\n        return (\n            this.manager.entitySelectorState.interpolatedSortColumnsBySlug ?? {}\n        )\n    }\n\n    @computed\n    private get isProjectionBySlugAndTimeAndEntityName(): ValueBySlugAndTimeAndEntityName<boolean> {\n        return (\n            this.manager.entitySelectorState\n                .isProjectionBySlugAndTimeAndEntityName ?? new Map()\n        )\n    }\n\n    @computed private get interpolatedSortColumns(): CoreColumn[] {\n        return Object.values(this.interpolatedSortColumnsBySlug)\n    }\n\n    @computed private get isLoadingExternalSortColumn(): boolean {\n        return (\n            this.manager.entitySelectorState.isLoadingExternalSortColumn ??\n            false\n        )\n    }\n\n    @computed private get inputTable(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed private get table(): OwidTable {\n        return this.manager.tableForSelection\n    }\n\n    @computed private get someEntitiesAreRegions(): boolean {\n        if (!this.entitiesAreCountriesOrRegions) return false\n        return this.availableEntities.some((entity) =>\n            checkHasMembers(entity.regionInfo)\n        )\n    }\n\n    @computed private get entitiesAreCountriesOrRegions(): boolean {\n        // Ignore the World entity since we have charts that only have the\n        // World entity but no other countries or regions (e.g. 'World',\n        // 'Northern Hemisphere' and 'Southern hemisphere')\n        return this.availableEntityNames.some(\n            (entityName) =>\n                regionNamesSet.has(entityName) && !isWorldEntityName(entityName)\n        )\n    }\n\n    @computed private get supportsSortingByExternalIndicators(): boolean {\n        // If we can't dynamically load variables, don't ever the option to sort\n        // by external indicators\n        if (!this.manager.additionalDataLoaderFn) return false\n\n        // Adding external indicators like population and gdp per capita\n        // only makes sense for charts with countries or regions\n        return this.entitiesAreCountriesOrRegions\n    }\n\n    @computed private get numericalChartColumns(): CoreColumn[] {\n        const {\n            inputColumnSlugs = [],\n            mapColumnSlug,\n            isOnMapTab,\n        } = this.manager\n\n        const activeSlugs = isOnMapTab ? [mapColumnSlug] : inputColumnSlugs\n\n        return activeSlugs\n            .map((slug) => this.table.get(slug))\n            .filter((column) => column.hasNumberFormatting)\n    }\n\n    /**\n     * Map of chart columns that match external sort indicators.\n     * For example, if the chart has a column with population data,\n     * it will be used instead of the \"Population\" external indicator.\n     */\n    @computed\n    private get externalSortColumnsByCatalogKey(): Partial<\n        Record<NumericCatalogKey, CoreColumn>\n    > {\n        const matchingColumns: Partial<Record<NumericCatalogKey, CoreColumn>> =\n            {}\n        for (const external of EXTERNAL_SORT_INDICATOR_DEFINITIONS) {\n            const matchingColumn = this.numericalChartColumns.find((column) =>\n                isExternalSortIndicatorMatch(external.catalogKey, column)\n            )\n            if (matchingColumn)\n                matchingColumns[external.catalogKey] = matchingColumn\n        }\n        return matchingColumns\n    }\n\n    @computed\n    private get externalSortIndicatorDefinitions(): ExternalSortIndicatorDefinition[] {\n        if (!this.supportsSortingByExternalIndicators) return []\n\n        // If the chart has a column that matches an external sort indicator,\n        // prefer the chart column over the external indicator\n        const matchingKeys = Object.keys(this.externalSortColumnsByCatalogKey)\n        return EXTERNAL_SORT_INDICATOR_DEFINITIONS.filter(\n            (external) => !matchingKeys.includes(external.catalogKey)\n        )\n    }\n\n    @computed private get projectionColumnInfoByCombinedSlug(): Map<\n        ColumnSlug,\n        ProjectionColumnInfo\n    > {\n        if (!this.manager.projectionColumnInfoBySlug) return new Map()\n\n        const projectionColumnInfoByCombinedSlug: Map<\n            ColumnSlug,\n            ProjectionColumnInfo\n        > = new Map()\n\n        for (const info of this.manager.projectionColumnInfoBySlug.values()) {\n            projectionColumnInfoByCombinedSlug.set(info.combinedSlug, info)\n        }\n\n        return projectionColumnInfoByCombinedSlug\n    }\n\n    private combinedColumnHasHistoricalDataForTime(\n        slug: ColumnSlug,\n        time: Time\n    ): boolean | null {\n        const isProjectionByTimeAndEntityName =\n            this.isProjectionBySlugAndTimeAndEntityName.get(slug)\n\n        // We don't have data and thus can't make a decision\n        if (!isProjectionByTimeAndEntityName) return null\n\n        const values = isProjectionByTimeAndEntityName.get(time)?.values() ?? []\n        return values.some((isProjection) => !isProjection)\n    }\n\n    private makeSortColumnLabelForCombinedColumn(\n        info: ProjectionColumnInfo,\n        time: Time\n    ): string {\n        const { table, isProjectionBySlugAndTimeAndEntityName } = this\n\n        const projectedLabel = getTitleForSortColumnLabel(\n            table.get(info.projectedSlug)\n        )\n        const historicalLabel = getTitleForSortColumnLabel(\n            table.get(info.historicalSlug)\n        )\n\n        const hasHistoricalDataForTime =\n            this.combinedColumnHasHistoricalDataForTime(info.combinedSlug, time)\n\n        // If the data for this column hasn't been computed yet, we can't\n        // determine if it has historical data, and thus which label to show.\n        // As a workaround, we check if any other (arbitrary) combined column\n        // has historical data for this time point, based on the assumption that\n        // projection columns typically share the same cut-off time.\n        if (hasHistoricalDataForTime === null) {\n            const arbitrarySlug = isProjectionBySlugAndTimeAndEntityName\n                .keys()\n                .next().value\n\n            if (arbitrarySlug) {\n                const hasHistoricalValues =\n                    this.combinedColumnHasHistoricalDataForTime(\n                        arbitrarySlug,\n                        time\n                    )\n                return hasHistoricalValues ? historicalLabel : projectedLabel\n            }\n\n            return projectedLabel\n        }\n\n        // If there is any historical value for the given time,\n        // we choose to show the label of the historical column\n        return hasHistoricalDataForTime ? historicalLabel : projectedLabel\n    }\n\n    @computed get sortOptions(): SortDropdownOption[] {\n        let options: SortDropdownOption[] = []\n\n        // the first dropdown option is always the entity name\n        options.push({\n            type: \"name\",\n            value: this.table.entityNameSlug,\n            slug: this.table.entityNameSlug,\n            label: \"Name\",\n        })\n\n        // add external indicators as sort options if applicable\n        if (this.supportsSortingByExternalIndicators) {\n            EXTERNAL_SORT_INDICATOR_DEFINITIONS.forEach((external) => {\n                // If the chart has a column that matches the external\n                // indicator, prefer it over the external indicator\n                const chartColumn =\n                    this.externalSortColumnsByCatalogKey[external.catalogKey]\n\n                if (chartColumn) {\n                    options.push({\n                        type: \"chart-indicator\",\n                        value: chartColumn.slug,\n                        slug: chartColumn.slug,\n                        label: getTitleForSortColumnLabel(chartColumn),\n                        formattedTime: this.formatTimeForSortColumnLabel(\n                            this.endTime,\n                            chartColumn\n                        ),\n                    })\n                } else {\n                    const column =\n                        this.interpolatedSortColumnsBySlug[external.slug]\n                    options.push({\n                        type: \"external-indicator\",\n                        value: external.slug,\n                        slug: external.slug,\n                        label: external.label,\n                        formattedTime: column\n                            ? this.formatTimeForSortColumnLabel(\n                                  this.endTime,\n                                  column\n                              )\n                            : undefined,\n                    })\n                }\n            })\n        }\n\n        // Add the remaining numerical chart columns as sort options,\n        // excluding columns that match external indicators (since those\n        // have already been added)\n        const matchingSlugs = Object.values(\n            this.externalSortColumnsByCatalogKey\n        ).map((column) => column.slug)\n        const columns = this.numericalChartColumns.filter(\n            (column) => !matchingSlugs.includes(column.slug)\n        )\n\n        // If we add data columns that combine historical and projected data,\n        // then we want to exclude the individual columns from the sort options\n        const slugsToExclude: Set<ColumnSlug> = new Set()\n\n        for (const column of columns) {\n            // Time scatters use values from any available time point,\n            // so we don't show a time label for them\n            const formattedTime = this.isTimeScatter\n                ? undefined\n                : this.formatTimeForSortColumnLabel(this.endTime, column)\n\n            const projectionInfo = this.manager.projectionColumnInfoBySlug?.get(\n                column.slug\n            )\n\n            // Combine projected and historical data\n            if (projectionInfo) {\n                const time = this.resolveLookupTimeForColumn(\n                    this.endTime,\n                    column\n                )\n                const label = this.makeSortColumnLabelForCombinedColumn(\n                    projectionInfo,\n                    time\n                )\n\n                options.push({\n                    type: \"chart-indicator\",\n                    value: projectionInfo.combinedSlug,\n                    slug: projectionInfo.combinedSlug,\n                    label,\n                    formattedTime,\n                })\n\n                // We don't need a separate option for the historical data\n                // if it's part of the projection series\n                slugsToExclude.add(projectionInfo.historicalSlug)\n            } else {\n                options.push({\n                    type: \"chart-indicator\",\n                    value: column.slug,\n                    slug: column.slug,\n                    label: getTitleForSortColumnLabel(column),\n                    formattedTime,\n                })\n            }\n        }\n\n        options = options.filter((option) => !slugsToExclude.has(option.value))\n\n        return options\n    }\n\n    @computed get sortValue(): SortDropdownOption | null {\n        return (\n            this.sortOptions.find(\n                (option) => option.slug === this.sortConfig.slug\n            ) ?? null\n        )\n    }\n\n    private isEntityNameSlug(slug: ColumnSlug): boolean {\n        return slug === this.table.entityNameSlug\n    }\n\n    @computed private get isSortedByName(): boolean {\n        return this.isEntityNameSlug(this.sortConfig.slug)\n    }\n\n    @computed private get entityType(): { singular: string; plural: string } {\n        const entitiesAreCountriesOrRegions =\n            this.manager.isOnMapTab ||\n            (!this.manager.entityType && this.entitiesAreCountriesOrRegions)\n\n        if (entitiesAreCountriesOrRegions)\n            return this.someEntitiesAreRegions\n                ? {\n                      singular: \"country or region\",\n                      plural: \"countries and regions\",\n                  }\n                : { singular: \"country\", plural: \"countries\" }\n\n        return {\n            singular: this.manager.entityType ?? DEFAULT_GRAPHER_ENTITY_TYPE,\n            plural:\n                this.manager.entityTypePlural ??\n                DEFAULT_GRAPHER_ENTITY_TYPE_PLURAL,\n        }\n    }\n\n    @computed private get selectionArray(): SelectionArray {\n        return makeSelectionArray(\n            this.props.selection ?? this.manager.selection\n        )\n    }\n\n    @computed private get allEntitiesSelected(): boolean {\n        return (\n            this.selectionArray.numSelectedEntities ===\n            this.availableEntityNames.length\n        )\n    }\n\n    @computed private get availableEntityNames(): string[] {\n        return this.table.availableEntityNames\n    }\n\n    @computed private get availableEntityNameSet(): Set<string> {\n        return this.table.availableEntityNameSet\n    }\n\n    @computed private get availableEntities(): SearchableEntity[] {\n        const langs = getUserNavigatorLanguagesNonEnglish()\n\n        return this.availableEntityNames.map((entityName) => {\n            const searchableEntity: SearchableEntity = {\n                name: entityName,\n                sortColumnValues: {},\n                alternativeNames: getRegionAlternativeNames(entityName, langs),\n                regionInfo: getRegionByName(entityName),\n            }\n\n            if (this.localEntityNames) {\n                searchableEntity.isLocal =\n                    this.localEntityNames.includes(entityName)\n            }\n\n            for (const column of this.interpolatedSortColumns) {\n                const time = this.resolveLookupTimeForColumn(\n                    this.endTime,\n                    column\n                )\n\n                // If we're dealing with a mixed column that has historical and\n                // projected data for the given time, then we choose not to\n                // show projected data since the dropdown is labelled with the\n                // display name of the historical column.\n                const projectionInfo =\n                    this.projectionColumnInfoByCombinedSlug.get(column.slug)\n                if (projectionInfo) {\n                    const isProjectedValue =\n                        this.isProjectionBySlugAndTimeAndEntityName\n                            ?.get(projectionInfo.combinedSlug)\n                            ?.get(time)\n                            ?.get(entityName)\n\n                    if (isProjectedValue) {\n                        const hasHistoricalValues =\n                            this.combinedColumnHasHistoricalDataForTime(\n                                projectionInfo.combinedSlug,\n                                time\n                            )\n                        if (hasHistoricalValues) continue\n                    }\n                }\n\n                const row = column.owidRowByEntityNameAndTime\n                    .get(entityName)\n                    ?.get(time)\n\n                searchableEntity.sortColumnValues[column.slug] = row?.value\n            }\n\n            return searchableEntity\n        })\n    }\n\n    @computed private get filteredAvailableEntities(): SearchableEntity[] {\n        const { availableEntities, entityFilter } = this\n\n        // Sort locals and maybe World to the top if we are looking at all entites\n        if (entityFilter === \"all\")\n            return this.sortEntities(availableEntities, {\n                sortLocalsToTop: true,\n            })\n\n        const entityNameSet = new Set(\n            this.manager.entitiesByRegionGroup?.get(entityFilter) ?? []\n        )\n        const filteredAvailableEntities = availableEntities.filter((entity) =>\n            entityNameSet.has(entity.name)\n        )\n\n        return this.sortEntities(filteredAvailableEntities, {\n            // Sort locals and maybe World to the top if looking at the long countries list, not for others\n            sortLocalsToTop: entityFilter === \"countries\",\n        })\n    }\n\n    private sortEntities(\n        entities: SearchableEntity[],\n        options: { sortLocalsToTop: boolean } = {\n            sortLocalsToTop: true,\n        }\n    ): SearchableEntity[] {\n        const { sortConfig } = this\n        const byName = (e: SearchableEntity) => e.name\n        const byValue = (e: SearchableEntity) =>\n            e.sortColumnValues[sortConfig.slug]\n\n        // Name sorting\n        if (this.isSortedByName) {\n            // Simple name sort without local/world prioritization\n            if (!options.sortLocalsToTop) {\n                return _.orderBy(entities, byName, sortConfig.order)\n            }\n\n            // Name sort with locals on top and World between locals and others\n            // We include \"World\" here (unlike when sorting by values, see notes below) because\n            // here it is useful.\n            const [[worldEntity], rest] = _.partition(entities, (e) =>\n                isWorldEntityName(e.name)\n            )\n            const [locals, others] = _.partition(rest, (e) => e.isLocal)\n\n            const sortedLocals = _.sortBy(locals, (e) =>\n                this.localEntityNames?.indexOf(e.name)\n            )\n            const sortedOthers = _.orderBy(others, byName, sortConfig.order)\n\n            return excludeUndefined([\n                ...sortedLocals,\n                worldEntity,\n                ...sortedOthers,\n            ])\n        }\n\n        // Value sorting: missing values go last\n        const [withValues, withoutValues] = _.partition(entities, (e) =>\n            isFiniteWithGuard(byValue(e))\n        )\n\n        let sortedWithValues: SearchableEntity[]\n        if (options.sortLocalsToTop) {\n            // We're not specially handling \"World\" here because we want to see the sorted\n            // items and the user should understand that these are sorted. we already pull\n            // up to three items (Germany, EU 27, Europe) up to the top and don't want to add\n            // a fourth item in such cases that is obviously not sorted and that doesn't have\n            // a \"local\" icon indicator\n            const [localWith, otherWith] = _.partition(\n                withValues,\n                (e) => e.isLocal\n            )\n\n            // Locals: keep user-preferred order (by localEntityNames index)\n            const sortedLocalWith = _.sortBy(localWith, (e) =>\n                this.localEntityNames?.indexOf(e.name)\n            )\n\n            // Others: sort by value according to selected order\n            const sortedOtherWith = _.orderBy(\n                otherWith,\n                byValue,\n                sortConfig.order\n            )\n\n            sortedWithValues = excludeUndefined([\n                ...sortedLocalWith,\n                ...sortedOtherWith,\n            ])\n        } else {\n            sortedWithValues = _.orderBy(withValues, byValue, sortConfig.order)\n        }\n\n        const sortedWithoutValues = _.orderBy(\n            withoutValues,\n            byName,\n            SortOrder.asc\n        )\n\n        return [...sortedWithValues, ...sortedWithoutValues]\n    }\n\n    @computed get isMultiMode(): boolean {\n        return !this.manager.canChangeEntity\n    }\n\n    @computed get fuzzy(): FuzzySearch<SearchableEntity> {\n        return FuzzySearch.withKeyArray(\n            this.filteredAvailableEntities,\n            (entity) => [entity.name, ...(entity.alternativeNames ?? [])],\n            (entity) => entity.name\n        )\n    }\n\n    @computed get searchResults(): SearchableEntity[] | undefined {\n        if (!this.searchInput) return undefined\n        return this.fuzzy.search(this.searchInput)\n    }\n\n    @computed get selectedEntities(): SearchableEntity[] {\n        const selected = this.availableEntities.filter((entity) =>\n            this.isEntitySelected(entity)\n        )\n        return this.sortEntities(selected, { sortLocalsToTop: false })\n    }\n\n    @action.bound onTitleClick(): void {\n        if (this.scrollableContainer.current)\n            this.scrollableContainer.current.scrollTop = 0\n    }\n\n    @action.bound onSearchKeyDown(e: KeyboardEvent): void {\n        const { searchResults } = this\n        if (e.key === \"Enter\" && searchResults && searchResults.length > 0) {\n            this.onChange(searchResults[0].name)\n            this.clearSearchInput()\n        }\n    }\n\n    @action.bound onDeselectEntities(entityNames: EntityName[]): void {\n        for (const entityName of entityNames) {\n            this.manager.onDeselectEntity?.(entityName)\n        }\n    }\n\n    private timeoutId?: number\n    @action.bound onChange(entityName: EntityName): void {\n        if (this.isMultiMode) {\n            this.selectionArray.toggleSelection(entityName)\n\n            if (this.selectionArray.selectedSet.has(entityName)) {\n                this.manager.onSelectEntity?.(entityName)\n                this.manager.logEntitySelectorEvent?.(\"select\", entityName)\n            } else {\n                this.manager.onDeselectEntity?.(entityName)\n                this.manager.logEntitySelectorEvent?.(\"deselect\", entityName)\n            }\n\n            if (this.selectionArray.numSelectedEntities === 0) {\n                this.manager.onClearEntities?.()\n            }\n        } else {\n            const dropEntityNames = this.selectionArray.selectedEntityNames\n            this.selectionArray.setSelectedEntities([entityName])\n            this.manager.onSelectEntity?.(entityName)\n            this.manager.logEntitySelectorEvent?.(\"select\", entityName)\n            this.onDeselectEntities(dropEntityNames)\n\n            // close the modal or drawer automatically after selection\n            if (this.manager.isEntitySelectorModalOrDrawerOpen) {\n                this.timeoutId = window.setTimeout(() => this.close(), 200)\n            }\n        }\n\n        this.clearSearchInput()\n    }\n\n    @action.bound onClear(): void {\n        const dropEntityNames = this.selectionArray.selectedEntityNames\n        this.selectionArray.clearSelection()\n        this.onDeselectEntities(dropEntityNames)\n        this.manager.onClearEntities?.()\n\n        this.resetEntityFilter()\n\n        this.manager.logEntitySelectorEvent?.(\"clear\")\n    }\n\n    @action.bound async loadAndSetExternalSortColumn(\n        external: ExternalSortIndicatorDefinition\n    ): Promise<void> {\n        const { catalogKey, slug } = external\n        const { additionalDataLoaderFn } = this.manager\n\n        // the indicator has already been loaded\n        if (this.interpolatedSortColumnsBySlug[slug]) return\n\n        // load the external indicator from the catalog\n        try {\n            this.set({ isLoadingExternalSortColumn: true })\n            if (additionalDataLoaderFn === undefined)\n                throw new Error(\n                    \"additionalDataLoaderFn is not set, can't load sort variables on demand\"\n                )\n            const data = await additionalDataLoaderFn(catalogKey)\n            const filteredData = data.filter((row) =>\n                this.inputTable.availableEntityNameSet.has(row.entity)\n            )\n            const table = buildOwidTableForCatalogData(filteredData, catalogKey)\n            const column = table?.get(slug)\n            if (column) this.setInterpolatedSortColumn(column)\n        } catch {\n            console.error(`Failed to load data from catalog: ${catalogKey}`)\n        } finally {\n            this.set({ isLoadingExternalSortColumn: false })\n        }\n    }\n\n    @action.bound async onChangeSortSlug(\n        selected: SortDropdownOption | null\n    ): Promise<void> {\n        if (selected) {\n            const { slug } = selected\n\n            // if an external indicator has been selected, load it\n            const external = this.externalSortIndicatorDefinitions.find(\n                (external) => external.slug === slug\n            )\n            if (external) await this.loadAndSetExternalSortColumn(external)\n\n            // apply tolerance if an indicator is selected for the first time\n            if (!external && !this.isEntityNameSlug(slug)) {\n                this.setInterpolatedSortColumnBySlug(slug)\n            }\n\n            this.updateSortSlug(slug)\n\n            const sortByTarget = this.isEntityNameSlug(slug)\n                ? \"name\"\n                : external\n                  ? external.catalogKey\n                  : \"value\"\n            this.manager.logEntitySelectorEvent(\"sortBy\", sortByTarget)\n        }\n    }\n\n    @action.bound onChangeSortOrder(): void {\n        this.toggleSortOrder()\n        this.manager.logEntitySelectorEvent(\"sortOrder\")\n    }\n\n    @action.bound private close(): void {\n        if (this.props.onDismiss) this.props.onDismiss()\n        else this.manager.isEntitySelectorModalOrDrawerOpen = false\n    }\n\n    @computed get filterOptions(): FilterDropdownOption[] {\n        const { regionGroups = [] } = this.manager\n\n        const options: FilterDropdownOption[] = regionGroups\n            .map(({ regionGroupKey, entityNames }) => ({\n                value: regionGroupKey,\n                label: regionGroupLabels[regionGroupKey],\n                count: entityNames.filter((entityName) =>\n                    this.availableEntityNameSet.has(entityName)\n                ).length,\n            }))\n            .filter(({ count }) => count > 0)\n\n        return [\n            {\n                value: \"all\",\n                label: \"All\",\n                count: this.availableEntities.length,\n            },\n            ...options,\n        ]\n    }\n\n    @action.bound private onChangeEntityFilter(\n        selected: FilterDropdownOption | null\n    ): void {\n        if (selected) {\n            const option = selected\n            this.set({ entityFilter: option.value })\n\n            this.manager.logEntitySelectorEvent(\"filterBy\", option.value)\n        }\n    }\n\n    @computed private get filterValue(): FilterDropdownOption {\n        return (\n            this.filterOptions.find(\n                (option) => option.value === this.entityFilter\n            ) ?? this.filterOptions[0]\n        )\n    }\n\n    @computed get shouldShowFilterBar(): boolean {\n        return (\n            this.filterOptions.length > 1 &&\n            this.filterOptions[0].count !== this.filterOptions[1].count\n        )\n    }\n\n    private renderFilterBar(): React.ReactElement {\n        return (\n            <div className=\"entity-selector__filter-bar\">\n                <Dropdown<FilterDropdownOption>\n                    options={this.filterOptions}\n                    onChange={this.onChangeEntityFilter}\n                    value={this.filterValue}\n                    renderTriggerValue={renderFilterTriggerValue}\n                    renderMenuOption={renderFilterMenuOption}\n                    aria-label=\"Filter by type\"\n                />\n            </div>\n        )\n    }\n\n    private renderSearchBar(): React.ReactElement {\n        return (\n            <div className=\"entity-selector__search-bar\">\n                <SearchField\n                    ref={this.searchFieldRef}\n                    value={this.searchInput}\n                    onChange={(value) => this.set({ searchInput: value })}\n                    onClear={() => this.clearSearchInput()}\n                    placeholder={`Search for ${a(\n                        this.searchPlaceholderEntityType\n                    )}`}\n                    trackNote=\"entity_selector_search\"\n                    onKeyDown={this.onSearchKeyDown}\n                />\n            </div>\n        )\n    }\n\n    private renderSortBar(): React.ReactElement {\n        return (\n            <div className=\"entity-selector__sort-bar\">\n                <div className=\"entity-selector__sort-dropdown-and-button\">\n                    <Dropdown<SortDropdownOption>\n                        className=\"entity-selector__sort-dropdown\"\n                        menuClassName=\"entity-selector__sort-dropdown-menu\"\n                        options={this.sortOptions}\n                        onChange={this.onChangeSortSlug}\n                        value={this.sortValue}\n                        isLoading={this.isLoadingExternalSortColumn}\n                        renderTriggerValue={renderSortTriggerValue}\n                        renderMenuOption={renderSortMenuOption}\n                        aria-label=\"Sort by\"\n                    />\n                    <button\n                        type=\"button\"\n                        className=\"sort\"\n                        onClick={this.onChangeSortOrder}\n                    >\n                        <SortIcon\n                            type={this.isSortedByName ? \"text\" : \"numeric\"}\n                            order={this.sortConfig.order}\n                        />\n                    </button>\n                </div>\n            </div>\n        )\n    }\n\n    private renderSearchResults(): React.ReactElement {\n        if (!this.searchResults || this.searchResults.length === 0) {\n            return (\n                <div className=\"entity-search-results grapher_body-3-regular grapher_light\">\n                    There is no data for the {this.entityType.singular} you are\n                    looking for. You may want to try using different keywords or\n                    checking for typos.\n                </div>\n            )\n        }\n\n        return (\n            <ul className=\"entity-search-results\">\n                {this.searchResults.map((entity) => (\n                    <li key={entity.name}>\n                        <SelectableEntity\n                            name={entity.name}\n                            type={this.isMultiMode ? \"checkbox\" : \"radio\"}\n                            checked={this.isEntitySelected(entity)}\n                            {...this.getBarPropsForEntity(entity)}\n                            onChange={this.onChange}\n                            isLocal={entity.isLocal}\n                            isMuted={this.isEntityMuted(entity.name)}\n                        />\n                    </li>\n                ))}\n            </ul>\n        )\n    }\n\n    private renderAllEntitiesInSingleMode(): React.ReactElement {\n        const { filteredAvailableEntities, shouldShowFilterBar } = this\n\n        return (\n            <>\n                {shouldShowFilterBar && this.renderFilterBar()}\n                <ul className={cx({ \"hide-top-border\": shouldShowFilterBar })}>\n                    {filteredAvailableEntities.map((entity) => (\n                        <li key={entity.name}>\n                            <SelectableEntity\n                                name={entity.name}\n                                type=\"radio\"\n                                checked={this.isEntitySelected(entity)}\n                                {...this.getBarPropsForEntity(entity)}\n                                onChange={this.onChange}\n                                isLocal={entity.isLocal}\n                                isMuted={this.isEntityMuted(entity.name)}\n                            />\n                        </li>\n                    ))}\n                </ul>\n            </>\n        )\n    }\n\n    @computed private get selectedSortColumn(): CoreColumn | undefined {\n        const { sortConfig } = this\n        if (this.isSortedByName) return undefined\n        return this.interpolatedSortColumnsBySlug[sortConfig.slug]\n    }\n\n    @computed private get selectedSortColumnMaxValue(): number | undefined {\n        const { selectedSortColumn, endTime } = this\n        if (!selectedSortColumn) return undefined\n        const time = this.resolveLookupTimeForColumn(\n            endTime,\n            selectedSortColumn\n        )\n        const values = selectedSortColumn.valuesByTime.get(time)\n        return _.max(values)\n    }\n\n    @computed private get barScale(): ScaleLinear<number, number> {\n        return scaleLinear()\n            .domain([0, this.selectedSortColumnMaxValue ?? 1])\n            .range([0, 1])\n    }\n\n    private getBarPropsForEntity(entity: SearchableEntity): BarProps {\n        const { selectedSortColumn, barScale } = this\n\n        if (!selectedSortColumn) return {}\n\n        const value = entity.sortColumnValues[selectedSortColumn.slug]\n\n        if (!isFiniteWithGuard(value)) return { barFormattedValue: \"No data\" }\n\n        const barFormattedValue =\n            selectedSortColumn.formatValueShortWithAbbreviations(value)\n\n        if (value < 0) return { barFormattedValue, barWidth: 0 }\n\n        return {\n            barFormattedValue,\n            barWidth: R.clamp(barScale(value), { min: 0, max: 1 }),\n        }\n    }\n\n    private isEntitySelected(entity: SearchableEntity): boolean {\n        return this.selectionArray.selectedSet.has(entity.name)\n    }\n\n    private renderAllEntitiesInMultiMode(): React.ReactElement {\n        const {\n            filteredAvailableEntities,\n            selectedEntities,\n            shouldShowFilterBar,\n        } = this\n        const { numSelectedEntities, selectedEntityNames } = this.selectionArray\n\n        // having a \"Selection\" and \"Available entities\" section both looks odd\n        // when all entities are currently selected and there are only a few of them\n        const hasFewEntities = filteredAvailableEntities.length < 10\n        const shouldHideAvailableEntities =\n            !shouldShowFilterBar && hasFewEntities && this.allEntitiesSelected\n\n        const availableEntitiesTitle = this.mapConfig.is2dContinentActive()\n            ? `Countries in ${MAP_REGION_LABELS[this.mapConfig.region]}`\n            : `All ${this.entityType.plural}`\n\n        return (\n            <Flipper\n                spring={{ stiffness: 300, damping: 33 }}\n                flipKey={selectedEntityNames.join(\",\")}\n            >\n                <div className=\"entity-section\">\n                    {selectedEntities.length > 0 && (\n                        <Flipped flipId=\"__selection\" translate opacity>\n                            <div className=\"entity-section__header\">\n                                <div className=\"entity-section__title grapher_body-3-regular-italic grapher_light\">\n                                    Selection{\" \"}\n                                    {numSelectedEntities > 0 &&\n                                        `(${numSelectedEntities})`}\n                                </div>\n                                <button type=\"button\" onClick={this.onClear}>\n                                    Clear\n                                </button>\n                            </div>\n                        </Flipped>\n                    )}\n                    <ul>\n                        {selectedEntities.map((entity) => (\n                            <SelectableEntityListItem\n                                key={entity.name}\n                                flipId={`selected_${makeSafeForCSS(\n                                    entity.name\n                                )}`}\n                                name={entity.name}\n                                type=\"checkbox\"\n                                checked={true}\n                                {...this.getBarPropsForEntity(entity)}\n                                onChange={this.onChange}\n                                isLocal={entity.isLocal}\n                                isMuted={this.isEntityMuted(entity.name)}\n                            />\n                        ))}\n                    </ul>\n                </div>\n\n                {shouldShowFilterBar && (\n                    <Flipped flipId=\"__filter-bar\" translate opacity>\n                        {this.renderFilterBar()}\n                    </Flipped>\n                )}\n\n                {!shouldHideAvailableEntities && (\n                    <div\n                        className={cx(\"entity-section\", {\n                            \"hide-top-border\": shouldShowFilterBar,\n                        })}\n                    >\n                        {!shouldShowFilterBar && (\n                            <Flipped flipId=\"__available\" translate opacity>\n                                <div className=\"entity-section__title grapher_body-3-regular-italic grapher_light\">\n                                    {availableEntitiesTitle}\n                                </div>\n                            </Flipped>\n                        )}\n\n                        <ul>\n                            {filteredAvailableEntities.map((entity) => (\n                                <SelectableEntityListItem\n                                    key={entity.name}\n                                    flipId={`available_${makeSafeForCSS(\n                                        entity.name\n                                    )}`}\n                                    name={entity.name}\n                                    type=\"checkbox\"\n                                    checked={this.isEntitySelected(entity)}\n                                    {...this.getBarPropsForEntity(entity)}\n                                    onChange={this.onChange}\n                                    isLocal={entity.isLocal}\n                                    isMuted={this.isEntityMuted(entity.name)}\n                                />\n                            ))}\n                        </ul>\n                    </div>\n                )}\n            </Flipper>\n        )\n    }\n\n    override render(): React.ReactElement {\n        return (\n            <div className=\"entity-selector\">\n                <OverlayHeader\n                    title={this.title}\n                    onTitleClick={this.onTitleClick}\n                    onDismiss={this.close}\n                />\n\n                {this.renderSearchBar()}\n\n                <div ref={this.scrollableContainer} className=\"scrollable\">\n                    {!this.searchInput &&\n                        this.sortOptions.length > 1 &&\n                        this.renderSortBar()}\n\n                    <div\n                        ref={this.contentRef}\n                        className=\"entity-selector__content\"\n                    >\n                        {this.searchInput\n                            ? this.renderSearchResults()\n                            : this.isMultiMode\n                              ? this.renderAllEntitiesInMultiMode()\n                              : this.renderAllEntitiesInSingleMode()}\n                    </div>\n                </div>\n            </div>\n        )\n    }\n}\n\n// Bar props are flattened into primitives (rather than a `bar` object) so that\n// the default `React.memo` shallow comparison works without a hand-written\n// equality function. A freshly-allocated object would fail reference equality\n// on every render and defeat memoization.\ninterface BarProps {\n    barFormattedValue?: string\n    barWidth?: number\n}\n\ninterface SelectableEntityProps extends BarProps {\n    name: string\n    checked: boolean\n    type: \"checkbox\" | \"radio\"\n    onChange: (entityName: EntityName) => void\n    isLocal?: boolean\n    isMuted?: boolean\n}\n\nfunction LocationIcon() {\n    return (\n        <span className=\"location-icon\">\n            {/* Non-breaking space prevents the icon from wrapping to a new line alone */}\n            {\"\\u00A0\"}\n            <Tippy\n                content=\"Your current location\"\n                theme=\"grapher-explanation--short\"\n                placement=\"top\"\n            >\n                <FontAwesomeIcon icon={faLocationArrow} />\n            </Tippy>\n        </span>\n    )\n}\n\nconst SelectableEntity = React.memo(function SelectableEntity({\n    name,\n    checked,\n    type,\n    barFormattedValue,\n    barWidth,\n    onChange,\n    isLocal,\n    isMuted,\n}: SelectableEntityProps) {\n    const Input = type === \"checkbox\" ? Checkbox : RadioButton\n    const { name: displayName, suffix } = parseLabel(name)\n\n    const label = (\n        <span>\n            {displayName}\n            {suffix && <span className=\"suffix\"> ({suffix})</span>}\n            {isLocal && <LocationIcon />}\n        </span>\n    )\n\n    return (\n        <div\n            className={cx(\"selectable-entity\", {\n                \"selectable-entity--with-bar\": barWidth !== undefined,\n                \"selectable-entity--muted\": isMuted,\n            })}\n        >\n            {barWidth !== undefined && (\n                <div className=\"bar\" style={{ width: `${barWidth * 100}%` }} />\n            )}\n            <Input\n                label={label}\n                checked={checked}\n                onChange={() => onChange(name)}\n            />\n            {barFormattedValue !== undefined && (\n                <span className=\"value grapher_label-1-regular\">\n                    {barFormattedValue}\n                </span>\n            )}\n        </div>\n    )\n})\n\nconst flippedListItemSpring = { stiffness: 300, damping: 33 }\n\ntype SelectableEntityListItemProps = SelectableEntityProps & {\n    flipId: string\n}\n\nconst SelectableEntityListItem = React.memo(function SelectableEntityListItem({\n    flipId,\n    ...selectableEntityProps\n}: SelectableEntityListItemProps) {\n    return (\n        <Flipped\n            flipId={flipId}\n            translate\n            opacity\n            spring={flippedListItemSpring}\n        >\n            <li>\n                <SelectableEntity {...selectableEntityProps} />\n            </li>\n        </Flipped>\n    )\n})\n\nfunction renderSortTriggerValue(\n    option: SortDropdownOption | null\n): React.ReactNode | undefined {\n    if (!option) return undefined\n    return (\n        <>\n            <span className=\"label\">\n                <FontAwesomeIcon icon={faArrowRightArrowLeft} size=\"sm\" />\n                {\"Sort by: \"}\n            </span>\n            {option.label}\n            {option.formattedTime && (\n                <span className=\"detail\">, {option.formattedTime}</span>\n            )}\n        </>\n    )\n}\n\nfunction renderSortMenuOption(option: SortDropdownOption): React.ReactNode {\n    return (\n        <>\n            {option.label}\n            {option.formattedTime && (\n                <span className=\"detail\">, {option.formattedTime}</span>\n            )}\n        </>\n    )\n}\n\nfunction renderFilterTriggerValue(\n    option: FilterDropdownOption | null\n): React.ReactNode | undefined {\n    if (!option) return undefined\n    return (\n        <>\n            <span className=\"label\">\n                <FontAwesomeIcon icon={faFilter} size=\"sm\" />\n                {\"Filter by type: \"}\n            </span>\n            {option.label} <span className=\"detail\">({option.count})</span>\n        </>\n    )\n}\n\nfunction renderFilterMenuOption(option: FilterDropdownOption): React.ReactNode {\n    return (\n        <>\n            {option.label} <span className=\"detail\">({option.count})</span>\n        </>\n    )\n}\n\nfunction getTitleForSortColumnLabel(column: CoreColumn): string {\n    return column.titlePublicOrDisplayName.title\n}\n\n/** Determines if a column matches a specific external sort indicator type */\nfunction isExternalSortIndicatorMatch(\n    key: NumericCatalogKey,\n    column: CoreColumn\n): boolean {\n    // Trivial if the slugs match\n    if (column.def.slug === columnDefsByCatalogKey[key].slug) return true\n\n    return match(key)\n        .with(\"population\", () => {\n            // Check the catalog path for population data\n            return isPopulationVariableETLPath(\n                (column.def as OwidColumnDef)?.catalogPath ?? \"\"\n            )\n        })\n        .with(\"gdp\", () => {\n            // Check the label for GDP per capita data\n            const label = getTitleForSortColumnLabel(column)\n            // Matches \"gdp per capita\" and content within parentheses\n            const potentialMatches =\n                label.match(/\\(.*?\\)|(\\bgdp per capita\\b)/gi) ?? []\n            // Filter for \"gdp per capita\" matches that are not within parentheses\n            const matches = potentialMatches.filter(\n                (match) => !match.includes(\"(\")\n            )\n            return matches.length > 0\n        })\n        .exhaustive()\n}\n\nfunction buildOwidTableForCatalogData(\n    data: CatalogNumericDataPoint[],\n    catalogKey: NumericCatalogKey\n): OwidTable | undefined {\n    if (data.length === 0) return undefined\n\n    const maxYear = _.max(data.map((point) => point.year))\n    if (maxYear === undefined) return undefined\n\n    const columnDef = columnDefsByCatalogKey[catalogKey]\n    const slug = columnDef.slug\n    const originalTimeSlug = makeOriginalTimeSlugFromColumnSlug(slug)\n\n    const rows = data.map((row) => ({\n        [OwidTableSlugs.EntityName]: row.entity,\n        // The catalog data's max year is used as the time for all rows\n        [OwidTableSlugs.Year]: maxYear,\n        [columnDef.slug]: row.value,\n        [originalTimeSlug]: row.year,\n    }))\n\n    // Necessary to ensure correct formatting of the year values\n    const yearColumnDef: OwidColumnDef = {\n        slug: OwidTableSlugs.Year,\n        type: ColumnTypeNames.Year,\n    }\n    const originalTimeColumnDef: OwidColumnDef = {\n        slug: originalTimeSlug,\n        type: ColumnTypeNames.Year,\n    }\n\n    return new OwidTable(rows, [\n        columnDef,\n        yearColumnDef,\n        originalTimeColumnDef,\n    ])\n}\n","import * as React from \"react\"\nimport { observer } from \"mobx-react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { Bounds } from \"@ourworldindata/utils\"\nimport { Modal } from \"./Modal\"\nimport {\n    EntitySelector,\n    EntitySelectorManager,\n} from \"../entitySelector/EntitySelector\"\nimport { DEFAULT_GRAPHER_BOUNDS } from \"../core/GrapherConstants\"\n\nexport interface EntitySelectorModalManager extends EntitySelectorManager {\n    isEntitySelectorModalOrDrawerOpen?: boolean\n    frameBounds?: Bounds\n    base: React.RefObject<HTMLDivElement | null>\n}\n\n@observer\nexport class EntitySelectorModal extends React.Component<{\n    manager: EntitySelectorModalManager\n}> {\n    constructor(props: { manager: EntitySelectorModalManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed private get manager(): EntitySelectorModalManager {\n        return this.props.manager\n    }\n\n    @computed private get frameBounds(): Bounds {\n        return this.manager.frameBounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get modalBounds(): Bounds {\n        const maxWidth = 366\n        const padWidth = Math.max(16, (this.frameBounds.width - maxWidth) / 2)\n        return this.frameBounds.padHeight(16).padWidth(padWidth)\n    }\n\n    @action.bound onDismiss(): void {\n        this.manager.isEntitySelectorModalOrDrawerOpen = false\n    }\n\n    override render(): React.ReactElement {\n        return (\n            <Modal\n                ariaLabel=\"Entity selector\"\n                grapherRef={this.manager.base}\n                onDismiss={this.onDismiss}\n                bounds={this.modalBounds}\n                isHeightFixed={true}\n            >\n                <EntitySelector\n                    manager={this.manager}\n                    onDismiss={this.onDismiss}\n                    autoFocus={true}\n                />\n            </Modal>\n        )\n    }\n}\n","import * as _ from \"lodash-es\"\nimport { match } from \"ts-pattern\"\nimport { OwidTable, CoreColumn } from \"@ourworldindata/core-table\"\nimport { type GrapherQueryParams } from \"@ourworldindata/types\"\n\nexport enum CsvDownloadType {\n    Full = \"full\",\n    CurrentSelection = \"current_selection\",\n}\n\nexport interface DataDownloadContextBase {\n    slug: string\n    searchParams: URLSearchParams\n    externalSearchParams: URLSearchParams\n    baseUrl: string\n}\n\nexport interface DataDownloadContextServerSide extends DataDownloadContextBase {\n    csvDownloadType: CsvDownloadType\n    shortColNames: boolean\n}\n\nexport interface DataDownloadContextClientSide extends DataDownloadContextBase {\n    csvDownloadType: CsvDownloadType\n    shortColNames: boolean\n    fullTable: OwidTable\n    filteredTable: OwidTable\n    inputColumnSlugs: string[] | undefined\n}\n\nexport const createCsvBlobLocally = async (\n    ctx: DataDownloadContextClientSide\n): Promise<Blob> => {\n    const downloadTable =\n        ctx.csvDownloadType === CsvDownloadType.Full\n            ? ctx.fullTable\n            : ctx.filteredTable\n    const csv = downloadTable.toPrettyCsv({\n        useShortNames: ctx.shortColNames,\n    })\n\n    return new Blob([csv], { type: \"text/csv;charset=utf-8\" })\n}\n\nexport const getDownloadSearchParams = (\n    ctx: DataDownloadContextServerSide\n): URLSearchParams => {\n    const searchParams = new URLSearchParams()\n    searchParams.set(\"v\", \"1\")\n    searchParams.set(\n        \"csvType\",\n        match(ctx.csvDownloadType)\n            .with(CsvDownloadType.CurrentSelection, () => \"filtered\")\n            .with(CsvDownloadType.Full, () => \"full\")\n            .exhaustive()\n    )\n    searchParams.set(\"useColumnShortNames\", ctx.shortColNames.toString())\n    const otherParams =\n        ctx.csvDownloadType === CsvDownloadType.CurrentSelection\n            ? ctx.searchParams\n            : ctx.externalSearchParams\n\n    const searchParamsToExclude: string[] = [\n        \"overlay\",\n    ] satisfies (keyof GrapherQueryParams)[]\n\n    for (const [key, value] of otherParams.entries()) {\n        if (searchParamsToExclude.includes(key)) continue\n\n        searchParams.set(key, value)\n    }\n    return searchParams\n}\n\nexport const getDownloadUrl = (\n    extension: \"csv\" | \"metadata.json\" | \"zip\",\n    ctx: DataDownloadContextServerSide\n): string => {\n    const searchParams = getDownloadSearchParams(ctx)\n    const searchStr = searchParams.toString().replaceAll(\"%7E\", \"~\")\n    return `${ctx.baseUrl}.${extension}` + (searchStr ? `?${searchStr}` : \"\")\n}\n\nexport const getDataDownloadFilename = ({\n    slug,\n    extension,\n    csvDownloadType,\n}: {\n    slug: string\n    extension: \"csv\" | \"zip\"\n    csvDownloadType: CsvDownloadType\n}): string => {\n    // Keep client-side CSV fallback filenames as `slug.csv` for compatibility.\n    // Only server-side ZIP downloads for the current selection use `.filtered`.\n    const filteredSuffix =\n        extension === \"zip\" &&\n        csvDownloadType === CsvDownloadType.CurrentSelection\n            ? \".filtered\"\n            : \"\"\n\n    return `${slug}${filteredSuffix}.${extension}`\n}\n\nexport const getNonRedistributableInfo = (\n    table: OwidTable | undefined\n): { cols: CoreColumn[] | undefined; sourceLinks: string[] | undefined } => {\n    if (!table) return { cols: undefined, sourceLinks: undefined }\n\n    const nonRedistributableCols = table.columnsAsArray.filter(\n        (col) => col.def.nonRedistributable\n    )\n\n    if (!nonRedistributableCols.length)\n        return { cols: undefined, sourceLinks: undefined }\n\n    const sourceLinks = nonRedistributableCols\n        .map((col) => {\n            const def = col.def\n            return def.sourceLink ?? def.origins?.[0]?.urlMain\n        })\n        .filter((link): link is string => !!link)\n\n    return { cols: nonRedistributableCols, sourceLinks: _.uniq(sourceLinks) }\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport type { Dispatch, RefObject, SetStateAction } from \"react\"\nimport * as _ from \"lodash-es\"\nimport { OwidColumnDef } from \"@ourworldindata/types\"\nimport { Bounds } from \"@ourworldindata/utils\"\nimport { DEFAULT_GRAPHER_BOUNDS } from \"./core/GrapherConstants.js\"\nimport {\n    CsvDownloadType,\n    getDownloadUrl,\n    type DataDownloadContextBase,\n    type DataDownloadContextServerSide,\n} from \"./download.js\"\nimport { useIsomorphicLayoutEffect } from \"usehooks-ts\"\n\n/**\n * Like useState, but clearing (setting to undefined) is debounced.\n * Setting a value is always immediate and cancels any pending clear.\n */\nexport function useStateWithDebouncedClear<T>(\n    initialValue: T | undefined,\n    clearDelay = 200\n): [value: T | undefined, set: (value: T) => void, clear: () => void] {\n    const [value, setValue] = useState<T | undefined>(initialValue)\n    const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(\n        undefined\n    )\n\n    const set = useCallback(\n        (newValue: T) => {\n            if (timerRef.current) clearTimeout(timerRef.current)\n            setValue(newValue)\n        },\n        [setValue]\n    )\n\n    const clear = useCallback(() => {\n        if (timerRef.current) clearTimeout(timerRef.current)\n        timerRef.current = setTimeout(() => setValue(undefined), clearDelay)\n    }, [setValue, clearDelay])\n\n    return [value, set, clear]\n}\n\nexport function useDataApiDownloadConfig({\n    downloadCtxBase,\n    firstYColDef,\n}: {\n    downloadCtxBase: DataDownloadContextBase\n    firstYColDef?: OwidColumnDef\n}): {\n    csvUrl: string\n    metadataUrl: string\n    onlyVisible: boolean\n    setOnlyVisible: Dispatch<SetStateAction<boolean>>\n    shortColNames: boolean\n    setShortColNames: Dispatch<SetStateAction<boolean>>\n} {\n    const [onlyVisible, setOnlyVisible] = useState(false)\n    const [shortColNames, setShortColNames] = useState(\n        !!firstYColDef?.shortName\n    )\n\n    const downloadCtx: DataDownloadContextServerSide = useMemo(\n        () => ({\n            ...downloadCtxBase,\n            csvDownloadType: onlyVisible\n                ? CsvDownloadType.CurrentSelection\n                : CsvDownloadType.Full,\n            shortColNames,\n        }),\n        [downloadCtxBase, onlyVisible, shortColNames]\n    )\n\n    const csvUrl = useMemo(\n        () => getDownloadUrl(\"csv\", downloadCtx),\n        [downloadCtx]\n    )\n    const metadataUrl = useMemo(\n        () => getDownloadUrl(\"metadata.json\", downloadCtx),\n        [downloadCtx]\n    )\n\n    return {\n        csvUrl,\n        metadataUrl,\n        onlyVisible,\n        setOnlyVisible,\n        shortColNames,\n        setShortColNames,\n    }\n}\n\n/**\n * The element's content box, i.e. what a ResizeObserver reports as\n * `entry.contentRect`: the space available inside the element, excluding its\n * border and padding. Measuring the border box here instead would size a child\n * larger than the room it actually has, and would disagree with the\n * ResizeObserver updates that follow.\n *\n * Note this reads back layout, so only call it from a layout effect.\n */\nfunction getContentBoxSize(element: HTMLElement): {\n    width: number\n    height: number\n} {\n    const rect = element.getBoundingClientRect()\n    const style = window.getComputedStyle(element)\n    // Coerce to 0 rather than NaN: test DOMs don't always resolve these.\n    const px = (value: string): number => parseFloat(value) || 0\n    const horizontal =\n        px(style.borderLeftWidth) +\n        px(style.borderRightWidth) +\n        px(style.paddingLeft) +\n        px(style.paddingRight)\n    const vertical =\n        px(style.borderTopWidth) +\n        px(style.borderBottomWidth) +\n        px(style.paddingTop) +\n        px(style.paddingBottom)\n\n    return {\n        width: Math.max(0, rect.width - horizontal),\n        height: Math.max(0, rect.height - vertical),\n    }\n}\n\n// Auto-updating Bounds object based on ResizeObserver\n// Optionally throttles the bounds updates\n//\n// The `T` type parameter narrows the return type based on `initialValue`:\n// passing `null` widens the return to `Bounds | null` (so callers can detect\n// the pre-measurement state); omitting it keeps the return as `Bounds`.\nexport function useElementBounds<T extends Bounds | null = Bounds>(\n    ref: RefObject<HTMLElement | null>,\n    initialValue: T = DEFAULT_GRAPHER_BOUNDS as T,\n    throttleTimeOrOptions:\n        | number\n        | {\n              throttleTime?: number\n              preserveLastNonZeroBounds?: boolean\n          } = {}\n): Bounds | T {\n    const options =\n        typeof throttleTimeOrOptions === \"number\"\n            ? { throttleTime: throttleTimeOrOptions }\n            : throttleTimeOrOptions\n    const { throttleTime = 100, preserveLastNonZeroBounds = false } = options\n    const [bounds, setBounds] = useState<Bounds | T>(initialValue)\n\n    const updateBoundsImmediately = useCallback(\n        (width: number, height: number) => {\n            setBounds((currentBounds) => {\n                // A temporarily hidden element can be reported as 0x0. For\n                // responsive children such as Grapher, retaining their last\n                // usable layout avoids a malformed render before the next\n                // non-zero ResizeObserver update arrives.\n                if (\n                    preserveLastNonZeroBounds &&\n                    (width === 0 || height === 0)\n                ) {\n                    return currentBounds\n                }\n\n                if (\n                    currentBounds?.width === width &&\n                    currentBounds.height === height\n                ) {\n                    return currentBounds\n                }\n\n                return new Bounds(0, 0, width, height)\n            })\n        },\n        [preserveLastNonZeroBounds]\n    )\n\n    useIsomorphicLayoutEffect(() => {\n        const element = ref.current\n        if (!element) return\n\n        // Same box the ResizeObserver below reports, so the first measurement\n        // agrees with every update after it.\n        const { width, height } = getContentBoxSize(element)\n        updateBoundsImmediately(width, height)\n    }, [ref, updateBoundsImmediately])\n\n    const updateBoundsThrottled = useMemo(\n        () =>\n            throttleTime !== undefined\n                ? _.throttle(\n                      updateBoundsImmediately,\n                      throttleTime,\n\n                      // We use `leading` because, in many cases, there is only a single resize event (e.g. phone screen\n                      // orientation change), and we want to optimize for a fast response time in that case\n                      { leading: true }\n                  )\n                : updateBoundsImmediately,\n        [throttleTime, updateBoundsImmediately]\n    )\n\n    useEffect(() => {\n        const element = ref.current\n        if (!element) return\n\n        const observer = new ResizeObserver((entries) => {\n            const entry = entries[0]\n            if (!entry) return\n            const { width, height } = entry.contentRect\n            updateBoundsThrottled(width, height)\n        })\n\n        observer.observe(element)\n        return () => observer.disconnect()\n    }, [ref, updateBoundsThrottled])\n\n    return bounds\n}\n\nexport function useDismissOnOutsidePointerDownOrUnmount(\n    onDismiss: (() => void) | undefined\n): void {\n    useEffect(() => {\n        if (!onDismiss) return\n        document.addEventListener(\"pointerdown\", onDismiss, { passive: true })\n        return () => {\n            document.removeEventListener(\"pointerdown\", onDismiss)\n            onDismiss()\n        }\n    }, [onDismiss])\n}\n","import * as React from \"react\"\nimport cx from \"clsx\"\nimport { Tabs as AriaTabs, TabList, Tab } from \"react-aria-components\"\n\nexport interface TabItem<TabKey extends string = string> {\n    key: TabKey\n    element: React.ReactElement\n    buttonProps?: {\n        className?: string\n        ariaLabel?: string\n        dataTrackNote?: string\n        ref?: React.RefObject<HTMLDivElement | null>\n    }\n}\n\nexport const Tabs = <TabKey extends string = string>({\n    items,\n    selectedKey,\n    onChange,\n    className,\n    containerClassName,\n    variant = \"default\",\n    children,\n}: {\n    items: TabItem<TabKey>[]\n    selectedKey: TabKey\n    onChange: (key: TabKey) => void\n    className?: string\n    containerClassName?: string\n    variant?: \"default\" | \"slim\" | \"stretch\" | \"scroll\"\n    // TabPanels associated with the tabs; must be react-aria <TabPanel>\n    // elements (or wrappers around them) so they pick up the tabs context\n    children?: React.ReactNode\n}) => {\n    return (\n        <AriaTabs\n            className={containerClassName}\n            selectedKey={selectedKey}\n            onSelectionChange={(key) => {\n                if (typeof key === \"string\") onChange(key as TabKey)\n            }}\n        >\n            <TabList\n                className={cx(\"Tabs\", \"Tabs--variant-\" + variant, className)}\n            >\n                {items.map((item) => (\n                    <Tab\n                        key={item.key}\n                        id={item.key}\n                        data-track-note={item.buttonProps?.dataTrackNote}\n                        aria-label={item.buttonProps?.ariaLabel}\n                        className={cx(\"Tabs__Tab\", item.buttonProps?.className)}\n                        ref={item.buttonProps?.ref}\n                    >\n                        {item.element}\n                    </Tab>\n                ))}\n            </TabList>\n            {children}\n        </AriaTabs>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport { useCallback, useMemo } from \"react\"\nimport * as React from \"react\"\nimport { observable, computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    Bounds,\n    canWriteToClipboard,\n    fetchWithTimeout,\n    getOriginAttributions,\n    makeDownloadCodeExamples,\n    getProcessingPhraseForAttribution,\n    SERVER_SIDE_DOWNLOAD_HELP_TEXT,\n    triggerDownloadFromBlob,\n    triggerDownloadFromUrl,\n} from \"@ourworldindata/utils\"\nimport {\n    CsvDownloadType,\n    createCsvBlobLocally,\n    getDataDownloadFilename,\n    getDownloadUrl,\n    getNonRedistributableInfo,\n    type DataDownloadContextBase,\n    type DataDownloadContextClientSide,\n} from \"../download.js\"\nimport {\n    DownloadApiOptions,\n    makeFilteredDownloadDescription,\n    makeFullDownloadDescription,\n    DownloadButton,\n    Checkbox,\n    CodeSnippet,\n    OverlayHeader,\n    NonRedistributableDataNotice,\n} from \"@ourworldindata/components\"\nimport { useDataApiDownloadConfig } from \"../hooks.js\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faCircleExclamation,\n    faCopy,\n    faInfoCircle,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    OwidColumnDef,\n    OwidOrigin,\n    QueryParams,\n    type GrapherImageDownloadEvent,\n} from \"@ourworldindata/types\"\nimport {\n    BlankOwidTable,\n    OwidTable,\n    CoreColumn,\n} from \"@ourworldindata/core-table\"\nimport { Modal } from \"./Modal\"\nimport { GrapherRasterizeFn } from \"../captionedChart/StaticChartRasterizer.js\"\nimport { TabPanel } from \"react-aria-components\"\nimport { TabItem, Tabs } from \"../tabs/Tabs.js\"\nimport {\n    DEFAULT_GRAPHER_BOUNDS,\n    DEFAULT_GRAPHER_BOUNDS_SQUARE,\n    GrapherModal,\n} from \"../core/GrapherConstants\"\n\nexport interface DownloadModalManager {\n    displaySlug: string\n    rasterize: GrapherRasterizeFn\n    staticBounds?: Bounds\n    staticBoundsWithDetails?: Bounds\n    baseUrl?: string\n    queryStr?: string\n    externalQueryParams?: QueryParams\n    tableForDownload: OwidTable\n    filteredTableForDownload: OwidTable\n    yColumnsFromDimensionsOrSlugsOrAuto?: CoreColumn[]\n    detailsOrderedByReference?: string[]\n    activeModal?: GrapherModal\n    frameBounds?: Bounds\n    base: React.RefObject<HTMLDivElement | null>\n    captionedChartBounds?: Bounds\n    isOnChartOrMapTab?: boolean\n    isOnArchivalPage?: boolean\n    hasArchivedPage?: boolean\n    showAdminControls?: boolean\n    isWikimediaExport?: boolean\n    isPublished?: boolean\n    inputColumnSlugs?: string[]\n    isServerSideDownloadAvailable?: boolean\n    logImageDownloadEvent?: (action: GrapherImageDownloadEvent) => void\n    activeDownloadModalTab: DownloadModalTabName\n    isOnMapTab?: boolean\n    isOnChartTab?: boolean\n    isOnTableTab?: boolean\n}\n\ninterface DownloadModalProps {\n    manager: DownloadModalManager\n}\n\nexport enum DownloadModalTabName {\n    Vis = \"Vis\",\n    Data = \"Data\",\n}\n\n@observer\nexport class DownloadModal extends React.Component<DownloadModalProps> {\n    constructor(props: DownloadModalProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    private get tabItems(): TabItem<DownloadModalTabName>[] {\n        return [\n            {\n                key: DownloadModalTabName.Vis,\n                element: <>Visualization</>,\n                buttonProps: {\n                    dataTrackNote: \"chart_download_modal_tab_visualization\",\n                },\n            },\n            {\n                key: DownloadModalTabName.Data,\n                element: <>Data</>,\n                buttonProps: {\n                    dataTrackNote: \"chart_download_modal_tab_data\",\n                },\n            },\n        ]\n    }\n\n    @computed private get frameBounds() {\n        return this.props.manager.frameBounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get modalBounds() {\n        const maxWidth = 640\n        const padWidth = Math.max(16, (this.frameBounds.width - maxWidth) / 2)\n        return this.frameBounds.padHeight(16).padWidth(padWidth)\n    }\n\n    @computed private get activeTab(): DownloadModalTabName {\n        return this.props.manager.activeDownloadModalTab\n    }\n\n    @action.bound private onTabChange(key: DownloadModalTabName) {\n        this.props.manager.activeDownloadModalTab = key\n    }\n\n    @action.bound private onDismiss() {\n        this.props.manager.activeModal = undefined\n    }\n\n    override render(): React.ReactElement {\n        return (\n            <Modal\n                ariaLabel=\"Download\"\n                grapherRef={this.props.manager.base}\n                bounds={this.modalBounds}\n                onDismiss={this.onDismiss}\n                alignVertical=\"top\"\n            >\n                <div\n                    className=\"download-modal-content\"\n                    style={{ maxHeight: this.modalBounds.height }}\n                >\n                    <OverlayHeader\n                        title=\"Download\"\n                        onDismiss={this.onDismiss}\n                    />\n                    <Tabs\n                        variant=\"slim\"\n                        items={this.tabItems}\n                        selectedKey={this.activeTab}\n                        onChange={this.onTabChange}\n                        className=\"download-modal__tab-list\"\n                        containerClassName=\"download-modal__tabs\"\n                    >\n                        {/**\n                         * The inactive tab panel stays mounted (shouldForceMount)\n                         * and is only hidden via CSS, so that the tab state\n                         * (selected radio buttons, etc) is preserved when\n                         * switching between tabs.\n                         */}\n                        <div className=\"download-modal__tab-panel\">\n                            <TabPanel\n                                id={DownloadModalTabName.Vis}\n                                shouldForceMount\n                                className=\"download-modal__tab-content\"\n                            >\n                                <DownloadModalVisTab {...this.props} />\n                            </TabPanel>\n                            <TabPanel\n                                id={DownloadModalTabName.Data}\n                                shouldForceMount\n                                className=\"download-modal__tab-content\"\n                            >\n                                <DownloadModalDataTab {...this.props} />\n                            </TabPanel>\n                        </div>\n                    </Tabs>\n                </div>\n            </Modal>\n        )\n    }\n}\n\n@observer\nexport class DownloadModalVisTab extends React.Component<DownloadModalProps> {\n    constructor(props: DownloadModalProps) {\n        super(props)\n\n        makeObservable<\n            DownloadModalVisTab,\n            | \"svgBlob\"\n            | \"svgPreviewUrl\"\n            | \"pngBlob\"\n            | \"pngPreviewUrl\"\n            | \"canWriteToClipboard\"\n            | \"isReady\"\n            | \"shouldIncludeDetails\"\n        >(this, {\n            svgBlob: observable,\n            svgPreviewUrl: observable,\n            pngBlob: observable,\n            pngPreviewUrl: observable,\n            canWriteToClipboard: observable,\n            isReady: observable,\n            shouldIncludeDetails: observable,\n        })\n    }\n\n    @computed private get staticBounds(): Bounds {\n        return this.manager.staticBounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get captionedChartBounds(): Bounds {\n        return this.manager.captionedChartBounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get isExportingSquare(): boolean {\n        return (\n            this.manager.staticBounds?.width ===\n            this.manager.staticBounds?.height\n        )\n    }\n\n    @computed private get isWikimediaExport(): boolean {\n        return this.manager.isWikimediaExport ?? false\n    }\n\n    @computed private get targetBounds(): Bounds {\n        if (this.shouldIncludeDetails)\n            return this.manager.staticBoundsWithDetails ?? this.staticBounds\n        else return this.staticBounds\n    }\n\n    @computed private get targetWidth(): number {\n        return this.targetBounds.width\n    }\n\n    @computed private get targetHeight(): number {\n        return this.targetBounds.height\n    }\n\n    @computed private get manager(): DownloadModalManager {\n        return this.props.manager\n    }\n\n    private svgBlob: Blob | undefined = undefined\n    private svgPreviewUrl: string | undefined = undefined\n\n    private pngBlob: Blob | undefined = undefined\n    private pngPreviewUrl: string | undefined = undefined\n    private canWriteToClipboard: boolean = false\n\n    private isReady: boolean = false\n\n    private shouldIncludeDetails = true\n\n    @action.bound private export(): void {\n        // render the graphic then cache data-urls for display & blobs for downloads\n        this.manager\n            .rasterize({ includeDetails: this.shouldIncludeDetails })\n            .then(({ url, blob, svgUrl, svgBlob }) => {\n                this.pngPreviewUrl = url\n                this.pngBlob = blob\n                this.svgPreviewUrl = svgUrl\n                this.svgBlob = svgBlob\n                this.markAsReady()\n            })\n            .catch((err) => {\n                console.error(JSON.stringify(err))\n                this.markAsReady()\n            })\n    }\n\n    @action.bound private markAsReady(): void {\n        this.isReady = true\n    }\n\n    @action.bound private reset(): void {\n        this.isReady = false\n    }\n\n    @computed private get fallbackPngUrl(): string {\n        return `${this.manager.baseUrl || \"\"}.png${this.manager.queryStr || \"\"}`\n    }\n    @computed private get baseFilename(): string {\n        return this.manager.displaySlug\n    }\n\n    @action.bound private onPngDownload(): void {\n        const filename = this.baseFilename + \".png\"\n        if (this.pngBlob) {\n            triggerDownloadFromBlob(filename, this.pngBlob)\n        } else {\n            triggerDownloadFromUrl(filename, this.fallbackPngUrl)\n        }\n        this.manager.logImageDownloadEvent?.(\"chart_download_png\")\n    }\n\n    @action.bound private onSvgDownload(): void {\n        const filename = this.baseFilename + \".svg\"\n        if (this.svgBlob) {\n            triggerDownloadFromBlob(filename, this.svgBlob)\n        }\n        this.manager.logImageDownloadEvent?.(\"chart_download_svg\")\n    }\n\n    @action.bound private toggleExportFormat(): void {\n        this.manager.staticBounds = this.isExportingSquare\n            ? DEFAULT_GRAPHER_BOUNDS\n            : DEFAULT_GRAPHER_BOUNDS_SQUARE\n    }\n\n    @action.bound private toggleExportForUseOnWikimedia(): void {\n        this.manager.isWikimediaExport = !this.isWikimediaExport\n    }\n\n    @action.bound private toggleIncludeDetails(): void {\n        this.shouldIncludeDetails = !this.shouldIncludeDetails\n    }\n\n    @computed private get hasDetails(): boolean {\n        return !_.isEmpty(this.manager.detailsOrderedByReference)\n    }\n\n    @computed private get showInteractiveEmbedTip(): boolean {\n        return !!(this.manager.isOnArchivalPage || this.manager.hasArchivedPage)\n    }\n\n    @action.bound openEmbedDialog(): void {\n        this.manager.activeModal = GrapherModal.Embed\n    }\n\n    @computed get showCopyPngButton(): boolean {\n        return !!this.manager.showAdminControls && this.canWriteToClipboard\n    }\n\n    @action.bound async onCopyPng(): Promise<void> {\n        try {\n            if (!this.pngBlob) return\n            await navigator.clipboard.write([\n                new ClipboardItem({ \"image/png\": this.pngBlob }),\n            ])\n        } catch (err) {\n            console.error(\"couldn't copy PNG to clipboard\", err)\n        }\n    }\n\n    override componentDidMount(): void {\n        queueMicrotask(() => this.export())\n\n        void canWriteToClipboard().then(\n            (canWriteToClipboard) =>\n                (this.canWriteToClipboard = canWriteToClipboard)\n        )\n    }\n\n    override render(): React.ReactElement {\n        const {\n            manager,\n            svgPreviewUrl,\n            captionedChartBounds,\n            targetWidth,\n            targetHeight,\n            showInteractiveEmbedTip,\n        } = this\n        const pngPreviewUrl = this.pngPreviewUrl || this.fallbackPngUrl\n        const isRegenerating = !this.isReady\n\n        let previewWidth: number\n        let previewHeight: number\n        const boundScalar = 0.17\n        if (\n            captionedChartBounds.width / captionedChartBounds.height >\n            targetWidth / targetHeight\n        ) {\n            previewHeight = Math.min(\n                72,\n                captionedChartBounds.height * boundScalar\n            )\n            previewWidth = (targetWidth / targetHeight) * previewHeight\n        } else {\n            previewWidth = Math.min(\n                102,\n                captionedChartBounds.width * boundScalar\n            )\n            previewHeight = (targetHeight / targetWidth) * previewWidth\n        }\n\n        const previewImageDimensions = {\n            width: Math.round(previewWidth),\n            height: Math.round(previewHeight),\n        }\n        const imageStyle = { opacity: this.isReady ? 1 : 0 }\n\n        return (\n            <div>\n                {manager.isOnChartOrMapTab ? (\n                    <div className=\"download-modal__vis-section\">\n                        {showInteractiveEmbedTip && (\n                            <Callout\n                                title=\"Did you know?\"\n                                icon={<FontAwesomeIcon icon={faInfoCircle} />}\n                            >\n                                Instead of downloading a static image of this\n                                chart, you can also{\" \"}\n                                <a\n                                    onClick={this.openEmbedDialog}\n                                    data-track-note=\"chart_download_click_interactive_embed\"\n                                >\n                                    embed an interactive version\n                                </a>\n                                .{\" \"}\n                                {this.manager.isOnArchivalPage ? (\n                                    <>\n                                        The interactive version will stay fixed\n                                        over time and will always show the same\n                                        chart and data you are seeing now.\n                                    </>\n                                ) : (\n                                    <>\n                                        You can choose between a live embed that\n                                        always reflects our latest data updates,\n                                        or a snapshot embed that stays fixed at\n                                        the time you created it.\n                                    </>\n                                )}\n                            </Callout>\n                        )}\n                        <div className=\"download-modal__download-buttons\">\n                            {this.showCopyPngButton && (\n                                <button\n                                    className=\"download-modal__copy-button\"\n                                    onClick={this.onCopyPng}\n                                    disabled={isRegenerating}\n                                >\n                                    <FontAwesomeIcon icon={faCopy} />\n                                    Copy PNG\n                                </button>\n                            )}\n                            <DownloadButton\n                                title=\"Image (PNG)\"\n                                description=\"Suitable for most uses, widely compatible.\"\n                                previewImageUrl={pngPreviewUrl}\n                                previewImageDimensions={previewImageDimensions}\n                                onClick={this.onPngDownload}\n                                imageStyle={imageStyle}\n                                trackingNote=\"chart_download_modal_vis_png\"\n                                disabled={isRegenerating}\n                            />\n                            <DownloadButton\n                                title=\"Vector graphic (SVG)\"\n                                description=\"For high quality prints, or further editing the chart in graphics software.\"\n                                previewImageUrl={svgPreviewUrl}\n                                previewImageDimensions={previewImageDimensions}\n                                onClick={this.onSvgDownload}\n                                imageStyle={imageStyle}\n                                trackingNote=\"chart_download_modal_vis_svg\"\n                                disabled={isRegenerating}\n                            />\n                        </div>\n                        {this.hasDetails && (\n                            <Checkbox\n                                checked={this.shouldIncludeDetails}\n                                label=\"Include terminology definitions at bottom of chart\"\n                                onChange={(): void => {\n                                    this.reset()\n                                    this.toggleIncludeDetails()\n                                    this.export()\n                                }}\n                            />\n                        )}\n                        {this.manager.showAdminControls && (\n                            <Checkbox\n                                checked={this.isExportingSquare}\n                                label=\"Square format\"\n                                onChange={action((): void => {\n                                    this.reset()\n                                    this.toggleExportFormat()\n                                    this.export()\n                                })}\n                            />\n                        )}\n                        <Checkbox\n                            checked={this.isWikimediaExport}\n                            label=\"Optimize SVG for Wikipedia upload\"\n                            onChange={action((): void => {\n                                this.reset()\n                                this.toggleExportForUseOnWikimedia()\n                                this.export()\n                            })}\n                        />\n                    </div>\n                ) : (\n                    <Callout\n                        title=\"Chart can't currently be exported to image\"\n                        icon={<FontAwesomeIcon icon={faCircleExclamation} />}\n                    >\n                        Try switching to the \"Chart\" or \"Map\" tab to download a\n                        static image of this chart.\n                        <br />\n                        You can also download the data used in this chart by\n                        navigating to the \"Data\" tab.\n                    </Callout>\n                )}\n            </div>\n        )\n    }\n}\n\nconst SourceAndCitationSection = ({ table }: { table?: OwidTable }) => {\n    // Sources can come either from origins (new format) or from the source field of the column (old format)\n    const origins =\n        table?.defs\n            .flatMap((def) => def.origins ?? [])\n            ?.filter((o) => o !== undefined) ?? []\n\n    const otherSources =\n        table?.columnsAsArray\n            .map((col) => col.source)\n            .filter((s) => s?.dataPublishedBy !== undefined)\n            .map((s): OwidOrigin => ({\n                producer: s.dataPublishedBy,\n                urlMain: s.link,\n            })) ?? []\n\n    const originsUniq = _.uniqBy(\n        [...origins, ...otherSources],\n        (o) => o.urlMain ?? o.datePublished\n    )\n\n    const attributions = getOriginAttributions(originsUniq)\n\n    const sourceLinks = attributions.map(({ label, url }) =>\n        url ? (\n            <li key={url}>\n                <a href={url}>{label}</a>\n            </li>\n        ) : (\n            <li key={label}>{label}</li>\n        )\n    )\n\n    // Find the highest processing level of all columns\n    const owidProcessingLevel = table?.columnsAsArray\n        .map((col) => col.def.owidProcessingLevel)\n        .reduce((prev, curr) => {\n            if (prev === \"major\" || curr === \"major\") return \"major\" as const\n            if (prev === \"minor\" || curr === \"minor\") return \"minor\" as const\n            return undefined\n        }, undefined)\n\n    const processingLevelPhrase = getProcessingPhraseForAttribution(\n        attributions.map(({ label }) => label),\n        owidProcessingLevel\n    )\n    const fullProcessingPhrase = processingLevelPhrase ? (\n        <>\n            {\" \"}\n            – <i>{processingLevelPhrase} by Our World in Data</i>\n        </>\n    ) : undefined\n\n    return (\n        <div className=\"download-modal__data-section download-modal__sources\">\n            <h3 className=\"grapher_h3-semibold\">Source and citation</h3>\n            {sourceLinks.length > 0 && (\n                <div className=\"download-modal__data-sources\">\n                    <strong>Data sources:</strong>{\" \"}\n                    <ul className=\"download-modal__data-sources-list\">\n                        {sourceLinks}\n                    </ul>\n                    {fullProcessingPhrase}\n                </div>\n            )}\n            <div>\n                <strong>Citation guidance:</strong> Please credit all sources\n                listed above. Data provided by third-party sources through Our\n                World in Data remains subject to the original{\" \"}\n                {sourceLinks.length === 1 ? \"provider's\" : \"providers'\"} license\n                terms.\n            </div>\n        </div>\n    )\n}\n\nconst ApiAndCodeExamplesSection = (props: {\n    downloadCtxBase: DataDownloadContextBase\n    firstYColDef?: OwidColumnDef\n}) => {\n    const {\n        csvUrl,\n        metadataUrl,\n        onlyVisible,\n        setOnlyVisible,\n        shortColNames,\n        setShortColNames,\n    } = useDataApiDownloadConfig({\n        downloadCtxBase: props.downloadCtxBase,\n        firstYColDef: props.firstYColDef,\n    })\n    const codeExamples = makeDownloadCodeExamples(csvUrl, metadataUrl)\n\n    return (\n        <>\n            <div className=\"download-modal__data-section\">\n                <div className=\"download-modal__heading-with-caption\">\n                    <h3 className=\"grapher_h3-semibold\">Data API</h3>\n                    <p className=\"grapher_label-2-regular\">\n                        Use these URLs to programmatically access this chart's\n                        data and configure your requests with the options below.{\" \"}\n                        <a\n                            href=\"https://docs.owid.io/projects/etl/api/\"\n                            data-track-note=\"chart_download_modal_api_docs\"\n                        >\n                            Our documentation provides more information\n                        </a>{\" \"}\n                        on how to use the API, and you can find a few code\n                        examples below.\n                    </p>\n                </div>\n\n                <section className=\"download-modal__api-urls\">\n                    <div>\n                        <h4 className=\"grapher_body-2-medium\">\n                            Data URL (CSV format)\n                        </h4>\n                        <CodeSnippet code={csvUrl} />\n                    </div>\n                    <div>\n                        <h4 className=\"grapher_body-2-medium\">\n                            Metadata URL (JSON format)\n                        </h4>\n                        <CodeSnippet code={metadataUrl} />\n                    </div>\n                </section>\n                <DownloadApiOptions\n                    onlyVisible={onlyVisible}\n                    onOnlyVisibleChange={setOnlyVisible}\n                    shortColNames={shortColNames}\n                    onShortColNamesChange={setShortColNames}\n                    firstYColDef={props.firstYColDef}\n                />\n            </div>\n            <div className=\"download-data-section download-modal__data-section\">\n                <div className=\"download-modal__heading-with-caption\">\n                    <h3 className=\"grapher_h3-semibold\">Code examples</h3>\n                    <p className=\"grapher_label-2-regular\">\n                        Examples of how to load this data into different data\n                        analysis tools.\n                    </p>\n                </div>\n                <div className=\"download-modal__code-blocks\">\n                    {Object.entries(codeExamples).map(([name, snippet]) => (\n                        <div key={name}>\n                            <h4 className=\"grapher_body-2-medium\">{name}</h4>\n                            <CodeSnippet code={snippet} />\n                        </div>\n                    ))}\n                </div>\n            </div>\n        </>\n    )\n}\n\nexport const DownloadModalDataTab = (props: DownloadModalProps) => {\n    const { yColumnsFromDimensionsOrSlugsOrAuto: yColumns } = props.manager\n\n    const { cols: nonRedistributableCols, sourceLinks } =\n        getNonRedistributableInfo(props.manager.tableForDownload)\n\n    // Server-side download is not necessarily available for all types of charts\n    const serverSideDownloadAvailable =\n        props.manager.isServerSideDownloadAvailable\n\n    const downloadCtx: Omit<\n        DataDownloadContextClientSide,\n        \"csvDownloadType\" | \"shortColNames\"\n    > = useMemo(() => {\n        const externalSearchParams = new URLSearchParams()\n        for (const [key, value] of Object.entries(\n            props.manager.externalQueryParams ?? {}\n        )) {\n            if (value) {\n                externalSearchParams.set(key, value)\n            }\n        }\n        return {\n            slug: props.manager.displaySlug,\n            searchParams: new URLSearchParams(props.manager.queryStr),\n            externalSearchParams,\n            baseUrl:\n                props.manager.baseUrl ??\n                `/grapher/${props.manager.displaySlug}`,\n\n            // BlankOwidTable is a factory function, not a component\n            /* oxlint-disable react/capitalized-calls */\n            fullTable: props.manager.tableForDownload ?? BlankOwidTable(),\n            filteredTable:\n                props.manager.filteredTableForDownload ?? BlankOwidTable(),\n            /* oxlint-enable react/capitalized-calls */\n            inputColumnSlugs: props.manager.inputColumnSlugs,\n        }\n    }, [\n        props.manager.baseUrl,\n        props.manager.displaySlug,\n        props.manager.queryStr,\n        props.manager.externalQueryParams,\n        props.manager.tableForDownload,\n        props.manager.filteredTableForDownload,\n        props.manager.inputColumnSlugs,\n    ])\n\n    const onDownloadClick = useCallback(\n        async (csvDownloadType: CsvDownloadType) => {\n            const ctx = {\n                ...downloadCtx,\n                csvDownloadType,\n                // Hard code shortColNames here, since it's not obvious that the\n                // radio button to change shortColNames would influence what\n                // this button does. We use long names, since they are always\n                // available and more useful than short names in e.g. Excel,\n                // which is the more likely tool of choice for a casual user,\n                // who doesn't use the API.\n                shortColNames: false,\n            }\n            if (serverSideDownloadAvailable) {\n                try {\n                    const url = getDownloadUrl(\"zip\", ctx)\n                    const response = await fetchWithTimeout(url, 5000, {\n                        method: \"GET\",\n                        headers: { Accept: \"application/zip\" },\n                    })\n\n                    if (!response.ok) {\n                        throw new Error(\n                            `Server download failed: ${response.status}`\n                        )\n                    }\n\n                    const blob = await response.blob()\n                    triggerDownloadFromBlob(\n                        getDataDownloadFilename({\n                            slug: ctx.slug,\n                            extension: \"zip\",\n                            csvDownloadType,\n                        }),\n                        blob\n                    )\n                } catch (error) {\n                    // Fallback to client-side CSV download\n                    console.warn(\n                        \"Server-side download failed, falling back to client-side\",\n                        error\n                    )\n                    const blob = await createCsvBlobLocally(ctx)\n                    triggerDownloadFromBlob(\n                        getDataDownloadFilename({\n                            slug: ctx.slug,\n                            extension: \"csv\",\n                            csvDownloadType,\n                        }),\n                        blob\n                    )\n                }\n            } else {\n                // Direct client-side download\n                void createCsvBlobLocally(ctx).then((blob) => {\n                    triggerDownloadFromBlob(\n                        getDataDownloadFilename({\n                            slug: ctx.slug,\n                            extension: \"csv\",\n                            csvDownloadType,\n                        }),\n                        blob\n                    )\n                })\n            }\n        },\n        [downloadCtx, serverSideDownloadAvailable]\n    )\n\n    if (nonRedistributableCols?.length) {\n        return (\n            <div>\n                <Callout\n                    title=\"The data in this chart is not available to download\"\n                    icon={<FontAwesomeIcon icon={faInfoCircle} />}\n                >\n                    <NonRedistributableDataNotice sourceLinks={sourceLinks} />\n                </Callout>\n            </div>\n        )\n    }\n\n    const downloadHelpText = serverSideDownloadAvailable ? (\n        <p className=\"grapher_label-2-regular\">\n            {SERVER_SIDE_DOWNLOAD_HELP_TEXT}\n        </p>\n    ) : (\n        <p className=\"grapher_label-2-regular\">\n            Download the data used to create this chart. The data is provided in\n            CSV format, which can be opened in Excel, Google Sheets, and other\n            data analysis tools.\n        </p>\n    )\n\n    const firstYColDef = yColumns?.[0]?.def\n    const activeView = props.manager.isOnTableTab\n        ? \"table\"\n        : props.manager.isOnMapTab\n          ? \"map\"\n          : \"chart\"\n    const fullDataDescription = makeFullDownloadDescription(\n        downloadCtx.fullTable.numRows\n    )\n    const filteredDataDescription = makeFilteredDownloadDescription({\n        visibleIn: activeView,\n        numRows: downloadCtx.filteredTable.numRows,\n    })\n\n    return (\n        <>\n            <SourceAndCitationSection table={props.manager.tableForDownload} />\n            <div className=\"download-modal__data-section\">\n                <div className=\"download-modal__heading-with-caption\">\n                    <h3 className=\"grapher_h3-semibold\">Quick download</h3>\n                    {downloadHelpText}\n                </div>\n                <div>\n                    <div className=\"download-modal__download-buttons\">\n                        <DownloadButton\n                            title=\"Download full data\"\n                            description={fullDataDescription}\n                            icon=\"full\"\n                            trackingNote={`chart_download_full_data${\n                                serverSideDownloadAvailable\n                                    ? \"--server\"\n                                    : \"--client\"\n                            }`}\n                            onClick={() =>\n                                onDownloadClick(CsvDownloadType.Full)\n                            }\n                        />\n                        <DownloadButton\n                            title=\"Download displayed data\"\n                            description={filteredDataDescription}\n                            icon=\"selected\"\n                            trackingNote={`chart_download_filtered_data${\n                                serverSideDownloadAvailable\n                                    ? \"--server\"\n                                    : \"--client\"\n                            }`}\n                            onClick={() =>\n                                onDownloadClick(\n                                    CsvDownloadType.CurrentSelection\n                                )\n                            }\n                        />\n                    </div>\n                </div>\n            </div>\n            {serverSideDownloadAvailable && (\n                <ApiAndCodeExamplesSection\n                    downloadCtxBase={downloadCtx}\n                    firstYColDef={firstYColDef}\n                />\n            )}\n        </>\n    )\n}\n\ninterface CalloutProps {\n    title: React.ReactNode\n    icon?: React.ReactElement\n    children: React.ReactNode\n}\n\nfunction Callout(props: CalloutProps) {\n    return (\n        <div className=\"download-modal__callout\">\n            {props.title && (\n                <h4 className=\"title grapher_body-2-semibold\">\n                    {props.icon}\n                    {props.title}\n                </h4>\n            )}\n            <p className=\"grapher_label-2-regular grapher_light\">\n                {props.children}\n            </p>\n        </div>\n    )\n}\n","import { Fragment } from \"react\"\nimport cx from \"clsx\"\nimport { OwidProcessingLevel, excludeNull } from \"@ourworldindata/utils\"\nimport {\n    makeSource,\n    makeLastUpdated,\n    makeNextUpdate,\n    makeDateRange,\n    makeUnit,\n    makeUnitConversionFactor,\n    makeLinks,\n} from \"@ourworldindata/components\"\nimport * as R from \"remeda\"\n\ninterface SourcesKeyDataTableProps {\n    attribution?: string\n    dateRange?: string\n    lastUpdated?: string\n    nextUpdate?: string\n    unit?: string\n    owidProcessingLevel?: OwidProcessingLevel\n    link?: string\n    unitConversionFactor?: number\n    isEmbeddedInADataPage?: boolean // true by default\n    openLinksInNewTab?: boolean\n}\n\nexport const SourcesKeyDataTable = (props: SourcesKeyDataTableProps) => {\n    const source = makeSource(props)\n    const lastUpdated = makeLastUpdated(props)\n    const nextUpdate = makeNextUpdate(props)\n    const dateRange = makeDateRange(props)\n    const unit = makeUnit(props)\n    const unitConversionFactor = makeUnitConversionFactor(props)\n    const links = makeLinks(props)\n\n    const keyDataWithoutSource = excludeNull([\n        lastUpdated ? { label: \"Last updated\", content: lastUpdated } : null,\n        nextUpdate\n            ? { label: \"Next expected update\", content: nextUpdate }\n            : null,\n        dateRange ? { label: \"Date range\", content: dateRange } : null,\n        unit ? { label: \"Unit\", content: unit } : null,\n        unitConversionFactor\n            ? {\n                  label: \"Unit conversion factor\",\n                  content: unitConversionFactor,\n              }\n            : null,\n        links ? { label: \"Links\", content: links } : null,\n    ])\n\n    const rows = R.chunk(keyDataWithoutSource, 2)\n\n    return (\n        <div className=\"sources-key-data-table\">\n            {source && (\n                <div className=\"key-data key-data--span\">\n                    <div className=\"key-data__title\">Source</div>\n                    <div className=\"key-data__content\">{source}</div>\n                </div>\n            )}\n            {rows.map(([first, second]) => (\n                <Fragment key={first.label}>\n                    <div\n                        className={cx(\"key-data\", {\n                            \"key-data--span\": !second,\n                        })}\n                    >\n                        <div className=\"key-data__title\">{first.label}</div>\n                        <div className=\"key-data__content\">{first.content}</div>\n                    </div>\n                    {second && (\n                        <div className=\"key-data\">\n                            <div className=\"key-data__title\">\n                                {second.label}\n                            </div>\n                            <div className=\"key-data__content\">\n                                {second.content}\n                            </div>\n                        </div>\n                    )}\n                </Fragment>\n            ))}\n        </div>\n    )\n}\n","import { faArrowDown } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    ExpandableToggle,\n    HtmlOrSimpleMarkdownText,\n    SimpleMarkdownText,\n} from \"@ourworldindata/components\"\n\ninterface SourcesDescriptionsProps {\n    descriptionShort?: string\n    descriptionKey?: string\n    descriptionFromProducer?: string\n    attributionShort?: string\n    additionalInfo?: string\n    hasFaqEntries: boolean\n    isEmbeddedInADataPage?: boolean // true by default\n    openLinksInNewTab?: boolean\n}\n\nexport const SourcesDescriptions = (props: SourcesDescriptionsProps) => {\n    const isEmbeddedInADataPage = props.isEmbeddedInADataPage ?? true\n    return (\n        <div className=\"sources-descriptions\">\n            {props.descriptionKey && (\n                <div className=\"sources-description-key\">\n                    <h3 className=\"sources-description-key__title\">\n                        What you should know about this data\n                    </h3>\n                    <div className=\"sources-description-key__content\">\n                        <SimpleMarkdownText\n                            text={props.descriptionKey.trim()}\n                            openLinksInNewTab={props.openLinksInNewTab}\n                        />\n                    </div>\n                    {isEmbeddedInADataPage && props.hasFaqEntries && (\n                        <a\n                            className=\"sources-description-key__learn-more\"\n                            href=\"#faqs\"\n                        >\n                            Learn more in the FAQs\n                            <FontAwesomeIcon icon={faArrowDown} />\n                        </a>\n                    )}\n                </div>\n            )}\n            <div className=\"expandable-info-blocks\">\n                {props.descriptionFromProducer && (\n                    <ExpandableToggle\n                        label={\n                            props.attributionShort\n                                ? `How is this data described by its producer - ${props.attributionShort}?`\n                                : \"How is this data described by its producer?\"\n                        }\n                        content={\n                            <SimpleMarkdownText\n                                text={props.descriptionFromProducer.trim()}\n                                openLinksInNewTab={props.openLinksInNewTab}\n                            />\n                        }\n                        isExpandedDefault={\n                            !(props.descriptionShort || props.descriptionKey)\n                        }\n                    />\n                )}\n                {props.additionalInfo && (\n                    <ExpandableToggle\n                        label=\"Additional information about this data\"\n                        content={\n                            <HtmlOrSimpleMarkdownText\n                                text={props.additionalInfo.trim()}\n                                openLinksInNewTab={props.openLinksInNewTab}\n                            />\n                        }\n                    />\n                )}\n            </div>\n        </div>\n    )\n}\n","import type { ReactElement } from \"react\"\nimport { Popover, type PopoverProps } from \"react-aria-components\"\nimport { UNSAFE_PortalProvider } from \"react-aria\"\n\nexport interface PortaledPopoverProps extends PopoverProps {\n    portalContainer?: HTMLElement\n}\n\n// Popover wrapper that optionally portals overlays into a caller-provided DOM node.\n// This is useful for cases where the popover is used inside an auto-closing element like a modal or drawer, and we want the auto-closing logic to be unchanged.\nexport function PortaledPopover({\n    portalContainer,\n    children,\n    ...props\n}: PortaledPopoverProps): ReactElement {\n    const popover = <Popover {...props}>{children}</Popover>\n\n    if (!portalContainer) return popover\n    return (\n        <UNSAFE_PortalProvider getContainer={() => portalContainer}>\n            {popover}\n        </UNSAFE_PortalProvider>\n    )\n}\n","import * as R from \"remeda\"\nimport cx from \"clsx\"\nimport { useState } from \"react\"\nimport {\n    Button,\n    MenuTrigger,\n    Menu,\n    MenuItem,\n    type Key,\n} from \"react-aria-components\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faEllipsisVertical } from \"@fortawesome/free-solid-svg-icons\"\nimport { TabItem, Tabs } from \"./Tabs\"\nimport { PortaledPopover } from \"../controls/PortaledPopover\"\n\nexport const TabsWithDropdown = <TabKey extends string = string>({\n    items,\n    selectedKey,\n    onChange,\n    numVisibleTabs,\n    className,\n    portalContainer,\n}: {\n    items: TabItem<TabKey>[]\n    selectedKey: TabKey\n    onChange: (key: TabKey) => void\n    numVisibleTabs: number\n    className?: string\n    portalContainer?: HTMLElement\n}) => {\n    const [isOpen, setIsOpen] = useState(false)\n\n    let visibleItems = R.take(items, numVisibleTabs)\n    let hiddenItems = items.filter(\n        (item) => !visibleItems.some((v) => v.key === item.key)\n    )\n\n    // If a hidden item is selected, swap it with the last visible item\n    const selectedHiddenItem = hiddenItems.find(\n        (item) => item.key === selectedKey\n    )\n    if (selectedHiddenItem && visibleItems.length > 0) {\n        const lastVisibleItem = visibleItems[visibleItems.length - 1]\n        visibleItems = R.pipe(\n            visibleItems,\n            R.dropLast(1),\n            R.concat([selectedHiddenItem])\n        )\n        hiddenItems = hiddenItems\n            .filter((item) => item.key !== selectedKey)\n            .concat(lastVisibleItem)\n    }\n\n    const handleSelect = (key: Key) => {\n        if (typeof key === \"string\") onChange(key as TabKey)\n        setIsOpen(false)\n    }\n\n    // We need to portal this popover to the containing modal so that the modal-closing logic can detect clicks outside of it. Otherwise, clicking on the popover would close the modal immediately.\n    const popover = (\n        <PortaledPopover\n            className=\"TabsWithDropdown__Popover\"\n            placement=\"bottom end\"\n            portalContainer={portalContainer}\n        >\n            <Menu className=\"TabsWithDropdown__Menu\" onAction={handleSelect}>\n                {hiddenItems.map((item) => (\n                    <MenuItem\n                        key={item.key}\n                        id={item.key}\n                        className={cx(\n                            \"TabsWithDropdown__MenuItem\",\n                            item.buttonProps?.className\n                        )}\n                        data-track-note={item.buttonProps?.dataTrackNote}\n                        aria-label={item.buttonProps?.ariaLabel}\n                        ref={item.buttonProps?.ref}\n                    >\n                        {item.element}\n                    </MenuItem>\n                ))}\n            </Menu>\n        </PortaledPopover>\n    )\n\n    return (\n        <div className={cx(\"TabsWithDropdown\", className)}>\n            <div className=\"TabsWithDropdown__Row\">\n                <Tabs\n                    className=\"TabsWithDropdown__Tabs\"\n                    items={visibleItems}\n                    selectedKey={selectedKey}\n                    onChange={onChange}\n                    variant=\"stretch\"\n                />\n                {hiddenItems.length > 0 && (\n                    <MenuTrigger isOpen={isOpen} onOpenChange={setIsOpen}>\n                        <Button\n                            className=\"TabsWithDropdown__MoreButton\"\n                            aria-label=\"Show more tabs\"\n                            data-open={isOpen || undefined}\n                        >\n                            <FontAwesomeIcon\n                                icon={faEllipsisVertical}\n                                aria-hidden=\"true\"\n                            />\n                            <span className=\"label\">More</span>\n                        </Button>\n                        {popover}\n                    </MenuTrigger>\n                )}\n            </div>\n        </div>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport {\n    Bounds,\n    formatAttributions,\n    getAttributionFragmentsFromVariable,\n    getLastUpdatedFromVariable,\n    getNextUpdateFromVariable,\n    DisplaySource,\n    prepareSourcesForDisplay,\n    OwidSource,\n    IndicatorTitleWithFragments,\n    joinTitleFragments,\n    getIndicatorCitations,\n    openLinkInNewTabAttrs,\n} from \"@ourworldindata/utils\"\nimport {\n    IndicatorSources,\n    IndicatorProcessing,\n    SimpleMarkdownText,\n    DataCitation,\n    OverlayHeader,\n    CLOSE_BUTTON_WIDTH,\n    CloseButton,\n    LoadingIndicator,\n} from \"@ourworldindata/components\"\nimport * as React from \"react\"\nimport cx from \"clsx\"\nimport { action, computed, makeObservable, observable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { faPencilAlt } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { OwidColumnDef } from \"@ourworldindata/types\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\nimport { Modal } from \"./Modal\"\nimport { SourcesKeyDataTable } from \"./SourcesKeyDataTable\"\nimport { SourcesDescriptions } from \"./SourcesDescriptions\"\nimport { TabItem, Tabs } from \"../tabs/Tabs\"\nimport { TabsWithDropdown } from \"../tabs/TabsWithDropdown\"\nimport {\n    DEFAULT_GRAPHER_BOUNDS,\n    GrapherModal,\n    isContinentsVariableId,\n} from \"../core/GrapherConstants\"\n\n// keep in sync with variables in SourcesModal.scss\nconst MAX_CONTENT_WIDTH = 640\nconst TAB_PADDING = 8\nconst TAB_FONT_SIZE = 13\nconst TAB_GAP = 8\nconst TAB_TITLE_SPACING = 6\n\nexport interface SourcesModalManager {\n    isReady?: boolean\n    adminBaseUrl?: string\n    inputColumnsWithSources: CoreColumn[]\n    showAdminControls?: boolean\n    activeModal?: GrapherModal\n    frameBounds?: Bounds\n    base: React.RefObject<HTMLDivElement | null>\n    isEmbeddedInADataPage?: boolean\n    isInIFrame?: boolean\n    isNarrow?: boolean\n    fontSize?: number\n}\n\ninterface SourcesModalProps {\n    manager: SourcesModalManager\n}\n\n@observer\nexport class SourcesModal extends React.Component<SourcesModalProps> {\n    private readonly container = React.createRef<HTMLDivElement>()\n\n    private activeTabKey = \"\"\n\n    constructor(props: SourcesModalProps) {\n        super(props)\n        makeObservable<SourcesModal, \"activeTabKey\">(this, {\n            activeTabKey: observable,\n        })\n    }\n\n    @action override componentDidMount(): void {\n        this.activeTabKey = this.tabs[0]?.label.key ?? \"\"\n    }\n\n    @action.bound private setActiveTabKey(key: string): void {\n        this.activeTabKey = key\n    }\n\n    @computed private get manager(): SourcesModalManager {\n        return this.props.manager\n    }\n\n    @computed private get frameBounds(): Bounds {\n        return this.manager.frameBounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get modalBounds(): Bounds {\n        const maxWidth = MAX_CONTENT_WIDTH + 220\n        // using 15px instead of 16px to make sure the modal fully covers the OWID logo in the header\n        const padWidth = Math.max(15, (this.frameBounds.width - maxWidth) / 2)\n        return this.frameBounds.padHeight(15).padWidth(padWidth)\n    }\n\n    @computed private get showStickyHeader(): boolean {\n        const modalWidth = this.modalBounds.width - 2 * this.modalPadding\n        return (modalWidth - MAX_CONTENT_WIDTH) / 2 < CLOSE_BUTTON_WIDTH + 2\n    }\n\n    @computed private get modalPadding(): number {\n        return 1.5 * (this.manager.fontSize ?? 16)\n    }\n\n    @computed private get editBaseUrl(): string | undefined {\n        if (!this.manager.showAdminControls) return undefined\n        return `${this.props.manager.adminBaseUrl}/admin`\n    }\n\n    @computed private get columns(): CoreColumn[] {\n        return this.manager.inputColumnsWithSources\n    }\n\n    private makeTabLabelString(title: string, attribution?: string): string {\n        return `${title} ${attribution ?? \"\"}`.trim()\n    }\n\n    private makeTabLabelElement(\n        title: string,\n        attribution?: string\n    ): React.ReactElement {\n        return (\n            <>\n                {title}\n                {attribution && (\n                    <span className=\"attribution\">{attribution}</span>\n                )}\n            </>\n        )\n    }\n\n    @computed private get tabs(): {\n        column: CoreColumn\n        title: string\n        label: TabItem\n    }[] {\n        return _.uniqBy(\n            this.columns.map((column) => {\n                let title = column.titlePublicOrDisplayName.title\n\n                // Historical and projected columns may have the same name,\n                // so we add \"(projection)\" to the title of projected columns\n                // to distinguish them\n                if (\n                    column.isProjection &&\n                    this.columns.some(\n                        (c) => title === c.titlePublicOrDisplayName.title\n                    )\n                )\n                    title += \" (projection)\"\n\n                const attribution = joinTitleFragments(\n                    column.titlePublicOrDisplayName.attributionShort,\n                    column.titlePublicOrDisplayName.titleVariant\n                )\n\n                return {\n                    title,\n                    column,\n                    label: {\n                        key: this.makeTabLabelString(title, attribution),\n                        element: this.makeTabLabelElement(title, attribution),\n                    },\n                }\n            }),\n            // deduplicate tabs by their label\n            (tab) => tab.label.key\n        )\n    }\n\n    @computed private get tabLabels(): TabItem[] {\n        return this.tabs.map(({ label }) => label)\n    }\n\n    @computed private get tabLabelWidths(): number[] {\n        return this.tabs.map(({ column }) => {\n            const title = `${column.titlePublicOrDisplayName.title}`\n            const fragments = joinTitleFragments(\n                column.titlePublicOrDisplayName.attributionShort,\n                column.titlePublicOrDisplayName.titleVariant\n            )\n            return measureTabWidth(title, fragments)\n        })\n    }\n\n    private renderSource({\n        column,\n        title,\n    }: {\n        column: CoreColumn\n        title?: string\n    }): React.ReactElement {\n        return (\n            <Source\n                title={title}\n                column={column}\n                editBaseUrl={this.editBaseUrl}\n                isEmbeddedInADataPage={\n                    this.manager.isEmbeddedInADataPage ?? false\n                }\n                openLinksInNewTab={this.manager.isInIFrame}\n            />\n        )\n    }\n\n    private renderTabs(): React.ReactElement {\n        // Display horizontally scrolling tabs on mobile\n        if (this.manager.isNarrow) {\n            return (\n                <Tabs\n                    className=\"sources-modal-tabs\"\n                    items={this.tabLabels}\n                    selectedKey={this.activeTabKey}\n                    onChange={this.setActiveTabKey}\n                    variant=\"scroll\"\n                />\n            )\n        }\n\n        // Show all tabs if there are 4 or fewer\n        if (this.tabs.length <= 4) {\n            return (\n                <Tabs\n                    className=\"sources-modal-tabs\"\n                    items={this.tabLabels}\n                    selectedKey={this.activeTabKey}\n                    onChange={this.setActiveTabKey}\n                    variant=\"scroll\"\n                />\n            )\n        }\n\n        // Find the subset of tabs that fit into a single line\n        const getVisibleLabels = (labels: TabItem[]): TabItem[] => {\n            // Maximum width available for tabs\n            const maxWidth = Math.min(\n                MAX_CONTENT_WIDTH,\n                this.modalBounds.width - 2 * this.modalPadding\n            )\n\n            // Hardcoded width of the \"More\" button\n            const moreButtonWidth = 74\n\n            const visibleLabels: TabItem[] = []\n            let currentWidth = moreButtonWidth\n            for (const [label, labelWidth] of R.zip(\n                labels,\n                this.tabLabelWidths\n            )) {\n                currentWidth += labelWidth + TAB_GAP\n                if (currentWidth > maxWidth) break\n                visibleLabels.push(label)\n            }\n\n            return visibleLabels\n        }\n\n        const visibleLabels = getVisibleLabels(this.tabLabels)\n\n        // No need for a dropdown if all tabs are visible\n        if (visibleLabels.length === this.tabLabels.length) {\n            return (\n                <Tabs\n                    className=\"sources-modal-tabs\"\n                    items={this.tabLabels}\n                    selectedKey={this.activeTabKey}\n                    onChange={this.setActiveTabKey}\n                    variant=\"scroll\"\n                />\n            )\n        }\n\n        // Ensure at least 3 tabs are visible\n        const numVisibleTabs = Math.max(3, visibleLabels.length)\n\n        return (\n            <TabsWithDropdown\n                className=\"sources-modal-tabs\"\n                items={this.tabLabels}\n                selectedKey={this.activeTabKey}\n                onChange={this.setActiveTabKey}\n                numVisibleTabs={numVisibleTabs}\n                portalContainer={this.container.current ?? undefined}\n            />\n        )\n    }\n\n    private renderMultipleSources(): React.ReactElement {\n        const activeTab = this.tabs.find(\n            (tab) => tab.label.key === this.activeTabKey\n        )\n\n        return (\n            <>\n                <p className=\"note-multiple-indicators\">\n                    This chart is composed of multiple indicators. Select an\n                    indicator for more information.\n                </p>\n                {this.renderTabs()}\n                {activeTab && this.renderSource(activeTab)}\n            </>\n        )\n    }\n\n    private renderNoSources(): React.ReactElement {\n        return (\n            <p className=\"note-no-sources\">\n                No source information is available for the data shown in this\n                chart.\n            </p>\n        )\n    }\n\n    private renderModalContent(): React.ReactElement | null {\n        // Charts fed with external data (e.g. via GrapherLoader.fromCsv) may\n        // have no columns with source information at all\n        if (this.tabs.length === 0) return this.renderNoSources()\n        return this.tabs.length === 1\n            ? this.renderSource({ column: this.tabs[0].column })\n            : this.renderMultipleSources()\n    }\n\n    @action.bound private onDismiss(): void {\n        this.manager.activeModal = undefined\n    }\n\n    override render(): React.ReactElement {\n        return (\n            <Modal\n                ariaLabel=\"Sources\"\n                grapherRef={this.manager.base}\n                bounds={this.modalBounds}\n                isHeightFixed={true}\n                onDismiss={this.onDismiss}\n            >\n                <div className=\"sources-modal-content\" ref={this.container}>\n                    {this.showStickyHeader ? (\n                        <OverlayHeader title=\"\" onDismiss={this.onDismiss} />\n                    ) : (\n                        <CloseButton\n                            className=\"close-button--top-right\"\n                            onClick={this.onDismiss}\n                        />\n                    )}\n                    <div\n                        className={cx(\"scrollable\", {\n                            \"scrollable--pad-top\": !this.showStickyHeader,\n                        })}\n                    >\n                        <div className=\"centered\">\n                            {this.manager.isReady ? (\n                                this.renderModalContent()\n                            ) : (\n                                <LoadingIndicator />\n                            )}\n                        </div>\n                    </div>\n                </div>\n            </Modal>\n        )\n    }\n}\n\ninterface SourceProps {\n    column: CoreColumn\n    title?: string\n    editBaseUrl?: string\n    isEmbeddedInADataPage?: boolean\n    openLinksInNewTab?: boolean\n}\n\n@observer\nexport class Source extends React.Component<SourceProps> {\n    constructor(props: SourceProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get column(): CoreColumn {\n        return this.props.column\n    }\n\n    @computed get def(): OwidColumnDef & { source?: OwidSource } {\n        return { ...this.column.def, source: this.column.source }\n    }\n\n    @computed private get citations(): { short: string; long: string } {\n        return getIndicatorCitations({\n            indicatorTitle: this.titleWithFragments,\n            origins: this.def.origins ?? [],\n            source: this.source,\n            attributions: getAttributionFragmentsFromVariable(this.def),\n            attributionShort: this.def.presentation?.attributionShort,\n            titleVariant: this.def.presentation?.titleVariant,\n            owidProcessingLevel: this.def.owidProcessingLevel,\n        })\n    }\n\n    @computed private get source(): OwidSource {\n        return this.def.source ?? {}\n    }\n\n    @computed private get titleWithFragments(): IndicatorTitleWithFragments {\n        return this.column.titlePublicOrDisplayName\n    }\n\n    @computed private get title(): string {\n        return this.props.title ?? this.titleWithFragments.title\n    }\n\n    @computed private get editUrl(): string | undefined {\n        if (!this.props.editBaseUrl) return undefined\n\n        // point user directly to the variable edit page if possible\n        if (this.def.owidVariableId) {\n            return `${this.props.editBaseUrl}/variables/${this.def.owidVariableId}`\n        }\n\n        // if that's not possible, point user to the dataset edit page\n        if (this.def.datasetId) {\n            return `${this.props.editBaseUrl}/datasets/${this.def.datasetId}`\n        }\n\n        // we can't link to an edit page for explorers that define the FASTT in TSV\n        return undefined\n    }\n\n    @computed get attributions(): string | undefined {\n        const attributionFragments = getAttributionFragmentsFromVariable(\n            this.def\n        )\n        if (attributionFragments.length === 0) return undefined\n        return formatAttributions(attributionFragments)\n    }\n\n    @computed get lastUpdated(): string | undefined {\n        return getLastUpdatedFromVariable(this.def)\n    }\n\n    @computed get nextUpdate(): string | undefined {\n        return getNextUpdateFromVariable(this.def)\n    }\n\n    @computed get unit(): string | undefined {\n        return this.column.unit\n    }\n\n    @computed private get datapageHasFAQSection(): boolean {\n        const faqCount = this.def.presentation?.faqs?.length ?? 0\n        return !!this.props.isEmbeddedInADataPage && faqCount > 0\n    }\n\n    @computed private get showDescriptions(): boolean {\n        return (\n            !!this.def.descriptionKey ||\n            !!this.def.descriptionFromProducer ||\n            !!this.source.additionalInfo\n        )\n    }\n\n    @computed private get sourcesForDisplay(): DisplaySource[] {\n        return prepareSourcesForDisplay(this.def)\n    }\n\n    @computed protected get sourcesSectionHeading(): string {\n        return \"The data of this indicator is based on the following sources:\"\n    }\n\n    @computed private get hideSourcesForDisplay(): boolean {\n        // the \"Continent\" variable curated by OWID is used in many charts but doesn't come with useful source information.\n        // that's why we hide the sources section for this indicator for now, but we might decide to show it in the future.\n        return (\n            !!this.def.owidVariableId &&\n            isContinentsVariableId(this.def.owidVariableId)\n        )\n    }\n\n    @computed private get descriptionBelowTitle(): string | undefined {\n        return this.def.descriptionShort || this.def.description\n    }\n\n    protected renderTitle(): React.ReactElement {\n        return (\n            <h2>\n                <span className=\"title\">{this.title}</span>{\" \"}\n                {(this.titleWithFragments.attributionShort ||\n                    this.titleWithFragments.titleVariant) && (\n                    <>\n                        <span className=\"title-fragments\">\n                            {joinTitleFragments(\n                                this.titleWithFragments.attributionShort,\n                                this.titleWithFragments.titleVariant\n                            )}\n                        </span>{\" \"}\n                    </>\n                )}\n                {this.editUrl && (\n                    <a\n                        href={this.editUrl}\n                        {...openLinkInNewTabAttrs(this.props.openLinksInNewTab)}\n                    >\n                        <FontAwesomeIcon icon={faPencilAlt} />\n                    </a>\n                )}\n            </h2>\n        )\n    }\n\n    override render(): React.ReactElement {\n        return (\n            <div className=\"source\">\n                {this.renderTitle()}\n                {this.descriptionBelowTitle && (\n                    <div className=\"description-below-title\">\n                        <SimpleMarkdownText\n                            text={this.descriptionBelowTitle}\n                            openLinksInNewTab={this.props.openLinksInNewTab}\n                        />\n                    </div>\n                )}\n                <SourcesKeyDataTable\n                    attribution={this.attributions}\n                    owidProcessingLevel={this.def.owidProcessingLevel}\n                    dateRange={this.def.timespan}\n                    lastUpdated={this.lastUpdated}\n                    nextUpdate={this.nextUpdate}\n                    unit={this.unit}\n                    link={this.source.link}\n                    unitConversionFactor={this.column.unitConversionFactor}\n                    isEmbeddedInADataPage={this.props.isEmbeddedInADataPage}\n                    openLinksInNewTab={this.props.openLinksInNewTab}\n                />\n                {this.showDescriptions && (\n                    <SourcesDescriptions\n                        descriptionShort={this.def.descriptionShort}\n                        descriptionKey={this.def.descriptionKey}\n                        hasFaqEntries={this.datapageHasFAQSection}\n                        descriptionFromProducer={\n                            this.def.descriptionFromProducer\n                        }\n                        attributionShort={\n                            this.def.presentation?.attributionShort\n                        }\n                        additionalInfo={this.source.additionalInfo}\n                        isEmbeddedInADataPage={this.props.isEmbeddedInADataPage}\n                        openLinksInNewTab={this.props.openLinksInNewTab}\n                    />\n                )}\n                {!this.hideSourcesForDisplay &&\n                    this.sourcesForDisplay &&\n                    this.sourcesForDisplay.length > 0 && (\n                        <>\n                            <h3 className=\"heading\">\n                                {this.sourcesSectionHeading}\n                            </h3>\n                            <IndicatorSources\n                                sources={this.sourcesForDisplay}\n                                isEmbeddedInADataPage={\n                                    this.props.isEmbeddedInADataPage\n                                }\n                                openLinksInNewTab={this.props.openLinksInNewTab}\n                            />\n                        </>\n                    )}\n                <h3 className=\"heading heading--tight\">\n                    How we process data at Our World in Data:\n                </h3>\n                <IndicatorProcessing\n                    descriptionProcessing={this.def.descriptionProcessing}\n                    openLinksInNewTab={this.props.openLinksInNewTab}\n                />\n                <h3 className=\"heading heading--tight\">\n                    How to cite this data:\n                </h3>\n                <DataCitation\n                    citationShort={this.citations.short}\n                    citationLong={this.citations.long}\n                />\n            </div>\n        )\n    }\n}\n\nconst measureTabWidth = (label: string, secondary?: string): number => {\n    const getWidth = (text: string) =>\n        Bounds.forText(text, { fontSize: TAB_FONT_SIZE }).width\n\n    const labelWidth = getWidth(label)\n    const secondaryTextWidth = secondary\n        ? getWidth(secondary) + TAB_TITLE_SPACING\n        : 0\n    const padding = 2 * TAB_PADDING\n    const borderWidth = 2\n\n    return labelWidth + secondaryTextWidth + padding + borderWidth\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\n\nexport interface Command {\n    combo: string\n    fn: () => void\n    title?: string\n    category?: string\n}\n\ninterface CommandPaletteProps {\n    commands: Command[]\n}\n\nexport function CommandPalette({\n    commands,\n}: CommandPaletteProps): React.ReactElement {\n    const filteredCommands = commands.filter(\n        (command) => command.title && command.category\n    )\n    const sortedCommands = _.sortBy(filteredCommands, \"category\").map(\n        (command, index, sorted) => {\n            // Show the category heading above the first command of each category\n            const cat =\n                command.category !== sorted[index - 1]?.category ? (\n                    <div className=\"commandCategory\">{command.category}</div>\n                ) : undefined\n            return (\n                <div key={`command${index}`}>\n                    {cat}\n                    <div className=\"commandOption\">\n                        <span className=\"commandCombo\">{command.combo}</span>\n                        <a onClick={command.fn}>{command.title}</a>\n                    </div>\n                </div>\n            )\n        }\n    )\n\n    return (\n        <div className=\"CommandPalette\">\n            <div className=\"paletteTitle\">Keyboard Shortcuts</div>\n            {sortedCommands}\n        </div>\n    )\n}\n","import { observer } from \"mobx-react\"\nimport * as React from \"react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { Bounds, Url } from \"@ourworldindata/utils\"\nimport { Modal } from \"./Modal\"\nimport {\n    Checkbox,\n    CodeSnippet,\n    OverlayHeader,\n} from \"@ourworldindata/components\"\nimport { DEFAULT_GRAPHER_BOUNDS, GrapherModal } from \"../core/GrapherConstants\"\n\nexport interface EmbedModalManager {\n    embedUrl?: string\n    embedArchivedUrl?: string\n    activeModal?: GrapherModal\n    canHideExternalControlsInEmbed: boolean\n    hideExternalControlsInEmbedUrl: boolean\n    setHideExternalControlsInEmbedUrl: (value: boolean) => void\n    frameBounds?: Bounds\n    base: React.RefObject<HTMLDivElement | null>\n    recommendedIframeEmbedHeight?: number\n}\n\ninterface EmbedModalProps {\n    manager: EmbedModalManager\n}\n\ninterface EmbedOptions {\n    title: string\n    description: React.ReactElement\n    url: string\n}\n\n@observer\nexport class EmbedModal extends React.Component<EmbedModalProps> {\n    constructor(props: EmbedModalProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get manager(): EmbedModalManager {\n        return this.props.manager\n    }\n\n    @computed private get frameBounds(): Bounds {\n        return this.manager.frameBounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get modalBounds(): Bounds {\n        const maxWidth = 940\n        const padWidth = Math.max(16, (this.frameBounds.width - maxWidth) / 2)\n        return this.frameBounds.padHeight(16).padWidth(padWidth)\n    }\n\n    @computed private get embedOptions(): EmbedOptions[] {\n        const { embedUrl, embedArchivedUrl } = this.manager\n\n        const opts: EmbedOptions[] = []\n\n        // We only check origins (domain + port) because:\n        // - Query params are not relevant\n        // - We use the /latest/ path prefix as an alias for the latest version\n        //   of the chart, which is not the same as the canonical URL\n        // - Archive and live versions live on a different domain\n        const areEmbedAndArchivedOriginsSame =\n            Url.fromURL(this.manager.embedUrl ?? \"\").origin ===\n            Url.fromURL(this.manager.embedArchivedUrl ?? \"\").origin\n\n        if (embedUrl && !areEmbedAndArchivedOriginsSame) {\n            opts.push({\n                title: \"Chart with data updates\",\n                description: (\n                    <span>\n                        To embed a version of this chart that will{\" \"}\n                        <strong>update</strong> when we update the data on our\n                        site, paste this code into an HTML page:\n                    </span>\n                ),\n                url: embedUrl,\n            })\n        }\n        if (embedArchivedUrl) {\n            opts.push({\n                title: \"Archived chart without data updates\",\n                description: (\n                    <span>\n                        To embed this specific version of the chart that will{\" \"}\n                        <strong>not update</strong> when we update the data on\n                        our site, paste this code into an HTML page:\n                    </span>\n                ),\n                url: embedArchivedUrl,\n            })\n        }\n        return opts\n    }\n\n    @computed private get iframeEmbedHeight(): number {\n        // The base iframe embed height is 600px. Explorers and multi-dims can\n        // override this when their external controls are visible, because those\n        // controls live inside the iframe and need extra vertical space.\n        return this.manager.hideExternalControlsInEmbedUrl\n            ? 600\n            : (this.manager.recommendedIframeEmbedHeight ?? 600)\n    }\n\n    private codeSnippetForUrl(url: string): string {\n        return `<iframe src=\"${url}\" loading=\"lazy\" style=\"width: 100%; height: ${this.iframeEmbedHeight}px; border: 0px none;\" allow=\"web-share; clipboard-write\"></iframe>`\n    }\n\n    @action.bound private onDismiss(): void {\n        this.manager.activeModal = undefined\n    }\n\n    override render() {\n        const { embedOptions } = this\n\n        if (!embedOptions.length) return null\n        return (\n            <Modal\n                ariaLabel=\"Embed\"\n                grapherRef={this.manager.base}\n                bounds={this.modalBounds}\n                alignVertical=\"bottom\"\n                onDismiss={this.onDismiss}\n            >\n                <div\n                    className=\"embed-modal-content\"\n                    style={{ maxHeight: this.modalBounds.height }}\n                >\n                    <OverlayHeader title=\"Embed\" onDismiss={this.onDismiss} />\n                    <div className=\"scrollable\">\n                        <div className=\"embed-modal--options\">\n                            {embedOptions.map((option) => (\n                                <div\n                                    key={option.title}\n                                    className=\"embed-modal--option\"\n                                >\n                                    <h3 className=\"grapher_body-2-semibold embed-modal--option-title\">\n                                        {option.title}\n                                    </h3>\n                                    <p className=\"grapher_label-1-medium embed-modal--option-description\">\n                                        {option.description}\n                                    </p>\n                                    <CodeSnippet\n                                        code={this.codeSnippetForUrl(\n                                            option.url\n                                        )}\n                                    />\n                                </div>\n                            ))}\n                        </div>\n                        {this.manager.canHideExternalControlsInEmbed && (\n                            <Checkbox\n                                className=\"embed-modal-hide-controls\"\n                                label=\"Hide controls\"\n                                checked={\n                                    this.manager.hideExternalControlsInEmbedUrl\n                                }\n                                onChange={(event) =>\n                                    this.manager.setHideExternalControlsInEmbedUrl(\n                                        event.target.checked\n                                    )\n                                }\n                            />\n                        )}\n                    </div>\n                </div>\n            </Modal>\n        )\n    }\n}\n","//#region src/tinykeys.ts\n/**\n* These are the modifier keys that change the meaning of keybindings.\n*\n* Note: Ignoring \"AltGraph\" because it is covered by the others.\n*/\nlet KEYBINDING_MODIFIER_KEYS = [\n\t\"Shift\",\n\t\"Meta\",\n\t\"Alt\",\n\t\"Control\"\n];\n/**\n* Keybinding sequences should timeout if individual key presses are more than\n* 1s apart by default.\n*/\nlet DEFAULT_TIMEOUT = 1e3;\n/**\n* Keybinding sequences should bind to this event by default.\n*/\nlet DEFAULT_EVENT = \"keydown\";\n/**\n* Platform detection code.\n* @see https://github.com/jamiebuilds/tinykeys/issues/184\n*/\nlet PLATFORM = typeof navigator === \"object\" ? navigator.platform : \"\";\n/**\n* An alias for creating platform-specific keybinding aliases.\n*/\nlet MOD = /Mac|iPod|iPhone|iPad/.test(PLATFORM) ? \"Meta\" : \"Control\";\n/**\n* Meaning of `AltGraph`, from MDN:\n* - Windows: Both Alt and Ctrl keys are pressed, or AltGr key is pressed\n* - Mac: ⌥ Option key pressed\n* - Linux: Level 3 Shift key (or Level 5 Shift key) pressed\n* - Android: Not supported\n* @see https://github.com/jamiebuilds/tinykeys/issues/185\n*/\nlet ALT_GRAPH_ALIASES = PLATFORM === \"Win32\" ? [\"Control\", \"Alt\"] : [\"Alt\"];\n/**\n* Ensure and stop any event that isn't a full keyboard event.\n* Autocomplete option navigation and selection would fire an Event,\n* instead of the expected KeyboardEvent\n*/\nfunction isKeyboardEvent(event) {\n\treturn !!(event.key && event.code && event.getModifierState);\n}\n/**\n* Ignores keyboard events from contenteditable and form elements unless they\n* are the current target.\n*/\nfunction defaultKeybindingsHandlerIgnore(event) {\n\tlet target = event.target;\n\treturn event.repeat || event.isComposing || target !== event.currentTarget && target.matches(\"[contenteditable],input,select,textarea\");\n}\n/**\n* There's a bug in Chrome that causes event.getModifierState not to exist on\n* KeyboardEvent's for F1/F2/etc keys.\n*/\nfunction getModifierState(event, mod) {\n\treturn typeof event.getModifierState === \"function\" ? event.getModifierState(mod) || ALT_GRAPH_ALIASES.includes(mod) && event.getModifierState(\"AltGraph\") : false;\n}\n/**\n* Parses a keybinding string into its parts.\n*\n* ```\n* grammar    = `<sequence>`\n* <sequence> = `<press> <press> <press> ...`\n* <press>    = `<key>` or `<mods>+<key>`\n* <mods>     = `<mod>+<mod>+...`\n* <mod>      = `<modifier>` (required) or `[<modifier>]` (optional)\n* <key>      = `<KeyboardEvent.key>` or `<KeyboardEvent.code>` (case-insensitive)\n* <key>      = `(<regex>)` -> `/^(?:<regex>)$/iy` (case-insensitive)\n* ```\n*/\nfunction parseKeybinding(str) {\n\treturn str.trim().split(\" \").map((press) => {\n\t\tlet parts = press.split(/(?<=\\w|\\])\\+/);\n\t\tlet last = parts.pop();\n\t\tlet regex = last.match(/^\\((.+)\\)$/);\n\t\tlet key = regex ? new RegExp(`^(?:${regex[1]})$`, \"iv\") : last;\n\t\tlet requiredModifiers = [];\n\t\tlet optionalModifiers = [];\n\t\tfor (const part of parts) {\n\t\t\tlet optional = part.match(/^\\[(.*)\\]$/);\n\t\t\tlet mod = optional?.[1] ?? part;\n\t\t\tmod = mod === \"$mod\" ? MOD : mod;\n\t\t\tif (optional) optionalModifiers.push(mod);\n\t\t\telse requiredModifiers.push(mod);\n\t\t}\n\t\treturn [\n\t\t\trequiredModifiers,\n\t\t\toptionalModifiers,\n\t\t\tkey\n\t\t];\n\t});\n}\n/**\n* This tells us if a single keyboard event matches a single keybinding press.\n*/\nfunction matchKeybindingPress(event, [requiredModifiers, optionalModifiers, key]) {\n\tconst hasAltGraph = requiredModifiers.includes(\"AltGraph\");\n\treturn !((key instanceof RegExp ? !(key.test(event.key) || key.test(event.code)) : key.toUpperCase() !== event.key.toUpperCase() && key !== event.code) || requiredModifiers.find((mod) => {\n\t\treturn !getModifierState(event, mod);\n\t}) || KEYBINDING_MODIFIER_KEYS.find((mod) => {\n\t\treturn !requiredModifiers.includes(mod) && !optionalModifiers.includes(mod) && key !== mod && getModifierState(event, mod) && !(hasAltGraph && ALT_GRAPH_ALIASES.includes(mod));\n\t}));\n}\n/**\n* Creates an event listener for handling keybindings.\n*\n* @example\n* ```js\n* import { createKeybindingsHandler } from \"../src/keybindings\"\n*\n* let handler = createKeybindingsHandler({\n* \t\"Shift+d\": () => {\n* \t\talert(\"The 'Shift' and 'd' keys were pressed at the same time\")\n* \t},\n* \t\"y e e t\": () => {\n* \t\talert(\"The keys 'y', 'e', 'e', and 't' were pressed in order\")\n* \t},\n* \t\"$mod+d\": () => {\n* \t\talert(\"Either 'Control+d' or 'Meta+d' were pressed\")\n* \t},\n* })\n*\n* window.addEventListener(\"keydown\", handler)\n* ```\n*/\nfunction createKeybindingsHandler(keybindingsMap, options = {}) {\n\tlet timeout = options.timeout ?? DEFAULT_TIMEOUT;\n\tlet ignore = options.ignore ?? defaultKeybindingsHandlerIgnore;\n\tlet keybindings = Object.keys(keybindingsMap).map((input) => {\n\t\treturn [\n\t\t\tinput,\n\t\t\tparseKeybinding(input),\n\t\t\tkeybindingsMap[input]\n\t\t];\n\t});\n\tlet pending = /* @__PURE__ */ new Map();\n\tlet timer = null;\n\treturn (event) => {\n\t\tif (!isKeyboardEvent(event) || ignore(event)) return;\n\t\tlet conflicts = [];\n\t\tfor (let [input, sequence, handler] of keybindings) {\n\t\t\tlet prev = pending.get(input);\n\t\t\tlet [current, ...rest] = prev ? prev : sequence;\n\t\t\tif (!matchKeybindingPress(event, current)) {\n\t\t\t\tif (!getModifierState(event, event.key)) pending.delete(input);\n\t\t\t} else if (rest.length > 0) {\n\t\t\t\tpending.set(input, rest);\n\t\t\t\tconflicts.push(input);\n\t\t\t} else {\n\t\t\t\tpending.delete(input);\n\t\t\t\tif (conflicts.length) console.warn(`tinykeys: Conflict found, \"${input}\" did not fire, waiting for:`, conflicts);\n\t\t\t\telse {\n\t\t\t\t\thandler(event);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (timer) clearTimeout(timer);\n\t\ttimer = setTimeout(() => pending.clear(), timeout);\n\t};\n}\n/**\n* Subscribes to keybindings.\n*\n* Returns an unsubscribe method.\n*\n* @example\n* ```js\n* import { tinykeys } from \"../src/tinykeys\"\n*\n* tinykeys(window, {\n* \t\"Shift+d\": () => {\n* \t\talert(\"The 'Shift' and 'd' keys were pressed at the same time\")\n* \t},\n* \t\"y e e t\": () => {\n* \t\talert(\"The keys 'y', 'e', 'e', and 't' were pressed in order\")\n* \t},\n* \t\"$mod+d\": () => {\n* \t\talert(\"Either 'Control+d' or 'Meta+d' were pressed\")\n* \t},\n* })\n* ```\n*/\nfunction tinykeys(target, keybindingMap, options = {}) {\n\tlet event = options.event ?? DEFAULT_EVENT;\n\tlet onKeyEvent = createKeybindingsHandler(keybindingMap, options);\n\ttarget.addEventListener(event, onKeyEvent, options.capture);\n\treturn () => {\n\t\ttarget.removeEventListener(event, onKeyEvent, options.capture);\n\t};\n}\n//#endregion\nexport { createKeybindingsHandler, defaultKeybindingsHandlerIgnore, matchKeybindingPress, parseKeybinding, tinykeys };\n\n//# sourceMappingURL=tinykeys.mjs.map","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport { OwidTable } from \"@ourworldindata/core-table\"\nimport { trimObject } from \"@ourworldindata/utils\"\nimport {\n    ColumnTypeNames,\n    isIndicatorDimension,\n    type ColumnSlug,\n    type OwidChartDimensionInterface,\n    type OwidColumnDef,\n    type OwidVariableDisplayConfigInterface,\n} from \"@ourworldindata/types\"\n\nexport interface ColumnDisplayOverride {\n    columnSlug: ColumnSlug\n    display?: OwidVariableDisplayConfigInterface\n}\n\ntype DisplayBySlug = Map<ColumnSlug, OwidVariableDisplayConfigInterface>\n\nexport const applyDimensionDisplayAndConversionFactor = (\n    table: OwidTable,\n    dimensions: OwidChartDimensionInterface[]\n): OwidTable =>\n    applyDisplayAndConversionFactor(\n        table,\n        dimensions.flatMap((dimension) =>\n            !isIndicatorDimension(dimension)\n                ? [{ columnSlug: dimension.slug, display: dimension.display }]\n                : []\n        )\n    )\n\nexport const applyDisplayAndConversionFactor = (\n    table: OwidTable,\n    overrides: ColumnDisplayOverride[]\n): OwidTable => {\n    const displayEntries = R.pipe(\n        overrides,\n        R.uniqueBy((override) => override.columnSlug),\n        R.filter(({ columnSlug }) => table.has(columnSlug)),\n        R.map(\n            ({ columnSlug, display }) =>\n                [columnSlug, trimObject(display ?? {})] as const\n        ),\n        R.filter(([, display]) => !R.isEmpty(display))\n    )\n    const displayBySlug = new Map(displayEntries)\n    if (displayBySlug.size === 0) return table\n\n    return scaleByConversionFactor(\n        mergeDisplayIntoDefs(table, displayBySlug),\n        displayBySlug\n    )\n}\n\nconst mergeDisplayIntoDefs = (\n    table: OwidTable,\n    displayBySlug: DisplayBySlug\n): OwidTable => {\n    return table.updateDefs((def): OwidColumnDef => {\n        const display = displayBySlug.get(def.slug)\n        if (!display) return def\n\n        const mergedDef: OwidColumnDef = {\n            ...def,\n            display: { ...def.display, ...display },\n        }\n        if (display.color) mergedDef.color = display.color\n\n        if (\n            def.type === ColumnTypeNames.Integer &&\n            display.conversionFactor !== undefined &&\n            !_.isInteger(display.conversionFactor)\n        )\n            mergedDef.type = ColumnTypeNames.Numeric\n\n        return mergedDef\n    })\n}\n\nconst scaleByConversionFactor = (\n    table: OwidTable,\n    displayBySlug: DisplayBySlug\n): OwidTable => {\n    let scaledTable = table\n    for (const [slug, { conversionFactor }] of displayBySlug) {\n        if (conversionFactor === undefined || conversionFactor === 1) continue\n        scaledTable = scaledTable.replaceCells([slug], (value) =>\n            _.isNumber(value) ? value * conversionFactor : value\n        )\n    }\n    return scaledTable\n}\n","// todo: Remove this file when we've migrated OWID data and OWID charts to next version\n\nimport * as _ from \"lodash-es\"\nimport {\n    ColumnTypeNames,\n    CoreColumnDef,\n    StandardOwidColumnDefs,\n    OwidTableSlugs,\n    OwidColumnDef,\n    OwidVariableDimensions,\n    ErrorValue,\n    IndicatorDimensionInterface,\n    OwidChartDimensionInterface,\n    isIndicatorDimension,\n    EntityName,\n    TimeInterval,\n    SelectedEntityColors,\n} from \"@ourworldindata/types\"\nimport {\n    OwidTable,\n    ErrorValueTypes,\n    makeKeyFn,\n    makeAnnotationsSlug,\n} from \"@ourworldindata/core-table\"\nimport {\n    diffDatesInDays,\n    epochDate,\n    getYearFromISOStringAndDayOffset,\n    intersection,\n    trimObject,\n    OwidEntityKey,\n    MultipleOwidVariableDataDimensionsMap,\n    OwidVariableWithSource,\n    OwidVariableMixedData,\n    OwidVariableWithSourceAndDimension,\n    ColumnSlug,\n    EPOCH_DATE,\n    OwidVariableType,\n    getTimeInterval,\n    isSubYearly,\n    findFinestCommonTimeInterval,\n    snapToIntervalStart,\n    dayjs,\n} from \"@ourworldindata/utils\"\nimport { isContinentsVariableId } from \"./GrapherConstants\"\nimport * as R from \"remeda\"\nimport { getIndicatorColumnSlug } from \"../chart/ChartDimension.js\"\nimport {\n    applyDisplayAndConversionFactor,\n    type ColumnDisplayOverride,\n} from \"./applyDisplayAndConversionFactor.js\"\n\nexport const legacyToOwidTableAndDimensions = (\n    json: MultipleOwidVariableDataDimensionsMap,\n    dimensions: OwidChartDimensionInterface[],\n    selectedEntityColors: SelectedEntityColors | undefined\n): OwidTable => {\n    // Entity meta map\n\n    const entityMeta = [...json.values()].flatMap(\n        (value) => value.metadata.dimensions.entities.values\n    )\n    const entityMetaById: OwidEntityKey = Object.fromEntries(\n        entityMeta.map((entity) => [entity.id.toString(), entity])\n    )\n\n    // Base column defs, shared by all variable tables\n\n    const baseColumnDefs: Map<ColumnSlug, CoreColumnDef> = new Map()\n    StandardOwidColumnDefs.forEach((def) => {\n        baseColumnDefs.set(def.slug, def)\n    })\n\n    // We need to create a column for each unique [variable, targetTime] pair. So there can be\n    // multiple columns for a single variable.\n    const indicatorDimensions = dimensions.filter(isIndicatorDimension)\n    const dimensionColumns = _.uniqBy(\n        indicatorDimensions,\n        getIndicatorColumnSlug\n    )\n\n    const variableTablesToJoinByYear: OwidTable[] = []\n    const variableTablesToJoinByDay: OwidTable[] = []\n    const variableTablesWithYearToJoinByEntityOnly: OwidTable[] = []\n    for (const dimension of dimensionColumns) {\n        const variable = json.get(dimension.variableId)\n\n        // TODO: this shouldn't happen but it does sometimes\n        // when adding dimensions in the chart editor\n        if (!variable) continue\n\n        // Copy the base columnDef\n        const columnDefs = new Map(baseColumnDefs)\n\n        // Time column\n        const timeColumnDef = timeColumnDefFromOwidVariable(variable.metadata)\n        columnDefs.set(timeColumnDef.slug, timeColumnDef)\n\n        // Value column\n        const valueColumnDef = columnDefFromOwidVariable(variable.metadata)\n        valueColumnDef.slug = getIndicatorColumnSlug(dimension)\n        // Because database columns can contain mixed types, we want to avoid\n        // parsing for Grapher data until we fix that.\n        valueColumnDef.skipParsing = true\n        valueColumnDef.display = trimObject(valueColumnDef.display)\n        if (dimension.targetYear !== undefined)\n            valueColumnDef.targetTime = dimension.targetYear\n        columnDefs.set(valueColumnDef.slug, valueColumnDef)\n\n        // Annotations column\n        const [annotationMap, annotationColumnDef] =\n            annotationMapAndDefFromOwidVariable(variable.metadata)\n\n        // Column values\n\n        const times = timeColumnValuesFromOwidVariable(\n            variable.metadata,\n            variable.data\n        )\n        const entityIds = variable.data.entities ?? []\n        const entityNames = entityIds.map(\n            // if entityMetaById[id] does not exist, then we don't have entity\n            // from variable metadata in MySQL. This can happen because we take\n            // data from S3 and metadata from MySQL. After we unify it, it should\n            // no longer be a problem\n            (id) => entityMetaById[id]?.name ?? id.toString()\n        )\n        // see comment above about entityMetaById[id]\n        const entityCodes = entityIds.map((id) => entityMetaById[id]?.code)\n\n        const columnStore: { [key: string]: any[] } = {\n            [OwidTableSlugs.EntityId]: entityIds,\n            [OwidTableSlugs.EntityCode]: entityCodes,\n            [OwidTableSlugs.EntityName]: entityNames,\n            [timeColumnDef.slug]: times,\n            [valueColumnDef.slug]: variable.data.values || [],\n        }\n\n        if (annotationColumnDef) {\n            columnStore[annotationColumnDef.slug] = entityNames.map(\n                (entityName) => annotationMap!.get(entityName)\n            )\n            columnDefs.set(annotationColumnDef.slug, annotationColumnDef)\n        }\n        // Build the tables\n\n        let variableTable = new OwidTable(\n            columnStore,\n            Array.from(columnDefs.values())\n        )\n\n        // Scale before joining so values repeated across joined rows are only converted once.\n        variableTable = applyDisplayAndConversionFactor(variableTable, [\n            getIndicatorDisplayOverride(dimension, json),\n        ])\n\n        // If there is a targetTime set on the dimension, we need to perform the join on the\n        // entities columns only, excluding any time columns.\n        // We do this by dropping the column. We interpolate before which adds an originalTime\n        // column which can be used to recover the time.\n        const targetTime = dimension.targetYear\n        if (_.isNumber(targetTime)) {\n            variableTable = variableTable\n                // interpolateColumnWithTolerance() won't handle injecting times beyond the current\n                // allTimes. So if targetYear is 2018, and we have data up to 2017, the\n                // interpolation won't add the 2018 rows (unless we apply the interpolation after\n                // the big join).\n                // This is why we use filterByTargetTimes() which handles that case.\n                .filterByTargetTimes(\n                    [targetTime],\n                    variableTable.get(valueColumnDef.slug).tolerance\n                )\n                // Interpolate with 0 to add originalTimes column\n                .interpolateColumnWithTolerance(valueColumnDef.slug, {\n                    toleranceOverride: 0,\n                })\n                .dropColumns([timeColumnDef.slug])\n            // We keep variables that have a targetTime set in a special bucket and will join them\n            // on entity only (disregarding the year since we already filtered all other years out for\n            // those variables)\n            variableTablesWithYearToJoinByEntityOnly.push(variableTable)\n        } else if (isSubYearly(getTimeInterval(variable.metadata.display)))\n            variableTablesToJoinByDay.push(variableTable)\n        else variableTablesToJoinByYear.push(variableTable)\n    }\n\n    // If we only had years then all we would need to do is a single fullJoinTables call and\n    // we'd be done with it. But since we also have days this is a bit trickier. The\n    // basic approach is to say that if we have day variables then we should join those internally\n    // on day+entity first and day+entity becomes the primary index for our final table.\n    // We then join this merged days table with all the year based variables.\n    // The multi table join iterates over all the unique index values (day+entity).\n    // To join this with years we derive the year from the day. The fullJoinTables then uses a number\n    // of fallbacks when trying to find matching rows in the various tables: we first try to join by day+entity,\n    // then by year+entity and finally entity only.\n    // This last join by entity only is important so that variables that don't have values for years\n    // that come up in the day+entity index we still retain the values. E.g. our continents table\n    // has values for all countries but only for the year 2015. If we join that with covid era days\n    // we still want to retain the continents so we have the fallback to entity only (this was also\n    // the only behaviour prior to July 2022). Remember that tolerance will only be applied much later -\n    // here we are only concerned with merging multiple variables into an inputTable that retains information.\n    // Another approach would be to convert years into days when we have days - then we could simplify the fallback\n    // join key logic described above.\n    // Another caveat is that by switching to day+entity as the primary index that we use to join we can drop some entities.\n    // This happens e.g. with Antarctica if the continents table is used. Continents contains an entry for the entity Antarctica for 2015\n    // that maps it (and 3 other territories) to the Antarctica continent. If the days variables don't have values for any of the\n    // Antarctica entities then they will not be enumerated for the final join table and thus they will be dropped from the final table.\n    // This is maybe counter to what you would expect from a full join but is simply an artifact of making days+entities the primary\n    // index and not backporting years to days. We might want to revisit this in the future and/or also apply tolerance already\n    // at this level here.\n\n    // Merge all day based variables together (returns an empty table if there are none)\n    const variablesJoinedByDay = fullJoinTables(variableTablesToJoinByDay, [\n        OwidTableSlugs.Day,\n        OwidTableSlugs.EntityId,\n    ])\n\n    let joinedVariablesTable: OwidTable\n    // If we have both day and year based variables we need to do some special logic as described above\n    if (\n        variableTablesToJoinByYear.length > 0 &&\n        variableTablesToJoinByDay.length > 0\n    ) {\n        // Derive the year from the day column and add it to the joined days table\n        const daysColumn = variablesJoinedByDay.getColumns([\n            OwidTableSlugs.Day,\n        ])[0]\n        const getYearFromISOStringMemoized = _.memoize((dayValue: number) =>\n            getYearFromISOStringAndDayOffset(EPOCH_DATE, dayValue)\n        )\n        const yearsForDaysValues = daysColumn.values.map((dayValue) =>\n            getYearFromISOStringMemoized(dayValue as number)\n        )\n\n        const newYearColumn = {\n            ...daysColumn,\n            slug: OwidTableSlugs.Year,\n            name: OwidTableSlugs.Year,\n            values: yearsForDaysValues,\n        } as OwidColumnDef\n        const variablesJoinedByDayWithYearFilled =\n            variablesJoinedByDay.appendColumns([newYearColumn])\n\n        // Now join the already merged days table with all the years. It is important\n        // to not join the years together into one table already before so that each\n        // table lookup for fallback values is looked at individually.\n        // See the longer comment above for the idea behind the fallback cascade here of\n        // trying to merge first by day+entity, then year+entity and finally entity only\n        joinedVariablesTable = fullJoinTables(\n            [variablesJoinedByDayWithYearFilled, ...variableTablesToJoinByYear],\n            [OwidTableSlugs.Day, OwidTableSlugs.EntityId],\n            [\n                [OwidTableSlugs.Year, OwidTableSlugs.EntityId],\n                [OwidTableSlugs.EntityId],\n            ]\n        )\n        // If we have scatter/marimekko variables that had a targetTime set\n        // then these are now joined in by matching entity only\n        if (variableTablesWithYearToJoinByEntityOnly.length > 0)\n            joinedVariablesTable = fullJoinTables(\n                [\n                    joinedVariablesTable,\n                    ...variableTablesWithYearToJoinByEntityOnly,\n                ],\n                [OwidTableSlugs.Day, OwidTableSlugs.EntityId],\n                [[OwidTableSlugs.EntityId]]\n            )\n    } else if (variableTablesToJoinByYear.length > 0) {\n        // If we only have year based variables then life is easy and we just join\n        // those together without any special cases\n        joinedVariablesTable = fullJoinTables(variableTablesToJoinByYear, [\n            OwidTableSlugs.Year,\n            OwidTableSlugs.EntityId,\n        ])\n\n        // If we have scatter/marimekko variables that had a targetTime set\n        // then these are now joined in by matching entity only\n        if (variableTablesWithYearToJoinByEntityOnly.length > 0)\n            joinedVariablesTable = fullJoinTables(\n                [\n                    joinedVariablesTable,\n                    ...variableTablesWithYearToJoinByEntityOnly,\n                ],\n                [OwidTableSlugs.Year, OwidTableSlugs.EntityId],\n                [[OwidTableSlugs.EntityId]]\n            )\n    } else {\n        // If we only have day variables life is also easy but this case is rare\n        joinedVariablesTable = variablesJoinedByDay\n\n        // If we have scatter/marimekko variables that had a targetTime set\n        // then these are now joined in by matching entity only\n        if (variableTablesWithYearToJoinByEntityOnly.length > 0)\n            joinedVariablesTable = fullJoinTables(\n                [\n                    joinedVariablesTable,\n                    ...variableTablesWithYearToJoinByEntityOnly,\n                ],\n                [OwidTableSlugs.Day, OwidTableSlugs.EntityId],\n                [[OwidTableSlugs.EntityId]]\n            )\n    }\n\n    // A bucket can hold several intervals (e.g. a daily and a monthly indicator\n    // both live in the day bucket), but the joined table has a single time\n    // column, which should be tagged with the finest of them\n    joinedVariablesTable = withFinestTimeColumnInterval(\n        joinedVariablesTable,\n        variableTablesToJoinByDay,\n        OwidTableSlugs.Day\n    )\n    joinedVariablesTable = withFinestTimeColumnInterval(\n        joinedVariablesTable,\n        variableTablesToJoinByYear,\n        OwidTableSlugs.Year\n    )\n\n    // Inject a common \"time\" column that is used as the main time column for the table\n    // e.g. for the timeline.\n    for (const dayOrYearSlug of [OwidTableSlugs.Day, OwidTableSlugs.Year]) {\n        if (joinedVariablesTable.columnSlugs.includes(dayOrYearSlug)) {\n            joinedVariablesTable = joinedVariablesTable.duplicateColumn(\n                dayOrYearSlug,\n                { slug: OwidTableSlugs.Time, name: OwidTableSlugs.Time }\n            )\n            // Do not inject multiple columns, terminate after one is successful\n            break\n        }\n    }\n\n    return appendSelectedEntityColors(\n        joinedVariablesTable,\n        selectedEntityColors\n    )\n}\n\n/** Adds the entity color column that applies a config's `selectedEntityColors` */\nexport const appendSelectedEntityColors = (\n    table: OwidTable,\n    selectedEntityColors: SelectedEntityColors | undefined\n): OwidTable => {\n    if (_.isEmpty(selectedEntityColors)) return table\n\n    const valueFn = (\n        entityName: EntityName | undefined\n    ): string | ErrorValue => {\n        if (!entityName) return ErrorValueTypes.UndefinedButShouldBeString\n        return (\n            selectedEntityColors?.[entityName] ??\n            ErrorValueTypes.UndefinedButShouldBeString\n        )\n    }\n\n    return table.appendColumns([\n        {\n            slug: OwidTableSlugs.EntityColor,\n            name: OwidTableSlugs.EntityColor,\n            type: ColumnTypeNames.Color,\n            values: table.entityNameColumn.valuesIncludingErrorValues.map(\n                (entityName) => valueFn(entityName as EntityName)\n            ),\n        },\n    ])\n}\n\nconst getIndicatorDisplayOverride = (\n    dimension: IndicatorDimensionInterface,\n    json: MultipleOwidVariableDataDimensionsMap\n): ColumnDisplayOverride => ({\n    columnSlug: getIndicatorColumnSlug(dimension),\n    display: {\n        conversionFactor: json.get(dimension.variableId)?.metadata.display\n            ?.conversionFactor,\n        ...trimObject(dimension.display ?? {}),\n    },\n})\n\nconst fullJoinTables = (\n    tables: OwidTable[],\n    indexColumnNames: OwidTableSlugs[],\n    mergeFallbackLookupColumns?: OwidTableSlugs[][]\n): OwidTable => {\n    // This function merges a number of OwidTables together using a given list of columns\n    // to be used as the merge key. The merge key columns are used to construct a full set\n    // of index values from the various tables - all tables are enumerated, we create\n    // a merged string value from the index column values for each row and then we create\n    // a set from all these string values.\n    // Note that not every table has to have values for all columns - not even all the index\n    // columns have to exist on all tables (the index columns have to exist on the first table though)!\n    // The reason for this and how this can possibly work\n    // is that we also have a list of fallback merge columns. This is required so we can handle\n    // not just the easy case where we have year+entity for every table to be merged (which in our\n    // data model is by far the most common default), but also handle cases where we merge year and\n    // day based variables together. For this latter case we need to still construct the set of index\n    // values for the final table, but then when we try to look up values in the various tables to\n    // merge together we will not find values by day+entity for the year based tables. So for this\n    // case we get a series of fallback column tuples that we try in turn if the main index lookup\n    // fails. These fallback tuples are year+entity first and then entity only. The reasoning here is\n    // that e.g. when merging population to a day variable we want to merge the values from the year\n    // matching the day from the population variable (year+entity lookup) but for variables that don't\n    // have overlapping years (e.g. continents that only has 2015 as the single year) we want to fall back\n    // to merging by entity alone as a last resort\n    if (tables.length === 0) return new OwidTable()\n    else if (tables.length === 1) return tables[0]\n\n    // Get all the index values per table and then figure out the full set of all stringified index values\n    const indexValuesPerTable: Map<string, number[]>[] = tables.map((table) =>\n        // When we get a mergeFallbackLookupColumn then it can happen that a table does not have all the\n        // columns of the main index. In this case, just return an empty map because that will lead all\n        // lookups by main index to fail and we'll try the fallback index\n        mergeFallbackLookupColumns &&\n        _.difference(indexColumnNames, table.columnSlugs).length > 0\n            ? new Map()\n            : table.rowIndex(indexColumnNames)\n    )\n\n    // Construct all the fallback index lookup values for all tables. mergeFallbackLookupColumns is an\n    // array of array that is supposed to be treated as a sequence of tuples of column names\n    const mergeFallbackLookupValuesPerTable = mergeFallbackLookupColumns\n        ? mergeFallbackLookupColumns.map((fallbackColumns) =>\n              tables.map((table) => table.rowIndex(fallbackColumns))\n          )\n        : undefined\n\n    // Figure out which column names are shared. Shared columns (the index columns but also in our\n    // data model stuff like entityCode and entityName that we usually have in addition to entityId)\n    // will end up only once in the final table. This is a bit of a footgun for arbitrary data models\n    // as we don't make sure that the values are equal for the same index values (we only assume that\n    // this is true) - but this is how we have handled it in the past and it works with the setup we\n    // have.\n    const sharedColumnNames = intersection(\n        ...tables.map((table) => table.columnSlugs)\n    )\n    const allIndexValuesArray = indexValuesPerTable.flatMap((index) => [\n        ...index.keys(),\n    ])\n    const allIndexValues = new Set(allIndexValuesArray)\n\n    // Now identify for each table which columns should be copied (i.e. all non-index columns).\n    const columnsToAddPerTable = tables.map((table) =>\n        _.difference(table.columnSlugs, sharedColumnNames)\n    )\n    // Prepare a special entry for the Table + column names tuple that we will zip and\n    // map in the next step. This special entry is the first table and contains only the\n    // unique columns (index + other tables that are shared among all tables).\n    // We will preferentially get the unique values from the first table but because\n    // the first table is not guaranteed to contain all index values we'll later on\n    // try other tables for these shared columns if the given row index does\n    // not exist in the first table\n    const firstTableDuplicateForIndices: [\n        OwidTable | undefined,\n        string[] | undefined,\n    ] = [tables[0], sharedColumnNames]\n    const defsToAddPerTable = [firstTableDuplicateForIndices]\n        .concat(R.zip(tables, columnsToAddPerTable))\n        .map(\n            (tableAndColumns) =>\n                tableAndColumns[0]!\n                    .getColumns(tableAndColumns[1]!)\n                    .map((col) => {\n                        const def = { ...col.def }\n                        def.values = []\n                        return def\n                    }) as OwidColumnDef[]\n        )\n    // Now loop over all unique index values and for each assemble as full a row as we can manage by looking\n    // up the values in the different source tables\n    for (const index of allIndexValues.values()) {\n        // First we handle the unique/index columns (defsToAddPerTable[0])\n        for (const def of defsToAddPerTable[0]) {\n            // The index columns are special - the first table might not have a value for each of the index columns\n            // at the current index (e.g. a year that does not exist in the first table). We therefore have to keep\n            // looking in the other tables until we find a table that has the values. Because the index values were\n            // generated from the combined set of all index values we are guaranteed to find a value eventually before\n            // we exceed the length of the tables array\n            let tableIndex = 0\n            let indexHits = indexValuesPerTable[tableIndex].get(index)\n            while (indexHits === undefined) {\n                tableIndex++\n                indexHits = indexValuesPerTable[tableIndex].get(index)\n            }\n            def.values?.push(\n                tables[tableIndex].columnStore[def.slug][indexHits[0]]\n            )\n        }\n        // Now figure out the fallback merge lookup index value from the first table.\n        // This is the fallback index we use when looking up values and we don't find a value in the normal index.\n        // This is the case when we join year and day variables and then use day+entityid as the key but the year\n        // variables don't have those - so for the year variables we then check if there is a match using year+entityId\n        // where the year to use comes from the first table that by convention HAS TO contain a year column with the\n        // value to merge years on.\n        const indexHits = indexValuesPerTable[0].get(index)\n        const fallbackMergeIndices =\n            mergeFallbackLookupColumns && indexHits\n                ? mergeFallbackLookupColumns.map((columnSet) =>\n                      makeKeyFn(tables[0].columnStore, columnSet)(indexHits[0])\n                  )\n                : undefined\n        // now add all the nonindex value columns. We now loop over all tables and for each non-shared column\n        // we look up the value for the current row. We find the value for the current row by first trying to\n        // look up a match based on the shared index values, indexValuesPerTable[i]. If we don't have a hit\n        // for this row in this table then we try the fallbackMergeIndices in turn to see if we can merge\n        // based on these fallback indexes. If no option leads to a match we store ErrorValueTypes.NoMatchingValueAfterJoin\n        // in the cell.\n\n        // note that defsToAddPerTable has one more element than tables (the one duplicate of the\n        // first table that we added in the beginning that we use as the primary source for the shared columns)\n        for (let i = 0; i < tables.length; i++) {\n            let indexHits = indexValuesPerTable[i].get(index)\n\n            if (indexHits !== undefined && indexHits.length > 1)\n                // This case should be rare but it can come up. The old algorithm ran into this often because it\n                // joined a lot more stuff on entity only and then when you look up by entity into a table that has\n                // several years you end up with multiple matches. The old algorithm used to just pick one value.\n                // We still do this ultimately but because we try to match even day and year variables by year+entity\n                // first we should usually be able to find a unique match. The error output is here so that when\n                // something is weird in an edge case then this shows up as a debugging hint in the console.\n                console.error(\n                    `Found more than one matching row in table ${tables[i].tableSlug}`\n                )\n            for (const def of defsToAddPerTable[i + 1]) {\n                // If the main index led to a hit then we just copy the value into the new row from the source table\n                if (indexHits !== undefined)\n                    def.values?.push(\n                        tables[i].columnStore[def.slug][indexHits[0]]\n                    )\n                else {\n                    // If the main index did not lead to a hit then we try the fallback indices in turn\n                    indexHits = undefined\n                    for (\n                        let fallbackIndex = 0;\n                        fallbackMergeIndices &&\n                        mergeFallbackLookupValuesPerTable &&\n                        indexHits === undefined &&\n                        fallbackIndex < fallbackMergeIndices.length;\n                        fallbackIndex++\n                    ) {\n                        indexHits = mergeFallbackLookupValuesPerTable[\n                            fallbackIndex\n                        ][i].get(fallbackMergeIndices[fallbackIndex])\n                    }\n                    if (indexHits !== undefined)\n                        // If any of the fallbacks led to a hit then we use this hit\n                        // Note that we choose the last of the indexHits entries to look up the row in the columnstore here.\n                        // In the usual case the fallback index should still have enough information to match just one row (e.g.\n                        // year+entity). But for cases when we join day and year variables we have as the ultimate fallback a match\n                        // by entity only and this can then of course result in many indexHits when looking up an entity like Germany\n                        // in e.g. the population variable. If this join here were properly time and tolerance aware then we could\n                        // avoid matching on entity alone as the ultimate fallback but for  now this function is not that clever.\n                        // For the cases when we do get multiple hits for an index we could thus choose any data point. Pre July 2022\n                        // the old code always chose the first datapoint, which is often the first year that the variable has data for\n                        // for the given entity. This is not great, e.g. when using a covid date based variable and joining it to\n                        // population or similar. What we do here now is to use indexHits.length - 1 as the index, i.e. the last\n                        // row that this variable has data for for this entity. This could in theory be pretty wrong as well but in\n                        // practice it often means a very close match.\n                        // The proper solution as mentioned above would be to never fall back to entity matches only and move\n                        // the tolerance matching into this function as well instead.\n                        def.values?.push(\n                            tables[i].columnStore[def.slug][\n                                indexHits[indexHits.length - 1]\n                            ]\n                        )\n                    // If none of the fallback values worked either we write ErrorValueTypes.NoMatchingValueAfterJoin into the cell\n                    else\n                        def.values?.push(\n                            ErrorValueTypes.NoMatchingValueAfterJoin\n                        )\n                }\n            }\n        }\n    }\n    return new OwidTable(\n        [],\n        defsToAddPerTable.flatMap((defs) => defs)\n    )\n}\n\n/**\n * Relabels the joined time column with the finest interval that can represent\n * every joined variable table's times (each of their time columns knows its own)\n */\nconst withFinestTimeColumnInterval = (\n    joinedTable: OwidTable,\n    variableTables: OwidTable[],\n    slug: OwidTableSlugs.Day | OwidTableSlugs.Year\n): OwidTable => {\n    const intervals = variableTables.map(\n        (table) => table.get(slug).timeInterval\n    )\n    if (new Set(intervals).size < 2) return joinedTable\n    const timeColumnDef =\n        TIME_COLUMN_DEF_BY_INTERVAL[findFinestCommonTimeInterval(intervals)]\n    return joinedTable.updateDefs((def) =>\n        def.slug === slug ? { ...def, ...timeColumnDef } : def\n    )\n}\n\nconst variableTypeToColumnType = (type: OwidVariableType): ColumnTypeNames => {\n    switch (type) {\n        case \"ordinal\":\n            return ColumnTypeNames.Ordinal\n        case \"string\":\n            return ColumnTypeNames.String\n        case \"int\":\n            return ColumnTypeNames.Integer\n        case \"float\":\n            return ColumnTypeNames.Numeric\n        case \"mixed\":\n        default:\n            return ColumnTypeNames.NumberOrString\n    }\n}\n\nconst getSortFromDimensions = (\n    dimensions: OwidVariableDimensions\n): string[] | undefined => {\n    const values = dimensions.values?.values\n    if (!values) return\n\n    const sort = values\n        .map((value) => value.name)\n        .filter((name) => name !== undefined)\n\n    if (sort.length === 0) return\n\n    return sort\n}\n\nconst columnDefFromOwidVariable = (\n    variable: OwidVariableWithSourceAndDimension\n): OwidColumnDef => {\n    const slug = variable.id.toString() // For now, the variableId will be the column slug\n    const {\n        unit,\n        shortUnit,\n        description,\n        coverage,\n        datasetId,\n        datasetName,\n        descriptionShort,\n        descriptionProcessing,\n        descriptionKey,\n        descriptionFromProducer,\n        source,\n        origins,\n        display,\n        timespan,\n        nonRedistributable,\n        presentation,\n        catalogPath,\n        updatePeriodDays,\n        shortName,\n    } = variable\n\n    const isContinent = isContinentsVariableId(variable.id)\n    const name = variable.name\n\n    // The column's type\n    const parsedType = variable.type\n        ? variableTypeToColumnType(variable.type)\n        : ColumnTypeNames.NumberOrString\n\n    // Override the column type for the special Continents variable\n    const type = isContinent ? ColumnTypeNames.Continent : parsedType\n\n    // Extract the sort order for ordinal variables from their dimension metadata.\n    // This preserves the author-specified ordering of categorical values\n    // (e.g., \"Low\", \"Medium\", \"High\").\n    const sort =\n        parsedType === ColumnTypeNames.Ordinal\n            ? getSortFromDimensions(variable.dimensions)\n            : undefined\n\n    return {\n        name,\n        slug,\n        unit,\n        shortUnit,\n        description,\n        descriptionShort,\n        descriptionProcessing,\n        descriptionKey,\n        descriptionFromProducer,\n        coverage,\n        datasetId,\n        datasetName,\n        display,\n        color: display?.color,\n        nonRedistributable,\n        sourceLink: source?.link,\n        sourceName: source?.name,\n        dataPublishedBy: source?.dataPublishedBy,\n        dataPublisherSource: source?.dataPublisherSource,\n        retrievedDate: source?.retrievedDate,\n        additionalInfo: source?.additionalInfo,\n        timespan,\n        origins,\n        presentation,\n        catalogPath,\n        updatePeriodDays,\n        owidVariableId: variable.id,\n        owidProcessingLevel: variable.processingLevel,\n        owidSchemaVersion: variable.schemaVersion,\n        type,\n        sort,\n        shortName,\n    }\n}\n\n// Maps each time interval to the time column it produces. Sub-yearly intervals\n// all share the `day` slug (days-since-epoch) so they join in the same bucket\nconst TIME_COLUMN_DEF_BY_INTERVAL: Record<TimeInterval, OwidColumnDef> = {\n    [TimeInterval.Day]: {\n        slug: OwidTableSlugs.Day,\n        type: ColumnTypeNames.Day,\n        name: \"Day\",\n    },\n    [TimeInterval.Week]: {\n        slug: OwidTableSlugs.Day,\n        type: ColumnTypeNames.Week,\n        name: \"Week\",\n    },\n    [TimeInterval.Month]: {\n        slug: OwidTableSlugs.Day,\n        type: ColumnTypeNames.Month,\n        name: \"Month\",\n    },\n    [TimeInterval.Quarter]: {\n        slug: OwidTableSlugs.Day,\n        type: ColumnTypeNames.Quarter,\n        name: \"Quarter\",\n    },\n    [TimeInterval.Year]: {\n        slug: OwidTableSlugs.Year,\n        type: ColumnTypeNames.Year,\n        name: \"Year\",\n    },\n    [TimeInterval.Decade]: {\n        slug: OwidTableSlugs.Year,\n        type: ColumnTypeNames.Decade,\n        name: \"Decade\",\n    },\n}\n\nconst timeColumnDefFromOwidVariable = (\n    variableMetadata: OwidVariableWithSource\n): OwidColumnDef => {\n    return TIME_COLUMN_DEF_BY_INTERVAL[\n        getTimeInterval(variableMetadata.display)\n    ]\n}\n\nconst timeColumnValuesFromOwidVariable = (\n    variableMetadata: OwidVariableWithSource,\n    variableData: OwidVariableMixedData\n): number[] => {\n    const { display } = variableMetadata\n    const { years } = variableData\n\n    const interval = getTimeInterval(display)\n\n    // Shift day-encoded values expressed relative to a custom zeroDay onto the\n    // shared EPOCH_DATE, so variables with different zeroDays are comparable\n    const yearsNeedTransform =\n        display &&\n        isSubYearly(interval) &&\n        display.zeroDay !== undefined &&\n        display.zeroDay !== EPOCH_DATE\n    let times = yearsNeedTransform\n        ? convertLegacyYears(years || [], display.zeroDay!)\n        : years || []\n\n    // Snap sub-yearly values (except plain days) to the start of their period,\n    // so variables that pick different representative days for the same period\n    // still align\n    if (isSubYearly(interval) && interval !== TimeInterval.Day)\n        times = times.map((time) => snapToIntervalStart(time, interval))\n\n    return times\n}\n\nconst convertLegacyYears = (years: number[], zeroDay: string): number[] => {\n    // Only shift years if the variable zeroDay is different from EPOCH_DATE\n    // When the dataset uses days, the days are expressed as integer\n    // days since the specified `zeroDay`, which can be different for different variables.\n    // In order to correctly join variables with different `zeroDay`s in a single chart, we\n    // normalize all days to be in reference to a single epoch date.\n    const diff = diffDatesInDays(dayjs.utc(zeroDay), epochDate())\n    return years.map((y) => y + diff)\n}\n\nconst annotationMapAndDefFromOwidVariable = (\n    variable: OwidVariableWithSourceAndDimension\n): [Map<string, string>, OwidColumnDef] | [] => {\n    if (variable.display?.entityAnnotationsMap) {\n        const slug = variable.id.toString()\n        const annotationsSlug = makeAnnotationsSlug(slug)\n        const annotationMap = annotationsToMap(\n            variable.display.entityAnnotationsMap\n        )\n        const columnDef: OwidColumnDef = {\n            slug: annotationsSlug,\n            type: ColumnTypeNames.SeriesAnnotation,\n            name: annotationsSlug,\n            display: { includeInTable: false },\n            derivedFrom: { columnSlug: slug, relationship: \"annotations\" },\n        }\n        return [annotationMap, columnDef]\n    }\n    return []\n}\n\nconst annotationsToMap = (annotations: string): Map<string, string> => {\n    // Todo: let's delete this and switch to traditional columns\n    const entityAnnotationsMap = new Map<string, string>()\n    const delimiter = \":\"\n    annotations.split(\"\\n\").forEach((line) => {\n        const [key, ...words] = line.split(delimiter)\n        entityAnnotationsMap.set(key.trim(), words.join(delimiter).trim())\n    })\n    return entityAnnotationsMap\n}\n","import * as React from \"react\"\nimport { Bounds } from \"@ourworldindata/utils\"\nimport { GRAPHER_SIDE_PANEL_CLASS } from \"../core/GrapherConstants.js\"\n\nexport const SidePanel = ({\n    bounds,\n    children,\n}: {\n    bounds: Bounds\n    children: React.ReactNode\n}) => {\n    return (\n        <div\n            className={GRAPHER_SIDE_PANEL_CLASS}\n            style={{\n                width: bounds.width,\n                height: bounds.height,\n            }}\n        >\n            {children}\n        </div>\n    )\n}\n","import type * as React from \"react\"\nimport { UNSAFE_PortalProvider } from \"react-aria\"\nimport { Dialog, Modal, ModalOverlay } from \"react-aria-components\"\n\ninterface SlideInDrawerProps {\n    isOpen: boolean\n    onOpenChange: (isOpen: boolean) => void\n    ariaLabel: string\n    children: React.ReactNode\n    grapherRef: React.RefObject<HTMLDivElement | null>\n}\n\nexport function SlideInDrawer({\n    isOpen,\n    onOpenChange,\n    ariaLabel,\n    children,\n    grapherRef,\n}: SlideInDrawerProps): React.ReactElement {\n    return (\n        <UNSAFE_PortalProvider getContainer={() => grapherRef.current}>\n            <ModalOverlay\n                className=\"drawer\"\n                isOpen={isOpen}\n                onOpenChange={onOpenChange}\n                isDismissable\n            >\n                <Modal className=\"drawer-contents\">\n                    <Dialog aria-label={ariaLabel} className=\"drawer-dialog\">\n                        {/* Restore the default portal container for nested\n                            overlays such as the entity selector's dropdowns. */}\n                        <UNSAFE_PortalProvider getContainer={null}>\n                            {children}\n                        </UNSAFE_PortalProvider>\n                    </Dialog>\n                </Modal>\n            </ModalOverlay>\n        </UNSAFE_PortalProvider>\n    )\n}\n","export const OWID_LOGO_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"65\" height=\"36\" fill=\"none\" viewBox=\"0 0 65 36\"><path fill=\"#002147\" d=\"M0 0h64.8v36H0z\"/><path fill=\"#ce261e\" d=\"M0 33.3h64.8V36H0z\"/><path fill=\"#fff\" d=\"M13.796 10.575q0 .954-.318 1.77a4.2 4.2 0 0 1-.894 1.404 4.1 4.1 0 0 1-1.386.93q-.81.33-1.794.33t-1.8-.33a4.15 4.15 0 0 1-1.392-.93 4.2 4.2 0 0 1-.894-1.404A4.8 4.8 0 0 1 5 10.575q0-.954.318-1.764a4.2 4.2 0 0 1 .894-1.41 4.1 4.1 0 0 1 1.392-.924 4.7 4.7 0 0 1 1.8-.336q.984 0 1.794.336t1.386.93q.576.588.894 1.404.318.81.318 1.764m-1.656 0q0-.714-.192-1.278a2.7 2.7 0 0 0-.54-.966 2.3 2.3 0 0 0-.864-.606 2.9 2.9 0 0 0-1.14-.21q-.636 0-1.146.21t-.87.606a2.7 2.7 0 0 0-.546.966 4 4 0 0 0-.192 1.278q0 .714.192 1.284.192.564.546.96.36.39.87.6t1.146.21 1.14-.21q.51-.21.864-.6.354-.396.54-.96a4 4 0 0 0 .192-1.284m3.964-1.818v3.912q0 .564.258.876.264.306.786.306.384 0 .72-.168a2.6 2.6 0 0 0 .636-.474V8.757h1.482v6.156h-.906q-.288 0-.378-.27l-.102-.492a5 5 0 0 1-.396.354 2.6 2.6 0 0 1-.438.27 2.4 2.4 0 0 1-.498.168 2.4 2.4 0 0 1-.57.066q-.504 0-.894-.168a1.8 1.8 0 0 1-.648-.486 2.2 2.2 0 0 1-.402-.738 3.2 3.2 0 0 1-.132-.948V8.757zm5.224 6.156V8.757h.87q.228 0 .318.084t.12.288l.09.744q.33-.57.774-.9t.996-.33q.456 0 .756.21l-.192 1.11q-.018.108-.078.156a.3.3 0 0 1-.162.042 1 1 0 0 1-.246-.042 1.7 1.7 0 0 0-.414-.042q-.462 0-.792.258-.33.252-.558.744v3.834zm6.019-8.676h1.356a.57.57 0 0 1 .348.102q.144.096.192.264l1.476 5.19q.054.192.096.42.048.222.09.474a6 6 0 0 1 .228-.894l1.704-5.19a.6.6 0 0 1 .186-.252.54.54 0 0 1 .348-.114h.474a.57.57 0 0 1 .348.102.5.5 0 0 1 .192.264l1.692 5.19q.132.384.228.852.042-.234.084-.45.048-.216.096-.402l1.476-5.19q.042-.15.186-.258a.56.56 0 0 1 .348-.108h1.266l-2.694 8.676h-1.458l-1.896-5.928-.078-.246a10 10 0 0 1-.072-.282q-.036.15-.078.282a7 7 0 0 1-.072.246l-1.914 5.928H30.04l-2.694-8.676Zm15.424 2.424q.69 0 1.248.222.564.222.96.63c.396.408.468.604.612.996q.216.588.216 1.314 0 .732-.216 1.32a2.85 2.85 0 0 1-.612 1.002 2.65 2.65 0 0 1-.96.636 3.4 3.4 0 0 1-1.248.222q-.69 0-1.254-.222a2.7 2.7 0 0 1-.966-.636 2.9 2.9 0 0 1-.618-1.002 3.8 3.8 0 0 1-.216-1.32q0-.726.216-1.314.222-.588.618-.996.402-.408.966-.63a3.4 3.4 0 0 1 1.254-.222m0 5.202q.768 0 1.134-.516.372-.516.372-1.512c0-.996-.124-1.17-.372-1.518q-.366-.522-1.134-.522-.78 0-1.152.528-.372.522-.372 1.512c0 .99.124 1.164.372 1.512q.372.516 1.152.516m3.952 1.05V8.757h.87q.228 0 .318.084t.12.288l.09.744q.33-.57.774-.9t.996-.33q.456 0 .756.21l-.192 1.11q-.018.108-.078.156a.3.3 0 0 1-.162.042 1 1 0 0 1-.246-.042 1.7 1.7 0 0 0-.414-.042q-.462 0-.792.258-.33.252-.558.744v3.834zm6.237-8.916v8.916h-1.482V5.997zm5.772 8.916q-.288 0-.378-.27l-.12-.594a4 4 0 0 1-.402.39q-.21.174-.456.3-.24.126-.522.192a2.4 2.4 0 0 1-.6.072q-.504 0-.924-.21a2.1 2.1 0 0 1-.726-.606 3 3 0 0 1-.468-.99 5 5 0 0 1-.162-1.344q0-.684.186-1.272c.186-.588.302-.732.534-1.02q.348-.432.834-.672a2.4 2.4 0 0 1 1.092-.246 2.1 2.1 0 0 1 1.536.606V5.997h1.482v8.916zm-1.974-1.086q.462 0 .786-.192t.612-.546v-2.76a1.45 1.45 0 0 0-.552-.432 1.6 1.6 0 0 0-.636-.126q-.336 0-.612.126a1.2 1.2 0 0 0-.462.384q-.186.252-.288.648-.102.39-.102.924 0 .54.084.918.09.372.252.612.162.234.396.342.234.102.522.102m-40.427 6.93v6.156H14.85v-6.156zm.223-1.794a.84.84 0 0 1-.078.36 1 1 0 0 1-.21.294 1 1 0 0 1-.3.204 1 1 0 0 1-.372.072 1 1 0 0 1-.367-.072 1.02 1.02 0 0 1-.498-.498.96.96 0 0 1 0-.732 1 1 0 0 1 .205-.3.9.9 0 0 1 .293-.198.9.9 0 0 1 .738 0 .9.9 0 0 1 .3.198.94.94 0 0 1 .288.672Zm1.217 7.95v-6.156h.906q.288 0 .378.27l.102.486a2.9 2.9 0 0 1 .828-.618q.234-.114.498-.174t.576-.06q.504 0 .894.174.39.168.648.48.264.306.396.738.138.426.138.942v3.918h-1.482v-3.918q0-.564-.264-.87-.258-.312-.78-.312-.384 0-.72.174a2.6 2.6 0 0 0-.636.474v4.452zm16.449-4.338q0 .954-.318 1.752t-.894 1.374a4 4 0 0 1-1.386.894 4.9 4.9 0 0 1-1.794.318h-3.312v-8.676h3.312a4.8 4.8 0 0 1 1.794.324 4 4 0 0 1 1.386.894q.576.57.894 1.368t.318 1.752m-1.65 0q0-.714-.192-1.278a2.7 2.7 0 0 0-.546-.96 2.3 2.3 0 0 0-.864-.606 2.9 2.9 0 0 0-1.14-.21h-1.686v6.108h1.686q.636 0 1.14-.21.51-.21.864-.6a2.75 2.75 0 0 0 .546-.96 4 4 0 0 0 .192-1.284m7.41 4.338h-.665q-.21 0-.33-.06-.12-.066-.18-.258l-.132-.438q-.234.21-.462.372a3 3 0 0 1-.462.264q-.24.108-.51.162t-.6.054q-.39 0-.72-.102a1.6 1.6 0 0 1-.57-.318 1.45 1.45 0 0 1-.366-.522 1.9 1.9 0 0 1-.132-.726q0-.348.18-.684.186-.342.612-.612.426-.276 1.134-.456t1.758-.204v-.36q0-.618-.264-.912-.258-.3-.756-.3a1.84 1.84 0 0 0-1.02.276q-.174.102-.324.186a.66.66 0 0 1-.33.084.43.43 0 0 1-.258-.078.6.6 0 0 1-.174-.192l-.27-.474q1.062-.972 2.562-.972.54 0 .96.18.426.174.72.492.294.312.444.75.156.438.156.96zm-2.88-.924q.23 0 .42-.042.194-.042.36-.126.175-.084.33-.204.163-.126.325-.294v-1.038q-.648.03-1.086.114-.432.078-.696.204a.9.9 0 0 0-.378.294.66.66 0 0 0-.108.366q0 .39.228.558.234.168.606.168Zm6.12 1.021q-.798 0-1.23-.45-.432-.457-.432-1.255v-3.438h-.624a.3.3 0 0 1-.21-.078q-.084-.078-.084-.234v-.588l.99-.162.312-1.68a.3.3 0 0 1 .108-.186.37.37 0 0 1 .222-.066h.768v1.938h1.62v1.056h-1.62v3.336q0 .288.144.45a.49.49 0 0 0 .384.162q.138 0 .228-.03.096-.036.162-.072.072-.036.126-.066a.2.2 0 0 1 .108-.036.16.16 0 0 1 .108.036q.042.03.09.096l.444.72q-.324.27-.744.408a2.8 2.8 0 0 1-.87.138Zm7.203-.097h-.666q-.21 0-.33-.06-.12-.066-.18-.258l-.132-.438q-.234.21-.462.372a3 3 0 0 1-.462.264q-.24.108-.51.162t-.6.054q-.39 0-.72-.102a1.6 1.6 0 0 1-.57-.318 1.45 1.45 0 0 1-.366-.522 1.9 1.9 0 0 1-.132-.726q0-.348.18-.684.186-.342.612-.612.426-.276 1.134-.456t1.758-.204v-.36q0-.618-.264-.912-.258-.3-.756-.3a1.84 1.84 0 0 0-1.02.276q-.174.102-.324.186a.66.66 0 0 1-.33.084.43.43 0 0 1-.258-.078.6.6 0 0 1-.174-.192l-.27-.474q1.062-.972 2.562-.972.54 0 .96.18.426.174.72.492.294.312.444.75.156.438.156.96zm-2.88-.924q.228 0 .42-.042t.36-.126q.174-.084.33-.204.162-.126.324-.294v-1.038q-.648.03-1.086.114-.432.078-.696.204a.9.9 0 0 0-.378.294.66.66 0 0 0-.108.366q0 .39.228.558.234.168.606.168\"/></svg>`\n\nexport const SMALL_OWID_LOGO_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"51\" height=\"28\" fill=\"none\" viewBox=\"0 0 51 28\"><path fill=\"#002147\" d=\"M0 0h50.4v28H0z\"/><path fill=\"#ce261e\" d=\"M0 25.9h50.4V28H0z\"/><path fill=\"#fff\" d=\"M10.33 8.385q0 .795-.265 1.475a3.5 3.5 0 0 1-.745 1.17q-.48.495-1.155.775-.675.275-1.495.275a4 4 0 0 1-1.5-.275 3.5 3.5 0 0 1-1.16-.775 3.5 3.5 0 0 1-.745-1.17A4 4 0 0 1 3 8.385q0-.795.265-1.47.265-.68.745-1.175.485-.495 1.16-.77.68-.28 1.5-.28c.82 0 1.045.093 1.495.28q.675.28 1.155.775.48.49.745 1.17.265.675.265 1.47m-1.38 0q0-.595-.16-1.065a2.2 2.2 0 0 0-.45-.805 1.94 1.94 0 0 0-.72-.505 2.5 2.5 0 0 0-.95-.175q-.53 0-.955.175a2 2 0 0 0-.725.505q-.295.33-.455.805-.16.47-.16 1.065t.16 1.07q.16.47.455.8.3.325.725.5t.955.175c.53 0 .67-.058.95-.175q.425-.175.72-.5.296-.33.45-.8.16-.475.16-1.07m3.203-1.515v3.26q0 .47.215.73.22.255.655.255.32 0 .6-.14a2.2 2.2 0 0 0 .53-.395V6.87h1.235V12h-.755q-.24 0-.315-.225l-.085-.41a4 4 0 0 1-.33.295 2 2 0 0 1-.78.365 2 2 0 0 1-.475.055q-.42 0-.745-.14a1.5 1.5 0 0 1-.54-.405 1.8 1.8 0 0 1-.335-.615 2.7 2.7 0 0 1-.11-.79V6.87zM16.407 12V6.87h.725q.19 0 .265.07t.1.24l.075.62a2.4 2.4 0 0 1 .645-.75q.37-.275.83-.275.38 0 .63.175l-.16.925a.2.2 0 0 1-.065.13.23.23 0 0 1-.135.035.8.8 0 0 1-.205-.035 1.4 1.4 0 0 0-.345-.035 1.04 1.04 0 0 0-.66.215q-.276.21-.465.62V12zm4.815-7.23h1.13a.47.47 0 0 1 .29.085.38.38 0 0 1 .16.22l1.23 4.325q.045.16.08.35.04.185.075.395a5 5 0 0 1 .19-.745l1.42-4.325a.5.5 0 0 1 .155-.21.45.45 0 0 1 .29-.095h.395a.47.47 0 0 1 .29.085q.115.08.16.22l1.41 4.325q.11.32.19.71l.07-.375a10 10 0 0 1 .08-.335l1.23-4.325a.4.4 0 0 1 .155-.215.47.47 0 0 1 .29-.09h1.055L29.322 12h-1.215l-1.58-4.94-.065-.205-.06-.235a3 3 0 0 1-.065.235q-.03.11-.06.205L24.682 12h-1.215zm12.754 2.02a2.8 2.8 0 0 1 1.04.185q.47.184.8.525.33.34.51.83t.18 1.095q0 .61-.18 1.1t-.51.835a2.2 2.2 0 0 1-.8.53q-.465.185-1.04.185c-.575 0-.732-.062-1.045-.185a2.3 2.3 0 0 1-.805-.53 2.4 2.4 0 0 1-.515-.835 3.2 3.2 0 0 1-.18-1.1q0-.604.18-1.095.185-.49.515-.83.335-.34.805-.525a2.8 2.8 0 0 1 1.045-.185m0 4.335q.64 0 .945-.43.31-.43.31-1.26c0-.83-.103-.975-.31-1.265q-.304-.435-.945-.435-.65 0-.96.44-.31.435-.31 1.26c0 .825.103.97.31 1.26q.31.43.96.43M37.17 12V6.87h.724q.19 0 .266.07.075.07.1.24l.075.62a2.4 2.4 0 0 1 .645-.75q.37-.275.83-.275.38 0 .63.175l-.16.925q-.015.09-.066.13a.23.23 0 0 1-.134.035.8.8 0 0 1-.206-.035 1.4 1.4 0 0 0-.345-.035 1.04 1.04 0 0 0-.66.215q-.274.21-.465.62V12zm5.097-7.43V12h-1.235V4.57zM46.976 12q-.24 0-.315-.225l-.1-.495a3 3 0 0 1-.335.325 2.03 2.03 0 0 1-1.315.47q-.42 0-.77-.175a1.75 1.75 0 0 1-.605-.505 2.5 2.5 0 0 1-.39-.825q-.135-.49-.135-1.12 0-.57.155-1.06a2.6 2.6 0 0 1 .445-.85q.29-.36.695-.56.406-.205.91-.205a1.75 1.75 0 0 1 1.28.505V4.57h1.235V12zm-1.645-.905q.385 0 .655-.16t.51-.455v-2.3a1.2 1.2 0 0 0-.46-.36 1.3 1.3 0 0 0-.53-.105q-.279 0-.51.105-.225.105-.385.32-.154.21-.24.54a3 3 0 0 0-.085.77q0 .45.07.765.075.31.21.51.135.195.33.285.195.085.435.085M12.343 16.87V22h-1.235v-5.13zm.185-1.495a.7.7 0 0 1-.065.3.8.8 0 0 1-.175.245.8.8 0 0 1-.25.17.8.8 0 0 1-.615 0 .85.85 0 0 1-.415-.415.8.8 0 0 1 0-.61.77.77 0 0 1 .415-.415.75.75 0 0 1 .615 0 .8.8 0 0 1 .25.165.78.78 0 0 1 .24.56M13.443 22v-5.13h.755q.24 0 .315.225l.085.405a2.4 2.4 0 0 1 .69-.515 2 2 0 0 1 .415-.145q.219-.05.48-.05.42 0 .745.145.324.14.54.4.219.255.33.615.114.355.115.785V22h-1.235v-3.265q0-.47-.22-.725-.215-.26-.65-.26-.321 0-.6.145a2.2 2.2 0 0 0-.53.395V22zm13.507-3.615a3.9 3.9 0 0 1-.265 1.46 3.4 3.4 0 0 1-.745 1.145q-.48.48-1.155.745A4 4 0 0 1 23.29 22h-2.76v-7.23h2.76q.82 0 1.495.27.675.265 1.155.745.48.475.745 1.14t.265 1.46m-1.375 0q0-.595-.16-1.065a2.2 2.2 0 0 0-.455-.8 1.95 1.95 0 0 0-.72-.505 2.5 2.5 0 0 0-.95-.175h-1.405v5.09h1.405q.53 0 .95-.175.425-.175.72-.5.295-.33.455-.8.16-.475.16-1.07M31.65 22h-.554a.6.6 0 0 1-.275-.05q-.1-.055-.15-.215l-.11-.365q-.196.175-.385.31-.186.13-.385.22-.2.09-.425.135a2.6 2.6 0 0 1-.5.045 2 2 0 0 1-.6-.085 1.35 1.35 0 0 1-.475-.265 1.2 1.2 0 0 1-.305-.435 1.5 1.5 0 0 1-.11-.605q0-.29.15-.57.155-.285.51-.51.354-.23.945-.38.59-.15 1.465-.17v-.3q0-.515-.22-.76-.216-.25-.63-.25a1.53 1.53 0 0 0-.85.23l-.27.155a.55.55 0 0 1-.275.07.36.36 0 0 1-.215-.065.5.5 0 0 1-.145-.16l-.225-.395q.884-.81 2.135-.81.45 0 .8.15a1.67 1.67 0 0 1 .97 1.035q.13.365.13.8zm-2.4-.77q.19 0 .35-.035a1.2 1.2 0 0 0 .3-.105q.146-.07.276-.17.135-.105.27-.245v-.865a6.5 6.5 0 0 0-.905.095q-.36.065-.58.17a.77.77 0 0 0-.315.245.55.55 0 0 0-.09.305q0 .325.19.465.195.14.505.14Zm5 .85q-.665 0-1.025-.375-.36-.38-.36-1.045v-2.865h-.52a.26.26 0 0 1-.175-.065q-.07-.064-.07-.195v-.49l.825-.135.26-1.4a.25.25 0 0 1 .09-.155.3.3 0 0 1 .185-.055h.64v1.615h1.35v.88H34.1v2.78q0 .24.12.375t.32.135a.6.6 0 0 0 .19-.025 3 3 0 0 0 .24-.115q.045-.03.09-.03.055 0 .09.03a.4.4 0 0 1 .075.08l.37.6a1.9 1.9 0 0 1-.62.34 2.3 2.3 0 0 1-.725.115m5.902-.08h-.555a.6.6 0 0 1-.275-.05q-.099-.055-.15-.215l-.11-.365q-.195.175-.385.31a2.3 2.3 0 0 1-.385.22 2 2 0 0 1-.425.135q-.225.045-.5.045-.324 0-.6-.085a1.35 1.35 0 0 1-.475-.265 1.2 1.2 0 0 1-.305-.435 1.5 1.5 0 0 1-.11-.605q0-.29.15-.57.156-.285.51-.51.356-.23.945-.38.59-.15 1.465-.17v-.3q0-.515-.22-.76-.214-.25-.63-.25a1.53 1.53 0 0 0-.85.23q-.144.085-.27.155a.55.55 0 0 1-.275.07.36.36 0 0 1-.215-.065.5.5 0 0 1-.145-.16l-.225-.395q.885-.81 2.135-.81.45 0 .8.15.355.145.6.41a1.7 1.7 0 0 1 .37.625q.13.365.13.8zm-2.4-.77q.19 0 .35-.035a1.5 1.5 0 0 0 .575-.275q.135-.105.27-.245v-.865q-.54.025-.905.095-.36.065-.58.17a.77.77 0 0 0-.315.245.55.55 0 0 0-.09.305q0 .325.19.465a.85.85 0 0 0 .505.14\"/></svg>`\n\n// Just the plain white text, no background or border.\nexport const OWID_WORDMARK_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" xml:space=\"preserve\" fill-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"2\" clip-rule=\"evenodd\" viewBox=\"0 0 65 24\"><path fill=\"#fff\" fill-rule=\"nonzero\" d=\"M13.796 6.072q0 .954-.318 1.77c-.201.523-.505 1-.894 1.404a4.1 4.1 0 0 1-1.386.93q-.81.33-1.794.33t-1.8-.33a4.2 4.2 0 0 1-1.392-.93 4.2 4.2 0 0 1-.894-1.405A4.8 4.8 0 0 1 5 6.072q0-.953.318-1.763c.2-.525.504-1.005.894-1.41a4.1 4.1 0 0 1 1.392-.925 4.7 4.7 0 0 1 1.8-.336q.984 0 1.794.336t1.386.93q.576.589.894 1.405.318.81.318 1.764m-1.656 0q0-.714-.192-1.278a2.7 2.7 0 0 0-.54-.966 2.3 2.3 0 0 0-.864-.607 3 3 0 0 0-1.14-.21q-.636 0-1.146.21t-.87.606c-.246.281-.432.61-.546.966a4 4 0 0 0-.192 1.278q0 .715.192 1.285.192.564.546.96.36.39.87.6t1.146.21 1.14-.21q.51-.21.864-.6.354-.397.54-.96c.133-.415.198-.848.192-1.284m3.964-1.818v3.912q0 .564.258.876.264.306.786.306.384 0 .72-.169c.235-.123.45-.283.636-.473V4.254h1.482v6.156h-.906q-.288 0-.378-.27l-.102-.492a5 5 0 0 1-.396.354 2.6 2.6 0 0 1-.438.27 2.4 2.4 0 0 1-.498.167 2.4 2.4 0 0 1-.57.066q-.504 0-.894-.168a1.8 1.8 0 0 1-.648-.485 2.2 2.2 0 0 1-.402-.739 3.2 3.2 0 0 1-.132-.947V4.252zm5.224 6.156V4.254h.87q.228 0 .318.084t.12.288l.09.744q.33-.57.774-.9t.996-.33q.456 0 .756.21l-.192 1.11q-.018.108-.078.156a.3.3 0 0 1-.162.042 1 1 0 0 1-.246-.042 1.7 1.7 0 0 0-.414-.042q-.462 0-.792.258-.33.252-.558.744v3.834zm6.018-8.676h1.357a.57.57 0 0 1 .348.102q.144.096.192.264l1.476 5.19q.054.192.096.42.048.222.09.474.08-.455.228-.894l1.704-5.19a.57.57 0 0 1 .186-.252.55.55 0 0 1 .348-.114h.474a.57.57 0 0 1 .348.102c.092.064.16.157.192.264l1.692 5.19q.132.384.228.852.042-.234.084-.45.048-.216.096-.402l1.476-5.19q.042-.15.186-.258a.56.56 0 0 1 .348-.108h1.266l-2.694 8.676h-1.458l-1.896-5.928-.078-.246q-.038-.141-.072-.282-.036.15-.078.282-.036.132-.072.246l-1.914 5.928H30.04zm15.425 2.424q.69 0 1.248.222.564.222.96.63t.612.996.216 1.314q0 .732-.216 1.32a2.85 2.85 0 0 1-.612 1.002c-.27.28-.597.497-.96.636a3.4 3.4 0 0 1-1.248.222q-.69 0-1.254-.222a2.7 2.7 0 0 1-.966-.636 2.9 2.9 0 0 1-.618-1.002 3.8 3.8 0 0 1-.216-1.32q0-.726.216-1.314.222-.588.618-.996.402-.408.966-.63a3.4 3.4 0 0 1 1.254-.222m0 5.202q.768 0 1.134-.516.372-.516.372-1.512t-.372-1.518q-.366-.522-1.134-.522-.78 0-1.152.528-.372.521-.372 1.511t.372 1.512q.372.517 1.152.517m3.952 1.05V4.254h.87q.228 0 .318.084t.12.288l.09.744q.33-.57.774-.9t.996-.33q.456 0 .756.21l-.192 1.11q-.018.108-.078.156a.3.3 0 0 1-.162.042 1 1 0 0 1-.246-.042 1.7 1.7 0 0 0-.414-.042q-.462 0-.792.258-.33.252-.558.744v3.834zm6.237-8.916v8.916h-1.482V1.494zm5.772 8.916q-.288 0-.378-.27l-.12-.594q-.186.21-.402.39-.21.174-.456.3-.24.126-.522.192a2.4 2.4 0 0 1-.6.072q-.504 0-.924-.21a2.1 2.1 0 0 1-.726-.606 3 3 0 0 1-.468-.99 5 5 0 0 1-.162-1.344q0-.684.186-1.272t.534-1.02.834-.672a2.4 2.4 0 0 1 1.092-.246 2.1 2.1 0 0 1 1.536.606V1.494h1.482v8.916zm-1.974-1.086q.462 0 .786-.192t.612-.546v-2.76a1.45 1.45 0 0 0-.552-.432 1.6 1.6 0 0 0-.636-.126q-.336 0-.612.126a1.2 1.2 0 0 0-.462.384q-.186.252-.288.648-.102.39-.102.924 0 .54.084.918.09.372.252.612.162.234.396.342.234.102.522.102m-40.427 6.93v6.156H14.85v-6.156zm.223-1.794a.85.85 0 0 1-.078.36 1 1 0 0 1-.21.294 1 1 0 0 1-.3.204 1 1 0 0 1-.372.072.9.9 0 0 1-.367-.072 1 1 0 0 1-.498-.498.97.97 0 0 1 0-.732.94.94 0 0 1 .498-.498.9.9 0 0 1 .738 0 .945.945 0 0 1 .588.87zm1.217 7.95v-6.156h.906q.288 0 .378.27l.102.486c.237-.253.518-.463.828-.618q.234-.114.498-.174t.576-.06q.504 0 .894.174.39.168.648.48.264.306.396.738.138.426.138.942v3.918h-1.482v-3.918q0-.564-.264-.87-.258-.312-.78-.312-.384 0-.72.174c-.235.124-.45.284-.636.474v4.452zm16.449-4.338q0 .954-.318 1.752t-.894 1.373a4 4 0 0 1-1.386.894 4.9 4.9 0 0 1-1.794.318h-3.312v-8.676h3.312a4.8 4.8 0 0 1 1.794.324c.519.198.991.503 1.386.894q.576.57.894 1.368t.318 1.752m-1.65 0q0-.714-.192-1.278a2.7 2.7 0 0 0-.546-.96 2.3 2.3 0 0 0-.864-.606 3 3 0 0 0-1.14-.21h-1.686v6.108h1.686q.636 0 1.14-.21.51-.21.864-.6c.245-.28.431-.606.546-.96.133-.415.198-.848.192-1.284m7.411 4.338h-.666q-.21 0-.33-.06-.12-.066-.18-.258l-.132-.438q-.234.21-.462.372-.218.154-.462.264-.24.108-.51.162t-.6.054q-.39 0-.72-.102a1.6 1.6 0 0 1-.57-.318 1.5 1.5 0 0 1-.366-.522 1.9 1.9 0 0 1-.132-.726q0-.348.18-.684.186-.342.612-.612.426-.276 1.134-.456t1.758-.204v-.36q0-.618-.264-.912-.258-.3-.756-.3c-.36-.01-.714.086-1.02.276q-.174.102-.324.186a.7.7 0 0 1-.33.084.43.43 0 0 1-.258-.078.6.6 0 0 1-.174-.192l-.27-.474q1.062-.972 2.562-.972.54 0 .96.18.426.174.72.492.294.312.444.75.156.438.156.96zm-2.881-.924q.23 0 .42-.042.194-.042.36-.126.176-.084.33-.204.163-.126.325-.294v-1.038q-.648.03-1.086.114-.432.078-.696.204a.9.9 0 0 0-.378.294.66.66 0 0 0-.108.366q0 .39.228.558.234.168.606.168zm6.12 1.021q-.798 0-1.23-.45-.432-.457-.432-1.255v-3.438h-.624a.3.3 0 0 1-.21-.078q-.084-.078-.084-.234v-.588l.99-.162.312-1.68a.3.3 0 0 1 .108-.186.36.36 0 0 1 .222-.066h.768v1.938h1.62v1.056h-1.62V20.7q0 .288.144.45a.49.49 0 0 0 .384.162q.138 0 .228-.03.096-.036.162-.072.072-.036.126-.066a.2.2 0 0 1 .108-.036.16.16 0 0 1 .108.036q.042.03.09.096l.444.72q-.324.27-.744.408a2.8 2.8 0 0 1-.87.138zm7.203-.097h-.666q-.21 0-.33-.06-.12-.066-.18-.258l-.132-.438q-.234.21-.462.372-.218.154-.462.264-.24.108-.51.162t-.6.054q-.39 0-.72-.102a1.6 1.6 0 0 1-.57-.318 1.5 1.5 0 0 1-.366-.522 1.9 1.9 0 0 1-.132-.726q0-.348.18-.684.186-.342.612-.612.426-.276 1.134-.456t1.758-.204v-.36q0-.618-.264-.912-.258-.3-.756-.3c-.36-.01-.714.086-1.02.276q-.174.102-.324.186a.7.7 0 0 1-.33.084.43.43 0 0 1-.258-.078.6.6 0 0 1-.174-.192l-.27-.474q1.062-.972 2.562-.972.54 0 .96.18.426.174.72.492.294.312.444.75.156.438.156.96zm-2.88-.924q.228 0 .42-.042t.36-.126q.174-.084.33-.204.162-.126.324-.294v-1.038q-.648.03-1.086.114-.432.078-.696.204a.9.9 0 0 0-.378.294.66.66 0 0 0-.108.366q0 .39.228.558.234.168.606.168\"/></svg>`\n\nexport const CORE_LOGO_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"102\" height=\"37\" fill=\"none\" viewBox=\"0 0 102 37\"><path fill=\"#ea4148\" d=\"M47 0H0v37h47z\"/><path fill=\"#fff\" d=\"M3.78 11.85c0-3.55 2.67-5.6 5.68-5.6a4.63 4.63 0 0 1 3.09 1.1l-1.7 2.36c-.31-.32-.74-.5-1.18-.52-1.36 0-2.16 1.03-2.16 2.66 0 1.62.89 2.65 2.03 2.65a2.93 2.93 0 0 0 1.7-.69l1.4 2.4a5.3 5.3 0 0 1-3.52 1.24c-3 0-5.34-2.05-5.34-5.6\"/><path fill=\"#fff\" d=\"M18.85 11.85c0-1.63-.42-2.66-1.52-2.66s-1.52 1.03-1.52 2.66c0 1.62.42 2.65 1.52 2.65s1.52-1.03 1.52-2.65m-6.77 0c0-3.55 2.54-5.6 5.25-5.6 2.7 0 5.25 2.05 5.25 5.6s-2.54 5.6-5.25 5.6-5.25-2.05-5.25-5.6M23.34 6.5h2.97l.25 1.84h.09c.78-1.46 1.97-2.1 3-2.1.45-.02.9.05 1.32.22l-.6 3.16c-.38-.1-.78-.16-1.18-.17-.76 0-1.7.47-2.2 1.8v5.94h-3.65zm13.64 4.06c0-.81-.34-1.54-1.44-1.54-.8 0-1.49.47-1.7 1.54zm-6.6 1.29c0-3.47 2.49-5.6 5.07-5.6 3.13 0 4.62 2.3 4.62 5.17 0 .52-.05 1.03-.15 1.54h-6.04c.34 1.28 1.27 1.71 2.46 1.71a4.3 4.3 0 0 0 2.16-.64l1.18 2.18a7.1 7.1 0 0 1-3.85 1.24c-3.09 0-5.46-2.05-5.46-5.6\"/><path fill=\"#1a1818\" d=\"M10.43 23.87c0-.81-.34-1.54-1.44-1.54-.8 0-1.48.47-1.69 1.54zm-6.6 1.28c0-3.46 2.5-5.6 5.08-5.6 3.13 0 4.61 2.3 4.61 5.18 0 .51-.05 1.03-.15 1.54H7.34c.34 1.28 1.27 1.7 2.46 1.7.76-.01 1.5-.23 2.16-.63l1.18 2.18a7.1 7.1 0 0 1-3.85 1.24c-3.1 0-5.46-2.06-5.46-5.6m10.07-.01c0-3.55 2.67-5.6 5.68-5.6a4.63 4.63 0 0 1 3.09 1.11l-1.7 2.35c-.32-.31-.74-.5-1.18-.51-1.36 0-2.16 1.03-2.16 2.65 0 1.63.89 2.66 2.03 2.66a2.93 2.93 0 0 0 1.7-.69l1.39 2.4a5.3 5.3 0 0 1-3.51 1.24c-3 0-5.34-2.06-5.34-5.6\"/><path fill=\"#1a1818\" d=\"M28.97 25.15c0-1.62-.42-2.65-1.52-2.65s-1.52 1.03-1.52 2.65c0 1.63.42 2.66 1.52 2.66s1.52-1.03 1.52-2.66m-6.77 0c0-3.55 2.54-5.6 5.25-5.6 2.7 0 5.25 2.05 5.25 5.6s-2.54 5.6-5.25 5.6-5.25-2.04-5.25-5.6m11.34-5.35h2.97l.25 1.29h.09a4.76 4.76 0 0 1 3.34-1.54c2.33 0 3.3 1.71 3.3 4.36v6.6h-3.64v-6.13c0-1.37-.34-1.7-1.06-1.7-.67 0-1.05.3-1.6.8v7.02h-3.65z\"/><path fill=\"#002147\" d=\"M48 0h54v33H48z\"/><path fill=\"#fff\" d=\"M58.375 11.247q0 .886-.295 1.642a3.9 3.9 0 0 1-.83 1.303 3.8 3.8 0 0 1-1.285.863 4.4 4.4 0 0 1-1.665.306 4.4 4.4 0 0 1-1.67-.306 3.85 3.85 0 0 1-1.291-.863 3.9 3.9 0 0 1-.83-1.303 4.5 4.5 0 0 1-.295-1.642q0-.885.295-1.636a3.9 3.9 0 0 1 .83-1.308q.54-.552 1.291-.858a4.4 4.4 0 0 1 1.67-.311 4.3 4.3 0 0 1 1.665.311q.751.312 1.285.863.535.546.83 1.303a4.4 4.4 0 0 1 .295 1.636m-1.536 0q0-.662-.179-1.185a2.5 2.5 0 0 0-.5-.897 2.2 2.2 0 0 0-.802-.562 2.7 2.7 0 0 0-1.058-.195 2.8 2.8 0 0 0-1.063.195q-.474.195-.807.562a2.5 2.5 0 0 0-.507.897 3.7 3.7 0 0 0-.178 1.185q0 .663.178 1.191.178.524.507.891.334.362.807.557t1.063.195 1.058-.195q.472-.195.801-.557.33-.368.501-.89a3.7 3.7 0 0 0 .179-1.192m3.565-1.687v3.63q0 .523.24.813.244.284.73.284.356 0 .667-.156a2.4 2.4 0 0 0 .59-.44v-4.13h1.375v5.71h-.84q-.268 0-.351-.25l-.095-.456a4 4 0 0 1-.367.328 2.2 2.2 0 0 1-.868.406q-.245.062-.53.062a2.1 2.1 0 0 1-.829-.156 1.7 1.7 0 0 1-.601-.45 2 2 0 0 1-.373-.686 3 3 0 0 1-.123-.879V9.56zm4.736 5.712V9.56h.807q.212 0 .295.078.084.077.112.267l.083.69q.306-.528.718-.835t.924-.306q.423 0 .702.195l-.178 1.03q-.018.099-.073.144a.26.26 0 0 1-.15.04 1 1 0 0 1-.228-.04 1.5 1.5 0 0 0-.385-.039q-.428 0-.734.24-.306.233-.518.69v3.557H65.14Zm5.361-8.049h1.258q.195 0 .323.094a.42.42 0 0 1 .178.245l1.37 4.815q.05.178.089.39.044.206.083.44a5.6 5.6 0 0 1 .212-.83l1.58-4.815a.53.53 0 0 1 .173-.234.5.5 0 0 1 .323-.105h.44a.53.53 0 0 1 .323.094q.128.09.178.245l1.57 4.815q.122.357.211.79l.078-.417q.045-.2.09-.373l1.369-4.815a.45.45 0 0 1 .172-.24.52.52 0 0 1 .323-.1h1.175l-2.5 8.05h-1.353l-1.758-5.5-.073-.228a9 9 0 0 1-.067-.262q-.033.14-.072.262a6 6 0 0 1-.067.228l-1.776 5.5h-1.352zM84.7 9.472q.64 0 1.158.206a2.5 2.5 0 0 1 .89.584q.369.378.568.924.2.546.2 1.22 0 .678-.2 1.224a2.65 2.65 0 0 1-.567.93 2.5 2.5 0 0 1-.891.59 3.1 3.1 0 0 1-1.158.205 3.2 3.2 0 0 1-1.163-.206 2.5 2.5 0 0 1-.897-.59 2.7 2.7 0 0 1-.573-.93 3.5 3.5 0 0 1-.2-1.224q0-.673.2-1.219.207-.546.574-.924.372-.378.896-.584a3.2 3.2 0 0 1 1.163-.206m0 4.826q.713 0 1.052-.479.345-.48.345-1.403c0-.923-.115-1.085-.345-1.408q-.34-.484-1.052-.484-.723 0-1.069.49-.345.483-.345 1.402t.345 1.403q.345.48 1.07.479Zm3.556.974V9.56h.807q.211 0 .295.078.083.077.111.267l.084.69q.306-.528.718-.835.411-.306.924-.306.423 0 .701.195l-.178 1.03q-.016.099-.072.144a.26.26 0 0 1-.15.04 1 1 0 0 1-.229-.04 1.5 1.5 0 0 0-.384-.039q-.428 0-.735.24-.306.233-.517.69v3.557h-1.375ZM93.93 7v8.272h-1.375V7zm5.244 8.272q-.267 0-.351-.25l-.111-.552a3.4 3.4 0 0 1-.373.362q-.195.162-.423.278-.223.117-.485.179-.255.066-.556.066a1.9 1.9 0 0 1-.858-.194 1.95 1.95 0 0 1-.673-.563 2.8 2.8 0 0 1-.434-.918 4.7 4.7 0 0 1-.15-1.247q0-.634.172-1.18t.495-.947.774-.623q.451-.228 1.013-.228a1.95 1.95 0 0 1 1.425.562V7h1.375v8.272zm-1.832-1.008q.43 0 .73-.178t.567-.506v-2.56a1.35 1.35 0 0 0-.512-.402 1.5 1.5 0 0 0-.59-.117 1.35 1.35 0 0 0-.568.117q-.25.117-.428.357a1.7 1.7 0 0 0-.267.6 3.4 3.4 0 0 0-.095.858q0 .501.078.852.083.345.234.567.15.217.367.318a1.2 1.2 0 0 0 .484.094m-36.726 6.43v5.711H59.24v-5.711zm.206-1.665a.8.8 0 0 1-.073.334.9.9 0 0 1-.194.273.9.9 0 0 1-.279.19.9.9 0 0 1-.684 0 .95.95 0 0 1-.462-.463.9.9 0 0 1 0-.68.9.9 0 0 1 .189-.277.9.9 0 0 1 .273-.184.83.83 0 0 1 .685 0 .9.9 0 0 1 .278.184.88.88 0 0 1 .267.623m1.018 7.376v-5.711h.84q.268 0 .352.25l.094.451a2.7 2.7 0 0 1 .768-.573 2.2 2.2 0 0 1 .997-.217q.467 0 .83.161.36.157.6.445.245.285.368.685.128.396.128.874v3.635h-1.375V22.77q0-.523-.245-.807-.239-.29-.724-.29-.356 0-.668.162a2.4 2.4 0 0 0-.59.44v4.13zm15.038-4.025q0 .885-.295 1.626a3.7 3.7 0 0 1-.83 1.275 3.7 3.7 0 0 1-1.285.829 4.5 4.5 0 0 1-1.665.295h-3.072v-8.05h3.072q.913 0 1.665.301.751.296 1.286.83.534.528.829 1.269t.295 1.625m-1.53 0q0-.661-.179-1.185a2.5 2.5 0 0 0-.506-.89 2.2 2.2 0 0 0-.802-.563 2.7 2.7 0 0 0-1.058-.195H71.24v5.667h1.564a2.7 2.7 0 0 0 1.058-.195q.473-.195.802-.557a2.55 2.55 0 0 0 .506-.89q.178-.53.178-1.192m6.763 4.025h-.618a.7.7 0 0 1-.306-.056q-.111-.06-.167-.239l-.122-.406a5 5 0 0 1-.429.345q-.206.144-.428.245a2.2 2.2 0 0 1-.474.15q-.25.05-.556.05-.362 0-.668-.095a1.5 1.5 0 0 1-.529-.295 1.34 1.34 0 0 1-.34-.484 1.7 1.7 0 0 1-.122-.673q0-.324.167-.635.172-.317.568-.568.395-.255 1.052-.423.657-.166 1.63-.19v-.333q.001-.573-.244-.846-.24-.279-.702-.279a1.7 1.7 0 0 0-.946.257q-.161.094-.3.172a.6.6 0 0 1-.306.078.4.4 0 0 1-.24-.072.6.6 0 0 1-.161-.178l-.25-.44q.984-.902 2.376-.902.501 0 .89.167a1.86 1.86 0 0 1 1.081 1.152q.144.407.144.89zm-2.672-.857q.212 0 .39-.04.178-.038.334-.116a1.7 1.7 0 0 0 .306-.19q.15-.116.3-.272v-.963a7 7 0 0 0-1.007.106 2.6 2.6 0 0 0-.645.189.86.86 0 0 0-.351.273.6.6 0 0 0-.1.34q0 .36.211.517.217.156.563.156Zm5.566.946q-.74 0-1.14-.417-.402-.423-.402-1.164v-3.19h-.578a.3.3 0 0 1-.195-.072q-.078-.072-.078-.217v-.545l.918-.15.29-1.56a.28.28 0 0 1 .1-.172.34.34 0 0 1 .206-.061h.712v1.798h1.503v.98h-1.503v3.095q0 .267.134.417t.356.15a.7.7 0 0 0 .212-.027q.09-.034.15-.067.067-.034.117-.062a.2.2 0 0 1 .1-.033q.06 0 .1.034a.4.4 0 0 1 .084.088l.412.669q-.3.25-.69.378t-.808.128m6.571-.089h-.618a.7.7 0 0 1-.306-.056q-.111-.06-.167-.239l-.122-.406a5 5 0 0 1-.429.345q-.206.144-.428.245a2.2 2.2 0 0 1-.474.15q-.25.05-.556.05-.362 0-.668-.095a1.5 1.5 0 0 1-.53-.295 1.34 1.34 0 0 1-.339-.484 1.7 1.7 0 0 1-.122-.673q0-.324.167-.635.172-.317.568-.568.395-.255 1.052-.423.657-.166 1.63-.19v-.333q.001-.573-.244-.846-.24-.279-.702-.279a1.7 1.7 0 0 0-.946.257l-.3.172a.6.6 0 0 1-.307.078.4.4 0 0 1-.239-.072.6.6 0 0 1-.161-.178l-.25-.44q.984-.902 2.376-.902.5 0 .89.167a1.86 1.86 0 0 1 1.081 1.152q.144.407.144.89zm-2.672-.857q.212 0 .39-.04.178-.038.334-.116a1.7 1.7 0 0 0 .306-.19q.15-.116.3-.272v-.963a7 7 0 0 0-1.007.106 2.6 2.6 0 0 0-.645.189.86.86 0 0 0-.351.273.6.6 0 0 0-.1.34q0 .36.211.517.217.156.562.156\"/><path fill=\"#ce261e\" d=\"M48 33h54v4H48z\"/></svg>`\n","import * as React from \"react\"\nimport {\n    OWID_LOGO_SVG,\n    CORE_LOGO_SVG,\n    SMALL_OWID_LOGO_SVG,\n    OWID_WORDMARK_SVG,\n} from \"./LogosSVG\"\nimport { LogoOption } from \"@ourworldindata/types\"\nimport { makeFigmaId, roundForSvg } from \"@ourworldindata/utils\"\n\ninterface LogoAttributes {\n    svg: string\n    width: number\n    height: number\n    targetHeight: number\n    url?: string\n}\n\nconst logos: Record<LogoOption, LogoAttributes> = {\n    owid: {\n        svg: OWID_LOGO_SVG,\n        width: 65,\n        height: 36,\n        targetHeight: 36,\n        url: \"https://ourworldindata.org\",\n    },\n    wordmark: {\n        svg: OWID_WORDMARK_SVG,\n        width: 65,\n        height: 24,\n        targetHeight: 24,\n        url: \"https://ourworldindata.org\",\n    },\n    \"core+owid\": {\n        svg: CORE_LOGO_SVG,\n        width: 102,\n        height: 37,\n        targetHeight: 36,\n    },\n}\n\n// owid logo optimized for small sizes\nconst smallOwidLogo = {\n    svg: SMALL_OWID_LOGO_SVG,\n    width: 51,\n    height: 28,\n    targetHeight: 28,\n    url: \"https://ourworldindata.org\",\n}\n\ninterface LogoProps {\n    logo?: LogoOption\n    isLink: boolean\n    heightScale?: number\n    useSmallVersion?: boolean\n}\n\nexport class Logo {\n    props: LogoProps\n    constructor(props: LogoProps) {\n        this.props = props\n    }\n\n    private get logo(): LogoOption {\n        return this.props.logo ?? LogoOption.owid\n    }\n\n    private get spec(): LogoAttributes {\n        if (this.props.useSmallVersion && this.logo === LogoOption.owid) {\n            return smallOwidLogo\n        }\n        return logos[this.logo]\n    }\n\n    private get targetHeight(): number {\n        return (this.props.heightScale ?? 1) * this.spec.targetHeight\n    }\n\n    private get scale(): number {\n        return this.targetHeight / this.spec.height\n    }\n\n    get width(): number {\n        return this.spec.width * this.scale\n    }\n    get height(): number {\n        return this.spec.height * this.scale\n    }\n\n    renderSVG(targetX: number, targetY: number): React.ReactElement {\n        const { scale } = this\n        const svg =\n            (this.spec.svg.match(/<svg>(.*)<\\/svg>/) || \"\")[1] || this.spec.svg\n        return (\n            <g\n                id={makeFigmaId(\"logo\")}\n                transform={`translate(${roundForSvg(targetX)}, ${roundForSvg(\n                    targetY\n                )}) scale(${roundForSvg(scale)})`}\n                dangerouslySetInnerHTML={{ __html: svg }}\n            />\n        )\n    }\n\n    renderHTML(): React.ReactElement {\n        const { spec } = this\n        const props: React.HTMLAttributes<HTMLElement> = {\n            className: \"logo\",\n            dangerouslySetInnerHTML: { __html: spec.svg },\n            style: { height: `${this.targetHeight}px` },\n        }\n        if (this.props.isLink && spec.url)\n            return (\n                <a {...props} href={spec.url} target=\"_blank\" rel=\"noopener\" />\n            )\n        else return <div {...props} />\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport * as React from \"react\"\nimport {\n    LogoOption,\n    makeFigmaId,\n    Bounds,\n    FontFamily,\n    openLinkInNewTabAttrs,\n} from \"@ourworldindata/utils\"\nimport {\n    MarkdownTextWrap,\n    MarkdownTextWrapHtml,\n    MarkdownTextWrapSvg,\n    TextWrapGroup,\n    type TextWrapFragment,\n} from \"@ourworldindata/components\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { Logo } from \"../captionedChart/Logos\"\n\nimport { HeaderManager } from \"./HeaderManager\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    GRAPHER_FRAME_PADDING_HORIZONTAL,\n    GRAPHER_FRAME_PADDING_VERTICAL,\n    GRAPHER_HEADER_CLASS,\n} from \"../core/GrapherConstants\"\nimport {\n    GRAPHER_DARK_TEXT,\n    GRAPHER_LIGHT_TEXT,\n    GRAY_100,\n} from \"../color/ColorConstants\"\nimport { roundFontSize, scaleFontSize } from \"../chart/ChartUtils.js\"\n\ninterface HeaderProps {\n    manager: HeaderManager\n    maxWidth?: number\n}\n\nabstract class AbstractHeader<\n    Props extends HeaderProps = HeaderProps,\n> extends React.Component<Props> {\n    protected verticalPadding = 4\n\n    constructor(props: Props) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed protected get manager(): HeaderManager {\n        return this.props.manager\n    }\n\n    @computed protected get maxWidth(): number {\n        return this.props.maxWidth ?? DEFAULT_GRAPHER_BOUNDS.width\n    }\n\n    @computed protected get useBaseFontSize(): boolean {\n        return !!this.manager.useBaseFontSize\n    }\n\n    @computed protected get baseFontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed protected get showTitle(): boolean {\n        return !this.manager.hideTitle && !!this.titleText\n    }\n\n    @computed protected get showSubtitle(): boolean {\n        return !this.manager.hideSubtitle && !!this.subtitleText\n    }\n\n    @computed protected get titleText(): string {\n        return this.manager.mainTitle?.trim() ?? \"\"\n    }\n\n    @computed protected get titleAnnotationText(): string {\n        return this.manager.titleAnnotation?.trim() ?? \"\"\n    }\n\n    @computed protected get titleAriaLabel(): string | undefined {\n        return this.manager.fullTitle?.trim() || undefined\n    }\n\n    @computed private get subtitleText(): string {\n        return this.manager.effectiveSubtitle?.trim() ?? \"\"\n    }\n\n    @computed get logo(): Logo | undefined {\n        const { manager } = this\n        if (manager.hideLogo) return undefined\n        const isOwidLogo = !manager.logo || manager.logo === LogoOption.owid\n        return new Logo({\n            logo: manager.logo as any,\n            isLink: !!manager.shouldLinkToOwid,\n            // if it's the OWID logo, use the small version; otherwise, decrease the size\n            heightScale: manager.isSmall && !isOwidLogo ? 0.775 : 1,\n            useSmallVersion: manager.isSmall && isOwidLogo,\n        })\n    }\n\n    @computed protected get logoWidth(): number {\n        return this.logo ? this.logo.width : 0\n    }\n\n    @computed private get logoHeight(): number {\n        return this.logo ? this.logo.height : 0\n    }\n\n    @computed get titleFontWeight(): number {\n        return 600\n    }\n\n    @computed get titleLineHeight(): number {\n        return this.manager.isSmall ? 1.1 : 1.2\n    }\n\n    @computed private get initialTitleFontSize(): number {\n        return this.manager.isStaticAndSmall\n            ? 25\n            : this.useBaseFontSize\n              ? (25 / BASE_FONT_SIZE) * this.baseFontSize\n              : this.manager.isNarrow\n                ? 18\n                : this.manager.isMedium\n                  ? 20\n                  : 25\n    }\n\n    @computed private get titleAnnotationFontSize(): number {\n        return _.clamp(\n            roundFontSize(0.72 * this.initialTitleFontSize),\n            this.subtitleFontSize, // Never smaller than the subtitle\n            18\n        )\n    }\n\n    @computed get title(): TextWrapGroup {\n        const logoPadding = this.manager.isNarrow\n            ? 12\n            : this.manager.isSmall\n              ? 16\n              : 24\n\n        const makeTitle = (fontSize: number): TextWrapGroup => {\n            const mainFragment: TextWrapFragment = {\n                text: this.titleText,\n            }\n\n            const annotationFragment: TextWrapFragment = {\n                text: this.titleAnnotationText,\n                fontFamily: FontFamily.Lato,\n                fontWeight: 700,\n                // Make sure the annotation is never bigger than the title,\n                // (relevant if the title has been downsized to fit)\n                fontSize: Math.min(this.titleAnnotationFontSize, fontSize),\n                color: GRAPHER_LIGHT_TEXT,\n                inlineGap: Math.min(6, Math.round(0.4 * fontSize)),\n                newLineGap: this.verticalPadding,\n                newLine: \"avoid-wrap\",\n            }\n\n            return new TextWrapGroup({\n                fragments: [mainFragment, annotationFragment],\n                maxWidth: this.maxWidth - this.logoWidth - logoPadding,\n                fontFamily: FontFamily.PlayfairDisplay,\n                fontWeight: this.titleFontWeight,\n                lineHeight: this.titleLineHeight,\n                fontSize,\n            })\n        }\n\n        // Decrease the initial font size by no more than 15% using 0.5px steps\n        const initialFontSize = roundFontSize(this.initialTitleFontSize)\n        const potentialFontSizes = _.range(\n            initialFontSize,\n            initialFontSize * 0.85,\n            -0.5\n        )\n\n        // Laying out a title is expensive, so candidates are only created\n        // when they're actually needed\n        const candidates: (TextWrapGroup | undefined)[] = []\n        const candidateAt = (index: number): TextWrapGroup =>\n            (candidates[index] ??= makeTitle(potentialFontSizes[index]))\n\n        // The first candidate is the title at its initial font size\n        const title = candidateAt(0)\n\n        // If the title is already a single line, no need to decrease font size\n        if (title.lineCount <= 1) return title\n\n        // Use binary search to find the largest font size that satisfies\n        // the given condition, or undefined if none do\n        const findLargestFontSizeThatFits = (\n            fits: (candidate: TextWrapGroup) => boolean\n        ): TextWrapGroup | undefined => {\n            const index = R.sortedIndexWith(\n                potentialFontSizes,\n                (_fontSize, index) => !fits(candidateAt(index))\n            )\n            // Nothing fits if the check fails for every candidate\n            if (index === potentialFontSizes.length) return undefined\n            return candidateAt(index)\n        }\n\n        // Try to fit the title (including the annotation) into a single\n        // line if possible\n        const fitsFullTitleInOneLine = (candidate: TextWrapGroup): boolean =>\n            candidate.lineCount <= 1\n        const singleLineTitle = findLargestFontSizeThatFits(\n            fitsFullTitleInOneLine\n        )\n        if (singleLineTitle) return singleLineTitle\n\n        // Try to fit the main title text alone into a single line,\n        // with the annotation on its own line\n        const fitsMainTextInOneLine = (candidate: TextWrapGroup): boolean =>\n            candidate.fragmentLineCounts[0] === 1\n        const singleLineMainText = findLargestFontSizeThatFits(\n            fitsMainTextInOneLine\n        )\n        if (singleLineMainText) return singleLineMainText\n\n        // Otherwise, return the title at a reduced font size: either it now\n        // spans fewer lines, or the multi-line title at least doesn't take\n        // up quite that much space\n        const hasFewerLinesThanTitle = (candidate: TextWrapGroup): boolean =>\n            candidate.lineCount < title.lineCount\n        const candidateWithFewerLines = findLargestFontSizeThatFits(\n            hasFewerLinesThanTitle\n        )\n        if (candidateWithFewerLines) return candidateWithFewerLines\n\n        // If none of the candidates have fewer lines than the original title,\n        // return the candidate with the smallest font size\n        return candidateAt(potentialFontSizes.length - 1)\n    }\n\n    @computed private get titleStyle(): React.CSSProperties {\n        return { ...this.title.style, overflowY: \"visible\" }\n    }\n\n    @computed get useFullWidthForSubtitle(): boolean {\n        const subtitleWidth = Bounds.forText(this.subtitleText, {\n            fontSize: this.subtitleFontSize,\n        }).width\n        const isSmall =\n            this.manager.isSemiNarrow || this.manager.isStaticAndSmall\n        return (\n            // if the subtitle is entirely below the logo, we can go underneath it\n            this.title.height > this.logoHeight || // on narrow screens, long subtitles should also go underneath the logo\n            !!(isSmall && subtitleWidth > 2 * this.maxWidth)\n        )\n    }\n\n    @computed get subtitleMarginTop(): number {\n        let padding = this.verticalPadding\n\n        // make sure the subtitle doesn't overlap with the logo\n        if (\n            this.useFullWidthForSubtitle &&\n            this.logoHeight > this.title.height\n        ) {\n            padding += this.logoHeight - this.title.height\n        }\n\n        return padding\n    }\n\n    @computed get subtitleWidth(): number {\n        return this.useFullWidthForSubtitle\n            ? this.maxWidth\n            : this.maxWidth - this.logoWidth - 12\n    }\n\n    @computed get subtitleFontSize(): number {\n        if (this.manager.isStaticAndSmall) return 16\n        if (this.useBaseFontSize) {\n            return scaleFontSize(15, this.baseFontSize)\n        }\n        return this.manager.isSmall ? 12 : this.manager.isMedium ? 13 : 15\n    }\n\n    @computed get subtitleLineHeight(): number {\n        return this.manager.isMedium ? 1.2 : 1.28571\n    }\n\n    @computed get subtitle(): MarkdownTextWrap {\n        return new MarkdownTextWrap({\n            maxWidth: this.subtitleWidth,\n            fontSize: this.subtitleFontSize,\n            text: this.subtitleText,\n            lineHeight: this.subtitleLineHeight,\n            detailsOrderedByReference: this.manager.detailsOrderedByReference,\n        })\n    }\n\n    @computed get height(): number {\n        const {\n            title,\n            subtitle,\n            showTitle,\n            showSubtitle,\n            subtitleMarginTop,\n            logoHeight,\n            hasContent,\n        } = this\n        if (!hasContent) return 0\n        return Math.max(\n            (showTitle ? title.height : 0) +\n                (showSubtitle ? subtitle.height + subtitleMarginTop : 0),\n            logoHeight\n        )\n    }\n\n    @computed get hasContent(): boolean {\n        return !!this.logo || this.showTitle || this.showSubtitle\n    }\n\n    private renderTitle(): React.ReactElement {\n        const { manager } = this\n\n        // Avoid linking to a grapher/data page when there is none, or when\n        // we're already on it\n        if (\n            !manager.canonicalUrl ||\n            (manager.isOnCanonicalUrl && !manager.isInIFrame)\n        ) {\n            return (\n                <h1 style={this.titleStyle} aria-label={this.titleAriaLabel}>\n                    <MarkdownTextWrapHtml textWrap={this.title} />\n                </h1>\n            )\n        }\n\n        // On smaller screens, make the whole width of the header clickable\n        if (manager.isMedium) {\n            return (\n                <a\n                    href={manager.canonicalUrl}\n                    data-track-note=\"chart_click_title\"\n                    {...openLinkInNewTabAttrs(manager.isInIFrame)}\n                >\n                    <h1\n                        style={this.titleStyle}\n                        aria-label={this.titleAriaLabel}\n                    >\n                        <MarkdownTextWrapHtml textWrap={this.title} />\n                    </h1>\n                </a>\n            )\n        }\n\n        // On larger screens, only make the title text itself clickable\n        return (\n            <h1 style={this.titleStyle}>\n                <a\n                    href={manager.canonicalUrl}\n                    data-track-note=\"chart_click_title\"\n                    aria-label={this.titleAriaLabel}\n                    {...openLinkInNewTabAttrs(manager.isInIFrame)}\n                >\n                    <MarkdownTextWrapHtml textWrap={this.title} />\n                </a>\n            </h1>\n        )\n    }\n\n    private renderSubtitle(): React.ReactElement {\n        const style: React.CSSProperties = {\n            ...this.subtitle.style,\n            marginTop: this.subtitleMarginTop,\n            width: this.useFullWidthForSubtitle ? \"100%\" : undefined,\n            // make sure there are no scrollbars on subtitle\n            overflowY: \"hidden\",\n        }\n        return (\n            <p style={style}>\n                <MarkdownTextWrapHtml textWrap={this.subtitle} />\n            </p>\n        )\n    }\n\n    override render(): React.ReactElement | null {\n        if (!this.hasContent) return null\n        return (\n            <div\n                className=\"HeaderHTML\"\n                style={{\n                    padding: `${GRAPHER_FRAME_PADDING_VERTICAL}px ${GRAPHER_FRAME_PADDING_HORIZONTAL}px`,\n                    paddingBottom: 0,\n                }}\n            >\n                {this.logo && this.logo.renderHTML()}\n                {(this.showTitle || this.showSubtitle) && (\n                    <div style={{ minHeight: this.height }}>\n                        {this.showTitle && this.renderTitle()}\n                        {this.showSubtitle && this.renderSubtitle()}\n                    </div>\n                )}\n            </div>\n        )\n    }\n}\n\ninterface StaticHeaderProps extends HeaderProps {\n    targetX: number\n    targetY: number\n}\n\n@observer\nexport class Header extends AbstractHeader<HeaderProps> {}\n\n@observer\nexport class StaticHeader extends AbstractHeader<StaticHeaderProps> {\n    protected override verticalPadding = 6\n\n    constructor(props: StaticHeaderProps) {\n        super(props)\n\n        makeObservable(this)\n    }\n\n    override get titleLineHeight(): number {\n        return this.manager.isStaticAndSmall ? 1.1 : 1.2\n    }\n\n    override get subtitleLineHeight(): number {\n        return 1.2\n    }\n\n    override render(): React.ReactElement | null {\n        const { targetX: x, targetY: y } = this.props\n        const {\n            title,\n            logo,\n            subtitle,\n            manager,\n            maxWidth,\n            showTitle,\n            showSubtitle,\n        } = this\n        const hasContent = !!logo || showTitle || showSubtitle\n        if (!hasContent) return null\n        return (\n            <g id={makeFigmaId(GRAPHER_HEADER_CLASS)} className=\"HeaderView\">\n                {logo &&\n                    logo.height > 0 &&\n                    logo.renderSVG(x + maxWidth - logo.width, y)}\n                {this.showTitle && (\n                    <a\n                        id={makeFigmaId(\"title\")}\n                        href={manager.canonicalUrl}\n                        {...openLinkInNewTabAttrs(manager.isInIFrame)}\n                    >\n                        <MarkdownTextWrapSvg\n                            textWrap={title}\n                            x={x}\n                            y={y}\n                            fill={GRAY_100}\n                        />\n                    </a>\n                )}\n                {this.showSubtitle && (\n                    <MarkdownTextWrapSvg\n                        textWrap={subtitle}\n                        x={x}\n                        y={\n                            y +\n                            (this.showTitle\n                                ? title.height + this.subtitleMarginTop\n                                : 0)\n                        }\n                        id={makeFigmaId(\"subtitle\")}\n                        fill={GRAPHER_DARK_TEXT}\n                        detailsMarker={this.manager.detailsMarkerInSvg}\n                    />\n                )}\n            </g>\n        )\n    }\n}\n","import { observer } from \"mobx-react\"\nimport * as React from \"react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faCode,\n    faShareAlt,\n    faLink,\n    faEdit,\n    faPanorama,\n    faImage,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    canWriteToClipboard,\n    copyToClipboard,\n    isAndroid,\n    isIOS,\n} from \"@ourworldindata/utils\"\nimport { GrapherModal } from \"../core/GrapherConstants\"\nimport { isTargetOutsideElement } from \"../chart/ChartUtils.js\"\nimport { GrapherRasterizeFn } from \"../captionedChart/StaticChartRasterizer.js\"\n\nexport interface ShareMenuManager {\n    slug?: string\n    fullTitle?: string\n    canonicalUrl?: string\n    editUrl?: string\n    createNarrativeChartUrl?: string\n    activeModal?: GrapherModal\n    rasterize: GrapherRasterizeFn\n}\n\ninterface ShareMenuProps {\n    manager: ShareMenuManager\n    onDismiss?: () => void\n    right?: number\n}\n\ninterface ShareMenuState {\n    canWriteToClipboard: boolean\n    copiedLink: boolean\n    copiedPng: boolean\n}\n\ntype ShareApiManager = Pick<ShareMenuManager, \"canonicalUrl\" | \"fullTitle\">\n\nconst getShareData = (manager: ShareApiManager): ShareData | undefined => {\n    if (!manager.canonicalUrl) return undefined\n\n    return {\n        title: manager.fullTitle ?? \"\",\n        url: manager.canonicalUrl,\n    }\n}\n\nconst canUseShareApi = (manager: ShareApiManager): boolean => {\n    const shareData = getShareData(manager)\n    if (!shareData) return false\n\n    return (\n        \"share\" in navigator &&\n        \"canShare\" in navigator &&\n        navigator.canShare(shareData)\n    )\n}\n\n// On mobile OSs, the system-level share API does a way better job of providing\n// relevant options to the user than our own <ShareMenu> does - for example,\n// quick access to messaging apps, the user's frequent contacts, etc.\n// So, on Android and iOS, we want to just show the system-level share dialog\n// immediately when the user clicks the share button, rather than showing our\n// own menu.\n// See https://github.com/owid/owid-grapher/issues/3446\n// -@marcelgerber, 2024-04-24\nexport const shouldShareUsingShareApi = (manager: ShareApiManager): boolean =>\n    (isAndroid() || isIOS()) && canUseShareApi(manager)\n\nexport const shareUsingShareApi = async (\n    manager: ShareApiManager\n): Promise<void> => {\n    if (!navigator.share) return\n\n    const shareData = getShareData(manager)\n    if (!shareData) return\n\n    try {\n        await navigator.share(shareData)\n    } catch (err) {\n        console.error(\"couldn't share using navigator.share\", err)\n    }\n}\n\n@observer\nexport class ShareMenu extends React.Component<ShareMenuProps, ShareMenuState> {\n    private readonly menuRef = React.createRef<HTMLDivElement>()\n\n    constructor(props: ShareMenuProps) {\n        super(props)\n\n        makeObservable(this)\n\n        this.state = {\n            canWriteToClipboard: false,\n            copiedLink: false,\n            copiedPng: false,\n        }\n    }\n\n    static shouldShow(manager: ShareMenuManager): boolean {\n        const test = new ShareMenu({ manager })\n        return test.showShareMenu\n    }\n\n    @computed get manager(): ShareMenuManager {\n        return this.props.manager\n    }\n\n    @computed get title(): string {\n        return this.manager.fullTitle ?? \"\"\n    }\n\n    @computed get showShareMenu(): boolean {\n        return !!this.canonicalUrl || !!this.manager.editUrl\n    }\n\n    @computed get canonicalUrl(): string | undefined {\n        return this.manager.canonicalUrl\n    }\n\n    @action.bound dismiss(): void {\n        this.props.onDismiss?.()\n    }\n\n    @action.bound onClickSomewhere(e: Event): void {\n        if (\n            this.menuRef.current &&\n            e.target &&\n            isTargetOutsideElement(e.target, this.menuRef.current)\n        ) {\n            this.dismiss()\n        }\n    }\n\n    override componentDidMount(): void {\n        document.addEventListener(\"click\", this.onClickSomewhere)\n        void canWriteToClipboard().then((canWriteToClipboard) =>\n            this.setState({ canWriteToClipboard })\n        )\n    }\n\n    override componentWillUnmount(): void {\n        document.removeEventListener(\"click\", this.onClickSomewhere)\n    }\n\n    @action.bound onEmbed(e: React.MouseEvent): void {\n        const { canonicalUrl, manager } = this\n        if (!canonicalUrl) return\n        manager.activeModal = GrapherModal.Embed\n        this.dismiss()\n        e.stopPropagation()\n    }\n\n    @action.bound async onNavigatorShare(): Promise<void> {\n        await shareUsingShareApi(this.manager)\n    }\n\n    @action.bound async onCopyUrl(): Promise<void> {\n        if (!this.canonicalUrl) return\n\n        try {\n            this.setState({ copiedLink: false, copiedPng: false })\n            const success = await copyToClipboard(this.canonicalUrl)\n            if (success) {\n                this.setState({ copiedLink: true, copiedPng: false })\n            } else {\n                console.error(\"Failed to copy link to clipboard\")\n            }\n        } catch (err) {\n            console.error(\n                \"couldn't copy to clipboard using navigator.clipboard\",\n                err\n            )\n        }\n    }\n\n    @action.bound async onCopyPng(): Promise<void> {\n        const { manager } = this\n\n        try {\n            this.setState({ copiedLink: false, copiedPng: false })\n\n            const rasterizePromise = manager.rasterize({\n                // Don't include DoDs in the static export when copying PNG to clipboard\n                includeDetails: false,\n            })\n\n            // Safari needs the clipboard.write call to happen without a delay after the user interaction,\n            // so it's important that we pass a promise to ClipboardItem, not await the rasterization first\n            // see https://stackoverflow.com/a/68241516/10670163\n            await navigator.clipboard.write([\n                new ClipboardItem({\n                    \"image/png\": rasterizePromise.then(({ blob }) => blob),\n                }),\n            ])\n\n            this.setState({ copiedLink: false, copiedPng: true })\n        } catch (err) {\n            console.error(\"couldn't copy PNG to clipboard\", err)\n        }\n    }\n\n    @computed get canUseShareApi(): boolean {\n        return canUseShareApi(this.manager)\n    }\n\n    @computed get showCopyPngButton(): boolean {\n        return this.state.canWriteToClipboard\n    }\n\n    override render(): React.ReactElement {\n        const { canUseShareApi, manager, showCopyPngButton } = this\n        const { editUrl, createNarrativeChartUrl } = manager\n\n        const width = 200\n        const right = this.props.right ?? 0\n        const style: React.CSSProperties = {\n            width,\n            right: Math.max(-width * 0.5, -right),\n        }\n\n        return (\n            <div className=\"ShareMenu\" ref={this.menuRef} style={style}>\n                <h2>Share</h2>\n                {this.canonicalUrl && (\n                    <a\n                        className=\"embed\"\n                        title=\"Embed this interactive visualization in another HTML document, e.g. a blog post or website\"\n                        data-track-note=\"chart_share_embed\"\n                        onClick={this.onEmbed}\n                    >\n                        <FontAwesomeIcon className=\"icon\" icon={faCode} />\n                        <span className=\"label\">Embed this chart</span>\n                    </a>\n                )}\n                {canUseShareApi && (\n                    <a\n                        title=\"Share this visualization with an app on your device\"\n                        data-track-note=\"chart_share_navigator\"\n                        onClick={this.onNavigatorShare}\n                    >\n                        <FontAwesomeIcon className=\"icon\" icon={faShareAlt} />\n                        <span className=\"label\">Share via&hellip;</span>\n                    </a>\n                )}\n                {showCopyPngButton && (\n                    <a\n                        title=\"Copy an image of this chart to the clipboard\"\n                        data-track-note=\"chart_share_copy_png\"\n                        onClick={this.onCopyPng}\n                    >\n                        <FontAwesomeIcon className=\"icon\" icon={faImage} />\n                        <span className=\"label\">\n                            {this.state.copiedPng\n                                ? \"Chart copied!\"\n                                : \"Copy chart as image\"}\n                        </span>\n                    </a>\n                )}\n                {this.state.canWriteToClipboard && this.canonicalUrl && (\n                    <a\n                        title=\"Copy a link to this chart to the clipboard\"\n                        data-track-note=\"chart_share_copylink\"\n                        onClick={this.onCopyUrl}\n                    >\n                        <FontAwesomeIcon className=\"icon\" icon={faLink} />\n                        <span className=\"label\">\n                            {this.state.copiedLink\n                                ? \"Link copied!\"\n                                : \"Copy link to chart\"}\n                        </span>\n                    </a>\n                )}\n                {editUrl && (\n                    <a\n                        title=\"Edit chart\"\n                        href={editUrl}\n                        target=\"_blank\"\n                        rel=\"noopener\"\n                    >\n                        <FontAwesomeIcon className=\"icon\" icon={faEdit} />\n                        <span className=\"label\">Edit</span>\n                    </a>\n                )}\n                {createNarrativeChartUrl && (\n                    <a\n                        title=\"Create a narrative chart\"\n                        href={createNarrativeChartUrl}\n                        target=\"_blank\"\n                        rel=\"noopener\"\n                    >\n                        <FontAwesomeIcon className=\"icon\" icon={faPanorama} />\n                        <span className=\"label\">Create narrative chart</span>\n                    </a>\n                )}\n            </div>\n        )\n    }\n}\n","import * as React from \"react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faShareNodes,\n    faExpand,\n    faCompress,\n    faDownload,\n    faArrowRight,\n    IconDefinition,\n    faHeart,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    ShareMenu,\n    ShareMenuManager,\n    shareUsingShareApi,\n    shouldShareUsingShareApi,\n} from \"./ShareMenu.js\"\nimport { Bounds, Tippy } from \"@ourworldindata/utils\"\nimport classNames from \"clsx\"\nimport {\n    DEFAULT_GRAPHER_BOUNDS,\n    GrapherModal,\n} from \"../core/GrapherConstants.js\"\nimport { DownloadModalTabName } from \"../modal/DownloadModal.js\"\n\nexport interface ActionButtonsManager extends ShareMenuManager {\n    isAdmin?: boolean\n    isShareMenuActive?: boolean\n    hideShareButton?: boolean\n    hideDonateButton?: boolean\n    hideExploreTheDataButton?: boolean\n    isInIFrame?: boolean\n    canonicalUrl?: string\n    isInFullScreenMode?: boolean\n    activeModal?: GrapherModal\n    activeDownloadModalTab?: DownloadModalTabName\n    isOnTableTab?: boolean\n    hideFullScreenButton?: boolean\n    hideDownloadButton?: boolean\n}\n\n// keep in sync with sass variables in ActionButtons.scss\nconst BUTTON_HEIGHT = 32\nconst PADDING_BETWEEN_BUTTONS = 8\nconst PADDING_BETWEEN_ICON_AND_LABEL = 8\nconst PADDING_X = 12\n\nconst BUTTON_WIDTH_ICON_ONLY = BUTTON_HEIGHT\n\ninterface ActionButtonsProps {\n    manager: ActionButtonsManager\n    maxWidth?: number\n}\n\n@observer\nexport class ActionButtons extends React.Component<ActionButtonsProps> {\n    constructor(props: ActionButtonsProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed private get manager(): ActionButtonsManager {\n        return this.props.manager\n    }\n\n    @computed protected get maxWidth(): number {\n        return this.props.maxWidth ?? DEFAULT_GRAPHER_BOUNDS.width\n    }\n\n    @computed get height(): number {\n        return BUTTON_HEIGHT\n    }\n\n    @computed private get widthWithButtonLabels(): number {\n        const {\n            buttonCount,\n            hasDownloadButton,\n            hasDonateButton,\n            hasShareButton,\n            hasFullScreenButton,\n            hasExploreTheDataButton,\n            downloadButtonWithLabelWidth,\n            donateButtonWithLabelWidth,\n            shareButtonWithLabelWidth,\n            fullScreenButtonWithLabelWidth,\n            exploreTheDataButtonWithLabelWidth,\n        } = this\n\n        let width = 0\n        if (hasDownloadButton) {\n            width += downloadButtonWithLabelWidth\n        }\n        if (hasShareButton) {\n            width += shareButtonWithLabelWidth\n        }\n        if (hasFullScreenButton) {\n            width += fullScreenButtonWithLabelWidth\n        }\n        if (hasDonateButton) {\n            width += donateButtonWithLabelWidth\n        }\n        if (hasExploreTheDataButton) {\n            width += exploreTheDataButtonWithLabelWidth\n        }\n\n        return width + Math.max(0, buttonCount - 1) * PADDING_BETWEEN_BUTTONS\n    }\n\n    @computed get widthWithIconsOnly(): number {\n        const {\n            buttonCount,\n            hasExploreTheDataButton,\n            exploreTheDataButtonWidth,\n        } = this\n\n        let width = 0\n        let remainingButtonCount = buttonCount\n\n        // When shown, the explore the data button always has a label\n        if (hasExploreTheDataButton) {\n            width += exploreTheDataButtonWidth\n            remainingButtonCount--\n        }\n        width += remainingButtonCount * BUTTON_WIDTH_ICON_ONLY\n        width += Math.max(0, buttonCount - 1) * PADDING_BETWEEN_BUTTONS\n\n        return width\n    }\n\n    @computed get showButtonLabels(): boolean {\n        const { maxWidth, widthWithButtonLabels } = this\n        return widthWithButtonLabels <= maxWidth\n    }\n\n    @computed get width(): number {\n        const { showButtonLabels, widthWithButtonLabels, widthWithIconsOnly } =\n            this\n        return showButtonLabels ? widthWithButtonLabels : widthWithIconsOnly\n    }\n\n    private static computeButtonWidth(label: string): number {\n        const labelWidth = Bounds.forText(label, { fontSize: 13 }).width\n        return (\n            2 * PADDING_X +\n            12 + // icon width\n            PADDING_BETWEEN_ICON_AND_LABEL +\n            labelWidth\n        )\n    }\n\n    @computed private get downloadButtonWithLabelWidth(): number {\n        return ActionButtons.computeButtonWidth(\"Download\")\n    }\n\n    @computed private get shareButtonWithLabelWidth(): number {\n        return ActionButtons.computeButtonWidth(\"Share\")\n    }\n\n    @computed private get fullScreenButtonLabel(): string {\n        const { isInFullScreenMode } = this.manager\n        return isInFullScreenMode ? \"Exit full-screen\" : \"Enter full-screen\"\n    }\n\n    @computed private get fullScreenButtonWithLabelWidth(): number {\n        return ActionButtons.computeButtonWidth(this.fullScreenButtonLabel)\n    }\n\n    @computed private get donateButtonWithLabelWidth(): number {\n        return ActionButtons.computeButtonWidth(\"Donate\")\n    }\n\n    @computed private get exploreTheDataButtonWithLabelWidth(): number {\n        return ActionButtons.computeButtonWidth(\"Explore the data\")\n    }\n\n    @computed private get downloadButtonWidth(): number {\n        const {\n            hasDownloadButton,\n            showButtonLabels,\n            downloadButtonWithLabelWidth,\n        } = this\n        if (!hasDownloadButton) return 0\n        if (!showButtonLabels) return BUTTON_WIDTH_ICON_ONLY\n        return downloadButtonWithLabelWidth\n    }\n\n    @computed private get shareButtonWidth(): number {\n        const { hasShareButton, showButtonLabels, shareButtonWithLabelWidth } =\n            this\n        if (!hasShareButton) return 0\n        if (!showButtonLabels) return BUTTON_WIDTH_ICON_ONLY\n        return shareButtonWithLabelWidth\n    }\n\n    @computed private get fullScreenButtonWidth(): number {\n        const {\n            hasFullScreenButton,\n            showButtonLabels,\n            fullScreenButtonWithLabelWidth,\n        } = this\n        if (!hasFullScreenButton) return 0\n        if (!showButtonLabels) return BUTTON_WIDTH_ICON_ONLY\n        return fullScreenButtonWithLabelWidth\n    }\n\n    @computed private get donateButtonWidth(): number {\n        const {\n            hasDonateButton,\n            showButtonLabels,\n            donateButtonWithLabelWidth,\n        } = this\n        if (!hasDonateButton) return 0\n        if (!showButtonLabels) return BUTTON_WIDTH_ICON_ONLY\n        return donateButtonWithLabelWidth\n    }\n\n    // the \"Explore the data\" button is never shown without a label\n    @computed private get exploreTheDataButtonWidth(): number {\n        const { hasExploreTheDataButton, exploreTheDataButtonWithLabelWidth } =\n            this\n        if (!hasExploreTheDataButton) return 0\n        return exploreTheDataButtonWithLabelWidth\n    }\n\n    @action.bound toggleShareMenu(): void {\n        if (shouldShareUsingShareApi(this.manager)) {\n            void shareUsingShareApi(this.manager)\n            return\n        }\n        this.manager.isShareMenuActive = !this.manager.isShareMenuActive\n    }\n\n    @action.bound toggleFullScreenMode(): void {\n        this.manager.isInFullScreenMode = !this.manager.isInFullScreenMode\n    }\n\n    @action.bound openDownloadModal(): void {\n        this.manager.activeModal = GrapherModal.Download\n\n        // Open the Data tab when opening from the table view, otherwise open the Vis tab\n        if (this.manager.isOnTableTab) {\n            this.manager.activeDownloadModalTab = DownloadModalTabName.Data\n        } else {\n            this.manager.activeDownloadModalTab = DownloadModalTabName.Vis\n        }\n    }\n\n    @computed private get hasDownloadButton(): boolean {\n        return !this.manager.hideDownloadButton\n    }\n\n    @computed private get hasDonateButton(): boolean {\n        return (\n            !this.manager.hideDonateButton &&\n            !!this.manager.isInIFrame &&\n            !this.manager.isAdmin\n        )\n    }\n\n    @computed private get hasShareButton(): boolean {\n        return (\n            !this.manager.hideShareButton && ShareMenu.shouldShow(this.manager)\n        )\n    }\n\n    @computed private get hasFullScreenButton(): boolean {\n        return !this.manager.hideFullScreenButton && !this.manager.isInIFrame\n    }\n\n    @computed private get hasExploreTheDataButton(): boolean {\n        const { manager } = this\n        if (!manager.canonicalUrl) return false\n        return !manager.hideExploreTheDataButton || !!manager.isInIFrame\n    }\n\n    @computed private get buttonCount(): number {\n        let count = 0\n        if (this.hasDownloadButton) count += 1\n        if (this.hasShareButton) count += 1\n        if (this.hasFullScreenButton) count += 1\n        if (this.hasDonateButton) count += 1\n        if (this.hasExploreTheDataButton) count += 1\n        return count\n    }\n\n    private renderShareMenu(): React.ReactElement {\n        // distance between the right edge of the share button and the inner border of the frame\n        let right = 0\n        if (this.hasFullScreenButton)\n            right += PADDING_BETWEEN_BUTTONS + this.fullScreenButtonWidth\n        if (this.hasExploreTheDataButton)\n            right += PADDING_BETWEEN_BUTTONS + this.exploreTheDataButtonWidth\n\n        return (\n            <ShareMenu\n                manager={this.manager}\n                onDismiss={this.toggleShareMenu}\n                right={right}\n            />\n        )\n    }\n\n    override render(): React.ReactElement {\n        const { manager } = this\n        const { isShareMenuActive } = manager\n\n        return (\n            <div\n                className=\"ActionButtons\"\n                style={{ height: this.height, width: this.width }}\n            >\n                <ul>\n                    {this.hasDownloadButton && (\n                        <li style={{ width: this.downloadButtonWidth }}>\n                            <ActionButton\n                                label=\"Download\"\n                                dataTrackNote=\"chart_click_download\"\n                                showLabel={this.showButtonLabels}\n                                icon={faDownload}\n                                onClick={action((e): void => {\n                                    this.openDownloadModal()\n                                    e.stopPropagation()\n                                })}\n                            />\n                        </li>\n                    )}\n                    {this.hasShareButton && (\n                        <li style={{ width: this.shareButtonWidth }}>\n                            <ActionButton\n                                label=\"Share\"\n                                dataTrackNote=\"chart_click_share\"\n                                showLabel={this.showButtonLabels}\n                                icon={faShareNodes}\n                                onClick={action((e): void => {\n                                    this.toggleShareMenu()\n                                    e.stopPropagation()\n                                })}\n                                isActive={this.manager.isShareMenuActive}\n                            />\n                            {isShareMenuActive && this.renderShareMenu()}\n                        </li>\n                    )}\n                    {this.hasFullScreenButton && (\n                        <li style={{ width: this.fullScreenButtonWidth }}>\n                            <ActionButton\n                                label={this.fullScreenButtonLabel}\n                                dataTrackNote=\"chart_click_fullscreen\"\n                                showLabel={this.showButtonLabels}\n                                icon={\n                                    manager.isInFullScreenMode\n                                        ? faCompress\n                                        : faExpand\n                                }\n                                onClick={this.toggleFullScreenMode}\n                            />\n                        </li>\n                    )}\n                    {this.hasDonateButton && (\n                        <li style={{ width: this.donateButtonWidth }}>\n                            <ActionButton\n                                className=\"ActionButton--donate\"\n                                label=\"Donate\"\n                                dataTrackNote=\"chart_click_donate\"\n                                showLabel={this.showButtonLabels}\n                                icon={faHeart}\n                                href=\"https://ourworldindata.org/donate\"\n                            />\n                        </li>\n                    )}\n                    {this.hasExploreTheDataButton && (\n                        <li style={{ width: this.exploreTheDataButtonWidth }}>\n                            <ActionButton\n                                label=\"Explore the data\"\n                                dataTrackNote=\"chart_click_exploredata\"\n                                icon={faArrowRight}\n                                iconPlacement=\"right\"\n                                href={manager.canonicalUrl}\n                                className=\"ActionButton--exploreData\"\n                                showLabel={true}\n                            />\n                        </li>\n                    )}\n                </ul>\n            </div>\n        )\n    }\n}\n\nexport function ActionButton(props: {\n    label: string\n    icon: IconDefinition\n    iconPlacement?: \"left\" | \"right\"\n    href?: string\n    width?: number\n    dataTrackNote?: string\n    onClick?: React.MouseEventHandler<HTMLDivElement>\n    onMouseDown?: React.MouseEventHandler<HTMLDivElement>\n    showLabel?: boolean\n    isActive?: boolean\n    style?: React.CSSProperties\n    className?: string\n}): React.ReactElement {\n    const buttonClassnames = classNames({\n        active: props.isActive,\n        \"icon-only\": !props.showLabel,\n    })\n\n    const iconPlacement = props.iconPlacement ?? \"left\"\n\n    const buttonContents = (\n        <>\n            {iconPlacement === \"left\" && <FontAwesomeIcon icon={props.icon} />}\n            {props.showLabel && <span className=\"label\">{props.label}</span>}\n            {iconPlacement === \"right\" && <FontAwesomeIcon icon={props.icon} />}\n        </>\n    )\n\n    return (\n        <Tippy\n            content={props.label}\n            theme=\"grapher-dark\"\n            placement=\"top\"\n            arrow={false}\n            offset={[0, 4]}\n            trigger=\"mouseenter\"\n            touch={false}\n            disabled={props.showLabel}\n        >\n            <div\n                className={classNames(\"ActionButton\", props.className)}\n                style={props.style}\n                data-track-note={props.dataTrackNote}\n                onClick={props.onClick}\n                onMouseDown={props.onMouseDown}\n            >\n                {props.href ? (\n                    <a\n                        href={props.href}\n                        className={buttonClassnames}\n                        aria-label={props.label}\n                        target=\"_blank\"\n                        rel=\"noopener\"\n                    >\n                        {buttonContents}\n                    </a>\n                ) : (\n                    <button\n                        className={buttonClassnames}\n                        aria-label={props.label}\n                        type=\"button\"\n                    >\n                        {buttonContents}\n                    </button>\n                )}\n            </div>\n        </Tippy>\n    )\n}\n","import * as React from \"react\"\nimport { observable, computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    Bounds,\n    getRelativeMouse,\n    makeFigmaId,\n    openLinkInNewTabAttrs,\n    Url,\n    Point,\n} from \"@ourworldindata/utils\"\nimport {\n    DATAPAGE_ABOUT_THIS_DATA_SECTION_ID,\n    DATAPAGE_SOURCES_AND_PROCESSING_SECTION_ID,\n    getPrefersReducedMotion,\n    MarkdownTextWrap,\n    MarkdownTextWrapHtml,\n    MarkdownTextWrapSvg,\n    TextWrap,\n    TextWrapSvg,\n} from \"@ourworldindata/components\"\nimport {\n    CHART_LICENSES,\n    DEFAULT_CHART_LICENSE,\n    LicenseOption,\n} from \"@ourworldindata/types\"\nimport { Tooltip } from \"../tooltip/Tooltip\"\nimport { FooterManager } from \"./FooterManager\"\nimport { ActionButtons } from \"../controls/ActionButtons\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    GRAPHER_FOOTER_CLASS,\n    GRAPHER_FRAME_PADDING_HORIZONTAL,\n    GrapherModal,\n} from \"../core/GrapherConstants\"\nimport { GRAPHER_LIGHT_TEXT } from \"../color/ColorConstants\"\nimport { scaleFontSize } from \"../chart/ChartUtils\"\n\n/*\n\nThe footer contains the sources, the note (optional), the action buttons and the license and origin URL (optional).\n\nIf all elements exist, they are laid out as follows:\n+-------------------------------------------------------+\n|  Sources                                              |\n+------------------------------------+------------------+\n|  Note                              |                  |\n+------------------------------------+  Action buttons  |\n|  Origin URL | CC BY                |                  |\n+-------------------------------------------------------+\n\nIf the note is long, it is placed below the sources:\n+-------------------------------------------------------+\n|  Sources                                              |\n+-------------------------------------------------------+\n|  Note                                                 |\n+------------------------------------+------------------+\n|  Origin URL | CC BY                |  Action buttons  |\n+------------------------------------+------------------+\n\nIf the origin url and license are short enough, they are placed next to the sources:\n+------------------------------+------------------------+\n|  Sources                     |    Origin URL | CC BY  |\n+------------------------------+-----+------------------+\n|  Note                              |  Action buttons  |\n+-------------------------------------------------------+\n\nIf the note is missing and the sources text is not too long, the sources are placed next to the action buttons:\n+------------------------------------+------------------+\n|  Sources                           |                  |\n+------------------------------------+  Action buttons  |\n|  Origin URL | CC BY                |                  |\n+-------------------------------------------------------+\n\n*/\n\n// keep in sync with sass variables in Footer.scss\nconst HORIZONTAL_PADDING = 8\n\ninterface FooterProps {\n    manager: FooterManager\n    maxWidth?: number\n}\n\nabstract class AbstractFooter<\n    Props extends FooterProps = FooterProps,\n> extends React.Component<Props> {\n    verticalPadding = 4\n\n    constructor(props: Props) {\n        super(props)\n\n        makeObservable(this, {\n            tooltipTarget: observable.ref,\n        })\n    }\n\n    @computed protected get manager(): FooterManager {\n        return this.props.manager\n    }\n\n    @computed protected get maxWidth(): number {\n        return this.props.maxWidth ?? DEFAULT_GRAPHER_BOUNDS.width\n    }\n\n    @computed protected get useBaseFontSize(): boolean {\n        return !!this.manager.useBaseFontSize\n    }\n\n    @computed protected get baseFontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed protected get hideOriginUrl(): boolean {\n        return !!this.manager.hideOriginUrl\n    }\n\n    @computed protected get sourcesLine(): string {\n        return this.manager.sourcesLine?.replace(/\\r\\n|\\n|\\r/g, \"\") ?? \"\"\n    }\n\n    // On data pages running the new metadata-layout experiment we turn the\n    // sources line itself into a link to the on-page metadata box (rather than\n    // appending a separate \"Learn more about this data\" link). Embeds/iframes\n    // don't have that box, so they keep the default behavior.\n    @computed protected get linkSourcesToDatapageMetadata(): boolean {\n        return (\n            !!this.manager.useNewDatapageMetadataLayout &&\n            !!this.manager.isEmbeddedInADataPage &&\n            !this.manager.isInIFrame\n        )\n    }\n\n    @computed protected get sourcesText(): string {\n        if (this.linkSourcesToDatapageMetadata)\n            return `Data source: ${this.sourcesLine}`\n        return `Data source: ${this.sourcesLine} - Learn more about this data`\n    }\n\n    @computed protected get noteText(): string {\n        const note = this.manager.effectiveNote\n        return note ? `Note: ${note}` : \"\"\n    }\n\n    @computed protected get markdownNoteText(): string {\n        const note = this.manager.effectiveNote\n        return note ? `**Note:** ${note}` : \"\"\n    }\n\n    @computed protected get license(): LicenseOption {\n        return this.manager.license ?? DEFAULT_CHART_LICENSE\n    }\n\n    // Charts without the OWID logo show \"Powered by ourworldindata.org\"\n    // instead of a license, unless a non-default license is configured —\n    // provider-required license terms must always be shown.\n    @computed protected get showsCcLicense(): boolean {\n        return (\n            !!this.manager.hasOWIDLogo || this.license !== DEFAULT_CHART_LICENSE\n        )\n    }\n\n    @computed protected get licenseText(): string {\n        if (this.showsCcLicense) return CHART_LICENSES[this.license].name\n        return \"Powered by ourworldindata.org\"\n    }\n\n    @computed protected get licenseUrl(): string {\n        if (this.showsCcLicense) return CHART_LICENSES[this.license].url\n        return \"https://ourworldindata.org\"\n    }\n\n    @computed protected get originUrlWithProtocol(): string {\n        return this.manager.originUrlWithProtocol ?? \"http://localhost\"\n    }\n\n    @computed protected get finalUrl(): string {\n        const originUrl = this.originUrlWithProtocol\n        const url = Url.fromURL(originUrl)\n        return url.originAndPath ?? \"\"\n    }\n\n    @computed protected get correctedUrlText(): string | undefined {\n        const originUrl = this.originUrlWithProtocol\n\n        // Make sure the link back to OWID is consistent\n        if (!originUrl || !originUrl.toLowerCase().match(/^https?:\\/\\/./))\n            return undefined\n\n        const url = Url.fromURL(originUrl)\n        return url.originAndPath\n            ?.replace(/^https?:\\/\\//, \"\")\n            .replace(\"ourworldindata.org\", \"OurWorldinData.org\")\n            .replace(/\\/$/, \"\") // remove trailing slash\n    }\n\n    protected static constructLicenseAndOriginUrlText(\n        urlText: string | undefined,\n        licenseText: string\n    ): string {\n        if (!urlText) return licenseText\n        return [urlText, licenseText].join(\" | \")\n    }\n\n    @computed protected get finalUrlText(): string | undefined {\n        const {\n            correctedUrlText,\n            licenseText,\n            fontSize,\n            maxWidth,\n            actionButtons,\n        } = this\n\n        if (this.hideOriginUrl) return undefined\n\n        if (!correctedUrlText) return undefined\n\n        const licenseAndOriginUrlText =\n            AbstractFooter.constructLicenseAndOriginUrlText(\n                correctedUrlText,\n                licenseText\n            )\n        const licenseAndOriginUrlWidth = Bounds.forText(\n            licenseAndOriginUrlText,\n            { fontSize }\n        ).width\n\n        // If the URL is too long, don't show it\n        if (\n            licenseAndOriginUrlWidth + HORIZONTAL_PADDING >\n            maxWidth - actionButtons.width\n        )\n            return undefined\n\n        return correctedUrlText\n    }\n\n    @computed protected get licenseAndOriginUrlText(): string {\n        const { finalUrlText, licenseText } = this\n        return AbstractFooter.constructLicenseAndOriginUrlText(\n            finalUrlText,\n            licenseText\n        )\n    }\n\n    @computed protected get lineHeight(): number {\n        return this.manager.isSmall ? 1.1 : 1.2\n    }\n\n    @computed protected get fontSize(): number {\n        if (this.useBaseFontSize) {\n            return scaleFontSize(11, this.baseFontSize)\n        }\n        return this.manager.isMedium ? 11 : 12\n    }\n\n    @computed protected get sourcesFontSize(): number {\n        if (this.useBaseFontSize) {\n            return scaleFontSize(12, this.baseFontSize)\n        }\n        return this.manager.isSmall ? 12 : 13\n    }\n\n    @computed protected get showNote(): boolean {\n        return !this.manager.hideNote && !!this.noteText\n    }\n\n    @computed private get actionButtonsWidthWithIconsOnly(): number {\n        return new ActionButtons({\n            manager: this.manager,\n            maxWidth: this.maxWidth,\n        }).widthWithIconsOnly\n    }\n\n    @computed private get useFullWidthSources(): boolean {\n        const {\n            showNote,\n            sourcesFontSize,\n            maxWidth,\n            sourcesText,\n            actionButtonsWidthWithIconsOnly,\n        } = this\n        if (showNote) return true\n        const sourcesWidth = Bounds.forText(sourcesText, {\n            fontSize: sourcesFontSize,\n        }).width\n        return sourcesWidth > 2 * (maxWidth - actionButtonsWidthWithIconsOnly)\n    }\n\n    @computed private get useFullWidthNote(): boolean {\n        const {\n            fontSize,\n            maxWidth,\n            noteText,\n            actionButtonsWidthWithIconsOnly,\n        } = this\n        const noteWidth = Bounds.forText(noteText, { fontSize }).width\n        return noteWidth > 2 * (maxWidth - actionButtonsWidthWithIconsOnly)\n    }\n\n    @computed protected get sourcesMaxWidth(): number {\n        if (this.useFullWidthSources) return this.maxWidth\n        return this.maxWidth - this.actionButtons.width - HORIZONTAL_PADDING\n    }\n\n    @computed protected get noteMaxWidth(): number {\n        if (this.useFullWidthNote) return this.maxWidth\n        return this.maxWidth - this.actionButtons.width - HORIZONTAL_PADDING\n    }\n\n    @computed protected get licenseAndOriginUrlMaxWidth(): number {\n        return this.maxWidth\n    }\n\n    @computed protected get showLicenseNextToSources(): boolean {\n        const {\n            useFullWidthSources,\n            maxWidth,\n            sources,\n            licenseAndOriginUrl,\n            note,\n        } = this\n        if (!useFullWidthSources) return false\n        // if there's space, keep the license below the note\n        if (this.useFullWidthNote || note.htmlLines.length <= 1) return false\n        return (\n            sources.width + HORIZONTAL_PADDING + licenseAndOriginUrl.width <=\n            maxWidth\n        )\n    }\n\n    @computed protected get sources(): MarkdownTextWrap {\n        const { lineHeight } = this\n        return new MarkdownTextWrap({\n            text: this.sourcesText,\n            maxWidth: this.sourcesMaxWidth,\n            fontSize: this.sourcesFontSize,\n            lineHeight,\n        })\n    }\n\n    @computed protected get note(): MarkdownTextWrap {\n        const { fontSize, lineHeight, manager } = this\n        return new MarkdownTextWrap({\n            text: this.markdownNoteText,\n            maxWidth: this.noteMaxWidth,\n            fontSize,\n            lineHeight,\n            detailsOrderedByReference: manager.detailsOrderedByReference,\n        })\n    }\n\n    @computed protected get licenseAndOriginUrl(): TextWrap {\n        const { fontSize, lineHeight } = this\n        return new TextWrap({\n            text: this.licenseAndOriginUrlText,\n            maxWidth: this.licenseAndOriginUrlMaxWidth,\n            rawHtml: true,\n            fontSize,\n            lineHeight,\n        })\n    }\n\n    @computed private get actionButtonsMaxWidth(): number {\n        const {\n            correctedUrlText,\n            licenseText,\n            maxWidth,\n            fontSize,\n            sourcesFontSize,\n            useFullWidthSources,\n            sourcesText,\n            noteText,\n            showNote,\n            useFullWidthNote,\n        } = this\n\n        const sourcesWidth = Bounds.forText(sourcesText, {\n            fontSize: sourcesFontSize,\n        }).width\n        const noteWidth = Bounds.forText(noteText, { fontSize }).width\n\n        // text next to the action buttons\n        const leftTextWidth = !useFullWidthSources\n            ? sourcesWidth\n            : showNote && !useFullWidthNote\n              ? noteWidth\n              : 0\n        // text above the action buttons\n        // (taken into account to ensure the action buttons are not too close to clickable text)\n        const topTextWidth = useFullWidthSources\n            ? useFullWidthNote\n                ? noteWidth\n                : sourcesWidth\n            : 0\n        const licenseAndOriginUrlWidth = Bounds.forText(\n            AbstractFooter.constructLicenseAndOriginUrlText(\n                correctedUrlText,\n                licenseText\n            ),\n            { fontSize }\n        ).width\n\n        return (\n            maxWidth -\n            Math.max(topTextWidth, leftTextWidth, licenseAndOriginUrlWidth) -\n            HORIZONTAL_PADDING\n        )\n    }\n\n    @computed private get actionButtons(): ActionButtons {\n        return new ActionButtons({\n            manager: this.manager,\n            maxWidth: this.actionButtonsMaxWidth,\n        })\n    }\n\n    @computed get height(): number {\n        return this.topContentHeight + this.bottomContentHeight\n    }\n\n    base = React.createRef<HTMLDivElement>()\n    tooltipTarget: Point | undefined = undefined\n\n    @action.bound private onMouseMove(e: MouseEvent): void {\n        const cc = this.base.current?.querySelector(\".cclogo\")\n        if (cc?.matches(\":hover\")) {\n            const div = this.base.current as HTMLDivElement\n            const grapher = div.closest(\".GrapherComponent\")\n            if (grapher) {\n                const mouse = getRelativeMouse(grapher, e)\n                this.tooltipTarget = { x: mouse.x, y: mouse.y }\n            } else console.error(\"Grapher was falsy\")\n        } else this.tooltipTarget = undefined\n    }\n\n    override componentDidMount(): void {\n        window.addEventListener(\"mousemove\", this.onMouseMove)\n    }\n\n    override componentWillUnmount(): void {\n        window.removeEventListener(\"mousemove\", this.onMouseMove)\n    }\n\n    private renderLicense(): React.ReactElement {\n        return (\n            <div className=\"license\" style={this.licenseAndOriginUrl.htmlStyle}>\n                {this.finalUrlText && (\n                    <>\n                        <a\n                            href={this.finalUrl}\n                            {...openLinkInNewTabAttrs(this.manager.isInIFrame)}\n                        >\n                            {this.finalUrlText}\n                        </a>{\" \"}\n                        |{\" \"}\n                    </>\n                )}\n                <a\n                    className={this.showsCcLicense ? \"cclogo\" : undefined}\n                    href={this.licenseUrl}\n                    style={{ textDecoration: \"none\" }}\n                    {...openLinkInNewTabAttrs(this.manager.isInIFrame)}\n                >\n                    {this.licenseText}\n                </a>\n            </div>\n        )\n    }\n\n    // Open the metadata box's \"Sources & processing\" section and scroll to it.\n    // The section lives inside a collapsed <details>, so we open it explicitly:\n    // browsers won't reveal hidden <details> content for a programmatic\n    // scrollIntoView(), and fragment-navigation auto-expansion isn't supported\n    // across all the browsers we target.\n    @action.bound private scrollToDatapageMetadataSources(): void {\n        const sourcesElement = document.getElementById(\n            DATAPAGE_SOURCES_AND_PROCESSING_SECTION_ID\n        )\n        if (!sourcesElement) {\n            // No on-page metadata box (shouldn't happen given the gating) –\n            // fall back to the sources modal.\n            this.manager.activeModal = GrapherModal.Sources\n            return\n        }\n        sourcesElement.closest(\"details\")?.setAttribute(\"open\", \"\")\n        sourcesElement.scrollIntoView({\n            behavior: getPrefersReducedMotion() ? \"auto\" : \"smooth\",\n        })\n        this.manager.isInFullScreenMode = false\n    }\n\n    private renderSources(): React.ReactElement | null {\n        const sources = new MarkdownTextWrap({\n            text: `**Data source:** ${this.sourcesLine}`,\n            maxWidth: this.sourcesMaxWidth,\n            fontSize: this.sourcesFontSize,\n            lineHeight: this.lineHeight,\n        })\n\n        // On new-datapage-design pages, the sources line itself links to the\n        // on-page metadata box instead of a trailing \"Learn more\" link. The\n        // bold \"Data source:\" label and the separating space are rendered\n        // outside the markdown so that only the source name is underlined (the\n        // markdown renderer merges the separator space into the source text, so\n        // it can't be excluded from the underline via CSS). We reserve the\n        // label's width in the source's wrap so long source names still wrap.\n        if (this.linkSourcesToDatapageMetadata) {\n            const label = \"Data source: \"\n            const labelWidth = Bounds.forText(label, {\n                fontSize: this.sourcesFontSize,\n                fontWeight: 700,\n            }).width\n            const sourceName = new MarkdownTextWrap({\n                text: this.sourcesLine,\n                // Reserving the label width on every line means a source name\n                // that wraps doesn't use the full width on its second line\n                // onwards (cosmetic), and its measured height can drift from\n                // the rendered height. The 10 experiment pages don't wrap here;\n                // a proper fix would be a first-line offset on MarkdownTextWrap.\n                maxWidth: this.sourcesMaxWidth - labelWidth,\n                fontSize: this.sourcesFontSize,\n                lineHeight: this.lineHeight,\n            })\n            return (\n                <p className=\"sources\" style={sources.style}>\n                    <a\n                        className=\"sources-link\"\n                        data-track-note=\"chart_click_sources\"\n                        tabIndex={0}\n                        onClick={action((e) => {\n                            e.stopPropagation()\n                            this.scrollToDatapageMetadataSources()\n                        })}\n                    >\n                        <strong>Data source:</strong>{\" \"}\n                        <MarkdownTextWrapHtml textWrap={sourceName} />\n                    </a>\n                </p>\n            )\n        }\n\n        return (\n            <p className=\"sources\" style={sources.style}>\n                <MarkdownTextWrapHtml textWrap={sources} />\n                {\" – \"}\n                <a\n                    className=\"learn-more-about-data\"\n                    data-track-note=\"chart_click_sources\"\n                    tabIndex={0}\n                    onClick={action((e) => {\n                        e.stopPropagation()\n\n                        // if embbedded, open the sources modal\n                        if (\n                            this.manager.isEmbeddedInAnOwidPage ||\n                            this.manager.isInIFrame\n                        ) {\n                            this.manager.activeModal = GrapherModal.Sources\n                            return\n                        }\n\n                        // on data pages, scroll to the \"Sources and Processing\" section\n                        // on grapher pages, open the sources modal\n                        const datapageSectionId =\n                            DATAPAGE_ABOUT_THIS_DATA_SECTION_ID\n                        const sourcesElement =\n                            document.getElementById(datapageSectionId)\n                        if (sourcesElement && sourcesElement.scrollIntoView) {\n                            sourcesElement.scrollIntoView({\n                                behavior: getPrefersReducedMotion()\n                                    ? \"auto\"\n                                    : \"smooth\",\n                            })\n                            this.manager.isInFullScreenMode = false\n                        } else if (sourcesElement) {\n                            window.location.hash = \"#\" + datapageSectionId\n                            this.manager.isInFullScreenMode = false\n                        } else {\n                            // on grapher pages, open the sources modal\n                            this.manager.activeModal = GrapherModal.Sources\n                        }\n                    })}\n                >\n                    Learn more about this data\n                </a>\n            </p>\n        )\n    }\n\n    private renderNote(): React.ReactElement {\n        return (\n            <p className=\"note\" style={this.note.style}>\n                <MarkdownTextWrapHtml textWrap={this.note} />\n            </p>\n        )\n    }\n\n    private renderVerticalSpace(): React.ReactElement {\n        return (\n            <div\n                style={{\n                    height: this.verticalPadding,\n                    width: \"100%\",\n                }}\n            />\n        )\n    }\n\n    @computed private get topContentHeight(): number {\n        const { sources, note } = this\n\n        const renderSources = this.useFullWidthSources\n        const renderNote = this.showNote && this.useFullWidthNote\n\n        if (!renderSources && !renderNote) return 0\n\n        return (\n            (renderSources ? sources.height : 0) +\n            (renderSources && renderNote ? this.verticalPadding : 0) +\n            (renderNote ? note.height : 0) +\n            this.verticalPadding\n        )\n    }\n\n    // renders the content above the action buttons\n    // make sure to keep this.topContentHeight in sync if you edit this method\n    private renderTopContent(): React.ReactElement | null {\n        const renderSources = this.useFullWidthSources\n        const renderNote = this.showNote && this.useFullWidthNote\n        const renderLicense = this.showLicenseNextToSources\n\n        if (!renderSources && !renderNote) return null\n\n        return (\n            <>\n                <div className=\"SourcesFooterHTMLTop\">\n                    {renderSources && (\n                        <div className=\"SourcesAndLicense\">\n                            {this.renderSources()}\n                            {renderLicense && this.renderLicense()}\n                        </div>\n                    )}\n                    {renderSources && renderNote && this.renderVerticalSpace()}\n                    {renderNote && this.renderNote()}\n                </div>\n                {this.renderVerticalSpace()}\n            </>\n        )\n    }\n\n    @computed private get bottomContentHeight(): number {\n        const { actionButtons, sources, note } = this\n\n        const renderSources = !this.useFullWidthSources\n        const renderNote = this.showNote && !this.useFullWidthNote\n        const renderLicense = !this.showLicenseNextToSources\n        const renderPadding = (renderSources || renderNote) && renderLicense\n\n        const textHeight =\n            (renderSources ? sources.height : renderNote ? note.height : 0) +\n            (renderPadding ? this.verticalPadding : 0) +\n            (renderLicense ? this.licenseAndOriginUrl.height : 0)\n\n        return Math.max(textHeight, actionButtons.height)\n    }\n\n    // renders the action buttons and the content next to it\n    // make sure to keep this.bottomContentHeight in sync if you edit this method\n    private renderBottomContent(): React.ReactElement {\n        const renderSources = !this.useFullWidthSources\n        const renderNote = this.showNote && !this.useFullWidthNote\n        const renderLicense = !this.showLicenseNextToSources\n        const renderPadding = (renderSources || renderNote) && renderLicense\n\n        const licenseOnly = !renderSources && !renderNote && renderLicense\n        const noteOnly = !renderSources && renderNote && !renderLicense\n\n        // center text next to the action buttons if it's only one or two lines\n        const style = {\n            alignItems:\n                licenseOnly || (noteOnly && this.note.htmlLines.length <= 2)\n                    ? \"center\"\n                    : \"flex-end\",\n        }\n\n        return (\n            <div className=\"SourcesFooterHTMLBottom\" style={style}>\n                <div>\n                    {renderSources\n                        ? this.renderSources()\n                        : renderNote\n                          ? this.renderNote()\n                          : null}\n                    {renderPadding && this.renderVerticalSpace()}\n                    {renderLicense && this.renderLicense()}\n                </div>\n                <ActionButtons\n                    manager={this.manager}\n                    maxWidth={this.actionButtonsMaxWidth}\n                />\n            </div>\n        )\n    }\n\n    override render(): React.ReactElement {\n        const { tooltipTarget } = this\n\n        return (\n            <footer\n                className=\"SourcesFooterHTML\"\n                style={{\n                    padding: `0 ${GRAPHER_FRAME_PADDING_HORIZONTAL}px`,\n                }}\n                ref={this.base}\n            >\n                {this.renderTopContent()}\n                {this.renderBottomContent()}\n                {tooltipTarget && (\n                    <Tooltip\n                        id=\"footer\"\n                        tooltipManager={this.manager}\n                        x={tooltipTarget.x}\n                        y={tooltipTarget.y}\n                        style={{\n                            textAlign: \"left\",\n                            maxWidth: \"304px\",\n                            whiteSpace: \"inherit\",\n                            fontSize: \"14px\",\n                            padding: \"0\",\n                            lineHeight: \"21px\",\n                            fontWeight: 400,\n                            letterSpacing: \"0.01em\",\n                        }}\n                    >\n                        <p>\n                            {this.license === DEFAULT_CHART_LICENSE ? (\n                                <>\n                                    Our World in Data charts are licensed under\n                                    Creative Commons; you are free to use,\n                                    share, and adapt this material. Click\n                                    through to the CC BY page for more\n                                    information.\n                                </>\n                            ) : (\n                                <>\n                                    This chart is licensed under Creative\n                                    Commons ({CHART_LICENSES[this.license].name}\n                                    ). Click through to the license page for\n                                    more information about how you may use,\n                                    share, and adapt this material.\n                                </>\n                            )}{\" \"}\n                            Please bear in mind that the underlying source data\n                            for all our charts might be subject to different\n                            license terms from third-party authors.\n                        </p>\n                    </Tooltip>\n                )}\n            </footer>\n        )\n    }\n}\n\n@observer\nexport class Footer extends AbstractFooter<FooterProps> {}\n\ninterface StaticFooterProps extends FooterProps {\n    targetX: number\n    targetY: number\n}\n\n@observer\nexport class StaticFooter extends AbstractFooter<StaticFooterProps> {\n    override verticalPadding = 4.5\n\n    constructor(props: StaticFooterProps) {\n        super(props)\n\n        makeObservable(this)\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    override componentDidMount(): void {}\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    override componentWillUnmount(): void {}\n\n    protected override get hideOriginUrl(): boolean {\n        return !!this.manager.hideOriginUrl || !!this.manager.isStaticAndSmall\n    }\n\n    @computed private get textColor(): string {\n        return GRAPHER_LIGHT_TEXT\n    }\n\n    protected override get showLicenseNextToSources(): boolean {\n        return (\n            this.maxWidth - this.sources.width - HORIZONTAL_PADDING >\n            this.licenseAndOriginUrl.width\n        )\n    }\n\n    protected override get finalUrlText(): string | undefined {\n        const { correctedUrlText, licenseText, fontSize, maxWidth } = this\n\n        if (this.hideOriginUrl) return undefined\n\n        if (!correctedUrlText) return undefined\n\n        const licenseAndOriginUrlText = Footer.constructLicenseAndOriginUrlText(\n            correctedUrlText,\n            licenseText\n        )\n        const licenseAndOriginUrlWidth = Bounds.forText(\n            licenseAndOriginUrlText,\n            { fontSize }\n        ).width\n\n        // If the URL is too long, don't show it\n        if (licenseAndOriginUrlWidth > maxWidth) return undefined\n\n        return correctedUrlText\n    }\n\n    protected override get licenseAndOriginUrlText(): string {\n        const { finalUrl, finalUrlText, licenseText, licenseUrl, textColor } =\n            this\n        const linkStyle = `fill: ${textColor};`\n        const targetAttr = this.manager.isInIFrame\n            ? ' target=\"_blank\" rel=\"noopener\"'\n            : \"\"\n        const licenseSvg = `<a style=\"${linkStyle}\" href=\"${licenseUrl}\"${targetAttr}>${licenseText}</a>`\n        if (!finalUrlText) return licenseSvg\n        const originUrlSvg = `<a style=\"${linkStyle}\" href=\"${finalUrl}\"${targetAttr}>${finalUrlText}</a>`\n        return [originUrlSvg, licenseSvg].join(\" | \")\n    }\n\n    protected override get sourcesText(): string {\n        return `**Data source:** ${this.sourcesLine}`\n    }\n\n    protected override get fontSize(): number {\n        if (this.manager.isStaticAndSmall) return 14\n        return this.useBaseFontSize ? scaleFontSize(13, this.baseFontSize) : 13\n    }\n\n    protected override get sourcesFontSize(): number {\n        return this.fontSize\n    }\n\n    protected override get sourcesMaxWidth(): number {\n        return this.maxWidth\n    }\n\n    protected override get noteMaxWidth(): number {\n        return this.maxWidth\n    }\n\n    protected override get licenseAndOriginUrlMaxWidth(): number {\n        return this.maxWidth\n    }\n\n    override get height(): number {\n        return (\n            this.sources.height +\n            (this.showNote ? this.note.height + this.verticalPadding : 0) +\n            (this.showLicenseNextToSources\n                ? 0\n                : this.licenseAndOriginUrl.height + this.verticalPadding)\n        )\n    }\n\n    override render(): React.ReactElement {\n        const {\n            sources,\n            note,\n            licenseAndOriginUrl,\n            showLicenseNextToSources,\n            maxWidth,\n        } = this\n        const { targetX, targetY } = this.props\n\n        return (\n            <g\n                id={makeFigmaId(GRAPHER_FOOTER_CLASS)}\n                className=\"SourcesFooter\"\n                style={{ fill: this.textColor }}\n            >\n                <MarkdownTextWrapSvg\n                    textWrap={sources}\n                    x={targetX}\n                    y={targetY}\n                    id={makeFigmaId(\"sources\")}\n                />\n                {this.showNote && (\n                    <MarkdownTextWrapSvg\n                        textWrap={note}\n                        x={targetX}\n                        y={targetY + sources.height + this.verticalPadding}\n                        id={makeFigmaId(\"note\")}\n                        detailsMarker={this.manager.detailsMarkerInSvg}\n                    />\n                )}\n                {showLicenseNextToSources ? (\n                    <TextWrapSvg\n                        textWrap={licenseAndOriginUrl}\n                        x={targetX + maxWidth - licenseAndOriginUrl.width}\n                        y={targetY}\n                        id={makeFigmaId(\"origin-url\")}\n                    />\n                ) : (\n                    <TextWrapSvg\n                        textWrap={licenseAndOriginUrl}\n                        x={targetX}\n                        y={\n                            targetY +\n                            sources.height +\n                            (this.showNote\n                                ? note.height + this.verticalPadding\n                                : 0) +\n                            this.verticalPadding\n                        }\n                        id={makeFigmaId(\"origin-url\")}\n                    />\n                )}\n            </g>\n        )\n    }\n}\n","import * as R from \"remeda\"\nimport { Time } from \"@ourworldindata/types\"\nimport {\n    TimeBound,\n    TimeBoundValue,\n    sleep,\n    findClosestTime,\n    rollingMap,\n} from \"@ourworldindata/utils\"\nimport { action, computed } from \"mobx\"\nimport { TimeColumn } from \"@ourworldindata/core-table\"\n\n// Animation timing constants\nconst MIN_MS_PER_TICK = 100\nconst MAX_MS_PER_TICK = 200\nconst TARGET_ANIMATION_DURATION_MS = 4000\n\nexport enum TimelineDragTarget {\n    Start = \"start\",\n    End = \"end\",\n    Both = \"both\",\n}\n\nexport interface TimelineManager {\n    disablePlay?: boolean\n    timeColumn?: TimeColumn\n    isTimelineAnimationPlaying?: boolean\n    isTimelineAnimationActive?: boolean\n    disableChartRowAnimation?: boolean\n    animationStartTime?: Time\n    times: Time[]\n    startHandleTimeBound: TimeBound\n    endHandleTimeBound: TimeBound\n    areHandlesOnSameTimeBeforeAnimation?: boolean\n    isSingleTimeSelectionActive?: boolean\n    onlyTimeRangeSelectionPossible?: boolean\n    onPlay?: () => void\n    onTimelineClick?: () => void\n    timelineDragTarget?: TimelineDragTarget\n}\n\nexport class TimelineController {\n    manager: TimelineManager\n\n    constructor(manager: TimelineManager) {\n        this.manager = manager\n    }\n\n    get timesAsc(): number[] {\n        // Note: assumes times is sorted in asc\n        return this.manager.times\n    }\n\n    get startTime(): number {\n        return findClosestTime(\n            this.timesAsc,\n            this.manager.startHandleTimeBound\n        )!\n    }\n\n    get endTime(): number {\n        return findClosestTime(this.timesAsc, this.manager.endHandleTimeBound)!\n    }\n\n    get minTime(): number {\n        return this.timesAsc[0]\n    }\n\n    get maxTime(): number {\n        return R.last(this.timesAsc)!\n    }\n\n    get timespan(): number {\n        return this.maxTime - this.minTime\n    }\n\n    /** Adaptive animation speed based on the number of time points */\n    @computed get msPerTick(): number {\n        const numTimePoints = this.timesAsc.length\n        if (numTimePoints <= 1) return MAX_MS_PER_TICK\n\n        const duration = TARGET_ANIMATION_DURATION_MS / numTimePoints\n\n        return R.clamp(duration, { min: MIN_MS_PER_TICK, max: MAX_MS_PER_TICK })\n    }\n\n    /**\n     * Determines whether to use equal or proportional spacing for the timeline slider.\n     *\n     * When using equal spacing, each time point is given equal visual space on the slider.\n     * When using proportional spacing, time points are spaced based on their actual values.\n     */\n    @computed get shouldUseEqualSpacing(): boolean {\n        // Few time points always use continuous scale\n        if (this.timesAsc.length < 20) return false\n\n        // Short timespans always use continuous scale\n        if (this.timespan <= 500) return false\n\n        // Calculate gaps between consecutive time points\n        const gaps = rollingMap(this.timesAsc, (a, b) => b - a)\n\n        const topDecileSum = R.pipe(\n            gaps,\n            R.takeFirstBy(gaps.length * 0.1, [R.identity(), \"desc\"]),\n            R.sum()\n        )\n\n        return topDecileSum > this.timespan * 0.5\n    }\n\n    /**\n     * Converts a time value to a normalized progress value (0-1) representing\n     * its position on the timeline slider\n     */\n    timeToProgress(time: Time): number {\n        if (this.shouldUseEqualSpacing) {\n            // Equal spacing: each time point gets equal visual space\n            const index = this.timesAsc.indexOf(time)\n            if (index === -1) return 0\n            return this.timesAsc.length > 1\n                ? index / (this.timesAsc.length - 1)\n                : 0\n        } else {\n            // Proportional spacing: linear mapping based on time value\n            if (this.timespan === 0) return 0 // Handle single time point\n            return (time - this.minTime) / this.timespan\n        }\n    }\n\n    /**\n     * Converts a normalized progress value (0-1) to the corresponding time\n     * value on the timeline\n     */\n    progressToTime(progress: number): number {\n        if (this.shouldUseEqualSpacing) {\n            // Equal spacing: map progress to the nearest time index\n            if (this.timesAsc.length <= 1) return this.timesAsc[0]\n            const index = Math.round(progress * (this.timesAsc.length - 1))\n            return this.timesAsc[\n                R.clamp(index, { min: 0, max: this.timesAsc.length - 1 })\n            ]\n        } else {\n            // Proportional spacing: linear mapping based on time value\n            return this.minTime + progress * this.timespan\n        }\n    }\n\n    get startTimeProgress(): number {\n        return this.timeToProgress(this.startTime)\n    }\n\n    get endTimeProgress(): number {\n        return this.timeToProgress(this.endTime)\n    }\n\n    // Finds the index of `time` in the `timesAsc` array.\n    // Assumes the input time to be present in the array, and will throw otherwise.\n    private findIndexOfTime(time: number): number {\n        const index = R.sortedIndex(this.timesAsc, time)\n        if (this.timesAsc[index] === time) return index\n        else throw new Error(`Time ${time} not found in available times`)\n    }\n\n    getNextTime(time: number): number {\n        const index = this.findIndexOfTime(time)\n        return this.timesAsc[index + 1] ?? this.maxTime\n    }\n\n    getPrevTime(time: number): number {\n        const index = this.findIndexOfTime(time)\n        return this.timesAsc[index - 1] ?? this.minTime\n    }\n\n    getNextValidTime(time: number, avoidTime?: number): number {\n        const nextTime = this.getNextTime(time)\n\n        // If handles can't be on the same time and next time equals the avoid time,\n        // don't move (return current time)\n        if (\n            !this.allowHandlesOnSameTime &&\n            avoidTime !== undefined &&\n            nextTime === avoidTime\n        ) {\n            return time\n        }\n\n        return nextTime\n    }\n\n    getPrevValidTime(time: number, avoidTime?: number): number {\n        const prevTime = this.getPrevTime(time)\n\n        // If handles can't be on the same time and prev time equals the avoid time,\n        // don't move (return current time)\n        if (\n            !this.allowHandlesOnSameTime &&\n            avoidTime !== undefined &&\n            prevTime === avoidTime\n        ) {\n            return time\n        }\n\n        return prevTime\n    }\n\n    // By default, play means extend the endTime to the right. Toggle this to play one time unit at a time.\n    private rangeMode = true\n    toggleRangeMode(): this {\n        this.rangeMode = !this.rangeMode\n        return this\n    }\n\n    private isAtEnd(): boolean {\n        return this.endTime === this.maxTime\n    }\n\n    private get beginning(): number {\n        const { manager } = this\n        return manager.endHandleTimeBound !== manager.startHandleTimeBound\n            ? manager.startHandleTimeBound\n            : this.minTime\n    }\n\n    @action.bound private resetToBeginning(): void {\n        const { beginning } = this\n        this.manager.endHandleTimeBound = beginning\n        this.manager.startHandleTimeBound = beginning\n    }\n\n    @action.bound async play(numberOfTicks?: number): Promise<number> {\n        const { manager } = this\n\n        manager.isTimelineAnimationPlaying = true\n        manager.isTimelineAnimationActive = true\n\n        if (this.isAtEnd()) this.resetToBeginning()\n\n        if (manager.onPlay) manager.onPlay()\n\n        // Keep and return a tickCount for easier testability\n        let tickCount = 0\n        while (manager.isTimelineAnimationPlaying) {\n            const nextTime = this.getNextTime(this.endTime)\n            if (!this.rangeMode) this.updateStartTime(nextTime)\n            this.updateEndTime(nextTime)\n            tickCount++\n            if (nextTime >= this.maxTime || numberOfTicks === tickCount) {\n                this.stop()\n                break\n            }\n            await sleep(this.msPerTick)\n        }\n\n        return tickCount\n    }\n\n    get allowHandlesOnSameTime(): boolean {\n        return !this.manager.onlyTimeRangeSelectionPossible\n    }\n\n    increaseStartTime(): void {\n        const nextTime = this.getNextTime(this.startTime)\n        if (!this.allowHandlesOnSameTime && nextTime >= this.endTime) return\n        this.updateStartTime(nextTime)\n    }\n\n    decreaseStartTime(): void {\n        const prevTime = this.getPrevTime(this.startTime)\n        this.updateStartTime(prevTime)\n    }\n\n    increaseEndTime(): void {\n        const nextTime = this.getNextTime(this.endTime)\n        this.updateEndTime(nextTime)\n    }\n\n    decreaseEndTime(): void {\n        const prevTime = this.getPrevTime(this.endTime)\n        if (!this.allowHandlesOnSameTime && prevTime <= this.startTime) return\n        this.updateEndTime(prevTime)\n    }\n\n    // Jump forward by ~10% of available times\n    getLargeStepForward(currentTime: number, fraction = 0.1): number {\n        const currentIndex = this.findIndexOfTime(currentTime)\n        if (currentIndex === -1) return this.maxTime\n\n        const stepSize = Math.max(\n            1,\n            Math.floor(this.timesAsc.length * fraction)\n        )\n\n        const targetIndex = Math.min(\n            this.timesAsc.length - 1,\n            currentIndex + stepSize\n        )\n\n        return this.timesAsc[targetIndex]\n    }\n\n    // Jump backward by ~10% of available times\n    getLargeStepBackward(currentTime: number, fraction = 0.1): number {\n        const currentIndex = this.findIndexOfTime(currentTime)\n        if (currentIndex === -1) return this.minTime\n\n        const stepSize = Math.max(\n            1,\n            Math.floor(this.timesAsc.length * fraction)\n        )\n\n        const targetIndex = Math.max(0, currentIndex - stepSize)\n\n        return this.timesAsc[targetIndex]\n    }\n\n    increaseStartTimeByLargeStep(): void {\n        const nextTime = this.getLargeStepForward(this.startTime)\n        if (!this.allowHandlesOnSameTime && nextTime >= this.endTime) {\n            this.increaseStartTime()\n            return\n        }\n        this.updateStartTime(nextTime)\n    }\n\n    decreaseStartTimeByLargeStep(): void {\n        const prevTime = this.getLargeStepBackward(this.startTime)\n        this.updateStartTime(prevTime)\n    }\n\n    increaseEndTimeByLargeStep(): void {\n        const nextTime = this.getLargeStepForward(this.endTime)\n        this.updateEndTime(nextTime)\n    }\n\n    decreaseEndTimeByLargeStep(): void {\n        const prevTime = this.getLargeStepBackward(this.endTime)\n        if (!this.allowHandlesOnSameTime && prevTime <= this.startTime) {\n            this.decreaseEndTime()\n            return\n        }\n        this.updateEndTime(prevTime)\n    }\n\n    @action.bound stop(): void {\n        this.manager.isTimelineAnimationPlaying = false\n        this.manager.isTimelineAnimationActive = false\n        this.manager.animationStartTime = undefined\n        this.manager.areHandlesOnSameTimeBeforeAnimation = undefined\n    }\n\n    @action.bound private pause(): void {\n        this.manager.isTimelineAnimationPlaying = false\n    }\n\n    onDrag(): void {\n        this.stop()\n    }\n\n    @action.bound async togglePlay(): Promise<void> {\n        if (!this.manager.isTimelineAnimationActive) {\n            this.manager.areHandlesOnSameTimeBeforeAnimation =\n                this.manager.startHandleTimeBound ===\n                this.manager.endHandleTimeBound\n            this.manager.animationStartTime = this.isAtEnd()\n                ? findClosestTime(this.timesAsc, this.beginning)!\n                : this.startTime\n        }\n\n        if (this.manager.isTimelineAnimationPlaying) this.pause()\n        else await this.play()\n    }\n\n    /**\n     * Stores the offset between the drag start position and the handle positions.\n     * Used when dragging the range (both handles together) to preserve their relative spacing.\n     *\n     * Depends on the spacing mode:\n     * - In proportional spacing mode: stores time offsets (e.g., [-5, +10] for years)\n     * - In equal spacing mode: stores index offsets (e.g., [-2, +3] for array positions)\n     */\n    private dragOffsets: [number, number] = [0, 0]\n\n    private get isSingleDragMarker(): boolean {\n        return this.dragOffsets[0] === this.dragOffsets[1]\n    }\n\n    private timeToIndex(time: Time): number {\n        return R.sortedIndex(this.timesAsc, time)\n    }\n\n    private indexToTimeBound(index: number): TimeBound {\n        const minIndex = 0\n        const maxIndex = this.timesAsc.length - 1\n        const clampedIndex = R.clamp(index, { min: minIndex, max: maxIndex })\n        const time = this.timesAsc[clampedIndex]\n\n        // Convert to infinity at the edges\n        if (index <= minIndex) return TimeBoundValue.negativeInfinity\n        if (index >= maxIndex) return TimeBoundValue.positiveInfinity\n\n        return time\n    }\n\n    setDragOffsets(inputTime: number): void {\n        if (this.shouldUseEqualSpacing) {\n            this.setDragOffsetsEqualSpacing(inputTime)\n        } else {\n            this.setDragOffsetsProportional(inputTime)\n        }\n    }\n\n    private setDragOffsetsEqualSpacing(inputTime: number): void {\n        const closestTime =\n            findClosestTime(this.timesAsc, inputTime) ?? inputTime\n        const clickIndex = this.timeToIndex(closestTime)\n        const startIndex = this.timeToIndex(this.startTime)\n        const endIndex = this.timeToIndex(this.endTime)\n\n        this.dragOffsets = [startIndex - clickIndex, endIndex - clickIndex]\n    }\n\n    private setDragOffsetsProportional(inputTime: number): void {\n        const closestTime =\n            findClosestTime(this.timesAsc, inputTime) ?? inputTime\n        this.dragOffsets = [\n            this.startTime - closestTime,\n            this.endTime - closestTime,\n        ]\n    }\n\n    clampTimeBound(inputTime: Time): TimeBound {\n        if (inputTime < this.minTime) return TimeBoundValue.negativeInfinity\n        if (inputTime > this.maxTime) return TimeBoundValue.positiveInfinity\n        const closestTime =\n            findClosestTime(this.timesAsc, inputTime) ?? inputTime\n        return R.clamp(closestTime, { min: this.minTime, max: this.maxTime })\n    }\n\n    private dragRangeToTime(time: Time): void {\n        if (this.shouldUseEqualSpacing) {\n            this.dragRangeToTimeEqualSpacing(time)\n        } else {\n            this.dragRangeToTimeProportional(time)\n        }\n    }\n\n    private dragRangeToTimeEqualSpacing(time: Time): void {\n        const closestTime = findClosestTime(this.timesAsc, time) ?? time\n        const currentIndex = this.timeToIndex(closestTime)\n\n        // Apply index offsets\n        let startIndex = currentIndex + this.dragOffsets[0]\n        let endIndex = currentIndex + this.dragOffsets[1]\n\n        const minIndex = 0\n        const maxIndex = this.timesAsc.length - 1\n\n        // Handle edge clamping for ranges\n        if (!this.isSingleDragMarker) {\n            const indexSpan = this.dragOffsets[1] - this.dragOffsets[0]\n\n            if (startIndex < minIndex) {\n                startIndex = minIndex\n                endIndex = minIndex + indexSpan\n            } else if (endIndex > maxIndex) {\n                endIndex = maxIndex\n                startIndex = maxIndex - indexSpan\n            }\n        }\n\n        // Convert indices to TimeBounds\n        const startTimeBound = this.indexToTimeBound(startIndex)\n        const endTimeBound = this.indexToTimeBound(endIndex)\n\n        this.updateStartTime(startTimeBound)\n        this.updateEndTime(endTimeBound)\n    }\n\n    private dragRangeToTimeProportional(time: Time): void {\n        const { minTime, maxTime } = this\n\n        let startTime = this.clampTimeBound(this.dragOffsets[0] + time)\n        let endTime = this.clampTimeBound(this.dragOffsets[1] + time)\n\n        if (!this.isSingleDragMarker) {\n            if (startTime < minTime) {\n                endTime = this.clampTimeBound(\n                    minTime + (this.dragOffsets[1] - this.dragOffsets[0])\n                )\n            } else if (endTime > maxTime) {\n                startTime = this.clampTimeBound(\n                    maxTime + (this.dragOffsets[0] - this.dragOffsets[1])\n                )\n            }\n        }\n\n        this.updateStartTime(startTime)\n        this.updateEndTime(endTime)\n    }\n\n    dragHandleToTime(\n        handle: TimelineDragTarget,\n        inputTime: number\n    ): TimelineDragTarget {\n        const { manager } = this\n\n        let time = this.clampTimeBound(inputTime)\n\n        // Prevent handles from being on the same time if not allowed\n        if (!this.allowHandlesOnSameTime) {\n            const closestTime = findClosestTime(this.timesAsc, time) ?? time\n            if (\n                handle === TimelineDragTarget.Start &&\n                closestTime === this.endTime\n            ) {\n                time = this.getPrevTime(this.endTime)\n            } else if (\n                handle === TimelineDragTarget.End &&\n                closestTime === this.startTime\n            ) {\n                time = this.getNextTime(this.startTime)\n            }\n        }\n\n        const constrainedHandle =\n            handle === TimelineDragTarget.Start && time > this.endTime\n                ? TimelineDragTarget.End\n                : handle === TimelineDragTarget.End && time < this.startTime\n                  ? TimelineDragTarget.Start\n                  : handle\n\n        if (constrainedHandle !== handle) {\n            if (handle === TimelineDragTarget.Start)\n                this.updateStartTime(manager.endHandleTimeBound)\n            else this.updateEndTime(manager.startHandleTimeBound)\n        }\n\n        if (manager.isTimelineAnimationPlaying && !this.rangeMode) {\n            this.updateStartTime(time)\n            this.updateEndTime(time)\n        } else if (handle === TimelineDragTarget.Both)\n            this.dragRangeToTime(inputTime)\n        else if (constrainedHandle === TimelineDragTarget.Start)\n            this.updateStartTime(time)\n        else if (constrainedHandle === TimelineDragTarget.End)\n            this.updateEndTime(time)\n\n        return constrainedHandle\n    }\n\n    @action.bound private updateStartTime(timeBound: TimeBound): void {\n        this.manager.startHandleTimeBound = timeBound\n    }\n\n    @action.bound private updateEndTime(timeBound: TimeBound): void {\n        this.manager.endHandleTimeBound = timeBound\n    }\n\n    resetStartToMin(): void {\n        this.updateStartTime(TimeBoundValue.negativeInfinity)\n    }\n\n    resetEndToMax(): void {\n        this.updateEndTime(TimeBoundValue.positiveInfinity)\n    }\n\n    setStartToMax(): void {\n        this.updateStartTime(TimeBoundValue.positiveInfinity)\n    }\n\n    setEndToMin(): void {\n        this.updateEndTime(TimeBoundValue.negativeInfinity)\n    }\n\n    setStartAndEndTimeFromInput(time: number): void {\n        const timeBound = this.clampTimeBound(time)\n        this.updateStartTime(timeBound)\n        this.updateEndTime(timeBound)\n    }\n\n    setStartTimeFromInput(time: number): void {\n        let timeBound = this.clampTimeBound(time)\n\n        // Prevent handles from being on the same time if not allowed\n        const closestTime = findClosestTime(this.timesAsc, time) ?? time\n        if (!this.allowHandlesOnSameTime && closestTime === this.endTime) {\n            timeBound = this.getPrevTime(this.endTime)\n        }\n\n        // If new start time > current end time, swap them\n        if (timeBound > this.endTime) {\n            this.updateStartTime(this.manager.endHandleTimeBound)\n            this.updateEndTime(timeBound)\n        } else {\n            this.updateStartTime(timeBound)\n        }\n    }\n\n    setEndTimeFromInput(time: number): void {\n        let timeBound = this.clampTimeBound(time)\n\n        // Prevent handles from being on the same time if not allowed\n        const closestTime = findClosestTime(this.timesAsc, time) ?? time\n        if (!this.allowHandlesOnSameTime && closestTime === this.startTime) {\n            timeBound = this.getNextTime(this.startTime)\n        }\n\n        // If new end time < current start time, swap them\n        if (timeBound < this.startTime) {\n            this.updateEndTime(this.manager.startHandleTimeBound)\n            this.updateStartTime(timeBound)\n        } else {\n            this.updateEndTime(timeBound)\n        }\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport { select } from \"d3-selection\"\nimport cx from \"clsx\"\nimport { match } from \"ts-pattern\"\nimport {\n    getRelativeMouse,\n    Bounds,\n    Time,\n    parseIntOrUndefined,\n    isTouchDevice,\n    convertDaysSinceEpochToDate,\n    convertDateToDaysSinceEpoch,\n    dayjs,\n    TimeInterval,\n    isSubYearly,\n    snapToIntervalStart,\n} from \"@ourworldindata/utils\"\nimport { observable, computed, action, makeObservable, reaction } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { faPlay, faPause } from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    TimelineController,\n    TimelineManager,\n    TimelineDragTarget,\n} from \"./TimelineController\"\nimport { ActionButton } from \"../controls/ActionButtons\"\nimport {\n    DEFAULT_GRAPHER_BOUNDS,\n    GRAPHER_FRAME_PADDING_HORIZONTAL,\n    GRAPHER_TIMELINE_CLASS,\n} from \"../core/GrapherConstants.js\"\nimport {\n    DateField,\n    DateInput,\n    DateSegment,\n    I18nProvider,\n    type DateInputProps,\n} from \"react-aria-components\"\nimport { CalendarDate } from \"@internationalized/date\"\n\nexport const TIMELINE_HEIGHT = 32 // Keep in sync with $timelineHeight in TimelineComponent.scss\n\nconst HANDLE_DIAMETER = 20 // Keep in sync with $handle-diameter in TimelineComponent.scss\nconst HANDLE_TOOLTIP_FADE_TIME_MS_MOBILE = 1000 // Brief delay after drag on mobile\n\nconst SLIDER_CLASS = \"GrapherTimeline__Slider\"\nconst PLAY_BUTTON_CLASS = \"GrapherTimeline__PlayButton\"\n\nenum MarkerType {\n    Start = \"startMarker\",\n    End = \"endMarker\",\n    Hover = \"hoverMarker\",\n}\n\nconst NAVIGATION_KEYS = [\n    \"ArrowUp\",\n    \"ArrowDown\",\n    \"ArrowLeft\",\n    \"ArrowRight\",\n    \"PageUp\",\n    \"PageDown\",\n    \"Home\",\n    \"End\",\n] as const\n\ntype NavigationKey = (typeof NAVIGATION_KEYS)[number]\n\ninterface TimelineComponentProps {\n    timelineController: TimelineController\n    maxWidth?: number\n}\n\n@observer\nexport class TimelineComponent extends React.Component<TimelineComponentProps> {\n    base = React.createRef<HTMLDivElement>()\n\n    private hoverTime?: Time\n\n    private startTooltipVisible: boolean = false\n    private endTooltipVisible: boolean = false\n    private lastUpdatedTooltip?: MarkerType\n\n    private editHandle?: Exclude<MarkerType, MarkerType.Hover>\n\n    // Prevents the hover handle from appearing when hovering over tooltips\n    private isHoveringOverTooltip: boolean = false\n\n    private slider?: Element | HTMLElement | null\n    private playButton?: Element | HTMLElement | null\n    private chartRowAnimationResetFrame?: number\n    private readonly disposers: (() => void)[] = []\n\n    constructor(props: TimelineComponentProps) {\n        super(props)\n\n        makeObservable<\n            TimelineComponent,\n            | \"startTooltipVisible\"\n            | \"endTooltipVisible\"\n            | \"lastUpdatedTooltip\"\n            | \"hoverTime\"\n            | \"editHandle\"\n            | \"isHoveringOverTooltip\"\n        >(this, {\n            startTooltipVisible: observable,\n            endTooltipVisible: observable,\n            lastUpdatedTooltip: observable,\n            hoverTime: observable,\n            editHandle: observable,\n            isHoveringOverTooltip: observable,\n        })\n    }\n\n    @computed protected get maxWidth(): number {\n        return this.props.maxWidth ?? DEFAULT_GRAPHER_BOUNDS.width\n    }\n\n    @computed private get dragTarget(): TimelineDragTarget | undefined {\n        return this.manager.timelineDragTarget\n    }\n\n    @computed private get isDragging(): boolean {\n        return !!this.dragTarget\n    }\n\n    @computed private get manager(): TimelineManager {\n        return this.props.timelineController.manager\n    }\n\n    @computed private get controller(): TimelineController {\n        return this.props.timelineController\n    }\n\n    @computed private get isTouchDevice(): boolean {\n        return isTouchDevice()\n    }\n\n    @computed private get canEditTimeViaTooltip(): boolean {\n        return !this.isTouchDevice\n    }\n\n    @computed private get timeInterval(): TimeInterval {\n        return this.manager.timeColumn?.timeInterval ?? TimeInterval.Year\n    }\n\n    @computed private get dateInputGranularity(): \"day\" | \"month\" {\n        return this.timeInterval === TimeInterval.Month ||\n            this.timeInterval === TimeInterval.Quarter\n            ? \"month\"\n            : \"day\"\n    }\n\n    private get sliderBounds(): Bounds {\n        return this.slider\n            ? Bounds.fromRect(this.slider.getBoundingClientRect())\n            : new Bounds(0, 0, 100, 100)\n    }\n\n    private getInputTimeFromMouse(\n        event: MouseEvent | TouchEvent\n    ): number | undefined {\n        if (!this.slider) return\n        const mouseX = getRelativeMouse(this.slider, event).x\n\n        const progress = mouseX / this.sliderBounds.width\n        return this.controller.progressToTime(progress)\n    }\n\n    @action.bound private onDrag(inputTime: number): void {\n        this.controller.onDrag()\n        this.manager.timelineDragTarget = this.controller.dragHandleToTime(\n            this.dragTarget!,\n            inputTime\n        )\n        this.showTooltips()\n    }\n\n    @action.bound private showStartTooltip(): void {\n        this.hideStartTooltipWithDelay.cancel()\n        this.startTooltipVisible = true\n    }\n\n    @action.bound private showEndTooltip(): void {\n        this.hideEndTooltipWithDelay.cancel()\n        this.endTooltipVisible = true\n    }\n\n    @action.bound private showTooltips(): void {\n        this.showStartTooltip()\n        this.showEndTooltip()\n\n        if (this.dragTarget === \"start\")\n            this.lastUpdatedTooltip = MarkerType.Start\n        if (this.dragTarget === \"end\") this.lastUpdatedTooltip = MarkerType.End\n        if (this.manager.startHandleTimeBound > this.manager.endHandleTimeBound)\n            this.lastUpdatedTooltip =\n                this.lastUpdatedTooltip === MarkerType.Start\n                    ? MarkerType.End\n                    : MarkerType.Start\n    }\n\n    private getDragTarget(\n        inputTime: number,\n        isStartMarker: boolean,\n        isEndMarker: boolean\n    ): TimelineDragTarget {\n        const { startHandleTimeBound, endHandleTimeBound } = this.manager\n\n        if (\n            startHandleTimeBound === endHandleTimeBound &&\n            (isStartMarker || isEndMarker)\n        )\n            return TimelineDragTarget.Both\n        else if (isStartMarker || inputTime <= startHandleTimeBound)\n            return TimelineDragTarget.Start\n        else if (isEndMarker || inputTime >= endHandleTimeBound)\n            return TimelineDragTarget.End\n        return TimelineDragTarget.Both\n    }\n\n    @action.bound private onMouseDown(event: MouseEvent | TouchEvent): void {\n        // Exit edit mode if dragging starts\n        this.resetEditState()\n\n        this.manager.onTimelineClick?.()\n\n        // Immediately hide the hover time handle\n        this.hoverTime = undefined\n\n        const targetEl = select(event.target as Element)\n\n        const inputTime = this.getInputTimeFromMouse(event)\n        if (inputTime === undefined) return\n\n        this.manager.timelineDragTarget = this.getDragTarget(\n            inputTime,\n            targetEl.classed(MarkerType.Start),\n            targetEl.classed(MarkerType.End)\n        )\n\n        if (this.dragTarget === \"both\")\n            this.controller.setDragOffsets(inputTime)\n\n        this.onDrag(inputTime)\n\n        event.preventDefault()\n    }\n\n    private queuedDrag?: boolean\n    @action.bound private onMouseMove(event: MouseEvent | TouchEvent): void {\n        const { dragTarget } = this\n        if (!dragTarget) return\n        if (this.queuedDrag) return\n\n        this.queuedDrag = true\n        const inputTime = this.getInputTimeFromMouse(event)\n        if (inputTime !== undefined) this.onDrag(inputTime)\n        this.queuedDrag = false\n    }\n\n    @action.bound private onMouseUp(): void {\n        this.manager.timelineDragTarget = undefined\n\n        if (this.manager.isTimelineAnimationPlaying) return\n\n        this.hideTooltipsAfterInteraction()\n    }\n\n    @computed private get areBothHandlesVisible(): boolean {\n        return this.controller.startTime !== this.controller.endTime\n    }\n\n    @computed private get shouldShowHoverTimeHandle(): boolean {\n        return (\n            !this.manager.isSingleTimeSelectionActive &&\n            !this.isDragging &&\n            !this.areBothHandlesVisible &&\n            !this.editHandle &&\n            !this.isHoveringOverTooltip\n        )\n    }\n\n    private setHoverTime(event: MouseEvent | TouchEvent): void {\n        if (!this.shouldShowHoverTimeHandle) return\n\n        const inputTime = this.getInputTimeFromMouse(event)\n        if (inputTime === undefined) return\n\n        if (!this.slider) return\n        const mouseX = getRelativeMouse(this.slider, event).x\n        const startX =\n            this.controller.startTimeProgress * this.slider.clientWidth\n\n        // Hide the hover handle when the mouse is positioned directly over\n        // the existing time handle\n        if (Math.abs(mouseX - startX) < HANDLE_DIAMETER) {\n            this.hoverTime = undefined\n            return\n        }\n\n        const timeBound = this.controller.clampTimeBound(inputTime)\n        if (!Number.isFinite(timeBound)) return\n\n        this.hoverTime = timeBound\n    }\n\n    @computed private get hoverTimeProgress(): number | undefined {\n        if (this.hoverTime === undefined) return undefined\n        return this.controller.timeToProgress(this.hoverTime)\n    }\n\n    private mouseHoveringOverTimeline: boolean = false\n    @action.bound private onMouseOverSlider(event: MouseEvent): void {\n        this.mouseHoveringOverTimeline = true\n\n        this.showStartTooltip()\n        this.showEndTooltip()\n\n        this.setHoverTime(event)\n    }\n\n    @action.bound private onMouseMoveSlider(event: MouseEvent): void {\n        this.setHoverTime(event)\n    }\n\n    @action.bound private onMouseLeaveSlider(): void {\n        if (\n            !this.manager.isTimelineAnimationPlaying &&\n            !this.isDragging &&\n            !this.editHandle\n        ) {\n            this.startTooltipVisible = false\n            this.endTooltipVisible = false\n        }\n        this.mouseHoveringOverTimeline = false\n        this.hoverTime = undefined\n        // Don't reset edit state when mouse leaves - let user complete editing\n        if (!this.editHandle) this.resetEditState()\n    }\n\n    private readonly hideStartTooltipWithDelay = _.debounce(() => {\n        this.startTooltipVisible = false\n    }, HANDLE_TOOLTIP_FADE_TIME_MS_MOBILE)\n    private readonly hideEndTooltipWithDelay = _.debounce(() => {\n        this.endTooltipVisible = false\n    }, HANDLE_TOOLTIP_FADE_TIME_MS_MOBILE)\n\n    @action.bound private hideTooltipsAfterInteraction(): void {\n        if (this.isTouchDevice) {\n            // On mobile, hide after a brief delay so user can see final values\n            this.hideStartTooltipWithDelay()\n            this.hideEndTooltipWithDelay()\n        } else if (!this.mouseHoveringOverTimeline) {\n            // On desktop, hide immediately if not hovering\n            this.startTooltipVisible = false\n            this.endTooltipVisible = false\n        }\n    }\n\n    @action.bound private onPlayTouchEnd(evt: Event): void {\n        evt.preventDefault()\n        evt.stopPropagation()\n\n        // Show tooltips when starting playback\n        if (!this.manager.isTimelineAnimationPlaying) {\n            this.showStartTooltip()\n            this.showEndTooltip()\n        }\n\n        void this.controller.togglePlay()\n    }\n\n    @action.bound private onSliderTouchStart(event: Event): void {\n        this.onMouseDown(event as TouchEvent)\n    }\n\n    override componentDidMount(): void {\n        const current = this.base.current\n\n        if (current) {\n            this.slider = current.querySelector(`.${SLIDER_CLASS}`)\n            this.playButton = current.querySelector(`.${PLAY_BUTTON_CLASS}`)\n        }\n\n        document.documentElement.addEventListener(\"mouseup\", this.onMouseUp)\n        document.documentElement.addEventListener(\"mouseleave\", this.onMouseUp)\n        document.documentElement.addEventListener(\"mousemove\", this.onMouseMove)\n        document.documentElement.addEventListener(\"touchend\", this.onMouseUp)\n        document.documentElement.addEventListener(\"touchmove\", this.onMouseMove)\n        this.slider?.addEventListener(\"touchstart\", this.onSliderTouchStart, {\n            passive: false,\n        })\n        this.playButton?.addEventListener(\"touchend\", this.onPlayTouchEnd, {\n            passive: false,\n        })\n\n        // Hide tooltips when playback stops\n        this.disposers.push(\n            reaction(\n                () => this.manager.isTimelineAnimationPlaying,\n                (isPlaying, wasPlaying) => {\n                    if (wasPlaying && !isPlaying)\n                        this.hideTooltipsAfterInteraction()\n                }\n            )\n        )\n    }\n\n    override componentWillUnmount(): void {\n        document.documentElement.removeEventListener(\"mouseup\", this.onMouseUp)\n        document.documentElement.removeEventListener(\n            \"mouseleave\",\n            this.onMouseUp\n        )\n        document.documentElement.removeEventListener(\n            \"mousemove\",\n            this.onMouseMove\n        )\n        document.documentElement.removeEventListener(\"touchend\", this.onMouseUp)\n        document.documentElement.removeEventListener(\n            \"touchmove\",\n            this.onMouseMove\n        )\n        this.slider?.removeEventListener(\"touchstart\", this.onSliderTouchStart)\n        this.playButton?.removeEventListener(\"touchend\", this.onPlayTouchEnd)\n\n        if (this.chartRowAnimationResetFrame !== undefined) {\n            cancelAnimationFrame(this.chartRowAnimationResetFrame)\n            this.enableChartRowAnimation()\n        }\n\n        this.disposers.forEach((dispose) => dispose())\n    }\n\n    @action.bound private disableChartRowAnimationForNextFrame(): void {\n        this.manager.disableChartRowAnimation = true\n\n        if (this.chartRowAnimationResetFrame !== undefined) {\n            cancelAnimationFrame(this.chartRowAnimationResetFrame)\n        }\n\n        this.chartRowAnimationResetFrame = requestAnimationFrame(() => {\n            this.chartRowAnimationResetFrame = requestAnimationFrame(\n                this.enableChartRowAnimation\n            )\n        })\n    }\n\n    @action.bound private enableChartRowAnimation(): void {\n        this.chartRowAnimationResetFrame = undefined\n        this.manager.disableChartRowAnimation = false\n    }\n\n    private formatTime(time: number): string {\n        const { timeColumn } = this.manager\n        if (!timeColumn) return time.toString()\n        return timeColumn.formatTimeShort(time)\n    }\n\n    @action.bound private togglePlay(): void {\n        void this.controller.togglePlay()\n    }\n\n    @action.bound private onStartEditing(\n        handle: Exclude<MarkerType, MarkerType.Hover>\n    ): void {\n        this.editHandle = handle\n    }\n\n    @action.bound private resetEditState(): void {\n        this.editHandle = undefined\n    }\n\n    @action.bound private onTooltipMouseEnter(): void {\n        this.isHoveringOverTooltip = true\n        this.hoverTime = undefined\n    }\n\n    @action.bound private onTooltipMouseLeave(): void {\n        this.isHoveringOverTooltip = false\n    }\n\n    @action.bound private onEdgeButtonMouseEnter(): void {\n        this.hoverTime = undefined\n    }\n\n    @action.bound private onMinTimeButtonClick(): void {\n        if (this.areBothHandlesVisible) {\n            this.controller.resetStartToMin()\n        } else {\n            this.controller.setStartAndEndTimeFromInput(this.controller.minTime)\n        }\n    }\n\n    @action.bound private onMaxTimeButtonClick(): void {\n        if (this.areBothHandlesVisible) {\n            this.controller.resetEndToMax()\n        } else {\n            this.controller.setStartAndEndTimeFromInput(this.controller.maxTime)\n        }\n    }\n\n    @action.bound private onCompleteYear(year?: number): void {\n        // Only apply when the user has finished typing\n        if (year !== undefined && this.editHandle !== undefined)\n            this.onChangeYear(year)\n        this.resetEditState()\n    }\n\n    @action.bound private onChangeYear(year: number): void {\n        if (!this.areBothHandlesVisible) {\n            this.controller.setStartAndEndTimeFromInput(year)\n        } else if (this.editHandle === MarkerType.Start) {\n            this.controller.setStartTimeFromInput(year)\n        } else {\n            this.controller.setEndTimeFromInput(year)\n        }\n    }\n\n    private calendarDateToSnappedDaysSinceEpoch(date: CalendarDate): number {\n        return snapToIntervalStart(\n            calendarDateToDaysSinceEpoch(date),\n            this.timeInterval\n        )\n    }\n\n    @action.bound private onCompleteDate(date?: CalendarDate): void {\n        // Only apply when the user has finished typing\n        if (date && this.editHandle !== undefined) this.onChangeDate(date)\n        this.resetEditState()\n    }\n\n    @action.bound private onChangeDate(date: CalendarDate): void {\n        const daysSinceEpoch = this.calendarDateToSnappedDaysSinceEpoch(date)\n        if (!this.areBothHandlesVisible) {\n            this.controller.setStartAndEndTimeFromInput(daysSinceEpoch)\n        } else if (this.editHandle === MarkerType.Start) {\n            this.controller.setStartTimeFromInput(daysSinceEpoch)\n        } else {\n            this.controller.setEndTimeFromInput(daysSinceEpoch)\n        }\n    }\n\n    @action.bound private getStartTimeForNavigationKey(\n        key: NavigationKey\n    ): number {\n        const { controller } = this\n        const { startTime, endTime } = controller\n\n        return match(key)\n            .with(\"ArrowUp\", \"ArrowRight\", () =>\n                controller.getNextValidTime(startTime, endTime)\n            )\n            .with(\"ArrowDown\", \"ArrowLeft\", () =>\n                controller.getPrevValidTime(startTime, endTime)\n            )\n            .with(\"PageUp\", () => controller.getLargeStepForward(startTime))\n            .with(\"PageDown\", () => controller.getLargeStepBackward(startTime))\n            .with(\"Home\", () => controller.minTime)\n            .with(\"End\", () => controller.maxTime)\n            .exhaustive()\n    }\n\n    @action.bound private getEndTimeForNavigationKey(\n        key: NavigationKey\n    ): number {\n        const { controller } = this\n        const { startTime, endTime } = controller\n\n        return match(key)\n            .with(\"ArrowUp\", \"ArrowRight\", () =>\n                controller.getNextValidTime(endTime, startTime)\n            )\n            .with(\"ArrowDown\", \"ArrowLeft\", () =>\n                controller.getPrevValidTime(endTime, startTime)\n            )\n            .with(\"PageUp\", () => controller.getLargeStepForward(endTime))\n            .with(\"PageDown\", () => controller.getLargeStepBackward(endTime))\n            .with(\"Home\", () => controller.minTime)\n            .with(\"End\", () => controller.maxTime)\n            .exhaustive()\n    }\n\n    @action.bound updateStartTimeOnKeyDown(key: NavigationKey): void {\n        const { controller } = this\n        match(key)\n            .with(\"Home\", () => controller.resetStartToMin())\n            .with(\"End\", () => controller.setStartToMax())\n            .with(\"ArrowLeft\", \"ArrowDown\", () =>\n                controller.decreaseStartTime()\n            )\n            .with(\"ArrowRight\", \"ArrowUp\", () => controller.increaseStartTime())\n            .with(\"PageUp\", () => controller.increaseStartTimeByLargeStep())\n            .with(\"PageDown\", () => controller.decreaseStartTimeByLargeStep())\n            .exhaustive()\n    }\n\n    @action.bound updateEndTimeOnKeyDown(key: NavigationKey): void {\n        const { controller } = this\n        const shouldMoveBothHandles = !this.areBothHandlesVisible\n        match(key)\n            .with(\"Home\", () => controller.setEndToMin())\n            .with(\"End\", () => controller.resetEndToMax())\n            .with(\"ArrowLeft\", \"ArrowDown\", () => {\n                controller.decreaseEndTime()\n                if (shouldMoveBothHandles) controller.decreaseStartTime()\n            })\n            .with(\"ArrowRight\", \"ArrowUp\", () => {\n                controller.increaseEndTime()\n                if (shouldMoveBothHandles) controller.increaseStartTime()\n            })\n            .with(\"PageUp\", () => {\n                controller.increaseEndTimeByLargeStep()\n                if (shouldMoveBothHandles)\n                    controller.increaseStartTimeByLargeStep()\n            })\n            .with(\"PageDown\", () => {\n                controller.decreaseEndTimeByLargeStep()\n                if (shouldMoveBothHandles)\n                    controller.decreaseStartTimeByLargeStep()\n            })\n            .exhaustive()\n    }\n\n    convertToTime(time: number): number {\n        if (time === -Infinity) return this.controller.minTime\n        if (time === +Infinity) return this.controller.maxTime\n        return time\n    }\n\n    @computed private get startHandleTooltip(): React.ReactNode {\n        const { startTime } = this.controller\n\n        if (!this.startTooltipVisible || !this.areBothHandlesVisible) {\n            return undefined\n        }\n\n        const formattedStartTime = this.formatTime(this.controller.startTime)\n\n        if (!this.canEditTimeViaTooltip) {\n            return <SimpleTimeTooltip formattedTime={formattedStartTime} />\n        }\n\n        const isEditing = this.editHandle === MarkerType.Start\n\n        const isDateValid = (date: CalendarDate): boolean => {\n            const { minTime, endTime, allowHandlesOnSameTime } = this.controller\n            const time = this.calendarDateToSnappedDaysSinceEpoch(date)\n            if (time < minTime) return false\n            return allowHandlesOnSameTime ? time <= endTime : time < endTime\n        }\n\n        return isSubYearly(this.timeInterval) ? (\n            <EditableDateTooltip\n                position=\"left\"\n                isEditing={isEditing}\n                formattedTime={formattedStartTime}\n                currentTime={startTime}\n                isDateValid={isDateValid}\n                granularity={this.dateInputGranularity}\n                onStartEditing={() => this.onStartEditing(MarkerType.Start)}\n                onComplete={this.onCompleteDate}\n                onChange={this.onChangeDate}\n                onMouseEnter={this.onTooltipMouseEnter}\n                onMouseLeave={this.onTooltipMouseLeave}\n            />\n        ) : (\n            <EditableYearTooltip\n                position=\"left\"\n                isEditing={isEditing}\n                currentTime={startTime}\n                formattedTime={formattedStartTime}\n                onStartEditing={() => this.onStartEditing(MarkerType.Start)}\n                onComplete={this.onCompleteYear}\n                onChange={this.onChangeYear}\n                getTimeForKey={this.getStartTimeForNavigationKey}\n                onMouseEnter={this.onTooltipMouseEnter}\n                onMouseLeave={this.onTooltipMouseLeave}\n                onBlur={action(() => {\n                    this.startTooltipVisible = false\n                    this.endTooltipVisible = false\n                })}\n            />\n        )\n    }\n\n    @computed private get endHandleTooltip(): React.ReactNode {\n        const { endTime } = this.controller\n\n        if (!this.endTooltipVisible) return undefined\n\n        const formattedEndTime = this.formatTime(this.controller.endTime)\n\n        if (!this.canEditTimeViaTooltip) {\n            return <SimpleTimeTooltip formattedTime={formattedEndTime} />\n        }\n\n        // Avoid overlap with the hover tooltip when hovering to the right of the handle\n        const position =\n            this.hoverTime !== undefined &&\n            this.hoverTime > this.controller.endTime\n                ? \"left\"\n                : \"right\"\n\n        const isEditing = this.editHandle === MarkerType.End\n\n        const isDateValid = (date: CalendarDate): boolean => {\n            const { maxTime, startTime, allowHandlesOnSameTime } =\n                this.controller\n            const time = this.calendarDateToSnappedDaysSinceEpoch(date)\n            if (time > maxTime) return false\n            return allowHandlesOnSameTime ? time >= startTime : time > startTime\n        }\n\n        return isSubYearly(this.timeInterval) ? (\n            <EditableDateTooltip\n                position={position}\n                isEditing={isEditing}\n                formattedTime={formattedEndTime}\n                currentTime={endTime}\n                isDateValid={isDateValid}\n                granularity={this.dateInputGranularity}\n                onStartEditing={() => this.onStartEditing(MarkerType.End)}\n                onComplete={this.onCompleteDate}\n                onChange={this.onChangeDate}\n                onMouseEnter={this.onTooltipMouseEnter}\n                onMouseLeave={this.onTooltipMouseLeave}\n            />\n        ) : (\n            <EditableYearTooltip\n                position={position}\n                isEditing={isEditing}\n                currentTime={endTime}\n                formattedTime={formattedEndTime}\n                onStartEditing={() => this.onStartEditing(MarkerType.End)}\n                onComplete={this.onCompleteYear}\n                onChange={this.onChangeYear}\n                getTimeForKey={this.getEndTimeForNavigationKey}\n                onMouseEnter={this.onTooltipMouseEnter}\n                onMouseLeave={this.onTooltipMouseLeave}\n                onBlur={action(() => {\n                    this.startTooltipVisible = false\n                    this.endTooltipVisible = false\n                })}\n            />\n        )\n    }\n\n    @computed private get hoverTooltip(): React.ReactNode {\n        const { hoverTime } = this\n\n        if (!hoverTime) return undefined\n        const formattedHoverTime = this.formatTime(hoverTime)\n\n        if (!this.canEditTimeViaTooltip) {\n            return <SimpleTimeTooltip formattedTime={formattedHoverTime} />\n        }\n\n        // Show on the left if hovering to the left of the existing handle,\n        // right if hovering to the right of the existing handle\n        const position = hoverTime < this.controller.endTime ? \"left\" : \"right\"\n\n        // The hover tooltip is not editable (since it's impossible to click on\n        // the tooltip), but it uses the same component for consistent styling\n        return (\n            <EditableYearTooltip\n                position={position}\n                currentTime={hoverTime}\n                formattedTime={formattedHoverTime}\n            />\n        )\n    }\n\n    override render(): React.ReactElement {\n        const { manager, controller, hoverTime } = this\n        const {\n            startTimeProgress,\n            endTimeProgress,\n            minTime,\n            maxTime,\n            startTime,\n            endTime,\n        } = controller\n\n        const formattedMinTime = this.formatTime(minTime)\n        const formattedMaxTime = this.formatTime(maxTime)\n        const formattedStartTime = this.formatTime(startTime)\n        const formattedEndTime = this.formatTime(endTime)\n        const formattedHoverTime =\n            hoverTime !== undefined ? this.formatTime(hoverTime) : undefined\n\n        return (\n            <div\n                ref={this.base}\n                className={cx(GRAPHER_TIMELINE_CLASS, {\n                    [`${GRAPHER_TIMELINE_CLASS}--hover`]:\n                        this.mouseHoveringOverTimeline,\n                    [`${GRAPHER_TIMELINE_CLASS}--touch`]: this.isTouchDevice,\n                })}\n                style={{ padding: `0 ${GRAPHER_FRAME_PADDING_HORIZONTAL}px` }}\n                role=\"group\"\n                aria-label=\"Timeline controls\"\n                onMouseOver={action((event) =>\n                    this.onMouseOverSlider(event.nativeEvent)\n                )}\n                onMouseLeave={this.onMouseLeaveSlider}\n                onMouseMove={action((event) =>\n                    this.onMouseMoveSlider(event.nativeEvent)\n                )}\n            >\n                {!this.manager.disablePlay && (\n                    <ActionButton\n                        className={PLAY_BUTTON_CLASS}\n                        dataTrackNote={\n                            manager.isTimelineAnimationPlaying\n                                ? \"timeline_pause\"\n                                : \"timeline_play\"\n                        }\n                        onMouseDown={(e): void => e.stopPropagation()}\n                        onClick={this.togglePlay}\n                        showLabel={false}\n                        label={\n                            (manager.isTimelineAnimationPlaying\n                                ? \"Pause\"\n                                : \"Play\") + \" time-lapse\"\n                        }\n                        icon={\n                            manager.isTimelineAnimationPlaying\n                                ? faPause\n                                : faPlay\n                        }\n                        isActive={manager.isTimelineAnimationPlaying}\n                        style={{ minWidth: TIMELINE_HEIGHT }}\n                    />\n                )}\n                <TimelineEdgeButton\n                    formattedTime={formattedMinTime}\n                    onClick={this.onMinTimeButtonClick}\n                    onMouseEnter={this.onEdgeButtonMouseEnter}\n                />\n                <div\n                    className={`${SLIDER_CLASS} clickable`}\n                    role=\"group\"\n                    aria-label=\"Time range slider\"\n                    onMouseDown={(event) => this.onMouseDown(event.nativeEvent)}\n                >\n                    <TimelineHandle\n                        className={MarkerType.Start}\n                        ariaLabel={`Start time: ${formattedStartTime}`}\n                        offsetPercent={startTimeProgress * 100}\n                        formattedMinTime={formattedMinTime}\n                        formattedMaxTime={formattedMaxTime}\n                        formattedCurrTime={formattedStartTime}\n                        tabIndex={this.areBothHandlesVisible ? 0 : -1}\n                        onKeyDown={action((e) => {\n                            if (isRelevantNavigationKey(e.key)) {\n                                e.preventDefault() // Prevent scrolling\n                                this.disableChartRowAnimationForNextFrame()\n                                this.updateStartTimeOnKeyDown(e.key)\n                            }\n                        })}\n                        onFocus={action(() => this.showTooltips())}\n                        tooltip={this.startHandleTooltip}\n                        zIndex={\n                            this.lastUpdatedTooltip === MarkerType.Start ? 2 : 1\n                        }\n                    />\n                    <TimelineInterval\n                        startTimeProgress={startTimeProgress}\n                        endTimeProgress={endTimeProgress}\n                    />\n                    {this.hoverTimeProgress !== undefined && (\n                        <TimelineInterval\n                            className=\"GrapherTimeline__HoverInterval\"\n                            startTimeProgress={Math.min(\n                                startTimeProgress,\n                                this.hoverTimeProgress\n                            )}\n                            endTimeProgress={Math.max(\n                                startTimeProgress,\n                                this.hoverTimeProgress\n                            )}\n                            ariaHidden={true}\n                        />\n                    )}\n                    <TimelineHandle\n                        className={MarkerType.End}\n                        ariaLabel={`End time: ${formattedEndTime}`}\n                        offsetPercent={endTimeProgress * 100}\n                        formattedMinTime={formattedMinTime}\n                        formattedMaxTime={formattedMaxTime}\n                        formattedCurrTime={formattedEndTime}\n                        onKeyDown={action((e) => {\n                            if (isRelevantNavigationKey(e.key)) {\n                                e.preventDefault() // prevent scrolling\n                                this.disableChartRowAnimationForNextFrame()\n                                this.updateEndTimeOnKeyDown(e.key)\n                            }\n                        })}\n                        onFocus={action(() => this.showTooltips())}\n                        tooltip={this.endHandleTooltip}\n                        zIndex={\n                            this.lastUpdatedTooltip === MarkerType.End ? 2 : 1\n                        }\n                    />\n                    {this.hoverTimeProgress !== undefined &&\n                        formattedHoverTime && (\n                            <TimelineHandle\n                                className={MarkerType.Hover}\n                                tabIndex={-1}\n                                offsetPercent={this.hoverTimeProgress * 100}\n                                formattedMinTime={formattedMinTime}\n                                formattedMaxTime={formattedMaxTime}\n                                formattedCurrTime={formattedHoverTime}\n                                tooltip={this.hoverTooltip}\n                                zIndex={3}\n                            />\n                        )}\n                </div>\n                <TimelineEdgeButton\n                    formattedTime={formattedMaxTime}\n                    onClick={this.onMaxTimeButtonClick}\n                    onMouseEnter={this.onEdgeButtonMouseEnter}\n                />\n            </div>\n        )\n    }\n}\n\nconst TimelineEdgeButton = ({\n    formattedTime,\n    onClick,\n    onMouseEnter,\n    onMouseLeave,\n}: {\n    formattedTime: string\n    onClick: () => void\n    onMouseEnter?: () => void\n    onMouseLeave?: () => void\n}): React.ReactElement => {\n    return (\n        <button\n            className=\"GrapherTimeline__TimelineEdgeButton\"\n            type=\"button\"\n            onClick={onClick}\n            onMouseEnter={onMouseEnter}\n            onMouseLeave={onMouseLeave}\n            aria-label={`Jump to ${formattedTime}`}\n        >\n            {formattedTime}\n        </button>\n    )\n}\n\nfunction TimelineHandle({\n    className,\n    ariaLabel,\n    offsetPercent,\n    formattedMinTime,\n    formattedMaxTime,\n    formattedCurrTime,\n    tooltip,\n    tabIndex = 0,\n    zIndex,\n    onKeyDown,\n    onFocus,\n    onBlur,\n}: {\n    className?: string\n    ariaLabel?: string\n    offsetPercent: number\n    formattedMinTime: string\n    formattedMaxTime: string\n    formattedCurrTime: string\n    tooltip?: React.ReactNode\n    tabIndex?: number\n    zIndex?: number\n    onKeyDown?: React.KeyboardEventHandler<HTMLDivElement>\n    onFocus?: React.FocusEventHandler<HTMLDivElement>\n    onBlur?: React.FocusEventHandler<HTMLDivElement>\n}): React.ReactElement {\n    return (\n        // @ts-expect-error aria-value* fields expect a number, but if we're dealing with daily data,\n        // the numeric representation of a date is meaningless, so we pass the formatted date string instead.\n        <div\n            className={cx(\"GrapherTimeline__Handle\", className)}\n            style={{ left: `${offsetPercent}%`, zIndex }}\n            role=\"slider\"\n            tabIndex={tabIndex}\n            aria-valuemin={castToNumberIfPossible(formattedMinTime)}\n            aria-valuenow={castToNumberIfPossible(formattedCurrTime)}\n            aria-valuemax={castToNumberIfPossible(formattedMaxTime)}\n            aria-valuetext={formattedCurrTime}\n            aria-label={ariaLabel}\n            aria-description=\"Use arrow keys to adjust by one step, Page Up/Down for larger steps, Home/End to jump to minimum/maximum.\"\n            aria-orientation=\"horizontal\"\n            onFocus={onFocus}\n            onBlur={onBlur}\n            onKeyDown={onKeyDown}\n        >\n            <div className=\"GrapherTimeline__HandleKnob\" />\n            {tooltip}\n        </div>\n    )\n}\n\nfunction EditableYearTooltip({\n    position,\n    isEditing = false,\n    currentTime,\n    formattedTime,\n    onStartEditing,\n    onComplete,\n    onChange,\n    getTimeForKey,\n    onMouseEnter,\n    onMouseLeave,\n    onBlur,\n}: {\n    position: \"left\" | \"right\"\n    isEditing?: boolean\n    currentTime: number\n    formattedTime: string\n    onStartEditing?: () => void\n    onComplete?: (year?: number) => void\n    onChange?: (year: number) => void\n    getTimeForKey?: (key: NavigationKey) => number\n    onMouseEnter?: () => void\n    onMouseLeave?: () => void\n    onBlur?: () => void\n}): React.ReactElement {\n    const [inputValue, setInputValue] = React.useState(currentTime.toString())\n\n    // Reset the input whenever editing starts or the time changes while editing\n    // https://react.dev/learn/you-might-not-need-an-effect#adjusting-some-state-when-a-prop-changes\n    const [prevState, setPrevState] = React.useState({ isEditing, currentTime })\n    if (\n        prevState.isEditing !== isEditing ||\n        prevState.currentTime !== currentTime\n    ) {\n        setPrevState({ isEditing, currentTime })\n        if (isEditing) setInputValue(currentTime.toString())\n    }\n\n    const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>): void => {\n        if (e.key === \".\") {\n            // Prevent entering decimal points\n            e.preventDefault()\n        } else if (e.key === \"Enter\") {\n            const parsed = parseIntOrUndefined(inputValue.trim())\n            onComplete?.(parsed)\n        } else if (e.key === \"Escape\") {\n            onComplete?.()\n        } else if (getTimeForKey && isRelevantNavigationKey(e.key)) {\n            // Prevent default browser increment/decrement behavior\n            e.preventDefault()\n\n            const newTime = getTimeForKey(e.key)\n            setInputValue(newTime.toString())\n            onChange?.(newTime)\n        }\n\n        e.stopPropagation()\n    }\n\n    const handleChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\n        const newValue = e.target.value\n        setInputValue(newValue)\n    }\n\n    const handleBlur = (): void => {\n        const parsed = parseIntOrUndefined(inputValue.trim())\n        onComplete?.(parsed)\n    }\n\n    return (\n        <div\n            className={cx(\"EditableTimeTooltip\", {\n                \"EditableTimeTooltip--left\": position === \"left\",\n                \"EditableTimeTooltip--right\": position === \"right\",\n            })}\n            onMouseDown={(e) => e.stopPropagation()}\n            onMouseEnter={onMouseEnter}\n            onMouseLeave={onMouseLeave}\n        >\n            {isEditing ? (\n                <div\n                    className=\"EditableTimeTooltip__InputWrapper\"\n                    data-value={inputValue}\n                >\n                    <input\n                        type=\"number\"\n                        className=\"EditableTimeTooltip__Input\"\n                        value={inputValue}\n                        onChange={handleChange}\n                        onBlur={handleBlur}\n                        onKeyDown={handleKeyDown}\n                        onFocus={(e) => e.target.select()}\n                        autoFocus\n                        aria-label=\"Edit year\"\n                    />\n                </div>\n            ) : (\n                <button\n                    type=\"button\"\n                    className=\"EditableTimeTooltip__Button\"\n                    onClick={onStartEditing}\n                    onBlur={onBlur}\n                    aria-label={`Current year: ${formattedTime}. Click to edit.`}\n                >\n                    {formattedTime}\n                </button>\n            )}\n        </div>\n    )\n}\n\nfunction EditableDateTooltip({\n    position,\n    isEditing = false,\n    currentTime,\n    formattedTime,\n    isDateValid = (): boolean => true,\n    granularity = \"day\",\n    onStartEditing,\n    onMouseEnter,\n    onMouseLeave,\n    onComplete,\n    onChange,\n}: {\n    position: \"left\" | \"right\"\n    isEditing?: boolean\n    currentTime: number\n    formattedTime: string\n    isDateValid?: (date: CalendarDate) => boolean\n    granularity?: \"day\" | \"month\"\n    onStartEditing?: () => void\n    onMouseEnter?: () => void\n    onMouseLeave?: () => void\n    onComplete: (date?: CalendarDate) => void\n    onChange: (date: CalendarDate) => void\n}): React.ReactElement {\n    return (\n        <div\n            className={cx(\"EditableTimeTooltip\", {\n                \"EditableTimeTooltip--left\": position === \"left\",\n                \"EditableTimeTooltip--right\": position === \"right\",\n            })}\n            onMouseEnter={onMouseEnter}\n            onMouseLeave={onMouseLeave}\n            onMouseDown={(e) => e.stopPropagation()}\n        >\n            {isEditing ? (\n                <TimelineDateInput\n                    value={daysSinceEpochToCalendarDate(currentTime)}\n                    isDateValid={isDateValid}\n                    granularity={granularity}\n                    onComplete={onComplete}\n                    onChange={onChange}\n                />\n            ) : (\n                <button\n                    type=\"button\"\n                    className=\"EditableTimeTooltip__Button\"\n                    onClick={onStartEditing}\n                    aria-label={`Current date: ${formattedTime}. Click to edit.`}\n                >\n                    {formattedTime}\n                </button>\n            )}\n        </div>\n    )\n}\n\nconst TimelineDateInput = ({\n    value,\n    isDateValid,\n    granularity = \"day\",\n    onComplete,\n    onChange,\n}: {\n    value: CalendarDate\n    isDateValid: (date: CalendarDate) => boolean\n    granularity?: \"day\" | \"month\"\n    onComplete: (date?: CalendarDate) => void\n    onChange?: (date: CalendarDate) => void\n}): React.ReactElement => {\n    const [currentValue, setCurrentValue] = React.useState(value)\n    const [shouldApplyImmediately, setShouldApplyImmediately] =\n        React.useState(false)\n\n    const handleKeyDown = (e: React.KeyboardEvent): void => {\n        if (e.key === \"Enter\") {\n            onComplete(currentValue)\n        } else if (e.key === \"Escape\") {\n            onComplete()\n        } else if (e.key === \"ArrowUp\" || e.key === \"ArrowDown\") {\n            // Apply immediately on arrow key changes\n            setShouldApplyImmediately(true)\n        } else {\n            // Reset flag when typing (any other key)\n            setShouldApplyImmediately(false)\n        }\n        e.stopPropagation()\n    }\n\n    const handleChange = (date: CalendarDate | null): void => {\n        if (!date) return\n\n        setCurrentValue(date)\n\n        // If this change was triggered by arrow keys,\n        // apply immediately without exiting edit mode\n        if (shouldApplyImmediately) {\n            if (!isDateValid(date)) return\n            onChange?.(date)\n            setShouldApplyImmediately(false)\n        }\n    }\n\n    const dateField = (\n        <DateField\n            value={currentValue}\n            onChange={handleChange}\n            onBlur={() => onComplete(currentValue)}\n            onKeyDown={handleKeyDown}\n            className={cx(\"GrapherTimeline__DateInput\", {\n                \"GrapherTimeline__DateInput--month\": granularity === \"month\",\n            })}\n            aria-label=\"Edit date\"\n        >\n            <DateInput className=\"GrapherTimeline__DateInputField\">\n                {(segment) =>\n                    match(granularity)\n                        .with(\"month\", () => (\n                            <MonthYearSegment\n                                segment={segment}\n                                className=\"GrapherTimeline__DateInputSegment\"\n                            />\n                        ))\n                        .with(\"day\", () => (\n                            <DateSegment\n                                segment={segment}\n                                className=\"GrapherTimeline__DateInputSegment\"\n                            />\n                        ))\n                        .exhaustive()\n                }\n            </DateInput>\n        </DateField>\n    )\n\n    // MonthYearSegment renders its own \"/\" separator before the year segment,\n    // which assumes month-before-year segment order. Pin the locale so this\n    // holds even for users whose locale puts the year first (e.g. ja, zh, hu).\n    // The day-granularity field keeps the browser locale.\n    return granularity === \"month\" ? (\n        <I18nProvider locale=\"en-US\">{dateField}</I18nProvider>\n    ) : (\n        dateField\n    )\n}\n\n// Renders a segment for the month-granularity date field as \"MM / YYYY\": keep\n// only the month and year segments and put our own separator between them,\n// dropping the day segment and the locale separators react-aria places around\n// it. Placing the separator before the year assumes month-before-year segment\n// order, which TimelineDateInput guarantees by pinning the locale.\nfunction MonthYearSegment({\n    segment,\n    className,\n}: {\n    segment: Parameters<DateInputProps[\"children\"]>[0]\n    className?: string\n}): React.ReactElement {\n    // Don't render anything for segments that aren't month or year (e.g. day)\n    if (segment.type !== \"month\" && segment.type !== \"year\")\n        return <React.Fragment />\n\n    const separator = (\n        <span aria-hidden className=\"GrapherTimeline__DateInputSeparator\">\n            /\n        </span>\n    )\n\n    return (\n        <>\n            {segment.type === \"year\" && separator}\n            <DateSegment segment={segment} className={className} />\n        </>\n    )\n}\n\nconst TimelineInterval = ({\n    startTimeProgress,\n    endTimeProgress,\n    className,\n    ariaHidden,\n}: {\n    startTimeProgress: number\n    endTimeProgress: number\n    className?: string\n    ariaHidden?: boolean\n}): React.ReactElement => {\n    const left = startTimeProgress * 100\n    const right = 100 - endTimeProgress * 100\n    return (\n        <div\n            className={cx(\"GrapherTimeline__Interval\", className)}\n            style={{ left: `${left}%`, right: `${right}%` }}\n            role=\"presentation\"\n            aria-hidden={ariaHidden}\n        />\n    )\n}\n\nfunction SimpleTimeTooltip({\n    formattedTime,\n}: {\n    formattedTime: string\n}): React.ReactElement {\n    return <div className=\"SimpleTimeTooltip\">{formattedTime}</div>\n}\n\n/** Convert days-since-epoch integer to CalendarDate object */\nexport function daysSinceEpochToCalendarDate(\n    daysSinceEpoch: number\n): CalendarDate {\n    const date = convertDaysSinceEpochToDate(daysSinceEpoch)\n    return new CalendarDate(\n        date.year(),\n        date.month() + 1, // CalendarDate is 1-indexed, dayjs is 0-indexed\n        date.date()\n    )\n}\n\n/** Convert CalendarDate to days-since-epoch integer */\nexport function calendarDateToDaysSinceEpoch(date: CalendarDate): number {\n    // CalendarDate is 1-indexed, Date.UTC expects a 0-indexed month.\n    const utcMs = Date.UTC(date.year, date.month - 1, date.day)\n    return convertDateToDaysSinceEpoch(dayjs.utc(utcMs))\n}\n\nfunction isRelevantNavigationKey(key: string): key is NavigationKey {\n    return NAVIGATION_KEYS.includes(key as NavigationKey)\n}\n\nfunction castToNumberIfPossible(s: string): string | number {\n    return isNumber(s) ? +s : s\n}\n\nfunction isNumber(s: string): boolean {\n    return /^\\d+$/.test(s)\n}\n","import {\n    ALL_GRAPHER_CHART_TYPES,\n    GRAPHER_CHART_TYPES,\n    GRAPHER_TAB_NAMES,\n    GRAPHER_TAB_CONFIG_OPTIONS,\n    GRAPHER_TAB_QUERY_PARAMS,\n    GrapherChartType,\n    GrapherTabName,\n    GrapherTabConfigOption,\n    GrapherTabQueryParam,\n    DimensionProperty,\n} from \"@ourworldindata/types\"\nimport * as R from \"remeda\"\nimport { match } from \"ts-pattern\"\n\n/**\n * Chart type combinations that are currently supported. Every subset of these\n * combinations is valid. For example, [LineChart, SlopeChart, DiscreteBar]\n * makes all these combinations valid: [LineChart, SlopeChart, DiscreteBar],\n * [LineChart, SlopeChart], [LineChart, DiscreteBar], [SlopeChart, DiscreteBar]\n *\n * This also determines the order of chart types in the UI.\n */\nexport const VALID_CHART_TYPE_COMBINATIONS: GrapherChartType[][] = [\n    [\n        GRAPHER_CHART_TYPES.LineChart,\n        GRAPHER_CHART_TYPES.DiscreteBar,\n        GRAPHER_CHART_TYPES.Dumbbell,\n        GRAPHER_CHART_TYPES.SlopeChart,\n        GRAPHER_CHART_TYPES.Marimekko,\n        GRAPHER_CHART_TYPES.ScatterPlot,\n    ],\n    [\n        GRAPHER_CHART_TYPES.StackedArea,\n        GRAPHER_CHART_TYPES.StackedBar,\n        GRAPHER_CHART_TYPES.StackedDiscreteBar,\n    ],\n    [GRAPHER_CHART_TYPES.Swimlane],\n]\n\ntype ChartTabConfigOption = Exclude<\n    GrapherTabConfigOption,\n    \"table\" | \"map\" | \"chart\"\n>\n\nexport const CHART_TYPE_LABEL: Record<GrapherChartType, string> = {\n    [GRAPHER_CHART_TYPES.LineChart]: \"Line\",\n    [GRAPHER_CHART_TYPES.SlopeChart]: \"Slope\",\n    [GRAPHER_CHART_TYPES.DiscreteBar]: \"Bar\",\n    [GRAPHER_CHART_TYPES.ScatterPlot]: \"Scatter\",\n    [GRAPHER_CHART_TYPES.Marimekko]: \"Marimekko\",\n    [GRAPHER_CHART_TYPES.StackedArea]: \"Area\",\n    [GRAPHER_CHART_TYPES.StackedBar]: \"Column\",\n    [GRAPHER_CHART_TYPES.StackedDiscreteBar]: \"Bar\",\n    [GRAPHER_CHART_TYPES.Dumbbell]: \"Dumbbell\",\n    [GRAPHER_CHART_TYPES.Swimlane]: \"Timeline\",\n}\n\nexport const LONG_CHART_TYPE_LABEL: Record<GrapherChartType, string> = {\n    [GRAPHER_CHART_TYPES.LineChart]: \"Line chart\",\n    [GRAPHER_CHART_TYPES.SlopeChart]: \"Slope chart\",\n    [GRAPHER_CHART_TYPES.DiscreteBar]: \"Bar chart\",\n    [GRAPHER_CHART_TYPES.ScatterPlot]: \"Scatter plot\",\n    [GRAPHER_CHART_TYPES.Marimekko]: \"Marimekko chart\",\n    [GRAPHER_CHART_TYPES.StackedArea]: \"Area chart\",\n    [GRAPHER_CHART_TYPES.StackedBar]: \"Column chart\",\n    [GRAPHER_CHART_TYPES.StackedDiscreteBar]: \"Bar chart\",\n    [GRAPHER_CHART_TYPES.Dumbbell]: \"Dumbbell chart\",\n    [GRAPHER_CHART_TYPES.Swimlane]: \"Timeline\",\n}\n\nconst MAP_CHART_TAB_CONFIG_OPTION_TO_CHART_TYPE_NAME: Record<\n    ChartTabConfigOption,\n    GrapherChartType\n> = {\n    [GRAPHER_TAB_CONFIG_OPTIONS.line]: GRAPHER_CHART_TYPES.LineChart,\n    [GRAPHER_TAB_CONFIG_OPTIONS.slope]: GRAPHER_CHART_TYPES.SlopeChart,\n    [GRAPHER_TAB_CONFIG_OPTIONS.scatter]: GRAPHER_CHART_TYPES.ScatterPlot,\n    [GRAPHER_TAB_CONFIG_OPTIONS[\"stacked-area\"]]:\n        GRAPHER_CHART_TYPES.StackedArea,\n    [GRAPHER_TAB_CONFIG_OPTIONS[\"stacked-bar\"]]: GRAPHER_CHART_TYPES.StackedBar,\n    [GRAPHER_TAB_CONFIG_OPTIONS[\"discrete-bar\"]]:\n        GRAPHER_CHART_TYPES.DiscreteBar,\n    [GRAPHER_TAB_CONFIG_OPTIONS[\"stacked-discrete-bar\"]]:\n        GRAPHER_CHART_TYPES.StackedDiscreteBar,\n    [GRAPHER_TAB_CONFIG_OPTIONS.marimekko]: GRAPHER_CHART_TYPES.Marimekko,\n    [GRAPHER_TAB_CONFIG_OPTIONS.dumbbell]: GRAPHER_CHART_TYPES.Dumbbell,\n    [GRAPHER_TAB_CONFIG_OPTIONS.swimlane]: GRAPHER_CHART_TYPES.Swimlane,\n}\n\nconst MAP_CHART_TYPE_NAME_TO_CHART_TAB_CONFIG_OPTION = R.invert(\n    MAP_CHART_TAB_CONFIG_OPTION_TO_CHART_TYPE_NAME\n)\n\nexport function mapTabConfigOptionToChartTypeName(\n    tabOption: ChartTabConfigOption\n): GrapherChartType {\n    return MAP_CHART_TAB_CONFIG_OPTION_TO_CHART_TYPE_NAME[tabOption]\n}\n\nexport function mapChartTypeNameToTabConfigOption(\n    chartType: GrapherChartType\n): ChartTabConfigOption {\n    return MAP_CHART_TYPE_NAME_TO_CHART_TAB_CONFIG_OPTION[chartType]\n}\n\nexport function mapTabQueryParamToChartTypeName(\n    tab: ChartTabConfigOption\n): GrapherChartType {\n    return MAP_CHART_TAB_CONFIG_OPTION_TO_CHART_TYPE_NAME[tab]\n}\n\nexport function mapChartTypeNameToQueryParam(\n    chartType: GrapherChartType\n): ChartTabConfigOption {\n    return MAP_CHART_TYPE_NAME_TO_CHART_TAB_CONFIG_OPTION[chartType]\n}\n\nexport function mapGrapherTabNameToConfigOption(\n    tabName: GrapherTabName\n): GrapherTabConfigOption {\n    return match(tabName)\n        .with(GRAPHER_TAB_NAMES.Table, () => GRAPHER_TAB_CONFIG_OPTIONS.table)\n        .with(GRAPHER_TAB_NAMES.WorldMap, () => GRAPHER_TAB_CONFIG_OPTIONS.map)\n        .otherwise((tabName) => mapChartTypeNameToTabConfigOption(tabName))\n}\n\nexport const mapGrapherTabNameToQueryParam = mapGrapherTabNameToConfigOption\n\nexport function makeLabelForGrapherTab(\n    tab: GrapherTabName,\n    options?: { format?: \"short\" | \"long\" }\n): string {\n    const { format = \"short\" } = options ?? {}\n\n    if (tab === GRAPHER_TAB_NAMES.Table) return \"Table\"\n    if (tab === GRAPHER_TAB_NAMES.WorldMap)\n        return format === \"short\" ? \"Map\" : \"World map\"\n\n    return format === \"short\"\n        ? CHART_TYPE_LABEL[tab]\n        : LONG_CHART_TYPE_LABEL[tab]\n}\n\nexport function findPotentialChartTypeSiblings(\n    chartTypes: GrapherChartType[]\n): GrapherChartType[] | undefined {\n    for (const validCombination of VALID_CHART_TYPE_COMBINATIONS) {\n        const validSet: Set<GrapherChartType> = new Set(validCombination)\n        const hasIntersection = chartTypes.some((chartType) =>\n            validSet.has(chartType)\n        )\n        if (hasIntersection) return validCombination\n    }\n    return undefined\n}\n\nexport function findValidChartTypeCombination(\n    chartTypes: GrapherChartType[]\n): GrapherChartType[] | undefined {\n    const validCombination = findPotentialChartTypeSiblings(chartTypes)\n    return validCombination?.filter((chartType) =>\n        chartTypes.includes(chartType)\n    )\n}\n\nexport function isChartTypeName(\n    candidate: string\n): candidate is GrapherChartType {\n    return ALL_GRAPHER_CHART_TYPES.includes(candidate as any)\n}\n\nexport function isValidTabQueryParam(\n    candidate: string\n): candidate is GrapherTabQueryParam {\n    return Object.values(GRAPHER_TAB_QUERY_PARAMS).includes(candidate as any)\n}\n\nexport function isValidTabConfigOption(\n    candidate: string\n): candidate is GrapherTabConfigOption {\n    return Object.values(GRAPHER_TAB_CONFIG_OPTIONS).includes(candidate as any)\n}\n\nexport const isChartTab = (tab: GrapherTabName): tab is GrapherChartType =>\n    tab !== GRAPHER_TAB_NAMES.Table && tab !== GRAPHER_TAB_NAMES.WorldMap\n\nexport const isMapTab = (\n    tab: GrapherTabName\n): tab is typeof GRAPHER_TAB_NAMES.WorldMap =>\n    tab === GRAPHER_TAB_NAMES.WorldMap\n\n/**\n * Returns which dimension properties are supported for the given chart types.\n * Returns the union of all dimensions needed across all chart types.\n */\nexport const getSupportedDimensionsForChartTypes = (\n    chartTypes: GrapherChartType[]\n): DimensionProperty[] => {\n    const chartTypeSet = new Set(chartTypes)\n\n    const { y, x, color, size } = DimensionProperty\n\n    const hasScatter = chartTypeSet.has(GRAPHER_CHART_TYPES.ScatterPlot)\n    const hasMarimekko = chartTypeSet.has(GRAPHER_CHART_TYPES.Marimekko)\n    const hasLineChart = chartTypeSet.has(GRAPHER_CHART_TYPES.LineChart)\n    const hasDiscreteBar = chartTypeSet.has(GRAPHER_CHART_TYPES.DiscreteBar)\n\n    if (hasScatter) return [y, x, size, color]\n    if (hasMarimekko) return [y, x, color]\n    if (hasLineChart || hasDiscreteBar) return [y, color]\n    return [y]\n}\n","import * as React from \"react\"\nimport { useCallback } from \"react\"\nimport { action, computed } from \"mobx\"\nimport cx from \"clsx\"\nimport { observer } from \"mobx-react\"\nimport { GrapherTabName } from \"@ourworldindata/types\"\nimport { TabItem, Tabs } from \"../tabs/Tabs.js\"\nimport { makeLabelForGrapherTab } from \"../chart/ChartTabs\"\nimport {\n    Key,\n    Button,\n    Menu,\n    MenuItem,\n    MenuTrigger,\n    Popover,\n} from \"react-aria-components\"\nimport { GrapherTabIcon } from \"@ourworldindata/components\"\n\nexport interface ContentSwitchersManager {\n    availableTabs?: GrapherTabName[]\n    activeTab?: GrapherTabName\n    setTab: (tab: GrapherTabName) => void\n    onTabChange: (oldTab: GrapherTabName, newTab: GrapherTabName) => void\n    isMedium?: boolean\n}\n\nconst MAX_VISIBLE_TABS = 4\nconst MAX_VISIBLE_TABS_BEFORE_OVERFLOW = 3\n\nfunction shouldShowContentSwitchers(manager: ContentSwitchersManager): boolean {\n    return (manager.availableTabs ?? []).length > 1\n}\n\n@observer\nexport class ContentSwitchers extends React.Component<{\n    manager: ContentSwitchersManager\n}> {\n    static shouldShow(manager: ContentSwitchersManager): boolean {\n        return shouldShowContentSwitchers(manager)\n    }\n\n    @computed private get manager(): ContentSwitchersManager {\n        return this.props.manager\n    }\n\n    @computed private get availableTabs(): GrapherTabName[] {\n        return this.manager.availableTabs || []\n    }\n\n    @computed private get shouldShow(): boolean {\n        return shouldShowContentSwitchers(this.manager)\n    }\n\n    @computed private get visibleTabs(): GrapherTabName[] {\n        const { activeTab, availableTabs } = this\n\n        // If there are four or fewer tabs, show all of them\n        if (availableTabs.length <= MAX_VISIBLE_TABS) {\n            return availableTabs\n        }\n\n        // Otherwise, only show the first 3 tabs\n        const visibleTabs = availableTabs.slice(\n            0,\n            MAX_VISIBLE_TABS_BEFORE_OVERFLOW\n        )\n\n        // If the active tab is not visible, replace the last visible tab with it\n        if (!visibleTabs.includes(activeTab)) {\n            visibleTabs[visibleTabs.length - 1] = activeTab\n        }\n\n        return visibleTabs\n    }\n\n    @computed private get hiddenTabs(): GrapherTabName[] {\n        return this.availableTabs.filter(\n            (tab) => !this.visibleTabs.includes(tab)\n        )\n    }\n\n    @computed private get activeTab(): GrapherTabName {\n        return this.manager.activeTab ?? this.availableTabs[0]\n    }\n\n    @computed private get tabItems(): TabItem<GrapherTabName>[] {\n        return this.visibleTabs.map((tab) => ({\n            key: tab,\n            element: <TabContent key={tab} tab={tab} />,\n            buttonProps: {\n                className: cx({ active: tab === this.activeTab }),\n                dataTrackNote: \"chart_click_\" + tab,\n                ariaLabel: makeLabelForGrapherTab(tab),\n            },\n        }))\n    }\n\n    @action.bound private setTab(selectedTab: GrapherTabName): void {\n        const oldTab = this.manager.activeTab\n        const newTab = selectedTab\n        this.manager.setTab(newTab)\n        this.manager.onTabChange?.(oldTab!, newTab)\n    }\n\n    override render(): React.ReactElement | null {\n        if (!this.shouldShow) return null\n\n        return (\n            <div className=\"ContentSwitchers__Container\">\n                <Tabs\n                    variant=\"slim\"\n                    className=\"ContentSwitchers\"\n                    items={this.tabItems}\n                    selectedKey={this.activeTab}\n                    onChange={this.setTab}\n                />\n                {this.hiddenTabs.length > 0 && (\n                    <OverflowMenu\n                        hiddenTabs={this.hiddenTabs}\n                        onSelect={this.setTab}\n                    />\n                )}\n            </div>\n        )\n    }\n}\n\nfunction OverflowMenu({\n    hiddenTabs,\n    onSelect,\n}: {\n    hiddenTabs: GrapherTabName[]\n    onSelect: (tab: GrapherTabName) => void\n}): React.ReactElement {\n    const handleAction = useCallback(\n        (key: Key) => {\n            onSelect(key as GrapherTabName)\n        },\n        [onSelect]\n    )\n\n    return (\n        <MenuTrigger>\n            <Button\n                className=\"Tabs__Tab ContentSwitchers__OverflowMenuButton\"\n                aria-label=\"Show more chart types\"\n            >\n                <span className=\"label\">+&#8202;{hiddenTabs.length}</span>\n            </Button>\n            <Popover\n                className=\"ContentSwitchers__OverflowMenu\"\n                placement=\"bottom\"\n            >\n                <Menu\n                    className=\"ContentSwitchers__OverflowMenuList\"\n                    onAction={handleAction}\n                >\n                    {hiddenTabs.map((tab) => (\n                        <MenuItem\n                            key={tab}\n                            id={tab}\n                            className=\"ContentSwitchers__OverflowMenuItem\"\n                        >\n                            <TabContent tab={tab} />\n                        </MenuItem>\n                    ))}\n                </Menu>\n            </Popover>\n        </MenuTrigger>\n    )\n}\n\nfunction TabContent({ tab }: { tab: GrapherTabName }): React.ReactElement {\n    return (\n        <span className=\"ContentSwitchers__TabContent\">\n            <GrapherTabIcon tab={tab} />\n            <span className=\"label\">{makeLabelForGrapherTab(tab)}</span>\n        </span>\n    )\n}\n","import * as React from \"react\"\nimport { action, computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faEye, faRightLeft, faPen } from \"@fortawesome/free-solid-svg-icons\"\nimport classnames from \"clsx\"\nimport { GrapherWindowType } from \"@ourworldindata/types\"\nimport {\n    DEFAULT_GRAPHER_ENTITY_TYPE,\n    DEFAULT_GRAPHER_ENTITY_TYPE_PLURAL,\n} from \"../core/GrapherConstants\"\n\nexport interface EntitySelectionManager {\n    canHighlightEntities?: boolean\n    canChangeEntity?: boolean\n    canAddEntities?: boolean\n    canChangeAddOrHighlightEntities?: boolean\n    entityType?: string\n    entityTypePlural?: string\n    isEntitySelectorModalOrDrawerOpen?: boolean\n    isOnChartTab?: boolean\n    isOnMapTab?: boolean\n    hideEntityControls?: boolean\n    shouldShowEntitySelectorAs?: GrapherWindowType\n}\n\ninterface EntitySelectionLabel {\n    icon: React.ReactElement\n    action: string\n    entity: string\n    /**\n     * Optional tail of the entity name that is dropped before\n     * the entity name collapses entirely\n     */\n    entitySuffix?: string\n}\n\n@observer\nexport class EntitySelectionToggle extends React.Component<{\n    manager: EntitySelectionManager\n}> {\n    constructor(props: { manager: EntitySelectionManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    static shouldShow(manager: EntitySelectionManager): boolean {\n        const toggle = new EntitySelectionToggle({ manager })\n        return toggle.showToggle\n    }\n\n    @computed get showToggle(): boolean {\n        const {\n            isOnChartTab,\n            isOnMapTab,\n            hideEntityControls,\n            shouldShowEntitySelectorAs,\n            canChangeAddOrHighlightEntities,\n        } = this.props.manager\n\n        if (hideEntityControls) return false\n\n        const shouldShowDrawer =\n            shouldShowEntitySelectorAs === GrapherWindowType.drawer\n        const shouldShowModal =\n            shouldShowEntitySelectorAs === GrapherWindowType.modal\n\n        if (isOnMapTab) return shouldShowDrawer\n\n        return !!(\n            isOnChartTab &&\n            canChangeAddOrHighlightEntities &&\n            (shouldShowModal || shouldShowDrawer) &&\n            this.label\n        )\n    }\n\n    @computed get label(): EntitySelectionLabel | null {\n        const {\n            entityType = \"\",\n            entityTypePlural = \"\",\n            canHighlightEntities,\n            canChangeEntity,\n            canAddEntities,\n            isOnMapTab,\n        } = this.props.manager\n\n        if (isOnMapTab)\n            return {\n                action: \"Select\",\n                entity: \"countries\",\n                icon: <FontAwesomeIcon icon={faPen} />,\n            }\n\n        if (canHighlightEntities)\n            return {\n                action: \"Select\",\n                ...splitDefaultEntityLabel(entityTypePlural),\n                icon: <FontAwesomeIcon icon={faEye} />,\n            }\n\n        if (canChangeEntity)\n            return {\n                action: \"Change\",\n                ...splitDefaultEntityLabel(entityType),\n                icon: <FontAwesomeIcon icon={faRightLeft} />,\n            }\n\n        if (canAddEntities)\n            return {\n                action: \"Edit\",\n                ...splitDefaultEntityLabel(entityTypePlural),\n                icon: <FontAwesomeIcon icon={faPen} />,\n            }\n\n        return null\n    }\n\n    override render(): React.ReactElement | null {\n        const { showToggle, label } = this\n        const { isEntitySelectorModalOrDrawerOpen: active } = this.props.manager\n\n        return showToggle && label ? (\n            <div\n                className={classnames(\"entity-selection-menu\", {\n                    \"entity-selection-menu--shortenable\": !!label.entitySuffix,\n                })}\n            >\n                <button\n                    className={classnames(\"menu-toggle\", { active })}\n                    onClick={action((e): void => {\n                        this.props.manager.isEntitySelectorModalOrDrawerOpen =\n                            !active\n                        e.stopPropagation()\n                    })}\n                    type=\"button\"\n                    data-track-note=\"chart_add_entity\"\n                    aria-label={`${label.action} ${label.entity}${label.entitySuffix ?? \"\"}`}\n                >\n                    {label.icon}\n                    <label className=\"label\">\n                        {label.action}{\" \"}\n                        <span>\n                            {label.entity}\n                            {label.entitySuffix && (\n                                <span className=\"entity-suffix\">\n                                    {label.entitySuffix}\n                                </span>\n                            )}\n                        </span>\n                    </label>\n                </button>\n            </div>\n        ) : null\n    }\n}\n\n/**\n * Splits the default entity type into a base and a droppable suffix\n * (\"countries and regions\" -> \"countries\" + \" and regions\")\n */\nfunction splitDefaultEntityLabel(\n    entity: string\n): Pick<EntitySelectionLabel, \"entity\" | \"entitySuffix\"> {\n    if (entity === DEFAULT_GRAPHER_ENTITY_TYPE_PLURAL)\n        return { entity: \"countries\", entitySuffix: \" and regions\" }\n    if (entity === DEFAULT_GRAPHER_ENTITY_TYPE)\n        return { entity: \"country\", entitySuffix: \" or region\" }\n    return { entity }\n}\n","import * as React from \"react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { MapConfig } from \"../mapCharts/MapConfig\"\nimport { MapRegionName } from \"@ourworldindata/types\"\nimport { Dropdown } from \"./Dropdown\"\nimport { MAP_REGION_LABELS } from \"../mapCharts/MapChartConstants\"\nimport { GlobeController } from \"../mapCharts/GlobeController\"\n\nexport interface MapRegionDropdownManager {\n    mapConfig?: MapConfig\n    globeController?: GlobeController\n    isOnMapTab?: boolean\n    isFaceted?: boolean\n}\n\ninterface MapRegionDropdownOption {\n    value: MapRegionName\n    label: string\n    trackNote: \"map_zoom_to_region\"\n}\n\n@observer\nexport class MapRegionDropdown extends React.Component<{\n    manager: MapRegionDropdownManager\n}> {\n    constructor(props: { manager: MapRegionDropdownManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    static shouldShow(manager: MapRegionDropdownManager): boolean {\n        const menu = new MapRegionDropdown({ manager })\n        return menu.showMenu\n    }\n\n    @computed private get manager(): MapRegionDropdownManager {\n        return this.props.manager\n    }\n\n    @computed private get mapConfig(): MapConfig {\n        return this.manager.mapConfig ?? new MapConfig()\n    }\n\n    @computed private get showMenu(): boolean {\n        const { isOnMapTab, isFaceted, mapConfig } = this.manager\n\n        return !!(\n            isOnMapTab &&\n            // Hide the dropdown when the globe is active\n            !mapConfig?.globe.isActive &&\n            // Hide the dropdown when the map is not faceted unless a 2d continent is active\n            !(this.mapConfig.region === MapRegionName.World && !isFaceted)\n        )\n    }\n\n    @action.bound onChange(selected: MapRegionDropdownOption | null): void {\n        const value = selected?.value\n        if (!value) return\n\n        // Update the current region\n        this.mapConfig.region = value\n\n        // It's confusing to have regions selected when switching to a continent\n        if (this.mapConfig.region !== MapRegionName.World) {\n            this.mapConfig.selection.deselectEntities(\n                this.mapConfig.selection.selectedRegionNames\n            )\n        }\n    }\n\n    @computed get options(): MapRegionDropdownOption[] {\n        const continentOptions: MapRegionDropdownOption[] = Object.values(\n            MapRegionName\n        ).map((region) => {\n            return {\n                value: region,\n                label: MAP_REGION_LABELS[region],\n                trackNote: \"map_zoom_to_region\",\n            }\n        })\n\n        return continentOptions\n    }\n\n    @computed get value(): MapRegionDropdownOption | null {\n        const { region } = this.mapConfig\n        return this.options.find((opt) => opt.value === region) ?? null\n    }\n\n    override render(): React.ReactElement | null {\n        if (!this.showMenu) return null\n\n        return (\n            <Dropdown\n                className=\"map-region-dropdown\"\n                options={this.options}\n                onChange={this.onChange}\n                value={this.value}\n                aria-label=\"Select continent\"\n            />\n        )\n    }\n}\n","import * as React from \"react\"\nimport { action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { ScaleType } from \"@ourworldindata/types\"\nimport { AxisConfig } from \"../../axis/AxisConfig\"\nimport classnames from \"clsx\"\n\ninterface AxisScaleToggleProps {\n    axis: AxisConfig\n    subtitle?: string\n    prefix?: string\n}\n\n@observer\nexport class AxisScaleToggle extends React.Component<AxisScaleToggleProps> {\n    constructor(props: AxisScaleToggleProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @action.bound private setAxisScale(scale: ScaleType): void {\n        this.props.axis.scaleType = scale\n    }\n\n    override render(): React.ReactElement {\n        const { linear, log } = ScaleType,\n            { axis, prefix, subtitle } = this.props,\n            isLinear = axis.scaleType === linear,\n            label = prefix ? `${prefix}: ` : undefined\n\n        return (\n            <>\n                <div className=\"config-toggle\">\n                    {subtitle && <label>{subtitle}</label>}\n                    <button\n                        className={classnames({ active: isLinear })}\n                        onClick={(): void => this.setAxisScale(linear)}\n                        data-track-note=\"chart_toggle_scale\"\n                    >\n                        <span className=\"label\">{label}Linear</span>\n                    </button>\n                    <button\n                        className={classnames({ active: !isLinear })}\n                        onClick={(): void => this.setAxisScale(log)}\n                        data-track-note=\"chart_toggle_scale\"\n                    >\n                        <span className=\"label\">{label}Logarithmic</span>\n                    </button>\n                </div>\n            </>\n        )\n    }\n}\n","import * as React from \"react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    GRAPHER_CHART_TYPES,\n    GrapherChartType,\n    StackMode,\n} from \"@ourworldindata/types\"\nimport { LabeledSwitch } from \"@ourworldindata/components\"\n\nconst { LineChart, ScatterPlot, SlopeChart } = GRAPHER_CHART_TYPES\n\nexport interface AbsRelToggleManager {\n    stackMode?: StackMode\n    relativeToggleLabel?: string\n    activeChartType?: GrapherChartType\n}\n\n@observer\nexport class AbsRelToggle extends React.Component<{\n    manager: AbsRelToggleManager\n}> {\n    constructor(props: { manager: AbsRelToggleManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @action.bound onToggle(): void {\n        this.manager.stackMode = this.isRelativeMode\n            ? StackMode.absolute\n            : StackMode.relative\n    }\n\n    @computed get isRelativeMode(): boolean {\n        return this.manager.stackMode === StackMode.relative\n    }\n\n    @computed get manager(): AbsRelToggleManager {\n        return this.props.manager\n    }\n\n    @computed get tooltip(): string {\n        const { activeChartType } = this.manager\n        return activeChartType === ScatterPlot\n            ? \"Show the percentage change per year over the the selected time range.\"\n            : activeChartType === LineChart || activeChartType === SlopeChart\n              ? \"Show proportional changes over time or actual values in their original units.\"\n              : \"Show values as their share of the total or as actual values in their original units.\"\n    }\n\n    override render(): React.ReactElement {\n        const label =\n            this.manager.relativeToggleLabel ?? \"Display relative values\"\n        return (\n            <LabeledSwitch\n                label={label}\n                value={this.isRelativeMode}\n                tooltip={this.tooltip}\n                onToggle={this.onToggle}\n                tracking=\"chart_abs_rel_toggle\"\n            />\n        )\n    }\n}\n","import * as React from \"react\"\nimport { action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { LabeledSwitch } from \"@ourworldindata/components\"\n\nexport interface ZoomToggleManager {\n    zoomToSelection?: boolean\n}\n\n@observer\nexport class ZoomToggle extends React.Component<{\n    manager: ZoomToggleManager\n}> {\n    constructor(props: { manager: ZoomToggleManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @action.bound onToggle(): void {\n        this.props.manager.zoomToSelection = this.props.manager.zoomToSelection\n            ? undefined\n            : true\n    }\n\n    override render(): React.ReactElement {\n        return (\n            <LabeledSwitch\n                label=\"Zoom to selection\"\n                tooltip=\"Scale axes to focus on the currently highlighted data points.\"\n                value={this.props.manager.zoomToSelection}\n                onToggle={this.onToggle}\n                tracking=\"chart_zoom_to_selection\"\n            />\n        )\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { DEFAULT_GRAPHER_ENTITY_TYPE } from \"../../core/GrapherConstants\"\nimport { FacetStrategy } from \"@ourworldindata/utils\"\nimport classnames from \"clsx\"\n\nexport interface FacetStrategySelectionManager {\n    availableFacetStrategies: FacetStrategy[]\n    facetStrategy?: FacetStrategy\n    entityType?: string\n    facettingLabelByYVariables?: string\n}\n\n@observer\nexport class FacetStrategySelector extends React.Component<{\n    manager: FacetStrategySelectionManager\n}> {\n    constructor(props: { manager: FacetStrategySelectionManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get facetStrategyLabels(): { [key in FacetStrategy]: string } {\n        return {\n            [FacetStrategy.none]: \"All together\",\n            [FacetStrategy.entity]: `Split by ${this.entityName}`,\n            [FacetStrategy.metric]: `Split by ${this.metricName}`,\n        }\n    }\n\n    @computed get entityName(): string {\n        return this.props.manager.entityType ?? DEFAULT_GRAPHER_ENTITY_TYPE\n    }\n\n    @computed get metricName(): string {\n        return this.props.manager.facettingLabelByYVariables ?? \"metric\"\n    }\n\n    @computed get strategies(): FacetStrategy[] {\n        return (\n            this.props.manager.availableFacetStrategies || [\n                FacetStrategy.none,\n                FacetStrategy.entity,\n                FacetStrategy.metric,\n            ]\n        )\n    }\n\n    @computed get subtitle(): string {\n        const entityChoice = this.entityName.replace(/ or /, \"/\"),\n            byEntity = this.strategies.includes(FacetStrategy.entity),\n            byMetric = this.strategies.includes(FacetStrategy.metric)\n\n        if (byEntity || byMetric) {\n            const facet =\n                byEntity && byMetric\n                    ? `${this.metricName} or ${entityChoice}`\n                    : byEntity\n                      ? this.entityName\n                      : this.metricName\n            return (\n                \"Visualize the data all together in one chart or split it by \" +\n                facet\n            )\n        } else {\n            return \"\"\n        }\n    }\n\n    override render(): React.ReactElement {\n        return (\n            <>\n                <div className=\"config-subtitle\">{this.subtitle}</div>\n                <div className=\"config-list\">\n                    {this.strategies.map((value: FacetStrategy) => {\n                        const label = this.facetStrategyLabels[value],\n                            active = value === this.facetStrategy,\n                            option = value.toString()\n\n                        return (\n                            <button\n                                key={option}\n                                className={classnames(option, { active })}\n                                onClick={(): void => {\n                                    this.props.manager.facetStrategy = value\n                                }}\n                                data-track-note={`chart_facet_${option}`}\n                            >\n                                <div className=\"faceting-icon\">\n                                    {_.range(value === \"none\" ? 1 : 6).map(\n                                        (i) => (\n                                            <span key={i}></span>\n                                        )\n                                    )}\n                                </div>\n                                {label}\n                            </button>\n                        )\n                    })}\n                </div>\n            </>\n        )\n    }\n\n    @computed get facetStrategy(): FacetStrategy {\n        return this.props.manager.facetStrategy || FacetStrategy.none\n    }\n}\n","import * as React from \"react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { FacetAxisDomain, FacetStrategy } from \"@ourworldindata/types\"\nimport { AxisConfig } from \"../../axis/AxisConfig\"\nimport { LabeledSwitch } from \"@ourworldindata/components\"\n\nexport interface FacetYDomainToggleManager {\n    facetStrategy?: FacetStrategy\n    yAxis?: AxisConfig\n}\n\n@observer\nexport class FacetYDomainToggle extends React.Component<{\n    manager: FacetYDomainToggleManager\n}> {\n    constructor(props: { manager: FacetYDomainToggleManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @action.bound onToggle(): void {\n        const { yAxis } = this.props.manager\n        if (yAxis) {\n            yAxis.facetDomain = this.isYDomainShared\n                ? FacetAxisDomain.independent\n                : FacetAxisDomain.shared\n        }\n    }\n\n    @computed get isYDomainShared(): boolean {\n        const { yAxis } = this.props.manager\n        const facetDomain = yAxis?.facetDomain || FacetAxisDomain.shared\n        return facetDomain === FacetAxisDomain.shared\n    }\n\n    override render(): React.ReactElement | null {\n        const { yAxis, facetStrategy } = this.props.manager\n        if (!yAxis || facetStrategy === \"none\") return null\n\n        return (\n            <LabeledSwitch\n                label=\"Align axis scales\"\n                tooltip=\"Use the same minimum and maximum values on all charts or scale axes to fit the data in each chart\"\n                value={this.isYDomainShared}\n                onToggle={this.onToggle}\n                tracking=\"chart_facet_ydomain_toggle\"\n            />\n        )\n    }\n}\n","import * as React from \"react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { LabeledSwitch } from \"@ourworldindata/components\"\n\nexport interface NoDataAreaToggleManager {\n    showNoDataArea?: boolean\n}\n\n@observer\nexport class NoDataAreaToggle extends React.Component<{\n    manager: NoDataAreaToggleManager\n}> {\n    constructor(props: { manager: NoDataAreaToggleManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @action.bound onToggle(): void {\n        this.manager.showNoDataArea = !this.manager.showNoDataArea\n    }\n\n    @computed get manager(): NoDataAreaToggleManager {\n        return this.props.manager\n    }\n\n    override render(): React.ReactElement {\n        return (\n            <LabeledSwitch\n                label={\"Show \\u2018no data\\u2019 area\"}\n                value={this.manager.showNoDataArea}\n                tooltip=\"Include entities for which ‘no data’ is available in the chart.\"\n                onToggle={this.onToggle}\n                tracking=\"chart_no_data_area_toggle\"\n            />\n        )\n    }\n}\n","import * as React from \"react\"\nimport { computed, action, observable, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport classnames from \"clsx\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faGear } from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    DialogTrigger,\n    Popover,\n    Dialog,\n    Heading,\n    Button,\n} from \"react-aria-components\"\nimport {\n    EntityName,\n    GRAPHER_CHART_TYPES,\n    FacetStrategy,\n    GrapherChartType,\n} from \"@ourworldindata/types\"\nimport { OverlayHeader } from \"@ourworldindata/components\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { ChartDimension } from \"../chart/ChartDimension\"\nimport { makeSelectionArray } from \"../chart/ChartUtils.js\"\nimport { AxisConfig } from \"../axis/AxisConfig\"\n\nimport { AxisScaleToggle } from \"./settings/AxisScaleToggle\"\nimport { AbsRelToggle, AbsRelToggleManager } from \"./settings/AbsRelToggle\"\nimport { ZoomToggle, ZoomToggleManager } from \"./settings/ZoomToggle\"\nimport {\n    FacetStrategySelector,\n    FacetStrategySelectionManager,\n} from \"./settings/FacetStrategySelector\"\nimport {\n    FacetYDomainToggle,\n    FacetYDomainToggleManager,\n} from \"./settings/FacetYDomainToggle\"\nimport {\n    NoDataAreaToggle,\n    NoDataAreaToggleManager,\n} from \"./settings/NoDataAreaToggle\"\nimport { GRAPHER_SETTINGS_CLASS } from \"../core/GrapherConstants\"\nimport { LONG_CHART_TYPE_LABEL } from \"../chart/ChartTabs\"\n\nconst {\n    LineChart,\n    ScatterPlot,\n    StackedArea,\n    StackedDiscreteBar,\n    StackedBar,\n    Marimekko,\n    SlopeChart,\n} = GRAPHER_CHART_TYPES\n\nexport interface SettingsMenuManager\n    extends\n        AbsRelToggleManager,\n        NoDataAreaToggleManager,\n        FacetYDomainToggleManager,\n        ZoomToggleManager,\n        FacetStrategySelectionManager {\n    // ArchieML directives\n    hideFacetControl?: boolean\n    hideRelativeToggle?: boolean\n    hideEntityControls?: boolean\n\n    // chart state\n    activeChartType?: GrapherChartType\n    isRelativeMode?: boolean\n    selection?: SelectionArray | EntityName[]\n    canChangeAddOrHighlightEntities?: boolean\n    filledDimensions: ChartDimension[]\n    xColumnSlug?: string\n    xOverrideTime?: number\n    hasTimeline?: boolean\n    canToggleRelativeMode: boolean\n    isOnChartTab?: boolean\n\n    // linear/log scales\n    yAxis: AxisConfig\n    xAxis: AxisConfig\n\n    // TODO: show intermediate scatterplot points\n    compareEndPointsOnly?: boolean\n}\n\ninterface SettingsMenuProps {\n    manager: SettingsMenuManager\n    popoverMaxWidth?: number\n    popoverMaxHeight?: number\n}\n\n@observer\nexport class SettingsMenu extends React.Component<SettingsMenuProps> {\n    private active: boolean = false\n\n    constructor(props: SettingsMenuProps) {\n        super(props)\n\n        makeObservable<SettingsMenu, \"active\">(this, { active: observable.ref })\n    }\n\n    static shouldShow(manager: SettingsMenuManager): boolean {\n        const test = new SettingsMenu({ manager })\n        return test.showSettingsMenuToggle\n    }\n\n    @computed get chartType(): GrapherChartType {\n        return this.manager.activeChartType ?? GRAPHER_CHART_TYPES.LineChart\n    }\n\n    @computed get showYScaleToggle(): boolean | undefined {\n        if (this.manager.isRelativeMode) return false\n        if (\n            [\n                GRAPHER_CHART_TYPES.StackedArea,\n                GRAPHER_CHART_TYPES.StackedBar,\n                GRAPHER_CHART_TYPES.DiscreteBar,\n                GRAPHER_CHART_TYPES.StackedDiscreteBar,\n                GRAPHER_CHART_TYPES.Marimekko,\n                GRAPHER_CHART_TYPES.Dumbbell,\n                GRAPHER_CHART_TYPES.Swimlane,\n            ].includes(this.chartType as any)\n        )\n            return false // We currently do not have these charts with log scale\n        return this.manager.yAxis.canChangeScaleType\n    }\n\n    @computed private get showXScaleToggle(): boolean | undefined {\n        if (this.manager.isRelativeMode) return false\n        return this.manager.xAxis.canChangeScaleType\n    }\n\n    @computed private get showFacetYDomainToggle(): boolean {\n        // don't offer to make the y range relative if the range is discrete\n        return (\n            this.manager.facetStrategy !== FacetStrategy.none &&\n            this.chartType !== StackedDiscreteBar\n        )\n    }\n\n    @computed get showZoomToggle(): boolean {\n        return (\n            this.chartType === ScatterPlot && this.selectionArray.hasSelection\n        )\n    }\n\n    @computed get showNoDataAreaToggle(): boolean {\n        return (\n            this.chartType === Marimekko &&\n            this.manager.xColumnSlug !== undefined\n        )\n    }\n\n    @computed private get showAbsRelToggle(): boolean {\n        const { canToggleRelativeMode, hasTimeline, xOverrideTime } =\n            this.manager\n        if (!canToggleRelativeMode) return false\n        if (this.chartType === ScatterPlot)\n            return xOverrideTime === undefined && !!hasTimeline\n        return [\n            StackedArea,\n            StackedBar,\n            StackedDiscreteBar,\n            ScatterPlot,\n            LineChart,\n            Marimekko,\n            SlopeChart,\n        ].includes(this.chartType as any)\n    }\n\n    @computed private get showFacetControl(): boolean {\n        const {\n            filledDimensions,\n            availableFacetStrategies,\n            hideFacetControl,\n            isOnChartTab,\n        } = this.manager\n\n        // if there's no choice to be made, don't display a lone button\n        if (availableFacetStrategies.length <= 1) return false\n\n        // heuristic: if the chart doesn't make sense unfaceted, then it probably\n        // also makes sense to let the user switch between entity/metric facets\n        if (!availableFacetStrategies.includes(FacetStrategy.none)) return true\n\n        const showFacetControlChartType = [\n            StackedArea,\n            StackedBar,\n            StackedDiscreteBar,\n            LineChart,\n            SlopeChart,\n        ].includes(this.chartType as any)\n\n        const hasProjection = filledDimensions.some(\n            (dim) => dim.display.isProjection\n        )\n\n        return (\n            showFacetControlChartType &&\n            !hideFacetControl &&\n            !hasProjection &&\n            !!isOnChartTab\n        )\n    }\n\n    @computed private get showSettingsMenuToggle(): boolean {\n        if (!this.manager.isOnChartTab) return false\n\n        return !!(\n            this.showYScaleToggle ||\n            this.showXScaleToggle ||\n            this.showFacetYDomainToggle ||\n            this.showZoomToggle ||\n            this.showNoDataAreaToggle ||\n            this.showFacetControl ||\n            this.showAbsRelToggle\n        )\n\n        // TODO: add a showCompareEndPointsOnlyToggle to complement compareEndPointsOnly\n    }\n\n    @action.bound private toggleVisibility(open?: boolean): void {\n        this.active = open ?? !this.active\n    }\n\n    @computed private get manager(): SettingsMenuManager {\n        return this.props.manager\n    }\n\n    @computed private get selectionArray(): SelectionArray {\n        return makeSelectionArray(this.manager.selection)\n    }\n\n    @computed private get menuContentsChart(): React.ReactElement {\n        const {\n            manager,\n            showYScaleToggle,\n            showXScaleToggle,\n            showZoomToggle,\n            showNoDataAreaToggle,\n            showFacetControl,\n            showFacetYDomainToggle,\n            showAbsRelToggle,\n        } = this\n\n        const {\n            yAxis,\n            xAxis,\n            // compareEndPointsOnly,\n            filledDimensions,\n            isOnChartTab,\n        } = manager\n\n        const yLabel =\n                filledDimensions.find((d: ChartDimension) => d.property === \"y\")\n                    ?.display.name ?? \"Y axis\",\n            xLabel =\n                filledDimensions.find((d: ChartDimension) => d.property === \"x\")\n                    ?.display.name ?? \"X axis\",\n            omitLoneAxisLabel =\n                showYScaleToggle && !showXScaleToggle && yLabel === \"Y axis\"\n\n        return (\n            <>\n                <SettingsGroup\n                    title=\"Chart view\"\n                    active={\n                        isOnChartTab &&\n                        (showAbsRelToggle ||\n                            showZoomToggle ||\n                            showNoDataAreaToggle ||\n                            showFacetControl ||\n                            showFacetYDomainToggle)\n                    }\n                >\n                    {showFacetControl && (\n                        <FacetStrategySelector manager={manager} />\n                    )}\n                    {showFacetYDomainToggle && (\n                        <FacetYDomainToggle manager={manager} />\n                    )}\n                    {showAbsRelToggle && <AbsRelToggle manager={manager} />}\n                    {showNoDataAreaToggle && (\n                        <NoDataAreaToggle manager={manager} />\n                    )}\n                    {showZoomToggle && <ZoomToggle manager={manager} />}\n                </SettingsGroup>\n                <SettingsGroup\n                    title=\"Axis scale\"\n                    active={\n                        isOnChartTab && (showYScaleToggle || showXScaleToggle)\n                    }\n                >\n                    {showYScaleToggle && (\n                        <AxisScaleToggle\n                            axis={yAxis}\n                            subtitle={omitLoneAxisLabel ? \"\" : yLabel}\n                        />\n                    )}\n                    {showXScaleToggle && (\n                        <AxisScaleToggle axis={xAxis} subtitle={xLabel} />\n                    )}\n                    <div className=\"config-subtitle\">\n                        A linear scale evenly spaces values, where each\n                        increment represents a consistent change. A logarithmic\n                        scale uses multiples of the starting value, with each\n                        increment representing the same percentage increase.\n                    </div>\n                </SettingsGroup>\n            </>\n        )\n    }\n\n    @computed private get menuTitle(): string {\n        return `${LONG_CHART_TYPE_LABEL[this.chartType]} settings`\n    }\n\n    private renderSettingsButtonAndPopup(): React.ReactElement {\n        const { active } = this\n\n        return (\n            <div className=\"settings-menu\">\n                <DialogTrigger\n                    isOpen={this.active}\n                    onOpenChange={this.toggleVisibility}\n                >\n                    <Button\n                        className={classnames(\"menu-toggle\", { active })}\n                        data-track-note=\"chart_settings_menu_toggle\"\n                        aria-label=\"Chart settings\"\n                    >\n                        <FontAwesomeIcon icon={faGear} />\n                        <span className=\"label\">Settings</span>\n                    </Button>\n                    <Popover\n                        className={GRAPHER_SETTINGS_CLASS}\n                        placement=\"bottom end\"\n                        style={{\n                            maxWidth: this.props.popoverMaxWidth,\n                            maxHeight: this.props.popoverMaxHeight,\n                        }}\n                    >\n                        <Dialog>\n                            <Heading\n                                slot=\"title\"\n                                className=\"GrapherSettingsPopover__Header\"\n                            >\n                                <OverlayHeader\n                                    title={this.menuTitle}\n                                    onDismiss={() =>\n                                        this.toggleVisibility(false)\n                                    }\n                                />\n                            </Heading>\n                            <div className=\"GrapherSettingsPopover__Content\">\n                                {this.menuContentsChart}\n                            </div>\n                        </Dialog>\n                    </Popover>\n                </DialogTrigger>\n            </div>\n        )\n    }\n\n    override render(): React.ReactElement | null {\n        const {\n            manager: { isOnChartTab },\n            showSettingsMenuToggle,\n        } = this\n\n        return isOnChartTab && showSettingsMenuToggle\n            ? this.renderSettingsButtonAndPopup()\n            : null\n    }\n}\n\ninterface SettingsGroupProps {\n    title: string\n    subtitle?: string\n    active?: boolean\n    children?: React.ReactNode\n}\n\n@observer\nclass SettingsGroup extends React.Component<SettingsGroupProps> {\n    override render(): React.ReactElement | null {\n        const { active, title, subtitle, children } = this.props\n        if (!active) return null\n\n        return (\n            <section>\n                <div className=\"config-name\">{title}</div>\n                {subtitle && <div className=\"config-subtitle\">{subtitle}</div>}\n                {children}\n            </section>\n        )\n    }\n}\n","import * as React from \"react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { MapConfig } from \"../mapCharts/MapConfig\"\nimport {\n    GrapherWindowType,\n    MapRegionName,\n    TimeBound,\n} from \"@ourworldindata/utils\"\nimport { GlobeController } from \"../mapCharts/GlobeController\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faRotateLeft } from \"@fortawesome/free-solid-svg-icons\"\nimport { match } from \"ts-pattern\"\n\ninterface MapResetButtonProps {\n    manager: MapResetButtonManager\n    action: \"resetView\" | \"resetZoom\"\n}\n\nexport interface MapResetButtonManager {\n    mapConfig?: MapConfig\n    isOnMapTab?: boolean\n    globeController?: GlobeController\n    isFaceted?: boolean\n    shouldShowEntitySelectorAs?: GrapherWindowType\n    startHandleTimeBound?: TimeBound\n    endHandleTimeBound?: TimeBound\n}\n\n@observer\nexport class MapResetButton extends React.Component<{\n    manager: MapResetButtonManager\n    action: \"resetView\" | \"resetZoom\"\n}> {\n    constructor(props: MapResetButtonProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    static shouldShow(\n        manager: MapResetButtonManager,\n        action: \"resetView\" | \"resetZoom\"\n    ): boolean {\n        const menu = new MapResetButton({ manager, action })\n        return menu.showMenu\n    }\n\n    @computed private get showMenu(): boolean {\n        const { mapConfig } = this\n        const { isOnMapTab, isFaceted, shouldShowEntitySelectorAs } =\n            this.props.manager\n\n        if (!isOnMapTab) return false\n\n        const shouldShowPanel =\n            shouldShowEntitySelectorAs === GrapherWindowType.panel\n\n        const shouldShowResetViewButton =\n            shouldShowPanel && (isFaceted || mapConfig.is2dContinentActive())\n\n        const shouldShowResetZoomButton =\n            mapConfig.globe.isActive && !shouldShowResetViewButton\n\n        return match(this.props.action)\n            .with(\"resetView\", () => shouldShowResetViewButton)\n            .with(\"resetZoom\", () => shouldShowResetZoomButton)\n            .exhaustive()\n    }\n\n    @computed private get manager(): MapResetButtonManager {\n        return this.props.manager\n    }\n\n    @computed private get mapConfig(): MapConfig {\n        return this.manager.mapConfig ?? new MapConfig()\n    }\n\n    @computed private get label(): string {\n        return match(this.props.action)\n            .with(\"resetView\", () => \"Reset view\")\n            .with(\"resetZoom\", () => \"Reset zoom\")\n            .exhaustive()\n    }\n\n    @computed private get trackNote(): string {\n        return match(this.props.action)\n            .with(\"resetView\", () => \"map_reset_view\")\n            .with(\"resetZoom\", () => \"map_reset_zoom\")\n            .exhaustive()\n    }\n\n    @action.bound private onClick(): void {\n        this.mapConfig.region = MapRegionName.World\n        this.manager.globeController?.hideGlobe()\n        this.manager.globeController?.resetGlobe()\n\n        if (this.props.action === \"resetView\") {\n            this.manager.startHandleTimeBound = this.manager.endHandleTimeBound\n        }\n    }\n\n    override render(): React.ReactElement | null {\n        return this.showMenu ? (\n            <button\n                type=\"button\"\n                data-track-note={this.trackNote}\n                onClick={this.onClick}\n                className=\"menu-toggle\"\n            >\n                <FontAwesomeIcon icon={faRotateLeft} />\n                <span className=\"label\">{this.label}</span>\n            </button>\n        ) : null\n    }\n}\n","import { EntityName } from \"@ourworldindata/types\"\nimport { match } from \"ts-pattern\"\nimport {\n    EntitiesByRegionGroup,\n    isEntityRegionGroupKey,\n} from \"../core/RegionGroups\"\nimport { DataTableFilter, DataTableFilterOption } from \"./DataTableConstants\"\n\nexport interface DataTableEntities {\n    availableEntityNames: EntityName[]\n    entitiesByRegionGroup: EntitiesByRegionGroup\n    selectedEntityNames: EntityName[]\n}\n\nexport function getEntityNamesForDataTableFilter(\n    filter: DataTableFilter,\n    {\n        availableEntityNames,\n        entitiesByRegionGroup,\n        selectedEntityNames,\n    }: DataTableEntities\n): EntityName[] {\n    const candidateNames = match(filter)\n        .with(\"all\", () => availableEntityNames)\n        .with(\"selection\", () =>\n            selectedEntityNames.length > 0\n                ? selectedEntityNames\n                : availableEntityNames\n        )\n        .when(\n            isEntityRegionGroupKey,\n            (filter) =>\n                entitiesByRegionGroup.get(filter) ?? availableEntityNames\n        )\n        .exhaustive()\n\n    const availableEntityNameSet = new Set(availableEntityNames)\n    return candidateNames.filter((name) => availableEntityNameSet.has(name))\n}\n\nexport function buildDataTableFilterOptions(\n    entities: DataTableEntities,\n    { canFilterBySelection }: { canFilterBySelection: boolean }\n): DataTableFilterOption[] {\n    const toOption = (filter: DataTableFilter): DataTableFilterOption => ({\n        value: filter,\n        count: getEntityNamesForDataTableFilter(filter, entities).length,\n    })\n\n    const regionGroupOptions = [...entities.entitiesByRegionGroup.keys()]\n        .map(toOption)\n        .filter(({ count }) => count > 0)\n\n    return [\n        toOption(\"all\"),\n        ...(canFilterBySelection ? [toOption(\"selection\")] : []),\n        ...regionGroupOptions,\n    ]\n}\n\nexport function hasDataTableFilterChoice(\n    options: DataTableFilterOption[]\n): boolean {\n    const [allOption, ...otherOptions] = options\n    return otherOptions.some(({ count }) => count < allOption.count)\n}\n\nexport function pickDefaultDataTableFilter(\n    options: DataTableFilterOption[]\n): DataTableFilter {\n    const [allOption, ...otherOptions] = options\n    const countriesOption = otherOptions.find(\n        ({ value }) => value === \"countries\"\n    )\n    const isCountriesMajority =\n        !!countriesOption && countriesOption.count * 2 > allOption.count\n    return isCountriesMajority && countriesOption.count < allOption.count\n        ? \"countries\"\n        : \"all\"\n}\n","import * as React from \"react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { Dropdown } from \"./Dropdown\"\nimport {\n    DataTableConfig,\n    DataTableFilter,\n    DataTableFilterOption,\n} from \"../dataTable/DataTableConstants\"\nimport { hasDataTableFilterChoice } from \"../dataTable/DataTableHelpers\"\nimport { regionGroupLabels } from \"../core/RegionGroups\"\n\nconst FILTER_LABELS: Record<DataTableFilter, string> = {\n    all: \"All\",\n    selection: \"Selection\",\n    ...regionGroupLabels,\n}\n\nexport interface DataTableFilterDropdownManager {\n    dataTableConfig: DataTableConfig\n    dataTableFilter: DataTableFilter\n    dataTableFilterOptions: DataTableFilterOption[]\n    isOnTableTab?: boolean\n    isSemiNarrow?: boolean\n}\n\ninterface DropdownOption extends DataTableFilterOption {\n    label: string\n    trackNote: \"data_table_filter_by\"\n}\n\n@observer\nexport class DataTableFilterDropdown extends React.Component<{\n    manager: DataTableFilterDropdownManager\n}> {\n    constructor(props: { manager: DataTableFilterDropdownManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    static shouldShow(manager: DataTableFilterDropdownManager): boolean {\n        const menu = new DataTableFilterDropdown({ manager })\n        return menu.shouldShow\n    }\n\n    @computed private get manager(): DataTableFilterDropdownManager {\n        return this.props.manager\n    }\n\n    @computed private get shouldShow(): boolean {\n        return (\n            !!this.manager.isOnTableTab &&\n            hasDataTableFilterChoice(this.manager.dataTableFilterOptions) &&\n            !this.manager.isSemiNarrow\n        )\n    }\n\n    @action.bound private onChange(selected: DropdownOption | null): void {\n        if (selected?.value) {\n            this.manager.dataTableConfig.filter = selected.value\n            this.manager.dataTableConfig.search = \"\"\n        }\n    }\n\n    @computed private get options(): DropdownOption[] {\n        return this.manager.dataTableFilterOptions.map((option) => ({\n            ...option,\n            label: FILTER_LABELS[option.value],\n            trackNote: \"data_table_filter_by\",\n        }))\n    }\n\n    @computed private get value(): DropdownOption | null {\n        const filter = this.props.manager.dataTableFilter\n        return (\n            this.options.find((option) => filter === option.value) ??\n            this.options[0]\n        )\n    }\n\n    override render(): React.ReactElement | null {\n        if (!this.shouldShow) return null\n\n        return (\n            <Dropdown<DropdownOption>\n                className=\"data-table-filter-dropdown\"\n                menuClassName=\"data-table-filter-dropdown-menu\"\n                options={this.options}\n                onChange={this.onChange}\n                value={this.value}\n                renderTriggerValue={renderFilterTriggerValue}\n                renderMenuOption={renderFilterMenuOption}\n                aria-label=\"Filter by\"\n            />\n        )\n    }\n}\n\nfunction renderFilterTriggerValue(\n    option: DropdownOption | null\n): React.ReactNode | undefined {\n    if (!option) return undefined\n    return (\n        <>\n            <span className=\"label\">Filter by: </span>\n            {option.label} <span className=\"detail\">({option.count})</span>\n        </>\n    )\n}\n\nfunction renderFilterMenuOption(option: DropdownOption): React.ReactNode {\n    return (\n        <>\n            {option.label} <span className=\"detail\">({option.count})</span>\n        </>\n    )\n}\n","import * as React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport a from \"indefinite\"\nimport {\n    DataTableConfig,\n    DataTableFilter,\n} from \"../dataTable/DataTableConstants\"\nimport { SearchField } from \"./SearchField\"\nimport { DEFAULT_GRAPHER_ENTITY_TYPE } from \"../core/GrapherConstants\"\nimport { isAnyRegionPublisher } from \"../core/RegionGroups\"\nimport { match } from \"ts-pattern\"\n\nexport interface DataTableSearchFieldManager {\n    dataTableConfig: DataTableConfig\n    dataTableFilter: DataTableFilter\n    isOnTableTab?: boolean\n    entityType?: string\n}\n\n@observer\nexport class DataTableSearchField extends React.Component<{\n    manager: DataTableSearchFieldManager\n}> {\n    constructor(props: { manager: DataTableSearchFieldManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    static shouldShow(manager: DataTableSearchFieldManager): boolean {\n        const menu = new DataTableSearchField({ manager })\n        return menu.shouldShow\n    }\n\n    @computed private get manager(): DataTableSearchFieldManager {\n        return this.props.manager\n    }\n\n    @computed private get shouldShow(): boolean {\n        return !!this.manager.isOnTableTab\n    }\n\n    @computed private get entityType(): string {\n        return this.manager.entityType ?? DEFAULT_GRAPHER_ENTITY_TYPE\n    }\n\n    @computed private get placeholderEntityType(): string {\n        const filter = this.manager.dataTableFilter\n        if (isAnyRegionPublisher(filter)) return \"region\"\n\n        return match(filter)\n            .with(\"all\", () => this.entityType)\n            .with(\"selection\", () => this.entityType)\n            .with(\"countries\", () => \"country\")\n            .with(\"continents\", () => \"continent\")\n            .with(\"incomeGroups\", () => \"income group\")\n            .with(\"historicalCountries\", () => \"country or region\")\n            .exhaustive()\n    }\n\n    override render(): React.ReactElement | null {\n        if (!this.shouldShow) return null\n\n        return (\n            <SearchField\n                className=\"data-table-search-field\"\n                value={this.manager.dataTableConfig.search}\n                onChange={(value) => {\n                    // Reset filter to \"all\" when user starts typing\n                    // to allow searching across all entities\n                    if (value && this.manager.dataTableFilter !== \"all\") {\n                        this.manager.dataTableConfig.filter = \"all\"\n                    }\n                    this.manager.dataTableConfig.search = value\n                }}\n                onClear={() => (this.manager.dataTableConfig.search = \"\")}\n                trackNote=\"data_table_search\"\n                placeholder={`Search for ${a(this.placeholderEntityType)}`}\n            />\n        )\n    }\n}\n","import * as React from \"react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { MapConfig } from \"../mapCharts/MapConfig\"\nimport { GlobeController } from \"../mapCharts/GlobeController\"\nimport { MapRegionName } from \"@ourworldindata/types\"\n\nexport interface MapZoomToSelectionButtonManager {\n    mapConfig?: MapConfig\n    isOnMapTab?: boolean\n    globeController?: GlobeController\n    isFaceted?: boolean\n    isMapSelectionEnabled?: boolean\n}\n\ninterface MapZoomToSelectionButtonProps {\n    manager: MapZoomToSelectionButtonManager\n}\n\n@observer\nexport class MapZoomToSelectionButton extends React.Component<MapZoomToSelectionButtonProps> {\n    constructor(props: MapZoomToSelectionButtonProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    static shouldShow(manager: MapZoomToSelectionButtonManager): boolean {\n        const menu = new MapZoomToSelectionButton({ manager })\n        return menu.showMenu\n    }\n\n    @computed private get showMenu(): boolean {\n        const { isOnMapTab, mapConfig, isMapSelectionEnabled } =\n            this.props.manager\n        return !!(\n            isOnMapTab &&\n            mapConfig?.selection.hasSelection &&\n            mapConfig?.region === MapRegionName.World &&\n            !mapConfig?.globe.isActive &&\n            !this.manager.isFaceted &&\n            isMapSelectionEnabled\n        )\n    }\n\n    @computed private get manager(): MapZoomToSelectionButtonManager {\n        return this.props.manager\n    }\n\n    @action.bound private onClick(): void {\n        this.manager.globeController?.rotateToSelection()\n        if (this.manager.mapConfig)\n            this.manager.mapConfig.region = MapRegionName.World\n    }\n\n    override render(): React.ReactElement | null {\n        return this.showMenu ? (\n            <button\n                onClick={this.onClick}\n                type=\"button\"\n                data-track-note=\"map_zoom_to_selection\"\n                className=\"menu-toggle\"\n            >\n                <GlobeIcon size={16} />\n                <span className=\"label\">Zoom to selection</span>\n            </button>\n        ) : null\n    }\n}\n\nfunction GlobeIcon({ size }: { size: number }): React.ReactElement {\n    return (\n        <svg\n            width=\"16\"\n            height=\"16\"\n            fill=\"none\"\n            style={{ width: size, height: size }}\n            viewBox=\"0 0 16 16\"\n        >\n            <path\n                fill=\"currentColor\"\n                fillRule=\"evenodd\"\n                d=\"M8 1.828a6.172 6.172 0 1 1-.002 12.344A6.172 6.172 0 0 1 8 1.828m1.291 8.728c-.849.07-1.735.07-2.584 0 .09.438.244 1.025.454 1.53.125.298.264.558.415.74.153.185.296.264.424.264s.27-.08.424-.264c.15-.182.29-.442.415-.74.21-.505.362-1.093.452-1.53m-6.09-.862a5.1 5.1 0 0 0 3.104 3.104c-.36-.707-.587-1.577-.722-2.382-.805-.135-1.676-.362-2.382-.722m9.597 0c-.798.306-1.577.587-2.382.722-.135.805-.363 1.675-.723 2.382a5.1 5.1 0 0 0 3.105-3.105m-3.343-3.15a14.7 14.7 0 0 0-2.91 0 14.7 14.7 0 0 0 0 2.91 14.7 14.7 0 0 0 2.91 0 14.7 14.7 0 0 0 0-2.91m1.1.162c.072.85.072 1.737 0 2.587a8 8 0 0 0 1.24-.337c.46-.169.791-.343 1.005-.515.215-.173.286-.322.286-.441s-.071-.268-.286-.441c-.214-.172-.546-.346-1.005-.515a8 8 0 0 0-1.24-.338m-5.112.002a9 9 0 0 0-1.53.453 3 3 0 0 0-.74.415c-.184.153-.263.296-.263.424s.08.27.264.423c.182.15.44.291.74.416.504.21 1.091.362 1.53.452a15.7 15.7 0 0 1 0-2.583M9.695 3.2c.36.706.587 1.577.722 2.382.805.135 1.675.362 2.382.722A5.1 5.1 0 0 0 9.694 3.2m-3.39 0A5.1 5.1 0 0 0 3.2 6.304c.706-.36 1.577-.586 2.382-.721.135-.805.361-1.676.72-2.382M8 2.911c-.128 0-.27.078-.424.263-.15.182-.29.441-.415.74a9 9 0 0 0-.453 1.53 15.7 15.7 0 0 1 2.584 0 9 9 0 0 0-.453-1.53 3 3 0 0 0-.415-.74C8.27 2.989 8.128 2.91 8 2.91\"\n                clipRule=\"evenodd\"\n            />\n        </svg>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport { computed, action, observable, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { MapConfig } from \"../mapCharts/MapConfig\"\nimport {\n    EntityName,\n    FuzzySearch,\n    getRegionAlternativeNames,\n    getUserNavigatorLanguagesNonEnglish,\n    GlobeRegionName,\n    mappableCountries,\n    MapRegionName,\n    checkIsOwidIncomeGroupCode,\n    getUserCountryInformation,\n    regions,\n} from \"@ourworldindata/utils\"\nimport { GlobeController } from \"../mapCharts/GlobeController\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faLocationArrow } from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    Dropdown,\n    DropdownCollection,\n    DropdownCollectionItem,\n    DropdownOptionGroup,\n} from \"./Dropdown.js\"\nimport { MAP_REGION_LABELS } from \"../mapCharts/MapChartConstants\"\nimport { match } from \"ts-pattern\"\nimport * as R from \"remeda\"\n\nexport interface MapZoomDropdownManager {\n    mapConfig?: MapConfig\n    isOnMapTab?: boolean\n    isMapSelectionEnabled?: boolean\n    globeController?: GlobeController\n}\n\ninterface DropdownOption {\n    type: \"country\" | \"continent\"\n    label: string\n    value: string\n    isLocal?: boolean\n    alternativeNames?: string[]\n    trackNote: \"map_zoom_mobile\"\n}\n\ntype GroupedDropdownOption = DropdownOptionGroup<DropdownOption>\n\nfunction isGroupedOption(\n    item: DropdownCollectionItem<DropdownOption>\n): item is GroupedDropdownOption {\n    return (item as GroupedDropdownOption).options !== undefined\n}\n\n@observer\nexport class MapZoomDropdown extends React.Component<{\n    manager: MapZoomDropdownManager\n}> {\n    private searchInput = \"\"\n    private localEntityNames: EntityName[] | undefined = undefined\n\n    constructor(props: { manager: MapZoomDropdownManager }) {\n        super(props)\n\n        makeObservable<MapZoomDropdown, \"searchInput\" | \"localEntityNames\">(\n            this,\n            { searchInput: observable, localEntityNames: observable }\n        )\n    }\n\n    static shouldShow(manager: MapZoomDropdownManager): boolean {\n        const menu = new MapZoomDropdown({ manager })\n        return menu.showMenu\n    }\n\n    @computed private get showMenu(): boolean {\n        const { isMapSelectionEnabled, isOnMapTab, mapConfig } =\n            this.props.manager\n        return !!(\n            isOnMapTab &&\n            !isMapSelectionEnabled &&\n            !mapConfig?.globe.isActive\n        )\n    }\n\n    @computed private get manager(): MapZoomDropdownManager {\n        return this.props.manager\n    }\n\n    @computed private get mapConfig(): MapConfig {\n        return this.manager.mapConfig ?? new MapConfig()\n    }\n\n    @computed get fuzzy(): FuzzySearch<DropdownOption> {\n        return FuzzySearch.withKeyArray(\n            this.flatOptions,\n            (entity) => [entity.label, ...(entity.alternativeNames ?? [])],\n            (entity) => entity.label\n        )\n    }\n\n    @action.bound private onChange(selected: DropdownOption | null): void {\n        if (!selected?.value) return\n\n        match(selected.type)\n            .with(\"country\", () => {\n                // reset the region if a non-world region is currently selected\n                if (this.mapConfig.region !== MapRegionName.World) {\n                    this.mapConfig.region = MapRegionName.World\n                }\n\n                // rotate to the country on the globe and show its tooltip\n                this.manager.globeController?.setFocusCountry(selected.value)\n                this.manager.globeController?.rotateToCountry(selected.value)\n            })\n            .with(\"continent\", () => {\n                this.manager.globeController?.rotateToOwidContinent(\n                    selected.value as GlobeRegionName\n                )\n            })\n            .exhaustive()\n\n        this.searchInput = \"\"\n    }\n\n    @computed private get sortedCountries(): EntityName[] {\n        return _.sortBy(mappableCountries.map((country) => country.name))\n    }\n\n    @computed private get options(): DropdownCollection<DropdownOption> {\n        const { localEntityNames = [] } = this\n        const langs = getUserNavigatorLanguagesNonEnglish()\n\n        const countryOptions: DropdownOption[] = this.sortedCountries.map(\n            (country) => ({\n                type: \"country\",\n                value: country,\n                label: country,\n                alternativeNames: getRegionAlternativeNames(country, langs),\n                isLocal: this.localEntityNames?.includes(country),\n                trackNote: \"map_zoom_mobile\",\n            })\n        )\n\n        const continentOptions: DropdownOption[] = Object.values(MapRegionName)\n            .filter((region) => region !== MapRegionName.World)\n            .map((region) => {\n                return {\n                    type: \"continent\",\n                    value: region,\n                    label: MAP_REGION_LABELS[region as MapRegionName],\n                    isLocal: this.localEntityNames?.includes(region),\n                    trackNote: \"map_zoom_mobile\",\n                }\n            })\n\n        const sortLocalEntitiesToTop = (\n            options: DropdownOption[]\n        ): DropdownOption[] => {\n            if (localEntityNames.length === 0) return options\n            const [local, nonLocal] = R.partition(\n                options,\n                (option) => !!option.isLocal\n            )\n            return [...local, ...nonLocal]\n        }\n\n        return [\n            {\n                label: \"Continents\",\n                options: sortLocalEntitiesToTop(continentOptions),\n            },\n            {\n                label: \"Countries\",\n                options: sortLocalEntitiesToTop(countryOptions),\n            },\n        ]\n    }\n\n    @computed private get flatOptions(): DropdownOption[] {\n        return this.options.flatMap((item) =>\n            isGroupedOption(item) ? item.options : [item]\n        )\n    }\n\n    @computed\n    private get filteredOptions(): DropdownCollection<DropdownOption> {\n        if (!this.searchInput) return this.options\n        return this.fuzzy.search(this.searchInput)\n    }\n\n    @computed private get value(): DropdownOption | null {\n        const { region } = this.mapConfig\n        const { focusCountry } = this.manager.mapConfig?.globe ?? {}\n        const currentValue = focusCountry ?? region\n        return (\n            this.flatOptions.find((opt) => currentValue === opt.value) ?? null\n        )\n    }\n\n    @action.bound async populateLocalCountryName(): Promise<void> {\n        try {\n            const localCountryInfo = await getUserCountryInformation()\n            if (!localCountryInfo) return\n\n            const countryRegionsWithoutIncomeGroups = localCountryInfo.regions\n                ? localCountryInfo.regions.filter(\n                      (region) => !checkIsOwidIncomeGroupCode(region)\n                  )\n                : []\n\n            const userEntityCodes = [\n                localCountryInfo.code,\n                ...countryRegionsWithoutIncomeGroups,\n            ]\n\n            const userRegions = regions.filter((region) =>\n                userEntityCodes.includes(region.code)\n            )\n\n            const sortedUserRegions = _.sortBy(userRegions, (region) =>\n                userEntityCodes.indexOf(region.code)\n            )\n\n            const localEntityNames = sortedUserRegions.map(\n                (region) => region.name\n            )\n\n            this.localEntityNames = localEntityNames\n        } catch {\n            // ignore\n        }\n    }\n\n    override componentDidMount(): void {\n        void this.populateLocalCountryName()\n    }\n\n    override render(): React.ReactElement | null {\n        return this.showMenu ? (\n            <div className=\"map-zoom-dropdown\">\n                <Dropdown\n                    options={\n                        this.searchInput ? this.filteredOptions : this.options\n                    }\n                    onChange={this.onChange}\n                    value={this.value}\n                    inputValue={this.searchInput}\n                    onInputChange={(inputValue) =>\n                        (this.searchInput = inputValue)\n                    }\n                    isSearchable\n                    placeholder=\"Zoom to...\"\n                    aria-label=\"Search for country or continent\"\n                    renderMenuOption={(option) => (\n                        <>\n                            {option.label}\n                            {option.isLocal && (\n                                <FontAwesomeIcon\n                                    className=\"map-zoom-dropdown-local-icon\"\n                                    icon={faLocationArrow}\n                                />\n                            )}\n                        </>\n                    )}\n                />\n            </div>\n        ) : null\n    }\n}\n","import { Component } from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\n\nimport { Bounds } from \"@ourworldindata/utils\"\n\nimport { ContentSwitchers, ContentSwitchersManager } from \"../ContentSwitchers\"\nimport {\n    EntitySelectionToggle,\n    EntitySelectionManager,\n} from \"../EntitySelectionToggle\"\nimport {\n    MapRegionDropdown,\n    MapRegionDropdownManager,\n} from \"../MapRegionDropdown\"\nimport { SettingsMenu, SettingsMenuManager } from \"../SettingsMenu\"\nimport { GRAPHER_FRAME_PADDING_HORIZONTAL } from \"../../core/GrapherConstants\"\nimport { MapResetButton, MapResetButtonManager } from \"../MapResetButton\"\nimport {\n    DataTableFilterDropdown,\n    DataTableFilterDropdownManager,\n} from \"../DataTableFilterDropdown\"\nimport {\n    DataTableSearchField,\n    DataTableSearchFieldManager,\n} from \"../DataTableSearchField\"\nimport {\n    MapZoomToSelectionButton,\n    MapZoomToSelectionButtonManager,\n} from \"../MapZoomToSelectionButton\"\nimport { MapZoomDropdown, MapZoomDropdownManager } from \"../MapZoomDropdown\"\n\nexport interface ControlsRowManager\n    extends\n        ContentSwitchersManager,\n        EntitySelectionManager,\n        SettingsMenuManager,\n        MapRegionDropdownManager,\n        MapResetButtonManager,\n        MapZoomToSelectionButtonManager,\n        MapZoomDropdownManager,\n        DataTableFilterDropdownManager,\n        DataTableSearchFieldManager {\n    sidePanelBounds?: Bounds\n    isSmall?: boolean\n}\n\ninterface ControlsRowProps {\n    manager: ControlsRowManager\n    maxWidth?: number\n    popoverMaxWidth?: number\n    popoverMaxHeight?: number\n}\n\n@observer\nexport class ControlsRow extends Component<ControlsRowProps> {\n    private readonly framePaddingHorizontal = GRAPHER_FRAME_PADDING_HORIZONTAL\n\n    constructor(props: ControlsRowProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    static shouldShow(manager: ControlsRowManager): boolean {\n        const test = new ControlsRow({ manager })\n        return test.showControlsRow\n    }\n\n    @computed private get manager(): ControlsRowManager {\n        return this.props.manager\n    }\n\n    @computed private get showControlsRow(): boolean {\n        return (\n            ContentSwitchers.shouldShow(this.manager) ||\n            SettingsMenu.shouldShow(this.manager) ||\n            EntitySelectionToggle.shouldShow(this.manager) ||\n            // Map controls\n            MapRegionDropdown.shouldShow(this.manager) ||\n            MapZoomDropdown.shouldShow(this.manager) ||\n            MapZoomToSelectionButton.shouldShow(this.manager) ||\n            MapResetButton.shouldShow(this.manager, \"resetZoom\") ||\n            MapResetButton.shouldShow(this.manager, \"resetView\") ||\n            // Table controls\n            DataTableFilterDropdown.shouldShow(this.manager) ||\n            DataTableSearchField.shouldShow(this.manager)\n        )\n    }\n\n    private renderChartControls(): React.ReactElement {\n        return (\n            <div className=\"controls chart-controls\">\n                <EntitySelectionToggle manager={this.manager} />\n                <SettingsMenu\n                    manager={this.manager}\n                    popoverMaxWidth={this.props.popoverMaxWidth}\n                    popoverMaxHeight={this.props.popoverMaxHeight}\n                />\n            </div>\n        )\n    }\n\n    private renderTableControls(): React.ReactElement {\n        return (\n            <div className=\"controls table-controls\">\n                <DataTableFilterDropdown manager={this.manager} />\n                <DataTableSearchField manager={this.manager} />\n            </div>\n        )\n    }\n\n    private renderMapControls(): React.ReactElement {\n        return (\n            <div className=\"controls map-controls\">\n                {this.manager.isMapSelectionEnabled\n                    ? this.renderMapControlsForDesktop()\n                    : this.renderMapControlsForMobile()}\n            </div>\n        )\n    }\n\n    private renderMapControlsForDesktop(): React.ReactElement {\n        return (\n            <>\n                <MapResetButton manager={this.manager} action=\"resetZoom\" />\n                <MapZoomToSelectionButton manager={this.manager} />\n                <MapResetButton manager={this.manager} action=\"resetView\" />\n                <MapRegionDropdown manager={this.manager} />\n                <EntitySelectionToggle manager={this.manager} />\n            </>\n        )\n    }\n\n    private renderMapControlsForMobile(): React.ReactElement {\n        const shouldShowResetZoomButton = MapResetButton.shouldShow(\n            this.manager,\n            \"resetZoom\"\n        )\n\n        if (shouldShowResetZoomButton)\n            return <MapResetButton manager={this.manager} action=\"resetZoom\" />\n\n        return this.manager.isFaceted ? (\n            <MapRegionDropdown manager={this.manager} />\n        ) : (\n            <MapZoomDropdown manager={this.manager} />\n        )\n    }\n\n    override render(): React.ReactElement {\n        return (\n            <nav\n                className=\"controlsRow\"\n                style={{ padding: `0 ${this.framePaddingHorizontal}px` }}\n            >\n                <div>\n                    <ContentSwitchers manager={this.manager} />\n                </div>\n                <div className=\"controls\">\n                    {this.manager.isOnMapTab\n                        ? this.renderMapControls()\n                        : this.manager.isOnTableTab\n                          ? this.renderTableControls()\n                          : this.renderChartControls()}\n                </div>\n            </nav>\n        )\n    }\n}\n","import * as React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport a from \"indefinite\"\nimport { Bounds, VerticalAlign } from \"@ourworldindata/utils\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    DEFAULT_GRAPHER_ENTITY_TYPE,\n    DEFAULT_GRAPHER_ENTITY_TYPE_PLURAL,\n} from \"../core/GrapherConstants\"\nimport { Halo, TextWrap, TextWrapSvg } from \"@ourworldindata/components\"\nimport { GRAPHER_DARK_TEXT, GRAPHER_LIGHT_TEXT } from \"../color/ColorConstants\"\nimport { roundFontSize, scaleFontSize } from \"../chart/ChartUtils\"\n\nexport interface NoDataMessageManager {\n    canChangeEntity?: boolean\n    canAddEntities?: boolean\n    entityType?: string\n    entityTypePlural?: string\n    fontSize?: number\n    isStatic?: boolean\n}\n\ninterface NoDataMessageProps {\n    bounds?: Bounds\n    message?: string\n    helpText?: string\n    hideTextOutline?: boolean\n    manager: NoDataMessageManager\n}\n\n@observer\nexport class NoDataMessage extends React.Component<NoDataMessageProps> {\n    constructor(props: NoDataMessageProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get manager(): NoDataMessageManager {\n        return this.props.manager\n    }\n\n    @computed private get fontSize(): number {\n        const baseFontSize = this.manager.fontSize ?? BASE_FONT_SIZE\n        return scaleFontSize(14, baseFontSize)\n    }\n\n    override render(): React.ReactElement {\n        const { bounds, fontSize } = this\n        const { message } = this.props\n        const {\n            entityType = DEFAULT_GRAPHER_ENTITY_TYPE,\n            entityTypePlural = DEFAULT_GRAPHER_ENTITY_TYPE_PLURAL,\n            canAddEntities,\n            canChangeEntity,\n            isStatic,\n        } = this.manager\n\n        const defaultHelpText = canAddEntities\n            ? `Try adding ${entityTypePlural} to display data.`\n            : canChangeEntity\n              ? `Try choosing ${a(entityType)} to display data.`\n              : undefined\n        const helpText = this.props.helpText ?? defaultHelpText\n\n        const center = bounds.centerPos\n        const showHelpText = !isStatic && !!helpText\n        const helpTextFontSize = roundFontSize(0.9 * fontSize)\n\n        const maxWidth = bounds.width - 2 * fontSize\n        const messageWrap = new TextWrap({\n            text: message || \"No available data\",\n            maxWidth: bounds.width,\n            fontSize,\n            fontWeight: 500,\n            verticalAlign: VerticalAlign.middle,\n        })\n        const helpWrap = showHelpText\n            ? new TextWrap({\n                  text: helpText,\n                  maxWidth,\n                  fontSize: helpTextFontSize,\n                  verticalAlign: VerticalAlign.middle,\n              })\n            : undefined\n\n        // Vertically center the message + help text block as a whole.\n        const gap = helpWrap ? 0.5 * fontSize : 0\n        const totalHeight = messageWrap.height + gap + (helpWrap?.height ?? 0)\n        const top = center.y - totalHeight / 2\n        const messageY = top + messageWrap.height / 2\n        const helpY =\n            top + messageWrap.height + gap + (helpWrap?.height ?? 0) / 2\n\n        return (\n            <g className=\"no-data\">\n                <rect {...bounds.toProps()} fill=\"#fff\" opacity={0.6} />\n\n                <Halo\n                    id=\"no-data-message\"\n                    fontSize={fontSize}\n                    show={!this.props.hideTextOutline}\n                >\n                    <TextWrapSvg\n                        textWrap={messageWrap}\n                        x={center.x}\n                        y={messageY}\n                        textAnchor=\"middle\"\n                        fill={GRAPHER_DARK_TEXT}\n                    />\n                </Halo>\n\n                {helpWrap && (\n                    <Halo\n                        id=\"no-data-help\"\n                        fontSize={helpTextFontSize}\n                        show={!this.props.hideTextOutline}\n                    >\n                        <TextWrapSvg\n                            textWrap={helpWrap}\n                            x={center.x}\n                            y={helpY}\n                            textAnchor=\"middle\"\n                            fill={GRAPHER_LIGHT_TEXT}\n                        />\n                    </Halo>\n                )}\n            </g>\n        )\n    }\n}\n","import { CoreColumn, OwidTable } from \"@ourworldindata/core-table\"\nimport {\n    ColumnSlug,\n    EntityName,\n    IndicatorTitleWithFragments,\n    OwidVariableRow,\n    SortOrder,\n    Time,\n} from \"@ourworldindata/types\"\nimport { EntitiesByRegionGroup, RegionGroupKey } from \"../core/RegionGroups\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\n\n// Grapher's rendered data table is organized into groups, where\n// each group corresponds to an indicator from the core table.\n// Each indicator group contains a set of columns, depending on\n// the current time selection:\n// - Single time selection: one column per indicator showing the value\n// - Start and end time selection: two to four columns per indicator, including\n//   start value, end value, and optionally absolute change and relative change\n//   columns\n\nexport interface DataTableManager {\n    table: OwidTable // not used here, but required in type `ChartManager`\n    tableForDisplay: OwidTable\n    entityType?: string\n    endTime?: Time\n    startTime?: Time\n    dataTableSlugs?: ColumnSlug[]\n    isNarrow?: boolean\n    dataTableConfig: DataTableConfig\n    /** Kept on the manager so the sort survives remounts and can be set programmatically; unset means the default sort by latest value */\n    dataTableSort?: DataTableSortState\n    dataTableSelection?: SelectionArray | EntityName[]\n    entitiesByRegionGroup?: EntitiesByRegionGroup\n    closestTimelineMinTime?: Time\n    closestTimelineMaxTime?: Time\n}\n\n/**\n * DataTableDimension represents an indicator from the core table that is\n * displayed in the data table as a group with one or more columns.\n *\n * A DataTableDimension contains:\n * - columnDefinitions: Defines which columns to display for this indicator\n *   (e.g., start/end columns, change columns)\n * - valuesByEntityName: The actual data for each column, grouped by entity\n * - coreTableColumn: Reference to the original indicator from the core table\n */\nexport interface DataTableDimension {\n    columnDefinitions: DataTableColumnDefinition[]\n    valuesByEntityName: Map<EntityName, DataTableValuesForEntity>\n    coreTableColumn: CoreColumn\n}\n\n/**\n * DisplayDataTableDimension represents an indicator from the core table that is\n * displayed in the data table as a group with one or more columns. Unlike\n * DataTableDimension, it doesn't contain the actual data values but only the\n * metadata needed for display purposes.\n */\nexport interface DisplayDataTableDimension extends Omit<\n    DataTableDimension,\n    \"valuesByEntityName\"\n> {\n    sortable: boolean\n    display: { columnName: IndicatorTitleWithFragments; unit?: string }\n}\n\n/**\n * DataTableColumnDefinition defines the configuration for a single column\n * within a data table dimension. It specifies which type of data should be\n * displayed (e.g., start/end values or absolute/relative change).\n */\nexport interface DataTableColumnDefinition {\n    key: DataTableColumnKey\n    targetTime?: Time\n    sortable: boolean\n}\n\n/**\n * DataTableRow represents a single row in the data table, corresponding to\n * one entity. It contains the entity name and an array of data table values,\n * where each element maps to a data table dimension.\n */\nexport interface DataTableRow {\n    entityName: EntityName\n    values: (DataTableValuesForEntity | undefined)[] // TODO make it not undefined\n}\n\n/**\n * TargetTimeMode determines how time selection affects the data table display.\n * - point: Single time selection, showing one value per indicator\n * - range: Time range selection, showing start/end values and absolute/relative change\n */\nexport enum TargetTimeMode {\n    point = \"point\",\n    range = \"range\",\n}\n\nexport enum SparklineKey {\n    sparkline = \"sparkline\",\n}\n\n/**\n * PointColumnKey defines the available column types when displaying single\n * time point data. Used when TargetTimeMode is set to 'point'.\n * - single: The data value for the selected time\n */\nexport enum PointColumnKey {\n    single = \"single\",\n}\n\n/**\n * RangeColumnKey defines the available column types when displaying time\n * range data. Used when TargetTimeMode is set to 'range'.\n * - start: Value at the beginning of the time range\n * - end: Value at the end of the time range\n * - delta: Absolute change between start and end values\n * - deltaRatio: Relative change between start and end values\n */\nexport enum RangeColumnKey {\n    start = \"start\",\n    end = \"end\",\n    delta = \"delta\",\n    deltaRatio = \"deltaRatio\",\n}\n\n/**\n * PointValuesForEntity holds data for a single entity within a data table dimension\n * when TargetTimeMode is set to 'point' (single time selection).\n */\nexport type PointValuesForEntity = Partial<\n    Record<PointColumnKey, MinimalOwidRow> &\n        Record<SparklineKey, OwidVariableRow<number>[]>\n>\n\n/**\n * RangeValuesForEntity holds data for a single entity within a data table dimension\n * when TargetTimeMode is set to 'range' (time range selection). This includes\n * start and end values and absolute and relative change columns.\n */\nexport type RangeValuesForEntity = Partial<\n    Record<RangeColumnKey, MinimalOwidRow> &\n        Record<SparklineKey, OwidVariableRow<number>[]>\n>\n\nexport type DataTableValuesForEntity =\n    | PointValuesForEntity\n    | RangeValuesForEntity\n\nexport type DataTableColumnKey = PointColumnKey | RangeColumnKey | SparklineKey\n\nexport interface MinimalOwidRow {\n    value?: string | number\n    displayValue?: string\n    time?: Time\n}\n\nexport const COMMON_DATA_TABLE_FILTERS = [\"all\", \"selection\"] as const\nexport type CommonDataTableFilter = (typeof COMMON_DATA_TABLE_FILTERS)[number]\n\nexport type DataTableFilter = CommonDataTableFilter | RegionGroupKey\n\nexport interface DataTableFilterOption {\n    value: DataTableFilter\n    count: number\n}\n\nexport interface DataTableConfig {\n    filter?: DataTableFilter\n    search: string\n}\n\nexport interface DataTableSortState {\n    dimIndex: DimensionSortIndex\n    columnKey: DataTableColumnKey | undefined\n    order: SortOrder\n}\n\nexport const ENTITY_SORT_INDEX = -1\n\nexport const ENTITY_DATA_TABLE_SORT: DataTableSortState = {\n    dimIndex: ENTITY_SORT_INDEX,\n    columnKey: undefined,\n    order: SortOrder.asc,\n}\n\nexport type DimensionSortIndex = number\n","import * as React from \"react\"\nimport { scaleLinear } from \"d3-scale\"\nimport { extent, line } from \"d3\"\nimport { Bounds, roundForSvg } from \"@ourworldindata/utils\"\nimport { OwidVariableRow } from \"@ourworldindata/types\"\nimport { GRAPHER_DENIM } from \"../color/ColorConstants\"\n\nconst WIDTH = 75\nconst HEIGHT = 18\nconst DOT_RADIUS = 3\n\nexport function Sparkline({\n    owidRows,\n    strokeStyle,\n}: {\n    owidRows: OwidVariableRow<number>[]\n    strokeStyle: \"solid\" | \"dotted\"\n}): React.ReactElement | null {\n    if (owidRows.length <= 1) return null\n\n    // add a little padding so the dots don't overflow\n    const bounds = new Bounds(0, 0, WIDTH, HEIGHT).padWidth(DOT_RADIUS)\n\n    const firstRow = owidRows[0]\n    const lastRow = owidRows[owidRows.length - 1]\n    const minTime = firstRow.originalTime\n    const maxTime = lastRow.originalTime\n\n    // calculate x-scale\n    const xScale = scaleLinear()\n        .domain([minTime, maxTime])\n        .range([bounds.left, bounds.right])\n\n    // calculate y-scale\n    const yDomain = extent(owidRows.map((row) => row.value)) as [number, number]\n    const yScale = scaleLinear()\n        .domain(yDomain)\n        .range([bounds.bottom, bounds.top])\n\n    const makePath = line<OwidVariableRow<number>>()\n        .x((row) => roundForSvg(xScale(row.originalTime)))\n        .y((row) => roundForSvg(yScale(row.value)))\n\n    const path = makePath(owidRows)\n    if (!path) return null\n\n    const strokeDasharray = strokeStyle === \"dotted\" ? \"2,3\" : undefined\n\n    return (\n        <svg\n            width={WIDTH}\n            height={HEIGHT}\n            viewBox={`0 0 ${WIDTH} ${HEIGHT}`}\n            style={{ overflow: \"visible\" }}\n        >\n            <path\n                d={path}\n                stroke={GRAPHER_DENIM}\n                fill=\"none\"\n                strokeWidth={1.5}\n                strokeDasharray={strokeDasharray}\n            />\n\n            {[firstRow, lastRow].map((row) => (\n                <circle\n                    key={row.originalTime}\n                    cx={roundForSvg(xScale(row.originalTime))}\n                    cy={roundForSvg(yScale(row.value))}\n                    r={DOT_RADIUS}\n                    fill={GRAPHER_DENIM}\n                />\n            ))}\n        </svg>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport { computed, action } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport classnames from \"clsx\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faArrowDownLong,\n    faArrowUpLong,\n    faInfoCircle,\n} from \"@fortawesome/free-solid-svg-icons\"\n\nimport {\n    SortOrder,\n    Time,\n    EntityName,\n    OwidTableSlugs,\n    OwidVariableRoundingMode,\n} from \"@ourworldindata/types\"\nimport {\n    OwidTable,\n    CoreColumn,\n    ColumnTypeMap,\n} from \"@ourworldindata/core-table\"\nimport {\n    valuesByEntityAtTimes,\n    es6mapValues,\n    exposeInstanceOnWindow,\n    DataValue,\n    Bounds,\n    TickFormattingOptions,\n    Tippy,\n    excludeUndefined,\n    FuzzySearch,\n    getUserNavigatorLanguagesNonEnglish,\n    getRegionAlternativeNames,\n} from \"@ourworldindata/utils\"\nimport {\n    DEFAULT_GRAPHER_BOUNDS,\n    DEFAULT_GRAPHER_ENTITY_TYPE,\n    SVG_FONT_FAMILY,\n    SVG_STYLE_PROPS,\n} from \"../core/GrapherConstants\"\nimport * as R from \"remeda\"\nimport { isEntityRegionGroupKey } from \"../core/RegionGroups\"\nimport { NoDataMessage } from \"../noDataMessage/NoDataMessage\"\nimport {\n    DataTableColumnKey,\n    DisplayDataTableDimension,\n    DataTableRow,\n    DataTableDimension,\n    DataTableColumnDefinition,\n    DataTableValuesForEntity,\n    RangeValuesForEntity,\n    RangeColumnKey,\n    PointValuesForEntity,\n    PointColumnKey,\n    TargetTimeMode,\n    MinimalOwidRow,\n    DataTableConfig,\n    DataTableSortState,\n    DimensionSortIndex,\n    DataTableManager,\n    CommonDataTableFilter,\n    COMMON_DATA_TABLE_FILTERS,\n    DataTableFilter,\n    SparklineKey,\n    ENTITY_SORT_INDEX,\n    ENTITY_DATA_TABLE_SORT,\n} from \"./DataTableConstants\"\nimport { Sparkline } from \"../sparkline/Sparkline\"\n\nconst columnNameByType: Record<DataTableColumnKey, string> = {\n    single: \"Value\",\n    start: \"Start\",\n    end: \"End\",\n    delta: \"Absolute Change\",\n    deltaRatio: \"Relative Change\",\n    sparkline: \"Trend\",\n}\n\nconst inverseSortOrder = (order: SortOrder): SortOrder =>\n    order === SortOrder.asc ? SortOrder.desc : SortOrder.asc\n\ninterface DataTableProps {\n    manager: DataTableManager\n    bounds?: Bounds\n}\n\n@observer\nexport class DataTable extends React.Component<DataTableProps> {\n    @computed get manager(): DataTableManager {\n        return this.props.manager\n    }\n\n    @computed private get tableConfig(): DataTableConfig {\n        return this.manager.dataTableConfig\n    }\n\n    @computed private get timelineMinTime(): Time | undefined {\n        return this.manager.closestTimelineMinTime\n    }\n\n    @computed private get timelineMaxTime(): Time | undefined {\n        return this.manager.closestTimelineMaxTime\n    }\n\n    @computed get table(): OwidTable {\n        let table = this.manager.tableForDisplay\n\n        // make sure the given table doesn't contain any rows outside of the time range\n        table = table.filterByTimeRange(\n            this.manager.closestTimelineMinTime ?? -Infinity,\n            this.manager.closestTimelineMaxTime ?? Infinity\n        )\n\n        return table\n    }\n\n    @computed private get defaultSortState(): DataTableSortState {\n        const firstDimension = this.dataTableDimensionsWithValues[0]\n        const columnKeys = firstDimension?.columnDefinitions.map(\n            (colDef) => colDef.key\n        )\n        const columnKey = columnKeys?.includes(RangeColumnKey.end)\n            ? RangeColumnKey.end\n            : columnKeys?.includes(PointColumnKey.single)\n              ? PointColumnKey.single\n              : undefined\n\n        if (firstDimension?.coreTableColumn.hasNumberFormatting && columnKey)\n            return { dimIndex: 0, columnKey, order: SortOrder.desc }\n\n        return ENTITY_DATA_TABLE_SORT\n    }\n\n    @computed private get sortState(): DataTableSortState {\n        const requestedSort =\n            this.manager.dataTableSort ?? this.defaultSortState\n        let { dimIndex, columnKey } = requestedSort\n        const { order } = requestedSort\n\n        // The stored sort may point past the columns currently shown, e.g.\n        // when it was set programmatically or the table is still loading\n        const dimensions = this.dataTableDimensionsWithValues\n        dimIndex = Math.min(dimIndex, dimensions.length - 1)\n        if (dimIndex < 0)\n            return { dimIndex: ENTITY_SORT_INDEX, columnKey: undefined, order }\n\n        const availableColumns = dimensions[dimIndex].columnDefinitions.map(\n            (colDef) => colDef.key\n        )\n        if (columnKey === undefined || !availableColumns.includes(columnKey)) {\n            // A sort by the value in a single year carries over to the end of\n            // a time range (and back, since the single-year column comes first)\n            columnKey =\n                columnKey === PointColumnKey.single &&\n                availableColumns.includes(RangeColumnKey.end)\n                    ? RangeColumnKey.end\n                    : availableColumns[0]\n        }\n\n        return {\n            dimIndex,\n            columnKey,\n            order,\n        }\n    }\n\n    @computed private get entityType(): string {\n        return this.manager.entityType ?? DEFAULT_GRAPHER_ENTITY_TYPE\n    }\n\n    @computed private get sortValueMapper(): (\n        row: DataTableRow\n    ) => number | string {\n        const { dimIndex: sortIndex, columnKey, order } = this.sortState\n        if (sortIndex === ENTITY_SORT_INDEX)\n            return (row): string => row.entityName\n\n        const column =\n            this.dataTableDimensionsWithValues[sortIndex]?.coreTableColumn\n        const orderIndices =\n            column instanceof ColumnTypeMap.Ordinal &&\n            column.allowedValuesSorted?.length\n                ? new Map(\n                      column.allowedValuesSorted.map((value, index) => [\n                          value,\n                          index,\n                      ])\n                  )\n                : undefined\n\n        return (row): string | number => {\n            const dv = row.values[sortIndex] as DataTableValuesForEntity\n\n            let value: number | string | undefined\n            if (dv) {\n                if (isSingleValue(dv)) {\n                    value = dv.single?.value\n                } else if (\n                    isRangeValue(dv) &&\n                    columnKey !== undefined &&\n                    isRangeColumnKey(columnKey)\n                ) {\n                    value = dv[columnKey]?.value\n                }\n            }\n\n            // We always want undefined values to be last\n            if (\n                value === undefined ||\n                (typeof value === \"number\" &&\n                    (!isFinite(value) || isNaN(value)))\n            )\n                return order === SortOrder.asc ? Infinity : -Infinity\n\n            if (orderIndices && typeof value === \"string\") {\n                const unknownValueKey =\n                    order === SortOrder.asc ? orderIndices.size : -1\n                return orderIndices.get(value) ?? unknownValueKey\n            }\n\n            return value\n        }\n    }\n\n    @computed private get hasSubheaders(): boolean {\n        return (\n            !this.hasDimensionHeaders ||\n            this.dataTableDimensionsWithValues.some(\n                (header) => header.columnDefinitions.length > 1\n            )\n        )\n    }\n\n    @action.bound private updateSort(\n        dimIndex: DimensionSortIndex,\n        columnKey?: DataTableColumnKey\n    ): void {\n        const sort = this.sortState\n        const order =\n            sort.dimIndex === dimIndex && sort.columnKey === columnKey\n                ? inverseSortOrder(sort.order)\n                : dimIndex === ENTITY_SORT_INDEX\n                  ? SortOrder.asc\n                  : SortOrder.desc\n\n        this.manager.dataTableSort = { dimIndex, columnKey, order }\n    }\n\n    private get entityHeaderText(): string {\n        return _.capitalize(this.entityType)\n    }\n\n    private get entityHeader(): React.ReactElement {\n        const sort = this.sortState\n        return (\n            <ColumnHeader\n                key=\"entity\"\n                sortable={this.entityCount > 1}\n                sortedCol={sort.dimIndex === ENTITY_SORT_INDEX}\n                sortOrder={sort.order}\n                onClick={(): void => this.updateSort(ENTITY_SORT_INDEX)}\n                headerText={this.entityHeaderText}\n                colType=\"entity\"\n            />\n        )\n    }\n\n    @computed private get hasDimensionHeaders(): boolean {\n        return this.dataTableDimensionsWithValues.length > 1\n    }\n\n    private get dimensionHeaders(): React.ReactElement[] | null {\n        const sort = this.sortState\n        return this.displayDimensions.map((dim, dimIndex) => {\n            const { coreTableColumn, display } = dim\n            const singleColumn = dim.columnDefinitions.find(\n                (column) => column.key === PointColumnKey.single\n            )\n            const targetTime = this.hasSubheaders\n                ? undefined\n                : singleColumn?.targetTime\n\n            const title = _.upperFirst(display.columnName.title)\n            const { titleVariant } = display.columnName\n\n            const dimensionHeaderText = (\n                <React.Fragment>\n                    <div\n                        className=\"name\"\n                        title={\n                            titleVariant ? `${title} – ${titleVariant}` : title\n                        }\n                    >\n                        <span className=\"title-text\">{title} </span>\n                        <span className=\"title-fragments\">{titleVariant}</span>\n                    </div>\n                    <div className=\"description\">\n                        <span className=\"unit\">{display.unit}</span>\n                        <span>\n                            {display.unit && targetTime !== undefined && \",\"}\n                        </span>{\" \"}\n                        <span className=\"time\">\n                            {targetTime !== undefined &&\n                                coreTableColumn.formatTime(targetTime)}\n                        </span>\n                    </div>\n                </React.Fragment>\n            )\n\n            const onClick = dim.sortable\n                ? (): void => this.updateSort(dimIndex, PointColumnKey.single)\n                : undefined\n\n            const props = {\n                sortable: dim.sortable,\n                sortedCol: dim.sortable && sort.dimIndex === dimIndex,\n                sortOrder: sort.order,\n                onClick,\n                colSpan: dim.columnDefinitions.length,\n                headerText: dimensionHeaderText,\n                colType: \"dimension\" as const,\n            }\n\n            return <ColumnHeader key={coreTableColumn.slug} {...props} />\n        })\n    }\n\n    private subheaderText(\n        column: DataTableColumnDefinition,\n        dimension: DisplayDataTableDimension\n    ): string {\n        const col = dimension.coreTableColumn\n\n        return isDeltaColumn(column.key) ||\n            column.key === SparklineKey.sparkline\n            ? columnNameByType[column.key]\n            : col.formatTime(column.targetTime!)\n    }\n\n    private get dimensionSubheaders(): React.ReactElement[][] {\n        const sort = this.sortState\n        return this.displayDimensions.map((dim, dimIndex) =>\n            dim.columnDefinitions.map((column, colIndex) => {\n                const headerText = this.subheaderText(column, dim)\n                const onClick = column.sortable\n                    ? (): void => this.updateSort(dimIndex, column.key)\n                    : undefined\n                return (\n                    <ColumnHeader\n                        key={column.key}\n                        sortable={column.sortable}\n                        sortedCol={\n                            sort.dimIndex === dimIndex &&\n                            sort.columnKey === column.key\n                        }\n                        sortOrder={sort.order}\n                        onClick={onClick}\n                        headerText={headerText}\n                        colType=\"subdimension\"\n                        classNames={classnames({\n                            \"subdimension-first\": colIndex === 0,\n                        })}\n                    />\n                )\n            })\n        )\n    }\n\n    private get headerRow(): React.ReactElement {\n        const { hasDimensionHeaders, hasSubheaders } = this\n        return hasDimensionHeaders && hasSubheaders ? (\n            <>\n                <tr>\n                    <th className=\"above-entity\" />\n                    {this.dimensionHeaders}\n                    <th className=\"filler\" rowSpan={2} aria-hidden />\n                </tr>\n                <tr>\n                    {this.entityHeader}\n                    {this.dimensionSubheaders}\n                </tr>\n            </>\n        ) : (\n            <tr>\n                {this.entityHeader}\n                {hasSubheaders\n                    ? this.dimensionSubheaders\n                    : this.dimensionHeaders}\n                <th className=\"filler\" aria-hidden />\n            </tr>\n        )\n    }\n\n    private renderValueCellContent({\n        columnDefinition,\n        valuesForEntity,\n        formatTime,\n    }: {\n        columnDefinition: DataTableColumnDefinition\n        valuesForEntity?: DataTableValuesForEntity\n        formatTime: (time: Time) => string\n    }): React.ReactElement | null {\n        const missingValueNotice = (\n            <MissingValueNotice\n                columnDefinition={columnDefinition}\n                formatTime={formatTime}\n            />\n        )\n\n        if (!valuesForEntity) return missingValueNotice\n        if (!(columnDefinition.key in valuesForEntity))\n            return missingValueNotice\n\n        const value = getValueForEntityByKey(\n            valuesForEntity,\n            columnDefinition.key\n        )\n        if (!value || value.displayValue === undefined)\n            return missingValueNotice\n\n        return (\n            <>\n                <ClosestTimeNotice\n                    value={value}\n                    columnDefinition={columnDefinition}\n                    formatTime={formatTime}\n                />\n                <span>{value.displayValue}</span>\n            </>\n        )\n    }\n\n    private renderEntityRow(\n        row: DataTableRow,\n        dimensions: DisplayDataTableDimension[]\n    ): React.ReactElement {\n        return (\n            <tr key={row.entityName}>\n                <td key=\"entity\" className={classnames({ entity: true })}>\n                    <div className=\"entity-name\">{row.entityName}</div>\n                </td>\n\n                {row.values.map((valuesForEntity, dimIndex) => {\n                    const dimension = dimensions[dimIndex]\n                    const { isProjection } = dimension.coreTableColumn\n\n                    return dimension.columnDefinitions.map(\n                        (columnDefinition, colIndex) => {\n                            const key = `${dimIndex}-${colIndex}`\n                            const formatTime = (time: Time): string =>\n                                dimension.coreTableColumn.formatTime(time)\n\n                            if (columnDefinition.key === SparklineKey.sparkline)\n                                return (\n                                    <ValueCell\n                                        key={key}\n                                        columnKey={columnDefinition.key}\n                                        isFirstColumn={colIndex === 0}\n                                    >\n                                        {valuesForEntity?.sparkline && (\n                                            <Sparkline\n                                                owidRows={\n                                                    valuesForEntity.sparkline\n                                                }\n                                                strokeStyle={\n                                                    isProjection\n                                                        ? \"dotted\"\n                                                        : \"solid\"\n                                                }\n                                            />\n                                        )}\n                                    </ValueCell>\n                                )\n\n                            return (\n                                <ValueCell\n                                    key={key}\n                                    columnKey={columnDefinition.key}\n                                    isFirstColumn={colIndex === 0}\n                                >\n                                    {this.renderValueCellContent({\n                                        columnDefinition,\n                                        valuesForEntity,\n                                        formatTime,\n                                    })}\n                                </ValueCell>\n                            )\n                        }\n                    )\n                })}\n                <td className=\"filler\" aria-hidden />\n            </tr>\n        )\n    }\n\n    @computed get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get tableCaption(): React.ReactElement | null {\n        if (this.hasDimensionHeaders) return null\n        if (this.displayDimensions.length === 0) return null\n\n        const singleDimension = this.displayDimensions[0]\n        const { titleVariant } = singleDimension.display.columnName\n\n        return singleDimension ? (\n            <div className=\"caption\">\n                {singleDimension.display.columnName.title}{\" \"}\n                <span className=\"title-fragments\">\n                    {titleVariant}\n                    {singleDimension.display.unit &&\n                        ` (${singleDimension.display.unit})`}\n                </span>\n            </div>\n        ) : null\n    }\n\n    private renderNoDataMessage(): React.ReactElement {\n        return (\n            <svg\n                width={this.bounds.width}\n                height={this.bounds.height}\n                fontFamily={SVG_FONT_FAMILY}\n                style={SVG_STYLE_PROPS}\n            >\n                <NoDataMessage\n                    manager={this.manager}\n                    bounds={this.bounds}\n                    message={`No ${this.entityType} matches this query`}\n                    helpText=\"Try checking for typos or searching for something else\"\n                    hideTextOutline\n                />\n            </svg>\n        )\n    }\n\n    override render(): React.ReactElement | null {\n        if (this.sortedDisplayRows.length === 0)\n            return this.renderNoDataMessage()\n\n        return (\n            <div className=\"DataTable\">\n                {this.tableCaption}\n                <div className=\"table-wrapper\">\n                    <table>\n                        <thead>{this.headerRow}</thead>\n                        <tbody>\n                            {this.sortedDisplayRows.map((row) =>\n                                this.renderEntityRow(\n                                    row,\n                                    this.displayDimensions\n                                )\n                            )}\n                        </tbody>\n                    </table>\n                </div>\n            </div>\n        )\n    }\n\n    @computed private get loadedWithData(): boolean {\n        return this.columnsToShow.length > 0\n    }\n\n    private readonly AUTO_SELECTION_THRESHOLD_PERCENTAGE = 0.5\n\n    /**\n     * If the user or the editor hasn't specified a start, auto-select a start time\n     *  where AUTO_SELECTION_THRESHOLD_PERCENTAGE of the entities have values.\n     */\n    @computed get autoSelectedStartTime(): number | undefined {\n        let autoSelectedStartTime: number | undefined = undefined\n\n        if (!this.loadedWithData) return undefined\n\n        const numEntitiesInTable = this.entityNames.length\n\n        this.columnsToShow.forEach((column): boolean => {\n            const numberOfEntitiesWithDataSortedByTime = _.sortBy(\n                Object.entries(R.countBy(column.uniqTimesAsc, R.identity())),\n                ([time, _count]) => parseInt(time)\n            )\n\n            const firstTimeWithSufficientData =\n                numberOfEntitiesWithDataSortedByTime.find((time) => {\n                    const numEntitiesWithData = time[1]\n                    const percentEntitiesWithData =\n                        numEntitiesWithData / numEntitiesInTable\n                    return (\n                        percentEntitiesWithData >=\n                        this.AUTO_SELECTION_THRESHOLD_PERCENTAGE\n                    )\n                })?.[0]\n\n            if (firstTimeWithSufficientData) {\n                autoSelectedStartTime = parseInt(firstTimeWithSufficientData)\n                return false\n            }\n            return true\n        })\n\n        return autoSelectedStartTime\n    }\n\n    @computed private get columnsToShow(): CoreColumn[] {\n        const slugs = this.manager.dataTableSlugs ?? []\n        if (slugs.length)\n            return slugs\n                .map((slug: string) => {\n                    const col = this.table.get(slug)\n                    if (!col)\n                        console.warn(`Warning: column '${slug}' not found`)\n                    return col\n                })\n                .filter((col) => col)\n\n        const skips = new Set<string>(Object.values(OwidTableSlugs))\n        return this.table.columnsAsArray.filter(\n            (column) =>\n                !skips.has(column.slug) &&\n                //  dim.property !== \"color\" &&\n                (column.display?.includeInTable ?? true)\n        )\n    }\n\n    @computed private get availableEntityNames(): EntityName[] {\n        return _.union(\n            ...this.columnsToShow.map(\n                (col) => this.table.get(col.slug).uniqEntityNames\n            )\n        )\n    }\n\n    @computed get fuzzy(): FuzzySearch<string> {\n        const langs = getUserNavigatorLanguagesNonEnglish()\n        return FuzzySearch.withKeyArray(\n            this.availableEntityNames,\n            (entityName) => [\n                entityName,\n                ...(getRegionAlternativeNames(entityName, langs) ?? []),\n            ],\n            (entityName) => entityName\n        )\n    }\n\n    @computed private get entityNames(): EntityName[] {\n        if (!this.tableConfig.search) return this.availableEntityNames\n        return this.fuzzy.search(this.tableConfig.search)\n    }\n\n    @computed private get entityCount(): number {\n        return this.entityNames.length\n    }\n\n    @computed private get isSortable(): boolean {\n        return this.entityCount > 1\n    }\n\n    override componentDidMount(): void {\n        exposeInstanceOnWindow(this, \"dataTable\")\n    }\n\n    private formatValue(\n        column: CoreColumn,\n        value: number | string | undefined,\n        formattingOverrides?: TickFormattingOptions\n    ): string | undefined {\n        if (value === undefined) return undefined\n        return column.formatValueShort(value, {\n            roundingMode: OwidVariableRoundingMode.decimalPlaces,\n            numberAbbreviation: false,\n            trailingZeroes: true,\n            useNoBreakSpace: true,\n            ...formattingOverrides,\n        })\n    }\n\n    @computed get targetTimes(): [number] | [number, number] | undefined {\n        const { startTime, endTime } = this.manager\n        if (startTime === undefined || endTime === undefined) return undefined\n\n        if (startTime !== endTime) return [startTime, endTime]\n        return [endTime]\n    }\n\n    private getTargetTimesForColumn(\n        coreTableColumn: CoreColumn\n    ): [number] | [number, number] {\n        // Respect the column's target time if it's set\n        if (coreTableColumn.def.targetTime !== undefined)\n            return [coreTableColumn.def.targetTime]\n\n        // Otherwise, use the table's target times\n        if (this.targetTimes !== undefined) return this.targetTimes\n\n        return [coreTableColumn.maxTime]\n    }\n\n    @computed get dataTableDimensionsWithValues(): DataTableDimension[] {\n        return this.columnsToShow.map((coreTableColumn) => {\n            const targetTimes = this.getTargetTimesForColumn(coreTableColumn)\n            const targetTimeMode =\n                targetTimes.length < 2\n                    ? TargetTimeMode.point\n                    : TargetTimeMode.range\n\n            // Get values for the given target times and apply tolerance\n            const targetValuesByEntity = this.interpolateTargetValues({\n                coreTableColumn,\n                targetTimes,\n            })\n\n            // Add absolute and relative change columns if necessary\n            const valuesByEntityName =\n                this.calculateDataValuesForTargetTimeMode({\n                    targetValuesByEntity,\n                    coreTableColumn,\n                    targetTimeMode,\n                })\n\n            // Add data for sparklines\n            if (this.columnHasSparkline(coreTableColumn)) {\n                for (const [entityName, values] of valuesByEntityName) {\n                    values.sparkline =\n                        coreTableColumn.owidRowsByEntityName.get(entityName)\n                }\n            }\n\n            // Construct column definitions for the given target time mode\n            const columnDefinitions = this.constructColumnDefinitions({\n                coreTableColumn,\n                targetTimes,\n                targetTimeMode,\n            })\n\n            return { columnDefinitions, valuesByEntityName, coreTableColumn }\n        })\n    }\n\n    private columnHasSparkline(coreTableColumn: CoreColumn): boolean {\n        return (\n            this.timelineMinTime !== undefined &&\n            this.timelineMaxTime !== undefined &&\n            this.timelineMinTime !== this.timelineMaxTime &&\n            coreTableColumn.hasNumberFormatting &&\n            // For columns with a target time, the data table is fixed at that time.\n            // It thus doesn't make sense to show a sparkline\n            coreTableColumn.def.targetTime === undefined\n        )\n    }\n\n    private constructColumnDefinitions({\n        coreTableColumn,\n        targetTimes,\n        targetTimeMode,\n    }: {\n        coreTableColumn: CoreColumn\n        targetTimes: number[]\n        targetTimeMode: TargetTimeMode\n    }): DataTableColumnDefinition[] {\n        // Inject delta columns if the data is numerical and we have start & end\n        // values to compare in the table. One column for absolute difference,\n        // another for % difference.\n        const deltaColumns: DataTableColumnDefinition[] = []\n        if (coreTableColumn.hasNumberFormatting) {\n            if (targetTimeMode === TargetTimeMode.range) {\n                const { tableDisplay = {} } = coreTableColumn.display ?? {}\n                if (!tableDisplay.hideAbsoluteChange)\n                    deltaColumns.push({\n                        key: RangeColumnKey.delta,\n                        sortable: this.isSortable,\n                    })\n                if (!tableDisplay.hideRelativeChange)\n                    deltaColumns.push({\n                        key: RangeColumnKey.deltaRatio,\n                        sortable: this.isSortable,\n                    })\n            }\n        }\n\n        const valueColumns: DataTableColumnDefinition[] = targetTimes.map(\n            (targetTime, index) => ({\n                key:\n                    targetTimeMode === TargetTimeMode.range\n                        ? index === 0\n                            ? RangeColumnKey.start\n                            : RangeColumnKey.end\n                        : PointColumnKey.single,\n                targetTime,\n                sortable: this.isSortable,\n            })\n        )\n\n        // Show a column with sparklines if appropriate\n        const sparklineColumn = this.columnHasSparkline(coreTableColumn)\n            ? { key: SparklineKey.sparkline, sortable: false }\n            : undefined\n\n        return excludeUndefined([\n            ...valueColumns,\n            sparklineColumn,\n            ...deltaColumns,\n        ])\n    }\n\n    private interpolateTargetValues({\n        coreTableColumn,\n        targetTimes,\n    }: {\n        coreTableColumn: CoreColumn\n        targetTimes: number[]\n    }): Map<string, (DataValue | undefined)[]> {\n        return valuesByEntityAtTimes(\n            coreTableColumn.valueByEntityNameAndOriginalTime,\n            targetTimes,\n            coreTableColumn.tolerance\n        )\n    }\n\n    private calculateDataValuesForTargetTimeMode({\n        targetValuesByEntity,\n        targetTimeMode,\n        coreTableColumn,\n    }: {\n        targetValuesByEntity: Map<string, (DataValue | undefined)[]>\n        targetTimeMode: TargetTimeMode\n        coreTableColumn: CoreColumn\n    }): Map<string, DataTableValuesForEntity> {\n        return es6mapValues(targetValuesByEntity, (dvs) => {\n            // There is always a column, but not always a data value (in the delta column the\n            // value needs to be calculated)\n            if (targetTimeMode === TargetTimeMode.range) {\n                const [start, end]: (MinimalOwidRow | undefined)[] = dvs\n                const result: RangeValuesForEntity = {\n                    start: {\n                        ...start,\n                        displayValue: this.formatValue(\n                            coreTableColumn,\n                            start?.value\n                        ),\n                    },\n                    end: {\n                        ...end,\n                        displayValue: this.formatValue(\n                            coreTableColumn,\n                            end?.value\n                        ),\n                    },\n                    delta: undefined,\n                    deltaRatio: undefined,\n                }\n\n                if (\n                    start !== undefined &&\n                    end !== undefined &&\n                    typeof start.value === \"number\" &&\n                    typeof end.value === \"number\" &&\n                    // sanity check: start time should always be <= end time\n                    start.time !== undefined &&\n                    end.time !== undefined &&\n                    start.time <= end.time\n                ) {\n                    const deltaValue = end.value - start.value\n                    const deltaRatioValue = deltaValue / Math.abs(start.value)\n\n                    result.delta = {\n                        value: deltaValue,\n                        displayValue: this.formatValue(\n                            coreTableColumn,\n                            deltaValue,\n                            {\n                                showPlus: true,\n                                unit:\n                                    coreTableColumn.shortUnit === \"%\"\n                                        ? \"pp\"\n                                        : coreTableColumn.shortUnit,\n                            }\n                        ),\n                    }\n\n                    result.deltaRatio = {\n                        value: deltaRatioValue,\n                        displayValue:\n                            isFinite(deltaRatioValue) && !isNaN(deltaRatioValue)\n                                ? this.formatValue(\n                                      coreTableColumn,\n                                      deltaRatioValue * 100,\n                                      {\n                                          unit: \"%\",\n                                          numDecimalPlaces: 0,\n                                          showPlus: true,\n                                      }\n                                  )\n                                : undefined,\n                    }\n                }\n                return result\n            } else {\n                // if single time\n                const dv = dvs[0]\n                const result: PointValuesForEntity = {\n                    single: { ...dv },\n                }\n                if (dv !== undefined)\n                    result.single!.displayValue = this.formatValue(\n                        coreTableColumn,\n                        dv.value\n                    )\n                return result\n            }\n        })\n    }\n\n    @computed get displayDimensions(): DisplayDataTableDimension[] {\n        return this.dataTableDimensionsWithValues.map((d) => {\n            const coreTableColumn = d.coreTableColumn\n            const columnName = coreTableColumn.titlePublicOrDisplayName\n            const unit =\n                coreTableColumn.unit === \"%\" ? \"percent\" : coreTableColumn.unit\n\n            return {\n                coreTableColumn,\n                columnDefinitions: d.columnDefinitions,\n                display: { columnName, unit },\n                sortable: !this.hasSubheaders,\n            }\n        })\n    }\n\n    @computed private get displayRows(): DataTableRow[] {\n        return this.entityNames.map((entityName) => {\n            return {\n                entityName,\n                values: this.dataTableDimensionsWithValues.map((d) =>\n                    d.valuesByEntityName.get(entityName)\n                ),\n            }\n        })\n    }\n\n    @computed private get sortedDisplayRows(): DataTableRow[] {\n        const { order } = this.sortState\n        return _.orderBy(this.displayRows, this.sortValueMapper, order)\n    }\n}\n\nfunction ColumnHeader(props: {\n    classNames?: string\n    sortable: boolean\n    sortedCol: boolean\n    sortOrder: SortOrder\n    onClick?: () => void\n    rowSpan?: number\n    colSpan?: number\n    headerText: React.ReactNode\n    colType: \"entity\" | \"dimension\" | \"subdimension\"\n}): React.ReactElement {\n    const { sortable, sortedCol, colType } = props\n    const isEntityColumn = colType === \"entity\"\n    const sortIcon = sortable && (\n        <SortIcon\n            isActiveIcon={sortedCol}\n            order={\n                sortedCol\n                    ? props.sortOrder\n                    : isEntityColumn\n                      ? SortOrder.asc\n                      : SortOrder.desc\n            }\n        />\n    )\n\n    return (\n        <th\n            className={classnames(props.classNames, colType, { sortable })}\n            rowSpan={props.rowSpan ?? 1}\n            colSpan={props.colSpan ?? 1}\n            onClick={props.onClick}\n        >\n            <div className=\"content\">\n                {!isEntityColumn && sortIcon}\n                <span>{props.headerText}</span>\n                {isEntityColumn && sortIcon}\n            </div>\n        </th>\n    )\n}\n\nfunction ValueCell(props: {\n    columnKey: DataTableColumnKey\n    isFirstColumn?: boolean\n    children?: React.ReactNode\n}): React.ReactElement {\n    const className = classnames([\n        \"cell\",\n        `cell-${props.columnKey}`,\n        { \"cell-first\": props.isFirstColumn },\n    ])\n    return <td className={className}>{props.children}</td>\n}\n\nfunction SortIcon(props: {\n    isActiveIcon?: boolean\n    order: SortOrder\n}): React.ReactElement {\n    const isActiveIcon = props.isActiveIcon ?? false\n    const activeIcon =\n        props.order === SortOrder.desc ? faArrowUpLong : faArrowDownLong\n\n    return (\n        <span\n            className={classnames({ \"sort-icon\": true, active: isActiveIcon })}\n        >\n            {isActiveIcon ? (\n                <FontAwesomeIcon icon={activeIcon} />\n            ) : (\n                <span style={{ display: \"inline-block\", width: \"max-content\" }}>\n                    <FontAwesomeIcon icon={faArrowUpLong} />\n                    <FontAwesomeIcon\n                        icon={faArrowDownLong}\n                        style={{ marginLeft: \"-2px\" }}\n                    />\n                </span>\n            )}\n        </span>\n    )\n}\n\nfunction ClosestTimeNotice({\n    value,\n    columnDefinition,\n    formatTime,\n}: {\n    value: MinimalOwidRow\n    columnDefinition: DataTableColumnDefinition\n    formatTime: (time: Time) => string\n}): React.ReactElement | null {\n    const shouldShowClosestTimeNotice =\n        !isDeltaColumn(columnDefinition.key) &&\n        columnDefinition.targetTime !== value.time\n\n    if (\n        value.time === undefined ||\n        columnDefinition.targetTime === undefined ||\n        !shouldShowClosestTimeNotice\n    )\n        return null\n\n    const targetTime = formatTime(columnDefinition.targetTime)\n    const closestTime = formatTime(value.time)\n\n    return (\n        <Tippy\n            content={\n                <div className=\"closest-time-notice-tippy\">\n                    <strong>Data not available for {targetTime}</strong>\n                    <br />\n                    Showing closest available data point ({closestTime})\n                </div>\n            }\n        >\n            <span className=\"closest-time-notice-icon\">\n                <span className=\"icon\">\n                    <FontAwesomeIcon icon={faInfoCircle} />\n                </span>\n            </span>\n        </Tippy>\n    )\n}\n\nfunction MissingValueNotice({\n    columnDefinition,\n    formatTime,\n}: {\n    columnDefinition: DataTableColumnDefinition\n    formatTime: (time: Time) => string\n}): React.ReactElement {\n    if (\n        isDeltaColumn(columnDefinition.key) ||\n        columnDefinition.targetTime === undefined\n    )\n        return (\n            <span className=\"missing-value\" role=\"img\" aria-label=\"No data\">\n                —\n            </span>\n        )\n\n    const noDataLabel = `No data for ${formatTime(columnDefinition.targetTime)}`\n\n    return (\n        <Tippy\n            content={\n                <div className=\"closest-time-notice-tippy\">{noDataLabel}</div>\n            }\n        >\n            <span className=\"missing-value\" role=\"img\" aria-label={noDataLabel}>\n                —\n            </span>\n        </Tippy>\n    )\n}\n\nfunction getValueForEntityByKey(\n    dimensionValue: DataTableValuesForEntity,\n    columnKey: DataTableColumnKey\n): MinimalOwidRow | undefined {\n    if (isSingleValue(dimensionValue)) {\n        return dimensionValue[columnKey as PointColumnKey]\n    } else if (isRangeValue(dimensionValue)) {\n        return dimensionValue[columnKey as RangeColumnKey]\n    }\n    return undefined\n}\n\nfunction isRangeColumnKey(key: string): key is RangeColumnKey {\n    return Object.values(RangeColumnKey).includes(key as any)\n}\n\nfunction isRangeValue(\n    value: DataTableValuesForEntity\n): value is RangeValuesForEntity {\n    return \"start\" in value\n}\n\nfunction isSingleValue(\n    value: DataTableValuesForEntity\n): value is PointValuesForEntity {\n    return \"single\" in value\n}\n\nfunction isDeltaColumn(columnKey?: DataTableColumnKey): boolean {\n    return columnKey === \"delta\" || columnKey === \"deltaRatio\"\n}\n\nfunction isCommonDataTableFilter(\n    candidate: string\n): candidate is CommonDataTableFilter {\n    return COMMON_DATA_TABLE_FILTERS.includes(candidate as any)\n}\n\nexport function isValidDataTableFilter(\n    candidate: string\n): candidate is DataTableFilter {\n    return (\n        isCommonDataTableFilter(candidate) || isEntityRegionGroupKey(candidate)\n    )\n}\n","import { InteractionState } from \"./InteractionState.js\"\n\nexport enum Emphasis {\n    /** Default emphasis */\n    Default = \"default\",\n    /** Slightly elevated emphasis */\n    Elevated = \"elevated\",\n    /** Strongly highlighted emphasis */\n    Highlighted = \"highlighted\",\n    /** Muted emphasis */\n    Muted = \"muted\",\n}\n\nexport function resolveEmphasis({\n    hover,\n    focus,\n}: {\n    hover?: InteractionState\n    focus?: InteractionState\n}): Emphasis {\n    if (hover?.active || focus?.active) return Emphasis.Highlighted\n    if (hover?.background || focus?.background) return Emphasis.Muted\n    return Emphasis.Default\n}\n","import { ChartManager } from \"../chart/ChartManager\"\nimport { CoreValueType, EntityName, Time } from \"@ourworldindata/types\"\nimport { ChartSeries } from \"../chart/ChartInterface\"\nimport { Color } from \"@ourworldindata/utils\"\nimport { InteractionState } from \"../interaction/InteractionState\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport { LegendStyleConfig } from \"../legend/LegendStyleConfig\"\nimport { GRAPHER_OPACITY_MUTED } from \"../core/GrapherConstants\"\n\nexport const LINE_CHART_CLASS_NAME = \"LineChart\"\n\n// Line color\nexport const DEFAULT_LINE_COLOR = \"#000\"\n\n// Stroke width\nexport const DEFAULT_STROKE_WIDTH = 1.5\nexport const VARIABLE_COLOR_STROKE_WIDTH = 2.5\n\n// Marker radius\nexport const DEFAULT_MARKER_RADIUS = 1.8\nexport const ELEVATED_MARKER_RADIUS = 2.2\nexport const VARIABLE_COLOR_MARKER_RADIUS = 2.2\nexport const DISCONNECTED_DOTS_MARKER_RADIUS = 2.6\nexport const STATIC_SMALL_MARKER_RADIUS = 3\n\n// Line outline\nexport const DEFAULT_LINE_OUTLINE_WIDTH = 0.5\nexport const VARIABLE_COLOR_LINE_OUTLINE_WIDTH = 1.0\n\nexport interface LineStyleConfig {\n    strokeWidthFactor: number // multiplied by the base stroke width\n    opacity: number\n    showOutline: boolean\n}\n\nconst DEFAULT_LINE_STYLE: LineStyleConfig = {\n    strokeWidthFactor: 1,\n    opacity: 1,\n    showOutline: true,\n}\n\nexport const LINE_STYLE: Record<Emphasis, LineStyleConfig> = {\n    [Emphasis.Default]: DEFAULT_LINE_STYLE,\n    [Emphasis.Highlighted]: DEFAULT_LINE_STYLE,\n    [Emphasis.Elevated]: {\n        ...DEFAULT_LINE_STYLE,\n        strokeWidthFactor: 1.33,\n    },\n    [Emphasis.Muted]: {\n        strokeWidthFactor: 0.66,\n        opacity: GRAPHER_OPACITY_MUTED,\n        showOutline: false,\n    },\n}\n\n// Legend\nexport const LEGEND_PADDING = 25\nexport const NUMERIC_LEGEND_STYLE: LegendStyleConfig = {\n    marker: { default: { stroke: \"#ffffff\", strokeWidth: 1 } },\n}\nexport const CATEGORICAL_LEGEND_STYLE: LegendStyleConfig = {\n    marker: {\n        default: { opacity: 1 },\n        muted: { opacity: GRAPHER_OPACITY_MUTED },\n    },\n    text: { muted: { opacity: GRAPHER_OPACITY_MUTED } },\n}\n\nexport interface LinePoint {\n    x: number\n    y: number\n    colorValue?: CoreValueType\n}\n\nexport interface PlacedPoint {\n    x: number\n    y: number\n    color: Color\n    time: number\n}\n\nexport interface RenderPoint extends PlacedPoint {\n    emphasis: Emphasis\n}\n\nexport interface LineChartSeries extends ChartSeries {\n    color: Color\n    displayName: string\n    isProjection?: boolean\n    plotMarkersOnly?: boolean\n    points: LinePoint[]\n    entityName: EntityName\n    columnName: string\n    focus: InteractionState\n}\n\nexport interface PlacedLineChartSeries extends LineChartSeries {\n    placedPoints: PlacedPoint[]\n}\n\nexport interface RenderLineChartSeries extends PlacedLineChartSeries {\n    hover: InteractionState\n    emphasis: Emphasis\n}\n\nexport interface LineChartManager extends ChartManager {\n    highlightedTimesInLineChart?: Time[]\n    lineStrokeWidth?: number\n    canSelectMultipleEntities?: boolean // used to pick an appropriate series name\n    hasScatter?: boolean // x-axis config is ignored if a secondary scatter plot is present\n}\n","import * as R from \"remeda\"\nimport { Color } from \"@ourworldindata/utils\"\nimport { ColorScheme } from \"./ColorScheme\"\nimport { getLeastUsedColor } from \"./ColorUtils\"\n\ntype CategoryId = string\nexport type CategoricalColorMap = Map<CategoryId, Color>\nexport type CategoricalColorMapReadonly = ReadonlyMap<CategoryId, Color>\n\nexport interface CategoricalColorAssignerProps {\n    colorScheme: ColorScheme\n    invertColorScheme?: boolean\n\n    /** The custom color mappings (most likely author-specified) to use. */\n    colorMap?: CategoricalColorMap\n\n    /**\n     * A cache for custom colors or automatically selected colors for each identifier\n     * encountered.\n     *\n     * In the Grapher, this is persisted across charts, so that a line chart\n     * that turns into a bar chart will have a matching color scheme across\n     * both states.\n     */\n    autoColorMapCache?: CategoricalColorMap\n\n    numColorsInUse?: number\n}\n\n/**\n * Assigns custom categorical colors, e.g. specified by an author for entities or variables.\n *\n * When an identifier doesn't have an assigned color, it uses the least used color in the scheme.\n *\n * Keeps a cache so that identical identifiers are assigned consistent colors. See\n * Grapher#seriesColorMap for an example of a cache.\n */\nexport class CategoricalColorAssigner {\n    private readonly colorScheme: ColorScheme\n    private readonly invertColorScheme: boolean\n    private readonly colorMap: CategoricalColorMapReadonly\n    private readonly autoColorMapCache: CategoricalColorMap\n    private readonly numColorsInUse?: number\n\n    constructor(props: CategoricalColorAssignerProps) {\n        this.colorScheme = props.colorScheme\n        this.invertColorScheme = props.invertColorScheme ?? false\n        this.colorMap = props.colorMap ?? new Map()\n        this.autoColorMapCache = props.autoColorMapCache ?? new Map()\n        this.numColorsInUse = props.numColorsInUse\n    }\n\n    private get usedColors(): Color[] {\n        const merged: CategoricalColorMap = new Map([\n            ...this.autoColorMapCache,\n            ...this.colorMap,\n        ])\n        return Array.from(merged.values())\n    }\n\n    private get availableColors(): Color[] {\n        // copy the colors array because we might need to reverse it\n        const colors =\n            (this.numColorsInUse !== undefined\n                ? this.colorScheme.getColors(this.numColorsInUse)\n                : R.last(this.colorScheme.colorSets)\n            )?.slice() ?? []\n        if (this.invertColorScheme) return colors.toReversed()\n        else return colors\n    }\n\n    private get leastUsedColor(): Color {\n        const leastUsedColor = getLeastUsedColor(\n            this.availableColors,\n            this.usedColors\n        )\n        // TODO handle this better?\n        if (leastUsedColor === undefined) {\n            // eslint-disable-next-line no-console\n            console.trace(\"Least used color is undefined, using black.\", {\n                availableColors: this.availableColors,\n                usedColors: this.usedColors,\n            })\n        }\n        return leastUsedColor ?? \"#000\"\n    }\n\n    assign(id: CategoryId): Color {\n        let color = this.colorMap.get(id)\n        if (color === undefined) color = this.autoColorMapCache.get(id)\n        if (color === undefined && this.colorScheme.colorMap)\n            color = this.colorScheme.colorMap[id]\n        if (color === undefined) color = this.leastUsedColor\n        this.autoColorMapCache.set(id, color)\n        return color\n    }\n}\n","import * as _ from \"lodash-es\"\nimport { Bounds, isMobile, PointVector } from \"@ourworldindata/utils\"\nimport { OwidTable } from \"@ourworldindata/core-table\"\nimport {\n    AxisAlign,\n    AxisConfigInterface,\n    ColumnSlug,\n    EntityName,\n    PrimitiveType,\n    ScaleType,\n    SeriesName,\n    SeriesStrategy,\n    Time,\n} from \"@ourworldindata/types\"\nimport {\n    LineChartSeries,\n    LinePoint,\n    PlacedLineChartSeries,\n    PlacedPoint,\n    RenderLineChartSeries,\n} from \"./LineChartConstants\"\nimport { DualAxis, HorizontalAxis } from \"../axis/Axis\"\nimport { LineChartState } from \"./LineChartState\"\nimport { darkenColorForLine } from \"../color/ColorUtils\"\nimport {\n    byHoverThenFocusState,\n    getHoverStateForSeries,\n} from \"../chart/ChartUtils\"\nimport { Emphasis, resolveEmphasis } from \"../interaction/Emphasis\"\n\nexport type AnnotationsMap = Map<PrimitiveType, Set<PrimitiveType>>\n\nexport interface GetSeriesNameArgs {\n    entityName: EntityName\n    columnName: string\n    seriesStrategy: SeriesStrategy\n    hasMultipleEntitiesSelected?: boolean\n    allowsMultiEntitySelection?: boolean\n}\n\n/**\n * Unique identifier for a series that is shared between line and slope charts\n * since focus states are built on top of it.\n */\nexport function getSeriesName({\n    entityName,\n    columnName,\n    seriesStrategy,\n    hasMultipleEntitiesSelected,\n    allowsMultiEntitySelection,\n}: GetSeriesNameArgs): SeriesName {\n    // When plotting entities as series, use the entity name as the unique identifier\n    if (seriesStrategy === SeriesStrategy.entity) return entityName\n\n    // When plotting columns as series, use the column name. Prepend the entity\n    // name if multiple entities can be selected or are currently selected to\n    // ensure unique series names across all possible selection states\n    return allowsMultiEntitySelection || hasMultipleEntitiesSelected\n        ? `${entityName} - ${columnName}`\n        : columnName\n}\n\nexport function getDisplayName({\n    entityName,\n    columnName,\n    seriesStrategy,\n    hasMultipleEntitiesSelected,\n}: Omit<GetSeriesNameArgs, \"canSelectMultipleEntities\">): SeriesName {\n    // When plotting entities as series, each series represents one entity\n    if (seriesStrategy === SeriesStrategy.entity) return entityName\n\n    // When plotting columns as series, show just the column name by default.\n    // Only prepend the entity name when multiple entities are currently selected\n    // (this is different from series names that always include the entity name)\n    return hasMultipleEntitiesSelected\n        ? `${entityName} – ${columnName}` // Uses en dash for display\n        : columnName\n}\n\nexport function getColorKey({\n    entityName,\n    columnName,\n    seriesStrategy,\n    hasMultipleEntitiesSelected,\n}: Omit<GetSeriesNameArgs, \"canSelectMultipleEntities\">): SeriesName {\n    // When plotting entities as series, each entity gets its own color\n    if (seriesStrategy === SeriesStrategy.entity) return entityName\n\n    // When plotting columns as series, show just the column name by default.\n    // Only prepend the entity name when multiple entities are currently selected\n    // (this is different from series names that always include the entity name)\n    return hasMultipleEntitiesSelected\n        ? `${entityName} - ${columnName}`\n        : columnName\n}\n\nexport function getAnnotationsMap(\n    table: OwidTable,\n    slug: ColumnSlug\n): AnnotationsMap | undefined {\n    return table\n        .getAnnotationColumnForColumn(slug)\n        ?.getUniqueValuesGroupedBy(table.entityNameSlug)\n}\n\nexport function getAnnotationsForSeries(\n    annotationsMap: AnnotationsMap | undefined,\n    seriesName: SeriesName\n): string | undefined {\n    const annotations = annotationsMap?.get(seriesName)\n    if (!annotations) return undefined\n    return Array.from(annotations.values())\n        .filter((anno) => anno)\n        .join(\" & \")\n}\n\nexport function getYAxisConfigDefaults(\n    config?: AxisConfigInterface\n): AxisConfigInterface {\n    return {\n        nice: config?.scaleType !== ScaleType.log,\n        // If we only have a single y value (probably 0), we want the\n        // horizontal axis to be at the bottom of the chart.\n        // see https://github.com/owid/owid-grapher/pull/975#issuecomment-890798547\n        singleValueAxisPointAlign: AxisAlign.start,\n        // Default to 0 if not set\n        min: 0,\n    }\n}\n\nexport function toPlacedLineChartSeries(\n    series: readonly LineChartSeries[],\n    { chartState, dualAxis }: { chartState: LineChartState; dualAxis: DualAxis }\n): PlacedLineChartSeries[] {\n    const { horizontalAxis, verticalAxis } = dualAxis\n\n    return series.toReversed().map((series) => {\n        const placedPoints = series.points.map((point): PlacedPoint => {\n            const color = chartState.hasColorScale\n                ? darkenColorForLine(\n                      chartState.getColorScaleColor(point.colorValue)\n                  )\n                : series.color\n\n            return {\n                time: point.x,\n                x: horizontalAxis.place(point.x),\n                y: verticalAxis.place(point.y),\n                color,\n            }\n        })\n        return { ...series, placedPoints }\n    })\n}\n\n/**\n * Find the time of the data point whose x is closest to the mouse position.\n * Returns undefined if the mouse is outside the bounds.\n */\nexport function findClosestTimeAtMouse({\n    mouse,\n    innerBounds,\n    horizontalAxis,\n    allValues,\n}: {\n    mouse: PointVector\n    innerBounds: Bounds\n    horizontalAxis: HorizontalAxis\n    allValues: LinePoint[]\n}): Time | undefined {\n    // Expand the hit box so the first/last timepoints are easy to hover\n    const hoverMargin = isMobile() ? 44 : 25\n    const boundedBox = innerBounds.expand({\n        left: hoverMargin,\n        right: hoverMargin,\n    })\n\n    if (!boundedBox.contains(mouse)) return undefined\n\n    const invertedX = horizontalAxis.invert(mouse.x)\n    const closest = _.minBy(allValues, (point) => Math.abs(invertedX - point.x))\n    return closest?.x\n}\n\nexport function toRenderLineChartSeries(\n    placedSeries: PlacedLineChartSeries[],\n    {\n        isFocusModeActive = false,\n        isHoverModeActive = false,\n        hoveredSeriesNames = [],\n        shouldElevateSingleSeries = true,\n    }: {\n        isFocusModeActive?: boolean\n        isHoverModeActive?: boolean\n        hoveredSeriesNames?: SeriesName[]\n        shouldElevateSingleSeries?: boolean\n    }\n): RenderLineChartSeries[] {\n    const isSingleSeries = placedSeries.length === 1\n\n    let series: RenderLineChartSeries[] = placedSeries.map((series) => {\n        const hover = getHoverStateForSeries(series, {\n            isHoverModeActive,\n            hoveredSeriesNames,\n        })\n        let emphasis = resolveEmphasis({ hover, focus: series.focus })\n\n        // Emphasize series if it's the only one in the chart\n        if (\n            shouldElevateSingleSeries &&\n            isSingleSeries &&\n            emphasis === Emphasis.Default\n        )\n            emphasis = Emphasis.Elevated\n\n        return { ...series, hover, emphasis }\n    })\n\n    // Draw lines on top of markers-only series\n    series = _.sortBy(series, (series) => !series.plotMarkersOnly)\n\n    // Sort by interaction state so that foreground series\n    // are drawn on top of background series\n    if (isFocusModeActive || isHoverModeActive) {\n        series = _.sortBy(series, byHoverThenFocusState)\n    }\n\n    return series\n}\n","import { action, computed, observable, makeObservable } from \"mobx\"\nimport { SeriesName } from \"@ourworldindata/types\"\nimport { InteractionState } from \"../interaction/InteractionState.js\"\n\nexport class FocusArray {\n    private readonly store: Set<SeriesName> = new Set()\n\n    constructor() {\n        makeObservable<FocusArray, \"store\">(this, { store: observable })\n    }\n\n    @computed get seriesNameSet(): Set<SeriesName> {\n        return this.store\n    }\n\n    @computed get seriesNames(): SeriesName[] {\n        return Array.from(this.store)\n    }\n\n    @computed get isEmpty(): boolean {\n        return this.store.size === 0\n    }\n\n    @computed get hasFocusedSeries(): boolean {\n        return !this.isEmpty\n    }\n\n    @computed get length(): number {\n        return this.store.size\n    }\n\n    /**\n     * Whether a series is currently focused\n     */\n    has(seriesName: SeriesName): boolean {\n        return this.store.has(seriesName)\n    }\n\n    /**\n     * Get the interaction state of a series\n     */\n    state(seriesName: SeriesName): InteractionState {\n        return new InteractionState(this.has(seriesName), !this.isEmpty)\n    }\n\n    @action.bound add(...seriesNames: SeriesName[]): this {\n        for (const seriesName of seriesNames) {\n            this.store.add(seriesName)\n        }\n        return this\n    }\n\n    @action.bound remove(...seriesNames: SeriesName[]): this {\n        for (const seriesName of seriesNames) {\n            this.store.delete(seriesName)\n        }\n        return this\n    }\n\n    @action.bound clearAllAndAdd(...seriesNames: SeriesName[]): this {\n        this.clear()\n        this.add(...seriesNames)\n        return this\n    }\n\n    @action.bound toggle(...seriesNames: SeriesName[]): this {\n        for (const seriesName of seriesNames) {\n            if (this.has(seriesName)) {\n                this.remove(seriesName)\n            } else {\n                this.add(seriesName)\n            }\n        }\n        return this\n    }\n\n    @action.bound clear(): void {\n        this.store.clear()\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport { Color } from \"@ourworldindata/utils\"\nimport { computed, makeObservable } from \"mobx\"\nimport {\n    ScaleType,\n    SeriesName,\n    EntityName,\n    SeriesStrategy,\n    FacetStrategy,\n    CoreValueType,\n    MissingDataStrategy,\n    ColorScaleConfigInterface,\n    ColorSchemeName,\n    ChartErrorInfo,\n} from \"@ourworldindata/types\"\nimport { ColorSchemes } from \"../color/ColorSchemes\"\nimport { ChartState } from \"../chart/ChartInterface\"\nimport {\n    LineChartSeries,\n    LineChartManager,\n    LinePoint,\n    DEFAULT_LINE_COLOR,\n} from \"./LineChartConstants\"\nimport {\n    OwidTable,\n    CoreColumn,\n    isNotErrorValue,\n} from \"@ourworldindata/core-table\"\nimport {\n    autoDetectSeriesStrategy,\n    autoDetectYColumnSlugs,\n    getDefaultFailMessage,\n    getShortNameForEntity,\n    makeSelectionArray,\n} from \"../chart/ChartUtils\"\nimport { ColorScheme } from \"../color/ColorScheme\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { ColorScale, ColorScaleManager } from \"../color/ColorScale\"\nimport { ColorScaleConfig } from \"../color/ColorScaleConfig\"\nimport { OWID_NO_DATA_GRAY } from \"../color/ColorConstants\"\nimport { CategoricalColorAssigner } from \"../color/CategoricalColorAssigner\"\nimport {\n    AnnotationsMap,\n    getAnnotationsMap,\n    getColorKey,\n    getDisplayName,\n    getSeriesName,\n} from \"./LineChartHelpers\"\nimport { FocusArray } from \"../focus/FocusArray\"\nimport { AxisConfig } from \"../axis/AxisConfig\"\nimport { HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\n\nexport class LineChartState implements ChartState, ColorScaleManager {\n    manager: LineChartManager\n\n    colorScale: ColorScale\n    defaultBaseColorScheme = ColorSchemeName.OwidDistinctLines\n    defaultNoDataColor = OWID_NO_DATA_GRAY\n\n    constructor({ manager }: { manager: LineChartManager }) {\n        this.manager = manager\n        this.colorScale = manager.colorScaleOverride ?? new ColorScale(this)\n        makeObservable(this)\n    }\n\n    @computed get inputTable(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed get transformedTableFromGrapher(): OwidTable {\n        return (\n            this.manager.transformedTable ??\n            this.transformTable(this.inputTable)\n        )\n    }\n\n    @computed get transformedTable(): OwidTable {\n        let table = this.transformedTableFromGrapher\n        // The % growth transform cannot be applied in transformTable() because it will filter out\n        // any rows before startHandleTimeBound and change the timeline bounds.\n        const { isRelativeMode, startTime } = this.manager\n        if (isRelativeMode && startTime !== undefined) {\n            table = table.toTotalGrowthForEachColumnComparedToStartTime(\n                startTime,\n                this.manager.yColumnSlugs ?? []\n            )\n        }\n        return table\n    }\n\n    transformTable(table: OwidTable): OwidTable {\n        table = table.filterByEntityNames(\n            this.selectionArray.selectedEntityNames\n        )\n\n        // TODO: remove this filter once we don't have mixed type columns in datasets\n        // Currently we set skipParsing=true on these columns to be backwards-compatible\n        table = table.replaceNonNumericCellsWithErrorValues(this.yColumnSlugs)\n\n        if (this.isLogScale)\n            table = table.replaceNonPositiveCellsForLogScale(this.yColumnSlugs)\n\n        if (this.colorColumnSlug) {\n            table = table\n                // TODO: remove this filter once we don't have mixed type columns in datasets\n                // Currently we set skipParsing=true on these columns to be backwards-compatible\n                .replaceNonNumericCellsWithErrorValues([this.colorColumnSlug])\n                .interpolateColumnWithTolerance(this.colorColumnSlug)\n        }\n\n        // drop all data when the author chose to hide entities with missing data and\n        // at least one of the variables has no data for the current entity\n        if (\n            this.missingDataStrategy === MissingDataStrategy.hide &&\n            table.hasAnyColumnNoValidValue(this.yColumnSlugs)\n        ) {\n            table = table.dropAllRows()\n        }\n\n        return table\n    }\n\n    transformTableForSelection(table: OwidTable): OwidTable {\n        // if entities with partial data are not plotted,\n        // make sure they don't show up in the entity selector\n        if (this.missingDataStrategy === MissingDataStrategy.hide) {\n            table = table\n                .replaceNonNumericCellsWithErrorValues(this.yColumnSlugs)\n                .dropEntitiesThatHaveNoDataInSomeColumn(this.yColumnSlugs)\n        }\n\n        return table\n    }\n\n    @computed get selectionArray(): SelectionArray {\n        return makeSelectionArray(this.manager.selection)\n    }\n\n    @computed get focusArray(): FocusArray {\n        return this.manager.focusArray ?? new FocusArray()\n    }\n\n    @computed get isFocusModeActive(): boolean {\n        return this.focusArray.hasFocusedSeries\n    }\n\n    @computed get yColumnSlugs(): string[] {\n        return autoDetectYColumnSlugs(this.manager)\n    }\n\n    @computed get colorColumnSlug(): string | undefined {\n        return this.manager.colorColumnSlug\n    }\n\n    @computed get yColumns(): CoreColumn[] {\n        return this.yColumnSlugs.map((slug) => this.transformedTable.get(slug))\n    }\n\n    @computed get formatColumn(): CoreColumn {\n        return this.yColumns[0]\n    }\n\n    @computed get colorColumn(): CoreColumn {\n        return this.transformedTable.get(this.colorColumnSlug)\n    }\n\n    @computed get isLogScale(): boolean {\n        return this.manager.yAxisConfig?.scaleType === ScaleType.log\n    }\n\n    @computed get colorScheme(): ColorScheme {\n        return (\n            (this.manager.baseColorScheme\n                ? ColorSchemes.get(this.manager.baseColorScheme)\n                : null) ?? ColorSchemes.get(this.defaultBaseColorScheme)\n        )\n    }\n\n    @computed get colorScaleColumn(): CoreColumn {\n        return (\n            // For faceted charts, we have to get the values of inputTable before it's filtered by\n            // the faceting logic.\n            this.manager.colorScaleColumnOverride ?? // We need to use inputTable in order to get consistent coloring for a variable across\n            // charts, e.g. each continent being assigned to the same color.\n            // inputTable is unfiltered, so it contains every value that exists in the variable.\n            this.inputTable.get(this.colorColumnSlug)\n        )\n    }\n\n    @computed get colorScaleConfig(): ColorScaleConfigInterface | undefined {\n        return (\n            ColorScaleConfig.fromDSL(this.colorColumn.def) ??\n            this.manager.colorScale\n        )\n    }\n\n    @computed get categoricalColorAssigner(): CategoricalColorAssigner {\n        return new CategoricalColorAssigner({\n            colorScheme: this.colorScheme,\n            invertColorScheme: this.manager.invertColorScheme,\n            colorMap:\n                this.seriesStrategy === SeriesStrategy.entity\n                    ? this.inputTable.entityNameColorIndex\n                    : this.inputTable.columnDisplayNameToColorMap,\n            autoColorMapCache: this.manager.seriesColorMap,\n        })\n    }\n\n    @computed get hasColorScale(): boolean {\n        return !this.colorColumn.isMissing\n    }\n\n    getColorScaleColor(value: CoreValueType | undefined): Color {\n        return this.colorScale.getColor(value) ?? DEFAULT_LINE_COLOR\n    }\n\n    @computed get annotationsMap(): AnnotationsMap | undefined {\n        return getAnnotationsMap(this.inputTable, this.yColumnSlugs[0])\n    }\n\n    @computed get hasNoDataBin(): boolean {\n        if (!this.hasColorScale) return false\n        return this.colorColumn.valuesIncludingErrorValues.some(\n            (value) => !isNotErrorValue(value)\n        )\n    }\n\n    @computed get missingDataStrategy(): MissingDataStrategy {\n        return this.manager.missingDataStrategy || MissingDataStrategy.auto\n    }\n\n    @computed get seriesStrategy(): SeriesStrategy {\n        return autoDetectSeriesStrategy(this.manager, true)\n    }\n\n    @computed get series(): readonly LineChartSeries[] {\n        const series = this.yColumns.flatMap((col) =>\n            col.uniqEntityNames.map((entityName): LineChartSeries =>\n                this.constructSingleSeries(entityName, col)\n            )\n        )\n\n        // The lines should be plotted in the order of the selected entities\n        const { selectedEntityNames } = this.selectionArray\n        const entityIndex = new Map(\n            selectedEntityNames.map((name, index) => [name, index])\n        )\n        const sortedSeries = _.sortBy(series, (series) =>\n            entityIndex.get(series.seriesName)\n        )\n\n        return sortedSeries\n    }\n\n    @computed get seriesByName(): Map<SeriesName, LineChartSeries> {\n        return new Map(this.series.map((series) => [series.seriesName, series]))\n    }\n\n    @computed get availableFacetStrategies(): FacetStrategy[] {\n        const strategies: FacetStrategy[] = [FacetStrategy.none]\n\n        if (this.selectionArray.numSelectedEntities > 1)\n            strategies.push(FacetStrategy.entity)\n\n        const numNonProjectionColumns = this.inputTable\n            .getColumns(this.yColumnSlugs)\n            .filter((column) => !column.display?.isProjection).length\n        if (numNonProjectionColumns > 1) strategies.push(FacetStrategy.metric)\n\n        return strategies\n    }\n\n    private constructSingleSeries(\n        entityName: EntityName,\n        column: CoreColumn\n    ): LineChartSeries {\n        const {\n            manager: { canSelectMultipleEntities },\n            transformedTable: { availableEntityNames },\n            seriesStrategy,\n            hasColorScale,\n            colorColumn,\n        } = this\n\n        // Construct the points\n        const timeValues = column.originalTimeColumn.valuesIncludingErrorValues\n        const values = column.valuesIncludingErrorValues\n        const colorValues = colorColumn.valuesIncludingErrorValues\n        // If Y and Color are the same column, we need to get rid of any duplicate rows.\n        // Duplicates occur because Y doesn't have tolerance applied, but Color does.\n        const rowIndexes = _.sortedUniqBy(\n            this.transformedTable.rowIndicesByEntityName\n                .get(entityName)!\n                .filter((index) => _.isNumber(values[index])),\n            (index) => timeValues[index]\n        )\n        const points = rowIndexes.map((index) => {\n            const point: LinePoint = {\n                x: timeValues[index] as number,\n                y: values[index] as number,\n            }\n            if (hasColorScale) {\n                const colorValue = colorValues[index]\n                point.colorValue = isNotErrorValue(colorValue)\n                    ? colorValue\n                    : undefined\n            }\n            return point\n        })\n\n        // Construct series properties\n        const columnName = column.nonEmptyDisplayName\n        const hasMultipleEntitiesSelected = availableEntityNames.length > 1\n        const seriesName = getSeriesName({\n            entityName,\n            columnName,\n            seriesStrategy,\n            hasMultipleEntitiesSelected,\n            allowsMultiEntitySelection: canSelectMultipleEntities,\n        })\n        const shortEntityName = getShortNameForEntity(entityName)\n        const displayName = getDisplayName({\n            entityName: shortEntityName ?? entityName,\n            columnName,\n            seriesStrategy,\n            hasMultipleEntitiesSelected,\n        })\n\n        let seriesColor: Color\n        if (hasColorScale) {\n            const colorValue = R.last(points)?.colorValue\n            seriesColor = this.getColorScaleColor(colorValue)\n        } else {\n            seriesColor = this.categoricalColorAssigner.assign(\n                getColorKey({\n                    entityName,\n                    columnName,\n                    seriesStrategy,\n                    hasMultipleEntitiesSelected,\n                })\n            )\n        }\n\n        return {\n            points,\n            seriesName,\n            entityName,\n            columnName,\n            displayName,\n            isProjection: column.isProjection,\n            plotMarkersOnly: column.display?.plotMarkersOnlyInLineChart,\n            color: seriesColor,\n            focus: this.focusArray.state(seriesName),\n        }\n    }\n\n    toHorizontalAxis(config: AxisConfig): HorizontalAxis {\n        const axis = config.toHorizontalAxis()\n\n        // Update domain\n        axis.updateDomainPreservingUserSettings(\n            this.transformedTable.timeDomainFor(this.yColumnSlugs)\n        )\n\n        axis.scaleType = ScaleType.linear\n        axis.formatColumn = this.inputTable.timeColumn\n        axis.hideFractionalTicks = true\n\n        return axis\n    }\n\n    toVerticalAxis(config: AxisConfig): VerticalAxis {\n        const axis = config.toVerticalAxis()\n\n        // Update domain\n        const yDomain = this.transformedTable.domainFor(this.yColumnSlugs)\n        axis.updateDomainPreservingUserSettings([\n            Math.min(axis.domain[0], yDomain[0]),\n            Math.max(axis.domain[1], yDomain[1]),\n        ])\n\n        // All y axis points are integral, don't show fractional ticks in that case\n        axis.hideFractionalTicks = this.yColumns.every(\n            (yColumn) => yColumn.isAllIntegers\n        )\n\n        // Line charts don't have a y-axis label\n        axis.label = \"\"\n\n        axis.formatColumn = this.formatColumn\n\n        return axis\n    }\n\n    @computed get errorInfo(): ChartErrorInfo {\n        const message = getDefaultFailMessage(this.manager)\n        if (message) return { reason: message }\n\n        const { entityTypePlural = \"entities\" } = this.manager\n        if (!this.series.length)\n            return {\n                reason: `No data for the selected ${entityTypePlural}`,\n            }\n        return { reason: \"\" }\n    }\n}\n","import {\n    CoreColumn,\n    getOriginalTimeColumnSlug,\n    OwidTable,\n} from \"@ourworldindata/core-table\"\nimport {\n    ColumnSlug,\n    Time,\n    TimeInterval,\n    TimeRange,\n    ToleranceStrategy,\n} from \"@ourworldindata/types\"\nimport { isSubYearly } from \"@ourworldindata/utils\"\nimport { formatTimeSpan } from \"./ChartUtils\"\n\n/**\n * The notice a chart should show, if it has a tolerance worth stating and any\n * value it plots is actually filled in from another time.\n */\nexport function makeToleranceNotice({\n    inputTable,\n    transformedTable,\n    columns,\n    timeTolerance,\n    toleranceStrategy,\n}: {\n    inputTable: OwidTable\n    transformedTable: OwidTable\n    columns: CoreColumn[]\n    timeTolerance?: number\n    toleranceStrategy?: ToleranceStrategy\n}): string | undefined {\n    const configuredTolerance =\n        timeTolerance ?? getMaxConfiguredTolerance(columns)\n    if (!configuredTolerance) return undefined\n\n    const appliedColumns = columnsWithToleranceApplied(\n        transformedTable,\n        columns\n    )\n    if (!appliedColumns.length) return undefined\n\n    // Only take into account the tolerance configured on the columns\n    // that actually had a value filled in from another time\n    const appliedTolerance = getMaxConfiguredTolerance(appliedColumns)\n    const statedTolerance =\n        timeTolerance ?? (appliedTolerance || configuredTolerance)\n\n    const timeRange = inputTable.timeRange\n    const appliedColumnsTimeRange = getTimeRangeOfColumns(\n        inputTable,\n        appliedColumns.map((column) => column.slug)\n    )\n\n    return formatToleranceNotice({\n        timeColumn: transformedTable.timeColumn,\n        timeRange,\n        appliedColumnsTimeRange,\n        timeTolerance: statedTolerance,\n        toleranceStrategy,\n    })\n}\n\nexport function formatToleranceNotice({\n    timeColumn,\n    timeTolerance,\n    timeRange,\n    appliedColumnsTimeRange,\n    toleranceStrategy = ToleranceStrategy.closest,\n}: {\n    timeColumn: CoreColumn\n    timeTolerance: number\n    timeRange: TimeRange | undefined\n    appliedColumnsTimeRange?: TimeRange\n    toleranceStrategy?: ToleranceStrategy\n}): string | undefined {\n    if (!timeTolerance || timeColumn.isMissing) return undefined\n\n    // Without times there's nothing tolerance could have substituted\n    if (!timeRange) return undefined\n\n    // No target time for charts that plot a time range\n    const targetTime =\n        timeColumn.uniqTimesAsc.length === 1\n            ? timeColumn.uniqTimesAsc[0]\n            : undefined\n\n    const [firstTime, lastTime] = timeRange\n\n    // Tolerance can't be applied if the chart only has a single time\n    if (firstTime === lastTime) return undefined\n\n    // Detailed notice for a chart with yearly data that plots a single year,\n    // all other cases (time range plotted, sub-yearly data) use a simpler notice\n    if (targetTime !== undefined && !isSubYearly(timeColumn.timeInterval)) {\n        // A one-directional strategy reaches to one side of the time shown only\n        const [firstAppliedTime, lastAppliedTime] =\n            appliedColumnsTimeRange ?? timeRange\n        const from =\n            toleranceStrategy === ToleranceStrategy.forwards\n                ? targetTime\n                : Math.max(targetTime - timeTolerance, firstAppliedTime)\n        const to =\n            toleranceStrategy === ToleranceStrategy.backwards\n                ? targetTime\n                : Math.min(targetTime + timeTolerance, lastAppliedTime)\n\n        // The target year has no data, so a window ending on it stops a year short\n        const start = from === targetTime ? from + 1 : from\n        const end = to === targetTime ? to - 1 : to\n\n        // A one-directional window at the edge of the data reaches nothing\n        if (start > end) return undefined\n\n        const format = (time: Time): string => timeColumn.formatTime(time)\n        const window =\n            start === end\n                ? format(start)\n                : `the closest year between ${format(start)} and ${format(end)}`\n\n        return `Where data for ${format(targetTime)} is unavailable, the value from ${window} is shown instead.`\n    } else {\n        // \"closest\", plus the direction where the tolerance only looks one way\n        const closest =\n            toleranceStrategy === ToleranceStrategy.backwards\n                ? \"closest earlier\"\n                : toleranceStrategy === ToleranceStrategy.forwards\n                  ? \"closest later\"\n                  : \"closest\"\n\n        // A tolerance that spans the whole chart isn't a window, it just means\n        // \"whenever there is data\". Indicators configured that way use a sentinel\n        // like 9999, which would otherwise read as \"within 9999 days\"\n        const isUnbounded = timeTolerance >= lastTime - firstTime\n        if (isUnbounded)\n            return `Where data is unavailable, the ${closest} value is shown instead.`\n\n        const toleranceUnit = isSubYearly(timeColumn.timeInterval)\n            ? TimeInterval.Day\n            : TimeInterval.Year\n        const tolerance = formatTimeSpan(timeTolerance, toleranceUnit)\n\n        return `Where data is unavailable, the ${closest} value within ${tolerance} is shown instead.`\n    }\n}\n\n/** The largest tolerance configured on any of the given columns */\nfunction getMaxConfiguredTolerance(columns: CoreColumn[]): number {\n    return Math.max(0, ...columns.map((column) => column.tolerance))\n}\n\n/**\n * Of the given columns, those with a value that is filled in from a different\n * time than the one it's shown for. Typically called with a `transformedTable`.\n */\nfunction columnsWithToleranceApplied(\n    table: OwidTable,\n    columns: CoreColumn[]\n): CoreColumn[] {\n    const { timeColumn } = table\n    if (timeColumn.isMissing) return []\n\n    const times = timeColumn.valuesIncludingErrorValues\n\n    return columns.filter((column) => {\n        const { slug } = column\n        const originalTimeSlug = getOriginalTimeColumnSlug(table, slug)\n        if (!table.has(slug) || !table.has(originalTimeSlug)) return false\n\n        const originalTimes =\n            table.get(originalTimeSlug).valuesIncludingErrorValues\n\n        for (let i = 0; i < times.length; i++) {\n            if (times[i] !== originalTimes[i]) return true\n        }\n\n        return false\n    })\n}\n\n/** The first and last time any of the given columns has data for in `table` */\nfunction getTimeRangeOfColumns(\n    table: OwidTable,\n    slugs: ColumnSlug[]\n): TimeRange | undefined {\n    const tableColumns = slugs\n        .filter((slug) => table.has(slug))\n        .map((slug) => table.get(slug))\n    if (!tableColumns.length) return undefined\n\n    return [\n        Math.min(...tableColumns.map((column) => column.minTime)),\n        Math.max(...tableColumns.map((column) => column.maxTime)),\n    ]\n}\n","import { computed, makeObservable } from \"mobx\"\nimport { ChartState } from \"../chart/ChartInterface\"\nimport {\n    SlopeChartManager,\n    RawSlopeChartSeries,\n    SlopeChartSeries,\n} from \"./SlopeChartConstants\"\nimport { OwidTable, CoreColumn } from \"@ourworldindata/core-table\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { FocusArray } from \"../focus/FocusArray\"\nimport {\n    ColumnSlug,\n    ScaleType,\n    MissingDataStrategy,\n    SeriesStrategy,\n    FacetStrategy,\n    Time,\n    EntityName,\n    ColorSchemeName,\n    ChartErrorInfo,\n} from \"@ourworldindata/types\"\nimport {\n    autoDetectSeriesStrategy,\n    autoDetectYColumnSlugs,\n    getDefaultFailMessage,\n    getShortNameForEntity,\n    isToleranceDistanceValid,\n    makeSelectionArray,\n} from \"../chart/ChartUtils\"\nimport { ColorScheme } from \"../color/ColorScheme\"\nimport { ColorSchemes } from \"../color/ColorSchemes\"\nimport { CategoricalColorAssigner } from \"../color/CategoricalColorAssigner\"\nimport {\n    AnnotationsMap,\n    getAnnotationsForSeries,\n    getAnnotationsMap,\n    getColorKey,\n    getDisplayName,\n    getSeriesName,\n} from \"../lineCharts/LineChartHelpers\"\nimport { domainExtent } from \"@ourworldindata/utils\"\nimport { AxisConfig } from \"../axis/AxisConfig\"\nimport { HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\nimport { makeToleranceNotice } from \"../chart/ToleranceNotice\"\n\nexport class SlopeChartState implements ChartState {\n    manager: SlopeChartManager\n\n    defaultBaseColorScheme = ColorSchemeName.OwidDistinctLines\n\n    constructor({ manager }: { manager: SlopeChartManager }) {\n        this.manager = manager\n        makeObservable(this)\n    }\n\n    @computed get inputTable(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed get transformedTableFromGrapher(): OwidTable {\n        return (\n            this.manager.transformedTable ??\n            this.transformTable(this.inputTable)\n        )\n    }\n\n    @computed get transformedTable(): OwidTable {\n        let table = this.transformedTableFromGrapher\n        // The % growth transform cannot be applied in transformTable() because it will filter out\n        // any rows before startTime and change the timeline bounds.\n        const { startTime } = this.manager\n        if (this.isRelativeMode && startTime !== undefined) {\n            table = table.toTotalGrowthForEachColumnComparedToStartTime(\n                startTime,\n                this.yColumnSlugs ?? []\n            )\n        }\n        return table\n    }\n\n    transformTable(table: OwidTable) {\n        table = table.filterByEntityNames(\n            this.selectionArray.selectedEntityNames\n        )\n\n        // TODO: remove this filter once we don't have mixed type columns in datasets\n        table = table.replaceNonNumericCellsWithErrorValues(this.yColumnSlugs)\n\n        if (this.isLogScale)\n            table = table.replaceNonPositiveCellsForLogScale(this.yColumnSlugs)\n\n        this.yColumnSlugs.forEach((slug) => {\n            table = table.interpolateColumnWithTolerance(slug)\n        })\n\n        return table\n    }\n\n    transformTableForSelection(table: OwidTable): OwidTable {\n        table = table.replaceNonNumericCellsWithErrorValues(this.yColumnSlugs)\n\n        this.yColumnSlugs.forEach((slug) => {\n            table = table.interpolateColumnWithTolerance(slug)\n        })\n\n        // if time selection is disabled, then filter all entities that\n        // don't have data for the current time period\n        if (!this.manager.hasTimeline && this.startTime !== this.endTime) {\n            table = table\n                .filterByTargetTimes([this.startTime, this.endTime])\n                .dropEntitiesThatHaveSomeMissingOrErrorValueInAllColumns(\n                    this.yColumnSlugs\n                )\n        }\n\n        // if entities with partial data are not plotted,\n        // make sure they don't show up in the entity selector\n        if (this.missingDataStrategy === MissingDataStrategy.hide) {\n            table = table.dropEntitiesThatHaveNoDataInSomeColumn(\n                this.yColumnSlugs\n            )\n        }\n\n        return table\n    }\n\n    @computed get selectionArray(): SelectionArray {\n        return makeSelectionArray(this.manager.selection)\n    }\n\n    @computed get focusArray(): FocusArray {\n        return this.manager.focusArray ?? new FocusArray()\n    }\n\n    @computed get isFocusModeActive(): boolean {\n        return this.focusArray.hasFocusedSeries\n    }\n\n    @computed get yColumnSlugs(): ColumnSlug[] {\n        return autoDetectYColumnSlugs(this.manager)\n    }\n\n    @computed get yColumns(): CoreColumn[] {\n        return this.yColumnSlugs.map((slug) => this.transformedTable.get(slug))\n    }\n\n    @computed get formatColumn(): CoreColumn {\n        return this.yColumns[0]\n    }\n\n    @computed get isRelativeMode(): boolean {\n        return !!this.manager.isRelativeMode\n    }\n\n    @computed get isLogScale(): boolean {\n        return this.manager.yAxisConfig?.scaleType === ScaleType.log\n    }\n\n    @computed get missingDataStrategy(): MissingDataStrategy {\n        return this.manager.missingDataStrategy || MissingDataStrategy.auto\n    }\n\n    @computed get yScaleType(): ScaleType {\n        return this.manager.yAxisConfig?.scaleType ?? ScaleType.linear\n    }\n\n    @computed get colorScheme(): ColorScheme {\n        return (\n            (this.manager.baseColorScheme\n                ? ColorSchemes.get(this.manager.baseColorScheme)\n                : null) ?? ColorSchemes.get(this.defaultBaseColorScheme)\n        )\n    }\n\n    @computed get startTime(): Time {\n        return this.transformedTable.minTime ?? 0\n    }\n\n    @computed get endTime(): Time {\n        return this.transformedTable.maxTime ?? 0\n    }\n\n    @computed get seriesStrategy(): SeriesStrategy {\n        return autoDetectSeriesStrategy(this.manager, true)\n    }\n\n    @computed get availableFacetStrategies(): FacetStrategy[] {\n        const strategies: FacetStrategy[] = [FacetStrategy.none]\n\n        if (this.selectionArray.numSelectedEntities > 1)\n            strategies.push(FacetStrategy.entity)\n\n        if (this.yColumnSlugs.length > 1) strategies.push(FacetStrategy.metric)\n\n        return strategies\n    }\n\n    @computed get categoricalColorAssigner(): CategoricalColorAssigner {\n        return new CategoricalColorAssigner({\n            colorScheme: this.colorScheme,\n            invertColorScheme: this.manager.invertColorScheme,\n            colorMap:\n                this.seriesStrategy === SeriesStrategy.entity\n                    ? this.inputTable.entityNameColorIndex\n                    : this.inputTable.columnDisplayNameToColorMap,\n            autoColorMapCache: this.manager.seriesColorMap,\n        })\n    }\n\n    @computed get annotationsMap(): AnnotationsMap | undefined {\n        return getAnnotationsMap(this.inputTable, this.yColumnSlugs[0])\n    }\n\n    private constructSingleSeries(\n        entityName: EntityName,\n        column: CoreColumn\n    ): RawSlopeChartSeries {\n        const { startTime, endTime, seriesStrategy } = this\n        const { canSelectMultipleEntities } = this.manager\n        const { availableEntityNames } = this.transformedTable\n\n        const columnName = column.nonEmptyDisplayName\n        const hasMultipleEntitiesSelected = availableEntityNames.length > 1\n        const seriesName = getSeriesName({\n            entityName,\n            columnName,\n            seriesStrategy,\n            hasMultipleEntitiesSelected,\n            allowsMultiEntitySelection: canSelectMultipleEntities,\n        })\n        const shortEntityName = getShortNameForEntity(entityName)\n        const displayName = getDisplayName({\n            entityName: shortEntityName ?? entityName,\n            columnName,\n            seriesStrategy,\n            hasMultipleEntitiesSelected,\n        })\n\n        const owidRowByTime = column.owidRowByEntityNameAndTime.get(entityName)\n        const start = owidRowByTime?.get(startTime)\n        const end = owidRowByTime?.get(endTime)\n\n        const colorKey = getColorKey({\n            entityName,\n            columnName,\n            seriesStrategy,\n            hasMultipleEntitiesSelected,\n        })\n        const color = this.categoricalColorAssigner.assign(colorKey)\n\n        const annotation = getAnnotationsForSeries(\n            this.annotationsMap,\n            seriesName\n        )\n\n        const focus = this.focusArray.state(seriesName)\n\n        return {\n            column,\n            seriesName,\n            entityName,\n            displayName,\n            color,\n            start,\n            end,\n            annotation,\n            focus,\n        }\n    }\n\n    isSeriesValid(series: RawSlopeChartSeries): series is SlopeChartSeries {\n        const {\n            start,\n            end,\n            column: { tolerance },\n        } = series\n\n        // if the start or end value is missing, we can't draw the slope\n        if (start?.value === undefined || end?.value === undefined) return false\n\n        return isToleranceDistanceValid({ start, end, tolerance })\n    }\n\n    // Usually we drop rows with missing data in the transformTable function.\n    // But if we did that for slope charts, we wouldn't know whether a slope\n    // has been dropped because it actually had no data or a sibling slope had\n    // no data. But we need that information for the \"No data\" section. That's\n    // why the filtering happens here, so that the noDataSeries can be populated\n    // correctly.\n    private shouldSeriesBePlotted(\n        series: RawSlopeChartSeries\n    ): series is SlopeChartSeries {\n        if (!this.isSeriesValid(series)) return false\n\n        // when the missing data strategy is set to \"hide\", we might\n        // choose not to plot a valid series\n        if (\n            this.seriesStrategy === SeriesStrategy.column &&\n            this.missingDataStrategy === MissingDataStrategy.hide\n        ) {\n            const allSeriesForEntity = this.rawSeriesByEntityName.get(\n                series.entityName\n            )\n            return !!allSeriesForEntity?.every((series) =>\n                this.isSeriesValid(series)\n            )\n        }\n\n        return true\n    }\n\n    @computed get rawSeries(): RawSlopeChartSeries[] {\n        return this.yColumns.flatMap((column) =>\n            this.selectionArray.selectedEntityNames.map((entityName) =>\n                this.constructSingleSeries(entityName, column)\n            )\n        )\n    }\n\n    @computed get rawSeriesByEntityName(): Map<\n        EntityName,\n        RawSlopeChartSeries[]\n    > {\n        return Map.groupBy(this.rawSeries, (series) => series.entityName)\n    }\n\n    @computed get series(): SlopeChartSeries[] {\n        return this.rawSeries.filter((series) =>\n            this.shouldSeriesBePlotted(series)\n        )\n    }\n\n    @computed get allYValues(): number[] {\n        return this.series.flatMap((series) => [\n            series.start.value,\n            series.end.value,\n        ])\n    }\n\n    @computed get toleranceNotice(): string | undefined {\n        return makeToleranceNotice({\n            inputTable: this.inputTable,\n            transformedTable: this.transformedTable,\n            columns: this.yColumns,\n        })\n    }\n\n    @computed get xDomain(): [number, number] {\n        return [this.startTime, this.endTime]\n    }\n\n    @computed get yDomainDefault(): [number, number] {\n        const defaultDomain: [number, number] = [Infinity, -Infinity]\n        return domainExtent(this.allYValues, this.yScaleType) ?? defaultDomain\n    }\n\n    toVerticalAxis(\n        config: AxisConfig,\n        {\n            yDomain,\n            yRange,\n        }: { yDomain: [number, number]; yRange: [number, number] }\n    ): VerticalAxis {\n        const axis = config.toVerticalAxis()\n        axis.domain = yDomain\n        axis.range = yRange\n        axis.formatColumn = this.yColumns[0]\n        axis.label = \"\"\n        return axis\n    }\n\n    toHorizontalAxis(\n        config: AxisConfig,\n        { xRange }: { xRange: [number, number] }\n    ): HorizontalAxis {\n        const axis = config.toHorizontalAxis()\n        axis.domain = this.xDomain\n        axis.range = xRange\n        axis.formatColumn = this.inputTable.timeColumn\n        return axis\n    }\n\n    @computed get errorInfo(): ChartErrorInfo {\n        const message = getDefaultFailMessage(this.manager)\n        if (message) return { reason: message }\n\n        const { entityTypePlural = \"entities\" } = this.manager\n        if (this.series.length === 0)\n            return {\n                reason: `No data for the selected ${entityTypePlural}`,\n            }\n        return { reason: \"\" }\n    }\n}\n","import { ChartManager } from \"../chart/ChartManager\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\nimport { ChartSeries } from \"../chart/ChartInterface\"\nimport {\n    Color,\n    CoreValueType,\n    ProjectionColumnInfo,\n    SortBy,\n    Time,\n} from \"@ourworldindata/types\"\nimport { TextWrap } from \"@ourworldindata/components\"\nimport { InteractionState } from \"../interaction/InteractionState.js\"\nimport { ColumnSlug } from \"@ourworldindata/utils\"\nimport { SeriesLabelState } from \"../seriesLabel/SeriesLabelState.js\"\nimport { Emphasis } from \"../interaction/Emphasis.js\"\nimport {\n    GRAPHER_AREA_OPACITY_DEFAULT,\n    GRAPHER_AREA_OPACITY_HIGHLIGHTED,\n    GRAPHER_AREA_OPACITY_MUTED,\n} from \"../core/GrapherConstants\"\n\nexport interface DiscreteBarSeries extends ChartSeries {\n    color: Color\n    entityName: string\n    shortEntityName?: string\n    yColumn: CoreColumn\n    value: number\n    time: Time\n    colorValue?: CoreValueType\n    annotation?: string\n    focus: InteractionState\n    isProjection?: boolean\n}\n\nexport interface SizedDiscreteBarSeries extends DiscreteBarSeries {\n    label: SeriesLabelState\n    annotationTextWrap?: TextWrap\n}\n\nexport interface PlacedDiscreteBarSeries extends SizedDiscreteBarSeries {\n    // data bar\n    barX: number\n    barY: number\n    barWidth: number\n\n    // entity label, annotation, and value label positions\n    entityLabelX: number\n    entityLabelY: number\n    annotationY?: number\n    valueLabelX: number\n}\n\nexport interface RenderDiscreteBarSeries extends PlacedDiscreteBarSeries {\n    emphasis: Emphasis\n}\n\ninterface DiscreteBarStyle {\n    barOpacity: number\n    labelOpacity: number\n}\n\nconst DEFAULT_DISCRETE_BAR_STYLE: DiscreteBarStyle = {\n    barOpacity: GRAPHER_AREA_OPACITY_DEFAULT,\n    labelOpacity: 1,\n}\n\nexport const DISCRETE_BAR_STYLE: Record<Emphasis, DiscreteBarStyle> = {\n    [Emphasis.Default]: DEFAULT_DISCRETE_BAR_STYLE,\n    [Emphasis.Elevated]: DEFAULT_DISCRETE_BAR_STYLE,\n    [Emphasis.Highlighted]: {\n        barOpacity: GRAPHER_AREA_OPACITY_HIGHLIGHTED,\n        labelOpacity: 1,\n    },\n    [Emphasis.Muted]: {\n        barOpacity: GRAPHER_AREA_OPACITY_MUTED,\n        labelOpacity: 0.3,\n    },\n}\n\nexport interface DiscreteBarChartManager extends ChartManager {\n    showYearLabels?: boolean\n    endTime?: Time\n    hasLineChart?: boolean // used to pick color scheme\n    hasSlopeChart?: boolean // used to pick color scheme\n    projectionColumnInfoBySlug?: Map<ColumnSlug, ProjectionColumnInfo>\n}\n\nexport interface DiscreteBarItem {\n    yColumn: CoreColumn\n    seriesName: string\n    value: number\n    time: number\n    colorValue?: CoreValueType\n    color?: Color\n    isProjection?: boolean\n}\n\n/**\n * Describes how Y columns are handled.\n *\n * - \"independent\": Each Y column is treated independently and plotted as its own series.\n * - \"combined\": A historical and projection column pair are merged into a single\n *   series, with projections indicated appropriately.\n */\nexport type YColumnMode =\n    | { type: \"independent\"; slugs: ColumnSlug[] }\n    | { type: \"combined\"; slugs: ColumnSlug[]; info: ProjectionColumnInfo }\n\nexport const BACKGROUND_COLOR = \"#fff\"\nexport const BAR_SPACING_FACTOR = 0.35\n\nexport const DISCRETE_BAR_SORT_KEYS = [\n    SortBy.custom,\n    SortBy.entityName,\n    SortBy.total,\n] as const\nexport type DiscreteBarSortKey = (typeof DISCRETE_BAR_SORT_KEYS)[number]\n","import * as _ from \"lodash-es\"\nimport { computed, makeObservable } from \"mobx\"\nimport { match } from \"ts-pattern\"\nimport { ChartState } from \"../chart/ChartInterface\"\nimport {\n    DISCRETE_BAR_SORT_KEYS,\n    DiscreteBarChartManager,\n    DiscreteBarItem,\n    DiscreteBarSeries,\n    DiscreteBarSortKey,\n    YColumnMode,\n} from \"./DiscreteBarChartConstants\"\nimport {\n    CoreColumn,\n    isNotErrorValue,\n    OwidTable,\n} from \"@ourworldindata/core-table\"\nimport { ColorScale, ColorScaleManager } from \"../color/ColorScale\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport {\n    sortByConfig,\n    SortKey,\n    keepInputOrder,\n    autoDetectSeriesStrategy,\n    autoDetectYColumnSlugs,\n    combineHistoricalAndProjectionColumns,\n    getDefaultFailMessage,\n    getShortNameForEntity,\n    makeSelectionArray,\n} from \"../chart/ChartUtils\"\nimport {\n    AnnotationsMap,\n    getAnnotationsForSeries,\n    getAnnotationsMap,\n} from \"../lineCharts/LineChartHelpers\"\nimport {\n    ChartErrorInfo,\n    ColorScaleConfigInterface,\n    ColorSchemeName,\n    FacetStrategy,\n    ProjectionColumnInfo,\n    SeriesStrategy,\n    SortBy,\n    SortConfig,\n} from \"@ourworldindata/types\"\nimport { OWID_ERROR_COLOR, OWID_NO_DATA_GRAY } from \"../color/ColorConstants\"\nimport { ColorScheme } from \"../color/ColorScheme\"\nimport { ColorSchemes } from \"../color/ColorSchemes\"\nimport { ColorScaleConfig } from \"../color/ColorScaleConfig\"\nimport { FocusArray } from \"../focus/FocusArray\"\n\nexport class DiscreteBarChartState implements ChartState, ColorScaleManager {\n    manager: DiscreteBarChartManager\n\n    colorScale: ColorScale\n    defaultBaseColorScheme = ColorSchemeName.SingleColorDenim\n    defaultNoDataColor = OWID_NO_DATA_GRAY\n\n    constructor({ manager }: { manager: DiscreteBarChartManager }) {\n        this.manager = manager\n        this.colorScale = manager.colorScaleOverride ?? new ColorScale(this)\n        makeObservable(this)\n    }\n\n    @computed get inputTable(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed get transformedTable(): OwidTable {\n        return (\n            this.manager.transformedTable ??\n            this.transformTable(this.inputTable)\n        )\n    }\n\n    transformTable(table: OwidTable): OwidTable {\n        if (!this.yColumnSlugs.length) return table\n\n        table = table.filterByEntityNames(\n            this.selectionArray.selectedEntityNames\n        )\n\n        // Combine historical and projected columns if needed\n        table = match(this.yColumnMode)\n            .with({ type: \"independent\" }, () =>\n                this.transformTableForIndependentColumns(table)\n            )\n            .with({ type: \"combined\" }, ({ info }) =>\n                this.transformTableForCombinedColumn(table, info)\n            )\n            .exhaustive()\n\n        if (this.colorColumnSlug) {\n            table = table\n                // TODO: remove this filter once we don't have mixed type columns in datasets\n                // Currently we set skipParsing=true on these columns to be backwards-compatible\n                .replaceNonNumericCellsWithErrorValues([this.colorColumnSlug])\n                .interpolateColumnWithTolerance(this.colorColumnSlug)\n        }\n\n        return table\n    }\n\n    private transformTableForIndependentColumns(table: OwidTable): OwidTable {\n        // TODO: remove this filter once we don't have mixed type columns in datasets\n        table = table.replaceNonNumericCellsWithErrorValues(this.yColumnSlugs)\n\n        table = table.dropRowsWithErrorValuesForAllColumns(this.yColumnSlugs)\n\n        this.yColumnSlugs.forEach((slug) => {\n            table = table.interpolateColumnWithTolerance(slug)\n        })\n\n        return table\n    }\n\n    private transformTableForCombinedColumn(\n        table: OwidTable,\n        info: ProjectionColumnInfo\n    ): OwidTable {\n        const { historicalSlug, projectedSlug, combinedSlug } = info\n\n        // TODO: remove this filter once we don't have mixed type columns in datasets\n        table = table.replaceNonNumericCellsWithErrorValues([\n            historicalSlug,\n            projectedSlug,\n        ])\n\n        // Interpolate both columns separately\n        table = table\n            .interpolateColumnWithTolerance(projectedSlug)\n            .interpolateColumnWithTolerance(historicalSlug)\n\n        table = combineHistoricalAndProjectionColumns(table, info, {\n            shouldAddIsProjectionColumn: true,\n        })\n\n        // Drop rows with error values for the combined column\n        table = table.dropRowsWithErrorValuesForColumn(combinedSlug)\n\n        return table\n    }\n\n    @computed get selectionArray(): SelectionArray {\n        return makeSelectionArray(this.manager.selection)\n    }\n\n    @computed get focusArray(): FocusArray {\n        return this.manager.focusArray ?? new FocusArray()\n    }\n\n    /**\n     * Determines how Y columns should be processed for this chart.\n     *\n     * Returns \"combined\" mode when there is exactly one historical column and\n     * one projection column that form a valid pair. In this mode, they are merged\n     * into a single series.\n     *\n     * Falls back to \"independent\" mode otherwise, where each Y column is treated as\n     * an independent series.\n     */\n    @computed get yColumnMode(): YColumnMode {\n        const { projectionColumnInfoBySlug } = this.manager\n\n        const ySlugs = autoDetectYColumnSlugs(this.manager)\n\n        if (!projectionColumnInfoBySlug)\n            return { type: \"independent\", slugs: ySlugs }\n\n        const projectionSlugs = ySlugs.filter(\n            (slug) => this.inputTable.get(slug).isProjection\n        )\n\n        // We only support combining projected and historical data\n        // if there is exactly one column pair to combine\n        if (ySlugs.length !== 2 || projectionSlugs.length !== 1)\n            return { type: \"independent\", slugs: ySlugs }\n\n        // Get info for the projection column\n        const projectionSlug = projectionSlugs[0]\n        const info = projectionColumnInfoBySlug.get(projectionSlug)\n        if (!info) return { type: \"independent\", slugs: ySlugs }\n\n        // Verify the other slug is the matching historical column\n        const otherSlug = ySlugs.find((slug) => slug !== projectionSlug)\n        if (otherSlug !== info.historicalSlug)\n            return { type: \"independent\", slugs: ySlugs }\n\n        return { type: \"combined\", slugs: [info.combinedSlug], info }\n    }\n\n    @computed get yColumnSlugs(): string[] {\n        return this.yColumnMode.slugs\n    }\n\n    @computed get colorColumnSlug(): string | undefined {\n        return this.manager.colorColumnSlug\n    }\n\n    @computed get colorColumn(): CoreColumn {\n        return this.transformedTable.get(this.colorColumnSlug)\n    }\n\n    @computed get yColumns(): CoreColumn[] {\n        return this.transformedTable.getColumns(this.yColumnSlugs)\n    }\n\n    @computed get formatColumn(): CoreColumn {\n        return this.yColumns[0]\n    }\n\n    @computed get annotationsMap(): AnnotationsMap | undefined {\n        const yColumnSlug =\n            this.yColumnMode.type === \"combined\"\n                ? this.yColumnMode.info.historicalSlug\n                : this.yColumnSlugs[0]\n        if (!yColumnSlug) return undefined\n        return getAnnotationsMap(this.inputTable, yColumnSlug)\n    }\n\n    @computed get hasProjectedData(): boolean {\n        return this.series.some((series) => series.isProjection)\n    }\n\n    /**\n     * The column that indicates whether each row is a projection.\n     * Only set when in combined mode.\n     */\n    @computed private get isProjectionColumn(): CoreColumn | undefined {\n        if (this.yColumnMode.type !== \"combined\") return undefined\n        return this.transformedTable.get(\n            this.yColumnMode.info.slugForIsProjectionColumn\n        )\n    }\n\n    @computed private get colorScheme(): ColorScheme {\n        const defaultColorScheme = this.defaultBaseColorScheme\n        const colorScheme = this.manager.baseColorScheme ?? defaultColorScheme\n\n        // Don't reuse the line chart's color scheme (typically owid-distinct)\n        // and use the default color scheme instead (single color)\n        return this.manager.hasLineChart || this.manager.hasSlopeChart\n            ? ColorSchemes.get(defaultColorScheme)\n            : ColorSchemes.get(colorScheme)\n    }\n\n    @computed get colorScaleColumn(): CoreColumn {\n        return (\n            // For faceted charts, we have to get the values of inputTable before it's filtered by\n            // the faceting logic.\n            this.manager.colorScaleColumnOverride ?? // We need to use inputTable in order to get consistent coloring for a variable across\n            // charts, e.g. each continent being assigned to the same color.\n            // inputTable is unfiltered, so it contains every value that exists in the variable.\n            this.inputTable.get(this.colorColumnSlug)\n        )\n    }\n\n    @computed get colorScaleConfig(): ColorScaleConfigInterface | undefined {\n        return (\n            ColorScaleConfig.fromDSL(this.colorColumn.def) ??\n            this.manager.colorScale\n        )\n    }\n\n    @computed get hasColorScale(): boolean {\n        return !this.colorColumn.isMissing\n    }\n\n    @computed get hasNoDataBin(): boolean {\n        if (!this.hasColorScale) return false\n        return this.colorColumn.valuesIncludingErrorValues.some(\n            (value) => !isNotErrorValue(value)\n        )\n    }\n\n    @computed get seriesStrategy(): SeriesStrategy {\n        const autoStrategy = autoDetectSeriesStrategy(this.manager, true)\n        // TODO this is an inconsistency between LineChart and DiscreteBar.\n        // We should probably make it consistent at some point.\n        if (\n            autoStrategy === SeriesStrategy.column &&\n            this.selectionArray.numSelectedEntities > 1\n        ) {\n            return SeriesStrategy.entity\n        }\n        if (\n            autoStrategy === SeriesStrategy.entity &&\n            this.selectionArray.numSelectedEntities === 1 &&\n            this.yColumns.length > 1\n        ) {\n            return SeriesStrategy.column\n        }\n        return autoStrategy\n    }\n\n    private constructSeries(\n        col: CoreColumn,\n        indexes: number[]\n    ): DiscreteBarItem[] {\n        const {\n            transformedTable,\n            colorColumn,\n            hasColorScale,\n            isProjectionColumn,\n        } = this\n        const values = col.valuesIncludingErrorValues\n        const originalTimes = col.originalTimeColumn.valuesIncludingErrorValues\n        const entityNames =\n            transformedTable.entityNameColumn.valuesIncludingErrorValues\n        const colorValues = colorColumn.valuesIncludingErrorValues\n        const isProjectionValues =\n            isProjectionColumn?.valuesIncludingErrorValues\n        return indexes.map((index): DiscreteBarItem => {\n            const isColumnStrategy =\n                this.seriesStrategy === SeriesStrategy.column\n            const seriesName = isColumnStrategy\n                ? col.displayName\n                : (entityNames[index] as string)\n            const colorValue = isNotErrorValue(colorValues[index])\n                ? colorValues[index]\n                : undefined\n            const color = hasColorScale\n                ? this.colorScale.getColor(colorValue)\n                : isColumnStrategy\n                  ? col.def.color\n                  : transformedTable.getColorForEntityName(\n                        entityNames[index] as string\n                    )\n            const isProjection = isProjectionValues\n                ? (isProjectionValues[index] as boolean)\n                : col.isProjection\n            return {\n                yColumn: col,\n                seriesName,\n                value: values[index] as number,\n                time: originalTimes[index] as number,\n                colorValue,\n                color,\n                isProjection,\n            }\n        })\n    }\n\n    @computed get columnsAsSeries(): DiscreteBarItem[] {\n        return this.yColumns.flatMap((col) =>\n            this.constructSeries(col, col.validRowIndices.slice(0, 1))\n        )\n    }\n\n    @computed get entitiesAsSeries(): DiscreteBarItem[] {\n        const col = this.yColumns[0]\n        return this.constructSeries(col, col.validRowIndices)\n    }\n\n    @computed get sortConfig(): SortConfig {\n        return this.manager.sortConfig ?? {}\n    }\n\n    @computed get sortedRawSeries(): DiscreteBarItem[] {\n        const raw =\n            this.seriesStrategy === SeriesStrategy.entity\n                ? this.entitiesAsSeries\n                : this.columnsAsSeries\n\n        const keyFns: Record<\n            DiscreteBarSortKey | SortBy.column,\n            SortKey<DiscreteBarItem>\n        > = {\n            [SortBy.custom]:\n                this.seriesStrategy === SeriesStrategy.entity\n                    ? (item): number =>\n                          this.selectionArray.selectedEntityNames.indexOf(\n                              item.seriesName\n                          )\n                    : keepInputOrder,\n            [SortBy.entityName]: (item): string => item.seriesName,\n            [SortBy.total]: (item): number => item.value,\n            // We only have one yColumn, so 'column' is the same as 'total'\n            // (keep for backwards compatibility)\n            [SortBy.column]: (item): number => item.value,\n        }\n\n        return sortByConfig(raw, this.sortConfig, keyFns)\n    }\n\n    @computed get availableSortKeys(): DiscreteBarSortKey[] {\n        return [...DISCRETE_BAR_SORT_KEYS]\n    }\n\n    @computed private get valuesToColorsMap(): Map<number, string> {\n        const { manager, colorScheme, sortedRawSeries } = this\n\n        return colorScheme.getUniqValueColorMap(\n            _.uniq(sortedRawSeries.map((series) => series.value)),\n            !manager.invertColorScheme // negate here to be consistent with how things worked before\n        )\n    }\n\n    @computed get series(): DiscreteBarSeries[] {\n        const series = this.sortedRawSeries.map((rawSeries) => {\n            const {\n                value,\n                time,\n                colorValue,\n                seriesName,\n                color,\n                yColumn,\n                isProjection,\n            } = rawSeries\n            const series: DiscreteBarSeries = {\n                yColumn,\n                value,\n                time,\n                colorValue,\n                seriesName,\n                entityName: seriesName,\n                shortEntityName: getShortNameForEntity(seriesName),\n                annotation: getAnnotationsForSeries(\n                    this.annotationsMap,\n                    seriesName\n                ),\n                // the error color should never be used but I prefer it here instead of throwing an exception if something goes wrong\n                color:\n                    color ??\n                    this.valuesToColorsMap.get(value) ??\n                    OWID_ERROR_COLOR,\n                focus: this.focusArray.state(seriesName),\n                isProjection,\n            }\n            return series\n        })\n\n        return series\n    }\n\n    @computed get availableFacetStrategies(): FacetStrategy[] {\n        const yColumns = this.inputTable.getColumns(this.yColumnSlugs)\n\n        // if we have multi-dimension, multi-entity data (which is necessarily single-year),\n        // then *only* faceting makes sense. otherwise, faceting is not useful.\n        if (\n            yColumns.length > 1 &&\n            this.selectionArray.numSelectedEntities > 1\n        ) {\n            // if we have more than one unit, then faceting by entity is not allowed\n            // as comparing multiple units in a single chart isn't meaningful\n            const uniqueUnits = new Set(\n                yColumns.map((column) => column.shortUnit)\n            )\n            if (uniqueUnits.size > 1) {\n                return [FacetStrategy.metric]\n            }\n\n            return [FacetStrategy.entity, FacetStrategy.metric]\n        }\n\n        return [FacetStrategy.none]\n    }\n\n    @computed get errorInfo(): ChartErrorInfo {\n        const column = this.yColumns[0]\n        if (!column) return { reason: \"No column to chart\" }\n\n        const message = getDefaultFailMessage(this.manager)\n        if (message) return { reason: message }\n\n        const { entityTypePlural = \"entities\" } = this.manager\n        // TODO is it better to use .series for this check?\n        return this.yColumns.every((col) => col.isEmpty)\n            ? {\n                  reason: `No data for the selected ${entityTypePlural}`,\n              }\n            : { reason: \"\" }\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport { ChartState } from \"../chart/ChartInterface.js\"\nimport { ChartManager } from \"../chart/ChartManager.js\"\nimport {\n    ChartErrorInfo,\n    ColorSchemeName,\n    FacetStrategy,\n    MissingDataStrategy,\n    SeriesName,\n    SeriesStrategy,\n} from \"@ourworldindata/types\"\nimport { computed, makeObservable } from \"mobx\"\nimport {\n    StackedPoint,\n    StackedRawSeries,\n    StackedSeries,\n} from \"./StackedConstants.js\"\nimport {\n    OwidTable,\n    CoreColumn,\n    isNotErrorValueOrEmptyCell,\n} from \"@ourworldindata/core-table\"\nimport {\n    autoDetectSeriesStrategy,\n    autoDetectYColumnSlugs,\n    getDefaultFailMessage,\n    getShortNameForEntity,\n    makeSelectionArray,\n} from \"../chart/ChartUtils.js\"\nimport { ColorSchemes } from \"../color/ColorSchemes.js\"\nimport { SelectionArray } from \"../selection/SelectionArray.js\"\nimport {\n    CategoricalColorAssigner,\n    CategoricalColorMap,\n} from \"../color/CategoricalColorAssigner.js\"\nimport { FocusArray } from \"../focus/FocusArray.js\"\nimport { AxisConfig } from \"../axis/AxisConfig.js\"\nimport { HorizontalAxis, VerticalAxis } from \"../axis/Axis.js\"\n\n// Used in StackedBar charts to color negative and positive bars\nconst POSITIVE_COLOR = \"#f4a582\" // orange\nconst NEGATIVE_COLOR = \"#92c5de\" // blue\n\nexport abstract class AbstractStackedChartState implements ChartState {\n    manager: ChartManager\n\n    abstract shouldRunLinearInterpolation: boolean\n\n    abstract get series(): readonly StackedSeries<number>[]\n    abstract get yDomain(): [number, number]\n    abstract get useValueBasedColorScheme(): boolean\n\n    constructor({ manager }: { manager: ChartManager }) {\n        this.manager = manager\n        makeObservable(this)\n    }\n\n    @computed get inputTable(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed get transformedTable(): OwidTable {\n        return (\n            this.manager.transformedTable ??\n            this.transformTable(this.inputTable)\n        )\n    }\n\n    transformTable(table: OwidTable): OwidTable {\n        table = table.filterByEntityNames(\n            this.selectionArray.selectedEntityNames\n        )\n\n        // TODO: remove this filter once we don't have mixed type columns in datasets\n        table = table\n            .replaceNonNumericCellsWithErrorValues(this.yColumnSlugs)\n            .dropRowsWithErrorValuesForAllColumns(this.yColumnSlugs)\n\n        if (this.shouldRunLinearInterpolation) {\n            this.yColumnSlugs.forEach((slug) => {\n                table = table.interpolateColumnLinearly(slug)\n            })\n        }\n\n        // Drop rows for which no valid data points exist for any display column\n        // after interpolation, which most likely means they lie at the start/end\n        // of the time range and were not extrapolated\n        if (this.missingDataStrategy !== MissingDataStrategy.show) {\n            table = table.dropRowsWithErrorValuesForAnyColumn(this.yColumnSlugs)\n        }\n\n        if (this.manager.isRelativeMode) {\n            table = this.isEntitySeries\n                ? table.toPercentageFromEachEntityForEachTime(\n                      this.yColumnSlugs[0]\n                  )\n                : table.toPercentageFromEachColumnForEachEntityAndTime(\n                      this.yColumnSlugs\n                  )\n        }\n        return table\n    }\n\n    transformTableForSelection(table: OwidTable): OwidTable {\n        // if entities with partial data are not plotted,\n        // make sure they don't show up in the entity selector\n        if (this.missingDataStrategy !== MissingDataStrategy.show) {\n            table = table\n                .replaceNonNumericCellsWithErrorValues(this.yColumnSlugs)\n                .dropRowsWithErrorValuesForAllColumns(this.yColumnSlugs)\n\n            if (this.shouldRunLinearInterpolation) {\n                this.yColumnSlugs.forEach((slug) => {\n                    table = table.interpolateColumnLinearly(slug)\n                })\n            }\n\n            table = table.dropRowsWithErrorValuesForAnyColumn(this.yColumnSlugs)\n        }\n\n        return table\n    }\n\n    @computed get missingDataStrategy(): MissingDataStrategy {\n        return this.manager.missingDataStrategy || MissingDataStrategy.auto\n    }\n\n    @computed get yColumns(): CoreColumn[] {\n        return this.transformedTable.getColumns(this.yColumnSlugs)\n    }\n\n    @computed get yColumnSlugs(): string[] {\n        return this.manager.yColumnSlugs ?? autoDetectYColumnSlugs(this.manager)\n    }\n\n    @computed get formatColumn(): CoreColumn {\n        // we can just use the first column for formatting, b/c we assume all columns have same type\n        return this.yColumns[0]\n    }\n\n    @computed get seriesStrategy(): SeriesStrategy {\n        return autoDetectSeriesStrategy(this.manager)\n    }\n\n    @computed\n    get columnsAsSeries(): readonly StackedRawSeries<number>[] {\n        return this.yColumns\n            .map((column) => {\n                return {\n                    isProjection: column.isProjection,\n                    seriesName: column.displayName,\n                    rows: column.owidRows,\n                    focus: this.focusArray.state(column.displayName),\n                }\n            })\n            .toReversed() // For stacked charts, we want the first selected series to be on top, so we reverse the order of the stacks.\n    }\n\n    @computed\n    get entitiesAsSeries(): readonly StackedRawSeries<number>[] {\n        if (!this.yColumns.length) return []\n\n        const { isProjection, owidRowsByEntityName } = this.yColumns[0]\n        return this.selectionArray.selectedEntityNames\n            .map((entityName) => {\n                return {\n                    isProjection,\n                    seriesName: entityName,\n                    shortEntityName: getShortNameForEntity(entityName),\n                    rows: owidRowsByEntityName.get(entityName) || [],\n                    focus: this.focusArray.state(entityName),\n                }\n            })\n            .toReversed() // For stacked charts, we want the first selected series to be on top, so we reverse the order of the stacks.\n    }\n\n    @computed\n    get rawSeries(): readonly StackedRawSeries<number>[] {\n        return this.isEntitySeries\n            ? this.entitiesAsSeries\n            : this.columnsAsSeries\n    }\n\n    @computed get seriesByName(): Map<SeriesName, StackedSeries<number>> {\n        return new Map(this.series.map((series) => [series.seriesName, series]))\n    }\n\n    @computed\n    get allStackedPoints(): readonly StackedPoint<number>[] {\n        return this.series.flatMap((series) => series.points)\n    }\n\n    @computed get colorMap(): CategoricalColorMap {\n        return this.isEntitySeries\n            ? this.inputTable.entityNameColorIndex\n            : this.inputTable.columnDisplayNameToColorMap\n    }\n\n    @computed get categoricalColorAssigner(): CategoricalColorAssigner {\n        const seriesCount = this.isEntitySeries\n            ? this.selectionArray.numSelectedEntities\n            : this.yColumns.length\n        return new CategoricalColorAssigner({\n            colorScheme:\n                (this.manager.baseColorScheme\n                    ? ColorSchemes.get(this.manager.baseColorScheme)\n                    : null) ??\n                ColorSchemes.get(ColorSchemeName.stackedAreaDefault),\n            invertColorScheme: this.manager.invertColorScheme,\n            colorMap: this.colorMap,\n            autoColorMapCache: this.manager.seriesColorMap,\n            numColorsInUse: seriesCount,\n        })\n    }\n\n    @computed get selectionArray(): SelectionArray {\n        return makeSelectionArray(this.manager.selection)\n    }\n\n    @computed get focusArray(): FocusArray {\n        return this.manager.focusArray ?? new FocusArray()\n    }\n\n    @computed get isFocusModeActive(): boolean {\n        return this.focusArray.hasFocusedSeries\n    }\n\n    @computed get isEntitySeries(): boolean {\n        return this.seriesStrategy === SeriesStrategy.entity\n    }\n\n    @computed get availableFacetStrategies(): FacetStrategy[] {\n        const strategies: FacetStrategy[] = []\n\n        const areMultipleEntitiesSelected =\n            this.selectionArray.selectedEntityNames.length > 1\n        const hasMultipleYColumns = this.yColumnSlugs.length > 1\n\n        const shortUnits = this.inputTable\n            .getColumns(this.yColumnSlugs)\n            .map((column) => column.shortUnit)\n        const hasMultipleUnits = new Set(shortUnits).size > 1\n        const hasPercentageUnit = shortUnits.includes(\"%\")\n\n        if (\n            (!this.isEntitySeries && !areMultipleEntitiesSelected) ||\n            (this.isEntitySeries && !hasMultipleYColumns)\n        )\n            strategies.push(FacetStrategy.none)\n\n        if (areMultipleEntitiesSelected && !hasMultipleUnits)\n            strategies.push(FacetStrategy.entity)\n\n        if (hasMultipleYColumns && !hasPercentageUnit)\n            strategies.push(FacetStrategy.metric)\n\n        return strategies\n    }\n\n    @computed get unstackedSeries(): readonly StackedSeries<number>[] {\n        return this.rawSeries\n            .filter((series) => series.rows.length > 0)\n\n            .map((series) => {\n                const { isProjection, seriesName, rows } = series\n\n                const points = rows.map((row) => {\n                    const pointColor =\n                        row.value > 0 ? POSITIVE_COLOR : NEGATIVE_COLOR\n                    const time = row.originalTime\n                    return {\n                        position: time,\n                        time: time,\n                        formattedTime: this.formatColumn.formatTime(time),\n                        value: row.value,\n                        valueOffset: 0,\n                        interpolated:\n                            this.shouldRunLinearInterpolation &&\n                            isNotErrorValueOrEmptyCell(row.value) &&\n                            !isNotErrorValueOrEmptyCell(row.originalValue),\n                        // takes precedence over the series color if given\n                        color: this.useValueBasedColorScheme\n                            ? pointColor\n                            : undefined,\n                    }\n                })\n\n                return {\n                    seriesName,\n                    isProjection,\n                    points,\n                    isAllZeros: points.every((point) => point.value === 0),\n                    color: this.categoricalColorAssigner.assign(seriesName),\n                    focus: series.focus,\n                    shortEntityName: series.shortEntityName,\n                }\n            })\n    }\n\n    @computed get midpoints(): number[] {\n        let prevY = 0\n        return this.series.map((series) => {\n            const lastValue = R.last(series.points)\n            if (!lastValue) return 0\n\n            const y = lastValue.value + lastValue.valueOffset\n            const middleY = prevY + (y - prevY) / 2\n            prevY = y\n            return middleY\n        })\n    }\n\n    toHorizontalAxis(config: AxisConfig): HorizontalAxis {\n        const axis = config.toHorizontalAxis()\n\n        // Update domain\n        axis.updateDomainPreservingUserSettings(\n            this.transformedTable.timeDomainFor(this.yColumnSlugs)\n        )\n\n        axis.formatColumn = this.inputTable.timeColumn\n        axis.hideFractionalTicks = true\n\n        return axis\n    }\n\n    toVerticalAxis(config: AxisConfig): VerticalAxis {\n        const axis = config.toVerticalAxis()\n\n        // Use user settings for axis, unless relative mode\n        if (this.manager.isRelativeMode) axis.domain = [0, 100]\n        else axis.updateDomainPreservingUserSettings(this.yDomain)\n\n        axis.formatColumn = this.yColumns[0]\n\n        return axis\n    }\n\n    @computed get errorInfo(): ChartErrorInfo {\n        const message = getDefaultFailMessage(this.manager)\n        if (message) return { reason: message }\n\n        const { entityTypePlural = \"entities\" } = this.manager\n\n        const { yColumnSlugs } = this\n        if (!yColumnSlugs.length) return { reason: \"Missing variable\" }\n        if (!this.unstackedSeries.length)\n            return {\n                reason: `No data for the selected ${entityTypePlural}`,\n            }\n        if (!this.allStackedPoints.length)\n            return { reason: \"No matching points\" }\n        return { reason: \"\" }\n    }\n}\n","import * as R from \"remeda\"\nimport * as _ from \"lodash-es\"\nimport {\n    sortNumeric,\n    isArrayOfNumbers,\n    omitUndefinedValues,\n    AxisConfigInterface,\n    lastOfNonEmptyArray,\n    Point,\n} from \"@ourworldindata/utils\"\nimport {\n    PlacedStackedAreaSeries,\n    StackedPoint,\n    StackedPointPositionType,\n    StackedSeries,\n    PlacedStackedBarSeries,\n} from \"./StackedConstants\"\nimport { DualAxis } from \"../axis/Axis\"\nimport { Time } from \"@ourworldindata/types\"\nimport { TimeColumn } from \"@ourworldindata/core-table\"\nimport { StackedBarChartState } from \"./StackedBarChartState.js\"\n\n// This method shift up the Y Values of a Series with Points in place.\nexport const stackSeries = <PositionType extends StackedPointPositionType>(\n    seriesArr: readonly StackedSeries<PositionType>[]\n): readonly StackedSeries<PositionType>[] => {\n    seriesArr.forEach((series, seriesIndex) => {\n        if (!seriesIndex) return // The first series does not need to be shifted\n        series.points.forEach((point, pointIndex) => {\n            const pointBelowThisOne =\n                seriesArr[seriesIndex - 1].points[pointIndex]\n            point.valueOffset =\n                pointBelowThisOne.value + pointBelowThisOne.valueOffset\n        })\n    })\n    return seriesArr\n}\n\n// This method shifts up positive y values and shifts down negative y values of a Series with Points in place.\nexport const stackSeriesInBothDirections = <\n    PositionType extends StackedPointPositionType,\n>(\n    seriesArr: readonly StackedSeries<PositionType>[]\n): readonly StackedSeries<PositionType>[] => {\n    seriesArr.forEach((series, seriesIndex) => {\n        if (!seriesIndex) return // The first series does not need to be shifted\n        series.points.forEach((point, pointIndex) => {\n            const pointsBelowThisOne = seriesArr\n                .slice(0, seriesIndex)\n                .map((s) => s.points[pointIndex])\n            const pointBelowThisOne =\n                point.value < 0\n                    ? pointsBelowThisOne.findLast((p) => p.value < 0)\n                    : pointsBelowThisOne.findLast((p) => p.value >= 0)\n            point.valueOffset = pointBelowThisOne\n                ? pointBelowThisOne.value + pointBelowThisOne.valueOffset\n                : 0\n        })\n    })\n    return seriesArr\n}\n\n// When enforcing uniform spacing, a `timeColumn` is required: its\n// `getUniformlySpacedTimes` fills gaps so positions are evenly spaced (e.g. one\n// position per missing month).\ntype WithMissingValuesAsZeroesOptions =\n    | { enforceUniformSpacing: true; timeColumn: TimeColumn }\n    | { enforceUniformSpacing?: false }\n\n// Adds a Y = 0 value for each missing x value (where X is usually Time)\nexport const withMissingValuesAsZeroes = <\n    PositionType extends StackedPointPositionType,\n>(\n    seriesArr: readonly StackedSeries<PositionType>[],\n    options: WithMissingValuesAsZeroesOptions = {}\n): StackedSeries<PositionType>[] => {\n    let allXValuesSorted = sortNumeric(\n        _.uniq(\n            seriesArr\n                .flatMap((series) => series.points)\n                .map((point) => point.position)\n        )\n    )\n\n    if (options.enforceUniformSpacing && isArrayOfNumbers(allXValuesSorted)) {\n        allXValuesSorted = options.timeColumn.getUniformlySpacedTimes(\n            allXValuesSorted\n        ) as PositionType[]\n    }\n\n    return seriesArr.map((series) => {\n        const pointsByPosition = _.keyBy(series.points, \"position\")\n        return {\n            ...series,\n            points: allXValuesSorted.map((position) => {\n                const point = pointsByPosition[position]\n                const value = point?.value ?? 0\n                const time = point?.time ?? 0\n                return omitUndefinedValues({\n                    time,\n                    position,\n                    value,\n                    valueOffset: 0,\n                    formattedTime: point?.formattedTime,\n                    missing: !point,\n                    interpolated: point?.interpolated,\n                    color: point?.color,\n                })\n            }),\n        }\n    })\n}\n\nexport function resolveCollision(\n    s1: StackedSeries<number>,\n    s2: StackedSeries<number>\n): StackedSeries<number> | undefined {\n    // Early return if one series is all zeroes\n    if (s1.isAllZeros && !s2.isAllZeros) return s2\n    if (s2.isAllZeros && !s1.isAllZeros) return s1\n\n    // Prefer series with a higher last value\n    const yLast1 = R.last(s1.points)?.value ?? 0\n    const yLast2 = R.last(s2.points)?.value ?? 0\n    if (yLast1 > yLast2) return s1\n    if (yLast2 > yLast1) return s2\n\n    // Prefer series with a higher maximum value\n    const yMax1 = _.maxBy(s1.points, (p) => p.value)?.value ?? 0\n    const yMax2 = _.maxBy(s2.points, (p) => p.value)?.value ?? 0\n    if (yMax1 > yMax2) return s1\n    if (yMax2 > yMax1) return s2\n\n    // Prefer series with a higher total area\n    const area1 = _.sumBy(s1.points, (p) => p.value)\n    const area2 = _.sumBy(s2.points, (p) => p.value)\n    if (area1 > area2) return s1\n    if (area2 > area1) return s2\n\n    return undefined // no preference\n}\n\nexport function getXAxisConfigDefaultsForStackedBar(\n    chartState: StackedBarChartState\n): AxisConfigInterface {\n    return { hideGridlines: true, bandValues: chartState.xValues }\n}\n\nfunction placeStackedAreaPoint(\n    point: StackedPoint<number>,\n    dualAxis: DualAxis\n): Point {\n    const { horizontalAxis, verticalAxis } = dualAxis\n    return {\n        x: horizontalAxis.place(point.position),\n        y: verticalAxis.place(point.value + point.valueOffset),\n    }\n}\n\n// This places a whole series, but the points only represent the top of the area.\n// Later steps are necessary to display them as a filled area.\nfunction placeStackedAreaSeries(\n    series: StackedSeries<number>,\n    dualAxis: DualAxis\n): Point[] {\n    const { horizontalAxis, verticalAxis } = dualAxis\n\n    if (series.points.length > 1) {\n        return series.points.map((point) =>\n            placeStackedAreaPoint(point, dualAxis)\n        )\n    } else if (series.points.length === 1) {\n        // We only have one point, so make it so it stretches out over the whole x axis range\n        // There are two cases here that we need to consider:\n        // (1) In unfaceted charts, the x domain will be a single year, so we need to ensure that the area stretches\n        //     out over the full range of the x axis.\n        // (2) In faceted charts, the x domain may span multiple years, so we need to ensure that the area stretches\n        //     out only over year - 0.5 to year + 0.5, additionally making sure we don't put points outside the x range.\n        //\n        // -@marcelgerber, 2023-04-24\n        const point = series.points[0]\n        const y = verticalAxis.place(point.value + point.valueOffset)\n        const singleValueXDomain =\n            horizontalAxis.domain[0] === horizontalAxis.domain[1]\n\n        if (singleValueXDomain) {\n            // Case (1)\n            return [\n                { x: horizontalAxis.range[0], y },\n                { x: horizontalAxis.range[1], y },\n            ]\n        } else {\n            // Case (2)\n            const leftX = Math.max(\n                horizontalAxis.place(point.position - 0.5),\n                horizontalAxis.range[0]\n            )\n            const rightX = Math.min(\n                horizontalAxis.place(point.position + 0.5),\n                horizontalAxis.range[1]\n            )\n\n            return [\n                { x: leftX, y },\n                { x: rightX, y },\n            ]\n        }\n    } else return []\n}\n\n/** Calculates the polygon points for a filled area polygon */\nfunction makeStackedAreaPolygon(\n    placedPoints: Point[],\n    prevPlacedPoints: Point[] | undefined,\n    dualAxis: DualAxis\n): Point[] {\n    const baselineY = dualAxis.verticalAxis.range[0]\n    const prevPoints: Point[] = prevPlacedPoints ?? [\n        { x: placedPoints[0].x, y: baselineY }, // left baseline point\n        { x: lastOfNonEmptyArray(placedPoints).x, y: baselineY }, // right baseline point\n    ]\n    return [...placedPoints, ...prevPoints.toReversed()]\n}\n\nexport function toPlacedStackedAreaSeries(\n    series: readonly StackedSeries<Time>[],\n    dualAxis: DualAxis\n): PlacedStackedAreaSeries<Time>[] {\n    const validSeries = series.filter((series) => !series.isAllZeros)\n    const placedSeries: PlacedStackedAreaSeries<Time>[] = []\n\n    for (let index = 0; index < validSeries.length; index++) {\n        const series = validSeries[index]\n        const placedPoints = placeStackedAreaSeries(series, dualAxis)\n        const prevPlacedPoints = placedSeries[index - 1]?.placedPoints\n        const areaPoints = makeStackedAreaPolygon(\n            placedPoints,\n            prevPlacedPoints,\n            dualAxis\n        )\n        placedSeries.push({ ...series, placedPoints, areaPoints })\n    }\n\n    return placedSeries\n}\n\nexport function toPlacedStackedBarSeries(\n    series: readonly StackedSeries<Time>[],\n    dualAxis: DualAxis\n): readonly PlacedStackedBarSeries<Time>[] {\n    const { horizontalAxis, verticalAxis } = dualAxis\n    const barWidth = (horizontalAxis.bandWidth ?? 0) * 0.8\n\n    return series.map((series) => ({\n        ...series,\n        placedPoints: series.points.map((bar) => {\n            const x = horizontalAxis.place(bar.position) - barWidth / 2\n            const y1 = verticalAxis.place(bar.valueOffset)\n            const y2 = verticalAxis.place(bar.value + bar.valueOffset)\n            const y = Math.min(y1, y2)\n            const barHeight = Math.abs(y2 - y1)\n            return { ...bar, x, y, barWidth, barHeight }\n        }),\n    }))\n}\n","import * as _ from \"lodash-es\"\nimport { computed, makeObservable } from \"mobx\"\nimport { AbstractStackedChartState } from \"./AbstractStackedChartState.js\"\nimport { ChartState } from \"../chart/ChartInterface.js\"\nimport { StackedSeries } from \"./StackedConstants.js\"\nimport { stackSeries, withMissingValuesAsZeroes } from \"./StackedUtils.js\"\nimport { ChartManager } from \"../chart/ChartManager.js\"\n\nexport class StackedAreaChartState\n    extends AbstractStackedChartState\n    implements ChartState\n{\n    constructor(props: { manager: ChartManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    shouldRunLinearInterpolation = true\n\n    @computed get useValueBasedColorScheme(): boolean {\n        return false\n    }\n\n    @computed get series(): readonly StackedSeries<number>[] {\n        return stackSeries(withMissingValuesAsZeroes(this.unstackedSeries))\n    }\n\n    @computed get yDomain(): [number, number] {\n        const yValues = this.allStackedPoints.map(\n            (point) => point.value + point.valueOffset\n        )\n        return [0, _.max(yValues) ?? 0]\n    }\n}\n","import * as _ from \"lodash-es\"\nimport { computed, makeObservable } from \"mobx\"\nimport { AbstractStackedChartState } from \"./AbstractStackedChartState.js\"\nimport { ChartState } from \"../chart/ChartInterface.js\"\nimport { StackedSeries } from \"./StackedConstants.js\"\nimport { TimeColumn } from \"@ourworldindata/core-table\"\nimport {\n    stackSeriesInBothDirections,\n    withMissingValuesAsZeroes,\n} from \"./StackedUtils.js\"\nimport { ColorScaleManager } from \"../color/ColorScale.js\"\nimport {\n    ColorScaleConfigInterface,\n    ColorSchemeName,\n    ColumnTypeNames,\n} from \"@ourworldindata/types\"\nimport { ChartManager } from \"../chart/ChartManager.js\"\n\n// Whether daily data should get uniform spacing (one filler per missing day).\n// Disabled during the transition to explicit time intervals: some monthly and\n// quarterly indicators are currently still marked as daily, and their 28–92-day\n// gaps collapse the GCD to a daily grid, flooding the chart with fillers.\n// Flip to `true` once those indicators carry their proper timeInterval.\nconst ENABLE_DAILY_UNIFORM_SPACING = false\n\nexport class StackedBarChartState\n    extends AbstractStackedChartState\n    implements ChartState, ColorScaleManager\n{\n    constructor(props: { manager: ChartManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    shouldRunLinearInterpolation = false\n\n    defaultBaseColorScheme = ColorSchemeName.stackedAreaDefault\n\n    @computed\n    get unstackedSeriesWithMissingValuesAsZeroes(): StackedSeries<number>[] {\n        // Fill gaps with zeroes so bars are evenly spaced. Each time column\n        // knows how to space its own encoding. Daily data is skipped for\n        // now — see ENABLE_DAILY_UNIFORM_SPACING.\n        const { timeColumn } = this.transformedTable\n        const columnType = timeColumn.def.type\n        const isDayEncoded =\n            columnType === ColumnTypeNames.Day ||\n            columnType === ColumnTypeNames.Date\n\n        if (\n            timeColumn instanceof TimeColumn &&\n            (ENABLE_DAILY_UNIFORM_SPACING || !isDayEncoded)\n        ) {\n            return withMissingValuesAsZeroes(this.unstackedSeries, {\n                enforceUniformSpacing: true,\n                timeColumn,\n            })\n        }\n\n        return withMissingValuesAsZeroes(this.unstackedSeries)\n    }\n\n    @computed get series(): readonly StackedSeries<number>[] {\n        return stackSeriesInBothDirections(\n            this.unstackedSeriesWithMissingValuesAsZeroes\n        )\n    }\n\n    @computed get xValues(): number[] {\n        return _.uniq(\n            this.unstackedSeriesWithMissingValuesAsZeroes.flatMap((s) =>\n                s.points.map((p) => p.position)\n            )\n        )\n    }\n\n    /** Colour positive and negative values differently in stacked bar charts */\n    @computed get useValueBasedColorScheme(): boolean {\n        // Switched on externally, e.g. in a faceted chart\n        if (this.manager.useValueBasedColorScheme) return true\n\n        // Check if there is only one series and that series has both positive and negative values\n        return (\n            this.rawSeries.length === 1 &&\n            this.rawSeries[0].rows.some((row) => row.value < 0) &&\n            this.rawSeries[0].rows.some((row) => row.value > 0)\n        )\n    }\n\n    @computed get colorScaleConfig(): ColorScaleConfigInterface | undefined {\n        return this.manager.colorScale\n    }\n\n    @computed get yDomain(): [number, number] {\n        const yValues = this.allStackedPoints.map(\n            (point) => point.value + point.valueOffset\n        )\n        return [_.min([0, ...yValues]) ?? 0, _.max([0, ...yValues]) ?? 0]\n    }\n}\n","import { Color, EntityName, SortBy } from \"@ourworldindata/types\"\nimport { StackedPoint } from \"./StackedConstants.js\"\nimport { Emphasis } from \"../interaction/Emphasis.js\"\nimport { InteractionState } from \"../interaction/InteractionState.js\"\nimport { SeriesLabelState } from \"../seriesLabel/SeriesLabelState.js\"\nimport { GRAPHER_AREA_OPACITY_MUTED } from \"../core/GrapherConstants.js\"\ninterface LabelStyleConfig {\n    opacity: number\n}\n\nexport const LABEL_STYLE: Record<Emphasis, LabelStyleConfig> = {\n    [Emphasis.Default]: { opacity: 1 },\n    [Emphasis.Elevated]: { opacity: 1 },\n    [Emphasis.Highlighted]: { opacity: 1 },\n    [Emphasis.Muted]: { opacity: GRAPHER_AREA_OPACITY_MUTED },\n}\n\n/** One row in the stacked discrete bar chart, grouping all bar segments for a single entity */\nexport interface DiscreteBarRow {\n    entityName: string\n    shortEntityName?: string\n    bars: BarSegment[]\n    totalValue: number\n    focus: InteractionState\n}\n\nexport interface SizedDiscreteBarRow extends DiscreteBarRow {\n    label: SeriesLabelState\n}\n\nexport interface PlacedDiscreteBarRow extends SizedDiscreteBarRow {\n    yPosition: number\n    placedBars: PlacedBarSegment[]\n}\n\nexport interface RenderDiscreteBarRow extends PlacedDiscreteBarRow {\n    emphasis: Emphasis\n    segments: RenderBarSegment[]\n}\n\n/** A single colored slice within a stacked bar, representing one indicator for one entity */\nexport interface BarSegment {\n    seriesName: string\n    color: Color\n    columnSlug: string\n    point: StackedPoint<EntityName>\n}\n\nexport interface PlacedBarSegment extends BarSegment {\n    x: number\n    barWidth: number\n}\n\nexport interface RenderBarSegment extends PlacedBarSegment {\n    focus: InteractionState\n    hover: InteractionState\n    emphasis: Emphasis\n}\n\nexport const STACKED_DISCRETE_BAR_SORT_KEYS = [\n    SortBy.custom,\n    SortBy.entityName,\n    SortBy.total,\n    SortBy.column,\n] as const\nexport type StackedDiscreteBarSortKey =\n    (typeof STACKED_DISCRETE_BAR_SORT_KEYS)[number]\n","import * as _ from \"lodash-es\"\nimport { computed, makeObservable } from \"mobx\"\nimport { ChartState } from \"../chart/ChartInterface\"\nimport { StackedDiscreteBarChartManager } from \"./StackedDiscreteBarChart\"\nimport { CoreColumn, OwidTable } from \"@ourworldindata/core-table\"\nimport {\n    ChartErrorInfo,\n    ColorSchemeName,\n    EntityName,\n    FacetStrategy,\n    MissingDataStrategy,\n    SortBy,\n    SortConfig,\n} from \"@ourworldindata/types\"\nimport {\n    sortByConfig,\n    SortKey,\n    keepInputOrder,\n    sortByColumnValue,\n    autoDetectYColumnSlugs,\n    getDefaultFailMessage,\n    getShortNameForEntity,\n    makeSelectionArray,\n} from \"../chart/ChartUtils\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { StackedSeries } from \"./StackedConstants\"\nimport {\n    DiscreteBarRow,\n    STACKED_DISCRETE_BAR_SORT_KEYS,\n    StackedDiscreteBarSortKey,\n} from \"./StackedDiscreteBarChartConstants.js\"\nimport {\n    stackSeriesInBothDirections,\n    withMissingValuesAsZeroes,\n} from \"./StackedUtils\"\nimport { CategoricalColorAssigner } from \"../color/CategoricalColorAssigner\"\nimport { ColorScheme } from \"../color/ColorScheme\"\nimport { ColorSchemes } from \"../color/ColorSchemes\"\nimport { excludeUndefined } from \"@ourworldindata/utils\"\nimport { FocusArray } from \"../focus/FocusArray\"\nimport { makeToleranceNotice } from \"../chart/ToleranceNotice\"\n\nexport class StackedDiscreteBarChartState implements ChartState {\n    manager: StackedDiscreteBarChartManager\n\n    constructor({ manager }: { manager: StackedDiscreteBarChartManager }) {\n        this.manager = manager\n        makeObservable(this)\n    }\n\n    @computed get inputTable(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed get transformedTable(): OwidTable {\n        return (\n            this.manager.transformedTable ??\n            this.transformTable(this.inputTable)\n        )\n    }\n\n    transformTable(table: OwidTable): OwidTable {\n        if (!this.yColumnSlugs.length) return table\n\n        table = table.filterByEntityNames(\n            this.selectionArray.selectedEntityNames\n        )\n\n        // TODO: remove this filter once we don't have mixed type columns in datasets\n        table = table.replaceNonNumericCellsWithErrorValues(this.yColumnSlugs)\n\n        table = table.dropRowsWithErrorValuesForAllColumns(this.yColumnSlugs)\n\n        this.yColumnSlugs.forEach((slug) => {\n            table = table.interpolateColumnWithTolerance(slug)\n        })\n\n        table = this.applyMissingDataStrategy(table)\n\n        if (this.manager.isRelativeMode) {\n            table = table\n                .replaceNegativeCellsWithErrorValues(this.yColumnSlugs)\n                .toPercentageFromEachColumnForEachEntityAndTime(\n                    this.yColumnSlugs\n                )\n\n            // Apply missing data strategy _again_ because we might've introduced new error values just now\n            table = this.applyMissingDataStrategy(table)\n        }\n\n        return table\n    }\n\n    transformTableForSelection(table: OwidTable): OwidTable {\n        table = table\n            .replaceNonNumericCellsWithErrorValues(this.yColumnSlugs)\n            .replaceNegativeCellsWithErrorValues(this.yColumnSlugs)\n            .dropRowsWithErrorValuesForAllColumns(this.yColumnSlugs)\n\n        table = this.applyMissingDataStrategy(table)\n\n        return table\n    }\n\n    private applyMissingDataStrategy(table: OwidTable): OwidTable {\n        // We want to remove all rows with missing data for at least one column if:\n        // - MissingDataStrategy is explicitly set to hide, or\n        // - We are in relative mode and MissingDataStrategy is not explicitly set to show:\n        //     If we are showing relative mode, we want to drop all rows that are missing data for\n        //     any column, because otherwise the displayed data will be misleading in that it may\n        //     suggest patterns that are not actually present.\n        //     see https://github.com/owid/owid-grapher/issues/2860\n\n        const shouldRemoveRows =\n            this.missingDataStrategy === MissingDataStrategy.hide ||\n            (this.manager.isRelativeMode &&\n                this.missingDataStrategy !== MissingDataStrategy.show)\n        if (shouldRemoveRows) {\n            // If MissingDataStrategy is explicitly set to hide, drop rows (= times) where one of\n            // the y columns has no data\n            return table.dropRowsWithErrorValuesForAnyColumn(this.yColumnSlugs)\n        }\n\n        // Otherwise, don't apply any special treatment\n        return table\n    }\n\n    @computed get selectionArray(): SelectionArray {\n        return makeSelectionArray(this.manager.selection)\n    }\n\n    @computed get focusArray(): FocusArray {\n        return this.manager.focusArray ?? new FocusArray()\n    }\n\n    @computed get isFocusModeActive(): boolean {\n        return this.focusArray.hasFocusedSeries\n    }\n\n    @computed get missingDataStrategy(): MissingDataStrategy {\n        return this.manager.missingDataStrategy || MissingDataStrategy.auto\n    }\n\n    @computed get yColumnSlugs(): string[] {\n        return this.manager.yColumnSlugs ?? autoDetectYColumnSlugs(this.manager)\n    }\n\n    @computed get yColumns(): CoreColumn[] {\n        return this.transformedTable.getColumns(this.yColumnSlugs)\n    }\n\n    @computed get toleranceNotice(): string | undefined {\n        return makeToleranceNotice({\n            inputTable: this.inputTable,\n            transformedTable: this.transformedTable,\n            columns: this.yColumns,\n        })\n    }\n\n    @computed get formatColumn(): CoreColumn {\n        return this.yColumns[0]\n    }\n\n    @computed get sortColumnSlug(): string | undefined {\n        return this.sortConfig.sortColumnSlug\n    }\n\n    @computed get sortColumn(): CoreColumn | undefined {\n        if (!this.sortColumnSlug) return undefined\n        const sortColumn = this.transformedTable.get(this.sortColumnSlug)\n        if (sortColumn && !sortColumn.isMissing) return sortColumn\n        return undefined\n    }\n\n    @computed get sortConfig(): SortConfig {\n        return this.manager.sortConfig ?? {}\n    }\n\n    @computed get colorScheme(): ColorScheme {\n        return (\n            (this.manager.baseColorScheme\n                ? ColorSchemes.get(this.manager.baseColorScheme)\n                : null) ?? ColorSchemes.get(ColorSchemeName[\"owid-distinct\"])\n        )\n    }\n\n    @computed get categoricalColorAssigner(): CategoricalColorAssigner {\n        const seriesCount = this.yColumns.length\n        return new CategoricalColorAssigner({\n            colorScheme: this.colorScheme,\n            invertColorScheme: this.manager.invertColorScheme,\n            colorMap: this.inputTable.columnDisplayNameToColorMap,\n            autoColorMapCache: this.manager.seriesColorMap,\n            numColorsInUse: seriesCount,\n        })\n    }\n\n    @computed get unstackedSeries(): StackedSeries<EntityName>[] {\n        return (\n            this.yColumns\n                .map((col) => {\n                    return {\n                        seriesName: col.displayName,\n                        columnSlug: col.slug,\n                        color: this.categoricalColorAssigner.assign(\n                            col.displayName\n                        ),\n                        points: col.owidRows.map((row) => ({\n                            time: row.originalTime,\n                            position: row.entityName,\n                            value: row.value,\n                            valueOffset: 0,\n                        })),\n                    }\n                })\n                // Do not plot columns without data\n                .filter((series) => series.points.length > 0)\n        )\n    }\n\n    @computed get series(): readonly StackedSeries<EntityName>[] {\n        return stackSeriesInBothDirections(\n            withMissingValuesAsZeroes(this.unstackedSeries)\n        )\n    }\n\n    @computed get rows(): readonly DiscreteBarRow[] {\n        const entityNames = this.selectionArray.selectedEntityNames\n        const rows = entityNames\n            .map((entityName) => {\n                let totalValue = 0\n                const bars = excludeUndefined(\n                    this.series.map((series) => {\n                        const point = series.points.find(\n                            (point) => point.position === entityName\n                        )\n                        if (!point) return undefined\n                        totalValue += point.value\n                        return {\n                            point,\n                            columnSlug: series.columnSlug!,\n                            color: series.color,\n                            seriesName: series.seriesName,\n                        }\n                    })\n                )\n\n                return {\n                    entityName,\n                    shortEntityName: getShortNameForEntity(entityName),\n                    bars,\n                    totalValue,\n                    focus: this.focusArray.state(entityName),\n                }\n            })\n            .filter((row) => row.bars.length)\n\n        return rows\n    }\n\n    @computed get sortedRows(): readonly DiscreteBarRow[] {\n        const keyFns: Record<\n            StackedDiscreteBarSortKey,\n            SortKey<DiscreteBarRow>\n        > = {\n            [SortBy.custom]: keepInputOrder,\n            [SortBy.entityName]: (row): string => row.entityName,\n            [SortBy.column]: sortByColumnValue(\n                this.sortColumn,\n                (row) => row.entityName\n            ),\n            [SortBy.total]: (row): number => row.totalValue,\n        }\n        return sortByConfig(this.rows, this.sortConfig, keyFns)\n    }\n\n    @computed get availableSortKeys(): StackedDiscreteBarSortKey[] {\n        return [...STACKED_DISCRETE_BAR_SORT_KEYS]\n    }\n\n    @computed get availableFacetStrategies(): FacetStrategy[] {\n        const strategies = [FacetStrategy.none]\n\n        if (this.yColumnSlugs.length > 1) strategies.push(FacetStrategy.metric)\n\n        return strategies\n    }\n\n    @computed get errorInfo(): ChartErrorInfo {\n        const column = this.yColumns[0]\n\n        if (!column) return { reason: \"No column to chart\" }\n\n        const message = getDefaultFailMessage(this.manager)\n        if (message) return { reason: message }\n\n        const { entityTypePlural = \"entities\" } = this.manager\n\n        // TODO is it better to use .series for this check?\n        return this.yColumns.every((col) => col.isEmpty)\n            ? {\n                  reason: `No data for the selected ${entityTypePlural}`,\n              }\n            : { reason: \"\" }\n    }\n}\n","import { ScaleLinear } from \"d3-scale\"\nimport { Quadtree } from \"d3-quadtree\"\nimport { OwidTable } from \"@ourworldindata/core-table\"\nimport { DualAxis } from \"../axis/Axis\"\nimport { ChartManager } from \"../chart/ChartManager\"\nimport { NoDataMessageManager } from \"../noDataMessage/NoDataMessage\"\nimport { ColorScale } from \"../color/ColorScale\"\nimport {\n    ScatterPointLabelStrategy,\n    EntitySelectionMode,\n    SeriesName,\n    Color,\n    Time,\n    EntityName,\n} from \"@ourworldindata/types\"\n\nimport { Bounds, PointVector } from \"@ourworldindata/utils\"\nimport { ChartSeries } from \"../chart/ChartInterface\"\nimport { InteractionState } from \"../interaction/InteractionState.js\"\n\nexport interface ScatterPlotManager extends ChartManager {\n    hideConnectedScatterLines?: boolean\n    scatterPointLabelStrategy?: ScatterPointLabelStrategy\n    addCountryMode?: EntitySelectionMode\n    xOverrideTime?: Time | undefined\n    tableAfterAuthorTimelineAndActiveChartTransform?: OwidTable\n    startTime?: Time\n    endTime?: Time\n    hasTimeline?: boolean\n    hideScatterLabels?: boolean\n    isModalOpen?: boolean\n    isSingleTimeScatterAnimationActive?: boolean\n    animationStartTime?: number\n    animationEndTime?: number\n}\n\nexport interface ScatterSeries extends ChartSeries {\n    color: Color\n    label: string\n    points: SeriesPoint[]\n    isScaleColor?: boolean\n    focus: InteractionState\n}\n\nexport interface SeriesPoint {\n    x: number\n    y: number\n    size?: number\n    entityName?: EntityName\n    label: string\n    color?: number | Color\n    timeValue: Time\n    time: {\n        x: number\n        y: number\n        // Time span in relative mode for both axes\n        // Technically, to be more correct, we should support distinct\n        // start and end times for each axis, but for simplicity we use\n        // a single span (see getAverageAnnualChangeIndicesByEntity)\n        span?: [number, number]\n    }\n}\n\nexport interface ScatterRenderPoint {\n    position: PointVector\n    color: Color\n    size: number\n    label: string\n    time: {\n        x: number\n        y: number\n    }\n}\n\nexport const SCATTER_POINT_DEFAULT_COLOR = \"#932834\" // used when no color dimension is present\nexport const SCATTER_POINT_MIN_RADIUS: number = 2 // only enforced in rendered points, not in scale\nexport const SCATTER_POINT_MAX_RADIUS: number = 18\nexport const SCATTER_POINT_OPACITY: number = 0.8\nexport const SCATTER_POINT_STROKE_WIDTH: number = 0.5\nexport const SCATTER_POINT_DEFAULT_RADIUS: number = 3\nexport const SCATTER_LINE_MIN_WIDTH: number = 0.5 // only enforced in rendered lines, not in scale\nexport const SCATTER_LINE_MAX_WIDTH: number = 2\nexport const SCATTER_LINE_DEFAULT_WIDTH: number = 1\nexport const SCATTER_LABEL_MIN_FONT_SIZE: number = 10\nexport const SCATTER_LABEL_MAX_FONT_SIZE: number = 13\nexport const SCATTER_LABEL_DEFAULT_FONT_SIZE: number = 10.5\nexport const SCATTER_LABEL_FONT_SIZE_WHEN_HIDDEN_LINES: number = 12\n\nexport interface ScatterRenderSeries extends ChartSeries {\n    color: Color\n    displayKey: string\n    size: number\n    fontSize: number\n    points: ScatterRenderPoint[]\n    text: string\n    isHover?: boolean\n    isTooltip?: boolean\n    isFocus?: boolean\n    isForeground?: boolean\n    offsetVector: PointVector\n    startLabel?: ScatterLabel\n    midLabels: ScatterLabel[]\n    endLabel?: ScatterLabel\n    allLabels: ScatterLabel[]\n}\n\nexport interface ScatterLabel {\n    text: string\n    fontSize: number\n    fontWeight: number\n    color: Color\n    bounds: Bounds\n    series: ScatterRenderSeries\n    isHidden?: boolean\n    isStart?: boolean\n    isMid?: boolean\n    isEnd?: boolean\n}\n\nexport interface ScatterPointsWithLabelsProps {\n    seriesArray: ScatterSeries[]\n    hoveredSeriesNames?: SeriesName[]\n    focusedSeriesNames?: SeriesName[]\n    isHoverModeActive?: boolean\n    tooltipSeriesName?: SeriesName\n    dualAxis: DualAxis\n    colorScale?: ColorScale\n    sizeScale: ScaleLinear<number, number>\n    fontScale?: ScaleLinear<number, number>\n    baseFontSize: number\n    onMouseEnter?: (series: ScatterSeries) => void\n    onMouseLeave?: () => void\n    onClick?: () => void\n    isConnected: boolean\n    hideConnectedScatterLines: boolean\n    noDataMessageManager: NoDataMessageManager\n    hideScatterLabels?: boolean\n    hideEntityLabels?: boolean\n    quadtree?: Quadtree<ScatterPointQuadtreeNode>\n    hideFocusRing?: boolean\n}\n\nexport const SCATTER_QUADTREE_SAMPLING_DISTANCE = 10\nexport const SCATTER_POINT_HOVER_TARGET_RANGE = 20\n\nexport interface ScatterPointQuadtreeNode {\n    series: ScatterSeries\n    x: number\n    y: number\n}\n","import * as _ from \"lodash-es\"\nimport {\n    dayjs,\n    formatDay,\n    Tickmark,\n    convertDaysSinceEpochToDate,\n    convertDateToDaysSinceEpoch,\n    snapToIntervalStart,\n    sortNumeric,\n} from \"@ourworldindata/utils\"\nimport { SubYearlyTimeInterval, TimeInterval } from \"@ourworldindata/types\"\nimport { match } from \"ts-pattern\"\n\n// Calendar-nice step sizes in months\nconst MONTH_STEPS = [\n    1, // 1 month\n    2, // 2 months\n    3, // 3 months\n    6, // 6 months\n    12, // 1 year\n    24, // 2 years\n    60, // 5 years\n    120, // 10 years\n    300, // 25 years\n    600, // 50 years\n    1200, // 100 years\n] as const\n\n// Calendar-nice step sizes in months for quarterly axes,\n// so they never show sub-quarter ticks\nconst QUARTER_STEPS = [\n    3, // 1 quarter\n    6, // 2 quarters\n    12, // 1 year\n    24, // 2 years\n    60, // 5 years\n    120, // 10 years\n    300, // 25 years\n    600, // 50 years\n    1200, // 100 years\n] as const\n\n// Calendar-nice step sizes in days\nconst DAY_STEPS = [\n    1, // 1 day\n    2, // 2 days\n    7, // 1 week\n    14, // 2 weeks\n] as const\n\n// Calendar-nice step sizes in days for weekly axes,\n// so they never show sub-week ticks\nconst WEEK_STEPS = [\n    7, // 1 week\n    14, // 2 weeks\n] as const\n\nconst DECADE_STEPS = [10, 20, 50, 100, 200, 500, 1000] as const\n\n/** A time value plus derived calendar fields for evenly spaced ticks */\ninterface CalendarValue {\n    value: number\n    monthIndex: number\n    isFirstOfMonth: boolean\n    isFirstWeekOfMonth: boolean\n}\n\n/** Maps a value to its index on a grid, or `undefined` when it is off-grid */\ntype GetGridIndex = (value: CalendarValue) => number | undefined\n\n/** A tickmark for a day-since-epoch `value`, labeled with the given dayjs format. */\nfunction makeDayTick(value: number, format: string): Tickmark {\n    return { value, priority: 2, label: formatDay(value, { format }) }\n}\n\n/** Converts a day-since-epoch value to CalendarValue metadata. */\nfunction toCalendarValue(value: number): CalendarValue {\n    const date = convertDaysSinceEpochToDate(value)\n    return {\n        value,\n        monthIndex: date.year() * 12 + date.month(),\n        isFirstOfMonth: date.date() === 1,\n        isFirstWeekOfMonth: date.date() <= 7,\n    }\n}\n\n// The Monday that anchors weekly day grids\nconst WEEK_GRID_REFERENCE = snapToIntervalStart(0, TimeInterval.Week)\n\n/**\n * The reference day that anchors a day grid with the given step: a Monday for\n * weekly steps (so ticks land on week starts), the epoch otherwise.\n */\nfunction dayGridReference(step: number): number {\n    return step % 7 === 0 ? WEEK_GRID_REFERENCE : 0\n}\n\n/**\n * The index of a value on the day grid with the given step,\n * or `undefined` when the value is off-grid.\n */\nfunction dayGridPosition(\n    { value }: CalendarValue,\n    step: number\n): number | undefined {\n    const index = (value - dayGridReference(step)) / step\n    return Number.isInteger(index) ? index : undefined\n}\n\n/**\n * The index of a value on the January-anchored month grid with the given\n * step, or `undefined` when the value is off-grid.\n */\nfunction monthGridPosition(\n    { monthIndex }: CalendarValue,\n    step: number\n): number | undefined {\n    const index = monthIndex / step\n    return Number.isInteger(index) ? index : undefined\n}\n\n/**\n * Labels each grid value with `format`, switching to `formatWithYear` on the\n * first tick and wherever the year changes.\n */\nfunction labelGridWithYearOnChange(\n    grid: number[],\n    { format, formatWithYear }: { format: string; formatWithYear: string }\n): Tickmark[] {\n    const years = grid.map((value) => convertDaysSinceEpochToDate(value).year())\n    const isNewYear = (i: number): boolean =>\n        i === 0 || years[i] !== years[i - 1]\n\n    // When at least half the ticks carry the year anyway, an alternation of\n    // wide and narrow labels (e.g. \"Jan 2020 · Jul · Jan 2021\") saves no\n    // meaningful space and just looks inconsistent, so all ticks get the year\n    const newYearCount = grid.filter((_, i) => isNewYear(i)).length\n    if (newYearCount >= grid.length / 2)\n        return grid.map((value) => makeDayTick(value, formatWithYear))\n\n    return grid.map((value, i) =>\n        makeDayTick(value, isNewYear(i) ? formatWithYear : format)\n    )\n}\n\n/**\n * The grid of the smallest step that keeps the tick count at or below the\n * target, or `undefined` when even the coarsest step produces too many ticks.\n */\nfunction findGridForTarget({\n    steps,\n    targetCount,\n    span,\n    gridForStep,\n}: {\n    steps: readonly number[]\n    targetCount: number\n    span: number\n    gridForStep: (step: number) => number[]\n}): number[] | undefined {\n    for (const step of steps) {\n        const grid = gridForStep(step)\n        if (span / step <= targetCount || grid.length <= targetCount)\n            return grid\n    }\n    return undefined\n}\n\n/** Calendar-aware ticks for a time axis */\nexport function buildSubYearlyAxisTicks({\n    interval,\n    domain,\n    targetCount,\n    bandValues,\n}: {\n    interval: SubYearlyTimeInterval\n    domain: [number, number]\n    targetCount: number\n    bandValues?: number[]\n}): Tickmark[] | undefined {\n    // Discrete time axes place one tick per provided band value\n    if (bandValues?.length) return buildDiscreteTimeAxisTicks({ bandValues })\n\n    return match(interval)\n        .with(TimeInterval.Quarter, () =>\n            buildContinuousQuarterlyAxisTicks({ domain, targetCount })\n        )\n        .with(TimeInterval.Month, () =>\n            buildContinuousMonthlyAxisTicks({ domain, targetCount })\n        )\n        .with(TimeInterval.Week, () =>\n            buildContinuousWeeklyAxisTicks({ domain, targetCount })\n        )\n        .with(TimeInterval.Day, () =>\n            buildContinuousDailyAxisTicks({ domain, targetCount })\n        )\n        .exhaustive()\n}\n\n/**\n * An evenly-spaced, January-anchored month grid stepped by one of the given\n * step sizes, sized to `targetCount`, with redundant year/month parts\n * dropped from the labels.\n */\nfunction buildContinuousMonthGridTicks({\n    domain,\n    targetCount,\n    steps,\n}: {\n    domain: [number, number]\n    targetCount: number\n    steps: readonly number[]\n}): Tickmark[] | undefined {\n    const minDate = convertDaysSinceEpochToDate(domain[0])\n    const maxDate = convertDaysSinceEpochToDate(domain[1])\n\n    const spanMonths = maxDate\n        .startOf(\"month\")\n        .diff(minDate.startOf(\"month\"), \"month\")\n    if (spanMonths <= 0) return undefined\n\n    const gridForStep = (step: number): number[] => {\n        // Start from January of a \"nice\" anchor year. For year-based steps\n        // (12+ months), round the year down to the nearest multiple of the\n        // step in years, e.g. step=5y and min year=2023 -> anchor year=2020.\n        let anchorYear = minDate.year()\n        if (step >= 12) {\n            const yearsStep = step / 12\n            anchorYear = Math.floor(anchorYear / yearsStep) * yearsStep\n        }\n\n        const anchor = dayjs.utc(`${anchorYear}-01-01`)\n        const monthsFromAnchor = (date: dayjs.Dayjs): number =>\n            date.startOf(\"month\").diff(anchor, \"month\")\n\n        // The first and last grid indices that stay within the domain\n        const firstGridIndex = Math.ceil(monthsFromAnchor(minDate) / step)\n        const lastGridIndex = Math.floor(monthsFromAnchor(maxDate) / step)\n\n        return (\n            _.range(firstGridIndex, lastGridIndex + 1)\n                .map((k) =>\n                    convertDateToDaysSinceEpoch(anchor.add(k * step, \"month\"))\n                )\n                // The first index is rounded from the domain's start month, so\n                // a mid-month domain start can produce a tick just before it -\n                // drop those\n                .filter((value) => value >= domain[0] && value <= domain[1])\n        )\n    }\n\n    const grid =\n        findGridForTarget({\n            steps,\n            targetCount,\n            span: spanMonths,\n            gridForStep,\n        }) ??\n        // Even the coarsest step produces too many ticks; use it anyway\n        gridForStep(steps[steps.length - 1])\n    if (!grid.length) return undefined\n\n    // When every tick is a January, drop the redundant month and label only the year\n    const isJanuary = (value: number): boolean =>\n        convertDaysSinceEpochToDate(value).month() === 0\n    if (grid.every(isJanuary))\n        return grid.map((value) => makeDayTick(value, \"YYYY\"))\n\n    // Otherwise label the month only, keeping the year on the first tick\n    // and each January (i.e. wherever the year changes)\n    return labelGridWithYearOnChange(grid, {\n        format: \"MMM\",\n        formatWithYear: \"MMM YYYY\",\n    })\n}\n\n/**\n * An evenly-spaced, January-anchored month grid, sized to `targetCount`,\n * with redundant year/month parts dropped from the labels.\n */\nexport function buildContinuousMonthlyAxisTicks({\n    domain,\n    targetCount,\n}: {\n    domain: [number, number]\n    targetCount: number\n}): Tickmark[] | undefined {\n    return buildContinuousMonthGridTicks({\n        domain,\n        targetCount,\n        steps: MONTH_STEPS,\n    })\n}\n\n/**\n * A calendar-nice quarter grid (labeled with month names), sized to\n * `targetCount`.\n */\nexport function buildContinuousQuarterlyAxisTicks({\n    domain,\n    targetCount,\n}: {\n    domain: [number, number]\n    targetCount: number\n}): Tickmark[] | undefined {\n    return buildContinuousMonthGridTicks({\n        domain,\n        targetCount,\n        steps: QUARTER_STEPS,\n    })\n}\n\n/**\n * A calendar-nice day grid stepped by one of the given step sizes, sized to\n * `targetCount`, with redundant year parts dropped from the labels. Spans\n * too long for the coarsest step continue on the monthly grid.\n */\nfunction buildContinuousDayGridTicks({\n    domain,\n    targetCount,\n    steps,\n}: {\n    domain: [number, number]\n    targetCount: number\n    steps: readonly number[]\n}): Tickmark[] | undefined {\n    const spanDays = domain[1] - domain[0]\n    if (spanDays <= 0) return undefined\n\n    const gridForStep = (step: number): number[] => {\n        const reference = dayGridReference(step)\n        // The first and last grid indices that stay within the domain\n        const firstGridIndex = Math.ceil((domain[0] - reference) / step)\n        const lastGridIndex = Math.floor((domain[1] - reference) / step)\n        return _.range(firstGridIndex, lastGridIndex + 1).map(\n            (k) => reference + k * step\n        )\n    }\n\n    // If even the coarsest step is too dense, fall through to the monthly\n    // (and yearly) grid\n    let grid = findGridForTarget({\n        steps,\n        targetCount,\n        span: spanDays,\n        gridForStep,\n    })\n    if (grid === undefined) {\n        const monthlyTicks = buildContinuousMonthlyAxisTicks({\n            domain,\n            targetCount,\n        })\n        if (monthlyTicks) return monthlyTicks\n\n        // A span within a single calendar month has no monthly grid to\n        // continue on; fallback to the coarsest step in that case\n        grid = gridForStep(steps[steps.length - 1])\n    }\n    if (!grid.length) return undefined\n\n    // Label the day and month, keeping the year on the first tick\n    // and wherever the year changes\n    return labelGridWithYearOnChange(grid, {\n        format: \"MMM D\",\n        formatWithYear: \"MMM D, YYYY\",\n    })\n}\n\n/**\n * A calendar-nice day grid (every day, every other day, weekly or biweekly\n * on Mondays), sized to `targetCount`, with redundant year parts dropped from\n * the labels. Spans too long for day-sized steps continue on the monthly grid.\n */\nexport function buildContinuousDailyAxisTicks({\n    domain,\n    targetCount,\n}: {\n    domain: [number, number]\n    targetCount: number\n}): Tickmark[] | undefined {\n    return buildContinuousDayGridTicks({\n        domain,\n        targetCount,\n        steps: DAY_STEPS,\n    })\n}\n\n/**\n * A calendar-nice week grid (weekly or biweekly on Mondays, labeled with the\n * week-start dates), sized to `targetCount`. Spans too long for week-sized\n * steps continue on the monthly grid.\n */\nexport function buildContinuousWeeklyAxisTicks({\n    domain,\n    targetCount,\n}: {\n    domain: [number, number]\n    targetCount: number\n}): Tickmark[] | undefined {\n    return buildContinuousDayGridTicks({\n        domain,\n        targetCount,\n        steps: WEEK_STEPS,\n    })\n}\n\nexport function buildDecadeAxisTicks({\n    domain,\n    targetCount,\n}: {\n    domain: [number, number]\n    targetCount: number\n}): Tickmark[] | undefined {\n    const gridForStep = (step: number): number[] =>\n        _.range(\n            Math.ceil(domain[0] / step),\n            Math.floor(domain[1] / step) + 1\n        ).map((k) => k * step)\n\n    const grid =\n        DECADE_STEPS.map(gridForStep).find(\n            (candidate) => candidate.length <= targetCount\n        ) ?? gridForStep(DECADE_STEPS[DECADE_STEPS.length - 1])\n    if (!grid.length) return undefined\n\n    return grid.map((value) => ({ value, priority: 2 }))\n}\n\n/**\n * One tick per domain value. The ticks carry no label, so the axis falls back\n * to the column's own time format.\n */\nexport function buildDiscreteTimeAxisTicks({\n    bandValues,\n}: {\n    bandValues: number[]\n}): Tickmark[] {\n    return sortNumeric(_.uniq(bandValues)).map((value) => ({\n        value,\n        priority: 2,\n    }))\n}\n\n/**\n * The label sets a discrete time axis can pick from, ordered from finest to\n * coarsest — each a single evenly-spaced set (every day, week, month, quarter,\n * year, …). The axis shows the finest that fits; using one spacing per set\n * ensures the gaps remain uniform.\n */\nexport function getDiscreteSubYearlyTickOptions({\n    interval,\n    bandValues,\n}: {\n    interval: SubYearlyTimeInterval\n    bandValues: number[]\n}): Tickmark[][] {\n    return match(interval)\n        .with(TimeInterval.Quarter, () =>\n            getDiscreteQuarterlyTickOptions({ bandValues })\n        )\n        .with(TimeInterval.Month, () =>\n            getDiscreteMonthlyTickOptions({ bandValues })\n        )\n        .with(TimeInterval.Week, () =>\n            getDiscreteWeeklyTickOptions({ bandValues })\n        )\n        .with(TimeInterval.Day, () =>\n            getDiscreteDailyTickOptions({ bandValues })\n        )\n        .exhaustive()\n}\n\n/**\n * One label set per grid, starting with a set that labels every value. A grid's\n * set is only offered when its values sit on consecutive grid points, so\n * every offered set is evenly spaced. The indexers are expected to be ordered\n * from finest to coarsest.\n */\nfunction buildTickOptionsFromGrids(\n    bandValues: number[],\n    getGridIndexers: GetGridIndex[]\n): Tickmark[][] {\n    const calendarValues = sortNumeric(_.uniq(bandValues)).map(toCalendarValue)\n\n    const makeTier = (values: CalendarValue[]): Tickmark[] =>\n        values.map(({ value }) => ({ value, priority: 2 }))\n\n    // The finest option labels every value\n    const tiers: Tickmark[][] = [makeTier(calendarValues)]\n    if (calendarValues.length <= 1) return tiers\n\n    for (const getGridIndex of getGridIndexers) {\n        const valuesOnGrid = calendarValues\n            .map((value) => ({ value, index: getGridIndex(value) }))\n            .filter(\n                (entry): entry is { value: CalendarValue; index: number } =>\n                    entry.index !== undefined\n            )\n\n        // Require at least two values\n        if (valuesOnGrid.length < 2) continue\n\n        // Only offer evenly-spaced sets\n        const isEvenlySpaced = valuesOnGrid.every(\n            ({ index }, i) => i === 0 || index - valuesOnGrid[i - 1].index === 1\n        )\n        if (!isEvenlySpaced) continue\n\n        // The axis shows the first set whose labels fit, so a set with as\n        // many labels as the previous one can't fit where that one didn't —\n        // only offer strictly smaller sets\n        if (valuesOnGrid.length === tiers[tiers.length - 1].length) continue\n\n        tiers.push(makeTier(valuesOnGrid.map(({ value }) => value)))\n\n        // Two labels are the smallest useful tier, and later (coarser)\n        // grids cannot produce a strictly smaller tier\n        if (valuesOnGrid.length === 2) break\n    }\n\n    return tiers\n}\n\n/** See getDiscreteSubYearlyTickOptions; steps every month, quarter, year, … */\nexport function getDiscreteMonthlyTickOptions({\n    bandValues,\n}: {\n    bandValues: number[]\n}): Tickmark[][] {\n    return buildTickOptionsFromGrids(\n        bandValues,\n        MONTH_STEPS.map(\n            (step) => (value: CalendarValue) => monthGridPosition(value, step)\n        )\n    )\n}\n\n/** See getDiscreteSubYearlyTickOptions; steps every quarter, half-year, year, … */\nexport function getDiscreteQuarterlyTickOptions({\n    bandValues,\n}: {\n    bandValues: number[]\n}): Tickmark[][] {\n    return buildTickOptionsFromGrids(\n        bandValues,\n        QUARTER_STEPS.map(\n            (step) => (value: CalendarValue) => monthGridPosition(value, step)\n        )\n    )\n}\n\n/**\n * See getDiscreteSubYearlyTickOptions; steps weekly and biweekly (on Mondays),\n * then continues on the monthly grid restricted to each month's first week,\n * so ticks stay on actual week values.\n */\nexport function getDiscreteWeeklyTickOptions({\n    bandValues,\n}: {\n    bandValues: number[]\n}): Tickmark[][] {\n    return buildTickOptionsFromGrids(bandValues, [\n        ...WEEK_STEPS.map(\n            (step) => (value: CalendarValue) => dayGridPosition(value, step)\n        ),\n        ...MONTH_STEPS.map(\n            (step) => (value: CalendarValue) =>\n                value.isFirstWeekOfMonth\n                    ? monthGridPosition(value, step)\n                    : undefined\n        ),\n    ])\n}\n\n/**\n * See getDiscreteSubYearlyTickOptions; steps every day, every other day,\n * weekly and biweekly (on Mondays), then continues on the monthly grid\n * restricted to first-of-month values.\n */\nexport function getDiscreteDailyTickOptions({\n    bandValues,\n}: {\n    bandValues: number[]\n}): Tickmark[][] {\n    return buildTickOptionsFromGrids(bandValues, [\n        ...DAY_STEPS.map(\n            (step) => (value: CalendarValue) => dayGridPosition(value, step)\n        ),\n        ...MONTH_STEPS.map(\n            (step) => (value: CalendarValue) =>\n                value.isFirstOfMonth\n                    ? monthGridPosition(value, step)\n                    : undefined\n        ),\n    ])\n}\n","import {\n    ComparisonLineConfig,\n    VerticalComparisonLineConfig,\n} from \"@ourworldindata/types\"\n\nexport function isValidVerticalComparisonLineConfig(\n    lineConfig: ComparisonLineConfig\n): lineConfig is VerticalComparisonLineConfig {\n    return \"xEquals\" in lineConfig && lineConfig.xEquals !== undefined\n}\n","import * as _ from \"lodash-es\"\nimport { computed, makeObservable } from \"mobx\"\nimport { Bounds } from \"@ourworldindata/utils\"\nimport {\n    ComparisonLineConfig,\n    VerticalComparisonLineConfig,\n    VerticalComparisonLineLabelPlacement,\n} from \"@ourworldindata/types\"\nimport { isValidVerticalComparisonLineConfig } from \"./ComparisonLineHelpers\"\nimport type { DualAxis } from \"../axis/Axis\"\nimport { scaleFontSize } from \"../chart/ChartUtils\"\n\n/** Manages comparison line configs and their layout */\nexport class ComparisonLines {\n    private readonly dualAxis: DualAxis\n    readonly lines: ComparisonLineConfig[]\n    private readonly baseFontSize: number\n\n    constructor(\n        lines: ComparisonLineConfig[],\n        options: { baseFontSize: number; dualAxis: DualAxis }\n    ) {\n        makeObservable(this)\n\n        this.lines = lines\n        this.dualAxis = options.dualAxis\n        this.baseFontSize = options.baseFontSize\n    }\n\n    @computed get fontSize(): number {\n        return scaleFontSize(10, this.baseFontSize)\n    }\n\n    /** Space reserved above the chart area for vertical comparison line labels */\n    @computed get topPadding(): number {\n        const hasVerticalComparisonLines = this.lines.some((line) =>\n            isValidVerticalComparisonLineConfig(line)\n        )\n\n        if (!hasVerticalComparisonLines) return 0\n\n        return this.fontSize\n    }\n\n    @computed get verticalLineLabelPlacements(): Map<\n        number,\n        VerticalComparisonLineLabelPlacement | undefined\n    > {\n        // Line label placements keyed by the xEquals\n        const placements = new Map<\n            number,\n            VerticalComparisonLineLabelPlacement | undefined\n        >()\n\n        // Get unique vertical lines by xEquals (lines with the same xEquals are ignored)\n        const verticalLines = _.uniqBy(\n            this.lines.filter((line): line is VerticalComparisonLineConfig =>\n                isValidVerticalComparisonLineConfig(line)\n            ),\n            (line) => line.xEquals\n        )\n\n        if (verticalLines.length === 0) return placements\n\n        const { horizontalAxis, innerBounds } = this.dualAxis\n        const [minX, maxX] = horizontalAxis.domain\n        const fontSize = this.fontSize\n        const padding = 4\n\n        // Sort by x position and filter to lines within bounds\n        const sortedLines = _.sortBy(\n            verticalLines.filter(\n                (line) => line.xEquals >= minX && line.xEquals <= maxX\n            ),\n            (line) => line.xEquals\n        )\n\n        // Track the rightmost x-coordinate already claimed by a placed label\n        let occupiedRight = innerBounds.left\n\n        for (let i = 0; i < sortedLines.length; i++) {\n            const line = sortedLines[i]\n\n            const x = horizontalAxis.place(line.xEquals)\n\n            // No need to place a label if there isn't one, but we still\n            // need to prevent future labels from overlapping the line itself\n            if (!line.label) {\n                occupiedRight = Math.max(occupiedRight, x)\n                continue\n            }\n\n            const labelWidth = Bounds.forText(line.label, { fontSize }).width\n\n            // Right boundary: next line's position, or chart edge\n            const nextLineX =\n                i < sortedLines.length - 1\n                    ? horizontalAxis.place(sortedLines[i + 1].xEquals)\n                    : innerBounds.right\n\n            const rightBound = Math.min(nextLineX, innerBounds.right)\n            const leftBound = Math.max(occupiedRight, innerBounds.left)\n\n            const availableRight = rightBound - x - 2 * padding\n            const availableLeft = x - leftBound - 2 * padding\n\n            if (labelWidth <= availableRight) {\n                // Prefer placing the label to the right of the line, if there's space\n                placements.set(line.xEquals, {\n                    x: x + padding,\n                    anchor: \"start\",\n                })\n\n                // Claim the space this label occupies\n                occupiedRight = x + padding + labelWidth + padding\n            } else if (labelWidth <= availableLeft) {\n                // Otherwise, if there's space on the left, place it there\n                placements.set(line.xEquals, { x: x - padding, anchor: \"end\" })\n\n                // Prevent future labels from overlapping the line itself\n                occupiedRight = Math.max(occupiedRight, x)\n            } else {\n                // Prevent future labels from overlapping the line itself\n                occupiedRight = Math.max(occupiedRight, x)\n            }\n        }\n\n        return placements\n    }\n}\n","import * as _ from \"lodash-es\"\nimport { scaleLog, scaleLinear, ScaleLinear, ScaleLogarithmic } from \"d3-scale\"\nimport { observable, computed, makeObservable } from \"mobx\"\nimport {\n    rollingMap,\n    numberMagnitude,\n    Bounds,\n    AxisAlign,\n    HorizontalAlign,\n    Position,\n    ScaleType,\n    VerticalAlign,\n    TickFormattingOptions,\n    Tickmark,\n    ValueRange,\n    OwidVariableRoundingMode,\n    isSubYearly,\n    excludeUndefined,\n} from \"@ourworldindata/utils\"\nimport { ComparisonLineConfig, TimeInterval } from \"@ourworldindata/types\"\nimport { AxisConfig, AxisManager } from \"./AxisConfig\"\nimport {\n    buildDecadeAxisTicks,\n    buildSubYearlyAxisTicks,\n    getDiscreteSubYearlyTickOptions,\n} from \"./timeAxisTicks.js\"\nimport { match, P } from \"ts-pattern\"\nimport { MarkdownTextWrap, TextWrapGroup } from \"@ourworldindata/components\"\nimport { CoreColumn, TimeColumn } from \"@ourworldindata/core-table\"\nimport { DEFAULT_GRAPHER_BOUNDS } from \"../core/GrapherConstants.js\"\nimport { makeAxisLabel } from \"./AxisUtils.js\"\nimport * as R from \"remeda\"\nimport { ComparisonLines } from \"../comparisonLine/ComparisonLines\"\nimport { scaleFontSize } from \"../chart/ChartUtils\"\n\ninterface TickLabelPlacement {\n    value: number\n    formattedValue: string\n    x: number\n    y: number\n    width: number\n    height: number\n    xAlign?: HorizontalAlign\n    yAlign?: VerticalAlign\n    isHidden: boolean\n}\n\ntype Scale = ScaleLinear<number, number> | ScaleLogarithmic<number, number>\n\nconst OUTER_PADDING = 4\n\n// An axis never shows more labels than this\nconst MAX_TICK_LABEL_COUNT = 50\n\nconst doIntersect = (bounds: Bounds, bounds2: Bounds): boolean => {\n    return bounds.intersects(bounds2)\n}\n\nconst boundsFromLabelPlacement = (label: TickLabelPlacement): Bounds => {\n    const { x, y, width, height, xAlign, yAlign } = label\n    const xShift =\n        xAlign === HorizontalAlign.center\n            ? -width / 2\n            : xAlign === HorizontalAlign.right\n              ? -width\n              : 0\n    const yShift =\n        yAlign === VerticalAlign.middle\n            ? -height / 2\n            : yAlign === VerticalAlign.bottom\n              ? -height\n              : 0\n    return new Bounds(x + xShift, y + yShift, width, height)\n}\n\nabstract class AbstractAxis {\n    config: AxisConfig\n    axisManager?: AxisManager\n\n    domain: ValueRange\n    formatColumn: CoreColumn | undefined = undefined // Pass the column purely for formatting reasons. Might be a better way to do this.\n    hideFractionalTicks = false\n    range: ValueRange = [0, 0]\n    private _scaleType: ScaleType | undefined = undefined\n    private _label: string | undefined = undefined\n\n    constructor(config: AxisConfig, axisManager?: AxisManager) {\n        makeObservable<AbstractAxis, \"_scaleType\" | \"_label\">(this, {\n            domain: observable.ref,\n            formatColumn: observable,\n            hideFractionalTicks: observable,\n            range: observable.struct,\n            _scaleType: observable,\n            _label: observable,\n        })\n        this.config = config\n        this.domain = [config.domain[0], config.domain[1]]\n        this.axisManager = axisManager\n    }\n\n    /**\n     * The orthogonal size of the axis.\n     * For horizontal axes, this is the height.\n     * For vertical axes, this is the width.\n     */\n    abstract get size(): number\n    abstract get orient(): Position\n    abstract get labelMaxWidth(): number\n\n    abstract placeTickLabel(value: number): TickLabelPlacement\n    abstract get tickLabels(): TickLabelPlacement[]\n    abstract get endpointTickLabels(): TickLabelPlacement[]\n\n    @computed get hideAxis(): boolean {\n        return this.config.hideAxis ?? false\n    }\n\n    @computed get hideGridlines(): boolean {\n        return this.config.hideGridlines ?? false\n    }\n\n    @computed get tickPadding(): number {\n        return this.config.tickPadding ?? 5\n    }\n\n    @computed get labelPadding(): number {\n        return this.config.labelPadding ?? 10\n    }\n\n    @computed get nice(): boolean {\n        return this.config.nice ?? false\n    }\n\n    @computed get shouldOffsetTickLabelAtStart(): boolean {\n        return this.config.shouldOffsetTickLabelAtStart ?? true\n    }\n\n    @computed get shouldOffsetTickLabelAtEnd(): boolean {\n        return this.config.shouldOffsetTickLabelAtEnd ?? true\n    }\n\n    @computed get isDomainEndExclusive(): boolean {\n        return this.config.isDomainEndExclusive ?? false\n    }\n\n    @computed get fontSize(): number {\n        return this.config.fontSize\n    }\n\n    @computed protected get minTicks(): number {\n        return 2\n    }\n\n    @computed private get maxTicks(): number {\n        return this.config.maxTicks ?? 6\n    }\n\n    @computed get canChangeScaleType(): boolean | undefined {\n        return this.config.canChangeScaleType\n    }\n\n    @computed get scaleType(): ScaleType {\n        return this._scaleType ?? this.config.scaleType ?? ScaleType.linear\n    }\n\n    set scaleType(value: ScaleType) {\n        this._scaleType = value\n    }\n\n    @computed get isLogScale(): boolean {\n        return this.scaleType === ScaleType.log\n    }\n\n    @computed get label(): string {\n        return this._label ?? this.config.label ?? \"\"\n    }\n\n    set label(value: string) {\n        this._label = value\n    }\n\n    contains(value: number): boolean {\n        const [min, max] = this.domain\n        return value >= min && value <= max\n    }\n\n    // This will expand the domain but never shrink.\n    // This will change the min unless the user's min setting is less\n    // This will change the max unless the user's max setting is greater\n    // Undefined values are ignored\n    updateDomainPreservingUserSettings(\n        domain: [number | undefined, number | undefined]\n    ): this {\n        const left =\n            domain[0] !== undefined\n                ? _.min([this.domain[0], domain[0]])\n                : this.domain[0]\n        const right =\n            domain[1] !== undefined\n                ? _.max([this.domain[1], domain[1]])\n                : this.domain[1]\n        this.domain = [left ?? 0, right ?? 0]\n        return this\n    }\n\n    // todo: refactor. switch to a parent pattern?\n    _update(parentAxis: AbstractAxis): this {\n        this.formatColumn = parentAxis.formatColumn\n        this.domain = parentAxis.domain.slice() as ValueRange\n        this.hideFractionalTicks = parentAxis.hideFractionalTicks\n        this.range = parentAxis.range.slice() as ValueRange\n        this._scaleType = parentAxis._scaleType\n        this._label = parentAxis._label\n        return this\n    }\n\n    private static calculateBandWidth({\n        values,\n        scale,\n    }: {\n        values: number[]\n        scale: Scale\n    }): number {\n        const range = scale.range()\n        const rangeSize = Math.abs(range[1] - range[0])\n        const maxBandWidth = 0.4 * rangeSize\n\n        if (values.length < 2) return maxBandWidth\n\n        // the band width is the smallest distance between\n        // two adjacent values placed on the axis\n        const sortedValues = _.sortBy(values)\n        const positions = sortedValues.map((value) => scale(value))\n        const diffs = positions\n            .slice(1)\n            .map((pos, index) => pos - positions[index])\n        const bandWidth = _.min(diffs) ?? 0\n\n        return _.min([bandWidth, maxBandWidth]) ?? 0\n    }\n\n    /**\n     * Maximum width a single value can take up on the axis.\n     * Not meaningful if no band values are given.\n     */\n    @computed get bandWidth(): number | undefined {\n        const { bandValues } = this.config\n        if (!bandValues) return undefined\n        return AbstractAxis.calculateBandWidth({\n            values: bandValues,\n            scale: this.d3_scale,\n        })\n    }\n\n    private static makeScaleNice(\n        scale: ScaleLinear<number, number>,\n        totalTicksTarget: number\n    ): { scale: ScaleLinear<number, number>; ticks?: number[] } {\n        let ticks = scale.ticks(totalTicksTarget)\n\n        // use d3's nice function when there is only one tick\n        if (ticks.length < 2) return { scale: scale.nice(totalTicksTarget) }\n\n        const tickStep = ticks[1] - ticks[0]\n        const firstTick = ticks[0]\n        const lastTick = R.last(ticks)!\n\n        // if the the max or min value exceeds the last grid line by more than 25%,\n        // expand the domain to include an additional grid line\n        const [minValue, maxValue] = scale.domain()\n        if (maxValue > lastTick + 0.25 * tickStep) {\n            scale.domain([scale.domain()[0], lastTick + tickStep])\n            ticks = [...ticks, lastTick + tickStep]\n        }\n        if (minValue < firstTick - 0.25 * tickStep) {\n            scale.domain([firstTick - tickStep, scale.domain()[1]])\n            ticks = [firstTick - tickStep, ...ticks]\n        }\n\n        return { scale, ticks }\n    }\n\n    private niceTicks?: number[]\n    @computed private get d3_scale(): Scale {\n        const d3Scale = this.isLogScale ? scaleLog : scaleLinear\n        let scale = d3Scale().domain(this.domain).range(this.range)\n\n        if (this.nice && !this.isLogScale) {\n            const { scale: niceScale, ticks: niceTicks } =\n                AbstractAxis.makeScaleNice(scale, this.totalTicksTarget)\n            scale = niceScale\n            this.niceTicks = niceTicks\n        } else {\n            this.niceTicks = undefined\n        }\n\n        if (this.config.bandValues) {\n            // compute bandwidth and adjust the scale\n            const bandWidth = AbstractAxis.calculateBandWidth({\n                values: this.config.bandValues,\n                scale,\n            })\n            const offset = bandWidth / 2 + OUTER_PADDING\n            const r = scale.range()\n            return scale.range([r[0] + offset, r[1] - offset])\n        } else {\n            return scale\n        }\n    }\n\n    @computed get rangeSize(): number {\n        return Math.abs(this.range[1] - this.range[0])\n    }\n\n    @computed get rangeMax(): number {\n        return Math.max(this.range[1], this.range[0])\n    }\n\n    @computed get rangeMin(): number {\n        return Math.min(this.range[1], this.range[0])\n    }\n\n    @computed get rangeCenter(): number {\n        return this.rangeMin + this.rangeSize / 2\n    }\n\n    /** The number of ticks we should _aim_ to show, not necessarily a strict target. */\n    @computed private get totalTicksTarget(): number {\n        // Chose 1.8 here by trying a bunch of different faceted charts and figuring out what\n        // a reasonable lower bound is.\n        // NOTE: This setting is used between both log & linear axes, check both when tweaking.\n        // -@danielgavrilov, 2021-06-15\n        return Math.round(\n            R.clamp(this.rangeSize / (this.fontSize * 1.8), {\n                min: this.minTicks,\n                max: this.maxTicks,\n            })\n        )\n    }\n\n    /**\n     * The time interval of a time axis, or `undefined` if the column isn't a\n     * time column or the ticks are author-supplied\n     */\n    @computed protected get timeTickInterval(): TimeInterval | undefined {\n        const column = this.formatColumn\n        if (this.config.ticks || !column?.isTimeColumn) return undefined\n        return column.timeInterval\n    }\n\n    /**\n     * Interval-aware ticks (values + labels) for time axes that support them;\n     * `undefined` otherwise, so the axis falls through to the generic pipeline.\n     */\n    @computed protected get timeAxisTicks(): Tickmark[] | undefined {\n        const interval = this.timeTickInterval\n        if (interval === undefined) return undefined\n\n        const { domain, totalTicksTarget: targetCount } = this\n        const { bandValues } = this.config\n\n        return match(interval)\n            .with(TimeInterval.Year, () => undefined)\n            .with(TimeInterval.Decade, () =>\n                bandValues\n                    ? undefined\n                    : buildDecadeAxisTicks({ domain, targetCount })\n            )\n            .with(\n                P.union(\n                    TimeInterval.Day,\n                    TimeInterval.Week,\n                    TimeInterval.Month,\n                    TimeInterval.Quarter\n                ),\n                (interval) =>\n                    buildSubYearlyAxisTicks({\n                        interval,\n                        domain,\n                        targetCount,\n                        bandValues,\n                    })\n            )\n            .exhaustive()\n    }\n\n    /** One labelled tick per discrete band */\n    @computed private get bandTicks(): Tickmark[] | undefined {\n        const { bandValues } = this.config\n        if (!bandValues) return undefined\n        return bandValues.map((value) => ({ value, priority: 2 }))\n    }\n\n    getTickValues(): Tickmark[] {\n        return this.getCandidateTickValues().filter((tick) =>\n            this.isBeforeExclusiveDomainEnd(tick.value)\n        )\n    }\n\n    private getCandidateTickValues(): Tickmark[] {\n        const { d3_scale, timeAxisTicks } = this\n\n        if (timeAxisTicks) return timeAxisTicks\n\n        let ticks: Tickmark[]\n\n        const manualTicks = this.config.ticks ?? this.bandTicks\n        if (manualTicks) {\n            // If custom ticks are supplied, use them without any transformations or additions.\n            const [minValue, maxValue] = d3_scale.domain()\n            const processedTicks = manualTicks\n                // replace ±Infinity with minimum/maximum\n                .map((tick) => {\n                    if (tick.value === -Infinity)\n                        return { ...tick, value: minValue }\n                    if (tick.value === Infinity)\n                        return { ...tick, value: maxValue }\n                    return tick\n                })\n                // filter out custom ticks outside the plottable area\n                .filter(\n                    (tick) => tick.value >= minValue && tick.value <= maxValue\n                )\n\n            return _.uniqBy(processedTicks, (tick) => tick.value)\n        } else if (this.isLogScale) {\n            // Show a bit more ticks for log axes\n            const maxLabelledTicks = Math.round(this.totalTicksTarget * 1.25)\n            const maxTicks = Math.round(this.totalTicksTarget * 3)\n\n            // This is a wild heuristic that decides how many tick lines and grid lines we want to\n            // show for log charts.\n            //\n            // It tries to achive multiple goals:\n            // * make it obvious for the user which values they're looking at\n            // * ideally, make it very clear that this is a log axis by looking like log paper\n            // * (but) don't overwhelm the user\n            // * avoid cases where only one tick is shown for the whole axis (we had those!)\n            //\n            // This code roughly works as follows:\n            // First, we let d3 generate ticks for the axis. d3 gives values of the form `y * 10^x`,\n            // with 0 < y < 10.\n            // We then assign priorities to these values:\n            // * priority 1 (highest) to values of the form `1 * 10^x` (e.g. 100)\n            // * priority 2 to values of the form `2 * 10^x` or `5 * 10^x` (e.g. 5, 2000)\n            // * priority 3 (lowest) to all other (\"in-between\") values (e.g. 70, 300)\n            //\n            // We then decide depending on the number of tick candidates what to do:\n            // * if we have less than `maxLabelledTicks`, just show all\n            // * if we have between `maxLabelledTicks` and `maxTicks`, show all \"in-between\" lines\n            //   as faint grid lines without labels to give the chart that log paper look.\n            //   We also show all priority 1 and 2 lines with labels, because there aren't too many\n            //   of them.\n            // * otherwise, remove priority 3 and, if necessary, priority 2 labels until we're below\n            //   `maxLabelledTicks` labels overall\n            //\n            // -@MarcelGerber, 2020-08-07\n            const tickCandidates = d3_scale.ticks(maxLabelledTicks)\n            ticks = tickCandidates.map((value) => {\n                // 10^x\n                if (Math.fround(Math.log10(value)) % 1 === 0)\n                    return { value, priority: 1 }\n                // 5 * 10^x\n                else if (Math.fround(Math.log10(value * 2)) % 1 === 0)\n                    return { value, priority: 2 }\n                // 2 * 10^x\n                else if (Math.fround(Math.log10(value / 2)) % 1 === 0)\n                    return { value, priority: 2 }\n                return { value, priority: 3 }\n            })\n\n            if (ticks.length > maxLabelledTicks) {\n                if (ticks.length <= maxTicks) {\n                    // Convert all \"in-between\" lines to faint grid lines without labels,\n                    // but only do so if there are at least 2 labelled ticks\n                    const priorityTicks = ticks.filter((t) => t.priority < 3)\n                    if (priorityTicks.length >= 2) {\n                        ticks = ticks.map((tick) =>\n                            tick.priority === 3\n                                ? { ...tick, faint: true, gridLineOnly: true }\n                                : tick\n                        )\n                    }\n                } else {\n                    // Remove some tickmarks again because the chart would get too overwhelming\n                    // otherwise\n                    for (let priority = 3; priority > 1; priority--) {\n                        if (ticks.length > maxLabelledTicks)\n                            ticks = ticks.filter(\n                                (tick) => tick.priority < priority\n                            )\n                    }\n                }\n            }\n        } else {\n            const d3_ticks =\n                this.niceTicks ?? d3_scale.ticks(this.totalTicksTarget)\n\n            // Only use priority 2 here because we want the start / end ticks\n            // to be priority 1\n            ticks = d3_ticks.map((tickValue) => ({\n                value: tickValue,\n                priority: 2,\n            }))\n        }\n\n        if (this.hideFractionalTicks)\n            ticks = ticks.filter((t) => t.value % 1 === 0)\n\n        // mark value=0 ticks as solid for non-time columns\n        if (!this.formatColumn?.isTimeColumn) {\n            ticks = ticks.map((tick) =>\n                tick.value === 0 ? { ...tick, solid: true } : tick\n            )\n        }\n\n        return _.uniq(ticks)\n    }\n\n    private getTickFormattingOptions(): TickFormattingOptions {\n        const options: TickFormattingOptions = {\n            ...this.config.tickFormattingOptions,\n            roundingMode: OwidVariableRoundingMode.decimalPlaces,\n        }\n\n        // The chart's tick formatting function is used by default to format axis ticks. This means\n        // that the chart's `numDecimalPlaces` is also used by default to format the axis ticks.\n        //\n        // However, the author-specified decimal places are not always appropriate for rendering\n        // ticks, because:\n        // 1. Subsets of the data may require higher fidelity, e.g. users can use the timeline to\n        //    end up in a subset of the dataset where values happen to be much lower than usual.\n        // 2. Ticks may be rendered at granularities that may not exist in the data, e.g. the data\n        //    may only contain 0 and 1, but we may show ticks in between those values.\n        //\n        // Therefore, when formatting ticks, we determine the `numDecimalPlaces` automatically, by\n        // finding the smallest difference between any pair of ticks and making sure that we have\n        // sufficient decimal places to express the difference to the first significant figure (the\n        // first non-zero digit).\n        //\n        // One significant figure is sufficient because we use D3's ticks() and that creates\n        // \"uniformly-spaced, nicely-rounded values [...] where each value is a power of ten\n        // multiplied by 1, 2 or 5\"\n        // See: https://github.com/d3/d3-array/blob/master/README.md#ticks\n        //\n        // -@danielgavrilov, 2020-05-27\n        const minDist = _.min(\n            rollingMap(this.baseTicks, (a, b) => Math.abs(a.value - b.value))\n        )\n        if (minDist !== undefined) {\n            // Find the decimal places required to reach the first non-zero digit\n            const dp = -numberMagnitude(minDist) + 1\n            if (dp >= 0) {\n                options.numDecimalPlaces = dp\n            }\n\n            // The same requirement expressed in significant figures, for\n            // abbreviated ticks (e.g. 10.02M) whose precision counts from the\n            // value's leading digit rather than from the decimal point. Only\n            // set when it exceeds the formatter's default of 3, e.g. for a\n            // narrow domain at a high magnitude like [10.02M, 10.08M]\n            if (!this.isLogScale) {\n                const maxAbs = _.max(\n                    this.baseTicks.map((tick) => Math.abs(tick.value))\n                )\n                if (maxAbs) {\n                    const sigFigs =\n                        numberMagnitude(maxAbs) - numberMagnitude(minDist) + 1\n                    if (sigFigs > 3) {\n                        options.abbreviationSignificantFigures = sigFigs\n                    }\n                }\n            }\n        }\n        return options\n    }\n\n    place(value: number): number {\n        if (!this.range) {\n            console.error(\n                \"Can't place value on scale without a defined output range\"\n            )\n            return value\n        } else if (this.isLogScale && value <= 0) {\n            console.error(`Can't have ${value} which is <= 0 on a log scale`)\n            return value\n        } else if (this.domain[0] === this.domain[1]) {\n            // When the domain is a single value, the D3 scale will by default place\n            // the value at the middle of the range.\n            // We instead want to customize what happens - sometimes we want to place the point\n            // at the start of the range instead.\n            // see https://github.com/owid/owid-grapher/pull/1367#issuecomment-1090845181.\n            //\n            // -@marcelgerber, 2022-04-12\n            switch (this.config.singleValueAxisPointAlign) {\n                case AxisAlign.start:\n                    return this.range[0]\n                case AxisAlign.end:\n                    return this.range[1]\n                case AxisAlign.middle:\n                default:\n                    return (this.range[0] + this.range[1]) / 2\n            }\n        }\n        const placedValue = this.d3_scale(value)\n        if (placedValue === undefined) {\n            console.error(`Placed value is undefined for ${value}`)\n            return value\n        }\n        return placedValue\n    }\n\n    /** This function returns the inverse of place - i.e. given a screen space\n     *  coordinate, it returns the corresponding domain value. This is useful\n     *  for cases where you want to make sure that something is at least one pixel high.\n     */\n    invert(value: number): number {\n        return this.d3_scale.invert(value)\n    }\n\n    @computed get tickFontSize(): number {\n        return this.config.tickFontSize\n    }\n\n    @computed protected get baseTicks(): Tickmark[] {\n        return this.getTickValues().filter((tick) => !tick.gridLineOnly)\n    }\n\n    private isBeforeExclusiveDomainEnd(value: number): boolean {\n        return !this.isDomainEndExclusive || value < this.domain[1]\n    }\n\n    formatTick(\n        tick: number,\n        formattingOptionsOverride?: TickFormattingOptions\n    ): string {\n        const tickFormattingOptions: TickFormattingOptions = {\n            ...this.getTickFormattingOptions(),\n            ...formattingOptionsOverride,\n        }\n        return (\n            this.formatColumn?.formatForTick(tick, tickFormattingOptions) ??\n            tick.toString()\n        )\n    }\n\n    @computed get labelFontSize(): number {\n        return this.config.labelFontSize\n    }\n\n    @computed get labelTextWrap():\n        | MarkdownTextWrap\n        | TextWrapGroup\n        | undefined {\n        if (!this.label) return\n\n        const textWrapProps = {\n            maxWidth: this.labelMaxWidth,\n            fontSize: this.labelFontSize,\n            lineHeight: 1,\n            detailsOrderedByReference:\n                this.axisManager?.detailsOrderedByReference,\n        }\n\n        const axisLabel = makeAxisLabel({\n            label: this.label,\n            displayUnit: this.formatColumn?.displayUnit,\n        })\n\n        const mainLabelFragment = {\n            text: axisLabel.mainLabel,\n            fontWeight: 700,\n            markdown: true,\n        }\n\n        const logScaleNotice = \"plotted on a logarithmic axis\"\n\n        if (axisLabel.unit) {\n            const secondaryText = this.isLogScale\n                ? `(${axisLabel.unit}; ${logScaleNotice})`\n                : `(${axisLabel.unit})`\n            return new TextWrapGroup({\n                fragments: [mainLabelFragment, { text: secondaryText }],\n                ...textWrapProps,\n            })\n        }\n\n        if (this.isLogScale) {\n            return new TextWrapGroup({\n                fragments: [mainLabelFragment, { text: `(${logScaleNotice})` }],\n                ...textWrapProps,\n            })\n        }\n\n        return new MarkdownTextWrap({\n            text: axisLabel.mainLabel,\n            fontWeight: 700,\n            ...textWrapProps,\n        })\n    }\n\n    @computed get labelHeight(): number {\n        return this.labelTextWrap\n            ? this.labelTextWrap.height + this.labelPadding\n            : 0\n    }\n}\n\nexport class HorizontalAxis extends AbstractAxis {\n    constructor(config: AxisConfig, axisManager?: AxisManager) {\n        super(config, axisManager)\n\n        makeObservable(this)\n    }\n\n    clone(): HorizontalAxis {\n        return new HorizontalAxis(this.config, this.axisManager)._update(this)\n    }\n\n    @computed get orient(): Position {\n        // Default to `bottom` unless overriden to `top`.\n        return this.config.orient === Position.top\n            ? Position.top\n            : Position.bottom\n    }\n\n    @computed get labelOffset(): number {\n        return this.labelHeight\n    }\n\n    @computed get labelMaxWidth(): number {\n        return this.rangeSize\n    }\n\n    @computed get height(): number {\n        const {\n            hideAxis,\n            labelOffset,\n            tickPadding,\n            config: { minSize = 0 },\n        } = this\n\n        if (hideAxis) return 0\n\n        const paddedTickHeight = this.hasTickLabels\n            ? this.tickFontSize + tickPadding\n            : 0\n\n        return Math.max(paddedTickHeight + labelOffset, minSize)\n    }\n\n    @computed get size(): number {\n        return this.height\n    }\n\n    @computed get endpointTickLabels(): TickLabelPlacement[] {\n        const { formatColumn } = this\n\n        // For time columns, ticks sit on calendar-nice values that don't\n        // necessarily include the endpoints, so use the domain instead\n        if (formatColumn?.isTimeColumn) {\n            const [start, end] = this.domain\n\n            const startLabel = Number.isFinite(start)\n                ? this.placeTickLabel(\n                      start,\n                      formatColumn.formatTimeShort(start)\n                  )\n                : undefined\n\n            const lastTime =\n                this.isDomainEndExclusive && formatColumn instanceof TimeColumn\n                    ? formatColumn.addPeriods(end, -1)\n                    : end\n\n            const endLabel =\n                Number.isFinite(end) && lastTime !== start\n                    ? this.placeTickLabel(\n                          end,\n                          // Include the full plotted range for sub-yearly data\n                          formatColumn.formatTimeShortEnd(lastTime)\n                      )\n                    : undefined\n\n            return hideOverlappingTickLabels(\n                excludeUndefined([startLabel, endLabel]),\n                { padding: 3 }\n            )\n        }\n\n        return pickOutermostTickLabels(this.tickLabels, (label) => label.x)\n    }\n\n    protected override get baseTicks(): Tickmark[] {\n        if (this.timeAxisTicks) return this.getTickValues()\n\n        let ticks = this.getTickValues().filter(\n            (tick): boolean => !tick.gridLineOnly\n        )\n        const { domain } = this\n\n        // Make sure the start and end values are present, if they're whole numbers\n        const startEndPrio = this.isLogScale ? 2 : 1\n        if (domain[0] % 1 === 0)\n            ticks = [\n                {\n                    value: domain[0],\n                    priority: startEndPrio,\n                },\n                ...ticks,\n            ]\n        if (\n            domain[1] % 1 === 0 &&\n            this.hideFractionalTicks &&\n            !this.isDomainEndExclusive\n        )\n            ticks = [\n                ...ticks,\n                {\n                    value: domain[1],\n                    priority: startEndPrio,\n                },\n            ]\n\n        // sort by value, then priority.\n        // this way, we don't end up with two ticks of the same value but different priorities.\n        // instead, we deduplicate by choosing the highest priority (i.e. lowest priority value).\n        const sortedTicks = _.sortBy(ticks, [\n            (t): number => t.value,\n            (t): number => t.priority,\n        ])\n        return _.sortedUniqBy(sortedTicks, (t) => t.value)\n    }\n\n    /**\n     * Whether the axis shows any tick labels. Mirrors the branches of\n     * `tickLabels` without placing them, so callers that only need to know\n     * whether there are labels don't pay for the layout computation.\n     */\n    @computed private get hasTickLabels(): boolean {\n        // A sub-yearly time axis picks its ticks before the generic\n        // pipeline below gets a say\n        const interval = this.timeTickInterval\n        if (interval !== undefined && isSubYearly(interval)) {\n            // A discrete axis labels its band values and nothing else: each\n            // labeling option it chooses from labels at least one band, and if\n            // none of them fit it falls back to one label per band\n            if (this.config.bandValues) return this.config.bandValues.length > 0\n\n            // A continuous axis usually has labels, either because it is labelled\n            // via the calendar ticks code path, or because that code path returns\n            // `undefined` and then we fall back to the same `baseTicks` logic\n            // that otherwise runs, and we then know that `domain[0]` is a whole\n            // number and thus there is at least this one tick.\n        }\n\n        // The generic pipeline keeps the domain start whenever it's a whole\n        // number, so any such domain has at least one tick.\n        if (this.domain[0] % 1 === 0) return true\n\n        return this.baseTicks.length > 0\n    }\n\n    @computed get tickLabels(): TickLabelPlacement[] {\n        // A discrete (band) time axis shows a single evenly-spaced labeling:\n        // the finest one that fits (every day, then week, month, quarter, year, …)\n        const interval = this.timeTickInterval\n        if (\n            interval !== undefined &&\n            isSubYearly(interval) &&\n            this.config.bandValues\n        ) {\n            const options = getDiscreteSubYearlyTickOptions({\n                interval,\n                bandValues: this.config.bandValues,\n            })\n            for (const option of options) {\n                // Denser options can't fit, so don't bother measuring them\n                if (option.length > MAX_TICK_LABEL_COUNT) continue\n\n                const placedTickLabels = option.map((tick) =>\n                    this.placeTickLabel(tick.value, tick.label)\n                )\n                if (labelsFit(placedTickLabels, { padding: 3 }))\n                    return placedTickLabels\n            }\n            // If no evenly-spaced option fits, fall through to the greedy labeling below\n        }\n\n        // Otherwise: place all ticks greedily, then drop individual overlaps.\n        const placedTickLabels = _.sortBy(\n            this.baseTicks,\n            (tick) => tick.priority\n        ).map((tick) => this.placeTickLabel(tick.value, tick.label))\n        return hideOverlappingTickLabels(placedTickLabels, { padding: 3 })\n    }\n\n    placeTickLabel(value: number, label?: string): TickLabelPlacement {\n        const formattedValue = label ?? this.formatTick(value)\n        const { width, height } = Bounds.forText(formattedValue, {\n            fontSize: this.tickFontSize,\n        })\n        let x = this.place(value)\n        let xAlign = HorizontalAlign.center\n        const left = x - width / 2\n        const right = x + width / 2\n        const offset = this.bandWidth ? this.bandWidth / 2 + OUTER_PADDING : 0\n        if (\n            this.shouldOffsetTickLabelAtStart &&\n            left < this.rangeMin - offset\n        ) {\n            x = this.rangeMin\n            xAlign = HorizontalAlign.left\n        }\n        if (this.shouldOffsetTickLabelAtEnd && right > this.rangeMax + offset) {\n            x = this.rangeMax\n            xAlign = HorizontalAlign.right\n        }\n        return {\n            value,\n            formattedValue,\n            x,\n            y: 0,\n            width,\n            height,\n            xAlign,\n            isHidden: false,\n        }\n    }\n\n    // Add some padding before checking for intersection\n    protected doIntersect(bounds: Bounds, bounds2: Bounds): boolean {\n        return bounds.intersects(bounds2.padWidth(-5))\n    }\n}\n\nexport class VerticalAxis extends AbstractAxis {\n    constructor(config: AxisConfig, axisManager?: AxisManager) {\n        super(config, axisManager)\n\n        makeObservable(this)\n    }\n\n    clone(): VerticalAxis {\n        return new VerticalAxis(this.config, this.axisManager)._update(this)\n    }\n\n    @computed get orient(): Position {\n        return Position.left\n    }\n\n    @computed get labelMaxWidth(): number {\n        return this.axisManager?.axisBounds?.width ?? Infinity\n    }\n\n    @computed get labelOffsetTop(): number {\n        return this.labelHeight\n    }\n\n    @computed get width(): number {\n        const {\n            hideAxis,\n            tickPadding,\n            config: { minSize = 0 },\n        } = this\n\n        if (hideAxis) return 0\n\n        const maxTickWidth = _.max(this.tickLabels.map((tick) => tick.width))\n        const paddedTickWidth = maxTickWidth ? maxTickWidth + tickPadding : 0\n\n        return Math.max(paddedTickWidth, minSize)\n    }\n\n    @computed get height(): number {\n        return this.rangeSize\n    }\n\n    @computed get size(): number {\n        return this.width\n    }\n\n    @computed get endpointTickLabels(): TickLabelPlacement[] {\n        return pickOutermostTickLabels(this.tickLabels, (label) => label.y)\n    }\n\n    @computed get tickLabels(): TickLabelPlacement[] {\n        const { domain } = this\n\n        const tickLabels = _.sortBy(\n            this.baseTicks,\n            (tick) => tick.priority\n        ).map((tick) => this.placeTickLabel(tick.value))\n\n        // hide overlapping ticks, and allow for some padding\n        let visibleTicks = hideOverlappingTickLabels(tickLabels, { padding: 3 })\n\n        // if we end up with too few ticks, try again with less padding\n        if (visibleTicks.length < this.minTicks) {\n            visibleTicks = hideOverlappingTickLabels(tickLabels, { padding: 1 })\n        }\n\n        // if we still have too few ticks, de-prioritize the zero tick\n        // if it's a start or end value and drawn as a solid line\n        if (visibleTicks.length < this.minTicks) {\n            const updatedBaseTicks = _.cloneDeep(this.baseTicks)\n            if (domain[0] === 0 || domain[1] === 0) {\n                const zeroIndex = updatedBaseTicks\n                    .map((tick) => tick.value)\n                    .indexOf(0)\n                if (zeroIndex >= 0 && updatedBaseTicks[zeroIndex].solid) {\n                    updatedBaseTicks[zeroIndex] = {\n                        value: 0,\n                        priority: 3,\n                    }\n                }\n            }\n\n            const tickLabels = _.sortBy(\n                updatedBaseTicks,\n                (tick) => tick.priority\n            ).map((tick) => this.placeTickLabel(tick.value))\n            visibleTicks = hideOverlappingTickLabels(tickLabels, { padding: 1 })\n        }\n\n        return visibleTicks\n    }\n\n    placeTickLabel(value: number): TickLabelPlacement {\n        const formattedValue = this.formatTick(value)\n        const { width, height } = Bounds.forText(formattedValue, {\n            fontSize: this.tickFontSize,\n        })\n        const y = this.place(value)\n        return {\n            value,\n            formattedValue,\n            x: 0,\n            y,\n            width,\n            height,\n            xAlign: HorizontalAlign.right,\n            yAlign: VerticalAlign.middle,\n            isHidden: false,\n        }\n    }\n\n    @computed get shouldShowLogNotice(): boolean {\n        return this.isLogScale && !this.labelTextWrap\n    }\n\n    @computed get logNoticeTextWrap(): MarkdownTextWrap | undefined {\n        if (!this.shouldShowLogNotice) return undefined\n\n        const fontSize = scaleFontSize(10.75, this.fontSize)\n\n        return new MarkdownTextWrap({\n            text: \"log axis\",\n            maxWidth: Infinity, // No line breaks\n            fontSize,\n        })\n    }\n\n    @computed get logNoticeWidth(): number {\n        return this.logNoticeTextWrap ? this.logNoticeTextWrap.width : 0\n    }\n\n    @computed get logNoticeHeight(): number {\n        const padding = this.tickFontSize\n        return this.logNoticeTextWrap\n            ? this.logNoticeTextWrap.height + padding\n            : 0\n    }\n}\n\ninterface DualAxisProps {\n    bounds?: Bounds\n    horizontalAxis: HorizontalAxis\n    verticalAxis: VerticalAxis\n    comparisonLines?: ComparisonLineConfig[]\n}\n\n// DualAxis has the important task of coordinating two axes so that they work together!\n// There is a *two-way dependency* between the bounding size of each axis.\n// e.g. if the y axis becomes wider because a label is present, the x axis then has less\n// space to work with, and vice versa\nexport class DualAxis {\n    private readonly props: DualAxisProps\n\n    constructor(props: DualAxisProps) {\n        makeObservable(this)\n        this.props = props\n    }\n\n    @computed get horizontalAxis(): HorizontalAxis {\n        const axis = this.props.horizontalAxis.clone()\n        axis.range = this.innerBounds.xRange()\n        return axis\n    }\n\n    @computed get verticalAxis(): VerticalAxis {\n        const axis = this.props.verticalAxis.clone()\n        axis.range = this.innerBounds.yRange()\n        return axis\n    }\n\n    // We calculate an initial height from the range of the input bounds\n    @computed private get horizontalAxisSize(): number {\n        const axis = this.props.horizontalAxis.clone()\n        axis.range = [0, this.bounds.width - this.verticalAxisSize]\n        return axis.size\n    }\n\n    // We calculate an initial width from the range of the input bounds\n    @computed private get verticalAxisSize(): number {\n        const axis = this.props.verticalAxis.clone()\n        axis.range = [0, this.bounds.height]\n        return axis.size\n    }\n\n    // Now we can determine the \"true\" inner bounds of the dual axis\n    @computed get innerBounds(): Bounds {\n        return (\n            this.bounds\n                // Add padding to account for the width of the vertical axis\n                // and the height of the horizontal axis\n                .pad({\n                    [this.props.horizontalAxis.orient]: this.horizontalAxisSize,\n                    [this.props.verticalAxis.orient]: this.verticalAxisSize,\n                })\n                // Make space for the y-axis label if plotted above the axis\n                .padTop(this.props.verticalAxis.labelOffsetTop)\n                // Make space for vertical comparison line labels if any\n                .padTop(this.comparisonLines.topPadding)\n                .padTop(\n                    this.shouldShowLogNotice\n                        ? this.props.verticalAxis.logNoticeHeight\n                        : 0\n                )\n        )\n    }\n\n    @computed get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed get comparisonLines(): ComparisonLines {\n        return new ComparisonLines(this.props.comparisonLines ?? [], {\n            dualAxis: this,\n            baseFontSize: this.props.verticalAxis.fontSize,\n        })\n    }\n\n    @computed private get shouldShowLogNotice(): boolean {\n        return (\n            this.props.verticalAxis.shouldShowLogNotice &&\n            // Only show the notice if it fits in the margin\n            this.props.verticalAxis.logNoticeWidth <= this.verticalAxisSize\n        )\n    }\n}\n\n/**\n * Whether no two labels overlap, keeping at least `padding` of space between them.\n *\n * Expects `tickLabels` in the order they appear on the axis, so that it suffices\n * to compare neighbours.\n */\nfunction labelsFit(\n    tickLabels: TickLabelPlacement[],\n    { padding = 0 }: { padding?: number } = {}\n): boolean {\n    for (let i = 0; i < tickLabels.length - 1; i++) {\n        if (\n            doIntersect(\n                // Expand bounds so that labels aren't too close together\n                boundsFromLabelPlacement(tickLabels[i]).expand(padding),\n                boundsFromLabelPlacement(tickLabels[i + 1]).expand(padding)\n            )\n        )\n            return false\n    }\n    return true\n}\n\nfunction pickOutermostTickLabels(\n    tickLabels: TickLabelPlacement[],\n    position: (label: TickLabelPlacement) => number\n): TickLabelPlacement[] {\n    if (tickLabels.length < 2) return tickLabels\n    return [_.minBy(tickLabels, position)!, _.maxBy(tickLabels, position)!]\n}\n\n/**\n * Drops each label that overlaps an earlier (higher-priority) one, returning the\n * survivors. `padding` is the minimum space kept between them.\n */\nfunction hideOverlappingTickLabels(\n    tickLabels: TickLabelPlacement[],\n    { padding = 0 }: { padding?: number } = {}\n): TickLabelPlacement[] {\n    for (let i = 0; i < tickLabels.length; i++) {\n        for (let j = i + 1; j < tickLabels.length; j++) {\n            const t1 = tickLabels[i],\n                t2 = tickLabels[j]\n            if (t1 === t2 || t1.isHidden || t2.isHidden) continue\n            if (\n                doIntersect(\n                    // Expand bounds so that labels aren't too close together\n                    boundsFromLabelPlacement(t1).expand(padding),\n                    boundsFromLabelPlacement(t2).expand(padding)\n                )\n            )\n                t2.isHidden = true\n        }\n    }\n    return tickLabels.filter((tick) => !tick.isHidden)\n}\n","import * as _ from \"lodash-es\"\nimport { BASE_FONT_SIZE } from \"../core/GrapherConstants\"\nimport {\n    trimObject,\n    deleteRuntimeAndUnchangedProps,\n    Persistable,\n    AxisAlign,\n    Position,\n    TickFormattingOptions,\n    Bounds,\n} from \"@ourworldindata/utils\"\nimport { observable, computed, makeObservable } from \"mobx\"\nimport { HorizontalAxis, VerticalAxis } from \"./Axis\"\nimport { scaleFontSize } from \"../chart/ChartUtils\"\nimport {\n    AxisMinMaxValueStr,\n    AxisConfigInterface,\n    FacetAxisDomain,\n    ScaleType,\n    Tickmark,\n} from \"@ourworldindata/types\"\n\nexport interface AxisManager {\n    fontSize: number\n    axisBounds?: Bounds\n    detailsOrderedByReference?: string[]\n}\n\nclass AxisConfigDefaults implements AxisConfigInterface {\n    orient: Position | undefined = undefined\n    min: number | undefined = undefined\n    max: number | undefined = undefined\n    canChangeScaleType: boolean | undefined = undefined\n    removePointsOutsideDomain: boolean | undefined = undefined\n    minSize: number | undefined = undefined\n    hideAxis: boolean | undefined = undefined\n    hideGridlines: boolean | undefined = undefined\n    hideTickLabels: boolean | undefined = undefined\n    labelPadding: number | undefined = undefined\n    tickPadding: number | undefined = undefined\n    nice: boolean | undefined = undefined\n    maxTicks: number | undefined = undefined\n    tickFormattingOptions: TickFormattingOptions | undefined = undefined\n    scaleType: ScaleType | undefined = ScaleType.linear\n    facetDomain: FacetAxisDomain | undefined = undefined\n    ticks: Tickmark[] | undefined = undefined\n    singleValueAxisPointAlign: AxisAlign | undefined = undefined\n    label: string | undefined = undefined\n    bandValues: number[] | undefined = undefined\n    shouldOffsetTickLabelAtStart: boolean | undefined = undefined\n    shouldOffsetTickLabelAtEnd: boolean | undefined = undefined\n    isDomainEndExclusive: boolean | undefined = undefined\n\n    constructor() {\n        makeObservable(this, {\n            orient: observable.ref,\n            min: observable.ref,\n            max: observable.ref,\n            canChangeScaleType: observable.ref,\n            removePointsOutsideDomain: observable.ref,\n            minSize: observable.ref,\n            hideAxis: observable.ref,\n            hideGridlines: observable.ref,\n            hideTickLabels: observable.ref,\n            labelPadding: observable.ref,\n            tickPadding: observable.ref,\n            nice: observable.ref,\n            maxTicks: observable.ref,\n            tickFormattingOptions: observable.ref,\n            scaleType: observable.ref,\n            facetDomain: observable.ref,\n            ticks: observable.ref,\n            singleValueAxisPointAlign: observable.ref,\n            label: observable.ref,\n            bandValues: observable.ref,\n            shouldOffsetTickLabelAtStart: observable.ref,\n            shouldOffsetTickLabelAtEnd: observable.ref,\n            isDomainEndExclusive: observable.ref,\n        })\n    }\n}\n\nfunction parseMinFromJSON(\n    value: AxisMinMaxValueStr.auto | number | undefined\n): number | undefined {\n    if (value === AxisMinMaxValueStr.auto) return Infinity\n    return value\n}\n\nfunction parseMaxFromJSON(\n    value: AxisMinMaxValueStr.auto | number | undefined\n): number | undefined {\n    if (value === AxisMinMaxValueStr.auto) return -Infinity\n    return value\n}\n\nexport class AxisConfig\n    extends AxisConfigDefaults\n    implements AxisConfigInterface, Persistable\n{\n    constructor(props?: AxisConfigInterface, axisManager?: AxisManager) {\n        super()\n        makeObservable(this)\n        this.updateFromObject(props)\n        this.axisManager = axisManager\n    }\n\n    axisManager?: AxisManager\n\n    // todo: test/refactor\n    updateFromObject(props?: AxisConfigInterface): void {\n        if (props) _.extend(this, props)\n        if (props?.min) this.min = parseMinFromJSON(props?.min)\n        if (props?.max) this.max = parseMaxFromJSON(props?.max)\n    }\n\n    toObject(): AxisConfigInterface {\n        const obj = trimObject({\n            orient: this.orient,\n            min: this.min,\n            max: this.max,\n            canChangeScaleType: this.canChangeScaleType,\n            removePointsOutsideDomain: this.removePointsOutsideDomain,\n            minSize: this.minSize,\n            hideAxis: this.hideAxis,\n            hideGridlines: this.hideGridlines,\n            hideTickLabels: this.hideTickLabels,\n            labelPadding: this.labelPadding,\n            nice: this.nice,\n            maxTicks: this.maxTicks,\n            tickFormattingOptions: this.tickFormattingOptions,\n            scaleType: this.scaleType,\n            label: this.label ? this.label : undefined,\n            facetDomain: this.facetDomain,\n            ticks: this.ticks,\n            singleValueAxisPointAlign: this.singleValueAxisPointAlign,\n            bandValues: this.bandValues,\n        }) as AxisConfigInterface\n\n        deleteRuntimeAndUnchangedProps(obj, new AxisConfigDefaults())\n\n        if (obj.min === Infinity) obj.min = AxisMinMaxValueStr.auto\n        if (obj.max === -Infinity) obj.max = AxisMinMaxValueStr.auto\n\n        return obj\n    }\n\n    @computed get fontSize(): number {\n        return this.axisManager?.fontSize || BASE_FONT_SIZE\n    }\n\n    @computed get tickFontSize(): number {\n        return scaleFontSize(12, this.fontSize)\n    }\n\n    @computed get labelFontSize(): number {\n        return scaleFontSize(12, this.fontSize)\n    }\n\n    // A log scale domain cannot have values <= 0, so we double check here\n    @computed private get constrainedMin(): number {\n        if (this.scaleType === ScaleType.log && (this.min ?? 0) <= 0)\n            return Infinity\n        return this.min ?? Infinity\n    }\n\n    // If the author has specified a min/max AND to remove points outside the domain, this should return true\n    shouldRemovePoint(value: number): boolean {\n        if (!this.removePointsOutsideDomain) return false\n        if (this.min !== undefined && value < this.min) return true\n        if (this.max !== undefined && value > this.max) return true\n        return false\n    }\n\n    @computed private get constrainedMax(): number {\n        if (this.scaleType === ScaleType.log && (this.max || 0) <= 0)\n            return -Infinity\n        return this.max ?? -Infinity\n    }\n\n    @computed get domain(): [number, number] {\n        return [this.constrainedMin, this.constrainedMax]\n    }\n\n    // Convert axis configuration to a finalized axis spec by supplying\n    // any needed information calculated from the data\n    toHorizontalAxis(): HorizontalAxis {\n        return new HorizontalAxis(this, this.axisManager)\n    }\n\n    toVerticalAxis(): VerticalAxis {\n        return new VerticalAxis(this, this.axisManager)\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport {\n    Bounds,\n    ColumnSlug,\n    PointVector,\n    ValueRange,\n} from \"@ourworldindata/utils\"\nimport {\n    SCATTER_LABEL_FONT_SIZE_WHEN_HIDDEN_LINES,\n    SCATTER_LINE_DEFAULT_WIDTH,\n    SCATTER_LINE_MAX_WIDTH,\n    SCATTER_POINT_DEFAULT_RADIUS,\n    SCATTER_POINT_MAX_RADIUS,\n    ScatterLabel,\n    ScatterRenderPoint,\n    ScatterRenderSeries,\n} from \"./ScatterPlotChartConstants\"\nimport { roundFontSize, scaleFontSize } from \"../chart/ChartUtils\"\nimport { ScatterPlotChartState } from \"./ScatterPlotChartState\"\nimport { OwidTable } from \"@ourworldindata/core-table\"\n\nexport const labelPriority = (label: ScatterLabel): number => {\n    let priority = label.fontSize\n\n    if (label.series.isHover) priority += 10000\n    if (label.series.isFocus) priority += 1000\n    if (label.isEnd) priority += 100\n\n    return priority\n}\n\n// Create the start year label for a series\nexport const makeStartLabel = (\n    series: ScatterRenderSeries,\n    isSubtleForeground: boolean,\n    hideConnectedScatterLines: boolean,\n    baseFontSize: number\n): ScatterLabel | undefined => {\n    // No room to label the year if it's a single point\n    if (!series.isForeground || series.points.length <= 1) return undefined\n\n    const fontSize = hideConnectedScatterLines\n        ? scaleFontSize(SCATTER_LABEL_FONT_SIZE_WHEN_HIDDEN_LINES, baseFontSize)\n        : series.isForeground\n          ? isSubtleForeground\n              ? scaleFontSize(8, baseFontSize)\n              : scaleFontSize(9, baseFontSize)\n          : scaleFontSize(7, baseFontSize)\n    const firstValue = series.points[0]\n    const nextValue = series.points[1]\n    const nextSegment = nextValue.position.subtract(firstValue.position)\n\n    const pos = firstValue.position.subtract(nextSegment.normalize().times(5))\n    let bounds = Bounds.forText(firstValue.label, {\n        x: pos.x,\n        y: pos.y,\n        fontSize: fontSize,\n    })\n    if (pos.x < firstValue.position.x)\n        bounds = new Bounds(\n            bounds.x - bounds.width + 2,\n            bounds.y,\n            bounds.width,\n            bounds.height\n        )\n    if (pos.y > firstValue.position.y)\n        bounds = new Bounds(\n            bounds.x,\n            bounds.y + bounds.height / 2,\n            bounds.width,\n            bounds.height\n        )\n\n    return {\n        text: firstValue.label,\n        fontSize,\n        fontWeight: 400,\n        color: firstValue.color,\n        bounds,\n        series,\n        isStart: true,\n    }\n}\n\n// Make labels for the points between start and end on a series\n// Positioned using normals of the line segments\nexport const makeMidLabels = (\n    series: ScatterRenderSeries,\n    isSubtleForeground: boolean,\n    hideConnectedScatterLines: boolean,\n    baseFontSize: number\n): ScatterLabel[] => {\n    if (\n        !series.isForeground ||\n        series.points.length <= 1 ||\n        (!series.isHover && isSubtleForeground)\n    )\n        return []\n\n    const fontSize = hideConnectedScatterLines\n        ? scaleFontSize(SCATTER_LABEL_FONT_SIZE_WHEN_HIDDEN_LINES, baseFontSize)\n        : series.isForeground\n          ? isSubtleForeground\n              ? scaleFontSize(8, baseFontSize)\n              : scaleFontSize(9, baseFontSize)\n          : scaleFontSize(7, baseFontSize)\n    const fontWeight = 400\n\n    // label all the way to the end for the tooltip series, otherwise to n-1\n    const lastIndex = series.isTooltip && !series.isFocus ? Infinity : -1\n\n    return series.points.slice(1, lastIndex).map((v, i) => {\n        const prevPos = i > 0 && series.points[i - 1].position\n        const prevSegment = prevPos && v.position.subtract(prevPos)\n        const nextPos = series.points[i + 1].position\n        const nextSegment = nextPos.subtract(v.position)\n\n        let pos: PointVector\n        if (prevPos && prevSegment) {\n            const normals = prevSegment\n                .add(nextSegment)\n                .normalize()\n                .normals()\n                .map((x) => x.times(5))\n            const potentialSpots = normals.map((n) => v.position.add(n))\n            pos = _.maxBy(potentialSpots, (p) => {\n                return (\n                    PointVector.distance(p, prevPos) +\n                    PointVector.distance(p, nextPos)\n                )\n            }) as PointVector\n        } else {\n            pos = v.position.subtract(nextSegment.normalize().times(5))\n        }\n\n        let bounds = Bounds.forText(v.label, {\n            x: pos.x,\n            y: pos.y,\n            fontSize: fontSize,\n            fontWeight: fontWeight,\n        })\n        if (pos.x < v.position.x)\n            bounds = new Bounds(\n                bounds.x - bounds.width + 2,\n                bounds.y,\n                bounds.width,\n                bounds.height\n            )\n        if (pos.y > v.position.y)\n            bounds = new Bounds(\n                bounds.x,\n                bounds.y + bounds.height / 2,\n                bounds.width,\n                bounds.height\n            )\n\n        return {\n            text: v.label,\n            fontSize,\n            fontWeight,\n            color: v.color,\n            bounds,\n            series,\n            isMid: true,\n        }\n    })\n}\n\n// Make the end label (entity label) for a series. Will be pushed\n// slightly out based on the direction of the series if multiple values\n// are present\n// This is also the one label in the case of a single point\nexport const makeEndLabel = (\n    series: ScatterRenderSeries,\n    isSubtleForeground: boolean,\n    hideConnectedScatterLines: boolean,\n    baseFontSize: number\n): ScatterLabel => {\n    const lastValue = R.last(series.points) as ScatterRenderPoint\n    const lastPos = lastValue.position\n    const fontSize = hideConnectedScatterLines\n        ? scaleFontSize(SCATTER_LABEL_FONT_SIZE_WHEN_HIDDEN_LINES, baseFontSize)\n        : roundFontSize(\n              series.fontSize *\n                  (series.isForeground ? (isSubtleForeground ? 1.2 : 1.3) : 1.1)\n          )\n    const fontWeight =\n        series.isForeground && !hideConnectedScatterLines ? 700 : 400\n\n    let offsetVector = PointVector.up\n    if (series.points.length > 1) {\n        const prevValue = series.points[series.points.length - 2]\n        const prevPos = prevValue.position\n        offsetVector = lastPos.subtract(prevPos)\n    }\n    series.offsetVector = offsetVector\n\n    const labelPos = lastPos.add(\n        offsetVector\n            .normalize()\n            .times(series.points.length === 1 ? lastValue.size + 1 : 5)\n    )\n\n    let labelBounds = Bounds.forText(series.text, {\n        x: labelPos.x,\n        y: labelPos.y,\n        fontSize: fontSize,\n    })\n\n    if (labelPos.x < lastPos.x)\n        labelBounds = labelBounds.set({\n            x: labelBounds.x - labelBounds.width,\n        })\n    if (labelPos.y > lastPos.y)\n        labelBounds = labelBounds.set({\n            y: labelBounds.y + labelBounds.height / 2,\n        })\n\n    return {\n        text:\n            hideConnectedScatterLines && series.isForeground\n                ? lastValue.label\n                : series.isTooltip && !series.isFocus\n                  ? \"\" // don't doubly label the series name when the tooltip is visible\n                  : series.text,\n        fontSize,\n        fontWeight,\n        color: lastValue.color,\n        bounds: labelBounds,\n        series,\n        isEnd: true,\n    }\n}\n\nexport function toSizeRange(\n    chartState: ScatterPlotChartState,\n    bounds: Bounds\n): [number, number] {\n    if (chartState.sizeColumn.isMissing) {\n        // if the size column is missing, we want all points/lines to have the same width\n        return chartState.isConnected\n            ? [SCATTER_LINE_DEFAULT_WIDTH, SCATTER_LINE_DEFAULT_WIDTH]\n            : [SCATTER_POINT_DEFAULT_RADIUS, SCATTER_POINT_DEFAULT_RADIUS]\n    }\n\n    const maxLineWidth = SCATTER_LINE_MAX_WIDTH\n    const maxPointRadius = Math.min(\n        SCATTER_POINT_MAX_RADIUS,\n        _.round(Math.min(bounds.width, bounds.height) * 0.06, 1)\n    )\n\n    return chartState.isConnected\n        ? // Note that the scale starts at 0.\n          // When using the scale to plot marks, we need to make sure the minimums\n          // (e.g. `SCATTER_POINT_MIN_RADIUS`) are respected.\n          [0, maxLineWidth]\n        : [0, maxPointRadius]\n}\n\nexport function computeSizeDomain(\n    table: OwidTable,\n    slug: ColumnSlug\n): ValueRange {\n    const sizeValues = table.get(slug).values.filter(_.isNumber)\n    return [0, _.max(sizeValues) ?? 1]\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport {\n    CoreColumn,\n    defaultIfErrorValue,\n    isNotErrorValue,\n    OwidTable,\n} from \"@ourworldindata/core-table\"\nimport { ChartState } from \"../chart/ChartInterface\"\nimport { ColorScale, ColorScaleManager } from \"../color/ColorScale\"\nimport {\n    SCATTER_POINT_DEFAULT_COLOR,\n    ScatterPlotManager,\n    ScatterSeries,\n    SeriesPoint,\n} from \"./ScatterPlotChartConstants\"\nimport { computed, makeObservable } from \"mobx\"\nimport {\n    autoDetectYColumnSlugs,\n    getShortNameForEntity,\n    makeSelectionArray,\n} from \"../chart/ChartUtils\"\nimport {\n    ChartErrorInfo,\n    ColorSchemeName,\n    EntityName,\n    ScaleType,\n    ScatterPointLabelStrategy,\n    ColorScaleConfigInterface,\n    SeriesName,\n    ValueRange,\n} from \"@ourworldindata/types\"\nimport {\n    domainExtent,\n    intersection,\n    lowerCaseFirstLetterUnlessAbbreviation,\n} from \"@ourworldindata/utils\"\nimport { makeToleranceNotice } from \"../chart/ToleranceNotice.js\"\nimport { ColorScaleConfig } from \"../color/ColorScaleConfig\"\nimport { OWID_NO_DATA_GRAY } from \"../color/ColorConstants\"\nimport { AxisConfig } from \"../axis/AxisConfig\"\nimport { BASE_FONT_SIZE } from \"../core/GrapherConstants\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { computeSizeDomain } from \"./ScatterUtils\"\nimport { FocusArray } from \"../focus/FocusArray\"\nimport { HorizontalAxis, VerticalAxis } from \"../axis/Axis.js\"\n\nexport class ScatterPlotChartState implements ChartState, ColorScaleManager {\n    manager: ScatterPlotManager\n\n    colorScale: ColorScale\n    defaultBaseColorScheme = ColorSchemeName.continents\n    defaultNoDataColor = OWID_NO_DATA_GRAY\n\n    constructor({ manager }: { manager: ScatterPlotManager }) {\n        this.manager = manager\n        this.colorScale = manager.colorScaleOverride ?? new ColorScale(this)\n        makeObservable(this)\n    }\n\n    @computed get inputTable(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed get transformedTableFromGrapher(): OwidTable {\n        return (\n            this.manager.transformedTable ??\n            this.transformTable(this.inputTable)\n        )\n    }\n\n    // TODO chunk this up into multiple computeds for better performance?\n    @computed get transformedTable(): OwidTable {\n        let table = this.transformedTableFromGrapher\n        // We don't want to apply this transform when relative mode is also enabled, it has a\n        // slightly different endpoints logic that drops initial zeroes to avoid DivideByZero error.\n        if (this.compareEndPointsOnly && !this.manager.isRelativeMode) {\n            table = table.keepMinTimeAndMaxTimeForEachEntityOnly()\n        }\n        if (this.manager.isRelativeMode) {\n            table = table.toAverageAnnualChangeForEachEntity([\n                this.xColumnSlug,\n                this.yColumnSlug,\n            ])\n        }\n        return table\n    }\n\n    transformTable(table: OwidTable): OwidTable {\n        // Drop all entities that have no data in either the X or Y column.\n        // For some charts, this can drop more than 50% of rows, so we do it first.\n        // If there's no data at all for an entity, then tolerance can also not \"recover\" any data, so this is safe to do.\n        table = table.dropEntitiesThatHaveNoDataInSomeColumn([\n            this.xColumnSlug,\n            this.yColumnSlug,\n        ])\n\n        if (this.xScaleType === ScaleType.log && this.xColumnSlug)\n            table = table.replaceNonPositiveCellsForLogScale([this.xColumnSlug])\n\n        if (this.yScaleType === ScaleType.log && this.yColumnSlug)\n            table = table.replaceNonPositiveCellsForLogScale([this.yColumnSlug])\n\n        if (this.colorColumnSlug && this.manager.matchingEntitiesOnly)\n            table = table.dropRowsWithErrorValuesForColumn(this.colorColumnSlug)\n\n        // We want to \"chop off\" any rows outside the time domain for X and Y to avoid creating\n        // leading and trailing timeline times that don't really exist in the dataset.\n        const [timeDomainStart, timeDomainEnd] = table.timeDomainFor([\n            this.xColumnSlug,\n            this.yColumnSlug,\n        ])\n        table = table.filterByTimeRange(\n            timeDomainStart ?? -Infinity,\n            timeDomainEnd ?? Infinity\n        )\n\n        if (this.xOverrideTime !== undefined) {\n            table = table.interpolateColumnWithTolerance(this.yColumnSlug)\n        } else {\n            table = table.interpolateColumnsByClosestTimeMatch(\n                this.xColumnSlug,\n                this.yColumnSlug\n            )\n        }\n\n        // Drop any rows which have non-number values for X or Y.\n        // This needs to be done after the tolerance, because the tolerance may fill in some gaps.\n        table = table\n            .columnFilter(\n                this.xColumnSlug,\n                _.isNumber,\n                \"Drop rows with non-number values in X column\"\n            )\n            .columnFilter(\n                this.yColumnSlug,\n                _.isNumber,\n                \"Drop rows with non-number values in Y column\"\n            )\n\n        // The tolerance application might lead to some data being dropped for some years.\n        // For example, if X times are [2000, 2005, 2010], and Y times are [2005], then for all 3\n        // rows we have the same match [[2005, 2005], [2005, 2005], [2005, 2005]].\n        // This means we can drop 2000 and 2010 from the timeline.\n        // It might not make a huge difference here, but it makes a difference when there are more\n        // entities covering different time periods.\n        const [originalTimeDomainStart, originalTimeDomainEnd] =\n            table.originalTimeDomainFor([this.xColumnSlug, this.yColumnSlug])\n        table = table.filterByTimeRange(\n            originalTimeDomainStart ?? -Infinity,\n            originalTimeDomainEnd ?? Infinity\n        )\n\n        return table\n    }\n\n    transformTableForDisplay(table: OwidTable): OwidTable {\n        // Drop any rows which have non-number values for X or Y.\n        table = table\n            .columnFilter(\n                this.xColumnSlug,\n                _.isNumber,\n                \"Drop rows with non-number values in X column\"\n            )\n            .columnFilter(\n                this.yColumnSlug,\n                _.isNumber,\n                \"Drop rows with non-number values in Y column\"\n            )\n        return table\n    }\n\n    @computed get selectionArray(): SelectionArray {\n        return makeSelectionArray(this.manager.selection)\n    }\n\n    @computed get focusArray(): FocusArray {\n        return this.manager.focusArray ?? new FocusArray()\n    }\n\n    @computed get isFocusModeActive(): boolean {\n        return this.focusArray.hasFocusedSeries\n    }\n\n    // todo: remove. do this at table filter level\n    @computed get seriesNamesToHighlight(): Set<SeriesName> {\n        const seriesNames = this.selectionArray.selectedEntityNames\n\n        if (this.manager.matchingEntitiesOnly && !this.colorColumn.isMissing)\n            return new Set(\n                intersection(seriesNames, this.colorColumn.uniqEntityNames)\n            )\n\n        return new Set(seriesNames)\n    }\n\n    // todo: remove this. Should be done as a simple column transform at the data level.\n    // Possible to override the x axis dimension to target a special year\n    // In case you want to graph say, education in the past and democracy today https://ourworldindata.org/grapher/correlation-between-education-and-democracy\n    @computed get xOverrideTime(): number | undefined {\n        return this.manager.xOverrideTime\n    }\n\n    @computed get compareEndPointsOnly(): boolean {\n        return !!this.manager.compareEndPointsOnly\n    }\n\n    @computed get xScaleType(): ScaleType {\n        return this.manager.isRelativeMode\n            ? ScaleType.linear\n            : (this.manager.xAxisConfig?.scaleType ?? ScaleType.linear)\n    }\n\n    @computed get yScaleType(): ScaleType {\n        return this.manager.isRelativeMode\n            ? ScaleType.linear\n            : (this.manager.yAxisConfig?.scaleType ?? ScaleType.linear)\n    }\n\n    @computed get yColumnSlug(): string {\n        return autoDetectYColumnSlugs(this.manager)[0]\n    }\n\n    @computed get yColumn(): CoreColumn {\n        return this.transformedTable.get(this.yColumnSlug)\n    }\n\n    @computed get xColumnSlug(): string {\n        const { xColumnSlug } = this.manager\n        return xColumnSlug ?? this.manager.table.timeColumn.slug\n    }\n\n    @computed get isTimeScatter(): boolean {\n        return this.manager.xColumnSlug === undefined\n    }\n\n    @computed get xColumn(): CoreColumn {\n        return this.transformedTable.get(this.xColumnSlug)\n    }\n\n    @computed get sizeColumnSlug(): string | undefined {\n        return this.manager.sizeColumnSlug\n    }\n\n    @computed get sizeColumn(): CoreColumn {\n        return this.transformedTable.get(this.sizeColumnSlug)\n    }\n\n    @computed get colorColumnSlug(): string | undefined {\n        return this.manager.colorColumnSlug\n    }\n\n    @computed get colorColumn(): CoreColumn {\n        return this.transformedTable.get(this.colorColumnSlug)\n    }\n\n    @computed get colorScaleColumn(): CoreColumn {\n        return (\n            // For faceted charts, we have to get the values of inputTable before it's filtered by\n            // the faceting logic.\n            this.manager.colorScaleColumnOverride ?? // We need to use inputTable in order to get consistent coloring for a variable across\n            // charts, e.g. each continent being assigned to the same color.\n            // inputTable is unfiltered, so it contains every value that exists in the variable.\n            this.inputTable.get(this.colorColumnSlug)\n        )\n    }\n\n    @computed get colorScaleConfig(): ColorScaleConfigInterface | undefined {\n        return (\n            ColorScaleConfig.fromDSL(this.colorColumn.def) ??\n            this.manager.colorScale\n        )\n    }\n\n    @computed get hasNoDataBin(): boolean {\n        if (this.colorColumn.isMissing) return false\n        return this.colorColumn.valuesIncludingErrorValues.some(\n            (value) => !isNotErrorValue(value)\n        )\n    }\n\n    @computed private get allEntityNamesWithXAndY(): EntityName[] {\n        return intersection(\n            this.yColumn.uniqEntityNames,\n            this.xColumn.uniqEntityNames\n        )\n    }\n\n    private assignColorToSeries(\n        entityName: EntityName,\n        series: ScatterSeries\n    ): void {\n        if (series.points.length) {\n            const keyColor =\n                this.transformedTable.getColorForEntityName(entityName)\n            if (keyColor !== undefined) series.color = keyColor\n            else if (!this.colorColumn.isMissing) {\n                const colorValue = R.last(series.points)?.color\n                const color = this.colorScale.getColor(colorValue)\n                if (color !== undefined) {\n                    series.color = color\n                    series.isScaleColor = true\n                }\n            }\n        }\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        return new AxisConfig(this.manager.xAxisConfig, this)\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        return new AxisConfig(this.manager.yAxisConfig, this)\n    }\n\n    private removePointsOutsidePlane(points: SeriesPoint[]): SeriesPoint[] {\n        const { xAxisConfig, yAxisConfig } = this\n\n        if (\n            yAxisConfig.removePointsOutsideDomain ||\n            xAxisConfig.removePointsOutsideDomain\n        ) {\n            return points.filter((point) => {\n                return (\n                    !xAxisConfig.shouldRemovePoint(point.x) &&\n                    !yAxisConfig.shouldRemovePoint(point.y)\n                )\n            })\n        }\n        return points\n    }\n\n    private getPointLabel(rowIndex: number): string | undefined {\n        const strat = this.manager.scatterPointLabelStrategy\n        const { xColumn, yColumn } = this\n        const { timeColumn } = this.transformedTable\n        let label\n        if (strat === ScatterPointLabelStrategy.y) {\n            label = yColumn?.formatValue(\n                yColumn.valuesIncludingErrorValues[rowIndex]\n            )\n        } else if (strat === ScatterPointLabelStrategy.x) {\n            label = xColumn?.formatValue(\n                xColumn.valuesIncludingErrorValues[rowIndex]\n            )\n        } else {\n            label = timeColumn.formatTime(\n                timeColumn.valuesIncludingErrorValues[rowIndex] as number\n            )\n        }\n        return label\n    }\n\n    @computed private get allPointsBeforeEndpointsFilter(): SeriesPoint[] {\n        const { entityNameColumn, timeColumn } = this.transformedTable\n        const { xColumn, yColumn, sizeColumn, colorColumn } = this\n\n        // We are running this filter first because it only depends on author-specified config, not\n        // on any user interaction.\n        return this.removePointsOutsidePlane(\n            this.transformedTable.indices.map((rowIndex) => {\n                return {\n                    x: xColumn.valuesIncludingErrorValues[rowIndex] as number,\n                    y: yColumn.valuesIncludingErrorValues[rowIndex] as number,\n                    size: defaultIfErrorValue(\n                        sizeColumn.valuesIncludingErrorValues[rowIndex],\n                        undefined\n                    ) as number | undefined,\n                    color: defaultIfErrorValue(\n                        colorColumn.valuesIncludingErrorValues[rowIndex],\n                        undefined\n                    ) as string | number | undefined,\n                    entityName: entityNameColumn.valuesIncludingErrorValues[\n                        rowIndex\n                    ] as EntityName,\n                    label: this.getPointLabel(rowIndex) ?? \"\",\n                    timeValue: timeColumn.valuesIncludingErrorValues[\n                        rowIndex\n                    ] as number,\n                    time: {\n                        x: xColumn.originalTimeColumn\n                            .valuesIncludingErrorValues[rowIndex] as number,\n                        y: yColumn.originalTimeColumn\n                            .valuesIncludingErrorValues[rowIndex] as number,\n                        // Technically, to be more correct, we should support distinct\n                        // start and end times for each axis, but for simplicity we use\n                        // a single span (see getAverageAnnualChangeIndicesByEntity)\n                        span: this.manager.isRelativeMode\n                            ? [\n                                  yColumn.originalStartTimeColumn\n                                      .valuesIncludingErrorValues[\n                                      rowIndex\n                                  ] as number,\n                                  yColumn.originalTimeColumn\n                                      .valuesIncludingErrorValues[\n                                      rowIndex\n                                  ] as number,\n                              ]\n                            : undefined,\n                    },\n                }\n            })\n        )\n    }\n\n    @computed get series(): ScatterSeries[] {\n        return Object.entries(\n            _.groupBy(this.allPointsBeforeEndpointsFilter, (p) => p.entityName)\n        ).map(([entityName, points]) => {\n            const shortEntityName = getShortNameForEntity(entityName)\n            const series: ScatterSeries = {\n                seriesName: entityName,\n                label: shortEntityName ?? entityName,\n                color: SCATTER_POINT_DEFAULT_COLOR,\n                points,\n                focus: this.focusArray.state(entityName),\n            }\n            this.assignColorToSeries(entityName, series)\n            return series\n        })\n    }\n\n    /** Whether series are shown as lines (instead of single points) */\n    @computed get isConnected(): boolean {\n        return this.series.some((s) => s.points.length > 1)\n    }\n\n    @computed get allPoints(): SeriesPoint[] {\n        return this.series.flatMap((series) => series.points)\n    }\n\n    /**\n     * The columns whose values can miss the time the chart is labelled with.\n     * When the x column is pinned to a time of its own, it's meant to come\n     * from a different time, so that isn't a tolerance caveat.\n     */\n    @computed private get toleranceColumns(): CoreColumn[] {\n        return this.xOverrideTime !== undefined\n            ? [this.yColumn]\n            : [this.xColumn, this.yColumn]\n    }\n\n    @computed get toleranceNotice(): string | undefined {\n        // Time scatters plot time itself on the x axis, so there's no target\n        // time a value could be missing for\n        if (this.isTimeScatter) return undefined\n\n        return makeToleranceNotice({\n            inputTable: this.inputTable,\n            transformedTable: this.transformedTable,\n            columns: this.toleranceColumns,\n        })\n    }\n\n    @computed private get selectedPoints(): SeriesPoint[] {\n        const seriesNamesSet = this.seriesNamesToHighlight\n        return this.allPoints.filter(\n            (point) => point.entityName && seriesNamesSet.has(point.entityName)\n        )\n    }\n\n    @computed get pointsForAxisDomains(): SeriesPoint[] {\n        if (\n            !this.selectionArray.numSelectedEntities ||\n            !this.manager.zoomToSelection\n        )\n            return this.allPoints\n\n        return this.selectedPoints.length ? this.selectedPoints : this.allPoints\n    }\n\n    // domains across the entire timeline\n    private domainDefault(property: \"x\" | \"y\"): [number, number] {\n        const scaleType = property === \"x\" ? this.xScaleType : this.yScaleType\n        const defaultDomain: [number, number] =\n            scaleType === ScaleType.log ? [1, 100] : [-1, 1]\n        return (\n            domainExtent(\n                this.pointsForAxisDomains.map((point) => point[property]),\n                scaleType,\n                this.manager.zoomToSelection && this.selectedPoints.length\n                    ? 1.1\n                    : 1\n            ) ?? defaultDomain\n        )\n    }\n\n    @computed get xDomainDefault(): [number, number] {\n        return this.domainDefault(\"x\")\n    }\n\n    @computed get yDomainDefault(): [number, number] {\n        return this.domainDefault(\"y\")\n    }\n\n    @computed get sizeDomain(): [number, number] {\n        if (this.sizeColumn.isMissing) return [1, 100]\n        if (\n            this.manager.isSingleTimeScatterAnimationActive &&\n            this.domainsForAnimation.size\n        ) {\n            return this.domainsForAnimation.size\n        }\n        return computeSizeDomain(this.transformedTable, this.sizeColumn.slug)\n    }\n\n    @computed get domainsForAnimation(): {\n        x?: ValueRange\n        y?: ValueRange\n        size?: ValueRange\n    } {\n        const { inputTable } = this\n        const { animationStartTime, animationEndTime } = this.manager\n\n        if (!animationStartTime || !animationEndTime) return {}\n\n        let table = inputTable.filterByTimeRange(\n            animationStartTime,\n            animationEndTime\n        )\n\n        if (this.manager.matchingEntitiesOnly && !this.colorColumn.isMissing) {\n            table = table.filterByEntityNames(\n                table.get(this.colorColumnSlug).uniqEntityNames\n            )\n        }\n\n        table = table\n            .columnFilter(\n                this.xColumnSlug,\n                _.isNumber,\n                \"Drop rows with non-number values in X column\"\n            )\n            .columnFilter(\n                this.yColumnSlug,\n                _.isNumber,\n                \"Drop rows with non-number values in Y column\"\n            )\n\n        const xValues = table.get(this.xColumnSlug).uniqValues\n        const yValues = table.get(this.yColumnSlug).uniqValues\n\n        return {\n            x: domainExtent(xValues, this.xScaleType),\n            y: domainExtent(yValues, this.yScaleType),\n            size: computeSizeDomain(table, this.sizeColumn.slug),\n        }\n    }\n\n    @computed get validValuesForAxisDomainX(): number[] {\n        const { xScaleType, pointsForAxisDomains } = this\n\n        const values = pointsForAxisDomains.map((point) => point.x)\n        return xScaleType === ScaleType.log\n            ? values.filter((v) => v > 0)\n            : values\n    }\n\n    @computed get validValuesForAxisDomainY(): number[] {\n        const { yScaleType, pointsForAxisDomains } = this\n\n        const values = pointsForAxisDomains.map((point) => point.y)\n        return yScaleType === ScaleType.log\n            ? values.filter((v) => v > 0)\n            : values\n    }\n\n    @computed get verticalAxisLabel(): string {\n        const yAxisConfig = this.manager.yAxisConfig\n\n        let label = yAxisConfig?.label || this.yColumn?.displayName || \"\"\n\n        if (this.manager.isRelativeMode && label && label.length > 1) {\n            label = `Average annual change in ${lowerCaseFirstLetterUnlessAbbreviation(\n                label\n            )}`\n        }\n\n        return label.trim()\n    }\n\n    @computed private get horizontalAxisLabelBase(): string {\n        const xDimName = this.xColumn?.displayName ?? \"\"\n        if (this.xOverrideTime !== undefined)\n            return `${xDimName} in ${this.xOverrideTime}`\n        return xDimName\n    }\n\n    @computed get horizontalAxisLabel(): string {\n        const xAxisConfig = this.manager.xAxisConfig\n\n        let label = xAxisConfig?.label || this.horizontalAxisLabelBase\n        if (this.manager.isRelativeMode && label && label.length > 1) {\n            label = `Average annual change in ${lowerCaseFirstLetterUnlessAbbreviation(\n                label\n            )}`\n        }\n\n        return label.trim()\n    }\n\n    toHorizontalAxis(config: AxisConfig): HorizontalAxis {\n        const axis = config.toHorizontalAxis()\n\n        axis.formatColumn = this.xColumn\n        axis.scaleType = this.xScaleType\n\n        if (this.horizontalAxisLabel) axis.label = this.horizontalAxisLabel\n\n        if (\n            this.manager.isSingleTimeScatterAnimationActive &&\n            this.domainsForAnimation.x\n        ) {\n            axis.updateDomainPreservingUserSettings(this.domainsForAnimation.x)\n        } else if (this.manager.isRelativeMode) {\n            axis.domain = this.xDomainDefault // Overwrite author's min/max\n        } else {\n            const isAnyValueOutsideUserDomain =\n                this.validValuesForAxisDomainX.some(\n                    (value) => value < axis.domain[0] || value > axis.domain[1]\n                )\n\n            // only overwrite the authors's min/max if there is more than one unique value along the x-axis\n            // or if respecting the author's setting would hide data points\n            if (\n                new Set(this.validValuesForAxisDomainX).size > 1 ||\n                isAnyValueOutsideUserDomain\n            ) {\n                axis.updateDomainPreservingUserSettings(this.xDomainDefault)\n            }\n        }\n\n        return axis\n    }\n\n    toVerticalAxis(config: AxisConfig): VerticalAxis {\n        const axis = config.toVerticalAxis()\n\n        axis.formatColumn = this.yColumn\n        axis.scaleType = this.yScaleType\n        if (this.verticalAxisLabel) axis.label = this.verticalAxisLabel\n\n        if (\n            this.manager.isSingleTimeScatterAnimationActive &&\n            this.domainsForAnimation.y\n        ) {\n            axis.updateDomainPreservingUserSettings(this.domainsForAnimation.y)\n        } else if (this.manager.isRelativeMode) {\n            axis.domain = this.yDomainDefault // Overwrite author's min/max\n        } else {\n            const isAnyValueOutsideUserDomain =\n                this.validValuesForAxisDomainY.some(\n                    (value) => value < axis.domain[0] || value > axis.domain[1]\n                )\n\n            // only overwrite the authors's min/max if there is more than one unique value along the y-axis\n            // or if respecting the author's setting would hide data points\n            if (\n                new Set(this.validValuesForAxisDomainY).size > 1 ||\n                isAnyValueOutsideUserDomain\n            ) {\n                axis.updateDomainPreservingUserSettings(this.yDomainDefault)\n            }\n        }\n\n        return axis\n    }\n\n    @computed get errorInfo(): ChartErrorInfo {\n        if (this.yColumn.isMissing) return { reason: \"Missing Y axis variable\" }\n\n        if (this.xColumn.isMissing) return { reason: \"Missing X axis variable\" }\n\n        const { entityTypePlural = \"entities\" } = this.manager\n        if (_.isEmpty(this.allEntityNamesWithXAndY)) {\n            if (\n                this.manager.isRelativeMode &&\n                this.manager.hasTimeline &&\n                this.manager.startTime === this.manager.endTime\n            ) {\n                return {\n                    reason: \"Please select a start and end point on the timeline below\",\n                }\n            }\n            return {\n                reason: `No ${entityTypePlural} with data for both X and Y`,\n            }\n        }\n\n        if (_.isEmpty(this.series))\n            return {\n                reason: `No data for any ${entityTypePlural}`,\n            }\n\n        return { reason: \"\" }\n    }\n}\n","import * as _ from \"lodash-es\"\nimport { computed, makeObservable } from \"mobx\"\nimport { ChartState } from \"../chart/ChartInterface\"\nimport { ColorScale, ColorScaleManager } from \"../color/ColorScale\"\nimport {\n    EntityColorData,\n    MarimekkoChartManager,\n    MarimekkoSeries,\n} from \"./MarimekkoChartConstants\"\nimport { CoreColumn, OwidTable } from \"@ourworldindata/core-table\"\nimport {\n    autoDetectYColumnSlugs,\n    getShortNameForEntity,\n    makeSelectionArray,\n} from \"../chart/ChartUtils\"\nimport { ColorScaleConfig } from \"../color/ColorScaleConfig\"\nimport {\n    ChartErrorInfo,\n    ColorSchemeName,\n    EntityName,\n    ColorScaleConfigInterface,\n    ScaleType,\n    Color,\n} from \"@ourworldindata/types\"\nimport { OWID_NO_DATA_GRAY } from \"../color/ColorConstants\"\nimport { ColorScheme } from \"../color/ColorScheme\"\nimport { ColorSchemes } from \"../color/ColorSchemes\"\nimport { excludeUndefined } from \"@ourworldindata/utils\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { FocusArray } from \"../focus/FocusArray\"\nimport { InteractionState } from \"../interaction/InteractionState.js\"\nimport { AxisConfig } from \"../axis/AxisConfig.js\"\nimport { HorizontalAxis, VerticalAxis } from \"../axis/Axis.js\"\nimport { makeToleranceNotice } from \"../chart/ToleranceNotice.js\"\n\nexport class MarimekkoChartState implements ChartState, ColorScaleManager {\n    manager: MarimekkoChartManager\n\n    colorScale: ColorScale\n    defaultBaseColorScheme = ColorSchemeName.continents\n    defaultNoDataColor = OWID_NO_DATA_GRAY\n\n    constructor({ manager }: { manager: MarimekkoChartManager }) {\n        this.manager = manager\n        this.colorScale = manager.colorScaleOverride ?? new ColorScale(this)\n        makeObservable(this)\n    }\n\n    @computed get inputTable(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed get transformedTable(): OwidTable {\n        const { inputTable } = this\n        return this.manager.transformedTable ?? this.transformTable(inputTable)\n    }\n\n    transformTable(table: OwidTable): OwidTable {\n        const { yColumnSlug, manager, colorColumnSlug, xColumnSlug } = this\n        if (yColumnSlug === undefined) return table\n\n        // TODO: remove this filter once we don't have mixed type columns in datasets\n        table = table.replaceNonNumericCellsWithErrorValues([yColumnSlug])\n\n        if (colorColumnSlug && manager.matchingEntitiesOnly)\n            table = table.dropRowsWithErrorValuesForColumn(colorColumnSlug)\n\n        // We want to \"chop off\" any rows outside the time domain for X and Y to avoid creating\n        // leading and trailing timeline times that don't really exist in the dataset.\n        const xySlugs = xColumnSlug ? [xColumnSlug, yColumnSlug] : [yColumnSlug]\n        const [timeDomainStart, timeDomainEnd] = table.timeDomainFor(xySlugs)\n        table = table.filterByTimeRange(\n            timeDomainStart ?? -Infinity,\n            timeDomainEnd ?? Infinity\n        )\n\n        table = table.interpolateColumnWithTolerance(yColumnSlug)\n\n        if (xColumnSlug)\n            table = table.interpolateColumnWithTolerance(xColumnSlug)\n\n        if (!manager.showNoDataArea)\n            table = table.dropRowsWithErrorValuesForAllColumns([yColumnSlug])\n\n        if (xColumnSlug)\n            table = table.dropRowsWithErrorValuesForColumn(xColumnSlug)\n        if (manager.isRelativeMode) {\n            // TODO: this should not be necessary but we sometimes get NoMatchingValuesAfterJoin if both relative and showNoDataArea are set\n            table = table.dropRowsWithErrorValuesForColumn(\n                table.timeColumn.slug\n            )\n            if (xColumnSlug) {\n                table = table.toPercentageFromEachEntityForEachTime(xColumnSlug)\n\n                // relativized columns ditch their units, making \"Population %\" hard to parse. Add a sensible replacement\n                Object.assign(table.get(xColumnSlug)?.def, {\n                    unit: \"share of total\",\n                })\n            }\n        }\n\n        return table\n    }\n\n    @computed get selectionArray(): SelectionArray {\n        return makeSelectionArray(this.manager.selection)\n    }\n\n    @computed get focusArray(): FocusArray {\n        return this.manager.focusArray ?? new FocusArray()\n    }\n\n    @computed get isFocusModeActive(): boolean {\n        return this.focusArray.hasFocusedSeries\n    }\n\n    private focusOrSelectionState(entityName: EntityName): InteractionState {\n        const isSingledOut =\n            this.focusArray.has(entityName) ||\n            this.selectionArray.selectedSet.has(entityName)\n        const isModeActive =\n            this.focusArray.hasFocusedSeries || this.selectionArray.hasSelection\n        return new InteractionState(isSingledOut, isModeActive)\n    }\n\n    @computed get yColumnSlug(): string | undefined {\n        const slugs =\n            this.manager.yColumnSlugs ?? autoDetectYColumnSlugs(this.manager)\n        return slugs[0]\n    }\n\n    @computed get yColumn(): CoreColumn {\n        return this.transformedTable.get(this.yColumnSlug)\n    }\n\n    @computed get formatColumn(): CoreColumn {\n        return this.yColumn\n    }\n\n    @computed get xColumnSlug(): string | undefined {\n        return this.manager.xColumnSlug\n    }\n\n    @computed get xColumn(): CoreColumn | undefined {\n        if (this.xColumnSlug === undefined) return undefined\n        return this.transformedTable.get(this.xColumnSlug)\n    }\n\n    @computed get colorColumnSlug(): string | undefined {\n        return this.manager.colorColumnSlug\n    }\n\n    @computed get toleranceNotice(): string | undefined {\n        return makeToleranceNotice({\n            inputTable: this.inputTable,\n            transformedTable: this.transformedTable,\n            columns: excludeUndefined([this.yColumn, this.xColumn]),\n        })\n    }\n\n    @computed get colorColumn(): CoreColumn {\n        return this.transformedTable.get(this.colorColumnSlug)\n    }\n\n    @computed get colorScaleConfig(): ColorScaleConfigInterface | undefined {\n        return (\n            ColorScaleConfig.fromDSL(this.colorColumn.def) ??\n            this.manager.colorScale\n        )\n    }\n\n    @computed get colorScaleColumn(): CoreColumn {\n        const { manager, inputTable } = this\n        return (\n            manager.colorScaleColumnOverride ??\n            inputTable.get(this.colorColumnSlug)\n        )\n    }\n\n    @computed private get colorScheme(): ColorScheme {\n        return (\n            (this.manager.baseColorScheme\n                ? ColorSchemes.get(this.manager.baseColorScheme)\n                : undefined) ??\n            ColorSchemes.get(ColorSchemeName[\"owid-distinct\"])\n        )\n    }\n\n    @computed get yColumnColor(): Color {\n        return this.yColumn.def.color ?? this.colorScheme.getColors(1)[0]\n    }\n\n    @computed get x0(): number {\n        return 0\n    }\n\n    @computed get y0(): number {\n        return 0\n    }\n\n    @computed get domainColorForEntityMap(): Map<string, EntityColorData> {\n        const { colorColumn, colorScale, uniqueEntityNames } = this\n        const hasColorColumn = !colorColumn.isMissing\n        const colorRowsByEntity = hasColorColumn\n            ? colorColumn.owidRowsByEntityName\n            : undefined\n        const domainColorMap = new Map<string, EntityColorData>()\n        if (uniqueEntityNames !== undefined) {\n            for (const name of uniqueEntityNames) {\n                const colorDomainValue = colorRowsByEntity?.get(name)?.[0]\n\n                if (colorDomainValue) {\n                    const color = colorScale.getColor(colorDomainValue.value)\n                    if (color)\n                        domainColorMap.set(name, {\n                            color,\n                            colorDomainValue: colorDomainValue.value,\n                        })\n                }\n            }\n        }\n        return domainColorMap\n    }\n\n    @computed private get uniqueEntityNames(): EntityName[] | undefined {\n        return this.xColumn?.uniqEntityNames ?? this.yColumn.uniqEntityNames\n    }\n\n    @computed get series(): readonly MarimekkoSeries[] {\n        const {\n            xColumn,\n            yColumn,\n            yColumnColor,\n            domainColorForEntityMap,\n            uniqueEntityNames,\n        } = this\n\n        if (uniqueEntityNames === undefined) return []\n\n        const yRowsByEntity = yColumn.owidRowsByEntityName\n        const xRowsByEntity = xColumn?.owidRowsByEntityName\n\n        return excludeUndefined(\n            uniqueEntityNames.map((entityName) => {\n                const xRow = xRowsByEntity?.get(entityName)?.[0]\n                if (xColumn && !xRow) return undefined\n\n                const yRow = yRowsByEntity.get(entityName)?.[0]\n                const entityColor = domainColorForEntityMap.get(entityName)\n\n                return {\n                    seriesName: entityName,\n                    entityName,\n                    shortEntityName: getShortNameForEntity(entityName),\n                    xPoint: xRow\n                        ? { value: xRow.value, time: xRow.originalTime }\n                        : undefined,\n                    yPoint: yRow\n                        ? { value: yRow.value, time: yRow.originalTime }\n                        : undefined,\n                    color: entityColor?.color ?? yColumnColor,\n                    entityColor,\n                    focus: this.focusOrSelectionState(entityName),\n                }\n            })\n        )\n    }\n\n    /** Bars run left to right from the largest y value down, entities without a value last */\n    @computed get sortedSeries(): MarimekkoSeries[] {\n        const byYValue = (series: MarimekkoSeries): number =>\n            series.yPoint?.value ?? 0\n        const byEntityName = (series: MarimekkoSeries): string =>\n            series.entityName\n\n        const descendingByYValue = _.sortBy(this.series, [\n            byYValue,\n            byEntityName,\n        ]).toReversed()\n\n        // The no-data area is drawn as one rectangle spanning the entities without a\n        // value, and MarimekkoBars asserts they are contiguous, so they go last.\n        const [seriesWithValues, seriesWithoutValues] = _.partition(\n            descendingByYValue,\n            (series) => series.yPoint !== undefined\n        )\n\n        return [...seriesWithValues, ...seriesWithoutValues]\n    }\n\n    @computed get selectedSeries(): MarimekkoSeries[] {\n        const selectedSet = this.selectionArray.selectedSet\n        if (selectedSet.size === 0) return []\n        return this.sortedSeries.filter((series) =>\n            selectedSet.has(series.entityName)\n        )\n    }\n\n    @computed get yDomainDefault(): [number, number] {\n        // Every row, not one per entity: the domain covers the whole column\n        const values = this.yColumn.owidRows.map((row) => row.value)\n        return [\n            Math.min(this.y0, _.min(values) as number),\n            Math.max(this.y0, _.max(values) as number),\n        ]\n    }\n\n    @computed get xDomainDefault(): [number, number] {\n        const { xColumn } = this\n        if (xColumn !== undefined) {\n            const sum = _.sumBy(xColumn.owidRows, (row) => row.value)\n            return [this.x0, sum]\n        } else return [this.x0, this.series.length]\n    }\n\n    @computed private get xAxisLabelBase(): string {\n        const xDimName = this.defaultXAxisLabel\n        if (this.manager.xOverrideTime !== undefined)\n            return `${xDimName} in ${this.manager.xOverrideTime}`\n        return xDimName ?? \"\" // This sets the axis label to emtpy if we don't have an x column - not entirely sure this is what we want\n    }\n\n    @computed private get defaultXAxisLabel(): string | undefined {\n        return this.xColumn?.displayName\n    }\n\n    @computed get horizontalAxisLabel(): string {\n        const { xAxisLabelBase } = this\n        const config = this.manager.xAxisConfig\n        return config?.label || xAxisLabelBase\n    }\n\n    toHorizontalAxis(config: AxisConfig): HorizontalAxis {\n        let axis = config.toHorizontalAxis()\n        if (this.manager.isRelativeMode && this.xColumn) {\n            // MobX and classes  interact in an annoying way here so we have to construct a new object via\n            // an object copy of the AxisConfig class instance to be able to set a property without\n            // making MobX unhappy about a mutation originating from a computed property\n            axis = new HorizontalAxis(\n                new AxisConfig(\n                    { ...config.toObject(), maxTicks: 10 },\n                    config.axisManager\n                ),\n                config.axisManager\n            )\n            axis.domain = [0, 100]\n        } else {\n            axis.updateDomainPreservingUserSettings(this.xDomainDefault)\n        }\n\n        // Marimekko charts should always use linear scale\n        axis.scaleType = ScaleType.linear\n        axis.formatColumn = this.xColumn\n\n        axis.label = this.horizontalAxisLabel\n\n        return axis\n    }\n\n    toVerticalAxis(config: AxisConfig): VerticalAxis {\n        const axis = config.toVerticalAxis()\n        axis.updateDomainPreservingUserSettings(this.yDomainDefault)\n\n        axis.scaleType = ScaleType.linear\n        axis.formatColumn = this.formatColumn\n        axis.label = \"\"\n\n        return axis\n    }\n\n    @computed get errorInfo(): ChartErrorInfo {\n        if (this.yColumnSlug === undefined)\n            return { reason: \"No Y column to chart\" }\n\n        return this.yColumn.isEmpty\n            ? { reason: \"No matching data\" }\n            : { reason: \"\" }\n    }\n}\n","import { ChartManager } from \"../chart/ChartManager\"\nimport { ChartSeries } from \"../chart/ChartInterface\"\nimport { InteractionState } from \"../interaction/InteractionState\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport {\n    Color,\n    DumbbellTrendColorMap,\n    EntityName,\n    SortBy,\n} from \"@ourworldindata/types\"\nimport { TextWrap } from \"@ourworldindata/components\"\nimport { SeriesLabelState } from \"../seriesLabel/SeriesLabelState\"\nimport { GRAPHER_OPACITY_MUTED } from \"../core/GrapherConstants.js\"\nimport {\n    GRAPHER_DARK_TEXT,\n    GRAPHER_DENIM,\n    GRAPHER_LIGHT_TEXT,\n    OWID_NO_DATA_GRAY,\n} from \"../color/ColorConstants.js\"\nimport { OwidDistinctColors } from \"../color/CustomSchemes.js\"\n\n/** Horizontal gap between the value label and the dumbbell */\nexport const VALUE_LABEL_DOT_GAP = 6\n\n/** Horizontal gap between entity labels and the chart area */\nexport const ENTITY_LABEL_CHART_GAP = 8\n\n/** Vertical gap between the top legend and the chart area */\nexport const TOP_LEGEND_BOTTOM_PADDING = 4\n\n/** Minimum horizontal gap between legend labels */\nexport const MIN_LEGEND_LABEL_GAP = 8\n\nexport const NO_CHANGE_COLOR = OWID_NO_DATA_GRAY\n\nexport const DEFAULT_DUMBBELL_TREND_COLOR_MAP = {\n    increase: OwidDistinctColors.TealishGreen,\n    decrease: OwidDistinctColors.Coral,\n} satisfies DumbbellTrendColorMap\n\nexport const START_COLUMN_COLOR = GRAPHER_DENIM\nexport const END_COLUMN_COLOR = \"#B13507\"\n\n/**\n * A dumbbell always plots one row per entity. What its two ends compare\n * depends on the mode:\n * - TimeRange: one column's values across two time points\n * - TwoColumn: two different columns' values at a single time point\n */\nexport enum DumbbellMode {\n    TimeRange = \"TimeRange\",\n    TwoColumn = \"TwoColumn\",\n}\n\nexport type DumbbellChartManager = ChartManager\n\nexport interface DumbbellSeries extends ChartSeries {\n    color: Color\n    entityName: EntityName\n    displayName: string\n    shortEntityName?: string\n    annotation?: string\n    start: DumbbellHead\n    end: DumbbellHead\n    focus: InteractionState\n}\n\nexport interface SizedDumbbellSeries extends DumbbellSeries {\n    label: SeriesLabelState\n    annotationTextWrap?: TextWrap\n    start: SizedDumbbellHead\n    end: SizedDumbbellHead\n}\n\nexport interface PlacedDumbbellSeries extends SizedDumbbellSeries {\n    y: number\n    labelPosition: { x: number; yOffset: number }\n    annotationPosition?: { x: number; yOffset: number }\n    start: PlacedDumbbellHead\n    end: PlacedDumbbellHead\n}\n\nexport interface RenderDumbbellSeries extends PlacedDumbbellSeries {\n    emphasis: Emphasis\n}\n\nexport interface DumbbellHead {\n    value: number\n    time: number\n    color: string\n}\n\nexport interface DumbbellValueLabel {\n    text: string\n    width: number\n    padding: number\n}\n\ninterface SizedDumbbellHead extends DumbbellHead {\n    label?: DumbbellValueLabel\n    radius: number\n}\n\nexport interface PlacedDumbbellHead extends SizedDumbbellHead {\n    x: number\n}\n\nexport type LabelledDumbbellHead = PlacedDumbbellHead & {\n    label: DumbbellValueLabel\n}\n\ninterface DumbbellStyle {\n    opacity: number\n    labelColor: string\n}\n\nconst DEFAULT_DUMBBELL_STYLE: DumbbellStyle = {\n    opacity: 1,\n    labelColor: GRAPHER_LIGHT_TEXT,\n}\n\nexport const DUMBBELL_STYLE: Record<Emphasis, DumbbellStyle> = {\n    [Emphasis.Default]: DEFAULT_DUMBBELL_STYLE,\n    [Emphasis.Elevated]: DEFAULT_DUMBBELL_STYLE,\n    [Emphasis.Highlighted]: {\n        ...DEFAULT_DUMBBELL_STYLE,\n        labelColor: GRAPHER_DARK_TEXT,\n    },\n    [Emphasis.Muted]: {\n        ...DEFAULT_DUMBBELL_STYLE,\n        opacity: GRAPHER_OPACITY_MUTED,\n    },\n}\n\nexport interface LegendLabel {\n    text: string\n    color: string\n}\n\nexport const DUMBBELL_SORT_KEYS = [\n    SortBy.custom,\n    SortBy.entityName,\n    SortBy.total,\n    SortBy.column,\n    SortBy.change,\n    SortBy.startValue,\n    SortBy.endValue,\n] as const\nexport type DumbbellSortKey = (typeof DUMBBELL_SORT_KEYS)[number]\n","import { observable, makeObservable } from \"mobx\"\nimport {\n    DumbbellChartConfigInterface,\n    DumbbellConnectorStyle,\n    DumbbellTrendColorMap,\n    DumbbellValueLabelMode,\n} from \"@ourworldindata/types\"\nimport {\n    Persistable,\n    updatePersistables,\n    objectWithPersistablesToObject,\n    deleteRuntimeAndUnchangedProps,\n    trimObject,\n    NoUndefinedValues,\n} from \"@ourworldindata/utils\"\n\nexport const DUMBBELL_CHART_CONFIG_DEFAULTS = {\n    connectorStyle: DumbbellConnectorStyle.Arrow,\n    valueLabelMode: DumbbellValueLabelMode.Absolute,\n} satisfies Partial<DumbbellChartConfigInterface>\n\nclass DumbbellChartConfigDefaults {\n    connectorStyle: DumbbellConnectorStyle =\n        DUMBBELL_CHART_CONFIG_DEFAULTS.connectorStyle\n    valueLabelMode: DumbbellValueLabelMode =\n        DUMBBELL_CHART_CONFIG_DEFAULTS.valueLabelMode\n    trendColorMap: DumbbellTrendColorMap = {}\n\n    constructor() {\n        makeObservable(this, {\n            connectorStyle: observable.ref,\n            valueLabelMode: observable.ref,\n            trendColorMap: observable.ref,\n        })\n    }\n}\n\nexport class DumbbellChartConfig\n    extends DumbbellChartConfigDefaults\n    implements Persistable\n{\n    updateFromObject(obj: Partial<DumbbellChartConfigInterface>): void {\n        updatePersistables(this, obj)\n    }\n\n    toObject(): NoUndefinedValues<DumbbellChartConfigInterface> {\n        const obj = objectWithPersistablesToObject(\n            this\n        ) as DumbbellChartConfigInterface\n        deleteRuntimeAndUnchangedProps(obj, new DumbbellChartConfigDefaults())\n        return trimObject(obj)\n    }\n\n    constructor(obj?: Partial<DumbbellChartConfigInterface>) {\n        super()\n        if (obj) this.updateFromObject(obj)\n    }\n}\n","import * as R from \"remeda\"\nimport { computed, makeObservable } from \"mobx\"\nimport {\n    ColumnSlug,\n    DumbbellConnectorStyle,\n    DumbbellValueLabelMode,\n    ScaleType,\n    ChartErrorInfo,\n    SortBy,\n    SortConfig,\n    DumbbellTrendColorMap,\n} from \"@ourworldindata/types\"\nimport { OwidTable, CoreColumn } from \"@ourworldindata/core-table\"\nimport { domainExtent } from \"@ourworldindata/utils\"\nimport { ChartState } from \"../chart/ChartInterface\"\nimport { makeToleranceNotice } from \"../chart/ToleranceNotice\"\nimport {\n    DEFAULT_DUMBBELL_TREND_COLOR_MAP,\n    DUMBBELL_SORT_KEYS,\n    DumbbellChartManager,\n    DumbbellHead,\n    DumbbellMode,\n    DumbbellSeries,\n    DumbbellSortKey,\n    END_COLUMN_COLOR,\n    NO_CHANGE_COLOR,\n    START_COLUMN_COLOR,\n} from \"./DumbbellChartConstants\"\nimport { DUMBBELL_CHART_CONFIG_DEFAULTS } from \"./DumbbellChartConfig\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { FocusArray } from \"../focus/FocusArray\"\nimport {\n    autoDetectYColumnSlugs,\n    getDefaultFailMessage,\n    getShortNameForEntity,\n    isToleranceDistanceValid,\n    makeSelectionArray,\n    sortByConfig,\n    SortKeyFn,\n    sortByColumnValue,\n} from \"../chart/ChartUtils\"\nimport {\n    AnnotationsMap,\n    getAnnotationsMap,\n    getAnnotationsForSeries,\n} from \"../lineCharts/LineChartHelpers\"\n\nexport class DumbbellChartState implements ChartState {\n    manager: DumbbellChartManager\n\n    constructor({ manager }: { manager: DumbbellChartManager }) {\n        this.manager = manager\n        makeObservable(this)\n    }\n\n    @computed get inputTable(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed get transformedTable(): OwidTable {\n        return (\n            this.manager.transformedTable ??\n            this.transformTable(this.inputTable)\n        )\n    }\n\n    transformTable(table: OwidTable): OwidTable {\n        table = table.filterByEntityNames(\n            this.selectionArray.selectedEntityNames\n        )\n\n        table = table.replaceNonNumericCellsWithErrorValues(this.yColumnSlugs)\n\n        this.yColumnSlugs.forEach((slug) => {\n            table = table.interpolateColumnWithTolerance(slug)\n        })\n\n        return table\n    }\n\n    @computed get selectionArray(): SelectionArray {\n        return makeSelectionArray(this.manager.selection)\n    }\n\n    @computed get focusArray(): FocusArray {\n        return this.manager.focusArray ?? new FocusArray()\n    }\n\n    @computed get yColumnSlugs(): ColumnSlug[] {\n        return autoDetectYColumnSlugs(this.manager)\n    }\n\n    @computed get yColumns(): CoreColumn[] {\n        return this.yColumnSlugs.map((slug) => this.transformedTable.get(slug))\n    }\n\n    @computed get yColumn(): CoreColumn {\n        return this.yColumns[0]\n    }\n\n    @computed get formatColumn(): CoreColumn {\n        return this.yColumns[0]\n    }\n\n    @computed get startTime(): number {\n        return this.transformedTable.minTime ?? 0\n    }\n\n    @computed get endTime(): number {\n        return this.transformedTable.maxTime ?? 0\n    }\n\n    /**\n     * Determines how dumbbell series are constructed:\n     * - TimeRange: compares one column's values across two time points\n     * - TwoColumn: compares two different columns' values at a single time point\n     */\n    @computed get mode(): DumbbellMode {\n        return this.yColumnSlugs.length > 1\n            ? DumbbellMode.TwoColumn\n            : DumbbellMode.TimeRange\n    }\n\n    @computed get columnColors(): { start: string; end: string } {\n        const [startColumn, endColumn] = this.yColumns\n        return {\n            start: startColumn?.def.color ?? START_COLUMN_COLOR,\n            end: endColumn?.def.color ?? END_COLUMN_COLOR,\n        }\n    }\n\n    /** Colors for the time-range encoding, by direction of change */\n    @computed get directionColors(): Required<DumbbellTrendColorMap> {\n        const trendColorMap = this.manager.dumbbell?.trendColorMap\n        return {\n            increase:\n                trendColorMap?.increase ??\n                DEFAULT_DUMBBELL_TREND_COLOR_MAP.increase,\n            decrease:\n                trendColorMap?.decrease ??\n                DEFAULT_DUMBBELL_TREND_COLOR_MAP.decrease,\n        }\n    }\n\n    @computed get connectorStyle(): DumbbellConnectorStyle {\n        return (\n            this.manager.dumbbell?.connectorStyle ??\n            DUMBBELL_CHART_CONFIG_DEFAULTS.connectorStyle\n        )\n    }\n\n    @computed get valueLabelMode(): DumbbellValueLabelMode {\n        return (\n            this.manager.dumbbell?.valueLabelMode ??\n            DUMBBELL_CHART_CONFIG_DEFAULTS.valueLabelMode\n        )\n    }\n\n    @computed private get annotationsMap(): AnnotationsMap | undefined {\n        return getAnnotationsMap(this.inputTable, this.yColumnSlugs[0])\n    }\n\n    @computed private get sortConfig(): SortConfig {\n        return this.manager.sortConfig ?? {}\n    }\n\n    @computed private get sortColumn(): CoreColumn | undefined {\n        const sortColumnSlug = this.sortConfig.sortColumnSlug\n        if (!sortColumnSlug) return undefined\n\n        const sortColumn = this.transformedTable.get(sortColumnSlug)\n        if (sortColumn && !sortColumn.isMissing) return sortColumn\n\n        return undefined\n    }\n\n    /** Constructs series by comparing the same column's values across two time points */\n    private constructSeriesForTimeRange(): DumbbellSeries[] {\n        const {\n            yColumn,\n            startTime,\n            endTime,\n            focusArray,\n            annotationsMap,\n            directionColors: colors,\n        } = this\n\n        return this.selectionArray.selectedEntityNames\n            .map((entityName): DumbbellSeries | undefined => {\n                const rowsByTime =\n                    yColumn.owidRowByEntityNameAndTime.get(entityName)\n\n                const startRow = rowsByTime?.get(startTime)\n                const endRow = rowsByTime?.get(endTime)\n\n                // We can't plot a dumbbell if either the start or end value is missing or non-numeric\n                if (\n                    typeof startRow?.value !== \"number\" ||\n                    typeof endRow?.value !== \"number\"\n                )\n                    return undefined\n\n                if (\n                    !isToleranceDistanceValid({\n                        start: startRow,\n                        end: endRow,\n                        tolerance: yColumn.tolerance,\n                    })\n                )\n                    return undefined\n\n                // The color of the dumbbell is determined by whether\n                // the value has increased or decreased over time\n                const color =\n                    startRow.value === endRow.value\n                        ? NO_CHANGE_COLOR\n                        : startRow.value < endRow.value\n                          ? colors.increase\n                          : colors.decrease\n\n                const start = {\n                    value: startRow.value,\n                    time: startRow.originalTime,\n                    color,\n                } satisfies DumbbellHead\n                const end = {\n                    value: endRow.value,\n                    time: endRow.originalTime,\n                    color,\n                } satisfies DumbbellHead\n\n                const shortEntityName = getShortNameForEntity(entityName)\n                const displayName = shortEntityName ?? entityName\n\n                const annotation = getAnnotationsForSeries(\n                    annotationsMap,\n                    entityName\n                )\n\n                return {\n                    seriesName: entityName,\n                    entityName,\n                    displayName,\n                    shortEntityName,\n                    annotation,\n                    color,\n                    start,\n                    end,\n                    focus: focusArray.state(entityName),\n                }\n            })\n            .filter((series) => series !== undefined)\n    }\n\n    /** Constructs series by comparing two different columns' values at a single time point */\n    private constructSeriesForTwoColumns(): DumbbellSeries[] {\n        const { endTime, focusArray, annotationsMap, columnColors } = this\n        const [startColumn, endColumn] = this.yColumns\n\n        if (!startColumn || !endColumn) return []\n\n        return this.selectionArray.selectedEntityNames\n            .map((entityName): DumbbellSeries | undefined => {\n                const startRow = startColumn.owidRowByEntityNameAndTime\n                    .get(entityName)\n                    ?.get(endTime)\n                const endRow = endColumn.owidRowByEntityNameAndTime\n                    .get(entityName)\n                    ?.get(endTime)\n\n                // We can't plot a dumbbell if either the start or end value is missing or non-numeric\n                if (\n                    typeof startRow?.value !== \"number\" ||\n                    typeof endRow?.value !== \"number\"\n                )\n                    return undefined\n\n                const start = {\n                    value: startRow.value,\n                    time: startRow.originalTime,\n                    color: columnColors.start,\n                } satisfies DumbbellHead\n                const end = {\n                    value: endRow.value,\n                    time: endRow.originalTime,\n                    color: columnColors.end,\n                } satisfies DumbbellHead\n\n                const shortEntityName = getShortNameForEntity(entityName)\n                const displayName = shortEntityName ?? entityName\n\n                const annotation = getAnnotationsForSeries(\n                    annotationsMap,\n                    entityName\n                )\n\n                return {\n                    seriesName: entityName,\n                    entityName,\n                    displayName,\n                    shortEntityName,\n                    annotation,\n                    color: columnColors.start,\n                    start,\n                    end,\n                    focus: focusArray.state(entityName),\n                }\n            })\n            .filter((series) => series !== undefined)\n    }\n\n    @computed private get unsortedSeries(): DumbbellSeries[] {\n        return this.mode === DumbbellMode.TimeRange\n            ? this.constructSeriesForTimeRange()\n            : this.constructSeriesForTwoColumns()\n    }\n\n    @computed get series(): DumbbellSeries[] {\n        const keyFns: Record<DumbbellSortKey, SortKeyFn<DumbbellSeries>> = {\n            [SortBy.custom]: (series): number =>\n                this.selectionArray.selectedEntityNames.indexOf(\n                    series.entityName\n                ),\n            [SortBy.entityName]: (series): string => series.entityName,\n            [SortBy.total]: (series): number =>\n                series.start.value + series.end.value,\n            [SortBy.change]: (series): number =>\n                series.end.value - series.start.value,\n            [SortBy.startValue]: (series): number => series.start.value,\n            [SortBy.endValue]: (series): number => series.end.value,\n            [SortBy.column]: sortByColumnValue(\n                this.sortColumn,\n                (series) => series.entityName\n            ),\n        }\n        return sortByConfig(this.unsortedSeries, this.sortConfig, keyFns)\n    }\n\n    @computed get availableSortKeys(): DumbbellSortKey[] {\n        const excluded: DumbbellSortKey[] =\n            this.mode === DumbbellMode.TwoColumn\n                ? [SortBy.startValue, SortBy.endValue]\n                : [SortBy.column]\n        return R.difference([...DUMBBELL_SORT_KEYS], excluded)\n    }\n\n    @computed get allValues(): number[] {\n        return this.series.flatMap((series) => [\n            series.start.value,\n            series.end.value,\n        ])\n    }\n\n    @computed get toleranceNotice(): string | undefined {\n        return makeToleranceNotice({\n            inputTable: this.inputTable,\n            transformedTable: this.transformedTable,\n            columns: this.yColumns,\n        })\n    }\n\n    @computed get yDomainDefault(): [number, number] {\n        const defaultDomain: [number, number] = [Infinity, -Infinity]\n        return domainExtent(this.allValues, ScaleType.linear) ?? defaultDomain\n    }\n\n    @computed get errorInfo(): ChartErrorInfo {\n        const message = getDefaultFailMessage(this.manager)\n        if (message) return { reason: message }\n\n        const { entityTypePlural = \"entities\" } = this.manager\n        if (this.series.length === 0)\n            return { reason: `No data for the selected ${entityTypePlural}` }\n\n        return { reason: \"\" }\n    }\n}\n","import { ChartManager } from \"../chart/ChartManager\"\nimport { ChartSeries } from \"../chart/ChartInterface\"\nimport { Color, EntityName, SortBy, Time } from \"@ourworldindata/types\"\nimport { TextWrap } from \"@ourworldindata/components\"\nimport { SeriesLabelState } from \"../seriesLabel/SeriesLabelState\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport {\n    FontSettings,\n    GRAPHER_AREA_OPACITY_DEFAULT,\n    GRAPHER_AREA_OPACITY_HIGHLIGHTED,\n    GRAPHER_AREA_OPACITY_MUTED,\n} from \"../core/GrapherConstants\"\nimport { LegendStyleConfig } from \"../legend/LegendStyleConfig\"\n\nexport const ROW_SPACING_FACTOR = 0.35\nexport const ENTITY_LABEL_CHART_GAP = 8\nexport const PADDING_BETWEEN_LEGEND_AND_ROWS = 8\nexport const MAX_ROW_HEIGHT = 54\nexport const MAX_HEIGHT_PER_SERIES = MAX_ROW_HEIGHT / (1 - ROW_SPACING_FACTOR)\nexport const SEGMENT_LABEL_PADDING = 8\nexport const SEGMENT_CROP_TAPER_RATIO = 0.4\nexport const SEGMENT_OUTLINE_WIDTH = 0.5\n\nexport const SWIMLANE_SEGMENT_STYLE: Record<Emphasis, { opacity: number }> = {\n    [Emphasis.Default]: { opacity: GRAPHER_AREA_OPACITY_DEFAULT },\n    [Emphasis.Elevated]: { opacity: GRAPHER_AREA_OPACITY_DEFAULT },\n    [Emphasis.Highlighted]: { opacity: GRAPHER_AREA_OPACITY_HIGHLIGHTED },\n    [Emphasis.Muted]: { opacity: GRAPHER_AREA_OPACITY_MUTED },\n}\n\nexport const SWIMLANE_LABEL_STYLE: Record<Emphasis, { opacity: number }> = {\n    [Emphasis.Default]: { opacity: 1 },\n    [Emphasis.Elevated]: { opacity: 1 },\n    [Emphasis.Highlighted]: { opacity: 1 },\n    [Emphasis.Muted]: { opacity: GRAPHER_AREA_OPACITY_MUTED },\n}\n\nexport const SWIMLANE_LEGEND_STYLE: LegendStyleConfig = {\n    marker: {\n        [Emphasis.Default]: { opacity: GRAPHER_AREA_OPACITY_DEFAULT },\n        [Emphasis.Highlighted]: { opacity: GRAPHER_AREA_OPACITY_HIGHLIGHTED },\n        [Emphasis.Muted]: { opacity: GRAPHER_AREA_OPACITY_MUTED },\n    },\n    text: { [Emphasis.Muted]: { opacity: GRAPHER_AREA_OPACITY_MUTED } },\n}\n\nexport const SWIMLANE_ORDINAL_LEGEND_STYLE: LegendStyleConfig = {\n    marker: {\n        [Emphasis.Default]: {\n            opacity: GRAPHER_AREA_OPACITY_DEFAULT,\n            stroke: \"#fff\",\n            strokeWidth: 1,\n        },\n        [Emphasis.Highlighted]: { opacity: GRAPHER_AREA_OPACITY_HIGHLIGHTED },\n        [Emphasis.Muted]: { opacity: GRAPHER_AREA_OPACITY_MUTED },\n    },\n    text: SWIMLANE_LEGEND_STYLE.text,\n}\n\nexport type SwimlaneChartManager = ChartManager\n\nexport interface SwimlaneVisibleTimeRange {\n    startTime: Time\n    endTime: Time\n    /** One time interval after `endTime` */\n    exclusiveEndTime: Time\n}\n\nexport interface SwimlaneObservation {\n    time: Time\n    category: string\n}\n\ninterface SwimlaneSegmentRange {\n    startTime: Time\n    endTime: Time\n}\n\ninterface RawSwimlaneCategorySegment extends SwimlaneSegmentRange {\n    kind: \"category\"\n    category: string\n}\n\ninterface RawSwimlaneMissingSegment extends SwimlaneSegmentRange {\n    kind: \"missing\"\n}\n\nexport type RawSwimlaneSegment =\n    | RawSwimlaneCategorySegment\n    | RawSwimlaneMissingSegment\n\ninterface SwimlaneSegmentVisibleRange {\n    /** Start of the part inside the timeline window */\n    visibleStartTime: Time\n    /** End of the part inside the timeline window */\n    visibleEndTime: Time\n}\n\ninterface SwimlaneCategorySegment\n    extends RawSwimlaneCategorySegment, SwimlaneSegmentVisibleRange {\n    color: Color\n    categoryLabel: string\n    timeRangeLabel: string\n}\n\ninterface SwimlaneMissingSegment\n    extends RawSwimlaneMissingSegment, SwimlaneSegmentVisibleRange {\n    timeRangeLabel: string\n}\n\nexport type SwimlaneSegment = SwimlaneCategorySegment | SwimlaneMissingSegment\n\nexport interface SwimlaneSegmentPlacement {\n    x: number\n    width: number\n    y: number\n    height: number\n}\n\nexport interface SwimlaneSegmentCrop {\n    isStartCropped: boolean\n    isEndCropped: boolean\n    cropTaper: number\n}\n\nexport interface SwimlaneSegmentLabelStyle {\n    category: FontSettings\n    timeRange: FontSettings\n}\n\nexport interface PlacedSwimlaneSegmentLabel {\n    x: number\n    y: number\n    style: SwimlaneSegmentLabelStyle\n}\n\nexport type PlacedSwimlaneCategorySegment = SwimlaneCategorySegment &\n    SwimlaneSegmentPlacement &\n    SwimlaneSegmentCrop & { label?: PlacedSwimlaneSegmentLabel }\n\nexport type PlacedSwimlaneSegment =\n    | PlacedSwimlaneCategorySegment\n    | (SwimlaneMissingSegment & SwimlaneSegmentPlacement)\n\nexport type RenderSwimlaneSegment = PlacedSwimlaneSegment & {\n    emphasis: Emphasis\n}\n\nexport type RenderSwimlaneCategorySegment = Extract<\n    RenderSwimlaneSegment,\n    { kind: \"category\" }\n>\n\nexport interface SwimlaneSeries extends ChartSeries {\n    seriesName: EntityName\n    entityName: EntityName\n    shortEntityName?: string\n    annotation?: string\n    segments: SwimlaneSegment[]\n}\n\nexport interface SizedSwimlaneSeries extends SwimlaneSeries {\n    label: SeriesLabelState\n    annotationTextWrap?: TextWrap\n}\n\nexport interface PlacedSwimlaneSeries extends Omit<\n    SizedSwimlaneSeries,\n    \"segments\"\n> {\n    y: number\n    height: number\n    labelPosition: { x: number; yOffset: number }\n    annotationPosition?: { x: number; yOffset: number }\n    placedSegments: PlacedSwimlaneSegment[]\n}\n\nexport interface SwimlaneTooltipTarget {\n    entityName: EntityName\n    segment: SwimlaneSegment\n}\n\nexport interface RenderSwimlaneSeries extends Omit<\n    PlacedSwimlaneSeries,\n    \"placedSegments\"\n> {\n    emphasis: Emphasis\n    placedSegments: RenderSwimlaneSegment[]\n}\n\nexport type SwimlaneCategoryKind = \"ordinal\" | \"categorical\"\n\nexport const SWIMLANE_SORT_KEYS = [SortBy.custom, SortBy.entityName] as const\nexport type SwimlaneSortKey = (typeof SWIMLANE_SORT_KEYS)[number]\n\nexport function isSwimlaneSortKey(sortBy: SortBy): sortBy is SwimlaneSortKey {\n    return (SWIMLANE_SORT_KEYS as readonly SortBy[]).includes(sortBy)\n}\n","// This file is auto-generated by devTools/regionsUpdater/update.ts\n// Do not edit manually. Run `yarn runRegionsUpdater` to regenerate.\n\nexport const MapTopology = {\n    type: \"Topology\",\n    objects: {\n        world: {\n            type: \"GeometryCollection\",\n            geometries: [\n                {\n                    id: \"Afghanistan\",\n                    type: \"Polygon\",\n                    arcs: [[0, 1, 2, 3, 4, 5]],\n                },\n                {\n                    id: \"Albania\",\n                    type: \"Polygon\",\n                    arcs: [[13, 14, 15, 16, 17]],\n                },\n                {\n                    id: \"Algeria\",\n                    type: \"Polygon\",\n                    arcs: [[266, 267, 268, 269, 270, 271, 272, 273]],\n                },\n                { id: \"Andorra\", type: \"Polygon\", arcs: [[769]] },\n                {\n                    id: \"Angola\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[6, 7, 8, 9]], [[10, 11, 12]]],\n                },\n                {\n                    id: \"Antarctica\",\n                    type: \"MultiPolygon\",\n                    arcs: [\n                        [[36]],\n                        [[37]],\n                        [[38]],\n                        [[39]],\n                        [[40]],\n                        [[41]],\n                        [[42]],\n                        [[43]],\n                    ],\n                },\n                {\n                    id: \"Antigua and Barbuda\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[760]], [[761]]],\n                },\n                {\n                    id: \"Argentina\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[23, 24]], [[25, 26, 27, 28, 29, 30]]],\n                },\n                {\n                    id: \"Armenia\",\n                    type: \"Polygon\",\n                    arcs: [[31, 32, 33, 34, 35]],\n                },\n                {\n                    id: \"Australia\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[44]], [[45]]],\n                },\n                {\n                    id: \"Austria\",\n                    type: \"Polygon\",\n                    arcs: [[46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56]],\n                },\n                {\n                    id: \"Azerbaijan\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[57, -35]], [[58, 59, -33, 60, 61]]],\n                },\n                {\n                    id: \"Bahamas\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[90]], [[91]], [[92]]],\n                },\n                { id: \"Bahrain\", type: \"Polygon\", arcs: [[735]] },\n                { id: \"Bangladesh\", type: \"Polygon\", arcs: [[81, 82, 83]] },\n                { id: \"Barbados\", type: \"Polygon\", arcs: [[762]] },\n                {\n                    id: \"Belarus\",\n                    type: \"Polygon\",\n                    arcs: [[97, 98, 99, 100, 101, 102, 103, 104]],\n                },\n                {\n                    id: \"Belgium\",\n                    type: \"Polygon\",\n                    arcs: [[66, 67, 68, 69, 70]],\n                },\n                { id: \"Belize\", type: \"Polygon\", arcs: [[105, 106, 107]] },\n                { id: \"Benin\", type: \"Polygon\", arcs: [[71, 72, 73, 74, 75]] },\n                { id: \"Bhutan\", type: \"Polygon\", arcs: [[123, 124]] },\n                {\n                    id: \"Bolivia\",\n                    type: \"Polygon\",\n                    arcs: [[108, 109, 110, 111, -31]],\n                },\n                {\n                    id: \"Bosnia and Herzegovina\",\n                    type: \"Polygon\",\n                    arcs: [[93, 94, 95, 96]],\n                },\n                {\n                    id: \"Botswana\",\n                    type: \"Polygon\",\n                    arcs: [[125, 126, 127, 128]],\n                },\n                {\n                    id: \"Brazil\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [\n                            -27, 112, -111, 113, 114, 115, 116, 117, 118, 119,\n                            120,\n                        ],\n                    ],\n                },\n                { id: \"Brunei\", type: \"Polygon\", arcs: [[121, 122]] },\n                {\n                    id: \"Bulgaria\",\n                    type: \"Polygon\",\n                    arcs: [[84, 85, 86, 87, 88, 89]],\n                },\n                {\n                    id: \"Burkina Faso\",\n                    type: \"Polygon\",\n                    arcs: [[76, 77, 78, -74, 79, 80]],\n                },\n                { id: \"Burundi\", type: \"Polygon\", arcs: [[62, 63, 64, 65]] },\n                {\n                    id: \"Cambodia\",\n                    type: \"Polygon\",\n                    arcs: [[449, 450, 451, 452]],\n                },\n                {\n                    id: \"Cameroon\",\n                    type: \"Polygon\",\n                    arcs: [[215, 216, 217, 218, 219, 220, 221, -136, 222]],\n                },\n                {\n                    id: \"Canada\",\n                    type: \"MultiPolygon\",\n                    arcs: [\n                        [[136]],\n                        [[137]],\n                        [[138]],\n                        [[139]],\n                        [[140]],\n                        [[141]],\n                        [[142]],\n                        [[143]],\n                        [[144]],\n                        [[145]],\n                        [[146, 147, 148, 149, 150, 151]],\n                        [[152]],\n                        [[153]],\n                        [[154]],\n                        [[155]],\n                        [[156]],\n                        [[157]],\n                        [[158]],\n                        [[159]],\n                        [[160]],\n                        [[161]],\n                        [[162]],\n                        [[163]],\n                        [[164]],\n                        [[165]],\n                        [[166]],\n                        [[167]],\n                        [[168]],\n                        [[169]],\n                        [[170]],\n                    ],\n                },\n                {\n                    id: \"Cape Verde\",\n                    type: \"MultiPolygon\",\n                    arcs: [\n                        [[722]],\n                        [[723]],\n                        [[724]],\n                        [[725]],\n                        [[726]],\n                        [[727]],\n                        [[728]],\n                        [[729]],\n                    ],\n                },\n                {\n                    id: \"Central African Republic\",\n                    type: \"Polygon\",\n                    arcs: [[129, 130, 131, 132, 133, 134, 135]],\n                },\n                {\n                    id: \"Chad\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [\n                            -537, 667, -535, 668, -533, -474, -638, -130, -222,\n                            669,\n                        ],\n                    ],\n                },\n                {\n                    id: \"Chile\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[-24, 177]], [[-30, 178, 179, -109]]],\n                },\n                {\n                    id: \"China\",\n                    type: \"MultiPolygon\",\n                    arcs: [\n                        [[180]],\n                        [\n                            [\n                                181, 182, 183, 184, 185, 186, 187, 188, 189,\n                                190, 191, 192, 193, 194, -125, 195, 196, 197,\n                                198, -4, 199, 200, 201, 202, 203, 204, 205, 206,\n                                207, 208, 209,\n                            ],\n                        ],\n                    ],\n                },\n                {\n                    id: \"Colombia\",\n                    type: \"Polygon\",\n                    arcs: [[236, 237, 238, 239, 240, -115, 241]],\n                },\n                {\n                    id: \"Comoros\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[730]], [[731]], [[732]]],\n                },\n                {\n                    id: \"Congo\",\n                    type: \"Polygon\",\n                    arcs: [[-12, 234, 235, -223, -135, -232]],\n                },\n                {\n                    id: \"Costa Rica\",\n                    type: \"Polygon\",\n                    arcs: [[242, 243, 244, 245]],\n                },\n                {\n                    id: \"Cote d'Ivoire\",\n                    type: \"Polygon\",\n                    arcs: [[210, 211, 212, 213, -77, 214]],\n                },\n                {\n                    id: \"Croatia\",\n                    type: \"Polygon\",\n                    arcs: [[359, 360, 361, -97, 362, 363, 364]],\n                },\n                { id: \"Cuba\", type: \"Polygon\", arcs: [[246]] },\n                { id: \"Cyprus\", type: \"Polygon\", arcs: [[247]] },\n                {\n                    id: \"Czechia\",\n                    type: \"Polygon\",\n                    arcs: [[-56, 248, 249, 250]],\n                },\n                {\n                    id: \"Democratic Republic of Congo\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [\n                            223, 224, 225, 226, -63, 227, 228, 229, -10, 230,\n                            -13, 231, -134, 232, 233,\n                        ],\n                    ],\n                },\n                {\n                    id: \"Denmark\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[262]], [[-258, 263]]],\n                },\n                {\n                    id: \"Djibouti\",\n                    type: \"Polygon\",\n                    arcs: [[258, 259, 260, 261]],\n                },\n                { id: \"Dominica\", type: \"Polygon\", arcs: [[763]] },\n                {\n                    id: \"Dominican Republic\",\n                    type: \"Polygon\",\n                    arcs: [[264, 265]],\n                },\n                { id: \"East Timor\", type: \"Polygon\", arcs: [[676, -374]] },\n                { id: \"Ecuador\", type: \"Polygon\", arcs: [[274, -237, 275]] },\n                { id: \"Egypt\", type: \"Polygon\", arcs: [[276, 277, 278]] },\n                {\n                    id: \"El Salvador\",\n                    type: \"Polygon\",\n                    arcs: [[653, -352, -357]],\n                },\n                {\n                    id: \"Equatorial Guinea\",\n                    type: \"Polygon\",\n                    arcs: [[342, -217, -321]],\n                },\n                {\n                    id: \"Eritrea\",\n                    type: \"Polygon\",\n                    arcs: [[279, 280, 281, 282, 283, 284, 285, -262]],\n                },\n                {\n                    id: \"Estonia\",\n                    type: \"Polygon\",\n                    arcs: [[290, 291, 292, 293]],\n                },\n                { id: \"Eswatini\", type: \"Polygon\", arcs: [[664, -512]] },\n                {\n                    id: \"Ethiopia\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [\n                            294, 295, -280, -261, 296, 297, 298, 299, 300, 301,\n                            302, 303, -283,\n                        ],\n                    ],\n                },\n                {\n                    id: \"Fiji\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[308]], [[309]], [[310]]],\n                },\n                {\n                    id: \"Finland\",\n                    type: \"Polygon\",\n                    arcs: [[304, 305, 306, 307]],\n                },\n                {\n                    id: \"France\",\n                    type: \"MultiPolygon\",\n                    arcs: [\n                        [[311]],\n                        [[312, -254, -176, 313, 314, -288, 315, -70]],\n                    ],\n                },\n                {\n                    id: \"French Guiana\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[316, 317, 318, -119]]],\n                },\n                {\n                    id: \"French Southern Territories\",\n                    type: \"Polygon\",\n                    arcs: [[778]],\n                },\n                {\n                    id: \"Gabon\",\n                    type: \"Polygon\",\n                    arcs: [[319, 320, -216, -236]],\n                },\n                { id: \"Gambia\", type: \"Polygon\", arcs: [[338, 339]] },\n                {\n                    id: \"Georgia\",\n                    type: \"Polygon\",\n                    arcs: [[324, 325, 326, 327, 328, -61, -32, 329]],\n                },\n                {\n                    id: \"Germany\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [\n                            251, 252, -249, -55, -177, 253, 254, -68, 255, 256,\n                            257,\n                        ],\n                    ],\n                },\n                { id: \"Ghana\", type: \"Polygon\", arcs: [[330, -215, -81, 331]] },\n                {\n                    id: \"Greece\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[343]], [[344, -14, 345, -88, 346]]],\n                },\n                { id: \"Greenland\", type: \"Polygon\", arcs: [[777]] },\n                { id: \"Grenada\", type: \"Polygon\", arcs: [[764]] },\n                {\n                    id: \"Guatemala\",\n                    type: \"Polygon\",\n                    arcs: [[347, 348, -108, 349, 350, 351]],\n                },\n                {\n                    id: \"Guinea\",\n                    type: \"Polygon\",\n                    arcs: [[332, 333, 334, 335, 336, 337, -213]],\n                },\n                {\n                    id: \"Guinea-Bissau\",\n                    type: \"Polygon\",\n                    arcs: [[340, 341, -336]],\n                },\n                {\n                    id: \"Guyana\",\n                    type: \"Polygon\",\n                    arcs: [[352, 353, -117, 354]],\n                },\n                { id: \"Haiti\", type: \"Polygon\", arcs: [[-266, 365]] },\n                {\n                    id: \"Honduras\",\n                    type: \"Polygon\",\n                    arcs: [[355, 356, -351, 357, 358]],\n                },\n                {\n                    id: \"Hungary\",\n                    type: \"Polygon\",\n                    arcs: [[-47, 366, 367, 368, 369, 370, -365, 371]],\n                },\n                { id: \"Iceland\", type: \"Polygon\", arcs: [[407]] },\n                {\n                    id: \"India\",\n                    type: \"Polygon\",\n                    arcs: [[-198, 388, -196, -124, -195, 389, -84, 390, 391]],\n                },\n                {\n                    id: \"Indonesia\",\n                    type: \"MultiPolygon\",\n                    arcs: [\n                        [[372]],\n                        [[373, 374]],\n                        [[375]],\n                        [[376]],\n                        [[377]],\n                        [[378]],\n                        [[379]],\n                        [[380]],\n                        [[381, 382]],\n                        [[383]],\n                        [[384]],\n                        [[385, 386]],\n                        [[387]],\n                    ],\n                },\n                {\n                    id: \"Iran\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [393, -6, 394, 395, 396, 397, 398, -58, -34, -60, 399],\n                    ],\n                },\n                {\n                    id: \"Iraq\",\n                    type: \"Polygon\",\n                    arcs: [[-397, 400, 401, 402, 403, 404, 405, 406]],\n                },\n                { id: \"Ireland\", type: \"Polygon\", arcs: [[392, -322]] },\n                {\n                    id: \"Israel\",\n                    type: \"Polygon\",\n                    arcs: [[408, 409, 410, 411, 412, 413, 414, 415]],\n                },\n                {\n                    id: \"Italy\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[416]], [[417]], [[418, 419, -314, -175, -49]]],\n                },\n                { id: \"Jamaica\", type: \"Polygon\", arcs: [[420]] },\n                {\n                    id: \"Japan\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[425]], [[426]], [[427]]],\n                },\n                {\n                    id: \"Jordan\",\n                    type: \"Polygon\",\n                    arcs: [[-409, 421, -404, 422, 423, -411, 424]],\n                },\n                {\n                    id: \"Kazakhstan\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [\n                            428, 429, 430, 431, 432, 433, 434, 435, 436, 437,\n                            438, 439, 440, -202, 441,\n                        ],\n                    ],\n                },\n                {\n                    id: \"Kenya\",\n                    type: \"Polygon\",\n                    arcs: [[442, 443, 444, 445, -301, 446]],\n                },\n                { id: \"Kiribati\", type: \"Polygon\", arcs: [[775]] },\n                {\n                    id: \"Kosovo\",\n                    type: \"Polygon\",\n                    arcs: [[455, 456, 457, 458, 459]],\n                },\n                { id: \"Kuwait\", type: \"Polygon\", arcs: [[460, 461, -402]] },\n                {\n                    id: \"Kyrgyzstan\",\n                    type: \"Polygon\",\n                    arcs: [[-442, -201, 447, 448]],\n                },\n                {\n                    id: \"Laos\",\n                    type: \"Polygon\",\n                    arcs: [[462, 463, -193, 464, -451]],\n                },\n                {\n                    id: \"Latvia\",\n                    type: \"Polygon\",\n                    arcs: [[480, -294, 481, -99, -479]],\n                },\n                { id: \"Lebanon\", type: \"Polygon\", arcs: [[-415, 465, 466]] },\n                { id: \"Lesotho\", type: \"Polygon\", arcs: [[475]] },\n                {\n                    id: \"Liberia\",\n                    type: \"Polygon\",\n                    arcs: [[467, 468, -333, -212]],\n                },\n                {\n                    id: \"Libya\",\n                    type: \"Polygon\",\n                    arcs: [[469, -274, 470, 471, -278, 472, 473]],\n                },\n                {\n                    id: \"Liechtenstein\",\n                    type: \"Polygon\",\n                    arcs: [[-52, 770, -173, 771]],\n                },\n                {\n                    id: \"Lithuania\",\n                    type: \"Polygon\",\n                    arcs: [[476, 477, 478, -98, 479]],\n                },\n                {\n                    id: \"Luxembourg\",\n                    type: \"Polygon\",\n                    arcs: [[-255, -313, -69]],\n                },\n                { id: \"Madagascar\", type: \"Polygon\", arcs: [[486]] },\n                {\n                    id: \"Malawi\",\n                    type: \"Polygon\",\n                    arcs: [[-516, 519, 520, 521]],\n                },\n                {\n                    id: \"Malaysia\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[522, 523, 524, 525]], [[-386, 526, -123, 527]]],\n                },\n                {\n                    id: \"Maldives\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[736]], [[737]]],\n                },\n                {\n                    id: \"Mali\",\n                    type: \"Polygon\",\n                    arcs: [[492, -268, 493, -78, -214, -338, 494]],\n                },\n                { id: \"Malta\", type: \"Polygon\", arcs: [[772]] },\n                {\n                    id: \"Marshall Islands\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[738]], [[739]]],\n                },\n                {\n                    id: \"Mauritania\",\n                    type: \"Polygon\",\n                    arcs: [[516, 517, 518, -269, -493]],\n                },\n                { id: \"Mauritius\", type: \"Polygon\", arcs: [[733]] },\n                {\n                    id: \"Mexico\",\n                    type: \"Polygon\",\n                    arcs: [[-106, -349, 487, 488, 489]],\n                },\n                {\n                    id: \"Micronesia (country)\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[740]], [[741]], [[742]], [[743]], [[744]]],\n                },\n                { id: \"Moldova\", type: \"Polygon\", arcs: [[484, 485]] },\n                { id: \"Monaco\", type: \"Polygon\", arcs: [[773]] },\n                {\n                    id: \"Mongolia\",\n                    type: \"Polygon\",\n                    arcs: [[499, 500, 501, 502, 503, 504, 505, 506, -204]],\n                },\n                {\n                    id: \"Montenegro\",\n                    type: \"Polygon\",\n                    arcs: [[497, -96, 498, -458, -16]],\n                },\n                { id: \"Morocco\", type: \"Polygon\", arcs: [[-271, 482, 483]] },\n                {\n                    id: \"Mozambique\",\n                    type: \"Polygon\",\n                    arcs: [[507, 508, 509, 510, 511, 512, 513, 514, 515]],\n                },\n                {\n                    id: \"Myanmar\",\n                    type: \"Polygon\",\n                    arcs: [[495, -82, -390, -194, -464, 496]],\n                },\n                {\n                    id: \"Namibia\",\n                    type: \"Polygon\",\n                    arcs: [[528, -8, 529, -127, 530]],\n                },\n                { id: \"Nauru\", type: \"Polygon\", arcs: [[745]] },\n                { id: \"Nepal\", type: \"Polygon\", arcs: [[-389, -197]] },\n                {\n                    id: \"Netherlands\",\n                    type: \"Polygon\",\n                    arcs: [[-256, -67, 541]],\n                },\n                { id: \"New Caledonia\", type: \"Polygon\", arcs: [[531]] },\n                {\n                    id: \"New Zealand\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[547]], [[548]]],\n                },\n                {\n                    id: \"Nicaragua\",\n                    type: \"Polygon\",\n                    arcs: [[539, -359, 540, -244]],\n                },\n                {\n                    id: \"Niger\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [\n                            -79, -494, -267, -470, 532, 533, 534, 535, 536,\n                            -220, 537, -75,\n                        ],\n                    ],\n                },\n                {\n                    id: \"Nigeria\",\n                    type: \"Polygon\",\n                    arcs: [[538, -76, -538, -219]],\n                },\n                {\n                    id: \"North Korea\",\n                    type: \"Polygon\",\n                    arcs: [[573, -455, 574, -190]],\n                },\n                {\n                    id: \"North Macedonia\",\n                    type: \"Polygon\",\n                    arcs: [[-460, 490, -89, -346, 491]],\n                },\n                {\n                    id: \"Norway\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[-308, 542, 543]], [[544]], [[545]], [[546]]],\n                },\n                {\n                    id: \"Oman\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[549, 550, -22, 551]], [[-20, 552]]],\n                },\n                {\n                    id: \"Pakistan\",\n                    type: \"Polygon\",\n                    arcs: [[-199, -392, 553, -395, -5]],\n                },\n                { id: \"Palau\", type: \"Polygon\", arcs: [[746]] },\n                {\n                    id: \"Palestine\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[-425, -410]], [[-413, 716]]],\n                },\n                {\n                    id: \"Panama\",\n                    type: \"Polygon\",\n                    arcs: [[554, -246, 555, -239]],\n                },\n                {\n                    id: \"Papua New Guinea\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[564]], [[565]], [[-382, 566]], [[567]]],\n                },\n                { id: \"Paraguay\", type: \"Polygon\", arcs: [[-112, -113, -26]] },\n                {\n                    id: \"Peru\",\n                    type: \"Polygon\",\n                    arcs: [[-180, 556, -276, -242, -114, -110]],\n                },\n                {\n                    id: \"Philippines\",\n                    type: \"MultiPolygon\",\n                    arcs: [\n                        [[557]],\n                        [[558]],\n                        [[559]],\n                        [[560]],\n                        [[561]],\n                        [[562]],\n                        [[563]],\n                    ],\n                },\n                {\n                    id: \"Poland\",\n                    type: \"Polygon\",\n                    arcs: [[-253, 568, 569, -480, -105, 570, 571, -250]],\n                },\n                { id: \"Portugal\", type: \"Polygon\", arcs: [[-290, 575]] },\n                { id: \"Puerto Rico\", type: \"Polygon\", arcs: [[572]] },\n                { id: \"Qatar\", type: \"Polygon\", arcs: [[576, 577]] },\n                {\n                    id: \"Romania\",\n                    type: \"Polygon\",\n                    arcs: [[578, -486, 579, 580, -85, 581, -369]],\n                },\n                {\n                    id: \"Russia\",\n                    type: \"MultiPolygon\",\n                    arcs: [\n                        [[582]],\n                        [[-570, 583, -477]],\n                        [[584]],\n                        [[585]],\n                        [[586]],\n                        [[587]],\n                        [[588]],\n                        [[589]],\n                        [[590]],\n                        [\n                            [\n                                -188, 591, 592, 593, -184, 594, -182, 595, -209,\n                                596, -207, 597, -205, -507, 598, 599, -504, 600,\n                                -502, 601, -500, -203, -441, 602, -439, 603,\n                                604, -436, 605, -434, 606, 607, 608, -62, 609,\n                                -328, 610, -326, 611, 612, 613, 614, 615, 616,\n                                617, 618, 619, -102, 620, -100, -482, -293, 621,\n                                622, -305, 623,\n                            ],\n                        ],\n                        [[624]],\n                        [[625]],\n                        [[626]],\n                    ],\n                },\n                {\n                    id: \"Rwanda\",\n                    type: \"Polygon\",\n                    arcs: [[627, 628, -64, -227, 629]],\n                },\n                {\n                    id: \"Saint Kitts and Nevis\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[765]], [[766]]],\n                },\n                { id: \"Saint Lucia\", type: \"Polygon\", arcs: [[767]] },\n                {\n                    id: \"Saint Vincent and the Grenadines\",\n                    type: \"Polygon\",\n                    arcs: [[768]],\n                },\n                { id: \"Samoa\", type: \"MultiPolygon\", arcs: [[[747]], [[748]]] },\n                { id: \"San Marino\", type: \"Polygon\", arcs: [[774]] },\n                { id: \"Sao Tome and Principe\", type: \"Polygon\", arcs: [[776]] },\n                {\n                    id: \"Saudi Arabia\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [631, -423, -403, -462, 632, -578, 633, -23, -551, 634],\n                    ],\n                },\n                {\n                    id: \"Senegal\",\n                    type: \"Polygon\",\n                    arcs: [[645, -517, -495, -337, -342, 646, -340]],\n                },\n                {\n                    id: \"Serbia\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [\n                            -90, -491, -459, -499, -95, 657, -361, 658, -370,\n                            -582,\n                        ],\n                    ],\n                },\n                { id: \"Seychelles\", type: \"Polygon\", arcs: [[734]] },\n                {\n                    id: \"Sierra Leone\",\n                    type: \"Polygon\",\n                    arcs: [[652, -334, -469]],\n                },\n                { id: \"Singapore\", type: \"Polygon\", arcs: [[523, 749]] },\n                {\n                    id: \"Slovakia\",\n                    type: \"Polygon\",\n                    arcs: [[-572, 661, -367, -57, -251]],\n                },\n                {\n                    id: \"Slovenia\",\n                    type: \"Polygon\",\n                    arcs: [[-48, -372, -364, 662, -419]],\n                },\n                {\n                    id: \"Solomon Islands\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[647]], [[648]], [[649]], [[650]], [[651]]],\n                },\n                {\n                    id: \"Somalia\",\n                    type: \"Polygon\",\n                    arcs: [[654, 655, -297, -260, 656, -447, -300]],\n                },\n                {\n                    id: \"South Africa\",\n                    type: \"Polygon\",\n                    arcs: [[-531, -126, 718, -513, -665, -511, 719], [-476]],\n                },\n                { id: \"South Korea\", type: \"Polygon\", arcs: [[453, 454]] },\n                {\n                    id: \"South Sudan\",\n                    type: \"Polygon\",\n                    arcs: [[641, -302, -446, 642, 643, -233, -133, 644, -636]],\n                },\n                { id: \"Spain\", type: \"Polygon\", arcs: [[286, 287, 288, 289]] },\n                { id: \"Sri Lanka\", type: \"Polygon\", arcs: [[474]] },\n                {\n                    id: \"Sudan\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [\n                            635, 636, -131, 637, -473, -277, 638, -285, 639,\n                            -304, 640,\n                        ],\n                    ],\n                },\n                {\n                    id: \"Suriname\",\n                    type: \"Polygon\",\n                    arcs: [[659, -318, 660, -118, -354]],\n                },\n                { id: \"Sweden\", type: \"Polygon\", arcs: [[-543, -307, 663]] },\n                {\n                    id: \"Switzerland\",\n                    type: \"Polygon\",\n                    arcs: [[-54, 171, 172, 173, -50, 174, 175, 176]],\n                },\n                {\n                    id: \"Syria\",\n                    type: \"Polygon\",\n                    arcs: [[-422, -416, -467, 665, 666, -405]],\n                },\n                { id: \"Taiwan\", type: \"Polygon\", arcs: [[682]] },\n                {\n                    id: \"Tajikistan\",\n                    type: \"Polygon\",\n                    arcs: [[-448, -200, -3, 673]],\n                },\n                {\n                    id: \"Tanzania\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [\n                            -444, 683, 684, -508, 685, 686, 687, 688, -228, -66,\n                            689, -628, 690,\n                        ],\n                    ],\n                },\n                {\n                    id: \"Thailand\",\n                    type: \"Polygon\",\n                    arcs: [[671, -526, 672, -497, -463, -450]],\n                },\n                { id: \"Togo\", type: \"Polygon\", arcs: [[670, -332, -80, -73]] },\n                {\n                    id: \"Tonga\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[750]], [[751]], [[752]]],\n                },\n                { id: \"Trinidad and Tobago\", type: \"Polygon\", arcs: [[677]] },\n                { id: \"Tunisia\", type: \"Polygon\", arcs: [[-273, 678, -471]] },\n                {\n                    id: \"Turkey\",\n                    type: \"MultiPolygon\",\n                    arcs: [\n                        [[-330, -36, -399, 679, -406, -667, 680]],\n                        [[-347, -87, 681]],\n                    ],\n                },\n                {\n                    id: \"Turkmenistan\",\n                    type: \"Polygon\",\n                    arcs: [[-394, 674, -430, 675, -1]],\n                },\n                {\n                    id: \"Tuvalu\",\n                    type: \"MultiPolygon\",\n                    arcs: [\n                        [[753]],\n                        [[754]],\n                        [[755]],\n                        [[756]],\n                        [[757]],\n                        [[758]],\n                        [[759]],\n                    ],\n                },\n                {\n                    id: \"Uganda\",\n                    type: \"Polygon\",\n                    arcs: [[-630, -226, 691, -224, 692, -643, -445, -691]],\n                },\n                {\n                    id: \"Ukraine\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [\n                            693, -619, 694, -617, 695, 696, 697, -613, 698,\n                            -580, -485, -579, -368, -662, -571, -104,\n                        ],\n                    ],\n                },\n                {\n                    id: \"United Arab Emirates\",\n                    type: \"Polygon\",\n                    arcs: [[18, 19, 20, 21, 22]],\n                },\n                {\n                    id: \"United Kingdom\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[321, 322]], [[323]]],\n                },\n                {\n                    id: \"United States\",\n                    type: \"MultiPolygon\",\n                    arcs: [\n                        [[700]],\n                        [[701]],\n                        [[702]],\n                        [[703]],\n                        [[704]],\n                        [[705, -489, 706, -147]],\n                        [[707]],\n                        [[708]],\n                        [[709]],\n                        [[-151, 710, -149, 711]],\n                    ],\n                },\n                { id: \"Uruguay\", type: \"Polygon\", arcs: [[-121, 699, -28]] },\n                {\n                    id: \"Uzbekistan\",\n                    type: \"Polygon\",\n                    arcs: [[-676, -429, -449, -674, -2]],\n                },\n                {\n                    id: \"Vanuatu\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[714]], [[715]]],\n                },\n                {\n                    id: \"Venezuela\",\n                    type: \"Polygon\",\n                    arcs: [[712, -355, -116, -241]],\n                },\n                {\n                    id: \"Vietnam\",\n                    type: \"Polygon\",\n                    arcs: [[713, -452, -465, -192]],\n                },\n                {\n                    id: \"Western Sahara\",\n                    type: \"Polygon\",\n                    arcs: [[-483, -270, -519, 630]],\n                },\n                { id: \"Yemen\", type: \"Polygon\", arcs: [[717, -635, -550]] },\n                {\n                    id: \"Zambia\",\n                    type: \"Polygon\",\n                    arcs: [[-520, -515, 720, -128, -530, -7, -230, 721, -688]],\n                },\n                {\n                    id: \"Zimbabwe\",\n                    type: \"Polygon\",\n                    arcs: [[-719, -129, -721, -514]],\n                },\n            ],\n        },\n    },\n\n    // oxfmt-ignore\n    arcs: [\n      [[61.21,35.65],[62.23,35.27],[62.98,35.4],[63.19,35.86],[63.98,36.01],[64.55,36.31],[64.75,37.11],[65.59,37.31],[65.75,37.66],[66.22,37.39],[66.52,37.36]],\n      [[66.52,37.36],[67.08,37.36],[67.83,37.14]],\n      [[67.83,37.14],[68.14,37.02],[68.86,37.34],[69.2,37.15],[69.52,37.61],[70.12,37.59],[70.27,37.74],[70.38,38.14],[70.81,38.49],[71.35,38.26],[71.24,37.95],[71.54,37.91],[71.45,37.07],[71.84,36.74],[72.19,36.95],[72.64,37.05],[73.26,37.5],[73.95,37.42],[74.98,37.42]],\n      [[74.98,37.42],[75.16,37.13]],\n      [[75.16,37.13],[74.58,37.02],[74.07,36.84],[72.92,36.72],[71.85,36.51],[71.26,36.07],[71.5,35.65],[71.61,35.15],[71.12,34.73],[71.16,34.35],[70.88,33.99],[69.93,34.02],[70.32,33.36],[69.69,33.11],[69.26,32.5],[69.32,31.9],[68.93,31.62],[68.56,31.71],[67.79,31.58],[67.68,31.3],[66.94,31.3],[66.38,30.74],[66.35,29.89],[65.05,29.47],[64.35,29.56],[64.15,29.34],[63.55,29.47],[62.55,29.32],[60.87,29.83]],\n      [[60.87,29.83],[61.78,30.74],[61.7,31.38],[60.94,31.55],[60.86,32.18],[60.54,32.98],[60.96,33.53],[60.53,33.68],[60.8,34.4],[61.21,35.65]],\n      [[23.91,-10.93],[24.02,-11.24],[23.9,-11.72],[24.08,-12.19],[23.93,-12.57],[24.02,-12.91],[21.93,-12.9],[21.89,-16.08],[22.56,-16.9],[23.22,-17.52]],\n      [[23.22,-17.52],[21.38,-17.93],[18.96,-17.79],[18.26,-17.31],[14.21,-17.35],[14.06,-17.42],[13.46,-16.97],[12.81,-16.94],[12.22,-17.11],[11.73,-17.3]],\n      [[11.73,-17.3],[11.64,-16.67],[11.78,-15.79],[12.12,-14.88],[12.18,-14.45],[12.5,-13.55],[12.74,-13.14],[13.31,-12.48],[13.63,-12.04],[13.74,-11.3],[13.69,-10.73],[13.39,-10.37],[13.12,-9.77],[12.88,-9.17],[12.93,-8.96],[13.24,-8.56],[12.93,-7.6],[12.73,-6.93],[12.23,-6.29],[12.32,-6.1]],\n      [[12.32,-6.1],[12.74,-5.97],[13.02,-5.98],[13.38,-5.86],[16.33,-5.88],[16.57,-6.62],[16.86,-7.22],[17.09,-7.55],[17.47,-8.07],[18.13,-7.99],[18.46,-7.85],[19.02,-7.99],[19.17,-7.74],[19.42,-7.16],[20.04,-7.12],[20.09,-6.94],[20.6,-6.94],[20.51,-7.3],[21.73,-7.29],[21.75,-7.92],[21.95,-8.31],[21.8,-8.91],[21.88,-9.52],[22.21,-9.89],[22.16,-11.08],[22.4,-10.99],[22.84,-11.02],[23.46,-10.87],[23.91,-10.93]],\n      [[12.18,-5.79],[11.91,-5.04]],\n      [[11.91,-5.04],[12.32,-4.61],[12.62,-4.44],[13,-4.78]],\n      [[13,-4.78],[12.63,-4.99],[12.47,-5.25],[12.44,-5.68],[12.18,-5.79]],\n      [[21.02,40.84],[21,40.58],[20.67,40.44],[20.62,40.11],[20.15,39.62]],\n      [[20.15,39.62],[19.98,39.69],[19.96,39.92],[19.41,40.25],[19.32,40.73],[19.4,41.41],[19.54,41.72],[19.37,41.88],[19.3,42.2],[19.74,42.69]],\n      [[19.74,42.69],[19.8,42.5],[20.07,42.59]],\n      [[20.07,42.59],[20.28,42.32],[20.52,42.22]],\n      [[20.52,42.22],[20.59,41.86],[20.46,41.52],[20.61,41.09],[21.02,40.84]],\n      [[51.58,24.25],[51.76,24.29],[51.79,24.02],[52.58,24.18],[53.4,24.15],[54.01,24.12],[54.69,24.8],[55.44,25.44],[56.07,26.06]],\n      [[56.07,26.06],[56.26,25.71]],\n      [[56.26,25.71],[56.4,24.92]],\n      [[56.4,24.92],[55.89,24.92],[55.8,24.27],[55.98,24.13],[55.53,23.93],[55.53,23.52],[55.23,23.11],[55.21,22.71]],\n      [[55.21,22.71],[55.01,22.5],[52,23],[51.62,24.01],[51.58,24.25]],\n      [[-66.96,-54.9],[-67.56,-54.87],[-68.63,-54.87],[-68.63,-52.64]],\n      [[-68.63,-52.64],[-68.25,-53.1],[-67.75,-53.85],[-66.45,-54.45],[-65.05,-54.7],[-65.5,-55.2],[-66.45,-55.25],[-66.96,-54.9]],\n      [[-62.69,-22.25],[-60.85,-23.88],[-60.03,-24.03],[-58.81,-24.77],[-57.78,-25.16],[-57.63,-25.6],[-58.62,-27.12],[-57.61,-27.4],[-56.49,-27.55],[-55.7,-27.39],[-54.79,-26.62],[-54.63,-25.74]],\n      [[-54.63,-25.74],[-54.13,-25.55],[-53.63,-26.12],[-53.65,-26.92],[-54.49,-27.47],[-55.16,-27.88],[-56.29,-28.85],[-57.63,-30.22]],\n      [[-57.63,-30.22],[-57.87,-31.02],[-58.14,-32.04],[-58.13,-33.04],[-58.35,-33.26],[-58.43,-33.91]],\n      [[-58.43,-33.91],[-58.5,-34.43],[-57.23,-35.29],[-57.36,-35.98],[-56.74,-36.41],[-56.79,-36.9],[-57.75,-38.18],[-59.23,-38.72],[-61.24,-38.93],[-62.34,-38.83],[-62.13,-39.42],[-62.33,-40.17],[-62.15,-40.68],[-62.75,-41.03],[-63.77,-41.17],[-64.73,-40.8],[-65.12,-41.06],[-64.98,-42.06],[-64.3,-42.36],[-63.76,-42.04],[-63.46,-42.56],[-64.38,-42.87],[-65.18,-43.5],[-65.33,-44.5],[-65.57,-45.04],[-66.51,-45.04],[-67.29,-45.55],[-67.58,-46.3],[-66.6,-47.03],[-65.64,-47.24],[-65.99,-48.13],[-67.17,-48.7],[-67.82,-49.87],[-68.73,-50.26],[-69.14,-50.73],[-68.82,-51.77],[-68.15,-52.35],[-68.57,-52.3]],\n      [[-68.57,-52.3],[-69.5,-52.14],[-71.91,-52.01],[-72.33,-51.43],[-72.31,-50.68],[-72.98,-50.74],[-73.33,-50.38],[-73.42,-49.32],[-72.65,-48.88],[-72.33,-48.24],[-72.45,-47.74],[-71.92,-46.88],[-71.55,-45.56],[-71.66,-44.97],[-71.22,-44.78],[-71.33,-44.41],[-71.79,-44.21],[-71.46,-43.79],[-71.92,-43.41],[-72.15,-42.25],[-71.75,-42.05],[-71.92,-40.83],[-71.68,-39.81],[-71.41,-38.92],[-70.81,-38.55],[-71.12,-37.58],[-71.12,-36.66],[-70.36,-36.01],[-70.39,-35.17],[-69.82,-34.19],[-69.81,-33.27],[-70.07,-33.09],[-70.54,-31.37],[-69.92,-30.34],[-70.01,-29.37],[-69.66,-28.46],[-69,-27.52],[-68.3,-26.9],[-68.59,-26.51],[-68.39,-26.19],[-68.42,-24.52],[-67.33,-24.03],[-66.99,-22.99],[-67.11,-22.74]],\n      [[-67.11,-22.74],[-66.27,-21.83],[-64.96,-22.08],[-64.38,-22.8],[-63.99,-21.99],[-62.85,-22.03],[-62.69,-22.25]],\n      [[43.58,41.09],[44.97,41.25]],\n      [[44.97,41.25],[45.18,40.99],[45.56,40.81],[45.36,40.56],[45.89,40.22],[45.61,39.9],[46.03,39.63],[46.48,39.46],[46.51,38.77]],\n      [[46.51,38.77],[46.14,38.74]],\n      [[46.14,38.74],[45.74,39.32],[45.74,39.47],[45.3,39.47],[45,39.74],[44.79,39.71]],\n      [[44.79,39.71],[44.4,40.01],[43.66,40.25],[43.75,40.74],[43.58,41.09]],\n      [[-59.57,-80.04],[-59.87,-80.55],[-60.16,-81],[-62.26,-80.86],[-64.49,-80.92],[-65.74,-80.59],[-65.74,-80.55],[-66.29,-80.26],[-64.04,-80.29],[-61.88,-80.39],[-61.14,-79.98],[-60.61,-79.63],[-59.57,-80.04]],\n      [[-159.21,-79.5],[-161.13,-79.63],[-162.44,-79.28],[-163.03,-78.93],[-163.07,-78.87],[-163.71,-78.6],[-163.71,-78.6],[-163.11,-78.22],[-161.25,-78.38],[-160.25,-78.69],[-159.48,-79.05],[-159.21,-79.5]],\n      [[-45.15,-78.05],[-43.92,-78.48],[-43.49,-79.09],[-43.37,-79.52],[-43.33,-80.03],[-44.88,-80.34],[-46.51,-80.59],[-48.39,-80.83],[-50.48,-81.03],[-52.85,-80.97],[-54.16,-80.63],[-53.99,-80.22],[-51.85,-79.95],[-50.99,-79.61],[-50.36,-79.18],[-49.91,-78.81],[-49.31,-78.46],[-48.66,-78.05],[-48.66,-78.05],[-48.15,-78.05],[-46.66,-77.83],[-45.15,-78.05]],\n      [[-121.21,-73.5],[-119.92,-73.66],[-118.72,-73.48],[-119.29,-73.83],[-120.23,-74.09],[-121.62,-74.01],[-122.62,-73.66],[-122.62,-73.66],[-122.41,-73.32],[-121.21,-73.5]],\n      [[-125.56,-73.48],[-124.03,-73.87],[-124.62,-73.83],[-125.91,-73.74],[-127.28,-73.46],[-127.28,-73.46],[-126.56,-73.25],[-125.56,-73.48]],\n      [[-98.98,-71.93],[-97.88,-72.07],[-96.79,-71.95],[-96.2,-72.52],[-96.98,-72.44],[-98.2,-72.48],[-99.43,-72.44],[-100.78,-72.5],[-101.8,-72.31],[-102.33,-71.89],[-102.33,-71.89],[-101.7,-71.72],[-100.43,-71.85],[-98.98,-71.93]],\n      [[-68.45,-70.96],[-68.33,-71.41],[-68.51,-71.8],[-68.78,-72.17],[-69.96,-72.31],[-71.08,-72.5],[-72.39,-72.48],[-71.9,-72.09],[-73.07,-72.23],[-74.19,-72.37],[-74.95,-72.07],[-75.01,-71.66],[-73.92,-71.27],[-73.92,-71.27],[-73.23,-71.15],[-72.07,-71.19],[-71.78,-70.68],[-71.72,-70.31],[-71.74,-69.51],[-71.17,-69.04],[-70.25,-68.88],[-69.72,-69.25],[-69.49,-69.62],[-69.06,-70.07],[-68.73,-70.51],[-68.45,-70.96]],\n      [[-58.61,-64.15],[-59.05,-64.37],[-59.79,-64.21],[-60.61,-64.31],[-61.3,-64.54],[-62.02,-64.8],[-62.51,-65.09],[-62.65,-65.48],[-62.59,-65.86],[-62.12,-66.19],[-62.81,-66.43],[-63.75,-66.5],[-64.29,-66.84],[-64.88,-67.15],[-65.51,-67.58],[-65.67,-67.95],[-65.31,-68.37],[-64.78,-68.68],[-63.96,-68.91],[-63.2,-69.23],[-62.79,-69.62],[-62.57,-69.99],[-62.28,-70.38],[-61.81,-70.72],[-61.51,-71.09],[-61.38,-72.01],[-61.08,-72.38],[-61,-72.77],[-60.69,-73.17],[-60.83,-73.7],[-61.38,-74.11],[-61.96,-74.44],[-63.3,-74.58],[-63.75,-74.93],[-64.35,-75.26],[-65.86,-75.64],[-67.19,-75.79],[-68.45,-76.01],[-69.8,-76.22],[-70.6,-76.63],[-72.21,-76.67],[-73.97,-76.63],[-75.56,-76.71],[-77.24,-76.71],[-76.93,-77.1],[-75.4,-77.28],[-74.28,-77.56],[-73.66,-77.91],[-74.77,-78.22],[-76.5,-78.12],[-77.93,-78.38],[-77.98,-78.79],[-78.02,-79.18],[-76.85,-79.51],[-76.63,-79.89],[-75.36,-80.26],[-73.24,-80.42],[-71.44,-80.69],[-70.01,-81],[-68.19,-81.32],[-65.7,-81.47],[-63.26,-81.75],[-61.55,-82.04],[-59.69,-82.38],[-58.71,-82.85],[-58.22,-83.22],[-57.01,-82.87],[-55.36,-82.57],[-53.62,-82.26],[-51.54,-82],[-49.76,-81.73],[-47.27,-81.71],[-44.83,-81.85],[-42.81,-82.08],[-42.16,-81.65],[-40.77,-81.36],[-38.24,-81.34],[-36.27,-81.12],[-34.39,-80.91],[-32.31,-80.77],[-30.1,-80.59],[-28.55,-80.34],[-29.25,-79.99],[-29.69,-79.63],[-29.69,-79.26],[-31.62,-79.3],[-33.68,-79.46],[-35.64,-79.46],[-35.91,-79.08],[-35.78,-78.34],[-35.33,-78.12],[-33.9,-77.89],[-32.21,-77.65],[-31,-77.36],[-29.78,-77.07],[-28.88,-76.67],[-27.51,-76.5],[-26.16,-76.36],[-25.47,-76.28],[-23.93,-76.24],[-22.46,-76.11],[-21.22,-75.91],[-20.01,-75.67],[-18.91,-75.44],[-17.52,-75.13],[-16.64,-74.79],[-15.7,-74.5],[-15.41,-74.11],[-16.47,-73.87],[-16.11,-73.46],[-15.45,-73.15],[-14.41,-72.95],[-13.31,-72.72],[-12.29,-72.4],[-11.51,-72.01],[-11.02,-71.54],[-10.3,-71.27],[-9.1,-71.32],[-8.61,-71.66],[-7.42,-71.7],[-7.38,-71.32],[-6.87,-70.93],[-5.79,-71.03],[-5.54,-71.4],[-4.34,-71.46],[-3.05,-71.29],[-1.8,-71.17],[-0.66,-71.23],[-0.23,-71.64],[0.87,-71.3],[1.89,-71.13],[3.02,-70.99],[4.14,-70.85],[5.16,-70.62],[6.27,-70.46],[7.14,-70.25],[7.74,-69.89],[8.49,-70.15],[9.53,-70.01],[10.25,-70.48],[10.82,-70.83],[11.95,-70.64],[12.4,-70.25],[13.42,-69.97],[14.73,-70.03],[15.13,-70.4],[15.95,-70.03],[17.03,-69.91],[18.2,-69.87],[19.26,-69.89],[20.38,-70.01],[21.45,-70.07],[21.92,-70.4],[22.57,-70.7],[23.67,-70.52],[24.84,-70.48],[25.98,-70.48],[27.09,-70.46],[28.09,-70.32],[29.15,-70.21],[30.03,-69.93],[30.97,-69.76],[31.99,-69.66],[32.75,-69.38],[33.3,-68.84],[33.87,-68.5],[34.91,-68.66],[35.3,-69.01],[36.16,-69.25],[37.2,-69.17],[37.91,-69.52],[38.65,-69.78],[39.67,-69.54],[40.02,-69.11],[40.92,-68.93],[41.96,-68.6],[42.94,-68.46],[44.11,-68.27],[44.9,-68.05],[45.72,-67.82],[46.5,-67.6],[47.44,-67.72],[48.34,-67.37],[48.99,-67.09],[49.93,-67.11],[50.75,-66.88],[50.95,-66.52],[51.79,-66.25],[52.61,-66.05],[53.61,-65.9],[54.53,-65.82],[55.41,-65.88],[56.36,-65.97],[57.16,-66.25],[57.26,-66.68],[58.14,-67.01],[58.74,-67.29],[59.94,-67.41],[60.61,-67.68],[61.43,-67.95],[62.39,-68.01],[63.19,-67.82],[64.05,-67.41],[64.99,-67.62],[65.97,-67.74],[66.91,-67.86],[67.89,-67.93],[68.89,-67.93],[69.71,-68.97],[69.67,-69.23],[69.56,-69.68],[68.6,-69.93],[67.81,-70.31],[67.95,-70.7],[69.07,-70.68],[68.93,-71.07],[68.42,-71.44],[67.95,-71.85],[68.71,-72.17],[69.87,-72.26],[71.02,-72.09],[71.57,-71.7],[71.91,-71.32],[72.45,-71.01],[73.08,-70.72],[73.34,-70.36],[73.86,-69.87],[74.49,-69.78],[75.63,-69.74],[76.63,-69.62],[77.64,-69.46],[78.13,-69.07],[78.43,-68.7],[79.11,-68.33],[80.09,-68.07],[80.94,-67.88],[81.48,-67.54],[82.05,-67.37],[82.78,-67.21],[83.78,-67.31],[84.68,-67.21],[85.66,-67.09],[86.75,-67.15],[87.48,-66.88],[87.99,-66.21],[88.36,-66.48],[88.83,-66.95],[89.67,-67.15],[90.63,-67.23],[91.59,-67.11],[92.61,-67.19],[93.55,-67.21],[94.18,-67.11],[95.02,-67.17],[95.78,-67.39],[96.68,-67.25],[97.76,-67.25],[98.68,-67.11],[99.72,-67.25],[100.38,-66.92],[100.89,-66.58],[101.58,-66.31],[102.83,-65.56],[103.48,-65.7],[104.24,-65.97],[104.91,-66.33],[106.18,-66.93],[107.16,-66.95],[108.08,-66.95],[109.16,-66.84],[110.24,-66.7],[111.06,-66.43],[111.74,-66.13],[112.86,-66.09],[113.6,-65.88],[114.39,-66.07],[114.9,-66.39],[115.6,-66.7],[116.7,-66.66],[117.38,-66.92],[118.58,-67.17],[119.83,-67.27],[120.87,-67.19],[121.65,-66.88],[122.32,-66.56],[123.22,-66.48],[124.12,-66.62],[125.16,-66.72],[126.1,-66.56],[127,-66.56],[127.88,-66.66],[128.8,-66.76],[129.7,-66.58],[130.78,-66.43],[131.8,-66.39],[132.94,-66.39],[133.86,-66.29],[134.76,-66.21],[135.03,-65.72],[135.07,-65.31],[135.7,-65.58],[135.87,-66.03],[136.21,-66.45],[136.62,-66.78],[137.46,-66.95],[138.6,-66.9],[139.91,-66.88],[140.81,-66.82],[142.12,-66.82],[143.06,-66.8],[144.37,-66.84],[145.49,-66.92],[146.2,-67.23],[146,-67.6],[146.65,-67.9],[147.72,-68.13],[148.84,-68.39],[150.13,-68.56],[151.48,-68.72],[152.5,-68.87],[153.64,-68.89],[154.28,-68.56],[155.17,-68.84],[155.93,-69.15],[156.81,-69.38],[158.03,-69.48],[159.18,-69.6],[159.67,-69.99],[160.81,-70.23],[161.57,-70.58],[162.69,-70.74],[163.84,-70.72],[164.92,-70.78],[166.11,-70.76],[167.31,-70.83],[168.43,-70.97],[169.46,-71.21],[170.5,-71.4],[171.21,-71.7],[171.09,-72.09],[170.56,-72.44],[170.11,-72.89],[169.76,-73.24],[169.29,-73.66],[167.98,-73.81],[167.39,-74.17],[166.09,-74.38],[165.64,-74.77],[164.96,-75.15],[164.23,-75.46],[163.82,-75.87],[163.57,-76.24],[163.47,-76.69],[163.49,-77.07],[164.06,-77.46],[164.27,-77.83],[164.74,-78.18],[166.6,-78.32],[167,-78.75],[165.19,-78.91],[163.67,-79.12],[161.77,-79.16],[160.92,-79.73],[160.75,-80.2],[160.32,-80.57],[159.79,-80.95],[161.12,-81.28],[161.63,-81.69],[162.49,-82.06],[163.71,-82.4],[165.1,-82.71],[166.6,-83.02],[168.9,-83.34],[169.4,-83.83],[172.28,-84.04],[172.48,-84.12],[173.22,-84.41],[175.99,-84.16],[178.28,-84.47],[180,-84.71],[-179.94,-84.72],[-179.06,-84.14],[-177.26,-84.45],[-177.14,-84.42],[-176.08,-84.1],[-175.95,-84.11],[-175.83,-84.12],[-174.38,-84.53],[-173.12,-84.12],[-172.89,-84.06],[-169.95,-83.88],[-169,-84.12],[-168.53,-84.24],[-167.02,-84.57],[-164.18,-84.83],[-161.93,-85.14],[-158.07,-85.37],[-155.19,-85.1],[-150.94,-85.3],[-148.53,-85.61],[-145.89,-85.32],[-143.11,-85.04],[-142.89,-84.57],[-146.83,-84.53],[-150.06,-84.3],[-150.9,-83.9],[-153.59,-83.69],[-153.41,-83.24],[-153.04,-82.83],[-152.67,-82.45],[-152.86,-82.04],[-154.53,-81.77],[-155.29,-81.42],[-156.84,-81.1],[-154.41,-81.16],[-152.1,-81],[-150.65,-81.34],[-148.87,-81.04],[-147.22,-80.67],[-146.42,-80.34],[-146.77,-79.93],[-148.06,-79.65],[-149.53,-79.36],[-151.59,-79.3],[-153.39,-79.16],[-155.33,-79.06],[-155.98,-78.69],[-157.27,-78.38],[-158.05,-78.03],[-158.37,-76.89],[-157.88,-76.99],[-156.97,-77.3],[-155.33,-77.2],[-153.74,-77.07],[-152.92,-77.5],[-151.33,-77.4],[-150,-77.18],[-148.75,-76.91],[-147.61,-76.58],[-146.1,-76.48],[-146.14,-76.11],[-146.5,-75.73],[-146.2,-75.38],[-144.91,-75.2],[-144.32,-75.54],[-142.79,-75.34],[-141.64,-75.09],[-140.21,-75.07],[-138.86,-74.97],[-137.51,-74.73],[-136.43,-74.52],[-135.21,-74.3],[-134.43,-74.36],[-133.75,-74.44],[-132.26,-74.3],[-130.93,-74.48],[-129.55,-74.46],[-128.24,-74.32],[-126.89,-74.42],[-125.4,-74.52],[-124.01,-74.48],[-122.56,-74.5],[-121.07,-74.52],[-119.7,-74.48],[-118.68,-74.19],[-117.47,-74.03],[-116.22,-74.24],[-115.02,-74.07],[-113.94,-73.71],[-113.3,-74.03],[-112.95,-74.38],[-112.3,-74.71],[-111.26,-74.42],[-110.07,-74.79],[-108.71,-74.91],[-107.56,-75.18],[-106.15,-75.13],[-104.88,-74.95],[-103.37,-74.99],[-102.02,-75.13],[-100.65,-75.3],[-100.12,-74.87],[-100.76,-74.54],[-101.25,-74.19],[-102.55,-74.11],[-103.11,-73.73],[-103.33,-73.36],[-103.68,-72.62],[-102.92,-72.75],[-101.61,-72.81],[-100.31,-72.75],[-99.14,-72.91],[-98.12,-73.21],[-97.69,-73.56],[-96.34,-73.62],[-95.04,-73.48],[-93.67,-73.28],[-92.44,-73.17],[-91.42,-73.4],[-90.09,-73.32],[-89.23,-72.56],[-88.42,-73.01],[-87.27,-73.19],[-86.01,-73.09],[-85.19,-73.48],[-83.88,-73.52],[-82.67,-73.64],[-81.47,-73.85],[-80.69,-73.48],[-80.3,-73.13],[-79.3,-73.52],[-77.93,-73.42],[-76.91,-73.64],[-76.22,-73.97],[-74.89,-73.87],[-73.85,-73.66],[-72.83,-73.4],[-71.62,-73.26],[-70.21,-73.15],[-68.94,-73.01],[-67.96,-72.79],[-67.37,-72.48],[-67.13,-72.05],[-67.25,-71.64],[-67.56,-71.25],[-67.92,-70.85],[-68.23,-70.46],[-68.49,-70.11],[-68.54,-69.72],[-68.45,-69.33],[-67.98,-68.95],[-67.58,-68.54],[-67.43,-68.15],[-67.62,-67.72],[-67.74,-67.33],[-67.25,-66.88],[-66.7,-66.58],[-66.06,-66.21],[-65.37,-65.9],[-64.57,-65.6],[-64.18,-65.17],[-63.63,-64.9],[-63,-64.64],[-62.04,-64.58],[-61.41,-64.27],[-60.71,-64.07],[-59.89,-63.96],[-59.16,-63.7],[-58.59,-63.39],[-57.81,-63.27],[-57.22,-63.53],[-57.6,-63.86],[-58.61,-64.15]],\n      [[145.4,-40.79],[146.36,-41.14],[146.91,-41],[147.69,-40.81],[148.29,-40.88],[148.36,-42.06],[148.02,-42.41],[147.91,-43.21],[147.56,-42.94],[146.87,-43.63],[146.66,-43.58],[146.05,-43.55],[145.43,-42.69],[145.3,-42.03],[144.72,-41.16],[144.74,-40.7],[145.4,-40.79]],\n      [[143.56,-13.76],[143.92,-14.55],[144.56,-14.17],[144.89,-14.59],[145.37,-14.98],[145.27,-15.43],[145.49,-16.29],[145.64,-16.78],[145.89,-16.91],[146.16,-17.76],[146.06,-18.28],[146.39,-18.96],[147.47,-19.48],[148.18,-19.96],[148.85,-20.39],[148.72,-20.63],[149.29,-21.26],[149.68,-22.34],[150.08,-22.12],[150.48,-22.56],[150.73,-22.4],[150.9,-23.46],[151.61,-24.08],[152.07,-24.46],[152.86,-25.27],[153.14,-26.07],[153.16,-26.64],[153.09,-27.26],[153.57,-28.11],[153.51,-29],[153.34,-29.46],[153.07,-30.35],[153.09,-30.92],[152.89,-31.64],[152.45,-32.55],[151.71,-33.04],[151.34,-33.82],[151.01,-34.31],[150.71,-35.17],[150.33,-35.67],[150.08,-36.42],[149.95,-37.11],[150,-37.43],[149.42,-37.77],[148.3,-37.81],[147.38,-38.22],[146.92,-38.61],[146.32,-39.04],[145.49,-38.59],[144.88,-38.42],[145.03,-37.9],[144.49,-38.09],[143.61,-38.81],[142.75,-38.54],[142.18,-38.38],[141.61,-38.31],[140.64,-38.02],[139.99,-37.4],[139.81,-36.64],[139.57,-36.14],[139.08,-35.73],[138.12,-35.61],[138.45,-35.13],[138.21,-34.38],[137.72,-35.08],[136.83,-35.26],[137.35,-34.71],[137.5,-34.13],[137.89,-33.64],[137.81,-32.9],[137,-33.75],[136.37,-34.09],[135.99,-34.89],[135.21,-34.48],[135.24,-33.95],[134.61,-33.22],[134.09,-32.85],[134.27,-32.62],[132.99,-32.01],[132.29,-31.98],[131.33,-31.5],[129.54,-31.59],[128.24,-31.95],[127.1,-32.28],[126.15,-32.22],[125.09,-32.73],[124.22,-32.96],[124.03,-33.48],[123.66,-33.89],[122.81,-33.91],[122.18,-34],[121.3,-33.82],[120.58,-33.93],[119.89,-33.98],[119.3,-34.51],[119.01,-34.46],[118.51,-34.75],[118.02,-35.06],[117.3,-35.03],[116.63,-35.03],[115.56,-34.39],[115.03,-34.2],[115.05,-33.62],[115.55,-33.49],[115.71,-33.26],[115.68,-32.9],[115.8,-32.21],[115.69,-31.61],[115.16,-30.6],[115,-30.03],[115.04,-29.46],[114.64,-28.81],[114.62,-28.52],[114.17,-28.12],[114.05,-27.33],[113.48,-26.54],[113.34,-26.12],[113.78,-26.55],[113.44,-25.62],[113.94,-25.91],[114.23,-26.3],[114.22,-25.79],[113.72,-25],[113.63,-24.68],[113.39,-24.38],[113.5,-23.81],[113.71,-23.56],[113.84,-23.06],[113.74,-22.48],[114.15,-21.76],[114.23,-22.52],[114.65,-21.83],[115.46,-21.5],[115.95,-21.07],[116.71,-20.7],[117.17,-20.62],[117.44,-20.75],[118.23,-20.37],[118.84,-20.26],[118.99,-20.04],[119.25,-19.95],[119.81,-19.98],[120.86,-19.68],[121.4,-19.24],[121.66,-18.71],[122.24,-18.2],[122.29,-17.8],[122.31,-17.25],[123.01,-16.41],[123.43,-17.27],[123.86,-17.07],[123.5,-16.6],[123.82,-16.11],[124.26,-16.33],[124.38,-15.57],[124.93,-15.08],[125.17,-14.68],[125.67,-14.51],[125.69,-14.23],[126.13,-14.35],[126.14,-14.1],[126.58,-13.95],[127.07,-13.82],[127.8,-14.28],[128.36,-14.87],[128.99,-14.88],[129.62,-14.97],[129.41,-14.42],[129.89,-13.62],[130.34,-13.36],[130.18,-13.11],[130.62,-12.54],[131.22,-12.18],[131.74,-12.3],[132.58,-12.11],[132.56,-11.6],[131.82,-11.27],[132.36,-11.13],[133.02,-11.38],[133.55,-11.79],[134.39,-12.04],[134.68,-11.94],[135.3,-12.25],[135.88,-11.96],[136.26,-12.05],[136.49,-11.86],[136.95,-12.35],[136.69,-12.89],[136.31,-13.29],[135.96,-13.32],[136.08,-13.72],[135.78,-14.22],[135.43,-14.72],[135.5,-15],[136.3,-15.55],[137.07,-15.87],[137.58,-16.22],[138.3,-16.81],[138.59,-16.81],[139.11,-17.06],[139.26,-17.37],[140.22,-17.71],[140.88,-17.37],[141.07,-16.83],[141.27,-16.39],[141.4,-15.84],[141.7,-15.04],[141.56,-14.56],[141.64,-14.27],[141.52,-13.7],[141.65,-12.94],[141.84,-12.74],[141.69,-12.41],[141.93,-11.88],[142.12,-11.33],[142.14,-11.04],[142.52,-10.67],[142.8,-11.16],[142.87,-11.78],[143.12,-11.91],[143.16,-12.33],[143.52,-12.83],[143.6,-13.4],[143.56,-13.76]],\n      [[16.98,48.12],[16.9,47.71],[16.34,47.71],[16.53,47.5],[16.2,46.85]],\n      [[16.2,46.85],[16.01,46.68],[15.14,46.66],[14.63,46.43],[13.81,46.51]],\n      [[13.81,46.51],[12.38,46.77],[12.15,47.12],[11.16,46.94],[11.05,46.75],[10.44,46.89]],\n      [[10.44,46.89],[9.88,46.93],[9.87,47.02]],\n      [[9.87,47.02],[9.61,47.06]],\n      [[9.61,47.06],[9.64,47.1],[9.62,47.15],[9.56,47.17],[9.58,47.21]],\n      [[9.58,47.21],[9.53,47.27],[9.63,47.36]],\n      [[9.63,47.36],[9.59,47.53]],\n      [[9.59,47.53],[9.9,47.58],[10.4,47.3],[10.54,47.57],[11.43,47.52],[12.14,47.7],[12.62,47.67],[12.93,47.47],[13.03,47.64],[12.88,48.29],[13.24,48.42],[13.6,48.88]],\n      [[13.6,48.88],[14.34,48.56],[14.9,48.96],[15.25,49.04],[16.03,48.73],[16.5,48.79],[16.96,48.6]],\n      [[16.96,48.6],[16.88,48.47],[16.98,48.12]],\n      [[46.14,38.74],[45.46,38.87],[44.95,39.34],[44.79,39.71]],\n      [[47.99,41.41],[48.58,41.81],[49.11,41.28],[49.62,40.57],[50.08,40.53],[50.39,40.26],[49.57,40.18],[49.4,39.4],[49.22,39.05],[48.86,38.82],[48.88,38.32]],\n      [[48.88,38.32],[48.63,38.27],[48.01,38.79],[48.36,39.29],[48.06,39.58],[47.69,39.51],[46.51,38.77]],\n      [[44.97,41.25],[45.22,41.41],[45.96,41.12],[46.5,41.06],[46.64,41.18],[46.15,41.72],[46.4,41.86]],\n      [[46.4,41.86],[46.69,41.83],[47.37,41.22],[47.82,41.15],[47.99,41.41]],\n      [[29.34,-4.5],[29.28,-3.29],[29.02,-2.84]],\n      [[29.02,-2.84],[29.63,-2.92],[29.94,-2.35],[30.47,-2.41]],\n      [[30.47,-2.41],[30.53,-2.81],[30.74,-3.03],[30.75,-3.36],[30.51,-3.57],[30.12,-4.09],[29.75,-4.45]],\n      [[29.75,-4.45],[29.34,-4.5]],\n      [[4.05,51.27],[4.97,51.48],[5.61,51.04],[6.16,50.8]],\n      [[6.16,50.8],[6.04,50.13]],\n      [[6.04,50.13],[5.78,50.09],[5.67,49.53]],\n      [[5.67,49.53],[4.8,49.99],[4.29,49.91],[3.59,50.38],[3.12,50.78],[2.66,50.8],[2.51,51.15]],\n      [[2.51,51.15],[3.31,51.35],[4.05,51.27]],\n      [[2.69,6.26],[1.87,6.14]],\n      [[1.87,6.14],[1.62,6.83],[1.66,9.13],[1.46,9.33],[1.43,9.83],[1.08,10.18],[0.77,10.47],[0.9,11]],\n      [[0.9,11],[1.24,11.11],[1.45,11.55],[1.94,11.64],[2.15,11.94]],\n      [[2.15,11.94],[2.49,12.23],[2.85,12.24],[3.61,11.66]],\n      [[3.61,11.66],[3.57,11.33],[3.8,10.73],[3.6,10.33],[3.71,10.06],[3.22,9.44],[2.91,9.14],[2.72,8.51],[2.75,7.87],[2.69,6.26]],\n      [[-2.83,9.64],[-3.51,9.9],[-3.98,9.86],[-4.33,9.61],[-4.78,9.82],[-4.95,10.15],[-5.4,10.37]],\n      [[-5.4,10.37],[-5.47,10.95],[-5.2,11.38],[-5.22,11.71],[-4.43,12.54],[-4.28,13.23],[-4.01,13.47],[-3.52,13.34],[-3.1,13.54],[-2.97,13.8],[-2.19,14.25],[-2,14.56],[-1.07,14.97],[-0.52,15.12],[-0.27,14.92],[0.37,14.93]],\n      [[0.37,14.93],[0.3,14.44],[0.43,13.99],[0.99,13.34],[1.02,12.85],[2.18,12.63],[2.15,11.94]],\n      [[0.9,11],[0.02,11.02]],\n      [[0.02,11.02],[-0.44,11.1],[-0.76,10.94],[-1.2,11.01],[-2.94,10.96],[-2.96,10.4],[-2.83,9.64]],\n      [[92.67,22.04],[92.65,21.32],[92.3,21.48],[92.37,20.67]],\n      [[92.37,20.67],[92.08,21.19],[92.03,21.7],[91.83,22.18],[91.42,22.77],[90.5,22.81],[90.59,22.39],[90.27,21.84],[89.85,22.04],[89.7,21.86],[89.42,21.97],[89.03,22.06]],\n      [[89.03,22.06],[88.88,22.88],[88.53,23.63],[88.7,24.23],[88.08,24.5],[88.31,24.87],[88.93,25.24],[88.21,25.77],[88.56,26.45],[89.36,26.01],[89.83,25.97],[89.92,25.27],[90.87,25.13],[91.8,25.15],[92.38,24.98],[91.92,24.13],[91.47,24.07],[91.16,23.5],[91.71,22.99],[91.87,23.62],[92.15,23.63],[92.67,22.04]],\n      [[22.66,44.23],[22.94,43.82],[23.33,43.9],[24.1,43.74],[25.57,43.69],[26.07,43.94],[27.24,44.18],[27.97,43.81],[28.56,43.71]],\n      [[28.56,43.71],[28.04,43.29],[27.67,42.58],[28,42.01]],\n      [[28,42.01],[27.14,42.14],[26.12,41.83]],\n      [[26.12,41.83],[26.11,41.33],[25.2,41.23],[24.49,41.58],[23.69,41.31],[22.95,41.34]],\n      [[22.95,41.34],[22.88,42],[22.38,42.32]],\n      [[22.38,42.32],[22.55,42.46],[22.44,42.58],[22.6,42.9],[22.99,43.21],[22.5,43.64],[22.41,44.01],[22.66,44.23]],\n      [[-77.53,23.76],[-77.78,23.71],[-78.03,24.29],[-78.41,24.58],[-78.19,25.21],[-77.89,25.17],[-77.54,24.34],[-77.53,23.76]],\n      [[-77.82,26.58],[-78.91,26.42],[-78.98,26.79],[-78.51,26.87],[-77.85,26.84],[-77.82,26.58]],\n      [[-77,26.59],[-77.17,25.88],[-77.36,26.01],[-77.34,26.53],[-77.79,26.93],[-77.79,27.04],[-77,26.59]],\n      [[19.01,44.86],[19.37,44.86]],\n      [[19.37,44.86],[19.12,44.42],[19.6,44.04],[19.45,43.57],[19.22,43.52]],\n      [[19.22,43.52],[19.03,43.43],[18.71,43.2],[18.56,42.65]],\n      [[18.56,42.65],[17.67,43.03],[17.3,43.45],[16.92,43.67],[16.46,44.04],[16.24,44.35],[15.75,44.82],[15.96,45.23],[16.32,45],[16.53,45.21],[17,45.23],[17.86,45.07],[18.55,45.08],[19.01,44.86]],\n      [[23.48,53.91],[24.45,53.91],[25.54,54.28],[25.77,54.85],[26.59,55.17],[26.49,55.62]],\n      [[26.49,55.62],[27.1,55.78],[28.18,56.17]],\n      [[28.18,56.17],[29.23,55.92],[29.37,55.67],[29.9,55.79],[30.87,55.55],[30.97,55.08],[30.76,54.81],[31.38,54.16],[31.79,53.97],[31.73,53.79],[32.41,53.62],[32.69,53.35],[32.3,53.13]],\n      [[32.3,53.13],[31.5,53.17],[31.31,53.07]],\n      [[31.31,53.07],[31.54,52.74]],\n      [[31.54,52.74],[31.79,52.1]],\n      [[31.79,52.1],[30.93,52.04],[30.62,51.82],[30.56,51.32],[30.16,51.42],[29.25,51.37],[28.99,51.6],[28.62,51.43],[28.24,51.57],[27.45,51.59],[26.34,51.83],[25.33,51.91],[24.55,51.89],[24.01,51.62],[23.53,51.58]],\n      [[23.53,51.58],[23.51,52.02],[23.2,52.49],[23.8,52.69],[23.8,53.09],[23.53,53.47],[23.48,53.91]],\n      [[-89.14,17.81],[-89.15,17.96],[-89.03,18],[-88.85,17.88],[-88.49,18.49],[-88.3,18.5]],\n      [[-88.3,18.5],[-88.3,18.35],[-88.11,18.35],[-88.12,18.08],[-88.29,17.64],[-88.2,17.49],[-88.3,17.13],[-88.24,17.04],[-88.36,16.53],[-88.55,16.27],[-88.73,16.23],[-88.93,15.89]],\n      [[-88.93,15.89],[-89.23,15.89],[-89.15,17.02],[-89.14,17.81]],\n      [[-67.11,-22.74],[-67.83,-22.87],[-68.22,-21.49],[-68.76,-20.37],[-68.44,-19.41],[-68.97,-18.98],[-69.1,-18.26],[-69.59,-17.58]],\n      [[-69.59,-17.58],[-68.96,-16.5],[-69.39,-15.66],[-69.16,-15.32],[-69.34,-14.95],[-68.95,-14.45],[-68.93,-13.6],[-68.88,-12.9],[-68.67,-12.56],[-69.53,-10.95]],\n      [[-69.53,-10.95],[-68.79,-11.04],[-68.27,-11.01],[-68.05,-10.71],[-67.17,-10.31],[-66.65,-9.93],[-65.34,-9.76],[-65.44,-10.51],[-65.32,-10.9],[-65.4,-11.57],[-64.32,-12.46],[-63.2,-12.63],[-62.8,-13],[-62.13,-13.2],[-61.71,-13.49],[-61.08,-13.48],[-60.5,-13.78],[-60.46,-14.35],[-60.26,-14.65],[-60.25,-15.08],[-60.54,-15.09],[-60.16,-16.26],[-58.24,-16.3],[-58.39,-16.88],[-58.28,-17.27],[-57.73,-17.55],[-57.5,-18.17],[-57.68,-18.96],[-57.95,-19.4],[-57.85,-19.97],[-58.17,-20.18]],\n      [[-58.17,-20.18],[-58.18,-19.87],[-59.12,-19.36],[-60.04,-19.34],[-61.79,-19.63],[-62.27,-20.51],[-62.29,-21.05],[-62.69,-22.25]],\n      [[-54.63,-25.74],[-54.43,-25.16],[-54.29,-24.57],[-54.29,-24.02],[-54.65,-23.84],[-55.03,-24],[-55.4,-23.96],[-55.52,-23.57],[-55.61,-22.66],[-55.8,-22.36],[-56.47,-22.09],[-56.88,-22.28],[-57.94,-22.09],[-57.87,-20.73],[-58.17,-20.18]],\n      [[-69.53,-10.95],[-70.09,-11.12],[-70.55,-11.01],[-70.48,-9.49],[-71.3,-10.08],[-72.18,-10.05],[-72.56,-9.52],[-73.23,-9.46],[-73.02,-9.03],[-73.57,-8.42],[-73.99,-7.52],[-73.72,-7.34],[-73.72,-6.92],[-73.12,-6.63],[-73.22,-6.09],[-72.96,-5.74],[-72.89,-5.27],[-71.75,-4.59],[-70.93,-4.4],[-70.79,-4.25],[-69.89,-4.3]],\n      [[-69.89,-4.3],[-69.44,-1.56],[-69.42,-1.12],[-69.58,-0.55],[-70.02,-0.19],[-70.02,0.54],[-69.45,0.71],[-69.25,0.6],[-69.22,0.99],[-69.8,1.09],[-69.82,1.71],[-67.87,1.69],[-67.54,2.04],[-67.26,1.72],[-67.07,1.13],[-66.88,1.25]],\n      [[-66.88,1.25],[-66.33,0.72],[-65.55,0.79],[-65.35,1.1],[-64.61,1.33],[-64.2,1.49],[-64.08,1.92],[-63.37,2.2],[-63.42,2.41],[-64.27,2.5],[-64.41,3.13],[-64.37,3.8],[-64.82,4.06],[-64.63,4.15],[-63.89,4.02],[-63.09,3.77],[-62.8,4.01],[-62.09,4.16],[-60.97,4.54],[-60.6,4.92],[-60.73,5.2]],\n      [[-60.73,5.2],[-60.21,5.24],[-59.98,5.01],[-60.11,4.57],[-59.77,4.42],[-59.54,3.96],[-59.82,3.61],[-59.97,2.76],[-59.72,2.25],[-59.65,1.79],[-59.03,1.32],[-58.54,1.27],[-58.43,1.46],[-58.11,1.51],[-57.66,1.68],[-57.34,1.95],[-56.78,1.86],[-56.54,1.9]],\n      [[-56.54,1.9],[-56,1.82],[-55.91,2.02],[-56.07,2.22],[-55.97,2.51],[-55.57,2.42],[-55.1,2.52],[-54.52,2.31]],\n      [[-54.52,2.31],[-54.09,2.11],[-53.78,2.38],[-53.55,2.33],[-53.42,2.05],[-52.94,2.12],[-52.56,2.5],[-52.25,3.24],[-51.66,4.16]],\n      [[-51.66,4.16],[-51.32,4.2],[-51.07,3.65],[-50.51,1.9],[-49.97,1.74],[-49.95,1.05],[-50.7,0.22],[-50.39,-0.08],[-48.62,-0.24],[-48.58,-1.24],[-47.82,-0.58],[-46.57,-0.94],[-44.91,-1.55],[-44.42,-2.14],[-44.58,-2.69],[-43.42,-2.38],[-41.47,-2.91],[-39.98,-2.87],[-38.5,-3.7],[-37.22,-4.82],[-36.45,-5.11],[-35.6,-5.15],[-35.24,-5.46],[-34.9,-6.74],[-34.73,-7.34],[-35.13,-9],[-35.64,-9.65],[-37.05,-11.04],[-37.68,-12.17],[-38.42,-13.04],[-38.67,-13.06],[-38.95,-13.79],[-38.88,-15.67],[-39.16,-17.21],[-39.27,-17.87],[-39.58,-18.26],[-39.76,-19.6],[-40.77,-20.9],[-40.94,-21.94],[-41.75,-22.37],[-41.99,-22.97],[-43.07,-22.97],[-44.65,-23.35],[-45.35,-23.8],[-46.47,-24.09],[-47.65,-24.89],[-48.5,-25.88],[-48.64,-26.62],[-48.47,-27.18],[-48.66,-28.19],[-48.89,-28.67],[-49.59,-29.22],[-50.7,-30.98],[-51.58,-31.78],[-52.26,-32.25],[-52.71,-33.2],[-53.37,-33.77]],\n      [[-53.37,-33.77],[-53.65,-33.2],[-53.21,-32.73],[-53.79,-32.05],[-54.57,-31.49],[-55.6,-30.85],[-55.97,-30.88],[-56.98,-30.11],[-57.63,-30.22]],\n      [[114.2,4.53],[114.6,4.9],[115.45,5.45]],\n      [[115.45,5.45],[115.41,4.96],[115.35,4.32],[114.87,4.35],[114.66,4.01],[114.2,4.53]],\n      [[91.7,27.77],[92.1,27.45],[92.03,26.84],[91.22,26.81],[90.37,26.88],[89.74,26.72],[88.84,27.1],[88.81,27.3]],\n      [[88.81,27.3],[89.48,28.04],[90.02,28.3],[90.73,28.06],[91.26,28.04],[91.7,27.77]],\n      [[29.43,-22.09],[28.02,-22.83],[27.12,-23.57],[26.79,-24.24],[26.49,-24.62],[25.94,-24.7],[25.77,-25.17],[25.66,-25.49],[25.03,-25.72],[24.21,-25.67],[23.73,-25.39],[23.31,-25.27],[22.82,-25.5],[22.58,-25.98],[22.11,-26.28],[21.61,-26.73],[20.89,-26.83],[20.67,-26.48],[20.76,-25.87],[20.17,-24.92],[19.9,-24.77]],\n      [[19.9,-24.77],[19.9,-21.85],[20.88,-21.81],[20.91,-18.25],[21.66,-18.22],[23.2,-17.87],[23.58,-18.28],[24.22,-17.89],[24.52,-17.89],[25.08,-17.66]],\n      [[25.08,-17.66],[25.26,-17.74]],\n      [[25.26,-17.74],[25.65,-18.54],[25.85,-18.71],[26.16,-19.29],[27.3,-20.39],[27.72,-20.5],[27.73,-20.85],[28.02,-21.49],[28.79,-21.64],[29.43,-22.09]],\n      [[15.28,7.42],[16.11,7.5],[16.29,7.75],[16.46,7.73],[16.71,7.51],[17.96,7.89],[18.39,8.28],[18.91,8.63],[18.81,8.98],[19.09,9.07],[20.06,9.01],[21,9.48],[21.72,10.57],[22.23,10.97],[22.86,11.14]],\n      [[22.86,11.14],[22.98,10.71],[23.55,10.09],[23.56,9.68],[23.39,9.27],[23.46,8.95],[23.81,8.67]],\n      [[23.81,8.67],[24.57,8.23]],\n      [[24.57,8.23],[25.11,7.83],[25.12,7.5],[25.8,6.98],[26.21,6.55],[26.47,5.95],[27.21,5.55],[27.37,5.23]],\n      [[27.37,5.23],[27.04,5.13],[26.4,5.15],[25.65,5.26],[25.28,5.17],[25.13,4.93],[24.81,4.9],[24.41,5.11],[23.3,4.61],[22.84,4.71],[22.7,4.63],[22.41,4.03],[21.66,4.22],[20.93,4.32],[20.29,4.69],[19.47,5.03],[18.93,4.71],[18.54,4.2],[18.45,3.5]],\n      [[18.45,3.5],[17.81,3.56],[17.13,3.73],[16.54,3.2],[16.01,2.27]],\n      [[16.01,2.27],[15.91,2.56],[15.86,3.01],[15.41,3.34],[15.04,3.85],[14.95,4.21],[14.48,4.73],[14.56,5.03],[14.46,5.45],[14.54,6.23],[14.78,6.41],[15.28,7.42]],\n      [[-63.66,46.55],[-62.94,46.42],[-62.01,46.44],[-62.5,46.03],[-62.87,45.97],[-64.14,46.39],[-64.39,46.73],[-64.01,47.04],[-63.66,46.55]],\n      [[-61.81,49.11],[-62.29,49.09],[-63.59,49.4],[-64.52,49.87],[-64.17,49.96],[-62.86,49.71],[-61.84,49.29],[-61.81,49.11]],\n      [[-123.51,48.51],[-124.01,48.37],[-125.66,48.83],[-125.95,49.18],[-126.85,49.53],[-127.03,49.81],[-128.06,49.99],[-128.44,50.54],[-128.36,50.77],[-127.31,50.55],[-126.7,50.4],[-125.76,50.3],[-125.42,49.95],[-124.92,49.48],[-123.92,49.06],[-123.51,48.51]],\n      [[-56.13,50.69],[-56.8,49.81],[-56.14,50.15],[-55.47,49.94],[-55.82,49.59],[-54.94,49.31],[-54.47,49.56],[-53.48,49.25],[-53.79,48.52],[-53.09,48.69],[-52.96,48.16],[-52.65,47.54],[-53.07,46.66],[-53.52,46.62],[-54.18,46.81],[-53.96,47.63],[-54.24,47.75],[-55.4,46.88],[-56,46.92],[-55.29,47.39],[-56.25,47.63],[-57.33,47.57],[-59.27,47.6],[-59.42,47.9],[-58.8,48.25],[-59.23,48.52],[-58.39,49.13],[-57.36,50.72],[-56.74,51.29],[-55.87,51.63],[-55.41,51.59],[-55.6,51.32],[-56.13,50.69]],\n      [[-132.71,54.04],[-132.71,54.04],[-132.71,54.04],[-132.71,54.04],[-131.75,54.12],[-132.05,52.98],[-131.18,52.18],[-131.58,52.18],[-132.18,52.64],[-132.55,53.1],[-133.05,53.41],[-133.24,53.85],[-133.18,54.17],[-132.71,54.04]],\n      [[-79.27,62.16],[-79.66,61.63],[-80.1,61.72],[-80.36,62.02],[-80.32,62.09],[-79.93,62.39],[-79.52,62.36],[-79.27,62.16]],\n      [[-81.9,62.71],[-83.07,62.16],[-83.77,62.18],[-83.99,62.45],[-83.25,62.91],[-81.88,62.9],[-81.9,62.71]],\n      [[-85.16,65.66],[-84.98,65.22],[-84.46,65.37],[-83.88,65.11],[-82.79,64.77],[-81.64,64.46],[-81.55,63.98],[-80.82,64.06],[-80.1,63.73],[-80.99,63.41],[-82.55,63.65],[-83.11,64.1],[-84.1,63.57],[-85.52,63.05],[-85.87,63.64],[-87.22,63.54],[-86.35,64.04],[-86.22,64.82],[-85.88,65.74],[-85.16,65.66]],\n      [[-75.87,67.15],[-76.99,67.1],[-77.24,67.59],[-76.81,68.15],[-75.9,68.29],[-75.11,68.01],[-75.1,67.58],[-75.22,67.44],[-75.87,67.15]],\n      [[-95.65,69.11],[-96.27,68.76],[-97.62,69.06],[-98.43,68.95],[-99.8,69.4],[-98.92,69.71],[-98.22,70.14],[-97.16,69.86],[-96.56,69.68],[-96.26,69.49],[-95.65,69.11]],\n      [[-67.14,45.14],[-67.79,45.7],[-67.79,47.07],[-68.23,47.35],[-68.9,47.19],[-69.24,47.45],[-70,46.69],[-70.3,45.92],[-70.66,45.46],[-71.08,45.31],[-71.4,45.26],[-71.51,45.01],[-73.35,45.01],[-74.87,45],[-75.32,44.82],[-76.37,44.1],[-76.5,44.02],[-76.82,43.63],[-77.74,43.63],[-78.72,43.63],[-79.17,43.47],[-79.01,43.27],[-78.92,42.97],[-78.94,42.86],[-80.25,42.37],[-81.28,42.21],[-82.44,41.68],[-82.69,41.68],[-83.03,41.83],[-83.14,41.98],[-83.12,42.08],[-82.9,42.43],[-82.43,42.98],[-82.14,43.57],[-82.34,44.44],[-82.55,45.35],[-83.59,45.82],[-83.47,45.99],[-83.62,46.12],[-83.89,46.12],[-84.09,46.28],[-84.14,46.51],[-84.34,46.41],[-84.6,46.44],[-84.54,46.54],[-84.78,46.64],[-84.88,46.9],[-85.65,47.22],[-86.46,47.55],[-87.44,47.94],[-88.38,48.3],[-89.27,48.02],[-89.6,48.01],[-90.83,48.27],[-91.64,48.14],[-92.61,48.45],[-93.63,48.61],[-94.33,48.67],[-94.64,48.84],[-94.82,49.39],[-95.16,49.38],[-95.16,49],[-97.23,49],[-100.65,49],[-104.05,49],[-107.05,49],[-110.05,49],[-113,49],[-116.05,49],[-117.03,49],[-120,49],[-122.84,49]],\n      [[-122.84,49],[-122.97,49],[-124.91,49.98],[-125.62,50.42],[-127.44,50.83],[-127.99,51.72],[-127.85,52.33],[-129.13,52.76],[-129.31,53.56],[-130.51,54.29],[-130.54,54.8],[-129.98,55.29],[-130.01,55.92]],\n      [[-130.01,55.92],[-131.71,56.55],[-132.73,57.69]],\n      [[-132.73,57.69],[-133.36,58.41],[-134.27,58.86]],\n      [[-134.27,58.86],[-134.94,59.27],[-135.48,59.79],[-136.48,59.46],[-137.45,58.91],[-138.34,59.56]],\n      [[-138.34,59.56],[-139.04,60],[-140.01,60.28],[-141,60.31],[-140.99,66],[-140.99,69.71],[-139.12,69.47],[-137.55,68.99],[-136.5,68.9],[-135.63,69.32],[-134.41,69.63],[-132.93,69.51],[-131.43,69.94],[-129.79,70.19],[-129.11,69.78],[-128.36,70.01],[-128.14,70.48],[-127.45,70.38],[-125.76,69.48],[-124.42,70.16],[-124.29,69.4],[-123.06,69.56],[-122.68,69.86],[-121.47,69.8],[-119.94,69.38],[-117.6,69.01],[-116.23,68.84],[-115.25,68.91],[-113.9,68.4],[-115.3,67.9],[-113.5,67.69],[-110.8,67.81],[-109.95,67.98],[-108.88,67.38],[-107.79,67.89],[-108.81,68.31],[-108.17,68.65],[-106.95,68.7],[-106.15,68.8],[-105.34,68.56],[-104.34,68.02],[-103.22,68.1],[-101.45,67.65],[-99.9,67.81],[-98.44,67.78],[-98.56,68.4],[-97.67,68.58],[-96.12,68.24],[-96.13,67.29],[-95.49,68.09],[-94.68,68.06],[-94.23,69.07],[-95.3,69.69],[-96.47,70.09],[-96.39,71.19],[-95.21,71.92],[-93.89,71.76],[-92.88,71.32],[-91.52,70.19],[-92.41,69.7],[-90.55,69.5],[-90.55,68.47],[-89.22,69.26],[-88.02,68.62],[-88.32,67.87],[-87.35,67.2],[-86.31,67.92],[-85.58,68.78],[-85.52,69.88],[-84.1,69.81],[-82.62,69.66],[-81.28,69.16],[-81.22,68.67],[-81.96,68.13],[-81.26,67.6],[-81.39,67.11],[-83.34,66.41],[-84.74,66.26],[-85.77,66.56],[-86.07,66.06],[-87.03,65.21],[-87.32,64.78],[-88.48,64.1],[-89.91,64.03],[-90.7,63.61],[-90.77,62.96],[-91.93,62.84],[-93.16,62.02],[-94.24,60.9],[-94.63,60.11],[-94.68,58.95],[-93.22,58.78],[-92.76,57.85],[-92.3,57.09],[-90.9,57.28],[-89.04,56.85],[-88.04,56.47],[-87.32,56],[-86.07,55.72],[-85.01,55.3],[-83.36,55.24],[-82.27,55.15],[-82.44,54.28],[-82.13,53.28],[-81.4,52.16],[-79.91,51.21],[-79.14,51.53],[-78.6,52.56],[-79.12,54.14],[-79.83,54.67],[-78.23,55.14],[-77.1,55.84],[-76.54,56.53],[-76.62,57.2],[-77.3,58.05],[-78.52,58.8],[-77.34,59.85],[-77.77,60.76],[-78.11,62.32],[-77.41,62.55],[-75.7,62.28],[-74.67,62.18],[-73.84,62.44],[-72.91,62.11],[-71.68,61.53],[-71.37,61.14],[-69.59,61.06],[-69.62,60.22],[-69.29,58.96],[-68.37,58.8],[-67.65,58.21],[-66.2,58.77],[-65.25,59.87],[-64.58,60.34],[-63.8,59.44],[-62.5,58.17],[-61.4,56.97],[-61.8,56.34],[-60.47,55.78],[-59.57,55.2],[-57.98,54.95],[-57.33,54.63],[-56.94,53.78],[-56.16,53.65],[-55.76,53.27],[-55.68,52.15],[-56.41,51.77],[-57.13,51.42],[-58.77,51.06],[-60.03,50.24],[-61.72,50.08],[-63.86,50.29],[-65.36,50.3],[-66.4,50.23],[-67.24,49.51],[-68.51,49.07],[-69.95,47.74],[-71.1,46.82],[-70.26,46.99],[-68.65,48.3],[-66.55,49.13],[-65.06,49.23],[-64.17,48.74],[-65.12,48.07],[-64.8,46.99],[-64.47,46.24],[-63.17,45.74],[-61.52,45.88],[-60.52,47.01],[-60.45,46.28],[-59.8,45.92],[-61.04,45.27],[-63.25,44.67],[-64.25,44.27],[-65.36,43.55],[-66.12,43.62],[-66.16,44.47],[-64.43,45.29],[-66.03,45.26],[-67.14,45.14]],\n      [[-114.17,73.12],[-114.67,72.65],[-112.44,72.96],[-111.05,72.45],[-109.92,72.96],[-109.01,72.63],[-108.19,71.65],[-107.69,72.07],[-108.4,73.09],[-107.52,73.24],[-106.52,73.08],[-105.4,72.67],[-104.77,71.7],[-104.46,70.99],[-102.79,70.5],[-100.98,70.02],[-101.09,69.58],[-102.73,69.5],[-102.09,69.12],[-102.43,68.75],[-104.24,68.91],[-105.96,69.18],[-107.12,69.12],[-109,68.78],[-111.53,68.63],[-113.31,68.54],[-113.85,69.01],[-115.22,69.28],[-116.11,69.17],[-117.34,69.96],[-116.67,70.07],[-115.13,70.24],[-113.72,70.19],[-112.42,70.37],[-114.35,70.6],[-116.49,70.52],[-117.9,70.54],[-118.43,70.91],[-116.11,71.31],[-117.66,71.3],[-119.4,71.56],[-118.56,72.31],[-117.87,72.71],[-115.19,73.31],[-114.17,73.12]],\n      [[-104.5,73.42],[-105.38,72.76],[-106.94,73.46],[-106.6,73.6],[-105.26,73.64],[-104.5,73.42]],\n      [[-76.34,73.1],[-76.25,72.83],[-77.31,72.86],[-78.39,72.88],[-79.49,72.74],[-79.78,72.8],[-80.88,73.33],[-80.83,73.69],[-80.35,73.76],[-78.06,73.65],[-76.34,73.1]],\n      [[-86.56,73.16],[-85.77,72.53],[-84.85,73.34],[-82.32,73.75],[-80.6,72.72],[-80.75,72.06],[-78.77,72.35],[-77.82,72.75],[-75.61,72.24],[-74.23,71.77],[-74.1,71.33],[-72.24,71.56],[-71.2,70.92],[-68.79,70.53],[-67.91,70.12],[-66.97,69.19],[-68.81,68.72],[-66.45,68.07],[-64.86,67.85],[-63.42,66.93],[-61.85,66.86],[-62.16,66.16],[-63.92,65],[-65.15,65.43],[-66.72,66.39],[-68.02,66.26],[-68.14,65.69],[-67.09,65.11],[-65.73,64.65],[-65.32,64.38],[-64.67,63.39],[-65.01,62.67],[-66.28,62.95],[-68.78,63.75],[-67.37,62.88],[-66.33,62.28],[-66.17,61.93],[-68.88,62.33],[-71.02,62.91],[-72.24,63.4],[-71.89,63.68],[-73.38,64.19],[-74.83,64.68],[-74.82,64.39],[-77.71,64.23],[-78.56,64.57],[-77.9,65.31],[-76.02,65.33],[-73.96,65.45],[-74.29,65.81],[-73.94,66.31],[-72.65,67.28],[-72.93,67.73],[-73.31,68.07],[-74.84,68.55],[-76.87,68.89],[-76.23,69.15],[-77.29,69.77],[-78.17,69.83],[-78.96,70.17],[-79.49,69.87],[-81.31,69.74],[-84.94,69.97],[-87.06,70.26],[-88.68,70.41],[-89.51,70.76],[-88.47,71.22],[-89.89,71.22],[-90.21,72.24],[-89.44,73.13],[-88.41,73.54],[-85.83,73.8],[-86.56,73.16]],\n      [[-100.36,73.84],[-99.16,73.63],[-97.38,73.76],[-97.12,73.47],[-98.05,72.99],[-96.54,72.56],[-96.72,71.66],[-98.36,71.27],[-99.32,71.36],[-100.01,71.74],[-102.5,72.51],[-102.48,72.83],[-100.44,72.71],[-101.54,73.36],[-100.36,73.84]],\n      [[-93.2,72.77],[-94.27,72.02],[-95.41,72.06],[-96.03,72.94],[-96.02,73.44],[-95.5,73.86],[-94.5,74.13],[-92.42,74.1],[-90.51,73.86],[-92,72.97],[-93.2,72.77]],\n      [[-120.46,71.38],[-123.09,70.9],[-123.62,71.34],[-125.93,71.87],[-125.5,72.29],[-124.81,73.02],[-123.94,73.68],[-124.92,74.29],[-121.54,74.45],[-120.11,74.24],[-117.56,74.19],[-116.58,73.9],[-115.51,73.48],[-116.77,73.22],[-119.22,72.52],[-120.46,71.82],[-120.46,71.38]],\n      [[-93.61,74.98],[-94.16,74.59],[-95.61,74.67],[-96.82,74.93],[-96.29,75.38],[-94.85,75.65],[-93.98,75.3],[-93.61,74.98]],\n      [[-98.5,76.72],[-97.74,76.26],[-97.7,75.74],[-98.16,75],[-99.81,74.9],[-100.88,75.06],[-100.86,75.64],[-102.5,75.56],[-102.57,76.34],[-101.49,76.31],[-99.98,76.65],[-98.58,76.59],[-98.5,76.72]],\n      [[-108.21,76.2],[-107.82,75.85],[-106.93,76.01],[-105.88,75.97],[-105.7,75.48],[-106.31,75.01],[-109.7,74.85],[-112.22,74.42],[-113.74,74.39],[-113.87,74.72],[-111.79,75.16],[-116.31,75.04],[-117.71,75.22],[-116.35,76.2],[-115.4,76.48],[-112.59,76.14],[-110.81,75.55],[-109.07,75.47],[-110.5,76.43],[-109.58,76.79],[-108.55,76.68],[-108.21,76.2]],\n      [[-94.68,77.1],[-93.57,76.78],[-91.61,76.78],[-90.74,76.45],[-90.97,76.07],[-89.82,75.85],[-89.19,75.61],[-87.84,75.57],[-86.38,75.48],[-84.79,75.7],[-82.75,75.78],[-81.13,75.71],[-80.06,75.34],[-79.83,74.92],[-80.46,74.66],[-81.95,74.44],[-83.23,74.56],[-86.1,74.41],[-88.15,74.39],[-89.76,74.52],[-92.42,74.84],[-92.77,75.39],[-92.89,75.88],[-93.89,76.32],[-95.96,76.44],[-97.12,76.75],[-96.75,77.16],[-94.68,77.1]],\n      [[-116.2,77.65],[-116.34,76.88],[-117.11,76.53],[-118.04,76.48],[-119.9,76.05],[-121.5,75.9],[-122.85,76.12],[-122.85,76.12],[-121.16,76.86],[-119.1,77.51],[-117.57,77.5],[-116.2,77.65]],\n      [[-93.84,77.52],[-94.3,77.49],[-96.17,77.56],[-96.44,77.83],[-94.42,77.82],[-93.72,77.63],[-93.84,77.52]],\n      [[-110.19,77.7],[-112.05,77.41],[-113.53,77.73],[-112.72,78.05],[-111.26,78.15],[-109.85,78],[-110.19,77.7]],\n      [[-109.66,78.6],[-110.88,78.41],[-112.54,78.41],[-112.53,78.55],[-111.5,78.85],[-110.96,78.8],[-109.66,78.6]],\n      [[-95.83,78.06],[-97.31,77.85],[-98.12,78.08],[-98.55,78.46],[-98.63,78.87],[-97.34,78.83],[-96.75,78.77],[-95.56,78.42],[-95.83,78.06]],\n      [[-100.06,78.32],[-99.67,77.91],[-101.3,78.02],[-102.95,78.34],[-105.18,78.38],[-104.21,78.68],[-105.42,78.92],[-105.49,79.3],[-103.53,79.17],[-100.83,78.8],[-100.06,78.32]],\n      [[-87.02,79.66],[-85.81,79.34],[-87.19,79.04],[-89.04,78.29],[-90.8,78.22],[-92.88,78.34],[-93.95,78.75],[-93.94,79.11],[-93.15,79.38],[-94.97,79.37],[-96.08,79.71],[-96.71,80.16],[-96.02,80.6],[-95.32,80.91],[-94.3,80.98],[-94.74,81.21],[-92.41,81.26],[-91.13,80.72],[-89.45,80.51],[-87.81,80.32],[-87.02,79.66]],\n      [[-68.5,83.11],[-65.83,83.03],[-63.68,82.9],[-61.85,82.63],[-61.89,82.36],[-64.33,81.93],[-66.75,81.73],[-67.66,81.5],[-65.48,81.51],[-67.84,80.9],[-69.47,80.62],[-71.18,79.8],[-73.24,79.63],[-73.88,79.43],[-76.91,79.32],[-75.53,79.2],[-76.22,79.02],[-75.39,78.53],[-76.34,78.18],[-77.89,77.9],[-78.36,77.51],[-79.76,77.21],[-79.62,76.98],[-77.91,77.02],[-77.89,76.78],[-80.56,76.18],[-83.17,76.45],[-86.11,76.3],[-87.6,76.42],[-89.49,76.47],[-89.62,76.95],[-87.77,77.18],[-88.26,77.9],[-87.65,77.97],[-84.98,77.54],[-86.34,78.18],[-87.96,78.37],[-87.15,78.76],[-85.38,79],[-85.09,79.35],[-86.51,79.74],[-86.93,80.25],[-84.2,80.21],[-83.41,80.1],[-81.85,80.46],[-84.1,80.58],[-87.6,80.52],[-89.37,80.86],[-90.2,81.26],[-91.37,81.55],[-91.59,81.89],[-90.1,82.09],[-88.93,82.12],[-86.97,82.28],[-85.5,82.65],[-84.26,82.6],[-83.18,82.32],[-82.42,82.86],[-81.1,83.02],[-79.31,83.13],[-76.25,83.17],[-75.72,83.06],[-72.83,83.23],[-70.67,83.17],[-68.5,83.11]],\n      [[9.63,47.36],[9.53,47.27],[9.49,47.18]],\n      [[9.49,47.18],[9.51,47.09],[9.47,47.06],[9.56,47.05]],\n      [[9.56,47.05],[9.61,47.06],[9.87,47.02]],\n      [[10.44,46.89],[10.36,46.48],[9.92,46.31],[9.18,46.44],[8.97,46.04],[8.49,46.01],[8.32,46.16],[7.76,45.82],[7.27,45.78],[6.84,45.99]],\n      [[6.84,45.99],[6.5,46.43],[6.02,46.27],[6.04,46.73],[6.77,47.29],[6.74,47.54],[7.19,47.45],[7.47,47.62]],\n      [[7.47,47.62],[8.32,47.61],[8.52,47.83],[9.59,47.53]],\n      [[-66.96,-54.9],[-67.29,-55.3],[-68.15,-55.61],[-68.64,-55.58],[-69.23,-55.5],[-69.96,-55.2],[-71.01,-55.05],[-72.26,-54.5],[-73.29,-53.96],[-74.66,-52.84],[-73.84,-53.05],[-72.43,-53.72],[-71.11,-54.07],[-70.59,-53.62],[-70.27,-52.93],[-69.35,-52.52],[-68.63,-52.64]],\n      [[-68.57,-52.3],[-69.46,-52.29],[-69.94,-52.54],[-70.85,-52.9],[-71.01,-53.83],[-71.43,-53.86],[-72.56,-53.53],[-73.7,-52.84],[-73.7,-52.84],[-74.95,-52.26],[-75.26,-51.63],[-74.98,-51.04],[-75.48,-50.38],[-75.61,-48.67],[-75.18,-47.71],[-74.13,-46.94],[-75.64,-46.65],[-74.69,-45.76],[-74.35,-44.1],[-73.24,-44.45],[-72.72,-42.38],[-73.39,-42.12],[-73.7,-43.37],[-74.33,-43.22],[-74.02,-41.79],[-73.68,-39.94],[-73.22,-39.26],[-73.51,-38.28],[-73.59,-37.16],[-73.17,-37.12],[-72.55,-35.51],[-71.86,-33.91],[-71.44,-32.42],[-71.67,-30.92],[-71.37,-30.1],[-71.49,-28.86],[-70.91,-27.64],[-70.72,-25.71],[-70.4,-23.63],[-70.09,-21.39],[-70.16,-19.76],[-70.37,-18.35]],\n      [[-70.37,-18.35],[-69.86,-18.09],[-69.59,-17.58]],\n      [[110.34,18.68],[109.48,18.2],[108.66,18.51],[108.63,19.37],[109.12,19.82],[110.21,20.1],[110.79,20.08],[111.01,19.7],[110.57,19.26],[110.34,18.68]],\n      [[129.4,49.44],[130.58,48.73]],\n      [[130.58,48.73],[130.99,47.79],[132.51,47.79],[133.37,48.18]],\n      [[133.37,48.18],[135.03,48.48]],\n      [[135.03,48.48],[134.5,47.58],[134.11,47.21],[133.77,46.12]],\n      [[133.77,46.12],[133.1,45.14],[131.88,45.32]],\n      [[131.88,45.32],[131.03,44.97],[131.29,44.11]],\n      [[131.29,44.11],[131.14,42.93],[130.63,42.9]],\n      [[130.63,42.9],[130.64,42.4]],\n      [[130.64,42.4],[129.99,42.99],[129.6,42.42],[128.05,41.99],[128.21,41.47],[127.34,41.5],[126.87,41.82],[126.18,41.11],[125.08,40.57],[124.27,39.93]],\n      [[124.27,39.93],[122.87,39.64],[122.13,39.17],[121.05,38.9],[121.59,39.36],[121.38,39.75],[122.17,40.42],[121.64,40.95],[120.77,40.59],[119.64,39.9],[119.02,39.25],[118.04,39.2],[117.53,38.74],[118.06,38.06],[118.88,37.9],[118.91,37.45],[119.7,37.16],[120.82,37.87],[121.71,37.48],[122.36,37.45],[122.52,36.93],[121.1,36.65],[120.64,36.11],[119.66,35.61],[119.15,34.91],[120.23,34.36],[120.62,33.38],[121.23,32.46],[121.91,31.69],[121.89,30.95],[121.26,30.68],[121.5,30.14],[122.09,29.83],[121.94,29.02],[121.68,28.23],[121.13,28.14],[120.4,27.05],[119.59,25.74],[118.66,24.55],[117.28,23.62],[115.89,22.78],[114.76,22.67],[114.15,22.22],[113.81,22.55],[113.24,22.05],[111.84,21.55],[110.79,21.4],[110.44,20.34],[109.89,20.28],[109.63,21.01],[109.86,21.4],[108.52,21.72],[108.05,21.55]],\n      [[108.05,21.55],[107.04,21.81],[106.57,22.22],[106.73,22.79],[105.81,22.98],[105.33,23.35],[104.48,22.82],[103.5,22.7],[102.71,22.71],[102.17,22.46]],\n      [[102.17,22.46],[101.65,22.32],[101.8,21.17],[101.27,21.2],[101.18,21.44]],\n      [[101.18,21.44],[101.15,21.85],[100.42,21.56],[99.98,21.74],[99.24,22.12],[99.53,22.95],[98.9,23.14],[98.66,24.06],[97.6,23.9],[97.72,25.08],[98.67,25.92],[98.71,26.74],[98.68,27.51],[98.25,27.75],[97.91,28.34],[97.33,28.26]],\n      [[97.33,28.26],[96.25,28.41],[96.59,28.83],[96.12,29.45],[95.4,29.03],[94.57,29.28],[93.41,28.64],[92.5,27.9],[91.7,27.77]],\n      [[88.81,27.3],[88.73,28.09],[88.12,27.88]],\n      [[88.12,27.88],[86.95,27.97],[85.82,28.2],[85.01,28.64],[84.23,28.84],[83.9,29.32],[83.34,29.46],[82.33,30.12],[81.53,30.42],[81.11,30.18]],\n      [[81.11,30.18],[79.72,30.88],[78.74,31.52],[78.46,32.62],[79.18,32.48],[79.21,32.99],[78.81,33.51],[78.91,34.32],[77.84,35.49]],\n      [[77.84,35.49],[76.19,35.9],[75.9,36.67],[75.16,37.13]],\n      [[74.98,37.42],[74.83,37.99],[74.86,38.38],[74.26,38.61],[73.93,38.51],[73.68,39.43]],\n      [[73.68,39.43],[73.96,39.66],[73.82,39.89],[74.78,40.37],[75.47,40.56],[76.53,40.43],[76.9,41.07],[78.19,41.19],[78.54,41.58],[80.12,42.12],[80.26,42.35]],\n      [[80.26,42.35],[80.18,42.92],[80.87,43.18],[79.97,44.92],[81.95,45.32],[82.46,45.54],[83.18,47.33],[85.16,47],[85.72,47.45],[85.77,48.46],[86.6,48.55],[87.36,49.21]],\n      [[87.36,49.21],[87.75,49.3]],\n      [[87.75,49.3],[88.01,48.6],[88.85,48.07],[90.28,47.69],[90.97,46.89],[90.59,45.72],[90.95,45.29],[92.13,45.12],[93.48,44.98],[94.69,44.35],[95.31,44.24],[95.76,43.32],[96.35,42.73],[97.45,42.75],[99.52,42.52],[100.85,42.66],[101.83,42.51],[103.31,41.91],[104.52,41.91],[104.96,41.6],[106.13,42.13],[107.74,42.48],[109.24,42.52],[110.41,42.87],[111.13,43.41],[111.83,43.74],[111.67,44.07],[111.35,44.46],[111.87,45.1],[112.44,45.01],[113.46,44.81],[114.46,45.34],[115.99,45.73],[116.72,46.39],[117.42,46.67],[118.87,46.81],[119.66,46.69],[119.77,47.05],[118.87,47.75],[118.06,48.07],[117.3,47.7],[116.31,47.85],[115.74,47.73],[115.49,48.14],[116.19,49.13],[116.68,49.89]],\n      [[116.68,49.89],[117.88,49.51],[119.29,50.14]],\n      [[119.29,50.14],[119.28,50.58],[120.18,51.64],[120.74,51.96],[120.73,52.52]],\n      [[120.73,52.52],[120.18,52.75],[121,53.25],[122.25,53.43]],\n      [[122.25,53.43],[123.57,53.46],[125.07,53.16]],\n      [[125.07,53.16],[125.95,52.79],[126.56,51.78],[126.94,51.35],[127.29,50.74]],\n      [[127.29,50.74],[127.66,49.76],[129.4,49.44]],\n      [[-2.86,4.99],[-3.31,4.98],[-4.01,5.18],[-4.65,5.17],[-5.83,4.99],[-6.53,4.71],[-7.52,4.34],[-7.71,4.36]],\n      [[-7.71,4.36],[-7.64,5.19],[-7.54,5.31],[-7.57,5.71],[-7.99,6.13],[-8.31,6.19],[-8.6,6.47],[-8.39,6.91],[-8.49,7.4],[-8.44,7.69]],\n      [[-8.44,7.69],[-8.28,7.69],[-8.22,8.12],[-8.3,8.32],[-8.2,8.46],[-7.83,8.58],[-8.08,9.38],[-8.31,9.79],[-8.23,10.13],[-8.03,10.21]],\n      [[-8.03,10.21],[-7.9,10.3],[-7.62,10.15],[-6.85,10.14],[-6.67,10.43],[-6.49,10.41],[-6.21,10.52],[-6.05,10.1],[-5.82,10.22],[-5.4,10.37]],\n      [[-2.83,9.64],[-2.56,8.22],[-2.98,7.38],[-3.24,6.25],[-2.81,5.39],[-2.86,4.99]],\n      [[13.08,2.27],[12.95,2.32],[12.36,2.19],[11.75,2.33],[11.28,2.26]],\n      [[11.28,2.26],[9.65,2.28]],\n      [[9.65,2.28],[9.8,3.07],[9.4,3.73],[8.95,3.9],[8.74,4.35],[8.49,4.5],[8.5,4.77]],\n      [[8.5,4.77],[8.76,5.48],[9.23,6.44],[9.52,6.45],[10.12,7.04],[10.5,7.06],[11.06,6.64],[11.75,6.98],[11.84,7.4],[12.06,7.8],[12.22,8.31],[12.75,8.72],[12.96,9.42],[13.17,9.64],[13.31,10.16],[13.57,10.8],[14.42,11.57],[14.47,11.9],[14.58,12.09],[14.18,12.48]],\n      [[14.18,12.48],[14.21,12.8],[14.5,12.86]],\n      [[14.5,12.86],[14.89,12.22],[14.96,11.56]],\n      [[14.96,11.56],[14.92,10.89],[15.47,9.98],[14.91,9.99],[14.63,9.92],[14.17,10.02],[13.95,9.55],[14.54,8.97],[14.98,8.8],[15.12,8.38],[15.44,7.69],[15.28,7.42]],\n      [[16.01,2.27],[15.94,1.73],[15.15,1.96],[14.34,2.23],[13.08,2.27]],\n      [[31.17,2.2],[30.85,1.85],[30.47,1.58],[30.09,1.06],[29.88,0.6]],\n      [[29.88,0.6],[29.82,-0.21],[29.59,-0.59]],\n      [[29.59,-0.59],[29.58,-1.34]],\n      [[29.58,-1.34],[29.29,-1.62],[29.25,-2.22],[29.12,-2.29],[29.02,-2.84]],\n      [[29.34,-4.5],[29.52,-5.42],[29.42,-5.94]],\n      [[29.42,-5.94],[29.62,-6.52],[30.2,-7.08],[30.74,-8.34]],\n      [[30.74,-8.34],[30.35,-8.24],[29,-8.41],[28.73,-8.53],[28.45,-9.16],[28.67,-9.61],[28.5,-10.79],[28.37,-11.79],[28.64,-11.97],[29.34,-12.36],[29.62,-12.18],[29.7,-13.26],[28.93,-13.25],[28.52,-12.7],[28.16,-12.27],[27.39,-12.13],[27.16,-11.61],[26.55,-11.92],[25.75,-11.78],[25.42,-11.33],[24.78,-11.24],[24.31,-11.26],[24.26,-10.95],[23.91,-10.93]],\n      [[12.32,-6.1],[12.18,-5.79]],\n      [[13,-4.78],[13.26,-4.88],[13.6,-4.5],[14.14,-4.51],[14.21,-4.79],[14.58,-4.97],[15.17,-4.34],[15.75,-3.86],[16.01,-3.54],[15.97,-2.71],[16.41,-1.74],[16.87,-1.23],[17.52,-0.74],[17.64,-0.42],[17.66,-0.06],[17.83,0.29],[17.77,0.86],[17.9,1.74],[18.09,2.37],[18.39,2.9],[18.45,3.5]],\n      [[27.37,5.23],[27.98,4.41],[28.43,4.29],[28.7,4.46],[29.16,4.39],[29.72,4.6]],\n      [[29.72,4.6],[29.95,4.17],[30.83,3.51],[30.77,2.34],[31.17,2.2]],\n      [[11.91,-5.04],[11.09,-3.98]],\n      [[11.09,-3.98],[11.86,-3.43],[11.48,-2.77],[11.82,-2.51],[12.5,-2.39],[12.58,-1.95],[13.11,-2.43],[13.99,-2.47],[14.3,-2],[14.43,-1.33],[14.32,-0.55],[13.84,0.04],[14.28,1.2],[14.03,1.4],[13.28,1.31],[13,1.83],[13.08,2.27]],\n      [[-75.37,-0.15],[-75.8,0.08],[-76.29,0.42],[-76.58,0.26],[-77.42,0.4],[-77.67,0.83],[-77.86,0.81],[-78.86,1.38]],\n      [[-78.86,1.38],[-78.99,1.69],[-78.62,1.77],[-78.66,2.27],[-78.43,2.63],[-77.93,2.7],[-77.51,3.33],[-77.13,3.85],[-77.5,4.09],[-77.31,4.67],[-77.53,5.58],[-77.32,5.85],[-77.48,6.69],[-77.88,7.22]],\n      [[-77.88,7.22],[-77.75,7.71],[-77.43,7.64],[-77.24,7.94],[-77.47,8.52],[-77.35,8.67]],\n      [[-77.35,8.67],[-76.84,8.64],[-76.09,9.34],[-75.67,9.44],[-75.66,9.77],[-75.48,10.62],[-74.91,11.08],[-74.28,11.1],[-74.2,11.31],[-73.41,11.23],[-72.63,11.73],[-72.24,11.96],[-71.75,12.44],[-71.4,12.38],[-71.14,12.11],[-71.33,11.78]],\n      [[-71.33,11.78],[-71.97,11.61],[-72.23,11.11],[-72.61,10.82],[-72.91,10.45],[-73.03,9.74],[-73.3,9.15],[-72.79,9.09],[-72.66,8.63],[-72.44,8.41],[-72.36,8],[-72.48,7.63],[-72.44,7.42],[-72.2,7.34],[-71.96,6.99],[-70.67,7.09],[-70.09,6.96],[-69.39,6.1],[-68.99,6.21],[-68.27,6.15],[-67.7,6.27],[-67.34,6.1],[-67.52,5.56],[-67.74,5.22],[-67.82,4.5],[-67.62,3.84],[-67.34,3.54],[-67.3,3.32],[-67.81,2.82],[-67.45,2.6],[-67.18,2.25],[-66.88,1.25]],\n      [[-69.89,-4.3],[-70.39,-3.77],[-70.69,-3.74],[-70.05,-2.73],[-70.81,-2.26],[-71.41,-2.34],[-71.77,-2.17],[-72.33,-2.43],[-73.07,-2.31],[-73.66,-1.26],[-74.12,-1],[-74.44,-0.53],[-75.11,-0.06],[-75.37,-0.15]],\n      [[-82.97,8.23],[-83.51,8.45],[-83.71,8.66],[-83.6,8.83],[-83.63,9.05],[-83.91,9.29],[-84.3,9.49],[-84.65,9.62],[-84.71,9.91],[-84.98,10.09],[-84.91,9.8],[-85.11,9.56],[-85.34,9.83],[-85.66,9.93],[-85.8,10.13],[-85.79,10.44],[-85.66,10.75],[-85.94,10.9],[-85.71,11.09]],\n      [[-85.71,11.09],[-85.56,11.22],[-84.9,10.95],[-84.67,11.08],[-84.36,11],[-84.19,10.79],[-83.9,10.73],[-83.66,10.94]],\n      [[-83.66,10.94],[-83.4,10.4],[-83.02,9.99],[-82.55,9.57]],\n      [[-82.55,9.57],[-82.93,9.48],[-82.93,9.07],[-82.72,8.93],[-82.87,8.81],[-82.83,8.63],[-82.91,8.42],[-82.97,8.23]],\n      [[-82.27,23.19],[-81.4,23.12],[-80.62,23.11],[-79.68,22.77],[-79.28,22.4],[-78.35,22.51],[-77.99,22.28],[-77.15,21.66],[-76.52,21.21],[-76.19,21.22],[-75.6,21.02],[-75.67,20.74],[-74.93,20.69],[-74.18,20.28],[-74.3,20.05],[-74.96,19.92],[-75.63,19.87],[-76.32,19.95],[-77.76,19.86],[-77.09,20.41],[-77.49,20.67],[-78.14,20.74],[-78.48,21.03],[-78.72,21.6],[-79.28,21.56],[-80.22,21.83],[-80.52,22.04],[-81.82,22.19],[-82.17,22.39],[-81.8,22.64],[-82.78,22.69],[-83.49,22.17],[-83.91,22.15],[-84.05,21.91],[-84.55,21.8],[-84.97,21.9],[-84.45,22.2],[-84.23,22.57],[-83.78,22.79],[-83.27,22.98],[-82.51,23.08],[-82.27,23.19]],\n      [[32.73,35.14],[32.8,35.15],[32.95,35.39],[33.67,35.37],[34.58,35.67],[33.9,35.25],[33.97,35.06],[34,34.98],[32.98,34.57],[32.49,34.7],[32.26,35.1],[32.73,35.14]],\n      [[13.6,48.88],[13.03,49.31],[12.52,49.55],[12.42,49.97],[12.24,50.27],[12.97,50.48],[13.34,50.73],[14.06,50.93],[14.31,51.12],[14.57,51],[15.02,51.11]],\n      [[15.02,51.11],[15.49,50.78],[16.24,50.7],[16.18,50.42],[16.72,50.22],[16.87,50.47],[17.55,50.36],[17.65,50.05],[18.39,49.99],[18.85,49.5]],\n      [[18.85,49.5],[18.55,49.5],[18.4,49.32],[18.17,49.27],[18.1,49.04],[17.91,49],[17.89,48.9],[17.55,48.8],[17.1,48.82],[16.96,48.6]],\n      [[9.92,54.98],[9.94,54.6],[10.95,54.36],[10.94,54.01],[11.96,54.2],[12.52,54.47],[13.65,54.08],[14.12,53.76]],\n      [[14.12,53.76],[14.35,53.25],[14.07,52.98],[14.44,52.62],[14.69,52.09],[14.61,51.75],[15.02,51.11]],\n      [[7.47,47.62],[7.59,48.33],[8.1,49.02],[6.66,49.2],[6.19,49.46]],\n      [[6.19,49.46],[6.24,49.9],[6.04,50.13]],\n      [[6.16,50.8],[5.99,51.85],[6.59,51.85],[6.84,52.23],[7.09,53.14],[6.91,53.48]],\n      [[6.91,53.48],[7.1,53.69],[7.94,53.75],[8.12,53.53],[8.8,54.02],[8.57,54.4],[8.53,54.96]],\n      [[8.53,54.96],[9.28,54.83],[9.92,54.98]],\n      [[43.08,12.7],[43.32,12.39],[43.29,11.97],[42.72,11.74],[43.15,11.46]],\n      [[43.15,11.46],[42.78,10.93]],\n      [[42.78,10.93],[42.55,11.11],[42.31,11.03],[41.76,11.05],[41.74,11.36],[41.66,11.63],[42,12.1],[42.35,12.54]],\n      [[42.35,12.54],[42.78,12.46],[43.08,12.7]],\n      [[12.69,55.61],[12.09,54.8],[11.04,55.36],[10.9,55.78],[12.37,56.11],[12.69,55.61]],\n      [[8.53,54.96],[8.12,55.52],[8.09,56.54],[8.26,56.81],[8.54,57.11],[9.42,57.17],[9.78,57.45],[10.58,57.73],[10.55,57.22],[10.25,56.89],[10.37,56.61],[10.91,56.46],[10.67,56.08],[10.37,56.19],[9.65,55.47],[9.92,54.98]],\n      [[-71.71,19.71],[-71.59,19.88],[-70.81,19.88],[-70.21,19.62],[-69.95,19.65],[-69.77,19.29],[-69.22,19.31],[-69.25,19.02],[-68.81,18.98],[-68.32,18.61],[-68.69,18.21],[-69.16,18.42],[-69.62,18.38],[-69.95,18.43],[-70.13,18.25],[-70.52,18.18],[-70.67,18.43],[-71,18.28],[-71.4,17.6],[-71.66,17.76],[-71.71,18.04]],\n      [[-71.71,18.04],[-71.69,18.32],[-71.95,18.62],[-71.7,18.79],[-71.62,19.17],[-71.71,19.71]],\n      [[12,23.47],[8.57,21.57],[5.68,19.6],[4.27,19.16]],\n      [[4.27,19.16],[3.16,19.06],[3.15,19.69],[2.68,19.86],[2.06,20.14],[1.82,20.61],[-1.55,22.79],[-4.92,24.97]],\n      [[-4.92,24.97],[-8.68,27.4]],\n      [[-8.68,27.4],[-8.67,27.59],[-8.67,27.6]],\n      [[-8.67,27.6],[-8.67,28.84],[-7.06,29.58],[-6.06,29.73],[-5.24,30],[-4.86,30.5],[-3.69,30.9],[-3.65,31.64],[-3.07,31.72],[-2.62,32.09],[-1.31,32.26],[-1.12,32.65],[-1.39,32.86],[-1.73,33.92],[-1.79,34.53],[-2.17,35.17]],\n      [[-2.17,35.17],[-1.21,35.71],[-0.13,35.89],[0.5,36.3],[1.47,36.61],[3.16,36.78],[4.82,36.87],[5.32,36.72],[6.26,37.11],[7.33,37.12],[7.74,36.89],[8.42,36.95]],\n      [[8.42,36.95],[8.22,36.43],[8.38,35.48],[8.14,34.66],[7.52,34.1],[7.61,33.34],[8.43,32.75],[8.44,32.51],[9.06,32.1],[9.48,30.31]],\n      [[9.48,30.31],[9.81,29.42],[9.86,28.96],[9.68,28.14],[9.76,27.69],[9.63,27.14],[9.72,26.51],[9.32,26.09],[9.91,25.37],[9.95,24.94],[10.3,24.38],[10.77,24.56],[11.56,24.1],[12,23.47]],\n      [[-80.3,-3.4],[-79.77,-2.66],[-79.99,-2.22],[-80.37,-2.69],[-80.97,-2.25],[-80.76,-1.97],[-80.93,-1.06],[-80.58,-0.91],[-80.4,-0.28],[-80.02,0.36],[-80.09,0.77],[-79.54,0.98],[-78.86,1.38]],\n      [[-75.37,-0.15],[-75.23,-0.91],[-75.54,-1.56],[-76.64,-2.61],[-77.84,-3],[-78.45,-3.87],[-78.64,-4.55],[-79.21,-4.96],[-79.62,-4.45],[-80.03,-4.35],[-80.44,-4.43],[-80.47,-4.06],[-80.18,-3.82],[-80.3,-3.4]],\n      [[36.87,22],[32.9,22],[29.02,22],[25,22]],\n      [[25,22],[25,25.68],[25,29.24],[24.7,30.04],[24.96,30.66],[24.8,31.09],[25.16,31.57]],\n      [[25.16,31.57],[26.5,31.59],[27.46,31.32],[28.45,31.03],[28.91,30.87],[29.68,31.19],[30.1,31.47],[30.98,31.56],[31.69,31.43],[31.96,30.93],[32.19,31.26],[32.99,31.02],[33.77,30.97],[34.27,31.22],[34.92,29.5],[34.64,29.1],[34.43,28.34],[34.15,27.82],[33.92,27.65],[33.59,27.97],[33.14,28.42],[32.42,29.85],[32.32,29.76],[32.73,28.71],[33.35,27.7],[34.1,26.14],[34.47,25.6],[34.8,25.03],[35.69,23.93],[35.49,23.75],[35.53,23.1],[36.69,22.2],[36.87,22]],\n      [[42.35,12.54],[42.01,12.87],[41.6,13.45]],\n      [[41.6,13.45],[41.16,13.77],[40.9,14.12]],\n      [[40.9,14.12],[40.03,14.52],[39.34,14.53]],\n      [[39.34,14.53],[39.1,14.74],[38.51,14.51],[37.91,14.96],[37.59,14.21],[36.43,14.42]],\n      [[36.43,14.42],[36.32,14.82],[36.75,16.29],[36.85,16.96]],\n      [[36.85,16.96],[37.17,17.26],[37.9,17.43],[38.41,18]],\n      [[38.41,18],[38.99,16.84],[39.27,15.92],[39.81,15.44],[41.18,14.49],[41.73,13.92],[42.28,13.34],[42.59,13],[43.08,12.7]],\n      [[-9.03,41.88],[-8.98,42.59],[-9.39,43.03],[-7.98,43.75],[-6.75,43.57],[-5.41,43.57],[-4.35,43.4],[-3.52,43.46],[-1.9,43.42]],\n      [[-1.9,43.42],[-1.5,43.03],[0.34,42.58],[0.7,42.8],[1.83,42.34],[2.99,42.47]],\n      [[2.99,42.47],[3.04,41.89],[2.09,41.23],[0.81,41.01],[0.72,40.68],[0.11,40.12],[-0.28,39.31],[0.11,38.74],[-0.47,38.29],[-0.68,37.64],[-1.44,37.44],[-2.15,36.67],[-3.42,36.66],[-4.37,36.68],[-5,36.32],[-5.38,35.95],[-5.87,36.03],[-6.24,36.37],[-6.52,36.94],[-7.45,37.1]],\n      [[-7.45,37.1],[-7.54,37.43],[-7.17,37.8],[-7.03,38.08],[-7.37,38.37],[-7.1,39.03],[-7.5,39.63],[-7.07,39.71],[-7.03,40.18],[-6.86,40.33],[-6.85,41.11],[-6.39,41.38],[-6.67,41.88],[-7.25,41.92],[-7.42,41.79],[-8.01,41.79],[-8.26,42.28],[-8.67,42.13],[-9.03,41.88]],\n      [[24.31,57.79],[24.43,58.38],[24.06,58.26],[23.43,58.61],[23.34,59.19],[24.6,59.47],[25.86,59.61],[26.95,59.45],[27.98,59.48],[28.13,59.3]],\n      [[28.13,59.3],[27.42,58.72],[27.72,57.79]],\n      [[27.72,57.79],[27.29,57.47]],\n      [[27.29,57.47],[26.46,57.48],[25.6,57.85],[25.16,57.97],[24.31,57.79]],\n      [[39.34,14.53],[40.03,14.52],[40.9,14.12]],\n      [[40.9,14.12],[41.16,13.77],[41.6,13.45]],\n      [[42.78,10.93],[42.56,10.57],[42.93,10.02]],\n      [[42.93,10.02],[43.3,9.54],[43.68,9.18]],\n      [[43.68,9.18],[46.95,8],[47.79,8]],\n      [[47.79,8],[44.96,5],[43.66,4.96],[42.77,4.25],[42.13,4.23],[41.86,3.92]],\n      [[41.86,3.92],[41.17,3.92],[40.77,4.26],[39.85,3.84],[39.56,3.42],[38.89,3.5],[38.67,3.62],[38.44,3.59],[38.12,3.6],[36.86,4.45],[36.16,4.45],[35.82,4.78],[35.82,5.34],[35.3,5.51]],\n      [[35.3,5.51],[34.71,6.59],[34.25,6.83],[34.08,7.23],[33.57,7.71],[32.95,7.78],[33.29,8.35],[33.83,8.38],[33.97,8.68]],\n      [[33.97,8.68],[33.96,9.58]],\n      [[33.96,9.58],[34.26,10.63],[34.73,10.91],[34.83,11.32],[35.26,12.08],[35.86,12.58],[36.27,13.56],[36.43,14.42]],\n      [[28.59,69.06],[28.45,68.36],[29.98,67.7],[29.05,66.94],[30.22,65.81],[29.54,64.95],[30.44,64.2],[30.04,63.55],[31.52,62.87],[31.14,62.36],[30.21,61.78]],\n      [[30.21,61.78],[28.07,60.5],[26.26,60.42],[24.5,60.06],[22.87,59.85],[22.29,60.39],[21.32,60.72],[21.54,61.71],[21.06,62.61],[21.54,63.19],[22.44,63.82],[24.73,64.9],[25.4,65.11],[25.29,65.53],[23.9,66.01]],\n      [[23.9,66.01],[23.57,66.4],[23.54,67.94],[21.98,68.62],[20.65,69.11]],\n      [[20.65,69.11],[21.24,69.37],[22.36,68.84],[23.66,68.89],[24.74,68.65],[25.69,69.09],[26.18,69.83],[27.73,70.16],[29.02,69.77],[28.59,69.06]],\n      [[178.37,-17.34],[178.72,-17.63],[178.55,-18.15],[177.93,-18.29],[177.38,-18.16],[177.29,-17.72],[177.67,-17.38],[178.13,-17.5],[178.37,-17.34]],\n      [[179.36,-16.8],[178.73,-17.01],[178.6,-16.64],[179.1,-16.43],[179.41,-16.38],[180,-16.07],[180,-16.56],[179.36,-16.8]],\n      [[-179.92,-16.5],[-180,-16.56],[-180,-16.07],[-179.79,-16.02],[-179.92,-16.5]],\n      [[9.56,42.15],[9.23,41.38],[8.78,41.58],[8.54,42.26],[8.75,42.63],[9.39,43.01],[9.56,42.15]],\n      [[5.67,49.53],[5.9,49.44],[6.19,49.46]],\n      [[6.84,45.99],[6.8,45.71],[7.1,45.33],[6.75,45.03],[7.01,44.25],[7.55,44.13],[7.44,43.69]],\n      [[7.44,43.69],[6.53,43.13],[4.56,43.4],[3.1,43.08],[2.99,42.47]],\n      [[-1.9,43.42],[-1.38,44.02],[-1.19,46.01],[-2.23,47.06],[-2.96,47.57],[-4.49,47.95],[-4.59,48.68],[-3.3,48.9],[-1.62,48.64],[-1.93,49.78],[-0.99,49.35],[1.34,50.13],[1.64,50.95],[2.51,51.15]],\n      [[-54.52,2.31],[-54.27,2.74],[-54.18,3.19],[-54.01,3.62],[-54.4,4.21]],\n      [[-54.4,4.21],[-54.48,4.9],[-53.96,5.76]],\n      [[-53.96,5.76],[-53.62,5.65],[-52.88,5.41],[-51.82,4.57],[-51.66,4.16]],\n      [[11.09,-3.98],[10.07,-2.97],[9.41,-2.14],[8.8,-1.11],[8.83,-0.78],[9.05,-0.46],[9.29,0.27],[9.49,1.01]],\n      [[9.49,1.01],[9.83,1.07],[11.29,1.06],[11.28,2.26]],\n      [[-6.2,53.87],[-6.95,54.07],[-7.57,54.06],[-7.37,54.6],[-7.57,55.13]],\n      [[-7.57,55.13],[-6.73,55.17],[-5.66,54.55],[-6.2,53.87]],\n      [[-3.01,58.64],[-4.07,57.55],[-3.06,57.69],[-1.96,57.68],[-2.22,56.87],[-3.12,55.97],[-2.09,55.91],[-2.01,55.8],[-1.11,54.62],[-0.43,54.46],[0.18,53.33],[0.47,52.93],[1.68,52.74],[1.56,52.1],[1.05,51.81],[1.45,51.29],[0.55,50.77],[-0.79,50.77],[-2.49,50.5],[-2.96,50.7],[-3.62,50.23],[-4.54,50.34],[-5.25,49.96],[-5.78,50.16],[-4.31,51.21],[-3.41,51.43],[-3.42,51.43],[-4.98,51.59],[-5.27,51.99],[-4.22,52.3],[-4.77,52.84],[-4.58,53.5],[-3.09,53.4],[-3.09,53.4],[-2.95,53.99],[-3.61,54.6],[-3.63,54.62],[-4.84,54.79],[-5.08,55.06],[-4.72,55.51],[-5.05,55.78],[-5.59,55.31],[-5.64,56.28],[-6.15,56.79],[-5.79,57.82],[-5.01,58.63],[-4.21,58.55],[-3.01,58.64]],\n      [[41.55,41.54],[41.7,41.96],[41.45,42.65],[40.88,43.01],[40.32,43.13],[39.96,43.43]],\n      [[39.96,43.43],[40.08,43.55]],\n      [[40.08,43.55],[40.92,43.38],[42.39,43.22],[43.76,42.74],[43.93,42.55],[44.54,42.71]],\n      [[44.54,42.71],[45.47,42.5]],\n      [[45.47,42.5],[45.78,42.09],[46.4,41.86]],\n      [[43.58,41.09],[42.62,41.58],[41.55,41.54]],\n      [[1.06,5.93],[-0.51,5.34],[-1.06,5],[-1.96,4.71],[-2.86,4.99]],\n      [[0.02,11.02],[-0.05,10.71],[0.37,10.19],[0.37,9.47],[0.46,8.68],[0.71,8.31],[0.49,7.41],[0.57,6.91],[0.84,6.28],[1.06,5.93]],\n      [[-8.44,7.69],[-8.72,7.71],[-8.93,7.31],[-9.21,7.31],[-9.4,7.53],[-9.34,7.93],[-9.76,8.54],[-10.02,8.43],[-10.23,8.41]],\n      [[-10.23,8.41],[-10.51,8.35],[-10.49,8.72],[-10.65,8.98],[-10.62,9.27],[-10.84,9.69],[-11.12,10.05],[-11.92,10.05],[-12.15,9.86],[-12.43,9.84],[-12.6,9.62],[-12.71,9.34],[-13.25,8.9]],\n      [[-13.25,8.9],[-13.69,9.49],[-14.07,9.89],[-14.33,10.02],[-14.58,10.21],[-14.69,10.66],[-14.84,10.88],[-15.13,11.04]],\n      [[-15.13,11.04],[-14.69,11.53],[-14.38,11.51],[-14.12,11.68],[-13.9,11.68],[-13.74,11.81],[-13.83,12.14],[-13.72,12.25],[-13.7,12.59]],\n      [[-13.7,12.59],[-13.22,12.58],[-12.5,12.33],[-12.28,12.35],[-12.2,12.47],[-11.66,12.39],[-11.51,12.44]],\n      [[-11.51,12.44],[-11.46,12.08],[-11.3,12.08],[-11.04,12.21],[-10.87,12.18],[-10.59,11.92],[-10.17,11.84],[-9.89,12.06],[-9.57,12.19],[-9.33,12.33],[-9.13,12.31],[-8.91,12.09],[-8.79,11.81],[-8.38,11.39],[-8.58,11.14],[-8.62,10.81],[-8.41,10.91],[-8.28,10.79],[-8.34,10.49],[-8.03,10.21]],\n      [[-16.84,13.15],[-16.71,13.59]],\n      [[-16.71,13.59],[-15.62,13.62],[-15.4,13.86],[-15.08,13.88],[-14.69,13.63],[-14.38,13.63],[-14.05,13.79],[-13.84,13.51],[-14.28,13.28],[-14.71,13.3],[-15.14,13.51],[-15.51,13.28],[-15.69,13.27],[-15.93,13.13],[-16.84,13.15]],\n      [[-15.13,11.04],[-15.66,11.46],[-16.09,11.52],[-16.31,11.81],[-16.31,11.96],[-16.61,12.17],[-16.68,12.38]],\n      [[-16.68,12.38],[-16.15,12.55],[-15.82,12.52],[-15.55,12.63],[-13.7,12.59]],\n      [[9.49,1.01],[9.31,1.16],[9.65,2.28]],\n      [[23.7,35.71],[24.25,35.37],[25.03,35.42],[25.77,35.35],[25.75,35.18],[26.29,35.3],[26.16,35],[24.72,34.92],[24.74,35.08],[23.51,35.28],[23.7,35.71]],\n      [[26.06,40.82],[25.45,40.85],[24.93,40.95],[23.71,40.69],[24.41,40.12],[23.9,39.96],[23.34,39.96],[22.81,40.48],[22.63,40.26],[22.85,39.66],[23.35,39.19],[22.97,38.97],[23.53,38.51],[24.03,38.22],[24.04,37.66],[23.12,37.92],[23.41,37.41],[22.77,37.31],[23.15,36.42],[22.49,36.41],[21.67,36.84],[21.3,37.64],[21.12,38.31],[20.73,38.77],[20.22,39.34],[20.15,39.62]],\n      [[21.02,40.84],[21.67,40.93],[22.06,41.15],[22.6,41.13],[22.76,41.3],[22.95,41.34]],\n      [[26.12,41.83],[26.6,41.56],[26.29,40.94],[26.06,40.82]],\n      [[-90.1,13.74],[-90.61,13.91],[-91.23,13.93],[-91.69,14.13],[-92.23,14.54]],\n      [[-92.23,14.54],[-92.2,14.83],[-92.09,15.06],[-92.23,15.25],[-91.75,16.07],[-90.46,16.07],[-90.44,16.41],[-90.6,16.47],[-90.71,16.69],[-91.08,16.92],[-91.45,17.25],[-91,17.25],[-91,17.82],[-90.07,17.82],[-89.14,17.81]],\n      [[-88.93,15.89],[-88.6,15.71],[-88.52,15.86],[-88.23,15.73]],\n      [[-88.23,15.73],[-88.68,15.35],[-89.15,15.07],[-89.23,14.87],[-89.15,14.68],[-89.35,14.42]],\n      [[-89.35,14.42],[-89.59,14.36],[-89.53,14.24],[-89.72,14.13],[-90.06,13.88],[-90.1,13.74]],\n      [[-59.76,8.37],[-59.1,8],[-58.48,7.35],[-58.45,6.83],[-58.08,6.81],[-57.54,6.32],[-57.15,5.97]],\n      [[-57.15,5.97],[-57.31,5.07],[-57.91,4.81],[-57.86,4.58],[-58.04,4.06],[-57.6,3.33],[-57.28,3.33],[-57.15,2.77],[-56.54,1.9]],\n      [[-60.73,5.2],[-61.41,5.96],[-61.14,6.23],[-61.16,6.7],[-60.54,6.86],[-60.3,7.04],[-60.64,7.42],[-60.55,7.78],[-59.76,8.37]],\n      [[-87.32,12.98],[-87.49,13.3],[-87.79,13.38]],\n      [[-87.79,13.38],[-87.72,13.79],[-87.86,13.89],[-88.07,13.96],[-88.5,13.85],[-88.54,13.98],[-88.84,14.14],[-89.06,14.34],[-89.35,14.42]],\n      [[-88.23,15.73],[-88.12,15.69],[-87.9,15.86],[-87.62,15.88],[-87.52,15.8],[-87.37,15.85],[-86.9,15.76],[-86.44,15.78],[-86.12,15.89],[-86,16.01],[-85.68,15.95],[-85.44,15.89],[-85.18,15.91],[-84.98,16],[-84.53,15.86],[-84.37,15.84],[-84.06,15.65],[-83.77,15.42],[-83.41,15.27],[-83.15,15]],\n      [[-83.15,15],[-83.49,15.02],[-83.63,14.88],[-83.98,14.75],[-84.23,14.75],[-84.45,14.62],[-84.65,14.67],[-84.82,14.82],[-84.92,14.79],[-85.05,14.55],[-85.15,14.56],[-85.17,14.35],[-85.51,14.08],[-85.7,13.96],[-85.8,13.84],[-86.1,14.04],[-86.31,13.77],[-86.52,13.78],[-86.76,13.75],[-86.73,13.26],[-86.88,13.25],[-87.01,13.03],[-87.32,12.98]],\n      [[18.83,45.91],[19.07,45.52]],\n      [[19.07,45.52],[19.39,45.24]],\n      [[19.39,45.24],[19.01,44.86]],\n      [[18.56,42.65],[18.45,42.48],[17.51,42.85],[16.93,43.21],[16.02,43.51],[15.17,44.24],[15.38,44.32],[14.92,44.74],[14.9,45.08],[14.26,45.23],[13.95,44.8],[13.66,45.14],[13.68,45.48],[13.72,45.5]],\n      [[13.72,45.5],[14.41,45.47],[14.6,45.63],[14.94,45.47],[15.33,45.45],[15.32,45.73],[15.67,45.83],[15.77,46.24],[16.56,46.5]],\n      [[16.56,46.5],[16.88,46.38],[17.63,45.95],[18.46,45.76],[18.83,45.91]],\n      [[-71.71,18.04],[-72.37,18.21],[-72.84,18.15],[-73.45,18.22],[-73.92,18.03],[-74.46,18.34],[-74.37,18.66],[-73.45,18.53],[-72.69,18.45],[-72.33,18.67],[-72.79,19.1],[-72.78,19.48],[-73.42,19.64],[-73.19,19.92],[-72.58,19.87],[-71.71,19.71]],\n      [[16.98,48.12],[17.49,47.87],[17.86,47.76],[18.7,47.88],[18.78,48.08],[19.17,48.11],[19.66,48.27],[19.77,48.2],[20.24,48.33],[20.47,48.56],[20.8,48.62],[21.87,48.32],[22.09,48.42]],\n      [[22.09,48.42],[22.64,48.15],[22.71,47.88]],\n      [[22.71,47.88],[22.1,47.67],[21.63,46.99],[21.02,46.32],[20.22,46.13]],\n      [[20.22,46.13],[19.6,46.17]],\n      [[19.6,46.17],[18.83,45.91]],\n      [[16.56,46.5],[16.37,46.84],[16.2,46.85]],\n      [[120.72,-10.24],[120.3,-10.26],[118.97,-9.56],[119.9,-9.36],[120.43,-9.67],[120.78,-9.97],[120.72,-10.24]],\n      [[124.97,-8.89],[125.07,-9.09],[125.09,-9.39]],\n      [[125.09,-9.39],[124.44,-10.14],[123.58,-10.36],[123.46,-10.24],[123.55,-9.9],[123.98,-9.29],[124.97,-8.89]],\n      [[117.9,-8.1],[118.26,-8.36],[118.88,-8.28],[119.13,-8.71],[117.97,-8.91],[117.28,-9.04],[116.74,-9.03],[117.08,-8.46],[117.63,-8.45],[117.9,-8.1]],\n      [[122.9,-8.09],[122.76,-8.65],[121.25,-8.93],[119.92,-8.81],[119.92,-8.44],[120.72,-8.24],[121.34,-8.54],[122.01,-8.46],[122.9,-8.09]],\n      [[108.62,-6.78],[110.54,-6.88],[110.76,-6.47],[112.61,-6.95],[112.98,-7.59],[114.48,-7.78],[115.71,-8.37],[114.56,-8.75],[113.46,-8.35],[112.56,-8.38],[111.52,-8.3],[110.59,-8.12],[109.43,-7.74],[108.69,-7.64],[108.28,-7.77],[106.45,-7.35],[106.28,-6.92],[105.37,-6.85],[106.05,-5.9],[107.27,-5.95],[108.07,-6.35],[108.49,-6.42],[108.62,-6.78]],\n      [[134.72,-6.21],[134.21,-6.9],[134.11,-6.14],[134.29,-5.78],[134.5,-5.45],[134.73,-5.74],[134.72,-6.21]],\n      [[127.25,-3.46],[126.87,-3.79],[126.18,-3.61],[125.99,-3.18],[127,-3.13],[127.25,-3.46]],\n      [[130.47,-3.09],[130.83,-3.86],[129.99,-3.45],[129.16,-3.36],[128.59,-3.43],[127.9,-3.39],[128.14,-2.84],[129.37,-2.8],[130.47,-3.09]],\n      [[141,-2.6],[141.02,-5.86],[141.03,-9.12]],\n      [[141.03,-9.12],[140.14,-8.3],[139.13,-8.1],[138.88,-8.38],[137.61,-8.41],[138.04,-7.6],[138.67,-7.32],[138.41,-6.23],[137.93,-5.39],[135.99,-4.55],[135.16,-4.46],[133.66,-3.54],[133.37,-4.02],[132.98,-4.11],[132.76,-3.75],[132.75,-3.31],[131.99,-2.82],[133.07,-2.46],[133.78,-2.48],[133.7,-2.21],[132.23,-2.21],[131.84,-1.62],[130.94,-1.43],[130.52,-0.94],[131.87,-0.7],[132.38,-0.37],[133.99,-0.78],[134.14,-1.15],[134.42,-2.77],[135.46,-3.37],[136.29,-2.31],[137.44,-1.7],[138.33,-1.7],[139.18,-2.05],[139.93,-2.41],[141,-2.6]],\n      [[125.24,1.42],[124.44,0.43],[123.69,0.24],[122.72,0.43],[121.06,0.38],[120.18,0.24],[120.04,-0.52],[120.94,-1.41],[121.48,-0.96],[123.34,-0.62],[123.26,-1.08],[122.82,-0.93],[122.39,-1.52],[121.51,-1.9],[122.45,-3.19],[122.27,-3.53],[123.17,-4.68],[123.16,-5.34],[122.63,-5.63],[122.24,-5.28],[122.72,-4.46],[121.74,-4.85],[121.49,-4.57],[121.62,-4.19],[120.9,-3.6],[120.97,-2.63],[120.31,-2.93],[120.39,-4.1],[120.43,-5.53],[119.8,-5.67],[119.37,-5.38],[119.65,-4.46],[119.5,-3.49],[119.08,-3.49],[118.77,-2.8],[119.18,-2.15],[119.32,-1.35],[119.83,0.15],[120.04,0.57],[120.89,1.31],[121.67,1.01],[122.93,0.88],[124.08,0.92],[125.07,1.64],[125.24,1.42]],\n      [[128.69,1.13],[128.64,0.26],[128.12,0.36],[127.97,-0.25],[128.38,-0.78],[128.1,-0.9],[127.7,-0.27],[127.4,1.01],[127.6,1.81],[127.93,2.17],[128,1.63],[128.59,1.54],[128.69,1.13]],\n      [[109.66,2.01],[109.83,1.34],[110.51,0.77],[111.16,0.98],[111.8,0.9],[112.38,1.41],[112.86,1.5],[113.81,1.22],[114.62,1.43],[115.13,2.82],[115.52,3.17],[115.87,4.31],[117.02,4.31],[117.88,4.14]],\n      [[117.88,4.14],[117.31,3.23],[118.05,2.29],[117.88,1.83],[119,0.9],[117.81,0.78],[117.48,0.1],[117.52,-0.8],[116.56,-1.49],[116.53,-2.48],[116.15,-4.01],[116,-3.66],[114.86,-4.11],[114.47,-3.5],[113.76,-3.44],[113.26,-3.12],[112.07,-3.48],[111.7,-2.99],[111.05,-3.05],[110.22,-2.93],[110.07,-1.59],[109.57,-1.31],[109.09,-0.46],[108.95,0.42],[109.07,1.34],[109.66,2.01]],\n      [[105.82,-5.85],[104.71,-5.87],[103.87,-5.04],[102.58,-4.22],[102.16,-3.61],[101.4,-2.8],[100.9,-2.05],[100.14,-0.65],[99.26,0.18],[98.97,1.04],[98.6,1.82],[97.7,2.45],[97.18,3.31],[96.42,3.87],[95.38,4.97],[95.29,5.48],[95.94,5.44],[97.48,5.25],[98.37,4.27],[99.14,3.59],[99.69,3.17],[100.64,2.1],[101.66,2.08],[102.5,1.4],[103.08,0.56],[103.84,0.1],[103.44,-0.71],[104.01,-1.06],[104.37,-1.08],[104.54,-1.78],[104.89,-2.34],[105.62,-2.43],[106.11,-3.06],[105.86,-4.31],[105.82,-5.85]],\n      [[81.11,30.18],[80.48,29.73],[80.09,28.79],[81.06,28.42],[82,27.93],[83.3,27.36],[84.68,27.23],[85.25,26.73],[86.02,26.63],[87.23,26.4],[88.06,26.41],[88.17,26.81],[88.04,27.45],[88.12,27.88]],\n      [[97.33,28.26],[97.4,27.88],[97.05,27.7],[97.13,27.08],[96.42,27.26],[95.12,26.57],[95.16,26],[94.6,25.16],[94.55,24.68],[94.11,23.85],[93.33,24.08],[93.29,23.04],[93.06,22.7],[93.17,22.28],[92.67,22.04]],\n      [[89.03,22.06],[88.89,21.69],[88.21,21.7],[86.98,21.5],[87.03,20.74],[86.5,20.15],[85.06,19.48],[83.94,18.3],[83.19,17.67],[82.19,17.02],[82.19,16.56],[81.69,16.31],[80.79,15.95],[80.32,15.9],[80.03,15.14],[80.23,13.84],[80.29,13.01],[79.86,12.06],[79.86,10.36],[79.34,10.31],[78.89,9.55],[79.19,9.22],[78.28,8.93],[77.94,8.25],[77.54,7.97],[76.59,8.9],[76.13,10.3],[75.75,11.31],[75.4,11.78],[74.86,12.74],[74.62,13.99],[74.44,14.62],[73.53,15.99],[73.12,17.93],[72.82,19.21],[72.82,20.42],[72.63,21.36],[71.18,20.76],[70.47,20.88],[69.16,22.09],[69.64,22.45],[69.35,22.84],[68.18,23.69]],\n      [[68.18,23.69],[68.84,24.36],[71.04,24.36],[70.84,25.22],[70.28,25.72],[70.17,26.49],[69.51,26.94],[70.62,27.99],[71.78,27.91],[72.82,28.96],[73.45,29.98],[74.42,30.98],[74.41,31.69],[75.26,32.27],[74.45,32.76],[74.1,33.44],[73.75,34.32],[74.24,34.75],[75.76,34.5],[76.87,34.65],[77.84,35.49]],\n      [[-6.2,53.87],[-6.03,53.15],[-6.79,52.26],[-8.56,51.67],[-9.98,51.82],[-9.17,52.86],[-9.69,53.88],[-8.33,54.66],[-7.57,55.13]],\n      [[53.92,37.2],[54.8,37.39],[55.51,37.96],[56.18,37.94],[56.62,38.12],[57.33,38.03],[58.44,37.52],[59.23,37.41],[60.38,36.53],[61.12,36.49],[61.21,35.65]],\n      [[60.87,29.83],[61.37,29.3],[61.77,28.7],[62.73,28.26],[62.76,27.38],[63.23,27.22],[63.32,26.76],[61.87,26.24],[61.5,25.08]],\n      [[61.5,25.08],[59.62,25.38],[58.53,25.61],[57.4,25.74],[56.97,26.97],[56.49,27.14],[55.72,26.96],[54.72,26.48],[53.49,26.81],[52.48,27.58],[51.52,27.87],[50.85,28.81],[50.12,30.15],[49.58,29.99],[48.94,30.32],[48.57,29.93]],\n      [[48.57,29.93],[48.01,30.45],[48,30.99],[47.69,30.98],[47.85,31.71],[47.33,32.47],[46.11,33.02],[45.42,33.97],[45.65,34.75],[46.15,35.09],[46.08,35.68],[45.42,35.98]],\n      [[45.42,35.98],[44.77,37.17],[44.23,37.97]],\n      [[44.23,37.97],[44.42,38.28],[44.11,39.43],[44.79,39.71]],\n      [[48.88,38.32],[49.2,37.58],[50.15,37.37],[50.84,36.87],[52.26,36.7],[53.83,36.97],[53.92,37.2]],\n      [[48.57,29.93],[47.97,29.98]],\n      [[47.97,29.98],[47.3,30.06],[46.57,29.1]],\n      [[46.57,29.1],[44.71,29.18],[41.89,31.19],[40.4,31.89],[39.2,32.16]],\n      [[39.2,32.16],[38.79,33.38]],\n      [[38.79,33.38],[41.01,34.42],[41.38,35.63],[41.29,36.36],[41.84,36.61],[42.35,37.23]],\n      [[42.35,37.23],[42.78,37.39],[43.94,37.26],[44.29,37],[44.77,37.17]],\n      [[44.77,37.17],[45.42,35.98]],\n      [[-14.51,66.46],[-14.74,65.81],[-13.61,65.13],[-14.91,64.36],[-17.79,63.68],[-18.66,63.5],[-19.97,63.64],[-22.76,63.96],[-21.78,64.4],[-23.96,64.89],[-22.18,65.08],[-22.23,65.38],[-24.33,65.61],[-23.65,66.26],[-22.13,66.41],[-20.58,65.73],[-19.06,66.28],[-17.8,65.99],[-16.17,66.53],[-14.51,66.46]],\n      [[35.72,32.71],[35.55,32.39]],\n      [[35.55,32.39],[35.18,32.53],[34.97,31.87],[35.23,31.75],[34.97,31.62],[34.93,31.35],[35.4,31.49]],\n      [[35.4,31.49],[35.42,31.1],[34.92,29.5]],\n      [[34.92,29.5],[34.27,31.22]],\n      [[34.27,31.22],[34.56,31.55],[34.49,31.61]],\n      [[34.49,31.61],[34.75,32.07],[34.96,32.83],[35.1,33.08],[35.13,33.09]],\n      [[35.13,33.09],[35.46,33.09],[35.55,33.26],[35.82,33.28]],\n      [[35.82,33.28],[35.84,32.87],[35.7,32.72],[35.72,32.71]],\n      [[15.52,38.23],[15.16,37.44],[15.31,37.13],[15.1,36.62],[14.34,37],[13.83,37.1],[12.43,37.61],[12.57,38.13],[13.74,38.03],[14.76,38.14],[15.52,38.23]],\n      [[9.21,41.21],[9.81,40.5],[9.67,39.18],[9.21,39.24],[8.81,38.91],[8.43,39.17],[8.39,40.38],[8.16,40.95],[8.71,40.9],[9.21,41.21]],\n      [[13.81,46.51],[13.7,46.02],[13.94,45.59]],\n      [[13.94,45.59],[13.14,45.74],[12.33,45.38],[12.38,44.89],[12.26,44.6],[12.59,44.09],[13.53,43.59],[14.03,42.76],[15.14,41.96],[15.93,41.96],[16.17,41.74],[15.89,41.54],[16.79,41.18],[17.52,40.88],[18.38,40.36],[18.48,40.17],[18.29,39.81],[17.74,40.28],[16.87,40.44],[16.45,39.8],[17.17,39.42],[17.05,38.9],[16.64,38.84],[16.1,37.99],[15.68,37.91],[15.69,38.21],[15.89,38.75],[16.11,38.96],[15.72,39.54],[15.41,40.05],[15,40.17],[14.7,40.6],[14.06,40.79],[13.63,41.19],[12.89,41.25],[12.11,41.7],[11.19,42.36],[10.51,42.93],[10.2,43.92],[9.7,44.04],[8.89,44.37],[8.43,44.23],[7.85,43.77],[7.44,43.69]],\n      [[-77.57,18.49],[-76.9,18.4],[-76.37,18.16],[-76.2,17.89],[-76.9,17.87],[-77.21,17.7],[-77.77,17.86],[-78.34,18.23],[-78.22,18.45],[-77.8,18.52],[-77.57,18.49]],\n      [[35.72,32.71],[36.83,32.31],[38.79,33.38]],\n      [[39.2,32.16],[39,32.01],[37,31.51],[38,30.51],[37.67,30.34],[37.5,30],[36.74,29.87],[36.5,29.51],[36.07,29.2],[34.96,29.36]],\n      [[34.96,29.36],[34.92,29.5]],\n      [[35.4,31.49],[35.55,31.78],[35.55,32.39]],\n      [[134.64,34.15],[134.77,33.81],[134.2,33.2],[133.79,33.52],[133.28,33.29],[133.01,32.7],[132.36,32.99],[132.37,33.46],[132.92,34.06],[133.49,33.94],[133.9,34.36],[134.64,34.15]],\n      [[140.98,37.14],[140.6,36.34],[140.77,35.84],[140.25,35.14],[138.98,34.67],[137.22,34.61],[135.79,33.46],[135.12,33.85],[135.08,34.6],[133.34,34.38],[132.16,33.9],[130.99,33.89],[132,33.15],[131.33,31.45],[130.69,31.03],[130.2,31.42],[130.45,32.32],[129.81,32.61],[129.41,33.3],[130.35,33.6],[130.88,34.23],[131.88,34.75],[132.62,35.43],[134.61,35.73],[135.68,35.53],[136.72,37.3],[137.39,36.83],[138.86,37.83],[139.43,38.22],[140.05,39.44],[139.88,40.56],[140.31,41.2],[141.37,41.38],[141.91,39.99],[141.88,39.18],[140.96,38.17],[140.98,37.14]],\n      [[143.91,44.17],[144.61,43.96],[145.32,44.38],[145.54,43.26],[144.06,42.99],[143.18,42],[141.61,42.68],[141.07,41.58],[139.96,41.57],[139.82,42.56],[140.31,43.33],[141.38,43.39],[141.67,44.77],[141.97,45.55],[143.14,44.51],[143.91,44.17]],\n      [[70.96,42.27],[70.39,42.08],[69.07,41.38],[68.63,40.67],[68.26,40.66],[67.99,41.14],[66.71,41.17],[66.51,41.99],[66.02,41.99],[66.1,43],[64.9,43.73],[63.19,43.65],[62.01,43.5],[61.06,44.41],[60.24,44.78],[58.69,45.5],[58.5,45.59],[55.93,45],[55.97,41.31]],\n      [[55.97,41.31],[55.46,41.26],[54.76,42.04],[54.08,42.32],[52.94,42.12],[52.5,41.78]],\n      [[52.5,41.78],[52.45,42.03],[52.69,42.44],[52.5,42.79],[51.34,43.13],[50.89,44.03],[50.34,44.28],[50.31,44.61],[51.28,44.51],[51.32,45.25],[52.17,45.41],[53.04,45.26],[53.22,46.23],[53.04,46.85],[52.04,46.8],[51.19,47.05],[50.03,46.61],[49.1,46.4]],\n      [[49.1,46.4],[48.59,46.56],[48.69,47.08]],\n      [[48.69,47.08],[48.06,47.74],[47.32,47.72],[46.47,48.39]],\n      [[46.47,48.39],[47.04,49.15],[46.75,49.36],[47.55,50.45],[48.58,49.87],[48.7,50.61],[50.77,51.69],[52.33,51.72],[54.53,51.03]],\n      [[54.53,51.03],[55.72,50.62],[56.78,51.04],[58.36,51.06],[59.64,50.55]],\n      [[59.64,50.55],[59.93,50.84],[61.34,50.8],[61.59,51.27],[59.97,51.96],[60.93,52.45],[60.74,52.72],[61.7,52.98],[60.98,53.66]],\n      [[60.98,53.66],[61.44,54.01],[65.18,54.35]],\n      [[65.18,54.35],[65.67,54.6],[68.17,54.97]],\n      [[68.17,54.97],[69.07,55.39],[70.87,55.17],[71.18,54.13],[72.22,54.38],[73.51,54.04],[73.43,53.49]],\n      [[73.43,53.49],[74.38,53.55],[76.89,54.49]],\n      [[76.89,54.49],[76.53,54.18],[77.8,53.4],[80.04,50.86],[80.57,51.39],[81.95,50.81],[83.38,51.07],[83.94,50.89],[84.42,50.31],[85.12,50.12],[85.54,49.69],[86.83,49.83],[87.36,49.21]],\n      [[80.26,42.35],[79.64,42.5],[79.14,42.86],[77.66,42.96],[76,42.99],[75.64,42.88],[74.21,43.3],[73.65,43.09],[73.49,42.5],[71.84,42.85],[71.19,42.7],[70.96,42.27]],\n      [[41.59,-1.68],[40.88,-2.08],[40.64,-2.5],[40.26,-2.57],[40.12,-3.28],[39.8,-3.68],[39.6,-4.35],[39.2,-4.68]],\n      [[39.2,-4.68],[37.77,-3.68],[37.7,-3.1],[34.07,-1.06],[33.9,-0.95]],\n      [[33.9,-0.95],[33.89,0.11],[34.18,0.52],[34.67,1.18],[35.04,1.91],[34.6,3.05],[34.48,3.56],[34.01,4.25]],\n      [[34.01,4.25],[34.62,4.85],[35.3,5.51]],\n      [[41.86,3.92],[40.98,2.78],[40.99,-0.86],[41.59,-1.68]],\n      [[73.68,39.43],[71.78,39.28],[70.55,39.6],[69.46,39.53],[69.56,40.1],[70.65,39.94],[71.01,40.24]],\n      [[71.01,40.24],[71.77,40.15],[73.06,40.87],[71.87,41.39],[71.16,41.14],[70.42,41.52],[71.26,42.17],[70.96,42.27]],\n      [[102.58,12.19],[102.35,13.39],[102.99,14.23],[104.28,14.42],[105.22,14.27]],\n      [[105.22,14.27],[106.04,13.88],[106.5,14.57],[107.38,14.2]],\n      [[107.38,14.2],[107.61,13.54],[107.49,12.34],[105.81,11.57],[106.25,10.96],[105.2,10.89],[104.33,10.49]],\n      [[104.33,10.49],[103.5,10.63],[103.09,11.15],[102.58,12.19]],\n      [[128.35,38.61],[129.21,37.43],[129.46,36.78],[129.47,35.63],[129.09,35.08],[128.19,34.89],[127.39,34.48],[126.49,34.39],[126.37,34.93],[126.56,35.68],[126.12,36.73],[126.86,36.89],[126.17,37.75]],\n      [[126.17,37.75],[126.24,37.84],[126.68,37.8],[127.07,38.26],[127.78,38.3],[128.21,38.37],[128.35,38.61]],\n      [[20.59,41.86],[20.52,42.22]],\n      [[20.52,42.22],[20.28,42.32],[20.07,42.59]],\n      [[20.07,42.59],[20.26,42.81]],\n      [[20.26,42.81],[20.5,42.88],[20.64,43.22],[20.81,43.27],[20.96,43.13],[21.14,43.07],[21.27,42.91],[21.44,42.86],[21.63,42.68],[21.78,42.68],[21.66,42.44],[21.54,42.32],[21.58,42.25]],\n      [[21.58,42.25],[21.35,42.21],[20.76,42.05],[20.72,41.85],[20.59,41.86]],\n      [[47.97,29.98],[48.18,29.53],[48.09,29.31],[48.42,28.55]],\n      [[48.42,28.55],[47.71,28.53],[47.46,29],[46.57,29.1]],\n      [[105.22,14.27],[105.54,14.72],[105.59,15.57],[104.78,16.44],[104.72,17.43],[103.96,18.24],[103.2,18.31],[103,17.96],[102.41,17.93],[102.11,18.11],[101.06,17.51],[101.04,18.41],[101.28,19.46],[100.61,19.51],[100.55,20.11],[100.12,20.42]],\n      [[100.12,20.42],[100.33,20.79],[101.18,21.44]],\n      [[102.17,22.46],[102.75,21.68],[103.2,20.77],[104.44,20.76],[104.82,19.89],[104.18,19.62],[103.9,19.27],[105.09,18.67],[105.93,17.49],[106.56,16.6],[107.31,15.91],[107.56,15.2],[107.38,14.2]],\n      [[35.13,33.09],[35.48,33.91],[35.98,34.61],[36,34.64]],\n      [[36,34.64],[36.45,34.59],[36.61,34.2],[36.07,33.82],[35.82,33.28]],\n      [[-7.71,4.36],[-7.97,4.36],[-9,4.83],[-9.91,5.59],[-10.77,6.14],[-11.44,6.79]],\n      [[-11.44,6.79],[-11.2,7.11],[-11.15,7.4],[-10.7,7.94],[-10.23,8.41]],\n      [[14.85,22.86],[14.14,22.49],[13.58,23.04],[12,23.47]],\n      [[9.48,30.31],[9.97,30.54],[10.06,30.96],[9.95,31.38],[10.64,31.76],[10.94,32.08],[11.43,32.37],[11.49,33.14]],\n      [[11.49,33.14],[12.66,32.79],[13.08,32.88],[13.92,32.71],[15.25,32.27],[15.71,31.38],[16.61,31.18],[18.02,30.76],[19.09,30.27],[19.57,30.53],[20.05,30.99],[19.82,31.75],[20.13,32.24],[20.85,32.71],[21.54,32.84],[22.9,32.64],[23.24,32.19],[23.61,32.19],[23.93,32.02],[24.92,31.9],[25.16,31.57]],\n      [[25,22],[25,20],[23.85,20],[23.84,19.58]],\n      [[23.84,19.58],[19.85,21.5],[15.86,23.41],[14.85,22.86]],\n      [[81.79,7.52],[81.64,6.48],[81.22,6.2],[80.35,5.97],[79.87,6.76],[79.7,8.2],[80.15,9.82],[80.84,9.27],[81.3,8.56],[81.79,7.52]],\n      [[28.98,-28.96],[29.33,-29.26],[29.02,-29.74],[28.85,-30.07],[28.29,-30.23],[28.11,-30.55],[27.75,-30.65],[27,-29.88],[27.53,-29.24],[28.07,-28.85],[28.54,-28.65],[28.98,-28.96]],\n      [[22.73,54.33],[22.65,54.58],[22.76,54.86],[22.32,55.02],[21.27,55.19]],\n      [[21.27,55.19],[21.06,56.03]],\n      [[21.06,56.03],[22.2,56.34],[23.88,56.27],[24.86,56.37],[25,56.16],[25.53,56.1],[26.49,55.62]],\n      [[23.48,53.91],[23.24,54.22],[22.73,54.33]],\n      [[21.06,56.03],[21.09,56.78],[21.58,57.41],[22.52,57.75],[23.32,57.01],[24.12,57.03],[24.31,57.79]],\n      [[27.29,57.47],[27.77,57.24],[27.86,56.76],[28.18,56.17]],\n      [[-8.67,27.6],[-13.1,27.6]],\n      [[-13.1,27.6],[-12.36,28.16],[-10.9,28.83],[-10.4,29.1],[-9.56,29.93],[-9.81,31.18],[-9.43,32.04],[-9.3,32.56],[-8.66,33.24],[-7.65,33.7],[-6.91,34.11],[-6.24,35.15],[-5.93,35.76],[-5.19,35.76],[-4.59,35.33],[-3.64,35.4],[-2.6,35.18],[-2.17,35.17]],\n      [[26.62,48.22],[26.86,48.37],[27.52,48.47],[28.26,48.16],[28.67,48.12],[29.12,47.85],[29.05,47.51],[29.42,47.35],[29.56,46.93],[29.91,46.67],[29.84,46.53],[30.02,46.42],[29.76,46.35],[29.17,46.38],[29.07,46.52],[28.86,46.44],[28.93,46.26],[28.66,45.94],[28.49,45.6],[28.23,45.49]],\n      [[28.23,45.49],[28.05,45.94],[28.16,46.37],[28.13,46.81],[27.55,47.41],[27.23,47.83],[26.92,48.12],[26.62,48.22]],\n      [[49.54,-12.47],[49.81,-12.9],[50.06,-13.56],[50.22,-14.76],[50.48,-15.23],[50.38,-15.71],[50.2,-16],[49.86,-15.41],[49.67,-15.71],[49.86,-16.45],[49.77,-16.88],[49.5,-17.11],[49.44,-17.95],[49.04,-19.12],[48.55,-20.5],[47.93,-22.39],[47.55,-23.78],[47.1,-24.94],[46.28,-25.18],[45.41,-25.6],[44.83,-25.35],[44.04,-24.99],[43.76,-24.46],[43.7,-23.57],[43.35,-22.78],[43.25,-22.06],[43.43,-21.34],[43.89,-21.16],[43.9,-20.83],[44.37,-20.07],[44.46,-19.44],[44.23,-18.96],[44.04,-18.33],[43.96,-17.41],[44.31,-16.85],[44.45,-16.22],[44.94,-16.18],[45.5,-15.97],[45.87,-15.79],[46.31,-15.78],[46.88,-15.21],[47.71,-14.59],[48.01,-14.09],[47.87,-13.66],[48.29,-13.78],[48.85,-13.09],[48.86,-12.49],[49.19,-12.04],[49.54,-12.47]],\n      [[-92.23,14.54],[-93.36,15.62],[-93.88,15.94],[-94.69,16.2],[-95.25,16.13],[-96.05,15.75],[-96.56,15.65],[-97.26,15.92],[-98.01,16.11],[-98.95,16.57],[-99.7,16.71],[-100.83,17.17],[-101.67,17.65],[-101.92,17.92],[-102.48,17.98],[-103.5,18.29],[-103.92,18.75],[-104.99,19.32],[-105.49,19.95],[-105.73,20.43],[-105.4,20.53],[-105.5,20.82],[-105.27,21.08],[-105.27,21.42],[-105.6,21.87],[-105.69,22.27],[-106.03,22.77],[-106.91,23.77],[-107.92,24.55],[-108.4,25.17],[-109.26,25.58],[-109.44,25.82],[-109.29,26.44],[-109.8,26.68],[-110.39,27.16],[-110.64,27.86],[-111.18,27.94],[-111.76,28.47],[-112.23,28.95],[-112.27,29.27],[-112.81,30.02],[-113.16,30.79],[-113.15,31.17],[-113.87,31.57],[-114.21,31.52],[-114.78,31.8],[-114.94,31.39],[-114.77,30.91],[-114.67,30.16],[-114.33,29.75],[-113.59,29.06],[-113.42,28.83],[-113.27,28.75],[-113.14,28.41],[-112.96,28.43],[-112.76,27.78],[-112.46,27.53],[-112.24,27.17],[-111.62,26.66],[-111.28,25.73],[-110.99,25.29],[-110.71,24.83],[-110.66,24.3],[-110.17,24.27],[-109.77,23.81],[-109.41,23.36],[-109.43,23.19],[-109.85,22.82],[-110.03,22.82],[-110.3,23.43],[-110.95,24],[-111.67,24.48],[-112.18,24.74],[-112.15,25.47],[-112.3,26.01],[-112.78,26.32],[-113.46,26.77],[-113.6,26.64],[-113.85,26.9],[-114.47,27.14],[-115.06,27.72],[-114.98,27.8],[-114.57,27.74],[-114.2,28.12],[-114.16,28.57],[-114.93,29.28],[-115.52,29.56],[-115.89,30.18],[-116.26,30.84],[-116.72,31.64],[-117.13,32.54]],\n      [[-117.13,32.54],[-115.99,32.61],[-114.72,32.72],[-114.81,32.53],[-113.3,32.04],[-111.02,31.33],[-109.03,31.34],[-108.24,31.34],[-108.24,31.75],[-106.51,31.75],[-106.14,31.4],[-105.63,31.08],[-105.04,30.64],[-104.71,30.12],[-104.46,29.57],[-103.94,29.27],[-103.11,28.97],[-102.48,29.76],[-101.66,29.78],[-100.96,29.38],[-100.46,28.7],[-100.11,28.11],[-99.52,27.54],[-99.3,26.84],[-99.02,26.37],[-98.24,26.06],[-97.53,25.84]],\n      [[-97.53,25.84],[-97.14,25.87],[-97.53,24.99],[-97.7,24.27],[-97.78,22.93],[-97.87,22.44],[-97.7,21.9],[-97.39,21.41],[-97.19,20.64],[-96.53,19.89],[-96.29,19.32],[-95.9,18.83],[-94.84,18.56],[-94.43,18.14],[-93.55,18.42],[-92.79,18.52],[-92.04,18.7],[-91.41,18.88],[-90.77,19.28],[-90.53,19.87],[-90.45,20.71],[-90.28,21],[-89.6,21.26],[-88.54,21.49],[-87.66,21.46],[-87.05,21.54],[-86.81,21.33],[-86.85,20.85],[-87.38,20.26],[-87.62,19.65],[-87.44,19.47],[-87.59,19.04],[-87.84,18.26],[-88.09,18.52],[-88.3,18.5]],\n      [[21.58,42.25],[21.92,42.3],[22.38,42.32]],\n      [[21.02,40.84],[20.61,41.09],[20.46,41.52],[20.59,41.86]],\n      [[-12.17,14.62],[-11.83,14.8],[-11.67,15.39],[-11.35,15.41],[-10.65,15.13],[-10.09,15.33],[-9.7,15.26],[-9.55,15.49],[-5.54,15.5],[-5.32,16.2],[-5.49,16.33],[-5.97,20.64],[-6.45,24.96],[-4.92,24.97]],\n      [[4.27,19.16],[4.27,16.85],[3.72,16.18],[3.64,15.57],[2.75,15.41],[1.39,15.32],[1.02,14.97],[0.37,14.93]],\n      [[-11.51,12.44],[-11.47,12.75],[-11.55,13.14],[-11.93,13.42],[-12.12,13.99],[-12.17,14.62]],\n      [[98.55,9.93],[98.46,10.68],[98.76,11.44],[98.43,12.03],[98.51,13.12],[98.1,13.64],[97.78,14.84],[97.6,16.1],[97.16,16.93],[96.51,16.43],[95.37,15.71],[94.81,15.8],[94.19,16.04],[94.53,17.28],[94.32,18.21],[93.54,19.37],[93.66,19.73],[93.08,19.86],[92.37,20.67]],\n      [[100.12,20.42],[99.54,20.19],[98.96,19.75],[98.25,19.71],[97.8,18.63],[97.38,18.45],[97.86,17.57],[98.49,16.84],[98.9,16.18],[98.54,15.31],[98.19,15.12],[98.43,14.62],[99.1,13.83],[99.21,13.27],[99.2,12.8],[99.59,11.89],[99.04,10.96],[98.55,9.93]],\n      [[19.74,42.69],[19.3,42.2],[19.37,41.88],[19.16,41.96],[18.88,42.28],[18.45,42.48],[18.56,42.65]],\n      [[19.22,43.52],[19.48,43.35],[19.63,43.21],[19.96,43.11],[20.34,42.9],[20.26,42.81]],\n      [[87.75,49.3],[88.81,49.47],[90.71,50.33],[92.23,50.8]],\n      [[92.23,50.8],[93.1,50.5],[94.15,50.48]],\n      [[94.15,50.48],[94.82,50.01]],\n      [[94.82,50.01],[95.81,49.98],[97.26,49.73],[98.23,50.42]],\n      [[98.23,50.42],[97.83,51.01],[98.86,52.05],[99.98,51.63],[100.89,51.52]],\n      [[100.89,51.52],[102.07,51.26],[102.26,50.51],[103.68,50.09]],\n      [[103.68,50.09],[104.62,50.28],[105.89,50.41]],\n      [[105.89,50.41],[106.89,50.27],[107.87,49.79],[108.48,49.28],[109.4,49.29],[110.66,49.13],[111.58,49.38],[112.9,49.54],[114.36,50.25],[114.96,50.14],[115.49,49.81],[116.68,49.89]],\n      [[34.56,-11.52],[35.31,-11.44],[36.51,-11.72],[36.78,-11.59]],\n      [[36.78,-11.59],[37.47,-11.57],[37.83,-11.27],[38.43,-11.29]],\n      [[38.43,-11.29],[39.52,-10.9],[40.32,-10.32],[40.48,-10.77],[40.44,-11.76],[40.56,-12.64],[40.6,-14.2],[40.78,-14.69],[40.48,-15.41],[40.09,-16.1],[39.45,-16.72],[38.54,-17.1],[37.41,-17.59],[36.28,-18.66],[35.9,-18.84],[35.2,-19.55],[34.79,-19.78],[34.7,-20.5],[35.18,-21.25],[35.37,-21.84],[35.39,-22.14],[35.56,-22.09],[35.53,-23.07],[35.37,-23.54],[35.61,-23.71],[35.46,-24.12],[35.04,-24.48],[34.22,-24.82],[33.01,-25.36],[32.57,-25.73],[32.66,-26.15],[32.92,-26.22],[32.83,-26.74]],\n      [[32.83,-26.74],[32.07,-26.73]],\n      [[32.07,-26.73],[31.99,-26.29],[31.84,-25.84]],\n      [[31.84,-25.84],[31.75,-25.48],[31.93,-24.37],[31.67,-23.66],[31.19,-22.25]],\n      [[31.19,-22.25],[32.24,-21.12],[32.51,-20.4],[32.66,-20.3],[32.77,-19.72],[32.61,-19.42],[32.65,-18.67],[32.85,-17.98],[32.85,-16.71],[32.33,-16.39],[31.85,-16.32],[31.64,-16.07],[31.17,-15.86],[30.34,-15.88],[30.27,-15.51]],\n      [[30.27,-15.51],[30.18,-14.8],[33.21,-13.97]],\n      [[33.21,-13.97],[33.79,-14.45],[34.06,-14.36],[34.46,-14.61],[34.52,-15.01],[34.31,-15.48],[34.38,-16.18],[35.03,-16.8],[35.34,-16.11],[35.77,-15.9],[35.69,-14.61],[35.27,-13.89],[34.91,-13.57],[34.56,-13.58],[34.28,-12.28],[34.56,-11.52]],\n      [[-12.17,14.62],[-12.83,15.3],[-13.44,16.04],[-14.1,16.3],[-14.58,16.6],[-15.14,16.59],[-15.62,16.37],[-16.12,16.46],[-16.46,16.14]],\n      [[-16.46,16.14],[-16.55,16.67],[-16.27,17.17],[-16.15,18.11],[-16.26,19.1],[-16.38,19.59],[-16.28,20.09],[-16.54,20.57],[-17.06,21]],\n      [[-17.06,21],[-16.85,21.33],[-12.93,21.33],[-13.12,22.77],[-12.87,23.28],[-11.94,23.37],[-11.97,25.93],[-8.69,25.88],[-8.68,27.4]],\n      [[33.21,-13.97],[32.69,-13.71],[32.99,-12.78],[33.31,-12.44],[33.11,-11.61],[33.32,-10.8],[33.49,-10.53],[33.23,-9.68],[32.76,-9.23]],\n      [[32.76,-9.23],[33.74,-9.42],[33.94,-9.69]],\n      [[33.94,-9.69],[34.28,-10.16],[34.56,-11.52]],\n      [[102.14,6.22],[102.37,6.13],[102.96,5.52],[103.38,4.86],[103.44,4.18],[103.33,3.73],[103.43,3.38],[103.5,2.79],[103.85,2.52],[104.25,1.63],[104.29,1.37],[104.13,1.27]],\n      [[104.13,1.27],[103.74,1.13],[103.56,1.19]],\n      [[103.56,1.19],[102.57,1.97],[101.39,2.76],[101.27,3.27],[100.7,3.94],[100.56,4.77],[100.2,5.31],[100.31,6.04],[100.09,6.46]],\n      [[100.09,6.46],[100.26,6.64],[101.08,6.2],[101.15,5.69],[101.81,5.81],[102.14,6.22]],\n      [[109.66,2.01],[110.4,1.66],[111.17,1.85],[111.37,2.7],[111.8,2.89],[113,3.1],[113.71,3.89],[114.2,4.53]],\n      [[115.45,5.45],[116.22,6.14],[116.73,6.92],[117.13,6.93],[117.64,6.42],[117.69,5.99],[118.35,5.71],[119.18,5.41],[119.11,5.02],[118.44,4.97],[118.62,4.48],[117.88,4.14]],\n      [[16.34,-28.58],[15.6,-27.82],[15.21,-27.09],[14.99,-26.12],[14.74,-25.39],[14.41,-23.85],[14.39,-22.66],[14.26,-22.11],[13.87,-21.7],[13.35,-20.87],[12.83,-19.67],[12.61,-19.05],[11.79,-18.07],[11.73,-17.3]],\n      [[23.22,-17.52],[24.03,-17.3],[24.68,-17.35],[25.08,-17.58],[25.08,-17.66]],\n      [[19.9,-24.77],[19.89,-28.46],[19,-28.97],[18.46,-29.05],[17.84,-28.86],[17.39,-28.78],[17.22,-28.36],[16.82,-28.08],[16.34,-28.58]],\n      [[165.78,-21.08],[166.6,-21.7],[167.12,-22.16],[166.74,-22.4],[166.19,-22.13],[165.47,-21.68],[164.83,-21.15],[164.17,-20.44],[164.03,-20.11],[164.46,-20.12],[165.02,-20.46],[165.46,-20.8],[165.78,-21.08]],\n      [[14.85,22.86],[15.1,21.31]],\n      [[15.1,21.31],[15.47,21.05],[15.49,20.73]],\n      [[15.49,20.73],[15.9,20.39],[15.69,19.96],[15.3,17.93],[15.25,16.63]],\n      [[15.25,16.63],[13.97,15.68],[13.54,14.37]],\n      [[13.54,14.37],[13.96,14],[13.95,13.35],[14.6,13.33],[14.5,12.86]],\n      [[14.18,12.48],[14,12.46],[13.32,13.56],[13.08,13.6],[12.3,13.04],[11.53,13.33],[10.99,13.39],[10.7,13.25],[10.11,13.28],[9.52,12.85],[9.01,12.83],[7.8,13.34],[7.33,13.1],[6.82,13.12],[6.45,13.49],[5.44,13.87],[4.37,13.75],[4.11,13.53],[3.97,12.96],[3.68,12.55],[3.61,11.66]],\n      [[8.5,4.77],[7.46,4.41],[7.08,4.46],[6.7,4.24],[5.9,4.26],[5.36,4.89],[5.03,5.61],[4.33,6.27],[3.57,6.26],[2.69,6.26]],\n      [[-85.71,11.09],[-86.06,11.4],[-86.53,11.81],[-86.75,12.14],[-87.17,12.46],[-87.67,12.91],[-87.56,13.06],[-87.39,12.91],[-87.32,12.98]],\n      [[-83.15,15],[-83.23,14.9],[-83.28,14.68],[-83.18,14.31],[-83.41,13.97],[-83.52,13.57],[-83.55,13.13],[-83.5,12.87],[-83.47,12.42],[-83.63,12.32],[-83.72,11.89],[-83.65,11.63],[-83.86,11.37],[-83.81,11.1],[-83.66,10.94]],\n      [[4.05,51.27],[3.31,51.35],[3.83,51.62],[4.71,53.09],[6.07,53.51],[6.91,53.48]],\n      [[20.65,69.11],[20.03,69.07],[19.88,68.41],[17.99,68.57],[17.73,68.01],[16.77,68.01],[16.11,67.3],[15.11,66.19],[13.56,64.79],[13.92,64.45],[13.57,64.05],[12.58,64.07],[11.93,63.13],[11.99,61.8],[12.63,61.29],[12.3,60.12],[11.47,59.43],[11.03,58.86]],\n      [[11.03,58.86],[10.36,59.47],[8.38,58.31],[7.05,58.08],[5.67,58.59],[5.31,59.66],[4.99,61.97],[5.91,62.61],[8.55,63.45],[10.53,64.49],[12.36,65.88],[14.76,67.81],[16.44,68.56],[19.18,69.82],[21.38,70.26],[23.02,70.2],[24.55,71.03],[26.37,70.99],[28.17,71.19],[31.29,70.45],[30.01,70.19],[31.1,69.56],[29.4,69.16],[28.59,69.06]],\n      [[24.72,77.85],[22.49,77.44],[20.73,77.68],[21.42,77.94],[20.81,78.25],[22.88,78.45],[23.28,78.08],[24.72,77.85]],\n      [[18.25,79.7],[21.54,78.96],[19.03,78.56],[18.47,77.83],[17.59,77.64],[17.12,76.81],[15.91,76.77],[13.76,77.38],[14.67,77.74],[13.17,78.02],[11.22,78.87],[10.44,79.65],[13.17,80.01],[13.72,79.66],[15.14,79.67],[15.52,80.02],[16.99,80.05],[18.25,79.7]],\n      [[25.45,80.41],[27.41,80.06],[25.92,79.52],[23.02,79.4],[20.08,79.57],[19.9,79.84],[18.46,79.86],[17.37,80.32],[20.46,80.6],[21.91,80.36],[22.92,80.66],[25.45,80.41]],\n      [[173.02,-40.92],[173.25,-41.33],[173.96,-40.93],[174.25,-41.35],[174.25,-41.77],[173.88,-42.23],[173.22,-42.97],[172.71,-43.37],[173.08,-43.85],[172.31,-43.87],[171.45,-44.24],[171.19,-44.9],[170.62,-45.91],[169.83,-46.36],[169.33,-46.64],[168.41,-46.62],[167.76,-46.29],[166.68,-46.22],[166.51,-45.85],[167.05,-45.11],[168.3,-44.12],[168.95,-43.94],[169.67,-43.56],[170.52,-43.03],[171.13,-42.51],[171.57,-41.77],[171.95,-41.51],[172.1,-40.96],[172.8,-40.49],[173.02,-40.92]],\n      [[174.61,-36.16],[175.34,-37.21],[175.36,-36.53],[175.81,-36.8],[175.96,-37.56],[176.76,-37.88],[177.44,-37.96],[178.01,-37.58],[178.52,-37.7],[178.27,-38.58],[177.97,-39.17],[177.21,-39.15],[176.94,-39.45],[177.03,-39.88],[176.89,-40.07],[176.51,-40.6],[176.01,-41.29],[175.24,-41.69],[175.07,-41.43],[174.65,-41.28],[175.23,-40.46],[174.9,-39.91],[173.82,-39.51],[173.85,-39.15],[174.57,-38.8],[174.74,-38.03],[174.7,-37.38],[174.29,-36.71],[174.32,-36.53],[173.84,-36.12],[173.05,-35.24],[172.64,-34.53],[173.01,-34.45],[173.55,-35.01],[174.33,-35.27],[174.61,-36.16]],\n      [[53.11,16.65],[52.78,17.35],[52,19]],\n      [[52,19],[55,20],[55.67,22],[55.21,22.71]],\n      [[56.4,24.92],[56.85,24.24],[57.4,23.88],[58.14,23.75],[58.73,23.57],[59.18,22.99],[59.45,22.66],[59.81,22.53],[59.81,22.31],[59.44,21.71],[59.28,21.43],[58.86,21.11],[58.49,20.43],[58.03,20.48],[57.83,20.24],[57.67,19.74],[57.79,19.07],[57.69,18.94],[57.23,18.95],[56.61,18.57],[56.51,18.09],[56.28,17.88],[55.66,17.88],[55.27,17.63],[55.27,17.23],[54.79,16.95],[54.24,17.04],[53.57,16.71],[53.11,16.65]],\n      [[56.07,26.06],[56.36,26.4],[56.49,26.31],[56.39,25.9],[56.26,25.71]],\n      [[68.18,23.69],[67.44,23.94],[67.15,24.66],[66.37,25.43],[64.53,25.24],[62.91,25.22],[61.5,25.08]],\n      [[-77.88,7.22],[-78.21,7.51],[-78.43,8.05],[-78.18,8.32],[-78.44,8.39],[-78.62,8.72],[-79.12,9],[-79.56,8.93],[-79.76,8.58],[-80.16,8.33],[-80.38,8.3],[-80.48,8.09],[-80,7.55],[-80.28,7.42],[-80.42,7.27],[-80.89,7.22],[-81.06,7.82],[-81.19,7.65],[-81.52,7.71],[-81.72,8.11],[-82.13,8.18],[-82.39,8.29],[-82.82,8.29],[-82.85,8.07],[-82.97,8.23]],\n      [[-82.55,9.57],[-82.19,9.21],[-82.21,9],[-81.81,8.95],[-81.71,9.03],[-81.44,8.79],[-80.95,8.86],[-80.52,9.11],[-79.91,9.31],[-79.57,9.61],[-79.02,9.55],[-79.06,9.45],[-78.5,9.42],[-78.06,9.25],[-77.73,8.95],[-77.35,8.67]],\n      [[-70.37,-18.35],[-71.38,-17.77],[-71.46,-17.36],[-73.44,-16.36],[-75.24,-15.27],[-76.01,-14.65],[-76.42,-13.82],[-76.26,-13.54],[-77.11,-12.22],[-78.09,-10.38],[-79.04,-8.39],[-79.45,-7.93],[-79.76,-7.19],[-80.54,-6.54],[-81.25,-6.14],[-80.93,-5.69],[-81.41,-4.74],[-81.1,-4.04],[-80.3,-3.4]],\n      [[126.38,8.41],[126.48,7.75],[126.54,7.19],[126.2,6.27],[125.83,7.29],[125.36,6.79],[125.68,6.05],[125.4,5.58],[124.22,6.16],[123.94,6.89],[124.24,7.36],[123.61,7.83],[123.3,7.42],[122.83,7.46],[122.09,6.9],[121.92,7.19],[122.31,8.03],[122.94,8.32],[123.49,8.69],[123.84,8.24],[124.6,8.51],[124.76,8.96],[125.47,8.99],[125.41,9.76],[126.22,9.29],[126.31,8.78],[126.38,8.41]],\n      [[123.98,10.28],[123.62,9.95],[123.31,9.32],[123,9.02],[122.38,9.71],[122.59,9.98],[122.84,10.26],[122.95,10.88],[123.5,10.94],[123.34,10.27],[124.08,11.23],[123.98,10.28]],\n      [[118.5,9.32],[117.17,8.37],[117.66,9.07],[118.39,9.68],[118.99,10.38],[119.51,11.37],[119.69,10.55],[119.03,10],[118.5,9.32]],\n      [[121.88,11.89],[122.48,11.58],[123.12,11.58],[123.1,11.17],[122.64,10.74],[122,10.44],[121.97,10.91],[122.04,11.42],[121.88,11.89]],\n      [[125.5,12.16],[125.78,11.05],[125.01,11.31],[125.03,10.98],[125.28,10.36],[124.8,10.13],[124.76,10.84],[124.46,10.89],[124.3,11.5],[124.89,11.42],[124.88,11.79],[124.27,12.56],[125.23,12.54],[125.5,12.16]],\n      [[121.53,13.07],[121.26,12.21],[120.83,12.7],[120.32,13.47],[121.18,13.43],[121.53,13.07]],\n      [[121.32,18.5],[121.94,18.22],[122.25,18.48],[122.34,18.22],[122.17,17.81],[122.52,17.09],[122.25,16.26],[121.66,15.93],[121.51,15.12],[121.73,14.33],[122.26,14.22],[122.7,14.34],[123.95,13.78],[123.86,13.24],[124.18,13],[124.08,12.54],[123.3,13.03],[122.93,13.55],[122.67,13.19],[122.03,13.78],[121.13,13.64],[120.63,13.86],[120.68,14.27],[120.99,14.53],[120.69,14.76],[120.56,14.4],[120.07,14.97],[119.92,15.41],[119.88,16.36],[120.29,16.03],[120.39,17.6],[120.72,18.51],[121.32,18.5]],\n      [[155.88,-6.82],[155.6,-6.92],[155.17,-6.54],[154.73,-5.9],[154.51,-5.14],[154.65,-5.04],[154.76,-5.34],[155.06,-5.57],[155.55,-6.2],[156.02,-6.54],[155.88,-6.82]],\n      [[151.98,-5.48],[151.46,-5.56],[151.3,-5.84],[150.75,-6.08],[150.24,-6.32],[149.71,-6.32],[148.89,-6.03],[148.32,-5.75],[148.4,-5.44],[149.3,-5.58],[149.85,-5.51],[150,-5.03],[150.14,-5],[150.24,-5.53],[150.81,-5.46],[151.09,-5.11],[151.65,-4.76],[151.54,-4.17],[152.14,-4.15],[152.34,-4.31],[152.32,-4.87],[151.98,-5.48]],\n      [[141,-2.6],[142.74,-3.29],[144.58,-3.86],[145.27,-4.37],[145.83,-4.88],[145.98,-5.47],[147.65,-6.08],[147.89,-6.61],[146.97,-6.72],[147.19,-7.39],[148.08,-8.04],[148.73,-9.1],[149.31,-9.07],[149.27,-9.51],[150.04,-9.68],[149.74,-9.87],[150.8,-10.29],[150.69,-10.58],[150.03,-10.65],[149.78,-10.39],[148.92,-10.28],[147.91,-10.13],[147.14,-9.49],[146.57,-8.94],[146.05,-8.07],[144.74,-7.63],[143.9,-7.92],[143.29,-8.25],[143.41,-8.98],[142.63,-9.33],[142.07,-9.16],[141.03,-9.12]],\n      [[153.14,-4.5],[152.83,-4.77],[152.64,-4.18],[152.41,-3.79],[151.95,-3.46],[151.38,-3.04],[150.66,-2.74],[150.94,-2.5],[151.48,-2.78],[151.82,-3],[152.24,-3.24],[152.64,-3.66],[153.02,-3.98],[153.14,-4.5]],\n      [[14.12,53.76],[14.8,54.05],[16.36,54.51],[17.62,54.85],[18.62,54.68],[18.7,54.44],[19.66,54.43]],\n      [[19.66,54.43],[20.89,54.31],[22.73,54.33]],\n      [[23.53,51.58],[24.03,50.71],[23.92,50.42],[23.43,50.31],[22.52,49.48],[22.78,49.03],[22.56,49.09]],\n      [[22.56,49.09],[21.61,49.47],[20.89,49.33],[20.42,49.43],[19.83,49.22],[19.32,49.57],[18.91,49.44],[18.85,49.5]],\n      [[-66.28,18.51],[-65.77,18.43],[-65.59,18.23],[-65.85,17.98],[-66.6,17.98],[-67.18,17.95],[-67.24,18.37],[-67.1,18.52],[-66.28,18.51]],\n      [[130.64,42.4],[130.78,42.22],[130.4,42.28],[129.97,41.94],[129.67,41.6],[129.71,40.88],[129.19,40.66],[129.01,40.49],[128.63,40.19],[127.97,40.03],[127.53,39.76],[127.5,39.32],[127.39,39.21],[127.78,39.05],[128.35,38.61]],\n      [[126.17,37.75],[125.69,37.94],[125.57,37.75],[125.28,37.67],[125.24,37.86],[124.98,37.95],[124.71,38.11],[124.99,38.55],[125.22,38.67],[125.13,38.85],[125.39,39.39],[125.32,39.55],[124.74,39.66],[124.27,39.93]],\n      [[-7.45,37.1],[-7.86,36.84],[-8.38,36.98],[-8.9,36.87],[-8.75,37.65],[-8.84,38.27],[-9.29,38.36],[-9.53,38.74],[-9.45,39.39],[-9.05,39.76],[-8.98,40.16],[-8.77,40.76],[-8.79,41.18],[-8.99,41.54],[-9.03,41.88]],\n      [[50.81,24.75],[50.74,25.48],[51.01,26.01],[51.29,26.11],[51.59,25.8],[51.61,25.22],[51.39,24.63]],\n      [[51.39,24.63],[51.11,24.56],[50.81,24.75]],\n      [[22.71,47.88],[23.14,48.1],[23.76,47.99],[24.4,47.98],[24.87,47.74],[25.21,47.89],[25.95,47.99],[26.2,48.22],[26.62,48.22]],\n      [[28.23,45.49],[28.68,45.3],[29.15,45.46],[29.6,45.29]],\n      [[29.6,45.29],[29.63,45.04],[29.14,44.82],[28.84,44.91],[28.56,43.71]],\n      [[22.66,44.23],[22.47,44.41],[22.71,44.58],[22.46,44.7],[22.15,44.48],[21.56,44.77],[21.48,45.18],[20.87,45.42],[20.76,45.73],[20.22,46.13]],\n      [[143.65,50.75],[144.65,48.98],[143.17,49.31],[142.56,47.86],[143.53,46.84],[143.51,46.14],[142.75,46.74],[142.09,45.97],[141.91,46.81],[142.02,47.78],[141.9,48.86],[142.14,49.62],[142.18,50.95],[141.59,51.94],[141.68,53.3],[142.61,53.76],[142.21,54.23],[142.65,54.37],[142.91,53.7],[143.26,52.74],[143.24,51.76],[143.65,50.75]],\n      [[19.66,54.43],[19.89,54.87],[21.27,55.19]],\n      [[-175.01,66.58],[-174.34,66.34],[-174.57,67.06],[-171.86,66.91],[-169.9,65.98],[-170.89,65.54],[-172.53,65.44],[-172.55,64.46],[-172.96,64.25],[-173.89,64.28],[-174.65,64.63],[-175.98,64.92],[-176.21,65.36],[-177.22,65.52],[-178.36,65.39],[-178.9,65.74],[-178.69,66.11],[-179.88,65.87],[-179.43,65.4],[-180,64.98],[-180,68.96],[-177.55,68.2],[-174.93,67.21],[-175.01,66.58]],\n      [[180,70.83],[178.9,70.78],[178.73,71.1],[180,71.52],[180,70.83]],\n      [[-178.69,70.89],[-180,70.83],[-180,71.52],[-179.87,71.56],[-179.02,71.56],[-177.58,71.27],[-177.66,71.13],[-178.69,70.89]],\n      [[143.6,73.21],[142.09,73.21],[140.04,73.32],[139.86,73.37],[140.81,73.77],[142.06,73.86],[143.48,73.48],[143.6,73.21]],\n      [[150.73,75.08],[149.58,74.69],[147.98,74.78],[146.12,75.17],[146.36,75.5],[148.22,75.35],[150.73,75.08]],\n      [[145.09,75.56],[144.3,74.82],[140.61,74.85],[138.96,74.61],[136.97,75.26],[137.51,75.95],[138.83,76.14],[141.47,76.09],[145.09,75.56]],\n      [[57.54,70.72],[56.94,70.63],[53.68,70.76],[53.41,71.21],[51.6,71.47],[51.46,72.01],[52.48,72.23],[52.44,72.77],[54.43,73.63],[53.51,73.75],[55.9,74.63],[55.63,75.08],[57.87,75.61],[61.17,76.25],[64.5,76.44],[66.21,76.81],[68.16,76.94],[68.85,76.54],[68.18,76.23],[64.64,75.74],[61.58,75.26],[58.48,74.31],[56.99,73.33],[55.42,72.37],[55.62,71.54],[57.54,70.72]],\n      [[131.29,44.11],[131.03,44.97],[131.88,45.32]],\n      [[131.88,45.32],[133.1,45.14],[133.77,46.12]],\n      [[133.77,46.12],[134.11,47.21],[134.5,47.58],[135.03,48.48]],\n      [[133.37,48.18],[132.51,47.79],[130.99,47.79],[130.58,48.73]],\n      [[129.4,49.44],[127.66,49.76],[127.29,50.74]],\n      [[125.07,53.16],[123.57,53.46],[122.25,53.43]],\n      [[120.73,52.52],[120.74,51.96],[120.18,51.64],[119.28,50.58],[119.29,50.14]],\n      [[105.89,50.41],[104.62,50.28],[103.68,50.09]],\n      [[103.68,50.09],[102.26,50.51],[102.07,51.26],[100.89,51.52]],\n      [[98.23,50.42],[97.26,49.73],[95.81,49.98],[94.82,50.01]],\n      [[94.15,50.48],[93.1,50.5],[92.23,50.8]],\n      [[76.89,54.49],[74.38,53.55],[73.43,53.49]],\n      [[68.17,54.97],[65.67,54.6],[65.18,54.35]],\n      [[65.18,54.35],[61.44,54.01],[60.98,53.66]],\n      [[59.64,50.55],[58.36,51.06],[56.78,51.04],[55.72,50.62],[54.53,51.03]],\n      [[46.47,48.39],[47.32,47.72],[48.06,47.74],[48.69,47.08]],\n      [[48.69,47.08],[48.59,46.56],[49.1,46.4]],\n      [[49.1,46.4],[48.65,45.81],[47.68,45.64],[46.68,44.61],[47.59,43.66],[47.49,42.99],[48.58,41.81],[47.99,41.41]],\n      [[46.4,41.86],[45.78,42.09],[45.47,42.5]],\n      [[44.54,42.71],[43.93,42.55],[43.76,42.74],[42.39,43.22],[40.92,43.38],[40.08,43.55]],\n      [[39.96,43.43],[38.68,44.28],[37.54,44.66],[36.68,45.24],[37.4,45.4],[38.23,46.24],[37.67,46.64],[39.15,47.04],[39.12,47.26],[38.22,47.1]],\n      [[38.22,47.1],[38.26,47.55]],\n      [[38.26,47.55],[38.77,47.83],[39.74,47.9]],\n      [[39.74,47.9],[39.9,48.23],[39.67,48.78],[40.08,49.31]],\n      [[40.08,49.31],[40.07,49.6],[38.59,49.93]],\n      [[38.59,49.93],[38.01,49.92],[37.39,50.38],[36.63,50.23],[35.36,50.58]],\n      [[35.36,50.58],[35.38,50.77],[35.02,51.21]],\n      [[35.02,51.21],[34.22,51.26],[34.14,51.57],[34.39,51.77],[33.75,52.34],[32.72,52.24],[32.41,52.29]],\n      [[32.41,52.29],[32.16,52.06],[31.79,52.1],[31.54,52.74]],\n      [[31.31,53.07],[31.5,53.17],[32.3,53.13]],\n      [[27.72,57.79],[27.42,58.72],[28.13,59.3]],\n      [[28.13,59.3],[27.98,59.48],[29.12,60.03],[28.07,60.5],[30.21,61.78]],\n      [[28.59,69.06],[29.4,69.16],[31.1,69.56],[32.13,69.91],[33.78,69.3],[36.51,69.06],[40.29,67.93],[41.06,67.46],[41.13,66.79],[40.02,66.27],[38.38,66],[33.92,66.76],[33.18,66.63],[34.81,65.9],[34.88,65.44],[34.94,64.41],[36.23,64.11],[37.01,63.85],[37.14,64.33],[36.54,64.76],[37.18,65.14],[39.59,64.52],[40.44,64.76],[39.76,65.5],[42.09,66.48],[43.02,66.42],[43.95,66.07],[44.53,66.76],[43.7,67.35],[44.19,67.95],[43.45,68.57],[46.25,68.25],[46.82,67.69],[45.56,67.57],[45.56,67.01],[46.35,66.67],[47.89,66.88],[48.14,67.52],[50.23,68],[53.72,68.86],[54.47,68.81],[53.49,68.2],[54.73,68.1],[55.44,68.44],[57.32,68.47],[58.8,68.88],[59.94,68.28],[61.08,68.94],[60.03,69.52],[60.55,69.85],[63.5,69.55],[64.89,69.23],[68.51,68.09],[69.18,68.62],[68.16,69.14],[68.14,69.36],[66.93,69.45],[67.26,69.93],[66.72,70.71],[66.69,71.03],[68.54,71.93],[69.2,72.84],[69.94,73.04],[72.59,72.78],[72.8,72.22],[71.85,71.41],[72.47,71.09],[72.79,70.39],[72.56,69.02],[73.67,68.41],[73.24,67.74],[71.28,66.32],[72.42,66.17],[72.82,66.53],[73.92,66.79],[74.19,67.28],[75.05,67.76],[74.47,68.33],[74.94,68.99],[73.84,69.07],[73.6,69.63],[74.4,70.63],[73.1,71.45],[74.89,72.12],[74.66,72.83],[75.16,72.85],[75.68,72.3],[75.29,71.34],[76.36,71.15],[75.9,71.87],[77.58,72.27],[79.65,72.32],[81.5,71.75],[80.61,72.58],[80.51,73.65],[82.25,73.85],[84.66,73.81],[86.82,73.94],[86.01,74.46],[87.17,75.12],[88.32,75.14],[90.26,75.64],[92.9,75.77],[93.23,76.05],[95.86,76.14],[96.68,75.92],[98.92,76.45],[100.76,76.43],[101.04,76.86],[101.99,77.29],[104.35,77.7],[106.07,77.37],[104.71,77.13],[106.97,76.97],[107.24,76.48],[108.15,76.72],[111.08,76.71],[113.33,76.22],[114.13,75.85],[113.89,75.33],[112.78,75.03],[110.15,74.48],[109.4,74.18],[110.64,74.04],[112.12,73.79],[113.02,73.98],[113.53,73.34],[113.97,73.59],[115.57,73.75],[118.78,73.59],[119.02,73.12],[123.2,72.97],[123.26,73.74],[125.38,73.56],[126.98,73.57],[128.59,73.04],[129.05,72.4],[128.46,71.98],[129.72,71.19],[131.29,70.79],[132.25,71.84],[133.86,71.39],[135.56,71.66],[137.5,71.35],[138.23,71.63],[139.87,71.49],[139.15,72.42],[140.47,72.85],[149.5,72.2],[150.35,71.61],[152.97,70.84],[157.01,71.03],[159,70.87],[159.83,70.45],[159.71,69.72],[160.94,69.44],[162.28,69.64],[164.05,69.67],[165.94,69.47],[167.84,69.58],[169.58,68.69],[170.82,69.01],[170.01,69.65],[170.45,70.1],[173.64,69.82],[175.72,69.88],[178.6,69.4],[180,68.96],[180,64.98],[179.99,64.97],[178.71,64.53],[177.41,64.61],[178.31,64.08],[178.91,63.25],[179.37,62.98],[179.49,62.57],[179.23,62.3],[177.36,62.52],[174.57,61.77],[173.68,61.65],[172.15,60.95],[170.7,60.34],[170.33,59.88],[168.9,60.57],[166.29,59.79],[165.84,60.16],[164.88,59.73],[163.54,59.87],[163.22,59.21],[162.02,58.24],[162.05,57.84],[163.19,57.62],[163.06,56.16],[162.13,56.12],[161.7,55.29],[162.12,54.86],[160.37,54.34],[160.02,53.2],[158.53,52.96],[158.23,51.94],[156.79,51.01],[156.42,51.7],[155.99,53.16],[155.43,55.38],[155.91,56.77],[156.76,57.36],[156.81,57.83],[158.36,58.06],[160.15,59.31],[161.87,60.34],[163.67,61.14],[164.47,62.55],[163.26,62.47],[162.66,61.64],[160.12,60.54],[159.3,61.77],[156.72,61.43],[154.22,59.76],[155.04,59.14],[152.81,58.88],[151.27,58.78],[151.34,59.5],[149.78,59.66],[148.54,59.16],[145.49,59.34],[142.2,59.04],[138.96,57.09],[135.13,54.73],[136.7,54.6],[137.19,53.98],[138.16,53.76],[138.8,54.25],[139.9,54.19],[141.35,53.09],[141.38,52.24],[140.6,51.24],[140.51,50.05],[140.06,48.45],[138.55,47],[138.22,46.31],[136.86,45.14],[135.52,43.99],[134.87,43.4],[133.54,42.81],[132.91,42.8],[132.28,43.28],[130.94,42.55],[130.78,42.22],[130.64,42.4],[130.63,42.9]],\n      [[105.08,78.31],[99.44,77.92],[101.26,79.23],[102.09,79.35],[102.84,79.28],[105.37,78.71],[105.08,78.31]],\n      [[51.14,80.55],[49.79,80.42],[48.89,80.34],[48.75,80.18],[47.59,80.01],[46.5,80.25],[47.07,80.56],[44.85,80.59],[46.8,80.77],[48.32,80.78],[48.52,80.51],[49.1,80.75],[50.04,80.92],[51.52,80.7],[51.14,80.55]],\n      [[99.94,78.88],[97.76,78.76],[94.97,79.04],[93.31,79.43],[92.55,80.14],[91.18,80.34],[93.78,81.02],[95.94,81.25],[97.88,80.75],[100.19,79.78],[99.94,78.88]],\n      [[30.42,-1.13],[30.82,-1.7],[30.76,-2.29]],\n      [[30.76,-2.29],[30.47,-2.41]],\n      [[29.58,-1.34],[29.82,-1.44],[30.42,-1.13]],\n      [[-17.06,21],[-17.02,21.41],[-16.98,21.89],[-16.58,22.16],[-16.26,22.68],[-16.33,23.02],[-15.99,23.73],[-15.43,24.36],[-15.09,24.52],[-14.83,25.1],[-14.8,25.64],[-14.44,26.25],[-13.78,26.62],[-13.41,27.2],[-13.26,27.44],[-13.1,27.6]],\n      [[42.78,16.35],[42.65,16.77],[42.35,17.08],[42.27,17.47],[41.75,17.83],[41.22,18.67],[40.94,19.49],[40.25,20.17],[39.8,20.34],[39.14,21.29],[39.02,21.99],[39.07,22.58],[38.49,23.69],[38.02,24.08],[37.48,24.29],[37.15,24.86],[37.21,25.08],[36.93,25.6],[36.64,25.83],[36.25,26.57],[35.64,27.38],[35.13,28.06],[34.63,28.06],[34.79,28.61],[34.83,28.96],[34.96,29.36]],\n      [[48.42,28.55],[48.81,27.69],[49.3,27.46],[49.47,27.11],[50.15,26.69],[50.21,26.28],[50.11,25.94],[50.24,25.61],[50.53,25.33],[50.66,25],[50.81,24.75]],\n      [[51.39,24.63],[51.58,24.25]],\n      [[52,19],[49.12,18.62],[48.18,18.17],[47.47,17.12],[47,16.95],[46.75,17.28],[46.37,17.23],[45.4,17.33],[45.22,17.43],[44.06,17.41],[43.79,17.32],[43.38,17.58],[43.12,17.09],[43.22,16.67],[42.78,16.35]],\n      [[33.96,9.46],[33.82,9.48],[33.84,9.98],[33.72,10.33],[33.21,10.72],[33.09,11.44],[33.21,12.18],[32.74,12.25],[32.67,12.02],[32.07,11.97],[32.31,11.68],[32.4,11.08],[31.85,10.53],[31.35,9.81],[30.84,9.71],[30,10.29],[29.62,10.08],[29.52,9.79],[29,9.6],[28.97,9.4],[27.97,9.4],[27.83,9.6],[27.11,9.64],[26.75,9.47],[26.48,9.55],[25.96,10.14],[25.79,10.41],[25.07,10.27],[24.79,9.81],[24.54,8.92],[24.19,8.73],[23.89,8.62]],\n      [[23.89,8.62],[23.81,8.67]],\n      [[22.86,11.14],[22.88,11.38],[22.51,11.68],[22.5,12.26],[22.29,12.65],[21.94,12.59],[22.04,12.96],[22.3,13.37],[22.18,13.79],[22.51,14.09],[22.3,14.33],[22.57,14.94],[23.02,15.68],[23.89,15.61],[23.84,19.58]],\n      [[36.87,22],[37.19,21.02],[36.97,20.84],[37.11,19.81],[37.48,18.61],[37.86,18.37],[38.41,18]],\n      [[36.85,16.96],[36.75,16.29],[36.32,14.82],[36.43,14.42]],\n      [[33.96,9.58],[33.96,9.46]],\n      [[33.96,9.46],[33.97,8.68]],\n      [[34.01,4.25],[33.39,3.79],[32.69,3.79],[31.88,3.56],[31.25,3.78],[30.83,3.51]],\n      [[30.83,3.51],[29.95,4.17],[29.72,4.6]],\n      [[24.57,8.23],[23.89,8.62]],\n      [[-16.71,13.59],[-17.13,14.37],[-17.63,14.73],[-17.19,14.92],[-16.7,15.62],[-16.46,16.14]],\n      [[-16.68,12.38],[-16.84,13.15]],\n      [[162.12,-10.48],[162.4,-10.83],[161.7,-10.82],[161.32,-10.2],[161.92,-10.45],[162.12,-10.48]],\n      [[160.85,-9.87],[160.46,-9.9],[159.85,-9.79],[159.64,-9.64],[159.7,-9.24],[160.36,-9.4],[160.69,-9.61],[160.85,-9.87]],\n      [[161.68,-9.6],[161.53,-9.78],[160.79,-8.92],[160.58,-8.32],[160.92,-8.32],[161.28,-9.12],[161.68,-9.6]],\n      [[159.88,-8.34],[159.92,-8.54],[159.13,-8.11],[158.59,-7.75],[158.21,-7.42],[158.36,-7.32],[158.82,-7.56],[159.64,-8.02],[159.88,-8.34]],\n      [[157.54,-7.35],[157.34,-7.4],[156.9,-7.18],[156.49,-6.77],[156.54,-6.6],[157.14,-7.02],[157.54,-7.35]],\n      [[-11.44,6.79],[-11.71,6.86],[-12.43,7.26],[-12.95,7.8],[-13.12,8.16],[-13.25,8.9]],\n      [[-87.79,13.38],[-87.9,13.15],[-88.48,13.16],[-88.84,13.26],[-89.26,13.46],[-89.81,13.52],[-90.1,13.74]],\n      [[47.79,8],[46.95,8],[43.68,9.18]],\n      [[43.68,9.18],[43.3,9.54],[42.93,10.02]],\n      [[43.15,11.46],[43.47,11.28],[43.67,10.86],[44.12,10.45],[44.61,10.44],[45.56,10.7],[46.65,10.82],[47.53,11.13],[48.02,11.19],[48.38,11.38],[48.95,11.41],[48.94,11.39],[48.95,11.41],[49.27,11.43],[49.73,11.58],[50.26,11.68],[50.73,12.02],[51.11,12.02],[51.13,11.75],[51.04,11.17],[51.05,10.64],[50.83,10.28],[50.55,9.2],[50.07,8.08],[49.45,6.8],[48.59,5.34],[47.74,4.22],[46.56,2.86],[45.56,2.05],[44.07,1.05],[43.14,0.29],[42.04,-0.92],[41.81,-1.45],[41.59,-1.68]],\n      [[19.37,44.86],[19.01,44.86],[19.39,45.24]],\n      [[19.07,45.52],[18.83,45.91],[19.6,46.17]],\n      [[-57.15,5.97],[-55.95,5.77],[-55.84,5.95],[-55.03,6.03],[-53.96,5.76]],\n      [[-54.4,4.21],[-54.01,3.62],[-54.18,3.19],[-54.27,2.73],[-54.52,2.31]],\n      [[22.56,49.09],[22.28,48.83],[22.09,48.42]],\n      [[13.72,45.5],[13.94,45.59]],\n      [[23.9,66.01],[22.18,65.72],[21.21,65.03],[21.37,64.41],[19.78,63.61],[17.85,62.75],[17.12,61.34],[17.83,60.64],[18.79,60.08],[17.87,58.95],[16.83,58.72],[16.45,57.04],[15.88,56.1],[14.67,56.2],[14.1,55.41],[12.94,55.36],[12.63,56.31],[11.79,57.44],[11.03,58.86]],\n      [[32.07,-26.73],[31.87,-27.18],[31.28,-27.29],[30.69,-26.74],[30.68,-26.4],[30.95,-26.02],[31.04,-25.73],[31.33,-25.66],[31.84,-25.84]],\n      [[36,34.64],[35.91,35.41],[36.15,35.82]],\n      [[36.15,35.82],[36.42,36.04],[36.69,36.26],[36.74,36.82],[37.07,36.62],[38.17,36.9],[38.7,36.71],[39.52,36.72],[40.67,37.09],[41.21,37.07],[42.35,37.23]],\n      [[13.54,14.37],[13.97,15.68],[15.25,16.63]],\n      [[15.49,20.73],[15.47,21.05],[15.1,21.31]],\n      [[14.96,11.56],[14.89,12.22],[14.5,12.86]],\n      [[1.87,6.14],[1.06,5.93]],\n      [[102.58,12.19],[101.69,12.65],[100.83,12.63],[100.98,13.41],[100.1,13.41],[100.02,12.31],[99.48,10.85],[99.15,9.96],[99.22,9.24],[99.87,9.21],[100.28,8.3],[100.46,7.43],[101.02,6.86],[101.62,6.74],[102.14,6.22]],\n      [[100.09,6.46],[99.69,6.85],[99.52,7.34],[98.99,7.91],[98.5,8.38],[98.34,7.79],[98.15,8.35],[98.26,8.97],[98.55,9.93]],\n      [[67.83,37.14],[68.39,38.16],[68.18,38.9],[67.44,39.14],[67.7,39.58],[68.54,39.53],[69.01,40.09],[69.33,40.73],[70.67,40.96],[70.46,40.5],[70.6,40.22],[71.01,40.24]],\n      [[53.92,37.2],[53.74,37.91],[53.88,38.95],[53.1,39.29],[53.36,39.98],[52.69,40.03],[52.92,40.88],[53.86,40.63],[54.74,40.95],[54.01,41.55],[53.72,42.12],[52.92,41.87],[52.81,41.14],[52.5,41.78]],\n      [[55.97,41.31],[57.1,41.32],[56.93,41.83],[57.79,42.17],[58.63,42.75],[59.98,42.22],[60.08,41.43],[60.47,41.22],[61.55,41.27],[61.88,41.08],[62.37,40.05],[63.52,39.36],[64.17,38.89],[65.22,38.4],[66.55,37.97],[66.52,37.36]],\n      [[124.97,-8.89],[125.09,-8.66],[125.95,-8.43],[126.64,-8.4],[126.96,-8.27],[127.34,-8.4],[126.97,-8.67],[125.93,-9.11],[125.09,-9.39]],\n      [[-61.68,10.76],[-61.1,10.89],[-60.89,10.86],[-60.93,10.11],[-61.77,10],[-61.95,10.09],[-61.66,10.37],[-61.68,10.76]],\n      [[8.42,36.95],[9.51,37.35],[10.21,37.23],[10.18,36.72],[11.03,37.09],[11.1,36.9],[10.6,36.41],[10.59,35.95],[10.94,35.7],[10.81,34.83],[10.15,34.33],[10.34,33.79],[10.86,33.77],[11.11,33.29],[11.49,33.14]],\n      [[44.23,37.97],[44.77,37.17]],\n      [[36.15,35.82],[35.78,36.27],[36.16,36.65],[35.55,36.57],[34.71,36.8],[34.03,36.22],[32.51,36.11],[31.7,36.64],[30.62,36.68],[30.39,36.26],[29.7,36.14],[28.73,36.68],[27.64,36.66],[27.05,37.65],[26.32,38.21],[26.8,38.99],[26.17,39.46],[27.28,40.42],[28.82,40.46],[29.24,41.22],[31.15,41.09],[32.35,41.74],[33.51,42.02],[35.17,42.04],[36.91,41.34],[38.35,40.95],[39.51,41.1],[40.37,41.01],[41.55,41.54]],\n      [[28,42.01],[28.12,41.62],[28.99,41.3],[28.81,41.05],[27.62,41],[27.19,40.69],[26.36,40.15],[26.04,40.62],[26.06,40.82]],\n      [[121.78,24.39],[121.18,22.79],[120.75,21.97],[120.22,22.81],[120.11,23.56],[120.69,24.54],[121.5,25.3],[121.95,25],[121.78,24.39]],\n      [[39.2,-4.68],[38.74,-5.91],[38.8,-6.48],[39.44,-6.84],[39.47,-7.1],[39.19,-7.7],[39.25,-8.01],[39.19,-8.49],[39.54,-9.11],[39.95,-10.1],[40.32,-10.32],[39.52,-10.9],[38.43,-11.29]],\n      [[38.43,-11.29],[37.83,-11.27],[37.47,-11.57],[36.78,-11.59]],\n      [[34.56,-11.52],[34.28,-10.16],[33.94,-9.69]],\n      [[33.94,-9.69],[33.74,-9.42],[32.76,-9.23]],\n      [[32.76,-9.23],[32.19,-8.93],[31.56,-8.76],[31.16,-8.59]],\n      [[31.16,-8.59],[30.74,-8.34],[30.2,-7.08],[29.62,-6.52],[29.42,-5.94]],\n      [[29.75,-4.45],[30.12,-4.09],[30.51,-3.57],[30.75,-3.36],[30.74,-3.03],[30.53,-2.81],[30.47,-2.41],[30.76,-2.29]],\n      [[30.42,-1.13],[30.77,-1.01],[31.87,-1.03],[33.9,-0.95]],\n      [[29.59,-0.59],[29.82,-0.21],[29.88,0.6]],\n      [[31.17,2.2],[30.77,2.34],[30.83,3.51]],\n      [[31.79,52.1],[32.16,52.06],[32.41,52.29]],\n      [[35.02,51.21],[35.38,50.77],[35.36,50.58]],\n      [[38.59,49.93],[40.07,49.6],[40.08,49.31]],\n      [[40.08,49.31],[39.67,48.78],[39.9,48.23],[39.74,47.9]],\n      [[39.74,47.9],[38.77,47.83],[38.26,47.55]],\n      [[38.22,47.1],[37.43,47.02],[36.76,46.7],[35.82,46.65],[34.96,46.27],[35.02,45.65],[35.51,45.41],[36.53,45.47],[36.33,45.11],[35.24,44.94],[33.88,44.36],[33.33,44.56],[33.55,45.03],[32.45,45.33],[32.63,45.52],[33.59,45.85],[33.3,46.08],[31.74,46.33],[31.68,46.71],[30.75,46.58],[30.38,46.03],[29.6,45.29]],\n      [[-53.37,-33.77],[-53.81,-34.4],[-54.94,-34.95],[-55.67,-34.75],[-56.22,-34.86],[-57.14,-34.43],[-57.82,-34.46],[-58.43,-33.91]],\n      [[-155.54,19.08],[-155.69,18.92],[-155.94,19.06],[-155.91,19.34],[-156.07,19.7],[-156.02,19.81],[-155.85,19.98],[-155.92,20.17],[-155.86,20.27],[-155.79,20.25],[-155.4,20.08],[-155.22,19.99],[-155.06,19.86],[-154.81,19.51],[-154.83,19.45],[-155.22,19.24],[-155.54,19.08]],\n      [[-156.08,20.64],[-156.41,20.57],[-156.59,20.78],[-156.7,20.86],[-156.71,20.93],[-156.61,21.01],[-156.26,20.92],[-156,20.76],[-156.08,20.64]],\n      [[-156.76,21.18],[-156.79,21.07],[-157.33,21.1],[-157.25,21.22],[-156.76,21.18]],\n      [[-157.65,21.32],[-157.71,21.26],[-157.78,21.28],[-158.13,21.31],[-158.25,21.54],[-158.29,21.58],[-158.03,21.72],[-157.94,21.65],[-157.65,21.32]],\n      [[-159.35,21.98],[-159.46,21.88],[-159.8,22.07],[-159.75,22.14],[-159.6,22.24],[-159.37,22.21],[-159.35,21.98]],\n      [[-67.14,45.14],[-66.96,44.81],[-68.03,44.33],[-69.06,43.98],[-70.12,43.68],[-70.65,43.09],[-70.81,42.87],[-70.82,42.34],[-70.49,41.81],[-70.08,41.78],[-70.18,42.15],[-69.88,41.92],[-69.97,41.64],[-70.64,41.48],[-71.12,41.49],[-71.86,41.32],[-72.29,41.27],[-72.88,41.22],[-73.71,40.93],[-72.24,41.12],[-71.94,40.93],[-73.34,40.63],[-73.98,40.63],[-73.95,40.75],[-74.26,40.47],[-73.96,40.43],[-74.18,39.71],[-74.91,38.94],[-74.98,39.2],[-75.2,39.25],[-75.53,39.5],[-75.32,38.96],[-75.07,38.78],[-75.06,38.4],[-75.38,38.02],[-75.94,37.22],[-76.03,37.26],[-75.72,37.94],[-76.23,38.32],[-76.35,39.15],[-76.54,38.72],[-76.33,38.08],[-76.99,38.24],[-76.3,37.92],[-76.26,36.97],[-75.97,36.9],[-75.87,36.55],[-75.73,35.55],[-76.36,34.81],[-77.4,34.51],[-78.05,33.93],[-78.55,33.86],[-79.06,33.49],[-79.2,33.16],[-80.3,32.51],[-80.86,32.03],[-81.34,31.44],[-81.49,30.73],[-81.31,30.04],[-80.98,29.18],[-80.54,28.47],[-80.53,28.04],[-80.06,26.88],[-80.09,26.21],[-80.13,25.82],[-80.38,25.21],[-80.68,25.08],[-81.17,25.2],[-81.33,25.64],[-81.71,25.87],[-82.24,26.73],[-82.71,27.5],[-82.86,27.89],[-82.65,28.55],[-82.93,29.1],[-83.71,29.94],[-84.1,30.09],[-85.11,29.64],[-85.29,29.69],[-85.77,30.15],[-86.4,30.4],[-87.53,30.27],[-88.42,30.38],[-89.18,30.32],[-89.59,30.16],[-89.41,29.89],[-89.43,29.49],[-89.22,29.29],[-89.41,29.16],[-89.78,29.31],[-90.15,29.12],[-90.88,29.15],[-91.63,29.68],[-92.5,29.55],[-93.23,29.78],[-93.85,29.71],[-94.69,29.48],[-95.6,28.74],[-96.59,28.31],[-97.14,27.83],[-97.37,27.38],[-97.38,26.69],[-97.33,26.21],[-97.14,25.87],[-97.53,25.84]],\n      [[-117.13,32.54],[-117.3,33.05],[-117.94,33.62],[-118.41,33.74],[-118.52,34.03],[-119.08,34.08],[-119.44,34.35],[-120.37,34.45],[-120.62,34.61],[-120.74,35.16],[-121.71,36.16],[-122.55,37.55],[-122.51,37.78],[-122.95,38.11],[-123.73,38.95],[-123.87,39.77],[-124.4,40.31],[-124.18,41.14],[-124.21,42],[-124.53,42.77],[-124.14,43.71],[-124.02,44.62],[-123.9,45.52],[-124.08,46.86],[-124.4,47.72],[-124.69,48.18],[-124.57,48.38],[-123.12,48.04],[-122.59,47.1],[-122.34,47.36],[-122.5,48.18],[-122.84,49]],\n      [[-153.01,57.12],[-154.01,56.73],[-154.52,56.99],[-154.67,57.46],[-153.76,57.82],[-153.23,57.97],[-152.56,57.9],[-152.14,57.59],[-153.01,57.12]],\n      [[-165.58,59.91],[-166.19,59.75],[-166.85,59.94],[-167.46,60.21],[-166.47,60.38],[-165.67,60.29],[-165.58,59.91]],\n      [[-171.73,63.78],[-171.11,63.59],[-170.49,63.69],[-169.68,63.43],[-168.69,63.3],[-168.77,63.19],[-169.53,62.98],[-170.29,63.19],[-170.67,63.38],[-171.55,63.32],[-171.79,63.41],[-171.73,63.78]],\n      [[-134.27,58.86],[-133.36,58.41],[-132.73,57.69]],\n      [[-130.01,55.92],[-129.98,55.28],[-130.54,54.8],[-131.09,55.18],[-131.97,55.5],[-132.25,56.37],[-133.54,57.18],[-134.08,58.12],[-135.04,58.19],[-136.63,58.21],[-137.8,58.5],[-139.87,59.54],[-140.83,59.73],[-142.57,60.08],[-143.96,60],[-145.93,60.46],[-147.11,60.88],[-148.22,60.67],[-148.02,59.98],[-148.57,59.91],[-149.73,59.71],[-150.61,59.37],[-151.72,59.16],[-151.86,59.74],[-151.41,60.73],[-150.35,61.03],[-150.62,61.28],[-151.9,60.73],[-152.58,60.06],[-154.02,59.35],[-153.29,58.86],[-154.23,58.15],[-155.31,57.73],[-156.31,57.42],[-156.56,56.98],[-158.12,56.46],[-158.43,55.99],[-159.6,55.57],[-160.29,55.64],[-161.22,55.36],[-162.24,55.02],[-163.07,54.69],[-164.79,54.4],[-164.94,54.57],[-163.85,55.04],[-162.87,55.35],[-161.8,55.89],[-160.56,56.01],[-160.07,56.42],[-158.68,57.02],[-158.46,57.22],[-157.72,57.57],[-157.55,58.33],[-157.04,58.92],[-158.19,58.62],[-158.52,58.79],[-159.06,58.42],[-159.71,58.93],[-159.98,58.57],[-160.36,59.07],[-161.36,58.67],[-161.97,58.67],[-162.05,59.27],[-161.87,59.63],[-162.52,59.99],[-163.82,59.8],[-164.66,60.27],[-165.35,60.51],[-165.35,61.07],[-166.12,61.5],[-165.73,62.07],[-164.92,62.63],[-164.56,63.15],[-163.75,63.22],[-163.07,63.06],[-162.26,63.54],[-161.53,63.46],[-160.77,63.77],[-160.96,64.22],[-161.52,64.4],[-160.78,64.79],[-161.39,64.78],[-162.45,64.56],[-162.76,64.34],[-163.55,64.56],[-164.96,64.45],[-166.43,64.69],[-166.85,65.09],[-168.11,65.67],[-166.71,66.09],[-164.47,66.58],[-163.65,66.58],[-163.79,66.08],[-161.68,66.12],[-162.49,66.74],[-163.72,67.12],[-164.43,67.62],[-165.39,68.04],[-166.76,68.36],[-166.2,68.88],[-164.43,68.92],[-163.17,69.37],[-162.93,69.86],[-161.91,70.33],[-160.93,70.45],[-159.04,70.89],[-158.12,70.82],[-156.58,71.36],[-155.07,71.15],[-154.34,70.7],[-153.9,70.89],[-152.21,70.83],[-152.27,70.6],[-150.74,70.43],[-149.72,70.53],[-147.61,70.21],[-145.69,70.12],[-144.92,69.99],[-143.59,70.15],[-142.07,69.85],[-140.99,69.71],[-140.99,69.71],[-140.99,66],[-141,60.31],[-140.01,60.28],[-139.04,60],[-138.34,59.56]],\n      [[-71.33,11.78],[-71.36,11.54],[-71.95,11.42],[-71.62,10.97],[-71.63,10.45],[-72.07,9.87],[-71.7,9.07],[-71.26,9.14],[-71.04,9.86],[-71.35,10.21],[-71.4,10.97],[-70.16,11.38],[-70.29,11.85],[-69.94,12.16],[-69.58,11.46],[-68.88,11.44],[-68.23,10.89],[-68.19,10.55],[-67.3,10.55],[-66.23,10.65],[-65.66,10.2],[-64.89,10.08],[-64.33,10.39],[-64.32,10.64],[-63.08,10.7],[-61.88,10.72],[-62.73,10.42],[-62.39,9.95],[-61.59,9.87],[-60.83,9.38],[-60.67,8.58],[-60.15,8.6],[-59.76,8.37]],\n      [[108.05,21.55],[106.72,20.7],[105.88,19.75],[105.66,19.06],[106.43,18],[107.36,16.7],[108.27,16.08],[108.88,15.28],[109.34,13.43],[109.2,11.67],[108.37,11.01],[107.22,10.36],[106.41,9.53],[105.16,8.6],[104.8,9.24],[105.08,9.92],[104.33,10.49]],\n      [[167.84,-16.47],[167.52,-16.6],[167.18,-16.16],[167.22,-15.89],[167.84,-16.47]],\n      [[167.11,-14.93],[167.27,-15.74],[167,-15.61],[166.79,-15.67],[166.65,-15.39],[166.63,-14.63],[167.11,-14.93]],\n      [[34.27,31.22],[34.49,31.61]],\n      [[53.11,16.65],[52.39,16.38],[52.19,15.94],[52.17,15.6],[51.17,15.18],[49.57,14.71],[48.68,14],[48.24,13.95],[47.94,14.01],[47.35,13.59],[46.72,13.4],[45.88,13.35],[45.63,13.29],[45.41,13.03],[45.14,12.95],[44.99,12.7],[44.49,12.72],[44.18,12.59],[43.48,12.64],[43.22,13.22],[43.25,13.77],[43.09,14.06],[42.89,14.8],[42.6,15.21],[42.81,15.26],[42.7,15.72],[42.82,15.91],[42.78,16.35]],\n      [[29.43,-22.09],[29.84,-22.1],[30.32,-22.27],[30.66,-22.15],[31.19,-22.25]],\n      [[32.83,-26.74],[32.58,-27.47],[32.46,-28.3],[32.2,-28.75],[31.52,-29.26],[31.33,-29.4],[30.9,-29.91],[30.62,-30.42],[30.06,-31.14],[28.93,-32.17],[28.22,-32.77],[27.46,-33.23],[26.42,-33.61],[25.91,-33.67],[25.78,-33.94],[25.17,-33.8],[24.68,-33.99],[23.59,-33.79],[22.99,-33.92],[22.57,-33.86],[21.54,-34.26],[20.69,-34.42],[20.07,-34.8],[19.62,-34.82],[19.19,-34.46],[18.86,-34.44],[18.42,-34],[18.38,-34.14],[18.24,-33.87],[18.25,-33.28],[17.93,-32.61],[18.25,-32.43],[18.22,-31.66],[17.57,-30.73],[17.06,-29.88],[17.06,-29.88],[16.34,-28.58]],\n      [[30.27,-15.51],[29.52,-15.64],[28.95,-16.04],[28.83,-16.39],[28.47,-16.47],[27.6,-17.29],[27.04,-17.94],[26.71,-17.96],[26.38,-17.85],[25.26,-17.74]],\n      [[30.74,-8.34],[31.16,-8.59]],\n      [[-24.32,14.85],[-24.39,14.81],[-24.46,14.83],[-24.54,14.92],[-24.5,14.97],[-24.39,15.02],[-24.36,15],[-24.32,14.92],[-24.32,14.85]],\n      [[-23.2,15.13],[-23.24,15.13],[-23.28,15.18],[-23.28,15.25],[-23.24,15.32],[-23.17,15.32],[-23.13,15.26],[-23.13,15.16],[-23.2,15.13]],\n      [[-23.46,15],[-23.53,14.9],[-23.67,14.92],[-23.82,15.07],[-23.82,15.16],[-23.78,15.23],[-23.78,15.32],[-23.71,15.32],[-23.71,15.26],[-23.56,15.13],[-23.46,15]],\n      [[-22.95,16.24],[-22.84,16.2],[-22.77,16.22],[-22.7,16.17],[-22.7,16.1],[-22.74,16.03],[-22.84,15.98],[-22.92,15.98],[-22.99,16.03],[-22.92,16.13],[-22.95,16.24]],\n      [[-24.1,16.62],[-24.07,16.57],[-24.1,16.55],[-24.25,16.58],[-24.28,16.57],[-24.36,16.48],[-24.43,16.6],[-24.43,16.65],[-24.39,16.67],[-24.28,16.64],[-24.1,16.62]],\n      [[-22.92,16.65],[-22.95,16.6],[-22.99,16.67],[-23.02,16.79],[-22.95,16.83],[-22.92,16.83],[-22.92,16.65]],\n      [[-24.9,16.81],[-25.04,16.79],[-25.11,16.83],[-25.08,16.86],[-24.97,16.91],[-24.9,16.84],[-24.9,16.81]],\n      [[-25.18,16.93],[-25.29,16.91],[-25.33,16.93],[-25.33,17],[-25.36,17.05],[-25.36,17.09],[-25.15,17.19],[-25.04,17.17],[-25,17.09],[-25.04,17.04],[-25.18,16.93]],\n      [[43.76,-12.32],[43.65,-12.36],[43.62,-12.29],[43.62,-12.25],[43.69,-12.27],[43.76,-12.32]],\n      [[44.45,-12.1],[44.52,-12.24],[44.52,-12.34],[44.48,-12.36],[44.45,-12.34],[44.37,-12.25],[44.19,-12.18],[44.27,-12.17],[44.3,-12.18],[44.37,-12.17],[44.37,-12.13],[44.41,-12.1],[44.45,-12.1]],\n      [[43.44,-11.91],[43.44,-11.92],[43.29,-11.85],[43.22,-11.77],[43.22,-11.44],[43.26,-11.4],[43.33,-11.39],[43.37,-11.42],[43.37,-11.63],[43.44,-11.77],[43.47,-11.87],[43.44,-11.91]],\n      [[57.62,-20.5],[57.52,-20.52],[57.37,-20.52],[57.3,-20.47],[57.34,-20.41],[57.34,-20.34],[57.37,-20.24],[57.41,-20.19],[57.48,-20.15],[57.48,-20.07],[57.55,-20.01],[57.62,-20],[57.73,-20.1],[57.77,-20.22],[57.77,-20.34],[57.7,-20.38],[57.7,-20.45],[57.62,-20.5]],\n      [[55.54,-4.7],[55.54,-4.79],[55.46,-4.77],[55.46,-4.7],[55.39,-4.67],[55.36,-4.61],[55.43,-4.56],[55.54,-4.7]],\n      [[50.6,25.87],[50.57,25.8],[50.53,25.82],[50.46,25.96],[50.46,26.05],[50.42,26.18],[50.46,26.22],[50.57,26.24],[50.53,26.18],[50.6,26.12],[50.6,25.87]],\n      [[73.39,3.22],[73.36,3.23],[73.36,3.27],[73.39,3.28],[73.43,3.27],[73.43,3.23],[73.39,3.22]],\n      [[73.5,4.15],[73.47,4.15],[73.47,4.21],[73.5,4.22],[73.5,4.15]],\n      [[169.63,5.82],[169.59,5.85],[169.63,5.94],[169.67,5.92],[169.63,5.82]],\n      [[171.07,7.12],[171.22,7.07],[171.36,7.1],[171.36,7.09],[171.25,7.05],[171.22,7.05],[171.07,7.1],[171.07,7.12]],\n      [[162.97,5.32],[162.97,5.26],[162.9,5.3],[162.93,5.33],[162.97,5.32]],\n      [[158.29,6.81],[158.25,6.77],[158.18,6.79],[158.15,6.88],[158.11,6.9],[158.11,6.93],[158.18,6.97],[158.29,6.95],[158.33,6.88],[158.29,6.84],[158.29,6.81]],\n      [[151.63,7.33],[151.59,7.35],[151.59,7.38],[151.63,7.38],[151.63,7.33]],\n      [[151.88,7.42],[151.85,7.42],[151.85,7.45],[151.88,7.45],[151.88,7.42]],\n      [[138.13,9.5],[138.13,9.57],[138.16,9.59],[138.2,9.54],[138.16,9.5],[138.13,9.5]],\n      [[166.89,-0.52],[166.93,-0.5],[166.97,-0.52],[166.97,-0.55],[166.93,-0.55],[166.89,-0.55],[166.89,-0.53],[166.89,-0.52]],\n      [[134.56,7.36],[134.53,7.35],[134.49,7.43],[134.49,7.52],[134.53,7.59],[134.6,7.61],[134.6,7.49],[134.56,7.43],[134.56,7.36]],\n      [[-171.47,-14.06],[-171.76,-14.06],[-171.9,-14.01],[-171.94,-14.01],[-172.04,-13.92],[-172.08,-13.87],[-172.01,-13.83],[-171.86,-13.82],[-171.61,-13.89],[-171.58,-13.96],[-171.54,-13.96],[-171.47,-13.99],[-171.47,-14.06]],\n      [[-172.37,-13.47],[-172.22,-13.57],[-172.19,-13.69],[-172.26,-13.82],[-172.33,-13.78],[-172.51,-13.82],[-172.55,-13.8],[-172.76,-13.59],[-172.8,-13.52],[-172.69,-13.54],[-172.51,-13.49],[-172.37,-13.47]],\n      [[103.56,1.19],[103.67,1.42],[103.72,1.46],[103.86,1.47],[104,1.42],[104.08,1.43],[104.08,1.36],[104.13,1.27]],\n      [[-174.92,-21.32],[-174.92,-21.46],[-175,-21.39],[-175,-21.35],[-174.92,-21.32]],\n      [[-175.18,-21.18],[-175.14,-21.14],[-175.1,-21.18],[-175.18,-21.26],[-175.21,-21.23],[-175.36,-21.16],[-175.32,-21.13],[-175.25,-21.13],[-175.18,-21.18]],\n      [[-173.99,-18.64],[-174.02,-18.71],[-174.1,-18.64],[-174.02,-18.57],[-173.95,-18.59],[-173.95,-18.63],[-173.99,-18.64]],\n      [[178.31,-8.03],[178.38,-7.93],[178.45,-7.97],[178.38,-8.09],[178.31,-8.03]],\n      [[178.67,-7.46],[178.7,-7.48],[178.67,-7.5],[178.67,-7.46]],\n      [[179.14,-8.42],[179.17,-8.43],[179.21,-8.52],[179.1,-8.59],[179.1,-8.63],[179.06,-8.64],[179.06,-8.59],[179.03,-8.52],[179.1,-8.43],[179.14,-8.42]],\n      [[179.86,-9.35],[179.86,-9.37],[179.89,-9.39],[179.86,-9.44],[179.86,-9.42],[179.82,-9.37],[179.82,-9.35],[179.86,-9.35]],\n      [[176.98,-12.46],[177.16,-12.48],[177.16,-12.53],[177.01,-12.51],[176.98,-12.46]],\n      [[177.16,-7.25],[177.12,-7.18],[177.16,-7.2],[177.16,-7.25]],\n      [[176.08,-5.64],[176.11,-5.66],[176.15,-5.71],[176.11,-5.67],[176.04,-5.64],[176.08,-5.64]],\n      [[-61.73,17.04],[-61.76,16.98],[-61.87,17],[-61.91,17.05],[-61.91,17.09],[-61.84,17.16],[-61.69,17.09],[-61.69,17.05],[-61.73,17.04]],\n      [[-61.76,17.57],[-61.76,17.54],[-61.87,17.59],[-61.87,17.71],[-61.76,17.66],[-61.76,17.57]],\n      [[-59.5,13.08],[-59.53,13.06],[-59.64,13.09],[-59.68,13.15],[-59.68,13.3],[-59.6,13.3],[-59.46,13.15],[-59.5,13.08]],\n      [[-61.3,15.25],[-61.4,15.21],[-61.44,15.39],[-61.51,15.52],[-61.48,15.59],[-61.48,15.63],[-61.33,15.58],[-61.3,15.52],[-61.26,15.37],[-61.3,15.25]],\n      [[-61.73,12],[-61.76,12.04],[-61.76,12.1],[-61.69,12.23],[-61.62,12.21],[-61.66,12.05],[-61.73,12]],\n      [[-62.56,17.1],[-62.59,17.09],[-62.63,17.12],[-62.63,17.19],[-62.59,17.19],[-62.56,17.16],[-62.56,17.1]],\n      [[-62.66,17.23],[-62.74,17.28],[-62.81,17.3],[-62.84,17.33],[-62.84,17.38],[-62.81,17.4],[-62.74,17.35],[-62.7,17.28],[-62.66,17.26],[-62.66,17.23]],\n      [[-60.9,13.81],[-60.97,13.7],[-61.08,13.77],[-61.08,13.91],[-61.01,14],[-60.97,14.07],[-60.94,14.08],[-60.9,14],[-60.9,13.81]],\n      [[-61.19,13.15],[-61.22,13.13],[-61.3,13.2],[-61.3,13.29],[-61.22,13.32],[-61.19,13.35],[-61.15,13.35],[-61.15,13.2],[-61.19,13.15]],\n      [[1.42,42.59],[1.49,42.63],[1.57,42.63],[1.71,42.57],[1.71,42.52],[1.67,42.49],[1.46,42.42],[1.42,42.44],[1.42,42.49],[1.39,42.52],[1.42,42.59]],\n      [[9.61,47.06],[9.56,47.05]],\n      [[9.49,47.18],[9.53,47.27],[9.58,47.21]],\n      [[14.56,35.84],[14.53,35.8],[14.42,35.82],[14.35,35.86],[14.35,35.98],[14.53,35.87],[14.56,35.84]],\n      [[7.43,43.74],[7.36,43.72],[7.36,43.75],[7.43,43.74]],\n      [[12.37,43.93],[12.44,43.98],[12.51,43.95],[12.48,43.89],[12.4,43.89],[12.37,43.93]],\n      [[-157.42,2.02],[-157.39,1.99],[-157.32,1.97],[-157.31,1.97],[-157.31,1.96],[-157.32,1.95],[-157.32,1.95],[-157.34,1.94],[-157.34,1.93],[-157.34,1.91],[-157.35,1.86],[-157.33,1.84],[-157.29,1.82],[-157.25,1.8],[-157.24,1.78],[-157.22,1.77],[-157.21,1.77],[-157.19,1.76],[-157.18,1.75],[-157.17,1.73],[-157.18,1.72],[-157.19,1.72],[-157.2,1.72],[-157.21,1.71],[-157.22,1.71],[-157.24,1.71],[-157.25,1.71],[-157.25,1.72],[-157.26,1.73],[-157.27,1.73],[-157.28,1.75],[-157.29,1.75],[-157.31,1.75],[-157.41,1.78],[-157.45,1.8],[-157.48,1.83],[-157.51,1.85],[-157.53,1.86],[-157.54,1.86],[-157.55,1.86],[-157.57,1.86],[-157.58,1.88],[-157.58,1.91],[-157.57,1.91],[-157.54,1.93],[-157.53,1.93],[-157.52,1.93],[-157.52,1.92],[-157.52,1.92],[-157.53,1.92],[-157.55,1.9],[-157.55,1.88],[-157.54,1.87],[-157.53,1.86],[-157.51,1.87],[-157.5,1.87],[-157.5,1.86],[-157.49,1.85],[-157.48,1.85],[-157.45,1.85],[-157.43,1.84],[-157.43,1.84],[-157.44,1.85],[-157.45,1.86],[-157.46,1.86],[-157.47,1.87],[-157.48,1.88],[-157.46,1.88],[-157.45,1.88],[-157.45,1.88],[-157.45,1.9],[-157.44,1.89],[-157.43,1.88],[-157.43,1.87],[-157.42,1.86],[-157.41,1.86],[-157.41,1.87],[-157.41,1.88],[-157.42,1.9],[-157.43,1.91],[-157.42,1.92],[-157.42,1.93],[-157.41,1.92],[-157.4,1.92],[-157.41,1.94],[-157.39,1.94],[-157.39,1.93],[-157.4,1.92],[-157.39,1.91],[-157.38,1.9],[-157.38,1.91],[-157.37,1.91],[-157.36,1.92],[-157.36,1.92],[-157.35,1.93],[-157.35,1.94],[-157.36,1.95],[-157.36,1.95],[-157.38,1.96],[-157.41,1.97],[-157.45,1.99],[-157.45,2],[-157.46,2],[-157.47,2.01],[-157.48,2.02],[-157.48,2.01],[-157.49,2],[-157.5,2],[-157.51,2.01],[-157.51,2.02],[-157.5,2.03],[-157.47,2.03],[-157.42,2.02]],\n      [[6.66,0.42],[6.77,0.28],[6.66,0.12],[6.53,0.02],[6.46,0.21],[6.49,0.31],[6.66,0.42]],\n      [[-46.76,82.63],[-43.41,83.23],[-39.9,83.18],[-38.62,83.55],[-35.09,83.65],[-27.1,83.52],[-20.85,82.73],[-22.69,82.34],[-26.52,82.3],[-31.9,82.2],[-31.4,82.02],[-27.86,82.13],[-24.84,81.79],[-22.9,82.09],[-22.07,81.73],[-23.17,81.15],[-20.62,81.52],[-15.77,81.91],[-12.77,81.72],[-12.21,81.29],[-16.29,80.58],[-16.85,80.35],[-20.05,80.18],[-17.73,80.13],[-18.9,79.4],[-19.7,78.75],[-19.67,77.64],[-18.47,76.99],[-20.04,76.94],[-21.68,76.63],[-19.83,76.1],[-19.6,75.25],[-20.67,75.16],[-19.37,74.3],[-21.59,74.22],[-20.43,73.82],[-20.76,73.46],[-22.17,73.31],[-23.57,73.31],[-22.31,72.63],[-22.3,72.18],[-24.28,72.6],[-24.79,72.33],[-23.44,72.08],[-22.13,71.47],[-21.75,70.66],[-23.54,70.47],[-24.31,70.86],[-25.54,71.43],[-25.2,70.75],[-26.36,70.23],[-23.73,70.18],[-22.35,70.13],[-25.03,69.26],[-27.75,68.47],[-30.67,68.13],[-31.78,68.12],[-32.81,67.74],[-34.2,66.68],[-36.35,65.98],[-37.04,65.94],[-38.38,65.69],[-39.81,65.46],[-40.67,64.84],[-40.68,64.14],[-41.19,63.48],[-42.82,62.68],[-42.42,61.9],[-42.87,61.07],[-43.38,60.1],[-44.79,60.04],[-46.26,60.85],[-48.26,60.86],[-49.23,61.41],[-49.9,62.38],[-51.63,63.63],[-52.14,64.28],[-52.28,65.18],[-53.66,66.1],[-53.3,66.84],[-53.97,67.19],[-52.98,68.36],[-51.48,68.73],[-51.08,69.15],[-50.87,69.93],[-52.01,69.57],[-52.56,69.43],[-53.46,69.28],[-54.68,69.61],[-54.75,70.29],[-54.36,70.82],[-53.43,70.84],[-51.39,70.57],[-53.11,71.2],[-54,71.55],[-55,71.41],[-55.83,71.65],[-54.72,72.59],[-55.33,72.96],[-56.12,73.65],[-57.32,74.71],[-58.6,75.1],[-58.59,75.52],[-61.27,76.1],[-63.39,76.18],[-66.06,76.13],[-68.5,76.06],[-69.66,76.38],[-71.4,77.01],[-68.78,77.32],[-66.76,77.38],[-71.04,77.64],[-73.3,78.04],[-73.16,78.43],[-69.37,78.91],[-65.71,79.39],[-65.32,79.76],[-68.02,80.12],[-67.15,80.52],[-63.69,81.21],[-62.23,81.32],[-62.65,81.77],[-60.28,82.03],[-57.21,82.19],[-54.13,82.2],[-53.04,81.89],[-50.39,82.44],[-48,82.06],[-46.6,81.99],[-44.52,81.66],[-46.9,82.2],[-46.76,82.63]],\n      [[68.94,-48.62],[69.58,-48.94],[70.53,-49.06],[70.56,-49.25],[70.28,-49.71],[68.75,-49.77],[68.72,-49.24],[68.87,-48.83],[68.94,-48.62]],\n    ],\n    bbox: [-180, -85.61, 180, 83.65],\n}\n","import { Quadtree } from \"d3-quadtree\"\nimport {\n    EntityName,\n    getAggregates,\n    getContinents,\n    getIncomeGroups,\n    getCountryNamesForRegion,\n    getRelativeMouse,\n    lazy,\n} from \"@ourworldindata/utils\"\nimport { GlobeRegionName, MapRegionName } from \"@ourworldindata/types\"\nimport {\n    GEO_FEATURES_CLASSNAME,\n    MAP_HOVER_TARGET_RANGE,\n    RenderFeature,\n    MapRenderFeature,\n    RenderFeatureType,\n} from \"./MapChartConstants\"\nimport { MapTopology } from \"./MapTopology.js\"\nimport { MapSelectionArray } from \"../selection/MapSelectionArray.js\"\nimport * as R from \"remeda\"\n\nexport function detectNearbyFeature<Feature extends RenderFeature>({\n    quadtree,\n    element,\n    event,\n    distance = MAP_HOVER_TARGET_RANGE,\n}: {\n    quadtree: Quadtree<Feature>\n    element: SVGGElement\n    event: PointerEvent\n    distance?: number\n}): Feature | undefined {\n    const groupElement = element.querySelector(`.${GEO_FEATURES_CLASSNAME}`)\n    if (!groupElement) {\n        console.error(`.${GEO_FEATURES_CLASSNAME} doesn't exist`)\n        return\n    }\n\n    const { x, y } = getRelativeMouse(groupElement, event)\n    return quadtree.find(x, y, distance)\n}\n\nexport const sortFeaturesByInteractionStateAndSize = <\n    Feature extends RenderFeature,\n>(\n    features: Feature[],\n    {\n        isHovered,\n        isSelected,\n    }: {\n        isHovered: (featureId: string) => boolean\n        isSelected: (featureId: string) => boolean\n    }\n): Feature[] => {\n    const preferA = 1 as const\n    const preferB = -1 as const\n\n    return R.sort(features, (a, b) => {\n        if (isHovered(a.id) && !isHovered(b.id)) return preferA\n        if (!isHovered(a.id) && isHovered(b.id)) return preferB\n\n        if (isSelected(a.id) && !isSelected(b.id)) return preferA\n        if (!isSelected(a.id) && isSelected(b.id)) return preferB\n\n        return a.geoBounds.area < b.geoBounds.area ? preferA : preferB\n    })\n}\n\nexport const calculateDistance = (\n    p1: [number, number],\n    p2: [number, number]\n): number => {\n    return Math.hypot(p2[0] - p1[0], p2[1] - p1[1])\n}\n\n/**\n * Check if a country is visible on the rendered 3d globe from the current\n * viewing angle, without taking into account the zoom level.\n *\n * More specifically, this function checks if the feature's _centroid_ is\n * visible on the globe, i.e. parts of a country could still be visible\n * even if the centroid is not.\n */\nexport function isPointPlacedOnVisibleHemisphere(\n    point: [number, number],\n    rotation: [number, number],\n    threshold = 0 // 1 = at the exact center, 0 = anywhere on the visible hemisphere\n): boolean {\n    const toRadians = (degree: number): number => (degree * Math.PI) / 180\n\n    // convert centroid degrees to radians\n    const lambda = toRadians(point[0])\n    const phi = toRadians(point[1])\n\n    // get current rotation in radians\n    const rotationLambda = toRadians(rotation[0])\n    const rotationPhi = toRadians(rotation[1])\n\n    // calculate the cosine of the angular distance between the feature's\n    // center point and the center points of the current view\n    const cosDelta =\n        Math.sin(phi) * Math.sin(rotationPhi) +\n        Math.cos(phi) *\n            Math.cos(rotationPhi) *\n            Math.cos(lambda - rotationLambda)\n\n    return cosDelta > threshold\n}\n\nexport function getForegroundFeatures<Feature extends RenderFeature>(\n    features: Feature[],\n    selectionArray: MapSelectionArray\n): Feature[] {\n    // if no regions are selected, then all countries are in the foreground\n    if (!selectionArray.hasRegions) return features\n\n    // all countries within the selected regions are in the foreground\n    const countrySet = selectionArray.countryNamesForSelectedRegionsSet\n    return features.filter((feature) => countrySet.has(feature.id))\n}\n\n// A map of the form:\n// - Africa: [Algeria, Angola, ...]\n// - North America: [Canada, United States, ...]\nconst countriesByRegionMap = lazy(\n    () =>\n        new Map(\n            [...getContinents(), ...getAggregates(), ...getIncomeGroups()].map(\n                (region) => [\n                    region.name,\n                    new Set(getCountryNamesForRegion(region)),\n                ]\n            )\n        )\n)\n\nexport const getCountriesByRegion = (\n    regionName: string\n): Set<string> | undefined => countriesByRegionMap().get(regionName)\n\nlet _isOnTheMapCache: Set<string>\nexport const isOnTheMap = (entityName: EntityName): boolean => {\n    // Cache the result\n    if (!_isOnTheMapCache)\n        _isOnTheMapCache = new Set(\n            MapTopology.objects.world.geometries.map((region: any) => region.id)\n        )\n    return _isOnTheMapCache.has(entityName)\n}\n\nexport function isMapRenderFeature(\n    feature: RenderFeature\n): feature is MapRenderFeature {\n    return feature.type === RenderFeatureType.Map\n}\n\nexport function isValidMapRegionName(\n    candidate: string\n): candidate is MapRegionName {\n    return Object.values(MapRegionName).includes(candidate as any)\n}\n\nexport function isValidGlobeRegionName(\n    candidate: string\n): candidate is GlobeRegionName {\n    return isValidMapRegionName(candidate) && candidate !== MapRegionName.World\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport {\n    checkIsAggregate,\n    EntityName,\n    Aggregate,\n    Continent,\n    IncomeGroup,\n    getAggregatesInRegionSet,\n    getContinents,\n    getIncomeGroups,\n    Region,\n    RegionSet,\n    type AggregateWithPublisher,\n    type OwidContinentName,\n    type OwidIncomeGroupName,\n    type SuffixedRegionName,\n} from \"@ourworldindata/utils\"\nimport {\n    CategoricalMapPalette17,\n    MapContinentColors,\n} from \"../color/CustomSchemes.js\"\nimport { parseLabel } from \"../core/RegionGroups.js\"\nimport { getCountriesByRegion } from \"../mapCharts/MapHelpers.js\"\n\nexport type TooltipKey = RegionSet | \"incomeGroups\" | \"continents\"\n\nexport interface TooltipRegion {\n    name: EntityName\n    displayName: string\n    color: string\n    members: string[]\n}\n\nconst continentColorsMap = MapContinentColors as Record<EntityName, string>\nconst categoricalMapColors = CategoricalMapPalette17\n\nconst descriptions: Record<TooltipKey, string> = {\n    wb: \"The **World Bank (WB)** defines [seven world regions](https://ourworldindata.org/world-region-map-definitions#world-bank-wb-continents):\",\n    who: \"The **World Health Organization (WHO)** defines [six world regions](https://ourworldindata.org/world-region-map-definitions#world-health-organization-who):\",\n    unsdg: \"When reporting data on the Sustainable Development Goals, the **United Nations (UN)** defines [eight world regions](https://ourworldindata.org/world-region-map-definitions#united-nations-sustainable-development-goals-un-sdg):\",\n    pew: \"The **Pew Research Center (Pew)** defines [six world regions](https://ourworldindata.org/world-region-map-definitions#pew-research-center-pew):\",\n    un: \"The **United Nations Statistical Division (UNSD)** establishes and maintains a geographic classification based on the [M49 coding system](https://unstats.un.org/unsd/methodology/m49). At the highest level, the M49 classification categorizes countries into [six regions](https://ourworldindata.org/world-region-map-definitions#united-nations-un):\",\n    un_m49_1:\n        \"The **United Nations Statistical Division (UNSD)** establishes and maintains a geographic classification based on the [M49 coding system](https://unstats.un.org/unsd/methodology/m49). At the highest level, the M49 classification categorizes countries into five regions:\",\n    un_m49_2:\n        \"The **United Nations Statistical Division (UNSD)** establishes and maintains a geographic classification based on the [M49 coding system](https://unstats.un.org/unsd/methodology/m49). At level 2, the M49 classification categorizes countries into 17 regions:\",\n    un_m49_3:\n        \"The **United Nations Statistical Division (UNSD)** establishes and maintains a geographic classification based on the [M49 coding system](https://unstats.un.org/unsd/methodology/m49). At level 3, the M49 classification provides more granular subdivisions, including separate regions for parts of Africa and the Americas:\",\n    incomeGroups:\n        \"The **World Bank** defines [four income groups](https://ourworldindata.org/world-bank-income-groups-explained):\",\n    continents:\n        \"Our team defines [six world regions](https://ourworldindata.org/world-region-map-definitions#our-world-in-data):\",\n    iea: \"The **International Energy Agency (IEA)** defines seven world regions:\",\n    ei: \"The **Energy Institute (EI)** defines [seven world regions](https://ourworldindata.org/world-region-map-definitions#energy-institute-ei):\",\n    ember: \"**Ember** groups countries into [seven world regions](https://ourworldindata.org/world-region-map-definitions#ember):\",\n    maddison:\n        \"The **Maddison Project Database** groups countries into [eight world regions](https://ourworldindata.org/world-region-map-definitions#maddison-project-database-maddison):\",\n    wid: \"The **World Inequality Database (WID)** groups countries into [nine world regions](https://ourworldindata.org/world-region-map-definitions#world-inequality-database-wid):\",\n    ilo_1: \"The **International Labour Organization (ILO)** defines [five broad world regions](https://ourworldindata.org/world-region-map-definitions#international-labour-organization-ilo):\",\n    ilo_2: \"The **International Labour Organization (ILO)** divides the world into [eleven subregions](https://ourworldindata.org/world-region-map-definitions#international-labour-organization-ilo):\",\n    fao_1: \"The **Food and Agriculture Organization of the United Nations (FAO)** reports data for [world regions](https://ourworldindata.org/world-region-map-definitions#food-and-agriculture-organization-fao) at several levels of detail. This map shows its broadest level, the continents:\",\n    fao_2: \"The **Food and Agriculture Organization of the United Nations (FAO)** reports data for [world regions](https://ourworldindata.org/world-region-map-definitions#food-and-agriculture-organization-fao) at several levels of detail. This map shows its subregions:\",\n    fao_sdg:\n        \"The **Food and Agriculture Organization of the United Nations (FAO)** groups countries into [world regions](https://ourworldindata.org/world-region-map-definitions#food-and-agriculture-organization-fao) for its Sustainable Development Goals reporting:\",\n    ihme_gbd_1:\n        \"The **Institute for Health Metrics and Evaluation (IHME)** groups countries into seven super-regions for its Global Burden of Disease (GBD) study:\",\n    ihme_gbd_2:\n        \"The **Institute for Health Metrics and Evaluation (IHME)** groups countries into 21 regions for its Global Burden of Disease (GBD) study:\",\n    ucdp: \"The **Uppsala Conflict Data Program (UCDP)** groups countries into [five world regions](https://ourworldindata.org/world-region-map-definitions#uppsala-conflict-data-program-ucdp):\",\n}\n\n// Geographic display order: left-to-right on the map\nexport const customRegionDisplayOrder: Record<\n    TooltipKey,\n    (SuffixedRegionName | OwidContinentName | OwidIncomeGroupName)[]\n> = {\n    continents: [\n        \"North America\",\n        \"South America\",\n        \"Africa\",\n        \"Europe\",\n        \"Asia\",\n        \"Oceania\",\n    ],\n    wb: [\n        \"North America (WB)\",\n        \"Latin America and Caribbean (WB)\",\n        \"Sub-Saharan Africa (WB)\",\n        \"Middle East, North Africa, Afghanistan and Pakistan (WB)\",\n        \"Europe and Central Asia (WB)\",\n        \"South Asia (WB)\",\n        \"East Asia and Pacific (WB)\",\n    ],\n    un: [\n        \"Northern America (UN)\",\n        \"Latin America and the Caribbean (UN)\",\n        \"Africa (UN)\",\n        \"Europe (UN)\",\n        \"Asia (UN)\",\n        \"Oceania (UN)\",\n    ],\n    un_m49_1: [\n        \"Americas (UN M49)\",\n        \"Africa (UN M49)\",\n        \"Europe (UN M49)\",\n        \"Asia (UN M49)\",\n        \"Oceania (UN M49)\",\n    ],\n    un_m49_2: [\n        \"Northern America (UN M49)\",\n        \"Latin America and the Caribbean (UN M49)\",\n        \"Northern Africa (UN M49)\",\n        \"Sub-Saharan Africa (UN M49)\",\n        \"Southern Europe (UN M49)\",\n        \"Western Europe (UN M49)\",\n        \"Northern Europe (UN M49)\",\n        \"Eastern Europe (UN M49)\",\n        \"Western Asia (UN M49)\",\n        \"Central Asia (UN M49)\",\n        \"Southern Asia (UN M49)\",\n        \"Eastern Asia (UN M49)\",\n        \"South-eastern Asia (UN M49)\",\n        \"Australia and New Zealand (UN M49)\",\n        \"Melanesia (UN M49)\",\n        \"Micronesia (UN M49)\",\n        \"Polynesia (UN M49)\",\n    ],\n    un_m49_3: [\n        \"Caribbean (UN M49)\",\n        \"Central America (UN M49)\",\n        \"South America (UN M49)\",\n        \"Eastern Africa (UN M49)\",\n        \"Middle Africa (UN M49)\",\n        \"Southern Africa (UN M49)\",\n        \"Western Africa (UN M49)\",\n    ],\n    who: [\n        \"Americas (WHO)\",\n        \"Africa (WHO)\",\n        \"Eastern Mediterranean (WHO)\",\n        \"Europe (WHO)\",\n        \"South-East Asia (WHO)\",\n        \"Western Pacific (WHO)\",\n    ],\n    unsdg: [\n        \"Europe and Northern America (UN SDG)\",\n        \"Latin America and the Caribbean (UN SDG)\",\n        \"Sub-Saharan Africa (UN SDG)\",\n        \"Northern Africa and Western Asia (UN SDG)\",\n        \"Central and Southern Asia (UN SDG)\",\n        \"Eastern and South-Eastern Asia (UN SDG)\",\n        \"Australia and New Zealand (UN SDG)\",\n        \"Oceania (UN SDG)\",\n    ],\n    pew: [\n        \"North America (Pew)\",\n        \"Latin America-Caribbean (Pew)\",\n        \"Sub-Saharan Africa (Pew)\",\n        \"Middle East-North Africa (Pew)\",\n        \"Europe (Pew)\",\n        \"Asia-Pacific (Pew)\",\n    ],\n    incomeGroups: [\n        \"Low-income countries\",\n        \"Lower-middle-income countries\",\n        \"Upper-middle-income countries\",\n        \"High-income countries\",\n    ],\n    ei: [\n        \"North America (EI)\",\n        \"South and Central America (EI)\",\n        \"Africa (EI)\",\n        \"Middle East (EI)\",\n        \"Europe (EI)\",\n        \"CIS (EI)\",\n        \"Asia Pacific (EI)\",\n    ],\n    iea: [\n        \"North America (IEA)\",\n        \"Central and South America (IEA)\",\n        \"Africa (IEA)\",\n        \"Middle East (IEA)\",\n        \"Europe (IEA)\",\n        \"Eurasia (IEA)\",\n        \"Asia Pacific (IEA)\",\n    ],\n    ember: [\n        \"North America (Ember)\",\n        \"Latin America and Caribbean (Ember)\",\n        \"Africa (Ember)\",\n        \"Middle East (Ember)\",\n        \"Europe (Ember)\",\n        \"Asia (Ember)\",\n        \"Oceania (Ember)\",\n    ],\n    maddison: [\n        \"Western offshoots (Maddison)\",\n        \"Latin America (Maddison)\",\n        \"Sub Saharan Africa (Maddison)\",\n        \"Middle East and North Africa (Maddison)\",\n        \"Western Europe (Maddison)\",\n        \"Eastern Europe (Maddison)\",\n        \"South and South East Asia (Maddison)\",\n        \"East Asia (Maddison)\",\n    ],\n    wid: [\n        \"North America (WID)\",\n        \"Latin America (WID)\",\n        \"Sub-Saharan Africa (WID)\",\n        \"Middle East and North Africa (WID)\",\n        \"Europe (WID)\",\n        \"Russia and Central Asia (WID)\",\n        \"South and South-East Asia (WID)\",\n        \"East Asia (WID)\",\n        \"Oceania (WID)\",\n    ],\n    ilo_1: [\n        \"Americas (ILO)\",\n        \"Africa (ILO)\",\n        \"Arab States (ILO)\",\n        \"Europe and Central Asia (ILO)\",\n        \"Asia and the Pacific (ILO)\",\n    ],\n    ilo_2: [\n        \"Northern America (ILO)\",\n        \"Latin America and the Caribbean (ILO)\",\n        \"Northern Africa (ILO)\",\n        \"Sub-Saharan Africa (ILO)\",\n        \"Arab States (ILO)\",\n        \"Northern, Southern and Western Europe (ILO)\",\n        \"Eastern Europe (ILO)\",\n        \"Central and Western Asia (ILO)\",\n        \"Southern Asia (ILO)\",\n        \"Eastern Asia (ILO)\",\n        \"South-Eastern Asia and the Pacific (ILO)\",\n    ],\n    fao_1: [\n        \"Americas (FAO)\",\n        \"Africa (FAO)\",\n        \"Europe (FAO)\",\n        \"Asia (FAO)\",\n        \"Oceania (FAO)\",\n    ],\n    fao_2: [\n        \"Northern America (FAO)\",\n        \"Caribbean (FAO)\",\n        \"Central America (FAO)\",\n        \"South America (FAO)\",\n        \"Northern Africa (FAO)\",\n        \"Eastern Africa (FAO)\",\n        \"Middle Africa (FAO)\",\n        \"Southern Africa (FAO)\",\n        \"Western Africa (FAO)\",\n        \"Southern Europe (FAO)\",\n        \"Western Europe (FAO)\",\n        \"Northern Europe (FAO)\",\n        \"Eastern Europe (FAO)\",\n        \"Western Asia (FAO)\",\n        \"Central Asia (FAO)\",\n        \"Southern Asia (FAO)\",\n        \"Eastern Asia (FAO)\",\n        \"South-eastern Asia (FAO)\",\n        \"Australia and New Zealand (FAO)\",\n        \"Melanesia (FAO)\",\n        \"Micronesia (FAO)\",\n        \"Polynesia (FAO)\",\n    ],\n    fao_sdg: [\n        \"Northern America and Europe (FAO)\",\n        \"Latin America and the Caribbean (FAO)\",\n        \"Sub-Saharan Africa (FAO)\",\n        \"Western Asia and Northern Africa (FAO)\",\n        \"Central Asia and Southern Asia (FAO)\",\n        \"Eastern Asia and South-eastern Asia (FAO)\",\n        \"Australia and New Zealand (FAO)\",\n        \"Oceania excluding Australia and New Zealand (FAO)\",\n    ],\n    ihme_gbd_1: [\n        \"High-income (IHME GBD)\",\n        \"Latin America and Caribbean (IHME GBD)\",\n        \"Sub-Saharan Africa (IHME GBD)\",\n        \"North Africa and Middle East (IHME GBD)\",\n        \"Central Europe, Eastern Europe, and Central Asia (IHME GBD)\",\n        \"South Asia (IHME GBD)\",\n        \"Southeast Asia, East Asia, and Oceania (IHME GBD)\",\n    ],\n    ihme_gbd_2: [\n        \"High-income North America (IHME GBD)\",\n        \"Caribbean (IHME GBD)\",\n        \"Central Latin America (IHME GBD)\",\n        \"Andean Latin America (IHME GBD)\",\n        \"Tropical Latin America (IHME GBD)\",\n        \"Southern Latin America (IHME GBD)\",\n        \"Western Sub-Saharan Africa (IHME GBD)\",\n        \"Central Sub-Saharan Africa (IHME GBD)\",\n        \"Eastern Sub-Saharan Africa (IHME GBD)\",\n        \"Southern Sub-Saharan Africa (IHME GBD)\",\n        \"North Africa and Middle East (IHME GBD)\",\n        \"Western Europe (IHME GBD)\",\n        \"Central Europe (IHME GBD)\",\n        \"Eastern Europe (IHME GBD)\",\n        \"Central Asia (IHME GBD)\",\n        \"South Asia (IHME GBD)\",\n        \"East Asia (IHME GBD)\",\n        \"Southeast Asia (IHME GBD)\",\n        \"High-income Asia Pacific (IHME GBD)\",\n        \"Australasia (IHME GBD)\",\n        \"Oceania (IHME GBD)\",\n    ],\n    ucdp: [\n        \"Americas (UCDP)\",\n        \"Africa (UCDP)\",\n        \"Middle East (UCDP)\",\n        \"Europe (UCDP)\",\n        \"Asia and Oceania (UCDP)\",\n    ],\n}\n\nexport function hasTooltipData(\n    region: Region\n): region is AggregateWithPublisher {\n    return (\n        checkIsAggregate(region) &&\n        region.definedBy !== undefined &&\n        region.publisher !== undefined\n    )\n}\n\nexport function getDescriptionForKey(key: TooltipKey): string {\n    return descriptions[key]\n}\n\nfunction _getRegionsForKey(key: TooltipKey): readonly TooltipRegion[] {\n    const regions =\n        key === \"incomeGroups\"\n            ? getIncomeGroups()\n            : key === \"continents\"\n              ? getContinents()\n              : getAggregatesInRegionSet(key)\n\n    const displayOrder: readonly string[] = customRegionDisplayOrder[key]\n    const sortFn = (region: Aggregate | IncomeGroup | Continent): number => {\n        const index = displayOrder.indexOf(region.name)\n        return index >= 0 ? index : Infinity\n    }\n\n    return R.pipe(\n        regions,\n        R.sortBy(sortFn),\n        R.map((region, index) => ({\n            name: region.name,\n            displayName: parseLabel(region.name).name, // Strip suffix\n            color:\n                continentColorsMap[region.name] ??\n                categoricalMapColors[index % categoricalMapColors.length],\n            members: [...(getCountriesByRegion(region.name) ?? [])],\n        }))\n    )\n}\n\nexport const getRegionsForKey = _.memoize(_getRegionsForKey)\n\n/** Build a map from country name to its color and region */\nexport function buildCountryMap(\n    regions: readonly TooltipRegion[]\n): Map<EntityName, { region: EntityName; color: string }> {\n    const map = new Map<string, { color: string; region: string }>()\n    for (const region of regions) {\n        for (const country of region.members) {\n            map.set(country, { color: region.color, region: region.name })\n        }\n    }\n    return map\n}\n","import * as _ from \"lodash-es\"\nimport { match } from \"ts-pattern\"\nimport { computed, makeObservable } from \"mobx\"\nimport {\n    Bounds,\n    excludeUndefined,\n    RequiredBy,\n    getRegionByName,\n    getRegionByShortName,\n    EntityName,\n    checkIsIncomeGroup,\n    checkIsOwidContinent,\n    Point,\n} from \"@ourworldindata/utils\"\nimport { canAppendTextToLastLine, TextWrap } from \"@ourworldindata/components\"\nimport { ParsedLabel, parseLabel } from \"../core/RegionGroups.js\"\nimport { FontSettings } from \"../core/GrapherConstants.js\"\nimport { hasTooltipData, TooltipKey } from \"./RegionTooltipData.js\"\n\nexport interface SeriesLabelStateOptions {\n    text: string\n    maxWidth: number\n    fontSize: number\n    fontWeight?: number\n    lineHeight?: number\n    textAnchor?: \"start\" | \"end\"\n    formattedValue?: string\n    placeFormattedValueInNewLine?: boolean\n    showRegionTooltip?: boolean\n}\n\nexport type TextRole = \"name\" | \"value\" | \"regionPublisherSuffix\" | \"regionIcon\"\n\nexport interface TextSpan {\n    role: TextRole\n    text: string\n    fontWeight: number\n}\n\nexport type SpanLine = TextSpan[]\n\ninterface TextFragment extends TextSpan {\n    type: \"text\"\n    width: number\n}\n\ninterface IconFragment {\n    type: \"icon\"\n    tooltipKey: TooltipKey // e.g. \"un\"\n    regionName: EntityName // e.g. \"Africa (UN)\"\n    iconSize: number\n    width: number\n}\n\ninterface SpaceFragment {\n    type: \"space\"\n    width: number\n}\n\ntype ContentFragment = TextFragment | IconFragment | SpaceFragment\n\ntype ContentLine = ContentFragment[]\n\nexport type PositionedTextFragment = TextFragment & Point\nexport type PositionedIconFragment = IconFragment & Point\n\nexport type PositionedFragment = PositionedTextFragment | PositionedIconFragment\n\n/**\n * Computes layout and positioning for a series label typically rendered\n * in the chart area\n *\n * A series label can consist of up to three parts:\n * 1. Name: The main label text (e.g. \"United States\")\n * 2. Suffix: An optional parenthetical suffix parsed from the name (e.g. \"(WHO)\")\n * 3. Value: An optional formatted value to display alongside the name (e.g. \"45.2%\")\n */\nexport class SeriesLabelState {\n    private readonly initialOptions: SeriesLabelStateOptions\n\n    private readonly defaultOptions = {\n        fontWeight: 400,\n        lineHeight: 1.1,\n        placeFormattedValueInNewLine: false,\n        showRegionTooltip: false,\n        textAnchor: \"start\",\n    } as const satisfies Partial<SeriesLabelStateOptions>\n\n    constructor(options: SeriesLabelStateOptions) {\n        this.initialOptions = options\n        makeObservable(this)\n    }\n\n    static fromTextWrap(\n        textWrap: TextWrap,\n        options?: Pick<\n            SeriesLabelStateOptions,\n            \"showRegionTooltip\" | \"textAnchor\"\n        >\n    ): SeriesLabelState {\n        return new SeriesLabelState({\n            text: textWrap.text,\n            maxWidth: textWrap.maxWidth,\n            fontSize: textWrap.fontSize,\n            fontWeight: textWrap?.fontWeight,\n            lineHeight: textWrap?.lineHeight,\n            showRegionTooltip: options?.showRegionTooltip,\n            textAnchor: options?.textAnchor,\n        })\n    }\n\n    getPositionForSvgRendering(x: number, y: number): [number, number] {\n        return this.nameWrap.getPositionForSvgRendering(x, y)\n    }\n\n    @computed private get options(): RequiredBy<\n        SeriesLabelStateOptions,\n        keyof typeof this.defaultOptions\n    > {\n        return { ...this.defaultOptions, ...this.initialOptions }\n    }\n\n    @computed get text(): string {\n        return this.options.text\n    }\n\n    @computed get textAnchor(): \"start\" | \"end\" {\n        return this.options.textAnchor\n    }\n\n    @computed private get parsedText(): ParsedLabel {\n        return parseLabel(this.options.text)\n    }\n\n    @computed private get name(): string {\n        // Only split the suffix from the main text if it names a region publisher\n        return this.parsedText.publisherKey\n            ? this.parsedText.name\n            : this.parsedText.raw\n    }\n\n    @computed private get nameWrap(): TextWrap {\n        return new TextWrap({\n            text: this.name,\n            maxWidth: this.options.maxWidth,\n            ...this.fontSettings,\n        })\n    }\n\n    @computed get fontSettings(): FontSettings {\n        return {\n            fontSize: this.options.fontSize,\n            lineHeight: this.options.lineHeight,\n            fontWeight: this.options.fontWeight,\n        }\n    }\n\n    @computed get singleLineHeight(): number {\n        return this.nameWrap.singleLineHeight\n    }\n\n    @computed private get iconSize(): number {\n        return Math.round(this.options.fontSize * 0.9)\n    }\n\n    @computed private get spaceWidth(): number {\n        return Bounds.forText(\" \", this.fontSettings).width\n    }\n\n    @computed private get spaceFragment(): SpaceFragment {\n        return { type: \"space\", width: this.spaceWidth }\n    }\n\n    @computed private get regionIconInfo():\n        | { tooltipKey: TooltipKey; regionName: EntityName }\n        | undefined {\n        if (!this.options.showRegionTooltip) return\n\n        const region =\n            getRegionByName(this.options.text) ??\n            getRegionByShortName(this.options.text)\n        if (!region) return\n\n        // Check if the region is an income group\n        if (checkIsIncomeGroup(region))\n            return { tooltipKey: \"incomeGroups\", regionName: region.name }\n\n        // Check if the region is an OWID continent\n        if (checkIsOwidContinent(region))\n            return { tooltipKey: \"continents\", regionName: region.name }\n\n        // Check if it's a published region set with tooltip data\n        if (this.parsedText.publisherKey && hasTooltipData(region)) {\n            return {\n                tooltipKey: region.definedBy,\n                regionName: region.name,\n            }\n        }\n\n        return\n    }\n\n    /**\n     * Fragments for the parenthetical region publisher suffix (e.g. \"(WHO)\")\n     *\n     * Some region sets have an associated tooltip, in which case we render\n     * an info icon inside the parentheses. If there is no info icon, the\n     * suffix is rendered in a muted style to visually differentiate it from\n     * the main name.\n     */\n    @computed private get suffixFragments(): ContentFragment[] | undefined {\n        if (!this.parsedText.publisherKey) return undefined\n\n        const fontSettings = { ...this.fontSettings, fontWeight: 400 }\n\n        if (this.regionIconInfo && !this.regionIconFragments) {\n            const textBeforeIcon = `(${this.parsedText.suffix}`\n            const textAfterIcon = `)`\n\n            const textBeforeWidth = Bounds.forText(\n                textBeforeIcon,\n                fontSettings\n            ).width\n            const textAfterWidth = Bounds.forText(\n                textAfterIcon,\n                fontSettings\n            ).width\n\n            return [\n                {\n                    type: \"text\",\n                    role: \"regionPublisherSuffix\",\n                    text: textBeforeIcon,\n                    width: textBeforeWidth,\n                    fontWeight: fontSettings.fontWeight,\n                },\n                this.spaceFragment,\n                {\n                    type: \"icon\",\n                    width: this.iconSize,\n                    iconSize: this.iconSize,\n                    ...this.regionIconInfo,\n                },\n                {\n                    type: \"text\",\n                    role: \"regionPublisherSuffix\",\n                    text: textAfterIcon,\n                    width: textAfterWidth,\n                    fontWeight: fontSettings.fontWeight,\n                },\n            ]\n        } else {\n            const text = `(${this.parsedText.suffix})`\n            const width = Bounds.forText(text, fontSettings).width\n\n            return [\n                {\n                    type: \"text\",\n                    role: \"regionPublisherSuffix\",\n                    text,\n                    width,\n                    fontWeight: fontSettings.fontWeight,\n                },\n            ]\n        }\n    }\n\n    @computed private get valueFragments(): ContentFragment[] | undefined {\n        if (!this.options.formattedValue) return undefined\n\n        const text = this.options.formattedValue\n        const fontSettings = { ...this.fontSettings, fontWeight: 400 }\n        const width = Bounds.forText(text, fontSettings).width\n\n        return [\n            {\n                type: \"text\",\n                role: \"value\",\n                text,\n                width,\n                fontWeight: fontSettings.fontWeight,\n            },\n        ]\n    }\n\n    @computed private get regionIconFragments(): ContentFragment[] | undefined {\n        if (!this.regionIconInfo || this.parsedText.publisherKey)\n            return undefined\n\n        return [\n            {\n                type: \"icon\",\n                width: this.iconSize,\n                iconSize: this.iconSize,\n                ...this.regionIconInfo,\n            },\n        ]\n    }\n\n    /**\n     * Which fragment group (if any) shares the last line with the name.\n     *\n     * Only one of suffix or value can be placed on the same line as the name.\n     * Suffix has priority if present; value is only considered when there's\n     * no suffix and it's not forced to a new line.\n     */\n    @computed private get roleOnNameLine():\n        | Exclude<TextRole, \"name\">\n        | undefined {\n        // If there's a region icon (income group or continent),\n        // it must be placed on the same line as the name\n        if (this.regionIconFragments) return \"regionIcon\"\n\n        // Suffix has priority\n        if (this.suffixFragments) {\n            const suffixText = `(${this.parsedText.suffix})`\n            const reservedWidth = this.regionIconInfo\n                ? this.iconSize + this.spaceWidth\n                : 0\n            const fits = canAppendTextToLastLine({\n                existingTextWrap: this.nameWrap,\n                textToAppend: suffixText,\n                reservedWidth,\n            })\n            return fits ? \"regionPublisherSuffix\" : undefined\n        }\n\n        // Only consider value if not forced to new line\n        if (this.valueFragments && !this.options.placeFormattedValueInNewLine) {\n            const fits = canAppendTextToLastLine({\n                existingTextWrap: this.nameWrap,\n                textToAppend: this.options.formattedValue!,\n            })\n            return fits ? \"value\" : undefined\n        }\n\n        return undefined\n    }\n\n    @computed private get fragmentGroups(): {\n        role: TextRole\n        fragments: ContentFragment[]\n    }[] {\n        return excludeUndefined([\n            this.suffixFragments\n                ? {\n                      role: \"regionPublisherSuffix\",\n                      fragments: this.suffixFragments,\n                  }\n                : undefined,\n            this.regionIconFragments\n                ? {\n                      role: \"regionIcon\",\n                      fragments: this.regionIconFragments,\n                  }\n                : undefined,\n            this.valueFragments\n                ? { role: \"value\", fragments: this.valueFragments }\n                : undefined,\n        ])\n    }\n\n    /** Lines of content where each line consists of one or more fragments */\n    @computed private get contentLines(): ContentLine[] {\n        const {\n            nameWrap,\n            spaceFragment,\n            fragmentGroups,\n            roleOnNameLine,\n            fontSettings: { fontWeight },\n        } = this\n\n        // Map each line of the name to a fragment\n        const lines: ContentLine[] = nameWrap.lines.map((line) => [\n            {\n                type: \"text\",\n                role: \"name\",\n                text: line.text,\n                width: line.width,\n                fontWeight: nameWrap.fontWeight ?? fontWeight,\n            },\n        ])\n\n        // Reference to the last line of the name\n        const lastNameLine = lines[lines.length - 1]\n\n        // Append suffix and value fragments to the last line or add as new lines\n        for (const { role, fragments } of fragmentGroups) {\n            if (roleOnNameLine === role)\n                lastNameLine.push(spaceFragment, ...fragments)\n            else lines.push(fragments)\n        }\n\n        return lines\n    }\n\n    @computed get hasIcon(): boolean {\n        return this.contentLines.some((line) =>\n            line.some((f) => f.type === \"icon\")\n        )\n    }\n\n    @computed get width(): number {\n        const lineWidths = this.contentLines.map((line) =>\n            _.sumBy(line, (fragment) => fragment.width)\n        )\n        return lineWidths.length > 0 ? Math.max(...lineWidths) : 0\n    }\n\n    @computed get height(): number {\n        return this.contentLines.length * this.singleLineHeight\n    }\n\n    /** Content lines transformed for native SVG text rendering */\n    @computed get spanLines(): SpanLine[] {\n        return this.contentLines.map((line) => extractTextSpans(line))\n    }\n\n    /** List of positioned fragments ready for rendering */\n    @computed get positionedFragments(): PositionedFragment[] {\n        return this.contentLines.flatMap((fragments, lineIndex) =>\n            positionLineFragments({\n                fragments: fragments,\n                y: lineIndex * this.singleLineHeight,\n                textAnchor: this.options.textAnchor,\n            })\n        )\n    }\n}\n\n/** Convert line fragments to text spans, merging spaces into adjacent text */\nfunction extractTextSpans(line: ContentLine): TextSpan[] {\n    const fragments = line.filter(\n        (f) => f.type === \"text\" || f.type === \"space\"\n    )\n\n    return fragments\n        .map((fragment, i) => {\n            if (fragment.type === \"space\") return undefined\n            const followsSpace = fragments[i - 1]?.type === \"space\"\n            return {\n                text: followsSpace ? \" \" + fragment.text : fragment.text,\n                fontWeight: fragment.fontWeight,\n                role: fragment.role,\n            }\n        })\n        .filter((span) => span !== undefined)\n}\n\n/** Position fragments in a line based on their width and the textAnchor */\nfunction positionLineFragments({\n    fragments,\n    y,\n    textAnchor,\n}: {\n    fragments: ContentLine\n    y: number\n    textAnchor: SeriesLabelStateOptions[\"textAnchor\"]\n}): PositionedFragment[] {\n    const positionedFragments: PositionedFragment[] = []\n\n    // Calculate total line width\n    const totalWidth = _.sumBy(fragments, (f) => f.width)\n\n    // Starting x position based on textAnchor\n    let x = textAnchor === \"end\" ? -totalWidth : 0\n\n    for (const fragment of fragments) {\n        match(fragment)\n            .with({ type: \"text\" }, (fragment) => {\n                positionedFragments.push({ ...fragment, x, y })\n                x += fragment.width\n            })\n            .with({ type: \"icon\" }, (fragment) => {\n                const iconYOffset = -fragment.iconSize + 1.5 // Small visual correction\n                positionedFragments.push({ ...fragment, x, y: y + iconYOffset })\n                x += fragment.width\n            })\n            .with({ type: \"space\" }, (fragment) => {\n                // Account for space width but don't render anything\n                x += fragment.width\n            })\n            .exhaustive()\n    }\n\n    return positionedFragments\n}\n","import * as _ from \"lodash-es\"\nimport { TextWrap, shortenWithEllipsis } from \"@ourworldindata/components\"\nimport { EntityName } from \"@ourworldindata/types\"\nimport { FontSettings } from \"../core/GrapherConstants.js\"\nimport { SeriesLabelState } from \"../seriesLabel/SeriesLabelState.js\"\n\n/** Vertical padding between the label and the annotation underneath it */\nconst ANNOTATION_PADDING = 2\n\n/** Centers the label/annotation block on y */\nexport function computeCenteredLabelYPositions({\n    y,\n    label,\n    annotation,\n}: {\n    y: number\n    label: { height: number }\n    annotation?: { height: number }\n}): { labelY: number; annotationY: number | undefined } {\n    const annotationHeight = annotation\n        ? ANNOTATION_PADDING + annotation.height\n        : 0\n    const totalHeight = label.height + annotationHeight\n\n    // Center the combined label + annotation block on y\n    const labelY = y - totalHeight / 2\n    const annotationY = annotation\n        ? labelY + label.height + ANNOTATION_PADDING\n        : undefined\n\n    return { labelY, annotationY }\n}\n\n/**\n * Creates a TextWrap for row-series labels that fits within the row height.\n *\n * Strategy:\n * 1. Calculate the maximum number of lines that can fit in the row height\n * 2. Use binary search to find the minimum width that produces at most maxLines\n * 3. If the label doesn't fit even at maxWidth, reduce font size until it fits\n * 4. If the label still doesn't fit, truncate the label with ellipsis\n */\nfunction wrapLabelForHeight({\n    label,\n    availableHeight,\n    minWidth,\n    maxWidth,\n    fontSettings,\n}: {\n    label: string\n    availableHeight: number\n    minWidth: number\n    maxWidth: number\n    fontSettings: { fontSize: number; fontWeight: number; lineHeight: number }\n}): { textWrap: TextWrap; needsTruncation?: boolean } {\n    const originalFontSize = fontSettings.fontSize\n\n    // Drop new line characters before processing\n    const cleanedLabel = label.replace(/\\n/g, \" \").trim()\n\n    // Helper to calculate max lines that can fit in available height\n    const computeMaxLineCount = (\n        availableHeight: number,\n        fontSettings: FontSettings\n    ): number => {\n        const lineHeight = fontSettings.fontSize * fontSettings.lineHeight\n        return Math.max(1, Math.floor(availableHeight / lineHeight))\n    }\n\n    // Helper to create TextWrap with given width and font size\n    const makeTextWrap = (maxWidth: number, fontSize: number): TextWrap =>\n        new TextWrap({\n            text: cleanedLabel,\n            maxWidth,\n            ...fontSettings,\n            fontSize, // Overrides the original font size\n        })\n\n    // Calculate max lines that can fit in the row height\n    const maxLines = computeMaxLineCount(availableHeight, fontSettings)\n\n    // Find the minimum width that produces at most maxLines\n    const optimalWidth = findMinWidthForMaxLines({\n        label: cleanedLabel,\n        maxLines,\n        minWidth,\n        maxWidth,\n        fontSettings,\n    })\n\n    // Check if it fits at the best width with original font size\n    const labelWrap = makeTextWrap(optimalWidth, originalFontSize)\n    if (labelWrap.lines.length <= maxLines) return { textWrap: labelWrap }\n\n    // If not, reduce the font size until it fits (or the minimum font size is reached)\n    const minFontSize = Math.max(Math.floor(originalFontSize * 0.8), 6)\n    const optimalFontSize = findMaxFontSizeForHeight({\n        label: cleanedLabel,\n        maxWidth,\n        availableHeight,\n        maxFontSize: originalFontSize,\n        minFontSize,\n        fontSettings,\n    })\n\n    // Check if the label fits or if it needs truncation\n    const reducedFontWrap = makeTextWrap(maxWidth, optimalFontSize)\n    const optimalFontSettings = { ...fontSettings, fontSize: optimalFontSize }\n    const maxLinesAtReducedSize = computeMaxLineCount(\n        availableHeight,\n        optimalFontSettings\n    )\n    const needsTruncation = reducedFontWrap.lines.length > maxLinesAtReducedSize\n\n    return { textWrap: reducedFontWrap, needsTruncation }\n}\n\n/** Binary search to find the minimum width that produces at most maxLines */\nfunction findMinWidthForMaxLines({\n    label,\n    maxLines,\n    minWidth,\n    maxWidth,\n    fontSettings,\n}: {\n    label: string\n    maxLines: number\n    minWidth: number\n    maxWidth: number\n    fontSettings: FontSettings\n}): number {\n    let low = minWidth\n    let high = maxWidth\n    let bestWidth = maxWidth\n    const step = 1\n\n    while (low <= high) {\n        const mid = Math.floor((low + high) / 2)\n        const testWrap = new TextWrap({\n            text: label,\n            maxWidth: mid,\n            ...fontSettings,\n        })\n\n        if (testWrap.lines.length <= maxLines) {\n            // This width works, try smaller\n            bestWidth = mid\n            high = mid - step\n        } else {\n            // Too many lines, need larger width\n            low = mid + step\n        }\n    }\n\n    return bestWidth\n}\n\n/** Decrease font size until the label fits within availableHeight at maxWidth */\nfunction findMaxFontSizeForHeight({\n    label,\n    maxWidth,\n    availableHeight,\n    maxFontSize,\n    minFontSize,\n    fontSettings,\n}: {\n    label: string\n    maxWidth: number\n    availableHeight: number\n    maxFontSize: number\n    minFontSize: number\n    fontSettings: FontSettings\n}): number {\n    const step = 0.5\n\n    let fontSize = maxFontSize\n\n    while (fontSize >= minFontSize) {\n        const lineHeight = fontSize * fontSettings.lineHeight\n        const maxLines = Math.max(1, Math.floor(availableHeight / lineHeight))\n\n        const testWrap = new TextWrap({\n            text: label,\n            maxWidth,\n            ...fontSettings,\n            fontSize,\n        })\n\n        if (testWrap.lines.length <= maxLines) return fontSize\n\n        fontSize -= step\n    }\n\n    return minFontSize\n}\n\n/** Processes series to create sized labels that fit within available height */\nexport function enrichSeriesWithLabels<\n    TSeries extends {\n        entityName: EntityName\n        shortEntityName?: string\n        annotation?: string\n    },\n>({\n    series,\n    availableHeightPerSeries,\n    minLabelWidth,\n    maxLabelWidth,\n    fontSettings,\n    annotationFontSettings = {\n        fontSize: 0.9 * fontSettings.fontSize,\n        fontWeight: 300,\n        lineHeight: 1,\n    },\n    showRegionTooltip = false,\n}: {\n    series: readonly TSeries[]\n    availableHeightPerSeries: number\n    minLabelWidth: number\n    maxLabelWidth: number\n    fontSettings: FontSettings\n    annotationFontSettings?: FontSettings\n    showRegionTooltip?: boolean\n}): (TSeries & { label: SeriesLabelState; annotationTextWrap?: TextWrap })[] {\n    // Wrap labels and annotations to fit within the available space\n    const wrappedLabels = series.map((series) => {\n        const label = series.shortEntityName ?? series.entityName\n\n        // First, wrap the label without considering annotations\n        const {\n            textWrap: labelWrap,\n            needsTruncation: labelWrapNeedsTruncation,\n        } = wrapLabelForHeight({\n            label,\n            availableHeight: availableHeightPerSeries,\n            minWidth: minLabelWidth,\n            maxWidth: maxLabelWidth,\n            fontSettings,\n        })\n\n        // If there's no annotation, we're done\n        if (!series.annotation) return { labelWrap, labelWrapNeedsTruncation }\n\n        // Calculate remaining height for annotation (4px extra padding to avoid crowding)\n        const remainingHeightForAnnotation =\n            availableHeightPerSeries - labelWrap.height - ANNOTATION_PADDING - 4\n\n        // If there's not enough space for even one line of annotation, skip it\n        const minAnnotationHeight =\n            annotationFontSettings.fontSize * annotationFontSettings.lineHeight\n        if (remainingHeightForAnnotation < minAnnotationHeight)\n            return { labelWrap, labelWrapNeedsTruncation }\n\n        // Wrap annotation to fit in remaining space\n        const annotationWrap = new TextWrap({\n            text: series.annotation,\n            // 80px extra to give annotations more room than labels\n            maxWidth: Math.min(maxLabelWidth, labelWrap.width + 80),\n            ...annotationFontSettings,\n        })\n\n        // Check if annotation fits in remaining height\n        if (annotationWrap.height > remainingHeightForAnnotation) {\n            // Try again with a larger max width\n            const annotationWrap = new TextWrap({\n                text: series.annotation,\n                maxWidth: maxLabelWidth,\n                ...annotationFontSettings,\n            })\n\n            const annotationWrapNeedsTruncation =\n                annotationWrap.height > remainingHeightForAnnotation\n\n            return {\n                labelWrap,\n                labelWrapNeedsTruncation,\n                annotationWrap,\n                annotationWrapNeedsTruncation,\n            }\n        }\n\n        return {\n            labelWrap,\n            annotationWrap,\n            labelWrapNeedsTruncation,\n            annotationWrapNeedsTruncation: false,\n        }\n    })\n\n    // Return early if no labels or annotations need truncation\n    const needsTruncation = wrappedLabels.some(\n        (s) => s.labelWrapNeedsTruncation || s.annotationWrapNeedsTruncation\n    )\n    if (!needsTruncation)\n        return series.map((series, index) => ({\n            ...series,\n            label: SeriesLabelState.fromTextWrap(\n                wrappedLabels[index].labelWrap,\n                { showRegionTooltip, textAnchor: \"end\" }\n            ),\n            annotationTextWrap: wrappedLabels[index].annotationWrap,\n        }))\n\n    // The target width for truncation is the max width of non-truncated labels and annotations\n    const nonTruncatedLabelWidths = wrappedLabels\n        .filter((s) => !s.labelWrapNeedsTruncation)\n        .map((s) => s.labelWrap.width)\n    const nonTruncatedAnnotationWidths = wrappedLabels\n        .filter(\n            (s) =>\n                s.annotationWrap !== undefined &&\n                !s.annotationWrapNeedsTruncation\n        )\n        .map((s) => s.annotationWrap!.width)\n    const targetWidth = Math.max(\n        _.max(nonTruncatedLabelWidths) ?? 0,\n        _.max(nonTruncatedAnnotationWidths) ?? 0\n    )\n\n    const truncatedLabels = wrappedLabels.map(\n        ({ labelWrap, labelWrapNeedsTruncation }) => {\n            if (!labelWrapNeedsTruncation) return labelWrap\n\n            const truncatedText = shortenWithEllipsis(\n                labelWrap.text,\n                targetWidth,\n                fontSettings\n            )\n\n            return new TextWrap({\n                text: truncatedText,\n                maxWidth: Infinity, // Don't wrap truncated labels\n                ...fontSettings,\n            })\n        }\n    )\n\n    const truncatedAnnotations = wrappedLabels.map(\n        ({ annotationWrap, annotationWrapNeedsTruncation }) => {\n            if (!annotationWrap || !annotationWrapNeedsTruncation)\n                return annotationWrap\n\n            const truncatedText = shortenWithEllipsis(\n                annotationWrap.text,\n                targetWidth,\n                annotationFontSettings\n            )\n\n            return new TextWrap({\n                text: truncatedText,\n                maxWidth: Infinity, // Don't wrap truncated labels\n                ...annotationFontSettings,\n            })\n        }\n    )\n\n    return series.map((series, index) => ({\n        ...series,\n        label: SeriesLabelState.fromTextWrap(truncatedLabels[index], {\n            showRegionTooltip,\n            textAnchor: \"end\",\n        }),\n        annotationTextWrap: truncatedAnnotations[index],\n    }))\n}\n","import { SeriesName, Time } from \"@ourworldindata/types\"\nimport { TimeColumn } from \"@ourworldindata/core-table\"\nimport { computeCenteredLabelYPositions } from \"../rowSeriesLabels/RowSeriesLabelHelpers.js\"\nimport { resolveEmphasis } from \"../interaction/Emphasis\"\nimport { InteractionState } from \"../interaction/InteractionState\"\nimport { FocusArray } from \"../focus/FocusArray\"\nimport { CategoricalBin } from \"../color/ColorScaleBin\"\nimport { ColorScale } from \"../color/ColorScale\"\nimport { OWID_ERROR_COLOR } from \"../color/ColorConstants\"\nimport { formatTimeSpan, textWidth } from \"../chart/ChartUtils\"\nimport {\n    ROW_SPACING_FACTOR,\n    MAX_HEIGHT_PER_SERIES,\n    PlacedSwimlaneCategorySegment,\n    PlacedSwimlaneSegment,\n    PlacedSwimlaneSegmentLabel,\n    PlacedSwimlaneSeries,\n    RawSwimlaneSegment,\n    RenderSwimlaneSegment,\n    RenderSwimlaneSeries,\n    SizedSwimlaneSeries,\n    SEGMENT_CROP_TAPER_RATIO,\n    SEGMENT_LABEL_PADDING,\n    SwimlaneObservation,\n    SwimlaneSegment,\n    SwimlaneSegmentLabelStyle,\n    SwimlaneTooltipTarget,\n    SwimlaneVisibleTimeRange,\n} from \"./SwimlaneChartConstants\"\n\nexport function toRawSwimlaneSegments({\n    observations,\n    consecutiveTimes,\n}: {\n    observations: SwimlaneObservation[]\n    consecutiveTimes: Time[]\n}): RawSwimlaneSegment[] {\n    if (consecutiveTimes.length === 0) return []\n\n    const lastIndex = consecutiveTimes.length - 1\n    const categoryByTime = new Map(\n        observations.map(({ time, category }) => [time, category])\n    )\n    const categoryByTimeIndex = consecutiveTimes.map((time) =>\n        categoryByTime.get(time)\n    )\n\n    const rawSegments: RawSwimlaneSegment[] = []\n    let startIndex = 0\n    for (let index = 0; index <= lastIndex; index++) {\n        const isSegmentEnd =\n            index === lastIndex ||\n            categoryByTimeIndex[index + 1] !== categoryByTimeIndex[index]\n        if (!isSegmentEnd) continue\n\n        const range = {\n            startTime: consecutiveTimes[startIndex],\n            endTime: consecutiveTimes[index],\n        }\n        const category = categoryByTimeIndex[index]\n        rawSegments.push(\n            category === undefined\n                ? { kind: \"missing\", ...range }\n                : { kind: \"category\", category, ...range }\n        )\n        startIndex = index + 1\n    }\n    return rawSegments\n}\n\nexport function toSwimlaneSegments({\n    rawSegments,\n    visibleTimeRange,\n    colorScale,\n    timeColumn,\n}: {\n    rawSegments: RawSwimlaneSegment[]\n    visibleTimeRange: SwimlaneVisibleTimeRange\n    colorScale: ColorScale\n    timeColumn: TimeColumn\n}): SwimlaneSegment[] {\n    const { startTime: firstVisibleTime, endTime: lastVisibleTime } =\n        visibleTimeRange\n\n    return rawSegments\n        .filter(\n            (rawSegment) =>\n                rawSegment.endTime >= firstVisibleTime &&\n                rawSegment.startTime <= lastVisibleTime\n        )\n        .map((rawSegment): SwimlaneSegment => {\n            const common = {\n                visibleStartTime: Math.max(\n                    rawSegment.startTime,\n                    firstVisibleTime\n                ),\n                visibleEndTime: Math.min(rawSegment.endTime, lastVisibleTime),\n                timeRangeLabel: formatSegmentTimeRange({\n                    startTime: rawSegment.startTime,\n                    endTime: rawSegment.endTime,\n                    timeColumn,\n                }),\n            }\n            if (rawSegment.kind === \"missing\")\n                return { ...rawSegment, ...common }\n            const bin = colorScale.getBinForValue(rawSegment.category)\n            return {\n                ...rawSegment,\n                ...common,\n                categoryLabel: bin?.text ?? rawSegment.category,\n                color: bin?.color ?? OWID_ERROR_COLOR,\n            }\n        })\n}\n\nexport function formatSegmentTimeRange({\n    startTime,\n    endTime,\n    timeColumn,\n}: {\n    startTime: Time\n    endTime: Time\n    timeColumn: TimeColumn\n}): string {\n    if (startTime === endTime) return timeColumn.formatTime(startTime)\n    return timeColumn.formatTimeRange(startTime, endTime)\n}\n\n/** How long a segment's whole run lasts, e.g. \"3 years\" */\nexport function formatSegmentDuration({\n    segment,\n    timeColumn,\n}: {\n    segment: SwimlaneSegment\n    timeColumn: TimeColumn\n}): string {\n    const timeCount = timeColumn.countPeriods(\n        segment.startTime,\n        segment.endTime\n    )\n    return formatTimeSpan(timeCount, timeColumn.timeInterval)\n}\n\nexport function computeHeightPerSeries({\n    height,\n    rowCount,\n}: {\n    height: number\n    rowCount: number\n}): number {\n    return Math.min(height / rowCount, MAX_HEIGHT_PER_SERIES)\n}\n\nexport function toPlacedSwimlaneSeries({\n    series,\n    labelX,\n    heightPerSeries,\n    placeSeries,\n    placeTime,\n    visibleExclusiveEndTime,\n    shouldShowSegmentLabels,\n    segmentLabelStyle,\n}: {\n    series: SizedSwimlaneSeries[]\n    labelX: number\n    heightPerSeries: number\n    placeSeries: (seriesName: SeriesName) => number\n    placeTime: (time: Time) => number\n    visibleExclusiveEndTime: Time\n    shouldShowSegmentLabels: boolean\n    segmentLabelStyle: SwimlaneSegmentLabelStyle\n}): PlacedSwimlaneSeries[] {\n    const rowHeight = heightPerSeries * (1 - ROW_SPACING_FACTOR)\n\n    return series.map(({ segments, ...sizedSeries }): PlacedSwimlaneSeries => {\n        const y = placeSeries(sizedSeries.seriesName)\n\n        const extents = toContiguousSegmentExtents({\n            segments,\n            placeTime,\n            visibleExclusiveEndTime,\n        })\n        const placedSegments = segments.map((segment, segmentIndex) =>\n            toPlacedSwimlaneSegment({\n                segment,\n                ...extents[segmentIndex],\n                y: -rowHeight / 2,\n                height: rowHeight,\n                shouldShowLabel: shouldShowSegmentLabels,\n                labelStyle: segmentLabelStyle,\n            })\n        )\n\n        const { labelY, annotationY } = computeCenteredLabelYPositions({\n            y,\n            label: sizedSeries.label,\n            annotation: sizedSeries.annotationTextWrap,\n        })\n\n        return {\n            ...sizedSeries,\n            y,\n            height: heightPerSeries,\n            labelPosition: { x: labelX, yOffset: labelY - y },\n            annotationPosition:\n                annotationY !== undefined\n                    ? { x: labelX, yOffset: annotationY - y }\n                    : undefined,\n            placedSegments,\n        }\n    })\n}\n\nfunction toRenderSwimlaneSegments({\n    segments,\n    hoveredStartTime,\n    hoveredLegendBin,\n    isHoverModeActive,\n    focus,\n}: {\n    segments: PlacedSwimlaneSegment[]\n    hoveredStartTime?: Time\n    hoveredLegendBin?: CategoricalBin\n    isHoverModeActive: boolean\n    focus?: InteractionState\n}): RenderSwimlaneSegment[] {\n    return segments.map((segment) => {\n        const category =\n            segment.kind === \"category\" ? segment.category : undefined\n        const isHovered =\n            segment.startTime === hoveredStartTime ||\n            !!hoveredLegendBin?.contains(category)\n\n        return {\n            ...segment,\n            emphasis: resolveEmphasis({\n                hover: new InteractionState(isHovered, isHoverModeActive),\n                focus,\n            }),\n        }\n    })\n}\n\nexport function toRenderSwimlaneSeries({\n    series: allSeries,\n    hoveredSegment,\n    focusArray,\n    hoveredLegendBin,\n}: {\n    series: PlacedSwimlaneSeries[]\n    hoveredSegment?: SwimlaneTooltipTarget\n    focusArray: FocusArray\n    hoveredLegendBin?: CategoricalBin\n}): RenderSwimlaneSeries[] {\n    const isHoverModeActive =\n        hoveredSegment !== undefined || hoveredLegendBin !== undefined\n\n    return allSeries.map((series): RenderSwimlaneSeries => {\n        const focus = focusArray.state(series.seriesName)\n        const hoveredStartTime =\n            hoveredSegment?.entityName === series.entityName\n                ? hoveredSegment.segment.startTime\n                : undefined\n        return {\n            ...series,\n            emphasis: resolveEmphasis({ focus }),\n            placedSegments: toRenderSwimlaneSegments({\n                segments: series.placedSegments,\n                hoveredStartTime,\n                hoveredLegendBin,\n                isHoverModeActive,\n                focus,\n            }),\n        }\n    })\n}\n\nfunction toContiguousSegmentExtents({\n    segments,\n    placeTime,\n    visibleExclusiveEndTime,\n}: {\n    segments: SwimlaneSegment[]\n    placeTime: (time: Time) => number\n    visibleExclusiveEndTime: Time\n}): { x: number; width: number }[] {\n    return segments.map((segment, index) => {\n        const nextSegment = segments[index + 1]\n        const x = placeTime(segment.visibleStartTime)\n        const right = placeTime(\n            nextSegment?.visibleStartTime ?? visibleExclusiveEndTime\n        )\n        return { x, width: right - x }\n    })\n}\n\nfunction toPlacedSwimlaneSegment({\n    segment,\n    x,\n    width,\n    y,\n    height,\n    shouldShowLabel,\n    labelStyle,\n}: {\n    segment: SwimlaneSegment\n    x: number\n    width: number\n    y: number\n    height: number\n    shouldShowLabel: boolean\n    labelStyle: SwimlaneSegmentLabelStyle\n}): PlacedSwimlaneSegment {\n    const placement = { x, width, y, height }\n    if (segment.kind === \"missing\") return { ...segment, ...placement }\n\n    const placedSegment = {\n        ...segment,\n        ...placement,\n        isStartCropped: segment.startTime < segment.visibleStartTime,\n        isEndCropped: segment.endTime > segment.visibleEndTime,\n        cropTaper: Math.min(SEGMENT_CROP_TAPER_RATIO * height, width / 3),\n    }\n    return {\n        ...placedSegment,\n        label: shouldShowLabel\n            ? placeSegmentLabel(placedSegment, labelStyle)\n            : undefined,\n    }\n}\n\n/** Position of a category segment's two-line label, or undefined if it doesn't fit */\nfunction placeSegmentLabel(\n    segment: PlacedSwimlaneCategorySegment,\n    style: SwimlaneSegmentLabelStyle\n): PlacedSwimlaneSegmentLabel | undefined {\n    const lineHeight = style.category.fontSize * style.category.lineHeight\n    if (segment.height < 2 * lineHeight) return undefined\n\n    const startInset = segment.isStartCropped ? segment.cropTaper : 0\n    const endInset = segment.isEndCropped ? segment.cropTaper : 0\n    const availableWidth =\n        segment.width - startInset - endInset - 2 * SEGMENT_LABEL_PADDING\n    const widestLine = Math.max(\n        textWidth(segment.categoryLabel, style.category),\n        textWidth(segment.timeRangeLabel, style.timeRange)\n    )\n    if (availableWidth < widestLine) return undefined\n\n    return {\n        x: segment.x + startInset + SEGMENT_LABEL_PADDING,\n        y: segment.y + segment.height / 2 - lineHeight / 2,\n        style,\n    }\n}\n","import { observable, makeObservable } from \"mobx\"\nimport {\n    SwimlaneChartConfigInterface,\n    SwimlaneSegmentLabelMode,\n} from \"@ourworldindata/types\"\nimport {\n    Persistable,\n    updatePersistables,\n    objectWithPersistablesToObject,\n    deleteRuntimeAndUnchangedProps,\n    trimObject,\n    NoUndefinedValues,\n} from \"@ourworldindata/utils\"\n\nexport const SWIMLANE_CHART_CONFIG_DEFAULTS = {\n    segmentLabelMode: SwimlaneSegmentLabelMode.CategoryAndTimeRange,\n} satisfies Partial<SwimlaneChartConfigInterface>\n\nclass SwimlaneChartConfigDefaults {\n    segmentLabelMode: SwimlaneSegmentLabelMode =\n        SWIMLANE_CHART_CONFIG_DEFAULTS.segmentLabelMode\n\n    constructor() {\n        makeObservable(this, {\n            segmentLabelMode: observable.ref,\n        })\n    }\n}\n\nexport class SwimlaneChartConfig\n    extends SwimlaneChartConfigDefaults\n    implements Persistable\n{\n    updateFromObject(obj: Partial<SwimlaneChartConfigInterface>): void {\n        updatePersistables(this, obj)\n    }\n\n    toObject(): NoUndefinedValues<SwimlaneChartConfigInterface> {\n        const obj = objectWithPersistablesToObject(\n            this\n        ) as SwimlaneChartConfigInterface\n        deleteRuntimeAndUnchangedProps(obj, new SwimlaneChartConfigDefaults())\n        return trimObject(obj)\n    }\n\n    constructor(obj?: Partial<SwimlaneChartConfigInterface>) {\n        super()\n        if (obj) this.updateFromObject(obj)\n    }\n}\n","import { computed, makeObservable } from \"mobx\"\nimport {\n    ChartErrorInfo,\n    ColorScaleConfigInterface,\n    ColorSchemeName,\n    ColumnSlug,\n    EntityName,\n    ScaleType,\n    SortBy,\n    SortConfig,\n    SortOrder,\n    SwimlaneSegmentLabelMode,\n    Time,\n} from \"@ourworldindata/types\"\nimport {\n    OwidTable,\n    CoreColumn,\n    ColumnTypeMap,\n    TimeColumn,\n} from \"@ourworldindata/core-table\"\nimport { ChartState } from \"../chart/ChartInterface\"\nimport { ColorScale, ColorScaleManager } from \"../color/ColorScale\"\nimport { ColorScaleConfig } from \"../color/ColorScaleConfig\"\nimport { FocusArray } from \"../focus/FocusArray\"\nimport {\n    autoDetectYColumnSlugs,\n    getDefaultFailMessage,\n    getShortNameForEntity,\n    makeSelectionArray,\n    SortKey,\n    keepInputOrder,\n    sortByConfig,\n} from \"../chart/ChartUtils\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { AxisConfig } from \"../axis/AxisConfig\"\nimport { HorizontalAxis } from \"../axis/Axis\"\nimport {\n    isSwimlaneSortKey,\n    SWIMLANE_SORT_KEYS,\n    SwimlaneCategoryKind,\n    SwimlaneChartManager,\n    RawSwimlaneSegment,\n    SwimlaneObservation,\n    SwimlaneSeries,\n    SwimlaneSortKey,\n    SwimlaneVisibleTimeRange,\n} from \"./SwimlaneChartConstants\"\nimport {\n    AnnotationsMap,\n    getAnnotationsMap,\n    getAnnotationsForSeries,\n} from \"../lineCharts/LineChartHelpers\"\nimport {\n    toRawSwimlaneSegments,\n    toSwimlaneSegments,\n} from \"./SwimlaneChartHelpers\"\nimport { SWIMLANE_CHART_CONFIG_DEFAULTS } from \"./SwimlaneChartConfig\"\n\nexport class SwimlaneChartState implements ChartState, ColorScaleManager {\n    manager: SwimlaneChartManager\n\n    colorScale: ColorScale\n    hasNoDataBin = true\n\n    constructor({ manager }: { manager: SwimlaneChartManager }) {\n        this.manager = manager\n        this.colorScale = new ColorScale(this)\n        makeObservable(this)\n    }\n\n    @computed get inputTable(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed get transformedTable(): OwidTable {\n        return (\n            this.manager.transformedTable ??\n            this.transformTable(this.inputTable)\n        )\n    }\n\n    transformTable(table: OwidTable): OwidTable {\n        if (!this.yColumnSlug) return table\n\n        return table.filterByEntityNames(\n            this.selectionArray.selectedEntityNames\n        )\n    }\n\n    @computed get selectionArray(): SelectionArray {\n        return makeSelectionArray(this.manager.selection)\n    }\n\n    @computed get focusArray(): FocusArray {\n        return this.manager.focusArray ?? new FocusArray()\n    }\n\n    @computed get yColumnSlugs(): ColumnSlug[] {\n        return autoDetectYColumnSlugs(this.manager)\n    }\n\n    @computed get yColumnSlug(): ColumnSlug | undefined {\n        return this.yColumnSlugs[0]\n    }\n\n    @computed get inputYColumn(): CoreColumn {\n        return this.inputTable.get(this.yColumnSlug)\n    }\n\n    @computed get yColumn(): CoreColumn {\n        return this.transformedTable.get(this.yColumnSlug)\n    }\n\n    @computed get formatColumn(): CoreColumn {\n        return this.yColumn\n    }\n\n    @computed get timeColumn(): TimeColumn | undefined {\n        const { timeColumn } = this.inputTable\n        return timeColumn instanceof TimeColumn ? timeColumn : undefined\n    }\n\n    @computed get segmentLabelMode(): SwimlaneSegmentLabelMode {\n        return (\n            this.manager.swimlane?.segmentLabelMode ??\n            SWIMLANE_CHART_CONFIG_DEFAULTS.segmentLabelMode\n        )\n    }\n\n    @computed get colorScaleColumn(): CoreColumn {\n        return this.inputYColumn\n    }\n\n    @computed get colorScaleConfig(): ColorScaleConfigInterface | undefined {\n        return (\n            ColorScaleConfig.fromDSL(this.colorScaleColumn.def) ??\n            this.manager.colorScale\n        )\n    }\n\n    @computed get categoryKind(): SwimlaneCategoryKind | undefined {\n        const column = this.colorScaleColumn\n        if (!(column instanceof ColumnTypeMap.String)) return undefined\n        return column instanceof ColumnTypeMap.Ordinal\n            ? \"ordinal\"\n            : \"categorical\"\n    }\n\n    @computed get defaultBaseColorScheme(): ColorSchemeName {\n        return this.categoryKind === \"ordinal\"\n            ? ColorSchemeName.SingleColorGradientDenim\n            : ColorSchemeName.OwidCategoricalA\n    }\n\n    @computed private get consecutiveTimes(): Time[] {\n        const { numValues, minTime, maxTime } = this.inputYColumn\n        if (!this.timeColumn || numValues === 0) return []\n        return this.timeColumn.getConsecutiveTimes(minTime, maxTime)\n    }\n\n    @computed get visibleTimeRange(): SwimlaneVisibleTimeRange | undefined {\n        const { timeColumn } = this\n        const { startTime, endTime } = this.manager\n        if (!timeColumn || startTime === undefined || endTime === undefined)\n            return undefined\n\n        return {\n            startTime,\n            endTime,\n            exclusiveEndTime: timeColumn.addPeriods(endTime, 1),\n        }\n    }\n\n    @computed get defaultSortConfig(): SortConfig {\n        return { sortBy: SortBy.entityName, sortOrder: SortOrder.asc }\n    }\n\n    @computed get sortConfig(): SortConfig {\n        const { sortBy, sortOrder } = this.manager.sortConfig ?? {}\n        if (sortBy && isSwimlaneSortKey(sortBy)) return { sortBy, sortOrder }\n        return this.defaultSortConfig\n    }\n\n    @computed get availableSortKeys(): SwimlaneSortKey[] {\n        return [...SWIMLANE_SORT_KEYS]\n    }\n\n    @computed private get annotationsMap(): AnnotationsMap | undefined {\n        return getAnnotationsMap(this.inputTable, this.inputYColumn.slug)\n    }\n\n    @computed private get rawSegmentsByEntityName(): Map<\n        EntityName,\n        RawSwimlaneSegment[]\n    > {\n        const { inputYColumn, consecutiveTimes } = this\n\n        const rowsByEntityNameAndTime = inputYColumn.owidRowByEntityNameAndTime\n\n        return new Map(\n            this.selectionArray.selectedEntityNames\n                .filter((entityName) => rowsByEntityNameAndTime.has(entityName))\n                .map((entityName) => {\n                    const rows =\n                        rowsByEntityNameAndTime.get(entityName)?.values() ?? []\n\n                    const observations: SwimlaneObservation[] = Array.from(rows)\n                        .filter((row) => row.value !== \"\")\n                        .map((row) => ({ time: row.time, category: row.value }))\n\n                    return [\n                        entityName,\n                        toRawSwimlaneSegments({\n                            observations,\n                            consecutiveTimes,\n                        }),\n                    ]\n                })\n        )\n    }\n\n    @computed private get unsortedSeries(): SwimlaneSeries[] {\n        const {\n            rawSegmentsByEntityName,\n            visibleTimeRange,\n            colorScale,\n            annotationsMap,\n            timeColumn,\n        } = this\n        if (!visibleTimeRange || !timeColumn) return []\n\n        return Array.from(rawSegmentsByEntityName).map(\n            ([entityName, rawSegments]): SwimlaneSeries => {\n                const segments = toSwimlaneSegments({\n                    rawSegments,\n                    visibleTimeRange,\n                    colorScale,\n                    timeColumn,\n                })\n\n                return {\n                    seriesName: entityName,\n                    entityName,\n                    shortEntityName: getShortNameForEntity(entityName),\n                    annotation: getAnnotationsForSeries(\n                        annotationsMap,\n                        entityName\n                    ),\n                    segments,\n                }\n            }\n        )\n    }\n\n    @computed get series(): SwimlaneSeries[] {\n        const keyFns: Record<SwimlaneSortKey, SortKey<SwimlaneSeries>> = {\n            [SortBy.custom]: keepInputOrder,\n            [SortBy.entityName]: (series): string => series.entityName,\n        }\n\n        return sortByConfig(this.unsortedSeries, this.sortConfig, keyFns)\n    }\n\n    toHorizontalAxis(config: AxisConfig): HorizontalAxis {\n        const axis = config.toHorizontalAxis()\n        axis.updateDomainPreservingUserSettings([\n            this.visibleTimeRange?.startTime,\n            this.visibleTimeRange?.exclusiveEndTime,\n        ])\n        axis.scaleType = ScaleType.linear\n        axis.formatColumn = this.inputTable.timeColumn\n        axis.hideFractionalTicks = true\n        return axis\n    }\n\n    @computed get errorInfo(): ChartErrorInfo {\n        const message = getDefaultFailMessage(this.manager)\n        if (message) return { reason: message }\n\n        if (this.yColumnSlugs.length > 1)\n            return { reason: \"Only one indicator can be shown at a time\" }\n\n        if (!this.categoryKind)\n            return { reason: \"Requires an indicator with categorical values\" }\n\n        const { entityTypePlural = \"entities\" } = this.manager\n        const hasCategorySegment = this.series.some((series) =>\n            series.segments.some((segment) => segment.kind === \"category\")\n        )\n        if (!hasCategorySegment)\n            return { reason: `No data for the selected ${entityTypePlural}` }\n\n        return { reason: \"\" }\n    }\n}\n","import * as R from \"remeda\"\nimport { computed, makeObservable } from \"mobx\"\nimport { ChartState } from \"../chart/ChartInterface\"\nimport {\n    ChoroplethSeries,\n    ChoroplethSeriesByName,\n    MAP_REGION_LABELS,\n    MapChartManager,\n    MapColumnInfo,\n} from \"./MapChartConstants\"\nimport {\n    CoreColumn,\n    ErrorValueTypes,\n    OwidTable,\n} from \"@ourworldindata/core-table\"\nimport { match, P } from \"ts-pattern\"\nimport {\n    ChartErrorInfo,\n    Color,\n    ColorSchemeName,\n    ColumnSlug,\n    EntityName,\n    PrimitiveType,\n    TickFormattingOptions,\n    Time,\n    ToleranceStrategy,\n} from \"@ourworldindata/types\"\nimport {\n    anyToString,\n    checkHasMembers,\n    isPresent,\n    mappableCountries,\n    regions,\n} from \"@ourworldindata/utils\"\nimport { MapConfig } from \"./MapConfig\"\nimport { combineHistoricalAndProjectionColumns } from \"../chart/ChartUtils\"\nimport { getCountriesByRegion, isOnTheMap } from \"./MapHelpers\"\nimport { MapSelectionArray } from \"../selection/MapSelectionArray\"\nimport { ColorScale, ColorScaleManager } from \"../color/ColorScale\"\nimport { ColorScaleConfig } from \"../color/ColorScaleConfig\"\nimport { makeToleranceNotice } from \"../chart/ToleranceNotice.js\"\n\nexport type MapFormatValueForTooltip = (\n    d: PrimitiveType,\n    options?: TickFormattingOptions\n) => {\n    label: string\n    isCategorical: boolean\n}\n\nexport class MapChartState implements ChartState, ColorScaleManager {\n    manager: MapChartManager\n\n    colorScale: ColorScale\n    defaultBaseColorScheme = ColorSchemeName.BuGn\n    hasNoDataBin = true\n\n    constructor({ manager }: { manager: MapChartManager }) {\n        this.manager = manager\n        this.colorScale = new ColorScale(this)\n        makeObservable(this)\n    }\n\n    transformTable(table: OwidTable): OwidTable {\n        // Drop non-mappable entities from the table\n        table = this.dropNonMapEntities(table)\n\n        return match(this.mapColumnInfo)\n            .with({ type: P.union(\"historical\", \"projected\") }, (info) =>\n                this.transformTableForSingleMapColumn(table, info)\n            )\n            .with({ type: \"historical+projected\" }, (info) =>\n                this.transformTableForCombinedMapColumn(table, info)\n            )\n            .exhaustive()\n    }\n\n    private transformTableForSingleMapColumn(\n        table: OwidTable,\n        mapColumnInfo: Extract<\n            MapColumnInfo,\n            { type: \"historical\" | \"projected\" }\n        >\n    ): OwidTable {\n        return table\n            .dropRowsWithErrorValuesForColumn(mapColumnInfo.slug)\n            .interpolateColumnWithTolerance(mapColumnInfo.slug, {\n                toleranceOverride: this.mapConfig.timeTolerance,\n                toleranceStrategyOverride: this.mapConfig.toleranceStrategy,\n            })\n    }\n\n    private transformTableForCombinedMapColumn(\n        table: OwidTable,\n        mapColumnInfo: Extract<MapColumnInfo, { type: \"historical+projected\" }>\n    ): OwidTable {\n        const { historicalSlug, projectedSlug, combinedSlug } = mapColumnInfo\n\n        // Interpolate both columns separately\n        table = table\n            .interpolateColumnWithTolerance(projectedSlug, {\n                toleranceOverride: this.mapConfig.timeTolerance,\n                toleranceStrategyOverride: this.mapConfig.toleranceStrategy,\n            })\n            .interpolateColumnWithTolerance(historicalSlug, {\n                toleranceOverride: this.mapConfig.timeTolerance,\n                toleranceStrategyOverride: this.mapConfig.toleranceStrategy,\n            })\n\n        // Combine the projection column with its historical stem into one column\n        table = combineHistoricalAndProjectionColumns(table, mapColumnInfo, {\n            shouldAddIsProjectionColumn: true,\n        })\n\n        // Drop rows with error values for the combined column\n        table = table.dropRowsWithErrorValuesForColumn(combinedSlug)\n\n        return table\n    }\n\n    transformTableForSelection(table: OwidTable): OwidTable {\n        table = this.addMissingMapEntities(table)\n        table = this.dropNonMapEntitiesForSelection(table)\n        table = this.dropAntarctica(table)\n        return table\n    }\n\n    private dropAntarctica(table: OwidTable): OwidTable {\n        // We prefer to not offer Antarctica in the entity selector on the map\n        // tab to avoid confusion since it's shown on the globe, but not on the map.\n        return table.filterByEntityNamesUsingIncludeExcludePattern({\n            excluded: [\"Antarctica\"],\n        })\n    }\n\n    private dropNonMapEntities(table: OwidTable): OwidTable {\n        const entityNamesToSelect =\n            table.availableEntityNames.filter(isOnTheMap)\n        return table.filterByEntityNames(entityNamesToSelect)\n    }\n\n    private dropNonMapEntitiesForSelection(table: OwidTable): OwidTable {\n        const { selectionArray, mapConfig } = this\n\n        const allMappableCountryNames = mappableCountries.map((c) => c.name)\n        const allRegionNames = regions\n            .filter((r) => checkHasMembers(r) && r.code !== \"OWID_WRL\")\n            .map((r) => r.name)\n\n        const mappableCountryNameSet = new Set(allMappableCountryNames)\n\n        // If in 2D mode and a continent is selected, then all countries\n        // outside of the selected continent are disabled on the map\n        // and thus also not selectable\n        if (this.mapConfig.is2dContinentActive()) {\n            const countriesInRegionSet = getCountriesByRegion(\n                MAP_REGION_LABELS[mapConfig.region]\n            )\n            if (!countriesInRegionSet) return table\n\n            const mappableCountriesInRegion = countriesInRegionSet\n                .keys()\n                .filter((countryName) =>\n                    mappableCountryNameSet.has(countryName)\n                )\n\n            return table.filterByEntityNames(\n                R.unique([\n                    // only keep countries in the region\n                    ...mappableCountriesInRegion,\n                    // keep the user's selection\n                    ...selectionArray.selectedEntityNames,\n                ])\n            )\n        }\n\n        // if no regions are currently selected, keep all mappable countries and regions\n        if (!selectionArray.hasRegions) {\n            return table.filterByEntityNames([\n                ...allRegionNames,\n                ...allMappableCountryNames,\n            ])\n        }\n\n        return table.filterByEntityNames(\n            R.unique([\n                // keep all regions\n                ...allRegionNames,\n                // only keep those countries that are within the selected regions\n                ...selectionArray.countryNamesForSelectedRegions,\n                // keep the user's selection\n                ...selectionArray.selectedEntityNames,\n            ])\n        )\n    }\n\n    private addMissingMapEntities(table: OwidTable): OwidTable {\n        // the given table might not have data for all mappable countries, but\n        // on the map tab, we do want every country to be selectable, even if\n        // it doesn't have data for any of the years. that's why we add a\n        // missing-data row for every mappable country that isn't in the table\n\n        const missingMappableCountries = mappableCountries.filter(\n            (country) => !table.availableEntityNameSet.has(country.name)\n        )\n\n        const rows = missingMappableCountries.map((country) => ({\n            entityName: country.name,\n            time: table.maxTime!, // arbitrary time\n            value: ErrorValueTypes.MissingValuePlaceholder,\n        }))\n        table = table.appendRows(\n            rows,\n            `Append rows for mappable countries without data: ${rows.map((row) => row.entityName).join(\", \")}`\n        )\n\n        return table\n    }\n\n    @computed get inputTable(): OwidTable {\n        const { mapColumnInfo } = this\n        const { table } = this.manager\n\n        // For historical+projected data, we need to create the combined column\n        // on the input table. This ensures the color scale has access to the\n        // complete range of data across both columns\n        return mapColumnInfo.type === \"historical+projected\"\n            ? combineHistoricalAndProjectionColumns(table, mapColumnInfo)\n            : table\n    }\n\n    @computed get transformedTableFromGrapher(): OwidTable {\n        return (\n            this.manager.transformedTable ??\n            this.transformTable(this.inputTable)\n        )\n    }\n\n    @computed get transformedTable(): OwidTable {\n        let table = this.transformedTableFromGrapher\n\n        // A target time is set for faceted maps\n        if (this.manager.targetTime !== undefined) {\n            table = table.filterByTargetTimes(\n                [this.manager.targetTime],\n                this.mapConfig.timeTolerance ??\n                    table.get(this.mapColumnSlug).tolerance\n            )\n        }\n\n        return table\n    }\n\n    /**\n     * The transformed table narrowed to the countries the map draws, which is\n     * only the active continent when zoomed into one in 2D\n     */\n    @computed private get transformedTableForActiveRegion(): OwidTable {\n        if (!this.mapConfig.is2dContinentActive()) return this.transformedTable\n\n        const countries = getCountriesByRegion(\n            MAP_REGION_LABELS[this.mapConfig.region]\n        )\n        if (!countries) return this.transformedTable\n\n        return this.transformedTable.filterByEntityNames([...countries])\n    }\n\n    @computed get selectionArray(): MapSelectionArray {\n        return this.mapConfig.selection\n    }\n\n    @computed get mapColumn(): CoreColumn {\n        return this.transformedTable.get(this.mapColumnSlug)\n    }\n\n    @computed get mapColumnInfo(): MapColumnInfo {\n        const mapColumnSlug = this.manager.mapColumnSlug!\n\n        // If projection info is available, then we can stitch together the\n        // historical and projected columns\n        const projectionInfo =\n            this.manager.projectionColumnInfoBySlug?.get(mapColumnSlug)\n        if (projectionInfo) {\n            return {\n                type: \"historical+projected\",\n                slug: projectionInfo.combinedSlug,\n                ...projectionInfo,\n            }\n        }\n\n        const type = this.manager.table.get(mapColumnSlug).isProjection\n            ? \"projected\"\n            : \"historical\"\n\n        return { type, slug: mapColumnSlug }\n    }\n\n    @computed get mapConfig(): MapConfig {\n        return this.manager.mapConfig || new MapConfig()\n    }\n\n    @computed get inapplicableEntityNamesSet(): Set<EntityName> {\n        const { inapplicableEntityNames = [] } = this.manager\n        return new Set(inapplicableEntityNames.filter(isOnTheMap))\n    }\n\n    @computed get mapColumnSlug(): ColumnSlug {\n        return this.mapColumnInfo.slug\n    }\n\n    // The map column without tolerance and timeline filtering applied\n    @computed get mapColumnUntransformed(): CoreColumn {\n        return this.dropNonMapEntities(this.inputTable).get(this.mapColumnSlug)\n    }\n\n    @computed get colorScaleConfig(): ColorScaleConfig {\n        return (\n            ColorScaleConfig.fromDSL(this.mapColumn.def) ??\n            this.mapConfig.colorScale\n        )\n    }\n\n    @computed get colorScaleColumn(): CoreColumn {\n        // Use the table before any transforms to collect all possible values over time.\n        // Otherwise the legend changes as you slide the timeline handle.\n        return this.mapColumnUntransformed\n    }\n\n    @computed get hasProjectedData(): boolean {\n        return this.mapColumnInfo.type !== \"historical\"\n    }\n\n    @computed get hasProjectedDataBin(): boolean {\n        return this.hasProjectedData\n    }\n\n    @computed get hasInapplicableBin(): boolean {\n        return this.inapplicableEntityNamesSet.size > 0\n    }\n\n    @computed get targetTime(): number | undefined {\n        return this.manager.targetTime ?? this.manager.endTime\n    }\n\n    @computed private get toleranceStrategy(): ToleranceStrategy | undefined {\n        return (\n            this.mapConfig.toleranceStrategy ?? this.mapColumn.toleranceStrategy\n        )\n    }\n\n    @computed get toleranceNotice(): string | undefined {\n        return makeToleranceNotice({\n            inputTable: this.inputTable,\n            // Only the countries the map currently shows are relevant\n            transformedTable: this.transformedTableForActiveRegion,\n            columns: [this.mapColumn],\n            timeTolerance: this.mapConfig.timeTolerance,\n            toleranceStrategy: this.toleranceStrategy,\n        })\n    }\n\n    @computed get columnIsProjection(): CoreColumn | undefined {\n        const slugForIsProjectionColumn =\n            this.mapColumnInfo?.type === \"historical+projected\"\n                ? this.mapColumnInfo.slugForIsProjectionColumn\n                : undefined\n\n        return slugForIsProjectionColumn\n            ? this.transformedTable.get(slugForIsProjectionColumn)\n            : undefined\n    }\n\n    private checkIsProjection(\n        entityName: EntityName,\n        originalTime: Time\n    ): boolean {\n        return match(this.mapColumnInfo.type)\n            .with(\"historical\", () => false)\n            .with(\"projected\", () => true)\n            .with(\"historical+projected\", () =>\n                this.columnIsProjection?.valueByEntityNameAndOriginalTime\n                    .get(entityName)\n                    ?.get(originalTime)\n            )\n            .exhaustive()\n    }\n\n    @computed get noDataColor(): Color {\n        return this.colorScale.noDataColor\n    }\n\n    @computed get series(): ChoroplethSeries[] {\n        const { mapColumn, targetTime } = this\n        if (mapColumn.isMissing) return []\n        if (targetTime === undefined) return []\n\n        return mapColumn.owidRows\n            .map((row) => {\n                const { entityName, value, originalTime } = row\n                const color =\n                    this.colorScale.getColor(value) || this.noDataColor\n                const isProjection = this.checkIsProjection(\n                    entityName,\n                    originalTime\n                )\n                return {\n                    seriesName: entityName,\n                    time: originalTime,\n                    value,\n                    color,\n                    isProjection,\n                } satisfies ChoroplethSeries\n            })\n            .filter(isPresent)\n    }\n\n    @computed get seriesMap(): ChoroplethSeriesByName {\n        return new Map(this.series.map((series) => [series.seriesName, series]))\n    }\n\n    @computed get formatValueForTooltip(): MapFormatValueForTooltip {\n        const { mapConfig, colorScale } = this\n\n        return (d: PrimitiveType, options?: TickFormattingOptions) => {\n            if (mapConfig.tooltipUseCustomLabels) {\n                // Find the bin (and its label) that this value belongs to\n                const bin = colorScale.getBinForValue(d)\n                const label = bin?.label\n                if (label !== undefined && label !== \"\")\n                    return { label, isCategorical: true }\n            }\n\n            if (typeof d === \"number\") {\n                const label = this.mapColumn.formatValueShort(d, options)\n                return { label, isCategorical: false }\n            } else {\n                return { label: anyToString(d), isCategorical: true }\n            }\n        }\n    }\n\n    @computed get errorInfo(): ChartErrorInfo {\n        if (this.mapColumn.isMissing) return { reason: \"Missing map column\" }\n        return { reason: \"\" }\n    }\n}\n","export const COMPARISON_LINE_STYLE = {\n    opacity: 0.9,\n    fill: \"none\",\n    stroke: \"#ccc\",\n    strokeDasharray: \"2 2\",\n}\n\nexport const COMPARISON_LINE_LABEL_STYLE = {\n    fill: \"#999\",\n    opacity: 0.9,\n}\n","import * as React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    VerticalAlign,\n    dyFromAlign,\n    makeFigmaId,\n    roundForSvg,\n} from \"@ourworldindata/utils\"\nimport {\n    COMPARISON_LINE_STYLE,\n    COMPARISON_LINE_LABEL_STYLE,\n} from \"./ComparisonLineConstants\"\nimport { ComparisonLineProps } from \"./ComparisonLine\"\nimport {\n    VerticalComparisonLineConfig,\n    VerticalComparisonLineLabelPlacement,\n} from \"@ourworldindata/types\"\nimport { ComparisonLines } from \"./ComparisonLines\"\n\n@observer\nexport class VerticalComparisonLine extends React.Component<\n    ComparisonLineProps<VerticalComparisonLineConfig>\n> {\n    constructor(props: ComparisonLineProps<VerticalComparisonLineConfig>) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed private get comparisonLines(): ComparisonLines {\n        return this.props.dualAxis.comparisonLines\n    }\n\n    @computed private get fontSize(): number {\n        return this.comparisonLines.fontSize\n    }\n\n    @computed private get placement():\n        | VerticalComparisonLineLabelPlacement\n        | undefined {\n        return this.comparisonLines.verticalLineLabelPlacements.get(\n            this.lineConfig.xEquals\n        )\n    }\n\n    @computed private get labelHeight(): number {\n        // Since the label isn't wrapped, its height equals the font size\n        return this.fontSize\n    }\n\n    @computed private get lineConfig(): VerticalComparisonLineConfig {\n        return this.props.comparisonLine\n    }\n\n    /** Screen coordinates for rendering the vertical line */\n    @computed private get lineCoordinates():\n        | { x: number; y1: number; y2: number }\n        | undefined {\n        const { dualAxis } = this.props\n        const { horizontalAxis, innerBounds } = dualAxis\n        const xValue = this.lineConfig.xEquals\n        const [minX, maxX] = horizontalAxis.domain\n\n        // Only render if the line is within the chart bounds\n        const isWithinBounds = xValue >= minX && xValue <= maxX\n        if (!isWithinBounds) return undefined\n\n        return {\n            x: horizontalAxis.place(xValue),\n            // The line extends outside of the chart area, so that the label\n            // isn't covered by any chart elements\n            y1: innerBounds.top - this.labelHeight,\n            y2: innerBounds.bottom,\n        }\n    }\n\n    /** Calculated position and alignment for the label text */\n    @computed private get labelPosition():\n        | { x: number; y: number; anchor: \"start\" | \"end\" }\n        | undefined {\n        const { lineCoordinates, placement } = this\n\n        if (!lineCoordinates || !placement) return undefined\n\n        return {\n            x: placement.x,\n            y: lineCoordinates.y1,\n            anchor: placement.anchor,\n        }\n    }\n\n    private renderLabel(): React.ReactElement | null {\n        if (!this.labelPosition) return null\n\n        const { x, y, anchor } = this.labelPosition\n\n        return (\n            <text\n                {...COMPARISON_LINE_LABEL_STYLE}\n                x={roundForSvg(x)}\n                y={roundForSvg(y)}\n                fontSize={this.fontSize}\n                dy={dyFromAlign(VerticalAlign.bottom)}\n                textAnchor={anchor}\n            >\n                {this.lineConfig.label}\n            </text>\n        )\n    }\n\n    override render(): React.ReactElement | null {\n        if (!this.lineCoordinates) return null\n\n        const { x, y1, y2 } = this.lineCoordinates\n\n        return (\n            <g id={makeFigmaId(\"comparison-line\", this.lineConfig.label)}>\n                <line\n                    x1={roundForSvg(x)}\n                    y1={roundForSvg(y1)}\n                    x2={roundForSvg(x)}\n                    y2={roundForSvg(y2)}\n                    style={COMPARISON_LINE_STYLE}\n                />\n                {this.renderLabel()}\n            </g>\n        )\n    }\n}\n","var $ = Object.defineProperty;\nvar O = (l, i, e) => i in l ? $(l, i, { enumerable: !0, configurable: !0, writable: !0, value: e }) : l[i] = e;\nvar n = (l, i, e) => (O(l, typeof i != \"symbol\" ? i + \"\" : i, e), e);\nconst g = {\n  PI: Math.PI,\n  E: Math.E,\n  LN2: Math.LN2,\n  LN10: Math.LN10,\n  LOG2E: Math.LOG2E,\n  LOG10E: Math.LOG10E,\n  SQRT1_2: Math.SQRT1_2,\n  SQRT2: Math.SQRT2\n};\nclass p {\n  static throwIfNotNumber(i) {\n    if (typeof i === \"string\")\n      throw new Error(\"Strings are not allowed in math operations\");\n  }\n}\nclass V {\n  static throwIfNotNumber(i) {\n    if (typeof i === \"string\")\n      throw new Error(\"Strings are not allowed in math operations\");\n  }\n}\nclass h {\n  static createOperatorExpression(i, e, t) {\n    if (i === \"^\")\n      return new b(e, t);\n    if ([\"*\", \"/\"].includes(i))\n      return new x(i, e, t);\n    if ([\"+\", \"-\"].includes(i))\n      return new E(i, e, t);\n    if ([\"<\", \">\", \"<=\", \">=\", \"=\", \"!=\"].includes(i))\n      return new d(i, e, t);\n    throw new Error(`Unknown operator: ${i}`);\n  }\n  evaluate(i = {}) {\n    throw new Error(\"Empty Expression - Must be defined in child classes\");\n  }\n  toString() {\n    return \"\";\n  }\n}\nclass S extends h {\n  constructor(e) {\n    super();\n    n(this, \"innerExpression\");\n    if (this.innerExpression = e, !(this.innerExpression instanceof h))\n      throw new Error(\"No inner expression given for bracket expression\");\n  }\n  evaluate(e = {}) {\n    return this.innerExpression.evaluate(e);\n  }\n  toString() {\n    return `(${this.innerExpression.toString()})`;\n  }\n}\nclass w extends h {\n  constructor(e, t = \"number\") {\n    super();\n    n(this, \"value\");\n    n(this, \"type\");\n    switch (this.value = Number(e), t) {\n      case \"number\":\n        if (this.value = Number(e), isNaN(this.value))\n          throw new Error(\"Cannot parse number: \" + e);\n        break;\n      case \"string\":\n        this.value = String(e);\n        break;\n      default:\n        throw new Error(\"Invalid value type: \" + t);\n    }\n    this.type = t;\n  }\n  evaluate() {\n    return this.value;\n  }\n  toString() {\n    switch (this.type) {\n      case \"number\":\n        return String(this.value);\n      case \"string\":\n        return '\"' + this.value + '\"';\n      default:\n        throw new Error(\"Invalid type\");\n    }\n  }\n}\nclass E extends h {\n  constructor(e, t, r) {\n    super();\n    n(this, \"operator\");\n    n(this, \"left\");\n    n(this, \"right\");\n    if (![\"+\", \"-\"].includes(e))\n      throw new Error(`Operator not allowed in Plus/Minus expression: ${e}`);\n    this.operator = e, this.left = t, this.right = r;\n  }\n  evaluate(e = {}) {\n    const t = this.left.evaluate(e), r = this.right.evaluate(e);\n    if (p.throwIfNotNumber(t), p.throwIfNotNumber(r), this.operator === \"+\")\n      return Number(t) + Number(r);\n    if (this.operator === \"-\")\n      return Number(t) - Number(r);\n    throw new Error(\"Unknown operator for PlusMinus expression\");\n  }\n  toString() {\n    return `${this.left.toString()} ${this.operator} ${this.right.toString()}`;\n  }\n}\nclass x extends h {\n  constructor(e, t, r) {\n    super();\n    n(this, \"operator\");\n    n(this, \"left\");\n    n(this, \"right\");\n    if (![\"*\", \"/\"].includes(e))\n      throw new Error(`Operator not allowed in Multiply/Division expression: ${e}`);\n    this.operator = e, this.left = t, this.right = r;\n  }\n  evaluate(e = {}) {\n    const t = this.left.evaluate(e), r = this.right.evaluate(e);\n    if (p.throwIfNotNumber(t), p.throwIfNotNumber(r), this.operator === \"*\")\n      return Number(t) * Number(r);\n    if (this.operator === \"/\")\n      return Number(t) / Number(r);\n    throw new Error(\"Unknown operator for MultDiv expression\");\n  }\n  toString() {\n    return `${this.left.toString()} ${this.operator} ${this.right.toString()}`;\n  }\n}\nclass b extends h {\n  constructor(e, t) {\n    super();\n    n(this, \"base\");\n    n(this, \"exponent\");\n    this.base = e, this.exponent = t;\n  }\n  evaluate(e = {}) {\n    const t = this.base.evaluate(e), r = this.exponent.evaluate(e);\n    return p.throwIfNotNumber(t), p.throwIfNotNumber(r), Math.pow(Number(t), Number(r));\n  }\n  toString() {\n    return `${this.base.toString()}^${this.exponent.toString()}`;\n  }\n}\nclass d extends h {\n  constructor(e, t, r) {\n    super();\n    n(this, \"operator\");\n    n(this, \"left\");\n    n(this, \"right\");\n    if (![\"<\", \">\", \"<=\", \">=\", \"=\", \"!=\"].includes(e))\n      throw new Error(`Operator not allowed in Logical expression: ${e}`);\n    this.operator = e, this.left = t, this.right = r;\n  }\n  evaluate(e = {}) {\n    const t = this.left.evaluate(e), r = this.right.evaluate(e);\n    switch (this.operator) {\n      case \"<\":\n        return t < r ? 1 : 0;\n      case \">\":\n        return t > r ? 1 : 0;\n      case \"<=\":\n        return t <= r ? 1 : 0;\n      case \">=\":\n        return t >= r ? 1 : 0;\n      case \"=\":\n        return t === r ? 1 : 0;\n      case \"!=\":\n        return t !== r ? 1 : 0;\n    }\n    throw new Error(\"Unknown operator for Logical expression\");\n  }\n  toString() {\n    return `${this.left.toString()} ${this.operator} ${this.right.toString()}`;\n  }\n}\nclass k extends h {\n  constructor(e, t, r = null) {\n    super();\n    n(this, \"fn\");\n    n(this, \"varPath\");\n    n(this, \"argumentExpressions\");\n    n(this, \"formulaObject\");\n    n(this, \"blacklisted\");\n    this.fn = e != null ? e : \"\", this.varPath = this.fn.split(\".\"), this.argumentExpressions = t || [], this.formulaObject = r, this.blacklisted = void 0;\n  }\n  evaluate(e = {}) {\n    var a;\n    e = e || {};\n    const t = this.argumentExpressions.map((s) => s.evaluate(e));\n    try {\n      let s = m(e, this.varPath, this.fn);\n      if (s instanceof Function)\n        return s.apply(this, t);\n    } catch (s) {\n    }\n    let r;\n    try {\n      r = m((a = this.formulaObject) != null ? a : {}, this.varPath, this.fn);\n    } catch (s) {\n    }\n    if (this.formulaObject && r instanceof Function) {\n      if (this.isBlacklisted())\n        throw new Error(\"Blacklisted function called: \" + this.fn);\n      return r.apply(this.formulaObject, t);\n    }\n    try {\n      const s = m(Math, this.varPath, this.fn);\n      if (s instanceof Function)\n        return t.forEach((o) => {\n          V.throwIfNotNumber(o);\n        }), s.apply(this, t);\n    } catch (s) {\n    }\n    throw new Error(\"Function not found: \" + this.fn);\n  }\n  toString() {\n    return `${this.fn}(${this.argumentExpressions.map((e) => e.toString()).join(\", \")})`;\n  }\n  isBlacklisted() {\n    return this.blacklisted === void 0 && (this.blacklisted = N.functionBlacklist.includes(\n      this.formulaObject ? this.formulaObject[this.fn] : null\n    )), this.blacklisted;\n  }\n}\nfunction m(l, i, e) {\n  let t = l;\n  for (let r of i) {\n    if (typeof t != \"object\")\n      throw new Error(`Cannot evaluate ${r}, property not found (from path ${e})`);\n    if (t[r] === void 0)\n      throw new Error(`Cannot evaluate ${r}, property not found (from path ${e})`);\n    t = t[r];\n  }\n  if (typeof t == \"object\")\n    throw new Error(\"Invalid value\");\n  return t;\n}\nclass y extends h {\n  constructor(e, t = null) {\n    super();\n    n(this, \"fullPath\");\n    n(this, \"varPath\");\n    n(this, \"formulaObject\");\n    this.formulaObject = t, this.fullPath = e, this.varPath = e.split(\".\");\n  }\n  evaluate(e = {}) {\n    var r;\n    let t;\n    try {\n      t = m(e, this.varPath, this.fullPath);\n    } catch (a) {\n    }\n    if (t === void 0 && (t = m((r = this.formulaObject) != null ? r : {}, this.varPath, this.fullPath)), typeof t == \"function\" || typeof t == \"object\")\n      throw new Error(`Cannot use ${this.fullPath} as value: It contains a non-numerical value.`);\n    return t;\n  }\n  toString() {\n    return `${this.varPath.join(\".\")}`;\n  }\n}\nconst u = class u {\n  /**\n   * Creates a new Formula instance\n   *\n   * Optional configuration can be set in the options object:\n   *\n   * - memoization (bool): If true, results are stored and re-used when evaluate() is called with the same parameters\n   *\n   * @param {String} fStr The formula string, e.g. 'sin(x)/cos(y)'\n   * @param {Object} options An options object. Supported options:\n   *    - memoization (bool): If true, results are stored and re-used when evaluate() is called with the same parameters\n   * @param {Formula} parentFormula Internally used to build a Formula AST\n   */\n  constructor(i, e = {}) {\n    n(this, \"formulaExpression\");\n    n(this, \"options\");\n    n(this, \"formulaStr\");\n    n(this, \"_variables\");\n    n(this, \"_memory\");\n    this.formulaExpression = null, this.options = { memoization: !1, ...e }, this.formulaStr = \"\", this._variables = [], this._memory = {}, this.setFormula(i);\n  }\n  /**\n   * Re-sets the given String and parses it to a formula expression. Can be used after initialization,\n   * to re-use the Formula object.\n   *\n   * @param {String} formulaString The formula string to set/parse\n   * @return {this} The Formula object (this)\n   */\n  setFormula(i) {\n    return i && (this.formulaExpression = null, this._variables = [], this._memory = {}, this.formulaStr = i, this.formulaExpression = this.parse(i)), this;\n  }\n  /**\n   * Enable memoization: An expression is only evaluated once for the same input.\n   * Further evaluations with the same input will return the in-memory stored result.\n   */\n  enableMemoization() {\n    this.options.memoization = !0;\n  }\n  /**\n   * Disable in-memory memoization: each call to evaluate() is executed from scratch.\n   */\n  disableMemoization() {\n    this.options.memoization = !1, this._memory = {};\n  }\n  /**\n   * Splits the given string by ',', makes sure the ',' is not within\n   * a sub-expression\n   * e.g.: str = \"x,pow(3,4)\" returns 2 elements: x and pow(3,4).\n   */\n  splitFunctionParams(i) {\n    let e = 0, t = \"\";\n    const r = [];\n    for (let a of i.split(\"\"))\n      if (a === \",\" && e === 0)\n        r.push(t), t = \"\";\n      else if (a === \"(\")\n        e++, t += a;\n      else if (a === \")\") {\n        if (e--, t += a, e < 0)\n          throw new Error(\"ERROR: Too many closing parentheses!\");\n      } else\n        t += a;\n    if (e !== 0)\n      throw new Error(\"ERROR: Too many opening parentheses!\");\n    return t.length > 0 && r.push(t), r;\n  }\n  /**\n   * Cleans the input string from unnecessary whitespace,\n   * and replaces some known constants:\n   */\n  cleanupInputFormula(i) {\n    const e = [];\n    return i.split('\"').forEach((r, a) => {\n      a % 2 === 0 && (r = r.replace(/[\\s]+/g, \"\"), Object.keys(g).forEach((s) => {\n        r = r.replace(new RegExp(`\\\\b${s}\\\\b`, \"g\"), `[${s}]`);\n      })), e.push(r);\n    }), e.join('\"');\n  }\n  /**\n   * Parses the given formula string by using a state machine into a single Expression object,\n   * which represents an expression tree (aka AST).\n   *\n   * First, we split the string into 'expression': An expression can be:\n   *   - a number, e.g. '3.45'\n   *   - an unknown variable, e.g. 'x'\n   *   - a single char operator, such as '*','+' etc...\n   *   - a named variable, in [], e.g. [myvar]\n   *   - a function, such as sin(x)\n   *   - a parenthessed expression, containing other expressions\n   *\n   * We want to create an expression tree out of the string. This is done in 2 stages:\n   * 1. form single expressions from the string: parse the string into known expression objects:\n   *   - numbers/[variables]/\"strings\"\n   *   - operators\n   *   - braces (with a sub-expression)\n   *   - functions (with sub-expressions (aka argument expressions))\n   *   This will lead to an array of expressions.\n   *  As an example:\n   *  \"2 + 3 * (4 + 3 ^ 5) * sin(PI * x)\" forms an array of the following expressions:\n   *  `[2, +, 3, *, bracketExpr(4,+,3,^,5), * , functionExpr(PI,*,x)]`\n   * 2. From the raw expression array we form an expression tree by evaluating the expressions in the correct order:\n   *    e.g.:\n   *  the expression array `[2, +, 3, *, bracketExpr(4,+,3,^,5), * , functionExpr(PI,*,x)]` will be transformed into the expression tree:\n   *  ```\n   *         root expr:  (+)\n   *                     / \\\n   *                    2    (*)\n   *                        / \\\n   *                     (*)  functionExpr(...)\n   *                     / \\\n   *                    3   (bracket(..))\n   * ```\n   *\n   * In the end, we have a single root expression node, which then can be evaluated in the evaluate() function.\n   *\n   * @param {String} str The formula string, e.g. '3*sin(PI/x)'\n   * @returns {Expression} An expression object, representing the expression tree\n   */\n  parse(i) {\n    return i = this.cleanupInputFormula(i), this._do_parse(i);\n  }\n  /**\n   * @see parse(): this is the recursive parse function, without the clean string part.\n   * @param {String} str\n   * @returns {Expression} An expression object, representing the expression tree\n   */\n  _do_parse(i) {\n    let e = i.length - 1, t = 0, r = \"initial\", a = [], s = \"\", o = \"\", v = null, f = 0, c = \"\";\n    for (; t <= e; ) {\n      switch (r) {\n        case \"initial\":\n          if (s = i.charAt(t), s.match(/[0-9.]/))\n            r = \"within-nr\", o = \"\", t--;\n          else if (this.isOperator(s)) {\n            if (s === \"-\" && (a.length === 0 || this.isOperatorExpr(a[a.length - 1]))) {\n              r = \"within-nr\", o = \"-\";\n              break;\n            }\n            if (t === e || this.isOperatorExpr(a[a.length - 1])) {\n              r = \"invalid\";\n              break;\n            } else\n              a.push(\n                h.createOperatorExpression(s, new h(), new h())\n              ), r = \"initial\";\n          } else if ([\">\", \"<\", \"=\", \"!\"].includes(s))\n            if (t === e) {\n              r = \"invalid\";\n              break;\n            } else\n              r = \"within-logical-operator\", o = s;\n          else\n            s === \"(\" ? (r = \"within-parentheses\", o = \"\", f = 0) : s === \"[\" ? (r = \"within-named-var\", o = \"\") : s.match(/[\"']/) ? (r = \"within-string\", c = s, o = \"\") : s.match(/[a-zA-Z]/) && (t < e && i.charAt(t + 1).match(/[a-zA-Z0-9_.]/) ? (o = s, r = \"within-func\") : (a.length > 0 && a[a.length - 1] instanceof w && a.push(\n              h.createOperatorExpression(\"*\", new h(), new h())\n            ), a.push(new y(s, this)), this.registerVariable(s), r = \"initial\", o = \"\"));\n          break;\n        case \"within-nr\":\n          s = i.charAt(t), s.match(/[0-9.]/) ? (o += s, t === e && (a.push(new w(o)), r = \"initial\")) : (o === \"-\" && (o = \"-1\"), a.push(new w(o)), o = \"\", r = \"initial\", t--);\n          break;\n        case \"within-func\":\n          if (s = i.charAt(t), s.match(/[a-zA-Z0-9_.]/))\n            o += s;\n          else if (s === \"(\")\n            v = o, o = \"\", f = 0, r = \"within-func-parentheses\";\n          else\n            throw new Error(\"Wrong character for function at position \" + t);\n          break;\n        case \"within-named-var\":\n          if (s = i.charAt(t), s === \"]\")\n            a.push(new y(o, this)), this.registerVariable(o), o = \"\", r = \"initial\";\n          else if (s.match(/[a-zA-Z0-9_.]/))\n            o += s;\n          else\n            throw new Error(\"Character not allowed within named variable: \" + s);\n          break;\n        case \"within-string\":\n          s = i.charAt(t), s === c ? (a.push(new w(o, \"string\")), o = \"\", r = \"initial\", c = \"\") : o += s;\n          break;\n        case \"within-parentheses\":\n        case \"within-func-parentheses\":\n          if (s = i.charAt(t), c)\n            s === c && (c = \"\"), o += s;\n          else if (s === \")\")\n            if (f <= 0) {\n              if (r === \"within-parentheses\")\n                a.push(new S(this._do_parse(o)));\n              else if (r === \"within-func-parentheses\") {\n                let M = this.splitFunctionParams(o).map((P) => this._do_parse(P));\n                a.push(new k(v, M, this)), v = null;\n              }\n              r = \"initial\";\n            } else\n              f--, o += s;\n          else\n            s === \"(\" ? (f++, o += s) : (s.match(/[\"']/) && (c = s), o += s);\n          break;\n        case \"within-logical-operator\":\n          s = i.charAt(t), s === \"=\" && (o += s, t++), a.push(h.createOperatorExpression(o, new h(), new h())), o = \"\", r = \"initial\", t--;\n          break;\n      }\n      t++;\n    }\n    if (r !== \"initial\")\n      throw new Error(\"Could not parse formula: Syntax error.\");\n    return this.buildExpressionTree(a);\n  }\n  /**\n   * @see parse(): Builds an expression tree from the given expression array.\n   * Builds a tree with a single root expression in the correct order of operator precedence.\n   *\n   * Note that the given expression objects are modified and linked.\n   *\n   * @param {*} expressions\n   * @return {Expression} The root Expression of the built expression tree\n   */\n  buildExpressionTree(i) {\n    if (i.length < 1)\n      throw new Error(\"No expression given!\");\n    const e = [...i];\n    let t = 0, r = null;\n    for (; t < e.length; )\n      if (r = e[t], r instanceof b) {\n        if (t === 0 || t === e.length - 1)\n          throw new Error(\"Wrong operator position!\");\n        r.base = e[t - 1], r.exponent = e[t + 1], e[t - 1] = r, e.splice(t, 2);\n      } else\n        t++;\n    for (t = 0, r = null; t < e.length; )\n      if (r = e[t], r instanceof x) {\n        if (t === 0 || t === e.length - 1)\n          throw new Error(\"Wrong operator position!\");\n        r.left = e[t - 1], r.right = e[t + 1], e[t - 1] = r, e.splice(t, 2);\n      } else\n        t++;\n    for (t = 0, r = null; t < e.length; )\n      if (r = e[t], r instanceof E) {\n        if (t === 0 || t === e.length - 1)\n          throw new Error(\"Wrong operator position!\");\n        r.left = e[t - 1], r.right = e[t + 1], e[t - 1] = r, e.splice(t, 2);\n      } else\n        t++;\n    for (t = 0, r = null; t < e.length; )\n      if (r = e[t], r instanceof d) {\n        if (t === 0 || t === e.length - 1)\n          throw new Error(\"Wrong operator position!\");\n        r.left = e[t - 1], r.right = e[t + 1], e[t - 1] = r, e.splice(t, 2);\n      } else\n        t++;\n    if (e.length !== 1)\n      throw new Error(\"Could not parse formula: incorrect syntax?\");\n    return e[0];\n  }\n  isOperator(i) {\n    return typeof i == \"string\" && i.match(/[+\\-*/^]/);\n  }\n  isOperatorExpr(i) {\n    return i instanceof E || i instanceof x || i instanceof b || i instanceof d;\n  }\n  registerVariable(i) {\n    this._variables.indexOf(i) < 0 && this._variables.push(i);\n  }\n  getVariables() {\n    return this._variables;\n  }\n  /**\n   * Evaluates a Formula by delivering values for the Formula's variables.\n   * E.g. if the formula is '3*x^2 + 2*x + 4', you should call `evaulate` as follows:\n   *\n   * evaluate({x:2}) --> Result: 20\n   *\n   * @param {ValueObject|Array<ValueObject>} valueObj An object containing values for variables and (unknown) functions,\n   *   or an array of such objects: If an array is given, all objects are evaluated and the results\n   *   also returned as array.\n   * @return {Number|String|(Number|String)[]} The evaluated result, or an array with results\n   */\n  evaluate(i) {\n    if (i instanceof Array)\n      return i.map((t) => this.evaluate(t));\n    let e = this.getExpression();\n    if (!(e instanceof h))\n      throw new Error(\"No expression set: Did you init the object with a Formula?\");\n    if (this.options.memoization) {\n      let t = this.resultFromMemory(i);\n      return t !== null || (t = e.evaluate({ ...g, ...i }), this.storeInMemory(i, t)), t;\n    }\n    return e.evaluate({ ...g, ...i });\n  }\n  hashValues(i) {\n    return JSON.stringify(i);\n  }\n  resultFromMemory(i) {\n    let e = this.hashValues(i), t = this._memory[e];\n    return t !== void 0 ? t : null;\n  }\n  storeInMemory(i, e) {\n    this._memory[this.hashValues(i)] = e;\n  }\n  getExpression() {\n    return this.formulaExpression;\n  }\n  getExpressionString() {\n    return this.formulaExpression ? this.formulaExpression.toString() : \"\";\n  }\n  static calc(i, e = null, t = {}) {\n    return e = e != null ? e : {}, new u(i, t).evaluate(e);\n  }\n};\nn(u, \"Expression\", h), n(u, \"BracketExpression\", S), n(u, \"PowerExpression\", b), n(u, \"MultDivExpression\", x), n(u, \"PlusMinusExpression\", E), n(u, \"LogicalExpression\", d), n(u, \"ValueExpression\", w), n(u, \"VariableExpression\", y), n(u, \"FunctionExpression\", k), n(u, \"MATH_CONSTANTS\", g), // Create a function blacklist:\nn(u, \"functionBlacklist\", Object.getOwnPropertyNames(u.prototype).filter((i) => u.prototype[i] instanceof Function).map((i) => u.prototype[i]));\nlet N = u;\nexport {\n  N as default\n};\n//# sourceMappingURL=fparser.js.map\n","import Formula from \"fparser\"\nimport { scaleLinear, scaleLog } from \"d3-scale\"\nimport { ScaleType } from \"@ourworldindata/types\"\n\nexport function generateComparisonLinePoints(\n    lineFunction: string = \"x\",\n    xScaleDomain: [number, number],\n    yScaleDomain: [number, number],\n    xScaleType: ScaleType,\n    yScaleType: ScaleType\n): [number, number][] {\n    const formula = parseEquation(lineFunction)\n    const yFunc = (x: number): number | undefined =>\n        evalFormula(formula, { x }, undefined)\n\n    // Construct control data by running the equation across sample points\n    const numPoints = 500\n\n    const scaleFunction = xScaleType === ScaleType.log ? scaleLog : scaleLinear\n    const scale = scaleFunction().domain(xScaleDomain).range([0, numPoints])\n\n    const controlData: Array<[number, number]> = []\n    for (let i = 0; i < numPoints; i++) {\n        const x = scale.invert(i)\n        const y = yFunc(x)\n\n        if (y === undefined || Number.isNaN(x) || Number.isNaN(y)) continue\n        if (xScaleType === ScaleType.log && x <= 0) continue\n        if (yScaleType === ScaleType.log && y <= 0) continue\n        if (y > yScaleDomain[1]) continue\n        controlData.push([x, y])\n    }\n\n    return controlData\n}\n\nexport function evalFormula<D>(\n    expr: Formula | undefined,\n    context: Record<string, number>,\n    defaultOnError: D\n): number | D {\n    if (expr === undefined) return defaultOnError\n    try {\n        return expr.evaluate(context) as number\n    } catch {\n        return defaultOnError\n    }\n}\n\nexport function parseEquation(equation: string): Formula | undefined {\n    try {\n        const formula = new Formula(equation)\n        formula.ln = Math.log\n        formula.e = Math.E\n        return formula\n    } catch (e) {\n        console.error(e)\n        return undefined\n    }\n}\n","import * as React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { line as d3_line, curveLinear } from \"d3-shape\"\nimport {\n    guid,\n    PointVector,\n    makeFigmaId,\n    roundForSvg,\n} from \"@ourworldindata/utils\"\nimport { CustomComparisonLineConfig } from \"@ourworldindata/types\"\nimport { generateComparisonLinePoints } from \"./ComparisonLineGenerator\"\nimport { Halo } from \"@ourworldindata/components\"\nimport { ClipPath, makeClipPath } from \"../chart/ChartUtils\"\nimport {\n    COMPARISON_LINE_STYLE,\n    COMPARISON_LINE_LABEL_STYLE,\n} from \"./ComparisonLineConstants\"\nimport { ComparisonLineProps } from \"./ComparisonLine\"\n\n@observer\nexport class CustomComparisonLine extends React.Component<\n    ComparisonLineProps<CustomComparisonLineConfig>\n> {\n    private readonly renderUid = guid()\n    private readonly pathId = `path-${this.renderUid}`\n\n    constructor(props: ComparisonLineProps<CustomComparisonLineConfig>) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed private get fontSize(): number {\n        return this.props.dualAxis.comparisonLines.fontSize\n    }\n\n    @computed get clipPath(): ClipPath {\n        return makeClipPath({\n            name: \"axisBounds\",\n            renderUid: this.renderUid,\n            box: this.props.dualAxis.innerBounds,\n        })\n    }\n\n    @computed private get controlData(): [number, number][] {\n        const { comparisonLine, dualAxis } = this.props\n        const { horizontalAxis, verticalAxis } = dualAxis\n\n        return generateComparisonLinePoints(\n            comparisonLine.yEquals,\n            horizontalAxis.domain,\n            verticalAxis.domain,\n            horizontalAxis.scaleType,\n            verticalAxis.scaleType\n        )\n    }\n\n    @computed private get linePath(): string | null {\n        const { controlData } = this\n        const { horizontalAxis, verticalAxis } = this.props.dualAxis\n        const line = d3_line()\n            .curve(curveLinear)\n            .x((d) => roundForSvg(horizontalAxis.place(d[0])))\n            .y((d) => roundForSvg(verticalAxis.place(d[1])))\n        return line(controlData)\n    }\n\n    @computed private get placedLabel():\n        | { x: number; y: number; angle: number; text: string }\n        | undefined {\n        const { label } = this.props.comparisonLine\n        if (!label) return\n\n        const { controlData } = this\n        const { horizontalAxis, verticalAxis, innerBounds } =\n            this.props.dualAxis\n\n        // Find the points of the line that are actually placeable on the chart\n        const linePoints = controlData\n            .map(\n                (d) =>\n                    new PointVector(\n                        horizontalAxis.place(d[0]),\n                        verticalAxis.place(d[1])\n                    )\n            )\n            .filter((p) => innerBounds.contains(p))\n        if (!linePoints.length) return\n\n        const labelPosition = linePoints[Math.floor(linePoints.length / 2)]\n        const p1 = linePoints[0]\n        const p2 = linePoints[linePoints.length - 1]\n        const angle = (Math.atan2(p2.y - p1.y, p2.x - p1.x) * 180) / Math.PI\n\n        return {\n            x: labelPosition.x,\n            y: labelPosition.y,\n            angle: angle,\n            text: label,\n        }\n    }\n\n    private renderLabel(): React.ReactElement | null {\n        const { pathId, renderUid, placedLabel } = this\n\n        if (!placedLabel) return null\n\n        return (\n            <text\n                style={{\n                    ...COMPARISON_LINE_LABEL_STYLE,\n                    textAnchor: \"end\",\n                    fontSize: this.fontSize,\n                }}\n                clipPath={this.clipPath.id}\n            >\n                <Halo id={`halo-${renderUid}`} fontSize={this.fontSize}>\n                    <textPath\n                        baselineShift=\"-0.2rem\"\n                        href={`#${pathId}`}\n                        startOffset=\"90%\"\n                    >\n                        {placedLabel.text}\n                    </textPath>\n                </Halo>\n            </text>\n        )\n    }\n\n    override render(): React.ReactElement | null {\n        if (!this.linePath) return null\n\n        return (\n            <g\n                id={makeFigmaId(\n                    \"comparison-line\",\n                    this.props.comparisonLine.label\n                )}\n            >\n                {this.clipPath.element}\n                <path\n                    style={COMPARISON_LINE_STYLE}\n                    id={this.pathId}\n                    d={this.linePath}\n                    clipPath={this.clipPath.id}\n                />\n                {this.renderLabel()}\n            </g>\n        )\n    }\n}\n","import { DualAxis } from \"../axis/Axis\"\nimport {\n    ComparisonLineConfig,\n    VerticalComparisonLineConfig,\n} from \"@ourworldindata/types\"\nimport { VerticalComparisonLine } from \"./VerticalComparisonLine\"\nimport { CustomComparisonLine } from \"./CustomComparisonLine\"\nimport { isValidVerticalComparisonLineConfig } from \"./ComparisonLineHelpers\"\n\nexport interface ComparisonLineProps<LineConfig extends ComparisonLineConfig> {\n    dualAxis: DualAxis\n    comparisonLine: LineConfig\n}\n\nexport const ComparisonLine = <LineConfig extends ComparisonLineConfig>(\n    props: ComparisonLineProps<LineConfig>\n) => {\n    if (isVerticalComparisonLineProps(props)) {\n        return <VerticalComparisonLine {...props} />\n    } else {\n        return <CustomComparisonLine {...props} />\n    }\n}\n\nfunction isVerticalComparisonLineProps(\n    props: ComparisonLineProps<ComparisonLineConfig>\n): props is ComparisonLineProps<VerticalComparisonLineConfig> {\n    return isValidVerticalComparisonLineConfig(props.comparisonLine)\n}\n","import * as React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    Bounds,\n    HorizontalAlign,\n    Point,\n    Position,\n    VerticalAlign,\n    dyFromAlign,\n    makeFigmaId,\n    roundForSvg,\n    textAnchorFromAlign,\n} from \"@ourworldindata/utils\"\nimport { VerticalAxis, HorizontalAxis, DualAxis } from \"./Axis\"\nimport classNames from \"clsx\"\nimport { GRAPHER_DARK_TEXT } from \"../color/ColorConstants\"\nimport { ScaleType, DetailsMarker } from \"@ourworldindata/types\"\nimport { MarkdownTextWrapSvg } from \"@ourworldindata/components\"\nimport { ComparisonLine } from \"../comparisonLine/ComparisonLine\"\n\nexport const TICK_COLOR = \"#ddd\"\nconst FAINT_TICK_COLOR = \"#eee\"\nexport const SOLID_TICK_COLOR = \"#999\"\n\nexport const GRID_LINE_DASH_PATTERN = \"4,4\"\n\ninterface VerticalAxisGridLinesProps {\n    axis: VerticalAxis\n    bounds: Bounds\n    strokeWidth?: number\n    dashPattern?: string\n}\n\n@observer\nexport class VerticalAxisGridLines extends React.Component<VerticalAxisGridLinesProps> {\n    override render(): React.ReactElement {\n        const { bounds, strokeWidth } = this.props\n\n        const axis = this.props.axis.clone()\n        axis.range = bounds.yRange()\n\n        return (\n            <g\n                id={makeFigmaId(\"horizontal-grid-lines\")}\n                className={classNames(\"AxisGridLines\", \"horizontalLines\")}\n            >\n                {axis.getTickValues().map((t) => {\n                    const color = t.faint\n                        ? FAINT_TICK_COLOR\n                        : t.solid\n                          ? SOLID_TICK_COLOR\n                          : TICK_COLOR\n                    const dasharray =\n                        this.props.dashPattern ?? GRID_LINE_DASH_PATTERN\n\n                    const className = t.value === 0 ? \"zero-line\" : undefined\n\n                    return (\n                        <line\n                            id={makeFigmaId(axis.formatTick(t.value))}\n                            className={className}\n                            key={t.value}\n                            x1={roundForSvg(bounds.left)}\n                            y1={roundForSvg(axis.place(t.value))}\n                            x2={roundForSvg(bounds.right)}\n                            y2={roundForSvg(axis.place(t.value))}\n                            stroke={color}\n                            strokeWidth={strokeWidth}\n                            strokeDasharray={t.solid ? undefined : dasharray}\n                        />\n                    )\n                })}\n            </g>\n        )\n    }\n}\n\ninterface HorizontalAxisGridLinesProps {\n    axis: HorizontalAxis\n    bounds: Bounds\n    strokeWidth?: number\n    dashPattern?: string\n}\n\n@observer\nexport class HorizontalAxisGridLines extends React.Component<HorizontalAxisGridLinesProps> {\n    override render(): React.ReactElement {\n        const { strokeWidth, bounds } = this.props\n\n        const axis = this.props.axis.clone()\n        axis.range = bounds.xRange()\n\n        return (\n            <g\n                id={makeFigmaId(\"vertical-grid-lines\")}\n                className={classNames(\"AxisGridLines\", \"verticalLines\")}\n            >\n                {axis.getTickValues().map((t) => {\n                    const color = t.faint\n                        ? FAINT_TICK_COLOR\n                        : t.solid\n                          ? SOLID_TICK_COLOR\n                          : TICK_COLOR\n                    const dasharray =\n                        this.props.dashPattern ?? GRID_LINE_DASH_PATTERN\n\n                    return (\n                        <line\n                            id={makeFigmaId(axis.formatTick(t.value))}\n                            key={t.value}\n                            x1={roundForSvg(axis.place(t.value))}\n                            y1={roundForSvg(bounds.bottom)}\n                            x2={roundForSvg(axis.place(t.value))}\n                            y2={roundForSvg(bounds.top)}\n                            stroke={color}\n                            strokeWidth={strokeWidth}\n                            strokeDasharray={t.solid ? undefined : dasharray}\n                        />\n                    )\n                })}\n            </g>\n        )\n    }\n}\n\ninterface HorizontalAxisZeroLineProps {\n    axis: HorizontalAxis\n    bounds: Bounds\n    strokeWidth?: number\n    align?: HorizontalAlign\n    color?: string\n}\n\n@observer\nexport class HorizontalAxisZeroLine extends React.Component<HorizontalAxisZeroLineProps> {\n    override render(): React.ReactElement {\n        const {\n            bounds,\n            align = HorizontalAlign.center,\n            strokeWidth = 1,\n            color = SOLID_TICK_COLOR,\n        } = this.props\n\n        const axis = this.props.axis.clone()\n        axis.range = bounds.xRange()\n\n        // the zero line is either drawn at the center of the zero tick\n        // or at the edge of the tick, either to the left or to the right\n        const offset =\n            align === HorizontalAlign.center\n                ? 0\n                : align === HorizontalAlign.right\n                  ? -strokeWidth / 2\n                  : strokeWidth / 2\n        const x = axis.place(0) + offset\n\n        return (\n            <line\n                id={makeFigmaId(\"vertical-zero-line\")}\n                x1={roundForSvg(x)}\n                y1={roundForSvg(bounds.bottom)}\n                x2={roundForSvg(x)}\n                y2={roundForSvg(bounds.top)}\n                stroke={color}\n                strokeWidth={strokeWidth}\n            />\n        )\n    }\n}\n\ninterface VerticalAxisZeroLineProps {\n    axis: VerticalAxis\n    bounds: Bounds\n    stroke?: string\n    strokeWidth?: number\n    strokeDasharray?: string\n}\n\n@observer\nexport class VerticalAxisZeroLine extends React.Component<VerticalAxisZeroLineProps> {\n    override render(): React.ReactElement {\n        const {\n            bounds,\n            stroke = SOLID_TICK_COLOR,\n            strokeWidth = 1,\n            strokeDasharray,\n        } = this.props\n\n        const axis = this.props.axis.clone()\n        axis.range = bounds.yRange()\n\n        const y = axis.place(0)\n\n        return (\n            <line\n                id={makeFigmaId(\"horizontal-zero-line\")}\n                x1={roundForSvg(bounds.left)}\n                y1={roundForSvg(y)}\n                x2={roundForSvg(bounds.right)}\n                y2={roundForSvg(y)}\n                stroke={stroke}\n                strokeWidth={strokeWidth}\n                strokeDasharray={strokeDasharray}\n            />\n        )\n    }\n}\n\ninterface HorizontalAxisDomainLineProps {\n    bounds: Bounds\n    strokeWidth?: number\n    stroke?: string\n}\n\n@observer\nexport class HorizontalAxisDomainLine extends React.Component<HorizontalAxisDomainLineProps> {\n    override render(): React.ReactElement {\n        const { bounds, strokeWidth = 1, stroke = \"#ccc\" } = this.props\n\n        return (\n            <line\n                id={makeFigmaId(\"domain-line\")}\n                x1={roundForSvg(bounds.left)}\n                y1={roundForSvg(bounds.bottom)}\n                x2={roundForSvg(bounds.right)}\n                y2={roundForSvg(bounds.bottom)}\n                stroke={stroke}\n                strokeWidth={strokeWidth}\n            />\n        )\n    }\n}\n\ninterface DualAxisViewProps {\n    dualAxis: DualAxis\n    highlightValue?: Point\n    showTickMarks?: boolean\n    insetEdgeMarks?: boolean\n    labelColor?: string\n    tickColor?: string\n    lineWidth?: number\n    gridDashPattern?: string\n    detailsMarker?: DetailsMarker\n    showEndpointsOnly?: boolean\n}\n\n@observer\nexport class DualAxisComponent extends React.Component<DualAxisViewProps> {\n    override render(): React.ReactElement {\n        const {\n            dualAxis,\n            showTickMarks,\n            insetEdgeMarks,\n            labelColor,\n            tickColor,\n            lineWidth,\n            gridDashPattern,\n            detailsMarker,\n            showEndpointsOnly,\n        } = this.props\n        const { bounds, horizontalAxis, verticalAxis, innerBounds } = dualAxis\n\n        const verticalGridlines = verticalAxis.hideGridlines ? null : (\n            <VerticalAxisGridLines\n                axis={verticalAxis}\n                bounds={innerBounds}\n                strokeWidth={lineWidth}\n                dashPattern={gridDashPattern}\n            />\n        )\n\n        const horizontalGridlines = horizontalAxis.hideGridlines ? null : (\n            <HorizontalAxisGridLines\n                axis={horizontalAxis}\n                bounds={innerBounds}\n                strokeWidth={lineWidth}\n                dashPattern={gridDashPattern}\n            />\n        )\n\n        const verticalAxisComponent = verticalAxis.hideAxis ? null : (\n            <VerticalAxisComponent\n                bounds={bounds}\n                axis={verticalAxis}\n                labelColor={labelColor}\n                tickColor={tickColor}\n                detailsMarker={detailsMarker}\n                showEndpointsOnly={showEndpointsOnly}\n            />\n        )\n\n        const horizontalAxisComponent = horizontalAxis.hideAxis ? null : (\n            <HorizontalAxisComponent\n                bounds={bounds}\n                axis={horizontalAxis}\n                showTickMarks={showTickMarks}\n                insetEdgeMarks={insetEdgeMarks}\n                preferredAxisPosition={innerBounds.bottom}\n                labelColor={labelColor}\n                tickColor={tickColor}\n                tickMarkWidth={lineWidth}\n                detailsMarker={detailsMarker}\n                showEndpointsOnly={showEndpointsOnly}\n            />\n        )\n\n        const comparisonLines = dualAxis.comparisonLines.lines.map(\n            (line, index) => (\n                <ComparisonLine\n                    key={`${line.label}-${index}`}\n                    dualAxis={dualAxis}\n                    comparisonLine={line}\n                />\n            )\n        )\n\n        return (\n            <>\n                {horizontalAxisComponent}\n                {verticalAxisComponent}\n                {verticalGridlines}\n                {horizontalGridlines}\n                {comparisonLines}\n            </>\n        )\n    }\n}\n\ninterface VerticalAxisComponentProps {\n    bounds: Bounds\n    axis: VerticalAxis\n    showTickMarks?: boolean\n    labelColor?: string\n    tickColor?: string\n    detailsMarker?: DetailsMarker\n    showEndpointsOnly?: boolean\n}\n\n@observer\nexport class VerticalAxisComponent extends React.Component<VerticalAxisComponentProps> {\n    override render(): React.ReactElement {\n        const {\n            bounds,\n            axis,\n            labelColor,\n            tickColor,\n            detailsMarker,\n            showTickMarks,\n            showEndpointsOnly,\n        } = this.props\n        const { labelTextWrap, logNoticeTextWrap, config } = axis\n\n        const visibleTickLabels = showEndpointsOnly\n            ? axis.endpointTickLabels\n            : axis.tickLabels\n\n        const shouldShowLogNotice =\n            axis.shouldShowLogNotice &&\n            // Only show the notice if it fits in the margin\n            axis.logNoticeWidth <= axis.width\n\n        const tickX = bounds.left + axis.width - axis.tickPadding\n\n        return (\n            <g id={makeFigmaId(\"vertical-axis\")} className=\"VerticalAxis\">\n                {shouldShowLogNotice && logNoticeTextWrap && (\n                    <React.Fragment key={logNoticeTextWrap.text}>\n                        <MarkdownTextWrapSvg\n                            textWrap={logNoticeTextWrap}\n                            x={tickX}\n                            y={bounds.top}\n                            id={makeFigmaId(\"vertical-axis-log-notice\")}\n                            fill={tickColor || GRAPHER_DARK_TEXT}\n                            textAnchor={textAnchorFromAlign(\n                                HorizontalAlign.right\n                            )}\n                            fontStyle=\"italic\"\n                            detailsMarker={detailsMarker}\n                        />\n                    </React.Fragment>\n                )}\n                {labelTextWrap && (\n                    <React.Fragment key={labelTextWrap.text}>\n                        <MarkdownTextWrapSvg\n                            textWrap={labelTextWrap}\n                            x={bounds.left}\n                            y={bounds.top}\n                            id={makeFigmaId(\"vertical-axis-label\")}\n                            fill={labelColor || GRAPHER_DARK_TEXT}\n                            detailsMarker={detailsMarker}\n                        />\n                    </React.Fragment>\n                )}\n                {showTickMarks && (\n                    <g id={makeFigmaId(\"tick-marks\")}>\n                        {visibleTickLabels.map((label) => (\n                            <VerticalAxisTickMark\n                                id={makeFigmaId(label.formattedValue)}\n                                key={label.value}\n                                tickMarkYPosition={axis.place(label.value)}\n                                tickMarkLeftPosition={bounds.left + axis.width}\n                                color={SOLID_TICK_COLOR}\n                            />\n                        ))}\n                    </g>\n                )}\n                {!config.hideTickLabels && (\n                    <g id={makeFigmaId(\"tick-labels\")}>\n                        {visibleTickLabels.map((label) => {\n                            const { value, y, xAlign, yAlign, formattedValue } =\n                                label\n                            return (\n                                <text\n                                    key={value}\n                                    x={roundForSvg(tickX)}\n                                    y={roundForSvg(y)}\n                                    dy={dyFromAlign(\n                                        yAlign ?? VerticalAlign.middle\n                                    )}\n                                    textAnchor={textAnchorFromAlign(\n                                        xAlign ?? HorizontalAlign.right\n                                    )}\n                                    fill={tickColor || GRAPHER_DARK_TEXT}\n                                    fontSize={axis.tickFontSize}\n                                >\n                                    {formattedValue}\n                                </text>\n                            )\n                        })}\n                    </g>\n                )}\n            </g>\n        )\n    }\n}\n\nexport class HorizontalAxisComponent extends React.Component<{\n    bounds: Bounds\n    axis: HorizontalAxis\n    showTickMarks?: boolean\n    insetEdgeMarks?: boolean\n    preferredAxisPosition?: number\n    labelColor?: string\n    tickColor?: string\n    tickMarkWidth?: number\n    detailsMarker?: DetailsMarker\n    showEndpointsOnly?: boolean\n}> {\n    constructor(props: {\n        bounds: Bounds\n        axis: HorizontalAxis\n        showTickMarks?: boolean\n        insetEdgeMarks?: boolean\n        preferredAxisPosition?: number\n        labelColor?: string\n        tickColor?: string\n        tickMarkWidth?: number\n        detailsMarker?: DetailsMarker\n        showEndpointsOnly?: boolean\n    }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get scaleType(): ScaleType {\n        return this.props.axis.scaleType\n    }\n\n    set scaleType(scaleType: ScaleType) {\n        this.props.axis.config.scaleType = scaleType\n    }\n\n    // for scale selector. todo: cleanup\n    @computed get bounds(): Bounds {\n        const { bounds, axis } = this.props\n        if (axis.orient === Position.top)\n            return new Bounds(bounds.right, bounds.top + 30, 100, 100)\n        else return new Bounds(bounds.right, bounds.bottom - 30, 100, 100)\n    }\n\n    override render(): React.ReactElement {\n        const {\n            bounds,\n            axis,\n            showTickMarks,\n            insetEdgeMarks,\n            preferredAxisPosition,\n            labelColor,\n            tickColor,\n            tickMarkWidth = 1,\n            detailsMarker,\n            showEndpointsOnly,\n        } = this.props\n        const { labelTextWrap: label, labelOffset, orient } = axis\n        const tickSize = 5\n        const horizontalAxisLabelsOnTop = orient === Position.top\n        const labelYPosition = horizontalAxisLabelsOnTop\n            ? bounds.top\n            : bounds.bottom - (label?.height ?? 0)\n\n        const tickMarksYPosition = horizontalAxisLabelsOnTop\n            ? bounds.top + axis.height - 5\n            : (preferredAxisPosition ?? bounds.bottom)\n\n        const tickLabelYPlacement = horizontalAxisLabelsOnTop\n            ? bounds.top + labelOffset + 10\n            : bounds.bottom - labelOffset\n\n        const showTickLabels = !axis.config.hideTickLabels\n\n        const visibleTickLabels = showEndpointsOnly\n            ? axis.endpointTickLabels\n            : axis.tickLabels\n\n        return (\n            <g id={makeFigmaId(\"horizontal-axis\")} className=\"HorizontalAxis\">\n                {label && (\n                    <React.Fragment key={label.text}>\n                        <MarkdownTextWrapSvg\n                            textWrap={label}\n                            x={axis.rangeCenter}\n                            y={labelYPosition}\n                            id={makeFigmaId(\"horizontal-axis-label\")}\n                            fill={labelColor || GRAPHER_DARK_TEXT}\n                            textAnchor=\"middle\"\n                            detailsMarker={detailsMarker}\n                        />\n                    </React.Fragment>\n                )}\n                {showTickMarks && (\n                    <g id={makeFigmaId(\"tick-marks\")}>\n                        {visibleTickLabels.map((label) => {\n                            let x = axis.place(label.value)\n\n                            // Nudge the first and last tick marks inward\n                            // by half the stroke width so they sit visually\n                            // inside the chart area\n                            if (insetEdgeMarks) {\n                                const halfStroke = tickMarkWidth / 2\n                                if (x <= axis.rangeMin) x += halfStroke\n                                else if (x >= axis.rangeMax) x -= halfStroke\n                            }\n\n                            return (\n                                <line\n                                    key={label.value}\n                                    id={makeFigmaId(label.formattedValue)}\n                                    x1={roundForSvg(x)}\n                                    y1={roundForSvg(\n                                        tickMarksYPosition - tickMarkWidth / 2\n                                    )}\n                                    x2={roundForSvg(x)}\n                                    y2={roundForSvg(\n                                        tickMarksYPosition + tickSize\n                                    )}\n                                    stroke={SOLID_TICK_COLOR}\n                                    strokeWidth={tickMarkWidth}\n                                />\n                            )\n                        })}\n                    </g>\n                )}\n                {showTickLabels && (\n                    <g id={makeFigmaId(\"tick-labels\")}>\n                        {visibleTickLabels.map((label) => (\n                            <text\n                                key={label.value}\n                                x={roundForSvg(label.x)}\n                                y={roundForSvg(tickLabelYPlacement)}\n                                fill={tickColor || GRAPHER_DARK_TEXT}\n                                textAnchor={textAnchorFromAlign(\n                                    label.xAlign ?? HorizontalAlign.center\n                                )}\n                                fontSize={axis.tickFontSize}\n                            >\n                                {label.formattedValue}\n                            </text>\n                        ))}\n                    </g>\n                )}\n            </g>\n        )\n    }\n}\n\nexport class VerticalAxisTickMark extends React.Component<{\n    tickMarkLeftPosition: number\n    tickMarkYPosition: number\n    color: string\n    width?: number\n    id?: string\n}> {\n    override render(): React.ReactElement {\n        const { tickMarkYPosition, tickMarkLeftPosition, color, width, id } =\n            this.props\n        const tickSize = 5\n        const tickRight = tickMarkLeftPosition + tickSize\n        return (\n            <line\n                id={id}\n                x1={roundForSvg(tickMarkLeftPosition)}\n                y1={roundForSvg(tickMarkYPosition)}\n                x2={roundForSvg(tickRight)}\n                y2={roundForSvg(tickMarkYPosition)}\n                stroke={color}\n                strokeWidth={width}\n            />\n        )\n    }\n}\n","export default function(x) {\n  return x;\n}\n","import identity from \"./identity.js\";\n\nexport default function(transform) {\n  if (transform == null) return identity;\n  var x0,\n      y0,\n      kx = transform.scale[0],\n      ky = transform.scale[1],\n      dx = transform.translate[0],\n      dy = transform.translate[1];\n  return function(input, i) {\n    if (!i) x0 = y0 = 0;\n    var j = 2, n = input.length, output = new Array(n);\n    output[0] = (x0 += input[0]) * kx + dx;\n    output[1] = (y0 += input[1]) * ky + dy;\n    while (j < n) output[j] = input[j], ++j;\n    return output;\n  };\n}\n","export default function(array, n) {\n  var t, j = array.length, i = j - n;\n  while (i < --j) t = array[i], array[i++] = array[j], array[j] = t;\n}\n","import reverse from \"./reverse.js\";\nimport transform from \"./transform.js\";\n\nexport default function(topology, o) {\n  if (typeof o === \"string\") o = topology.objects[o];\n  return o.type === \"GeometryCollection\"\n      ? {type: \"FeatureCollection\", features: o.geometries.map(function(o) { return feature(topology, o); })}\n      : feature(topology, o);\n}\n\nfunction feature(topology, o) {\n  var id = o.id,\n      bbox = o.bbox,\n      properties = o.properties == null ? {} : o.properties,\n      geometry = object(topology, o);\n  return id == null && bbox == null ? {type: \"Feature\", properties: properties, geometry: geometry}\n      : bbox == null ? {type: \"Feature\", id: id, properties: properties, geometry: geometry}\n      : {type: \"Feature\", id: id, bbox: bbox, properties: properties, geometry: geometry};\n}\n\nexport function object(topology, o) {\n  var transformPoint = transform(topology.transform),\n      arcs = topology.arcs;\n\n  function arc(i, points) {\n    if (points.length) points.pop();\n    for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) {\n      points.push(transformPoint(a[k], k));\n    }\n    if (i < 0) reverse(points, n);\n  }\n\n  function point(p) {\n    return transformPoint(p);\n  }\n\n  function line(arcs) {\n    var points = [];\n    for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points);\n    if (points.length < 2) points.push(points[0]); // This should never happen per the specification.\n    return points;\n  }\n\n  function ring(arcs) {\n    var points = line(arcs);\n    while (points.length < 4) points.push(points[0]); // This may happen if an arc has only two points.\n    return points;\n  }\n\n  function polygon(arcs) {\n    return arcs.map(ring);\n  }\n\n  function geometry(o) {\n    var type = o.type, coordinates;\n    switch (type) {\n      case \"GeometryCollection\": return {type: type, geometries: o.geometries.map(geometry)};\n      case \"Point\": coordinates = point(o.coordinates); break;\n      case \"MultiPoint\": coordinates = o.coordinates.map(point); break;\n      case \"LineString\": coordinates = line(o.arcs); break;\n      case \"MultiLineString\": coordinates = o.arcs.map(line); break;\n      case \"Polygon\": coordinates = polygon(o.arcs); break;\n      case \"MultiPolygon\": coordinates = o.arcs.map(polygon); break;\n      default: return null;\n    }\n    return {type: type, coordinates: coordinates};\n  }\n\n  return geometry(o);\n}\n","/* eslint-disable */\n/*\nDuplication of d3-geo-projection.geoPatterson and d3-geo-projection.geoRobinson\nfor webpack bundlesize purposes, as the original module wasn't tree-shakeable\n\nCopyright 2013-2021 Mike Bostock\n\nPermission to use, copy, modify, and/or distribute this software for any purpose\nwith or without fee is hereby granted, provided that the above copyright notice\nand this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\nOF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\nTHIS SOFTWARE.\n\nMIT License for https://github.com/scijs/integrate-adaptive-simpson\n\nThe MIT License (MIT)\n\nCopyright 2015 Ricky Reusser\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n\nimport { geoProjection, GeoProjection } from \"d3-geo\"\n\nconst epsilon = 1e-6\nconst epsilon2 = 1e-12\nconst pi = Math.PI\nconst halfPi = pi / 2\nconst degrees = 180 / pi\nconst radians = pi / 180\n\n// https://github.com/d3/d3-geo-projection/blob/main/src/patterson.js\nconst pattersonK1 = 1.0148,\n    pattersonK2 = 0.23185,\n    pattersonK3 = -0.14499,\n    pattersonK4 = 0.02406,\n    pattersonC1 = pattersonK1,\n    pattersonC2 = 5 * pattersonK2,\n    pattersonC3 = 7 * pattersonK3,\n    pattersonC4 = 9 * pattersonK4,\n    pattersonYmax = 1.790857183\n\nexport function pattersonRaw(lambda: number, phi: number): [number, number] {\n    const phi2 = phi * phi\n    return [\n        lambda,\n        phi *\n            (pattersonK1 +\n                phi2 *\n                    phi2 *\n                    (pattersonK2 + phi2 * (pattersonK3 + pattersonK4 * phi2))),\n    ]\n}\n\npattersonRaw.invert = function (x: number, y: number): [number, number] {\n    if (y > pattersonYmax) y = pattersonYmax\n    else if (y < -pattersonYmax) y = -pattersonYmax\n    let yc = y,\n        delta\n\n    do {\n        // Newton-Raphson\n        const y2 = yc * yc\n        yc -= delta =\n            (yc *\n                (pattersonK1 +\n                    y2 *\n                        y2 *\n                        (pattersonK2 + y2 * (pattersonK3 + pattersonK4 * y2))) -\n                y) /\n            (pattersonC1 +\n                y2 * y2 * (pattersonC2 + y2 * (pattersonC3 + pattersonC4 * y2)))\n    } while (Math.abs(delta) > epsilon)\n\n    return [x, yc]\n}\n\nexport function geoPatterson(): GeoProjection {\n    return geoProjection(pattersonRaw).scale(139.319)\n}\n\n// https://github.com/d3/d3-geo-projection/blob/main/src/robinson.js\nconst K = [\n    [0.9986, -0.062],\n    [1.0, 0.0],\n    [0.9986, 0.062],\n    [0.9954, 0.124],\n    [0.99, 0.186],\n    [0.9822, 0.248],\n    [0.973, 0.31],\n    [0.96, 0.372],\n    [0.9427, 0.434],\n    [0.9216, 0.4958],\n    [0.8962, 0.5571],\n    [0.8679, 0.6176],\n    [0.835, 0.6769],\n    [0.7986, 0.7346],\n    [0.7597, 0.7903],\n    [0.7186, 0.8435],\n    [0.6732, 0.8936],\n    [0.6213, 0.9394],\n    [0.5722, 0.9761],\n    [0.5322, 1.0],\n]\n\nK.forEach(function (d) {\n    d[1] *= 1.0144\n})\n\nexport function robinsonRaw(lambda: number, phi: number): [number, number] {\n    let k\n    let i = Math.min(18, (Math.abs(phi) * 36) / pi),\n        i0 = Math.floor(i),\n        di = i - i0,\n        ax = (k = K[i0])[0],\n        ay = k[1],\n        bx = (k = K[++i0])[0],\n        by = k[1],\n        cx = (k = K[Math.min(19, ++i0)])[0],\n        cy = k[1]\n    return [\n        lambda *\n            (bx + (di * (cx - ax)) / 2 + (di * di * (cx - 2 * bx + ax)) / 2),\n        (phi > 0 ? halfPi : -halfPi) *\n            (by + (di * (cy - ay)) / 2 + (di * di * (cy - 2 * by + ay)) / 2),\n    ]\n}\n\nrobinsonRaw.invert = function (x: number, y: number): [number, number] {\n    let yy = y / halfPi,\n        phi = yy * 90,\n        i = Math.min(18, Math.abs(phi / 5)),\n        i0 = Math.max(0, Math.floor(i))\n    do {\n        var ay = K[i0][1],\n            by = K[i0 + 1][1],\n            cy = K[Math.min(19, i0 + 2)][1],\n            u = cy - ay,\n            v = cy - 2 * by + ay,\n            t = (2 * (Math.abs(yy) - by)) / u,\n            c = v / u,\n            di = t * (1 - c * t * (1 - 2 * c * t))\n        if (di >= 0 || i0 === 1) {\n            phi = (y >= 0 ? 5 : -5) * (di + i)\n            var j = 50,\n                delta\n            do {\n                i = Math.min(18, Math.abs(phi) / 5)\n                i0 = Math.floor(i)\n                di = i - i0\n                ay = K[i0][1]\n                by = K[i0 + 1][1]\n                cy = K[Math.min(19, i0 + 2)][1]\n                phi -=\n                    (delta =\n                        (y >= 0 ? halfPi : -halfPi) *\n                            (by +\n                                (di * (cy - ay)) / 2 +\n                                (di * di * (cy - 2 * by + ay)) / 2) -\n                        y) * degrees\n            } while (Math.abs(delta) > epsilon2 && --j > 0)\n            break\n        }\n    } while (--i0 >= 0)\n    const ax = K[i0][0],\n        bx = K[i0 + 1][0],\n        cx = K[Math.min(19, i0 + 2)][0]\n    return [\n        x / (bx + (di * (cx - ax)) / 2 + (di * di * (cx - 2 * bx + ax)) / 2),\n        phi * radians,\n    ]\n}\n\nexport function geoRobinson(): GeoProjection {\n    return geoProjection(robinsonRaw).scale(152.63)\n}\n","import { geoConicConformal, geoAzimuthalEqualArea, GeoProjection } from \"d3-geo\"\nimport { geoRobinson, geoPatterson } from \"./d3-geo-projection.js\"\nimport { MapRegionName } from \"@ourworldindata/types\"\n\nexport const MAP_PROJECTIONS: Record<MapRegionName, GeoProjection> = {\n    World: geoRobinson(),\n\n    Africa: geoConicConformal()\n        .rotate([-25, 0])\n        .center([0, 0])\n        .parallels([30, -20]),\n\n    NorthAmerica: geoConicConformal()\n        .rotate([98, 0])\n        .center([0, 38])\n        .parallels([29.5, 45.5]),\n\n    SouthAmerica: geoConicConformal()\n        .rotate([68, 0])\n        .center([0, -14])\n        .parallels([10, -30]),\n\n    // From http://bl.ocks.org/dhoboy/ff8448ace9d5d567390a\n    Asia: geoPatterson()\n        .center([58, 54])\n        .scale(150)\n        .translate([0, 0])\n        .precision(0.1),\n\n    // From http://bl.ocks.org/espinielli/10587361\n    Europe: geoAzimuthalEqualArea()\n        .scale(200)\n        .translate([262, 1187])\n        .clipAngle(180 - 1e-3)\n        .precision(1),\n\n    Oceania: geoConicConformal()\n        .rotate([-135, 0])\n        .center([0, -20])\n        .parallels([-10, -30]),\n} as const\n","import * as topojson from \"topojson-client\"\nimport {\n    GeoFeature,\n    GlobeRenderFeature,\n    MapRenderFeature,\n    RenderFeatureType,\n} from \"./MapChartConstants\"\nimport { Bounds, lazy, MapRegionName, PointVector } from \"@ourworldindata/utils\"\nimport { MapTopology } from \"./MapTopology\"\nimport { geoBounds, geoCentroid, geoPath } from \"d3-geo\"\nimport { MAP_PROJECTIONS } from \"./MapProjections\"\n\n// Get the underlying geographical topology elements we're going to display\nexport const GeoFeatures: GeoFeature[] = (\n    topojson.feature(\n        MapTopology as any,\n        MapTopology.objects.world as any\n    ) as any\n).features\n\nexport const GeoFeaturesById = new Map(\n    GeoFeatures.map((feature) => [feature.id, feature])\n)\n\n// Get the svg path specification string for every feature\nconst geoPathCache = new Map<MapRegionName, string[]>()\nconst geoPathsFor = (regionName: MapRegionName): string[] => {\n    if (geoPathCache.has(regionName)) return geoPathCache.get(regionName)!\n\n    const projectionGeo = geoPath()\n        .digits(1)\n        .projection(MAP_PROJECTIONS[regionName])\n    const strs = GeoFeatures.map((feature) => projectionGeo(feature) ?? \"\")\n\n    geoPathCache.set(regionName, strs)\n    return geoPathCache.get(regionName)!\n}\n\n// Get the bounding box for every geographical feature\nconst geoBoundsCache = new Map<MapRegionName, Bounds[]>()\nconst geoBoundsFor = (regionName: MapRegionName): Bounds[] => {\n    if (geoBoundsCache.has(regionName)) return geoBoundsCache.get(regionName)!\n\n    const projectionGeo = geoPath().projection(MAP_PROJECTIONS[regionName])\n    const bounds = GeoFeatures.map((feature) => {\n        const corners = projectionGeo.bounds(feature)\n\n        const bounds = Bounds.fromCorners(\n            new PointVector(...corners[0]),\n            new PointVector(...corners[1])\n        )\n\n        // HACK (Mispy): The path generator calculates weird bounds for Fiji (probably it wraps around the map)\n        if (feature.id === \"Fiji\")\n            return bounds.set({\n                x: bounds.right - bounds.height,\n                width: bounds.height,\n            })\n\n        return bounds\n    })\n\n    geoBoundsCache.set(regionName, bounds)\n    return geoBoundsCache.get(regionName)!\n}\n\nconst geoCentroidsForFeatures = GeoFeatures.map((feature) =>\n    geoCentroid(feature.geometry)\n)\n\nconst geoBoundsForFeatures = GeoFeatures.map((feature) => {\n    const corners = geoBounds(feature)\n    return Bounds.fromCorners(\n        new PointVector(...corners[0]),\n        new PointVector(...corners[1])\n    )\n})\n\nconst geoFeaturesForMapCache = new Map<MapRegionName, MapRenderFeature[]>()\nexport const getGeoFeaturesForMap = (\n    regionName: MapRegionName\n): MapRenderFeature[] => {\n    if (geoFeaturesForMapCache.has(regionName))\n        return geoFeaturesForMapCache.get(regionName)!\n\n    const projBounds = geoBoundsFor(regionName)\n    const projPaths = geoPathsFor(regionName)\n\n    const features = (\n        GeoFeatures.map((geo, index) => ({\n            type: RenderFeatureType.Map,\n            id: geo.id as string,\n            geo: geo,\n            projBounds: projBounds[index], // projected\n            geoBounds: geoBoundsForFeatures[index], // unprojected\n            geoCentroid: geoCentroidsForFeatures[index], // unprojected\n            path: projPaths[index],\n        })) satisfies MapRenderFeature[]\n    ).filter((feature) => feature.id !== \"Antarctica\") // exclude Antarctica since it's distorted and uses up too much space\n\n    geoFeaturesForMapCache.set(regionName, features)\n    return geoFeaturesForMapCache.get(regionName)!\n}\n\nexport const getGeoFeaturesForGlobe = lazy((): GlobeRenderFeature[] => {\n    return GeoFeatures.map((geo, index) => {\n        const corners = geoBounds(geo)\n        const bounds = Bounds.fromCorners(\n            new PointVector(...corners[0]),\n            new PointVector(...corners[1])\n        )\n        return {\n            type: RenderFeatureType.Globe,\n            id: geo.id as string,\n            geo: geo,\n            geoCentroid: geoCentroidsForFeatures[index],\n            geoBounds: bounds,\n        }\n    }) satisfies GlobeRenderFeature[]\n})\n","import React, { useMemo } from \"react\"\nimport cx from \"clsx\"\nimport { Bounds, EntityName, MapRegionName } from \"@ourworldindata/utils\"\nimport { getGeoFeaturesForMap } from \"../mapCharts/GeoFeatures\"\nimport { InteractionState } from \"../interaction/InteractionState.js\"\nimport { GRAY_10 } from \"../color/ColorConstants.js\"\n\nconst NO_DATA_COLOR = GRAY_10\n\nexport function RegionMap({\n    countries,\n    highlightedRegion,\n    onRegionHover,\n    onRegionLeave,\n}: {\n    countries: Map<EntityName, { region: EntityName; color: string }>\n    highlightedRegion?: EntityName\n    onRegionHover?: (regionName: EntityName) => void\n    onRegionLeave?: () => void\n}): React.ReactElement {\n    const features = getGeoFeaturesForMap(MapRegionName.World)\n\n    const viewBox = useMemo(() => {\n        const allBounds = features.map((f) => f.projBounds)\n        return Bounds.merge(allBounds).toViewBox()\n    }, [features])\n\n    return (\n        <svg className=\"map\" viewBox={viewBox} onPointerLeave={onRegionLeave}>\n            {features.map((feature) => {\n                const entry = countries.get(feature.id)\n                return (\n                    <CountryPath\n                        key={feature.id}\n                        path={feature.path}\n                        color={entry?.color ?? NO_DATA_COLOR}\n                        interaction={InteractionState.for(\n                            entry?.region,\n                            highlightedRegion\n                        )}\n                        onPointerEnter={\n                            entry\n                                ? () => onRegionHover?.(entry.region)\n                                : onRegionLeave\n                        }\n                        onPointerLeave={onRegionLeave}\n                    />\n                )\n            })}\n        </svg>\n    )\n}\n\nfunction CountryPath({\n    path,\n    color,\n    interaction,\n    onPointerEnter,\n    onPointerLeave,\n}: {\n    path: string\n    color: string\n    interaction: InteractionState\n    onPointerEnter?: () => void\n    onPointerLeave?: () => void\n}): React.ReactElement {\n    return (\n        <path\n            className={cx({ muted: interaction.background })}\n            d={path}\n            fill={color}\n            onPointerEnter={onPointerEnter}\n            onPointerLeave={onPointerLeave}\n        />\n    )\n}\n","import React, { useMemo } from \"react\"\nimport cx from \"clsx\"\nimport { SimpleMarkdownText } from \"@ourworldindata/components\"\nimport { InteractionState } from \"../interaction/InteractionState.js\"\nimport { RegionMap } from \"./RegionMap\"\nimport { buildCountryMap, TooltipRegion } from \"./RegionTooltipData.js\"\nimport { useStateWithDebouncedClear } from \"../hooks.js\"\n\nexport function RegionTooltip({\n    description,\n    regions,\n    initiallyHighlightedRegion,\n}: {\n    description: string\n    regions: readonly TooltipRegion[]\n    initiallyHighlightedRegion: string\n}): React.ReactElement {\n    const [activeRegion, setActiveRegion, clearActiveRegion] =\n        useStateWithDebouncedClear(initiallyHighlightedRegion)\n\n    const countries = useMemo(() => buildCountryMap(regions), [regions])\n\n    return (\n        <div\n            className=\"region-tooltip\"\n            // Stop mouse events from bubbling through the React portal boundary.\n            // Without this, events reach the parent chart's handlers (e.g. LineChart's\n            // onMouseMove) because React portals propagate synthetic events through\n            // the React component tree, not the DOM tree\n            onMouseMove={(e) => e.stopPropagation()}\n            onMouseEnter={(e) => e.stopPropagation()}\n            onMouseLeave={(e) => e.stopPropagation()}\n        >\n            <SimpleMarkdownText text={description} />\n            <div className=\"map-container\">\n                <RegionMap\n                    countries={countries}\n                    highlightedRegion={activeRegion}\n                    onRegionHover={setActiveRegion}\n                    onRegionLeave={clearActiveRegion}\n                />\n            </div>\n            <RegionLegend\n                regions={regions}\n                highlightedRegion={activeRegion}\n                onRegionHover={setActiveRegion}\n                onRegionLeave={clearActiveRegion}\n            />\n        </div>\n    )\n}\n\nfunction RegionLegend({\n    regions,\n    highlightedRegion,\n    onRegionHover,\n    onRegionLeave,\n}: {\n    regions: readonly TooltipRegion[]\n    highlightedRegion?: string\n    onRegionHover: (name: string) => void\n    onRegionLeave: () => void\n}): React.ReactElement {\n    return (\n        <ul className=\"legend\">\n            {regions.map((region) => (\n                <RegionLegendItem\n                    key={region.name}\n                    region={region}\n                    interaction={InteractionState.for(\n                        region.name,\n                        highlightedRegion\n                    )}\n                    onPointerEnter={() => onRegionHover(region.name)}\n                    onPointerLeave={onRegionLeave}\n                />\n            ))}\n        </ul>\n    )\n}\n\nfunction RegionLegendItem({\n    region,\n    interaction,\n    onPointerEnter,\n    onPointerLeave,\n}: {\n    region: TooltipRegion\n    interaction: InteractionState\n    onPointerEnter: () => void\n    onPointerLeave: () => void\n}): React.ReactElement {\n    return (\n        <li\n            className={cx(\"legend-item\", { muted: interaction.background })}\n            onPointerEnter={onPointerEnter}\n            onPointerLeave={onPointerLeave}\n        >\n            <span\n                className=\"swatch\"\n                style={{ backgroundColor: region.color }}\n            />\n            {region.displayName}\n        </li>\n    )\n}\n","import React, { useState } from \"react\"\nimport * as R from \"remeda\"\nimport Tippy from \"@tippyjs/react\"\nimport { hideAll } from \"tippy.js\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faCircleInfo } from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    GRAPHER_DARK_TEXT,\n    GRAPHER_LIGHT_TEXT,\n} from \"../color/ColorConstants.js\"\nimport {\n    SeriesLabelState,\n    PositionedTextFragment,\n    PositionedIconFragment,\n    TextRole,\n    SpanLine,\n} from \"./SeriesLabelState.js\"\nimport { Bounds, isTouchDevice, roundForSvg } from \"@ourworldindata/utils\"\nimport { FIGMA_TEXT_NODE_BREAK_DY, Halo } from \"@ourworldindata/components\"\nimport { RegionTooltip } from \"./RegionTooltip.js\"\nimport { getDescriptionForKey, getRegionsForKey } from \"./RegionTooltipData.js\"\n\nconst defaultColors: Record<TextRole, string> = {\n    name: GRAPHER_DARK_TEXT,\n    value: GRAPHER_DARK_TEXT,\n    regionPublisherSuffix: GRAPHER_LIGHT_TEXT,\n    regionIcon: GRAPHER_LIGHT_TEXT,\n}\n\nexport interface SeriesLabelProps {\n    state: SeriesLabelState\n    x: number\n    y: number\n    id?: string\n    color?: Partial<Record<TextRole, string>>\n    opacity?: number\n    outline?: boolean\n    onMouseEnter?: React.MouseEventHandler<SVGElement>\n    onMouseLeave?: React.MouseEventHandler<SVGElement>\n    onInfoTooltipShow?: () => void\n}\n\n/**\n * Renders a series label that consists of up to three fragments:\n * - The main label text (e.g. \"United States\")\n * - An optional suffix naming the region's publisher (e.g. \"(WHO)\")\n * - An optional value label (e.g. \"70 years\")\n *\n * If the label includes a region publisher suffix, an info icon may be\n * rendered next to the suffix, which shows a tooltip with more information\n * about the region set on hover.\n */\nexport function SeriesLabel({\n    state,\n    x,\n    y,\n    id,\n    color,\n    opacity,\n    outline,\n    onMouseEnter,\n    onMouseLeave,\n    onInfoTooltipShow,\n}: SeriesLabelProps): React.ReactElement {\n    const [renderX, renderY] = state.getPositionForSvgRendering(x, y)\n\n    const fontSize = state.fontSettings.fontSize\n    const colors = { ...defaultColors, ...color }\n    const props = { id, opacity, onMouseEnter, onMouseLeave }\n\n    const withHalo = (\n        element: React.ReactElement<{\n            id?: string\n            style?: React.CSSProperties\n        }>\n    ): React.ReactElement => {\n        const haloId = id ? `${id}__halo` : \"label__halo\"\n        return outline ? (\n            <Halo id={haloId} fontSize={state.fontSettings.fontSize}>\n                {element}\n            </Halo>\n        ) : (\n            element\n        )\n    }\n\n    // Rely on browser rendering if there are no icons\n    if (!state.hasIcon) {\n        return withHalo(\n            <NativeAlignedLabelText\n                x={renderX}\n                y={renderY}\n                spanLines={state.spanLines}\n                textAnchor={state.textAnchor}\n                fontSize={fontSize}\n                lineHeight={state.singleLineHeight}\n                colors={colors}\n                {...props}\n            />\n        )\n    }\n\n    // Otherwise, text and icon fragments are both manually positioned\n    const [textFragments, iconFragments] = R.partition(\n        state.positionedFragments,\n        (f) => f.type === \"text\"\n    )\n\n    return (\n        <g {...props}>\n            {withHalo(\n                <LabelText\n                    x={renderX}\n                    y={renderY}\n                    fragments={textFragments}\n                    fontSize={fontSize}\n                    colors={colors}\n                />\n            )}\n            {iconFragments.map((fragment) => (\n                <IconFragment\n                    key={fragment.tooltipKey}\n                    x={renderX}\n                    y={renderY}\n                    fragment={fragment}\n                    fill={colors.regionPublisherSuffix}\n                    regionName={fragment.regionName}\n                    onMouseEnter={onMouseEnter}\n                    onMouseLeave={onMouseLeave}\n                    onInfoTooltipShow={onInfoTooltipShow}\n                />\n            ))}\n        </g>\n    )\n}\n\nfunction NativeAlignedLabelText({\n    x,\n    y,\n    spanLines,\n    textAnchor,\n    fontSize,\n    lineHeight,\n    colors,\n    id,\n    opacity,\n    style,\n    onMouseEnter,\n    onMouseLeave,\n}: {\n    x: number\n    y: number\n    spanLines: SpanLine[]\n    textAnchor: \"start\" | \"end\"\n    fontSize: number\n    lineHeight: number\n    colors: Record<TextRole, string>\n    id?: string\n    opacity?: number\n    style?: React.CSSProperties // Necessary for Halo\n    onMouseEnter?: React.MouseEventHandler<SVGElement>\n    onMouseLeave?: React.MouseEventHandler<SVGElement>\n}): React.ReactElement {\n    return (\n        <text\n            id={id}\n            style={style}\n            x={roundForSvg(x)}\n            y={roundForSvg(y)}\n            textAnchor={textAnchor}\n            fontSize={fontSize}\n            opacity={opacity}\n            onMouseEnter={onMouseEnter}\n            onMouseLeave={onMouseLeave}\n        >\n            {spanLines.map((spans, lineIndex) =>\n                spans.map((span, spanIndex) => {\n                    const renderX = getSpanX({ spanIndex, x })\n                    const renderDy = getSpanDy({\n                        spanLines,\n                        lineIndex,\n                        spanIndex,\n                        lineHeight,\n                        textAnchor,\n                    })\n\n                    return (\n                        <tspan\n                            key={span.text}\n                            x={renderX}\n                            dy={renderDy}\n                            fontWeight={span.fontWeight}\n                            fill={colors[span.role]}\n                            // librsvg (Wikimedia's renderer) drops a leading space otherwise\n                            xmlSpace={\n                                span.text.startsWith(\" \")\n                                    ? \"preserve\"\n                                    : undefined\n                            }\n                        >\n                            {span.text}\n                        </tspan>\n                    )\n                })\n            )}\n        </text>\n    )\n}\n\nfunction LabelText({\n    x,\n    y,\n    fragments,\n    fontSize,\n    colors,\n    id,\n    opacity,\n    style,\n    onMouseEnter,\n    onMouseLeave,\n}: {\n    x: number\n    y: number\n    fragments: PositionedTextFragment[]\n    fontSize: number\n    colors: Record<TextRole, string>\n    id?: string\n    opacity?: number\n    style?: React.CSSProperties // Necessary for Halo\n    onMouseEnter?: React.MouseEventHandler<SVGElement>\n    onMouseLeave?: React.MouseEventHandler<SVGElement>\n}): React.ReactElement {\n    if (fragments.length === 1) {\n        return (\n            <TextFragment\n                id={id}\n                x={x}\n                y={y}\n                fragment={fragments[0]}\n                fontSize={fontSize}\n                fill={colors[fragments[0].role]}\n                opacity={opacity}\n                style={style}\n                onMouseEnter={onMouseEnter}\n                onMouseLeave={onMouseLeave}\n            />\n        )\n    }\n\n    return (\n        <text\n            id={id}\n            style={style}\n            fontSize={fontSize}\n            opacity={opacity}\n            onMouseEnter={onMouseEnter}\n            onMouseLeave={onMouseLeave}\n        >\n            {fragments.map((fragment) => (\n                <TextSpanFragment\n                    key={fragment.text}\n                    x={x}\n                    y={y}\n                    fragment={fragment}\n                    fill={colors[fragment.role]}\n                />\n            ))}\n        </text>\n    )\n}\n\nfunction TextFragment({\n    x,\n    y,\n    fragment,\n    fontSize,\n    fill,\n    id,\n    opacity,\n    style,\n    onMouseEnter,\n    onMouseLeave,\n}: {\n    x: number\n    y: number\n    fragment: PositionedTextFragment\n    fontSize: number\n    fill: string\n    id?: string\n    opacity?: number\n    style?: React.CSSProperties // Necessary for Halo\n    onMouseEnter?: React.MouseEventHandler<SVGElement>\n    onMouseLeave?: React.MouseEventHandler<SVGElement>\n}): React.ReactElement {\n    return (\n        <text\n            id={id}\n            style={style}\n            fontSize={fontSize}\n            opacity={opacity}\n            onMouseEnter={onMouseEnter}\n            onMouseLeave={onMouseLeave}\n        >\n            <TextSpanFragment x={x} y={y} fragment={fragment} fill={fill} />\n        </text>\n    )\n}\n\nfunction TextSpanFragment({\n    x,\n    y,\n    fragment,\n    fill,\n}: {\n    x: number\n    y: number\n    fragment: PositionedTextFragment\n    fill: string\n}): React.ReactElement {\n    return (\n        <tspan\n            x={roundForSvg(x + fragment.x)}\n            y={roundForSvg(y + fragment.y)}\n            fontWeight={fragment.fontWeight}\n            fill={fill}\n        >\n            {fragment.text}\n        </tspan>\n    )\n}\n\nfunction IconFragment({\n    x,\n    y,\n    fragment,\n    fill,\n    regionName,\n    onMouseEnter,\n    onMouseLeave,\n    onInfoTooltipShow,\n}: {\n    x: number\n    y: number\n    fragment: PositionedIconFragment\n    fill: string\n    regionName: string\n    onMouseEnter?: React.MouseEventHandler<SVGElement>\n    onMouseLeave?: React.MouseEventHandler<SVGElement>\n    onInfoTooltipShow?: () => void\n}): React.ReactElement {\n    // Used as react key to remount RegionTooltip with fresh state\n    const [tooltipRemountKey, setTooltipRemountKey] = useState(false)\n\n    const iconX = x + fragment.x\n    const iconY = y + fragment.y\n\n    const hitAreaSize = isTouchDevice() ? 40 : 20\n    const padding = Math.ceil((hitAreaSize - fragment.iconSize) / 2)\n    const hitAreaBounds = new Bounds(\n        iconX,\n        iconY,\n        fragment.iconSize,\n        fragment.iconSize\n    ).expand(padding)\n\n    return (\n        <g>\n            <g\n                transform={`translate(${roundForSvg(iconX)}, ${roundForSvg(iconY)})`}\n            >\n                <FontAwesomeIcon\n                    icon={faCircleInfo}\n                    width={fragment.iconSize}\n                    height={fragment.iconSize}\n                    color={fill}\n                />\n            </g>\n\n            {/* Hit area for tooltip interaction */}\n            <Tippy\n                theme=\"grapher-explanation\"\n                placement=\"top\"\n                interactive={!isTouchDevice()}\n                appendTo={() => document.body}\n                onShow={(instance) => {\n                    // Hide any other open tooltips\n                    hideAll({ exclude: instance })\n\n                    onInfoTooltipShow?.()\n                }}\n                // Changing the key forces RegionTooltip to remount on the\n                // next show, resetting its internal hover state back to\n                // the initially highlighted region\n                onHidden={() => setTooltipRemountKey((k) => !k)}\n                content={\n                    <RegionTooltip\n                        key={tooltipRemountKey.toString()}\n                        description={getDescriptionForKey(fragment.tooltipKey)}\n                        regions={getRegionsForKey(fragment.tooltipKey)}\n                        initiallyHighlightedRegion={regionName}\n                    />\n                }\n            >\n                <rect\n                    {...hitAreaBounds.toProps()}\n                    fill=\"transparent\"\n                    style={{ pointerEvents: \"auto\" }}\n                    onMouseEnter={onMouseEnter}\n                    onMouseLeave={onMouseLeave}\n                />\n            </Tippy>\n        </g>\n    )\n}\n\nfunction getSpanX({\n    spanIndex,\n    x,\n}: {\n    spanIndex: number\n    x: number\n}): number | undefined {\n    const isLineStart = spanIndex === 0\n    return isLineStart ? roundForSvg(x) : undefined\n}\n\nfunction getSpanDy({\n    spanLines,\n    lineIndex,\n    spanIndex,\n    lineHeight,\n    textAnchor,\n}: {\n    spanLines: SpanLine[]\n    lineIndex: number\n    spanIndex: number\n    lineHeight: number\n    textAnchor: \"start\" | \"end\"\n}): number | undefined {\n    const isFirstLine = lineIndex === 0\n    const isLineStart = spanIndex === 0\n    const isSecondSpan = spanIndex === 1\n\n    // The first line sits on the text element's y\n    if (isLineStart && isFirstLine) return undefined\n\n    // Move down to the next line, undoing the previous line's Figma nudge, if any\n    if (isLineStart) {\n        const previousLineBreakDy = getFigmaNodeBreakDy(\n            spanLines[lineIndex - 1],\n            textAnchor\n        )\n        return roundForSvg(lineHeight - previousLineBreakDy)\n    }\n\n    // Nudge the rest of the line so Figma gives it its own text node\n    if (isSecondSpan)\n        return (\n            getFigmaNodeBreakDy(spanLines[lineIndex], textAnchor) || undefined\n        )\n\n    return undefined\n}\n\n/** Figma nudge for a left-aligned line whose name is followed by text in another weight, otherwise 0 */\nfunction getFigmaNodeBreakDy(\n    spans: SpanLine,\n    textAnchor: \"start\" | \"end\"\n): number {\n    return textAnchor === \"start\" &&\n        spans.length > 1 &&\n        spans[0].fontWeight !== spans[1].fontWeight\n        ? FIGMA_TEXT_NODE_BREAK_DY\n        : 0\n}\n","import { GRAPHER_OPACITY_MUTED } from \"../core/GrapherConstants.js\"\nimport { Emphasis } from \"../interaction/Emphasis.js\"\n\n// Minimum vertical space between two legend items\nexport const LEGEND_ITEM_MIN_SPACING = 4\n// Horizontal distance from the end of the chart to the start of the marker\nexport const MARKER_MARGIN = 4\n// Space between the label and the annotation\nexport const ANNOTATION_PADDING = 1\n\nexport const DEFAULT_CONNECTOR_LINE_WIDTH = 25\nexport const DEFAULT_FONT_WEIGHT = 400\n\nexport interface LabelStyleConfig {\n    opacity: number\n    connectorLineColor: string\n}\n\nconst DEFAULT_LABEL_STYLE: LabelStyleConfig = {\n    opacity: 1,\n    connectorLineColor: \"#999\",\n}\n\nexport const LABEL_STYLE: Record<Emphasis, LabelStyleConfig> = {\n    [Emphasis.Default]: DEFAULT_LABEL_STYLE,\n    [Emphasis.Elevated]: DEFAULT_LABEL_STYLE,\n    [Emphasis.Highlighted]: DEFAULT_LABEL_STYLE,\n    [Emphasis.Muted]: {\n        opacity: GRAPHER_OPACITY_MUTED,\n        connectorLineColor: \"#eee\",\n    },\n}\n","import * as _ from \"lodash-es\"\nimport { SeriesName } from \"@ourworldindata/utils\"\nimport { PlacedLabelSeries } from \"./VerticalLabelsTypes\"\nimport { LEGEND_ITEM_MIN_SPACING } from \"./VerticalLabelsConstants\"\nimport * as R from \"remeda\"\n\ntype Bracket = [number, number]\n\nexport interface VerticalLabelsFilterAlgorithmContext {\n    candidates: Set<PlacedLabelSeries> // remaining candidates to be considered for placement\n    availableHeight: number\n    sortedKeepSeries: PlacedLabelSeries[] // series that have been picked to be labelled, sorted by their y position\n    keepSeriesHeight: number // total height of the picked series\n}\n\ninterface PickFromCandidateSubsetParams {\n    context: VerticalLabelsFilterAlgorithmContext\n    candidateSubset: PlacedLabelSeries[]\n    getCandidateFromSubset?: (\n        candidateSubset: PlacedLabelSeries[]\n    ) => PlacedLabelSeries | undefined\n}\n\nconst dist = (c1: PlacedLabelSeries, c2: PlacedLabelSeries) =>\n    Math.abs(c1.midY - c2.midY)\n\nfunction getNewHeight(\n    currentHeight: number,\n    candidate: PlacedLabelSeries\n): number {\n    // if the candidate is the first one, don't add padding\n    const padding = currentHeight === 0 ? 0 : LEGEND_ITEM_MIN_SPACING\n    return currentHeight + candidate.bounds.height + padding\n}\n\n/**\n * Given a sorted list of brackets, like [[0, 10], [10, 20], [20, 30]],\n * find the bracket that contains the given number n.\n */\nfunction findBracket(\n    sortedBrackets: Bracket[],\n    n: number\n): [number | undefined, number | undefined] {\n    if (sortedBrackets.length === 0) return [undefined, undefined]\n\n    const firstBracketValue = sortedBrackets[0][0]\n    const lastBracketValue = R.last(sortedBrackets)![1]\n\n    if (n < firstBracketValue) return [undefined, firstBracketValue]\n    if (n >= lastBracketValue) return [lastBracketValue, undefined]\n\n    for (const bracket of sortedBrackets) {\n        if (n >= bracket[0] && n < bracket[1]) return bracket\n    }\n\n    return [undefined, undefined]\n}\n\n/**\n * Add a candidate to the list of picked series and update the context accordingly.\n */\nexport function pickCandidate(\n    context: VerticalLabelsFilterAlgorithmContext,\n    candidate: PlacedLabelSeries\n): VerticalLabelsFilterAlgorithmContext {\n    let { candidates, sortedKeepSeries, keepSeriesHeight } = context\n\n    // insert into sortedKeepSeries at the right position\n    const insertIndex = R.sortedIndexBy(\n        context.sortedKeepSeries,\n        candidate,\n        (s) => s.midY\n    )\n    sortedKeepSeries.splice(insertIndex, 0, candidate)\n\n    // update keepSeriesHeight\n    keepSeriesHeight = getNewHeight(keepSeriesHeight, candidate)\n\n    // delete from candidates\n    candidates.delete(candidate)\n\n    return { ...context, candidates, sortedKeepSeries, keepSeriesHeight }\n}\n\n/**\n * Remove a candidate from the list of candidates to be considered for placement.\n */\nfunction dismissCandidate(\n    context: VerticalLabelsFilterAlgorithmContext,\n    candidate: PlacedLabelSeries\n) {\n    const { candidates } = context\n    candidates.delete(candidate)\n    return { ...context, candidates }\n}\n\n/**\n * Pick from a subset of candidates until one of the following conditions is met:\n * - no candidates are left or the maximum number of candidates to pick is reached\n * - no more candidates fit into the available space\n *\n * The order of candidates to consider for placement is determined by the\n * `getCandidateFromSubset` function. The function should return the next candidate\n * to consider. If the function returns `undefined`, the algorithm stops.\n *\n * If no custom function is provided, the algorithm picks candidates starting from\n * the end (!) of the given list.\n */\nfunction pickFromCandidateSubsetWithRetry(\n    params: PickFromCandidateSubsetParams & { maxCandidatesToPick?: number }\n): VerticalLabelsFilterAlgorithmContext {\n    let {\n        context,\n        candidateSubset,\n        getCandidateFromSubset,\n        maxCandidatesToPick,\n    } = params\n\n    if (candidateSubset.length === 0 || maxCandidatesToPick === 0)\n        return context\n\n    const remainingCandidates = [...candidateSubset]\n    let numPicked = 0\n\n    // if a custom function to get a candidate is provided, use it\n    // otherwise, pop the last candidate\n    const getCandidate = (): PlacedLabelSeries | undefined => {\n        if (getCandidateFromSubset) {\n            const candidate = getCandidateFromSubset(remainingCandidates)\n            if (candidate) {\n                const index = remainingCandidates.indexOf(candidate)\n                remainingCandidates.splice(index, 1)\n            }\n            return candidate\n        }\n\n        return remainingCandidates.pop()\n    }\n\n    while (remainingCandidates.length > 0) {\n        const candidate = getCandidate()\n        if (!candidate) break\n\n        // sanity check if this is a valid candidate\n        if (!context.candidates.has(candidate)) continue\n\n        // either pick or dismiss the candidate\n        const newHeight = getNewHeight(context.keepSeriesHeight, candidate)\n        if (newHeight <= context.availableHeight) {\n            context = pickCandidate(context, candidate)\n            numPicked++\n        } else {\n            context = dismissCandidate(context, candidate)\n        }\n\n        // stop if we picked enough candidates\n        if (numPicked === maxCandidatesToPick) break\n    }\n\n    return context\n}\n\n/**\n * Pick as many candidates as possible from a given subset.\n *\n * The order of candidates to consider for placement is determined by the\n * `getCandidateFromSubset` function. The function should return the next candidate\n * to consider. If the function returns `undefined`, the algorithm stops.\n *\n * If no custom function is provided, the algorithm picks candidates starting from\n * the end (!) of the given list.\n */\nexport function pickAsManyAsPossibleWithRetry(\n    params: PickFromCandidateSubsetParams\n): VerticalLabelsFilterAlgorithmContext {\n    return pickFromCandidateSubsetWithRetry(params)\n}\n\n/**\n * Pick a fixed number of candidates from a give subset.\n *\n * The order of candidates to consider for placement is determined by the\n * `getCandidateFromSubset` function. The function should return the next candidate\n * to consider. If the function returns `undefined`, the algorithm stops.\n *\n * If no custom function is provided, the algorithm picks candidates starting from\n * the end (!) of the given list.\n */\nexport function pickCandidateWithRetry(\n    params: PickFromCandidateSubsetParams\n): VerticalLabelsFilterAlgorithmContext {\n    return pickFromCandidateSubsetWithRetry({\n        ...params,\n        maxCandidatesToPick: 1,\n    })\n}\n\nexport function pickCandidateWithMaxDistanceToReferenceCandidate(params: {\n    context: VerticalLabelsFilterAlgorithmContext\n    candidateSubset: PlacedLabelSeries[]\n    referenceCandidate: PlacedLabelSeries\n}): VerticalLabelsFilterAlgorithmContext {\n    const { context, candidateSubset, referenceCandidate } = params\n\n    const getMaxDistCandidate = (candidates: PlacedLabelSeries[]) =>\n        _.maxBy(candidates, (c) => dist(c, referenceCandidate))\n\n    return pickCandidateWithRetry({\n        context,\n        candidateSubset,\n        getCandidateFromSubset: getMaxDistCandidate,\n    })\n}\n\n/**\n * Compute a score for each candidate based on how large the space between the\n * neighboring labels is and how far it is from the mid point of the neighboring\n * labels.\n */\nexport function computeCandidateScores(\n    candidates: PlacedLabelSeries[],\n    sortedKeepSeries: PlacedLabelSeries[]\n): Map<SeriesName, number> {\n    const scoreMap = new Map<SeriesName, number>()\n\n    const sortedBrackets = sortedKeepSeries\n        .slice(0, -1)\n        .map((s, i) => [s.midY, sortedKeepSeries[i + 1].midY])\n        .filter((bracket) => bracket[0] !== bracket[1]) as Bracket[]\n\n    // score each candidate based on how well it fits into the available space\n    for (const candidate of candidates) {\n        // find the bracket that the candidate is contained in\n        const [start, end] = findBracket(sortedBrackets, candidate.midY)\n\n        // if no bracket is found, return the worst possible score\n        if (end === undefined || start === undefined) {\n            scoreMap.set(candidate.seriesName, 0)\n            continue\n        }\n\n        // score the candidate based on how far it is from the\n        // middle of the bracket and how large the bracket is\n        const length = end - start\n        const midPoint = start + length / 2\n        const distanceFromMidPoint = Math.abs(candidate.midY - midPoint)\n        const score = length - distanceFromMidPoint\n\n        scoreMap.set(candidate.seriesName, score)\n    }\n\n    return scoreMap\n}\n\nexport function getSeriesKey(series: PlacedLabelSeries, index: number): string {\n    return `${series.seriesName}-${index}`\n}\n\nexport function computeHeight(series: PlacedLabelSeries[]): number {\n    return (\n        _.sumBy(series, (series) => series.bounds.height) +\n        (series.length - 1) * LEGEND_ITEM_MIN_SPACING\n    )\n}\n","import * as React from \"react\"\nimport { TextWrapSvg } from \"@ourworldindata/components\"\nimport { makeFigmaId, roundForSvg } from \"@ourworldindata/utils\"\nimport { SeriesName } from \"@ourworldindata/types\"\nimport { SeriesLabel } from \"../seriesLabel/SeriesLabel.js\"\nimport { darkenColorForText } from \"../color/ColorUtils.js\"\nimport { ANNOTATION_PADDING, LABEL_STYLE } from \"./VerticalLabelsConstants.js\"\nimport { getSeriesKey } from \"./VerticalLabelsHelpers\"\nimport { PlacedLabelSeries, RenderLabelSeries } from \"./VerticalLabelsTypes\"\nimport { VerticalLabelsState } from \"./VerticalLabelsState\"\nimport { Emphasis } from \"../interaction/Emphasis.js\"\n\n/** Series labels stacked vertically */\nexport function VerticalLabels({\n    state,\n    x = 0,\n    outline = false,\n    onMouseEnter,\n    onMouseLeave,\n    interactive = true,\n}: {\n    state: VerticalLabelsState\n    x?: number\n    outline?: boolean\n    onMouseEnter?: (key: SeriesName) => void\n    onMouseLeave?: () => void\n    interactive?: boolean\n}): React.ReactElement {\n    const { renderSeries, annotatedSeries, textAnchor } = state\n\n    return (\n        <g\n            id={makeFigmaId(\"vertical-labels\")}\n            transform={`translate(${roundForSvg(x)}, 0)`}\n        >\n            {interactive && (\n                <InteractionOverlays\n                    series={state.placedSeries}\n                    anchor={textAnchor}\n                    onMouseEnter={onMouseEnter}\n                    onMouseLeave={onMouseLeave}\n                />\n            )}\n            {state.needsConnectorLines && (\n                <ConnectorLines series={renderSeries} />\n            )}\n            {state.hasAnnotatedSeries && (\n                <Annotations series={annotatedSeries} anchor={textAnchor} />\n            )}\n            <Labels\n                series={renderSeries}\n                outline={outline}\n                onMouseEnter={onMouseEnter}\n                onMouseLeave={onMouseLeave}\n            />\n        </g>\n    )\n}\n\nfunction Labels({\n    series,\n    outline = false,\n    onMouseEnter,\n    onMouseLeave,\n}: {\n    series: RenderLabelSeries[]\n    outline: boolean\n    onMouseEnter?: (key: SeriesName) => void\n    onMouseLeave?: (key: SeriesName) => void\n}): React.ReactElement {\n    return (\n        <g id={makeFigmaId(\"text-labels\")} style={{ pointerEvents: \"none\" }}>\n            {series.map((series, index) => {\n                const color = darkenColorForText(series.color)\n                const emphasis = series.emphasis ?? Emphasis.Default\n                return (\n                    <SeriesLabel\n                        key={getSeriesKey(series, index)}\n                        id={makeFigmaId(\"label\", series.seriesName)}\n                        state={series.seriesLabel}\n                        x={series.labelCoords.x}\n                        y={series.labelCoords.y}\n                        color={{ name: color, value: color }}\n                        opacity={LABEL_STYLE[emphasis].opacity}\n                        outline={outline}\n                        onMouseEnter={() => onMouseEnter?.(series.seriesName)}\n                        onMouseLeave={() => onMouseLeave?.(series.seriesName)}\n                    />\n                )\n            })}\n        </g>\n    )\n}\n\nfunction Annotations({\n    series,\n    anchor,\n}: {\n    series: RenderLabelSeries[]\n    anchor: \"start\" | \"end\"\n}): React.ReactElement | null {\n    return (\n        <g\n            id={makeFigmaId(\"text-annotations\")}\n            style={{ pointerEvents: \"none\" }}\n        >\n            {series.map((series, index) => {\n                if (!series.annotationTextWrap) return null\n                const emphasis = series.emphasis ?? Emphasis.Default\n                return (\n                    <React.Fragment key={getSeriesKey(series, index)}>\n                        <TextWrapSvg\n                            textWrap={series.annotationTextWrap}\n                            x={series.labelCoords.x}\n                            y={\n                                series.labelCoords.y +\n                                series.seriesLabel.height +\n                                ANNOTATION_PADDING\n                            }\n                            fill=\"#333\"\n                            opacity={LABEL_STYLE[emphasis].opacity}\n                            textAnchor={anchor}\n                            style={{ fontWeight: 300 }}\n                        />\n                    </React.Fragment>\n                )\n            })}\n        </g>\n    )\n}\n\nfunction ConnectorLines({\n    series,\n}: {\n    series: RenderLabelSeries[]\n}): React.ReactElement {\n    return (\n        <g id={makeFigmaId(\"connectors\")} style={{ pointerEvents: \"none\" }}>\n            {series.map((series, index) => {\n                const { startX, endX } = series.connectorLineCoords\n                const {\n                    level,\n                    totalLevels,\n                    origBounds: { centerY: leftCenterY },\n                    bounds: { centerY: rightCenterY },\n                } = series\n\n                const step = (endX - startX) / (totalLevels + 1)\n                const markerXMid = startX + step + level * step\n                const d =\n                    `M${roundForSvg(startX)},${roundForSvg(leftCenterY)}` +\n                    ` H${roundForSvg(markerXMid)}` +\n                    ` V${roundForSvg(rightCenterY)}` +\n                    ` H${roundForSvg(endX)}`\n\n                const emphasis = series.emphasis ?? Emphasis.Default\n                const lineColor = LABEL_STYLE[emphasis].connectorLineColor\n\n                return (\n                    <path\n                        id={makeFigmaId(series.seriesName)}\n                        key={getSeriesKey(series, index)}\n                        d={d}\n                        stroke={lineColor}\n                        strokeWidth={0.5}\n                        fill=\"none\"\n                    />\n                )\n            })}\n        </g>\n    )\n}\n\nfunction InteractionOverlays({\n    series,\n    anchor,\n    onMouseEnter,\n    onMouseLeave,\n}: {\n    series: PlacedLabelSeries[]\n    anchor: \"start\" | \"end\"\n    onMouseEnter?: (key: SeriesName) => void\n    onMouseLeave?: (key: SeriesName) => void\n}): React.ReactElement {\n    return (\n        <g>\n            {series.map((series, index) => {\n                const x =\n                    anchor === \"start\"\n                        ? series.origBounds.x\n                        : series.origBounds.x - series.bounds.width\n                return (\n                    <g\n                        key={getSeriesKey(series, index)}\n                        onMouseEnter={() => onMouseEnter?.(series.seriesName)}\n                        onMouseLeave={() => onMouseLeave?.(series.seriesName)}\n                    >\n                        <rect\n                            x={roundForSvg(x)}\n                            y={roundForSvg(series.bounds.y)}\n                            width={roundForSvg(series.bounds.width)}\n                            height={roundForSvg(series.bounds.height)}\n                            fill=\"#fff\"\n                            opacity={0}\n                        />\n                    </g>\n                )\n            })}\n        </g>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport {\n    computeCandidateScores,\n    computeHeight,\n    VerticalLabelsFilterAlgorithmContext,\n    pickAsManyAsPossibleWithRetry,\n    pickCandidateWithMaxDistanceToReferenceCandidate,\n    pickCandidateWithRetry,\n} from \"./VerticalLabelsHelpers\"\nimport { PlacedLabelSeries } from \"./VerticalLabelsTypes\"\nimport { Emphasis } from \"../interaction/Emphasis.js\"\n\nexport type FilterAlgorithm = (\n    series: PlacedLabelSeries[],\n    availableHeight: number\n) => PlacedLabelSeries[]\n\n/**\n * Pick the series that fit, ignoring emphasis, then make room for any\n * highlighted series that were dropped by evicting their nearest neighbors.\n */\nexport function findSeriesThatFitWithHighlights(\n    series: PlacedLabelSeries[],\n    findSeriesThatFit: FilterAlgorithm,\n    availableHeight: number\n): PlacedLabelSeries[] {\n    const visible = findSeriesThatFit(series, availableHeight)\n    const highlighted = findSeriesThatFit(\n        series.filter((series) => series.emphasis === Emphasis.Highlighted),\n        availableHeight\n    )\n\n    const visibleNames = new Set(visible.map((series) => series.seriesName))\n    const missing = highlighted.filter(\n        (series) => !visibleNames.has(series.seriesName)\n    )\n    if (missing.length === 0) return visible\n\n    const highlightedNames = new Set(\n        highlighted.map((series) => series.seriesName)\n    )\n    const distanceToNearestInsertedLabel = (\n        series: PlacedLabelSeries\n    ): number =>\n        Math.min(...missing.map((other) => Math.abs(series.midY - other.midY)))\n\n    const evictionOrder = _.sortBy(\n        visible.filter((series) => !highlightedNames.has(series.seriesName)),\n        distanceToNearestInsertedLabel\n    )\n\n    const merged = _.sortBy([...visible, ...missing], (series) => series.midY)\n    for (const victim of evictionOrder) {\n        if (computeHeight(merged) <= availableHeight) break\n        merged.splice(merged.indexOf(victim), 1)\n    }\n\n    return merged\n}\n\n/**\n * Keep a subset of series that fit within the available height, prioritizing by\n * importance.\n *\n * Note that more important (but longer) series names might be skipped if they don't fit.\n */\nexport function findImportantSeriesThatFitIntoTheAvailableSpace(\n    seriesSortedByImportance: PlacedLabelSeries[],\n    availableHeight: number\n): PlacedLabelSeries[] {\n    let context: VerticalLabelsFilterAlgorithmContext = {\n        candidates: new Set(seriesSortedByImportance),\n        availableHeight,\n        sortedKeepSeries: [],\n        keepSeriesHeight: 0,\n    }\n\n    const importanceScore = new Map(\n        seriesSortedByImportance.map((series, index) => [\n            series.seriesName,\n            -index, // Higher index means lower importance\n        ])\n    )\n\n    const getMostImportantCandidate = (candidates: PlacedLabelSeries[]) =>\n        _.maxBy(candidates, (c) => importanceScore.get(c.seriesName))\n\n    context = pickAsManyAsPossibleWithRetry({\n        context,\n        candidateSubset: seriesSortedByImportance,\n        getCandidateFromSubset: getMostImportantCandidate,\n    })\n\n    return context.sortedKeepSeries\n}\n\n/**\n * Pick a subset of series that fit within the available height.\n *\n * The algorithm tries to pick labels in a 'balanced' way such that they're\n * spread out as much as possible.\n *\n * The algorithm works as follows: Given a set of placed labels and a set of\n * candidates, for each candidate, we find the two closest already placed labels,\n * one to each side, and calculate a score based on the available space between\n * the two placed labels (the bigger, the better) and the candidate's distance to\n * the midpoint (the smaller, the better). We then pick the candidate with the best\n * score that fits into the available space.\n */\nexport function findSeriesThatFitIntoTheAvailableSpace(\n    series: PlacedLabelSeries[],\n    availableHeight: number\n): PlacedLabelSeries[] {\n    let context: VerticalLabelsFilterAlgorithmContext = {\n        candidates: new Set(series),\n        availableHeight,\n        sortedKeepSeries: [],\n        keepSeriesHeight: 0,\n    }\n\n    // Pick two candidates with maximal distance to each other\n    context = pickCandidateWithRetry({\n        context,\n        candidateSubset: series,\n        getCandidateFromSubset: (candidates) =>\n            _.maxBy(candidates, (c) => c.midY),\n    })\n    const referenceCandidate = context.sortedKeepSeries[0]\n    if (referenceCandidate) {\n        context = pickCandidateWithMaxDistanceToReferenceCandidate({\n            context,\n            candidateSubset: series,\n            referenceCandidate,\n        })\n    }\n\n    // Pick candidates based on a scoring system\n    while (\n        context.candidates.size > 0 &&\n        context.keepSeriesHeight <= availableHeight\n    ) {\n        const candidates = Array.from(context.candidates)\n        const scoreMap = computeCandidateScores(\n            candidates,\n            context.sortedKeepSeries\n        )\n\n        // Pick the candidate with the highest score\n        const getBestCandidate = (candidates: PlacedLabelSeries[]) =>\n            _.maxBy(candidates, (c) => scoreMap.get(c.seriesName))\n\n        context = pickCandidateWithRetry({\n            context,\n            candidateSubset: candidates,\n            getCandidateFromSubset: getBestCandidate,\n        })\n    }\n\n    return context.sortedKeepSeries\n}\n","import * as _ from \"lodash-es\"\nimport { Bounds, excludeUndefined, RequiredBy } from \"@ourworldindata/utils\"\nimport { TextWrap } from \"@ourworldindata/components\"\nimport { SeriesLabelState } from \"../seriesLabel/SeriesLabelState.js\"\nimport { computed } from \"mobx\"\nimport { VerticalAxis } from \"../axis/Axis.js\"\nimport { EntityName, SeriesName, VerticalAlign } from \"@ourworldindata/types\"\nimport { BASE_FONT_SIZE } from \"../core/GrapherConstants.js\"\nimport { roundFontSize, scaleFontSize } from \"../chart/ChartUtils.js\"\nimport { AxisConfig } from \"../axis/AxisConfig.js\"\nimport {\n    findImportantSeriesThatFitIntoTheAvailableSpace,\n    findSeriesThatFitIntoTheAvailableSpace,\n    findSeriesThatFitWithHighlights,\n    FilterAlgorithm,\n} from \"./VerticalLabelsFilterAlgorithms.js\"\nimport { computeHeight } from \"./VerticalLabelsHelpers.js\"\nimport {\n    ANNOTATION_PADDING,\n    DEFAULT_CONNECTOR_LINE_WIDTH,\n    DEFAULT_FONT_WEIGHT,\n    LEGEND_ITEM_MIN_SPACING,\n    MARKER_MARGIN,\n} from \"./VerticalLabelsConstants.js\"\nimport { Emphasis } from \"../interaction/Emphasis.js\"\nimport {\n    LabelSeries,\n    PlacedLabelSeries,\n    SizedLabelSeries,\n    RenderLabelSeries,\n} from \"./VerticalLabelsTypes\"\n\nexport interface VerticalLabelsStateOptions {\n    yAxis?: () => VerticalAxis // Passed as getter to avoid MobX dependency cycles\n    yRange?: () => [number, number] // Passed as getter to avoid MobX dependency cycles\n    maxWidth?: number\n    baseFontSize?: number\n    fontWeight?: number\n    verticalAlign?: VerticalAlign\n    textAnchor?: \"start\" | \"end\"\n    showRegionTooltip?: boolean\n    seriesNamesSortedByImportance?: SeriesName[]\n}\n\n/**\n * Manages layout and visibility of vertical series labels, handling sizing,\n * placement, collision resolution, and filtering when space is limited\n */\nexport class VerticalLabelsState {\n    private readonly initialSeries: LabelSeries[]\n    private readonly initialOptions: VerticalLabelsStateOptions\n\n    private readonly defaultOptions = {\n        baseFontSize: BASE_FONT_SIZE,\n        fontWeight: DEFAULT_FONT_WEIGHT,\n        maxWidth: Infinity,\n        verticalAlign: VerticalAlign.middle,\n        textAnchor: \"start\",\n        showRegionTooltip: true,\n    } as const satisfies Partial<VerticalLabelsStateOptions>\n\n    constructor(series: LabelSeries[], options: VerticalLabelsStateOptions) {\n        this.initialSeries = series\n        this.initialOptions = options\n    }\n\n    @computed private get options(): RequiredBy<\n        VerticalLabelsStateOptions,\n        keyof typeof this.defaultOptions\n    > {\n        return { ...this.defaultOptions, ...this.initialOptions }\n    }\n\n    @computed get textAnchor(): \"start\" | \"end\" {\n        return this.options.textAnchor\n    }\n\n    @computed get fontSize(): number {\n        return scaleFontSize(12, this.options.baseFontSize)\n    }\n\n    @computed private get yAxis(): VerticalAxis {\n        return this.options.yAxis?.() ?? new VerticalAxis(new AxisConfig())\n    }\n\n    @computed private get textMaxWidth(): number {\n        return this.options.maxWidth - DEFAULT_CONNECTOR_LINE_WIDTH\n    }\n\n    private makeAnnotationTextWrap(series: LabelSeries): TextWrap | undefined {\n        if (!series.annotation) return undefined\n        const maxWidth = Math.min(this.textMaxWidth, 150)\n        return new TextWrap({\n            text: series.annotation,\n            maxWidth,\n            fontSize: roundFontSize(this.fontSize * 0.9),\n            lineHeight: 1,\n        })\n    }\n\n    @computed.struct get sizedSeries(): SizedLabelSeries[] {\n        const { fontWeight: defaultFontWeight } = this.options\n        return this.initialSeries.map((series) => {\n            const seriesFontWeight = series.formattedValue ? 700 : undefined\n            const fontWeight = seriesFontWeight ?? defaultFontWeight\n\n            const seriesLabel = new SeriesLabelState({\n                text: series.label,\n                maxWidth: this.textMaxWidth,\n                fontSize: this.fontSize,\n                fontWeight,\n                textAnchor: this.options.textAnchor,\n                formattedValue: series.formattedValue,\n                placeFormattedValueInNewLine:\n                    series.placeFormattedValueInNewLine,\n                showRegionTooltip: this.options.showRegionTooltip,\n            })\n\n            const annotationTextWrap = this.makeAnnotationTextWrap(series)\n            const annotationWidth = annotationTextWrap?.width ?? 0\n            const annotationHeight = annotationTextWrap\n                ? ANNOTATION_PADDING + annotationTextWrap.height\n                : 0\n\n            return {\n                ...series,\n                seriesLabel,\n                annotationTextWrap,\n                width: Math.max(seriesLabel.width, annotationWidth),\n                height: seriesLabel.height + annotationHeight,\n            }\n        })\n    }\n\n    @computed private get maxLabelWidth(): number {\n        const { sizedSeries = [] } = this\n        return _.max(sizedSeries.map((d) => d.width)) ?? 0\n    }\n\n    /**\n     * Stable width that might be slightly inaccurate because it always\n     * includes space for connector lines. This is useful to prevent layout\n     * shifts when connector lines toggle on/off, and avoids circular\n     * dependencies in layout calculations\n     */\n    @computed get stableWidth(): number {\n        return this.maxLabelWidth + DEFAULT_CONNECTOR_LINE_WIDTH + MARKER_MARGIN\n    }\n\n    @computed get width(): number {\n        return this.needsConnectorLines\n            ? this.stableWidth\n            : this.maxLabelWidth + MARKER_MARGIN\n    }\n\n    @computed private get legendY(): [number, number] {\n        const range = this.options.yRange?.() ?? this.yAxis.range\n        return [Math.min(range[1], range[0]), Math.max(range[1], range[0])]\n    }\n\n    private getYPositionForSeriesLabel(series: SizedLabelSeries): number {\n        const y = this.yAxis.place(series.yValue)\n        const lineHeight = series.seriesLabel.singleLineHeight\n        switch (this.options.verticalAlign) {\n            case VerticalAlign.middle:\n                return y - series.height / 2\n            case VerticalAlign.top:\n                return y - lineHeight / 2\n            case VerticalAlign.bottom:\n                return y - series.height + lineHeight / 2\n        }\n    }\n\n    // Naive initial placement of each mark at the target height, before collision detection\n    @computed\n    private get initialPlacedSeries(): PlacedLabelSeries[] {\n        const { yAxis, legendY } = this\n        const legendX = 0\n\n        const [legendYMin, legendYMax] = legendY\n\n        return this.sizedSeries.map((series) => {\n            const labelHeight = series.height\n            const labelWidth = series.width + DEFAULT_CONNECTOR_LINE_WIDTH\n\n            const midY = yAxis.place(series.yValue)\n            const origBounds = new Bounds(\n                legendX,\n                midY - series.height / 2,\n                labelWidth,\n                labelHeight\n            )\n\n            // ensure label doesn't go beyond the top or bottom of the chart\n            const initialY = this.getYPositionForSeriesLabel(series)\n            const y = Math.min(\n                Math.max(initialY, legendYMin),\n                legendYMax - labelHeight\n            )\n            const bounds = new Bounds(legendX, y, labelWidth, labelHeight)\n\n            return {\n                ...series,\n                y,\n                midY,\n                origBounds,\n                bounds,\n                repositions: 0,\n                level: 0,\n                totalLevels: 0,\n            }\n        })\n    }\n\n    @computed get initialPlacedSeriesByName(): Map<\n        EntityName,\n        PlacedLabelSeries\n    > {\n        return new Map(this.initialPlacedSeries.map((d) => [d.seriesName, d]))\n    }\n\n    @computed get placedSeries(): PlacedLabelSeries[] {\n        const [yLegendMin, yLegendMax] = this.legendY\n\n        // ensure list is sorted by the visual position in ascending order\n        const sortedSeries = _.sortBy(\n            this.visiblePlacedSeries,\n            (label) => label.midY\n        )\n\n        const groups: PlacedLabelSeries[][] = sortedSeries.map((mark) => [\n            { ...mark },\n        ])\n\n        let hasOverlap\n\n        do {\n            hasOverlap = false\n            for (let i = 0; i < groups.length - 1; i++) {\n                const topGroup = groups[i]\n                const bottomGroup = groups[i + 1]\n                const topBounds = groupBounds(topGroup)\n                const bottomBounds = groupBounds(bottomGroup)\n                if (topBounds.intersects(bottomBounds)) {\n                    const overlapHeight =\n                        topBounds.bottom -\n                        bottomBounds.top +\n                        LEGEND_ITEM_MIN_SPACING\n                    const newHeight =\n                        topBounds.height +\n                        LEGEND_ITEM_MIN_SPACING +\n                        bottomBounds.height\n                    const targetY =\n                        topBounds.top -\n                        overlapHeight *\n                            (bottomGroup.length /\n                                (topGroup.length + bottomGroup.length))\n                    const overflowTop = Math.max(yLegendMin - targetY, 0)\n                    const overflowBottom = Math.max(\n                        targetY + newHeight - yLegendMax,\n                        0\n                    )\n                    const newY = targetY + overflowTop - overflowBottom\n                    const newGroup = [...topGroup, ...bottomGroup]\n                    stackGroupVertically(newGroup, newY)\n                    groups.splice(i, 2, newGroup)\n                    hasOverlap = true\n                    break\n                }\n            }\n        } while (hasOverlap && groups.length > 1)\n\n        for (const group of groups) {\n            let currentLevel = 0\n            let prevSign = 0\n            for (const series of group) {\n                const currentSign = Math.sign(\n                    series.bounds.y - series.origBounds.y\n                )\n                if (prevSign === currentSign) {\n                    currentLevel -= currentSign\n                }\n                series.level = currentLevel\n                prevSign = currentSign\n            }\n            const minLevel = _.min(group.map((mark) => mark.level)) as number\n            const maxLevel = _.max(group.map((mark) => mark.level)) as number\n            for (const mark of group) {\n                mark.level -= minLevel\n                mark.totalLevels = maxLevel - minLevel + 1\n            }\n        }\n\n        return groups.flat()\n    }\n\n    @computed private get seriesSortedByImportance():\n        | PlacedLabelSeries[]\n        | undefined {\n        if (!this.options.seriesNamesSortedByImportance) return undefined\n        return excludeUndefined(\n            this.options.seriesNamesSortedByImportance.map((seriesName) =>\n                this.initialPlacedSeriesByName.get(seriesName)\n            )\n        )\n    }\n\n    @computed private get availableHeight(): number {\n        const [min, max] = this.legendY\n        return Math.abs(max - min)\n    }\n\n    @computed private get filterCandidates(): PlacedLabelSeries[] {\n        return this.seriesSortedByImportance ?? this.initialPlacedSeries\n    }\n\n    @computed private get filterAlgorithm(): FilterAlgorithm {\n        return this.options.seriesNamesSortedByImportance\n            ? findImportantSeriesThatFitIntoTheAvailableSpace\n            : findSeriesThatFitIntoTheAvailableSpace\n    }\n\n    @computed get visiblePlacedSeries(): PlacedLabelSeries[] {\n        const { initialPlacedSeries, availableHeight } = this\n\n        // Early return if filtering is not needed\n        const totalHeight = computeHeight(initialPlacedSeries)\n        if (totalHeight <= availableHeight) return initialPlacedSeries\n\n        return findSeriesThatFitWithHighlights(\n            this.filterCandidates,\n            this.filterAlgorithm,\n            availableHeight\n        )\n    }\n\n    @computed get visibleSeriesNames(): SeriesName[] {\n        return this.visiblePlacedSeries.map((series) => series.seriesName)\n    }\n\n    @computed get visibleSeriesHeight(): number {\n        return computeHeight(this.visiblePlacedSeries)\n    }\n\n    // Does this placement need line markers or is the position of the labels already clear?\n    @computed get needsConnectorLines(): boolean {\n        return this.placedSeries.some((series) => series.totalLevels > 1)\n    }\n\n    @computed get maxLevel(): number {\n        return _.max(this.placedSeries.map((series) => series.totalLevels)) ?? 0\n    }\n\n    @computed get renderSeries(): RenderLabelSeries[] {\n        const direction = this.options.textAnchor === \"start\" ? 1 : -1\n        const markerMargin = direction * MARKER_MARGIN\n        const connectorLineWidth = direction * DEFAULT_CONNECTOR_LINE_WIDTH\n\n        return this.placedSeries.map((series) => {\n            const { x } = series.origBounds\n            const connectorLineCoords = {\n                startX: x + markerMargin,\n                endX: x + connectorLineWidth - markerMargin,\n            }\n\n            const textX = this.needsConnectorLines\n                ? connectorLineCoords.endX + markerMargin\n                : x + markerMargin\n            const textY = series.bounds.y\n\n            const emphasis = series.emphasis ?? Emphasis.Default\n\n            return {\n                ...series,\n                labelCoords: { x: textX, y: textY },\n                connectorLineCoords,\n                emphasis,\n            }\n        })\n    }\n\n    @computed get annotatedSeries(): RenderLabelSeries[] {\n        return this.renderSeries.filter((series) => series.annotationTextWrap)\n    }\n\n    @computed get hasAnnotatedSeries(): boolean {\n        return this.annotatedSeries.length > 0\n    }\n}\n\nfunction groupBounds(group: PlacedLabelSeries[]): Bounds {\n    const first = group[0]\n    const last = group[group.length - 1]\n    const height = last.bounds.bottom - first.bounds.top\n    const width = Math.max(first.bounds.width, last.bounds.width)\n    return new Bounds(first.bounds.x, first.bounds.y, width, height)\n}\n\nfunction stackGroupVertically(\n    group: PlacedLabelSeries[],\n    y: number\n): PlacedLabelSeries[] {\n    let currentY = y\n    group.forEach((mark) => {\n        mark.bounds = mark.bounds.set({ y: currentY })\n        mark.repositions += 1\n        currentY += mark.bounds.height + LEGEND_ITEM_MIN_SPACING\n    })\n    return group\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport { observer } from \"mobx-react\"\nimport { excludeUndefined } from \"@ourworldindata/utils\"\nimport { Time } from \"@ourworldindata/types\"\nimport { extent } from \"d3-array\"\nimport { RenderLineChartSeries } from \"./LineChartConstants\"\nimport { LineChartState } from \"./LineChartState.js\"\nimport { getAnnotationsForSeries } from \"./LineChartHelpers\"\nimport {\n    Tooltip,\n    TooltipState,\n    TooltipTable,\n    makeTooltipRoundingNotice,\n    toTooltipTableColumns,\n} from \"../tooltip/Tooltip\"\nimport {\n    FooterItem,\n    TooltipFooterIcon,\n    TooltipProps,\n    TooltipTableProps,\n} from \"../tooltip/TooltipProps.js\"\nimport { GRAPHER_OPACITY_MUTED } from \"../core/GrapherConstants\"\nimport { darkenColorForLine } from \"../color/ColorUtils\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\n\nexport interface LineChartTooltipProps {\n    id: number\n    chartState: LineChartState\n    tooltipState: TooltipState<{ time: Time }>\n    series: RenderLineChartSeries[]\n    xAxisLabel?: string\n    dismissTooltip: () => void\n}\n\n@observer\nexport class LineChartTooltip extends React.Component<LineChartTooltipProps> {\n    private get chartState(): LineChartState {\n        return this.props.chartState\n    }\n\n    private get target(): { time: Time } | undefined {\n        return this.props.tooltipState.target ?? undefined\n    }\n\n    private get series(): RenderLineChartSeries[] {\n        const { target } = this\n        if (!target) return []\n\n        // Duplicate seriesNames will be present if there is a projected-values line\n        const grouped = Map.groupBy(this.props.series, (s) => s.seriesName)\n\n        return grouped\n            .values()\n            .map(\n                (segments) =>\n                    // Ideally pick series with a defined value at the target time\n                    segments.find((series) =>\n                        series.points.find((point) => point.x === target.time)\n                    ) ??\n                    // Otherwise pick the series whose start & end contains the target time\n                    // and display a \"No data\" notice.\n                    segments.find((series): boolean | void => {\n                        const [startX, endX] = extent(\n                            series.points,\n                            ({ x }) => x\n                        )\n                        return (\n                            _.isNumber(startX) &&\n                            _.isNumber(endX) &&\n                            startX < target.time &&\n                            target.time < endX\n                        )\n                    })\n            )\n            .filter((series) => series !== undefined)\n            .toArray()\n    }\n\n    private get hasProjectedSeries(): boolean {\n        return this.series.some((series) => series.isProjection)\n    }\n\n    private get sortedSeries(): RenderLineChartSeries[] {\n        const { target, series } = this\n        if (!target) return []\n\n        return _.sortBy(series, (series) => {\n            const value = series.points.find((point) => point.x === target.time)\n            return value !== undefined ? -value.y : Infinity\n        })\n    }\n\n    private get projectionNotice(): FooterItem | undefined {\n        if (!this.hasProjectedSeries) return undefined\n\n        return { icon: TooltipFooterIcon.Stripes, text: \"Projected data\" }\n    }\n\n    private get roundingNotice(): FooterItem | undefined {\n        const { formatColumn } = this.chartState\n\n        if (!formatColumn.roundsToSignificantFigures) return undefined\n\n        return {\n            icon: TooltipFooterIcon.None,\n            text: makeTooltipRoundingNotice([\n                formatColumn.numSignificantFigures,\n            ]),\n        }\n    }\n\n    private get footer(): FooterItem[] {\n        return excludeUndefined([this.projectionNotice, this.roundingNotice])\n    }\n\n    private get title(): string {\n        const { target } = this\n        if (!target) return \"\"\n        return this.chartState.formatColumn.formatTime(target.time)\n    }\n\n    private get titleAnnotation(): string {\n        return this.props.xAxisLabel ? `(${this.props.xAxisLabel})` : \"\"\n    }\n\n    private get subtitle(): string | undefined {\n        const { isRelativeMode, startTime } = this.chartState.manager\n        const { formatColumn } = this.chartState\n\n        return isRelativeMode && startTime\n            ? `% change since ${formatColumn.formatTime(startTime)}`\n            : formatColumn.displayUnit\n    }\n\n    private get subtitleFormat(): TooltipProps[\"subtitleFormat\"] {\n        return this.subtitle === this.chartState.formatColumn.displayUnit\n            ? \"unit\"\n            : undefined\n    }\n\n    private get columns(): CoreColumn[] {\n        const { formatColumn, colorColumn, hasColorScale } = this.chartState\n\n        const columns = [formatColumn]\n        if (hasColorScale && colorColumn.slug !== formatColumn.slug)\n            columns.push(colorColumn)\n\n        return columns\n    }\n\n    private toTooltipTableRow(\n        series: RenderLineChartSeries\n    ): TooltipTableProps[\"rows\"][number] {\n        const { target } = this\n\n        const { seriesName, displayName, isProjection: striped } = series\n        const annotation = getAnnotationsForSeries(\n            this.chartState.annotationsMap,\n            seriesName\n        )\n\n        const point = series.points.find((point) => point.x === target!.time)\n\n        const blurred =\n            series.emphasis === Emphasis.Muted || point === undefined\n\n        const color = this.chartState.hasColorScale\n            ? darkenColorForLine(\n                  this.chartState.getColorScaleColor(point?.colorValue)\n              )\n            : series.color\n        const opacity = blurred ? GRAPHER_OPACITY_MUTED : 1\n        const swatch = { color, opacity }\n\n        const values = excludeUndefined([\n            point?.y,\n            point?.colorValue as undefined | number,\n        ])\n\n        return {\n            name: displayName,\n            annotation,\n            swatch,\n            blurred,\n            striped,\n            values,\n        }\n    }\n\n    override render(): React.ReactElement | null {\n        const { target } = this\n        const { position, fading } = this.props.tooltipState\n\n        if (!target) return null\n\n        return (\n            <Tooltip\n                id={this.props.id}\n                tooltipManager={this.chartState.manager}\n                x={position.x}\n                y={position.y}\n                style={{ maxWidth: \"400px\" }}\n                offsetXDirection=\"left\"\n                offsetX={20}\n                offsetY={-16}\n                title={this.title}\n                titleAnnotation={this.titleAnnotation}\n                subtitle={this.subtitle}\n                subtitleFormat={this.subtitleFormat}\n                footer={this.footer}\n                dissolve={fading}\n                dismiss={this.props.dismissTooltip}\n            >\n                <TooltipTable\n                    columns={toTooltipTableColumns(this.columns)}\n                    rows={this.sortedSeries.map((series) =>\n                        this.toTooltipTableRow(series)\n                    )}\n                />\n            </Tooltip>\n        )\n    }\n}\n","import { Color } from \"@ourworldindata/types\"\nimport { ColorScaleBin } from \"../color/ColorScaleBin\"\nimport { GRAPHER_DARK_TEXT } from \"../color/ColorConstants\"\nimport { Emphasis } from \"../interaction/Emphasis\"\n\n/**\n * How each bin a legend shows should be emphasised. Resolved by the chart and\n * handed to the legend as a render prop, so the legend itself stays a pure\n * function of its props. Bins missing from the map render at `Emphasis.Default`.\n */\nexport type BinEmphasis = Map<ColorScaleBin, Emphasis>\n\n/** Resolves every bin's emphasis into a map */\nexport function toBinEmphasis(\n    bins: readonly ColorScaleBin[],\n    resolve: (bin: ColorScaleBin) => Emphasis\n): BinEmphasis {\n    return new Map(bins.map((bin) => [bin, resolve(bin)]))\n}\n\n/**\n * Visual styling for legend label text in a particular state.\n */\nexport interface LegendTextStyle {\n    opacity?: number\n    fontWeight?: number\n    color?: Color\n}\n\n/**\n * Visual styling for legend marker/rect in a particular state.\n */\nexport interface LegendMarkerStyle {\n    opacity?: number\n    fill?: Color\n    strokeWidth?: number\n    stroke?: Color\n}\n\n/**\n * Complete style configuration for all possible legend item states.\n */\nexport interface LegendStyleConfig {\n    text?: Partial<Record<Emphasis, LegendTextStyle>>\n    marker?: Partial<Record<Emphasis, LegendMarkerStyle>>\n}\n\n/**\n * Merges the style config's default styling with its override for `emphasis`.\n * The legend's own defaults come first, so a config can override any of them.\n */\nexport function resolveLegendTextStyle(\n    styleConfig: LegendStyleConfig | undefined,\n    emphasis: Emphasis | undefined\n): LegendTextStyle {\n    const text = styleConfig?.text\n    return {\n        color: GRAPHER_DARK_TEXT,\n        ...text?.default,\n        ...text?.[emphasis ?? Emphasis.Default],\n    }\n}\n\n/** The marker equivalent of `resolveLegendTextStyle`. */\nexport function resolveLegendMarkerStyle(\n    styleConfig: LegendStyleConfig | undefined,\n    emphasis: Emphasis | undefined,\n    defaults: LegendMarkerStyle\n): LegendMarkerStyle {\n    const marker = styleConfig?.marker\n    return {\n        ...defaults,\n        ...marker?.default,\n        ...marker?.[emphasis ?? Emphasis.Default],\n    }\n}\n","export const DEFAULT_BIN_HEIGHT = 10\nexport const DEFAULT_NUMERIC_BIN_STROKE = \"#333\"\nexport const DEFAULT_NUMERIC_BIN_STROKE_WIDTH = 0.3\nexport const DEFAULT_TEXT_COLOR = \"#111\"\nexport const DEFAULT_TICK_SIZE = 3\n\nexport const CATEGORICAL_BIN_MIN_WIDTH = 20\nexport const CATEGORICAL_BIN_STROKE_WIDTH = 0.4\nexport const SPACE_BETWEEN_CATEGORICAL_BINS = 7\nexport const MINIMUM_LABEL_DISTANCE = 5\n\n/** Minimum width of a bin in a color legend, in multiples of the base font size */\nexport const BIN_MIN_WIDTH_EM = 3.25\n\n/** Maximum width of a bin in a color legend, in multiples of the base font size */\nexport const BIN_MAX_WIDTH_EM = 9\n\n/** The width of the arrowhead for open-ended bins (left or right) */\nexport const ARROW_SIZE = 5\n\nexport const BIN_LABEL_PADDING = 5\nexport const MINIMUM_BIN_LABEL_DISTANCE = 12\n","import * as React from \"react\"\nimport {\n    VerticalAlign,\n    dyFromAlign,\n    makeFigmaId,\n    removeAllWhitespace,\n    roundForSvg,\n} from \"@ourworldindata/utils\"\nimport { TextWrapSvg } from \"@ourworldindata/components\"\nimport { ColorScaleBin, isNumericBin } from \"../color/ColorScaleBin\"\nimport { darkenColorForLine } from \"../color/ColorUtils\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport {\n    LegendMarkerStyle,\n    resolveLegendMarkerStyle,\n    resolveLegendTextStyle,\n} from \"./LegendStyleConfig\"\nimport { HorizontalNumericColorLegendState } from \"./HorizontalNumericColorLegendState\"\nimport {\n    HorizontalColorLegendProps,\n    PositionedBin,\n} from \"./HorizontalColorLegendTypes\"\nimport { useDismissOnOutsidePointerDownOrUnmount } from \"../hooks.js\"\nimport {\n    ARROW_SIZE,\n    DEFAULT_NUMERIC_BIN_STROKE,\n    DEFAULT_NUMERIC_BIN_STROKE_WIDTH,\n    DEFAULT_TEXT_COLOR,\n} from \"./HorizontalColorLegendConstants\"\n\nexport function HorizontalNumericColorLegend(\n    props: HorizontalColorLegendProps<HorizontalNumericColorLegendState>\n): React.ReactElement {\n    const {\n        state,\n        x,\n        y,\n        interactive = true,\n        styleConfig,\n        binEmphasis,\n        onMouseEnter,\n        onMouseOver,\n        onMouseLeave,\n    } = props\n    const {\n        numericLabels,\n        binHeight,\n        positionedBins,\n        height,\n        title,\n        titlePosition,\n    } = state\n\n    const isHoverable = interactive && !!onMouseOver\n    useDismissOnOutsidePointerDownOrUnmount(\n        isHoverable ? onMouseLeave : undefined\n    )\n\n    const defaultTextColor =\n        styleConfig?.text?.default?.color ?? DEFAULT_TEXT_COLOR\n\n    const bottomY = y + height\n\n    const markerStyleFor = (bin: ColorScaleBin): LegendMarkerStyle =>\n        resolveLegendMarkerStyle(styleConfig, binEmphasis?.get(bin), {\n            fill: bin.color,\n            stroke: DEFAULT_NUMERIC_BIN_STROKE,\n            strokeWidth: DEFAULT_NUMERIC_BIN_STROKE_WIDTH,\n        })\n\n    const onPointerEnter =\n        (bin: ColorScaleBin) =>\n        (event: React.PointerEvent): void => {\n            if (event.pointerType === \"touch\") return\n\n            onMouseEnter?.(bin)\n            onMouseOver?.(bin)\n        }\n\n    const onPointerLeave = (event: React.PointerEvent): void => {\n        if (event.pointerType === \"touch\") return\n\n        onMouseLeave?.()\n    }\n\n    const onPointerUp =\n        (bin: ColorScaleBin) =>\n        (event: React.PointerEvent): void => {\n            if (event.pointerType === \"touch\") {\n                onMouseEnter?.(bin)\n                onMouseOver?.(bin)\n            }\n        }\n\n    const renderBin = (\n        positionedBin: PositionedBin,\n        isHighlightOverlay = false\n    ): React.ReactElement => {\n        const bin = positionedBin.bin\n        const style = markerStyleFor(bin)\n        const fill = bin.fillPatternRef\n            ? `url(#${bin.fillPatternRef})`\n            : style.fill\n\n        const geometry = {\n            x: x + positionedBin.x,\n            y: bottomY - binHeight,\n            width: positionedBin.width,\n            height: binHeight,\n            isOpenLeft: isNumericBin(bin) ? bin.props.isOpenLeft : false,\n            isOpenRight: isNumericBin(bin) ? bin.props.isOpenRight : false,\n        }\n\n        return (\n            <React.Fragment\n                key={\n                    isHighlightOverlay\n                        ? `highlight-${positionedBin.x}`\n                        : positionedBin.x\n                }\n            >\n                <NumericBinRect\n                    {...geometry}\n                    fill={isHighlightOverlay ? \"none\" : fill}\n                    stroke={style.stroke}\n                    strokeWidth={style.strokeWidth}\n                    opacity={style.opacity}\n                    pointerEvents={isHighlightOverlay ? \"none\" : undefined}\n                />\n                {bin.overlayPatternRef && !isHighlightOverlay && (\n                    <NumericBinRect\n                        {...geometry}\n                        fill={`url(#${bin.overlayPatternRef})`}\n                        opacity={style.opacity}\n                        pointerEvents=\"none\"\n                    />\n                )}\n            </React.Fragment>\n        )\n    }\n\n    return (\n        <g\n            id={makeFigmaId(\"numeric-color-legend\")}\n            className=\"numericColorLegend\"\n            onPointerDown={(event) => event.stopPropagation()}\n        >\n            <g id={makeFigmaId(\"lines\")}>\n                {numericLabels.map((label, index) => {\n                    const style = markerStyleFor(label.bin)\n                    return (\n                        <line\n                            key={index}\n                            id={makeFigmaId(label.text)}\n                            x1={roundForSvg(\n                                x + label.bounds.x + label.bounds.width / 2\n                            )}\n                            y1={roundForSvg(bottomY - binHeight)}\n                            x2={roundForSvg(\n                                x + label.bounds.x + label.bounds.width / 2\n                            )}\n                            y2={roundForSvg(\n                                bottomY + label.bounds.y + label.bounds.height\n                            )}\n                            // if we use a light color for stroke (e.g. white), we want it to stay\n                            // \"invisible\", except for raised labels, where we want *some* contrast.\n                            stroke={\n                                label.raised && style.stroke\n                                    ? darkenColorForLine(style.stroke)\n                                    : style.stroke\n                            }\n                            strokeWidth={style.strokeWidth}\n                        />\n                    )\n                })}\n            </g>\n            <g id={makeFigmaId(\"swatches\")}>\n                {positionedBins.map((positionedBin) =>\n                    renderBin(positionedBin)\n                )}\n                {/*\n                        Render highlighted bins last so their stroke is painted above adjacent bins.\n                        Note that this renders the highlighted bin twice, once in its normal place and once in the highlight layer here.\n\n                        Another option to solve the cosmetic stroke issue would be to sort their bins by their emphasis state, but that has caused issues with React event handlers becoming detached from the elements and `pointerleave` events not firing.\n                    */}\n                {positionedBins\n                    .filter(\n                        (positionedBin) =>\n                            binEmphasis?.get(positionedBin.bin) ===\n                            Emphasis.Highlighted\n                    )\n                    .map((positionedBin) => renderBin(positionedBin, true))}\n            </g>\n            <g id={makeFigmaId(\"labels\")}>\n                {numericLabels.map((label, index) => {\n                    const style = resolveLegendTextStyle(\n                        styleConfig,\n                        binEmphasis?.get(label.bin)\n                    )\n                    return (\n                        <text\n                            key={index}\n                            x={roundForSvg(x + label.bounds.x)}\n                            y={roundForSvg(bottomY + label.bounds.y)}\n                            // we can't use dominant-baseline to do proper alignment since our svg-to-png library Sharp\n                            // doesn't support that (https://github.com/lovell/sharp/issues/1996), so we'll have to make\n                            // do with some rough positioning.\n                            dy={dyFromAlign(VerticalAlign.bottom)}\n                            fontSize={label.fontSize}\n                            style={{ fill: style.color, ...style }}\n                        >\n                            {label.text}\n                        </text>\n                    )\n                })}\n            </g>\n            {isHoverable && (\n                <g aria-hidden=\"true\">\n                    {positionedBins.map((positionedBin, index) => (\n                        <rect\n                            key={index}\n                            x={roundForSvg(x + positionedBin.x)}\n                            y={roundForSvg(y)}\n                            width={roundForSvg(positionedBin.width)}\n                            height={roundForSvg(height)}\n                            fill=\"transparent\"\n                            pointerEvents=\"all\"\n                            onPointerEnter={onPointerEnter(positionedBin.bin)}\n                            onPointerLeave={onPointerLeave}\n                            onPointerUp={onPointerUp(positionedBin.bin)}\n                        />\n                    ))}\n                </g>\n            )}\n            {title && titlePosition && (\n                <TextWrapSvg\n                    textWrap={title}\n                    x={x + titlePosition.x}\n                    y={y + titlePosition.y}\n                    fill={defaultTextColor}\n                />\n            )}\n        </g>\n    )\n}\n\ninterface NumericBinRectProps extends React.SVGAttributes<SVGElement> {\n    x: number\n    y: number\n    width: number\n    height: number\n    isOpenLeft?: boolean\n    isOpenRight?: boolean\n}\n\nconst NumericBinRect = (props: NumericBinRectProps): React.ReactElement => {\n    const { isOpenLeft, isOpenRight, x, y, width, height, ...restProps } = props\n    if (isOpenRight) {\n        const a = ARROW_SIZE\n        const w = width - a\n        const d = removeAllWhitespace(`\n            M ${roundForSvg(x)}, ${roundForSvg(y)}\n            l ${roundForSvg(w)}, 0\n            l ${roundForSvg(a)}, ${roundForSvg(height / 2)}\n            l ${roundForSvg(-a)}, ${roundForSvg(height / 2)}\n            l ${roundForSvg(-w)}, 0\n            z\n        `)\n        return <path d={d} {...restProps} />\n    } else if (isOpenLeft) {\n        const a = ARROW_SIZE\n        const w = width - a\n        const d = removeAllWhitespace(`\n            M ${roundForSvg(x + a)}, ${roundForSvg(y)}\n            l ${roundForSvg(w)}, 0\n            l 0, ${roundForSvg(height)}\n            l ${roundForSvg(-w)}, 0\n            l ${roundForSvg(-a)}, ${roundForSvg(-height / 2)}\n            z\n        `)\n        return <path d={d} {...restProps} />\n    } else {\n        return (\n            <rect\n                x={roundForSvg(x)}\n                y={roundForSvg(y)}\n                width={roundForSvg(width)}\n                height={roundForSvg(height)}\n                {...restProps}\n            />\n        )\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport { computed } from \"mobx\"\nimport { Bounds, HorizontalAlign } from \"@ourworldindata/utils\"\nimport { TextWrap } from \"@ourworldindata/components\"\nimport {\n    ColorScaleBin,\n    NumericBin,\n    isCategoricalBin,\n    isNumericBin,\n} from \"../color/ColorScaleBin\"\nimport { BASE_FONT_SIZE } from \"../core/GrapherConstants\"\nimport { scaleFontSize } from \"../chart/ChartUtils\"\nimport {\n    PositionedBin,\n    NumericLabel,\n    HorizontalNumericColorLegendOptions,\n} from \"./HorizontalColorLegendTypes\"\nimport {\n    DEFAULT_BIN_HEIGHT,\n    DEFAULT_TICK_SIZE,\n    CATEGORICAL_BIN_MIN_WIDTH,\n    MINIMUM_LABEL_DISTANCE,\n    BIN_MIN_WIDTH_EM,\n} from \"./HorizontalColorLegendConstants\"\n\n/**\n * Lays out a horizontal strip of color bins with tick labels above it.\n * All coordinates are relative to the legend's own origin; the render\n * component offsets them by its `x`/`y` props.\n */\nexport class HorizontalNumericColorLegendState {\n    private readonly bins: ColorScaleBin[]\n    private readonly options: HorizontalNumericColorLegendOptions\n\n    constructor(\n        bins: ColorScaleBin[],\n        options: HorizontalNumericColorLegendOptions\n    ) {\n        this.bins = bins\n        this.options = options\n    }\n\n    @computed private get baseFontSize(): number {\n        return this.options.baseFontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get align(): HorizontalAlign {\n        return this.options.align ?? HorizontalAlign.center\n    }\n\n    @computed private get tickSize(): number {\n        return this.options.tickSize ?? DEFAULT_TICK_SIZE\n    }\n\n    @computed private get visibleBins(): ColorScaleBin[] {\n        return this.bins.filter((bin) => !bin.isHidden)\n    }\n\n    @computed private get numericBins(): NumericBin[] {\n        return this.visibleBins.filter(isNumericBin)\n    }\n\n    @computed get binHeight(): number {\n        return this.options.binHeight ?? DEFAULT_BIN_HEIGHT\n    }\n\n    @computed private get tickFontSize(): number {\n        return scaleFontSize(12, this.baseFontSize)\n    }\n\n    @computed private get itemMargin(): number {\n        return Math.round(this.baseFontSize * 1.125)\n    }\n\n    private getTickLabelWidth(label: string): number {\n        return Bounds.forText(label, {\n            fontSize: this.tickFontSize,\n        }).width\n    }\n\n    private getCategoricalBinWidth(bin: ColorScaleBin): number {\n        return Math.max(\n            this.getTickLabelWidth(bin.text),\n            CATEGORICAL_BIN_MIN_WIDTH\n        )\n    }\n\n    @computed private get totalCategoricalWidth(): number {\n        const { visibleBins, itemMargin } = this\n        const widths = visibleBins.map((bin) =>\n            isCategoricalBin(bin) && !bin.isHidden\n                ? this.getCategoricalBinWidth(bin) + itemMargin\n                : 0\n        )\n        return _.sum(widths)\n    }\n\n    private getNumericLabelMinWidth(bin: NumericBin): number {\n        if (bin.text) {\n            const tickLabelWidth = this.getTickLabelWidth(bin.text)\n            return tickLabelWidth + MINIMUM_LABEL_DISTANCE\n        } else {\n            const combinedLabelWidths = _.sum(\n                [bin.minText, bin.maxText].map(\n                    (text) =>\n                        // because labels are center-aligned, only half the label space is required\n                        this.getTickLabelWidth(text) / 2\n                )\n            )\n            return combinedLabelWidths + MINIMUM_LABEL_DISTANCE * 2\n        }\n    }\n\n    // Overstretched legends don't look good, so we calculate an _ideal_ width\n    // and only grow to `maxWidth` when the labels genuinely need the room.\n    @computed private get idealNumericWidth(): number {\n        const binCount = this.numericBins.length\n        const spaceRequirements = this.numericBins.map((bin) => ({\n            labelSpace: this.getNumericLabelMinWidth(bin),\n        }))\n        // Make sure the legend is big enough to avoid overlapping labels (including `raisedMode`)\n\n        // Try to keep the minimum close to the size of the \"No data\" bin,\n        // so they look visually balanced somewhat.\n        const minBinWidth = this.baseFontSize * BIN_MIN_WIDTH_EM\n        const maxBinWidth =\n            _.max(\n                spaceRequirements.map(({ labelSpace }) =>\n                    Math.max(labelSpace, minBinWidth)\n                )\n            ) ?? 0\n        return Math.round(maxBinWidth * binCount)\n    }\n\n    @computed get width(): number {\n        return Math.min(\n            this.options.maxWidth,\n            this.titleWidth +\n                this.totalCategoricalWidth +\n                this.idealNumericWidth\n        )\n    }\n\n    @computed private get availableNumericWidth(): number {\n        return this.width - this.totalCategoricalWidth - this.titleWidth\n    }\n\n    // The legend is usually narrower than the space it was given, so it has to\n    // be shifted to sit where `align` asks.\n    @computed private get xOffset(): number {\n        const { width, align } = this\n        const widthDiff = this.options.maxWidth - width\n        if (align === HorizontalAlign.center) {\n            return widthDiff / 2\n        } else if (align === HorizontalAlign.right) {\n            return widthDiff\n        } else {\n            return 0 // left align\n        }\n    }\n\n    @computed get positionedBins(): PositionedBin[] {\n        const {\n            availableNumericWidth,\n            visibleBins,\n            numericBins,\n            titleWidth,\n            xOffset,\n        } = this\n\n        let runningX = xOffset + titleWidth\n        let prevBin: ColorScaleBin | undefined\n\n        return visibleBins.map((bin, index) => {\n            const isFirst = index === 0\n            let width: number = this.getCategoricalBinWidth(bin)\n            let marginLeft: number = isFirst ? 0 : this.itemMargin\n\n            if (isNumericBin(bin)) {\n                width = availableNumericWidth / numericBins.length\n\n                // Don't add any margin between numeric bins\n                if (prevBin && isNumericBin(prevBin)) {\n                    marginLeft = 0\n                }\n            }\n\n            const x = runningX + marginLeft\n            runningX = x + width\n            prevBin = bin\n\n            return {\n                x,\n                width,\n                bin,\n            }\n        })\n    }\n\n    @computed private get titleFontSize(): number {\n        return scaleFontSize(14, this.baseFontSize)\n    }\n\n    @computed get title(): TextWrap | undefined {\n        const { title } = this.options\n        return title\n            ? new TextWrap({\n                  text: title,\n                  fontSize: this.titleFontSize,\n                  fontWeight: 700,\n                  maxWidth: this.options.maxWidth / 3,\n                  lineHeight: 1,\n              })\n            : undefined\n    }\n\n    @computed private get titleWidth(): number {\n        return this.title ? this.title.width + this.itemMargin : 0\n    }\n\n    @computed get numericLabels(): NumericLabel[] {\n        const { binHeight, positionedBins, tickFontSize } = this\n\n        const makeBoundaryLabel = (\n            bin: PositionedBin,\n            minOrMax: \"min\" | \"max\",\n            text: string\n        ): NumericLabel => {\n            const labelBounds = Bounds.forText(text, { fontSize: tickFontSize })\n            const x =\n                bin.x +\n                (minOrMax === \"min\" ? 0 : bin.width) -\n                labelBounds.width / 2\n            const y = -binHeight - labelBounds.height - this.tickSize\n\n            return {\n                text: text,\n                fontSize: tickFontSize,\n                bounds: labelBounds.set({ x: x, y: y }),\n                hidden: false,\n                raised: false,\n                bin: bin.bin,\n            }\n        }\n\n        const makeRangeLabel = (bin: PositionedBin): NumericLabel => {\n            const labelBounds = Bounds.forText(bin.bin.text, {\n                fontSize: tickFontSize,\n            })\n            const x = bin.x + bin.width / 2 - labelBounds.width / 2\n            const y = -binHeight - labelBounds.height - this.tickSize\n\n            return {\n                text: bin.bin.text,\n                fontSize: tickFontSize,\n                bounds: labelBounds.set({ x: x, y: y }),\n                priority: true,\n                hidden: false,\n                raised: false,\n                bin: bin.bin,\n            }\n        }\n\n        let labels: NumericLabel[] = []\n        for (const bin of positionedBins) {\n            if (bin.bin.text) labels.push(makeRangeLabel(bin))\n            else if (isNumericBin(bin.bin)) {\n                if (bin.bin.minText)\n                    labels.push(makeBoundaryLabel(bin, \"min\", bin.bin.minText))\n                if (bin === R.last(positionedBins) && bin.bin.maxText)\n                    labels.push(makeBoundaryLabel(bin, \"max\", bin.bin.maxText))\n            }\n        }\n\n        for (let index = 0; index < labels.length; index++) {\n            const l1 = labels[index]\n            if (l1.hidden) continue\n\n            for (let j = index + 1; j < labels.length; j++) {\n                const l2 = labels[j]\n                if (\n                    l1.bounds.right + MINIMUM_LABEL_DISTANCE >\n                        l2.bounds.centerX ||\n                    (l2.bounds.left - MINIMUM_LABEL_DISTANCE <\n                        l1.bounds.centerX &&\n                        !l2.priority)\n                )\n                    l2.hidden = true\n            }\n        }\n\n        labels = labels.filter((label) => !label.hidden)\n\n        // If labels overlap, first we try alternating raised labels\n        let raisedMode = false\n        for (let index = 1; index < labels.length; index++) {\n            const l1 = labels[index - 1],\n                l2 = labels[index]\n            if (l1.bounds.right + MINIMUM_LABEL_DISTANCE > l2.bounds.left) {\n                raisedMode = true\n                break\n            }\n        }\n\n        if (raisedMode) {\n            for (let index = 1; index < labels.length; index++) {\n                const label = labels[index]\n                if (index % 2 !== 0) {\n                    label.bounds = label.bounds.set({\n                        y: label.bounds.y - label.bounds.height - 1,\n                    })\n                    label.raised = true\n                }\n            }\n        }\n\n        return labels\n    }\n\n    @computed get height(): number {\n        return Math.abs(\n            _.min(this.numericLabels.map((label) => label.bounds.y)) ?? 0\n        )\n    }\n\n    /** Where to draw the title, relative to the legend origin. */\n    @computed get titlePosition(): { x: number; y: number } | undefined {\n        if (!this.title) return undefined\n        return {\n            x: this.xOffset,\n            y:\n                // Align the title's baseline with the bottom of the colour bins\n                this.height - this.title.height + this.titleFontSize * 0.2,\n        }\n    }\n}\n","import React from \"react\"\nimport { Time } from \"@ourworldindata/types\"\nimport { DualAxis } from \"../axis/Axis\"\nimport { LineChartState } from \"./LineChartState\"\nimport { RenderLineChartSeries } from \"./LineChartConstants\"\nimport { darkenColorForLine } from \"../color/ColorUtils\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport { GRAPHER_OPACITY_MUTED } from \"../core/GrapherConstants\"\nimport { getSeriesKey } from \"../chart/ChartUtils\"\nimport { GRAPHER_BACKGROUND } from \"../color/ColorConstants\"\nimport { roundForSvg } from \"@ourworldindata/utils\"\n\ninterface LineChartActiveTimeMarkersProps {\n    times: Time[]\n    renderSeries: RenderLineChartSeries[]\n    dualAxis: DualAxis\n    chartState: LineChartState\n    dotRadius: number\n}\n\n/** Vertical reference line and series-value circles drawn at each active time */\nexport function LineChartActiveTimeMarkers({\n    times,\n    renderSeries,\n    dualAxis,\n    chartState,\n    dotRadius,\n}: LineChartActiveTimeMarkersProps): React.ReactElement | null {\n    const { horizontalAxis, verticalAxis } = dualAxis\n\n    if (times.length === 0) return null\n\n    return (\n        <>\n            {times.map((time) => (\n                <g className=\"hoverIndicator\" key={time}>\n                    <line\n                        x1={roundForSvg(horizontalAxis.place(time))}\n                        y1={roundForSvg(verticalAxis.range[0])}\n                        x2={roundForSvg(horizontalAxis.place(time))}\n                        y2={roundForSvg(verticalAxis.range[1])}\n                        stroke=\"rgba(180,180,180,.4)\"\n                    />\n                    {renderSeries.map((series, index) => {\n                        const point = series.points.find(\n                            (point) => point.x === time\n                        )\n                        if (!point || series.hover.background) return null\n\n                        const valueColor = chartState.hasColorScale\n                            ? darkenColorForLine(\n                                  chartState.getColorScaleColor(\n                                      point.colorValue\n                                  )\n                              )\n                            : series.color\n                        const opacity =\n                            series.emphasis === Emphasis.Muted\n                                ? GRAPHER_OPACITY_MUTED\n                                : 1\n\n                        return (\n                            <circle\n                                key={getSeriesKey(series, index)}\n                                cx={roundForSvg(horizontalAxis.place(point.x))}\n                                cy={roundForSvg(verticalAxis.place(point.y))}\n                                r={roundForSvg(dotRadius)}\n                                fill={valueColor}\n                                fillOpacity={opacity}\n                                stroke={GRAPHER_BACKGROUND}\n                                strokeWidth={0.5}\n                            />\n                        )\n                    })}\n                </g>\n            ))}\n        </>\n    )\n}\n","import * as React from \"react\"\nimport * as R from \"remeda\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { roundForSvg } from \"@ourworldindata/utils\"\n\ninterface MultiColorPolylinePoint {\n    x: number\n    y: number\n    color: string\n}\n\ninterface Point {\n    x: number\n    y: number\n}\n\ninterface Segment {\n    points: Point[]\n    color: string\n}\n\nfunction getMidpoint(a: Point, b: Point): Point {\n    return {\n        x: (a.x + b.x) / 2,\n        y: (a.y + b.y) / 2,\n    }\n}\n\nfunction toPoint(point: MultiColorPolylinePoint): Point {\n    return {\n        x: point.x,\n        y: point.y,\n    }\n}\n\nexport function getSegmentsFromPoints(\n    points: MultiColorPolylinePoint[]\n): Segment[] {\n    const segments: Segment[] = []\n    points.forEach((currentPoint) => {\n        const currentSegment = R.last(segments)\n        if (currentSegment === undefined) {\n            segments.push({\n                points: [toPoint(currentPoint)],\n                color: currentPoint.color,\n            })\n        } else if (currentSegment.color === currentPoint.color) {\n            currentSegment.points.push(toPoint(currentPoint))\n        } else {\n            const midPoint = getMidpoint(\n                R.last(currentSegment.points)!,\n                currentPoint\n            )\n            currentSegment.points.push(midPoint)\n            segments.push({\n                points: [midPoint, toPoint(currentPoint)],\n                color: currentPoint.color,\n            })\n        }\n    })\n    return segments\n}\n\nfunction toSvgPoints(points: Point[]): string {\n    return points\n        .map((p) => `${roundForSvg(p.x)},${roundForSvg(p.y)}`)\n        .join(\" \")\n}\n\ntype MultiColorPolylineProps = Omit<\n    React.SVGProps<SVGPolylineElement>,\n    \"fill\" | \"stroke\" | \"points\" | \"strokeLinecap\"\n> & {\n    points: MultiColorPolylinePoint[]\n}\n\n// The current approach constructs multiple polylines and joins them together at midpoints.\n// Joining at midpoints allows clean miter joints, since we're joining two lines at an identical\n// angle.\n//\n// The benefit of this approach is that it generalises to work in most cases. Where it breaks:\n// - When a color transition happening at a midpoint is misleading.\n// - stroke-dasharray isn't handled well because the pattern restarts on every new line. This could\n//   be improved by specifying a `stroke-dashoffset` automatically.\n//   We can approximate the line length pretty well without rendering:\n//   https://observablehq.com/@danielgavrilov/does-gettotallength-of-polyline-path-equal-the-sum-of-coord\n//\n// Alternative approaches considered:\n// - Single line, color by gradient: this works if the line is monotonically increasing in one axis\n//   (X or Y), but otherwise doesn't (a spiral for example doesn't work).\n// - Compute meter joints ourselves (https://bl.ocks.org/mbostock/4163057): this results in the most\n//   accurate output, but is most complex & slow.\n//\n@observer\nexport class MultiColorPolyline extends React.Component<MultiColorPolylineProps> {\n    constructor(props: MultiColorPolylineProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get segments(): Segment[] {\n        return getSegmentsFromPoints(this.props.points)\n    }\n\n    override render(): React.ReactElement {\n        const { markerStart, markerMid, markerEnd, ...polylineProps } =\n            this.props\n        return (\n            <g id={this.props.id}>\n                {this.segments.map((group, index) => (\n                    <polyline\n                        {...polylineProps}\n                        key={index}\n                        points={toSvgPoints(group.points)}\n                        stroke={group.color}\n                        fill=\"none\"\n                        strokeLinecap=\"butt\" // `butt` allows us to have clean miter joints\n                        markerStart={index === 0 ? markerStart : undefined}\n                        markerMid={markerMid}\n                        markerEnd={\n                            index === this.segments.length - 1\n                                ? markerEnd\n                                : undefined\n                        }\n                    />\n                ))}\n            </g>\n        )\n    }\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport {\n    Bounds,\n    PointVector,\n    makeFigmaId,\n    pointsToPath,\n    roundForSvg,\n} from \"@ourworldindata/utils\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    DEFAULT_LINE_COLOR,\n    DEFAULT_LINE_OUTLINE_WIDTH,\n    DEFAULT_MARKER_RADIUS,\n    DEFAULT_STROKE_WIDTH,\n    LINE_STYLE,\n    PlacedLineChartSeries,\n    RenderLineChartSeries,\n} from \"./LineChartConstants\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport { getSeriesKey } from \"../chart/ChartUtils\"\nimport { GRAPHER_BACKGROUND } from \"../color/ColorConstants\"\nimport { MultiColorPolyline } from \"../scatterCharts/MultiColorPolyline\"\nimport { DualAxis } from \"../axis/Axis.js\"\n\nexport interface LinesProps {\n    dualAxis: DualAxis\n    series: RenderLineChartSeries[]\n    hidePoints?: boolean\n    lineStrokeWidth?: number\n    lineOutlineWidth?: number\n    markerRadius?: number\n    isStatic?: boolean\n    multiColor?: boolean\n}\n\n@observer\nexport class Lines extends React.Component<LinesProps> {\n    constructor(props: LinesProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get bounds(): Bounds {\n        const { horizontalAxis, verticalAxis } = this.props.dualAxis\n        return Bounds.fromCorners(\n            new PointVector(horizontalAxis.range[0], verticalAxis.range[0]),\n            new PointVector(horizontalAxis.range[1], verticalAxis.range[1])\n        )\n    }\n\n    @computed private get markerRadius(): number {\n        return this.props.markerRadius ?? DEFAULT_MARKER_RADIUS\n    }\n\n    @computed private get baseStrokeWidth(): number {\n        return this.props.lineStrokeWidth ?? DEFAULT_STROKE_WIDTH\n    }\n\n    @computed private get outlineWidth(): number {\n        return this.props.lineOutlineWidth ?? DEFAULT_LINE_OUTLINE_WIDTH\n    }\n\n    @computed private get outlineColor(): string {\n        return GRAPHER_BACKGROUND\n    }\n\n    /**\n     * Don't display point markers if there are very many of them for\n     * performance reasons\n     *\n     * Note that we're using circle elements instead of marker-mid because\n     * marker performance in Safari 10 is very poor for some reason\n     */\n    @computed private get hasMarkers(): boolean {\n        if (this.props.hidePoints) return false\n        const totalPoints = _.sum(\n            this.props.series\n                .filter((series) => this.seriesHasMarkers(series))\n                .map((series) => series.placedPoints.length)\n        )\n        return totalPoints < 500\n    }\n\n    @computed private get hasMarkersOnlySeries(): boolean {\n        return this.props.series.some((series) => series.plotMarkersOnly)\n    }\n\n    private seriesHasMarkers(series: RenderLineChartSeries): boolean {\n        // Don't show markers for projected data\n        if (series.isProjection) return false\n\n        // If the series has a line, but there is another one that hasn't, then\n        // don't show markers since the plotted line is likely a smoothed version\n        if (this.hasMarkersOnlySeries && !series.plotMarkersOnly) return false\n\n        return series.emphasis !== Emphasis.Muted\n    }\n\n    private renderLine(\n        series: RenderLineChartSeries\n    ): React.ReactElement | undefined {\n        if (series.plotMarkersOnly) return\n        const { isProjection } = series\n\n        const style = LINE_STYLE[series.emphasis]\n\n        const color = series.placedPoints[0]?.color ?? DEFAULT_LINE_COLOR\n\n        const strokeWidth = style.strokeWidthFactor * this.baseStrokeWidth\n        const strokeOpacity = style.opacity\n        const strokeDasharray = isProjection ? \"2,3\" : undefined\n\n        const showOutline = style.showOutline\n        const outlineColor = this.outlineColor\n        const outlineWidth = strokeWidth + this.outlineWidth * 2\n\n        const outline = (\n            <LinePath\n                id={makeFigmaId(\"outline\", series.displayName)}\n                placedPoints={series.placedPoints}\n                stroke={outlineColor}\n                strokeWidth={roundForSvg(outlineWidth)}\n            />\n        )\n\n        const line = this.props.multiColor ? (\n            <MultiColorPolyline\n                id={makeFigmaId(\"line\", series.seriesName)}\n                points={series.placedPoints}\n                strokeLinejoin=\"round\"\n                strokeWidth={roundForSvg(strokeWidth)}\n                strokeDasharray={strokeDasharray}\n                strokeOpacity={strokeOpacity}\n            />\n        ) : (\n            <LinePath\n                id={makeFigmaId(\"line\", series.seriesName)}\n                placedPoints={series.placedPoints}\n                stroke={color}\n                strokeWidth={roundForSvg(strokeWidth)}\n                strokeOpacity={strokeOpacity}\n                strokeDasharray={strokeDasharray}\n            />\n        )\n\n        return (\n            <>\n                {showOutline && outline}\n                {line}\n            </>\n        )\n    }\n\n    private renderLineMarkers(\n        series: RenderLineChartSeries\n    ): React.ReactElement | undefined {\n        const { horizontalAxis } = this.props.dualAxis\n\n        const forceMarkers =\n            // If the series only contains one point, then we will always want to\n            // show a marker/circle because we can't draw a line.\n            series.placedPoints.length === 1 ||\n            // If no line is plotted, we'll always want to show markers\n            series.plotMarkersOnly\n\n        // check if we should hide markers on the chart and series level\n        const hideMarkers = !this.hasMarkers || !this.seriesHasMarkers(series)\n\n        if (hideMarkers && !forceMarkers) return\n\n        const opacity = LINE_STYLE[series.emphasis].opacity\n\n        const outlineColor = series.plotMarkersOnly\n            ? this.outlineColor\n            : undefined\n        const outlineWidth = series.plotMarkersOnly\n            ? this.outlineWidth\n            : undefined\n\n        return (\n            <g id={makeFigmaId(\"datapoints\", series.displayName)}>\n                {series.placedPoints.map((value, index) => (\n                    <circle\n                        id={makeFigmaId(horizontalAxis.formatTick(value.time))}\n                        key={index}\n                        cx={roundForSvg(value.x)}\n                        cy={roundForSvg(value.y)}\n                        r={roundForSvg(this.markerRadius)}\n                        fill={value.color}\n                        stroke={outlineColor}\n                        strokeWidth={outlineWidth}\n                        opacity={opacity}\n                    />\n                ))}\n            </g>\n        )\n    }\n\n    private renderLines(): React.ReactElement {\n        return (\n            <>\n                {this.props.series.map((series, index) => (\n                    <React.Fragment key={getSeriesKey(series, index)}>\n                        {this.renderLine(series)}\n                        {this.renderLineMarkers(series)}\n                    </React.Fragment>\n                ))}\n            </>\n        )\n    }\n\n    private renderStatic(): React.ReactElement {\n        return <g id={makeFigmaId(\"lines\")}>{this.renderLines()}</g>\n    }\n\n    private renderInteractive(): React.ReactElement {\n        const { bounds } = this\n        return (\n            <g className=\"Lines\">\n                {/* Integer on purpose: a fractional rect shaves hairlines off\n                    the edges of the lines it clips */}\n                <rect\n                    x={Math.round(bounds.x)}\n                    y={Math.round(bounds.y)}\n                    width={Math.round(bounds.width)}\n                    height={Math.round(bounds.height)}\n                    fill=\"rgba(255,255,255,0)\"\n                    opacity={0}\n                />\n                {this.renderLines()}\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        return this.props.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n}\n\ninterface LinePathProps extends React.SVGProps<SVGPathElement> {\n    placedPoints: PlacedLineChartSeries[\"placedPoints\"]\n}\n\nfunction LinePath(props: LinePathProps): React.ReactElement {\n    const { placedPoints, ...pathProps } = props\n    return (\n        <path\n            fill=\"none\"\n            strokeLinecap=\"butt\"\n            strokeLinejoin=\"round\"\n            stroke={DEFAULT_LINE_COLOR}\n            {...pathProps}\n            d={pointsToPath(placedPoints)}\n        />\n    )\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport * as R from \"remeda\"\nimport {\n    guid,\n    getRelativeMouse,\n    exposeInstanceOnWindow,\n    excludeUndefined,\n    Bounds,\n    HorizontalAlign,\n} from \"@ourworldindata/utils\"\nimport { computed, action, observable, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\n\nimport { DualAxisComponent } from \"../axis/AxisViews\"\nimport { DualAxis, HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\nimport { VerticalLabels } from \"../verticalLabels/VerticalLabels\"\nimport { VerticalLabelsState } from \"../verticalLabels/VerticalLabelsState\"\nimport { TooltipState } from \"../tooltip/Tooltip\"\nimport { LineChartTooltip } from \"./LineChartTooltip\"\nimport { NoDataMessage } from \"../noDataMessage/NoDataMessage\"\nimport { SeriesName, VerticalAlign, Time } from \"@ourworldindata/types\"\nimport {\n    NARROW_CHART_WIDTH,\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n} from \"../core/GrapherConstants\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport {\n    LineChartSeries,\n    LineChartManager,\n    LinePoint,\n    PlacedLineChartSeries,\n    RenderLineChartSeries,\n    CATEGORICAL_LEGEND_STYLE,\n    NUMERIC_LEGEND_STYLE,\n    LEGEND_PADDING,\n    VARIABLE_COLOR_STROKE_WIDTH,\n    DEFAULT_STROKE_WIDTH,\n    VARIABLE_COLOR_LINE_OUTLINE_WIDTH,\n    DEFAULT_LINE_OUTLINE_WIDTH,\n    DISCONNECTED_DOTS_MARKER_RADIUS,\n    VARIABLE_COLOR_MARKER_RADIUS,\n    STATIC_SMALL_MARKER_RADIUS,\n    DEFAULT_MARKER_RADIUS,\n    LINE_CHART_CLASS_NAME,\n    ELEVATED_MARKER_RADIUS,\n} from \"./LineChartConstants\"\nimport {\n    getHoverStateForSeries,\n    isTargetOutsideElement,\n} from \"../chart/ChartUtils\"\nimport { CategoricalBin, ColorScaleBin } from \"../color/ColorScaleBin\"\nimport { ColorScale } from \"../color/ColorScale\"\nimport { HorizontalNumericColorLegend } from \"../legend/HorizontalNumericColorLegend\"\nimport { HorizontalNumericColorLegendState } from \"../legend/HorizontalNumericColorLegendState\"\nimport { ExternalColorLegendData } from \"../legend/HorizontalColorLegendTypes\"\nimport {\n    findClosestTimeAtMouse,\n    getAnnotationsForSeries,\n    getYAxisConfigDefaults,\n    toPlacedLineChartSeries,\n    toRenderLineChartSeries,\n} from \"./LineChartHelpers\"\nimport { LineChartActiveTimeMarkers } from \"./LineChartActiveTimeMarkers\"\nimport { LabelSeries } from \"../verticalLabels/VerticalLabelsTypes\"\nimport { Lines } from \"./Lines\"\nimport { LineChartState } from \"./LineChartState.js\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig\"\nimport { ChartComponentProps } from \"../chart/ChartTypeMap.js\"\nimport { InteractionState } from \"../interaction/InteractionState\"\nimport { resolveEmphasis } from \"../interaction/Emphasis\"\nimport { LegendStyleConfig } from \"../legend/LegendStyleConfig\"\n\nexport type LineChartProps = ChartComponentProps<LineChartState>\n\n@observer\nexport class LineChart\n    extends React.Component<LineChartProps>\n    implements ChartInterface, AxisManager\n{\n    private readonly base = React.createRef<SVGGElement>()\n\n    private readonly tooltipId = guid()\n    private readonly tooltipState = new TooltipState<{ time: Time }>({\n        fade: \"immediate\",\n    })\n\n    private hoveredLabelSeriesName: SeriesName | undefined = undefined\n    private hoverTimer: number | undefined = undefined\n\n    constructor(props: LineChartProps) {\n        super(props)\n\n        makeObservable<LineChart, \"tooltipState\" | \"hoveredLabelSeriesName\">(\n            this,\n            { tooltipState: observable, hoveredLabelSeriesName: observable }\n        )\n    }\n\n    @computed get chartState(): LineChartState {\n        return this.props.chartState\n    }\n\n    @computed get isStatic(): boolean {\n        return this.manager.isStatic ?? false\n    }\n\n    @computed get detailsOrderedByReference(): string[] {\n        return this.manager.detailsOrderedByReference ?? []\n    }\n\n    @action.bound private dismissTooltip(): void {\n        this.tooltipState.target = null\n    }\n\n    @action.bound private onCursorLeave(): void {\n        if (!this.manager.shouldPinTooltipToBottom) {\n            this.dismissTooltip()\n        }\n        this.debouncedClearVerticalLabelHover()\n    }\n\n    @computed private get allValues(): LinePoint[] {\n        return this.placedSeries.flatMap((series) => series.points)\n    }\n\n    @action.bound private onCursorMove(\n        ev: React.MouseEvent | React.TouchEvent\n    ): void {\n        const ref = this.base.current,\n            parentRef = this.manager.base?.current\n\n        // The tooltip's origin needs to be in the parent's coordinates\n        if (parentRef) {\n            this.tooltipState.position = getRelativeMouse(parentRef, ev)\n        }\n\n        if (!ref) return\n\n        const mouse = getRelativeMouse(ref, ev)\n\n        const hoverTime = findClosestTimeAtMouse({\n            mouse,\n            innerBounds: this.dualAxis.innerBounds,\n            horizontalAxis: this.dualAxis.horizontalAxis,\n            allValues: this.allValues,\n        })\n\n        // Be sure all lines are un-dimmed if the cursor is above the graph itself\n        if (this.dualAxis.innerBounds.contains(mouse)) {\n            this.clearVerticalLabelHover()\n        }\n\n        this.tooltipState.target =\n            hoverTime === undefined ? null : { time: hoverTime }\n    }\n\n    @computed private get manager(): LineChartManager {\n        return this.chartState.manager\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get boundsWithoutColorLegend(): Bounds {\n        return this.bounds.padTop(\n            this.hasColorLegend ? this.legendHeight + LEGEND_PADDING : 0\n        )\n    }\n\n    @computed private get maxVerticalLabelsWidth(): number {\n        return this.bounds.width / 3\n    }\n\n    @computed private get lineStrokeWidth(): number {\n        if (this.manager.lineStrokeWidth) return this.manager.lineStrokeWidth\n        const factor = this.manager.isStaticAndSmall ? 2 : 1\n        return this.hasColorScale\n            ? factor * VARIABLE_COLOR_STROKE_WIDTH\n            : factor * DEFAULT_STROKE_WIDTH\n    }\n\n    @computed private get lineOutlineWidth(): number {\n        return this.hasColorScale\n            ? VARIABLE_COLOR_LINE_OUTLINE_WIDTH\n            : DEFAULT_LINE_OUTLINE_WIDTH\n    }\n\n    @computed private get markerRadius(): number {\n        if (this.hasMarkersOnlySeries) return DISCONNECTED_DOTS_MARKER_RADIUS\n        if (this.hasColorScale) return VARIABLE_COLOR_MARKER_RADIUS\n        if (this.manager.isStaticAndSmall) return STATIC_SMALL_MARKER_RADIUS\n        if (this.renderSeries.length === 1) return ELEVATED_MARKER_RADIUS\n        return DEFAULT_MARKER_RADIUS\n    }\n\n    @computed get activeTimes(): Time[] {\n        const tooltipTime = this.tooltipState.target?.time\n        const highlightedTimes = this.manager.highlightedTimesInLineChart ?? []\n        return _.uniq(\n            tooltipTime !== undefined\n                ? [tooltipTime, ...highlightedTimes]\n                : highlightedTimes\n        )\n    }\n\n    @computed private get activeTimeCircleRadius(): number {\n        return this.lineStrokeWidth / 2 + 3.5\n    }\n\n    @computed private get isTooltipActive(): boolean {\n        return this.manager.tooltip?.get()?.id === this.tooltipId\n    }\n\n    @action.bound private onVerticalLabelMouseEnter(\n        seriesName: SeriesName\n    ): void {\n        this.chartState.focusArray.clear()\n        clearTimeout(this.hoverTimer)\n        this.hoveredLabelSeriesName = seriesName\n    }\n\n    @action.bound private clearVerticalLabelHover(): void {\n        this.hoveredLabelSeriesName = undefined\n    }\n\n    @action.bound private debouncedClearVerticalLabelHover(): void {\n        clearTimeout(this.hoverTimer)\n\n        // Wait before clearing selection in case the mouse is moving\n        // quickly over neighboring labels\n        this.hoverTimer = window.setTimeout(() => {\n            this.clearVerticalLabelHover()\n        }, 200)\n    }\n\n    @action.bound private onVerticalLabelMouseLeave(): void {\n        this.debouncedClearVerticalLabelHover()\n    }\n\n    @computed private get hoveredSeriesNames(): string[] {\n        const { externalLegendHoverBin } = this.manager\n        const hoveredSeriesNames = excludeUndefined([\n            this.hoveredLabelSeriesName,\n        ])\n        if (externalLegendHoverBin) {\n            hoveredSeriesNames.push(\n                ...this.series\n                    .map((s) => s.seriesName)\n                    .filter((name) => externalLegendHoverBin.contains(name))\n            )\n        }\n        return hoveredSeriesNames\n    }\n\n    @computed private get isHoverModeActive(): boolean {\n        return (\n            this.hoveredSeriesNames.length > 0 ||\n            // if the external legend is hovered, we want to mute\n            // all non-hovered series even if the chart doesn't plot\n            // the currently hovered series\n            (!!this.manager.externalLegendHoverBin && !this.hasColorScale)\n        )\n    }\n\n    @computed private get hasTimeHighlights(): boolean {\n        const { highlightedTimesInLineChart = [] } = this.manager\n        return highlightedTimesInLineChart.length > 0\n    }\n\n    @action.bound private onDocumentClick(e: MouseEvent): void {\n        // Only dismiss the tooltip if the click is outside of the chart area\n        // and outside of the chart areas of neighboring facets\n        const chartContainer = this.manager.base?.current\n        if (!chartContainer) return\n        const chartAreas = chartContainer.getElementsByClassName(\n            LINE_CHART_CLASS_NAME\n        )\n        const isTargetOutsideChartAreas = Array.from(chartAreas).every(\n            (chartArea) => isTargetOutsideElement(e.target!, chartArea)\n        )\n        if (isTargetOutsideChartAreas) {\n            this.dismissTooltip()\n        }\n    }\n\n    override componentDidMount(): void {\n        exposeInstanceOnWindow(this)\n        document.addEventListener(\"click\", this.onDocumentClick, {\n            capture: true,\n        })\n    }\n\n    override componentWillUnmount(): void {\n        document.removeEventListener(\"click\", this.onDocumentClick, {\n            capture: true,\n        })\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get fontWeight(): number {\n        return this.hasColorScale ? 700 : 400\n    }\n\n    @computed private get hidePoints(): boolean {\n        return !!this.manager.hidePoints\n    }\n\n    @computed private get verticalLabelsX(): number {\n        return this.bounds.right - this.verticalLabelsWidth\n    }\n\n    @computed private get verticalLabelsYRange(): [number, number] {\n        return [\n            this.boundsWithoutColorLegend.top,\n            this.boundsWithoutColorLegend.bottom,\n        ]\n    }\n\n    @computed private get verticalLabelsState(): VerticalLabelsState {\n        return this.makeVerticalLabelsState(() => this.yAxis)\n    }\n\n    /** Label placement that decides the labels' width in compact layouts */\n    @computed\n    private get verticalLabelsStateOnStableAxis(): VerticalLabelsState {\n        return this.makeVerticalLabelsState(\n            () => this.yAxisWithStableLabelsWidth\n        )\n    }\n\n    private makeVerticalLabelsState(\n        yAxis: () => VerticalAxis\n    ): VerticalLabelsState {\n        return new VerticalLabelsState(this.verticalLabelsSeries, {\n            yAxis,\n            yRange: () => this.verticalLabelsYRange,\n            maxWidth: this.maxVerticalLabelsWidth,\n            baseFontSize: this.fontSize,\n            fontWeight: this.fontWeight,\n            verticalAlign: VerticalAlign.top,\n            showRegionTooltip: !this.isStatic,\n        })\n    }\n\n    @computed private get useCompactLayout(): boolean {\n        return (\n            !!this.manager.isSemiNarrow ||\n            this.bounds.width < NARROW_CHART_WIDTH\n        )\n    }\n\n    @computed private get verticalLabelsWidth(): number {\n        if (!this.manager.showSeriesLabels) return 0\n        return this.useCompactLayout\n            ? this.verticalLabelsStateOnStableAxis.width\n            : this.verticalLabelsState.stableWidth\n    }\n\n    @computed private get yAxisWithStableLabelsWidth(): VerticalAxis {\n        if (!this.useCompactLayout) return this.yAxis\n        const bounds = this.makeInnerBounds({\n            paddingRight: this.verticalLabelsState.stableWidth,\n        })\n        return this.makeDualAxis(bounds).verticalAxis\n    }\n\n    private renderDualAxis(): React.ReactElement {\n        const { manager, dualAxis } = this\n\n        return (\n            <DualAxisComponent\n                dualAxis={dualAxis}\n                showTickMarks={true}\n                detailsMarker={manager.detailsMarkerInSvg}\n            />\n        )\n    }\n\n    private renderColorLegend(): React.ReactElement | null {\n        if (!this.hasColorLegend || !this.numericLegendState) return null\n        return (\n            <HorizontalNumericColorLegend\n                state={this.numericLegendState}\n                x={this.bounds.x}\n                y={this.bounds.top}\n                interactive={!this.isStatic}\n                styleConfig={this.numericLegendStyleConfig}\n            />\n        )\n    }\n\n    /**\n     * Render the lines themselves and their labels\n     */\n    private renderChartElements(): React.ReactElement {\n        const { manager } = this\n        return (\n            <>\n                {manager.showSeriesLabels && (\n                    <VerticalLabels\n                        state={this.verticalLabelsState}\n                        x={this.verticalLabelsX}\n                        onMouseEnter={this.onVerticalLabelMouseEnter}\n                        onMouseLeave={this.onVerticalLabelMouseLeave}\n                        interactive={!this.isStatic}\n                    />\n                )}\n                <Lines\n                    dualAxis={this.dualAxis}\n                    series={this.renderSeries}\n                    multiColor={this.hasColorScale}\n                    hidePoints={this.hidePoints}\n                    lineStrokeWidth={this.lineStrokeWidth}\n                    lineOutlineWidth={this.lineOutlineWidth}\n                    markerRadius={this.markerRadius}\n                    isStatic={manager.isStatic}\n                />\n            </>\n        )\n    }\n\n    private renderStatic(): React.ReactElement {\n        return (\n            <>\n                {this.renderColorLegend()}\n                {this.renderDualAxis()}\n                {this.renderChartElements()}\n            </>\n        )\n    }\n\n    private renderInteractive(): React.ReactElement {\n        return (\n            <g\n                ref={this.base}\n                className={LINE_CHART_CLASS_NAME}\n                onMouseLeave={this.onCursorLeave}\n                onTouchEnd={this.onCursorLeave}\n                onTouchCancel={this.onCursorLeave}\n                onMouseMove={this.onCursorMove}\n                onTouchStart={this.onCursorMove}\n                onTouchMove={this.onCursorMove}\n            >\n                <rect {...this.bounds.toProps()} fillOpacity=\"0\">\n                    {/* This <rect> ensures that the parent <g> is big enough such that\n                        we get mouse hover events for the whole charting area, including\n                        the axis, the entity labels, and the whitespace next to them.\n                        We need these to be able to show the tooltip for the first/last\n                        year even if the mouse is outside the charting area. */}\n                </rect>\n                {this.renderColorLegend()}\n                {this.renderDualAxis()}\n                {this.renderChartElements()}\n\n                {(this.isTooltipActive || this.hasTimeHighlights) && (\n                    <LineChartActiveTimeMarkers\n                        times={this.activeTimes}\n                        renderSeries={this.renderSeries}\n                        dualAxis={this.dualAxis}\n                        chartState={this.chartState}\n                        dotRadius={this.activeTimeCircleRadius}\n                    />\n                )}\n                <LineChartTooltip\n                    id={this.tooltipId}\n                    chartState={this.chartState}\n                    tooltipState={this.tooltipState}\n                    series={this.renderSeries}\n                    xAxisLabel={this.xAxis.label}\n                    dismissTooltip={this.dismissTooltip}\n                />\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        const { manager } = this\n\n        if (this.chartState.errorInfo.reason)\n            return (\n                <g>\n                    {this.renderDualAxis()}\n                    <NoDataMessage\n                        manager={manager}\n                        bounds={this.bounds}\n                        message={this.chartState.errorInfo.reason}\n                    />\n                </g>\n            )\n\n        return manager.isStatic ? this.renderStatic() : this.renderInteractive()\n    }\n\n    @computed protected get yColumnSlugs(): string[] {\n        return this.chartState.yColumnSlugs\n    }\n\n    @computed private get hasColorScale(): boolean {\n        return this.chartState.hasColorScale\n    }\n\n    @computed private get hasColorLegend(): boolean {\n        return this.hasColorScale && !!this.manager.showLegend\n    }\n\n    @computed private get colorScale(): ColorScale {\n        return this.chartState.colorScale\n    }\n\n    // TODO just pass colorScale to legend and let it figure it out?\n    @computed private get numericLegendData(): ColorScaleBin[] {\n        // Move CategoricalBins to end\n        return _.sortBy(\n            this.colorScale.legendBins,\n            (bin) => bin instanceof CategoricalBin\n        )\n    }\n\n    private readonly numericBinHeight = 6\n    private readonly legendTickSize = 1\n\n    // Used when faceted\n    categoricalLegendStyleConfig: LegendStyleConfig = CATEGORICAL_LEGEND_STYLE\n\n    // Used when the lines are colored by a numeric scale\n    numericLegendStyleConfig = NUMERIC_LEGEND_STYLE\n\n    @computed private get numericLegendState():\n        | HorizontalNumericColorLegendState\n        | undefined {\n        return this.hasColorScale && this.manager.showLegend\n            ? new HorizontalNumericColorLegendState(this.numericLegendData, {\n                  baseFontSize: this.fontSize,\n                  maxWidth: this.bounds.width,\n                  align: HorizontalAlign.center,\n                  title: this.legendTitle,\n                  tickSize: this.legendTickSize,\n                  binHeight: this.numericBinHeight,\n              })\n            : undefined\n    }\n\n    @computed private get legendTitle(): string | undefined {\n        return this.hasColorScale\n            ? this.colorScale.legendDescription\n            : undefined\n    }\n\n    @computed private get legendHeight(): number {\n        return this.numericLegendState?.height ?? 0\n    }\n\n    // End of color legend props\n\n    @computed get series(): readonly LineChartSeries[] {\n        return this.chartState.series\n    }\n\n    @computed private get hasMarkersOnlySeries(): boolean {\n        return this.series.some((series) => series.plotMarkersOnly)\n    }\n\n    @computed get placedSeries(): PlacedLineChartSeries[] {\n        return toPlacedLineChartSeries(this.series, {\n            chartState: this.chartState,\n            dualAxis: this.dualAxis,\n        })\n    }\n\n    private hoverStateForSeries(series: LineChartSeries): InteractionState {\n        return getHoverStateForSeries(series, {\n            isHoverModeActive: this.isHoverModeActive,\n            hoveredSeriesNames: this.hoveredSeriesNames,\n        })\n    }\n\n    @computed private get renderSeries(): RenderLineChartSeries[] {\n        return toRenderLineChartSeries(this.placedSeries, {\n            isFocusModeActive: this.chartState.isFocusModeActive,\n            isHoverModeActive: this.isHoverModeActive,\n            hoveredSeriesNames: this.hoveredSeriesNames,\n        })\n    }\n\n    // Order of the legend items on a line chart should visually correspond\n    // to the order of the lines as the approach the legend\n    @computed private get verticalLabelsSeries(): LabelSeries[] {\n        // If there are any projections, ignore non-projection legends (bit of a hack)\n        let series = this.series\n        if (series.some((series) => !!series.isProjection))\n            series = series.filter((series) => series.isProjection)\n\n        // Deduplicate series by seriesName to avoid showing the same label multiple times\n        const deduplicatedSeries: LineChartSeries[] = []\n        const seriesGroupedByName = Map.groupBy(series, (s) => s.seriesName)\n        for (const duplicates of seriesGroupedByName.values()) {\n            // keep only the label for the series with the most recent data\n            // (series are sorted by time, so we can just take the last one)\n            deduplicatedSeries.push(R.last(duplicates)!)\n        }\n\n        return deduplicatedSeries.map((series) => {\n            const { seriesName, displayName, color, focus } = series\n            const lastValue = R.last(series.points)!.y\n            const hover = this.hoverStateForSeries(series)\n            return {\n                color,\n                seriesName,\n                label: !this.manager.showSeriesLabels ? \"\" : displayName,\n                annotation: getAnnotationsForSeries(\n                    this.chartState.annotationsMap,\n                    seriesName\n                ),\n                yValue: lastValue,\n                emphasis: resolveEmphasis({ focus, hover }),\n            } satisfies LabelSeries\n        })\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        const { yAxisConfig } = this.manager\n        const defaults = getYAxisConfigDefaults(yAxisConfig)\n        return new AxisConfig({ ...defaults, ...yAxisConfig }, this)\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        const { xAxisConfig, hasScatter } = this.manager\n        const customConfig = { hideGridlines: true }\n\n        // If a secondary scatter tab is present, then the xAxisConfig\n        // applies to the scatter's x-axis, not the line chart's time axis\n        const userConfig = hasScatter ? undefined : xAxisConfig\n\n        return new AxisConfig({ ...customConfig, ...userConfig }, this)\n    }\n\n    @computed private get horizontalAxisPart(): HorizontalAxis {\n        return this.chartState.toHorizontalAxis(this.xAxisConfig)\n    }\n\n    @computed private get verticalAxisPart(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig)\n    }\n\n    @computed private get innerBounds(): Bounds {\n        return this.makeInnerBounds({ paddingRight: this.verticalLabelsWidth })\n    }\n\n    private makeInnerBounds({\n        paddingRight,\n    }: {\n        paddingRight: number\n    }): Bounds {\n        return (\n            this.boundsWithoutColorLegend\n                .padRight(this.manager.showSeriesLabels ? paddingRight : 1)\n                // The top padding leaves room for tick labels.\n                // No padding is needed when plotted on a log axis because the\n                // log scale notice leaves enough space for tick labels.\n                .padTop(this.chartState.isLogScale ? 0 : 6)\n                // The bottom padding avoids axis labels to be cut off at some resolutions\n                .padBottom(2)\n        )\n    }\n\n    @computed get dualAxis(): DualAxis {\n        return this.makeDualAxis(this.innerBounds)\n    }\n\n    private makeDualAxis(bounds: Bounds): DualAxis {\n        return new DualAxis({\n            bounds,\n            verticalAxis: this.verticalAxisPart,\n            horizontalAxis: this.horizontalAxisPart,\n            comparisonLines: this.manager.comparisonLines,\n        })\n    }\n\n    @computed get yAxis(): VerticalAxis {\n        return this.dualAxis.verticalAxis\n    }\n\n    @computed get xAxis(): HorizontalAxis {\n        return this.dualAxis.horizontalAxis\n    }\n\n    @computed get externalLegend(): ExternalColorLegendData | undefined {\n        if (!this.manager.showSeriesLabels) {\n            const numericLegendData = this.hasColorScale\n                ? this.numericLegendData\n                : []\n            const categoricalLegendData = this.hasColorScale\n                ? []\n                : this.series.map(\n                      (series, index) =>\n                          new CategoricalBin({\n                              index,\n                              value: series.seriesName,\n                              label: series.displayName,\n                              color: series.color,\n                          })\n                  )\n            return {\n                numericLegendData,\n                categoricalLegendData,\n                legendTitle: this.legendTitle,\n                legendTickSize: this.legendTickSize,\n                numericBinHeight: this.numericBinHeight,\n                categoricalLegendStyleConfig: this.categoricalLegendStyleConfig,\n                numericLegendStyleConfig: this.numericLegendStyleConfig,\n            }\n        }\n        return undefined\n    }\n}\n","import * as React from \"react\"\nimport { Bounds, HorizontalAlign } from \"@ourworldindata/utils\"\nimport { scaleFontSize } from \"../chart/ChartUtils\"\nimport { GRAPHER_LIGHT_TEXT } from \"../color/ColorConstants\"\n\nexport function NoDataSection({\n    seriesNames,\n    bounds,\n    align = HorizontalAlign.left,\n    baseFontSize = 16,\n}: {\n    seriesNames: string[]\n    bounds: Bounds\n    align?: HorizontalAlign\n    baseFontSize?: number\n}): React.ReactElement {\n    {\n        const displayedNames = seriesNames.slice(0, 5)\n        const remaining = Math.max(\n            0,\n            seriesNames.length - displayedNames.length\n        )\n\n        const headingFontsize = scaleFontSize(11, baseFontSize)\n        const bodyFontsize = scaleFontSize(12, baseFontSize)\n\n        return (\n            <foreignObject\n                className=\"NoDataSection\"\n                {...bounds.toProps()}\n                style={{\n                    textAlign:\n                        align === HorizontalAlign.right ? \"right\" : \"left\",\n                    color: GRAPHER_LIGHT_TEXT,\n                }}\n            >\n                <div className=\"heading\" style={{ fontSize: headingFontsize }}>\n                    No data\n                </div>\n                <div className=\"body\" style={{ fontSize: bodyFontsize }}>\n                    <ul>\n                        {displayedNames.map((entityName) => (\n                            <li key={entityName}>{entityName}</li>\n                        ))}\n                    </ul>\n                    {remaining > 0 && (\n                        <div>& {remaining === 1 ? \"one\" : remaining} more</div>\n                    )}\n                </div>\n            </foreignObject>\n        )\n    }\n}\n","import * as _ from \"lodash-es\"\nimport {\n    AxisConfigInterface,\n    PointVector,\n    ScaleType,\n    SeriesName,\n} from \"@ourworldindata/utils\"\nimport { Time } from \"@ourworldindata/types\"\nimport { VerticalAxis } from \"../axis/Axis\"\nimport {\n    PlacedSlopeChartSeries,\n    RenderSlopeChartSeries,\n    SlopeChartSeries,\n} from \"./SlopeChartConstants\"\nimport {\n    byHoverThenFocusState,\n    getHoverStateForSeries,\n} from \"../chart/ChartUtils\"\nimport { resolveEmphasis } from \"../interaction/Emphasis\"\n\nexport function getYAxisConfigDefaults(\n    config?: AxisConfigInterface\n): AxisConfigInterface {\n    return {\n        nice: config?.scaleType !== ScaleType.log,\n        // Default to 0 if not set\n        min: 0,\n    }\n}\n\nexport function getXAxisConfigSettings(\n    config: AxisConfigInterface | undefined,\n    { startTime, endTime }: { startTime: Time; endTime: Time }\n): AxisConfigInterface {\n    return {\n        ticks: [\n            { value: startTime, priority: 1, solid: true },\n            { value: endTime, priority: 1, solid: true },\n        ],\n        // hideAxis is reinterpreted as hideTickLabels for slope chart x-axes\n        // since the vertical lines should always be visible\n        hideTickLabels: config?.hideTickLabels || config?.hideAxis,\n        hideAxis: false,\n    }\n}\n\nexport function toPlacedSlopeChartSeries(\n    series: SlopeChartSeries[],\n    {\n        yAxis,\n        startX,\n        endX,\n    }: { yAxis: VerticalAxis; startX: number; endX: number }\n): PlacedSlopeChartSeries[] {\n    return series.map((series) => {\n        const startY = yAxis.place(series.start.value)\n        const endY = yAxis.place(series.end.value)\n\n        const startPoint = new PointVector(startX, startY)\n        const endPoint = new PointVector(endX, endY)\n\n        return { ...series, startPoint, endPoint }\n    })\n}\n\nexport function toRenderSlopeChartSeries(\n    placedSeries: PlacedSlopeChartSeries[],\n    {\n        isFocusModeActive = false,\n        isHoverModeActive = false,\n        hoveredSeriesNames = [],\n    }: {\n        isFocusModeActive?: boolean\n        isHoverModeActive?: boolean\n        hoveredSeriesNames?: SeriesName[]\n    }\n): RenderSlopeChartSeries[] {\n    const series: RenderSlopeChartSeries[] = placedSeries.map((series) => {\n        const hover = getHoverStateForSeries(series, {\n            isHoverModeActive,\n            hoveredSeriesNames,\n        })\n        const emphasis = resolveEmphasis({ hover, focus: series.focus })\n        return { ...series, hover, emphasis }\n    })\n\n    // Sort by interaction state so that foreground series\n    // are drawn on top of background series\n    if (isHoverModeActive || isFocusModeActive) {\n        return _.sortBy(series, byHoverThenFocusState)\n    }\n\n    return series\n}\n","import { PointVector, makeFigmaId, roundForSvg } from \"@ourworldindata/utils\"\nimport { RenderSlopeChartSeries } from \"./SlopeChartConstants\"\nimport { LINE_STYLE } from \"../lineCharts/LineChartConstants.js\"\nimport { GRAPHER_BACKGROUND } from \"../color/ColorConstants\"\n\ninterface SlopeProps {\n    series: RenderSlopeChartSeries\n    dotRadius: number\n    strokeWidth?: number\n    outlineWidth?: number\n    outlineStroke?: string\n}\n\nexport function Slope({\n    series,\n    dotRadius = 3.5,\n    strokeWidth = 2,\n    outlineWidth = 0.5,\n    outlineStroke = GRAPHER_BACKGROUND,\n}: SlopeProps) {\n    const { displayName, startPoint, endPoint } = series\n\n    const style = LINE_STYLE[series.emphasis]\n    const lineWidth = style.strokeWidthFactor * strokeWidth\n\n    return (\n        <>\n            {style.showOutline && (\n                <LineWithDots\n                    id={makeFigmaId(\"outline\", displayName)}\n                    startPoint={startPoint}\n                    endPoint={endPoint}\n                    radius={dotRadius + 2 * outlineWidth}\n                    color={outlineStroke}\n                    lineWidth={lineWidth + 2 * outlineWidth}\n                />\n            )}\n            <LineWithDots\n                id={makeFigmaId(\"slope\", displayName)}\n                startPoint={startPoint}\n                endPoint={endPoint}\n                radius={dotRadius}\n                color={series.color}\n                lineWidth={lineWidth}\n                opacity={style.opacity}\n            />\n        </>\n    )\n}\n\nfunction LineWithDots({\n    id,\n    startPoint,\n    endPoint,\n    radius,\n    color,\n    lineWidth = 2,\n    opacity = 1,\n}: {\n    id?: string\n    startPoint: PointVector\n    endPoint: PointVector\n    radius: number\n    color: string\n    lineWidth?: number\n    opacity?: number\n}): React.ReactElement {\n    return (\n        <g id={id} opacity={opacity} className=\"slope\">\n            <circle\n                id={makeFigmaId(\"start-point\")}\n                cx={roundForSvg(startPoint.x)}\n                cy={roundForSvg(startPoint.y)}\n                r={roundForSvg(radius)}\n                fill={color}\n            />\n            <circle\n                id={makeFigmaId(\"end-point\")}\n                cx={roundForSvg(endPoint.x)}\n                cy={roundForSvg(endPoint.y)}\n                r={roundForSvg(radius)}\n                fill={color}\n            />\n            <line\n                id={makeFigmaId(\"line\")}\n                x1={roundForSvg(startPoint.x)}\n                y1={roundForSvg(startPoint.y)}\n                x2={roundForSvg(endPoint.x)}\n                y2={roundForSvg(endPoint.y)}\n                stroke={color}\n                strokeWidth={roundForSvg(lineWidth)}\n            />\n        </g>\n    )\n}\n","import React from \"react\"\nimport { Bounds, makeFigmaId, roundForSvg } from \"@ourworldindata/utils\"\nimport { HorizontalAxis } from \"../axis/Axis\"\nimport { HorizontalAxisGridLines } from \"../axis/AxisViews\"\nimport { GRAPHER_DARK_TEXT } from \"../color/ColorConstants\"\n\nexport function SlopeChartXAxis({\n    axis,\n    bounds,\n    padding,\n}: {\n    axis: HorizontalAxis\n    bounds: Bounds\n    padding: number\n}): React.ReactElement {\n    const hideTickLabels = axis.config.hideTickLabels\n    return (\n        <g id={makeFigmaId(\"horizontal-axis\")}>\n            <HorizontalAxisGridLines axis={axis} bounds={bounds} />\n            {!hideTickLabels && (\n                <g id={makeFigmaId(\"tick-labels\")}>\n                    {axis.tickLabels.map((label) => (\n                        <text\n                            key={label.value}\n                            x={roundForSvg(axis.place(label.value))}\n                            y={roundForSvg(\n                                bounds.bottom + padding + axis.tickFontSize\n                            )}\n                            textAnchor=\"middle\"\n                            fontSize={axis.tickFontSize}\n                            fill={GRAPHER_DARK_TEXT}\n                        >\n                            {label.formattedValue}\n                        </text>\n                    ))}\n                </g>\n            )}\n        </g>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport React from \"react\"\nimport {\n    Bounds,\n    PointVector,\n    calculateTrendDirection,\n    domainExtent,\n    dyFromAlign,\n    excludeUndefined,\n    exposeInstanceOnWindow,\n    getRelativeMouse,\n    guid,\n    makeFigmaId,\n    roundForSvg,\n} from \"@ourworldindata/utils\"\nimport { observable, computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { NoDataMessage } from \"../noDataMessage/NoDataMessage\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    NARROW_CHART_WIDTH,\n} from \"../core/GrapherConstants\"\nimport {\n    SeriesName,\n    MissingDataStrategy,\n    Time,\n    SeriesStrategy,\n    SideWidths,\n    VerticalAlign,\n    HorizontalAlign,\n} from \"@ourworldindata/types\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\n\nimport {\n    PlacedSlopeChartSeries,\n    RawSlopeChartSeries,\n    RenderSlopeChartSeries,\n    SlopeChartSeries,\n    SlopeChartManager,\n} from \"./SlopeChartConstants\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\nimport { getHoverStateForSeries, scaleFontSize } from \"../chart/ChartUtils\"\nimport { HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\nimport { VerticalAxisZeroLine } from \"../axis/AxisViews\"\nimport { NoDataSection } from \"../scatterCharts/NoDataSection\"\n\nimport { VerticalLabels } from \"../verticalLabels/VerticalLabels\"\nimport {\n    VerticalLabelsState,\n    VerticalLabelsStateOptions,\n} from \"../verticalLabels/VerticalLabelsState\"\nimport {\n    formatTooltipRangeValues,\n    makeTooltipRoundingNotice,\n    makeTooltipToleranceNotice,\n    Tooltip,\n    TooltipState,\n    TooltipValueRange,\n} from \"../tooltip/Tooltip\"\nimport { TooltipFooterIcon } from \"../tooltip/TooltipProps\"\n\nimport { Halo } from \"@ourworldindata/components\"\nimport { ExternalColorLegendData } from \"../legend/HorizontalColorLegendTypes\"\nimport { CategoricalBin } from \"../color/ColorScaleBin\"\nimport { GRAPHER_DARK_TEXT } from \"../color/ColorConstants\"\nimport { LabelSeries } from \"../verticalLabels/VerticalLabelsTypes\"\nimport { resolveEmphasis } from \"../interaction/Emphasis\"\nimport { SlopeChartState } from \"./SlopeChartState\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig\"\nimport { ChartComponentProps } from \"../chart/ChartTypeMap.js\"\nimport { InteractionState } from \"../interaction/InteractionState\"\nimport {\n    getXAxisConfigSettings,\n    getYAxisConfigDefaults,\n    toPlacedSlopeChartSeries,\n    toRenderSlopeChartSeries,\n} from \"./SlopeChartHelpers\"\nimport { Slope } from \"./Slope\"\nimport { SlopeChartXAxis } from \"./SlopeChartXAxis\"\nimport { CATEGORICAL_LEGEND_STYLE } from \"../lineCharts/LineChartConstants\"\n\ntype SVGMouseOrTouchEvent =\n    | React.MouseEvent<SVGGElement>\n    | React.TouchEvent<SVGGElement>\n\nconst DOT_RADIUS = 3.5\n\nconst TIME_LABEL_PADDING = 4\nconst VERTICAL_LABELS_PADDING = 4\nconst SIDEBAR_MARGIN = 10\nconst ZERO_LABEL_PADDING = 4\n\nexport type SlopeChartProps = ChartComponentProps<SlopeChartState>\n\n@observer\nexport class SlopeChart\n    extends React.Component<SlopeChartProps>\n    implements ChartInterface, AxisManager\n{\n    private readonly slopeAreaRef = React.createRef<SVGGElement>()\n\n    private readonly tooltipId = guid()\n    private readonly tooltipState = new TooltipState<{\n        series: SlopeChartSeries\n    }>({ fade: \"immediate\" })\n\n    private hoveredSeriesName: string | undefined = undefined\n\n    constructor(props: SlopeChartProps) {\n        super(props)\n\n        makeObservable<SlopeChart, \"hoveredSeriesName\" | \"tooltipState\">(this, {\n            hoveredSeriesName: observable,\n            tooltipState: observable,\n        })\n    }\n\n    @computed get chartState(): SlopeChartState {\n        return this.props.chartState\n    }\n\n    @computed private get manager(): SlopeChartManager {\n        return this.chartState.manager\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get boundsWithVerticalPadding(): Bounds {\n        return this.bounds\n            .padTop(DOT_RADIUS) // Leave room for overflowing dots\n            .padBottom(this.xAxisHeight + 3)\n    }\n\n    @computed private get innerBounds(): Bounds {\n        return this.boundsWithVerticalPadding.padRight(\n            this.sidebarWidth + SIDEBAR_MARGIN\n        )\n    }\n\n    /**\n     * Bounds whose horizontal extent is exactly [startX, endX],\n     * the start and end of the slope lines\n     */\n    @computed private get slopeAreaBounds(): Bounds {\n        return new Bounds(\n            this.startX,\n            this.innerBounds.top,\n            this.endX - this.startX,\n            this.innerBounds.height\n        )\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get missingDataStrategy(): MissingDataStrategy {\n        return this.chartState.missingDataStrategy\n    }\n\n    @computed private get formatColumn(): CoreColumn {\n        return this.chartState.formatColumn\n    }\n\n    @computed private get lineStrokeWidth(): number {\n        return this.manager.isStaticAndSmall ? 3 : 1.5\n    }\n\n    @computed private get isHoverModeActive(): boolean {\n        return (\n            this.hoveredSeriesNames.length > 0 ||\n            // if the external legend is hovered, we want to mute\n            // all non-hovered series even if the chart doesn't plot\n            // the currently hovered series\n            !!this.manager.externalLegendHoverBin\n        )\n    }\n\n    @computed private get startTime(): Time {\n        return this.chartState.startTime\n    }\n\n    @computed private get endTime(): Time {\n        return this.chartState.endTime\n    }\n\n    @computed private get startX(): number {\n        return this.xAxis.place(this.startTime)\n    }\n\n    @computed private get endX(): number {\n        return this.xAxis.place(this.endTime)\n    }\n\n    @computed private get seriesStrategy(): SeriesStrategy {\n        return this.chartState.seriesStrategy\n    }\n\n    @computed get series(): SlopeChartSeries[] {\n        return this.chartState.series\n    }\n\n    @computed private get placedSeries(): PlacedSlopeChartSeries[] {\n        return toPlacedSlopeChartSeries(this.series, {\n            yAxis: this.yAxis,\n            startX: this.startX,\n            endX: this.endX,\n        })\n    }\n\n    private hoverStateForSeries(series: SlopeChartSeries): InteractionState {\n        return getHoverStateForSeries(series, {\n            isHoverModeActive: this.isHoverModeActive,\n            hoveredSeriesNames: this.hoveredSeriesNames,\n        })\n    }\n\n    @computed private get renderSeries(): RenderSlopeChartSeries[] {\n        return toRenderSlopeChartSeries(this.placedSeries, {\n            isFocusModeActive: this.chartState.isFocusModeActive,\n            isHoverModeActive: this.isHoverModeActive,\n            hoveredSeriesNames: this.hoveredSeriesNames,\n        })\n    }\n\n    @computed get noDataSeries(): RawSlopeChartSeries[] {\n        return this.chartState.rawSeries.filter(\n            (series) => !this.chartState.isSeriesValid(series)\n        )\n    }\n\n    @computed private get showNoDataSection(): boolean {\n        if (this.manager.hideNoDataSection) return false\n\n        // nothing to show if there are no series with missing data\n        if (this.noDataSeries.length === 0) return false\n\n        // the No Data section is HTML and won't show up in the SVG export\n        if (this.manager.isStatic) return false\n\n        // we usually don't show the no data section if columns are plotted\n        // (since columns don't appear in the entity selector there is no need\n        // to explain that a column is missing – it just adds noise). but if\n        // the missing data strategy is set to hide, then we do want to give\n        // feedback as to why a slope is currently not rendered\n        return (\n            this.seriesStrategy === SeriesStrategy.entity ||\n            this.missingDataStrategy === MissingDataStrategy.hide\n        )\n    }\n\n    @computed private get xAxisHeight(): number {\n        if (this.xAxisConfig.hideTickLabels) return 0\n        return this.xAxisConfig.tickFontSize + TIME_LABEL_PADDING\n    }\n\n    @computed get yAxisConfig(): AxisConfig {\n        const { yAxisConfig } = this.manager\n        const defaults = getYAxisConfigDefaults(yAxisConfig)\n        const custom = { hideAxis: true }\n        return new AxisConfig({ ...defaults, ...yAxisConfig, ...custom }, this)\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        const { xAxisConfig } = this.manager\n        const overrides = getXAxisConfigSettings(xAxisConfig, {\n            startTime: this.startTime,\n            endTime: this.endTime,\n        })\n        return new AxisConfig({ ...xAxisConfig, ...overrides }, this)\n    }\n\n    @computed get yDomainDefault(): [number, number] {\n        const defaultDomain: [number, number] = [Infinity, -Infinity]\n        return (\n            domainExtent(\n                this.chartState.allYValues,\n                this.chartState.yScaleType\n            ) ?? defaultDomain\n        )\n    }\n\n    @computed get yDomain(): [number, number] {\n        const domain = this.yAxisConfig.domain || [Infinity, -Infinity]\n        const domainDefault = this.yDomainDefault\n        return [\n            Math.min(domain[0], domainDefault[0]),\n            Math.max(domain[1], domainDefault[1]),\n        ]\n    }\n\n    @computed private get yRange(): [number, number] {\n        return this.innerBounds.yRange()\n    }\n\n    @computed get xAxis(): HorizontalAxis {\n        return this.chartState.toHorizontalAxis(this.xAxisConfig, {\n            xRange: this.xRange,\n        })\n    }\n\n    @computed get yAxis(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig, {\n            yDomain: this.yDomain,\n            yRange: this.yRange,\n        })\n    }\n\n    @computed private get yAxisWidth(): number {\n        return this.yAxis.width\n    }\n\n    @computed private get sidebarWidth(): number {\n        return this.showNoDataSection\n            ? R.clamp(this.bounds.width * 0.125, { min: 60, max: 140 })\n            : 0\n    }\n\n    @computed get externalLegend(): ExternalColorLegendData | undefined {\n        if (!this.manager.showSeriesLabels) {\n            const categoricalLegendData = this.series.map(\n                (series, index) =>\n                    new CategoricalBin({\n                        index,\n                        value: series.seriesName,\n                        label: series.displayName,\n                        color: series.color,\n                    })\n            )\n            return {\n                categoricalLegendData,\n                categoricalLegendStyleConfig: CATEGORICAL_LEGEND_STYLE,\n            }\n        }\n        return undefined\n    }\n\n    @computed private get maxLabelsWidth(): number {\n        return 0.25 * this.innerBounds.width\n    }\n\n    @computed private get labelsFontSize(): number {\n        return this.rightLabelsState.fontSize\n    }\n\n    @computed private get labelsYRange(): [number, number] {\n        const top = this.bounds.top\n\n        const bottom =\n            this.bounds.bottom -\n            // leave space for the x-axis labels\n            this.xAxisHeight +\n            // but allow for a little extra space\n            this.labelsFontSize / 2\n\n        return [top, bottom]\n    }\n\n    @computed\n    private get commonLabelsOptions(): VerticalLabelsStateOptions {\n        return {\n            yAxis: () => this.yAxis,\n            yRange: () => this.labelsYRange,\n            maxWidth: this.maxLabelsWidth,\n            baseFontSize: this.fontSize,\n            verticalAlign: VerticalAlign.top,\n            showRegionTooltip: !this.manager.isStatic,\n        }\n    }\n\n    @computed\n    private get rightLabelsOptions(): VerticalLabelsStateOptions {\n        return { textAnchor: \"start\" }\n    }\n\n    @computed\n    private get leftLabelsOptions(): VerticalLabelsStateOptions {\n        return {\n            textAnchor: \"end\",\n            seriesNamesSortedByImportance:\n                this.seriesSortedByImportanceForLeftLabels,\n        }\n    }\n\n    private formatValue(value: number): string {\n        return this.formatColumn.formatValueShortWithAbbreviations(value)\n    }\n\n    @computed private get leftLabelsMaxLevel(): number {\n        if (!this.manager.showSeriesLabels) return 0\n\n        // can't use `leftLabelsState` due to a circular dependency\n        const series = this.series.map((series) =>\n            this.constructSingleLabelSeries(\n                series,\n                (series) => series.start.value,\n                { showSeriesName: false }\n            )\n        )\n\n        return new VerticalLabelsState(series, {\n            ...this.commonLabelsOptions,\n            ...this.leftLabelsOptions,\n            seriesNamesSortedByImportance:\n                this.seriesSortedByImportanceForLeftLabels,\n        }).maxLevel\n    }\n\n    @computed private get leftLabelsState(): VerticalLabelsState {\n        return new VerticalLabelsState(this.leftLabelsSeries, {\n            ...this.commonLabelsOptions,\n            ...this.leftLabelsOptions,\n        })\n    }\n\n    @computed private get leftLabelsWidth(): number {\n        return this.useCompactLayout\n            ? this.leftLabelsState.width\n            : this.leftLabelsState.stableWidth\n    }\n\n    @computed private get rightLabelsState(): VerticalLabelsState {\n        return new VerticalLabelsState(this.rightLabelsSeries, {\n            ...this.commonLabelsOptions,\n            ...this.rightLabelsOptions,\n        })\n    }\n\n    @computed private get rightLabelsWidth(): number {\n        return this.useCompactLayout\n            ? this.rightLabelsState.width\n            : this.rightLabelsState.stableWidth\n    }\n\n    // Consumed by FacetChart to align chart content across facets\n    @computed get verticalLabelWidths(): SideWidths {\n        return { left: this.leftLabelsWidth, right: this.rightLabelsWidth }\n    }\n\n    // Consumed by FacetChart to align the facet label with the plot content\n    // (here: the slope chart's start-time label)\n    @computed get contentInset(): SideWidths | undefined {\n        if (this.chartState.errorInfo.reason) return undefined\n        const hideTimeLabels = this.xAxis.config.hideTickLabels\n        const [startLabel, endLabel] = this.xAxis.tickLabels\n        const startOverflow = hideTimeLabels\n            ? 0\n            : 0.5 * (startLabel?.width ?? 0)\n        const endOverflow = hideTimeLabels ? 0 : 0.5 * (endLabel?.width ?? 0)\n        return {\n            left: this.startX - startOverflow - this.bounds.left,\n            right: this.bounds.right - (this.endX + endOverflow),\n        }\n    }\n\n    @computed\n    private get visibleRightLabels(): Set<SeriesName> {\n        return new Set(this.rightLabelsState?.visibleSeriesNames ?? [])\n    }\n\n    @computed\n    private get seriesSortedByImportanceForLeftLabels(): SeriesName[] {\n        return this.series\n            .map((s) => s.seriesName)\n            .sort((s1: SeriesName, s2: SeriesName): number => {\n                const PREFER_S1 = -1\n                const PREFER_S2 = 1\n\n                const s1_isLabelled = this.visibleRightLabels.has(s1)\n                const s2_isLabelled = this.visibleRightLabels.has(s2)\n\n                // prefer to show value labels for series that are already labelled\n                if (s1_isLabelled && !s2_isLabelled) return PREFER_S1\n                if (s2_isLabelled && !s1_isLabelled) return PREFER_S2\n\n                return 0\n            })\n    }\n\n    @computed private get effectiveLabelWidths(): SideWidths {\n        const shared = this.manager.sharedVerticalLabelWidths\n        return {\n            left: Math.max(shared?.left ?? 0, this.leftLabelsWidth),\n            right: Math.max(shared?.right ?? 0, this.rightLabelsWidth),\n        }\n    }\n\n    @computed private get xRange(): [number, number] {\n        const { left, right } = this.effectiveLabelWidths\n        const leftLabelsWidth = left + VERTICAL_LABELS_PADDING\n        const rightLabelsWidth = right + VERTICAL_LABELS_PADDING\n        const chartAreaWidth = this.innerBounds.width\n\n        // start and end value when the slopes are as wide as possible\n        const minStartX = this.innerBounds.x + this.yAxisWidth + leftLabelsWidth\n        const maxEndX = this.innerBounds.right - rightLabelsWidth\n\n        // use all available space if the chart is narrow\n        if (this.manager.isNarrow || this.isNarrow) {\n            return [minStartX, maxEndX]\n        }\n\n        const offset = 0.25\n        let startX = this.innerBounds.x + offset * chartAreaWidth\n        let endX = this.innerBounds.right - offset * chartAreaWidth\n\n        // make sure the start and end values are within the bounds\n        startX = Math.max(startX, minStartX)\n        endX = Math.min(endX, maxEndX)\n\n        // pick a reasonable max width based on an ideal aspect ratio\n        const idealAspectRatio = 0.9\n        const availableWidth =\n            chartAreaWidth -\n            this.yAxisWidth -\n            leftLabelsWidth -\n            rightLabelsWidth\n        const idealWidth = idealAspectRatio * this.bounds.height\n        const maxSlopeWidth = Math.min(idealWidth, availableWidth)\n\n        const currentSlopeWidth = endX - startX\n        if (currentSlopeWidth > maxSlopeWidth) {\n            const padding = currentSlopeWidth - maxSlopeWidth\n            startX += padding / 2\n            endX -= padding / 2\n        }\n\n        return [startX, endX]\n    }\n\n    @computed private get isNarrow(): boolean {\n        return this.bounds.width < NARROW_CHART_WIDTH\n    }\n\n    @computed private get useCompactLayout(): boolean {\n        return !!this.manager.isSemiNarrow || this.isNarrow\n    }\n\n    @computed private get hoveredSeriesNames(): SeriesName[] {\n        const hoveredSeriesNames: SeriesName[] = []\n\n        // hovered series name (either by hovering over a slope or a label)\n        if (this.hoveredSeriesName)\n            hoveredSeriesNames.push(this.hoveredSeriesName)\n\n        // hovered legend item in the external facet legend\n        if (this.manager.externalLegendHoverBin) {\n            hoveredSeriesNames.push(\n                ...this.series\n                    .map((s) => s.seriesName)\n                    .filter((name) =>\n                        this.manager.externalLegendHoverBin?.contains(name)\n                    )\n            )\n        }\n\n        return hoveredSeriesNames\n    }\n\n    private constructSingleLabelSeries(\n        series: SlopeChartSeries,\n        getValue: (series: SlopeChartSeries) => number,\n        {\n            showSeriesName,\n            showAnnotation,\n        }: {\n            showSeriesName?: boolean\n            showAnnotation?: boolean\n        }\n    ): LabelSeries {\n        const { seriesName, displayName, color, annotation } = series\n        const value = getValue(series)\n        const formattedValue = this.formatValue(value)\n        return {\n            color,\n            seriesName,\n            annotation: showAnnotation ? annotation : undefined,\n            label: showSeriesName ? displayName : formattedValue,\n            formattedValue: showSeriesName ? formattedValue : undefined,\n            placeFormattedValueInNewLine: this.useCompactLayout,\n            yValue: value,\n            emphasis: resolveEmphasis({\n                focus: series.focus,\n                hover: this.hoverStateForSeries(series),\n            }),\n        }\n    }\n\n    @computed private get leftLabelsSeries(): LabelSeries[] {\n        const { shouldShowSeriesNamesInLeftLabels: showSeriesName } = this\n        return this.series.map((series) =>\n            this.constructSingleLabelSeries(\n                series,\n                (series) => series.start.value,\n                { showSeriesName }\n            )\n        )\n    }\n\n    @computed private get rightLabelsSeries(): LabelSeries[] {\n        return this.series.map((series) =>\n            this.constructSingleLabelSeries(\n                series,\n                (series) => series.end.value,\n                {\n                    showSeriesName: this.manager.showSeriesLabels,\n                    showAnnotation: !this.useCompactLayout,\n                }\n            )\n        )\n    }\n\n    @computed private get zeroLineLabelFontSize(): number {\n        return scaleFontSize(12, this.fontSize)\n    }\n\n    @computed private get shouldShowZeroLine(): boolean {\n        const hasAnyNonZeroStartValue = this.chartState.series.some(\n            (series) => series.start.value !== 0\n        )\n        const isZeroInDomain = this.yDomain[0] <= 0 && this.yDomain[1] >= 0\n\n        return (\n            !this.chartState.isRelativeMode &&\n            hasAnyNonZeroStartValue &&\n            isZeroInDomain\n        )\n    }\n\n    @computed private get zeroLineLabel(): string {\n        return this.chartState.yColumns[0].formatForTick(0)\n    }\n\n    @computed private get zeroLineLabelWidth(): number {\n        if (!this.shouldShowZeroLine) return 0\n\n        return Bounds.forText(this.zeroLineLabel, {\n            fontSize: this.zeroLineLabelFontSize,\n        }).width\n    }\n\n    override componentDidMount() {\n        exposeInstanceOnWindow(this)\n    }\n\n    @computed private get shouldShowSeriesNamesInLeftLabels(): boolean {\n        return this.leftLabelsMaxLevel >= 4 && !!this.manager.showSeriesLabels\n    }\n\n    @action.bound private updateTooltipPosition(\n        event: SVGMouseOrTouchEvent\n    ): void {\n        const ref = this.manager.base?.current\n        if (ref) this.tooltipState.position = getRelativeMouse(ref, event)\n    }\n\n    private detectHoveredSlope(event: SVGMouseOrTouchEvent): void {\n        const ref = this.slopeAreaRef.current\n        if (!ref) return\n\n        const mouse = getRelativeMouse(ref, event)\n        this.mouseFrame = requestAnimationFrame(() => {\n            if (this.placedSeries.length === 0) return\n\n            const distanceMap = new Map<PlacedSlopeChartSeries, number>()\n            for (const series of this.placedSeries) {\n                distanceMap.set(\n                    series,\n                    PointVector.distanceFromPointToLineSegmentSq(\n                        mouse,\n                        series.startPoint,\n                        series.endPoint\n                    )\n                )\n            }\n\n            const closestSlope = _.minBy(this.placedSeries, (s) =>\n                distanceMap.get(s)\n            )!\n            const distanceSq = distanceMap.get(closestSlope)!\n            const tolerance = 10\n            const toleranceSq = tolerance * tolerance\n\n            if (closestSlope && distanceSq < toleranceSq) {\n                this.setHoveredSeries(closestSlope)\n            } else {\n                this.clearHoveredSeries()\n            }\n        })\n    }\n\n    private hoverTimer?: number\n    @action.bound private setHoveredSeries(series: SlopeChartSeries): void {\n        this.chartState.focusArray.clear()\n        clearTimeout(this.hoverTimer)\n        this.hoveredSeriesName = series.seriesName\n        this.tooltipState.target = { series }\n    }\n\n    @action.bound onVerticalLabelMouseEnter(seriesName: SeriesName): void {\n        const series = this.series.find((s) => s.seriesName === seriesName)\n        if (series) this.setHoveredSeries(series)\n    }\n\n    @action.bound private clearHoveredSeries(): void {\n        this.hoveredSeriesName = undefined\n        this.tooltipState.target = null\n    }\n\n    @action.bound private debouncedClearHoveredSeries(): void {\n        clearTimeout(this.hoverTimer)\n\n        // Wait before clearing selection in case the mouse is moving\n        // quickly over neighboring labels\n        this.hoverTimer = window.setTimeout(() => {\n            this.clearHoveredSeries()\n        }, 200)\n    }\n\n    @action.bound onVerticalLabelMouseLeave(): void {\n        this.debouncedClearHoveredSeries()\n    }\n\n    mouseFrame?: number\n    @action.bound onMouseMove(event: SVGMouseOrTouchEvent): void {\n        this.updateTooltipPosition(event)\n        this.detectHoveredSlope(event)\n    }\n\n    @action.bound onMouseLeave(): void {\n        if (this.mouseFrame !== undefined) cancelAnimationFrame(this.mouseFrame)\n\n        this.clearHoveredSeries()\n    }\n\n    @computed private get tooltip(): React.ReactElement | undefined {\n        const {\n            manager: { isRelativeMode },\n            tooltipState: { target, position, fading },\n            formatColumn,\n            startTime,\n            endTime,\n        } = this\n\n        const { series } = target || {}\n        if (!series) return\n\n        const formatTime = (time: Time) => formatColumn.formatTime(time)\n\n        const title = series.displayName\n        const titleAnnotation = series.annotation\n\n        const actualStartTime = series.start.originalTime\n        const actualEndTime = series.end.originalTime\n        const timeLabel = isRelativeMode\n            ? `% change between ${formatColumn.formatTime(actualStartTime)} and ${formatColumn.formatTime(actualEndTime)}`\n            : formatColumn.formatTimeComparison(actualStartTime, actualEndTime)\n\n        // The subtitle shows the original time of both values. Naming the\n        // original time here only helps if the subtitle mixes a target time with\n        // an original time, i.e. if only one of the two values was interpolated.\n        const constructTimesForToleranceNotice = ():\n            | { target: string; original?: string; plural: boolean }\n            | undefined => {\n            const isStartValueOriginal = series.start.originalTime === startTime\n            const isEndValueOriginal = series.end.originalTime === endTime\n\n            if (!isStartValueOriginal && !isEndValueOriginal) {\n                return {\n                    target: `${formatTime(startTime)} and ${formatTime(endTime)}`,\n                    plural: true,\n                }\n            } else if (!isStartValueOriginal) {\n                return {\n                    target: formatTime(startTime),\n                    original: formatTime(actualStartTime),\n                    plural: false,\n                }\n            } else if (!isEndValueOriginal) {\n                return {\n                    target: formatTime(endTime),\n                    original: formatTime(actualEndTime),\n                    plural: false,\n                }\n            } else {\n                return undefined\n            }\n        }\n\n        const toleranceNoticeTimes = constructTimesForToleranceNotice()\n        const toleranceNotice = toleranceNoticeTimes\n            ? {\n                  icon: TooltipFooterIcon.Notice,\n                  text: makeTooltipToleranceNotice(\n                      toleranceNoticeTimes.target,\n                      {\n                          plural: toleranceNoticeTimes.plural,\n                          originalTime: toleranceNoticeTimes.original,\n                      }\n                  ),\n              }\n            : undefined\n        const roundingNotice = series.column.roundsToSignificantFigures\n            ? {\n                  icon: TooltipFooterIcon.None,\n                  text: makeTooltipRoundingNotice(\n                      [series.column.numSignificantFigures],\n                      { plural: !isRelativeMode }\n                  ),\n              }\n            : undefined\n        const footer = excludeUndefined([toleranceNotice, roundingNotice])\n\n        const values = isRelativeMode\n            ? [series.end.value]\n            : [series.start.value, series.end.value]\n\n        return (\n            <Tooltip\n                id={this.tooltipId}\n                tooltipManager={this.props.chartState.manager}\n                x={position.x}\n                y={position.y}\n                offsetX={20}\n                offsetY={-16}\n                style={{ maxWidth: \"250px\" }}\n                title={title}\n                titleAnnotation={titleAnnotation}\n                subtitle={timeLabel}\n                subtitleFormat={toleranceNoticeTimes ? \"notice\" : undefined}\n                dissolve={fading}\n                footer={footer}\n                dismiss={() => (this.tooltipState.target = null)}\n            >\n                <TooltipValueRange\n                    label={series.column.displayName}\n                    unit={series.column.displayUnit}\n                    values={formatTooltipRangeValues(values, series.column)}\n                    trend={calculateTrendDirection(\n                        values[0],\n                        values[1],\n                        (value) => series.column.formatValueShort(value)\n                    )}\n                    labelVariant=\"unit-only\"\n                />\n            </Tooltip>\n        )\n    }\n\n    private makeMissingDataLabel(series: RawSlopeChartSeries): string {\n        const { displayName, start, end } = series\n\n        const startTime = this.formatColumn.formatTime(this.startTime)\n        const endTime = this.formatColumn.formatTime(this.endTime)\n\n        // mention the start or end value if they're missing\n        if (start?.value === undefined && end?.value === undefined) {\n            return `${displayName} (${startTime} & ${endTime})`\n        } else if (start?.value === undefined) {\n            return `${displayName} (${startTime})`\n        } else if (end?.value === undefined) {\n            return `${displayName} (${endTime})`\n        }\n\n        // if both values are given but the series shows up in the No Data\n        // section, then tolerance has been applied to one of the values\n        // in such a way that we decided not to render the slope after all\n        // (e.g. when the original times are too close to each other)\n        const isToleranceAppliedToStartValue =\n            start.originalTime !== this.startTime\n        const isToleranceAppliedToEndValue = end.originalTime !== this.endTime\n        if (isToleranceAppliedToStartValue && isToleranceAppliedToEndValue) {\n            return `${displayName} (${startTime} & ${endTime})`\n        } else if (isToleranceAppliedToStartValue) {\n            return `${displayName} (${startTime})`\n        } else if (isToleranceAppliedToEndValue) {\n            return `${displayName} (${endTime})`\n        }\n\n        return displayName\n    }\n\n    private renderNoDataSection(): React.ReactElement | undefined {\n        if (!this.showNoDataSection) return\n\n        const bounds = new Bounds(\n            this.innerBounds.right + SIDEBAR_MARGIN,\n            this.bounds.top,\n            this.sidebarWidth,\n            this.bounds.height\n        )\n\n        // Reversing the order so that newly added entities without data\n        // show up at the top of the no data section\n        const seriesNames = this.noDataSeries\n            .map((series) => this.makeMissingDataLabel(series))\n            .reverse()\n\n        return (\n            <NoDataSection\n                seriesNames={seriesNames}\n                bounds={bounds}\n                align={HorizontalAlign.right}\n                baseFontSize={this.fontSize}\n            />\n        )\n    }\n\n    private renderSlopes() {\n        return (\n            <g id={makeFigmaId(\"slopes\")}>\n                {this.renderSeries.map((series) => (\n                    <Slope\n                        key={series.seriesName}\n                        series={series}\n                        dotRadius={DOT_RADIUS}\n                        strokeWidth={this.lineStrokeWidth}\n                        outlineWidth={0.5}\n                    />\n                ))}\n            </g>\n        )\n    }\n\n    private renderInteractiveSlopes(): React.ReactElement {\n        return (\n            <g\n                ref={this.slopeAreaRef}\n                onMouseMove={this.onMouseMove}\n                onTouchMove={this.onMouseMove}\n                onTouchStart={this.onMouseMove}\n                onMouseLeave={this.onMouseLeave}\n            >\n                <rect\n                    x={roundForSvg(this.startX)}\n                    y={roundForSvg(this.bounds.y)}\n                    width={roundForSvg(this.endX - this.startX)}\n                    height={roundForSvg(this.bounds.height)}\n                    fillOpacity={0}\n                />\n                {this.renderSlopes()}\n            </g>\n        )\n    }\n\n    private renderZeroLine(): React.ReactElement | null {\n        if (!this.shouldShowZeroLine) return null\n\n        const overshoot = Math.min(1.5 * this.leftLabelsWidth, 16)\n\n        // The left end of the zero line overshoots the longest left label\n        // by a fixed amount\n        const desiredExtension =\n            VERTICAL_LABELS_PADDING + this.leftLabelsWidth + overshoot\n\n        // Ensure the zero line (and its label) don't overflow\n        const maxExtension =\n            this.startX -\n            this.bounds.left -\n            this.zeroLineLabelWidth -\n            ZERO_LABEL_PADDING\n        const extension = Math.min(desiredExtension, maxExtension)\n\n        const lineLeft = this.startX - extension\n        const lineRight = Math.min(\n            this.endX + extension,\n            this.innerBounds.right\n        )\n        const boundsForLine = this.boundsWithVerticalPadding.set({\n            x: lineLeft,\n            width: lineRight - lineLeft,\n        })\n\n        const labelX = lineLeft - ZERO_LABEL_PADDING\n\n        return (\n            <>\n                {!this.yAxis.hideGridlines && (\n                    <VerticalAxisZeroLine\n                        bounds={boundsForLine}\n                        axis={this.yAxis}\n                        stroke=\"#ddd\"\n                        strokeDasharray=\"3,2\"\n                    />\n                )}\n                <text\n                    x={roundForSvg(labelX)}\n                    y={roundForSvg(this.yAxis.place(0))}\n                    textAnchor=\"end\"\n                    dy={dyFromAlign(VerticalAlign.middle)}\n                    fontSize={this.zeroLineLabelFontSize}\n                    fill={GRAPHER_DARK_TEXT}\n                >\n                    {this.zeroLineLabel}\n                </text>\n            </>\n        )\n    }\n\n    private renderLogNotice(): React.ReactElement | null {\n        if (!this.chartState.isLogScale) return null\n\n        // The notice is rendered in line with the time labels, so if those\n        // are hidden (e.g. for inner facets), hide the notice as well\n        if (this.xAxis.config.hideTickLabels) return null\n\n        const fontSize = scaleFontSize(11, this.fontSize)\n\n        const longText = \"plotted on a logarithmic axis\"\n        const shortText = \"log axis\"\n\n        const longTextWidth = Bounds.forText(longText, { fontSize }).width\n        const shortTextWidth = Bounds.forText(shortText, { fontSize }).width\n\n        // Determine how much space is available for the log notice\n        const xDist = this.endX - this.startX\n        const [startTickLabel, endTickLabel] = this.xAxis.tickLabels\n        const leftPadding = 0.5 * (startTickLabel?.width ?? 0)\n        const rightPadding = 0.5 * (endTickLabel?.width ?? 0)\n        const maxWidth = xDist - rightPadding - leftPadding - 24\n\n        // Prefer the long text if it fits. If both texts are too long,\n        // don't display a notice\n        const renderedText =\n            longTextWidth <= maxWidth\n                ? longText\n                : shortTextWidth <= maxWidth\n                  ? shortText\n                  : null\n\n        if (!renderedText) return null\n\n        // Placed in between the start and end x marks\n        const midX = (this.startX + this.endX) / 2\n        const y =\n            this.slopeAreaBounds.bottom +\n            TIME_LABEL_PADDING +\n            this.xAxis.tickFontSize\n\n        return (\n            <text\n                x={roundForSvg(midX)}\n                y={roundForSvg(y)}\n                fontSize={fontSize}\n                textAnchor=\"middle\"\n                fill={GRAPHER_DARK_TEXT}\n                fontStyle=\"italic\"\n            >\n                {renderedText}\n            </text>\n        )\n    }\n\n    private renderYAxis(): React.ReactElement | null {\n        return (\n            <>\n                {this.renderZeroLine()}\n                {this.renderLogNotice()}\n            </>\n        )\n    }\n\n    private renderXAxis(): React.ReactElement {\n        return (\n            <SlopeChartXAxis\n                axis={this.xAxis}\n                bounds={this.slopeAreaBounds}\n                padding={TIME_LABEL_PADDING}\n            />\n        )\n    }\n\n    private renderVerticalLabelsRight(): React.ReactElement {\n        return (\n            <VerticalLabels\n                state={this.rightLabelsState}\n                x={this.xRange[1] + VERTICAL_LABELS_PADDING}\n                outline={true}\n                onMouseEnter={this.onVerticalLabelMouseEnter}\n                onMouseLeave={this.onVerticalLabelMouseLeave}\n                interactive={!this.manager.isStatic}\n            />\n        )\n    }\n\n    private renderVerticalLabelsLeft(): React.ReactElement | null {\n        // Don't show labels for the start values in relative mode since they're all trivially zero\n        if (this.manager.isRelativeMode) return null\n\n        const uniqYValues = new Set(\n            this.leftLabelsSeries.map((series) => series.yValue)\n        )\n        const allSlopesStartFromZero =\n            uniqYValues.size === 1 && uniqYValues.has(0)\n\n        // If all values have a start value of 0, show the 0-label only once\n        if (allSlopesStartFromZero)\n            return (\n                <Halo id=\"x-axis-zero-label\" fontSize={this.labelsFontSize}>\n                    <text\n                        x={roundForSvg(this.startX)}\n                        y={roundForSvg(this.yAxis.place(0))}\n                        textAnchor=\"end\"\n                        dx={-VERTICAL_LABELS_PADDING - 4}\n                        dy={dyFromAlign(VerticalAlign.middle)}\n                        fontSize={this.labelsFontSize}\n                    >\n                        {this.formatValue(0)}\n                    </text>\n                </Halo>\n            )\n\n        return (\n            <VerticalLabels\n                state={this.leftLabelsState}\n                x={this.xRange[0] - VERTICAL_LABELS_PADDING}\n                outline={true}\n                onMouseEnter={this.onVerticalLabelMouseEnter}\n                onMouseLeave={this.onVerticalLabelMouseLeave}\n                interactive={!this.manager.isStatic}\n            />\n        )\n    }\n\n    private renderVerticalLabels(): React.ReactElement | undefined {\n        return (\n            <>\n                {this.renderVerticalLabelsLeft()}\n                {this.renderVerticalLabelsRight()}\n            </>\n        )\n    }\n\n    private renderInteractive(): React.ReactElement {\n        return (\n            <g\n                onMouseMove={this.updateTooltipPosition}\n                onTouchStart={this.updateTooltipPosition}\n                onTouchMove={this.updateTooltipPosition}\n            >\n                <rect {...this.bounds.toProps()} fillOpacity={0} />\n                {this.renderYAxis()}\n                {this.renderXAxis()}\n                {this.renderInteractiveSlopes()}\n                {this.renderVerticalLabels()}\n                {this.renderNoDataSection()}\n                {this.tooltip}\n            </g>\n        )\n    }\n\n    private renderStatic(): React.ReactElement {\n        return (\n            <>\n                {this.renderYAxis()}\n                {this.renderXAxis()}\n                {this.renderSlopes()}\n                {this.renderVerticalLabels()}\n            </>\n        )\n    }\n\n    override render() {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataMessage\n                    manager={this.manager}\n                    bounds={this.props.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return this.manager.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n}\n","import { makePatternId } from \"../core/GrapherConstants\"\n\nexport function makeProjectedDataPatternId(idSuffix?: string): string {\n    return makePatternId(\"DiscreteBarChart_stripes\", idSuffix)\n}\n","// src/index.ts\nvar updateQueue = makeQueue();\nvar raf = (fn) => schedule(fn, updateQueue);\nvar writeQueue = makeQueue();\nraf.write = (fn) => schedule(fn, writeQueue);\nvar onStartQueue = makeQueue();\nraf.onStart = (fn) => schedule(fn, onStartQueue);\nvar onFrameQueue = makeQueue();\nraf.onFrame = (fn) => schedule(fn, onFrameQueue);\nvar onFinishQueue = makeQueue();\nraf.onFinish = (fn) => schedule(fn, onFinishQueue);\nvar timeouts = [];\nraf.setTimeout = (handler, ms) => {\n  const time = raf.now() + ms;\n  const cancel = () => {\n    const i = timeouts.findIndex((t) => t.cancel == cancel);\n    if (~i) timeouts.splice(i, 1);\n    pendingCount -= ~i ? 1 : 0;\n  };\n  const timeout = { time, handler, cancel };\n  timeouts.splice(findTimeout(time), 0, timeout);\n  pendingCount += 1;\n  start();\n  return timeout;\n};\nvar findTimeout = (time) => ~(~timeouts.findIndex((t) => t.time > time) || ~timeouts.length);\nraf.cancel = (fn) => {\n  onStartQueue.delete(fn);\n  onFrameQueue.delete(fn);\n  onFinishQueue.delete(fn);\n  updateQueue.delete(fn);\n  writeQueue.delete(fn);\n};\nraf.sync = (fn) => {\n  sync = true;\n  raf.batchedUpdates(fn);\n  sync = false;\n};\nraf.throttle = (fn) => {\n  let lastArgs;\n  function queuedFn() {\n    try {\n      fn(...lastArgs);\n    } finally {\n      lastArgs = null;\n    }\n  }\n  function throttled(...args) {\n    lastArgs = args;\n    raf.onStart(queuedFn);\n  }\n  throttled.handler = fn;\n  throttled.cancel = () => {\n    onStartQueue.delete(queuedFn);\n    lastArgs = null;\n  };\n  return throttled;\n};\nvar nativeRaf = typeof window != \"undefined\" ? window.requestAnimationFrame : (\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  () => {\n  }\n);\nraf.use = (impl) => nativeRaf = impl;\nraf.now = typeof performance != \"undefined\" ? () => performance.now() : Date.now;\nraf.batchedUpdates = (fn) => fn();\nraf.catch = console.error;\nraf.frameLoop = \"always\";\nraf.advance = () => {\n  if (raf.frameLoop !== \"demand\") {\n    console.warn(\n      \"Cannot call the manual advancement of rafz whilst frameLoop is not set as demand\"\n    );\n  } else {\n    update();\n  }\n};\nvar ts = -1;\nvar pendingCount = 0;\nvar sync = false;\nfunction schedule(fn, queue) {\n  if (sync) {\n    queue.delete(fn);\n    fn(0);\n  } else {\n    queue.add(fn);\n    start();\n  }\n}\nfunction start() {\n  if (ts < 0) {\n    ts = 0;\n    if (raf.frameLoop !== \"demand\") {\n      nativeRaf(loop);\n    }\n  }\n}\nfunction stop() {\n  ts = -1;\n}\nfunction loop() {\n  if (~ts) {\n    nativeRaf(loop);\n    raf.batchedUpdates(update);\n  }\n}\nfunction update() {\n  const prevTs = ts;\n  ts = raf.now();\n  const count = findTimeout(ts);\n  if (count) {\n    eachSafely(timeouts.splice(0, count), (t) => t.handler());\n    pendingCount -= count;\n  }\n  if (!pendingCount) {\n    stop();\n    return;\n  }\n  onStartQueue.flush();\n  updateQueue.flush(prevTs ? Math.min(64, ts - prevTs) : 16.667);\n  onFrameQueue.flush();\n  writeQueue.flush();\n  onFinishQueue.flush();\n}\nfunction makeQueue() {\n  let next = /* @__PURE__ */ new Set();\n  let current = next;\n  return {\n    add(fn) {\n      pendingCount += current == next && !next.has(fn) ? 1 : 0;\n      next.add(fn);\n    },\n    delete(fn) {\n      pendingCount -= current == next && next.has(fn) ? 1 : 0;\n      return next.delete(fn);\n    },\n    flush(arg) {\n      if (current.size) {\n        next = /* @__PURE__ */ new Set();\n        pendingCount -= current.size;\n        eachSafely(current, (fn) => fn(arg) && next.add(fn));\n        pendingCount += next.size;\n        current = next;\n      }\n    }\n  };\n}\nfunction eachSafely(values, each) {\n  values.forEach((value) => {\n    try {\n      each(value);\n    } catch (e) {\n      raf.catch(e);\n    }\n  });\n}\nvar __raf = {\n  /** The number of pending tasks */\n  count() {\n    return pendingCount;\n  },\n  /** Whether there's a raf update loop running */\n  isRunning() {\n    return ts >= 0;\n  },\n  /** Clear internal state. Never call from update loop! */\n  clear() {\n    ts = -1;\n    timeouts = [];\n    onStartQueue = makeQueue();\n    updateQueue = makeQueue();\n    onFrameQueue = makeQueue();\n    writeQueue = makeQueue();\n    onFinishQueue = makeQueue();\n    pendingCount = 0;\n  }\n};\nexport {\n  __raf,\n  raf\n};\n","var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// src/globals.ts\nvar globals_exports = {};\n__export(globals_exports, {\n  assign: () => assign,\n  colors: () => colors,\n  createStringInterpolator: () => createStringInterpolator,\n  skipAnimation: () => skipAnimation,\n  to: () => to,\n  willAdvance: () => willAdvance\n});\nimport { raf } from \"@react-spring/rafz\";\n\n// src/helpers.ts\nfunction noop() {\n}\nvar defineHidden = (obj, key, value) => Object.defineProperty(obj, key, { value, writable: true, configurable: true });\nvar is = {\n  arr: Array.isArray,\n  obj: (a) => !!a && a.constructor.name === \"Object\",\n  fun: (a) => typeof a === \"function\",\n  str: (a) => typeof a === \"string\",\n  num: (a) => typeof a === \"number\",\n  und: (a) => a === void 0\n};\nfunction isEqual(a, b) {\n  if (is.arr(a)) {\n    if (!is.arr(b) || a.length !== b.length) return false;\n    for (let i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) return false;\n    }\n    return true;\n  }\n  return a === b;\n}\nvar each = (obj, fn) => obj.forEach(fn);\nfunction eachProp(obj, fn, ctx) {\n  if (is.arr(obj)) {\n    for (let i = 0; i < obj.length; i++) {\n      fn.call(ctx, obj[i], `${i}`);\n    }\n    return;\n  }\n  for (const key in obj) {\n    if (obj.hasOwnProperty(key)) {\n      fn.call(ctx, obj[key], key);\n    }\n  }\n}\nvar toArray = (a) => is.und(a) ? [] : is.arr(a) ? a : [a];\nfunction flush(queue, iterator) {\n  if (queue.size) {\n    const items = Array.from(queue);\n    queue.clear();\n    each(items, iterator);\n  }\n}\nvar flushCalls = (queue, ...args) => flush(queue, (fn) => fn(...args));\nvar isSSR = () => typeof window === \"undefined\" || !window.navigator || /ServerSideRendering|^Deno\\//.test(window.navigator.userAgent);\n\n// src/globals.ts\nvar createStringInterpolator;\nvar to;\nvar colors = null;\nvar skipAnimation = false;\nvar willAdvance = noop;\nvar assign = (globals) => {\n  if (globals.to) to = globals.to;\n  if (globals.now) raf.now = globals.now;\n  if (globals.colors !== void 0) colors = globals.colors;\n  if (globals.skipAnimation != null) skipAnimation = globals.skipAnimation;\n  if (globals.createStringInterpolator)\n    createStringInterpolator = globals.createStringInterpolator;\n  if (globals.requestAnimationFrame) raf.use(globals.requestAnimationFrame);\n  if (globals.batchedUpdates) raf.batchedUpdates = globals.batchedUpdates;\n  if (globals.willAdvance) willAdvance = globals.willAdvance;\n  if (globals.frameLoop) raf.frameLoop = globals.frameLoop;\n};\n\n// src/FrameLoop.ts\nimport { raf as raf2 } from \"@react-spring/rafz\";\nvar startQueue = /* @__PURE__ */ new Set();\nvar currentFrame = [];\nvar prevFrame = [];\nvar priority = 0;\nvar frameLoop = {\n  get idle() {\n    return !startQueue.size && !currentFrame.length;\n  },\n  /** Advance the given animation on every frame until idle. */\n  start(animation) {\n    if (priority > animation.priority) {\n      startQueue.add(animation);\n      raf2.onStart(flushStartQueue);\n    } else {\n      startSafely(animation);\n      raf2(advance);\n    }\n  },\n  /** Advance all animations by the given time. */\n  advance,\n  /** Call this when an animation's priority changes. */\n  sort(animation) {\n    if (priority) {\n      raf2.onFrame(() => frameLoop.sort(animation));\n    } else {\n      const prevIndex = currentFrame.indexOf(animation);\n      if (~prevIndex) {\n        currentFrame.splice(prevIndex, 1);\n        startUnsafely(animation);\n      }\n    }\n  },\n  /**\n   * Clear all animations. For testing purposes.\n   *\n   * ☠️ Never call this from within the frameloop.\n   */\n  clear() {\n    currentFrame = [];\n    startQueue.clear();\n  }\n};\nfunction flushStartQueue() {\n  startQueue.forEach(startSafely);\n  startQueue.clear();\n  raf2(advance);\n}\nfunction startSafely(animation) {\n  if (!currentFrame.includes(animation)) startUnsafely(animation);\n}\nfunction startUnsafely(animation) {\n  currentFrame.splice(\n    findIndex(currentFrame, (other) => other.priority > animation.priority),\n    0,\n    animation\n  );\n}\nfunction advance(dt) {\n  const nextFrame = prevFrame;\n  for (let i = 0; i < currentFrame.length; i++) {\n    const animation = currentFrame[i];\n    priority = animation.priority;\n    if (!animation.idle) {\n      willAdvance(animation);\n      animation.advance(dt);\n      if (!animation.idle) {\n        nextFrame.push(animation);\n      }\n    }\n  }\n  priority = 0;\n  prevFrame = currentFrame;\n  prevFrame.length = 0;\n  currentFrame = nextFrame;\n  return currentFrame.length > 0;\n}\nfunction findIndex(arr, test) {\n  const index = arr.findIndex(test);\n  return index < 0 ? arr.length : index;\n}\n\n// src/clamp.ts\nvar clamp = (min, max, v) => Math.min(Math.max(v, min), max);\n\n// src/colors.ts\nvar colors2 = {\n  transparent: 0,\n  aliceblue: 4042850303,\n  antiquewhite: 4209760255,\n  aqua: 16777215,\n  aquamarine: 2147472639,\n  azure: 4043309055,\n  beige: 4126530815,\n  bisque: 4293182719,\n  black: 255,\n  blanchedalmond: 4293643775,\n  blue: 65535,\n  blueviolet: 2318131967,\n  brown: 2771004159,\n  burlywood: 3736635391,\n  burntsienna: 3934150143,\n  cadetblue: 1604231423,\n  chartreuse: 2147418367,\n  chocolate: 3530104575,\n  coral: 4286533887,\n  cornflowerblue: 1687547391,\n  cornsilk: 4294499583,\n  crimson: 3692313855,\n  cyan: 16777215,\n  darkblue: 35839,\n  darkcyan: 9145343,\n  darkgoldenrod: 3095792639,\n  darkgray: 2846468607,\n  darkgreen: 6553855,\n  darkgrey: 2846468607,\n  darkkhaki: 3182914559,\n  darkmagenta: 2332068863,\n  darkolivegreen: 1433087999,\n  darkorange: 4287365375,\n  darkorchid: 2570243327,\n  darkred: 2332033279,\n  darksalmon: 3918953215,\n  darkseagreen: 2411499519,\n  darkslateblue: 1211993087,\n  darkslategray: 793726975,\n  darkslategrey: 793726975,\n  darkturquoise: 13554175,\n  darkviolet: 2483082239,\n  deeppink: 4279538687,\n  deepskyblue: 12582911,\n  dimgray: 1768516095,\n  dimgrey: 1768516095,\n  dodgerblue: 512819199,\n  firebrick: 2988581631,\n  floralwhite: 4294635775,\n  forestgreen: 579543807,\n  fuchsia: 4278255615,\n  gainsboro: 3705462015,\n  ghostwhite: 4177068031,\n  gold: 4292280575,\n  goldenrod: 3668254975,\n  gray: 2155905279,\n  green: 8388863,\n  greenyellow: 2919182335,\n  grey: 2155905279,\n  honeydew: 4043305215,\n  hotpink: 4285117695,\n  indianred: 3445382399,\n  indigo: 1258324735,\n  ivory: 4294963455,\n  khaki: 4041641215,\n  lavender: 3873897215,\n  lavenderblush: 4293981695,\n  lawngreen: 2096890111,\n  lemonchiffon: 4294626815,\n  lightblue: 2916673279,\n  lightcoral: 4034953471,\n  lightcyan: 3774873599,\n  lightgoldenrodyellow: 4210742015,\n  lightgray: 3553874943,\n  lightgreen: 2431553791,\n  lightgrey: 3553874943,\n  lightpink: 4290167295,\n  lightsalmon: 4288707327,\n  lightseagreen: 548580095,\n  lightskyblue: 2278488831,\n  lightslategray: 2005441023,\n  lightslategrey: 2005441023,\n  lightsteelblue: 2965692159,\n  lightyellow: 4294959359,\n  lime: 16711935,\n  limegreen: 852308735,\n  linen: 4210091775,\n  magenta: 4278255615,\n  maroon: 2147483903,\n  mediumaquamarine: 1724754687,\n  mediumblue: 52735,\n  mediumorchid: 3126187007,\n  mediumpurple: 2473647103,\n  mediumseagreen: 1018393087,\n  mediumslateblue: 2070474495,\n  mediumspringgreen: 16423679,\n  mediumturquoise: 1221709055,\n  mediumvioletred: 3340076543,\n  midnightblue: 421097727,\n  mintcream: 4127193855,\n  mistyrose: 4293190143,\n  moccasin: 4293178879,\n  navajowhite: 4292783615,\n  navy: 33023,\n  oldlace: 4260751103,\n  olive: 2155872511,\n  olivedrab: 1804477439,\n  orange: 4289003775,\n  orangered: 4282712319,\n  orchid: 3664828159,\n  palegoldenrod: 4008225535,\n  palegreen: 2566625535,\n  paleturquoise: 2951671551,\n  palevioletred: 3681588223,\n  papayawhip: 4293907967,\n  peachpuff: 4292524543,\n  peru: 3448061951,\n  pink: 4290825215,\n  plum: 3718307327,\n  powderblue: 2967529215,\n  purple: 2147516671,\n  rebeccapurple: 1714657791,\n  red: 4278190335,\n  rosybrown: 3163525119,\n  royalblue: 1097458175,\n  saddlebrown: 2336560127,\n  salmon: 4202722047,\n  sandybrown: 4104413439,\n  seagreen: 780883967,\n  seashell: 4294307583,\n  sienna: 2689740287,\n  silver: 3233857791,\n  skyblue: 2278484991,\n  slateblue: 1784335871,\n  slategray: 1887473919,\n  slategrey: 1887473919,\n  snow: 4294638335,\n  springgreen: 16744447,\n  steelblue: 1182971135,\n  tan: 3535047935,\n  teal: 8421631,\n  thistle: 3636451583,\n  tomato: 4284696575,\n  turquoise: 1088475391,\n  violet: 4001558271,\n  wheat: 4125012991,\n  white: 4294967295,\n  whitesmoke: 4126537215,\n  yellow: 4294902015,\n  yellowgreen: 2597139199\n};\n\n// src/colorMatchers.ts\nvar NUMBER = \"[-+]?\\\\d*\\\\.?\\\\d+\";\nvar PERCENTAGE = NUMBER + \"%\";\nfunction call(...parts) {\n  return \"\\\\(\\\\s*(\" + parts.join(\")\\\\s*,\\\\s*(\") + \")\\\\s*\\\\)\";\n}\nvar rgb = new RegExp(\"rgb\" + call(NUMBER, NUMBER, NUMBER));\nvar rgba = new RegExp(\"rgba\" + call(NUMBER, NUMBER, NUMBER, NUMBER));\nvar hsl = new RegExp(\"hsl\" + call(NUMBER, PERCENTAGE, PERCENTAGE));\nvar hsla = new RegExp(\n  \"hsla\" + call(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER)\n);\nvar hex3 = /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/;\nvar hex4 = /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/;\nvar hex6 = /^#([0-9a-fA-F]{6})$/;\nvar hex8 = /^#([0-9a-fA-F]{8})$/;\n\n// src/normalizeColor.ts\nfunction normalizeColor(color) {\n  let match;\n  if (typeof color === \"number\") {\n    return color >>> 0 === color && color >= 0 && color <= 4294967295 ? color : null;\n  }\n  if (match = hex6.exec(color))\n    return parseInt(match[1] + \"ff\", 16) >>> 0;\n  if (colors && colors[color] !== void 0) {\n    return colors[color];\n  }\n  if (match = rgb.exec(color)) {\n    return (parse255(match[1]) << 24 | // r\n    parse255(match[2]) << 16 | // g\n    parse255(match[3]) << 8 | // b\n    255) >>> // a\n    0;\n  }\n  if (match = rgba.exec(color)) {\n    return (parse255(match[1]) << 24 | // r\n    parse255(match[2]) << 16 | // g\n    parse255(match[3]) << 8 | // b\n    parse1(match[4])) >>> // a\n    0;\n  }\n  if (match = hex3.exec(color)) {\n    return parseInt(\n      match[1] + match[1] + // r\n      match[2] + match[2] + // g\n      match[3] + match[3] + // b\n      \"ff\",\n      // a\n      16\n    ) >>> 0;\n  }\n  if (match = hex8.exec(color)) return parseInt(match[1], 16) >>> 0;\n  if (match = hex4.exec(color)) {\n    return parseInt(\n      match[1] + match[1] + // r\n      match[2] + match[2] + // g\n      match[3] + match[3] + // b\n      match[4] + match[4],\n      // a\n      16\n    ) >>> 0;\n  }\n  if (match = hsl.exec(color)) {\n    return (hslToRgb(\n      parse360(match[1]),\n      // h\n      parsePercentage(match[2]),\n      // s\n      parsePercentage(match[3])\n      // l\n    ) | 255) >>> // a\n    0;\n  }\n  if (match = hsla.exec(color)) {\n    return (hslToRgb(\n      parse360(match[1]),\n      // h\n      parsePercentage(match[2]),\n      // s\n      parsePercentage(match[3])\n      // l\n    ) | parse1(match[4])) >>> // a\n    0;\n  }\n  return null;\n}\nfunction hue2rgb(p, q, t) {\n  if (t < 0) t += 1;\n  if (t > 1) t -= 1;\n  if (t < 1 / 6) return p + (q - p) * 6 * t;\n  if (t < 1 / 2) return q;\n  if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n  return p;\n}\nfunction hslToRgb(h, s, l) {\n  const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n  const p = 2 * l - q;\n  const r = hue2rgb(p, q, h + 1 / 3);\n  const g = hue2rgb(p, q, h);\n  const b = hue2rgb(p, q, h - 1 / 3);\n  return Math.round(r * 255) << 24 | Math.round(g * 255) << 16 | Math.round(b * 255) << 8;\n}\nfunction parse255(str) {\n  const int = parseInt(str, 10);\n  if (int < 0) return 0;\n  if (int > 255) return 255;\n  return int;\n}\nfunction parse360(str) {\n  const int = parseFloat(str);\n  return (int % 360 + 360) % 360 / 360;\n}\nfunction parse1(str) {\n  const num = parseFloat(str);\n  if (num < 0) return 0;\n  if (num > 1) return 255;\n  return Math.round(num * 255);\n}\nfunction parsePercentage(str) {\n  const int = parseFloat(str);\n  if (int < 0) return 0;\n  if (int > 100) return 1;\n  return int / 100;\n}\n\n// src/colorToRgba.ts\nfunction colorToRgba(input) {\n  let int32Color = normalizeColor(input);\n  if (int32Color === null) return input;\n  int32Color = int32Color || 0;\n  const r = (int32Color & 4278190080) >>> 24;\n  const g = (int32Color & 16711680) >>> 16;\n  const b = (int32Color & 65280) >>> 8;\n  const a = (int32Color & 255) / 255;\n  return `rgba(${r}, ${g}, ${b}, ${a})`;\n}\n\n// src/createInterpolator.ts\nvar createInterpolator = (range, output, extrapolate) => {\n  if (is.fun(range)) {\n    return range;\n  }\n  if (is.arr(range)) {\n    return createInterpolator({\n      range,\n      output,\n      extrapolate\n    });\n  }\n  if (is.str(range.output[0])) {\n    return createStringInterpolator(range);\n  }\n  const config = range;\n  const outputRange = config.output;\n  const inputRange = config.range || [0, 1];\n  const extrapolateLeft = config.extrapolateLeft || config.extrapolate || \"extend\";\n  const extrapolateRight = config.extrapolateRight || config.extrapolate || \"extend\";\n  const easing = config.easing || ((t) => t);\n  return (input) => {\n    const range2 = findRange(input, inputRange);\n    return interpolate(\n      input,\n      inputRange[range2],\n      inputRange[range2 + 1],\n      outputRange[range2],\n      outputRange[range2 + 1],\n      easing,\n      extrapolateLeft,\n      extrapolateRight,\n      config.map\n    );\n  };\n};\nfunction interpolate(input, inputMin, inputMax, outputMin, outputMax, easing, extrapolateLeft, extrapolateRight, map) {\n  let result = map ? map(input) : input;\n  if (result < inputMin) {\n    if (extrapolateLeft === \"identity\") return result;\n    else if (extrapolateLeft === \"clamp\") result = inputMin;\n  }\n  if (result > inputMax) {\n    if (extrapolateRight === \"identity\") return result;\n    else if (extrapolateRight === \"clamp\") result = inputMax;\n  }\n  if (outputMin === outputMax) return outputMin;\n  if (inputMin === inputMax) return input <= inputMin ? outputMin : outputMax;\n  if (inputMin === -Infinity) result = -result;\n  else if (inputMax === Infinity) result = result - inputMin;\n  else result = (result - inputMin) / (inputMax - inputMin);\n  result = easing(result);\n  if (outputMin === -Infinity) result = -result;\n  else if (outputMax === Infinity) result = result + outputMin;\n  else result = result * (outputMax - outputMin) + outputMin;\n  return result;\n}\nfunction findRange(input, inputRange) {\n  for (var i = 1; i < inputRange.length - 1; ++i)\n    if (inputRange[i] >= input) break;\n  return i - 1;\n}\n\n// src/easings.ts\nvar steps = (steps2, direction = \"end\") => (progress2) => {\n  progress2 = direction === \"end\" ? Math.min(progress2, 0.999) : Math.max(progress2, 1e-3);\n  const expanded = progress2 * steps2;\n  const rounded = direction === \"end\" ? Math.floor(expanded) : Math.ceil(expanded);\n  return clamp(0, 1, rounded / steps2);\n};\nvar c1 = 1.70158;\nvar c2 = c1 * 1.525;\nvar c3 = c1 + 1;\nvar c4 = 2 * Math.PI / 3;\nvar c5 = 2 * Math.PI / 4.5;\nvar bounceOut = (x) => {\n  const n1 = 7.5625;\n  const d1 = 2.75;\n  if (x < 1 / d1) {\n    return n1 * x * x;\n  } else if (x < 2 / d1) {\n    return n1 * (x -= 1.5 / d1) * x + 0.75;\n  } else if (x < 2.5 / d1) {\n    return n1 * (x -= 2.25 / d1) * x + 0.9375;\n  } else {\n    return n1 * (x -= 2.625 / d1) * x + 0.984375;\n  }\n};\nvar easings = {\n  linear: (x) => x,\n  easeInQuad: (x) => x * x,\n  easeOutQuad: (x) => 1 - (1 - x) * (1 - x),\n  easeInOutQuad: (x) => x < 0.5 ? 2 * x * x : 1 - Math.pow(-2 * x + 2, 2) / 2,\n  easeInCubic: (x) => x * x * x,\n  easeOutCubic: (x) => 1 - Math.pow(1 - x, 3),\n  easeInOutCubic: (x) => x < 0.5 ? 4 * x * x * x : 1 - Math.pow(-2 * x + 2, 3) / 2,\n  easeInQuart: (x) => x * x * x * x,\n  easeOutQuart: (x) => 1 - Math.pow(1 - x, 4),\n  easeInOutQuart: (x) => x < 0.5 ? 8 * x * x * x * x : 1 - Math.pow(-2 * x + 2, 4) / 2,\n  easeInQuint: (x) => x * x * x * x * x,\n  easeOutQuint: (x) => 1 - Math.pow(1 - x, 5),\n  easeInOutQuint: (x) => x < 0.5 ? 16 * x * x * x * x * x : 1 - Math.pow(-2 * x + 2, 5) / 2,\n  easeInSine: (x) => 1 - Math.cos(x * Math.PI / 2),\n  easeOutSine: (x) => Math.sin(x * Math.PI / 2),\n  easeInOutSine: (x) => -(Math.cos(Math.PI * x) - 1) / 2,\n  easeInExpo: (x) => x === 0 ? 0 : Math.pow(2, 10 * x - 10),\n  easeOutExpo: (x) => x === 1 ? 1 : 1 - Math.pow(2, -10 * x),\n  easeInOutExpo: (x) => x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? Math.pow(2, 20 * x - 10) / 2 : (2 - Math.pow(2, -20 * x + 10)) / 2,\n  easeInCirc: (x) => 1 - Math.sqrt(1 - Math.pow(x, 2)),\n  easeOutCirc: (x) => Math.sqrt(1 - Math.pow(x - 1, 2)),\n  easeInOutCirc: (x) => x < 0.5 ? (1 - Math.sqrt(1 - Math.pow(2 * x, 2))) / 2 : (Math.sqrt(1 - Math.pow(-2 * x + 2, 2)) + 1) / 2,\n  easeInBack: (x) => c3 * x * x * x - c1 * x * x,\n  easeOutBack: (x) => 1 + c3 * Math.pow(x - 1, 3) + c1 * Math.pow(x - 1, 2),\n  easeInOutBack: (x) => x < 0.5 ? Math.pow(2 * x, 2) * ((c2 + 1) * 2 * x - c2) / 2 : (Math.pow(2 * x - 2, 2) * ((c2 + 1) * (x * 2 - 2) + c2) + 2) / 2,\n  easeInElastic: (x) => x === 0 ? 0 : x === 1 ? 1 : -Math.pow(2, 10 * x - 10) * Math.sin((x * 10 - 10.75) * c4),\n  easeOutElastic: (x) => x === 0 ? 0 : x === 1 ? 1 : Math.pow(2, -10 * x) * Math.sin((x * 10 - 0.75) * c4) + 1,\n  easeInOutElastic: (x) => x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? -(Math.pow(2, 20 * x - 10) * Math.sin((20 * x - 11.125) * c5)) / 2 : Math.pow(2, -20 * x + 10) * Math.sin((20 * x - 11.125) * c5) / 2 + 1,\n  easeInBounce: (x) => 1 - bounceOut(1 - x),\n  easeOutBounce: bounceOut,\n  easeInOutBounce: (x) => x < 0.5 ? (1 - bounceOut(1 - 2 * x)) / 2 : (1 + bounceOut(2 * x - 1)) / 2,\n  steps\n};\n\n// src/fluids.ts\nvar $get = Symbol.for(\"FluidValue.get\");\nvar $observers = Symbol.for(\"FluidValue.observers\");\nvar hasFluidValue = (arg) => Boolean(arg && arg[$get]);\nvar getFluidValue = (arg) => arg && arg[$get] ? arg[$get]() : arg;\nvar getFluidObservers = (target) => target[$observers] || null;\nfunction callFluidObserver(observer2, event) {\n  if (observer2.eventObserved) {\n    observer2.eventObserved(event);\n  } else {\n    observer2(event);\n  }\n}\nfunction callFluidObservers(target, event) {\n  const observers = target[$observers];\n  if (observers) {\n    observers.forEach((observer2) => {\n      callFluidObserver(observer2, event);\n    });\n  }\n}\n$get, $observers;\nvar FluidValue = class {\n  constructor(get) {\n    if (!get && !(get = this.get)) {\n      throw Error(\"Unknown getter\");\n    }\n    setFluidGetter(this, get);\n  }\n};\nvar setFluidGetter = (target, get) => setHidden(target, $get, get);\nfunction addFluidObserver(target, observer2) {\n  if (target[$get]) {\n    let observers = target[$observers];\n    if (!observers) {\n      setHidden(target, $observers, observers = /* @__PURE__ */ new Set());\n    }\n    if (!observers.has(observer2)) {\n      observers.add(observer2);\n      if (target.observerAdded) {\n        target.observerAdded(observers.size, observer2);\n      }\n    }\n  }\n  return observer2;\n}\nfunction removeFluidObserver(target, observer2) {\n  const observers = target[$observers];\n  if (observers && observers.has(observer2)) {\n    const count = observers.size - 1;\n    if (count) {\n      observers.delete(observer2);\n    } else {\n      target[$observers] = null;\n    }\n    if (target.observerRemoved) {\n      target.observerRemoved(count, observer2);\n    }\n  }\n}\nvar setHidden = (target, key, value) => Object.defineProperty(target, key, {\n  value,\n  writable: true,\n  configurable: true\n});\n\n// src/regexs.ts\nvar numberRegex = /[+\\-]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\nvar colorRegex = /(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\\((-?\\d+%?[,\\s]+){2,3}\\s*[\\d\\.]+%?\\))/gi;\nvar unitRegex = new RegExp(`(${numberRegex.source})(%|[a-z]+)`, \"i\");\nvar rgbaRegex = /rgba\\(([0-9\\.-]+), ([0-9\\.-]+), ([0-9\\.-]+), ([0-9\\.-]+)\\)/gi;\nvar cssVariableRegex = /var\\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\\)/;\n\n// src/variableToRgba.ts\nvar variableToRgba = (input) => {\n  const [token, fallback] = parseCSSVariable(input);\n  if (!token || isSSR()) {\n    return input;\n  }\n  const value = window.getComputedStyle(document.documentElement).getPropertyValue(token);\n  if (value) {\n    return value.trim();\n  } else if (fallback && fallback.startsWith(\"--\")) {\n    const value2 = window.getComputedStyle(document.documentElement).getPropertyValue(fallback);\n    if (value2) {\n      return value2;\n    } else {\n      return input;\n    }\n  } else if (fallback && cssVariableRegex.test(fallback)) {\n    return variableToRgba(fallback);\n  } else if (fallback) {\n    return fallback;\n  }\n  return input;\n};\nvar parseCSSVariable = (current) => {\n  const match = cssVariableRegex.exec(current);\n  if (!match) return [,];\n  const [, token, fallback] = match;\n  return [token, fallback];\n};\n\n// src/stringInterpolation.ts\nvar namedColorRegex;\nvar rgbaRound = (_, p1, p2, p3, p4) => `rgba(${Math.round(p1)}, ${Math.round(p2)}, ${Math.round(p3)}, ${p4})`;\nvar createStringInterpolator2 = (config) => {\n  if (!namedColorRegex)\n    namedColorRegex = colors ? (\n      // match color names, ignore partial matches\n      new RegExp(`(${Object.keys(colors).join(\"|\")})(?!\\\\w)`, \"g\")\n    ) : (\n      // never match\n      /^\\b$/\n    );\n  const output = config.output.map((value) => {\n    return getFluidValue(value).replace(cssVariableRegex, variableToRgba).replace(colorRegex, colorToRgba).replace(namedColorRegex, colorToRgba);\n  });\n  const keyframes = output.map((value) => value.match(numberRegex).map(Number));\n  const outputRanges = keyframes[0].map(\n    (_, i) => keyframes.map((values) => {\n      if (!(i in values)) {\n        throw Error('The arity of each \"output\" value must be equal');\n      }\n      return values[i];\n    })\n  );\n  const interpolators = outputRanges.map(\n    (output2) => createInterpolator({ ...config, output: output2 })\n  );\n  return (input) => {\n    const missingUnit = !unitRegex.test(output[0]) && output.find((value) => unitRegex.test(value))?.replace(numberRegex, \"\");\n    let i = 0;\n    return output[0].replace(\n      numberRegex,\n      () => `${interpolators[i++](input)}${missingUnit || \"\"}`\n    ).replace(rgbaRegex, rgbaRound);\n  };\n};\n\n// src/deprecations.ts\nvar prefix = \"react-spring: \";\nvar once = (fn) => {\n  const func = fn;\n  let called = false;\n  if (typeof func != \"function\") {\n    throw new TypeError(`${prefix}once requires a function parameter`);\n  }\n  return (...args) => {\n    if (!called) {\n      func(...args);\n      called = true;\n    }\n  };\n};\nvar warnInterpolate = once(console.warn);\nfunction deprecateInterpolate() {\n  warnInterpolate(\n    `${prefix}The \"interpolate\" function is deprecated in v9 (use \"to\" instead)`\n  );\n}\nvar warnDirectCall = once(console.warn);\nfunction deprecateDirectCall() {\n  warnDirectCall(\n    `${prefix}Directly calling start instead of using the api object is deprecated in v9 (use \".start\" instead), this will be removed in later 0.X.0 versions`\n  );\n}\n\n// src/isAnimatedString.ts\nfunction isAnimatedString(value) {\n  return is.str(value) && (value[0] == \"#\" || /\\d/.test(value) || // Do not identify a CSS variable as an AnimatedString if its SSR\n  !isSSR() && cssVariableRegex.test(value) || value in (colors || {}));\n}\n\n// src/dom-events/scroll/index.ts\nimport { raf as raf3 } from \"@react-spring/rafz\";\n\n// src/dom-events/resize/resizeElement.ts\nvar observer;\nvar resizeHandlers = /* @__PURE__ */ new WeakMap();\nvar handleObservation = (entries) => entries.forEach(({ target, contentRect }) => {\n  return resizeHandlers.get(target)?.forEach((handler) => handler(contentRect));\n});\nfunction resizeElement(handler, target) {\n  if (!observer) {\n    if (typeof ResizeObserver !== \"undefined\") {\n      observer = new ResizeObserver(handleObservation);\n    }\n  }\n  let elementHandlers = resizeHandlers.get(target);\n  if (!elementHandlers) {\n    elementHandlers = /* @__PURE__ */ new Set();\n    resizeHandlers.set(target, elementHandlers);\n  }\n  elementHandlers.add(handler);\n  if (observer) {\n    observer.observe(target);\n  }\n  return () => {\n    const elementHandlers2 = resizeHandlers.get(target);\n    if (!elementHandlers2) return;\n    elementHandlers2.delete(handler);\n    if (!elementHandlers2.size && observer) {\n      observer.unobserve(target);\n    }\n  };\n}\n\n// src/dom-events/resize/resizeWindow.ts\nvar listeners = /* @__PURE__ */ new Set();\nvar cleanupWindowResizeHandler;\nvar createResizeHandler = () => {\n  const handleResize = () => {\n    listeners.forEach(\n      (callback) => callback({\n        width: window.innerWidth,\n        height: window.innerHeight\n      })\n    );\n  };\n  window.addEventListener(\"resize\", handleResize);\n  return () => {\n    window.removeEventListener(\"resize\", handleResize);\n  };\n};\nvar resizeWindow = (callback) => {\n  listeners.add(callback);\n  if (!cleanupWindowResizeHandler) {\n    cleanupWindowResizeHandler = createResizeHandler();\n  }\n  return () => {\n    listeners.delete(callback);\n    if (!listeners.size && cleanupWindowResizeHandler) {\n      cleanupWindowResizeHandler();\n      cleanupWindowResizeHandler = void 0;\n    }\n  };\n};\n\n// src/dom-events/resize/index.ts\nvar onResize = (callback, { container = document.documentElement } = {}) => {\n  if (container === document.documentElement) {\n    return resizeWindow(callback);\n  } else {\n    return resizeElement(callback, container);\n  }\n};\n\n// src/progress.ts\nvar progress = (min, max, value) => max - min === 0 ? 1 : (value - min) / (max - min);\n\n// src/dom-events/scroll/ScrollHandler.ts\nvar SCROLL_KEYS = {\n  x: {\n    length: \"Width\",\n    position: \"Left\"\n  },\n  y: {\n    length: \"Height\",\n    position: \"Top\"\n  }\n};\nvar ScrollHandler = class {\n  constructor(callback, container) {\n    this.createAxis = () => ({\n      current: 0,\n      progress: 0,\n      scrollLength: 0\n    });\n    this.updateAxis = (axisName) => {\n      const axis = this.info[axisName];\n      const { length, position } = SCROLL_KEYS[axisName];\n      axis.current = this.container[`scroll${position}`];\n      axis.scrollLength = this.container[`scroll${length}`] - this.container[`client${length}`];\n      axis.progress = progress(0, axis.scrollLength, axis.current);\n    };\n    this.update = () => {\n      this.updateAxis(\"x\");\n      this.updateAxis(\"y\");\n    };\n    this.sendEvent = () => {\n      this.callback(this.info);\n    };\n    this.advance = () => {\n      this.update();\n      this.sendEvent();\n    };\n    this.callback = callback;\n    this.container = container;\n    this.info = {\n      time: 0,\n      x: this.createAxis(),\n      y: this.createAxis()\n    };\n  }\n};\n\n// src/dom-events/scroll/index.ts\nvar scrollListeners = /* @__PURE__ */ new WeakMap();\nvar resizeListeners = /* @__PURE__ */ new WeakMap();\nvar onScrollHandlers = /* @__PURE__ */ new WeakMap();\nvar getTarget = (container) => container === document.documentElement ? window : container;\nvar onScroll = (callback, { container = document.documentElement } = {}) => {\n  let containerHandlers = onScrollHandlers.get(container);\n  if (!containerHandlers) {\n    containerHandlers = /* @__PURE__ */ new Set();\n    onScrollHandlers.set(container, containerHandlers);\n  }\n  const containerHandler = new ScrollHandler(callback, container);\n  containerHandlers.add(containerHandler);\n  if (!scrollListeners.has(container)) {\n    const listener = () => {\n      containerHandlers?.forEach((handler) => handler.advance());\n      return true;\n    };\n    scrollListeners.set(container, listener);\n    const target = getTarget(container);\n    window.addEventListener(\"resize\", listener, { passive: true });\n    if (container !== document.documentElement) {\n      resizeListeners.set(container, onResize(listener, { container }));\n    }\n    target.addEventListener(\"scroll\", listener, { passive: true });\n  }\n  const animateScroll = scrollListeners.get(container);\n  raf3(animateScroll);\n  return () => {\n    raf3.cancel(animateScroll);\n    const containerHandlers2 = onScrollHandlers.get(container);\n    if (!containerHandlers2) return;\n    containerHandlers2.delete(containerHandler);\n    if (containerHandlers2.size) return;\n    const listener = scrollListeners.get(container);\n    scrollListeners.delete(container);\n    if (listener) {\n      getTarget(container).removeEventListener(\"scroll\", listener);\n      window.removeEventListener(\"resize\", listener);\n      resizeListeners.get(container)?.();\n    }\n  };\n};\n\n// src/hooks/useConstant.ts\nimport { useRef } from \"react\";\nfunction useConstant(init) {\n  const ref = useRef(null);\n  if (ref.current === null) {\n    ref.current = init();\n  }\n  return ref.current;\n}\n\n// src/hooks/useForceUpdate.ts\nimport { useState } from \"react\";\n\n// src/hooks/useIsMounted.ts\nimport { useRef as useRef2 } from \"react\";\n\n// src/hooks/useIsomorphicLayoutEffect.ts\nimport { useEffect, useLayoutEffect } from \"react\";\nvar useIsomorphicLayoutEffect = isSSR() ? useEffect : useLayoutEffect;\n\n// src/hooks/useIsMounted.ts\nvar useIsMounted = () => {\n  const isMounted = useRef2(false);\n  useIsomorphicLayoutEffect(() => {\n    isMounted.current = true;\n    return () => {\n      isMounted.current = false;\n    };\n  }, []);\n  return isMounted;\n};\n\n// src/hooks/useForceUpdate.ts\nfunction useForceUpdate() {\n  const update = useState()[1];\n  const isMounted = useIsMounted();\n  return () => {\n    if (isMounted.current) {\n      update(Math.random());\n    }\n  };\n}\n\n// src/hooks/useMemoOne.ts\nimport { useEffect as useEffect2, useRef as useRef3, useState as useState2 } from \"react\";\nfunction useMemoOne(getResult, inputs) {\n  const [initial] = useState2(\n    () => ({\n      inputs,\n      result: getResult()\n    })\n  );\n  const committed = useRef3(void 0);\n  const prevCache = committed.current;\n  let cache = prevCache;\n  if (cache) {\n    const useCache = Boolean(\n      inputs && cache.inputs && areInputsEqual(inputs, cache.inputs)\n    );\n    if (!useCache) {\n      cache = {\n        inputs,\n        result: getResult()\n      };\n    }\n  } else {\n    cache = initial;\n  }\n  useEffect2(() => {\n    committed.current = cache;\n    if (prevCache == initial) {\n      initial.inputs = initial.result = void 0;\n    }\n  }, [cache]);\n  return cache.result;\n}\nfunction areInputsEqual(next, prev) {\n  if (next.length !== prev.length) {\n    return false;\n  }\n  for (let i = 0; i < next.length; i++) {\n    if (next[i] !== prev[i]) {\n      return false;\n    }\n  }\n  return true;\n}\n\n// src/hooks/useOnce.ts\nimport { useEffect as useEffect3 } from \"react\";\nvar useOnce = (effect) => useEffect3(effect, emptyDeps);\nvar emptyDeps = [];\n\n// src/hooks/usePrev.ts\nimport { useEffect as useEffect4, useRef as useRef4 } from \"react\";\nfunction usePrev(value) {\n  const prevRef = useRef4(void 0);\n  useEffect4(() => {\n    prevRef.current = value;\n  });\n  return prevRef.current;\n}\n\n// src/hooks/useReducedMotion.ts\nimport { useState as useState3 } from \"react\";\nvar useReducedMotion = () => {\n  const [reducedMotion, setReducedMotion] = useState3(null);\n  useIsomorphicLayoutEffect(() => {\n    const mql = window.matchMedia(\"(prefers-reduced-motion)\");\n    const handleMediaChange = (e) => {\n      setReducedMotion(e.matches);\n      assign({\n        skipAnimation: e.matches\n      });\n    };\n    handleMediaChange(mql);\n    if (mql.addEventListener) {\n      mql.addEventListener(\"change\", handleMediaChange);\n    } else {\n      mql.addListener(handleMediaChange);\n    }\n    return () => {\n      if (mql.removeEventListener) {\n        mql.removeEventListener(\"change\", handleMediaChange);\n      } else {\n        mql.removeListener(handleMediaChange);\n      }\n    };\n  }, []);\n  return reducedMotion;\n};\n\n// src/index.ts\nimport { raf as raf4 } from \"@react-spring/rafz\";\nexport {\n  FluidValue,\n  globals_exports as Globals,\n  addFluidObserver,\n  callFluidObserver,\n  callFluidObservers,\n  clamp,\n  colorToRgba,\n  colors2 as colors,\n  createInterpolator,\n  createStringInterpolator2 as createStringInterpolator,\n  defineHidden,\n  deprecateDirectCall,\n  deprecateInterpolate,\n  each,\n  eachProp,\n  easings,\n  flush,\n  flushCalls,\n  frameLoop,\n  getFluidObservers,\n  getFluidValue,\n  hasFluidValue,\n  hex3,\n  hex4,\n  hex6,\n  hex8,\n  hsl,\n  hsla,\n  is,\n  isAnimatedString,\n  isEqual,\n  isSSR,\n  noop,\n  onResize,\n  onScroll,\n  once,\n  prefix,\n  raf4 as raf,\n  removeFluidObserver,\n  rgb,\n  rgba,\n  setFluidGetter,\n  toArray,\n  useConstant,\n  useForceUpdate,\n  useIsomorphicLayoutEffect,\n  useMemoOne,\n  useOnce,\n  usePrev,\n  useReducedMotion\n};\n","// src/Animated.ts\nimport { defineHidden } from \"@react-spring/shared\";\nvar $node = Symbol.for(\"Animated:node\");\nvar isAnimated = (value) => !!value && value[$node] === value;\nvar getAnimated = (owner) => owner && owner[$node];\nvar setAnimated = (owner, node) => defineHidden(owner, $node, node);\nvar getPayload = (owner) => owner && owner[$node] && owner[$node].getPayload();\nvar Animated = class {\n  constructor() {\n    setAnimated(this, this);\n  }\n  /** Get every `AnimatedValue` used by this node. */\n  getPayload() {\n    return this.payload || [];\n  }\n};\n\n// src/AnimatedValue.ts\nimport { is } from \"@react-spring/shared\";\nvar AnimatedValue = class _AnimatedValue extends Animated {\n  constructor(_value) {\n    super();\n    this._value = _value;\n    this.done = true;\n    this.durationProgress = 0;\n    if (is.num(this._value)) {\n      this.lastPosition = this._value;\n    }\n  }\n  /** @internal */\n  static create(value) {\n    return new _AnimatedValue(value);\n  }\n  getPayload() {\n    return [this];\n  }\n  getValue() {\n    return this._value;\n  }\n  setValue(value, step) {\n    if (is.num(value)) {\n      this.lastPosition = value;\n      if (step) {\n        value = Math.round(value / step) * step;\n        if (this.done) {\n          this.lastPosition = value;\n        }\n      }\n    }\n    if (this._value === value) {\n      return false;\n    }\n    this._value = value;\n    return true;\n  }\n  reset() {\n    const { done } = this;\n    this.done = false;\n    if (is.num(this._value)) {\n      this.elapsedTime = 0;\n      this.durationProgress = 0;\n      this.lastPosition = this._value;\n      if (done) this.lastVelocity = null;\n      this.v0 = null;\n    }\n  }\n};\n\n// src/AnimatedString.ts\nimport { is as is2, createInterpolator } from \"@react-spring/shared\";\nvar AnimatedString = class _AnimatedString extends AnimatedValue {\n  constructor(value) {\n    super(0);\n    this._string = null;\n    this._toString = createInterpolator({\n      output: [value, value]\n    });\n  }\n  /** @internal */\n  static create(value) {\n    return new _AnimatedString(value);\n  }\n  getValue() {\n    const value = this._string;\n    return value == null ? this._string = this._toString(this._value) : value;\n  }\n  setValue(value) {\n    if (is2.str(value)) {\n      if (value == this._string) {\n        return false;\n      }\n      this._string = value;\n      this._value = 1;\n    } else if (super.setValue(value)) {\n      this._string = null;\n    } else {\n      return false;\n    }\n    return true;\n  }\n  reset(goal) {\n    if (goal) {\n      this._toString = createInterpolator({\n        output: [this.getValue(), goal]\n      });\n    }\n    this._value = 0;\n    super.reset();\n  }\n};\n\n// src/AnimatedArray.ts\nimport { isAnimatedString } from \"@react-spring/shared\";\n\n// src/AnimatedObject.ts\nimport {\n  each,\n  eachProp,\n  getFluidValue,\n  hasFluidValue\n} from \"@react-spring/shared\";\n\n// src/context.ts\nvar TreeContext = { dependencies: null };\n\n// src/AnimatedObject.ts\nvar AnimatedObject = class extends Animated {\n  constructor(source) {\n    super();\n    this.source = source;\n    this.setValue(source);\n  }\n  getValue(animated) {\n    const values = {};\n    eachProp(this.source, (source, key) => {\n      if (isAnimated(source)) {\n        values[key] = source.getValue(animated);\n      } else if (hasFluidValue(source)) {\n        values[key] = getFluidValue(source);\n      } else if (!animated) {\n        values[key] = source;\n      }\n    });\n    return values;\n  }\n  /** Replace the raw object data */\n  setValue(source) {\n    this.source = source;\n    this.payload = this._makePayload(source);\n  }\n  reset() {\n    if (this.payload) {\n      each(this.payload, (node) => node.reset());\n    }\n  }\n  /** Create a payload set. */\n  _makePayload(source) {\n    if (source) {\n      const payload = /* @__PURE__ */ new Set();\n      eachProp(source, this._addToPayload, payload);\n      return Array.from(payload);\n    }\n  }\n  /** Add to a payload set. */\n  _addToPayload(source) {\n    if (TreeContext.dependencies && hasFluidValue(source)) {\n      TreeContext.dependencies.add(source);\n    }\n    const payload = getPayload(source);\n    if (payload) {\n      each(payload, (node) => this.add(node));\n    }\n  }\n};\n\n// src/AnimatedArray.ts\nvar AnimatedArray = class _AnimatedArray extends AnimatedObject {\n  constructor(source) {\n    super(source);\n  }\n  /** @internal */\n  static create(source) {\n    return new _AnimatedArray(source);\n  }\n  getValue() {\n    return this.source.map((node) => node.getValue());\n  }\n  setValue(source) {\n    const payload = this.getPayload();\n    if (source.length == payload.length) {\n      return payload.map((node, i) => node.setValue(source[i])).some(Boolean);\n    }\n    super.setValue(source.map(makeAnimated));\n    return true;\n  }\n};\nfunction makeAnimated(value) {\n  const nodeType = isAnimatedString(value) ? AnimatedString : AnimatedValue;\n  return nodeType.create(value);\n}\n\n// src/getAnimatedType.ts\nimport { is as is3, isAnimatedString as isAnimatedString2 } from \"@react-spring/shared\";\nfunction getAnimatedType(value) {\n  const parentNode = getAnimated(value);\n  return parentNode ? parentNode.constructor : is3.arr(value) ? AnimatedArray : isAnimatedString2(value) ? AnimatedString : AnimatedValue;\n}\n\n// src/createHost.ts\nimport { is as is5, eachProp as eachProp2 } from \"@react-spring/shared\";\n\n// src/withAnimated.tsx\nimport * as React from \"react\";\nimport { forwardRef, useRef, useCallback, useEffect } from \"react\";\nimport {\n  is as is4,\n  each as each2,\n  raf,\n  useForceUpdate,\n  useOnce,\n  addFluidObserver,\n  removeFluidObserver,\n  useIsomorphicLayoutEffect\n} from \"@react-spring/shared\";\nvar withAnimated = (Component, host) => {\n  const hasInstance = (\n    // Function components must use \"forwardRef\" to avoid being\n    // re-rendered on every animation frame.\n    !is4.fun(Component) || Component.prototype && Component.prototype.isReactComponent\n  );\n  return forwardRef((givenProps, givenRef) => {\n    const instanceRef = useRef(null);\n    const ref = hasInstance && // eslint-disable-next-line react-hooks/rules-of-hooks\n    useCallback(\n      (value) => {\n        instanceRef.current = updateRef(givenRef, value);\n      },\n      [givenRef]\n    );\n    const [props, deps] = getAnimatedState(givenProps, host);\n    const forceUpdate = useForceUpdate();\n    const callback = () => {\n      const instance = instanceRef.current;\n      if (hasInstance && !instance) {\n        return;\n      }\n      const didUpdate = instance ? host.applyAnimatedValues(instance, props.getValue(true)) : false;\n      if (didUpdate === false) {\n        forceUpdate();\n      }\n    };\n    const observer = new PropsObserver(callback, deps);\n    const observerRef = useRef(void 0);\n    useIsomorphicLayoutEffect(() => {\n      observerRef.current = observer;\n      each2(deps, (dep) => addFluidObserver(dep, observer));\n      return () => {\n        if (observerRef.current) {\n          each2(\n            observerRef.current.deps,\n            (dep) => removeFluidObserver(dep, observerRef.current)\n          );\n          raf.cancel(observerRef.current.update);\n        }\n      };\n    });\n    useEffect(callback, []);\n    useOnce(() => () => {\n      const observer2 = observerRef.current;\n      each2(observer2.deps, (dep) => removeFluidObserver(dep, observer2));\n    });\n    const usedProps = host.getComponentProps(props.getValue());\n    return /* @__PURE__ */ React.createElement(Component, { ...usedProps, ref });\n  });\n};\nvar PropsObserver = class {\n  constructor(update, deps) {\n    this.update = update;\n    this.deps = deps;\n  }\n  eventObserved(event) {\n    if (event.type == \"change\") {\n      raf.write(this.update);\n    }\n  }\n};\nfunction getAnimatedState(props, host) {\n  const dependencies = /* @__PURE__ */ new Set();\n  TreeContext.dependencies = dependencies;\n  if (props.style)\n    props = {\n      ...props,\n      style: host.createAnimatedStyle(props.style)\n    };\n  props = new AnimatedObject(props);\n  TreeContext.dependencies = null;\n  return [props, dependencies];\n}\nfunction updateRef(ref, value) {\n  if (ref) {\n    if (is4.fun(ref)) ref(value);\n    else ref.current = value;\n  }\n  return value;\n}\n\n// src/createHost.ts\nvar cacheKey = Symbol.for(\"AnimatedComponent\");\nvar createHost = (components, {\n  applyAnimatedValues = () => false,\n  createAnimatedStyle = (style) => new AnimatedObject(style),\n  getComponentProps = (props) => props\n} = {}) => {\n  const hostConfig = {\n    applyAnimatedValues,\n    createAnimatedStyle,\n    getComponentProps\n  };\n  const animated = (Component) => {\n    const displayName = getDisplayName(Component) || \"Anonymous\";\n    if (is5.str(Component)) {\n      Component = animated[Component] || (animated[Component] = withAnimated(Component, hostConfig));\n    } else {\n      Component = Component[cacheKey] || (Component[cacheKey] = withAnimated(Component, hostConfig));\n    }\n    Component.displayName = `Animated(${displayName})`;\n    return Component;\n  };\n  eachProp2(components, (Component, key) => {\n    if (is5.arr(components)) {\n      key = getDisplayName(Component);\n    }\n    animated[key] = animated(Component);\n  });\n  return {\n    animated\n  };\n};\nvar getDisplayName = (arg) => is5.str(arg) ? arg : arg && is5.str(arg.displayName) ? arg.displayName : is5.fun(arg) && arg.name || null;\nexport {\n  Animated,\n  AnimatedArray,\n  AnimatedObject,\n  AnimatedString,\n  AnimatedValue,\n  createHost,\n  getAnimated,\n  getAnimatedType,\n  getPayload,\n  isAnimated,\n  setAnimated\n};\n","// src/hooks/useChain.ts\nimport { each, useIsomorphicLayoutEffect } from \"@react-spring/shared\";\n\n// src/helpers.ts\nimport {\n  is,\n  toArray,\n  eachProp,\n  getFluidValue,\n  isAnimatedString,\n  Globals as G\n} from \"@react-spring/shared\";\nfunction callProp(value, ...args) {\n  return is.fun(value) ? value(...args) : value;\n}\nvar matchProp = (value, key) => value === true || !!(key && value && (is.fun(value) ? value(key) : toArray(value).includes(key)));\nvar resolveProp = (prop, key) => is.obj(prop) ? key && prop[key] : prop;\nvar getDefaultProp = (props, key) => props.default === true ? props[key] : props.default ? props.default[key] : void 0;\nvar noopTransform = (value) => value;\nvar getDefaultProps = (props, transform = noopTransform) => {\n  let keys = DEFAULT_PROPS;\n  if (props.default && props.default !== true) {\n    props = props.default;\n    keys = Object.keys(props);\n  }\n  const defaults2 = {};\n  for (const key of keys) {\n    const value = transform(props[key], key);\n    if (!is.und(value)) {\n      defaults2[key] = value;\n    }\n  }\n  return defaults2;\n};\nvar DEFAULT_PROPS = [\n  \"config\",\n  \"onProps\",\n  \"onStart\",\n  \"onChange\",\n  \"onPause\",\n  \"onResume\",\n  \"onRest\"\n];\nvar RESERVED_PROPS = {\n  config: 1,\n  from: 1,\n  to: 1,\n  ref: 1,\n  loop: 1,\n  reset: 1,\n  pause: 1,\n  cancel: 1,\n  reverse: 1,\n  immediate: 1,\n  default: 1,\n  delay: 1,\n  onProps: 1,\n  onStart: 1,\n  onChange: 1,\n  onPause: 1,\n  onResume: 1,\n  onRest: 1,\n  onResolve: 1,\n  // Transition props\n  items: 1,\n  trail: 1,\n  sort: 1,\n  expires: 1,\n  initial: 1,\n  enter: 1,\n  update: 1,\n  leave: 1,\n  children: 1,\n  onDestroyed: 1,\n  // Internal props\n  keys: 1,\n  callId: 1,\n  parentId: 1\n};\nfunction getForwardProps(props) {\n  const forward = {};\n  let count = 0;\n  eachProp(props, (value, prop) => {\n    if (!RESERVED_PROPS[prop]) {\n      forward[prop] = value;\n      count++;\n    }\n  });\n  if (count) {\n    return forward;\n  }\n}\nfunction inferTo(props) {\n  const to2 = getForwardProps(props);\n  if (to2) {\n    const out = { to: to2 };\n    eachProp(props, (val, key) => key in to2 || (out[key] = val));\n    return out;\n  }\n  return { ...props };\n}\nfunction computeGoal(value) {\n  value = getFluidValue(value);\n  return is.arr(value) ? value.map(computeGoal) : isAnimatedString(value) ? G.createStringInterpolator({\n    range: [0, 1],\n    output: [value, value]\n  })(1) : value;\n}\nfunction hasProps(props) {\n  for (const _ in props) return true;\n  return false;\n}\nfunction isAsyncTo(to2) {\n  return is.fun(to2) || is.arr(to2) && is.obj(to2[0]);\n}\nfunction detachRefs(ctrl, ref) {\n  ctrl.ref?.delete(ctrl);\n  ref?.delete(ctrl);\n}\nfunction replaceRef(ctrl, ref) {\n  if (ref && ctrl.ref !== ref) {\n    ctrl.ref?.delete(ctrl);\n    ref.add(ctrl);\n    ctrl.ref = ref;\n  }\n}\n\n// src/hooks/useChain.ts\nfunction useChain(refs, timeSteps, timeFrame = 1e3) {\n  useIsomorphicLayoutEffect(() => {\n    if (timeSteps) {\n      let prevDelay = 0;\n      each(refs, (ref, i) => {\n        const controllers = ref.current;\n        if (controllers.length) {\n          let delay = timeFrame * timeSteps[i];\n          if (isNaN(delay)) delay = prevDelay;\n          else prevDelay = delay;\n          each(controllers, (ctrl) => {\n            each(ctrl.queue, (props) => {\n              const memoizedDelayProp = props.delay;\n              props.delay = (key) => delay + callProp(memoizedDelayProp || 0, key);\n            });\n          });\n          ref.start();\n        }\n      });\n    } else {\n      let p = Promise.resolve();\n      each(refs, (ref) => {\n        const controllers = ref.current;\n        if (controllers.length) {\n          const queues = controllers.map((ctrl) => {\n            const q = ctrl.queue;\n            ctrl.queue = [];\n            return q;\n          });\n          p = p.then(() => {\n            each(\n              controllers,\n              (ctrl, i) => each(queues[i] || [], (update2) => ctrl.queue.push(update2))\n            );\n            return Promise.all(ref.start());\n          });\n        }\n      });\n    }\n  });\n}\n\n// src/hooks/useSpring.ts\nimport { is as is9 } from \"@react-spring/shared\";\n\n// src/hooks/useSprings.ts\nimport { useContext as useContext2, useMemo as useMemo2, useRef } from \"react\";\nimport {\n  is as is8,\n  each as each5,\n  usePrev,\n  useOnce,\n  useForceUpdate,\n  useIsomorphicLayoutEffect as useIsomorphicLayoutEffect2\n} from \"@react-spring/shared\";\n\n// src/SpringValue.ts\nimport {\n  is as is5,\n  raf as raf3,\n  each as each2,\n  isEqual,\n  toArray as toArray2,\n  eachProp as eachProp3,\n  frameLoop as frameLoop2,\n  flushCalls,\n  getFluidValue as getFluidValue2,\n  isAnimatedString as isAnimatedString2,\n  Globals as G5,\n  callFluidObservers as callFluidObservers2,\n  hasFluidValue,\n  addFluidObserver,\n  removeFluidObserver,\n  getFluidObservers\n} from \"@react-spring/shared\";\nimport {\n  AnimatedValue,\n  AnimatedString,\n  getPayload,\n  getAnimated as getAnimated2,\n  setAnimated,\n  getAnimatedType\n} from \"@react-spring/animated\";\n\n// src/AnimationConfig.ts\nimport { is as is2, easings } from \"@react-spring/shared\";\n\n// src/constants.ts\nvar config = {\n  default: { tension: 170, friction: 26 },\n  gentle: { tension: 120, friction: 14 },\n  wobbly: { tension: 180, friction: 12 },\n  stiff: { tension: 210, friction: 20 },\n  slow: { tension: 280, friction: 60 },\n  molasses: { tension: 280, friction: 120 }\n};\n\n// src/AnimationConfig.ts\nvar defaults = {\n  ...config.default,\n  mass: 1,\n  damping: 1,\n  easing: easings.linear,\n  clamp: false\n};\nvar AnimationConfig = class {\n  constructor() {\n    /**\n     * The initial velocity of one or more values.\n     *\n     * @default 0\n     */\n    this.velocity = 0;\n    Object.assign(this, defaults);\n  }\n};\nfunction mergeConfig(config2, newConfig, defaultConfig) {\n  if (defaultConfig) {\n    defaultConfig = { ...defaultConfig };\n    sanitizeConfig(defaultConfig, newConfig);\n    newConfig = { ...defaultConfig, ...newConfig };\n  }\n  sanitizeConfig(config2, newConfig);\n  Object.assign(config2, newConfig);\n  for (const key in defaults) {\n    if (config2[key] == null) {\n      config2[key] = defaults[key];\n    }\n  }\n  let { frequency, damping } = config2;\n  const { mass } = config2;\n  if (!is2.und(frequency)) {\n    if (frequency < 0.01) frequency = 0.01;\n    if (damping < 0) damping = 0;\n    config2.tension = Math.pow(2 * Math.PI / frequency, 2) * mass;\n    config2.friction = 4 * Math.PI * damping * mass / frequency;\n  }\n  return config2;\n}\nfunction sanitizeConfig(config2, props) {\n  if (!is2.und(props.decay)) {\n    config2.duration = void 0;\n  } else {\n    const isTensionConfig = !is2.und(props.tension) || !is2.und(props.friction);\n    if (isTensionConfig || !is2.und(props.frequency) || !is2.und(props.damping) || !is2.und(props.mass)) {\n      config2.duration = void 0;\n      config2.decay = void 0;\n    }\n    if (isTensionConfig) {\n      config2.frequency = void 0;\n    }\n  }\n}\n\n// src/Animation.ts\nvar emptyArray = [];\nvar Animation = class {\n  constructor() {\n    this.changed = false;\n    this.values = emptyArray;\n    this.toValues = null;\n    this.fromValues = emptyArray;\n    this.config = new AnimationConfig();\n    this.immediate = false;\n  }\n};\n\n// src/scheduleProps.ts\nimport { is as is3, raf, Globals as G2 } from \"@react-spring/shared\";\nfunction scheduleProps(callId, { key, props, defaultProps, state, actions }) {\n  return new Promise((resolve, reject) => {\n    let delay;\n    let timeout;\n    let cancel = matchProp(props.cancel ?? defaultProps?.cancel, key);\n    if (cancel) {\n      onStart();\n    } else {\n      if (!is3.und(props.pause)) {\n        state.paused = matchProp(props.pause, key);\n      }\n      let pause = defaultProps?.pause;\n      if (pause !== true) {\n        pause = state.paused || matchProp(pause, key);\n      }\n      delay = callProp(props.delay || 0, key);\n      if (pause) {\n        state.resumeQueue.add(onResume);\n        actions.pause();\n      } else {\n        actions.resume();\n        onResume();\n      }\n    }\n    function onPause() {\n      state.resumeQueue.add(onResume);\n      state.timeouts.delete(timeout);\n      timeout.cancel();\n      delay = timeout.time - raf.now();\n    }\n    function onResume() {\n      if (delay > 0 && !G2.skipAnimation) {\n        state.delayed = true;\n        timeout = raf.setTimeout(onStart, delay);\n        state.pauseQueue.add(onPause);\n        state.timeouts.add(timeout);\n      } else {\n        onStart();\n      }\n    }\n    function onStart() {\n      if (state.delayed) {\n        state.delayed = false;\n      }\n      state.pauseQueue.delete(onPause);\n      state.timeouts.delete(timeout);\n      if (callId <= (state.cancelId || 0)) {\n        cancel = true;\n      }\n      try {\n        actions.start({ ...props, callId, cancel }, resolve);\n      } catch (err) {\n        reject(err);\n      }\n    }\n  });\n}\n\n// src/runAsync.ts\nimport {\n  is as is4,\n  raf as raf2,\n  flush,\n  eachProp as eachProp2,\n  Globals as G3\n} from \"@react-spring/shared\";\n\n// src/AnimationResult.ts\nvar getCombinedResult = (target, results) => results.length == 1 ? results[0] : results.some((result) => result.cancelled) ? getCancelledResult(target.get()) : results.every((result) => result.noop) ? getNoopResult(target.get()) : getFinishedResult(\n  target.get(),\n  results.every((result) => result.finished)\n);\nvar getNoopResult = (value) => ({\n  value,\n  noop: true,\n  finished: true,\n  cancelled: false\n});\nvar getFinishedResult = (value, finished, cancelled = false) => ({\n  value,\n  finished,\n  cancelled\n});\nvar getCancelledResult = (value) => ({\n  value,\n  cancelled: true,\n  finished: false\n});\n\n// src/runAsync.ts\nfunction runAsync(to2, props, state, target) {\n  const { callId, parentId, onRest } = props;\n  const { asyncTo: prevTo, promise: prevPromise } = state;\n  if (!parentId && to2 === prevTo && !props.reset) {\n    return prevPromise;\n  }\n  return state.promise = (async () => {\n    state.asyncId = callId;\n    state.asyncTo = to2;\n    const defaultProps = getDefaultProps(\n      props,\n      (value, key) => (\n        // The `onRest` prop is only called when the `runAsync` promise is resolved.\n        key === \"onRest\" ? void 0 : value\n      )\n    );\n    let preventBail;\n    let bail;\n    const bailPromise = new Promise(\n      (resolve, reject) => (preventBail = resolve, bail = reject)\n    );\n    const bailIfEnded = (bailSignal) => {\n      const bailResult = (\n        // The `cancel` prop or `stop` method was used.\n        callId <= (state.cancelId || 0) && getCancelledResult(target) || // The async `to` prop was replaced.\n        callId !== state.asyncId && getFinishedResult(target, false)\n      );\n      if (bailResult) {\n        bailSignal.result = bailResult;\n        bail(bailSignal);\n        throw bailSignal;\n      }\n    };\n    const animate = (arg1, arg2) => {\n      const bailSignal = new BailSignal();\n      const skipAnimationSignal = new SkipAnimationSignal();\n      return (async () => {\n        if (G3.skipAnimation) {\n          stopAsync(state);\n          skipAnimationSignal.result = getFinishedResult(target, false);\n          bail(skipAnimationSignal);\n          throw skipAnimationSignal;\n        }\n        bailIfEnded(bailSignal);\n        const props2 = is4.obj(arg1) ? { ...arg1 } : { ...arg2, to: arg1 };\n        props2.parentId = callId;\n        eachProp2(defaultProps, (value, key) => {\n          if (is4.und(props2[key])) {\n            props2[key] = value;\n          }\n        });\n        const result2 = await target.start(props2);\n        bailIfEnded(bailSignal);\n        if (state.paused) {\n          await new Promise((resume) => {\n            state.resumeQueue.add(resume);\n          });\n        }\n        return result2;\n      })();\n    };\n    let result;\n    if (G3.skipAnimation) {\n      stopAsync(state);\n      return getFinishedResult(target, false);\n    }\n    try {\n      let animating;\n      if (is4.arr(to2)) {\n        animating = (async (queue) => {\n          for (const props2 of queue) {\n            await animate(props2);\n          }\n        })(to2);\n      } else {\n        animating = Promise.resolve(to2(animate, target.stop.bind(target)));\n      }\n      await Promise.all([animating.then(preventBail), bailPromise]);\n      result = getFinishedResult(target.get(), true, false);\n    } catch (err) {\n      if (err instanceof BailSignal) {\n        result = err.result;\n      } else if (err instanceof SkipAnimationSignal) {\n        result = err.result;\n      } else {\n        throw err;\n      }\n    } finally {\n      if (callId == state.asyncId) {\n        state.asyncId = parentId;\n        state.asyncTo = parentId ? prevTo : void 0;\n        state.promise = parentId ? prevPromise : void 0;\n      }\n    }\n    if (is4.fun(onRest)) {\n      raf2.batchedUpdates(() => {\n        onRest(result, target, target.item);\n      });\n    }\n    return result;\n  })();\n}\nfunction stopAsync(state, cancelId) {\n  flush(state.timeouts, (t) => t.cancel());\n  state.pauseQueue.clear();\n  state.resumeQueue.clear();\n  state.asyncId = state.asyncTo = state.promise = void 0;\n  if (cancelId) state.cancelId = cancelId;\n}\nvar BailSignal = class extends Error {\n  constructor() {\n    super(\n      \"An async animation has been interrupted. You see this error because you forgot to use `await` or `.catch(...)` on its returned promise.\"\n    );\n  }\n};\nvar SkipAnimationSignal = class extends Error {\n  constructor() {\n    super(\"SkipAnimationSignal\");\n  }\n};\n\n// src/FrameValue.ts\nimport {\n  deprecateInterpolate,\n  frameLoop,\n  FluidValue as FluidValue2,\n  Globals as G4,\n  callFluidObservers\n} from \"@react-spring/shared\";\nimport { getAnimated } from \"@react-spring/animated\";\nvar isFrameValue = (value) => value instanceof FrameValue;\nvar nextId = 1;\nvar FrameValue = class extends FluidValue2 {\n  constructor() {\n    super(...arguments);\n    this.id = nextId++;\n    this._priority = 0;\n  }\n  get priority() {\n    return this._priority;\n  }\n  set priority(priority) {\n    if (this._priority != priority) {\n      this._priority = priority;\n      this._onPriorityChange(priority);\n    }\n  }\n  /** Get the current value */\n  get() {\n    const node = getAnimated(this);\n    return node && node.getValue();\n  }\n  /** Create a spring that maps our value to another value */\n  to(...args) {\n    return G4.to(this, args);\n  }\n  /** @deprecated Use the `to` method instead. */\n  interpolate(...args) {\n    deprecateInterpolate();\n    return G4.to(this, args);\n  }\n  toJSON() {\n    return this.get();\n  }\n  observerAdded(count) {\n    if (count == 1) this._attach();\n  }\n  observerRemoved(count) {\n    if (count == 0) this._detach();\n  }\n  /** Called when the first child is added. */\n  _attach() {\n  }\n  /** Called when the last child is removed. */\n  _detach() {\n  }\n  /** Tell our children about our new value */\n  _onChange(value, idle = false) {\n    callFluidObservers(this, {\n      type: \"change\",\n      parent: this,\n      value,\n      idle\n    });\n  }\n  /** Tell our children about our new priority */\n  _onPriorityChange(priority) {\n    if (!this.idle) {\n      frameLoop.sort(this);\n    }\n    callFluidObservers(this, {\n      type: \"priority\",\n      parent: this,\n      priority\n    });\n  }\n};\n\n// src/SpringPhase.ts\nvar $P = Symbol.for(\"SpringPhase\");\nvar HAS_ANIMATED = 1;\nvar IS_ANIMATING = 2;\nvar IS_PAUSED = 4;\nvar hasAnimated = (target) => (target[$P] & HAS_ANIMATED) > 0;\nvar isAnimating = (target) => (target[$P] & IS_ANIMATING) > 0;\nvar isPaused = (target) => (target[$P] & IS_PAUSED) > 0;\nvar setActiveBit = (target, active) => active ? target[$P] |= IS_ANIMATING | HAS_ANIMATED : target[$P] &= ~IS_ANIMATING;\nvar setPausedBit = (target, paused) => paused ? target[$P] |= IS_PAUSED : target[$P] &= ~IS_PAUSED;\n\n// src/SpringValue.ts\nvar SpringValue = class extends FrameValue {\n  constructor(arg1, arg2) {\n    super();\n    /** The animation state */\n    this.animation = new Animation();\n    /** Some props have customizable default values */\n    this.defaultProps = {};\n    /** The state for `runAsync` calls */\n    this._state = {\n      paused: false,\n      delayed: false,\n      pauseQueue: /* @__PURE__ */ new Set(),\n      resumeQueue: /* @__PURE__ */ new Set(),\n      timeouts: /* @__PURE__ */ new Set()\n    };\n    /** The promise resolvers of pending `start` calls */\n    this._pendingCalls = /* @__PURE__ */ new Set();\n    /** The counter for tracking `scheduleProps` calls */\n    this._lastCallId = 0;\n    /** The last `scheduleProps` call that changed the `to` prop */\n    this._lastToId = 0;\n    this._memoizedDuration = 0;\n    if (!is5.und(arg1) || !is5.und(arg2)) {\n      const props = is5.obj(arg1) ? { ...arg1 } : { ...arg2, from: arg1 };\n      if (is5.und(props.default)) {\n        props.default = true;\n      }\n      this.start(props);\n    }\n  }\n  /** Equals true when not advancing on each frame. */\n  get idle() {\n    return !(isAnimating(this) || this._state.asyncTo) || isPaused(this);\n  }\n  get goal() {\n    return getFluidValue2(this.animation.to);\n  }\n  get velocity() {\n    const node = getAnimated2(this);\n    return node instanceof AnimatedValue ? node.lastVelocity || 0 : node.getPayload().map((node2) => node2.lastVelocity || 0);\n  }\n  /**\n   * When true, this value has been animated at least once.\n   */\n  get hasAnimated() {\n    return hasAnimated(this);\n  }\n  /**\n   * When true, this value has an unfinished animation,\n   * which is either active or paused.\n   */\n  get isAnimating() {\n    return isAnimating(this);\n  }\n  /**\n   * When true, all current and future animations are paused.\n   */\n  get isPaused() {\n    return isPaused(this);\n  }\n  /**\n   *\n   *\n   */\n  get isDelayed() {\n    return this._state.delayed;\n  }\n  /** Advance the current animation by a number of milliseconds */\n  advance(dt) {\n    let idle = true;\n    let changed = false;\n    const anim = this.animation;\n    let { toValues } = anim;\n    const { config: config2 } = anim;\n    const payload = getPayload(anim.to);\n    if (!payload && hasFluidValue(anim.to)) {\n      toValues = toArray2(getFluidValue2(anim.to));\n    }\n    anim.values.forEach((node2, i) => {\n      if (node2.done) return;\n      const to2 = (\n        // Animated strings always go from 0 to 1.\n        node2.constructor == AnimatedString ? 1 : payload ? payload[i].lastPosition : toValues[i]\n      );\n      let finished = anim.immediate;\n      let position = to2;\n      if (!finished) {\n        position = node2.lastPosition;\n        if (config2.tension <= 0) {\n          node2.done = true;\n          return;\n        }\n        let elapsed = node2.elapsedTime += dt;\n        const from = anim.fromValues[i];\n        const v0 = node2.v0 != null ? node2.v0 : node2.v0 = is5.arr(config2.velocity) ? config2.velocity[i] : config2.velocity;\n        let velocity;\n        const precision = config2.precision || (from == to2 ? 5e-3 : Math.min(1, Math.abs(to2 - from) * 1e-3));\n        if (!is5.und(config2.duration)) {\n          let p = 1;\n          if (config2.duration > 0) {\n            if (this._memoizedDuration !== config2.duration) {\n              this._memoizedDuration = config2.duration;\n              if (node2.durationProgress > 0) {\n                node2.elapsedTime = config2.duration * node2.durationProgress;\n                elapsed = node2.elapsedTime += dt;\n              }\n            }\n            p = (config2.progress || 0) + elapsed / this._memoizedDuration;\n            p = p > 1 ? 1 : p < 0 ? 0 : p;\n            node2.durationProgress = p;\n          }\n          position = from + config2.easing(p) * (to2 - from);\n          velocity = (position - node2.lastPosition) / dt;\n          finished = p == 1;\n        } else if (config2.decay) {\n          const decay = config2.decay === true ? 0.998 : config2.decay;\n          const e = Math.exp(-(1 - decay) * elapsed);\n          position = from + v0 / (1 - decay) * (1 - e);\n          finished = Math.abs(node2.lastPosition - position) <= precision;\n          velocity = v0 * e;\n        } else {\n          velocity = node2.lastVelocity == null ? v0 : node2.lastVelocity;\n          const restVelocity = config2.restVelocity || precision / 10;\n          const bounceFactor = config2.clamp ? 0 : config2.bounce;\n          const canBounce = !is5.und(bounceFactor);\n          const isGrowing = from == to2 ? node2.v0 > 0 : from < to2;\n          let isMoving;\n          let isBouncing = false;\n          const step = 1;\n          const numSteps = Math.ceil(dt / step);\n          for (let n = 0; n < numSteps; ++n) {\n            isMoving = Math.abs(velocity) > restVelocity;\n            if (!isMoving) {\n              finished = Math.abs(to2 - position) <= precision;\n              if (finished) {\n                break;\n              }\n            }\n            if (canBounce) {\n              isBouncing = position == to2 || position > to2 == isGrowing;\n              if (isBouncing) {\n                velocity = -velocity * bounceFactor;\n                position = to2;\n              }\n            }\n            const springForce = -config2.tension * 1e-6 * (position - to2);\n            const dampingForce = -config2.friction * 1e-3 * velocity;\n            const acceleration = (springForce + dampingForce) / config2.mass;\n            velocity = velocity + acceleration * step;\n            position = position + velocity * step;\n          }\n        }\n        node2.lastVelocity = velocity;\n        if (Number.isNaN(position)) {\n          console.warn(`Got NaN while animating:`, this);\n          finished = true;\n        }\n      }\n      if (payload && !payload[i].done) {\n        finished = false;\n      }\n      if (finished) {\n        node2.done = true;\n      } else {\n        idle = false;\n      }\n      if (node2.setValue(position, config2.round)) {\n        changed = true;\n      }\n    });\n    const node = getAnimated2(this);\n    const currVal = node.getValue();\n    if (idle) {\n      const finalVal = getFluidValue2(anim.to);\n      if ((currVal !== finalVal || changed) && !config2.decay) {\n        node.setValue(finalVal);\n        this._onChange(finalVal);\n      } else if (changed && config2.decay) {\n        this._onChange(currVal);\n      }\n      this._stop();\n    } else if (changed) {\n      this._onChange(currVal);\n    }\n  }\n  /** Set the current value, while stopping the current animation */\n  set(value) {\n    raf3.batchedUpdates(() => {\n      this._stop();\n      this._focus(value);\n      this._set(value);\n    });\n    return this;\n  }\n  /**\n   * Freeze the active animation in time, as well as any updates merged\n   * before `resume` is called.\n   */\n  pause() {\n    this._update({ pause: true });\n  }\n  /** Resume the animation if paused. */\n  resume() {\n    this._update({ pause: false });\n  }\n  /** Skip to the end of the current animation. */\n  finish() {\n    if (isAnimating(this)) {\n      const { to: to2, config: config2 } = this.animation;\n      raf3.batchedUpdates(() => {\n        this._onStart();\n        if (!config2.decay) {\n          this._set(to2, false);\n        }\n        this._stop();\n      });\n    }\n    return this;\n  }\n  /** Push props into the pending queue. */\n  update(props) {\n    const queue = this.queue || (this.queue = []);\n    queue.push(props);\n    return this;\n  }\n  start(to2, arg2) {\n    let queue;\n    if (!is5.und(to2)) {\n      queue = [is5.obj(to2) ? to2 : { ...arg2, to: to2 }];\n    } else {\n      queue = this.queue || [];\n      this.queue = [];\n    }\n    return Promise.all(\n      queue.map((props) => {\n        const up = this._update(props);\n        return up;\n      })\n    ).then((results) => getCombinedResult(this, results));\n  }\n  /**\n   * Stop the current animation, and cancel any delayed updates.\n   *\n   * Pass `true` to call `onRest` with `cancelled: true`.\n   */\n  stop(cancel) {\n    const { to: to2 } = this.animation;\n    this._focus(this.get());\n    stopAsync(this._state, cancel && this._lastCallId);\n    raf3.batchedUpdates(() => this._stop(to2, cancel));\n    return this;\n  }\n  /** Restart the animation. */\n  reset() {\n    this._update({ reset: true });\n  }\n  /** @internal */\n  eventObserved(event) {\n    if (event.type == \"change\") {\n      this._start();\n    } else if (event.type == \"priority\") {\n      this.priority = event.priority + 1;\n    }\n  }\n  /**\n   * Parse the `to` and `from` range from the given `props` object.\n   *\n   * This also ensures the initial value is available to animated components\n   * during the render phase.\n   */\n  _prepareNode(props) {\n    const key = this.key || \"\";\n    let { to: to2, from } = props;\n    to2 = is5.obj(to2) ? to2[key] : to2;\n    if (to2 == null || isAsyncTo(to2)) {\n      to2 = void 0;\n    }\n    from = is5.obj(from) ? from[key] : from;\n    if (from == null) {\n      from = void 0;\n    }\n    const range = { to: to2, from };\n    if (!hasAnimated(this)) {\n      if (props.reverse) [to2, from] = [from, to2];\n      from = getFluidValue2(from);\n      if (!is5.und(from)) {\n        this._set(from);\n      } else if (!getAnimated2(this)) {\n        this._set(to2);\n      }\n    }\n    return range;\n  }\n  /** Every update is processed by this method before merging. */\n  _update({ ...props }, isLoop) {\n    const { key, defaultProps } = this;\n    if (props.default)\n      Object.assign(\n        defaultProps,\n        getDefaultProps(\n          props,\n          (value, prop) => /^on/.test(prop) ? resolveProp(value, key) : value\n        )\n      );\n    mergeActiveFn(this, props, \"onProps\");\n    sendEvent(this, \"onProps\", props, this);\n    const range = this._prepareNode(props);\n    if (Object.isFrozen(this)) {\n      throw Error(\n        \"Cannot animate a `SpringValue` object that is frozen. Did you forget to pass your component to `animated(...)` before animating its props?\"\n      );\n    }\n    const state = this._state;\n    return scheduleProps(++this._lastCallId, {\n      key,\n      props,\n      defaultProps,\n      state,\n      actions: {\n        pause: () => {\n          if (!isPaused(this)) {\n            setPausedBit(this, true);\n            flushCalls(state.pauseQueue);\n            sendEvent(\n              this,\n              \"onPause\",\n              getFinishedResult(this, checkFinished(this, this.animation.to)),\n              this\n            );\n          }\n        },\n        resume: () => {\n          if (isPaused(this)) {\n            setPausedBit(this, false);\n            if (isAnimating(this)) {\n              this._resume();\n            }\n            flushCalls(state.resumeQueue);\n            sendEvent(\n              this,\n              \"onResume\",\n              getFinishedResult(this, checkFinished(this, this.animation.to)),\n              this\n            );\n          }\n        },\n        start: this._merge.bind(this, range)\n      }\n    }).then((result) => {\n      if (props.loop && result.finished && !(isLoop && result.noop)) {\n        const nextProps = createLoopUpdate(props);\n        if (nextProps) {\n          return this._update(nextProps, true);\n        }\n      }\n      return result;\n    });\n  }\n  /** Merge props into the current animation */\n  _merge(range, props, resolve) {\n    if (props.cancel) {\n      this.stop(true);\n      return resolve(getCancelledResult(this));\n    }\n    const hasToProp = !is5.und(range.to);\n    const hasFromProp = !is5.und(range.from);\n    if (hasToProp || hasFromProp) {\n      if (props.callId > this._lastToId) {\n        this._lastToId = props.callId;\n      } else {\n        return resolve(getCancelledResult(this));\n      }\n    }\n    const { key, defaultProps, animation: anim } = this;\n    const { to: prevTo, from: prevFrom } = anim;\n    let { to: to2 = prevTo, from = prevFrom } = range;\n    if (hasFromProp && !hasToProp && (!props.default || is5.und(to2))) {\n      to2 = from;\n    }\n    if (props.reverse) [to2, from] = [from, to2];\n    const hasFromChanged = !isEqual(from, prevFrom);\n    if (hasFromChanged) {\n      anim.from = from;\n    }\n    from = getFluidValue2(from);\n    const hasToChanged = !isEqual(to2, prevTo);\n    if (hasToChanged) {\n      this._focus(to2);\n    }\n    const hasAsyncTo = isAsyncTo(props.to);\n    const { config: config2 } = anim;\n    const { decay, velocity } = config2;\n    if (hasToProp || hasFromProp) {\n      config2.velocity = 0;\n    }\n    if (props.config && !hasAsyncTo) {\n      mergeConfig(\n        config2,\n        callProp(props.config, key),\n        // Avoid calling the same \"config\" prop twice.\n        props.config !== defaultProps.config ? callProp(defaultProps.config, key) : void 0\n      );\n    }\n    let node = getAnimated2(this);\n    if (!node || is5.und(to2)) {\n      return resolve(getFinishedResult(this, true));\n    }\n    const reset = (\n      // When `reset` is undefined, the `from` prop implies `reset: true`,\n      // except for declarative updates. When `reset` is defined, there\n      // must exist a value to animate from.\n      is5.und(props.reset) ? hasFromProp && !props.default : !is5.und(from) && matchProp(props.reset, key)\n    );\n    const value = reset ? from : this.get();\n    const goal = computeGoal(to2);\n    const isAnimatable = is5.num(goal) || is5.arr(goal) || isAnimatedString2(goal);\n    const immediate = !hasAsyncTo && (!isAnimatable || matchProp(defaultProps.immediate || props.immediate, key));\n    if (hasToChanged) {\n      const nodeType = getAnimatedType(to2);\n      if (nodeType !== node.constructor) {\n        if (immediate) {\n          node = this._set(goal);\n        } else\n          throw Error(\n            `Cannot animate between ${node.constructor.name} and ${nodeType.name}, as the \"to\" prop suggests`\n          );\n      }\n    }\n    const goalType = node.constructor;\n    let started = hasFluidValue(to2);\n    let finished = false;\n    if (!started) {\n      const hasValueChanged = reset || !hasAnimated(this) && hasFromChanged;\n      if (hasToChanged || hasValueChanged) {\n        finished = isEqual(computeGoal(value), goal);\n        started = !finished;\n      }\n      if (!isEqual(anim.immediate, immediate) && !immediate || !isEqual(config2.decay, decay) || !isEqual(config2.velocity, velocity)) {\n        started = true;\n      }\n    }\n    if (finished && isAnimating(this)) {\n      if (anim.changed && !reset) {\n        started = true;\n      } else if (!started) {\n        this._stop(prevTo);\n      }\n    }\n    if (!hasAsyncTo) {\n      if (started || hasFluidValue(prevTo)) {\n        anim.values = node.getPayload();\n        anim.toValues = hasFluidValue(to2) ? null : goalType == AnimatedString ? [1] : toArray2(goal);\n      }\n      if (anim.immediate != immediate) {\n        anim.immediate = immediate;\n        if (!immediate && !reset) {\n          this._set(prevTo);\n        }\n      }\n      if (started) {\n        const { onRest } = anim;\n        each2(ACTIVE_EVENTS, (type) => mergeActiveFn(this, props, type));\n        const result = getFinishedResult(this, checkFinished(this, prevTo));\n        flushCalls(this._pendingCalls, result);\n        this._pendingCalls.add(resolve);\n        if (anim.changed)\n          raf3.batchedUpdates(() => {\n            anim.changed = !reset;\n            onRest?.(result, this);\n            if (reset) {\n              callProp(defaultProps.onRest, result);\n            } else {\n              anim.onStart?.(result, this);\n            }\n          });\n      }\n    }\n    if (reset) {\n      this._set(value);\n    }\n    if (hasAsyncTo) {\n      resolve(runAsync(props.to, props, this._state, this));\n    } else if (started) {\n      this._start();\n    } else if (isAnimating(this) && !hasToChanged) {\n      this._pendingCalls.add(resolve);\n    } else {\n      resolve(getNoopResult(value));\n    }\n  }\n  /** Update the `animation.to` value, which might be a `FluidValue` */\n  _focus(value) {\n    const anim = this.animation;\n    if (value !== anim.to) {\n      if (getFluidObservers(this)) {\n        this._detach();\n      }\n      anim.to = value;\n      if (getFluidObservers(this)) {\n        this._attach();\n      }\n    }\n  }\n  _attach() {\n    let priority = 0;\n    const { to: to2 } = this.animation;\n    if (hasFluidValue(to2)) {\n      addFluidObserver(to2, this);\n      if (isFrameValue(to2)) {\n        priority = to2.priority + 1;\n      }\n    }\n    this.priority = priority;\n  }\n  _detach() {\n    const { to: to2 } = this.animation;\n    if (hasFluidValue(to2)) {\n      removeFluidObserver(to2, this);\n    }\n  }\n  /**\n   * Update the current value from outside the frameloop,\n   * and return the `Animated` node.\n   */\n  _set(arg, idle = true) {\n    const value = getFluidValue2(arg);\n    if (!is5.und(value)) {\n      const oldNode = getAnimated2(this);\n      if (!oldNode || !isEqual(value, oldNode.getValue())) {\n        const nodeType = getAnimatedType(value);\n        if (!oldNode || oldNode.constructor != nodeType) {\n          setAnimated(this, nodeType.create(value));\n        } else {\n          oldNode.setValue(value);\n        }\n        if (oldNode) {\n          raf3.batchedUpdates(() => {\n            this._onChange(value, idle);\n          });\n        }\n      }\n    }\n    return getAnimated2(this);\n  }\n  _onStart() {\n    const anim = this.animation;\n    if (!anim.changed) {\n      anim.changed = true;\n      sendEvent(\n        this,\n        \"onStart\",\n        getFinishedResult(this, checkFinished(this, anim.to)),\n        this\n      );\n    }\n  }\n  _onChange(value, idle) {\n    if (!idle) {\n      this._onStart();\n      callProp(this.animation.onChange, value, this);\n    }\n    callProp(this.defaultProps.onChange, value, this);\n    super._onChange(value, idle);\n  }\n  // This method resets the animation state (even if already animating) to\n  // ensure the latest from/to range is used, and it also ensures this spring\n  // is added to the frameloop.\n  _start() {\n    const anim = this.animation;\n    getAnimated2(this).reset(getFluidValue2(anim.to));\n    if (!anim.immediate) {\n      anim.fromValues = anim.values.map((node) => node.lastPosition);\n    }\n    if (!isAnimating(this)) {\n      setActiveBit(this, true);\n      if (!isPaused(this)) {\n        this._resume();\n      }\n    }\n  }\n  _resume() {\n    if (G5.skipAnimation) {\n      this.finish();\n    } else {\n      frameLoop2.start(this);\n    }\n  }\n  /**\n   * Exit the frameloop and notify `onRest` listeners.\n   *\n   * Always wrap `_stop` calls with `batchedUpdates`.\n   */\n  _stop(goal, cancel) {\n    if (isAnimating(this)) {\n      setActiveBit(this, false);\n      const anim = this.animation;\n      each2(anim.values, (node) => {\n        node.done = true;\n      });\n      if (anim.toValues) {\n        anim.onChange = anim.onPause = anim.onResume = void 0;\n      }\n      callFluidObservers2(this, {\n        type: \"idle\",\n        parent: this\n      });\n      const result = cancel ? getCancelledResult(this.get()) : getFinishedResult(this.get(), checkFinished(this, goal ?? anim.to));\n      flushCalls(this._pendingCalls, result);\n      if (anim.changed) {\n        anim.changed = false;\n        sendEvent(this, \"onRest\", result, this);\n      }\n    }\n  }\n};\nfunction checkFinished(target, to2) {\n  const goal = computeGoal(to2);\n  const value = computeGoal(target.get());\n  return isEqual(value, goal);\n}\nfunction createLoopUpdate(props, loop = props.loop, to2 = props.to) {\n  const loopRet = callProp(loop);\n  if (loopRet) {\n    const overrides = loopRet !== true && inferTo(loopRet);\n    const reverse = (overrides || props).reverse;\n    const reset = !overrides || overrides.reset;\n    return createUpdate({\n      ...props,\n      loop,\n      // Avoid updating default props when looping.\n      default: false,\n      // Never loop the `pause` prop.\n      pause: void 0,\n      // For the \"reverse\" prop to loop as expected, the \"to\" prop\n      // must be undefined. The \"reverse\" prop is ignored when the\n      // \"to\" prop is an array or function.\n      to: !reverse || isAsyncTo(to2) ? to2 : void 0,\n      // Ignore the \"from\" prop except on reset.\n      from: reset ? props.from : void 0,\n      reset,\n      // The \"loop\" prop can return a \"useSpring\" props object to\n      // override any of the original props.\n      ...overrides\n    });\n  }\n}\nfunction createUpdate(props) {\n  const { to: to2, from } = props = inferTo(props);\n  const keys = /* @__PURE__ */ new Set();\n  if (is5.obj(to2)) findDefined(to2, keys);\n  if (is5.obj(from)) findDefined(from, keys);\n  props.keys = keys.size ? Array.from(keys) : null;\n  return props;\n}\nfunction declareUpdate(props) {\n  const update2 = createUpdate(props);\n  if (is5.und(update2.default)) {\n    update2.default = getDefaultProps(update2);\n  }\n  return update2;\n}\nfunction findDefined(values, keys) {\n  eachProp3(values, (value, key) => value != null && keys.add(key));\n}\nvar ACTIVE_EVENTS = [\n  \"onStart\",\n  \"onRest\",\n  \"onChange\",\n  \"onPause\",\n  \"onResume\"\n];\nfunction mergeActiveFn(target, props, type) {\n  target.animation[type] = props[type] !== getDefaultProp(props, type) ? resolveProp(props[type], target.key) : void 0;\n}\nfunction sendEvent(target, type, ...args) {\n  target.animation[type]?.(...args);\n  target.defaultProps[type]?.(...args);\n}\n\n// src/Controller.ts\nimport {\n  is as is6,\n  raf as raf4,\n  each as each3,\n  noop,\n  flush as flush2,\n  toArray as toArray3,\n  eachProp as eachProp4,\n  flushCalls as flushCalls2,\n  addFluidObserver as addFluidObserver2\n} from \"@react-spring/shared\";\nvar BATCHED_EVENTS = [\"onStart\", \"onChange\", \"onRest\"];\nvar nextId2 = 1;\nvar Controller = class {\n  constructor(props, flush3) {\n    this.id = nextId2++;\n    /** The animated values */\n    this.springs = {};\n    /** The queue of props passed to the `update` method. */\n    this.queue = [];\n    /** The counter for tracking `scheduleProps` calls */\n    this._lastAsyncId = 0;\n    /** The values currently being animated */\n    this._active = /* @__PURE__ */ new Set();\n    /** The values that changed recently */\n    this._changed = /* @__PURE__ */ new Set();\n    /** Equals false when `onStart` listeners can be called */\n    this._started = false;\n    /** State used by the `runAsync` function */\n    this._state = {\n      paused: false,\n      pauseQueue: /* @__PURE__ */ new Set(),\n      resumeQueue: /* @__PURE__ */ new Set(),\n      timeouts: /* @__PURE__ */ new Set()\n    };\n    /** The event queues that are flushed once per frame maximum */\n    this._events = {\n      onStart: /* @__PURE__ */ new Map(),\n      onChange: /* @__PURE__ */ new Map(),\n      onRest: /* @__PURE__ */ new Map()\n    };\n    this._onFrame = this._onFrame.bind(this);\n    if (flush3) {\n      this._flush = flush3;\n    }\n    if (props) {\n      this.start({ default: true, ...props });\n    }\n  }\n  /**\n   * Equals `true` when no spring values are in the frameloop, and\n   * no async animation is currently active.\n   */\n  get idle() {\n    return !this._state.asyncTo && Object.values(this.springs).every((spring) => {\n      return spring.idle && !spring.isDelayed && !spring.isPaused;\n    });\n  }\n  get item() {\n    return this._item;\n  }\n  set item(item) {\n    this._item = item;\n  }\n  /** Get the current values of our springs */\n  get() {\n    const values = {};\n    this.each((spring, key) => values[key] = spring.get());\n    return values;\n  }\n  /** Set the current values without animating. */\n  set(values) {\n    for (const key in values) {\n      const value = values[key];\n      if (!is6.und(value)) {\n        this.springs[key].set(value);\n      }\n    }\n  }\n  /** Push an update onto the queue of each value. */\n  update(props) {\n    if (props) {\n      this.queue.push(createUpdate(props));\n    }\n    return this;\n  }\n  /**\n   * Start the queued animations for every spring, and resolve the returned\n   * promise once all queued animations have finished or been cancelled.\n   *\n   * When you pass a queue (instead of nothing), that queue is used instead of\n   * the queued animations added with the `update` method, which are left alone.\n   */\n  start(props) {\n    let { queue } = this;\n    if (props) {\n      queue = toArray3(props).map(createUpdate);\n    } else {\n      this.queue = [];\n    }\n    if (this._flush) {\n      return this._flush(this, queue);\n    }\n    prepareKeys(this, queue);\n    return flushUpdateQueue(this, queue);\n  }\n  /** @internal */\n  stop(arg, keys) {\n    if (arg !== !!arg) {\n      keys = arg;\n    }\n    if (keys) {\n      const springs = this.springs;\n      each3(toArray3(keys), (key) => springs[key].stop(!!arg));\n    } else {\n      stopAsync(this._state, this._lastAsyncId);\n      this.each((spring) => spring.stop(!!arg));\n    }\n    return this;\n  }\n  /** Freeze the active animation in time */\n  pause(keys) {\n    if (is6.und(keys)) {\n      this.start({ pause: true });\n    } else {\n      const springs = this.springs;\n      each3(toArray3(keys), (key) => springs[key].pause());\n    }\n    return this;\n  }\n  /** Resume the animation if paused. */\n  resume(keys) {\n    if (is6.und(keys)) {\n      this.start({ pause: false });\n    } else {\n      const springs = this.springs;\n      each3(toArray3(keys), (key) => springs[key].resume());\n    }\n    return this;\n  }\n  /** Call a function once per spring value */\n  each(iterator) {\n    eachProp4(this.springs, iterator);\n  }\n  /** @internal Called at the end of every animation frame */\n  _onFrame() {\n    const { onStart, onChange, onRest } = this._events;\n    const active = this._active.size > 0;\n    const changed = this._changed.size > 0;\n    if (active && !this._started || changed && !this._started) {\n      this._started = true;\n      flush2(onStart, ([onStart2, result]) => {\n        result.value = this.get();\n        onStart2(result, this, this._item);\n      });\n    }\n    const idle = !active && this._started;\n    const values = changed || idle && onRest.size ? this.get() : null;\n    if (changed && onChange.size) {\n      flush2(onChange, ([onChange2, result]) => {\n        result.value = values;\n        onChange2(result, this, this._item);\n      });\n    }\n    if (idle) {\n      this._started = false;\n      flush2(onRest, ([onRest2, result]) => {\n        result.value = values;\n        onRest2(result, this, this._item);\n      });\n    }\n  }\n  /** @internal */\n  eventObserved(event) {\n    if (event.type == \"change\") {\n      this._changed.add(event.parent);\n      if (!event.idle) {\n        this._active.add(event.parent);\n      }\n    } else if (event.type == \"idle\") {\n      this._active.delete(event.parent);\n    } else return;\n    raf4.onFrame(this._onFrame);\n  }\n};\nfunction flushUpdateQueue(ctrl, queue) {\n  return Promise.all(queue.map((props) => flushUpdate(ctrl, props))).then(\n    (results) => getCombinedResult(ctrl, results)\n  );\n}\nasync function flushUpdate(ctrl, props, isLoop) {\n  const { keys, to: to2, from, loop, onRest, onResolve } = props;\n  const defaults2 = is6.obj(props.default) && props.default;\n  if (loop) {\n    props.loop = false;\n  }\n  if (to2 === false) props.to = null;\n  if (from === false) props.from = null;\n  const asyncTo = is6.arr(to2) || is6.fun(to2) ? to2 : void 0;\n  if (asyncTo) {\n    props.to = void 0;\n    props.onRest = void 0;\n    if (defaults2) {\n      defaults2.onRest = void 0;\n    }\n  } else {\n    each3(BATCHED_EVENTS, (key) => {\n      const handler = props[key];\n      if (is6.fun(handler)) {\n        const queue = ctrl[\"_events\"][key];\n        props[key] = ({ finished, cancelled }) => {\n          const result2 = queue.get(handler);\n          if (result2) {\n            if (!finished) result2.finished = false;\n            if (cancelled) result2.cancelled = true;\n          } else {\n            queue.set(handler, {\n              value: null,\n              finished: finished || false,\n              cancelled: cancelled || false\n            });\n          }\n        };\n        if (defaults2) {\n          defaults2[key] = props[key];\n        }\n      }\n    });\n  }\n  const state = ctrl[\"_state\"];\n  if (props.pause === !state.paused) {\n    state.paused = props.pause;\n    flushCalls2(props.pause ? state.pauseQueue : state.resumeQueue);\n  } else if (state.paused) {\n    props.pause = true;\n  }\n  const promises = (keys || Object.keys(ctrl.springs)).map(\n    (key) => ctrl.springs[key].start(props)\n  );\n  const cancel = props.cancel === true || getDefaultProp(props, \"cancel\") === true;\n  if (asyncTo || cancel && state.asyncId) {\n    promises.push(\n      scheduleProps(++ctrl[\"_lastAsyncId\"], {\n        props,\n        state,\n        actions: {\n          pause: noop,\n          resume: noop,\n          start(props2, resolve) {\n            if (cancel) {\n              stopAsync(state, ctrl[\"_lastAsyncId\"]);\n              resolve(getCancelledResult(ctrl));\n            } else {\n              props2.onRest = onRest;\n              resolve(\n                runAsync(\n                  asyncTo,\n                  props2,\n                  state,\n                  ctrl\n                )\n              );\n            }\n          }\n        }\n      })\n    );\n  }\n  if (state.paused) {\n    await new Promise((resume) => {\n      state.resumeQueue.add(resume);\n    });\n  }\n  const result = getCombinedResult(ctrl, await Promise.all(promises));\n  if (loop && result.finished && !(isLoop && result.noop)) {\n    const nextProps = createLoopUpdate(props, loop, to2);\n    if (nextProps) {\n      prepareKeys(ctrl, [nextProps]);\n      return flushUpdate(ctrl, nextProps, true);\n    }\n  }\n  if (onResolve) {\n    raf4.batchedUpdates(() => onResolve(result, ctrl, ctrl.item));\n  }\n  return result;\n}\nfunction getSprings(ctrl, props) {\n  const springs = { ...ctrl.springs };\n  if (props) {\n    each3(toArray3(props), (props2) => {\n      if (is6.und(props2.keys)) {\n        props2 = createUpdate(props2);\n      }\n      if (!is6.obj(props2.to)) {\n        props2 = { ...props2, to: void 0 };\n      }\n      prepareSprings(springs, props2, (key) => {\n        return createSpring(key);\n      });\n    });\n  }\n  setSprings(ctrl, springs);\n  return springs;\n}\nfunction setSprings(ctrl, springs) {\n  eachProp4(springs, (spring, key) => {\n    if (!ctrl.springs[key]) {\n      ctrl.springs[key] = spring;\n      addFluidObserver2(spring, ctrl);\n    }\n  });\n}\nfunction createSpring(key, observer) {\n  const spring = new SpringValue();\n  spring.key = key;\n  if (observer) {\n    addFluidObserver2(spring, observer);\n  }\n  return spring;\n}\nfunction prepareSprings(springs, props, create) {\n  if (props.keys) {\n    each3(props.keys, (key) => {\n      const spring = springs[key] || (springs[key] = create(key));\n      spring[\"_prepareNode\"](props);\n    });\n  }\n}\nfunction prepareKeys(ctrl, queue) {\n  each3(queue, (props) => {\n    prepareSprings(ctrl.springs, props, (key) => {\n      return createSpring(key, ctrl);\n    });\n  });\n}\n\n// src/SpringContext.tsx\nimport * as React from \"react\";\nimport { useContext } from \"react\";\nvar SpringContext = React.createContext({\n  pause: false,\n  immediate: false\n});\n\n// src/SpringRef.ts\nimport { each as each4, is as is7, deprecateDirectCall } from \"@react-spring/shared\";\nvar SpringRef = () => {\n  const current = [];\n  const SpringRef2 = function(props) {\n    deprecateDirectCall();\n    const results = [];\n    each4(current, (ctrl, i) => {\n      if (is7.und(props)) {\n        results.push(ctrl.start());\n      } else {\n        const update2 = _getProps(props, ctrl, i);\n        if (update2) {\n          results.push(ctrl.start(update2));\n        }\n      }\n    });\n    return results;\n  };\n  SpringRef2.current = current;\n  SpringRef2.add = function(ctrl) {\n    if (!current.includes(ctrl)) {\n      current.push(ctrl);\n    }\n  };\n  SpringRef2.delete = function(ctrl) {\n    const i = current.indexOf(ctrl);\n    if (~i) current.splice(i, 1);\n  };\n  SpringRef2.pause = function() {\n    each4(current, (ctrl) => ctrl.pause(...arguments));\n    return this;\n  };\n  SpringRef2.resume = function() {\n    each4(current, (ctrl) => ctrl.resume(...arguments));\n    return this;\n  };\n  SpringRef2.set = function(values) {\n    each4(current, (ctrl, i) => {\n      const update2 = is7.fun(values) ? values(i, ctrl) : values;\n      if (update2) {\n        ctrl.set(update2);\n      }\n    });\n  };\n  SpringRef2.start = function(props) {\n    const results = [];\n    each4(current, (ctrl, i) => {\n      if (is7.und(props)) {\n        results.push(ctrl.start());\n      } else {\n        const update2 = this._getProps(props, ctrl, i);\n        if (update2) {\n          results.push(ctrl.start(update2));\n        }\n      }\n    });\n    return results;\n  };\n  SpringRef2.stop = function() {\n    each4(current, (ctrl) => ctrl.stop(...arguments));\n    return this;\n  };\n  SpringRef2.update = function(props) {\n    each4(current, (ctrl, i) => ctrl.update(this._getProps(props, ctrl, i)));\n    return this;\n  };\n  const _getProps = function(arg, ctrl, index) {\n    return is7.fun(arg) ? arg(index, ctrl) : arg;\n  };\n  SpringRef2._getProps = _getProps;\n  return SpringRef2;\n};\n\n// src/hooks/useSprings.ts\nfunction useSprings(length, props, deps) {\n  const propsFn = is8.fun(props) && props;\n  if (propsFn && !deps) deps = [];\n  const ref = useMemo2(\n    () => propsFn || arguments.length == 3 ? SpringRef() : void 0,\n    []\n  );\n  const layoutId = useRef(0);\n  const forceUpdate = useForceUpdate();\n  const state = useMemo2(\n    () => ({\n      ctrls: [],\n      queue: [],\n      flush(ctrl, updates2) {\n        const springs2 = getSprings(ctrl, updates2);\n        const canFlushSync = layoutId.current > 0 && !state.queue.length && !Object.keys(springs2).some((key) => !ctrl.springs[key]);\n        return canFlushSync ? flushUpdateQueue(ctrl, updates2) : new Promise((resolve) => {\n          setSprings(ctrl, springs2);\n          state.queue.push(() => {\n            resolve(flushUpdateQueue(ctrl, updates2));\n          });\n          forceUpdate();\n        });\n      }\n    }),\n    []\n  );\n  const ctrls = useRef([...state.ctrls]);\n  const updates = useRef([]);\n  const prevLength = usePrev(length) || 0;\n  useMemo2(() => {\n    each5(ctrls.current.slice(length, prevLength), (ctrl) => {\n      detachRefs(ctrl, ref);\n      ctrl.stop(true);\n    });\n    ctrls.current.length = length;\n    declareUpdates(prevLength, length);\n  }, [length]);\n  useMemo2(() => {\n    declareUpdates(0, Math.min(prevLength, length));\n  }, deps);\n  function declareUpdates(startIndex, endIndex) {\n    for (let i = startIndex; i < endIndex; i++) {\n      const ctrl = ctrls.current[i] || (ctrls.current[i] = new Controller(null, state.flush));\n      const update2 = propsFn ? propsFn(i, ctrl) : props[i];\n      if (update2) {\n        updates.current[i] = declareUpdate(update2);\n      }\n    }\n  }\n  const springs = ctrls.current.map(\n    (ctrl, i) => getSprings(ctrl, updates.current[i])\n  );\n  const context = useContext2(SpringContext);\n  const prevContext = usePrev(context);\n  const hasContext = context !== prevContext && hasProps(context);\n  useIsomorphicLayoutEffect2(() => {\n    layoutId.current++;\n    state.ctrls = ctrls.current;\n    const { queue } = state;\n    if (queue.length) {\n      state.queue = [];\n      each5(queue, (cb) => cb());\n    }\n    each5(ctrls.current, (ctrl, i) => {\n      ref?.add(ctrl);\n      if (hasContext) {\n        ctrl.start({ default: context });\n      }\n      const update2 = updates.current[i];\n      if (update2) {\n        replaceRef(ctrl, update2.ref);\n        if (ctrl.ref) {\n          ctrl.queue.push(update2);\n        } else {\n          ctrl.start(update2);\n        }\n      }\n    });\n  });\n  useOnce(() => () => {\n    each5(state.ctrls, (ctrl) => ctrl.stop(true));\n  });\n  const values = springs.map((x) => ({ ...x }));\n  return ref ? [values, ref] : values;\n}\n\n// src/hooks/useSpring.ts\nfunction useSpring(props, deps) {\n  const isFn = is9.fun(props);\n  const [[values], ref] = useSprings(\n    1,\n    isFn ? props : [props],\n    isFn ? deps || [] : deps\n  );\n  return isFn || arguments.length == 2 ? [values, ref] : values;\n}\n\n// src/hooks/useSpringRef.ts\nimport { useState } from \"react\";\nvar initSpringRef = () => SpringRef();\nvar useSpringRef = () => useState(initSpringRef)[0];\n\n// src/hooks/useSpringValue.ts\nimport { useConstant, useOnce as useOnce2 } from \"@react-spring/shared\";\nvar useSpringValue = (initial, props) => {\n  const springValue = useConstant(() => new SpringValue(initial, props));\n  useOnce2(() => () => {\n    springValue.stop();\n  });\n  return springValue;\n};\n\n// src/hooks/useTrail.ts\nimport { each as each6, is as is10, useIsomorphicLayoutEffect as useIsomorphicLayoutEffect3 } from \"@react-spring/shared\";\nfunction useTrail(length, propsArg, deps) {\n  const propsFn = is10.fun(propsArg) && propsArg;\n  if (propsFn && !deps) deps = [];\n  let reverse = true;\n  let passedRef = void 0;\n  const result = useSprings(\n    length,\n    (i, ctrl) => {\n      const props = propsFn ? propsFn(i, ctrl) : propsArg;\n      passedRef = props.ref;\n      reverse = reverse && props.reverse;\n      return props;\n    },\n    // Ensure the props function is called when no deps exist.\n    // This works around the 3 argument rule.\n    deps || [{}]\n  );\n  useIsomorphicLayoutEffect3(() => {\n    each6(result[1].current, (ctrl, i) => {\n      const parent = result[1].current[i + (reverse ? 1 : -1)];\n      replaceRef(ctrl, passedRef);\n      if (ctrl.ref) {\n        if (parent) {\n          ctrl.update({ to: parent.springs });\n        }\n        return;\n      }\n      if (parent) {\n        ctrl.start({ to: parent.springs });\n      } else {\n        ctrl.start();\n      }\n    });\n  }, deps);\n  if (propsFn || arguments.length == 3) {\n    const ref = passedRef ?? result[1];\n    ref[\"_getProps\"] = (propsArg2, ctrl, i) => {\n      const props = is10.fun(propsArg2) ? propsArg2(i, ctrl) : propsArg2;\n      if (props) {\n        const parent = ref.current[i + (props.reverse ? 1 : -1)];\n        if (parent) props.to = parent.springs;\n        return props;\n      }\n    };\n    return result;\n  }\n  return result[0];\n}\n\n// src/hooks/useTransition.tsx\nimport * as React2 from \"react\";\nimport { useContext as useContext3, useRef as useRef2, useMemo as useMemo3 } from \"react\";\nimport {\n  is as is11,\n  toArray as toArray4,\n  useForceUpdate as useForceUpdate2,\n  useOnce as useOnce3,\n  usePrev as usePrev2,\n  each as each7,\n  useIsomorphicLayoutEffect as useIsomorphicLayoutEffect4\n} from \"@react-spring/shared\";\nfunction useTransition(data, props, deps) {\n  const propsFn = is11.fun(props) && props;\n  const {\n    reset,\n    sort,\n    trail = 0,\n    expires = true,\n    exitBeforeEnter = false,\n    onDestroyed,\n    ref: propsRef,\n    config: propsConfig\n  } = propsFn ? propsFn() : props;\n  const ref = useMemo3(\n    () => propsFn || arguments.length == 3 ? SpringRef() : void 0,\n    []\n  );\n  const items = toArray4(data);\n  const transitions = [];\n  const usedTransitions = useRef2(null);\n  const prevTransitions = reset ? null : usedTransitions.current;\n  useIsomorphicLayoutEffect4(() => {\n    usedTransitions.current = transitions;\n  });\n  useOnce3(() => {\n    each7(transitions, (t) => {\n      ref?.add(t.ctrl);\n      t.ctrl.ref = ref;\n    });\n    return () => {\n      each7(usedTransitions.current, (t) => {\n        if (t.expired) {\n          clearTimeout(t.expirationId);\n        }\n        detachRefs(t.ctrl, ref);\n        t.ctrl.stop(true);\n      });\n    };\n  });\n  const keys = getKeys(items, propsFn ? propsFn() : props, prevTransitions);\n  const expired = reset && usedTransitions.current || [];\n  useIsomorphicLayoutEffect4(\n    () => each7(expired, ({ ctrl, item, key }) => {\n      detachRefs(ctrl, ref);\n      callProp(onDestroyed, item, key);\n    })\n  );\n  const reused = [];\n  if (prevTransitions)\n    each7(prevTransitions, (t, i) => {\n      if (t.expired) {\n        clearTimeout(t.expirationId);\n        expired.push(t);\n      } else {\n        i = reused[i] = keys.indexOf(t.key);\n        if (~i) transitions[i] = t;\n      }\n    });\n  each7(items, (item, i) => {\n    if (!transitions[i]) {\n      transitions[i] = {\n        key: keys[i],\n        item,\n        phase: \"mount\" /* MOUNT */,\n        ctrl: new Controller()\n      };\n      transitions[i].ctrl.item = item;\n    }\n  });\n  if (reused.length) {\n    let i = -1;\n    const { leave } = propsFn ? propsFn() : props;\n    each7(reused, (keyIndex, prevIndex) => {\n      const t = prevTransitions[prevIndex];\n      if (~keyIndex) {\n        i = transitions.indexOf(t);\n        transitions[i] = { ...t, item: items[keyIndex] };\n      } else if (leave) {\n        transitions.splice(++i, 0, t);\n      }\n    });\n  }\n  if (is11.fun(sort)) {\n    transitions.sort((a, b) => sort(a.item, b.item));\n  }\n  let delay = -trail;\n  const forceUpdate = useForceUpdate2();\n  const defaultProps = getDefaultProps(props);\n  const changes = /* @__PURE__ */ new Map();\n  const exitingTransitions = useRef2(/* @__PURE__ */ new Map());\n  const forceChange = useRef2(false);\n  each7(transitions, (t, i) => {\n    const key = t.key;\n    const prevPhase = t.phase;\n    const p = propsFn ? propsFn() : props;\n    let to2;\n    let phase;\n    const propsDelay = callProp(p.delay || 0, key);\n    if (prevPhase == \"mount\" /* MOUNT */) {\n      to2 = p.enter;\n      phase = \"enter\" /* ENTER */;\n    } else {\n      const isLeave = keys.indexOf(key) < 0;\n      if (prevPhase != \"leave\" /* LEAVE */) {\n        if (isLeave) {\n          to2 = p.leave;\n          phase = \"leave\" /* LEAVE */;\n        } else if (to2 = p.update) {\n          phase = \"update\" /* UPDATE */;\n        } else return;\n      } else if (!isLeave) {\n        to2 = p.enter;\n        phase = \"enter\" /* ENTER */;\n      } else return;\n    }\n    to2 = callProp(to2, t.item, i);\n    to2 = is11.obj(to2) ? inferTo(to2) : { to: to2 };\n    if (!to2.config) {\n      const config2 = propsConfig || defaultProps.config;\n      to2.config = callProp(config2, t.item, i, phase);\n    }\n    delay += trail;\n    const payload = {\n      ...defaultProps,\n      // we need to add our props.delay value you here.\n      delay: propsDelay + delay,\n      ref: propsRef,\n      immediate: p.immediate,\n      // This prevents implied resets.\n      reset: false,\n      // Merge any phase-specific props.\n      ...to2\n    };\n    if (phase == \"enter\" /* ENTER */ && is11.und(payload.from)) {\n      const p2 = propsFn ? propsFn() : props;\n      const from = is11.und(p2.initial) || prevTransitions ? p2.from : p2.initial;\n      payload.from = callProp(from, t.item, i);\n    }\n    const { onResolve } = payload;\n    payload.onResolve = (result) => {\n      callProp(onResolve, result);\n      const transitions2 = usedTransitions.current;\n      const t2 = transitions2.find((t3) => t3.key === key);\n      if (!t2) return;\n      if (result.cancelled && t2.phase != \"update\" /* UPDATE */) {\n        return;\n      }\n      if (t2.ctrl.idle) {\n        const idle = transitions2.every((t3) => t3.ctrl.idle);\n        if (t2.phase == \"leave\" /* LEAVE */) {\n          const expiry = callProp(expires, t2.item);\n          if (expiry !== false) {\n            const expiryMs = expiry === true ? 0 : expiry;\n            t2.expired = true;\n            if (!idle && expiryMs > 0) {\n              if (expiryMs <= 2147483647)\n                t2.expirationId = setTimeout(forceUpdate, expiryMs);\n              return;\n            }\n          }\n        }\n        if (idle && transitions2.some((t3) => t3.expired)) {\n          exitingTransitions.current.delete(t2);\n          if (exitBeforeEnter) {\n            forceChange.current = true;\n          }\n          forceUpdate();\n        }\n      }\n    };\n    const springs = getSprings(t.ctrl, payload);\n    if (phase === \"leave\" /* LEAVE */ && exitBeforeEnter) {\n      exitingTransitions.current.set(t, { phase, springs, payload });\n    } else {\n      changes.set(t, { phase, springs, payload });\n    }\n  });\n  const context = useContext3(SpringContext);\n  const prevContext = usePrev2(context);\n  const hasContext = context !== prevContext && hasProps(context);\n  useIsomorphicLayoutEffect4(() => {\n    if (hasContext) {\n      each7(transitions, (t) => {\n        t.ctrl.start({ default: context });\n      });\n    }\n  }, [context]);\n  each7(changes, (_, t) => {\n    if (exitingTransitions.current.size) {\n      const ind = transitions.findIndex((state) => state.key === t.key);\n      transitions.splice(ind, 1);\n    }\n  });\n  useIsomorphicLayoutEffect4(\n    () => {\n      each7(\n        exitingTransitions.current.size ? exitingTransitions.current : changes,\n        ({ phase, payload }, t) => {\n          const { ctrl } = t;\n          t.phase = phase;\n          ref?.add(ctrl);\n          if (hasContext && phase == \"enter\" /* ENTER */) {\n            ctrl.start({ default: context });\n          }\n          if (payload) {\n            replaceRef(ctrl, payload.ref);\n            if ((ctrl.ref || ref) && !forceChange.current) {\n              ctrl.update(payload);\n            } else {\n              ctrl.start(payload);\n              if (forceChange.current) {\n                forceChange.current = false;\n              }\n            }\n          }\n        }\n      );\n    },\n    reset ? void 0 : deps\n  );\n  const renderTransitions = (render) => /* @__PURE__ */ React2.createElement(React2.Fragment, null, transitions.map((t, i) => {\n    const { springs } = changes.get(t) || t.ctrl;\n    const elem = render({ ...springs }, t.item, t, i);\n    const key = is11.str(t.key) || is11.num(t.key) ? t.key : t.ctrl.id;\n    const isLegacyReact = React2.version < \"19.0.0\";\n    const props2 = elem?.props ?? {};\n    const elemRef = isLegacyReact ? elem?.ref : props2?.ref;\n    return elem && elem.type ? /* @__PURE__ */ React2.createElement(elem.type, { ...props2, key, ref: elemRef }) : elem;\n  }));\n  return ref ? [renderTransitions, ref] : renderTransitions;\n}\nvar nextKey = 1;\nfunction getKeys(items, { key, keys = key }, prevTransitions) {\n  if (keys === null) {\n    const reused = /* @__PURE__ */ new Set();\n    return items.map((item) => {\n      const t = prevTransitions && prevTransitions.find(\n        (t2) => t2.item === item && t2.phase !== \"leave\" /* LEAVE */ && !reused.has(t2)\n      );\n      if (t) {\n        reused.add(t);\n        return t.key;\n      }\n      return nextKey++;\n    });\n  }\n  return is11.und(keys) ? items : is11.fun(keys) ? items.map(keys) : toArray4(keys);\n}\n\n// src/hooks/useScroll.ts\nimport { each as each8, onScroll, useIsomorphicLayoutEffect as useIsomorphicLayoutEffect5 } from \"@react-spring/shared\";\nvar useScroll = ({\n  container,\n  ...springOptions\n} = {}) => {\n  const [scrollValues, api] = useSpring(\n    () => ({\n      scrollX: 0,\n      scrollY: 0,\n      scrollXProgress: 0,\n      scrollYProgress: 0,\n      ...springOptions\n    }),\n    []\n  );\n  useIsomorphicLayoutEffect5(() => {\n    const cleanupScroll = onScroll(\n      ({ x, y }) => {\n        api.start({\n          scrollX: x.current,\n          scrollXProgress: x.progress,\n          scrollY: y.current,\n          scrollYProgress: y.progress\n        });\n      },\n      { container: container?.current || void 0 }\n    );\n    return () => {\n      each8(Object.values(scrollValues), (value) => value.stop());\n      cleanupScroll();\n    };\n  }, []);\n  return scrollValues;\n};\n\n// src/hooks/useResize.ts\nimport { onResize, each as each9, useIsomorphicLayoutEffect as useIsomorphicLayoutEffect6 } from \"@react-spring/shared\";\nvar useResize = ({\n  container,\n  ...springOptions\n}) => {\n  const [sizeValues, api] = useSpring(\n    () => ({\n      width: 0,\n      height: 0,\n      ...springOptions\n    }),\n    []\n  );\n  useIsomorphicLayoutEffect6(() => {\n    const cleanupScroll = onResize(\n      ({ width, height }) => {\n        api.start({\n          width,\n          height,\n          immediate: sizeValues.width.get() === 0 || sizeValues.height.get() === 0 || springOptions.immediate === true\n        });\n      },\n      { container: container?.current || void 0 }\n    );\n    return () => {\n      each9(Object.values(sizeValues), (value) => value.stop());\n      cleanupScroll();\n    };\n  }, []);\n  return sizeValues;\n};\n\n// src/hooks/useInView.ts\nimport { useRef as useRef3, useState as useState2 } from \"react\";\nimport { is as is12, useIsomorphicLayoutEffect as useIsomorphicLayoutEffect7 } from \"@react-spring/shared\";\nvar defaultThresholdOptions = {\n  any: 0,\n  all: 1\n};\nfunction useInView(props, args) {\n  const [isInView, setIsInView] = useState2(false);\n  const ref = useRef3(void 0);\n  const propsFn = is12.fun(props) && props;\n  const springsProps = propsFn ? propsFn() : {};\n  const { to: to2 = {}, from = {}, ...restSpringProps } = springsProps;\n  const intersectionArguments = propsFn ? args : props;\n  const [springs, api] = useSpring(() => ({ from, ...restSpringProps }), []);\n  useIsomorphicLayoutEffect7(() => {\n    const element = ref.current;\n    const {\n      root,\n      once,\n      amount = \"any\",\n      ...restArgs\n    } = intersectionArguments ?? {};\n    if (!element || once && isInView || typeof IntersectionObserver === \"undefined\")\n      return;\n    const activeIntersections = /* @__PURE__ */ new WeakMap();\n    const onEnter = () => {\n      if (to2) {\n        api.start(to2);\n      }\n      setIsInView(true);\n      const cleanup = () => {\n        if (from) {\n          api.start(from);\n        }\n        setIsInView(false);\n      };\n      return once ? void 0 : cleanup;\n    };\n    const handleIntersection = (entries) => {\n      entries.forEach((entry) => {\n        const onLeave = activeIntersections.get(entry.target);\n        if (entry.isIntersecting === Boolean(onLeave)) {\n          return;\n        }\n        if (entry.isIntersecting) {\n          const newOnLeave = onEnter();\n          if (is12.fun(newOnLeave)) {\n            activeIntersections.set(entry.target, newOnLeave);\n          } else {\n            observer.unobserve(entry.target);\n          }\n        } else if (onLeave) {\n          onLeave();\n          activeIntersections.delete(entry.target);\n        }\n      });\n    };\n    const observer = new IntersectionObserver(handleIntersection, {\n      root: root && root.current || void 0,\n      threshold: typeof amount === \"number\" || Array.isArray(amount) ? amount : defaultThresholdOptions[amount],\n      ...restArgs\n    });\n    observer.observe(element);\n    return () => observer.unobserve(element);\n  }, [intersectionArguments]);\n  if (propsFn) {\n    return [ref, springs];\n  }\n  return [ref, isInView];\n}\n\n// src/components/Spring.tsx\nfunction Spring({ children, ...props }) {\n  return children(useSpring(props));\n}\n\n// src/components/Trail.tsx\nimport { is as is13 } from \"@react-spring/shared\";\nfunction Trail({\n  items,\n  children,\n  ...props\n}) {\n  const trails = useTrail(items.length, props);\n  return items.map((item, index) => {\n    const result = children(item, index);\n    return is13.fun(result) ? result(trails[index]) : result;\n  });\n}\n\n// src/components/Transition.tsx\nfunction Transition({\n  items,\n  children,\n  ...props\n}) {\n  return useTransition(items, props)(children);\n}\n\n// src/interpolate.ts\nimport { deprecateInterpolate as deprecateInterpolate2 } from \"@react-spring/shared\";\n\n// src/Interpolation.ts\nimport {\n  is as is14,\n  raf as raf5,\n  each as each10,\n  isEqual as isEqual2,\n  toArray as toArray5,\n  frameLoop as frameLoop3,\n  getFluidValue as getFluidValue3,\n  createInterpolator,\n  Globals as G6,\n  callFluidObservers as callFluidObservers3,\n  addFluidObserver as addFluidObserver3,\n  removeFluidObserver as removeFluidObserver2,\n  hasFluidValue as hasFluidValue2\n} from \"@react-spring/shared\";\nimport {\n  getAnimated as getAnimated3,\n  setAnimated as setAnimated2,\n  getAnimatedType as getAnimatedType2,\n  getPayload as getPayload2\n} from \"@react-spring/animated\";\nvar Interpolation = class extends FrameValue {\n  constructor(source, args) {\n    super();\n    this.source = source;\n    /** Equals false when in the frameloop */\n    this.idle = true;\n    /** The inputs which are currently animating */\n    this._active = /* @__PURE__ */ new Set();\n    this.calc = createInterpolator(...args);\n    const value = this._get();\n    const nodeType = getAnimatedType2(value);\n    setAnimated2(this, nodeType.create(value));\n  }\n  advance(_dt) {\n    const value = this._get();\n    const oldValue = this.get();\n    if (!isEqual2(value, oldValue)) {\n      getAnimated3(this).setValue(value);\n      this._onChange(value, this.idle);\n    }\n    if (!this.idle && checkIdle(this._active)) {\n      becomeIdle(this);\n    }\n  }\n  _get() {\n    const inputs = is14.arr(this.source) ? this.source.map(getFluidValue3) : toArray5(getFluidValue3(this.source));\n    return this.calc(...inputs);\n  }\n  _start() {\n    if (this.idle && !checkIdle(this._active)) {\n      this.idle = false;\n      each10(getPayload2(this), (node) => {\n        node.done = false;\n      });\n      if (G6.skipAnimation) {\n        raf5.batchedUpdates(() => this.advance());\n        becomeIdle(this);\n      } else {\n        frameLoop3.start(this);\n      }\n    }\n  }\n  // Observe our sources only when we're observed.\n  _attach() {\n    let priority = 1;\n    each10(toArray5(this.source), (source) => {\n      if (hasFluidValue2(source)) {\n        addFluidObserver3(source, this);\n      }\n      if (isFrameValue(source)) {\n        if (!source.idle) {\n          this._active.add(source);\n        }\n        priority = Math.max(priority, source.priority + 1);\n      }\n    });\n    this.priority = priority;\n    this._start();\n  }\n  // Stop observing our sources once we have no observers.\n  _detach() {\n    each10(toArray5(this.source), (source) => {\n      if (hasFluidValue2(source)) {\n        removeFluidObserver2(source, this);\n      }\n    });\n    this._active.clear();\n    becomeIdle(this);\n  }\n  /** @internal */\n  eventObserved(event) {\n    if (event.type == \"change\") {\n      if (event.idle) {\n        this.advance();\n      } else {\n        this._active.add(event.parent);\n        this._start();\n      }\n    } else if (event.type == \"idle\") {\n      this._active.delete(event.parent);\n    } else if (event.type == \"priority\") {\n      this.priority = toArray5(this.source).reduce(\n        (highest, parent) => Math.max(highest, (isFrameValue(parent) ? parent.priority : 0) + 1),\n        0\n      );\n    }\n  }\n};\nfunction isIdle(source) {\n  return source.idle !== false;\n}\nfunction checkIdle(active) {\n  return !active.size || Array.from(active).every(isIdle);\n}\nfunction becomeIdle(self) {\n  if (!self.idle) {\n    self.idle = true;\n    each10(getPayload2(self), (node) => {\n      node.done = true;\n    });\n    callFluidObservers3(self, {\n      type: \"idle\",\n      parent: self\n    });\n  }\n}\n\n// src/interpolate.ts\nvar to = (source, ...args) => new Interpolation(source, args);\nvar interpolate = (source, ...args) => (deprecateInterpolate2(), new Interpolation(source, args));\n\n// src/globals.ts\nimport {\n  Globals,\n  frameLoop as frameLoop4,\n  createStringInterpolator\n} from \"@react-spring/shared\";\nGlobals.assign({\n  createStringInterpolator,\n  to: (source, args) => new Interpolation(source, args)\n});\nvar update = frameLoop4.advance;\n\n// src/index.ts\nimport {\n  createInterpolator as createInterpolator2,\n  useIsomorphicLayoutEffect as useIsomorphicLayoutEffect8,\n  useReducedMotion,\n  easings as easings2\n} from \"@react-spring/shared\";\nexport * from \"@react-spring/types\";\nexport {\n  BailSignal,\n  Controller,\n  FrameValue,\n  Globals,\n  Interpolation,\n  Spring,\n  SpringContext,\n  SpringRef,\n  SpringValue,\n  Trail,\n  Transition,\n  config,\n  createInterpolator2 as createInterpolator,\n  easings2 as easings,\n  inferTo,\n  interpolate,\n  to,\n  update,\n  useChain,\n  useInView,\n  useIsomorphicLayoutEffect8 as useIsomorphicLayoutEffect,\n  useReducedMotion,\n  useResize,\n  useScroll,\n  useSpring,\n  useSpringRef,\n  useSpringValue,\n  useSprings,\n  useTrail,\n  useTransition\n};\n","// src/index.ts\nimport { Globals } from \"@react-spring/core\";\nimport { unstable_batchedUpdates } from \"react-dom\";\nimport { createStringInterpolator, colors } from \"@react-spring/shared\";\nimport { createHost } from \"@react-spring/animated\";\n\n// src/applyAnimatedValues.ts\nvar isCustomPropRE = /^--/;\nfunction dangerousStyleValue(name, value) {\n  if (value == null || typeof value === \"boolean\" || value === \"\") return \"\";\n  if (typeof value === \"number\" && value !== 0 && !isCustomPropRE.test(name) && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]))\n    return value + \"px\";\n  return (\"\" + value).trim();\n}\nvar attributeCache = {};\nfunction applyAnimatedValues(instance, props) {\n  if (!instance.nodeType || !instance.setAttribute) {\n    return false;\n  }\n  const isFilterElement = instance.nodeName === \"filter\" || instance.parentNode && instance.parentNode.nodeName === \"filter\";\n  const {\n    className,\n    style,\n    children,\n    scrollTop,\n    scrollLeft,\n    viewBox,\n    ...attributes\n  } = props;\n  const values = Object.values(attributes);\n  const names = Object.keys(attributes).map(\n    (name) => isFilterElement || instance.hasAttribute(name) ? name : attributeCache[name] || (attributeCache[name] = name.replace(\n      /([A-Z])/g,\n      // Attributes are written in dash case\n      (n) => \"-\" + n.toLowerCase()\n    ))\n  );\n  if (children !== void 0) {\n    instance.textContent = children;\n  }\n  for (const name in style) {\n    if (style.hasOwnProperty(name)) {\n      const value = dangerousStyleValue(name, style[name]);\n      if (isCustomPropRE.test(name)) {\n        instance.style.setProperty(name, value);\n      } else {\n        instance.style[name] = value;\n      }\n    }\n  }\n  names.forEach((name, i) => {\n    instance.setAttribute(name, values[i]);\n  });\n  if (className !== void 0) {\n    instance.className = className;\n  }\n  if (scrollTop !== void 0) {\n    instance.scrollTop = scrollTop;\n  }\n  if (scrollLeft !== void 0) {\n    instance.scrollLeft = scrollLeft;\n  }\n  if (viewBox !== void 0) {\n    instance.setAttribute(\"viewBox\", viewBox);\n  }\n}\nvar isUnitlessNumber = {\n  animationIterationCount: true,\n  borderImageOutset: true,\n  borderImageSlice: true,\n  borderImageWidth: true,\n  boxFlex: true,\n  boxFlexGroup: true,\n  boxOrdinalGroup: true,\n  columnCount: true,\n  columns: true,\n  flex: true,\n  flexGrow: true,\n  flexPositive: true,\n  flexShrink: true,\n  flexNegative: true,\n  flexOrder: true,\n  gridRow: true,\n  gridRowEnd: true,\n  gridRowSpan: true,\n  gridRowStart: true,\n  gridColumn: true,\n  gridColumnEnd: true,\n  gridColumnSpan: true,\n  gridColumnStart: true,\n  fontWeight: true,\n  lineClamp: true,\n  lineHeight: true,\n  opacity: true,\n  order: true,\n  orphans: true,\n  tabSize: true,\n  widows: true,\n  zIndex: true,\n  zoom: true,\n  // SVG-related properties\n  fillOpacity: true,\n  floodOpacity: true,\n  stopOpacity: true,\n  strokeDasharray: true,\n  strokeDashoffset: true,\n  strokeMiterlimit: true,\n  strokeOpacity: true,\n  strokeWidth: true\n};\nvar prefixKey = (prefix, key) => prefix + key.charAt(0).toUpperCase() + key.substring(1);\nvar prefixes = [\"Webkit\", \"Ms\", \"Moz\", \"O\"];\nisUnitlessNumber = Object.keys(isUnitlessNumber).reduce((acc, prop) => {\n  prefixes.forEach((prefix) => acc[prefixKey(prefix, prop)] = acc[prop]);\n  return acc;\n}, isUnitlessNumber);\n\n// src/AnimatedStyle.ts\nimport { AnimatedObject } from \"@react-spring/animated\";\nimport {\n  is,\n  each,\n  toArray,\n  eachProp,\n  FluidValue,\n  getFluidValue,\n  callFluidObservers,\n  hasFluidValue,\n  addFluidObserver,\n  removeFluidObserver\n} from \"@react-spring/shared\";\nvar domTransforms = /^(matrix|translate|scale|rotate|skew)/;\nvar pxTransforms = /^(translate)/;\nvar degTransforms = /^(rotate|skew)/;\nvar addUnit = (value, unit) => is.num(value) && value !== 0 ? value + unit : value;\nvar isValueIdentity = (value, id) => is.arr(value) ? value.every((v) => isValueIdentity(v, id)) : is.num(value) ? value === id : parseFloat(value) === id;\nvar AnimatedStyle = class extends AnimatedObject {\n  constructor({ x, y, z, ...style }) {\n    const inputs = [];\n    const transforms = [];\n    if (x || y || z) {\n      inputs.push([x || 0, y || 0, z || 0]);\n      transforms.push((xyz) => [\n        `translate3d(${xyz.map((v) => addUnit(v, \"px\")).join(\",\")})`,\n        // prettier-ignore\n        isValueIdentity(xyz, 0)\n      ]);\n    }\n    eachProp(style, (value, key) => {\n      if (key === \"transform\") {\n        inputs.push([value || \"\"]);\n        transforms.push((transform) => [transform, transform === \"\"]);\n      } else if (domTransforms.test(key)) {\n        delete style[key];\n        if (is.und(value)) return;\n        const unit = pxTransforms.test(key) ? \"px\" : degTransforms.test(key) ? \"deg\" : \"\";\n        inputs.push(toArray(value));\n        transforms.push(\n          key === \"rotate3d\" ? ([x2, y2, z2, deg]) => [\n            `rotate3d(${x2},${y2},${z2},${addUnit(deg, unit)})`,\n            isValueIdentity(deg, 0)\n          ] : (input) => [\n            `${key}(${input.map((v) => addUnit(v, unit)).join(\",\")})`,\n            isValueIdentity(input, key.startsWith(\"scale\") ? 1 : 0)\n          ]\n        );\n      }\n    });\n    if (inputs.length) {\n      style.transform = new FluidTransform(inputs, transforms);\n    }\n    super(style);\n  }\n};\nvar FluidTransform = class extends FluidValue {\n  constructor(inputs, transforms) {\n    super();\n    this.inputs = inputs;\n    this.transforms = transforms;\n    this._value = null;\n  }\n  get() {\n    return this._value || (this._value = this._get());\n  }\n  _get() {\n    let transform = \"\";\n    let identity = true;\n    each(this.inputs, (input, i) => {\n      const arg1 = getFluidValue(input[0]);\n      const [t, id] = this.transforms[i](\n        is.arr(arg1) ? arg1 : input.map(getFluidValue)\n      );\n      transform += \" \" + t;\n      identity = identity && id;\n    });\n    return identity ? \"none\" : transform;\n  }\n  // Start observing our inputs once we have an observer.\n  observerAdded(count) {\n    if (count == 1)\n      each(\n        this.inputs,\n        (input) => each(\n          input,\n          (value) => hasFluidValue(value) && addFluidObserver(value, this)\n        )\n      );\n  }\n  // Stop observing our inputs once we have no observers.\n  observerRemoved(count) {\n    if (count == 0)\n      each(\n        this.inputs,\n        (input) => each(\n          input,\n          (value) => hasFluidValue(value) && removeFluidObserver(value, this)\n        )\n      );\n  }\n  eventObserved(event) {\n    if (event.type == \"change\") {\n      this._value = null;\n    }\n    callFluidObservers(this, event);\n  }\n};\n\n// src/primitives.ts\nvar primitives = [\n  \"a\",\n  \"abbr\",\n  \"address\",\n  \"area\",\n  \"article\",\n  \"aside\",\n  \"audio\",\n  \"b\",\n  \"base\",\n  \"bdi\",\n  \"bdo\",\n  \"big\",\n  \"blockquote\",\n  \"body\",\n  \"br\",\n  \"button\",\n  \"canvas\",\n  \"caption\",\n  \"cite\",\n  \"code\",\n  \"col\",\n  \"colgroup\",\n  \"data\",\n  \"datalist\",\n  \"dd\",\n  \"del\",\n  \"details\",\n  \"dfn\",\n  \"dialog\",\n  \"div\",\n  \"dl\",\n  \"dt\",\n  \"em\",\n  \"embed\",\n  \"fieldset\",\n  \"figcaption\",\n  \"figure\",\n  \"footer\",\n  \"form\",\n  \"h1\",\n  \"h2\",\n  \"h3\",\n  \"h4\",\n  \"h5\",\n  \"h6\",\n  \"head\",\n  \"header\",\n  \"hgroup\",\n  \"hr\",\n  \"html\",\n  \"i\",\n  \"iframe\",\n  \"img\",\n  \"input\",\n  \"ins\",\n  \"kbd\",\n  \"keygen\",\n  \"label\",\n  \"legend\",\n  \"li\",\n  \"link\",\n  \"main\",\n  \"map\",\n  \"mark\",\n  \"menu\",\n  \"menuitem\",\n  \"meta\",\n  \"meter\",\n  \"nav\",\n  \"noscript\",\n  \"object\",\n  \"ol\",\n  \"optgroup\",\n  \"option\",\n  \"output\",\n  \"p\",\n  \"param\",\n  \"picture\",\n  \"pre\",\n  \"progress\",\n  \"q\",\n  \"rp\",\n  \"rt\",\n  \"ruby\",\n  \"s\",\n  \"samp\",\n  \"script\",\n  \"section\",\n  \"select\",\n  \"small\",\n  \"source\",\n  \"span\",\n  \"strong\",\n  \"style\",\n  \"sub\",\n  \"summary\",\n  \"sup\",\n  \"table\",\n  \"tbody\",\n  \"td\",\n  \"textarea\",\n  \"tfoot\",\n  \"th\",\n  \"thead\",\n  \"time\",\n  \"title\",\n  \"tr\",\n  \"track\",\n  \"u\",\n  \"ul\",\n  \"var\",\n  \"video\",\n  \"wbr\",\n  // SVG\n  \"circle\",\n  \"clipPath\",\n  \"defs\",\n  \"ellipse\",\n  \"foreignObject\",\n  \"g\",\n  \"image\",\n  \"line\",\n  \"linearGradient\",\n  \"mask\",\n  \"path\",\n  \"pattern\",\n  \"polygon\",\n  \"polyline\",\n  \"radialGradient\",\n  \"rect\",\n  \"stop\",\n  \"svg\",\n  \"text\",\n  \"tspan\"\n];\n\n// src/index.ts\nexport * from \"@react-spring/core\";\nGlobals.assign({\n  batchedUpdates: unstable_batchedUpdates,\n  createStringInterpolator,\n  colors\n});\nvar host = createHost(primitives, {\n  applyAnimatedValues,\n  createAnimatedStyle: (style) => new AnimatedStyle(style),\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  getComponentProps: ({ scrollTop, scrollLeft, ...props }) => props\n});\nvar animated = host.animated;\nexport {\n  animated as a,\n  animated\n};\n","import React from \"react\"\nimport { useTransition, animated, SpringValue, config } from \"@react-spring/web\"\nimport { usePrefersReducedMotion } from \"@ourworldindata/components\"\n\ninterface AnimatedRowsProps<T> {\n    items: readonly T[]\n    keyAccessor: (item: T) => string\n    getY: (item: T) => number\n    renderRow: (item: T) => React.ReactElement\n    immediate?: boolean\n}\n\ninterface AnimatedStyle {\n    y: SpringValue<number>\n}\n\nexport function AnimatedRows<T>({\n    items,\n    keyAccessor,\n    getY,\n    renderRow,\n    immediate,\n}: AnimatedRowsProps<T>): React.ReactElement {\n    const prefersReducedMotion = usePrefersReducedMotion()\n\n    const transitions = useTransition<T, { y: number }>(items, {\n        keys: keyAccessor,\n        from: (item: T) => ({ y: getY(item) }),\n        enter: (item: T) => ({ y: getY(item) }),\n        update: (item: T) => ({ y: getY(item) }),\n        config: config.default,\n        immediate: immediate || prefersReducedMotion,\n    })\n\n    return (\n        <>\n            {transitions((style: AnimatedStyle, item: T) => (\n                <animated.g\n                    key={keyAccessor(item)}\n                    transform={style.y.to((y: number) => `translate(0, ${y})`)}\n                >\n                    {renderRow(item)}\n                </animated.g>\n            ))}\n        </>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport {\n    AxisAlign,\n    Bounds,\n    HorizontalAlign,\n    Time,\n    dyFromAlign,\n    exposeInstanceOnWindow,\n    makeFigmaId,\n    roundForSvg,\n} from \"@ourworldindata/utils\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { TextWrapSvg } from \"@ourworldindata/components\"\nimport { ScaleType, VerticalAlign } from \"@ourworldindata/types\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    FontSettings,\n} from \"../core/GrapherConstants\"\nimport { NoDataMessage } from \"../noDataMessage/NoDataMessage\"\nimport { HorizontalAxisZeroLine } from \"../axis/AxisViews\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { roundFontSize, scaleFontSize } from \"../chart/ChartUtils\"\nimport {\n    BAR_SPACING_FACTOR,\n    DISCRETE_BAR_STYLE,\n    DiscreteBarChartManager,\n    DiscreteBarSeries,\n    PlacedDiscreteBarSeries,\n    RenderDiscreteBarSeries,\n    SizedDiscreteBarSeries,\n} from \"./DiscreteBarChartConstants\"\nimport { CategoricalBin, ColorScaleBin } from \"../color/ColorScaleBin\"\nimport { HorizontalNumericColorLegend } from \"../legend/HorizontalNumericColorLegend\"\nimport { HorizontalNumericColorLegendState } from \"../legend/HorizontalNumericColorLegendState\"\nimport { ExternalColorLegendData } from \"../legend/HorizontalColorLegendTypes\"\nimport { DiscreteBarChartState } from \"./DiscreteBarChartState\"\nimport { ChartComponentProps } from \"../chart/ChartTypeMap.js\"\nimport { makeProjectedDataPatternId } from \"./DiscreteBarChartHelpers\"\nimport {\n    enrichSeriesWithLabels,\n    computeCenteredLabelYPositions,\n} from \"../rowSeriesLabels/RowSeriesLabelHelpers.js\"\nimport { SeriesLabel } from \"../seriesLabel/SeriesLabel.js\"\nimport { OwidTable } from \"@ourworldindata/core-table\"\nimport { HorizontalAxis } from \"../axis/Axis\"\nimport { GRAPHER_DARK_TEXT } from \"../color/ColorConstants\"\nimport { NUMERIC_LEGEND_STYLE } from \"../lineCharts/LineChartConstants\"\nimport { resolveEmphasis } from \"../interaction/Emphasis.js\"\nimport { AnimatedRows } from \"../animation/AnimatedRows.js\"\n\nconst DEFAULT_PROJECTED_DATA_COLOR_IN_LEGEND = \"#787878\"\n\n/** The gap between the entity label and the bar */\nconst GAP__ENTITY_LABEL__BAR = 5\n\n/** The gap between the the entity label and negative value label */\nconst GAP__ENTITY_LABEL__VALUE_LABEL = 10\n\nexport interface Label {\n    valueString: string\n    timeString: string\n    width: number\n}\n\nexport type DiscreteBarChartProps = ChartComponentProps<DiscreteBarChartState>\n\n@observer\nexport class DiscreteBarChart\n    extends React.Component<DiscreteBarChartProps>\n    implements ChartInterface, AxisManager\n{\n    base = React.createRef<SVGGElement>()\n\n    constructor(props: DiscreteBarChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get chartState(): DiscreteBarChartState {\n        return this.props.chartState\n    }\n\n    @computed private get manager(): DiscreteBarChartManager {\n        return this.chartState.manager\n    }\n\n    @computed private get bounds(): Bounds {\n        return (this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS).padRight(10)\n    }\n\n    @computed private get targetTime(): Time | undefined {\n        return this.manager.endTime\n    }\n\n    @computed private get legendPadding(): number {\n        return 0.5 * this.legendHeight\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get barCount(): number {\n        return this.series.length\n    }\n\n    @computed private get availableHeightPerSeries(): number {\n        return this.bounds.height / this.barCount\n    }\n\n    @computed private get labelFontSize(): number {\n        return roundFontSize(\n            Math.min(\n                scaleFontSize(12, this.fontSize),\n                1.1 * this.availableHeightPerSeries\n            )\n        )\n    }\n\n    @computed private get entityLabelStyle(): FontSettings {\n        return { fontSize: this.labelFontSize, fontWeight: 700, lineHeight: 1 }\n    }\n\n    @computed get sizedSeries(): SizedDiscreteBarSeries[] {\n        return enrichSeriesWithLabels({\n            series: this.series,\n            availableHeightPerSeries: this.availableHeightPerSeries,\n            minLabelWidth: 0.3 * this.bounds.width,\n            maxLabelWidth: 0.66 * this.bounds.width,\n            fontSettings: this.entityLabelStyle,\n            showRegionTooltip: !this.manager.isStatic,\n        })\n    }\n\n    @computed private get valueLabelStyle(): FontSettings {\n        return { fontSize: this.labelFontSize, fontWeight: 400, lineHeight: 1 }\n    }\n\n    @computed private get hasPositive(): boolean {\n        return this.series.some((d) => d.value >= 0)\n    }\n\n    @computed private get hasNegative(): boolean {\n        return this.series.some((d) => d.value < 0)\n    }\n\n    // The amount of space we need to allocate for bar end labels on the right\n    @computed private get rightValueLabelsWidth(): number {\n        if (!this.hasPositive) return 0\n\n        const labelsWidths = this.series\n            .filter((series) => series.value >= 0)\n            .map((series) => this.formatValue(series).width)\n\n        return _.max(labelsWidths) ?? 0\n    }\n\n    @computed private get x0(): number {\n        return 0\n    }\n\n    // Now we can work out the main x axis scale\n    @computed private get xDomainDefault(): [number, number] {\n        const allValues = this.series.map((d) => d.value)\n        return [\n            Math.min(this.x0, _.min(allValues) as number),\n            Math.max(this.x0, _.max(allValues) as number),\n        ]\n    }\n\n    @computed private get xRange(): [number, number] {\n        return this.innerBounds.xRange()\n    }\n\n    // NB: y-axis settings are used for the horizontal axis in DiscreteBarChart\n    @computed private get yAxisConfig(): AxisConfig {\n        return new AxisConfig(\n            {\n                // If we have a single-value x axis, we want to have the vertical axis\n                // on the left of the chart\n                singleValueAxisPointAlign: AxisAlign.start,\n                ...this.manager.yAxisConfig,\n                // The author-configured minimum is usually intended for the\n                // line chart. Since the bar chart doesn't draw an axis, a min\n                // below the data would only insert empty space to the left of\n                // the zero line, so we ignore it\n                min: undefined,\n            },\n            this\n        )\n    }\n\n    @computed get yAxis(): HorizontalAxis {\n        // NB: We use the user's YAxis options here to make the XAxis\n        const axis = this.yAxisConfig.toHorizontalAxis()\n        axis.updateDomainPreservingUserSettings(this.xDomainDefault)\n\n        axis.scaleType = ScaleType.linear\n        axis.formatColumn = this.chartState.formatColumn\n        axis.range = this.xRange\n        axis.label = \"\"\n        return axis\n    }\n\n    /**\n     * The maximum width needed for labels positioned on the left side of the chart.\n     *\n     * For positive values, returns the width of entity labels and annotations.\n     * For negative values, returns the entity label width, annotation width, value label width\n     * and the padding between them.\n     */\n    @computed private get leftLabelsWidth(): number {\n        const labelWidths = this.sizedSeries.map((series) => {\n            const textWidth = Math.max(\n                series.label?.width ?? 0,\n                series.annotationTextWrap?.width ?? 0\n            )\n            if (series.value < 0) {\n                const valueWidth = this.formatValue(series).width\n                return textWidth + valueWidth + GAP__ENTITY_LABEL__VALUE_LABEL\n            }\n            return textWidth\n        })\n        return _.max(labelWidths) ?? 0\n    }\n\n    @computed private get innerBounds(): Bounds {\n        return this.bounds\n            .padTop(\n                this.showColorLegend\n                    ? this.legendHeight + this.legendPadding\n                    : 0\n            )\n            .padLeft(this.leftLabelsWidth)\n            .padRight(this.rightValueLabelsWidth)\n    }\n\n    /** The total height of the series, i.e. the height of the bar + the white space around it */\n    @computed private get seriesHeight(): number {\n        return this.innerBounds.height / this.barCount\n    }\n\n    @computed private get barSpacing(): number {\n        return this.seriesHeight * BAR_SPACING_FACTOR\n    }\n\n    @computed private get barHeight(): number {\n        const totalWhiteSpace = this.barCount * this.barSpacing\n        return (this.innerBounds.height - totalWhiteSpace) / this.barCount\n    }\n\n    @computed private get placedSeries(): PlacedDiscreteBarSeries[] {\n        const yOffset =\n            this.innerBounds.top + this.barHeight / 2 + this.barSpacing / 2\n        return this.sizedSeries.map((series, index) => {\n            const barY = yOffset + index * (this.barHeight + this.barSpacing)\n            const isNegative = series.value < 0\n            const barX = isNegative\n                ? this.yAxis.place(series.value)\n                : this.yAxis.place(this.x0)\n            const barWidth = isNegative\n                ? this.yAxis.place(this.x0) - barX\n                : this.yAxis.place(series.value) - barX\n            const label = this.formatValue(series)\n\n            const entityLabelX = isNegative\n                ? barX - label.width - GAP__ENTITY_LABEL__VALUE_LABEL\n                : barX - GAP__ENTITY_LABEL__BAR\n            const valueLabelX =\n                this.yAxis.place(series.value) +\n                (isNegative ? -GAP__ENTITY_LABEL__BAR : GAP__ENTITY_LABEL__BAR)\n\n            const { labelY: entityLabelY, annotationY } =\n                computeCenteredLabelYPositions({\n                    y: barY,\n                    label: series.label,\n                    annotation: series.annotationTextWrap,\n                })\n\n            return {\n                ...series,\n                barX,\n                barY,\n                barWidth,\n                entityLabelX,\n                entityLabelY,\n                annotationY,\n                valueLabelX,\n            }\n        })\n    }\n\n    @computed private get renderSeries(): RenderDiscreteBarSeries[] {\n        return this.placedSeries.map((series) => {\n            const emphasis = resolveEmphasis({ focus: series.focus })\n            return { ...series, emphasis }\n        })\n    }\n\n    override componentDidMount(): void {\n        exposeInstanceOnWindow(this)\n    }\n\n    formatValue(series: DiscreteBarSeries): Label {\n        const { yColumn } = series\n\n        const showYearLabels =\n            this.manager.showYearLabels || series.time !== this.targetTime\n        const valueString = yColumn.formatValueShort(series.value)\n        let timeString = \"\"\n        if (showYearLabels) {\n            const { timeColumn } = this.chartState.transformedTable\n            const preposition = OwidTable.getPreposition(timeColumn)\n            timeString = ` ${preposition} ${timeColumn.formatTime(series.time)}`\n        }\n\n        const labelBounds = Bounds.forText(\n            valueString + timeString,\n            this.valueLabelStyle\n        )\n\n        return {\n            valueString,\n            timeString,\n            width: labelBounds.width,\n        }\n    }\n\n    private renderBar(\n        series: RenderDiscreteBarSeries,\n        y = 0\n    ): React.ReactElement {\n        const barOpacity = DISCRETE_BAR_STYLE[series.emphasis].barOpacity\n        const barLeft = roundForSvg(series.barX)\n        const barTop = roundForSvg(y - this.barHeight / 2)\n        const geometry = {\n            x: 0,\n            y: 0,\n            transform: `translate(${barLeft}, ${barTop})`,\n            width: roundForSvg(series.barWidth),\n            height: roundForSvg(this.barHeight),\n        }\n        const style = { transition: \"height 200ms ease\" }\n\n        if (!series.isProjection)\n            return (\n                <rect\n                    key={`bar-${series.seriesName}`}\n                    id={makeFigmaId(series.seriesName)}\n                    {...geometry}\n                    fill={series.color}\n                    opacity={barOpacity}\n                    style={style}\n                />\n            )\n\n        return (\n            <g key={`bar-${series.seriesName}`} opacity={barOpacity}>\n                <rect\n                    id={makeFigmaId(series.seriesName)}\n                    {...geometry}\n                    fill={series.color}\n                    style={style}\n                />\n                <rect\n                    id={makeFigmaId(\n                        series.seriesName,\n                        \"projected-data-pattern\"\n                    )}\n                    {...geometry}\n                    fill={`url(#${makeProjectedDataPatternId(this.manager.patternIdSuffix)})`}\n                    pointerEvents=\"none\"\n                    style={style}\n                />\n            </g>\n        )\n    }\n\n    private renderEntityLabel(\n        series: RenderDiscreteBarSeries,\n        y = 0\n    ): React.ReactElement | null {\n        if (!series.label) return null\n\n        return (\n            <SeriesLabel\n                state={series.label}\n                x={series.entityLabelX}\n                y={y + series.entityLabelY - series.barY}\n                opacity={DISCRETE_BAR_STYLE[series.emphasis].labelOpacity}\n            />\n        )\n    }\n\n    private renderEntityAnnotation(\n        series: RenderDiscreteBarSeries,\n        y = 0\n    ): React.ReactElement | null {\n        if (!series.annotationTextWrap || series.annotationY === undefined) {\n            return null\n        }\n\n        return (\n            <g key={`annotation-${series.seriesName}`}>\n                <TextWrapSvg\n                    textWrap={series.annotationTextWrap}\n                    x={series.entityLabelX}\n                    y={y + series.annotationY - series.barY}\n                    fill=\"#333\"\n                    textAnchor=\"end\"\n                    opacity={DISCRETE_BAR_STYLE[series.emphasis].labelOpacity}\n                />\n            </g>\n        )\n    }\n\n    private renderValueLabel(\n        series: RenderDiscreteBarSeries,\n        y = 0\n    ): React.ReactElement {\n        const label = this.formatValue(series)\n        return (\n            <text\n                key={`value-label-${series.seriesName}`}\n                x={0}\n                y={0}\n                transform={`translate(${roundForSvg(series.valueLabelX)}, ${roundForSvg(\n                    y\n                )})`}\n                fill={GRAPHER_DARK_TEXT}\n                dy={dyFromAlign(VerticalAlign.middle)}\n                textAnchor={series.value < 0 ? \"end\" : \"start\"}\n                opacity={DISCRETE_BAR_STYLE[series.emphasis].labelOpacity}\n                fontSize={this.valueLabelStyle.fontSize}\n                fontWeight={this.valueLabelStyle.fontWeight}\n            >\n                {label.valueString}\n                <tspan fill=\"#999\">{label.timeString}</tspan>\n            </text>\n        )\n    }\n\n    private renderBars(): React.ReactElement {\n        return (\n            <g id={makeFigmaId(\"bars\")}>\n                {this.renderSeries.map((series) =>\n                    this.renderBar(series, series.barY)\n                )}\n            </g>\n        )\n    }\n\n    private renderEntityLabels(): React.ReactElement {\n        return (\n            <g id={makeFigmaId(\"entity-labels\")}>\n                {this.renderSeries.map((series) => (\n                    <React.Fragment key={`entity-label-${series.seriesName}`}>\n                        {this.renderEntityLabel(series, series.barY)}\n                    </React.Fragment>\n                ))}\n            </g>\n        )\n    }\n\n    private renderEntityAnnotations(): React.ReactElement | null {\n        const hasAnnotations = this.renderSeries.some(\n            (series) =>\n                series.annotationTextWrap && series.annotationY !== undefined\n        )\n\n        if (!hasAnnotations) return null\n\n        return (\n            <g id={makeFigmaId(\"entity-annotations\")}>\n                {this.renderSeries.map((series) =>\n                    this.renderEntityAnnotation(series, series.barY)\n                )}\n            </g>\n        )\n    }\n\n    private renderValueLabels(): React.ReactElement {\n        return (\n            <g id={makeFigmaId(\"value-labels\")}>\n                {this.renderSeries.map((series) =>\n                    this.renderValueLabel(series, series.barY)\n                )}\n            </g>\n        )\n    }\n\n    private renderDefs(): React.ReactElement | null {\n        if (!this.series.some((series) => series.isProjection)) return null\n\n        return (\n            <defs>\n                <StripedProjectedDataPattern\n                    patternId={makeProjectedDataPatternId(\n                        this.manager.patternIdSuffix\n                    )}\n                />\n            </defs>\n        )\n    }\n\n    private renderRow(series: RenderDiscreteBarSeries): React.ReactElement {\n        return (\n            <g key={series.seriesName}>\n                {this.renderBar(series)}\n                {this.renderEntityLabel(series)}\n                {this.renderEntityAnnotation(series)}\n                {this.renderValueLabel(series)}\n            </g>\n        )\n    }\n\n    private renderAnimatedBars(): React.ReactElement {\n        return (\n            <AnimatedRows\n                items={this.renderSeries}\n                keyAccessor={(d) => d.seriesName}\n                getY={(d) => d.barY}\n                renderRow={(series) => this.renderRow(series)}\n                immediate={this.manager.disableChartRowAnimation}\n            />\n        )\n    }\n\n    private renderLegend(): React.ReactElement | null {\n        if (!this.showColorLegend || !this.numericLegendState) return null\n\n        return (\n            <HorizontalNumericColorLegend\n                state={this.numericLegendState}\n                x={this.bounds.x}\n                y={this.bounds.top}\n                interactive={!this.manager.isStatic}\n                styleConfig={this.numericLegendStyleConfig}\n            />\n        )\n    }\n\n    private renderAxis(): React.ReactElement {\n        return (\n            <HorizontalAxisZeroLine\n                axis={this.yAxis}\n                bounds={this.innerBounds}\n                strokeWidth={0.5}\n                // If the chart doesn't have negative values, then we\n                // move the zero line a little to the left to avoid\n                // overlap with the bars\n                align={\n                    this.hasNegative\n                        ? HorizontalAlign.center\n                        : HorizontalAlign.right\n                }\n            />\n        )\n    }\n\n    private renderStatic(): React.ReactElement {\n        return (\n            <>\n                {this.renderDefs()}\n                {this.renderLegend()}\n                {this.renderAxis()}\n                {this.renderBars()}\n                {this.renderValueLabels()}\n                {this.renderEntityLabels()}\n                {this.renderEntityAnnotations()}\n            </>\n        )\n    }\n\n    private renderInteractive(): React.ReactElement {\n        return (\n            <g ref={this.base} id={makeFigmaId(\"discrete-bar-chart\")}>\n                {this.renderDefs()}\n                {this.renderLegend()}\n                {this.renderAxis()}\n                {this.renderAnimatedBars()}\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataMessage\n                    manager={this.manager}\n                    bounds={this.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return this.manager.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n\n    // Color legend props\n\n    @computed private get hasColorLegend(): boolean {\n        return this.chartState.hasColorScale || this.chartState.hasProjectedData\n    }\n\n    @computed private get showColorLegend(): boolean {\n        return this.hasColorLegend && !!this.manager.showLegend\n    }\n\n    // TODO just pass colorScale to legend and let it figure it out?\n    @computed private get numericLegendData(): ColorScaleBin[] {\n        const legendBins = this.chartState.colorScale.legendBins.slice()\n\n        // Show a \"Projected data\" legend item with a striped pattern if appropriate\n        if (this.chartState.hasProjectedData) {\n            legendBins.push(\n                new CategoricalBin({\n                    color: this.projectedDataColorInLegend,\n                    label: \"Projected data\",\n                    index: 0,\n                    value: \"projected\",\n                    overlayPatternRef: makeProjectedDataPatternId(\n                        this.manager.patternIdSuffix\n                    ),\n                })\n            )\n        }\n\n        // Move CategoricalBins to end\n        return _.sortBy(legendBins, (bin) => bin instanceof CategoricalBin)\n    }\n\n    @computed private get projectedDataColorInLegend(): string {\n        // if a single color is in use, use that color in the legend\n        if (_.uniqBy(this.series, \"color\").length === 1)\n            return this.series[0].color\n        return DEFAULT_PROJECTED_DATA_COLOR_IN_LEGEND\n    }\n\n    // Used when the bars are colored by a numeric scale\n    numericLegendStyleConfig = NUMERIC_LEGEND_STYLE\n\n    @computed get externalLegend(): ExternalColorLegendData | undefined {\n        if (this.hasColorLegend) {\n            return {\n                numericLegendData: this.numericLegendData,\n                numericLegendStyleConfig: this.numericLegendStyleConfig,\n            }\n        }\n        return undefined\n    }\n\n    @computed private get numericBinHeight(): number {\n        return 0.625 * this.fontSize\n    }\n\n    @computed private get numericLegendState():\n        | HorizontalNumericColorLegendState\n        | undefined {\n        if (!this.manager.showLegend) return undefined\n        return new HorizontalNumericColorLegendState(this.numericLegendData, {\n            baseFontSize: this.fontSize,\n            maxWidth: this.bounds.width,\n            align: HorizontalAlign.center,\n            title: this.legendTitle,\n            tickSize: 1,\n            binHeight: this.numericBinHeight,\n        })\n    }\n\n    @computed private get legendTitle(): string | undefined {\n        return this.chartState.hasColorScale\n            ? this.chartState.colorScale.legendDescription\n            : undefined\n    }\n\n    @computed private get legendHeight(): number {\n        return this.numericLegendState?.height ?? 0\n    }\n\n    // End of color legend props\n\n    @computed private get series(): DiscreteBarSeries[] {\n        return this.chartState.series\n    }\n}\n\nfunction StripedProjectedDataPattern({\n    patternId,\n    opacity = 0.5,\n    size = 7,\n    stripeWidth = 2,\n}: {\n    patternId: string\n    opacity?: number\n    size?: number\n    stripeWidth?: number\n}): React.ReactElement {\n    return (\n        <pattern\n            id={patternId}\n            patternUnits=\"userSpaceOnUse\"\n            width={size}\n            height={size}\n            patternTransform=\"rotate(45)\"\n        >\n            <rect\n                x={size - stripeWidth}\n                width={stripeWidth}\n                height={size}\n                fill=\"#fff\"\n                opacity={opacity}\n            />\n        </pattern>\n    )\n}\n","import { Color, OwidVariableRow, SeriesName, Time } from \"@ourworldindata/types\"\nimport { ChartSeries } from \"../chart/ChartInterface\"\nimport { Point } from \"@ourworldindata/utils\"\nimport { InteractionState } from \"../interaction/InteractionState.js\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport { LegendStyleConfig } from \"../legend/LegendStyleConfig\"\nimport {\n    GRAPHER_AREA_OPACITY_DEFAULT,\n    GRAPHER_AREA_OPACITY_HIGHLIGHTED,\n    GRAPHER_AREA_OPACITY_MUTED,\n} from \"../core/GrapherConstants.js\"\n\nexport interface StackedAreaStyleConfig {\n    fillOpacity: number\n    borderOpacity: number\n    borderWidth: number\n}\n\nexport interface StackedBarStyleConfig {\n    opacity: number\n}\n\nconst DEFAULT_STACKED_AREA_STYLE: StackedAreaStyleConfig = {\n    fillOpacity: GRAPHER_AREA_OPACITY_DEFAULT,\n    borderOpacity: 0.7,\n    borderWidth: 0.5,\n}\n\nexport const STACKED_AREA_STYLE: Record<Emphasis, StackedAreaStyleConfig> = {\n    [Emphasis.Default]: DEFAULT_STACKED_AREA_STYLE,\n    [Emphasis.Elevated]: DEFAULT_STACKED_AREA_STYLE,\n    [Emphasis.Highlighted]: {\n        fillOpacity: GRAPHER_AREA_OPACITY_HIGHLIGHTED,\n        borderOpacity: 1,\n        borderWidth: 1.5,\n    },\n    [Emphasis.Muted]: {\n        fillOpacity: GRAPHER_AREA_OPACITY_MUTED,\n        borderOpacity: 0.3,\n        borderWidth: 0.5,\n    },\n}\n\nexport const STACKED_BAR_STYLE: Record<Emphasis, StackedBarStyleConfig> = {\n    [Emphasis.Default]: { opacity: GRAPHER_AREA_OPACITY_DEFAULT },\n    [Emphasis.Elevated]: { opacity: GRAPHER_AREA_OPACITY_DEFAULT },\n    [Emphasis.Highlighted]: { opacity: GRAPHER_AREA_OPACITY_HIGHLIGHTED },\n    [Emphasis.Muted]: { opacity: GRAPHER_AREA_OPACITY_MUTED },\n}\n\nexport const LEGEND_STYLE_FOR_STACKED_CHARTS: LegendStyleConfig = {\n    marker: {\n        default: { opacity: GRAPHER_AREA_OPACITY_DEFAULT },\n        highlighted: { opacity: GRAPHER_AREA_OPACITY_HIGHLIGHTED },\n        muted: { opacity: GRAPHER_AREA_OPACITY_MUTED },\n    },\n    text: {\n        muted: { opacity: GRAPHER_AREA_OPACITY_MUTED },\n    },\n}\n\n/** Either categorical (e.g. country names), or ordinal (e.g. years)  */\nexport type StackedPointPositionType = string | number\n\nexport interface StackedPoint<PositionType extends StackedPointPositionType> {\n    position: PositionType\n    value: number\n    valueOffset: number\n    time: number\n    formattedTime?: string\n    color?: string\n    missing?: boolean\n    interpolated?: boolean\n}\n\nexport interface PlacedStackedPoint<\n    PositionType extends StackedPointPositionType,\n> extends StackedPoint<PositionType> {\n    x: number\n    y: number\n    barWidth: number\n    barHeight: number\n}\n\nexport interface StackedRawSeries<\n    PositionType extends StackedPointPositionType,\n> {\n    seriesName: SeriesName\n    isProjection?: boolean\n    rows: OwidVariableRow<PositionType>[]\n    focus: InteractionState\n    shortEntityName?: string\n}\n\nexport interface StackedSeries<\n    PositionType extends StackedPointPositionType,\n> extends ChartSeries {\n    color: Color\n    points: StackedPoint<PositionType>[]\n    columnSlug?: string\n    isProjection?: boolean\n    isAllZeros?: boolean\n    shortEntityName?: string\n    focus?: InteractionState\n}\n\nexport interface PlacedStackedBarSeries<\n    PositionType extends StackedPointPositionType,\n> extends StackedSeries<PositionType> {\n    placedPoints: PlacedStackedPoint<PositionType>[]\n}\n\nexport interface PlacedStackedAreaSeries<\n    PositionType extends StackedPointPositionType,\n> extends StackedSeries<PositionType> {\n    /** Top edge border of the area */\n    placedPoints: Point[]\n    /** Points defining the filled area polygon */\n    areaPoints: Point[]\n}\n\nexport interface RenderStackedBarSeries<\n    PositionType extends StackedPointPositionType,\n> extends PlacedStackedBarSeries<PositionType> {\n    emphasis?: Emphasis\n    hover?: InteractionState\n    hoverTime?: Time\n}\n\nexport interface RenderStackedAreaSeries<\n    PositionType extends StackedPointPositionType,\n> extends PlacedStackedAreaSeries<PositionType> {\n    emphasis?: Emphasis\n    hover?: InteractionState\n}\n","import * as React from \"react\"\nimport {\n    pointsToPath,\n    makeSafeForCSS,\n    makeFigmaId,\n} from \"@ourworldindata/utils\"\nimport { SeriesName, Time } from \"@ourworldindata/types\"\nimport { rgb } from \"d3-color\"\nimport { STACKED_AREA_STYLE, RenderStackedAreaSeries } from \"./StackedConstants\"\nimport { Emphasis } from \"../interaction/Emphasis.js\"\n\nexport function StackedAreas({\n    series,\n    onMouseEnter,\n    onMouseLeave,\n}: {\n    series: RenderStackedAreaSeries<Time>[]\n    onMouseEnter?: (seriesName: SeriesName) => void\n    onMouseLeave?: () => void\n}): React.ReactElement {\n    return (\n        <g className=\"Areas\" id={makeFigmaId(\"stacked-areas\")}>\n            <g id={makeFigmaId(\"areas\")}>\n                {series.map((series) => (\n                    <Area\n                        key={series.seriesName}\n                        series={series}\n                        onMouseEnter={onMouseEnter}\n                        onMouseLeave={onMouseLeave}\n                    />\n                ))}\n            </g>\n            <g id={makeFigmaId(\"borders\")}>\n                {series.map((series) => (\n                    <Border\n                        key={series.seriesName}\n                        series={series}\n                        onMouseEnter={onMouseEnter}\n                        onMouseLeave={onMouseLeave}\n                    />\n                ))}\n            </g>\n        </g>\n    )\n}\n\nfunction Area({\n    series,\n    onMouseEnter,\n    onMouseLeave,\n}: {\n    series: RenderStackedAreaSeries<Time>\n    onMouseEnter?: (seriesName: SeriesName) => void\n    onMouseLeave?: () => void\n}): React.ReactElement {\n    const style = STACKED_AREA_STYLE[series.emphasis ?? Emphasis.Default]\n\n    return (\n        <path\n            id={makeFigmaId(series.seriesName)}\n            className={makeSafeForCSS(series.seriesName) + \"-area\"}\n            key={series.seriesName + \"-area\"}\n            strokeLinecap=\"round\"\n            d={pointsToPath(series.areaPoints)}\n            fill={series.color}\n            fillOpacity={style.fillOpacity}\n            onMouseEnter={(): void => {\n                onMouseEnter?.(series.seriesName)\n            }}\n            onMouseLeave={(): void => {\n                onMouseLeave?.()\n            }}\n        />\n    )\n}\n\nfunction Border({\n    series,\n    onMouseEnter,\n    onMouseLeave,\n}: {\n    series: RenderStackedAreaSeries<Time>\n    onMouseEnter?: (seriesName: SeriesName) => void\n    onMouseLeave?: () => void\n}): React.ReactElement {\n    const style = STACKED_AREA_STYLE[series.emphasis ?? Emphasis.Default]\n\n    return (\n        <path\n            id={makeFigmaId(series.seriesName)}\n            className={makeSafeForCSS(series.seriesName) + \"-border\"}\n            key={series.seriesName + \"-border\"}\n            strokeLinecap=\"round\"\n            d={pointsToPath(series.placedPoints)}\n            stroke={rgb(series.color).darker(0.5).toString()}\n            strokeOpacity={style.borderOpacity}\n            strokeWidth={style.borderWidth}\n            fill=\"none\"\n            onMouseEnter={(): void => {\n                onMouseEnter?.(series.seriesName)\n            }}\n            onMouseLeave={(): void => {\n                onMouseLeave?.()\n            }}\n        />\n    )\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport * as R from \"remeda\"\nimport {\n    Bounds,\n    excludeUndefined,\n    exposeInstanceOnWindow,\n    getRelativeMouse,\n    guid,\n    isMobile,\n    roundForSvg,\n} from \"@ourworldindata/utils\"\nimport { computed, action, observable, makeObservable } from \"mobx\"\nimport { SeriesName, SeriesStrategy, Time } from \"@ourworldindata/types\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    NARROW_CHART_WIDTH,\n} from \"../core/GrapherConstants\"\nimport { observer } from \"mobx-react\"\nimport { DualAxisComponent } from \"../axis/AxisViews\"\nimport { DualAxis, HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\nimport { VerticalLabels } from \"../verticalLabels/VerticalLabels\"\nimport { VerticalLabelsState } from \"../verticalLabels/VerticalLabelsState\"\nimport { NoDataMessage } from \"../noDataMessage/NoDataMessage\"\nimport { TooltipFooterIcon } from \"../tooltip/TooltipProps.js\"\nimport {\n    Tooltip,\n    TooltipState,\n    TooltipTable,\n    makeTooltipRoundingNotice,\n    toTooltipTableColumns,\n} from \"../tooltip/Tooltip\"\nimport { StackedAreaChartState } from \"./StackedAreaChartState.js\"\nimport {\n    LEGEND_STYLE_FOR_STACKED_CHARTS,\n    PlacedStackedAreaSeries,\n    RenderStackedAreaSeries,\n    STACKED_AREA_STYLE,\n    StackedSeries,\n} from \"./StackedConstants\"\nimport {\n    isTargetOutsideElement,\n    getHoverStateForSeries,\n} from \"../chart/ChartUtils\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig.js\"\nimport { LabelSeries } from \"../verticalLabels/VerticalLabelsTypes\"\nimport { Emphasis, resolveEmphasis } from \"../interaction/Emphasis\"\n\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { ChartManager } from \"../chart/ChartManager\"\nimport { StackedAreas } from \"./StackedAreas\"\nimport { ExternalColorLegendData } from \"../legend/HorizontalColorLegendTypes\"\nimport { CategoricalBin } from \"../color/ColorScaleBin\"\nimport { ChartComponentProps } from \"../chart/ChartTypeMap.js\"\nimport { InteractionState } from \"../interaction/InteractionState\"\nimport { resolveCollision, toPlacedStackedAreaSeries } from \"./StackedUtils\"\n\nconst STACKED_AREA_CHART_CLASS_NAME = \"StackedArea\"\n\nexport type StackedAreaChartProps = ChartComponentProps<StackedAreaChartState>\n\n@observer\nexport class StackedAreaChart\n    extends React.Component<StackedAreaChartProps>\n    implements ChartInterface, AxisManager\n{\n    private readonly tooltipId = guid()\n    private readonly tooltipState = new TooltipState<{\n        index: number // time-index into points array\n        series?: SeriesName\n    }>({ fade: \"immediate\" })\n\n    private hoveredLabelSeriesName: SeriesName | undefined = undefined\n    private hoverTimer: number | undefined = undefined\n\n    constructor(props: StackedAreaChartProps) {\n        super(props)\n\n        makeObservable<\n            StackedAreaChart,\n            \"tooltipState\" | \"hoveredLabelSeriesName\"\n        >(this, {\n            tooltipState: observable,\n            hoveredLabelSeriesName: observable,\n        })\n    }\n\n    @computed get chartState(): StackedAreaChartState {\n        return this.props.chartState\n    }\n\n    @computed private get manager(): ChartManager {\n        return this.chartState.manager\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get isStatic(): boolean {\n        return this.manager.isStatic ?? false\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed get detailsOrderedByReference(): string[] {\n        return this.manager.detailsOrderedByReference ?? []\n    }\n\n    @computed private get innerBounds(): Bounds {\n        return this.makeInnerBounds({ paddingRight: this.verticalLabelsWidth })\n    }\n\n    private makeInnerBounds({\n        paddingRight,\n    }: {\n        paddingRight: number\n    }): Bounds {\n        return (\n            this.bounds\n                .padRight(paddingRight)\n                // top padding leaves room for tick labels\n                .padTop(6)\n                // bottom padding avoids axis labels to be cut off at some resolutions\n                .padBottom(2)\n        )\n    }\n\n    @computed private get dualAxis(): DualAxis {\n        return this.makeDualAxis(this.innerBounds)\n    }\n\n    private makeDualAxis(bounds: Bounds): DualAxis {\n        const { horizontalAxisPart, verticalAxisPart } = this\n        return new DualAxis({\n            bounds,\n            horizontalAxis: horizontalAxisPart,\n            verticalAxis: verticalAxisPart,\n            comparisonLines: this.manager.comparisonLines,\n        })\n    }\n\n    @computed get yAxis(): VerticalAxis {\n        return this.dualAxis.verticalAxis\n    }\n\n    @computed get xAxis(): HorizontalAxis {\n        return this.dualAxis.horizontalAxis\n    }\n\n    @computed private get horizontalAxisPart(): HorizontalAxis {\n        return this.chartState.toHorizontalAxis(this.xAxisConfig)\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        const { yAxisConfig } = this.manager\n        const custom = { nice: true }\n        return new AxisConfig({ ...custom, ...yAxisConfig }, this)\n    }\n\n    @computed private get verticalAxisPart(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig)\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        const { xAxisConfig } = this.manager\n        const custom = { hideGridlines: true }\n        return new AxisConfig({ ...custom, ...xAxisConfig }, this)\n    }\n\n    private hoverStateForSeries(series: StackedSeries<Time>): InteractionState {\n        return getHoverStateForSeries(series, {\n            isHoverModeActive: this.isHoverModeActive,\n            hoveredSeriesNames: excludeUndefined([this.hoveredSeriesName]),\n        })\n    }\n\n    @computed private get verticalLabelsSeries(): LabelSeries[] {\n        const isEntityStrategy =\n            this.chartState.seriesStrategy === SeriesStrategy.entity\n\n        return this.series\n            .map((series, index) => ({\n                color: series.color,\n                seriesName: series.seriesName,\n                label:\n                    isEntityStrategy && series.shortEntityName\n                        ? series.shortEntityName\n                        : series.seriesName,\n                yValue: this.chartState.midpoints[index],\n                isAllZeros: series.isAllZeros,\n                emphasis: resolveEmphasis({\n                    hover: this.hoverStateForSeries(series),\n                    focus: series.focus,\n                }),\n            }))\n            .filter((series) => !series.isAllZeros)\n            .toReversed()\n    }\n\n    @computed private get maxVerticalLabelsWidth(): number {\n        return Math.min(150, this.bounds.width / 3)\n    }\n\n    @computed private get showLegend(): boolean {\n        return (\n            !!this.manager.showSeriesLabels && !this.manager.useMinimalLabeling\n        )\n    }\n\n    @computed private get verticalLabelsState(): VerticalLabelsState {\n        return this.makeVerticalLabelsState(() => this.yAxis)\n    }\n\n    /** Label placement that decides the labels' width in compact layouts */\n    @computed\n    private get verticalLabelsStateOnStableAxis(): VerticalLabelsState {\n        return this.makeVerticalLabelsState(\n            () => this.yAxisWithStableLabelsWidth\n        )\n    }\n\n    private makeVerticalLabelsState(\n        yAxis: () => VerticalAxis\n    ): VerticalLabelsState {\n        return new VerticalLabelsState(this.verticalLabelsSeries, {\n            maxWidth: this.maxVerticalLabelsWidth,\n            baseFontSize: this.fontSize,\n            yAxis,\n            yRange: () => this.verticalLabelsYRange,\n            seriesNamesSortedByImportance: this.seriesSortedByImportance,\n            showRegionTooltip: !this.isStatic,\n        })\n    }\n\n    @computed private get useCompactLayout(): boolean {\n        return (\n            !!this.manager.isSemiNarrow ||\n            this.bounds.width < NARROW_CHART_WIDTH\n        )\n    }\n\n    @computed private get verticalLabelsWidth(): number {\n        if (!this.showLegend) return 0\n        return this.useCompactLayout\n            ? this.verticalLabelsStateOnStableAxis.width\n            : this.verticalLabelsState.stableWidth\n    }\n\n    @computed private get yAxisWithStableLabelsWidth(): VerticalAxis {\n        if (!this.useCompactLayout) return this.yAxis\n        const bounds = this.makeInnerBounds({\n            paddingRight: this.verticalLabelsState.stableWidth,\n        })\n        return this.makeDualAxis(bounds).verticalAxis\n    }\n\n    @action.bound private onAreaMouseEnter(seriesName: SeriesName): void {\n        this.chartState.focusArray.clear()\n        if (this.tooltipState.target) {\n            _.extend(this.tooltipState.target, { series: seriesName })\n        } else {\n            this.tooltipState.target = {\n                index: 0, // might be incorrect but will be updated immediately by the move event handler\n                series: seriesName,\n            }\n        }\n    }\n\n    @action.bound private onAreaMouseLeave(): void {\n        _.extend(this.tooltipState.target, { series: undefined })\n    }\n\n    @computed get externalLegend(): ExternalColorLegendData | undefined {\n        if (!this.showLegend) {\n            const categoricalLegendData = this.chartState.unstackedSeries\n                .map(\n                    (series, index) =>\n                        new CategoricalBin({\n                            index,\n                            value: series.seriesName,\n                            label: series.seriesName,\n                            color: series.color,\n                        })\n                )\n                .toReversed()\n\n            return {\n                categoricalLegendData,\n                categoricalLegendStyleConfig: LEGEND_STYLE_FOR_STACKED_CHARTS,\n            }\n        }\n        return undefined\n    }\n\n    @computed private get seriesSortedByImportance(): string[] {\n        return this.series\n            .toSorted(\n                (s1: StackedSeries<Time>, s2: StackedSeries<Time>): number => {\n                    const PREFER_S1 = -1\n                    const PREFER_S2 = 1\n\n                    if (!s1) return PREFER_S2\n                    if (!s2) return PREFER_S1\n\n                    const picked = resolveCollision(s1, s2)\n                    if (picked === s1) return PREFER_S1\n                    if (picked === s2) return PREFER_S2\n\n                    return 0\n                }\n            )\n            .map((s) => s.seriesName)\n    }\n\n    @action.bound private onVerticalLabelMouseEnter(\n        seriesName: SeriesName\n    ): void {\n        this.chartState.focusArray.clear()\n        clearTimeout(this.hoverTimer)\n        this.hoveredLabelSeriesName = seriesName\n    }\n\n    @action.bound private clearVerticalLabelHover(): void {\n        this.hoveredLabelSeriesName = undefined\n    }\n\n    @action.bound private debouncedClearVerticalLabelHover(): void {\n        clearTimeout(this.hoverTimer)\n\n        // Wait before clearing selection in case the mouse is moving\n        // quickly over neighboring labels\n        this.hoverTimer = window.setTimeout(() => {\n            this.clearVerticalLabelHover()\n        }, 200)\n    }\n\n    @action.bound private onVerticalLabelMouseLeave(): void {\n        this.debouncedClearVerticalLabelHover()\n    }\n\n    @computed private get facetLegendHoveredSeriesName():\n        | SeriesName\n        | undefined {\n        const { externalLegendHoverBin } = this.manager\n        if (!externalLegendHoverBin) return undefined\n        // stacked area charts can't plot the same entity or column multiple times,\n        // so we just find the first series that matches the hovered legend item\n        const hoveredSeries = this.chartState.rawSeries.find((series) =>\n            externalLegendHoverBin.contains(series.seriesName)\n        )\n        return hoveredSeries?.seriesName\n    }\n\n    @computed private get hoveredSeriesName(): SeriesName | undefined {\n        return (\n            // If the chart area is hovered\n            this.tooltipState.target?.series ??\n            // If a label is hovered\n            this.hoveredLabelSeriesName ??\n            // If the facet legend is hovered\n            this.facetLegendHoveredSeriesName\n        )\n    }\n\n    @computed private get isHoverModeActive(): boolean {\n        return (\n            !!this.hoveredSeriesName ||\n            // If the external legend is hovered, we want to mute\n            // all non-hovered series even if the chart doesn't plot\n            // the currently hovered series\n            !!this.manager.externalLegendHoverBin\n        )\n    }\n\n    @action.bound private onCursorMove(\n        ev: React.MouseEvent<SVGGElement> | React.TouchEvent<SVGElement>\n    ): void {\n        const ref = this.base.current,\n            parentRef = this.manager.base?.current\n\n        // the tooltip's origin needs to be in the parent's coordinates\n        if (parentRef) {\n            this.tooltipState.position = getRelativeMouse(parentRef, ev)\n        }\n\n        if (!ref) return undefined\n\n        const { series } = this\n        const mouse = getRelativeMouse(ref, ev.nativeEvent)\n        const boxPadding = isMobile() ? 44 : 25\n\n        // expand the box width, so it's easier to see the tooltip for the first & last timepoints\n        const boundedBox = this.dualAxis.innerBounds.expand({\n            left: boxPadding,\n            right: boxPadding,\n        })\n\n        let hoveredIndex\n        if (boundedBox.contains(mouse)) {\n            const invertedX = this.dualAxis.horizontalAxis.invert(mouse.x)\n            const closestPoint = _.minBy(series[0].points, (d) =>\n                Math.abs(d.position - invertedX)\n            )\n            if (closestPoint) {\n                const index = series[0].points.indexOf(closestPoint)\n                hoveredIndex = index\n            }\n        }\n        this.tooltipState.target =\n            hoveredIndex === undefined\n                ? null\n                : {\n                      index: hoveredIndex,\n                      series: this.tooltipState.target?.series,\n                  }\n    }\n\n    @action.bound private dismissTooltip(): void {\n        this.tooltipState.target = null\n    }\n\n    @action.bound private onCursorLeave(): void {\n        if (!this.manager.shouldPinTooltipToBottom) {\n            this.dismissTooltip()\n        }\n        this.hoveredLabelSeriesName = undefined\n    }\n\n    @computed private get activeXVerticalLine():\n        | React.ReactElement\n        | undefined {\n        const { dualAxis, series } = this\n        const { horizontalAxis, verticalAxis } = dualAxis\n        const hoveredPointIndex = this.tooltipState.target?.index\n        if (hoveredPointIndex === undefined) return undefined\n\n        const xPoint = series[0].points[hoveredPointIndex]\n        if (xPoint === undefined) return undefined\n\n        return (\n            // Disable pointer events to avoid interfering with enter/leave tracking of areas\n            <g className=\"hoverIndicator\" style={{ pointerEvents: \"none\" }}>\n                {series.map((series) => {\n                    const point = series.points[hoveredPointIndex]\n                    if (\n                        !point ||\n                        point.missing ||\n                        point.interpolated ||\n                        point.value === 0\n                    )\n                        return null\n\n                    return (\n                        <circle\n                            key={series.seriesName}\n                            cx={roundForSvg(\n                                horizontalAxis.place(point.position)\n                            )}\n                            cy={roundForSvg(\n                                verticalAxis.place(\n                                    point.value + point.valueOffset\n                                )\n                            )}\n                            r={2}\n                            fill={series.color}\n                        />\n                    )\n                })}\n                <line\n                    x1={roundForSvg(horizontalAxis.place(xPoint.position))}\n                    y1={roundForSvg(verticalAxis.range[0])}\n                    x2={roundForSvg(horizontalAxis.place(xPoint.position))}\n                    y2={roundForSvg(verticalAxis.range[1])}\n                    stroke=\"rgba(180,180,180,.4)\"\n                />\n            </g>\n        )\n    }\n\n    @computed private get isTooltipActive(): boolean {\n        return this.manager.tooltip?.get()?.id === this.tooltipId\n    }\n\n    @computed private get tooltip(): React.ReactElement | undefined {\n        const { target, position, fading } = this.tooltipState\n        if (!target) return undefined\n\n        // Grab the first value to get the year from\n        const { series } = this\n        const hoveredPointIndex = target.index\n        const bottomSeriesPoint = series[0].points[hoveredPointIndex]\n        if (!bottomSeriesPoint) return undefined\n\n        const formatColumn = this.chartState.formatColumn,\n            formattedTime = formatColumn.formatTime(bottomSeriesPoint.position),\n            { displayUnit } = formatColumn\n\n        const title = formattedTime\n        const titleAnnotation = this.xAxis.label ? `(${this.xAxis.label})` : \"\"\n\n        const lastStackedPoint = R.last(series)!.points[hoveredPointIndex]\n        if (!lastStackedPoint) return undefined\n        const totalValue = lastStackedPoint.value + lastStackedPoint.valueOffset\n\n        const roundingNotice = formatColumn.roundsToSignificantFigures\n            ? {\n                  icon: TooltipFooterIcon.None,\n                  text: makeTooltipRoundingNotice([\n                      formatColumn.numSignificantFigures,\n                  ]),\n              }\n            : undefined\n        const footer = excludeUndefined([roundingNotice])\n\n        return (\n            <Tooltip\n                id={this.tooltipId}\n                tooltipManager={this.manager}\n                x={position.x}\n                y={position.y}\n                offsetY={-16}\n                offsetX={20}\n                offsetXDirection=\"left\"\n                style={{ maxWidth: \"50%\" }}\n                title={title}\n                titleAnnotation={titleAnnotation}\n                subtitle={displayUnit}\n                subtitleFormat=\"unit\"\n                footer={footer}\n                dissolve={fading}\n                dismiss={this.dismissTooltip}\n            >\n                <TooltipTable\n                    columns={toTooltipTableColumns(formatColumn)}\n                    totals={[totalValue]}\n                    rows={series.toReversed().map((series) => {\n                        const { seriesName: name, color, points } = series\n                        const point = points[hoveredPointIndex]\n                        const focused = name === target.series\n                        const values = [\n                            point?.missing || point?.interpolated\n                                ? undefined\n                                : point?.value,\n                        ]\n\n                        const emphasis = focused\n                            ? Emphasis.Highlighted\n                            : Emphasis.Default\n                        const opacity = STACKED_AREA_STYLE[emphasis].fillOpacity\n\n                        const swatch = { color, opacity }\n\n                        return {\n                            name,\n                            swatch,\n                            focused,\n                            values,\n                        }\n                    })}\n                />\n            </Tooltip>\n        )\n    }\n\n    @action.bound onDocumentClick(e: MouseEvent): void {\n        // only dismiss the tooltip if the click is outside of the chart area\n        // and outside of the chart areas of neighbouring facets\n        const chartContainer = this.manager.base?.current\n        if (!chartContainer) return\n        const chartAreas: Element[] = Array.from(\n            chartContainer.getElementsByClassName(STACKED_AREA_CHART_CLASS_NAME)\n        )\n        const isTargetOutsideChartAreas = chartAreas.every((chartArea) =>\n            isTargetOutsideElement(e.target!, chartArea)\n        )\n        if (isTargetOutsideChartAreas) {\n            this.dismissTooltip()\n        }\n    }\n\n    base = React.createRef<SVGGElement>()\n    override componentDidMount(): void {\n        document.addEventListener(\"click\", this.onDocumentClick, {\n            capture: true,\n        })\n        exposeInstanceOnWindow(this)\n    }\n\n    override componentWillUnmount(): void {\n        document.removeEventListener(\"click\", this.onDocumentClick, {\n            capture: true,\n        })\n    }\n\n    renderAxis(): React.ReactElement {\n        const { manager } = this\n        return (\n            <DualAxisComponent\n                dualAxis={this.dualAxis}\n                showTickMarks={true}\n                insetEdgeMarks={true}\n                detailsMarker={manager.detailsMarkerInSvg}\n            />\n        )\n    }\n\n    renderVerticalLabels(): React.ReactElement | undefined {\n        if (!this.showLegend) return\n        return (\n            <VerticalLabels\n                state={this.verticalLabelsState}\n                x={this.verticalLabelsX}\n                onMouseEnter={this.onVerticalLabelMouseEnter}\n                onMouseLeave={this.onVerticalLabelMouseLeave}\n                interactive={!this.isStatic}\n            />\n        )\n    }\n\n    renderStatic(): React.ReactElement {\n        return (\n            <>\n                {this.renderAxis()}\n                {this.renderVerticalLabels()}\n                <StackedAreas series={this.renderSeries} />\n            </>\n        )\n    }\n\n    renderInteractive(): React.ReactElement {\n        return (\n            <g\n                ref={this.base}\n                className={STACKED_AREA_CHART_CLASS_NAME}\n                onMouseLeave={this.onCursorLeave}\n                onTouchEnd={this.onCursorLeave}\n                onTouchCancel={this.onCursorLeave}\n                onMouseMove={this.onCursorMove}\n                onTouchStart={this.onCursorMove}\n                onTouchMove={this.onCursorMove}\n            >\n                <rect {...this.bounds.toProps()} fillOpacity=\"0\">\n                    {/* This <rect> ensures that the parent <g> is big enough such that we get mouse hover events for the\n                    whole charting area, including the axis, the entity labels, and the whitespace next to them.\n                    We need these to be able to show the tooltip for the first/last year even if the mouse is outside the charting area. */}\n                </rect>\n                {this.renderAxis()}\n                {this.renderVerticalLabels()}\n                <StackedAreas\n                    series={this.renderSeries}\n                    onMouseEnter={this.onAreaMouseEnter}\n                    onMouseLeave={this.onAreaMouseLeave}\n                />\n                {this.isTooltipActive && this.activeXVerticalLine}\n                {this.tooltip}\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <g>\n                    {this.renderAxis()}\n                    <NoDataMessage\n                        manager={this.manager}\n                        bounds={this.bounds}\n                        message={this.chartState.errorInfo.reason}\n                    />\n                </g>\n            )\n\n        return this.manager.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n\n    @computed private get verticalLabelsX(): number {\n        return this.showLegend\n            ? this.bounds.right - this.verticalLabelsWidth\n            : 0\n    }\n\n    @computed private get verticalLabelsYRange(): [number, number] {\n        return [this.bounds.top, this.bounds.bottom]\n    }\n\n    @computed private get series(): readonly StackedSeries<Time>[] {\n        return this.chartState.series\n    }\n\n    @computed private get placedSeries(): PlacedStackedAreaSeries<Time>[] {\n        return toPlacedStackedAreaSeries(this.series, this.dualAxis)\n    }\n\n    @computed private get renderSeries(): RenderStackedAreaSeries<Time>[] {\n        return this.placedSeries.map((series) => {\n            const hover = this.hoverStateForSeries(series)\n            const emphasis = resolveEmphasis({ hover, focus: series.focus })\n            return { ...series, hover, emphasis }\n        })\n    }\n}\n","import * as React from \"react\"\nimport { makeFigmaId, roundForSvg } from \"@ourworldindata/utils\"\nimport { TextWrapSvg } from \"@ourworldindata/components\"\nimport { ColorScaleBin } from \"../color/ColorScaleBin\"\nimport {\n    BinEmphasis,\n    LegendStyleConfig,\n    resolveLegendMarkerStyle,\n    resolveLegendTextStyle,\n} from \"./LegendStyleConfig\"\nimport { VerticalColorLegendState } from \"./VerticalColorLegendState\"\n\ninterface VerticalColorLegendProps {\n    state: VerticalColorLegendState\n    x: number\n    y: number\n    interactive?: boolean\n    styleConfig?: LegendStyleConfig\n    binEmphasis?: BinEmphasis\n    onMouseOver?: (bin: ColorScaleBin) => void\n    onMouseLeave?: () => void\n    onClick?: (bin: ColorScaleBin) => void\n}\n\nexport function VerticalColorLegend(\n    props: VerticalColorLegendProps\n): React.ReactElement {\n    const {\n        state,\n        x,\n        y,\n        interactive = true,\n        styleConfig,\n        binEmphasis,\n        onMouseOver,\n        onMouseLeave,\n        onClick,\n    } = props\n    const { series, title } = state\n\n    return (\n        <g\n            id={makeFigmaId(\"vertical-color-legend\")}\n            className=\"ScatterColorLegend clickable\"\n        >\n            {title && (\n                <TextWrapSvg textWrap={title} x={x} y={y} fontWeight={700} />\n            )}\n            <g id={makeFigmaId(\"labels\")}>\n                {series.map((series) => {\n                    const style = resolveLegendTextStyle(\n                        styleConfig,\n                        binEmphasis?.get(series.bin)\n                    )\n\n                    return (\n                        <TextWrapSvg\n                            key={series.textWrap.text}\n                            textWrap={series.textWrap}\n                            x={x + series.label.x}\n                            y={y + series.label.y}\n                            fill={style.color}\n                            {...style}\n                        />\n                    )\n                })}\n            </g>\n            <g id={makeFigmaId(\"swatches\")}>\n                {series.map((series) => {\n                    const style = resolveLegendMarkerStyle(\n                        styleConfig,\n                        binEmphasis?.get(series.bin),\n                        { fill: series.bin.color }\n                    )\n\n                    return (\n                        <rect\n                            id={makeFigmaId(series.textWrap.text)}\n                            key={series.textWrap.text}\n                            x={roundForSvg(x + series.swatch.x)}\n                            y={roundForSvg(y + series.swatch.y)}\n                            width={roundForSvg(series.swatch.width)}\n                            height={roundForSvg(series.swatch.height)}\n                            style={style}\n                        />\n                    )\n                })}\n            </g>\n            {interactive && (\n                <g>\n                    {series.map((series) => {\n                        const label = series.textWrap.text\n                        const mouseOver = onMouseOver\n                            ? (): void => onMouseOver(series.bin)\n                            : undefined\n                        const mouseLeave = onMouseLeave || undefined\n                        const click = onClick\n                            ? (): void => onClick(series.bin)\n                            : undefined\n\n                        const cursor = click ? \"pointer\" : \"default\"\n\n                        return (\n                            <g\n                                key={label}\n                                className=\"legendMark\"\n                                onMouseOver={mouseOver}\n                                onMouseLeave={mouseLeave}\n                                onClick={click}\n                                style={{ cursor }}\n                            >\n                                <rect\n                                    x={roundForSvg(x + series.hitArea.x)}\n                                    y={roundForSvg(y + series.hitArea.y)}\n                                    width={roundForSvg(series.hitArea.width)}\n                                    height={roundForSvg(series.hitArea.height)}\n                                    fill=\"#fff\"\n                                    fillOpacity={0}\n                                />\n                            </g>\n                        )\n                    })}\n                </g>\n            )}\n        </g>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport { computed } from \"mobx\"\nimport { TextWrap } from \"@ourworldindata/components\"\nimport { Bounds } from \"@ourworldindata/utils\"\nimport { BASE_FONT_SIZE } from \"../core/GrapherConstants\"\nimport { scaleFontSize } from \"../chart/ChartUtils\"\nimport { ColorScaleBin, isNumericBin } from \"../color/ColorScaleBin\"\nimport {\n    PlacedLegendSeries,\n    SizedLegendSeries,\n    VerticalColorLegendOptions,\n} from \"./VerticalColorLegendTypes\"\n\n/**\n * Stacks labelled colour swatches vertically, one per bin, under an optional\n * title. All coordinates are relative to the legend's own origin; the render\n * component offsets them by its `x`/`y` props.\n */\nexport class VerticalColorLegendState {\n    private readonly bins: ColorScaleBin[]\n    private readonly options: VerticalColorLegendOptions\n\n    private readonly rectPadding = 5\n    private readonly lineHeight = 5\n\n    constructor(bins: ColorScaleBin[], options: VerticalColorLegendOptions) {\n        this.bins = bins\n        this.options = options\n    }\n\n    @computed private get maxWidth(): number {\n        return this.options.maxWidth ?? 100\n    }\n\n    @computed private get fontSize(): number {\n        return scaleFontSize(11.2, this.options.baseFontSize ?? BASE_FONT_SIZE)\n    }\n\n    @computed private get rectSize(): number {\n        return Math.round(this.fontSize / 1.4)\n    }\n\n    @computed get title(): TextWrap | undefined {\n        if (!this.options.title) return undefined\n        return new TextWrap({\n            maxWidth: this.maxWidth,\n            fontSize: this.fontSize,\n            fontWeight: 700,\n            lineHeight: 1,\n            text: this.options.title,\n            separators: [\" \", \"-\"],\n        })\n    }\n\n    @computed private get titleHeight(): number {\n        if (!this.title) return 0\n        return this.title.height + 5\n    }\n\n    @computed private get sizedSeries(): SizedLegendSeries[] {\n        const { fontSize, rectSize, rectPadding } = this\n\n        return this.bins.map((bin) => {\n            // Get label, inferring from minText/maxText for numeric bins if needed\n            let label = bin.text\n            if (!label && isNumericBin(bin) && bin.minText && bin.maxText) {\n                label = `${bin.minText} – ${bin.maxText}`\n            }\n\n            const textWrap = new TextWrap({\n                maxWidth: this.maxWidth,\n                fontSize,\n                lineHeight: 1,\n                text: label,\n                separators: [\" \", \"-\"],\n            })\n\n            return {\n                bin,\n                textWrap,\n                width: rectSize + rectPadding + textWrap.width,\n                height: Math.max(textWrap.height, rectSize),\n            }\n        })\n    }\n\n    @computed get series(): PlacedLegendSeries[] {\n        const { rectSize, rectPadding, lineHeight } = this\n\n        let runningYOffset = this.titleHeight\n        return this.sizedSeries.map((series) => {\n            const yOffset = runningYOffset\n            runningYOffset += series.height + lineHeight\n\n            const label = { x: rectSize + rectPadding, y: yOffset }\n\n            // The swatch hangs off the label's first baseline rather than its\n            // box, so the two line up however the text happens to wrap.\n            const [, baselineY] = series.textWrap.getPositionForSvgRendering(\n                label.x,\n                label.y\n            )\n\n            return {\n                ...series,\n                label,\n                swatch: new Bounds(0, baselineY - rectSize, rectSize, rectSize),\n                hitArea: new Bounds(\n                    0,\n                    yOffset - lineHeight / 2,\n                    series.width,\n                    series.height + lineHeight\n                ),\n            }\n        })\n    }\n\n    @computed get width(): number {\n        const widths = this.sizedSeries.map((series) => series.width)\n        if (this.title) widths.push(this.title.width)\n        return _.max(widths) ?? 0\n    }\n\n    @computed get height(): number {\n        return (\n            this.titleHeight +\n            _.sum(this.sizedSeries.map((series) => series.height)) +\n            this.lineHeight * this.sizedSeries.length\n        )\n    }\n}\n","import * as React from \"react\"\nimport {\n    VerticalAlign,\n    dyFromAlign,\n    makeFigmaId,\n    roundForSvg,\n} from \"@ourworldindata/utils\"\nimport {\n    resolveLegendMarkerStyle,\n    resolveLegendTextStyle,\n} from \"./LegendStyleConfig\"\nimport { HorizontalCategoricalColorLegendState } from \"./HorizontalCategoricalColorLegendState\"\nimport { useDismissOnOutsidePointerDownOrUnmount } from \"../hooks.js\"\nimport { HorizontalColorLegendProps } from \"./HorizontalColorLegendTypes\"\nimport {\n    CATEGORICAL_BIN_STROKE_WIDTH,\n    SPACE_BETWEEN_CATEGORICAL_BINS,\n} from \"./HorizontalColorLegendConstants\"\n\nexport function HorizontalCategoricalColorLegend(\n    props: HorizontalColorLegendProps<HorizontalCategoricalColorLegendState>\n): React.ReactElement {\n    const {\n        state,\n        x,\n        y,\n        interactive = true,\n        styleConfig,\n        binEmphasis,\n        onMouseEnter,\n        onMouseOver,\n        onMouseLeave,\n    } = props\n    const { marks, rectPadding } = state\n\n    const isHoverable = interactive && !!onMouseOver\n    useDismissOnOutsidePointerDownOrUnmount(\n        isHoverable ? onMouseLeave : undefined\n    )\n\n    return (\n        <g\n            id={makeFigmaId(\"categorical-color-legend\")}\n            className=\"categoricalColorLegend\"\n            onPointerDown={(event) => event.stopPropagation()}\n        >\n            <g id={makeFigmaId(\"swatches\")}>\n                {marks.map((mark, index) => {\n                    const style = resolveLegendMarkerStyle(\n                        styleConfig,\n                        binEmphasis?.get(mark.bin),\n                        {\n                            fill: mark.bin.color,\n                            strokeWidth: CATEGORICAL_BIN_STROKE_WIDTH,\n                        }\n                    )\n\n                    const fill = mark.bin.fillPatternRef\n                        ? `url(#${mark.bin.fillPatternRef})`\n                        : style.fill\n\n                    const geometry = {\n                        x: roundForSvg(x + mark.x),\n                        y: roundForSvg(y + mark.y),\n                        width: roundForSvg(mark.rectSize),\n                        height: roundForSvg(mark.rectSize),\n                    }\n\n                    return (\n                        <React.Fragment key={`${mark.label}-${index}`}>\n                            <rect\n                                id={makeFigmaId(mark.label.text)}\n                                {...geometry}\n                                style={{ ...style, fill }}\n                            />\n                            {mark.bin.overlayPatternRef && (\n                                <rect\n                                    id={makeFigmaId(\n                                        mark.label.text,\n                                        \"projected-data-pattern\"\n                                    )}\n                                    {...geometry}\n                                    fill={`url(#${mark.bin.overlayPatternRef})`}\n                                    opacity={style.opacity}\n                                    pointerEvents=\"none\"\n                                />\n                            )}\n                        </React.Fragment>\n                    )\n                })}\n            </g>\n            <g id={makeFigmaId(\"labels\")}>\n                {marks.map((mark, index) => {\n                    const style = resolveLegendTextStyle(\n                        styleConfig,\n                        binEmphasis?.get(mark.bin)\n                    )\n\n                    return (\n                        <text\n                            key={`${mark.label}-${index}`}\n                            x={roundForSvg(x + mark.label.bounds.x)}\n                            y={roundForSvg(y + mark.label.bounds.y)}\n                            // we can't use dominant-baseline to do proper alignment since our svg-to-png library Sharp\n                            // doesn't support that (https://github.com/lovell/sharp/issues/1996), so we'll have to make\n                            // do with some rough positioning.\n                            dy={dyFromAlign(VerticalAlign.middle)}\n                            fontSize={mark.label.fontSize}\n                            fontWeight={style.fontWeight}\n                            style={{ fill: style.color, ...style }}\n                        >\n                            {mark.label.text}\n                        </text>\n                    )\n                })}\n            </g>\n            {isHoverable && (\n                <g id={makeFigmaId(\"hit-areas\")}>\n                    {marks.map((mark, index) => {\n                        const pointerEnter = (\n                            event: React.PointerEvent\n                        ): void => {\n                            if (event.pointerType !== \"touch\")\n                                onMouseEnter?.(mark.bin)\n                        }\n                        const pointerOver = (\n                            event: React.PointerEvent\n                        ): void => {\n                            if (event.pointerType !== \"touch\")\n                                onMouseOver?.(mark.bin)\n                        }\n                        const pointerLeave = (\n                            event: React.PointerEvent\n                        ): void => {\n                            if (event.pointerType !== \"touch\") onMouseLeave?.()\n                        }\n                        const pointerUp = (event: React.PointerEvent): void => {\n                            if (event.pointerType === \"touch\") {\n                                onMouseEnter?.(mark.bin)\n                                onMouseOver?.(mark.bin)\n                            }\n                        }\n\n                        return (\n                            <g\n                                key={`${mark.label}-${index}`}\n                                onPointerEnter={pointerEnter}\n                                onPointerOver={pointerOver}\n                                onPointerLeave={pointerLeave}\n                                onPointerUp={pointerUp}\n                            >\n                                <rect\n                                    x={roundForSvg(x + mark.x)}\n                                    y={roundForSvg(\n                                        y + mark.y - rectPadding / 2\n                                    )}\n                                    height={roundForSvg(\n                                        mark.rectSize + rectPadding\n                                    )}\n                                    width={roundForSvg(\n                                        mark.width +\n                                            SPACE_BETWEEN_CATEGORICAL_BINS\n                                    )}\n                                    fill=\"#fff\"\n                                    opacity={0}\n                                />\n                            </g>\n                        )\n                    })}\n                </g>\n            )}\n        </g>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport { computed } from \"mobx\"\nimport { Bounds, HorizontalAlign } from \"@ourworldindata/utils\"\nimport { CategoricalBin } from \"../color/ColorScaleBin\"\nimport { BASE_FONT_SIZE } from \"../core/GrapherConstants\"\nimport { scaleFontSize } from \"../chart/ChartUtils\"\nimport {\n    CategoricalMark,\n    MarkLine,\n    HorizontalCategoricalColorLegendOptions,\n} from \"./HorizontalColorLegendTypes\"\nimport { SPACE_BETWEEN_CATEGORICAL_BINS } from \"./HorizontalColorLegendConstants\"\n\n/**\n * Lays out labelled color swatches wrapped across as many lines as they need.\n * All coordinates are relative to the legend's own origin; the render\n * component offsets them by its `x`/`y` props.\n */\nexport class HorizontalCategoricalColorLegendState {\n    private readonly bins: CategoricalBin[]\n    private readonly options: HorizontalCategoricalColorLegendOptions\n\n    readonly rectPadding = 5\n    private readonly markPadding = 5\n\n    constructor(\n        bins: CategoricalBin[],\n        options: HorizontalCategoricalColorLegendOptions\n    ) {\n        this.bins = bins\n        this.options = options\n    }\n\n    @computed private get baseFontSize(): number {\n        return this.options.baseFontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get align(): HorizontalAlign {\n        return this.options.align ?? HorizontalAlign.center\n    }\n\n    @computed private get visibleBins(): CategoricalBin[] {\n        return this.bins.filter((bin) => !bin.isHidden)\n    }\n\n    @computed private get markLines(): MarkLine[] {\n        const fontSize = scaleFontSize(12.8, this.baseFontSize)\n        const rectSize = this.baseFontSize * 0.75\n\n        const lines: MarkLine[] = []\n        let marks: CategoricalMark[] = []\n        let xOffset = 0\n        let yOffset = 0\n        this.visibleBins.forEach((bin) => {\n            const labelBounds = Bounds.forText(bin.text, { fontSize })\n            const markWidth =\n                rectSize +\n                this.rectPadding +\n                labelBounds.width +\n                this.markPadding\n\n            if (xOffset + markWidth > this.options.width && marks.length > 0) {\n                lines.push({\n                    totalWidth: xOffset - this.markPadding,\n                    marks: marks,\n                })\n                marks = []\n                xOffset = 0\n                yOffset += rectSize + this.rectPadding\n            }\n\n            const markX = xOffset\n            const markY = yOffset\n\n            const label = {\n                text: bin.text,\n                bounds: labelBounds.set({\n                    x: markX + rectSize + this.rectPadding,\n                    y: markY + rectSize / 2,\n                }),\n                fontSize,\n            }\n\n            marks.push({\n                x: markX,\n                y: markY,\n                width: markWidth,\n                rectSize,\n                label,\n                bin,\n            })\n\n            xOffset += markWidth + SPACE_BETWEEN_CATEGORICAL_BINS\n        })\n\n        if (marks.length > 0)\n            lines.push({ totalWidth: xOffset - this.markPadding, marks: marks })\n\n        return lines\n    }\n\n    @computed get marks(): CategoricalMark[] {\n        const { markLines: lines, align } = this\n        const { width } = this.options\n\n        // Center each line\n        return lines.flatMap((line) => {\n            const xShift =\n                align === HorizontalAlign.center\n                    ? (width - line.totalWidth) / 2\n                    : align === HorizontalAlign.right\n                      ? width - line.totalWidth\n                      : 0\n            return line.marks.map((mark) => ({\n                ...mark,\n                x: mark.x + xShift,\n                label: {\n                    ...mark.label,\n                    bounds: mark.label.bounds.set({\n                        x: mark.label.bounds.x + xShift,\n                    }),\n                },\n            }))\n        })\n    }\n\n    @computed get height(): number {\n        return _.max(this.marks.map((mark) => mark.y + mark.rectSize)) ?? 0\n    }\n}\n","import * as React from \"react\"\nimport { Time } from \"@ourworldindata/types\"\nimport {\n    PlacedStackedPoint,\n    RenderStackedBarSeries,\n    STACKED_BAR_STYLE,\n} from \"./StackedConstants\"\nimport { makeFigmaId, makeSafeForCSS, roundForSvg } from \"@ourworldindata/utils\"\nimport { Emphasis } from \"../interaction/Emphasis\"\n\nexport function StackedBars({\n    series,\n    onMouseOver,\n    onMouseLeave,\n}: {\n    series: readonly RenderStackedBarSeries<Time>[]\n    onMouseOver?: (\n        bar: PlacedStackedPoint<Time>,\n        series: RenderStackedBarSeries<Time>\n    ) => void\n    onMouseLeave?: () => void\n}): React.ReactElement {\n    return (\n        <>\n            {series.map((series, index) => (\n                <g\n                    key={index}\n                    id={makeFigmaId(series.seriesName)}\n                    className={makeSafeForCSS(series.seriesName) + \"-segments\"}\n                >\n                    {series.placedPoints.map((bar, index) => {\n                        if (bar.missing) return null\n\n                        const isHovered = bar.time === series.hoverTime\n                        const emphasis = isHovered\n                            ? Emphasis.Highlighted\n                            : (series.emphasis ?? Emphasis.Default)\n                        const barOpacity = STACKED_BAR_STYLE[emphasis].opacity\n\n                        return (\n                            <rect\n                                key={index}\n                                id={makeFigmaId(bar.formattedTime)}\n                                x={roundForSvg(bar.x)}\n                                y={roundForSvg(bar.y)}\n                                width={roundForSvg(bar.barWidth)}\n                                height={roundForSvg(bar.barHeight)}\n                                fill={bar.color ?? series.color}\n                                opacity={barOpacity}\n                                onMouseOver={() => onMouseOver?.(bar, series)}\n                                onMouseLeave={() => onMouseLeave?.()}\n                            />\n                        )\n                    })}\n                </g>\n            ))}\n        </>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport { computed, action, observable, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    Bounds,\n    Time,\n    excludeUndefined,\n    exposeInstanceOnWindow,\n    getRelativeMouse,\n    guid,\n    makeFigmaId,\n    roundForSvg,\n} from \"@ourworldindata/utils\"\nimport { DualAxisComponent } from \"../axis/AxisViews\"\nimport { NoDataMessage } from \"../noDataMessage/NoDataMessage\"\nimport { VerticalColorLegend } from \"../legend/VerticalColorLegend\"\nimport { VerticalColorLegendState } from \"../legend/VerticalColorLegendState\"\nimport { TooltipFooterIcon } from \"../tooltip/TooltipProps.js\"\nimport {\n    Tooltip,\n    TooltipState,\n    TooltipTable,\n    makeTooltipRoundingNotice,\n    toTooltipTableColumns,\n} from \"../tooltip/Tooltip\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n} from \"../core/GrapherConstants\"\nimport { StackedBarChartState } from \"./StackedBarChartState.js\"\nimport {\n    LEGEND_STYLE_FOR_STACKED_CHARTS,\n    StackedPoint,\n    StackedSeries,\n    PlacedStackedBarSeries,\n    RenderStackedBarSeries,\n    STACKED_BAR_STYLE,\n} from \"./StackedConstants\"\nimport { DualAxis, HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\nimport { Color, HorizontalAlign, SeriesName } from \"@ourworldindata/types\"\nimport { getHoverStateForSeries } from \"../chart/ChartUtils\"\nimport { InteractionState } from \"../interaction/InteractionState\"\nimport { resolveEmphasis, Emphasis } from \"../interaction/Emphasis\"\nimport { BinEmphasis, toBinEmphasis } from \"../legend/LegendStyleConfig\"\nimport { HorizontalCategoricalColorLegend } from \"../legend/HorizontalCategoricalColorLegend\"\nimport { HorizontalCategoricalColorLegendState } from \"../legend/HorizontalCategoricalColorLegendState\"\nimport { ExternalColorLegendData } from \"../legend/HorizontalColorLegendTypes\"\nimport { CategoricalBin, ColorScaleBin } from \"../color/ColorScaleBin\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig.js\"\n\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { ChartManager } from \"../chart/ChartManager\"\nimport { ChartComponentProps } from \"../chart/ChartTypeMap.js\"\nimport { StackedBars } from \"./StackedBars\"\nimport {\n    getXAxisConfigDefaultsForStackedBar,\n    toPlacedStackedBarSeries,\n} from \"./StackedUtils\"\n\nexport type StackedBarChartProps = ChartComponentProps<StackedBarChartState>\n\n@observer\nexport class StackedBarChart\n    extends React.Component<StackedBarChartProps>\n    implements ChartInterface, AxisManager\n{\n    readonly minBarSpacing = 4\n\n    private readonly tooltipId = guid()\n\n    constructor(props: StackedBarChartProps) {\n        super(props)\n\n        makeObservable(this, {\n            legendHoverColor: observable,\n            tooltipState: observable,\n        })\n    }\n\n    /** Currently hovered legend color */\n    legendHoverColor: Color | undefined = undefined\n\n    tooltipState = new TooltipState<{\n        bar: StackedPoint<Time>\n        series: StackedSeries<Time>\n    }>()\n\n    legendStyleConfig = LEGEND_STYLE_FOR_STACKED_CHARTS\n\n    @computed get chartState(): StackedBarChartState {\n        return this.props.chartState\n    }\n\n    @computed private get manager(): ChartManager {\n        return this.chartState.manager\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get isStatic(): boolean {\n        return this.manager.isStatic ?? false\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed get detailsOrderedByReference(): string[] {\n        return this.manager.detailsOrderedByReference ?? []\n    }\n\n    @computed private get innerBounds(): Bounds {\n        return (\n            this.bounds\n                .padTop(this.paddingForLegendTop)\n                .padRight(this.paddingForLegendRight)\n                // top padding leaves room for tick labels\n                .padTop(6)\n                // bottom padding avoids axis labels to be cut off at some resolutions\n                .padBottom(2)\n        )\n    }\n\n    @computed private get dualAxis(): DualAxis {\n        const { horizontalAxisPart, verticalAxisPart } = this\n        return new DualAxis({\n            bounds: this.innerBounds,\n            horizontalAxis: horizontalAxisPart,\n            verticalAxis: verticalAxisPart,\n            comparisonLines: this.manager.comparisonLines,\n        })\n    }\n\n    @computed get yAxis(): VerticalAxis {\n        return this.dualAxis.verticalAxis\n    }\n\n    @computed get xAxis(): HorizontalAxis {\n        return this.dualAxis.horizontalAxis\n    }\n\n    @computed private get horizontalAxisPart(): HorizontalAxis {\n        return this.chartState.toHorizontalAxis(this.xAxisConfig)\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        const { yAxisConfig } = this.manager\n        const custom = { nice: true }\n        return new AxisConfig({ ...custom, ...yAxisConfig }, this)\n    }\n\n    @computed private get verticalAxisPart(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig)\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        const { xAxisConfig } = this.manager\n        const defaults = getXAxisConfigDefaultsForStackedBar(this.chartState)\n        return new AxisConfig({ ...defaults, ...xAxisConfig }, this)\n    }\n\n    @computed\n    get allStackedPoints(): readonly StackedPoint<number>[] {\n        return this.series.flatMap((series) => series.points)\n    }\n\n    @computed private get showHorizontalLegend(): boolean {\n        return !!(this.manager.isSemiNarrow || this.manager.isStaticAndSmall)\n    }\n\n    @computed private get legendAlign(): HorizontalAlign {\n        return HorizontalAlign.left\n    }\n\n    @computed private get paddingForLegendRight(): number {\n        return this.showHorizontalLegend\n            ? 0\n            : this.sidebarWidth > 0\n              ? this.sidebarWidth + 20\n              : 0\n    }\n\n    @computed private get paddingForLegendTop(): number {\n        return this.showHorizontalLegend\n            ? this.horizontalColorLegendState.height + 8\n            : 0\n    }\n\n    /** Series names matching the currently hovered legend item in the color legend */\n    @computed private get legendHoveredSeriesNames(): SeriesName[] {\n        const { legendHoverColor } = this\n\n        if (!legendHoverColor) return []\n\n        return _.uniq(\n            this.series\n                .filter((g) => g.color === legendHoverColor)\n                .map((g) => g.seriesName)\n        )\n    }\n\n    /** Series names matching the currently hovered legend item in the external facet legend */\n    @computed private get externalLegendHoveredSeriesNames(): SeriesName[] {\n        const { externalLegendHoverBin } = this.manager\n\n        if (!externalLegendHoverBin) return []\n\n        return this.chartState.rawSeries\n            .map((g) => g.seriesName)\n            .filter((name) => externalLegendHoverBin.contains(name))\n    }\n\n    @computed private get hoveredSeriesNames(): SeriesName[] {\n        return _.uniq([\n            ...this.legendHoveredSeriesNames,\n            ...this.externalLegendHoveredSeriesNames,\n        ])\n    }\n\n    @computed private get isHoverModeActive(): boolean {\n        return (\n            this.hoveredSeriesNames.length > 0 ||\n            !!this.manager.externalLegendHoverBin\n        )\n    }\n\n    private hoverStateForSeries(series: StackedSeries<Time>): InteractionState {\n        return getHoverStateForSeries(series, {\n            hoveredSeriesNames: this.hoveredSeriesNames,\n            isHoverModeActive: this.isHoverModeActive,\n        })\n    }\n\n    /** All colors that are currently hovered or focused */\n    @computed private get activeColors(): string[] {\n        const hoveredSeriesNamesSet = new Set(this.hoveredSeriesNames)\n        const hoveredColors = this.series\n            .filter((g) => hoveredSeriesNamesSet.has(g.seriesName))\n            .map((g) => g.color)\n\n        const focusedColors = this.series\n            .filter((g) => g.focus?.active)\n            .map((g) => g.color)\n\n        const activeColors = _.uniq(\n            excludeUndefined([...focusedColors, ...hoveredColors])\n        )\n\n        return activeColors\n    }\n\n    private readonly resolveLegendBinEmphasis = (\n        bin: ColorScaleBin\n    ): Emphasis => {\n        const isActive = this.activeColors?.includes(bin.color)\n\n        if (this.activeColors.length === 0) return Emphasis.Default\n\n        return isActive ? Emphasis.Highlighted : Emphasis.Muted\n    }\n\n    @computed private get categoricalLegendEmphasis(): BinEmphasis {\n        return toBinEmphasis(\n            this.categoricalLegendData,\n            this.resolveLegendBinEmphasis\n        )\n    }\n\n    @computed private get categoricalLegendData(): CategoricalBin[] {\n        return this.series\n            .map(\n                (series, index) =>\n                    new CategoricalBin({\n                        index,\n                        value: series.seriesName,\n                        label: series.seriesName,\n                        color: series.color,\n                    })\n            )\n            .toReversed() // Vertical legend orders things in the opposite direction we want\n    }\n\n    @computed private get maxLegendWidth(): number {\n        return this.showHorizontalLegend\n            ? this.bounds.width\n            : this.sidebarMaxWidth\n    }\n\n    @computed private get sidebarMaxWidth(): number {\n        return this.bounds.width / 5\n    }\n\n    @computed private get sidebarMinWidth(): number {\n        return 100\n    }\n\n    @computed private get showLegend(): boolean {\n        return !!this.manager.showLegend\n    }\n\n    @computed private get sidebarWidth(): number {\n        if (!this.showLegend) return 0\n        const {\n            sidebarMinWidth,\n            sidebarMaxWidth,\n            verticalColorLegendState: legendDimensions,\n        } = this\n        return Math.max(\n            Math.min(legendDimensions.width, sidebarMaxWidth),\n            sidebarMinWidth\n        )\n    }\n\n    @computed private get verticalColorLegendState(): VerticalColorLegendState {\n        return new VerticalColorLegendState(this.categoricalLegendData, {\n            baseFontSize: this.fontSize,\n            maxWidth: this.maxLegendWidth,\n        })\n    }\n\n    @computed\n    private get horizontalColorLegendState(): HorizontalCategoricalColorLegendState {\n        return new HorizontalCategoricalColorLegendState(\n            this.categoricalLegendData,\n            {\n                baseFontSize: this.fontSize,\n                width: this.bounds.width,\n                align: this.legendAlign,\n            }\n        )\n    }\n\n    @computed get externalLegend(): ExternalColorLegendData | undefined {\n        if (!this.showLegend) {\n            const categoricalLegendData = this.chartState.unstackedSeries\n                .map(\n                    (series, index) =>\n                        new CategoricalBin({\n                            index,\n                            value: series.seriesName,\n                            label: series.seriesName,\n                            color: series.color,\n                        })\n                )\n                .toReversed()\n\n            return {\n                categoricalLegendData,\n                categoricalLegendStyleConfig: this.legendStyleConfig,\n            }\n        }\n        return undefined\n    }\n\n    @computed private get tooltip(): React.ReactElement | undefined {\n        const {\n            tooltipState: { target, position, fading },\n            series,\n        } = this\n        const { formatColumn } = this.chartState\n\n        const { bar: hoverBar, series: hoverSeries } = target ?? {}\n        let hoverTime: number\n        if (hoverBar !== undefined) {\n            hoverTime = hoverBar.position\n        } else return\n\n        const title = formatColumn.formatTime(hoverTime)\n        const titleAnnotation = this.xAxis.label ? `(${this.xAxis.label})` : \"\"\n\n        const { displayUnit } = formatColumn\n\n        const totalValue = _.sum(\n            series.map(\n                ({ points }) =>\n                    points.find((bar) => bar.position === hoverTime)?.value ?? 0\n            )\n        )\n\n        const roundingNotice = formatColumn.roundsToSignificantFigures\n            ? {\n                  icon: TooltipFooterIcon.None,\n                  text: makeTooltipRoundingNotice([\n                      formatColumn.numSignificantFigures,\n                  ]),\n              }\n            : undefined\n        const footer = excludeUndefined([roundingNotice])\n\n        const hoverPoints = series.map((series) => {\n            const point = series.points.find(\n                (bar) => bar.position === hoverTime\n            )\n            return {\n                seriesName: series.seriesName,\n                seriesColor: series.color,\n                point,\n            }\n        })\n        const [positivePoints, negativePoints] = _.partition(\n            hoverPoints,\n            ({ point }) => (point?.value ?? 0) >= 0\n        )\n        const sortedHoverPoints = [\n            ...positivePoints.toReversed(),\n            ...negativePoints,\n        ]\n\n        return (\n            <Tooltip\n                id={this.tooltipId}\n                tooltipManager={this.manager}\n                x={position.x}\n                y={position.y}\n                style={{ maxWidth: \"500px\" }}\n                offsetX={20}\n                offsetY={-16}\n                title={title}\n                titleAnnotation={titleAnnotation}\n                subtitle={displayUnit}\n                subtitleFormat=\"unit\"\n                footer={footer}\n                dissolve={fading}\n                dismiss={() => (this.tooltipState.target = null)}\n            >\n                <TooltipTable\n                    columns={toTooltipTableColumns(formatColumn)}\n                    totals={[totalValue]}\n                    rows={sortedHoverPoints.map(\n                        ({ point, seriesName: name, seriesColor }) => {\n                            const focused = hoverSeries?.seriesName === name\n                            const fake = point?.missing || point?.interpolated\n                            const blurred = fake ?? true\n                            const values = [fake ? undefined : point?.value]\n\n                            const color = point?.color ?? seriesColor\n                            const emphasis = focused\n                                ? Emphasis.Highlighted\n                                : Emphasis.Default\n                            const opacity = STACKED_BAR_STYLE[emphasis].opacity\n                            const swatch = { color, opacity }\n\n                            return { name, swatch, blurred, focused, values }\n                        }\n                    )}\n                />\n            </Tooltip>\n        )\n    }\n\n    @action.bound onLegendMouseOver(bin: ColorScaleBin): void {\n        this.chartState.focusArray.clear()\n        this.legendHoverColor = bin.color\n    }\n\n    @action.bound onLegendMouseLeave(): void {\n        this.legendHoverColor = undefined\n    }\n\n    @action.bound onBarMouseOver(\n        bar: StackedPoint<Time>,\n        series: StackedSeries<Time>\n    ): void {\n        this.chartState.focusArray.clear()\n        this.tooltipState.target = { bar, series }\n    }\n\n    @action.bound private onMouseMove(ev: React.MouseEvent): void {\n        const ref = this.manager.base?.current\n        if (ref) {\n            this.tooltipState.position = getRelativeMouse(ref, ev)\n        }\n    }\n\n    @action.bound onBarMouseLeave(): void {\n        this.tooltipState.target = null\n    }\n\n    renderLegend(): React.ReactElement | undefined {\n        const { showLegend, showHorizontalLegend } = this\n\n        if (!showLegend) return\n\n        return showHorizontalLegend ? (\n            <HorizontalCategoricalColorLegend\n                state={this.horizontalColorLegendState}\n                x={this.legendX}\n                y={this.categoryLegendY}\n                interactive={!this.isStatic}\n                styleConfig={this.legendStyleConfig}\n                binEmphasis={this.categoricalLegendEmphasis}\n                onMouseOver={this.onLegendMouseOver}\n                onMouseLeave={this.onLegendMouseLeave}\n            />\n        ) : (\n            <VerticalColorLegend\n                state={this.verticalColorLegendState}\n                x={this.legendX}\n                y={this.legendY}\n                interactive={!this.isStatic}\n                styleConfig={this.legendStyleConfig}\n                binEmphasis={this.categoricalLegendEmphasis}\n                onMouseOver={this.onLegendMouseOver}\n                onMouseLeave={this.onLegendMouseLeave}\n            />\n        )\n    }\n\n    renderAxis(): React.ReactElement {\n        const { manager } = this\n\n        return (\n            <DualAxisComponent\n                dualAxis={this.dualAxis}\n                showTickMarks={true}\n                detailsMarker={manager.detailsMarkerInSvg}\n            />\n        )\n    }\n\n    renderBars(): React.ReactElement {\n        return (\n            <StackedBars\n                series={this.renderSeries}\n                onMouseOver={this.onBarMouseOver}\n                onMouseLeave={this.onBarMouseLeave}\n            />\n        )\n    }\n\n    renderStatic(): React.ReactElement {\n        return (\n            <>\n                {this.renderAxis()}\n                <g id={makeFigmaId(\"bars\")}>{this.renderBars()}</g>\n                {this.renderLegend()}\n            </>\n        )\n    }\n\n    renderInteractive(): React.ReactElement {\n        const { bounds } = this\n\n        return (\n            <g onMouseMove={this.onMouseMove}>\n                <rect\n                    x={roundForSvg(bounds.left)}\n                    y={roundForSvg(bounds.top)}\n                    width={roundForSvg(bounds.width)}\n                    height={roundForSvg(bounds.height)}\n                    opacity={0}\n                    fill=\"rgba(255,255,255,0)\"\n                />\n                {this.renderAxis()}\n                {this.renderBars()}\n                {this.renderLegend()}\n                {this.tooltip}\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        const { bounds } = this\n\n        if (this.chartState.errorInfo.reason)\n            return (\n                <g>\n                    {this.renderAxis()}\n                    <NoDataMessage\n                        manager={this.manager}\n                        bounds={bounds}\n                        message={this.chartState.errorInfo.reason}\n                    />\n                </g>\n            )\n\n        return this.manager.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n\n    @computed private get categoryLegendY(): number {\n        return this.bounds.top\n    }\n\n    @computed private get legendY(): number {\n        // Small offset aligns the legend with the chart area's top edge in relative mode\n        return this.bounds.top + 3\n    }\n\n    @computed private get legendX(): number {\n        return this.showHorizontalLegend\n            ? this.bounds.left\n            : this.bounds.right - this.sidebarWidth\n    }\n\n    @computed get series(): readonly StackedSeries<Time>[] {\n        return this.chartState.series\n    }\n\n    @computed\n    private get placedSeries(): readonly PlacedStackedBarSeries<Time>[] {\n        return toPlacedStackedBarSeries(this.series, this.dualAxis)\n    }\n\n    @computed\n    private get renderSeries(): readonly RenderStackedBarSeries<Time>[] {\n        const { target } = this.tooltipState\n        return this.placedSeries.map((series) => {\n            const hover = this.hoverStateForSeries(series)\n            const emphasis = resolveEmphasis({ hover, focus: series.focus })\n\n            return {\n                ...series,\n                emphasis,\n                hover,\n                hoverTime:\n                    target?.series.seriesName === series.seriesName\n                        ? target.bar.time\n                        : undefined,\n            }\n        })\n    }\n\n    override componentDidMount(): void {\n        exposeInstanceOnWindow(this)\n    }\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport {\n    Bounds,\n    dyFromAlign,\n    makeFigmaId,\n    roundForSvg,\n} from \"@ourworldindata/utils\"\nimport { VerticalAlign } from \"@ourworldindata/types\"\nimport { STACKED_BAR_STYLE } from \"./StackedConstants\"\nimport {\n    LABEL_STYLE,\n    RenderBarSegment,\n    RenderDiscreteBarRow,\n} from \"./StackedDiscreteBarChartConstants.js\"\nimport { isDarkColor } from \"../color/ColorUtils\"\nimport { HorizontalAxis } from \"../axis/Axis\"\nimport { SeriesLabel } from \"../seriesLabel/SeriesLabel.js\"\n\nconst labelToBarPadding = 5\n\nexport function StackedDiscreteBarRow({\n    row,\n    y = 0,\n    barHeight,\n    labelFontSize,\n    yAxis,\n    showTotalValueLabel,\n    formatValueForLabel,\n    onEntityMouseEnter,\n    onEntityMouseLeave,\n    onClearTooltip,\n}: {\n    row: RenderDiscreteBarRow\n    y?: number\n    barHeight: number\n    labelFontSize: number\n    yAxis: HorizontalAxis\n    showTotalValueLabel: boolean\n    formatValueForLabel: (value: number) => string\n    onEntityMouseEnter: (entityName: string, seriesName?: string) => void\n    onEntityMouseLeave: () => void\n    onClearTooltip: () => void\n}): React.ReactElement {\n    const { entityName, label, segments, totalValue, emphasis } = row\n\n    const totalLabel = formatValueForLabel(totalValue)\n    const showLabelInsideBar = segments.length > 1\n\n    const labelStyle = LABEL_STYLE[emphasis]\n\n    // We can't just take the last segment here because if it has a negative value,\n    // its position on the chart might actually be leftmost rather than rightmost.\n    const lastValue =\n        _.max(segments.map((seg) => seg.point.valueOffset + seg.point.value)) ??\n        0\n\n    return (\n        <g\n            id={makeFigmaId(entityName)}\n            transform={`translate(0, ${roundForSvg(y)})`}\n            opacity={1}\n        >\n            {segments.map((segment) => (\n                <StackedDiscreteBar\n                    key={segment.seriesName}\n                    segment={segment}\n                    entityName={entityName}\n                    barHeight={barHeight}\n                    label={formatValueForLabel(segment.point.value)}\n                    labelFontSize={labelFontSize}\n                    showLabelInsideBar={showLabelInsideBar}\n                    onMouseEnter={onEntityMouseEnter}\n                    onMouseLeave={onEntityMouseLeave}\n                />\n            ))}\n            <SeriesLabel\n                state={label}\n                x={yAxis.place(0) - labelToBarPadding}\n                y={-label.height / 2}\n                onMouseEnter={(): void => onEntityMouseEnter(label.text)}\n                onMouseLeave={onEntityMouseLeave}\n                onInfoTooltipShow={onClearTooltip}\n                opacity={labelStyle.opacity}\n            />\n            {showTotalValueLabel && (\n                <text\n                    transform={`translate(${roundForSvg(\n                        yAxis.place(lastValue) + labelToBarPadding\n                    )}, 0)`}\n                    dy={dyFromAlign(VerticalAlign.middle)}\n                    opacity={labelStyle.opacity}\n                    fill=\"#555\"\n                    fontSize={labelFontSize}\n                >\n                    {totalLabel}\n                </text>\n            )}\n        </g>\n    )\n}\n\nfunction StackedDiscreteBar({\n    segment,\n    entityName,\n    barHeight,\n    label,\n    labelFontSize,\n    showLabelInsideBar,\n    onMouseEnter,\n    onMouseLeave,\n}: {\n    segment: RenderBarSegment\n    entityName: string\n    barHeight: number\n    label: string\n    labelFontSize: number\n    showLabelInsideBar: boolean\n    onMouseEnter: (entityName: string, seriesName: string) => void\n    onMouseLeave: () => void\n}): React.ReactElement {\n    const labelBounds = Bounds.forText(label, { fontSize: labelFontSize })\n    const canShowLabel =\n        showLabelInsideBar &&\n        labelBounds.width < 0.85 * segment.barWidth &&\n        labelBounds.height < 0.85 * barHeight\n    const labelColor = isDarkColor(segment.color) ? \"#fff\" : \"#000\"\n    const labelOpacity = LABEL_STYLE[segment.emphasis].opacity\n    const segmentStyle = STACKED_BAR_STYLE[segment.emphasis]\n\n    return (\n        <g\n            id={makeFigmaId(segment.seriesName)}\n            onMouseEnter={(): void =>\n                onMouseEnter(entityName, segment.seriesName)\n            }\n            onMouseLeave={onMouseLeave}\n        >\n            <rect\n                id={makeFigmaId(\"bar\")}\n                x={0}\n                y={0}\n                transform={`translate(${roundForSvg(segment.x)}, ${roundForSvg(\n                    -barHeight / 2\n                )})`}\n                width={roundForSvg(segment.barWidth)}\n                height={roundForSvg(barHeight)}\n                fill={segment.color}\n                opacity={segmentStyle.opacity}\n                style={{ transition: \"height 200ms ease\" }}\n            />\n            {canShowLabel && (\n                <text\n                    x={roundForSvg(segment.x + segment.barWidth / 2)}\n                    y={0}\n                    width={roundForSvg(segment.barWidth)}\n                    height={roundForSvg(barHeight)}\n                    fill={labelColor}\n                    opacity={labelOpacity}\n                    fontSize={labelFontSize}\n                    textAnchor=\"middle\"\n                    dy={dyFromAlign(VerticalAlign.middle)}\n                >\n                    {label}\n                </text>\n            )}\n        </g>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport * as R from \"remeda\"\nimport {\n    Bounds,\n    Time,\n    HorizontalAlign,\n    EntityName,\n    excludeUndefined,\n    numberMagnitude,\n    getRelativeMouse,\n    exposeInstanceOnWindow,\n    makeFigmaId,\n    bind,\n    guid,\n    roundForSvg,\n} from \"@ourworldindata/utils\"\nimport { action, computed, makeObservable, observable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { ScaleType, SeriesName } from \"@ourworldindata/types\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    FontSettings,\n} from \"../core/GrapherConstants\"\nimport { roundFontSize, scaleFontSize } from \"../chart/ChartUtils\"\nimport { enrichSeriesWithLabels } from \"../rowSeriesLabels/RowSeriesLabelHelpers.js\"\nimport {\n    HorizontalAxisComponent,\n    HorizontalAxisGridLines,\n    HorizontalAxisZeroLine,\n} from \"../axis/AxisViews\"\nimport { AxisConfig } from \"../axis/AxisConfig\"\nimport { NoDataMessage } from \"../noDataMessage/NoDataMessage\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { ChartManager } from \"../chart/ChartManager\"\nimport { OwidTable, CoreColumn } from \"@ourworldindata/core-table\"\nimport { TooltipFooterIcon } from \"../tooltip/TooltipProps.js\"\nimport {\n    Tooltip,\n    TooltipState,\n    TooltipTable,\n    makeTooltipRoundingNotice,\n    makeTooltipToleranceNotice,\n    toTooltipTableColumns,\n} from \"../tooltip/Tooltip\"\nimport {\n    LEGEND_STYLE_FOR_STACKED_CHARTS,\n    StackedPoint,\n    StackedSeries,\n} from \"./StackedConstants\"\nimport {\n    PlacedDiscreteBarRow,\n    RenderBarSegment,\n    RenderDiscreteBarRow,\n    SizedDiscreteBarRow,\n} from \"./StackedDiscreteBarChartConstants.js\"\nimport { HorizontalCategoricalColorLegend } from \"../legend/HorizontalCategoricalColorLegend\"\nimport { HorizontalCategoricalColorLegendState } from \"../legend/HorizontalCategoricalColorLegendState\"\nimport { ExternalColorLegendData } from \"../legend/HorizontalColorLegendTypes\"\nimport { CategoricalBin, ColorScaleBin } from \"../color/ColorScaleBin\"\nimport { Emphasis, resolveEmphasis } from \"../interaction/Emphasis\"\nimport { BinEmphasis, toBinEmphasis } from \"../legend/LegendStyleConfig\"\nimport { HorizontalAxis } from \"../axis/Axis\"\nimport { StackedDiscreteBarChartState } from \"./StackedDiscreteBarChartState\"\nimport { ChartComponentProps } from \"../chart/ChartTypeMap.js\"\nimport { StackedDiscreteBarRow } from \"./StackedDiscreteBarRow\"\nimport { AnimatedRows } from \"../animation/AnimatedRows.js\"\nimport { InteractionState } from \"../interaction/InteractionState.js\"\n\nexport interface StackedDiscreteBarChartManager extends ChartManager {\n    endTime?: Time\n    hideTotalValueLabel?: boolean\n}\n\nconst BAR_SPACING_FACTOR = 0.35\n\ntype StackedDiscreteBarChartProps =\n    ChartComponentProps<StackedDiscreteBarChartState> & {\n        hideLegend?: boolean\n    }\n\n@observer\nexport class StackedDiscreteBarChart\n    extends React.Component<StackedDiscreteBarChartProps>\n    implements ChartInterface\n{\n    private readonly base = React.createRef<SVGGElement>()\n\n    private legendHoverSeriesName: SeriesName | undefined = undefined\n\n    private readonly tooltipId = guid()\n    private readonly tooltipState = new TooltipState<{\n        entityName: string\n        seriesName?: string\n    }>()\n\n    constructor(props: StackedDiscreteBarChartProps) {\n        super(props)\n\n        makeObservable<\n            StackedDiscreteBarChart,\n            \"tooltipState\" | \"legendHoverSeriesName\"\n        >(this, {\n            legendHoverSeriesName: observable,\n            tooltipState: observable,\n        })\n    }\n\n    @computed get chartState(): StackedDiscreteBarChartState {\n        return this.props.chartState\n    }\n\n    @computed private get manager(): StackedDiscreteBarChartManager {\n        return this.chartState.manager\n    }\n\n    @computed private get bounds(): Bounds {\n        // Bottom padding avoids axis labels to be cut off at some resolutions\n        return (this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS)\n            .padRight(10)\n            .padBottom(2)\n    }\n\n    @computed private get baseFontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get isStatic(): boolean {\n        return this.manager.isStatic ?? false\n    }\n\n    @computed private get showLegend(): boolean {\n        return (\n            !this.props.hideLegend &&\n            this.legendBins.length > 1 &&\n            !!this.manager.showLegend\n        )\n    }\n\n    @computed private get boundsWithoutLegend(): Bounds {\n        return this.bounds.padTop(\n            this.showLegend && this.legendState.height > 0\n                ? this.legendState.height + this.legendPaddingTop\n                : 0\n        )\n    }\n\n    @computed private get legendPaddingTop(): number {\n        return 0.5 * this.baseFontSize\n    }\n\n    @computed private get legendWidth(): number {\n        return this.bounds.width\n    }\n\n    @computed get fontSize(): number {\n        return this.baseFontSize\n    }\n\n    @computed private get legendBins(): CategoricalBin[] {\n        return this.series.map((series, index) => {\n            return new CategoricalBin({\n                index,\n                value: series.seriesName,\n                label: series.seriesName,\n                color: series.color,\n            })\n        })\n    }\n\n    @computed private get categoricalLegendData(): CategoricalBin[] {\n        return this.showLegend ? this.legendBins : []\n    }\n\n    /**\n     * In stacked discrete bar charts, both entities and columns can be focused.\n     * This getter returns the focused series names, grouped by whether they are\n     * entities or columns.\n     */\n    @computed get focusedSeriesNamesByType(): Record<\n        \"entity\" | \"column\",\n        SeriesName[]\n    > {\n        const {\n            focusArray,\n            selectionArray: { selectedEntityNames },\n        } = this.chartState\n\n        const [focusedEntities, focusedColumns] = R.partition(\n            focusArray.seriesNames,\n            (seriesName) => selectedEntityNames.includes(seriesName)\n        )\n\n        return { entity: focusedEntities, column: focusedColumns }\n    }\n\n    private readonly resolveLegendBinEmphasis = (\n        bin: ColorScaleBin\n    ): Emphasis => {\n        const { focusArray } = this.chartState\n\n        // If an entity is focused, then all legend bins are active\n        if (this.focusedSeriesNamesByType.entity.length > 0) {\n            return Emphasis.Default\n        }\n\n        // Check if the legend bin is currently hovered\n        if (this.legendHoverSeriesName) {\n            return bin.contains(this.legendHoverSeriesName)\n                ? Emphasis.Highlighted\n                : Emphasis.Muted\n        }\n\n        // Check if a bar segment is currently hovered that maps to the legend bin\n        if (this.tooltipState.target?.seriesName) {\n            return bin.contains(this.tooltipState.target.seriesName)\n                ? Emphasis.Highlighted\n                : Emphasis.Muted\n        }\n\n        // Check if a column is focused that corresponds to the legend bin\n        if (this.focusedSeriesNamesByType.column.length > 0) {\n            const binSeriesName = this.series.find((s) =>\n                bin.contains(s.seriesName)\n            )?.seriesName\n            return binSeriesName && focusArray.has(binSeriesName)\n                ? Emphasis.Highlighted\n                : Emphasis.Muted\n        }\n\n        return Emphasis.Default\n    }\n\n    @computed private get categoricalLegendEmphasis(): BinEmphasis {\n        return toBinEmphasis(\n            this.categoricalLegendData,\n            this.resolveLegendBinEmphasis\n        )\n    }\n\n    legendStyleConfig = LEGEND_STYLE_FOR_STACKED_CHARTS\n\n    @computed get externalLegend(): ExternalColorLegendData | undefined {\n        if (!this.showLegend) {\n            return {\n                categoricalLegendData: this.legendBins,\n                categoricalLegendStyleConfig: this.legendStyleConfig,\n            }\n        }\n        return undefined\n    }\n\n    @action.bound onLegendMouseOver(bin: ColorScaleBin): void {\n        this.chartState.focusArray.clear()\n        this.legendHoverSeriesName = R.first(\n            this.series\n                .map((s) => s.seriesName)\n                .filter((name) => bin.contains(name))\n        )\n    }\n\n    @action.bound onLegendMouseLeave(): void {\n        this.legendHoverSeriesName = undefined\n    }\n\n    @computed private get legendState(): HorizontalCategoricalColorLegendState {\n        return new HorizontalCategoricalColorLegendState(\n            this.categoricalLegendData,\n            {\n                baseFontSize: this.fontSize,\n                width: this.legendWidth,\n                align: HorizontalAlign.left,\n            }\n        )\n    }\n\n    @action.bound private onMouseMove(ev: React.MouseEvent): void {\n        const ref = this.manager.base?.current\n        if (ref) {\n            this.tooltipState.position = getRelativeMouse(ref, ev)\n        }\n    }\n\n    @computed private get series(): readonly StackedSeries<EntityName>[] {\n        return this.chartState.series\n    }\n\n    @computed private get barCount(): number {\n        return this.chartState.rows.length\n    }\n\n    @computed private get availableHeightPerSeries(): number {\n        return this.boundsWithoutLegend.height / this.barCount\n    }\n\n    @computed private get labelFontSize(): number {\n        return roundFontSize(\n            Math.min(\n                scaleFontSize(12, this.fontSize),\n                1.1 * this.availableHeightPerSeries\n            )\n        )\n    }\n\n    @computed private get labelStyle(): FontSettings {\n        return { fontSize: this.labelFontSize, fontWeight: 700, lineHeight: 1 }\n    }\n\n    @computed private get totalValueLabelStyle(): Partial<FontSettings> {\n        return { fontSize: this.labelFontSize }\n    }\n\n    @computed private get sizedRows(): readonly SizedDiscreteBarRow[] {\n        return enrichSeriesWithLabels({\n            series: this.chartState.sortedRows,\n            availableHeightPerSeries: this.availableHeightPerSeries,\n            minLabelWidth: 0.3 * this.boundsWithoutLegend.width,\n            maxLabelWidth: 0.66 * this.boundsWithoutLegend.width,\n            fontSettings: this.labelStyle,\n            showRegionTooltip: !this.manager.isStatic,\n        })\n    }\n\n    @computed private get labelWidth(): number {\n        return _.max(this.sizedRows.map((d) => d.label.width)) ?? 0\n    }\n\n    @computed private get showTotalValueLabel(): boolean {\n        return !this.manager.isRelativeMode && !this.manager.hideTotalValueLabel\n    }\n\n    @computed private get showHorizontalAxis(): boolean {\n        return !this.showTotalValueLabel\n    }\n\n    // The amount of space we need to allocate for total value labels on the right\n    @computed private get totalValueLabelWidth(): number {\n        if (!this.showTotalValueLabel) return 0\n\n        const labels = this.sizedRows.map((d) =>\n            this.formatValueForLabel(d.totalValue)\n        )\n        const longestLabel = _.maxBy(labels, (l) => l.length)\n        return Bounds.forText(longestLabel, this.totalValueLabelStyle).width\n    }\n\n    @computed private get x0(): number {\n        return 0\n    }\n\n    @computed private get allPoints(): StackedPoint<EntityName>[] {\n        return this.series.flatMap((series) => series.points)\n    }\n\n    @computed private get xDomainDefault(): [number, number] {\n        const maxValues = this.allPoints.map(\n            (point) => point.value + point.valueOffset\n        )\n        return [this.x0, Math.max(this.x0, _.max(maxValues) as number)]\n    }\n\n    @computed private get xRange(): [number, number] {\n        return [\n            this.boundsWithoutLegend.left + this.labelWidth,\n            this.boundsWithoutLegend.right - this.totalValueLabelWidth,\n        ]\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        return new AxisConfig(this.manager.yAxisConfig, this)\n    }\n\n    @computed get yAxis(): HorizontalAxis {\n        const axis = this.yAxisConfig.toHorizontalAxis()\n        axis.updateDomainPreservingUserSettings(this.xDomainDefault)\n\n        axis.scaleType = ScaleType.linear\n        axis.formatColumn = this.yColumns[0]\n        axis.range = this.xRange\n        axis.label = \"\"\n        return axis\n    }\n\n    @computed private get innerBounds(): Bounds {\n        return this.boundsWithoutLegend\n            .padLeft(this.labelWidth)\n            .padBottom(this.showHorizontalAxis ? this.yAxis.height : 0)\n            .padRight(this.totalValueLabelWidth)\n    }\n\n    /** The total height of the series, i.e. the height of the bar + the white space around it */\n    @computed private get seriesHeight(): number {\n        return this.innerBounds.height / this.barCount\n    }\n\n    @computed private get barSpacing(): number {\n        return this.seriesHeight * BAR_SPACING_FACTOR\n    }\n\n    @computed private get barHeight(): number {\n        const totalWhiteSpace = this.barCount * this.barSpacing\n        return (this.innerBounds.height - totalWhiteSpace) / this.barCount\n    }\n\n    @computed private get isHoverModeActive(): boolean {\n        return (\n            this.legendHoverSeriesName !== undefined ||\n            this.tooltipState.target?.seriesName !== undefined ||\n            this.tooltipState.target?.entityName !== undefined\n        )\n    }\n\n    @computed private get placedRows(): PlacedDiscreteBarRow[] {\n        const { innerBounds, barHeight, barSpacing, yAxis, x0 } = this\n\n        const topYOffset = innerBounds.top + barHeight / 2 + barSpacing / 2\n\n        return this.sizedRows.map((d, i) => ({\n            ...d,\n            yPosition: topYOffset + (barHeight + barSpacing) * i,\n            placedBars: d.bars.map((bar) => {\n                let barX = yAxis.place(x0 + bar.point.valueOffset)\n                const barWidth = Math.abs(\n                    yAxis.place(bar.point.value) - yAxis.place(x0)\n                )\n                if (bar.point.value < 0) barX -= barWidth\n                return { ...bar, x: barX, barWidth }\n            }),\n        }))\n    }\n\n    @computed private get renderRows(): RenderDiscreteBarRow[] {\n        const {\n            legendHoverSeriesName,\n            tooltipState: { target },\n            chartState: { focusArray },\n        } = this\n\n        return this.placedRows.map((row) => {\n            // Check if the row is focused\n            const rowFocus = focusArray.state(row.entityName)\n\n            // Check if any of the bar segments is focused\n            const segments: RenderBarSegment[] = row.placedBars.map(\n                (placedBar) => {\n                    // Check if the bar segment is hovered\n                    const isHovered =\n                        legendHoverSeriesName === placedBar.seriesName ||\n                        // The bar segment itself is hovered\n                        (target?.seriesName === placedBar.seriesName &&\n                            target.entityName === row.entityName) ||\n                        // The whole row is hovered\n                        (target?.entityName === row.entityName &&\n                            target.seriesName === undefined)\n\n                    // Check if the bar segment is focused\n                    const isFocused =\n                        rowFocus.active ||\n                        focusArray.state(placedBar.seriesName).active\n\n                    const hover = new InteractionState(\n                        isHovered,\n                        this.isHoverModeActive\n                    )\n                    const focus = new InteractionState(\n                        isFocused,\n                        !focusArray.isEmpty\n                    )\n\n                    const emphasis = resolveEmphasis({ hover, focus })\n\n                    return { ...placedBar, hover, focus, emphasis }\n                }\n            )\n\n            const hasHighlightedSegment = segments.some(\n                (segment) => segment.emphasis === Emphasis.Highlighted\n            )\n            const rowEmphasis = hasHighlightedSegment\n                ? Emphasis.Default\n                : resolveEmphasis({ focus: rowFocus })\n\n            return { ...row, emphasis: rowEmphasis, segments }\n        })\n    }\n\n    @computed private get formatColumn(): CoreColumn {\n        return this.yColumns[0]\n    }\n\n    @bind private formatValueForLabel(value: number): string {\n        // Compute how many decimal places we should show.\n        // Basically, this makes us show 2 significant digits, or no decimal places if the number\n        // is big enough already.\n        const magnitude = numberMagnitude(value)\n        return this.formatColumn.formatValueShort(value, {\n            numDecimalPlaces: Math.max(0, -magnitude + 2),\n        })\n    }\n\n    @computed private get inputTable(): OwidTable {\n        return this.chartState.inputTable\n    }\n\n    @computed private get yColumns(): CoreColumn[] {\n        return this.chartState.yColumns\n    }\n\n    @action.bound private clearTooltip(): void {\n        this.tooltipState.target = null\n    }\n\n    @action.bound private onEntityMouseEnter(\n        entityName: string,\n        seriesName?: string\n    ): void {\n        this.chartState.focusArray.clear()\n        this.tooltipState.target = { entityName, seriesName }\n    }\n\n    @action.bound private onEntityMouseLeave(): void {\n        this.clearTooltip()\n    }\n\n    @computed private get tooltip(): React.ReactElement | undefined {\n        const {\n                tooltipState: { target, position, fading },\n                formatColumn: { displayUnit },\n                manager: { endTime: targetTime },\n                inputTable: { timeColumn },\n            } = this,\n            item = this.placedRows.find(\n                ({ entityName }) => entityName === target?.entityName\n            ),\n            hasNotice = item?.bars.some(\n                ({ point }) =>\n                    !point.missing &&\n                    !point.interpolated &&\n                    point.time !== targetTime\n            ),\n            targetNotice = hasNotice\n                ? timeColumn.formatValue(targetTime)\n                : undefined\n\n        const toleranceNotice = targetNotice\n            ? {\n                  icon: TooltipFooterIcon.Notice,\n                  text: makeTooltipToleranceNotice(targetNotice),\n              }\n            : undefined\n        const roundingNotice = this.formatColumn.roundsToSignificantFigures\n            ? {\n                  icon: TooltipFooterIcon.None,\n                  text: makeTooltipRoundingNotice([\n                      this.formatColumn.numSignificantFigures,\n                  ]),\n              }\n            : undefined\n        const footer = excludeUndefined([toleranceNotice, roundingNotice])\n\n        return (\n            target &&\n            item && (\n                <Tooltip\n                    id={this.tooltipId}\n                    tooltipManager={this.manager}\n                    x={position.x}\n                    y={position.y}\n                    style={{ maxWidth: \"400px\" }}\n                    offsetX={20}\n                    offsetY={-16}\n                    title={target.entityName}\n                    subtitle={displayUnit}\n                    subtitleFormat=\"unit\"\n                    footer={footer}\n                    dissolve={fading}\n                    dismiss={() => (this.tooltipState.target = null)}\n                >\n                    <TooltipTable\n                        columns={toTooltipTableColumns(this.formatColumn)}\n                        totals={[item.totalValue]}\n                        rows={item.bars.map((bar) => {\n                            const {\n                                seriesName: name,\n                                color,\n                                point: { value, time, missing, interpolated },\n                            } = bar\n\n                            const blurred = missing || interpolated\n\n                            return {\n                                name,\n                                swatch: { color },\n                                blurred,\n                                focused: name === target.seriesName,\n                                values: [!blurred ? value : undefined],\n                                originalTime:\n                                    !blurred && time !== targetTime\n                                        ? timeColumn.formatValue(time)\n                                        : undefined,\n                            }\n                        })}\n                    ></TooltipTable>\n                </Tooltip>\n            )\n        )\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataMessage\n                    manager={this.manager}\n                    bounds={this.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return this.manager.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n\n    private renderLegend(): React.ReactElement | undefined {\n        if (!this.showLegend) return\n        return (\n            <HorizontalCategoricalColorLegend\n                state={this.legendState}\n                x={this.bounds.x}\n                y={this.bounds.top}\n                interactive={!this.isStatic}\n                styleConfig={this.legendStyleConfig}\n                binEmphasis={this.categoricalLegendEmphasis}\n                onMouseOver={this.onLegendMouseOver}\n                onMouseLeave={this.onLegendMouseLeave}\n            />\n        )\n    }\n\n    private renderAxis(): React.ReactElement {\n        const { boundsWithoutLegend: bounds, yAxis, innerBounds } = this\n\n        return (\n            <>\n                {this.showHorizontalAxis && (\n                    <>\n                        <HorizontalAxisComponent\n                            bounds={bounds}\n                            axis={yAxis}\n                            preferredAxisPosition={innerBounds.bottom}\n                        />\n                        <HorizontalAxisGridLines\n                            axis={yAxis}\n                            bounds={innerBounds}\n                        />\n                    </>\n                )}\n                <HorizontalAxisZeroLine\n                    axis={yAxis}\n                    bounds={innerBounds}\n                    strokeWidth={0.5}\n                    // Moves the zero line a little to the left\n                    // to avoid overlap with the bars\n                    align={HorizontalAlign.right}\n                />\n            </>\n        )\n    }\n\n    private renderStatic(): React.ReactElement {\n        return (\n            <>\n                {this.renderLegend()}\n                {this.renderAxis()}\n                <g id={makeFigmaId(\"bars\")}>\n                    {this.renderRows.map((row) => (\n                        <StackedDiscreteBarRow\n                            key={row.entityName}\n                            row={row}\n                            y={row.yPosition}\n                            yAxis={this.yAxis}\n                            barHeight={this.barHeight}\n                            labelFontSize={this.labelFontSize}\n                            showTotalValueLabel={this.showTotalValueLabel}\n                            formatValueForLabel={this.formatValueForLabel}\n                            onEntityMouseEnter={this.onEntityMouseEnter}\n                            onEntityMouseLeave={this.onEntityMouseLeave}\n                            onClearTooltip={this.clearTooltip}\n                        />\n                    ))}\n                </g>\n            </>\n        )\n    }\n\n    private renderInteractive(): React.ReactElement {\n        const { bounds } = this\n\n        return (\n            <g ref={this.base} onMouseMove={this.onMouseMove}>\n                <rect\n                    x={roundForSvg(bounds.left)}\n                    y={roundForSvg(bounds.top)}\n                    width={roundForSvg(bounds.width)}\n                    height={roundForSvg(bounds.height)}\n                    opacity={0}\n                    fill=\"rgba(255,255,255,0)\"\n                />\n                {this.renderLegend()}\n                {this.renderAxis()}\n                <AnimatedRows\n                    items={this.renderRows}\n                    keyAccessor={(d) => d.entityName}\n                    getY={(d) => d.yPosition}\n                    immediate={this.manager.disableChartRowAnimation}\n                    renderRow={(row) => (\n                        <StackedDiscreteBarRow\n                            key={row.entityName}\n                            row={row}\n                            barHeight={this.barHeight}\n                            labelFontSize={this.labelFontSize}\n                            yAxis={this.yAxis}\n                            showTotalValueLabel={this.showTotalValueLabel}\n                            formatValueForLabel={this.formatValueForLabel}\n                            onEntityMouseEnter={this.onEntityMouseEnter}\n                            onEntityMouseLeave={this.onEntityMouseLeave}\n                            onClearTooltip={this.clearTooltip}\n                        />\n                    )}\n                />\n                {this.tooltip}\n            </g>\n        )\n    }\n\n    override componentDidMount(): void {\n        exposeInstanceOnWindow(this)\n    }\n}\n","import * as React from \"react\"\nimport * as _ from \"lodash-es\"\nimport { roundForSvg } from \"@ourworldindata/utils\"\n\ntype TriangleProps = Readonly<{\n    cx: number\n    cy: number\n    r: number\n    fill?: string\n    stroke?: string\n    strokeWidth?: number\n    rotation?: number\n}> &\n    React.SVGProps<SVGPolygonElement>\n\nexport const Triangle = (props: TriangleProps): React.ReactElement => {\n    const { cx, cy, r, rotation } = props\n    const x = cx - r,\n        y = cy - r\n    const points = [\n        [x, y + r * 2],\n        [x + (r * 2) / 2, y],\n        [x + r * 2, y + r * 2],\n    ]\n    const rotationRounded = rotation\n        ? [rotation, cx, cy].map(roundForSvg)\n        : undefined\n\n    return (\n        <polygon\n            points={points\n                .map((p) => `${roundForSvg(p[0])},${roundForSvg(p[1])}`)\n                .join(\" \")}\n            transform={\n                rotationRounded\n                    ? `rotate(${rotationRounded.join(\", \")})`\n                    : undefined\n            }\n            {..._.omit(props, [\"cx\", \"cy\", \"r\", \"rotation\"])}\n        />\n    )\n}\n","import * as React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { Triangle } from \"./Triangle\"\nimport { TextWrap, TextWrapSvg } from \"@ourworldindata/components\"\nimport { BASE_FONT_SIZE } from \"../core/GrapherConstants\"\nimport { scaleFontSize } from \"../chart/ChartUtils\"\nimport { makeFigmaId, roundForSvg } from \"@ourworldindata/utils\"\nimport * as _ from \"lodash-es\"\nimport { GRAPHER_DARK_TEXT, GRAY_70 } from \"../color/ColorConstants.js\"\n\nexport interface ConnectedScatterLegendManager {\n    sidebarWidth: number\n    displayStartTime: string\n    displayEndTime: string\n    fontSize?: number\n    compareEndPointsOnly?: boolean\n    isStaticAndSmall?: boolean\n}\n\nexport class ConnectedScatterLegend {\n    manager: ConnectedScatterLegendManager\n\n    private readonly lineToLabelSpacing = 8\n    private readonly dotRadius = 2\n    private readonly arrowRadius = 3\n    private readonly padding = this.arrowRadius\n    private readonly textColor = GRAPHER_DARK_TEXT\n    private readonly arrowColor = GRAY_70\n    private readonly outlineColor = \"#fff\"\n    private readonly outlineWidth = 0.2\n\n    constructor(manager: ConnectedScatterLegendManager) {\n        makeObservable(this)\n        this.manager = manager\n    }\n\n    @computed get fontSize(): number {\n        const baseFontSize = this.manager.fontSize ?? BASE_FONT_SIZE\n        return scaleFontSize(\n            this.manager.isStaticAndSmall ? 8 : 11.2,\n            baseFontSize\n        )\n    }\n\n    @computed get width(): number {\n        return this.manager.sidebarWidth\n    }\n\n    @computed get maxLabelWidth(): number {\n        return (this.width - 2) / 2\n    }\n\n    @computed get startLabel(): TextWrap {\n        const { manager, maxLabelWidth, fontSize } = this\n        return new TextWrap({\n            text: manager.displayStartTime,\n            fontSize,\n            maxWidth: maxLabelWidth,\n            lineHeight: 1,\n        })\n    }\n\n    @computed get endLabel(): TextWrap {\n        const { manager, maxLabelWidth, fontSize } = this\n        return new TextWrap({\n            text: manager.displayEndTime,\n            fontSize,\n            maxWidth: maxLabelWidth,\n            lineHeight: 1,\n        })\n    }\n\n    @computed get maxLabelHeight(): number {\n        return Math.max(this.startLabel.height, this.endLabel.height)\n    }\n\n    @computed get height(): number {\n        return this.maxLabelHeight + this.padding + this.lineToLabelSpacing\n    }\n\n    render(\n        targetX: number,\n        targetY: number,\n        renderOptions: React.SVGAttributes<SVGGElement> = {}\n    ): React.ReactElement {\n        const { startLabel, endLabel, padding, lineToLabelSpacing, width } =\n            this\n\n        // Arrow line\n        const lineLeft = targetX + padding\n        const lineRight = targetX + width - padding\n        const lineY = targetY + padding\n\n        // Labels below the line\n        const labelY = lineY + lineToLabelSpacing\n        const labelStartX = targetX\n        const labelEndX = targetX + width - endLabel.width\n        return (\n            <g\n                id={makeFigmaId(\"arrow-legend\")}\n                className=\"ConnectedScatterLegend\"\n                {...renderOptions}\n            >\n                <rect\n                    x={roundForSvg(targetX)}\n                    y={roundForSvg(targetY)}\n                    width={roundForSvg(this.width)}\n                    height={roundForSvg(this.height)}\n                    fill=\"#fff\"\n                    opacity={0}\n                />\n                <TextWrapSvg\n                    textWrap={startLabel}\n                    x={labelStartX}\n                    y={labelY}\n                    fill={this.textColor}\n                />\n                <TextWrapSvg\n                    textWrap={endLabel}\n                    x={labelEndX}\n                    y={labelY}\n                    fill={this.textColor}\n                />\n                <line\n                    x1={roundForSvg(lineLeft)}\n                    y1={roundForSvg(lineY)}\n                    x2={roundForSvg(lineRight)}\n                    y2={roundForSvg(lineY)}\n                    stroke={this.arrowColor}\n                    strokeWidth={1}\n                />\n                <circle\n                    cx={roundForSvg(lineLeft)}\n                    cy={roundForSvg(lineY)}\n                    r={roundForSvg(this.dotRadius)}\n                    fill={this.arrowColor}\n                    stroke={this.outlineColor}\n                    strokeWidth={this.outlineWidth}\n                />\n                {!this.manager.compareEndPointsOnly && (\n                    <React.Fragment>\n                        <circle\n                            cx={roundForSvg(\n                                lineLeft + (lineRight - lineLeft) / 3\n                            )}\n                            cy={roundForSvg(lineY)}\n                            r={roundForSvg(this.dotRadius)}\n                            fill={this.arrowColor}\n                            stroke={this.outlineColor}\n                            strokeWidth={this.outlineWidth}\n                        />\n                        <circle\n                            cx={roundForSvg(\n                                lineLeft + (2 * (lineRight - lineLeft)) / 3\n                            )}\n                            cy={roundForSvg(lineY)}\n                            r={roundForSvg(this.dotRadius)}\n                            fill={this.arrowColor}\n                            stroke={this.outlineColor}\n                            strokeWidth={this.outlineWidth}\n                        />\n                    </React.Fragment>\n                )}\n                <Triangle\n                    cx={lineRight}\n                    cy={lineY}\n                    r={this.arrowRadius}\n                    rotation={90}\n                    fill={this.arrowColor}\n                    stroke={this.outlineColor}\n                    strokeWidth={this.outlineWidth}\n                />\n            </g>\n        )\n    }\n}\n","import * as R from \"remeda\"\nimport { PointVector, makeFigmaId, roundForSvg } from \"@ourworldindata/utils\"\nimport { observer } from \"mobx-react\"\nimport * as React from \"react\"\nimport { MultiColorPolyline } from \"./MultiColorPolyline\"\nimport {\n    ScatterRenderSeries,\n    SCATTER_POINT_OPACITY,\n    SCATTER_POINT_STROKE_WIDTH,\n} from \"./ScatterPlotChartConstants\"\nimport { Triangle } from \"./Triangle\"\n\ninterface ScatterPointProps {\n    series: ScatterRenderSeries\n    hideFocusRing?: boolean\n    isLayerMode?: boolean\n    onMouseEnter?: (seriesName: string) => void\n    onMouseLeave?: () => void\n}\n\nexport const INACTIVE_SCATTER_POINT_COLOR = \"#e2e2e2\"\n\n// When there's only a single point in a series (e.g. single year mode)\n@observer\nexport class ScatterPoint extends React.Component<ScatterPointProps> {\n    override render(): React.ReactElement | null {\n        const {\n            series,\n            isLayerMode,\n            hideFocusRing,\n            onMouseEnter,\n            onMouseLeave,\n        } = this.props\n        const value = R.first(series.points)\n        if (value === undefined) return null\n\n        const color =\n            series.isFocus || !isLayerMode\n                ? value.color\n                : INACTIVE_SCATTER_POINT_COLOR\n\n        const isLabelled = series.allLabels.some((label) => !label.isHidden)\n        const size = value.size\n        const cx = roundForSvg(value.position.x)\n        const cy = roundForSvg(value.position.y)\n        const stroke = isLayerMode ? \"#bbb\" : isLabelled ? \"#333\" : \"#666\"\n\n        return (\n            <g\n                id={makeFigmaId(series.seriesName, \"datapoint\")}\n                key={series.displayKey}\n                className={series.displayKey}\n                onMouseEnter={\n                    onMouseEnter\n                        ? (): void => onMouseEnter(series.seriesName)\n                        : undefined\n                }\n                onMouseLeave={onMouseLeave}\n            >\n                {!hideFocusRing && series.isFocus && (\n                    <circle\n                        cx={cx}\n                        cy={cy}\n                        fill=\"none\"\n                        stroke={color}\n                        r={roundForSvg(size + 3)}\n                    />\n                )}\n                <circle\n                    cx={cx}\n                    cy={cy}\n                    r={roundForSvg(size)}\n                    fill={color}\n                    opacity={SCATTER_POINT_OPACITY}\n                    stroke={stroke}\n                    strokeWidth={SCATTER_POINT_STROKE_WIDTH}\n                    style={{ transition: \"fill 250ms\" }}\n                />\n            </g>\n        )\n    }\n}\n\ninterface ScatterLineProps {\n    series: ScatterRenderSeries\n    isLayerMode: boolean\n    onMouseEnter?: (seriesName: string) => void\n    onMouseLeave?: () => void\n}\n\n@observer\nexport class ScatterLine extends React.Component<ScatterLineProps> {\n    override render(): React.ReactElement | null {\n        const { series, isLayerMode, onMouseEnter, onMouseLeave } = this.props\n\n        if (series.points.length === 1)\n            return (\n                <ScatterPoint\n                    series={series}\n                    isLayerMode={isLayerMode}\n                    onMouseEnter={onMouseEnter}\n                    onMouseLeave={onMouseLeave}\n                />\n            )\n\n        const firstValue = R.first(series.points)\n        const lastValue = R.last(series.points)\n        if (firstValue === undefined || lastValue === undefined) return null\n\n        let rotation = PointVector.angle(series.offsetVector, PointVector.up)\n        if (series.offsetVector.x < 0) rotation = -rotation\n\n        const opacity = 0.7\n\n        return (\n            <g\n                id={makeFigmaId(\"scatter-line\", series.displayKey)}\n                key={series.displayKey}\n                className={series.displayKey}\n            >\n                <circle\n                    cx={roundForSvg(firstValue.position.x)}\n                    cy={roundForSvg(firstValue.position.y)}\n                    r={roundForSvg(1 + firstValue.size / 2)}\n                    fill={isLayerMode ? \"#e2e2e2\" : firstValue.color}\n                    stroke=\"none\"\n                    opacity={opacity}\n                />\n                <MultiColorPolyline\n                    points={series.points.map((v) => ({\n                        x: v.position.x,\n                        y: v.position.y,\n                        color: isLayerMode ? \"#ccc\" : v.color,\n                    }))}\n                    strokeWidth={roundForSvg(series.size)}\n                    opacity={opacity}\n                    style={{ transition: \"stroke 250ms\" }}\n                />\n                <Triangle\n                    cx={lastValue.position.x}\n                    cy={lastValue.position.y}\n                    r={1.5 + lastValue.size}\n                    rotation={rotation}\n                    fill={isLayerMode ? \"#e2e2e2\" : lastValue.color}\n                    opacity={opacity}\n                />\n            </g>\n        )\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\n\nimport { ScaleLinear } from \"d3-scale\"\nimport { NoDataMessage } from \"../noDataMessage/NoDataMessage\"\nimport { SortOrder } from \"@ourworldindata/types\"\nimport {\n    Bounds,\n    PointVector,\n    getRelativeMouse,\n    guid,\n    intersection,\n    makeFigmaId,\n    makeSafeForCSS,\n    roundForSvg,\n    sortNumeric,\n} from \"@ourworldindata/utils\"\nimport { computed, action, observable, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport * as React from \"react\"\nimport { Halo } from \"@ourworldindata/components\"\nimport { MultiColorPolyline } from \"./MultiColorPolyline\"\nimport {\n    ScatterPointsWithLabelsProps,\n    ScatterRenderSeries,\n    ScatterLabel,\n    ScatterSeries,\n    SCATTER_LINE_MIN_WIDTH,\n    SCATTER_POINT_MIN_RADIUS,\n    SCATTER_POINT_HOVER_TARGET_RANGE,\n    ScatterRenderPoint,\n    SCATTER_LABEL_MIN_FONT_SIZE,\n} from \"./ScatterPlotChartConstants\"\nimport { ScatterLine, ScatterPoint } from \"./ScatterPoints\"\nimport {\n    makeStartLabel,\n    makeMidLabels,\n    makeEndLabel,\n    labelPriority,\n} from \"./ScatterUtils\"\nimport { Triangle } from \"./Triangle\"\nimport { ColorScale } from \"../color/ColorScale\"\nimport { BASE_FONT_SIZE } from \"../core/GrapherConstants\"\nimport { roundFontSize, scaleFontSize } from \"../chart/ChartUtils\"\n\n@observer\nexport class ScatterPointsWithLabels extends React.Component<ScatterPointsWithLabelsProps> {\n    base = React.createRef<SVGGElement>()\n\n    // closest point by quadtree search\n    private nearSeries: ScatterSeries | undefined = undefined\n    // currently hovered-over point via mouseenter/leave\n    private overSeries: ScatterSeries | undefined = undefined\n    private readonly renderUid = guid()\n\n    constructor(props: ScatterPointsWithLabelsProps) {\n        super(props)\n\n        makeObservable<ScatterPointsWithLabels, \"nearSeries\" | \"overSeries\">(\n            this,\n            {\n                nearSeries: observable,\n                overSeries: observable,\n            }\n        )\n    }\n\n    @computed private get seriesArray(): ScatterSeries[] {\n        return this.props.seriesArray\n    }\n\n    @computed private get focusedSeriesNames(): string[] {\n        return (\n            intersection(\n                this.props.focusedSeriesNames || [],\n                this.seriesArray.map((g) => g.seriesName)\n            ) ?? []\n        )\n    }\n\n    @computed private get hoveredSeriesNames(): string[] {\n        return this.props.hoveredSeriesNames ?? []\n    }\n\n    @computed private get tooltipSeriesName(): string | undefined {\n        return this.props.tooltipSeriesName\n    }\n\n    // Layered mode occurs when any entity on the chart is hovered or focused\n    // Then, a special \"foreground\" set of entities is rendered over the background\n    @computed private get isLayerMode(): boolean {\n        return (\n            this.focusedSeriesNames.length > 0 ||\n            this.hoveredSeriesNames.length > 0 ||\n            this.props.isHoverModeActive ||\n            // if the user has selected entities that are not in the chart,\n            // we want to move all entities into the background\n            ((this.props.focusedSeriesNames ?? []).length > 0 &&\n                this.focusedSeriesNames.length === 0)\n        )\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.dualAxis.innerBounds\n    }\n\n    // When focusing multiple entities, we hide some information to declutter\n    @computed private get isSubtleForeground(): boolean {\n        return (\n            this.focusedSeriesNames.length > 1 &&\n            this.props.seriesArray.some((series) => series.points.length > 2)\n        )\n    }\n\n    @computed private get colorScale(): ColorScale | undefined {\n        return this.props.colorScale\n    }\n\n    @computed private get sizeScale(): ScaleLinear<number, number> {\n        return this.props.sizeScale\n    }\n\n    @computed private get fontScale(): ScaleLinear<number, number> | undefined {\n        return this.props.fontScale\n    }\n\n    @computed private get hideScatterLabels(): boolean {\n        return !!this.props.hideScatterLabels\n    }\n\n    @computed private get hideEntityLabels(): boolean {\n        return !!this.props.hideEntityLabels\n    }\n\n    private getPointRadius(value: number | undefined): number {\n        const radius =\n            value !== undefined\n                ? this.sizeScale(value)\n                : this.sizeScale.range()[0]\n        // We are enforcing the minimum radius/width just before render,\n        // it should not be enforced earlier than that.\n        return Math.max(\n            radius,\n            this.props.isConnected\n                ? SCATTER_LINE_MIN_WIDTH\n                : SCATTER_POINT_MIN_RADIUS\n        )\n    }\n\n    private getLabelFontSize(value: number | undefined): number {\n        if (!this.fontScale) return BASE_FONT_SIZE\n        const fontSize =\n            value !== undefined\n                ? this.fontScale(value)\n                : this.fontScale.range()[0]\n        return roundFontSize(\n            Math.max(\n                fontSize,\n                scaleFontSize(\n                    SCATTER_LABEL_MIN_FONT_SIZE,\n                    this.props.baseFontSize\n                )\n            )\n        )\n    }\n\n    @computed private get hideConnectedScatterLines(): boolean {\n        return this.props.hideConnectedScatterLines\n    }\n\n    // Pre-transform data for rendering\n    @computed private get initialRenderSeries(): ScatterRenderSeries[] {\n        const { seriesArray, colorScale, bounds } = this\n        const xAxis = this.props.dualAxis.horizontalAxis.clone()\n        xAxis.range = bounds.xRange()\n        const yAxis = this.props.dualAxis.verticalAxis.clone()\n        yAxis.range = this.bounds.yRange()\n\n        return sortNumeric(\n            seriesArray.map((series): ScatterRenderSeries => {\n                const points = series.points.map(\n                    (point): ScatterRenderPoint => {\n                        const scaleColor =\n                            colorScale !== undefined\n                                ? colorScale.getColor(point.color)\n                                : undefined\n                        return {\n                            position: new PointVector(\n                                Math.floor(xAxis.place(point.x)),\n                                Math.floor(yAxis.place(point.y))\n                            ),\n                            color: scaleColor ?? series.color,\n                            size: this.getPointRadius(point.size),\n                            time: point.time,\n                            label: point.label,\n                        }\n                    }\n                )\n\n                return {\n                    seriesName: series.seriesName,\n                    displayKey: \"key-\" + makeSafeForCSS(series.seriesName),\n                    color: series.color,\n                    size: R.last(points)!.size,\n                    fontSize: this.getLabelFontSize(\n                        R.last(series.points)!.size\n                    ),\n                    points,\n                    text: series.label,\n                    midLabels: [],\n                    allLabels: [],\n                    offsetVector: PointVector.zero,\n                }\n            }),\n            (d) => d.size,\n            SortOrder.desc\n        )\n    }\n\n    @computed private get renderSeries(): ScatterRenderSeries[] {\n        // Draw the largest points first so that smaller ones can sit on top of them\n        const renderData = this.initialRenderSeries\n\n        for (const series of renderData) {\n            series.isHover = this.hoveredSeriesNames.includes(series.seriesName)\n            series.isFocus = this.focusedSeriesNames.includes(series.seriesName)\n            series.isTooltip = this.tooltipSeriesName === series.seriesName\n            series.isForeground = series.isHover || series.isFocus\n            if (series.isHover) series.size += 1\n        }\n\n        for (const series of renderData) {\n            series.startLabel = makeStartLabel(\n                series,\n                this.isSubtleForeground,\n                this.hideConnectedScatterLines,\n                this.props.baseFontSize\n            )\n            series.midLabels = makeMidLabels(\n                series,\n                this.isSubtleForeground,\n                this.hideConnectedScatterLines,\n                this.props.baseFontSize\n            )\n            series.endLabel = makeEndLabel(\n                series,\n                this.isSubtleForeground,\n                this.hideConnectedScatterLines,\n                this.props.baseFontSize\n            )\n            series.allLabels = [series.startLabel]\n                .concat(series.midLabels)\n                .concat([series.endLabel])\n                .filter((x) => x) as ScatterLabel[]\n        }\n\n        const labels = renderData.flatMap((series) => series.allLabels)\n\n        // Ensure labels fit inside bounds\n        // Must do before collision detection since it'll change the positions\n        this.moveLabelsInsideChartBounds(labels, this.bounds)\n\n        const labelsByPriority = sortNumeric(\n            labels,\n            (l) => labelPriority(l),\n            SortOrder.desc\n        )\n        if (this.focusedSeriesNames.length > 0) {\n            this.hideUnselectedLabels(labelsByPriority)\n        }\n        if (this.hideScatterLabels) {\n            this.hideLabels(labelsByPriority, this.hoveredSeriesNames.length)\n        }\n        if (this.hideEntityLabels) {\n            this.hideEndLabels(labelsByPriority)\n        }\n\n        this.hideCollidingLabelsByPriority(labelsByPriority)\n\n        return renderData\n    }\n\n    private hideLabels(\n        labelsByPriority: ScatterLabel[],\n        nHoveredLabels: number\n    ): void {\n        labelsByPriority\n            .filter((label) => !(label.series.isHover && nHoveredLabels === 1))\n            .forEach((label) => (label.isHidden = true))\n    }\n\n    private hideEndLabels(labelsByPriority: ScatterLabel[]): void {\n        labelsByPriority\n            .filter((label) => label.isEnd)\n            .forEach((label) => (label.isHidden = true))\n    }\n\n    private hideUnselectedLabels(labelsByPriority: ScatterLabel[]): void {\n        labelsByPriority\n            .filter((label) => !label.series.isFocus && !label.series.isHover)\n            .forEach((label) => (label.isHidden = true))\n    }\n\n    private hideCollidingLabelsByPriority(\n        labelsByPriority: ScatterLabel[]\n    ): void {\n        for (let i = 0; i < labelsByPriority.length; i++) {\n            const higherPriorityLabel = labelsByPriority[i]\n            if (higherPriorityLabel.isHidden) continue\n\n            for (let j = i + 1; j < labelsByPriority.length; j++) {\n                const lowerPriorityLabel = labelsByPriority[j]\n                if (lowerPriorityLabel.isHidden) continue\n\n                const isHighlightedEndLabelOfEqualPriority =\n                    lowerPriorityLabel.isEnd &&\n                    (lowerPriorityLabel.series.isHover ||\n                        lowerPriorityLabel.series.isFocus) &&\n                    higherPriorityLabel.series.isHover ===\n                        lowerPriorityLabel.series.isHover &&\n                    higherPriorityLabel.series.isFocus ===\n                        lowerPriorityLabel.series.isFocus\n\n                if (\n                    isHighlightedEndLabelOfEqualPriority\n                        ? // For highlighted end labels of equal priority, we want to allow some\n                          // overlap – labels are still readable even if they overlap\n                          higherPriorityLabel.bounds\n                              .pad(6) // allow up to 6px of overlap\n                              .intersects(lowerPriorityLabel.bounds)\n                        : // For non-highlighted labels we want to leave more space between labels,\n                          // partly to have a less noisy chart, and partly to prevent readers from\n                          // thinking that \"everything is labelled\". In the past this has made\n                          // readers think that if a label doesn't exist, it isn't plotted on the\n                          // chart.\n                          higherPriorityLabel.bounds\n                              .pad(-6)\n                              .intersects(lowerPriorityLabel.bounds)\n                ) {\n                    lowerPriorityLabel.isHidden = true\n                }\n            }\n        }\n    }\n\n    // todo: move this to bounds class with a test\n    private moveLabelsInsideChartBounds(\n        labels: ScatterLabel[],\n        bounds: Bounds\n    ): void {\n        for (const label of labels) {\n            if (label.bounds.left < bounds.left - 1)\n                label.bounds = label.bounds.set({\n                    x: label.bounds.x + label.bounds.width,\n                })\n            else if (label.bounds.right > bounds.right + 1)\n                label.bounds = label.bounds.set({\n                    x: label.bounds.x - label.bounds.width,\n                })\n\n            if (label.bounds.top < bounds.top - 1)\n                label.bounds = label.bounds.set({ y: bounds.top })\n            else if (label.bounds.bottom > bounds.bottom + 1)\n                label.bounds = label.bounds.set({\n                    y: bounds.bottom - label.bounds.height,\n                })\n        }\n    }\n\n    // Use a hybrid approach to mouseover:\n    // If the mouse is near the centroid of an element, that is prioritized\n    // Otherwise we fall back to the dot that the cursor is currently hovering over (if any)\n\n    @action.bound onPointMouseEnter(seriesName: string): void {\n        this.overSeries = this.seriesArray.find(\n            (series) => series.seriesName === seriesName\n        )\n        // only select if we're not already close to another point's center\n        if (this.overSeries && !this.nearSeries)\n            this.props.onMouseEnter?.(this.overSeries)\n    }\n\n    @action.bound onPointMouseLeave(): void {\n        this.overSeries = undefined\n        if (!this.nearSeries) this.props.onMouseLeave?.()\n    }\n\n    @action.bound onMouseMove(ev: React.MouseEvent<SVGGElement>): void {\n        if (this.base.current) {\n            const { x, y } = getRelativeMouse(this.base.current, ev)\n\n            // be more fine grained about finding nearby points when the cursor is\n            // already hovering over a larger dot in the background\n            const range = this.overSeries\n                ? SCATTER_POINT_HOVER_TARGET_RANGE / 4\n                : SCATTER_POINT_HOVER_TARGET_RANGE\n\n            // search for closest point to cursor position within range\n            const nearby = this.props.quadtree?.find(x, y, range)?.series\n            if (nearby) {\n                // only trigger listener if the selection has changed\n                if (nearby.seriesName !== this.nearSeries?.seriesName) {\n                    this.props.onMouseEnter?.(nearby)\n                }\n            } else if (this.nearSeries) {\n                // if we've just moved out of range of a nearby point, fall back to\n                // the currently hovered-over dot (if there is one)\n                this.props.onMouseLeave?.()\n                if (this.overSeries) {\n                    this.props.onMouseEnter?.(this.overSeries)\n                }\n            }\n            this.nearSeries = nearby\n        }\n    }\n\n    @action.bound onMouseLeave(): void {\n        // hide tooltip and clear hover state when leaving the chart's bounds\n        this.nearSeries = undefined\n        this.overSeries = undefined\n        if (this.props.onMouseLeave) this.props.onMouseLeave()\n    }\n\n    @action.bound onClick(): void {\n        if (this.props.onClick) this.props.onClick()\n    }\n\n    @computed get backgroundSeries(): ScatterRenderSeries[] {\n        return this.renderSeries.filter((series) => !series.isForeground)\n    }\n\n    @computed get foregroundSeries(): ScatterRenderSeries[] {\n        return this.renderSeries.filter((series) => !!series.isForeground)\n    }\n\n    private renderBackgroundSeries(): React.ReactElement | null {\n        const { backgroundSeries, isLayerMode, hideConnectedScatterLines } =\n            this\n\n        if (hideConnectedScatterLines) return null\n\n        return (\n            <g id={makeFigmaId(\"points\")}>\n                {backgroundSeries.map((series) => (\n                    <ScatterLine\n                        key={series.seriesName}\n                        series={series}\n                        isLayerMode={isLayerMode}\n                        onMouseEnter={this.onPointMouseEnter}\n                        onMouseLeave={this.onPointMouseLeave}\n                    />\n                ))}\n            </g>\n        )\n    }\n\n    private renderBackgroundLabels(): React.ReactElement {\n        const { isLayerMode } = this\n        return (\n            <g\n                id={makeFigmaId(\"labels\")}\n                className=\"backgroundLabels\"\n                fill={!isLayerMode ? \"#333\" : \"#aaa\"}\n            >\n                {this.backgroundSeries.map((series) => {\n                    return series.allLabels\n                        .filter((label) => !label.isHidden)\n                        .map((label) => (\n                            <Halo\n                                key={series.displayKey + \"-endLabel\"}\n                                id={makeFigmaId(\"outline\", series.seriesName)}\n                                fontSize={label.fontSize}\n                            >\n                                <text\n                                    id={makeFigmaId(\"label\", label.text)}\n                                    x={roundForSvg(label.bounds.x)}\n                                    y={roundForSvg(\n                                        label.bounds.y + label.bounds.height\n                                    )}\n                                    fontSize={label.fontSize}\n                                    fontWeight={label.fontWeight}\n                                    fill={isLayerMode ? \"#aaa\" : label.color}\n                                    style={{ pointerEvents: \"none\" }}\n                                >\n                                    {label.text}\n                                </text>\n                            </Halo>\n                        ))\n                })}\n            </g>\n        )\n    }\n\n    private renderForegroundSeries(): React.ReactElement {\n        const { isSubtleForeground, hideConnectedScatterLines } = this\n        return (\n            <g id={makeFigmaId(\"points\")}>\n                {this.foregroundSeries.map((series) => {\n                    const lastPoint = R.last(series.points)!\n                    const strokeWidth =\n                        (hideConnectedScatterLines\n                            ? 3\n                            : series.isHover\n                              ? 3\n                              : isSubtleForeground\n                                ? 1.5\n                                : 2) +\n                        lastPoint.size / 2\n\n                    if (series.points.length === 1)\n                        return (\n                            <ScatterPoint\n                                key={series.displayKey}\n                                series={series}\n                                hideFocusRing={this.props.hideFocusRing}\n                                onMouseEnter={this.onPointMouseEnter}\n                                onMouseLeave={this.onPointMouseLeave}\n                            />\n                        )\n\n                    const firstValue = R.first(series.points)\n                    const opacity = isSubtleForeground ? 0.9 : 1\n                    const radius = hideConnectedScatterLines\n                        ? strokeWidth\n                        : strokeWidth / 2 + 1\n                    let rotation = PointVector.angle(\n                        series.offsetVector,\n                        PointVector.up\n                    )\n                    if (series.offsetVector.x < 0) rotation = -rotation\n                    return (\n                        <g\n                            id={makeFigmaId(\"time-scatter\", series.displayKey)}\n                            key={series.displayKey}\n                            className={series.displayKey}\n                        >\n                            {!hideConnectedScatterLines && (\n                                <MultiColorPolyline\n                                    points={series.points.map((point) => ({\n                                        x: point.position.x,\n                                        y: point.position.y,\n                                        color: point.color,\n                                    }))}\n                                    strokeWidth={roundForSvg(strokeWidth)}\n                                    opacity={opacity}\n                                />\n                            )}\n                            {(series.isFocus || hideConnectedScatterLines) &&\n                                firstValue && (\n                                    <circle\n                                        cx={roundForSvg(firstValue.position.x)}\n                                        cy={roundForSvg(firstValue.position.y)}\n                                        r={roundForSvg(radius)}\n                                        fill={firstValue.color}\n                                        opacity={opacity}\n                                        stroke={firstValue.color}\n                                        strokeOpacity={0.6}\n                                    />\n                                )}\n                            {(series.isHover || hideConnectedScatterLines) &&\n                                series.points\n                                    .slice(\n                                        1,\n                                        hideConnectedScatterLines\n                                            ? undefined\n                                            : -1\n                                    )\n                                    .map((v, index) => (\n                                        <circle\n                                            key={index}\n                                            cx={roundForSvg(v.position.x)}\n                                            cy={roundForSvg(v.position.y)}\n                                            r={roundForSvg(radius)}\n                                            fill={v.color}\n                                            stroke=\"none\"\n                                        />\n                                    ))}\n                            {!hideConnectedScatterLines && (\n                                <Triangle\n                                    cx={lastPoint.position.x}\n                                    cy={lastPoint.position.y}\n                                    r={1.5 + strokeWidth}\n                                    rotation={rotation}\n                                    fill={lastPoint.color}\n                                    opacity={opacity}\n                                />\n                            )}\n                        </g>\n                    )\n                })}\n            </g>\n        )\n    }\n\n    private renderForegroundLabels(): React.ReactElement {\n        return (\n            <g id={makeFigmaId(\"labels\")}>\n                {this.foregroundSeries.map((series) => {\n                    return series.allLabels\n                        .filter((label) => !label.isHidden)\n                        .map((label, index) => (\n                            <Halo\n                                id={makeFigmaId(\"outline\", series.seriesName)}\n                                key={`${series.displayKey}-label-${index}`}\n                                fontSize={label.fontSize}\n                            >\n                                <text\n                                    id={makeFigmaId(\"label\", series.seriesName)}\n                                    x={roundForSvg(label.bounds.x)}\n                                    y={roundForSvg(\n                                        label.bounds.y + label.bounds.height\n                                    )}\n                                    fontSize={label.fontSize}\n                                    fontWeight={label.fontWeight}\n                                    fill={label.color}\n                                >\n                                    {label.text}\n                                </text>\n                            </Halo>\n                        ))\n                })}\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        const { bounds, renderSeries, renderUid } = this\n        const clipBounds = bounds.pad(-10)\n\n        if (_.isEmpty(renderSeries))\n            return (\n                <NoDataMessage\n                    manager={this.props.noDataMessageManager}\n                    bounds={bounds}\n                />\n            )\n\n        return (\n            <g\n                ref={this.base}\n                id={makeFigmaId(\"scatter-points\")}\n                className=\"PointsWithLabels clickable\"\n                clipPath={`url(#scatterBounds-${renderUid})`}\n                onMouseMove={this.onMouseMove}\n                onMouseLeave={this.onMouseLeave}\n                onClick={this.onClick}\n            >\n                <rect\n                    key=\"background\"\n                    x={roundForSvg(bounds.x)}\n                    y={roundForSvg(bounds.y)}\n                    width={roundForSvg(bounds.width)}\n                    height={roundForSvg(bounds.height)}\n                    fill=\"rgba(255,255,255,0)\"\n                />\n                <defs>\n                    <clipPath id={`scatterBounds-${renderUid}`}>\n                        <rect\n                            x={roundForSvg(clipBounds.x)}\n                            y={roundForSvg(clipBounds.y)}\n                            width={roundForSvg(clipBounds.width)}\n                            height={roundForSvg(clipBounds.height)}\n                        />\n                    </clipPath>\n                </defs>\n                {this.renderBackgroundSeries()}\n                {this.renderBackgroundLabels()}\n                {this.renderForegroundSeries()}\n                {this.renderForegroundLabels()}\n            </g>\n        )\n    }\n}\n","import * as React from \"react\"\nimport * as R from \"remeda\"\nimport { computed, makeObservable } from \"mobx\"\nimport { scaleLinear, ScaleLinear } from \"d3-scale\"\nimport { TextWrap, TextWrapSvg, Halo } from \"@ourworldindata/components\"\nimport {\n    OwidVariableRoundingMode,\n    makeFigmaId,\n    roundForSvg,\n} from \"@ourworldindata/utils\"\nimport { BASE_FONT_SIZE } from \"../core/GrapherConstants\"\nimport { roundFontSize, scaleFontSize } from \"../chart/ChartUtils\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\nimport {\n    ScatterSeries,\n    SCATTER_POINT_MAX_RADIUS,\n    SCATTER_POINT_OPACITY,\n    SCATTER_POINT_STROKE_WIDTH,\n    SCATTER_POINT_DEFAULT_RADIUS,\n} from \"./ScatterPlotChartConstants\"\nimport { darkenColorForText } from \"../color/ColorUtils\"\nimport { GRAPHER_DARK_TEXT, GRAPHER_LIGHT_TEXT } from \"../color/ColorConstants\"\n\nexport interface ScatterSizeLegendManager {\n    sidebarWidth: number\n    sizeColumn: CoreColumn\n    sizeScale: ScaleLinear<number, number>\n    fontSize?: number\n    tooltipSeries?: ScatterSeries\n}\n\nconst LEGEND_PADDING = 3\nconst LEGEND_CIRCLE_COLOR = \"#bbb\"\nconst LEGEND_VALUE_COLOR = \"#444\"\nconst LABEL_PADDING = 2\nconst LABEL_COLOR = GRAPHER_LIGHT_TEXT\nconst TITLE_COLOR = GRAPHER_DARK_TEXT\n\nconst MIN_FONT_SIZE = 9\n\nexport class ScatterSizeLegend {\n    manager: ScatterSizeLegendManager\n    constructor(manager: ScatterSizeLegendManager) {\n        makeObservable(this)\n        this.manager = manager\n    }\n\n    @computed private get baseFontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get maxWidth(): number {\n        return this.manager.sidebarWidth\n    }\n\n    @computed private get ticks(): number[] {\n        const { sizeScale } = this.manager\n        const [domainStart, domainEnd] = sizeScale.domain()\n        if (domainStart === domainEnd) return [domainStart]\n        const [largestTick, ...restTicks] = sizeScale.ticks(6).toReversed()\n        if (largestTick === undefined) return []\n        const ticks = [largestTick]\n        restTicks.forEach((value) => {\n            if (\n                // make sure there is enough distance to prevent overlap with previous tick\n                sizeScale(value) <= sizeScale(R.last(ticks)!) - 6 &&\n                // don't go below the minimum tick radius\n                sizeScale(value) >= 6\n            ) {\n                ticks.push(value)\n            }\n        })\n        return ticks\n    }\n\n    private getPointRadius(value: number | undefined): number {\n        if (value === undefined) return SCATTER_POINT_DEFAULT_RADIUS\n        return this.manager.sizeScale(value)\n    }\n\n    // input radius, output font size\n    @computed private get fontSizeFromRadius(): ScaleLinear<number, number> {\n        return (\n            scaleLinear()\n                // choosing the domain & range somewhat arbitrarily here,\n                // by experimenting visually with font sizes\n                .domain([6, SCATTER_POINT_MAX_RADIUS])\n                .range([8, 11])\n                .clamp(true)\n        )\n    }\n\n    // Since it's circular, this is both the width and the height of the legend.\n    @computed private get legendSize(): number {\n        if (this.ticks.length === 0) return 0\n        const maxRadius = R.last(this.manager.sizeScale.range()) ?? 0\n        // adding some padding to account for label sticking out at the top\n        return 2 * maxRadius + 2\n    }\n\n    @computed private get label(): TextWrap {\n        const fontSize = Math.max(\n            MIN_FONT_SIZE,\n            scaleFontSize(10, this.baseFontSize)\n        )\n        return new TextWrap({\n            text: \"Circles sized by\",\n            // Allow text to _slightly_ go outside boundaries.\n            // Since we have padding left and right, this doesn't\n            // actually visibly overflow.\n            maxWidth: this.maxWidth + 12,\n            fontSize,\n            lineHeight: 1,\n        })\n    }\n\n    @computed private get title(): TextWrap {\n        const fontSize = Math.max(\n            MIN_FONT_SIZE,\n            scaleFontSize(11, this.baseFontSize)\n        )\n        return new TextWrap({\n            text: this.manager.sizeColumn.displayName,\n            // Allow text to _slightly_ go outside boundaries.\n            // Since we have padding left and right, this doesn't\n            // actually visibly overflow.\n            maxWidth: this.maxWidth + 10,\n            fontSize,\n            fontWeight: 700,\n            lineHeight: 1,\n        })\n    }\n\n    @computed get width(): number {\n        return this.manager.sidebarWidth\n    }\n\n    @computed get height(): number {\n        return (\n            this.legendSize +\n            LEGEND_PADDING +\n            this.label.height +\n            LABEL_PADDING +\n            this.title.height\n        )\n    }\n\n    @computed private get highlight():\n        | { value: number | undefined; color: string }\n        | undefined {\n        const { tooltipSeries } = this.manager\n        if (\n            tooltipSeries?.points.length === 1 &&\n            R.first(tooltipSeries.points)?.size !== undefined\n        ) {\n            return {\n                value: R.first(tooltipSeries.points)!.size,\n                color: tooltipSeries.color,\n            }\n        }\n        return undefined\n    }\n\n    private renderLegend(targetX: number, targetY: number): React.ReactElement {\n        const { highlight } = this\n        const cx = targetX + this.maxWidth / 2\n        return (\n            <React.Fragment>\n                {this.ticks.map((value) => {\n                    const radius = this.getPointRadius(value)\n                    return (\n                        <LegendItem\n                            key={value}\n                            label={this.manager.sizeColumn.formatValueShortWithAbbreviations(\n                                value,\n                                {\n                                    roundingMode:\n                                        OwidVariableRoundingMode.decimalPlaces,\n                                }\n                            )}\n                            cx={cx}\n                            cy={targetY + this.legendSize - radius}\n                            circleRadius={radius}\n                            circleStroke={\n                                highlight ? \"#ddd\" : LEGEND_CIRCLE_COLOR\n                            }\n                            labelFontSize={roundFontSize(\n                                this.fontSizeFromRadius(radius)\n                            )}\n                            labelFill={highlight ? \"#bbb\" : LEGEND_VALUE_COLOR}\n                        />\n                    )\n                })}\n                {highlight && (\n                    <LegendItem\n                        key={highlight.value}\n                        label={this.manager.sizeColumn.formatValueShort(\n                            highlight.value\n                        )}\n                        cx={cx}\n                        cy={\n                            targetY +\n                            this.legendSize -\n                            this.getPointRadius(highlight.value)\n                        }\n                        circleFill={highlight.color}\n                        circleStroke={\"#333\"}\n                        circleStrokeWidth={SCATTER_POINT_STROKE_WIDTH}\n                        circleRadius={this.getPointRadius(highlight.value)}\n                        circleOpacity={SCATTER_POINT_OPACITY}\n                        labelFontSize={12}\n                        labelFill={darkenColorForText(highlight.color)}\n                        labelFontWeight={700}\n                        outsideLabel={true}\n                    />\n                )}\n            </React.Fragment>\n        )\n    }\n\n    render(\n        targetX: number,\n        targetY: number,\n        renderOptions: React.SVGAttributes<SVGGElement> = {}\n    ): React.ReactElement {\n        const centerX = targetX + this.maxWidth / 2\n        return (\n            <g id={makeFigmaId(\"size-legend\")} {...renderOptions}>\n                {this.renderLegend(targetX, targetY)}\n                <TextWrapSvg\n                    textWrap={this.label}\n                    x={centerX}\n                    y={targetY + this.legendSize + LEGEND_PADDING}\n                    fill={LABEL_COLOR}\n                    textAnchor=\"middle\"\n                />\n                <TextWrapSvg\n                    textWrap={this.title}\n                    x={centerX}\n                    y={\n                        targetY +\n                        this.legendSize +\n                        LEGEND_PADDING +\n                        this.label.height +\n                        LABEL_PADDING\n                    }\n                    fill={TITLE_COLOR}\n                    textAnchor=\"middle\"\n                />\n            </g>\n        )\n    }\n}\n\nconst LegendItem = ({\n    label,\n    cx,\n    cy,\n    circleRadius,\n    circleFill = \"none\",\n    circleStroke = LEGEND_CIRCLE_COLOR,\n    circleStrokeWidth = 1.25,\n    circleOpacity = 1,\n    labelFill = LEGEND_VALUE_COLOR,\n    labelFontSize,\n    labelFontWeight = 400,\n    outsideLabel = false,\n}: {\n    label: string\n    cx: number\n    cy: number\n    circleRadius: number\n    circleFill?: string\n    circleStroke?: string\n    circleStrokeWidth?: number\n    circleOpacity?: number\n    labelFill?: string\n    labelFontSize: number\n    labelFontWeight?: number\n    outsideLabel?: boolean\n}): React.ReactElement => {\n    return (\n        <g>\n            <circle\n                cx={roundForSvg(cx)}\n                cy={roundForSvg(cy)}\n                r={roundForSvg(circleRadius)}\n                fill={circleFill}\n                stroke={circleStroke}\n                strokeWidth={circleStrokeWidth}\n                opacity={circleOpacity}\n            />\n            <Halo id={label} fontSize={labelFontSize}>\n                <text\n                    x={roundForSvg(cx)}\n                    y={roundForSvg(cy - circleRadius)}\n                    dy={outsideLabel ? \"-.32em\" : \".47em\"}\n                    fill={labelFill}\n                    fontSize={labelFontSize}\n                    fontWeight={labelFontWeight}\n                    textAnchor=\"middle\"\n                >\n                    {label}\n                </text>\n            </Halo>\n        </g>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport React from \"react\"\nimport { observer } from \"mobx-react\"\nimport { computed } from \"mobx\"\nimport {\n    excludeNullish,\n    excludeUndefined,\n    calculateTrendDirection,\n    Time,\n    RequiredBy,\n} from \"@ourworldindata/utils\"\nimport { ColumnTypeMap, CoreColumn } from \"@ourworldindata/core-table\"\nimport { OwidColumnDef } from \"@ourworldindata/types\"\nimport {\n    Tooltip,\n    TooltipState,\n    TooltipValueRange,\n    makeTooltipToleranceNotice,\n    makeTooltipRoundingNotice,\n    formatTooltipRangeValues,\n    TooltipValue,\n} from \"../tooltip/Tooltip\"\nimport { FooterItem, TooltipFooterIcon } from \"../tooltip/TooltipProps.js\"\nimport { ScatterSeries, SeriesPoint } from \"./ScatterPlotChartConstants\"\nimport { ScatterPlotChartState } from \"./ScatterPlotChartState\"\n\nexport interface ScatterPlotTooltipProps {\n    id: number\n    chartState: ScatterPlotChartState\n    tooltipState: TooltipState<{ series: ScatterSeries }>\n}\n\ninterface TooltipValueRangeProps {\n    chartState: ScatterPlotChartState\n    points?: SeriesPoint[]\n    values: SeriesPoint[]\n    showSignificanceSuperscriptIfApplicable?: boolean\n    showOriginalTimes?: boolean\n}\n\n@observer\nexport class ScatterPlotTooltip extends React.Component<ScatterPlotTooltipProps> {\n    @computed private get chartState(): ScatterPlotChartState {\n        return this.props.chartState\n    }\n\n    @computed private get points(): SeriesPoint[] {\n        return this.props.tooltipState.target?.series.points ?? []\n    }\n\n    @computed private get values(): SeriesPoint[] {\n        return excludeNullish(\n            _.uniq([R.first(this.points), R.last(this.points)])\n        )\n    }\n\n    @computed private get toleranceNotice(): FooterItem | undefined {\n        const { points, values } = this\n        const { xColumn, yColumn, manager, isTimeScatter } = this.chartState\n        const { startTime, endTime } = manager\n\n        // No tolerance notice needed if comparing the same variable across years\n        if (hasSameVariableWithTimeOverride(xColumn, yColumn, points)) {\n            return undefined\n        }\n\n        // No tolerance notice needed for time scatter plots\n        if (isTimeScatter) return undefined\n\n        // Check the time span in relative mode\n        if (manager.isRelativeMode) {\n            const [start, end] = points[0].time.span ?? []\n            const noticeNeeded = hasTimeMismatch({\n                actualStartTime: start,\n                actualEndTime: end,\n                targetStartTime: startTime,\n                targetEndTime: endTime,\n            })\n\n            if (!noticeNeeded) return undefined\n\n            return makeToleranceNotice({\n                startTime,\n                endTime,\n                column: yColumn,\n            })\n        }\n\n        const { x: xStart, y: yStart } = R.first(values)?.time ?? {}\n        const { x: xEnd, y: yEnd } = R.last(values)?.time ?? {}\n\n        const xNoticeNeeded = hasTimeMismatch({\n            actualStartTime: xStart,\n            actualEndTime: xEnd,\n            targetStartTime: startTime,\n            targetEndTime: endTime,\n        })\n        const yNoticeNeeded = hasTimeMismatch({\n            actualStartTime: yStart,\n            actualEndTime: yEnd,\n            targetStartTime: startTime,\n            targetEndTime: endTime,\n        })\n\n        if (!xNoticeNeeded && !yNoticeNeeded) return undefined\n\n        return makeToleranceNotice({\n            startTime,\n            endTime,\n            column: yColumn,\n        })\n    }\n\n    @computed private get roundingNotice(): FooterItem | undefined {\n        const { xColumn, yColumn, sizeColumn } = this.props.chartState\n\n        const columns = [xColumn, yColumn, sizeColumn].filter(\n            (column) => !column.isMissing && !column.isTimeColumn\n        )\n\n        const allRoundedToSigFigs = columns.every(\n            (column) => column.roundsToSignificantFigures\n        )\n        const anyRoundedToSigFigs = columns.some(\n            (column) => column.roundsToSignificantFigures\n        )\n\n        if (!anyRoundedToSigFigs) return undefined\n\n        const sigFigs = excludeUndefined(\n            columns.map((column) =>\n                column.roundsToSignificantFigures\n                    ? column.numSignificantFigures\n                    : undefined\n            )\n        )\n\n        return {\n            icon: allRoundedToSigFigs\n                ? TooltipFooterIcon.None\n                : TooltipFooterIcon.Significance,\n            text: makeTooltipRoundingNotice(sigFigs, {\n                plural: sigFigs.length > 1,\n            }),\n        }\n    }\n\n    @computed private get showSignificanceSuperscriptIfApplicable(): boolean {\n        return this.roundingNotice?.icon === TooltipFooterIcon.Significance\n    }\n\n    @computed private get footer(): FooterItem[] {\n        return excludeUndefined([this.toleranceNotice, this.roundingNotice])\n    }\n\n    @computed private get subtitle(): string {\n        const { manager, yColumn, xColumn } = this.chartState\n        const { startTime, endTime, isRelativeMode } = manager\n\n        const isComparison = hasSameVariableWithTimeOverride(\n            xColumn,\n            yColumn,\n            this.points\n        )\n\n        let times: Time[]\n        if (isComparison) {\n            times = _.sortBy([this.points[0].time.x, this.points[0].time.y])\n        } else if (this.chartState.isTimeScatter) {\n            times = _.uniq(excludeNullish(this.values.map((v) => v.time.y)))\n        } else {\n            times = _.uniq(excludeNullish([startTime, endTime]))\n        }\n\n        const timeLabel = formatTimes(times, yColumn, { isComparison })\n\n        return timeLabel + (isRelativeMode ? \" (avg. annual change)\" : \"\")\n    }\n\n    override render(): React.ReactElement | null {\n        const { showSignificanceSuperscriptIfApplicable } = this\n        const { chartState, tooltipState } = this.props\n\n        const { target, position, fading } = tooltipState\n        if (!target) return null\n\n        const hasToleranceNotice = this.toleranceNotice !== undefined\n\n        return (\n            <Tooltip\n                id={this.props.id}\n                tooltipManager={chartState.manager}\n                x={position.x}\n                y={position.y}\n                offsetX={20}\n                offsetY={-16}\n                style={{ maxWidth: \"250px\" }}\n                title={target.series.label}\n                subtitle={this.subtitle}\n                dissolve={fading}\n                footer={this.footer}\n                dismiss={() => (tooltipState.target = null)}\n            >\n                <TooltipValueRangeX\n                    chartState={chartState}\n                    points={this.points}\n                    values={this.values}\n                    showSignificanceSuperscriptIfApplicable={\n                        showSignificanceSuperscriptIfApplicable\n                    }\n                    showOriginalTimes={hasToleranceNotice}\n                />\n                <TooltipValueRangeY\n                    chartState={chartState}\n                    points={this.points}\n                    values={this.values}\n                    showSignificanceSuperscriptIfApplicable={\n                        showSignificanceSuperscriptIfApplicable\n                    }\n                    showOriginalTimes={hasToleranceNotice}\n                />\n                <TooltipValueRangeSize\n                    chartState={chartState}\n                    values={this.values}\n                    showSignificanceSuperscriptIfApplicable={\n                        showSignificanceSuperscriptIfApplicable\n                    }\n                />\n                <TooltipValueColor\n                    chartState={chartState}\n                    values={this.values}\n                />\n            </Tooltip>\n        )\n    }\n}\n\nfunction TooltipValueRangeX({\n    chartState,\n    points,\n    values,\n    showSignificanceSuperscriptIfApplicable,\n    showOriginalTimes,\n}: RequiredBy<TooltipValueRangeProps, \"points\">): React.ReactElement | null {\n    const { xColumn } = chartState\n\n    if (xColumn.isMissing || xColumn.isTimeColumn) return null\n\n    const { values: xValues, originalTimes = [] } = getXValuesWithTimes(\n        chartState,\n        points,\n        values\n    )\n\n    const formattedOriginalTimes = showOriginalTimes\n        ? originalTimes.map((time) => formatTime(time, xColumn))\n        : []\n\n    return (\n        <TooltipValueRange\n            label={xColumn.displayName}\n            unit={xColumn.displayUnit}\n            values={formatTooltipRangeValues(xValues, xColumn)}\n            trend={calculateTrendDirection(xValues[0], xValues[1], (value) =>\n                xColumn.formatValueShort(value)\n            )}\n            originalTimes={formattedOriginalTimes}\n            showSignificanceSuperscript={\n                showSignificanceSuperscriptIfApplicable &&\n                xColumn.roundsToSignificantFigures\n            }\n        />\n    )\n}\n\nfunction TooltipValueRangeY({\n    chartState,\n    points,\n    values,\n    showSignificanceSuperscriptIfApplicable,\n    showOriginalTimes,\n}: RequiredBy<TooltipValueRangeProps, \"points\">): React.ReactElement | null {\n    const { yColumn } = chartState\n\n    if (yColumn.isMissing) return null\n\n    const { values: yValues, originalTimes = [] } = getYValuesWithTimes(\n        chartState,\n        points,\n        values\n    )\n\n    const formattedOriginalTimes = showOriginalTimes\n        ? originalTimes.map((time) => formatTime(time, yColumn))\n        : []\n\n    return (\n        <TooltipValueRange\n            label={yColumn.displayName}\n            unit={yColumn.displayUnit}\n            values={formatTooltipRangeValues(yValues, yColumn)}\n            trend={\n                yValues.length === 2\n                    ? calculateTrendDirection(yValues[0], yValues[1], (value) =>\n                          yColumn.formatValueShort(value)\n                      )\n                    : undefined\n            }\n            originalTimes={formattedOriginalTimes}\n            showSignificanceSuperscript={\n                showSignificanceSuperscriptIfApplicable &&\n                yColumn.roundsToSignificantFigures\n            }\n        />\n    )\n}\n\nfunction TooltipValueRangeSize({\n    chartState,\n    values,\n    showSignificanceSuperscriptIfApplicable,\n}: TooltipValueRangeProps): React.ReactElement | null {\n    const { sizeColumn } = chartState\n\n    if (sizeColumn.isMissing) return null\n\n    const sizeValues = excludeNullish(values.map((v) => v.size))\n\n    return (\n        <TooltipValueRange\n            label={sizeColumn.displayName}\n            unit={sizeColumn.displayUnit}\n            values={formatTooltipRangeValues(sizeValues, sizeColumn)}\n            trend={\n                sizeValues.length === 2\n                    ? calculateTrendDirection(\n                          sizeValues[0],\n                          sizeValues[1],\n                          (value) => sizeColumn.formatValueShort(value)\n                      )\n                    : undefined\n            }\n            showSignificanceSuperscript={\n                showSignificanceSuperscriptIfApplicable &&\n                sizeColumn.roundsToSignificantFigures\n            }\n        />\n    )\n}\n\nfunction TooltipValueColor({\n    chartState,\n    values,\n}: TooltipValueRangeProps): React.ReactElement | null {\n    const { colorColumn, colorScale } = chartState\n\n    if (colorColumn.isMissing || colorColumn instanceof ColumnTypeMap.Continent)\n        return null\n\n    const value = values.at(-1)\n    const colorValue = value?.color\n    if (!colorValue) return null\n\n    // Get the legend label for this color value\n    const bin = colorScale.getBinForValue(colorValue)\n    const displayValue = bin?.label ?? colorValue.toString()\n\n    return (\n        <TooltipValue\n            label={colorScale.legendDescription ?? colorColumn.displayName}\n            value={displayValue}\n        />\n    )\n}\n\n/**\n * Detects when a scatter plot compares the same variable across two different years.\n *\n * Example: GDP in 2020 (y-axis) vs GDP in 2010 (x-axis).\n */\nfunction hasSameVariableWithTimeOverride(\n    xColumn: CoreColumn,\n    yColumn: CoreColumn,\n    points: SeriesPoint[]\n): boolean {\n    // Check if there is exactly one point\n    if (points.length !== 1) return false\n\n    // Check if both axes use the same variable\n    const xDef = xColumn.def as OwidColumnDef\n    const yDef = yColumn.def as OwidColumnDef\n    const isSameVariable =\n        xDef.owidVariableId !== undefined &&\n        xDef.owidVariableId === yDef.owidVariableId\n    if (!isSameVariable) return false\n\n    // Check if the point has different time points for x and y\n    const point = points[0]\n    const hasDifferentTimes =\n        point.time.x !== point.time.y &&\n        _.isNumber(point.time.x) &&\n        _.isNumber(point.time.y)\n\n    return hasDifferentTimes\n}\n\nfunction hasTimeMismatch({\n    actualStartTime,\n    actualEndTime,\n    targetStartTime,\n    targetEndTime,\n}: {\n    actualStartTime?: Time\n    actualEndTime?: Time\n    targetStartTime?: Time\n    targetEndTime?: Time\n}): boolean {\n    const startTimesDiffer =\n        actualStartTime !== undefined && actualStartTime !== targetStartTime\n    const endTimesDiffer =\n        actualEndTime !== undefined && actualEndTime !== targetEndTime\n\n    return startTimesDiffer || endTimesDiffer\n}\n\nfunction formatTimes(\n    times: Time[],\n    column: CoreColumn,\n    { isComparison = false }: { isComparison?: boolean } = {}\n): string {\n    if (times.length === 0) return \"\"\n    if (times.length === 1) return column.formatTime(times[0])\n\n    const [startTime, endTime] = times\n    return isComparison\n        ? column.formatTimeComparison(startTime, endTime)\n        : column.formatTimeRange(startTime, endTime)\n}\n\nfunction makeToleranceNotice({\n    startTime,\n    endTime,\n    column,\n}: {\n    startTime?: Time\n    endTime?: Time\n    column: CoreColumn\n}): FooterItem {\n    const targetNotice = formatTimes(\n        _.uniq(excludeNullish([startTime, endTime])),\n        column\n    )\n\n    return {\n        icon: TooltipFooterIcon.Notice,\n        text: makeTooltipToleranceNotice(targetNotice),\n    }\n}\n\nfunction getXValuesWithTimes(\n    chartState: ScatterPlotChartState,\n    points: SeriesPoint[],\n    values: SeriesPoint[]\n): {\n    values: number[]\n    originalTimes: (number | undefined)[]\n} {\n    const { xColumn, yColumn, manager } = chartState\n    const { startTime, endTime, isRelativeMode } = manager\n\n    const firstValue = R.first(values)\n    const lastValue = R.last(values)\n\n    if (!firstValue || !lastValue) return { values: [], originalTimes: [] }\n\n    // Handle the special case where the same variable is used for both axes\n    // with a different year's value on each\n    if (hasSameVariableWithTimeOverride(xColumn, yColumn, points)) {\n        const point = points[0]\n        const values =\n            point.time.x < point.time.y\n                ? [point.x, point.y]\n                : [point.y, point.x]\n        return { values, originalTimes: [] }\n    }\n\n    const xStart = firstValue.time.x\n    const xEnd = lastValue.time.x\n\n    const xValues = xStart === xEnd ? [firstValue.x] : values.map((v) => v.x)\n\n    if (isRelativeMode) {\n        const originalTimes = getOriginalTimesForRelativeMode({\n            span: firstValue.time.span,\n            startTime,\n            endTime,\n        })\n\n        return { values: xValues, originalTimes }\n    }\n\n    // Check if tolerance notice is needed\n    const noticeNeeded = hasTimeMismatch({\n        actualStartTime: xStart,\n        actualEndTime: xEnd,\n        targetStartTime: startTime,\n        targetEndTime: endTime,\n    })\n\n    const originalTimes = noticeNeeded\n        ? xStart === xEnd\n            ? [xEnd]\n            : [xStart, xEnd]\n        : []\n\n    return { values: xValues, originalTimes }\n}\n\nfunction getYValuesWithTimes(\n    chartState: ScatterPlotChartState,\n    points: SeriesPoint[],\n    values: SeriesPoint[]\n): {\n    values: number[]\n    originalTimes: (number | undefined)[]\n} {\n    const { xColumn, yColumn, manager } = chartState\n    const { startTime, endTime, isRelativeMode } = manager\n\n    // Handle the special case where the x-axis is time\n    if (chartState.isTimeScatter) {\n        return { values: values.map((v) => v.y), originalTimes: [] }\n    }\n\n    // Handle the special case where the same variable is used for both axes\n    // with a different year's value on each\n    if (hasSameVariableWithTimeOverride(xColumn, yColumn, points)) {\n        // Don't return anything (values shown on X axis)\n        return { values: [], originalTimes: [] }\n    }\n\n    const firstValue = R.first(values)\n    const lastValue = R.last(values)\n\n    if (!firstValue || !lastValue) {\n        return { values: [], originalTimes: [] }\n    }\n\n    const yStart = firstValue.time.y\n    const yEnd = lastValue.time.y\n\n    const yValues = yStart === yEnd ? [firstValue.y] : values.map((v) => v.y)\n\n    if (isRelativeMode) {\n        const originalTimes = getOriginalTimesForRelativeMode({\n            span: firstValue.time.span,\n            startTime,\n            endTime,\n        })\n\n        return { values: yValues, originalTimes }\n    }\n\n    // Check if tolerance notice is needed\n    const noticeNeeded = hasTimeMismatch({\n        actualStartTime: yStart,\n        actualEndTime: yEnd,\n        targetStartTime: startTime,\n        targetEndTime: endTime,\n    })\n\n    const originalTimes = noticeNeeded\n        ? yStart === yEnd\n            ? [yEnd]\n            : [yStart, yEnd]\n        : []\n\n    return { values: yValues, originalTimes }\n}\n\nfunction getOriginalTimesForRelativeMode({\n    startTime,\n    endTime,\n    span,\n}: {\n    span?: [number, number]\n    startTime?: Time\n    endTime?: Time\n}): (number | undefined)[] {\n    if (!span) return []\n\n    const [spanStart, spanEnd] = span\n    const noticeNeeded = hasTimeMismatch({\n        actualStartTime: spanStart,\n        actualEndTime: spanEnd,\n        targetStartTime: startTime,\n        targetEndTime: endTime,\n    })\n\n    return noticeNeeded\n        ? spanStart === spanEnd\n            ? [spanEnd]\n            : [spanStart, spanEnd]\n        : []\n}\n\nfunction formatTime(\n    time: Time | undefined,\n    column: CoreColumn\n): string | undefined {\n    if (time === undefined) return undefined\n    return column.formatTime(time)\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport { EntitySelectionMode, SeriesName, Color } from \"@ourworldindata/types\"\nimport { observable, computed, action, makeObservable } from \"mobx\"\nimport { ScaleLinear, scaleSqrt } from \"d3-scale\"\nimport { Quadtree, quadtree } from \"d3-quadtree\"\nimport { pairs } from \"d3-array\"\nimport { quantize, interpolate } from \"d3-interpolate\"\nimport {\n    Bounds,\n    PointVector,\n    exposeInstanceOnWindow,\n    getRelativeMouse,\n    guid,\n    intersection,\n    isTouchDevice,\n    makeFigmaId,\n    roundForSvg,\n} from \"@ourworldindata/utils\"\nimport { observer } from \"mobx-react\"\nimport { NoDataMessage } from \"../noDataMessage/NoDataMessage\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n} from \"../core/GrapherConstants\"\nimport {\n    OwidTable,\n    isNotErrorValue,\n    CoreColumn,\n} from \"@ourworldindata/core-table\"\nimport {\n    ConnectedScatterLegend,\n    ConnectedScatterLegendManager,\n} from \"./ConnectedScatterLegend\"\nimport { VerticalColorLegend } from \"../legend/VerticalColorLegend\"\nimport { VerticalColorLegendState } from \"../legend/VerticalColorLegendState\"\nimport { DualAxisComponent } from \"../axis/AxisViews\"\nimport { DualAxis, HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\n\nimport { ColorScale, NO_DATA_LABEL } from \"../color/ColorScale\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport {\n    ClipPath,\n    getShortNameForEntity,\n    makeClipPath,\n    scaleFontSize,\n} from \"../chart/ChartUtils\"\nimport {\n    ScatterPlotManager,\n    ScatterSeries,\n    SCATTER_LABEL_DEFAULT_FONT_SIZE,\n    SCATTER_LABEL_MAX_FONT_SIZE,\n    SCATTER_LABEL_MIN_FONT_SIZE,\n    SCATTER_POINT_OPACITY,\n    SeriesPoint,\n    ScatterPointQuadtreeNode,\n    SCATTER_QUADTREE_SAMPLING_DISTANCE,\n} from \"./ScatterPlotChartConstants\"\nimport { ScatterPointsWithLabels } from \"./ScatterPointsWithLabels\"\nimport { ColorScaleBin } from \"../color/ColorScaleBin\"\nimport {\n    BinEmphasis,\n    LegendStyleConfig,\n    toBinEmphasis,\n} from \"../legend/LegendStyleConfig\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport {\n    ScatterSizeLegend,\n    ScatterSizeLegendManager,\n} from \"./ScatterSizeLegend\"\nimport { TooltipState } from \"../tooltip/Tooltip\"\nimport { NoDataSection } from \"./NoDataSection\"\nimport { ScatterPlotChartState } from \"./ScatterPlotChartState\"\nimport { ChartComponentProps } from \"../chart/ChartTypeMap.js\"\nimport { toSizeRange } from \"./ScatterUtils.js\"\nimport { ScatterPlotTooltip } from \"./ScatterPlotTooltip\"\nimport { GRAY_100, GRAY_60 } from \"../color/ColorConstants\"\nimport { INACTIVE_SCATTER_POINT_COLOR } from \"./ScatterPoints\"\n\nexport type ScatterPlotChartProps = ChartComponentProps<ScatterPlotChartState>\n\n@observer\nexport class ScatterPlotChart\n    extends React.Component<ScatterPlotChartProps>\n    implements\n        ConnectedScatterLegendManager,\n        ScatterSizeLegendManager,\n        ChartInterface,\n        AxisManager\n{\n    constructor(props: ScatterPlotChartProps) {\n        super(props)\n\n        makeObservable<ScatterPlotChart, \"hoveredLegendColor\">(this, {\n            hoveredLegendColor: observable,\n            tooltipState: observable,\n        })\n    }\n\n    private readonly tooltipId = guid()\n    private readonly renderUid = guid()\n\n    // currently hovered legend color\n    private hoveredLegendColor: Color | undefined = undefined\n    // current hovered individual series + tooltip position\n    tooltipState = new TooltipState<{\n        series: ScatterSeries\n    }>()\n\n    legendStyleConfig: LegendStyleConfig = {\n        marker: {\n            default: { opacity: SCATTER_POINT_OPACITY },\n            muted: { fill: INACTIVE_SCATTER_POINT_COLOR },\n        },\n        text: { muted: { color: GRAY_60 }, highlighted: { color: GRAY_100 } },\n    }\n\n    @computed get chartState(): ScatterPlotChartState {\n        return this.props.chartState\n    }\n\n    @computed private get manager(): ScatterPlotManager {\n        return this.chartState.manager\n    }\n\n    @computed private get colorScale(): ColorScale {\n        return this.chartState.colorScale\n    }\n\n    @computed private get transformedTable(): OwidTable {\n        return this.chartState.transformedTable\n    }\n\n    @computed.struct private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get innerBounds(): Bounds {\n        return (\n            this.bounds\n                .padRight(this.sidebarWidth > 0 ? this.sidebarWidth + 20 : 0)\n                // top padding leaves room for tick labels\n                .padTop(this.chartState.verticalAxisLabel ? 0 : 6)\n                // bottom padding makes sure the x-axis label doesn't overflow\n                .padBottom(2)\n        )\n    }\n\n    @computed get axisBounds(): Bounds {\n        return this.innerBounds\n    }\n\n    @computed private get isStatic(): boolean {\n        return !!this.manager.isStatic\n    }\n\n    @computed private get canAddCountry(): boolean {\n        const { addCountryMode } = this.manager\n        return (addCountryMode &&\n            addCountryMode !== EntitySelectionMode.Disabled) as boolean\n    }\n\n    @action.bound private onSelectEntity(entityName: SeriesName): void {\n        if (this.canAddCountry)\n            this.chartState.selectionArray.toggleSelection(entityName)\n    }\n\n    // Returns the colors that are used by all points, *across the whole timeline*.\n    // This is why we need the table before the timeline filter is applied.\n    @computed private get colorsInUse(): Color[] {\n        const allValues =\n            this.manager.tableAfterAuthorTimelineAndActiveChartTransform?.get(\n                this.colorColumnSlug\n            )?.valuesIncludingErrorValues ?? []\n\n        // Need to convert InvalidCell to undefined for color scale to assign correct color\n        const colorValues = new Set(\n            allValues.map((value: any) =>\n                isNotErrorValue(value) ? value : undefined\n            )\n        ) as Set<string | number | undefined>\n\n        return colorValues\n            .values()\n            .map((colorValue) => this.colorScale.getColor(colorValue))\n            .filter((color) => color !== undefined)\n            .toArray()\n    }\n\n    @computed get detailsOrderedByReference(): string[] {\n        return this.manager.detailsOrderedByReference ?? []\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed get isStaticAndSmall(): boolean {\n        return !!this.manager.isStaticAndSmall\n    }\n\n    @action.bound onLegendMouseOver(bin: ColorScaleBin): void {\n        if (isTouchDevice()) return\n        this.hoveredLegendColor = bin.color\n    }\n\n    @action.bound onLegendMouseLeave(): void {\n        if (isTouchDevice()) return\n        this.hoveredLegendColor = undefined\n    }\n\n    // When the color legend is clicked, toggle selection fo all associated keys\n    @action.bound onLegendClick(bin: ColorScaleBin): void {\n        const { selectionArray } = this.chartState\n        if (!this.canAddCountry) return\n\n        const color = bin.color\n\n        // Find all entities that match the clicked color\n        const colorMatchingSeriesNames = this.series\n            .filter((g) => g.color === color)\n            .map((g) => g.seriesName)\n\n        // Check if all these entities are already selected\n        const allColorMatchingSeriesAreSelected =\n            intersection(colorMatchingSeriesNames, this.selectedEntityNames)\n                .length === colorMatchingSeriesNames.length\n\n        // If all matching entities are selected, deselect them;\n        // Otherwise select them\n        if (allColorMatchingSeriesAreSelected)\n            selectionArray.setSelectedEntities(\n                _.without(this.selectedEntityNames, ...colorMatchingSeriesNames)\n            )\n        else\n            selectionArray.setSelectedEntities(\n                _.uniq(\n                    this.selectedEntityNames.concat(colorMatchingSeriesNames)\n                )\n            )\n    }\n\n    @computed private get hoveredSeriesNames(): string[] {\n        const { hoveredLegendColor, tooltipState } = this\n\n        const hoveredSeriesNames =\n            hoveredLegendColor === undefined\n                ? []\n                : _.uniq(\n                      this.series\n                          .filter((g) => g.color === hoveredLegendColor)\n                          .map((g) => g.seriesName)\n                  )\n\n        if (tooltipState.target) {\n            hoveredSeriesNames.push(tooltipState.target.series.seriesName)\n        }\n\n        return hoveredSeriesNames\n    }\n\n    @computed private get isHoverModeActive(): boolean {\n        const { hoveredLegendColor, tooltipState } = this\n        return !!(\n            hoveredLegendColor !== undefined ||\n            this.hoveredSeriesNames.length > 0 ||\n            tooltipState.target\n        )\n    }\n\n    @computed private get selectedEntityNames(): string[] {\n        return this.chartState.selectionArray.selectedEntityNames\n    }\n\n    @computed get displayStartTime(): string {\n        return this.transformedTable.timeColumn.formatTime(\n            this.transformedTable.minTime ?? 1900\n        )\n    }\n\n    @computed get displayEndTime(): string {\n        return this.transformedTable.timeColumn.formatTime(\n            this.transformedTable.maxTime ?? 2000\n        )\n    }\n\n    @computed private get arrowLegend(): ConnectedScatterLegend | undefined {\n        if (\n            this.displayStartTime === this.displayEndTime ||\n            this.xColumn.isTimeColumn ||\n            this.yColumn.isTimeColumn ||\n            this.manager.isRelativeMode ||\n            !this.manager.showLegend\n        )\n            return undefined\n\n        return new ConnectedScatterLegend(this)\n    }\n\n    @action.bound private onScatterMouseEnter(series: ScatterSeries): void {\n        this.tooltipState.target = { series }\n    }\n\n    @action.bound private onScatterMouseLeave(): void {\n        this.tooltipState.target = null\n    }\n\n    @action.bound private onScatterMouseMove(\n        ev: React.MouseEvent<SVGGElement>\n    ): void {\n        const ref = this.manager?.base?.current\n        if (ref) {\n            this.tooltipState.position = getRelativeMouse(ref, ev)\n        }\n    }\n\n    @action.bound private onScatterClick(): void {\n        const { target } = this.tooltipState\n        if (target) this.onSelectEntity(target.series.seriesName)\n    }\n\n    @computed get tooltipSeries(): ScatterSeries | undefined {\n        return this.tooltipState.target?.series\n    }\n\n    @computed private get verticalColorLegendState():\n        | VerticalColorLegendState\n        | undefined {\n        if (this.categoricalLegendData.length === 0 || !this.manager.showLegend)\n            return undefined\n        return new VerticalColorLegendState(this.categoricalLegendData, {\n            baseFontSize: this.fontSize,\n            maxWidth: this.maxLegendWidth,\n            title: this.legendTitle,\n        })\n    }\n\n    @computed private get maxLegendWidth(): number {\n        return this.sidebarMaxWidth\n    }\n\n    @computed private get sidebarMinWidth(): number {\n        return Math.max(this.bounds.width * 0.1, 60)\n    }\n\n    @computed private get sidebarMaxWidth(): number {\n        return Math.max(this.bounds.width * 0.2, this.sidebarMinWidth)\n    }\n\n    @computed.struct get sidebarWidth(): number {\n        const { sidebarMinWidth, sidebarMaxWidth } = this\n\n        // No sidebar needed if there are no legends\n        if (\n            !this.verticalColorLegendState &&\n            !this.sizeLegend &&\n            !this.arrowLegend &&\n            !this.hasNoDataSection\n        )\n            return 0\n\n        const colorLegendWidth = this.verticalColorLegendState?.width ?? 0\n\n        return _.clamp(colorLegendWidth, sidebarMinWidth, sidebarMaxWidth)\n    }\n\n    @computed get dualAxis(): DualAxis {\n        const { horizontalAxisPart, verticalAxisPart } = this\n        return new DualAxis({\n            bounds: this.axisBounds,\n            horizontalAxis: horizontalAxisPart,\n            verticalAxis: verticalAxisPart,\n            comparisonLines: this.manager.comparisonLines,\n        })\n    }\n\n    @computed get yAxis(): VerticalAxis {\n        return this.dualAxis.verticalAxis\n    }\n\n    @computed get xAxis(): HorizontalAxis {\n        return this.dualAxis.horizontalAxis\n    }\n\n    @action.bound private onToggleEndpoints(): void {\n        this.manager.compareEndPointsOnly =\n            !this.compareEndPointsOnly || undefined\n    }\n\n    /** Legend colors that are currently highlighted (either hovered or have at least one selected series) */\n    @computed get activeColors(): string[] {\n        const { hoveredSeriesNames, selectedEntityNames, hoveredLegendColor } =\n            this\n\n        const activeColorsSet = new Set<string>()\n\n        if (hoveredLegendColor !== undefined)\n            activeColorsSet.add(hoveredLegendColor)\n\n        // Add colors from selected/hovered series\n        const activeSeriesNames = hoveredSeriesNames.concat(selectedEntityNames)\n        if (activeSeriesNames.length > 0) {\n            const activeSeries = this.series.filter((g) =>\n                activeSeriesNames.includes(g.seriesName)\n            )\n\n            const colorValues = new Set(\n                activeSeries.flatMap((s) => s.points.map((p) => p.color))\n            )\n\n            for (const color of colorValues\n                .values()\n                .map((color) => this.colorScale.getColor(color))\n                .filter((color) => color !== undefined)) {\n                activeColorsSet.add(color)\n            }\n        }\n\n        // If nothing is active (no hover, no selection), show all colors\n        if (activeColorsSet.size === 0) return this.colorsInUse\n\n        return Array.from(activeColorsSet)\n    }\n\n    private readonly resolveLegendBinEmphasis = (\n        bin: ColorScaleBin\n    ): Emphasis => {\n        const isActive = this.activeColors.includes(bin.color)\n        return isActive ? Emphasis.Highlighted : Emphasis.Muted\n    }\n\n    @computed private get categoricalLegendEmphasis(): BinEmphasis {\n        return toBinEmphasis(\n            this.categoricalLegendData,\n            this.resolveLegendBinEmphasis\n        )\n    }\n\n    @computed private get hideConnectedScatterLines(): boolean {\n        return !!this.manager.hideConnectedScatterLines\n    }\n\n    @computed private get hideScatterLabels(): boolean {\n        return !!this.manager.hideScatterLabels\n    }\n\n    @computed private get quadtree(): Quadtree<ScatterPointQuadtreeNode> {\n        const {\n            series: seriesArray,\n            dualAxis: { horizontalAxis, verticalAxis, innerBounds },\n        } = this\n\n        const xAxis = horizontalAxis.clone()\n        xAxis.range = innerBounds.xRange()\n        const yAxis = verticalAxis.clone()\n        yAxis.range = innerBounds.yRange()\n\n        const nodes: ScatterPointQuadtreeNode[] = seriesArray.flatMap(\n            (series) => {\n                const points = series.points.map((point) => {\n                    return new PointVector(\n                        xAxis.place(point.x),\n                        yAxis.place(point.y)\n                    )\n                })\n\n                // add single points as is\n                if (points.length < 2)\n                    return points.map((point) => ({\n                        series,\n                        x: point.x,\n                        y: point.y,\n                    }))\n\n                // sample points from line segments with a fixed step size\n                return pairs(points).flatMap(([a, b]) => {\n                    const numPoints =\n                            2 + // always include endpoints\n                            Math.floor(\n                                PointVector.distance(a, b) /\n                                    SCATTER_QUADTREE_SAMPLING_DISTANCE\n                            ),\n                        lineRange = interpolate(\n                            { x: a.x, y: a.y },\n                            { x: b.x, y: b.y }\n                        ),\n                        coords = quantize(\n                            (pct: number) => _.clone(lineRange(pct)),\n                            numPoints\n                        )\n\n                    return coords.map((point) => ({\n                        series,\n                        x: point.x,\n                        y: point.y,\n                    }))\n                })\n            }\n        )\n\n        return quadtree<ScatterPointQuadtreeNode>()\n            .x(({ x }) => x)\n            .y(({ y }) => y)\n            .addAll(nodes)\n    }\n\n    @computed private get points(): React.ReactElement {\n        return (\n            <ScatterPointsWithLabels\n                noDataMessageManager={this.manager}\n                isConnected={this.chartState.isConnected}\n                hideConnectedScatterLines={this.hideConnectedScatterLines}\n                seriesArray={this.series}\n                dualAxis={this.dualAxis}\n                colorScale={\n                    !this.colorColumn.isMissing ? this.colorScale : undefined\n                }\n                sizeScale={this.sizeScale}\n                fontScale={this.fontScale}\n                baseFontSize={this.fontSize}\n                focusedSeriesNames={this.selectedEntityNames}\n                hoveredSeriesNames={this.hoveredSeriesNames}\n                isHoverModeActive={this.isHoverModeActive}\n                tooltipSeriesName={this.tooltipSeries?.seriesName}\n                hideScatterLabels={this.hideScatterLabels}\n                hideEntityLabels={!this.manager.showSeriesLabels}\n                onMouseEnter={this.onScatterMouseEnter}\n                onMouseLeave={this.onScatterMouseLeave}\n                onClick={this.onScatterClick}\n                quadtree={this.quadtree}\n            />\n        )\n    }\n\n    @computed private get colorColumnSlug(): string | undefined {\n        return this.chartState.colorColumnSlug\n    }\n\n    @computed private get colorColumn(): CoreColumn {\n        return this.chartState.colorColumn\n    }\n\n    @computed private get categoricalLegendData(): ColorScaleBin[] {\n        return this.colorScale.legendBins.filter(\n            (bin) =>\n                this.colorsInUse.includes(bin.color) &&\n                bin.label !== NO_DATA_LABEL\n        )\n    }\n\n    @computed private get legendTitle(): string | undefined {\n        return this.colorScale.legendDescription\n    }\n\n    @computed get sizeScale(): ScaleLinear<number, number> {\n        return scaleSqrt()\n            .domain(this.chartState.sizeDomain)\n            .range(this.sizeRange)\n    }\n\n    @computed private get fontScale(): ScaleLinear<number, number> {\n        const defaultFontSize = scaleFontSize(\n            SCATTER_LABEL_DEFAULT_FONT_SIZE,\n            this.fontSize\n        )\n        const minSize = this.manager.isNarrow\n            ? SCATTER_LABEL_DEFAULT_FONT_SIZE\n            : SCATTER_LABEL_MIN_FONT_SIZE\n        const maxSize = this.manager.isNarrow\n            ? SCATTER_LABEL_DEFAULT_FONT_SIZE\n            : SCATTER_LABEL_MAX_FONT_SIZE\n        const minFontSize = scaleFontSize(minSize, this.fontSize)\n        const maxFontSize = scaleFontSize(maxSize, this.fontSize)\n        return scaleSqrt()\n            .domain(this.chartState.sizeDomain)\n            .range(\n                this.sizeColumn.isMissing\n                    ? // if the size column is missing, we want all labels to have the same font size\n                      [defaultFontSize, defaultFontSize]\n                    : [minFontSize, maxFontSize]\n            )\n    }\n\n    @computed private get sizeLegend(): ScatterSizeLegend | undefined {\n        if (this.chartState.isConnected || this.sizeColumn.isMissing)\n            return undefined\n        if (!this.manager.showLegend && !this.manager.useMinimalLabeling)\n            return undefined\n        return new ScatterSizeLegend(this)\n    }\n\n    @computed\n    private get selectedEntitiesWithoutData(): string[] {\n        // Reversing the order so that newly added entities without data\n        // show up at the top of the no data section\n        const entitiesWithoutData = _.uniq(\n            _.difference(\n                this.selectedEntityNames,\n                this.series.map((s) => s.seriesName)\n            )\n        ).reverse()\n\n        return entitiesWithoutData.map((entityName) => {\n            const shortName = getShortNameForEntity(entityName)\n            return shortName ?? entityName\n        })\n    }\n\n    @computed private get hasNoDataSection(): boolean {\n        return this.selectedEntitiesWithoutData.length > 0\n    }\n\n    override componentDidMount(): void {\n        exposeInstanceOnWindow(this)\n    }\n\n    @computed private get clipPath(): ClipPath {\n        return makeClipPath({ renderUid: this.renderUid, box: this.bounds })\n    }\n\n    renderSidebar(): React.ReactElement | null {\n        const {\n            bounds,\n            sizeLegend,\n            arrowLegend,\n            verticalColorLegendState,\n            sidebarWidth,\n        } = this\n\n        const verticalLegendHeight = verticalColorLegendState?.height ?? 0\n        const sizeLegendHeight = sizeLegend?.height ?? 0\n        const arrowLegendHeight = arrowLegend?.height ?? 0\n\n        const legendPadding = 16\n        const ySizeLegend =\n            this.legendY +\n            verticalLegendHeight +\n            (verticalLegendHeight > 0 ? legendPadding : 0)\n        const yArrowLegend =\n            ySizeLegend +\n            sizeLegendHeight +\n            (sizeLegendHeight > 0 ? legendPadding : 0)\n        const yNoDataSection =\n            yArrowLegend +\n            arrowLegendHeight +\n            (arrowLegendHeight > 0 ? legendPadding : 0)\n\n        const noDataSectionBounds = new Bounds(\n            this.legendX,\n            yNoDataSection,\n            sidebarWidth,\n            bounds.height - yNoDataSection\n        )\n\n        const separatorLine = (y: number): React.ReactElement | null =>\n            y > bounds.top ? (\n                <line\n                    id={makeFigmaId(\"separator\")}\n                    x1={roundForSvg(this.legendX)}\n                    y1={roundForSvg(y - 0.5 * legendPadding)}\n                    x2={roundForSvg(bounds.right)}\n                    y2={roundForSvg(y - 0.5 * legendPadding)}\n                    stroke=\"#e7e7e7\"\n                />\n            ) : null\n\n        return (\n            <>\n                {verticalColorLegendState && (\n                    <VerticalColorLegend\n                        state={verticalColorLegendState}\n                        x={this.legendX}\n                        y={this.legendY}\n                        interactive={!this.isStatic}\n                        styleConfig={this.legendStyleConfig}\n                        binEmphasis={this.categoricalLegendEmphasis}\n                        onMouseOver={this.onLegendMouseOver}\n                        onMouseLeave={this.onLegendMouseLeave}\n                        onClick={this.onLegendClick}\n                    />\n                )}\n                {sizeLegend && (\n                    <>\n                        {verticalColorLegendState && separatorLine(ySizeLegend)}\n                        {sizeLegend.render(this.legendX, ySizeLegend)}\n                    </>\n                )}\n                {arrowLegend && (\n                    <>\n                        {(verticalColorLegendState || sizeLegend) &&\n                            separatorLine(yArrowLegend)}\n                        <g\n                            className=\"clickable\"\n                            onClick={this.onToggleEndpoints}\n                        >\n                            {arrowLegend.render(this.legendX, yArrowLegend)}\n                        </g>\n                    </>\n                )}\n                {this.hasNoDataSection && !this.manager.isStatic && (\n                    <>\n                        {(verticalColorLegendState ||\n                            sizeLegend ||\n                            arrowLegend) &&\n                            separatorLine(noDataSectionBounds.top)}\n                        <NoDataSection\n                            seriesNames={this.selectedEntitiesWithoutData}\n                            bounds={noDataSectionBounds}\n                            baseFontSize={this.fontSize}\n                        />\n                    </>\n                )}\n            </>\n        )\n    }\n\n    renderStatic(): React.ReactElement {\n        return (\n            <>\n                {this.clipPath.element}\n                <DualAxisComponent\n                    dualAxis={this.dualAxis}\n                    showTickMarks={false}\n                    detailsMarker={this.manager.detailsMarkerInSvg}\n                />\n                <g clipPath={this.clipPath.id}>\n                    {this.points}\n                    {this.renderSidebar()}\n                </g>\n            </>\n        )\n    }\n\n    renderInteractive(): React.ReactElement {\n        return (\n            <g onMouseMove={this.onScatterMouseMove}>\n                {this.clipPath.element}\n                <DualAxisComponent\n                    dualAxis={this.dualAxis}\n                    showTickMarks={false}\n                    detailsMarker={this.manager.detailsMarkerInSvg}\n                />\n                <g clipPath={this.clipPath.id}>\n                    {this.points}\n                    {this.renderSidebar()}\n                </g>\n                {this.tooltip}\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataMessage\n                    manager={this.manager}\n                    bounds={this.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return this.manager.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n\n    @computed private get tooltip(): React.ReactElement | null {\n        return (\n            <ScatterPlotTooltip\n                id={this.tooltipId}\n                chartState={this.chartState}\n                tooltipState={this.tooltipState}\n            />\n        )\n    }\n\n    @computed private get legendY(): number {\n        return this.bounds.top + this.yAxis.labelHeight\n    }\n\n    @computed private get legendX(): number {\n        return this.bounds.right - this.sidebarWidth\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        const { yAxisConfig = {} } = this.manager\n        const config = {\n            ...yAxisConfig,\n            labelPadding: this.manager.isNarrow ? 10 : 14,\n        }\n        return new AxisConfig(config, this)\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        const { xAxisConfig = {} } = this.manager\n        const config = {\n            ...xAxisConfig,\n            labelPadding: this.manager.isNarrow ? 6 : undefined,\n        }\n        return new AxisConfig(config, this)\n    }\n\n    @computed private get yColumn(): CoreColumn {\n        return this.chartState.yColumn\n    }\n\n    @computed private get xColumn(): CoreColumn {\n        return this.chartState.xColumn\n    }\n\n    @computed get sizeColumn(): CoreColumn {\n        return this.chartState.sizeColumn\n    }\n\n    @computed get compareEndPointsOnly(): boolean {\n        return this.chartState.compareEndPointsOnly\n    }\n\n    @computed get allPoints(): SeriesPoint[] {\n        return this.chartState.allPoints\n    }\n\n    @computed private get sizeRange(): [number, number] {\n        return toSizeRange(this.chartState, this.innerBounds)\n    }\n\n    @computed private get verticalAxisPart(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig)\n    }\n\n    @computed private get horizontalAxisPart(): HorizontalAxis {\n        return this.chartState.toHorizontalAxis(this.xAxisConfig)\n    }\n\n    @computed private get series(): ScatterSeries[] {\n        return this.chartState.series\n    }\n}\n","import { ChartManager } from \"../chart/ChartManager\"\n\nimport { Color, Time, Bounds, EntityName } from \"@ourworldindata/utils\"\nimport { OwidTable } from \"@ourworldindata/core-table\"\nimport { ChartSeries } from \"../chart/ChartInterface\"\nimport { InteractionState } from \"../interaction/InteractionState.js\"\nimport { Emphasis } from \"../interaction/Emphasis.js\"\nimport {\n    GRAPHER_AREA_OPACITY_DEFAULT,\n    GRAPHER_AREA_OPACITY_HIGHLIGHTED,\n    GRAPHER_AREA_OPACITY_MUTED,\n} from \"../core/GrapherConstants.js\"\n\nexport interface MarimekkoChartManager extends ChartManager {\n    xOverrideTime?: number\n    tableAfterAuthorTimelineAndActiveChartTransform?: OwidTable\n}\n\nexport interface EntityColorData {\n    color: Color\n    colorDomainValue: string\n}\n\n/** One indicator's value for one entity, at the time it was observed */\nexport interface MarimekkoPoint {\n    value: number\n    time: Time\n}\n\n/**\n * One entity's rectangle: width from the x indicator, height from the y indicator.\n * Marimekko plots one series per entity, so `seriesName` and `entityName` always agree.\n */\nexport interface MarimekkoSeries extends ChartSeries {\n    color: Color\n    entityName: EntityName\n    shortEntityName?: string\n    /** Undefined when the entity has no y value, which draws the no-data placeholder */\n    yPoint: MarimekkoPoint | undefined\n    xPoint: MarimekkoPoint | undefined\n    entityColor: EntityColorData | undefined\n    /** Covers both focus and selection, either of which singles the entity out */\n    focus: InteractionState\n}\n\nexport interface PlacedMarimekkoSeries extends MarimekkoSeries {\n    barX: number\n    barY: number // the baseline; the bar is drawn upwards from here\n    barWidth: number\n    barHeight: number\n}\n\nexport interface RenderMarimekkoSeries extends PlacedMarimekkoSeries {\n    emphasis: Emphasis\n}\n\nexport interface MarimekkoBarStyle {\n    fillOpacity: number\n    strokeOpacity: number\n    strokeWidth: number\n}\n\nconst DEFAULT_MARIMEKKO_BAR_STYLE: MarimekkoBarStyle = {\n    fillOpacity: GRAPHER_AREA_OPACITY_DEFAULT,\n    strokeOpacity: 1,\n    strokeWidth: 0.5,\n}\n\nexport const MARIMEKKO_BAR_STYLE: Record<Emphasis, MarimekkoBarStyle> = {\n    [Emphasis.Default]: DEFAULT_MARIMEKKO_BAR_STYLE,\n    [Emphasis.Elevated]: DEFAULT_MARIMEKKO_BAR_STYLE,\n    [Emphasis.Highlighted]: {\n        fillOpacity: GRAPHER_AREA_OPACITY_HIGHLIGHTED,\n        strokeOpacity: 1,\n        strokeWidth: 1,\n    },\n    [Emphasis.Muted]: {\n        fillOpacity: GRAPHER_AREA_OPACITY_MUTED,\n        strokeOpacity: 0.2,\n        strokeWidth: 0.5,\n    },\n}\n\n/** The hatched band covering the entities that have no y value */\nexport interface MarimekkoNoDataArea {\n    x: number\n    y: number\n    width: number\n    height: number\n    labelX: number\n    labelY: number\n}\n\n/** 0 is horizontal, -90 is vertical from bottom to top, ... */\nexport const LABEL_ANGLE_IN_DEGREES = -45\n\n/** An entity that could be labelled under the x axis */\nexport interface MarimekkoLabelCandidate {\n    entityName: EntityName\n    text: string\n    bounds: Bounds\n    /** The entity's x indicator value, i.e. its bar width in domain units */\n    xValue: number\n    /** The y value at the latest time point, not at the selected one */\n    ySortValue: number | undefined\n    isSelected: boolean\n}\n\n/** A picked label, positioned along the x axis */\nexport interface PlacedMarimekkoLabel {\n    entityName: EntityName\n    text: string\n    color: Color\n    isSelected: boolean\n    /** The centre of the entity's bar */\n    preferredX: number\n    /** Shifted away from `preferredX` to clear neighbouring labels */\n    correctedX: number\n}\n\n/**\n * The label run's extent, before and after rotation by `LABEL_ANGLE_IN_DEGREES`\n */\nexport interface MarimekkoLabelMeasurements {\n    unrotatedMaxWidth: number\n    unrotatedMaxHeight: number\n    rotatedMaxWidth: number\n    rotatedMaxHeight: number\n}\n","import {\n    VerticalAlign,\n    dyFromAlign,\n    makeFigmaId,\n    roundForSvg,\n} from \"@ourworldindata/utils\"\nimport {\n    MARIMEKKO_BAR_STYLE,\n    MarimekkoNoDataArea,\n    RenderMarimekkoSeries,\n} from \"./MarimekkoChartConstants\"\nimport { Patterns, makePatternId } from \"../core/GrapherConstants\"\nimport { scaleFontSize } from \"../chart/ChartUtils\"\n\nconst PLACEHOLDER_COLOR = \"#555\"\n\ninterface MarimekkoBarsProps {\n    series: RenderMarimekkoSeries[]\n    noDataArea?: MarimekkoNoDataArea\n    fontSize: number\n    patternIdSuffix?: string\n    isFocusModeActive?: boolean\n    onEntityMouseOver?: (entityName: string, ev: React.MouseEvent) => void\n    onEntityMouseLeave?: () => void\n    onEntityClick?: (entityName: string) => void\n}\n\nexport function MarimekkoBars({\n    series,\n    noDataArea,\n    fontSize,\n    patternIdSuffix,\n    isFocusModeActive,\n    onEntityClick,\n    onEntityMouseLeave,\n    onEntityMouseOver,\n}: MarimekkoBarsProps): React.ReactElement {\n    return (\n        <>\n            {noDataArea && (\n                <rect\n                    x={roundForSvg(noDataArea.x)}\n                    y={roundForSvg(noDataArea.y)}\n                    width={roundForSvg(noDataArea.width)}\n                    height={roundForSvg(noDataArea.height)}\n                    fill={`url(#${makePatternId(Patterns.noDataPattern, patternIdSuffix)})`}\n                    opacity={0.5}\n                ></rect>\n            )}\n            {series.map((series) => (\n                <MarimekkoBar\n                    key={series.entityName}\n                    series={series}\n                    onEntityClick={onEntityClick}\n                    onEntityMouseLeave={onEntityMouseLeave}\n                    onEntityMouseOver={onEntityMouseOver}\n                />\n            ))}\n            {!isFocusModeActive && noDataArea && (\n                <text\n                    transform={`translate(${roundForSvg(\n                        noDataArea.labelX\n                    )}, ${roundForSvg(noDataArea.labelY)}) rotate(-90)`}\n                    fontWeight={700}\n                    fill=\"#666\"\n                    fontSize={scaleFontSize(12, fontSize)}\n                    textAnchor=\"middle\"\n                    dy={dyFromAlign(VerticalAlign.middle)}\n                    style={{ pointerEvents: \"none\" }}\n                >\n                    no data\n                </text>\n            )}\n        </>\n    )\n}\n\ninterface MarimekkoBarProps {\n    series: RenderMarimekkoSeries\n    onEntityMouseOver?: (entityName: string, ev: React.MouseEvent) => void\n    onEntityMouseLeave?: () => void\n    onEntityClick?: (entityName: string) => void\n}\n\nfunction MarimekkoBar({\n    series,\n    onEntityClick,\n    onEntityMouseLeave,\n    onEntityMouseOver,\n}: MarimekkoBarProps): React.ReactElement {\n    const { entityName, emphasis, barX, barY, barWidth, barHeight } = series\n    const isPlaceholder = series.yPoint === undefined\n\n    const barColor = isPlaceholder ? PLACEHOLDER_COLOR : series.color\n    const { fillOpacity, strokeOpacity, strokeWidth } =\n        MARIMEKKO_BAR_STYLE[emphasis]\n\n    return (\n        <g\n            id={makeFigmaId(\"bar\", entityName)}\n            className=\"bar\"\n            transform={`translate(${roundForSvg(barX)}, 0)`}\n            onMouseOver={(ev): void => onEntityMouseOver?.(entityName, ev)}\n            onMouseLeave={(): void => onEntityMouseLeave?.()}\n            onClick={(): void => onEntityClick?.(entityName)}\n        >\n            <rect\n                x={0}\n                y={roundForSvg(barY - barHeight)}\n                width={roundForSvg(barWidth)}\n                height={roundForSvg(barHeight)}\n                fill={barColor}\n                fillOpacity={fillOpacity}\n                stroke={barColor}\n                strokeWidth={strokeWidth}\n                strokeOpacity={isPlaceholder ? 0.8 : strokeOpacity}\n                opacity={isPlaceholder ? 0.2 : 1.0}\n            />\n        </g>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport { Bounds, Color, EntityName } from \"@ourworldindata/utils\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\nimport { DualAxis } from \"../axis/Axis\"\nimport { ColorScaleBin } from \"../color/ColorScaleBin\"\nimport { resolveEmphasis } from \"../interaction/Emphasis\"\nimport { FocusArray } from \"../focus/FocusArray\"\nimport {\n    getHoverStateForSeries,\n    getShortNameForEntity,\n} from \"../chart/ChartUtils\"\nimport {\n    EntityColorData,\n    LABEL_ANGLE_IN_DEGREES,\n    MARIMEKKO_BAR_STYLE,\n    MarimekkoLabelCandidate,\n    MarimekkoLabelMeasurements,\n    MarimekkoNoDataArea,\n    MarimekkoSeries,\n    PlacedMarimekkoLabel,\n    PlacedMarimekkoSeries,\n    RenderMarimekkoSeries,\n} from \"./MarimekkoChartConstants\"\n\nfunction noDataAreaHeight(): number {\n    return Bounds.forText(\"no data\").height + 10\n}\n\nexport function toPlacedMarimekkoSeries(\n    sortedSeries: readonly MarimekkoSeries[],\n    { x0, y0, dualAxis }: { x0: number; y0: number; dualAxis: DualAxis }\n): PlacedMarimekkoSeries[] {\n    const { horizontalAxis, verticalAxis } = dualAxis\n    const originX = horizontalAxis.place(x0)\n    const barY = verticalAxis.place(y0)\n\n    // One screen pixel expressed in domain space, so a tiny but non-zero value\n    // still paints a visible sliver\n    const onePixelInDomain =\n        verticalAxis.invert(barY - 1) - verticalAxis.invert(barY)\n    const placeholderHeight = noDataAreaHeight()\n\n    const placedSeries: PlacedMarimekkoSeries[] = []\n    let xOffset = 0\n    for (const series of sortedSeries) {\n        const xValue = series.xPoint?.value ?? 1 // one is the default here because if no x dim is given we make all bars the same width\n        const barWidth = horizontalAxis.place(xValue) - originX\n        const barHeight =\n            series.yPoint !== undefined\n                ? barY -\n                  verticalAxis.place(\n                      Math.max(series.yPoint.value, onePixelInDomain)\n                  )\n                : placeholderHeight\n\n        placedSeries.push({\n            ...series,\n            barX: originX + xOffset,\n            barY,\n            barWidth,\n            barHeight,\n        })\n        xOffset += barWidth\n    }\n    return placedSeries\n}\n\nexport function toRenderMarimekkoSeries(\n    placedSeries: readonly PlacedMarimekkoSeries[],\n    {\n        hoveredEntityName,\n        hoveredColorBin,\n    }: {\n        hoveredEntityName?: EntityName\n        hoveredColorBin?: ColorScaleBin\n    } = {}\n): RenderMarimekkoSeries[] {\n    const hoveredSeriesNames = hoveredEntityName\n        ? [hoveredEntityName]\n        : hoveredColorBin\n          ? placedSeries\n                .filter((series) =>\n                    hoveredColorBin.contains(\n                        series.entityColor?.colorDomainValue\n                    )\n                )\n                .map((series) => series.seriesName)\n          : []\n\n    const isHoverModeActive =\n        hoveredEntityName !== undefined || hoveredColorBin !== undefined\n\n    const renderSeries = placedSeries.map((series): RenderMarimekkoSeries => {\n        const hover = getHoverStateForSeries(series, {\n            hoveredSeriesNames,\n            isHoverModeActive,\n        })\n        // A hovered legend bin decides membership on its own, so a selected bar outside it fades like any other\n        const focus = hoveredColorBin ? undefined : series.focus\n        return { ...series, emphasis: resolveEmphasis({ hover, focus }) }\n    })\n\n    // Adjacent marimekko bars share an edge, so a thicker stroke has to paint after its neighbours\n    return _.sortBy(\n        renderSeries,\n        (series) => MARIMEKKO_BAR_STYLE[series.emphasis].strokeWidth\n    )\n}\n\nexport function toMarimekkoNoDataArea(\n    placedSeries: readonly PlacedMarimekkoSeries[]\n): MarimekkoNoDataArea | undefined {\n    const firstWithoutValue = placedSeries.findIndex(\n        (series) => series.yPoint === undefined\n    )\n    if (firstWithoutValue === -1) return undefined\n\n    // sortedSeries puts every entity without a value last, so one band covers them all\n    const anyValueAfterFirstGap = placedSeries\n        .slice(firstWithoutValue)\n        .some((series) => series.yPoint !== undefined)\n    if (anyValueAfterFirstGap)\n        console.error(\"Found Non-NAN values after NAN value!\")\n\n    const first = placedSeries[firstWithoutValue]\n    const last = R.last(placedSeries)!\n    const x = first.barX\n    const width = last.barX + last.barWidth - x\n    const height = noDataAreaHeight()\n\n    return {\n        x,\n        y: first.barY - height,\n        width,\n        height,\n        labelX: x + width / 2,\n        labelY: first.barY - Bounds.forText(\"no data\").width,\n    }\n}\n\n/** Vertical gap between two stacked entity labels */\nconst LABEL_SPACING = 5\n\nconst MAX_LABEL_COUNT = 20\n\n/** Picks the entities to label under the x axis */\nexport function pickMarimekkoLabelCandidates({\n    entityNamesWithBars,\n    xColumnAtLastTimePoint,\n    yColumnAtLastTimePoint,\n    selectedEntityNames,\n    focusArray,\n    availableWidth,\n    fontSize,\n}: {\n    entityNamesWithBars: Set<EntityName>\n    xColumnAtLastTimePoint: CoreColumn | undefined\n    yColumnAtLastTimePoint: CoreColumn | undefined\n    selectedEntityNames: Set<EntityName>\n    focusArray: FocusArray\n    availableWidth: number\n    fontSize: number\n}): MarimekkoLabelCandidate[] {\n    if (yColumnAtLastTimePoint === undefined) return []\n\n    const ySizeMap: Map<string, number> = new Map(\n        yColumnAtLastTimePoint.owidRows.map((row) => [\n            row.entityName,\n            row.value,\n        ])\n    )\n\n    const labelCandidateSource =\n        xColumnAtLastTimePoint ?? yColumnAtLastTimePoint\n\n    // Measured before any rotation, just normal horizontal labels\n    let candidates: MarimekkoLabelCandidate[] =\n        labelCandidateSource.owidRows.map((row) => {\n            const text = getShortNameForEntity(row.entityName) ?? row.entityName\n            return {\n                entityName: row.entityName,\n                text,\n                bounds: Bounds.forText(text, { fontSize }),\n                xValue: xColumnAtLastTimePoint !== undefined ? row.value : 1,\n                ySortValue: ySizeMap.get(row.entityName),\n                isSelected: selectedEntityNames.has(row.entityName),\n            }\n        })\n\n    candidates = candidates.filter((candidate) =>\n        entityNamesWithBars.has(candidate.entityName)\n    )\n\n    // If focus mode is active, only label focused series\n    if (focusArray.hasFocusedSeries)\n        candidates = candidates.filter((candidate) =>\n            focusArray.has(candidate.entityName)\n        )\n\n    if (candidates.length === 0) return []\n\n    // Ascending by y value, entities without a value last\n    candidates.sort((a, b) => {\n        const yValueForA = a.ySortValue\n        const yValueForB = b.ySortValue\n\n        if (yValueForA !== undefined && yValueForB !== undefined) {\n            const diff = yValueForA - yValueForB\n            if (diff !== 0) return diff\n            else return a.entityName.localeCompare(b.entityName)\n        } else if (yValueForA === undefined && yValueForB !== undefined)\n            return 1\n        else if (yValueForA !== undefined && yValueForB === undefined) return -1\n        else return 0\n    })\n\n    const picked = new Set<EntityName>(\n        candidates\n            .filter((candidate) => candidate.isSelected)\n            .map((candidate) => candidate.entityName)\n    )\n\n    const [withValues, withoutValues] = _.partition(\n        candidates,\n        (candidate) =>\n            candidate.ySortValue !== 0 && candidate.ySortValue !== undefined\n    )\n\n    // Both ends of the sort always get a label\n    if (withValues.length) {\n        picked.add(R.first(withValues)!.entityName)\n        picked.add(R.last(withValues)!.entityName)\n    }\n    if (withoutValues.length) picked.add(R.first(withoutValues)!.entityName)\n\n    const labelHeight = candidates[0].bounds.height\n    const numLabelsToAdd = Math.floor(\n        Math.min(\n            availableWidth / (labelHeight + LABEL_SPACING) / 3, // factor 3 is arbitrary to taste\n            MAX_LABEL_COUNT\n        )\n    )\n\n    // Spread the rest evenly by labelling the widest bar of each chunk\n    const chunks = splitIntoEqualDomainSizeChunks(candidates, numLabelsToAdd)\n    for (const chunk of chunks) {\n        if (chunk.some((candidate) => picked.has(candidate.entityName)))\n            continue\n        const widest = _.maxBy(chunk, (candidate) => candidate.xValue)\n        if (widest) picked.add(widest.entityName)\n    }\n\n    return candidates.filter((candidate) => picked.has(candidate.entityName))\n}\n\n/**\n * A label's rotated extent is derived from its unrotated width alone, treating the\n * text as a line rather than a box, then floored at the font size as a rough proxy\n * for the second dimension.\n */\nexport function measureMarimekkoLabels(\n    candidates: readonly MarimekkoLabelCandidate[],\n    { fontSize }: { fontSize: number }\n): MarimekkoLabelMeasurements {\n    const unrotatedMaxWidth = Math.max(\n        ...candidates.map((candidate) => candidate.bounds.width)\n    )\n    const unrotatedMaxHeight = Math.max(\n        ...candidates.map((candidate) => candidate.bounds.height)\n    )\n    const angleInRadians = (LABEL_ANGLE_IN_DEGREES * Math.PI) / 180\n\n    return {\n        unrotatedMaxWidth,\n        unrotatedMaxHeight,\n        rotatedMaxWidth: Math.max(\n            fontSize,\n            unrotatedMaxWidth * Math.abs(Math.cos(angleInRadians))\n        ),\n        rotatedMaxHeight: Math.max(\n            fontSize,\n            unrotatedMaxWidth * Math.abs(Math.sin(angleInRadians))\n        ),\n    }\n}\n\nexport function toPlacedMarimekkoLabels(\n    candidates: readonly MarimekkoLabelCandidate[],\n    {\n        placedSeriesByEntityName,\n        domainColorForEntityMap,\n        fallbackColor,\n        measurements,\n        dualAxis,\n        x0,\n    }: {\n        placedSeriesByEntityName: Map<EntityName, PlacedMarimekkoSeries>\n        domainColorForEntityMap: Map<EntityName, EntityColorData>\n        fallbackColor: Color\n        measurements: MarimekkoLabelMeasurements\n        dualAxis: DualAxis\n        x0: number\n    }\n): PlacedMarimekkoLabel[] {\n    const labels: PlacedMarimekkoLabel[] = candidates.map((candidate) => {\n        // pickMarimekkoLabelCandidates keeps only entities that have a bar\n        const series = placedSeriesByEntityName.get(candidate.entityName)!\n\n        const centreX = series.barX + series.barWidth / 2\n        const domainColor = domainColorForEntityMap.get(candidate.entityName)\n        return {\n            entityName: candidate.entityName,\n            text: candidate.text,\n            color: domainColor?.color ?? fallbackColor,\n            isSelected: candidate.isSelected,\n            preferredX: centreX,\n            correctedX: centreX,\n        }\n    })\n\n    // This collision detection code is optimized for the particular\n    // case of distributing items in 1D, knowing that we picked a low\n    // enough number of labels that we will be able to fit all labels.\n    // The algorithm iterates the list twice, i.e. works in linear time\n    // with the number of labels to show\n    // The logic in pseudo code:\n    // for current, next in iterate-left-to-right-pairs:\n    //   if next.x < current.x + label-width:\n    //      next.x = current.x + label-width\n    // last.x = Math.min(last.x, max-x)\n    // for current, prev in iterate-right-to-left-pairs:\n    //   if prev.x > current.x - label-width:\n    //      prev.x = current.x - label-width\n\n    // The label width is uniform for now and starts with\n    // the height of a label when printed in normal horizontal layout\n    // Since labels are rotated we need to make a bit more space so that they\n    // stack correctly. Consider:\n    //     ╱---╱ ╱---╱\n    //    ╱   ╱ ╱   ╱\n    //   ╱   ╱ ╱   ╱\n    //  ╱---╱ ╱---╱\n    // If we would just use exactly the label width then the flatter the angle\n    // the more they would actually overlap so we need a correction factor. It turns\n    // out than tan(angle) is the correction factor we want, although for horizontal\n    // labels we don't want to use +infinity :) so we Math.min it with the longest label width\n    if (labels.length === 0) return []\n\n    labels.sort((a, b) => {\n        const diff = a.preferredX - b.preferredX\n        if (diff !== 0) return diff\n        else return a.entityName.localeCompare(b.entityName)\n    })\n\n    const labelWidth = measurements.unrotatedMaxHeight\n    const correctionFactor =\n        1 +\n        Math.min(\n            measurements.unrotatedMaxWidth / labelWidth,\n            Math.abs(Math.tan(LABEL_ANGLE_IN_DEGREES))\n        )\n    const correctedLabelWidth = labelWidth * correctionFactor\n\n    for (let i = 0; i < labels.length - 1; i++) {\n        const current = labels[i]\n        const next = labels[i + 1]\n        const minNextX = current.correctedX + correctedLabelWidth\n        if (next.correctedX < minNextX) next.correctedX = minNextX\n    }\n    const last = R.last(labels)!\n    last.correctedX = Math.min(\n        last.correctedX,\n        dualAxis.horizontalAxis.rangeSize + dualAxis.horizontalAxis.place(x0)\n    )\n    for (let i = labels.length - 1; i > 0; i--) {\n        const current = labels[i]\n        const previous = labels[i - 1]\n        const maxPreviousX = current.correctedX - correctedLabelWidth\n        if (previous.correctedX > maxPreviousX)\n            previous.correctedX = maxPreviousX\n    }\n\n    return labels\n}\n\n/**\n * Runs of consecutive labels that the collision pass had to shift. Each run\n * shares out the marker area's height so their connector lines don't overlap.\n */\nexport function toShiftedLabelRuns(\n    placedLabels: readonly PlacedMarimekkoLabel[]\n): PlacedMarimekkoLabel[][] {\n    const runs: PlacedMarimekkoLabel[][] = []\n    let startNewRun = true\n    for (const label of placedLabels) {\n        if (label.preferredX === label.correctedX) {\n            startNewRun = true\n        } else if (startNewRun) {\n            runs.push([label])\n            startNewRun = false\n        } else {\n            R.last(runs)!.push(label)\n        }\n    }\n    return runs\n}\n\n/** This function splits label candidates into N groups so that each group has approximately\nthe same sum of x value metric. This is useful for picking labels because we want to have e.g.\n20 labels relatively evenly spaced (in x domain space) and this function gives us 20 groups that\nare roughly of equal size and then we can pick the largest of each group */\nfunction splitIntoEqualDomainSizeChunks(\n    candidates: readonly MarimekkoLabelCandidate[],\n    numChunks: number\n): MarimekkoLabelCandidate[][] {\n    const chunks: MarimekkoLabelCandidate[][] = []\n    let currentChunk: MarimekkoLabelCandidate[] = []\n    let domainSizeOfChunk = 0\n    const domainSizeThreshold = Math.ceil(\n        _.sumBy(candidates, (candidate) => candidate.xValue) / numChunks\n    )\n    for (const candidate of candidates) {\n        while (domainSizeOfChunk > domainSizeThreshold) {\n            chunks.push(currentChunk)\n            currentChunk = []\n            domainSizeOfChunk -= domainSizeThreshold\n        }\n        domainSizeOfChunk += candidate.xValue\n        currentChunk.push(candidate)\n    }\n    chunks.push(currentChunk)\n\n    return chunks.filter((chunk) => chunk.length > 0)\n}\n","import React from \"react\"\nimport * as R from \"remeda\"\nimport {\n    Bounds,\n    Color,\n    EntitySelectionMode,\n    HorizontalAlign,\n    Position,\n    dyFromAlign,\n    excludeUndefined,\n    exposeInstanceOnWindow,\n    getRelativeMouse,\n    guid,\n    makeFigmaId,\n    roundForSvg,\n} from \"@ourworldindata/utils\"\nimport { action, computed, makeObservable, observable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n} from \"../core/GrapherConstants\"\nimport { scaleFontSize } from \"../chart/ChartUtils\"\nimport { DualAxisComponent } from \"../axis/AxisViews\"\nimport { NoDataMessage } from \"../noDataMessage/NoDataMessage\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { VerticalAlign } from \"@ourworldindata/types\"\nimport {\n    OwidTable,\n    CoreColumn,\n    ColumnTypeMap,\n} from \"@ourworldindata/core-table\"\nimport { LEGEND_STYLE_FOR_STACKED_CHARTS } from \"../stackedCharts/StackedConstants\"\nimport { TooltipFooterIcon } from \"../tooltip/TooltipProps.js\"\nimport {\n    Tooltip,\n    TooltipValue,\n    TooltipState,\n    makeTooltipRoundingNotice,\n    makeTooltipToleranceNotice,\n} from \"../tooltip/Tooltip\"\nimport { HorizontalCategoricalColorLegend } from \"../legend/HorizontalCategoricalColorLegend\"\nimport { HorizontalCategoricalColorLegendState } from \"../legend/HorizontalCategoricalColorLegendState\"\nimport { CategoricalBin, ColorScaleBin } from \"../color/ColorScaleBin\"\nimport {\n    BinEmphasis,\n    LegendStyleConfig,\n    toBinEmphasis,\n} from \"../legend/LegendStyleConfig\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport { DualAxis, HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\nimport {\n    LABEL_ANGLE_IN_DEGREES,\n    MarimekkoChartManager,\n    MarimekkoLabelCandidate,\n    MarimekkoLabelMeasurements,\n    MarimekkoNoDataArea,\n    MarimekkoSeries,\n    PlacedMarimekkoLabel,\n    PlacedMarimekkoSeries,\n    RenderMarimekkoSeries,\n} from \"./MarimekkoChartConstants\"\nimport { MarimekkoChartState } from \"./MarimekkoChartState\"\nimport { ChartComponentProps } from \"../chart/ChartTypeMap.js\"\nimport { MarimekkoBars } from \"./MarimekkoBars\"\nimport {\n    measureMarimekkoLabels,\n    pickMarimekkoLabelCandidates,\n    toMarimekkoNoDataArea,\n    toPlacedMarimekkoLabels,\n    toPlacedMarimekkoSeries,\n    toRenderMarimekkoSeries,\n    toShiftedLabelRuns,\n} from \"./MarimekkoChartHelpers\"\n\nconst MARKER_MARGIN = 4\nconst MARKER_AREA_HEIGHT = 25\n\nexport type MarimekkoChartProps = ChartComponentProps<MarimekkoChartState>\n\n@observer\nexport class MarimekkoChart\n    extends React.Component<MarimekkoChartProps>\n    implements ChartInterface, AxisManager\n{\n    base = React.createRef<SVGGElement>()\n\n    private readonly tooltipId = guid()\n\n    constructor(props: MarimekkoChartProps) {\n        super(props)\n\n        makeObservable(this, {\n            hoveredColorBin: observable,\n            tooltipState: observable,\n        })\n    }\n\n    // currently hovered legend color\n    hoveredColorBin: ColorScaleBin | undefined = undefined\n\n    // current tooltip target & position\n    tooltipState = new TooltipState<{\n        entityName: string\n    }>()\n\n    @computed get chartState(): MarimekkoChartState {\n        return this.props.chartState\n    }\n\n    @computed private get manager(): MarimekkoChartManager {\n        return this.chartState.manager\n    }\n\n    @computed private get series(): readonly MarimekkoSeries[] {\n        return this.chartState.series\n    }\n\n    @computed private get latestTime(): number | undefined {\n        const { yColumnSlug } = this.chartState\n        const times = yColumnSlug\n            ? this.manager.tableAfterAuthorTimelineAndActiveChartTransform?.getTimesUniqSortedAscForColumns(\n                  [yColumnSlug]\n              )\n            : undefined\n\n        return times ? R.last(times) : undefined\n    }\n    @computed private get tableAtLatestTimelineTimepoint():\n        | OwidTable\n        | undefined {\n        if (this.latestTime)\n            return this.manager.tableAfterAuthorTimelineAndActiveChartTransform?.filterByTargetTimes(\n                [this.latestTime],\n                0\n            )\n        else return undefined\n    }\n    @computed private get xColumnAtLastTimePoint(): CoreColumn | undefined {\n        const { xColumnSlug } = this.chartState\n        if (xColumnSlug === undefined) return undefined\n        if (this.tableAtLatestTimelineTimepoint)\n            return this.tableAtLatestTimelineTimepoint.getColumns([\n                xColumnSlug,\n            ])[0]\n        else return undefined\n    }\n\n    @computed private get yColumnAtLastTimePoint(): CoreColumn | undefined {\n        const { yColumnSlug } = this.chartState\n        if (yColumnSlug === undefined) return undefined\n        return this.tableAtLatestTimelineTimepoint?.getColumns([yColumnSlug])[0]\n    }\n\n    @computed private get bounds(): Bounds {\n        return (this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS).padRight(10)\n    }\n\n    @computed private get innerBounds(): Bounds {\n        // This is a workaround to get the actual width of the vertical axis - dualAxis does this\n        // internally but we can't access this.dualAxis here due to a dependency cycle\n        const axis = this.verticalAxisPart.clone()\n        axis.range = [0, this.bounds.height]\n        const verticalAxisTrueWidth = axis.width\n\n        const whiteSpaceOnLeft = this.bounds.left + verticalAxisTrueWidth\n        const labelLinesHeight = MARKER_AREA_HEIGHT\n        // only pad left by the amount the longest label would exceed whatever space the\n        // vertical axis needs anyhow for label and tickmarks\n        const marginToEnsureWidestEntityLabelFitsEvenIfAtX0 =\n            Math.max(whiteSpaceOnLeft, this.labelMeasurements.rotatedMaxWidth) -\n            whiteSpaceOnLeft\n        return this.bounds\n            .padBottom(this.labelMeasurements.rotatedMaxHeight + 2)\n            .padBottom(labelLinesHeight)\n            .padTop(\n                this.showLegend\n                    ? this.legendState.height + this.legendPaddingTop\n                    : 0\n            )\n            .padLeft(marginToEnsureWidestEntityLabelFitsEvenIfAtX0)\n    }\n\n    @computed private get isStatic(): boolean {\n        return this.manager.isStatic ?? false\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get xRange(): [number, number] {\n        return [this.bounds.left, this.bounds.right]\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        return new AxisConfig(this.manager.yAxisConfig, this)\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        const { xColumnSlug } = this.chartState\n        return new AxisConfig(\n            {\n                ...this.manager.xAxisConfig,\n                orient: Position.top,\n                hideAxis: xColumnSlug === undefined,\n                hideGridlines: xColumnSlug === undefined,\n            },\n            this\n        )\n    }\n\n    @computed private get verticalAxisPart(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig)\n    }\n\n    @computed private get horizontalAxisPart(): HorizontalAxis {\n        return this.chartState.toHorizontalAxis(this.xAxisConfig)\n    }\n\n    @computed private get dualAxis(): DualAxis {\n        return new DualAxis({\n            bounds: this.innerBounds,\n            verticalAxis: this.verticalAxisPart,\n            horizontalAxis: this.horizontalAxisPart,\n            comparisonLines: this.manager.comparisonLines,\n        })\n    }\n\n    @computed get placedSeries(): PlacedMarimekkoSeries[] {\n        const { x0, y0, sortedSeries } = this.chartState\n        return toPlacedMarimekkoSeries(sortedSeries, {\n            x0,\n            y0,\n            dualAxis: this.dualAxis,\n        })\n    }\n\n    @computed private get hoveredEntityName(): string | undefined {\n        const { target, fading } = this.tooltipState\n        return target && !fading ? target.entityName : undefined\n    }\n\n    @computed private get renderSeries(): RenderMarimekkoSeries[] {\n        return toRenderMarimekkoSeries(this.placedSeries, {\n            hoveredEntityName: this.hoveredEntityName,\n            hoveredColorBin: this.hoveredColorBin,\n        })\n    }\n\n    @computed private get noDataArea(): MarimekkoNoDataArea | undefined {\n        return toMarimekkoNoDataArea(this.placedSeries)\n    }\n\n    @computed private get placedSeriesByEntityName(): Map<\n        string,\n        PlacedMarimekkoSeries\n    > {\n        return new Map(\n            this.placedSeries.map((series) => [series.entityName, series])\n        )\n    }\n\n    // legend props\n\n    @computed private get legendPaddingTop(): number {\n        return this.legendState.height > 0 ? this.fontSize : 0\n    }\n\n    @computed private get legendWidth(): number {\n        return this.bounds.width\n    }\n\n    @computed get detailsOrderedByReference(): string[] {\n        return this.manager.detailsOrderedByReference ?? []\n    }\n\n    @computed private get categoricalLegendData(): CategoricalBin[] {\n        if (!this.chartState.colorColumnSlug) return []\n        return this.chartState.colorScale.categoricalLegendBins\n    }\n\n    private readonly resolveLegendBinEmphasis = (\n        bin: ColorScaleBin\n    ): Emphasis => {\n        if (!this.activeColors && !this.hoverColors) return Emphasis.Default\n\n        const isHovered = this.hoverColors?.includes(bin.color)\n        if (isHovered) return Emphasis.Highlighted\n\n        const isActive = this.activeColors?.includes(bin.color)\n        return isActive ? Emphasis.Highlighted : Emphasis.Muted\n    }\n\n    @computed private get categoricalLegendEmphasis(): BinEmphasis {\n        return toBinEmphasis(\n            this.categoricalLegendData,\n            this.resolveLegendBinEmphasis\n        )\n    }\n\n    legendStyleConfig: LegendStyleConfig = LEGEND_STYLE_FOR_STACKED_CHARTS\n\n    @computed private get hoverColors(): Color[] | undefined {\n        if (this.hoveredColorBin) return [this.hoveredColorBin.color]\n        const { entityColor } = this.tooltipSeries ?? {}\n        return entityColor ? [entityColor.color] : undefined\n    }\n\n    @computed private get activeColors(): Color[] | undefined {\n        const colors = R.unique(\n            excludeUndefined(\n                this.series\n                    .filter((series) => series.focus.active)\n                    .map((series) => series.entityColor?.color)\n            )\n        )\n        return colors.length > 0 ? colors : undefined\n    }\n\n    @computed private get showLegend(): boolean {\n        return !!this.chartState.colorColumnSlug && !!this.manager.showLegend\n    }\n\n    @action.bound onLegendMouseOver(bin: ColorScaleBin): void {\n        this.chartState.focusArray.clear()\n        this.hoveredColorBin = bin\n    }\n\n    @action.bound onLegendMouseLeave(): void {\n        this.hoveredColorBin = undefined\n    }\n\n    @computed private get legendState(): HorizontalCategoricalColorLegendState {\n        return new HorizontalCategoricalColorLegendState(\n            this.categoricalLegendData,\n            {\n                baseFontSize: this.fontSize,\n                width: this.legendWidth,\n                align: HorizontalAlign.left,\n            }\n        )\n    }\n\n    @action.bound private onEntityMouseOver(entityName: string): void {\n        this.chartState.focusArray.clear()\n        this.tooltipState.target = { entityName }\n    }\n\n    @action.bound private onMouseMove(ev: React.MouseEvent): void {\n        const ref = this.manager.base?.current\n        if (ref) {\n            this.tooltipState.position = getRelativeMouse(ref, ev)\n        }\n    }\n\n    @action.bound private dismissTooltip(): void {\n        this.tooltipState.target = null\n    }\n\n    @action.bound private onEntityClick(entityName: string): void {\n        this.onSelectEntity(entityName)\n    }\n\n    @action.bound private onSelectEntity(entityName: string): void {\n        if (this.canAddCountry)\n            this.chartState.selectionArray.toggleSelection(entityName)\n    }\n    @computed private get canAddCountry(): boolean {\n        const { addCountryMode } = this.manager\n        return (addCountryMode &&\n            addCountryMode !== EntitySelectionMode.Disabled) as boolean\n    }\n\n    @computed private get tooltipSeries(): MarimekkoSeries | undefined {\n        const { target } = this.tooltipState\n        return (\n            target &&\n            this.series.find(\n                ({ entityName }) => entityName === target.entityName\n            )\n        )\n    }\n\n    override componentDidMount(): void {\n        exposeInstanceOnWindow(this)\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataMessage\n                    manager={this.manager}\n                    bounds={this.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        const {\n            manager,\n            bounds,\n            dualAxis,\n            tooltipSeries,\n            manager: { endTime, xOverrideTime },\n            tooltipState: { target, position, fading },\n        } = this\n        const { xColumn, yColumn, colorColumn, colorScale } = this.chartState\n        const { timeColumn } = this.chartState.inputTable\n\n        const { entityName, xPoint, yPoint } = tooltipSeries ?? {}\n\n        const yOriginalTimeFormatted =\n            yPoint && yPoint.time !== endTime\n                ? yColumn.formatTime(yPoint.time)\n                : undefined\n\n        // The x axis label already states an overridden x time\n        const shouldShowXTimeNotice =\n            xPoint && xPoint.time !== endTime && xOverrideTime === undefined\n        const xOriginalTime = shouldShowXTimeNotice ? xPoint?.time : undefined\n        const xOriginalTimeFormatted = xOriginalTime\n            ? xColumn?.formatTime(xOriginalTime)\n            : undefined\n        const targetNotice =\n            xOriginalTime || yOriginalTimeFormatted\n                ? timeColumn.formatValue(endTime)\n                : undefined\n        const toleranceNotice = targetNotice\n            ? {\n                  icon: TooltipFooterIcon.Notice,\n                  text: makeTooltipToleranceNotice(targetNotice),\n              }\n            : undefined\n\n        const columns = excludeUndefined([xColumn, yColumn])\n        const allRoundedToSigFigs = columns.every(\n            (column) => column.roundsToSignificantFigures\n        )\n        const anyRoundedToSigFigs = columns.some(\n            (column) => column.roundsToSignificantFigures\n        )\n        const sigFigs = excludeUndefined(\n            columns.map((column) =>\n                column.roundsToSignificantFigures\n                    ? column.numSignificantFigures\n                    : undefined\n            )\n        )\n        const roundingNotice = anyRoundedToSigFigs\n            ? {\n                  icon: allRoundedToSigFigs\n                      ? TooltipFooterIcon.None\n                      : TooltipFooterIcon.Significance,\n                  text: makeTooltipRoundingNotice(sigFigs, {\n                      plural: sigFigs.length > 1,\n                  }),\n              }\n            : undefined\n        const showSignificanceSuperscriptIfApplicable =\n            !!roundingNotice && roundingNotice.icon !== TooltipFooterIcon.None\n\n        const footer = excludeUndefined([toleranceNotice, roundingNotice])\n\n        return (\n            <g\n                ref={this.base}\n                id={makeFigmaId(\"marimekko-chart\")}\n                onMouseMove={(ev): void => this.onMouseMove(ev)}\n                onMouseLeave={(): void => this.dismissTooltip()}\n            >\n                <rect\n                    x={roundForSvg(bounds.left)}\n                    y={roundForSvg(bounds.top)}\n                    width={roundForSvg(bounds.width)}\n                    height={roundForSvg(bounds.height)}\n                    opacity={0}\n                    fill=\"rgba(255,255,255,0)\"\n                />\n                <DualAxisComponent\n                    dualAxis={dualAxis}\n                    showTickMarks={true}\n                    detailsMarker={manager.detailsMarkerInSvg}\n                />\n                {this.showLegend && (\n                    <HorizontalCategoricalColorLegend\n                        state={this.legendState}\n                        x={this.bounds.x}\n                        y={this.bounds.top}\n                        interactive={!this.isStatic}\n                        styleConfig={this.legendStyleConfig}\n                        binEmphasis={this.categoricalLegendEmphasis}\n                        onMouseOver={this.onLegendMouseOver}\n                        onMouseLeave={this.onLegendMouseLeave}\n                    />\n                )}\n                {this.renderBars()}\n                {this.renderLabelLines()}\n                {this.renderLabels()}\n                {target && (\n                    <Tooltip\n                        id={this.tooltipId}\n                        tooltipManager={this.manager}\n                        x={position.x}\n                        y={position.y}\n                        style={{ maxWidth: \"250px\" }}\n                        offsetX={20}\n                        offsetY={-16}\n                        title={entityName}\n                        subtitle={timeColumn.formatValue(endTime)}\n                        footer={footer}\n                        dissolve={fading}\n                        dismiss={() => (this.tooltipState.target = null)}\n                    >\n                        {yPoint && (\n                            <TooltipValue\n                                label={yColumn.displayName}\n                                unit={yColumn.displayUnit}\n                                value={yColumn.formatValueShort(yPoint.value)}\n                                originalTime={yOriginalTimeFormatted}\n                                showSignificanceSuperscript={\n                                    showSignificanceSuperscriptIfApplicable &&\n                                    yColumn.roundsToSignificantFigures\n                                }\n                            />\n                        )}\n                        {xColumn && !xColumn.isMissing && (\n                            <TooltipValue\n                                label={xColumn.displayName}\n                                unit={xColumn.displayUnit}\n                                value={xColumn.formatValueShort(xPoint?.value)}\n                                originalTime={xOriginalTimeFormatted}\n                                showSignificanceSuperscript={\n                                    showSignificanceSuperscriptIfApplicable &&\n                                    xColumn.roundsToSignificantFigures\n                                }\n                            />\n                        )}\n                        {!colorColumn.isMissing &&\n                            tooltipSeries?.entityColor &&\n                            !(\n                                colorColumn instanceof ColumnTypeMap.Continent\n                            ) && (\n                                <TooltipValue\n                                    label={\n                                        colorScale.legendDescription ??\n                                        colorColumn.displayName\n                                    }\n                                    value={\n                                        colorScale.getBinForValue(\n                                            tooltipSeries.entityColor\n                                                .colorDomainValue\n                                        )?.label ??\n                                        tooltipSeries.entityColor\n                                            .colorDomainValue\n                                    }\n                                />\n                            )}\n                    </Tooltip>\n                )}\n            </g>\n        )\n    }\n\n    private renderBars(): React.ReactElement {\n        return (\n            <MarimekkoBars\n                series={this.renderSeries}\n                noDataArea={this.noDataArea}\n                fontSize={this.fontSize}\n                patternIdSuffix={this.manager.patternIdSuffix}\n                onEntityClick={this.onEntityClick}\n                onEntityMouseLeave={this.dismissTooltip}\n                onEntityMouseOver={this.onEntityMouseOver}\n            />\n        )\n    }\n\n    @computed private get pickedLabelCandidates(): MarimekkoLabelCandidate[] {\n        const { xColumnAtLastTimePoint, yColumnAtLastTimePoint, xRange } = this\n        const { selectedSeries, focusArray } = this.chartState\n\n        return pickMarimekkoLabelCandidates({\n            entityNamesWithBars: new Set(\n                this.series.map(({ entityName }) => entityName)\n            ),\n            xColumnAtLastTimePoint,\n            yColumnAtLastTimePoint,\n            selectedEntityNames: new Set(\n                selectedSeries.map((series) => series.entityName)\n            ),\n            focusArray,\n            availableWidth: xRange[1] - xRange[0],\n            fontSize: this.entityLabelFontSize,\n        })\n    }\n\n    @computed private get labelMeasurements(): MarimekkoLabelMeasurements {\n        return measureMarimekkoLabels(this.pickedLabelCandidates, {\n            fontSize: this.fontSize,\n        })\n    }\n\n    @computed private get placedLabels(): PlacedMarimekkoLabel[] {\n        const { x0, domainColorForEntityMap, yColumnColor } = this.chartState\n\n        return toPlacedMarimekkoLabels(this.pickedLabelCandidates, {\n            placedSeriesByEntityName: this.placedSeriesByEntityName,\n            domainColorForEntityMap,\n            fallbackColor: yColumnColor,\n            measurements: this.labelMeasurements,\n            dualAxis: this.dualAxis,\n            x0,\n        })\n    }\n\n    @computed private get shiftedLabelRuns(): PlacedMarimekkoLabel[][] {\n        return toShiftedLabelRuns(this.placedLabels)\n    }\n\n    private renderLabelLines(): React.ReactElement[] {\n        const barEndpointY = this.dualAxis.verticalAxis.place(0)\n        const markerBarEndpointY = barEndpointY + MARKER_MARGIN\n        const markerTextEndpointY =\n            barEndpointY + MARKER_AREA_HEIGHT - MARKER_MARGIN\n        const markerNetHeight = MARKER_AREA_HEIGHT - 2 * MARKER_MARGIN\n\n        const labelLines: React.ReactElement[] = []\n        for (const run of this.shiftedLabelRuns) {\n            const markerStepSize = markerNetHeight / (run.length + 1)\n            run.forEach((label, indexInRun) => {\n                const directionUnawareMakerYMid =\n                    (indexInRun + 1) * markerStepSize\n                const markerYMid =\n                    label.preferredX > label.correctedX\n                        ? directionUnawareMakerYMid\n                        : markerNetHeight - directionUnawareMakerYMid\n                labelLines.push(\n                    <g\n                        id={makeFigmaId(\"label-line\", label.entityName)}\n                        className=\"indicator\"\n                        key={`labelline-${label.entityName}`}\n                    >\n                        <path\n                            d={`M${roundForSvg(label.preferredX)},${roundForSvg(\n                                markerBarEndpointY\n                            )} v${roundForSvg(markerYMid)} H${roundForSvg(\n                                label.correctedX\n                            )} V${roundForSvg(markerTextEndpointY)}`}\n                            stroke={label.isSelected ? \"#999\" : \"#bbb\"}\n                            strokeWidth={1}\n                            fill=\"none\"\n                        />\n                    </g>\n                )\n            })\n        }\n        const unshiftedLabels = this.placedLabels.filter(\n            (label) => label.preferredX === label.correctedX\n        )\n        for (const label of unshiftedLabels) {\n            labelLines.push(\n                <g\n                    id={makeFigmaId(\"label-line\", label.entityName)}\n                    key={`labelline-${label.entityName}`}\n                >\n                    <path\n                        d={`M${roundForSvg(label.preferredX)},${roundForSvg(\n                            markerBarEndpointY\n                        )} V${roundForSvg(markerTextEndpointY)}`}\n                        stroke={label.isSelected ? \"#555\" : \"#bbb\"}\n                        strokeWidth={1}\n                        fill=\"none\"\n                    />\n                </g>\n            )\n        }\n        return labelLines\n    }\n\n    private renderLabels(): React.ReactElement[] {\n        const labelsY = MARKER_AREA_HEIGHT + this.dualAxis.verticalAxis.place(0)\n        return this.placedLabels.map((label) => (\n            <g\n                key={`label-${label.entityName}`}\n                id={makeFigmaId(\"label\", label.entityName)}\n                transform={`translate(${roundForSvg(label.correctedX)}, ${roundForSvg(\n                    labelsY\n                )})`}\n            >\n                <text\n                    y={0}\n                    fontWeight={label.isSelected ? 700 : 400}\n                    fill={label.color}\n                    transform={`rotate(${LABEL_ANGLE_IN_DEGREES}, 0, 0)`}\n                    fontSize={this.entityLabelFontSize}\n                    textAnchor=\"end\"\n                    dy={dyFromAlign(VerticalAlign.middle)}\n                    onMouseOver={(): void =>\n                        this.onEntityMouseOver(label.entityName)\n                    }\n                    onMouseLeave={(): void => this.dismissTooltip()}\n                    onClick={(): void => this.onEntityClick(label.entityName)}\n                >\n                    {label.text}\n                </text>\n            </g>\n        ))\n    }\n\n    @computed private get entityLabelFontSize(): number {\n        return scaleFontSize(12, this.fontSize)\n    }\n}\n","import { BezierArrow, BezierArrowProps } from \"./BezierArrow.js\"\n\nexport function HorizontalArrow(\n    props: Omit<BezierArrowProps, \"start\" | \"end\"> & {\n        y: number\n        startX: number\n        endX: number\n    }\n): React.ReactElement {\n    const { y, startX, endX, ...arrowProps } = props\n\n    return (\n        <BezierArrow\n            start={{ x: startX, y }}\n            end={{ x: endX, y }}\n            {...arrowProps}\n        />\n    )\n}\n","import * as React from \"react\"\nimport * as R from \"remeda\"\nimport { match } from \"ts-pattern\"\nimport { makeFigmaId, roundForSvg } from \"@ourworldindata/utils\"\nimport { DumbbellConnectorStyle } from \"@ourworldindata/types\"\nimport {\n    RenderDumbbellSeries,\n    DUMBBELL_STYLE,\n    PlacedDumbbellHead,\n} from \"./DumbbellChartConstants\"\nimport { GRAY_50, GRAY_90 } from \"../color/ColorConstants.js\"\nimport { HorizontalArrow } from \"../arrows/Arrows.js\"\n\nexport function TimeRangeDumbbell({\n    series,\n}: {\n    series: RenderDumbbellSeries\n}): React.ReactElement {\n    const style = DUMBBELL_STYLE[series.emphasis]\n    const { start, end } = series\n\n    const labelFontSize = series.label.fontSettings.fontSize\n    const strokeWidth = labelFontSize <= 10.5 ? 1 : 1.5\n\n    return (\n        <g id={makeFigmaId(\"dumbbell\")} opacity={style.opacity}>\n            <DumbbellArrow\n                startX={start.x}\n                endX={end.x}\n                color={series.color}\n                width={strokeWidth}\n                headLength={Math.min(5.5, 0.8 * end.radius)}\n            />\n        </g>\n    )\n}\n\nexport function TwoColumnDumbbell({\n    series,\n    connectorStyle,\n}: {\n    series: RenderDumbbellSeries\n    connectorStyle: DumbbellConnectorStyle\n}): React.ReactElement {\n    return match(connectorStyle)\n        .with(DumbbellConnectorStyle.Arrow, () => (\n            <TwoColumnArrowDumbbell series={series} />\n        ))\n        .with(DumbbellConnectorStyle.Line, () => (\n            <TwoColumnLineDumbbell series={series} />\n        ))\n        .exhaustive()\n}\n\nfunction TwoColumnLineDumbbell({\n    series,\n}: {\n    series: RenderDumbbellSeries\n}): React.ReactElement {\n    const style = DUMBBELL_STYLE[series.emphasis]\n    const { start, end } = series\n\n    const yOffset = getOverlappingHeadsYOffset(start, end)\n\n    return (\n        <g id={makeFigmaId(\"dumbbell\")} opacity={style.opacity}>\n            <line\n                x1={roundForSvg(start.x)}\n                x2={roundForSvg(end.x)}\n                stroke={GRAY_50}\n                strokeWidth={2}\n            />\n            <DumbbellHead\n                id={makeFigmaId(\"start\")}\n                head={start}\n                y={-yOffset}\n                outline\n            />\n            <DumbbellHead\n                id={makeFigmaId(\"end\")}\n                head={end}\n                y={yOffset}\n                outline\n            />\n        </g>\n    )\n}\n\nfunction TwoColumnArrowDumbbell({\n    series,\n}: {\n    series: RenderDumbbellSeries\n}): React.ReactElement {\n    const style = DUMBBELL_STYLE[series.emphasis]\n    const { start, end } = series\n\n    const distance = Math.abs(end.x - start.x)\n    const gap = Math.max(0, distance - (start.radius + end.radius))\n\n    const minArrowPadding = 1\n    const arrowPadding = R.clamp(gap / 8, { min: 1, max: start.radius / 2 })\n\n    const sign = end.x >= start.x ? 1 : -1\n    const arrowStartX = start.x + sign * (start.radius + arrowPadding)\n    const arrowEndX = end.x - sign * (end.radius + arrowPadding)\n\n    // Don't show the arrow if the heads are too close together\n    const minArrowLength = 3\n    const shouldShowArrow = gap > minArrowLength + 2 * minArrowPadding\n\n    const yOffset = getOverlappingHeadsYOffset(start, end)\n\n    return (\n        <g id={makeFigmaId(\"dumbbell\")} opacity={style.opacity}>\n            {shouldShowArrow ? (\n                <DumbbellArrow\n                    startX={arrowStartX}\n                    endX={arrowEndX}\n                    color={GRAY_90}\n                    headLength={Math.min(4.5, 0.6 * start.radius)}\n                />\n            ) : (\n                <line\n                    x1={roundForSvg(arrowStartX)}\n                    x2={roundForSvg(arrowEndX)}\n                    stroke={GRAY_90}\n                />\n            )}\n            <DumbbellHead\n                id={makeFigmaId(\"start\")}\n                head={start}\n                y={-yOffset}\n                outline\n            />\n            <DumbbellHead\n                id={makeFigmaId(\"end\")}\n                head={end}\n                y={yOffset}\n                outline\n            />\n        </g>\n    )\n}\n\nfunction DumbbellArrow({\n    startX,\n    endX,\n    width,\n    color,\n    headLength,\n}: {\n    startX: number\n    endX: number\n    width?: number\n    color?: string\n    headLength?: number\n}): React.ReactElement {\n    return (\n        <HorizontalArrow\n            y={0}\n            startX={startX}\n            endX={endX}\n            width={width}\n            color={color}\n            headStyle=\"solid\"\n            headLength={headLength}\n            headAngle={35}\n            lineCaps=\"sharp\"\n        />\n    )\n}\n\nfunction getOverlappingHeadsYOffset(\n    start: PlacedDumbbellHead,\n    end: PlacedDumbbellHead\n): number {\n    // If the heads overlap by more than 50%, add a small vertical offset\n    // to prevent the circles from completely obscuring each other\n    const distance = Math.abs(end.x - start.x)\n    const overlap = start.radius + end.radius - distance\n    const overlapRatio = overlap / (start.radius + end.radius)\n\n    return overlapRatio > 0.6 ? 2 : 0\n}\n\nfunction DumbbellHead({\n    id,\n    head,\n    outline = false,\n    y = 0,\n}: {\n    id: string\n    head: PlacedDumbbellHead\n    outline?: boolean\n    y?: number\n}): React.ReactElement {\n    return (\n        <circle\n            id={id}\n            cx={roundForSvg(head.x)}\n            cy={roundForSvg(y)}\n            r={roundForSvg(head.radius)}\n            fill={head.color}\n            stroke={outline ? \"white\" : undefined}\n        />\n    )\n}\n","import { PadObject, Position, RequiredBy } from \"@ourworldindata/utils\"\nimport { DumbbellHead, SizedDumbbellSeries } from \"./DumbbellChartConstants.js\"\n\nexport interface AxisLayout {\n    domain: [number, number]\n    pad: RequiredBy<PadObject, Position.left | Position.right>\n}\n\n/** Computes the percent change from `startValue` to `endValue` */\nexport function computePercentChange(\n    startValue: number,\n    endValue: number\n): number | undefined {\n    if (startValue === 0) return undefined\n    return ((endValue - startValue) / Math.abs(startValue)) * 100\n}\n\n/** Returns the start/end heads ordered by their spatial position on the axis */\nexport function toLeftRight<H extends DumbbellHead>(\n    start: H,\n    end: H\n): { left: H; right: H } {\n    return start.value <= end.value\n        ? { left: start, right: end }\n        : { left: end, right: start }\n}\n\n/**\n * Ensures every row's value labels fit inside the chart area by adjusting\n * the axis domain and/or adding padding.\n *\n * On each side, one of two strategies is used depending on whether the author\n * has specified a fixed domain edge:\n * - Unfixed: widen the domain so dots shift inward, making room for labels\n * - Fixed: preserve the user's domain edge; add padding instead\n *\n * Because the two sides interact (widening one shifts all dots), we iterate\n * until overflow is below a tolerance.\n */\nexport function calculateAxisLayout({\n    series,\n    domain,\n    width,\n    minFixed,\n    maxFixed,\n}: {\n    series: SizedDumbbellSeries[]\n    domain: [number, number]\n    width: number\n    minFixed: boolean\n    maxFixed: boolean\n}): AxisLayout {\n    if (series.length === 0 || width <= 0)\n        return { domain, pad: { left: 0, right: 0 } }\n\n    const rows = series.map((series) => {\n        const { left, right } = toLeftRight(series.start, series.end)\n        return {\n            left: {\n                value: left.value,\n                labelWidth: left.label\n                    ? left.label.width + left.label.padding\n                    : 0,\n            },\n            right: {\n                value: right.value,\n                labelWidth: right.label\n                    ? right.label.width + right.label.padding\n                    : 0,\n            },\n        }\n    })\n\n    let domainStart = domain[0]\n    let domainEnd = domain[1]\n    let padLeft = 0\n    let padRight = 0\n\n    const MAX_ITERATIONS = 5\n    const TOLERANCE = 0.5 // px\n\n    for (let i = 0; i < MAX_ITERATIONS; i++) {\n        const domainSpan = domainEnd - domainStart\n        const effectiveWidth = width - padLeft - padRight\n        if (domainSpan <= 0 || effectiveWidth <= 0) break\n\n        // Helper to convert a value to its pixel position along the axis\n        const pixelsPerUnit = effectiveWidth / domainSpan\n        const domainStartPixel = padLeft - domainStart * pixelsPerUnit\n        const toPixel = (value: number): number =>\n            domainStartPixel + value * pixelsPerUnit\n\n        // Find the worst-case label overflow on each side\n        let leftOverflow = 0\n        let rightOverflow = 0\n        for (const row of rows) {\n            const leftX = toPixel(row.left.value)\n            const rightX = toPixel(row.right.value)\n\n            leftOverflow = Math.max(leftOverflow, row.left.labelWidth - leftX)\n            rightOverflow = Math.max(\n                rightOverflow,\n                rightX + row.right.labelWidth - width\n            )\n        }\n\n        // If both sides are within tolerance, we're done\n        if (leftOverflow < TOLERANCE && rightOverflow < TOLERANCE) break\n\n        // Convert pixel overflow to domain units. This slightly under-\n        // corrects because it uses the pre-expansion ratio; the next\n        // iteration handles the residual\n        const unitsPerPixel = domainSpan / effectiveWidth\n        if (leftOverflow >= TOLERANCE) {\n            if (minFixed) padLeft += leftOverflow\n            else domainStart -= leftOverflow * unitsPerPixel\n        }\n        if (rightOverflow >= TOLERANCE) {\n            if (maxFixed) padRight += rightOverflow\n            else domainEnd += rightOverflow * unitsPerPixel\n        }\n    }\n\n    return {\n        domain: [domainStart, domainEnd],\n        pad: { left: padLeft, right: padRight },\n    }\n}\n","import React from \"react\"\nimport { dyFromAlign, makeFigmaId, roundForSvg } from \"@ourworldindata/utils\"\nimport { Halo, TextWrapSvg } from \"@ourworldindata/components\"\nimport { DumbbellConnectorStyle, VerticalAlign } from \"@ourworldindata/types\"\nimport { FontSettings } from \"../core/GrapherConstants\"\nimport { SeriesLabel } from \"../seriesLabel/SeriesLabel\"\nimport { TimeRangeDumbbell, TwoColumnDumbbell } from \"./Dumbbell\"\nimport {\n    LabelledDumbbellHead,\n    RenderDumbbellSeries,\n    DumbbellMode,\n    DUMBBELL_STYLE,\n    PlacedDumbbellHead,\n} from \"./DumbbellChartConstants\"\nimport { toLeftRight } from \"./DumbbellChartHelpers\"\nimport { GRID_LINE_DASH_PATTERN, TICK_COLOR } from \"../axis/AxisViews.js\"\nimport { darkenColorForText } from \"../color/ColorUtils.js\"\nimport { GRAPHER_DARK_TEXT } from \"../color/ColorConstants.js\"\n\nexport function DumbbellChartRow({\n    series,\n    mode,\n    connectorStyle,\n    y,\n    range,\n    valueLabelStyle,\n    onInfoTooltipShow,\n}: {\n    series: RenderDumbbellSeries\n    mode: DumbbellMode\n    connectorStyle: DumbbellConnectorStyle\n    y: number\n    range: [number, number]\n    valueLabelStyle: FontSettings\n    onInfoTooltipShow?: () => void\n}): React.ReactElement {\n    const style = DUMBBELL_STYLE[series.emphasis]\n    const { left: leftHead, right: rightHead } = toLeftRight(\n        series.start,\n        series.end\n    )\n\n    return (\n        <g\n            id={makeFigmaId(series.seriesName)}\n            transform={`translate(0, ${roundForSvg(y)})`}\n            opacity={style.opacity}\n            style={{ pointerEvents: \"none\" }}\n        >\n            {/* Gray background line spanning the full chart width */}\n            <line\n                id={makeFigmaId(\"background-line\")}\n                x1={roundForSvg(range[0])}\n                x2={roundForSvg(range[1])}\n                stroke={TICK_COLOR}\n                strokeDasharray={GRID_LINE_DASH_PATTERN}\n            />\n\n            {/* Entity label */}\n            {series.label && (\n                <SeriesLabel\n                    state={series.label}\n                    x={series.labelPosition.x}\n                    y={series.labelPosition.yOffset}\n                    color={{ name: style.labelColor }}\n                    onInfoTooltipShow={onInfoTooltipShow}\n                />\n            )}\n\n            {/* Entity annotation */}\n            {series.annotationTextWrap &&\n                series.annotationPosition !== undefined && (\n                    <TextWrapSvg\n                        textWrap={series.annotationTextWrap}\n                        x={series.annotationPosition.x}\n                        y={series.annotationPosition.yOffset}\n                        fill={GRAPHER_DARK_TEXT}\n                        textAnchor=\"end\"\n                    />\n                )}\n\n            {/* Dumbbell */}\n            {mode === DumbbellMode.TimeRange ? (\n                <TimeRangeDumbbell series={series} />\n            ) : (\n                <TwoColumnDumbbell\n                    series={series}\n                    connectorStyle={connectorStyle}\n                />\n            )}\n\n            {/* Left value label */}\n            {hasLabel(leftHead) && (\n                <DumbbellValueLabel\n                    side=\"left\"\n                    head={leftHead}\n                    style={valueLabelStyle}\n                />\n            )}\n\n            {/* Right value label */}\n            {hasLabel(rightHead) && (\n                <DumbbellValueLabel\n                    side=\"right\"\n                    head={rightHead}\n                    style={valueLabelStyle}\n                />\n            )}\n        </g>\n    )\n}\n\nfunction DumbbellValueLabel({\n    side,\n    head,\n    style,\n}: {\n    side: \"left\" | \"right\"\n    head: LabelledDumbbellHead\n    style: FontSettings\n}): React.ReactElement {\n    const x =\n        side === \"left\"\n            ? head.x - head.label.padding\n            : head.x + head.label.padding\n\n    return (\n        <Halo\n            id={makeFigmaId(`${head.label.text}__halo`)}\n            fontSize={style.fontSize}\n        >\n            <text\n                x={roundForSvg(x)}\n                fill={darkenColorForText(head.color)}\n                dy={dyFromAlign(VerticalAlign.middle)}\n                textAnchor={side === \"left\" ? \"end\" : \"start\"}\n                fontSize={style.fontSize}\n                fontWeight={style.fontWeight}\n            >\n                {head.label.text}\n            </text>\n        </Halo>\n    )\n}\n\nexport function hasLabel(\n    head: PlacedDumbbellHead\n): head is LabelledDumbbellHead {\n    return head.label !== undefined\n}\n","import React from \"react\"\nimport { TextWrapSvg } from \"@ourworldindata/components\"\nimport { makeFigmaId } from \"@ourworldindata/utils\"\nimport { HorizontalLabelPairState } from \"./HorizontalLabelPairState.js\"\nimport { GRAPHER_DARK_TEXT } from \"../color/ColorConstants.js\"\n\nexport function HorizontalLabelPair({\n    state,\n    y,\n    color = GRAPHER_DARK_TEXT,\n}: {\n    state: HorizontalLabelPairState\n    y: number\n    color?: string\n}): React.ReactElement {\n    return (\n        <g id={makeFigmaId(\"horizontal-label-pair\")}>\n            {state.placedSeries.map((series, i) => (\n                <TextWrapSvg\n                    key={`${series}-${i}`}\n                    textWrap={series.textWrap}\n                    x={series.bounds.left}\n                    y={y}\n                    fill={series.color ?? color}\n                />\n            ))}\n        </g>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport { computed, makeObservable } from \"mobx\"\nimport { match } from \"ts-pattern\"\nimport {\n    Bounds,\n    HorizontalAlign,\n    Pair,\n    RequiredBy,\n} from \"@ourworldindata/utils\"\nimport { TextWrap } from \"@ourworldindata/components\"\nimport { BASE_FONT_SIZE, FontSettings } from \"../core/GrapherConstants.js\"\nimport {\n    HorizontalLabel,\n    PlacedHorizontalLabel,\n    SizedHorizontalLabel,\n} from \"./HorizontalLabelPairTypes.js\"\n\nexport interface HorizontalLabelPairOptions {\n    fontSettings?: FontSettings\n    /** Horizontal range for label placement */\n    xRange?: [number, number]\n    /** Minimum horizontal gap between the two labels */\n    minGap?: number\n}\n\n/**\n * Manages the state of two labels that are placed horizontally,\n * ensuring they do not overlap and stay within a specified horizontal range.\n */\nexport class HorizontalLabelPairState {\n    private readonly initialSeries: Pair<HorizontalLabel>\n    private readonly initialOptions: HorizontalLabelPairOptions\n\n    private readonly defaultOptions = {\n        fontSettings: {\n            fontSize: BASE_FONT_SIZE,\n            fontWeight: 400,\n            lineHeight: 1,\n        },\n        xRange: [-Infinity, Infinity],\n        minGap: 8,\n    } as const satisfies Partial<HorizontalLabelPairOptions>\n\n    constructor(\n        series: Pair<HorizontalLabel>,\n        options: HorizontalLabelPairOptions\n    ) {\n        this.initialSeries = series\n        this.initialOptions = options\n        makeObservable(this)\n    }\n\n    @computed private get options(): RequiredBy<\n        HorizontalLabelPairOptions,\n        keyof typeof this.defaultOptions\n    > {\n        return { ...this.defaultOptions, ...this.initialOptions }\n    }\n\n    @computed get sizedSeries(): Pair<SizedHorizontalLabel> {\n        const { fontSettings } = this.options\n        return this.initialSeries.map((series) => {\n            const textWrap = new TextWrap({\n                ...fontSettings,\n                text: series.text,\n                maxWidth: Infinity, // No line breaks\n            })\n            return { ...series, textWrap } satisfies SizedHorizontalLabel\n        }) as Pair<SizedHorizontalLabel>\n    }\n\n    @computed get placedSeries(): Pair<PlacedHorizontalLabel> {\n        const {\n            minGap,\n            xRange: [minX, maxX],\n        } = this.options\n\n        // Place each label at its target x, adjusted for text anchor\n        const placedSeries = this.sizedSeries.map((series) => {\n            const {\n                x,\n                textWrap: { width, height },\n                textAnchor = HorizontalAlign.left,\n            } = series\n\n            // Resolve textAnchor to the x coordinate of the label's left edge\n            const resolvedX = match(textAnchor)\n                .with(HorizontalAlign.left, () => x)\n                .with(HorizontalAlign.right, () => x - width)\n                .with(HorizontalAlign.center, () => x - width / 2)\n                .exhaustive()\n\n            return {\n                ...series,\n                bounds: new Bounds(resolvedX, 0, width, height),\n            }\n        })\n\n        // Shift labels that overflow the given horizontal range back within it\n        for (const series of placedSeries) {\n            const clampedX = _.clamp(\n                series.bounds.x,\n                minX,\n                maxX - series.bounds.width\n            )\n\n            if (clampedX !== series.bounds.x)\n                series.bounds = series.bounds.set({ x: clampedX })\n        }\n\n        const [leftLabel, rightLabel] = _.sortBy(\n            placedSeries,\n            (series) => series.bounds.x\n        )\n\n        // Check for overlap, enforcing a minimum gap between the two labels\n        const overlap = leftLabel.bounds.right + minGap - rightLabel.bounds.left\n\n        // If the labels are overlapping, shift them apart just enough to\n        // resolve the overlap\n        if (overlap > 0) {\n            // Calculate how much each label can be shifted\n            const leftAvailableShift = leftLabel.bounds.x - minX\n            const rightAvailableShift = maxX - rightLabel.bounds.right\n\n            // Split the required shift between the two labels\n            let leftShift = Math.min(overlap / 2, leftAvailableShift)\n            const rightShift = Math.min(\n                overlap - leftShift,\n                rightAvailableShift\n            )\n\n            // If the right side couldn't take its share, let the left side\n            // absorb the remainder (if it has capacity)\n            if (leftShift + rightShift < overlap) {\n                leftShift = Math.min(overlap - rightShift, leftAvailableShift)\n            }\n\n            // Update label positions\n            leftLabel.bounds = leftLabel.bounds.set({\n                x: leftLabel.bounds.x - leftShift,\n            })\n            rightLabel.bounds = rightLabel.bounds.set({\n                x: rightLabel.bounds.x + rightShift,\n            })\n        }\n\n        return [leftLabel, rightLabel]\n    }\n\n    /** True if the two labels overlap horizontally after placement */\n    @computed get hasOverlap(): boolean {\n        const { minGap } = this.options\n        const [leftLabel, rightLabel] = this.placedSeries\n        const gap = rightLabel.bounds.left - leftLabel.bounds.right\n        // Small tolerance to avoid false positives from floating-point noise\n        return gap < minGap - 1e-6\n    }\n}\n","import React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    calculateTrendDirection,\n    excludeUndefined,\n} from \"@ourworldindata/utils\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\nimport { DumbbellValueLabelMode } from \"@ourworldindata/types\"\nimport {\n    formatTooltipRangeValues,\n    makeTooltipRoundingNotice,\n    makeTooltipToleranceNotice,\n    Tooltip,\n    TooltipState,\n    TooltipValue,\n    TooltipValueRange,\n} from \"../tooltip/Tooltip\"\nimport { FooterItem, TooltipFooterIcon } from \"../tooltip/TooltipProps.js\"\nimport { GRAY_90 } from \"../color/ColorConstants.js\"\nimport { DumbbellChartState } from \"./DumbbellChartState\"\nimport { SizedDumbbellSeries } from \"./DumbbellChartConstants\"\nimport { match } from \"ts-pattern\"\n\ninterface DumbbellTooltipProps {\n    id: number\n    chartState: DumbbellChartState\n    tooltipState: TooltipState<{ seriesName: string }>\n    series: SizedDumbbellSeries[]\n    dismissTooltip: () => void\n}\n\n@observer\nexport class DumbbellTimeRangeTooltip extends React.Component<DumbbellTooltipProps> {\n    constructor(props: DumbbellTooltipProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed private get chartState(): DumbbellChartState {\n        return this.props.chartState\n    }\n\n    @computed private get target(): SizedDumbbellSeries | undefined {\n        const seriesName = this.props.tooltipState.target?.seriesName\n        if (!seriesName) return undefined\n        return this.props.series.find((s) => s.seriesName === seriesName)\n    }\n\n    @computed private get subtitle(): string {\n        const { formatColumn, startTime, endTime } = this.chartState\n        const { target } = this\n\n        const originalStartTime = target?.start.time ?? startTime\n        const originalEndTime = target?.end.time ?? endTime\n\n        return formatColumn.formatTimeComparison(\n            originalStartTime,\n            originalEndTime\n        )\n    }\n\n    @computed private get toleranceNotice(): FooterItem | undefined {\n        const { target } = this\n        if (!target) return undefined\n\n        const { formatColumn, startTime, endTime } = this.chartState\n        const isStartOriginal = target.start.time === startTime\n        const isEndOriginal = target.end.time === endTime\n\n        if (isStartOriginal && isEndOriginal) return undefined\n\n        const formatTime = (t: number) => formatColumn.formatTime(t)\n        const targetTime =\n            !isStartOriginal && !isEndOriginal\n                ? `${formatTime(startTime)} and ${formatTime(endTime)}`\n                : !isStartOriginal\n                  ? formatTime(startTime)\n                  : formatTime(endTime)\n\n        // The subtitle shows the original time of both values. Naming the\n        // original time here only helps if the subtitle mixes a target time with\n        // an original time, i.e. if only one of the two values was interpolated.\n        const originalTime =\n            !isStartOriginal && !isEndOriginal\n                ? undefined\n                : !isStartOriginal\n                  ? formatTime(target.start.time)\n                  : formatTime(target.end.time)\n\n        return {\n            icon: TooltipFooterIcon.Notice,\n            text: makeTooltipToleranceNotice(targetTime, {\n                plural: !isStartOriginal && !isEndOriginal,\n                originalTime,\n            }),\n        }\n    }\n\n    @computed private get roundingNotice(): FooterItem | undefined {\n        const { formatColumn } = this.chartState\n        if (!formatColumn.roundsToSignificantFigures) return undefined\n        return {\n            icon: TooltipFooterIcon.None,\n            text: makeTooltipRoundingNotice([\n                formatColumn.numSignificantFigures,\n            ]),\n        }\n    }\n\n    override render(): React.ReactElement | null {\n        const { target } = this\n        const { position, fading } = this.props.tooltipState\n        if (!target) return null\n\n        const { formatColumn } = this.chartState\n        const values: [number, number] = [target.start.value, target.end.value]\n        const footer = excludeUndefined([\n            this.toleranceNotice,\n            this.roundingNotice,\n        ])\n\n        return (\n            <Tooltip\n                id={this.props.id}\n                tooltipManager={this.chartState.manager}\n                x={position.x}\n                y={position.y}\n                offsetX={20}\n                offsetY={-16}\n                style={{ maxWidth: \"300px\" }}\n                title={target.displayName}\n                subtitle={this.subtitle}\n                subtitleFormat={this.toleranceNotice ? \"notice\" : undefined}\n                footer={footer}\n                dissolve={fading}\n                dismiss={this.props.dismissTooltip}\n            >\n                <TooltipValueRange\n                    label={formatColumn.displayName}\n                    unit={formatColumn.displayUnit}\n                    values={formatTooltipRangeValues(values, formatColumn)}\n                    trend={calculateTrendDirection(...values, (value) =>\n                        formatColumn.formatValueShort(value)\n                    )}\n                    arrowColor={target.color}\n                    labelVariant=\"unit-only\"\n                />\n            </Tooltip>\n        )\n    }\n}\n\n@observer\nexport class DumbbellTwoColumnTooltip extends React.Component<DumbbellTooltipProps> {\n    constructor(props: DumbbellTooltipProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed private get chartState(): DumbbellChartState {\n        return this.props.chartState\n    }\n\n    @computed private get target(): SizedDumbbellSeries | undefined {\n        const seriesName = this.props.tooltipState.target?.seriesName\n        if (!seriesName) return undefined\n        return this.props.series.find((s) => s.seriesName === seriesName)\n    }\n\n    @computed private get columns(): [CoreColumn, CoreColumn] {\n        const [startColumn, endColumn] = this.chartState.yColumns\n        return [startColumn, endColumn]\n    }\n\n    @computed private get subtitle(): string {\n        const { formatColumn, endTime } = this.chartState\n        return formatColumn.formatTime(endTime)\n    }\n\n    @computed private get toleranceNotice(): FooterItem | undefined {\n        const { target } = this\n        if (!target) return undefined\n\n        const { formatColumn, endTime } = this.chartState\n        const isStartOriginal = target.start.time === endTime\n        const isEndOriginal = target.end.time === endTime\n\n        if (isStartOriginal && isEndOriginal) return undefined\n\n        return {\n            icon: TooltipFooterIcon.Notice,\n            text: makeTooltipToleranceNotice(formatColumn.formatTime(endTime)),\n        }\n    }\n\n    @computed private get roundingNotice(): FooterItem | undefined {\n        const entries = excludeUndefined([...this.columns, this.changeRow])\n\n        const allRoundedToSigFigs = entries.every(\n            (entry) => entry.roundsToSignificantFigures\n        )\n        const anyRoundedToSigFigs = entries.some(\n            (entry) => entry.roundsToSignificantFigures\n        )\n\n        if (!anyRoundedToSigFigs) return undefined\n\n        const sigFigs = excludeUndefined(\n            entries.map((entry) =>\n                entry.roundsToSignificantFigures\n                    ? entry.numSignificantFigures\n                    : undefined\n            )\n        )\n\n        return {\n            icon: allRoundedToSigFigs\n                ? TooltipFooterIcon.None\n                : TooltipFooterIcon.Significance,\n            text: makeTooltipRoundingNotice(sigFigs, {\n                plural: sigFigs.length > 1,\n            }),\n        }\n    }\n\n    @computed private get showSignificanceSuperscriptIfApplicable(): boolean {\n        return this.roundingNotice?.icon === TooltipFooterIcon.Significance\n    }\n\n    @computed private get changeRow():\n        | {\n              label: string\n              value: string\n              roundsToSignificantFigures: boolean\n              numSignificantFigures: number\n          }\n        | undefined {\n        const { valueLabelMode } = this.chartState\n\n        const valueLabelIsChange =\n            valueLabelMode === DumbbellValueLabelMode.Change ||\n            valueLabelMode === DumbbellValueLabelMode.PercentChange\n\n        if (!valueLabelIsChange) return undefined\n\n        const value = this.target?.end.label?.text\n        if (value === undefined) return undefined\n\n        const [startColumn] = this.columns\n        return match(valueLabelMode)\n            .with(DumbbellValueLabelMode.Change, () => ({\n                label: \"Change\",\n                value,\n                // Formatted via startColumn (= formatColumn)\n                roundsToSignificantFigures:\n                    startColumn.roundsToSignificantFigures,\n                numSignificantFigures: startColumn.numSignificantFigures,\n            }))\n            .with(DumbbellValueLabelMode.PercentChange, () => ({\n                label: \"Percent change\",\n                value,\n                // Formatted with numDecimalPlaces: 1\n                roundsToSignificantFigures: false,\n                numSignificantFigures: 0,\n            }))\n            .exhaustive()\n    }\n\n    override render(): React.ReactElement | null {\n        const { target } = this\n        const { position, fading } = this.props.tooltipState\n        if (!target) return null\n\n        const [startColumn, endColumn] = this.columns\n        const { endTime } = this.chartState\n        const footer = excludeUndefined([\n            this.toleranceNotice,\n            this.roundingNotice,\n        ])\n\n        return (\n            <Tooltip\n                id={this.props.id}\n                tooltipManager={this.chartState.manager}\n                x={position.x}\n                y={position.y}\n                offsetX={20}\n                offsetY={-16}\n                style={{ maxWidth: \"300px\" }}\n                title={target.displayName}\n                subtitle={this.subtitle}\n                footer={footer}\n                dissolve={fading}\n                dismiss={this.props.dismissTooltip}\n            >\n                <TooltipValue\n                    label={startColumn.displayName}\n                    unit={startColumn.displayUnit}\n                    value={startColumn.formatValueShort(target.start.value)}\n                    color={target.start.color}\n                    originalTime={\n                        target.start.time !== endTime\n                            ? startColumn.formatTime(target.start.time)\n                            : undefined\n                    }\n                    showSignificanceSuperscript={\n                        this.showSignificanceSuperscriptIfApplicable &&\n                        startColumn.roundsToSignificantFigures\n                    }\n                    labelVariant=\"label+unit\"\n                />\n                <TooltipValue\n                    label={endColumn.displayName}\n                    unit={endColumn.displayUnit}\n                    value={endColumn.formatValueShort(target.end.value)}\n                    color={target.end.color}\n                    originalTime={\n                        target.end.time !== endTime\n                            ? endColumn.formatTime(target.end.time)\n                            : undefined\n                    }\n                    showSignificanceSuperscript={\n                        this.showSignificanceSuperscriptIfApplicable &&\n                        endColumn.roundsToSignificantFigures\n                    }\n                    labelVariant=\"label+unit\"\n                />\n                {this.changeRow && (\n                    <TooltipValue\n                        label={this.changeRow.label}\n                        value={this.changeRow.value}\n                        color={GRAY_90}\n                        showSignificanceSuperscript={\n                            this.showSignificanceSuperscriptIfApplicable &&\n                            this.changeRow.roundsToSignificantFigures\n                        }\n                    />\n                )}\n            </Tooltip>\n        )\n    }\n}\n","import * as _ from \"lodash-es\"\nimport { scalePoint } from \"d3-scale\"\nimport React from \"react\"\nimport { match } from \"ts-pattern\"\nimport {\n    Bounds,\n    HorizontalAlign,\n    makeFigmaId,\n    exposeInstanceOnWindow,\n    ScaleType,\n    formatValue,\n    getRelativeMouse,\n    guid,\n    Pair,\n    roundForSvg,\n} from \"@ourworldindata/utils\"\nimport {\n    DumbbellValueLabelMode,\n    TickFormattingOptions,\n} from \"@ourworldindata/types\"\nimport { action, computed, observable, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    FontSettings,\n} from \"../core/GrapherConstants\"\nimport {\n    enrichSeriesWithLabels,\n    computeCenteredLabelYPositions,\n} from \"../rowSeriesLabels/RowSeriesLabelHelpers.js\"\nimport { NoDataMessage } from \"../noDataMessage/NoDataMessage\"\nimport {\n    HorizontalAxisComponent,\n    HorizontalAxisGridLines,\n    HorizontalAxisZeroLine,\n} from \"../axis/AxisViews\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig\"\nimport { HorizontalAxis } from \"../axis/Axis\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport {\n    DumbbellChartManager,\n    DumbbellMode,\n    DumbbellSeries,\n    SizedDumbbellSeries,\n    PlacedDumbbellSeries,\n    RenderDumbbellSeries,\n    VALUE_LABEL_DOT_GAP,\n    ENTITY_LABEL_CHART_GAP,\n    DumbbellValueLabel,\n    TOP_LEGEND_BOTTOM_PADDING,\n    LegendLabel,\n    MIN_LEGEND_LABEL_GAP,\n} from \"./DumbbellChartConstants\"\nimport { DumbbellChartState } from \"./DumbbellChartState\"\nimport { ChartComponentProps } from \"../chart/ChartTypeMap\"\nimport { resolveEmphasis } from \"../interaction/Emphasis\"\nimport { InteractionState } from \"../interaction/InteractionState\"\nimport { DumbbellChartRow } from \"./DumbbellChartRow\"\nimport {\n    AxisLayout,\n    calculateAxisLayout,\n    computePercentChange,\n    toLeftRight,\n} from \"./DumbbellChartHelpers\"\nimport { AnimatedRows } from \"../animation/AnimatedRows\"\nimport { roundFontSize, scaleFontSize, textWidth } from \"../chart/ChartUtils.js\"\nimport { GRAPHER_LIGHT_TEXT } from \"../color/ColorConstants.js\"\nimport { darkenColorForText } from \"../color/ColorUtils.js\"\nimport { HorizontalLabelPair } from \"../horizontalLabelPair/HorizontalLabelPair.js\"\nimport { HorizontalLabelPairState } from \"../horizontalLabelPair/HorizontalLabelPairState.js\"\nimport { HorizontalLabel } from \"../horizontalLabelPair/HorizontalLabelPairTypes.js\"\nimport { HorizontalCategoricalColorLegend } from \"../legend/HorizontalCategoricalColorLegend\"\nimport { HorizontalCategoricalColorLegendState } from \"../legend/HorizontalCategoricalColorLegendState\"\nimport { CategoricalBin } from \"../color/ColorScaleBin.js\"\nimport { TooltipState } from \"../tooltip/Tooltip\"\nimport {\n    DumbbellTimeRangeTooltip,\n    DumbbellTwoColumnTooltip,\n} from \"./DumbbellTooltips.js\"\n\nexport type DumbbellChartProps = ChartComponentProps<DumbbellChartState>\n\ntype TopLegendType = \"inline\" | \"swatches\" | \"none\"\n\n@observer\nexport class DumbbellChart\n    extends React.Component<DumbbellChartProps>\n    implements ChartInterface, AxisManager\n{\n    private readonly tooltipId = guid()\n    private readonly tooltipState = new TooltipState<{ seriesName: string }>({\n        fade: \"immediate\",\n    })\n\n    constructor(props: DumbbellChartProps) {\n        super(props)\n        makeObservable<DumbbellChart, \"tooltipState\">(this, {\n            tooltipState: observable,\n        })\n    }\n\n    @computed get chartState(): DumbbellChartState {\n        return this.props.chartState\n    }\n\n    @computed private get manager(): DumbbellChartManager {\n        return this.chartState.manager\n    }\n\n    @computed private get bounds(): Bounds {\n        // 2px padding at the bottom prevents the tick labels from overflowing\n        return (this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS).padBottom(2)\n    }\n\n    @computed private get boundsWithoutLegend(): Bounds {\n        return this.bounds.padTop(this.topLegendHeightWithPadding)\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get series(): DumbbellSeries[] {\n        return this.chartState.series\n    }\n\n    @computed private get availableHeightPerSeries(): number {\n        return this.boundsWithoutLegend.height / this.series.length\n    }\n\n    @computed private get entityLabelStyle(): FontSettings {\n        // Slightly overestimates the height available for a series\n        // because `bounds` is used instead of `boundsWithoutLegend`\n        // due to a circular dependency\n        const availableHeightPerSeries = this.bounds.height / this.series.length\n\n        const fontSize = roundFontSize(\n            Math.min(scaleFontSize(12, this.fontSize), availableHeightPerSeries)\n        )\n\n        return { fontSize, fontWeight: 700, lineHeight: 1 }\n    }\n\n    @computed private get valueLabelStyle(): FontSettings {\n        const fontSize = this.entityLabelStyle.fontSize - 0.5\n\n        return { fontSize, fontWeight: 400, lineHeight: 1 }\n    }\n\n    @computed private get inlineLegendLabelStyle(): FontSettings {\n        return {\n            fontSize: this.valueLabelStyle.fontSize,\n            fontWeight: 700,\n            lineHeight: 1,\n        }\n    }\n\n    private buildValueLabel(text: string): DumbbellValueLabel {\n        return {\n            text,\n            width: textWidth(text, this.valueLabelStyle),\n            padding:\n                this.chartState.mode === DumbbellMode.TimeRange\n                    ? VALUE_LABEL_DOT_GAP\n                    : VALUE_LABEL_DOT_GAP + this.dumbbellHeadRadius,\n        }\n    }\n\n    private getValueLabels(\n        startValue: number,\n        endValue: number\n    ): { start?: string; end?: string } {\n        return match(this.chartState.valueLabelMode)\n            .with(DumbbellValueLabelMode.Absolute, () => {\n                // Only show one label if the values are the same\n                if (\n                    this.chartState.mode === DumbbellMode.TimeRange &&\n                    startValue === endValue\n                ) {\n                    return { start: this.formatValue(startValue) }\n                }\n\n                return {\n                    start: this.formatValue(startValue),\n                    end: this.formatValue(endValue),\n                }\n            })\n            .with(DumbbellValueLabelMode.Change, () => {\n                const diff = endValue - startValue\n                return { end: this.formatValue(diff, { showPlus: true }) }\n            })\n            .with(DumbbellValueLabelMode.PercentChange, () => {\n                const change = computePercentChange(startValue, endValue)\n                if (change === undefined) return {}\n                return {\n                    end: formatValue(change, {\n                        showPlus: true,\n                        unit: \"%\",\n                        numDecimalPlaces: 1,\n                    }),\n                }\n            })\n            .with(DumbbellValueLabelMode.None, () => ({}))\n            .exhaustive()\n    }\n\n    @computed get sizedSeries(): SizedDumbbellSeries[] {\n        return enrichSeriesWithLabels({\n            series: this.series,\n            availableHeightPerSeries: this.availableHeightPerSeries,\n            minLabelWidth: 0.3 * this.bounds.width,\n            maxLabelWidth: 0.66 * this.bounds.width,\n            fontSettings: this.entityLabelStyle,\n            showRegionTooltip: !this.manager.isStatic,\n        }).map((series) => {\n            const { start, end } = this.getValueLabels(\n                series.start.value,\n                series.end.value\n            )\n\n            const startLabel = start ? this.buildValueLabel(start) : undefined\n            const endLabel = end ? this.buildValueLabel(end) : undefined\n\n            return {\n                ...series,\n                start: {\n                    ...series.start,\n                    label: startLabel,\n                    radius: this.dumbbellHeadRadius,\n                },\n                end: {\n                    ...series.end,\n                    label: endLabel,\n                    radius: this.dumbbellHeadRadius,\n                },\n            }\n        })\n    }\n\n    @computed private get xRange(): [number, number] {\n        return this.dataBounds.xRange()\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        return new AxisConfig(\n            {\n                ...this.manager.yAxisConfig,\n                hideGridlines: false,\n                shouldOffsetTickLabelAtStart: false,\n            },\n            this\n        )\n    }\n\n    private toHorizontalAxis(args?: { skipRange: boolean }): HorizontalAxis {\n        const axis = this.yAxisConfig.toHorizontalAxis()\n        axis.updateDomainPreservingUserSettings(this.axisLayout.domain)\n        axis.scaleType = ScaleType.linear\n        axis.formatColumn = this.chartState.formatColumn\n        if (!args?.skipRange) axis.range = this.xRange\n        axis.label = \"\"\n        return axis\n    }\n\n    @computed get axisHeight(): number {\n        // We can't use this.axis due to a circular dependency\n        return this.toHorizontalAxis({ skipRange: true }).height\n    }\n\n    @computed get axis(): HorizontalAxis {\n        return this.toHorizontalAxis()\n    }\n\n    @computed private get verticalScale() {\n        return scalePoint<string>()\n            .domain(this.series.map((s) => s.seriesName))\n            .range([this.innerBounds.top, this.innerBounds.bottom])\n            .padding(0.5)\n    }\n\n    /**\n     * Ensures every row's value labels fit inside the chart area by adjusting\n     * the axis domain and/or adding padding\n     */\n    @computed private get axisLayout(): AxisLayout {\n        const [configMin, configMax] = this.yAxisConfig.domain\n\n        const axis = this.yAxisConfig.toHorizontalAxis()\n        axis.updateDomainPreservingUserSettings(this.chartState.yDomainDefault)\n\n        return calculateAxisLayout({\n            series: this.sizedSeries,\n            domain: axis.domain,\n            width: this.axisBounds.width,\n            minFixed: Number.isFinite(configMin),\n            maxFixed: Number.isFinite(configMax),\n        })\n    }\n\n    @computed private get entityLabelMaxWidth(): number {\n        const labelsWidths = this.sizedSeries.flatMap((series) => [\n            series.label?.width ?? 0,\n            series.annotationTextWrap?.width ?? 0,\n        ])\n        if (labelsWidths.length === 0) return 0\n        return Math.max(...labelsWidths)\n    }\n\n    /** Bounds minus entity labels */\n    @computed get axisBounds(): Bounds {\n        return this.boundsWithoutLegend.padLeft(\n            this.entityLabelMaxWidth + ENTITY_LABEL_CHART_GAP\n        )\n    }\n\n    @computed private get innerBounds(): Bounds {\n        return this.axisBounds.padBottom(this.axisHeight)\n    }\n\n    /** Bounds for plotting data points */\n    @computed private get dataBounds(): Bounds {\n        return this.innerBounds.pad(this.axisLayout.pad)\n    }\n\n    @computed private get dumbbellHeadRadius(): number {\n        const valueLabelHeight =\n            this.valueLabelStyle.fontSize * this.valueLabelStyle.lineHeight\n\n        // Cap the radius based on the value label's height\n        const maxRadius = roundToNearestHalf((valueLabelHeight / 2) * 1.1)\n\n        return _.clamp(\n            Math.floor(this.availableHeightPerSeries / 2),\n            2,\n            maxRadius\n        )\n    }\n\n    @computed private get placedSeries(): PlacedDumbbellSeries[] {\n        return this.sizedSeries\n            .map((series) => {\n                const centerY = this.verticalScale(series.seriesName)\n                const labelX = this.innerBounds.x - ENTITY_LABEL_CHART_GAP\n\n                if (centerY === undefined) return undefined\n\n                const { labelY, annotationY } = computeCenteredLabelYPositions({\n                    y: centerY,\n                    label: series.label,\n                    annotation: series.annotationTextWrap,\n                })\n\n                const labelPosition = { x: labelX, yOffset: labelY - centerY }\n                const annotationPosition =\n                    annotationY !== undefined\n                        ? { x: labelX, yOffset: annotationY - centerY }\n                        : undefined\n\n                return {\n                    ...series,\n                    y: centerY,\n                    labelPosition,\n                    annotationPosition,\n                    start: {\n                        ...series.start,\n                        x: this.axis.place(series.start.value),\n                    },\n                    end: {\n                        ...series.end,\n                        x: this.axis.place(series.end.value),\n                    },\n                }\n            })\n            .filter((series) => series !== undefined)\n    }\n\n    @computed private get hoveredSeriesName(): string | undefined {\n        return this.tooltipState.target?.seriesName\n    }\n\n    @computed private get renderSeries(): RenderDumbbellSeries[] {\n        return this.placedSeries.map((series) => {\n            const hover = InteractionState.for(\n                series.seriesName,\n                this.hoveredSeriesName\n            )\n            const emphasis = resolveEmphasis({ hover, focus: series.focus })\n            return { ...series, emphasis }\n        })\n    }\n\n    @computed get legendLabels():\n        | { start: LegendLabel; end: LegendLabel }\n        | undefined {\n        const { showLegend = true } = this.manager\n\n        if (!showLegend || this.series.length === 0) return undefined\n\n        return (\n            match(this.chartState.mode)\n                // In time-range mode, the legend labels are the start and end times\n                .with(DumbbellMode.TimeRange, () => {\n                    const { formatColumn, startTime, endTime } = this.chartState\n                    return {\n                        start: {\n                            text: formatColumn.formatTime(startTime),\n                            color: GRAPHER_LIGHT_TEXT,\n                        } satisfies LegendLabel,\n                        end: {\n                            text: formatColumn.formatTime(endTime),\n                            color: GRAPHER_LIGHT_TEXT,\n                        } satisfies LegendLabel,\n                    }\n                })\n                // In two-column mode, the legend labels are the two columns\n                .with(DumbbellMode.TwoColumn, () => {\n                    const { yColumns, columnColors } = this.chartState\n                    const [startColumn, endColumn] = yColumns\n                    if (!startColumn || !endColumn) return undefined\n                    return {\n                        start: {\n                            text: startColumn.nonEmptyDisplayName,\n                            color: darkenColorForText(columnColors.start),\n                        } satisfies LegendLabel,\n                        end: {\n                            text: endColumn.nonEmptyDisplayName,\n                            color: darkenColorForText(columnColors.end),\n                        } satisfies LegendLabel,\n                    }\n                })\n                .exhaustive()\n        )\n    }\n\n    /** Whether the inline legend labels can fit side by side */\n    @computed private get inlineLegendFits(): boolean {\n        if (!this.legendLabels) return false\n        const { start, end } = this.legendLabels\n        // We can't use `inlineLegendState.hasOverlap` here due to a circular dependency\n        const labelWidths =\n            textWidth(start.text, this.inlineLegendLabelStyle) +\n            textWidth(end.text, this.inlineLegendLabelStyle)\n        return labelWidths + MIN_LEGEND_LABEL_GAP <= this.bounds.width\n    }\n\n    @computed private get topLegendType(): TopLegendType {\n        if (!this.legendLabels) return \"none\"\n        if (this.inlineLegendFits) return \"inline\"\n        // In two-column mode, fall back to a categorical legend when the inline\n        // labels don't fit. In time-range mode, no legend is shown in that case.\n        return this.chartState.mode === DumbbellMode.TimeRange\n            ? \"none\"\n            : \"swatches\"\n    }\n\n    @computed private get topLegendHeight(): number {\n        return match(this.topLegendType)\n            .with(\n                \"inline\",\n                () =>\n                    this.inlineLegendLabelStyle.fontSize *\n                    this.inlineLegendLabelStyle.lineHeight\n            )\n            .with(\"swatches\", () => this.categoricalLegendState.height)\n            .with(\"none\", () => 0)\n            .exhaustive()\n    }\n\n    @computed private get topLegendHeightWithPadding(): number {\n        return this.topLegendHeight\n            ? this.topLegendHeight + TOP_LEGEND_BOTTOM_PADDING\n            : 0\n    }\n\n    @computed private get inlineLegendSeries():\n        | Pair<HorizontalLabel>\n        | undefined {\n        const { legendLabels, topLegendType } = this\n\n        if (!legendLabels || topLegendType !== \"inline\") return undefined\n\n        const sortedSeries = _.sortBy(this.placedSeries, (series) => series.y)\n\n        const topSeries = match(this.chartState.mode)\n            // In time-range mode, anchor to the top-most series so the\n            // legend labels align with its value labels\n            .with(DumbbellMode.TimeRange, () => sortedSeries[0])\n            // In two-column mode, anchor to the top-most series that has a\n            // visible change\n            .with(\n                DumbbellMode.TwoColumn,\n                () =>\n                    sortedSeries.find((s) => s.start.x !== s.end.x) ??\n                    sortedSeries[0]\n            )\n            .exhaustive()\n\n        if (!topSeries) return undefined\n\n        // Order the heads like the value labels do (including the tie-break\n        // for equal endpoints) so legend and value labels stay in sync.\n        // Labels are anchored on their inner edges: the label over the left\n        // head is right-aligned, the one over the right head is left-aligned\n        const { left: leftHead } = toLeftRight(topSeries.start, topSeries.end)\n        const startIsLeft = leftHead === topSeries.start\n        const startAnchor = startIsLeft\n            ? HorizontalAlign.right\n            : HorizontalAlign.left\n        const endAnchor = startIsLeft\n            ? HorizontalAlign.left\n            : HorizontalAlign.right\n\n        const offset = (textAnchor: HorizontalAlign): number =>\n            match(this.chartState.mode)\n                // In time-range mode, shift labels outward by the same gap\n                // as the value labels so both align perfectly\n                .with(DumbbellMode.TimeRange, () =>\n                    textAnchor === HorizontalAlign.right\n                        ? -VALUE_LABEL_DOT_GAP\n                        : VALUE_LABEL_DOT_GAP\n                )\n                // In two-column mode, shift labels inward by a bit\n                .with(DumbbellMode.TwoColumn, () => {\n                    const magnitude = Math.min(\n                        20,\n                        Math.floor(\n                            Math.abs(topSeries.end.x - topSeries.start.x) / 4\n                        )\n                    )\n                    return textAnchor === HorizontalAlign.right\n                        ? magnitude\n                        : -magnitude\n                })\n                .exhaustive()\n\n        return [\n            {\n                text: legendLabels.start.text,\n                x: topSeries.start.x + offset(startAnchor),\n                color: legendLabels.start.color,\n                textAnchor: startAnchor,\n            },\n            {\n                text: legendLabels.end.text,\n                x: topSeries.end.x + offset(endAnchor),\n                color: legendLabels.end.color,\n                textAnchor: endAnchor,\n            },\n        ]\n    }\n\n    @computed private get inlineLegendState():\n        | HorizontalLabelPairState\n        | undefined {\n        if (!this.inlineLegendSeries) return undefined\n\n        return new HorizontalLabelPairState(this.inlineLegendSeries, {\n            xRange: [this.bounds.left, this.bounds.right],\n            fontSettings: this.inlineLegendLabelStyle,\n            minGap: MIN_LEGEND_LABEL_GAP,\n        })\n    }\n\n    @computed private get legendWidth(): number {\n        return this.bounds.width\n    }\n\n    @computed private get categoricalLegendData(): CategoricalBin[] {\n        if (!this.legendLabels || this.topLegendType !== \"swatches\") return []\n        const { start, end } = this.legendLabels\n        return [\n            new CategoricalBin({\n                index: 0,\n                value: start.text,\n                label: start.text,\n                color: start.color,\n            }),\n            new CategoricalBin({\n                index: 1,\n                value: end.text,\n                label: end.text,\n                color: end.color,\n            }),\n        ]\n    }\n\n    @computed\n    private get categoricalLegendState(): HorizontalCategoricalColorLegendState {\n        return new HorizontalCategoricalColorLegendState(\n            this.categoricalLegendData,\n            {\n                baseFontSize: this.fontSize,\n                width: this.legendWidth,\n                align: HorizontalAlign.left,\n            }\n        )\n    }\n\n    private formatValue(\n        value: number,\n        options?: TickFormattingOptions\n    ): string {\n        return this.chartState.formatColumn.formatValueShort(value, options)\n    }\n\n    @action.bound private dismissTooltip(): void {\n        this.tooltipState.target = null\n    }\n\n    @action.bound private onSeriesMouseEnter(\n        seriesName: string,\n        event: React.MouseEvent<SVGElement>\n    ): void {\n        this.chartState.focusArray.clear()\n        this.updateTooltipPosition(event)\n        this.tooltipState.target = { seriesName }\n    }\n\n    @action.bound private onSeriesMouseMove(\n        event: React.MouseEvent<SVGElement>\n    ): void {\n        this.updateTooltipPosition(event)\n    }\n\n    @action.bound private onSeriesMouseLeave(): void {\n        this.tooltipState.target = null\n    }\n\n    private updateTooltipPosition(event: React.MouseEvent<SVGElement>): void {\n        const ref = this.manager.base?.current\n        if (ref) this.tooltipState.position = getRelativeMouse(ref, event)\n    }\n\n    override componentDidMount(): void {\n        exposeInstanceOnWindow(this)\n    }\n\n    private renderLegend(): React.ReactElement | null {\n        return match(this.topLegendType)\n            .with(\"swatches\", () => (\n                <HorizontalCategoricalColorLegend\n                    state={this.categoricalLegendState}\n                    x={this.bounds.left}\n                    y={this.bounds.top}\n                    interactive={!this.manager.isStatic}\n                />\n            ))\n            .with(\"inline\", () =>\n                this.inlineLegendState ? (\n                    <HorizontalLabelPair\n                        state={this.inlineLegendState}\n                        y={this.bounds.top}\n                    />\n                ) : null\n            )\n            .with(\"none\", () => null)\n            .exhaustive()\n    }\n\n    private renderStatic(): React.ReactElement {\n        return (\n            <>\n                <DumbbellChartAxis\n                    bounds={this.boundsWithoutLegend}\n                    dataBounds={this.dataBounds}\n                    axis={this.axis}\n                />\n                <g id={makeFigmaId(\"rows\")}>\n                    {this.renderSeries.map((series) => (\n                        <DumbbellChartRow\n                            key={series.seriesName}\n                            series={series}\n                            mode={this.chartState.mode}\n                            connectorStyle={this.chartState.connectorStyle}\n                            range={this.xRange}\n                            valueLabelStyle={this.valueLabelStyle}\n                            y={series.y}\n                        />\n                    ))}\n                </g>\n                {this.renderLegend()}\n            </>\n        )\n    }\n\n    private renderInteractive(): React.ReactElement {\n        const { xRange, valueLabelStyle } = this\n        const { mode, connectorStyle } = this.chartState\n\n        return (\n            <g>\n                <DumbbellChartAxis\n                    bounds={this.boundsWithoutLegend}\n                    dataBounds={this.dataBounds}\n                    axis={this.axis}\n                />\n                <g className=\"hover-areas\">\n                    {this.placedSeries.map((series) => (\n                        <DumbbellHoverArea\n                            key={series.seriesName}\n                            series={series}\n                            height={this.availableHeightPerSeries}\n                            containerBounds={this.boundsWithoutLegend}\n                            onMouseEnter={this.onSeriesMouseEnter}\n                            onMouseMove={this.onSeriesMouseMove}\n                            onMouseLeave={this.onSeriesMouseLeave}\n                        />\n                    ))}\n                </g>\n                <AnimatedRows\n                    items={this.renderSeries}\n                    keyAccessor={(d: RenderDumbbellSeries): string =>\n                        d.seriesName\n                    }\n                    getY={(d: RenderDumbbellSeries): number => d.y}\n                    immediate={this.manager.disableChartRowAnimation}\n                    renderRow={(series): React.ReactElement => (\n                        <DumbbellChartRow\n                            key={series.seriesName}\n                            series={series}\n                            mode={mode}\n                            connectorStyle={connectorStyle}\n                            range={xRange}\n                            valueLabelStyle={valueLabelStyle}\n                            y={0}\n                            onInfoTooltipShow={this.dismissTooltip}\n                        />\n                    )}\n                />\n                {this.renderLegend()}\n                {this.chartState.mode === DumbbellMode.TimeRange ? (\n                    <DumbbellTimeRangeTooltip\n                        id={this.tooltipId}\n                        chartState={this.chartState}\n                        tooltipState={this.tooltipState}\n                        series={this.sizedSeries}\n                        dismissTooltip={this.dismissTooltip}\n                    />\n                ) : (\n                    <DumbbellTwoColumnTooltip\n                        id={this.tooltipId}\n                        chartState={this.chartState}\n                        tooltipState={this.tooltipState}\n                        series={this.sizedSeries}\n                        dismissTooltip={this.dismissTooltip}\n                    />\n                )}\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataMessage\n                    manager={this.manager}\n                    bounds={this.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return this.manager.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n}\n\nfunction DumbbellChartAxis({\n    axis,\n    bounds,\n    dataBounds,\n}: {\n    axis: HorizontalAxis\n    bounds: Bounds\n    dataBounds: Bounds\n}): React.ReactElement {\n    return (\n        <>\n            <HorizontalAxisComponent\n                bounds={bounds}\n                axis={axis}\n                tickColor={GRAPHER_LIGHT_TEXT}\n            />\n            <HorizontalAxisGridLines bounds={dataBounds} axis={axis} />\n            {axis.contains(0) && (\n                <HorizontalAxisZeroLine\n                    bounds={dataBounds}\n                    axis={axis}\n                    color=\"#999\"\n                />\n            )}\n        </>\n    )\n}\n\nfunction DumbbellHoverArea({\n    series,\n    height,\n    maxHeight = 60,\n    containerBounds,\n    onMouseEnter,\n    onMouseMove,\n    onMouseLeave,\n}: {\n    series: PlacedDumbbellSeries\n    height: number\n    maxHeight?: number\n    containerBounds: Bounds\n    onMouseEnter: (seriesName: string, ev: React.MouseEvent<SVGElement>) => void\n    onMouseMove: (ev: React.MouseEvent<SVGElement>) => void\n    onMouseLeave: () => void\n}): React.ReactElement {\n    const cappedHeight = Math.min(height, maxHeight)\n    return (\n        <rect\n            x={roundForSvg(containerBounds.left)}\n            y={roundForSvg(series.y - cappedHeight / 2)}\n            width={roundForSvg(containerBounds.width)}\n            height={roundForSvg(cappedHeight)}\n            fill=\"transparent\"\n            onMouseEnter={(ev) => onMouseEnter(series.seriesName, ev)}\n            onMouseMove={onMouseMove}\n            onMouseLeave={onMouseLeave}\n        />\n    )\n}\n\nfunction roundToNearestHalf(value: number): number {\n    return Math.round(value * 2) / 2\n}\n","import * as React from \"react\"\nimport { makeFigmaId, roundForSvg } from \"@ourworldindata/utils\"\nimport { TextWrapSvg } from \"@ourworldindata/components\"\nimport { ColorScaleBin, isNoDataBin } from \"../color/ColorScaleBin\"\nimport {\n    resolveLegendMarkerStyle,\n    resolveLegendTextStyle,\n} from \"./LegendStyleConfig\"\nimport { HorizontalOrdinalColorLegendState } from \"./HorizontalOrdinalColorLegendState\"\nimport { HorizontalColorLegendProps } from \"./HorizontalColorLegendTypes\"\nimport { useDismissOnOutsidePointerDownOrUnmount } from \"../hooks.js\"\nimport {\n    DEFAULT_NUMERIC_BIN_STROKE,\n    DEFAULT_NUMERIC_BIN_STROKE_WIDTH,\n} from \"./HorizontalColorLegendConstants\"\n\n/** Outline of the No-data swatch, which takes precedence over the style config */\nconst NO_DATA_BIN_OUTLINE = {\n    stroke: DEFAULT_NUMERIC_BIN_STROKE,\n    strokeWidth: DEFAULT_NUMERIC_BIN_STROKE_WIDTH,\n}\n\nexport function HorizontalOrdinalColorLegend(\n    props: HorizontalColorLegendProps<HorizontalOrdinalColorLegendState>\n): React.ReactElement {\n    const {\n        state,\n        x,\n        y,\n        interactive = true,\n        styleConfig,\n        binEmphasis,\n        onMouseEnter,\n        onMouseOver,\n        onMouseLeave,\n    } = props\n    const { labels, binHeight, binY, positionedBins, height } = state\n\n    const isHoverable = interactive && !!onMouseOver\n    useDismissOnOutsidePointerDownOrUnmount(\n        isHoverable ? onMouseLeave : undefined\n    )\n\n    const binTop = y + binY\n\n    const onPointerEnter =\n        (bin: ColorScaleBin) =>\n        (event: React.PointerEvent): void => {\n            if (event.pointerType === \"touch\") return\n\n            onMouseEnter?.(bin)\n            onMouseOver?.(bin)\n        }\n\n    const onPointerLeave = (event: React.PointerEvent): void => {\n        if (event.pointerType === \"touch\") return\n\n        onMouseLeave?.()\n    }\n\n    const onPointerUp =\n        (bin: ColorScaleBin) =>\n        (event: React.PointerEvent): void => {\n            if (event.pointerType === \"touch\") {\n                onMouseEnter?.(bin)\n                onMouseOver?.(bin)\n            }\n        }\n\n    return (\n        <g\n            id={makeFigmaId(\"ordinal-color-legend\")}\n            className=\"ordinalColorLegend\"\n            onPointerDown={(event) => event.stopPropagation()}\n        >\n            <g id={makeFigmaId(\"swatches\")}>\n                {positionedBins.map((positionedBin) => {\n                    const { bin } = positionedBin\n                    const style = {\n                        ...resolveLegendMarkerStyle(\n                            styleConfig,\n                            binEmphasis?.get(bin),\n                            { fill: bin.color }\n                        ),\n                        ...(isNoDataBin(bin) ? NO_DATA_BIN_OUTLINE : {}),\n                    }\n                    return (\n                        <rect\n                            key={positionedBin.x}\n                            x={roundForSvg(x + positionedBin.x)}\n                            y={roundForSvg(binTop)}\n                            width={roundForSvg(positionedBin.width)}\n                            height={roundForSvg(binHeight)}\n                            stroke={style.stroke}\n                            strokeWidth={style.strokeWidth}\n                            opacity={style.opacity}\n                            fill={\n                                bin.fillPatternRef\n                                    ? `url(#${bin.fillPatternRef})`\n                                    : style.fill\n                            }\n                        />\n                    )\n                })}\n            </g>\n            <g id={makeFigmaId(\"labels\")}>\n                {labels.map((label, index) => {\n                    const style = resolveLegendTextStyle(\n                        styleConfig,\n                        binEmphasis?.get(label.bin)\n                    )\n                    return (\n                        <TextWrapSvg\n                            key={index}\n                            textWrap={label.textWrap}\n                            x={x + label.left}\n                            y={y + label.top}\n                            textAnchor=\"start\"\n                            style={{ fill: style.color, ...style }}\n                        />\n                    )\n                })}\n            </g>\n            {isHoverable && (\n                <g aria-hidden=\"true\">\n                    {positionedBins.map((positionedBin, index) => (\n                        <rect\n                            key={index}\n                            x={roundForSvg(x + positionedBin.x)}\n                            y={roundForSvg(y)}\n                            width={roundForSvg(positionedBin.width)}\n                            height={roundForSvg(height)}\n                            fill=\"transparent\"\n                            pointerEvents=\"all\"\n                            onPointerEnter={onPointerEnter(positionedBin.bin)}\n                            onPointerLeave={onPointerLeave}\n                            onPointerUp={onPointerUp(positionedBin.bin)}\n                        />\n                    ))}\n                </g>\n            )}\n        </g>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport { TextWrap } from \"@ourworldindata/components\"\nimport { MINIMUM_BIN_LABEL_DISTANCE } from \"./HorizontalColorLegendConstants\"\nimport { LabelSide, PositionedBin } from \"./HorizontalColorLegendTypes\"\n\nconst MAX_SEARCHED_LABELS = 12\nconst MAX_OVERRUN_INTO_NEXT_BIN = 0.5\nconst LABEL_LINE_HEIGHT = 1.1\n\nexport interface PlacedBinLabel {\n    side: LabelSide\n    textWrap: TextWrap\n    left: number\n    overflow: number\n}\n\nexport function layOutOrdinalLabels({\n    bins,\n    maxWidth,\n    fontSize,\n}: {\n    bins: PositionedBin[]\n    maxWidth: number\n    fontSize: number\n}): PlacedBinLabel[] {\n    const lastBin = _.last(bins)\n    const lastBinRight = lastBin ? lastBin.x + lastBin.width : 0\n    const binLabelWraps = wrapBinLabels({ bins, lastBinRight, fontSize })\n\n    // The number of side assignments grows exponentially with the number of\n    // labels, so long legends only try all-above and alternating.\n    const candidates =\n        bins.length <= MAX_SEARCHED_LABELS\n            ? listSideAssignmentsWithoutNeighborsBelow(bins.length)\n            : [\n                  bins.map((): LabelSide => \"above\"),\n                  listAlternatingSides(bins.length),\n              ]\n\n    let best: { labels: PlacedBinLabel[]; score: LabelLayoutScore } | undefined\n    for (const sides of candidates) {\n        const textWraps = pickTextWraps({ binLabelWraps, sides })\n        const placed = placeBinLabels({\n            bins,\n            textWraps,\n            sides,\n            lastBinRight,\n            maxWidth,\n        })\n        const score = scoreBinLabelLayout(placed)\n        if (!best || isScoreLower(score, best.score))\n            best = { labels: placed, score }\n    }\n    return best!.labels\n}\n\nfunction placeBinLabels({\n    bins,\n    textWraps,\n    sides,\n    lastBinRight,\n    maxWidth,\n}: {\n    bins: PositionedBin[]\n    textWraps: TextWrap[]\n    sides: LabelSide[]\n    lastBinRight: number\n    maxWidth: number\n}): PlacedBinLabel[] {\n    // A label that would overflow the legend's right edge is shifted left\n    const lefts = bins.map(({ x }, index) =>\n        Math.min(x, maxWidth - textWraps[index].width)\n    )\n    const rights = lefts.map((left, index) => left + textWraps[index].width)\n    const { previousIndices, nextIndices } = findSameSideNeighbors(sides)\n\n    return bins.map(({ x }, index) => {\n        const left = lefts[index]\n\n        const nextSameSideIndex = nextIndices[index]\n        const nextSameSideBin =\n            nextSameSideIndex >= 0 ? bins[nextSameSideIndex] : undefined\n        const previousSameSideIndex = previousIndices[index]\n\n        const canRunIntoPrevious = left < x && previousSameSideIndex >= 0\n        const intrusionIntoPrevious = canRunIntoPrevious\n            ? rights[previousSameSideIndex] + MINIMUM_BIN_LABEL_DISTANCE - left\n            : 0\n\n        const maxRight = findRightLimit(nextSameSideBin, lastBinRight)\n        const overflow =\n            Math.max(0, rights[index] - maxRight) +\n            Math.max(0, intrusionIntoPrevious)\n\n        return {\n            side: sides[index],\n            textWrap: textWraps[index],\n            left,\n            overflow,\n        }\n    })\n}\n\nfunction findSameSideNeighbors(sides: LabelSide[]): {\n    previousIndices: number[]\n    nextIndices: number[]\n} {\n    const previousIndices = new Array<number>(sides.length).fill(-1)\n    const nextIndices = new Array<number>(sides.length).fill(-1)\n\n    const lastIndexBySide: Partial<Record<LabelSide, number>> = {}\n    for (let index = 0; index < sides.length; index++) {\n        previousIndices[index] = lastIndexBySide[sides[index]] ?? -1\n        lastIndexBySide[sides[index]] = index\n    }\n\n    const nextIndexBySide: Partial<Record<LabelSide, number>> = {}\n    for (let index = sides.length - 1; index >= 0; index--) {\n        nextIndices[index] = nextIndexBySide[sides[index]] ?? -1\n        nextIndexBySide[sides[index]] = index\n    }\n\n    return { previousIndices, nextIndices }\n}\n\ntype LabelLayoutScore = [\n    overflow: number,\n    labelsBelow: number,\n    totalHeight: number,\n]\n\nexport function findMaxLabelHeight(\n    labels: PlacedBinLabel[],\n    side: LabelSide\n): number {\n    const heights = labels\n        .filter((label) => label.side === side)\n        .map((label) => label.textWrap.height)\n    return _.max(heights) ?? 0\n}\n\nfunction scoreBinLabelLayout(labels: PlacedBinLabel[]): LabelLayoutScore {\n    return [\n        // Total overflow\n        Math.round(labels.reduce((sum, label) => sum + label.overflow, 0)),\n        // Number of labels below the bins\n        labels.filter((label) => label.side === \"below\").length,\n        // Height of the tallest label above plus the tallest label below\n        Math.round(\n            findMaxLabelHeight(labels, \"above\") +\n                findMaxLabelHeight(labels, \"below\")\n        ),\n    ]\n}\n\n/** Whether score a is lower than b, decided by the first entry that differs */\nfunction isScoreLower(a: LabelLayoutScore, b: LabelLayoutScore): boolean {\n    for (let index = 0; index < a.length; index++) {\n        if (a[index] !== b[index]) return a[index] < b[index]\n    }\n    return false\n}\n\nfunction listAlternatingSides(count: number): LabelSide[] {\n    return _.range(count).map((index) => (index % 2 === 0 ? \"above\" : \"below\"))\n}\n\nfunction listSideAssignmentsWithoutNeighborsBelow(\n    count: number\n): LabelSide[][] {\n    if (count === 0) return [[]]\n    if (count === 1) return [[\"above\"], [\"below\"]]\n    return [\n        ...listSideAssignmentsWithoutNeighborsBelow(count - 1).map(\n            (rest): LabelSide[] => [\"above\", ...rest]\n        ),\n        ...listSideAssignmentsWithoutNeighborsBelow(count - 2).map(\n            (rest): LabelSide[] => [\"below\", \"above\", ...rest]\n        ),\n    ]\n}\n\nfunction findRightLimit(\n    next: PositionedBin | undefined,\n    lastBinRight: number\n): number {\n    return next ? next.x - MINIMUM_BIN_LABEL_DISTANCE : lastBinRight\n}\n\nfunction findWidenedRightLimit(\n    bins: PositionedBin[],\n    index: number,\n    lastBinRight: number\n): number {\n    const next = bins[index + 1]\n    if (!next) return lastBinRight\n    const overrunLimit = next.x + MAX_OVERRUN_INTO_NEXT_BIN * next.width\n    const binAfterNextLimit = findRightLimit(bins[index + 2], lastBinRight)\n    return Math.min(overrunLimit, binAfterNextLimit)\n}\n\ninterface BinLabelWraps {\n    contained: TextWrap\n    widened: TextWrap\n}\n\nfunction wrapBinLabels({\n    bins,\n    lastBinRight,\n    fontSize,\n}: {\n    bins: PositionedBin[]\n    lastBinRight: number\n    fontSize: number\n}): BinLabelWraps[] {\n    return bins.map(({ x, bin }, index) => {\n        const containedLimit = findRightLimit(bins[index + 1], lastBinRight)\n        const widenedLimit = findWidenedRightLimit(bins, index, lastBinRight)\n\n        const wrapTo = (maxWidth: number): TextWrap =>\n            new TextWrap({\n                text: bin.text,\n                fontSize,\n                maxWidth,\n                lineHeight: LABEL_LINE_HEIGHT,\n            })\n\n        const containedWidth = Math.ceil(containedLimit - x)\n        const widenedWidth = Math.ceil(widenedLimit - x)\n        const contained = wrapTo(containedWidth)\n        const widened =\n            widenedWidth === containedWidth ? contained : wrapTo(widenedWidth)\n\n        return { contained, widened }\n    })\n}\n\nfunction pickTextWraps({\n    binLabelWraps,\n    sides,\n}: {\n    binLabelWraps: BinLabelWraps[]\n    sides: LabelSide[]\n}): TextWrap[] {\n    return binLabelWraps.map(({ contained, widened }, index) =>\n        index + 1 < sides.length && sides[index + 1] !== sides[index]\n            ? widened\n            : contained\n    )\n}\n","import * as _ from \"lodash-es\"\nimport { computed } from \"mobx\"\nimport { Bounds, HorizontalAlign } from \"@ourworldindata/utils\"\nimport { CategoricalBin, isNoDataBin } from \"../color/ColorScaleBin\"\nimport { BASE_FONT_SIZE } from \"../core/GrapherConstants\"\nimport { scaleFontSize } from \"../chart/ChartUtils\"\nimport {\n    HorizontalOrdinalColorLegendOptions,\n    OrdinalLabel,\n    PositionedBin,\n} from \"./HorizontalColorLegendTypes\"\nimport {\n    CATEGORICAL_BIN_MIN_WIDTH,\n    DEFAULT_BIN_HEIGHT,\n    MINIMUM_BIN_LABEL_DISTANCE,\n    BIN_MAX_WIDTH_EM,\n    BIN_MIN_WIDTH_EM,\n    BIN_LABEL_PADDING,\n} from \"./HorizontalColorLegendConstants\"\nimport {\n    findMaxLabelHeight,\n    layOutOrdinalLabels,\n    PlacedBinLabel,\n} from \"./OrdinalLabelLayout\"\n\nexport class HorizontalOrdinalColorLegendState {\n    private readonly bins: CategoricalBin[]\n    private readonly options: HorizontalOrdinalColorLegendOptions\n\n    constructor(\n        bins: CategoricalBin[],\n        options: HorizontalOrdinalColorLegendOptions\n    ) {\n        this.bins = bins\n        this.options = options\n    }\n\n    @computed private get baseFontSize(): number {\n        return this.options.baseFontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get align(): HorizontalAlign {\n        return this.options.align ?? HorizontalAlign.center\n    }\n\n    @computed private get labelFontSize(): number {\n        return scaleFontSize(12, this.baseFontSize)\n    }\n\n    @computed private get noDataGap(): number {\n        return Math.max(\n            Math.round(this.baseFontSize * 1.125),\n            MINIMUM_BIN_LABEL_DISTANCE\n        )\n    }\n\n    @computed get binHeight(): number {\n        return this.options.binHeight ?? DEFAULT_BIN_HEIGHT\n    }\n\n    @computed private get visibleBins(): CategoricalBin[] {\n        return this.bins.filter((bin) => !bin.isHidden)\n    }\n\n    @computed private get noDataBin(): CategoricalBin | undefined {\n        return this.visibleBins.find(isNoDataBin)\n    }\n\n    @computed private get visibleCategoryBins(): CategoricalBin[] {\n        return this.visibleBins.filter((bin) => !isNoDataBin(bin))\n    }\n\n    @computed private get maxBinWidth(): number {\n        return this.baseFontSize * BIN_MAX_WIDTH_EM\n    }\n\n    private getLabelWidth(text: string): number {\n        return Bounds.forText(text, { fontSize: this.labelFontSize }).width\n    }\n\n    @computed private get noDataBinWidth(): number {\n        if (!this.noDataBin) return 0\n        const availableWidth = this.options.maxWidth - this.noDataGap\n        const sharedWidth = availableWidth / this.visibleBins.length\n        const preferredWidth = Math.max(\n            this.getLabelWidth(this.noDataBin.text),\n            CATEGORICAL_BIN_MIN_WIDTH\n        )\n        return Math.min(sharedWidth, this.maxBinWidth, preferredWidth)\n    }\n\n    @computed private get noDataWidth(): number {\n        return this.noDataBin ? this.noDataBinWidth + this.noDataGap : 0\n    }\n\n    @computed private get categoryBinWidth(): number {\n        const count = this.visibleCategoryBins.length\n        if (count === 0) return 0\n        const availableWidth = this.options.maxWidth - this.noDataWidth\n        const sharedWidth = availableWidth / count\n        const widestLabelWidth =\n            _.max(\n                this.visibleCategoryBins.map((bin) =>\n                    this.getLabelWidth(bin.text)\n                )\n            ) ?? 0\n        const preferredWidth = Math.max(\n            widestLabelWidth + MINIMUM_BIN_LABEL_DISTANCE,\n            this.baseFontSize * BIN_MIN_WIDTH_EM\n        )\n        return Math.min(sharedWidth, this.maxBinWidth, preferredWidth)\n    }\n\n    @computed get width(): number {\n        return (\n            this.noDataWidth +\n            this.visibleCategoryBins.length * this.categoryBinWidth\n        )\n    }\n\n    @computed private get xOffset(): number {\n        const widthDiff = this.options.maxWidth - this.width\n        if (this.align === HorizontalAlign.center) return widthDiff / 2\n        if (this.align === HorizontalAlign.right) return widthDiff\n        return 0\n    }\n\n    @computed get positionedBins(): PositionedBin<CategoricalBin>[] {\n        const { noDataBin, xOffset, categoryBinWidth } = this\n        const categoryStartX = xOffset + this.noDataWidth\n        const categoryBins = this.visibleCategoryBins.map((bin, index) => ({\n            x: categoryStartX + index * categoryBinWidth,\n            width: categoryBinWidth,\n            bin,\n        }))\n        if (!noDataBin) return categoryBins\n        const noDataPositioned = {\n            x: xOffset,\n            width: this.noDataBinWidth,\n            bin: noDataBin,\n        }\n        return [noDataPositioned, ...categoryBins]\n    }\n\n    @computed private get placedLabels(): PlacedBinLabel[] {\n        return layOutOrdinalLabels({\n            bins: this.positionedBins,\n            maxWidth: this.options.maxWidth,\n            fontSize: this.labelFontSize,\n        })\n    }\n\n    @computed private get labelHeightAbove(): number {\n        return findMaxLabelHeight(this.placedLabels, \"above\")\n    }\n\n    @computed private get labelHeightBelow(): number {\n        return findMaxLabelHeight(this.placedLabels, \"below\")\n    }\n\n    @computed get binY(): number {\n        return this.labelHeightAbove + BIN_LABEL_PADDING\n    }\n\n    @computed get labels(): OrdinalLabel[] {\n        const {\n            placedLabels,\n            labelHeightAbove,\n            positionedBins,\n            binY,\n            binHeight,\n        } = this\n        const belowY = binY + binHeight + BIN_LABEL_PADDING\n        return placedLabels.map((placed, index) => ({\n            bin: positionedBins[index].bin,\n            side: placed.side,\n            textWrap: placed.textWrap,\n            left: placed.left,\n            top:\n                placed.side === \"above\"\n                    ? labelHeightAbove - placed.textWrap.height\n                    : belowY,\n        }))\n    }\n\n    @computed get height(): number {\n        if (this.visibleBins.length === 0) return 0\n        const { labelHeightBelow } = this\n        return (\n            this.binY +\n            this.binHeight +\n            (labelHeightBelow > 0 ? BIN_LABEL_PADDING + labelHeightBelow : 0)\n        )\n    }\n}\n","import React from \"react\"\nimport { dyFromAlign, roundForSvg } from \"@ourworldindata/utils\"\nimport { VerticalAlign } from \"@ourworldindata/types\"\nimport { GRAY_100 } from \"../color/ColorConstants\"\nimport { isDarkColor } from \"../color/ColorUtils\"\nimport {\n    RenderSwimlaneCategorySegment,\n    RenderSwimlaneSegment,\n    SEGMENT_OUTLINE_WIDTH,\n    SWIMLANE_LABEL_STYLE,\n    SWIMLANE_SEGMENT_STYLE,\n    SwimlaneSegmentCrop,\n    SwimlaneSegmentPlacement,\n} from \"./SwimlaneChartConstants\"\n\ntype Point = [x: number, y: number]\n\nexport function SwimlaneSegments({\n    segments,\n    noDataPatternId,\n    onMouseEnter,\n    onMouseLeave,\n}: {\n    segments: RenderSwimlaneSegment[]\n    noDataPatternId: string\n    onMouseEnter?: (segment: RenderSwimlaneSegment) => void\n    onMouseLeave?: () => void\n}): React.ReactElement {\n    return (\n        <>\n            {segments.map((segment) => (\n                <g\n                    key={segment.startTime}\n                    onMouseEnter={(): void => onMouseEnter?.(segment)}\n                    onMouseLeave={onMouseLeave}\n                >\n                    <SwimlaneSegmentShape\n                        segment={segment}\n                        noDataPatternId={noDataPatternId}\n                    />\n                    {segment.kind === \"category\" && (\n                        <SwimlaneSegmentLabelText segment={segment} />\n                    )}\n                </g>\n            ))}\n        </>\n    )\n}\n\nfunction SwimlaneSegmentShape({\n    segment,\n    noDataPatternId,\n}: {\n    segment: RenderSwimlaneSegment\n    noDataPatternId: string\n}): React.ReactElement {\n    const { x, y, width, height } = segment\n    const fill =\n        segment.kind === \"missing\" ? `url(#${noDataPatternId})` : segment.color\n    const opacity = SWIMLANE_SEGMENT_STYLE[segment.emphasis].opacity\n\n    if (\n        segment.kind === \"missing\" ||\n        (!segment.isStartCropped && !segment.isEndCropped)\n    )\n        return (\n            <rect\n                x={roundForSvg(x)}\n                y={roundForSvg(y)}\n                width={roundForSvg(width)}\n                height={roundForSvg(height)}\n                fill={fill}\n                stroke=\"#fff\"\n                strokeWidth={SEGMENT_OUTLINE_WIDTH}\n                opacity={opacity}\n            />\n        )\n\n    return (\n        <polygon\n            points={toSegmentOutlinePoints(segment)}\n            fill={fill}\n            stroke=\"#fff\"\n            strokeWidth={SEGMENT_OUTLINE_WIDTH}\n            opacity={opacity}\n        />\n    )\n}\n\nfunction SwimlaneSegmentLabelText({\n    segment,\n}: {\n    segment: RenderSwimlaneCategorySegment\n}): React.ReactElement | null {\n    const { label } = segment\n    if (!label) return null\n\n    const { category, timeRange } = label.style\n    const x = roundForSvg(label.x)\n    const lineHeight = category.fontSize * category.lineHeight\n    const color = isDarkColor(segment.color) ? \"#fff\" : GRAY_100\n    const opacity = SWIMLANE_LABEL_STYLE[segment.emphasis].opacity\n\n    return (\n        <text\n            x={x}\n            y={roundForSvg(label.y)}\n            dy={dyFromAlign(VerticalAlign.middle)}\n            fontSize={category.fontSize}\n            fill={color}\n            opacity={opacity}\n        >\n            <tspan x={x} fontWeight={category.fontWeight}>\n                {segment.categoryLabel}\n            </tspan>\n            <tspan\n                x={x}\n                dy={roundForSvg(lineHeight)}\n                fontSize={timeRange.fontSize}\n                fontWeight={timeRange.fontWeight}\n            >\n                {segment.timeRangeLabel}\n            </tspan>\n        </text>\n    )\n}\n\n/** Outline of a segment, tapered to a point at each edge the timeline window cropped */\nfunction toSegmentOutlinePoints({\n    x,\n    y,\n    width,\n    height,\n    isStartCropped,\n    isEndCropped,\n    cropTaper,\n}: SwimlaneSegmentPlacement & SwimlaneSegmentCrop): string {\n    const [left, right, top, bottom] = [x, x + width, y, y + height]\n    const middle = y + height / 2\n\n    const leftEdge: Point[] = isStartCropped\n        ? [\n              [left + cropTaper, bottom],\n              [left, middle],\n              [left + cropTaper, top],\n          ]\n        : [\n              [left, bottom],\n              [left, top],\n          ]\n    const rightEdge: Point[] = isEndCropped\n        ? [\n              [right - cropTaper, top],\n              [right, middle],\n              [right - cropTaper, bottom],\n          ]\n        : [\n              [right, top],\n              [right, bottom],\n          ]\n\n    return [...leftEdge, ...rightEdge]\n        .map(\n            ([pointX, pointY]) =>\n                `${roundForSvg(pointX)},${roundForSvg(pointY)}`\n        )\n        .join(\" \")\n}\n","import React from \"react\"\nimport { TextWrapSvg } from \"@ourworldindata/components\"\nimport { makeFigmaId, roundForSvg } from \"@ourworldindata/utils\"\nimport { GRAPHER_LIGHT_TEXT } from \"../color/ColorConstants.js\"\nimport { SeriesLabel } from \"../seriesLabel/SeriesLabel\"\nimport {\n    RenderSwimlaneSegment,\n    RenderSwimlaneSeries,\n    SWIMLANE_LABEL_STYLE,\n} from \"./SwimlaneChartConstants\"\nimport { SwimlaneSegments } from \"./SwimlaneSegments\"\n\nexport function SwimlaneRow({\n    series,\n    y,\n    noDataPatternId,\n    onSegmentMouseEnter,\n    onSegmentMouseLeave,\n}: {\n    series: RenderSwimlaneSeries\n    y: number\n    noDataPatternId: string\n    onSegmentMouseEnter?: (\n        entityName: string,\n        segment: RenderSwimlaneSegment\n    ) => void\n    onSegmentMouseLeave?: () => void\n}): React.ReactElement {\n    return (\n        <g\n            id={makeFigmaId(series.seriesName)}\n            transform={y ? `translate(0, ${roundForSvg(y)})` : undefined}\n        >\n            <SeriesLabel\n                state={series.label}\n                x={series.labelPosition.x}\n                y={series.labelPosition.yOffset}\n                color={{ name: GRAPHER_LIGHT_TEXT }}\n                opacity={SWIMLANE_LABEL_STYLE[series.emphasis].opacity}\n            />\n            {series.annotationTextWrap && series.annotationPosition && (\n                <TextWrapSvg\n                    textWrap={series.annotationTextWrap}\n                    x={series.annotationPosition.x}\n                    y={series.annotationPosition.yOffset}\n                    fill={GRAPHER_LIGHT_TEXT}\n                    textAnchor=\"end\"\n                    opacity={SWIMLANE_LABEL_STYLE[series.emphasis].opacity}\n                />\n            )}\n            <SwimlaneSegments\n                segments={series.placedSegments}\n                noDataPatternId={noDataPatternId}\n                onMouseEnter={\n                    onSegmentMouseEnter &&\n                    ((segment): void =>\n                        onSegmentMouseEnter(series.entityName, segment))\n                }\n                onMouseLeave={onSegmentMouseLeave}\n            />\n        </g>\n    )\n}\n","import React from \"react\"\nimport { observer } from \"mobx-react\"\nimport { Tooltip, TooltipState } from \"../tooltip/Tooltip\"\nimport { TooltipValue } from \"../tooltip/TooltipContents\"\nimport { darkenColorForText } from \"../color/ColorUtils\"\nimport { SwimlaneTooltipTarget } from \"./SwimlaneChartConstants\"\nimport { SwimlaneChartState } from \"./SwimlaneChartState\"\nimport { formatSegmentDuration } from \"./SwimlaneChartHelpers\"\n\nexport interface SwimlaneChartTooltipProps {\n    id: number\n    chartState: SwimlaneChartState\n    tooltipState: TooltipState<SwimlaneTooltipTarget>\n    dismissTooltip: () => void\n}\n\n@observer\nexport class SwimlaneChartTooltip extends React.Component<SwimlaneChartTooltipProps> {\n    private get chartState(): SwimlaneChartState {\n        return this.props.chartState\n    }\n\n    private get target(): SwimlaneTooltipTarget | undefined {\n        return this.props.tooltipState.target ?? undefined\n    }\n\n    private get annotation(): string | undefined {\n        return this.chartState.series.find(\n            (series) => series.entityName === this.target?.entityName\n        )?.annotation\n    }\n\n    private get formattedDuration(): string | undefined {\n        const segment = this.target?.segment\n        const { timeColumn } = this.chartState\n        if (!segment || !timeColumn) return undefined\n        return formatSegmentDuration({ segment, timeColumn })\n    }\n\n    override render(): React.ReactElement | null {\n        const { target } = this\n        const { position, fading } = this.props.tooltipState\n\n        if (!target) return null\n\n        const categorySegment =\n            target.segment.kind === \"category\" ? target.segment : undefined\n\n        return (\n            <Tooltip\n                id={this.props.id}\n                tooltipManager={this.chartState.manager}\n                x={position.x}\n                y={position.y}\n                style={{ maxWidth: \"400px\" }}\n                offsetXDirection=\"left\"\n                offsetX={20}\n                offsetY={-16}\n                title={target.entityName}\n                titleAnnotation={this.annotation}\n                subtitle={target.segment.timeRangeLabel}\n                dissolve={fading}\n                dismiss={this.props.dismissTooltip}\n            >\n                <TooltipValue\n                    value={categorySegment?.categoryLabel}\n                    color={\n                        categorySegment &&\n                        darkenColorForText(categorySegment.color)\n                    }\n                    detail={this.formattedDuration}\n                    noDataLabel={this.chartState.colorScale.noDataLabel}\n                />\n            </Tooltip>\n        )\n    }\n}\n","import React from \"react\"\nimport { action, computed, makeObservable, observable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { scalePoint, ScalePoint } from \"d3-scale\"\nimport {\n    Bounds,\n    excludeUndefined,\n    exposeInstanceOnWindow,\n    getRelativeMouse,\n    guid,\n    makeFigmaId,\n    HorizontalAlign,\n} from \"@ourworldindata/utils\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    FontSettings,\n    makePatternId,\n    Patterns,\n} from \"../core/GrapherConstants\"\nimport {\n    GrapherVariant,\n    SeriesName,\n    SwimlaneSegmentLabelMode,\n} from \"@ourworldindata/types\"\nimport { AnimatedRows } from \"../animation/AnimatedRows\"\nimport { enrichSeriesWithLabels } from \"../rowSeriesLabels/RowSeriesLabelHelpers.js\"\nimport { NoDataMessage } from \"../noDataMessage/NoDataMessage\"\nimport {\n    HorizontalAxisComponent,\n    HorizontalAxisDomainLine,\n    SOLID_TICK_COLOR,\n} from \"../axis/AxisViews\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig\"\nimport { HorizontalAxis } from \"../axis/Axis\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { TooltipState } from \"../tooltip/Tooltip\"\nimport { roundFontSize, scaleFontSize } from \"../chart/ChartUtils\"\nimport { GRAPHER_LIGHT_TEXT } from \"../color/ColorConstants.js\"\nimport { ChartComponentProps } from \"../chart/ChartTypeMap\"\nimport {\n    CategoricalBin,\n    ColorScaleBin,\n    addPatternRefToBin,\n    isCategoricalBin,\n    isNoDataBin,\n    mergeCategoricalBinsByLabelAndColor,\n} from \"../color/ColorScaleBin\"\nimport { HorizontalCategoricalColorLegend } from \"../legend/HorizontalCategoricalColorLegend\"\nimport { HorizontalCategoricalColorLegendState } from \"../legend/HorizontalCategoricalColorLegendState\"\nimport { HorizontalOrdinalColorLegend } from \"../legend/HorizontalOrdinalColorLegend\"\nimport { HorizontalOrdinalColorLegendState } from \"../legend/HorizontalOrdinalColorLegendState\"\nimport { BinEmphasis, toBinEmphasis } from \"../legend/LegendStyleConfig\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport {\n    ENTITY_LABEL_CHART_GAP,\n    PADDING_BETWEEN_LEGEND_AND_ROWS,\n    PlacedSwimlaneSeries,\n    RenderSwimlaneSeries,\n    SizedSwimlaneSeries,\n    SWIMLANE_LEGEND_STYLE,\n    SWIMLANE_ORDINAL_LEGEND_STYLE,\n    SwimlaneChartManager,\n    SwimlaneSegmentLabelStyle,\n    SwimlaneSegment,\n    SwimlaneSeries,\n    SwimlaneTooltipTarget,\n} from \"./SwimlaneChartConstants\"\nimport { SwimlaneChartState } from \"./SwimlaneChartState\"\nimport {\n    computeHeightPerSeries,\n    toPlacedSwimlaneSeries,\n    toRenderSwimlaneSeries,\n} from \"./SwimlaneChartHelpers\"\nimport { SwimlaneRow } from \"./SwimlaneRow\"\nimport { SwimlaneChartTooltip } from \"./SwimlaneChartTooltip\"\n\nexport type SwimlaneChartProps = ChartComponentProps<SwimlaneChartState>\n\n@observer\nexport class SwimlaneChart\n    extends React.Component<SwimlaneChartProps>\n    implements ChartInterface, AxisManager\n{\n    private readonly tooltipId = guid()\n    private readonly tooltipState = new TooltipState<SwimlaneTooltipTarget>()\n\n    private hoveredLegendBin: CategoricalBin | undefined = undefined\n\n    constructor(props: SwimlaneChartProps) {\n        super(props)\n        makeObservable<SwimlaneChart, \"tooltipState\" | \"hoveredLegendBin\">(\n            this,\n            { tooltipState: observable, hoveredLegendBin: observable.ref }\n        )\n    }\n\n    @computed get chartState(): SwimlaneChartState {\n        return this.props.chartState\n    }\n\n    @computed private get manager(): SwimlaneChartManager {\n        return this.chartState.manager\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get bounds(): Bounds {\n        // 2px padding at the bottom prevents the tick labels from overflowing\n        return (this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS).padBottom(2)\n    }\n\n    @computed private get showLegend(): boolean {\n        return this.manager.showLegend ?? true\n    }\n\n    @computed private get noDataPatternId(): string {\n        return makePatternId(\n            Patterns.noDataPattern,\n            this.manager.patternIdSuffix\n        )\n    }\n\n    @computed private get noDataLegendBin(): CategoricalBin | undefined {\n        const bin =\n            this.chartState.colorScale.categoricalLegendBins.find(isNoDataBin)\n        return bin && addPatternRefToBin(bin, this.noDataPatternId)\n    }\n\n    @computed private get categoryLegendBins(): CategoricalBin[] {\n        return mergeCategoricalBinsByLabelAndColor(\n            this.chartState.colorScale.categoricalLegendBins.filter(\n                (bin) => !bin.isHidden && !isNoDataBin(bin)\n            )\n        )\n    }\n\n    @computed private get categoricalLegendBins(): CategoricalBin[] {\n        return excludeUndefined([\n            this.noDataLegendBin,\n            ...this.categoryLegendBins,\n        ])\n    }\n\n    @computed private get legendBinHeight(): number {\n        return 0.625 * this.fontSize\n    }\n\n    private readonly resolveLegendBinEmphasis = (\n        bin: ColorScaleBin\n    ): Emphasis => {\n        const { hoveredLegendBin } = this\n        if (!hoveredLegendBin) return Emphasis.Default\n        return bin === hoveredLegendBin ? Emphasis.Highlighted : Emphasis.Muted\n    }\n\n    @computed private get legendEmphasis(): BinEmphasis {\n        return toBinEmphasis(\n            this.categoricalLegendBins,\n            this.resolveLegendBinEmphasis\n        )\n    }\n\n    @computed private get ordinalLegendState():\n        | HorizontalOrdinalColorLegendState\n        | undefined {\n        if (!this.showLegend || this.chartState.categoryKind !== \"ordinal\")\n            return undefined\n\n        return new HorizontalOrdinalColorLegendState(\n            this.categoricalLegendBins,\n            {\n                baseFontSize: this.fontSize,\n                maxWidth: this.bounds.width,\n                align: HorizontalAlign.center,\n                binHeight: this.legendBinHeight,\n            }\n        )\n    }\n\n    @computed private get categoricalLegendState():\n        | HorizontalCategoricalColorLegendState\n        | undefined {\n        if (!this.showLegend || this.chartState.categoryKind !== \"categorical\")\n            return undefined\n\n        return new HorizontalCategoricalColorLegendState(\n            this.categoricalLegendBins,\n            {\n                baseFontSize: this.fontSize,\n                width: this.bounds.width,\n                align: HorizontalAlign.left,\n            }\n        )\n    }\n\n    @computed private get boundsWithoutLegend(): Bounds {\n        const legendHeight =\n            this.ordinalLegendState?.height ??\n            this.categoricalLegendState?.height ??\n            0\n\n        return this.bounds.padTop(\n            legendHeight > 0\n                ? legendHeight + PADDING_BETWEEN_LEGEND_AND_ROWS\n                : 0\n        )\n    }\n\n    @computed private get series(): SwimlaneSeries[] {\n        return this.chartState.series\n    }\n\n    @computed private get availableHeightPerSeries(): number {\n        return computeHeightPerSeries({\n            height: this.boundsWithoutLegend.height,\n            rowCount: this.series.length,\n        })\n    }\n\n    @computed private get entityLabelStyle(): FontSettings {\n        const fontSize = roundFontSize(\n            Math.min(\n                scaleFontSize(12, this.fontSize),\n                1.1 * this.availableHeightPerSeries\n            )\n        )\n\n        return { fontSize, fontWeight: 700, lineHeight: 1 }\n    }\n\n    @computed private get shouldShowSegmentLabels(): boolean {\n        return (\n            !this.isThumbnail &&\n            this.chartState.segmentLabelMode !== SwimlaneSegmentLabelMode.None\n        )\n    }\n\n    @computed private get segmentLabelStyle(): SwimlaneSegmentLabelStyle {\n        const fontSize = scaleFontSize(12, this.fontSize)\n        return {\n            category: { fontSize, fontWeight: 700, lineHeight: 1.2 },\n            timeRange: { fontSize, fontWeight: 500, lineHeight: 1.2 },\n        }\n    }\n\n    @computed private get sizedSeries(): SizedSwimlaneSeries[] {\n        return enrichSeriesWithLabels({\n            series: this.series,\n            availableHeightPerSeries: this.availableHeightPerSeries,\n            minLabelWidth: 0.3 * this.boundsWithoutLegend.width,\n            maxLabelWidth: 0.66 * this.boundsWithoutLegend.width,\n            fontSettings: this.entityLabelStyle,\n            showRegionTooltip: !this.manager.isStatic,\n        })\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        return new AxisConfig(\n            { isDomainEndExclusive: true, ...this.manager.xAxisConfig },\n            this\n        )\n    }\n\n    @computed private get entityLabelMaxWidth(): number {\n        const labelWidths = this.sizedSeries.flatMap((series) => [\n            series.label.width,\n            series.annotationTextWrap?.width ?? 0,\n        ])\n        if (labelWidths.length === 0) return 0\n        return Math.max(...labelWidths)\n    }\n\n    @computed get axisBounds(): Bounds {\n        return this.boundsWithoutLegend.padLeft(\n            this.entityLabelMaxWidth + ENTITY_LABEL_CHART_GAP\n        )\n    }\n\n    @computed get xAxis(): HorizontalAxis {\n        const axis = this.chartState.toHorizontalAxis(this.xAxisConfig)\n        axis.range = this.axisBounds.xRange()\n        return axis\n    }\n\n    @computed private get innerBounds(): Bounds {\n        return this.axisBounds.padBottom(this.xAxis.height)\n    }\n\n    @computed private get heightPerSeries(): number {\n        return computeHeightPerSeries({\n            height: this.innerBounds.height,\n            rowCount: this.series.length,\n        })\n    }\n\n    @computed private get yScale(): ScalePoint<SeriesName> {\n        const { innerBounds, heightPerSeries, series } = this\n        const totalHeight = heightPerSeries * series.length\n        return scalePoint<SeriesName>()\n            .domain(series.map((s) => s.seriesName))\n            .range([\n                innerBounds.centerY - totalHeight / 2,\n                innerBounds.centerY + totalHeight / 2,\n            ])\n            .padding(0.5)\n    }\n\n    @computed private get placedSeries(): PlacedSwimlaneSeries[] {\n        const { visibleTimeRange } = this.chartState\n        if (!visibleTimeRange) return []\n        return toPlacedSwimlaneSeries({\n            series: this.sizedSeries,\n            labelX: this.innerBounds.left - ENTITY_LABEL_CHART_GAP,\n            heightPerSeries: this.heightPerSeries,\n            placeSeries: (seriesName) => this.yScale(seriesName)!,\n            placeTime: (time) => this.xAxis.place(time),\n            visibleExclusiveEndTime: visibleTimeRange.exclusiveEndTime,\n            shouldShowSegmentLabels: this.shouldShowSegmentLabels,\n            segmentLabelStyle: this.segmentLabelStyle,\n        })\n    }\n\n    @computed private get renderSeries(): RenderSwimlaneSeries[] {\n        return toRenderSwimlaneSeries({\n            series: this.placedSeries,\n            hoveredSegment: this.tooltipState.target,\n            focusArray: this.chartState.focusArray,\n            hoveredLegendBin: this.hoveredLegendBin,\n        })\n    }\n\n    @computed private get isThumbnail(): boolean {\n        return this.manager.variant === GrapherVariant.Thumbnail\n    }\n\n    override componentDidMount(): void {\n        exposeInstanceOnWindow(this)\n    }\n\n    @action.bound private onMouseMove(event: React.MouseEvent): void {\n        const ref = this.manager.base?.current\n        if (ref) {\n            this.tooltipState.position = getRelativeMouse(ref, event)\n        }\n    }\n\n    @action.bound private onSegmentMouseEnter(\n        entityName: string,\n        segment: SwimlaneSegment\n    ): void {\n        this.chartState.focusArray.clear()\n        this.tooltipState.target = { entityName, segment }\n    }\n\n    @action.bound private onSegmentMouseLeave(): void {\n        if (!this.manager.shouldPinTooltipToBottom) {\n            this.dismissTooltip()\n        }\n    }\n\n    @action.bound private dismissTooltip(): void {\n        this.tooltipState.target = null\n    }\n\n    @action.bound private onLegendMouseOver(bin: ColorScaleBin): void {\n        if (!isCategoricalBin(bin)) return\n        this.chartState.focusArray.clear()\n        this.hoveredLegendBin = bin\n    }\n\n    @action.bound private onLegendMouseLeave(): void {\n        this.hoveredLegendBin = undefined\n    }\n\n    private renderLegend(): React.ReactElement | undefined {\n        if (this.ordinalLegendState)\n            return (\n                <HorizontalOrdinalColorLegend\n                    state={this.ordinalLegendState}\n                    x={this.bounds.x}\n                    y={this.bounds.top}\n                    interactive={!this.manager.isStatic}\n                    styleConfig={SWIMLANE_ORDINAL_LEGEND_STYLE}\n                    binEmphasis={this.legendEmphasis}\n                    onMouseOver={this.onLegendMouseOver}\n                    onMouseLeave={this.onLegendMouseLeave}\n                />\n            )\n        if (this.categoricalLegendState)\n            return (\n                <HorizontalCategoricalColorLegend\n                    state={this.categoricalLegendState}\n                    x={this.bounds.x}\n                    y={this.bounds.top}\n                    interactive={!this.manager.isStatic}\n                    styleConfig={SWIMLANE_LEGEND_STYLE}\n                    binEmphasis={this.legendEmphasis}\n                    onMouseOver={this.onLegendMouseOver}\n                    onMouseLeave={this.onLegendMouseLeave}\n                />\n            )\n        return undefined\n    }\n\n    private renderRows(): React.ReactElement[] {\n        return this.renderSeries.map((series) => (\n            <SwimlaneRow\n                key={series.seriesName}\n                series={series}\n                y={series.y}\n                noDataPatternId={this.noDataPatternId}\n            />\n        ))\n    }\n\n    private renderAnimatedRows(): React.ReactElement {\n        return (\n            <AnimatedRows\n                items={this.renderSeries}\n                keyAccessor={(series: RenderSwimlaneSeries): string =>\n                    series.seriesName\n                }\n                getY={(series: RenderSwimlaneSeries): number => series.y}\n                immediate={this.manager.disableChartRowAnimation}\n                renderRow={(series): React.ReactElement => (\n                    <SwimlaneRow\n                        key={series.seriesName}\n                        series={series}\n                        y={0}\n                        noDataPatternId={this.noDataPatternId}\n                        onSegmentMouseEnter={this.onSegmentMouseEnter}\n                        onSegmentMouseLeave={this.onSegmentMouseLeave}\n                    />\n                )}\n            />\n        )\n    }\n\n    private renderAxis(): React.ReactElement {\n        return (\n            <>\n                <HorizontalAxisComponent\n                    bounds={this.boundsWithoutLegend}\n                    axis={this.xAxis}\n                    tickColor={GRAPHER_LIGHT_TEXT}\n                    showTickMarks={true}\n                    preferredAxisPosition={this.innerBounds.bottom}\n                    showEndpointsOnly={this.isThumbnail}\n                />\n                <HorizontalAxisDomainLine\n                    bounds={this.innerBounds}\n                    stroke={SOLID_TICK_COLOR}\n                />\n            </>\n        )\n    }\n\n    private renderStatic(): React.ReactElement {\n        return (\n            <g>\n                {this.renderLegend()}\n                {this.renderAxis()}\n                <g id={makeFigmaId(\"rows\")}>{this.renderRows()}</g>\n            </g>\n        )\n    }\n\n    private renderInteractive(): React.ReactElement {\n        return (\n            <g onMouseMove={this.onMouseMove}>\n                {this.renderLegend()}\n                {this.renderAxis()}\n                <g id={makeFigmaId(\"rows\")}>{this.renderAnimatedRows()}</g>\n                <SwimlaneChartTooltip\n                    id={this.tooltipId}\n                    chartState={this.chartState}\n                    tooltipState={this.tooltipState}\n                    dismissTooltip={this.dismissTooltip}\n                />\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataMessage\n                    manager={this.manager}\n                    bounds={this.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return this.manager.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    AxisConfigInterface,\n    ColumnSlug,\n    EntityName,\n    OwidVariableRoundingMode,\n    Time,\n} from \"@ourworldindata/types\"\nimport { OwidTable } from \"@ourworldindata/core-table\"\nimport { LineChart } from \"../lineCharts/LineChart\"\nimport { LineChartState } from \"../lineCharts/LineChartState\"\nimport {\n    Bounds,\n    checkIsVeryShortUnit,\n    roundForSvg,\n} from \"@ourworldindata/utils\"\nimport { LineChartManager } from \"../lineCharts/LineChartConstants\"\nimport { ColorScale } from \"../color/ColorScale.js\"\nimport * as R from \"remeda\"\nimport { MapColumnInfo } from \"./MapChartConstants\"\nimport type { MapFormatValueForTooltip } from \"./MapChartState.js\"\n\nconst DEFAULT_SPARKLINE_WIDTH = 250\nconst DEFAULT_SPARKLINE_HEIGHT = 87\n\nconst SPARKLINE_PADDING = 15\nconst SPARKLINE_NUDGE = 3 // step away from the axis\n\nexport interface MapSparklineManager {\n    mapColumnSlug: ColumnSlug\n    mapColumnInfo: MapColumnInfo\n    timeSeriesTable: OwidTable\n    targetTime?: Time\n    entityName: EntityName\n    lineColorScale?: ColorScale\n    highlightedTimesInSparkline?: Time[]\n    mapAndYColumnAreTheSame?: boolean\n    yAxisConfig?: AxisConfigInterface\n    formatValueForTooltip: MapFormatValueForTooltip\n}\n\ninterface MapSparklineProps {\n    manager: MapSparklineManager\n    sparklineWidth?: number\n    sparklineHeight?: number\n}\n\n@observer\nexport class MapSparkline extends React.Component<MapSparklineProps> {\n    constructor(props: MapSparklineProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    static shouldShow(manager: MapSparklineManager): boolean {\n        const test = new MapSparkline({ manager })\n        return test.showSparkline\n    }\n\n    @computed private get manager(): MapSparklineManager {\n        return this.props.manager\n    }\n\n    @computed private get mapColumnSlug(): ColumnSlug {\n        return this.manager.mapColumnSlug\n    }\n\n    @computed private get sparklineTable(): OwidTable {\n        return this.manager.timeSeriesTable\n            .filterByEntityNames([this.manager.entityName])\n            .columnFilter(\n                this.mapColumnSlug,\n                _.isNumber,\n                \"Drop rows with non-number values in Y column\"\n            )\n            .sortBy([this.manager.timeSeriesTable.timeColumn.slug])\n    }\n\n    @computed private get hasTimeSeriesData(): boolean {\n        return this.sparklineTable.numRows > 1\n    }\n\n    @computed private get showSparkline(): boolean {\n        return this.hasTimeSeriesData\n    }\n\n    @computed private get highlightedTimesInLineChart(): Time[] {\n        return this.props.manager.highlightedTimesInSparkline ?? []\n    }\n\n    @computed private get sparklineManager(): LineChartManager {\n        const { mapColumnInfo } = this.manager\n\n        // Plot projected and historical data as separate lines\n        const yColumnSlugs =\n            mapColumnInfo.type === \"historical+projected\"\n                ? [mapColumnInfo.projectedSlug, mapColumnInfo.historicalSlug]\n                : [mapColumnInfo.slug]\n\n        // Use the whole time range for the sparkline, not just the range where this series has data\n        let { minTime, maxTime } = this.manager.timeSeriesTable ?? {}\n        if (this.mapColumnSlug) {\n            const times =\n                this.manager.timeSeriesTable.getTimesUniqSortedAscForColumns([\n                    this.mapColumnSlug,\n                ])\n            minTime = R.first(times) ?? minTime\n            maxTime = R.last(times) ?? maxTime\n        }\n\n        // Pass down short units, while omitting long or undefined ones.\n        const unit = this.sparklineTable.get(this.mapColumnSlug).shortUnit\n        const yAxisUnit =\n            typeof unit === \"string\"\n                ? checkIsVeryShortUnit(unit)\n                    ? unit\n                    : \"\"\n                : \"\"\n\n        return {\n            table: this.sparklineTable,\n            transformedTable: this.sparklineTable,\n            yColumnSlugs,\n            colorColumnSlug: this.mapColumnSlug,\n            selection: [this.manager.entityName],\n            colorScaleOverride: this.manager.lineColorScale,\n            showLegend: false,\n            hidePoints: true,\n            fontSize: 11,\n            lineStrokeWidth: 2,\n            highlightedTimesInLineChart: this.highlightedTimesInLineChart,\n            yAxisConfig: {\n                hideAxis: true,\n                hideGridlines: false,\n                tickFormattingOptions: {\n                    unit: yAxisUnit,\n                    numberAbbreviation: \"short\",\n                    abbreviationThreshold: 1e3,\n                },\n                // Copy min/max from top-level Grapher config if Y column == Map column\n                min: this.manager.mapAndYColumnAreTheSame\n                    ? (this.manager.yAxisConfig?.min ?? 0) // Default to 0 if not specified\n                    : undefined,\n                max: this.manager.mapAndYColumnAreTheSame\n                    ? this.manager.yAxisConfig?.max\n                    : undefined,\n                ticks: [\n                    // Show minimum and zero (maximum is added by hand in render so it's never omitted)\n                    { value: -Infinity, priority: 2 },\n                    { value: 0, priority: 1 },\n                ],\n                nice: false,\n            },\n            xAxisConfig: {\n                hideAxis: false,\n                hideGridlines: true,\n                tickFormattingOptions: {},\n                min: minTime ?? this.manager.targetTime,\n                max: maxTime ?? this.manager.targetTime,\n                ticks: [\n                    // Show minimum and maximum\n                    { value: -Infinity, priority: 1 },\n                    { value: Infinity, priority: 1 },\n                ],\n            },\n        }\n    }\n\n    @computed private get sparklineWidth(): number {\n        return this.props.sparklineWidth ?? DEFAULT_SPARKLINE_WIDTH\n    }\n\n    @computed private get sparklineHeight(): number {\n        return this.props.sparklineHeight ?? DEFAULT_SPARKLINE_HEIGHT\n    }\n\n    @computed private get sparklineBounds(): Bounds {\n        // Add padding so that the edges of the plot doesn't get clipped.\n        // The plot can go out of boundaries due to line stroke thickness & labels.\n        return new Bounds(0, 0, this.sparklineWidth, this.sparklineHeight).pad({\n            top: 9,\n            left: SPARKLINE_PADDING,\n            right: SPARKLINE_PADDING,\n            bottom: 3,\n        })\n    }\n\n    @computed private get sparklineChartState(): LineChartState {\n        return new LineChartState({ manager: this.sparklineManager })\n    }\n\n    @computed private get sparklineChart(): LineChart {\n        return new LineChart({\n            bounds: this.sparklineBounds,\n            chartState: this.sparklineChartState,\n        })\n    }\n\n    override render(): React.ReactElement | null {\n        if (!this.showSparkline) return null\n\n        const { mapColumnSlug, formatValueForTooltip } = this.manager\n\n        const roundingMode = OwidVariableRoundingMode.decimalPlaces\n        const { yAxisConfig } = this.sparklineManager,\n            yColumn = this.sparklineTable.get(mapColumnSlug),\n            minVal = _.min([yColumn.minValue, yAxisConfig?.min]) ?? 0,\n            maxVal = _.max([yColumn.maxValue, yAxisConfig?.max]) ?? 0,\n            minLabel = formatValueForTooltip(minVal, { roundingMode }).label,\n            maxLabel = formatValueForTooltip(maxVal, { roundingMode }).label\n        const { innerBounds: axisBounds } = this.sparklineChart.dualAxis\n\n        const labelX = axisBounds.right - SPARKLINE_NUDGE\n        const labelTop = axisBounds.top - SPARKLINE_NUDGE\n        const labelBottom = axisBounds.bottom - SPARKLINE_NUDGE\n\n        return (\n            <div\n                className=\"sparkline\"\n                // negative margin to align the padding (added below) with the text labels\n                style={{ margin: `0 -${SPARKLINE_PADDING}px` }}\n            >\n                <svg\n                    className=\"plot\"\n                    width={this.sparklineWidth}\n                    height={this.sparklineHeight}\n                >\n                    <line\n                        className=\"max-line\"\n                        x1={roundForSvg(axisBounds.left)}\n                        y1={roundForSvg(axisBounds.y)}\n                        x2={roundForSvg(axisBounds.right)}\n                        y2={roundForSvg(axisBounds.y)}\n                    />\n                    <LineChart\n                        bounds={this.sparklineBounds}\n                        chartState={this.sparklineChartState}\n                    />\n                    {maxLabel !== minLabel && (\n                        <g className=\"max axis-label\">\n                            <text\n                                x={roundForSvg(labelX)}\n                                y={roundForSvg(labelTop)}\n                            >\n                                {maxLabel}\n                            </text>\n                        </g>\n                    )}\n                    <g className=\"min axis-label\">\n                        <text\n                            className=\"outline\"\n                            x={roundForSvg(labelX)}\n                            y={roundForSvg(labelBottom)}\n                        >\n                            {minLabel}\n                        </text>\n                        <text\n                            x={roundForSvg(labelX)}\n                            y={roundForSvg(labelBottom)}\n                        >\n                            {minLabel}\n                        </text>\n                    </g>\n                </svg>\n            </div>\n        )\n    }\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    FooterItem,\n    TooltipFadeMode,\n    TooltipFooterIcon,\n} from \"../tooltip/TooltipProps.js\"\nimport {\n    Tooltip,\n    TooltipValue,\n    makeTooltipToleranceNotice,\n    makeTooltipRoundingNotice,\n    TooltipValueRange,\n    formatTooltipRangeValues,\n    NO_DATA_COLOR,\n} from \"../tooltip/Tooltip\"\nimport { MapChartManager, MapColumnInfo } from \"./MapChartConstants\"\nimport { ColorScale, INAPPLICABLE_LABEL } from \"../color/ColorScale\"\nimport {\n    Time,\n    EntityName,\n    OwidVariableRow,\n    AxisConfigInterface,\n    ColumnSlug,\n    PrimitiveType,\n} from \"@ourworldindata/types\"\nimport { CoreColumn, OwidTable } from \"@ourworldindata/core-table\"\nimport {\n    calculateTrendDirection,\n    excludeUndefined,\n    PointVector,\n} from \"@ourworldindata/utils\"\nimport { darkenColorForHighContrastText } from \"../color/ColorUtils\"\nimport { MapSparkline, MapSparklineManager } from \"./MapSparkline.js\"\nimport { match } from \"ts-pattern\"\nimport { MapFormatValueForTooltip } from \"./MapChartState.js\"\n\ninterface MapTooltipProps {\n    id: number\n    entityName: EntityName\n    manager: MapChartManager\n    mapColumnSlug: ColumnSlug\n    mapColumnInfo: MapColumnInfo\n    position?: PointVector\n    lineColorScale: ColorScale\n    timeSeriesTable: OwidTable\n    targetTime?: Time // show tooltip values for a specific point in time\n    targetTimes?: [Time, Time] // show tooltip values for a specific time range (start and end times)\n    inapplicableEntityNamesSet?: Set<EntityName>\n    sparklineWidth?: number\n    sparklineHeight?: number\n    fading?: TooltipFadeMode\n    dismissTooltip?: () => void\n    formatValueForTooltip: MapFormatValueForTooltip\n}\n\n@observer\nexport class MapTooltip\n    extends React.Component<MapTooltipProps>\n    implements MapSparklineManager\n{\n    constructor(props: MapTooltipProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get mapColumnSlug(): ColumnSlug {\n        return this.props.mapColumnSlug\n    }\n\n    @computed get mapColumnInfo(): MapColumnInfo {\n        return this.props.mapColumnInfo\n    }\n\n    @computed private get mapColumn(): CoreColumn {\n        return this.entityTable.get(this.mapColumnSlug)\n    }\n\n    @computed get formatValueForTooltip(): MapFormatValueForTooltip {\n        return this.props.formatValueForTooltip\n    }\n\n    @computed get mapAndYColumnAreTheSame(): boolean {\n        const { mapColumnSlug } = this\n        const { yColumnSlug, yColumnSlugs } = this.props.manager\n        return yColumnSlugs\n            ? yColumnSlugs.includes(mapColumnSlug)\n            : yColumnSlug === mapColumnSlug\n    }\n\n    @computed get entityName(): EntityName {\n        return this.props.entityName\n    }\n\n    @computed get isInapplicableEntity(): boolean {\n        return (\n            this.props.inapplicableEntityNamesSet?.has(this.entityName) ?? false\n        )\n    }\n\n    @computed get inapplicableValueLabel(): string {\n        // If the custom label for \"Not applicable\" matches the current entity\n        // name, use the default \"Not applicable\" text to avoid spelling the\n        // entity name twice (once in the tooltip title, once in the value line)\n        const label = this.lineColorScale.inapplicableLabel\n        return label === this.entityName ? INAPPLICABLE_LABEL : label\n    }\n\n    @computed private get shouldShowValueRange(): boolean {\n        return (\n            this.props.targetTimes !== undefined &&\n            // If both values are missing, we simply show a 'No data' tooltip\n            (this.startDatum?.value !== undefined ||\n                this.endDatum?.value !== undefined)\n        )\n    }\n\n    @computed private get startTime(): Time | undefined {\n        return this.props.targetTimes?.[0]\n    }\n\n    @computed private get endTime(): Time | undefined {\n        return this.props.targetTimes?.[1] ?? this.props.targetTime\n    }\n\n    // Table pre-filtered by targetTime, excludes time series\n    @computed private get entityTable(): OwidTable {\n        const table =\n            this.props.manager.transformedTable ?? this.props.manager.table\n        return table.filterByEntityNames([this.entityName])\n    }\n\n    @computed get timeSeriesTable(): OwidTable {\n        return this.props.timeSeriesTable\n    }\n\n    @computed private get startDatum():\n        | OwidVariableRow<number | string>\n        | undefined {\n        if (this.startTime === undefined) return undefined\n        return this.mapColumn.owidRowByEntityNameAndTime\n            .get(this.entityName)\n            ?.get(this.startTime)\n    }\n\n    @computed private get endDatum():\n        | OwidVariableRow<number | string>\n        | undefined {\n        if (this.endTime === undefined) return undefined\n        return this.mapColumn.owidRowByEntityNameAndTime\n            .get(this.entityName)\n            ?.get(this.endTime)\n    }\n\n    @computed\n    private get formattedStartValue():\n        | ReturnType<MapFormatValueForTooltip>\n        | undefined {\n        if (!this.startDatum) return undefined\n        return this.formatValueForTooltip(this.startDatum.value)\n    }\n\n    @computed\n    private get formattedEndValue():\n        | ReturnType<MapFormatValueForTooltip>\n        | undefined {\n        if (!this.endDatum) return undefined\n        return this.formatValueForTooltip(this.endDatum.value)\n    }\n\n    @computed get highlightedTimesInSparkline(): Time[] | undefined {\n        if (this.props.targetTimes) {\n            return [\n                this.startDatum?.originalTime ?? this.props.targetTimes[0],\n                this.endDatum?.originalTime ?? this.props.targetTimes[1],\n            ]\n        }\n\n        if (this.props.targetTime !== undefined)\n            return [this.endDatum?.originalTime ?? this.props.targetTime]\n\n        return []\n    }\n\n    @computed private get isProjection(): boolean {\n        return match(this.mapColumnInfo)\n            .with({ type: \"historical\" }, () => false)\n            .with({ type: \"projected\" }, () => true)\n            .with(\n                { type: \"historical+projected\" },\n                (info) =>\n                    this.entityTable.get(info.slugForIsProjectionColumn)\n                        .owidRows[0]?.value\n            )\n            .exhaustive()\n    }\n\n    @computed get lineColorScale(): ColorScale {\n        return this.props.lineColorScale\n    }\n\n    @computed get yAxisConfig(): AxisConfigInterface | undefined {\n        return this.props.manager.yAxisConfig\n    }\n\n    private formatTime(time?: Time): string | undefined {\n        if (time === undefined) return undefined\n\n        if (!this.entityTable.timeColumn.isMissing)\n            return this.entityTable.timeColumn.formatValue(time)\n\n        return time?.toString()\n    }\n\n    @computed private get tooltipSubtitle(): string | undefined {\n        const { startDatum, endDatum, startTime, endTime } = this\n        const { timeColumn } = this.entityTable\n\n        // Not-applicable entities' values are time-invariant,\n        // so showing a time would be misleading\n        if (this.isInapplicableEntity) return undefined\n\n        const originalStartTime = startDatum?.originalTime ?? startTime\n        const originalEndTime = endDatum?.originalTime ?? endTime\n\n        if (this.shouldShowValueRange) {\n            if (\n                originalStartTime === undefined ||\n                originalEndTime === undefined\n            )\n                return undefined\n\n            return timeColumn.formatTimeComparison(\n                originalStartTime,\n                originalEndTime\n            )\n        }\n\n        return this.formatTime(originalEndTime)\n    }\n\n    @computed private get toleranceNotice(): FooterItem | undefined {\n        const { startDatum, startTime, endDatum, endTime } = this\n\n        const interpolated = excludeUndefined([\n            startDatum && startDatum.originalTime !== startTime\n                ? { target: startTime, original: startDatum.originalTime }\n                : undefined,\n            endDatum && endDatum.originalTime !== endTime\n                ? { target: endTime, original: endDatum.originalTime }\n                : undefined,\n        ])\n\n        if (interpolated.length === 0) return undefined\n\n        const formatTimes = (times: (Time | undefined)[]): string =>\n            excludeUndefined(times.map((time) => this.formatTime(time))).join(\n                \" and \"\n            )\n\n        const targetTimes = formatTimes(interpolated.map((i) => i.target))\n        if (!targetTimes) return undefined\n\n        // The subtitle shows the original time of each value. Naming the\n        // original time here only helps if the subtitle mixes a target time with\n        // an original time, i.e. if a value range is shown and only one of the\n        // two values was interpolated.\n        const originalTime =\n            this.shouldShowValueRange && interpolated.length === 1\n                ? this.formatTime(interpolated[0].original)\n                : undefined\n\n        return {\n            icon: TooltipFooterIcon.Notice,\n            text: makeTooltipToleranceNotice(targetTimes, {\n                plural: interpolated.length > 1,\n                originalTime,\n            }),\n        }\n    }\n\n    @computed private get roundingNotice(): FooterItem | undefined {\n        const { mapColumn } = this\n\n        // Only show a rounding notice for rounding to sig figs\n        if (!mapColumn.roundsToSignificantFigures) return undefined\n\n        // Don't show a rounding notice if all values are missing\n        if (!this.startDatum && !this.endDatum) return undefined\n\n        // Don't show a rounding notice if both values are formatted as category strings\n        if (\n            this.formattedStartValue?.isCategorical &&\n            this.formattedEndValue?.isCategorical\n        )\n            return undefined\n\n        return {\n            icon: TooltipFooterIcon.None,\n            text: makeTooltipRoundingNotice([mapColumn.numSignificantFigures], {\n                plural: this.shouldShowValueRange,\n            }),\n        }\n    }\n\n    override render(): React.ReactElement {\n        const {\n            mapColumn,\n            startDatum,\n            endDatum,\n            entityName,\n            isProjection,\n            lineColorScale: colorScale,\n        } = this\n        const { position, fading } = this.props\n\n        const footer = excludeUndefined([\n            this.toleranceNotice,\n            this.roundingNotice,\n        ])\n\n        return (\n            <Tooltip\n                id={this.props.id}\n                tooltipManager={this.props.manager}\n                x={position?.x}\n                y={position?.y}\n                style={{ maxWidth: \"250px\" }}\n                offsetX={20}\n                offsetY={-16}\n                offsetYDirection={\"downward\"}\n                title={entityName}\n                subtitle={this.tooltipSubtitle}\n                subtitleFormat={this.toleranceNotice ? \"notice\" : undefined}\n                footer={footer}\n                dissolve={fading}\n                dismiss={this.props.dismissTooltip}\n            >\n                {this.shouldShowValueRange ? (\n                    <MapTooltipRangeValues\n                        mapColumn={mapColumn}\n                        startDatum={startDatum}\n                        endDatum={endDatum}\n                        formattedStartValue={this.formattedStartValue}\n                        formattedEndValue={this.formattedEndValue}\n                        colorScale={colorScale}\n                    />\n                ) : (\n                    <MapTooltipValue\n                        mapColumn={mapColumn}\n                        datum={endDatum}\n                        formattedValue={\n                            this.isInapplicableEntity\n                                ? this.inapplicableValueLabel\n                                : this.formattedEndValue?.label\n                        }\n                        colorScale={colorScale}\n                        isProjection={isProjection}\n                        isInapplicable={this.isInapplicableEntity}\n                    />\n                )}\n                <MapSparkline\n                    manager={this}\n                    sparklineWidth={this.props.sparklineWidth}\n                    sparklineHeight={this.props.sparklineHeight}\n                />\n            </Tooltip>\n        )\n    }\n}\n\nfunction MapTooltipValue({\n    mapColumn,\n    datum,\n    formattedValue,\n    colorScale,\n    isProjection = false,\n    isInapplicable = false,\n}: {\n    mapColumn: CoreColumn\n    datum?: OwidVariableRow<number | string>\n    formattedValue?: string\n    colorScale: ColorScale\n    isProjection?: boolean\n    isInapplicable?: boolean\n}): React.ReactElement {\n    const color = isInapplicable\n        ? darkenColorForHighContrastText(colorScale.inapplicableColor)\n        : makeTextColorForValue(datum?.value, { colorScale })\n\n    return (\n        <TooltipValue\n            label={mapColumn.displayName}\n            unit={isInapplicable ? undefined : mapColumn.displayUnit}\n            value={formattedValue}\n            color={color}\n            isProjection={!isInapplicable && isProjection}\n            labelVariant=\"unit-only\"\n            noDataLabel={colorScale.noDataLabel}\n        />\n    )\n}\n\nfunction MapTooltipRangeValues({\n    mapColumn,\n    startDatum,\n    endDatum,\n    formattedStartValue,\n    formattedEndValue,\n    colorScale,\n}: {\n    mapColumn: CoreColumn\n    startDatum?: OwidVariableRow<number | string>\n    endDatum?: OwidVariableRow<number | string>\n    formattedStartValue?: ReturnType<MapFormatValueForTooltip>\n    formattedEndValue?: ReturnType<MapFormatValueForTooltip>\n    colorScale: ColorScale\n}): React.ReactElement {\n    const hasCategoricalValueLabels =\n        formattedStartValue?.isCategorical || formattedEndValue?.isCategorical\n\n    const colors = [\n        makeTextColorForValue(startDatum?.value, { colorScale }),\n        makeTextColorForValue(endDatum?.value, { colorScale }),\n    ]\n\n    const values = hasCategoricalValueLabels\n        ? [formattedStartValue?.label, formattedEndValue?.label]\n        : [startDatum?.value, endDatum?.value]\n\n    return (\n        <TooltipValueRange\n            label={mapColumn.displayName}\n            unit={mapColumn.displayUnit}\n            values={formatTooltipRangeValues(\n                values,\n                mapColumn,\n                colorScale.noDataLabel\n            )}\n            colors={colors}\n            trend={\n                calculateTrendDirection(values[0], values[1], (value) =>\n                    mapColumn.formatValueShort(value)\n                ) ?? \"right\"\n            }\n            labelVariant=\"unit-only\"\n        />\n    )\n}\n\nfunction makeTextColorForValue(\n    value: PrimitiveType | undefined,\n    { colorScale }: { colorScale: ColorScale }\n): string {\n    if (value === undefined) return NO_DATA_COLOR\n    return darkenColorForHighContrastText(colorScale.getColor(value) ?? \"#333\")\n}\n","// From https://github.com/emeeks/d3-bboxCollide\n// Copy-pasted instead of relying on the distribution since the code hasn't\n// been touched in years and relies on an old version of d3-quadtree\n\nimport { quadtree } from \"d3-quadtree\"\n\nexport default function (bbox) {\n    function x(d) {\n        return d.x + d.vx\n    }\n\n    function y(d) {\n        return d.y + d.vy\n    }\n\n    function constant(x) {\n        return function () {\n            return x\n        }\n    }\n\n    var nodes,\n        boundingBoxes,\n        strength = 1,\n        iterations = 1\n\n    if (typeof bbox !== \"function\") {\n        bbox = constant(bbox === null ? [[0, 0][(1, 1)]] : bbox)\n    }\n\n    function force() {\n        var i, tree, node, xi, yi, bbi, nx1, ny1, nx2, ny2\n\n        var cornerNodes = []\n        nodes.forEach(function (d, i) {\n            cornerNodes.push({\n                node: d,\n                vx: d.vx,\n                vy: d.vy,\n                x: d.x + (boundingBoxes[i][1][0] + boundingBoxes[i][0][0]) / 2,\n                y: d.y + (boundingBoxes[i][0][1] + boundingBoxes[i][1][1]) / 2,\n            })\n            cornerNodes.push({\n                node: d,\n                vx: d.vx,\n                vy: d.vy,\n                x: d.x + boundingBoxes[i][0][0],\n                y: d.y + boundingBoxes[i][0][1],\n            })\n            cornerNodes.push({\n                node: d,\n                vx: d.vx,\n                vy: d.vy,\n                x: d.x + boundingBoxes[i][0][0],\n                y: d.y + boundingBoxes[i][1][1],\n            })\n            cornerNodes.push({\n                node: d,\n                vx: d.vx,\n                vy: d.vy,\n                x: d.x + boundingBoxes[i][1][0],\n                y: d.y + boundingBoxes[i][0][1],\n            })\n            cornerNodes.push({\n                node: d,\n                vx: d.vx,\n                vy: d.vy,\n                x: d.x + boundingBoxes[i][1][0],\n                y: d.y + boundingBoxes[i][1][1],\n            })\n        })\n        var cn = cornerNodes.length\n\n        for (var k = 0; k < iterations; ++k) {\n            tree = quadtree(cornerNodes, x, y).visitAfter(prepareCorners)\n\n            for (i = 0; i < cn; ++i) {\n                var nodeI = ~~(i / 5)\n                node = nodes[nodeI]\n                bbi = boundingBoxes[nodeI]\n                xi = node.x + node.vx\n                yi = node.y + node.vy\n                nx1 = xi + bbi[0][0]\n                ny1 = yi + bbi[0][1]\n                nx2 = xi + bbi[1][0]\n                ny2 = yi + bbi[1][1]\n                tree.visit(apply)\n            }\n        }\n\n        function apply(quad, x0, y0, x1, y1) {\n            var data = quad.data\n            if (data) {\n                var bWidth = bbLength(bbi, 0),\n                    bHeight = bbLength(bbi, 1)\n\n                if (data.node.index !== nodeI) {\n                    var dataNode = data.node\n                    var bbj = boundingBoxes[dataNode.index],\n                        dnx1 = dataNode.x + dataNode.vx + bbj[0][0],\n                        dny1 = dataNode.y + dataNode.vy + bbj[0][1],\n                        dnx2 = dataNode.x + dataNode.vx + bbj[1][0],\n                        dny2 = dataNode.y + dataNode.vy + bbj[1][1],\n                        dWidth = bbLength(bbj, 0),\n                        dHeight = bbLength(bbj, 1)\n\n                    if (\n                        nx1 <= dnx2 &&\n                        dnx1 <= nx2 &&\n                        ny1 <= dny2 &&\n                        dny1 <= ny2\n                    ) {\n                        var xSize = [\n                            Math.min.apply(null, [dnx1, dnx2, nx1, nx2]),\n                            Math.max.apply(null, [dnx1, dnx2, nx1, nx2]),\n                        ]\n                        var ySize = [\n                            Math.min.apply(null, [dny1, dny2, ny1, ny2]),\n                            Math.max.apply(null, [dny1, dny2, ny1, ny2]),\n                        ]\n\n                        var xOverlap = bWidth + dWidth - (xSize[1] - xSize[0])\n                        var yOverlap = bHeight + dHeight - (ySize[1] - ySize[0])\n\n                        var xBPush = xOverlap * strength * (yOverlap / bHeight)\n                        var yBPush = yOverlap * strength * (xOverlap / bWidth)\n\n                        var xDPush = xOverlap * strength * (yOverlap / dHeight)\n                        var yDPush = yOverlap * strength * (xOverlap / dWidth)\n\n                        if ((nx1 + nx2) / 2 < (dnx1 + dnx2) / 2) {\n                            node.vx -= xBPush\n                            dataNode.vx += xDPush\n                        } else {\n                            node.vx += xBPush\n                            dataNode.vx -= xDPush\n                        }\n                        if ((ny1 + ny2) / 2 < (dny1 + dny2) / 2) {\n                            node.vy -= yBPush\n                            dataNode.vy += yDPush\n                        } else {\n                            node.vy += yBPush\n                            dataNode.vy -= yDPush\n                        }\n                    }\n                }\n                return\n            }\n\n            return x0 > nx2 || x1 < nx1 || y0 > ny2 || y1 < ny1\n        }\n    }\n\n    function prepareCorners(quad) {\n        if (quad.data) {\n            return (quad.bb = boundingBoxes[quad.data.node.index])\n        }\n        quad.bb = [\n            [0, 0],\n            [0, 0],\n        ]\n        for (var i = 0; i < 4; ++i) {\n            if (quad[i] && quad[i].bb[0][0] < quad.bb[0][0]) {\n                quad.bb[0][0] = quad[i].bb[0][0]\n            }\n            if (quad[i] && quad[i].bb[0][1] < quad.bb[0][1]) {\n                quad.bb[0][1] = quad[i].bb[0][1]\n            }\n            if (quad[i] && quad[i].bb[1][0] > quad.bb[1][0]) {\n                quad.bb[1][0] = quad[i].bb[1][0]\n            }\n            if (quad[i] && quad[i].bb[1][1] > quad.bb[1][1]) {\n                quad.bb[1][1] = quad[i].bb[1][1]\n            }\n        }\n    }\n\n    function bbLength(bbox, heightWidth) {\n        return bbox[1][heightWidth] - bbox[0][heightWidth]\n    }\n\n    force.initialize = function (_) {\n        var i,\n            n = (nodes = _).length\n        boundingBoxes = new Array(n)\n        for (i = 0; i < n; ++i) boundingBoxes[i] = bbox(nodes[i], i, nodes)\n    }\n\n    force.iterations = function (_) {\n        return arguments.length ? ((iterations = +_), force) : iterations\n    }\n\n    force.strength = function (_) {\n        return arguments.length ? ((strength = +_), force) : strength\n    }\n\n    force.bbox = function (_) {\n        return arguments.length\n            ? ((bbox = typeof _ === \"function\" ? _ : constant(+_)), force)\n            : bbox\n    }\n\n    return force\n}\n","import { orient2d } from 'robust-predicates';\n\nfunction pointInPolygon(p, polygon) {\n    var i;\n    var ii;\n    var k = 0;\n    var f;\n    var u1;\n    var v1;\n    var u2;\n    var v2;\n    var currentP;\n    var nextP;\n\n    var x = p[0];\n    var y = p[1];\n\n    var numContours = polygon.length;\n    for (i = 0; i < numContours; i++) {\n        ii = 0;\n        var contour = polygon[i];\n        var contourLen = contour.length - 1;\n\n        currentP = contour[0];\n        if (currentP[0] !== contour[contourLen][0] &&\n            currentP[1] !== contour[contourLen][1]) {\n            throw new Error('First and last coordinates in a ring must be the same')\n        }\n\n        u1 = currentP[0] - x;\n        v1 = currentP[1] - y;\n\n        for (ii; ii < contourLen; ii++) {\n            nextP = contour[ii + 1];\n\n            u2 = nextP[0] - x;\n            v2 = nextP[1] - y;\n\n            if (v1 === 0 && v2 === 0) {\n                if ((u2 <= 0 && u1 >= 0) || (u1 <= 0 && u2 >= 0)) { return 0 }\n            } else if ((v2 >= 0 && v1 <= 0) || (v2 <= 0 && v1 >= 0)) {\n                f = orient2d(u1, u2, v1, v2, 0, 0);\n                if (f === 0) { return 0 }\n                if ((f > 0 && v2 > 0 && v1 <= 0) || (f < 0 && v2 <= 0 && v1 > 0)) { k++; }\n            }\n            currentP = nextP;\n            v1 = v2;\n            u1 = u2;\n        }\n    }\n\n    if (k % 2 === 0) { return false }\n    return true\n}\n\nexport { pointInPolygon as default };\n","// index.ts\nvar earthRadius = 63710088e-1;\nvar factors = {\n  centimeters: earthRadius * 100,\n  centimetres: earthRadius * 100,\n  degrees: 360 / (2 * Math.PI),\n  feet: earthRadius * 3.28084,\n  inches: earthRadius * 39.37,\n  kilometers: earthRadius / 1e3,\n  kilometres: earthRadius / 1e3,\n  meters: earthRadius,\n  metres: earthRadius,\n  miles: earthRadius / 1609.344,\n  millimeters: earthRadius * 1e3,\n  millimetres: earthRadius * 1e3,\n  nauticalmiles: earthRadius / 1852,\n  radians: 1,\n  yards: earthRadius * 1.0936\n};\nvar areaFactors = {\n  acres: 247105e-9,\n  centimeters: 1e4,\n  centimetres: 1e4,\n  feet: 10.763910417,\n  hectares: 1e-4,\n  inches: 1550.003100006,\n  kilometers: 1e-6,\n  kilometres: 1e-6,\n  meters: 1,\n  metres: 1,\n  miles: 386e-9,\n  nauticalmiles: 29155334959812285e-23,\n  millimeters: 1e6,\n  millimetres: 1e6,\n  yards: 1.195990046\n};\nfunction feature(geom, properties, options = {}) {\n  const feat = { type: \"Feature\" };\n  if (options.id === 0 || options.id) {\n    feat.id = options.id;\n  }\n  if (options.bbox) {\n    feat.bbox = options.bbox;\n  }\n  feat.properties = properties || {};\n  feat.geometry = geom;\n  return feat;\n}\nfunction geometry(type, coordinates, _options = {}) {\n  switch (type) {\n    case \"Point\":\n      return point(coordinates).geometry;\n    case \"LineString\":\n      return lineString(coordinates).geometry;\n    case \"Polygon\":\n      return polygon(coordinates).geometry;\n    case \"MultiPoint\":\n      return multiPoint(coordinates).geometry;\n    case \"MultiLineString\":\n      return multiLineString(coordinates).geometry;\n    case \"MultiPolygon\":\n      return multiPolygon(coordinates).geometry;\n    default:\n      throw new Error(type + \" is invalid\");\n  }\n}\nfunction point(coordinates, properties, options = {}) {\n  if (!coordinates) {\n    throw new Error(\"coordinates is required\");\n  }\n  if (!Array.isArray(coordinates)) {\n    throw new Error(\"coordinates must be an Array\");\n  }\n  if (coordinates.length < 2) {\n    throw new Error(\"coordinates must be at least 2 numbers long\");\n  }\n  if (!isNumber(coordinates[0]) || !isNumber(coordinates[1])) {\n    throw new Error(\"coordinates must contain numbers\");\n  }\n  const geom = {\n    type: \"Point\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction points(coordinates, properties, options = {}) {\n  return featureCollection(\n    coordinates.map((coords) => {\n      return point(coords, properties);\n    }),\n    options\n  );\n}\nfunction polygon(coordinates, properties, options = {}) {\n  for (const ring of coordinates) {\n    if (ring.length < 4) {\n      throw new Error(\n        \"Each LinearRing of a Polygon must have 4 or more Positions.\"\n      );\n    }\n    if (ring[ring.length - 1].length !== ring[0].length) {\n      throw new Error(\"First and last Position are not equivalent.\");\n    }\n    for (let j = 0; j < ring[ring.length - 1].length; j++) {\n      if (ring[ring.length - 1][j] !== ring[0][j]) {\n        throw new Error(\"First and last Position are not equivalent.\");\n      }\n    }\n  }\n  const geom = {\n    type: \"Polygon\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction polygons(coordinates, properties, options = {}) {\n  return featureCollection(\n    coordinates.map((coords) => {\n      return polygon(coords, properties);\n    }),\n    options\n  );\n}\nfunction lineString(coordinates, properties, options = {}) {\n  if (coordinates.length < 2) {\n    throw new Error(\"coordinates must be an array of two or more positions\");\n  }\n  const geom = {\n    type: \"LineString\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction lineStrings(coordinates, properties, options = {}) {\n  return featureCollection(\n    coordinates.map((coords) => {\n      return lineString(coords, properties);\n    }),\n    options\n  );\n}\nfunction featureCollection(features, options = {}) {\n  const fc = { type: \"FeatureCollection\" };\n  if (options.id) {\n    fc.id = options.id;\n  }\n  if (options.bbox) {\n    fc.bbox = options.bbox;\n  }\n  fc.features = features;\n  return fc;\n}\nfunction multiLineString(coordinates, properties, options = {}) {\n  const geom = {\n    type: \"MultiLineString\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction multiPoint(coordinates, properties, options = {}) {\n  const geom = {\n    type: \"MultiPoint\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction multiPolygon(coordinates, properties, options = {}) {\n  const geom = {\n    type: \"MultiPolygon\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction geometryCollection(geometries, properties, options = {}) {\n  const geom = {\n    type: \"GeometryCollection\",\n    geometries\n  };\n  return feature(geom, properties, options);\n}\nfunction round(num, precision = 0) {\n  if (precision && !(precision >= 0)) {\n    throw new Error(\"precision must be a positive number\");\n  }\n  const multiplier = Math.pow(10, precision || 0);\n  return Math.round(num * multiplier) / multiplier;\n}\nfunction radiansToLength(radians, units = \"kilometers\") {\n  const factor = factors[units];\n  if (!factor) {\n    throw new Error(units + \" units is invalid\");\n  }\n  return radians * factor;\n}\nfunction lengthToRadians(distance, units = \"kilometers\") {\n  const factor = factors[units];\n  if (!factor) {\n    throw new Error(units + \" units is invalid\");\n  }\n  return distance / factor;\n}\nfunction lengthToDegrees(distance, units) {\n  return radiansToDegrees(lengthToRadians(distance, units));\n}\nfunction bearingToAzimuth(bearing) {\n  let angle = bearing % 360;\n  if (angle < 0) {\n    angle += 360;\n  }\n  return angle;\n}\nfunction azimuthToBearing(angle) {\n  angle = angle % 360;\n  if (angle > 180) {\n    return angle - 360;\n  } else if (angle < -180) {\n    return angle + 360;\n  }\n  return angle;\n}\nfunction radiansToDegrees(radians) {\n  const normalisedRadians = radians % (2 * Math.PI);\n  return normalisedRadians * 180 / Math.PI;\n}\nfunction degreesToRadians(degrees) {\n  const normalisedDegrees = degrees % 360;\n  return normalisedDegrees * Math.PI / 180;\n}\nfunction convertLength(length, originalUnit = \"kilometers\", finalUnit = \"kilometers\") {\n  if (!(length >= 0)) {\n    throw new Error(\"length must be a positive number\");\n  }\n  return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);\n}\nfunction convertArea(area, originalUnit = \"meters\", finalUnit = \"kilometers\") {\n  if (!(area >= 0)) {\n    throw new Error(\"area must be a positive number\");\n  }\n  const startFactor = areaFactors[originalUnit];\n  if (!startFactor) {\n    throw new Error(\"invalid original units\");\n  }\n  const finalFactor = areaFactors[finalUnit];\n  if (!finalFactor) {\n    throw new Error(\"invalid final units\");\n  }\n  return area / startFactor * finalFactor;\n}\nfunction isNumber(num) {\n  return !isNaN(num) && num !== null && !Array.isArray(num);\n}\nfunction isObject(input) {\n  return input !== null && typeof input === \"object\" && !Array.isArray(input);\n}\nfunction validateBBox(bbox) {\n  if (!bbox) {\n    throw new Error(\"bbox is required\");\n  }\n  if (!Array.isArray(bbox)) {\n    throw new Error(\"bbox must be an Array\");\n  }\n  if (bbox.length !== 4 && bbox.length !== 6) {\n    throw new Error(\"bbox must be an Array of 4 or 6 numbers\");\n  }\n  bbox.forEach((num) => {\n    if (!isNumber(num)) {\n      throw new Error(\"bbox must only contain numbers\");\n    }\n  });\n}\nfunction validateId(id) {\n  if (!id) {\n    throw new Error(\"id is required\");\n  }\n  if ([\"string\", \"number\"].indexOf(typeof id) === -1) {\n    throw new Error(\"id must be a number or a string\");\n  }\n}\nexport {\n  areaFactors,\n  azimuthToBearing,\n  bearingToAzimuth,\n  convertArea,\n  convertLength,\n  degreesToRadians,\n  earthRadius,\n  factors,\n  feature,\n  featureCollection,\n  geometry,\n  geometryCollection,\n  isNumber,\n  isObject,\n  lengthToDegrees,\n  lengthToRadians,\n  lineString,\n  lineStrings,\n  multiLineString,\n  multiPoint,\n  multiPolygon,\n  point,\n  points,\n  polygon,\n  polygons,\n  radiansToDegrees,\n  radiansToLength,\n  round,\n  validateBBox,\n  validateId\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { isNumber } from \"@turf/helpers\";\nfunction getCoord(coord) {\n  if (!coord) {\n    throw new Error(\"coord is required\");\n  }\n  if (!Array.isArray(coord)) {\n    if (coord.type === \"Feature\" && coord.geometry !== null && coord.geometry.type === \"Point\") {\n      return [...coord.geometry.coordinates];\n    }\n    if (coord.type === \"Point\") {\n      return [...coord.coordinates];\n    }\n  }\n  if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) {\n    return [...coord];\n  }\n  throw new Error(\"coord must be GeoJSON Point or an Array of numbers\");\n}\nfunction getCoords(coords) {\n  if (Array.isArray(coords)) {\n    return coords;\n  }\n  if (coords.type === \"Feature\") {\n    if (coords.geometry !== null) {\n      return coords.geometry.coordinates;\n    }\n  } else {\n    if (coords.coordinates) {\n      return coords.coordinates;\n    }\n  }\n  throw new Error(\n    \"coords must be GeoJSON Feature, Geometry Object or an Array\"\n  );\n}\nfunction containsNumber(coordinates) {\n  if (coordinates.length > 1 && isNumber(coordinates[0]) && isNumber(coordinates[1])) {\n    return true;\n  }\n  if (Array.isArray(coordinates[0]) && coordinates[0].length) {\n    return containsNumber(coordinates[0]);\n  }\n  throw new Error(\"coordinates must only contain numbers\");\n}\nfunction geojsonType(value, type, name) {\n  if (!type || !name) {\n    throw new Error(\"type and name required\");\n  }\n  if (!value || value.type !== type) {\n    throw new Error(\n      \"Invalid input to \" + name + \": must be a \" + type + \", given \" + value.type\n    );\n  }\n}\nfunction featureOf(feature, type, name) {\n  if (!feature) {\n    throw new Error(\"No feature passed\");\n  }\n  if (!name) {\n    throw new Error(\".featureOf() requires a name\");\n  }\n  if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n    throw new Error(\n      \"Invalid input to \" + name + \", Feature with geometry required\"\n    );\n  }\n  if (!feature.geometry || feature.geometry.type !== type) {\n    throw new Error(\n      \"Invalid input to \" + name + \": must be a \" + type + \", given \" + feature.geometry.type\n    );\n  }\n}\nfunction collectionOf(featureCollection, type, name) {\n  if (!featureCollection) {\n    throw new Error(\"No featureCollection passed\");\n  }\n  if (!name) {\n    throw new Error(\".collectionOf() requires a name\");\n  }\n  if (!featureCollection || featureCollection.type !== \"FeatureCollection\") {\n    throw new Error(\n      \"Invalid input to \" + name + \", FeatureCollection required\"\n    );\n  }\n  for (const feature of featureCollection.features) {\n    if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n      throw new Error(\n        \"Invalid input to \" + name + \", Feature with geometry required\"\n      );\n    }\n    if (!feature.geometry || feature.geometry.type !== type) {\n      throw new Error(\n        \"Invalid input to \" + name + \": must be a \" + type + \", given \" + feature.geometry.type\n      );\n    }\n  }\n}\nfunction getGeom(geojson) {\n  if (geojson.type === \"Feature\") {\n    return geojson.geometry;\n  }\n  return geojson;\n}\nfunction getType(geojson, _name) {\n  if (geojson.type === \"FeatureCollection\") {\n    return \"FeatureCollection\";\n  }\n  if (geojson.type === \"GeometryCollection\") {\n    return \"GeometryCollection\";\n  }\n  if (geojson.type === \"Feature\" && geojson.geometry !== null) {\n    return geojson.geometry.type;\n  }\n  return geojson.type;\n}\nexport {\n  collectionOf,\n  containsNumber,\n  featureOf,\n  geojsonType,\n  getCoord,\n  getCoords,\n  getGeom,\n  getType\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport pip from \"point-in-polygon-hao\";\nimport { getCoord, getGeom } from \"@turf/invariant\";\nfunction booleanPointInPolygon(point, polygon, options = {}) {\n  if (!point) {\n    throw new Error(\"point is required\");\n  }\n  if (!polygon) {\n    throw new Error(\"polygon is required\");\n  }\n  const pt = getCoord(point);\n  const geom = getGeom(polygon);\n  const type = geom.type;\n  const bbox = polygon.bbox;\n  let polys = geom.coordinates;\n  if (bbox && inBBox(pt, bbox) === false) {\n    return false;\n  }\n  if (type === \"Polygon\") {\n    polys = [polys];\n  }\n  let result = false;\n  for (var i = 0; i < polys.length; ++i) {\n    const polyResult = pip(pt, polys[i]);\n    if (polyResult === 0) return options.ignoreBoundary ? false : true;\n    else if (polyResult) result = true;\n  }\n  return result;\n}\nfunction inBBox(pt, bbox) {\n  return bbox[0] <= pt[0] && bbox[1] <= pt[1] && bbox[2] >= pt[0] && bbox[3] >= pt[1];\n}\nvar turf_boolean_point_in_polygon_default = booleanPointInPolygon;\nexport {\n  booleanPointInPolygon,\n  turf_boolean_point_in_polygon_default as default\n};\n//# sourceMappingURL=index.js.map","class TinyQueue {\n    constructor(data = [], compare = defaultCompare) {\n        this.data = data;\n        this.length = this.data.length;\n        this.compare = compare;\n\n        if (this.length > 0) {\n            for (let i = (this.length >> 1) - 1; i >= 0; i--) this._down(i);\n        }\n    }\n\n    push(item) {\n        this.data.push(item);\n        this.length++;\n        this._up(this.length - 1);\n    }\n\n    pop() {\n        if (this.length === 0) return undefined;\n\n        const top = this.data[0];\n        const bottom = this.data.pop();\n        this.length--;\n\n        if (this.length > 0) {\n            this.data[0] = bottom;\n            this._down(0);\n        }\n\n        return top;\n    }\n\n    peek() {\n        return this.data[0];\n    }\n\n    _up(pos) {\n        const {data, compare} = this;\n        const item = data[pos];\n\n        while (pos > 0) {\n            const parent = (pos - 1) >> 1;\n            const current = data[parent];\n            if (compare(item, current) >= 0) break;\n            data[pos] = current;\n            pos = parent;\n        }\n\n        data[pos] = item;\n    }\n\n    _down(pos) {\n        const {data, compare} = this;\n        const halfLength = this.length >> 1;\n        const item = data[pos];\n\n        while (pos < halfLength) {\n            let left = (pos << 1) + 1;\n            let best = data[left];\n            const right = left + 1;\n\n            if (right < this.length && compare(data[right], best) < 0) {\n                left = right;\n                best = data[right];\n            }\n            if (compare(best, item) >= 0) break;\n\n            data[pos] = best;\n            pos = left;\n        }\n\n        data[pos] = item;\n    }\n}\n\nfunction defaultCompare(a, b) {\n    return a < b ? -1 : a > b ? 1 : 0;\n}\n\nfunction checkWhichEventIsLeft (e1, e2) {\n    if (e1.p.x > e2.p.x) return 1\n    if (e1.p.x < e2.p.x) return -1\n\n    if (e1.p.y !== e2.p.y) return e1.p.y > e2.p.y ? 1 : -1\n    return 1\n}\n\nfunction checkWhichSegmentHasRightEndpointFirst (seg1, seg2) {\n    if (seg1.rightSweepEvent.p.x > seg2.rightSweepEvent.p.x) return 1\n    if (seg1.rightSweepEvent.p.x < seg2.rightSweepEvent.p.x) return -1\n\n    if (seg1.rightSweepEvent.p.y !== seg2.rightSweepEvent.p.y) return seg1.rightSweepEvent.p.y < seg2.rightSweepEvent.p.y ? 1 : -1\n    return 1\n}\n\nclass Event {\n\n    constructor (p, featureId, ringId, eventId) {\n        this.p = {\n            x: p[0],\n            y: p[1]\n        };\n        this.featureId = featureId;\n        this.ringId = ringId;\n        this.eventId = eventId;\n\n        this.otherEvent = null;\n        this.isLeftEndpoint = null;\n    }\n\n    isSamePoint (eventToCheck) {\n        return this.p.x === eventToCheck.p.x && this.p.y === eventToCheck.p.y\n    }\n}\n\nfunction fillEventQueue (geojson, eventQueue) {\n    if (geojson.type === 'FeatureCollection') {\n        const features = geojson.features;\n        for (let i = 0; i < features.length; i++) {\n            processFeature(features[i], eventQueue);\n        }\n    } else {\n        processFeature(geojson, eventQueue);\n    }\n}\n\nlet featureId = 0;\nlet ringId = 0;\nlet eventId = 0;\nfunction processFeature (featureOrGeometry, eventQueue) {\n    const geom = featureOrGeometry.type === 'Feature' ? featureOrGeometry.geometry : featureOrGeometry;\n    let coords = geom.coordinates;\n    // standardise the input\n    if (geom.type === 'Polygon' || geom.type === 'MultiLineString') coords = [coords];\n    if (geom.type === 'LineString') coords = [[coords]];\n\n    for (let i = 0; i < coords.length; i++) {\n        for (let ii = 0; ii < coords[i].length; ii++) {\n            let currentP = coords[i][ii][0];\n            let nextP = null;\n            ringId = ringId + 1;\n            for (let iii = 0; iii < coords[i][ii].length - 1; iii++) {\n                nextP = coords[i][ii][iii + 1];\n\n                const e1 = new Event(currentP, featureId, ringId, eventId);\n                const e2 = new Event(nextP, featureId, ringId, eventId + 1);\n\n                e1.otherEvent = e2;\n                e2.otherEvent = e1;\n\n                if (checkWhichEventIsLeft(e1, e2) > 0) {\n                    e2.isLeftEndpoint = true;\n                    e1.isLeftEndpoint = false;\n                } else {\n                    e1.isLeftEndpoint = true;\n                    e2.isLeftEndpoint = false;\n                }\n                eventQueue.push(e1);\n                eventQueue.push(e2);\n\n                currentP = nextP;\n                eventId = eventId + 1;\n            }\n        }\n    }\n    featureId = featureId + 1;\n}\n\nclass Segment {\n\n    constructor (event) {\n        this.leftSweepEvent = event;\n        this.rightSweepEvent = event.otherEvent;\n    }\n}\n\nfunction testSegmentIntersect (seg1, seg2) {\n    if (seg1 === null || seg2 === null) return false\n\n    if (seg1.leftSweepEvent.ringId === seg2.leftSweepEvent.ringId &&\n        (seg1.rightSweepEvent.isSamePoint(seg2.leftSweepEvent) ||\n        seg1.rightSweepEvent.isSamePoint(seg2.leftSweepEvent) ||\n        seg1.rightSweepEvent.isSamePoint(seg2.rightSweepEvent) ||\n        seg1.leftSweepEvent.isSamePoint(seg2.leftSweepEvent) ||\n        seg1.leftSweepEvent.isSamePoint(seg2.rightSweepEvent))) return false\n\n    const x1 = seg1.leftSweepEvent.p.x;\n    const y1 = seg1.leftSweepEvent.p.y;\n    const x2 = seg1.rightSweepEvent.p.x;\n    const y2 = seg1.rightSweepEvent.p.y;\n    const x3 = seg2.leftSweepEvent.p.x;\n    const y3 = seg2.leftSweepEvent.p.y;\n    const x4 = seg2.rightSweepEvent.p.x;\n    const y4 = seg2.rightSweepEvent.p.y;\n\n    const denom = ((y4 - y3) * (x2 - x1)) - ((x4 - x3) * (y2 - y1));\n    const numeA = ((x4 - x3) * (y1 - y3)) - ((y4 - y3) * (x1 - x3));\n    const numeB = ((x2 - x1) * (y1 - y3)) - ((y2 - y1) * (x1 - x3));\n\n    if (denom === 0) {\n        if (numeA === 0 && numeB === 0) return false\n        return false\n    }\n\n    const uA = numeA / denom;\n    const uB = numeB / denom;\n\n    if (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1) {\n        const x = x1 + (uA * (x2 - x1));\n        const y = y1 + (uA * (y2 - y1));\n        return [x, y]\n    }\n    return false\n}\n\n// import {debugEventAndSegments, debugRemovingSegment} from './debug'\n\nfunction runCheck (eventQueue, ignoreSelfIntersections) {\n    ignoreSelfIntersections = ignoreSelfIntersections ? ignoreSelfIntersections : false;\n\n    const intersectionPoints = [];\n    const outQueue = new TinyQueue([], checkWhichSegmentHasRightEndpointFirst);\n\n    while (eventQueue.length) {\n        const event = eventQueue.pop();\n        if (event.isLeftEndpoint) {\n            // debugEventAndSegments(event.p, outQueue.data)\n            const segment = new Segment(event);\n            for (let i = 0; i < outQueue.data.length; i++) {\n                const otherSeg = outQueue.data[i];\n                if (ignoreSelfIntersections) {\n                    if (otherSeg.leftSweepEvent.featureId === event.featureId) continue\n                }\n                const intersection = testSegmentIntersect(segment, otherSeg);\n                if (intersection !== false) intersectionPoints.push(intersection);\n            }\n            outQueue.push(segment);\n        } else if (event.isLeftEndpoint === false) {\n            outQueue.pop();\n            // const seg = outQueue.pop()\n            // debugRemovingSegment(event.p, seg)\n        }\n    }\n    return intersectionPoints\n}\n\nfunction sweeplineIntersections (geojson, ignoreSelfIntersections) {\n    const eventQueue = new TinyQueue([], checkWhichEventIsLeft);\n    fillEventQueue(geojson, eventQueue);\n    return runCheck(eventQueue, ignoreSelfIntersections)\n}\n\nexport default sweeplineIntersections;\n","// index.ts\nimport { feature, featureCollection, point } from \"@turf/helpers\";\n\n// lib/sweepline-intersections-export.ts\nimport lib from \"sweepline-intersections\";\nvar sweeplineIntersections = lib;\n\n// index.ts\nfunction lineIntersect(line1, line2, options = {}) {\n  const { removeDuplicates = true, ignoreSelfIntersections = true } = options;\n  let features = [];\n  if (line1.type === \"FeatureCollection\")\n    features = features.concat(line1.features);\n  else if (line1.type === \"Feature\") features.push(line1);\n  else if (line1.type === \"LineString\" || line1.type === \"Polygon\" || line1.type === \"MultiLineString\" || line1.type === \"MultiPolygon\") {\n    features.push(feature(line1));\n  }\n  if (line2.type === \"FeatureCollection\")\n    features = features.concat(line2.features);\n  else if (line2.type === \"Feature\") features.push(line2);\n  else if (line2.type === \"LineString\" || line2.type === \"Polygon\" || line2.type === \"MultiLineString\" || line2.type === \"MultiPolygon\") {\n    features.push(feature(line2));\n  }\n  const intersections = sweeplineIntersections(\n    featureCollection(features),\n    ignoreSelfIntersections\n  );\n  let results = [];\n  if (removeDuplicates) {\n    const unique = {};\n    intersections.forEach((intersection) => {\n      const key = intersection.join(\",\");\n      if (!unique[key]) {\n        unique[key] = true;\n        results.push(intersection);\n      }\n    });\n  } else {\n    results = intersections;\n  }\n  return featureCollection(results.map((r) => point(r)));\n}\nvar turf_line_intersect_default = lineIntersect;\nexport {\n  turf_line_intersect_default as default,\n  lineIntersect\n};\n//# sourceMappingURL=index.js.map","// index.js\nimport { feature, point, lineString, isObject } from \"@turf/helpers\";\nfunction coordEach(geojson, callback, excludeWrapCoord) {\n  if (geojson === null) return;\n  var j, k, l, geometry, stopG, coords, geometryMaybeCollection, wrapShrink = 0, coordIndex = 0, isGeometryCollection, type = geojson.type, isFeatureCollection = type === \"FeatureCollection\", isFeature = type === \"Feature\", stop = isFeatureCollection ? geojson.features.length : 1;\n  for (var featureIndex = 0; featureIndex < stop; featureIndex++) {\n    geometryMaybeCollection = isFeatureCollection ? geojson.features[featureIndex].geometry : isFeature ? geojson.geometry : geojson;\n    isGeometryCollection = geometryMaybeCollection ? geometryMaybeCollection.type === \"GeometryCollection\" : false;\n    stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n    for (var geomIndex = 0; geomIndex < stopG; geomIndex++) {\n      var multiFeatureIndex = 0;\n      var geometryIndex = 0;\n      geometry = isGeometryCollection ? geometryMaybeCollection.geometries[geomIndex] : geometryMaybeCollection;\n      if (geometry === null) continue;\n      coords = geometry.coordinates;\n      var geomType = geometry.type;\n      wrapShrink = excludeWrapCoord && (geomType === \"Polygon\" || geomType === \"MultiPolygon\") ? 1 : 0;\n      switch (geomType) {\n        case null:\n          break;\n        case \"Point\":\n          if (callback(\n            coords,\n            coordIndex,\n            featureIndex,\n            multiFeatureIndex,\n            geometryIndex\n          ) === false)\n            return false;\n          coordIndex++;\n          multiFeatureIndex++;\n          break;\n        case \"LineString\":\n        case \"MultiPoint\":\n          for (j = 0; j < coords.length; j++) {\n            if (callback(\n              coords[j],\n              coordIndex,\n              featureIndex,\n              multiFeatureIndex,\n              geometryIndex\n            ) === false)\n              return false;\n            coordIndex++;\n            if (geomType === \"MultiPoint\") multiFeatureIndex++;\n          }\n          if (geomType === \"LineString\") multiFeatureIndex++;\n          break;\n        case \"Polygon\":\n        case \"MultiLineString\":\n          for (j = 0; j < coords.length; j++) {\n            for (k = 0; k < coords[j].length - wrapShrink; k++) {\n              if (callback(\n                coords[j][k],\n                coordIndex,\n                featureIndex,\n                multiFeatureIndex,\n                geometryIndex\n              ) === false)\n                return false;\n              coordIndex++;\n            }\n            if (geomType === \"MultiLineString\") multiFeatureIndex++;\n            if (geomType === \"Polygon\") geometryIndex++;\n          }\n          if (geomType === \"Polygon\") multiFeatureIndex++;\n          break;\n        case \"MultiPolygon\":\n          for (j = 0; j < coords.length; j++) {\n            geometryIndex = 0;\n            for (k = 0; k < coords[j].length; k++) {\n              for (l = 0; l < coords[j][k].length - wrapShrink; l++) {\n                if (callback(\n                  coords[j][k][l],\n                  coordIndex,\n                  featureIndex,\n                  multiFeatureIndex,\n                  geometryIndex\n                ) === false)\n                  return false;\n                coordIndex++;\n              }\n              geometryIndex++;\n            }\n            multiFeatureIndex++;\n          }\n          break;\n        case \"GeometryCollection\":\n          for (j = 0; j < geometry.geometries.length; j++)\n            if (coordEach(geometry.geometries[j], callback, excludeWrapCoord) === false)\n              return false;\n          break;\n        default:\n          throw new Error(\"Unknown Geometry Type\");\n      }\n    }\n  }\n}\nfunction coordReduce(geojson, callback, initialValue, excludeWrapCoord) {\n  var previousValue = initialValue;\n  coordEach(\n    geojson,\n    function(currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n      if (coordIndex === 0 && initialValue === void 0)\n        previousValue = currentCoord;\n      else\n        previousValue = callback(\n          previousValue,\n          currentCoord,\n          coordIndex,\n          featureIndex,\n          multiFeatureIndex,\n          geometryIndex\n        );\n    },\n    excludeWrapCoord\n  );\n  return previousValue;\n}\nfunction propEach(geojson, callback) {\n  var i;\n  switch (geojson.type) {\n    case \"FeatureCollection\":\n      for (i = 0; i < geojson.features.length; i++) {\n        if (callback(geojson.features[i].properties, i) === false) break;\n      }\n      break;\n    case \"Feature\":\n      callback(geojson.properties, 0);\n      break;\n  }\n}\nfunction propReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  propEach(geojson, function(currentProperties, featureIndex) {\n    if (featureIndex === 0 && initialValue === void 0)\n      previousValue = currentProperties;\n    else\n      previousValue = callback(previousValue, currentProperties, featureIndex);\n  });\n  return previousValue;\n}\nfunction featureEach(geojson, callback) {\n  if (geojson.type === \"Feature\") {\n    callback(geojson, 0);\n  } else if (geojson.type === \"FeatureCollection\") {\n    for (var i = 0; i < geojson.features.length; i++) {\n      if (callback(geojson.features[i], i) === false) break;\n    }\n  }\n}\nfunction featureReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  featureEach(geojson, function(currentFeature, featureIndex) {\n    if (featureIndex === 0 && initialValue === void 0)\n      previousValue = currentFeature;\n    else previousValue = callback(previousValue, currentFeature, featureIndex);\n  });\n  return previousValue;\n}\nfunction coordAll(geojson) {\n  var coords = [];\n  coordEach(geojson, function(coord) {\n    coords.push(coord);\n  });\n  return coords;\n}\nfunction geomEach(geojson, callback) {\n  var i, j, g, geometry, stopG, geometryMaybeCollection, isGeometryCollection, featureProperties, featureBBox, featureId, featureIndex = 0, isFeatureCollection = geojson.type === \"FeatureCollection\", isFeature = geojson.type === \"Feature\", stop = isFeatureCollection ? geojson.features.length : 1;\n  for (i = 0; i < stop; i++) {\n    geometryMaybeCollection = isFeatureCollection ? geojson.features[i].geometry : isFeature ? geojson.geometry : geojson;\n    featureProperties = isFeatureCollection ? geojson.features[i].properties : isFeature ? geojson.properties : {};\n    featureBBox = isFeatureCollection ? geojson.features[i].bbox : isFeature ? geojson.bbox : void 0;\n    featureId = isFeatureCollection ? geojson.features[i].id : isFeature ? geojson.id : void 0;\n    isGeometryCollection = geometryMaybeCollection ? geometryMaybeCollection.type === \"GeometryCollection\" : false;\n    stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n    for (g = 0; g < stopG; g++) {\n      geometry = isGeometryCollection ? geometryMaybeCollection.geometries[g] : geometryMaybeCollection;\n      if (geometry === null) {\n        if (callback(\n          null,\n          featureIndex,\n          featureProperties,\n          featureBBox,\n          featureId\n        ) === false)\n          return false;\n        continue;\n      }\n      switch (geometry.type) {\n        case \"Point\":\n        case \"LineString\":\n        case \"MultiPoint\":\n        case \"Polygon\":\n        case \"MultiLineString\":\n        case \"MultiPolygon\": {\n          if (callback(\n            geometry,\n            featureIndex,\n            featureProperties,\n            featureBBox,\n            featureId\n          ) === false)\n            return false;\n          break;\n        }\n        case \"GeometryCollection\": {\n          for (j = 0; j < geometry.geometries.length; j++) {\n            if (callback(\n              geometry.geometries[j],\n              featureIndex,\n              featureProperties,\n              featureBBox,\n              featureId\n            ) === false)\n              return false;\n          }\n          break;\n        }\n        default:\n          throw new Error(\"Unknown Geometry Type\");\n      }\n    }\n    featureIndex++;\n  }\n}\nfunction geomReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  geomEach(\n    geojson,\n    function(currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n      if (featureIndex === 0 && initialValue === void 0)\n        previousValue = currentGeometry;\n      else\n        previousValue = callback(\n          previousValue,\n          currentGeometry,\n          featureIndex,\n          featureProperties,\n          featureBBox,\n          featureId\n        );\n    }\n  );\n  return previousValue;\n}\nfunction flattenEach(geojson, callback) {\n  geomEach(geojson, function(geometry, featureIndex, properties, bbox, id) {\n    var type = geometry === null ? null : geometry.type;\n    switch (type) {\n      case null:\n      case \"Point\":\n      case \"LineString\":\n      case \"Polygon\":\n        if (callback(\n          feature(geometry, properties, { bbox, id }),\n          featureIndex,\n          0\n        ) === false)\n          return false;\n        return;\n    }\n    var geomType;\n    switch (type) {\n      case \"MultiPoint\":\n        geomType = \"Point\";\n        break;\n      case \"MultiLineString\":\n        geomType = \"LineString\";\n        break;\n      case \"MultiPolygon\":\n        geomType = \"Polygon\";\n        break;\n    }\n    for (var multiFeatureIndex = 0; multiFeatureIndex < geometry.coordinates.length; multiFeatureIndex++) {\n      var coordinate = geometry.coordinates[multiFeatureIndex];\n      var geom = {\n        type: geomType,\n        coordinates: coordinate\n      };\n      if (callback(feature(geom, properties), featureIndex, multiFeatureIndex) === false)\n        return false;\n    }\n  });\n}\nfunction flattenReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  flattenEach(\n    geojson,\n    function(currentFeature, featureIndex, multiFeatureIndex) {\n      if (featureIndex === 0 && multiFeatureIndex === 0 && initialValue === void 0)\n        previousValue = currentFeature;\n      else\n        previousValue = callback(\n          previousValue,\n          currentFeature,\n          featureIndex,\n          multiFeatureIndex\n        );\n    }\n  );\n  return previousValue;\n}\nfunction segmentEach(geojson, callback) {\n  flattenEach(geojson, function(feature2, featureIndex, multiFeatureIndex) {\n    var segmentIndex = 0;\n    if (!feature2.geometry) return;\n    var type = feature2.geometry.type;\n    if (type === \"Point\" || type === \"MultiPoint\") return;\n    var previousCoords;\n    var previousFeatureIndex = 0;\n    var previousMultiIndex = 0;\n    var prevGeomIndex = 0;\n    if (coordEach(\n      feature2,\n      function(currentCoord, coordIndex, featureIndexCoord, multiPartIndexCoord, geometryIndex) {\n        if (previousCoords === void 0 || featureIndex > previousFeatureIndex || multiPartIndexCoord > previousMultiIndex || geometryIndex > prevGeomIndex) {\n          previousCoords = currentCoord;\n          previousFeatureIndex = featureIndex;\n          previousMultiIndex = multiPartIndexCoord;\n          prevGeomIndex = geometryIndex;\n          segmentIndex = 0;\n          return;\n        }\n        var currentSegment = lineString(\n          [previousCoords, currentCoord],\n          feature2.properties\n        );\n        if (callback(\n          currentSegment,\n          featureIndex,\n          multiFeatureIndex,\n          geometryIndex,\n          segmentIndex\n        ) === false)\n          return false;\n        segmentIndex++;\n        previousCoords = currentCoord;\n      }\n    ) === false)\n      return false;\n  });\n}\nfunction segmentReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  var started = false;\n  segmentEach(\n    geojson,\n    function(currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n      if (started === false && initialValue === void 0)\n        previousValue = currentSegment;\n      else\n        previousValue = callback(\n          previousValue,\n          currentSegment,\n          featureIndex,\n          multiFeatureIndex,\n          geometryIndex,\n          segmentIndex\n        );\n      started = true;\n    }\n  );\n  return previousValue;\n}\nfunction lineEach(geojson, callback) {\n  if (!geojson) throw new Error(\"geojson is required\");\n  flattenEach(geojson, function(feature2, featureIndex, multiFeatureIndex) {\n    if (feature2.geometry === null) return;\n    var type = feature2.geometry.type;\n    var coords = feature2.geometry.coordinates;\n    switch (type) {\n      case \"LineString\":\n        if (callback(feature2, featureIndex, multiFeatureIndex, 0, 0) === false)\n          return false;\n        break;\n      case \"Polygon\":\n        for (var geometryIndex = 0; geometryIndex < coords.length; geometryIndex++) {\n          if (callback(\n            lineString(coords[geometryIndex], feature2.properties),\n            featureIndex,\n            multiFeatureIndex,\n            geometryIndex\n          ) === false)\n            return false;\n        }\n        break;\n    }\n  });\n}\nfunction lineReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  lineEach(\n    geojson,\n    function(currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n      if (featureIndex === 0 && initialValue === void 0)\n        previousValue = currentLine;\n      else\n        previousValue = callback(\n          previousValue,\n          currentLine,\n          featureIndex,\n          multiFeatureIndex,\n          geometryIndex\n        );\n    }\n  );\n  return previousValue;\n}\nfunction findSegment(geojson, options) {\n  options = options || {};\n  if (!isObject(options)) throw new Error(\"options is invalid\");\n  var featureIndex = options.featureIndex || 0;\n  var multiFeatureIndex = options.multiFeatureIndex || 0;\n  var geometryIndex = options.geometryIndex || 0;\n  var segmentIndex = options.segmentIndex || 0;\n  var properties = options.properties;\n  var geometry;\n  switch (geojson.type) {\n    case \"FeatureCollection\":\n      if (featureIndex < 0)\n        featureIndex = geojson.features.length + featureIndex;\n      properties = properties || geojson.features[featureIndex].properties;\n      geometry = geojson.features[featureIndex].geometry;\n      break;\n    case \"Feature\":\n      properties = properties || geojson.properties;\n      geometry = geojson.geometry;\n      break;\n    case \"Point\":\n    case \"MultiPoint\":\n      return null;\n    case \"LineString\":\n    case \"Polygon\":\n    case \"MultiLineString\":\n    case \"MultiPolygon\":\n      geometry = geojson;\n      break;\n    default:\n      throw new Error(\"geojson is invalid\");\n  }\n  if (geometry === null) return null;\n  var coords = geometry.coordinates;\n  switch (geometry.type) {\n    case \"Point\":\n    case \"MultiPoint\":\n      return null;\n    case \"LineString\":\n      if (segmentIndex < 0) segmentIndex = coords.length + segmentIndex - 1;\n      return lineString(\n        [coords[segmentIndex], coords[segmentIndex + 1]],\n        properties,\n        options\n      );\n    case \"Polygon\":\n      if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n      if (segmentIndex < 0)\n        segmentIndex = coords[geometryIndex].length + segmentIndex - 1;\n      return lineString(\n        [\n          coords[geometryIndex][segmentIndex],\n          coords[geometryIndex][segmentIndex + 1]\n        ],\n        properties,\n        options\n      );\n    case \"MultiLineString\":\n      if (multiFeatureIndex < 0)\n        multiFeatureIndex = coords.length + multiFeatureIndex;\n      if (segmentIndex < 0)\n        segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1;\n      return lineString(\n        [\n          coords[multiFeatureIndex][segmentIndex],\n          coords[multiFeatureIndex][segmentIndex + 1]\n        ],\n        properties,\n        options\n      );\n    case \"MultiPolygon\":\n      if (multiFeatureIndex < 0)\n        multiFeatureIndex = coords.length + multiFeatureIndex;\n      if (geometryIndex < 0)\n        geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n      if (segmentIndex < 0)\n        segmentIndex = coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1;\n      return lineString(\n        [\n          coords[multiFeatureIndex][geometryIndex][segmentIndex],\n          coords[multiFeatureIndex][geometryIndex][segmentIndex + 1]\n        ],\n        properties,\n        options\n      );\n  }\n  throw new Error(\"geojson is invalid\");\n}\nfunction findPoint(geojson, options) {\n  options = options || {};\n  if (!isObject(options)) throw new Error(\"options is invalid\");\n  var featureIndex = options.featureIndex || 0;\n  var multiFeatureIndex = options.multiFeatureIndex || 0;\n  var geometryIndex = options.geometryIndex || 0;\n  var coordIndex = options.coordIndex || 0;\n  var properties = options.properties;\n  var geometry;\n  switch (geojson.type) {\n    case \"FeatureCollection\":\n      if (featureIndex < 0)\n        featureIndex = geojson.features.length + featureIndex;\n      properties = properties || geojson.features[featureIndex].properties;\n      geometry = geojson.features[featureIndex].geometry;\n      break;\n    case \"Feature\":\n      properties = properties || geojson.properties;\n      geometry = geojson.geometry;\n      break;\n    case \"Point\":\n    case \"MultiPoint\":\n      return null;\n    case \"LineString\":\n    case \"Polygon\":\n    case \"MultiLineString\":\n    case \"MultiPolygon\":\n      geometry = geojson;\n      break;\n    default:\n      throw new Error(\"geojson is invalid\");\n  }\n  if (geometry === null) return null;\n  var coords = geometry.coordinates;\n  switch (geometry.type) {\n    case \"Point\":\n      return point(coords, properties, options);\n    case \"MultiPoint\":\n      if (multiFeatureIndex < 0)\n        multiFeatureIndex = coords.length + multiFeatureIndex;\n      return point(coords[multiFeatureIndex], properties, options);\n    case \"LineString\":\n      if (coordIndex < 0) coordIndex = coords.length + coordIndex;\n      return point(coords[coordIndex], properties, options);\n    case \"Polygon\":\n      if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n      if (coordIndex < 0)\n        coordIndex = coords[geometryIndex].length + coordIndex;\n      return point(coords[geometryIndex][coordIndex], properties, options);\n    case \"MultiLineString\":\n      if (multiFeatureIndex < 0)\n        multiFeatureIndex = coords.length + multiFeatureIndex;\n      if (coordIndex < 0)\n        coordIndex = coords[multiFeatureIndex].length + coordIndex;\n      return point(coords[multiFeatureIndex][coordIndex], properties, options);\n    case \"MultiPolygon\":\n      if (multiFeatureIndex < 0)\n        multiFeatureIndex = coords.length + multiFeatureIndex;\n      if (geometryIndex < 0)\n        geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n      if (coordIndex < 0)\n        coordIndex = coords[multiFeatureIndex][geometryIndex].length - coordIndex;\n      return point(\n        coords[multiFeatureIndex][geometryIndex][coordIndex],\n        properties,\n        options\n      );\n  }\n  throw new Error(\"geojson is invalid\");\n}\nexport {\n  coordAll,\n  coordEach,\n  coordReduce,\n  featureEach,\n  featureReduce,\n  findPoint,\n  findSegment,\n  flattenEach,\n  flattenReduce,\n  geomEach,\n  geomReduce,\n  lineEach,\n  lineReduce,\n  propEach,\n  propReduce,\n  segmentEach,\n  segmentReduce\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { featureCollection, lineString, multiLineString } from \"@turf/helpers\";\nimport { getGeom } from \"@turf/invariant\";\nfunction polygonToLine(poly, options = {}) {\n  const geom = getGeom(poly);\n  if (!options.properties && poly.type === \"Feature\") {\n    options.properties = poly.properties;\n  }\n  switch (geom.type) {\n    case \"Polygon\":\n      return singlePolygonToLine(geom, options);\n    case \"MultiPolygon\":\n      return multiPolygonToLine(geom, options);\n    default:\n      throw new Error(\"invalid poly\");\n  }\n}\nfunction singlePolygonToLine(poly, options = {}) {\n  const geom = getGeom(poly);\n  const coords = geom.coordinates;\n  const properties = options.properties ? options.properties : poly.type === \"Feature\" ? poly.properties : {};\n  return coordsToLine(coords, properties);\n}\nfunction multiPolygonToLine(multiPoly, options = {}) {\n  const geom = getGeom(multiPoly);\n  const coords = geom.coordinates;\n  const properties = options.properties ? options.properties : multiPoly.type === \"Feature\" ? multiPoly.properties : {};\n  const lines = [];\n  coords.forEach((coord) => {\n    lines.push(coordsToLine(coord, properties));\n  });\n  return featureCollection(lines);\n}\nfunction coordsToLine(coords, properties) {\n  if (coords.length > 1) {\n    return multiLineString(coords, properties);\n  }\n  return lineString(coords[0], properties);\n}\nvar turf_polygon_to_line_default = polygonToLine;\nexport {\n  coordsToLine,\n  turf_polygon_to_line_default as default,\n  multiPolygonToLine,\n  polygonToLine,\n  singlePolygonToLine\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { booleanPointInPolygon } from \"@turf/boolean-point-in-polygon\";\nimport { lineIntersect } from \"@turf/line-intersect\";\nimport { flattenEach } from \"@turf/meta\";\nimport { polygonToLine } from \"@turf/polygon-to-line\";\nfunction booleanDisjoint(feature1, feature2, {\n  ignoreSelfIntersections = true\n} = { ignoreSelfIntersections: true }) {\n  let bool = true;\n  flattenEach(feature1, (flatten1) => {\n    flattenEach(feature2, (flatten2) => {\n      if (bool === false) {\n        return false;\n      }\n      bool = disjoint(\n        flatten1.geometry,\n        flatten2.geometry,\n        ignoreSelfIntersections\n      );\n    });\n  });\n  return bool;\n}\nfunction disjoint(geom1, geom2, ignoreSelfIntersections) {\n  switch (geom1.type) {\n    case \"Point\":\n      switch (geom2.type) {\n        case \"Point\":\n          return !compareCoords(geom1.coordinates, geom2.coordinates);\n        case \"LineString\":\n          return !isPointOnLine(geom2, geom1);\n        case \"Polygon\":\n          return !booleanPointInPolygon(geom1, geom2);\n      }\n      break;\n    case \"LineString\":\n      switch (geom2.type) {\n        case \"Point\":\n          return !isPointOnLine(geom1, geom2);\n        case \"LineString\":\n          return !isLineOnLine(geom1, geom2, ignoreSelfIntersections);\n        case \"Polygon\":\n          return !isLineInPoly(geom2, geom1, ignoreSelfIntersections);\n      }\n      break;\n    case \"Polygon\":\n      switch (geom2.type) {\n        case \"Point\":\n          return !booleanPointInPolygon(geom2, geom1);\n        case \"LineString\":\n          return !isLineInPoly(geom1, geom2, ignoreSelfIntersections);\n        case \"Polygon\":\n          return !isPolyInPoly(geom2, geom1, ignoreSelfIntersections);\n      }\n  }\n  return false;\n}\nfunction isPointOnLine(lineString, pt) {\n  for (let i = 0; i < lineString.coordinates.length - 1; i++) {\n    if (isPointOnLineSegment(\n      lineString.coordinates[i],\n      lineString.coordinates[i + 1],\n      pt.coordinates\n    )) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction isLineOnLine(lineString1, lineString2, ignoreSelfIntersections) {\n  const doLinesIntersect = lineIntersect(lineString1, lineString2, {\n    ignoreSelfIntersections\n  });\n  if (doLinesIntersect.features.length > 0) {\n    return true;\n  }\n  return false;\n}\nfunction isLineInPoly(polygon, lineString, ignoreSelfIntersections) {\n  for (const coord of lineString.coordinates) {\n    if (booleanPointInPolygon(coord, polygon)) {\n      return true;\n    }\n  }\n  const doLinesIntersect = lineIntersect(lineString, polygonToLine(polygon), {\n    ignoreSelfIntersections\n  });\n  if (doLinesIntersect.features.length > 0) {\n    return true;\n  }\n  return false;\n}\nfunction isPolyInPoly(feature1, feature2, ignoreSelfIntersections) {\n  for (const coord1 of feature1.coordinates[0]) {\n    if (booleanPointInPolygon(coord1, feature2)) {\n      return true;\n    }\n  }\n  for (const coord2 of feature2.coordinates[0]) {\n    if (booleanPointInPolygon(coord2, feature1)) {\n      return true;\n    }\n  }\n  const doLinesIntersect = lineIntersect(\n    polygonToLine(feature1),\n    polygonToLine(feature2),\n    { ignoreSelfIntersections }\n  );\n  if (doLinesIntersect.features.length > 0) {\n    return true;\n  }\n  return false;\n}\nfunction isPointOnLineSegment(lineSegmentStart, lineSegmentEnd, pt) {\n  const dxc = pt[0] - lineSegmentStart[0];\n  const dyc = pt[1] - lineSegmentStart[1];\n  const dxl = lineSegmentEnd[0] - lineSegmentStart[0];\n  const dyl = lineSegmentEnd[1] - lineSegmentStart[1];\n  const cross = dxc * dyl - dyc * dxl;\n  if (cross !== 0) {\n    return false;\n  }\n  if (Math.abs(dxl) >= Math.abs(dyl)) {\n    if (dxl > 0) {\n      return lineSegmentStart[0] <= pt[0] && pt[0] <= lineSegmentEnd[0];\n    } else {\n      return lineSegmentEnd[0] <= pt[0] && pt[0] <= lineSegmentStart[0];\n    }\n  } else if (dyl > 0) {\n    return lineSegmentStart[1] <= pt[1] && pt[1] <= lineSegmentEnd[1];\n  } else {\n    return lineSegmentEnd[1] <= pt[1] && pt[1] <= lineSegmentStart[1];\n  }\n}\nfunction compareCoords(pair1, pair2) {\n  return pair1[0] === pair2[0] && pair1[1] === pair2[1];\n}\nvar turf_boolean_disjoint_default = booleanDisjoint;\nexport {\n  booleanDisjoint,\n  turf_boolean_disjoint_default as default\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { booleanDisjoint } from \"@turf/boolean-disjoint\";\nimport { flattenEach } from \"@turf/meta\";\nfunction booleanIntersects(feature1, feature2, {\n  ignoreSelfIntersections = true\n} = {}) {\n  let bool = false;\n  flattenEach(feature1, (flatten1) => {\n    flattenEach(feature2, (flatten2) => {\n      if (bool === true) {\n        return true;\n      }\n      bool = !booleanDisjoint(flatten1.geometry, flatten2.geometry, {\n        ignoreSelfIntersections\n      });\n    });\n  });\n  return bool;\n}\nvar turf_boolean_intersects_default = booleanIntersects;\nexport {\n  booleanIntersects,\n  turf_boolean_intersects_default as default\n};\n//# sourceMappingURL=index.js.map","import { GeoFeaturesById } from \"./GeoFeatures\"\nimport annotations from \"./MapAnnotationPlacements.json\"\nimport { Direction, EllipseCoords, GeoFeature } from \"./MapChartConstants\"\n\ninterface RawAnnotationPlacement {\n    id: string\n    ellipse?: EllipseCoords\n    direction?: Direction\n    anchorPoint?: [number, number]\n    bridgeCountries?: string[]\n}\n\ninterface EnrichedAnnotationPlacement extends Omit<\n    RawAnnotationPlacement,\n    \"bridgeCountries\"\n> {\n    bridgeFeatures?: GeoFeature[]\n}\n\nexport const annotationPlacementsById = new Map<\n    string,\n    EnrichedAnnotationPlacement\n>(\n    annotations.map((annotation) => {\n        const enrichedAnnotation = {\n            ...annotation,\n            bridgeFeatures: annotation.bridgeCountries?.map((name) =>\n                GeoFeaturesById.get(name)\n            ),\n        } as EnrichedAnnotationPlacement\n        return [annotation.id, enrichedAnnotation]\n    })\n)\n","import { Feature, GeoJsonProperties, Polygon } from \"geojson\"\nimport { GeoProjection } from \"d3-geo\"\nimport { forceSimulation, forceX, forceY, SimulationNodeDatum } from \"d3-force\"\n// @ts-expect-error no types available\nimport bboxCollide from \"./d3-bboxCollide\"\nimport { booleanIntersects } from \"@turf/boolean-intersects\"\nimport { Bounds, excludeUndefined, Point } from \"@ourworldindata/utils\"\nimport {\n    Direction,\n    Ellipse,\n    RenderFeature,\n    ExternalAnnotation,\n    Circle,\n    EllipseCoords,\n    InternalAnnotation,\n    GeoFeature,\n    ANNOTATION_FONT_SIZE_INTERNAL_DEFAULT,\n    ANNOTATION_FONT_SIZE_INTERNAL_MIN,\n    ANNOTATION_FONT_SIZE_EXTERNAL_DEFAULT,\n    ANNOTATION_FONT_SIZE_EXTERNAL_MAX,\n    ANNOTATION_MARKER_LINE_LENGTH_DEFAULT,\n    ANNOTATION_MARKER_LINE_LENGTH_MAX,\n} from \"./MapChartConstants\"\nimport * as R from \"remeda\"\nimport { annotationPlacementsById } from \"./MapAnnotationPlacements\"\nimport { GRAPHER_DARK_TEXT } from \"../color/ColorConstants\"\nimport { getGeoFeaturesForGlobe } from \"./GeoFeatures\"\n\nconst MARKER_TEXT_GAP = 2\n\nexport function makeInternalAnnotationForFeature({\n    feature,\n    projection,\n    formattedValue,\n    color,\n    fontSizeScale = 1,\n}: {\n    feature: RenderFeature\n    projection: GeoProjection\n    formattedValue: string\n    color?: string\n    fontSizeScale?: number\n}): InternalAnnotation | undefined {\n    const placement = annotationPlacementsById.get(feature.id)\n    if (!placement || !placement.ellipse) return\n\n    // project ellipse onto the map\n    const ellipse = makeEllipseForProjection({\n        ellipse: placement.ellipse,\n        projection,\n        paddingFactor: { x: 0.1 },\n    })\n\n    if (!ellipse) return\n\n    // place label at the center of the ellipse (decreases the font size if necessary)\n    const placedLabel = placeLabelAtEllipseCenter({\n        text: formattedValue,\n        ellipse,\n        fontSizeScale,\n    })\n\n    if (placedLabel)\n        return {\n            type: \"internal\",\n            id: feature.id,\n            feature,\n            placedBounds: placedLabel.placedBounds,\n            text: formattedValue,\n            ellipse,\n            fontSize: placedLabel.fontSize,\n            color: color ?? GRAPHER_DARK_TEXT,\n        }\n\n    return\n}\n\nexport function makeExternalAnnotationForFeature({\n    feature,\n    projection,\n    formattedValue,\n    fontSizeScale = 1,\n}: {\n    feature: RenderFeature\n    projection: GeoProjection\n    formattedValue: string\n    fontSizeScale?: number\n}): ExternalAnnotation | undefined {\n    const placement = annotationPlacementsById.get(feature.id)\n    if (!placement || !placement.anchorPoint || !placement.direction) return\n\n    const direction = placement.direction\n    const anchorPoint = projection(placement.anchorPoint)\n    if (!anchorPoint) return\n\n    const fontSize = Math.min(\n        ANNOTATION_FONT_SIZE_EXTERNAL_DEFAULT / fontSizeScale,\n        ANNOTATION_FONT_SIZE_EXTERNAL_MAX\n    )\n    const markerLength = Math.min(\n        ANNOTATION_MARKER_LINE_LENGTH_DEFAULT / fontSizeScale,\n        ANNOTATION_MARKER_LINE_LENGTH_MAX\n    )\n\n    // places the label outside of the country borders based on the\n    // given anchor point and direction\n    let placedBounds = placeExternalLabel({\n        text: formattedValue,\n        anchorPoint,\n        direction,\n        fontSize,\n        markerLength,\n    })\n\n    // make sure the labels of countries like Lesotho and Eswatini that are\n    // separated from the ocean by another country are placed in the ocean\n    if (placement.bridgeFeatures?.length)\n        placedBounds = moveExternalLabelIntoOcean({\n            bridgeFeatures: placement.bridgeFeatures,\n            placedBounds,\n            direction,\n            projection,\n            step: markerLength / 2,\n            maxSteps: 3,\n        })\n\n    return {\n        type: \"external\",\n        id: feature.id,\n        feature,\n        text: formattedValue,\n        placedBounds,\n        anchor: anchorPoint,\n        direction,\n        fontSize,\n        color: GRAPHER_DARK_TEXT,\n    }\n}\n\n/**\n * Given a list of naively placed external annotations that might overlap,\n * adjust label positions to minimise collisions and drop labels that can't\n * be rendered.\n */\nexport function repositionAndFilterExternalAnnotations({\n    annotations,\n    projection,\n    backgroundFeatureIdSet, // countries ignored for collision detection\n}: {\n    annotations: ExternalAnnotation[]\n    projection: GeoProjection\n    backgroundFeatureIdSet: Set<string>\n}): ExternalAnnotation[] {\n    const originalAnnotationsById = new Map(\n        annotations.map((annotation) => [annotation.id, annotation])\n    )\n\n    // re-position label annotations so that they're not overlapping\n    const nonOverlappingAnnotations = minimiseLabelCollisions(annotations)\n\n    // the re-positioned label annotations might overlap with other countries\n    const filteredAnnotations = nonOverlappingAnnotations.filter(\n        (annotation) => {\n            // we do these checks only for countries that are proximally close for performance reasons\n            let nearbyGeoFeatures = getGeoFeaturesWithinRadius(\n                annotation.feature\n            )\n\n            // exclude background countries from collision detection,\n            // i.e. showing a label on top of a background country is allowed\n            if (backgroundFeatureIdSet.size > 0)\n                nearbyGeoFeatures = nearbyGeoFeatures.filter(\n                    (feature) =>\n                        !backgroundFeatureIdSet.has(feature.id as string)\n                )\n\n            const nearbyAnnotations = excludeUndefined(\n                nearbyGeoFeatures.map((feature) =>\n                    originalAnnotationsById.get(feature.id as string)\n                )\n            )\n\n            return (\n                // hide an annotation if the line that connects the annotation\n                // with the anchor point crosses through other labels\n                !checkAnnotationMarkerCollidesWithSomeLabel({\n                    annotation,\n                    nearbyAnnotations,\n                }) &&\n                // hide an annotation if it overlaps with other countries\n                !checkAnnotationCollidesWithLandmass({\n                    annotation,\n                    nearbyGeoFeatures,\n                    projection,\n                })\n            )\n        }\n    )\n\n    if (filteredAnnotations.length < annotations.length) {\n        // reset the filtered annotations to their original position and\n        // re-position their labels again\n        return minimiseLabelCollisions(\n            filteredAnnotations.map((annotation) => {\n                const origBounds = originalAnnotationsById.get(\n                    annotation.id\n                )!.placedBounds\n                return { ...annotation, placedBounds: origBounds }\n            })\n        )\n    }\n\n    return filteredAnnotations\n}\n\nfunction placeLabelAtEllipseCenter({\n    text,\n    ellipse,\n    fontSizeScale = 1,\n}: {\n    text: string\n    ellipse: Ellipse\n    fontSizeScale?: number\n}): { placedBounds: Bounds; fontSize: number } | undefined {\n    const defaultFontSize =\n        ANNOTATION_FONT_SIZE_INTERNAL_DEFAULT / fontSizeScale\n\n    // place label at the center of the ellipse\n    const ellipseCenter = { x: ellipse.cx, y: ellipse.cy }\n    let placedBounds = makePlacedBoundsForText({\n        text,\n        fontSize: defaultFontSize,\n        fontWeight: 700,\n        position: ellipseCenter,\n        center: true,\n    })\n\n    // return early if the label fits into the ellipse\n    let textFits = checkPointIsInEllipse(placedBounds.topLeft, ellipse)\n    if (textFits) return { placedBounds, fontSize: defaultFontSize }\n\n    // decrease the font size to make the label fit into the ellipse\n    const step = 1\n    for (\n        let fontSize = ANNOTATION_FONT_SIZE_INTERNAL_DEFAULT - step;\n        fontSize >= ANNOTATION_FONT_SIZE_INTERNAL_MIN;\n        fontSize -= step\n    ) {\n        const scaledFontSize = fontSize / fontSizeScale\n        placedBounds = makePlacedBoundsForText({\n            text,\n            fontSize: scaledFontSize,\n            fontWeight: 700,\n            position: ellipseCenter,\n            center: true,\n        })\n\n        textFits = checkPointIsInEllipse(placedBounds.topLeft, ellipse)\n        if (textFits) return { placedBounds, fontSize: scaledFontSize }\n    }\n\n    // the label text didn't fit into the ellipse\n    return undefined\n}\n\nfunction placeExternalLabel({\n    text,\n    anchorPoint,\n    direction,\n    fontSize,\n    markerLength,\n    padding = MARKER_TEXT_GAP,\n}: {\n    text: string\n    anchorPoint: [number, number]\n    direction: Direction\n    fontSize: number\n    markerLength: number\n    padding?: number\n}): Bounds {\n    const textBounds = Bounds.forText(text, { fontSize, fontWeight: 700 })\n\n    const labelPosition = calculateExternalLabelPosition({\n        anchorPoint,\n        textBounds,\n        direction,\n        markerLength,\n        padding,\n    })\n\n    return textBounds.set({ x: labelPosition[0], y: labelPosition[1] })\n}\n\nfunction checkPointIsInEllipse(point: Point, ellipse: Ellipse): boolean {\n    const dx = point.x - ellipse.cx\n    const dy = point.y - ellipse.cy\n    return (\n        (dx * dx) / (ellipse.rx * ellipse.rx) +\n            (dy * dy) / (ellipse.ry * ellipse.ry) <=\n        1\n    )\n}\n\nfunction makeEllipseForProjection({\n    ellipse,\n    projection,\n    paddingFactor,\n}: {\n    ellipse: EllipseCoords\n    projection: GeoProjection\n    paddingFactor?: { x?: number; y?: number }\n}): Ellipse | undefined {\n    const projCenter = projection([ellipse.cx, ellipse.cy])\n    const projLeft = projection([ellipse.left, ellipse.cy])\n    const projTop = projection([ellipse.cx, ellipse.top])\n\n    if (!projCenter || !projLeft || !projTop) return undefined\n\n    const rx = Math.abs(projCenter[0] - projLeft[0])\n    const ry = Math.abs(projCenter[1] - projTop[1])\n\n    const padX = (paddingFactor?.x ?? 0) * rx\n    const padY = (paddingFactor?.y ?? 0) * ry\n\n    return {\n        cx: projCenter[0],\n        cy: projCenter[1],\n        rx: rx - padX,\n        ry: ry - padY,\n    }\n}\n\n/**\n * Calculate the top-left corner of the externally placed label given the\n * top-left corner of the anchor point and a direction\n */\nfunction calculateExternalLabelPosition({\n    anchorPoint,\n    textBounds,\n    direction,\n    markerLength,\n    padding = MARKER_TEXT_GAP,\n}: {\n    anchorPoint: [number, number]\n    textBounds: Bounds\n    direction: Direction\n    markerLength: number\n    padding?: number\n}): [number, number] {\n    const [x, y] = anchorPoint\n    const w = textBounds.width,\n        h = textBounds.height\n    const m = markerLength + padding\n\n    switch (direction) {\n        case \"right\":\n            return [x + m, y - h / 2]\n        case \"left\":\n            return [x - m - w, y - h / 2]\n        case \"bottom\":\n            return [x - w / 2, y + m]\n        case \"top\":\n            return [x - w / 2, y - h / 2 - m]\n        case \"leftTop\":\n            return [x - m - w, y - h / 2 - m / 2 - h]\n        case \"leftBottom\":\n            return [x - m - w, y - h / 2 + h + m / 2]\n        case \"rightTop\":\n            return [x + m, y - h / 2 - m / 2 - h]\n        case \"rightBottom\":\n            return [x + m, y - h / 2 + h + m / 2]\n    }\n}\n\nexport function getExternalMarkerEndPosition({\n    textBounds,\n    direction,\n    padding = MARKER_TEXT_GAP,\n}: {\n    textBounds: Bounds\n    direction: Direction\n    padding?: number\n}): [number, number] {\n    const { x, y, width, height } = textBounds\n\n    switch (direction) {\n        case \"right\":\n            return [x - padding, y + height / 2]\n        case \"left\":\n            return [x + width + padding, y + height / 2]\n        case \"bottom\":\n            return [x + width / 2, y - padding]\n        case \"top\":\n            return [x + width / 2, y + height + padding]\n        case \"leftTop\":\n            return [x + width, y + height]\n        case \"leftBottom\":\n            return [x + width, y]\n        case \"rightTop\":\n            return [x, y + height]\n        case \"rightBottom\":\n            return [x, y]\n    }\n}\n\nfunction makePlacedBoundsForText({\n    text,\n    fontSize,\n    fontWeight,\n    position,\n    center = false,\n}: {\n    text: string\n    fontSize: number\n    fontWeight: number\n    position: Point\n    center?: boolean\n}): Bounds {\n    // make bounds for text\n    const textBounds = Bounds.forText(text, { fontSize, fontWeight })\n\n    // place bounds at the given position\n    const x = center ? position.x - textBounds.width / 2 : position.x\n    const y = center ? position.y - textBounds.height / 2 : position.y\n    return textBounds.set({ x, y })\n}\n\nfunction moveExternalLabelIntoOcean({\n    bridgeFeatures,\n    direction,\n    placedBounds,\n    projection,\n    step,\n    maxSteps,\n}: {\n    bridgeFeatures: GeoFeature[]\n    direction: Direction\n    placedBounds: Bounds\n    projection: any\n    step: number\n    maxSteps: number\n}): Bounds {\n    // polygon in lon/lat coordinates that represents the annotation label\n    let annotationLabel = makePolygonFromBounds(placedBounds, (position) =>\n        projection.invert(position)\n    )\n\n    let newBounds = placedBounds\n    for (let tick = 0; tick < maxSteps; tick++) {\n        const intersectsWithSomeFeature = bridgeFeatures.some((bridgeFeature) =>\n            booleanIntersects(annotationLabel, bridgeFeature)\n        )\n        if (!intersectsWithSomeFeature) break\n\n        // update bounds\n        newBounds = newBounds.set(\n            moveIntoDirectionByStep({\n                position: newBounds.topLeft,\n                direction,\n                step,\n            })\n        )\n\n        // update label\n        annotationLabel = makePolygonFromBounds(newBounds, (position) =>\n            projection.invert(position)\n        )\n    }\n\n    return newBounds\n}\n\nfunction moveIntoDirectionByStep({\n    position: { x, y },\n    direction,\n    step,\n}: {\n    position: Point\n    direction: Direction\n    step: number\n}): Point {\n    switch (direction) {\n        case \"right\":\n            return { x: x + step, y }\n        case \"left\":\n            return { x: x - step, y }\n        case \"top\":\n            return { x, y: y - step }\n        case \"bottom\":\n            return { x, y: y + step }\n        case \"leftTop\":\n            return { x: x - step, y: y - step }\n        case \"rightTop\":\n            return { x: x + step, y: y - step }\n        case \"leftBottom\":\n            return { x: x - step, y: y + step }\n        case \"rightBottom\":\n            return { x: x + step, y: y + step }\n    }\n}\n\nconst _featuresWithinRadiusCache = new Map<string, GeoFeature[]>()\nfunction getGeoFeaturesWithinRadius(feature: RenderFeature): GeoFeature[] {\n    if (_featuresWithinRadiusCache.has(feature.id))\n        return _featuresWithinRadiusCache.get(feature.id)!\n\n    const circle = {\n        cx: feature.geoCentroid[0],\n        cy: feature.geoCentroid[1],\n        r: 10,\n    }\n\n    const nearbyGeoFeatures = getGeoFeaturesForGlobe()\n        .filter(\n            (candidate) =>\n                candidate.id !== feature.id &&\n                checkRectangleOverlapsWithCircle({\n                    circle,\n                    rectangle: candidate.geoBounds,\n                })\n        )\n        .map((feature) => feature.geo)\n\n    _featuresWithinRadiusCache.set(feature.id, nearbyGeoFeatures)\n    return nearbyGeoFeatures\n}\n\nfunction checkRectangleOverlapsWithCircle({\n    circle,\n    rectangle,\n}: {\n    circle: Circle\n    rectangle: Bounds\n}): boolean {\n    const closestX = R.clamp(circle.cx, {\n        min: rectangle.topLeft.x,\n        max: rectangle.bottomRight.x,\n    })\n    const closestY = R.clamp(circle.cy, {\n        min: rectangle.topLeft.y,\n        max: rectangle.bottomRight.y,\n    })\n\n    const dx = circle.cx - closestX\n    const dy = circle.cy - closestY\n\n    return dx * dx + dy * dy <= circle.r * circle.r\n}\n\ninterface SimulationNode extends SimulationNodeDatum {\n    annotation: ExternalAnnotation\n}\n\nfunction minimiseLabelCollisions(\n    annotations: ExternalAnnotation[],\n    padding = 1\n): ExternalAnnotation[] {\n    if (annotations.length < 2) return annotations\n\n    const simulationNodes: SimulationNode[] = annotations.map((annotation) => {\n        const { centerX, centerY } = annotation.placedBounds\n        const isTopOrBottom =\n            annotation.direction === \"top\" || annotation.direction === \"bottom\"\n        return {\n            annotation,\n            x: centerX,\n            y: centerY,\n            // fix the x or y position to make sure the simulation doesn't move\n            // a label into its anchor point\n            fx: !isTopOrBottom ? centerX : undefined,\n            fy: isTopOrBottom ? centerY : undefined,\n        }\n    })\n\n    // run force simulation that balances two concerns:\n    // - keeping the annotation close to its anchor point (x,y forces)\n    // - minimising collisions between labels (collide force)\n    forceSimulation(simulationNodes)\n        .force(\n            \"x\",\n            forceX((d: SimulationNode) => d.annotation.placedBounds.centerX)\n        )\n        .force(\n            \"y\",\n            forceY((d: SimulationNode) => d.annotation.placedBounds.centerY)\n        )\n        .force(\n            \"collide\",\n            bboxCollide((d: SimulationNode) => [\n                [\n                    -d.annotation.placedBounds.width / 2 - padding,\n                    -d.annotation.placedBounds.height / 2 - padding,\n                ],\n                [\n                    d.annotation.placedBounds.width / 2 + padding,\n                    d.annotation.placedBounds.height / 2 + padding,\n                ],\n            ])\n                // weak force since keeping labels close to their anchor point\n                // is more important than minimising collisions\n                .strength(0.1)\n        )\n        // simulating very few ticks is good enough since dramatic position\n        // changes are not needed in a typical setup\n        .tick(5)\n\n    // update the bounds of the original annotations\n    const updatedAnnotations = annotations.map((annotation, index) => {\n        const node = simulationNodes[index]\n        const originalBounds = annotation.placedBounds\n\n        // update placed bounds with the simulated position\n        const { x: centerX = 0, y: centerY = 0 } = node\n        const placedBounds = originalBounds.set({\n            x: centerX - originalBounds.width / 2,\n            y: centerY - originalBounds.height / 2,\n        })\n\n        return { ...annotation, placedBounds }\n    })\n\n    return updatedAnnotations\n}\n\nfunction checkAnnotationCollidesWithLandmass({\n    annotation,\n    nearbyGeoFeatures,\n    projection,\n}: {\n    annotation: ExternalAnnotation\n    nearbyGeoFeatures: GeoFeature[]\n    projection: any\n}): boolean {\n    const annotationLabel = makePolygonFromBounds(\n        annotation.placedBounds,\n        (position) => projection.invert(position)\n    )\n    return nearbyGeoFeatures.some((feature) =>\n        booleanIntersects(annotationLabel, feature)\n    )\n}\n\nfunction checkAnnotationMarkerCollidesWithSomeLabel({\n    annotation,\n    nearbyAnnotations,\n}: {\n    annotation: ExternalAnnotation\n    nearbyAnnotations: ExternalAnnotation[]\n}): boolean {\n    // marker line from the anchor point to the label\n    const markerStart = annotation.anchor\n    const markerEnd = getExternalMarkerEndPosition({\n        textBounds: annotation.placedBounds,\n        direction: annotation.direction,\n    })\n    const markerLine = makePolygonForLine(markerStart, markerEnd)\n\n    // check if the marker line crosses through any of the labels\n    return nearbyAnnotations.some((nearbyAnnotation) => {\n        const nearbyLabel = makePolygonFromBounds(nearbyAnnotation.placedBounds)\n        return booleanIntersects(markerLine, nearbyLabel)\n    })\n}\n\nfunction makePolygonFromBounds(\n    bounds: Bounds,\n    transform?: (position: number[]) => number[]\n): Feature<Polygon, GeoJsonProperties> {\n    let corners = [\n        [bounds.topLeft.x, bounds.topLeft.y],\n        [bounds.topRight.x, bounds.topRight.y],\n        [bounds.bottomRight.x, bounds.bottomRight.y],\n        [bounds.bottomLeft.x, bounds.bottomLeft.y],\n        [bounds.topLeft.x, bounds.topLeft.y], // close the polygon\n    ]\n    if (transform) {\n        corners = corners.map((position) => transform(position))\n    }\n    return {\n        type: \"Feature\",\n        properties: {},\n        geometry: {\n            type: \"Polygon\",\n            coordinates: [corners],\n        },\n    }\n}\n\nfunction makePolygonForLine(\n    start: [number, number],\n    end: [number, number],\n    lineWidth = 4\n): Feature<Polygon, GeoJsonProperties> {\n    // Calculate the vector direction of the line\n    const dx = end[0] - start[0]\n    const dy = end[1] - start[1]\n    const lineLength = Math.sqrt(dx * dx + dy * dy)\n\n    // Calculate normalized perpendicular vector\n    const perpX = (-dy / lineLength) * (lineWidth / 2)\n    const perpY = (dx / lineLength) * (lineWidth / 2)\n\n    // Create four corners of the rectangle\n    const corners = [\n        [start[0] + perpX, start[1] + perpY],\n        [start[0] - perpX, start[1] - perpY],\n        [end[0] - perpX, end[1] - perpY],\n        [end[0] + perpX, end[1] + perpY],\n        [start[0] + perpX, start[1] + perpY], // close the polygon\n    ]\n\n    return {\n        type: \"Feature\",\n        properties: {},\n        geometry: {\n            type: \"Polygon\",\n            coordinates: [corners],\n        },\n    }\n}\n","import React from \"react\"\nimport { Color } from \"@ourworldindata/types\"\nimport { makeFigmaId, roundForSvg } from \"@ourworldindata/utils\"\nimport {\n    BLUR_FILL_OPACITY,\n    BLUR_STROKE_OPACITY,\n    ChoroplethSeries,\n    DEFAULT_STROKE_COLOR,\n    DEFAULT_STROKE_WIDTH,\n    HOVER_STROKE_COLOR,\n    HOVER_STROKE_WIDTH,\n    SELECTED_STROKE_WIDTH,\n    SVGMouseEvent,\n    RenderFeature,\n    InternalAnnotation,\n    ExternalAnnotation,\n} from \"./MapChartConstants\"\nimport { isMapRenderFeature } from \"./MapHelpers\"\nimport { getExternalMarkerEndPosition } from \"./MapAnnotations\"\nimport { Patterns, makePatternId } from \"../core/GrapherConstants\"\nimport { calculateLightnessScore, isDarkColor } from \"../color/ColorUtils\"\nimport { INAPPLICABLE_COLOR } from \"../color/ColorScale\"\nimport { Halo } from \"@ourworldindata/components\"\nimport { InteractionState } from \"../interaction/InteractionState\"\n\nimport * as R from \"remeda\"\n\nexport function BackgroundCountry<Feature extends RenderFeature>({\n    feature,\n    path,\n    strokeWidth = DEFAULT_STROKE_WIDTH,\n}: {\n    feature: Feature\n    path?: string\n    strokeWidth?: number\n}): React.ReactElement {\n    return (\n        <path\n            id={makeFigmaId(feature.id)}\n            d={isMapRenderFeature(feature) ? feature.path : path}\n            strokeWidth={strokeWidth}\n            stroke=\"#aaa\"\n            fill=\"#fff\"\n        />\n    )\n}\n\nexport function CountryWithData<Feature extends RenderFeature>({\n    feature,\n    series,\n    path,\n    isSelected = false,\n    hover,\n    strokeScale = 1,\n    onClick,\n    onPointerEnter,\n    onPointerLeave,\n}: {\n    feature: Feature\n    series: ChoroplethSeries\n    path?: string\n    isSelected?: boolean\n    hover?: InteractionState\n    strokeScale?: number\n    onClick?: (feature: Feature, event: SVGMouseEvent) => void\n    onPointerEnter?: (feature: Feature, event: PointerEvent) => void\n    onPointerLeave?: (event: PointerEvent) => void\n}): React.ReactElement {\n    const isHovered = hover?.active ?? false\n\n    const stroke =\n        isHovered || isSelected ? HOVER_STROKE_COLOR : DEFAULT_STROKE_COLOR\n    const strokeWidth = scaleStrokeWidth(\n        getStrokeWidth({ isHovered, isSelected }),\n        strokeScale\n    )\n    const strokeOpacity = hover?.background ? BLUR_STROKE_OPACITY : 1\n\n    const fillOpacity = hover?.background ? BLUR_FILL_OPACITY : 1\n\n    return (\n        <path\n            id={makeFigmaId(feature.id)}\n            data-feature-id={feature.id}\n            d={isMapRenderFeature(feature) ? feature.path : path}\n            strokeWidth={strokeWidth}\n            stroke={stroke}\n            strokeOpacity={strokeOpacity}\n            cursor=\"pointer\"\n            fill={series.color}\n            fillOpacity={fillOpacity}\n            onClick={(event) => onClick?.(feature, event)}\n            onPointerEnter={(e) => onPointerEnter?.(feature, e.nativeEvent)}\n            onPointerLeave={(e) => onPointerLeave?.(e.nativeEvent)}\n        />\n    )\n}\n\n/** Dots drawn over a projected country's solid fill */\nexport function ProjectedDataOverlay<Feature extends RenderFeature>({\n    feature,\n    series,\n    patternIdSuffix,\n    path,\n    hover,\n}: {\n    feature: Feature\n    series: ChoroplethSeries\n    patternIdSuffix?: string\n    path?: string\n    hover?: InteractionState\n}): React.ReactElement {\n    return (\n        <path\n            id={makeFigmaId(feature.id, \"projected-data-pattern\")}\n            d={isMapRenderFeature(feature) ? feature.path : path}\n            stroke=\"none\"\n            fill={`url(#${makeProjectedDataPatternId(series.color, patternIdSuffix)})`}\n            fillOpacity={hover?.background ? BLUR_FILL_OPACITY : 1}\n            pointerEvents=\"none\"\n        />\n    )\n}\n\nexport function CountryWithNoData<Feature extends RenderFeature>({\n    feature,\n    path,\n    patternId,\n    isSelected = false,\n    hover,\n    strokeScale = 1,\n    onClick,\n    onPointerEnter,\n    onPointerLeave,\n}: {\n    feature: Feature\n    path?: string\n    patternId: string\n    isSelected?: boolean\n    hover?: InteractionState\n    strokeScale?: number\n    onClick?: (feature: Feature, event: SVGMouseEvent) => void\n    onPointerEnter?: (feature: Feature, event: PointerEvent) => void\n    onPointerLeave?: (event: PointerEvent) => void\n}): React.ReactElement {\n    const isHovered = hover?.active ?? false\n\n    const stroke = isHovered || isSelected ? HOVER_STROKE_COLOR : \"#aaa\"\n    const strokeWidth = scaleStrokeWidth(\n        getStrokeWidth({ isHovered, isSelected }),\n        strokeScale\n    )\n    const strokeOpacity = hover?.background ? BLUR_STROKE_OPACITY : 1\n\n    const fillOpacity = hover?.background ? BLUR_FILL_OPACITY : 1\n\n    return (\n        <path\n            id={makeFigmaId(feature.id)}\n            data-feature-id={feature.id}\n            d={isMapRenderFeature(feature) ? feature.path : path}\n            strokeWidth={strokeWidth}\n            stroke={stroke}\n            strokeOpacity={strokeOpacity}\n            cursor=\"pointer\"\n            fill={`url(#${patternId})`}\n            fillOpacity={fillOpacity}\n            onClick={(event) => onClick?.(feature, event)}\n            onPointerEnter={(e) => onPointerEnter?.(feature, e.nativeEvent)}\n            onPointerLeave={(e) => onPointerLeave?.(e.nativeEvent)}\n        />\n    )\n}\n\nexport function InapplicablePattern({\n    patternId = Patterns.inapplicablePattern,\n    color = INAPPLICABLE_COLOR,\n    scale = 1,\n}: {\n    patternId?: string\n    color?: Color\n    scale?: number\n}): React.ReactElement {\n    const roundedScale = R.round(scale, 3)\n    return (\n        <pattern\n            id={patternId}\n            patternUnits=\"userSpaceOnUse\"\n            width=\"4\"\n            height=\"4\"\n            patternTransform={`rotate(-45 2 2) scale(${roundedScale})`}\n        >\n            <rect width=\"4\" height=\"4\" fill={color} />\n            <path d=\"M -1,2 l 6,0\" stroke=\"#fff\" strokeWidth={0.7} />\n        </pattern>\n    )\n}\n\nexport function ProjectedDataPattern({\n    color,\n    scale = 1,\n    idSuffix,\n}: {\n    color: string\n    scale?: number\n    idSuffix?: string\n}): React.ReactElement {\n    const lightness = calculateLightnessScore(color) ?? 0\n    return (\n        <DottedProjectedDataPattern\n            patternId={makeProjectedDataPatternId(color, idSuffix)}\n            scale={scale}\n            dotOpacity={Math.max(1 - lightness, 0.1)}\n        />\n    )\n}\n\nexport function ProjectedDataLegendPattern({\n    scale = 1,\n    idSuffix,\n}: {\n    scale?: number\n    idSuffix?: string\n}): React.ReactElement {\n    return (\n        <DottedProjectedDataPattern\n            patternId={makeProjectedDataLegendPatternId(idSuffix)}\n            scale={scale}\n            dotOpacity={0.2}\n        />\n    )\n}\n\nfunction DottedProjectedDataPattern({\n    patternId,\n    dotOpacity,\n    scale = 1,\n    patternSize = 4,\n    dotSize = patternSize / 4,\n}: {\n    patternId: string\n    dotOpacity: number\n    scale?: number\n    patternSize?: number\n    dotSize?: number\n}): React.ReactElement {\n    const roundedScale = R.round(scale, 3)\n\n    return (\n        <pattern\n            id={patternId}\n            patternUnits=\"userSpaceOnUse\"\n            width={roundForSvg(patternSize)}\n            height={roundForSvg(patternSize)}\n            patternTransform={`rotate(45) scale(${roundedScale})`}\n        >\n            <circle\n                cx={roundForSvg(patternSize / 2)}\n                cy={roundForSvg(patternSize / 2)}\n                r={roundForSvg(dotSize)}\n                fill=\"black\"\n                fillOpacity={dotOpacity}\n            />\n        </pattern>\n    )\n}\n\nexport function InternalValueAnnotation({\n    annotation,\n    strokeScale = 1,\n    showOutline = false,\n}: {\n    annotation: InternalAnnotation\n    strokeScale?: number\n    showOutline?: boolean\n}): React.ReactElement {\n    const { id, text, color, placedBounds, fontSize } = annotation\n\n    const showHalo = showOutline && isDarkColor(color)\n    const strokeWidth = scaleStrokeWidth(DEFAULT_STROKE_WIDTH, strokeScale)\n\n    return (\n        <Halo id={id} outlineWidth={3} show={showHalo}>\n            <text\n                id={makeFigmaId(id)}\n                x={roundForSvg(placedBounds.topLeft.x)}\n                y={roundForSvg(\n                    placedBounds.topLeft.y + placedBounds.height - 1\n                )}\n                fontSize={fontSize}\n                fontWeight={700}\n                fill={color}\n                strokeWidth={strokeWidth}\n                style={{ pointerEvents: \"none\" }}\n            >\n                {text}\n            </text>\n        </Halo>\n    )\n}\n\nexport function ExternalValueAnnotation({\n    annotation,\n    strokeScale = 1,\n    onPointerEnter,\n    onPointerLeave,\n}: {\n    annotation: ExternalAnnotation\n    strokeScale?: number\n    onPointerEnter?: (feature: RenderFeature, event: PointerEvent) => void\n    onPointerLeave?: (event: PointerEvent) => void\n}): React.ReactElement {\n    const { id, text, direction, anchor, placedBounds, fontSize } = annotation\n\n    const markerStart = anchor\n    const markerEnd = getExternalMarkerEndPosition({\n        textBounds: placedBounds,\n        direction,\n    })\n    const lineStrokeWidth = R.round((0.5 * HOVER_STROKE_WIDTH) / strokeScale, 3)\n    const textStrokeWidth = R.round(DEFAULT_STROKE_WIDTH / strokeScale, 3)\n\n    return (\n        <g id={makeFigmaId(id)}>\n            <line\n                x1={roundForSvg(markerStart[0])}\n                y1={roundForSvg(markerStart[1])}\n                x2={roundForSvg(markerEnd[0])}\n                y2={roundForSvg(markerEnd[1])}\n                stroke={annotation.color}\n                strokeWidth={lineStrokeWidth}\n                style={{ pointerEvents: \"none\" }}\n            />\n            <text\n                x={roundForSvg(placedBounds.x)}\n                y={roundForSvg(placedBounds.y + placedBounds.height - 1)}\n                fontSize={fontSize}\n                strokeWidth={textStrokeWidth}\n                fill={annotation.color}\n                fontWeight={700}\n                onPointerEnter={(e) =>\n                    onPointerEnter?.(annotation.feature, e.nativeEvent)\n                }\n                onPointerLeave={(e) => onPointerLeave?.(e.nativeEvent)}\n            >\n                {text}\n            </text>\n        </g>\n    )\n}\n\nfunction scaleStrokeWidth(strokeWidth: number, strokeScale: number): number {\n    return R.round(strokeWidth / strokeScale, 3)\n}\n\nfunction getStrokeWidth({\n    isSelected,\n    isHovered,\n}: {\n    isSelected: boolean\n    isHovered: boolean\n}): number {\n    if (isHovered) return HOVER_STROKE_WIDTH\n    if (isSelected) return SELECTED_STROKE_WIDTH\n    return DEFAULT_STROKE_WIDTH\n}\n\nexport function makeProjectedDataPatternId(\n    color: string,\n    idSuffix?: string\n): string {\n    return makePatternId(`${Patterns.projectedDataPattern}_${color}`, idSuffix)\n}\n\nexport function makeProjectedDataLegendPatternId(idSuffix?: string): string {\n    return makePatternId(Patterns.projectedDataPatternForLegend, idSuffix)\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport {\n    Bounds,\n    makeFigmaId,\n    excludeUndefined,\n    EntityName,\n    MapRegionName,\n    roundForSvg,\n} from \"@ourworldindata/utils\"\nimport { computed, action, observable, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { Quadtree, quadtree } from \"d3-quadtree\"\nimport {\n    MapRenderFeature,\n    SVGMouseEvent,\n    GEO_FEATURES_CLASSNAME,\n    ChoroplethMapManager,\n    ChoroplethSeries,\n    ChoroplethSeriesByName,\n    CHOROPLETH_MAP_CLASSNAME,\n    ExternalAnnotation,\n    InternalAnnotation,\n    Annotation,\n    ANNOTATION_COLOR_LIGHT,\n    ANNOTATION_COLOR_DARK,\n    RenderFeature,\n    MapViewport,\n    MAP_VIEWPORTS,\n    MAP_REGION_LABELS,\n} from \"./MapChartConstants\"\nimport { getGeoFeaturesForMap } from \"./GeoFeatures\"\nimport {\n    BackgroundCountry,\n    CountryWithData,\n    CountryWithNoData,\n    ProjectedDataOverlay,\n    ExternalValueAnnotation,\n    InternalValueAnnotation,\n    ProjectedDataPattern,\n    ProjectedDataLegendPattern,\n    InapplicablePattern,\n} from \"./MapComponents\"\nimport { NoDataPattern } from \"../chart/ChartUtils\"\nimport { Patterns, makePatternId } from \"../core/GrapherConstants\"\nimport {\n    detectNearbyFeature,\n    getCountriesByRegion,\n    getForegroundFeatures,\n    sortFeaturesByInteractionStateAndSize,\n} from \"./MapHelpers\"\nimport {\n    makeInternalAnnotationForFeature,\n    makeExternalAnnotationForFeature,\n    repositionAndFilterExternalAnnotations,\n} from \"./MapAnnotations\"\nimport { isDarkColor } from \"../color/ColorUtils\"\nimport { MapConfig } from \"./MapConfig\"\nimport { MapSelectionArray } from \"../selection/MapSelectionArray\"\nimport { MAP_PROJECTIONS } from \"./MapProjections\"\n\n@observer\nexport class ChoroplethMap extends React.Component<{\n    manager: ChoroplethMapManager\n}> {\n    base = React.createRef<SVGGElement>()\n\n    private hoverEnterFeature: MapRenderFeature | undefined = undefined\n    private hoverNearbyFeature: MapRenderFeature | undefined = undefined\n\n    constructor(props: { manager: ChoroplethMapManager }) {\n        super(props)\n\n        makeObservable<\n            ChoroplethMap,\n            \"hoverEnterFeature\" | \"hoverNearbyFeature\"\n        >(this, {\n            hoverEnterFeature: observable,\n            hoverNearbyFeature: observable,\n        })\n    }\n\n    @computed private get manager(): ChoroplethMapManager {\n        return this.props.manager\n    }\n\n    @computed get mapConfig(): MapConfig {\n        return this.manager.mapConfig\n    }\n\n    @computed.struct private get bounds(): Bounds {\n        return this.manager.choroplethMapBounds\n    }\n\n    @computed private get selectionArray(): MapSelectionArray {\n        return this.manager.selectionArray ?? new MapSelectionArray()\n    }\n\n    @computed private get viewport(): MapViewport {\n        return this.manager.mapViewport ?? MAP_VIEWPORTS[this.mapConfig.region]\n    }\n\n    @computed.struct private get choroplethData(): ChoroplethSeriesByName {\n        return this.manager.choroplethData\n    }\n\n    @computed private get hoverFeature(): MapRenderFeature | undefined {\n        return this.hoverEnterFeature || this.hoverNearbyFeature\n    }\n\n    // Combine bounding boxes to get the extents of the entire map\n    @computed private get mapBounds(): Bounds {\n        const allBounds = this.features.map((feature) => feature.projBounds)\n        return Bounds.merge(allBounds)\n    }\n\n    // Calculate what scaling should be applied to the untransformed map to match the current viewport to the container\n    @computed private get viewportScale(): number {\n        const { bounds, viewport, mapBounds } = this\n        const viewportWidth = viewport.width * mapBounds.width\n        const viewportHeight = viewport.height * mapBounds.height\n        return Math.min(\n            bounds.width / viewportWidth,\n            bounds.height / viewportHeight\n        )\n    }\n\n    @computed private get featurePatternScale(): number {\n        return (this.manager.patternScale ?? 1) / this.viewportScale\n    }\n\n    @computed private get viewportScaleSqrt(): number {\n        return Math.sqrt(this.viewportScale)\n    }\n\n    @computed private get matrixTransform(): string {\n        const { bounds, mapBounds, viewport, viewportScale } = this\n\n        // Calculate our reference dimensions. These values are independent of the current\n        // map translation and scaling.\n        const mapX = mapBounds.x + 1\n        const mapY = mapBounds.y + 1\n\n        // Work out how to center the map, accounting for the new scaling we've worked out\n        const newWidth = mapBounds.width * viewportScale\n        const newHeight = mapBounds.height * viewportScale\n        const boundsCenterX = bounds.left + bounds.width / 2\n        const boundsCenterY = bounds.top + bounds.height / 2\n        const newCenterX =\n            mapX + (viewportScale - 1) * mapBounds.x + viewport.x * newWidth\n        const newCenterY =\n            mapY + (viewportScale - 1) * mapBounds.y + viewport.y * newHeight\n        const newOffsetX = boundsCenterX - newCenterX\n        const newOffsetY = boundsCenterY - newCenterY\n\n        const matrixComponents = [\n            viewportScale,\n            0,\n            0,\n            viewportScale,\n            newOffsetX,\n            newOffsetY,\n        ]\n        const matrixComponentsRounded = matrixComponents.map((c) =>\n            _.round(c, 3)\n        )\n\n        const matrixStr = `matrix(${matrixComponentsRounded.join(\",\")})`\n        return matrixStr\n    }\n\n    @computed private get features(): MapRenderFeature[] {\n        return getGeoFeaturesForMap(this.mapConfig.region)\n    }\n\n    @computed private get featuresInRegion(): MapRenderFeature[] {\n        const { features, mapConfig } = this\n\n        if (mapConfig.region === MapRegionName.World) return features\n\n        const countriesByProjection = getCountriesByRegion(\n            MAP_REGION_LABELS[mapConfig.region]\n        )\n        if (countriesByProjection === undefined) return []\n\n        return features.filter((feature) =>\n            countriesByProjection.has(feature.id)\n        )\n    }\n\n    @computed private get featuresById(): Map<string, MapRenderFeature> {\n        return new Map(this.features.map((feature) => [feature.id, feature]))\n    }\n\n    @computed private get foregroundFeatures(): MapRenderFeature[] {\n        return getForegroundFeatures(this.featuresInRegion, this.selectionArray)\n    }\n\n    @computed\n    private get backgroundFeatures(): MapRenderFeature[] {\n        return _.difference(this.features, this.foregroundFeatures)\n    }\n\n    @computed private get backgroundFeatureIdSet(): Set<EntityName> {\n        return new Set(this.backgroundFeatures.map((feature) => feature.id))\n    }\n\n    @computed private get featuresWithData(): MapRenderFeature[] {\n        return this.foregroundFeatures.filter((feature) =>\n            this.choroplethData.has(feature.id)\n        )\n    }\n\n    @computed private get sortedFeaturesWithData(): MapRenderFeature[] {\n        // sort features so that hovered or selected features are rendered last\n        // and smaller countries are rendered on top of bigger ones\n        return sortFeaturesByInteractionStateAndSize(this.featuresWithData, {\n            isHovered: (featureId: string) =>\n                this.manager.getHoverState?.(featureId)?.active ?? false,\n            isSelected: (featureId) =>\n                this.manager.isSelected?.(featureId) ?? false,\n        })\n    }\n\n    @computed\n    private get sortedFeaturesWithHistoricalData(): MapRenderFeature[] {\n        return this.sortedFeaturesWithData.filter(\n            (feature) => !this.choroplethData.get(feature.id)?.isProjection\n        )\n    }\n\n    @computed\n    private get sortedFeaturesWithProjectedData(): MapRenderFeature[] {\n        return this.sortedFeaturesWithData.filter(\n            (feature) => this.choroplethData.get(feature.id)?.isProjection\n        )\n    }\n\n    @computed private get featuresWithNoData(): MapRenderFeature[] {\n        return _.difference(this.foregroundFeatures, this.featuresWithData)\n    }\n\n    @computed private get binColors(): string[] {\n        return this.manager.binColors ?? []\n    }\n\n    @computed private get quadtree(): Quadtree<MapRenderFeature> {\n        return quadtree<MapRenderFeature>()\n            .x((feature) => feature.projBounds.centerX)\n            .y((feature) => feature.projBounds.centerY)\n            .addAll(this.foregroundFeatures)\n    }\n\n    @computed private get projection(): any {\n        return MAP_PROJECTIONS[this.mapConfig.region]\n    }\n\n    @computed private get shouldShowAnnotations(): boolean {\n        return !!(\n            this.manager.mapColumn.hasNumberFormatting &&\n            !this.mapConfig.tooltipUseCustomLabels\n        )\n    }\n\n    private formatAnnotationLabel(value: string | number): string {\n        return this.manager.mapColumn.formatValueShortWithAbbreviations(value)\n    }\n\n    @computed private get annotationCandidateFeatures(): MapRenderFeature[] {\n        if (!this.shouldShowAnnotations) return []\n\n        return excludeUndefined(\n            this.mapConfig.selection.selectedCountryNamesInForeground.map(\n                (name) => this.featuresById.get(name)\n            )\n        ).filter((feature) => this.foregroundFeatures.includes(feature))\n    }\n\n    /* Naively placed annotations that might be overlapping */\n    @computed\n    private get annotationCandidates(): Annotation[] {\n        return excludeUndefined(\n            this.annotationCandidateFeatures.map((feature) => {\n                const series = this.choroplethData.get(feature.id)\n                if (!series) return\n\n                const labelColor = isDarkColor(series.color)\n                    ? ANNOTATION_COLOR_LIGHT\n                    : ANNOTATION_COLOR_DARK\n\n                const args = {\n                    feature,\n                    projection: this.projection,\n                    formattedValue: this.formatAnnotationLabel(series.value),\n                    fontSizeScale: this.viewportScale,\n                    color: labelColor,\n                }\n\n                // try to fit the annotation inside the feature\n                const internalAnnotation =\n                    makeInternalAnnotationForFeature(args)\n                if (internalAnnotation) return internalAnnotation\n\n                // place the annotation outside of the feature\n                const externalAnnotation =\n                    makeExternalAnnotationForFeature(args)\n                if (externalAnnotation) return externalAnnotation\n\n                return undefined\n            })\n        )\n    }\n\n    @computed\n    private get internalAnnotations(): InternalAnnotation[] {\n        return this.annotationCandidates.filter(\n            (annotation) => annotation.type === \"internal\"\n        )\n    }\n\n    @computed\n    private get externalAnnotations(): ExternalAnnotation[] {\n        const { projection, backgroundFeatureIdSet } = this\n        const annotations = this.annotationCandidates.filter(\n            (annotation) => annotation.type === \"external\"\n        )\n        return repositionAndFilterExternalAnnotations({\n            annotations,\n            projection,\n            backgroundFeatureIdSet,\n        })\n    }\n\n    // Map uses a hybrid approach to mouseover\n    // If mouse is inside an element, that is prioritized\n    // Otherwise we do a quadtree search for the closest center point of a feature bounds,\n    // so that we can hover very small countries without trouble\n    @action.bound private detectNearbyFeature(\n        event: PointerEvent\n    ): MapRenderFeature | undefined {\n        if (this.hoverEnterFeature || !this.base.current) return\n\n        const nearbyFeature = detectNearbyFeature({\n            quadtree: this.quadtree,\n            element: this.base.current,\n            event,\n        })\n\n        if (!nearbyFeature) {\n            this.hoverNearbyFeature = undefined\n            this.manager.onMapMouseLeave?.()\n            return\n        }\n\n        if (nearbyFeature.id !== this.hoverNearbyFeature?.id) {\n            this.hoverNearbyFeature = nearbyFeature\n            this.manager.onMapMouseOver?.(nearbyFeature.geo)\n        }\n\n        return nearbyFeature\n    }\n\n    @action.bound private onPointerMove(event: PointerEvent): void {\n        this.detectNearbyFeature(event)\n    }\n\n    @action.bound private onPointerEnter(\n        feature: MapRenderFeature,\n        event: PointerEvent\n    ): void {\n        // on touch, let the click handler set hover so the\n        // tooltip doesn't appear before the click event fires\n        if (event.pointerType === \"touch\") return\n        this.setHoverEnterFeature(feature)\n    }\n\n    @action.bound private onPointerLeave(event: PointerEvent): void {\n        // on touch, the tooltip is dismissed via the document pointerdown handler\n        if (event.pointerType === \"touch\") return\n\n        this.clearHoverEnterFeature()\n    }\n\n    @action.bound private setHoverEnterFeature(\n        feature: MapRenderFeature\n    ): void {\n        if (this.hoverEnterFeature?.id === feature.id) return\n\n        this.hoverEnterFeature = feature\n        this.manager.onMapMouseOver?.(feature.geo)\n    }\n\n    @action.bound private clearHoverEnterFeature(): void {\n        this.hoverEnterFeature = undefined\n        this.manager.onMapMouseLeave?.()\n    }\n\n    @action.bound private onClick(feature: MapRenderFeature): void {\n        const {\n            isMapSelectionEnabled,\n            mapConfig: { selection },\n            globeController,\n        } = this.manager\n\n        this.setHoverEnterFeature(feature)\n\n        const is2dContinentActive = this.mapConfig.is2dContinentActive()\n\n        if (isMapSelectionEnabled) {\n            // Select/deselect the country if allowed\n            selection.toggleSelection(feature.id)\n        } else if (\n            // Don't rotate if the maps shows a continent in 2d mode\n            !is2dContinentActive &&\n            // Don't rotate if the map is faceted\n            !this.manager.isFaceted &&\n            // Don't rotate if the user is zoomed in, otherwise they can get stuck in 3D mode\n            window?.visualViewport?.scale === 1\n        ) {\n            // Rotate to the selected country on the globe\n            globeController?.rotateToCountry(feature.id)\n        }\n    }\n\n    @action.bound private onClickFeature(\n        feature: MapRenderFeature,\n        event: SVGMouseEvent\n    ): void {\n        // Don't invoke a second click on the parent\n        // that catches clicks on 'nearby' features\n        event.stopPropagation()\n\n        this.onClick(feature)\n    }\n\n    @action.bound private onDocumentPointerDown(): void {\n        this.manager.globeController?.dismissCountryFocus()\n        if (this.hoverEnterFeature || this.hoverNearbyFeature) {\n            this.hoverEnterFeature = undefined\n            this.hoverNearbyFeature = undefined\n            this.manager.onMapMouseLeave?.()\n        }\n    }\n\n    private renderInternalAnnotations(): React.ReactElement | undefined {\n        if (this.internalAnnotations.length === 0) return\n\n        return (\n            <g id={makeFigmaId(\"annotations-internal\")}>\n                {this.internalAnnotations.map((annotation) => (\n                    <InternalValueAnnotation\n                        key={annotation.id}\n                        annotation={annotation}\n                        strokeScale={this.viewportScaleSqrt}\n                        showOutline={\n                            this.choroplethData.get(annotation.id)?.isProjection\n                        }\n                    />\n                ))}\n            </g>\n        )\n    }\n\n    private renderExternalAnnotations(): React.ReactElement | undefined {\n        if (this.externalAnnotations.length === 0) return\n\n        return (\n            <g\n                id={makeFigmaId(\"annotations-external\")}\n                className=\"ExternalAnnotations\"\n            >\n                {this.externalAnnotations.map((annotation) => (\n                    <ExternalValueAnnotation\n                        key={annotation.id}\n                        annotation={annotation}\n                        strokeScale={this.viewportScaleSqrt}\n                        onPointerEnter={action((feature: RenderFeature) =>\n                            this.setHoverEnterFeature(\n                                feature as MapRenderFeature\n                            )\n                        )}\n                        onPointerLeave={action(() =>\n                            this.clearHoverEnterFeature()\n                        )}\n                    />\n                ))}\n            </g>\n        )\n    }\n\n    renderFeaturesInBackground(): React.ReactElement | undefined {\n        if (this.backgroundFeatures.length === 0) return\n\n        return (\n            <g id={makeFigmaId(\"countries-background\")}>\n                {this.backgroundFeatures.map((feature) => (\n                    <BackgroundCountry key={feature.id} feature={feature} />\n                ))}\n            </g>\n        )\n    }\n\n    renderFeaturesWithoutData(): React.ReactElement | undefined {\n        const {\n            featuresWithNoData,\n            manager: { inapplicableEntityNamesSet },\n        } = this\n\n        if (featuresWithNoData.length === 0) return\n\n        const { patternIdSuffix } = this.manager\n        const noDataPatternId = makePatternId(\n            Patterns.noDataPatternForMap,\n            patternIdSuffix\n        )\n        const inapplicablePatternId = makePatternId(\n            Patterns.inapplicablePatternForMap,\n            patternIdSuffix\n        )\n\n        return (\n            <g\n                id={makeFigmaId(\"countries-without-data\")}\n                className=\"noDataFeatures\"\n            >\n                <defs>\n                    <NoDataPattern\n                        patternId={noDataPatternId}\n                        scale={this.featurePatternScale}\n                    />\n                    {!!inapplicableEntityNamesSet?.size && (\n                        <InapplicablePattern\n                            patternId={inapplicablePatternId}\n                            color={this.manager.inapplicableColor}\n                            scale={this.featurePatternScale}\n                        />\n                    )}\n                </defs>\n\n                {featuresWithNoData.map((feature) => (\n                    <CountryWithNoData\n                        key={feature.id}\n                        feature={feature}\n                        patternId={\n                            inapplicableEntityNamesSet?.has(feature.id)\n                                ? inapplicablePatternId\n                                : noDataPatternId\n                        }\n                        isSelected={this.manager.isSelected?.(feature.id)}\n                        hover={this.manager.getHoverState?.(feature.id)}\n                        strokeScale={this.viewportScaleSqrt}\n                        onClick={this.onClickFeature}\n                        onPointerEnter={this.onPointerEnter}\n                        onPointerLeave={this.onPointerLeave}\n                    />\n                ))}\n            </g>\n        )\n    }\n\n    renderProjectedDataPatterns(): React.ReactElement | undefined {\n        if (!this.manager.hasProjectedData) return\n\n        return (\n            <defs>\n                <ProjectedDataLegendPattern\n                    idSuffix={this.manager.patternIdSuffix}\n                    scale={this.manager.patternScale}\n                />\n\n                {this.binColors.map((color, index) => (\n                    <ProjectedDataPattern\n                        idSuffix={this.manager.patternIdSuffix}\n                        key={`${color}-${index}`}\n                        color={color}\n                        scale={this.featurePatternScale}\n                    />\n                ))}\n            </defs>\n        )\n    }\n\n    private renderCountryWithData(\n        feature: MapRenderFeature,\n        series: ChoroplethSeries\n    ): React.ReactElement {\n        return (\n            <CountryWithData\n                key={feature.id}\n                feature={feature}\n                series={series}\n                isSelected={this.manager.isSelected?.(feature.id)}\n                hover={this.manager.getHoverState?.(feature.id)}\n                strokeScale={this.viewportScaleSqrt}\n                onClick={this.onClickFeature}\n                onPointerEnter={this.onPointerEnter}\n                onPointerLeave={this.onPointerLeave}\n            />\n        )\n    }\n\n    renderFeaturesWithData(): React.ReactElement | undefined {\n        if (this.sortedFeaturesWithHistoricalData.length === 0) return\n\n        return (\n            <g id={makeFigmaId(\"countries-with-data\")}>\n                {this.sortedFeaturesWithHistoricalData.map((feature) => {\n                    const series = this.choroplethData.get(feature.id)\n                    if (!series) return null\n                    return this.renderCountryWithData(feature, series)\n                })}\n            </g>\n        )\n    }\n\n    renderFeaturesWithProjectedData(): React.ReactElement | undefined {\n        if (this.sortedFeaturesWithProjectedData.length === 0) return\n\n        return (\n            <g id={makeFigmaId(\"countries-with-projected-data\")}>\n                {this.sortedFeaturesWithProjectedData.map((feature) => {\n                    const series = this.choroplethData.get(feature.id)\n                    if (!series) return null\n                    return this.renderCountryWithData(feature, series)\n                })}\n                <g id={makeFigmaId(\"projected-data-patterns\")}>\n                    {this.sortedFeaturesWithProjectedData.map((feature) => {\n                        const series = this.choroplethData.get(feature.id)\n                        if (!series) return null\n                        return (\n                            <ProjectedDataOverlay\n                                key={feature.id}\n                                feature={feature}\n                                series={series}\n                                patternIdSuffix={this.manager.patternIdSuffix}\n                                hover={this.manager.getHoverState?.(feature.id)}\n                            />\n                        )\n                    })}\n                </g>\n            </g>\n        )\n    }\n\n    renderStatic(): React.ReactElement {\n        return (\n            <g id={makeFigmaId(\"map\")} transform={this.matrixTransform}>\n                {this.renderProjectedDataPatterns()}\n                {this.renderFeaturesInBackground()}\n                {this.renderFeaturesWithoutData()}\n                {this.renderFeaturesWithData()}\n                {this.renderFeaturesWithProjectedData()}\n                {this.renderInternalAnnotations()}\n                {this.renderExternalAnnotations()}\n            </g>\n        )\n    }\n\n    override componentDidMount(): void {\n        document.addEventListener(\"pointerdown\", this.onDocumentPointerDown, {\n            passive: true,\n        })\n    }\n\n    override componentWillUnmount(): void {\n        document.removeEventListener(\"pointerdown\", this.onDocumentPointerDown)\n    }\n\n    renderInteractive(): React.ReactElement {\n        const { bounds, matrixTransform } = this\n\n        // @ts-expect-error this needs to be referenced here or it will be recomputed on every mousemove\n        const _cachedCentroids = this.quadtree\n\n        // SVG layering is based on order of appearance in the element tree (later elements rendered on top)\n        // The ordering here is quite careful\n        return (\n            <g\n                ref={this.base}\n                className={CHOROPLETH_MAP_CLASSNAME}\n                onMouseDown={\n                    (ev: SVGMouseEvent): void =>\n                        ev.preventDefault() /* Without this, title may get selected while shift clicking */\n                }\n                onPointerMove={(ev): void => this.onPointerMove(ev.nativeEvent)}\n                onPointerLeave={(e) => this.onPointerLeave(e.nativeEvent)}\n                onClick={() => {\n                    // invoke a click on a feature when clicking nearby one\n                    if (this.hoverNearbyFeature)\n                        this.onClick(this.hoverNearbyFeature)\n                }}\n                style={{\n                    cursor: this.hoverFeature ? \"pointer\" : undefined,\n                    // Remove the 300ms delay on click events and double-tap-to-zoom for touch devices\n                    touchAction: \"manipulation\",\n                }}\n            >\n                <rect\n                    x={roundForSvg(bounds.x)}\n                    y={roundForSvg(bounds.y)}\n                    width={roundForSvg(bounds.width)}\n                    height={roundForSvg(bounds.height)}\n                    fill=\"rgba(255,255,255,0)\"\n                    opacity={0}\n                />\n                <g\n                    className={GEO_FEATURES_CLASSNAME}\n                    transform={matrixTransform}\n                >\n                    {this.renderProjectedDataPatterns()}\n                    {this.renderFeaturesInBackground()}\n                    {this.renderFeaturesWithoutData()}\n                    {this.renderFeaturesWithData()}\n                    {this.renderFeaturesWithProjectedData()}\n                    {this.renderInternalAnnotations()}\n                    {this.renderExternalAnnotations()}\n                </g>\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        return this.manager.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n}\n","const acos = Math.acos,\n    asin = Math.asin,\n    atan2 = Math.atan2,\n    cos = Math.cos,\n    hypot = Math.hypot,\n    max = Math.max,\n    min = Math.min,\n    PI = Math.PI,\n    sin = Math.sin,\n    radians = PI / 180,\n    degrees = 180 / PI;\n\nclass Versor {\n  static fromCartesian([x, y, z]) {\n    return [0, z, -y, x];\n  }\n  static fromAngles([l, p, g]) {\n    l *= radians / 2;\n    p *= radians / 2;\n    g = (g||0) * radians / 2;\n    const sl = sin(l), cl = cos(l);\n    const sp = sin(p), cp = cos(p);\n    const sg = sin(g), cg = cos(g);\n    return [\n      cl * cp * cg + sl * sp * sg,\n      sl * cp * cg - cl * sp * sg,\n      cl * sp * cg + sl * cp * sg,\n      cl * cp * sg - sl * sp * cg\n    ];\n  }\n  static toAngles([a, b, c, d]) {\n    return [\n      atan2(2 * (a * b + c * d), 1 - 2 * (b * b + c * c)) * degrees,\n      asin(max(-1, min(1, 2 * (a * c - d * b)))) * degrees,\n      atan2(2 * (a * d + b * c), 1 - 2 * (c * c + d * d)) * degrees\n    ];\n  }\n  static interpolateAngles(a, b) {\n    const i = Versor.interpolate(Versor.fromAngles(a), Versor.fromAngles(b));\n    return t => Versor.toAngles(i(t));\n  }\n  static interpolateLinear([a1, b1, c1, d1], [a2, b2, c2, d2]) {\n    a2 -= a1, b2 -= b1, c2 -= c1, d2 -= d1;\n    const x = new Array(4);\n    return t => {\n      const l = hypot(x[0] = a1 + a2 * t, x[1] = b1 + b2 * t, x[2] = c1 + c2 * t, x[3] = d1 + d2 * t);\n      x[0] /= l, x[1] /= l, x[2] /= l, x[3] /= l;\n      return x;\n    };\n  }\n  static interpolate([a1, b1, c1, d1], [a2, b2, c2, d2]) {\n    let dot = Versor.dot([a1, b1, c1, d1], [a2, b2, c2, d2]);\n    if (dot < 0) a2 = -a2, b2 = -b2, c2 = -c2, d2 = -d2, dot = -dot;\n    if (dot > 0.9995) return Versor.interpolateLinear([a1, b1, c1, d1], [a2, b2, c2, d2]); \n    const theta0 = acos(max(-1, min(1, dot)));\n    const x = new Array(4);\n    const l = hypot(a2 -= a1 * dot, b2 -= b1 * dot, c2 -= c1 * dot, d2 -= d1 * dot);\n    a2 /= l, b2 /= l, c2 /= l, d2 /= l;\n    return t => {\n      const theta = theta0 * t;\n      const s = sin(theta);\n      const c = cos(theta);\n      x[0] = a1 * c + a2 * s;\n      x[1] = b1 * c + b2 * s;\n      x[2] = c1 * c + c2 * s;\n      x[3] = d1 * c + d2 * s;\n      return x;\n    };\n  }\n  static dot([a1, b1, c1, d1], [a2, b2, c2, d2]) {\n    return a1 * a2 + b1 * b2 + c1 * c2 + d1 * d2;\n  }\n  static multiply([a1, b1, c1, d1], [a2, b2, c2, d2]) {\n    return [\n      a1 * a2 - b1 * b2 - c1 * c2 - d1 * d2,\n      a1 * b2 + b1 * a2 + c1 * d2 - d1 * c2,\n      a1 * c2 - b1 * d2 + c1 * a2 + d1 * b2,\n      a1 * d2 + b1 * c2 - c1 * b2 + d1 * a2\n    ];\n  }\n}\n\n/*\n * Old API\n */\n\n// Returns the unit quaternion for the given Euler rotation angles [λ, φ, γ].\nconst versor = Versor.fromAngles;\n\n// Returns the quaternion that represents q0 * q1.\nversor.multiply = Versor.multiply;\n\n// Returns the Euler rotation angles [λ, φ, γ] for the given quaternion.\nversor.rotation = Versor.toAngles;\n\n// interpolate angles\nversor.interpolate = Versor.interpolateAngles;\n\n// Returns Cartesian coordinates [x, y, z] given spherical coordinates [λ, φ].\nversor.cartesian = function(e) {\n  const l = e[0] * radians, p = e[1] * radians, cp = cos(p);\n  return [cp * cos(l), cp * sin(l), sin(p)];\n};\n\n// Returns the quaternion to rotate between two cartesian points on the sphere.\n// alpha for tweening [0,1]\n// see https://github.com/Fil/versor/issues/8\nversor.delta = function(v0, v1, alpha) {\n  if (arguments.length == 2) alpha = 1;\n\n  const sqrt = Math.sqrt;\n  function cross(v0, v1) {\n    return  [v0[1] * v1[2] - v0[2] * v1[1], v0[2] * v1[0] - v0[0] * v1[2], v0[0] * v1[1] - v0[1] * v1[0]];\n  }\n  function dot(v0, v1) {\n    return v0[0] * v1[0] + v0[1] * v1[1] + v0[2] * v1[2];\n  }\n\n  const w = cross(v0, v1), l = sqrt(dot(w, w));\n  if (!l) return [1, 0, 0, 0];\n  const t = alpha * acos(max(-1, min(1, dot(v0, v1)))) / 2, s = sin(t); // t = θ / 2\n  return [cos(t), w[2] / l * s, -w[1] / l * s, w[0] / l * s];\n};\n\nexport default versor;","import {\n    geoCentroid,\n    geoDistance,\n    geoInterpolate,\n    geoOrthographic,\n    geoPath,\n} from \"d3-geo\"\nimport { interpolateNumber } from \"d3-interpolate\"\nimport { easeCubicOut } from \"d3-ease\"\nimport * as R from \"remeda\"\nimport { EntityName, GlobeConfig, GlobeRegionName } from \"@ourworldindata/types\"\nimport {\n    Bounds,\n    excludeUndefined,\n    PartialBy,\n    PointVector,\n    checkIsOwidContinent,\n    getCountryNamesForRegion,\n    getRegionByName,\n    checkHasMembers,\n} from \"@ourworldindata/utils\"\nimport { MapConfig } from \"./MapConfig\"\nimport { getGeoFeaturesForGlobe } from \"./GeoFeatures\"\nimport {\n    DEFAULT_GLOBE_ROTATION,\n    DEFAULT_GLOBE_ROTATIONS_FOR_TIME,\n    DEFAULT_GLOBE_SIZE,\n    GLOBE_COUNTRY_ZOOM,\n    GLOBE_LATITUDE_MAX,\n    GLOBE_LATITUDE_MIN,\n    GLOBE_MAX_ZOOM,\n    GLOBE_MIN_ZOOM,\n    GLOBE_VIEWPORTS,\n    GlobeRenderFeature,\n    MAP_REGION_NAMES,\n} from \"./MapChartConstants\"\nimport { MapSelectionArray } from \"../selection/MapSelectionArray\"\nimport { action } from \"mobx\"\n\nconst geoFeaturesById = new Map<string, GlobeRenderFeature>(\n    getGeoFeaturesForGlobe().map((f: GlobeRenderFeature) => [f.id, f])\n)\n\nconst LONGITUDE_OFFSET = 40\nconst ANIMATION_DURATION = 600\n\n// Used to split countries into two halves of the globe: those within a quarter\n// turn of this reference point, and those closer to its antipode.\n// The reference point is arbitrary, but it roughly splits the world into the Americas and Europe/Africa/Asia.\nconst HEMISPHERE_REFERENCE_POINT: [number, number] = [-70, -50] // southern Chile - its antipode is in Mongolia\n\n// Countries whose centroid is further away than this from the globe's center\n// point aren't considered visible. that's a little less than the 90 degrees of\n// the visible hemisphere, since we can otherwise end up with centroids where the countries themselves are barely visible (e.g. New Zealand and Spain)\nconst MAX_VISIBLE_CENTROID_DISTANCE = (65 * Math.PI) / 180\n\ninterface Target {\n    coords: [number, number]\n    zoom: number\n}\n\ninterface GlobeControllerManager {\n    mapConfig: MapConfig\n}\n\nexport class GlobeController {\n    private readonly manager: GlobeControllerManager\n\n    constructor(manager: GlobeControllerManager) {\n        this.manager = manager\n    }\n\n    private get globeConfig(): GlobeConfig {\n        return this.manager.mapConfig.globe\n    }\n\n    @action.bound showGlobe(): void {\n        this.globeConfig.isActive = true\n    }\n\n    @action.bound hideGlobe(): void {\n        this.globeConfig.isActive = false\n    }\n\n    @action.bound toggleGlobe(): void {\n        this.globeConfig.isActive = !this.globeConfig.isActive\n    }\n\n    @action.bound resetGlobe(): void {\n        this.globeConfig.rotation = DEFAULT_GLOBE_ROTATION\n        this.globeConfig.zoom = 1\n        this.globeConfig.focusCountry = undefined\n    }\n\n    @action.bound setFocusCountry(country: EntityName): void {\n        this.globeConfig.focusCountry = country\n    }\n\n    @action.bound dismissCountryFocus(): void {\n        this.globeConfig.focusCountry = undefined\n    }\n\n    @action.bound private jumpTo(target: Partial<Target>): void {\n        if (target.coords) this.globeConfig.rotation = target.coords\n        if (target.zoom) this.globeConfig.zoom = target.zoom\n    }\n\n    private showGlobeAndRotateTo(target: Target): void {\n        // if the globe isn't currently shown, jump to the offset position\n        // before switching to it so that rotating is predictable\n        if (!this.globeConfig.isActive) {\n            this.jumpTo({ coords: addLongitudeOffset(target.coords) })\n            this.showGlobe()\n        }\n\n        void this.rotateTo(target)\n    }\n\n    jumpToOwidContinent(continent: GlobeRegionName): void {\n        const target = calculateTargetForOwidContinent(continent)\n        this.jumpTo(target)\n    }\n\n    rotateToCountry(country: EntityName, zoom?: number): void {\n        const target = calculateTargetForCountry(country, zoom)\n        if (target) this.showGlobeAndRotateTo(target)\n    }\n\n    rotateToOwidContinent(continent: GlobeRegionName): void {\n        const target = calculateTargetForOwidContinent(continent)\n        this.showGlobeAndRotateTo(target)\n    }\n\n    rotateToDefaultBasedOnTime(): void {\n        const target = calculateTargetBasedOnTime()\n        this.showGlobeAndRotateTo(target)\n    }\n\n    rotateToSelection(): void {\n        const target = calculateTargetForSelection(\n            this.manager.mapConfig.selection\n        )\n        if (target) this.showGlobeAndRotateTo(target)\n    }\n\n    rotateToRegion(regionName: string): void {\n        const target = calculateTargetForRegion(regionName)\n        if (target) this.showGlobeAndRotateTo(target)\n    }\n\n    private currentAnimation?: AbortController\n    private async rotateTo(target: PartialBy<Target, \"zoom\">): Promise<void> {\n        // cancel any ongoing rotation\n        if (this.currentAnimation) {\n            this.currentAnimation.abort()\n            this.currentAnimation = undefined\n        }\n\n        // set up a new abort controller\n        const controller = new AbortController()\n        this.currentAnimation = controller\n\n        try {\n            await this._rotateTo(controller.signal, target.coords, target.zoom)\n        } catch {\n            // aborted\n        } finally {\n            if (this.currentAnimation === controller) {\n                this.currentAnimation = undefined\n            }\n        }\n    }\n\n    private async _rotateTo(\n        signal: AbortSignal,\n        targetCoords: [number, number],\n        targetZoom?: number\n    ): Promise<void> {\n        const currentCoords = this.globeConfig.rotation\n        const animatedCoords = geoInterpolate(currentCoords, targetCoords)\n\n        const currentZoom = this.globeConfig.zoom\n        const animatedZoom =\n            targetZoom !== undefined\n                ? interpolateNumber(currentZoom, targetZoom)\n                : undefined\n\n        const animPromise = new Promise<void>((resolve, reject) => {\n            const now = Date.now()\n            const step = action((): void => {\n                const elapsed = Date.now() - now\n                const t = Math.min(1, elapsed / ANIMATION_DURATION)\n\n                // Check if the animation was canceled\n                if (signal.aborted) {\n                    reject()\n                    return\n                }\n\n                // animate globe rotation\n                this.globeConfig.rotation = animatedCoords(easeCubicOut(t))\n\n                // animate zoom\n                if (animatedZoom)\n                    this.globeConfig.zoom = animatedZoom(easeCubicOut(t))\n\n                if (t < 1) {\n                    requestAnimationFrame(step)\n                } else {\n                    resolve()\n                }\n            })\n            requestAnimationFrame(step)\n        })\n\n        await animPromise\n            .catch(() => {\n                // ignore\n            })\n            .then(\n                action(() => {\n                    // ensure we end exactly at the target values\n                    this.globeConfig.rotation = targetCoords\n                    if (targetZoom !== undefined)\n                        this.globeConfig.zoom = targetZoom\n                })\n            )\n    }\n}\n\nfunction calculateTargetForCountry(\n    country: EntityName,\n    zoom?: number\n): Target | undefined {\n    const geoFeature = geoFeaturesById.get(country)\n    if (!geoFeature) return\n\n    const coords = clampLatitude(geoFeature.geoCentroid)\n\n    // make sure the whole country is visible after zooming\n    const zoomToFit = calculateZoomToFitForCountry(geoFeature)\n    const targetZoom = Math.min(zoom ?? GLOBE_COUNTRY_ZOOM, zoomToFit)\n\n    return { coords, zoom: targetZoom }\n}\n\nfunction calculateZoomToFitForCountry(feature: GlobeRenderFeature): number {\n    const centerPoint = clampLatitude(feature.geoCentroid)\n    const projection = geoOrthographic().rotate(negateCoords(centerPoint))\n\n    const corners = geoPath().projection(projection).bounds(feature.geo)\n    const bounds = Bounds.fromCorners(\n        new PointVector(...corners[0]),\n        new PointVector(...corners[1])\n    )\n\n    return calculateZoomToFitForBounds(bounds)\n}\n\nfunction calculateZoomToFitForBounds(bounds: Bounds): number {\n    // calculate the zoom needed for the bounds to be visible\n    let zoom = Math.min(\n        DEFAULT_GLOBE_SIZE / bounds.width,\n        DEFAULT_GLOBE_SIZE / bounds.height\n    )\n    if (Number.isNaN(zoom)) zoom = 1\n\n    // it's nicer to have a bit of padding around the zoomed-to area\n    zoom = zoom - 0.05\n\n    // clamp the zoom to the allowed range\n    zoom = R.clamp(zoom, { min: GLOBE_MIN_ZOOM, max: GLOBE_MAX_ZOOM })\n\n    return zoom\n}\n\nfunction calculateTargetForOwidContinent(continent: GlobeRegionName): Target {\n    const viewport = GLOBE_VIEWPORTS[continent]\n    return { coords: viewport.rotation, zoom: viewport.zoom }\n}\n\nfunction calculateTargetBasedOnTime(): Target {\n    const coords = getCoordsBasedOnTime()\n    return { coords, zoom: 1 }\n}\n\nfunction calculateTargetForRegion(regionName: string): Target | undefined {\n    const region = getRegionByName(regionName)\n    if (!region || !checkHasMembers(region)) return\n    const countryNames = getCountryNamesForRegion(region)\n    return calculateTargetForCountryCollection(countryNames)\n}\n\nfunction calculateTargetForSelection(\n    selection: MapSelectionArray\n): Target | undefined {\n    // if at least one country is selected, then rotate to the countries (and ignore the regions)\n    if (selection.selectedCountryNamesInForeground.length > 0) {\n        return calculateTargetForCountryCollection(\n            selection.selectedCountryNamesInForeground\n        )\n    }\n\n    // if a single owid continent is selected, then rotate to it\n    // (the hard-coded coords/zoom values are nicer than dynamically computing it)\n    if (\n        selection.selectedRegions.length === 1 &&\n        checkIsOwidContinent(selection.selectedRegions[0])\n    ) {\n        return calculateTargetForOwidContinent(\n            MAP_REGION_NAMES[\n                selection.selectedRegions[0].name\n            ] as GlobeRegionName\n        )\n    }\n\n    // rotate and zoom to all countries in the selected regions\n    const countryNames = [\n        ...selection.selectedCountryNamesInForeground,\n        ...selection.countryNamesForSelectedRegions,\n    ]\n    return calculateTargetForCountryCollection(countryNames)\n}\n\nfunction calculateTargetForCountryCollection(\n    countryNames: string[]\n): Target | undefined {\n    // early return if the selection is empty or a single country is selected\n    if (countryNames.length === 0) return\n    if (countryNames.length === 1) {\n        return calculateTargetForCountry(countryNames[0])\n    }\n\n    // find a subset of countries that can be shown on the globe,\n    // e.g. if 'Mexico', 'Guatemala' and 'Australia' are selected, then\n    // 'Australia' is dropped as it's on the opposite site from South America\n    const visibleCountries = findVisibleCountrySubset(countryNames)\n\n    // early return if no country or a single country is visible\n    if (visibleCountries.length === 0) return\n    if (visibleCountries.length === 1) {\n        return calculateTargetForCountry(visibleCountries[0])\n    }\n\n    // calculate target coords and zoom for two or more countries\n    return getCoordsAndZoomForCountryCollection(visibleCountries)\n}\n\nfunction getCoordsBasedOnTime(): [number, number] {\n    const date = new Date()\n    const hours = date.getUTCHours()\n\n    if (hours <= 7) {\n        return DEFAULT_GLOBE_ROTATIONS_FOR_TIME.UTC_MORNING\n    } else if (hours <= 15) {\n        return DEFAULT_GLOBE_ROTATIONS_FOR_TIME.UTC_MIDDAY\n    } else {\n        return DEFAULT_GLOBE_ROTATIONS_FOR_TIME.UTC_EVENING\n    }\n}\n\nfunction getCenterForCountryCollection(\n    countryNames: string[]\n): [number, number] {\n    // the spherical centroid of the countries' centroids\n    const coordinates = excludeUndefined(\n        countryNames.map((name) => geoFeaturesById.get(name)?.geoCentroid)\n    )\n    const centerPoint = geoCentroid({ type: \"MultiPoint\", coordinates })\n\n    // the centroid isn't well-defined for all inputs, e.g. there is no single\n    // point closest to two exactly antipodal points. d3 returns NaN coords in such cases.\n    if (!Number.isFinite(centerPoint[0]) || !Number.isFinite(centerPoint[1]))\n        return DEFAULT_GLOBE_ROTATION\n\n    return clampLatitude(centerPoint)\n}\n\nfunction clampLatitude([lon, lat]: [number, number]): [number, number] {\n    return [\n        lon,\n        R.clamp(lat, {\n            min: GLOBE_LATITUDE_MIN,\n            max: GLOBE_LATITUDE_MAX,\n        }),\n    ]\n}\n\nfunction getCoordsAndZoomForCountryCollection(countryNames: string[]): {\n    coords: [number, number]\n    zoom: number\n} {\n    const centerPoint = getCenterForCountryCollection(countryNames)\n    const projection = geoOrthographic().rotate(negateCoords(centerPoint))\n\n    const bounds = excludeUndefined(\n        countryNames.map((countryName) => {\n            const feature = geoFeaturesById.get(countryName)\n            if (!feature) return\n            const corners = geoPath().projection(projection).bounds(feature.geo)\n            if (corners[0][0] === Number.POSITIVE_INFINITY) return\n            return Bounds.fromCorners(\n                new PointVector(...corners[0]),\n                new PointVector(...corners[1])\n            )\n        })\n    )\n\n    // merge bounds and calculate the zoom needed for the countries to be visible\n    const mergedBounds = Bounds.merge(bounds)\n    const zoom = calculateZoomToFitForBounds(mergedBounds)\n\n    return { coords: centerPoint, zoom }\n}\n\nfunction findVisibleCountrySubset(countryNames: string[]): string[] {\n    // rotate the globe to the center point of all given countries,\n    // and find all countries that are then visible on the globe\n    const centerPoint = getCenterForCountryCollection(countryNames)\n    const visibleCountries = countryNames.filter((countryName) => {\n        const feature = geoFeaturesById.get(countryName)\n        if (!feature) return false\n\n        // check if the centroid is close enough to the center point\n        const distance = geoDistance(feature.geoCentroid, centerPoint)\n        return distance < MAX_VISIBLE_CENTROID_DISTANCE\n    })\n\n    // it's possible for no country to be visible if the countries are on opposite\n    // sides from the globe. in that case, we need to drop a subset of countries\n    if (visibleCountries.length === 0) {\n        // split countries into the two halves of the globe they're on\n        const [near, far] = partitionCountriesByHemisphere(countryNames)\n\n        // keep the bigger half\n        return near.length > far.length ? near : far\n    }\n\n    return visibleCountries\n}\n\nfunction partitionCountriesByHemisphere(\n    countryNames: string[]\n): [string[], string[]] {\n    const features = excludeUndefined(\n        countryNames.map((name) => geoFeaturesById.get(name))\n    )\n\n    // split into countries that are less and more than a quarter turn away\n    // from the reference point, i.e. into the half of the globe centered on\n    // the reference point and the opposite one\n    const [near, far] = R.partition(\n        features,\n        (feature) =>\n            geoDistance(feature.geoCentroid, HEMISPHERE_REFERENCE_POINT) <\n            Math.PI / 2\n    )\n\n    return [near.map((feature) => feature.id), far.map((feature) => feature.id)]\n}\n\nfunction addLongitudeOffset(\n    coords: [number, number],\n    offset = LONGITUDE_OFFSET\n): [number, number] {\n    return [coords[0] + offset, coords[1]]\n}\n\nfunction negateCoords(coords: [number, number]): [number, number] {\n    return [-coords[0], -coords[1]]\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport { computed, action, observable, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    geoGraticule,\n    geoOrthographic,\n    GeoPath,\n    geoPath,\n    GeoPermissibleObjects,\n} from \"d3-geo\"\nimport { Quadtree, quadtree } from \"d3-quadtree\"\nimport { select } from \"d3-selection\"\nimport { zoom } from \"d3-zoom\"\n// @ts-expect-error no types available\nimport versor from \"versor\"\nimport {\n    Bounds,\n    EntityName,\n    MapRegionName,\n    PointVector,\n    checkIsTouchEvent,\n    excludeUndefined,\n    getRelativeMouse,\n    isTouchDevice,\n    makeFigmaId,\n    roundForSvg,\n} from \"@ourworldindata/utils\"\nimport {\n    Annotation,\n    ANNOTATION_COLOR_DARK,\n    ANNOTATION_COLOR_LIGHT,\n    ChoroplethMapManager,\n    ChoroplethSeries,\n    ChoroplethSeriesByName,\n    DEFAULT_GLOBE_SIZE,\n    ExternalAnnotation,\n    GEO_FEATURES_CLASSNAME,\n    GLOBE_COUNTRY_ZOOM,\n    GLOBE_LATITUDE_MAX,\n    GLOBE_LATITUDE_MIN,\n    GLOBE_MAX_ZOOM,\n    GLOBE_MIN_ZOOM,\n    GlobeRenderFeature,\n    InternalAnnotation,\n    MAP_HOVER_TARGET_RANGE,\n    RenderFeature,\n    SVGMouseEvent,\n} from \"./MapChartConstants\"\nimport { MapConfig } from \"./MapConfig\"\nimport { getGeoFeaturesForGlobe } from \"./GeoFeatures\"\nimport {\n    BackgroundCountry,\n    CountryWithData,\n    CountryWithNoData,\n    ProjectedDataOverlay,\n    ExternalValueAnnotation,\n    InternalValueAnnotation,\n    ProjectedDataPattern,\n    ProjectedDataLegendPattern,\n} from \"./MapComponents\"\nimport { Patterns, makePatternId } from \"../core/GrapherConstants\"\nimport {\n    calculateDistance,\n    detectNearbyFeature,\n    isPointPlacedOnVisibleHemisphere,\n    sortFeaturesByInteractionStateAndSize,\n    getForegroundFeatures,\n    isValidGlobeRegionName,\n} from \"./MapHelpers\"\nimport {\n    makeInternalAnnotationForFeature,\n    makeExternalAnnotationForFeature,\n    repositionAndFilterExternalAnnotations,\n} from \"./MapAnnotations\"\nimport * as R from \"remeda\"\nimport { GlobeController } from \"./GlobeController\"\nimport { isDarkColor } from \"../color/ColorUtils\"\nimport { MapSelectionArray } from \"../selection/MapSelectionArray\"\n\nconst DEFAULT_SCALE = geoOrthographic().scale()\n\n@observer\nexport class ChoroplethGlobe extends React.Component<{\n    manager: ChoroplethMapManager\n}> {\n    base = React.createRef<SVGGElement>()\n\n    private hoverEnterFeature: GlobeRenderFeature | undefined = undefined\n    private hoverNearbyFeature: GlobeRenderFeature | undefined = undefined\n\n    private isPanningOrZooming = false\n\n    constructor(props: { manager: ChoroplethMapManager }) {\n        super(props)\n\n        makeObservable<\n            ChoroplethGlobe,\n            \"hoverEnterFeature\" | \"hoverNearbyFeature\"\n        >(this, {\n            hoverEnterFeature: observable,\n            hoverNearbyFeature: observable,\n        })\n    }\n\n    @computed private get isTouchDevice(): boolean {\n        return isTouchDevice()\n    }\n\n    @computed private get manager(): ChoroplethMapManager {\n        return this.props.manager\n    }\n\n    @computed get mapConfig(): MapConfig {\n        return this.manager.mapConfig\n    }\n\n    @computed private get globeController(): GlobeController {\n        return this.manager.globeController ?? new GlobeController(this)\n    }\n\n    @computed.struct private get bounds(): Bounds {\n        return this.manager.choroplethMapBounds\n    }\n\n    @computed private get selectionArray(): MapSelectionArray {\n        return this.manager.selectionArray ?? new MapSelectionArray()\n    }\n\n    @computed.struct private get choroplethData(): ChoroplethSeriesByName {\n        return this.manager.choroplethData\n    }\n\n    @computed private get features(): GlobeRenderFeature[] {\n        return getGeoFeaturesForGlobe()\n    }\n\n    @computed private get featuresById(): Map<string, GlobeRenderFeature> {\n        return new Map(this.features.map((feature) => [feature.id, feature]))\n    }\n\n    @computed private get foregroundFeatures(): GlobeRenderFeature[] {\n        return getForegroundFeatures(this.features, this.selectionArray)\n    }\n\n    @computed\n    private get backgroundFeatures(): GlobeRenderFeature[] {\n        return _.difference(this.features, this.foregroundFeatures)\n    }\n\n    @computed private get backgroundFeatureIdSet(): Set<EntityName> {\n        return new Set(this.backgroundFeatures.map((feature) => feature.id))\n    }\n\n    @computed private get featuresWithData(): GlobeRenderFeature[] {\n        return this.foregroundFeatures.filter((feature) =>\n            this.choroplethData.has(feature.id)\n        )\n    }\n\n    @computed private get sortedFeaturesWithData(): GlobeRenderFeature[] {\n        // sort features so that hovered or selected features are rendered last\n        // and smaller countries are rendered on top of bigger ones\n        return sortFeaturesByInteractionStateAndSize(this.featuresWithData, {\n            isHovered: (featureId: string) =>\n                this.manager.getHoverState?.(featureId).active ?? false,\n            isSelected: (featureId) =>\n                this.manager.isSelected?.(featureId) ?? false,\n        })\n    }\n\n    @computed\n    private get sortedFeaturesWithHistoricalData(): GlobeRenderFeature[] {\n        return this.sortedFeaturesWithData.filter(\n            (feature) => !this.choroplethData.get(feature.id)?.isProjection\n        )\n    }\n\n    @computed\n    private get sortedFeaturesWithProjectedData(): GlobeRenderFeature[] {\n        return this.sortedFeaturesWithData.filter(\n            (feature) => this.choroplethData.get(feature.id)?.isProjection\n        )\n    }\n\n    @computed private get featuresWithNoData(): GlobeRenderFeature[] {\n        return _.difference(this.foregroundFeatures, this.featuresWithData)\n    }\n\n    @computed private get binColors(): string[] {\n        return this.manager.binColors ?? []\n    }\n\n    // Map uses a hybrid approach to mouseover\n    // If mouse is inside an element, that is prioritized\n    // Otherwise we do a quadtree search for the closest center point of a feature bounds,\n    // so that we can hover very small countries without trouble\n    @action.bound private detectNearbyFeature(\n        event: PointerEvent,\n        maxDistance = MAP_HOVER_TARGET_RANGE\n    ): GlobeRenderFeature | undefined {\n        if (this.hoverEnterFeature || !this.base.current) return\n\n        const nearbyFeature = detectNearbyFeature({\n            quadtree: this.quadtree,\n            element: this.base.current,\n            event,\n            distance: maxDistance,\n        })\n\n        if (!nearbyFeature) {\n            this.hoverNearbyFeature = undefined\n            this.manager.onMapMouseLeave?.()\n            return\n        }\n\n        if (nearbyFeature.id !== this.hoverNearbyFeature?.id) {\n            this.hoverNearbyFeature = nearbyFeature\n            this.manager.onMapMouseOver?.(nearbyFeature.geo)\n        }\n\n        return nearbyFeature\n    }\n\n    @computed private get globeSize(): number {\n        return Math.min(this.bounds.width, this.bounds.height)\n    }\n\n    @computed private get globeCenter(): [number, number] {\n        return [\n            this.bounds.left + this.bounds.width / 2,\n            this.bounds.top + this.bounds.height / 2,\n        ]\n    }\n\n    private computeProjectionScale(zoomScale: number): number {\n        return zoomScale * DEFAULT_SCALE * (this.globeSize / DEFAULT_GLOBE_SIZE)\n    }\n\n    @computed private get minScale(): number {\n        return this.computeProjectionScale(GLOBE_MIN_ZOOM)\n    }\n\n    @computed private get maxScale(): number {\n        return this.computeProjectionScale(GLOBE_MAX_ZOOM)\n    }\n\n    @computed private get globeScale(): number {\n        return this.computeProjectionScale(this.zoomScale)\n    }\n\n    @computed private get globeRadius(): number {\n        return (this.globeSize / 2) * this.zoomScale\n    }\n\n    @computed private get globeRotation(): [number, number] {\n        // d3 projections expect [-lon, -lat] to rotate to [lon, lat]\n        return [\n            -this.mapConfig.globe.rotation[0],\n            -this.mapConfig.globe.rotation[1],\n        ]\n    }\n\n    @computed private get zoomScale(): number {\n        return this.mapConfig.globe.zoom\n    }\n\n    @computed private get projection(): any {\n        return geoOrthographic()\n            .scale(this.globeScale)\n            .translate(this.globeCenter)\n            .rotate(this.globeRotation)\n    }\n\n    @computed private get globePath(): GeoPath<any, GeoPermissibleObjects> {\n        return geoPath().digits(1).projection(this.projection)\n    }\n\n    private getPath(feature: GlobeRenderFeature): string {\n        return this.globePath(feature.geo) ?? \"\"\n    }\n\n    private isFeatureCentroidVisibleOnGlobe(\n        feature: GlobeRenderFeature,\n        threshold = 0 // 1 = at the exact center, 0 = anywhere on the visible hemisphere\n    ): boolean {\n        return isPointPlacedOnVisibleHemisphere(\n            feature.geoCentroid,\n            this.mapConfig.globe.rotation,\n            threshold\n        )\n    }\n\n    @computed private get graticulePath(): string {\n        const graticule = geoGraticule().step([10, 10])()\n        return this.globePath(graticule) ?? \"\"\n    }\n\n    @computed private get equatorPath(): string {\n        const equator = geoGraticule().step([0, 360])()\n        return this.globePath(equator) ?? \"\"\n    }\n\n    @computed private get visibleFeatures(): GlobeRenderFeature[] {\n        return this.foregroundFeatures.filter((feature) =>\n            this.isFeatureCentroidVisibleOnGlobe(feature)\n        )\n    }\n\n    @computed private get quadtree(): Quadtree<GlobeRenderFeature> {\n        return quadtree<GlobeRenderFeature>()\n            .x((feature) => this.projection(feature.geoCentroid)[0])\n            .y((feature) => this.projection(feature.geoCentroid)[1])\n            .addAll(this.visibleFeatures)\n    }\n\n    @computed private get shouldShowAnnotations(): boolean {\n        return !!(\n            this.manager.mapColumn.hasNumberFormatting &&\n            !this.mapConfig.tooltipUseCustomLabels\n        )\n    }\n\n    private formatAnnotationLabel(value: string | number): string {\n        return this.manager.mapColumn.formatValueShortWithAbbreviations(value)\n    }\n\n    @computed private get annotationCandidateFeatures(): GlobeRenderFeature[] {\n        if (!this.shouldShowAnnotations) return []\n\n        return excludeUndefined(\n            this.mapConfig.selection.selectedCountryNamesInForeground.map(\n                (name) => this.featuresById.get(name)\n            )\n        ).filter((feature) => this.foregroundFeatures.includes(feature))\n    }\n\n    /* Naively placed annotations that might be overlapping */\n    @computed\n    private get annotationCandidates(): Annotation[] {\n        return excludeUndefined(\n            this.annotationCandidateFeatures\n                .filter(\n                    (feature): feature is GlobeRenderFeature =>\n                        feature !== undefined &&\n                        // don't show annotations for countries that are currently\n                        // on the back side of the globe or at the edge\n                        this.isFeatureCentroidVisibleOnGlobe(feature, 0.3)\n                )\n                .map((feature) => {\n                    const series = this.choroplethData.get(feature.id)\n                    if (!series) return\n\n                    const labelColor = isDarkColor(series.color)\n                        ? ANNOTATION_COLOR_LIGHT\n                        : ANNOTATION_COLOR_DARK\n                    const fontSizeScale = 1 / this.zoomScale\n\n                    const args = {\n                        feature,\n                        projection: this.projection,\n                        formattedValue: this.formatAnnotationLabel(\n                            series.value\n                        ),\n                        color: labelColor,\n                    }\n\n                    // try to fit the annotation inside the feature\n                    const internalAnnotation =\n                        makeInternalAnnotationForFeature(args)\n                    if (internalAnnotation) return internalAnnotation\n\n                    // place the annotation outside of the feature\n                    const externalAnnotation = makeExternalAnnotationForFeature(\n                        { ...args, fontSizeScale }\n                    )\n                    if (externalAnnotation) return externalAnnotation\n\n                    return undefined\n                })\n        )\n    }\n\n    @computed\n    private get internalAnnotations(): InternalAnnotation[] {\n        return this.annotationCandidates.filter(\n            (annotation) => annotation.type === \"internal\"\n        )\n    }\n\n    @computed\n    private get externalAnnotations(): ExternalAnnotation[] {\n        const { projection, backgroundFeatureIdSet } = this\n        const annotations = this.annotationCandidates.filter(\n            (annotation) => annotation.type === \"external\"\n        )\n        return repositionAndFilterExternalAnnotations({\n            annotations,\n            projection,\n            backgroundFeatureIdSet,\n        })\n    }\n\n    @action.bound private rotateGlobe(targetCoords: [number, number]): void {\n        this.mapConfig.globe.rotation = [\n            -targetCoords[0],\n            // Clamping the latitude to [-90, 90] would allow rotation up to the poles.\n            // However, the panning strategy used doesn't work well around the poles.\n            // That's why we clamp the latitude to a narrower range.\n            -R.clamp(targetCoords[1], {\n                min: GLOBE_LATITUDE_MIN,\n                max: GLOBE_LATITUDE_MAX,\n            }),\n        ]\n    }\n\n    @action.bound private zoomGlobe(delta: number): void {\n        const sensitivity = 0.01\n        const newZoom = this.zoomScale * (1 + delta * sensitivity)\n        this.mapConfig.globe.zoom = R.clamp(newZoom, {\n            min: GLOBE_MIN_ZOOM,\n            max: GLOBE_MAX_ZOOM,\n        })\n    }\n\n    @computed private get hoverFeature(): GlobeRenderFeature | undefined {\n        return this.hoverEnterFeature || this.hoverNearbyFeature\n    }\n\n    @action.bound private clearHover(): void {\n        this.hoverEnterFeature = undefined\n        this.hoverNearbyFeature = undefined\n        this.manager.onMapMouseLeave?.()\n        this.globeController.dismissCountryFocus()\n    }\n\n    @action.bound private onPointerMove(event: PointerEvent): void {\n        this.detectNearbyFeature(event)\n    }\n\n    @action.bound private onPointerEnterFeature(\n        feature: GlobeRenderFeature,\n        event: PointerEvent\n    ): void {\n        // ignore pointer enter if panning or zooming\n        if (this.isPanningOrZooming) return\n        // on touch, let the click handler set hover so the\n        // tooltip doesn't appear before the click event fires\n        if (event.pointerType === \"touch\") return\n        this.setHoverEnterFeature(feature)\n    }\n\n    @action.bound private onPointerLeaveFeature(event: PointerEvent): void {\n        // on touch, the tooltip is dismissed via the document pointerdown handler\n        if (event.pointerType === \"touch\") return\n\n        this.clearHoverEnterFeature()\n    }\n\n    @action.bound private setHoverEnterFeature(\n        feature: GlobeRenderFeature\n    ): void {\n        if (this.hoverEnterFeature?.id === feature.id) return\n\n        this.hoverEnterFeature = feature\n        this.manager.onMapMouseOver?.(feature.geo)\n    }\n\n    @action.bound private clearHoverEnterFeature(): void {\n        this.hoverEnterFeature = undefined\n        this.manager.onMapMouseLeave?.()\n    }\n\n    @action.bound private onClick(feature: GlobeRenderFeature): void {\n        this.setHoverEnterFeature(feature)\n\n        // reset the region if necessary\n        this.mapConfig.region = MapRegionName.World\n\n        // select/deselect the country if allowed\n        const country = feature.id\n        if (this.manager.isMapSelectionEnabled) {\n            this.mapConfig.selection.toggleSelection(country)\n\n            // make sure country focus is dismissed for unselected countries\n            if (!this.mapConfig.selection.selectedSet.has(country))\n                this.globeController.dismissCountryFocus()\n        }\n\n        // rotate to the selected country on mobile\n        if (!this.manager.isMapSelectionEnabled) {\n            // only zoom in on click, never zoom out\n            const zoom = Math.max(GLOBE_COUNTRY_ZOOM, this.mapConfig.globe.zoom)\n            this.globeController.rotateToCountry(country, zoom)\n        }\n    }\n\n    @action.bound private onClickFeature(\n        feature: GlobeRenderFeature,\n        event: SVGMouseEvent\n    ): void {\n        // Don't invoke a second click on the parent\n        // that catches clicks on 'nearby' features\n        event.stopPropagation()\n\n        this.onClick(feature)\n    }\n\n    @action.bound private onDocumentPointerDown(): void {\n        this.clearHover()\n    }\n\n    private setUpPanningAndZooming(): void {\n        const base = this.base.current\n        if (!base) return\n\n        // Possible interaction types are\n        // - zoom-scroll: zooming by scrolling via the wheel event\n        // - zoom-pinch: zooming by pinching using two fingers on touch devices\n        // - pan: panning by dragging the mouse or using a finger on touch devices\n        type InteractionType = \"zoom-scroll\" | \"zoom-pinch\" | \"pan\"\n\n        // Panning and zooming are powered by D3.\n        //\n        // Panning is adapted from https://observablehq.com/d/569d101dd5bd332b.\n        // The strategy ensures the geographic start point remains under the cursor\n        // where possible. See https://www.jasondavies.com/maps/rotate/ for more\n        // details.\n        //\n        // We could rely on D3's event.transform.k for zooming, but the\n        // transform value might be out of sync with the actual zoom level if\n        // the zoom level was changed elsewhere (e.g. by automatically zooming\n        // in on a country). That's why we compute the target zoom level ourselves.\n\n        const panAndZoom = (): any => {\n            let previousType: InteractionType | undefined\n\n            // for panning\n            let startCoords: [number, number, number],\n                startQuat: [number, number, number, number],\n                startRot: [number, number, number],\n                previousPos: [number, number]\n\n            // for zooming\n            let startDistance: number | undefined\n\n            const getInteractionType = (event: any): InteractionType => {\n                if (event.sourceEvent.type === \"wheel\") return \"zoom-scroll\"\n                if (isMultiTouchEvent(event.sourceEvent)) return \"zoom-pinch\"\n                return \"pan\"\n            }\n\n            const panningOrZoomingStart = (event: any): void => {\n                const type = getInteractionType(event)\n\n                const startPinching = (): void => {\n                    startDistance = calculatePinchDistance(event.sourceEvent)\n                }\n\n                const startPanning = (): void => {\n                    const posVector = getRelativeMouse(base, event.sourceEvent)\n                    const pos: [number, number] = [posVector.x, posVector.y]\n\n                    startCoords = versor.cartesian(this.projection.invert(pos))\n                    startRot = this.projection.rotate()\n                    startQuat = versor(startRot)\n                    previousPos = pos\n                }\n\n                if (type === \"zoom-pinch\") startPinching()\n                else if (type === \"pan\") startPanning()\n\n                previousType = type\n            }\n\n            const panningOrZooming = action((event: any): void => {\n                this.isPanningOrZooming = true\n\n                this.clearHover() // dismiss the tooltip\n                this.mapConfig.region = MapRegionName.World // reset region\n\n                const wheeling = (): void => {\n                    this.zoomGlobe(-event.sourceEvent.deltaY)\n                }\n\n                const pinching = (): void => {\n                    const distance = calculatePinchDistance(event.sourceEvent)\n\n                    if (!startDistance) {\n                        startDistance = distance\n                        return\n                    }\n\n                    const delta = distance - startDistance\n\n                    // We sometimes get two events for the same pinch gesture,\n                    // with one of the events having a delta of 0. We simply\n                    // ignore the delta-0 events. This fixes a bug where the\n                    // rendered SVG country paths would interfere with the\n                    // pinch-to-zoom gesture.\n                    if (delta === 0) return\n\n                    this.zoomGlobe(delta)\n                    startDistance = distance\n                }\n\n                const panning = (): void => {\n                    const posVector = getRelativeMouse(base, event.sourceEvent)\n                    const pos: [number, number] = [posVector.x, posVector.y]\n\n                    // True if the cursor is currently over the globe\n                    const isDraggingGlobe = isPointInCircle(posVector, {\n                        cx: this.globeCenter[0],\n                        cy: this.globeCenter[1],\n                        r: this.globeRadius,\n                    })\n\n                    if (isDraggingGlobe) {\n                        // If the user is dragging the globe, then use a\n                        // rotation strategy that ensures the geographic start\n                        // point remains under the cursor where possible\n\n                        const currCoords = versor.cartesian(\n                            this.projection.rotate(startRot).invert(pos)\n                        )\n                        const delta = versor.delta(startCoords, currCoords)\n                        const quat = versor.multiply(startQuat, delta)\n                        const rotation = versor.rotation(quat)\n\n                        // Ignore the gamma channel for more intuitive rotation\n                        // see https://observablehq.com/@d3/three-axis-rotation\n                        // for a visual explanation of three-axis rotation.\n                        // As a side effect, rotation around the poles feels off.\n                        this.rotateGlobe([rotation[0], rotation[1]])\n                    } else {\n                        // If the user's cursor is outside of the globe, then\n                        // adjust the globe's rotation based on the cursor's\n                        // movement, applying a sensitivity factor to control\n                        // the speed of rotation\n\n                        const sensitivity = 0.8\n                        const r = this.globeRotation\n                        const dx = pos[0] - previousPos[0]\n                        const dy = pos[1] - previousPos[1]\n                        this.rotateGlobe([\n                            r[0] + sensitivity * dx,\n                            r[1] - sensitivity * dy,\n                        ])\n                    }\n\n                    previousPos = pos\n                }\n\n                const type = getInteractionType(event)\n\n                // bail if a zoom-pinch gesture turned into a pan\n                // because this might lead to erratic jumps\n                if (previousType === \"zoom-pinch\" && type === \"pan\") return\n\n                if (type === \"zoom-scroll\") wheeling()\n                else if (type === \"zoom-pinch\") pinching()\n                else if (type === \"pan\") panning()\n\n                previousType = type\n            })\n\n            const panningOrZoomingEnd = (): void => {\n                this.isPanningOrZooming = false\n                startDistance = undefined\n                previousType = undefined\n            }\n\n            return zoom()\n                .scaleExtent([this.minScale, this.maxScale])\n                .touchable(() => this.isTouchDevice)\n                .on(\"start\", panningOrZoomingStart)\n                .on(\"zoom\", panningOrZooming)\n                .on(\"end\", panningOrZoomingEnd)\n        }\n\n        select(base).call(panAndZoom())\n    }\n\n    override componentDidMount(): void {\n        // rotate to the selected region\n        if (isValidGlobeRegionName(this.mapConfig.region)) {\n            this.globeController.jumpToOwidContinent(this.mapConfig.region)\n        }\n\n        document.addEventListener(\"pointerdown\", this.onDocumentPointerDown, {\n            passive: true,\n        })\n\n        this.setUpPanningAndZooming()\n    }\n\n    override componentWillUnmount(): void {\n        document.removeEventListener(\"pointerdown\", this.onDocumentPointerDown)\n    }\n\n    renderGlobeOutline(): React.ReactElement {\n        return (\n            <>\n                <circle\n                    id={makeFigmaId(\"globe-sphere\")}\n                    cx={roundForSvg(this.globeCenter[0])}\n                    cy={roundForSvg(this.globeCenter[1])}\n                    r={roundForSvg(this.globeRadius)}\n                    fill=\"#fafafa\"\n                />\n                <path\n                    id={makeFigmaId(\"globe-graticule\")}\n                    d={this.graticulePath}\n                    stroke=\"#e7e7e7\"\n                    strokeWidth={1}\n                    fill=\"none\"\n                    style={{ pointerEvents: \"none\" }}\n                />\n                <path\n                    id={makeFigmaId(\"globe-equator\")}\n                    d={this.equatorPath}\n                    stroke=\"#dadada\"\n                    strokeWidth={1}\n                    fill=\"none\"\n                    style={{ pointerEvents: \"none\" }}\n                />\n            </>\n        )\n    }\n\n    renderFeaturesInBackground(): React.ReactElement | undefined {\n        if (this.backgroundFeatures.length === 0) return\n\n        return (\n            <g id={makeFigmaId(\"countries-background\")}>\n                {this.backgroundFeatures.map((feature) => (\n                    <BackgroundCountry\n                        key={feature.id}\n                        feature={feature}\n                        path={this.getPath(feature)}\n                    />\n                ))}\n            </g>\n        )\n    }\n\n    renderFeaturesWithNoData(): React.ReactElement | undefined {\n        const {\n            featuresWithNoData,\n            manager: { inapplicableEntityNamesSet },\n        } = this\n\n        if (featuresWithNoData.length === 0) return\n\n        const { patternIdSuffix } = this.manager\n        const noDataPatternId = makePatternId(\n            Patterns.noDataPattern,\n            patternIdSuffix\n        )\n        const inapplicablePatternId = makePatternId(\n            Patterns.inapplicablePattern,\n            patternIdSuffix\n        )\n\n        return (\n            <g\n                id={makeFigmaId(\"countries-without-data\")}\n                className=\"noDataFeatures\"\n            >\n                {featuresWithNoData.map((feature) => (\n                    <CountryWithNoData\n                        key={feature.id}\n                        feature={feature}\n                        path={this.getPath(feature)}\n                        patternId={\n                            inapplicableEntityNamesSet?.has(feature.id)\n                                ? inapplicablePatternId\n                                : noDataPatternId\n                        }\n                        isSelected={this.manager.isSelected?.(feature.id)}\n                        hover={this.manager.getHoverState?.(feature.id)}\n                        onClick={this.onClickFeature}\n                        onPointerEnter={this.onPointerEnterFeature}\n                        onPointerLeave={this.onPointerLeaveFeature}\n                    />\n                ))}\n            </g>\n        )\n    }\n\n    renderProjectedDataPatterns(): React.ReactElement | undefined {\n        if (!this.manager.hasProjectedData) return\n\n        return (\n            <defs>\n                <ProjectedDataLegendPattern\n                    idSuffix={this.manager.patternIdSuffix}\n                    scale={this.manager.patternScale}\n                />\n\n                {this.binColors.map((color, index) => (\n                    <ProjectedDataPattern\n                        idSuffix={this.manager.patternIdSuffix}\n                        key={`${color}-${index}`}\n                        color={color}\n                        scale={this.manager.patternScale}\n                    />\n                ))}\n            </defs>\n        )\n    }\n\n    private renderCountryWithData(\n        feature: GlobeRenderFeature,\n        series: ChoroplethSeries\n    ): React.ReactElement {\n        return (\n            <CountryWithData\n                key={feature.id}\n                feature={feature}\n                series={series}\n                path={this.getPath(feature)}\n                isSelected={this.manager.isSelected?.(feature.id)}\n                hover={this.manager.getHoverState?.(feature.id)}\n                onClick={this.onClickFeature}\n                onPointerEnter={this.onPointerEnterFeature}\n                onPointerLeave={this.onPointerLeaveFeature}\n            />\n        )\n    }\n\n    renderFeaturesWithData(): React.ReactElement | undefined {\n        if (this.sortedFeaturesWithHistoricalData.length === 0) return\n\n        return (\n            <g id={makeFigmaId(\"countries-with-data\")}>\n                {this.sortedFeaturesWithHistoricalData.map((feature) => {\n                    const series = this.choroplethData.get(feature.id)\n                    if (!series) return null\n                    return this.renderCountryWithData(feature, series)\n                })}\n            </g>\n        )\n    }\n\n    renderFeaturesWithProjectedData(): React.ReactElement | undefined {\n        if (this.sortedFeaturesWithProjectedData.length === 0) return\n\n        return (\n            <g id={makeFigmaId(\"countries-with-projected-data\")}>\n                {this.sortedFeaturesWithProjectedData.map((feature) => {\n                    const series = this.choroplethData.get(feature.id)\n                    if (!series) return null\n                    return this.renderCountryWithData(feature, series)\n                })}\n                <g id={makeFigmaId(\"projected-data-patterns\")}>\n                    {this.sortedFeaturesWithProjectedData.map((feature) => {\n                        const series = this.choroplethData.get(feature.id)\n                        if (!series) return null\n                        return (\n                            <ProjectedDataOverlay\n                                key={feature.id}\n                                feature={feature}\n                                series={series}\n                                patternIdSuffix={this.manager.patternIdSuffix}\n                                path={this.getPath(feature)}\n                                hover={this.manager.getHoverState?.(feature.id)}\n                            />\n                        )\n                    })}\n                </g>\n            </g>\n        )\n    }\n\n    renderInternalAnnotations(): React.ReactElement | undefined {\n        if (this.internalAnnotations.length === 0) return\n\n        return (\n            <g id={makeFigmaId(\"annotations-internal\")}>\n                {this.internalAnnotations.map((annotation) => (\n                    <InternalValueAnnotation\n                        key={annotation.id}\n                        annotation={annotation}\n                        showOutline={\n                            this.choroplethData.get(annotation.id)?.isProjection\n                        }\n                    />\n                ))}\n            </g>\n        )\n    }\n\n    renderExternalAnnotations(): React.ReactElement | undefined {\n        if (this.externalAnnotations.length === 0) return\n\n        return (\n            <g\n                id={makeFigmaId(\"annotations-external\")}\n                className=\"ExternalAnnotations\"\n            >\n                {this.externalAnnotations.map((annotation) => (\n                    <ExternalValueAnnotation\n                        key={annotation.id}\n                        annotation={annotation}\n                        onPointerEnter={action((feature: RenderFeature) =>\n                            this.setHoverEnterFeature(\n                                feature as GlobeRenderFeature\n                            )\n                        )}\n                        onPointerLeave={action(() =>\n                            this.clearHoverEnterFeature()\n                        )}\n                    />\n                ))}\n            </g>\n        )\n    }\n\n    renderStatic(): React.ReactElement {\n        return (\n            <>\n                {this.renderGlobeOutline()}\n                <g id={makeFigmaId(\"globe\")}>\n                    {this.renderProjectedDataPatterns()}\n                    {this.renderFeaturesInBackground()}\n                    {this.renderFeaturesWithNoData()}\n                    {this.renderFeaturesWithData()}\n                    {this.renderFeaturesWithProjectedData()}\n                    {this.renderInternalAnnotations()}\n                    {this.renderExternalAnnotations()}\n                </g>\n            </>\n        )\n    }\n\n    renderInteractive(): React.ReactElement {\n        // @ts-expect-error this needs to be referenced here or it will be recomputed on every mousemove\n        const _cachedCentroids = this.quadtree\n\n        return (\n            <g\n                ref={this.base}\n                onMouseDown={\n                    (ev: SVGMouseEvent): void =>\n                        ev.preventDefault() /* Without this, title may get selected while shift clicking */\n                }\n                onPointerMove={(ev): void => this.onPointerMove(ev.nativeEvent)}\n                onPointerLeave={(e) =>\n                    this.onPointerLeaveFeature(e.nativeEvent)\n                }\n                onClick={() => {\n                    // invoke a click on a feature when clicking nearby one\n                    if (this.hoverNearbyFeature)\n                        this.onClick(this.hoverNearbyFeature)\n                }}\n                style={{\n                    cursor: this.hoverFeature ? \"pointer\" : undefined,\n                    // Remove the 300ms delay on click events and double-tap-to-zoom for touch devices\n                    touchAction: \"manipulation\",\n                }}\n            >\n                {this.renderGlobeOutline()}\n                <g className={GEO_FEATURES_CLASSNAME}>\n                    {this.renderProjectedDataPatterns()}\n                    {this.renderFeaturesInBackground()}\n                    {this.renderFeaturesWithNoData()}\n                    {this.renderFeaturesWithData()}\n                    {this.renderFeaturesWithProjectedData()}\n                    {this.renderInternalAnnotations()}\n                    {this.renderExternalAnnotations()}\n                </g>\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        return this.manager.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n}\n\nconst isMultiTouchEvent = (\n    event: MouseEvent | TouchEvent\n): event is TouchEvent => {\n    return checkIsTouchEvent(event) && event.touches.length >= 2\n}\n\nconst calculatePinchDistance = (event: TouchEvent): number => {\n    const { touches } = event\n    return calculateDistance(\n        [touches[0].clientX, touches[0].clientY],\n        [touches[1].clientX, touches[1].clientY]\n    )\n}\n\nfunction isPointInCircle(\n    point: PointVector,\n    circle: { cx: number; cy: number; r: number }\n): boolean {\n    const { x, y } = point\n    const { cx, cy, r } = circle\n\n    const distanceSquared = (x - cx) ** 2 + (y - cy) ** 2\n    const radiusSquared = r ** 2\n\n    return distanceSquared <= radiusSquared\n}\n","import {\n    Bounds,\n    getRelativeMouse,\n    guid,\n    exposeInstanceOnWindow,\n    HorizontalAlign,\n} from \"@ourworldindata/utils\"\nimport { observable, computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { HorizontalNumericColorLegend } from \"../legend/HorizontalNumericColorLegend\"\nimport { HorizontalCategoricalColorLegend } from \"../legend/HorizontalCategoricalColorLegend\"\nimport { HorizontalNumericColorLegendState } from \"../legend/HorizontalNumericColorLegendState\"\nimport { HorizontalCategoricalColorLegendState } from \"../legend/HorizontalCategoricalColorLegendState\"\nimport { ExternalColorLegendData } from \"../legend/HorizontalColorLegendTypes\"\n\nimport { MapTooltip } from \"./MapTooltip\"\nimport { TooltipState } from \"../tooltip/Tooltip.js\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\nimport {\n    GeoFeature,\n    MapBracket,\n    MapChartManager,\n    ChoroplethSeriesByName,\n    ChoroplethMapManager,\n    DEFAULT_STROKE_COLOR,\n    HOVER_STROKE_COLOR,\n    HOVER_STROKE_WIDTH,\n    MAP_CHART_CLASSNAME,\n    MapColumnInfo,\n    PROJECTED_DATA_LEGEND_COLOR,\n    MapViewport,\n    MAP_NARROW_FRAME_PADDING_HORIZONTAL,\n} from \"./MapChartConstants\"\nimport { MapConfig } from \"./MapConfig\"\nimport { ColorScale, INAPPLICABLE_LABEL } from \"../color/ColorScale\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    GRAPHER_MAX_TOOLTIP_WIDTH,\n    Patterns,\n    makePatternId,\n} from \"../core/GrapherConstants\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport {\n    CategoricalBin,\n    ColorScaleBin,\n    isCategoricalBin,\n    addPatternRefToBin,\n    isNoDataBin,\n    isInapplicableBin,\n    isNumericBin,\n    isProjectedDataBin,\n    mergeCategoricalBinsByLabelAndColor,\n    NumericBin,\n} from \"../color/ColorScaleBin\"\nimport {\n    BinEmphasis,\n    LegendStyleConfig,\n    toBinEmphasis,\n} from \"../legend/LegendStyleConfig\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport {\n    Color,\n    ColumnSlug,\n    EntityName,\n    GrapherVariant,\n    MapRegionName,\n} from \"@ourworldindata/types\"\nimport { ClipPath, makeClipPath } from \"../chart/ChartUtils\"\nimport { NoDataMessage } from \"../noDataMessage/NoDataMessage\"\nimport { Component, createRef, PointerEvent } from \"react\"\nimport { ChoroplethMap } from \"./ChoroplethMap\"\nimport { ChoroplethGlobe } from \"./ChoroplethGlobe\"\nimport { GlobeController } from \"./GlobeController\"\nimport { MapSelectionArray } from \"../selection/MapSelectionArray.js\"\nimport { match } from \"ts-pattern\"\nimport {\n    InapplicablePattern,\n    makeProjectedDataLegendPatternId,\n} from \"./MapComponents\"\nimport { MapChartState } from \"./MapChartState\"\nimport { ChartComponentProps } from \"../chart/ChartTypeMap.js\"\nimport { InteractionState } from \"../interaction/InteractionState\"\n\nexport type MapChartProps = ChartComponentProps<MapChartState>\n\nexport const PADDING_BETWEEN_MAP_AND_LEGEND = 8\nexport const PADDING_BELOW_MAP_LEGEND = 4\nexport const PADDING_BETWEEN_MAP_LEGENDS = 4\nexport const MAP_LEGEND_MAX_WIDTH_RATIO = 0.95\n\n@observer\nexport class MapChart\n    extends Component<MapChartProps>\n    implements ChartInterface, ChoroplethMapManager\n{\n    constructor(props: MapChartProps) {\n        super(props)\n\n        makeObservable(this, {\n            hoverBracket: observable,\n            tooltipState: observable,\n        })\n    }\n\n    private readonly tooltipId = guid()\n    private readonly renderUid = guid()\n\n    hoverBracket: MapBracket | undefined = undefined\n\n    tooltipState = new TooltipState<{\n        featureId: string\n    }>()\n\n    @computed get chartState(): MapChartState {\n        return this.props.chartState\n    }\n\n    @computed get selectionArray(): MapSelectionArray {\n        return this.chartState.selectionArray\n    }\n\n    @computed get mapColumn(): CoreColumn {\n        return this.chartState.mapColumn\n    }\n\n    @computed private get mapColumnSlug(): ColumnSlug {\n        return this.chartState.mapColumnSlug\n    }\n\n    @computed private get mapColumnInfo(): MapColumnInfo {\n        return this.chartState.mapColumnInfo\n    }\n\n    @computed get hasProjectedData(): boolean {\n        return this.mapColumnInfo.type !== \"historical\"\n    }\n\n    @computed get inapplicableEntityNamesSet(): Set<EntityName> {\n        return this.chartState.inapplicableEntityNamesSet\n    }\n\n    @computed get inapplicableColor(): Color {\n        return this.colorScale.inapplicableColor\n    }\n\n    @computed private get targetTime(): number | undefined {\n        return this.chartState.targetTime\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed get choroplethData(): ChoroplethSeriesByName {\n        return this.chartState.seriesMap\n    }\n\n    base = createRef<SVGGElement>()\n    @action.bound onMapMouseOver(feature: GeoFeature): void {\n        if (feature.id !== undefined) {\n            const featureId = feature.id as string\n            this.mapConfig.hoverCountry = featureId\n            this.tooltipState.target = { featureId }\n            this.manager.logGrapherInteractionEvent?.(\n                \"map_country_hover\",\n                featureId\n            )\n        }\n    }\n\n    @action.bound onMapPointerMove(ev: PointerEvent): void {\n        const ref = this.manager?.base?.current\n        if (ref) {\n            this.tooltipState.position = getRelativeMouse(ref, ev)\n        }\n    }\n\n    @action.bound onMapMouseLeave(): void {\n        this.mapConfig.hoverCountry = undefined\n        this.tooltipState.target = null\n    }\n\n    @computed private get manager(): MapChartManager {\n        return this.chartState.manager\n    }\n\n    @computed get globeController(): GlobeController {\n        return this.manager.globeController ?? new GlobeController(this)\n    }\n\n    @computed get mapViewport(): MapViewport | undefined {\n        return this.manager.mapViewport\n    }\n\n    @computed get isFaceted(): boolean | undefined {\n        return this.manager.isFaceted\n    }\n\n    @computed get isMapSelectionEnabled(): boolean {\n        return !!this.manager.isMapSelectionEnabled\n    }\n\n    override componentWillUnmount(): void {\n        this.onMapMouseLeave()\n        this.onLegendMouseLeave()\n        document.removeEventListener(\"keydown\", this.onDocumentKeyDown)\n    }\n\n    @action.bound onLegendMouseEnter(bracket: MapBracket): void {\n        this.manager.logGrapherInteractionEvent?.(\n            \"map_legend_hover\",\n            bracket.label\n        )\n    }\n\n    @action.bound onLegendMouseOver(bracket: MapBracket): void {\n        this.hoverBracket = bracket\n    }\n\n    @action.bound onLegendMouseLeave(): void {\n        this.hoverBracket = undefined\n    }\n\n    @computed get patternScale(): number {\n        return this.manager.patternScale ?? 1\n    }\n\n    @computed get patternIdSuffix(): string | undefined {\n        return this.manager.patternIdSuffix\n    }\n\n    @computed get mapConfig(): MapConfig {\n        return this.chartState.mapConfig\n    }\n\n    @action.bound onRegionChange(value: MapRegionName): void {\n        this.mapConfig.region = value\n    }\n\n    @computed private get colorScale(): ColorScale {\n        return this.chartState.colorScale\n    }\n\n    @action.bound onDocumentKeyDown(e: KeyboardEvent): void {\n        // Hide the globe on hitting the Escape key\n        if (e.key === \"Escape\" && this.mapConfig.globe.isActive) {\n            this.globeController.hideGlobe()\n            this.globeController.resetGlobe()\n            this.mapConfig.region = MapRegionName.World\n        }\n    }\n\n    @computed get externalLegend(): ExternalColorLegendData | undefined {\n        if (this.manager.showLegend) return undefined\n\n        return {\n            numericLegendData: this.numericLegendData,\n            categoricalLegendData: this.categoricalLegendData,\n            numericLegendStyleConfig: this.legendStyleConfig,\n            categoricalLegendStyleConfig: this.legendStyleConfig,\n        }\n    }\n\n    override componentDidMount(): void {\n        exposeInstanceOnWindow(this)\n\n        document.addEventListener(\"keydown\", this.onDocumentKeyDown)\n    }\n\n    @computed private get legendData(): ColorScaleBin[] {\n        return this.colorScale.legendBins.filter((bin) => !bin.isHidden)\n    }\n\n    /** The value of the currently hovered feature/country */\n    @computed private get hoverValue(): string | number | undefined {\n        if (!this.mapConfig.hoverCountry) return undefined\n\n        if (this.inapplicableEntityNamesSet.has(this.mapConfig.hoverCountry))\n            return INAPPLICABLE_LABEL\n\n        const series = this.choroplethData.get(this.mapConfig.hoverCountry)\n        if (!series) return \"No data\"\n\n        return series.value\n    }\n\n    private isHovered(featureId: string): boolean {\n        const { mapConfig, hoverBracket } = this\n        const { externalLegendHoverBin } = this.manager\n\n        // Check if a country is focused on the globe\n        if (mapConfig.globe.focusCountry === featureId) return true\n\n        // Check if a country is hovered\n        if (mapConfig.hoverCountry === featureId) return true\n\n        // Check if the legend bracket of a country is hovered\n        const series = this.choroplethData.get(featureId)\n        const isInapplicable = this.inapplicableEntityNamesSet.has(featureId)\n        if (\n            hoverBracket?.contains(series?.value, {\n                isProjection: series?.isProjection,\n                isInapplicable,\n            })\n        )\n            return true\n\n        // Check if the external legend bracket of a country is hovered (used in faceted maps)\n        if (externalLegendHoverBin?.contains(series?.value, { isInapplicable }))\n            return true\n\n        return false\n    }\n\n    isSelected(featureId: string): boolean {\n        return this.selectionArray.selectedSet.has(featureId)\n    }\n\n    getHoverState(featureId: string): InteractionState {\n        const isHovered = this.isHovered(featureId)\n        const isHoverModeActive = !!(\n            this.hoverBracket || this.manager.externalLegendHoverBin\n        )\n        return new InteractionState(isHovered, isHoverModeActive)\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    // On narrow screens and small static exports (e.g. thumbnails), the width\n    // of the 2D map is the limiting factor, so we let the map extend into the\n    // horizontal frame padding\n    @computed private get shouldExtendMapIntoFramePadding(): boolean {\n        return (\n            !this.isFaceted &&\n            !this.mapConfig.globe.isActive &&\n            !!(this.manager.isSemiNarrow || this.manager.isStaticAndSmall)\n        )\n    }\n\n    @computed get choroplethMapBounds(): Bounds {\n        // On narrow viewports (especially on mobile), EXPAND the viewport\n        // so that it doesn't have the typical frame padding around it, but instead\n        // only a very narrow frame padding.\n        // This way, the map can expand a lot more horizontally and is displayed\n        // a lot bigger.\n        // The frame padding isn't always the same: captioned charts use\n        // GRAPHER_FRAME_PADDING_HORIZONTAL, while thumbnails and other uncaptioned\n        // charts use a size-dependent chart area padding. Since the map's bounds\n        // are positioned relative to the frame edge, their x offset is the actual\n        // padding we can extend into.\n        const expansion = Math.max(\n            0,\n            this.bounds.x - MAP_NARROW_FRAME_PADDING_HORIZONTAL\n        )\n        const bounds = this.shouldExtendMapIntoFramePadding\n            ? this.bounds.expand({ left: expansion, right: expansion })\n            : this.bounds\n\n        return bounds.padBottom(\n            this.legendHeight\n                ? this.legendHeight +\n                      PADDING_BETWEEN_MAP_AND_LEGEND +\n                      PADDING_BELOW_MAP_LEGEND\n                : 0\n        )\n    }\n\n    @computed private get shouldAddProjectionPatternToLegendBins(): boolean {\n        return match(this.mapColumnInfo)\n            .with({ type: \"historical\" }, () => false)\n            .with({ type: \"projected\" }, () => true)\n            .with({ type: \"historical+projected\" }, (info) =>\n                // Only add a pattern to the legend bins if _all_ values are projections.\n                // If there is even a single non-projected (historical) value, the legend\n                // should use solid colors.\n                this.chartState.transformedTable\n                    .get(info.slugForIsProjectionColumn)\n                    .values.every((value) => value === true)\n            )\n            .exhaustive()\n    }\n\n    private maybeAddPatternRefsToBin<Bin extends ColorScaleBin>(bin: Bin): Bin {\n        if (isNoDataBin(bin))\n            return addPatternRefToBin(\n                bin,\n                makePatternId(Patterns.noDataPattern, this.patternIdSuffix)\n            )\n\n        if (isInapplicableBin(bin))\n            return addPatternRefToBin(\n                bin,\n                makePatternId(\n                    Patterns.inapplicablePattern,\n                    this.patternIdSuffix\n                )\n            )\n\n        const overlayPatternRef = makeProjectedDataLegendPatternId(\n            this.patternIdSuffix\n        )\n\n        if (isProjectedDataBin(bin))\n            return new CategoricalBin({\n                ...bin.props,\n                color: PROJECTED_DATA_LEGEND_COLOR,\n                overlayPatternRef,\n            }) as Bin\n\n        if (this.shouldAddProjectionPatternToLegendBins)\n            return (\n                bin instanceof CategoricalBin\n                    ? new CategoricalBin({ ...bin.props, overlayPatternRef })\n                    : new NumericBin({ ...bin.props, overlayPatternRef })\n            ) as Bin\n\n        return bin\n    }\n\n    @computed get numericLegendData(): ColorScaleBin[] {\n        const numericBins = this.legendData\n            .filter((bin) => isNumericBin(bin))\n            .map((bin) => this.maybeAddPatternRefsToBin(bin))\n\n        if (this.hasCategoricalLegendData) return numericBins\n\n        // Prepend any leftover categorical bins (e.g. \"No data\" or\n        // \"Not applicable\") to the numeric legend\n        const categoricalBins = this.legendData\n            .filter((bin) => isCategoricalBin(bin))\n            .map((bin) => this.maybeAddPatternRefsToBin(bin))\n\n        return [...categoricalBins, ...numericBins]\n    }\n\n    @computed private get numMembersPerCategoricalBinByIndex(): Map<\n        number,\n        number\n    > {\n        const { chartState, legendData } = this\n        return new Map(\n            legendData\n                .filter((bin) => isCategoricalBin(bin))\n                .map((bin) => {\n                    const memberCount = chartState.series.filter((series) =>\n                        bin.contains(series.value)\n                    ).length\n                    return [bin.index, memberCount]\n                })\n        )\n    }\n\n    @computed get categoricalLegendData(): CategoricalBin[] {\n        let categoricalLegendData = this.legendData\n            .filter((bin) => isCategoricalBin(bin))\n            .map((bin) => this.maybeAddPatternRefsToBin(bin))\n\n        // Hide empty bins in thumbnails\n        if (\n            this.isStatic &&\n            this.manager.variant === GrapherVariant.Thumbnail\n        ) {\n            categoricalLegendData = categoricalLegendData.filter((bin) => {\n                const memberCount =\n                    this.numMembersPerCategoricalBinByIndex.get(bin.index) ?? 0\n                return (\n                    isNoDataBin(bin) ||\n                    isProjectedDataBin(bin) ||\n                    isInapplicableBin(bin) ||\n                    memberCount > 0\n                )\n            })\n        }\n\n        // Collapse bins that would render identical swatches (same label and\n        // color) into one, so the legend doesn't show visual duplicates\n        return mergeCategoricalBinsByLabelAndColor(categoricalLegendData)\n    }\n\n    @computed private get shouldDefineInapplicablePattern(): boolean {\n        return (\n            this.chartState.hasInapplicableBin ||\n            this.legendData.some((bin) => isInapplicableBin(bin))\n        )\n    }\n\n    @computed private get hasCategoricalLegendData(): boolean {\n        return this.categoricalLegendData.length > 1\n    }\n\n    @computed get binColors(): string[] {\n        return this.legendData.map((bin) => bin.color)\n    }\n\n    @computed private get numericHoverBracket(): ColorScaleBin | undefined {\n        const { hoverBracket, hoverValue, numericLegendData } = this\n        const { externalLegendHoverBin } = this.manager\n\n        if (hoverBracket) return hoverBracket\n\n        if (hoverValue !== undefined)\n            return numericLegendData.find((bin) => bin.contains(hoverValue))\n\n        return externalLegendHoverBin\n    }\n\n    @computed private get categoricalHoverBracket():\n        | CategoricalBin\n        | undefined {\n        const { hoverBracket, hoverValue, categoricalLegendData } = this\n\n        if (hoverBracket && hoverBracket instanceof CategoricalBin)\n            return hoverBracket\n\n        if (hoverValue !== undefined)\n            return categoricalLegendData.find((bin) => bin.contains(hoverValue))\n\n        return undefined\n    }\n\n    private readonly resolveLegendBinEmphasis = (\n        bin: ColorScaleBin\n    ): Emphasis => {\n        if (!this.categoricalHoverBracket && !this.numericHoverBracket)\n            return Emphasis.Default\n\n        // Check if this bin is being hovered\n        if (\n            this.categoricalHoverBracket &&\n            bin.equals(this.categoricalHoverBracket)\n        ) {\n            return Emphasis.Highlighted\n        }\n        if (this.numericHoverBracket && bin.equals(this.numericHoverBracket)) {\n            return Emphasis.Highlighted\n        }\n\n        return Emphasis.Muted\n    }\n\n    @computed private get numericLegendEmphasis(): BinEmphasis {\n        return toBinEmphasis(\n            this.numericLegendData,\n            this.resolveLegendBinEmphasis\n        )\n    }\n\n    @computed private get categoricalLegendEmphasis(): BinEmphasis {\n        return toBinEmphasis(\n            this.categoricalLegendData,\n            this.resolveLegendBinEmphasis\n        )\n    }\n\n    private readonly legendStyleConfig: LegendStyleConfig = {\n        marker: {\n            default: { stroke: DEFAULT_STROKE_COLOR },\n            highlighted: {\n                stroke: HOVER_STROKE_COLOR,\n                strokeWidth: HOVER_STROKE_WIDTH,\n            },\n        },\n    }\n\n    @computed private get legendMaxWidth(): number {\n        // it seems nice to have just a little bit of extra padding left and right\n        return this.bounds.width * MAP_LEGEND_MAX_WIDTH_RATIO\n    }\n\n    @computed private get legendX(): number {\n        return this.bounds.x + (this.bounds.width - this.legendMaxWidth) / 2\n    }\n\n    @computed private get legendHeight(): number {\n        return this.categoryLegendHeight + this.numericLegendHeight\n    }\n\n    @computed private get numericLegendHeight(): number {\n        return this.numericLegendState?.height ?? 0\n    }\n\n    @computed private get categoryLegendHeight(): number {\n        return this.categoryLegendState?.height ?? 0\n    }\n\n    @computed private get categoryLegendState():\n        | HorizontalCategoricalColorLegendState\n        | undefined {\n        if (!this.manager.showLegend || !this.hasCategoricalLegendData)\n            return undefined\n        return new HorizontalCategoricalColorLegendState(\n            this.categoricalLegendData,\n            {\n                baseFontSize: this.fontSize,\n                width: this.legendMaxWidth,\n                align: HorizontalAlign.center,\n            }\n        )\n    }\n\n    @computed private get numericLegendState():\n        | HorizontalNumericColorLegendState\n        | undefined {\n        if (!this.manager.showLegend || this.numericLegendData.length <= 1)\n            return undefined\n        return new HorizontalNumericColorLegendState(this.numericLegendData, {\n            baseFontSize: this.fontSize,\n            maxWidth: this.legendMaxWidth,\n            align: HorizontalAlign.center,\n            binHeight: this.numericBinHeight,\n        })\n    }\n\n    @computed private get categoryLegendY(): number {\n        if (!this.categoryLegendState) return 0\n\n        return (\n            this.bounds.bottom -\n            this.categoryLegendHeight -\n            PADDING_BELOW_MAP_LEGEND\n        )\n    }\n\n    @computed private get numericLegendY(): number {\n        if (!this.numericLegendState) return 0\n        return (\n            this.bounds.bottom -\n            this.numericLegendHeight -\n            PADDING_BELOW_MAP_LEGEND -\n            // If present, the category legend is placed below the numeric legend\n            (this.categoryLegendState\n                ? this.categoryLegendHeight + PADDING_BETWEEN_MAP_LEGENDS\n                : 0)\n        )\n    }\n\n    @computed get isStatic(): boolean {\n        return this.manager.isStatic ?? false\n    }\n\n    @computed private get clipPath(): ClipPath {\n        return makeClipPath({\n            renderUid: this.renderUid,\n            box: this.choroplethMapBounds,\n        })\n    }\n\n    @computed private get numericBinHeight(): number {\n        return 0.625 * this.fontSize\n    }\n\n    renderMapLegend(): React.ReactElement {\n        const { numericLegendState, categoryLegendState } = this\n\n        return (\n            <>\n                {numericLegendState && (\n                    <HorizontalNumericColorLegend\n                        state={numericLegendState}\n                        x={this.legendX}\n                        y={this.numericLegendY}\n                        interactive={!this.isStatic}\n                        styleConfig={this.legendStyleConfig}\n                        binEmphasis={this.numericLegendEmphasis}\n                        onMouseEnter={this.onLegendMouseEnter}\n                        onMouseOver={this.onLegendMouseOver}\n                        onMouseLeave={this.onLegendMouseLeave}\n                    />\n                )}\n                {categoryLegendState && (\n                    <HorizontalCategoricalColorLegend\n                        state={categoryLegendState}\n                        x={this.legendX}\n                        y={this.categoryLegendY}\n                        interactive={!this.isStatic}\n                        styleConfig={this.legendStyleConfig}\n                        binEmphasis={this.categoricalLegendEmphasis}\n                        onMouseEnter={this.onLegendMouseEnter}\n                        onMouseOver={this.onLegendMouseOver}\n                        onMouseLeave={this.onLegendMouseLeave}\n                    />\n                )}\n            </>\n        )\n    }\n\n    renderMapOrGlobe(): React.ReactElement {\n        const mapOrGlobe = this.mapConfig.globe.isActive ? (\n            <ChoroplethGlobe manager={this} />\n        ) : (\n            <ChoroplethMap manager={this} />\n        )\n\n        return (\n            <>\n                {this.shouldDefineInapplicablePattern && (\n                    <defs>\n                        <InapplicablePattern\n                            patternId={makePatternId(\n                                Patterns.inapplicablePattern,\n                                this.patternIdSuffix\n                            )}\n                            color={this.inapplicableColor}\n                            scale={this.patternScale}\n                        />\n                    </defs>\n                )}\n                {/* Clip the map to its bounds, since the viewport can crop the\n                map (e.g. the World map cuts off some Pacific islands at its\n                edges) */}\n                {this.clipPath.element}\n                <g clipPath={this.clipPath.id}>{mapOrGlobe}</g>\n            </>\n        )\n    }\n\n    renderStatic(): React.ReactElement {\n        return (\n            <>\n                {this.renderMapOrGlobe()}\n                {this.renderMapLegend()}\n            </>\n        )\n    }\n\n    renderInteractive(): React.ReactElement {\n        const { tooltipState } = this\n\n        let sparklineWidth: number | undefined\n        if (this.manager.shouldPinTooltipToBottom) {\n            const windowWidth = window?.innerWidth ?? 240\n            sparklineWidth = Math.min(\n                GRAPHER_MAX_TOOLTIP_WIDTH,\n                windowWidth - 8\n            )\n        }\n\n        const tooltipCountry =\n            tooltipState.target?.featureId ??\n            // show a pinned-to-the-bottom tooltip when focused on a country\n            (this.manager.shouldPinTooltipToBottom\n                ? this.mapConfig.globe.focusCountry\n                : undefined)\n\n        return (\n            <g\n                ref={this.base}\n                className={MAP_CHART_CLASSNAME}\n                onPointerMove={this.onMapPointerMove}\n            >\n                {this.renderMapOrGlobe()}\n                {this.renderMapLegend()}\n                {tooltipCountry && (\n                    <MapTooltip\n                        id={this.tooltipId}\n                        mapColumnSlug={this.mapColumnSlug}\n                        mapColumnInfo={this.mapColumnInfo}\n                        entityName={tooltipCountry}\n                        position={tooltipState.position}\n                        fading={tooltipState.fading}\n                        timeSeriesTable={this.chartState.inputTable}\n                        formatValueForTooltip={\n                            this.chartState.formatValueForTooltip\n                        }\n                        manager={this.manager}\n                        lineColorScale={this.colorScale}\n                        targetTime={this.targetTime}\n                        targetTimes={this.manager.highlightedTimesInTooltip}\n                        inapplicableEntityNamesSet={\n                            this.inapplicableEntityNamesSet\n                        }\n                        sparklineWidth={sparklineWidth}\n                        dismissTooltip={action(() => {\n                            this.mapConfig.hoverCountry = undefined\n                            this.tooltipState.target = null\n                            this.globeController.dismissCountryFocus()\n                        })}\n                    />\n                )}\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataMessage\n                    manager={this.manager}\n                    bounds={this.props.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return this.isStatic ? this.renderStatic() : this.renderInteractive()\n    }\n}\n","import * as R from \"remeda\"\nimport { computed, makeObservable } from \"mobx\"\nimport {\n    Bounds,\n    PadObject,\n    RequiredBy,\n    VerticalAlign,\n} from \"@ourworldindata/utils\"\nimport { TextWrap } from \"@ourworldindata/components\"\nimport {\n    InitialAnchoredLabelSeries,\n    SizedAnchoredLabelSeries,\n    PlacedAnchoredLabelSeries,\n} from \"./AnchoredLabelsTypes.js\"\nimport { Emphasis } from \"../interaction/Emphasis.js\"\n\ninterface AnchoredLabelsOptions {\n    /** Font size for the labels */\n    fontSize: number\n\n    /** Font weight for the labels */\n    fontWeight?: number\n\n    /** Line height multiplier for multi-line labels (defaults to 1) */\n    lineHeight?: number\n\n    /** Maximum width for labels (no restriction by default) */\n    maxWidth?: number\n\n    /** Labels outside of this range are hidden */\n    yRange?: [number, number]\n\n    /** Minimum space between labels */\n    minSpacing?: { horizontal: number; vertical: number }\n\n    /** Controls how the label is aligned relative to the y-position */\n    verticalAlign?: VerticalAlign\n\n    /** Controls how labels are anchored at their x position */\n    textAnchor?: \"start\" | \"end\"\n\n    /** Horizontal gap between the anchor point and the text */\n    labelPadding?: number\n\n    /**\n     * If set, reserves a circular zone of this radius around each anchor\n     * point that other labels must not overlap\n     */\n    anchorCollisionRadius?: number\n\n    /** Function to resolve collisions between two overlapping labels by choosing which one to keep */\n    resolveCollision?: (\n        s1: InitialAnchoredLabelSeries,\n        s2: InitialAnchoredLabelSeries\n    ) => InitialAnchoredLabelSeries\n}\n\n/**\n * Anchored labels are tied to a specific (x, y) position on the chart.\n * AnchoredLabelsState resolves collisions by hiding overlapping labels and\n * computes the final position for each label.\n */\nexport class AnchoredLabelsState {\n    private readonly initialSeries: InitialAnchoredLabelSeries[]\n    private readonly initialOptions: AnchoredLabelsOptions\n\n    private readonly defaultOptions = {\n        lineHeight: 1,\n        maxWidth: Infinity,\n        minSpacing: { horizontal: 4, vertical: 2 },\n        verticalAlign: VerticalAlign.middle,\n        fontWeight: 400,\n        textAnchor: \"start\",\n        labelPadding: 4,\n        anchorCollisionRadius: 0,\n    } as const satisfies Partial<AnchoredLabelsOptions>\n\n    constructor(\n        series: InitialAnchoredLabelSeries[],\n        options: AnchoredLabelsOptions\n    ) {\n        this.initialSeries = series\n        this.initialOptions = options\n        makeObservable(this)\n    }\n\n    @computed private get options(): RequiredBy<\n        AnchoredLabelsOptions,\n        keyof typeof this.defaultOptions\n    > {\n        return { ...this.defaultOptions, ...this.initialOptions }\n    }\n\n    @computed get fontSize(): number {\n        return this.options.fontSize\n    }\n\n    @computed get textAnchor(): \"start\" | \"end\" {\n        return this.options.textAnchor\n    }\n\n    @computed get labelPadding(): number {\n        return this.options.labelPadding\n    }\n\n    /** Extra padding applied around labels for collision detection */\n    @computed private get collisionPadding(): PadObject {\n        const { minSpacing } = this.options\n\n        const verticalMargin =\n            minSpacing.vertical > 0 ? minSpacing.vertical / 2 : 0\n        const horizontalMargin =\n            minSpacing.horizontal > 0 ? minSpacing.horizontal / 2 : 0\n\n        return {\n            top: verticalMargin,\n            bottom: verticalMargin,\n            right: horizontalMargin,\n            left: horizontalMargin,\n        }\n    }\n\n    @computed\n    private get sizedSeries(): SizedAnchoredLabelSeries[] {\n        const {\n            fontSize,\n            fontWeight,\n            maxWidth,\n            verticalAlign,\n            lineHeight,\n            textAnchor,\n        } = this.options\n\n        return this.initialSeries.map((series) => {\n            const { label, position } = series\n\n            const textWrap = new TextWrap({\n                text: label,\n                maxWidth,\n                fontSize,\n                fontWeight,\n                lineHeight,\n                verticalAlign,\n            })\n\n            const isLeftAnchored = textAnchor === \"start\"\n            const direction = isLeftAnchored ? 1 : -1\n\n            const textPosition = {\n                x: position.x + direction * this.labelPadding, // Apply padding\n                y: position.y,\n            }\n\n            // Bounds wrap the rendered label text and are used for overlap checks.\n            const boundsPosition = {\n                x: isLeftAnchored\n                    ? textPosition.x\n                    : textPosition.x - textWrap.width,\n                y: textPosition.y - textWrap.height / 2,\n            }\n            const bounds = new Bounds(\n                boundsPosition.x,\n                boundsPosition.y,\n                textWrap.width,\n                textWrap.height\n            )\n\n            return { ...series, textWrap, bounds, textPosition }\n        })\n    }\n\n    @computed get series(): PlacedAnchoredLabelSeries[] {\n        const { resolveCollision, yRange } = this.options\n\n        const series = this.sizedSeries.map((series) => ({\n            ...series,\n            // Bounds used to detect collisions. They're a bit larger than the\n            // text bounds to account for the minimum spacing between labels.\n            collisionBounds: series.bounds.expand(this.collisionPadding),\n            // Bounds used to detect collisions with the anchor element\n            anchorBounds: Bounds.forDot(\n                series.position.x,\n                series.position.y,\n                this.options.anchorCollisionRadius\n            ),\n            // None of the series are initially hidden\n            isHidden: false,\n        }))\n\n        // Hide labels that are outside of the specified y-value range\n        if (yRange) {\n            for (const s1 of series) {\n                if (s1.isHidden) continue\n\n                if (s1.bounds.top < yRange[1] || s1.bounds.bottom > yRange[0]) {\n                    s1.isHidden = true\n                }\n            }\n        }\n\n        // Higher-emphasis labels are preferred when collisions are resolved\n        const emphasisRank = (s: InitialAnchoredLabelSeries): number => {\n            switch (s.emphasis) {\n                case Emphasis.Highlighted:\n                    return 2\n                case Emphasis.Muted:\n                    return 0\n                default:\n                    return 1\n            }\n        }\n\n        // Hide labels that are overlapping with an anchor element\n        if (this.options.anchorCollisionRadius) {\n            for (const s1 of series) {\n                for (const s2 of series) {\n                    if (s1.seriesName === s2.seriesName) continue\n                    if (s1.collisionBounds.intersects(s2.anchorBounds)) {\n                        // Keep s1 if it's more emphasized than the series that\n                        // owns the anchor, tolerating the overlap\n                        if (emphasisRank(s1) > emphasisRank(s2)) continue\n                        s1.isHidden = true\n                        break\n                    }\n                }\n            }\n        }\n\n        // Hide labels that are overlapping or too close to each other\n        for (let i = 0; i < series.length; i++) {\n            const s1 = series[i]\n            if (s1.isHidden) continue\n\n            for (let j = i + 1; j < series.length; j++) {\n                const s2 = series[j]\n                if (s2.isHidden) continue\n\n                if (s1.collisionBounds.intersects(s2.collisionBounds)) {\n                    const rank1 = emphasisRank(s1)\n                    const rank2 = emphasisRank(s2)\n\n                    // Prefer the more emphasized label; fall back to the\n                    // caller-provided resolver when emphasis is equal\n                    const picked =\n                        rank1 > rank2\n                            ? s1\n                            : rank2 > rank1\n                              ? s2\n                              : (resolveCollision?.(s1, s2) ?? s1)\n\n                    if (picked === s1) s2.isHidden = true\n                    else s1.isHidden = true\n                }\n            }\n        }\n\n        return series\n            .filter((series) => !series.isHidden)\n            .map((series) =>\n                R.omit(series, [\"isHidden\", \"collisionBounds\", \"anchorBounds\"])\n            )\n    }\n\n    @computed get width(): number {\n        const labelWidths = this.series.map((series) => series.textWrap.width)\n        const maxLabelWidth = R.firstBy(labelWidths, [R.identity(), \"desc\"])\n        return maxLabelWidth ?? 0\n    }\n}\n","import { Emphasis } from \"../interaction/Emphasis.js\"\nimport { GRAPHER_OPACITY_MUTED } from \"../core/GrapherConstants.js\"\n\nexport interface AnchoredLabelStyleConfig {\n    opacity: number\n}\n\nconst DEFAULT_ANCHORED_LABEL_STYLE: AnchoredLabelStyleConfig = {\n    opacity: 1,\n}\n\nexport const ANCHORED_LABEL_STYLE: Record<Emphasis, AnchoredLabelStyleConfig> =\n    {\n        [Emphasis.Default]: DEFAULT_ANCHORED_LABEL_STYLE,\n        [Emphasis.Elevated]: DEFAULT_ANCHORED_LABEL_STYLE,\n        [Emphasis.Highlighted]: DEFAULT_ANCHORED_LABEL_STYLE,\n        [Emphasis.Muted]: { opacity: GRAPHER_OPACITY_MUTED },\n    }\n","import React from \"react\"\nimport { AnchoredLabelsState } from \"./AnchoredLabelsState\"\nimport { darkenColorForText } from \"../color/ColorUtils.js\"\nimport { Halo, TextWrapSvg } from \"@ourworldindata/components\"\nimport { Emphasis } from \"../interaction/Emphasis.js\"\nimport { ANCHORED_LABEL_STYLE } from \"./AnchoredLabelsConstants.js\"\n\nexport function AnchoredLabels({\n    state,\n}: {\n    state: AnchoredLabelsState\n}): React.ReactElement {\n    return (\n        <g>\n            {state.series.map((series) => {\n                const emphasis = series.emphasis ?? Emphasis.Default\n                return (\n                    <g\n                        key={series.seriesName}\n                        opacity={ANCHORED_LABEL_STYLE[emphasis].opacity}\n                    >\n                        <Halo id={series.seriesName} fontSize={state.fontSize}>\n                            <TextWrapSvg\n                                textWrap={series.textWrap}\n                                x={series.textPosition.x}\n                                y={series.textPosition.y}\n                                textAnchor={state.textAnchor}\n                                fill={darkenColorForText(series.color)}\n                            />\n                        </Halo>\n                    </g>\n                )\n            })}\n        </g>\n    )\n}\n","import React from \"react\"\nimport { action, computed, makeObservable, observable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport * as _ from \"lodash-es\"\nimport { scaleLinear } from \"d3-scale\"\nimport {\n    Bounds,\n    SeriesName,\n    guid,\n    getRelativeMouse,\n    roundForSvg,\n} from \"@ourworldindata/utils\"\nimport { SideWidths, Time } from \"@ourworldindata/types\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { LineChartState } from \"./LineChartState\"\nimport { LineChartProps } from \"./LineChart.js\"\nimport { DualAxis, HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\nimport {\n    CATEGORICAL_LEGEND_STYLE,\n    LINE_STYLE,\n    LINE_CHART_CLASS_NAME,\n    LineChartManager,\n    LineChartSeries,\n    LinePoint,\n    NUMERIC_LEGEND_STYLE,\n    PlacedLineChartSeries,\n    RenderLineChartSeries,\n    RenderPoint,\n} from \"./LineChartConstants\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    FontSettings,\n} from \"../core/GrapherConstants\"\nimport { Emphasis, resolveEmphasis } from \"../interaction/Emphasis\"\nimport { InteractionState } from \"../interaction/InteractionState\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig\"\nimport { Lines } from \"./Lines\"\nimport {\n    findClosestTimeAtMouse,\n    getYAxisConfigDefaults,\n    toPlacedLineChartSeries,\n    toRenderLineChartSeries,\n} from \"./LineChartHelpers\"\nimport {\n    HorizontalAxisComponent,\n    HorizontalAxisDomainLine,\n    VerticalAxisZeroLine,\n} from \"../axis/AxisViews\"\nimport { InitialAnchoredLabelSeries } from \"../anchoredLabels/AnchoredLabelsTypes\"\nimport { AnchoredLabelsState } from \"../anchoredLabels/AnchoredLabelsState\"\nimport { AnchoredLabels } from \"../anchoredLabels/AnchoredLabels\"\nimport { darkenColorForLine } from \"../color/ColorUtils.js\"\nimport { NoDataMessage } from \"../noDataMessage/NoDataMessage\"\nimport { ExternalColorLegendData } from \"../legend/HorizontalColorLegendTypes.js\"\nimport { CategoricalBin } from \"../color/ColorScaleBin.js\"\nimport {\n    getHoverStateForSeries,\n    isTargetOutsideElement,\n    scaleFontSize,\n} from \"../chart/ChartUtils\"\nimport { TooltipState } from \"../tooltip/Tooltip\"\nimport { LineChartTooltip } from \"./LineChartTooltip\"\nimport { LineChartActiveTimeMarkers } from \"./LineChartActiveTimeMarkers\"\n\n@observer\nexport class LineChartThumbnail\n    extends React.Component<LineChartProps>\n    implements ChartInterface, AxisManager\n{\n    private readonly base = React.createRef<SVGGElement>()\n\n    private readonly tooltipId = guid()\n    private readonly tooltipState = new TooltipState<{ time: Time }>({\n        fade: \"immediate\",\n    })\n\n    constructor(props: LineChartProps) {\n        super(props)\n        makeObservable<LineChartThumbnail, \"tooltipState\">(this, {\n            tooltipState: observable,\n        })\n    }\n\n    @computed get chartState(): LineChartState {\n        return this.props.chartState\n    }\n\n    @computed private get manager(): LineChartManager {\n        return this.chartState.manager\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get innerBounds(): Bounds {\n        const { left, right } = this.effectiveLabelWidths\n        return this.bounds\n            .padRight(right > 0 ? right + this.labelPadding : 0)\n            .padLeft(left > 0 ? left + this.labelPadding : 0)\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed get yAxisConfig(): AxisConfig {\n        const { yAxisConfig } = this.manager\n        const defaults = getYAxisConfigDefaults(yAxisConfig)\n        const custom = { hideAxis: true }\n        return new AxisConfig({ ...defaults, ...custom, ...yAxisConfig }, this)\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        const { xAxisConfig } = this.manager\n        const custom = { labelPadding: 0, tickPadding: 2 }\n        return new AxisConfig({ ...custom, ...xAxisConfig }, this)\n    }\n\n    @computed private get horizontalAxisPart(): HorizontalAxis {\n        return this.chartState.toHorizontalAxis(this.xAxisConfig)\n    }\n\n    @computed private get verticalAxisPart(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig)\n    }\n\n    @computed get dualAxis(): DualAxis {\n        return new DualAxis({\n            bounds: this.innerBounds,\n            verticalAxis: this.verticalAxisPart,\n            horizontalAxis: this.horizontalAxisPart,\n        })\n    }\n\n    @computed get xAxis(): HorizontalAxis {\n        return this.dualAxis.horizontalAxis\n    }\n\n    @computed get yAxis(): VerticalAxis {\n        return this.dualAxis.verticalAxis\n    }\n\n    @computed get placedSeries(): PlacedLineChartSeries[] {\n        return toPlacedLineChartSeries(this.chartState.series, {\n            chartState: this.chartState,\n            dualAxis: this.dualAxis,\n        })\n    }\n\n    // Series highlighted by hovering an item in the (external) categorical\n    // legend, which the FacetChart broadcasts to all facets via\n    // `externalLegendHoverBin`\n    @computed private get hoveredSeriesNames(): SeriesName[] {\n        const { externalLegendHoverBin } = this.manager\n        if (!externalLegendHoverBin) return []\n        return this.chartState.series\n            .map((series) => series.seriesName)\n            .filter((name) => externalLegendHoverBin.contains(name))\n    }\n\n    @computed private get isHoverModeActive(): boolean {\n        return (\n            this.hoveredSeriesNames.length > 0 ||\n            // If the external legend is hovered, we want to mute all\n            // non-hovered series even if this facet doesn't plot any of them\n            (!!this.manager.externalLegendHoverBin &&\n                !this.chartState.hasColorScale)\n        )\n    }\n\n    @computed private get renderSeries(): RenderLineChartSeries[] {\n        return toRenderLineChartSeries(this.placedSeries, {\n            isFocusModeActive: this.chartState.isFocusModeActive,\n            isHoverModeActive: this.isHoverModeActive,\n            hoveredSeriesNames: this.hoveredSeriesNames,\n            shouldElevateSingleSeries: false,\n        })\n    }\n\n    private hoverStateForSeries(series: LineChartSeries): InteractionState {\n        return getHoverStateForSeries(series, {\n            isHoverModeActive: this.isHoverModeActive,\n            hoveredSeriesNames: this.hoveredSeriesNames,\n        })\n    }\n\n    private emphasisForSeries(series: LineChartSeries): Emphasis {\n        return resolveEmphasis({\n            hover: this.hoverStateForSeries(series),\n            focus: series.focus,\n        })\n    }\n\n    @computed private get dotRadius(): number {\n        // Map font size to dot radius\n        const scale = scaleLinear().domain([11, 16]).range([2.5, 3.5])\n        // Round to nearest .5 number\n        return _.round(scale(this.fontSize) * 2) / 2\n    }\n\n    @computed private get spaceBetweenDotAndLabel(): number {\n        return this.dotRadius\n    }\n\n    @computed private get labelPadding(): number {\n        return this.dotRadius + this.spaceBetweenDotAndLabel\n    }\n\n    /** Start points displayed as dots */\n    @computed private get visibleStartPoints(): RenderPoint[] {\n        return this.renderSeries\n            .filter(\n                (series) =>\n                    this.visibleStartLabels.has(series.seriesName) &&\n                    // Only show start points for historical series, not projected ones\n                    !series.isProjection\n            )\n            .map((series) => {\n                const point = _.minBy(\n                    series.placedPoints,\n                    (point) => point.time\n                )\n                if (!point) return undefined\n                return { ...point, emphasis: series.emphasis }\n            })\n            .filter((point) => point !== undefined)\n    }\n\n    /** End points displayed as dots */\n    @computed private get visibleEndPoints(): RenderPoint[] {\n        return this.renderSeries\n            .filter(\n                (series) =>\n                    this.visibleEndLabels.has(series.seriesName) &&\n                    // When projected series exist in the chart, only show end dots\n                    // for the projected series. Otherwise, show end dots for all series\n                    (!this.hasProjectedSeries || series.isProjection)\n            )\n            .map((series) => {\n                const point = _.maxBy(\n                    series.placedPoints,\n                    (point) => point.time\n                )\n                if (!point) return undefined\n                return { ...point, emphasis: series.emphasis }\n            })\n            .filter((point) => point !== undefined)\n    }\n\n    @computed private get labelFontSettings(): FontSettings {\n        return {\n            fontSize: scaleFontSize(12, this.fontSize),\n            fontWeight: 700,\n            lineHeight: 1,\n        }\n    }\n\n    private formatLabel(value: number): string {\n        return this.chartState.formatColumn.formatValueShortWithAbbreviations(\n            value\n        )\n    }\n\n    @computed private get hasProjectedSeries(): boolean {\n        return this.chartState.series.some((series) => !!series.isProjection)\n    }\n\n    @computed private get labelsRange(): [number, number] {\n        const {\n            horizontalAxisPart,\n            manager: { chartAreaPadding = 0 },\n        } = this\n\n        return this.bounds\n            .expand({\n                top: chartAreaPadding,\n                bottom: chartAreaPadding + horizontalAxisPart.height,\n            })\n            .yRange()\n    }\n\n    @computed\n    private get endLabelCandidateSeries(): readonly LineChartSeries[] {\n        if (!this.manager.showSeriesLabels) return []\n\n        let labelCandidateSeries = this.chartState.series\n\n        // If there is a projected series, only show the labels for the projected ones\n        if (this.hasProjectedSeries)\n            labelCandidateSeries = labelCandidateSeries.filter(\n                (series) => series.isProjection\n            )\n\n        // If any series is focused, only show the labels for the focused ones\n        if (this.chartState.isFocusModeActive)\n            labelCandidateSeries = labelCandidateSeries.filter(\n                (series) => series.focus.active\n            )\n\n        return labelCandidateSeries\n    }\n\n    @computed private get endPointBySeriesName(): Map<\n        SeriesName,\n        LinePoint | undefined\n    > {\n        return new Map(\n            this.endLabelCandidateSeries.map((series) => [\n                series.seriesName,\n                _.maxBy(series.points, (point) => point.x),\n            ])\n        )\n    }\n\n    @computed private get endLabelsSeries(): Omit<\n        InitialAnchoredLabelSeries,\n        \"position\"\n    >[] {\n        return this.endLabelCandidateSeries\n            .map((series) => {\n                const endPoint = this.endPointBySeriesName.get(\n                    series.seriesName\n                )\n                if (!endPoint) return undefined\n\n                const value = endPoint.y\n                const label = this.formatLabel(value)\n\n                const color = this.chartState.hasColorScale\n                    ? darkenColorForLine(\n                          this.chartState.getColorScaleColor(\n                              endPoint.colorValue\n                          )\n                      )\n                    : series.color\n\n                return {\n                    seriesName: series.seriesName,\n                    value,\n                    label,\n                    color,\n                    emphasis: this.emphasisForSeries(series),\n                }\n            })\n            .filter((series) => series !== undefined)\n    }\n\n    private makeEndLabelsState({\n        dualAxis,\n    }: {\n        dualAxis: DualAxis\n    }): AnchoredLabelsState | undefined {\n        if (!this.manager.showSeriesLabels) return undefined\n\n        const series = this.endLabelsSeries.map((series) => {\n            const endPoint = this.endPointBySeriesName.get(series.seriesName)\n\n            const position = {\n                x: dualAxis.horizontalAxis.place(endPoint?.x ?? 0),\n                y: dualAxis.verticalAxis.place(endPoint?.y ?? 0),\n            }\n\n            return { ...series, position }\n        })\n\n        return new AnchoredLabelsState(series, {\n            ...this.labelFontSettings,\n            textAnchor: \"start\",\n            yRange: this.labelsRange,\n            labelPadding: this.labelPadding,\n            anchorCollisionRadius: this.dotRadius,\n            resolveCollision: (\n                s1: InitialAnchoredLabelSeries,\n                s2: InitialAnchoredLabelSeries\n            ): InitialAnchoredLabelSeries => {\n                const endPoint1 = this.endPointBySeriesName.get(s1.seriesName)\n                const endPoint2 = this.endPointBySeriesName.get(s2.seriesName)\n\n                const x1 = endPoint1?.x ?? 0\n                const x2 = endPoint2?.x ?? 0\n\n                // Prefer the series with the larger x value\n                if (x1 > x2) return s1\n                if (x2 > x1) return s2\n\n                return s1 // no preference\n            },\n        })\n    }\n\n    @computed private get endLabelsState(): AnchoredLabelsState | undefined {\n        return this.makeEndLabelsState({ dualAxis: this.dualAxis })\n    }\n\n    @computed\n    private get startLabelCandidateSeries(): readonly LineChartSeries[] {\n        if (!this.manager.showSeriesLabels) return []\n\n        let labelCandidateSeries = this.chartState.series\n\n        // If there is a projected series, only show the labels for the historical ones\n        if (this.hasProjectedSeries)\n            labelCandidateSeries = labelCandidateSeries.filter(\n                (series) => !series.isProjection\n            )\n\n        // If any series is focused, only show the labels for the focused ones\n        if (this.chartState.isFocusModeActive)\n            labelCandidateSeries = labelCandidateSeries.filter(\n                (series) => series.focus.active\n            )\n\n        return labelCandidateSeries\n    }\n\n    @computed private get startPointBySeriesName(): Map<\n        SeriesName,\n        LinePoint | undefined\n    > {\n        return new Map(\n            this.startLabelCandidateSeries.map((series) => [\n                series.seriesName,\n                _.minBy(series.points, (point) => point.x),\n            ])\n        )\n    }\n\n    @computed private get shouldShowValueLabelsOnly(): boolean {\n        return !!this.manager.useMinimalLabeling\n    }\n\n    @computed private get startLabelsMaxWidth(): number | undefined {\n        return this.shouldShowValueLabelsOnly\n            ? undefined\n            : 0.25 * this.bounds.width\n    }\n\n    @computed private get startLabelsSeries(): Omit<\n        InitialAnchoredLabelSeries,\n        \"position\"\n    >[] {\n        return this.startLabelCandidateSeries\n            .map((series) => {\n                // Don't show start label if there is only a single point\n                if (series.points.length < 2) return undefined\n\n                const startPoint = this.startPointBySeriesName.get(\n                    series.seriesName\n                )\n                if (!startPoint) return undefined\n\n                const value = startPoint.y\n                const label = this.shouldShowValueLabelsOnly\n                    ? this.formatLabel(value)\n                    : series.displayName\n\n                const color = this.chartState.hasColorScale\n                    ? darkenColorForLine(\n                          this.chartState.getColorScaleColor(\n                              startPoint.colorValue\n                          )\n                      )\n                    : series.color\n\n                return {\n                    seriesName: series.seriesName,\n                    value,\n                    label,\n                    color,\n                    emphasis: this.emphasisForSeries(series),\n                }\n            })\n            .filter((series) => series !== undefined)\n    }\n\n    private makeStartLabelsState({\n        dualAxis,\n        visibleEndLabels,\n    }: {\n        dualAxis: DualAxis\n        visibleEndLabels: Set<SeriesName>\n    }): AnchoredLabelsState | undefined {\n        if (!this.manager.showSeriesLabels || this.manager.hideStartValueLabel)\n            return undefined\n\n        // In relative mode, the start label is trivially 0%,\n        // so we skip showing start labels to reduce clutter\n        if (this.manager.isRelativeMode) return undefined\n\n        const series = this.startLabelsSeries.map((series) => {\n            const startPoint = this.startPointBySeriesName.get(\n                series.seriesName\n            )\n\n            const position = {\n                x: startPoint\n                    ? dualAxis.horizontalAxis.place(startPoint.x)\n                    : dualAxis.bounds.left,\n                y: dualAxis.verticalAxis.place(series.value),\n            }\n\n            return { ...series, position }\n        })\n\n        return new AnchoredLabelsState(series, {\n            ...this.labelFontSettings,\n            maxWidth: this.startLabelsMaxWidth,\n            textAnchor: \"end\",\n            labelPadding: this.labelPadding,\n            anchorCollisionRadius: this.dotRadius,\n            yRange: this.labelsRange,\n            resolveCollision: (\n                s1: InitialAnchoredLabelSeries,\n                s2: InitialAnchoredLabelSeries\n            ): InitialAnchoredLabelSeries => {\n                // Prefer to label series that have an end label\n                if (visibleEndLabels.has(s1.seriesName)) return s1\n                if (visibleEndLabels.has(s2.seriesName)) return s2\n\n                const startPoint1 = this.startPointBySeriesName.get(\n                    s1.seriesName\n                )\n                const startPoint2 = this.startPointBySeriesName.get(\n                    s2.seriesName\n                )\n\n                const x1 = startPoint1?.x ?? 0\n                const x2 = startPoint2?.x ?? 0\n\n                // Prefer the series with the larger x value\n                if (x1 > x2) return s1\n                if (x2 > x1) return s2\n\n                return s1 // No preference\n            },\n        })\n    }\n\n    @computed private get startLabelsState(): AnchoredLabelsState | undefined {\n        return this.makeStartLabelsState({\n            dualAxis: this.dualAxis,\n            visibleEndLabels: this.visibleEndLabels,\n        })\n    }\n\n    /**\n     * Estimated width of the start and end labels, used by innerBounds\n     * to reserve space on the left and right of the chart area.\n     *\n     * Ideally, we'd derive this from the final label states, which know\n     * exactly which labels are visible after collision detection. But that\n     * would introduce a cyclic dependency: the label states need the axis\n     * for pixel positions, the axis needs innerBounds, and innerBounds needs\n     * these widths. To break the cycle, we run a preliminary layout pass\n     * using the full bounds (without label padding).\n     */\n    @computed private get estimatedLabelWidths(): SideWidths {\n        const approximateDualAxis = new DualAxis({\n            bounds: this.bounds,\n            verticalAxis: this.verticalAxisPart,\n            horizontalAxis: this.horizontalAxisPart,\n        })\n\n        const endLabelsState = this.makeEndLabelsState({\n            dualAxis: approximateDualAxis,\n        })\n\n        const visibleEndLabels = new Set(\n            endLabelsState?.series.map((series) => series.seriesName)\n        )\n\n        const startLabelsState = this.makeStartLabelsState({\n            dualAxis: approximateDualAxis,\n            visibleEndLabels,\n        })\n\n        return {\n            left: startLabelsState?.width ?? 0,\n            right: endLabelsState?.width ?? 0,\n        }\n    }\n\n    // Consumed by FacetChart to align chart content across facets\n    @computed get verticalLabelWidths(): SideWidths {\n        return this.estimatedLabelWidths\n    }\n\n    // Consumed by FacetChart to align the facet label with the plot content\n    // (here: the line chart's domain line)\n    @computed get contentInset(): SideWidths | undefined {\n        if (this.chartState.errorInfo.reason) return undefined\n        const { innerBounds, bounds } = this\n        return {\n            left: innerBounds.left - bounds.left,\n            right: bounds.right - innerBounds.right,\n        }\n    }\n\n    @computed private get effectiveLabelWidths(): SideWidths {\n        const shared = this.manager.sharedVerticalLabelWidths\n        return {\n            left: Math.max(shared?.left ?? 0, this.verticalLabelWidths.left),\n            right: Math.max(shared?.right ?? 0, this.verticalLabelWidths.right),\n        }\n    }\n\n    @computed private get visibleStartLabels(): Set<SeriesName> {\n        return new Set(\n            this.startLabelsState?.series.map((series) => series.seriesName)\n        )\n    }\n\n    @computed private get visibleEndLabels(): Set<SeriesName> {\n        return new Set(\n            this.endLabelsState?.series.map((series) => series.seriesName)\n        )\n    }\n\n    @computed get externalLegend(): ExternalColorLegendData {\n        const numericLegendData = this.chartState.hasColorScale\n            ? _.sortBy(\n                  this.chartState.colorScale.legendBins,\n                  (bin) => bin instanceof CategoricalBin\n              )\n            : []\n\n        const categoricalLegendData = this.chartState.hasColorScale\n            ? []\n            : this.chartState.series.map(\n                  (series, index) =>\n                      new CategoricalBin({\n                          index,\n                          value: series.seriesName,\n                          label: series.displayName,\n                          color: series.color,\n                      })\n              )\n\n        return {\n            categoricalLegendData,\n            numericLegendData,\n            legendTitle: this.chartState.hasColorScale\n                ? this.chartState.colorScale.legendDescription\n                : undefined,\n            legendTickSize: 1,\n            numericBinHeight: 6,\n            categoricalLegendStyleConfig: CATEGORICAL_LEGEND_STYLE,\n            numericLegendStyleConfig: NUMERIC_LEGEND_STYLE,\n        }\n    }\n\n    @computed private get shouldShowZeroLine(): boolean {\n        const { verticalAxisPart } = this\n        if (verticalAxisPart.isLogScale) return false\n        // Only draw the zero line when 0 is actually within the axis domain\n        const [min, max] = verticalAxisPart.domain\n        return min <= 0 && max >= 0\n    }\n\n    @computed private get allValues(): LinePoint[] {\n        return this.placedSeries.flatMap((series) => series.points)\n    }\n\n    @computed get activeTimes(): Time[] {\n        const tooltipTime = this.tooltipState.target?.time\n        return tooltipTime !== undefined ? [tooltipTime] : []\n    }\n\n    @computed private get isTooltipActive(): boolean {\n        return this.manager.tooltip?.get()?.id === this.tooltipId\n    }\n\n    @action.bound private dismissTooltip(): void {\n        this.tooltipState.target = null\n    }\n\n    @action.bound private onCursorLeave(): void {\n        if (!this.manager.shouldPinTooltipToBottom) this.dismissTooltip()\n    }\n\n    @action.bound private onCursorMove(\n        ev: React.MouseEvent | React.TouchEvent\n    ): void {\n        const ref = this.base.current,\n            parentRef = this.manager.base?.current\n\n        // The tooltip's origin needs to be in the parent's coordinates\n        if (parentRef) {\n            this.tooltipState.position = getRelativeMouse(parentRef, ev)\n        }\n\n        if (!ref) return\n\n        const hoverTime = findClosestTimeAtMouse({\n            mouse: getRelativeMouse(ref, ev),\n            innerBounds: this.dualAxis.innerBounds,\n            horizontalAxis: this.dualAxis.horizontalAxis,\n            allValues: this.allValues,\n        })\n\n        this.tooltipState.target =\n            hoverTime === undefined ? null : { time: hoverTime }\n    }\n\n    @action.bound private onDocumentClick(e: MouseEvent): void {\n        // Only dismiss the tooltip if the click is outside of the chart area\n        // and outside of the chart areas of neighboring facets\n        const chartContainer = this.manager.base?.current\n        if (!chartContainer) return\n        const chartAreas = chartContainer.getElementsByClassName(\n            LINE_CHART_CLASS_NAME\n        )\n        const isTargetOutsideChartAreas = Array.from(chartAreas).every(\n            (chartArea) => isTargetOutsideElement(e.target!, chartArea)\n        )\n        if (isTargetOutsideChartAreas) {\n            this.dismissTooltip()\n        }\n    }\n\n    override componentDidMount(): void {\n        document.addEventListener(\"click\", this.onDocumentClick, {\n            capture: true,\n        })\n    }\n\n    override componentWillUnmount(): void {\n        document.removeEventListener(\"click\", this.onDocumentClick, {\n            capture: true,\n        })\n    }\n\n    private renderChartElements(): React.ReactElement {\n        return (\n            <>\n                {this.shouldShowZeroLine ? (\n                    <VerticalAxisZeroLine\n                        axis={this.dualAxis.verticalAxis}\n                        bounds={this.dualAxis.innerBounds}\n                        strokeWidth={0.5}\n                    />\n                ) : (\n                    // The domain line is the baseline at the bottom of the plot.\n                    // When the zero line is shown it already serves as a baseline,\n                    // so we only draw the domain line in its absence\n                    <HorizontalAxisDomainLine\n                        bounds={this.dualAxis.innerBounds}\n                        strokeWidth={0.5}\n                    />\n                )}\n                {!this.dualAxis.horizontalAxis.hideAxis && (\n                    <HorizontalAxisComponent\n                        axis={this.dualAxis.horizontalAxis}\n                        bounds={this.dualAxis.bounds}\n                        showEndpointsOnly\n                    />\n                )}\n                <Lines\n                    series={this.renderSeries}\n                    dualAxis={this.dualAxis}\n                    multiColor={this.chartState.hasColorScale}\n                    hidePoints\n                    lineStrokeWidth={1.5}\n                    lineOutlineWidth={0}\n                    isStatic={this.manager.isStatic}\n                />\n                {this.visibleStartPoints.map((point, index) => (\n                    <Dot key={index} point={point} radius={this.dotRadius} />\n                ))}\n                {this.visibleEndPoints.map((point, index) => (\n                    <Dot key={index} point={point} radius={this.dotRadius} />\n                ))}\n                {this.startLabelsState && (\n                    <AnchoredLabels state={this.startLabelsState} />\n                )}\n                {this.endLabelsState && (\n                    <AnchoredLabels state={this.endLabelsState} />\n                )}\n            </>\n        )\n    }\n\n    private renderStatic(): React.ReactElement {\n        return this.renderChartElements()\n    }\n\n    private renderInteractive(): React.ReactElement {\n        return (\n            <g\n                ref={this.base}\n                className={LINE_CHART_CLASS_NAME}\n                onMouseLeave={this.onCursorLeave}\n                onTouchEnd={this.onCursorLeave}\n                onTouchCancel={this.onCursorLeave}\n                onMouseMove={this.onCursorMove}\n                onTouchStart={this.onCursorMove}\n                onTouchMove={this.onCursorMove}\n            >\n                <rect {...this.bounds.toProps()} fillOpacity=\"0\">\n                    {/* This <rect> ensures that the parent <g> is big enough such that\n                        we get mouse hover events for the whole charting area, including\n                        the axis, the entity labels, and the whitespace next to them.\n                        We need these to be able to show the tooltip for the first/last\n                        year even if the mouse is outside the charting area. */}\n                </rect>\n                {this.renderChartElements()}\n                {this.isTooltipActive && (\n                    <LineChartActiveTimeMarkers\n                        times={this.activeTimes}\n                        renderSeries={this.renderSeries}\n                        dualAxis={this.dualAxis}\n                        chartState={this.chartState}\n                        dotRadius={4}\n                    />\n                )}\n                <LineChartTooltip\n                    id={this.tooltipId}\n                    chartState={this.chartState}\n                    tooltipState={this.tooltipState}\n                    series={this.renderSeries}\n                    xAxisLabel={this.xAxis.label}\n                    dismissTooltip={this.dismissTooltip}\n                />\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataMessage\n                    manager={this.manager}\n                    bounds={this.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return this.manager.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n}\n\nfunction Dot({\n    point,\n    radius,\n}: {\n    point: RenderPoint\n    radius: number\n}): React.ReactElement | null {\n    return (\n        <circle\n            cx={roundForSvg(point.x)}\n            cy={roundForSvg(point.y)}\n            r={roundForSvg(radius)}\n            fill={point.color}\n            opacity={LINE_STYLE[point.emphasis].opacity}\n        />\n    )\n}\n","import React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { scaleLinear } from \"d3-scale\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { SideWidths } from \"@ourworldindata/types\"\nimport { SlopeChartState } from \"./SlopeChartState.js\"\nimport { type SlopeChartProps } from \"./SlopeChart.js\"\nimport {\n    PlacedSlopeChartSeries,\n    RenderSlopeChartSeries,\n    SlopeChartManager,\n    SlopeChartSeries,\n} from \"./SlopeChartConstants\"\nimport {\n    getXAxisConfigSettings,\n    getYAxisConfigDefaults,\n    toPlacedSlopeChartSeries,\n    toRenderSlopeChartSeries,\n} from \"./SlopeChartHelpers\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    FontSettings,\n} from \"../core/GrapherConstants\"\nimport { scaleFontSize } from \"../chart/ChartUtils\"\nimport { Bounds, SeriesName } from \"@ourworldindata/utils\"\nimport { HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\nimport { Slope } from \"./Slope\"\nimport { SlopeChartXAxis } from \"./SlopeChartXAxis\"\nimport { InitialAnchoredLabelSeries } from \"../anchoredLabels/AnchoredLabelsTypes.js\"\nimport { AnchoredLabelsState } from \"../anchoredLabels/AnchoredLabelsState\"\nimport { AnchoredLabels } from \"../anchoredLabels/AnchoredLabels\"\nimport { NoDataMessage } from \"../noDataMessage/NoDataMessage\"\n\nconst DOT_RADIUS = 3.5\nconst SPACE_BETWEEN_DOT_AND_LABEL = 4\n\nconst LABEL_PADDING = DOT_RADIUS + SPACE_BETWEEN_DOT_AND_LABEL\n\n@observer\nexport class SlopeChartThumbnail\n    extends React.Component<SlopeChartProps>\n    implements ChartInterface, AxisManager\n{\n    constructor(props: SlopeChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get chartState(): SlopeChartState {\n        return this.props.chartState\n    }\n\n    @computed get manager(): SlopeChartManager {\n        return this.chartState.manager\n    }\n\n    @computed get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get formattedStartTime(): string {\n        return this.chartState.formatColumn.formatTime(\n            this.chartState.xDomain[0]\n        )\n    }\n\n    @computed private get formattedEndTime(): string {\n        return this.chartState.formatColumn.formatTime(\n            this.chartState.xDomain[1]\n        )\n    }\n\n    @computed private get xMarkFontSize(): number {\n        return this.outerBoundsVerticalAxis.tickFontSize\n    }\n\n    @computed private get xStartMarkWidth(): number {\n        return Bounds.forText(this.formattedStartTime, {\n            fontSize: this.xMarkFontSize,\n        }).width\n    }\n\n    @computed private get xEndMarkWidth(): number {\n        return Bounds.forText(this.formattedEndTime, {\n            fontSize: this.xMarkFontSize,\n        }).width\n    }\n\n    @computed private get xMarksHeight(): number {\n        if (this.xAxisConfig.hideTickLabels) return 0\n        return this.xMarkFontSize\n    }\n\n    @computed get innerBounds(): Bounds {\n        const { left, right } = this.effectiveLabelWidths\n        const rightPadding = Math.max(\n            right > 0 ? right + LABEL_PADDING : 0, // end labels plus padding\n            0.5 * this.xEndMarkWidth // half the width of the end time label (since it's centered)\n        )\n        const leftPadding = Math.max(\n            left > 0 ? left + LABEL_PADDING : 0, // start labels plus padding\n            0.5 * this.xStartMarkWidth // half the width of the start time label (since it's centered)\n        )\n\n        return this.bounds\n            .padBottom(this.xMarksHeight)\n            .padRight(rightPadding)\n            .padLeft(leftPadding)\n    }\n\n    /**\n     * Bounds whose horizontal extent is exactly [startX, endX],\n     * the start and end of the slope lines\n     */\n    @computed private get slopeAreaBounds(): Bounds {\n        return new Bounds(\n            this.startX,\n            this.innerBounds.top,\n            this.endX - this.startX,\n            this.innerBounds.height\n        )\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed get yAxisConfig(): AxisConfig {\n        const { yAxisConfig } = this.manager\n        const defaults = getYAxisConfigDefaults(yAxisConfig)\n        const custom = { hideAxis: true }\n        return new AxisConfig({ ...defaults, ...custom, ...yAxisConfig }, this)\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        const { xAxisConfig } = this.manager\n        const overrides = getXAxisConfigSettings(xAxisConfig, {\n            startTime: this.chartState.startTime,\n            endTime: this.chartState.endTime,\n        })\n        return new AxisConfig({ ...xAxisConfig, ...overrides }, this)\n    }\n\n    @computed get yDomain(): [number, number] {\n        const domain = this.yAxisConfig.domain || [Infinity, -Infinity]\n        const domainDefault = this.chartState.yDomainDefault\n        return [\n            Math.min(domain[0], domainDefault[0]),\n            Math.max(domain[1], domainDefault[1]),\n        ]\n    }\n\n    @computed private get yRange(): [number, number] {\n        // Add vertical padding to prevent dots from being rendered at the edges\n        // and to ensure labels don't overlap with the x-axis time marks below\n        return this.innerBounds.padHeight(6).yRange()\n    }\n\n    @computed get xAxis(): HorizontalAxis {\n        return this.chartState.toHorizontalAxis(this.xAxisConfig, {\n            xRange: this.xRange,\n        })\n    }\n\n    @computed private get xRange(): [number, number] {\n        return this.innerBounds.xRange()\n    }\n\n    @computed private get startX(): number {\n        return this.xAxis.place(this.chartState.startTime)\n    }\n\n    @computed private get endX(): number {\n        return this.xAxis.place(this.chartState.endTime)\n    }\n\n    @computed get yAxis(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig, {\n            yDomain: this.yDomain,\n            yRange: this.yRange,\n        })\n    }\n\n    @computed private get outerBoundsVerticalAxis(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig, {\n            yDomain: this.yDomain,\n            yRange: this.bounds.yRange(),\n        })\n    }\n\n    @computed private get placedSeries(): PlacedSlopeChartSeries[] {\n        return toPlacedSlopeChartSeries(this.chartState.series, {\n            yAxis: this.yAxis,\n            startX: this.startX,\n            endX: this.endX,\n        })\n    }\n\n    @computed private get renderSeries(): RenderSlopeChartSeries[] {\n        return toRenderSlopeChartSeries(this.placedSeries, {\n            isFocusModeActive: this.chartState.isFocusModeActive,\n        })\n    }\n\n    @computed private get labelFontSettings(): FontSettings {\n        return {\n            fontSize: scaleFontSize(12, this.fontSize),\n            fontWeight: 500,\n            lineHeight: 1,\n        }\n    }\n\n    private formatLabel(value: number): string {\n        return this.chartState.formatColumn.formatValueShortWithAbbreviations(\n            value\n        )\n    }\n\n    @computed private get labelCandidateSeries(): SlopeChartSeries[] {\n        // If any series is focused, only show the labels for those\n        return this.chartState.isFocusModeActive\n            ? this.chartState.series.filter((series) => series.focus?.active)\n            : this.chartState.series\n    }\n\n    @computed private get labelsRange(): [number, number] {\n        const {\n            xMarksHeight,\n            manager: { chartAreaPadding = 0 },\n        } = this\n\n        return this.bounds\n            .expand({\n                top: chartAreaPadding,\n                bottom: chartAreaPadding + xMarksHeight,\n            })\n            .yRange()\n    }\n\n    @computed private get endLabelsSeries(): Omit<\n        InitialAnchoredLabelSeries,\n        \"position\"\n    >[] {\n        if (!this.manager.showSeriesLabels) return []\n\n        return this.labelCandidateSeries.map((series) => {\n            const { seriesName, color } = series\n\n            const lastPoint = series.end\n            const value = lastPoint?.value ?? 0\n\n            const label = this.formatLabel(value)\n\n            return { seriesName, value, label, color }\n        })\n    }\n\n    private makeEndLabelsState({\n        yAxis,\n        endX,\n    }: {\n        yAxis: VerticalAxis\n        endX: number\n    }): AnchoredLabelsState | undefined {\n        if (!this.manager.showSeriesLabels) return undefined\n\n        const series = this.endLabelsSeries.map((series) => {\n            const position = {\n                x: endX,\n                y: yAxis.place(series.value),\n            }\n\n            return { ...series, position }\n        })\n\n        return new AnchoredLabelsState(series, {\n            ...this.labelFontSettings,\n            labelPadding: LABEL_PADDING,\n            yRange: this.labelsRange,\n        })\n    }\n\n    @computed private get endLabelsState(): AnchoredLabelsState | undefined {\n        return this.makeEndLabelsState({ yAxis: this.yAxis, endX: this.endX })\n    }\n\n    @computed private get shouldShowValueLabelsOnly(): boolean {\n        return !!this.manager.useMinimalLabeling\n    }\n\n    @computed private get startLabelsMaxWidth(): number | undefined {\n        return this.shouldShowValueLabelsOnly\n            ? undefined\n            : 0.25 * this.bounds.width\n    }\n\n    @computed private get startLabelsSeries(): Omit<\n        InitialAnchoredLabelSeries,\n        \"position\"\n    >[] {\n        if (!this.manager.showSeriesLabels) return []\n\n        return this.labelCandidateSeries.map((series) => {\n            const { seriesName, displayName, color } = series\n            const firstPoint = series.start\n            const value = firstPoint?.value ?? 0\n            const label = this.shouldShowValueLabelsOnly\n                ? this.formatLabel(value)\n                : displayName\n\n            return { seriesName, value, label, color }\n        })\n    }\n\n    private makeStartLabelsState({\n        yAxis,\n        startX,\n        visibleEndLabels,\n    }: {\n        yAxis: VerticalAxis\n        startX: number\n        visibleEndLabels: Set<SeriesName>\n    }): AnchoredLabelsState | undefined {\n        if (!this.manager.showSeriesLabels) return undefined\n\n        const series = this.startLabelsSeries.map((series) => {\n            const position = {\n                x: startX,\n                y: yAxis.place(series.value),\n            }\n\n            return { ...series, position }\n        })\n\n        return new AnchoredLabelsState(series, {\n            ...this.labelFontSettings,\n            textAnchor: \"end\",\n            maxWidth: this.startLabelsMaxWidth,\n            labelPadding: LABEL_PADDING,\n            yRange: this.labelsRange,\n            resolveCollision: (\n                s1: InitialAnchoredLabelSeries,\n                s2: InitialAnchoredLabelSeries\n            ): InitialAnchoredLabelSeries => {\n                // Prefer to label series that have an end label\n                if (visibleEndLabels.has(s1.seriesName)) return s1\n                if (visibleEndLabels.has(s2.seriesName)) return s2\n\n                return s1 // No preference\n            },\n        })\n    }\n\n    @computed private get startLabelsState(): AnchoredLabelsState | undefined {\n        return this.makeStartLabelsState({\n            yAxis: this.yAxis,\n            startX: this.startX,\n            visibleEndLabels: this.visibleEndLabels,\n        })\n    }\n\n    @computed private get visibleEndLabels(): Set<SeriesName> {\n        return new Set(\n            this.endLabelsState?.series.map((series) => series.seriesName)\n        )\n    }\n\n    /**\n     * Estimated width of the start and end labels, used by innerBounds\n     * to reserve space on the left and right of the chart area.\n     *\n     * Ideally, we'd derive this from the final label states, which know\n     * exactly which labels are visible after collision detection. But that\n     * would introduce a cyclic dependency: the label states need the axis\n     * for pixel positions, the axis needs innerBounds, and innerBounds needs\n     * these widths. To break the cycle, we run a preliminary layout pass\n     * using the full bounds (without label padding).\n     */\n    @computed get estimatedLabelWidth(): SideWidths {\n        // Preliminary bounds: account for the minimum padding from x-axis\n        // time marks, but not for labels (which is what we're estimating)\n        const preliminaryBounds = this.bounds\n            .padBottom(this.xMarksHeight)\n            .padRight(0.5 * this.xEndMarkWidth)\n            .padLeft(0.5 * this.xStartMarkWidth)\n\n        const preliminaryYAxis = this.chartState.toVerticalAxis(\n            this.yAxisConfig,\n            {\n                yDomain: this.yDomain,\n                yRange: preliminaryBounds.padHeight(6).yRange(),\n            }\n        )\n\n        const preliminaryXScale = scaleLinear()\n            .domain(this.chartState.xDomain)\n            .range(preliminaryBounds.xRange())\n        const preliminaryStartX = preliminaryXScale(this.chartState.startTime)\n        const preliminaryEndX = preliminaryXScale(this.chartState.endTime)\n\n        const endLabelsState = this.makeEndLabelsState({\n            yAxis: preliminaryYAxis,\n            endX: preliminaryEndX,\n        })\n\n        const visibleEndLabels = new Set(\n            endLabelsState?.series.map((series) => series.seriesName)\n        )\n\n        const startLabelsState = this.makeStartLabelsState({\n            yAxis: preliminaryYAxis,\n            startX: preliminaryStartX,\n            visibleEndLabels,\n        })\n\n        return {\n            left: startLabelsState?.width ?? 0,\n            right: endLabelsState?.width ?? 0,\n        }\n    }\n\n    // Consumed by FacetChart to align chart content across facets\n    @computed get verticalLabelWidths(): SideWidths {\n        return this.estimatedLabelWidth\n    }\n\n    // Consumed by FacetChart to align the facet label with the plot content\n    // (here: the slope chart's start-time label)\n    @computed get contentInset(): SideWidths | undefined {\n        if (this.chartState.errorInfo.reason) return undefined\n        const { bounds } = this\n        const hideTimeLabels = this.xAxisConfig.hideTickLabels\n        const startOverflow = hideTimeLabels ? 0 : 0.5 * this.xStartMarkWidth\n        const endOverflow = hideTimeLabels ? 0 : 0.5 * this.xEndMarkWidth\n        return {\n            left: this.startX - startOverflow - bounds.left,\n            right: bounds.right - (this.endX + endOverflow),\n        }\n    }\n\n    @computed private get effectiveLabelWidths(): SideWidths {\n        const shared = this.manager.sharedVerticalLabelWidths\n        return {\n            left: Math.max(shared?.left ?? 0, this.verticalLabelWidths.left),\n            right: Math.max(shared?.right ?? 0, this.verticalLabelWidths.right),\n        }\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataMessage\n                    manager={this.manager}\n                    bounds={this.props.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return (\n            <>\n                <SlopeChartXAxis\n                    axis={this.xAxis}\n                    bounds={this.slopeAreaBounds}\n                    padding={2}\n                />\n                <g>\n                    {this.renderSeries.map((series) => (\n                        <Slope\n                            key={series.seriesName}\n                            series={series}\n                            dotRadius={DOT_RADIUS}\n                            strokeWidth={1.5}\n                            outlineWidth={0}\n                        />\n                    ))}\n                </g>\n                {this.startLabelsState && (\n                    <AnchoredLabels state={this.startLabelsState} />\n                )}\n                {this.endLabelsState && (\n                    <AnchoredLabels state={this.endLabelsState} />\n                )}\n            </>\n        )\n    }\n}\n","import React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { DiscreteBarChartState } from \"./DiscreteBarChartState\"\nimport {\n    DiscreteBarChart,\n    type DiscreteBarChartProps,\n} from \"./DiscreteBarChart.js\"\n\nimport { DiscreteBarChartManager } from \"./DiscreteBarChartConstants.js\"\n\n@observer\nexport class DiscreteBarChartThumbnail\n    extends React.Component<DiscreteBarChartProps>\n    implements ChartInterface\n{\n    constructor(props: DiscreteBarChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get chartState(): DiscreteBarChartState {\n        return this.props.chartState\n    }\n\n    @computed get manager(): DiscreteBarChartManager {\n        return this.props.chartState.manager\n    }\n\n    override render(): React.ReactElement {\n        return <DiscreteBarChart {...this.props} />\n    }\n}\n","import React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { StackedAreaChartState } from \"./StackedAreaChartState.js\"\nimport { type StackedAreaChartProps } from \"./StackedAreaChart.js\"\nimport { Bounds, excludeUndefined } from \"@ourworldindata/utils\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    FontSettings,\n} from \"../core/GrapherConstants\"\nimport { scaleFontSize } from \"../chart/ChartUtils\"\nimport { DualAxis, HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\nimport { ChartManager } from \"../chart/ChartManager\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig\"\nimport {\n    HorizontalAxisComponent,\n    VerticalAxisZeroLine,\n} from \"../axis/AxisViews\"\nimport { Time } from \"@ourworldindata/types\"\nimport {\n    PlacedStackedAreaSeries,\n    RenderStackedAreaSeries,\n} from \"./StackedConstants\"\nimport { StackedAreas } from \"./StackedAreas\"\nimport { InitialAnchoredLabelSeries } from \"../anchoredLabels/AnchoredLabelsTypes.js\"\nimport { AnchoredLabelsState } from \"../anchoredLabels/AnchoredLabelsState\"\nimport { AnchoredLabels } from \"../anchoredLabels/AnchoredLabels\"\nimport { resolveCollision, toPlacedStackedAreaSeries } from \"./StackedUtils\"\nimport { NoDataMessage } from \"../noDataMessage/NoDataMessage\"\nimport { resolveEmphasis } from \"../interaction/Emphasis.js\"\n\nconst LEGEND_PADDING = 4\n\n@observer\nexport class StackedAreaChartThumbnail\n    extends React.Component<StackedAreaChartProps>\n    implements ChartInterface, AxisManager\n{\n    constructor(props: StackedAreaChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get chartState(): StackedAreaChartState {\n        return this.props.chartState\n    }\n\n    @computed get manager(): ChartManager {\n        return this.chartState.manager\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get innerBounds(): Bounds {\n        return this.bounds.padRight(this.estimatedLabelWidth)\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        const { xAxisConfig } = this.manager\n        const custom = { hideGridlines: true, labelPadding: 0 }\n        return new AxisConfig({ ...custom, ...xAxisConfig }, this)\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        const { yAxisConfig } = this.manager\n        const custom = { nice: true, hideAxis: true }\n        return new AxisConfig({ ...custom, ...yAxisConfig }, this)\n    }\n\n    @computed private get horizontalAxisPart(): HorizontalAxis {\n        return this.chartState.toHorizontalAxis(this.xAxisConfig)\n    }\n\n    @computed private get verticalAxisPart(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig)\n    }\n\n    @computed private get dualAxis(): DualAxis {\n        const { horizontalAxisPart, verticalAxisPart } = this\n        return new DualAxis({\n            bounds: this.innerBounds,\n            horizontalAxis: horizontalAxisPart,\n            verticalAxis: verticalAxisPart,\n        })\n    }\n\n    @computed get xAxis(): HorizontalAxis {\n        return this.dualAxis.horizontalAxis\n    }\n\n    @computed get yAxis(): VerticalAxis {\n        return this.dualAxis.verticalAxis\n    }\n\n    @computed private get labelFontSettings(): FontSettings {\n        return {\n            fontSize: scaleFontSize(12, this.fontSize),\n            fontWeight: 500,\n            lineHeight: 1,\n        }\n    }\n\n    @computed private get labelsRange(): [number, number] {\n        const {\n            horizontalAxisPart,\n            manager: { chartAreaPadding = 0 },\n        } = this\n\n        return this.bounds\n            .expand({\n                top: chartAreaPadding,\n                bottom: chartAreaPadding + horizontalAxisPart.height,\n            })\n            .yRange()\n    }\n\n    @computed private get labelsMaxWidth(): number {\n        return 0.3 * this.bounds.width\n    }\n\n    @computed private get labelsSeries(): Omit<\n        InitialAnchoredLabelSeries,\n        \"position\"\n    >[] {\n        if (!this.manager.showSeriesLabels || this.manager.useMinimalLabeling)\n            return []\n\n        return excludeUndefined(\n            this.chartState.series.map((series, seriesIndex) => {\n                const { seriesName, shortEntityName, color, focus } = series\n\n                // Don't label background series\n                if (focus?.background) return undefined\n\n                const value = this.chartState.midpoints[seriesIndex]\n                const label = shortEntityName ?? seriesName\n\n                return { seriesName, value, label, color }\n            })\n        )\n    }\n\n    private makeAnchoredLabelsState({\n        dualAxis,\n    }: {\n        dualAxis: DualAxis\n    }): AnchoredLabelsState | undefined {\n        if (this.labelsSeries.length === 0) return undefined\n\n        const series = this.labelsSeries.map((series) => {\n            const position = {\n                x: dualAxis.bounds.right,\n                y: dualAxis.verticalAxis.place(series.value),\n            }\n\n            return { ...series, position }\n        })\n\n        return new AnchoredLabelsState(series, {\n            ...this.labelFontSettings,\n            maxWidth: this.labelsMaxWidth,\n            labelPadding: LEGEND_PADDING,\n            yRange: this.labelsRange,\n            resolveCollision: (\n                s1: InitialAnchoredLabelSeries,\n                s2: InitialAnchoredLabelSeries\n            ): InitialAnchoredLabelSeries => {\n                const series1 = this.chartState.seriesByName.get(s1.seriesName)\n                const series2 = this.chartState.seriesByName.get(s2.seriesName)\n\n                if (!series1 || !series2) return s1 // no preference\n\n                const picked = resolveCollision(series1, series2)\n                if (picked?.seriesName === s1.seriesName) return s1\n                if (picked?.seriesName === s2.seriesName) return s2\n\n                return s1 // no preference\n            },\n        })\n    }\n\n    @computed private get anchoredLabelsState():\n        | AnchoredLabelsState\n        | undefined {\n        return this.makeAnchoredLabelsState({ dualAxis: this.dualAxis })\n    }\n\n    /**\n     * Estimated width of the labels, used by innerBounds to reserve space\n     * on the right side of the chart area.\n     *\n     * Ideally, we'd derive this from the final label state, which knows\n     * exactly which labels are visible after collision detection. But that\n     * would introduce a cyclic dependency: the label state needs the axis\n     * for pixel positions, the axis needs innerBounds, and innerBounds needs\n     * this width. To break the cycle, we run a preliminary layout pass\n     * using the full bounds (without label padding).\n     */\n    @computed private get estimatedLabelWidth(): number {\n        const approximateDualAxis = new DualAxis({\n            bounds: this.bounds,\n            horizontalAxis: this.horizontalAxisPart,\n            verticalAxis: this.verticalAxisPart,\n        })\n\n        const labelsState = this.makeAnchoredLabelsState({\n            dualAxis: approximateDualAxis,\n        })\n\n        const width = labelsState?.width ?? 0\n        return width > 0 ? width + LEGEND_PADDING : 0\n    }\n\n    @computed private get placedSeries(): PlacedStackedAreaSeries<Time>[] {\n        return toPlacedStackedAreaSeries(this.chartState.series, this.dualAxis)\n    }\n\n    @computed private get renderSeries(): RenderStackedAreaSeries<Time>[] {\n        return this.placedSeries.map((series) => ({\n            ...series,\n            emphasis: resolveEmphasis({ focus: series.focus }),\n        }))\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataMessage\n                    manager={this.manager}\n                    bounds={this.props.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return (\n            <>\n                <VerticalAxisZeroLine\n                    axis={this.dualAxis.verticalAxis}\n                    bounds={this.dualAxis.innerBounds}\n                />\n                {!this.dualAxis.horizontalAxis.hideAxis && (\n                    <HorizontalAxisComponent\n                        axis={this.dualAxis.horizontalAxis}\n                        bounds={this.dualAxis.bounds}\n                        showEndpointsOnly\n                    />\n                )}\n                <StackedAreas series={this.renderSeries} />\n                {this.anchoredLabelsState && (\n                    <AnchoredLabels state={this.anchoredLabelsState} />\n                )}\n            </>\n        )\n    }\n}\n","import React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { StackedBarChartState } from \"./StackedBarChartState.js\"\nimport { type StackedBarChartProps } from \"./StackedBarChart.js\"\nimport { ChartManager } from \"../chart/ChartManager\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    FontSettings,\n} from \"../core/GrapherConstants\"\nimport { scaleFontSize } from \"../chart/ChartUtils\"\nimport { Bounds, excludeUndefined } from \"@ourworldindata/utils\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig\"\nimport { DualAxis, HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\nimport { Time } from \"@ourworldindata/types\"\nimport {\n    PlacedStackedBarSeries,\n    RenderStackedBarSeries,\n} from \"./StackedConstants\"\nimport {\n    getXAxisConfigDefaultsForStackedBar,\n    resolveCollision,\n    toPlacedStackedBarSeries,\n} from \"./StackedUtils\"\nimport {\n    HorizontalAxisComponent,\n    VerticalAxisZeroLine,\n} from \"../axis/AxisViews\"\nimport { StackedBars } from \"./StackedBars\"\nimport { InitialAnchoredLabelSeries } from \"../anchoredLabels/AnchoredLabelsTypes.js\"\nimport { AnchoredLabelsState } from \"../anchoredLabels/AnchoredLabelsState\"\nimport { AnchoredLabels } from \"../anchoredLabels/AnchoredLabels\"\nimport { NoDataMessage } from \"../noDataMessage/NoDataMessage\"\nimport { resolveEmphasis } from \"../interaction/Emphasis.js\"\n\nconst LEGEND_PADDING = 4\n\n@observer\nexport class StackedBarChartThumbnail\n    extends React.Component<StackedBarChartProps>\n    implements ChartInterface, AxisManager\n{\n    constructor(props: StackedBarChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get chartState(): StackedBarChartState {\n        return this.props.chartState\n    }\n\n    @computed get manager(): ChartManager {\n        return this.chartState.manager\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get innerBounds(): Bounds {\n        return this.bounds.padRight(this.estimatedLabelWidth)\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        const { xAxisConfig } = this.manager\n        const defaults = getXAxisConfigDefaultsForStackedBar(this.chartState)\n        const custom = { labelPadding: 0 }\n        return new AxisConfig({ ...custom, ...defaults, ...xAxisConfig }, this)\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        const { yAxisConfig } = this.manager\n        const custom = { nice: true, hideAxis: true }\n        return new AxisConfig({ ...custom, ...yAxisConfig }, this)\n    }\n\n    @computed private get horizontalAxisPart(): HorizontalAxis {\n        return this.chartState.toHorizontalAxis(this.xAxisConfig)\n    }\n\n    @computed private get verticalAxisPart(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig)\n    }\n\n    @computed private get dualAxis(): DualAxis {\n        const { horizontalAxisPart, verticalAxisPart } = this\n        return new DualAxis({\n            bounds: this.innerBounds,\n            horizontalAxis: horizontalAxisPart,\n            verticalAxis: verticalAxisPart,\n        })\n    }\n\n    @computed get xAxis(): HorizontalAxis {\n        return this.dualAxis.horizontalAxis\n    }\n\n    @computed get yAxis(): VerticalAxis {\n        return this.dualAxis.verticalAxis\n    }\n\n    @computed private get labelFontSettings(): FontSettings {\n        return {\n            fontSize: scaleFontSize(12, this.fontSize),\n            fontWeight: 500,\n            lineHeight: 1,\n        }\n    }\n\n    @computed private get labelsRange(): [number, number] {\n        const {\n            horizontalAxisPart,\n            manager: { chartAreaPadding = 0 },\n        } = this\n\n        return this.bounds\n            .expand({\n                top: chartAreaPadding,\n                bottom: chartAreaPadding + horizontalAxisPart.height,\n            })\n            .yRange()\n    }\n\n    @computed private get labelsMaxWidth(): number {\n        return 0.3 * this.bounds.width\n    }\n\n    @computed private get labelsSeries(): Omit<\n        InitialAnchoredLabelSeries,\n        \"position\"\n    >[] {\n        if (!this.manager.showLegend) return []\n\n        return excludeUndefined(\n            this.chartState.series.map((series, seriesIndex) => {\n                const { seriesName, shortEntityName, color, focus } = series\n\n                // Don't label background series\n                if (focus?.background) return undefined\n\n                const value = this.chartState.midpoints[seriesIndex]\n                const label = shortEntityName ?? seriesName\n\n                return { seriesName, value, label, color }\n            })\n        )\n    }\n\n    private makeAnchoredLabelsState({\n        dualAxis,\n    }: {\n        dualAxis: DualAxis\n    }): AnchoredLabelsState | undefined {\n        if (this.labelsSeries.length === 0) return undefined\n\n        const series = this.labelsSeries.map((series) => {\n            const position = {\n                x: dualAxis.bounds.right,\n                y: dualAxis.verticalAxis.place(series.value),\n            }\n\n            return { ...series, position }\n        })\n\n        return new AnchoredLabelsState(series, {\n            ...this.labelFontSettings,\n            maxWidth: this.labelsMaxWidth,\n            labelPadding: LEGEND_PADDING,\n            yRange: this.labelsRange,\n            resolveCollision: (\n                s1: InitialAnchoredLabelSeries,\n                s2: InitialAnchoredLabelSeries\n            ): InitialAnchoredLabelSeries => {\n                const series1 = this.chartState.seriesByName.get(s1.seriesName)\n                const series2 = this.chartState.seriesByName.get(s2.seriesName)\n\n                if (!series1 || !series2) return s1 // no preference\n\n                const picked = resolveCollision(series1, series2)\n                if (picked?.seriesName === s1.seriesName) return s1\n                if (picked?.seriesName === s2.seriesName) return s2\n\n                return s1 // no preference\n            },\n        })\n    }\n\n    @computed private get anchoredLabelsState():\n        | AnchoredLabelsState\n        | undefined {\n        return this.makeAnchoredLabelsState({ dualAxis: this.dualAxis })\n    }\n\n    /**\n     * Estimated width of the labels, used by innerBounds to reserve space\n     * on the right side of the chart area.\n     *\n     * Ideally, we'd derive this from the final label state, which knows\n     * exactly which labels are visible after collision detection. But that\n     * would introduce a cyclic dependency: the label state needs the axis\n     * for pixel positions, the axis needs innerBounds, and innerBounds needs\n     * this width. To break the cycle, we run a preliminary layout pass\n     * using the full bounds (without label padding).\n     */\n    @computed private get estimatedLabelWidth(): number {\n        const approximateDualAxis = new DualAxis({\n            bounds: this.bounds,\n            horizontalAxis: this.horizontalAxisPart,\n            verticalAxis: this.verticalAxisPart,\n        })\n\n        const labelsState = this.makeAnchoredLabelsState({\n            dualAxis: approximateDualAxis,\n        })\n\n        const width = labelsState?.width ?? 0\n\n        return width > 0 ? width + LEGEND_PADDING : 0\n    }\n\n    @computed\n    private get placedSeries(): readonly PlacedStackedBarSeries<Time>[] {\n        return toPlacedStackedBarSeries(this.chartState.series, this.dualAxis)\n    }\n\n    @computed private get renderSeries(): RenderStackedBarSeries<Time>[] {\n        return this.placedSeries.map((series) => ({\n            ...series,\n            emphasis: resolveEmphasis({ focus: series.focus }),\n        }))\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataMessage\n                    manager={this.manager}\n                    bounds={this.props.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return (\n            <>\n                <VerticalAxisZeroLine\n                    axis={this.dualAxis.verticalAxis}\n                    bounds={this.dualAxis.innerBounds}\n                />\n                {!this.dualAxis.horizontalAxis.hideAxis && (\n                    <HorizontalAxisComponent\n                        axis={this.dualAxis.horizontalAxis}\n                        bounds={this.dualAxis.bounds}\n                        showEndpointsOnly\n                    />\n                )}\n                <StackedBars series={this.renderSeries} />\n                {this.anchoredLabelsState && (\n                    <AnchoredLabels state={this.anchoredLabelsState} />\n                )}\n            </>\n        )\n    }\n}\n","import React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { StackedDiscreteBarChartState } from \"./StackedDiscreteBarChartState\"\nimport { ChartComponentProps } from \"../chart/ChartTypeMap.js\"\nimport { StackedDiscreteBarChart } from \"./StackedDiscreteBarChart\"\n\n@observer\nexport class StackedDiscreteBarChartThumbnail\n    extends React.Component<ChartComponentProps<StackedDiscreteBarChartState>>\n    implements ChartInterface\n{\n    constructor(props: ChartComponentProps<StackedDiscreteBarChartState>) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get chartState(): StackedDiscreteBarChartState {\n        return this.props.chartState\n    }\n\n    override render(): React.ReactElement {\n        return <StackedDiscreteBarChart {...this.props} hideLegend />\n    }\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { ScatterPlotChartState } from \"./ScatterPlotChartState\"\nimport { type ScatterPlotChartProps } from \"./ScatterPlotChart.js\"\nimport { ScaleLinear, scaleSqrt } from \"d3-scale\"\nimport { DualAxis, HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\nimport { Bounds } from \"@ourworldindata/utils\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n} from \"../core/GrapherConstants\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig\"\nimport { ScatterPlotManager } from \"./ScatterPlotChartConstants\"\nimport { toSizeRange } from \"./ScatterUtils\"\nimport { DualAxisComponent } from \"../axis/AxisViews\"\nimport { ScatterPointsWithLabels } from \"./ScatterPointsWithLabels\"\nimport { NoDataMessage } from \"../noDataMessage/NoDataMessage\"\n\n@observer\nexport class ScatterPlotChartThumbnail\n    extends React.Component<ScatterPlotChartProps>\n    implements ChartInterface, AxisManager\n{\n    constructor(props: ScatterPlotChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get chartState(): ScatterPlotChartState {\n        return this.props.chartState\n    }\n\n    @computed get manager(): ScatterPlotManager {\n        return this.chartState.manager\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get innerBounds(): Bounds {\n        return this.bounds\n    }\n\n    @computed get axisBounds(): Bounds {\n        return this.innerBounds\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        const { xAxisConfig } = this.manager\n        const custom = { labelPadding: 2 }\n        return new AxisConfig({ ...custom, ...xAxisConfig }, this)\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        const { yAxisConfig } = this.manager\n        const custom = { labelPadding: 8 }\n        return new AxisConfig({ ...custom, ...yAxisConfig }, this)\n    }\n\n    @computed private get verticalAxisPart(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig)\n    }\n\n    @computed private get horizontalAxisPart(): HorizontalAxis {\n        return this.chartState.toHorizontalAxis(this.xAxisConfig)\n    }\n\n    @computed private get dualAxis(): DualAxis {\n        return new DualAxis({\n            bounds: this.innerBounds,\n            horizontalAxis: this.horizontalAxisPart,\n            verticalAxis: this.verticalAxisPart,\n        })\n    }\n\n    @computed private get sizeRange(): [number, number] {\n        return toSizeRange(this.chartState, this.innerBounds)\n    }\n\n    @computed get sizeScale(): ScaleLinear<number, number> {\n        return scaleSqrt()\n            .domain(this.chartState.sizeDomain)\n            .range(this.sizeRange)\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataMessage\n                    manager={this.manager}\n                    bounds={this.props.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return (\n            <>\n                <DualAxisComponent\n                    dualAxis={this.dualAxis}\n                    showTickMarks={false}\n                    showEndpointsOnly={true}\n                />\n                <ScatterPointsWithLabels\n                    noDataMessageManager={this.manager}\n                    isConnected={this.chartState.isConnected}\n                    hideConnectedScatterLines={\n                        !!this.manager.hideConnectedScatterLines\n                    }\n                    seriesArray={this.chartState.series}\n                    dualAxis={this.dualAxis}\n                    colorScale={\n                        !this.chartState.colorColumn.isMissing\n                            ? this.chartState.colorScale\n                            : undefined\n                    }\n                    sizeScale={this.sizeScale}\n                    baseFontSize={this.fontSize}\n                    focusedSeriesNames={\n                        this.chartState.selectionArray.selectedEntityNames\n                    }\n                    hideScatterLabels={true}\n                />\n            </>\n        )\n    }\n}\n","import * as React from \"react\"\nimport { observer } from \"mobx-react\"\nimport * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport { computed, makeObservable } from \"mobx\"\nimport { PlacedMarimekkoSeries } from \"./MarimekkoChartConstants\"\nimport { DualAxis } from \"../axis/Axis\"\nimport { Bounds, roundForSvg } from \"@ourworldindata/utils\"\nimport { Halo } from \"@ourworldindata/components\"\n\ninterface MarimekkoInternalLabelsProps {\n    series: PlacedMarimekkoSeries[]\n    dualAxis: DualAxis\n    fontSize: number\n    labelPadding: number\n}\n\ninterface PlacedInternalLabel {\n    bounds: Bounds\n    label: string\n    color: string\n}\n\n@observer\nexport class MarimekkoInternalLabels extends React.Component<MarimekkoInternalLabelsProps> {\n    constructor(props: MarimekkoInternalLabelsProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get sortedSeries(): PlacedMarimekkoSeries[] {\n        return _.sortBy(\n            this.props.series,\n            (series) => series.xPoint?.value ?? series.barX\n        )\n    }\n\n    @computed get placedLabels(): PlacedInternalLabel[] {\n        return this.sortedSeries\n            .map((series) => {\n                if (series.yPoint === undefined) return undefined\n\n                const x = series.barX\n                const y =\n                    series.barY - series.barHeight - this.props.labelPadding\n\n                const label = series.shortEntityName ?? series.entityName\n                const bounds = Bounds.forText(label, {\n                    fontSize: this.props.fontSize,\n                }).set({ x, y })\n\n                return { bounds, label, color: series.color }\n            })\n            .filter((label) => label !== undefined)\n    }\n\n    @computed get visibleLabels(): PlacedInternalLabel[] {\n        const placedLabels = this.placedLabels.map((series) => ({\n            ...series,\n            // Hide label if it doesn't fit within the chart area\n            isHidden:\n                series.bounds.x + series.bounds.width >\n                this.props.dualAxis.innerBounds.right,\n        }))\n\n        // Hide overlapping labels\n        for (let i = 0; i < placedLabels.length; i++) {\n            const s1 = placedLabels[i]\n            if (s1.isHidden) continue\n\n            for (let j = i + 1; j < placedLabels.length; j++) {\n                const s2 = placedLabels[j]\n                if (s2.isHidden) continue\n\n                if (s1.bounds.intersects(s2.bounds)) {\n                    s2.isHidden = true\n                }\n            }\n        }\n\n        return placedLabels\n            .filter((label) => !label.isHidden)\n            .map((series) => R.omit(series, [\"isHidden\"]))\n    }\n\n    override render(): React.ReactElement | null {\n        if (!this.visibleLabels.length) return null\n\n        return (\n            <g>\n                {this.visibleLabels.map(({ label, bounds, color }) => (\n                    <Halo key={label} id={label} outlineWidth={2}>\n                        <text\n                            x={roundForSvg(bounds.x)}\n                            y={roundForSvg(bounds.y)}\n                            fontSize={this.props.fontSize}\n                            fill={color}\n                        >\n                            {label}\n                        </text>\n                    </Halo>\n                ))}\n            </g>\n        )\n    }\n}\n","import React from \"react\"\nimport * as _ from \"lodash-es\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { MarimekkoChartState } from \"./MarimekkoChartState\"\nimport { type MarimekkoChartProps } from \"./MarimekkoChart.js\"\nimport {\n    MarimekkoChartManager,\n    PlacedMarimekkoSeries,\n    RenderMarimekkoSeries,\n} from \"./MarimekkoChartConstants\"\nimport { Bounds } from \"@ourworldindata/utils\"\nimport { DualAxis, HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\nimport { AxisConfig } from \"../axis/AxisConfig\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n} from \"../core/GrapherConstants\"\nimport { scaleFontSize } from \"../chart/ChartUtils\"\nimport { MarimekkoBars } from \"./MarimekkoBars\"\nimport { DualAxisComponent } from \"../axis/AxisViews\"\nimport {\n    toMarimekkoNoDataArea,\n    toPlacedMarimekkoSeries,\n    toRenderMarimekkoSeries,\n} from \"./MarimekkoChartHelpers\"\nimport { MarimekkoInternalLabels } from \"./MarimekkoInternalLabels\"\nimport { NoDataMessage } from \"../noDataMessage/NoDataMessage\"\n\nconst LABEL_PADDING = 4\n\n@observer\nexport class MarimekkoChartThumbnail\n    extends React.Component<MarimekkoChartProps>\n    implements ChartInterface\n{\n    constructor(props: MarimekkoChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get chartState(): MarimekkoChartState {\n        return this.props.chartState\n    }\n\n    @computed get manager(): MarimekkoChartManager {\n        return this.chartState.manager\n    }\n\n    @computed get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed get innerBounds(): Bounds {\n        return (\n            this.bounds\n                // Allow internal labels to eat into the thumbnail padding\n                .padTop(this.labelHeight ? this.labelHeight - 6 : 0)\n                // Add some bottom padding since the y-axis tick labels are\n                // center-aligned and eat into the thumbnail padding\n                .padBottom(this.shouldShowVerticalAxis ? 6 : 0)\n        )\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed get labelFontSize(): number {\n        return scaleFontSize(12, this.fontSize)\n    }\n\n    @computed get labelHeight(): number {\n        return this.shouldShowLabels ? this.labelFontSize + LABEL_PADDING : 0\n    }\n\n    @computed private get shouldShowVerticalAxis(): boolean {\n        return !!this.manager.useMinimalLabeling\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        const { yAxisConfig } = this.manager\n        const custom = {\n            hideGridlines: true,\n            hideAxis: !this.shouldShowVerticalAxis,\n        }\n        return new AxisConfig({ ...yAxisConfig, ...custom }, this)\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        const { xAxisConfig } = this.manager\n        const custom = { hideAxis: true, hideGridlines: true }\n        return new AxisConfig({ ...xAxisConfig, ...custom }, this)\n    }\n\n    @computed private get verticalAxisPart(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig)\n    }\n\n    @computed private get horizontalAxisPart(): HorizontalAxis {\n        return this.chartState.toHorizontalAxis(this.xAxisConfig)\n    }\n\n    @computed private get dualAxis(): DualAxis {\n        return new DualAxis({\n            bounds: this.innerBounds,\n            verticalAxis: this.verticalAxisPart,\n            horizontalAxis: this.horizontalAxisPart,\n        })\n    }\n\n    @computed get xAxis(): HorizontalAxis {\n        return this.dualAxis.horizontalAxis\n    }\n\n    @computed get yAxis(): VerticalAxis {\n        return this.dualAxis.verticalAxis\n    }\n\n    @computed get placedSeries(): PlacedMarimekkoSeries[] {\n        const { x0, y0, sortedSeries } = this.chartState\n        return toPlacedMarimekkoSeries(sortedSeries, {\n            x0,\n            y0,\n            dualAxis: this.dualAxis,\n        })\n    }\n\n    @computed private get renderSeries(): RenderMarimekkoSeries[] {\n        return toRenderMarimekkoSeries(this.placedSeries)\n    }\n\n    @computed private get placedSeriesByEntityName(): Map<\n        string,\n        PlacedMarimekkoSeries\n    > {\n        return new Map(\n            this.placedSeries.map((series) => [series.entityName, series])\n        )\n    }\n\n    @computed private get shouldShowLabels(): boolean {\n        return this.chartState.isFocusModeActive\n    }\n\n    @computed private get labelledSeries(): PlacedMarimekkoSeries[] {\n        if (!this.shouldShowLabels) return []\n        return this.chartState.focusArray.seriesNames\n            .map((entityName) => this.placedSeriesByEntityName.get(entityName))\n            .filter((series) => series !== undefined)\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataMessage\n                    manager={this.manager}\n                    bounds={this.props.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return (\n            <g>\n                <DualAxisComponent dualAxis={this.dualAxis} showEndpointsOnly />\n                <MarimekkoBars\n                    series={this.renderSeries}\n                    noDataArea={toMarimekkoNoDataArea(this.placedSeries)}\n                    fontSize={this.fontSize}\n                    patternIdSuffix={this.manager.patternIdSuffix}\n                    isFocusModeActive={this.chartState.isFocusModeActive}\n                />\n                <MarimekkoInternalLabels\n                    series={this.labelledSeries}\n                    dualAxis={this.dualAxis}\n                    fontSize={this.labelFontSize}\n                    labelPadding={LABEL_PADDING}\n                />\n            </g>\n        )\n    }\n}\n","import * as React from \"react\"\nimport { Component } from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { DumbbellChartState } from \"./DumbbellChartState\"\nimport { ChartComponentProps } from \"../chart/ChartTypeMap\"\nimport { DumbbellChart, DumbbellChartProps } from \"./DumbbellChart.js\"\nimport { DumbbellChartManager } from \"./DumbbellChartConstants.js\"\n\n@observer\nexport class DumbbellChartThumbnail\n    extends Component<ChartComponentProps<DumbbellChartState>>\n    implements ChartInterface\n{\n    constructor(props: DumbbellChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get chartState(): DumbbellChartState {\n        return this.props.chartState\n    }\n\n    @computed get manager(): DumbbellChartManager {\n        return this.props.chartState.manager\n    }\n\n    override render(): React.ReactElement {\n        return <DumbbellChart {...this.props} />\n    }\n}\n","import React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { SwimlaneChartState } from \"./SwimlaneChartState\"\nimport { SwimlaneChart, SwimlaneChartProps } from \"./SwimlaneChart\"\n\n@observer\nexport class SwimlaneChartThumbnail\n    extends React.Component<SwimlaneChartProps>\n    implements ChartInterface\n{\n    constructor(props: SwimlaneChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get chartState(): SwimlaneChartState {\n        return this.props.chartState\n    }\n\n    override render(): React.ReactElement {\n        return <SwimlaneChart {...this.props} />\n    }\n}\n","import React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { MapChartState } from \"./MapChartState\"\nimport { MapChart, MapChartProps } from \"./MapChart\"\n\n@observer\nexport class MapChartThumbnail\n    extends React.Component<MapChartProps>\n    implements ChartInterface\n{\n    constructor(props: MapChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get chartState(): MapChartState {\n        return this.props.chartState\n    }\n\n    override render(): React.ReactElement {\n        return <MapChart {...this.props} />\n    }\n}\n","import { match, P } from \"ts-pattern\"\nimport {\n    GRAPHER_CHART_TYPES,\n    GRAPHER_MAP_TYPE,\n    GrapherChartOrMapType,\n    GrapherVariant,\n} from \"@ourworldindata/types\"\nimport { ChartInterface, ChartState } from \"./ChartInterface\"\nimport { ChartManager } from \"./ChartManager\"\nimport { ComponentClass, Component } from \"react\"\nimport { Bounds } from \"@ourworldindata/utils\"\n\nimport { LineChartState } from \"../lineCharts/LineChartState.js\"\nimport { SlopeChartState } from \"../slopeCharts/SlopeChartState\"\nimport { DiscreteBarChartState } from \"../barCharts/DiscreteBarChartState.js\"\nimport { StackedAreaChartState } from \"../stackedCharts/StackedAreaChartState.js\"\nimport { StackedBarChartState } from \"../stackedCharts/StackedBarChartState.js\"\nimport { StackedDiscreteBarChartState } from \"../stackedCharts/StackedDiscreteBarChartState\"\nimport { ScatterPlotChartState } from \"../scatterCharts/ScatterPlotChartState\"\nimport { MarimekkoChartState } from \"../marimekko/MarimekkoChartState\"\nimport { DumbbellChartState } from \"../dumbbellCharts/DumbbellChartState\"\nimport { SwimlaneChartState } from \"../swimlaneCharts/SwimlaneChartState\"\nimport { MapChartState } from \"../mapCharts/MapChartState\"\n\nimport { LineChart } from \"../lineCharts/LineChart\"\nimport { SlopeChart } from \"../slopeCharts/SlopeChart.js\"\nimport { DiscreteBarChart } from \"../barCharts/DiscreteBarChart.js\"\nimport { StackedAreaChart } from \"../stackedCharts/StackedAreaChart\"\nimport { StackedBarChart } from \"../stackedCharts/StackedBarChart\"\nimport { StackedDiscreteBarChart } from \"../stackedCharts/StackedDiscreteBarChart\"\nimport { ScatterPlotChart } from \"../scatterCharts/ScatterPlotChart\"\nimport { MarimekkoChart } from \"../marimekko/MarimekkoChart\"\nimport { DumbbellChart } from \"../dumbbellCharts/DumbbellChart\"\nimport { SwimlaneChart } from \"../swimlaneCharts/SwimlaneChart\"\nimport { MapChart } from \"../mapCharts/MapChart\"\n\nimport { LineChartThumbnail } from \"../lineCharts/LineChartThumbnail\"\nimport { SlopeChartThumbnail } from \"../slopeCharts/SlopeChartThumbnail\"\nimport { DiscreteBarChartThumbnail } from \"../barCharts/DiscreteBarChartThumbnail.js\"\nimport { StackedAreaChartThumbnail } from \"../stackedCharts/StackedAreaChartThumbnail\"\nimport { StackedBarChartThumbnail } from \"../stackedCharts/StackedBarChartThumbnail\"\nimport { StackedDiscreteBarChartThumbnail } from \"../stackedCharts/StackedDiscreteBarChartThumbnail\"\nimport { ScatterPlotChartThumbnail } from \"../scatterCharts/ScatterPlotChartThumbnail\"\nimport { MarimekkoChartThumbnail } from \"../marimekko/MarimekkoChartThumbnail\"\nimport { DumbbellChartThumbnail } from \"../dumbbellCharts/DumbbellChartThumbnail\"\nimport { SwimlaneChartThumbnail } from \"../swimlaneCharts/SwimlaneChartThumbnail\"\nimport { MapChartThumbnail } from \"../mapCharts/MapChartThumbnail\"\n\nexport interface ChartComponentProps<TState extends ChartState = ChartState> {\n    chartState: TState\n    bounds?: Bounds\n}\n\ninterface ChartComponentClass<\n    T extends ChartState = ChartState,\n> extends ComponentClass<ChartComponentProps<T>> {\n    new (props: ChartComponentProps<T>): Component & ChartInterface\n}\n\ntype ChartFactoryProps = {\n    manager: ChartManager\n    chartType: GrapherChartOrMapType\n    chartState?: ChartState\n    variant?: GrapherVariant\n} & Omit<ChartComponentProps, \"chartState\">\n\nconst ChartComponentClassMap = new Map<\n    GrapherChartOrMapType,\n    ChartComponentClass<any>\n>([\n    [GRAPHER_CHART_TYPES.LineChart, LineChart],\n    [GRAPHER_CHART_TYPES.SlopeChart, SlopeChart],\n    [GRAPHER_CHART_TYPES.DiscreteBar, DiscreteBarChart],\n    [GRAPHER_CHART_TYPES.StackedArea, StackedAreaChart],\n    [GRAPHER_CHART_TYPES.StackedBar, StackedBarChart],\n    [GRAPHER_CHART_TYPES.StackedDiscreteBar, StackedDiscreteBarChart],\n    [GRAPHER_CHART_TYPES.ScatterPlot, ScatterPlotChart],\n    [GRAPHER_CHART_TYPES.Marimekko, MarimekkoChart],\n    [GRAPHER_CHART_TYPES.Dumbbell, DumbbellChart],\n    [GRAPHER_CHART_TYPES.Swimlane, SwimlaneChart],\n    [GRAPHER_MAP_TYPE, MapChart],\n])\n\nconst ChartThumbnailClassMap = new Map<\n    GrapherChartOrMapType,\n    ChartComponentClass<any>\n>([\n    [GRAPHER_CHART_TYPES.LineChart, LineChartThumbnail],\n    [GRAPHER_CHART_TYPES.SlopeChart, SlopeChartThumbnail],\n    [GRAPHER_CHART_TYPES.DiscreteBar, DiscreteBarChartThumbnail],\n    [GRAPHER_CHART_TYPES.StackedArea, StackedAreaChartThumbnail],\n    [GRAPHER_CHART_TYPES.StackedBar, StackedBarChartThumbnail],\n    [GRAPHER_CHART_TYPES.StackedDiscreteBar, StackedDiscreteBarChartThumbnail],\n    [GRAPHER_CHART_TYPES.ScatterPlot, ScatterPlotChartThumbnail],\n    [GRAPHER_CHART_TYPES.Marimekko, MarimekkoChartThumbnail],\n    [GRAPHER_CHART_TYPES.Dumbbell, DumbbellChartThumbnail],\n    [GRAPHER_CHART_TYPES.Swimlane, SwimlaneChartThumbnail],\n    [GRAPHER_MAP_TYPE, MapChartThumbnail],\n])\n\nconst ChartStateMap = new Map<\n    GrapherChartOrMapType,\n    new (args: { manager: ChartManager }) => ChartState\n>([\n    [GRAPHER_CHART_TYPES.LineChart, LineChartState],\n    [GRAPHER_CHART_TYPES.SlopeChart, SlopeChartState],\n    [GRAPHER_CHART_TYPES.DiscreteBar, DiscreteBarChartState],\n    [GRAPHER_CHART_TYPES.StackedArea, StackedAreaChartState],\n    [GRAPHER_CHART_TYPES.StackedBar, StackedBarChartState],\n    [GRAPHER_CHART_TYPES.StackedDiscreteBar, StackedDiscreteBarChartState],\n    [GRAPHER_CHART_TYPES.ScatterPlot, ScatterPlotChartState],\n    [GRAPHER_CHART_TYPES.Marimekko, MarimekkoChartState],\n    [GRAPHER_CHART_TYPES.Dumbbell, DumbbellChartState],\n    [GRAPHER_CHART_TYPES.Swimlane, SwimlaneChartState],\n    [GRAPHER_MAP_TYPE, MapChartState],\n])\n\nexport function makeChartState(\n    chartType: GrapherChartOrMapType,\n    manager: ChartManager\n): ChartState {\n    const StateClass = ChartStateMap.get(chartType) ?? LineChartState\n    return new StateClass({ manager })\n}\n\nfunction getChartComponentClass(\n    chartType: GrapherChartOrMapType,\n    variant = GrapherVariant.Default\n): ChartComponentClass {\n    const { ClassMap, DefaultChartClass } = match(variant)\n        .with(\n            P.union(GrapherVariant.Default, GrapherVariant.Uncaptioned),\n            () => ({\n                ClassMap: ChartComponentClassMap,\n                DefaultChartClass: LineChart,\n            })\n        )\n        .with(GrapherVariant.Thumbnail, () => ({\n            ClassMap: ChartThumbnailClassMap,\n            DefaultChartClass: LineChartThumbnail,\n        }))\n        .exhaustive()\n\n    const ChartClass = ClassMap.get(chartType) ?? DefaultChartClass\n\n    return ChartClass as ChartComponentClass\n}\n\nexport const ChartComponent = ({\n    manager,\n    chartType,\n    chartState,\n    variant = GrapherVariant.Default,\n    ...componentProps\n}: ChartFactoryProps): React.ReactElement => {\n    const validChartState = chartState ?? makeChartState(chartType, manager)\n    const ChartClass = getChartComponentClass(chartType, variant)\n    // ChartClass is looked up from static maps, so it's stable across renders\n    // oxlint-disable-next-line react/static-components\n    return <ChartClass {...componentProps} chartState={validChartState} />\n}\n\nexport const makeChartInstance = ({\n    manager,\n    chartType,\n    chartState,\n    variant = GrapherVariant.Default,\n    ...componentProps\n}: ChartFactoryProps): ChartInterface => {\n    const validChartState = chartState ?? makeChartState(chartType, manager)\n    const ChartClass = getChartComponentClass(chartType, variant)\n    return new ChartClass({ ...componentProps, chartState: validChartState })\n}\n","import * as _ from \"lodash-es\"\nimport { IDEAL_PLOT_ASPECT_RATIO } from \"@ourworldindata/utils\"\nimport { BASE_FONT_SIZE } from \"../core/GrapherConstants\"\nimport { roundFontSize, scaleFontSize } from \"../chart/ChartUtils\"\n\nconst SMALL_CELL_LENGTH = 125\nconst LARGE_CELL_LENGTH = 490\n\n/** Chooses a facet label font size from the size of a single facet cell */\nexport const getFacetLabelFontSize = ({\n    cellWidth,\n    cellHeight,\n    baseFontSize = BASE_FONT_SIZE,\n    minSize = 8,\n}: {\n    cellWidth: number\n    cellHeight: number\n    baseFontSize?: number\n    minSize?: number\n}): number => {\n    const minFontSize = Math.max(minSize, scaleFontSize(11, baseFontSize))\n    const maxFontSize = scaleFontSize(\n        15,\n        Math.min(baseFontSize, BASE_FONT_SIZE)\n    )\n\n    // Available room as a single number (width-pixels): the width, but capped at\n    // what it'd be at the ideal aspect ratio, so short-and-wide cells are driven\n    // by their height and tall-or-square cells by their width\n    const length = Math.min(cellWidth, cellHeight * IDEAL_PLOT_ASPECT_RATIO)\n\n    // Where `length` falls in the small→large cell range, as a 0–1 fraction\n    const sizeFraction = _.clamp(\n        (length - SMALL_CELL_LENGTH) / (LARGE_CELL_LENGTH - SMALL_CELL_LENGTH),\n        0,\n        1\n    )\n\n    // Interpolate between the floor and ceiling\n    const fontSize = minFontSize + sizeFraction * (maxFontSize - minFontSize)\n\n    return roundFontSize(fontSize)\n}\n\nexport const calculateAspectRatio = (width: number, height: number): number => {\n    const aspectRatio = width / height // can be NaN if height is 0, which can happen when the chart is temporarily hidden\n    if (isNaN(aspectRatio)) return 1\n    return aspectRatio\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport * as R from \"remeda\"\nimport { observer } from \"mobx-react\"\nimport {\n    Bounds,\n    excludeUndefined,\n    getIdealGridParams,\n    IDEAL_PLOT_ASPECT_RATIO,\n    GridParameters,\n    Position,\n    PositionMap,\n    HorizontalAlign,\n    Color,\n    makeFigmaId,\n    exposeInstanceOnWindow,\n    SplitBoundsPadding,\n} from \"@ourworldindata/utils\"\nimport { shortenWithEllipsis } from \"@ourworldindata/components\"\nimport { action, computed, makeObservable, observable } from \"mobx\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n} from \"../core/GrapherConstants\"\nimport {\n    GRAPHER_CHART_TYPES,\n    GrapherChartType,\n    FacetAxisDomain,\n    FacetStrategy,\n    SeriesColorMap,\n    SeriesStrategy,\n    SideWidths,\n    AxisConfigInterface,\n    ChartErrorInfo,\n    GrapherVariant,\n    TickFormattingOptions,\n} from \"@ourworldindata/types\"\nimport { ChartComponent, makeChartInstance } from \"../chart/ChartTypeMap\"\nimport { ChartManager } from \"../chart/ChartManager\"\nimport { ChartInterface, ChartState } from \"../chart/ChartInterface\"\nimport { calculateAspectRatio, getFacetLabelFontSize } from \"./FacetChartUtils\"\nimport {\n    FacetSeries,\n    FacetChartProps,\n    PlacedFacetSeries,\n    FacetChartManager,\n} from \"./FacetChartConstants\"\nimport { OwidTable, CoreColumn } from \"@ourworldindata/core-table\"\nimport { autoDetectYColumnSlugs, makeSelectionArray } from \"../chart/ChartUtils\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { AxisConfig } from \"../axis/AxisConfig\"\nimport { HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\nimport { HorizontalNumericColorLegend } from \"../legend/HorizontalNumericColorLegend\"\nimport { HorizontalCategoricalColorLegend } from \"../legend/HorizontalCategoricalColorLegend\"\nimport { HorizontalNumericColorLegendState } from \"../legend/HorizontalNumericColorLegendState\"\nimport { HorizontalCategoricalColorLegendState } from \"../legend/HorizontalCategoricalColorLegendState\"\nimport { ExternalColorLegendData } from \"../legend/HorizontalColorLegendTypes\"\nimport {\n    CategoricalBin,\n    ColorScaleBin,\n    dedupeRepeatedBins,\n    NumericBin,\n} from \"../color/ColorScaleBin\"\nimport { FocusArray } from \"../focus/FocusArray\"\nimport {\n    BinEmphasis,\n    LegendStyleConfig,\n    toBinEmphasis,\n} from \"../legend/LegendStyleConfig\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport { SeriesLabel } from \"../seriesLabel/SeriesLabel.js\"\nimport {\n    SeriesLabelState,\n    SeriesLabelStateOptions,\n} from \"../seriesLabel/SeriesLabelState.js\"\n\ntype HorizontalColorLegend =\n    | { kind: \"numeric\"; state: HorizontalNumericColorLegendState }\n    | { kind: \"categorical\"; state: HorizontalCategoricalColorLegendState }\n\nconst SHARED_X_AXIS_MAX_CELL_HEIGHT = 175\nconst THUMBNAIL_MAX_CELL_LENGTH = 150\nconst FACET_LABEL_FONT_WEIGHT = 700\n\nconst getContentBounds = (\n    containerBounds: Bounds,\n    manager: ChartManager,\n    chartInstance: ChartInterface\n): Bounds => {\n    let bounds = containerBounds\n    const axes = [\n        { config: manager.xAxisConfig, axis: chartInstance.xAxis },\n        { config: manager.yAxisConfig, axis: chartInstance.yAxis },\n    ]\n    for (const { config, axis } of axes) {\n        if (!config || !axis) continue\n        if (!config.hideAxis && config.minSize !== undefined) {\n            bounds = bounds.pad({ [axis.orient]: config.minSize })\n        }\n    }\n    return bounds\n}\n\nconst shouldHideFacetAxis = (\n    axis: HorizontalAxis | VerticalAxis | undefined,\n    edges: Set<Position>,\n    sharedAxesSizes: PositionMap<number>\n): boolean => {\n    if (!axis) return false\n    if (axis.hideAxis) return true\n    return axis.orient in sharedAxesSizes && !edges.has(axis.orient)\n}\n\ninterface AxisInfo {\n    config: AxisConfigInterface\n    axisAccessor: (\n        chartInstance: ChartInterface\n    ) => HorizontalAxis | VerticalAxis | undefined\n    uniform: boolean\n    /** only considered when `uniform` is `true`, otherwise ignored */\n    shared: boolean\n}\n\ninterface AxesInfo {\n    x: AxisInfo\n    y: AxisInfo\n}\n\n@observer\nexport class FacetChart\n    extends React.Component<FacetChartProps>\n    implements ChartState\n{\n    constructor(props: FacetChartProps) {\n        super(props)\n\n        makeObservable<FacetChart, \"legendHoverBin\">(this, {\n            legendHoverBin: observable.ref,\n        })\n    }\n\n    transformTable(table: OwidTable): OwidTable {\n        return table\n    }\n\n    @computed get inputTable(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed get transformedTable(): OwidTable {\n        return (\n            this.manager.transformedTable ??\n            this.transformTable(this.inputTable)\n        )\n    }\n\n    @computed private get manager(): FacetChartManager {\n        return this.props.manager\n    }\n\n    @computed private get chartTypeName(): GrapherChartType {\n        return this.props.chartTypeName ?? GRAPHER_CHART_TYPES.LineChart\n    }\n\n    @computed get isStatic(): boolean {\n        return !!this.manager.isStatic\n    }\n\n    @computed get errorInfo(): ChartErrorInfo {\n        return { reason: \"\" }\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get legendPadding(): number {\n        const { isNumericLegend, fontSize } = this\n        return isNumericLegend ? 1.5 * fontSize : 0.875 * fontSize\n    }\n\n    @computed private get labelPadding(): number {\n        return 0.5 * this.facetLabelFontSize\n    }\n\n    @computed private get facetsContainerBounds(): Bounds {\n        const legendHeightWithPadding =\n            this.showLegend && this.legend.state.height > 0\n                ? this.legend.state.height + this.legendPadding\n                : 0\n        return this.bounds.padTop(legendHeightWithPadding)\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get facetLabelFontSize(): number {\n        const { rows, columns } = this.gridParams\n\n        const cellWidth = this.bounds.width / columns\n        const cellHeight = this.bounds.height / rows\n\n        return getFacetLabelFontSize({\n            cellWidth,\n            cellHeight,\n            baseFontSize: this.fontSize,\n        })\n    }\n\n    @computed private get facetBaseFontSize(): number {\n        // Facets scale internal font sizes like axis ticks and labels from\n        // this base size, with the largest of them using size 12.\n        // Dividing by that factor keeps the biggest internal font at the label\n        // size; the extra 0.9 keeps it slightly smaller.\n        return ((this.facetLabelFontSize * BASE_FONT_SIZE) / 12) * 0.9\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        return new AxisConfig(this.manager.yAxisConfig, {\n            fontSize: this.facetBaseFontSize,\n        })\n    }\n\n    @computed private get uniformYAxis(): boolean {\n        // default to shared\n        const facetDomain =\n            this.yAxisConfig.facetDomain || FacetAxisDomain.shared\n        return facetDomain === FacetAxisDomain.shared\n    }\n\n    @computed private get uniformXAxis(): boolean {\n        // TODO: maybe should not be the default for ScatterPlot?\n        return true\n    }\n\n    @computed private get facetCount(): number {\n        return this.series.length\n    }\n\n    @computed private get gridParams(): GridParameters {\n        const count = this.facetCount\n        const { width, height } = this.bounds\n\n        const containerAspectRatio = calculateAspectRatio(width, height)\n\n        return getIdealGridParams({\n            count,\n            containerAspectRatio,\n            idealAspectRatio: IDEAL_PLOT_ASPECT_RATIO,\n        })\n    }\n\n    @computed private get facetGridPadding(): SplitBoundsPadding {\n        return {\n            rowPadding: Math.round(this.facetLabelFontSize),\n            columnPadding: Math.round(this.facetLabelFontSize),\n            outerPadding: 0,\n        }\n    }\n\n    @computed private get hideFacetLegends(): boolean {\n        return true\n    }\n\n    // Passing this color map is important to ensure that all facets use the same entity colors\n    seriesColorMap: SeriesColorMap = this.manager?.seriesColorMap ?? new Map()\n\n    /**\n     * Holds the intermediate render properties for chart views, before axes are synchronized,\n     * collapsed, aligned, etc.\n     *\n     * An example: a StackedArea has a Y axis domain that is the largest sum of all columns.\n     * In order to avoid replicating that logic here (stacking values), we initialize StackedArea\n     * instances, without rendering them. In a later method, we use those intermediate chart views to\n     * determine the final axes for facets, e.g. for a uniform axis, we would iterate through all\n     * instances to find the full extent of the domain.\n     *\n     * @danielgavrilov, 2021-07-13\n     */\n    @computed private get intermediatePlacedSeries(): PlacedFacetSeries[] {\n        const { manager, series, facetCount, seriesColorMap, legendHoverBin } =\n            this\n\n        // Copy properties from manager to facets\n        const fontSize = this.facetBaseFontSize\n        // We are using `bounds` instead of `facetsContainerBounds` because the legend\n        // is not yet created, and it is derived from the intermediate chart series.\n        const gridBoundsArr = this.bounds.grid(\n            this.gridParams,\n            this.facetGridPadding\n        )\n\n        const {\n            yColumnSlug,\n            xColumnSlug,\n            yColumnSlugs,\n            sizeColumnSlug,\n            colorColumnSlug,\n            isRelativeMode,\n            colorScale,\n            sortConfig,\n            startHandleTimeBound,\n            startTime,\n            endTime,\n            missingDataStrategy,\n            focusArray,\n            isStatic,\n            patternIdSuffix,\n            base,\n            tooltip,\n            shouldPinTooltipToBottom,\n        } = manager\n\n        // Use compact labels, e.g. 50k instead of 50,000\n        const tickFormattingOptions: TickFormattingOptions =\n            facetCount > 2\n                ? { numberAbbreviation: \"short\", abbreviationThreshold: 1e3 }\n                : { numberAbbreviation: \"long\" }\n        const globalXAxisConfig: AxisConfigInterface = {\n            tickFormattingOptions,\n        }\n        const globalYAxisConfig: AxisConfigInterface = {\n            tickFormattingOptions,\n        }\n\n        // We infer that the user cares about the trend if the axis is not uniform\n        // and the metrics on all facets are the same\n        const careAboutTrend = !this.uniformYAxis\n        if (careAboutTrend) {\n            // Force disable nice axes if we care about the trend,\n            // because nice axes misrepresent trends.\n            globalYAxisConfig.nice = false\n        }\n\n        const table = this.transformedTable\n\n        // In order to produce consistent color scales across facets, we need to pass\n        // all possible color values from `inputTable`.\n        const colorScaleColumnOverride = this.inputTable.get(colorColumnSlug)\n\n        // Hide the legends in all facets\n        const showLegend = !this.hideFacetLegends\n\n        // Show start and end value labels for line chart thumbnails\n        const useMinimalLabeling = this.variant === GrapherVariant.Thumbnail\n        // Hide the start value label only when facets are auto-switched to\n        // thumbnail mode because they are small (not when the whole chart\n        // is explicitly rendered as a thumbnail).\n        const hideStartValueLabel =\n            this.variant === GrapherVariant.Thumbnail &&\n            this.manager.variant !== GrapherVariant.Thumbnail\n        const showSeriesLabels = useMinimalLabeling\n            ? true\n            : !this.hideFacetLegends\n\n        return series.map((series, index) => {\n            const { bounds } = gridBoundsArr[index]\n\n            const hidePoints = true\n            const hideNoDataSection = true\n\n            // NOTE: The order of overrides is important!\n            // We need to preserve most config coming in.\n            const manager: ChartManager = {\n                table,\n                fontSize,\n                showLegend,\n                showSeriesLabels,\n                hidePoints,\n                yColumnSlug,\n                xColumnSlug,\n                yColumnSlugs,\n                sizeColumnSlug,\n                colorColumnSlug,\n                isRelativeMode,\n                seriesColorMap,\n                colorScale,\n                colorScaleColumnOverride,\n                sortConfig,\n                startHandleTimeBound,\n                startTime,\n                endTime,\n                missingDataStrategy,\n                hideNoDataSection,\n                focusArray,\n                isStatic,\n                patternIdSuffix,\n                base,\n                tooltip,\n                shouldPinTooltipToBottom,\n                externalLegendHoverBin: legendHoverBin,\n                useMinimalLabeling,\n                hideStartValueLabel,\n                // Allow labels in line chart thumbnails to overflow facet bounds\n                chartAreaPadding: Infinity,\n                ...series.manager,\n                xAxisConfig: {\n                    ...globalXAxisConfig,\n                    ...this.manager.xAxisConfig,\n                    ...series.manager.xAxisConfig,\n                },\n                yAxisConfig: {\n                    ...globalYAxisConfig,\n                    ...this.manager.yAxisConfig,\n                    ...series.manager.yAxisConfig,\n                },\n            }\n            return {\n                bounds,\n                contentBounds: bounds,\n                manager,\n                seriesName: series.seriesName,\n            }\n        })\n    }\n\n    @computed get intermediateChartInstances(): ChartInterface[] {\n        return this.intermediatePlacedSeries.map(({ bounds, manager }) => {\n            return makeChartInstance({\n                manager,\n                bounds,\n                chartType: this.chartTypeName,\n                variant: this.variant,\n            })\n        })\n    }\n\n    @computed private get shouldUseThumbnailForSmallFacets(): boolean {\n        return this.chartTypeName === GRAPHER_CHART_TYPES.LineChart\n    }\n\n    @computed private get facetBounds(): Bounds | undefined {\n        return this.bounds.grid(this.gridParams, this.facetGridPadding)[0]\n            ?.bounds\n    }\n\n    @computed private get sharedContentInset(): SideWidths {\n        const insets = excludeUndefined(\n            this.intermediateChartInstances.map((c) => c.contentInset)\n        )\n        return {\n            left: _.max(insets.map((inset) => inset.left)) ?? 0,\n            right: _.max(insets.map((inset) => inset.right)) ?? 0,\n        }\n    }\n\n    @computed private get hasSmallFacets(): boolean {\n        const { facetBounds } = this\n        if (!facetBounds) return false\n\n        // Characteristic length in \"width units\": the cell's width, but no\n        // larger than it would be at the ideal plot aspect ratio, so that\n        // short-and-wide cells are judged by their (limited) height\n        const length = Math.min(\n            facetBounds.width,\n            facetBounds.height * IDEAL_PLOT_ASPECT_RATIO\n        )\n\n        return length < THUMBNAIL_MAX_CELL_LENGTH\n    }\n\n    @computed private get variant(): GrapherVariant {\n        // When the whole chart is exported as a thumbnail,\n        // always render the facets as thumbnails\n        if (this.manager.variant === GrapherVariant.Thumbnail)\n            return GrapherVariant.Thumbnail\n\n        if (!this.shouldUseThumbnailForSmallFacets)\n            return GrapherVariant.Default\n\n        return this.hasSmallFacets\n            ? GrapherVariant.Thumbnail\n            : GrapherVariant.Default\n    }\n\n    @computed private get isSharedYAxis(): boolean {\n        // When the Y axis is uniform for all facets:\n        // - For most charts, we want to only show the axis on the left-most\n        //   facet charts, and omit it on the others\n        // - For bar charts, the Y axis is plotted horizontally, so we don't\n        //   want to omit it\n        const isHorizontalYAxis =\n            this.chartTypeName === GRAPHER_CHART_TYPES.DiscreteBar ||\n            this.chartTypeName === GRAPHER_CHART_TYPES.StackedDiscreteBar\n\n        return this.uniformYAxis && !isHorizontalYAxis\n    }\n\n    @computed private get isSharedXAxis(): boolean {\n        const supportedChartTypes = [\n            GRAPHER_CHART_TYPES.LineChart,\n            GRAPHER_CHART_TYPES.StackedBar,\n            GRAPHER_CHART_TYPES.StackedArea,\n            GRAPHER_CHART_TYPES.SlopeChart,\n        ]\n\n        const { facetBounds } = this\n        const hasShortFacets =\n            !!facetBounds && facetBounds.height < SHARED_X_AXIS_MAX_CELL_HEIGHT\n\n        return (\n            this.uniformXAxis &&\n            (this.hasSmallFacets || hasShortFacets) &&\n            supportedChartTypes.includes(this.chartTypeName as any)\n        )\n    }\n\n    // Only made public for testing\n    @computed get placedSeries(): PlacedFacetSeries[] {\n        const { intermediateChartInstances } = this\n\n        // If one of the charts should use a value-based color scheme,\n        // switch them all over for consistency\n        const useValueBasedColorScheme = intermediateChartInstances.some(\n            (instance) => instance.shouldUseValueBasedColorScheme\n        )\n\n        // Define the global axis config, shared between all facets\n        const sharedAxesSizes: PositionMap<number> = {}\n\n        const axes: AxesInfo = {\n            x: {\n                config: {},\n                axisAccessor: (instance) => instance.xAxis,\n                uniform: this.uniformXAxis,\n                shared: this.isSharedXAxis,\n            },\n            y: {\n                config: {},\n                axisAccessor: (instance) => instance.yAxis,\n                uniform: this.uniformYAxis,\n                shared: this.isSharedYAxis,\n            },\n        }\n        R.values(axes).forEach(({ config, axisAccessor, uniform, shared }) => {\n            // max size is the width (if vertical axis) or height (if horizontal axis)\n            const axisWithMaxSize = _.maxBy(\n                intermediateChartInstances.map(axisAccessor),\n                (axis) => axis?.size\n            )\n            if (uniform) {\n                const axes = excludeUndefined(\n                    intermediateChartInstances.map(axisAccessor)\n                )\n\n                // If the axes are uniform, we want to find the full domain extent across all facets\n                const domains = axes.map((axis) => axis.domain)\n                config.min = _.min(domains.map((d) => d[0]))\n                config.max = _.max(domains.map((d) => d[1]))\n\n                // Find band values across all facets\n                const bandValues = _.uniq(\n                    axes.flatMap((axis) => axis.config.bandValues ?? [])\n                )\n                if (bandValues.length > 0) config.bandValues = bandValues\n\n                // Find ticks across all facets\n                const ticks = _.uniq(\n                    axes.flatMap((axis) => axis.config.ticks ?? [])\n                )\n                if (ticks.length > 0) config.ticks = ticks\n\n                // If there was at least one chart with a non-undefined axis,\n                // this variable will be populated\n                if (axisWithMaxSize) {\n                    // Create a new axis object with the full domain extent\n                    const axis = axisWithMaxSize.clone()\n                    const { size } = axis.updateDomainPreservingUserSettings([\n                        config.min,\n                        config.max,\n                    ])\n                    config.minSize = size\n                    if (shared) {\n                        sharedAxesSizes[axis.orient] = size\n                    }\n                }\n            } else if (axisWithMaxSize) {\n                config.minSize = axisWithMaxSize.size\n            }\n        })\n\n        // Some chart types render vertical series labels to the left and/or\n        // right of the plot area (e.g. slope charts show start/end labels).\n        // When each facet independently sizes these labels, the plot areas\n        // end up with different widths, making it hard to compare across facets.\n        // To fix this, we find the maximum label width on each side across\n        // all facets and pass it down so every facet reserves the same space.\n        const labelWidths = excludeUndefined(\n            intermediateChartInstances.map((c) => c.verticalLabelWidths)\n        )\n        const sharedVerticalLabelWidths: SideWidths | undefined =\n            labelWidths.length > 0\n                ? {\n                      left: _.max(labelWidths.map((w) => w.left)) ?? 0,\n                      right: _.max(labelWidths.map((w) => w.right)) ?? 0,\n                  }\n                : undefined\n\n        // Allocate space for shared axes, so that the content areas of charts are all equal.\n        // If the axes are \"shared\", then an axis will only plotted on the facets that are on the\n        // same side as the axis.\n        // For example, a vertical Y axis would be plotted on the left-most charts only.\n        const fullBounds = this.facetsContainerBounds.pad(sharedAxesSizes)\n        const gridBoundsArr = fullBounds.grid(\n            this.gridParams,\n            this.facetGridPadding\n        )\n        return this.intermediatePlacedSeries.map((series, i) => {\n            const chartInstance = intermediateChartInstances[i]\n            const { xAxis, yAxis } = chartInstance\n            const { bounds: initialGridBounds, cellEdges } = gridBoundsArr[i]\n            let bounds = initialGridBounds\n            // Only expand bounds if the facet is on the same edge as the shared axes\n            for (const edge of cellEdges) {\n                bounds = bounds.expand({\n                    [edge]: sharedAxesSizes[edge],\n                })\n            }\n            // Reserve space for the facet label at the top of the cell\n            bounds = bounds.padTop(this.facetLabelFontSize + this.labelPadding)\n            // NOTE: The order of overrides is important!\n            // We need to preserve most config coming in.\n            const manager = {\n                ...series.manager,\n                useValueBasedColorScheme,\n                sharedVerticalLabelWidths,\n                xAxisConfig: {\n                    hideAxis: shouldHideFacetAxis(\n                        xAxis,\n                        cellEdges,\n                        sharedAxesSizes\n                    ),\n                    ...series.manager.xAxisConfig,\n                    ...axes.x.config,\n                },\n                yAxisConfig: {\n                    hideAxis: shouldHideFacetAxis(\n                        yAxis,\n                        cellEdges,\n                        sharedAxesSizes\n                    ),\n                    ...series.manager.yAxisConfig,\n                    ...axes.y.config,\n                },\n            }\n            const contentBounds = getContentBounds(\n                bounds,\n                manager,\n                chartInstance\n            )\n            return {\n                ...series,\n                bounds,\n                contentBounds,\n                manager,\n            }\n        })\n    }\n\n    @computed get selectionArray(): SelectionArray {\n        return makeSelectionArray(this.manager.selection)\n    }\n\n    @computed get focusArray(): FocusArray {\n        return this.manager.focusArray ?? new FocusArray()\n    }\n\n    @computed private get entityFacets(): FacetSeries[] {\n        const table = this.transformedTable.filterByEntityNames(\n            this.selectionArray.selectedEntityNames\n        )\n        return this.selectionArray.selectedEntityNames.map((seriesName) => {\n            const seriesTable = table.filterByEntityNames([seriesName])\n            // Only set overrides for this facet strategy.\n            // Default properties are set elsewhere.\n            const manager: ChartManager = {\n                table: seriesTable,\n                selection: [seriesName],\n                seriesStrategy: SeriesStrategy.column,\n            }\n            return { seriesName, manager }\n        })\n    }\n\n    @computed private get columnFacets(): FacetSeries[] {\n        return this.yColumns.map((col) => ({\n            seriesName: col.displayName,\n            // Only set overrides for this facet strategy.\n            // Default properties are set elsewhere.\n            manager: {\n                selection: this.selectionArray,\n                yColumnSlug: col.slug,\n                yColumnSlugs: [col.slug],\n                seriesStrategy: SeriesStrategy.entity,\n            },\n        }))\n    }\n\n    @computed private get yColumns(): CoreColumn[] {\n        return this.yColumnSlugs.map((slug) => this.inputTable.get(slug))\n    }\n\n    @computed private get yColumnSlugs(): string[] {\n        return autoDetectYColumnSlugs(this.manager)\n    }\n\n    @computed private get facetStrategy(): FacetStrategy {\n        return this.manager.facetStrategy ?? FacetStrategy.none\n    }\n\n    @computed get series(): FacetSeries[] {\n        return this.facetStrategy === FacetStrategy.metric\n            ? this.columnFacets\n            : this.entityFacets\n    }\n\n    // legend utils\n\n    @computed private get externalLegends(): ExternalColorLegendData[] {\n        return excludeUndefined(\n            this.intermediateChartInstances.map(\n                (instance) => instance.externalLegend\n            )\n        )\n    }\n\n    @computed private get isNumericLegend(): boolean {\n        return this.externalLegends.some((legend) =>\n            legend.numericLegendData?.some((bin) => bin instanceof NumericBin)\n        )\n    }\n\n    @computed private get showLegend(): boolean {\n        const { isNumericLegend, categoricalLegendData, numericLegendData } =\n            this\n        if (this.manager.useMinimalLabeling) return false\n        const hasBins =\n            categoricalLegendData.length > 0 || numericLegendData.length > 0\n        if (!hasBins) return false\n        if (isNumericLegend) return true\n        if (\n            this.props.chartTypeName ===\n                GRAPHER_CHART_TYPES.StackedDiscreteBar &&\n            this.facetStrategy === FacetStrategy.metric\n        ) {\n            return false\n        }\n        if (\n            categoricalLegendData.length > 1 ||\n            // If the facetStrategy is metric, then the legend (probably?) shows entity items.\n            // If the user happens to select only a single entity, we don't want to collapse the\n            // legend, because it's (probably?) the only information about what is selected.\n            // This is fragile and ideally we shouldn't be making assumptions about what type of\n            // items are shown on the legend, but it works for now...\n            // -@danielgavrilov, 2021-09-28\n            (this.facetStrategy === FacetStrategy.metric &&\n                this.props.manager.canSelectMultipleEntities)\n        ) {\n            return true\n        }\n        return false\n    }\n\n    private getExternalLegendProp<Prop extends keyof ExternalColorLegendData>(\n        prop: Prop\n    ): ExternalColorLegendData[Prop] | undefined {\n        for (const externalLegend of this.externalLegends) {\n            if (externalLegend[prop] !== undefined) {\n                return externalLegend[prop]\n            }\n        }\n        return undefined\n    }\n\n    // legend props\n\n    @computed private get legendX(): number {\n        return this.bounds.x\n    }\n\n    @computed private get legendY(): number {\n        return this.bounds.top\n    }\n\n    @computed private get legendMaxWidth(): number {\n        return this.bounds.width\n    }\n\n    @computed private get legendAlign(): HorizontalAlign {\n        return this.isNumericLegend\n            ? HorizontalAlign.center\n            : HorizontalAlign.left\n    }\n\n    @computed private get legendTitle(): string | undefined {\n        return this.getExternalLegendProp(\"legendTitle\")\n    }\n\n    @computed private get legendTickSize(): number | undefined {\n        return this.getExternalLegendProp(\"legendTickSize\")\n    }\n\n    @computed private get numericBinHeight(): number | undefined {\n        return this.getExternalLegendProp(\"numericBinHeight\")\n    }\n\n    @computed private get hoverColors(): Color[] | undefined {\n        if (!this.legendHoverBin) return undefined\n        return [this.legendHoverBin.color]\n    }\n\n    @computed private get activeColors(): Color[] | undefined {\n        if (!this.focusArray) return undefined\n\n        // find colours of all currently focused series\n        const activeColors = _.uniq(\n            excludeUndefined(\n                this.intermediateChartInstances.flatMap((chartInstance) =>\n                    chartInstance.chartState.series\n                        .filter((series) =>\n                            this.focusArray.has(series.seriesName)\n                        )\n                        .map((series) => series.color)\n                )\n            )\n        )\n\n        return activeColors.length > 0 ? activeColors : undefined\n    }\n\n    @computed get numericLegendData(): ColorScaleBin[] {\n        if (!this.isNumericLegend || !this.hideFacetLegends) return []\n        const allBins: ColorScaleBin[] = this.externalLegends.flatMap(\n            (legend) => [\n                ...(legend.numericLegendData ?? []),\n                ...(legend.categoricalLegendData ?? []),\n            ]\n        )\n        const uniqBins = dedupeRepeatedBins(allBins)\n        const sortedBins = _.sortBy(\n            uniqBins,\n            (bin) => bin instanceof CategoricalBin\n        )\n        return sortedBins\n    }\n\n    @computed get categoricalLegendData(): CategoricalBin[] {\n        if (this.isNumericLegend || !this.hideFacetLegends) return []\n\n        const allBins: CategoricalBin[] = this.externalLegends\n            .flatMap((legend) => [\n                ...(legend.numericLegendData ?? []),\n                ...(legend.categoricalLegendData ?? []),\n            ])\n            .filter((bin) => bin instanceof CategoricalBin)\n\n        const uniqBins = dedupeRepeatedBins(allBins).map(\n            // Remap index to ensure it's unique (the above procedure can lead to duplicates)\n            (bin, index) => new CategoricalBin({ ...bin.props, index })\n        )\n\n        // Hide single-item legends for metric facets\n        if (this.facetStrategy === FacetStrategy.metric && uniqBins.length <= 1)\n            return []\n\n        // Stacked area and bar charts reverse the stacking order\n        if (\n            this.chartTypeName === GRAPHER_CHART_TYPES.StackedArea ||\n            this.chartTypeName === GRAPHER_CHART_TYPES.StackedBar\n        )\n            return uniqBins.reverse()\n\n        return uniqBins\n    }\n\n    private legendHoverBin: ColorScaleBin | undefined = undefined\n\n    @action.bound onLegendMouseOver(bin: ColorScaleBin): void {\n        this.focusArray.clear()\n        this.legendHoverBin = bin\n    }\n\n    @action.bound onLegendMouseLeave(): void {\n        this.legendHoverBin = undefined\n    }\n\n    private readonly resolveLegendBinEmphasis = (\n        bin: ColorScaleBin\n    ): Emphasis => {\n        if (!this.activeColors && !this.hoverColors) return Emphasis.Default\n\n        const isHovered = this.hoverColors?.includes(bin.color)\n        if (isHovered) return Emphasis.Highlighted\n\n        const isActive = this.activeColors?.includes(bin.color)\n        return isActive ? Emphasis.Highlighted : Emphasis.Muted\n    }\n\n    @computed private get numericLegendEmphasis(): BinEmphasis {\n        return toBinEmphasis(\n            this.numericLegendData,\n            this.resolveLegendBinEmphasis\n        )\n    }\n\n    @computed private get categoricalLegendEmphasis(): BinEmphasis {\n        return toBinEmphasis(\n            this.categoricalLegendData,\n            this.resolveLegendBinEmphasis\n        )\n    }\n\n    @computed private get numericStyleConfig(): LegendStyleConfig | undefined {\n        return this.getExternalLegendProp(\"numericLegendStyleConfig\")\n    }\n\n    @computed private get categoricalStyleConfig():\n        | LegendStyleConfig\n        | undefined {\n        return this.getExternalLegendProp(\"categoricalLegendStyleConfig\")\n    }\n\n    // end of legend props\n\n    @computed private get legend(): HorizontalColorLegend {\n        if (this.isNumericLegend) {\n            return {\n                kind: \"numeric\",\n                state: new HorizontalNumericColorLegendState(\n                    this.numericLegendData,\n                    {\n                        baseFontSize: this.fontSize,\n                        maxWidth: this.legendMaxWidth,\n                        title: this.legendTitle,\n                        align: this.legendAlign,\n                        tickSize: this.legendTickSize,\n                        binHeight: this.numericBinHeight,\n                    }\n                ),\n            }\n        }\n        return {\n            kind: \"categorical\",\n            state: new HorizontalCategoricalColorLegendState(\n                this.categoricalLegendData,\n                {\n                    baseFontSize: this.fontSize,\n                    width: this.legendMaxWidth,\n                    align: this.legendAlign,\n                }\n            ),\n        }\n    }\n\n    private renderLegend(): React.ReactElement {\n        const { legend } = this\n        switch (legend.kind) {\n            case \"numeric\":\n                return (\n                    <HorizontalNumericColorLegend\n                        state={legend.state}\n                        x={this.legendX}\n                        y={this.legendY}\n                        interactive={!this.isStatic}\n                        styleConfig={this.numericStyleConfig}\n                        binEmphasis={this.numericLegendEmphasis}\n                        onMouseOver={this.onLegendMouseOver}\n                        onMouseLeave={this.onLegendMouseLeave}\n                    />\n                )\n            case \"categorical\":\n                return (\n                    <HorizontalCategoricalColorLegend\n                        state={legend.state}\n                        x={this.legendX}\n                        y={this.legendY}\n                        interactive={!this.isStatic}\n                        styleConfig={this.categoricalStyleConfig}\n                        binEmphasis={this.categoricalLegendEmphasis}\n                        onMouseOver={this.onLegendMouseOver}\n                        onMouseLeave={this.onLegendMouseLeave}\n                    />\n                )\n        }\n    }\n\n    @computed\n    private get facetLabelSettings(): Omit<SeriesLabelStateOptions, \"text\"> {\n        return {\n            maxWidth: Infinity, // Facet labels never wrap\n            fontWeight: FACET_LABEL_FONT_WEIGHT,\n            fontSize: this.facetLabelFontSize,\n            showRegionTooltip: !this.manager.isStatic,\n        }\n    }\n\n    override componentDidMount(): void {\n        exposeInstanceOnWindow(this, \"facetChart\")\n    }\n\n    override render(): React.ReactElement {\n        const { labelPadding, facetLabelSettings, showLegend } = this\n        return (\n            <React.Fragment>\n                {showLegend && this.renderLegend()}\n                {this.placedSeries.map((facetChart, index: number) => {\n                    const { bounds, contentBounds, seriesName } = facetChart\n\n                    const contentLeftOffset = this.sharedContentInset.left\n                    const availableLabelWidth =\n                        contentBounds.width - contentLeftOffset\n\n                    let seriesLabelState = new SeriesLabelState({\n                        text: seriesName,\n                        ...facetLabelSettings,\n                    })\n\n                    // Truncate labels that don't fit with an ellipsis\n                    if (seriesLabelState.width > availableLabelWidth) {\n                        const { fontSize, fontWeight } = facetLabelSettings\n                        const shortenedLabel = shortenWithEllipsis(\n                            seriesName,\n                            availableLabelWidth,\n                            { fontSize, fontWeight }\n                        )\n                        seriesLabelState = new SeriesLabelState({\n                            text: shortenedLabel,\n                            ...facetLabelSettings,\n                        })\n                    }\n\n                    return (\n                        <React.Fragment key={index}>\n                            <SeriesLabel\n                                state={seriesLabelState}\n                                x={contentBounds.x + contentLeftOffset}\n                                y={\n                                    contentBounds.top -\n                                    seriesLabelState.height -\n                                    labelPadding\n                                }\n                            />\n                            <g id={makeFigmaId(seriesName)}>\n                                <ChartComponent\n                                    manager={facetChart.manager}\n                                    chartType={this.chartTypeName}\n                                    variant={this.variant}\n                                    bounds={bounds}\n                                />\n                            </g>\n                        </React.Fragment>\n                    )\n                })}\n            </React.Fragment>\n        )\n    }\n}\n","import React from \"react\"\nimport { observer } from \"mobx-react\"\nimport {\n    Bounds,\n    GridParameters,\n    HorizontalAlign,\n    SplitBoundsPadding,\n    exposeInstanceOnWindow,\n    makeFigmaId,\n    roundForSvg,\n} from \"@ourworldindata/utils\"\nimport { action, computed, makeObservable, observable } from \"mobx\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n} from \"../core/GrapherConstants\"\nimport {\n    ChartErrorInfo,\n    GRAPHER_MAP_TYPE,\n    GrapherInteractionEvent,\n    MapRegionName,\n    Time,\n} from \"@ourworldindata/types\"\nimport { calculateAspectRatio } from \"./FacetChartUtils\"\nimport { scaleFontSize } from \"../chart/ChartUtils\"\nimport {\n    FacetMapManager,\n    MapFacetSeries,\n    FacetMapProps,\n    PlacedMapFacetSeries,\n} from \"./FacetMapConstants\"\nimport { OwidTable } from \"@ourworldindata/core-table\"\nimport { HorizontalNumericColorLegend } from \"../legend/HorizontalNumericColorLegend\"\nimport { HorizontalCategoricalColorLegend } from \"../legend/HorizontalCategoricalColorLegend\"\nimport { HorizontalNumericColorLegendState } from \"../legend/HorizontalNumericColorLegendState\"\nimport { HorizontalCategoricalColorLegendState } from \"../legend/HorizontalCategoricalColorLegendState\"\nimport { ExternalColorLegendData } from \"../legend/HorizontalColorLegendTypes\"\nimport { CategoricalBin, ColorScaleBin } from \"../color/ColorScaleBin\"\nimport { GRAPHER_DARK_TEXT, GRAY_30 } from \"../color/ColorConstants\"\nimport {\n    BinEmphasis,\n    LegendStyleConfig,\n    toBinEmphasis,\n} from \"../legend/LegendStyleConfig\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport {\n    MAP_LEGEND_MAX_WIDTH_RATIO,\n    MapChart,\n    PADDING_BELOW_MAP_LEGEND,\n    PADDING_BETWEEN_MAP_AND_LEGEND,\n    PADDING_BETWEEN_MAP_LEGENDS,\n} from \"../mapCharts/MapChart\"\nimport { ChartComponent, makeChartInstance } from \"../chart/ChartTypeMap\"\nimport {\n    MAP_VIEWPORTS,\n    MapChartManager,\n    MapViewport,\n} from \"../mapCharts/MapChartConstants\"\nimport { ChartState } from \"../chart/ChartInterface.js\"\nimport { MapConfig } from \"../mapCharts/MapConfig\"\n\n@observer\nexport class FacetMap\n    extends React.Component<FacetMapProps>\n    implements ChartState\n{\n    private legendHoverBin: ColorScaleBin | undefined = undefined\n\n    constructor(props: FacetMapProps) {\n        super(props)\n        makeObservable<FacetMap, \"legendHoverBin\">(this, {\n            legendHoverBin: observable.ref,\n        })\n    }\n\n    transformTable(table: OwidTable): OwidTable {\n        return table\n    }\n\n    @computed get inputTable(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed get transformedTable(): OwidTable {\n        return (\n            this.manager.transformedTable ??\n            this.transformTable(this.inputTable)\n        )\n    }\n\n    @computed private get manager(): FacetMapManager {\n        return this.props.manager\n    }\n\n    @computed private get table(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed private get transformedTableFromGrapher(): OwidTable | undefined {\n        return this.manager.transformedTable\n    }\n\n    @computed get isStatic(): boolean {\n        return !!this.manager.isStatic\n    }\n\n    @computed get errorInfo(): ChartErrorInfo {\n        if (this.manager.startTime === undefined)\n            return { reason: \"No start time selected\" }\n\n        if (this.manager.endTime === undefined)\n            return { reason: \"No end time selected\" }\n\n        return { reason: \"\" }\n    }\n\n    @computed private get startTime(): Time {\n        return this.manager.startTime!\n    }\n\n    @computed private get endTime(): Time {\n        return this.manager.endTime!\n    }\n\n    @computed private get bounds(): Bounds {\n        const bounds = this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n        return bounds.padTop(6)\n    }\n\n    @computed private get facetsContainerBounds(): Bounds {\n        return (\n            this.bounds\n                // Make space for facet labels\n                .padTop(this.labelHeight + this.labelPadding)\n                // Make space for the legend\n                .padBottom(\n                    this.legendHeight +\n                        PADDING_BETWEEN_MAP_AND_LEGEND +\n                        PADDING_BELOW_MAP_LEGEND\n                )\n        )\n    }\n\n    @computed private get targetTimes(): [Time, Time] {\n        return [this.startTime, this.endTime]\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get facetFontSize(): number {\n        return scaleFontSize(18, this.fontSize)\n    }\n\n    @computed private get mapConfig(): MapConfig {\n        return this.manager.mapConfig ?? new MapConfig()\n    }\n\n    @computed private get mapViewport(): MapViewport {\n        const { region } = this.mapConfig\n        return MAP_VIEWPORTS[region]\n    }\n\n    private getGridParams(bounds: Bounds): GridParameters {\n        // We determine the preferred layout (horizontal vs vertical)\n        // by comparing which orientation produces an aspect ratio closest to\n        // the map's natural aspect ratio. The globe uses the horizontal layout.\n\n        const horizontalLayout = { rows: 1, columns: 2, count: 2 }\n        const verticalLayout = { rows: 2, columns: 1, count: 2 }\n\n        if (this.mapConfig.globe.isActive)\n            return bounds.width > bounds.height\n                ? horizontalLayout\n                : verticalLayout\n\n        const mapAspectRatio = this.mapViewport.ratio\n\n        // If the faceted maps are side-by-side\n        const horizontalLayoutAspectRatio = calculateAspectRatio(\n            bounds.width / 2,\n            bounds.height\n        )\n\n        // If the faceted maps are stacked vertically\n        const verticalLayoutAspectRatio = calculateAspectRatio(\n            bounds.width,\n            bounds.height / 2\n        )\n\n        const horizontalDiff = Math.abs(\n            Math.log2(mapAspectRatio / horizontalLayoutAspectRatio)\n        )\n        const verticalDiff = Math.abs(\n            Math.log2(mapAspectRatio / verticalLayoutAspectRatio)\n        )\n\n        // World maps tend to look better side-by-side, so we give the\n        // horizontal layout an advantage when the region is World\n        const bias = this.mapConfig.region === MapRegionName.World ? 0.5 : 0\n\n        return horizontalDiff - bias <= verticalDiff\n            ? horizontalLayout\n            : verticalLayout\n    }\n\n    @computed private get facetGridPadding(): SplitBoundsPadding {\n        return {\n            rowPadding: Math.round(this.labelHeight + this.labelPadding),\n            columnPadding: Math.round(this.labelHeight),\n            outerPadding: 0,\n        }\n    }\n\n    @computed private get labelHeight(): number {\n        return this.facetFontSize\n    }\n\n    @computed private get labelPadding(): number {\n        return 0.5 * this.facetFontSize\n    }\n\n    @computed get series(): MapFacetSeries[] {\n        return this.targetTimes.map((time) => ({\n            seriesName: this.table.timeColumn.formatTime(time),\n            // Only set overrides for this facet. Default properties are set elsewhere.\n            manager: { targetTime: time },\n        }))\n    }\n\n    @action.bound logGrapherInteractionEvent(\n        action: GrapherInteractionEvent,\n        target?: string\n    ): void {\n        this.manager.analytics?.logGrapherInteractionEvent(action, {\n            ...this.manager.analyticsContext,\n            target,\n        })\n    }\n\n    @computed private get intermediatePlacedSeries(): PlacedMapFacetSeries[] {\n        const {\n            manager,\n            series,\n            table,\n            transformedTableFromGrapher,\n            targetTimes,\n            mapViewport,\n            facetFontSize,\n            legendHoverBin,\n            logGrapherInteractionEvent,\n        } = this\n\n        // We are using `bounds` instead of `facetsContainerBounds` because the legend\n        // is not yet created, and it is derived from the intermediate chart series.\n        const bounds = this.bounds\n        const gridBoundsArr = bounds.grid(\n            this.getGridParams(bounds),\n            this.facetGridPadding\n        )\n\n        const {\n            isStatic,\n            mapColumnSlug = \"\",\n            mapConfig,\n            inapplicableEntityNames,\n            isMapSelectionEnabled,\n            colorScale,\n            globeController,\n            base,\n            tooltip,\n            shouldPinTooltipToBottom,\n            projectionColumnInfoBySlug,\n            isFaceted,\n            yColumnSlug,\n            patternScale,\n            patternIdSuffix,\n        } = manager\n\n        return series.map((series, index) => {\n            const { bounds } = gridBoundsArr[index]\n\n            const manager: MapChartManager = {\n                table,\n                transformedTable: transformedTableFromGrapher,\n                fontSize: facetFontSize,\n                showLegend: false,\n                isStatic,\n                mapColumnSlug,\n                mapConfig,\n                inapplicableEntityNames,\n                isMapSelectionEnabled,\n                colorScale,\n                globeController,\n                base,\n                tooltip,\n                shouldPinTooltipToBottom,\n                externalLegendHoverBin: legendHoverBin,\n                logGrapherInteractionEvent,\n                projectionColumnInfoBySlug,\n                highlightedTimesInTooltip: targetTimes,\n                mapViewport,\n                isFaceted,\n                yColumnSlug,\n                patternScale,\n                patternIdSuffix,\n                ...series.manager,\n            }\n\n            return {\n                bounds,\n                manager,\n                seriesName: series.seriesName,\n            }\n        })\n    }\n\n    @computed private get intermediateMapInstances(): MapChart[] {\n        return this.intermediatePlacedSeries.map(\n            ({ bounds, manager }) =>\n                makeChartInstance({\n                    manager,\n                    bounds,\n                    chartType: GRAPHER_MAP_TYPE,\n                    variant: this.manager.variant,\n                }) as MapChart\n        )\n    }\n\n    /**\n     * Used to construct the shared legend for all map facets.\n     *\n     * Unlike in FacetChart, we only need a single MapChart instance to construct\n     * the legend since all facets share the same legend.\n     */\n    @computed get intermediateMapInstance(): MapChart {\n        return this.intermediateMapInstances[0]\n    }\n\n    @computed private get gridParams(): GridParameters {\n        return this.getGridParams(this.facetsContainerBounds)\n    }\n\n    @computed private get facetArrangement(): \"side-by-side\" | \"stacked\" {\n        return this.gridParams.rows > this.gridParams.columns\n            ? \"stacked\"\n            : \"side-by-side\"\n    }\n\n    @computed get placedSeries(): PlacedMapFacetSeries[] {\n        const bounds = this.facetsContainerBounds\n        const gridBoundsArr = bounds.grid(\n            this.gridParams,\n            this.facetGridPadding\n        )\n        return this.intermediatePlacedSeries.map((series, i) => {\n            const { bounds } = gridBoundsArr[i]\n            return { ...series, bounds }\n        })\n    }\n\n    @computed private get externalLegend():\n        | ExternalColorLegendData\n        | undefined {\n        return this.intermediateMapInstance.externalLegend\n    }\n\n    @computed private get legendX(): number {\n        return this.bounds.x\n    }\n\n    @computed private get numericLegendY(): number {\n        if (!this.numericLegendState) return 0\n        return (\n            this.bounds.bottom -\n            this.numericLegendHeight -\n            PADDING_BELOW_MAP_LEGEND -\n            // If present, the category legend is placed below the numeric legend\n            (this.categoryLegendState\n                ? this.categoryLegendHeight + PADDING_BETWEEN_MAP_LEGENDS\n                : 0)\n        )\n    }\n\n    @computed private get categoryLegendY(): number {\n        if (!this.categoryLegendState) return 0\n        return (\n            this.bounds.bottom -\n            this.categoryLegendHeight -\n            PADDING_BELOW_MAP_LEGEND\n        )\n    }\n\n    @computed private get legendMaxWidth(): number {\n        return this.bounds.width * MAP_LEGEND_MAX_WIDTH_RATIO\n    }\n\n    @computed private get numericLegendData(): ColorScaleBin[] {\n        return this.externalLegend?.numericLegendData ?? []\n    }\n\n    @computed private get categoricalLegendData(): CategoricalBin[] {\n        return this.externalLegend?.categoricalLegendData ?? []\n    }\n\n    @computed private get numericLegendHeight(): number {\n        return this.numericLegendState?.height ?? 0\n    }\n\n    @computed private get categoryLegendHeight(): number {\n        return this.categoryLegendState?.height ?? 0\n    }\n\n    @computed private get legendHeight(): number {\n        return this.categoryLegendHeight + this.numericLegendHeight\n    }\n\n    @action.bound onLegendMouseOver(bin: ColorScaleBin): void {\n        this.legendHoverBin = bin\n    }\n\n    @action.bound onLegendMouseLeave(): void {\n        this.legendHoverBin = undefined\n    }\n\n    @computed private get categoryLegendState():\n        | HorizontalCategoricalColorLegendState\n        | undefined {\n        if (this.categoricalLegendData.length <= 1) return undefined\n        return new HorizontalCategoricalColorLegendState(\n            this.categoricalLegendData,\n            {\n                baseFontSize: this.fontSize,\n                width: this.legendMaxWidth,\n                align: HorizontalAlign.center,\n            }\n        )\n    }\n\n    @computed private get numericLegendState():\n        | HorizontalNumericColorLegendState\n        | undefined {\n        if (this.numericLegendData.length <= 1) return undefined\n        return new HorizontalNumericColorLegendState(this.numericLegendData, {\n            baseFontSize: this.fontSize,\n            maxWidth: this.legendMaxWidth,\n            align: HorizontalAlign.center,\n        })\n    }\n\n    private readonly resolveLegendBinEmphasis = (\n        bin: ColorScaleBin\n    ): Emphasis => {\n        if (!this.legendHoverBin && !this.mapConfig.hoverCountry) {\n            return Emphasis.Default\n        }\n\n        // Check if this bin is being hovered\n        if (this.legendHoverBin && bin.equals(this.legendHoverBin)) {\n            return Emphasis.Highlighted\n        }\n\n        // Check if a country is being hovered and matches this bin\n        if (this.mapConfig.hoverCountry) {\n            const series = this.intermediateMapInstances.map((mapChart) =>\n                mapChart.chartState.series.find(\n                    (s) => s.seriesName === this.mapConfig.hoverCountry\n                )\n            )\n            if (series.some((s) => s?.color === bin.color))\n                return Emphasis.Highlighted\n        }\n\n        return Emphasis.Muted\n    }\n\n    @computed private get numericLegendEmphasis(): BinEmphasis {\n        return toBinEmphasis(\n            this.numericLegendData,\n            this.resolveLegendBinEmphasis\n        )\n    }\n\n    @computed private get categoricalLegendEmphasis(): BinEmphasis {\n        return toBinEmphasis(\n            this.categoricalLegendData,\n            this.resolveLegendBinEmphasis\n        )\n    }\n\n    @computed private get numericStyleConfig(): LegendStyleConfig | undefined {\n        return this.externalLegend?.numericLegendStyleConfig\n    }\n\n    @computed private get categoricalStyleConfig():\n        | LegendStyleConfig\n        | undefined {\n        return this.externalLegend?.categoricalLegendStyleConfig\n    }\n\n    override componentDidMount(): void {\n        exposeInstanceOnWindow(this, \"facetMap\")\n    }\n\n    private getLabelPosition(facet: PlacedMapFacetSeries): {\n        x: number\n        y: number\n    } {\n        const { mapConfig, labelPadding } = this\n        const { bounds } = facet\n\n        const labelX = bounds.centerX\n        let labelY = bounds.top - labelPadding\n\n        // For the globe and 2D continent views, simply render the label at the top\n        if (\n            mapConfig.globe.isActive ||\n            mapConfig.region !== MapRegionName.World\n        )\n            return { x: labelX, y: labelY }\n\n        // There is often quite a bit of vertical padding around the 2D World map.\n        // It looks nicer to position the facet label closer to the actual map content\n        // rather than at the very top\n\n        const mapAspectRatio = MAP_VIEWPORTS.World.ratio\n\n        // Find the map's width and height\n        const mapWidth = bounds.width\n        let mapHeight = mapWidth / mapAspectRatio\n        if (mapHeight > bounds.height) {\n            mapHeight = bounds.height\n            // mapWidth = mapHeight * mapAspectRatio\n        }\n\n        // Move the label closer to the map if there is vertical padding\n        if (mapHeight < bounds.height) {\n            const shiftY = (bounds.height - mapHeight) / 2\n            labelY = Math.max(labelY, labelY + shiftY - 3 * labelPadding)\n        }\n\n        return { x: labelX, y: labelY }\n    }\n\n    private renderMapLegend(): React.ReactElement {\n        const { numericLegendState, categoryLegendState } = this\n\n        return (\n            <>\n                {numericLegendState && (\n                    <HorizontalNumericColorLegend\n                        state={numericLegendState}\n                        x={this.legendX}\n                        y={this.numericLegendY}\n                        interactive={!this.isStatic}\n                        styleConfig={this.numericStyleConfig}\n                        binEmphasis={this.numericLegendEmphasis}\n                        onMouseOver={this.onLegendMouseOver}\n                        onMouseLeave={this.onLegendMouseLeave}\n                    />\n                )}\n                {categoryLegendState && (\n                    <HorizontalCategoricalColorLegend\n                        state={categoryLegendState}\n                        x={this.legendX}\n                        y={this.categoryLegendY}\n                        interactive={!this.isStatic}\n                        styleConfig={this.categoricalStyleConfig}\n                        binEmphasis={this.categoricalLegendEmphasis}\n                        onMouseOver={this.onLegendMouseOver}\n                        onMouseLeave={this.onLegendMouseLeave}\n                    />\n                )}\n            </>\n        )\n    }\n\n    private renderSeparatorLine(): React.ReactElement | null {\n        const {\n            mapConfig,\n            facetArrangement,\n            facetsContainerBounds: bounds,\n        } = this\n\n        // It can be difficult to visually distinguish two continent maps\n        // when plotted side by side, so we draw a gray line between them\n        if (\n            mapConfig.region !== MapRegionName.World &&\n            facetArrangement === \"side-by-side\"\n        ) {\n            return (\n                <line\n                    x1={roundForSvg(bounds.centerX)}\n                    y1={roundForSvg(bounds.top)}\n                    x2={roundForSvg(bounds.centerX)}\n                    y2={roundForSvg(bounds.bottom)}\n                    stroke={GRAY_30}\n                />\n            )\n        }\n\n        return null\n    }\n\n    override render(): React.ReactElement {\n        const { facetFontSize } = this\n        return (\n            <>\n                {this.renderMapLegend()}\n                {this.renderSeparatorLine()}\n                {this.placedSeries.map((series) => {\n                    const { bounds, seriesName } = series\n\n                    return (\n                        <React.Fragment key={seriesName}>\n                            <text\n                                {...this.getLabelPosition(series)}\n                                fill={GRAPHER_DARK_TEXT}\n                                fontSize={facetFontSize}\n                                textAnchor=\"middle\"\n                                style={{ fontWeight: 700 }}\n                            >\n                                {seriesName}\n                            </text>\n                            <g id={makeFigmaId(seriesName)}>\n                                <ChartComponent\n                                    manager={series.manager}\n                                    chartType={GRAPHER_MAP_TYPE}\n                                    variant={this.manager.variant}\n                                    bounds={bounds}\n                                />\n                            </g>\n                        </React.Fragment>\n                    )\n                })}\n            </>\n        )\n    }\n}\n","import React from \"react\"\nimport { observer } from \"mobx-react\"\nimport { computed, makeObservable } from \"mobx\"\nimport {\n    Bounds,\n    GRAPHER_MAP_TYPE,\n    GrapherChartOrMapType,\n    makeFigmaId,\n} from \"@ourworldindata/utils\"\nimport { DataTable } from \"../dataTable/DataTable\"\nimport { CaptionedChartManager } from \"../captionedChart/CaptionedChart\"\nimport { LoadingIndicator } from \"@ourworldindata/components\"\nimport { FacetChart } from \"../facet/FacetChart\"\nimport { ChartPatternDefs, getChartSvgProps } from \"./ChartUtils\"\nimport { ChartComponent, makeChartState } from \"./ChartTypeMap\"\nimport { GRAPHER_CHART_AREA_CLASS } from \"../core/GrapherConstants\"\nimport { ChartState } from \"./ChartInterface\"\nimport { FacetMap } from \"../facet/FacetMap.js\"\n\ninterface ChartAreaContentProps {\n    manager: CaptionedChartManager\n    bounds: Bounds\n    padWidth?: number\n}\n\n@observer\nexport class ChartAreaContent extends React.Component<ChartAreaContentProps> {\n    constructor(props: ChartAreaContentProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed private get manager(): CaptionedChartManager {\n        return this.props.manager\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds.padWidth(this.props.padWidth ?? 0)\n    }\n\n    @computed private get activeChartOrMapType():\n        | GrapherChartOrMapType\n        | undefined {\n        const { manager } = this\n        if (manager.isOnTableTab) return undefined\n        if (manager.isOnMapTab) return GRAPHER_MAP_TYPE\n        if (manager.isOnChartTab) return manager.activeChartType\n        return undefined\n    }\n\n    @computed private get chartState(): ChartState | undefined {\n        if (!this.activeChartOrMapType) return undefined\n        return makeChartState(this.activeChartOrMapType, this.manager)\n    }\n\n    private renderLoadingIndicatorIntoSvg(): React.ReactElement {\n        return (\n            <foreignObject {...this.bounds.toProps()}>\n                <LoadingIndicator title=\"Loading data...\" />\n            </foreignObject>\n        )\n    }\n\n    private renderReadyChartOrMap(): React.ReactElement | null {\n        const { bounds, manager, activeChartOrMapType, chartState } = this\n\n        if (!activeChartOrMapType) return null\n\n        if (manager.isFaceted)\n            return activeChartOrMapType === GRAPHER_MAP_TYPE ? (\n                <FacetMap bounds={bounds} manager={manager} />\n            ) : (\n                <FacetChart\n                    bounds={bounds}\n                    manager={manager}\n                    chartTypeName={activeChartOrMapType}\n                />\n            )\n\n        if (!chartState) return null\n\n        return (\n            <ChartComponent\n                manager={manager}\n                chartType={activeChartOrMapType}\n                chartState={chartState}\n                variant={manager.variant}\n                bounds={bounds}\n            />\n        )\n    }\n\n    private renderChartOrMap(): React.ReactElement {\n        const { width, height } = this.props.bounds\n\n        const containerStyle: React.CSSProperties = {\n            position: \"relative\",\n            clear: \"both\",\n            height,\n        }\n\n        return (\n            <div style={containerStyle}>\n                <svg\n                    {...getChartSvgProps(this.manager)}\n                    width={width}\n                    height={height}\n                    viewBox={`0 0 ${width} ${height}`}\n                >\n                    <ChartPatternDefs\n                        scale={this.manager.patternScale}\n                        idSuffix={this.manager.patternIdSuffix}\n                    />\n                    {this.manager.isReady\n                        ? this.renderReadyChartOrMap()\n                        : this.renderLoadingIndicatorIntoSvg()}\n                </svg>\n            </div>\n        )\n    }\n\n    private renderDataTable(): React.ReactElement {\n        const { bounds } = this\n        const containerStyle: React.CSSProperties = {\n            position: \"relative\",\n            ...bounds.toCSS(),\n        }\n        return (\n            <div className=\"DataTableContainer\" style={containerStyle}>\n                {this.manager.isReady ? (\n                    <DataTable bounds={bounds} manager={this.manager} />\n                ) : (\n                    <LoadingIndicator title=\"Loading data...\" />\n                )}\n            </div>\n        )\n    }\n\n    renderStatic(): React.ReactElement | null {\n        // We cannot render a table to svg, but would rather display nothing at all to avoid issues.\n        // See https://github.com/owid/owid-grapher/issues/3283\n        if (this.manager.isOnTableTab) return null\n\n        return (\n            <g\n                id={makeFigmaId(GRAPHER_CHART_AREA_CLASS)}\n                style={{ pointerEvents: \"none\" }}\n            >\n                <ChartPatternDefs\n                    scale={this.manager.patternScale}\n                    idSuffix={this.manager.patternIdSuffix}\n                />\n                {this.renderReadyChartOrMap()}\n            </g>\n        )\n    }\n\n    renderInteractive(): React.ReactElement | null {\n        return this.manager.isOnTableTab\n            ? this.renderDataTable()\n            : this.renderChartOrMap()\n    }\n\n    override render(): React.ReactElement | null {\n        return this.manager.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n}\n","import React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { Bounds } from \"@ourworldindata/utils\"\nimport { DEFAULT_GRAPHER_BOUNDS } from \"../core/GrapherConstants.js\"\nimport { CaptionedChartManager } from \"../captionedChart/CaptionedChart.js\"\nimport { GRAPHER_BACKGROUND } from \"../color/ColorConstants.js\"\nimport { getChartSvgProps } from \"./ChartUtils.js\"\n\ninterface StaticChartWrapperProps {\n    manager: CaptionedChartManager\n    bounds?: Bounds\n    children: React.ReactNode\n}\n\n@observer\nexport class StaticChartWrapper extends React.Component<StaticChartWrapperProps> {\n    constructor(props: StaticChartWrapperProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed private get manager(): CaptionedChartManager {\n        return this.props.manager\n    }\n\n    @computed protected get bounds(): Bounds {\n        return (\n            this.props.bounds ??\n            this.manager.staticBounds ??\n            DEFAULT_GRAPHER_BOUNDS\n        )\n    }\n\n    @computed private get fonts(): React.ReactElement {\n        let origin = \"\"\n        try {\n            if (this.manager.bakedGrapherURL)\n                origin = new URL(this.manager.bakedGrapherURL).origin\n        } catch {\n            // ignore\n        }\n        const css = `@import url(${origin}/fonts.css)`\n        return (\n            <defs>\n                <style>{css}</style>\n            </defs>\n        )\n    }\n\n    override render(): React.ReactElement {\n        const { manager } = this\n\n        const bounds = this.manager.staticBoundsWithDetails ?? this.bounds\n        const width = bounds.width\n        const height = bounds.height\n\n        const includeFontsStyle = !manager.isExportingForWikimedia\n        const includeBackgroundRect = !!manager.isExportingForWikimedia\n\n        return (\n            <svg\n                {...getChartSvgProps(this.manager)}\n                width={width}\n                height={height}\n                viewBox={`0 0 ${width} ${height}`}\n            >\n                {includeFontsStyle && this.fonts}\n                {includeBackgroundRect && (\n                    <rect\n                        className=\"background-fill\"\n                        fill={GRAPHER_BACKGROUND}\n                        width={width}\n                        height={height}\n                    />\n                )}\n                {this.props.children}\n            </svg>\n        )\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    Bounds,\n    exposeInstanceOnWindow,\n    makeFigmaId,\n    roundForSvg,\n} from \"@ourworldindata/utils\"\nimport {\n    MarkdownTextWrap,\n    MarkdownTextWrapSvg,\n    LoadingIndicator,\n} from \"@ourworldindata/components\"\nimport { Header, StaticHeader } from \"../header/Header\"\nimport { Footer, StaticFooter } from \"../footer/Footer\"\nimport {\n    STATIC_EXPORT_DETAIL_SPACING,\n    GRAPHER_FRAME_PADDING_VERTICAL,\n    GRAPHER_FRAME_PADDING_HORIZONTAL,\n    DEFAULT_GRAPHER_BOUNDS,\n} from \"../core/GrapherConstants\"\nimport { MapChartManager } from \"../mapCharts/MapChartConstants\"\nimport { ChartManager } from \"../chart/ChartManager\"\nimport { faExternalLinkAlt } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { FooterManager } from \"../footer/FooterManager\"\nimport { HeaderManager } from \"../header/HeaderManager\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport {\n    EntityName,\n    RelatedQuestionsConfig,\n    GrapherTabName,\n    GrapherChartType,\n} from \"@ourworldindata/types\"\nimport { DataTableManager } from \"../dataTable/DataTableConstants\"\nimport {\n    TimelineComponent,\n    TIMELINE_HEIGHT,\n} from \"../timeline/TimelineComponent\"\nimport { TimelineController } from \"../timeline/TimelineController\"\nimport {\n    ControlsRow,\n    ControlsRowManager,\n} from \"../controls/controlsRow/ControlsRow\"\nimport { GRAPHER_BACKGROUND } from \"../color/ColorConstants.js\"\nimport { ChartAreaContent } from \"../chart/ChartAreaContent\"\nimport { getChartSvgProps } from \"../chart/ChartUtils\"\nimport { StaticChartWrapper } from \"../chart/StaticChartWrapper\"\n\nexport interface CaptionedChartManager\n    extends\n        ChartManager,\n        MapChartManager,\n        FooterManager,\n        HeaderManager,\n        DataTableManager,\n        ControlsRowManager {\n    bakedGrapherURL?: string\n    isReady?: boolean\n\n    // bounds\n    captionedChartBounds?: Bounds\n    sidePanelBounds?: Bounds\n    staticBounds?: Bounds\n    staticBoundsWithDetails?: Bounds\n\n    // layout & style\n    isSmall?: boolean\n    isMedium?: boolean\n    fontSize?: number\n\n    // state\n    activeTab?: GrapherTabName\n    isOnMapTab?: boolean\n    isOnTableTab?: boolean\n    activeChartType?: GrapherChartType\n    isFaceted?: boolean\n    isExportingForWikimedia?: boolean\n\n    // controls\n    hideControlsRow?: boolean\n\n    // timeline\n    hasTimeline?: boolean\n    timelineController?: TimelineController\n\n    // details on demand\n    shouldIncludeDetailsInStaticExport?: boolean\n    detailRenderers: MarkdownTextWrap[]\n\n    // related question\n    relatedQuestions?: RelatedQuestionsConfig[]\n    showRelatedQuestion?: boolean\n}\n\ninterface CaptionedChartProps {\n    manager: CaptionedChartManager\n}\n\n// keep in sync with sass variables in CaptionedChart.scss\nexport const CONTROLS_ROW_HEIGHT = 32\n\nabstract class AbstractCaptionedChart extends React.Component<CaptionedChartProps> {\n    protected framePaddingHorizontal = GRAPHER_FRAME_PADDING_HORIZONTAL\n    protected framePaddingVertical = GRAPHER_FRAME_PADDING_VERTICAL\n\n    constructor(props: CaptionedChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed protected get manager(): CaptionedChartManager {\n        return this.props.manager\n    }\n\n    @computed protected get maxWidth(): number {\n        return this.bounds.width - 2 * this.framePaddingHorizontal\n    }\n\n    @computed protected get verticalPadding(): number {\n        return this.manager.isSmall ? 8 : this.manager.isMedium ? 12 : 16\n    }\n\n    @computed protected get header(): Header {\n        return new Header({\n            manager: this.manager,\n            maxWidth: this.maxWidth,\n        })\n    }\n\n    @computed protected get footer(): Footer {\n        return new Footer({\n            manager: this.manager,\n            maxWidth: this.maxWidth,\n        })\n    }\n\n    @computed protected get bounds(): Bounds {\n        const bounds =\n            this.manager.captionedChartBounds ?? DEFAULT_GRAPHER_BOUNDS\n        // the padding ensures grapher's frame is not cut off\n        return bounds.padRight(2).padBottom(2)\n    }\n\n    override componentDidMount(): void {\n        exposeInstanceOnWindow(this, \"captionedChart\")\n    }\n\n    @computed get selectionArray(): SelectionArray | EntityName[] | undefined {\n        return this.manager.selection\n    }\n\n    @computed protected get svgProps(): React.SVGProps<SVGSVGElement> {\n        return getChartSvgProps(this.manager)\n    }\n}\n\n@observer\nexport class CaptionedChart extends AbstractCaptionedChart {\n    constructor(props: CaptionedChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed private get verticalPaddingSmall(): number {\n        if (this.manager.isOnMapTab) return 4\n        if (this.manager.isOnTableTab) return this.manager.isMedium ? 4 : 8\n        return this.manager.isMedium ? 8 : 16\n    }\n\n    @computed private get showRelatedQuestion(): boolean {\n        return !!this.manager.showRelatedQuestion\n    }\n\n    @computed private get relatedQuestionHeight(): number {\n        if (!this.showRelatedQuestion) return 0\n        return this.manager.isMedium ? 24 : 28\n    }\n\n    @computed private get showControlsRow(): boolean {\n        if (this.manager.hideControlsRow) return false\n        return ControlsRow.shouldShow(this.manager)\n    }\n\n    @computed private get settingsPopoverMaxWidth(): number {\n        // Ensure the popover is at most 300px wide\n        return Math.min(300, Math.floor(this.maxWidth))\n    }\n\n    @computed private get settingsPopoverMaxHeight(): number {\n        const availableHeight =\n            this.bounds.height -\n            2 * this.framePaddingVertical -\n            this.headerHeightWithPadding -\n            this.controlsRowHeightWithPadding\n\n        return Math.floor(availableHeight)\n    }\n\n    private renderControlsRow(): React.ReactElement {\n        return (\n            <ControlsRow\n                manager={this.manager}\n                maxWidth={this.maxWidth}\n                popoverMaxWidth={this.settingsPopoverMaxWidth}\n                popoverMaxHeight={this.settingsPopoverMaxHeight}\n            />\n        )\n    }\n\n    private renderRelatedQuestion(): React.ReactElement {\n        const { relatedQuestions } = this.manager\n        return (\n            <div\n                className=\"relatedQuestion\"\n                style={{\n                    width: this.bounds.width,\n                    height: this.relatedQuestionHeight,\n                    padding: `0 ${this.framePaddingHorizontal}px`,\n                }}\n            >\n                Related:&nbsp;\n                <a\n                    href={relatedQuestions![0].url}\n                    target=\"_blank\"\n                    rel=\"noopener\"\n                    data-track-note=\"chart_click_related\"\n                >\n                    {relatedQuestions![0].text}\n                </a>\n                <FontAwesomeIcon icon={faExternalLinkAlt} />\n            </div>\n        )\n    }\n\n    private renderLoadingIndicator(): React.ReactElement {\n        return <LoadingIndicator title=\"Loading data...\" bounds={this.bounds} />\n    }\n\n    private renderTimeline(): React.ReactElement {\n        return (\n            <TimelineComponent\n                timelineController={this.manager.timelineController!}\n                maxWidth={this.maxWidth}\n            />\n        )\n    }\n\n    @computed private get showHeader(): boolean {\n        return this.header.height > 0\n    }\n\n    @computed private get headerHeightWithPadding(): number {\n        if (!this.showHeader) return 0\n        return this.header.height + this.verticalPadding\n    }\n\n    @computed private get footerHeightWithPadding(): number {\n        return this.footer.height + this.verticalPadding\n    }\n\n    @computed private get controlsRowHeightWithPadding(): number {\n        return this.showControlsRow\n            ? CONTROLS_ROW_HEIGHT + this.verticalPaddingSmall\n            : 0\n    }\n\n    @computed private get timelineHeightWithPadding(): number {\n        return this.manager.hasTimeline\n            ? TIMELINE_HEIGHT + this.verticalPaddingSmall\n            : 0\n    }\n\n    @computed private get relatedQuestionHeightWithPadding(): number {\n        return this.showRelatedQuestion\n            ? this.relatedQuestionHeight - this.framePaddingVertical * 0.25\n            : 0\n    }\n\n    /**\n     * The height of the chart area is the total height of the frame minus\n     * the height of the header, footer, controls, etc.\n     */\n    @computed private get chartHeight(): number {\n        return Math.floor(\n            this.bounds.height -\n                2 * this.framePaddingVertical -\n                this.headerHeightWithPadding -\n                this.controlsRowHeightWithPadding -\n                this.timelineHeightWithPadding -\n                this.footerHeightWithPadding -\n                this.relatedQuestionHeightWithPadding\n        )\n    }\n\n    @computed private get boundsForChartArea(): Bounds {\n        const { bounds, chartHeight } = this\n        return new Bounds(0, 0, bounds.width, chartHeight)\n    }\n\n    // make sure to keep this.chartHeight in sync if you edit the render function\n    override render(): React.ReactElement {\n        // CaptionedChart renders at the very least a header, a chart, and a footer.\n        // Interactive charts also have controls above the chart area and a timeline below it.\n        // Some charts have a related question below the footer.\n        // A CaptionedChart looks like this (components in [brackets] are optional):\n        //    #1 Header\n        //            ---- vertical space\n        //    #2 [Controls]\n        //            ---- vertical space (small)\n        //    #3 Chart/Map/Table\n        //            ---- vertical space (small)\n        //    #4 [Timeline]\n        //            ---- vertical space\n        //    #5 Footer\n        //    #6 [Related question]\n        return (\n            <div\n                className=\"CaptionedChart\"\n                style={{ backgroundColor: GRAPHER_BACKGROUND }}\n            >\n                {/* #1 Header */}\n                {this.showHeader && (\n                    <>\n                        <Header\n                            manager={this.manager}\n                            maxWidth={this.maxWidth}\n                        />\n                        <VerticalSpace height={this.verticalPadding} />\n                    </>\n                )}\n\n                {this.manager.isReady ? (\n                    <>\n                        {/* #2 [Controls] */}\n                        {this.showControlsRow && this.renderControlsRow()}\n                        {this.showControlsRow && (\n                            <VerticalSpace height={this.verticalPaddingSmall} />\n                        )}\n\n                        {/* #3 Chart/Map/Table */}\n                        <ChartAreaContent\n                            manager={this.manager}\n                            bounds={this.boundsForChartArea}\n                            padWidth={GRAPHER_FRAME_PADDING_HORIZONTAL}\n                        />\n\n                        {/* #4 [Timeline] */}\n                        {this.manager.hasTimeline && (\n                            <VerticalSpace height={this.verticalPaddingSmall} />\n                        )}\n                        {this.manager.hasTimeline && this.renderTimeline()}\n\n                        {/* #5 Footer */}\n                        <VerticalSpace height={this.verticalPadding} />\n                        <Footer\n                            manager={this.manager}\n                            maxWidth={this.maxWidth}\n                        />\n\n                        {/* #6 [Related question] */}\n                        {this.showRelatedQuestion &&\n                            this.renderRelatedQuestion()}\n                    </>\n                ) : (\n                    this.renderLoadingIndicator()\n                )}\n            </div>\n        )\n    }\n}\n\n@observer\nexport class StaticCaptionedChart extends AbstractCaptionedChart {\n    constructor(props: CaptionedChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    // Bounds diagram\n    //\n    // +---------------------------+   |  |\n    // |  Padding                  |   |  |\n    // |  +--------------------+   |   |  |  |\n    // |  | Header             |   |   |  |  |\n    // |  |                    |   |   |  |  |\n    // |  | Chart area         |   |   |  |  |\n    // |  |                    |   |   |  |  |\n    // |  | Footer             |   |   |  |  | innerBounds\n    // |  +--------------------+   |   |  |\n    // |  Padding                  |   |  |\n    // +---------------------------+   |  | bounds\n    // | Details                   |   |\n    // +---------------------------+   | svgBounds\n\n    /** Bounds of the SVG element including details */\n    @computed private get svgBounds(): Bounds {\n        return this.manager.staticBoundsWithDetails ?? this.bounds\n    }\n\n    /** Bounds without details */\n    protected override get bounds(): Bounds {\n        return this.manager.staticBounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    /** Padded bounds of the actual chart area (without whitespace around it) */\n    @computed private get innerBounds(): Bounds {\n        return this.bounds\n            .padWidth(this.framePaddingHorizontal)\n            .padHeight(this.framePaddingVertical)\n    }\n\n    /** Bounds of the chart area (without header and footer) */\n    protected get boundsForChartArea(): Bounds {\n        return this.innerBounds\n            .padTop(this.staticHeader.height)\n            .padBottom(this.staticFooter.height + this.verticalPadding)\n            .padTop(this.manager.isOnMapTab ? 0 : this.verticalPadding)\n    }\n\n    @computed protected get staticFooter(): Footer {\n        return new StaticFooter({\n            manager: this.manager,\n            maxWidth: this.maxWidth,\n            targetX: this.innerBounds.x,\n            targetY: this.innerBounds.bottom - this.footer.height,\n        })\n    }\n\n    @computed protected get staticHeader(): Header {\n        return new StaticHeader({\n            manager: this.manager,\n            maxWidth: this.maxWidth,\n            targetX: this.innerBounds.x,\n            targetY: this.innerBounds.y,\n        })\n    }\n\n    renderSVGDetails(): React.ReactElement {\n        let yOffset = 0\n        let previousOffset: number\n        return (\n            <>\n                <line\n                    id={makeFigmaId(\"separator-line\")}\n                    x1={roundForSvg(this.framePaddingHorizontal)}\n                    y1={roundForSvg(this.bounds.height)}\n                    x2={roundForSvg(\n                        this.boundsForChartArea.width +\n                            this.framePaddingHorizontal\n                    )}\n                    y2={roundForSvg(this.bounds.height)}\n                    stroke=\"#e7e7e7\"\n                ></line>\n                <g\n                    id={makeFigmaId(\"details\")}\n                    transform={`translate(15, ${roundForSvg(\n                        this.bounds.height + this.framePaddingVertical\n                    )})`}\n                >\n                    {this.manager.detailRenderers.map((detail, i) => {\n                        previousOffset = yOffset\n                        yOffset += detail.height + STATIC_EXPORT_DETAIL_SPACING\n                        return (\n                            <React.Fragment key={i}>\n                                <MarkdownTextWrapSvg\n                                    textWrap={detail}\n                                    x={0}\n                                    y={previousOffset}\n                                />\n                            </React.Fragment>\n                        )\n                    })}\n                </g>\n            </>\n        )\n    }\n\n    override render(): React.ReactElement {\n        const { innerBounds, manager, maxWidth } = this\n\n        const includeDetailsInStaticExport =\n            manager.shouldIncludeDetailsInStaticExport &&\n            !_.isEmpty(this.manager.detailRenderers)\n\n        return (\n            <StaticChartWrapper manager={this.manager} bounds={this.svgBounds}>\n                <StaticHeader\n                    manager={manager}\n                    maxWidth={maxWidth}\n                    targetX={innerBounds.x}\n                    targetY={innerBounds.y}\n                />\n                <ChartAreaContent\n                    manager={this.manager}\n                    bounds={this.boundsForChartArea}\n                />\n                <StaticFooter\n                    manager={manager}\n                    maxWidth={maxWidth}\n                    targetX={innerBounds.x}\n                    targetY={innerBounds.bottom - this.staticFooter.height}\n                />\n                {includeDetailsInStaticExport && this.renderSVGDetails()}\n            </StaticChartWrapper>\n        )\n    }\n}\n\n// Although a bit unconventional, adding vertical space as a <div />\n// makes margin collapsing impossible and makes it easier to track the\n// space available for the chart area (see the CaptionedChart's `chartHeight` method)\nfunction VerticalSpace({ height }: { height: number }): React.ReactElement {\n    return <div className=\"VerticalSpace\" style={{ height, width: \"100%\" }} />\n}\n","import React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    CaptionedChart,\n    StaticCaptionedChart,\n} from \"../captionedChart/CaptionedChart.js\"\nimport { GrapherState } from \"../core/GrapherState.js\"\nimport { ChartAreaContent } from \"./ChartAreaContent.js\"\nimport { StaticChartWrapper } from \"./StaticChartWrapper.js\"\nimport { GrapherVariant } from \"@ourworldindata/types\"\n\n@observer\nexport class Chart extends React.Component<{\n    manager: GrapherState\n}> {\n    constructor(props: { manager: GrapherState }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed private get manager(): GrapherState {\n        return this.props.manager\n    }\n\n    @computed private get isCaptioned(): boolean {\n        return this.manager.variant === GrapherVariant.Default\n    }\n\n    private renderInteractive(): React.ReactElement {\n        return this.isCaptioned ? (\n            <CaptionedChart manager={this.manager} />\n        ) : (\n            <ChartAreaContent\n                manager={this.manager}\n                bounds={this.manager.chartAreaBounds}\n            />\n        )\n    }\n\n    private renderStatic(): React.ReactElement {\n        return this.isCaptioned ? (\n            <StaticCaptionedChart manager={this.manager} />\n        ) : (\n            <StaticChartWrapper\n                manager={this.manager}\n                bounds={this.manager.chartAreaBounds}\n            >\n                <ChartAreaContent\n                    manager={this.manager}\n                    bounds={this.manager.chartAreaBounds}\n                />\n            </StaticChartWrapper>\n        )\n    }\n\n    override render(): React.ReactElement {\n        return this.manager.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\n\nimport {\n    observable,\n    computed,\n    action,\n    autorun,\n    reaction,\n    makeObservable,\n    comparer,\n} from \"mobx\"\nimport {\n    bind,\n    next,\n    sampleFrom,\n    exposeInstanceOnWindow,\n    QueryParams,\n    MultipleOwidVariableDataDimensionsMap,\n    Bounds,\n    strToQueryParams,\n    queryParamsToStr,\n    setWindowQueryStr,\n} from \"@ourworldindata/utils\"\nimport { BodyPortal } from \"@ourworldindata/components\"\nimport {\n    ScaleType,\n    AnnotationFieldsInTitle,\n    GrapherInterface,\n    LegacyGrapherInterface,\n    GrapherTooltipAnchor,\n    NarrativeChartInfo,\n    ArchiveContext,\n    AdditionalGrapherDataFetchFn,\n    GrapherVariant,\n    Time,\n} from \"@ourworldindata/types\"\nimport { OwidTable } from \"@ourworldindata/core-table\"\nimport { GrapherModal } from \"../core/GrapherConstants\"\n\nimport { FullScreen } from \"../fullScreen/FullScreen\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faExclamationTriangle } from \"@fortawesome/free-solid-svg-icons\"\nimport { TooltipContainer } from \"../tooltip/Tooltip\"\nimport { EntitySelectorModal } from \"../modal/EntitySelectorModal\"\nimport { DownloadModal } from \"../modal/DownloadModal\"\nimport { observer } from \"mobx-react\"\nimport { SourcesModal } from \"../modal/SourcesModal\"\nimport { Command, CommandPalette } from \"../controls/CommandPalette\"\nimport { EmbedModal } from \"../modal/EmbedModal\"\nimport { tinykeys } from \"tinykeys\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { legacyToOwidTableAndDimensions } from \"./LegacyToOwidTable\"\nimport classnames from \"clsx\"\nimport { SidePanel } from \"../sidePanel/SidePanel\"\nimport { EntitySelector } from \"../entitySelector/EntitySelector\"\nimport { SlideInDrawer } from \"../slideInDrawer/SlideInDrawer\"\nimport { FocusArray } from \"../focus/FocusArray\"\nimport { Chart } from \"../chart/Chart.js\"\nimport { flushSync } from \"react-dom\"\nimport { GrapherState } from \"./GrapherState.js\"\n\n/**\n * A Grapher config plus options that aren't part of the persisted config\n * schema: they control how a chart is embedded and which parts of its\n * interface are shown, rather than what the chart shows. Authors never set\n * these in the chart editor; developers pass them in code, e.g. as the\n * `config` of a {@link GrapherLoader}.\n */\nexport interface GrapherProgrammaticInterface extends GrapherInterface {\n    /** Query string to initialise the chart's state from, in the same format\n     *  as a grapher page URL, e.g. `\"?tab=map&time=2020\"`. */\n    queryStr?: string\n    /** @internal */\n    bounds?: Bounds\n    /** @internal */\n    table?: OwidTable\n    /** @internal */\n    baseUrl?: string\n    /** Base URL that chart page links are derived from: published charts link\n     *  to `<bakedGrapherURL>/<slug>`. Defaults to `\"/grapher\"`. */\n    bakedGrapherURL?: string\n    /** The URL of the chart's own page, which the title and the \"Explore the\n     *  data\" button link to and the share menu shares. Overrides the URL\n     *  derived from `bakedGrapherURL` and `slug`. `null` means the chart has\n     *  no such page: the title is plain text, and the \"Explore the data\"\n     *  button and share menu are not shown. */\n    canonicalUrl?: string | null\n    /** @internal */\n    adminBaseUrl?: string\n    /** @internal */\n    env?: string\n    /** Times to mark in line charts, as if the cursor were hovering them. */\n    highlightedTimesInLineChart?: Time[]\n    /** @internal */\n    baseFontSize?: number\n    /** @internal */\n    staticBounds?: Bounds\n    /** @internal */\n    variant?: GrapherVariant\n    /** @internal */\n    useMinimalLabeling?: boolean\n\n    /** Hide the title. */\n    hideTitle?: boolean\n    /** Hide the subtitle. */\n    hideSubtitle?: boolean\n    /** Hide the note in the footer. */\n    hideNote?: boolean\n    /** Hide the origin URL next to the license in the footer. */\n    hideOriginUrl?: boolean\n    /** Hide the full-screen button. */\n    hideFullscreenButton?: boolean\n    /** Hide the download button. */\n    hideDownloadButton?: boolean\n    /** Hide the share button. */\n    hideShareButton?: boolean\n    /** Hide the \"Donate\" button, which is shown when the chart is rendered\n     *  inside an iframe. */\n    hideDonateButton?: boolean\n\n    /** Hide the controls for selecting entities (countries, regions, …),\n     *  including selecting them on the map. */\n    hideEntityControls?: boolean\n    /** Hide the row of controls between the header and the chart (tabs,\n     *  entity selection, settings). */\n    hideControlsRow?: boolean\n    /** Leave out the entity, time or \"change in\" annotations that are\n     *  otherwise added to the title. */\n    forceHideAnnotationFieldsInTitle?: AnnotationFieldsInTitle\n    /** Whether to offer the table tab. Defaults to `true`. */\n    hasTableTab?: boolean\n    /** Whether to hide the \"Explore the data\" button, which links to the\n     *  chart's own page. Defaults to `true`, except inside an iframe, where\n     *  the button is always shown. Never shown without a `canonicalUrl`. */\n    hideExploreTheDataButton?: boolean\n    /** Hide the related question link below the chart. */\n    hideRelatedQuestion?: boolean\n    /** Allow selecting entities by clicking them on the map, even where the\n     *  entity controls would otherwise disable that. */\n    enableMapSelection?: boolean\n\n    /** Enable keyboard shortcuts and the command palette. */\n    enableKeyboardShortcuts?: boolean\n    /** Keep the page URL's query string in sync with the chart's state. Only\n     *  makes sense for a single chart that owns the page. */\n    bindUrlToWindow?: boolean\n    /** @internal */\n    isEmbeddedInAnOwidPage?: boolean\n    /** @internal */\n    isEmbeddedInADataPage?: boolean\n    /** @internal */\n    useNewDatapageMetadataLayout?: boolean\n    /** @internal */\n    isConfigReady?: boolean\n    /** @internal */\n    isDataReady?: boolean\n    /** @internal */\n    canHideExternalControlsInEmbed?: boolean\n    /** @internal */\n    recommendedIframeEmbedHeight?: number\n\n    /** @internal */\n    narrativeChartInfo?: MinimalNarrativeChartInfo\n    /** @internal */\n    archiveContext?: ArchiveContext\n\n    /** @internal */\n    manager?: GrapherManager\n    /** @internal */\n    additionalDataLoaderFn?: AdditionalGrapherDataFetchFn\n}\n\nexport type MinimalNarrativeChartInfo = Pick<\n    NarrativeChartInfo,\n    \"name\" | \"parentChartSlug\" | \"queryParamsForParentChart\"\n>\n\ninterface AnalyticsContext {\n    slug?: string\n    viewConfigId?: string\n}\n\nexport interface GrapherManager {\n    baseUrl?: string\n    queryStr?: string\n    selection?: SelectionArray\n    focusArray?: FocusArray\n    adminCreateNarrativeChartPath?: string\n    analyticsContext?: AnalyticsContext\n}\n\nexport interface GrapherProps {\n    grapherState: GrapherState\n}\n\n@observer\nexport class Grapher extends React.Component<GrapherProps> {\n    @computed get grapherState(): GrapherState {\n        return this.props.grapherState\n    }\n\n    // #region Observable props not in any interface\n\n    // stored on Grapher so state is preserved when switching to full-screen mode\n\n    private readonly legacyVariableDataJson:\n        | MultipleOwidVariableDataDimensionsMap\n        | undefined = undefined\n    private hasLoggedGAViewEvent = false\n    private hasBeenVisible = false\n    private uncaughtError: Error | undefined = undefined\n\n    constructor(props: { grapherState: GrapherState }) {\n        super(props)\n\n        makeObservable<\n            Grapher,\n            \"legacyVariableDataJson\" | \"hasBeenVisible\" | \"uncaughtError\"\n        >(this, {\n            legacyVariableDataJson: observable,\n            hasBeenVisible: observable,\n            uncaughtError: observable,\n        })\n    }\n\n    // Convenience method for debugging\n    windowQueryParams(str = location.search): QueryParams {\n        return strToQueryParams(str)\n    }\n\n    @action.bound private _setInputTable(\n        json: MultipleOwidVariableDataDimensionsMap,\n        legacyConfig: Partial<LegacyGrapherInterface>\n    ): void {\n        // TODO grapher model: switch this to downloading multiple data and metadata files\n\n        const startMark = performance.now()\n        const tableWithColors = legacyToOwidTableAndDimensions(\n            json,\n            legacyConfig.dimensions ?? [],\n            legacyConfig.selectedEntityColors\n        )\n        this.grapherState.createPerformanceMeasurement(\n            \"legacyToOwidTableAndDimensions\",\n            startMark\n        )\n\n        this.grapherState.inputTable = tableWithColors\n    }\n\n    @action rebuildInputOwidTable(): void {\n        // TODO grapher model: switch this to downloading multiple data and metadata files\n        if (!this.legacyVariableDataJson) return\n        this._setInputTable(\n            this.legacyVariableDataJson,\n            this.grapherState.legacyConfigAsAuthored\n        )\n    }\n\n    // Keeps a running cache of series colors at the Grapher level.\n\n    @bind dispose(): void {\n        this.grapherState.disposers.forEach((dispose) => dispose())\n    }\n\n    @action.bound setError(err: Error): void {\n        this.uncaughtError = err\n    }\n\n    @action.bound clearErrors(): void {\n        this.uncaughtError = undefined\n    }\n\n    private get commandPalette(): React.ReactElement | null {\n        if (!this.props.grapherState.enableKeyboardShortcuts) return null\n        return this.grapherState.isCommandPaletteOpen ? (\n            <CommandPalette commands={this.keyboardShortcuts} />\n        ) : null\n    }\n\n    @action.bound private toggleCommandPalette(): void {\n        this.grapherState.isCommandPaletteOpen =\n            !this.grapherState.isCommandPaletteOpen\n    }\n\n    @action.bound private toggleTabCommand(): void {\n        const oldTab = this.grapherState.activeTab\n        const newTab = next(this.grapherState.availableTabs, oldTab)\n        this.grapherState.setTab(newTab)\n        this.grapherState.onTabChange(oldTab, newTab)\n    }\n\n    @action.bound private togglePlayingCommand(): void {\n        void this.grapherState.timelineController.togglePlay()\n    }\n\n    @action.bound private toggleSelectAllCommand(): void {\n        if (this.grapherState.selection.hasSelection) {\n            this.grapherState.selection.clearSelection()\n            this.grapherState.focusArray.clear()\n        } else {\n            this.grapherState.selection.setSelectedEntities(\n                this.grapherState.availableEntityNames\n            )\n        }\n    }\n\n    @action.bound private toggleFacetingCommand(): void {\n        this.grapherState.hideFacetControl = !this.grapherState.hideFacetControl\n    }\n\n    @action.bound private toggleSourcesModalCommand(): void {\n        const isSourcesModalOpen =\n            this.grapherState.activeModal === GrapherModal.Sources\n        this.grapherState.activeModal = isSourcesModalOpen\n            ? undefined\n            : GrapherModal.Sources\n    }\n\n    @action.bound private toggleDownloadModalCommand(): void {\n        const isDownloadModalOpen =\n            this.grapherState.activeModal === GrapherModal.Download\n        this.grapherState.activeModal = isDownloadModalOpen\n            ? undefined\n            : GrapherModal.Download\n    }\n\n    private get keyboardShortcuts(): Command[] {\n        const temporaryFacetTestCommands = _.range(0, 10).map((num) => {\n            return {\n                combo: `${num}`,\n                fn: (): void => this.randomSelection(num),\n            }\n        })\n        const shortcuts = [\n            ...temporaryFacetTestCommands,\n            {\n                combo: \"t\",\n                fn: this.toggleTabCommand,\n                title: \"Toggle tab\",\n                category: \"Navigation\",\n            },\n            {\n                combo: \"[Shift]+?\",\n                fn: this.toggleCommandPalette,\n                title: `Toggle Help`,\n                category: \"Navigation\",\n            },\n            {\n                combo: \"a\",\n                fn: this.toggleSelectAllCommand,\n                title: this.grapherState.selection.hasSelection\n                    ? `Select None`\n                    : `Select All`,\n                category: \"Selection\",\n            },\n            {\n                combo: \"f\",\n                fn: this.toggleFacetingCommand,\n                title: `Toggle Faceting`,\n                category: \"Chart\",\n            },\n            {\n                combo: \"p\",\n                fn: this.togglePlayingCommand,\n                title: this.grapherState.isTimelineAnimationPlaying\n                    ? `Pause`\n                    : `Play`,\n                category: \"Timeline\",\n            },\n            {\n                combo: \"l\",\n                fn: this.toggleYScaleTypeCommand,\n                title: \"Toggle Y log/linear\",\n                category: \"Chart\",\n            },\n            {\n                combo: \"w\",\n                fn: this.toggleFullScreenMode,\n                title: `Toggle full-screen mode`,\n                category: \"Chart\",\n            },\n            {\n                combo: \"s\",\n                fn: this.toggleSourcesModalCommand,\n                title: `Toggle sources modal`,\n                category: \"Chart\",\n            },\n            {\n                combo: \"d\",\n                fn: this.toggleDownloadModalCommand,\n                title: \"Toggle download modal\",\n                category: \"Chart\",\n            },\n            { combo: \"Escape\", fn: this.clearErrors },\n            {\n                combo: \"z\",\n                fn: this.toggleTimelineCommand,\n                title: \"Latest/Earliest/All period\",\n                category: \"Timeline\",\n            },\n            {\n                combo: \"Shift+O\",\n                fn: this.grapherState.clearQueryParams,\n                title: \"Reset to original\",\n                category: \"Navigation\",\n            },\n            {\n                combo: \"g\",\n                fn: this.grapherState.globeController.toggleGlobe,\n                title: \"Toggle globe view\",\n                category: \"Map\",\n            },\n        ]\n\n        if (this.grapherState.slideShow) {\n            const slideShow = this.grapherState.slideShow\n            shortcuts.push({\n                combo: \"ArrowRight\",\n                fn: slideShow.playNext,\n                title: \"Next chart\",\n                category: \"Browse\",\n            })\n            shortcuts.push({\n                combo: \"ArrowLeft\",\n                fn: slideShow.playPrevious,\n                title: \"Previous chart\",\n                category: \"Browse\",\n            })\n        }\n\n        return shortcuts\n    }\n\n    @action.bound private toggleTimelineCommand(): void {\n        // Todo: add tests for this\n        this.grapherState.setTimeFromTimeQueryParam(\n            next([\"latest\", \"earliest\", \"..\"], this.grapherState.timeParam!)\n        )\n    }\n\n    @action.bound private toggleYScaleTypeCommand(): void {\n        this.grapherState.yAxis.scaleType = next(\n            [ScaleType.linear, ScaleType.log],\n            this.grapherState.yAxis.scaleType\n        )\n    }\n\n    @action.bound randomSelection(num: number): void {\n        // Continent, Population, GDP PC, GDP, PopDens, UN, Language, etc.\n        this.clearErrors()\n        const currentSelection =\n            this.grapherState.selection.selectedEntityNames.length\n        const newNum = num ? num : currentSelection ? currentSelection * 2 : 10\n        this.grapherState.selection.setSelectedEntities(\n            sampleFrom(\n                this.grapherState.availableEntityNames,\n                newNum,\n                Date.now()\n            )\n        )\n    }\n    @action.bound toggleFullScreenMode(): void {\n        this.grapherState.isInFullScreenMode =\n            !this.grapherState.isInFullScreenMode\n    }\n\n    @action.bound dismissFullScreen(): void {\n        // if a modal is open, dismiss it instead of exiting full-screen mode\n        if (\n            this.grapherState.isModalOpen ||\n            this.grapherState.isShareMenuActive\n        ) {\n            this.grapherState.isEntitySelectorModalOrDrawerOpen = false\n            this.grapherState.activeModal = undefined\n            this.grapherState.isShareMenuActive = false\n        } else {\n            this.grapherState.isInFullScreenMode = false\n        }\n    }\n\n    private renderError(): React.ReactElement {\n        return (\n            <div\n                title={this.uncaughtError?.message}\n                style={{\n                    width: \"100%\",\n                    height: \"100%\",\n                    position: \"relative\",\n                    display: \"flex\",\n                    flexDirection: \"column\",\n                    justifyContent: \"center\",\n                    textAlign: \"center\",\n                    lineHeight: 1.5,\n                    padding: \"48px\",\n                }}\n            >\n                <p style={{ color: \"#cc0000\", fontWeight: 700 }}>\n                    <FontAwesomeIcon icon={faExclamationTriangle} />\n                    There was a problem loading this chart\n                </p>\n                <p>\n                    We have been notified of this error, please check back later\n                    whether it's been fixed. If the error persists, get in touch\n                    with us at{\" \"}\n                    <a\n                        href={`mailto:info@ourworldindata.org?subject=Broken chart on page ${window.location.href}`}\n                    >\n                        info@ourworldindata.org\n                    </a>\n                    .\n                </p>\n                {this.uncaughtError && this.uncaughtError.message && (\n                    <pre style={{ fontSize: \"11px\" }}>\n                        Error: {this.uncaughtError.message}\n                    </pre>\n                )}\n            </div>\n        )\n    }\n\n    private renderGrapherComponent(): React.ReactElement {\n        const containerClasses = classnames({\n            GrapherComponent: true,\n            GrapherPortraitClass: this.grapherState.isPortrait,\n            isStatic: this.grapherState.isStatic,\n            isExportingToSvgOrPng: this.grapherState.isExportingToSvgOrPng,\n            GrapherComponentNarrow: this.grapherState.isNarrow,\n            GrapherComponentSemiNarrow: this.grapherState.isSemiNarrow,\n            GrapherComponentSmall: this.grapherState.isSmall,\n            GrapherComponentMedium: this.grapherState.isMedium,\n        })\n\n        const containerStyle = {\n            width: this.grapherState.activeBounds.width,\n            height: this.grapherState.activeBounds.height,\n            fontSize: this.grapherState.isExportingToSvgOrPng\n                ? 18\n                : Math.min(16, this.grapherState.fontSize), // cap font size at 16px\n        }\n\n        return (\n            <div\n                ref={this.grapherState.base}\n                className={containerClasses}\n                style={containerStyle}\n                data-grapher-url={JSON.stringify({\n                    grapherUrl: this.grapherState.canonicalUrl,\n                    narrativeChartName:\n                        this.grapherState.narrativeChartInfo?.name,\n                    viewConfigId:\n                        this.grapherState.analyticsContext.viewConfigId,\n                })}\n            >\n                {this.commandPalette}\n                {this.uncaughtError ? this.renderError() : this.renderReady()}\n            </div>\n        )\n    }\n\n    override render(): React.ReactElement | undefined {\n        // Used in the admin to render a static preview of the chart\n        if (this.grapherState.isExportingToSvgOrPng)\n            return <Chart manager={this.grapherState} />\n\n        if (this.grapherState.isInFullScreenMode) {\n            return (\n                <FullScreen\n                    onDismiss={this.dismissFullScreen}\n                    isDimmed={this.grapherState.isModalOpen}\n                >\n                    {this.renderGrapherComponent()}\n                </FullScreen>\n            )\n        }\n\n        return this.renderGrapherComponent()\n    }\n\n    private renderReady(): React.ReactElement | null {\n        if (!this.hasBeenVisible) return null\n\n        const entitySelectorArray = this.grapherState.isOnMapTab\n            ? this.grapherState.mapConfig.selection\n            : this.grapherState.selection\n\n        return (\n            <>\n                {/* Chart and entity selector */}\n                <div className=\"CaptionedChartAndSidePanel\">\n                    <Chart manager={this.grapherState} />\n\n                    {this.grapherState.sidePanelBounds && (\n                        <SidePanel bounds={this.grapherState.sidePanelBounds}>\n                            <EntitySelector\n                                manager={this.grapherState}\n                                selection={entitySelectorArray}\n                            />\n                        </SidePanel>\n                    )}\n                </div>\n\n                {/* Modals */}\n                {this.grapherState.activeModal === GrapherModal.Sources &&\n                    this.grapherState.isReady && (\n                        <SourcesModal manager={this.grapherState} />\n                    )}\n                {this.grapherState.activeModal === GrapherModal.Download &&\n                    this.grapherState.isReady && (\n                        <DownloadModal manager={this.grapherState} />\n                    )}\n                {this.grapherState.activeModal === GrapherModal.Embed &&\n                    this.grapherState.isReady && (\n                        <EmbedModal manager={this.grapherState} />\n                    )}\n                {this.grapherState.isEntitySelectorModalOpen && (\n                    <EntitySelectorModal manager={this.grapherState} />\n                )}\n\n                {/* Entity selector in a slide-in drawer */}\n                <SlideInDrawer\n                    ariaLabel=\"Entity selector\"\n                    grapherRef={this.grapherState.base}\n                    isOpen={this.grapherState.isEntitySelectorDrawerOpen}\n                    onOpenChange={(isOpen) => {\n                        this.grapherState.isEntitySelectorModalOrDrawerOpen =\n                            isOpen\n                    }}\n                >\n                    <EntitySelector\n                        manager={this.grapherState}\n                        selection={entitySelectorArray}\n                        autoFocus={true}\n                    />\n                </SlideInDrawer>\n\n                {/* Tooltip: either pin to the bottom or render into the chart area */}\n                {this.grapherState.shouldPinTooltipToBottom ? (\n                    <BodyPortal>\n                        <TooltipContainer\n                            tooltipManager={this.grapherState}\n                            anchor={GrapherTooltipAnchor.Bottom}\n                        />\n                    </BodyPortal>\n                ) : (\n                    <TooltipContainer\n                        tooltipManager={this.grapherState}\n                        containerBounds={this.grapherState.captionedChartBounds}\n                    />\n                )}\n            </>\n        )\n    }\n\n    // Chart should only render SVG when it's on the screen\n    @action.bound private setUpIntersectionObserver(): void {\n        if (typeof window !== \"undefined\" && \"IntersectionObserver\" in window) {\n            const observer = new IntersectionObserver(\n                (entries) => {\n                    entries.forEach((entry) => {\n                        if (entry.isIntersecting) {\n                            // We need to render this immediately to avoid a Safari bug, where Safari\n                            // is seemingly blocking rendering during the initial fetches, and will then\n                            // subsequently render using the wrong bounds.\n                            flushSync(\n                                action(() => {\n                                    this.hasBeenVisible = true\n                                })\n                            )\n\n                            if (!this.hasLoggedGAViewEvent) {\n                                this.hasLoggedGAViewEvent = true\n\n                                if (this.grapherState.narrativeChartInfo) {\n                                    this.grapherState.analytics.logGrapherView(\n                                        this.grapherState.narrativeChartInfo\n                                            .parentChartSlug,\n                                        {\n                                            narrativeChartName:\n                                                this.grapherState\n                                                    .narrativeChartInfo.name,\n                                        }\n                                    )\n                                    this.hasLoggedGAViewEvent = true\n                                } else if (this.grapherState.slug) {\n                                    this.grapherState.analytics.logGrapherView(\n                                        this.grapherState.slug\n                                    )\n                                    this.hasLoggedGAViewEvent = true\n                                }\n                            }\n\n                            // dismiss tooltip when less than 2/3 of the chart is visible\n                            const tooltip = this.grapherState.tooltip?.get()\n                            const isNotVisible = !entry.isIntersecting\n                            const isPartiallyVisible =\n                                entry.isIntersecting &&\n                                entry.intersectionRatio < 0.66\n                            if (\n                                tooltip &&\n                                (isNotVisible || isPartiallyVisible)\n                            ) {\n                                tooltip.dismiss?.()\n                            }\n                        }\n                    })\n                },\n                { threshold: [0, 0.66] }\n            )\n            observer.observe(this.grapherState.containerElement!)\n            this.grapherState.disposers.push(() => observer.disconnect())\n        } else {\n            // IntersectionObserver not available; we may be in a Node environment, just render\n            this.hasBeenVisible = true\n        }\n    }\n\n    // Binds chart properties to global window title and URL. This should only\n    // ever be invoked from top-level JavaScript.\n    private bindToWindow(): void {\n        if (!this.grapherState.bindUrlToWindow) return\n\n        // There is a surprisingly considerable performance overhead to updating the url\n        // while animating, so we debounce to allow e.g. smoother timelines\n        const pushParams = (): void =>\n            setWindowQueryStr(queryParamsToStr(this.grapherState.changedParams))\n        const debouncedPushParams = _.debounce(pushParams, 100)\n\n        reaction(\n            () => this.grapherState.changedParams,\n            () => (this.debounceMode ? debouncedPushParams() : pushParams())\n        )\n\n        autorun(() => (document.title = this.grapherState.fullTitle))\n    }\n\n    @action.bound private setUpWindowResizeEventHandler(): void {\n        // Worth knowing for anything driving the page: taking a full-page screenshot in\n        // Chromium resizes the viewport to 1x1 and restores it ~175ms later, so this\n        // handler runs with window.innerWidth === 1 and, because the debounce below fires\n        // on the leading edge, redraws the chart in its narrow layout straight away. The\n        // redraw at the restored width is 400ms behind, which is long enough for the\n        // screenshot to catch a narrow chart inside a full-width figure.\n        // Screenshot tooling therefore has to pin the chart containers and freeze these\n        // dimensions before it captures.\n        const updateWindowDimensions = action((): void => {\n            this.grapherState.windowInnerWidth = window.innerWidth\n            this.grapherState.windowInnerHeight = window.innerHeight\n            this.grapherState.screenHeight = window.screen.height\n        })\n        const onResize = _.debounce(updateWindowDimensions, 400, {\n            leading: true,\n        })\n\n        if (typeof window !== \"undefined\") {\n            updateWindowDimensions()\n            window.addEventListener(\"resize\", onResize)\n            this.grapherState.disposers.push(() => {\n                window.removeEventListener(\"resize\", onResize)\n            })\n        }\n    }\n\n    private freezeToleranceNoticeWhileTimelineMoves(): void {\n        this.grapherState.disposers.push(\n            reaction(\n                () => this.grapherState.isTimelineInteractionActive,\n                this.grapherState.setToleranceNoticeFrozen\n            )\n        )\n    }\n\n    private clearFocusMode(): void {\n        // Make it easy to exit focus mode by clearing it when the selection\n        // or view changes. This is disabled in the admin to avoid clearing\n        // focus when authors are editing the chart\n        if (!this.grapherState.isAdmin) {\n            this.grapherState.disposers.push(\n                reaction(\n                    () => [\n                        this.grapherState.facetStrategy,\n                        this.grapherState.selection.selectedEntityNames,\n                        this.grapherState.activeTab,\n                    ],\n                    () => this.grapherState.focusArray.clear(),\n                    // Use structural comparison to detect changes in array\n                    // contents, not just reference\n                    { equals: comparer.structural }\n                )\n            )\n        }\n    }\n\n    override componentDidMount(): void {\n        exposeInstanceOnWindow(this, \"grapher\")\n\n        this.setUpIntersectionObserver()\n        this.setUpWindowResizeEventHandler()\n\n        this.bindToWindow()\n        this.bindKeyboardShortcuts()\n\n        this.clearFocusMode()\n        this.freezeToleranceNoticeWhileTimelineMoves()\n    }\n\n    private unbindKeyboardShortcutsFn?: () => void\n    private bindKeyboardShortcuts(): void {\n        if (\n            !this.grapherState.enableKeyboardShortcuts ||\n            this.unbindKeyboardShortcutsFn\n        )\n            return\n        const keybindings = Object.fromEntries(\n            this.keyboardShortcuts.map((shortcut) => [\n                shortcut.combo,\n                (event: KeyboardEvent): void => {\n                    event.preventDefault()\n                    event.stopPropagation()\n                    shortcut.fn()\n                    this.grapherState.analytics.logKeyboardShortcut(\n                        shortcut.title || \"\",\n                        shortcut.combo\n                    )\n                },\n            ])\n        )\n        this.unbindKeyboardShortcutsFn = tinykeys(window, keybindings)\n    }\n\n    private unbindKeyboardShortcuts(): void {\n        this.unbindKeyboardShortcutsFn?.()\n        this.unbindKeyboardShortcutsFn = undefined\n    }\n\n    override componentWillUnmount(): void {\n        this.unbindKeyboardShortcuts()\n        this.dispose()\n    }\n\n    override componentDidCatch(error: Error): void {\n        this.setError(error)\n        this.grapherState.analytics.logGrapherViewError(error)\n    }\n\n    debounceMode = false\n}\n","function normalize (strArray) {\n  var resultArray = [];\n  if (strArray.length === 0) { return ''; }\n\n  if (typeof strArray[0] !== 'string') {\n    throw new TypeError('Url must be a string. Received ' + strArray[0]);\n  }\n\n  // If the first part is a plain protocol, we combine it with the next part.\n  if (strArray[0].match(/^[^/:]+:\\/*$/) && strArray.length > 1) {\n    var first = strArray.shift();\n    strArray[0] = first + strArray[0];\n  }\n\n  // There must be two or three slashes in the file protocol, two slashes in anything else.\n  if (strArray[0].match(/^file:\\/\\/\\//)) {\n    strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1:///');\n  } else {\n    strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1://');\n  }\n\n  for (var i = 0; i < strArray.length; i++) {\n    var component = strArray[i];\n\n    if (typeof component !== 'string') {\n      throw new TypeError('Url must be a string. Received ' + component);\n    }\n\n    if (component === '') { continue; }\n\n    if (i > 0) {\n      // Removing the starting slashes for each component but the first.\n      component = component.replace(/^[\\/]+/, '');\n    }\n    if (i < strArray.length - 1) {\n      // Removing the ending slashes for each component but the last.\n      component = component.replace(/[\\/]+$/, '');\n    } else {\n      // For the last component we will combine multiple slashes to a single one.\n      component = component.replace(/[\\/]+$/, '/');\n    }\n\n    resultArray.push(component);\n\n  }\n\n  var str = resultArray.join('/');\n  // Each input component is now separated by a single slash except the possible first plain protocol part.\n\n  // remove trailing slash before parameters or hash\n  str = str.replace(/\\/(\\?|&|#[^!])/g, '$1');\n\n  // replace ? in parameters with &\n  var parts = str.split('?');\n  str = parts.shift() + (parts.length > 0 ? '?': '') + parts.join('&');\n\n  return str;\n}\n\nexport default function urlJoin() {\n  var input;\n\n  if (typeof arguments[0] === 'object') {\n    input = arguments[0];\n  } else {\n    input = [].slice.call(arguments);\n  }\n\n  return normalize(input);\n}\n","import {\n    ArchiveContext,\n    AssetMap,\n    MultipleOwidVariableDataDimensionsMap,\n    normalizeDescriptionKey,\n    OwidVariableDataMetadataDimensions,\n    OwidVariableWithSourceAndDimension,\n} from \"@ourworldindata/types\"\nimport {\n    fetchWithRetry,\n    getOwidDataFetchUserAgent,\n    readFromAssetMap,\n} from \"@ourworldindata/utils\"\nimport urljoin from \"url-join\"\n\n// Attach a descriptive User-Agent to our own server-side data API calls so\n// analytics can attribute them to OWID rather than counting them as anonymous\n// external traffic. See getOwidDataFetchUserAgent for details; it returns\n// undefined in the browser, so the shared client chart path is unaffected.\nconst dataFetchUserAgent = getOwidDataFetchUserAgent()\nconst dataFetchOptions: RequestInit | undefined = dataFetchUserAgent\n    ? { headers: { \"User-Agent\": dataFetchUserAgent } }\n    : undefined\n\nexport const getVariableDataRoute = (\n    dataApiUrl: string,\n    variableId: number,\n    { assetMap, noCache }: { assetMap?: AssetMap; noCache?: boolean } = {}\n): string => {\n    if (dataApiUrl.includes(\"v1/indicators\")) {\n        const filename = `${variableId}.data.json`\n        const url = readFromAssetMap(assetMap, {\n            path: filename,\n            // fetching from Data API, e.g. https://api.ourworldindata.org/v1/indicators/123.data.json\n            fallback: urljoin(dataApiUrl, filename),\n        })\n        return noCache ? `${url}?nocache` : url\n    } else {\n        throw new Error(`dataApiUrl format not supported: ${dataApiUrl}`)\n    }\n}\n\nexport const getVariableMetadataRoute = (\n    dataApiUrl: string,\n    variableId: number,\n    { assetMap, noCache }: { assetMap?: AssetMap; noCache?: boolean } = {}\n): string => {\n    if (dataApiUrl.includes(\"v1/indicators\")) {\n        const filename = `${variableId}.metadata.json`\n        const url = readFromAssetMap(assetMap, {\n            path: filename,\n            // fetching from Data API, e.g. https://api.ourworldindata.org/v1/indicators/123.metadata.json\n            fallback: urljoin(dataApiUrl, filename),\n        })\n        return noCache ? `${url}?nocache` : url\n    } else {\n        throw new Error(`dataApiUrl format not supported: ${dataApiUrl}`)\n    }\n}\n\nexport async function loadVariableDataAndMetadata(\n    variableId: number,\n    dataApiUrl: string,\n    options?: {\n        assetMap?: AssetMap\n        noCache?: boolean\n        loadMetadataOnly?: boolean\n    }\n): Promise<OwidVariableDataMetadataDimensions> {\n    const metadataPromise = fetchWithRetry(\n        getVariableMetadataRoute(dataApiUrl, variableId, options),\n        dataFetchOptions\n    )\n\n    if (options?.loadMetadataOnly) {\n        const metadataResponse = await metadataPromise\n        if (!metadataResponse.ok) throw new Error(metadataResponse.statusText)\n        const metadata: OwidVariableWithSourceAndDimension =\n            await metadataResponse.json()\n        // Metadata files written before the descriptionKey string migration\n        // hold arrays — normalize at the fetch boundary.\n        metadata.descriptionKey = normalizeDescriptionKey(\n            metadata.descriptionKey\n        )\n        // Return empty data when only metadata is requested\n        return { data: { values: [], entities: [], years: [] }, metadata }\n    }\n\n    const dataPromise = fetchWithRetry(\n        getVariableDataRoute(dataApiUrl, variableId, options),\n        dataFetchOptions\n    )\n    const [dataResponse, metadataResponse] = await Promise.all([\n        dataPromise,\n        metadataPromise,\n    ])\n    if (!dataResponse.ok) throw new Error(dataResponse.statusText)\n    if (!metadataResponse.ok) throw new Error(metadataResponse.statusText)\n    const data = await dataResponse.json()\n    const metadata: OwidVariableWithSourceAndDimension =\n        await metadataResponse.json()\n    metadata.descriptionKey = normalizeDescriptionKey(metadata.descriptionKey)\n    return { data, metadata }\n}\n\nexport async function loadVariablesDataSite(\n    variableIds: number[],\n    dataApiUrl: string,\n    archiveContext: ArchiveContext | undefined,\n    noCache?: boolean,\n    loadMetadataOnly?: boolean\n): Promise<MultipleOwidVariableDataDimensionsMap> {\n    const loadVariableDataPromises = variableIds.map((variableId) =>\n        loadVariableDataAndMetadata(variableId, dataApiUrl, {\n            assetMap:\n                archiveContext?.type === \"archive-page\"\n                    ? archiveContext.assets.runtime\n                    : undefined,\n            noCache,\n            loadMetadataOnly,\n        })\n    )\n    const variablesData: OwidVariableDataMetadataDimensions[] =\n        await Promise.all(loadVariableDataPromises)\n    const variablesDataMap = new Map(\n        variablesData.map((data) => [data.metadata.id, data])\n    )\n    return variablesDataMap\n}\n","import * as _ from \"lodash-es\"\nimport { OwidTable } from \"@ourworldindata/core-table\"\nimport {\n    ArchiveContext,\n    isIndicatorDimension,\n    OwidChartDimensionInterface,\n    OwidVariableDataMetadataDimensions,\n    SelectedEntityColors,\n} from \"@ourworldindata/utils\"\nimport { legacyToOwidTableAndDimensions } from \"./LegacyToOwidTable.js\"\nimport {\n    loadVariablesDataSite,\n    loadVariableDataAndMetadata,\n} from \"./loadVariable.js\"\nimport { toJS } from \"mobx\"\n\nexport type FetchInputTableForConfigFn = (args: {\n    dimensions?: OwidChartDimensionInterface[]\n    selectedEntityColors?: SelectedEntityColors\n    dataApiUrl: string\n    archiveContext?: ArchiveContext\n    noCache?: boolean\n    loadMetadataOnly?: boolean\n}) => Promise<OwidTable | undefined>\n\nexport const fetchInputTableForConfig: FetchInputTableForConfigFn = async (\n    args\n) => {\n    const indicatorDimensions = (args.dimensions ?? []).filter(\n        isIndicatorDimension\n    )\n    if (indicatorDimensions.length === 0) return undefined\n    const variables = indicatorDimensions.map((d) => d.variableId)\n    const variablesDataMap = await loadVariablesDataSite(\n        variables,\n        args.dataApiUrl,\n        args.archiveContext,\n        args.noCache,\n        args.loadMetadataOnly\n    )\n    const inputTable = legacyToOwidTableAndDimensions(\n        variablesDataMap,\n        indicatorDimensions,\n        args.selectedEntityColors\n    )\n\n    return inputTable\n}\n\nexport function getCachingInputTableFetcher(\n    dataApiUrl: string,\n    archiveContext: ArchiveContext | undefined,\n    noCache?: boolean,\n    loadMetadataOnly?: boolean\n): (\n    dimensions: OwidChartDimensionInterface[],\n    selectedEntityColors: SelectedEntityColors | undefined\n) => Promise<OwidTable | undefined> {\n    const cache: Map<number, OwidVariableDataMetadataDimensions> = new Map()\n    let previousDimensions: OwidChartDimensionInterface[] = []\n    let previousSelectedEntityColors: SelectedEntityColors | undefined =\n        undefined\n\n    return async (\n        dimensionsMobx: OwidChartDimensionInterface[],\n        selectedEntityColorsMobx: SelectedEntityColors | undefined\n    ) => {\n        // Check if dimensions have changed\n        const dimensions = dimensionsMobx.map((x) => toJS(x)) // Convert MobX observable to plain object\n        const selectedEntityColors = toJS(selectedEntityColorsMobx)\n\n        if (\n            _.isEqual(previousDimensions, dimensions) &&\n            _.isEqual(previousSelectedEntityColors, selectedEntityColors)\n        ) {\n            return undefined // No changes in dimensions\n        }\n        previousDimensions = dimensions\n        previousSelectedEntityColors = selectedEntityColors\n\n        const indicatorDimensions = dimensions.filter(isIndicatorDimension)\n        if (indicatorDimensions.length === 0) return undefined\n\n        const variables = indicatorDimensions.map((d) => d.variableId)\n        const variablesToFetch = variables.filter((v) => !cache.has(v))\n\n        if (variablesToFetch.length > 0) {\n            const fetchedData = await Promise.all(\n                variablesToFetch.map((variableId) =>\n                    loadVariableDataAndMetadata(variableId, dataApiUrl, {\n                        assetMap:\n                            archiveContext?.type === \"archive-page\"\n                                ? archiveContext.assets.runtime\n                                : undefined,\n                        noCache,\n                        loadMetadataOnly,\n                    })\n                )\n            )\n            fetchedData.forEach((data) => cache.set(data.metadata.id, data))\n        }\n\n        const variablesDataMap = new Map(\n            variables.map((v) => [v, cache.get(v)!])\n        )\n\n        const inputTable = legacyToOwidTableAndDimensions(\n            variablesDataMap,\n            indicatorDimensions,\n            selectedEntityColors\n        )\n\n        return inputTable\n    }\n}\n","import { lazy, regions } from \"@ourworldindata/utils\"\nimport { EntityName } from \"@ourworldindata/types\"\nimport * as R from \"remeda\"\n\nconst getEntityCodesToEntityNames: () => Record<string, string> = lazy(() =>\n    Object.fromEntries(regions.map(({ code, name }) => [code, name]))\n)\n\nconst getEntityNamesToEntityCodes = lazy(() =>\n    R.invert(getEntityCodesToEntityNames())\n)\n\nexport const codeToEntityName = (codeOrEntityName: string): EntityName => {\n    return getEntityCodesToEntityNames()[codeOrEntityName] ?? codeOrEntityName\n}\n\nexport const entityNameToCode = (entityName: EntityName): string => {\n    return getEntityNamesToEntityCodes()[entityName] ?? entityName\n}\n","import { EntityName, SeriesName } from \"@ourworldindata/types\"\nimport {\n    Url,\n    performUrlMigrations,\n    safeDecodeURIComponent,\n    UrlMigration,\n} from \"@ourworldindata/utils\"\nimport { codeToEntityName, entityNameToCode } from \"./EntityCodes\"\n\n/*\n * Migration #1: Switch from + to ~ delimited entities.\n *\n * Implemented: May 2020\n *\n * See PR discussion on how we decided on ~ (tilde): https://github.com/owid/owid-grapher/pull/446\n * And the initial issue (Facebook rewriting our URLs): https://github.com/owid/owid-grapher/issues/397\n *\n * In short:\n *\n * Facebook replaces `%20` in URLs with `+`. Before this migration we encoded\n * [\"North America\", \"South America\"] → \"North%20America+South%20America\".\n * Facebook would turn this into \"North+America+South+America\" making the delimiters and spaces\n * ambiguous.\n *\n * We chose ~ (tilde) because no entities existed in the database that contain that symbol, so the\n * existence of that symbol could be used to detect legacy URLs.\n *\n */\n\n// Todo: ensure EntityName never contains the v2Delimiter\n\nconst V1_DELIMITER = \"+\"\nexport const ENTITY_V2_DELIMITER = \"~\"\n\nconst isV1Param = (queryParam: string): boolean => {\n    // No legacy entities have a v2Delimiter in their name,\n    // so if a v2Delimiter is present we know it's a v2 link.\n    return !queryParam.includes(ENTITY_V2_DELIMITER)\n}\n\nconst entityNamesFromV1EncodedParam = (\n    encodedQueryParam: string\n): EntityName[] => {\n    // need to use still-encoded URL params because we need to\n    // distinguish between `+` and `%20` in legacy URLs\n    return encodedQueryParam.split(V1_DELIMITER).map(safeDecodeURIComponent)\n}\n\nconst entityNamesToV2Param = (entityNames: EntityName[]): string => {\n    // Always include a v2Delimiter in a v2 link. When decoding we will drop any empty strings.\n    if (entityNames.length === 1) return ENTITY_V2_DELIMITER + entityNames[0]\n    return entityNames.join(ENTITY_V2_DELIMITER)\n}\n\nconst entityNamesFromV2Param = (queryParam: string): EntityName[] => {\n    // Facebook turns %20 into +. v2 links will never contain a +, so we can safely replace all of them with %20.\n    return queryParam.split(ENTITY_V2_DELIMITER).filter((item) => item)\n}\n\nconst migrateV1Delimited: UrlMigration = (url) => {\n    const { country } = url.queryParams\n    if (country === undefined || !isV1Param(country)) return url\n\n    const encodedCountry = url.encodedQueryParams.country ?? \"\"\n    return url.updateQueryParams({\n        country: entityNamesToV2Param(\n            entityNamesFromV1EncodedParam(encodedCountry)\n        ),\n    })\n}\n\n/*\n * Migration #2: Drop dimension keys from selected entities.\n *\n * Implemented: March 2021\n *\n * When plotting multiple variables on a chart, it used to be possible to pick which\n * variable-entity pairs get plotted.\n *\n * For example, if you had a line chart with 3 variables: Energy consumption from Coal, Oil and Gas,\n * then you (as a user) could select individual variable-entity pairs to plot:\n *\n * - France - Coal (\"FRA-0\")\n * - France - Oil (\"FRA-1\")\n * - France - Gas (\"FRA-2\")\n * - ...\n *\n * The index of the dimension was appended to the entity (e.g. 0 for Coal).\n *\n * We dropped this feature in March 2021 in order to simplify the selection-handling logic, and it\n * was also, in most cases, not desirable to present users with variable-entity options.\n *\n */\n\n// Pattern for a entity name - number pair, where the entity name contains at least one non-digit character.\nconst LegacyDimensionRegex = /^(.*\\D.*)-\\d+$/\n\nconst injectEntityNamesInLegacyDimension = (\n    entityNames: EntityName[]\n): EntityName[] => {\n    // If an entity has the old name-dimension encoding, removing the dimension part and add it as\n    // a new selection. So USA-1 becomes USA.\n    const newNames: EntityName[] = []\n    entityNames.forEach((entityName) => {\n        newNames.push(entityName)\n        if (LegacyDimensionRegex.test(entityName)) {\n            const nonDimensionName = entityName.replace(\n                LegacyDimensionRegex,\n                \"$1\"\n            )\n            newNames.push(nonDimensionName)\n        }\n    })\n    return newNames\n}\n\nconst migrateLegacyDimensionPairs: UrlMigration = (url) => {\n    const { country } = url.queryParams\n    if (country) {\n        return url.updateQueryParams({\n            country: entityNamesToV2Param(\n                injectEntityNamesInLegacyDimension(\n                    entityNamesFromV2Param(country)\n                )\n            ),\n        })\n    }\n    return url\n}\n\n/*\n * Combining all migrations\n */\n\nconst urlMigrations: UrlMigration[] = [\n    migrateV1Delimited,\n    migrateLegacyDimensionPairs,\n]\n\nexport const migrateSelectedEntityNamesParam: UrlMigration = (\n    url: Url\n): Url => {\n    return performUrlMigrations(urlMigrations, url)\n}\n\n/*\n * Accessors\n */\n\nexport const getEntityNamesParam = (\n    param: string | undefined\n): EntityName[] | undefined => {\n    if (param === undefined) return undefined\n    return entityNamesFromV2Param(param).map(codeToEntityName)\n}\n\nexport const getSelectedEntityNamesParam = (\n    country: string | undefined\n): EntityName[] | undefined => {\n    // Expects an already-migrated param as input\n    return getEntityNamesParam(country)\n}\n\nexport const generateSelectedEntityNamesParam = (\n    entityNames: EntityName[]\n): string => entityNamesToV2Param(entityNames.map(entityNameToCode))\n\nexport const setSelectedEntityNamesParam = (\n    url: Url,\n    entityNames: EntityName[] | undefined\n): Url => {\n    // Expects an already-migrated URL as input\n    return url.updateQueryParams({\n        country: entityNames\n            ? generateSelectedEntityNamesParam(entityNames)\n            : undefined,\n    })\n}\n\n/*\n * Focused series names\n *\n * A focused series name is one of:\n * (i) an entity name (common case)\n * (ii) an indicator name (less common, but not rare)\n * (iii) a combination of both, typically represented as 'entityName – indicatorName' (rare)\n *\n * Parsing and serializing focused series names for the URL is done using utility\n * functions that have originally been written for entity names, so that the same\n * delimiter is used and entity names are mapped to their codes if possible. Note\n * that stand-alone entity names are mapped to their codes (case i), while entity\n * names that are a substring of a series name are not (case iii).\n */\n\nexport const getFocusedSeriesNamesParam = (\n    queryParam: string | undefined\n): SeriesName[] | undefined => {\n    return getEntityNamesParam(queryParam)\n}\n\nexport const generateFocusedSeriesNamesParam = (\n    seriesNames: SeriesName[]\n): string => entityNamesToV2Param(seriesNames.map(entityNameToCode))\n","import {\n    QueryParams,\n    Url,\n    UrlMigration,\n    performUrlMigrations,\n} from \"@ourworldindata/utils\"\nimport { migrateSelectedEntityNamesParam } from \"./EntityUrlBuilder\"\n\nexport const grapherUrlMigrations: UrlMigration[] = [\n    (url: Url): Url => {\n        const { year, time } = url.queryParams\n        if (!year) return url\n        return url.updateQueryParams({\n            year: undefined,\n            time: time ?? year,\n        })\n    },\n    migrateSelectedEntityNamesParam,\n]\n\nexport const legacyToCurrentGrapherUrl = (url: Url): Url =>\n    performUrlMigrations(grapherUrlMigrations, url)\n\nexport const legacyToCurrentGrapherQueryParams = (\n    queryStr: string\n): QueryParams => {\n    const url = Url.fromQueryStr(queryStr)\n    return legacyToCurrentGrapherUrl(url).queryParams\n}\n","import {\n    latestSchemaVersion,\n    outdatedSchemaVersions,\n} from \"../defaultGrapherConfig\"\n\nconst allSchemaVersions = [...outdatedSchemaVersions, latestSchemaVersion]\n\ntype LatestSchemaVersion = typeof latestSchemaVersion\nexport type OutdatedSchemaVersion = (typeof outdatedSchemaVersions)[number]\nexport type SchemaVersion = OutdatedSchemaVersion | LatestSchemaVersion\n\ntype Schema =\n    `https://files.ourworldindata.org/schemas/grapher-schema.${SchemaVersion}.json`\n\nexport type UntypedGrapherConfig = Record<string, any>\nexport type MigratableConfig = UntypedGrapherConfig & {\n    $schema: Schema\n}\n\nconst schemaVersionRegex =\n    /https:\\/\\/files\\.ourworldindata\\.org\\/schemas\\/grapher-schema\\.(?<version>\\d{3})\\.json/m\n\nconst isValidSchemaVersion = (version: string): version is SchemaVersion =>\n    allSchemaVersions.includes(version as any)\n\nexport function getSchemaVersion(config: MigratableConfig): SchemaVersion\nexport function getSchemaVersion(\n    config: UntypedGrapherConfig\n): SchemaVersion | null\nexport function getSchemaVersion(\n    config: UntypedGrapherConfig | MigratableConfig\n): SchemaVersion | null {\n    if (typeof config.$schema !== \"string\") return null\n    const version = config.$schema.match(schemaVersionRegex)?.groups?.version\n    if (!version || !isValidSchemaVersion(version)) return null\n    return version\n}\n\nexport function createSchemaForVersion(version: SchemaVersion): Schema {\n    return `https://files.ourworldindata.org/schemas/grapher-schema.${version}.json`\n}\n\nexport const isLatestVersion = (\n    version: SchemaVersion\n): version is LatestSchemaVersion => version === latestSchemaVersion\n\nexport function getNextSchemaVersion(\n    version: OutdatedSchemaVersion\n): SchemaVersion {\n    return allSchemaVersions[allSchemaVersions.indexOf(version) + 1]\n}\n\nexport const isOutdatedVersion = (\n    version: SchemaVersion\n): version is OutdatedSchemaVersion => !isLatestVersion(version)\n\nexport const hasKnownSchemaVersion = (\n    config: UntypedGrapherConfig\n): config is MigratableConfig => getSchemaVersion(config) !== null\n","// Schema migrations\n//\n// To add a migration: write `migrateFromNNNToMMM`, which rewrites a config's content from\n// version NNN to MMM and nothing else, then add its `\"NNN\"` entry to `MIGRATION_STEPS`.\n\nimport {\n    type MigratableConfig,\n    createSchemaForVersion,\n    getNextSchemaVersion,\n    type OutdatedSchemaVersion,\n    type SchemaVersion,\n} from \"./helpers\"\ntype MigrationStep = (config: MigratableConfig) => void\n\n// see https://github.com/owid/owid-grapher/commit/26f2a0d1790c71bdda7e12f284ca552945d2f6ef\nconst migrateFrom001To002 = (config: MigratableConfig): void => {\n    delete config.selectedData\n}\n\n// see https://github.com/owid/owid-grapher/commit/4525ad81fb7064709ffab83677a8b0354b324dfb\nconst migrateFrom002To003 = (config: MigratableConfig): void => {\n    if (config.hideTitleAnnotation !== undefined) {\n        const hide = config.hideTitleAnnotation\n        config.hideAnnotationFieldsInTitle = {\n            entity: hide,\n            time: hide,\n            changeInPrefix: hide,\n        }\n    }\n    delete config.hideTitleAnnotation\n}\n\n// see https://github.com/owid/owid-grapher/commit/1776721253cf61d7f1e24ebadeaf7a7ca2f43ced\nconst migrateFrom003To004 = (config: MigratableConfig): void => {\n    delete config.data\n}\n\n// see https://github.com/owid/owid-grapher/commit/1d67de3174764a413bc5055fbdf34efb2b49e079\nconst migrateFrom004To005 = (config: MigratableConfig): void => {\n    delete config.hideLinesOutsideTolerance\n}\n\nconst migrateFrom005To006 = (config: MigratableConfig): void => {\n    const { type, hasChartTab } = config\n\n    if (hasChartTab === false) config.chartTypes = []\n    else if (type !== undefined) config.chartTypes = [type]\n\n    delete config.type\n    delete config.hasChartTab\n}\n\nconst migrateFrom006To007 = (config: MigratableConfig): void => {\n    // rename map.projection to map.region\n    if (config.map?.projection) {\n        config.map.region = config.map.projection\n        delete config.map.projection\n    }\n}\n\nconst migrateFrom007To008 = (config: MigratableConfig): void => {\n    // remove colorScale.customNumericMinValue, merge it into colorScale.customNumericValues\n    if (config.map?.colorScale?.customNumericValues) {\n        config.map.colorScale.customNumericValues = [\n            config.map.colorScale.customNumericMinValue ?? 0,\n            ...config.map.colorScale.customNumericValues,\n        ]\n    }\n    if (config.map?.colorScale?.customNumericMinValue !== undefined) {\n        delete config.map.colorScale.customNumericMinValue\n    }\n\n    if (config.colorScale?.customNumericValues) {\n        config.colorScale.customNumericValues = [\n            config.colorScale.customNumericMinValue ?? 0,\n            ...config.colorScale.customNumericValues,\n        ]\n    }\n    if (config.colorScale?.customNumericMinValue !== undefined) {\n        delete config.colorScale.customNumericMinValue\n    }\n}\n\nconst migrateFrom008To009 = (config: MigratableConfig): void => {\n    if ((config.map?.colorScale?.binningStrategy ?? \"manual\") !== \"manual\") {\n        config.map.colorScale.binningStrategy = \"auto\"\n    }\n\n    if (config.map?.colorScale?.binningStrategyBinCount !== undefined) {\n        delete config.map.colorScale.binningStrategyBinCount\n    }\n\n    if ((config.colorScale?.binningStrategy ?? \"manual\") !== \"manual\") {\n        config.colorScale.binningStrategy = \"auto\"\n    }\n\n    if (config.colorScale?.binningStrategyBinCount !== undefined) {\n        delete config.colorScale.binningStrategyBinCount\n    }\n}\n\nconst migrateFrom009To010 = (config: MigratableConfig): void => {\n    if (config.hideLegend !== undefined)\n        config.hideSeriesLabels = config.hideLegend\n    delete config.hideLegend\n}\n\nconst migrateFrom010To011 = (config: MigratableConfig): void => {\n    // Drop the deprecated yearIsDay flag in favor of timeInterval\n    for (const dimension of config.dimensions ?? []) {\n        const display = dimension.display\n        if (!display) continue\n        if (\n            display.yearIsDay === true &&\n            (display.timeInterval === undefined ||\n                display.timeInterval === null)\n        )\n            display.timeInterval = \"day\"\n        delete display.yearIsDay\n    }\n}\n\nconst migrateFrom011To012 = (config: MigratableConfig): void => {\n    // The Gates Ventures logo option was removed; fall back to the OWID logo.\n    // Set it explicitly rather than deleting the key, so a child that overrode\n    // its parent's logo keeps overriding it\n    if (config.logo === \"gv+owid\") config.logo = \"owid\"\n}\n\nconst MIGRATION_STEPS: Record<OutdatedSchemaVersion, MigrationStep> = {\n    \"001\": migrateFrom001To002,\n    \"002\": migrateFrom002To003,\n    \"003\": migrateFrom003To004,\n    \"004\": migrateFrom004To005,\n    \"005\": migrateFrom005To006,\n    \"006\": migrateFrom006To007,\n    \"007\": migrateFrom007To008,\n    \"008\": migrateFrom008To009,\n    \"009\": migrateFrom009To010,\n    \"010\": migrateFrom010To011,\n    \"011\": migrateFrom011To012,\n}\n\n/** Applies the step for `version`, restamps `$schema` and returns the new version */\nexport const runMigration = (\n    config: MigratableConfig,\n    version: OutdatedSchemaVersion\n): SchemaVersion => {\n    MIGRATION_STEPS[version](config)\n    const nextVersion = getNextSchemaVersion(version)\n    config.$schema = createSchemaForVersion(nextVersion)\n    return nextVersion\n}\n","import * as _ from \"lodash-es\"\nimport { GrapherInterface } from \"@ourworldindata/types\"\n\nimport { defaultGrapherConfig } from \"../defaultGrapherConfig\"\nimport {\n    hasKnownSchemaVersion,\n    getSchemaVersion,\n    isOutdatedVersion,\n    type UntypedGrapherConfig,\n} from \"./helpers\"\nimport { runMigration } from \"./migrations\"\nimport * as Sentry from \"@sentry/browser\"\n\n/**\n * Attempts to migrate a config to the latest schema version.\n *\n * An outdated config is migrated to the latest version by applying a series of\n * predefined migrations. We rely on the schema version to determine if a config\n * is outdated.\n *\n * Note that the given config is not actually validated against the schema!\n */\nexport const migrateGrapherConfigToLatestVersion = (\n    config: UntypedGrapherConfig\n): GrapherInterface => {\n    const clone = _.cloneDeep(config)\n    if (hasKnownSchemaVersion(clone)) {\n        let version = getSchemaVersion(clone)\n        while (isOutdatedVersion(version))\n            version = runMigration(clone, version)\n        return clone\n    }\n\n    if (clone.$schema === undefined) return clone\n\n    /**\n     * If the schema version is not outdated and not the latest, we have most likely received a\n     * config from a future version of the codebase, that the client code is not yet aware of.\n     * That's not perfect, but in reality, most schema changes are benign changes,\n     * and rendering the config with the current code will result in a better user experience\n     * than just throwing an error and grapher not rendering at all without any explanation.\n     * - @marcelgerber, 2025-07-02\n     */\n    const message = `Received grapher config with unsupported schema ${config.$schema}; this code expects schema ${defaultGrapherConfig.$schema}.`\n    console.warn(message)\n    Sentry.captureMessage(message, { level: \"warning\" })\n\n    return clone\n}\n","import { sleep } from \"@ourworldindata/utils\"\n\nexport const EMBEDDED_FONTS_CSS = \"/fonts/embedded.css\"\nexport const IMPORT_FONTS_REGEX = /@import url\\([^)]*?fonts\\.css\\)/\n\nexport interface GrapherExport {\n    url: string\n    blob: Blob\n    svgUrl: string\n    svgBlob: Blob\n}\n\nexport type GrapherRasterizeFn = (options: {\n    includeDetails: boolean\n}) => Promise<GrapherExport>\n\nexport class StaticChartRasterizer {\n    svg: string\n    width: number\n    height: number\n    format: string\n    canvas: Promise<HTMLCanvasElement>\n    density = 4 // overscaling factor for bitmap generation\n    embeddedFonts = \"\"\n\n    constructor(\n        svg: string,\n        width: number,\n        height: number,\n        format = \"image/png\"\n    ) {\n        this.svg = svg\n        this.width = width\n        this.height = height\n        this.format = format\n\n        // The canvas used for rendering is locked behind a promise that won't resolve\n        // until the embedded fonts css has been loaded and the font faces initialized\n        const canvasElt = document.createElement(\"canvas\")\n        this.canvas = new Promise((resolve) => {\n            fetch(EMBEDDED_FONTS_CSS)\n                .then(async (data) => {\n                    this.embeddedFonts = await data.text()\n                    await this.preloadFonts(canvasElt)\n                    resolve(canvasElt)\n                })\n                .catch((err) => {\n                    console.error(JSON.stringify(err))\n                    resolve(canvasElt)\n                })\n        })\n    }\n\n    private async preloadFonts(canvas: HTMLCanvasElement): Promise<void> {\n        // Even though the font data is inlined in the font-face definitions, the browser may not\n        // have fully loaded the fonts by the time it tries to render to canvas (in which case any\n        // text drawn in non-loaded fonts will simply be invisible). This method will block rendering\n        // for up to ~3.25s (with decelerating polling) or until it verifies that all the fonts in\n        // the `faces` array are ready for use, whichever comes first.\n        const MAX_RETRIES = 10,\n            RETRY_DELAY_MS = 100\n\n        const faces = [\n            { font: \"40px Lato\", offset: 17 },\n            { font: \"bold 40px Lato\", offset: 17 },\n            { font: \"600 75px 'Playfair Display'\", offset: 27 },\n        ]\n\n        for (let retry = 0; retry < MAX_RETRIES; retry++) {\n            const ctx = canvas.getContext(\"2d\", {\n                alpha: false,\n                willReadFrequently: true, // optimizes frequent calls to `getImageData` below\n            })!\n            const outcomes: boolean[] = []\n\n            for (const { font, offset } of faces) {\n                // draw a bullet character that's big enough to fill the entire 10×10 canvas\n                const testBlob = blobFromSVG(\n                        `<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" style=\"font:${font};\" width=\"10\" height=\"10\" viewBox=\"0 0 10 10\">\n                         <defs><style>${this.embeddedFonts}</style></defs>\n                         <text x=\"5.0\" y=\"${offset}.0\" text-anchor=\"middle\" fill=\"white\">•</text>\n                         </svg>`\n                    ),\n                    testUrl = await urlFromBlob(testBlob),\n                    testImage = await imageFromUrl(testUrl)\n\n                canvas.width = 10\n                canvas.height = 10\n                ctx.drawImage(testImage, 0, 0)\n\n                // ensure that all the pixels have been painted opaque white; if the font hasn't loaded yet,\n                // nothing will be drawn and the pixels will all be transparent black\n                const pixels = ctx.getImageData(0, 0, 10, 10)?.data ?? [],\n                    didDraw = pixels.length && pixels.every((ch) => ch === 255)\n                outcomes.push(!!didDraw)\n            }\n\n            // check that all the fonts rendered correctly and exit if so\n            if (outcomes.every((result) => result)) return\n\n            // otherwise, keep retrying until we reach the time limit\n            console.warn(\n                \"preloading fonts...\",\n                faces.filter((_f, i) => !outcomes[i]).map((f) => f.font)\n            )\n            await sleep(RETRY_DELAY_MS + (retry * RETRY_DELAY_MS) / 2)\n        }\n\n        // if the function didn't return from within the loop, the embedded fonts aren't usable\n        // so don't try to insert them when rendering the chart\n        this.embeddedFonts = \"\"\n    }\n\n    async render(): Promise<GrapherExport> {\n        // await the canvas before doing anything else to make sure .preloadFonts() has completed\n        const canvas = await this.canvas,\n            ctx = canvas.getContext(\"2d\", { alpha: false })!\n\n        // create an Image object using the chart's svg, but with embedded fonts swapped in for\n        // its external `fonts.css` stylesheet\n        const svgImage = await imageFromUrl(\n            await urlFromBlob(\n                blobFromSVG(\n                    this.svg.replace(IMPORT_FONTS_REGEX, this.embeddedFonts)\n                )\n            )\n        )\n\n        // render the bitmap version\n        const { width, height, density, format } = this\n        canvas.width = width * density\n        canvas.height = height * density\n        ctx.imageSmoothingEnabled = false\n        ctx.setTransform(density, 0, 0, density, 0, 0)\n        ctx.drawImage(svgImage, 0, 0)\n\n        // package the svg version\n        const svgBlob = blobFromSVG(this.svg),\n            svgUrl = await urlFromBlob(svgBlob)\n\n        return new Promise((res, rej) => {\n            try {\n                const url = canvas.toDataURL(format)\n                canvas.toBlob((blob) => {\n                    if (blob) res({ url, blob, svgUrl, svgBlob })\n                    else rej(new Error(\"Failed to generate bitmap blob\"))\n                })\n            } catch (err) {\n                rej(err)\n            }\n        })\n    }\n}\n\n//\n// Format converters\n//\n\nconst blobFromSVG = (svg: string): Blob =>\n    new Blob([svg], { type: \"image/svg+xml;charset=utf-8\" })\n\nconst urlFromBlob = (blob: Blob): Promise<string> =>\n    new Promise((res, rej) => {\n        const reader = new FileReader()\n        reader.onload = (ev: any): void => {\n            res(ev.target.result as string)\n        }\n        reader.onerror = rej\n        reader.readAsDataURL(blob)\n    })\n\nconst imageFromUrl = (url: string): Promise<HTMLImageElement> =>\n    new Promise((res, rej) => {\n        const image = new Image()\n        image.onload = (): void => res(image)\n        image.onerror = rej\n        image.src = url\n    })\n","import { GrapherState } from \"../core/GrapherState\"\nimport { computed, makeObservable } from \"mobx\"\nimport { ChartDimension } from \"./ChartDimension\"\nimport { DimensionProperty } from \"@ourworldindata/utils\"\n\nexport class DimensionSlot {\n    private readonly grapherState: GrapherState\n    property: DimensionProperty\n    constructor(grapher: GrapherState, property: DimensionProperty) {\n        makeObservable(this)\n        this.grapherState = grapher\n        this.property = property\n    }\n\n    @computed get name(): string {\n        const names: Record<DimensionProperty, string> = {\n            y: \"Y axis\",\n            x: \"X axis\",\n            size: \"Size\",\n            color: \"Color\",\n            table: \"Table\",\n        }\n\n        return (names as any)[this.property] || \"\"\n    }\n\n    @computed get allowMultiple(): boolean {\n        return (\n            this.property === DimensionProperty.y &&\n            this.grapherState.supportsMultipleYColumns\n        )\n    }\n\n    @computed get isOptional(): boolean {\n        return this.allowMultiple\n    }\n\n    @computed get dimensions(): ChartDimension[] {\n        return this.grapherState.dimensions.filter(\n            (d) => d.property === this.property\n        )\n    }\n}\n","import {\n    EventCategory,\n    GrapherErrorAction,\n    type EntitySelectorEvent,\n    type GrapherImageDownloadEvent,\n    type GrapherInteractionEvent,\n    type GrapherAnalyticsContext,\n    type GAEvent,\n} from \"@ourworldindata/types\"\n\nconst DEBUG = false\n\ntype GAEventWithClear = GAEvent & { _clear: boolean }\n\n// Add type information for dataLayer global provided by Google Tag Manager\ntype WindowWithDataLayer = Window & {\n    dataLayer?: (GAEventWithClear | GAConsent)[]\n}\ndeclare const window: WindowWithDataLayer\n\n// taken from https://github.com/DefinitelyTyped/DefinitelyTyped/blob/de66435d18fbdb2684947d16b5cd3a77f876324c/types/gtag.js/index.d.ts#L151-L156\ninterface GAConsentParams {\n    ad_storage?: \"granted\" | \"denied\" | undefined\n    analytics_storage?: \"granted\" | \"denied\" | undefined\n    wait_for_update?: number | undefined\n    region?: string[] | undefined\n}\n\ntype GAConsent = [\"consent\", \"default\" | \"update\", GAConsentParams]\n\n// Note: consent-based blocking dealt with at the Google Tag Manager level.\n// Events are discarded if consent not given.\nexport class GrapherAnalytics {\n    constructor(environment: string = \"\") {\n        this.isDev = environment === \"development\"\n    }\n\n    private readonly isDev: boolean\n\n    logGrapherView(\n        slug: string,\n        ctx?: { viewConfigId?: string; narrativeChartName?: string }\n    ): void {\n        const { path, pathNext } = splitPathForGA4(`/grapher/${slug}`)\n        this.logToGA({\n            event: EventCategory.GrapherView,\n            grapherPath: path,\n            grapherPathNext: pathNext,\n            viewConfigId: ctx?.viewConfigId,\n            narrativeChartName: ctx?.narrativeChartName,\n        })\n    }\n\n    logGrapherViewError(error: Error): void {\n        this.logToGA({\n            event: EventCategory.GrapherError,\n            eventAction: GrapherErrorAction.GrapherViewError,\n            eventContext: error.message,\n        })\n    }\n\n    logEntitiesNotFoundError(entities: string[]): void {\n        this.logToGA({\n            event: EventCategory.GrapherError,\n            eventAction: GrapherErrorAction.EntitiesNotFound,\n            eventContext: JSON.stringify(entities),\n        })\n    }\n\n    logExplorerView(\n        slug: string,\n        view: Record<string, string>,\n        viewConfigId?: string\n    ): void {\n        this.logToGA({\n            event: EventCategory.ExplorerView,\n            explorerPath: `/explorers/${slug}`,\n            explorerView: JSON.stringify(view),\n            viewConfigId,\n        })\n    }\n\n    /** Logs events for the explorer's entity selector */\n    logEntityPickerEvent(\n        action: EntitySelectorEvent,\n        note?: string,\n        viewConfigId?: string\n    ): void {\n        this.logToGA({\n            event: EventCategory.ExplorerCountrySelector,\n            eventAction: action,\n            eventContext: note,\n            viewConfigId,\n        })\n    }\n\n    /** Logs events for Grapher's entity selector */\n    logEntitySelectorEvent(\n        action: EntitySelectorEvent,\n        ctx: GrapherAnalyticsContext & { target?: string }\n    ): void {\n        this.logToGA({\n            ...grapherAnalyticsContextToGAEventFields(ctx),\n            event: EventCategory.GrapherEntitySelector,\n            eventAction: action,\n            eventTarget: ctx.target,\n        })\n    }\n\n    logGrapherImageDownloadEvent(\n        action: GrapherImageDownloadEvent,\n        ctx: GrapherAnalyticsContext & { context?: Record<string, any> }\n    ): void {\n        this.logToGA({\n            ...grapherAnalyticsContextToGAEventFields(ctx),\n            event: EventCategory.GrapherClick,\n            eventAction: action,\n            eventContext: ctx.context ? JSON.stringify(ctx.context) : undefined,\n        })\n    }\n\n    logGrapherInteractionEvent(\n        action: GrapherInteractionEvent,\n        ctx: GrapherAnalyticsContext & { target?: string }\n    ): void {\n        this.logToGA({\n            ...grapherAnalyticsContextToGAEventFields(ctx),\n            event: EventCategory.GrapherHover,\n            eventAction: action,\n            eventTarget: ctx.target,\n        })\n    }\n\n    logGrapherClick(\n        action: string = \"unknown-action\",\n        ctx: {\n            label?: string\n            grapherUrl?: string\n            narrativeChartName?: string\n            viewConfigId?: string\n        }\n    ): void {\n        const { path, pathNext } = splitPathForGA4(\n            getPathname(ctx.grapherUrl) ?? \"\"\n        )\n        this.logToGA({\n            event: EventCategory.GrapherClick,\n            eventAction: action,\n            eventTarget: ctx.label,\n            grapherPath: path,\n            grapherPathNext: pathNext,\n            narrativeChartName: ctx.narrativeChartName,\n            viewConfigId: ctx.viewConfigId,\n        })\n    }\n\n    logSiteClick(action: string = \"unknown-action\", label?: string): void {\n        this.logToGA({\n            event: EventCategory.SiteClick,\n            eventAction: action,\n            eventTarget: label,\n        })\n    }\n\n    logSiteFormSubmit(\n        action: \"newsletter-subscribe\" | \"donate\",\n        label?: string\n    ): void {\n        this.logToGA({\n            event: EventCategory.SiteFormSubmit,\n            eventAction: action,\n            eventTarget: label,\n        })\n    }\n\n    logKeyboardShortcut(shortcut: string, combo: string): void {\n        this.logToGA({\n            event: EventCategory.KeyboardShortcut,\n            eventAction: shortcut,\n            eventContext: combo,\n        })\n    }\n\n    protected logToGA(event: GAEvent): void {\n        if (DEBUG && this.isDev) {\n            // eslint-disable-next-line no-console\n            console.log(\"Analytics.logToGA\", event)\n            return\n        }\n        if (typeof window !== \"undefined\") {\n            // _clear only prevents GTM's recursive merge FOR THE KEYS IN THIS\n            // PUSH: they overwrite the data model's values instead of\n            // deep-merging into them. It does NOT remove other keys from the\n            // model — values pushed earlier (e.g. the per-request asn/as_org\n            // push) survive, and so does a stale key from a previous event if\n            // this event omits it. Since GAEvent fields are flat scalars\n            // (which always overwrite), the flag only matters if event fields\n            // ever become objects/arrays. Verified against the live container:\n            // https://github.com/owid/owid-grapher/pull/6791#discussion_r3620246248\n            // See also https://www.simoahava.com/analytics/two-simple-data-model-tricks/\n            // and docs/google-tag-manager.md.\n            window.dataLayer?.push({ ...event, _clear: true })\n        }\n    }\n\n    updateGAConsentSettings(consent: GAConsentParams): void {\n        function pushToDataLayer(..._args: any): void {\n            // Google Tag Manager is super weird here: it will not accept a normal array or object\n            // being pushed to dataLayer, it absolutely has to be an `Arguments` object.\n            // see https://stackoverflow.com/q/60400130/10670163\n\n            window.dataLayer?.push(arguments as unknown as GAConsent)\n        }\n        pushToDataLayer(\"consent\", \"update\", consent)\n    }\n}\n\nfunction getPathname(url?: string): string | undefined {\n    // GA4 trims metadata fields down to 100 characters, so we want to be concise and only send\n    // the pathname, e.g. `/grapher/life-expectancy` or `/explorers/migration`\n    if (url === undefined) return undefined\n\n    try {\n        const urlObj = new URL(url)\n        return urlObj.pathname\n    } catch {\n        // Invalid URL, return undefined\n        return undefined\n    }\n}\n// GA4 truncates all string parameters at 100 characters.\n// If path exceeds this, split into path (first 100 chars) and pathNext (chars 101-200)\nexport function splitPathForGA4(path: string): {\n    path: string\n    pathNext?: string\n} {\n    if (path.length <= 100) return { path }\n    return { path: path.slice(0, 100), pathNext: path.slice(100) }\n}\n\nfunction grapherAnalyticsContextToGAEventFields(\n    ctx: GrapherAnalyticsContext\n): Partial<GAEvent> {\n    const fullPath = ctx.slug ? `/grapher/${ctx.slug}` : undefined\n    const { path, pathNext } = splitPathForGA4(fullPath ?? \"\")\n    return {\n        grapherPath: path,\n        grapherPathNext: pathNext,\n        viewConfigId: ctx.viewConfigId,\n        narrativeChartName: ctx.narrativeChartName,\n    }\n}\n","import {\n    FacetAxisDomain,\n    GrapherInterface,\n    GrapherQueryParams,\n    TimeBoundValueStr,\n} from \"@ourworldindata/types\"\nimport {\n    generateFocusedSeriesNamesParam,\n    generateSelectedEntityNamesParam,\n} from \"./EntityUrlBuilder.js\"\nimport { match } from \"ts-pattern\"\nimport { GrapherState } from \"./GrapherState.js\"\nimport * as R from \"remeda\"\nimport {\n    DEFAULT_GLOBE_ROTATION,\n    DEFAULT_GLOBE_ZOOM,\n} from \"../mapCharts/MapChartConstants.js\"\n\n// This function converts a (potentially partial) GrapherInterface to the query params this translates to.\n// This is helpful for when we have a patch config to a parent chart, and we want to know which query params we need to get the parent chart as close as possible to the patched child chart.\n// Note that some settings cannot be set in the config, so they are always set to undefined.\nexport const grapherConfigToQueryParams = (\n    config: GrapherInterface\n): GrapherQueryParams => {\n    const { minTime, maxTime } = config // can be a number, or \"earliest\" or \"latest\"\n\n    // Note that this code will never format dates in yyyy-mm-dd format.\n    // For us to know that we're working with daily data, we need to have a DayColumn instance, which we only have when we have a grapher instance.\n    // Instead, we just serialize a date as a number - which also works fine for query params.\n    const timeParam =\n        minTime === maxTime\n            ? minTime // This case also covers the case where both are undefined, in which case the result is also undefined\n            : `${minTime ?? TimeBoundValueStr.unboundedLeft}..${maxTime ?? TimeBoundValueStr.unboundedRight}`\n\n    const paramsRaw: Record<\n        keyof GrapherQueryParams,\n        string | number | boolean | undefined\n    > = {\n        tab: config.tab,\n        xScale: config.xAxis?.scaleType,\n        yScale: config.yAxis?.scaleType,\n        stackMode: config.stackMode,\n        zoomToSelection: config.zoomToSelection,\n        endpointsOnly: config.compareEndPointsOnly,\n        time: timeParam,\n        region: config.map?.region,\n        facet: config.selectedFacetStrategy,\n        uniformYAxis: match(config.yAxis?.facetDomain)\n            .with(FacetAxisDomain.shared, () => 0)\n            .with(FacetAxisDomain.independent, () => 1)\n            .with(undefined, () => undefined)\n            .exhaustive(),\n        showNoDataArea: match(config.showNoDataArea)\n            .when(\n                (s) => typeof s === \"boolean\",\n                (s) => Number(s) // 1 or 0\n            )\n            .with(undefined, () => undefined)\n            .exhaustive(),\n        country: config.selectedEntityNames\n            ? generateSelectedEntityNamesParam(config.selectedEntityNames)\n            : undefined,\n        focus: config.focusedSeriesNames\n            ? generateFocusedSeriesNamesParam(config.focusedSeriesNames)\n            : undefined,\n        mapSelect: config.map?.selectedEntityNames\n            ? generateSelectedEntityNamesParam(config.map.selectedEntityNames)\n            : undefined,\n        globe: config.map?.globe?.isActive ? 1 : undefined,\n        globeRotation: configGlobeRotationToQueryParam(\n            config.map?.globe?.rotation\n        ),\n        globeZoom: configGlobeZoomToQueryParam(config.map?.globe?.zoom),\n        peerCountries: config.peerCountryStrategy,\n\n        // These cannot be specified in config, so we always set them to undefined\n        showSelectionOnlyInTable: undefined,\n        overlay: undefined,\n        tableFilter: undefined,\n        tableSearch: undefined,\n    }\n\n    // Drop undefined values and convert all to string\n    const params = Object.entries(paramsRaw).reduce(\n        (acc, [currKey, currVal]) => {\n            if (currVal !== undefined)\n                acc[currKey as keyof GrapherQueryParams] = currVal.toString()\n            return acc\n        },\n        {} as GrapherQueryParams\n    )\n    return params\n}\n\nexport const grapherObjectToQueryParams = (\n    grapher: GrapherState\n): GrapherQueryParams => {\n    const params: Record<\n        Exclude<\n            keyof GrapherQueryParams,\n            // Excluded because it's deprecated\n            | \"showSelectionOnlyInTable\"\n            // Excluded because it shouldn't be persisted in the URL\n            | \"peerCountries\"\n        >,\n        string | undefined\n    > = {\n        tab: grapher.mapGrapherTabToQueryParam(grapher.activeTab),\n        xScale: grapher.xAxis?.scaleType,\n        yScale: grapher.yAxis?.scaleType,\n        stackMode: grapher.stackMode,\n        zoomToSelection: grapher.zoomToSelection ? \"true\" : undefined,\n        endpointsOnly: grapher.compareEndPointsOnly ? \"1\" : \"0\",\n        time: grapher.timeParam,\n        region: grapher.map.region,\n        facet: grapher.selectedFacetStrategy,\n        uniformYAxis:\n            grapher.yAxis.facetDomain === FacetAxisDomain.independent\n                ? \"0\"\n                : \"1\",\n        showNoDataArea: grapher.showNoDataArea ? \"1\" : \"0\",\n        country: grapher.areSelectedEntitiesDifferentThanAuthors\n            ? generateSelectedEntityNamesParam(\n                  grapher.selection.selectedEntityNames\n              )\n            : undefined,\n        focus: grapher.areFocusedSeriesNamesDifferentThanAuthors\n            ? generateFocusedSeriesNamesParam(grapher.focusArray.seriesNames)\n            : undefined,\n        mapSelect: generateSelectedEntityNamesParam(\n            grapher.mapConfig.selection.selectedEntityNames\n        ),\n        globe: grapher.mapConfig.globe.isActive ? \"1\" : \"0\",\n        globeRotation: !R.isDeepEqual(\n            grapher.mapConfig.globe.rotation,\n            DEFAULT_GLOBE_ROTATION\n        )\n            ? stringifyGlobeRotation(grapher.mapConfig.globe.rotation)\n            : undefined,\n        globeZoom:\n            grapher.mapConfig.globe.zoom !== DEFAULT_GLOBE_ZOOM\n                ? R.round(grapher.mapConfig.globe.zoom, 2).toString()\n                : undefined,\n        tableFilter: grapher.dataTableConfig.filter,\n        tableSearch: grapher.dataTableConfig.search,\n        overlay: grapher.overlayParam,\n    }\n    return params\n}\n\n/**\n * Maps the globe rotation given in a config, which is [lat, lon], to a query param\n * which is [lat, lon] as well. The default globe rotation is not persisted.\n */\nfunction configGlobeRotationToQueryParam(\n    configGlobeRotationLatLon?: [number, number]\n): string | undefined {\n    if (!configGlobeRotationLatLon) return undefined\n\n    // don't persist the default globe rotation\n    const isDefaultRotation = R.isDeepEqual(\n        configGlobeRotationLatLon,\n        // we use [lon, lat] internally, but here we are given [lat, lon]\n        DEFAULT_GLOBE_ROTATION.toReversed()\n    )\n    if (isDefaultRotation) return undefined\n\n    return configGlobeRotationLatLon.map((r) => R.round(r, 2)).join(\",\")\n}\n\nfunction configGlobeZoomToQueryParam(zoom?: number): string | undefined {\n    if (!zoom) return undefined\n\n    // don't persist the default zoom level\n    if (zoom === DEFAULT_GLOBE_ZOOM) return undefined\n\n    return zoom.toString()\n}\n\nexport function parseGlobeRotation(latLon: string): [number, number] {\n    // we use [lon, lat] internally and [lat, lon] in the URL\n    const [lat, lon] = latLon\n        .split(\",\")\n        .map((s) => +s)\n        .slice(0, 2) as [number, number]\n    return [lon, lat]\n}\n\nfunction stringifyGlobeRotation(lonLat: number[]): string {\n    // we use [lon, lat] internally and [lat, lon] in the URL\n    const lon = R.round(lonLat[0], 2)\n    const lat = R.round(lonLat[1], 2)\n    return [lat, lon].join(\",\")\n}\n","import * as R from \"remeda\"\nimport * as _ from \"lodash-es\"\nimport {\n    AdditionalGrapherDataFetchFn,\n    EntityName,\n    NumericCatalogKey,\n    PeerCountryStrategy,\n    Time,\n} from \"@ourworldindata/types\"\nimport {\n    checkIsAggregate,\n    checkIsCountry,\n    checkIsIncomeGroup,\n    checkIsOwidContinent,\n    excludeUndefined,\n    getContinentForCountry,\n    getParentRegions,\n    getRegionByName,\n} from \"@ourworldindata/utils\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\nimport { WORLD_ENTITY_NAME } from \"./GrapherConstants.js\"\nimport { match } from \"ts-pattern\"\nimport type { GrapherState } from \"./GrapherState.js\"\n\ninterface SelectDefaultEntitiesAsPeersParams {\n    defaultSelection: EntityName[]\n}\n\ninterface SelectParentRegionsAsPeersParams {\n    targetCountry: EntityName\n    availableEntities: EntityName[]\n}\n\ninterface SelectByClosestValueParams {\n    targetCountry: EntityName\n    availableEntities: EntityName[]\n    additionalDataLoaderFn?: AdditionalGrapherDataFetchFn\n    targetCount?: number\n}\n\ninterface SelectByDataRangeParams {\n    targetCountry?: EntityName\n    availableEntities: EntityName[]\n    dataColumn: CoreColumn\n    randomize?: boolean\n    additionalDataLoaderFn?: AdditionalGrapherDataFetchFn\n    targetCount?: number\n    time?: Time\n}\n\ninterface SelectNeighborsAsPeersParams {\n    targetCountry: EntityName\n    availableEntities: EntityName[]\n    additionalDataLoaderFn?: AdditionalGrapherDataFetchFn\n    targetCount?: number\n}\n\ntype WithStrategy<T, S extends PeerCountryStrategy> = T & {\n    peerCountryStrategy: S\n}\n\ntype SelectPeerCountriesParams =\n    | WithStrategy<\n          SelectDefaultEntitiesAsPeersParams,\n          PeerCountryStrategy.DefaultSelection\n      >\n    | WithStrategy<\n          SelectParentRegionsAsPeersParams,\n          PeerCountryStrategy.ParentRegions\n      >\n    | WithStrategy<\n          SelectByClosestValueParams,\n          PeerCountryStrategy.GdpPerCapita | PeerCountryStrategy.Population\n      >\n    | WithStrategy<SelectByDataRangeParams, PeerCountryStrategy.DataRange>\n    | WithStrategy<SelectNeighborsAsPeersParams, PeerCountryStrategy.Neighbors>\n    | { peerCountryStrategy: PeerCountryStrategy.None }\n\nexport { isValidPeerCountryStrategyQueryParam } from \"@ourworldindata/types\"\n\n/**\n * Selects peer countries for a grapher based on the configured strategy.\n *\n * If targetCountry is provided in options, it will be used directly.\n * Otherwise, the target country is inferred from the grapher's selection,\n * which requires exactly one entity to be selected.\n */\nexport async function selectPeerCountriesForGrapher(\n    grapherState: GrapherState,\n    options?: {\n        peerCountryStrategy?: PeerCountryStrategy\n        targetCountry?: EntityName\n    }\n): Promise<EntityName[]> {\n    // If targetCountry is not explicitly provided, require exactly one entity selected\n    if (!options?.targetCountry) {\n        if (grapherState.selection.numSelectedEntities !== 1) {\n            return []\n        }\n    }\n\n    const targetCountry =\n        options?.targetCountry ?? grapherState.selection.selectedEntityNames[0]\n    const defaultSelection = grapherState.authorsVersion.selectedEntityNames\n\n    const availableEntities = prepareEntitiesForPeerSelection(grapherState)\n    if (availableEntities.length === 0) return []\n\n    const peerCountryStrategy =\n        options?.peerCountryStrategy ?? grapherState.peerCountryStrategy\n    if (!peerCountryStrategy) return []\n\n    // Peer country selection only makes sense for countries\n    const regionInfo = getRegionByName(targetCountry)\n    if (!regionInfo || !checkIsCountry(regionInfo)) return []\n\n    const additionalDataLoaderFn = grapherState.additionalDataLoaderFn\n    const dataColumn = grapherState.table.get(grapherState.yColumnSlug)\n    const time = grapherState.endTime\n\n    return selectPeerCountries({\n        peerCountryStrategy,\n        targetCountry,\n        defaultSelection,\n        availableEntities,\n        additionalDataLoaderFn,\n        dataColumn,\n        time,\n    })\n}\n\n/** Selects peer countries based on the specified strategy and target entity */\nexport async function selectPeerCountries(\n    params: SelectPeerCountriesParams\n): Promise<EntityName[]> {\n    return match(params)\n        .with({ peerCountryStrategy: PeerCountryStrategy.None }, () => [])\n        .with(\n            { peerCountryStrategy: PeerCountryStrategy.DefaultSelection },\n            ({ defaultSelection }) => defaultSelection\n        )\n        .with(\n            { peerCountryStrategy: PeerCountryStrategy.ParentRegions },\n            (params) => selectParentRegionsAsPeers(params)\n        )\n        .with(\n            { peerCountryStrategy: PeerCountryStrategy.GdpPerCapita },\n            async (params) =>\n                selectPeerCountriesByClosestValue({\n                    catalogKey: \"gdp\",\n                    maxPeerRatio: 1.25,\n                    ...params,\n                })\n        )\n        .with(\n            { peerCountryStrategy: PeerCountryStrategy.Population },\n            async (params) =>\n                selectPeerCountriesByClosestValue({\n                    catalogKey: \"population\",\n                    maxPeerRatio: 1.5,\n                    ...params,\n                })\n        )\n        .with(\n            { peerCountryStrategy: PeerCountryStrategy.DataRange },\n            async (params) => selectPeerCountriesByDataRange(params)\n        )\n        .with(\n            { peerCountryStrategy: PeerCountryStrategy.Neighbors },\n            async (params) => selectNeighborsAsPeers(params)\n        )\n        .exhaustive()\n}\n\nfunction isDataLoaderAvailable(\n    additionalDataLoaderFn?: AdditionalGrapherDataFetchFn\n): additionalDataLoaderFn is AdditionalGrapherDataFetchFn {\n    if (!additionalDataLoaderFn) {\n        console.warn(\n            `additionalDataLoaderFn not available for peer selection. Not selecting any peer countries.`\n        )\n        return false\n    }\n    return true\n}\n\nfunction isDataColumnAvailable(\n    dataColumn?: CoreColumn\n): dataColumn is CoreColumn {\n    if (!dataColumn || dataColumn.isMissing || dataColumn.isEmpty) {\n        console.warn(\n            `dataColumn not available for peer selection. Not selecting any peer countries.`\n        )\n        return false\n    }\n    return true\n}\n\n/** Filters entities to only those that have data at all required time points */\nfunction filterEntitiesWithDataAtAllTimes({\n    entities,\n    dataColumn,\n    requiredTimes,\n}: {\n    entities: EntityName[]\n    dataColumn: CoreColumn\n    requiredTimes: Time[]\n}): EntityName[] {\n    if (requiredTimes.length === 0) return entities\n\n    return entities.filter((entityName) => {\n        const entityData = dataColumn.owidRowByEntityNameAndTime.get(entityName)\n        if (!entityData) return false\n        return requiredTimes.every(\n            (time) => entityData.get(time)?.value !== undefined\n        )\n    })\n}\n\n/**\n * Prepares entities for peer selection by excluding historical geographic\n * entities and filtering to only those with data at required times\n * (e.g. both start and end times for slope charts).\n */\nexport function prepareEntitiesForPeerSelection(\n    grapherState: GrapherState\n): EntityName[] {\n    const availableEntities = grapherState.availableEntityNames\n\n    // Exclude historical geographic entities\n    const relevantEntities = availableEntities.filter((entityName) => {\n        const region = getRegionByName(entityName)\n        return !(region && checkIsCountry(region) && region.isHistorical)\n    })\n\n    const dataColumn = grapherState.table.get(grapherState.yColumnSlug)\n    if (!isDataColumnAvailable(dataColumn)) return relevantEntities\n\n    const requiredTimes = grapherState.isOnSlopeChartTab\n        ? excludeUndefined([grapherState.startTime, grapherState.endTime])\n        : []\n\n    if (requiredTimes.length === 0) return relevantEntities\n\n    return filterEntitiesWithDataAtAllTimes({\n        entities: relevantEntities,\n        dataColumn,\n        requiredTimes,\n    })\n}\n\n/**\n * Selects parent aggregate regions (continents, income groups) that the target\n * country belongs to, plus World.\n */\nexport function selectParentRegionsAsPeers({\n    targetCountry,\n    availableEntities,\n}: SelectParentRegionsAsPeersParams): EntityName[] {\n    const region = getRegionByName(targetCountry)\n\n    // Can't determine comparison entities for non-geographical entities\n    if (!region) return []\n\n    const availableEntitySet = new Set(availableEntities)\n    const peers = new Set<EntityName>()\n\n    // Always include World as a comparison if available\n    if (availableEntitySet.has(WORLD_ENTITY_NAME)) peers.add(WORLD_ENTITY_NAME)\n\n    // Get the parent regions of a country (continent, income group, etc.)\n    // Example: Germany -> Europe, Europe (WHO), High income countries\n    const parentRegions = getParentRegions(region.name)\n\n    const isAvailable = (name: string): boolean => availableEntitySet.has(name)\n\n    // If there is an available income group, include it\n    const incomeGroup = parentRegions.find(\n        (r) => checkIsIncomeGroup(r) && isAvailable(r.name)\n    )\n    if (incomeGroup) peers.add(incomeGroup.name)\n\n    // If there is an available OWID continent, include it;\n    // otherwise include any other available aggregate region\n    const owidContinent = parentRegions.find(\n        (r) => checkIsOwidContinent(r) && isAvailable(r.name)\n    )\n    if (owidContinent) {\n        peers.add(owidContinent.name)\n    } else {\n        const aggregate = parentRegions.find(\n            (r) => checkIsAggregate(r) && isAvailable(r.name)\n        )\n        if (aggregate) peers.add(aggregate.name)\n    }\n\n    return Array.from(peers)\n}\n\n/** Finds countries with similar values to the target country */\nasync function selectPeerCountriesByClosestValue({\n    targetCountry,\n    availableEntities,\n    additionalDataLoaderFn,\n    catalogKey,\n    targetCount = 3,\n    maxPeerRatio = 1.5,\n}: SelectByClosestValueParams & {\n    catalogKey: NumericCatalogKey\n    /** Maximum ratio difference allowed */\n    maxPeerRatio?: number\n}): Promise<EntityName[]> {\n    try {\n        // Load data\n        if (!isDataLoaderAvailable(additionalDataLoaderFn)) return []\n        const data = await additionalDataLoaderFn(catalogKey)\n\n        // Only consider _countries_ as candidates for peer selection\n        // (e.g. exclude aggregates like continents or income groups)\n        const candidates = availableEntities.filter((entityName) => {\n            const region = getRegionByName(entityName)\n            const isCountry = region && checkIsCountry(region)\n            return isCountry && entityName !== targetCountry\n        })\n\n        // Create a map of entity names to their values\n        const values = new Map(data.map((row) => [row.entity, row.value]))\n\n        return findClosestByValue({\n            target: targetCountry,\n            candidates,\n            values,\n            targetCount,\n            maxPeerRatio,\n        })\n    } catch (error) {\n        console.error(\n            \"Failed to select peer countries by closest value:\",\n            error\n        )\n        return []\n    }\n}\n\n/** Selects neighboring countries as peers */\nasync function selectNeighborsAsPeers({\n    targetCountry,\n    availableEntities,\n    additionalDataLoaderFn,\n    targetCount = 3,\n}: SelectNeighborsAsPeersParams): Promise<EntityName[]> {\n    try {\n        // Load data\n        if (!isDataLoaderAvailable(additionalDataLoaderFn)) return []\n        const data = await additionalDataLoaderFn(\"neighbors\")\n\n        // Find the target country's neighbors\n        const targetEntry = data.find((entry) => entry.entity === targetCountry)\n        if (!targetEntry) {\n            console.warn(`No neighbors data found for ${targetCountry}`)\n            return []\n        }\n\n        // Filter to only neighbors that are available in the chart's data\n        const availableEntitiesSet = new Set(availableEntities)\n        const availableNeighbors = targetEntry.value.filter((neighbor) =>\n            availableEntitiesSet.has(neighbor)\n        )\n\n        // Return the first x neighbors\n        return availableNeighbors.slice(0, targetCount)\n    } catch (error) {\n        console.error(\"Failed to select neighbors as peers:\", error)\n        return []\n    }\n}\n\n/** Selects countries representing the full data range */\nasync function selectPeerCountriesByDataRange({\n    targetCountry,\n    availableEntities,\n    dataColumn,\n    additionalDataLoaderFn,\n    targetCount = 5,\n    randomize = false,\n    time,\n}: SelectByDataRangeParams): Promise<EntityName[]> {\n    // Only consider countries as candidates for peer selection\n    const candidateEntities = availableEntities.filter((entityName) => {\n        const region = getRegionByName(entityName)\n        return region && checkIsCountry(region)\n    })\n\n    // Extract values for candidate entities at the given time\n    if (!isDataColumnAvailable(dataColumn)) return []\n\n    const values = extractCandidateValues({\n        entities: candidateEntities,\n        dataColumn,\n        targetCountry,\n        time,\n    })\n\n    // Load population data for weighted selection (prefer larger countries)\n    if (!isDataLoaderAvailable(additionalDataLoaderFn)) return []\n    const populationData = await additionalDataLoaderFn(\"population\")\n    const population = new Map(\n        populationData.map((row) => [row.entity, row.value])\n    )\n\n    return findDataRangePeers({\n        targetCountry,\n        values,\n        population,\n        targetCount,\n        randomize,\n    })\n}\n\n/** Finds entities with values closest to a target entity using logarithmic distance */\nexport function findClosestByValue({\n    target,\n    candidates,\n    values,\n    targetCount = 3,\n    maxPeerRatio = 1.5,\n}: {\n    target: EntityName\n    candidates?: EntityName[]\n    values: Map<EntityName, number>\n    /** Number of peer entities to select */\n    targetCount?: number\n    /** Maximum ratio difference allowed */\n    maxPeerRatio?: number\n}): EntityName[] {\n    // Check that the target entity has a value\n    const targetValue = values.get(target)\n    if (targetValue === undefined) {\n        console.warn(`Target entity ${target} not found in values`)\n        return []\n    }\n\n    // Settings for finding peers\n    const settings = { targetValue, targetCount, maxPeerRatio }\n\n    // Default to all available entities as candidates\n    const availableEntities = Array.from(values.keys()).filter(\n        (entityName) => entityName !== target\n    )\n    const candidatesToUse = candidates ?? availableEntities\n\n    // Get the target's continent for filtering\n    const targetContinent = getContinentForCountry(target)\n\n    // If the target continent is unknown, search all candidates\n    if (!targetContinent) {\n        return findClosestByLogDistance({\n            values,\n            candidates: candidatesToUse,\n            ...settings,\n        })\n    }\n\n    // Find candidates on the same continent vs other continents\n    const [sameContinentCandidates, otherContinentsCandidates] = R.partition(\n        candidatesToUse,\n        (name) => getContinentForCountry(name) === targetContinent\n    )\n\n    // First try finding peer countries on the same continent\n    const sameContinentPeers = findClosestByLogDistance({\n        values,\n        candidates: sameContinentCandidates,\n        ...settings,\n    })\n\n    // If we have enough same-continent peers, return them\n    if (sameContinentPeers.length >= targetCount) return sameContinentPeers\n\n    // Otherwise, fill up with peers from other continents\n    const remainingCount = targetCount - sameContinentPeers.length\n    const otherContinentPeers = findClosestByLogDistance({\n        values,\n        candidates: otherContinentsCandidates,\n        ...settings,\n        targetCount: remainingCount,\n    })\n\n    const combinedPeers = [...sameContinentPeers, ...otherContinentPeers]\n\n    if (combinedPeers.length === 0) {\n        console.warn(\n            `No peers found within ${maxPeerRatio}x for ${target} (value: ${targetValue})`\n        )\n    }\n\n    return combinedPeers\n}\n\nconst findClosestByLogDistance = ({\n    values,\n    candidates,\n    targetValue,\n    targetCount = 3,\n    maxPeerRatio = 1.25,\n}: {\n    values: Map<EntityName, number>\n    candidates: EntityName[]\n    targetValue: number\n    targetCount: number\n    maxPeerRatio: number\n}): EntityName[] => {\n    const targetLogValue = Math.log(targetValue)\n    const maxLogDistance = Math.log(maxPeerRatio)\n\n    return R.pipe(\n        candidates,\n        R.map((entityName) => {\n            const value = values.get(entityName)\n            if (value === undefined) return undefined\n            return {\n                entityName,\n                // Log distance: |log(value) - log(target)| = |log(value/target)|\n                // Log distance so that 2x larger and 2x smaller are equidistant\n                difference: Math.abs(Math.log(value) - targetLogValue),\n            }\n        }),\n        R.filter(R.isDefined),\n        // Exclude peers that are more than maxPeerRatio times larger/smaller\n        R.filter(({ difference }) => difference <= maxLogDistance),\n        R.sortBy((item) => item.difference),\n        R.take(targetCount),\n        R.map((item) => item.entityName)\n    )\n}\n\n/**\n * Finds entities representing the data distribution using stratified sampling.\n *\n * Divides data into buckets (quintiles by default) and picks one entity from each:\n * - When randomize=false (default): picks the most populous country in each bucket\n * - When randomize=true: random selection weighted by population\n */\nexport function findDataRangePeers({\n    values,\n    population,\n    targetCount = 5,\n    targetCountry,\n    randomize = false,\n}: {\n    values: Map<EntityName, number>\n    /** Population data for weighted selection (prefers larger countries) */\n    population: Map<EntityName, number>\n    targetCount?: number\n    /** If specified, skip the bucket that contains this country */\n    targetCountry?: EntityName\n    /** If true, use randomized selection; if false, pick most populous */\n    randomize?: boolean\n}): EntityName[] {\n    const sortedData = R.pipe(\n        Array.from(values.entries()),\n        R.map(([entityName, value]) => ({ entityName, value })),\n        R.sortBy((item) => item.value)\n    )\n\n    if (sortedData.length === 0) return []\n\n    const bucketSize = Math.ceil(sortedData.length / targetCount)\n    const buckets = R.chunk(sortedData, bucketSize)\n\n    // If a target country is specified and has data, include it directly\n    // and only pick peers for buckets that don't contain it\n    const targetBucketIndex =\n        targetCountry !== undefined && values.has(targetCountry)\n            ? buckets.findIndex((bucket) =>\n                  bucket.some((item) => item.entityName === targetCountry)\n              )\n            : -1\n\n    const selected = R.pipe(\n        buckets,\n        R.map((bucket, bucketIndex) => {\n            if (bucket.length === 0) return undefined\n\n            // Skip if the target country is in this bucket\n            if (bucketIndex === targetBucketIndex) return undefined\n\n            return randomize\n                ? weightedRandomPick(bucket, population)\n                : maxPopulationPick(bucket, population)\n        }),\n        R.filter(R.isDefined)\n    )\n\n    return R.unique(selected)\n}\n\n/** Pick the entity with the highest population from the bucket */\nfunction maxPopulationPick(\n    bucket: { entityName: EntityName; value: number }[],\n    population: Map<EntityName, number>\n): EntityName | undefined {\n    return _.maxBy(bucket, (item) => population.get(item.entityName) ?? 0)\n        ?.entityName\n}\n\n/** Pick a random entity from the bucket, weighted by population */\nfunction weightedRandomPick(\n    bucket: { entityName: EntityName; value: number }[],\n    population: Map<EntityName, number>\n): EntityName | undefined {\n    // Calculate weights using population\n    const weights = bucket.map((item) => population.get(item.entityName) ?? 0)\n\n    const totalWeight = R.sum(weights)\n\n    // If no population data is available, just pick a random entity\n    if (totalWeight === 0) return R.sample(bucket, 1)[0]?.entityName\n\n    // Weighted random selection: imagine a number line divided into segments,\n    // where each country's segment size equals its weight. We pick a random\n    // point on the line, then walk through segments until we find which one\n    // contains our point. Countries with larger weights have larger segments,\n    // so they're more likely to be picked.\n    //\n    // Example with weights [5, 3, 2]:\n    //   |------Germany (5)------|--France (3)--|-Belgium (2)-|\n    //   0                        5              8             10\n    // A random point at 6.5 lands in France's segment, so France is picked.\n    let random = Math.random() * totalWeight\n    for (let i = 0; i < bucket.length; i++) {\n        random -= weights[i]\n        if (random <= 0) return bucket[i].entityName\n    }\n\n    return bucket[bucket.length - 1]?.entityName\n}\n\nfunction extractCandidateValues({\n    entities,\n    dataColumn,\n    targetCountry,\n    time,\n}: {\n    entities: EntityName[]\n    dataColumn: CoreColumn\n    targetCountry?: EntityName\n    time?: Time\n}): Map<EntityName, number> {\n    // If a target country is given, use the given time value if it has data for it,\n    // otherwise use the country's latest data smaller than the given time\n    if (targetCountry) {\n        const rowsByTime =\n            dataColumn.owidRowByEntityNameAndTime.get(targetCountry)\n\n        if (!rowsByTime)\n            return extractValuesAtTime({\n                entities,\n                dataColumn,\n                time: time ?? dataColumn.maxTime,\n            })\n\n        const times = [...rowsByTime.keys()]\n        if (time !== undefined) {\n            // If a time is given, find the closest time with data for the\n            // target country that is smaller or equal to the given time\n            const closestTime = _.max(times.filter((t) => t <= time))\n\n            const resolvedTime = closestTime ?? time\n            const values = extractValuesAtTime({\n                entities,\n                dataColumn,\n                time: resolvedTime,\n            })\n\n            // If no values found, fall back to the column's latest time\n            if (values.size === 0 && resolvedTime !== dataColumn.maxTime) {\n                return extractValuesAtTime({\n                    entities,\n                    dataColumn,\n                    time: dataColumn.maxTime,\n                })\n            }\n\n            return values\n        } else {\n            // If no time given, use the latest time with data for the target country\n            const maxTime = _.max(times)\n            return extractValuesAtTime({\n                entities,\n                dataColumn,\n                time: maxTime ?? dataColumn.maxTime,\n            })\n        }\n    }\n\n    // If no target country is given, use the given time\n    const targetTime = time ?? dataColumn.maxTime\n    const values = extractValuesAtTime({\n        entities,\n        dataColumn,\n        time: targetTime,\n    })\n\n    // If no values found at the target time, retry with the column's latest time\n    // This can happen for charts with projected data\n    if (values.size === 0 && targetTime !== dataColumn.maxTime) {\n        return extractValuesAtTime({\n            entities,\n            dataColumn,\n            time: dataColumn.maxTime,\n        })\n    }\n\n    return values\n}\n\n/** Extracts numeric values for entities at a specific time point */\nfunction extractValuesAtTime({\n    entities,\n    dataColumn,\n    time,\n}: {\n    entities: EntityName[]\n    dataColumn: CoreColumn\n    time: Time\n}): Map<EntityName, number> {\n    const values = new Map<EntityName, number>()\n    for (const entityName of entities) {\n        const value = dataColumn.owidRowByEntityNameAndTime\n            .get(entityName)\n            ?.get(time)?.value\n        if (value !== undefined) values.set(entityName, value)\n    }\n    return values\n}\n","import {\n    EntityName,\n    FacetAxisDomain,\n    FacetStrategy,\n    GrapherQueryParams,\n    GrapherTabConfigOption,\n    GRAPHER_TAB_CONFIG_OPTIONS,\n    MapRegionName,\n    ScaleType,\n    SeriesName,\n    StackMode,\n    PeerCountryStrategyQueryParam,\n    VALID_PEER_COUNTRY_STRATEGY_QUERY_PARAMS,\n} from \"@ourworldindata/types\"\nimport { parseFloatOrUndefined } from \"@ourworldindata/utils\"\nimport { parseGlobeRotation } from \"./GrapherUrl.js\"\nimport {\n    getEntityNamesParam,\n    getSelectedEntityNamesParam,\n    getFocusedSeriesNamesParam,\n} from \"./EntityUrlBuilder.js\"\nimport { isValidTabQueryParam } from \"../chart/ChartTabs.js\"\nimport { isValidDataTableFilter } from \"../dataTable/DataTable.js\"\nimport { DataTableFilter } from \"../dataTable/DataTableConstants.js\"\nimport { DownloadModalTabName } from \"../modal/DownloadModal.js\"\nimport { GrapherModal } from \"./GrapherConstants.js\"\nimport { isValidMapRegionName } from \"../mapCharts/MapHelpers.js\"\nimport { isValidPeerCountryStrategyQueryParam } from \"./PeerCountrySelection.js\"\n\n/**\n * Discriminated union representing the result of parsing a query parameter\n *\n * Possible states:\n * - `valid`: The parameter was present and successfully parsed\n * - `invalid`: The parameter was present but contained an invalid value\n * - `missing`: The parameter was not present in the query string\n */\nexport type ParsedParam<T> =\n    | { status: \"valid\"; value: T }\n    | { status: \"invalid\"; rawValue: string; reason: string }\n    | { status: \"missing\" }\n\n/** Helper to create a valid parse result */\nfunction valid<T>(value: T): ParsedParam<T> {\n    return { status: \"valid\", value }\n}\n\n/** Helper to create an invalid parse result */\nfunction invalid<T>(rawValue: string, reason: string): ParsedParam<T> {\n    return { status: \"invalid\", rawValue, reason }\n}\n\n/** Helper to create a missing parse result */\nfunction missing<T>(): ParsedParam<T> {\n    return { status: \"missing\" }\n}\n\n/** Valid values for the `overlay` query parameter */\nexport const OVERLAY_PARAM_VALUES = {\n    sources: \"sources\",\n    download: \"download\",\n    downloadData: \"download-data\",\n    downloadVis: \"download-vis\",\n} as const\n\nexport type OverlayParamValue =\n    (typeof OVERLAY_PARAM_VALUES)[keyof typeof OVERLAY_PARAM_VALUES]\n\nexport interface ParsedOverlay {\n    modal: GrapherModal\n    downloadTab?: DownloadModalTabName\n}\n\n/** Parses a boolean parameter that uses \"1\"/\"0\" string values */\nfunction parseBooleanOneZeroParam(\n    value: string | undefined\n): ParsedParam<boolean> {\n    if (value === undefined) return missing()\n    if (value === \"1\") return valid(true)\n    if (value === \"0\") return valid(false)\n    return invalid(value, `Expected \"1\" or \"0\", got \"${value}\"`)\n}\n\n/** Parses a scale type parameter (linear or log) */\nfunction parseScaleTypeParam(\n    value: string | undefined\n): ParsedParam<ScaleType> {\n    if (value === undefined) return missing()\n    if (value === ScaleType.linear || value === ScaleType.log)\n        return valid(value)\n    return invalid(\n        value,\n        `Invalid scale type. Valid options: ${Object.values(ScaleType).join(\", \")}`\n    )\n}\n\n/** Parses the `tab` query parameter */\nfunction parseTabParam(\n    value: string | undefined\n): ParsedParam<GrapherTabConfigOption> {\n    if (value === undefined) return missing()\n    if (isValidTabQueryParam(value)) return valid(value)\n    return invalid(\n        value,\n        `Invalid tab value. Valid options: ${Object.values(GRAPHER_TAB_CONFIG_OPTIONS).join(\", \")}`\n    )\n}\n\n/**\n * Parses the `overlay` query parameter.\n *\n * The \"embed\" value is intentionally ignored. In the past, there was\n * an issue where the embed modal URL was accidentally included in the\n * Embed dialog's URL, causing embeds to always show the modal.\n */\nfunction parseOverlayParam(\n    value: string | undefined\n): ParsedParam<ParsedOverlay> {\n    if (value === undefined) return missing()\n\n    switch (value) {\n        case OVERLAY_PARAM_VALUES.sources:\n            return valid({ modal: GrapherModal.Sources })\n        case OVERLAY_PARAM_VALUES.download:\n            return valid({ modal: GrapherModal.Download })\n        case OVERLAY_PARAM_VALUES.downloadData:\n            return valid({\n                modal: GrapherModal.Download,\n                downloadTab: DownloadModalTabName.Data,\n            })\n        case OVERLAY_PARAM_VALUES.downloadVis:\n            return valid({\n                modal: GrapherModal.Download,\n                downloadTab: DownloadModalTabName.Vis,\n            })\n        default:\n            return invalid(\n                value,\n                `Invalid overlay value. Valid options: ${Object.values(OVERLAY_PARAM_VALUES).join(\", \")}`\n            )\n    }\n}\n\n/** Parses the `stackMode` query parameter */\nfunction parseStackModeParam(\n    value: string | undefined\n): ParsedParam<StackMode> {\n    if (value === undefined) return missing()\n    if (value === StackMode.absolute || value === StackMode.relative) {\n        return valid(value)\n    }\n    return invalid(\n        value,\n        `Invalid stackMode value. Valid options: ${Object.values(StackMode).join(\", \")}`\n    )\n}\n\n/**\n * Validates a single time value (used in the `time` query parameter).\n *\n * Valid formats:\n * - Integer (possibly negative): -500, 2020, etc.\n * - ISO date string: 2020-01-15\n * - Special keywords: \"earliest\", \"latest\"\n */\nfunction isValidSingleTime(value: string): boolean {\n    // \"earliest\" or \"latest\"\n    if (value === \"earliest\" || value === \"latest\") return true\n\n    // Integer (possibly negative)\n    if (/^-?\\d+$/.test(value)) return true\n\n    // ISO date format (yyyy-mm-dd)\n    if (/^\\d{4}-[01]\\d-[0-3]\\d$/.test(value)) return true\n\n    return false\n}\n\n/**\n * Parses the `time` query parameter.\n *\n * Valid formats:\n * - Single time: \"2020\", \"-500\", \"2020-01-15\", \"earliest\", \"latest\"\n * - Time range: \"2010..2020\", \"earliest..2020\", \"2010..latest\", \"earliest..latest\"\n */\nfunction parseTimeParam(value: string | undefined): ParsedParam<string> {\n    if (value === undefined || value === \"\") return missing()\n\n    // Handle time ranges (e.g., \"2010..2020\")\n    if (value.includes(\"..\")) {\n        const parts = value.split(\"..\")\n        if (parts.length !== 2) {\n            return invalid(\n                value,\n                \"Invalid time range format. Expected 'start..end'\"\n            )\n        }\n\n        const [start, end] = parts\n\n        // Handle legacy formats like \"2015..\" or \"..2015\"\n        const startValid = start === \"\" || isValidSingleTime(start)\n        const endValid = end === \"\" || isValidSingleTime(end)\n\n        if (!startValid || !endValid) {\n            return invalid(\n                value,\n                \"Invalid time value. Expected integer, yyyy-mm-dd, 'earliest', or 'latest'\"\n            )\n        }\n\n        return valid(value)\n    }\n\n    // Handle single time values\n    if (isValidSingleTime(value)) return valid(value)\n\n    return invalid(\n        value,\n        \"Invalid time value. Expected integer, yyyy-mm-dd, 'earliest', or 'latest'\"\n    )\n}\n\n/** Parses the `globe` query parameter */\nfunction parseGlobeParam(value: string | undefined): ParsedParam<boolean> {\n    return parseBooleanOneZeroParam(value)\n}\n\n/** Parses the `globeRotation` query parameter */\nfunction parseGlobeRotationParam(\n    value: string | undefined\n): ParsedParam<[number, number]> {\n    if (value === undefined) return missing()\n\n    const rotation = parseGlobeRotation(value)\n    if (rotation?.length === 2 && !isNaN(rotation[0]) && !isNaN(rotation[1])) {\n        return valid(rotation)\n    }\n\n    return invalid(value, `Expected \"lat,lon\" format, got \"${value}\"`)\n}\n\n/** Parses the `globeZoom` query parameter */\nfunction parseGlobeZoomParam(value: string | undefined): ParsedParam<number> {\n    if (value === undefined) return missing()\n\n    const parsed = parseFloatOrUndefined(value)\n    if (parsed !== undefined) return valid(parsed)\n\n    return invalid(value, `Expected numeric value, got \"${value}\"`)\n}\n\n/** Parses the `region` query parameter */\nfunction parseRegionParam(\n    value: string | undefined\n): ParsedParam<MapRegionName> {\n    if (value === undefined) return missing()\n    if (isValidMapRegionName(value)) return valid(value)\n    return invalid(\n        value,\n        `Invalid region. Valid options: ${Object.values(MapRegionName).join(\", \")}`\n    )\n}\n\n/** Parses entity names from a query parameter */\nfunction parseEntityNamesParam(\n    value: string | undefined\n): ParsedParam<EntityName[]> {\n    if (value === undefined) return missing()\n\n    const names = getEntityNamesParam(value)\n    if (names) return valid(names)\n\n    return missing()\n}\n\n/** Parses the `country` query parameter */\nfunction parseCountryParam(\n    value: string | undefined\n): ParsedParam<EntityName[]> {\n    if (value === undefined) return missing()\n\n    const selection = getSelectedEntityNamesParam(value)\n\n    return valid(selection ?? [])\n}\n\n/** Parses the `focus` query parameter for focused series names */\nfunction parseFocusParam(value: string | undefined): ParsedParam<SeriesName[]> {\n    if (value === undefined) return missing()\n    const names = getFocusedSeriesNamesParam(value)\n    if (names) return valid(names)\n    return missing()\n}\n\n/** Parses the `facet` query parameter */\nfunction parseFacetParam(\n    value: string | undefined\n): ParsedParam<FacetStrategy> {\n    if (value === undefined) return missing()\n    if (isValidFacetStrategy(value)) return valid(value)\n    return invalid(\n        value,\n        `Invalid facet value. Valid options: ${Object.values(FacetStrategy).join(\", \")}`\n    )\n}\n\n/** Parses the `uniformYAxis` query parameter */\nfunction parseUniformYAxisParam(\n    value: string | undefined\n): ParsedParam<FacetAxisDomain> {\n    if (value === undefined) return missing()\n    if (value === \"0\") return valid(FacetAxisDomain.independent)\n    if (value === \"1\") return valid(FacetAxisDomain.shared)\n    return invalid(value, `Expected \"0\" or \"1\", got \"${value}\"`)\n}\n\n/** Parses the `showNoDataArea` query parameter */\nfunction parseShowNoDataAreaParam(\n    value: string | undefined\n): ParsedParam<boolean> {\n    return parseBooleanOneZeroParam(value)\n}\n\n/** Parses the deprecated `showSelectionOnlyInTable` query parameter */\nfunction parseShowSelectionOnlyInTableParam(\n    value: string | undefined\n): ParsedParam<DataTableFilter> {\n    if (value === undefined) return missing()\n    if (value === \"1\") return valid(\"selection\")\n    if (value === \"0\") return valid(\"all\")\n    return invalid(value, `Expected \"0\" or \"1\", got \"${value}\"`)\n}\n\n/** Parses the `tableFilter` query parameter */\nfunction parseTableFilterParam(\n    value: string | undefined\n): ParsedParam<DataTableFilter> {\n    if (value === undefined) return missing()\n    if (isValidDataTableFilter(value)) return valid(value)\n    return invalid(value, \"Invalid tableFilter value\")\n}\n\n/** Parses the `tableSearch` query parameter */\nfunction parseTableSearchParam(value: string | undefined): ParsedParam<string> {\n    if (value === undefined || value === \"\") return missing()\n    return valid(value)\n}\n\n/** Parses the `endpointsOnly` query parameter */\nfunction parseEndpointsOnlyParam(\n    value: string | undefined\n): ParsedParam<boolean> {\n    return parseBooleanOneZeroParam(value)\n}\n\n/** Parses the `zoomToSelection` query parameter */\nfunction parseZoomToSelectionParam(\n    value: string | undefined\n): ParsedParam<true> {\n    if (value === undefined) return missing()\n    if (value === \"true\") return valid(true)\n    return missing()\n}\n\nfunction parsePeerCountriesParam(\n    value: string | undefined\n): ParsedParam<PeerCountryStrategyQueryParam> {\n    if (value === undefined) return missing()\n\n    if (isValidPeerCountryStrategyQueryParam(value)) return valid(value)\n\n    return invalid(\n        value,\n        `Invalid peerCountries value. Valid options: ${VALID_PEER_COUNTRY_STRATEGY_QUERY_PARAMS.join(\", \")}`\n    )\n}\n\n/** Maps each GrapherQueryParams key to its parsed value type */\ntype ParsedValueTypeMap = {\n    tab: GrapherTabConfigOption\n    overlay: ParsedOverlay\n    stackMode: StackMode\n    zoomToSelection: true\n    xScale: ScaleType\n    yScale: ScaleType\n    time: string\n    endpointsOnly: boolean\n    globe: boolean\n    globeRotation: [number, number]\n    globeZoom: number\n    region: MapRegionName\n    mapSelect: EntityName[]\n    country: EntityName[]\n    focus: SeriesName[]\n    facet: FacetStrategy\n    uniformYAxis: FacetAxisDomain\n    showNoDataArea: boolean\n    showSelectionOnlyInTable: DataTableFilter\n    tableFilter: DataTableFilter\n    tableSearch: string\n    peerCountries: PeerCountryStrategyQueryParam\n}\n\n// Compile-time check: ensures ParsedValueTypeMap has all keys from GrapherQueryParams.\n// If a key is added to GrapherQueryParams but not ParsedValueTypeMap, this will cause\n// a type error.\ntype _AssertAllKeysPresent =\n    keyof GrapherQueryParams extends keyof ParsedValueTypeMap\n        ? keyof ParsedValueTypeMap extends keyof GrapherQueryParams\n            ? true\n            : never\n        : never\nvoid (true satisfies _AssertAllKeysPresent)\n\n/** Container for all parsed query parameters */\nexport type ParsedGrapherQueryParams = {\n    [K in keyof Required<GrapherQueryParams>]: ParsedParam<\n        ParsedValueTypeMap[K]\n    >\n}\n\n/** Parses all Grapher query parameters from a GrapherQueryParams object */\nexport function parseGrapherQueryParams(\n    params: GrapherQueryParams\n): ParsedGrapherQueryParams {\n    return {\n        tab: parseTabParam(params.tab),\n        overlay: parseOverlayParam(params.overlay),\n        stackMode: parseStackModeParam(params.stackMode),\n        zoomToSelection: parseZoomToSelectionParam(params.zoomToSelection),\n        xScale: parseScaleTypeParam(params.xScale),\n        yScale: parseScaleTypeParam(params.yScale),\n        time: parseTimeParam(params.time),\n        endpointsOnly: parseEndpointsOnlyParam(params.endpointsOnly),\n        globe: parseGlobeParam(params.globe),\n        globeRotation: parseGlobeRotationParam(params.globeRotation),\n        globeZoom: parseGlobeZoomParam(params.globeZoom),\n        region: parseRegionParam(params.region),\n        mapSelect: parseEntityNamesParam(params.mapSelect),\n        country: parseCountryParam(params.country),\n        focus: parseFocusParam(params.focus),\n        facet: parseFacetParam(params.facet),\n        uniformYAxis: parseUniformYAxisParam(params.uniformYAxis),\n        showNoDataArea: parseShowNoDataAreaParam(params.showNoDataArea),\n        showSelectionOnlyInTable: parseShowSelectionOnlyInTableParam(\n            params.showSelectionOnlyInTable\n        ),\n        tableFilter: parseTableFilterParam(params.tableFilter),\n        tableSearch: parseTableSearchParam(params.tableSearch),\n        peerCountries: parsePeerCountriesParam(params.peerCountries),\n    }\n}\n\n/** Logs all invalid query parameters to the console */\nexport function logInvalidQueryParams(parsed: ParsedGrapherQueryParams): void {\n    const entries = Object.entries(parsed) as [\n        keyof ParsedGrapherQueryParams,\n        ParsedParam<unknown>,\n    ][]\n\n    for (const [key, result] of entries) {\n        if (result.status === \"invalid\") {\n            console.error(\n                `Invalid query parameter \"${key}\": ${result.reason} (raw value: \"${result.rawValue}\")`\n            )\n        }\n    }\n}\n\nfunction isValidFacetStrategy(value: string): value is FacetStrategy {\n    return Object.values(FacetStrategy).includes(value as any)\n}\n","import { RelatedQuestionsConfig } from \"@ourworldindata/types\"\n\nexport const getErrorMessageRelatedQuestionUrl = (\n    question: RelatedQuestionsConfig\n): string | undefined => {\n    return question.text\n        ? (!question.url && \"Missing URL\") ||\n              (!question.url.match(/^https?:\\/\\//) &&\n                  \"URL should start with http(s)://\") ||\n              undefined\n        : undefined\n}\n","import { get as getCookie } from \"es-cookie\"\nimport { CookieKey } from \"./GrapherConstants.js\"\n\nfunction hasAdminCookie(): boolean {\n    // This cookie is set by visiting ourworldindata.org/identifyadmin on the static site.\n    // There is an iframe on owid.cloud to trigger a visit to that page.\n    try {\n        // Cookie access can be restricted by iframe sandboxing, in which case the below code will throw an error\n        // see https://github.com/owid/owid-grapher/pull/2452\n        return !!getCookie(CookieKey.isAdmin)\n    } catch {\n        return false\n    }\n}\n\nfunction isStagingOrLocalhost(): boolean {\n    if (typeof location === \"undefined\") return false\n    return (\n        location.host.includes(\"staging\") || location.host.includes(\"localhost\")\n    )\n}\n\n/**\n * Whether to show staff-only controls (edit links, copy buttons, …).\n *\n * The isAdmin cookie never exists on staging servers: the admin sets it by\n * iframing ourworldindata.org/identifyadmin, cookies are per-host, and setting\n * it via the staging server's own /identifyadmin fails because the cookie is\n * `Secure` and staging is served over plain http. So we show the controls on\n * staging and localhost regardless of the cookie.\n *\n * This is about visibility, not access control: anyone can set the cookie.\n */\nexport function shouldShowStaffControls(): boolean {\n    return hasAdminCookie() || isStagingOrLocalhost()\n}\n","import * as _ from \"lodash-es\"\nimport {\n    ColumnSlug,\n    formatAttributionsShortened,\n    getAttributionFragmentsFromVariable,\n} from \"@ourworldindata/utils\"\nimport {\n    ColumnTypeMap,\n    CoreColumn,\n    OwidTable,\n} from \"@ourworldindata/core-table\"\nimport {\n    DimensionProperty,\n    GrapherTabName,\n    GRAPHER_TAB_NAMES,\n} from \"@ourworldindata/types\"\nimport { isPopulationVariableETLPath } from \"./GrapherConstants.js\"\nimport {\n    isChartTab,\n    getSupportedDimensionsForChartTypes,\n} from \"../chart/ChartTabs.js\"\n\nexport const pickColumnsForSourcesLine = ({\n    table,\n    yColumnSlugs,\n    xColumnSlug,\n    colorColumnSlug,\n    sizeColumnSlug,\n    activeTab,\n}: {\n    table: OwidTable\n    yColumnSlugs: ColumnSlug[]\n    xColumnSlug?: ColumnSlug\n    colorColumnSlug?: ColumnSlug\n    sizeColumnSlug?: ColumnSlug\n    activeTab?: GrapherTabName\n}): ColumnSlug[] => {\n    const activeDimensions = new Set(\n        activeTab\n            ? getDimensionPropertiesForActiveTab(activeTab)\n            : getDimensionPropertiesForActiveTab(GRAPHER_TAB_NAMES.Table)\n    )\n\n    const columnSlugs: ColumnSlug[] = []\n\n    // Include all y-columns\n    if (activeDimensions.has(DimensionProperty.y)) {\n        columnSlugs.push(...yColumnSlugs)\n    }\n\n    // Include color dimension, excluding:\n    // - Continents variable\n    if (colorColumnSlug && activeDimensions.has(DimensionProperty.color)) {\n        const colorColumn = table.get(colorColumnSlug)\n        if (!(colorColumn instanceof ColumnTypeMap.Continent)) {\n            columnSlugs.push(colorColumnSlug)\n        }\n    }\n\n    // Include x dimension, excluding:\n    // - Population variable when used in Marimekko charts\n    if (xColumnSlug && activeDimensions.has(DimensionProperty.x)) {\n        const xColumn = table.get(xColumnSlug).def\n        const isPopulationVariable = isPopulationVariableETLPath(\n            xColumn?.catalogPath ?? \"\"\n        )\n        const isMarimekko = activeTab === GRAPHER_TAB_NAMES.Marimekko\n        if (!(isMarimekko && isPopulationVariable)) {\n            columnSlugs.push(xColumnSlug)\n        }\n    }\n\n    // Include size dimension, excluding:\n    // - Population variable\n    if (sizeColumnSlug && activeDimensions.has(DimensionProperty.size)) {\n        const sizeColumn = table.get(sizeColumnSlug).def\n        const isPopulationVariable = isPopulationVariableETLPath(\n            sizeColumn?.catalogPath ?? \"\"\n        )\n        if (!isPopulationVariable) {\n            columnSlugs.push(sizeColumnSlug)\n        }\n    }\n\n    return _.uniq(columnSlugs)\n}\n\n/**\n * Determines which dimension properties (y, x, color, size) are relevant\n * for the active tab\n */\nconst getDimensionPropertiesForActiveTab = (\n    tab: GrapherTabName\n): DimensionProperty[] => {\n    const { x, y, color, size } = DimensionProperty\n\n    // Only include dimensions relevant to the active chart type\n    // (e.g. exclude x dimension for line charts)\n    if (isChartTab(tab)) return getSupportedDimensionsForChartTypes([tab])\n\n    // Only include y dimension for the map tab\n    if (tab === GRAPHER_TAB_NAMES.WorldMap) return [y]\n\n    // Include all dimensions for the table tab\n    return [y, x, color, size]\n}\n\nexport const buildSourcesLineFromColumns = (columns: CoreColumn[]): string => {\n    const columnsWithSources = columns.filter(\n        (column) => !!column.source.name || !_.isEmpty(column.def.origins)\n    )\n\n    const attributions = columnsWithSources.flatMap((column) =>\n        getAttributionFragmentsFromVariable({\n            ...column.def,\n            source: column.source,\n        })\n    )\n\n    return formatAttributionsShortened(_.uniq(attributions))\n}\n","import {\n    MarkdownTextWrap,\n    sumTextWrapHeights,\n    reactRenderToStringClientOnly,\n} from \"@ourworldindata/components\"\nimport {\n    OwidTable,\n    BlankOwidTable,\n    CoreColumn,\n    ColumnTypeMap,\n    TimeColumn,\n    MissingColumn,\n    makeOriginalTimeSlugFromColumnSlug,\n    ErrorValueTypes,\n    isNotErrorValueOrEmptyCell,\n    makeAnnotationsSlug,\n} from \"@ourworldindata/core-table\"\nimport {\n    GrapherChartType,\n    GRAPHER_CHART_TYPES,\n    AnnotationFieldsInTitle,\n    TimeBound,\n    Time,\n    EntitySelectionMode,\n    StackMode,\n    LogoOption,\n    LicenseOption,\n    GrapherTabConfigOption,\n    GRAPHER_TAB_CONFIG_OPTIONS,\n    ColorSchemeName,\n    ScatterPointLabelStrategy,\n    MissingDataStrategy,\n    ColumnSlugs,\n    ColumnSlug,\n    EntityName,\n    SeriesName,\n    ComparisonLineConfig,\n    RelatedQuestionsConfig,\n    FacetStrategy,\n    SortBy,\n    SortOrder,\n    QueryParams,\n    LegacyGrapherInterface,\n    ArchiveContext,\n    AdditionalGrapherDataFetchFn,\n    GrapherInterface,\n    grapherKeysToSerialize,\n    GrapherQueryParams,\n    GRAPHER_QUERY_PARAM_KEYS,\n    ScaleType,\n    TimeBounds,\n    GrapherTabName,\n    GRAPHER_TAB_NAMES,\n    AxisConfigInterface,\n    SeriesStrategy,\n    GRAPHER_MAP_TYPE,\n    GrapherVariant,\n    SeriesColorMap,\n    OwidChartDimensionInterface,\n    DimensionProperty,\n    DetailsMarker,\n    EnrichedDetail,\n    ProjectionColumnInfo,\n    OwidColumnDef,\n    SortConfig,\n    GlobeRegionName,\n    GrapherWindowType,\n    MapRegionName,\n    OwidTableSlugs,\n    PeerCountryStrategy,\n} from \"@ourworldindata/types\"\nimport {\n    objectWithPersistablesToObject,\n    deleteRuntimeAndUnchangedProps,\n    minTimeToJSON,\n    maxTimeToJSON,\n    updatePersistables,\n    minTimeBoundFromJSONOrNegativeInfinity,\n    maxTimeBoundFromJSONOrPositiveInfinity,\n    Url,\n    getTimeDomainFromQueryString,\n    findClosestTime,\n    Bounds,\n    excludeUndefined,\n    isInIFrame,\n    slugify,\n    extractDetailsFromSyntax,\n    lowerCaseFirstLetterUnlessAbbreviation,\n    isTouchDevice,\n    omitUndefinedValues,\n    firstOfNonEmptyArray,\n    getWindowUrl,\n    isArrayDifferentFromReference,\n    differenceObj,\n    queryParamsToStr,\n    timeBoundToTimeBoundString,\n    getRegionByName,\n    checkIsCountry,\n    checkIsOwidContinent,\n    checkIsIncomeGroup,\n    checkHasMembers,\n    sortNumeric,\n    isMobile,\n    guid,\n} from \"@ourworldindata/utils\"\nimport * as _ from \"lodash-es\"\nimport {\n    computed,\n    action,\n    makeObservable,\n    observable,\n    autorun,\n    runInAction,\n    untracked,\n} from \"mobx\"\nimport React from \"react\"\nimport * as R from \"remeda\"\nimport { match } from \"ts-pattern\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig.js\"\nimport {\n    GrapherRasterizeFn,\n    StaticChartRasterizer,\n} from \"../captionedChart/StaticChartRasterizer.js\"\nimport { Chart } from \"../chart/Chart.js\"\nimport {\n    ChartDimension,\n    LegacyDimensionsManager,\n} from \"../chart/ChartDimension.js\"\nimport { ChartState } from \"../chart/ChartInterface.js\"\nimport {\n    isChartTypeName,\n    isChartTab,\n    isMapTab,\n    findValidChartTypeCombination,\n    mapChartTypeNameToTabConfigOption,\n    mapTabConfigOptionToChartTypeName,\n    getSupportedDimensionsForChartTypes,\n} from \"../chart/ChartTabs.js\"\nimport { makeChartState } from \"../chart/ChartTypeMap.js\"\nimport {\n    autoDetectSeriesStrategy,\n    autoDetectYColumnSlugs,\n    scaleFontSize,\n} from \"../chart/ChartUtils.js\"\nimport { DimensionSlot } from \"../chart/DimensionSlot.js\"\nimport { GRAPHER_LIGHT_TEXT } from \"../color/ColorConstants.js\"\nimport { ColorScaleConfig } from \"../color/ColorScaleConfig.js\"\nimport {\n    DataTableConfig,\n    DataTableSortState,\n    DataTableFilter,\n    DataTableFilterOption,\n    DataTableManager,\n} from \"../dataTable/DataTableConstants.js\"\nimport {\n    buildDataTableFilterOptions,\n    DataTableEntities,\n    getEntityNamesForDataTableFilter,\n    pickDefaultDataTableFilter,\n} from \"../dataTable/DataTableHelpers.js\"\nimport {\n    type EntitySelectorState,\n    EntitySelector,\n} from \"../entitySelector/EntitySelector.js\"\nimport { FacetChart } from \"../facet/FacetChart.js\"\nimport { FocusArray } from \"../focus/FocusArray.js\"\nimport { GlobeController } from \"../mapCharts/GlobeController.js\"\nimport {\n    MAP_REGION_LABELS,\n    MAP_REGION_NAMES,\n    MapChartManager,\n} from \"../mapCharts/MapChartConstants.js\"\nimport { MapConfig } from \"../mapCharts/MapConfig.js\"\nimport { DumbbellChartConfig } from \"../dumbbellCharts/DumbbellChartConfig.js\"\nimport { SwimlaneChartConfig } from \"../swimlaneCharts/SwimlaneChartConfig.js\"\nimport { getCountriesByRegion } from \"../mapCharts/MapHelpers.js\"\nimport {\n    DownloadModalManager,\n    DownloadModalTabName,\n} from \"../modal/DownloadModal.js\"\nimport { SelectionArray } from \"../selection/SelectionArray.js\"\nimport { SlideShowController } from \"../slideshowController/SlideShowController.js\"\nimport {\n    TimelineDragTarget,\n    TimelineController,\n    TimelineManager,\n} from \"../timeline/TimelineController.js\"\nimport { TooltipManager } from \"../tooltip/TooltipProps.js\"\nimport {\n    RegionGroup,\n    groupEntitiesByRegionType,\n    EntitiesByRegionGroup,\n} from \"./RegionGroups.js\"\nimport {\n    MinimalNarrativeChartInfo,\n    GrapherProgrammaticInterface,\n    GrapherManager,\n} from \"./Grapher.js\"\nimport { GrapherAnalytics } from \"./GrapherAnalytics.js\"\nimport {\n    type GrapherAnalyticsContext,\n    type EntitySelectorEvent,\n    type GrapherImageDownloadEvent,\n    type GrapherInteractionEvent,\n    type SelectedEntityColors,\n} from \"@ourworldindata/types\"\nimport {\n    latestGrapherConfigSchema,\n    DEFAULT_GRAPHER_ENTITY_TYPE,\n    DEFAULT_GRAPHER_ENTITY_TYPE_PLURAL,\n    GRAPHER_FRAME_PADDING_HORIZONTAL,\n    GRAPHER_FRAME_PADDING_VERTICAL,\n    DEFAULT_GRAPHER_BOUNDS,\n    GrapherModal,\n    GRAPHER_PROD_URL,\n    DEFAULT_GRAPHER_WIDTH,\n    DEFAULT_GRAPHER_HEIGHT,\n    STATIC_EXPORT_DETAIL_SPACING,\n    DEFAULT_GRAPHER_BOUNDS_SQUARE,\n    CHART_TYPES_THAT_SHOW_ALL_ENTITIES,\n} from \"./GrapherConstants.js\"\nimport { grapherObjectToQueryParams } from \"./GrapherUrl.js\"\nimport {\n    parseGrapherQueryParams,\n    logInvalidQueryParams,\n} from \"./GrapherQueryParamParser.js\"\nimport { legacyToCurrentGrapherQueryParams } from \"./GrapherUrlMigrations.js\"\nimport { getErrorMessageRelatedQuestionUrl } from \"./relatedQuestion.js\"\nimport { shouldShowStaffControls } from \"./staffControls.js\"\nimport {\n    buildSourcesLineFromColumns,\n    pickColumnsForSourcesLine,\n} from \"./sourcesLine.js\"\nimport { ChartManager } from \"../chart/ChartManager.js\"\nimport { CaptionedChartManager } from \"../captionedChart/CaptionedChart.js\"\nimport { SourcesModalManager } from \"../modal/SourcesModal.js\"\nimport { DiscreteBarChartManager } from \"../barCharts/DiscreteBarChartConstants.js\"\nimport { ShareMenuManager } from \"../controls/ShareMenu.js\"\nimport { EmbedModalManager } from \"../modal/EmbedModal.js\"\nimport { ScatterPlotManager } from \"../scatterCharts/ScatterPlotChartConstants.js\"\nimport { MarimekkoChartManager } from \"../marimekko/MarimekkoChartConstants.js\"\nimport { FacetChartManager } from \"../facet/FacetChartConstants.js\"\nimport { EntitySelectorModalManager } from \"../modal/EntitySelectorModal.js\"\nimport { SettingsMenuManager } from \"../controls/SettingsMenu.js\"\nimport { SlopeChartManager } from \"../slopeCharts/SlopeChartConstants.js\"\nimport { selectPeerCountriesForGrapher } from \"./PeerCountrySelection.js\"\n\n// The admin client sets `window.admin`. It's typed here locally instead of\n// via a `declare global` Window augmentation: that augmentation would end up\n// in the published package's type declarations, polluting consumers' global\n// types (and JSR rejects global augmentations outright).\nfunction getWindowAdmin(): { isSuperuser?: unknown } | undefined {\n    return (window as { admin?: { isSuperuser?: unknown } }).admin\n}\n\nexport class GrapherState\n    implements\n        AxisManager,\n        TooltipManager,\n        CaptionedChartManager,\n        ChartManager,\n        DiscreteBarChartManager,\n        ScatterPlotManager,\n        MarimekkoChartManager,\n        MapChartManager,\n        SlopeChartManager,\n        DataTableManager,\n        FacetChartManager,\n        TimelineManager,\n        SettingsMenuManager,\n        EntitySelectorModalManager,\n        DownloadModalManager,\n        SourcesModalManager,\n        EmbedModalManager,\n        ShareMenuManager,\n        LegacyDimensionsManager\n{\n    //\n    // Chart settings persisted in the config\n    //\n\n    /** Url of the concrete schema version to use to validate this document */\n    $schema = latestGrapherConfigSchema\n\n    /** Internal database id */\n    id: number | undefined = undefined\n\n    /** Chart config version */\n    version = 1\n\n    /** Slug of the chart on Our World In Data */\n    slug: string | undefined = undefined\n\n    /** Big title text of the chart */\n    title: string | undefined = undefined\n\n    /** The longer subtitle text to show beneath the title */\n    subtitle: string | undefined = undefined\n\n    /** Indicates if the chart is published on Our World In Data or still in draft */\n    isPublished: boolean | undefined = undefined\n\n    /** The page containing this chart where more context can be found */\n    originUrl: string | undefined = undefined\n\n    /** The license the chart is published under, linked in the chart footer */\n    license: LicenseOption | undefined = undefined\n\n    /** Short comma-separated list of source names */\n    sourceDesc: string | undefined = undefined\n\n    /** Note displayed in the footer of the chart */\n    note: string | undefined = undefined\n\n    /** Additional text used internally to differentiate charts with the same title */\n    internalNotes: string | undefined = undefined\n\n    /** Optional internal variant name for distinguishing charts with the same title */\n    variantName: string | undefined = undefined\n\n    /** List of dimensions and their mapping to variables */\n    dimensions: ChartDimension[] = []\n\n    /** The initial selection of entities */\n    selectedEntityNames: EntityName[] = []\n\n    /** The initially focused chart elements. Is either a list of entity or variable names. Only works for line and slope charts for now. */\n    focusedSeriesNames: SeriesName[] = []\n\n    /** Entities that should be excluded (opposite of includedEntityNames) */\n    excludedEntityNames: EntityName[] | undefined = undefined\n\n    /** Entities that should be included (opposite of excludedEntityNames). If empty, all available entities are used. If set, all entities not specified here are excluded. excludedEntityNames are evaluated afterwards and can still remove entities even if they were included before. */\n    includedEntityNames: EntityName[] | undefined = undefined\n\n    /** Entities the indicator's data can't apply to by construction, e.g. Mexico for \"Where do Mexican emigrants live?\" */\n    inapplicableEntityNames: EntityName[] | undefined = undefined\n\n    /** Colors for selected entities */\n    selectedEntityColors: SelectedEntityColors = {}\n\n    /** Strategy for selecting peer countries for comparison */\n    peerCountryStrategy: PeerCountryStrategy | undefined = undefined\n\n    /** Whether the user can change countries, add additional ones or neither */\n    addCountryMode = EntitySelectionMode.MultipleEntities\n\n    /**\n     * Display string for naming the primary entities of the data.\n     *\n     * The default is 'country or region', but you can specify a different one\n     * such as 'state' or 'region'\n     */\n    entityType = DEFAULT_GRAPHER_ENTITY_TYPE\n\n    /** Plural of the entity type (e.g. when entityType is 'country' this would be 'countries') */\n    entityTypePlural = DEFAULT_GRAPHER_ENTITY_TYPE_PLURAL\n\n    /**\n     * Display string that replaces 'metric' in the 'Split by metric' label in\n     * facet controls (e.g. 'product' displays 'Split by product')\n     */\n    facettingLabelByYVariables = \"metric\"\n\n    /** Which chart types should be shown */\n    chartTypes: GrapherChartType[] = [\n        GRAPHER_CHART_TYPES.LineChart,\n        GRAPHER_CHART_TYPES.DiscreteBar,\n    ]\n\n    /** Indicates if the map tab should be shown */\n    hasMapTab = false\n\n    /** The tab that is shown initially */\n    tab: GrapherTabConfigOption = GRAPHER_TAB_CONFIG_OPTIONS.chart\n\n    /** Configuration of the x-axis */\n    xAxis = new AxisConfig(undefined, this)\n\n    /** Configuration of the y-axis */\n    yAxis = new AxisConfig(undefined, this)\n\n    /** Color scale definition */\n    colorScale = new ColorScaleConfig()\n\n    /** Configuration of the world map chart */\n    map = new MapConfig()\n\n    /** Configuration of the dumbbell chart */\n    dumbbell = new DumbbellChartConfig()\n\n    /** Configuration of the swimlane chart */\n    swimlane = new SwimlaneChartConfig()\n\n    /** One of the predefined base color schemes. If not provided, a default is automatically chosen based on the chart type. */\n    baseColorScheme: ColorSchemeName | undefined = undefined\n\n    /** Reverse the order of colors in the color scheme */\n    invertColorScheme: boolean | undefined = undefined\n\n    /** Which logo to show on the upper right side */\n    logo: LogoOption | undefined = undefined\n\n    /**\n     * Whether to hide the inline series labels drawn at the end of each\n     * series. Applies to line, slope, and stacked area charts\n     */\n    hideSeriesLabels: boolean | undefined = false\n\n    /** Whether to hide the logo */\n    hideLogo: boolean | undefined = undefined\n\n    /** Whether to hide the relative mode UI toggle */\n    hideRelativeToggle: boolean | undefined = true\n\n    /** Whether to hide connecting lines on scatter plots when a time range is selected */\n    hideConnectedScatterLines: boolean | undefined = undefined\n\n    /** Hide entity names in Scatter plots */\n    hideScatterLabels: boolean | undefined = undefined\n\n    /** Whether to hide the total value label (used on stacked discrete bar charts) */\n    hideTotalValueLabel: boolean | undefined = undefined\n\n    /** Whether to hide the faceting control */\n    hideFacetControl = true\n\n    /** Whether to hide any automatically added title annotations like the selected year */\n    hideAnnotationFieldsInTitle: AnnotationFieldsInTitle | undefined = undefined\n\n    /** Start point of the initially selected time span */\n    minTime: TimeBound | undefined = undefined\n\n    /** End point of the initially selected time span */\n    maxTime: TimeBound | undefined = undefined\n\n    /**\n     * The lowest year to show in the timeline.\n     *\n     * If this is set then the user is not able to see any data before this year.\n     * If set to \"earliest\", then the earliest year in the data is used.\n     */\n    timelineMinTime: Time | undefined = undefined\n\n    /** The highest year to show in the timeline.\n     *\n     * If this is set then the user is not able to see any data after this year.\n     * If set to \"latest\", then the latest year in the data is used.\n     */\n    timelineMaxTime: Time | undefined = undefined\n\n    /**\n     * Whether to hide the timeline from the user. If it is hidden then the\n     * user can't change the time\n     */\n    hideTimeline: boolean | undefined = undefined\n\n    /** Stack mode */\n    stackMode = StackMode.absolute\n\n    /** Whether to zoom to the selected data points */\n    zoomToSelection: boolean | undefined = undefined\n\n    /** Whether to show year labels in bar charts */\n    showYearLabels: boolean | undefined = undefined\n\n    /** Whether to show an area for entities that have no data (used in marimekko charts) */\n    showNoDataArea = true\n\n    /** Drops in between points in scatter plots */\n    compareEndPointsOnly: boolean | undefined = undefined\n\n    /** Exclude entities that do not belong in any color group */\n    matchingEntitiesOnly: boolean | undefined = undefined\n\n    /** The desired strategy for handling entities with missing data */\n    missingDataStrategy: MissingDataStrategy | undefined = undefined\n\n    /** When a user hovers over a connected series line in a ScatterPlot we show a label for each point. By default that value will be from the \"year\" column but by changing this option the column used for the x or y axis could be used instead. */\n    scatterPointLabelStrategy: ScatterPointLabelStrategy | undefined = undefined\n\n    /** The desired facetting strategy (none for no facetting) */\n    selectedFacetStrategy: FacetStrategy | undefined = undefined\n\n    /** Sort criterion (used by stacked bar charts and marimekko) */\n    sortBy: SortBy | undefined = SortBy.total\n\n    /** Sort order (used by stacked bar charts and marimekko) */\n    sortOrder: SortOrder | undefined = SortOrder.desc\n\n    /** Sort column if sortBy is column (used by stacked bar charts and marimekko) */\n    sortColumnSlug: string | undefined = undefined\n\n    /** List of comparison lines to draw */\n    comparisonLines: ComparisonLineConfig[] | undefined = undefined\n\n    /** Links to related questions */\n    relatedQuestions: RelatedQuestionsConfig[] | undefined = undefined\n\n    //\n    // Internal state not persisted in the config\n    //\n\n    /** Optional external manager */\n    private readonly manager: GrapherManager | undefined = undefined\n\n    /** Reference to the root DOM element containing the grapher */\n    base = React.createRef<HTMLDivElement>()\n\n    /** Initial options passed when creating the GrapherState instance */\n    initialOptions: GrapherProgrammaticInterface\n\n    /** The complete data table for the chart */\n    _inputTable: OwidTable = new OwidTable()\n\n    /** Optional custom function for fetching additional data beyond the main table */\n    additionalDataLoaderFn: AdditionalGrapherDataFetchFn | undefined = undefined\n\n    /** The original config as authored, used to detect user changes from authored defaults */\n    legacyConfigAsAuthored: Partial<LegacyGrapherInterface> = {}\n\n    /** Query parameters that don't correspond to standard Grapher parameters (like tab, time, etc.) */\n    externalQueryParams: QueryParams = {}\n\n    // These are explicitly set to `false` if FetchingGrapher or some other\n    // external code is fetching the config and data\n    isConfigReady: boolean | undefined = true\n    isDataReady: boolean | undefined = true\n\n    // Used in explorers\n    ySlugs: ColumnSlugs | undefined = undefined\n    xSlug: ColumnSlug | undefined = undefined\n    colorSlug: ColumnSlug | undefined = undefined\n    sizeSlug: ColumnSlug | undefined = undefined\n    tableSlugs: ColumnSlugs | undefined = undefined\n\n    bakedGrapherURL: string | undefined = undefined\n    canonicalUrlOverride: string | null | undefined = undefined\n    adminBaseUrl: string | undefined = undefined\n\n    isEmbeddedInAnOwidPage?: boolean = false\n    isEmbeddedInADataPage?: boolean = false\n    useNewDatapageMetadataLayout?: boolean = false\n\n    archiveContext?: ArchiveContext\n    narrativeChartInfo?: MinimalNarrativeChartInfo = undefined\n\n    analytics: GrapherAnalytics\n\n    tooltip?: TooltipManager[\"tooltip\"] = observable.box(undefined, {\n        deep: false,\n    })\n\n    variant = GrapherVariant.Default\n\n    /** Whether to hide a chart's legends */\n    hideLegend: boolean | undefined = false\n\n    /**\n     * Minimal labeling is used in search when a thumbnail is embedded\n     * alongside a complementary table because the table already provides a lot\n     * of information, which is why the chart can be simplified to avoid\n     * redundancy and visual clutter\n     */\n    useMinimalLabeling = false\n\n    // Bounds\n    staticBounds: Bounds = DEFAULT_GRAPHER_BOUNDS\n    _externalBounds: Bounds | undefined = undefined\n\n    selection: SelectionArray = new SelectionArray()\n    focusArray = new FocusArray()\n\n    dataTableConfig: DataTableConfig = { search: \"\" }\n    dataTableSort: DataTableSortState | undefined = undefined\n\n    entitySelectorState: Partial<EntitySelectorState> = {}\n\n    /**\n     * Used to highlight particular times in a line chart.\n     * The sparkline in map tooltips makes use of this.\n     */\n    highlightedTimesInLineChart?: Time[]\n\n    timelineController = new TimelineController(this)\n    globeController = new GlobeController(this)\n\n    /** Keeps a running cache of series colors at the Grapher level. */\n    seriesColorMap: SeriesColorMap = new Map()\n\n    isEntitySelectorModalOrDrawerOpen = false\n    activeModal?: GrapherModal\n    activeDownloadModalTab: DownloadModalTabName = DownloadModalTabName.Vis\n    isShareMenuActive = false\n    isCommandPaletteOpen = false\n\n    isTimelineAnimationPlaying = false\n    /** True if the timeline animation is either playing or paused but not finished */\n    isTimelineAnimationActive = false\n    disableChartRowAnimation = false\n    animationStartTime: Time | undefined = undefined\n    areHandlesOnSameTimeBeforeAnimation: boolean | undefined = undefined\n    /** Which timeline element is currently being dragged */\n    timelineDragTarget: TimelineDragTarget | undefined = undefined\n    /** The tolerance notice as of the start of a timeline interaction */\n    frozenToleranceNotice: { notice: string | undefined } | undefined =\n        undefined\n\n    // Display flags\n    hasTableTab = true\n    hideTitle = false\n    hideSubtitle = false\n    hideNote = false\n    hideOriginUrl = false\n    hideFullscreenButton = false\n    hideDownloadButton = false\n    hideEntityControls = false\n    hideShareButton = false\n    hideDonateButton = false\n    hideExploreTheDataButton = true\n    hideControlsRow = false\n    hideRelatedQuestion = false\n    canHideExternalControlsInEmbed: boolean = false\n    recommendedIframeEmbedHeight?: number\n    hideExternalControlsInEmbedUrl: boolean =\n        this.canHideExternalControlsInEmbed\n    forceHideAnnotationFieldsInTitle: AnnotationFieldsInTitle = {\n        entity: false,\n        time: false,\n        changeInPrefix: false,\n    }\n\n    /** Whether to allow entity selection via map interactions */\n    enableMapSelection = false\n\n    isExportingToSvgOrPng = false\n    isWikimediaExport = false\n    shouldIncludeDetailsInStaticExport = true\n\n    _isInFullScreenMode = false\n    windowInnerWidth: number | undefined = undefined\n    windowInnerHeight: number | undefined = undefined\n    screenHeight: number | undefined = undefined\n\n    enableKeyboardShortcuts: boolean = false\n    bindUrlToWindow: boolean = false\n\n    slideShow: SlideShowController<any> | undefined = undefined\n\n    private shouldApplyPeerCountries: boolean = false\n\n    /**\n     * Cached promise for peer country application to prevent duplicate operations.\n     *\n     * When peer countries are being applied asynchronously, this stores the promise\n     * so that subsequent calls to applyPeerCountriesIfNeeded() will wait for the\n     * existing operation instead of starting a new one. This prevents race conditions\n     * when the function is called from multiple places (e.g., inputTable setter and\n     * generateStaticSvg).\n     */\n    private peerCountriesPromise: Promise<void> | undefined = undefined\n\n    /** Whether the grapher is running in the editor */\n    private readonly isEditor =\n        typeof window !== \"undefined\" && (window as any).isEditor === true\n\n    disposers: (() => void)[] = []\n\n    constructor(options: GrapherProgrammaticInterface) {\n        makeObservable(this, {\n            $schema: observable.ref,\n            chartTypes: observable.ref,\n            id: observable.ref,\n            version: observable.ref,\n            slug: observable.ref,\n            title: observable.ref,\n            subtitle: observable.ref,\n            sourceDesc: observable.ref,\n            note: observable.ref,\n            internalNotes: observable.ref,\n            variantName: observable.ref,\n            originUrl: observable.ref,\n            license: observable.ref,\n            hideAnnotationFieldsInTitle: observable,\n            minTime: observable.ref,\n            maxTime: observable.ref,\n            timelineMinTime: observable.ref,\n            timelineMaxTime: observable.ref,\n            addCountryMode: observable.ref,\n            stackMode: observable.ref,\n            showNoDataArea: observable.ref,\n            hideLegend: observable.ref,\n            hideSeriesLabels: observable.ref,\n            logo: observable.ref,\n            hideLogo: observable.ref,\n            hideRelativeToggle: observable.ref,\n            entityType: observable.ref,\n            entityTypePlural: observable.ref,\n            facettingLabelByYVariables: observable.ref,\n            hideTimeline: observable.ref,\n            zoomToSelection: observable.ref,\n            showYearLabels: observable.ref,\n            hasMapTab: observable.ref,\n            tab: observable.ref,\n            isPublished: observable.ref,\n            baseColorScheme: observable.ref,\n            invertColorScheme: observable.ref,\n            hideConnectedScatterLines: observable,\n            hideScatterLabels: observable.ref,\n            scatterPointLabelStrategy: observable,\n            peerCountryStrategy: observable.ref,\n            compareEndPointsOnly: observable.ref,\n            matchingEntitiesOnly: observable.ref,\n            hideTotalValueLabel: observable.ref,\n            missingDataStrategy: observable.ref,\n            xAxis: observable.ref,\n            yAxis: observable.ref,\n            colorScale: observable,\n            map: observable,\n            dumbbell: observable,\n            swimlane: observable,\n            dimensions: observable.ref,\n            ySlugs: observable,\n            xSlug: observable,\n            colorSlug: observable,\n            sizeSlug: observable,\n            tableSlugs: observable,\n            selectedEntityColors: observable,\n            selectedEntityNames: observable,\n            focusedSeriesNames: observable,\n            excludedEntityNames: observable,\n            includedEntityNames: observable,\n            inapplicableEntityNames: observable,\n            comparisonLines: observable,\n            relatedQuestions: observable,\n            dataTableConfig: observable,\n            dataTableSort: observable,\n            highlightedTimesInLineChart: observable.ref,\n            hideFacetControl: observable.ref,\n            selectedFacetStrategy: observable,\n            sortBy: observable,\n            sortOrder: observable,\n            sortColumnSlug: observable,\n            _isInFullScreenMode: observable.ref,\n            windowInnerWidth: observable.ref,\n            windowInnerHeight: observable.ref,\n            screenHeight: observable.ref,\n            bakedGrapherURL: observable,\n            canonicalUrlOverride: observable,\n            externalQueryParams: observable.ref,\n            _inputTable: observable.ref,\n            legacyConfigAsAuthored: observable.ref,\n            entitySelectorState: observable,\n            isConfigReady: observable,\n            isDataReady: observable,\n            canHideExternalControlsInEmbed: observable.ref,\n            recommendedIframeEmbedHeight: observable.ref,\n            hideExternalControlsInEmbedUrl: observable.ref,\n            isExportingToSvgOrPng: observable.ref,\n            isWikimediaExport: observable.ref,\n            variant: observable.ref,\n            staticBounds: observable,\n            isTimelineAnimationPlaying: observable.ref,\n            isTimelineAnimationActive: observable.ref,\n            disableChartRowAnimation: observable.ref,\n            animationStartTime: observable.ref,\n            areHandlesOnSameTimeBeforeAnimation: observable.ref,\n            timelineDragTarget: observable.ref,\n            frozenToleranceNotice: observable.ref,\n            isEntitySelectorModalOrDrawerOpen: observable.ref,\n            activeModal: observable.ref,\n            activeDownloadModalTab: observable.ref,\n            shouldIncludeDetailsInStaticExport: observable,\n            _externalBounds: observable,\n            slideShow: observable,\n            isShareMenuActive: observable,\n            isCommandPaletteOpen: observable,\n            hideTitle: observable,\n            hideSubtitle: observable,\n            hideNote: observable,\n            hideOriginUrl: observable,\n            hideFullscreenButton: observable,\n            hideDownloadButton: observable,\n            hideEntityControls: observable,\n            hideControlsRow: observable,\n            enableMapSelection: observable,\n            forceHideAnnotationFieldsInTitle: observable,\n            hasTableTab: observable,\n            hideShareButton: observable,\n            hideDonateButton: observable,\n            hideExploreTheDataButton: observable,\n            useMinimalLabeling: observable,\n        })\n\n        this.updateFromObject(options)\n\n        this.additionalDataLoaderFn = options.additionalDataLoaderFn\n        this.isEmbeddedInAnOwidPage = options.isEmbeddedInAnOwidPage ?? false\n        this.isEmbeddedInADataPage = options.isEmbeddedInADataPage ?? false\n        this.useNewDatapageMetadataLayout =\n            options.useNewDatapageMetadataLayout ?? false\n\n        this._inputTable =\n            options.table ?? BlankOwidTable(`initialGrapherTable`)\n        this.initialOptions = options\n        this.analytics = new GrapherAnalytics(this.initialOptions.env ?? \"\")\n        this.selection =\n            this.manager?.selection ??\n            new SelectionArray(this.initialOptions.selectedEntityNames ?? [])\n        this.setAuthoredVersion(options)\n        this.canHideExternalControlsInEmbed =\n            options.canHideExternalControlsInEmbed ?? false\n        this.recommendedIframeEmbedHeight = options.recommendedIframeEmbedHeight\n        this.staticBounds = options.staticBounds ?? DEFAULT_GRAPHER_BOUNDS\n\n        this.narrativeChartInfo = options.narrativeChartInfo\n        this.archiveContext = options.archiveContext\n\n        this.populateFromQueryParams(\n            legacyToCurrentGrapherQueryParams(\n                this.initialOptions.queryStr ?? \"\"\n            )\n        )\n        if (this.isEditor) {\n            this.ensureValidConfigWhenEditing()\n        }\n    }\n\n    @action.bound updateFromObject(obj?: GrapherProgrammaticInterface): void {\n        if (!obj) return\n\n        updatePersistables(this, obj)\n\n        this.bindUrlToWindow = obj.bindUrlToWindow ?? false\n        this.canonicalUrlOverride = obj.canonicalUrl\n\n        // Update selection\n        if (obj.selectedEntityNames)\n            this.selection.setSelectedEntities(obj.selectedEntityNames)\n\n        // Update focus\n        if (obj.focusedSeriesNames)\n            this.focusArray.clearAllAndAdd(...obj.focusedSeriesNames)\n\n        // JSON doesn't support Infinity, so we use strings instead.\n        this.minTime = minTimeBoundFromJSONOrNegativeInfinity(obj.minTime)\n        this.maxTime = maxTimeBoundFromJSONOrPositiveInfinity(obj.maxTime)\n\n        this.timelineMinTime = minTimeBoundFromJSONOrNegativeInfinity(\n            obj.timelineMinTime\n        )\n        this.timelineMaxTime = maxTimeBoundFromJSONOrPositiveInfinity(\n            obj.timelineMaxTime\n        )\n\n        if (obj?.dimensions?.length)\n            this.setDimensionsFromConfigs(obj.dimensions)\n    }\n\n    toObject(): GrapherInterface {\n        const obj: GrapherInterface = objectWithPersistablesToObject(\n            this,\n            grapherKeysToSerialize\n        )\n\n        // Persist selection and focus\n        obj.selectedEntityNames = this.selection.selectedEntityNames\n        obj.focusedSeriesNames = this.focusArray.seriesNames\n\n        deleteRuntimeAndUnchangedProps(obj, defaultObject)\n\n        // Always include the schema, even if it's the default\n        obj.$schema = this.$schema || latestGrapherConfigSchema\n\n        // JSON doesn't support Infinity, so we use strings instead\n        if (obj.minTime) obj.minTime = minTimeToJSON(this.minTime)\n        if (obj.maxTime) obj.maxTime = maxTimeToJSON(this.maxTime)\n\n        if (obj.timelineMinTime)\n            obj.timelineMinTime = minTimeToJSON(this.timelineMinTime)\n        if (obj.timelineMaxTime)\n            obj.timelineMaxTime = maxTimeToJSON(this.timelineMaxTime)\n\n        // Don't serialize the tab if the default chart is currently shown\n        if (\n            this.activeChartType &&\n            this.activeChartType === this.defaultChartType\n        ) {\n            delete obj.tab\n        }\n\n        // Explorers set color properties directly on column defs.\n        // These properties wouldn't be serialized in the JSON config by default,\n        // so this code extracts them and adds them to the serialized object.\n        // Color properties from the color column are stored as obj.colorScale\n        if (this.inputColorColumnSlug && !obj.colorScale) {\n            const colorColumn = this.inputTable.get(this.inputColorColumnSlug)\n            const colorScaleConfig = ColorScaleConfig.fromDSL(colorColumn.def)\n            if (colorScaleConfig) obj.colorScale = colorScaleConfig.toObject()\n        }\n\n        // Similarly, color properties from the map column are stored as obj.map.colorScale\n        if (this.hasMapTab && this.mapColumnSlug && !obj.map?.colorScale) {\n            const mapColumn = this.inputTable.get(this.mapColumnSlug)\n            const colorScaleConfig = ColorScaleConfig.fromDSL(mapColumn.def)\n            if (colorScaleConfig) {\n                obj.map ??= {}\n                obj.map.colorScale = colorScaleConfig.toObject()\n            }\n        }\n\n        return obj\n    }\n\n    /** Returns an object ready to be serialized to JSON */\n    @computed get object(): GrapherInterface {\n        return this.toObject()\n    }\n\n    /**\n     * The complete, unfiltered data table for the chart.\n     *\n     * This is the raw input data provided to the Grapher. This table is the\n     * starting point for all data transformations in the pipeline. It contains\n     * all entities and all time periods present in the data before any filtering\n     * or chart-specific transforms are applied.\n     */\n    get inputTable(): OwidTable {\n        return this._inputTable\n    }\n\n    @action set inputTable(table: OwidTable) {\n        this._inputTable = table\n\n        if (this.manager?.selection?.hasSelection) {\n            // Selection is managed externally, do nothing\n        } else if (this.areSelectedEntitiesDifferentThanAuthors) {\n            // User has changed the selection, use theirs\n        } else this.applyOriginalSelectionAsAuthored()\n\n        // Add peer countries if requested\n        if (this.shouldApplyPeerCountries) {\n            void this.applyPeerCountriesIfNeeded().finally(() => {\n                // Ensure peer countries are only applied once on table load\n                this.shouldApplyPeerCountries = false\n            })\n        }\n    }\n\n    /**\n     * Input table with color and size tolerance applied.\n     *\n     * This happens _before_ applying the author's timeline filter to avoid\n     * accidentally dropping all color values before applying tolerance.\n     * This is especially important for scatter plots and Marimekko charts,\n     * where color and size columns are often transformed with infinite tolerance.\n     *\n     * Line and discrete bar charts also support a color dimension, but their\n     * tolerance transformations run in their respective transformTable functions\n     * since it's more efficient to run them on a table that has been filtered\n     * by selected entities.\n     */\n    @computed get tableAfterColorAndSizeToleranceApplication(): OwidTable {\n        let table = this.inputTable\n\n        const slugs = excludeUndefined([\n            this.hasScatter ? this.inputSizeColumnSlug : undefined,\n            this.hasScatter || this.hasMarimekko\n                ? this.inputCategoricalColorColumnSlug\n                : undefined,\n        ])\n\n        for (const slug of slugs) {\n            const tolerance = table.get(slug)?.display?.tolerance ?? Infinity\n            table = table\n                .interpolateColumnWithTolerance(slug, {\n                    toleranceOverride: tolerance,\n                })\n                // The data table re-applies each column's own tolerance\n                .updateDefs((def) =>\n                    def.slug === slug\n                        ? { ...def, display: { ...def.display, tolerance } }\n                        : def\n                )\n        }\n\n        return table\n    }\n\n    /**\n     * Table after author-specified entity and timeline filters have been applied.\n     *\n     * This is the earliest filtering step in the pipeline. The author can configure\n     * entity include/exclude patterns (includedEntityNames, excludedEntityNames) and\n     * timeline bounds (timelineMinTime, timelineMaxTime). These filters are applied\n     * before any chart-specific transforms, so to the charts it appears as if the\n     * filtered times and entities do not exist in the data.\n     */\n    @computed get tableAfterAuthorTimelineAndEntityFilter(): OwidTable {\n        let table = this.tableAfterColorAndSizeToleranceApplication\n\n        // Filter entities\n        table = table.filterByEntityNamesUsingIncludeExcludePattern({\n            excluded: this.excludedEntityNames,\n            included: this.includedEntityNames,\n        })\n\n        // Filter times\n        if (\n            this.timelineMinTime === undefined &&\n            this.timelineMaxTime === undefined\n        )\n            return table\n        return table.filterByTimeRange(\n            this.timelineMinTime ?? -Infinity,\n            this.timelineMaxTime ?? Infinity\n        )\n    }\n\n    /** The base data table after author-configured filters have been applied */\n    @computed get table(): OwidTable {\n        return this.tableAfterAuthorTimelineAndEntityFilter\n    }\n\n    /**\n     * Table after the active chart type's transformation has been applied.\n     *\n     * Different chart types (line, bar, scatter, etc.) have different data requirements\n     * and transformations. This property applies the chart-specific transformTable()\n     * method to prepare the data for that chart type's rendering. This happens before\n     * any user-selected time range filtering (startTime/endTime).\n     */\n    @computed get tableAfterAuthorTimelineAndActiveChartTransform(): OwidTable {\n        const table = this.table\n        if (!this.isReady) return table\n\n        const startMark = performance.now()\n\n        const transformedTable = this.chartState.transformTable(table)\n\n        this.createPerformanceMeasurement(\n            \"chartInstance.transformTable\",\n            startMark\n        )\n        return transformedTable\n    }\n\n    /**\n     * Table after all chart transforms and user-selected time range filtering.\n     *\n     * This applies the final filtering step based on the currently selected time range\n     * (startTime and endTime).\n     */\n    @computed\n    private get tableAfterAllTransformsAndFilters(): OwidTable {\n        const { startTime, endTime } = this\n        const table = this.tableAfterAuthorTimelineAndActiveChartTransform\n\n        if (startTime === undefined || endTime === undefined) return table\n\n        if (this.isOnMapTab) {\n            const targetTimes = this.isFaceted\n                ? [startTime, endTime]\n                : [endTime]\n\n            return table.filterByTargetTimes(targetTimes)\n        }\n\n        if (\n            this.isOnDiscreteBarTab ||\n            this.isOnMarimekkoTab ||\n            this.isOnTwoColumnDumbbellTab\n        )\n            return table.filterByTargetTimes([endTime])\n\n        // Any dumbbell reaching this point plots a single indicator, and so\n        // compares it across the two times the timeline handles sit on\n        if (this.isOnSlopeChartTab || this.isOnDumbbellTab)\n            return table.filterByTargetTimes([startTime, endTime])\n\n        return table.filterByTimeRange(startTime, endTime)\n    }\n\n    /** The final transformed table ready for chart rendering */\n    @computed get transformedTable(): OwidTable {\n        return this.tableAfterAllTransformsAndFilters\n    }\n\n    /** Table used to determine which entities can be selected in the entity selector */\n    @computed get tableForSelection(): OwidTable {\n        // Depending on the chart type, the criteria for being able to select an entity are\n        // different; e.g. for scatterplots, the entity needs to (1) not be excluded and\n        // (2) needs to have data for the x and y dimension.\n        let table =\n            this.isOnScatterTab || this.isOnMarimekkoTab\n                ? this.tableAfterAuthorTimelineAndActiveChartTransform\n                : this.table\n\n        if (!this.isReady) return table\n\n        // Some chart types (e.g. stacked area charts) choose not to show an entity\n        // with incomplete data. Such chart types define a custom transform function\n        // to ensure that the entity selector only offers entities that are actually plotted.\n        if (this.chartState.transformTableForSelection) {\n            table = this.chartState.transformTableForSelection(table)\n        }\n\n        return table\n    }\n\n    /** Base table for the data table tab */\n    @computed get tableForDisplayBeforeEntityFilter(): OwidTable {\n        let table = this.table\n\n        if (!this.isReady || !this.isOnTableTab) return table\n\n        if (this.chartState.transformTableForDisplay) {\n            table = this.chartState.transformTableForDisplay(table)\n        }\n\n        if (this.shouldShowSelectionOnlyInDataTable) {\n            table = table.filterByEntityNames(\n                this.selection.selectedEntityNames\n            )\n        }\n\n        return table\n    }\n\n    @computed private get dataTableEntities(): DataTableEntities {\n        return {\n            availableEntityNames:\n                this.tableForDisplayBeforeEntityFilter.availableEntityNames,\n            entitiesByRegionGroup: this.entitiesByRegionGroup,\n            selectedEntityNames: this.dataTableSelection.selectedEntityNames,\n        }\n    }\n\n    @computed get dataTableFilterOptions(): DataTableFilterOption[] {\n        return buildDataTableFilterOptions(this.dataTableEntities, {\n            canFilterBySelection:\n                !this.shouldShowSelectionOnlyInDataTable &&\n                this.dataTableSelection.hasSelection &&\n                this.canChangeAddOrHighlightEntities,\n        })\n    }\n\n    @computed get dataTableFilter(): DataTableFilter {\n        if (this.dataTableConfig.filter) return this.dataTableConfig.filter\n        if (this.dataTableConfig.search) return \"all\"\n        if (this.shouldShowSelectionOnlyInDataTable) return \"all\"\n        return pickDefaultDataTableFilter(this.dataTableFilterOptions)\n    }\n\n    /** Table for display in the data table tab */\n    @computed get tableForDisplay(): OwidTable {\n        const table = this.tableForDisplayBeforeEntityFilter\n        const visibleEntities = getEntityNamesForDataTableFilter(\n            this.dataTableFilter,\n            this.dataTableEntities\n        )\n        return visibleEntities.length < table.availableEntityNames.length\n            ? table.filterByEntityNames(visibleEntities)\n            : table\n    }\n\n    /**\n     * Table used for downloading when the user requests a data download\n     * of the complete data set */\n    @computed get tableForDownload(): OwidTable {\n        return this.prepareTableForDownload(this.table)\n    }\n\n    /**\n     * Table used for downloading when the user requests a data download\n     * of the currently displayed data.\n     */\n    @computed get filteredTableForDownload(): OwidTable {\n        if (this.isOnTableTab) {\n            let table = this.tableForDisplay\n\n            // The data table only shows data within the selected time range,\n            // so restrict the download to that range as well\n            const { startTime, endTime } = this\n            if (startTime !== undefined && endTime !== undefined) {\n                table = table.filterByTimeRange(startTime, endTime)\n            }\n\n            return this.prepareTableForDownload(table)\n        }\n\n        return this.prepareTableForDownload(this.transformedTable)\n    }\n\n    private prepareTableForDownload(table: OwidTable): OwidTable {\n        const dataSlugs = this.inputColumnSlugs\n\n        // x and y column slugs\n        const xySlugs = [\n            this.inputXColumnSlug,\n            ...this.inputYColumnSlugs,\n        ].filter((slug) => slug !== undefined)\n\n        // Time column slug to include in the downloaded table\n        const timeSlug = table.timeColumn.slug\n\n        // Original time column slugs to include\n        const originalTimeSlugs = xySlugs\n            .map((ySlug) => makeOriginalTimeSlugFromColumnSlug(ySlug))\n            .filter((slug) => table.has(slug))\n\n        // Annotation columns to include\n        const annotationSlugs = xySlugs\n            .map((slug) => makeAnnotationsSlug(slug))\n            .filter((slug) => table.has(slug))\n\n        // Select only relevant columns (in the right order)\n        table = table.select([\n            table.entityNameSlug, // Entity name column\n            table.entityCodeSlug, // Entity code column\n            timeSlug, // Time column\n            ...dataSlugs, // Data columns\n            ...originalTimeSlugs, // Original time columns\n            ...annotationSlugs, // Annotation columns\n        ])\n\n        // Drop rows without any x or y values\n        if (xySlugs.length > 0) {\n            table = table.dropRowsWithErrorValuesForAllColumns(xySlugs)\n        }\n\n        // Only keep original times that differ from the main time\n        for (const originalTimeSlug of originalTimeSlugs) {\n            if (!table.has(originalTimeSlug)) continue\n\n            const times = table.get(timeSlug).valuesIncludingErrorValues\n\n            // Replace original times that are the same as the main time\n            // with a missing value placeholder\n            table = table.replaceCells(\n                [originalTimeSlug],\n                (originalTime, index) => {\n                    return originalTime === times[index]\n                        ? ErrorValueTypes.MissingValuePlaceholder\n                        : originalTime\n                }\n            )\n        }\n\n        // Drop original time columns that are now completely empty\n        table = table.dropColumns(\n            originalTimeSlugs.filter((slug) => table.get(slug).numValues === 0)\n        )\n\n        // Drop empty annotation columns\n        table = table.dropColumns(\n            annotationSlugs.filter((slug) => table.get(slug).numValues === 0)\n        )\n\n        // Fill in missing entity codes\n        if (table.entityCodeColumn.numErrorValues > 0) {\n            table = table.replaceCells(\n                [OwidTableSlugs.EntityCode],\n                (value, index) => {\n                    if (isNotErrorValueOrEmptyCell(value)) return value\n\n                    const entityName = table.entityNameColumn\n                        .valuesIncludingErrorValues[index] as string\n\n                    const entityCode =\n                        this.inputTable.entityNameToCodeMap.get(entityName)\n\n                    return entityCode ?? value\n                }\n            )\n        }\n\n        // Drop entity code column if all values are empty (after backfilling)\n        const hasEntityCodes = table.entityCodeColumn.values.some(\n            (code) => code && code !== \"\"\n        )\n        if (!hasEntityCodes) {\n            table = table.dropColumns([OwidTableSlugs.EntityCode])\n        }\n\n        return table\n    }\n\n    /** Populates grapher state from URL query parameters */\n    @action.bound populateFromQueryParams(params: GrapherQueryParams): void {\n        // Store any external params not recognized by Grapher\n        this.externalQueryParams = _.omit(params, GRAPHER_QUERY_PARAM_KEYS)\n\n        // Parse all query params\n        const parsed = parseGrapherQueryParams(params)\n\n        // Log any invalid parameters for debugging\n        logInvalidQueryParams(parsed)\n\n        // Tab\n        if (parsed.tab.status === \"valid\") {\n            const tabName = this.mapTabConfigOptionToTabName(parsed.tab.value)\n            this.setTab(tabName)\n        } else if (parsed.tab.status === \"invalid\") {\n            // Reset the tab if an invalid value is provided\n            this.setTab(this.defaultTab)\n        }\n\n        // Overlay\n        if (parsed.overlay.status === \"valid\") {\n            this.activeModal = parsed.overlay.value.modal\n            if (parsed.overlay.value.downloadTab) {\n                this.activeDownloadModalTab = parsed.overlay.value.downloadTab\n            }\n        }\n\n        // Stack mode\n        if (parsed.stackMode.status === \"valid\") {\n            this.stackMode = parsed.stackMode.value\n        }\n\n        // Zoom to selection\n        if (parsed.zoomToSelection.status === \"valid\") {\n            this.zoomToSelection = true\n        }\n\n        // X-axis scale\n        if (parsed.xScale.status === \"valid\") {\n            this.xAxis.scaleType = parsed.xScale.value\n        }\n\n        // Y-axis scale\n        if (parsed.yScale.status === \"valid\") {\n            this.yAxis.scaleType = parsed.yScale.value\n        }\n\n        // Time\n        if (parsed.time.status === \"valid\") {\n            this.setTimeFromTimeQueryParam(parsed.time.value)\n        }\n\n        // Endpoints only\n        if (parsed.endpointsOnly.status === \"valid\") {\n            this.compareEndPointsOnly = parsed.endpointsOnly.value\n                ? true\n                : undefined\n        }\n\n        // Globe mode\n        if (parsed.globe.status === \"valid\") {\n            this.mapConfig.globe.isActive = parsed.globe.value\n        }\n\n        // Globe rotation\n        if (parsed.globeRotation.status === \"valid\") {\n            this.mapConfig.globe.rotation = parsed.globeRotation.value\n        }\n\n        // Globe zoom\n        if (parsed.globeZoom.status === \"valid\") {\n            this.mapConfig.globe.zoom = parsed.globeZoom.value\n        }\n\n        // Map region\n        if (parsed.region.status === \"valid\") {\n            this.map.region = parsed.region.value\n        }\n\n        // Map selection\n        if (parsed.mapSelect.status === \"valid\") {\n            this.mapConfig.selection.setSelectedEntities(parsed.mapSelect.value)\n        }\n\n        // Entity selection (country param)\n        if (\n            parsed.country.status === \"valid\" &&\n            this.addCountryMode !== EntitySelectionMode.Disabled\n        ) {\n            this.selection.setSelectedEntities(parsed.country.value)\n        }\n\n        // Focused series\n        if (parsed.focus.status === \"valid\") {\n            this.focusArray.clearAllAndAdd(...parsed.focus.value)\n        }\n\n        // Faceting\n        if (parsed.facet.status === \"valid\") {\n            this.selectedFacetStrategy = parsed.facet.value\n        }\n\n        // Uniform Y-axis (facet domain)\n        if (parsed.uniformYAxis.status === \"valid\") {\n            this.yAxis.facetDomain = parsed.uniformYAxis.value\n        }\n\n        // Show no data area (Marimekko charts)\n        if (parsed.showNoDataArea.status === \"valid\") {\n            this.showNoDataArea = parsed.showNoDataArea.value\n        }\n\n        // Deprecated: showSelectionOnlyInTable (legacy URL support)\n        if (parsed.showSelectionOnlyInTable.status === \"valid\") {\n            this.dataTableConfig.filter = parsed.showSelectionOnlyInTable.value\n        }\n\n        // Table filter (overrides deprecated param if both present)\n        if (parsed.tableFilter.status === \"valid\") {\n            this.dataTableConfig.filter = parsed.tableFilter.value\n        } else if (parsed.tableFilter.status === \"invalid\") {\n            this.dataTableConfig.filter = undefined\n        }\n\n        // Table search\n        if (parsed.tableSearch.status === \"valid\") {\n            this.dataTableConfig.search = parsed.tableSearch.value\n        }\n\n        // Peer countries\n        if (parsed.peerCountries.status === \"valid\") {\n            if (parsed.peerCountries.value === \"auto\") {\n                this.peerCountryStrategy ??= PeerCountryStrategy.Neighbors\n            } else {\n                this.peerCountryStrategy = parsed.peerCountries.value\n            }\n\n            // Apply immediately if we have data, otherwise set flag to apply later\n            if (this.availableEntityNames.length > 0) {\n                this.shouldApplyPeerCountries = true\n                void this.applyPeerCountriesIfNeeded().finally(() => {\n                    this.shouldApplyPeerCountries = false\n                })\n            } else {\n                this.shouldApplyPeerCountries = true\n            }\n        } else if (parsed.peerCountries.status === \"invalid\") {\n            // Clear the strategy if an invalid value was provided\n            this.peerCountryStrategy = undefined\n        }\n    }\n\n    @action.bound setTimeFromTimeQueryParam(time: string): void {\n        this.timelineHandleTimeBounds = getTimeDomainFromQueryString(time).map(\n            (time) => findClosestTime(this.times, time) ?? time\n        ) as TimeBounds\n    }\n\n    @computed private get isDev(): boolean {\n        return this.initialOptions.env === \"dev\"\n    }\n\n    @computed get dataTableSlugs(): ColumnSlug[] {\n        return this.tableSlugs ? this.tableSlugs.split(\" \") : this.newSlugs\n    }\n\n    @action.bound setAuthoredVersion(\n        config: Partial<LegacyGrapherInterface>\n    ): void {\n        this.legacyConfigAsAuthored = config\n    }\n\n    @action.bound updateAuthoredVersion(\n        config: Partial<LegacyGrapherInterface>\n    ): void {\n        this.legacyConfigAsAuthored = {\n            ...this.legacyConfigAsAuthored,\n            ...config,\n        }\n    }\n\n    @computed get activeTab(): GrapherTabName {\n        return this.mapTabConfigOptionToTabName(this.tab)\n    }\n\n    @computed get activeChartType(): GrapherChartType | undefined {\n        return isChartTypeName(this.activeTab) ? this.activeTab : undefined\n    }\n\n    @computed private get defaultChartType(): GrapherChartType {\n        return this.chartType ?? GRAPHER_CHART_TYPES.LineChart\n    }\n\n    @computed private get defaultTab(): GrapherTabName {\n        if (this.chartType) return this.chartType\n        if (this.hasMapTab) return GRAPHER_TAB_NAMES.WorldMap\n        return GRAPHER_TAB_NAMES.Table\n    }\n\n    @action.bound resetToDefaultTab(): void {\n        this.setTab(this.defaultTab)\n    }\n\n    @computed get chartType(): GrapherChartType | undefined {\n        return this.validChartTypes[0]\n    }\n\n    @computed get hasChartTab(): boolean {\n        return this.validChartTypes.length > 0\n    }\n\n    @computed get isOnChartTab(): boolean {\n        return !this.isOnMapTab && !this.isOnTableTab\n    }\n\n    @computed get isOnMapTab(): boolean {\n        return this.activeTab === GRAPHER_TAB_NAMES.WorldMap\n    }\n\n    @computed get isOnTableTab(): boolean {\n        return this.activeTab === GRAPHER_TAB_NAMES.Table\n    }\n\n    @computed get isOnChartOrMapTab(): boolean {\n        return this.isOnChartTab || this.isOnMapTab\n    }\n\n    @computed get yAxisConfig(): Readonly<AxisConfigInterface> {\n        return this.yAxis.toObject()\n    }\n\n    @computed get xAxisConfig(): Readonly<AxisConfigInterface> {\n        return this.xAxis.toObject()\n    }\n\n    @computed get showSeriesLabels(): boolean {\n        return !this.hideSeriesLabels\n    }\n\n    @computed get showLegend(): boolean {\n        // Don't show any legends in minimal mode\n        if (this.useMinimalLabeling) return false\n\n        // Hide the legend for stacked bar charts if the legend only ever shows a single entity\n        if (this.isOnStackedBarTab) {\n            const seriesStrategy =\n                this.chartState.seriesStrategy ||\n                autoDetectSeriesStrategy(this, true)\n            const isEntityStrategy = seriesStrategy === SeriesStrategy.entity\n            const hasSingleEntity = this.selection.numSelectedEntities === 1\n            const hideLegend =\n                this.hideLegend || (isEntityStrategy && hasSingleEntity)\n            return !hideLegend\n        }\n\n        return !this.hideLegend\n    }\n\n    private isChartTypeThatShowsAllEntities(\n        chartType: GrapherChartType\n    ): boolean {\n        return CHART_TYPES_THAT_SHOW_ALL_ENTITIES.includes(chartType)\n    }\n\n    @computed private get hasChartThatShowsAllEntities(): boolean {\n        return this.validChartTypes.some((chartType) =>\n            this.isChartTypeThatShowsAllEntities(chartType)\n        )\n    }\n\n    @computed get isOnArchivalPage(): boolean {\n        return this.archiveContext?.type === \"archive-page\"\n    }\n\n    @computed get hasArchivedPage(): boolean {\n        return this.archiveContext?.type === \"archived-page-version\"\n    }\n\n    /**\n     * We only show the selected entities in the data table if entity selection\n     * is disabled – unless there is a view that displays all data points, like\n     * a map or a scatter plot.\n     */\n    @computed get shouldShowSelectionOnlyInDataTable(): boolean {\n        return (\n            this.selection.hasSelection &&\n            !this.canChangeAddOrHighlightEntities &&\n            this.hasChartTab &&\n            !this.hasChartThatShowsAllEntities &&\n            !this.hasMapTab\n        )\n    }\n\n    /**\n     * Selection used in Grapher's data table.\n     *\n     * If a map selection is set, it is preferred over the chart selection.\n     */\n    @computed get dataTableSelection(): SelectionArray {\n        return this.mapConfig.selection.hasSelection\n            ? this.mapConfig.selection\n            : this.selection\n    }\n\n    @computed get chartState(): ChartState {\n        return this.isOnMapTab\n            ? makeChartState(GRAPHER_MAP_TYPE, this)\n            : this.chartStateExceptMap\n    }\n\n    @computed get facetChartInstance(): FacetChart | undefined {\n        if (!this.isFaceted) return undefined\n        return new FacetChart({\n            manager: this,\n            chartTypeName: this.activeChartType,\n        })\n    }\n\n    @computed private get activeChartTypeOrDefault(): GrapherChartType {\n        return this.activeChartType ?? this.defaultChartType\n    }\n\n    @computed get chartStateExceptMap(): ChartState {\n        return makeChartState(this.activeChartTypeOrDefault, this)\n    }\n\n    @computed private get chartSeriesNames(): SeriesName[] {\n        if (!this.isReady) return []\n\n        // Collect series names from all chart instances when faceted\n        if (this.isFaceted) {\n            return _.uniq(\n                this.facetChartInstance?.intermediateChartInstances.flatMap(\n                    (chartInstance) =>\n                        chartInstance.chartState.series.map(\n                            (series) => series.seriesName\n                        )\n                ) ?? []\n            )\n        }\n\n        return this.chartState.series.map((series) => series.seriesName)\n    }\n\n    @computed get focusableSeriesNames(): SeriesName[] {\n        if (this.isOnStackedDiscreteBarTab) {\n            return [\n                ...this.chartSeriesNames,\n                ...this.selection.selectedEntityNames,\n            ]\n        }\n        return this.chartSeriesNames\n    }\n\n    @computed get isStatic(): boolean {\n        return this.isExportingToSvgOrPng\n    }\n\n    @computed get editUrl(): string | undefined {\n        if (this.showAdminControls && this.adminBaseUrl && this.id) {\n            return `${this.adminBaseUrl}/admin/charts/${this.id}/edit`\n        }\n        return undefined\n    }\n\n    @computed get createNarrativeChartUrl(): string | undefined {\n        const adminPath = this.manager?.adminCreateNarrativeChartPath\n        if (!this.showAdminControls || !this.isPublished || !adminPath)\n            return undefined\n\n        const url = Url.fromURL(`${this.adminBaseUrl}/admin/${adminPath}`)\n\n        // Pass the live grapher state along so that the narrative chart starts\n        // out matching what the user is currently looking at, rather than the\n        // authored defaults. We send it as a single encoded param so that it\n        // can't collide with the params already present in `adminPath`.\n        const grapherQueryStr = this.queryStr.replace(/^\\?/, \"\")\n        if (!grapherQueryStr) return url.fullUrl\n\n        return url.updateQueryParams({ grapherQueryStr }).fullUrl\n    }\n\n    @computed private get isAdminObjectAvailable(): boolean {\n        if (typeof window === \"undefined\") return false\n        const admin = getWindowAdmin()\n        return (\n            admin !== undefined &&\n            // Ensure that we're not accidentally matching on a DOM element with an ID of \"admin\"\n            typeof admin.isSuperuser === \"boolean\"\n        )\n    }\n\n    @computed get isAdmin(): boolean {\n        if (typeof window === \"undefined\") return false\n        if (this.isAdminObjectAvailable) return true\n\n        // Using this.isAdminObjectAvailable is not enough because it's not\n        // available in gdoc previews, which render in an iframe without the\n        // admin scaffolding.\n        if (this.adminBaseUrl && this.isInIFrame) {\n            try {\n                const adminUrl = new URL(this.adminBaseUrl)\n                const currentUrl = new URL(window.location.href)\n                return adminUrl.host === currentUrl.host\n            } catch {\n                return false\n            }\n        }\n\n        return false\n    }\n\n    @computed get showAdminControls(): boolean {\n        return (\n            shouldShowStaffControls() ||\n            this.isAdmin || // Useful for gdoc previews.\n            this.isDev\n        )\n    }\n\n    // Exclusively used for the performance.measurement API, so that DevTools can show some context\n    createPerformanceMeasurement(name: string, startMark: number): void {\n        const endMark = performance.now()\n        // This runs inside computeds; keep performance metadata reads from becoming dependencies\n        const detail = untracked(() => ({\n            devtools: {\n                track: \"Grapher\",\n                properties: [\n                    // might be missing for charts within explorers or mdims\n                    [\"slug\", this.slug ?? \"missing-slug\"],\n                    [\"chartTypes\", this.validChartTypes],\n                    [\"tab\", this.tab],\n                ],\n            },\n        }))\n\n        try {\n            performance.measure(name, {\n                start: startMark,\n                end: endMark,\n                detail,\n            })\n        } catch {\n            // In old browsers, the above may throw an error - just ignore it\n        }\n    }\n\n    @action.bound private applyOriginalFocusAsAuthored(): void {\n        const authoredSeriesNames =\n            this.legacyConfigAsAuthored.focusedSeriesNames ??\n            this.focusedSeriesNames\n\n        if (authoredSeriesNames?.length)\n            this.focusArray.clearAllAndAdd(...authoredSeriesNames)\n    }\n\n    @action.bound private applyOriginalSelectionAsAuthored(): void {\n        const authoredEntityNames =\n            this.legacyConfigAsAuthored.selectedEntityNames ??\n            this.selectedEntityNames\n\n        if (authoredEntityNames?.length)\n            this.selection.setSelectedEntities(authoredEntityNames)\n    }\n\n    @computed get hasData(): boolean {\n        return this.dimensions.length > 0 || this.newSlugs.length > 0\n    }\n\n    /**\n     * Ready to go if we have retrieved data for every variable associated\n     * with the chart or the config and data are marked as ready\n     */\n    @computed get isReady(): boolean {\n        if (!this.isConfigReady) return false\n        if (!this.isDataReady) return false\n        return this.whatAreWeWaitingFor === \"\"\n    }\n\n    @computed get whatAreWeWaitingFor(): string {\n        const { newSlugs, inputTable, dimensions } = this\n        if (newSlugs.length || dimensions.length === 0) {\n            const missingColumns = newSlugs.filter(\n                (slug) => !inputTable.has(slug)\n            )\n            return missingColumns.length\n                ? `Waiting for columns ${missingColumns.join(\",\")} in table '${inputTable.tableSlug}'. ${inputTable.tableDescription}`\n                : \"\"\n        }\n        if (dimensions.length > 0 && this.loadingDimensions.length === 0)\n            return \"\"\n        return `Waiting for dimensions ${this.loadingDimensions.map((dim) => dim.columnSlug).join(\", \")}.`\n    }\n\n    @computed get newSlugs(): string[] {\n        const { xSlug, colorSlug, sizeSlug } = this\n        const ySlugs = this.ySlugs ? this.ySlugs.split(\" \") : []\n        return excludeUndefined([...ySlugs, xSlug, colorSlug, sizeSlug])\n    }\n\n    @computed private get loadingDimensions(): ChartDimension[] {\n        return this.dimensions.filter(\n            (dim) => !this.inputTable.has(dim.columnSlug)\n        )\n    }\n\n    @computed get isInIFrame(): boolean {\n        return isInIFrame()\n    }\n\n    @computed get times(): Time[] {\n        const { mapColumnSlug, projectionColumnInfoBySlug, yColumnSlugs } = this\n\n        // If the map shows historical and projected data, then the time range\n        // has to extend to the full range of both indicators\n        const mapColumnInfo = projectionColumnInfoBySlug.get(mapColumnSlug)\n        const mapColumnSlugs = mapColumnInfo\n            ? [mapColumnInfo.projectedSlug, mapColumnInfo.historicalSlug]\n            : [mapColumnSlug]\n\n        const columnSlugs = this.isOnMapTab ? mapColumnSlugs : yColumnSlugs\n\n        // Generate the times only after the chart transform has been applied,\n        // so that we don't show times on the timeline for which data may not\n        // exist, e.g. when the selected entity doesn't contain data for all\n        // years in the table. The table tab is the exception: it uses the\n        // table it displays.\n        const table = this.isOnTableTab\n            ? this.tableForDisplayBeforeEntityFilter\n            : this.tableAfterAuthorTimelineAndActiveChartTransform\n        return table.getTimesUniqSortedAscForColumns(columnSlugs)\n    }\n\n    /** Plots time on the x-axis */\n    @computed private get hasTimeDimension(): boolean {\n        return (\n            this.isStackedBar ||\n            this.isStackedArea ||\n            this.isLineChart ||\n            this.isSwimlane\n        )\n    }\n\n    @computed private get hasTimeDimensionButTimelineIsHidden(): boolean {\n        return this.hasTimeDimension && !!this.hideTimeline\n    }\n\n    @computed get startHandleTimeBound(): TimeBound {\n        if (this.isSingleTimeSelectionActive) return this.endHandleTimeBound\n        return this.timelineHandleTimeBounds[0]\n    }\n\n    private set startHandleTimeBound(newValue: TimeBound) {\n        if (this.isSingleTimeSelectionActive)\n            this.timelineHandleTimeBounds = [newValue, newValue]\n        else\n            this.timelineHandleTimeBounds = [\n                newValue,\n                this.timelineHandleTimeBounds[1],\n            ]\n    }\n\n    private set endHandleTimeBound(newValue: TimeBound) {\n        if (this.isSingleTimeSelectionActive)\n            this.timelineHandleTimeBounds = [newValue, newValue]\n        else\n            this.timelineHandleTimeBounds = [\n                this.timelineHandleTimeBounds[0],\n                newValue,\n            ]\n    }\n\n    @computed get endHandleTimeBound(): TimeBound {\n        return this.timelineHandleTimeBounds[1]\n    }\n\n    @computed get closestTimelineMinTime(): Time | undefined {\n        return findClosestTime(this.times, this.timelineMinTime ?? -Infinity)\n    }\n\n    @computed get closestTimelineMaxTime(): Time | undefined {\n        return findClosestTime(this.times, this.timelineMaxTime ?? Infinity)\n    }\n\n    @computed get startTime(): Time | undefined {\n        return findClosestTime(this.times, this.startHandleTimeBound)\n    }\n\n    @computed get endTime(): Time | undefined {\n        return findClosestTime(this.times, this.endHandleTimeBound)\n    }\n\n    @computed get isSingleTimeScatterAnimationActive(): boolean {\n        return (\n            this.isTimelineAnimationActive &&\n            this.isOnScatterTab &&\n            !this.isRelativeMode &&\n            !!this.areHandlesOnSameTimeBeforeAnimation\n        )\n    }\n\n    @computed private get isSingleTimeMapAnimationActive(): boolean {\n        return (\n            this.isTimelineAnimationActive &&\n            this.isOnMapTab &&\n            !!this.areHandlesOnSameTimeBeforeAnimation\n        )\n    }\n\n    @computed private get onlySingleTimeSelectionPossible(): boolean {\n        return this.checkOnlySingleTimeSelectionPossible(this.activeTab)\n    }\n\n    @computed get onlyTimeRangeSelectionPossible(): boolean {\n        return this.checkOnlyTimeRangeSelectionPossible(this.activeTab)\n    }\n\n    @computed get isSingleTimeSelectionActive(): boolean {\n        return (\n            this.onlySingleTimeSelectionPossible ||\n            this.isSingleTimeScatterAnimationActive ||\n            this.isSingleTimeMapAnimationActive\n        )\n    }\n\n    @computed get shouldLinkToOwid(): boolean {\n        if (\n            this.isEmbeddedInAnOwidPage ||\n            this.isExportingToSvgOrPng ||\n            !this.isInIFrame\n        )\n            return false\n\n        return true\n    }\n\n    @computed get hasOWIDLogo(): boolean {\n        return (\n            !this.hideLogo && (this.logo === undefined || this.logo === \"owid\")\n        )\n    }\n\n    @computed get hasFatalErrors(): boolean {\n        const { relatedQuestions = [] } = this\n        return relatedQuestions.some(\n            (question) => !!getErrorMessageRelatedQuestionUrl(question)\n        )\n    }\n\n    @action.bound setTab(newTab: GrapherTabName): void {\n        this.tab = this.mapTabNameToTabConfigOption(newTab)\n    }\n\n    @action.bound private ensureHandlesAreOnSameTime(): void {\n        if (this.areHandlesOnSameTime) return\n\n        this.timelineHandleTimeBounds = [\n            this.endHandleTimeBound,\n            this.endHandleTimeBound,\n        ]\n    }\n\n    @action.bound private ensureHandlesAreOnDifferentTimes(): void {\n        if (!this.areHandlesOnSameTime) return\n\n        const timeBound = this.endHandleTimeBound // same as startHandleTimeBound\n        if (this.startTime === this.closestTimelineMinTime) {\n            this.timelineHandleTimeBounds = [timeBound ?? -Infinity, Infinity]\n        } else {\n            this.timelineHandleTimeBounds = [-Infinity, timeBound ?? Infinity]\n        }\n    }\n\n    @computed get entitySelector(): EntitySelector {\n        const entitySelectorArray = this.isOnMapTab\n            ? this.mapConfig.selection\n            : this.selection\n        return new EntitySelector({\n            manager: this,\n            selection: entitySelectorArray,\n        })\n    }\n\n    /**\n     * Dumbbell charts plotting two indicators compare them at a single time,\n     * whereas those plotting one indicator compare it across two times\n     */\n    private readonly checkIsTwoColumnDumbbell = (\n        tabName: GrapherTabName\n    ): boolean => {\n        return (\n            tabName === GRAPHER_TAB_NAMES.Dumbbell &&\n            this.yColumnSlugs.length >= 2\n        )\n    }\n\n    private readonly checkOnlySingleTimeSelectionPossible = (\n        tabName: GrapherTabName\n    ): boolean => {\n        return (\n            tabName === GRAPHER_TAB_NAMES.DiscreteBar ||\n            tabName === GRAPHER_TAB_NAMES.StackedDiscreteBar ||\n            tabName === GRAPHER_TAB_NAMES.Marimekko ||\n            this.checkIsTwoColumnDumbbell(tabName)\n        )\n    }\n\n    /** Whether the authored config selects a time range rather than a single time */\n    @computed private get isAuthoredTimeRange(): boolean {\n        const { minTime, maxTime } = this.authorsVersion\n        return (\n            minTimeBoundFromJSONOrNegativeInfinity(minTime) !==\n            maxTimeBoundFromJSONOrPositiveInfinity(maxTime)\n        )\n    }\n\n    private readonly checkSingleTimeSelectionPreferred = (\n        tabName: GrapherTabName\n    ): boolean => {\n        if (tabName === GRAPHER_TAB_NAMES.Table) return true\n\n        if (tabName !== GRAPHER_TAB_NAMES.ScatterPlot) return false\n        if (this.isRelativeMode) return false\n\n        // A secondary scatter prefers a single time, a primary one follows its\n        // authored time mode\n        return !this.isScatter || !this.isAuthoredTimeRange\n    }\n\n    private readonly checkOnlyTimeRangeSelectionPossible = (\n        tabName: GrapherTabName\n    ): boolean => {\n        return (\n            tabName === GRAPHER_TAB_NAMES.LineChart ||\n            tabName === GRAPHER_TAB_NAMES.SlopeChart ||\n            tabName === GRAPHER_TAB_NAMES.Swimlane ||\n            (tabName === GRAPHER_TAB_NAMES.Dumbbell &&\n                !this.checkIsTwoColumnDumbbell(tabName))\n        )\n    }\n\n    private readonly checkTimeRangeSelectionPreferred = (\n        tabName: GrapherTabName\n    ): boolean => {\n        // In relative mode, a scatter shows the average annual change, which\n        // requires a time range\n        if (tabName === GRAPHER_TAB_NAMES.ScatterPlot)\n            return (\n                this.isRelativeMode ||\n                (this.isScatter && this.isAuthoredTimeRange)\n            )\n\n        return [\n            GRAPHER_TAB_NAMES.StackedArea,\n            GRAPHER_TAB_NAMES.StackedBar,\n        ].includes(tabName as any)\n    }\n\n    @action.bound ensureTimeHandlesAreSensibleForTab(\n        tab: GrapherTabName\n    ): void {\n        if (\n            this.checkOnlySingleTimeSelectionPossible(tab) ||\n            this.checkSingleTimeSelectionPreferred(tab)\n        ) {\n            this.ensureHandlesAreOnSameTime()\n        } else if (\n            this.checkOnlyTimeRangeSelectionPossible(tab) ||\n            this.checkTimeRangeSelectionPreferred(tab)\n        ) {\n            this.ensureHandlesAreOnDifferentTimes()\n        }\n    }\n\n    @action.bound private ensureEntitySelectionIsSensibleForTab(\n        tab: GrapherTabName\n    ): void {\n        // No-op if the current tab is a map or table tab\n        if (!isChartTab(tab)) return\n\n        // Don't modify the selection for time scatters or primary scatter plots\n        if (this.isOnTimeScatterTab || (this.isOnScatterTab && this.isScatter))\n            return\n\n        const isChartTypeThatShowsAllEntities =\n            this.isChartTypeThatShowsAllEntities(tab)\n\n        // If the chart show all entities (e.g. scatter plot or Marimekko chart),\n        // then we typically prefer no selection unless the user has explicitly\n        // made changes to the default selection\n        if (\n            isChartTypeThatShowsAllEntities &&\n            !this.areSelectedEntitiesDifferentThanAuthors\n        ) {\n            this.selection.clearSelection()\n        }\n\n        // If the chart type only shows a subset of entities at a time\n        // (e.g. line chart), then an empty selection is not useful, so we\n        // automatically apply the author's selection\n        if (!isChartTypeThatShowsAllEntities && !this.selection.hasSelection) {\n            this.applyOriginalSelectionAsAuthored()\n        }\n    }\n\n    /** Call after `setTab`, so that `activeTab` is already the given tab */\n    @action.bound adjustStateForTab(tab: GrapherTabName): void {\n        if (!this.isReady)\n            console.warn(\n                \"adjustStateForTab has been called before grapher has loaded its data, this is probably a mistake\"\n            )\n\n        if (tab !== this.activeTab)\n            console.warn(\n                `adjustStateForTab has been called with ${tab} while the active tab is ${this.activeTab}; call setTab first, since the adjustments read the active tab`\n            )\n\n        // Skip in the editor: these adjustments mutate the entity selection\n        // and time handles as a side effect of switching tabs, and the editor\n        // persists the live state on save, which would silently alter the\n        // authored config (see #6794)\n        if (!this.isEditor) {\n            this.ensureEntitySelectionIsSensibleForTab(tab)\n            this.ensureTimeHandlesAreSensibleForTab(tab)\n        }\n\n        // Stop animation when switching to a tab where playback is disabled\n        if (this.disablePlay && this.isTimelineAnimationActive) {\n            this.timelineController.stop()\n        }\n    }\n\n    @action.bound syncEntitySelectionBetweenChartAndMap(\n        oldTab: GrapherTabName,\n        newTab: GrapherTabName\n    ): void {\n        // Sync entity selection between the map and the chart tab if entity\n        // selection is enabled for the map, and the map has been interacted\n        // with, i.e. at least one country has been selected on the map\n        const shouldSyncSelection =\n            this.addCountryMode !== EntitySelectionMode.Disabled &&\n            this.isMapSelectionEnabled &&\n            this.mapConfig.selection.hasSelection\n\n        // Switching from the chart tab to the map tab\n        if (!isMapTab(oldTab) && isMapTab(newTab) && shouldSyncSelection) {\n            this.mapConfig.selection.setSelectedEntities(\n                this.selection.selectedEntityNames\n            )\n        }\n\n        // Switching from the map tab to the chart tab\n        if (isMapTab(oldTab) && !isMapTab(newTab) && shouldSyncSelection) {\n            this.selection.setSelectedEntities(\n                this.mapConfig.selection.selectedEntityNames\n            )\n        }\n    }\n\n    @action.bound private validateEntitySelectorState(\n        newTab: GrapherTabName\n    ): void {\n        if (isMapTab(newTab) || isChartTab(newTab)) {\n            const { entitySelector } = this\n\n            // The map and chart tab might have a different set of sort columns;\n            // if the currently selected sort column is invalid, reset it to the default\n            const sortSlug = entitySelector.sortConfig.slug\n            if (!entitySelector.isSortSlugValid(sortSlug)) {\n                this.entitySelectorState.sortConfig =\n                    entitySelector.getDefaultSortConfig()\n            }\n\n            // The map and chart tab might have a different set of entity filters;\n            // if the currently selected entity filter is invalid, reset it\n            const { entityFilter } = this.entitySelectorState\n            if (entityFilter) {\n                if (!this.entitySelector.isEntityFilterValid(entityFilter)) {\n                    this.entitySelectorState.entityFilter = undefined\n                }\n            }\n\n            // The map column slug might be interpolated with different\n            // tolerance values on the chart and the map tab\n            entitySelector.resetInterpolatedMapColumn()\n        }\n    }\n\n    @action.bound onTabChange(\n        oldTab: GrapherTabName,\n        newTab: GrapherTabName\n    ): void {\n        this.adjustStateForTab(newTab)\n        this.syncEntitySelectionBetweenChartAndMap(oldTab, newTab)\n        this.validateEntitySelectorState(newTab)\n    }\n\n    @action.bound private ensureValidConfigWhenEditing(): void {\n        const disposers = [\n            autorun(() => {\n                if (!this.availableTabs.includes(this.activeTab))\n                    runInAction(() => this.setTab(this.availableTabs[0]))\n            }),\n            autorun(() => {\n                const validDimensions = this.validDimensions\n                if (!_.isEqual(this.dimensions, validDimensions))\n                    this.dimensions = validDimensions\n            }),\n        ]\n        this.disposers.push(...disposers)\n    }\n\n    @computed private get validDimensions(): ChartDimension[] {\n        const { dimensions } = this\n        const validProperties = this.dimensionSlots.map((d) => d.property)\n        let validDimensions = dimensions.filter((dim) =>\n            validProperties.includes(dim.property)\n        )\n\n        this.dimensionSlots.forEach((slot) => {\n            if (!slot.allowMultiple)\n                validDimensions = _.uniqWith(\n                    validDimensions,\n                    (a: ChartDimension, b: ChartDimension) =>\n                        a.property === slot.property &&\n                        a.property === b.property\n                )\n        })\n\n        return validDimensions\n    }\n\n    @computed get originUrlWithProtocol(): string {\n        if (!this.originUrl) return \"\"\n        let url = this.originUrl\n\n        // If the URL is relative, make it absolute to ourworldindata.org.\n        // we could also opt to make it relative to bakedGrapherUrl, but then we'd\n        // end up with different URLs than prod on staging servers and in the SVG tester,\n        // which could also affect positioning.\n        if (url.startsWith(\"/\")) {\n            url = new URL(url, GRAPHER_PROD_URL).href\n        }\n        if (!url.startsWith(\"http\")) url = `https://${url}`\n        return url\n    }\n\n    @computed get timelineHandleTimeBounds(): TimeBounds {\n        if (this.isOnMapTab) {\n            const endTime = maxTimeBoundFromJSONOrPositiveInfinity(\n                this.map.time\n            )\n\n            // If a start time is provided, use it; otherwise, set it to the end time\n            // so that a single map (not a faceted one) is shown by default\n            const startTime =\n                this.map.startTime === undefined\n                    ? endTime\n                    : minTimeBoundFromJSONOrNegativeInfinity(this.map.startTime)\n\n            return [startTime, endTime]\n        }\n\n        // If the timeline is hidden on the chart tab but displayed on the table tab\n        // (which is the case for charts that plot time on the x-axis),\n        // we always want to use the authored `minTime` and `maxTime` for the chart,\n        // irrespective of the time range the user might have selected on the table tab\n        if (this.isOnChartTab && this.hasTimeDimensionButTimelineIsHidden) {\n            const { minTime, maxTime } = this.authorsVersion\n            return [\n                minTimeBoundFromJSONOrNegativeInfinity(minTime),\n                maxTimeBoundFromJSONOrPositiveInfinity(maxTime),\n            ]\n        }\n\n        return [\n            // Handle `undefined` values in minTime/maxTime\n            minTimeBoundFromJSONOrNegativeInfinity(this.minTime),\n            maxTimeBoundFromJSONOrPositiveInfinity(this.maxTime),\n        ]\n    }\n\n    set timelineHandleTimeBounds(value: TimeBounds) {\n        if (this.isOnMapTab) {\n            this.map.startTime = value[0]\n            this.map.time = value[1]\n        } else {\n            this.minTime = value[0]\n            this.maxTime = value[1]\n        }\n    }\n\n    /** Dimension slots appropriate for the given chart types */\n    @computed get dimensionSlots(): DimensionSlot[] {\n        const dimensionProperties = getSupportedDimensionsForChartTypes(\n            this.validChartTypes\n        )\n        return dimensionProperties.map(\n            (property) => new DimensionSlot(this, property)\n        )\n    }\n\n    @computed.struct get filledDimensions(): ChartDimension[] {\n        return this.isReady ? this.dimensions : []\n    }\n\n    @computed get dimensionConfigs(): OwidChartDimensionInterface[] {\n        return this.dimensions.map((dimension) => dimension.toObject())\n    }\n\n    @action.bound addDimension(config: OwidChartDimensionInterface): void {\n        this.dimensions.push(new ChartDimension(config, this))\n    }\n\n    @action.bound setDimensionsForProperty(\n        property: DimensionProperty,\n        newConfigs: OwidChartDimensionInterface[]\n    ): void {\n        let newDimensions: ChartDimension[] = []\n        this.dimensionSlots.forEach((slot) => {\n            if (slot.property === property)\n                newDimensions = newDimensions.concat(\n                    newConfigs.map((config) => new ChartDimension(config, this))\n                )\n            else newDimensions = newDimensions.concat(slot.dimensions)\n        })\n        this.dimensions = newDimensions\n    }\n\n    @action.bound setDimensionsFromConfigs(\n        configs: OwidChartDimensionInterface[]\n    ): void {\n        this.dimensions = configs.map(\n            (config) => new ChartDimension(config, this)\n        )\n    }\n\n    @computed get defaultSlug(): string {\n        return slugify(this.effectiveTitle)\n    }\n\n    @computed get displaySlug(): string {\n        return this.slug ?? this.defaultSlug\n    }\n\n    // Used for superscript numbers in static exports\n    @computed get detailsOrderedByReference(): string[] {\n        if (typeof window === \"undefined\") return []\n\n        // Extract details from supporting text\n        const subtitleDetails = !this.hideSubtitle\n            ? extractDetailsFromSyntax(this.effectiveSubtitle)\n            : []\n        const noteDetails = !this.hideNote\n            ? extractDetailsFromSyntax(this.note ?? \"\")\n            : []\n\n        // Extract details from axis labels\n        const yAxisDetails = extractDetailsFromSyntax(\n            this.yAxisConfig.label || \"\"\n        )\n        const xAxisDetails = extractDetailsFromSyntax(\n            this.xAxisConfig.label || \"\"\n        )\n\n        // Text fragments are ordered by appearance\n        const uniqueDetails = _.uniq([\n            ...subtitleDetails,\n            ...yAxisDetails,\n            ...xAxisDetails,\n            ...noteDetails,\n        ])\n\n        return uniqueDetails\n    }\n\n    @computed get detailsMarkerInSvg(): DetailsMarker {\n        const { isStatic, shouldIncludeDetailsInStaticExport } = this\n        return !isStatic\n            ? \"underline\"\n            : shouldIncludeDetailsInStaticExport\n              ? \"superscript\"\n              : \"none\"\n    }\n\n    // Used for static exports\n    @computed get detailRenderers(): MarkdownTextWrap[] {\n        if (typeof window === \"undefined\") return []\n        return this.detailsOrderedByReference.map((term, i) => {\n            const referenceLabel = `${i + 1}.`\n            let text = `**${referenceLabel}** `\n            const detail: EnrichedDetail | undefined = window.details?.[term]\n            if (detail?.text) {\n                const lines = detail.text.split(\"\\n\")\n                const title = lines[0].trim()\n                const description = lines.slice(2).join(\"\\n\")\n                text = title\n                    ? `**${referenceLabel} ${title}** ${description}`\n                    : `**${referenceLabel}** ${description}`\n            }\n\n            // We can't use the computed property here because Grapher might\n            // not currently be in static mode\n            const baseFontSize = this.areStaticBoundsSmall\n                ? this.computeBaseFontSizeFromHeight(this.staticBounds)\n                : 18\n\n            return new MarkdownTextWrap({\n                text,\n                fontSize: scaleFontSize(11, baseFontSize),\n                // Leave room for padding on the left and right\n                maxWidth:\n                    this.staticBounds.width -\n                    2 * GRAPHER_FRAME_PADDING_HORIZONTAL,\n                lineHeight: 1.2,\n                style: { fill: GRAPHER_LIGHT_TEXT },\n            })\n        })\n    }\n\n    @computed get hasProjectedData(): boolean {\n        return this.inputTable.numericColumnSlugs.some(\n            (slug) => this.inputTable.get(slug).isProjection\n        )\n    }\n\n    @computed get projectionColumnInfoBySlug(): Map<\n        ColumnSlug,\n        ProjectionColumnInfo\n    > {\n        const table = this.inputTable\n\n        const [projectionSlugs, nonProjectionSlugs] = R.partition(\n            this.yColumnSlugs,\n            (slug) => table.get(slug).isProjection\n        )\n\n        if (!projectionSlugs.length) return new Map()\n\n        const projectionColumnInfoBySlug = new Map<\n            ColumnSlug,\n            ProjectionColumnInfo\n        >()\n\n        const findHistoricalSlugForProjection = (\n            projectedSlug: ColumnSlug\n        ): ColumnSlug | undefined => {\n            // If there is only one non-projection column, we trivially match it to the projection\n            if (nonProjectionSlugs.length === 1) return nonProjectionSlugs[0]\n\n            // Try to find a historical column with the same display name\n            const displayName = table.get(projectedSlug).displayName\n            return nonProjectionSlugs.find(\n                (slug) => table.get(slug).displayName === displayName\n            )\n        }\n\n        for (const projectedSlug of projectionSlugs) {\n            const historicalSlug =\n                findHistoricalSlugForProjection(projectedSlug)\n            if (historicalSlug) {\n                const combinedSlug = `${projectedSlug}-${historicalSlug}`\n                const slugForIsProjectionColumn = `${combinedSlug}-isProjection`\n\n                projectionColumnInfoBySlug.set(projectedSlug, {\n                    projectedSlug,\n                    historicalSlug,\n                    combinedSlug,\n                    slugForIsProjectionColumn,\n                })\n            }\n        }\n\n        return projectionColumnInfoBySlug\n    }\n\n    @computed get validChartTypes(): GrapherChartType[] {\n        const chartTypeSet = new Set(this.chartTypes)\n\n        // All single-chart Graphers are valid\n        if (chartTypeSet.size <= 1) return Array.from(chartTypeSet)\n\n        // Find valid combination in a pre-defined list\n        const validChartTypes = findValidChartTypeCombination(\n            Array.from(chartTypeSet)\n        )\n\n        // If the given combination is not valid, then ignore all but the first chart type\n        if (!validChartTypes) return this.chartTypes.slice(0, 1)\n\n        // Projected data is only supported for line and discrete bar charts\n        const isLineChart = validChartTypes[0] === GRAPHER_CHART_TYPES.LineChart\n        if (isLineChart && this.hasProjectedData) {\n            return validChartTypes.filter(\n                (type) =>\n                    type === GRAPHER_CHART_TYPES.LineChart ||\n                    type === GRAPHER_CHART_TYPES.DiscreteBar\n            )\n        }\n\n        return validChartTypes\n    }\n\n    @computed get validChartTypeSet(): Set<GrapherChartType> {\n        return new Set(this.validChartTypes)\n    }\n\n    @computed get availableTabs(): GrapherTabName[] {\n        const availableTabs: GrapherTabName[] = []\n        if (this.hasTableTab) availableTabs.push(GRAPHER_TAB_NAMES.Table)\n        if (this.hasMapTab) availableTabs.push(GRAPHER_TAB_NAMES.WorldMap)\n        availableTabs.push(...this.validChartTypes)\n        return availableTabs\n    }\n\n    @computed get hasMultipleChartTypes(): boolean {\n        return this.validChartTypes.length > 1\n    }\n\n    /** Effective subtitle resolved from authored subtitle or fallback description */\n    @computed get effectiveSubtitle(): string {\n        const subtitle = this.subtitle\n        if (subtitle !== undefined) return subtitle\n        const yColumns = this.yColumnsFromDimensions\n        if (yColumns.length === 1) return yColumns[0].def.descriptionShort ?? \"\"\n        return \"\"\n    }\n\n    /**\n     * Explains that some of the values on screen aren't from the time the\n     * chart is labelled with, because tolerance was applied.\n     */\n    @computed get toleranceNotice(): string | undefined {\n        // No need to show a notice on the table tab because the table\n        // shows the original time for each value\n        if (!this.isReady || !this.isOnChartOrMapTab) return undefined\n\n        // Freeze the notice during timeline interactions so it doesn't change\n        // while the user is dragging or playing an animation\n        if (this.frozenToleranceNotice && this.isTimelineInteractionActive)\n            return this.frozenToleranceNotice.notice\n\n        return this.chartState.toleranceNotice\n    }\n\n    /** Whether the timeline is being dragged or is playing an animation */\n    @computed get isTimelineInteractionActive(): boolean {\n        return !!this.timelineDragTarget || this.isTimelineAnimationPlaying\n    }\n\n    @action.bound setToleranceNoticeFrozen(isFrozen: boolean): void {\n        this.frozenToleranceNotice = isFrozen\n            ? { notice: this.toleranceNotice }\n            : undefined\n    }\n\n    /**\n     * Effective note resolved from the authored note, with the tolerance\n     * notice appended when tolerance was applied to something on screen\n     */\n    @computed get effectiveNote(): string | undefined {\n        const { note, toleranceNotice } = this\n        if (!toleranceNotice) return note\n\n        const authoredNote = note?.trim()\n        if (!authoredNote) return toleranceNotice\n\n        // Run the two together as sentences\n        const separator = /[.!?]$/.test(authoredNote) ? \" \" : \". \"\n        return `${authoredNote}${separator}${toleranceNotice}`\n    }\n\n    @computed get shouldAddEntitySuffixToTitle(): boolean {\n        const selectedEntityNames = this.selection.selectedEntityNames\n        const showEntityAnnotation = !this.hideAnnotationFieldsInTitle?.entity\n\n        const seriesStrategy =\n            this.chartState.seriesStrategy ||\n            autoDetectSeriesStrategy(this, true)\n\n        return !!(\n            !this.forceHideAnnotationFieldsInTitle?.entity &&\n            this.isOnChartTab &&\n            (seriesStrategy !== SeriesStrategy.entity ||\n                !this.showLegend ||\n                !this.showSeriesLabels) &&\n            selectedEntityNames.length === 1 &&\n            (showEntityAnnotation ||\n                this.canChangeEntity ||\n                this.canSelectMultipleEntities)\n        )\n    }\n\n    @computed get shouldAddTimeSuffixToTitle(): boolean {\n        const showTimeAnnotation = !this.hideAnnotationFieldsInTitle?.time\n        return (\n            !this.forceHideAnnotationFieldsInTitle?.time &&\n            this.isReady &&\n            (showTimeAnnotation ||\n                (this.hasTimeline &&\n                    // Chart types that refer to the current time only in the timeline\n                    (this.isOnDiscreteBarTab ||\n                        this.isOnStackedDiscreteBarTab ||\n                        this.isOnMarimekkoTab ||\n                        this.isOnMapTab ||\n                        (this.isOnScatterTab &&\n                            !this.isOnTimeScatterTab &&\n                            !this.isOnConnectedScatterTab))))\n        )\n    }\n\n    @computed get shouldAddChangeInPrefixToTitle(): boolean {\n        const showChangeInPrefix =\n            !this.hideAnnotationFieldsInTitle?.changeInPrefix\n        return (\n            !this.forceHideAnnotationFieldsInTitle?.changeInPrefix &&\n            (this.isOnLineChartTab || this.isOnSlopeChartTab) &&\n            this.isRelativeMode &&\n            showChangeInPrefix\n        )\n    }\n\n    /** Check if 'vs. x-axis label' should be added to the title */\n    @computed private get shouldAddXIndicatorLabelToTitle(): boolean {\n        return (\n            // Only add if currently on the scatter tab\n            this.isOnScatterTab &&\n            // Don't add if the main chart type is a scatter\n            !this.isScatter &&\n            // Check if an x-column is available\n            this.isReady &&\n            !!this.xColumnSlug &&\n            this.inputTable.has(this.xColumnSlug)\n        )\n    }\n\n    /** Effective title resolved from authored title or default title derived from metadata */\n    @computed get effectiveTitle(): string {\n        if (this.title) return this.title\n        if (this.isReady) return this.defaultTitle\n        return \"\"\n    }\n\n    /**\n     * The main line of the chart title, without the entity/time annotation,\n     * but including the \"Change in\" prefix and the x-indicator label where\n     * applicable.\n     */\n    @computed get mainTitle(): string {\n        let text = this.effectiveTitle.trim()\n        if (text.length === 0) return text\n\n        // Add the x-axis label to the title for secondary scatter plots\n        if (this.shouldAddXIndicatorLabelToTitle) {\n            const xAxisLabel =\n                this.xAxisConfig.label ??\n                this.inputTable.get(this.xColumnSlug).titlePublicOrDisplayName\n                    .title\n            if (xAxisLabel) text += ` vs. ${xAxisLabel}`\n        }\n\n        if (this.shouldAddChangeInPrefixToTitle)\n            text = \"Change in \" + lowerCaseFirstLetterUnlessAbbreviation(text)\n\n        return text.trim()\n    }\n\n    /** The entity/time annotation of the chart title, e.g. \"World, 2020\" */\n    @computed get titleAnnotation(): string | undefined {\n        if (!this.mainTitle) return undefined\n\n        const parts: string[] = []\n\n        if (this.shouldAddEntitySuffixToTitle) {\n            const entityStr = this.selection.selectedEntityNames[0]\n            if (entityStr?.length) parts.push(entityStr)\n        }\n\n        if (this.shouldAddTimeSuffixToTitle && this.timeTitleSuffix)\n            parts.push(this.timeTitleSuffix)\n\n        return parts.length > 0 ? parts.join(\", \") : undefined\n    }\n\n    /** The complete chart title: the main title plus the entity/time annotation */\n    @computed get fullTitle(): string {\n        if (!this.mainTitle || !this.titleAnnotation) return this.mainTitle\n\n        // Only add a comma if the title does not end with a question mark\n        const separator = this.mainTitle.endsWith(\"?\") ? \" \" : \", \"\n        return `${this.mainTitle}${separator}${this.titleAnnotation}`\n    }\n\n    /**\n     * Uses some explicit and implicit information to decide whether a timeline is shown.\n     */\n    @computed get hasTimeline(): boolean {\n        // We don't have more than one distinct time point in our data, so it doesn't make sense to show a timeline\n        if (this.times.length <= 1) return false\n\n        switch (this.activeTab) {\n            // The map tab has its own `hideTimeline` option\n            case GRAPHER_TAB_NAMES.WorldMap:\n                return !this.map.hideTimeline\n\n            // Use the chart-level `hideTimeline` option for the table, with some exceptions\n            case GRAPHER_TAB_NAMES.Table:\n                // Always show the timeline for charts that plot time on the x-axis\n                if (this.hasTimeDimension) return true\n                return !this.hideTimeline\n\n            // Use the chart-level `hideTimeline` option\n            default:\n                return !this.hideTimeline\n        }\n    }\n\n    @computed private get areHandlesOnSameTime(): boolean {\n        const times = sortNumeric(this.table.timeColumn.uniqValues.slice())\n        const [start, end] = this.timelineHandleTimeBounds.map((time) =>\n            findClosestTime(times, time)\n        )\n        return start === end\n    }\n\n    @computed get mapColumnSlug(): string {\n        const mapColumnSlug = this.map.columnSlug\n        // If there's no mapColumnSlug or there is one but it's not in the dimensions array, use the first ycolumn\n        if (\n            !mapColumnSlug ||\n            !this.dimensions.some((dim) => dim.columnSlug === mapColumnSlug)\n        )\n            return this.yColumnSlug!\n        return mapColumnSlug\n    }\n\n    private getSlugForProperty(\n        property: DimensionProperty\n    ): string | undefined {\n        return this.dimensions.find((dim) => dim.property === property)\n            ?.columnSlug\n    }\n\n    @computed get yColumnsFromDimensions(): CoreColumn[] {\n        return this.filledDimensions\n            .filter((dim) => dim.property === DimensionProperty.y)\n            .map((dim) => dim.column)\n    }\n\n    @computed private get inputYColumnSlugs(): string[] {\n        return this.ySlugs\n            ? this.ySlugs.split(\" \")\n            : this.dimensions\n                  .filter((dim) => dim.property === DimensionProperty.y)\n                  .map((dim) => dim.columnSlug)\n    }\n\n    @computed private get inputYColumnSlug(): string | undefined {\n        return this.ySlugs\n            ? this.ySlugs.split(\" \")[0]\n            : this.getSlugForProperty(DimensionProperty.y)\n    }\n\n    @computed private get inputXColumnSlug(): string | undefined {\n        return this.xSlug ?? this.getSlugForProperty(DimensionProperty.x)\n    }\n\n    @computed private get inputSizeColumnSlug(): string | undefined {\n        return this.sizeSlug ?? this.getSlugForProperty(DimensionProperty.size)\n    }\n\n    @computed private get inputColorColumnSlug(): string | undefined {\n        return (\n            this.colorSlug ?? this.getSlugForProperty(DimensionProperty.color)\n        )\n    }\n\n    @computed private get inputNumericColorColumnSlug(): string | undefined {\n        if (!this.inputColorColumnSlug) return undefined\n\n        const colorColumn = this.inputTable.get(this.inputColorColumnSlug)\n        if (!colorColumn.isMissing && colorColumn.hasNumberFormatting)\n            return this.inputColorColumnSlug\n\n        return undefined\n    }\n\n    @computed private get inputCategoricalColorColumnSlug():\n        | string\n        | undefined {\n        if (!this.inputColorColumnSlug) return undefined\n        return this.inputNumericColorColumnSlug\n            ? undefined\n            : this.inputColorColumnSlug\n    }\n\n    /** Y column slugs used by the active tab */\n    @computed get yColumnSlugs(): ColumnSlug[] {\n        return this.inputYColumnSlugs\n    }\n\n    /** Y column slug used by the active tab */\n    @computed get yColumnSlug(): ColumnSlug | undefined {\n        return this.inputYColumnSlug\n    }\n\n    /** Color column slug used by the active tab */\n    @computed get colorColumnSlug(): ColumnSlug | undefined {\n        if (!this.inputColorColumnSlug) return undefined\n\n        // Line and DiscreteBar charts only support numeric color columns\n        if (this.isOnLineChartTab || this.isOnDiscreteBarTab) {\n            return this.inputNumericColorColumnSlug\n        }\n\n        // ScatterPlot and Marimekko charts only support categorical color columns\n        if (this.isOnScatterTab || this.isOnMarimekkoTab) {\n            return this.inputCategoricalColorColumnSlug\n        }\n\n        return this.inputColorColumnSlug\n    }\n\n    /** X column slug used by the active tab */\n    @computed get xColumnSlug(): ColumnSlug | undefined {\n        // Marimekkos ignore the x column when there's also a scatter plot\n        if (this.isOnMarimekkoTab && this.hasScatter) return undefined\n\n        return this.inputXColumnSlug\n    }\n\n    /** Size column slug used by the active tab */\n    @computed get sizeColumnSlug(): ColumnSlug | undefined {\n        return this.inputSizeColumnSlug\n    }\n\n    @computed private get yScaleType(): ScaleType | undefined {\n        return this.yAxis.scaleType\n    }\n\n    @computed\n    private get isOnScatterWithTimeOverride(): boolean {\n        const xColumn = this.inputTable.get(this.xColumnSlug)\n        const yColumn = this.inputTable.get(this.yColumnSlug)\n\n        return !!(\n            this.isOnScatterTab &&\n            xColumn.def.owidVariableId !== undefined &&\n            xColumn.def.owidVariableId === yColumn.def.owidVariableId &&\n            this.xOverrideTime\n        )\n    }\n\n    @computed private get comparesTwoTimePoints(): boolean {\n        // Faceted maps show one map per timeline handle\n        if (this.isOnMapTab) return this.isFaceted\n\n        // Dumbbell charts compare two time points if not single-time\n        if (this.isOnDumbbellTab) return true\n\n        // Relative slope charts show the change over a period (\"Change in X,\n        // 1990 to 2020\"), not two snapshots side by side\n        return this.isOnSlopeChartTab && !this.isRelativeMode\n    }\n\n    @computed private get timeTitleSuffix(): string | undefined {\n        const { startTime, endTime, xOverrideTime } = this\n\n        const timeColumn = this.table.timeColumn\n\n        // Do not show year until data is loaded\n        if (timeColumn.isMissing) return undefined\n\n        // Add 'Time vs. Time' suffix for scatter plots with time override\n        if (\n            this.isOnScatterWithTimeOverride &&\n            endTime !== undefined &&\n            xOverrideTime !== undefined\n        ) {\n            const [start, end] = _.sortBy([endTime, xOverrideTime])\n            return timeColumn.formatTimeComparison(start, end)\n        }\n\n        if (startTime === undefined || endTime === undefined) return undefined\n\n        if (startTime === endTime) return timeColumn.formatTime(startTime)\n\n        return this.comparesTwoTimePoints\n            ? timeColumn.formatTimeComparison(startTime, endTime)\n            : timeColumn.formatTimeRange(startTime, endTime)\n    }\n\n    @computed get sourcesLine(): string {\n        return this.sourceDesc ?? this.defaultSourcesLine\n    }\n\n    /** All column slugs configured by the author (y, x, size, color) */\n    @computed get inputColumnSlugs(): ColumnSlug[] {\n        return excludeUndefined([\n            ...this.inputYColumnSlugs,\n            this.inputXColumnSlug,\n            this.inputSizeColumnSlug,\n            this.inputColorColumnSlug,\n        ])\n    }\n\n    @computed get inputColumnsWithSources(): CoreColumn[] {\n        return this.inputTable\n            .getColumns(_.uniq(this.inputColumnSlugs))\n            .filter(\n                (column) =>\n                    !!column.source.name || !_.isEmpty(column.def.origins)\n            )\n    }\n\n    private set facetStrategy(facet: FacetStrategy) {\n        this.selectedFacetStrategy = facet\n    }\n\n    @computed private get defaultSourcesLine(): string {\n        const columnSlugs = pickColumnsForSourcesLine({\n            table: this.inputTable,\n            yColumnSlugs: this.yColumnSlugs,\n            xColumnSlug: this.xColumnSlug,\n            sizeColumnSlug: this.sizeColumnSlug,\n            colorColumnSlug: this.colorColumnSlug,\n            activeTab: this.activeTab,\n        })\n        const columns = this.inputTable.getColumns(columnSlugs)\n        return buildSourcesLineFromColumns(columns)\n    }\n\n    @computed private get axisDimensions(): ChartDimension[] {\n        return this.filledDimensions.filter(\n            (dim) =>\n                dim.property === DimensionProperty.y ||\n                dim.property === DimensionProperty.x\n        )\n    }\n\n    @computed get yColumnsFromDimensionsOrSlugsOrAuto(): CoreColumn[] {\n        return this.yColumnsFromDimensions.length\n            ? this.yColumnsFromDimensions\n            : this.table.getColumns(autoDetectYColumnSlugs(this))\n    }\n\n    @computed get defaultTitle(): string {\n        const yColumns = this.yColumnsFromDimensionsOrSlugsOrAuto\n\n        if (this.isScatter)\n            return this.axisDimensions\n                .map(\n                    (dimension) =>\n                        dimension.column.titlePublicOrDisplayName.title\n                )\n                .join(\" vs. \")\n\n        const uniqueDatasetNames = _.uniq(\n            excludeUndefined(\n                yColumns.map((col) => (col.def as OwidColumnDef).datasetName)\n            )\n        )\n\n        if (this.hasMultipleYColumns && uniqueDatasetNames.length === 1)\n            return uniqueDatasetNames[0]\n\n        if (yColumns.length === 2)\n            return yColumns\n                .map((col) => col.titlePublicOrDisplayName.title)\n                .join(\" and \")\n\n        return yColumns\n            .map((col) => col.titlePublicOrDisplayName.title)\n            .join(\", \")\n    }\n\n    @computed get isLineChart(): boolean {\n        return (\n            this.chartType === GRAPHER_CHART_TYPES.LineChart || !this.chartType\n        )\n    }\n\n    @computed get isScatter(): boolean {\n        return this.chartType === GRAPHER_CHART_TYPES.ScatterPlot\n    }\n\n    @computed get isStackedArea(): boolean {\n        return this.chartType === GRAPHER_CHART_TYPES.StackedArea\n    }\n\n    @computed get isSlopeChart(): boolean {\n        return this.chartType === GRAPHER_CHART_TYPES.SlopeChart\n    }\n\n    @computed get isDiscreteBar(): boolean {\n        return this.chartType === GRAPHER_CHART_TYPES.DiscreteBar\n    }\n\n    @computed get isStackedBar(): boolean {\n        return this.chartType === GRAPHER_CHART_TYPES.StackedBar\n    }\n\n    @computed get isMarimekko(): boolean {\n        return this.chartType === GRAPHER_CHART_TYPES.Marimekko\n    }\n\n    @computed get isStackedDiscreteBar(): boolean {\n        return this.chartType === GRAPHER_CHART_TYPES.StackedDiscreteBar\n    }\n\n    @computed get isDumbbell(): boolean {\n        return this.chartType === GRAPHER_CHART_TYPES.Dumbbell\n    }\n\n    @computed get isSwimlane(): boolean {\n        return this.chartType === GRAPHER_CHART_TYPES.Swimlane\n    }\n\n    @computed get isOnLineChartTab(): boolean {\n        return this.activeChartType === GRAPHER_CHART_TYPES.LineChart\n    }\n\n    @computed get isOnScatterTab(): boolean {\n        return this.activeChartType === GRAPHER_CHART_TYPES.ScatterPlot\n    }\n\n    @computed get isOnStackedAreaTab(): boolean {\n        return this.activeChartType === GRAPHER_CHART_TYPES.StackedArea\n    }\n\n    @computed get isOnSlopeChartTab(): boolean {\n        return this.activeChartType === GRAPHER_CHART_TYPES.SlopeChart\n    }\n\n    @computed get isOnDiscreteBarTab(): boolean {\n        return this.activeChartType === GRAPHER_CHART_TYPES.DiscreteBar\n    }\n\n    @computed get isOnStackedBarTab(): boolean {\n        return this.activeChartType === GRAPHER_CHART_TYPES.StackedBar\n    }\n\n    @computed get isOnMarimekkoTab(): boolean {\n        return this.activeChartType === GRAPHER_CHART_TYPES.Marimekko\n    }\n\n    @computed get isOnStackedDiscreteBarTab(): boolean {\n        return this.activeChartType === GRAPHER_CHART_TYPES.StackedDiscreteBar\n    }\n\n    @computed get isOnSwimlaneTab(): boolean {\n        return this.activeChartType === GRAPHER_CHART_TYPES.Swimlane\n    }\n\n    @computed get isOnDumbbellTab(): boolean {\n        return this.activeChartType === GRAPHER_CHART_TYPES.Dumbbell\n    }\n\n    @computed private get isOnTwoColumnDumbbellTab(): boolean {\n        return this.checkIsTwoColumnDumbbell(this.activeTab)\n    }\n\n    @computed get hasLineChart(): boolean {\n        return this.validChartTypeSet.has(GRAPHER_CHART_TYPES.LineChart)\n    }\n\n    @computed get hasSlopeChart(): boolean {\n        return this.validChartTypeSet.has(GRAPHER_CHART_TYPES.SlopeChart)\n    }\n\n    @computed get hasDiscreteBar(): boolean {\n        return this.validChartTypeSet.has(GRAPHER_CHART_TYPES.DiscreteBar)\n    }\n\n    @computed get hasMarimekko(): boolean {\n        return this.validChartTypeSet.has(GRAPHER_CHART_TYPES.Marimekko)\n    }\n\n    @computed get hasScatter(): boolean {\n        return this.validChartTypeSet.has(GRAPHER_CHART_TYPES.ScatterPlot)\n    }\n\n    @computed get hasStackedArea(): boolean {\n        return this.validChartTypeSet.has(GRAPHER_CHART_TYPES.StackedArea)\n    }\n\n    @computed get hasStackedBar(): boolean {\n        return this.validChartTypeSet.has(GRAPHER_CHART_TYPES.StackedBar)\n    }\n\n    @computed get hasStackedDiscreteBar(): boolean {\n        return this.validChartTypeSet.has(\n            GRAPHER_CHART_TYPES.StackedDiscreteBar\n        )\n    }\n\n    @computed get hasDumbbellChart(): boolean {\n        return this.validChartTypeSet.has(GRAPHER_CHART_TYPES.Dumbbell)\n    }\n\n    @computed get hasSwimlane(): boolean {\n        return this.validChartTypeSet.has(GRAPHER_CHART_TYPES.Swimlane)\n    }\n\n    @computed get supportsMultipleYColumns(): boolean {\n        return !this.isScatter && !this.isMarimekko && !this.isSwimlane\n    }\n\n    /** Time scatters plot time on the x-axis */\n    @computed private get isOnTimeScatterTab(): boolean {\n        return !!this.isOnScatterTab && this.xColumnSlug === undefined\n    }\n\n    /** Connected scatters plot lines between points over time */\n    @computed private get isOnConnectedScatterTab(): boolean {\n        return this.isOnScatterTab && !this.areHandlesOnSameTime\n    }\n\n    @computed private get xDimension(): ChartDimension | undefined {\n        return this.filledDimensions.find(\n            (d) => d.property === DimensionProperty.x\n        )\n    }\n\n    /** Overrides the x axis dimension to target a special year */\n    @computed get xOverrideTime(): number | undefined {\n        return this.xDimension?.targetYear\n    }\n\n    set xOverrideTime(value: number | undefined) {\n        this.xDimension!.targetYear = value\n    }\n\n    @computed get canOverrideXTime(): boolean {\n        return this.xDimension?.variableId !== undefined\n    }\n\n    @computed get defaultBounds(): Bounds {\n        return new Bounds(0, 0, DEFAULT_GRAPHER_WIDTH, DEFAULT_GRAPHER_HEIGHT)\n    }\n\n    async generateStaticSvg(\n        renderToHtmlString: (element: React.ReactElement) => string\n    ): Promise<string> {\n        // Wait for peer country application if requested but not yet applied\n        if (this.shouldApplyPeerCountries)\n            await this.applyPeerCountriesIfNeeded()\n\n        // Temporarily set isExportingToSvgOrPng to true\n        const _isExportingToSvgOrPng = this.isExportingToSvgOrPng\n        runInAction(() => (this.isExportingToSvgOrPng = true))\n\n        const innerHTML = renderToHtmlString(<Chart manager={this} />)\n\n        // Restore isExportingToSvgOrPng\n        runInAction(() => (this.isExportingToSvgOrPng = _isExportingToSvgOrPng))\n\n        return innerHTML\n    }\n\n    @computed get staticBoundsWithDetails(): Bounds {\n        const includeDetails =\n            this.shouldIncludeDetailsInStaticExport &&\n            !_.isEmpty(this.detailRenderers)\n\n        let height = this.staticBounds.height\n        if (includeDetails) {\n            height +=\n                2 * GRAPHER_FRAME_PADDING_VERTICAL +\n                sumTextWrapHeights(\n                    this.detailRenderers,\n                    STATIC_EXPORT_DETAIL_SPACING\n                )\n        }\n\n        return new Bounds(0, 0, this.staticBounds.width, height)\n    }\n\n    rasterize: GrapherRasterizeFn = async ({ includeDetails }) => {\n        const _shouldIncludeDetailsInStaticExport =\n            this.shouldIncludeDetailsInStaticExport\n        this.shouldIncludeDetailsInStaticExport = includeDetails\n\n        const { width, height } = this.staticBoundsWithDetails\n\n        try {\n            // We need to ensure `rasterize` is only called on the client-side, otherwise this will fail\n            const staticSVG = await this.generateStaticSvg(\n                reactRenderToStringClientOnly\n            )\n            return new StaticChartRasterizer(staticSVG, width, height).render()\n        } finally {\n            this.shouldIncludeDetailsInStaticExport =\n                _shouldIncludeDetailsInStaticExport\n        }\n    }\n\n    @computed get mapConfig(): MapConfig {\n        return this.map\n    }\n\n    @computed get relativeToggleLabel(): string {\n        if (this.isOnScatterTab) return \"Display average annual change\"\n        else if (this.isOnLineChartTab || this.isOnSlopeChartTab)\n            return \"Display relative change\"\n        return \"Display relative values\"\n    }\n\n    @computed get isRelativeMode(): boolean {\n        if (\n            this.hasSingleMetricInFacets ||\n            this.hasSingleEntityInFacets ||\n            this.isStackedChartSplitByMetric\n        )\n            return false\n        return this.stackMode === StackMode.relative\n    }\n\n    @computed get canToggleRelativeMode(): boolean {\n        const {\n            isOnLineChartTab,\n            isOnSlopeChartTab,\n            hideRelativeToggle,\n            areHandlesOnSameTime,\n            yScaleType,\n            xColumnSlug,\n            isOnMarimekkoTab,\n        } = this\n\n        if (isOnLineChartTab || isOnSlopeChartTab)\n            return (\n                !hideRelativeToggle &&\n                !areHandlesOnSameTime &&\n                yScaleType !== ScaleType.log\n            )\n\n        // Exclude relative mode with just one metric or entity\n        if (\n            this.hasSingleEntityInFacets ||\n            this.hasSingleMetricInFacets ||\n            this.isStackedChartSplitByMetric\n        )\n            return false\n\n        // Disable relative mode for Marimekko charts without an x dimension\n        if (isOnMarimekkoTab && !xColumnSlug) return false\n\n        return !hideRelativeToggle\n    }\n\n    @computed private get isTouchDevice(): boolean {\n        return isTouchDevice()\n    }\n\n    @computed private get isMobile(): boolean {\n        return isMobile()\n    }\n\n    /** externalBounds should be set to the available plotting area for a\n        Grapher that resizes itself to fit. When this area changes,\n        externalBounds should be updated. Updating externalBounds can\n        trigger a bunch of somewhat expensive recalculations so it might\n        be worth debouncing updates (e.g. when drag-resizing) */\n    @computed get externalBounds(): Bounds {\n        const { _externalBounds, initialOptions } = this\n        return (\n            _externalBounds ?? initialOptions.bounds ?? DEFAULT_GRAPHER_BOUNDS\n        )\n    }\n\n    set externalBounds(bounds: Bounds) {\n        this._externalBounds = bounds\n    }\n\n    @computed get isPortrait(): boolean {\n        return (\n            this.externalBounds.width < this.externalBounds.height &&\n            this.externalBounds.width < DEFAULT_GRAPHER_WIDTH\n        )\n    }\n\n    @computed private get widthForDeviceOrientation(): number {\n        return this.isPortrait ? 400 : 680\n    }\n\n    @computed private get heightForDeviceOrientation(): number {\n        return this.isPortrait ? 640 : 480\n    }\n\n    @computed private get useIdealBounds(): boolean {\n        const {\n            isEditor,\n            isExportingToSvgOrPng,\n            externalBounds,\n            widthForDeviceOrientation,\n            heightForDeviceOrientation,\n            isInIFrame,\n            isInFullScreenMode,\n            windowInnerWidth,\n            windowInnerHeight,\n        } = this\n\n        // In full-screen mode, we usually use all space available to us\n        // We use the ideal bounds only if the available space is very large\n        if (isInFullScreenMode) {\n            if (\n                windowInnerHeight! > 2 * heightForDeviceOrientation &&\n                windowInnerWidth! > 2 * widthForDeviceOrientation\n            )\n                return true\n            return false\n        }\n\n        // For these, defer to the bounds that are set externally\n        if (\n            this.isEmbeddedInADataPage ||\n            this.isEmbeddedInAnOwidPage ||\n            this.manager ||\n            isInIFrame\n        )\n            return false\n\n        // If the user is using interactive version and then goes to export chart, use current bounds to maintain WYSIWYG\n        if (isExportingToSvgOrPng) return false\n\n        // In the editor, we usually want ideal bounds, except when we're rendering a static preview;\n        // in that case, we want to use the given static bounds\n        if (isEditor) return !this.isExportingToSvgOrPng\n\n        // If the available space is very small, we use all of the space given to us\n        if (\n            externalBounds.height < heightForDeviceOrientation ||\n            externalBounds.width < widthForDeviceOrientation\n        )\n            return false\n\n        return true\n    }\n\n    // If we have a big screen to be in, we can define our own aspect ratio and sit in the center\n    @computed private get scaleToFitIdeal(): number {\n        return Math.min(\n            (this.availableWidth * 0.95) / this.widthForDeviceOrientation,\n            (this.availableHeight * 0.95) / this.heightForDeviceOrientation\n        )\n    }\n\n    @computed private get fullScreenPadding(): number {\n        const { windowInnerWidth } = this\n        if (!windowInnerWidth) return 0\n        return windowInnerWidth < 940 ? 0 : 40\n    }\n\n    @computed get hideFullScreenButton(): boolean {\n        if (this.hideFullscreenButton) return true\n        if (this.isInFullScreenMode) return false\n        if (!this.isSmall || !this.isMobile || !this.screenHeight) return false\n\n        // Approximate full screen height on mobile devices\n        // that doesn't update when browser UI is shown/hidden\n        const fullScreenHeight = this.screenHeight\n\n        // Hide the full screen button if the full screen height\n        // is barely larger than the current chart height\n        return fullScreenHeight < this.frameBounds.height + 80\n    }\n\n    @computed private get availableWidth(): number {\n        const {\n            externalBounds,\n            isInFullScreenMode,\n            windowInnerWidth,\n            fullScreenPadding,\n        } = this\n\n        return Math.floor(\n            isInFullScreenMode\n                ? windowInnerWidth! - 2 * fullScreenPadding\n                : externalBounds.width\n        )\n    }\n\n    @computed private get availableHeight(): number {\n        const {\n            externalBounds,\n            isInFullScreenMode,\n            windowInnerHeight,\n            fullScreenPadding,\n        } = this\n\n        return Math.floor(\n            isInFullScreenMode\n                ? windowInnerHeight! - 2 * fullScreenPadding\n                : externalBounds.height\n        )\n    }\n\n    @computed private get idealWidth(): number {\n        return Math.floor(this.widthForDeviceOrientation * this.scaleToFitIdeal)\n    }\n\n    @computed private get idealHeight(): number {\n        return Math.floor(\n            this.heightForDeviceOrientation * this.scaleToFitIdeal\n        )\n    }\n\n    /** Bounds of the entire Grapher frame including the chart area and entity selector panel */\n    @computed get frameBounds(): Bounds {\n        return this.useIdealBounds\n            ? new Bounds(0, 0, this.idealWidth, this.idealHeight)\n            : new Bounds(0, 0, this.availableWidth, this.availableHeight)\n    }\n\n    @computed get activeBounds(): Bounds {\n        return this.isExportingToSvgOrPng ? this.staticBounds : this.frameBounds\n    }\n\n    /** Bounds of the CaptionedChart that renders the header, chart area and footer */\n    @computed get captionedChartBounds(): Bounds {\n        // If there's no panel, the chart takes up the whole frame\n        if (!this.isEntitySelectorPanelActive) {\n            return new Bounds(\n                0,\n                0,\n                this.frameBounds.width - 2, // 2px accounts for the left/right border\n                this.frameBounds.height - 2 // 2px accounts for the top/bottom border\n            )\n        }\n\n        return new Bounds(\n            0,\n            0,\n            // The chart takes up 9 columns in 12-column grid\n            (9 / 12) * this.frameBounds.width,\n            this.frameBounds.height - 2 // 2px accounts for the border\n        )\n    }\n\n    @computed get chartAreaPadding(): number {\n        // Choose padding based on chart size, ensuring it's at most 24px\n        return Math.min(24, Math.ceil(0.025 * this.activeBounds.width))\n    }\n\n    /** Bounds of the chart area if no CaptionedChart is rendered */\n    @computed get chartAreaBounds(): Bounds {\n        return this.activeBounds.pad(this.chartAreaPadding)\n    }\n\n    /** Bounds of the entity selector if rendered into the side panel */\n    @computed get sidePanelBounds(): Bounds | undefined {\n        if (!this.isEntitySelectorPanelActive) return\n\n        return new Bounds(\n            0, // not in use; intentionally set to zero\n            0, // not in use; intentionally set to zero\n            this.frameBounds.width - this.captionedChartBounds.width,\n            this.captionedChartBounds.height\n        )\n    }\n\n    @computed get containerElement(): HTMLDivElement | undefined {\n        return this.base.current || undefined\n    }\n\n    @computed get analyticsContext(): GrapherAnalyticsContext {\n        const ctx = this.manager?.analyticsContext\n        return {\n            slug: ctx?.slug ?? this.slug,\n            viewConfigId: ctx?.viewConfigId,\n            narrativeChartName: this.narrativeChartInfo?.name,\n        }\n    }\n\n    logEntitySelectorEvent(action: EntitySelectorEvent, target?: string): void {\n        this.analytics.logEntitySelectorEvent(action, {\n            ...this.analyticsContext,\n            target,\n        })\n    }\n\n    logImageDownloadEvent(action: GrapherImageDownloadEvent): void {\n        this.analytics.logGrapherImageDownloadEvent(action, {\n            ...this.analyticsContext,\n            context: omitUndefinedValues({\n                tab: this.activeTab,\n                globe: this.isOnMapTab\n                    ? this.mapConfig.globe.isActive\n                    : undefined,\n            }),\n        })\n    }\n\n    logGrapherInteractionEvent(\n        action: GrapherInteractionEvent,\n        target?: string\n    ): void {\n        this.analytics.logGrapherInteractionEvent(action, {\n            ...this.analyticsContext,\n            target,\n        })\n    }\n\n    @computed get timeColumn(): TimeColumn | undefined {\n        const timeColumn = this.inputTable.timeColumn\n        if (timeColumn instanceof MissingColumn) return undefined\n        return timeColumn\n    }\n\n    @computed get availableEntityNames(): EntityName[] {\n        return this.tableForSelection.availableEntityNames\n    }\n\n    @computed private get canApplyPeerCountries(): boolean {\n        return (\n            this.peerCountryStrategy !== undefined &&\n            this.availableEntityNames.length > 0 &&\n            // Only apply peer countries if it's unambiguous\n            // which entity is the target entity\n            this.selection.numSelectedEntities === 1\n        )\n    }\n\n    /**\n     * Adds peer countries to Grapher's selection\n     *\n     * Uses a cached promise pattern to prevent duplicate operations and allow\n     * generateStaticSvg() to wait for peer country application that was already\n     * initiated by the inputTable setter.\n     *\n     * This approach avoids making inputTable async, which would complicate the\n     * codebase since many parts assume synchronous data access.\n     */\n    @action.bound private async applyPeerCountriesIfNeeded(): Promise<void> {\n        // If already running, return the existing promise to wait for\n        if (this.peerCountriesPromise) return this.peerCountriesPromise\n\n        if (!this.canApplyPeerCountries) return\n\n        // Create and cache the promise immediately so that concurrent calls\n        // will find and wait for this same promise\n        this.peerCountriesPromise = (async (): Promise<void> => {\n            const peerCountries = await selectPeerCountriesForGrapher(this)\n            this.selection.addToSelection(peerCountries)\n        })()\n\n        try {\n            await this.peerCountriesPromise\n        } finally {\n            // Clear the promise cache after completion (success or failure)\n            // so future calls will trigger a new operation if needed\n            this.peerCountriesPromise = undefined\n        }\n    }\n\n    @computed get regionGroups(): RegionGroup[] {\n        return groupEntitiesByRegionType(this.availableEntityNames)\n    }\n\n    @computed get entitiesByRegionGroup(): EntitiesByRegionGroup {\n        return new Map(\n            this.regionGroups.map(({ regionGroupKey, entityNames }) => [\n                regionGroupKey,\n                entityNames,\n            ])\n        )\n    }\n\n    @computed get _sortConfig(): Readonly<SortConfig> {\n        return {\n            sortBy: this.sortBy ?? SortBy.total,\n            sortOrder: this.sortOrder ?? SortOrder.desc,\n            sortColumnSlug: this.sortColumnSlug,\n        }\n    }\n\n    @computed get sortConfig(): SortConfig {\n        const sortConfig = { ...this._sortConfig }\n        // In relative mode, where the values for every entity sum up to 100%,\n        // sorting by total doesn't make sense. It's also jumpy because of some\n        // rounding errors. For this reason, we sort by entity name instead\n        if (\n            this.isRelativeMode &&\n            sortConfig.sortBy === SortBy.total &&\n            // Discrete bar charts don't support relative mode\n            !this.isOnDiscreteBarTab\n        ) {\n            sortConfig.sortBy = SortBy.entityName\n            sortConfig.sortOrder = SortOrder.asc\n        }\n        return sortConfig\n    }\n\n    @computed get hasMultipleYColumns(): boolean {\n        return this.yColumnSlugs.length > 1\n    }\n\n    @computed private get hasSingleMetricInFacets(): boolean {\n        const {\n            isOnStackedDiscreteBarTab,\n            isOnStackedAreaTab,\n            isOnStackedBarTab,\n            hasMultipleYColumns,\n        } = this\n\n        if (isOnStackedDiscreteBarTab) {\n            return (\n                this.facetStrategy === FacetStrategy.entity ||\n                this.facetStrategy === FacetStrategy.metric\n            )\n        }\n\n        if (isOnStackedAreaTab || isOnStackedBarTab) {\n            return (\n                this.facetStrategy === FacetStrategy.entity &&\n                !hasMultipleYColumns\n            )\n        }\n\n        return false\n    }\n\n    @computed private get hasSingleEntityInFacets(): boolean {\n        const { isOnStackedAreaTab, isOnStackedBarTab, selection } = this\n\n        if (isOnStackedAreaTab || isOnStackedBarTab) {\n            return (\n                this.facetStrategy === FacetStrategy.metric &&\n                selection.numSelectedEntities === 1\n            )\n        }\n\n        return false\n    }\n\n    /** Relative mode is wrong for these charts: https://github.com/owid/owid-grapher/issues/2136 */\n    @computed\n    private get isStackedChartSplitByMetric(): boolean {\n        if (!this.isOnStackedAreaTab && !this.isOnStackedBarTab) return false\n        return this.facetStrategy === FacetStrategy.metric\n    }\n\n    @computed get availableFacetStrategies(): FacetStrategy[] {\n        return this.chartState.availableFacetStrategies?.length\n            ? this.chartState.availableFacetStrategies\n            : [FacetStrategy.none]\n    }\n\n    /** The actual facet setting used by a chart, potentially overriding selectedFacetStrategy */\n    @computed get facetStrategy(): FacetStrategy {\n        if (\n            this.selectedFacetStrategy &&\n            this.availableFacetStrategies.includes(this.selectedFacetStrategy)\n        )\n            return this.selectedFacetStrategy\n\n        if (\n            !this.isOnDumbbellTab &&\n            !this.isOnSwimlaneTab &&\n            this.addCountryMode === EntitySelectionMode.SingleEntity &&\n            this.selection.selectedEntityNames.length > 1\n        ) {\n            return FacetStrategy.entity\n        }\n\n        if (this.availableFacetStrategies.length === 0)\n            throw new Error(\"No facet strategy available\")\n\n        return firstOfNonEmptyArray(this.availableFacetStrategies)\n    }\n\n    @computed get isFaceted(): boolean {\n        // Show map facets if start and end time are different\n        if (this.isOnMapTab) return this.startTime !== this.endTime\n\n        const hasFacetStrategy = this.facetStrategy !== FacetStrategy.none\n        return this.isOnChartTab && hasFacetStrategy\n    }\n\n    @computed get hasMultipleSeriesPerFacet(): boolean {\n        return (\n            this.isFaceted &&\n            this.selection.numSelectedEntities > 1 &&\n            this.yColumnSlugs.length > 1\n        )\n    }\n\n    @computed get supportedSortConfig(): SortConfig {\n        const { sortBy } = this._sortConfig\n        if (sortBy && this.availableSortKeysAcrossChartTypes.includes(sortBy))\n            return this._sortConfig\n        return (\n            this.chartStateExceptMap.defaultSortConfig ?? {\n                sortBy: SortBy.total,\n                sortOrder: SortOrder.desc,\n            }\n        )\n    }\n\n    @computed get availableSortKeysAcrossChartTypes(): SortBy[] {\n        const keys = this.validChartTypes.flatMap(\n            (chartType) =>\n                makeChartState(chartType, this).availableSortKeys ?? []\n        )\n        return _.uniq(keys)\n    }\n\n    @computed get isInFullScreenMode(): boolean {\n        return this._isInFullScreenMode\n    }\n\n    set isInFullScreenMode(newValue: boolean) {\n        // Prevent scrolling when in full-screen mode\n        if (newValue) {\n            document.documentElement.classList.add(\"no-scroll\")\n        } else {\n            document.documentElement.classList.remove(\"no-scroll\")\n        }\n\n        // Dismiss the share menu\n        this.isShareMenuActive = false\n\n        this._isInFullScreenMode = newValue\n    }\n\n    @action.bound setHideExternalControlsInEmbedUrl(value: boolean): void {\n        this.hideExternalControlsInEmbedUrl = value\n    }\n\n    @computed get isModalOpen(): boolean {\n        return this.isEntitySelectorModalOpen || this.activeModal !== undefined\n    }\n\n    // Whether a server-side download is available for the download modal\n    @computed get isServerSideDownloadAvailable(): boolean {\n        return (\n            // We're not on an archival grapher page\n            !this.isOnArchivalPage &&\n            // We're not inside the admin\n            getWindowAdmin() === undefined &&\n            // We're not in a narrative chart\n            !this.narrativeChartInfo &&\n            // We have a baseUrl to send the request to\n            !!this.baseUrl\n        )\n    }\n\n    @computed get baseFontSize(): number {\n        if (this.isStatic && this.initialOptions.baseFontSize)\n            return this.initialOptions.baseFontSize\n        if (this.isStaticAndSmall) {\n            return this.computeBaseFontSizeFromHeight(this.staticBounds)\n        }\n        if (this.isStatic) return 18\n        return this.computeBaseFontSizeFromWidth(this.captionedChartBounds)\n    }\n\n    // The header and footer don't rely on the base font size unless explicitly specified\n    @computed get useBaseFontSize(): boolean {\n        return this.initialOptions.baseFontSize !== undefined\n    }\n\n    private computeBaseFontSizeFromHeight(bounds: Bounds): number {\n        const squareBounds = DEFAULT_GRAPHER_BOUNDS_SQUARE\n        const factor = squareBounds.height / 21\n        return Math.max(10, bounds.height / factor)\n    }\n\n    private computeBaseFontSizeFromWidth(bounds: Bounds): number {\n        if (bounds.width <= 400) return 14\n        else if (bounds.width < 1080) return 16\n        else if (bounds.width >= 1080) return 18\n        else return 16\n    }\n\n    @computed get fontSize(): number {\n        return this.baseFontSize\n    }\n\n    @computed get isNarrow(): boolean {\n        if (this.isStatic) return false\n        return this.frameBounds.width <= 420\n    }\n\n    @computed get isSemiNarrow(): boolean {\n        if (this.isStatic) return false\n        return this.frameBounds.width <= 550\n    }\n\n    /**\n     * Small charts are typically rendered into 6 or 7 columns in a 12-column\n     * grid layout (e.g. side-by-side charts or charts in the All Charts block)\n     */\n    @computed get isSmall(): boolean {\n        if (this.isStatic) return false\n        return this.frameBounds.width <= 740\n    }\n\n    /**\n     * Medium charts are typically rendered into 8 columns in a 12-column\n     * grid layout (e.g. stand-alone charts in the main text of an article)\n     */\n    @computed get isMedium(): boolean {\n        if (this.isStatic) return false\n        return this.frameBounds.width <= 845\n    }\n\n    @computed get isStaticAndSmall(): boolean {\n        if (!this.isStatic) return false\n        return this.areStaticBoundsSmall\n    }\n\n    @computed private get areStaticBoundsSmall(): boolean {\n        const { defaultBounds, staticBounds } = this\n        const idealPixelCount = defaultBounds.width * defaultBounds.height\n        const staticPixelCount = staticBounds.width * staticBounds.height\n        return staticPixelCount < 0.66 * idealPixelCount\n    }\n\n    @computed get patternScale(): number {\n        if (!this.isStatic) return 1\n        const { defaultBounds, staticBounds } = this\n        const sizeRatio = Math.min(\n            staticBounds.width / defaultBounds.width,\n            staticBounds.height / defaultBounds.height\n        )\n        return R.clamp(Math.sqrt(sizeRatio), { min: 0.75, max: 1 })\n    }\n\n    private readonly patternIdGuid = guid()\n\n    // Static exports are standalone SVGs, so they can keep plain pattern ids\n    @computed get patternIdSuffix(): string | undefined {\n        return this.isStatic ? undefined : String(this.patternIdGuid)\n    }\n\n    @computed get isExportingForWikimedia(): boolean {\n        return this.isExportingToSvgOrPng && this.isWikimediaExport\n    }\n\n    @computed get shouldPinTooltipToBottom(): boolean {\n        return this.isTouchDevice\n    }\n\n    @computed private get hasRelatedQuestion(): boolean {\n        if (this.hideRelatedQuestion || !this.relatedQuestions?.length)\n            return false\n        const question = this.relatedQuestions[0]\n        return !!question && !!question.text && !!question.url\n    }\n\n    @computed\n    private get isRelatedQuestionTargetDifferentFromCurrentPage(): boolean {\n        // Comparing paths rather than full URLs for this to work as\n        // expected on local and staging where the origin (e.g.\n        // hans.owid.cloud) doesn't match the production origin that has\n        // been entered in the related question URL field:\n        // \"ourworldindata.org\" and yet should still yield a match.\n        // - Note that this won't work on production previews (where the\n        //   path is /admin/posts/preview/ID)\n        const { relatedQuestions = [], hasRelatedQuestion } = this\n        const relatedQuestion = relatedQuestions[0]\n        return (\n            hasRelatedQuestion &&\n            !!relatedQuestion &&\n            getWindowUrl().pathname !==\n                Url.fromURL(relatedQuestion.url).pathname\n        )\n    }\n\n    @computed get showRelatedQuestion(): boolean {\n        return (\n            !!this.relatedQuestions &&\n            !!this.hasRelatedQuestion &&\n            !!this.isRelatedQuestionTargetDifferentFromCurrentPage\n        )\n    }\n\n    @action.bound clearSelection(): void {\n        this.selection.clearSelection()\n        this.applyOriginalSelectionAsAuthored()\n    }\n\n    @action.bound private clearFocus(): void {\n        this.focusArray.clear()\n        this.applyOriginalFocusAsAuthored()\n    }\n\n    @action.bound clearQueryParams(): void {\n        const { authorsVersion } = this\n        this.tab = authorsVersion.tab\n        this.xAxis.scaleType = authorsVersion.xAxis.scaleType\n        this.yAxis.scaleType = authorsVersion.yAxis.scaleType\n        this.stackMode = authorsVersion.stackMode\n        this.zoomToSelection = authorsVersion.zoomToSelection\n        this.compareEndPointsOnly = authorsVersion.compareEndPointsOnly\n        this.minTime = authorsVersion.minTime\n        this.maxTime = authorsVersion.maxTime\n        this.map.time = authorsVersion.map.time\n        this.map.startTime = authorsVersion.map.startTime\n        this.map.region = authorsVersion.map.region\n        this.showNoDataArea = authorsVersion.showNoDataArea\n        this.dataTableConfig.filter = authorsVersion.dataTableConfig.filter\n        this.dataTableConfig.search = authorsVersion.dataTableConfig.search\n        this.dataTableSort = undefined\n        this.mapConfig.globe.isActive = authorsVersion.mapConfig.globe.isActive\n        this.clearSelection()\n        this.clearFocus()\n        this.mapConfig.selection.clearSelection()\n    }\n\n    /**\n     * Resets the Grapher to a blank slate, so that if you updateFromObject and\n     * the object contains some blanks, those blanks won't overwrite defaults.\n     */\n    @action.bound reset(): void {\n        const grapherState = new GrapherState({})\n        for (const key of grapherKeysToSerialize) {\n            // @ts-expect-error grapherKeysToSerialize is not properly typed\n            this[key] = grapherState[key]\n        }\n        this.seriesColorMap = new Map()\n\n        this.ySlugs = grapherState.ySlugs\n        this.xSlug = grapherState.xSlug\n        this.colorSlug = grapherState.colorSlug\n        this.sizeSlug = grapherState.sizeSlug\n\n        this.dataTableSort = undefined\n        this.selection.clearSelection()\n        this.focusArray.clear()\n    }\n\n    @computed.struct private get allParams(): GrapherQueryParams {\n        return grapherObjectToQueryParams(this)\n    }\n\n    @computed get overlayParam(): string | undefined {\n        if (!this.activeModal) return undefined\n        return match(this.activeModal)\n            .with(GrapherModal.Download, () => {\n                return match(this.activeDownloadModalTab)\n                    .with(DownloadModalTabName.Data, () => \"download-data\")\n                    .with(DownloadModalTabName.Vis, () => \"download-vis\")\n                    .exhaustive()\n            })\n            .with(GrapherModal.Embed, () => {\n                // We could include the embed modal in the `overlay=` params,\n                // but there has been an issue in the past where we accidentally\n                // included that in the Embed dialog's URL, and then embeds would\n                // always show the modal. Linking directly to the modal doesn't\n                // have much of a use case, anyway.\n                return undefined\n            })\n            .with(GrapherModal.Sources, () => \"sources\")\n            .exhaustive()\n    }\n\n    @computed get areSelectedEntitiesDifferentThanAuthors(): boolean {\n        const authoredConfig = this.legacyConfigAsAuthored\n        const currentSelectedEntityNames = this.selection.selectedEntityNames\n        const originalSelectedEntityNames =\n            authoredConfig.selectedEntityNames ?? []\n\n        return isArrayDifferentFromReference(\n            currentSelectedEntityNames,\n            originalSelectedEntityNames\n        )\n    }\n\n    @computed get areFocusedSeriesNamesDifferentThanAuthors(): boolean {\n        const authoredConfig = this.legacyConfigAsAuthored\n        const currentFocusedSeriesNames = this.focusArray.seriesNames\n        const originalFocusedSeriesNames =\n            authoredConfig.focusedSeriesNames ?? []\n\n        return isArrayDifferentFromReference(\n            currentFocusedSeriesNames,\n            originalFocusedSeriesNames\n        )\n    }\n\n    /**\n     * Autocomputed url params to reflect difference between current grapher state\n     * and original config state\n     */\n    @computed.struct get changedParams(): Partial<GrapherQueryParams> {\n        return differenceObj(this.allParams, this.authorsVersion.allParams)\n    }\n\n    /** Useful to compare current state against the published grapher */\n    @computed get authorsVersion(): GrapherState {\n        return new GrapherState({\n            ...this.legacyConfigAsAuthored,\n            manager: undefined,\n            queryStr: \"\",\n        })\n    }\n\n    @computed get queryStr(): string {\n        if (this.manager?.queryStr !== undefined) return this.manager.queryStr\n\n        return queryParamsToStr({\n            ...this.changedParams,\n            ...this.externalQueryParams,\n        })\n    }\n\n    /** Static root URL of the chart, e.g. https://ourworldindata.org/grapher/life-expectancy */\n    @computed get baseUrl(): string | undefined {\n        if (this.isOnArchivalPage) return this.archiveContext?.archiveUrl\n\n        if (this.manager?.baseUrl) return this.manager.baseUrl\n\n        return this.isPublished\n            ? `${this.bakedGrapherURL ?? \"/grapher\"}/${this.displaySlug}`\n            : undefined\n    }\n\n    @computed private get canonicalUrlIfIsNarrativeChart(): string | undefined {\n        if (!this.narrativeChartInfo) return undefined\n\n        const { parentChartSlug, queryParamsForParentChart } =\n            this.narrativeChartInfo\n\n        const combinedQueryParams = {\n            ...queryParamsForParentChart,\n            ...this.changedParams,\n        }\n\n        return `${this.bakedGrapherURL}/${parentChartSlug}${queryParamsToStr(\n            combinedQueryParams\n        )}`\n    }\n\n    /**\n     * Full URL representing the canonical location of this grapher state,\n     * e.g. https://ourworldindata.org/grapher/life-expectancy?tab=map\n     */\n    @computed get canonicalUrl(): string | undefined {\n        if (this.canonicalUrlOverride !== undefined)\n            return this.canonicalUrlOverride ?? undefined\n        return (\n            this.canonicalUrlIfIsNarrativeChart ??\n            (this.baseUrl ? this.baseUrl + this.queryStr : undefined)\n        )\n    }\n\n    @computed get isOnCanonicalUrl(): boolean {\n        if (!this.canonicalUrl) return false\n        return (\n            getWindowUrl().pathname === Url.fromURL(this.canonicalUrl).pathname\n        )\n    }\n\n    private makeEmbedUrl(baseUrl: string): string {\n        let url = Url.fromURL(baseUrl)\n        // We want to preserve the tab in the embed URL so that if we change the\n        // default view of the chart, it won't change existing embeds.\n        // See https://github.com/owid/owid-grapher/issues/2805\n        const { tab } = this.allParams\n        if (tab && !url.queryParams.tab) {\n            url = url.updateQueryParams({ tab })\n        }\n        if (this.canHideExternalControlsInEmbed) {\n            url = url.updateQueryParams({\n                hideControls: this.hideExternalControlsInEmbedUrl.toString(),\n            })\n        }\n        return url.fullUrl\n    }\n\n    @computed get embedUrl(): string | undefined {\n        const baseUrl = this.canonicalUrl\n        if (!baseUrl) return undefined\n        return this.makeEmbedUrl(baseUrl)\n    }\n\n    @computed get embedArchivedUrl(): string | undefined {\n        if (!this.archiveContext) return undefined\n        const baseUrl = this.archiveContext.archiveUrl + this.queryStr\n        return this.makeEmbedUrl(baseUrl)\n    }\n\n    @computed get hasUserChangedTimeHandles(): boolean {\n        const authorsVersion = this.authorsVersion\n        return (\n            this.minTime !== authorsVersion.minTime ||\n            this.maxTime !== authorsVersion.maxTime\n        )\n    }\n\n    @computed private get hasUserChangedMapTimeHandle(): boolean {\n        const authorsVersion = this.authorsVersion\n        return (\n            this.map.startTime !== authorsVersion.map.startTime ||\n            this.map.time !== authorsVersion.map.time\n        )\n    }\n\n    @computed get timeParam(): string | undefined {\n        const { timeColumn } = this.table\n        const formatTime = (time: Time): string =>\n            timeBoundToTimeBoundString(\n                time,\n                timeColumn instanceof ColumnTypeMap.Day\n            )\n\n        if (this.isOnMapTab) {\n            if (!this.hasUserChangedMapTimeHandle) return undefined\n            if (this.map.time === undefined) return undefined\n\n            if (this.map.startTime === undefined)\n                return formatTime(this.map.time)\n\n            const startTime = formatTime(this.map.startTime)\n            const endTime = formatTime(this.map.time)\n\n            return startTime === endTime\n                ? startTime\n                : `${startTime}..${endTime}`\n        }\n\n        if (!this.hasUserChangedTimeHandles) return undefined\n\n        const [startTime, endTime] =\n            this.timelineHandleTimeBounds.map(formatTime)\n        return startTime === endTime ? startTime : `${startTime}..${endTime}`\n    }\n\n    private dismissTooltip(): void {\n        const tooltip = this.tooltip?.get()\n        if (tooltip) tooltip.dismiss?.()\n    }\n\n    @action.bound onTimelineClick(): void {\n        this.dismissTooltip()\n    }\n\n    // Called when an entity is selected in the entity selector\n    @action.bound onSelectEntity(entityName: EntityName): void {\n        const { selectedCountryNamesInForeground } = this.mapConfig.selection\n\n        if (!this.isOnMapTab || !this.isMapSelectionEnabled) return\n\n        const region = getRegionByName(entityName)\n        if (!region) return\n\n        if (this.mapConfig.globe.isActive) {\n            if (\n                checkIsCountry(region) &&\n                region.isMappable &&\n                selectedCountryNamesInForeground.includes(region.name)\n            ) {\n                // Rotate to the selected country\n                this.globeController.rotateToCountry(region.name)\n                this.mapConfig.region = MapRegionName.World\n            } else if (checkIsOwidContinent(region)) {\n                // Rotate to the selected owid continent\n                const regionName = MAP_REGION_NAMES[\n                    region.name\n                ] as GlobeRegionName\n                this.globeController.rotateToOwidContinent(regionName)\n                this.mapConfig.region = regionName\n            } else if (checkIsIncomeGroup(region)) {\n                // Switch back to the 2d map if an income group is selected\n                this.globeController.hideGlobe()\n                this.globeController.resetGlobe()\n                this.mapConfig.region = MapRegionName.World\n            } else if (checkHasMembers(region)) {\n                // Rotate to the selected region\n                this.globeController.rotateToRegion(region.name)\n                this.mapConfig.region = MapRegionName.World\n            }\n        }\n    }\n\n    // Called when an entity is deselected in the entity selector\n    @action.bound onDeselectEntity(entityName: EntityName): void {\n        // Remove focus from an entity that has been removed from the selection\n        this.focusArray.remove(entityName)\n\n        // Remove focus from the deselected country\n        this.globeController.dismissCountryFocus()\n    }\n\n    // Called when all entities are cleared in the entity selector\n    @action.bound onClearEntities(): void {\n        // Remove focus from all entities if all entities have been deselected\n        this.focusArray.clear()\n\n        // Switch back to the 2d map if all entities were deselected\n        if (this.isOnMapTab) {\n            this.globeController.hideGlobe()\n            this.globeController.resetGlobe()\n        }\n    }\n\n    isEntityMutedInSelector(entityName: EntityName): boolean {\n        // For now, muted entities are only relevant on the map tab\n        if (!this.isOnMapTab) return false\n\n        // Entities disabled on the map are muted\n        if (\n            this.mapConfig.selection.selectedCountryNamesInBackground.includes(\n                entityName\n            )\n        )\n            return true\n\n        // If a 2d continent is active, then all countries outside of the continent\n        // are not shown on the map, so they're muted in the entity selector as well\n        if (this.mapConfig.is2dContinentActive()) {\n            const region = getRegionByName(entityName)\n            if (!region) return false\n\n            // Don't mute the selected continent\n            if (checkIsOwidContinent(region))\n                return region.name !== MAP_REGION_LABELS[this.mapConfig.region]\n\n            const countriesInRegion = getCountriesByRegion(\n                MAP_REGION_LABELS[this.mapConfig.region]\n            )\n            if (!countriesInRegion) return false\n\n            return !countriesInRegion.has(entityName)\n        }\n\n        return false\n    }\n\n    @computed get disablePlay(): boolean {\n        return (\n            this.isOnTableTab ||\n            this.isOnSlopeChartTab ||\n            this.isOnMarimekkoTab ||\n            (this.times.length > 0 && this.times.length <= 2)\n        )\n    }\n\n    @computed get animationEndTime(): Time {\n        const { timeColumn } = this.table\n        if (this.timelineMaxTime) {\n            const timesAsc = sortNumeric(timeColumn.uniqValues.slice())\n            return (\n                findClosestTime(timesAsc, this.timelineMaxTime) ??\n                timeColumn.maxTime\n            )\n        }\n        return timeColumn.maxTime\n    }\n\n    @computed get canSelectMultipleEntities(): boolean {\n        if (this.isOnMapTab) return true\n\n        if (this.numSelectableEntityNames < 2) return false\n        if (\n            this.addCountryMode === EntitySelectionMode.MultipleEntities ||\n            ((this.isOnDumbbellTab || this.isOnSwimlaneTab) &&\n                this.addCountryMode === EntitySelectionMode.SingleEntity)\n        )\n            return true\n\n        // If the chart is currently faceted by entity, then use multi-entity\n        // selection, even if the author specified single-entity selection\n        if (\n            this.addCountryMode === EntitySelectionMode.SingleEntity &&\n            this.facetStrategy === FacetStrategy.entity\n        )\n            return true\n\n        return false\n    }\n\n    @computed get canChangeEntity(): boolean {\n        return (\n            this.hasChartTab &&\n            !this.isOnScatterTab &&\n            !this.isOnDumbbellTab &&\n            !this.canSelectMultipleEntities &&\n            this.addCountryMode === EntitySelectionMode.SingleEntity &&\n            this.numSelectableEntityNames > 1\n        )\n    }\n\n    @computed get canAddEntities(): boolean {\n        return (\n            this.hasChartTab &&\n            this.canSelectMultipleEntities &&\n            (this.isOnLineChartTab ||\n                this.isOnSlopeChartTab ||\n                this.isOnStackedAreaTab ||\n                this.isOnStackedBarTab ||\n                this.isOnDiscreteBarTab ||\n                this.isOnStackedDiscreteBarTab ||\n                this.isOnDumbbellTab ||\n                this.isOnSwimlaneTab)\n        )\n    }\n\n    @computed get canHighlightEntities(): boolean {\n        return (\n            this.hasChartTab &&\n            this.addCountryMode !== EntitySelectionMode.Disabled &&\n            this.numSelectableEntityNames > 1 &&\n            !this.canAddEntities &&\n            !this.canChangeEntity\n        )\n    }\n\n    @computed get canChangeAddOrHighlightEntities(): boolean {\n        return (\n            this.canChangeEntity ||\n            this.canAddEntities ||\n            this.canHighlightEntities\n        )\n    }\n\n    @computed get shouldShowEntitySelectorAs(): GrapherWindowType {\n        if (this.frameBounds.width > 940) return GrapherWindowType.panel\n\n        return this.isSemiNarrow\n            ? GrapherWindowType.modal\n            : GrapherWindowType.drawer\n    }\n\n    @computed private get isEntitySelectorPanelActive(): boolean {\n        if (this.hideEntityControls) return false\n\n        const shouldShowPanel =\n            this.shouldShowEntitySelectorAs === GrapherWindowType.panel\n\n        if (this.isOnMapTab && this.isMapSelectionEnabled && shouldShowPanel)\n            return true\n\n        return (\n            this.isOnChartTab &&\n            this.canChangeAddOrHighlightEntities &&\n            shouldShowPanel\n        )\n    }\n\n    @computed get isEntitySelectorModalOpen(): boolean {\n        return (\n            this.isEntitySelectorModalOrDrawerOpen &&\n            this.shouldShowEntitySelectorAs === GrapherWindowType.modal\n        )\n    }\n\n    @computed get isEntitySelectorDrawerOpen(): boolean {\n        return (\n            this.isEntitySelectorModalOrDrawerOpen &&\n            this.shouldShowEntitySelectorAs === GrapherWindowType.drawer\n        )\n    }\n\n    @computed get isMapSelectionEnabled(): boolean {\n        if (this.enableMapSelection) return true\n\n        return (\n            // If the entity controls are hidden, then selecting entities from\n            // the map should also be disabled\n            !this.hideEntityControls &&\n            // Only show the entity selector on the map tab if it's rendered\n            // into the side panel or into the slide-in drawer\n            this.shouldShowEntitySelectorAs !== GrapherWindowType.modal\n        )\n    }\n\n    @computed private get numSelectableEntityNames(): number {\n        return this.availableEntityNames.length\n    }\n\n    mapGrapherTabToQueryParam(tabName: GrapherTabName): string {\n        return this.mapTabNameToTabConfigOption(tabName)\n    }\n\n    private mapTabNameToTabConfigOption(\n        tabName: GrapherTabName\n    ): GrapherTabConfigOption {\n        switch (tabName) {\n            case GRAPHER_TAB_NAMES.Table:\n                return GRAPHER_TAB_CONFIG_OPTIONS.table\n            case GRAPHER_TAB_NAMES.WorldMap:\n                return GRAPHER_TAB_CONFIG_OPTIONS.map\n            default:\n                return this.hasMultipleChartTypes\n                    ? mapChartTypeNameToTabConfigOption(tabName)\n                    : GRAPHER_TAB_CONFIG_OPTIONS.chart\n        }\n    }\n\n    private mapTabConfigOptionToTabName(\n        tabOption: GrapherTabConfigOption\n    ): GrapherTabName {\n        if (tabOption === GRAPHER_TAB_CONFIG_OPTIONS.table)\n            return GRAPHER_TAB_NAMES.Table\n\n        if (tabOption === GRAPHER_TAB_CONFIG_OPTIONS.map)\n            return this.hasMapTab ? GRAPHER_TAB_NAMES.WorldMap : this.defaultTab\n\n        if (tabOption === GRAPHER_TAB_CONFIG_OPTIONS.chart) {\n            return this.defaultTab\n        }\n\n        const chartTypeName = mapTabConfigOptionToChartTypeName(tabOption)\n        return this.validChartTypeSet.has(chartTypeName)\n            ? chartTypeName\n            : this.defaultTab\n    }\n}\n\nexport const defaultObject: GrapherInterface = objectWithPersistablesToObject(\n    new GrapherState({}),\n    grapherKeysToSerialize\n)\n","import * as React from \"react\"\nimport { GrapherProgrammaticInterface } from \"../core/Grapher.js\"\nimport { GrapherState } from \"../core/GrapherState.js\"\nimport { MultiDimDataPageConfig, Url } from \"@ourworldindata/utils\"\nimport {\n    GrapherQueryParams,\n    MultiDimDimensionChoices,\n    ChartConfigType,\n} from \"@ourworldindata/types\"\n\nexport interface ArchiveGuidedChartRegistration {\n    iframeRef: React.RefObject<HTMLIFrameElement | null>\n    baseUrl: string\n    defaultQueryParams: Record<string, string | undefined>\n    chartConfigType: ChartConfigType\n}\n\nexport interface GuidedChartContextValue {\n    /** Called with the chart's GrapherState; returns a function to unregister */\n    registerGrapherState?: (grapherState: GrapherState) => () => void\n    /** Called with the chart's container element; returns a function to unregister */\n    registerChartElement?: (element: HTMLDivElement) => () => void\n    onGuidedChartLinkClick?: (href: string) => void\n    registerArchiveChart?: (\n        registration: ArchiveGuidedChartRegistration\n    ) => () => void\n    registerMultiDim?: (registrationData: {\n        config: MultiDimDataPageConfig\n        onSettingsChange: (\n            newSettings: MultiDimDimensionChoices,\n            queryParams: GrapherQueryParams\n        ) => void\n        grapherContainerRef: React.RefObject<HTMLDivElement | null>\n    }) => void\n}\n\nexport const GuidedChartContext =\n    React.createContext<GuidedChartContextValue | null>(null)\n\n/**\n * Returns a ref holding a new `GrapherState` initialized with the provided\n * config. If called within a `GuidedChartContext`, also registers the\n * `GrapherState` with it, so it can be controlled from a GuidedChart.\n */\nexport function useMaybeGlobalGrapherStateRef(\n    config: GrapherProgrammaticInterface\n): React.RefObject<GrapherState> {\n    const registerGrapherState =\n        React.useContext(GuidedChartContext)?.registerGrapherState\n    const grapherStateRef = React.useRef<GrapherState | null>(null)\n\n    if (grapherStateRef.current === null) {\n        grapherStateRef.current = new GrapherState(config)\n    }\n\n    React.useEffect(() => {\n        if (!registerGrapherState || !grapherStateRef.current) return\n        return registerGrapherState(grapherStateRef.current)\n    }, [registerGrapherState])\n\n    return grapherStateRef as React.RefObject<GrapherState>\n}\n\nexport function useGuidedChartLinkHandler():\n    | ((href: string) => void)\n    | undefined {\n    const context = React.useContext(GuidedChartContext)\n    return context?.onGuidedChartLinkClick\n}\n\nexport const buildArchiveGuidedChartSrc = (\n    registration: ArchiveGuidedChartRegistration,\n    guidedUrl: Url\n): string => {\n    const baseUrl = Url.fromURL(registration.baseUrl)\n    const mergedQuery = {\n        ...registration.defaultQueryParams,\n        ...guidedUrl.queryParams,\n    }\n    const updatedUrl = baseUrl.setQueryParams(mergedQuery)\n\n    const hash = guidedUrl.hash || baseUrl.hash\n    return hash ? updatedUrl.update({ hash }).fullUrl : updatedUrl.fullUrl\n}\n","import { GrapherInterface, ArchiveContext } from \"@ourworldindata/types\"\nimport React from \"react\"\nimport { Grapher, GrapherProgrammaticInterface } from \"./Grapher.js\"\nimport { Bounds } from \"@ourworldindata/utils\"\nimport { fetchInputTableForConfig } from \"./loadGrapherTableHelpers.js\"\nimport { legacyToCurrentGrapherQueryParams } from \"./GrapherUrlMigrations.js\"\nimport { unstable_batchedUpdates } from \"react-dom\"\nimport { migrateGrapherConfigToLatestVersion } from \"../schema/migrations/migrate.js\"\nimport { useMaybeGlobalGrapherStateRef } from \"../chart/guidedChartUtils.js\"\nimport { loadCatalogData } from \"./loadCatalogData.js\"\nimport { useIsomorphicLayoutEffect } from \"usehooks-ts\"\n\nexport interface FetchingGrapherProps {\n    config?: GrapherProgrammaticInterface\n    configUrl?: string\n    dataApiUrl: string\n    catalogUrl: string\n    archiveContext: ArchiveContext | undefined\n    queryStr?: string\n    externalBounds?: Bounds\n    noCache?: boolean\n}\n\nexport function FetchingGrapher(\n    props: FetchingGrapherProps\n): React.ReactElement | null {\n    // if config is not provided, fetch it from configUrl\n\n    const [downloadedConfig, setDownloadedConfig] = React.useState<\n        GrapherInterface | undefined\n    >(undefined)\n\n    const grapherStateRef = useMaybeGlobalGrapherStateRef({\n        ...props.config,\n        additionalDataLoaderFn: (catalogKey) =>\n            loadCatalogData(catalogKey, {\n                baseUrl: props.catalogUrl,\n                assetMap:\n                    props.archiveContext?.type === \"archive-page\"\n                        ? props.archiveContext.assets.runtime\n                        : undefined,\n            }),\n        queryStr: props.queryStr,\n        bounds: props.externalBounds,\n        isConfigReady: !props.configUrl,\n    })\n\n    // Keep the MobX state in sync before paint so Grapher doesn't render a\n    // frame at stale/default bounds.\n    useIsomorphicLayoutEffect(() => {\n        if (props.externalBounds) {\n            grapherStateRef.current.externalBounds = props.externalBounds\n        }\n    }, [props.externalBounds, grapherStateRef])\n\n    // update grapherState when the config from props changes\n    React.useEffect(() => {\n        if (props.config?.bounds)\n            grapherStateRef.current.externalBounds = props.config.bounds\n    }, [props.config?.bounds, grapherStateRef])\n\n    React.useEffect(() => {\n        const abortController = new AbortController()\n\n        async function fetchAndApplyConfig(): Promise<void> {\n            if (props.configUrl) {\n                try {\n                    const fetchedConfig = await fetch(props.configUrl, {\n                        signal: abortController.signal,\n                    }).then((res) => res.json())\n\n                    if (abortController.signal.aborted) return\n\n                    const migratedConfig =\n                        migrateGrapherConfigToLatestVersion(fetchedConfig)\n\n                    const mergedConfig = {\n                        ...migratedConfig,\n                        ...props.config,\n                    }\n                    setDownloadedConfig(mergedConfig)\n                    // Batch the grapher updates to avoid getting intermediate\n                    // grapherChangedParams values, which make the URL update\n                    // multiple times while flashing.\n                    // https://stackoverflow.com/a/48610973/9846837\n\n                    // TODO we may not need to this anymore in React 18.\n                    unstable_batchedUpdates(() => {\n                        grapherStateRef.current.reset()\n                        grapherStateRef.current.updateFromObject(mergedConfig)\n                        grapherStateRef.current.legacyConfigAsAuthored =\n                            mergedConfig\n                        grapherStateRef.current.isConfigReady = true\n\n                        // We now need to make sure that the query params are re-applied again\n                        grapherStateRef.current.populateFromQueryParams(\n                            legacyToCurrentGrapherQueryParams(\n                                grapherStateRef.current.initialOptions\n                                    .queryStr ?? \"\"\n                            )\n                        )\n                    })\n                } catch (error) {\n                    if (error instanceof Error && error.name !== \"AbortError\") {\n                        console.error(\"Failed to fetch config:\", error)\n                    }\n                }\n            }\n        }\n        void fetchAndApplyConfig()\n\n        return (): void => {\n            abortController.abort()\n        }\n    }, [props.config, props.configUrl, grapherStateRef])\n\n    React.useEffect(() => {\n        let isCancelled = false\n\n        grapherStateRef.current.isDataReady = false\n\n        async function fetchData(): Promise<void> {\n            const inputTable = await fetchInputTableForConfig({\n                dimensions:\n                    downloadedConfig?.dimensions ?? props.config?.dimensions,\n                selectedEntityColors:\n                    downloadedConfig?.selectedEntityColors ??\n                    props.config?.selectedEntityColors,\n                dataApiUrl: props.dataApiUrl,\n                archiveContext: props.archiveContext,\n                noCache: props.noCache,\n            })\n\n            if (isCancelled) return\n\n            if (inputTable) grapherStateRef.current.inputTable = inputTable\n\n            grapherStateRef.current.isDataReady = true\n        }\n        void fetchData()\n\n        return (): void => {\n            isCancelled = true\n        }\n    }, [\n        props.config?.dimensions,\n        props.dataApiUrl,\n        downloadedConfig?.dimensions,\n        downloadedConfig?.selectedEntityColors,\n        props.config?.selectedEntityColors,\n        props.archiveContext,\n        props.noCache,\n        grapherStateRef,\n    ])\n\n    // Reading the ref during render is fine here: the MobX GrapherState is\n    // created once and never replaced, and Grapher observes it itself.\n    /* oxlint-disable react/refs */\n    return (\n        <Grapher\n            // Force remount when the slug changes to make sure the GA\n            // grapher_view event is fired when navigating between different\n            // graphers using the same FetchingGrapher instance (e.g. in the\n            // All charts block)\n            key={grapherStateRef.current.slug}\n            grapherState={grapherStateRef.current}\n        />\n    )\n    /* oxlint-enable react/refs */\n}\n","import { useEffect, useState } from \"react\"\n\nimport * as React from \"react\"\nimport classnames from \"clsx\"\n\ntype VerticalScrollContainerProps = React.DetailedHTMLProps<\n    React.HTMLAttributes<HTMLDivElement>,\n    HTMLDivElement\n> & {\n    scrollingShadows?: boolean\n    scrollLock?: boolean\n    contentsId?: string\n}\n\nfunction useCombinedRefs<T>(\n    ...refs: React.Ref<T>[]\n): React.RefObject<T | null> {\n    const targetRef = React.useRef<T>(null)\n\n    React.useEffect(() => {\n        refs.forEach((ref) => {\n            if (!ref) return\n            if (typeof ref === \"function\") {\n                ref(targetRef.current || null)\n            } else {\n                ref.current = targetRef.current || null\n            }\n        })\n    }, [refs])\n\n    return targetRef\n}\n\nexport const VerticalScrollContainer = React.forwardRef(\n    function VerticalScrollContainer(\n        props: VerticalScrollContainerProps,\n        ref: React.Ref<HTMLDivElement>\n    ) {\n        let {\n            scrollingShadows,\n            className,\n            children,\n            contentsId,\n            style,\n            scrollLock,\n            ...rest\n        } = props\n\n        scrollingShadows ??= true\n\n        const scrollContainerRef = useCombinedRefs<HTMLDivElement>(ref)\n        const [scrollTop, scrollBottom] = useScrollBounds(\n            scrollContainerRef,\n            contentsId\n        )\n\n        useScrollLock(scrollContainerRef, {\n            enable: scrollLock,\n            doNotLockIfNoScroll: true,\n        })\n\n        return (\n            <div\n                className=\"VerticalScrollContainerShadows\"\n                style={{\n                    position: \"relative\",\n                    height: \"100%\",\n                }}\n            >\n                {scrollingShadows && (\n                    <ScrollingShadow\n                        direction=\"down\"\n                        size={10}\n                        opacity={getShadowOpacity(0.15, 80, scrollTop)}\n                    />\n                )}\n                <div\n                    className={classnames(className, \"VerticalScrollContainer\")}\n                    style={{\n                        overflowY: \"auto\",\n                        position: \"absolute\",\n                        top: 0,\n                        right: 0,\n                        bottom: 0,\n                        left: 0,\n                        ...style,\n                    }}\n                    ref={scrollContainerRef}\n                    {...rest}\n                >\n                    {children}\n                </div>\n                {scrollingShadows && (\n                    <ScrollingShadow\n                        direction=\"up\"\n                        size={10}\n                        opacity={getShadowOpacity(0.15, 80, scrollBottom)}\n                    />\n                )}\n            </div>\n        )\n    }\n)\n\nfunction getShadowOpacity(\n    maxOpacity: number,\n    maxDistance: number,\n    scrollDistance: number | undefined\n): number {\n    const distance =\n        scrollDistance !== undefined ? Math.min(scrollDistance, maxDistance) : 0\n    return (distance / maxDistance) * maxOpacity\n}\n\nconst ScrollingShadow = (props: {\n    direction: \"up\" | \"down\"\n    size: number\n    opacity: number\n}): React.ReactElement => {\n    // \"Eased\" gradient\n    // https://larsenwork.com/easing-gradients/\n    const background = `linear-gradient(\n        to ${props.direction === \"up\" ? \"bottom\" : \"top\"},\n        hsla(0, 0%, 0%, 0) 0%,\n        hsla(0, 0%, 0%, 0.104) 25.8%,\n        hsla(0, 0%, 0%, 0.45) 60.9%,\n        hsla(0, 0%, 0%, 0.825) 88.7%,\n        hsl(0, 0%, 0%) 100%\n    )`\n    return (\n        <div\n            style={{\n                position: \"absolute\",\n                left: 0,\n                right: 0,\n                [props.direction === \"up\" ? \"bottom\" : \"top\"]: 0,\n                height: `${props.size}px`,\n                background: background,\n                opacity: props.opacity,\n                pointerEvents: \"none\",\n                zIndex: 2,\n            }}\n        />\n    )\n}\n\n/**\n * A throttled function that returns the available scrollTop and scrollBottom\n * @param ref\n * @param contentsId when this string changes, it's a signal that the contents have re-rendered and\n * the height has likely changed.\n */\nfunction useScrollBounds<ElementType extends HTMLElement>(\n    ref: React.RefObject<ElementType | null>,\n    contentsId?: string\n): [number | undefined, number | undefined] {\n    const [scrollTop, onScrollTop] = useState<number | undefined>(undefined)\n    const [scrollBottom, onScrollBottom] = useState<number | undefined>(\n        undefined\n    )\n\n    useEffect(() => {\n        const el = ref.current!\n        if (el) {\n            let pendingUpdate = false\n\n            function onScroll(): void {\n                const { scrollTop, scrollHeight, offsetHeight } = el\n                onScrollTop(scrollTop)\n                onScrollBottom(scrollHeight - offsetHeight - scrollTop)\n                pendingUpdate = false\n            }\n            onScroll() // execute for first time to setState\n\n            const onScrollThrottled = (): void => {\n                if (!pendingUpdate) {\n                    window.requestAnimationFrame(onScroll)\n                    pendingUpdate = true\n                }\n            }\n\n            el.addEventListener(\"scroll\", onScrollThrottled)\n            return (): void => {\n                el.removeEventListener(\"scroll\", onScrollThrottled)\n            }\n        }\n        return\n        // oxlint-disable-next-line react/exhaustive-effect-dependencies -- contentsId signals that the height has changed\n    }, [contentsId, ref])\n\n    return [scrollTop, scrollBottom]\n}\n\ninterface ScrollLockOptions {\n    enable: boolean\n    doNotLockIfNoScroll: boolean\n}\n\n/**\n * React hook to prevent scroll events propagating to parent element.\n * @param ref the React ref of the scrolling container\n */\nfunction useScrollLock<ElementType extends HTMLElement>(\n    ref: React.RefObject<ElementType | null>,\n    opts?: Partial<ScrollLockOptions>\n): void {\n    useEffect(() => {\n        const el = ref.current\n        const options: ScrollLockOptions = {\n            doNotLockIfNoScroll: false,\n            enable: true,\n            ...opts,\n        }\n        if (options.enable && el) {\n            function onWheel(ev: WheelEvent): void {\n                const el = ref.current\n                if (el) {\n                    const delta = ev.deltaY\n                    const up = delta < 0\n                    const { scrollTop, scrollHeight, offsetHeight } = el\n\n                    if (\n                        options.doNotLockIfNoScroll &&\n                        scrollHeight <= offsetHeight\n                    ) {\n                        return\n                    }\n\n                    function prevent(): void {\n                        ev.stopPropagation()\n                        ev.preventDefault()\n                    }\n\n                    if (\n                        !up &&\n                        delta > scrollHeight - offsetHeight - scrollTop\n                    ) {\n                        // Scrolling down, but this will take us past the bottom.\n                        el.scrollTop = scrollHeight\n                        return prevent()\n                    } else if (up && -delta > scrollTop) {\n                        // Scrolling up, but this will take us past the top.\n                        el.scrollTop = 0\n                        return prevent()\n                    }\n                }\n            }\n            el.addEventListener(\"wheel\", onWheel as any, {\n                // We need to be in non-passive mode to be able to cancel the event\n                passive: false,\n            })\n            return (): void => {\n                if (el) {\n                    el.removeEventListener(\"wheel\", onWheel as any)\n                }\n            }\n        }\n        return\n    }, [opts, ref])\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport * as R from \"remeda\"\nimport {\n    action,\n    computed,\n    observable,\n    runInAction,\n    reaction,\n    makeObservable,\n} from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { Flipper, Flipped } from \"react-flip-toolkit\"\nimport {\n    bind,\n    FuzzySearch,\n    scrollIntoViewIfNeeded,\n    sortByUndefinedLast,\n    ColumnSlug,\n    getUserCountryInformation,\n    regions,\n    SortOrder,\n    EntityName,\n    CoreColumnDef,\n    OwidTableSlugs,\n    positiveModulo,\n} from \"@ourworldindata/utils\"\nimport classnames from \"clsx\"\nimport { scaleLinear, ScaleLinear } from \"d3-scale\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faSearch, faTimes } from \"@fortawesome/free-solid-svg-icons\"\nimport { VerticalScrollContainer } from \"../../controls/VerticalScrollContainer\"\nimport { SortIcon } from \"../../controls/SortIcon\"\nimport { Dropdown, BasicDropdownOption } from \"../Dropdown\"\nimport {\n    ColumnTypeMap,\n    CoreColumn,\n    OwidTable,\n} from \"@ourworldindata/core-table\"\nimport { EntityPickerManager } from \"./EntityPickerConstants\"\nimport { SelectionArray } from \"../../selection/SelectionArray\"\n\nconst toggleSort = (order: SortOrder): SortOrder =>\n    order === SortOrder.desc ? SortOrder.asc : SortOrder.desc\n\nenum FocusDirection {\n    first = \"first\",\n    last = \"last\",\n    up = \"up\",\n    down = \"down\",\n}\n\ninterface EntityOptionWithMetricValue {\n    entityName: EntityName\n    plotValue: number | string | undefined\n    formattedValue: any\n    localEntitiesIndex: number | undefined\n}\n\ninterface EntityPickerProps {\n    manager: EntityPickerManager\n    selection: SelectionArray\n    isDropdownMenu?: boolean\n    onSelectEntity?: (entityName: EntityName) => void\n    onDeselectEntity?: (entityName: EntityName) => void\n    onClearEntities?: () => void\n}\n\n@observer\nexport class EntityPicker extends React.Component<EntityPickerProps> {\n    private searchInput: string | undefined = undefined\n    private readonly searchInputRef = React.createRef<HTMLInputElement>()\n\n    private focusIndex: number | undefined = undefined\n    private readonly focusRef = React.createRef<HTMLLabelElement>()\n    private scrollFocusedIntoViewOnUpdate = false\n\n    private blockOptionHover = false\n\n    private mostRecentlySelectedEntityName: string | null = null\n\n    private readonly scrollContainerRef = React.createRef<HTMLDivElement>()\n\n    private isOpen = false\n\n    private localEntityNames: string[] | undefined = undefined\n\n    constructor(props: EntityPickerProps) {\n        super(props)\n\n        makeObservable<\n            EntityPicker,\n            | \"searchInput\"\n            | \"searchInputRef\"\n            | \"focusIndex\"\n            | \"focusRef\"\n            | \"scrollFocusedIntoViewOnUpdate\"\n            | \"blockOptionHover\"\n            | \"mostRecentlySelectedEntityName\"\n            | \"scrollContainerRef\"\n            | \"isOpen\"\n            | \"localEntityNames\"\n        >(this, {\n            searchInput: observable,\n            searchInputRef: observable,\n            focusIndex: observable,\n            focusRef: observable,\n            scrollFocusedIntoViewOnUpdate: observable,\n            blockOptionHover: observable,\n            mostRecentlySelectedEntityName: observable,\n            scrollContainerRef: observable,\n            isOpen: observable,\n            localEntityNames: observable,\n        })\n    }\n\n    @computed private get isDropdownMenu(): boolean {\n        return !!this.props.isDropdownMenu\n    }\n\n    @action.bound private selectEntity(\n        name: EntityName,\n        checked?: boolean\n    ): void {\n        this.props.selection.toggleSelection(name)\n\n        if (this.props.selection.selectedSet.has(name)) {\n            this.props.onSelectEntity?.(name)\n        } else {\n            this.props.onDeselectEntity?.(name)\n        }\n\n        // Clear search input\n        this.searchInput = \"\"\n        this.manager.analytics?.logEntityPickerEvent(\n            checked ? \"select\" : \"deselect\",\n            name,\n            this.manager.analyticsContext?.viewConfigId\n        )\n\n        this.mostRecentlySelectedEntityName = name\n    }\n\n    @computed private get manager(): EntityPickerManager {\n        return this.props.manager\n    }\n\n    @computed private get metric(): string | undefined {\n        return this.manager.entityPickerMetric\n    }\n\n    @computed private get sortOrder(): SortOrder {\n        // On mobile, only allow sorting by entityName (ascending)\n        if (this.isDropdownMenu) return SortOrder.asc\n        return this.manager.entityPickerSort ?? SortOrder.asc\n    }\n\n    @computed private get pickerColumnDefs(): CoreColumnDef[] {\n        return this.manager.entityPickerColumnDefs ?? []\n    }\n\n    @computed private get metricOptions(): {\n        label: string\n        value: string | undefined\n    }[] {\n        const entityNameColumn = this.grapherTable?.entityNameColumn\n        const entityNameColumnInPickerColumnDefs = this.pickerColumnDefs.some(\n            (col) => col.slug === entityNameColumn?.slug\n        )\n        return _.compact([\n            { label: \"Relevance\", value: undefined },\n            !entityNameColumnInPickerColumnDefs &&\n                entityNameColumn && {\n                    label: _.upperFirst(this.manager.entityType) || \"Name\",\n                    value: entityNameColumn?.slug,\n                },\n            ...this.pickerColumnDefs.map(\n                (columnDef): { label: string; value: string } => {\n                    const label =\n                        columnDef?.display?.name ||\n                        columnDef.name ||\n                        columnDef.slug\n                    return { label, value: columnDef.slug }\n                }\n            ),\n        ])\n    }\n\n    @computed private get metricDropdownOptions(): BasicDropdownOption[] {\n        return this.metricOptions.map((option) => ({\n            // Use a special string value for undefined metric (relevance)\n            value: option.value ?? \"\",\n            label: option.label,\n        }))\n    }\n\n    @computed\n    private get selectedMetricDropdownOption():\n        | BasicDropdownOption\n        | undefined {\n        const targetValue = this.metric ?? \"\"\n        return this.metricDropdownOptions.find(\n            (option) => option.value === targetValue\n        )\n    }\n\n    @computed private get metricTable(): OwidTable | undefined {\n        if (this.metric === undefined) return undefined\n\n        // If the slug is \"entityName\", then try to get it from grapherTable first, because it might\n        // not be present in pickerTable (for indicator-powered explorers, for example).\n        if (\n            this.metric === OwidTableSlugs.EntityName &&\n            this.grapherTable?.has(this.metric)\n        )\n            return this.grapherTable\n        return this.pickerTable\n    }\n\n    @computed private get activePickerMetricColumn(): CoreColumn | undefined {\n        return this.metricTable?.get(this.metric)\n    }\n\n    @computed private get availableEntitiesForCurrentView(): Set<string> {\n        if (!this.grapherTable)\n            return new Set(this.manager.availableEntityNames)\n        if (!this.manager.requiredColumnSlugs?.length)\n            return this.grapherTable.availableEntityNameSet\n        return this.grapherTable.entitiesWith(this.manager.requiredColumnSlugs)\n    }\n\n    @action.bound async populateLocalEntity(): Promise<void> {\n        try {\n            const localCountryInfo = await getUserCountryInformation()\n            if (!localCountryInfo) return\n\n            const userEntityCodes = [\n                localCountryInfo.code,\n                ...(localCountryInfo.regions ?? []),\n                \"OWID_WRL\",\n            ]\n\n            const userRegionNames = _.sortBy(\n                regions.filter((region) =>\n                    userEntityCodes.includes(region.code)\n                ),\n                (region) => userEntityCodes.indexOf(region.code)\n            ).map((region) => region.name)\n\n            if (userRegionNames) this.localEntityNames = userRegionNames\n        } catch {\n            // ignore\n        }\n    }\n\n    @computed\n    private get entitiesWithMetricValue(): EntityOptionWithMetricValue[] {\n        const { metricTable, localEntityNames } = this\n        const col = this.activePickerMetricColumn\n        const entityNames = this.manager.availableEntityNames?.toSorted() ?? []\n        return entityNames.map((entityName) => {\n            const plotValue =\n                col && metricTable?.has(col.slug)\n                    ? (metricTable.getLatestValueForEntity(\n                          entityName,\n                          col.slug\n                      ) as string | number)\n                    : undefined\n\n            const formattedValue =\n                plotValue !== undefined\n                    ? col?.formatValueShortWithAbbreviations(plotValue)\n                    : undefined\n\n            const localEntitiesIndex = localEntityNames?.indexOf(entityName)\n            return {\n                entityName,\n                plotValue,\n                formattedValue,\n                localEntitiesIndex:\n                    localEntitiesIndex !== undefined && localEntitiesIndex >= 0\n                        ? localEntitiesIndex\n                        : undefined,\n            }\n        })\n    }\n\n    @computed private get grapherTable(): OwidTable | undefined {\n        return this.manager.grapherTable\n    }\n\n    @computed private get pickerTable(): OwidTable | undefined {\n        return this.manager.entityPickerTable\n    }\n\n    @computed get selection(): SelectionArray {\n        return this.props.selection\n    }\n\n    @computed get selectionSet(): Set<string> {\n        return new Set(this.selection.selectedEntityNames)\n    }\n\n    @computed private get fuzzy(): FuzzySearch<EntityOptionWithMetricValue> {\n        return FuzzySearch.withKey(\n            this.entitiesWithMetricValue,\n            (entity) => entity.entityName\n        )\n    }\n\n    @computed private get searchResults(): EntityOptionWithMetricValue[] {\n        if (this.searchInput) return this.fuzzy.search(this.searchInput)\n        const { entitiesWithMetricValue, sortOrder, selectionSet } = this\n\n        // Show the selected up top and in order.\n        const sorted = sortByUndefinedLast(\n            entitiesWithMetricValue,\n            (option) => option.plotValue,\n            sortOrder\n        )\n\n        let [selected, unselected] = _.partition(sorted, (option) =>\n            selectionSet.has(option.entityName)\n        )\n        if (this.metric === undefined) {\n            // only sort local entity names first if we're not sorting by some other metric already\n            unselected = sortByUndefinedLast(\n                unselected,\n                (option) => option.localEntitiesIndex\n            )\n        }\n        return [...selected, ...unselected]\n    }\n\n    private normalizeFocusIndex(index: number): number | undefined {\n        if (this.searchResults.length === 0) return undefined\n        return positiveModulo(index, this.searchResults.length)\n    }\n\n    @computed private get focusedOption(): string | undefined {\n        return this.focusIndex !== undefined\n            ? this.searchResults[this.focusIndex].entityName\n            : undefined\n    }\n\n    @computed private get showDoneButton(): boolean {\n        return this.isDropdownMenu && this.isOpen\n    }\n\n    @action.bound private focusOptionDirection(\n        direction: FocusDirection\n    ): void {\n        if (direction === FocusDirection.first)\n            this.focusIndex = this.normalizeFocusIndex(0)\n        else if (direction === FocusDirection.last)\n            this.focusIndex = this.normalizeFocusIndex(-1)\n        else if (direction === FocusDirection.up) {\n            const newIndex =\n                this.focusIndex === undefined ? -1 : this.focusIndex - 1\n            this.focusIndex = this.normalizeFocusIndex(newIndex)\n        } else if (direction === FocusDirection.down) {\n            const newIndex =\n                this.focusIndex === undefined ? 0 : this.focusIndex + 1\n            this.focusIndex = this.normalizeFocusIndex(newIndex)\n        } else return // Exit without updating scroll\n        this.scrollFocusedIntoViewOnUpdate = true\n    }\n\n    @action.bound private clearSearchInput(): void {\n        if (this.searchInput) this.searchInput = \"\"\n    }\n\n    @action.bound private onKeyDown(\n        event: React.KeyboardEvent<HTMLDivElement>\n    ): void {\n        // We want to block hover if a key is pressed.\n        // The hover will be unblocked iff the user moves the mouse (relative to the menu).\n        this.blockHover()\n        switch (event.key) {\n            case \"Enter\": {\n                if (event.nativeEvent.isComposing) {\n                    // ignore the keydown event from an Input Method Editor(IME)\n                    break\n                }\n                if (!this.focusedOption) return\n                const name = this.focusedOption\n                this.selectEntity(name)\n                this.clearSearchInput()\n                this.manager.analytics?.logEntityPickerEvent(\n                    \"enter\",\n                    name,\n                    this.manager.analyticsContext?.viewConfigId\n                )\n                break\n            }\n            case \"ArrowUp\":\n                this.focusOptionDirection(FocusDirection.up)\n                break\n            case \"ArrowDown\":\n                this.focusOptionDirection(FocusDirection.down)\n                break\n            default:\n                return\n        }\n        event.preventDefault()\n    }\n\n    @bind private focusSearch(): void {\n        this.searchInputRef.current?.focus()\n    }\n\n    @action.bound private onSearchFocus(): void {\n        this.isOpen = true\n        if (this.focusIndex === undefined)\n            this.focusOptionDirection(FocusDirection.first)\n    }\n\n    @action.bound private onSearchBlur(): void {\n        // Do not allow focus on elements inside menu; shift focus back to search input.\n        if (this.scrollContainerRef.current?.contains(document.activeElement)) {\n            this.focusSearch()\n            return\n        }\n        this.isOpen = false\n        this.focusIndex = undefined\n    }\n\n    @action.bound private onHover(index: number): void {\n        if (!this.blockOptionHover) this.focusIndex = index\n    }\n\n    @action.bound private blockHover(): void {\n        this.blockOptionHover = true\n    }\n\n    @action.bound private unblockHover(): void {\n        this.blockOptionHover = false\n    }\n\n    @action.bound private onMenuMouseDown(\n        event: React.MouseEvent<HTMLDivElement, MouseEvent>\n    ): void {\n        event.stopPropagation()\n        event.preventDefault()\n        this.focusSearch()\n    }\n\n    @bind private highlightLabel(label: string): string | React.ReactElement {\n        if (!this.searchInput) return label\n\n        const result = this.fuzzy.single(this.searchInput, label)\n        if (!result) return label\n\n        const tokens: { match: boolean; text: string }[] = []\n        for (let i = 0; i < result.target.length; i++) {\n            const currentToken = R.last(tokens)\n            const match = result.indexes.includes(i)\n            const char = result.target[i]\n            if (!currentToken || currentToken.match !== match) {\n                tokens.push({\n                    match,\n                    text: char,\n                })\n            } else currentToken.text += char\n        }\n        return (\n            <span translate=\"no\">\n                {tokens.map((token, i) =>\n                    token.match ? (\n                        <mark key={i}>{token.text}</mark>\n                    ) : (\n                        <span key={i}>{token.text}</span>\n                    )\n                )}\n            </span>\n        )\n    }\n\n    @computed private get barScale(): ScaleLinear<number, number> {\n        const maxValue = _.max(\n            this.entitiesWithMetricValue\n                .map((option) => option.plotValue)\n                .filter(_.isNumber)\n        )\n        return scaleLinear()\n            .domain([0, maxValue ?? 1])\n            .range([0, 1])\n    }\n\n    override componentDidMount(): void {\n        // Whenever the search term changes, shift focus to first option in the list\n        reaction(\n            () => this.searchInput,\n            () => this.focusOptionDirection(FocusDirection.first)\n        )\n\n        void this.populateLocalEntity()\n    }\n\n    override componentDidUpdate(): void {\n        if (\n            this.focusIndex !== undefined &&\n            this.scrollFocusedIntoViewOnUpdate &&\n            this.scrollContainerRef.current &&\n            this.focusRef.current\n        ) {\n            scrollIntoViewIfNeeded(\n                this.scrollContainerRef.current,\n                this.focusRef.current\n            )\n            runInAction(() => (this.scrollFocusedIntoViewOnUpdate = false))\n        }\n    }\n\n    @action.bound private onMetricSelectionChange(\n        option: BasicDropdownOption | null\n    ): void {\n        if (!option) return\n        // Empty string means undefined/relevance option\n        const columnSlug = option.value === \"\" ? undefined : option.value\n        this.updateMetric(columnSlug)\n    }\n\n    @action private updateMetric(columnSlug: ColumnSlug | undefined): void {\n        const col = this.pickerTable?.get(columnSlug)\n\n        this.manager.setEntityPicker?.({\n            metric: columnSlug,\n            sort: this.isColumnTypeNumeric(columnSlug, col)\n                ? SortOrder.desc\n                : SortOrder.asc,\n        })\n        this.manager.analytics?.logEntityPickerEvent(\n            \"sortBy\",\n            columnSlug,\n            this.manager.analyticsContext?.viewConfigId\n        )\n    }\n\n    private isColumnTypeNumeric(\n        columnSlug: ColumnSlug | undefined,\n        col: CoreColumn | undefined\n    ): boolean {\n        return (\n            // If columnSlug is undefined, we're sorting by relevance, which is (mostly) by country name.\n            // If the column is currently missing (not loaded yet), assume it is numeric.\n            columnSlug !== undefined &&\n            columnSlug !== OwidTableSlugs.EntityName &&\n            (col === undefined ||\n                col.isMissing ||\n                col instanceof ColumnTypeMap.Numeric)\n        )\n    }\n\n    private get pickerMenu(): React.ReactElement | null {\n        if (this.isDropdownMenu) return null\n\n        return (\n            <div className=\"MetricSettings\">\n                <label id=\"metric-dropdown-label\" className=\"mainLabel\">\n                    Sort by\n                </label>\n                <Dropdown\n                    className=\"metricDropdown\"\n                    options={this.metricDropdownOptions}\n                    value={this.selectedMetricDropdownOption ?? null}\n                    onChange={this.onMetricSelectionChange}\n                    isLoading={this.manager.entityPickerTableIsLoading}\n                    aria-labelledby=\"metric-dropdown-label\"\n                />\n                <span\n                    className=\"sort\"\n                    onClick={(): void => {\n                        const sortOrder = toggleSort(this.sortOrder)\n                        this.manager.setEntityPicker?.({\n                            metric: this.metric,\n                            sort: sortOrder,\n                        })\n                        this.manager.analytics?.logEntityPickerEvent(\n                            \"sortOrder\",\n                            sortOrder,\n                            this.manager.analyticsContext?.viewConfigId\n                        )\n                    }}\n                >\n                    <SortIcon\n                        type={\n                            this.isColumnTypeNumeric(\n                                this.metric,\n                                this.activePickerMetricColumn\n                            )\n                                ? \"numeric\"\n                                : \"text\"\n                        }\n                        order={this.sortOrder}\n                    />\n                </span>\n            </div>\n        )\n    }\n\n    override render(): React.ReactElement {\n        const { selection } = this\n        const { entityType } = this.manager\n        const entities = this.searchResults\n        const selectedEntityNames = selection.selectedEntityNames\n        const availableEntities = this.availableEntitiesForCurrentView\n\n        const selectedDebugMessage = `${selectedEntityNames.length} selected. ${availableEntities.size} available. ${this.entitiesWithMetricValue.length} options total.`\n\n        return (\n            <div className=\"EntityPicker\">\n                <div\n                    className=\"EntityPickerSearchInput\"\n                    onKeyDown={this.onKeyDown}\n                >\n                    <input\n                        className={classnames(\"input-field\", {\n                            \"with-done-button\": this.showDoneButton,\n                        })}\n                        type=\"text\"\n                        placeholder={`Type to add a ${entityType}...`}\n                        value={this.searchInput ?? \"\"}\n                        onChange={(e): string =>\n                            (this.searchInput = e.currentTarget.value)\n                        }\n                        onFocus={this.onSearchFocus}\n                        onBlur={this.onSearchBlur}\n                        ref={this.searchInputRef}\n                        data-track-note=\"entity_picker_search_input\"\n                    />\n                    <div className=\"search-icon\">\n                        <FontAwesomeIcon icon={faSearch} />\n                    </div>\n                    {this.showDoneButton && (\n                        <div className=\"done\">\n                            <button>Done</button>\n                        </div>\n                    )}\n                </div>\n                {this.pickerMenu}\n                <div className=\"EntityListContainer\" onKeyDown={this.onKeyDown}>\n                    {(!this.isDropdownMenu || this.isOpen) && (\n                        <div\n                            className={classnames(\"EntityList\", {\n                                isDropdown: this.isDropdownMenu,\n                            })}\n                            onMouseDown={this.onMenuMouseDown}\n                        >\n                            <VerticalScrollContainer\n                                scrollingShadows={true}\n                                scrollLock={true}\n                                className=\"EntitySearchResults\"\n                                contentsId={entities\n                                    .map((c) => c.entityName)\n                                    .join(\",\")}\n                                onMouseMove={this.unblockHover}\n                                ref={this.scrollContainerRef}\n                            >\n                                <Flipper\n                                    spring={{\n                                        stiffness: 300,\n                                        damping: 33,\n                                    }}\n                                    // We only want to animate when the selection changes, but not on changes due to\n                                    // searching\n                                    flipKey={selectedEntityNames.join(\",\")}\n                                >\n                                    {entities.map((option, index) => (\n                                        <PickerOption\n                                            key={index}\n                                            hasDataForActiveMetric={availableEntities.has(\n                                                option.entityName\n                                            )}\n                                            optionWithMetricValue={option}\n                                            highlight={this.highlightLabel}\n                                            barScale={this.barScale}\n                                            onChange={this.selectEntity}\n                                            onHover={(): void =>\n                                                this.onHover(index)\n                                            }\n                                            isSelected={this.selectionSet.has(\n                                                option.entityName\n                                            )}\n                                            isFocused={\n                                                this.focusIndex === index\n                                            }\n                                            innerRef={\n                                                this.focusIndex === index\n                                                    ? this.focusRef\n                                                    : undefined\n                                            }\n                                            className={\n                                                this\n                                                    .mostRecentlySelectedEntityName ===\n                                                option.entityName\n                                                    ? \"most-recently-selected\"\n                                                    : undefined\n                                            }\n                                        />\n                                    ))}\n                                </Flipper>\n                            </VerticalScrollContainer>\n                            <div>\n                                <div\n                                    title={selectedDebugMessage}\n                                    className=\"ClearSelectionButton\"\n                                    data-track-note=\"entity_picker_clear_selection\"\n                                    onClick={(): void => {\n                                        selection.clearSelection()\n                                        this.props.onClearEntities?.()\n                                    }}\n                                >\n                                    <FontAwesomeIcon icon={faTimes} /> Clear\n                                    selection\n                                </div>\n                            </div>\n                        </div>\n                    )}\n                </div>\n            </div>\n        )\n    }\n}\n\ninterface PickerOptionProps {\n    optionWithMetricValue: EntityOptionWithMetricValue\n    highlight: (label: string) => React.ReactElement | string\n    onChange: (name: string, checked: boolean) => void\n    onHover?: () => void\n    innerRef?: React.RefObject<HTMLLabelElement | null>\n    isFocused?: boolean\n    isSelected?: boolean\n    barScale?: ScaleLinear<number, number>\n    hasDataForActiveMetric: boolean\n    className?: string\n}\n\nclass PickerOption extends React.Component<PickerOptionProps> {\n    @bind onClick(event: React.MouseEvent<HTMLLabelElement, MouseEvent>): void {\n        event.stopPropagation()\n        event.preventDefault()\n        this.props.onChange(\n            this.props.optionWithMetricValue.entityName,\n            !this.props.isSelected\n        )\n    }\n\n    override render(): React.ReactElement {\n        const {\n            barScale,\n            optionWithMetricValue,\n            innerRef,\n            isSelected,\n            isFocused,\n            hasDataForActiveMetric,\n            highlight,\n            className,\n        } = this.props\n        const { entityName, plotValue, formattedValue } = optionWithMetricValue\n        const metricValue = formattedValue === entityName ? \"\" : formattedValue // If the user has this entity selected, don't show the name twice.\n\n        return (\n            <Flipped flipId={entityName} translate opacity>\n                <label\n                    className={classnames(\n                        \"EntityPickerOption\",\n                        className,\n                        {\n                            selected: isSelected,\n                            focused: isFocused,\n                            \"local-country\":\n                                optionWithMetricValue.localEntitiesIndex !==\n                                undefined,\n                        },\n                        hasDataForActiveMetric ? undefined : \"MissingData\"\n                    )}\n                    onMouseMove={this.props.onHover}\n                    onMouseOver={this.props.onHover}\n                    onClick={this.onClick}\n                    ref={innerRef}\n                >\n                    <div className=\"input-container\">\n                        <input\n                            type=\"checkbox\"\n                            checked={isSelected}\n                            value={entityName}\n                            tabIndex={-1}\n                            readOnly\n                        />\n                    </div>\n                    <div className=\"info-container\">\n                        <div className=\"labels-container\">\n                            <div className=\"name\">{highlight(entityName)}</div>\n                            {plotValue !== undefined && (\n                                <div className=\"metric\">{metricValue}</div>\n                            )}\n                        </div>\n                        {barScale && _.isNumber(plotValue) ? (\n                            <div className=\"plot\">\n                                <div\n                                    className=\"bar\"\n                                    style={{\n                                        width: `${barScale(plotValue) * 100}%`,\n                                    }}\n                                />\n                            </div>\n                        ) : (\n                            <div className=\"plot\"></div>\n                        )}\n                    </div>\n                </label>\n            </Flipped>\n        )\n    }\n}\n","import { action, makeObservable } from \"mobx\"\n\nexport interface SlideShowManager<SlideData> {\n    setSlide: (slide: SlideData) => void\n}\n\n// A \"slide\" is just a query string.\nexport class SlideShowController<SlideData> {\n    constructor(\n        slides: SlideData[] = [],\n        currentIndex = 0,\n        manager?: SlideShowManager<SlideData>\n    ) {\n        makeObservable(this)\n        this.currentIndex = currentIndex\n        this.slides = slides\n        this.manager = manager\n    }\n    private readonly slides: SlideData[]\n    private currentIndex: number\n    private readonly manager?: SlideShowManager<SlideData>\n\n    get isEmpty() {\n        return this.slides.length === 0\n    }\n\n    @action.bound private playIndexCommand(index: number) {\n        const slides = this.slides\n        index = index >= slides.length ? index - slides.length : index\n        index = index < 0 ? slides.length + index : index\n        const slide = slides[index]\n\n        if (this.manager) this.manager.setSlide(slide)\n    }\n\n    @action.bound playNext() {\n        this.playIndexCommand(++this.currentIndex)\n    }\n\n    @action.bound playPrevious() {\n        this.playIndexCommand(--this.currentIndex)\n    }\n}\n","import { debounce } from \"lodash-es\"\nimport { GrapherProgrammaticInterface, loadCatalogData } from \"../index.js\"\nimport * as Sentry from \"@sentry/react\"\nimport { createRoot } from \"react-dom/client\"\nimport { FetchingGrapher } from \"./FetchingGrapher.js\"\nimport {\n    ArchiveContext,\n    CatalogDataForKey,\n    CatalogKey,\n} from \"@ourworldindata/types\"\nimport { Bounds } from \"@ourworldindata/utils\"\n\nexport function renderGrapherIntoContainer({\n    config,\n    container,\n    dataApiUrl,\n    catalogUrl,\n    archiveContext,\n    noCache,\n}: {\n    config: GrapherProgrammaticInterface\n    container: Element\n    dataApiUrl: string\n    catalogUrl: string\n    archiveContext?: ArchiveContext\n    noCache?: boolean\n}): void {\n    const reactRoot = createRoot(container)\n\n    const setBoundsFromContainerAndRender = (\n        entries: ResizeObserverEntry[]\n    ): void => {\n        const entry = entries?.[0] // We always observe exactly one element\n        if (!entry)\n            throw new Error(\n                \"Couldn't resize grapher, expected exactly one ResizeObserverEntry\"\n            )\n\n        // Don't bother rendering if the container is hidden\n        // see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent\n        if ((entry.target as HTMLElement).offsetParent === null) return\n\n        const grapherConfigWithBounds = {\n            ...config,\n            additionalDataLoaderFn: <K extends CatalogKey>(\n                catalogKey: K\n            ): Promise<CatalogDataForKey<K>> =>\n                loadCatalogData(catalogKey, {\n                    baseUrl: catalogUrl,\n                }),\n        }\n\n        reactRoot.render(\n            <Sentry.ErrorBoundary>\n                <FetchingGrapher\n                    config={grapherConfigWithBounds}\n                    dataApiUrl={dataApiUrl}\n                    catalogUrl={catalogUrl}\n                    archiveContext={archiveContext}\n                    externalBounds={Bounds.fromRect(entry.contentRect)}\n                    queryStr={grapherConfigWithBounds.queryStr}\n                    noCache={noCache}\n                />\n            </Sentry.ErrorBoundary>\n        )\n    }\n\n    if (typeof window !== \"undefined\" && \"ResizeObserver\" in window) {\n        const resizeObserver = new ResizeObserver(\n            // Use a leading debounce to render immediately upon first load, and also immediately upon orientation change on mobile\n            debounce(setBoundsFromContainerAndRender, 400, {\n                leading: true,\n            })\n        )\n        resizeObserver.observe(container)\n    } else if (typeof window === \"object\" && typeof document === \"object\") {\n        // only show the warning when we're in something that roughly resembles a browser\n        console.warn(\n            \"ResizeObserver not available; grapher will not be able to render\"\n        )\n    }\n}\n\nexport function renderSingleGrapherOnGrapherPage({\n    config,\n    dataApiUrl,\n    catalogUrl,\n    archiveContext,\n    noCache,\n    queryParams,\n}: {\n    config: GrapherProgrammaticInterface\n    dataApiUrl: string\n    catalogUrl: string\n    archiveContext?: ArchiveContext\n    noCache?: boolean\n    queryParams?: URLSearchParams\n}): void {\n    const container = document.getElementsByTagName(\"figure\")[0]\n    const queryStrValue = queryParams\n        ? `?${queryParams.toString()}`\n        : window.location.search\n    try {\n        const enrichedConfig = {\n            ...config,\n            bindUrlToWindow: true,\n            enableKeyboardShortcuts: true,\n            queryStr: queryStrValue,\n            archiveContext,\n        }\n        renderGrapherIntoContainer({\n            config: enrichedConfig,\n            container,\n            dataApiUrl,\n            catalogUrl,\n            archiveContext,\n            noCache,\n        })\n    } catch (err) {\n        container.innerHTML = `<p>Unable to load interactive visualization</p>`\n        container.setAttribute(\"id\", \"fallback\")\n        throw err\n    }\n}\n","import { ALGOLIA_INDEX_PREFIX } from \"../../settings/clientSettings.mjs\"\nimport { SearchIndexName } from \"@ourworldindata/types\"\n\nexport const getIndexName = (index: SearchIndexName | string): string => {\n    if (ALGOLIA_INDEX_PREFIX !== \"\") {\n        return `${ALGOLIA_INDEX_PREFIX}-${index}`\n    }\n    return index\n}\n\nexport const DEFAULT_SEARCH_PLACEHOLDER =\n    \"Try “Life expectancy”, “Poverty Nigeria Vietnam”, “CO2 France”…\"\n","import { SortOrder, GrapherQueryParams } from \"@ourworldindata/types\"\nimport { ColumnSlug, SerializedGridProgram } from \"@ourworldindata/utils\"\n\nexport enum ExplorerControlType {\n    Radio = \"Radio\",\n    Checkbox = \"Checkbox\",\n    Dropdown = \"Dropdown\",\n}\n\nexport enum ExplorerChartCreationMode {\n    FromGrapherId = \"FromGrapherId\",\n    FromVariableIds = \"FromVariableIds\",\n    FromExplorerTableColumnSlugs = \"FromExplorerTableColumnSlugs\",\n}\n\nexport const DefaultNewExplorerSlug = \"new\"\n\nexport const ExplorerControlTypeRegex = new RegExp(\n    \" (\" + Object.values(ExplorerControlType).join(\"|\") + \")$\"\n)\n\nexport interface ExplorerChoice {\n    title: string\n    displayTitle?: string\n    options: ExplorerChoiceOption[]\n    value: string\n    type: ExplorerControlType\n}\n\nexport interface ExplorerChoiceOption {\n    label: string\n    available: boolean\n    value: string\n    checked?: boolean\n}\n\nexport type ChoiceName = string\nexport type ChoiceValue = string\n\nexport interface ExplorerChoiceParams {\n    [choiceName: string]: ChoiceValue\n}\n\nexport interface ChoiceMap {\n    [choiceName: string]: ChoiceValue[]\n}\n\n/** Query params available in all explorers */\nexport interface ExplorerStandardQueryParams extends GrapherQueryParams {\n    pickerSort?: SortOrder\n    pickerMetric?: ColumnSlug\n    hideControls?: string\n}\n\nexport type ExplorerFullQueryParams = ExplorerStandardQueryParams &\n    ExplorerChoiceParams\n\nexport const UNSAVED_EXPLORER_DRAFT = \"UNSAVED_EXPLORER_DRAFT\"\nexport const UNSAVED_EXPLORER_PREVIEW_QUERYPARAMS =\n    \"UNSAVED_EXPLORER_PREVIEW_QUERYPARAMS\"\n\nexport const EMBEDDED_EXPLORER_DELIMITER = \"\\n//EMBEDDED_EXPLORER\\n\"\nexport const EXPLORER_CONSTANTS_DELIMITER = \"\\n//EXPLORER_CONSTANTS\\n\"\nexport const EMBEDDED_EXPLORER_GRAPHER_CONFIGS =\n    \"\\n//EMBEDDED_EXPLORER_GRAPHER_CONFIGS\\n\"\nexport const EMBEDDED_EXPLORER_PARTIAL_GRAPHER_CONFIGS =\n    \"\\n//EMBEDDED_PARTIAL_EXPLORER_GRAPHER_CONFIGS\\n\"\nexport const EMBEDDED_EXPLORER_VIEW_CONFIG_IDS =\n    \"\\n//EMBEDDED_EXPLORER_VIEW_CONFIG_IDS\\n\"\n\nexport const EXPLORER_EMBEDDED_FIGURE_SELECTOR = \"data-explorer-src\"\n\nexport const ExplorerContainerId = \"ExplorerContainer\"\n\nexport const GetAllExplorersRoute = \"allExplorers.json\"\n\nexport const GetAllExplorersTagsRoute = \"allExplorersTags.json\"\n\nexport const EXPLORERS_ROUTE_FOLDER = \"explorers\" // Url path: http://owid.org/{explorers}\nexport const EXPLORERS_GIT_CMS_FOLDER = \"explorers\" // Disk path: /home/owid/git-content/{explorers}\nexport const EXPLORERS_PREVIEW_ROUTE = `${EXPLORERS_ROUTE_FOLDER}/preview`\n\nexport interface ExplorersRouteResponse {\n    success: boolean\n    errorMessage?: string\n    explorers: SerializedGridProgram[]\n}\n","import {\n    GrapherInterface,\n    ORIGIN_URL_REGEX_PATTERNS,\n} from \"@ourworldindata/types\"\n\nexport const CellHasErrorsClass = \"CellHasErrorsClass\"\n\nexport enum GridBoolean {\n    true = \"true\",\n    false = \"false\",\n}\n\nexport const GRID_NODE_DELIMITER = \"\\n\"\nexport const GRID_CELL_DELIMITER = \"\\t\"\n\nexport type CellCoordinate = number // An integer >= 0\n\nexport type Grammar<TCellDef extends CellDef = CellDef> = {\n    [keywordSlug: string]: TCellDef\n}\n\n// A CellDef is a tuple: part keyword and the other half is the contents. The contents can be 1 cell, a list of cells, and/or a subtable.\nexport interface CellDef {\n    keyword: string\n    cssClass: string\n    description: string\n    grammar?: Grammar\n    headerCellDef?: CellDef\n    terminalOptions?: CellDef[]\n    catchAllCellDef?: CellDef // Only used by vertical grammars, this cell def, if present, will be used if a keyword is unrecognized during parsing.\n    regex?: RegExp // A validation regex a value must pass. todo: seems like this is overloaded and used for testing keywords and contents.\n    requirementsDescription?: string\n    valuePlaceholder?: string\n    positionalCellDefs?: readonly CellDef[] // Additional cell types as positional arguments.\n    isHorizontalList?: boolean // a list type, such as \"colors\\tred\\torange\\tgreen\"\n    parse?: (value: any) => any\n}\n\nexport interface GrapherCellDef extends CellDef {\n    toGrapherObject: (value: any) => GrapherInterface // map to a partial config that is a valid GrapherInterface\n}\n\nexport interface ColumnCellDef extends CellDef {\n    isDisplayProperty?: boolean\n}\n\nexport interface ParsedCell {\n    errorMessage?: string\n    cssClasses?: string[]\n    optionKeywords?: string[]\n    comment?: string\n    cellDef?: CellDef\n    placeholder?: string\n    contents?: any\n}\n\nexport interface CellPosition {\n    row: CellCoordinate\n    column: CellCoordinate\n}\n\nexport const Origin: CellPosition = {\n    row: 0,\n    column: 0,\n}\n\nexport const BooleanCellDef: CellDef = {\n    keyword: \"\",\n    terminalOptions: [\n        { keyword: GridBoolean.true, cssClass: \"\", description: \"\" },\n        { keyword: GridBoolean.false, cssClass: \"\", description: \"\" },\n    ],\n    cssClass: \"BooleanCellDef\",\n    description: \"Boolean\",\n    parse: (value: any) => {\n        // Handle already parsed boolean values (to avoid double parsing)\n        if (typeof value === \"boolean\") return value\n        return value === GridBoolean.true\n    },\n}\n\nexport const StringCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"StringCellDef\",\n    description: \"\",\n    parse: (value: any) => `${value}`.replace(/\\\\n/g, \"\\n\"),\n}\n\nexport const StringDeclarationDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"StringDeclarationDef\",\n    description: \"\",\n}\n\nexport const EnumCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"EnumCellDef\",\n    description: \"\",\n}\n\nexport const RootKeywordCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"KeywordCellDef\",\n    description: \"Keyword\",\n}\n\nexport const NumericCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"NumericCellDef\",\n    description: \"\",\n    regex: /^-?\\d+\\.?\\d*$/,\n    requirementsDescription: `Must be a number`,\n    valuePlaceholder: \"98.6\",\n    parse: (value: any) => parseFloat(value),\n}\n\nexport const NumericOrAutoCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"NumericCellDef\",\n    description: \"\",\n    regex: /^(-?\\d+\\.?\\d*|auto)$/,\n    requirementsDescription: `Must be a number or \"auto\"`,\n    valuePlaceholder: \"98.6\",\n    parse: (value: any) => {\n        if (value === \"auto\") return \"auto\"\n        return parseFloat(value)\n    },\n}\n\nexport const IntegerCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"IntegerCellDef\",\n    description: \"\",\n    regex: /^-?[0-9]+$/,\n    requirementsDescription: `Must be an integer`,\n    valuePlaceholder: \"12345\",\n    parse: (value: any) => parseInt(value),\n}\n\nexport const PositiveIntegerCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"IntegerCellDef\",\n    description: \"\",\n    regex: /^[0-9]+$/,\n    requirementsDescription: `Must be a positive integer`,\n    valuePlaceholder: \"1\",\n    parse: (value: any) => parseInt(value),\n}\n\nexport const PositiveIntegersCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"IntegerCellDef\",\n    description: \"\",\n    regex: /^[0-9 ]+$/,\n    requirementsDescription: `Must be a positive integer or a list of positive integers`,\n    valuePlaceholder: \"12345 23456\",\n}\n\nexport const SubTableHeaderCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"SubTableHeaderCellDef\",\n    description: \"\",\n}\n\nexport const SubTableValueCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"SubTableValueCellDef\",\n    description: \"\",\n}\n\nconst MatchUrlsOnlyRegex =\n    /((([A-Za-z]{3,9}:(?:\\/\\/)?)(?:[-;:&=+$,\\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=+$,\\w]+@)[A-Za-z0-9.-]+)((?:\\/[+~%/.\\w-_]*)?\\??(?:[-+=&;%@.\\w_]*)#?(?:[\\w]*))?)/\n\nexport const UrlCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"UrlCellDef\",\n    description: \"\",\n    regex: MatchUrlsOnlyRegex,\n}\n\n// Combines the patterns from ORIGIN_URL_REGEX_PATTERNS into a single regex for cell validation\nconst AbsoluteOrRelativeUrlRegex = new RegExp(\n    ORIGIN_URL_REGEX_PATTERNS.map((regex) => regex.source).join(\"|\")\n)\n\nexport const AbsoluteOrRelativeUrlCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"UrlCellDef\",\n    description: \"\",\n    regex: AbsoluteOrRelativeUrlRegex,\n}\n\nexport const QueryStringCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"QueryStringCellDef\",\n    description: \"\",\n}\n\nexport const NothingGoesThereCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"NothingGoesThereType\",\n    description:\n        \"Nothing should be here. You can make this a comment by prepending a ##\",\n}\n\nexport const CommentCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"CommentType\",\n    description: \"Just a comment.\",\n    regex: /^(##|💬)/,\n}\n\nexport const WorkInProgressCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"WorkInProgressCellDef\",\n    description: \"Not a recognized statement. Treating as a work in progress.\",\n}\n\nexport const SlugDeclarationCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"SlugDeclarationType\",\n    description: \"A unique URL-friendly name.\",\n    regex: /^[a-zA-Z0-9-_]+$/,\n    requirementsDescription: `Can only contain the characters a-zA-Z0-9-_`,\n}\n\n// This is the name for a cell that is on the \"frontier\", where the next user input is expected to go. Okay to rename if you have a better word.\nexport const FrontierCellClass = \"ShowDropdownArrow\"\n\nexport const SlugsDeclarationCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"SlugDeclarationType\",\n    description: \"Unique URL-friendly names.\",\n    regex: /^[a-zA-Z0-9-_ ]+$/,\n    requirementsDescription: `Can only contain the characters a-zA-Z0-9-_ `,\n}\n\nexport const EtlPathCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"IndicatorIdOrEtlPath\",\n    description: \"Path to an ETL indicator.\",\n    regex: /^$|^[\\w\\d_/-]+#[\\w\\d_/-]+$/,\n    requirementsDescription: `Can only contain the characters a-zA-Z0-9-_/#`,\n}\n\nexport const IndicatorIdOrEtlPathCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"IndicatorIdOrEtlPath\",\n    description: \"A single indicator ID or a path to an ETL indicator.\",\n    regex: /^\\d+|[\\w\\d_/-]+#[\\w\\d_/-]+$/,\n    requirementsDescription: `Can only contain the characters a-zA-Z0-9-_/#`,\n}\n\nexport const SlugOrIndicatorIdOrEtlPathCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"SlugOrIndicatorIdOrEtlPath\",\n    description: \"A column slug, indicator ID, or catalog path.\",\n    regex: /^[a-zA-Z0-9-_]+$|^\\d+$|^[\\w\\d_/-]+#[\\w\\d_/-]+$/,\n    requirementsDescription: `Can be a slug (a-zA-Z0-9-_), an indicator ID (digits), or a catalog path (a-zA-Z0-9-_/#)`,\n}\n\nexport const IndicatorIdsOrEtlPathsCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"IndicatorIdOrEtlPath\",\n    description: \"One or more indicator IDs or paths to an ETL indicator.\",\n    regex: /^((\\d+|[\\w\\d_/-]*#[\\w\\d_/-]+)( +|$))+$/,\n    requirementsDescription: `Can only contain the characters a-zA-Z0-9-_/# `,\n}\n\nexport const JSONObjectCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"JSONObjectCellDef\",\n    description: \"JSON object\",\n    regex: /^\\{.*\\}$/, // very basic validation that expression starts with { and ends with }\n    requirementsDescription: \"Must contain a valid JSON object\",\n}\n\nexport type MatrixLine = string[]\nexport type MatrixProgram = MatrixLine[]\n","import { Component } from \"react\"\nimport { Dropdown } from \"@ourworldindata/grapher\"\nimport { bind } from \"@ourworldindata/utils\"\nimport {\n    ExplorerControlType,\n    ExplorerChoiceOption,\n    ExplorerChoice,\n} from \"./ExplorerConstants.js\"\nimport { GridBoolean } from \"./gridLang/GridLangConstants.js\"\nimport classNames from \"clsx\"\nimport * as R from \"remeda\"\n\nconst AVAILABLE_OPTION_CLASS = \"AvailableOption\"\nconst UNAVAILABLE_OPTION_CLASS = \"UnavailableOption\"\nconst SELECTED_OPTION_CLASS = \"SelectedOption\"\nconst EXPLORER_DROPDOWN_CLASS = \"ExplorerDropdown\"\nconst HIDDEN_CONTROL_HEADER_CLASS = \"HiddenControlHeader\"\n\nexport class ExplorerControlBar extends Component<{\n    isMobile?: boolean\n    showControls?: boolean\n    closeControls?: () => void\n    children: React.ReactNode\n}> {\n    override render() {\n        const { isMobile, showControls, closeControls } = this.props\n        const mobileCloseButton = isMobile ? (\n            <a\n                className=\"btn btn-primary mobile-button\"\n                onClick={closeControls}\n            >\n                Done\n            </a>\n        ) : undefined\n\n        const showMobileControls = isMobile && showControls\n        return (\n            <form\n                className={classNames(\n                    \"ExplorerControlBar\",\n                    showMobileControls\n                        ? `show-controls-popup`\n                        : isMobile\n                          ? `hide-controls-popup`\n                          : false\n                )}\n            >\n                {this.props.children}\n                {mobileCloseButton}\n            </form>\n        )\n    }\n}\n\ninterface ExplorerDropdownOption {\n    label: string\n    value: string\n}\n\nconst ExplorerDropdown = (props: {\n    options: ExplorerDropdownOption[]\n    value: ExplorerDropdownOption\n    isMobile: boolean\n    onChange: (option: string) => void\n    ariaLabel?: string\n}) => {\n    const { options, value, isMobile, onChange, ariaLabel } = props\n    const isSearchable = !isMobile && options.length > 10\n    const dropdownOptions = options.map((option) => ({\n        label: option.label,\n        value: option.value,\n    }))\n    const selectedOption =\n        dropdownOptions.find((option) => option.value === value?.value) ?? null\n    const isDisabled = options.length < 2\n\n    return (\n        <Dropdown\n            className={EXPLORER_DROPDOWN_CLASS}\n            options={dropdownOptions}\n            value={selectedOption}\n            onChange={(option) => {\n                if (option) onChange(option.value)\n            }}\n            isDisabled={isDisabled}\n            isSearchable={isSearchable}\n            placeholder=\"-\"\n            aria-label={ariaLabel}\n        />\n    )\n}\n\nexport class ExplorerControlPanel extends Component<{\n    choice: ExplorerChoice\n    explorerSlug?: string\n    onChange?: (value: string) => void\n    isMobile: boolean\n}> {\n    private renderCheckboxOrRadio(option: ExplorerChoiceOption, index: number) {\n        const { explorerSlug, choice } = this.props\n        const { title, type, value } = choice\n        const { available, label, checked } = option\n        const isCheckbox = type === ExplorerControlType.Checkbox\n        const onChangeValue = isCheckbox\n            ? checked\n                ? GridBoolean.false\n                : GridBoolean.true\n            : option.value\n        const currentValue = isCheckbox\n            ? checked\n                ? GridBoolean.true\n                : GridBoolean.false\n            : value\n\n        return (\n            <div key={index} className=\"ControlOption\">\n                <label\n                    className={classNames(\n                        {\n                            [SELECTED_OPTION_CLASS]: checked,\n                        },\n                        available\n                            ? AVAILABLE_OPTION_CLASS\n                            : UNAVAILABLE_OPTION_CLASS\n                    )}\n                >\n                    <input\n                        onChange={() => this.customOnChange(onChangeValue)}\n                        type={isCheckbox ? \"checkbox\" : \"radio\"}\n                        disabled={!available}\n                        name={title}\n                        checked={checked}\n                        value={currentValue}\n                        data-track-note={`${\n                            explorerSlug ?? \"explorer\"\n                        }_click_${title.toLowerCase()}`}\n                    />{\" \"}\n                    {label}\n                </label>\n            </div>\n        )\n    }\n\n    private get options() {\n        return this.props.choice.options ?? []\n    }\n\n    private renderDropdown() {\n        const options = this.options\n            .filter((option) => option.available)\n            .map((option) => {\n                return {\n                    label: option.label,\n                    value: option.value,\n                }\n            })\n        const value = options.find(\n            (option) => option.value === this.props.choice.value\n        ) ?? { label: \"-\", value: \"-\" }\n\n        return (\n            <ExplorerDropdown\n                options={options}\n                value={value}\n                isMobile={this.props.isMobile}\n                onChange={this.customOnChange}\n                ariaLabel={this.props.choice.title}\n            />\n        )\n    }\n\n    @bind private customOnChange(value: string) {\n        this.props.onChange?.(value)\n    }\n\n    private renderColumn(\n        key: string,\n        hideTitle: boolean,\n        options?: ExplorerChoiceOption[]\n    ) {\n        const { title, type, displayTitle } = this.props.choice\n        return (\n            <div key={key} className=\"ExplorerControl\">\n                <div\n                    className={classNames(\"ControlHeader\", {\n                        [HIDDEN_CONTROL_HEADER_CLASS]: hideTitle === true,\n                    })}\n                >\n                    {displayTitle ?? title}\n                </div>\n                {type === ExplorerControlType.Dropdown\n                    ? this.renderDropdown()\n                    : (options ?? this.options).map((option, index) =>\n                          this.renderCheckboxOrRadio(option, index)\n                      )}\n            </div>\n        )\n    }\n\n    override render() {\n        const { choice } = this.props\n        const { title, type } = choice\n        const { options } = this\n        if (type === ExplorerControlType.Radio && options.length > 4)\n            return R.chunk(options, 3).map((optionsGroup, column) =>\n                this.renderColumn(`${title}${column}`, column > 0, optionsGroup)\n            )\n        return this.renderColumn(title, type === ExplorerControlType.Checkbox)\n    }\n}\n","export const isBlankLine = (line: string[] | undefined) =>\n    line === undefined ? true : line.join(\"\") === \"\"\n\n// Todo: figure out Matrix cell type and whether we need the double check\nexport const isEmpty = (value: any) => value === \"\" || value === undefined\n\n// Adapted from: https://github.com/dcporter/didyoumean.js/blob/master/didYouMean-1.2.1.js\nexport const didYouMean = (\n    str = \"\",\n    options: string[] = [],\n    caseSensitive = false,\n    threshold = 0.4,\n    thresholdAbsolute = 20\n) => {\n    if (!caseSensitive) str = str.toLowerCase()\n\n    // Calculate the initial value (the threshold) if present.\n    let maximumEditDistanceToBeBestMatch = Math.min(\n        threshold * str.length,\n        thresholdAbsolute\n    )\n\n    // Get the edit distance to each option. If the closest one is less than 40% (by default) of str's length, then return it.\n    let closestMatch\n    const len = options.length\n    for (let optionIndex = 0; optionIndex < len; optionIndex++) {\n        const candidate = options[optionIndex]\n\n        if (!candidate) continue\n\n        const editDistance = getEditDistance(\n            str,\n            caseSensitive ? candidate : candidate.toLowerCase(),\n            maximumEditDistanceToBeBestMatch\n        )\n        if (editDistance < maximumEditDistanceToBeBestMatch) {\n            maximumEditDistanceToBeBestMatch = editDistance\n            closestMatch = candidate\n        }\n    }\n\n    return closestMatch\n}\n\nconst MAX_INT = Math.pow(2, 32) - 1\nconst getEditDistance = (stringA: string, stringB: string, maxInt: number) => {\n    const aLength = stringA.length\n    const bLength = stringB.length\n\n    // Fast path - no A or B.\n    if (aLength === 0) return Math.min(maxInt + 1, bLength)\n    if (bLength === 0) return Math.min(maxInt + 1, aLength)\n\n    // Fast path - length diff larger than max.\n    if (Math.abs(aLength - bLength) > maxInt) return maxInt + 1\n\n    // Slow path.\n    const matrix = []\n\n    // Set up the first row ([0, 1, 2, 3, etc]).\n    for (let bIndex = 0; bIndex <= bLength; bIndex++) {\n        matrix[bIndex] = [bIndex]\n    }\n\n    // Set up the first column (same).\n    for (let aIndex = 0; aIndex <= aLength; aIndex++) {\n        matrix[0][aIndex] = aIndex\n    }\n\n    let colMin\n    let minJ\n    let maxJ\n\n    // Loop over the rest of the columns.\n    for (let bIndex = 1; bIndex <= bLength; bIndex++) {\n        colMin = MAX_INT\n        minJ = 1\n        if (bIndex > maxInt) minJ = bIndex - maxInt\n        maxJ = bLength + 1\n        if (maxJ > maxInt + bIndex) maxJ = maxInt + bIndex\n        // Loop over the rest of the rows.\n        for (let aIndex = 1; aIndex <= aLength; aIndex++) {\n            // If j is out of bounds, just put a large value in the slot.\n            if (aIndex < minJ || aIndex > maxJ)\n                matrix[bIndex][aIndex] = maxInt + 1\n            // Otherwise do the normal Levenshtein thing.\n            else {\n                // If the characters are the same, there's no change in edit distance.\n                if (stringB.charAt(bIndex - 1) === stringA.charAt(aIndex - 1))\n                    matrix[bIndex][aIndex] = matrix[bIndex - 1][aIndex - 1]\n                // Otherwise, see if we're substituting, inserting or deleting.\n                else\n                    matrix[bIndex][aIndex] = Math.min(\n                        matrix[bIndex - 1][aIndex - 1] + 1, // Substitute\n                        Math.min(\n                            matrix[bIndex][aIndex - 1] + 1, // Insert\n                            matrix[bIndex - 1][aIndex] + 1\n                        )\n                    ) // Delete\n            }\n\n            // Either way, update colMin.\n            if (matrix[bIndex][aIndex] < colMin) colMin = matrix[bIndex][aIndex]\n        }\n\n        // If this column's minimum is greater than the allowed maximum, there's no point\n        // in going on with life.\n        if (colMin > maxInt) return maxInt + 1\n    }\n    // If we made it this far without running into the max, then return the final matrix value.\n    return matrix[bLength][aLength]\n}\n\nconst delimitedToMatrix = (\n    delimited: string,\n    rowDelimiter = \"\\n\",\n    columnDelimiter = \"\\t\"\n) => delimited.split(rowDelimiter).map((line) => line.split(columnDelimiter))\n\nexport const tsvToMatrix = delimitedToMatrix\n","import { trimArray } from \"@ourworldindata/core-table\"\nimport { imemo, isPresent } from \"@ourworldindata/utils\"\n\nimport { didYouMean, isBlankLine, isEmpty } from \"./GrammarUtils.js\"\nimport {\n    CellPosition,\n    CellDef,\n    CellHasErrorsClass,\n    MatrixLine,\n    MatrixProgram,\n    Grammar,\n    FrontierCellClass,\n    ParsedCell,\n    CommentCellDef,\n    SubTableValueCellDef,\n    WorkInProgressCellDef,\n    NothingGoesThereCellDef,\n} from \"./GridLangConstants.js\"\n\nexport class GridCell implements ParsedCell {\n    private readonly position: CellPosition\n    private readonly matrix: MatrixProgram\n    private readonly rootDefinition: CellDef\n    constructor(\n        matrix: MatrixProgram,\n        position: CellPosition,\n        rootDefinition: CellDef\n    ) {\n        this.position = position\n        this.matrix = matrix\n        this.rootDefinition = rootDefinition\n    }\n\n    private get row() {\n        return this.position.row\n    }\n\n    private get column() {\n        return this.position.column\n    }\n\n    private get line(): MatrixLine | undefined {\n        return this.matrix[this.row]\n    }\n\n    private get isCommentCell() {\n        const { contents } = this\n        return contents && CommentCellDef.regex!.test(contents)\n    }\n\n    private get cellTerminalTypeDefinition(): CellDef | undefined {\n        const { rootDefinition } = this\n        if (this.isCommentCell) return CommentCellDef\n        const grammar = rootDefinition.grammar as unknown as Grammar\n        if (this.column === 0) return rootDefinition\n        const firstWordOnLine = this.line ? this.line[0] : undefined\n        const isFirstWordAKeyword =\n            firstWordOnLine && grammar[firstWordOnLine] !== undefined\n        if (this.column === 1 && firstWordOnLine && isFirstWordAKeyword)\n            return grammar[firstWordOnLine]\n\n        if (!isFirstWordAKeyword) return undefined\n\n        // It has a keyword but it is column >1\n        const def = grammar[firstWordOnLine]\n        const positionalCellTypeDef = def.positionalCellDefs?.[this.column - 2]\n        if (positionalCellTypeDef) return positionalCellTypeDef\n        if (def.isHorizontalList && this.contents) return def // For now only return a def for lists if it is non-empty\n        return NothingGoesThereCellDef\n    }\n\n    private get parentSubTableInfo() {\n        const { row, matrix } = this\n        let pointerRow = row\n        let subTableHeaderRow = -1\n        while (pointerRow >= 0) {\n            const line = matrix[pointerRow]\n            if (!line) break\n            const parentKeyword = line[0]\n            if (parentKeyword) {\n                if (subTableHeaderRow === -1) return undefined\n                return {\n                    parentKeyword,\n                    parentRow: pointerRow,\n                    subTableHeaderRow,\n                    isCellInHeader: row === subTableHeaderRow,\n                    headerKeyword: matrix[subTableHeaderRow][this.column],\n                }\n            }\n\n            if (!isBlankLine(line)) subTableHeaderRow = pointerRow\n            pointerRow--\n        }\n\n        return undefined\n    }\n\n    @imemo private get subTableParseResults() {\n        const { cellTerminalTypeDefinition } = this\n        if (cellTerminalTypeDefinition) return undefined\n\n        const info = this.parentSubTableInfo\n\n        if (!info) return undefined\n\n        const {\n            parentKeyword,\n            isCellInHeader,\n            subTableHeaderRow,\n            headerKeyword,\n        } = info\n\n        const subTableDef = this.rootDefinition.grammar![parentKeyword]\n\n        const headerCellDef = subTableDef?.headerCellDef\n\n        if (!headerCellDef) return undefined\n\n        const headerGrammar = headerCellDef.grammar\n        const valueCellDef =\n            !isCellInHeader && headerGrammar\n                ? headerGrammar[headerKeyword]\n                : undefined\n\n        return {\n            isFrontierCell: this.isSubTableFrontierCell(\n                subTableHeaderRow,\n                subTableDef\n            ),\n            def: isCellInHeader\n                ? headerCellDef\n                : (valueCellDef ?? SubTableValueCellDef),\n        }\n    }\n\n    /**\n     * If a cell is:\n     *  - to the right of the last filled cell in a line\n     *  - and that line is indented to be part of a subtable, with options\n     *  - and it is the first non-blank line in the subtabel\n     *\n     * Then consider is a \"frontier cell\"\n     *\n     */\n    private isSubTableFrontierCell(headerRow: number, subTableDef: CellDef) {\n        const { line, column, row } = this\n        const grammar = subTableDef.headerCellDef!.grammar\n        const isToTheImmediateRightOfLastFullCell =\n            line && trimArray(line).length === column\n        return (\n            row === headerRow &&\n            !isBlankLine(line) &&\n            isToTheImmediateRightOfLastFullCell &&\n            grammar &&\n            Object.keys(grammar).length\n        )\n    }\n\n    // If true show a +\n    private get isFirstCellOnFrontierRow() {\n        const { row, column } = this\n        const numRows = this.matrix.length\n        if (column) return false // Only first column should have a +\n        if (!isBlankLine(this.line)) return false // Only blank lines can be frontier\n        if (numRows === 1) {\n            if (row === 1) return !isBlankLine(this.matrix[0])\n            return row === 0\n        }\n        return row === numRows\n    }\n\n    @imemo get cellDef(): CellDef {\n        const def = this.cellTerminalTypeDefinition\n        if (def) return def\n\n        const subTable = this.subTableParseResults?.def\n        if (subTable) return subTable\n\n        return WorkInProgressCellDef\n    }\n\n    get errorMessage() {\n        if (!this.line) return \"\"\n        const { cellDef, contents, optionKeywords } = this\n        const { regex, requirementsDescription, catchAllCellDef } = cellDef\n        const catchAllKeywordRegex = catchAllCellDef?.regex\n\n        if (contents === undefined || contents === \"\") return \"\"\n\n        const regexResult = regex\n            ? validate(contents, regex, requirementsDescription)\n            : undefined\n        const catchAllRegexResult = catchAllKeywordRegex\n            ? validate(\n                  contents,\n                  catchAllKeywordRegex,\n                  catchAllCellDef.requirementsDescription\n              )\n            : undefined\n\n        if (optionKeywords) {\n            if (optionKeywords.includes(contents)) return \"\"\n\n            if (regex) return regexResult\n            if (catchAllKeywordRegex) return catchAllRegexResult\n\n            const guess = didYouMean(contents, optionKeywords)\n            if (guess) return `Did you mean '${guess}'?`\n\n            return `Error: '${contents}' is not a valid option. Valid options are ${optionKeywords\n                .map((opt) => `'${opt}'`)\n                .join(\", \")}`\n        }\n\n        if (regex) return regexResult\n        if (catchAllKeywordRegex) return catchAllRegexResult\n\n        return \"\"\n    }\n\n    get contents() {\n        return this.line ? this.line[this.column] : undefined\n    }\n\n    get comment() {\n        const { contents, errorMessage, cellDef } = this\n        if (isEmpty(contents)) return undefined\n        if (errorMessage) return errorMessage\n\n        if (cellDef.grammar) {\n            const def = cellDef.grammar[contents!] ?? cellDef.catchAllCellDef\n            return def.description\n        }\n\n        return [cellDef.description].join(\"\\n\")\n    }\n\n    get cssClasses() {\n        const { errorMessage, cellDef } = this\n        if (errorMessage) return [CellHasErrorsClass]\n        const showArrow =\n            this.isFirstCellOnFrontierRow ||\n            this.subTableParseResults?.isFrontierCell\n                ? FrontierCellClass\n                : undefined\n        const hasSuggestions =\n            this.cellDef.keyword === \"table\" ? \"HasSuggestions\" : null // todo: switch from strings to constants\n        return [cellDef.cssClass, hasSuggestions, showArrow].filter(isPresent)\n    }\n\n    get placeholder() {\n        const { contents, cellDef } = this\n        const { terminalOptions } = cellDef\n        const firstOption = terminalOptions?.[0]\n        const firstOptionName = firstOption?.keyword\n        const placeholder = cellDef.valuePlaceholder ?? firstOptionName\n        return isEmpty(contents) && placeholder\n            ? `eg \"${placeholder}\"`\n            : undefined\n    }\n\n    get optionKeywords() {\n        const { cellDef } = this\n        const { grammar, headerCellDef, terminalOptions } = cellDef\n        return terminalOptions\n            ? terminalOptions.map((def) => def.keyword)\n            : grammar\n              ? Object.keys(grammar)\n              : headerCellDef\n                ? Object.keys(headerCellDef.grammar!)\n                : undefined\n    }\n}\n\nconst validate = (value: any, regex: RegExp, requirements?: string) => {\n    if (typeof value !== \"string\") return \"\"\n    if (!regex.test(value)) {\n        return `Error: ${\n            requirements\n                ? requirements\n                : `'${value}' did not validate against ${regex}`\n        }`\n    }\n    return \"\"\n}\n","import { trimMatrix } from \"@ourworldindata/core-table\"\nimport {\n    isPresent,\n    GitCommit,\n    SerializedGridProgram,\n} from \"@ourworldindata/utils\"\n\nimport { GridCell } from \"./GridCell.js\"\nimport {\n    CellDef,\n    CellPosition,\n    GRID_CELL_DELIMITER,\n    GRID_NODE_DELIMITER,\n    Origin,\n    ParsedCell,\n} from \"./GridLangConstants.js\"\nimport { tsvToMatrix } from \"./GrammarUtils.js\"\n\n/**\n * Block location for the below would be like (numRows = 2)\n * table             |\n *  slug name        | startRow = 1\n *  pop Population   | endRow   = 2\n */\ninterface BlockLocation {\n    startRow: number\n    endRow: number\n    numRows: number\n}\n\nexport class GridProgram {\n    constructor(\n        slug: string,\n        tsv: string,\n        lastCommit?: GitCommit,\n        grammar?: CellDef\n    ) {\n        this.lines = tsvToMatrix(tsv.replace(/\\r/g, \"\"))\n        this.slug = slug\n        this.lastCommit = lastCommit\n        this.grammar = grammar\n    }\n\n    private readonly grammar?\n\n    private static guids = 0\n    readonly guid = ++GridProgram.guids\n\n    lastCommit?: GitCommit\n    slug: string\n\n    private readonly nodeDelimiter = GRID_NODE_DELIMITER\n    readonly cellDelimiter = GRID_CELL_DELIMITER\n    lines: string[][]\n\n    toJson(): SerializedGridProgram {\n        return {\n            program: this.toString(),\n            slug: this.slug,\n            lastCommit: this.lastCommit,\n        }\n    }\n\n    findNext(position: CellPosition) {\n        const cell = this.getCell(position)\n        const { contents } = cell\n        return this.grepFirst(contents, {\n            ...position,\n            column: position.column + 1,\n        })\n    }\n\n    findAll(position: CellPosition) {\n        const cell = this.getCell(position)\n        const { contents } = cell\n        return this.grep(contents, {\n            ...position,\n            column: position.column + 1,\n        })\n    }\n\n    private ring(position: CellPosition) {\n        const lines = this.lines\n        const numRows = lines.length\n        if (!numRows)\n            return (function* generator() {\n                // no rows to iterate over\n            })()\n        const pointer = {\n            ...position,\n            started: false,\n            endRow: position.row,\n            endCol: position.column,\n        }\n        if (pointer.row >= numRows) pointer.endRow = numRows - 1\n\n        const lastLine = lines[pointer.endRow]\n        pointer.endCol =\n            lastLine[pointer.endCol] === undefined\n                ? lastLine.length\n                : pointer.endCol\n        function* generator() {\n            while (true) {\n                if (\n                    pointer.started &&\n                    pointer.row === pointer.endRow &&\n                    pointer.column === pointer.endCol\n                )\n                    return\n                pointer.started = true\n\n                if (\n                    lines[pointer.row] === undefined ||\n                    lines[pointer.row][pointer.column] === undefined\n                ) {\n                    pointer.row++\n                    pointer.column = 0\n                    if (pointer.row >= numRows) pointer.row = 0\n                    continue\n                }\n\n                yield {\n                    row: pointer.row,\n                    column: pointer.column,\n                }\n                pointer.column++\n            }\n        }\n\n        return generator()\n    }\n\n    valuesFrom(position = Origin) {\n        return Array.from(this.ring(position)).map((next) =>\n            this.getCellContents(next)\n        )\n    }\n\n    get numRows() {\n        return this.lines.length\n    }\n\n    patch(obj: any) {\n        Object.keys(obj).forEach((key) => this.setLineValue(key, obj[key]))\n        return this\n    }\n\n    grepFirst(key: string, position = Origin) {\n        for (const next of this.ring(position)) {\n            if (this.getCellContents(next) === key) return next\n        }\n        return undefined\n    }\n\n    grep(key: string, position = Origin) {\n        const hits: CellPosition[] = []\n        for (const next of this.ring(position)) {\n            if (this.getCellContents(next) === key) hits.push(next)\n        }\n        return hits\n    }\n\n    /**\n     * Returns all non-blocks as an object literal\n     */\n    get tuplesObject() {\n        const obj: { [key: string]: any } = {}\n        this.lines\n            .filter((line) => line[0] !== \"\")\n            .forEach((line) => {\n                const [key, ...rest] = line\n                if (key) obj[key.trim()] = rest.join(this.cellDelimiter).trim()\n            })\n        return obj\n    }\n\n    getLine(keyword: string) {\n        return this.lines.find((line) => line[0] === keyword)\n    }\n\n    getLineValue(keyword: string) {\n        const line = this.getLine(keyword)\n        return line?.[1]\n    }\n\n    protected getBlockLocation(\n        blockRowNumber: number\n    ): BlockLocation | undefined {\n        const startRow = blockRowNumber + 1\n        let numRows = this.lines\n            .slice(startRow)\n            .findIndex((line) => line.length && line[0] !== \"\")\n        if (numRows === 0) return undefined\n        if (numRows === -1) numRows = this.lines.slice(startRow).length\n        return { startRow, endRow: startRow + numRows, numRows }\n    }\n\n    protected getKeywordIndex(key: string) {\n        return this.lines.findIndex((line) => line[0] === key)\n    }\n\n    getCell(position: CellPosition): ParsedCell {\n        return new GridCell(this.lines, position, this.grammar!)\n    }\n\n    getCellContents(position: CellPosition) {\n        const line = this.lines[position.row]\n        return line ? line[position.column] : undefined\n    }\n\n    deleteBlock(row?: number) {\n        if (row === undefined) return this\n        const location = this.getBlockLocation(row)\n        if (!location) return this\n\n        this.lines.splice(location.startRow, location.numRows)\n        return this\n    }\n\n    deleteLine(row?: number) {\n        if (row === undefined) return this\n        this.lines.splice(row, 1)\n        return this\n    }\n\n    appendLine(line: string) {\n        this.lines.push(line.split(this.cellDelimiter))\n        return this\n    }\n\n    // todo: make immutable and return a new copy\n    setCell(row: number, col: number, value: string) {\n        this.lines[row][col] = value\n        return this\n    }\n\n    setLineValue(key: string, value: string | undefined) {\n        const index = this.getKeywordIndex(key)\n        if (index === -1 && value !== undefined) this.lines.push([key, value])\n        else if (value === undefined) this.deleteLine(index)\n        else this.lines[index] = [key, value]\n        return this\n    }\n\n    getBlock(keywordIndex: number) {\n        const location = this.getBlockLocation(keywordIndex)\n        if (!location) return undefined\n        return this.lines\n            .slice(location.startRow, location.endRow)\n            .map((line) => line.slice(1))\n    }\n\n    updateBlock(rowNumber: number, value: string[][]) {\n        const location = this.getBlockLocation(rowNumber)\n        if (!location) throw new Error(\"Block not found\")\n        this.lines.splice(\n            location.startRow,\n            location.numRows,\n            ...value.map((line) => [\"\", ...line])\n        )\n        return this\n    }\n\n    protected appendBlock(key: string, value: string[][]) {\n        this.lines.push([key])\n        value.forEach((line) => this.lines.push([\"\", ...line]))\n    }\n\n    getRowNumbersStartingWith(startsWith: string) {\n        return this.lines\n            .map((line, index) => (line[0] === startsWith ? index : null))\n            .filter(isPresent)\n    }\n\n    private static readonly lineMatchesWords = (\n        line: string[],\n        words: (string | undefined)[]\n    ): boolean =>\n        words.every((word, index) => word === undefined || line[index] === word)\n\n    getRowMatchingWords(...words: (string | undefined)[]): number {\n        return this.lines.findIndex((line) =>\n            GridProgram.lineMatchesWords(line, words)\n        )\n    }\n\n    getAllRowsMatchingWords(...words: (string | undefined)[]): number[] {\n        const rows: number[] = []\n        this.lines.forEach((line: string[], rowIndex: number) => {\n            if (GridProgram.lineMatchesWords(line, words)) rows.push(rowIndex)\n        })\n        return rows\n    }\n\n    // The max number of columns in any row when you view a program as a spreadsheet\n    get width() {\n        return Math.max(...this.lines.map((arr) => arr.length))\n    }\n\n    toString() {\n        return this.prettify()\n    }\n\n    protected prettify() {\n        return trimMatrix(this.lines)\n            .map((line) => line.join(this.cellDelimiter))\n            .join(this.nodeDelimiter)\n    }\n}\n","import { availableTransformNames } from \"@ourworldindata/core-table\"\nimport {\n    automaticBinningStrategies,\n    ColorSchemeName,\n    ColumnTypeNames,\n    OwidVariableRoundingMode,\n} from \"@ourworldindata/types\"\nimport { ToleranceStrategy } from \"@ourworldindata/utils\"\nimport {\n    BooleanCellDef,\n    ColumnCellDef,\n    EnumCellDef,\n    EtlPathCellDef,\n    Grammar,\n    IntegerCellDef,\n    NumericCellDef,\n    PositiveIntegerCellDef,\n    SlugDeclarationCellDef,\n    StringCellDef,\n    UrlCellDef,\n} from \"./gridLang/GridLangConstants.js\"\n\nexport const ColumnGrammar: Grammar<ColumnCellDef> = {\n    variableId: {\n        ...IntegerCellDef,\n        keyword: \"variableId\",\n        description: \"Numerical variable ID\",\n    },\n    catalogPath: {\n        ...EtlPathCellDef,\n        keyword: \"catalogPath\",\n        description: \"Catalog path to the etl indicator\",\n    },\n    slug: {\n        ...SlugDeclarationCellDef,\n        keyword: \"slug\",\n    },\n    name: {\n        ...StringCellDef,\n        keyword: \"name\",\n        description:\n            \"This is the name that may appear on the y or x axis of a chart\",\n        isDisplayProperty: true,\n    },\n    type: {\n        ...StringCellDef,\n        keyword: \"type\",\n        description: `The column type reveals how to interpret the data, whether as a string or number for example, and how to display it, like whether to show a % or $.`,\n        terminalOptions: Object.values(ColumnTypeNames).map((keyword) => ({\n            keyword,\n            description: \"\",\n            cssClass: \"\",\n        })),\n    },\n    transform: {\n        ...StringCellDef,\n        keyword: \"transform\",\n        description: `An advanced option. Available transforms are: ${availableTransformNames.join(\n            \", \"\n        )}`,\n    },\n    tolerance: {\n        ...IntegerCellDef,\n        keyword: \"tolerance\",\n        description:\n            \"Set this to interpolate missing values as long as they are within this range of an actual value.\",\n        isDisplayProperty: true,\n    },\n    toleranceStrategy: {\n        ...EnumCellDef,\n        keyword: \"toleranceStrategy\",\n        terminalOptions: Object.values(ToleranceStrategy).map((strategy) => ({\n            keyword: strategy,\n            description: \"\",\n            cssClass: \"\",\n        })),\n        description: \"The tolerance strategy to use\",\n    },\n    description: {\n        ...StringCellDef,\n        keyword: \"description\",\n        description: \"Describe the column\",\n    },\n    unit: {\n        ...StringCellDef,\n        keyword: \"unit\",\n        description: \"Unit of measurement\",\n        isDisplayProperty: true,\n    },\n    shortUnit: {\n        ...StringCellDef,\n        keyword: \"shortUnit\",\n        description: \"Short (axis) unit\",\n        isDisplayProperty: true,\n    },\n    roundingMode: {\n        ...EnumCellDef,\n        keyword: \"roundingMode\",\n        terminalOptions: Object.values(OwidVariableRoundingMode).map(\n            (mode) => ({\n                keyword: mode,\n                description: \"\",\n                cssClass: \"\",\n            })\n        ),\n        description:\n            \"How to round numbers: by decimal places or by significant figures\",\n        isDisplayProperty: true,\n    },\n    numDecimalPlaces: {\n        ...PositiveIntegerCellDef,\n        keyword: \"numDecimalPlaces\",\n        description:\n            \"Number of decimal places to display. Also caps the number of decimal places for values below 1 when rounding to significant figures\",\n        isDisplayProperty: true,\n    },\n    numSignificantFigures: {\n        ...PositiveIntegerCellDef,\n        keyword: \"numSignificantFigures\",\n        description: \"Number of significant figures to display\",\n        isDisplayProperty: true,\n    },\n    notes: {\n        ...StringCellDef,\n        keyword: \"notes\",\n        description: \"Any internal notes.\",\n    },\n    annotationsColumnSlug: {\n        ...StringCellDef,\n        keyword: \"annotationsColumnSlug\",\n        description:\n            \"Column that contains the annotations for this column, if any.\",\n    },\n    sourceName: {\n        ...StringCellDef,\n        keyword: \"sourceName\",\n        description:\n            \"Source name displayed on charts using this dataset. For academic papers, the name of the source should be 'Authors (year)' e.g. Arroyo-Abad and Lindert (2016). For institutional projects or reports, the name should be 'Institution, Project (year or vintage)' e.g. U.S. Bureau of Labor Statistics, Consumer Expenditure Survey (2015 release). For data that we have modified extensively, the name should be 'Our World in Data based on Author (year)' e.g. Our World in Data based on Atkinson (2002) and Sen (2000).\",\n    },\n    sourceLink: {\n        ...UrlCellDef,\n        keyword: \"sourceLink\",\n        description:\n            \"Link to the publication from which we retrieved this data\",\n    },\n    dataPublishedBy: {\n        ...StringCellDef,\n        keyword: \"dataPublishedBy\",\n        description:\n            \"For academic papers this should be a complete reference. For institutional projects, detail the project or report. For data we have modified extensively, list OWID as the publishers and provide the name of the person in charge of the calculation.\",\n    },\n    dataPublisherSource: {\n        ...StringCellDef,\n        keyword: \"dataPublisherSource\",\n        description:\n            \"Basic indication of how the publisher collected this data e.g. surveys data. Anything longer than a line should go in the dataset description.\",\n    },\n    retrievedDate: {\n        ...StringCellDef,\n        keyword: \"retrievedDate\",\n        description: \"Date when this data was obtained by us\",\n    },\n    additionalInfo: {\n        ...StringCellDef,\n        keyword: \"additionalInfo\",\n        description:\n            \"Describe the dataset and the methodology used in its construction. This can be as long and detailed as you like.\",\n    },\n    nonRedistributable: {\n        ...BooleanCellDef,\n        keyword: \"nonRedistributable\",\n        description: \"Disable data download in chart?\",\n    },\n    color: {\n        ...StringCellDef,\n        keyword: \"color\",\n        description: \"Default color for column\",\n        isDisplayProperty: true,\n    },\n    colorScaleScheme: {\n        ...EnumCellDef,\n        keyword: \"colorScaleScheme\",\n        terminalOptions: Object.values(ColorSchemeName).map((keyword) => ({\n            keyword,\n            description: \"\",\n            cssClass: \"\",\n        })),\n        description: \"The color scheme to use\",\n    },\n    colorScaleInvert: {\n        ...BooleanCellDef,\n        keyword: \"colorScaleInvert\",\n        description: \"Invert the color scale?\",\n    },\n    colorScaleBinningStrategy: {\n        ...EnumCellDef,\n        keyword: \"colorScaleBinningStrategy\",\n        terminalOptions: automaticBinningStrategies.map((keyword) => ({\n            keyword,\n            description: \"\",\n            cssClass: \"\",\n        })),\n        description: \"The binning strategy to use\",\n    },\n    colorScaleNoDataLabel: {\n        ...StringCellDef,\n        keyword: \"colorScaleNoDataLabel\",\n        description: \"Custom label for the 'No data' bin\",\n    },\n    colorScaleLegendDescription: {\n        ...StringCellDef,\n        keyword: \"colorScaleLegendDescription\",\n        description: \"Legend title\",\n    },\n    colorScaleNumericMinValue: {\n        ...NumericCellDef,\n        keyword: \"colorScaleNumericMinValue\",\n        description:\n            \"Minimum value of the first bin (leaving blank will infer the minimum from the data)\",\n    },\n    colorScaleNumericBins: {\n        ...StringCellDef,\n        keyword: \"colorScaleNumericBins\",\n        description: [\n            \"Custom numeric bins\",\n            \"  Format: [binMax],[color],[label]; [binMax],[color],[label]; ...\",\n            \"  Example: 0.1,#ccc,example label; 0.2,,; 0.3,,prev has no label\",\n        ].join(\"\\n\"),\n    },\n    colorScaleCategoricalBins: {\n        ...StringCellDef,\n        keyword: \"colorScaleCategoricalBins\",\n        description: [\n            \"Custom categorical bins\",\n            \"  Format: [data value],[color],[label]; [data value],[color],[label]; ...\",\n            \"  Example: one,#ccc,uno; two,,dos\",\n        ].join(\"\\n\"),\n    },\n    isProjection: {\n        ...BooleanCellDef,\n        keyword: \"isProjection\",\n        description: \"Is the time series a forward projection?\",\n        isDisplayProperty: true,\n    },\n    plotMarkersOnlyInLineChart: {\n        ...BooleanCellDef,\n        keyword: \"plotMarkersOnlyInLineChart\",\n        description: \"Should data points be connected by a line?\",\n        isDisplayProperty: true,\n    },\n} as const\n","import {\n    ALL_GRAPHER_CHART_TYPES,\n    ColorSchemeName,\n    FacetAxisDomain,\n    FacetStrategy,\n    GRAPHER_CHART_TYPES,\n    GRAPHER_TAB_CONFIG_OPTIONS,\n    GrapherChartType,\n    MissingDataStrategy,\n    StackMode,\n} from \"@ourworldindata/types\"\nimport { SortBy, SortOrder } from \"@ourworldindata/utils\"\nimport {\n    GridBoolean,\n    BooleanCellDef,\n    CellDef,\n    EnumCellDef,\n    Grammar,\n    IntegerCellDef,\n    NumericOrAutoCellDef,\n    SlugDeclarationCellDef,\n    SlugsDeclarationCellDef,\n    StringCellDef,\n    UrlCellDef,\n    AbsoluteOrRelativeUrlCellDef,\n    IndicatorIdsOrEtlPathsCellDef,\n    IndicatorIdOrEtlPathCellDef,\n    SlugOrIndicatorIdOrEtlPathCellDef,\n    GrapherCellDef,\n} from \"./gridLang/GridLangConstants.js\"\nimport * as R from \"remeda\"\nconst toTerminalOptions = (keywords: string[]): CellDef[] => {\n    return keywords.map((keyword) => ({\n        keyword,\n        cssClass: \"\",\n        description: \"\",\n    }))\n}\n\nexport const GrapherGrammar: Grammar<GrapherCellDef> = {\n    title: {\n        ...StringCellDef,\n        keyword: \"title\",\n        description: \"Chart title\",\n        valuePlaceholder: \"Life Expectancy around the world.\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ title: parsedValue }),\n    },\n    subtitle: {\n        ...StringCellDef,\n        keyword: \"subtitle\",\n        description: \"Chart subtitle\",\n        valuePlaceholder: \"Life Expectancy has risen over time.\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ subtitle: parsedValue }),\n    },\n    ySlugs: {\n        ...SlugsDeclarationCellDef,\n        description: \"ColumnSlug(s) for the yAxis\",\n        keyword: \"ySlugs\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ ySlugs: parsedValue }),\n    },\n    yVariableIds: {\n        ...IndicatorIdsOrEtlPathsCellDef,\n        keyword: \"yVariableIds\",\n        description: \"Variable ID(s) or ETL path(s) for the yAxis\",\n        toGrapherObject: () => ({}), // explorer-specific, not used in grapher config\n    },\n    type: {\n        ...StringCellDef,\n        keyword: \"type\",\n        description: `The type of chart to show such as LineChart or ScatterPlot. If set to None, then the chart tab is hidden.`,\n        terminalOptions: toTerminalOptions([\n            ...ALL_GRAPHER_CHART_TYPES,\n            `${GRAPHER_CHART_TYPES.LineChart} ${GRAPHER_CHART_TYPES.SlopeChart}`,\n            `${GRAPHER_CHART_TYPES.LineChart} ${GRAPHER_CHART_TYPES.DiscreteBar}`,\n            `${GRAPHER_CHART_TYPES.SlopeChart} ${GRAPHER_CHART_TYPES.DiscreteBar}`,\n            `${GRAPHER_CHART_TYPES.LineChart} ${GRAPHER_CHART_TYPES.SlopeChart} ${GRAPHER_CHART_TYPES.DiscreteBar}`,\n            \"None\",\n        ]),\n        toGrapherObject: (parsedValue) => {\n            if (parsedValue === \"None\") return { chartTypes: [] }\n            if (parsedValue)\n                return {\n                    chartTypes: parsedValue.split(\" \") as GrapherChartType[],\n                }\n            return {}\n        },\n    },\n    grapherId: {\n        ...IntegerCellDef,\n        description: \"ID of a legacy Grapher to load\",\n        keyword: \"grapherId\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ id: parsedValue }),\n    },\n    tableSlug: {\n        ...SlugDeclarationCellDef,\n        description:\n            \"Slug of the explorer table (i.e. csv file) to use for this row. All variables used in this row must be present in the table/file.\",\n        keyword: \"tableSlug\",\n        toGrapherObject: () => ({}), // explorer-specific, not used in grapher config\n    },\n    hasMapTab: {\n        ...BooleanCellDef,\n        keyword: \"hasMapTab\",\n        description: \"Show the map tab?\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ hasMapTab: parsedValue }),\n    },\n    tab: {\n        ...EnumCellDef,\n        keyword: \"tab\",\n        description: \"Which tab to show by default\",\n        terminalOptions: toTerminalOptions(\n            Object.values(GRAPHER_TAB_CONFIG_OPTIONS)\n        ),\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ tab: parsedValue }),\n    },\n    xSlug: {\n        ...SlugDeclarationCellDef,\n        description: \"ColumnSlug for the xAxis\",\n        keyword: \"xSlug\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ xSlug: parsedValue }),\n    },\n    xVariableId: {\n        ...IndicatorIdOrEtlPathCellDef,\n        keyword: \"xVariableId\",\n        description: \"Variable ID or ETL path for the xAxis\",\n        toGrapherObject: () => ({}), // explorer-specific, not used in grapher config\n    },\n    colorSlug: {\n        ...SlugDeclarationCellDef,\n        description: \"ColumnSlug for the color\",\n        keyword: \"colorSlug\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ colorSlug: parsedValue }),\n    },\n    colorVariableId: {\n        ...IndicatorIdOrEtlPathCellDef,\n        keyword: \"colorVariableId\",\n        description: \"Variable ID or ETL path for the color\",\n        toGrapherObject: () => ({}), // explorer-specific, not used in grapher config\n    },\n    sizeSlug: {\n        ...SlugDeclarationCellDef,\n        description: \"ColumnSlug for the size of points on scatters\",\n        keyword: \"sizeSlug\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ sizeSlug: parsedValue }),\n    },\n    sizeVariableId: {\n        ...IndicatorIdOrEtlPathCellDef,\n        keyword: \"sizeVariableId\",\n        description:\n            \"Variable ID or ETL path for the size of points on scatters\",\n        toGrapherObject: () => ({}), // explorer-specific, not used in grapher config\n    },\n    tableSlugs: {\n        ...SlugsDeclarationCellDef,\n        description:\n            \"Columns to show in the Table tab of the chart. If not specified all active slugs will be used.\",\n        keyword: \"tableSlugs\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ tableSlugs: parsedValue }),\n    },\n    sourceDesc: {\n        ...StringCellDef,\n        keyword: \"sourceDesc\",\n        description: \"Short comma-separated list of source names\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ sourceDesc: parsedValue }),\n    },\n    hideAnnotationFieldsInTitle: {\n        ...BooleanCellDef,\n        description: \"Hide automatic time/entity\",\n        keyword: \"hideAnnotationFieldsInTitle\",\n        parse: (value: any) => {\n            const parsedValue = value === GridBoolean.true\n            return {\n                entity: parsedValue,\n                time: parsedValue,\n                changeInPrefix: parsedValue,\n            }\n        },\n        toGrapherObject: (parsedValue) => ({\n            hideAnnotationFieldsInTitle: parsedValue,\n        }),\n    },\n    yScaleToggle: {\n        ...BooleanCellDef,\n        keyword: \"yScaleToggle\",\n        description: \"Set to 'true' if the user can change the yAxis\",\n        toGrapherObject: (parsedValue) => ({\n            yAxis: omitEmptyStringValues({ canChangeScaleType: parsedValue }),\n        }),\n    },\n    yAxisMin: {\n        ...NumericOrAutoCellDef,\n        keyword: \"yAxisMin\",\n        description: \"Set the minimum parsedValue for the yAxis\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyObjectValues({\n                yAxis: omitEmptyStringValues({ min: parsedValue }),\n            }),\n    },\n    facetYDomain: {\n        ...EnumCellDef,\n        keyword: \"facetYDomain\",\n        description:\n            \"Whether facets axes default to shared or independent domain\",\n        terminalOptions: toTerminalOptions(Object.values(FacetAxisDomain)),\n        toGrapherObject: (parsedValue) =>\n            omitEmptyObjectValues({\n                yAxis: omitEmptyStringValues({ facetDomain: parsedValue }),\n            }),\n    },\n    selectedFacetStrategy: {\n        ...EnumCellDef,\n        keyword: \"selectedFacetStrategy\",\n        description: \"Whether the chart should be faceted or not\",\n        terminalOptions: toTerminalOptions(Object.values(FacetStrategy)),\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ selectedFacetStrategy: parsedValue }),\n    },\n    entityType: {\n        ...StringCellDef,\n        keyword: \"entityType\",\n        description:\n            \"Default is 'country', but you can specify a different one such as 'state' or 'region'.\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ entityType: parsedValue }),\n    },\n    baseColorScheme: {\n        ...EnumCellDef,\n        keyword: \"baseColorScheme\",\n        description:\n            \"The default color scheme if no color overrides are specified\",\n        terminalOptions: toTerminalOptions(Object.keys(ColorSchemeName)),\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ baseColorScheme: parsedValue }),\n    },\n    note: {\n        ...StringCellDef,\n        keyword: \"note\",\n        description: \"Chart footnote\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ note: parsedValue }),\n    },\n    sortBy: {\n        ...EnumCellDef,\n        keyword: \"sortBy\",\n        description: \"Specify what to sort the entities by\",\n        terminalOptions: toTerminalOptions(Object.values(SortBy)),\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ sortBy: parsedValue }),\n    },\n    sortOrder: {\n        ...EnumCellDef,\n        keyword: \"sortOrder\",\n        description: \"Whether to sort entities ascending or descending\",\n        terminalOptions: toTerminalOptions(Object.values(SortOrder)),\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ sortOrder: parsedValue }),\n    },\n    sortColumnSlug: {\n        ...SlugOrIndicatorIdOrEtlPathCellDef,\n        keyword: \"sortColumnSlug\",\n        description:\n            \"Column slug, variable ID, or catalog path to sort by. This setting is only respected when `sortBy` is set to `column`\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ sortColumnSlug: parsedValue.toString() }),\n    },\n    stackMode: {\n        ...EnumCellDef,\n        keyword: \"stackMode\",\n        description:\n            \"Show chart in absolute (default) or relative mode. Only works for some chart types.\",\n        terminalOptions: toTerminalOptions(Object.values(StackMode)),\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ stackMode: parsedValue }),\n    },\n    hideTotalValueLabel: {\n        ...BooleanCellDef,\n        keyword: \"hideTotalValueLabel\",\n        description:\n            \"Hide the total parsedValue that is normally displayed to the right of the bars in a stacked bar chart.\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({\n                hideTotalValueLabel: parsedValue,\n            }),\n    },\n    hideRelativeToggle: {\n        ...BooleanCellDef,\n        keyword: \"hideRelativeToggle\",\n        description: \"Whether to hide the relative mode UI toggle\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ hideRelativeToggle: parsedValue }),\n    },\n    timelineMinTime: {\n        ...IntegerCellDef,\n        keyword: \"timelineMinTime\",\n        description:\n            \"Set the minimum time for the timeline. For days, use days since 21 Jan 2020, e.g. 24 Jan 2020 is '3'.\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ timelineMinTime: parsedValue }),\n    },\n    timelineMaxTime: {\n        ...IntegerCellDef,\n        keyword: \"timelineMaxTime\",\n        description:\n            \"Set the maximum time for the timeline. For days, use days since 21 Jan 2020, e.g. 24 Jan 2020 is '3'.\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ timelineMaxTime: parsedValue }),\n    },\n    defaultView: {\n        ...BooleanCellDef,\n        keyword: \"defaultView\",\n        description: \"Whether this view is used as the default view.\",\n        toGrapherObject: () => ({}), // explorer-specific, not used in grapher config\n    },\n    relatedQuestionText: {\n        ...StringCellDef,\n        keyword: \"relatedQuestionText\",\n        description:\n            \"The text used for the related question (at the very bottom of the chart)\",\n        toGrapherObject: () => ({}), // handled in code (can be done properly once the relatedQuestion field is refactored)\n    },\n    relatedQuestionUrl: {\n        ...UrlCellDef,\n        keyword: \"relatedQuestionUrl\",\n        description: \"The link of the related question text\",\n        toGrapherObject: () => ({}), // handled in code (can be done properly once the relatedQuestion field is refactored)\n    },\n    originUrl: {\n        ...AbsoluteOrRelativeUrlCellDef,\n        keyword: \"originUrl\",\n        description:\n            \"The page containing this chart where more context can be found\",\n        valuePlaceholder: \"/life-expectancy\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ originUrl: parsedValue }),\n    },\n    mapTargetTime: {\n        ...IntegerCellDef,\n        keyword: \"mapTargetTime\",\n        description:\n            \"Set the 'target time' for the map chart. This is the year that will be shown by default in the map chart.\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyObjectValues({\n                map: omitEmptyStringValues({ time: parsedValue }),\n            }),\n    },\n    missingDataStrategy: {\n        ...EnumCellDef,\n        keyword: \"missingDataStrategy\",\n        description:\n            \"Hide or show entities for which one or more variables are missing\",\n        terminalOptions: toTerminalOptions(Object.values(MissingDataStrategy)),\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ missingDataStrategy: parsedValue }),\n    },\n    minTime: {\n        ...IntegerCellDef,\n        keyword: \"minTime\",\n        description: \"Start point of the initially selected time span\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ minTime: parsedValue }),\n    },\n    maxTime: {\n        ...IntegerCellDef,\n        keyword: \"maxTime\",\n        description: \"End point of the initially selected time span\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ maxTime: parsedValue }),\n    },\n} as const\n\nexport function omitEmptyStringValues<T extends Record<string, any>>(\n    obj: T\n): Record<string, any> {\n    return R.omitBy(obj, (parsedValue) => parsedValue === \"\")\n}\n\nexport function omitEmptyObjectValues<T extends Record<string, any>>(\n    obj: T\n): Record<string, any> {\n    return R.omitBy(\n        obj,\n        (parsedValue) => R.isPlainObject(parsedValue) && R.isEmpty(parsedValue)\n    )\n}\n","import * as _ from \"lodash-es\"\nimport { observable, computed, action, makeObservable } from \"mobx\"\nimport {\n    queryParamsToStr,\n    differenceObj,\n    trimObject,\n    parseIntOrUndefined,\n    es6mapValues,\n} from \"@ourworldindata/utils\"\nimport { ColumnTypeNames, CoreRow } from \"@ourworldindata/types\"\nimport {\n    CoreTable,\n    detectDelimiter,\n    parseDelimited,\n    isCellEmpty,\n} from \"@ourworldindata/core-table\"\nimport { GridBoolean } from \"./gridLang/GridLangConstants.js\"\nimport {\n    ChoiceMap,\n    ChoiceName,\n    ChoiceValue,\n    ExplorerChoice,\n    ExplorerChoiceOption,\n    ExplorerChoiceParams,\n    ExplorerControlType,\n    ExplorerControlTypeRegex,\n} from \"./ExplorerConstants.js\"\nimport { trimAndParseObject } from \"./ExplorerProgram.js\"\nimport { GrapherGrammar } from \"./GrapherGrammar.js\"\n\nfunction parseVariableIds(value: string): number[] {\n    return value\n        .split(\" \")\n        .map((id) => parseInt(id, 10))\n        .filter((id) => !isNaN(id))\n}\n\n// todo: cleanup\nconst makeChoicesMap = (delimited: string) => {\n    const headerLine = delimited.split(\"\\n\")[0]\n    const map = new Map<ChoiceName, ExplorerControlType>()\n    headerLine\n        .split(detectDelimiter(headerLine))\n        .filter((name) => ExplorerControlTypeRegex.test(name))\n        .forEach((choiceNameAndType) => {\n            const words = choiceNameAndType.split(\" \")\n            const [choiceName, choiceType] = [\n                words.slice(0, -1).join(\" \"),\n                words[words.length - 1],\n            ]\n            map.set(choiceName, choiceType as ExplorerControlType)\n        })\n    return map\n}\n\n// This strips the \"Dropdown\" or \"Checkbox\" from \"SomeChoice Dropdown\" or \"SomeChoice Checkbox\"\nconst removeChoiceControlTypeInfo = (label: string) =>\n    label.replace(ExplorerControlTypeRegex, \"\")\n\nconst dropColumnTypes = (delimited: string): string => {\n    const rows = delimited.split(\"\\n\")\n    const delimiter = detectDelimiter(rows[0])\n    rows[0] = rows[0]\n        .split(delimiter)\n        .map(removeChoiceControlTypeInfo)\n        .join(delimiter)\n    return rows.join(\"\\n\")\n}\n\nconst makeCheckBoxOption = (\n    options: ExplorerChoiceOption[],\n    choiceName: string\n) => {\n    const checked = options.some(\n        (option) => option.checked === true && option.value === GridBoolean.true\n    )\n\n    const available =\n        new Set(options.filter((opt) => opt.available).map((opt) => opt.label))\n            .size === 2\n    return [\n        {\n            label: choiceName,\n            checked,\n            value: GridBoolean.true,\n            available,\n        } as ExplorerChoiceOption,\n    ]\n}\n\n// Takes the author's program and the user's current settings and returns an object for\n// allow the user to navigate amongst charts.\nexport class DecisionMatrix {\n    table: CoreTable\n    currentParams: ExplorerChoiceParams = {}\n    constructor(delimited: string, hash = \"\") {\n        makeObservable(this, {\n            currentParams: observable,\n            selectedRow: observable,\n        })\n        this.choiceNameToControlTypeMap = makeChoicesMap(delimited)\n        this.table = new CoreTable(parseDelimited(dropColumnTypes(delimited)), [\n            // todo: remove col def?\n            {\n                slug: GrapherGrammar.grapherId.keyword,\n                type: ColumnTypeNames.Integer,\n            },\n            // yVariableIds, xVariableIds, etc. can either be an indicator ID or a catalog path.\n            // If the first row contains a numeric value, the column type is inferred to be\n            // numeric, and parsing may fail if subsequent rows contain non-numeric values.\n            // In addition, yVariableIds may also contain a space-separated list of multiple\n            // indicator IDs or catalog paths.\n            ...DecisionMatrix.allColumnSlugsWithIndicatorIdsOrCatalogPaths.map(\n                (slug) => ({\n                    slug,\n                    type: ColumnTypeNames.String,\n                })\n            ),\n        ])\n        this.hash = hash\n        this.setValuesFromChoiceParams() // Initialize options\n    }\n\n    allDecisionsAsQueryParams(): ExplorerChoiceParams[] {\n        return this.table.rows.map((row) => {\n            const choiceParams: ExplorerChoiceParams = {}\n            this.choiceNames.forEach((name) => {\n                choiceParams[name] = row[name]\n            })\n            return choiceParams\n        })\n    }\n\n    get numRows() {\n        return this.table.numRows\n    }\n\n    get requiredGrapherIds() {\n        return this.table.get(GrapherGrammar.grapherId.keyword).uniqValues\n    }\n\n    /**\n     * Unique variable IDs requiring partial Grapher config to be loaded.\n     * Extracts the first (primary) variable ID from the y-dimension of each\n     * decision matrix row.\n     */\n    get requiredVariableIds() {\n        return _.uniq(\n            this.table\n                .get(GrapherGrammar.yVariableIds.keyword)\n                .values.map((value) => parseVariableIds(value))\n                .map((ids: number[]) => ids[0])\n                .filter(_.identity)\n        )\n    }\n\n    /** All variable IDs referenced in the explorer config */\n    get allVariableIds() {\n        return _.uniq(\n            DecisionMatrix.allColumnSlugsWithIndicatorIdsOrCatalogPaths.flatMap(\n                (slug) =>\n                    this.table\n                        .get(slug)\n                        .values.flatMap((value) => parseVariableIds(value))\n                        .filter(_.identity)\n            )\n        )\n    }\n\n    private static readonly allColumnSlugsWithIndicatorIdsOrCatalogPaths = [\n        GrapherGrammar.yVariableIds.keyword,\n        GrapherGrammar.xVariableId.keyword,\n        GrapherGrammar.colorVariableId.keyword,\n        GrapherGrammar.sizeVariableId.keyword,\n        GrapherGrammar.sortColumnSlug.keyword,\n    ]\n\n    get allColumnsWithIndicatorIdsOrCatalogPaths() {\n        return this.table\n            .getColumns(\n                DecisionMatrix.allColumnSlugsWithIndicatorIdsOrCatalogPaths\n            )\n            .filter((col) => !col.isMissing)\n    }\n\n    get requiredCatalogPaths(): Set<string> {\n        const allIndicators = this.allColumnsWithIndicatorIdsOrCatalogPaths\n            .flatMap((col) => col.uniqValues)\n            .flatMap((value) => value.split(\" \"))\n            .filter((value) => value !== \"\")\n\n        // Assume it's a catalog path if it doesn't look like a number\n        const catalogPaths = allIndicators.filter(\n            (indicator) => parseIntOrUndefined(indicator) === undefined\n        )\n\n        return new Set(catalogPaths)\n    }\n\n    // This is, basically, the inverse of `dropColumnTypes`.\n    // Turns a column named \"Metric\" back into \"Metric Dropdown\", for example.\n    get tableWithOriginalColumnNames() {\n        return this.table.renameColumns(\n            Object.fromEntries(\n                es6mapValues(\n                    this.choiceNameToControlTypeMap,\n                    (controlType, choiceName) => `${choiceName} ${controlType}`\n                )\n            )\n        )\n    }\n\n    choiceNameToControlTypeMap: Map<ChoiceName, ExplorerControlType>\n    hash: string\n\n    toConstrainedOptions(): ExplorerChoiceParams {\n        const settings = { ...this.currentParams }\n        this.choiceNames.forEach((choiceName) => {\n            // check if the current choice is valid with the current settings\n            if (\n                this.isOptionAvailable(\n                    choiceName,\n                    settings[choiceName],\n                    settings\n                )\n            ) {\n                // do nothing - we can use settings[choiceName] as-is\n            }\n            // check if the default choice is valid with the current settings\n            else if (\n                this.defaultSettings[choiceName] !== undefined &&\n                this.isOptionAvailable(\n                    choiceName,\n                    this.defaultSettings[choiceName],\n                    settings\n                )\n            ) {\n                settings[choiceName] = this.defaultSettings[choiceName]\n            }\n            // if both are not valid, find the first valid option\n            else {\n                settings[choiceName] = this.firstAvailableOptionForChoice(\n                    choiceName,\n                    settings\n                )!\n            }\n        })\n        return settings\n    }\n\n    @computed\n    private get diffBetweenUserSettingsAndConstrained(): ExplorerChoiceParams {\n        return differenceObj(\n            this.toConstrainedOptions(),\n            this.currentParams\n        ) as ExplorerChoiceParams\n    }\n\n    @action.bound setValueCommand(choiceName: ChoiceName, value: ChoiceValue) {\n        this._setValue(choiceName, value)\n        const invalidState = this.diffBetweenUserSettingsAndConstrained\n        Object.keys(invalidState).forEach((key) => {\n            // If a user navigates to a state where an option previously selected is not available,\n            // then persist the new option, as long as it isn't the only one available.\n            //\n            // For example, if the user navigates from metric:Cases interval:Weekly, to\n            // metric:Vaccinations, if interval:Weekly is not available for Vaccinations but other\n            // (more than one) intervals are available, we will persist whichever we happen to end\n            // up on.\n            //\n            // But if the user navigates from metric:Cases perCapita:true, to\n            // metric:Share of positive tests, then the only available perCapita option is false,\n            // but it isn't persisted, because the user has no other options. It's non-sensical to\n            // ask for \"Share of positive tests per capita\", so qualitatively it's a different\n            // metric, and the perCapita can just be ignored.\n            //\n            // We assume in every case where the user has only a single option available (therefore\n            // has no choice) the option should not be persisted.\n            if (this.availableChoiceOptions[key].length > 1) {\n                this._setValue(key, invalidState[key])\n            }\n        })\n    }\n\n    @action.bound private _setValue(\n        choiceName: ChoiceName,\n        value: ChoiceValue\n    ) {\n        if (value === \"\") delete this.currentParams[choiceName]\n        else this.currentParams[choiceName] = value\n        this.selectedRow = trimAndParseObject(\n            this.table.rowsAt([this.selectedRowIndex])[0],\n            GrapherGrammar\n        )\n    }\n\n    @action.bound setValuesFromChoiceParams(\n        choiceParams: ExplorerChoiceParams = {}\n    ) {\n        this.choiceNames.forEach((choiceName) => {\n            const choiceValue =\n                choiceParams[choiceName] ?? this.defaultSettings[choiceName]\n\n            if (choiceValue === undefined)\n                this._setValue(\n                    choiceName,\n                    this.firstAvailableOptionForChoice(choiceName)!\n                )\n            else this._setValue(choiceName, choiceValue)\n        })\n        return this\n    }\n\n    @computed private get choiceNames(): ChoiceName[] {\n        return Array.from(this.choiceNameToControlTypeMap.keys())\n    }\n\n    @computed private get allChoiceOptions(): ChoiceMap {\n        const choiceMap: ChoiceMap = {}\n        this.choiceNames.forEach((choiceName) => {\n            choiceMap[choiceName] = this.table\n                .get(choiceName)\n                .uniqValues.filter((cell) => !isCellEmpty(cell)) as string[]\n        })\n        return choiceMap\n    }\n\n    @computed get availableChoiceOptions(): ChoiceMap {\n        const result: ChoiceMap = {}\n        this.choiceNames.forEach((choiceName) => {\n            result[choiceName] = this.allChoiceOptions[choiceName].filter(\n                (option) => this.isOptionAvailable(choiceName, option)\n            )\n        })\n        return result\n    }\n\n    getChoiceParamsForRow(row: CoreRow): ExplorerChoiceParams {\n        const result: ExplorerChoiceParams = {}\n        this.choiceNames.forEach((choiceName) => {\n            result[choiceName] = row[choiceName]\n        })\n        return result\n    }\n\n    private firstAvailableOptionForChoice(\n        choiceName: ChoiceName,\n        currentState = this.currentParams\n    ): ChoiceValue | undefined {\n        return this.allChoiceOptions[choiceName].find((option) =>\n            this.isOptionAvailable(choiceName, option, currentState)\n        )\n    }\n\n    /**\n     * Note: there is a rare bug in here + rowsWith when an author has a complex decision matrix. If the user vists a url\n     * with invalid options like Metric=\"Tests\", Interval=\"Weekly\", Aligned=\"false\"\n     * we will return first match, which is B1, even though B2 is a better match.\n     *\n     * graphers\n     * title\tMetric Radio\tInterval Radio\tAligned Checkbox\n     * A1\tCases\tCumulative\ttrue\n     * A2\tCases\tCumulative\tfalse\n     * A3\tCases\tWeekly\tfalse\n     *\n     * B1\tTests\tCumulative\ttrue\n     * B2\tTests\tCumulative\tfalse\n     */\n    isOptionAvailable(\n        choiceName: ChoiceName,\n        option: ChoiceValue,\n        currentState = this.currentParams\n    ) {\n        const query: ExplorerChoiceParams = {}\n        this.choiceNames\n            .slice(0, this.choiceNames.indexOf(choiceName))\n            .forEach((name) => {\n                query[name] = currentState[name]\n            })\n        query[choiceName] = option\n        return this.rowsWith(query, choiceName).length > 0\n    }\n\n    private rowsWith(query: ExplorerChoiceParams, choiceName?: ChoiceName) {\n        // We allow other options to be blank.\n        const modifiedQuery: any = {}\n        Object.keys(trimObject(query)).forEach((queryColumn) => {\n            if (queryColumn !== choiceName)\n                // Blanks are fine if we are not talking about the column of interest\n                modifiedQuery[queryColumn] = [query[queryColumn], \"\"]\n            else modifiedQuery[queryColumn] = query[queryColumn]\n        })\n        return this.table.findRows(modifiedQuery)\n    }\n\n    // The first row with defaultView column value of \"true\" determines the default view to use\n    get defaultSettings() {\n        const hits = this.rowsWith({\n            [GrapherGrammar.defaultView.keyword]: \"true\",\n        })\n        return hits[0] ?? {}\n    }\n\n    private get firstMatch() {\n        const query = this.toConstrainedOptions()\n        const hits = this.rowsWith(query)\n        return hits[0]\n    }\n\n    get selectedRowIndex(): number {\n        return this.firstMatch === undefined\n            ? 0\n            : this.table.indexOf(this.firstMatch)\n    }\n\n    selectedRow: any = {}\n\n    private toControlOption(\n        choiceName: ChoiceName,\n        optionName: string,\n        currentValue: ChoiceValue,\n        constrainedOptions: ExplorerChoiceParams\n    ): ExplorerChoiceOption {\n        const available = this.isOptionAvailable(\n            choiceName,\n            optionName,\n            constrainedOptions\n        )\n        return {\n            label: optionName,\n            value: optionName,\n            available,\n            checked: currentValue === optionName,\n        }\n    }\n\n    @computed get choicesWithAvailability(): ExplorerChoice[] {\n        const selectedRow = this.selectedRow\n        const constrainedOptions = this.toConstrainedOptions()\n        return this.choiceNames.map((title) => {\n            const value =\n                selectedRow[title] !== undefined\n                    ? selectedRow[title].toString()\n                    : selectedRow[title]\n            const options = this.allChoiceOptions[title].map((optionName) =>\n                this.toControlOption(\n                    title,\n                    optionName,\n                    value,\n                    constrainedOptions\n                )\n            )\n            const type = this.choiceNameToControlTypeMap.get(title)!\n\n            return {\n                title,\n                displayTitle: title,\n                type,\n                value,\n                options:\n                    type === ExplorerControlType.Checkbox\n                        ? makeCheckBoxOption(options, title)\n                        : options,\n            }\n        })\n    }\n\n    toString() {\n        return queryParamsToStr(this.currentParams)\n    }\n}\n","import {\n    CellDef,\n    BooleanCellDef,\n    SlugDeclarationCellDef,\n    StringCellDef,\n    UrlCellDef,\n    SubTableHeaderCellDef,\n    IntegerCellDef,\n    SlugsDeclarationCellDef,\n    Grammar,\n    StringDeclarationDef,\n} from \"./gridLang/GridLangConstants.js\"\nimport { GrapherGrammar } from \"./GrapherGrammar.js\"\nimport { ColumnGrammar } from \"./ColumnGrammar.js\"\n\nconst ExplorerFormControlCellDeff: CellDef = {\n    ...StringDeclarationDef,\n    description: \"A form input for the user.\",\n    regex: /^.+ (Dropdown|Radio|Checkbox)$/,\n    requirementsDescription: `Must end with 'Dropdown', 'Radio', or 'Checkbox'`,\n}\n\nexport const ExplorerGrammar: Grammar = {\n    table: {\n        ...UrlCellDef,\n        keyword: \"table\",\n        valuePlaceholder: \"\",\n        regex: new RegExp(`(${UrlCellDef.regex?.source ?? \"\"}|^[\\\\w -()]+$)`), // URL or OWID dataset name\n        description: \"A link to a CSV or TSV or the name of an OWID dataset.\",\n        positionalCellDefs: [\n            {\n                ...SlugDeclarationCellDef,\n                description:\n                    \"If you have multiple tables, give each one a unique slug.\",\n            },\n        ],\n        headerCellDef: {\n            ...SlugDeclarationCellDef,\n            cssClass: \"SubTableHeaderCellDef\",\n            grammar: {},\n            catchAllCellDef: {\n                ...SlugDeclarationCellDef,\n                description: \"A column slug.\",\n            },\n        },\n    },\n    explorerTitle: {\n        ...StringCellDef,\n        keyword: \"explorerTitle\",\n        valuePlaceholder: \"Life Expectancy\",\n        description:\n            \"The title will appear in the top left corner of the Explorer.\",\n    },\n    explorerSubtitle: {\n        ...StringCellDef,\n        keyword: \"explorerSubtitle\",\n        valuePlaceholder: \"All our data from various sources.\",\n        description: \"The subtitle will appear under the explorerTitle.\",\n    },\n    columns: {\n        ...SlugDeclarationCellDef,\n        keyword: \"columns\",\n        description:\n            \"Include all your column definitions for one or multiple tables here. If you do not provide a column definition for every column in your table one will be generated for you by the machine (sometimes incorrectly).\",\n        headerCellDef: {\n            ...SubTableHeaderCellDef,\n            grammar: ColumnGrammar,\n        },\n        isHorizontalList: true,\n    },\n    graphers: {\n        ...SlugDeclarationCellDef,\n        keyword: \"graphers\",\n        description: \"The decision matrix for your Explorer goes here.\",\n        headerCellDef: {\n            ...SubTableHeaderCellDef,\n            grammar: GrapherGrammar,\n            catchAllCellDef: ExplorerFormControlCellDeff,\n        },\n    },\n    googleSheet: {\n        ...UrlCellDef,\n        keyword: \"googleSheet\",\n        valuePlaceholder: \"https://docs.google.com/spreadsheets/d/1qeX...\",\n        description:\n            \"Create a Google Sheet, share it with the OWID Group, then put the link here.\",\n    },\n    downloadDataLink: {\n        ...UrlCellDef,\n        keyword: \"downloadDataLink\",\n        valuePlaceholder: \"https://example.com/data.csv\",\n        description:\n            \"An optional URL for the download button in the Download tab. If blank, the Explorer will instead generate a CSV from the data it has available.\",\n    },\n    isPublished: {\n        ...BooleanCellDef,\n        keyword: \"isPublished\",\n        description: \"Set to true to make this Explorer public.\",\n    },\n    wpBlockId: {\n        ...IntegerCellDef,\n        keyword: \"wpBlockId\",\n        description:\n            \"If present will show the matching Wordpress block ID beneath the Explorer.\",\n    },\n    hideControls: {\n        ...BooleanCellDef,\n        keyword: \"hideControls\",\n        description: \"Whether to hide the controls. Default is false.\",\n    },\n    selection: {\n        ...StringCellDef,\n        keyword: \"selection\",\n        valuePlaceholder: \"Canada\",\n        description: \"The default selected entities.\",\n        isHorizontalList: true,\n    },\n    entityType: {\n        ...StringCellDef,\n        keyword: \"entityType\",\n        valuePlaceholder: \"region\",\n        description:\n            \"Default is 'country or region', but you can specify a different one such as 'state' or 'region'.\",\n    },\n    pickerColumnSlugs: {\n        ...SlugsDeclarationCellDef,\n        keyword: \"pickerColumnSlugs\",\n        valuePlaceholder: \"gdp population gdp_per_capita\",\n        description:\n            \"You can manually set the column slug(s) to show in the entity picker or else they will be automatically chosen.\",\n    },\n    ...GrapherGrammar,\n} as const\n","import * as _ from \"lodash-es\"\n/* eslint-disable no-sparse-arrays */\nimport {\n    CoreMatrix,\n    ColumnTypeNames,\n    CoreTableInputOption,\n    OwidColumnDef,\n    TableSlug,\n    FacetAxisDomain,\n    GrapherInterface,\n    AxisMinMaxValueStr,\n    GrapherChartType,\n    DimensionProperty,\n    SlugDimensionInterface,\n    IndicatorDimensionInterface,\n} from \"@ourworldindata/types\"\nimport {\n    CoreTable,\n    OwidTable,\n    isNotErrorValue,\n    isNotErrorValueOrEmptyCell,\n} from \"@ourworldindata/core-table\"\nimport {\n    GitCommit,\n    PromiseCache,\n    SerializedGridProgram,\n    trimObject,\n    fetchWithRetry,\n    parseIntOrUndefined,\n    excludeUndefined,\n} from \"@ourworldindata/utils\"\nimport {\n    CellDef,\n    Grammar,\n    GridBoolean,\n    GRID_CELL_DELIMITER,\n    GRID_NODE_DELIMITER,\n    RootKeywordCellDef,\n} from \"./gridLang/GridLangConstants.js\"\nimport { GridProgram } from \"./gridLang/GridProgram.js\"\nimport { ColumnGrammar } from \"./ColumnGrammar.js\"\nimport {\n    DefaultNewExplorerSlug,\n    ExplorerChartCreationMode,\n    ExplorerChoiceParams,\n    EXPLORERS_ROUTE_FOLDER,\n} from \"./ExplorerConstants.js\"\nimport { DecisionMatrix } from \"./ExplorerDecisionMatrix.js\"\nimport { ExplorerGrammar } from \"./ExplorerGrammar.js\"\nimport { GrapherGrammar } from \"./GrapherGrammar.js\"\nimport { latestGrapherConfigSchema } from \"@ourworldindata/grapher\"\n\nexport const EXPLORER_FILE_SUFFIX = \".explorer.tsv\"\n\nexport interface TableDef {\n    url?: string\n    columnDefinitions?: OwidColumnDef[]\n    inlineData?: string[][]\n    slug?: TableSlug\n}\n\nexport interface ExplorerGrapherInterface extends GrapherInterface {\n    grapherId?: number\n    tableSlug?: string\n    yVariableIds?: string\n    xVariableId?: string\n    colorVariableId?: string\n    sizeVariableId?: string\n    yScaleToggle?: boolean\n    yAxisMin?: number | AxisMinMaxValueStr.auto\n    facetYDomain?: FacetAxisDomain\n    relatedQuestionText?: string\n    relatedQuestionUrl?: string\n    mapTargetTime?: number\n    type?: GrapherChartType | \"LineChart SlopeChart\" | \"None\"\n}\n\nconst ExplorerRootDef: CellDef = {\n    ...RootKeywordCellDef,\n    grammar: ExplorerGrammar,\n}\n\ntype ChartDimensionInterfaceBySlug = SlugDimensionInterface & {\n    type: \"slug\"\n}\n\ntype ChartDimensionInterfaceByVariableId = IndicatorDimensionInterface & {\n    type: \"variableId\"\n}\n\ntype ExplorerChartDimensionInterface =\n    | ChartDimensionInterfaceBySlug\n    | ChartDimensionInterfaceByVariableId\n\nexport class ExplorerProgram extends GridProgram {\n    constructor(slug: string, tsv: string, lastCommit?: GitCommit) {\n        super(slug, tsv, lastCommit, ExplorerRootDef)\n    }\n\n    private _decisionMatrix?: DecisionMatrix\n    get decisionMatrix() {\n        if (!this._decisionMatrix) {\n            this._decisionMatrix = new DecisionMatrix(\n                this.decisionMatrixCode ?? \"\",\n                this.lastCommit?.hash\n            )\n        }\n        return this._decisionMatrix\n    }\n\n    static fromJson(json: SerializedGridProgram) {\n        return new ExplorerProgram(json.slug, json.program, json.lastCommit)\n    }\n\n    get clone() {\n        return ExplorerProgram.fromJson(this.toJson())\n    }\n\n    get isNewFile() {\n        return this.slug === DefaultNewExplorerSlug\n    }\n\n    get filename() {\n        return this.slug + EXPLORER_FILE_SUFFIX\n    }\n\n    initDecisionMatrix(choiceParams: ExplorerChoiceParams) {\n        this.decisionMatrix.setValuesFromChoiceParams(choiceParams)\n        return this\n    }\n\n    get fullPath() {\n        return makeFullPath(this.slug)\n    }\n\n    get currentlySelectedGrapherRow() {\n        const row = this.getKeywordIndex(ExplorerGrammar.graphers.keyword)\n        return row === -1\n            ? undefined\n            : row + this.decisionMatrix.selectedRowIndex + 2\n    }\n\n    static fromMatrix(slug: string, matrix: CoreMatrix) {\n        const str = matrix\n            .map((row) =>\n                row.map((cell) => cell && `${cell}`.replace(/\\n/g, \"\\\\n\"))\n            )\n            .map((row) => row.join(GRID_CELL_DELIMITER))\n            .join(GRID_NODE_DELIMITER)\n        return new ExplorerProgram(slug, str)\n    }\n\n    get explorerTitle() {\n        return this.getLineValue(ExplorerGrammar.explorerTitle.keyword)\n    }\n\n    get title() {\n        return this.getLineValue(ExplorerGrammar.title.keyword)\n    }\n\n    get googleSheet() {\n        return this.getLineValue(ExplorerGrammar.googleSheet.keyword)\n    }\n\n    get explorerSubtitle() {\n        return this.getLineValue(ExplorerGrammar.explorerSubtitle.keyword)\n    }\n\n    get entityType() {\n        return this.getLineValue(ExplorerGrammar.entityType.keyword)\n    }\n\n    get selection() {\n        return this.getLine(ExplorerGrammar.selection.keyword)?.slice(1)\n    }\n\n    get pickerColumnSlugs() {\n        const slugs = this.getLineValue(\n            ExplorerGrammar.pickerColumnSlugs.keyword\n        )\n        return slugs ? slugs.split(\" \") : undefined\n    }\n\n    get hideControls() {\n        return this.getLineValue(ExplorerGrammar.hideControls.keyword)\n    }\n\n    get downloadDataLink() {\n        return this.getLineValue(ExplorerGrammar.downloadDataLink.keyword)\n    }\n\n    get isPublished() {\n        return (\n            this.getLineValue(ExplorerGrammar.isPublished.keyword) ===\n            GridBoolean.true\n        )\n    }\n\n    setPublished(value: boolean) {\n        return this.clone.setLineValue(\n            ExplorerGrammar.isPublished.keyword,\n            value ? GridBoolean.true : GridBoolean.false\n        )\n    }\n\n    get wpBlockId() {\n        const blockIdString = this.getLineValue(\n            ExplorerGrammar.wpBlockId.keyword\n        )\n        return blockIdString ? parseInt(blockIdString, 10) : undefined\n    }\n\n    get decisionMatrixCode() {\n        const keywordIndex = this.getKeywordIndex(\n            ExplorerGrammar.graphers.keyword\n        )\n        if (keywordIndex === -1) return undefined\n        return this.getBlock(keywordIndex)\n            ?.map((row) => row.join(this.cellDelimiter))\n            .join(\"\\n\")\n    }\n\n    get grapherCount() {\n        return this.decisionMatrix.numRows || 1\n    }\n\n    get tableCount() {\n        return this.getRowNumbersStartingWith(ExplorerGrammar.table.keyword)\n            .length\n    }\n\n    get tableSlugs(): (TableSlug | undefined)[] {\n        return this.lines\n            .filter((line) => line[0] === ExplorerGrammar.table.keyword)\n            .map((line) => line[2])\n    }\n\n    // for backward compatibility, we currently support explorers\n    // that use Grapher IDs as well as CSV data files to create charts,\n    // but we plan to drop support for mixed-content explorers in the future\n    getChartCreationModeForExplorerGrapherConfig(\n        explorerGrapherConfig: ExplorerGrapherInterface\n    ): ExplorerChartCreationMode {\n        const { decisionMatrix } = this\n        const { grapherId } = explorerGrapherConfig\n        const yVariableIdsColumn = decisionMatrix.table.get(\n            GrapherGrammar.yVariableIds.keyword\n        )\n        // referring to a variable in a single row triggers\n        // ExplorerChartCreationMode.FromVariableIds for all rows\n        if (yVariableIdsColumn.numValues)\n            return ExplorerChartCreationMode.FromVariableIds\n        if (grapherId && isNotErrorValue(grapherId))\n            return ExplorerChartCreationMode.FromGrapherId\n        return ExplorerChartCreationMode.FromExplorerTableColumnSlugs\n    }\n\n    get chartCreationMode(): ExplorerChartCreationMode {\n        return this.getChartCreationModeForExplorerGrapherConfig(\n            this.explorerGrapherConfig\n        )\n    }\n\n    get whyIsExplorerProgramInvalid(): string {\n        const {\n            chartCreationMode,\n            decisionMatrix: { table },\n        } = this\n        const { FromVariableIds, FromGrapherId, FromExplorerTableColumnSlugs } =\n            ExplorerChartCreationMode\n\n        const grapherIdColumn = table.get(GrapherGrammar.grapherId.keyword)\n        const tableSlugColumn = table.get(GrapherGrammar.tableSlug.keyword)\n        const hasGrapherId = grapherIdColumn.numValues > 0\n        const hasCsvData = tableSlugColumn.numValues > 0 || this.tableCount > 0\n\n        if (chartCreationMode === FromVariableIds && hasGrapherId)\n            return \"Using variables IDs and Grapher IDs to create charts is not supported.\"\n\n        if (chartCreationMode === FromVariableIds && hasCsvData)\n            return \"Using variable IDs and CSV data files to create charts is not supported.\"\n\n        if (\n            (chartCreationMode === FromGrapherId && hasCsvData) ||\n            (chartCreationMode === FromExplorerTableColumnSlugs && hasGrapherId)\n        )\n            return \"Using Grapher IDs and CSV data files to create charts is deprecated.\"\n\n        return \"\"\n    }\n\n    get columnDefsByTableSlug(): Map<TableSlug | undefined, OwidColumnDef[]> {\n        const columnDefs = new Map<TableSlug | undefined, OwidColumnDef[]>()\n        const colDefsRows = this.getAllRowsMatchingWords(\n            ExplorerGrammar.columns.keyword\n        )\n\n        const matrix = this.lines\n        for (const row of colDefsRows) {\n            const tableSlugs = matrix[row].slice(1)\n            const columnDefinitions = parseColumnDefs(this.getBlock(row) ?? [])\n            if (tableSlugs.length === 0)\n                columnDefs.set(undefined, columnDefinitions)\n            else\n                tableSlugs.forEach((tableSlug) => {\n                    columnDefs.set(tableSlug, columnDefinitions)\n                })\n        }\n        return columnDefs\n    }\n\n    get columnDefsWithoutTableSlug(): OwidColumnDef[] {\n        return this.columnDefsByTableSlug.get(undefined) ?? []\n    }\n\n    private get columnDefsWithoutTableSlugByIdOrSlug(): Record<\n        string,\n        OwidColumnDef\n    > {\n        return _.keyBy(\n            this.columnDefsWithoutTableSlug,\n            (def: OwidColumnDef) => def.owidVariableId?.toString() ?? def.slug\n        )\n    }\n\n    getColumnDefWithoutTableSlugByIdOrSlug(\n        idOrSlug: string\n    ): OwidColumnDef | undefined {\n        return this.columnDefsWithoutTableSlugByIdOrSlug[idOrSlug]\n    }\n\n    async autofillMissingColumnDefinitionsForTableCommand(tableSlug?: string) {\n        const clone = this.clone\n        const remoteTable = await clone.constructTable(tableSlug)\n        const existingTableDef = this.getTableDef(tableSlug)\n        const table =\n            remoteTable ||\n            (existingTableDef\n                ? new CoreTable(\n                      existingTableDef.inlineData,\n                      existingTableDef.columnDefinitions\n                  )\n                : undefined)\n        const newCols = table.autodetectedColumnDefs\n        const missing = newCols\n            .appendColumns([\n                {\n                    slug: ColumnGrammar.notes.keyword,\n                    values: newCols.indices.map(() => `Unreviewed`),\n                },\n            ])\n            .select([\n                ColumnGrammar.slug.keyword,\n                ,\n                ColumnGrammar.name.keyword,\n                ,\n                ColumnGrammar.type.keyword,\n                ColumnGrammar.notes.keyword,\n            ] as string[])\n\n        const colDefsRow = this.getRowMatchingWords(\n            ExplorerGrammar.columns.keyword,\n            tableSlug\n        )\n\n        if (colDefsRow !== -1)\n            clone.updateBlock(\n                colDefsRow,\n                new CoreTable(clone.getBlock(colDefsRow))\n                    .concat([missing])\n                    .toMatrix()\n            )\n        else\n            clone.appendBlock(\n                `${ExplorerGrammar.columns.keyword}${\n                    tableSlug ? this.cellDelimiter + tableSlug : \"\"\n                }`,\n                missing.toMatrix()\n            )\n        return clone\n    }\n\n    /**\n     * Grapher config for the currently selected row including global settings.\n     * Includes all columns that are part of the GrapherGrammar.\n     */\n    get explorerGrapherConfig(): ExplorerGrapherInterface {\n        const selectedGrapherRow = this.decisionMatrix.selectedRow\n\n        const rootObject = trimAndParseObject(this.tuplesObject, GrapherGrammar)\n        let config = { ...rootObject }\n\n        if (selectedGrapherRow && Object.keys(selectedGrapherRow).length) {\n            config = {\n                ...config,\n                ...trimAndParseObject(selectedGrapherRow, GrapherGrammar),\n            }\n        }\n\n        // Remove all keys that are not part of the GrapherGrammar\n        Object.keys(config).forEach((key) => {\n            if (!GrapherGrammar[key]) delete config[key]\n        })\n\n        return config\n    }\n\n    /**\n     * Grapher config for the currently selected row, with explorer-specific\n     * fields translated to valid GrapherInterface fields.\n     *\n     * For example, `yAxisMin` is translated to `{yAxis: {min: ... }}`\n     */\n    get grapherConfig(): GrapherInterface {\n        const partialConfigs: GrapherInterface[] = []\n        const fields = Object.entries(this.explorerGrapherConfig)\n\n        for (const [field, value] of fields) {\n            const cellDef = GrapherGrammar[field]\n            partialConfigs.push(cellDef.toGrapherObject(value))\n        }\n\n        const mergedConfig = _.merge({}, ...partialConfigs)\n\n        // assume config is valid against the latest schema\n        mergedConfig.$schema = latestGrapherConfigSchema\n\n        // TODO: can be removed once relatedQuestions is refactored\n        const { relatedQuestionUrl, relatedQuestionText } =\n            this.explorerGrapherConfig\n        if (relatedQuestionUrl && relatedQuestionText) {\n            mergedConfig.relatedQuestions = [\n                { url: relatedQuestionUrl, text: relatedQuestionText },\n            ]\n        }\n\n        return mergedConfig\n    }\n\n    /**\n     * All dimensions (x, y, color, size) for the currently selected Grapher row.\n     *\n     * Dimensions are either specified by a slug or variable id.\n     */\n    get dimensionsOfSelectedRow(): ExplorerChartDimensionInterface[] {\n        const { y, x, color, size } = DimensionProperty\n        const {\n            ySlugs = \"\",\n            xSlug,\n            colorSlug,\n            sizeSlug,\n            yVariableIds = \"\",\n            xVariableId,\n            colorVariableId,\n            sizeVariableId,\n        } = this.explorerGrapherConfig\n\n        /** Construct dimension object with a slug */\n        const makeSlugDimension = (\n            slug: string | undefined,\n            property: DimensionProperty\n        ): ChartDimensionInterfaceBySlug | undefined => {\n            if (!slug) return undefined\n            const dimension: ChartDimensionInterfaceBySlug = {\n                type: \"slug\",\n                slug,\n                property,\n            }\n            const def = this.getColumnDefWithoutTableSlugByIdOrSlug(slug)\n            if (def?.display) dimension.display = def.display\n            return dimension\n        }\n\n        /** Construct dimension object with a variable id */\n        const makeVariableIdDimension = (\n            variableId: string | undefined,\n            property: DimensionProperty\n        ): ChartDimensionInterfaceByVariableId | undefined => {\n            if (!variableId) return undefined\n            const parsedId = parseIntOrUndefined(variableId)\n            if (!parsedId) return undefined\n            const dimension: ChartDimensionInterfaceByVariableId = {\n                type: \"variableId\",\n                variableId: parsedId,\n                property,\n            }\n            const def = this.getColumnDefWithoutTableSlugByIdOrSlug(\n                parsedId.toString()\n            )\n            if (def?.display) dimension.display = def.display\n            return dimension\n        }\n\n        // Make slug based dimensions\n        const ySlugList = ySlugs.split(\" \")\n        const slugDimYList = excludeUndefined(\n            ySlugList.map((slug) => makeSlugDimension(slug, y))\n        )\n        const slugDimX = makeSlugDimension(xSlug, x)\n        const slugDimColor = makeSlugDimension(colorSlug, color)\n        const slugDimSize = makeSlugDimension(sizeSlug, size)\n\n        // Make variable id based dimensions\n        const yVariableIdList = yVariableIds.split(\" \")\n        const varDimYList = excludeUndefined(\n            yVariableIdList.map((variableId) =>\n                makeVariableIdDimension(variableId, y)\n            )\n        )\n        const varDimX = makeVariableIdDimension(xVariableId, x)\n        const varDimColor = makeVariableIdDimension(colorVariableId, color)\n        const varDimSize = makeVariableIdDimension(sizeVariableId, size)\n\n        const dimensions: ExplorerChartDimensionInterface[] = []\n\n        // Add y dimensions\n        slugDimYList.forEach((dim) => dimensions.push(dim))\n        varDimYList.forEach((dim) => dimensions.push(dim))\n\n        // Add x dimensions (only one should be given)\n        if (slugDimX) dimensions.push(slugDimX)\n        if (varDimX) dimensions.push(varDimX)\n\n        // Add color dimensions (only one should be given)\n        if (slugDimColor) dimensions.push(slugDimColor)\n        if (varDimColor) dimensions.push(varDimColor)\n\n        // Add size dimensions (only one should be given)\n        if (slugDimSize) dimensions.push(slugDimSize)\n        if (varDimSize) dimensions.push(varDimSize)\n\n        return dimensions\n    }\n\n    /**\n     * A static method so that all explorers on the page share requests,\n     * and no duplicate requests are sent.\n     */\n    private static readonly tableDataLoader = new PromiseCache(\n        async (url: string): Promise<CoreTableInputOption> => {\n            const response = await fetchWithRetry(url)\n            if (!response.ok) throw new Error(response.statusText)\n            const tableInput: CoreTableInputOption = url.endsWith(\".json\")\n                ? await response.json()\n                : await response.text()\n            return tableInput\n        }\n    )\n\n    async constructTable(tableSlug?: TableSlug): Promise<OwidTable> {\n        const tableDef = this.getTableDef(tableSlug)\n        if (!tableDef) {\n            throw new Error(`Table definitions not found for '${tableSlug}'`)\n        }\n\n        if (tableDef.inlineData) {\n            return new OwidTable(\n                tableDef.inlineData,\n                tableDef.columnDefinitions,\n                {\n                    tableDescription: `Loaded '${tableSlug}' from inline data`,\n                    tableSlug: tableSlug,\n                }\n            ).dropEmptyRows()\n        } else if (tableDef.url) {\n            const input = await ExplorerProgram.tableDataLoader.get(\n                tableDef.url\n            )\n            return new OwidTable(input, tableDef.columnDefinitions, {\n                tableDescription: `Loaded from ${tableDef.url}`,\n            })\n        }\n\n        throw new Error(`No data for table '${tableSlug}'`)\n    }\n\n    getTableDef(tableSlug?: TableSlug): TableDef | undefined {\n        const tableDefRow = this.getRowMatchingWords(\n            ExplorerGrammar.table.keyword,\n            undefined,\n            tableSlug\n        )\n        if (tableDefRow === -1) return undefined\n\n        const inlineData = this.getBlock(tableDefRow)\n        let url = inlineData ? undefined : this.lines[tableDefRow][1]\n\n        if (url && !url.includes(\"://\")) {\n            const owidDatasetSlug = encodeURIComponent(url)\n            url = `https://raw.githubusercontent.com/owid/owid-datasets/master/datasets/${owidDatasetSlug}/${owidDatasetSlug}.csv`\n        }\n\n        const columnDefinitions: OwidColumnDef[] | undefined =\n            this.columnDefsByTableSlug.get(tableSlug)\n\n        return {\n            url,\n            columnDefinitions,\n            inlineData,\n            slug: tableSlug,\n        }\n    }\n}\n\nexport const makeFullPath = (slug: string) =>\n    `${EXPLORERS_ROUTE_FOLDER}/${slug}${EXPLORER_FILE_SUFFIX}`\n\nexport const trimAndParseObject = (config: any, grammar: Grammar) => {\n    // Trim empty properties. Prevents things like clearing \"type\" which crashes Grapher. The call to grapher.reset will automatically clear things like title, subtitle, if not set.\n    const trimmedRow = trimObject(config, true) as any\n\n    // parse types\n    Object.keys(trimmedRow).forEach((key) => {\n        const def = grammar[key]\n        if (def?.parse) trimmedRow[key] = def.parse(trimmedRow[key])\n        // If there no definition but it is a boolean, parse it (todo: always have a def)\n        else if (!def) {\n            const value = trimmedRow[key]\n            if (value === GridBoolean.true) trimmedRow[key] = true\n            else if (value === GridBoolean.false) trimmedRow[key] = false\n        }\n    })\n    return trimmedRow\n}\n\nconst parseColumnDefs = (block: string[][]): OwidColumnDef[] => {\n    /**\n     * A column def line can have:\n     * - a column named `variableId`, which contains a variable id\n     * - a column named `slug`, which is the referenced column in its data file\n     *\n     * We want to filter out any rows that contain neither of those, and we also\n     * want to rename `variableId` to `owidVariableId`.\n     */\n    const columnsTable = new CoreTable(block)\n        .appendColumnsIfNew([\n            { slug: \"slug\", type: ColumnTypeNames.String, name: \"slug\" },\n            {\n                slug: \"variableId\",\n                type: ColumnTypeNames.Integer,\n                name: \"variableId\",\n            },\n        ])\n        .renameColumn(\"variableId\", \"owidVariableId\")\n        // Filter out rows that neither have a slug nor an owidVariableId\n        .rowFilter(\n            (row) => !!(row.slug || typeof row.owidVariableId === \"number\"),\n            \"Keep only column defs with a slug or variable id\"\n        )\n\n    return columnsTable.rows.map((row) => {\n        // Ignore the slug if a variable id is given\n        const hasValidVariableId =\n            row.owidVariableId && isNotErrorValue(row.owidVariableId)\n        if (hasValidVariableId && row.slug) delete row.slug\n\n        // Add display properties to the 'display' object\n        for (const field in row) {\n            const cellDef = ColumnGrammar[field]\n            if (\n                cellDef?.isDisplayProperty &&\n                isNotErrorValueOrEmptyCell(row[field]) &&\n                row[field] !== \"\"\n            ) {\n                row.display = row.display || {}\n                row.display[field] = cellDef.parse\n                    ? cellDef.parse(row[field])\n                    : row[field]\n                delete row[field]\n            }\n        }\n\n        return trimAndParseObject(row, ColumnGrammar)\n    })\n}\n","import * as _ from \"lodash-es\"\nimport { legacyToCurrentGrapherUrl } from \"@ourworldindata/grapher\"\nimport { QueryParams, Url } from \"@ourworldindata/utils\"\nimport { EXPLORERS_ROUTE_FOLDER } from \"../ExplorerConstants.js\"\nimport { ExplorerUrlMigrationSpec } from \"./ExplorerUrlMigrations.js\"\n\nconst covidMetricFromLegacyQueryParams = (queryParams: QueryParams) => {\n    if (queryParams.casesMetric) {\n        return \"Confirmed cases\"\n    } else if (queryParams.deathsMetric) {\n        return \"Confirmed deaths\"\n    } else if (queryParams.cfrMetric) {\n        return \"Case fatality rate\"\n    } else if (queryParams.testsMetric) {\n        return \"Tests\"\n    } else if (queryParams.testsPerCaseMetric) {\n        return \"Tests per confirmed case\"\n    } else if (queryParams.positiveTestRate) {\n        return \"Share of positive tests\"\n    } else if (queryParams.vaccinationsMetric) {\n        return \"Vaccinations\"\n    }\n    return undefined\n}\n\nconst legacyIntervalToNewValue = {\n    daily: \"New per day\",\n    weekly: \"Weekly\",\n    total: \"Cumulative\",\n    smoothed: \"7-day rolling average\",\n    biweekly: \"Biweekly\",\n    weeklyChange: \"Weekly change\",\n    biweeklyChange: \"Biweekly change\",\n}\n\nconst covidIntervalFromLegacyQueryParams = (queryParams: QueryParams) => {\n    let legacyInterval: string | undefined = undefined\n\n    // Early on, the query string was a few booleans like dailyFreq=true.\n    // Now it is a single 'interval'. This transformation is for backward compat.\n    if (queryParams.interval) {\n        legacyInterval = queryParams.interval\n    } else if (queryParams.totalFreq) {\n        legacyInterval = \"total\"\n    } else if (queryParams.dailyFreq) {\n        legacyInterval = \"daily\"\n    } else if (queryParams.smoothing) {\n        legacyInterval = \"smoothed\"\n    }\n\n    if (legacyInterval) {\n        return legacyIntervalToNewValue[\n            legacyInterval as keyof typeof legacyIntervalToNewValue\n        ]\n    }\n\n    return undefined\n}\n\nconst boolParamToString = (bool: boolean | string | undefined) =>\n    bool === \"true\" || bool === \"false\" ? bool : bool ? \"true\" : \"false\"\n\nconst legacyToCurrentCovidQueryParams = (\n    queryParams: QueryParams,\n    baseQueryParams: QueryParams = {}\n): QueryParams => {\n    const restQueryParams = _.omit(\n        {\n            ...baseQueryParams,\n            ...queryParams,\n        },\n        \"casesMetric\",\n        \"deathsMetric\",\n        \"cfrMetric\",\n        \"testsMetric\",\n        \"testsPerCaseMetric\",\n        \"positiveTestRate\",\n        \"vaccinationsMetric\",\n        \"interval\",\n        \"smoothing\",\n        \"totalFreq\",\n        \"dailyFreq\",\n        \"aligned\",\n        \"perCapita\"\n    )\n\n    const urlContainsMetric = !!covidMetricFromLegacyQueryParams(queryParams)\n\n    // For the following params, use the modern query param if it exists, otherwise\n    // fall back to trying to convert the legacy one.\n    const explorerQueryParams: QueryParams = {\n        Metric:\n            queryParams.Metric ??\n            baseQueryParams.Metric ??\n            covidMetricFromLegacyQueryParams(queryParams) ??\n            covidMetricFromLegacyQueryParams(baseQueryParams),\n        Interval:\n            queryParams.Interval ??\n            baseQueryParams.Interval ??\n            covidIntervalFromLegacyQueryParams(queryParams) ??\n            covidIntervalFromLegacyQueryParams(baseQueryParams),\n        \"Align outbreaks\": boolParamToString(\n            queryParams[\"Align outbreaks\"] ??\n                baseQueryParams[\"Align outbreaks\"] ??\n                (urlContainsMetric\n                    ? queryParams.aligned\n                    : baseQueryParams.aligned)\n        ),\n        \"Relative to Population\": boolParamToString(\n            queryParams[\"Relative to Population\"] ??\n                baseQueryParams[\"Relative to Population\"] ??\n                (urlContainsMetric\n                    ? queryParams.perCapita\n                    : baseQueryParams.perCapita)\n        ),\n    }\n\n    return {\n        ...restQueryParams,\n        ...explorerQueryParams,\n    }\n}\n\nexport const legacyCovidMigrationSpec: ExplorerUrlMigrationSpec = {\n    explorerSlug: \"covid\",\n    migrateUrl: (url, baseQueryStr) => {\n        // Migrate the Grapher query params in both URLs\n        const [explorerUrl, baseUrl] = [\n            url,\n            Url.fromQueryStr(baseQueryStr),\n        ].map(legacyToCurrentGrapherUrl)\n\n        return explorerUrl\n            .setQueryParams(\n                legacyToCurrentCovidQueryParams(\n                    explorerUrl.queryParams,\n                    baseUrl.queryParams\n                )\n            )\n            .update({\n                pathname: `/${EXPLORERS_ROUTE_FOLDER}/covid`,\n            })\n    },\n}\n","import * as _ from \"lodash-es\"\nimport { Url, QueryParams } from \"@ourworldindata/utils\"\n\nimport { EXPLORERS_ROUTE_FOLDER } from \"../ExplorerConstants.js\"\n\nexport const decodeURIComponentOrUndefined = (value: string | undefined) =>\n    value !== undefined\n        ? decodeURIComponent(value.replace(/\\+/g, \"%20\"))\n        : undefined\n\nexport type QueryParamTransformMap = Record<\n    string,\n    {\n        newName?: string\n        transformValue?: (value: string | undefined) => string | undefined\n    }\n>\n\nexport const transformQueryParams = (\n    oldQueryParams: Readonly<QueryParams>,\n    transformMap: QueryParamTransformMap\n) => {\n    const newQueryParams = _.omit(\n        oldQueryParams,\n        ...Object.keys(transformMap)\n    ) as QueryParams\n    for (const oldParamName in transformMap) {\n        if (!(oldParamName in oldQueryParams)) continue\n        const { newName, transformValue } = transformMap[oldParamName]\n        const name = newName ?? oldParamName\n        const transform = transformValue ?? _.identity\n        newQueryParams[name] = transform(oldQueryParams[oldParamName])\n    }\n    return newQueryParams\n}\n\n// todo(refactor): merge with Url's get explorerSlug()\nexport const getExplorerSlugFromUrl = (url: Url): string | undefined => {\n    if (!url.pathname) return undefined\n    const match = url.pathname.match(\n        new RegExp(`^/+${EXPLORERS_ROUTE_FOLDER}/+([^/]+)`)\n    )\n    return match?.[1] || undefined\n}\n","import { legacyToCurrentGrapherUrl } from \"@ourworldindata/grapher\"\nimport { Url, UrlMigration } from \"@ourworldindata/utils\"\nimport {\n    decodeURIComponentOrUndefined,\n    getExplorerSlugFromUrl,\n    QueryParamTransformMap,\n    transformQueryParams,\n} from \"./ExplorerUrlMigrationUtils.js\"\n\nconst EXPLORER_SLUG = \"co2\"\n\nconst co2QueryParamTransformMap: QueryParamTransformMap = {\n    \"Gas \": {\n        newName: \"Gas\",\n        transformValue: decodeURIComponentOrUndefined,\n    },\n    \"Accounting \": {\n        newName: \"Accounting\",\n        transformValue: decodeURIComponentOrUndefined,\n    },\n    \"Fuel \": {\n        newName: \"Fuel\",\n        transformValue: decodeURIComponentOrUndefined,\n    },\n    \"Count \": {\n        newName: \"Count\",\n        transformValue: decodeURIComponentOrUndefined,\n    },\n    \"Relative to world total \": {\n        newName: \"Relative to world total\",\n        transformValue: (value) => (value ? \"true\" : \"false\"),\n    },\n}\n\nexport const co2UrlMigration: UrlMigration = (url: Url) => {\n    // if it's not the /explorer/co2 path, skip it\n    const explorerSlug = getExplorerSlugFromUrl(url)\n    if (explorerSlug !== EXPLORER_SLUG) return url\n\n    url = legacyToCurrentGrapherUrl(url)\n    const queryParams = transformQueryParams(\n        url.queryParams,\n        co2QueryParamTransformMap\n    )\n    return url.setQueryParams(queryParams)\n}\n","import { legacyToCurrentGrapherUrl } from \"@ourworldindata/grapher\"\nimport { Url, UrlMigration } from \"@ourworldindata/utils\"\nimport {\n    decodeURIComponentOrUndefined,\n    getExplorerSlugFromUrl,\n    QueryParamTransformMap,\n    transformQueryParams,\n} from \"./ExplorerUrlMigrationUtils.js\"\n\nconst EXPLORER_SLUG = \"energy\"\n\nconst energyQueryParamTransformMap: QueryParamTransformMap = {\n    \"Total or Breakdown \": {\n        newName: \"Total or Breakdown\",\n        transformValue: decodeURIComponentOrUndefined,\n    },\n    \"Select a source \": {\n        newName: \"Select a source\",\n        transformValue: decodeURIComponentOrUndefined,\n    },\n    \"Energy or Electricity \": {\n        newName: \"Energy or Electricity\",\n        transformValue: decodeURIComponentOrUndefined,\n    },\n    \"Metric \": {\n        newName: \"Metric\",\n        transformValue: decodeURIComponentOrUndefined,\n    },\n}\n\nexport const energyUrlMigration: UrlMigration = (url: Url) => {\n    // if it's not the /explorer/energy path, skip it\n    const explorerSlug = getExplorerSlugFromUrl(url)\n    if (explorerSlug !== EXPLORER_SLUG) return url\n    url = legacyToCurrentGrapherUrl(url)\n    const queryParams = transformQueryParams(\n        url.queryParams,\n        energyQueryParamTransformMap\n    )\n    return url.setQueryParams(queryParams)\n}\n","import { Url, UrlMigration } from \"@ourworldindata/utils\"\nimport {\n    getExplorerSlugFromUrl,\n    QueryParamTransformMap,\n    transformQueryParams,\n} from \"./ExplorerUrlMigrationUtils.js\"\n\nconst EXPLORER_SLUG = \"coronavirus-data-explorer\"\n\nconst transformMap: QueryParamTransformMap = {\n    Metric: {\n        transformValue: (value) => {\n            // Since we introduced multiple vaccinations metrics, we want to\n            // differentiate between them.\n            // And while we're there, reduce the length of \"Tests per confirmed\n            // case\", because it wraps to 2 lines.\n            //\n            // -@danielgavrilov, 2021-03-30\n            //\n            if (value === \"Vaccinations\") return \"Vaccine doses\"\n            if (value === \"Tests per confirmed case\") return \"Tests per case\"\n            return value\n        },\n    },\n    \"Align outbreaks\": {\n        newName: \"Color by test positivity\",\n    },\n}\n\nexport const covidUrlMigration: UrlMigration = (url: Url) => {\n    // if it's not the /explorer/energy path, skip it\n    const explorerSlug = getExplorerSlugFromUrl(url)\n    if (explorerSlug !== EXPLORER_SLUG) return url\n    return url.setQueryParams(\n        transformQueryParams(url.queryParams, transformMap)\n    )\n}\n","import { Url, UrlMigration, performUrlMigrations } from \"@ourworldindata/utils\"\n\nimport { legacyCovidMigrationSpec } from \"./LegacyCovidUrlMigration.js\"\nimport { co2UrlMigration } from \"./CO2UrlMigration.js\"\nimport { energyUrlMigration } from \"./EnergyUrlMigration.js\"\nimport { covidUrlMigration } from \"./CovidUrlMigration.js\"\n\nexport enum ExplorerUrlMigrationId {\n    legacyToGridCovidExplorer = \"legacyToGridCovidExplorer\",\n}\n\nexport interface ExplorerUrlMigrationSpec {\n    explorerSlug: string\n    migrateUrl: (url: Url, baseQueryStr: string) => Url\n}\n\nexport const explorerUrlMigrationsById: Record<\n    ExplorerUrlMigrationId,\n    ExplorerUrlMigrationSpec\n> = {\n    legacyToGridCovidExplorer: legacyCovidMigrationSpec,\n}\n\nconst explorerUrlMigrations: UrlMigration[] = [\n    // NOTE: The order of migrations matters!\n    co2UrlMigration,\n    energyUrlMigration,\n    covidUrlMigration,\n]\n\nexport const migrateExplorerUrl: UrlMigration = (url: Url): Url => {\n    return performUrlMigrations(explorerUrlMigrations, url)\n}\n","import * as _ from \"lodash-es\"\nimport { faChartLine } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    ArchiveContext,\n    ColumnTypeNames,\n    CoreColumnDef,\n    OwidColumnDef,\n    SortOrder,\n    TableSlug,\n    GrapherInterface,\n    GrapherQueryParams,\n    EntityName,\n    GRAPHER_TAB_QUERY_PARAMS,\n    DimensionProperty,\n} from \"@ourworldindata/types\"\nimport {\n    OwidTable,\n    BlankOwidTable,\n    parseTransformString,\n    TransformParamType,\n} from \"@ourworldindata/core-table\"\nimport {\n    EntityPicker,\n    EntityPickerManager,\n    Grapher,\n    GrapherManager,\n    GrapherProgrammaticInterface,\n    SelectionArray,\n    setSelectedEntityNamesParam,\n    SlideShowController,\n    SlideShowManager,\n    DEFAULT_GRAPHER_ENTITY_TYPE,\n    GrapherAnalytics,\n    GrapherState,\n    fetchInputTableForConfig,\n    FetchInputTableForConfigFn,\n    loadCatalogData,\n} from \"@ourworldindata/grapher\"\nimport {\n    Bounds,\n    ColumnSlug,\n    excludeUndefined,\n    exposeInstanceOnWindow,\n    isInIFrame,\n    keyMap,\n    dimensionsToViewId,\n    merge,\n    mergeGrapherConfigs,\n    omitUndefinedValues,\n    parseIntOrUndefined,\n    PromiseCache,\n    PromiseSwitcher,\n    SerializedGridProgram,\n    setWindowUrl,\n    Tippy,\n    Url,\n} from \"@ourworldindata/utils\"\nimport {\n    MarkdownTextWrap,\n    MarkdownTextWrapHtml,\n} from \"@ourworldindata/components\"\nimport classNames from \"clsx\"\nimport { action, computed, makeObservable, observable, reaction } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport React, { useState, useSyncExternalStore } from \"react\"\nimport { createRoot } from \"react-dom/client\"\nimport { ExplorerControlBar, ExplorerControlPanel } from \"./ExplorerControls.js\"\nimport { ExplorerProgram } from \"./ExplorerProgram.js\"\nimport {\n    ExplorerChartCreationMode,\n    ExplorerChoiceParams,\n    ExplorerContainerId,\n    ExplorerFullQueryParams,\n    EXPLORERS_PREVIEW_ROUTE,\n    EXPLORERS_ROUTE_FOLDER,\n    UNSAVED_EXPLORER_DRAFT,\n    UNSAVED_EXPLORER_PREVIEW_QUERYPARAMS,\n} from \"./ExplorerConstants.js\"\nimport { ExplorerPageUrlMigrationSpec } from \"./urlMigrations/ExplorerPageUrlMigrationSpec.js\"\nimport {\n    explorerUrlMigrationsById,\n    migrateExplorerUrl,\n} from \"./urlMigrations/ExplorerUrlMigrations.js\"\nimport { match } from \"ts-pattern\"\n\nexport interface ExplorerProps extends SerializedGridProgram {\n    grapherConfigs?: GrapherInterface[]\n    partialGrapherConfigs?: GrapherInterface[]\n    chartConfigIdByViewId?: Record<string, string>\n    queryStr?: string\n    isEmbeddedInAnOwidPage?: boolean\n    isInStandalonePage?: boolean\n    isPreview?: boolean\n    selection?: SelectionArray\n    adminBaseUrl: string\n    bakedBaseUrl: string\n    bakedGrapherUrl: string\n    dataApiUrl: string\n    catalogUrl: string\n    bounds?: Bounds\n    staticBounds?: Bounds\n    loadMetadataOnly?: boolean\n    throwOnMissingGrapher?: boolean\n    setupGrapher?: boolean\n    archiveContext?: ArchiveContext\n    loadInputTableForConfig?: FetchInputTableForConfigFn\n}\n\n// The admin writes the unsaved draft to localStorage, possibly from another\n// tab, so poll for changes\nconst subscribeToLocalStoragePolling = (onChange: () => void): (() => void) => {\n    const interval = setInterval(onChange, 1000)\n    return () => clearInterval(interval)\n}\n\nconst LivePreviewComponent = (props: ExplorerProps) => {\n    const [useLocalStorage, setUseLocalStorage] = useState(true)\n    const localStorageProgram = useSyncExternalStore(\n        subscribeToLocalStoragePolling,\n        () => localStorage.getItem(UNSAVED_EXPLORER_DRAFT + props.slug)\n    )\n    const hasLocalStorage = !!localStorageProgram\n    const renderedProgram = useLocalStorage\n        ? (localStorageProgram ?? props.program)\n        : props.program\n\n    const newProps = { ...props, program: renderedProgram }\n\n    return (\n        <>\n            {hasLocalStorage && (\n                <div className=\"admin-only-locally-edited-checkbox\">\n                    <Tippy\n                        content={\n                            <span>\n                                <p>\n                                    <b>Checked</b>: Use the explorer version\n                                    with changes as present in the admin.\n                                </p>\n                                <p>\n                                    <b>Unchecked</b>: Use the currently-saved\n                                    version.\n                                </p>\n                                <hr />\n                                <p>\n                                    Note that some features may only work\n                                    correctly when this checkbox is unchecked:\n                                    in particular, using <kbd>catalogPath</kbd>s\n                                    and <kbd>grapherId</kbd>s and variable IDs.\n                                </p>\n                            </span>\n                        }\n                        placement=\"bottom\"\n                    >\n                        <label>\n                            <input\n                                type=\"checkbox\"\n                                id=\"useLocalStorage\"\n                                onChange={(e) =>\n                                    setUseLocalStorage(e.target.checked)\n                                }\n                                checked={useLocalStorage}\n                            />\n                            Display locally edited explorer\n                        </label>\n                    </Tippy>\n                </div>\n            )}\n            {/* Remount whenever the program changes, since Explorer only reads it on mount */}\n            <Explorer\n                {...newProps}\n                queryStr={window?.location?.search ?? \"\"}\n                key={renderedProgram}\n                isPreview={true}\n            />\n        </>\n    )\n}\n\nconst renderLivePreviewVersion = (props: ExplorerProps) => {\n    const elem = document.getElementById(ExplorerContainerId)\n    if (!elem) throw new Error(\"ExplorerContainerId not found in DOM\")\n    const root = createRoot(elem)\n    root.render(<LivePreviewComponent {...props} />)\n}\n\nconst isNarrow = () =>\n    typeof window === \"undefined\"\n        ? false\n        : window.screen.width < 450 ||\n          document.documentElement.clientWidth <= 800\n\n@observer\nexport class Explorer\n    extends React.Component<ExplorerProps>\n    implements\n        SlideShowManager<ExplorerChoiceParams>,\n        EntityPickerManager,\n        GrapherManager\n{\n    analytics = new GrapherAnalytics()\n    grapherState: GrapherState\n    isOnArchivalPage: boolean\n    inputTableTransformer = (table: OwidTable) => table\n\n    constructor(props: ExplorerProps) {\n        super(props)\n\n        makeObservable<\n            Explorer,\n            | \"isNarrow\"\n            | \"grapherContainerRef\"\n            | \"grapherRef\"\n            | \"showMobileControlsPopup\"\n        >(this, {\n            appendOnlyAvailableEntityNames: observable,\n            grapher: observable.ref,\n            isNarrow: observable,\n            grapherContainerRef: observable,\n            grapherRef: observable.ref,\n            showMobileControlsPopup: observable,\n            entityPickerMetric: observable,\n            entityPickerSort: observable,\n            entityPickerTable: observable.ref,\n            entityPickerTableIsLoading: observable.ref,\n        })\n\n        this.explorerProgram = ExplorerProgram.fromJson(\n            props\n        ).initDecisionMatrix(this.initialQueryParams)\n        const { archiveContext } = props\n        const isOnArchivalPage = archiveContext?.type === \"archive-page\"\n        const assetMaps = isOnArchivalPage ? archiveContext?.assets : undefined\n        this.isOnArchivalPage = isOnArchivalPage\n        this.grapherState = new GrapherState({\n            staticBounds: props.staticBounds,\n            bounds: props.bounds,\n            enableKeyboardShortcuts: this.props.isInStandalonePage,\n            manager: this,\n            isEmbeddedInAnOwidPage: this.props.isEmbeddedInAnOwidPage,\n            adminBaseUrl: this.adminBaseUrl,\n            canHideExternalControlsInEmbed: true,\n            // Iframe embeds are 600px tall when external controls are hidden.\n            // Explorer controls need another 96px, so the embed code we\n            // recommend for explorers with controls is 696px tall.\n            recommendedIframeEmbedHeight: 696,\n            archiveContext: props.archiveContext,\n            additionalDataLoaderFn: (catalogKey) =>\n                loadCatalogData(catalogKey, {\n                    baseUrl: this.props.catalogUrl,\n                    assetMap: assetMaps?.runtime,\n                }),\n        })\n\n        if (props.setupGrapher !== false)\n            this.grapher = new Grapher({ grapherState: this.grapherState })\n    }\n    // caution: do a ctrl+f to find untyped usages\n    static renderSingleExplorerOnExplorerPage(\n        program: ExplorerProps,\n        grapherConfigs: GrapherInterface[],\n        partialGrapherConfigs: GrapherInterface[],\n        chartConfigIdByViewId: Record<string, string> | undefined,\n        explorerConstants: Record<string, string>,\n        urlMigrationSpec?: ExplorerPageUrlMigrationSpec,\n        archiveContext?: ArchiveContext\n    ) {\n        const props: ExplorerProps = {\n            ...program,\n            ...explorerConstants,\n            grapherConfigs,\n            partialGrapherConfigs,\n            isEmbeddedInAnOwidPage: false,\n            isInStandalonePage: true,\n            archiveContext,\n            chartConfigIdByViewId,\n        }\n\n        if (window.location.href.includes(EXPLORERS_PREVIEW_ROUTE)) {\n            renderLivePreviewVersion(props)\n            return\n        }\n\n        let url = Url.fromURL(window.location.href)\n\n        // Handle redirect spec that's baked on the page.\n        // e.g. the old COVID Grapher to Explorer redirects are implemented this way.\n        if (urlMigrationSpec) {\n            const { explorerUrlMigrationId, baseQueryStr } = urlMigrationSpec\n            const migration = explorerUrlMigrationsById[explorerUrlMigrationId]\n            if (migration) {\n                url = migration.migrateUrl(url, baseQueryStr)\n            } else {\n                console.error(\n                    `No explorer URL migration with id ${explorerUrlMigrationId}`\n                )\n            }\n        }\n\n        // Handle explorer-specific migrations.\n        // This is how we migrate the old CO2 explorer to the new CO2 explorer.\n        // Because they are on the same path, we can't handle it like we handle\n        // the COVID explorer redirects above.\n        url = migrateExplorerUrl(url)\n\n        // Update the window URL\n        setWindowUrl(url)\n\n        const elem = document.getElementById(ExplorerContainerId)\n        if (!elem) throw new Error(\"ExplorerContainerId not found in DOM\")\n\n        const root = createRoot(elem)\n        root.render(<Explorer {...props} queryStr={url.queryStr} />)\n    }\n\n    private readonly initialQueryParams = Url.fromQueryStr(\n        this.props.queryStr ?? \"\"\n    ).queryParams as ExplorerFullQueryParams\n\n    explorerProgram = ExplorerProgram.fromJson(this.props).initDecisionMatrix(\n        this.initialQueryParams\n    )\n\n    bakedBaseUrl = this.props.bakedBaseUrl\n    dataApiUrl = this.props.dataApiUrl\n    catalogUrl = this.props.catalogUrl\n    adminBaseUrl = this.props.adminBaseUrl\n    bakedGrapherUrl = this.props.bakedGrapherUrl\n\n    selection = this.props.selection?.hasSelection\n        ? this.props.selection\n        : new SelectionArray(this.explorerProgram.selection)\n\n    entityType = this.explorerProgram.entityType ?? DEFAULT_GRAPHER_ENTITY_TYPE\n\n    // We want to ensure that unavailable entity are shown in the explorer entity\n    // that's why we employ an append-only version of `grapher.availableEntityNames`\n    appendOnlyAvailableEntityNames: Set<EntityName> = new Set()\n\n    grapher: Grapher | undefined = undefined\n\n    @action.bound setGrapher(grapher: Grapher) {\n        this.grapher = grapher\n    }\n\n    @computed get grapherConfigs() {\n        const arr = this.props.grapherConfigs || []\n        return new Map(arr.map((config) => [config.id!, config]))\n    }\n\n    @computed get partialGrapherConfigsByVariableId() {\n        const arr = this.props.partialGrapherConfigs || []\n        return new Map(arr.map((config) => [config.id!, config]))\n    }\n\n    @computed get partialGrapherConfigsBySlug() {\n        const { columnDefsWithoutTableSlug } = this.explorerProgram\n\n        const configsBySlug = new Map<string, GrapherInterface>()\n        for (const columnDef of columnDefsWithoutTableSlug) {\n            if (!columnDef.transform) continue\n\n            const { transformName, params: transformParams = [] } =\n                parseTransformString(columnDef.transform) ?? {}\n            const dataSlugsForTransform = transformParams\n                .filter(({ type }) => type === TransformParamType.DataSlug)\n                .map(({ value }) => value)\n\n            if (transformName === \"duplicate\") {\n                const indicatorId = +dataSlugsForTransform[0]\n                const partialGrapherConfig =\n                    this.partialGrapherConfigsByVariableId.get(indicatorId)\n                if (partialGrapherConfig)\n                    configsBySlug.set(columnDef.slug, partialGrapherConfig)\n            }\n        }\n        return configsBySlug\n    }\n\n    private setUpIntersectionObserver(): void {\n        if (typeof window !== \"undefined\" && \"IntersectionObserver\" in window) {\n            const observer = new IntersectionObserver((entries) => {\n                entries.forEach((entry) => {\n                    if (entry.isIntersecting) {\n                        this.analytics.logExplorerView(\n                            this.explorerProgram.slug,\n                            this.explorerProgram.decisionMatrix.currentParams,\n                            this.getChartConfigIdForCurrentParams()\n                        )\n                        observer.disconnect()\n                    }\n                })\n            })\n            observer.observe(this.grapherContainerRef.current!)\n            this.disposers.push(() => observer.disconnect())\n        }\n    }\n\n    disposers: (() => void)[] = []\n    override async componentDidMount() {\n        this.setGrapher(this.grapherRef.current!)\n\n        let url = Url.fromQueryParams({\n            ...this.initialQueryParams,\n            ...this.currentChoiceParams, // Needed for Grapher's embedArchivedUrl.\n        })\n\n        if (this.props.selection?.hasSelection) {\n            url = setSelectedEntityNamesParam(\n                url,\n                this.props.selection.selectedEntityNames\n            )\n        }\n        // Run the initializiation for the grapherState but don't await it. The update code\n        // will reset and initialize the grapherState and then the data loading will be awaited inside the function.\n        // We don't want to wait for the data loading to finish as we only care about the non-data loading\n        // part to run (the data loading can finish whenever)\n        void this.updateGrapherFromExplorer()\n\n        // Do the rest of the initialization\n        this.grapherState.populateFromQueryParams(url.queryParams)\n        exposeInstanceOnWindow(this, \"explorer\")\n        this.setUpIntersectionObserver()\n        this.attachEventListeners()\n        this.updateEntityPickerTable() // call for the first time to initialize EntityPicker\n    }\n\n    private attachEventListeners() {\n        if (typeof window !== \"undefined\" && \"ResizeObserver\" in window) {\n            const onResizeThrottled = _.debounce(this.onResize, 200, {\n                leading: true,\n            })\n            const resizeObserver = new ResizeObserver(onResizeThrottled)\n            resizeObserver.observe(this.grapherContainerRef.current!)\n            this.disposers.push(() => {\n                resizeObserver.disconnect()\n            })\n        } else if (typeof window === \"object\" && typeof document === \"object\") {\n            // only show the warning when we're in something that roughly resembles a browser\n            console.warn(\n                \"ResizeObserver not available; the explorer will not be responsive to window resizes\"\n            )\n\n            this.onResize() // fire once to initialize, at least\n        }\n\n        // We always prefer the entity picker metric to be sourced from the currently displayed table.\n        // To do this properly, we need to also react to the table changing.\n        this.disposers.push(\n            reaction(\n                () => [\n                    this.entityPickerMetric,\n                    this.explorerProgram.explorerGrapherConfig.tableSlug,\n                ],\n                () => this.updateEntityPickerTable()\n            )\n        )\n\n        this.disposers.push(\n            reaction(\n                () => this.grapherState.availableEntityNames,\n                (availableEntityNames) => {\n                    availableEntityNames?.forEach((entity) =>\n                        this.appendOnlyAvailableEntityNames.add(entity)\n                    )\n                }\n            )\n        )\n\n        if (this.props.isInStandalonePage) this.bindToWindow()\n    }\n\n    override componentWillUnmount() {\n        this.disposers.forEach((dispose) => dispose())\n    }\n\n    private initSlideshow() {\n        if (this.grapherState.slideShow) return\n\n        this.grapherState.slideShow = new SlideShowController(\n            this.explorerProgram.decisionMatrix.allDecisionsAsQueryParams(),\n            0,\n            this\n        )\n    }\n\n    private readonly persistedGrapherQueryParamsBySelectedRow: Map<\n        number,\n        Partial<GrapherQueryParams>\n    > = new Map()\n\n    // todo: break this method up and unit test more. this is pretty ugly right now.\n    @action.bound async reactToUserChangingSelection(oldSelectedRow: number) {\n        if (!this.explorerProgram.currentlySelectedGrapherRow) return\n        this.initSlideshow()\n\n        const oldGrapherParams = this.grapherState.changedParams\n        this.persistedGrapherQueryParamsBySelectedRow.set(\n            oldSelectedRow,\n            oldGrapherParams\n        )\n\n        const newGrapherParams = {\n            ...this.currentChoiceParams, // Needed for Grapher's embedArchivedUrl.\n            ...this.persistedGrapherQueryParamsBySelectedRow.get(\n                this.explorerProgram.currentlySelectedGrapherRow\n            ),\n            country: oldGrapherParams.country,\n            region: oldGrapherParams.region,\n            time: this.grapherState.timeParam,\n        }\n\n        const previousTab = this.grapherState.activeTab\n\n        await this.updateGrapherFromExplorer()\n\n        newGrapherParams.tab =\n            this.grapherState.mapGrapherTabToQueryParam(previousTab)\n\n        // reset map state if switching to a chart\n        if (newGrapherParams.tab !== GRAPHER_TAB_QUERY_PARAMS.map) {\n            newGrapherParams.globe = \"0\"\n            newGrapherParams.mapSelect = \"\"\n        }\n\n        this.grapherState.populateFromQueryParams(newGrapherParams)\n\n        // When switching between explorer views, we usually preserve the tab.\n        // However, if the new chart doesn't support the previously selected tab,\n        // Grapher automatically switches to a supported one. In such cases,\n        // we call adjustStateForTab to make adjustments that ensure the new view\n        // is sensible (e.g. updating the time selection when switching from a\n        // single-time chart like a discrete bar chart to a multi-time chart like\n        // a line chart).\n        const currentTab = this.grapherState.activeTab\n        if (previousTab !== currentTab)\n            this.grapherState.adjustStateForTab(currentTab)\n\n        this.analytics.logExplorerView(\n            this.explorerProgram.slug,\n            this.explorerProgram.decisionMatrix.currentParams,\n            this.getChartConfigIdForCurrentParams()\n        )\n    }\n\n    private getChartConfigIdForCurrentParams() {\n        // We get the params this way to match the logic on the backend.\n        // `this.currentChoiceParams` gives a different result.\n        const decisionMatrix = this.explorerProgram.decisionMatrix\n        const selectedRow = decisionMatrix.table.rowsAt([\n            decisionMatrix.selectedRowIndex,\n        ])[0]\n        if (!selectedRow) return undefined\n        const params = decisionMatrix.getChoiceParamsForRow(selectedRow)\n        const viewId = dimensionsToViewId(params)\n        return this.props.chartConfigIdByViewId?.[viewId]\n    }\n\n    @computed get analyticsContext() {\n        return { viewConfigId: this.getChartConfigIdForCurrentParams() }\n    }\n\n    @action.bound private setGrapherTable(table: OwidTable) {\n        this.grapherState.inputTable = this.inputTableTransformer(table)\n    }\n\n    @computed get availableEntityNames(): EntityName[] {\n        const entityNameSet = this.appendOnlyAvailableEntityNames\n        return Array.from(entityNameSet)\n    }\n\n    @computed private get enableMapSelection(): boolean {\n        return !this.isNarrow\n    }\n\n    private readonly futureGrapherTable = new PromiseSwitcher<OwidTable>({\n        onResolve: (table) => this.setGrapherTable(table),\n        onReject: (error) => this.grapher?.setError(error),\n    })\n\n    tableLoader = new PromiseCache((slug: TableSlug | undefined) =>\n        this.explorerProgram.constructTable(slug)\n    )\n\n    @action.bound async updateGrapherFromExplorer() {\n        switch (this.explorerProgram.chartCreationMode) {\n            case ExplorerChartCreationMode.FromGrapherId:\n                return this.updateGrapherFromExplorerUsingGrapherId()\n            case ExplorerChartCreationMode.FromVariableIds:\n                return this.updateGrapherFromExplorerUsingVariableIds()\n            case ExplorerChartCreationMode.FromExplorerTableColumnSlugs:\n                return this.updateGrapherFromExplorerUsingColumnSlugs()\n        }\n    }\n\n    @action.bound async updateGrapherFromExplorerUsingGrapherId() {\n        const grapherState = this.grapherState\n\n        const { grapherId } = this.explorerProgram.explorerGrapherConfig\n        const grapherConfig = this.grapherConfigs.get(grapherId!)\n        if (!grapherConfig) {\n            if (this.props.throwOnMissingGrapher) {\n                throw new Error(`Grapher config not found for ID: ${grapherId}`)\n            }\n        }\n        const finalGrapherConfig = grapherConfig ?? {}\n\n        const config: GrapherProgrammaticInterface = {\n            ...mergeGrapherConfigs(\n                finalGrapherConfig,\n                this.explorerProgram.grapherConfig\n            ),\n            baseUrl: this.baseUrl,\n            bakedGrapherURL: this.bakedBaseUrl,\n            adminBaseUrl: this.adminBaseUrl,\n            hideEntityControls: this.showExplorerControls,\n            enableMapSelection: this.enableMapSelection,\n        }\n\n        // if not empty, respect the explorer's selection\n        if (this.selection.hasSelection) {\n            config.selectedEntityNames = this.selection.selectedEntityNames\n        }\n\n        grapherState.setAuthoredVersion(config)\n        grapherState.reset()\n        grapherState.inputTable = BlankOwidTable()\n        grapherState.updateFromObject(config)\n        if (!config.table) {\n            const loadFn =\n                this.props.loadInputTableForConfig ?? fetchInputTableForConfig\n            const inputTable = loadFn({\n                dimensions: config.dimensions,\n                selectedEntityColors: config.selectedEntityColors,\n                dataApiUrl: this.props.dataApiUrl,\n                archiveContext: this.props.archiveContext,\n                noCache: this.props.isPreview,\n                loadMetadataOnly: this.props.loadMetadataOnly,\n            }).then((owidTable) => (owidTable ? owidTable : BlankOwidTable()))\n            // We use the PromiseSwitcher here to make sure that only the last\n            // of several user triggered load operations in quick succession\n            // will actually set the table.\n            await this.futureGrapherTable.set(inputTable)\n        } else {\n            grapherState.inputTable = this.inputTableTransformer(config.table)\n        }\n    }\n\n    @action.bound async updateGrapherFromExplorerUsingVariableIds() {\n        const { grapherState } = this\n        const { dimensionsOfSelectedRow, explorerGrapherConfig } =\n            this.explorerProgram\n\n        const variableIdDimensions = dimensionsOfSelectedRow.filter(\n            (dim) => dim.type === \"variableId\"\n        )\n        const slugDimensions = dimensionsOfSelectedRow.filter(\n            (dim) => dim.type === \"slug\"\n        )\n\n        const yVariableIds = excludeUndefined(\n            variableIdDimensions.map((dim) => dim.variableId)\n        )\n        const ySlugs = slugDimensions.map((dim) => dim.slug)\n\n        const partialGrapherConfig =\n            this.partialGrapherConfigsByVariableId.get(yVariableIds[0]) ??\n            // If ySlug references a column that duplicates an indicator via the\n            // `duplicate` transform, make sure the partial grapher config for\n            // that indicator is pulled in\n            this.partialGrapherConfigsBySlug.get(ySlugs[0]) ??\n            {}\n\n        const config: GrapherProgrammaticInterface = {\n            ...mergeGrapherConfigs(\n                partialGrapherConfig,\n                this.explorerProgram.grapherConfig\n            ),\n            bakedGrapherURL: this.bakedBaseUrl,\n            adminBaseUrl: this.adminBaseUrl,\n            hideEntityControls: this.showExplorerControls,\n            enableMapSelection: this.enableMapSelection,\n        }\n\n        // If not empty, respect the explorer's selection\n        if (this.selection.hasSelection) {\n            config.selectedEntityNames = this.selection.selectedEntityNames\n        }\n\n        // Indicator-based explorers support two types of dimensions for creating charts:\n        //\n        // 1. Indicator ID-based dimensions: These reference variables by their numeric IDs.\n        //    We simply add these IDs to the config's dimensions array so Grapher can\n        //    download the corresponding data and metadata.\n        //\n        // 2. Slug-based dimensions: These reference transformed columns defined by transform\n        //    operations like 'multiplyBy 539022 2' or 'duplicate 170775'.\n        //\n        //    To render charts with slug-based dimensions, we need to:\n        //    1. Identify all base variables that the transformed columns depend on\n        //    2. Add these variables to the config's dimensions array for data fetching\n        //    3. Append the transformed columns to the Grapher table\n\n        const getColumnDef = (slug: string) =>\n            this.explorerProgram.getColumnDefWithoutTableSlugByIdOrSlug(slug)\n\n        // Add the given variable IDs to the dimensions array to make Grapher\n        // download the data and metadata for these variables\n        const dimensions = config.dimensions?.slice() ?? []\n        for (const dimension of dimensionsOfSelectedRow) {\n            match(dimension)\n                .with({ type: \"variableId\" }, (dimension) => {\n                    dimensions.push(_.omit(dimension, \"type\"))\n                })\n                .with({ type: \"slug\" }, ({ slug }) => {\n                    const def = getColumnDef(slug)\n                    if (!def) return\n\n                    // Parse the transform string to identify all variable ids\n                    // that the transformed column depends on\n                    const { transformName, params: transformParams = [] } =\n                        parseTransformString(def.transform ?? \"\") ?? {}\n                    const dataSlugsForTransform = transformParams\n                        .filter(\n                            ({ type }) => type === TransformParamType.DataSlug\n                        )\n                        .map(({ value }) => value)\n\n                    // It's safe to assume the extracted data slugs are variable ids\n                    // since indicator-based explorers don't support multi-step transforms\n                    const variableIds =\n                        dataSlugsForTransform\n                            .map((id) => parseIntOrUndefined(id))\n                            .filter((id) => id !== undefined) ?? []\n\n                    for (const variableId of variableIds) {\n                        // Skip if the variable id is already present as a dimension\n                        const dimensionExists = dimensions.some(\n                            (d) => d.variableId === variableId\n                        )\n                        if (dimensionExists) continue\n\n                        if (transformName === \"duplicate\") {\n                            // Use the original DimensionProperty if the column\n                            // has been duplicated from an existing variable\n                            dimensions.push({\n                                variableId: variableId,\n                                property: dimension.property,\n                                display: dimension.display,\n                            })\n                        } else {\n                            // Use DimensionProperty.table to prevent intermediate\n                            // variables from appearing as chart dimensions\n                            dimensions.push({\n                                variableId: variableId,\n                                property: DimensionProperty.table,\n                            })\n                        }\n                    }\n                })\n                .exhaustive()\n        }\n\n        // The ySlugs ultimately determine which dimensions are used as the y-dimensions.\n        // If there are any ySlugs defined, we want to append the variable IDs to them, so\n        // that both the slug-based dimensions and variable ID-based dimensions are plotted\n        // together. The order is arbitrary, but should be left as is for backward compatibility.\n        if (config.ySlugs && explorerGrapherConfig.yVariableIds)\n            config.ySlugs = `${config.ySlugs} ${explorerGrapherConfig.yVariableIds}`\n\n        const indexMap: Record<string, number> = {}\n        const ySlugList = config.ySlugs?.split(\" \") ?? []\n        ySlugList.forEach((slug, index) => (indexMap[slug] = index))\n\n        // Sort dimensions to match the order defined in config.ySlugs\n        config.dimensions = _.sortBy(\n            dimensions,\n            (dim) => indexMap[dim.slug ?? dim.variableId ?? \"\"]\n        )\n\n        this.inputTableTransformer = (table: OwidTable) => {\n            // All slugs specified by the author in the explorer config\n            const slugs = new Set(slugDimensions.map(({ slug }) => slug))\n\n            // Add transformed columns (and the variables they depend on) to the grapher table\n            if (slugs.size > 0) {\n                const baseSlugs = slugs.values().flatMap((slug) => {\n                    const def = getColumnDef(slug)\n                    if (!def?.transform) return []\n                    const { params: transformParams = [] } =\n                        parseTransformString(def.transform ?? \"\") ?? {}\n                    const dataSlugsForTransform = transformParams\n                        .filter(\n                            ({ type }) => type === TransformParamType.DataSlug\n                        )\n                        .map(({ value }) => value)\n                    return dataSlugsForTransform\n                })\n                const allRequiredSlugs = new Set([...baseSlugs, ...slugs])\n                const existingSlugs = new Set(table.columnSlugs)\n                const missingColumnDefs = allRequiredSlugs\n                    .values()\n                    .filter((slug) => !existingSlugs.has(slug))\n                    .map((slug) => getColumnDef(slug))\n                    .filter((def) => def !== undefined)\n                    .toArray()\n                table = table.appendColumns(missingColumnDefs)\n            }\n\n            // Update column definitions with manually provided properties\n            table = table.updateDefs((def: OwidColumnDef) => {\n                const manuallyProvidedDef = getColumnDef(def.slug) ?? {}\n                return merge(def, manuallyProvidedDef)\n            })\n\n            return table\n        }\n\n        grapherState.setAuthoredVersion(config)\n        grapherState.reset()\n        grapherState.updateFromObject(config)\n        if (dimensions.length === 0) {\n            // If dimensions are empty, explicitly set the table to an empty table\n            // so we don't end up confusingly showing stale data from a previous chart\n            grapherState.inputTable = BlankOwidTable()\n        } else {\n            const loadFn =\n                this.props.loadInputTableForConfig ?? fetchInputTableForConfig\n            const inputTable = loadFn({\n                dimensions: config.dimensions,\n                selectedEntityColors: config.selectedEntityColors,\n                archiveContext: this.props.archiveContext,\n                dataApiUrl: this.props.dataApiUrl,\n                noCache: this.props.isPreview,\n                loadMetadataOnly: this.props.loadMetadataOnly,\n            }).then((owidTable) => (owidTable ? owidTable : BlankOwidTable()))\n            // We use the PromiseSwitcher here to make sure that only the last\n            // of several user triggered load operations in quick succession\n            // will actually set the table.\n            await this.futureGrapherTable.set(inputTable)\n        }\n    }\n\n    @action.bound async updateGrapherFromExplorerUsingColumnSlugs() {\n        const grapherState = this.grapherState\n        const { tableSlug } = this.explorerProgram.explorerGrapherConfig\n\n        const config: GrapherProgrammaticInterface = {\n            ...this.explorerProgram.grapherConfig,\n            bakedGrapherURL: this.bakedBaseUrl,\n            adminBaseUrl: this.adminBaseUrl,\n            hideEntityControls: this.showExplorerControls,\n            enableMapSelection: this.enableMapSelection,\n        }\n\n        // if not empty, respect the explorer's selection\n        if (this.selection.hasSelection) {\n            config.selectedEntityNames = this.selection.selectedEntityNames\n        }\n\n        grapherState.setAuthoredVersion(config)\n        grapherState.reset()\n        grapherState.updateFromObject(config)\n\n        // Clear any error messages, they are likely to be related to dataset loading.\n        this.grapher?.clearErrors()\n        // Set a table immediately. A BlankTable shows a loading animation.\n        this.setGrapherTable(\n            BlankOwidTable(tableSlug, `Loading table '${tableSlug}'`)\n        )\n        // We use the PromiseSwitcher here to make sure that only the last\n        // of several user triggered load operations in quick succession\n        // will actually set the table.\n        await this.futureGrapherTable.set(this.tableLoader.get(tableSlug))\n    }\n\n    @action.bound setSlide(choiceParams: ExplorerFullQueryParams) {\n        this.explorerProgram.decisionMatrix.setValuesFromChoiceParams(\n            choiceParams\n        )\n    }\n\n    @computed private get currentChoiceParams(): ExplorerChoiceParams {\n        const { decisionMatrix } = this.explorerProgram\n        return decisionMatrix.toConstrainedOptions()\n    }\n\n    @computed get queryParams(): ExplorerFullQueryParams {\n        if (\n            typeof window !== \"undefined\" &&\n            window.location.href.includes(EXPLORERS_PREVIEW_ROUTE)\n        )\n            localStorage.setItem(\n                UNSAVED_EXPLORER_PREVIEW_QUERYPARAMS +\n                    this.explorerProgram.slug,\n                JSON.stringify(this.currentChoiceParams)\n            )\n\n        let url = Url.fromQueryParams(\n            omitUndefinedValues({\n                ...this.grapherState.changedParams,\n                pickerSort: this.entityPickerSort,\n                pickerMetric: this.entityPickerMetric,\n                hideControls: this.initialQueryParams.hideControls || undefined,\n                ...this.currentChoiceParams,\n            })\n        )\n\n        url = setSelectedEntityNamesParam(\n            url,\n            this.selection.hasSelection\n                ? this.selection.selectedEntityNames\n                : undefined\n        )\n\n        return url.queryParams as ExplorerFullQueryParams\n    }\n\n    @computed get queryStr(): string {\n        return Url.fromQueryParams(this.queryParams).queryStr\n    }\n\n    @computed get currentUrl(): Url {\n        if (this.props.isPreview) return Url.fromQueryParams(this.queryParams)\n        return Url.fromURL(window.location.href).setQueryParams(\n            this.queryParams\n        )\n    }\n\n    private bindToWindow() {\n        // There is a surprisingly considerable performance overhead to updating the url\n        // while animating, so we debounce to allow e.g. smoother timelines\n        const pushParams = () =>\n            setWindowUrl(Url.fromQueryParams(this.queryParams))\n        const debouncedPushParams = _.debounce(pushParams, 100)\n\n        this.disposers.push(\n            reaction(\n                () => this.queryParams,\n                () =>\n                    this.grapher?.debounceMode\n                        ? debouncedPushParams()\n                        : pushParams(),\n                // Fire immediately to update the URL if initial params were\n                // invalid (e.g. an unavailable choice was requested)\n                { fireImmediately: true }\n            )\n        )\n    }\n\n    private get panels() {\n        return this.explorerProgram.decisionMatrix.choicesWithAvailability.map(\n            (choice) => (\n                <ExplorerControlPanel\n                    key={choice.title}\n                    explorerSlug={this.explorerProgram.slug}\n                    choice={choice}\n                    onChange={this.onChangeChoice(choice.title)}\n                    isMobile={this.isNarrow}\n                />\n            )\n        )\n    }\n\n    onChangeChoice = (choiceTitle: string) => async (value: string) => {\n        const { currentlySelectedGrapherRow } = this.explorerProgram\n        this.explorerProgram.decisionMatrix.setValueCommand(choiceTitle, value)\n        if (currentlySelectedGrapherRow)\n            await this.reactToUserChangingSelection(currentlySelectedGrapherRow)\n    }\n\n    private renderHeaderElement() {\n        return (\n            <div className=\"ExplorerHeaderBox\">\n                <div className=\"ExplorerTitle\">\n                    {this.explorerProgram.explorerTitle} Data Explorer\n                </div>\n                <div className=\"ExplorerSubtitle\">\n                    <MarkdownTextWrapHtml\n                        textWrap={\n                            new MarkdownTextWrap({\n                                fontSize: 12,\n                                text:\n                                    this.explorerProgram.explorerSubtitle || \"\",\n                            })\n                        }\n                    />\n                </div>\n                {this.explorerProgram.downloadDataLink && (\n                    <a\n                        href={this.explorerProgram.downloadDataLink}\n                        className=\"ExplorerDownloadLink\"\n                    >\n                        Download this dataset\n                    </a>\n                )}\n            </div>\n        )\n    }\n\n    private isNarrow = isNarrow()\n\n    @computed private get isInIFrame() {\n        return isInIFrame()\n    }\n\n    @computed private get showExplorerControls() {\n        if (!this.props.isEmbeddedInAnOwidPage && !this.isInIFrame) return true\n        // Only allow hiding controls on embedded pages\n        return !(\n            this.explorerProgram.hideControls ||\n            this.initialQueryParams.hideControls === \"true\"\n        )\n    }\n\n    private readonly grapherContainerRef = React.createRef<HTMLDivElement>()\n\n    private readonly grapherRef = React.createRef<Grapher>()\n\n    private renderControlBar() {\n        return (\n            <ExplorerControlBar\n                isMobile={this.isNarrow}\n                showControls={this.showMobileControlsPopup}\n                closeControls={this.closeControls}\n            >\n                {this.panels}\n            </ExplorerControlBar>\n        )\n    }\n\n    private renderEntityPicker() {\n        const selection =\n            this.grapherState.isOnMapTab && this.enableMapSelection\n                ? this.grapherState.mapConfig.selection\n                : this.selection\n\n        return (\n            <EntityPicker\n                key=\"entityPicker\"\n                manager={this}\n                selection={selection}\n                onSelectEntity={this.grapherState.onSelectEntity}\n                onDeselectEntity={this.grapherState.onDeselectEntity}\n                onClearEntities={this.grapherState.onClearEntities}\n                isDropdownMenu={this.isNarrow}\n            />\n        )\n    }\n\n    @action.bound private toggleMobileControls() {\n        this.showMobileControlsPopup = !this.showMobileControlsPopup\n    }\n\n    @action.bound private onResize() {\n        // Don't bother rendering if the container is hidden\n        // see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent\n        if (this.grapherContainerRef.current?.offsetParent === null) return\n\n        const oldIsNarrow = this.isNarrow\n        this.isNarrow = isNarrow()\n        this.updateGrapherBounds()\n\n        // If we changed between narrow and wide mode, we need to wait for CSS changes to kick in\n        // to properly calculate the new grapher bounds\n        if (this.isNarrow !== oldIsNarrow)\n            window.setTimeout(() => this.updateGrapherBounds(), 0)\n    }\n\n    // Todo: add better logic to maximize the size of the Grapher\n    private updateGrapherBounds() {\n        const grapherContainer = this.grapherContainerRef.current\n        if (grapherContainer)\n            this.grapherState.externalBounds = new Bounds(\n                0,\n                0,\n                grapherContainer.clientWidth,\n                grapherContainer.clientHeight\n            )\n    }\n\n    private showMobileControlsPopup = false\n    private get mobileCustomizeButton() {\n        return (\n            <a\n                className=\"btn btn-primary mobile-button\"\n                onClick={this.toggleMobileControls}\n                data-track-note=\"explorer_customize_chart_mobile\"\n            >\n                <FontAwesomeIcon icon={faChartLine} /> Customize chart\n            </a>\n        )\n    }\n\n    @action.bound private closeControls() {\n        this.showMobileControlsPopup = false\n    }\n\n    // todo: add tests for this and better tests for this class in general\n    @computed private get showHeaderElement() {\n        return (\n            this.showExplorerControls &&\n            this.explorerProgram.explorerTitle &&\n            this.panels.length > 0\n        )\n    }\n\n    override render() {\n        const { showExplorerControls, showHeaderElement } = this\n\n        return (\n            <div\n                className={classNames({\n                    Explorer: true,\n                    \"mobile-explorer\": this.isNarrow,\n                    HideControls: !showExplorerControls,\n                    \"is-embed\": this.props.isEmbeddedInAnOwidPage,\n                })}\n            >\n                {showHeaderElement && this.renderHeaderElement()}\n                {showHeaderElement && this.renderControlBar()}\n                {showExplorerControls && this.renderEntityPicker()}\n                {showExplorerControls &&\n                    this.isNarrow &&\n                    this.mobileCustomizeButton}\n                <div className=\"ExplorerFigure\" ref={this.grapherContainerRef}>\n                    <Grapher\n                        ref={this.grapherRef}\n                        grapherState={this.grapherState}\n                    />\n                </div>\n            </div>\n        )\n    }\n\n    @computed get editUrl() {\n        return `${EXPLORERS_ROUTE_FOLDER}/${this.props.slug}`\n    }\n\n    @computed get baseUrl() {\n        let archiveUrl = undefined\n        if (this.isOnArchivalPage) {\n            archiveUrl = this.props.archiveContext?.archiveUrl\n        }\n        return (\n            archiveUrl ??\n            `${this.bakedBaseUrl}/${EXPLORERS_ROUTE_FOLDER}/${this.props.slug}`\n        )\n    }\n\n    @computed get grapherTable() {\n        return this.grapherState?.tableAfterAuthorTimelineAndEntityFilter\n    }\n\n    entityPickerMetric: string | undefined =\n        this.initialQueryParams.pickerMetric\n    entityPickerSort: SortOrder | undefined = this.initialQueryParams.pickerSort\n\n    entityPickerTable: OwidTable | undefined = undefined\n    entityPickerTableIsLoading: boolean = false\n\n    private readonly futureEntityPickerTable = new PromiseSwitcher<OwidTable>({\n        onResolve: (table) => {\n            this.entityPickerTable = table\n            this.entityPickerTableIsLoading = false\n        },\n        onReject: () => {\n            this.entityPickerTableIsLoading = false\n        },\n    })\n\n    private updateEntityPickerTable(): void {\n        // If we don't currently have a entity picker metric, then set pickerTable to the currently-used table anyways,\n        // so that when we start sorting by entity name we can infer that the column is a string column immediately.\n        const tableSlugToLoad = this.entityPickerMetric\n            ? this.getTableSlugOfColumnSlug(this.entityPickerMetric)\n            : this.explorerProgram.explorerGrapherConfig.tableSlug\n\n        this.entityPickerTableIsLoading = true\n        void this.futureEntityPickerTable.set(\n            this.tableLoader.get(tableSlugToLoad)\n        )\n    }\n\n    setEntityPicker({\n        metric,\n        sort,\n    }: {\n        metric: string | undefined\n        sort?: SortOrder\n    }) {\n        this.entityPickerMetric = metric\n        if (sort) this.entityPickerSort = sort\n    }\n\n    private tableSlugHasColumnSlug(\n        tableSlug: TableSlug | undefined,\n        columnSlug: ColumnSlug,\n        columnDefsByTableSlug: Map<TableSlug | undefined, CoreColumnDef[]>\n    ) {\n        return !!columnDefsByTableSlug\n            .get(tableSlug)\n            ?.find((def) => def.slug === columnSlug)\n    }\n\n    private getTableSlugOfColumnSlug(\n        columnSlug: ColumnSlug\n    ): TableSlug | undefined {\n        const columnDefsByTableSlug = this.explorerProgram.columnDefsByTableSlug\n\n        // In most cases, column slugs will be duplicated in the tables, e.g. entityName.\n        // Prefer the current Grapher table if it contains the column slug.\n        const grapherTableSlug =\n            this.explorerProgram.explorerGrapherConfig.tableSlug\n        if (\n            this.tableSlugHasColumnSlug(\n                grapherTableSlug,\n                columnSlug,\n                columnDefsByTableSlug\n            )\n        ) {\n            return grapherTableSlug\n        }\n        // ...otherwise, search all tables for the column slug\n        return this.explorerProgram.tableSlugs.find((tableSlug) =>\n            this.tableSlugHasColumnSlug(\n                tableSlug,\n                columnSlug,\n                columnDefsByTableSlug\n            )\n        )\n    }\n\n    @computed get entityPickerColumnDefs(): CoreColumnDef[] {\n        const allColumnDefs = _.uniqBy(\n            Array.from(\n                this.explorerProgram.columnDefsByTableSlug.values()\n            ).flat(),\n            (def) => def.slug\n        )\n\n        if (this.explorerProgram.pickerColumnSlugs) {\n            const columnDefsBySlug = keyMap(allColumnDefs, (def) => def.slug)\n            // Preserve the order of columns in the Explorer `pickerColumnSlugs`\n            return excludeUndefined(\n                this.explorerProgram.pickerColumnSlugs.map((slug) =>\n                    columnDefsBySlug.get(slug)\n                )\n            )\n        } else {\n            const discardColumnTypes = new Set([\n                ColumnTypeNames.Year,\n                ColumnTypeNames.Decade,\n                ColumnTypeNames.Date,\n                ColumnTypeNames.Day,\n                ColumnTypeNames.Week,\n                ColumnTypeNames.Month,\n                ColumnTypeNames.Quarter,\n                ColumnTypeNames.EntityId,\n                ColumnTypeNames.EntityCode,\n            ])\n            return allColumnDefs.filter(\n                (def) =>\n                    (def.type === undefined ||\n                        !discardColumnTypes.has(def.type)) &&\n                    def.slug !== undefined\n            )\n        }\n    }\n\n    @computed get requiredColumnSlugs() {\n        return this.grapherState?.newSlugs ?? []\n    }\n}\n","import { SelectionArray } from \"@ourworldindata/grapher\"\nimport { Bounds, deserializeJSONFromHTML } from \"@ourworldindata/utils\"\nimport {\n    EMBEDDED_EXPLORER_DELIMITER,\n    EMBEDDED_EXPLORER_GRAPHER_CONFIGS,\n    EMBEDDED_EXPLORER_PARTIAL_GRAPHER_CONFIGS,\n    EMBEDDED_EXPLORER_VIEW_CONFIG_IDS,\n    EXPLORER_CONSTANTS_DELIMITER,\n} from \"./ExplorerConstants.js\"\nimport { ExplorerProps } from \"./Explorer.js\"\n\nexport async function buildExplorerProps(\n    html: string,\n    queryStr: string,\n    selection?: SelectionArray,\n    bounds?: Bounds\n) {\n    const explorerConstants = deserializeJSONFromHTML(\n        html,\n        EXPLORER_CONSTANTS_DELIMITER\n    )\n    let grapherConfigs = deserializeJSONFromHTML(\n        html,\n        EMBEDDED_EXPLORER_GRAPHER_CONFIGS\n    )\n    let partialGrapherConfigs = deserializeJSONFromHTML(\n        html,\n        EMBEDDED_EXPLORER_PARTIAL_GRAPHER_CONFIGS\n    )\n    const chartConfigIdByViewId = deserializeJSONFromHTML(\n        html,\n        EMBEDDED_EXPLORER_VIEW_CONFIG_IDS\n    ) as Record<string, string> | undefined\n    if (Array.isArray(grapherConfigs)) {\n        grapherConfigs = grapherConfigs.map((grapherConfig) => ({\n            ...grapherConfig,\n            adminBaseUrl: explorerConstants.adminBaseUrl,\n            bakedGrapherURL: explorerConstants.bakedGrapherUrl,\n        }))\n    }\n    if (Array.isArray(partialGrapherConfigs)) {\n        partialGrapherConfigs = partialGrapherConfigs.map((grapherConfig) => ({\n            ...grapherConfig,\n            adminBaseUrl: explorerConstants.adminBaseUrl,\n            bakedGrapherURL: explorerConstants.bakedGrapherUrl,\n        }))\n    }\n    const props: ExplorerProps = {\n        ...deserializeJSONFromHTML(html, EMBEDDED_EXPLORER_DELIMITER),\n        isEmbeddedInAnOwidPage: true,\n        adminBaseUrl: explorerConstants.adminBaseUrl,\n        bakedBaseUrl: explorerConstants.bakedBaseUrl,\n        bakedGrapherUrl: explorerConstants.bakedGrapherUrl,\n        dataApiUrl: explorerConstants.dataApiUrl,\n        catalogUrl: explorerConstants.catalogUrl,\n        grapherConfigs,\n        partialGrapherConfigs,\n        chartConfigIdByViewId,\n        queryStr,\n        selection: new SelectionArray(selection?.selectedEntityNames ?? []),\n        bounds: bounds,\n        staticBounds: bounds,\n    }\n    return props\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport {\n    EntityName,\n    GRAPHER_TAB_QUERY_PARAMS,\n    GrapherQueryParams,\n    GrapherTabName,\n    GrapherTabQueryParam,\n    OwidGdocType,\n    TagGraphRoot,\n    TimeBounds,\n    SearchIndexName,\n    Filter,\n    FilterType,\n    ScoredFilter,\n    SearchResultType,\n    SearchTopicType,\n    ChartRecordType,\n    SearchChartHit,\n    SearchUrlParam,\n    LatestUrlParam,\n    SynonymMap,\n    Ngram,\n    WordPositioned,\n    ScoredFilterPositioned,\n} from \"@ourworldindata/types\"\nimport {\n    Url,\n    countriesByName,\n    FuzzySearch,\n    FuzzySearchResult,\n    getAllChildrenOfArea,\n    timeBoundToTimeBoundString,\n    queryParamsToStr,\n    omitUndefinedValues,\n    type SearchFacetAttribute,\n    getFilterNamesOfType,\n    setToFacetFilters,\n    formatDisjunctiveFacetFilters,\n    formatConjunctiveFacetFilters,\n    formatFeaturedMetricFacetFilter,\n    formatCountryFacetFilters,\n    formatTopicFacetFilters,\n} from \"@ourworldindata/utils\"\nimport {\n    generateSelectedEntityNamesParam,\n    isValidTabQueryParam,\n    mapGrapherTabNameToQueryParam,\n} from \"@ourworldindata/grapher\"\nimport { getIndexName } from \"./searchClient.js\"\nimport {\n    faBook,\n    faBookmark,\n    faBullhorn,\n    faDatabase,\n    faFileLines,\n    faFlag,\n    faLightbulb,\n    faTag,\n    IconDefinition,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { match, P } from \"ts-pattern\"\nimport { ForwardedRef } from \"react\"\nimport {\n    BAKED_BASE_URL,\n    BAKED_GRAPHER_URL,\n    EXPLORER_DYNAMIC_CONFIG_URL,\n    EXPLORER_DYNAMIC_THUMBNAIL_URL,\n    GRAPHER_DYNAMIC_CONFIG_URL,\n    GRAPHER_DYNAMIC_THUMBNAIL_URL,\n} from \"../../settings/clientSettings.mjs\"\nimport { EXPLORERS_ROUTE_FOLDER } from \"@ourworldindata/explorer\"\nimport {\n    PreviewVariant,\n    RichDataComponentVariant,\n} from \"./SearchChartHitRichDataTypes.js\"\n\n// Common English stop words that should be ignored in search\nconst STOP_WORDS = new Set([\n    \"the\",\n    \"in\", // matches \"India\"\n    \"is\", // matches \"Israel\"\n    \"of\",\n    \"and\", // matches \"Andorra\"\n    \"a\",\n    \"an\",\n    \"to\",\n    \"for\",\n    \"with\",\n    \"on\",\n    \"at\",\n    \"by\",\n    \"from\",\n    \"per\", // matches \"Peru\"\n    \"vs\",\n])\n\nexport function pickEntitiesForChartHit(\n    hit: SearchChartHit,\n    selectedRegionNames: string[] | undefined\n): EntityName[] {\n    if (!selectedRegionNames) return []\n\n    const availableEntities =\n        hit.originalAvailableEntities ?? hit.availableEntities\n    if (!availableEntities) return []\n\n    // Build intersection of selectedRegionNames and availableEntities, so we\n    // only select entities that are actually present in the chart\n    const filteredEntities = R.intersection(\n        selectedRegionNames,\n        availableEntities\n    )\n\n    // Reverse the order so that the last picked entity is first\n    const sortedEntities = filteredEntities.toReversed()\n\n    return sortedEntities\n}\n\nconst generateGrapherTabQueryParam = ({\n    tab,\n    hasEntities,\n}: {\n    tab?: GrapherTabName | GrapherTabQueryParam\n    hasEntities: boolean\n}) => {\n    if (tab) {\n        return isValidTabQueryParam(tab)\n            ? tab\n            : mapGrapherTabNameToQueryParam(tab)\n    }\n\n    // If we have any entities pre-selected, we want to show the chart tab\n    if (hasEntities) return GRAPHER_TAB_QUERY_PARAMS.chart\n\n    return undefined\n}\n\nconst generateGrapherTimeQueryParam = ({\n    timeBounds,\n    timeMode = \"year\",\n}: {\n    timeBounds: TimeBounds\n    timeMode?: \"year\" | \"day\"\n}) => {\n    return timeBounds\n        .map((time) => timeBoundToTimeBoundString(time, timeMode === \"day\"))\n        .join(\"..\")\n}\n\nexport const getEntityQueryStr = (\n    entities: EntityName[] | null | undefined\n): string => {\n    const hasEntities = !!entities?.length\n\n    const countryParam = hasEntities\n        ? generateSelectedEntityNamesParam(entities)\n        : undefined\n\n    const queryParams = { country: countryParam } satisfies GrapherQueryParams\n\n    const url = Url.fromQueryParams(queryParams)\n\n    return url.queryStr\n}\n\nexport const toGrapherQueryParams = ({\n    entities = [],\n    tab,\n    timeBounds,\n    timeMode = \"year\",\n}: {\n    entities?: EntityName[]\n    tab?: GrapherTabName\n    timeBounds?: TimeBounds\n    timeMode?: \"year\" | \"day\"\n}): GrapherQueryParams => {\n    const hasEntities = entities.length > 0\n    return {\n        tab: generateGrapherTabQueryParam({ tab, hasEntities }),\n        country: hasEntities\n            ? generateSelectedEntityNamesParam(entities)\n            : undefined,\n        time: timeBounds\n            ? generateGrapherTimeQueryParam({ timeBounds, timeMode })\n            : undefined,\n    }\n}\n\nconst generateQueryStrForChartHit = ({\n    hit,\n    grapherParams,\n}: {\n    hit: SearchChartHit\n    grapherParams?: GrapherQueryParams\n}): string => {\n    const isExplorerView = hit.type === ChartRecordType.ExplorerView\n    const isMultiDimView = hit.type === ChartRecordType.MultiDimView\n\n    const viewQueryStr =\n        isExplorerView || isMultiDimView ? hit.queryParams : undefined\n    const grapherQueryStr = grapherParams\n        ? queryParamsToStr(grapherParams)\n        : undefined\n\n    // Remove leading '?' from query strings\n    const queryStrList = [viewQueryStr, grapherQueryStr]\n        .map((queryStr) => queryStr?.replace(/^\\?/, \"\"))\n        .filter((queryStr) => queryStr)\n\n    const queryStr = queryStrList.length > 0 ? \"?\" + queryStrList.join(\"&\") : \"\"\n\n    return queryStr\n}\n\nexport const constructChartUrl = ({\n    hit,\n    grapherParams,\n    overlay,\n}: {\n    hit: SearchChartHit\n    grapherParams?: GrapherQueryParams\n    overlay?: \"sources\" | \"download-data\"\n}): string => {\n    const viewQueryStr = generateQueryStrForChartHit({ hit, grapherParams })\n    const overlayQueryStr = overlay ? `overlay=${overlay}` : \"\"\n    const queryParts = [\n        viewQueryStr?.replace(/^\\?/, \"\"),\n        overlayQueryStr,\n    ].filter((queryStr) => queryStr)\n    const queryStr = queryParts.length > 0 ? `?${queryParts.join(\"&\")}` : \"\"\n\n    const isExplorerView = hit.type === ChartRecordType.ExplorerView\n    const basePath = isExplorerView\n        ? `${BAKED_BASE_URL}/${EXPLORERS_ROUTE_FOLDER}`\n        : BAKED_GRAPHER_URL\n\n    return `${basePath}/${hit.slug}${queryStr}`\n}\n\nexport const constructChartInfoUrl = ({\n    hit,\n    grapherParams,\n}: {\n    hit: SearchChartHit\n    grapherParams?: GrapherQueryParams\n}): string | undefined => {\n    const viewQueryStr = generateQueryStrForChartHit({ hit, grapherParams })\n\n    // Always ignore projected data to ensure that the data display shows a\n    // historical data point\n    const queryStr = viewQueryStr\n        ? `${viewQueryStr}&ignoreProjections`\n        : \"?ignoreProjections\"\n\n    const isExplorerView = hit.type === ChartRecordType.ExplorerView\n    const basePath = isExplorerView\n        ? EXPLORER_DYNAMIC_THUMBNAIL_URL\n        : GRAPHER_DYNAMIC_THUMBNAIL_URL\n\n    return `${basePath}/${hit.slug}.values.json${queryStr}`\n}\n\nexport const constructSearchResultUrl = ({\n    hit,\n    params,\n}: {\n    hit: SearchChartHit\n    params: {\n        version: number\n        variant: RichDataComponentVariant\n        entities?: EntityName[]\n        numDataTableRowsPerColumn?: number\n    }\n}): string | undefined => {\n    const viewQueryStr = generateQueryStrForChartHit({ hit })\n\n    let optionsQueryStr = `version=${params.version}&variant=${params.variant}&ignoreProjections`\n    if (params.entities && params.entities.length > 0)\n        optionsQueryStr += `&entities=${generateSelectedEntityNamesParam(params.entities)}`\n    if (params.numDataTableRowsPerColumn) {\n        optionsQueryStr += `&numDataTableRowsPerColumn=${params.numDataTableRowsPerColumn}`\n    }\n\n    // Combine view and options query strings\n    const queryParts = [\n        viewQueryStr?.replace(/^\\?/, \"\"),\n        optionsQueryStr,\n    ].filter((queryStr) => queryStr)\n    const queryStr = queryParts.length > 0 ? `?${queryParts.join(\"&\")}` : \"\"\n\n    const isExplorerView = hit.type === ChartRecordType.ExplorerView\n    const basePath = isExplorerView\n        ? EXPLORER_DYNAMIC_THUMBNAIL_URL\n        : GRAPHER_DYNAMIC_THUMBNAIL_URL\n\n    return `${basePath}/${hit.slug}.search-result.json${queryStr}`\n}\n\nexport const constructPreviewUrl = ({\n    hit,\n    grapherParams,\n    variant,\n    isMinimal,\n    fontSize,\n    imageWidth,\n    imageHeight,\n}: {\n    hit: SearchChartHit\n    grapherParams?: GrapherQueryParams\n    variant: PreviewVariant\n    isMinimal?: boolean\n    fontSize?: number\n    imageWidth?: number\n    imageHeight?: number\n}): string => {\n    const isExplorerView = hit.type === ChartRecordType.ExplorerView\n\n    const queryStr = generateQueryStrForChartHit({ hit, grapherParams })\n\n    const searchParams = new URLSearchParams(\n        omitUndefinedValues({\n            imType: variant === \"large\" ? \"uncaptioned\" : variant,\n            imMinimal: isMinimal ? \"1\" : \"0\",\n            imFontSize: fontSize?.toString(),\n            imWidth: imageWidth?.toString(),\n            imHeight: imageHeight?.toString(),\n        })\n    )\n    const fullQueryStr = queryStr\n        ? `${queryStr}&${searchParams}`\n        : `?${searchParams}`\n\n    const basePath = isExplorerView\n        ? EXPLORER_DYNAMIC_THUMBNAIL_URL\n        : GRAPHER_DYNAMIC_THUMBNAIL_URL\n\n    return `${basePath}/${hit.slug}.png${fullQueryStr}`\n}\n\nexport const constructConfigUrl = ({\n    hit,\n}: {\n    hit: SearchChartHit\n}): string | undefined => {\n    return match(hit)\n        .with(\n            { type: ChartRecordType.Chart },\n            (hit) => `${GRAPHER_DYNAMIC_CONFIG_URL}/${hit.slug}.config.json`\n        )\n        .with(\n            { type: ChartRecordType.MultiDimView },\n            (hit) =>\n                `${GRAPHER_DYNAMIC_CONFIG_URL}/by-uuid/${hit.chartConfigId}.config.json`\n        )\n        .with({ type: ChartRecordType.ExplorerView }, () => {\n            const queryStr = generateQueryStrForChartHit({ hit })\n            return `${EXPLORER_DYNAMIC_CONFIG_URL}/${hit.slug}.config.json${queryStr}`\n        })\n        .exhaustive()\n}\n\nexport const CHARTS_INDEX = getIndexName(\n    SearchIndexName.ExplorerViewsMdimViewsAndCharts\n)\nexport const PAGES_INDEX = getIndexName(SearchIndexName.Pages)\nexport const PAGES_CHRONOLOGICAL_INDEX = getIndexName(\n    SearchIndexName.PagesChronological\n)\nexport const DATA_CATALOG_ATTRIBUTES = [\n    \"title\",\n    \"containerTitle\",\n    \"slug\",\n    \"availableEntities\",\n    \"originalAvailableEntities\",\n    \"variantName\",\n    \"titleVariant\",\n    \"type\",\n    \"queryParams\",\n    \"availableTabs\",\n    \"subtitle\",\n    \"chartConfigId\",\n    \"explorerType\",\n]\n\n// Re-exported for existing importers; the actual definitions live in\n// @ourworldindata/utils so functions/api/search/searchApi.ts (which can't\n// import from site/) shares them too, keeping Algolia facetFilters identical\n// between the site's search UI and the public /api/search endpoint.\nexport type { SearchFacetAttribute }\nexport {\n    getFilterNamesOfType,\n    setToFacetFilters,\n    formatDisjunctiveFacetFilters,\n    formatConjunctiveFacetFilters,\n    formatFeaturedMetricFacetFilter,\n    formatCountryFacetFilters,\n    formatTopicFacetFilters,\n}\n\nexport function getSelectableTopics(\n    tagGraph: TagGraphRoot,\n    selectedTopic: string | undefined\n): Set<string> {\n    if (!selectedTopic)\n        return new Set(tagGraph.children.map((child) => child.name))\n\n    const area = tagGraph.children.find((child) => child.name === selectedTopic)\n    if (area)\n        return new Set(getAllChildrenOfArea(area).map((node) => node.name))\n\n    return new Set()\n}\n\nexport function serializeSet(set: Set<string>) {\n    return set.size ? [...set].join(\"~\") : undefined\n}\n\nexport function deserializeSet(str: string | null): Set<string> {\n    return str ? new Set(str.split(\"~\")) : new Set()\n}\n\n/**\n * Area names from the shared `?topics=` param (`~`-separated; /search, /latest\n * and /subscribe all read it), dropping names not in `topicAreaNames`.\n */\nexport function topicAreasFromSearchParams<T extends string>(\n    searchParams: URLSearchParams,\n    topicAreaNames: readonly T[]\n): T[] {\n    return [\n        ...deserializeSet(searchParams.get(LatestUrlParam.TOPICS)).intersection(\n            new Set(topicAreaNames)\n        ),\n    ]\n}\n\nexport const getFilterIcon = (filter: Filter) => {\n    return match(filter.type)\n        .with(FilterType.COUNTRY, () => {\n            // Some countries filters might be regions or historical countries,\n            // for which we don't show a flag. By looking for potential region\n            // names in the countries list, we're effectively filtering out\n            // non-country regions.\n            const countryCode = countriesByName()[filter.name]?.code\n            return countryCode ? (\n                <img\n                    className=\"flag\"\n                    aria-hidden={true}\n                    height={12}\n                    width={16}\n                    src={`/images/flags/${countryCode}.svg`}\n                />\n            ) : null\n        })\n        .with(FilterType.TOPIC, () => (\n            <span className=\"icon\">\n                <FontAwesomeIcon icon={faTag} />\n            </span>\n        ))\n        .with(\n            FilterType.DATASET_PRODUCT,\n            FilterType.DATASET_NAMESPACE,\n            FilterType.DATASET_VERSION,\n            FilterType.DATASET_PRODUCER,\n            () => (\n                <span className=\"icon\">\n                    <FontAwesomeIcon icon={faDatabase} />\n                </span>\n            )\n        )\n        .with(FilterType.QUERY, () => null)\n        .exhaustive()\n}\n\n/**\n * A few region names carry a parenthesised disambiguator -- \"Micronesia\n * (country)\", \"Sudan (former)\". It tells a reader which Micronesia is meant; it\n * is not part of the name anyone searches for. Matching it means \"co2 emissions\n * by country\" suggests Micronesia, so a match that lands only inside the\n * parentheses doesn't count.\n */\nfunction matchIsOnlyInsideParentheses(\n    target: string,\n    indexes: readonly number[]\n): boolean {\n    const open = target.indexOf(\"(\")\n    if (open === -1) return false\n    return indexes.every((index) => index >= open)\n}\n\nexport function findTopicAndRegionFilters(\n    words: string[],\n    allRegionsNames: string[],\n    allTopics: string[],\n    selectedRegionNames: Set<string>,\n    selectedTopics: Set<string>,\n    synonymMap: SynonymMap,\n    sortOptions: { threshold: number; limit: number }\n): ScoredFilter[] {\n    const searchTerm = words.join(\" \")\n\n    // A synonym is a rewrite of the query, not a typo of it, so it may only\n    // name a country exactly. Fuzzy matching a synonym against country names\n    // compounds two approximations and produces suggestions like\n    // \"population\" -> \"people\" -> \"Yemen People's Republic\" or\n    // \"price\" -> \"cost\" -> \"Costa Rica\". Country aliases in the synonym map\n    // (\"us\" -> \"united states\") are exact by construction, so they still\n    // match. Topics keep fuzzy matching on synonyms: their synonym groups\n    // exist to widen the net (\"carbon dioxide\" -> \"co2\" -> \"CO2 & Greenhouse\n    // Gas Emissions\").\n    const searchCountryTopics = (\n        term: string,\n        { isSynonym }: { isSynonym: boolean }\n    ) => {\n        const countryFilters: ScoredFilter[] = FuzzySearch.withKey(\n            allRegionsNames,\n            _.identity,\n            isSynonym ? { ...sortOptions, threshold: 1 } : sortOptions\n        )\n            .searchResults(term)\n            .filter(\n                (result: FuzzySearchResult) =>\n                    !selectedRegionNames.has(result.target)\n            )\n            .filter(\n                (result: FuzzySearchResult) =>\n                    !matchIsOnlyInsideParentheses(result.target, result.indexes)\n            )\n            .map((result: FuzzySearchResult) => ({\n                ...createCountryFilter(result.target),\n                score: result.score,\n            }))\n\n        const topicFilters: ScoredFilter[] =\n            selectedTopics.size === 0\n                ? FuzzySearch.withKey(allTopics, (topic) => topic, sortOptions)\n                      .searchResults(term)\n                      .map((result: FuzzySearchResult) => ({\n                          ...createTopicFilter(result.target),\n                          score: result.score,\n                      }))\n                : []\n\n        return [...countryFilters, ...topicFilters]\n    }\n\n    // 1. Perform original search\n    let filters = searchCountryTopics(searchTerm, { isSynonym: false })\n\n    // 2. Search with synonyms\n    const synonyms = synonymMap.get(searchTerm.toLowerCase())\n\n    if (synonyms && synonyms.length > 0) {\n        // Search with each synonym and combine results\n        for (const synonym of synonyms) {\n            const filtersFromSynonym = searchCountryTopics(synonym, {\n                isSynonym: true,\n            })\n            filters.push(...filtersFromSynonym)\n        }\n    }\n\n    // For each filter type, keep only the top results then recombine into a single array\n    filters = R.pipe(\n        filters,\n        R.groupBy((filter) => filter.type),\n        R.values,\n        R.flatMap((filtersOfType: ScoredFilter[]) =>\n            R.pipe(\n                filtersOfType,\n                R.sortBy([R.prop(\"score\"), \"desc\"]),\n                R.uniqueBy((filter) => filter.name),\n                R.take(sortOptions.limit)\n            )\n        )\n    )\n\n    return filters\n}\n\n/**\n * Detects words that are inside quoted phrases and should be excluded from filter matching.\n * Returns a set of word positions that should be ignored.\n */\nfunction getQuotedWordPositions(words: string[]): Set<number> {\n    const quotedPositions = new Set<number>()\n    const parts = words\n        .join(\" \")\n        .split(/(\"[^\"]*\"|\\S+)/)\n        .filter(Boolean)\n\n    let wordIndex = 0\n    for (const part of parts) {\n        if (part.startsWith('\"') && part.endsWith('\"')) {\n            // Count words in the quoted phrase\n            const wordCount = part.split(/\\s+/).filter(Boolean).length\n            for (let i = 0; i < wordCount; i++) {\n                quotedPositions.add(wordIndex + i)\n            }\n            wordIndex += wordCount\n        } else if (part.trim()) {\n            wordIndex++\n        }\n    }\n\n    return quotedPositions\n}\n\n/**\n * Generates autocomplete suggestions for a search query and identifies any unmatched portion of the query.\n *\n * This function uses fuzzy search to match partial query words against country names and topics,\n * filtering out any countries or topics that have already been selected as filters.\n * It progressively tries to match from increasing starting points in the query until it finds matches\n * or reaches the end of the query. This prioritizes matching whole phrases from the beginning, while still\n * allowing for matching just the latter parts of the query if necessary (e.g. \"air pollution\" would match \"Air Pollution\",\n * \"Indoor Air Pollution\" and \"Outdoor Air Pollution\" and prevent the \"pollution\" query from being run;\n * thus not returning \"Lead Pollution\" as a suggestion).\n *\n * **Search Process:**\n * 1. Splitting the query into words\n * 2. Finding the earliest word index where country and/or topic matches can be found using fuzzy search\n * 3. Returning the found matches as Filter objects, sorted with exact matches first\n * 4. Also returning the unmatched portion of the query (words before the match point)\n *\n * The search utilizes the same synonym definitions as Algolia to ensure consistent experiences\n * between Algolia-powered search (homepage autocomplete, nav bar autocomplete, search results) and local fuzzy search (filter autocomplete).\n * This includes bidirectional synonyms from synonym groups (e.g., \"ai\" ↔ \"artificial intelligence\")\n * and unidirectional country alternatives (e.g., \"us\" → \"united states\"). Results from both original\n * and synonym searches are combined, with duplicates removed while preserving the highest scores.\n *\n * **Result Prioritization:**\n * Exact matches (score = 1) are prioritized in the returned suggestions array, followed by\n * the original query (as a query filter), and then partial matches sorted by score descending.\n *\n * **Examples:**\n * - Query \"artificial intelligence\" → also searches for synonyms like \"ai\", \"machine learning\"\n * - Query \"co2 emissions\" → also searches for \"carbon dioxide\", \"c02\"\n * - Query \"us\" → \"us\" gets expanded to \"united states\" for better country matching\n *\n * @returns Object containing suggestion filters and any unmatched query portion\n */\nexport function suggestFiltersFromQuerySuffix(\n    query: string,\n    allRegionNames: string[],\n    allTopics: string[],\n    filters: Filter[], // currently active filters to exclude from suggestions\n    synonymMap: SynonymMap,\n    sortOptions: { threshold: number; limit: number } = {\n        threshold: 0.75,\n        limit: 3,\n    }\n): {\n    suggestions: Filter[]\n    unmatchedQuery: string\n} {\n    const selectedCountryNames = getFilterNamesOfType(\n        filters,\n        FilterType.COUNTRY\n    )\n    const selectedTopics = getFilterNamesOfType(filters, FilterType.TOPIC)\n\n    const queryWords = splitIntoWords(query)\n\n    if (!queryWords.length || queryWords[0] === \"\") {\n        return {\n            suggestions: [],\n            unmatchedQuery: \"\",\n        }\n    }\n\n    let matchedFilters: ScoredFilter[] = []\n    let matchStartIndex = queryWords.length\n\n    for (let i = 0; i < queryWords.length; i++) {\n        const wordsToSearch = queryWords.slice(i)\n        const filters = findTopicAndRegionFilters(\n            wordsToSearch,\n            allRegionNames,\n            allTopics,\n            selectedCountryNames,\n            selectedTopics,\n            synonymMap,\n            sortOptions\n        )\n\n        if (filters.length > 0) {\n            matchedFilters = filters\n            matchStartIndex = i\n            break\n        }\n    }\n\n    const unmatchedQuery = queryWords.slice(0, matchStartIndex).join(\" \")\n\n    const countryMatches = matchedFilters.filter(\n        (f) =>\n            // remove exact matches from country suggestions, as exact matches are\n            // already handled by automatic filters (see applyAutomaticFilters).\n            f.type === FilterType.COUNTRY &&\n            f.score !== 1 &&\n            // we matched on all regions to stop the iteration when a region is\n            // found, and avoid suggesting countries contained in that region's\n            // name (e.g. if \"East Germany\" is found, stop the iteration to\n            // prevent finding \"Germany\"). However, we don't want to pollute the\n            // autocomplete results with historical regions or aggregates, so we\n            // filter them out of the suggestions.\n            countriesByName()[f.name]\n    )\n\n    const topicMatches = matchedFilters.filter(\n        (f) => f.type === FilterType.TOPIC\n    )\n\n    const allMatches = [...countryMatches, ...topicMatches]\n\n    const [exactMatches, partialMatches] = R.partition(\n        allMatches,\n        (item) => item.score === 1\n    )\n\n    const sortedPartialMatches = partialMatches.sort(\n        (a, b) => b.score - a.score\n    )\n\n    const primaryFilters = [\n        exactMatches,\n        ...(query ? [createQueryFilter(query)] : []),\n    ]\n\n    const combinedFilters = [\n        ...(!unmatchedQuery ? primaryFilters : primaryFilters.reverse()).flat(),\n        ...sortedPartialMatches,\n    ]\n\n    return {\n        suggestions: combinedFilters,\n        unmatchedQuery,\n    }\n}\n\n/**\n * Validates whether an n-gram should be used for filter matching.\n * Filters out n-grams that:\n * - Overlap with already matched word positions\n * - Contain quoted words\n * - Start or end with stop words\n */\nconst isNotValidNgram = (\n    ngram: Ngram,\n    quotedWordPositions: Set<number>,\n    matchedWordPositions: Set<number>\n): boolean => {\n    return (\n        ngram.some(\n            ({ position }) =>\n                matchedWordPositions.has(position) ||\n                quotedWordPositions.has(position)\n        ) || hasLeadingTrailingStopWords(ngram)\n    )\n}\n\n/**\n * Generator function that yields n-grams from largest to smallest.)\n */\nfunction* generateNgrams(\n    tokens: WordPositioned[],\n    maxSize: number\n): Generator<Ngram> {\n    for (let n = maxSize; n >= 1; n--) {\n        for (let i = 0; i <= tokens.length - n; i++) {\n            yield tokens.slice(i, i + n)\n        }\n    }\n}\n\n/**\n * Gets filter suggestions using contiguous sequence of words (n-grams) for\n * multi-entity matching in a given query.\n *\n * Where `suggestFiltersFromQuerySuffix` progressively tries to match\n * from increasing starting points in the query and returns a list of possible\n * matches for that position (1 position, multiple matches), this function tries\n * to find the best match for all possible contiguous sequences of words\n * (n-grams) in the query (multiple positions, 1 match per position).\n *\n * Generates n-grams from 1 to 4 non stop-words, non quotes phrases,\n * prioritizing longer phrases over shorter ones. Uses overlap detection to\n * prevent the same word positions from being matched multiple times. Keeps a\n * single country or filter topic per n-gram then deduplicates overall results\n * by name.\n *\n * @returns Array of deduplicated scored filters\n */\nexport function extractFiltersFromQuery(\n    query: string,\n    allRegionNames: string[],\n    allTopics: string[],\n    filters: Filter[], // currently active filters to exclude from suggestions\n    sortOptions: { threshold: number; limit: number },\n    synonymMap: SynonymMap\n): ScoredFilterPositioned[] {\n    if (!query) return []\n\n    const selectedCountryNames = getFilterNamesOfType(\n        filters,\n        FilterType.COUNTRY\n    )\n    const selectedTopics = getFilterNamesOfType(filters, FilterType.TOPIC)\n\n    const allFilters: ScoredFilterPositioned[] = []\n    const matchedWordPositions = new Set<number>()\n\n    const words = splitIntoWords(query)\n\n    // Get positions of words inside quoted phrases\n    const quotedWordPositions = getQuotedWordPositions(words)\n\n    const tokens: WordPositioned[] = words.map((word, index) => ({\n        word,\n        position: index,\n    }))\n\n    const maxNgramSize = Math.min(tokens.length, 4) // Topics and countries mostly fit within 4 words\n\n    // Generate and process n-grams on-the-fly, prioritizing longer phrases\n    for (const ngram of generateNgrams(tokens, maxNgramSize)) {\n        if (isNotValidNgram(ngram, quotedWordPositions, matchedWordPositions)) {\n            continue\n        }\n\n        const ngramWords = ngram.map(R.prop(\"word\"))\n        const ngramPositions = ngram.map(R.prop(\"position\"))\n\n        const filtersFromNgram = findTopicAndRegionFilters(\n            ngramWords,\n            allRegionNames,\n            allTopics,\n            selectedCountryNames,\n            selectedTopics,\n            synonymMap,\n            sortOptions\n        )\n\n        const bestFilter = _.maxBy(filtersFromNgram, (f) => f.score)\n        if (bestFilter) {\n            // Store the original positions for later use in replacement logic\n            allFilters.push({\n                ...bestFilter,\n                positions: ngramPositions,\n            })\n            // Mark these word positions as matched to prevent overlaps\n            ngramPositions.forEach((pos: number) =>\n                matchedWordPositions.add(pos)\n            )\n        }\n    }\n\n    return R.uniqueBy(allFilters, (filter) => filter.name)\n}\n\nexport function createFilter(type: FilterType) {\n    return (name: string): Filter => ({ type, name })\n}\n\nexport const createCountryFilter = createFilter(FilterType.COUNTRY)\nexport const createTopicFilter = createFilter(FilterType.TOPIC)\nexport const createQueryFilter = createFilter(FilterType.QUERY)\nexport const createDatasetProductsFilter = createFilter(\n    FilterType.DATASET_PRODUCT\n)\nexport const createDatasetNamespaceFilter = createFilter(\n    FilterType.DATASET_NAMESPACE\n)\nexport const createDatasetVersionFilter = createFilter(\n    FilterType.DATASET_VERSION\n)\nexport const createDatasetProducerFilter = createFilter(\n    FilterType.DATASET_PRODUCER\n)\n\n/*\n * Type guard to check if a ref is a RefObject with a non-null current property\n */\nexport function isCurrentRef(\n    inputRef: ForwardedRef<HTMLInputElement>\n): inputRef is React.RefObject<HTMLInputElement> {\n    return (\n        inputRef !== null &&\n        typeof inputRef === \"object\" &&\n        \"current\" in inputRef &&\n        inputRef.current !== null\n    )\n}\n\nexport const getSearchAutocompleteId = () => \"search-autocomplete-listbox\"\n\nexport const getSearchAutocompleteItemId = (index: number) =>\n    index >= 0 ? `search-autocomplete-item-${index}` : undefined\n\nexport const buildFilterTestId = (\n    baseTestId: string,\n    filterType: FilterType,\n    filterName: string\n): string => {\n    // Topic names use \" and \" internally but are displayed as \" & \".\n    // See also getTopicFromUrl in search.steps.ts for the same\n    // transformation applied to URL params.\n    const displayName =\n        filterType === FilterType.TOPIC\n            ? filterName.replaceAll(\" and \", \" & \")\n            : filterName\n    return `${baseTestId}-${filterType}-${encodeURIComponent(displayName)}`\n}\n\nexport const getFilterAriaLabel = (\n    filter: Filter,\n    action: \"add\" | \"remove\"\n) => {\n    const actionName = action === \"add\" ? \"Add\" : \"Remove\"\n    const filterTypeLabel = match(filter.type)\n        .with(FilterType.DATASET_PRODUCT, () => \"dataset product\")\n        .with(FilterType.DATASET_NAMESPACE, () => \"dataset namespace\")\n        .with(FilterType.DATASET_VERSION, () => \"dataset version\")\n        .with(FilterType.DATASET_PRODUCER, () => \"dataset producer\")\n        .with(FilterType.COUNTRY, () => \"country\")\n        .with(FilterType.TOPIC, () => \"topic\")\n        .with(FilterType.QUERY, () => \"query\")\n        .exhaustive()\n\n    return match(filter.type)\n        .with(FilterType.QUERY, () => `Search for ${filter.name}`)\n        .with(\n            P.union(\n                FilterType.COUNTRY,\n                FilterType.TOPIC,\n                FilterType.DATASET_PRODUCT,\n                FilterType.DATASET_NAMESPACE,\n                FilterType.DATASET_VERSION,\n                FilterType.DATASET_PRODUCER\n            ),\n            () => `${actionName} ${filter.name} ${filterTypeLabel} filter`\n        )\n        .exhaustive()\n}\n\nexport const isValidResultType = (\n    value: string | undefined\n): value is SearchResultType => {\n    return Object.values(SearchResultType).includes(value as SearchResultType)\n}\n\nexport const getSelectedTopic = (filters: Filter[]): string | undefined => {\n    const selectedTopics = getFilterNamesOfType(filters, FilterType.TOPIC)\n    return selectedTopics.size > 0 ? [...selectedTopics][0] : undefined\n}\n\nexport function getSelectedTopicType(\n    filters: Filter[],\n    areaNames: string[]\n): SearchTopicType | null {\n    const selectedTopic = getSelectedTopic(filters)\n    if (!selectedTopic) return null\n\n    return areaNames.includes(selectedTopic)\n        ? SearchTopicType.Area\n        : SearchTopicType.Topic\n}\n\n/**\n * Checks if the search is in browsing mode, which is defined as having no query\n * and no filters applied.\n */\nexport const isBrowsing = (filters: Filter[], query: string) => {\n    return query.trim() === \"\" && filters.length === 0\n}\n/**\n * Checks if any dataset-related filters are present in the filters array.\n */\nexport const hasDatasetFilters = (filters: Filter[]): boolean => {\n    return filters.some(\n        (filter) =>\n            filter.type === FilterType.DATASET_PRODUCT ||\n            filter.type === FilterType.DATASET_NAMESPACE ||\n            filter.type === FilterType.DATASET_VERSION ||\n            filter.type === FilterType.DATASET_PRODUCER\n    )\n}\n\n/**\n * Computes the effective result type that should be displayed/used in the UI.\n * This respects constraints (e.g., \"all\" is not allowed when browsing) while\n * preserving the user's desired result type in the state.\n */\nexport const getEffectiveResultType = (\n    filters: Filter[],\n    query: string,\n    desiredResultType: SearchResultType\n): SearchResultType => {\n    return hasDatasetFilters(filters)\n        ? SearchResultType.DATA\n        : isBrowsing(filters, query) &&\n            desiredResultType === SearchResultType.ALL\n          ? SearchResultType.DATA\n          : desiredResultType\n}\n\nexport const getUrlParamNameForFilter = (filter: Filter) =>\n    match(filter.type)\n        .with(FilterType.COUNTRY, () => SearchUrlParam.COUNTRY)\n        .with(FilterType.TOPIC, () => SearchUrlParam.TOPIC)\n        .with(FilterType.QUERY, () => SearchUrlParam.QUERY)\n        .with(FilterType.DATASET_PRODUCT, () => SearchUrlParam.DATASET_PRODUCT)\n        .with(\n            FilterType.DATASET_NAMESPACE,\n            () => SearchUrlParam.DATASET_NAMESPACE\n        )\n        .with(FilterType.DATASET_VERSION, () => SearchUrlParam.DATASET_VERSION)\n        .with(\n            FilterType.DATASET_PRODUCER,\n            () => SearchUrlParam.DATASET_PRODUCER\n        )\n        .exhaustive()\n\n/**\n * Builds a fully qualified search URL for the provided autocomplete filter.\n *\n * - add  a `resultType=ALL` parameter to broaden search results beyond the\n *   default data-only view\n * - `COUNTRY` filters include unmatched query terms\n *\n * Examples:\n * - Country filter \"Kenya\" with unmatched query \"emissions\":\n *   \"?country=Kenya&q=emissions&resultType=all\"\n * - Topic filter \"Health\" (unmatched query discarded, if any):\n *   \"?topic=Health&resultType=all\"\n * - Query filter \"outdoor\": \"?q=outdoor&resultType=all\"\n *\n * See also `SearchAutocomplete.tsx` for similar logic in the search page.\n */\nexport const getItemUrlForFilter = (\n    filter: Filter,\n    unmatchedQuery: string\n): string => {\n    const filterParam = {\n        [getUrlParamNameForFilter(filter)]: filter.name,\n        [SearchUrlParam.RESULT_TYPE]: SearchResultType.ALL,\n    }\n\n    const queryParams = match(filter.type)\n        .with(FilterType.COUNTRY, () => ({\n            ...filterParam,\n            ...(unmatchedQuery && {\n                [SearchUrlParam.QUERY]: unmatchedQuery,\n            }),\n        }))\n        .with(\n            FilterType.QUERY,\n            FilterType.TOPIC,\n            FilterType.DATASET_PRODUCT, // only for exhaustiveness, not used in autocomplete\n            FilterType.DATASET_NAMESPACE, // only for exhaustiveness, not used in autocomplete\n            FilterType.DATASET_VERSION, // only for exhaustiveness, not used in autocomplete\n            FilterType.DATASET_PRODUCER, // only for exhaustiveness, not used in autocomplete\n            () => filterParam\n        )\n        .exhaustive()\n\n    return `${BAKED_BASE_URL}${SEARCH_BASE_PATH}${queryParamsToStr(queryParams)}`\n}\n\nexport function getPageTypeNameAndIcon(pageType: OwidGdocType): {\n    name: string\n    icon: IconDefinition\n} {\n    return match(pageType)\n        .with(OwidGdocType.AboutPage, () => ({\n            name: \"About\",\n            icon: faFileLines,\n        }))\n        .with(OwidGdocType.Article, () => ({ name: \"Article\", icon: faBook }))\n        .with(OwidGdocType.DataInsight, () => ({\n            name: \"Data Insight\",\n            icon: faLightbulb,\n        }))\n        .with(OwidGdocType.LinearTopicPage, OwidGdocType.TopicPage, () => ({\n            name: \"Topic page\",\n            icon: faBookmark,\n        }))\n        .with(OwidGdocType.Announcement, () => ({\n            name: \"Announcement\",\n            icon: faBullhorn,\n        }))\n        .with(OwidGdocType.Profile, () => ({\n            name: \"Country Profile\",\n            icon: faFlag,\n        }))\n        .with(\n            OwidGdocType.FeaturedViz, // Not yet indexed\n            OwidGdocType.Author, // Should never be indexed\n            OwidGdocType.Fragment, // Should never be indexed\n            OwidGdocType.Homepage, // Should never be indexed\n            () => ({ name: \"\", icon: faFileLines })\n        )\n        .exhaustive()\n}\nexport const SEARCH_BASE_PATH = \"/search\"\n\nexport const getPaginationOffsetAndLength = (\n    pageParam: number,\n    firstPageSize: number,\n    laterPageSize: number\n) => {\n    const offset =\n        pageParam === 0 ? 0 : firstPageSize + (pageParam - 1) * laterPageSize\n    const length = pageParam === 0 ? firstPageSize : laterPageSize\n    return { offset, length }\n}\n\nexport const getNbPaginatedItemsRequested = (\n    currentPageIndex: number,\n    firstPageSize: number,\n    laterPageSize: number,\n    lastPageHits: number\n) => {\n    return currentPageIndex === 0\n        ? firstPageSize\n        : firstPageSize + (currentPageIndex - 1) * laterPageSize + lastPageHits\n}\n\n/**\n * Helper function to remove matched words and preceding stop words from query\n * when a filter is selected.\n */\nexport function removeMatchedWordsWithStopWords(\n    originalWords: string[],\n    matchedPositions: number[]\n): string {\n    if (!matchedPositions.length) return originalWords.join(\" \")\n\n    const wordsToRemove = new Set(matchedPositions)\n\n    // For each matched position, remove any consecutive stop words that immediately precede it\n    for (const matchedPos of matchedPositions) {\n        // Look backwards from this matched position to remove consecutive preceding stop words\n        for (let i = matchedPos - 1; i >= 0; i--) {\n            const word = originalWords[i].toLowerCase()\n            if (STOP_WORDS.has(word)) {\n                wordsToRemove.add(i)\n            } else {\n                // Stop when we hit a non-stop word\n                break\n            }\n        }\n    }\n\n    return originalWords\n        .filter((_, index) => !wordsToRemove.has(index))\n        .join(\" \")\n}\n\nexport const splitIntoWords = (text: string) => text.trim().split(/\\s+/)\n\nexport const isNotStopWord = (word: string) =>\n    !STOP_WORDS.has(word.toLowerCase())\n\nconst hasLeadingTrailingStopWords = (ngram: Ngram) => {\n    if (ngram.length === 0) return false\n    const firstWord = ngram[0].word.toLowerCase()\n    const lastWord = ngram[ngram.length - 1].word.toLowerCase()\n    return STOP_WORDS.has(firstWord) || STOP_WORDS.has(lastWord)\n}\n","import { useState, useRef, useEffect } from \"react\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faSearch, faCircleXmark } from \"@fortawesome/free-solid-svg-icons\"\nimport { SEARCH_BASE_PATH } from \"./search/searchUtils.js\"\n\nexport default function NotFoundPageForm() {\n    const [searchQuery, setSearchQuery] = useState(\"\")\n    const inputRef = useRef<HTMLInputElement>(null)\n\n    useEffect(() => {\n        // Browser keeps the DOM input value on page refresh.\n        const domValue = inputRef.current?.value\n        if (domValue) setSearchQuery(domValue)\n    }, [])\n\n    return (\n        <form\n            className=\"NotFoundPageForm\"\n            action={SEARCH_BASE_PATH}\n            method=\"GET\"\n        >\n            <input\n                id=\"search_q\"\n                className=\"NotFoundPageForm__input\"\n                ref={inputRef}\n                type=\"search\"\n                placeholder=\"Search...\"\n                name=\"q\"\n                value={searchQuery}\n                onChange={(e) => setSearchQuery(e.target.value)}\n                required\n                autoFocus\n            />\n            {searchQuery && (\n                <button\n                    className=\"NotFoundPageForm__button NotFoundPageForm__reset-button\"\n                    type=\"reset\"\n                    title=\"Clear search\"\n                    onClick={() => setSearchQuery(\"\")}\n                >\n                    <FontAwesomeIcon icon={faCircleXmark} />\n                </button>\n            )}\n            <button\n                className=\"NotFoundPageForm__button NotFoundPageForm__submit-button\"\n                type=\"submit\"\n                title=\"Search\"\n            >\n                <FontAwesomeIcon icon={faSearch} />\n            </button>\n        </form>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport { tinykeys, type KeybindingsMap } from \"tinykeys\"\nimport { setSentryTagsAndAttributes } from \"./SentryUtils.js\"\nimport { GrapherAnalytics, splitPathForGA4 } from \"@ourworldindata/grapher\"\nimport {\n    EventCategory,\n    type SearchChartHit,\n    type SearchState,\n    type FlatArticleHit,\n    type ProfileHit,\n    type TopicPageHit,\n    type DataInsightHit,\n    type StackedArticleHit,\n    FilterType,\n    type LatestState,\n    type LatestPageChronologicalRecord,\n    type UserSurveyExperimentArm,\n    type UserSurveyRoleAnswer,\n} from \"@ourworldindata/types\"\nimport { getFilterNamesOfType } from \"./search/searchUtils.js\"\nimport {\n    EXPERIMENT_PREFIX,\n    LATEST_STICKY_FILTERS_EXPERIMENT_ID,\n    findDOMParent,\n    getExperimentState,\n} from \"@ourworldindata/utils\"\n\n/** The visitor's arm in the /latest sticky filters experiment, attached to\n * the /latest events so they can be split by arm, and read by the feed for\n * the one arm that needs JS. Undefined outside the experiment. */\nexport function getLatestExperimentArm(): string | undefined {\n    return getExperimentState()[\n        `${EXPERIMENT_PREFIX}-${LATEST_STICKY_FILTERS_EXPERIMENT_ID}`\n    ]?.arm\n}\n\nexport class SiteAnalytics extends GrapherAnalytics {\n    logPageNotFoundError(url: string) {\n        this.logToGA({\n            event: EventCategory.SiteError,\n            eventAction: \"not_found\",\n            eventContext: url,\n        })\n    }\n\n    /**\n     * A subscribe request the API rejected, including the 4xx responses that\n     * are kept out of Sentry (an expired captcha token, for instance), so that\n     * real people failing to subscribe show up somewhere. The message is the\n     * API's reader-facing text and carries no address.\n     */\n    logNewsletterSubscribeError(context: string, message: string) {\n        this.logToGA({\n            event: EventCategory.SiteError,\n            eventAction: \"newsletter_subscribe_failed\",\n            eventTarget: `Subscribe [${context}]`,\n            eventContext: message,\n        })\n    }\n\n    logInstantSearchClick({\n        query,\n        url,\n        position,\n        source,\n    }: {\n        query: string\n        url: string\n        position: string\n        /** Where the autocomplete was rendered, e.g. \"topnav\", \"homepage\",\n         * \"datapage\". Lets us distinguish which search bar was used. */\n        source?: string\n    }) {\n        this.logToGA({\n            event: EventCategory.SiteInstantSearchClick,\n            eventAction: \"click\",\n            eventContext: JSON.stringify({ query, position, source }),\n            eventTarget: url,\n        })\n    }\n\n    /** Expand/collapse of a data page metadata toggle. `target` is a codified\n     * id, not the rendered label, so events survive page translation. */\n    logExpandableToggle(target: string, isOpen: boolean): void {\n        this.logSiteClick(\n            isOpen ? \"expand_expandable_toggle\" : \"collapse_expandable_toggle\",\n            target\n        )\n    }\n\n    logDodShown(id: string, location?: string) {\n        this.logToGA({\n            event: EventCategory.DetailOnDemand,\n            eventAction: \"show\",\n            eventTarget: id,\n            ...(location !== undefined && { eventContext: location }),\n        })\n    }\n\n    logLatest(state: LatestState) {\n        this.logToGA({\n            event: EventCategory.SiteLatest,\n            eventAction: \"filter\",\n            latestTopics: state.topics.join(\"~\") || undefined,\n            latestType: state.latestType ?? undefined,\n            experimentArm: getLatestExperimentArm(),\n        })\n    }\n\n    /** Tracks opening a feed preview's own content, not following links within it. */\n    logLatestResultClick(hit: LatestPageChronologicalRecord, position: number) {\n        this.logToGA({\n            event: EventCategory.SiteLatestResultClick,\n            eventAction: \"click\",\n            eventTarget: hit.slug,\n            latestPosition: position,\n            latestType: hit.latestType,\n            experimentArm: getLatestExperimentArm(),\n        })\n    }\n\n    logLatestAnnouncementExpand(\n        hit: LatestPageChronologicalRecord,\n        position: number\n    ) {\n        this.logToGA({\n            event: EventCategory.SiteLatestAnnouncementExpand,\n            eventAction: \"expand\",\n            eventTarget: hit.slug,\n            latestPosition: position,\n            latestType: hit.latestType,\n            experimentArm: getLatestExperimentArm(),\n        })\n    }\n\n    logSearch(state: SearchState) {\n        const topics = Array.from(\n            getFilterNamesOfType(state.filters, FilterType.TOPIC)\n        )\n        const selectedCountryNames = Array.from(\n            getFilterNamesOfType(state.filters, FilterType.COUNTRY)\n        )\n\n        this.logToGA({\n            event: EventCategory.SiteSearch,\n            eventAction: \"search\",\n            searchQuery: state.query || \"\",\n            searchRequireAllCountries: state.requireAllCountries,\n            searchResultType: state.resultType || \"\",\n            searchTopics: topics.join(\"~\"),\n            searchSelectedCountries: selectedCountryNames.join(\"~\"),\n        })\n    }\n\n    logSearchResultClick(\n        hit:\n            | SearchChartHit\n            | FlatArticleHit\n            | ProfileHit\n            | TopicPageHit\n            | DataInsightHit\n            | StackedArticleHit,\n        context: {\n            position: number\n            source: \"ribbon\" | \"search\" // \"ribbons\" are the per-area overview components present on the unparameterized browse pages for writing and data.\n            ribbonTag?: string\n            vizType?: string | null\n        }\n    ) {\n        const eventContext = {\n            ...context,\n            type: hit.type,\n        }\n\n        this.logToGA({\n            event: EventCategory.SiteSearchResultClick,\n            eventAction: \"click\",\n            eventContext: JSON.stringify(eventContext),\n            eventTarget: hit.slug,\n        })\n    }\n\n    logExpanderToggle(id: string, isOpen: boolean) {\n        this.logToGA({\n            event: EventCategory.Expander,\n            eventAction: isOpen ? \"open\" : \"close\",\n            eventTarget: id,\n        })\n    }\n\n    logSearchAutocompleteClick({\n        query,\n        position,\n        filterType,\n        filterName,\n        suggestions,\n        suggestionsTypes,\n        suggestionsCount,\n    }: {\n        query: string\n        position: number\n        filterType: FilterType\n        filterName: string\n        suggestions: string[]\n        suggestionsTypes: FilterType[]\n        suggestionsCount: number\n    }) {\n        this.logToGA({\n            event: EventCategory.SiteSearchAutocompleteClick,\n            eventAction: \"click\",\n            autocompleteQuery: query,\n            autocompletePosition: position,\n            autocompleteFilterType: filterType,\n            autocompleteFilterName: filterName,\n            autocompleteSuggestions: suggestions.join(\"~\"), // not JSON.stringify to avoid broken JSON above 100 character limit\n            autocompleteSuggestionsTypes: suggestionsTypes.join(\"~\"),\n            autocompleteSuggestionsCount: suggestionsCount,\n        })\n    }\n\n    logGuidedChartLinkClick(url: string) {\n        const { path: target, pathNext: targetNext } = splitPathForGA4(url)\n        this.logToGA({\n            event: EventCategory.SiteGuidedChartLinkClick,\n            eventAction: \"click\",\n            eventTarget: target,\n            eventTargetNext: targetNext,\n        })\n    }\n\n    logChartPreviewMouseover(chartUrl: string) {\n        const { path: target, pathNext: targetNext } = splitPathForGA4(chartUrl)\n        this.logToGA({\n            event: EventCategory.SiteChartPreviewMouseover,\n            eventAction: \"mouseover\",\n            eventTarget: target,\n            eventTargetNext: targetNext,\n        })\n    }\n\n    /**\n     * Logs analytics events for static visualization downloads.\n     * @param staticVizName - The unique name identifier of the static viz\n     * @param action - The type of download: 'image_download' for PNG exports,\n     *                 'data_download' for CSV downloads, or 'source_link_click' for external source links\n     * @param context - Optional context such as 'desktop'/'mobile' for images, or the URL for data/source links\n     */\n    logStaticVizDownload(\n        staticVizName: string,\n        action: \"image_download\" | \"data_download\" | \"source_link_click\",\n        context?: string\n    ) {\n        this.logToGA({\n            event: EventCategory.SiteStaticVizDownload,\n            eventAction: action,\n            eventTarget: staticVizName,\n            eventContext: context,\n        })\n    }\n\n    logUserSurveyRoleSubmit(\n        params: UserSurveyRoleAnswer & {\n            surveyName: string\n            responseId: string\n        }\n    ): void {\n        if (params.experimentArm === \"free-form\") {\n            this.logToGA({\n                event: EventCategory.SiteUserSurvey,\n                eventAction: \"user_role_submit\",\n                surveyName: params.surveyName,\n                responseId: params.responseId,\n                experimentArm: \"free-form\",\n                freeFormInput: params.freeFormInput,\n            })\n            return\n        }\n\n        this.logToGA({\n            event: EventCategory.SiteUserSurvey,\n            eventAction: \"user_role_submit\",\n            surveyName: params.surveyName,\n            responseId: params.responseId,\n            experimentArm: params.experimentArm,\n            optionId: params.optionId,\n            optionLabel: params.optionLabel,\n            optionIndex: params.optionIndex,\n            ...(params.freeFormInput !== undefined\n                ? { freeFormInput: params.freeFormInput }\n                : {}),\n        })\n    }\n\n    logUserSurveyRoleShow({\n        surveyName,\n        responseId,\n        experimentArm,\n    }: {\n        surveyName: string\n        responseId: string\n        experimentArm: UserSurveyExperimentArm\n    }): void {\n        this.logToGA({\n            event: EventCategory.SiteUserSurvey,\n            eventAction: \"user_role_show\",\n            surveyName,\n            responseId,\n            experimentArm,\n        })\n    }\n\n    logUserSurveyThankYouShow({\n        surveyName,\n        responseId,\n        experimentArm,\n    }: {\n        surveyName: string\n        responseId: string\n        experimentArm: UserSurveyExperimentArm\n    }): void {\n        this.logToGA({\n            event: EventCategory.SiteUserSurvey,\n            eventAction: \"thank_you_show\",\n            surveyName,\n            responseId,\n            experimentArm,\n        })\n    }\n\n    logUserSurveyFeedbackSubmit({\n        surveyName,\n        responseId,\n        experimentArm,\n    }: {\n        surveyName: string\n        responseId: string\n        experimentArm: UserSurveyExperimentArm\n    }): void {\n        this.logToGA({\n            event: EventCategory.SiteUserSurvey,\n            eventAction: \"feedback_submit\",\n            surveyName,\n            responseId,\n            experimentArm,\n        })\n    }\n\n    logUserSurveyRoleDismiss({\n        surveyName,\n        responseId,\n        experimentArm,\n    }: {\n        surveyName: string\n        responseId: string\n        experimentArm: UserSurveyExperimentArm\n    }): void {\n        this.logToGA({\n            event: EventCategory.SiteUserSurvey,\n            eventAction: \"user_role_dismiss\",\n            surveyName,\n            responseId,\n            experimentArm,\n        })\n    }\n\n    logUserSurveyThankYouDismiss({\n        surveyName,\n        responseId,\n        experimentArm,\n    }: {\n        surveyName: string\n        responseId: string\n        experimentArm: UserSurveyExperimentArm\n    }): void {\n        this.logToGA({\n            event: EventCategory.SiteUserSurvey,\n            eventAction: \"thank_you_dismiss\",\n            surveyName,\n            responseId,\n            experimentArm,\n        })\n    }\n\n    startClickTracking(): void {\n        // we use a data-track-note attr on elements to indicate that clicks on them should be tracked, and what to send\n        const dataTrackAttr = \"data-track-note\"\n        // we set a data-grapher-url attr on grapher charts to indicate the URL of the chart.\n        // this is helpful for tracking clicks on charts that are embedded in articles, where we would like to know\n        // which chart the user is interacting with\n        const dataGrapherUrlAttr = \"data-grapher-url\"\n        document.addEventListener(\n            \"click\",\n            async (ev) => {\n                const targetElement = ev.target as HTMLElement\n                const trackedElement = findDOMParent(\n                    targetElement,\n                    (el: HTMLElement) => el.getAttribute(dataTrackAttr) !== null\n                )\n                if (!trackedElement) return\n                const grapherUrlRaw = trackedElement\n                    .closest(`[${dataGrapherUrlAttr}]`)\n                    ?.getAttribute(dataGrapherUrlAttr)\n                if (grapherUrlRaw) {\n                    let grapherUrlObj:\n                        | {\n                              grapherUrl: string\n                              narrativeChartName: string\n                              viewConfigId?: string\n                          }\n                        | undefined\n                    try {\n                        grapherUrlObj = JSON.parse(grapherUrlRaw)\n                    } catch (e) {\n                        console.warn(\"failed to parse grapherUrl\", e)\n                    }\n                    this.logGrapherClick(\n                        trackedElement.getAttribute(dataTrackAttr) || undefined,\n                        {\n                            label: trackedElement.innerText,\n                            grapherUrl: grapherUrlObj?.grapherUrl,\n                            narrativeChartName:\n                                grapherUrlObj?.narrativeChartName,\n                            viewConfigId: grapherUrlObj?.viewConfigId,\n                        }\n                    )\n                } else\n                    this.logSiteClick(\n                        trackedElement.getAttribute(dataTrackAttr) || undefined,\n                        trackedElement.innerText\n                    )\n            },\n            { capture: true, passive: true }\n        )\n    }\n\n    startPrintTracking(): void {\n        window.addEventListener(\n            \"beforeprint\",\n            () =>\n                this.logToGA({\n                    event: EventCategory.SitePrint,\n                    eventAction: \"beforeprint\",\n                }),\n            { passive: true }\n        )\n    }\n\n    /**\n     * Track use of the browser's own find-in-page (Cmd/Ctrl+F or F3). The\n     * find bar itself is invisible to page scripts, so we log the shortcut\n     * reaching the page, at most once per page view. Misses find opened from\n     * the browser menu, which is how mobile users open it, so treat this as a\n     * desktop signal.\n     *\n     * Returns a function that removes the listener.\n     */\n    startFindInPageTracking(): () => void {\n        const logOpen = (eventContext: \"mod+f\" | \"f3\"): void => {\n            unsubscribe()\n            this.logToGA({\n                event: EventCategory.SiteFindInPage,\n                eventAction: \"open\",\n                eventContext,\n            })\n        }\n\n        // `$mod` is Cmd on Apple platforms and Ctrl elsewhere (on a Mac,\n        // Ctrl+F moves the cursor instead). Handlers must never call\n        // `preventDefault`, so that the find bar opens as usual.\n        const keybindings: KeybindingsMap = {\n            // Latin layouts: the shortcut follows the produced key (on\n            // Dvorak, the physical F key types \"u\", and Cmd+U isn't find)\n            \"$mod+f\": () => logOpen(\"mod+f\"),\n            // Non-Latin layouts (e.g. Cyrillic) produce no Latin letter, and\n            // browsers fall back to the physical key there\n            \"$mod+KeyF\": (ev) => {\n                if (!/^[a-z]$/i.test(ev.key)) logOpen(\"mod+f\")\n            },\n            // F3 is \"find next\"\n            \"[Shift]+F3\": () => logOpen(\"f3\"),\n        }\n\n        const unsubscribe = tinykeys(document, keybindings, {\n            capture: true,\n            // Unlike the default, also count presses inside text fields: the\n            // find bar opens from there too\n            ignore: (ev) => ev.repeat || ev.isComposing,\n        })\n        return unsubscribe\n    }\n\n    private logBrowserTranslationEvent(ctx: {\n        from: string | null\n        to: string | null\n    }) {\n        const browserLanguages =\n            navigator.languages || [navigator.language] || []\n\n        this.logToGA({\n            event: EventCategory.TranslatePage,\n            eventTarget: JSON.stringify(ctx),\n            eventContext: browserLanguages.join(\",\"),\n        })\n    }\n\n    // Add a listener to detect browser translation events\n    startDetectingBrowserTranslation() {\n        const htmlElement = document.documentElement\n        const initialLang = htmlElement.getAttribute(\"lang\")\n\n        const sendTranslationAnalyticsEvent = (\n            prevLang: string | null,\n            newLang: string | null\n        ) => {\n            const ctx = { from: prevLang, to: newLang }\n\n            // eslint-disable-next-line no-console\n            console.info(\"Browser translation detected\", ctx)\n\n            // Deliberately sticky for the rest of the pageview: readers toggle\n            // translation back off again, but a page that was translated once\n            // keeps hitting reconciliation errors afterwards.\n            setSentryTagsAndAttributes({ page_translated: \"true\" })\n            if (newLang && newLang !== initialLang) {\n                setSentryTagsAndAttributes({ page_translated_to: newLang })\n            }\n\n            this.logBrowserTranslationEvent(ctx)\n        }\n\n        // Create a MutationObserver to watch for changes to the HTML which are signposts\n        // of a translation service / browser translation.\n        const observer = new MutationObserver((mutations) => {\n            // Chrome sometimes fires two of the same mutations in a row, so we deduplicate here:\n            const mutationsUniq = _.uniqBy(mutations, (m) =>\n                [m.attributeName, m.oldValue].join(\"-\")\n            )\n\n            mutationsUniq.forEach((mutation) => {\n                if (!mutation.attributeName) return\n\n                const target = mutation.target as HTMLElement\n                const newValue = target.getAttribute(mutation.attributeName)\n\n                let prevLang: string | null = null,\n                    newLang: string | null = null\n\n                if (\n                    mutation.type === \"attributes\" &&\n                    mutation.attributeName === \"lang\"\n                ) {\n                    newLang = newValue\n                    prevLang = mutation.oldValue\n\n                    if (prevLang === newLang) {\n                        // In Safari, it sometimes happens that we receive mutations that don't change the lang attribute\n                        return\n                    }\n\n                    sendTranslationAnalyticsEvent(prevLang, newLang)\n                } else if (\n                    mutation.type === \"attributes\" &&\n                    mutation.attributeName === \"_msthash\"\n                ) {\n                    if (mutation.oldValue === null) {\n                        prevLang = initialLang\n                    } else if (newValue === null) {\n                        newLang = initialLang\n                    } else {\n                        // Don't handle events where both old and new values are non-null - this might mean that the title changed and was re-translated\n                        return\n                    }\n\n                    sendTranslationAnalyticsEvent(prevLang, newLang)\n                }\n            })\n        })\n\n        // Observe <html lang=\"...\">, which is changed by most browser translation services\n        observer.observe(htmlElement, {\n            attributes: true,\n            attributeFilter: [\"lang\"],\n            attributeOldValue: true,\n        })\n\n        // Observe <title _msthash=\"...\">, which is changed by Microsoft Edge translation\n        const titleElement = document.head.querySelector(\"title\")\n        if (titleElement) {\n            observer.observe(titleElement, {\n                attributes: true,\n                attributeFilter: [\"_msthash\"],\n                attributeOldValue: true,\n            })\n        }\n    }\n}\n","import { hydrateRoot } from \"react-dom/client\"\nimport NotFoundPageForm from \"./NotFoundPageForm.js\"\nimport { SiteAnalytics } from \"./SiteAnalytics.js\"\n\nconst analytics = new SiteAnalytics()\n\nexport function runNotFoundPage() {\n    analytics.logPageNotFoundError(window.location.href)\n    const container = document.getElementById(\"not-found-page-form\")\n    if (!container) return\n    hydrateRoot(container, <NotFoundPageForm />)\n}\n","import type { IconDefinition } from \"@fortawesome/fontawesome-svg-core\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { Tippy } from \"@ourworldindata/utils\"\n\n/**\n * Icon-only button used by the floating site tools.\n * `label` provides both the accessible name and the tooltip text.\n * Set `tooltip={false}` for close buttons, which only need the accessible name.\n *\n * Pass `href` for a tool that navigates somewhere instead of opening a popover.\n */\nexport const SiteToolsButton = ({\n    icon,\n    label,\n    tooltip = true,\n    onClick,\n    href,\n    dataTrackNote,\n}: {\n    icon: IconDefinition\n    label: string\n    tooltip?: boolean\n    onClick?: () => void\n    href?: string\n    dataTrackNote?: string\n}) => {\n    const content = <FontAwesomeIcon icon={icon} />\n\n    const button =\n        href !== undefined ? (\n            <a\n                aria-label={label}\n                className=\"site-tools__button\"\n                data-track-note={dataTrackNote}\n                href={href}\n            >\n                {content}\n            </a>\n        ) : (\n            <button\n                aria-label={label}\n                className=\"site-tools__button\"\n                data-track-note={dataTrackNote}\n                onClick={onClick}\n            >\n                {content}\n            </button>\n        )\n\n    if (!tooltip) return button\n\n    return (\n        <Tippy\n            content={label}\n            theme=\"site-tools\"\n            placement=\"top\"\n            // Keeps the tooltip anchored to the button as it moves with the\n            // sticky container while scrolling.\n            appendTo=\"parent\"\n            delay={[200, 0]}\n        >\n            {button}\n        </Tippy>\n    )\n}\n","import * as React from \"react\"\nimport { observer } from \"mobx-react\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faCommentAlt,\n    faTimes,\n    faPaperPlane,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { observable, action, toJS, computed, makeObservable } from \"mobx\"\nimport classnames from \"clsx\"\nimport { BAKED_BASE_URL } from \"../settings/clientSettings.mjs\"\nimport { stringifyUnknownError } from \"@ourworldindata/utils\"\nimport { SiteToolsButton } from \"./SiteToolsButton.js\"\n\nconst sendFeedback = async (feedback: Feedback) => {\n    const json = {\n        ...toJS(feedback),\n        environment: `Current URL: ${window.location.href}\\nUser Agent: ${navigator.userAgent}\\nViewport: ${window.innerWidth}x${window.innerHeight}`,\n    }\n\n    return await fetch(\"https://feedback.owid.io\", {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json;charset=UTF-8\" },\n        body: JSON.stringify(json),\n    }).then((res) => {\n        if (!res.ok)\n            throw new Error(\n                `Sending feedback failed: ${res.status} ${res.statusText}`\n            )\n    })\n}\n\nclass Feedback {\n    name: string = \"\"\n    email: string = \"\"\n    message: string = \"\"\n    environment: string = \"\"\n\n    constructor() {\n        makeObservable(this, {\n            name: observable,\n            email: observable,\n            message: observable,\n        })\n    }\n\n    @action.bound clear() {\n        this.name = \"\"\n        this.email = \"\"\n        this.message = \"\"\n    }\n}\n\nconst vaccinationRegex = /vaccination|vaccine|doses|vaccinat/i\nconst licensingRegex = /license|licence|licensing|copyright|permission|permit/i\nconst citationRegex = /cite|citation|citing|reference/i\nconst translateRegex = /translat/i\nconst fundingRegex = /\\b(fund|funds|funding|funded|funder)\\b/i\nconst reusingChartsRegex = /(use|reuse|using|reusing)\\s+(chart|image|picture)/i\nconst reusingDataRegex =\n    /(use|reuse|using|reusing|utilize|utilizing|utilise|utilising)\\s+data/i\nconst visualizationToolRegex =\n    /grapher|grapher\\s+reusability|(use|reuse|using|reusing)\\s+grapher|data\\s+viz\\s+tool|data\\s+visuali[sz]ation\\s+tool|visuali[sz]ation\\s+software/i\nconst logoRegex = /logo/i\nconst teachingRegex = /teach|teaching|teacher|teachers/i\n\nenum SpecialFeedbackTopic {\n    Vaccination,\n    Licensing,\n    Citation,\n    Translation,\n    Funding,\n    ReusingCharts,\n    ReusingData,\n    VisualizationTool,\n    Logo,\n    Teaching,\n}\n\ninterface SpecialTopicMatcher {\n    regex: RegExp\n    topic: SpecialFeedbackTopic\n}\n\nconst topicMatchers: SpecialTopicMatcher[] = [\n    { regex: vaccinationRegex, topic: SpecialFeedbackTopic.Vaccination },\n    { regex: licensingRegex, topic: SpecialFeedbackTopic.Licensing },\n    { regex: citationRegex, topic: SpecialFeedbackTopic.Citation },\n    { regex: translateRegex, topic: SpecialFeedbackTopic.Translation },\n    { regex: fundingRegex, topic: SpecialFeedbackTopic.Funding },\n    { regex: reusingChartsRegex, topic: SpecialFeedbackTopic.ReusingCharts },\n    {\n        regex: visualizationToolRegex,\n        topic: SpecialFeedbackTopic.VisualizationTool,\n    },\n    { regex: reusingDataRegex, topic: SpecialFeedbackTopic.ReusingData },\n    { regex: logoRegex, topic: SpecialFeedbackTopic.Logo },\n    { regex: teachingRegex, topic: SpecialFeedbackTopic.Teaching },\n]\n\nconst vaccineNotice = (\n    <a\n        key=\"vaccineNotice\"\n        href={`${BAKED_BASE_URL}/covid-vaccinations#frequently-asked-questions`}\n        target=\"_blank\"\n        rel=\"noopener\"\n    >\n        COVID-19 vaccine questions\n    </a>\n)\n\nconst copyrightNotice = (\n    <a\n        key=\"copyrightNotice\"\n        href={`${BAKED_BASE_URL}/faqs#can-i-reuse-or-republish-your-charts`}\n        target=\"_blank\"\n        rel=\"noopener\"\n    >\n        Copyright questions\n    </a>\n)\nconst citationNotice = (\n    <a\n        key=\"citationNotice\"\n        href={`${BAKED_BASE_URL}/faqs#how-should-i-cite-your-charts`}\n        target=\"_blank\"\n        rel=\"noopener\"\n    >\n        How to cite our work\n    </a>\n)\nconst translateNotice = (\n    <a\n        key=\"translateNotice\"\n        href={`${BAKED_BASE_URL}/faqs#can-i-translate-your-work-into-another-language`}\n        target=\"_blank\"\n        rel=\"noopener\"\n    >\n        Translating our work\n    </a>\n)\nconst fundingNotice = (\n    <a\n        key=\"fundingNotice\"\n        href={`${BAKED_BASE_URL}/faqs#how-are-you-funded`}\n        target=\"_blank\"\n        rel=\"noopener\"\n    >\n        How are you funded?\n    </a>\n)\nconst reusingChartsNotice = (\n    <a\n        key=\"reusingChartsNotice\"\n        href={`${BAKED_BASE_URL}/faqs#can-i-reuse-or-republish-your-charts`}\n        target=\"_blank\"\n        rel=\"noopener\"\n    >\n        Reusing our charts\n    </a>\n)\nconst reusingDataNotice = (\n    <a\n        key=\"reusingDataNotice\"\n        href={`${BAKED_BASE_URL}/faqs#can-i-reuse-or-republish-your-data`}\n        target=\"_blank\"\n        rel=\"noopener\"\n    >\n        Reusing our data\n    </a>\n)\nconst visualizationToolNotice = (\n    <a\n        key=\"visualizationToolNotice\"\n        href={`${BAKED_BASE_URL}/faqs#what-software-do-you-use-for-your-visualizations-and-can-i-use-it`}\n        target=\"_blank\"\n        rel=\"noopener\"\n    >\n        Our visualization tool\n    </a>\n)\nconst logoNotice = (\n    <a\n        key=\"logoNotice\"\n        href={`${BAKED_BASE_URL}/faqs#can-i-use-the-our-world-in-data-name-or-logo`}\n        target=\"_blank\"\n        rel=\"noopener\"\n    >\n        Can I use your logo?\n    </a>\n)\nconst teachingNotice = (\n    <a\n        key=\"teachingNotice\"\n        href={`${BAKED_BASE_URL}/faqs#can-i-use-your-work-for-teaching`}\n        target=\"_blank\"\n        rel=\"noopener\"\n    >\n        Teaching with OWID\n    </a>\n)\n\nconst topicNotices = new Map<SpecialFeedbackTopic, React.ReactElement>([\n    [SpecialFeedbackTopic.Vaccination, vaccineNotice],\n    [SpecialFeedbackTopic.Citation, citationNotice],\n    [SpecialFeedbackTopic.Licensing, copyrightNotice],\n    [SpecialFeedbackTopic.Translation, translateNotice],\n    [SpecialFeedbackTopic.Funding, fundingNotice],\n    [SpecialFeedbackTopic.ReusingCharts, reusingChartsNotice],\n    [SpecialFeedbackTopic.ReusingData, reusingDataNotice],\n    [SpecialFeedbackTopic.VisualizationTool, visualizationToolNotice],\n    [SpecialFeedbackTopic.Logo, logoNotice],\n    [SpecialFeedbackTopic.Teaching, teachingNotice],\n])\n\ninterface FeedbackFormProps {\n    onClose?: () => void\n    autofocus?: boolean\n}\n\n@observer\nexport class FeedbackForm extends React.Component<FeedbackFormProps> {\n    feedback: Feedback = new Feedback()\n    loading: boolean = false\n    done: boolean = false\n    error: string | undefined\n\n    constructor(props: FeedbackFormProps) {\n        super(props)\n\n        makeObservable(this, {\n            loading: observable,\n            done: observable,\n            error: observable,\n        })\n    }\n\n    async submit() {\n        try {\n            await sendFeedback(this.feedback)\n            this.feedback.clear()\n            this.done = true\n        } catch (err) {\n            this.error = stringifyUnknownError(err)\n        } finally {\n            this.loading = false\n        }\n    }\n\n    @action.bound onSubmit(e: React.SubmitEvent<HTMLFormElement>) {\n        e.preventDefault()\n        this.done = false\n        this.error = undefined\n        this.loading = true\n        void this.submit()\n    }\n\n    @action.bound onName(e: React.ChangeEvent<HTMLInputElement>) {\n        this.feedback.name = e.currentTarget.value\n    }\n\n    @action.bound onEmail(e: React.ChangeEvent<HTMLInputElement>) {\n        this.feedback.email = e.currentTarget.value\n    }\n\n    @action.bound onMessage(e: React.ChangeEvent<HTMLTextAreaElement>) {\n        this.feedback.message = e.currentTarget.value\n    }\n\n    @action.bound onClose() {\n        if (this.props.onClose) {\n            this.props.onClose()\n        }\n        // Clear the form after closing, in case the user has a 2nd message to send later.\n        this.done = false\n    }\n\n    @computed private get specialTopic(): SpecialFeedbackTopic | undefined {\n        const { message } = this.feedback\n        return topicMatchers.find((matcher) => matcher.regex.test(message))\n            ?.topic\n    }\n\n    renderBody() {\n        const { loading, done, specialTopic } = this\n        const autofocus = this.props.autofocus ?? true\n\n        if (done) {\n            return (\n                <div className=\"doneMessage\">\n                    <div className=\"icon\">\n                        <FontAwesomeIcon icon={faPaperPlane} />\n                    </div>\n                    <div className=\"message\">\n                        <h3>Thank you for your feedback</h3>\n                        <p>\n                            We read all feedback, but due to a high volume of\n                            messages we are not able to reply to all.\n                        </p>\n                    </div>\n                    <div aria-label=\"Close feedback form\" className=\"actions\">\n                        <button onClick={this.onClose}>Close</button>\n                    </div>\n                </div>\n            )\n        }\n\n        const notices =\n            specialTopic !== undefined\n                ? topicNotices.get(specialTopic)\n                : undefined\n        return (\n            <React.Fragment>\n                <div className=\"header\">Leave us feedback</div>\n                <div className=\"notice\">\n                    <p>\n                        <strong>Have a question?</strong> You may find an answer\n                        in{\" \"}\n                        <a\n                            href={`${BAKED_BASE_URL}/faqs`}\n                            target=\"_blank\"\n                            rel=\"noopener\"\n                        >\n                            <strong>FAQs</strong>\n                        </a>\n                        .\n                    </p>\n                </div>\n                <div className=\"formBody\">\n                    <div className=\"formSection formSectionExpand\">\n                        <label htmlFor=\"feedback.message\">Message</label>\n                        <textarea\n                            id=\"feedback.message\"\n                            className=\"sentry-mask\"\n                            onChange={this.onMessage}\n                            rows={5}\n                            minLength={30}\n                            required\n                            disabled={loading}\n                        />\n                        {notices ? (\n                            <div className=\"topic-notice\">\n                                Your question may be answered in{\" \"}\n                                <strong>{notices}</strong>.\n                            </div>\n                        ) : null}\n                    </div>\n                    <div className=\"formSection\">\n                        <label htmlFor=\"feedback.name\">Your name</label>\n                        <input\n                            id=\"feedback.name\"\n                            className=\"sentry-mask\"\n                            onChange={this.onName}\n                            autoFocus={autofocus}\n                            disabled={loading}\n                        />\n                    </div>\n                    <div className=\"formSection\">\n                        <label htmlFor=\"feedback.email\">Email address</label>\n                        <input\n                            id=\"feedback.email\"\n                            className=\"sentry-mask\"\n                            onChange={this.onEmail}\n                            type=\"email\"\n                            disabled={loading}\n                        />\n                        <small className=\"form-text text-muted\">\n                            Your name and email will only be used to reply to\n                            you and not for any other purpose. If you do not\n                            give a valid email, we will not be able to reply to\n                            you.\n                        </small>\n                    </div>\n                    {this.error ? (\n                        <div style={{ color: \"red\" }}>{this.error}</div>\n                    ) : undefined}\n                    {this.done ? (\n                        <div style={{ color: \"green\" }}>\n                            Thanks for your feedback!\n                        </div>\n                    ) : undefined}\n                </div>\n                <div className=\"footer\">\n                    <button\n                        aria-label=\"Submit feedback\"\n                        type=\"submit\"\n                        disabled={loading}\n                    >\n                        Send message\n                    </button>\n                </div>\n            </React.Fragment>\n        )\n    }\n\n    override render() {\n        return (\n            <form\n                className={classnames(\"FeedbackForm\", {\n                    loading: this.loading,\n                })}\n                onSubmit={this.onSubmit}\n            >\n                {this.renderBody()}\n            </form>\n        )\n    }\n}\n\n@observer\nexport class FeedbackPrompt extends React.Component {\n    isOpen: boolean = false\n\n    constructor(props: Record<string, never>) {\n        super(props)\n\n        makeObservable(this, {\n            isOpen: observable,\n        })\n    }\n\n    @action.bound toggleOpen() {\n        this.isOpen = !this.isOpen\n    }\n\n    @action.bound onClose() {\n        this.isOpen = false\n    }\n\n    @action.bound onClickOutside() {\n        this.onClose()\n    }\n\n    override render() {\n        return (\n            <div\n                className={`feedbackPromptContainer${\n                    this.isOpen ? \" active\" : \"\"\n                }`}\n            >\n                {/* We are keeping the form always rendered to avoid wiping all contents\n                when a user accidentally closes the form */}\n                <div style={{ display: this.isOpen ? \"block\" : \"none\" }}>\n                    <div className=\"overlay\" onClick={this.onClickOutside} />\n                    <div className=\"box\">\n                        <FeedbackForm onClose={this.onClose} />\n                    </div>\n                </div>\n                {this.isOpen ? (\n                    <SiteToolsButton\n                        icon={faTimes}\n                        label=\"Close feedback form\"\n                        tooltip={false}\n                        onClick={this.toggleOpen}\n                    />\n                ) : (\n                    <SiteToolsButton\n                        icon={faCommentAlt}\n                        label=\"Feedback\"\n                        dataTrackNote=\"page_open_feedback\"\n                        onClick={this.toggleOpen}\n                    />\n                )}\n            </div>\n        )\n    }\n}\n","import { createRoot } from \"react-dom/client\"\nimport { FeedbackForm } from \"./Feedback.js\"\n\nexport function runFeedbackPage() {\n    const elem = document.querySelector(\".FeedbackPage main\")\n    if (!elem) throw new Error(\"FeedbackPage main element not found in DOM\")\n\n    const root = createRoot(elem)\n    root.render(\n        <div className=\"box\">\n            <FeedbackForm />\n        </div>\n    )\n}\n","'use client';\nimport{forwardRef as e,useCallback as t,useEffect as n,useImperativeHandle as r,useMemo as i,useRef as a,useState as o}from\"react\";import{jsx as s}from\"react/jsx-runtime\";var c=e(({as:e=`div`,...t},n)=>s(e,{...t,ref:n}));const l=`https://challenges.cloudflare.com/turnstile/v0/api.js`,u=`cf-turnstile-script`,d=`cf-turnstile`,f=`onloadTurnstileCallback`,p=e=>!!document.getElementById(e),m=({render:e=`explicit`,onLoadCallbackName:t=f,scriptOptions:{nonce:n=``,defer:r=!0,async:i=!0,id:a=``,appendTo:o,onError:s,crossOrigin:c=``}={}})=>{let u=a||`cf-turnstile-script`;if(p(u))return;let d=document.createElement(`script`);d.id=u,d.src=`${l}?onload=${t}&render=${e}`,!document.querySelector(`script[src=\"${d.src}\"]`)&&(d.defer=!!r,d.async=!!i,n&&(d.nonce=n),c&&(d.crossOrigin=c),s&&(d.onerror=s,delete window[t]),(o===`body`?document.body:document.getElementsByTagName(`head`)[0]).appendChild(d))},h={normal:{width:300,height:65},compact:{width:150,height:140},invisible:{width:0,height:0,overflow:`hidden`},flexible:{minWidth:300,width:`100%`,height:65},interactionOnly:{width:`fit-content`,height:`auto`,display:`flex`}};function g(e){if(e!==`invisible`&&e!==`interactionOnly`)return e}function _(e=u){let[t,r]=o(!1);return n(()=>{let t=()=>{p(e)&&r(!0)},n=new MutationObserver(t);return n.observe(document,{childList:!0,subtree:!0}),t(),()=>{n.disconnect()}},[e]),t}let v=`unloaded`,y;const b=new Promise((e,t)=>{y={resolve:e,reject:t},v===`ready`&&e(void 0)}),x=(e=f)=>(v===`unloaded`&&(v=`loading`,window[e]=()=>{y.resolve(),v=`ready`,delete window[e]}),b),S=e((e,l)=>{let{scriptOptions:u,options:d={},siteKey:f,onWidgetLoad:p,onSuccess:y,onExpire:b,onError:S,onBeforeInteractive:C,onAfterInteractive:w,onUnsupported:T,onTimeout:E,onLoadScript:D,id:O,style:k,as:A=`div`,injectScript:j=!0,rerenderOnCallbackChange:M=!1,...N}=e,P=d.size,F=t(()=>P===void 0?{}:d.execution===`execute`?h.invisible:d.appearance===`interaction-only`?h.interactionOnly:h[P],[d.execution,P,d.appearance]),[I,L]=o(F()),R=a(null),[z,B]=o(!1),V=a(void 0),H=a(!1),U=O||`cf-turnstile`,W=a({onSuccess:y,onError:S,onExpire:b,onBeforeInteractive:C,onAfterInteractive:w,onUnsupported:T,onTimeout:E});n(()=>{M||(W.current={onSuccess:y,onError:S,onExpire:b,onBeforeInteractive:C,onAfterInteractive:w,onUnsupported:T,onTimeout:E})});let G=u?.id||`cf-turnstile-script`,K=_(G),q=u?.onLoadCallbackName||`onloadTurnstileCallback`,J=d.appearance||`always`,Y=i(()=>({sitekey:f,action:d.action,cData:d.cData,theme:d.theme||`auto`,language:d.language||`auto`,tabindex:d.tabIndex,\"response-field\":d.responseField,\"response-field-name\":d.responseFieldName,size:g(P),retry:d.retry||`auto`,\"retry-interval\":d.retryInterval||8e3,\"refresh-expired\":d.refreshExpired||`auto`,\"refresh-timeout\":d.refreshTimeout||`auto`,execution:d.execution||`render`,appearance:d.appearance||`always`,\"feedback-enabled\":d.feedbackEnabled??!0,callback:e=>{H.current=!0,M?y?.(e):W.current.onSuccess?.(e)},\"error-callback\":M?S:(...e)=>W.current.onError?.(...e),\"expired-callback\":M?b:(...e)=>W.current.onExpire?.(...e),\"before-interactive-callback\":M?C:(...e)=>W.current.onBeforeInteractive?.(...e),\"after-interactive-callback\":M?w:(...e)=>W.current.onAfterInteractive?.(...e),\"unsupported-callback\":M?T:(...e)=>W.current.onUnsupported?.(...e),\"timeout-callback\":M?E:(...e)=>W.current.onTimeout?.(...e)}),[d.action,d.appearance,d.cData,d.execution,d.language,d.refreshExpired,d.responseField,d.responseFieldName,d.retry,d.retryInterval,d.tabIndex,d.theme,d.feedbackEnabled,d.refreshTimeout,f,P,M,M?y:null,M?S:null,M?b:null,M?C:null,M?w:null,M?T:null,M?E:null]),X=t(()=>typeof window<`u`&&!!window.turnstile,[]);return n(function(){j&&!z&&(x(q),m({onLoadCallbackName:q,scriptOptions:{...u,id:G}}))},[j,z,u,G,q]),n(function(){v!==`ready`&&x(q).then(()=>B(!0)).catch(console.error)},[q]),n(function(){if(!R.current||!z)return;let e=!1;return(async()=>{e||!R.current||(V.current=window.turnstile.render(R.current,Y),V.current&&p?.(V.current))})(),()=>{e=!0,V.current&&(window.turnstile.remove(V.current),H.current=!1)}},[U,z,Y]),r(l,()=>{let{turnstile:e}=window;return{getResponse(){if(!e?.getResponse||!V.current||!X()){console.warn(`Turnstile has not been loaded`);return}return e.getResponse(V.current)},async getResponsePromise(e=3e4,t=100){return new Promise((n,r)=>{let i,a=async()=>{if(H.current&&window.turnstile&&V.current)try{let e=window.turnstile.getResponse(V.current);return i&&clearTimeout(i),e?n(e):r(Error(`No response received`))}catch(e){return i&&clearTimeout(i),console.warn(`Failed to get response`,e),r(Error(`Failed to get response`))}i||=setTimeout(()=>{i&&clearTimeout(i),r(Error(`Timeout`))},e),await new Promise(e=>setTimeout(e,t)),await a()};a()})},reset(){if(!e?.reset||!V.current||!X()){console.warn(`Turnstile has not been loaded`);return}d.execution===`execute`&&L(h.invisible);try{H.current=!1,e.reset(V.current)}catch(e){console.warn(`Failed to reset Turnstile widget ${V.current}`,e)}},remove(){if(!e?.remove||!V.current||!X()){console.warn(`Turnstile has not been loaded`);return}L(h.invisible),H.current=!1,e.remove(V.current),V.current=null},render(){if(!e?.render||!R.current||!X()||V.current){console.warn(`Turnstile has not been loaded or container not found`);return}let t=e.render(R.current,Y);return V.current=t,V.current&&p?.(V.current),d.execution!==`execute`&&L(P?h[P]:{}),t},execute(){if(d.execution!==`execute`){console.warn(`Execution mode is not set to \"execute\"`);return}if(!e?.execute||!R.current||!V.current||!X()){console.warn(`Turnstile has not been loaded or container not found`);return}e.execute(R.current),L(P?h[P]:{})},isExpired(){return!e?.isExpired||!V.current||!X()?(console.warn(`Turnstile has not been loaded`),!1):e.isExpired(V.current)}}},[V,d.execution,P,Y,R,X,z,p]),n(()=>{if(z||!K)return;if(window.turnstile){B(!0);return}let e=setInterval(()=>{window.turnstile&&(B(!0),clearInterval(e))},50);return()=>{clearInterval(e)}},[z,K]),n(()=>{L(F())},[d.execution,P,J]),n(()=>{!K||typeof D!=`function`||D()},[K]),s(c,{ref:R,as:A,id:U,style:{...I,...k},...N})});S.displayName=`Turnstile`;export{d as DEFAULT_CONTAINER_ID,f as DEFAULT_ONLOAD_NAME,u as DEFAULT_SCRIPT_ID,l as SCRIPT_URL,S as Turnstile};","import * as React from \"react\"\nimport { Turnstile } from \"@marsidev/react-turnstile\"\nimport * as Sentry from \"@sentry/react\"\nimport cx from \"clsx\"\nimport { observable, action, computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    bind,\n    Tippy,\n    stringifyUnknownError,\n    titleCase,\n    DonationCurrencyCode,\n    DonationInterval,\n    DonationRequest,\n    getErrorMessageDonation,\n    SUPPORTED_CURRENCY_CODES,\n    getCurrencySymbol,\n    DonateSessionResponse,\n    PLEASE_GET_IN_TOUCH,\n    PLEASE_TRY_AGAIN,\n} from \"@ourworldindata/utils\"\nimport {\n    DONATE_API_URL,\n    BAKED_BASE_URL,\n    TURNSTILE_SITE_KEY,\n} from \"../settings/clientSettings.mjs\"\nimport { Checkbox } from \"@ourworldindata/components\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faArrowRight, faInfoCircle } from \"@fortawesome/free-solid-svg-icons\"\nimport { SiteAnalytics } from \"./SiteAnalytics.js\"\n\nconst DEFAULT_AMOUNT_INDEX = 2\nconst TURNSTILE_SENTRY_ERROR_CODES = [110100, 110110, 110200]\n\nconst amountsByInterval = {\n    once: [20, 50, 100, 500, 1000],\n    monthly: [5, 10, 25, 50, 100],\n    annual: [50, 100, 500, 1000, 5000],\n} as const\n\nconst analytics = new SiteAnalytics()\n\nfunction EveryOrgSection({\n    buttonVariant,\n}: {\n    buttonVariant: \"primary\" | \"secondary\"\n}) {\n    return (\n        <div className=\"donation-payment\">\n            <p className=\"donation-payment__or\">\n                For US donors, our partner every.org facilitates tax-deductible\n                giving and offers more payment options.\n            </p>\n            <a\n                href=\"https://www.every.org/ourworldindata?donateTo=ourworldindata#/donate/card\"\n                className={cx(\"donation-submit\", {\n                    \"donation-submit--light\": buttonVariant === \"secondary\",\n                })}\n            >\n                Donate via every.org\n                <FontAwesomeIcon\n                    icon={faArrowRight}\n                    className=\"donation-submit__icon\"\n                />\n            </a>\n\n            <ul className=\"donation-payment-benefits\">\n                <li className=\"donation-payment-benefits__item\">\n                    🇺🇸 Your donation is tax-deductible in the US{\" \"}\n                    <Tippy\n                        appendTo={() => document.body}\n                        content={\n                            <div>\n                                <p>\n                                    Your donation is made to Every.org, a\n                                    tax-exempt US 501(c)(3) charity that grants\n                                    unrestricted funds to Our World in Data on\n                                    your behalf. This means that if you are a US\n                                    taxpayer, 100% of your donation is\n                                    tax-deductible to the extent allowed by US\n                                    law.\n                                </p>\n                                <p>\n                                    After your donation payment is confirmed by\n                                    Every.org, you will immediately get a\n                                    tax-deductible receipt emailed to you.\n                                </p>\n                            </div>\n                        }\n                        interactive\n                        placement=\"bottom\"\n                        theme=\"owid-footnote\"\n                        trigger=\"mouseenter focus click\"\n                    >\n                        <FontAwesomeIcon icon={faInfoCircle} />\n                    </Tippy>\n                </li>\n                <li className=\"donation-payment-benefits__item\">\n                    You can donate in US dollars using PayPal, Venmo, direct US\n                    bank transfer (ACH), credit card and more\n                </li>\n                <li className=\"donation-payment-benefits__item\">\n                    You can use this option for donor-advised fund (DAF) grants\n                </li>\n                <li className=\"donation-payment-benefits__item\">\n                    You can include your name on our public list of donors\n                </li>\n            </ul>\n        </div>\n    )\n}\n\n@observer\nexport class DonateForm extends React.Component<{ countryCode?: string }> {\n    interval: DonationInterval = \"once\"\n    presetAmount: number | undefined =\n        amountsByInterval.once[DEFAULT_AMOUNT_INDEX]\n    customAmount: string = \"\"\n    name: string = \"\"\n    showOnList: boolean = true\n    subscribeToDonorNewsletter: boolean = true\n    captchaToken: string | undefined = undefined\n    errorMessage: string | undefined = undefined\n    isSubmitting: boolean = false\n    currencyCode: DonationCurrencyCode = \"GBP\"\n\n    constructor(props: { countryCode?: string }) {\n        super(props)\n\n        makeObservable(this, {\n            interval: observable,\n            presetAmount: observable,\n            customAmount: observable,\n            name: observable,\n            showOnList: observable,\n            subscribeToDonorNewsletter: observable,\n            captchaToken: observable,\n            errorMessage: observable,\n            isSubmitting: observable,\n            currencyCode: observable,\n        })\n    }\n\n    @action.bound setInterval(interval: DonationInterval) {\n        this.interval = interval\n        this.presetAmount = this.intervalAmounts[DEFAULT_AMOUNT_INDEX]\n    }\n\n    @action.bound setPresetAmount(amount?: number) {\n        this.presetAmount = amount\n        this.customAmount = \"\"\n        this.errorMessage = undefined\n    }\n\n    @action.bound setCustomAmount(amount: string) {\n        this.customAmount = amount\n        this.presetAmount = undefined\n        this.errorMessage = undefined\n    }\n\n    @action.bound setName(name: string) {\n        // capitalize first letter of each word. Words can be separated by\n        // spaces or hyphens.\n        this.name = titleCase(name)\n        this.errorMessage = undefined\n    }\n\n    @action.bound toggleShowOnList() {\n        this.showOnList = !this.showOnList\n        this.errorMessage = undefined\n    }\n\n    @action.bound toggleSubscribeToDonorNewsletter() {\n        this.subscribeToDonorNewsletter = !this.subscribeToDonorNewsletter\n    }\n\n    @action.bound setErrorMessage(message?: string) {\n        this.errorMessage = message\n    }\n\n    @action.bound setIsSubmitting(isSubmitting: boolean) {\n        this.isSubmitting = isSubmitting\n    }\n\n    @action.bound setCurrency(currency: DonationCurrencyCode) {\n        this.currencyCode = currency\n    }\n\n    @computed get amount(): number | undefined {\n        return this.customAmount\n            ? parseFloat(this.customAmount)\n            : this.presetAmount\n    }\n\n    @computed get intervalAmounts() {\n        return amountsByInterval[this.interval]\n    }\n\n    @computed get currencySymbol(): string {\n        return getCurrencySymbol(this.currencyCode)\n    }\n\n    @computed get isUsa(): boolean {\n        return this.props.countryCode === \"USA\"\n    }\n\n    async submitDonation(): Promise<void> {\n        const requestBodyForClientSideValidation: DonationRequest = {\n            // Don't send the name if the reader doesn't want to appear on the\n            // list of supporters, but keep it in the form in case they change\n            // their mind.\n            name: this.showOnList ? this.name : \"\",\n            showOnList: this.showOnList,\n            subscribeToDonorNewsletter: this.subscribeToDonorNewsletter,\n            currency: this.currencyCode,\n            amount: this.amount,\n            interval: this.interval,\n            successUrl: `${BAKED_BASE_URL}/thank-you`,\n            cancelUrl: `${BAKED_BASE_URL}/donate`,\n            captchaToken: \"\",\n        }\n\n        // Validate the request body before requesting the CAPTCHA token for\n        // faster feedback in case of form errors (e.g. invalid amount).\n        const errorMessage = getErrorMessageDonation(\n            requestBodyForClientSideValidation\n        )\n        if (errorMessage) throw new Error(errorMessage)\n\n        // Get the CAPTCHA token once the request body is validated.\n        const captchaToken = this.captchaToken\n        if (!captchaToken) {\n            // This should never happen, because we don't allow submitting the\n            // form when the token is not set.\n            throw new Error(\"Missing captcha token\")\n        }\n\n        const requestBody: DonationRequest = {\n            ...requestBodyForClientSideValidation,\n            captchaToken,\n        }\n\n        // Send the request to the server, along with the CAPTCHA token.\n        const response = await fetch(DONATE_API_URL, {\n            method: \"POST\",\n            headers: {\n                Accept: \"application/json\", // expect JSON in response\n                \"Content-Type\": \"application/json\", // send JSON in request\n            },\n            body: JSON.stringify(requestBody),\n        })\n\n        const session: DonateSessionResponse = await response.json()\n\n        if (!response.ok || !session.url) {\n            throw new Error(\n                session.error || `Something went wrong. ${PLEASE_TRY_AGAIN}`\n            )\n        }\n\n        analytics.logSiteFormSubmit(\"donate\")\n\n        window.location.href = session.url\n    }\n\n    @action.bound onCaptchaSuccess(token: string) {\n        this.captchaToken = token\n    }\n\n    @action.bound onCaptchaError(errorCode: string) {\n        this.captchaToken = undefined\n\n        // https://developers.cloudflare.com/turnstile/troubleshooting/client-side-errors/error-codes/\n        const errorCodeNumber = Number(errorCode)\n        const errorFamily = Math.floor(errorCodeNumber / 1000)\n\n        if (TURNSTILE_SENTRY_ERROR_CODES.includes(errorCodeNumber)) {\n            Sentry.captureException(new Error(`Turnstile error: ${errorCode}`))\n        }\n\n        switch (errorFamily) {\n            case 300:\n            case 600:\n                this.setErrorMessage(\n                    `Security check failed. Please try refreshing the page or using a different browser. ${PLEASE_GET_IN_TOUCH}`\n                )\n                break\n            default:\n                this.setErrorMessage(\n                    `An unexpected error occurred. ${PLEASE_TRY_AGAIN}`\n                )\n        }\n    }\n\n    @action.bound onCaptchaExpire() {\n        this.captchaToken = undefined\n    }\n\n    @bind async onSubmit(event: React.SubmitEvent<HTMLFormElement>) {\n        event.preventDefault()\n        this.setIsSubmitting(true)\n        this.setErrorMessage(undefined)\n\n        try {\n            await this.submitDonation()\n        } catch (error) {\n            this.setIsSubmitting(false)\n\n            const prefixedErrorMessage = stringifyUnknownError(error)\n            // Send all errors to Sentry. This also includes form validation\n            // errors, which are useful to identify possible UX improvements\n            // or validate UX experiments (such as the combination of the name\n            // field and the \"include my name on the list\" checkbox).\n            Sentry.captureException(\n                error instanceof Error ? error : new Error(prefixedErrorMessage)\n            )\n\n            if (!prefixedErrorMessage) {\n                this.setErrorMessage(\n                    `Something went wrong. ${PLEASE_TRY_AGAIN}`\n                )\n                return\n            }\n\n            const rawErrorMessage = prefixedErrorMessage.match(/^Error: (.*)$/)\n\n            this.setErrorMessage(rawErrorMessage?.[1] || prefixedErrorMessage)\n        }\n    }\n\n    override render() {\n        return (\n            <form className=\"donate-form\" onSubmit={this.onSubmit}>\n                {this.isUsa && (\n                    <>\n                        <EveryOrgSection buttonVariant=\"primary\" />\n                        <p className=\"donation-payment__or\">\n                            You can also donate via Stripe by using the form\n                            below.\n                        </p>\n                    </>\n                )}\n                <fieldset>\n                    <legend className=\"overline-black-caps\">Frequency</legend>\n                    <div className=\"donation-options\">\n                        <input\n                            type=\"button\"\n                            value=\"Give once\"\n                            onClick={() => this.setInterval(\"once\")}\n                            className={cx(\"donation-options__button\", {\n                                active: this.interval === \"once\",\n                            })}\n                        />\n                        <input\n                            type=\"button\"\n                            value=\"Monthly\"\n                            onClick={() => this.setInterval(\"monthly\")}\n                            className={cx(\"donation-options__button\", {\n                                active: this.interval === \"monthly\",\n                            })}\n                        />\n                        <input\n                            type=\"button\"\n                            value=\"Annually\"\n                            onClick={() => this.setInterval(\"annual\")}\n                            className={cx(\"donation-options__button\", {\n                                active: this.interval === \"annual\",\n                            })}\n                        />\n                    </div>\n                </fieldset>\n\n                <fieldset>\n                    <legend>Currency</legend>\n                    <div className=\"donation-options\">\n                        {SUPPORTED_CURRENCY_CODES.map((code) => (\n                            <input\n                                type=\"button\"\n                                value={`${code} (${getCurrencySymbol(code)})`}\n                                onClick={() => this.setCurrency(code)}\n                                className={cx(\"donation-options__button\", {\n                                    active: this.currencyCode === code,\n                                })}\n                                key={code}\n                            />\n                        ))}\n                    </div>\n                </fieldset>\n\n                <fieldset>\n                    <legend>Amount</legend>\n                    <div className=\"donation-options donation-options--grid\">\n                        {this.intervalAmounts.map((amount) => (\n                            <input\n                                type=\"button\"\n                                value={`${this.currencySymbol}${amount}`}\n                                onClick={() => this.setPresetAmount(amount)}\n                                className={cx(\"donation-options__button\", {\n                                    active:\n                                        amount === this.presetAmount &&\n                                        !this.customAmount,\n                                })}\n                                key={`${amount}-${this.interval}`}\n                            />\n                        ))}\n                        <div\n                            className={cx(\"donation-custom-amount\", {\n                                active: !!this.customAmount,\n                            })}\n                        >\n                            <label htmlFor=\"donation-custom-amount__input\">\n                                {this.currencySymbol}\n                            </label>\n                            <input\n                                type=\"text\"\n                                placeholder=\"Other\"\n                                id=\"donation-custom-amount__input\"\n                                className=\"donation-custom-amount__input\"\n                                onChange={(event) =>\n                                    this.setCustomAmount(event.target.value)\n                                }\n                                value={this.customAmount}\n                            />\n                        </div>\n                    </div>\n                </fieldset>\n\n                <fieldset className=\"donation-checkbox\">\n                    <Checkbox\n                        label={\n                            <span className=\"donation-checkbox__label\">\n                                Subscribe to our donor newsletter (sent at most\n                                twice a year)\n                            </span>\n                        }\n                        checked={this.subscribeToDonorNewsletter}\n                        onChange={() => this.toggleSubscribeToDonorNewsletter()}\n                    />\n                </fieldset>\n\n                <fieldset className=\"donation-checkbox\">\n                    <Checkbox\n                        label={\n                            <span className=\"donation-checkbox__label\">\n                                Include my name on our{\" \"}\n                                <a href=\"/funding\">public list of donors</a>\n                            </span>\n                        }\n                        checked={this.showOnList}\n                        onChange={() => this.toggleShowOnList()}\n                    />\n                </fieldset>\n\n                {this.showOnList && (\n                    <fieldset>\n                        <label\n                            className=\"donation-name__label\"\n                            htmlFor=\"donation-name__input\"\n                        >\n                            Full name (required if ticked)\n                        </label>\n                        <input\n                            id=\"donation-name__input\"\n                            type=\"text\"\n                            className=\"donation-name__input sentry-mask\"\n                            value={this.name}\n                            onChange={(event) =>\n                                this.setName(event.target.value)\n                            }\n                        />\n                    </fieldset>\n                )}\n\n                {this.errorMessage && (\n                    <p className=\"error\">{this.errorMessage}</p>\n                )}\n\n                <Turnstile\n                    siteKey={TURNSTILE_SITE_KEY}\n                    options={{\n                        action: \"donate\",\n                        appearance: \"interaction-only\",\n                    }}\n                    onSuccess={this.onCaptchaSuccess}\n                    onError={this.onCaptchaError}\n                    onExpire={this.onCaptchaExpire}\n                />\n                <div className=\"donation-payment\">\n                    <button\n                        aria-label=\"Submit donation\"\n                        type=\"submit\"\n                        className={cx(\"donation-submit\", {\n                            \"donation-submit--light\": this.isUsa,\n                        })}\n                        disabled={!this.captchaToken || this.isSubmitting}\n                        onClick={() => analytics.logSiteClick(\"donate-now\")}\n                    >\n                        Donate now\n                        <FontAwesomeIcon\n                            icon={faArrowRight}\n                            className=\"donation-submit__icon\"\n                        />\n                    </button>\n\n                    <ul className=\"donation-payment-benefits\">\n                        <li className=\"donation-payment-benefits__item\">\n                            🇬🇧 Your donation qualifies for Gift Aid in the UK{\" \"}\n                            <Tippy\n                                appendTo={() => document.body}\n                                content={\n                                    <div>\n                                        <p>\n                                            Your donation qualifies for Gift Aid\n                                            if you pay tax in the UK, and have\n                                            signed the Gift Aid declaration.\n                                        </p>\n                                        <p>\n                                            Every £1 that you donate with Gift\n                                            Aid is worth £1.25 to us, at no\n                                            extra cost to you.\n                                        </p>\n                                    </div>\n                                }\n                                interactive\n                                placement=\"bottom\"\n                                theme=\"owid-footnote\"\n                                trigger=\"mouseenter focus click\"\n                            >\n                                <FontAwesomeIcon icon={faInfoCircle} />\n                            </Tippy>\n                        </li>\n                        <li className=\"donation-payment-benefits__item\">\n                            You can donate using credit card, debit card, SEPA,\n                            iDEAL and more\n                        </li>\n                    </ul>\n                </div>\n                {!this.isUsa && <EveryOrgSection buttonVariant=\"secondary\" />}\n                <p className=\"donation-note\">\n                    This site is protected by Turnstile.{\" \"}\n                    <a href=\"https://www.cloudflare.com/privacypolicy/\">\n                        Cloudflare's Privacy Policy\n                    </a>{\" \"}\n                    applies.\n                </p>\n            </form>\n        )\n    }\n}\n","import { createRoot } from \"react-dom/client\"\nimport { getUserCountryInformation } from \"@ourworldindata/utils\"\nimport { DonateForm } from \"./DonateForm.js\"\n\nexport async function runDonateForm() {\n    const localCountryInfo = await getUserCountryInformation()\n    const container = document.querySelector(\".donate-form-container\")\n    if (!container) return\n\n    const root = createRoot(container)\n    root.render(<DonateForm countryCode={localCountryInfo?.code} />)\n}\n","import * as _ from \"lodash-es\"\nimport {\n    GrapherProgrammaticInterface,\n    GRAPHER_EMBEDDED_FIGURE_ATTR,\n    migrateGrapherConfigToLatestVersion,\n    GRAPHER_NARRATIVE_CHART_CONFIG_FIGURE_ATTR,\n    renderGrapherIntoContainer,\n} from \"@ourworldindata/grapher\"\nimport {\n    fetchText,\n    isPresent,\n    Url,\n    fetchWithRetry,\n    NarrativeChartInfo,\n} from \"@ourworldindata/utils\"\nimport { action, makeObservable } from \"mobx\"\nimport {\n    Explorer,\n    ExplorerProps,\n    EXPLORER_EMBEDDED_FIGURE_SELECTOR,\n    buildExplorerProps,\n} from \"@ourworldindata/explorer\"\nimport { GRAPHER_PREVIEW_CLASS } from \"@ourworldindata/types\"\nimport {\n    ADMIN_BASE_URL,\n    BAKED_GRAPHER_URL,\n    CATALOG_URL,\n    DATA_API_URL,\n    GRAPHER_DYNAMIC_CONFIG_URL,\n} from \"../../settings/clientSettings.mjs\"\n// import { embedDynamicCollectionGrapher } from \"../collections/DynamicCollectionPageMain.js\"\nimport { match } from \"ts-pattern\"\nimport { createRoot } from \"react-dom/client\"\n\ntype EmbedType = \"grapher\" | \"explorer\" | \"narrativeChart\"\n\nconst figuresFromDOM = (\n    container: HTMLElement | Document = document,\n    selector: string\n) =>\n    Array.from(\n        container.querySelectorAll<HTMLElement>(`*[${selector}]`)\n    ).filter(isPresent)\n\nclass MultiEmbedder {\n    private readonly figuresObserver: IntersectionObserver | undefined\n    private isPreviewing?: boolean\n\n    constructor() {\n        makeObservable(this)\n        if (typeof window !== \"undefined\" && \"IntersectionObserver\" in window) {\n            this.figuresObserver = new IntersectionObserver(\n                this.onIntersecting.bind(this),\n                {\n                    rootMargin: \"200%\",\n                }\n            )\n        } else if (typeof window === \"object\" && typeof document === \"object\") {\n            // only show the warning when we're in something that roughly resembles a browser\n            console.warn(\n                \"IntersectionObserver not available; interactive embeds won't load on this page\"\n            )\n        }\n    }\n\n    /**\n     * Finds all <figure data-grapher-src=\"...\"> and <figure\n     * data-explorer-src=\"...\"> elements in the document and loads the\n     * iframeless interactive charts when the user's viewport approaches them.\n     * Uses an IntersectionObserver (see constructor).\n     *\n     * BEWARE: this method is hardcoded in some scripts, make sure to check\n     * thoroughly before making any changes.\n     */\n    embedAll(isPreviewing?: boolean) {\n        this.observeFigures(undefined, isPreviewing)\n    }\n\n    /**\n     * Make the embedder aware of new <figure> elements that are injected into the DOM.\n     *\n     * Use this when you programmatically create/replace charts.\n     */\n    observeFigures(\n        container: HTMLElement | Document = document,\n        isPreviewing?: boolean\n    ) {\n        this.isPreviewing = isPreviewing\n        const figures = figuresFromDOM(container, GRAPHER_EMBEDDED_FIGURE_ATTR)\n            .concat(\n                figuresFromDOM(container, EXPLORER_EMBEDDED_FIGURE_SELECTOR)\n            )\n            .concat(\n                figuresFromDOM(\n                    container,\n                    GRAPHER_NARRATIVE_CHART_CONFIG_FIGURE_ATTR\n                )\n            )\n\n        figures.forEach((figure) => {\n            this.figuresObserver?.observe(figure)\n        })\n    }\n\n    async onIntersecting(entries: IntersectionObserverEntry[]) {\n        entries.forEach((entry) => {\n            if (entry.isIntersecting) {\n                void this.renderInteractiveFigure(entry.target)\n            }\n        })\n    }\n\n    async renderExplorerIntoFigure(figure: Element) {\n        const explorerUrl = figure.getAttribute(\n            EXPLORER_EMBEDDED_FIGURE_SELECTOR\n        )\n\n        if (!explorerUrl) return\n\n        const { fullUrl, queryStr } = Url.fromURL(explorerUrl)\n\n        const html = await fetchText(fullUrl)\n        const props: ExplorerProps = await buildExplorerProps(html, queryStr)\n\n        const root = createRoot(figure)\n        root.render(<Explorer {...props} />)\n    }\n\n    private async _renderGrapherComponentIntoFigure(\n        figure: Element,\n        {\n            configUrl,\n            embedUrl,\n            additionalConfig,\n        }: {\n            configUrl: string\n            embedUrl?: Url\n            additionalConfig?: Partial<GrapherProgrammaticInterface>\n        }\n    ) {\n        const { queryStr } = embedUrl ?? {}\n\n        figure.classList.remove(GRAPHER_PREVIEW_CLASS)\n        const common: GrapherProgrammaticInterface = {\n            isEmbeddedInAnOwidPage: true,\n            queryStr,\n            adminBaseUrl: ADMIN_BASE_URL,\n            bakedGrapherURL: BAKED_GRAPHER_URL,\n        }\n\n        const fetchedGrapherPageConfig = await fetchWithRetry(configUrl).then(\n            (res) => res.json()\n        )\n        const grapherPageConfig = migrateGrapherConfigToLatestVersion(\n            fetchedGrapherPageConfig\n        )\n\n        const config = _.merge(\n            {}, // merge mutates the first argument\n            grapherPageConfig,\n            common,\n            additionalConfig\n        )\n\n        renderGrapherIntoContainer({\n            config,\n            container: figure,\n            dataApiUrl: DATA_API_URL,\n            catalogUrl: CATALOG_URL,\n            noCache: this.isPreviewing,\n        })\n\n        // Special handling for shared collections\n        // TODO: re-enable this\n        // if (window.location.pathname.startsWith(\"/collection/custom\")) {\n        //     embedDynamicCollectionGrapher(grapherRef, figure)\n        // }\n    }\n\n    async renderGrapherIntoFigure(figure: Element) {\n        const embedUrlRaw = figure.getAttribute(GRAPHER_EMBEDDED_FIGURE_ATTR)\n        if (!embedUrlRaw) return\n        const embedUrl = Url.fromURL(embedUrlRaw)\n\n        const configUrl = `${GRAPHER_DYNAMIC_CONFIG_URL}/${embedUrl.slug}.config.json${this.isPreviewing ? \"?nocache\" : \"\"}`\n\n        await this._renderGrapherComponentIntoFigure(figure, {\n            configUrl,\n            embedUrl,\n        })\n    }\n\n    async renderNarrativeChartIntoFigure(figure: Element) {\n        const narrativeChartInfoRaw = figure.getAttribute(\n            GRAPHER_NARRATIVE_CHART_CONFIG_FIGURE_ATTR\n        )\n        if (!narrativeChartInfoRaw) return\n        const narrativeChartInfo: NarrativeChartInfo = JSON.parse(\n            narrativeChartInfoRaw\n        )\n        if (!narrativeChartInfo) return\n\n        const configUrl = `${GRAPHER_DYNAMIC_CONFIG_URL}/by-uuid/${narrativeChartInfo.chartConfigId}.config.json${this.isPreviewing ? \"?nocache\" : \"\"}`\n\n        await this._renderGrapherComponentIntoFigure(figure, {\n            configUrl,\n            additionalConfig: {\n                hideRelatedQuestion: true,\n                hideShareButton: true,\n                hideExploreTheDataButton: false,\n                narrativeChartInfo,\n            },\n        })\n    }\n\n    @action.bound\n    async renderInteractiveFigure(figure: Element) {\n        const isExplorer = figure.hasAttribute(\n            EXPLORER_EMBEDDED_FIGURE_SELECTOR\n        )\n        const isNarrativeChart = figure.hasAttribute(\n            GRAPHER_NARRATIVE_CHART_CONFIG_FIGURE_ATTR\n        )\n\n        const embedType: EmbedType = isExplorer\n            ? \"explorer\"\n            : isNarrativeChart\n              ? \"narrativeChart\"\n              : \"grapher\"\n\n        // Stop observing visibility as soon as possible\n        this.figuresObserver?.unobserve(figure)\n\n        await match(embedType)\n            .with(\"explorer\", () => this.renderExplorerIntoFigure(figure))\n            .with(\"narrativeChart\", () =>\n                this.renderNarrativeChartIntoFigure(figure)\n            )\n            .with(\"grapher\", () => this.renderGrapherIntoFigure(figure))\n            .exhaustive()\n    }\n}\n\nexport const MultiEmbedderSingleton = new MultiEmbedder()\n","import * as Sentry from \"@sentry/react\"\n\n/**\n * React and the browser-integrated Google Translate don't love each other:\n * In a translated page, some interactions entirely break the page.\n * Since Google Translate actually works quite well for OWID and we would like to support that use\n * case, we're monkey-patching the global Node.removeChild and Node.insertBefore instead.\n * It's a hack that has been suggested by Dan Abramov himself: https://github.com/facebook/react/issues/11538#issuecomment-417504600\n * -@MarcelGerber, 2021-09-06\n */\nexport const runMonkeyPatchForGoogleTranslate = (): void => {\n    const nodeToString = (elem: Element | Node): string | null => {\n        if (elem instanceof Element)\n            // https://stackoverflow.com/a/34639030/10670163\n            return elem.innerHTML\n                ? elem.outerHTML.slice(\n                      0,\n                      elem.outerHTML.indexOf(elem.innerHTML)\n                  )\n                : elem.outerHTML\n        else return elem.textContent\n    }\n\n    if (typeof Node === \"function\" && Node.prototype) {\n        const originalRemoveChild = Node.prototype.removeChild\n        Node.prototype.removeChild = function <T extends Node>(child: T): T {\n            if (child.parentNode !== this) {\n                console?.error(\n                    \"Cannot remove a child from a different parent\",\n                    child,\n                    this\n                )\n                Sentry.captureMessage(\n                    \"removeChild: Cannot remove a child from a different parent\",\n                    {\n                        extra: {\n                            child: nodeToString(child),\n                            this: nodeToString(this),\n                        },\n                    }\n                )\n                return child\n            }\n            return originalRemoveChild.apply(this, [child]) as T\n        }\n\n        const originalInsertBefore = Node.prototype.insertBefore\n        Node.prototype.insertBefore = function <T extends Node>(\n            newNode: T,\n            referenceNode: Node | null\n        ) {\n            if (referenceNode && referenceNode.parentNode !== this) {\n                console?.error(\n                    \"Cannot insert before a reference node from a different parent\",\n                    referenceNode,\n                    this\n                )\n                Sentry.captureMessage(\n                    \"insertBefore: Cannot insert before a reference node from a different parent\",\n                    {\n                        extra: {\n                            child: nodeToString(referenceNode),\n                            this: nodeToString(this),\n                        },\n                    }\n                )\n                return newNode\n            }\n            return originalInsertBefore.apply(this, [\n                newNode,\n                referenceNode,\n            ]) as T\n        }\n    }\n}\n","/*!\n * Font Awesome Free 7.3.1 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2026 Fonticons, Inc.\n */\nvar prefix = \"fab\";\nvar faSquareGithub = {\n  prefix: 'fab',\n  iconName: 'square-github',\n  icon: [448, 512, [\"github-square\"], \"f092\", \"M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM223.7 96c-88.4 0-159.7 72.2-159.7 160.6 0 69.4 44.1 126.9 103.4 148.4 8.4 3.1 16.6-2.5 16.6-10.9l0-25c-4.4 1.9-10 3.1-15 3.1-20.6 0-32.8-11.2-41.6-32.2-3.4-8.4-7.2-13.4-14.4-14.4-3.7-.3-5-1.9-5-3.8 0-3.7 6.2-6.6 12.5-6.6 9.1 0 16.9 5.6 25 17.2 6.2 9.1 12.8 13.1 20.6 13.1s12.8-2.8 20-10c5.3-5.3 9.4-10 13.1-13.1-41.3-5-70.3-34.7-70.3-73.1 0-15.6 5.6-32.5 15-43.8-4.1-10.3-3.4-32.2 1.2-41.2 12.5-1.6 29.4 5 39.4 14.1 11.9-3.7 24.4-5.6 39.7-5.6s27.8 1.9 39.1 5.3c9.7-8.8 26.9-15.3 39.4-13.8 4.4 8.4 5 30.3 .9 40.9 10 11.9 15.3 27.8 15.3 44.1 0 38.4-29.1 67.5-70.9 72.8 10.6 6.9 17.8 21.9 17.8 39.1l0 32.5c0 9.4 7.8 14.7 17.2 10.9 56.6-21.6 100.9-78.1 100.9-148.1 0-88.4-71.9-160.6-160.3-160.6z\"]\n};\nvar faGithubSquare = faSquareGithub;\nvar faThinkPeaks = {\n  prefix: 'fab',\n  iconName: 'think-peaks',\n  icon: [576, 512, [], \"f731\", \"M465.4 409.4l87.1-150.2-32-.3-55.1 95-206.2-353.9-236.2 407.4 32 .3 204.2-352.1 206.2 353.8zM110.1 365.3l32.1 0 117.4-202.5 203.4 349.1 32.5 .1-235.8-404.6-149.6 257.9z\"]\n};\nvar faGoogleDrive = {\n  prefix: 'fab',\n  iconName: 'google-drive',\n  icon: [512, 512, [], \"f3aa\", \"M339 314.9L175.4 32 336.6 32 500.2 314.9 339 314.9zM201.5 338.5l-80.6 141.5 310.5 0 80.6-141.5-310.5 0zM154.1 67.4L0 338.5 80.6 480 237 208.8 154.1 67.4z\"]\n};\nvar faAutoprefixer = {\n  prefix: 'fab',\n  iconName: 'autoprefixer',\n  icon: [640, 512, [], \"f41c\", \"M318.4 16l-161 480 77.5 0 25.4-81.4 119.5 0 25.2 81.4 77.5 0-164.1-480zM278.1 357.9l41.2-130.4 1.5 0 40.9 130.4-83.6 0zM640 405L630 373.6 462.1 358 481.5 414.5 640 405zM177.9 358L10 373.7 0 405 158.5 414.4 177.9 358z\"]\n};\nvar faSquareViadeo = {\n  prefix: 'fab',\n  iconName: 'square-viadeo',\n  icon: [448, 512, [\"viadeo-square\"], \"f2aa\", \"M448 96c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320zM118.3 381.2c-68-73.6-19.8-196.1 81.2-196.1 13.3 0 26.6 2.1 39.1 6.7-4.3 8.4-7.3 17.6-8.4 27.1-9.7-4.1-20.2-6-30.7-6-48.8 0-84.6 41.7-84.6 88.9 0 43 28.5 78.7 69.5 85.9 61.5-24 72.9-117.6 72.9-175 0-7.3 0-14.8-.6-22.1-11.2-32.9-26.6-64.6-44.2-94.5 27.1 18.3 41.9 62.5 44.2 94.1l0 .4c7.7 22.5 11.8 46.2 11.8 70 0 54.1-21.9 99-68.3 128.2l-2.4 .2c50 1 86.2-38.6 86.2-87.2 0-12.2-2.1-24.3-6.9-35.7 9.5-1.9 18.5-5.6 26.4-10.5 15.3 36.6 12.6 87.3-22.8 125.6-42.4 46.2-120 46.6-162.4 0zM274.6 217.6c21.9-12 49.6-30.7 62.3-53 1.5-3 4.1-8.6 4.5-12-12.5 27.9-44.2 49.8-73.9 56.7-4.7-7.3-7.5-15.5-7.5-24.3 0-10.3 5.2-24.1 12.9-31.6 8.3-7.9 18-10.9 27.9-14.1 16-5.1 32.5-10.3 44.5-35.9 32.5 46.2 13.1 130.3-36.3 130.3-13.3 0-25.1-7.1-34.4-16.1z\"]\n};\nvar faViadeoSquare = faSquareViadeo;\nvar faCpanel = {\n  prefix: 'fab',\n  iconName: 'cpanel',\n  icon: [640, 512, [], \"f388\", \"M210.3 220.2c-5.6-24.8-26.9-41.2-51-41.2l-37 0c-7.1 0-12.5 4.5-14.3 10.9L73.1 320 97.8 319.9c6.8 0 12.3-4.5 14.2-10.7l25.8-95.7 19.8 0c8.4 0 16.2 5.6 18.3 14.8 2.5 10.9-5.9 22.6-18.3 22.6l-10.3 0c-7 0-12.5 4.6-14.3 10.8l-6.4 23.8 32 0c37.2 0 58.3-36.2 51.7-65.3zm-156.5 28l18.6 0c6.9 0 12.4-4.4 14.3-10.9l6.2-23.6-40 0C30 213.7 9 227.8 1.7 254.8-7 288.6 18.5 320 52 320l12.4 0 7.1-26.1c1.2-4.4-2.2-8.3-6.4-8.3l-11.3 0c-24.7 0-24.9-37.4 0-37.4zm247.5-34.8l-77.9 0-3.5 13.4c-2.4 9.6 4.5 18.5 14.2 18.5l57.5 0c4 0 2.4 4.3 2.1 5.3l-8.6 31.8c-.4 1.4-.9 5.3-5.5 5.3l-34.9 0c-5.3 0-5.3-7.9 0-7.9l21.6 0c6.8 0 12.3-4.6 14.2-10.8l3.5-13.2-48.4 0c-39.2 0-43.6 63.8-.7 63.8l57.5 .2c11.2 0 20.6-7.2 23.4-17.8l14-51.8c4.8-19.2-9.7-36.8-28.5-36.8zM633.1 179l-18.9 0c-4.9 0-9.2 3.2-10.4 7.9L568.2 320c20.7 0 39.8-13.8 44.9-34.5l26.5-98.2c1.2-4.3-2-8.3-6.5-8.3zM396.8 213.7l0 .1-48.3 0-26.2 98c-1.2 4.4 2.2 8.3 6.4 8.3l18.9 0c4.8 0 9.2-3 10.4-7.8l17.2-64 19.8 0c12.5 0 21.4 11.8 18.1 23.4l-10.6 40c-1.2 4.3 1.9 8.3 6.4 8.3l19.1 0c4.6 0 9.1-2.9 10.3-7.8l8.8-33.1c9-33.1-15.9-65.4-50.3-65.4zm98.3 74.6c-3.6 0-6-3.4-5.1-6.7l8-30c.9-3.9 3.7-6 7.8-6l32.9 0c2.6 0 4.6 2.4 3.9 5.1l-.7 2.6c-.6 2-1.9 3-3.9 3l-21.6 0c-7 0-12.6 4.6-14.2 10.8l-3.5 13 53.4 0c10.5 0 20.3-6.6 23.2-17.6l3.2-12c4.9-19.1-9.3-36.8-28.3-36.8l-47.3 0c-17.9 0-33.8 12-38.6 29.6l-10.8 40c-5 17.7 8.3 36.7 28.3 36.7l66.7 0c6.8 0 12.3-4.5 14.2-10.7l5.7-21-73.3 0z\"]\n};\nvar faMendeley = {\n  prefix: 'fab',\n  iconName: 'mendeley',\n  icon: [640, 512, [], \"f7b3\", \"M624.6 325.2c-12.3-12.4-29.7-19.2-48.4-17.2-43.3-1-49.7-34.9-37.5-98.8 22.8-57.5-14.9-131.5-87.4-130.8-77.4 .7-81.7 82-130.9 82-48.1 0-54-81.3-130.9-82-72.9-.8-110.1 73.3-87.4 130.8 12.2 63.9 5.8 97.8-37.5 98.8-21.2-2.3-37 6.5-53 22.5-19.9 19.7-19.3 94.8 42.6 102.6 47.1 5.9 81.6-42.9 61.2-87.8-47.3-103.7 185.9-106.1 146.5-8.2-.1 .1-.2 .2-.3 .4-26.8 42.8 6.8 97.4 58.8 95.2 52.1 2.1 85.4-52.6 58.8-95.2-.1-.2-.2-.3-.3-.4-39.4-97.9 193.8-95.5 146.5 8.2-4.6 10-6.7 21.3-5.7 33 4.9 53.4 68.7 74.1 104.9 35.2 17.8-14.8 23.1-65.6 0-88.3zM320.7 306.1l-.6 0c-43.4 0-62.8-37.5-62.8-62.8 0-34.7 28.2-62.8 62.8-62.8l.6 0c34.7 0 62.8 28.1 62.8 62.8 0 25-19.2 62.8-62.8 62.8z\"]\n};\nvar faDraft2digital = {\n  prefix: 'fab',\n  iconName: 'draft2digital',\n  icon: [512, 512, [], \"f396\", \"M496 398.1l-144-82.2 0 64.7-91.3 0c30.8-35 81.8-95.9 111.8-149.3 35.2-62.6 16.1-123.4-12.8-153.3-4.4-4.6-62.2-62.9-166-41.2-59.1 12.4-89.4 43.4-104.3 67.3-13.1 20.9-17 39.8-18.2 47.7-5.5 33 19.4 67.1 56.7 67.1 31.7 0 57.3-25.7 57.3-57.4 0-27.1-19.7-52.1-48-56.8 1.8-7.3 17.7-21.1 26.3-24.7 41.1-17.3 78 5.2 83.3 33.5 8.3 44.3-37.1 90.4-69.7 127.6-76.6 87-142.8 155.7-161.1 174.8l336-.1 0 64.2 144-81.9zM385.9 371l47.1 27.2-47.1 27.2 0-54.4zM105.4 161.4a22.4 22.4 0 1 1 44.8 0 22.4 22.4 0 1 1 -44.8 0zM98.5 380.5c25.6-27.4 97.7-104.7 150.8-169.9 35.1-43.1 40.3-82.4 28.4-112.7-7.4-18.8-17.5-30.2-24.3-35.7 45.3 2.1 68 23.4 82.2 38.3 0 0 42.4 48.2 5.8 113.3-37 65.9-110.9 147.5-128.5 166.7l-114.4 0z\"]\n};\nvar faReplyd = {\n  prefix: 'fab',\n  iconName: 'replyd',\n  icon: [448, 512, [], \"f3e6\", \"M320 480l-192 0C57.6 480 0 422.4 0 352L0 160C0 89.6 57.6 32 128 32l192 0c70.4 0 128 57.6 128 128l0 192c0 70.4-57.6 128-128 128zM193.4 273.2c-6.1-2-11.6-3.1-16.4-3.1-7.2 0-13.5 1.9-18.9 5.6s-9.6 9-12.8 15.8l-1.1 0-4.2-18.3-28 0 0 138.9 36.1 0 0-89.7c1.5-5.4 4.4-9.8 8.7-13.2s9.8-5.1 16.2-5.1c4.6 0 9.8 1 15.6 3.1l4.8-34zM308.6 376.6c-3.2 2.4-7.7 4.8-13.7 7.1s-12.8 3.5-20.4 3.5c-12.2 0-21.1-3-26.5-8.9-5.5-5.9-8.5-14.7-9-26.4l83.3 0c.9-4.8 1.6-9.4 2.1-13.9 .5-4.4 .7-8.6 .7-12.5 0-10.7-1.6-19.7-4.7-26.9-3.2-7.2-7.3-13-12.5-17.2-5.2-4.3-11.1-7.3-17.8-9.2-6.7-1.8-13.5-2.8-20.6-2.8-21.1 0-37.5 6.1-49.2 18.3s-17.5 30.5-17.5 55c0 22.8 5.2 40.7 15.6 53.7 10.4 13.1 26.8 19.6 49.2 19.6 10.7 0 20.9-1.5 30.4-4.6s17.1-6.8 22.6-11.2l-12-23.6zm-21.8-70.3c3.8 5.4 5.3 13.1 4.6 23.1l-51.7 0c.9-9.4 3.7-17 8.2-22.6s11.5-8.5 21-8.5c8.2-.1 14.1 2.6 17.9 8zm79.9 2.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4-9.6-5.7-16.7-5.7c-6.7 0-12 1.9-16.1 5.7s-6.1 8.9-6.1 15.4 2 11.7 6.1 15.6zm0 100.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4-9.6-5.7-16.7-5.7c-6.7 0-12 1.9-16.1 5.7s-6.1 8.9-6.1 15.4c0 6.6 2 11.7 6.1 15.6z\"]\n};\nvar faDevpost = {\n  prefix: 'fab',\n  iconName: 'devpost',\n  icon: [512, 512, [], \"e8ae\", \"M384 35L512 256 384 477 128 477 0 256 128 35 384 35zM162.6 120.8l0 270.3 79.8 0c69.2 0 137.7-40.6 137.7-135.2 0-98.5-57-135.2-133.9-135.2l-83.7 0zm81.7 53c57 0 80.6 27.2 80.6 82.2 0 49.1-26 82.2-82.4 82.2l-26.8 0 0-164.4 28.7 0z\"]\n};\nvar faEmpire = {\n  prefix: 'fab',\n  iconName: 'empire',\n  icon: [512, 512, [], \"f1d1\", \"M295.6 54.2c-10.8-2.2-22.1-3.3-33.5-3.6l0-18.2c78.1 2.2 146.1 44 184.6 106.6l-15.8 9.1c-6.1-9.7-12.7-18.8-20.2-27.1l-18 15.5c-26-29.6-61.4-50.7-101.9-58.4l4.8-23.9zM61.4 322.4l23-7.7c-6.4-18.3-10-38.2-10-58.7s3.3-40.4 9.7-58.7l-22.7-7.7c3.6-10.8 8.3-21.3 13.6-31l-15.8-9.1C42 181 32.1 217.5 32.1 256s10 75 27.1 106.6L75 353.5c-5.3-10-9.7-20.3-13.6-31.1zM221.1 434c-40.4-8-75.8-29.1-101.9-58.7l-18 15.8c-7.5-8.6-14.4-17.7-20.2-27.4l-16 9.4c38.5 62.3 106.8 104.3 184.9 106.6l0-18.3c-11.3-.3-22.7-1.7-33.5-3.6l4.7-23.8zM101.3 120.9l18 15.5c26-29.6 61.4-50.7 101.9-58.4l-4.7-23.8c10.8-2.2 22.1-3.3 33.5-3.6l0-18.2C171.9 34.6 103.9 76.4 65.4 139l15.8 9.1c6-9.7 12.6-18.9 20.1-27.2zM410.7 391.1l-18-15.8c-26 29.6-61.4 50.7-101.9 58.7l4.7 23.8c-10.8 1.9-22.1 3.3-33.5 3.6l0 18.3c78.1-2.2 146.4-44.3 184.9-106.6l-16.1-9.4c-5.7 9.7-12.6 18.8-20.1 27.4zM8 256a248 248 0 1 1 496 0 248 248 0 1 1 -496 0zm483.8 0a235.8 235.8 0 1 0 -471.6 0 235.8 235.8 0 1 0 471.6 0zm-39-106.6L437 158.5c5.3 9.7 10 20.2 13.6 31l-22.7 7.7c6.4 18.3 9.7 38.2 9.7 58.7s-3.6 40.4-10 58.7l23 7.7c-3.9 10.8-8.3 21-13.6 31l15.8 9.1C470 331 479.9 294.5 479.9 256s-9.9-75-27.1-106.6zm-183 177.7c16.3-3.3 30.4-11.6 40.7-23.5l51.2 44.8c11.9-13.6 21.3-29.3 27.1-46.8l-64.2-22.1c2.5-7.5 3.9-15.2 3.9-23.5s-1.4-16.1-3.9-23.5l64.5-22.1c-6.1-17.4-15.5-33.2-27.4-46.8l-51.2 44.8c-10.2-11.9-24.4-20.5-40.7-23.8l13.3-66.4c-8.6-1.9-17.7-2.8-27.1-2.8s-18.5 .8-27.1 2.8l13.3 66.4c-16.3 3.3-30.4 11.9-40.7 23.8l-51.2-44.8c-11.9 13.6-21.3 29.3-27.4 46.8l64.5 22.1c-2.5 7.5-3.9 15.2-3.9 23.5s1.4 16.1 3.9 23.5l-64.2 22.1c5.8 17.4 15.2 33.2 27.1 46.8l51.2-44.8c10.2 11.9 24.4 20.2 40.7 23.5l-13.3 66.7c8.6 1.7 17.7 2.8 27.1 2.8s18.5-1.1 27.1-2.8l-13.3-66.7z\"]\n};\nvar faAccessibleIcon = {\n  prefix: 'fab',\n  iconName: 'accessible-icon',\n  icon: [448, 512, [62107], \"f368\", \"M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5 9.9-67.2 26L73 243.2c22-20.7 50.1-35.1 81.4-40.2l75.3-85.7-42.6-24.8-51.6 46C105.5 165.3 64.9 120 95 93.1l68-60.7c9.8-8.8 24.1-10.2 35.5-3.6 0 0 139.3 80.9 139.5 81.1 16.2 10.1 20.7 36 6.1 52.6l-58.4 66.5 106.1-5.9c18.5-1.1 33.6 14.4 32.1 32.7zM359 101.8A50.9 50.9 0 1 0 359 0 50.9 50.9 0 1 0 359 101.8zM179.6 456.5c-80.6 0-127.4-90.6-82.7-156.1L57.2 260.7C36.4 287 24 320.3 24 356.4 24 487.1 174.7 557.8 275.4 478.9l-39.7-39.7c-16 10.9-35.3 17.3-56.1 17.3z\"]\n};\nvar faQuora = {\n  prefix: 'fab',\n  iconName: 'quora',\n  icon: [448, 512, [], \"f2c4\", \"M440.7 386.7l-29.3 0c-1.5 13.5-10.5 30.8-33 30.8-20.5 0-35.3-14.2-49.5-35.8 44.2-34.2 74.7-87.5 74.7-153 .1-117.5-96.6-196.7-198.4-196.7-99.7 0-197.7 79.7-197.7 196.7 0 134.1 131.3 221.6 249 189 19.7 33.6 45.7 62.3 95.2 62.3 81.8 0 90.8-75.3 89-93.3zM297.2 329.2c-19.5-29.2-43.7-52.2-91.5-52.2-30.5 0-54.3 10-69 22.8l12.2 24.3c6.2-3 13-4 19.8-4 35.5 0 53.7 30.8 69.2 61.3-10 3-20.7 4.2-32.7 4.2-75 0-107.5-53-107.5-156.7 0-104.4 32.5-157.9 107.5-157.9 76.2 0 108.7 53.5 108.7 157.7 .1 41.8-5.4 75.6-16.7 100.5z\"]\n};\nvar faCcJcb = {\n  prefix: 'fab',\n  iconName: 'cc-jcb',\n  icon: [576, 512, [], \"f24b\", \"M431.5 244.3l0-32.3c41.2 0 38.5 .2 38.5 .2 7.3 1.3 13.3 7.3 13.3 16 0 8.8-6 14.5-13.3 15.8-1.2 .4-3.3 .3-38.5 .3zm42.8 20.2c-2.8-.7-3.3-.5-42.8-.5l0 35c39.6 0 40 .2 42.8-.5 7.5-1.5 13.5-8 13.5-17 0-8.7-6-15.5-13.5-17zM576 80l0 352c0 26.5-21.5 48-48 48L48 480c-26.5 0-48-21.5-48-48L0 80C0 53.5 21.5 32 48 32l480 0c26.5 0 48 21.5 48 48zM182 192.3l-57 0c0 67.1 10.7 109.7-35.8 109.7-19.5 0-38.8-5.7-57.2-14.8l0 28c30 8.3 68 8.3 68 8.3 97.9 0 82-47.7 82-131.2zm178.5 4.5c-63.4-16-165-14.9-165 59.3 0 77.1 108.2 73.6 165 59.2l0-28.3C312.9 311.7 253 309 253 256s59.8-55.6 107.5-31.2l0-28zM544 286.5c0-18.5-16.5-30.5-38-32l0-.8c19.5-2.7 30.3-15.5 30.3-30.2 0-19-15.7-30-37-31 0 0 6.3-.3-120.3-.3l0 127.5 122.7 0c24.3 .1 42.3-12.9 42.3-33.2z\"]\n};\nvar faFedora = {\n  prefix: 'fab',\n  iconName: 'fedora',\n  icon: [448, 512, [], \"f798\", \"M0 255.8C.1 132.2 100.3 32 224 32S448 132.3 448 256 347.8 479.9 224.1 480L50.9 480C22.8 480 .1 457.3 0 429.2l0 0 0-173.4 0 0zm342.6-63.1c0-39.7-35.6-68.5-73.2-68.5-34.9 0-65.8 26.3-70.1 59.9-.2 3.8-.4 5-.4 8.5-.1 21.1 0 42.8-.8 64.4 .9 26.1 1 52.1 0 76.6 0 27.1-19.4 45.5-44.7 45.5s-45.8-20.2-45.8-45.5c.5-27.7 22.6-45.3 48.5-46.1l.2 0 26.3-.2 0-37.3-26.3 .2c-47.1-.4-84.6 36.5-85.9 83.4 0 45.6 37.5 82.9 83 82.9 43 0 78.7-33.6 82.6-75.6l.2-53.5 32.6-.3c25.3 .2 25-37.8-.2-37.3l-32.4 .3c0-6.4 .1-12.8 .1-19.2 .1-12.7 .1-25.4-.1-38.2 .1-16.5 15.8-31.2 33.2-31.2 17.5 0 35.9 8.7 35.9 31.2 0 3.2-.1 5.1-.3 6.3-1.9 10.5 5.2 20.4 15.7 21.9 10.6 1.5 20.2-6.1 21.2-16.6 .6-4.2 .7-7.9 .7-11.6z\"]\n};\nvar faDuolingo = {\n  prefix: 'fab',\n  iconName: 'duolingo',\n  icon: [576, 512, [], \"e812\", \"M504.3 230.5c10.4 88.5-43.4 172.1-128.2 199s-176.6-10.3-218.9-88.7c-72 3-137.4-39.8-163.2-105.5-2.6-6.6-1.9-14 1.9-19.9s10.2-9.7 17.2-10.1l96.1-6-23.8-75.9c-6.3-20-2.2-41.9 11-58.3s33.7-25 54.5-23c52.2 5 86.8 4.8 104-.6S300 16.7 339-16.9c15.9-13.7 37.7-18.5 57.8-12.7s36.1 21.3 42.4 41.4L462.8 87 543.6 37.3c6-3.7 13.4-4.3 19.9-1.6s11.3 8.3 12.9 15.2c16.2 68.2-12.4 140.3-72.1 179.5zM258.5 475.9l0 0c15.1 7.5 21.5 25.8 14.2 41s-25.4 21.9-40.7 14.9l-43.9-21c-15.1-7.5-21.5-25.8-14.2-41s25.4-21.9 40.7-14.9l43.8 21zM564.6 345.7c14.8 8.4 20 27.3 11.6 42.2l-23.9 42.4c-8.7 14.3-27.1 19.2-41.6 10.9s-19.9-26.6-12-41.4l23.9-42.4c4-7.1 10.7-12.4 18.6-14.6s16.3-1.2 23.4 2.9z\"]\n};\nvar faFirstdraft = {\n  prefix: 'fab',\n  iconName: 'firstdraft',\n  icon: [384, 512, [], \"f3a1\", \"M384 192l-64 0 0 128-128 0 0 128-192 0 0-25.6 166.4 0 0-128 128 0 0-128 89.6 0 0 25.6zm-25.6 38.4l0 128-128 0 0 128-166.4 0 0 25.6 192 0 0-128 128 0 0-153.6-25.6 0zm25.6 192l-89.6 0 0 89.6 25.6 0 0-64 64 0 0-25.6zM0 0l0 384 128 0 0-128 128 0 0-128 128 0 0-128-384 0z\"]\n};\nvar faFreebsd = {\n  prefix: 'fab',\n  iconName: 'freebsd',\n  icon: [448, 512, [], \"f3a4\", \"M303.7 96.2c11.1-11.1 115.5-77 139.2-53.2 23.7 23.7-42.1 128.1-53.2 139.2s-39.4 .9-63.1-22.9c-23.8-23.7-34.1-52-22.9-63.1zM109.9 68.1C73.6 47.5 22 24.6 5.6 41.1-11 57.7 12.7 110.5 33.5 146.8 52 114.6 78.3 87.5 109.9 68.1zM406.7 174c3.3 11.3 2.7 20.7-2.7 26.1-20.3 20.3-87.5-27-109.3-70.1-18-32.3-11.1-53.4 14.9-48.7 5.7-3.6 12.3-7.6 19.6-11.6-29.8-15.5-63.6-24.3-99.5-24.3-119.1 0-215.6 96.5-215.6 215.6 0 119 96.5 215.6 215.6 215.6S445.3 380.1 445.3 261c0-38.4-10.1-74.5-27.7-105.8-3.9 7-7.6 13.3-10.9 18.8z\"]\n};\nvar faOdysee = {\n  prefix: 'fab',\n  iconName: 'odysee',\n  icon: [512, 512, [], \"e5c6\", \"M406.7 463c-42.3 30.8-94.4 49-150.7 49-111.1 0-205.7-70.8-241.1-169.8 2.4 1.7 5.9 3.6 7.9 4.4 16.3 7.4 40.1-5.4 62.9-28.7 6.9-6.9 14.4-12.4 22.8-17.3 18.3-11.9 37.6-20.8 58.4-27.2 0 0 22.3 34.2 43.1 74.8s-22.3 54-27.2 54c-.3 0-.8 0-1.5-.1-11-.5-70-3-56 51.1 14.9 57.4 97.5 36.6 139.6 8.9s31.7-118.3 31.7-118.3c41.1-6.4 54 37.1 57.9 59.4 .8 4.6 1.1 9.9 1.4 15.5 1.1 21.2 2.3 45.6 35.3 46.4 5.3 0 10.6-.8 15.5-2l0-.1zm-95.3-23.7c-2-.5-3.5-2.5-3-5 1-2.5 3-3.5 5-3s3.5 3 3 5-2.5 3.5-5 3zm-207-95.6c1.5-.5 3.5 1 4 3 0 2-1 4-3 4-1.5 .5-3.5-1-4-3-.5-1.5 1-3.5 3-4zM451.8 421c37.5-44.6 60.2-102.2 60.2-165 0-67.5-26.1-128.9-68.8-174.7-.1 23.5-6.1 48.2-16.8 69.2-11.9 20.3-49 58.9-69.8 78.7-.7 .3-1.1 .9-1.5 1.4-.2 .2-.3 .4-.5 .6-5 6.9-4 16.8 3 21.8 21.3 15.8 56.4 45.6 59.4 72.8 3.5 34.9 27.9 75.6 34.2 86.2 .8 1.3 1.3 2.1 1.4 2.4 0 2.2-.4 4.3-.8 6.5l0 .1zM390.7 251c-.5 3 1 5.9 4 6.4s5.9-1 6.4-4-1-5.9-4-6.4c-3-1-5.9 1-6.4 4zm61.4-60.9l-11.4 5.4-3 12.9-5.4-11.4-12.9-3 11.4-5.4 3-12.9 5.4 11.4 12.9 3zM395.5 41.3c-16.2 8.2-22.1 32.8-29 61.4-.3 1.4-.7 2.8-1 4.2-9.5 38.5-30.6 37.6-41.7 37.2-1.1 0-2-.1-2.9-.1-5.1 0-6-4-8.9-17.1-2.6-12.1-6.9-32-17.9-63.6-22.7-65.8-82.7-49.4-128.2-22.2-55.3 33.1-34.4 101.9-19.8 149.4 .7 2.2 1.4 4.4 2 6.6-4 4-13.8 7.5-26 11.9-12.1 4.3-26.6 9.5-40.3 16.9-33.9 18-70.3 49-79.8 62.6-1.3-10.7-2-21.5-2-32.5 0-141.4 114.6-256 256-256 51.4 0 99.4 15.2 139.5 41.3zM58.9 189.6c-1.5-2-4.5-3-6.4-1.5s-3 4.5-1.5 6.4 4.5 3 6.4 1.5c2.5-1.5 3-4.5 1.5-6.4zM327.3 64.9c2-1.5 5-.5 6.4 1.5 1.5 2.5 1 5.4-1.5 6.4-2 1.5-5 .5-6.4-1.5s-.5-5 1.5-6.4zM95.1 105c-.5 1.5 .5 3 2 3 1.5 .5 3-.5 3-2 .5-1.5-.5-3-2-3s-3 .5-3 2zm84.7-.5c-3.5-43.1 37.1-54 37.1-54 44.1-15.4 56 5.9 66.4 37.6s3 42.6-38.6 58.9-61.9-4.5-64.9-42.6l0 .1zm89.6 14.9l1 0c2.5 0 5-2 5-5 2-6.9 1-14.4-2-20.8-1.5-2-4-3.5-6.4-2.5-3 1-4.5 4-3.5 6.9 2 4.5 3 9.9 1.5 14.9-.5 3 1.5 5.9 4.5 6.4l-.1 .1zm-9.9-41.6c-2 0-4-1-5-3s-2-3.5-3-5c-2-2-2-5.4 0-7.4s5.4-2 7.4 0c2 2.5 3.5 5 5 7.4s.5 5.9-2.5 7.4c-.6 0-1 .2-1.3 .3-.2 .1-.4 .2-.6 .2l0 .1z\"]\n};\nvar faGgCircle = {\n  prefix: 'fab',\n  iconName: 'gg-circle',\n  icon: [512, 512, [], \"f261\", \"M257.5 8a248 248 0 1 0 0 496 248 248 0 1 0 0-496zM208 382.8l-125.7-125.7 125.7-125.7 35.2 35.4-24.2 24.2-11.1-11.1-77.2 77.2 77.2 77.2 26.6-26.6-53.1-52.9 24.4-24.4 77.2 77.2-75 75.2zm99-2.2l-35.2-35.2 24.1-24.4 11.1 11.1 77.2-77.2-77.2-77.2-26.5 26.5 53.1 52.9-24.4 24.4-77.2-77.2 75-75 125.7 125.7-125.7 125.6z\"]\n};\nvar faCloudflare = {\n  prefix: 'fab',\n  iconName: 'cloudflare',\n  icon: [640, 512, [], \"e07d\", \"M407.9 319.9L177.1 317c-.7 0-1.4-.2-2-.5s-1.2-.8-1.6-1.4c-.4-.6-.7-1.3-.7-2s0-1.4 .2-2.1c.4-1.1 1.1-2.1 2.1-2.8s2.1-1.2 3.3-1.2l232.9-2.9c27.6-1.3 57.5-23.6 68-50.8l13.3-34.5c.4-.9 .5-1.9 .5-2.9 0-.5-.1-1.1-.2-1.6-7.4-32.2-25-61.1-50.3-82.3s-56.7-33.7-89.7-35.5-65.6 7.3-93 25.7-48 45.3-58.8 76.5c-11.3-8.5-24.9-13.3-39-13.7s-28 3.5-39.8 11.4-20.8 19.1-25.9 32.3-5.9 27.6-2.4 41.3c-52.3 1.5-94.2 44.1-94.2 96.5 0 4.7 .3 9.3 1 14 .2 1.1 .7 2.1 1.5 2.8s1.9 1.1 2.9 1.1l426.1 .1c0 0 .1 0 .1 0 1.2 0 2.3-.4 3.3-1.1s1.6-1.7 2-2.9l3.3-11.3c3.9-13.4 2.4-25.8-4.1-34.9-6-8.4-16.1-13.3-28.2-13.9zm105.9-98.8c-2.1 0-4.3 .1-6.4 .2-.8 .1-1.5 .3-2.1 .8s-1 1.1-1.3 1.8l-9.1 31.2c-3.9 13.4-2.4 25.8 4.1 34.9 6 8.4 16.1 13.3 28.2 13.9l49.2 2.9c.7 0 1.4 .2 2 .5s1.1 .8 1.5 1.4c.4 .6 .7 1.3 .8 2s0 1.5-.2 2.1c-.4 1.1-1.1 2.1-2.1 2.8s-2.1 1.2-3.3 1.2l-51.1 2.9c-27.8 1.3-57.7 23.6-68.1 50.8l-3.7 9.6c-.2 .4-.2 .8-.2 1.3s.2 .8 .4 1.2 .6 .7 .9 .9 .8 .3 1.2 .3c0 0 .1 0 .1 0l175.9 0c1 0 2-.3 2.8-.9s1.4-1.5 1.7-2.4c3.1-11.1 4.7-22.5 4.7-34 0-69.3-56.5-125.5-126.1-125.5z\"]\n};\nvar faHackerrank = {\n  prefix: 'fab',\n  iconName: 'hackerrank',\n  icon: [512, 512, [], \"f5f7\", \"M477.9 128C463.4 103 285.5 0 256.5 0s-206.9 102.8-221.3 128-14.5 230.8 0 256 192.4 128 221.3 128 206.8-102.9 221.3-128 14.5-231 0-256zM316.5 414.2c-4 0-40.9-35.8-38-38.7 .9-.9 6.3-1.5 17.5-1.8 0-26.2 .6-68.6 .9-86.3 0-2-.4-3.4-.4-5.8l-79.9 0c0 7.1-.5 36.2 1.4 72.9 .2 4.5-1.6 6-5.7 5.9-10.1 0-20.3-.1-30.4-.1-4.1 0-5.9-1.5-5.7-6.1 .9-33.4 3-84-.2-212.7l0-3.2c-9.7-.4-16.4-1-17.3-1.8-2.9-2.9 34.5-38.7 38.5-38.7s41.2 35.8 38.3 38.7c-.9 .9-7.9 1.5-16.8 1.8l0 3.2c-2.4 25.8-2 79.6-2.6 105.4l80.3 0c0-4.6 .4-34.7-1.2-83.6-.1-3.4 1-5.2 4.2-5.2 11.1-.1 22.2-.1 33.2-.1 3.5 0 4.6 1.7 4.5 5.4-3.7 191.3-.7 177.9-.7 210.3 8.9 .4 16.8 1 17.7 1.8 2.9 2.9-33.6 38.7-37.6 38.7l0 0z\"]\n};\nvar faSkyatlas = {\n  prefix: 'fab',\n  iconName: 'skyatlas',\n  icon: [640, 512, [], \"f216\", \"M640 329.3c0 65.9-52.5 114.4-117.5 114.4-165.9 0-196.6-249.7-359.7-249.7-146.9 0-147.1 212.2 5.6 212.2 42.5 0 90.9-17.8 125.3-42.5 5.6-4.1 16.9-16.3 22.8-16.3s10.9 5 10.9 10.9c0 7.8-13.1 19.1-18.7 24.1-40.9 35.6-100.3 61.2-154.7 61.2-83.4 .1-154-59-154-144.9S67.5 149.6 152.8 149.6c185.3 0 222.5 245.9 361.9 245.9 99.9 0 94.8-139.7 3.4-139.7-17.5 0-35 11.6-46.9 11.6-8.4 0-15.9-7.2-15.9-15.6 0-11.6 5.3-23.7 5.3-36.3 0-66.6-50.9-114.7-116.9-114.7-53.1 0-80 36.9-88.8 36.9-6.2 0-11.2-5-11.2-11.2 0-5.6 4.1-10.3 7.8-14.4 25.3-28.8 64.7-43.7 102.8-43.7 79.4 0 139.1 58.4 139.1 137.8 0 6.9-.3 13.7-1.2 20.6 11.9-3.1 24.1-4.7 35.9-4.7 60.7 0 111.9 45.3 111.9 107.2z\"]\n};\nvar faDeskpro = {\n  prefix: 'fab',\n  iconName: 'deskpro',\n  icon: [448, 512, [], \"f38f\", \"M122 406.2l84 0c23.1 0 43.9-3.5 62.6-10.7 18.7-7.1 34.7-17.1 48-30.1 13.3-13.4 23.6-29.2 30.7-47.5 3.9-9.6 6.8-19.8 8.6-30.6l73.7 0c-2.5 21.3-7.7 41.3-15.5 60-11.1 27.2-26.9 50.8-47.3 70.9-20 19.6-44.2 34.8-72.6 45.4s-60 16-94.7 16l-149.8 .2 0-192.4 72.3-.2 0 118.8zM199.4 32c34.7 0 66.2 5.4 94.7 16 28.5 10.7 52.9 26.1 73.3 46.2 20.4 19.6 36.2 43.2 47.3 70.9 7.5 18.3 12.4 38.1 14.9 59.3l-73.7-.1c-1.9-10.5-4.7-20.5-8.6-29.9-7.1-18.7-17.3-34.5-30.7-47.5-13.3-13.4-29.3-23.6-48-30.8-18.6-7.1-39.5-10.7-62.7-10.7l-84 0 0 118.8-72.2 .2 0-192.3 149.7-.1z\"]\n};\nvar faResolving = {\n  prefix: 'fab',\n  iconName: 'resolving',\n  icon: [512, 512, [], \"f3e7\", \"M289.2 278.2c46-13.3 49.6-23.5 44-43.4L322 195.5c-6.1-20.9-18.4-28.1-71.1-12.8l-188.2 54.1 28.6 98.6 197.9-57.2zM256.5 8C139.4 8 41.2 88.7 15.2 197.5l221.9-63.9c34.8-10.2 54.2-11.7 79.3-8.2 36.3 6.1 52.7 25 61.4 55.2l10.7 37.8c8.2 28.1 1 50.6-23.5 73.6-19.4 17.4-31.2 24.5-61.4 33.2l-92.6 26.6 220.4 27.1 9.7 34.2-48.1 13.3-286.8-37.3 23 80.2C166 491.3 209.5 504 255.5 504 392.5 504 504 392.6 504 255.7 505 119.4 393.5 8 256.5 8zM46.3 388.6L8 256.8c0 48.5 14.3 93.4 38.3 131.8z\"]\n};\nvar faBlackberry = {\n  prefix: 'fab',\n  iconName: 'blackberry',\n  icon: [512, 512, [], \"f37b\", \"M166 116.9c0 23.4-16.4 49.1-72.5 49.1l-70.1 0 21-88.8 67.8 0c42.1 0 53.8 23.3 53.8 39.7zM292.2 77.2l-67.8 0-18.7 88.8 70.1 0c53.8 0 70.1-25.7 70.1-49.1 .1-16.4-11.6-39.7-53.7-39.7zM88.8 208.1l-67.8 0-21 88.8 70.1 0c56.1 0 72.5-23.4 72.5-49.1 0-16.3-11.7-39.7-53.8-39.7zm180.1 0l-67.8 0-18.7 88.8 70.1 0c53.8 0 70.1-23.4 70.1-49.1 0-16.3-11.7-39.7-53.7-39.7zm189.3-53.8l-67.8 0-18.7 88.8 70.1 0c53.8 0 70.1-23.4 70.1-49.1 .1-16.3-11.6-39.7-53.7-39.7zm-28 137.9l-67.8 0-18.7 88.8 70.1 0c56.1 0 70.1-23.4 70.1-49.1 0-16.3-11.6-39.7-53.7-39.7zM240.8 346l-67.8 0-18.7 88.8 70.1 0c56.1 0 70.1-25.7 70.1-49.1 .1-16.3-11.6-39.7-53.7-39.7z\"]\n};\nvar faStripeS = {\n  prefix: 'fab',\n  iconName: 'stripe-s',\n  icon: [384, 512, [], \"f42a\", \"M155.6 154.6c0-22.3 18.6-30.9 48.4-30.9 43.4 0 98.5 13.3 141.9 36.7l0-134.3c-47.3-18.9-94.5-26.1-141.8-26.1-115.7 0-192.8 60.4-192.8 161.4 0 157.9 216.8 132.3 216.8 200.4 0 26.4-22.9 34.9-54.7 34.9-47.2 0-108.2-19.5-156.1-45.5l0 128.5c49.3 21.3 102.3 32.3 156 32.4 118.6 0 200.3-51 200.3-153.6 0-170.2-218-139.7-218-203.9z\"]\n};\nvar faSquareBehance = {\n  prefix: 'fab',\n  iconName: 'square-behance',\n  icon: [448, 512, [\"behance-square\"], \"f1b5\", \"M155.3 318.4c17.2 0 31.2-6.1 31.2-25.4 0-19.7-11.7-27.4-30.3-27.5l-46 0 0 52.9 45.1 0zm-5.4-129.6l-39.6 0 0 44.8 42.7 0c15.1 0 25.8-6.6 25.8-22.9 0-17.7-13.7-21.9-28.9-21.9zm129.5 74.8l62.2 0c-1.7-18.5-11.3-29.7-30.5-29.7-18.3 0-30.5 11.4-31.7 29.7zM384 32L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64zM349.5 185l-77.8 0 0-18.9 77.8 0 0 18.9zM193.7 243.7c23.6 6.7 35 27.5 35 51.6 0 39-32.7 55.7-67.6 55.9l-93.1 0 0-192 90.5 0c32.9 0 61.4 9.3 61.4 47.5 0 19.3-9 28.8-26.2 37zm118.7-38.6c43.5 0 67.6 34.3 67.6 75.4 0 1.6-.1 3.3-.2 5 0 .8-.1 1.5-.1 2.2l-100.2 0c0 22.2 11.7 35.3 34.1 35.3 11.6 0 26.5-6.2 30.2-18.1l33.7 0c-10.4 31.9-31.9 46.8-65.1 46.8-43.8 0-71.1-29.7-71.1-73 0-41.8 28.7-73.6 71.1-73.6z\"]\n};\nvar faBehanceSquare = faSquareBehance;\nvar faServicestack = {\n  prefix: 'fab',\n  iconName: 'servicestack',\n  icon: [512, 512, [], \"f3ec\", \"M96 216c81.7 10.2 273.7 102.3 304 232L8 448c99.5-8.1 184.5-137 88-232zM128 64c32.3 35.6 47.7 83.9 46.4 133.6 82.9 33.7 207.3 123.7 233.6 250.4l96 0C463.3 231.9 230.8 79.5 128 64z\"]\n};\nvar faRocketchat = {\n  prefix: 'fab',\n  iconName: 'rocketchat',\n  icon: [576, 512, [], \"f3e8\", \"M284.5 224.8c-6.7 0-13.3 2.1-18.9 5.8s-9.9 9.1-12.5 15.4-3.2 13.1-1.9 19.7 4.6 12.7 9.4 17.4 10.9 8 17.5 9.3 13.5 .6 19.7-2 11.5-7 15.3-12.6 5.7-12.2 5.7-18.9c0-9.1-3.7-17.8-10.1-24.2s-15.1-10-24.2-9.9zm-110.4 0c-6.7 0-13.3 2.1-18.9 5.8s-9.9 9.1-12.5 15.4-3.2 13.1-1.9 19.7 4.6 12.7 9.4 17.4 10.9 8 17.5 9.3 13.5 .6 19.7-2 11.5-7 15.3-12.6 5.7-12.2 5.7-18.9c0-9.1-3.7-17.8-10.1-24.2s-15.1-10-24.2-10l0 0zm220.9 0a34.1 34.1 0 1 0 .4 68.2 34.1 34.1 0 1 0 -.4-68.2zm153.8-55.3c-15.5-24.2-37.3-45.6-64.7-63.6-52.9-34.8-122.4-54-195.7-54-24.2 0-48.3 2.1-72 6.4-14.9-14.3-31.5-26.6-49.5-36.6-66.8-33.3-125.6-20.9-155.3-10.2-2.3 .8-4.3 2.1-5.9 3.9s-2.7 3.9-3.3 6.2-.5 4.7 .1 7.1 1.8 4.4 3.5 6.1C27 56.5 61.6 99.3 53.1 138.3 20 172.2 2 213 2 255.6 2 299 20 339.8 53.1 373.7 61.6 412.7 27 455.6 6 477.2 4.3 479 3.2 481.1 2.5 483.4s-.7 4.7-.1 7 1.7 4.5 3.3 6.2 3.6 3.1 5.9 3.9c29.7 10.7 88.5 23.1 155.3-10.2 18-10 34.7-22.3 49.5-36.6 23.8 4.3 47.9 6.4 72 6.4 73.3 0 142.8-19.2 195.7-54 27.4-18 49.1-39.4 64.7-63.6 17.3-26.9 26.1-55.9 26.1-86.1 0-31-8.8-60-26.1-86.9l0 0zM285.4 409.9c-30.2 .1-60.3-3.8-89.4-11.5l-20.1 19.4c-11.2 10.7-23.6 20-37.1 27.6-16.4 8.2-34.2 13.3-52.5 14.9 1-1.8 1.9-3.6 2.8-5.4 20.2-37.1 25.6-70.5 16.3-100.1-33-26-52.8-59.2-52.8-95.4 0-83.1 104.3-150.5 232.8-150.5s232.9 67.4 232.9 150.5c0 83.1-104.3 150.5-232.9 150.5z\"]\n};\nvar faRebel = {\n  prefix: 'fab',\n  iconName: 'rebel',\n  icon: [512, 512, [], \"f1d0\", \"M256.9 504c-139.3 0-247.5-116.2-243.3-254.1 2.8-79.2 43.2-152.2 116.5-200.4 .3 0 1.9-.6 1.1 .8-5.8 5.5-111.3 129.8-14.1 226.4 49.8 49.5 90 2.5 90 2.5 38.5-50.1-.6-125.9-.6-125.9-10-24.9-45.7-40.1-45.7-40.1l28.8-31.8c24.4 10.5 43.2 38.7 43.2 38.7 .8-29.6-21.9-61.4-21.9-61.4L255.5 8 299.8 58.1c-20.5 28.8-21.9 62.6-21.9 62.6 13.8-23 43.5-39.3 43.5-39.3l28.5 31.8c-27.4 8.9-45.4 39.9-45.4 39.9-15.8 28.5-27.1 89.4 .6 127.3 32.4 44.6 87.7-2.8 87.7-2.8 102.7-91.9-10.5-225-10.5-225-6.1-5.5 .8-2.8 .8-2.8 50.1 36.5 114.6 84.4 116.2 204.8 2 145.6-99.9 249.4-242.4 249.4z\"]\n};\nvar faSquareWebAwesome = {\n  prefix: 'fab',\n  iconName: 'square-web-awesome',\n  icon: [448, 512, [], \"e683\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM235 177.6l53 46.4 52.2-10.4c-2.6-3.9-4.2-8.5-4.2-13.6 0-13.3 10.7-24 24-24s24 10.7 24 24c0 13-10.3 23.6-23.2 24L304.5 349.1c-5.2 11.5-16.6 18.9-29.2 18.9l-102.6 0c-12.6 0-24-7.4-29.2-18.9L87.2 224c-12.9-.4-23.2-11-23.2-24 0-13.3 10.7-24 24-24s24 10.7 24 24c0 5-1.5 9.7-4.2 13.6L160 224 213.1 177.6c-8.9-4.1-15-13.1-15-23.6 0-14.4 11.6-26 26-26s26 11.6 26 26c0 10.5-6.2 19.5-15.1 23.6z\"]\n};\nvar faLinktree = {\n  prefix: 'fab',\n  iconName: 'linktree',\n  icon: [448, 512, [], \"e7d8\", \"M16 173.4l125.8 0-89.4-85.4 49.5-51 85.2 87.8 0-124.8 73.9 0 0 124.8 85.2-87.6 49.4 50.8-89.4 85.2 125.7 0 0 70.5-126.4 0 90 87.6-49.3 49.8-122.2-123-122.2 123-49.5-49.6 90-87.6-126.4 0 0-70.5zM186.9 344.8l73.9 0 0 167.2-73.9 0 0-167.2z\"]\n};\nvar faSimplybuilt = {\n  prefix: 'fab',\n  iconName: 'simplybuilt',\n  icon: [512, 512, [], \"f215\", \"M481.6 64l-106 0C361.1 64 349 75.8 349 90.3l0 39.6-185.3 0 0-39.6c0-14.5-12-26.3-26.6-26.3l-106 0C16.5 64 4.7 75.8 4.7 90.3l0 331.4c0 14.5 11.8 26.3 26.6 26.3l450.4 0c14.8 0 26.6-11.8 26.6-26.3l0-331.4c-.2-14.5-12-26.3-26.7-26.3zM150.5 222.7a66.5 66.5 0 1 1 -.3 133.1 66.5 66.5 0 1 1 .3-133.1zm211.9 .1a66.5 66.5 0 1 1 .3 132.9 66.5 66.5 0 1 1 -.3-132.9z\"]\n};\nvar faStubber = {\n  prefix: 'fab',\n  iconName: 'stubber',\n  icon: [448, 512, [], \"e5c7\", \"M136.5 294.2l58.8 22.9c9.1-36.8 25.4-61.1 55-61.1 49.4 0 71.4 63.6 142.4 63.6 15.6 0 35.9-2.8 55.3-13.3l0 61.7c0 61.8-50.4 112-112.3 112L0 480 41.8 424 0 368 41.7 312 0 256.1 41.8 200.1 0 144.1 41.8 88 0 32 335.7 32C397.6 32 448 82.3 448 144.1l0 51.3c-9.2 36.3-25.9 60.6-55 60.6-49.6 0-71.6-63.5-142.4-63.5-35.9 0-95.2 14.6-114.1 101.6l0 .1z\"]\n};\nvar faApper = {\n  prefix: 'fab',\n  iconName: 'apper',\n  icon: [640, 512, [], \"f371\", \"M42.1 239.1c22.2 0 29 2.8 33.5 14.6l.8 0 0-22.9c0-11.3-4.8-15.4-17.9-15.4-11.3 0-14.4 2.5-15.1 12.8l-38.6 0c.3-13.9 1.5-19.1 5.8-24.4 7.3-8.8 18.9-11.8 46.1-11.8 33 0 47.1 5 53.9 18.9 2 4.3 4 15.6 4 23.7l0 76.3-38.3 0 1.3-19.1-1 0c-5.3 15.6-13.6 20.4-35.5 20.4-30.3 0-41.1-10.1-41.1-37.3 0-25.2 12.3-35.8 42.1-35.8zm17.1 48.1c13.1 0 16.9-3 16.9-13.4 0-9.1-4.3-11.6-19.6-11.6-13.1 0-17.9 3-17.9 12.1-.1 10.4 3.7 12.9 20.6 12.9zM137 192.3l38.3 0-1.5 20.6 .8 0c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.2 10.1-20.4 0-29.2-5.5-33.8-21.2l-.8 0 0 70.3-39.5 0 0-169zM217.9 253c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm57.9-60.7l38.3 0-1.5 20.6 .8 0c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.3 10.1-20.4 0-29.2-5.5-33.8-21.2l-.8 0 0 70.3-39.5 0 0-169 .1 0zM356.7 253c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm53.8-3.8c0-25.4 3.3-37.8 12.3-45.8 8.8-8.1 22.2-11.3 45.1-11.3 42.8 0 55.7 12.8 55.7 55.7l0 11.1-75.3 0c-.3 2-.3 4-.3 4.8 0 16.9 4.5 21.9 20.1 21.9 13.9 0 17.9-3 17.9-13.9l37.5 0 0 2.3c0 9.8-2.5 18.9-6.8 24.7-7.3 9.8-19.6 13.6-44.3 13.6-27.5 0-41.6-3.3-50.6-12.3-8.5-8.5-11.3-21.3-11.3-50.8zm76.4-11.6c-.3-1.8-.3-3.3-.3-3.8 0-12.3-3.3-14.6-19.6-14.6-14.4 0-17.1 3-18.1 15.1l-.3 3.3 38.3 0zm55.6-45.3l38.3 0-1.8 19.9 .7 0c6.8-14.9 14.4-20.2 29.7-20.2 10.8 0 19.1 3.3 23.4 9.3 5.3 7.3 6.8 14.4 6.8 34 0 1.5 0 5 .2 9.3l-35 0c.3-1.8 .3-3.3 .3-4 0-15.4-2-19.4-10.3-19.4-6.3 0-10.8 3.3-13.1 9.3-1 3-1 4.3-1 12.3l0 68-38.3 0 0-118.5 .1 0z\"]\n};\nvar faGoogleScholar = {\n  prefix: 'fab',\n  iconName: 'google-scholar',\n  icon: [512, 512, [], \"e63b\", \"M390.9 298.5s0 .1 .1 .1c9.2 19.4 14.4 41.1 14.4 64-.1 82.5-66.9 149.4-149.4 149.4S106.7 445.1 106.7 362.7c0-22.9 5.2-44.6 14.4-64 1.7-3.6 3.6-7.2 5.6-10.7 4.4-7.6 9.4-14.7 15-21.3 27.4-32.6 68.5-53.3 114.4-53.3 33.6 0 64.6 11.1 89.6 29.9 9.1 6.9 17.4 14.7 24.8 23.5 5.6 6.6 10.6 13.8 15 21.3 2 3.4 3.8 7 5.5 10.5l-.1-.1zm26.4-18.8c-30.1-58.4-91-98.4-161.3-98.4s-131.2 40-161.3 98.4l-94.7-77 256-202.7 256 202.7-94.7 77.1 0-.1z\"]\n};\nvar faYarn = {\n  prefix: 'fab',\n  iconName: 'yarn',\n  icon: [512, 512, [], \"f7e3\", \"M401.9 345.2c-39 9.3-48.4 32.1-104 47.4 0 0-2.7 4-10.4 5.8-13.4 3.3-63.9 6-68.5 6.1-12.4 .1-19.9-3.2-22-8.2-6.4-15.3 9.2-22 9.2-22-8.1-5-9-9.9-9.8-8.1-2.4 5.8-3.6 20.1-10.1 26.5-8.8 8.9-25.5 5.9-35.3 .8-10.8-5.7 .8-19.2 .8-19.2s-5.8 3.4-10.5-3.6c-6-9.3-17.1-37.3 11.5-62-1.3-10.1-4.6-53.7 40.6-85.6 0 0-20.6-22.8-12.9-43.3 5-13.4 7-13.3 8.6-13.9 5.7-2.2 11.3-4.6 15.4-9.1 20.6-22.2 46.8-18 46.8-18s12.4-37.8 23.9-30.4c3.5 2.3 16.3 30.6 16.3 30.6s13.6-7.9 15.1-5c8.2 16 9.2 46.5 5.6 65.1-6.1 30.6-21.4 47.1-27.6 57.5-1.4 2.4 16.5 10 27.8 41.3 10.4 28.6 1.1 52.7 2.8 55.3 .8 1.4 13.7 .8 36.4-13.2 12.8-7.9 28.1-16.9 45.4-17 16.7-.5 17.6 19.2 4.9 22.2zM8 256a248 248 0 1 1 496 0 248 248 0 1 1 -496 0zm416.7 75.2c-1.7-13.6-13.2-23-28-22.8-22 .3-40.5 11.7-52.8 19.2-4.8 3-8.9 5.2-12.4 6.8 3.1-44.5-22.5-73.1-28.7-79.4 7.8-11.3 18.4-27.8 23.4-53.2 4.3-21.7 3-55.5-6.9-74.5-1.6-3.1-7.4-11.2-21-7.4-9.7-20-13-22.1-15.6-23.8-1.1-.7-23.6-16.4-41.4 28-12.2 .9-31.3 5.3-47.5 22.8-2 2.2-5.9 3.8-10.1 5.4l.1 0c-8.4 3-12.3 9.9-16.9 22.3-6.5 17.4 .2 34.6 6.8 45.7-17.8 15.9-37 39.8-35.7 82.5-34 36-11.8 73-5.6 79.6-1.6 11.1 3.7 19.4 12 23.8 12.6 6.7 30.3 9.6 43.9 2.8 4.9 5.2 13.8 10.1 30 10.1 6.8 0 58-2.9 72.6-6.5 6.8-1.6 11.5-4.5 14.6-7.1 9.8-3.1 36.8-12.3 62.2-28.7 18-11.7 24.2-14.2 37.6-17.4 12.9-3.2 21-15.1 19.4-28.2z\"]\n};\nvar faStackOverflow = {\n  prefix: 'fab',\n  iconName: 'stack-overflow',\n  icon: [384, 512, [], \"f16c\", \"M291 311l-195.7-41.3-8.2 39.3 195.7 41 8.2-39zm51-87L188.5 95.7 163 126.5 316.5 254.8 342 224zm-31.2 39.7L129.5 179 112.8 215.5 294 300 310.8 263.7zM262.3 32l-32 24 119.3 160.3 32-24-119.3-160.3zm20.5 328l-200 0 0 39.7 200 0 0-39.7zm39.7 80l-279.5 0 0-120-40 0 0 160 359.5 0 0-160-40 0 0 120z\"]\n};\nvar faBluetooth = {\n  prefix: 'fab',\n  iconName: 'bluetooth',\n  icon: [384, 512, [], \"f293\", \"M260.6 171.1l-42.9 42.9-.3-86 43.2 43.1zM217.4 390.9l43.1-43.1-42.9-42.9-.2 86zM384 259.4C384 465 312.1 512 198.9 512S0 465 0 259.4 83.4 0 196.6 0 384 53.9 384 259.4zm-158.5 0l79.4-88.6-125.1-134.3 0 176.9-73.8-73.8-27 26.9 92.7 93-92.7 93 26.9 26.9 73.8-73.8 2.3 170 127.4-127.5-83.9-88.7z\"]\n};\nvar faCreativeCommonsNcJp = {\n  prefix: 'fab',\n  iconName: 'creative-commons-nc-jp',\n  icon: [512, 512, [], \"f4ea\", \"M255.7 8C111.6 8 8 124.8 8 256 8 392.4 119.8 504 255.7 504 385.9 504 504 403.2 504 256 504 117.2 396.5 8 255.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-21.1 3-41.2 9-60.3l127 56.5-27.9 0 0 38.6 58.1 0 5.7 11.8 0 18.7-63.8 0 0 38.7 63.8 0 0 56 61.7 0 0-56 64.2 0 0-35.7 81 36.1c-1.5 2.2-57.1 98.3-175.2 98.3zm87.6-137.3l-57.6 0 0-18.7 2.9-5.6 54.7 24.3zm6.5-51.4l0-17.8-38.6 0 63-116-65.8 0-43.4 96-23-10.2-39.6-85.7-65.8 0 27.3 51-81.9-36.5c27.8-44.1 82.6-98.1 173.7-98.1 112.8 0 203 90 203 203.4 0 21-2.7 40.6-7.9 59L350.4 270z\"]\n};\nvar faReddit = {\n  prefix: 'fab',\n  iconName: 'reddit',\n  icon: [512, 512, [], \"f1a1\", \"M0 256C0 114.6 114.6 0 256 0S512 114.6 512 256 397.4 512 256 512L37.1 512c-13.7 0-20.5-16.5-10.9-26.2L75 437C28.7 390.7 0 326.7 0 256zM349.6 153.6c23.6 0 42.7-19.1 42.7-42.7s-19.1-42.7-42.7-42.7c-20.6 0-37.8 14.6-41.8 34-34.5 3.7-61.4 33-61.4 68.4l0 .2c-37.5 1.6-71.8 12.3-99 29.1-10.1-7.8-22.8-12.5-36.5-12.5-33 0-59.8 26.8-59.8 59.8 0 24 14.1 44.6 34.4 54.1 2 69.4 77.6 125.2 170.6 125.2s168.7-55.9 170.6-125.3c20.2-9.6 34.1-30.2 34.1-54 0-33-26.8-59.8-59.8-59.8-13.7 0-26.3 4.6-36.4 12.4-27.4-17-62.1-27.7-100-29.1l0-.2c0-25.4 18.9-46.5 43.4-49.9 4.4 18.8 21.3 32.8 41.5 32.8l.1 .2zM177.1 246.9c16.7 0 29.5 17.6 28.5 39.3s-13.5 29.6-30.3 29.6-31.4-8.8-30.4-30.5 15.4-38.3 32.1-38.3l.1-.1zm190.1 38.3c1 21.7-13.7 30.5-30.4 30.5s-29.3-7.9-30.3-29.6 11.8-39.3 28.5-39.3 31.2 16.6 32.1 38.3l.1 .1zm-48.1 56.7c-10.3 24.6-34.6 41.9-63 41.9s-52.7-17.3-63-41.9c-1.2-2.9 .8-6.2 3.9-6.5 18.4-1.9 38.3-2.9 59.1-2.9s40.7 1 59.1 2.9c3.1 .3 5.1 3.6 3.9 6.5z\"]\n};\nvar faConnectdevelop = {\n  prefix: 'fab',\n  iconName: 'connectdevelop',\n  icon: [576, 512, [], \"f20e\", \"M550.8 241l-50.1-86.8c1.1-2.1 1.9-4.6 1.9-7.2 0-8-6.7-14.7-14.7-15L432.4 36.1c.5-1.6 1.1-3.2 1.1-4.8 0-8.6-7-15.3-15.3-15.3-4.8 0-8.8 2.1-11.8 5.6l-106.6 0c-2.7-3.5-6.7-5.6-11.5-5.6s-8.8 2.1-11.5 5.6l-106.1 0c-2.9-3.5-7-5.6-11.8-5.6-8.3 0-15.3 6.7-15.3 15.3 0 1.6 .5 3.5 1.1 4.8l-56 97.2c-5.4 2.4-9.1 7.5-9.1 13.7 0 .5 .3 1.1 .3 1.6L26.6 240.7c-7.2 1.3-12.6 7.5-12.6 15 0 7.2 5.1 13.4 12.1 15l55.2 95.4c-.5 1.6-.8 2.9-.8 4.8 0 7.2 5.1 13.4 12.1 14.7l51.7 89.7c-.5 1.6-1.1 3.5-1.1 5.4 0 8.6 7 15.3 15.3 15.3 4.8 0 8.8-2.1 11.5-5.4l106.9 0c2.7 3.2 7 5.4 11.5 5.4s8.8-2.1 11.5-5.4l107.1 0c2.7 2.9 6.7 4.8 11 4.8 8.6 0 15.3-7 15.3-15.3 0-1.6-.3-2.9-.8-4.3l51.7-90.3c7-1.3 12.1-7.5 12.1-14.7 0-1.6-.3-3.2-.8-4.8l54.9-95.4c7-1.3 12.3-7.5 12.3-15 0-7.2-5.1-13.4-11.8-14.7zm-397 209.7l-43.7-75.8 43.7 0 0 75.8zm0-83.8l-43.7 0c-.3-1.1-.8-2.1-1.3-3.2l45-47.4 0 50.6zm0-62.4l-50.4 53.3c-1.3-.5-2.7-1.3-4-1.6L43.7 259.8c.5-1.3 .5-2.7 .5-4s0-2.4-.3-3.5l52-90c2.7-.3 5.4-1.1 7.8-2.7l50.1 52 0 92.9zm0-102.3L108 154.8c1.3-2.1 2.1-4.8 2.1-7.8 0-.3-.3-.8-.3-1.1l43.9-15.8 0 72.1zm0-80.6l-43.7 15.8 43.7-75.5 0 59.7zm326.5 39.1l.8 1.3-35.4 167.1-63.8-67.2 98-101.5 .3 .3zM292.1 355.1l11.5 11.8-22.8 0 11.3-11.8zm-.3-11.3l-83.3-85.4 79.6-84.4 83 87.6-79.3 82.2zm5.4 5.9l79.3-82.2 67.5 71.3-5.9 28.1-124 0-16.9-17.1zM410.7 44.4c1.1 .5 2.1 1.1 3.5 1.3l57.9 100.7 0 .5c0 2.9 .8 5.6 2.1 7.8l-97.5 101.2-83-87.6 117.1-124zm-9.1-2.1l-113.6 120.3-57.1-60.3 166.3-60 4.3 0zm-123.5 0c2.7 2.7 6.2 4.3 10.2 4.3s7.5-1.6 10.2-4.3l75 0-148.4 53.6-50.9-53.6 103.9 0zM161.9 47.9l1.1-2.1c.9-.2 1.8-.5 2.7-.8l51.2 53.8-54.9 19.8 0-70.7zm0 79.3l60.8-22 59.7 63.2-79.6 84.1-41-42.1 0-83.3zm0 92.7l36.4 37.8-36.4 38.3 0-76.1zm0 87.9l42.1-44.5 82.8 86-17.1 17.7-107.7 0 0-59.2zm7 162.1c-1.6-1.6-3.5-2.7-5.9-3.5l-1.1-1.6 0-89.7 99.9 0-91.6 94.8-1.3 0zm129.9 0c-2.7-2.4-6.4-4.3-10.4-4.3s-7.8 1.9-10.4 4.3l-96.4 0 91.6-94.8 38.3 0 91.6 94.8-104.2 0zm120-11.8l-4.3 7.5c-1.3 .3-2.4 .8-3.5 1.3l-89.2-91.9 114.4 0-17.4 83zm12.9-22.2l12.9-60.8 22 0-34.8 60.8zm34.8-68.8l-20.4 0 4.6-21.2 17.1 18.2c-.5 .8-1.1 1.9-1.3 2.9zm66.2-107.4l-55.4 96.7c-1.3 .5-2.7 1.1-4 1.9l-20.6-22 34.6-163.9 45.8 79.3c-.3 1.3-.8 2.7-.8 4.3 0 1.3 .3 2.4 .5 3.7z\"]\n};\nvar faResearchgate = {\n  prefix: 'fab',\n  iconName: 'researchgate',\n  icon: [448, 512, [], \"f4f8\", \"M0 32l0 448 448 0 0-448-448 0zM262.2 366.4c-6.6 3-33.2 6-50-14.2-9.2-10.6-25.3-33.3-42.2-63.6-8.9 0-14.7 0-21.4-.6l0 46.4c0 23.5 6 21.2 25.8 23.9l0 8.1c-6.9-.3-23.1-.8-35.6-.8-13.1 0-26.1 .6-33.6 .8l0-8.1c15.5-2.9 22-1.3 22-23.9l0-109.4c0-22.6-6.4-21-22-23.9l0-8.1c25.8 1 53.1-.6 70.9-.6 31.7 0 55.9 14.4 55.9 45.6 0 21.1-16.7 42.2-39.2 47.5 13.6 24.2 30 45.6 42.2 58.9 7.2 7.8 17.2 14.7 27.2 14.7l0 7.3zm22.9-135c-23.3 0-32.2-15.7-32.2-32.2l0-32.2c0-12.2 8.8-30.4 34-30.4s30.4 17.9 30.4 17.9l-10.7 7.2s-5.5-12.5-19.7-12.5c-7.9 0-19.7 7.3-19.7 19.7l0 26.8c0 13.4 6.6 23.3 17.9 23.3 14.1 0 21.5-10.9 21.5-26.8l-17.9 0 0-10.7 30.4 0c0 20.5 4.7 49.9-34 49.9zM168.6 276.1c-9.4 0-13.6-.3-20-.8l0-69.7c6.4-.6 15-.6 22.5-.6 23.3 0 37.2 12.2 37.2 34.5 0 21.9-15 36.6-39.7 36.6z\"]\n};\nvar faSignalMessenger = {\n  prefix: 'fab',\n  iconName: 'signal-messenger',\n  icon: [512, 512, [], \"e663\", \"M256 0c-13.3 0-26.3 1-39.1 3l3.7 23.7C232.1 24.9 244 24 256 24s23.9 .9 35.4 2.7L295.1 3C282.3 1 269.3 0 256 0zm60.8 7.3l-5.7 23.3c23.4 5.7 45.4 14.9 65.4 27.1l12.5-20.5c-22.1-13.4-46.4-23.6-72.2-29.9zm76.4 61.6c19.1 14 36 30.9 50.1 50.1l19.4-14.2C447 83.6 428.4 65 407.3 49.5L393.1 68.8zm81.7 54.2l-20.5 12.5c12.2 20 21.4 42 27.1 65.4l23.3-5.7c-6.3-25.8-16.5-50.1-29.9-72.2zm10.5 97.5c1.8 11.5 2.7 23.4 2.7 35.4s-.9 23.9-2.7 35.4l23.7 3.7c1.9-12.7 3-25.8 3-39.1s-1-26.3-3-39.1l-23.7 3.7zm-31 155.9l20.5 12.5c13.4-22.1 23.6-46.4 29.9-72.2l-23.3-5.7c-5.7 23.4-14.9 45.4-27.1 65.4zm8.2 30.8l-19.4-14.2c-14 19.1-30.9 36-50.1 50.1l14.2 19.4c21.1-15.5 39.8-34.1 55.2-55.2zm-86.1 47c-20 12.2-42 21.4-65.4 27.1l5.7 23.3c25.8-6.3 50.1-16.5 72.2-29.9l-12.5-20.5zM295.1 509l-3.7-23.7C279.9 487.1 268 488 256 488s-23.9-.9-35.4-2.7L216.9 509c12.7 1.9 25.8 3 39.1 3s26.3-1 39.1-3zm-94.1-27.6c-17.6-4.3-34.4-10.6-50.1-18.6l-7.8-4-32.8 7.7 5.5 23.4 24.3-5.7c17.4 8.9 35.9 15.8 55.3 20.5l5.7-23.3zM95.4 494.6L90 471.3 48.3 481c-10.4 2.4-19.7-6.9-17.3-17.3l9.7-41.6-23.4-5.5-9.7 41.6C1.2 486 26 510.8 53.8 504.4l41.6-9.7zm-50-92.9l7.7-32.8-4-7.8c-8-15.7-14.3-32.5-18.6-50.1L7.3 316.7C12 336.1 18.9 354.7 27.7 372l-5.7 24.3 23.4 5.5zM3 295.1l23.7-3.7C24.9 279.9 24 268 24 256s.9-23.9 2.7-35.4L3 216.9C1 229.7 0 242.7 0 256s1 26.3 3 39.1zm27.6-94.1c5.7-23.4 14.9-45.4 27.1-65.4L37.2 123.1c-13.4 22.1-23.6 46.4-29.9 72.2l23.3 5.7zm18.9-96.2l19.4 14.2c14-19.1 30.9-36 50.1-50.1L104.7 49.5C83.6 65 65 83.6 49.5 104.7zm86.1-47c20-12.2 42-21.4 65.4-27.1L195.2 7.3c-25.8 6.3-50.1 16.5-72.2 29.9l12.5 20.5zM256 464c114.9 0 208-93.1 208-208S370.9 48 256 48 48 141.1 48 256c0 36.4 9.4 70.7 25.8 100.5 1.6 2.9 2.1 6.2 1.4 9.4l-21.6 92.5 92.5-21.6c3.2-.7 6.5-.2 9.4 1.4 29.8 16.5 64 25.8 100.5 25.8z\"]\n};\nvar faXing = {\n  prefix: 'fab',\n  iconName: 'xing',\n  icon: [384, 512, [], \"f168\", \"M162.7 210c-1.8 3.3-25.2 44.4-70.1 123.5-4.9 8.3-10.8 12.5-17.7 12.5L9.8 346c-7.7 0-12.1-7.5-8.5-14.4l69-121.3c.2 0 .2-.1 0-.3L26.4 134.4c-4.3-7.8 .3-14.1 8.5-14.1l65.1 0c7.3 0 13.3 4.1 18 12.2L162.7 210zM382.6 46.1l-144 253 0 .3 91.6 166.6c3.9 7.1 .2 14.1-8.5 14.1l-65.2 0c-7.6 0-13.6-4-18-12.2L146.1 299.4c3.3-5.8 51.5-90.8 144.8-255.2 4.6-8.1 10.4-12.2 17.5-12.2l65.7 0c8 0 12.3 6.7 8.5 14.1z\"]\n};\nvar faSquareJs = {\n  prefix: 'fab',\n  iconName: 'square-js',\n  icon: [448, 512, [\"js-square\"], \"f3b9\", \"M448 96c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320zM180.9 444.9c-33.7 0-53.2-17.4-63.2-38.5L152 385.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5l0-143.1 42.1 0 0 143.7c0 43.6-25.6 63.5-62.9 63.5zm85.8-43L301 382.1c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6-39.1 0-64.4-18.6-76.7-43z\"]\n};\nvar faJsSquare = faSquareJs;\nvar faFonticons = {\n  prefix: 'fab',\n  iconName: 'fonticons',\n  icon: [448, 512, [], \"f280\", \"M0 32l0 448 448 0 0-448-448 0zM187 172.9c-18.4 0-19 9.9-19 27.4l0 23.3c0 2.4-3.5 4.4-.6 4.4l67.4 0-11.1 37.3-55.7 0 0 112.9c0 5.8-2 6.7 3.2 7.3l43.5 4.1 0 25.1-130.7 0 0-25.7 21.3-2c5.2-.6 6.7-2.3 6.7-7.9l0-111.4c0-2.3-2.9-2.3-5.8-2.3l-22.2 0 0-37.4 28 0 0-21c0-49.6 26.5-70 77.3-70 34.1 0 64.7 8.2 64.7 52.8l-50.7 6.1c.3-18.7-4.4-23-16.3-23zm74.3 241.8l0-25.1 20.4-2.6c5.2-.6 7.6-1.7 7.6-7.3l0-107.9c0-4.1-2.9-6.7-6.7-7.9l-24.2-6.4 6.7-29.5 80.2 0 0 151.7c0 5.8-2.6 6.4 2.9 7.3l15.7 2.6 0 25.1-102.6 0zm80.8-255.5l9 33.2-7.3 7.3-31.2-16.6-31.2 16.6-7.3-7.3 9-33.2-21.8-24.2 3.5-9.6 27.7 0 15.5-28 9.3 0 15.5 28 27.7 0 3.5 9.6-21.9 24.2z\"]\n};\nvar faUps = {\n  prefix: 'fab',\n  iconName: 'ups',\n  icon: [384, 512, [], \"f7e0\", \"M103.2 303c-5.2 3.6-32.6 13.1-32.6-19l0-104-32.7 0 0 102.6c0 74.9 80.2 51.1 97.9 39l0-141.6-32.6 0 0 123zM4 74.8L4 295.7c0 103.7 74.9 135.2 187.7 184.1 112.4-48.9 187.7-80.2 187.7-184.1l0-220.9C263.1 13.2 97.6 25.2 4 74.8zM362.1 295.7c0 86.6-53.2 113.6-170.4 165.3-117.5-51.8-170.5-78.7-170.5-165.3l0-126.4c102.3-93.8 231.6-100 340.9-89.8l0 216.2zM152.5 188.3l0 212.8 32.7 0 0-68.7c24.4 7.3 71.7-2.6 71.7-78.5 0-97.4-80.7-80.9-104.4-65.6zm32.7 117.3l0-100.3c8.4-4.2 38.4-12.7 38.4 49.3 0 67.9-36.4 51.8-38.4 51zm79.1-86.4c.1 47.3 51.6 42.5 52.2 70.4 .6 23.5-30.4 23-50.8 4.9l0 30.1c36.2 21.5 81.9 8.1 83.2-33.5 1.7-51.5-54.1-46.6-53.4-73.2 .6-20.3 30.6-20.5 48.5-2.2l0-28.4c-28.5-22-79.9-9.2-79.7 31.9z\"]\n};\nvar faAmazonPay = {\n  prefix: 'fab',\n  iconName: 'amazon-pay',\n  icon: [640, 512, [], \"f42c\", \"M14 325.3c2.3-4.2 5.2-4.9 9.7-2.5 10.4 5.6 20.6 11.4 31.2 16.7 40.6 20.2 83.3 35.8 127.4 46.3 20.8 5 41.9 9 63.2 11.8 31.5 4.2 63.2 6 95 5.2 17.4-.4 34.8-1.8 52.1-3.8 56.2-6.6 111.1-21 163.3-42.8 2.9-1.2 5.9-2 9.1-1.2 6.7 1.8 9 9 4.1 13.9-3 2.7-6.2 5.2-9.6 7.4-30.7 21.1-64.2 36.4-99.6 47.9-24.5 7.9-49.6 13.8-75.1 17.6-17.6 2.7-35.4 4.3-53.2 4.8-.8 0-1.7 .2-2.5 .3l-21.1 0c-.8-.1-1.7-.2-2.5-.3-3.6-.2-7.2-.3-10.7-.4-16.9-.8-33.7-2.5-50.4-5.3-27.4-4.5-54.3-11.5-80.4-20.9-53.7-19.4-103.1-48.9-145.6-87-1.8-1.6-3-3.8-4.4-5.7l0-2zM172 65.1l-4.3 .6c-13.8 1.7-26.8 6.9-38 15.1-2.4 1.7-4.6 3.5-7.1 5.4-.2-.4-.3-.9-.4-1.4-.4-2.7-.8-5.5-1.3-8.2-.7-4.6-3-6.6-7.6-6.6l-11.5 0c-6.9 0-8.2 1.3-8.2 8.2l0 209.3c0 1 0 2 .1 3 .2 3 2 4.9 4.9 5 7 .1 14.1 .1 21.1 0 2.9 0 4.7-2 5-5 .1-1 .1-2 .1-3l0-72.4c1.1 .9 1.7 1.4 2.2 1.9 17.9 14.9 38.5 19.8 61 15.4 20.4-4 34.6-16.5 43.8-34.9 7-13.9 9.9-28.7 10.3-44.1 .5-17.1-1.2-33.9-8.1-49.8-8.5-19.6-22.6-32.5-43.9-36.9-3.2-.7-6.5-1-9.8-1.5-2.8-.1-5.5-.1-8.3-.1zM124.6 107c-.1-.7 .1-1.3 .4-1.9s.8-1.1 1.3-1.4c13.7-9.5 28.8-14.5 45.6-13.2 14.9 1.1 27.1 8.4 33.5 25.9 3.9 10.7 4.9 21.8 4.9 33 0 10.4-.8 20.6-4 30.6-6.8 21.3-22.4 29.4-42.6 28.5-14-.6-26.2-6-37.4-13.9-.6-.3-1-.8-1.3-1.4s-.4-1.2-.4-1.9c.1-14.1 0-28.1 0-42.2s.1-28 0-42.1zM330.3 65.1c-1 .1-2 .3-2.9 .4-9.7 .4-19.4 1.8-28.9 4.1-6.1 1.6-12 3.8-17.9 5.8-3.6 1.2-5.4 3.8-5.3 7.7 .1 3.3-.1 6.6 0 9.9 .1 4.8 2.1 6.1 6.8 4.9 7.8-2 15.6-4.2 23.5-5.7 12.3-2.3 24.7-3.3 37.2-1.4 6.5 1 12.6 2.9 16.8 8.4 3.7 4.8 5.1 10.5 5.3 16.4 .3 8.3 .2 16.6 .3 24.9 0 .5-.1 .9-.2 1.4-.5-.1-.9 0-1.3-.1-10.5-2.6-21.2-4.2-32-4.9-11.3-.6-22.5 .1-33.3 3.9-12.9 4.5-23.3 12.3-29.4 24.9-4.7 9.8-5.4 20.2-3.9 30.7 2 14 9 24.8 21.4 31.7 11.9 6.6 24.8 7.4 37.9 5.4 15.1-2.3 28.5-8.7 40.3-18.4 .5-.4 1-.8 1.6-1.1 .6 3.8 1.1 7.4 1.8 11 .6 3.1 2.5 5.1 5.4 5.2 5.4 .1 10.9 .1 16.3 0 1.3 0 2.5-.5 3.4-1.4s1.4-2.1 1.5-3.3c.1-.9 .1-1.9 .1-2.8l0-106c0-4.3-.3-8.6-.9-12.9-1.9-12.9-7.4-23.5-19-30.4-6.7-4-14.1-6-21.8-7.1-3.6-.5-7.2-.8-10.8-1.3-3.9 .1-7.9 .1-11.9 .1zm35 127.7c0 .6-.1 1.2-.3 1.7s-.7 1-1.2 1.3c-11.2 8.1-23.5 13.5-37.4 14.9-5.7 .6-11.4 .4-16.8-1.8-3-1.1-5.6-2.9-7.8-5.2s-3.7-5.1-4.6-8.1c-2-6.3-2-13.1-.1-19.4 2.5-8.3 8.4-13 16.4-15.6 8-2.4 16.5-3.2 24.8-2.2 8.4 .7 16.6 2.3 25 3.4 1.6 .2 2.1 1 2.1 2.6-.1 4.8 0 9.5 0 14.3s-.2 9.4-.1 14.1zM625.2 322.2c-1-5-4.8-6.9-9.1-8.3-6.8-2.1-13.9-3.5-21-3.9-13.1-1.1-26.3-.5-39.2 1.9-14.3 2.7-27.9 7.3-40 15.6-1.4 .9-2.7 2.1-3.7 3.5-.4 .6-.6 1.3-.7 1.9s0 1.4 .2 2.1c.4 1.5 2.1 1.9 3.6 1.8 .7 0 1.5 0 2.2-.1 7.8-.8 15.5-1.7 23.3-2.5 11.4-1.1 22.9-1.8 34.3-.9 4.9 .4 9.7 1.3 14.4 2.7 5.1 1.4 7.4 5.2 7.6 10.4 .4 8-1.4 15.7-3.5 23.3-4.1 15.4-10 30.3-15.8 45.1-.4 1-.8 2-1 3-.5 2.9 1.2 4.8 4.1 4.1 1.8-.4 3.4-1.3 4.8-2.5 4.5-4.2 8.8-8.7 12.7-13.4 12.8-16.4 20.3-35.3 24.7-55.6 .8-3.6 1.4-7.3 2.1-10.9l0-17.3zM493.1 199c-12.9-35.7-25.8-71.4-38.7-107.2-2-5.7-4.2-11.3-6.3-16.9-1.1-2.9-3.2-4.8-6.4-4.8-7.6-.1-15.2-.2-22.9-.1-2.5 0-3.7 2-3.2 4.5 .5 2.1 1.1 4.1 1.9 6.1 19.6 48.5 39.3 97 59.1 145.5 1.7 4.1 2.1 7.6 .2 11.8-3.3 7.3-5.9 15-9.3 22.3-3 6.5-8 11.4-15.2 13.3-5 1.3-10.2 1.7-15.4 1.1-2.5-.2-5-.8-7.5-1-3.4-.2-5.1 1.3-5.2 4.8-.1 3.3-.1 6.6 0 9.9 .1 5.5 2 8 7.4 8.9 5.6 1.1 11.2 1.8 16.9 2 17.1 .4 30.7-6.5 39.5-21.4 3.5-5.9 6.6-12 9.2-18.4 23.7-59.8 47.2-119.7 70.6-179.6 .7-1.8 1.3-3.6 1.6-5.5 .4-2.8-.9-4.4-3.7-4.4-6.6-.1-13.3 0-19.9 0-1.7-.1-3.4 .3-4.7 1.3s-2.4 2.3-3 3.9c-.5 1.4-1.1 2.7-1.6 4.1l-34.8 100c-2.5 7.2-5.1 14.5-7.7 22.2-.4-1.1-.6-1.7-.9-2.4z\"]\n};\nvar faPandora = {\n  prefix: 'fab',\n  iconName: 'pandora',\n  icon: [384, 512, [], \"e7da\", \"M201.3 32L0 32 0 480 120.2 480c11.2 0 20.3-9.1 20.3-20.3l0-86.1 30.1 0c147.1 0 207.3-82.9 207.3-179.9 0-119.7-90.9-161.8-176.5-161.8z\"]\n};\nvar faOpenid = {\n  prefix: 'fab',\n  iconName: 'openid',\n  icon: [448, 512, [], \"f19b\", \"M271.5 432l-68 32C88.5 453.7 0 392.5 0 318.2 0 246.7 82.5 187.2 191.7 173.9l0 43c-71.5 12.5-124 53-124 101.3 0 51 58.5 93.3 135.7 103l0-340 68-33.2 0 384 .1 0zM448 291l-131.3-28.5 36.8-20.7c-19.5-11.5-43.5-20-70-24.8l0-43c46.2 5.5 87.7 19.5 120.3 39.3l35-19.8 9.2 97.5z\"]\n};\nvar faVsco = {\n  prefix: 'fab',\n  iconName: 'vsco',\n  icon: [512, 512, [], \"e7dd\", \"M357.6 256c0-27.1-10.6-52.5-29.7-71.7s-44.6-29.7-71.7-29.7l-.1 0c-27.1 0-52.6 10.6-71.7 29.7s-29.7 44.6-29.7 71.7c0 27.1 10.6 52.5 29.7 71.7 19.2 19.2 44.6 29.7 71.7 29.7l.1 0c27.1 0 52.6-10.6 71.7-29.7 19.2-19.2 29.7-44.6 29.7-71.7zM176.3 482.1c23 8.1 47 12.6 71.6 13.4l0-59.1c-17.1-.7-33.5-3.8-49-8.9l-22.6 54.6zm137-54.6c-15.5 5.1-32 8.2-49 8.9l0 59.1c24.6-.8 48.6-5.3 71.6-13.4l-22.6-54.6zM92.5 431.2c20.2 18.9 43.3 34 68.7 45l22.5-54.5c-18.3-7.9-35.1-18.8-49.8-31.9L92.5 431.2zm285.9-41.4c-14.6 13.2-31.4 24-49.8 31.9l22.5 54.5c25.4-11 48.4-26.1 68.7-45l-41.4-41.4zM145.4 378.2c13.6 12.1 29 21.9 45.8 29 18 7.6 37.1 12 56.7 12.9l0-46.8c-26.4-1.8-50.3-12.3-69.1-28.6l-33.4 33.4zm188-33.4c-18.8 16.3-42.7 26.8-69.1 28.6l0 46.8c19.6-.9 38.7-5.3 56.7-12.9 16.8-7.1 32.2-16.9 45.8-29l-33.4-33.4zM38.5 356.6c10.7 23.2 25 44.3 42.5 63.1l41.3-41.3c-12.4-13.4-22.9-28.6-30.9-45.2L38.5 356.6zm382.4-23.5c-8 16.6-18.5 31.9-30.9 45.2l41.3 41.3c17.5-18.7 31.8-39.9 42.5-63.1l-52.9-23.5zm-331-69c1.1 18.8 5.4 37.2 12.8 54.5 7.5 17.8 18 34 31.2 48.2l33.5-33.5c-16.4-18.8-26.9-42.8-28.7-69.2l-48.8 0zm283.7 0c-1.8 26.4-12.3 50.4-28.7 69.2l33.5 33.5c13.1-14.2 23.6-30.4 31.2-48.2 7.3-17.4 11.6-35.7 12.7-54.5l-48.7 0zm-357.1 0c.9 26.7 6.1 52.7 15.6 77.5L85 318.2c-6.4-17-10.3-35.1-11.3-54l-57.1 0zm422.1 0c-1 18.9-5 37.1-11.3 54l52.8 23.5c9.5-24.8 14.7-50.8 15.6-77.5l-57.1 0zM32.1 170.4c-9.5 24.8-14.7 50.8-15.6 77.5l57.1 0c1-18.9 5-37.1 11.3-54L32.1 170.4zm101.7-25.2c-13.1 14.2-23.6 30.4-31.2 48.2-7.3 17.4-11.6 35.7-12.8 54.5l48.8 0c1.8-26.4 12.3-50.4 28.7-69.2l-33.5-33.5zm211.1 33.5c16.4 18.8 26.9 42.8 28.7 69.2l48.7 0c-1.1-18.8-5.4-37.2-12.7-54.5-7.5-17.8-18-34-31.2-48.2l-33.5 33.5zm82.4 15.2c6.4 17 10.3 35.1 11.3 54l57.1 0c-.9-26.7-6.1-52.7-15.6-77.5l-52.8 23.5zM81 92.3C63.4 111 49.2 132.2 38.5 155.4l52.9 23.5c8-16.6 18.5-31.9 30.9-45.2L81 92.3zm309 41.3c12.4 13.4 22.9 28.6 30.9 45.2l52.9-23.5c-10.7-23.2-25-44.3-42.5-63.1L390 133.7zM248 91.8c-19.6 .9-38.7 5.3-56.7 12.9-16.8 7.1-32.2 16.9-45.8 29l33.4 33.4c18.8-16.3 42.7-26.8 69.1-28.6l0-46.7zm16.3 46.7c26.4 1.8 50.3 12.3 69.1 28.6l33.4-33.4c-13.6-12.1-29-21.9-45.8-29-18-7.6-37.1-12-56.7-12.9l0 46.7zM161.2 35.8c-25.4 11-48.4 26.1-68.7 45l41.4 41.4c14.7-13.2 31.4-24 49.8-31.9L161.2 35.8zM328.6 90.3c18.3 7.9 35.1 18.8 49.8 31.9l41.4-41.4c-20.2-18.9-43.3-34-68.7-45L328.6 90.3zM248 16.4c-24.6 .8-48.6 5.3-71.6 13.4l22.6 54.6c15.5-5.1 32-8.2 49-8.9l0-59.1zm16.3 59.1c17.1 .7 33.5 3.8 49 8.9l22.6-54.6c-23-8.1-47-12.6-71.6-13.4l0 59.1zM512.2 264.2l-.2 0C507.8 399 399.2 507.7 264.3 511.9l0 .1-16.3 0 0-.1C113.1 507.7 4.5 399 .2 264.1l-.2 0 0-16.3 .2 0C4.5 113 113.1 4.3 248 .1l0-.1 16.3 0 0 .1C399.2 4.3 507.8 113 512 247.9l.2 0 0 16.3z\"]\n};\nvar faGlobaleaks = {\n  prefix: 'fab',\n  iconName: 'globaleaks',\n  icon: [448, 512, [], \"e85d\", \"M411.2 32.2c20.2 0 36.8 16.6 36.8 36.9l0 373.8c0 20.2-16.6 36.9-36.8 36.9l-94.4 0 28-79.4c3.1-8.8-1.6-18.7-10.4-21.8-1.6-.5-2.6-1-4.2-1s-3.6 0-5.2 .5c-5.2 1-9.9 5.2-11.9 10.9l-6.2 16.6 0-67.5c0-10.9-7.8-19.7-18.2-21.8l-7.2 0c-.5 0-1 0-1.6 .5-.5 0-1 .5-1.6 .5-2.6 1-5.2 2.6-7.2 4.1l0-4.1c0-5.7-2.6-10.4-5.7-14l-1-1c-1-1-2.6-2.1-4.2-2.6l0-26.5c0-5.2-4.1-9.3-9.3-9.3l-39.9 0c-6.7 0-11.4-7.3-8.3-13.5L283.1 84.1c14.5-31.1 45.6-51.4 80.4-51.9l47.7 0zm-166 0c17.6 0 30.1 16.1 28 32.2-2.6 3.6-4.7 7.8-6.2 10.9L186.6 241.5c-8.8 18.7 4.2 40 24.4 40l30.6 0 0 16.1c-7.8 3.1-13 10.9-13 19.7l0 3.6c-3.6-3.6-8.8-5.7-14.5-5.7-11.9 0-21.8 9.9-21.8 21.8l0 19.2-3.1 0c-9.3 0-17.1 7.8-17.1 17.1l0 105.9-95.4 0c-42 0-72.6-40.5-61.2-81.5 1-3.1 4.2-5.2 7.3-4.7l21.2 0c24.4 0 44.6-20.2 44.6-45.2l0-4.2c0-24.9-19.7-45.2-44.6-45.2-.5 0-1-.5-1-1l8.8-32.7c2.1-6.2-2.6-11.9-8.8-11.9l-33.2 0c-6.7 0-11.4-7.3-8.3-13.5L76.7 84.7c16.1-32.2 48.2-52.4 84-52.4l84.5 0zM133.7 144.4c-10.4 0-18.7 8.3-18.7 18.7 0 9.9 8.3 18.7 18.7 18.7 10.4 0 18.7-8.3 18.7-18.7s-8.3-18.7-18.7-18.7zm202.8 0a18.6 18.6 0 1 0 -.2 37.2 18.6 18.6 0 1 0 .2-37.2z\"]\n};\nvar faVenmo = {\n  prefix: 'fab',\n  iconName: 'venmo',\n  icon: [640, 512, [], \"e85a\", \"M67.8 202.7c2.4 5 3.9 11 3.9 19.8 0 16.2-11.5 39.8-20.7 54.9l-9.9-79.7-41 3.9 18.8 112 46.9 0c20.5-26.9 45.8-65.3 45.8-94.8 0-9.3-1.9-16.6-6.3-23.7l-37.4 7.5zm113-7.1c-42.8 0-63.5 37-63.5 71.9 0 26.9 12.8 48.5 48.4 48.5 14 0 28.5-3 37.8-7.5l5-33.6c-13.2 6.7-23.3 9.3-33.9 9.3-9.7 0-17.1-5.2-17.1-18.3 22-.2 60-9.3 60-38.8 0-18.3-13.2-31.5-36.7-31.5l0 0zm-22.5 48.9c1.1-12.9 11-22 18.6-22 4.3 0 8 2.6 8 7.7 0 10.8-19 14.2-26.6 14.2l0 0zm150.2-48.9c-15.3 0-26.1 5.8-34.3 11.2l-.4-9.3-34.8 0-18.4 116.1 40.2 0 12.7-81.4c3.5-1.7 8.6-4.1 13.8-4.1 3.9 0 7.1 1.3 7.1 6.5 0 2.2-.7 6-.9 8l-11.2 71.1 40 0 12.3-77.5c.7-4.1 1.3-10.3 1.3-14.6 0-15.5-7.1-25.9-27.4-25.9zm183.2 0c-14.9 0-25.7 4.5-37.2 12.7-4.1-7.3-12.3-12.7-24.8-12.7-14.5 0-25.3 5.8-33.3 11.6l-1.1-9.7-34.4 0-18.4 116.1 40.2 0 12.8-81.4c3.5-1.7 8.6-4.1 13.8-4.1 3.9 0 7.1 1.3 7.1 7.1 0 1.5-.4 3.9-.6 5.8l-11.4 72.6 40 0 12.7-81.4c3.7-1.9 8.6-4.1 13.6-4.1 3.9 0 7.1 1.3 7.1 7.1 0 1.5-.4 3.9-.7 5.8l-11.4 72.6 40 0 12.3-77.5c.7-4.1 1.3-10.3 1.3-14.6 0-15.5-7.1-25.9-27.7-25.9l0 0zm102.2 0c-44.7 0-64.2 34.3-64.2 70.9 0 27.8 11.2 50 45.1 50 45.8 0 65-37.5 65-73.7 0-27.4-12.3-47.2-46-47.2zm-13.4 90c-7.1 0-10.1-6.7-10.1-17.5 0-14.2 3.2-42 19-42 7.1 0 9.5 6.5 9.5 15.9 0 14.2-3.5 43.5-18.4 43.5z\"]\n};\nvar faUbuntu = {\n  prefix: 'fab',\n  iconName: 'ubuntu',\n  icon: [576, 512, [], \"f7df\", \"M469.2 75c0-20.1-8-39.3-22.2-53.5s-33.4-22.2-53.5-22.2-39.3 8-53.5 22.2-22.2 33.4-22.2 53.5c0 20.1 8 39.3 22.1 53.5s33.4 22.1 53.5 22.1 39.3-8 53.5-22.1 22.1-33.4 22.1-53.5l.1 0zm-315 165.7a75.6 75.6 0 1 0 -151.2 0 75.6 75.6 0 1 0 151.2 0zM57 346c18.6 46.9 51 87 93 115.1s91.5 42.6 142 41.7c-14.7-18.6-22.9-41.5-23.2-65.2-6.8-.9-13.3-2.1-19.5-3.4-26.8-5.7-51.9-17.3-73.6-34s-39.3-38.1-51.7-62.5c-20.9 9.9-44.5 12.8-67.1 8.2l.1 .1zm395.1 89.8a75.6 75.6 0 1 0 -151.2 0 75.6 75.6 0 1 0 151.2 0zM444 351.6c18.5 14.8 31.6 35.2 37.2 58.2 33.3-41.3 52.6-92.2 54.8-145.2s-12.5-105.4-42.2-149.4c-8.6 21.5-24 39.6-43.8 51.6 15.4 28.6 22.9 60.8 21.9 93.2s-10.7 64-28 91.6l.1 0zM101.1 135.4c12.4 2.7 24.3 7.5 35.1 14.3 16.6-24.2 38.9-44.1 64.8-58S255.8 70.4 285.2 70c.2-5.9 .9-11.9 2-17.7 3.6-16.7 11.1-32.3 21.8-45.5-47.7-3.8-95.4 6-137.6 28.5S94.3 91.7 70.8 133.4c2.7-.2 5.3-.3 8-.3 7.5 0 15 .8 22.4 2.3l-.1 0z\"]\n};\nvar faViacoin = {\n  prefix: 'fab',\n  iconName: 'viacoin',\n  icon: [384, 512, [], \"f237\", \"M384 32l-64 0-80.7 192-94.5 0-80.8-192-64 0 48 112-48 0 0 48 68.5 0 13.8 32-82.3 0 0 48 102.8 0 89.2 208 89.2-208 102.8 0 0-48-82.3 0 13.8-32 68.5 0 0-48-48 0 48-112zM192 336l-27-64 54 0-27 64z\"]\n};\nvar faZhihu = {\n  prefix: 'fab',\n  iconName: 'zhihu',\n  icon: [640, 512, [], \"f63f\", \"M170.5 148.1l0 217.5 23.4 0 7.7 26.4 42-26.4 49.5 0 0-217.5-122.7 0zm97.8 193.9l-27.9 0-27.9 17.5-5.1-17.5-11.9 0 0-170.3 72.8 0 0 170.3zM149.8 247.7l-52.3 0c1.7-27.1 2.2-51.6 2.2-73.5l51.2 0s2-22.6-8.6-22.3l-88.5 0c3.5-13.1 7.9-26.7 13.1-40.7 0 0-24.1 0-32.3 21.6-3.4 8.9-13.2 43.1-30.7 78.1 5.9-.6 25.4-1.2 36.8-22.2 2.1-5.9 2.5-6.7 5.1-14.5l28.9 0c0 10.5-1.2 66.9-1.7 73.4l-52.3 0c-11.7 0-15.6 23.6-15.6 23.6l65.6 0c-4.4 49.9-28 91.9-70.8 125.1 20.5 5.9 40.9-.9 51-9.9 0 0 23-20.9 35.6-69.3l54 64.9s7.9-26.9-1.2-40c-7.6-8.9-28.1-33.1-36.8-41.8L87.9 312c4.4-14 7-27.6 7.9-40.7l61.6 0s-.1-23.6-7.6-23.6l0 0zm412-1.6c20.8-25.6 45-58.6 45-58.6s-18.6-14.8-27.4-4.1c-6 8.2-36.8 48.2-36.8 48.2l19.2 14.4zM411.8 187c-9-8.2-25.9 2.1-25.9 2.1s39.5 55 41.1 57.4l19.5-13.7s-25.7-37.6-34.7-45.9l0 0 0 0zM640 258.4c-19.8 0-130.9 .9-131.1 .9l0-101c4.8 0 12.4-.4 22.8-1.2 40.9-2.4 70.1-4 87.8-4.8 0 0 12.2-27.2-.6-33.4-3.1-1.2-23.2 4.6-23.2 4.6s-165.2 16.5-232.4 18c1.6 8.8 7.6 17.1 15.8 19.6 13.3 3.5 22.7 1.7 49.2 .9 24.8-1.6 43.7-2.4 56.5-2.4l0 99.8-133.5 0s2.8 22.3 25.5 22.9l107.9 0 0 70.9c0 14-11.2 22-24.5 21.1-14.1 .1-26.1-1.1-41.7-1.8 2 4 6.3 14.4 19.3 21.8 9.9 4.8 16.2 6.6 26 6.6 29.6 0 45.7-17.3 44.9-45.3l0-73.3 122.4 0c9.7 0 8.7-23.8 8.7-23.8l0 0z\"]\n};\nvar faYandex = {\n  prefix: 'fab',\n  iconName: 'yandex',\n  icon: [256, 512, [], \"f413\", \"M153.1 315.8L65.7 512 2 512 98 302.2C52.9 279.3 22.8 237.8 22.8 161.1 22.7 53.7 90.8 0 171.7 0l82.3 0 0 512-55.1 0 0-196.2-45.8 0zM198.9 46.5l-29.4 0c-44.4 0-87.4 29.4-87.4 114.6 0 82.3 39.4 108.8 87.4 108.8l29.4 0 0-223.4z\"]\n};\nvar faPixiv = {\n  prefix: 'fab',\n  iconName: 'pixiv',\n  icon: [448, 512, [], \"e640\", \"M96 32C43 32 0 75 0 128L0 384c0 53 43 96 96 96l256 0c53 0 96-43 96-96l0-256c0-53-43-96-96-96L96 32zm77.7 217.3a60.1 60.1 0 1 0 120.3 0 60.1 60.1 0 1 0 -120.3 0zM119.1 387.8c-.3-.8-.5-1.7-.5-2.6l0-244.3c0-1.8 .7-3.6 2-4.9s3-2 4.9-2l16.9 0c1.2 0 2.3 .3 3.3 .8s1.9 1.3 2.5 2.3l14 21.8c19.7-15.6 44.5-25 71.6-25 63.6 0 115.2 51.6 115.2 115.2S297.5 364.5 233.8 364.5c-22 0-42.6-6.2-60.1-16.9l0 37.6c0 .9-.2 1.8-.5 2.6s-.9 1.6-1.5 2.2-1.4 1.1-2.2 1.5-1.7 .5-2.6 .5l-41.3 0c-.9 0-1.8-.2-2.6-.5s-1.6-.9-2.2-1.5-1.1-1.4-1.5-2.2z\"]\n};\nvar faOpenai = {\n  prefix: 'fab',\n  iconName: 'openai',\n  icon: [512, 512, [], \"e7cf\", \"M196.4 185.8l0-48.6c0-4.1 1.5-7.2 5.1-9.2l97.8-56.3c13.3-7.7 29.2-11.3 45.6-11.3 61.4 0 100.4 47.6 100.4 98.3 0 3.6 0 7.7-.5 11.8L343.3 111.1c-6.1-3.6-12.3-3.6-18.4 0L196.4 185.8zM424.7 375.2l0-116.2c0-7.2-3.1-12.3-9.2-15.9L287 168.4 329 144.3c3.6-2 6.7-2 10.2 0L437 200.7c28.2 16.4 47.1 51.2 47.1 85 0 38.9-23 74.8-59.4 89.6l0 0zM166.2 272.8l-42-24.6c-3.6-2-5.1-5.1-5.1-9.2l0-112.6c0-54.8 42-96.3 98.8-96.3 21.5 0 41.5 7.2 58.4 20L175.4 108.5c-6.1 3.6-9.2 8.7-9.2 15.9l0 148.5 0 0zm90.4 52.2l-60.2-33.8 0-71.7 60.2-33.8 60.2 33.8 0 71.7-60.2 33.8zm38.7 155.7c-21.5 0-41.5-7.2-58.4-20l100.9-58.4c6.1-3.6 9.2-8.7 9.2-15.9l0-148.5 42.5 24.6c3.6 2 5.1 5.1 5.1 9.2l0 112.6c0 54.8-42.5 96.3-99.3 96.3l0 0zM173.8 366.5L76.1 310.2c-28.2-16.4-47.1-51.2-47.1-85 0-39.4 23.6-74.8 59.9-89.6l0 116.7c0 7.2 3.1 12.3 9.2 15.9l128 74.2-42 24.1c-3.6 2-6.7 2-10.2 0zm-5.6 84c-57.9 0-100.4-43.5-100.4-97.3 0-4.1 .5-8.2 1-12.3l100.9 58.4c6.1 3.6 12.3 3.6 18.4 0l128.5-74.2 0 48.6c0 4.1-1.5 7.2-5.1 9.2l-97.8 56.3c-13.3 7.7-29.2 11.3-45.6 11.3l0 0zm127 60.9c62 0 113.7-44 125.4-102.4 57.3-14.9 94.2-68.6 94.2-123.4 0-35.8-15.4-70.7-43-95.7 2.6-10.8 4.1-21.5 4.1-32.3 0-73.2-59.4-128-128-128-13.8 0-27.1 2-40.4 6.7-23-22.5-54.8-36.9-89.6-36.9-62 0-113.7 44-125.4 102.4-57.3 14.8-94.2 68.6-94.2 123.4 0 35.8 15.4 70.7 43 95.7-2.6 10.8-4.1 21.5-4.1 32.3 0 73.2 59.4 128 128 128 13.8 0 27.1-2 40.4-6.7 23 22.5 54.8 36.9 89.6 36.9z\"]\n};\nvar faSith = {\n  prefix: 'fab',\n  iconName: 'sith',\n  icon: [448, 512, [], \"f512\", \"M0 32l69.7 118.8-58.9-11.5 69.8 91c-3 17-3 34.4 0 51.4l-69.8 91 58.9-11.5-69.7 118.8 118.8-69.7-11.5 58.9 91-69.8c17 3 34.5 3 51.5 0l91 69.8-11.5-58.9 118.7 69.7-69.7-118.8 58.9 11.5-69.8-91c3-17 3-34.4 0-51.4l69.8-91-58.9 11.5 69.7-118.8-118.7 69.7 11.5-58.9-91.1 69.9c-8.5-1.5-17.1-2.3-25.7-2.3s-17.2 .8-25.7 2.3L107.2 42.8 118.8 101.7 0 32zM224 380.2a124.2 124.2 0 1 1 0-248.4 124.2 124.2 0 1 1 0 248.4zm0-211.8a87.6 87.6 0 1 0 0 175.1 87.6 87.6 0 1 0 0-175.1z\"]\n};\nvar faJulia = {\n  prefix: 'fab',\n  iconName: 'julia',\n  icon: [640, 512, [], \"e852\", \"M124 406.5c0 16.1-1.8 29.1-5.4 39s-8.8 17.6-15.5 23.1-14.7 9.1-24.1 11-19.8 2.8-31.2 2.8c-15.5 0-27.3-2.4-35.5-7.3S0 464.5 0 457.7c0-5.6 2.3-10.4 6.9-14.3s10.8-5.8 18.5-5.8c5.8 0 10.4 1.6 13.9 4.7s6.3 6.2 8.6 9.3c2.6 3.4 4.8 5.6 6.5 6.8s3.4 1.7 4.8 1.7c3.1 0 5.4-1.8 7-5.4s2.4-10.7 2.4-21.2l0-198.7 55.4-15.2 0 186.9zm78.9-181.6l0 127.9c0 3.6 .7 6.9 2.1 10s3.3 5.8 5.7 8.1 5.2 4.1 8.5 5.4 6.7 2.1 10.4 2.1c4.2 0 8.9-2.3 14.7-6.4 9.2-6.4 14.7-10.9 14.7-16.1l0-131 55.1 0 0 181.6-55.1 0 0-16.9c-7.3 6.1-15 11-23.2 14.7s-16.2 5.6-23.9 5.6c-9 0-17.4-1.5-25.1-4.5s-14.5-7-20.3-12.2-10.4-11.2-13.7-18.1c-3.3-6.9-5-14.3-5-22.2l0-127.9 55.1 0zM391.4 406.5l-54.9 0 0-254.6 54.9-15.2 0 269.8zm22.9-171.7l55.1-15.2 0 186.9-55.1 0 0-171.7zm170.3 77.9c-5.3 2.3-10.7 4.9-16.1 7.9s-10.3 6.2-14.7 9.8-8 7.3-10.8 11.4-4.1 8.2-4.1 12.6c0 3.4 .4 6.6 1.3 9.8s2.1 5.8 3.8 8.1 3.4 4.1 5.3 5.4 4 2.1 6.3 2.1c4.5 0 9.1-1.4 13.7-4.1s9.7-6.2 15.4-10.4l0-52.5zM640 406.5l-55.4 0 0-14.5c-3.1 2.6-6 5-8.9 7.1s-6.2 4.1-9.8 5.7-7.7 2.9-12.2 3.8c-4.5 .9-9.8 1.3-15.9 1.3-8.4 0-15.9-1.2-22.6-3.6-6.7-2.4-12.4-5.7-17-9.9s-8.3-9.1-10.8-14.9c-2.5-5.7-3.8-12-3.8-18.7 0-6.9 1.3-13.2 4-18.9 2.7-5.6 6.3-10.7 10.9-15.2 4.6-4.5 9.9-8.5 16.1-12.1s12.7-6.8 19.7-9.8 14.3-5.7 21.9-8.2 15.1-4.9 22.5-7.1l6-1.5 0-17.9c0-11.6-2.2-19.8-6.6-24.7s-10.4-7.3-17.8-7.3c-8.7 0-14.8 2.1-18.1 6.3s-5.1 9.3-5.1 15.2c0 3.4-.4 6.7-1.1 9.9-.7 3.2-2 6-3.7 8.5s-4.3 4.4-7.6 5.8c-3.3 1.5-7.5 2.2-12.5 2.2-7.7 0-14-2.2-18.9-6.6-4.8-4.4-7.3-10-7.3-16.8 0-6.3 2.1-12.1 6.4-17.5 4.3-5.4 10-10 17.3-13.9 7.3-3.9 15.6-6.9 25.1-9.2s19.6-3.4 30.2-3.4c13.1 0 24.3 1.2 33.7 3.5s17.2 5.7 23.3 10 10.6 9.6 13.5 15.7 4.4 13 4.4 20.6l0 136.1zM60 172.9a37.4 37.4 0 1 1 74.9 0 37.4 37.4 0 1 1 -74.9 0zM452.2 95a37.4 37.4 0 1 1 74.9 0 37.4 37.4 0 1 1 -74.9 0zm45 77.9a37.4 37.4 0 1 1 74.9 0 37.4 37.4 0 1 1 -74.9 0zm-89.9 0a37.4 37.4 0 1 1 74.9 0 37.4 37.4 0 1 1 -74.9 0z\"]\n};\nvar faObsStudio = {\n  prefix: 'fab',\n  iconName: 'obs-studio',\n  icon: [512, 512, [], \"e8c0\", \"M269.2 .3C404.5 7.2 512 119 512 256l-.3 13.2C504.8 404.5 392.9 512 256 512l-13.2-.3C112 505 7 400.1 .3 269.2L0 256C0 114.6 114.6 0 256 0l13.2 .3zM256 16a240 240 0 1 0 0 480 240 240 0 1 0 0-480zm0 471.9a231.9 231.9 0 1 1 0-463.8 231.9 231.9 0 1 1 0 463.8zM199.2 40.8c-62.2 31.8-87.6 107.4-57.4 170.3 .3 .6 .6 1.2 .9 1.8 .2 .3 .3 .5 .4 .8 .1 .2 .1 .3 .2 .5 .2 .2 .2 .2 .5 .2l4.1 0c2.5 .1 5 .2 7.5 .4 47.5 4.5 86.1 40.5 93.8 87.6 1.7 10.5 1.8 21.2 .3 31.7-2.8 19.8-11.2 38.4-24.3 53.7-7.5 8.7-16.3 16.1-26.2 22-19.7 11.6-42.7 16.5-65.4 13.9-4.1-.5-8.2-1.1-12.2-2.1-2.6-.6-5.2-1.3-7.8-2.2 11.5 5.1 23.6 8.5 36.1 10 11.6 1.4 23.4 1.3 34.9-.4 20.7-3.1 40.4-11.2 57.2-23.7 12.4-9.1 23-20.4 31.4-33.2 .4-.6 .8-1.1 1.1-1.7 .2-.2 .5-.6 .4-.8-.2-.4-.3-.7-.6-1-.7-1.3-1.4-2.6-2-4-1.3-2.7-2.5-5.5-3.5-8.2-2.2-5.7-3.8-11.6-4.9-17.6-2.4-12.9-2.4-26.1 0-39 2.1-10.9 5.9-21.5 11.3-31.2 18.3-33.3 53.2-54 91.1-54.2 2.6 0 5.1 0 7.7 .2 2.5 .2 5 .4 7.4 .8 2.4 .3 4.8 .7 7.3 1.2 2.4 .5 4.7 1.1 7.1 1.8 2.3 .6 4.5 1.4 6.7 2.2 2.3 .8 4.5 1.7 6.7 2.7 2.3 1 4.4 2.1 6.7 3.2 2.2 1.2 4.3 2.4 6.4 3.6 1.9 1.2 3.9 2.5 5.7 3.8 1.9 1.4 3.8 2.8 5.6 4.3 1.9 1.5 3.7 3.2 5.5 4.8 1.9 1.8 3.7 3.6 5.5 5.6 1.7 1.9 3.4 3.9 5.1 5.9 1.8 2.3 3.5 4.6 5.1 7.1 1.6 2.5 3.1 5 4.6 7.6 2 3.6 3.7 7.4 5.3 11.3 1.7 4.2 3.1 8.5 4.2 12.8-3.1-23.3-12.5-45.3-27.2-63.7-10.8-13.5-24.3-24.7-39.5-32.9-15.6-8.4-32.8-13.5-50.5-14.9-1.6-.2-3.1-.3-4.6-.4-28.8 50.2-93 67.6-143.2 38.8-.9-.5-1.9-1.1-2.7-1.7-8.8-5.4-16.8-12.1-23.6-19.9-18.1-20.4-27.5-47.1-26.3-74.3 .2-3.1 .4-6.1 .8-9.1s.9-5.9 1.6-8.9c.7-3 1.5-6 2.4-9 .9-2.8 1.9-5.7 3.1-8.5 1.2-2.9 2.5-5.7 4-8.5 1.5-2.9 3.2-5.7 5-8.5 1.6-2.5 3.4-5 5.2-7.4 2.1-2.6 4.2-5.1 6.5-7.5 2.3-2.4 4.7-4.7 7.2-6.9 2.5-2.3 5.2-4.3 8-6.3 1.4-1 2.8-2 4.3-2.9z\"]\n};\nvar faNfcDirectional = {\n  prefix: 'fab',\n  iconName: 'nfc-directional',\n  icon: [512, 512, [], \"e530\", \"M211.8 488.6c1.6 2.5 2.1 5.6 1.4 8.5-.6 2.9-2.4 5.5-4.9 7.1-2.6 1.6-5.6 2.1-8.6 1.5-61.4-13.9-115.6-49.9-152.2-101.2S-5.4 290.3 1.6 227.7c7-62.7 36.8-120.5 83.7-162.5 46.9-42 107.7-65.2 170.7-65.2 1.5 0 2.1 .3 4.3 .9 1.4 .6 1.8 1.4 3.7 2.5 1.1 1.1 1.9 2.3 2.5 3.7 .5 1.4 .8 2.8 .8 4.3l0 101 24.5-25.9c1-1.1 2.2-2 3.6-2.6 1.3-.6 2.8-.9 4.3-1 1.5-.1 2.9 .2 4.3 .7s2.7 1.3 3.8 2.4c1 1 1.9 2.2 2.5 3.6 .6 1.3 1 2.8 1 4.3s-.2 3-.7 4.3c-.6 1.4-1.4 2.6-2.4 3.7l-44 46.6c-1.1 1.1-2.3 2-3.7 2.6-1.5 .6-3 .9-5.4 .9-.6 0-2.2-.3-3.6-.9s-2.7-1.5-3.7-2.6l-44.1-46.6c-2-2.2-3.1-5.1-3-8.1 0-3 1.3-6.7 3.5-7.9 2.2-2.1 5.1-3.2 8.1-3.1 3 .1 5.8 1.3 7.9 3.5l24.5 26 0-89.5c-56.4 2.8-109.8 25.8-150.5 65-40.6 39.1-65.7 91.7-70.6 147.9S34.4 348.1 67.7 393.7c32.4 45.5 82 77.5 137 89.9 2.9 .7 5.5 2.5 7.1 5zM171.4 126.1c-.8 1.3-1.9 2.4-3.1 3.2-20.5 13.9-37.2 32.6-48.8 54.5s-17.7 46.3-17.7 71.1 6.1 49.2 17.7 70.2c11.6 22.8 28.3 41.5 48.8 55.4 2.5 1.7 4.2 4.3 4.7 7.3 .6 2.9-.9 6-1.7 8.4-1.7 2.5-5.2 4.2-7.3 3.9-2.9 1.4-6 .8-8.4-.9-23.6-16-42.8-37.5-56.1-62.7-13.3-25.1-20.3-53.1-20.3-81.6 0-28.4 7-56.5 20.3-81.6 13.3-25.2 32.5-46.7 56.1-62.7 1.2-.8 2.6-1.4 4-1.8 1.5-.3 3-.3 4.5 0 1.4 .2 2.8 .8 4.1 1.6s2.3 1.9 3.2 3.1c.8 1.2 1.4 2.6 1.7 4.1s.3 3 0 4.4c-.3 1.5-.8 2.9-1.7 4.1zM340.9 383.5c.8-1.2 1.9-2.3 2.2-3.1l0-.1c21.3-14 38-32.7 49.6-54.6 11.5-21.8 17.5-46.2 17.5-70.9s-6-49.1-17.5-71c-11.6-22.7-28.3-40.5-49.6-54.5-.3-.8-1.4-1.9-2.2-3.1-.8-1.3-1.4-2.7-1.6-4.1-1.2-1.5-.3-3 0-4.4 .3-1.5 .9-2.9 1.7-4.1 .9-1.2 1.1-2.3 3.2-3.1 1.2-.8 2.6-1.3 4.1-1.6s2.9-.3 4.4 0 2.8 .9 4.1 1.8c23.4 16 42.7 37.5 55.9 62.6 13.3 25.1 19.4 53.1 19.4 81.5 0 28.5-6.1 56.5-19.4 81.6-13.2 25.1-32.5 46.6-55.9 62.6-1.3 .9-2.6 1.5-4.1 1.8s-2.9 .3-4.4 0-2.9-1.7-4.1-1.6c-2.1-.8-2.3-1.9-3.2-3.1-.8-1.2-1.4-2.6-1.7-4.1-.3-1.4-1.2-2.9 0-4.4 .2-1.4 .8-2.8 1.6-4.1zM312.3 6.3c56.2 12.7 106.4 44 142.7 88.7 30.4 37.6 49.6 83 55.3 131 5.6 48-2.4 96.7-23.2 140.3-20.9 43.6-53.6 80.5-94.5 106.3-40.9 25.7-88.2 39.4-136.6 39.4-1.5 0-2.9-.3-4.3-.9-1.4-.5-2.6-1.4-3.7-2.4-1.9-1.1-1.9-2.3-2.4-3.7-.6-1.4-.9-2.8-.9-4.3l0-99.2-24.5 26c-2.1 2.2-4.9 2.6-7.9 3.6-3 .1-5.9-1.1-8.1-4-2.2-1.2-3.5-4-3.5-7-.1-3 1-5.9 3-8.1l44.1-46.6c1.3-2.2 5.1-3.4 7.3-3.4 4 0 6.9 1.2 9.1 3.4l44 46.6c2.1 2.2 3.2 5.1 3.1 8.1s-1.4 5.8-3.5 7c-2.2 2.9-5.1 4.1-8.1 4-3-1-5.9-1.4-7.9-3.6l-24.5-25.9 0 87.5c56.4-2.8 109.8-25.8 150.5-65 40.7-40 65.8-91.7 70.7-147.9 4.8-57.1-10.8-112.3-44.1-157.9-33.3-45.6-82-77.5-137-89.9-1.5-.3-2.8-.9-4.1-1.8-1.2-.9-2.2-1.9-3-3.2-.8-1.2-2.2-2.6-1.6-4.1-.2-1.5-.2-3 .1-4.4 .4-1.4 1-2.8 1.8-4 .9-1.2 2-2.2 3.2-3 1.3-.8 2.7-1.3 4.1-1.6 1.5-.3 3-.2 4.4 .1zm40.8 249.8c0 31.4-17.5 61.1-49.3 83.5-2.1 1.5-4.8 2.3-7.4 2-2.7-.2-5.2-1.3-7-3.2l-70.1-69.8c-2.2-2.1-4.2-5-3.4-8 0-3 1.2-5.9 3.3-8 2.2-2.1 5-3.3 8-3.3s5.9 1.2 8 3.3l63.1 62.8c20.8-17.1 32.2-37.9 32.2-59.3 0-23.9-14.1-47-39.7-65.1-2.5-1.7-4.1-4.3-4.6-7.3-.5-2.9 .1-6 1.9-8.4 1.7-2.5 4.3-4.1 7.3-4.6 2.9-.5 6 .1 8.4 1.9 31.8 22.4 49.3 52.1 49.3 83.5zM216.7 341.5c-3 .5-6-.2-8.5-1.9-31.7-22.4-50.1-52.1-50.1-83.5s18.4-61.1 50.1-83.5c2.2-1.6 4.9-2.3 7.5-2.1 2.7 .3 5.1 1.4 7 3.3l70.1 69.8c2.1 2.1 3.3 5 3.3 8s-2 5.8-3.3 8c-2.1 2.1-5 3.3-7.9 3.3-3 0-6.8-1.2-8-3.3l-63.1-62.9c-20.9 17.3-32.2 38-32.2 59.4 0 23 14.1 47 39.7 65 2.4 1.8 4.1 4.4 4.6 7.4 .5 2.9-.2 5.9-1.9 8.4-1.7 2.4-4.4 4.1-7.3 4.6z\"]\n};\nvar faStorybook = {\n  prefix: 'fab',\n  iconName: 'storybook',\n  icon: [448, 512, [], \"e8c1\", \"M10.5 35.1L27 474.1c.5 13.9 11.6 25.1 25.5 25.7l357 16c.4 0 .8 0 1.2 0 14.8 0 26.7-12 26.7-26.7l0-478.4c0-.6 0-1.1-.1-1.7-.9-14.7-13.6-25.9-28.4-25l-29.4 1.8 2.1 61.4c.1 2.2-1.6 4-3.8 4.1-.9 0-1.9-.3-2.6-.9L355.6 35 332.2 52.7c-1.8 1.3-4.3 1-5.6-.8-.6-.7-.8-1.6-.8-2.6L328.3-10.9 35.6 7.4C21.1 8.3 10 20.6 10.5 35.1zM339.7 187.8c-9.4 7.3-79.5 12.3-79.5 1.9 1.5-39.7-16.3-41.4-26.2-41.4-9.4 0-25.2 2.8-25.2 24.1 0 21.7 23.1 33.9 50.2 48.3 38.5 20.4 85.1 45.1 85.1 107.2 0 59.6-48.4 92.5-110.1 92.5-63.7 0-119.4-25.8-113.1-115.1 2.5-10.5 83.4-8 83.4 0-1 36.9 7.4 47.7 28.6 47.7 16.3 0 23.7-9 23.7-24.1 0-22.9-24.1-36.4-51.7-51.9-37.5-21-81.6-45.8-81.6-102.6 0-56.7 39-94.5 108.6-94.5s107.6 37.2 107.6 108.1z\"]\n};\nvar faCreativeCommonsBy = {\n  prefix: 'fab',\n  iconName: 'creative-commons-by',\n  icon: [512, 512, [], \"f4e7\", \"M322.9 194.4l0 101.4-28.3 0 0 120.5-77.1 0 0-120.4-28.3 0 0-101.5c0-4.4 1.6-8.2 4.6-11.3 3.1-3.1 6.9-4.7 11.3-4.7l101.9 0c4.1 0 7.8 1.6 11.1 4.7 3.1 3.2 4.8 6.9 4.8 11.3zm-32.5-64.5a34.5 34.5 0 1 1 -69 .8 34.5 34.5 0 1 1 69-.8zM255.6 8C397.4 8 504 118.1 504 256 504 403.1 385.5 504 255.6 504 121.6 504 8 394.5 8 256 8 123.1 112.7 8 255.6 8zm.8 44.7c-118.2 0-203.7 97.9-203.7 203.3 0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3z\"]\n};\nvar faUmbraco = {\n  prefix: 'fab',\n  iconName: 'umbraco',\n  icon: [512, 512, [], \"f8e8\", \"M256.3 8a248 248 0 1 0 -.7 496 248 248 0 1 0 .7-496zm145 266c-.8 27.1-5.4 48.8-14 65s-23.1 27.9-43.5 35c-20.4 7.1-48.9 10.6-85.4 10.5l-4.6 0c-36.5 .1-65-3.3-85.4-10.5s-34.9-18.8-43.5-35c-8.6-16.2-13.2-37.9-14-65-.7-10.2-.7-20.5 0-30.7 .4-14.7 1.6-29.3 3.6-43.9 1.9-13.4 3.6-22.6 5.4-32 1-4.9 1.3-6.4 1.8-8.4 .3-1.1 .9-2.1 1.8-2.8s2-1.1 3.1-1.1l.7 0 32 5c1.2 .2 2.2 .8 3 1.7s1.2 2.1 1.2 3.3c0 .3 0 .5 0 .8l-1.7 8.8c-1.6 8.8-3.2 20.1-4.8 33.7-1.7 14-2.5 28.1-2.6 42.2-.2 27 2.5 46.9 8.1 59.8 2.8 6.4 7.2 12 12.6 16.4s11.9 7.4 18.7 8.8c18.8 4 38.1 5.7 57.3 5.1l10.3 0c19.2 .6 38.5-1.2 57.3-5.2 6.8-1.4 13.2-4.5 18.6-8.8s9.7-10 12.5-16.4c5.7-12.9 8.4-32.9 8.1-59.8-.1-14.1-1-28.2-2.6-42.1-1.7-13.6-3.3-24.8-4.9-33.7l-1.7-8.8c0-.3 0-.5 0-.8 0-1.2 .4-2.4 1.2-3.3s1.8-1.5 3-1.7l32-5 .8 0c1.1 0 2.2 .4 3.1 1.1s1.5 1.7 1.8 2.8c.6 2 .8 3.6 1.8 8.4 1.8 9.6 3.5 18.8 5.4 32 2 14.6 3.2 29.2 3.6 43.9 .7 10.2 .7 20.5 0 30.7l0 0z\"]\n};\nvar faHooli = {\n  prefix: 'fab',\n  iconName: 'hooli',\n  icon: [640, 512, [], \"f427\", \"M144.5 352l38.3 .8c-13.2-4.6-26-10.2-38.3-16.8l0 16zm57.7-5.3l0 5.3-19.4 .8c36.5 12.5 69.9 14.2 94.7 7.2-19.9 .2-45.8-2.6-75.3-13.3zM611.1 231.5c15.9 0 28.9-12.9 28.9-28.9s-12.9-24.5-28.9-24.5c-15.9 0-28.9 8.6-28.9 24.5s12.9 28.9 28.9 28.9zM582.1 352l57.9 0 0-110.5-57.9 0 0 110.5zm-73.7 0l57.9 0 0-195.3-57.9 27.3 0 168zm-31-119.4c-18.2-18.2-50.4-17.1-50.4-17.1s-32.3-1.1-50.4 17.1c-18.2 18.2-16.8 33.9-16.8 52.6s-1.4 34.3 16.8 52.5 50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.8-33.8 16.8-52.5-.1-18.8 1.3-34.5-16.8-52.6zm-39.8 71.9c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5l0-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9l0 40.4zM331.4 232.6c-18.2-18.2-50.4-17.1-50.4-17.1s-32.2-1.1-50.4 17.1c-1.9 1.9-3.7 3.9-5.3 6-38.2-29.6-72.5-46.5-102.1-61.1l0-20.7-22.5 10.6c-54.4-22.1-89-18.2-97.3 .1 0 0-24.9 32.8 61.8 110.8l0 73.7 57.9 0 0-28.6c-6.5-4.2-13-8.7-19.4-13.6-14.8-11.2-27.4-21.6-38.4-31.4l0-31c13.1 14.7 30.5 31.4 53.4 50.3l4.5 3.6 0-29.8c0-6.9 1.7-18.2 10.8-18.2s10.6 6.9 10.6 15l0 48.7c18 12.2 37.3 22.1 57.7 29.6l0-93.9c0-18.7-13.4-37.4-40.6-37.4-15.8-.1-30.5 8.2-38.5 21.9l0-54.3c41.9 20.9 83.9 46.5 99.9 58.3-10.2 14.6-9.3 28.1-9.3 43.7 0 18.7-1.4 34.3 16.8 52.5s50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.7-33.8 16.7-52.5 0-18.5 1.5-34.2-16.7-52.3zM65.2 184l0 63.3c-48.7-54.5-38.9-76-35.2-79.1 13.5-11.4 37.5-8 64.4 2.1L65.2 184zM291.7 304.5c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5l0-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9l0 40.4z\"]\n};\nvar faSquareGit = {\n  prefix: 'fab',\n  iconName: 'square-git',\n  icon: [448, 512, [\"git-square\"], \"f1d2\", \"M120.8 335.5c-5.9-.4-12.6-.8-20.2-1.3-3.3 4.1-6.6 8.4-6.6 13.5 0 18.5 65.5 18.5 65.5-1.5 0-8.3-7.4-8.7-38.8-10.7l.1 0zm7.8-117.9c-32.3 0-33.7 44.5-.7 44.5 32.5 0 31.7-44.5 .7-44.5zM384 32L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64zM243.9 172.2c-14.5 0-22.9-8.4-22.9-22.9s8.4-22.3 22.9-22.3c14.7 0 23.1 7.8 23.1 22.3s-8.4 22.9-23.1 22.9zM149.6 195l49.5 0 0 21.6-23.4 1.8c4.6 5.8 9.4 14 9.4 25.7 0 48.7-57.2 47.2-74.2 42.4l-8.4 13.4c5 .3 9.8 .6 14.3 .8 56.3 3.2 80.5 4.6 80.5 38.5 0 29.2-25.7 45.7-69.9 45.7-46 0-63.5-11.6-63.5-31.7 0-11.4 5.1-17.5 14-25.9-8.4-3.5-11.2-9.9-11.2-16.8 0-9.6 7.4-16.3 23-30.6l.2-.2c-12.4-6.1-21.8-19.3-21.8-38.1 0-51.6 56.6-53.3 81.6-46.8l-.1 .2zM270.5 303.1l13 1.8 0 20.1-72.4 0 0-20.1c2.7-.4 5-.7 6.9-.9 9.9-1.2 10.1-1.3 10.1-6l0-74.7c0-4.4-.9-4.7-10.1-7.8-1.9-.7-4.2-1.4-6.9-2.4l2.8-20.6 52.6 0 0 105.5c0 4.1 .2 4.6 4.1 5.1l-.1 0zm106.6-10.4L384 315c-10.9 5.4-26.9 10.2-41.4 10.2-30.2 0-41.7-12.2-41.7-40.9l0-66.6c0-.8 0-1.4-.2-1.8-.8-1.2-4.2-.7-19.6-.7l0-22.6c22.3-2.5 31.2-13.7 34-41.4l24.2 0c0 33.3-.6 38 .7 38.6 .3 .1 .7 0 1.3 0l35.8 0 0 25.4-37.8 0 0 61.6c-.2 6.3-.9 30.4 37.9 15.9l-.1 0z\"]\n};\nvar faGitSquare = faSquareGit;\nvar faOdnoklassniki = {\n  prefix: 'fab',\n  iconName: 'odnoklassniki',\n  icon: [320, 512, [], \"f263\", \"M275.1 334c-27.4 17.4-65.1 24.3-90 26.9l20.9 20.6 76.3 76.3c27.9 28.6-17.5 73.3-45.7 45.7-19.1-19.4-47.1-47.4-76.3-76.6L84 503.4c-28.2 27.5-73.6-17.6-45.4-45.7 19.4-19.4 47.1-47.4 76.3-76.3l20.6-20.6c-24.6-2.6-62.9-9.1-90.6-26.9-32.6-21-46.9-33.3-34.3-59 7.4-14.6 27.7-26.9 54.6-5.7 0 0 36.3 28.9 94.9 28.9S255 269.2 255 269.2c26.9-21.1 47.1-8.9 54.6 5.7 12.4 25.7-1.9 38-34.5 59.1zm14.6-204.7a129.7 129.7 0 1 1 -259.4 .4 129.7 129.7 0 1 1 259.4-.4zm-193.4 .4a63.7 63.7 0 1 0 127.4-.4 63.7 63.7 0 1 0 -127.4 .4z\"]\n};\nvar faDrupal = {\n  prefix: 'fab',\n  iconName: 'drupal',\n  icon: [384, 512, [], \"f1a9\", \"M272.3 108.1C236.5 72.5 202.5 38.4 192.4 0 182.4 38.4 148.1 72.5 112.4 108.1 58.8 161.7-1.9 222.4-1.9 313.4-4.3 420.7 80.8 509.6 188.1 512s196.2-82.8 198.5-190.1c.1-2.8 .1-5.6 0-8.5 0-91.1-60.8-151.7-114.3-205.3zM98 331.1c-5.9 7.5-11 15.6-15.2 24.2-.3 .7-.8 1.3-1.3 1.8s-1.2 .8-2 1l-1.7 0c-4.3 0-9.2-8.5-9.2-8.5-1.3-2-2.5-4.2-3.7-6.4l-.8-1.8c-11.2-25.7-1.5-62.3-1.5-62.3 4.8-17.8 12.7-34.7 23.2-49.9 6.4-9.6 13.5-18.9 21-27.7l9.2 9.2 43.5 44.4c.8 .9 1.3 2.1 1.3 3.3s-.5 2.4-1.3 3.3L114.1 312.3 98 331.1zm96.6 127.3c-12.9-.1-25.6-3.9-36.4-11s-19.4-17.1-24.6-28.9-7-24.9-5-37.7 7.6-24.7 16.2-34.4c14.2-16.9 31.5-33.5 50.3-55.3 22.3 23.8 36.9 40.1 51.2 58 1.1 1.4 2.1 2.9 3 4.4 7.8 11.1 12 24.4 12 38 0 8.8-1.7 17.4-5 25.5s-8.2 15.5-14.4 21.7-13.5 11.1-21.6 14.5-16.7 5.1-25.5 5.1l-.2 0zM320.7 351.6c-.4 1.4-1.2 2.6-2.3 3.6s-2.4 1.6-3.8 1.8l-1.3 0c-2.6-.9-4.9-2.7-6.3-5.1-11.6-17.5-24.9-33.9-39.5-49l-17.8-18.4-59.1-61.3c-12.4-11.5-24.2-23.6-35.4-36.3-.3-.5-.6-.9-.9-1.4-2-2.8-3.6-5.9-4.7-9.2l0-1.8c-.8-5-.4-10.1 1.2-15s4.4-9.2 8-12.7c11.4-11.4 23-23 33.8-34.9 12 13.3 24.8 26 37.4 38.6 25.8 24 49.1 50.5 69.6 79.1 17.3 24.5 26.7 53.8 27 83.8-.1 12.9-2.2 25.8-6 38.2z\"]\n};\nvar faBloggerB = {\n  prefix: 'fab',\n  iconName: 'blogger-b',\n  icon: [448, 512, [], \"f37d\", \"M446.6 222.7c-1.8-8-6.8-15.4-12.5-18.5-1.8-1-13-2.2-25-2.7-20.1-.9-22.3-1.3-28.7-5-10.1-5.9-12.8-12.3-12.9-29.5-.1-33-13.8-63.7-40.9-91.3-19.3-19.7-40.9-33-65.5-40.5-5.9-1.8-19.1-2.4-63.3-2.9-69.4-.8-84.8 .6-108.4 10-43.5 17.2-74.7 53.8-86.1 100.6-2.1 8.8-2.6 22.9-3.1 103.9-.6 101.5 .1 116.4 6.4 136.5 15.6 49.6 59.9 86.3 104.4 94.3 14.8 2.7 197.3 3.3 216 .8 32.5-4.4 58-17.5 81.9-41.9 17.3-17.7 28.1-36.8 35.2-62.1 4.9-17.6 4.5-142.8 2.5-151.7zM124.5 159.1c7.8-7.9 10-8.2 58.8-8.2 43.9 0 45.4 .1 51.8 3.4 9.3 4.7 13.4 11.3 13.4 21.9 0 9.5-3.8 16.2-12.3 21.6-4.6 2.9-7.3 3.1-50.3 3.3-26.5 .2-47.7-.4-50.8-1.2-16.6-4.7-22.8-28.5-10.6-40.8zM316.3 358.9l-14.9 2.4-77.5 .9c-68.1 .8-87.3-.4-90.9-2-7.1-3.1-13.8-11.7-14.9-19.4-1.1-7.3 2.6-17.3 8.2-22.4 7.1-6.4 10.2-6.6 97.3-6.7 89.6-.1 89.1-.1 97.6 7.8 12.1 11.3 9.5 31.2-4.9 39.4z\"]\n};\nvar faInvision = {\n  prefix: 'fab',\n  iconName: 'invision',\n  icon: [448, 512, [], \"f7b0\", \"M407.4 32L40.6 32C18.2 32 0 50.2 0 72.6L0 439.4C0 461.8 18.2 480 40.6 480l366.8 0c22.4 0 40.6-18.2 40.6-40.6l0-366.8C448 50.2 429.8 32 407.4 32zM176.1 145.6c.4 23.4-22.4 27.3-26.6 27.4-14.9 0-27.1-12-27.1-27 .1-35.2 53.1-35.5 53.7-.4zM332.8 377c-65.6 0-34.1-74-25-106.6 14.1-46.4-45.2-59-59.9 .7l-25.8 103.3-45.1 0 8.1-32.5c-31.5 51.8-94.6 44.4-94.6-4.3 .1-14.3 .9-14 23-104.1l-31.8 0 9.7-35.6 76.4 0c-33.6 133.7-32.6 126.9-32.9 138.2 0 20.9 40.9 13.5 57.4-23.2l19.8-79.4-32.3 0 9.7-35.6 68.8 0-8.9 40.5c40.5-75.5 127.9-47.8 101.8 38-14.2 51.1-14.6 50.7-14.9 58.8 0 15.5 17.5 22.6 31.8-16.9L386 325c-10.5 36.7-29.4 52-53.2 52z\"]\n};\nvar faFacebookF = {\n  prefix: 'fab',\n  iconName: 'facebook-f',\n  icon: [320, 512, [], \"f39e\", \"M80 299.3l0 212.7 116 0 0-212.7 86.5 0 18-97.8-104.5 0 0-34.6c0-51.7 20.3-71.5 72.7-71.5 16.3 0 29.4 .4 37 1.2l0-88.7C291.4 4 256.4 0 236.2 0 129.3 0 80 50.5 80 159.4l0 42.1-66 0 0 97.8 66 0z\"]\n};\nvar faCentos = {\n  prefix: 'fab',\n  iconName: 'centos',\n  icon: [448, 512, [], \"f789\", \"M289.6 97.5l31.6 31.7-76.3 76.5 0-108.2 44.7 0zM127.2 129.2l76.3 76.5 0-108.2-44.7 0-31.6 31.7zm41.5-41.6l44.7 0 0 127.9 10.8 10.8 10.8-10.8 0-127.9 44.7 0-55.5-55.6-55.5 55.6zm26.2 168.1l-10.8-10.8-128.6 0 0-44.8-55.5 55.6 55.5 55.6 0-44.8 128.6 0 10.8-10.8zM274.2 235l107.9 0 0-44.8-31.6-31.7-76.3 76.5zm173.3 20.7l-55.5-55.6 0 44.8-127.7 0-10.8 10.8 10.8 10.8 127.7 0 0 44.8 55.5-55.6zM65.4 176.2l32.5-31.7 90.3 90.5 15.3 0 0-15.3-90.3-90.5 31.6-31.7-79.4 0 0 78.7zM382.1 97.5l-78.5 0 31.6 31.7-90.3 90.5 0 15.3 15.3 0 90.3-90.5 31.6 31.7 0-78.7zM203.5 413.9l0-108.1-76.3 76.5 31.6 31.7 44.7 0 0-.1zM65.4 235l108.8 0-76.3-76.5-32.5 31.7 0 44.8zM382.1 335.2l-31.6 31.7-90.3-90.5-15.3 0 0 15.3 90.3 90.5-31.6 31.7 78.5 0 0-78.7zm0-58.8l-107.9 0 76.3 76.5 31.6-31.7 0-44.8zM321.2 382.2l-76.3-76.5 0 108.1 44.7 0 31.6-31.6zM97.9 352.9l76.3-76.5-108.8 0 0 44.8 32.5 31.7zm181.8 70.9l-44.7 0 0-127.9-10.8-10.8-10.8 10.8 0 127.9-44.7 0 55.5 55.6 55.5-55.6zM113.2 382.2l90.3-90.5 0-15.3-15.3 0-90.3 90.5-32.5-31.7 0 78.7 79.4 0-31.6-31.7z\"]\n};\nvar faScaleway = {\n  prefix: 'fab',\n  iconName: 'scaleway',\n  icon: [448, 512, [], \"e859\", \"M243.4 117.3l-84.3 0c-18.5 2.1-32.7 17.5-33.4 36l0 121.9c0 8.2 3.2 15.3 8.5 20.7s12.5 8.6 20.6 8.6c16 0 29.2-13.2 29.2-29.2l0-77.4c0-12.1 10-22.1 22.1-22.1l38.1 0c8.2 0 15.3-3.2 20.6-8.6s8.5-12.8 8.5-21c0-16-13.9-28.9-29.9-28.9zM205.3 395.4l84.3 0c18.5-2.1 32.7-17.5 33.4-36l0-121.9c0-8.2-3.2-15.3-8.5-20.7s-12.5-8.6-20.6-8.6c-16 0-29.2 13.2-29.2 29.2l0 77.4c0 12.1-10 22.1-22.1 22.1l-38.1 0c-8.2 0-15.3 3.2-20.6 8.6s-8.5 12.8-8.5 21c.4 16 13.9 28.9 29.9 28.9zM104.3 0L257.6 0c101 0 182.5 81.6 182.1 182.9l0 242.8c-4.6 46-42 82.4-88.2 86.3L190 512C89.3 512 7.5 430 7.5 329.1L7.5 97c0-53.5 43.4-97 96.8-97zM381.7 182.9c0-68.5-55.9-124.4-124.2-124.4l-153 0C83.3 58.5 66.2 75.6 66.2 97l0 232.1c0 68.8 55.5 124.4 124.2 124.4l158.7 0c16.7-2.1 29.9-15 32.7-31.4l0-239.2z\"]\n};\nvar faCcAmazonPay = {\n  prefix: 'fab',\n  iconName: 'cc-amazon-pay',\n  icon: [576, 512, [], \"f42d\", \"M124.7 201.8c.1-11.8 0-23.5 0-35.3l0-35.3c0-1.3 .4-2 1.4-2.7 11.5-8 24.1-12.1 38.2-11.1 12.5 .9 22.7 7 28.1 21.7 3.3 8.9 4.1 18.2 4.1 27.7 0 8.7-.7 17.3-3.4 25.6-5.7 17.8-18.7 24.7-35.7 23.9-11.7-.5-21.9-5-31.4-11.7-.9-.8-1.4-1.6-1.3-2.8zm154.9 14.6c4.6 1.8 9.3 2 14.1 1.5 11.6-1.2 21.9-5.7 31.3-12.5 .9-.6 1.3-1.3 1.3-2.5-.1-3.9 0-7.9 0-11.8 0-4-.1-8 0-12 0-1.4-.4-2-1.8-2.2-7-.9-13.9-2.2-20.9-2.9-7-.6-14-.3-20.8 1.9-6.7 2.2-11.7 6.2-13.7 13.1-1.6 5.4-1.6 10.8 .1 16.2 1.6 5.5 5.2 9.2 10.4 11.2zM576 80l0 352c0 26.5-21.5 48-48 48L48 480c-26.5 0-48-21.5-48-48L0 80C0 53.5 21.5 32 48 32l480 0c26.5 0 48 21.5 48 48zM368.5 103.9c.4 1.7 .9 3.4 1.6 5.1 16.5 40.6 32.9 81.3 49.5 121.9 1.4 3.5 1.7 6.4 .2 9.9-2.8 6.2-4.9 12.6-7.8 18.7-2.6 5.5-6.7 9.5-12.7 11.2-4.2 1.1-8.5 1.3-12.9 .9-2.1-.2-4.2-.7-6.3-.8-2.8-.2-4.2 1.1-4.3 4-.1 2.8-.1 5.6 0 8.3 .1 4.6 1.6 6.7 6.2 7.5 4.7 .8 9.4 1.6 14.2 1.7 14.3 .3 25.7-5.4 33.1-17.9 2.9-4.9 5.6-10.1 7.7-15.4 19.8-50.1 39.5-100.3 59.2-150.5 .6-1.5 1.1-3 1.3-4.6 .4-2.4-.7-3.6-3.1-3.7-5.6-.1-11.1 0-16.7 0-3.1 0-5.3 1.4-6.4 4.3-.4 1.1-.9 2.3-1.3 3.4l-29.1 83.7c-2.1 6.1-4.2 12.1-6.5 18.6-.4-.9-.6-1.4-.8-1.9-10.8-29.9-21.6-59.9-32.4-89.8-1.7-4.7-3.5-9.5-5.3-14.2-.9-2.5-2.7-4-5.4-4-6.4-.1-12.8-.2-19.2-.1-2.2 0-3.3 1.6-2.8 3.7zM242.4 206c1.7 11.7 7.6 20.8 18 26.6 9.9 5.5 20.7 6.2 31.7 4.6 12.7-1.9 23.9-7.3 33.8-15.5 .4-.3 .8-.6 1.4-1 .5 3.2 .9 6.2 1.5 9.2 .5 2.6 2.1 4.3 4.5 4.4 4.6 .1 9.1 .1 13.7 0 2.3-.1 3.8-1.6 4-3.9 .1-.8 .1-1.6 .1-2.3l0-88.8c0-3.6-.2-7.2-.7-10.8-1.6-10.8-6.2-19.7-15.9-25.4-5.6-3.3-11.8-5-18.2-5.9-3-.4-6-.7-9.1-1.1l-10 0c-.8 .1-1.6 .3-2.5 .3-8.2 .4-16.3 1.4-24.2 3.5-5.1 1.3-10 3.2-15 4.9-3 1-4.5 3.2-4.4 6.5 .1 2.8-.1 5.6 0 8.3 .1 4.1 1.8 5.2 5.7 4.1 6.5-1.7 13.1-3.5 19.7-4.8 10.3-1.9 20.7-2.7 31.1-1.2 5.4 .8 10.5 2.4 14.1 7 3.1 4 4.2 8.8 4.4 13.7 .3 6.9 .2 13.9 .3 20.8 0 .4-.1 .7-.2 1.2-.4 0-.8 0-1.1-.1-8.8-2.1-17.7-3.6-26.8-4.1-9.5-.5-18.9 .1-27.9 3.2-10.8 3.8-19.5 10.3-24.6 20.8-4.1 8.3-4.6 17-3.4 25.8zM98.7 106.9l0 175.3c0 .8 0 1.7 .1 2.5 .2 2.5 1.7 4.1 4.1 4.2 5.9 .1 11.8 .1 17.7 0 2.5 0 4-1.7 4.1-4.1 .1-.8 .1-1.7 .1-2.5l0-60.7c.9 .7 1.4 1.2 1.9 1.6 15 12.5 32.2 16.6 51.1 12.9 17.1-3.4 28.9-13.9 36.7-29.2 5.8-11.6 8.3-24.1 8.7-37 .5-14.3-1-28.4-6.8-41.7-7.1-16.4-18.9-27.3-36.7-30.9-2.7-.6-5.5-.8-8.2-1.2l-7 0c-1.2 .2-2.4 .3-3.6 .5-11.7 1.4-22.3 5.8-31.8 12.7-2 1.4-3.9 3-5.9 4.5-.1-.5-.3-.8-.4-1.2-.4-2.3-.7-4.6-1.1-6.9-.6-3.9-2.5-5.5-6.4-5.6l-9.7 0c-5.9-.1-6.9 1-6.9 6.8zM493.6 339c-2.7-.7-5.1 0-7.6 1-43.9 18.4-89.5 30.2-136.8 35.8-14.5 1.7-29.1 2.8-43.7 3.2-26.6 .7-53.2-.8-79.6-4.3-17.8-2.4-35.5-5.7-53-9.9-37-8.9-72.7-21.7-106.7-38.8-8.8-4.4-17.4-9.3-26.1-14-3.8-2.1-6.2-1.5-8.2 2.1l0 1.7c1.2 1.6 2.2 3.4 3.7 4.8 36 32.2 76.6 56.5 122 72.9 21.9 7.9 44.4 13.7 67.3 17.5 14 2.3 28 3.8 42.2 4.5 3 .1 6 .2 9 .4 .7 0 1.4 .2 2.1 .3l17.7 0c.7-.1 1.4-.3 2.1-.3 14.9-.4 29.8-1.8 44.6-4 21.4-3.2 42.4-8.1 62.9-14.7 29.6-9.6 57.7-22.4 83.4-40.1 2.8-1.9 5.7-3.8 8-6.2 4.3-4.4 2.3-10.4-3.3-11.9zM544 311.3c-.8-4.2-4-5.8-7.6-7-5.7-1.9-11.6-2.8-17.6-3.3-11-.9-22-.4-32.8 1.6-12 2.2-23.4 6.1-33.5 13.1-1.2 .8-2.4 1.8-3.1 3-.6 .9-.7 2.3-.5 3.4 .3 1.3 1.7 1.6 3 1.5 .6 0 1.2 0 1.8-.1l19.5-2.1c9.6-.9 19.2-1.5 28.8-.8 4.1 .3 8.1 1.2 12 2.2 4.3 1.1 6.2 4.4 6.4 8.7 .3 6.7-1.2 13.1-2.9 19.5-3.5 12.9-8.3 25.4-13.3 37.8-.3 .8-.7 1.7-.8 2.5-.4 2.5 1 4 3.4 3.5 1.4-.3 3-1.1 4-2.1 3.7-3.6 7.5-7.2 10.6-11.2 10.7-13.8 17-29.6 20.7-46.6 .7-3 1.2-6.1 1.7-9.1 .2-4.7 .2-9.6 .2-14.5z\"]\n};\nvar faEbay = {\n  prefix: 'fab',\n  iconName: 'ebay',\n  icon: [640, 512, [], \"f4f4\", \"M606.5 189.5l-54.8 109.9-54.9-109.9-37.5 0 10.9 20.6c-11.5-19-35.9-26-63.3-26-31.8 0-67.9 8.7-71.5 43.1l33.7 0c1.4-13.8 15.7-21.8 35-21.8 26 0 41 9.6 41 33l0 3.4c-12.7 0-28 .1-41.7 .4-42.4 .9-69.6 10-76.7 34.4 1-5.2 1.5-10.6 1.5-16.2 0-52.1-39.7-76.2-75.4-76.2-21.3 0-43 5.5-58.7 24.2l0-80.6-32.1 0 0 169.5c0 10.3-.6 22.9-1.1 33.1l31.5 0c.7-6.3 1.1-12.9 1.1-19.5 13.6 16.6 35.4 24.9 58.7 24.9 36.9 0 64.9-21.9 73.3-54.2-.5 2.8-.7 5.8-.7 9 0 24.1 21.1 45 60.6 45 26.6 0 45.8-5.7 61.9-25.5 0 6.6 .3 13.3 1.1 20.2l29.8 0c-.7-8.2-1-17.5-1-26.8l0-65.6c0-9.3-1.7-17.2-4.8-23.8l61.5 116.1-28.5 54.1 35.9 0 99.2-194.8-34 0zM244.2 313.8c-29.6 0-50.2-21.5-50.2-53.8 0-32.4 20.6-53.8 50.2-53.8 29.8 0 50.2 21.4 50.2 53.8 0 32.3-20.4 53.8-50.2 53.8zm200.9-47.3c0 30-17.9 48.4-51.6 48.4-25.1 0-35-13.4-35-25.8 0-19.1 18.1-24.4 47.2-25.3 13.1-.5 27.6-.6 39.4-.6l0 3.3zM33.2 268.1l128.8 0 0-8.5c0-51.7-33.1-75.4-78.4-75.4-56.8 0-83 30.8-83 77.6 0 42.5 25.3 74 82.5 74 31.4 0 68-11.7 74.4-46.1l-33.1 0c-12 35.8-87.7 36.7-91.2-21.6zm95-21.4l-94.4 0c6.9-56.6 92.1-54.7 94.4 0z\"]\n};\nvar faContao = {\n  prefix: 'fab',\n  iconName: 'contao',\n  icon: [512, 512, [], \"f26d\", \"M45.4 305c14.4 67.1 26.4 129 68.2 175L34 480c-18.7 0-34-15.2-34-34L0 66C0 47.3 15.2 32 34 32l57.7 0c-13.8 12.6-26.1 27.2-36.9 43.6-45.4 70-27 146.8-9.4 229.4zM478 32l-90.2 0c21.4 21.4 39.2 49.5 52.7 84.1L303.4 145.4c-14.9-29-37.8-53.3-82.6-43.9-24.6 5.3-41 19.3-48.3 34.6-8.8 18.7-13.2 39.8 8.2 140.3 21.1 100.2 33.7 117.7 49.5 131.2 12.9 11.1 33.4 17 58.3 11.7 44.5-9.4 55.7-40.7 57.4-73.2l137.4-29.6c3.2 71.5-18.7 125.2-57.4 163.6l52.1 0c18.7 0 34-15.2 34-34L512 66c0-18.8-15.2-34-34-34z\"]\n};\nvar faEllo = {\n  prefix: 'fab',\n  iconName: 'ello',\n  icon: [512, 512, [], \"f5f1\", \"M256 8a248 248 0 1 0 0 496 248 248 0 1 0 0-496zM399.8 293.2C383.3 358.5 323.8 404.8 256 404.8S128.7 358.5 112.2 293.2c-1.6-7.4 2.5-15.7 9.9-17.4s15.7 2.5 17.4 9.9c14 52.9 62 90.1 116.6 90.1s102.5-37.2 116.6-90.1c1.7-7.4 9.9-12.4 17.4-9.9 7.4 1.7 12.4 9.9 9.9 17.4z\"]\n};\nvar faSistrix = {\n  prefix: 'fab',\n  iconName: 'sistrix',\n  icon: [448, 512, [], \"f3ee\", \"M448 449L301.2 300.2c20-27.9 31.9-62.2 31.9-99.2 0-93.1-74.7-168.9-166.5-168.9-91.9-.1-166.6 75.7-166.6 168.8S74.7 369.8 166.5 369.8c39.8 0 76.3-14.2 105-37.9L417.5 480 448 449zM166.5 330.8c-70.6 0-128.1-58.3-128.1-129.9S95.9 71 166.5 71 294.6 129.3 294.6 200.9 237.2 330.8 166.5 330.8z\"]\n};\nvar faPeriscope = {\n  prefix: 'fab',\n  iconName: 'periscope',\n  icon: [448, 512, [], \"f3da\", \"M370 63.6c-38.6-41-89.5-63.6-143.4-63.6-114.7 0-208.1 96.2-208.1 214.4 0 75.1 57.8 159.8 82.7 192.7 36.6 48.4 91.4 104.9 125.4 104.9 41.6 0 112.9-94.2 120.9-105 24.6-33.1 82-118.3 82-192.6 0-56.5-21.1-110.1-59.5-150.8zM226.6 493.9c-42.5 0-190-167.3-190-279.4 0-107.4 83.9-196.3 190-196.3 100.8 0 184.7 89 184.7 196.3 .1 112.1-147.4 279.4-184.7 279.4zM338 206.8c0 59.1-51.1 109.7-110.8 109.7-100.6 0-150.7-108.2-92.9-181.8l0 .4c0 24.5 20.1 44.4 44.8 44.4s44.8-19.9 44.8-44.4c0-18.2-11.1-33.8-26.9-40.7 76.6-19.2 141 39.3 141 112.4z\"]\n};\nvar faExpeditedssl = {\n  prefix: 'fab',\n  iconName: 'expeditedssl',\n  icon: [512, 512, [], \"f23e\", \"M256 43.4a212.6 212.6 0 1 0 0 425.2 212.6 212.6 0 1 0 0-425.2zM158.6 176.3c0-53.7 43.7-97.4 97.4-97.4s97.4 43.7 97.4 97.4l0 26.6c0 5-3.9 8.9-8.9 8.9l-17.7 0c-5 0-8.9-3.9-8.9-8.9l0-26.6c0-82.1-124-82.1-124 0l0 26.6c0 5-3.9 8.9-8.9 8.9l-17.7 0c-5 0-8.9-3.9-8.9-8.9l0-26.6 .2 0zM397.7 380c0 9.7-8 17.7-17.7 17.7l-248 0c-9.7 0-17.7-8-17.7-17.7l0-141.7c0-9.7 8-17.7 17.7-17.7l248 0c9.7 0 17.7 8 17.7 17.7l0 141.7zm-248-137.3l0 132.9c0 2.5-1.9 4.4-4.4 4.4l-8.9 0c-2.5 0-4.4-1.9-4.4-4.4l0-132.9c0-2.5 1.9-4.4 4.4-4.4l8.9 0c2.5 0 4.4 1.9 4.4 4.4zm141.7 48.7c0 13-7.2 24.4-17.7 30.4l0 31.6c0 5-3.9 8.9-8.9 8.9l-17.7 0c-5 0-8.9-3.9-8.9-8.9l0-31.6c-10.5-6.1-17.7-17.4-17.7-30.4 0-19.7 15.8-35.4 35.4-35.4s35.5 15.8 35.5 35.4zM256 8a248 248 0 1 0 0 496 248 248 0 1 0 0-496zm0 17.7a230.3 230.3 0 1 1 0 460.6 230.3 230.3 0 1 1 0-460.6z\"]\n};\nvar faNapster = {\n  prefix: 'fab',\n  iconName: 'napster',\n  icon: [512, 512, [], \"f3d2\", \"M306.3 373.6c-14.2 13.6-31.3 24.1-50.4 30.5-19-6.4-36.2-16.9-50.3-30.5l100.7 0zm44-199.6c20-16.9 43.6-29.2 69.6-36.2l0 161.2c0 219.4-328 217.6-328 .3l0-161.6c25.9 6.9 49.6 19.6 69.5 36.4 56.8-40 132.5-39.9 188.9-.1zM141.5 115.5c64.4-60 164.3-60.1 228.9-.2-7.1 3.5-13.9 7.3-20.6 11.5-58.7-30.5-129.2-30.4-187.9 .1-6.3-4-13.9-8.2-20.4-11.4zM51.8 93.2l0 69.3c-58.4 36.5-58.4 121.1 .1 158.3 26.4 245.1 381.7 240.3 407.6 1.5l.3-1.7c58.7-36.3 58.9-121.7 .2-158.2l0-69.2c-17.3 .5-34 3-50.1 7.4-82-91.5-225.5-91.5-307.5 .1-16.3-4.4-33.1-7-50.6-7.5zM267.2 352s36-.3 61.3-1.5c10.2-.5 21.1-4 25.5-6.5 26.3-15.1 25.4-39.2 26.2-47.4-79.5-.6-99.9-3.9-113 55.4zM131.7 296.7c.8 8.2-.1 32.3 26.2 47.4 4.4 2.5 15.2 6 25.5 6.5 25.3 1.1 61.3 1.5 61.3 1.5-13.2-59.4-33.7-56.1-113-55.4zM300.8 420.1c-3.2-5.3-6.9-7.3-6.9-7.3-24.8 7.3-52.2 6.9-75.9 0 0 0-2.9 1.5-6.4 6.6-2.8 4.1-3.7 9.6-3.7 9.6 29.1 17.6 67.1 17.6 96.2 0-.1-.1-.3-4-3.3-8.9z\"]\n};\nvar faDelicious = {\n  prefix: 'fab',\n  iconName: 'delicious',\n  icon: [448, 512, [], \"f1a5\", \"M446.6 68c-.4-1.5-.9-3-1.4-4.5-.9-2.5-2-4.8-3.3-7.1-1.4-2.4-3-4.8-4.7-6.9-2.1-2.5-4.4-4.8-6.9-6.8-1.1-.9-2.2-1.7-3.3-2.5-1.3-.9-2.6-1.7-4-2.4-1.8-1-3.6-1.8-5.5-2.5-1.7-.7-3.5-1.3-5.4-1.7-3.8-1-7.9-1.5-12-1.5l-352 0C21.6 32 .1 53.5 .1 80l0 352c0 4.1 .5 8.2 1.5 12 2 7.7 5.8 14.6 11 20.3 1 1.1 2.1 2.2 3.3 3.3 5.7 5.2 12.6 9 20.3 11 3.8 1 7.9 1.5 12 1.5l352 0c26.5 0 48-21.5 48-48l0-352.1c-.1-4.1-.6-8.2-1.6-12zM416.1 432c0 8.8-7.2 16-16 16l-176 0 0-192-192 0 0-176c0-8.8 7.2-16 16-16l176 0 0 192 192 0 0 176z\"]\n};\nvar faGuilded = {\n  prefix: 'fab',\n  iconName: 'guilded',\n  icon: [448, 512, [], \"e07e\", \"M443.9 64L5 64c0 103.3 22.2 180.1 43.4 222.4 64.1 127.8 176 161.6 177.3 161.6 55.7-20.5 104.5-56.3 140.6-103.5 25.9-33.9 53.1-87.2 65.9-145.8l-259.9 0c4.1 36.4 22.2 67.9 45.1 86.9l88.6 0c-17 28.2-48.2 54.4-80.5 69.5-31.2-13.3-69.1-46.5-96.5-98.4-26.7-53.8-27.1-105.9-27.1-105.9l336.1 0c4-28.8 5.9-57.9 5.9-86.9z\"]\n};\nvar faObsidian = {\n  prefix: 'fab',\n  iconName: 'obsidian',\n  icon: [384, 512, [], \"e879\", \"M142.3 320.3c36.1-8.2 70.3-11 101.3 .7 31.8 11.9 61.7 39.6 86.7 96-8.1 17.7-12.4 36.9-14.7 53.8-3.1 22.9-25.4 40.7-47.7 34.6-31.7-8.7-68.3-22.3-101.3-24.9-4.4-.3-50.6-3.8-50.6-3.8-1.7-.1-3.4-.4-5.1-.8 31.5-64.2 38.2-115.1 31.3-155.4zM55 219.5c22.3 14.8 49.5 37.8 64.1 73.6 16.1 39.4 17.8 95.7-21.6 176.1-1-.8-2.1-1.7-3-2.7L7.4 376.8c-9.5-9.8-12.1-24.4-6.5-36.9 .6-1.3 44.6-98.3 54.1-120.4zm264.3-91.3c4.9 6.2 7.4 14 7.4 21.9 .1 20.8 1.8 63.6 13.3 91.2 11.2 26.8 31.8 55.8 42.5 70 4.1 5.5 4.8 12.9 1.3 18.7-7.6 12.8-22.6 37.5-43.8 69.2-.3 .4-.6 .9-.8 1.3-25.2-52.2-55.9-80.7-90.4-93.6-9.6-3.6-19.5-6-29.4-7.3-17.8-45.8-23.2-79.7-22-106.4 1.2-27.4 9.2-47.8 18.2-66.3 8.9-18.1 19.8-35.9 24.9-55.7 3.2-12.5 4.2-25.8 1.7-40.9l77.1 98zM184.2 14.1c10.3-9.2 24.6-10.8 36.3-5.5 9.6 24.6 9.7 42.8 5.6 58.8-4.6 17.8-14.1 33-23.9 52.8-9.6 19.5-18.4 42-19.7 72.3-1.2 27.9 4.1 61.9 20.4 105.8-21-.6-42.5 2.6-63.7 7.4-1.7-6.4-3.8-12.4-6.1-18.2-17.3-42.2-49.9-67.9-74.1-83.3 3.1-18.7 8.2-55.4 11.6-77.5 1.2-7.6 4.9-14.6 10.7-19.8L184.2 14.1z\"]\n};\nvar faXbox = {\n  prefix: 'fab',\n  iconName: 'xbox',\n  icon: [512, 512, [], \"f412\", \"M369.9 318.2c44.3 54.3 64.7 98.8 54.4 118.7-7.9 15.1-56.7 44.6-92.6 55.9-29.6 9.3-68.4 13.3-100.4 10.2-38.2-3.7-76.9-17.4-110.1-39-27.9-18.2-34.2-25.7-34.2-40.6 0-29.9 32.9-82.3 89.2-142.1 32-33.9 76.5-73.7 81.4-72.6 9.4 2.1 84.3 75.1 112.3 109.5zM188.6 143.8c-29.7-26.9-58.1-53.9-86.4-63.4-15.2-5.1-16.3-4.8-28.7 8.1-29.2 30.4-53.5 79.7-60.3 122.4-5.4 34.2-6.1 43.8-4.2 60.5 5.6 50.5 17.3 85.4 40.5 120.9 9.5 14.6 12.1 17.3 9.3 9.9-4.2-11-.3-37.5 9.5-64 14.3-39 53.9-112.9 120.3-194.4zm311.6 63.5c-16.9-80-67.5-130.3-74.6-130.3-7.3 0-24.2 6.5-36 13.9-23.3 14.5-41 31.4-64.3 52.8 42.4 53.3 102.2 139.4 122.9 202.3 6.8 20.7 9.7 41.1 7.4 52.3-1.7 8.5-1.7 8.5 1.4 4.6 6.1-7.7 19.9-31.3 25.4-43.5 7.4-16.2 15-40.2 18.6-58.7 4.3-22.5 3.9-70.8-.8-93.4zM141.3 43c47.7-2.5 109.7 34.5 114.3 35.4 .7 .1 10.4-4.2 21.6-9.7 63.9-31.1 94-25.8 107.4-25.2-63.9-39.3-152.7-50-233.9-11.7-23.4 11.1-24 11.9-9.4 11.2z\"]\n};\nvar faUntappd = {\n  prefix: 'fab',\n  iconName: 'untappd',\n  icon: [640, 512, [], \"f405\", \"M401.5 49.9C321.7 210 316.9 202.4 313.6 223.1l-5.2 32.8c-1.9 12-6.6 23.5-13.7 33.4L145.8 497.1c-7.6 10.6-20.4 16.2-33.4 14.6-40.3-5-77.8-32.2-95.3-68.5-5.7-11.8-4.5-25.8 3.1-36.4L169.1 198.9c7.1-9.9 16.4-18 27.2-23.7l29.3-15.5c18.5-9.8 9.7-11.9 135.6-138.9 1-4.8 1-7.3 3.6-8 3-.7 6.6-1 6.3-4.6l-.4-4.6c-.2-1.9 1.3-3.6 3.2-3.6 4.5-.1 13.2 1.2 25.6 10 12.3 8.9 16.4 16.8 17.7 21.1 .6 1.8-.6 3.7-2.4 4.2l-4.5 1.1c-3.4 .9-2.5 4.4-2.3 7.4 .1 2.8-2.3 3.6-6.5 6.1zM230.3 36.4c3.4 .9 2.5 4.4 2.3 7.4-.2 2.7 2.1 3.5 6.4 6 7.9 15.9 15.3 30.5 22.2 44 .7 1.3 2.3 1.5 3.3 .5 11.2-12 24.6-26.2 40.5-42.6 1.3-1.4 1.4-3.5 .1-4.9-8-8.2-16.5-16.9-25.6-26.1-1-4.7-1-7.3-3.6-8-3-.8-6.6-1-6.3-4.6 .3-3.3 1.4-8.1-2.8-8.2-4.5-.1-13.2 1.1-25.6 10-12.3 8.9-16.4 16.8-17.7 21.1-1.4 4.2 3.6 4.6 6.8 5.4zM620.2 406.7L471.4 198.8c-13.2-18.5-26.6-23.4-56.4-39.1-11.2-5.9-14.2-10.9-30.5-28.9-1-1.1-2.9-.9-3.6 .5-46.3 88.8-47.1 82.8-49 94.8-1.7 10.7-1.3 20 .3 29.8 1.9 12 6.6 23.5 13.7 33.4L494.8 497.2c7.6 10.6 20.2 16.2 33.1 14.7 40.3-4.9 78-32 95.7-68.6 5.4-11.9 4.3-25.9-3.4-36.6z\"]\n};\nvar faGooglePlusG = {\n  prefix: 'fab',\n  iconName: 'google-plus-g',\n  icon: [640, 512, [], \"f0d5\", \"M386.3 228.5c1.8 9.7 3.1 19.4 3.1 32 0 109.8-73.6 187.5-184.4 187.5-106.1 0-192-85.9-192-192S98.9 64 205 64c51.9 0 95.1 18.9 128.6 50.3l-52.1 50c-14.1-13.6-39-29.6-76.5-29.6-65.5 0-118.9 54.2-118.9 121.3S139.5 377.3 205 377.3c76 0 104.5-54.7 109-82.8l-109 0 0-66 181.3 0 0 0zm185.4 6.4l0-55.7-56 0 0 55.7-55.7 0 0 56 55.7 0 0 55.7 56 0 0-55.7 55.7 0 0-56-55.7 0z\"]\n};\nvar faGithubAlt = {\n  prefix: 'fab',\n  iconName: 'github-alt',\n  icon: [512, 512, [], \"f113\", \"M202.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM496 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3l48.2 0c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z\"]\n};\nvar faGetPocket = {\n  prefix: 'fab',\n  iconName: 'get-pocket',\n  icon: [448, 512, [], \"f265\", \"M407.6 64l-367 0C18.5 64 0 82.5 0 104.6L0 239.8C0 364.5 99.7 464 224.2 464 348.2 464 448 364.5 448 239.8l0-135.2C448 82.2 430.3 64 407.6 64zm-162 268.5c-12.4 11.8-31.4 11.1-42.4 0-113.7-108.9-114.9-105.1-114.9-123.2 0-16.9 13.8-30.7 30.7-30.7 17 0 16.1 3.8 105.2 89.3 90.6-86.9 88.6-89.3 105.5-89.3s30.7 13.8 30.7 30.7c0 17.8-2.9 15.7-114.8 123.2z\"]\n};\nvar faGlide = {\n  prefix: 'fab',\n  iconName: 'glide',\n  icon: [448, 512, [], \"f2a5\", \"M252.8 148.6c0 8.8-1.6 17.7-3.4 26.4-5.8 27.8-11.6 55.8-17.3 83.6-1.4 6.3-8.3 4.9-13.7 4.9-23.8 0-30.5-26-30.5-45.5 0-29.3 11.2-68.1 38.5-83.1 4.3-2.5 9.2-4.2 14.1-4.2 11.4 0 12.3 8.3 12.3 17.9zM448 80l0 352c0 26.5-21.5 48-48 48L48 480c-26.5 0-48-21.5-48-48L0 80C0 53.5 21.5 32 48 32l352 0c26.5 0 48 21.5 48 48zM384 267c0-5.1-20.8-37.7-25.5-39.5-2.2-.9-7.2-2.3-9.6-2.3-23.1 0-38.7 10.5-58.2 21.5l-.5-.5c4.3-29.4 14.6-57.2 14.6-87.4 0-44.6-23.8-62.7-67.5-62.7-71.7 0-108 70.8-108 123.5 0 54.7 32 85 86.3 85 7.5 0 6.9-.6 6.9 2.3-10.5 80.3-56.5 82.9-56.5 58.9 0-24.4 28-36.5 28.3-38-.2-7.6-29.3-17.2-36.7-17.2-21.1 0-32.7 33-32.7 50.6 0 32.3 20.4 54.7 53.3 54.7 48.2 0 83.4-49.7 94.3-91.7 9.4-37.7 7-39.4 12.3-42.1 20-10.1 35.8-16.8 58.4-16.8 11.1 0 19 2.3 36.7 5.2 1.8 .1 4.1-1.7 4.1-3.5z\"]\n};\nvar faBity = {\n  prefix: 'fab',\n  iconName: 'bity',\n  icon: [512, 512, [], \"f37a\", \"M86.5 67.2c95.4-89.2 246.1-91.2 343.1 3.8 14.3 14.1-6.4 37.1-22.4 21.5-84.8-82.4-215.8-80.3-298.9-3.2-16.3 15.1-36.5-8.3-21.8-22.1zm98.9 418.6c19.3 5.7 29.3-23.6 7.9-30-112.2-33.9-175.8-149.7-147.5-261 5-19.6-24.9-28.1-30.2-7.1-32.1 127.4 41.1 259.8 169.8 298.1zm148.1-2c121.9-40.2 192.9-166.9 164.4-291-4.5-19.7-34.9-13.8-30 7.9 24.2 107.7-37.1 217.9-143.2 253.4-21.2 7-10.4 36 8.8 29.7zm-62.9-79l.2-71.8c0-8.2-6.6-14.8-14.8-14.8s-14.8 6.7-14.8 14.8l-.2 71.8c0 8.2 6.6 14.8 14.8 14.8s14.8-6.6 14.8-14.8zm71-269c2.1 90.9 4.7 131.9-85.5 132.5-92.5-.7-86.9-44.3-85.5-132.5 0-21.8-32.5-19.6-32.5 0l0 71.6c0 69.3 60.7 90.9 118 90.1 57.3 .8 118-20.8 118-90.1l0-71.6c0-19.6-32.5-21.8-32.5 0z\"]\n};\nvar faWpexplorer = {\n  prefix: 'fab',\n  iconName: 'wpexplorer',\n  icon: [512, 512, [], \"f2de\", \"M0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zm480 0a224 224 0 1 0 -448 0 224 224 0 1 0 448 0zM160.9 124.6l86.9 37.1-37.1 86.9-86.9-37.1 37.1-86.9zm110 169.1l46.6 94-14.6 0-50-100-48.9 100-14 0 51.1-106.9-22.3-9.4 6-14 68.6 29.1-6 14.3-16.5-7.1zM259.1 177.4l68.6 29.4-29.4 68.3-68.3-29.1 29.1-68.6zm80.3 42.9l54.6 23.1-23.4 54.3-54.3-23.1 23.1-54.3z\"]\n};\nvar faMegaport = {\n  prefix: 'fab',\n  iconName: 'megaport',\n  icon: [512, 512, [], \"f5a3\", \"M222.5 209.6l0 66.2 33.5 33.5 33.3-33.3 0-66.4-33.4-33.4-33.4 33.4zM256 8a248 248 0 1 0 0 496 248 248 0 1 0 0-496zM401.1 422.4l-26.1 19.2-26-19.2 0-65.5-33.4-33.4-33.4 33.4 0 65.5-26.2 19.2-26.1-19.2 0-65.5-33.4-33.4-33.5 33.4 0 65.5-26.1 19.2-26.1-19.2 0-87 59.5-59.5 0-87.9 59.5-59.5 0-75.6 26.1-19.2 26.1 19.2 0 75.6 59.5 59.5 0 87.6 59.7 59.7 0 87.1-.1 0z\"]\n};\nvar faLeetcode = {\n  prefix: 'fab',\n  iconName: 'leetcode',\n  icon: [448, 512, [], \"e86a\", \"M235.4 9.3C246.5-2.5 265.1-3.2 277 7.9s12.5 29.8 1.4 41.6l-43 46c21.5 3.3 42.1 11.8 59.1 25.6l74.6 60.3c12.6 10.2 14.6 28.8 4.4 41.4s-28.7 14.6-41.4 4.4l-74.6-60.3c-26.2-21.1-71.9-18.2-94.5 5.9L81 261c-21.5 23-19.1 60 5.6 84.2l91.2 89.4c24.9 24 65.6 24 90.1-.4l51.1-51c11.5-11.5 30.1-11.5 41.6 .1s11.4 30.2-.1 41.7l-51.1 51c-47.1 47.1-124 47.7-171.9 1.6l-92-90.2C-1.4 341.3-6 267.9 38 220.7L235.4 9.3zM411.7 273.2c16.2 0 29.4 13.2 29.4 29.5s-13.2 29.5-29.4 29.5l-216.9 0c-16.2 0-29.4-13.2-29.4-29.5s13.2-29.5 29.4-29.5l216.9 0z\"]\n};\nvar faMdb = {\n  prefix: 'fab',\n  iconName: 'mdb',\n  icon: [576, 512, [], \"f8ca\", \"M17.4 160.4l-10.4 191.6 43.9 0 5.6-79.8 27.9 79.8 44.7 0 25.5-77.4 4.8 77.4 45.5 0-12.8-191.6-45.5 0-40.7 117.3-42.3-117.3-46.3 0zm281 0l-47.9 0 0 191.6 47.9 0s95 .8 94.2-95.8c-.8-94.2-94.2-95.8-94.2-95.8l0 0zm-1.2 146.5l0-102.1s46 4.3 46.8 50.6-46.8 51.5-46.8 51.5l0 0zm238.3-74.2c7.2-11.4 10-25 8-38.3-5.3-35.8-55.1-34.3-55.1-34.3l-51.9 0 0 191.6 45.5 0s87 4.8 87-63.8c0-43.1-33.5-55.1-33.5-55.1l0 0zm-51.9-31.9s13.6-1.6 16 9.6c1.4 6.7-4 12-4 12l-12 0 0-21.6zm-.1 109.5l.1-24.9 0-18.2 .1 0s41.6-4.7 41.2 22.4c-.3 25.7-41.3 20.7-41.3 20.7l0 0z\"]\n};\nvar faPage4 = {\n  prefix: 'fab',\n  iconName: 'page4',\n  icon: [512, 512, [], \"f3d7\", \"M256 504C119 504 8 393 8 256S119 8 256 8c20.9 0 41.3 2.6 60.7 7.5L50.3 392 256 392 256 504zm0-143.6l0-213.6-149.4 213.6 149.4 0zM352 392l0 92.7c45.7-19.2 84.5-51.7 111.4-92.7L352 392zm57.4-138.2l-21.2 8.4 21.2 8.3 0-16.7zm-20.3 54.5c-6.7 0-8 6.3-8 12.9l0 7.7 16.2 0 0-10c0-5.9-2.3-10.6-8.2-10.6zM504 256c0 37.3-8.2 72.7-23 104.4l-129 0 0-333.1C441.3 64.8 504 153.1 504 256zM368.4 143.6l68.2 0 0-47.6-13.9 0 0 32.6-13.9 0 0-29.6-13.9 0 0 29.6-12.7 0 0-32.6-13.9 0 0 47.6 .1 0zm68.1 185.3l-26.5 0 0-11c0-15.4-5.6-25.2-20.9-25.2-15.4 0-20.7 10.6-20.7 25.9l0 25.3 68.2 0 0-15-.1 0zm0-103l-68.2 29.7 0 12.4 68.2 29.5 0-16.6-14.4-5.7 0-26.5 14.4-5.9 0-16.9zm-4.8-68.5l-35.6 0 0 26.6 13.9 0 0-12.2 11 0c8.6 15.8 1.3 35.3-18.6 35.3-22.5 0-28.3-25.3-15.5-37.7l-11.6-10.6c-16.2 17.5-12.2 63.9 27.1 63.9 34 0 44.7-35.9 29.3-65.3z\"]\n};\nvar faTheRedYeti = {\n  prefix: 'fab',\n  iconName: 'the-red-yeti',\n  icon: [512, 512, [], \"f69d\", \"M488.7 241.7l20.7 7.1c-9.6-23.9-23.9-37-31.7-44.8l7.1-18.2c.2 0 12.3-27.8-2.5-30.7-.6-11.3-6.6-27-18.4-27-7.6-10.6-17.7-12.3-30.7-5.9-9.1 4.4-17.6 10-25.3 16.5-5.3-6.4-3 .4-3-29.8-37.1-24.3-45.4-11.7-74.8 3l.5 .5c-22-7.7-45.1-12.2-68.4-13.3-5.5-8.7-18.6-19.1-25.1-25.1l24.8 7.1c-5.5-5.5-26.8-12.9-34.2-15.2 18.2-4.1 29.8-20.8 42.5-33-34.9-10.1-67.9-5.9-97.9 11.8l12-44.2-1.8-.5c-31.6 24.2-33 41.9-33.7 45.5-.9-2.4-6.3-19.6-15.2-27-3.3 8.1-3.5 17.1-.5 25.3 3 8.4 5.9 14.8 8.4 18.9-16-3.3-28.3-4.9-49.2 0l-3.7 0 33 14.3c-20.2 18.9-36.1 41.9-46.7 67.4l-1.7 8.4 1.7 1.7 7.6-4.7c-3.3 11.6-5.3 19.4-6.6 25.8-10.9 12.2-20.2 25.8-27.8 40.3-15 1-31.8 10.8-40.3 14.3l3 3.4 28.8 1c-.5 1-.7 2.2-1.2 3.2-7.3 6.4-39.8 37.7-33 80.7l20.2-22.4c.5 1.7 .7 3.4 1.2 5.2 0 25.5 .4 89.6 64.9 150.5 43.6 40 96 60.2 157.5 60.2 121.7 0 223-87.3 223-211.5 6.8-9.7-1.2 3 16.7-25.1l13 14.3 2.5-.5c-1.8-11.7-4.8-23.1-8.9-34.2-1.5-4.8-3.8-9.3-6.8-13.3l0 0zM398.5 111.2l-.5 21.9c5.5 18.1 16.9 17.2 22.4 17.2l-3.4-4.7 22.4-5.4c-9 .5-18 .5-27 0 12.8-2.1 33.3-29 43-11.3 3.4 7.6 6.4 17.2 9.3 27.8l1.7-5.9c-1.3-5-1.8-10.1-1.7-15.2 5.4 .5 8.8 3.4 9.3 10.1 .5 6.4 1.7 14.8 3.4 25.3l4.7-11.3c4.6 0 4.5-3.6-2.5 20.7-20.9-8.7-35.1-8.4-46.5-8.4l18.2-16c-25.3 8.2-33 10.8-54.8 20.9-1.1-5.4-5-13.5-16-19.9-3.2 3.8-2.8 .9-.7 14.8l-2.5 0c-1.2-8.2-4.1-16-8.4-23.1l4.2-3.4c8.4-7.1 11.8-14.3 10.6-21.9-.5-6.4-5.4-13.5-13.5-20.7 5.6-3.4 15.2-.4 28.3 8.5zm-39.6-10.1c2.7 1.9 11.4 5.4 18.9 17.2 4.2 8.4 4 9.8 3.4 11.1-.5 2.4-.5 4.3-3 7.1-1.7 2.5-5.4 4.7-11.8 7.6-7.6-13-16.5-23.6-27.8-31.2l20.3-11.8zm-267.4 42l1.2-1.7c1.2-2.9 4.2-7.6 9.3-15.2l2.5-3.4-13 12.3 5.4-4.7-10.1 9.3-4.2 1.2c12.3-24.1 23.1-41.3 32.5-50.2 9.3-9.3 16-16 20.2-19.4l-6.4 1.2c-11.3-4.2-19.4-7.1-24.8-8.4 2.5-.5 3.7-.5 3.2-.5 10.3 0 17.5 .5 20.9 1.2 5.2 1.7 10.6 2.5 16 2.5l.5-1.7-8.4-35.8 13.5 29c2.8-4.4 4.8-9.2 5.9-14.3 1.7-6.4 5.4-13 10.1-19.4s7.6-10.6 9.3-11.3c-2.6 8.3-4.7 16.8-6.4 25.3l-1.7 7.1-.5 4.7 2.5 2.5c21.9-13.5 45.5-19.4 71.3-18.9l21.1 .5c-11.8 13.5-27.8 21.9-48.5 24.8-7.7 1.4-15.6 2.4-23.4 2.9l-.2-.5-2.5-1.2c-4.8-1-9.7-.3-14 2-2.5-.2-4.9-.5-7.1-.7l-2.5 1.7 .5 1.2c2 .2 3.9 .5 6.2 .7l-2 3.4 3.4-.5-10.6 11.3c-4.2 3-5.4 6.4-4.2 9.3l5.4-3.4 1.2 0c6.1-8.2 15.2-13.6 25.3-15.2l0-3c6.4 .5 13 1 19.4 1.2 6.4 0 8.4 .5 5.4 1.2 7.2 4 14.1 8.6 20.7 13.5 13.5 10.1 23.6 21.9 30 35.4 8.8 18.2 13.5 37.1 13.5 56.6 0 9.5-1 19-3 28.3-3.5 15.9-8.9 31.3-16 46l2.5 .5c18.2-19.7 41.9-16 49.2-16l-6.4 5.9 22.4 17.7-1.7 30.7c-5.4-12.3-16.5-21.1-33-27.8 16.5 14.8 23.6 21.1 21.9 20.2-4.8-2.8-3.5-1.9-10.8-3.7 4.1 4.1 17.5 18.8 18.2 20.7l.2 .2-.2 .2c0 1.8 1.6-1.2-14 22.9-75.2-15.3-106.3-42.7-141.2-63.2l11.8 1.2c-11.8-18.5-15.6-17.7-38.4-26.1l10.6-8.4c-8.8-3-18.2-3-28.3 .5l7.6-10.6-1.2-1.7c-14.9 4.3-19.8 9.2-22.6 11.3-1.1-5.5-2.8-12.4-12.3-28.8l-1.2 27-13.2-5c1.5-25.2 5.4-50.5 13.2-74.6zM368 473.1c-49.9 25-56.1 22.4-59 23.9-29.8-11.8-50.9-31.7-63.5-58.8l30 16.5c-9.8-9.3-18.3-16.5-38.4-44.3l11.8 23.1-17.7-7.6c14.2 21.1 23.5 51.7 66.6 73.5-120.8 24.2-199-72.1-200.9-74.3 11.1 9.2 22.9 17.5 35.4 24.8 3.4 1.7 7.1 2.5 10.1 1.2l-16-20.7c9.2 4.2 9.5 4.5 69.1 29-42.5-20.7-73.8-40.8-93.2-60.2-.5 6.4-1.2 10.1-1.2 10.1 8.7 7.3 15.8 16.4 20.7 26.6-39-18.9-57.6-47.6-71.3-82.6 49.9 55.1 118.9 37.5 120.5 37.1 34.8 16.4 69.9 23.6 113.9 10.6 3.3 0 20.3 17 25.3 39.1l4.2-3-2.5-23.6c9 9 24.9 22.6 34.4 13-15.6-5.3-23.5-9.5-29.5-31.7 4.6 4.2 7.6 9 27.8 15l1.2-1.2-10.5-14.2c11.7-4.8-3.5 1 32-10.8 4.3 34.3 9 49.2 .7 89.5zM483.3 258.7l-2.5 .5 3 9.3c-3.5 5.9-23.7 44.3-71.6 79.7-39.5 29.8-76.6 39.1-80.9 40.3l-7.6-7.1-1.2 3 14.3 16-7.1-4.7 3.4 4.2-1.2 0-21.9-13.5 9.3 26.6-19-27.9-1.2 2.5 7.6 29c-6.1-8.2-21-32.6-56.8-39.6l32.5 21.2c-31.2 4.7-63 2.5-93.2-6.4-4.2-1.2-8.9-2.5-13.5-4.2l1.2-3-44.8-22.4 26.1 22.4c-57.7 9.1-113-25.4-126.4-83.4L29.3 284.8 7 307.1c19.5-57.5 25.6-57.9 51.4-70.1-9.1-5.3-1.6-3.3-38.4-9.3 15.8-5.8 33-15.4 73 5.2 1.2-.7 2.4-1.3 3.7-1.7 .6-3.2 .4-.8 1-11.8 3.9 10 3.6 8.7 3 9.3l1.7 .5c12.7-6.5 8.9-4.5 17-8.9l-5.4 13.5 22.3-5.8-8.4 8.4 2.5 2.5c4.5-1.8 30.3 3.4 40.8 16l-23.6-2.5c39.4 23 51.5 54 55.8 69.6l1.7-1.2c-2.8-22.3-12.4-33.9-16-40.1 4.2 5 39.2 34.6 110.4 46-11.3-.5-23.1 5.4-34.9 18.9l46.7-20.2-9.3 21.9c7.6-10.1 14.8-23.6 21.2-39.6l0-.5 1.2-3-1.2 16c13.5-41.8 25.3-78.5 35.4-109.7l13.5-27.8 0-2-5.4-4.2 10.1 0 5.9 4.2 2.5-1.2-3.4-16 12.3 18.9 41.8-20.2-14.8 13 .5 2.9 17.7-.5c11.1 .4 22.1 1.8 33 4.2l-23.6 2.5-1.2 3 26.6 23.1c9.9 9.9 18.9 20.6 27 32-11.2-3.3-10.3-3.4-21.2-3.4l12.3 32.5-8.9-12.8zm-6.1-71.3l-3.9 13-14.3-11.8 18.2-1.2zm-254.8 7.1c1.7 10.6 4.7 17.7 8.8 21.9-9.3 6.6-27.5 13.9-46.5 16l.5 1.2c8.3 1.3 16.9 .4 24.8-2.5l-7.1 13c4.2-1.7 10.1-7.1 17.7-14.8 11.9-5.5 12.7-5.1 20.2-16-12.7-6.4-15.7-13.7-18.4-18.8zm3.7-102.3c-6.4-3.4-10.6 3-12.3 18.9s2.5 29.5 11.8 39.6 18.2 10.6 26.1 3 3.4-23.6-11.3-47.7c-3.5-5.7-8.4-10.5-14.3-13.8l0 0zm-4.7 46.3c5.4 2.2 10.5 1.9 12.3-10.6l0-4.7-1.2 .5c-4.3-3.1-2.5-4.5-1.7-6.2l.5-.5c-.9-1.2-5-8.1-12.5 4.7-.5-13.5 .5-21.9 3-24.8 1.2-2.5 4.7-1.2 11.3 4.2 6.4 5.4 11.3 16 15.2 32.5 6.5 28-19.8 26.2-26.9 4.9zm-45-5.5c1.6 .3 9.3-1.1 9.3-14.8l-.5 0c-5.4-1.1-2.2-5.5-.7-5.9-1.7-3-3.4-4.2-5.4-4.7-8.1 0-11.6 12.7-8.1 21.2 .5 1.1 1.3 2 2.2 2.8s2 1.2 3.2 1.4l0 0zm40.1-50.1l-2.5 .5 .5 3c9.1-.5 18.1 1.5 26.1 5.9-2.5-5.5-10-14.3-28.3-14.3l.5 2.5 3.7 2.4zm-71.8 49.4c21.7 16.8 16.5 21.4 46.5 23.6l-2.9-4.7c8.4-7.2 13.7-17.3 14.8-28.3 1.7-16-1.2-29.5-8.8-41.3l13-7.6c0-.3 0-.6-.1-.9s-.2-.6-.4-.8c-2.2-.9-4.6-1.2-7-.9s-4.6 1.2-6.5 2.6c-12.7 6.7-28 20.9-29 22.4-1.7 1.7-3.4 5.9-5.4 13.5-1.9 7.7-2.9 15.6-2.9 23.6-4.7-8-10.5-6.4-19.9-5.9l7.1 7.6c-16.5 0-23.3 15.4-23.6 16 6.8 0 4.6-7.6 30-12.3-4.3-6.3-3.3-5-4.9-6.6zm18.7-18.7c1.2-7.6 3.4-13 6.4-17.2 5.4-6.4 10.6-10.1 16-11.8 4.2-1.7 7.1 1.2 10.1 9.3 2.5 8.2 3.5 16.8 3 25.3-.5 9.3-3.4 17.2-8.4 23.1-2.9 3.4-5.4 5.9-6.4 7.6-3.8 .4-7.6 .2-11.3-.5l-7.1-3.4-5.4-6.4c.8-10 1.3-18.8 3.1-26zm42 56.1c-34.8 14.4-34.7 14-36.1 14.3-20.8 4.7-19-24.4-18.9-24.8l5.9-1.2-.5-2.5c-20.2-2.6-31 4.2-32.5 4.9 .5 .5 3 3.4 5.9 9.3 4.2-6.4 8.8-10.1 15.2-10.6-1.7 11.2-1.2 22.7 1.7 33.7 .1 .5 2.6 17.4 27.5 24.1 11.3 3 27 1.2 48.9-5.4l-9.2 .5c-4.2-14.8-6.4-24.8-5.9-29.5 11.3-8.8 21.9-11.3 30.7-7.6l2.5 0-11.8-7.6-7.1 .5c-5.9 1.2-12.3 4.2-19.4 8.4l3.1-6.5z\"]\n};\nvar faJira = {\n  prefix: 'fab',\n  iconName: 'jira',\n  icon: [512, 512, [], \"f7b1\", \"M498.5 241.7c-72.9-72.7-169.4-169.9-241.5-241.7-165.5 164.9-242.5 241.7-242.5 241.7-7.9 7.9-7.9 20.7 0 28.7 132.8 132.3 61.8 61.5 242.5 241.6 379.4-378 15.7-16.7 241.5-241.7 8-7.9 8-20.7 0-28.6zM257 331.7l-76-75.7 76-75.7 76 75.7-76 75.7z\"]\n};\nvar faFedex = {\n  prefix: 'fab',\n  iconName: 'fedex',\n  icon: [640, 512, [], \"f797\", \"M586 284.5l53.3-59.9-62.4 0-21.7 24.8-22.5-24.8-118.7 0 0-16 56.1 0 0-48.1-151.2 0 0 75.5-.5 0c-9.6-11-21.5-14.8-35.4-14.8-28.4 0-49.8 19.4-57.3 44.9-18-59.4-97.4-57.6-121.9-14l0-24.2-54.8 0 0-26.2 60 0 0-41.1-109 0 0 184.4 49 0 0-77.5 48.9 0c-1.5 5.7-2.3 11.8-2.3 18.2 0 73.1 102.6 91.4 130.2 23.7l-42 0c-14.7 20.9-45.8 8.9-45.8-14.6l85.5 0c3.7 30.5 27.4 56.9 60.1 56.9 14.1 0 27-6.9 34.9-18.6l.5 0 0 11.9 212.2 0 22.1-25 22.3 25 64.4 0-54-60.5zM139.3 267.9c6.1-26.3 41.7-25.6 46.5 0l-46.5 0zm153.4 48.9c-34.6 0-34-62.8 0-62.8 32.6 0 34.5 62.8 0 62.8zm167.8 19.1l-94.4 0 0-166.5 95 0 0 30.2-56.1 0 0 33.9 55.5 0 0 28.1-56.1 0 0 44.7 56.1 0 0 29.6zm-45.9-39.8l0-24.4 56.1 0 0-44 50.7 57-50.7 57 0-45.6-56.1 0zm138.6 10.3l-26.1 29.5-38.1 0 45.6-51.2-45.6-51.2 39.7 0 26.6 29.3 25.6-29.3 38.5 0-45.4 51 46 51.4-40.5 0-26.3-29.5z\"]\n};\nvar faEvernote = {\n  prefix: 'fab',\n  iconName: 'evernote',\n  icon: [384, 512, [], \"f839\", \"M121.1 132.2c1.6 22.3-17.6 21.6-21.6 21.6-68.9 0-73.6-1-83.6 3.3-.6 .2-.7 0-.4-.4L124.1 46.4c.4-.4 .6-.2 .4 .4-4.4 10-3.4 15.1-3.4 85.4zm79 308c-14.7-37.1 13-76.9 52.5-76.6 17.5 0 22.6 23.2 7.9 31.4-6.2 3.3-24.9 1.7-25.1 19.2 0 17.1 19.7 25 31.2 24.9 6 0 11.9-1.2 17.5-3.5s10.6-5.7 14.8-9.9 7.6-9.3 9.9-14.8 3.5-11.5 3.5-17.5l0-.1c0-11.6-7.8-47.2-47.5-55.3-7.7-1.5-65-6.3-68.4-50.5-3.7 16.9-17.4 63.5-43.1 69.1-8.7 1.9-69.7 7.6-112.9-36.8 0 0-18.6-15.2-28.2-58-3.4-15.7-9.3-39.7-11.1-62 0-18 11.1-30.4 25.1-32.2 81 0 90 2.3 101-7.8 9.8-9.2 7.8-15.5 7.8-102.8 1-8.3 7.8-30.8 53.4-24.1 6 .9 31.9 4.2 37.5 30.6L290 74.8c20.4 3.7 70.9 7 80.6 57.9 22.7 121.1 8.9 238.5 7.8 238.5-16 114.4-111.1 108.9-111.1 108.9-19-.2-54.2-9.4-67.3-39.8l0 0zM281 235.4c-1 1.9-2.2 6 .9 7 14.1 4.9 39.8 6.8 45.9 5.5 3.1-.2 3.1-4.4 2.5-6.6-3.5-21.8-40.8-26.5-49.2-5.9l0 0z\"]\n};\nvar faUsb = {\n  prefix: 'fab',\n  iconName: 'usb',\n  icon: [640, 512, [], \"f287\", \"M633.5 256c0 3.1-1.7 6.1-4.5 7.5L539.9 317c-1.4 .8-2.8 1.4-4.5 1.4-1.4 0-3.1-.3-4.5-1.1-2.8-1.7-4.5-4.5-4.5-7.8l0-35.6-230.7 0c25.3 39.6 40.5 106.9 69.6 106.9l26.7 0 0-26.8c0-5 3.9-8.9 8.9-8.9l89.1 0c5 0 8.9 3.9 8.9 8.9l0 89.1c0 5-3.9 8.9-8.9 8.9l-89.1 0c-5 0-8.9-3.9-8.9-8.9l0-26.7-26.7 0c-75.4 0-81.1-142.5-124.7-142.5l-100.3 0c-8.1 30.6-35.9 53.5-69 53.5-39.3-.1-71.3-32.1-71.3-71.4s32-71.3 71.3-71.3c33.1 0 61 22.8 69 53.5 39.1 0 43.9 9.5 74.6-60.4 40.1-89.1 58.1-82.1 108.9-82.1 7.5-20.9 27-35.6 50.4-35.6 29.5 0 53.5 23.9 53.5 53.5s-23.9 53.5-53.5 53.5c-23.4 0-42.9-14.8-50.4-35.6l-29.8 0c-29.1 0-44.3 67.4-69.6 106.9l302.1 0 0-35.6c0-3.3 1.7-6.1 4.5-7.8s6.4-1.4 8.9 .3L629 248.8c2.8 1.1 4.5 4.1 4.5 7.2z\"]\n};\nvar faAngrycreative = {\n  prefix: 'fab',\n  iconName: 'angrycreative',\n  icon: [640, 512, [], \"f36e\", \"M640 238.2l-3.2 28.2-34.5 2.3-2 18.1 34.5-2.3-3.2 28.2-34.4 2.2-2.3 20.1 34.4-2.2-3 26.1-64.7 4.1 12.7-113.2-47.3 115.4-31.9 2-23.8-117.8 30.3-2 13.6 79.4 31.7-82.4 93.1-6.2zM426.8 371.5l28.3-1.8 12.9-120.1-28.4 1.9-12.8 120zM162 388.1l-19.4-36-3.5 37.4-28.2 1.7 2.7-29.1c-11 18-32 34.3-56.9 35.8-32.8 2-59.7-20.9-56.4-58.2 2.6-29.3 26.7-62.8 67.5-65.4 37.7-2.4 47.6 23.2 51.3 28.8l2.8-30.8 38.9-2.5c20.1-1.3 38.7 3.7 42.5 23.7l2.6-26.6 64.8-4.2-2.7 27.9-36.4 2.4-1.7 17.9 36.4-2.3-2.7 27.9-36.4 2.3-1.9 19.9 36.3-2.3-2.1 20.8 55-117.2 23.8-1.6 32.1 110.6 8.9-85.6-22.3 1.4 2.9-27.9 75-4.9-3 28-24.3 1.6-9.7 91.9-58 3.7-4.3-15.6-39.4 2.5-8 16.3-126.2 7.7zm-44.3-70.2l-26.4 1.7c-6.7-12.4-14.4-16.6-26.3-15.8-19 1.2-33.3 17.5-34.6 33.3-1.4 16 7.3 32.5 28.7 31.2 12.8-.8 21.3-8.6 28.9-18.9l27-1.7 2.7-29.8zm56.1-7.7c1.2-12.9-7.6-13.6-26.1-12.4L145 326.3c14.2-.9 27.5-2.1 28.8-16.1zM194.9 381l5.8-60c-5 13.5-14.7 21.1-27.9 26.6L194.9 381zm135.4-45l-7.9-37.8-15.8 39.3 23.7-1.5zM160.2 261.4l-4.3-17.5-39.6 2.6-8.1 18.2-31.9 2.1 57-121.9 23.9-1.6 30.7 102 9.9-104.7 27-1.8 37.8 63.6 6.5-66.6 28.5-1.9-4 41.2c7.4-13.5 22.9-44.7 63.6-47.5 40.5-2.8 52.4 29.3 53.4 30.3l3.3-32 39.3-2.7c12.7-.9 27.8 .3 36.3 9.7l-4.4-11.9 32.2-2.2 12.9 43.2 23-45.7 31-2.2-43.6 78.4-4.8 44.3-28.4 1.9 4.8-44.3-15.8-43c1 22.3-9.2 40.1-32 49.6l25.2 38.8-36.4 2.4-19.2-36.8-4 38.3-28.4 1.9 3.3-31.5c-6.7 9.3-19.7 35.4-59.6 38-26.2 1.7-45.6-10.3-55.4-39.2l-4 40.3-25 1.6-37.6-63.3-6.3 66.2-56.8 3.7zm276.6-82.1c10.2-.7 17.5-2.1 21.6-4.3 4.5-2.4 7-6.4 7.6-12.1 .6-5.3-.6-8.8-3.4-10.4-3.6-2.1-10.6-2.8-22.9-2l-2.9 28.8zM327.7 214c5.6 5.9 12.7 8.5 21.3 7.9 4.7-.3 9.1-1.8 13.3-4.1 5.5-3 10.6-8 15.1-14.3l-34.2 2.3 2.4-23.9 63.1-4.3 1.2-12-31.2 2.1c-4.1-3.7-7.8-6.6-11.1-8.1-4-1.7-8.1-2.8-12.2-2.5-8 .5-15.3 3.6-22 9.2-7.7 6.4-12 14.5-12.9 24.4-1.1 9.6 1.4 17.3 7.2 23.3zm-201.3 8.2l23.8-1.6-8.3-37.6-15.5 39.2z\"]\n};\nvar faMizuni = {\n  prefix: 'fab',\n  iconName: 'mizuni',\n  icon: [512, 512, [], \"f3cc\", \"M256 8a248 248 0 1 0 0 496 248 248 0 1 0 0-496zM176 359.9c-31.4 10.6-58.8 27.3-80 48.2L96 136c0-22.1 17.9-40 40-40s40 17.9 40 40l0 223.9zM296 350c-12.9-2-26.2-3.1-39.8-3.1-13.8 0-27.2 1.1-40.2 3.1l0-214c0-22.1 17.9-40 40-40s40 17.9 40 40l0 214zm120 57.7c-21.2-20.8-48.6-37.4-80-48L336 136c0-22.1 17.9-40 40-40s40 17.9 40 40l0 271.7z\"]\n};\nvar faItchIo = {\n  prefix: 'fab',\n  iconName: 'itch-io',\n  icon: [512, 512, [], \"f83a\", \"M71.9 34.8C50.2 47.7 7.4 96.8 7 109.7l0 21.3c0 27.1 25.3 50.8 48.2 50.8 27.6 0 50.5-22.8 50.5-50 0 27.1 22.2 50 49.8 50s49-22.8 49-50c0 27.1 23.6 50 51.2 50l.5 0c27.6 0 51.2-22.8 51.2-50 0 27.1 21.5 50 49 50s49.8-22.8 49.8-50c0 27.1 23 50 50.5 50 23 0 48.3-23.8 48.3-50.8l0-21.3c-.4-12.9-43.2-62.1-64.9-75-67.4-2.3-114.2-2.7-184-2.7S91.1 33.1 71.9 34.8zM204.2 169.2c-22 38.4-77.9 38.7-99.8 .2-13.2 23.1-43.2 32.1-56 27.7-3.9 40.2-13.7 237.1 17.7 269.2 80 18.7 302.1 18.1 379.8 0 31.6-32.3 21.3-232 17.7-269.2-12.9 4.4-42.9-4.6-56-27.7-22 38.5-77.8 38.1-99.8-.2-7.1 12.5-23 28.9-51.8 28.9-10.4 .3-20.8-2.2-29.9-7.3s-16.7-12.6-21.9-21.6l0 0zm-41.6 53.8c16.5 0 31.1 0 49.2 19.8 29.3-3 58.9-3 88.2 0 18.2-19.7 32.8-19.7 49.2-19.7 52.3 0 65.2 77.5 83.9 144.4 17.3 62.2-5.5 63.7-34 63.7-42.1-1.6-65.5-32.2-65.5-62.8-39.3 6.4-101.9 8.8-155.6 0 0 30.6-23.3 61.2-65.5 62.8-28.4-.1-51.2-1.6-33.9-63.7 18.7-67 31.6-144.4 83.9-144.4l0-.1zM256 270.8s-44.4 40.8-52.4 55.2l29-1.2 0 25.3c0 1.5 21.3 .2 23.3 .2 11.6 .5 23.3 1 23.3-.2l0-25.3 29 1.2c-8-14.5-52.4-55.2-52.4-55.2l.1 0z\"]\n};\nvar faWindows = {\n  prefix: 'fab',\n  iconName: 'windows',\n  icon: [448, 512, [], \"f17a\", \"M0 93.7l183.6-25.3 0 177.4-183.6 0 0-152.1zM0 418.3l183.6 25.3 0-175.2-183.6 0 0 149.9zm203.8 28l244.2 33.7 0-211.6-244.2 0 0 177.9zm0-380.6l0 180.1 244.2 0 0-213.8-244.2 33.7z\"]\n};\nvar faDolibarr = {\n  prefix: 'fab',\n  iconName: 'dolibarr',\n  icon: [448, 512, [], \"e8bf\", \"M167.6 160.2l0 319.5-119.4-1.3 0-446.4 155.6 0c68.2 0 121.7 17.2 160.3 51.7 45.9 41.2 68.8 97.1 68.8 167.8 0 67.6-19.6 122.7-58.8 165.5S285.3 480 223.6 480c-7.3 0-20.3-.2-36.6-.3l0-131.1 32.9-.2c69.6-.4 90.6-32.2 90.6-97 0-60.8-34.2-91.2-102.6-91.2l-40.3 0z\"]\n};\nvar faStumbleupon = {\n  prefix: 'fab',\n  iconName: 'stumbleupon',\n  icon: [512, 512, [], \"f1a4\", \"M502.9 266l0 69.7c0 62.1-50.3 112.4-112.4 112.4-61.8 0-112.4-49.8-112.4-111.3l0-70.2 34.3 16 51.1-15.2 0 70.6c0 14.7 12 26.5 26.7 26.5S417 352.7 417 338l0-72 85.9 0zM278.2 207.8l34.3 16 51.1-15.2 0-35.6c0-60.5-51.1-109-112.1-109-60.8 0-112.1 48.2-112.1 108.2l0 162.4c0 14.9-12 26.7-26.7 26.7S86 349.5 86 334.6l0-68.6-86 0 0 69.7c0 62 50.3 112.3 112.4 112.3 61.6 0 112.4-49.5 112.4-110.8l0-160.3c0-14.7 12-26.7 26.7-26.7s26.7 12 26.7 26.7l0 30.9z\"]\n};\nvar faGoogle = {\n  prefix: 'fab',\n  iconName: 'google',\n  icon: [512, 512, [], \"f1a0\", \"M500 261.8C500 403.3 403.1 504 260 504 122.8 504 12 393.2 12 256S122.8 8 260 8c66.8 0 123 24.5 166.3 64.9l-67.5 64.9c-88.3-85.2-252.5-21.2-252.5 118.2 0 86.5 69.1 156.6 153.7 156.6 98.2 0 135-70.4 140.8-106.9l-140.8 0 0-85.3 236.1 0c2.3 12.7 3.9 24.9 3.9 41.4z\"]\n};\nvar faDiscord = {\n  prefix: 'fab',\n  iconName: 'discord',\n  icon: [576, 512, [], \"f392\", \"M492.5 69.8c-.2-.3-.4-.6-.8-.7-38.1-17.5-78.4-30-119.7-37.1-.4-.1-.8 0-1.1 .1s-.6 .4-.8 .8c-5.5 9.9-10.5 20.2-14.9 30.6-44.6-6.8-89.9-6.8-134.4 0-4.5-10.5-9.5-20.7-15.1-30.6-.2-.3-.5-.6-.8-.8s-.7-.2-1.1-.2c-41.3 7.1-81.6 19.6-119.7 37.1-.3 .1-.6 .4-.8 .7-76.2 113.8-97.1 224.9-86.9 334.5 0 .3 .1 .5 .2 .8s.3 .4 .5 .6c44.4 32.9 94 58 146.8 74.2 .4 .1 .8 .1 1.1 0s.7-.4 .9-.7c11.3-15.4 21.4-31.8 30-48.8 .1-.2 .2-.5 .2-.8s0-.5-.1-.8-.2-.5-.4-.6-.4-.3-.7-.4c-15.8-6.1-31.2-13.4-45.9-21.9-.3-.2-.5-.4-.7-.6s-.3-.6-.3-.9 0-.6 .2-.9 .3-.5 .6-.7c3.1-2.3 6.2-4.7 9.1-7.1 .3-.2 .6-.4 .9-.4s.7 0 1 .1c96.2 43.9 200.4 43.9 295.5 0 .3-.1 .7-.2 1-.2s.7 .2 .9 .4c2.9 2.4 6 4.9 9.1 7.2 .2 .2 .4 .4 .6 .7s.2 .6 .2 .9-.1 .6-.3 .9-.4 .5-.6 .6c-14.7 8.6-30 15.9-45.9 21.8-.2 .1-.5 .2-.7 .4s-.3 .4-.4 .7-.1 .5-.1 .8 .1 .5 .2 .8c8.8 17 18.8 33.3 30 48.8 .2 .3 .6 .6 .9 .7s.8 .1 1.1 0c52.9-16.2 102.6-41.3 147.1-74.2 .2-.2 .4-.4 .5-.6s.2-.5 .2-.8c12.3-126.8-20.5-236.9-86.9-334.5zm-302 267.7c-29 0-52.8-26.6-52.8-59.2s23.4-59.2 52.8-59.2c29.7 0 53.3 26.8 52.8 59.2 0 32.7-23.4 59.2-52.8 59.2zm195.4 0c-29 0-52.8-26.6-52.8-59.2s23.4-59.2 52.8-59.2c29.7 0 53.3 26.8 52.8 59.2 0 32.7-23.2 59.2-52.8 59.2z\"]\n};\nvar faHackerNews = {\n  prefix: 'fab',\n  iconName: 'hacker-news',\n  icon: [448, 512, [], \"f1d4\", \"M0 32l0 448 448 0 0-448-448 0zM21.2 229.2l-.2 0c.1-.1 .2-.3 .3-.4 0 .1 0 .3-.1 .4zm218 53.9l0 100.9-31.4 0 0-102.7-79.8-153.3 37.3 0c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6l34.8 0-80.8 155.1z\"]\n};\nvar faEleventy = {\n  prefix: 'fab',\n  iconName: 'eleventy',\n  icon: [640, 512, [\"11ty\"], \"e7d6\", \"M615.3 168.5c2.3 0 4.6 .7 6.6 2.2 1.9 1.4 3.1 3.3 3.8 5 1.4 3.3 1.8 7.3 1.8 11.3 0 2.2-.3 4.9-.7 7.6l0 .4-50.9 264.9 0 0c-4 22.1-8.5 39.4-13.6 51.7-5 12.1-10.9 21.6-18.6 27l0 0c-7.5 5.3-16.9 7.7-27.6 8l-3 0c-16 0-29.3-4.2-36.9-14.8-.1-.1-.1-.1-.2-.2-.1-.2-.3-.4-.5-.6l0 0c-1.8-2.4-2.5-5.2-2.9-7.4-.5-2.8-.7-6.1-.7-9.8 0-7.3 .6-13.5 2.1-18.2 1.4-4.4 4.8-10.4 12.2-10.4l1.3 .1c.2 0 .4 .1 .5 .1 .3 .1 .6 .1 .8 .2 .6 .1 1.3 .3 2.2 .6l7.6 2.2 .1 0 7.6 2.1c.9 .2 1.7 .4 2.2 .5 .4 .1 .6 .1 .7 .1 0 0 .1 0 .2-.1 .1-.1 .4-.2 .8-.6 .9-.9 2.2-2.6 3.6-5.7 2.6-5.8 4.2-14.7 4.2-27.4 0-.7-.3-3.4-1.3-8.9-.9-5.1-2.3-12.2-4.2-21.1l-56-232.9-.1-.4 0-.3c-.4-2.7-.7-5.3-.7-7.3 0-3.7 .4-7.5 1.7-10.6 .7-1.6 1.8-3.4 3.5-4.9 1.9-1.5 4.2-2.3 6.5-2.3l34.6 0c4.6 0 8.7 1.7 11.9 5l1.3 1.5c1.2 1.6 2 3.4 2.7 5.2 .9 2.4 1.5 5.1 2 8.1l30.4 161.2 23.8-160c.8-5.8 2.2-11.4 5.1-15.1 3-3.8 7.2-5.8 12-5.8l24 0zM375.1 34.6c2.6 0 5.1 .7 7.4 2.3 2.2 1.5 3.7 3.6 4.7 5.7 1.9 4 2.5 9.1 2.5 14.5l0 111.2c0 .1 0 .2 0 .3l32.4 0c2.5 0 5 .6 7.2 2.1 2.2 1.4 3.7 3.4 4.8 5.5 2 3.9 2.6 8.8 2.6 13.9l0 15.4c0 5-.6 9.8-2.6 13.7-1.1 2-2.6 4-4.8 5.4-2.2 1.4-4.7 2-7.1 2l-32.5 0 0 145.8c0 10.8 .7 19.5 2 26.2 1.4 6.9 3.1 10.9 4.7 12.9 1.2 1.5 2.2 2.5 3.1 3.2l2.2 1.4 .1 .1 2.9 .8c1.2 .2 2.6 .3 4.3 .3l20.3 0c4.5 0 8.9 1.7 11.8 5.8 2.6 3.6 3.3 8.1 3.3 12.2l0 17.2c0 4.5-.8 9.3-3.4 13.1-3 4.2-7.5 6-12.3 6l0 0-29.1 .1c-8 0-15-.6-21.2-1.7-6.7-1.3-13.4-4.1-20.1-8.1-7.2-4.4-13-10.3-17.5-17.8-4.5-7.5-7.9-17.5-10.5-29.5-2.6-12.2-3.9-26.6-3.9-43l0-144.9-13.4 0c-2.4 0-4.9-.6-7.1-2-2.2-1.4-3.7-3.4-4.8-5.4-2-3.9-2.6-8.7-2.6-13.7l0-15.4c0-5.1 .6-10 2.6-13.9 1.1-2.1 2.6-4 4.8-5.5 2.2-1.5 4.7-2.1 7.2-2.1l13.4 0 0-.6 5.2-111.2 0-.1 .3-3.9c.5-3.8 1.3-7.4 2.7-10.3 2.1-4.2 6-7.9 11.8-7.9l28.6 0zm-268 11.7c1.8 .3 3.6 .9 5.3 2.1 2.1 1.5 3.5 3.5 4.4 5.4 1.7 3.7 2.3 8.4 2.3 13.2l0 377.8c0 6.7-.6 12.6-2.4 17.1-.9 2.3-2.3 4.7-4.4 6.5-2.3 2-5.1 3-8.1 3l-43.7 0c-3 0-5.8-1.1-8.1-3.1-2.1-1.9-3.4-4.3-4.2-6.5-1.7-4.5-2.3-10.3-2.3-17l0-315.8c-4.8 1.2-8.7 2.2-11.5 2.9-1.9 .5-3.4 .8-4.4 1.1-.5 .1-.9 .2-1.2 .3-.1 0-.3 .1-.5 .1-.1 0-.2 0-.3 .1 0 0-.2 0-.3 0 0 0-.2 0-.4 0l0 0c-.1 0-.3 0-.4 0-.1 0-.2 0-.2 0-2.2 .1-4.5-.4-6.6-1.7-2.3-1.4-3.8-3.4-4.7-5.3-1.8-3.7-2.3-8.4-2.3-13l0-27.4c0-4.4 .7-8.8 2.6-12.4 2.1-3.9 5.5-6.6 9.8-7.6l75.5-19.5c1.4-.4 2.9-.5 4.4-.5l1.8 .1zm143.8-.5c1.8 .3 3.6 .9 5.2 2.1 2.1 1.5 3.5 3.5 4.4 5.4 1.7 3.7 2.2 8.4 2.2 13.2l0 377.8c0 6.7-.6 12.6-2.4 17.1-.9 2.3-2.3 4.7-4.4 6.5-2.3 2-5.1 3-8.1 3l-43.7 0c-3 0-5.8-1.1-8.1-3.1-2.1-1.9-3.4-4.3-4.2-6.5-1.7-4.5-2.3-10.3-2.3-17l0-315.8c-4.8 1.2-8.7 2.2-11.5 2.9-1.9 .5-3.4 .8-4.4 1.1-.5 .1-.9 .2-1.2 .3-.1 0-.3 .1-.5 .1-.1 0-.2 0-.3 .1-.1 0-.2 0-.3 0 0 0-.2 0-.4 0l0 0c-.1 0-.2 0-.3 0-.1 0-.2 0-.3 0-2.2 .1-4.5-.4-6.6-1.7-2.3-1.4-3.8-3.4-4.7-5.3-1.8-3.7-2.3-8.3-2.3-13l0-27.4c0-4.4 .7-8.7 2.6-12.4 2.1-3.9 5.5-6.6 9.8-7.6l75.4-19.4c1.4-.4 2.9-.5 4.4-.5l1.8 .1z\"]\n};\nvar fa11ty = faEleventy;\nvar faTeamspeak = {\n  prefix: 'fab',\n  iconName: 'teamspeak',\n  icon: [576, 512, [], \"f4f9\", \"M152.8 37.2c-32.2 38.1-56.1 82.6-69.9 130.5 0 .2-.1 .3-.1 .5-39.3 16.2-66.8 54.8-66.8 99.8 0 59.6 48.4 108 108 108s108-48.4 108-108c0-53.5-38.9-97.9-90-106.5 15.7-41.8 40.4-79.6 72.3-110.7 1.8-1.6 4-2.6 6.3-3.1 37.2-11.5 76.7-13.3 114.8-5.2 119.3 25.1 198.6 138.2 181.7 258.8-8.4 62.6-38.6 112.7-87.7 151.4-50.1 39.7-107.5 54.3-170.2 52.2l-24-1c12.4 2.8 25 4.9 37.6 6.3 40.7 4.2 81.4 2.1 120.1-12.5 94-35.5 149.3-102.3 162.9-202.5 4.8-52.6-5.8-105.4-30.8-152-70.4-131.9-234.2-181.6-366-111.2-2.4 1.4-4.5 3.1-6.3 5.2l.1 0zM309.4 433.9c-2.1 11.5-4.2 21.9-14.6 31.3 53.2-1 123.2-29.2 161.8-97.1 39.7-69.9 37.6-139.9-6.3-207.8-36.5-55.3-89.8-82.4-156.6-86.6 1.5 2.3 3.2 4.4 5.2 6.3l5.2 6.3c25.1 31.3 37.6 67.9 42.8 107.5 2.1 15.7-1 30.3-13.6 41.8-4.2 3.1-5.2 6.3-4.2 10.4l7.3 17.7 29.3 54.3c5.2 11.5 4.2 19.8-6.3 28.2-3.2 2.5-6.7 4.6-10.4 6.3l-18.8 8.4 3.1 13.6c3.1 6.3 1 12.5-3.1 17.7-2.5 2.4-3.8 5.9-3.1 9.4 2.1 11.5-2.1 19.8-12.5 25.1-2.1 1-4.2 5.2-5.2 7.3l0-.1zm-133.6-3.1c16.7 11.5 34.5 20.9 53.2 26.1 24 5.2 41.8-6.3 44.9-30.3 1-8.4 5.2-14.6 12.5-17.7 7.3-4.2 8.4-7.3 2.1-13.6l-9.4-8.4 13.6-4.2c6.3-2.1 7.3-5.2 5.2-11.5-1.4-3-2.4-6.2-3.1-9.4-3.1-14.6-2.1-15.7 11.5-18.8 8.4-3.1 15.7-6.3 21.9-12.5 3.1-2.1 3.1-4.2 1-8.4l-16.7-30.3c-1-1.9-2.1-3.8-3.1-5.7-6.4-11.7-13-23.6-15.7-37.1-2.1-9.4-1-17.7 8.4-24 5.2-4.2 8.4-9.4 8.4-16.7-.4-10.1-1.5-20.3-3.1-30.3-6.3-37.6-23-68.9-51.2-95-5.2-4.2-9.4-6.3-16.7-4.2l-35.6 12.7 6 3.6c6.3 3.7 12.2 7.3 17 12.1 30.3 26.1 41.8 61.6 45.9 100.2 1 8.4 0 16.7-7.3 21.9-8.4 5.2-10.4 12.5-7.3 20.9 4.9 13.2 10.4 26 16.7 38.6L291.6 318c-6.3 8.4-13.6 11.5-21.9 14.6-12.5 3.1-14.6 7.3-10.4 20.9 .6 1.5 1.4 2.8 2.1 4.2 2.1 5.2 1 8.4-4.2 10.4l-12.5 3.1 5.2 4.2 4.2 4.2c4.2 5.2 4.2 8.4-2.1 10.4-7.3 4.2-11.5 9.4-11.5 17.7 0 12.5-7.3 19.8-18.8 24-3.8 1-7.6 1.5-11.5 1l-34.5-2.1 .1 .2z\"]\n};\nvar faSupple = {\n  prefix: 'fab',\n  iconName: 'supple',\n  icon: [640, 512, [], \"f3f9\", \"M640 262.5c0 64.1-109 116.1-243.5 116.1-24.8 0-48.6-1.8-71.1-5 7.7 .4 15.5 .6 23.4 .6 134.5 0 243.5-56.9 243.5-127.1 0-29.4-19.1-56.4-51.2-78 60 21.1 98.9 55.1 98.9 93.4zM47.7 227.9c-.1-70.2 108.8-127.3 243.3-127.6 7.9 0 15.6 .2 23.3 .5-22.5-3.2-46.3-4.9-71-4.9-134.5 .4-243.4 52.6-243.3 116.7 .1 38.3 39.1 72.3 99.3 93.3-32.3-21.5-51.5-48.6-51.6-78zm60.2 39.9S118.4 281 137.2 281c17.9 0 28.4-11.5 28.4-25.1 0-28-40.2-25.1-40.2-39.7 0-5.4 5.3-9.1 12.5-9.1 5.7 0 11.3 2.6 11.3 6.6l0 3.9 14.2 0 0-7.9c0-12.1-15.4-16.8-25.4-16.8-16.5 0-28.5 10.2-28.5 24.1 0 26.6 40.2 25.4 40.2 39.9 0 6.6-5.8 10.1-12.3 10.1-11.9 0-20.7-10.1-20.7-10.1l-8.8 10.9zm120.8-73.6l0 54.4c0 11.3-7.1 17.8-17.8 17.8s-17.8-6.5-17.8-17.7l0-54.5-15.8 0 0 55c0 18.9 13.4 31.9 33.7 31.9 20.1 0 33.4-13 33.4-31.9l0-55-15.7 0zm34.4 85.4l15.8 0 0-29.5 15.5 0c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8l-39.1 0 0 13.4 7.8 0 0 72zm15.8-43l0-29.1 12.9 0c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5.1 14.7-14 14.7l-12.6 0zm57 43l15.8 0 0-29.5 15.5 0c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8l-39.1 0 0 13.4 7.8 0 0 72zm15.7-43l0-29.1 12.9 0c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5 14.7-14 14.7l-12.6 0zm57.1 34.8c0 5.8 2.4 8.2 8.2 8.2l37.6 0c5.8 0 8.2-2.4 8.2-8.2l0-13-14.3 0 0 5.2c0 1.7-1 2.6-2.6 2.6l-18.6 0c-1.7 0-2.6-1-2.6-2.6l0-61.2c0-5.7-2.4-8.2-8.2-8.2l-15.4 0 0 13.4 5.2 0c1.7 0 2.6 1 2.6 2.6l0 61.2-.1 0zm63.4 0c0 5.8 2.4 8.2 8.2 8.2l38.7 0c5.7 0 8.2-2.4 8.2-8.2l0-13-14.3 0 0 5.2c0 1.7-1 2.6-2.6 2.6l-19.7 0c-1.7 0-2.6-1-2.6-2.6l0-20.3 27.7 0 0-13.4-27.7 0 0-22.4 19.2 0c1.7 0 2.6 1 2.6 2.6l0 5.2 14.2 0 0-13c0-5.7-2.5-8.2-8.2-8.2l-51.6 0 0 13.4 7.8 0 0 63.9 .1 0zm58.9-76l0 5.9 1.6 0 0-5.9 2.7 0 0-1.2-7 0 0 1.2 2.7 0zm5.7-1.2l0 7.1 1.5 0 0-5.7 2.3 5.7 1.3 0 2.3-5.7 0 5.7 1.5 0 0-7.1-2.3 0-2.1 5.1-2.1-5.1-2.4 0z\"]\n};\nvar faSquareTwitter = {\n  prefix: 'fab',\n  iconName: 'square-twitter',\n  icon: [448, 512, [\"twitter-square\"], \"f081\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM351.3 199.3c0 86.7-66 186.6-186.6 186.6-37.2 0-71.7-10.8-100.7-29.4 5.3 .6 10.4 .8 15.8 .8 30.7 0 58.9-10.4 81.4-28-28.8-.6-53-19.5-61.3-45.5 10.1 1.5 19.2 1.5 29.6-1.2-30-6.1-52.5-32.5-52.5-64.4l0-.8c8.7 4.9 18.9 7.9 29.6 8.3-9-6-16.4-14.1-21.5-23.6s-7.8-20.2-7.7-31c0-12.2 3.2-23.4 8.9-33.1 32.3 39.8 80.8 65.8 135.2 68.6-9.3-44.5 24-80.6 64-80.6 18.9 0 35.9 7.9 47.9 20.7 14.8-2.8 29-8.3 41.6-15.8-4.9 15.2-15.2 28-28.8 36.1 13.2-1.4 26-5.1 37.8-10.2-8.9 13.1-20.1 24.7-32.9 34 .2 2.8 .2 5.7 .2 8.5z\"]\n};\nvar faTwitterSquare = faSquareTwitter;\nvar faVim = {\n  prefix: 'fab',\n  iconName: 'vim',\n  icon: [512, 512, [], \"e88a\", \"M303.3 54.5l0-12.3 4-3.7 7.9-7.2 3.5-3.2 168 0 15.1 15.1 0 38.9-3.5 3.6-80.9 82.9 86.9 86.9-91.2 91.2 8.9 0 7.6-8.3 1-.9c1.1-.8 2.5-1.2 3.9-1.2l28.9 0 1.5 .2c1.5 .4 2.8 1.2 3.8 2.5l7.6 10.2c1.3 1.7 1.6 3.9 1 5.9l-22.3 72.5 1.2 0c2.2 0 4.2 1.1 5.5 2.9s1.5 4.1 .7 6.1L459 445c-1 2.6-3.4 4.2-6.2 4.2l-40.4 0c-2.1 0-4.1-1-5.3-2.7s-1.6-3.9-1-5.9l20-63.2-22.2 0-16.2 50.7c2.1 .1 4.1 1.1 5.3 2.9 1.2 1.8 1.4 4.2 .6 6.2l-3.3 7.9c-1 2.5-3.5 4.1-6.1 4.1l-36.8 0c-2.1 0-4.1-1-5.4-2.7s-1.6-3.9-1-5.9l10-32.1-23.9 23.8c.3 1.2 .3 2.5-.1 3.8l-2.9 8.6c-.9 2.7-3.4 4.5-6.3 4.5l-7.4 0-54.6 54.6-83.8-83.8-31.6 32.5-3.6 3.7-49.2 0-2.8-1.7c-8.8-5.1-14.8-8.5-17.9-10.3l0-129.3-58.5-58.5 2.6-2.6 55.9-56 0-99.4-12.6 0-10.8-10.8-3.6-3.6 0-40.7 3.2-3.5 7.9-8.5 3.7-3.9 166.6 0 8 8 27.4-27.4 46.4 46.4zm-251-5.6l0 30.3 9.4 7.8 18.9 0 0 347.9 11.4 10.3 38.2 0 91-93c0-.4 .1-.8 .2-1.1l2.6-10.5c.7-2.9 3.4-5 6.4-5l7.1 0 15.5-15.9-2-2c-1.8-1.8-2.4-4.5-1.5-6.9l6.9-19.3c.4-1.1 1.1-2 1.9-2.8l6.9-5.9c1.2-1 2.8-1.6 4.3-1.6l19.7 0 1.3 .2c.1 0 .1 .1 .2 .1l199.2-203.5 0-28.7-8.2-7.4-156.2 0-7.8 7.8 0 30.5 8.2 7.4 21 0-147 146.4 0-146.6 16.9 0 8.7-8.7 0-27.7-7.4-9.9-157.6 0-8 8zM227.6 352.7l14.8 0-31.8 90.9 45.3 0 3-9.6-12.5 0 31.5-91.9-47.6 0-2.6 10.5zm136.9 1l-16.4 0-10.5-10.8-35.8 0-3.3 9.8 11.8 0-30.5 89.9 38.1 0 2.9-8.6-8.8 0 20-63 37.8 0-22.3 71.6 36.8 0 3.3-7.9-8.8 0 20.3-64 36.1 0-22.7 71.9 40.4 0 3.3-8.6-10.2 0 25-81.1-7.5-10.2-28.9 0-9.5 10.5-17.4 0-9.9-10.8-23.3 0-9.8 11.2zM262.5 293.6l-6.9 19.3 5.3 5.3 21.3 0 5.6-5.6 5.9-20.3-4.6-4.6-19.7 0-6.9 5.9z\"]\n};\nvar faFontAwesome = {\n  prefix: 'fab',\n  iconName: 'font-awesome',\n  icon: [512, 512, [62501, 62694, \"font-awesome-flag\", \"font-awesome-logo-full\"], \"f2b4\", \"M91.7 96C106.3 86.8 116 70.5 116 52 116 23.3 92.7 0 64 0S12 23.3 12 52c0 16.7 7.8 31.5 20 41l0 419 64 0 0-64 373.6 0c14.6 0 26.4-11.8 26.4-26.4 0-3.7-.8-7.3-2.3-10.7L432 272 493.7 133.1c1.5-3.4 2.3-7 2.3-10.7 0-14.6-11.8-26.4-26.4-26.4L91.7 96z\"]\n};\nvar faFontAwesomeFlag = faFontAwesome;\nvar faFontAwesomeLogoFull = faFontAwesome;\nvar faWirsindhandwerk = {\n  prefix: 'fab',\n  iconName: 'wirsindhandwerk',\n  icon: [448, 512, [\"wsh\"], \"e2d0\", \"M18.9 479.8l83.4 0 0-112-83.4 47 0 65zm329 0l82.4 0 0-65-82.4-47 0 112zm0-448l0 219.8-123.6-72.4-121.7 72.4 0-219.8-83.7 0 0 360.8 205.4-122.3 206 122.3 0-360.8-82.3 0z\"]\n};\nvar faWsh = faWirsindhandwerk;\nvar faZoom = {\n  prefix: 'fab',\n  iconName: 'zoom',\n  icon: [640, 512, [], \"e87b\", \"M134.2 326.6l-114.4 0c-8 0-15.2-4.8-18.3-12.2S.1 298.6 5.8 292.9l79.3-79.3-56.8 0C12.7 213.6 0 201 0 185.4l105.5 0c8 0 15.2 4.8 18.3 12.2s1.4 15.9-4.3 21.6l-79.3 79.3 65.7 0c15.6 0 28.3 12.6 28.3 28.3zM640 238.3c0-30.4-24.7-55.1-55.1-55.1-16.2 0-30.9 7.1-41 18.3-10.1-11.2-24.7-18.3-41-18.3-30.4 0-55.1 24.7-55.1 55.1l0 88.3c15.6 0 28.3-12.7 28.3-28.3l0-60c0-14.8 12-26.8 26.8-26.8s26.8 12 26.8 26.8l0 60c0 15.6 12.6 28.3 28.3 28.3l0-88.3c0-14.8 12-26.8 26.8-26.8s26.8 12 26.8 26.8l0 60c0 15.6 12.6 28.3 28.3 28.3l0-88.3zM288.2 256a72.8 72.8 0 1 1 145.5 0 72.8 72.8 0 1 1 -145.5 0zm117.3 0a44.5 44.5 0 1 0 -89 0 44.5 44.5 0 1 0 89 0zm-274.1 0a72.8 72.8 0 1 1 145.5 0 72.8 72.8 0 1 1 -145.5 0zm117.3 0a44.5 44.5 0 1 0 -89 0 44.5 44.5 0 1 0 89 0z\"]\n};\nvar faSubstack = {\n  prefix: 'fab',\n  iconName: 'substack',\n  icon: [448, 512, [], \"e8b8\", \"M448 512L224 386.4 0 512 0 230.7 448 230.7 448 512zm0-336.2l-448 0 0-60.5 448 0 0 60.5zM448 0L448 60.5 0 60.5 0 0 448 0z\"]\n};\nvar faConfluence = {\n  prefix: 'fab',\n  iconName: 'confluence',\n  icon: [512, 512, [], \"f78d\", \"M2.8 412.2c-4.5 7.6-2.1 17.5 5.5 22.2l105.9 65.2c7.7 4.7 17.7 2.4 22.4-5.3 0-.1 .1-.2 .1-.2 67.1-112.2 80.5-95.9 280.9-.7 8.1 3.9 17.8 .4 21.7-7.7 .1-.1 .1-.3 .2-.4l50.4-114.1c3.6-8.1-.1-17.6-8.1-21.3-22.2-10.4-66.2-31.2-105.9-50.3-247.9-120.6-330.8 45.7-373.1 112.6zM510.2 100.1c4.5-7.6 2.1-17.5-5.5-22.2L398.9 12.8c-7.5-5-17.6-3.1-22.6 4.4-.2 .3-.4 .6-.6 1-67.3 112.6-81.1 95.6-280.6 .9-8.1-3.9-17.8-.4-21.7 7.7-.1 .1-.1 .3-.2 .4L22.7 141.3c-3.6 8.1 .1 17.6 8.1 21.3 22.2 10.4 66.3 31.2 106 50.4 248 120 330.8-45.4 373.4-112.9z\"]\n};\nvar faDigg = {\n  prefix: 'fab',\n  iconName: 'digg',\n  icon: [512, 512, [], \"f1a6\", \"M81.7 172.3l-81.7 0 0 174.4 132.7 0 0-250.7-51 0 0 76.3zm0 133.4l-30.8 0 0-92.3 30.8 0 0 92.3zM378.9 172.3l0 174.4 81.8 0 0 28.5-81.8 0 0 40.8 133.1 0 0-243.7-133.1 0zm81.8 133.4l-30.8 0 0-92.3 30.8 0 0 92.3zm-235.6 41l82.1 0 0 28.5-82.1 0 0 40.8 133.3 0 0-243.7-133.3 0 0 174.4zm51.2-133.3l30.8 0 0 92.3-30.8 0 0-92.3zM153.3 96l51.3 0 0 51-51.3 0 0-51zm0 76.3l51.3 0 0 174.4-51.3 0 0-174.4z\"]\n};\nvar faThreads = {\n  prefix: 'fab',\n  iconName: 'threads',\n  icon: [448, 512, [], \"e618\", \"M340.8 238c-.6-69.6-38.3-111.5-102-111.5-42.5 0-78.3 19.2-97.1 49.9l41.2 28.7c10.7-16.8 25.4-30.8 52.4-30.8 30.5 0 46.3 17 50.8 48.5-14.7-2.3-29.5-3.5-44.6-3.5-82.4 0-121.1 37.3-121.1 86.6s38.8 79.7 95.9 79.7c62.7 0 100.1-42.2 115.4-94.5 15.9 7.2 26.9 24 26.9 49.3 0 67.6-78 104.5-144.1 104.5-97.5 0-161.3-64-161.3-168.2 0-127.6 84.3-209.4 197.6-209.4 76 0 113.6 33.4 139.2 78.1L432 115.9c-27.8-58-89.9-99.5-183.1-99.5-148.5 0-249.5 105.4-249.5 258.2 0 139.8 98.9 220.9 216.7 220.9 97.4 0 195.8-56.8 195.8-154 0-50.8-29.2-84.5-71.2-103.5zM214.4 334.9c-21.5 0-40.4-10.2-40.4-29 0-29.6 36.4-38.6 72-38.6 13.5 0 26.8 .9 38.5 3.5-8.4 38.5-33.4 64.2-70 64.2l0 0z\"]\n};\nvar faWpressr = {\n  prefix: 'fab',\n  iconName: 'wpressr',\n  icon: [512, 512, [\"rendact\"], \"f3e4\", \"M256 8a248 248 0 1 0 0 496 248 248 0 1 0 0-496zM427.3 166.6c-15.2 34.5-30.4 69-45.6 103.5-2.4 5.5-6.9 8.2-13 8.2-23 0-46 .1-69 0-5.1 0-8.2 1.9-10.3 6.7-10.2 23.6-20.6 47-31 70.5-1.5 3.5-4.1 5.3-7.9 5.3-45.9 0-91.9 0-137.8 0-3.1 0-5.6-1.1-7.7-3.4-11.2-12.3-22.5-24.6-33.7-36.9-2.7-3-2.8-6.2-1.2-9.7 8.7-19.5 17.3-39.1 25.9-58.7 12.9-29.4 25.9-58.7 38.7-88.1 1.7-3.9 4.3-5.7 8.5-5.7 14.2 .1 28.5 0 42.7 0 6.2 0 9.2 4.8 6.7 10.6-13.6 30.8-27.2 61.6-40.7 92.3-5.7 13-11.4 26-17.1 39-3.9 9 7.1 12 11 5.6 .2-.4-1.4 4.2 30-67.7 1.4-3.1 3.4-4.4 6.8-4.4 15.2 .1 30.4 0 45.6 0 5.6 0 7.9 3.6 5.7 8.7-8.3 19-16.7 37.9-25 56.9-5 11.4 8.1 12.5 11.3 5.3 0-.1 27.9-63.3 32.2-73.2 2-4.6 5.4-6.5 10.3-6.5 26.4 .1 52.9 0 79.3 0 12.4 0 13.9-13.6 3.9-13.6-25.3 0-50.5 0-75.8 0-6.3 0-7.8-2.5-5.3-8.3 5.8-13.1 11.6-26.1 17.3-39.2 1.7-4 4.5-5.8 8.8-5.8 23.1 .1 26 0 130.8 0 6.1 0 8 2.8 5.6 8.3z\"]\n};\nvar faRendact = faWpressr;\nvar faYoast = {\n  prefix: 'fab',\n  iconName: 'yoast',\n  icon: [448, 512, [], \"f2b1\", \"M91.3 76l186 0-7 18.9-179 0c-39.7 0-71.9 31.6-71.9 70.3l0 205.4c0 35.4 24.9 70.3 84 70.3l0 19.1-12.1 0C41.2 460 0 419.8 0 370.5L0 165.2C0 115.9 40.7 76 91.3 76zM320.4 20l66.5 0c-143.8 378.1-145.7 398.9-184.7 439.3-20.8 21.6-49.3 31.7-78.3 32.7l0-51.1c49.2-7.7 64.6-49.9 64.6-75.3 0-20.1 .6-12.6-82.1-223.2l61.4 0 50.4 156.6 102.2-279zM448 161.5l0 298.5-214 0c6.6-9.6 10.7-16.3 12.1-19.4l182.5 0 0-279.1c0-32.5-17.1-51.9-48.2-62.9L387.1 81c41.7 13.6 60.9 43.1 60.9 80.5z\"]\n};\nvar faNimblr = {\n  prefix: 'fab',\n  iconName: 'nimblr',\n  icon: [384, 512, [], \"f5a8\", \"M246.6 353.3a27 27 0 1 1 0-54 27 27 0 1 1 0 54zm-79.4-27a27.1 27.1 0 1 1 -54.3 0 27.1 27.1 0 1 1 54.3 0zM191.8 159C157 159 89.4 178.8 59.2 227L14 0 14 335.5C14 433.1 93.6 512 191.8 512S369.5 433 369.5 335.5 290.1 159 191.8 159zm0 308.1c-73.3 0-132.5-58.9-132.5-131.6s59.2-131.6 132.5-131.6 132.5 58.9 132.5 131.5-59.3 131.6-132.5 131.6l0 .1z\"]\n};\nvar faPixelfed = {\n  prefix: 'fab',\n  iconName: 'pixelfed',\n  icon: [512, 512, [], \"e7db\", \"M256 0a256 256 0 1 1 0 512 256 256 0 1 1 0-512zM235.7 311.9l47 0c44.2 0 80.1-34.9 80.1-78s-35.9-78-80.1-78l-67.8 0c-25.5 0-46.2 20.1-46.2 45l0 175.1 67-64.1z\"]\n};\nvar faYahoo = {\n  prefix: 'fab',\n  iconName: 'yahoo',\n  icon: [512, 512, [], \"f19e\", \"M223.8 141.1l-56.7 143.2-56-143.2-96.1 0 105.8 249.1-38.6 89.8 94.2 0 140.9-338.9-93.6 0zM329.2 276.9a58.2 58.2 0 1 0 0 116.4 58.2 58.2 0 1 0 0-116.4zM394.7 32l-93 223.5 104.8 0 92.6-223.5-104.4 0z\"]\n};\nvar faBluesky = {\n  prefix: 'fab',\n  iconName: 'bluesky',\n  icon: [576, 512, [], \"e671\", \"M407.8 294.7c-3.3-.4-6.7-.8-10-1.3 3.4 .4 6.7 .9 10 1.3zM288 227.1C261.9 176.4 190.9 81.9 124.9 35.3 61.6-9.4 37.5-1.7 21.6 5.5 3.3 13.8 0 41.9 0 58.4S9.1 194 15 213.9c19.5 65.7 89.1 87.9 153.2 80.7 3.3-.5 6.6-.9 10-1.4-3.3 .5-6.6 1-10 1.4-93.9 14-177.3 48.2-67.9 169.9 120.3 124.6 164.8-26.7 187.7-103.4 22.9 76.7 49.2 222.5 185.6 103.4 102.4-103.4 28.1-156-65.8-169.9-3.3-.4-6.7-.8-10-1.3 3.4 .4 6.7 .9 10 1.3 64.1 7.1 133.6-15.1 153.2-80.7 5.9-19.9 15-138.9 15-155.5s-3.3-44.7-21.6-52.9c-15.8-7.1-40-14.9-103.2 29.8-66.1 46.6-137.1 141.1-163.2 191.8z\"]\n};\nvar faScribd = {\n  prefix: 'fab',\n  iconName: 'scribd',\n  icon: [384, 512, [], \"f28a\", \"M42.6 252.7c-16.1-19-24.7-45.9-24.8-79.9 0-100.4 75.2-153.1 167.2-153.1 98.6-1.6 156.8 49 184.3 70.6l-50.5 72.1-37.3-24.6 26.9-38.6c-36.5-24-79.4-36.5-123-35.8-50.7-.8-111.7 27.2-111.7 76.2 0 18.7 11.2 20.7 28.6 15.6 23.3-5.3 41.9 .6 55.8 14 26.4 24.3 23.2 67.6-.7 91.9-29.2 29.5-85.2 27.3-114.8-8.4zm317.7 5.9c-15.5-18.8-38.9-29.4-63.2-28.6-38.1-2-71.1 28-70.5 67.2-.7 16.8 6 33 18.4 44.3 14.1 13.9 33 19.7 56.3 14.4 17.4-5.1 28.6-3.1 28.6 15.6 0 4.3-.5 8.5-1.4 12.7-16.7 40.9-59.5 64.4-121.4 64.4-51.9 .2-102.4-16.4-144.1-47.3l33.7-39.4-35.6-27.4-60.8 71.8 15.4 13.8c52.5 46.8 120.4 72.5 190.7 72.2 51.4 0 94.4-10.5 133.6-44.1 57.1-51.4 54.2-149.2 20.3-189.6z\"]\n};\nvar faCreativeCommonsPd = {\n  prefix: 'fab',\n  iconName: 'creative-commons-pd',\n  icon: [512, 512, [], \"f4ec\", \"M256 8a248 248 0 1 0 0 496 248 248 0 1 0 0-496zm0 449.5c-139.2 0-235.8-138-190.2-267.9l78.8 35.1c-2.1 10.5-3.3 21.5-3.3 32.9 0 99 73.9 126.9 120.4 126.9 22.9 0 53.5-6.7 79.4-29.5L305 311.1c-5.5 6.3-17.6 16.7-36.3 16.7-37.8 0-53.7-39.9-53.9-71.9 230.4 102.6 216.5 96.5 217.9 96.8-34.3 62.4-100.6 104.8-176.7 104.8zm194.2-150l-224-100c18.8-34 54.9-30.7 74.7-11l40.4-41.6c-27.1-23.3-58-27.5-78.1-27.5-47.4 0-80.9 20.5-100.7 51.6L87.6 145.6c36.1-54.9 98.1-91.2 168.5-91.2 111.1 0 201.5 90.4 201.5 201.5 0 18-2.4 35.4-6.8 52-.3-.1-.4-.2-.6-.4z\"]\n};\nvar faEarlybirds = {\n  prefix: 'fab',\n  iconName: 'earlybirds',\n  icon: [512, 512, [], \"f39a\", \"M329.3 47.5c1.2-13 21.3-14 36.6-8.7 .9 .3 26.2 9.7 19 15.2-27.9-7.4-56.4 18.2-55.6-6.5zm-201 6.9c30.7-8.1 62 20 61.1-7.1-1.3-14.2-23.4-15.3-40.2-9.6-1 .3-28.7 10.5-20.9 16.7zM335.5 160a16 16 0 1 0 0 32 16 16 0 1 0 0-32zm-159.7 0a16 16 0 1 0 0 32 16 16 0 1 0 0-32zM494.3 323.2c-9.9 24-40.7 11-63.9-1.2-13.5 69.1-58.1 111.4-126.3 124.2 .3 .9-2-.1 24 1 33.6 1.4 63.8-3.1 97.4-8-19.8-13.8-11.4-37.1-9.8-38.1 1.4-.9 14.7 1.7 21.6 11.5 8.6-12.5 28.4-14.8 30.2-13.6 1.6 1.1 6.6 20.9-6.9 34.6 4.7-.9 8.2-1.6 9.8-2.1 2.6-.8 17.7 11.3 3.1 13.3-14.3 2.3-22.6 5.1-47.1 10.8-45.9 10.7-85.9 11.8-117.7 12.8l1 11.6c3.8 18.1-23.4 24.3-27.6 6.2 .8 17.9-27.1 21.8-28.4-1l-.5 5.3c-.7 18.4-28.4 17.9-28.3-.6-7.5 13.5-28.1 6.8-26.4-8.5l1.2-12.4c-36.7 .9-59.7 3.1-61.8 3.1-20.9 0-20.9-31.6 0-31.6 2.4 0 27.7 1.3 63.2 2.8-61.1-15.5-103.7-55-114.9-118.2-25 12.8-57.5 26.8-68.2 .8-10.5-25.4 21.5-42.6 66.8-73.4 .7-6.6 1.6-13.3 2.7-19.8-14.4-19.6-11.6-36.3-16.1-60.4-16.8 2.4-23.2-9.1-23.6-23.1 .3-7.3 2.1-14.9 2.4-15.4 1.1-1.8 10.1-2 12.7-2.6 6-31.7 50.6-33.2 90.9-34.5 19.7-21.8 45.2-41.5 80.9-48.3-15.3-19.4-3.4-39.9-2.4-40.4 1.7-.8 21.2 4.3 26.3 23.2 5.2-8.8 18.3-11.4 19.6-10.7 1.1 .6 6.4 15-4.9 25.9 40.3 3.5 72.2 24.7 96 50.7 36.1 1.5 71.8 5.9 77.1 34 2.7 .6 11.6 .8 12.7 2.6 .3 .5 2.1 8.1 2.4 15.4-.5 13.9-6.8 25.4-23.6 23.1-3.2 17.3-2.7 32.9-8.7 47.7 2.4 11.7 4 23.8 4.8 36.4 37 25.4 70.3 42.5 60.3 66.9zM223.5 159.9c.9-44-37.9-42.2-78.6-40.3-21.7 1-38.9 1.9-45.5 13.9-11.4 20.9 5.9 92.9 23.2 101.2 9.8 4.7 73.4 7.9 86.3-7.1 8.2-9.4 15-49.4 14.6-67.7zm52 58.3c-4.3-12.4-6-30.1-15.3-32.7-2-.5-9-.5-11 0-10 2.8-10.8 22.1-17 37.2 15.4 0 19.3 9.7 23.7 9.7 4.3 0 6.3-11.3 19.6-14.2zm135.7-84.7c-6.6-12.1-24.8-12.9-46.5-13.9-40.2-1.9-78.2-3.8-77.3 40.3-.5 18.3 5 58.3 13.2 67.8 13 14.9 76.6 11.8 86.3 7.1 15.8-7.6 36.5-78.9 24.3-101.3z\"]\n};\nvar faSymfonycasts = {\n  prefix: 'fab',\n  iconName: 'symfonycasts',\n  icon: [576, 512, [], \"e8ab\", \"M293.8 342.5c3.4-1.5 6.8-1.5 10.2 0l54.2 22.6c2.6 .9 4.7 2.6 6.2 4.8s2.3 4.8 2.3 7.6c0 19.4-3.6 37.2-10.7 53.4-6.2 13.6-14.5 25.4-24.8 35.6-8.7 8.5-17.7 14.6-27.1 18.4-3.4 1.5-6.8 1.5-10.2 0-10.7-4.3-20.6-11.3-29.7-20.9-10-10.4-17.8-22.5-23.5-36.4-6.4-15.6-9.6-32.3-9.6-50 0-2.8 .7-5.4 2.2-7.6 1.5-2.3 3.6-3.9 6.2-4.8l54.2-22.6zM479.7 483.8a70.1 70.1 0 1 1 0-140.2 70.1 70.1 0 1 1 0 140.2zM244.6 377.6c0 15.3 2.6 29.7 7.9 43.2 4.9 12.4 11.6 23.3 20.1 32.5 8.1 8.9 16.9 15.3 26.3 19.2 9.2-3.8 17.8-10 25.7-18.7 8.7-9.2 15.4-19.9 20.3-32.2 5.5-13.7 8.2-28.4 8.2-44.1l-54.2-22.6-54.2 22.6zm235.1-20.3a56.5 56.5 0 1 0 0 113 56.5 56.5 0 1 0 0-113zm-352.8 2.3c4.1 0 7.6 1.3 10.4 3.9 2.8 2.6 4.2 5.9 4.2 9.6l0 16.4 31.1-19.2c1.5-1.1 3.2-1.7 5.1-1.7 2.4 0 4.6 .8 6.3 2.5s2.7 3.8 2.7 6.2l0 72.6c0 2.6-.9 4.8-2.7 6.5s-3.9 2.5-6.3 2.5c-1.9 0-3.6-.6-5.1-1.7l-31.1-19.2 0 16.4c0 3.8-1.4 7-4.2 9.6s-6.3 4-10.4 4l-88.2 0c-4.1 0-7.6-1.3-10.5-4s-4.2-5.8-4.2-9.6l0-81.3c0-3.8 1.4-7 4.2-9.6s6.3-3.9 10.5-3.9l88.2 0zm172 97.8c-11.3-7-20.4-16.4-27.4-28.3-7.5-12.4-11.9-26.6-13-42.4l40.4-17 0 87.6zM37.5 373.4l0 80.8c.2 .2 .6 .3 1.2 .3l88.2 0c.4 0 .7-.1 1.1-.3l0-80.8c-.2-.2-.6-.3-1.2-.3l-88.1 0c-.4 0-.8 .1-1.2 .3zm418.4 5.1c2.3-1.3 4.5-1.3 6.8 0l49.8 30.2c2.3 1.3 3.4 3.3 3.4 5.9s-1.1 4.6-3.4 5.9l-49.8 28.6c-2.3 1.3-4.5 1.3-6.8 0s-3.4-3.3-3.4-5.9l0-58.8c0-2.6 1.1-4.6 3.4-5.9zM141.5 405.5l0 16.4 31.7 19.8 0-56-31.7 19.8zM451.1 5.2c35.8-1.2 62.9 15.1 63.8 40.8 .4 10.9-5.9 32.2-27.8 33-16.3 .6-27.6-9.2-28.1-24.1-.2-5.4 1.2-10.2 4.9-15.8 3.6-7.1 4.4-7.9 4.3-11-.3-9.4-14.5-9.7-18.3-9.5-53 1.8-66.9 73.3-78.2 131.5l-5.6 30.7c30.5 4.5 52.2-1 64.2-8.8 17-11-4.8-22.4-2-35 2.8-12.8 14.4-19 23.7-19.2 12.9-.3 22.2 13.1 21.9 26.7-.5 22.6-30.4 53.6-90.2 52.3-7.3-.2-14-.7-20.2-1.4l-11.3 62.3c-3 14-6.3 29.5-10.7 45.8l204 0 .9 .1c.3 .1 .6 .1 .8 .2 2.2 .6 4 2.5 4.5 4.8 .6 2.8-1 6-3.7 7.2-.5 .2-1.1 .4-1.7 .5-.3 0-.6 0-.9 .1l-515.3 0c-.7-.1-.9 0-1.7-.2-2.5-.7-4.4-3.1-4.6-5.7-.2-2.3 1-4.6 3-5.8 .7-.5 1.6-.8 2.4-.9 .3 0 .6 0 .8-.1l48.4 0c-17.2-16.8-20-37.2-16-50.5 5.4-17.6 19.4-20.9 33-16.7 14.6 4.5 20.3 22.3 16.2 36-.5 1.5-1.2 3.9-2.8 7.2-1.7 3.8-4.8 7.1-6.2 11.5-1.5 4.9 .7 9.1 4.5 12.6l58.9 0c4.2-4 7.4-9 9.1-14.6 5.3-17-5.5-28.9-10-33.5l-21.7-23.2c-9.9-11.1-31.7-41.9-21.1-76.5 4.1-13.4 12.8-27.5 25.3-36.9 26.5-19.7 55.3-23 82.7-15.1 35.5 10.2 52.5 33.7 74.6 51.8 12.4-36.3 29.5-71.9 55.3-101.9 23.3-27.3 54.6-47.1 90.4-48.3zM229.6 121.3c-22.2-6-35.7-.9-45.2 11.2-11.3 14.3-7.5 32.8 3.3 43.7l18 19.9c22 25.5 34.1 45.3 29.6 72-2.2 13.1-8.5 25.2-17.9 35.3l54.2 0c1-5.1 2-10.4 3.1-15.8l3.6-21.9c5.9-29.4 12.4-62.2 22.3-94.8-24.1-18.1-38.5-40.7-70.9-49.5z\"]\n};\nvar faSquareOdnoklassniki = {\n  prefix: 'fab',\n  iconName: 'square-odnoklassniki',\n  icon: [448, 512, [\"odnoklassniki-square\"], \"f264\", \"M224 137.1c-5.4-.3-10.8 .6-15.9 2.4s-9.7 4.8-13.6 8.5-7 8.2-9.2 13.2-3.2 10.3-3.2 15.7 1.1 10.8 3.2 15.7 5.3 9.5 9.2 13.2 8.6 6.6 13.6 8.5 10.5 2.7 15.9 2.4c5.4 .3 10.8-.6 15.9-2.4s9.7-4.8 13.6-8.5 7-8.2 9.2-13.2 3.2-10.3 3.2-15.7-1.1-10.8-3.2-15.7-5.3-9.5-9.2-13.2-8.6-6.6-13.6-8.5-10.5-2.7-15.9-2.4zM384 32L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64zM224 258a81 81 0 1 1 0-162.1 81 81 0 1 1 0 162.1zm59.3 6.2c16.8-13.2 29.5-5.5 34.1 3.6 7.8 16-1.1 23.7-21.5 37-17.1 10.9-40.7 15.2-56.2 16.8l13 12.9 47.7 47.7c17.4 17.9-11 45.8-28.6 28.6-12-12.2-29.5-29.7-47.7-47.9l-47.7 47.9c-17.7 17.2-46-11-28.4-28.6 3.7-3.7 7.9-7.9 12.5-12.5 10.4-10.4 22.6-22.7 35.2-35.2l12.9-12.9c-15.4-1.6-39.3-5.7-56.6-16.8-20.3-13.3-29.3-20.9-21.4-37 4.6-9.1 17.3-16.8 34.1-3.6 0 0 22.7 18 59.3 18s59.3-18 59.3-18z\"]\n};\nvar faOdnoklassnikiSquare = faSquareOdnoklassniki;\nvar faMarkdown = {\n  prefix: 'fab',\n  iconName: 'markdown',\n  icon: [640, 512, [], \"f60f\", \"M593.8 59.1l-547.6 0C20.7 59.1 0 79.8 0 105.2L0 406.7c0 25.5 20.7 46.2 46.2 46.2l547.7 0c25.5 0 46.2-20.7 46.1-46.1l0-301.6c0-25.4-20.7-46.1-46.2-46.1zM338.5 360.6l-61.5 0 0-120-61.5 76.9-61.5-76.9 0 120-61.7 0 0-209.2 61.5 0 61.5 76.9 61.5-76.9 61.5 0 0 209.2 .2 0zm135.3 3.1l-92.3-107.7 61.5 0 0-104.6 61.5 0 0 104.6 61.5 0-92.2 107.7z\"]\n};\nvar faTypo3 = {\n  prefix: 'fab',\n  iconName: 'typo3',\n  icon: [448, 512, [], \"f42b\", \"M178.7 78.4c0-24.7 5.4-32.4 13.9-39.4-69.5 8.5-149.3 34-176.3 66.4-5.4 7.7-9.3 20.8-9.3 37.1 0 103.5 106.8 337.5 184.1 337.5 36.3 0 97.3-59.5 146.7-139-7 2.3-11.6 2.3-18.5 2.3-57.2 0-140.6-198.5-140.6-264.9zM301.5 32c-30.1 0-41.7 5.4-41.7 36.3 0 66.4 53.8 198.5 101.7 198.5 26.3 0 78.8-99.7 78.8-182.3 0-40.9-67-52.5-138.8-52.5z\"]\n};\nvar faJoomla = {\n  prefix: 'fab',\n  iconName: 'joomla',\n  icon: [448, 512, [], \"f1aa\", \"M.6 92.1c0-33.3 26.8-60.1 59.8-60.1 30 0 54.5 21.9 59.2 50.2 32.6-7.6 67.1 .6 96.5 30l-44.3 44.3c-20.5-20.5-42.6-16.3-55.4-3.5-14.3 14.3-14.3 37.9 0 52.2l99.5 99.5-44 44.3c-87.7-87.2-49.7-49.7-99.8-99.7-26.8-26.5-35-64.8-24.8-98.9-26.9-5.8-46.7-29.7-46.7-58.3zM130.1 208.5l44.3 44.3c10-10 89.7-89.7 99.7-99.8 14.3-14.3 37.6-14.3 51.9 0 12.8 12.8 17 35-3.5 55.4l44 44.3c31.2-31.2 38.5-67.6 28.9-101.2 29.2-4.1 51.9-29.2 51.9-59.5 0-33.2-26.8-60.1-59.8-60.1-30.3 0-55.4 22.5-59.5 51.6-33.8-9.9-71.7-1.5-98.3 25.1-18.3 19.1-71.1 71.5-99.6 99.9zM396.4 360.7c8.2-32.7-.9-68.5-26.3-93.9-11.8-12.2 5 4.7-99.5-99.7l-44.3 44.3 99.7 99.7c14.3 14.3 14.3 37.6 0 51.9-12.8 12.8-35 17-55.4-3.5l-44 44.3c27.6 30.2 68 38.8 102.7 28 5.5 27.4 29.7 48.1 58.9 48.1 33 0 59.8-26.8 59.8-60.1 0-30.2-22.5-55-51.6-59.1zm-84.3-53.1l-44-44.3c-87 86.4-50.4 50.4-99.7 99.8-14.3 14.3-37.6 14.3-51.9 0-13.1-13.4-16.9-35.3 3.2-55.4l-44-44.3c-30.2 30.2-38 65.2-29.5 98.3-26.7 6-46.2 29.9-46.2 58.2 0 33.3 26.8 60.1 59.8 60.1 28.6 0 52.5-19.8 58.6-46.7 32.7 8.2 68.5-.6 94.2-26 32.1-32 12.2-12.4 99.5-99.7z\"]\n};\nvar faWeixin = {\n  prefix: 'fab',\n  iconName: 'weixin',\n  icon: [576, 512, [], \"f1d7\", \"M385.2 167.6c6.4 0 12.6 .3 18.8 1.1-16.6-78.4-100.7-136.7-196.3-136.7-107.2 0-194.7 72.8-194.7 165.4 0 53.4 29.3 97.5 77.9 131.6l-19.3 58.6 68-34.1c24.4 4.8 43.8 9.7 68.2 9.7 6.2 0 12.1-.3 18.3-.8-4-12.9-6.2-26.6-6.2-40.8-.1-84.9 72.9-154 165.3-154zM280.7 114.7c14.5 0 24.2 9.7 24.2 24.4 0 14.5-9.7 24.2-24.2 24.2-14.8 0-29.3-9.7-29.3-24.2 .1-14.7 14.6-24.4 29.3-24.4zM144.3 163.3c-14.5 0-29.3-9.7-29.3-24.2 0-14.8 14.8-24.4 29.3-24.4 14.8 0 24.4 9.7 24.4 24.4 0 14.6-9.6 24.2-24.4 24.2zM563 319.4c0-77.9-77.9-141.3-165.4-141.3-92.7 0-165.4 63.4-165.4 141.3S305 460.7 397.6 460.7c19.3 0 38.9-5.1 58.6-9.9l53.4 29.3-14.8-48.6C534 402.1 563 363.2 563 319.4zM343.9 294.9c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.8 0 24.4 9.7 24.4 19.3 0 10-9.7 19.6-24.4 19.6zm107.1 0c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.5 0 24.4 9.7 24.4 19.3 .1 10-9.9 19.6-24.4 19.6z\"]\n};\nvar faGrunt = {\n  prefix: 'fab',\n  iconName: 'grunt',\n  icon: [384, 512, [], \"f3ad\", \"M61.6 189.3c-1.1 10 5.2 19.1 5.2 19.1 .7-7.5 2.2-12.8 4-16.6 .4 10.3 3.2 23.5 12.8 34.1 6.9 7.6 35.6 23.3 54.9 6.1 1 2.4 2.1 5.3 3 8.5 2.9 10.3-2.7 25.3-2.7 25.3s15.1-17.1 13.9-32.5c10.8-.5 21.4-8.4 21.1-19.5 0 0-18.9 10.4-35.5-8.8-9.7-11.2-40.9-42-83.1-31.8 4.3 1 8.9 2.4 13.5 4.1l-.1 0c-4.2 2-6.5 7.1-7 12zm28.3-1.8c19.5 11 37.4 25.7 44.9 37-5.7 3.3-21.7 10.4-38-1.7-10.3-7.6-9.8-26.2-6.9-35.3zM232 233.3c-1.2 15.5 13.9 32.5 13.9 32.5s-5.6-15-2.7-25.3c.9-3.2 2-6 3-8.5 19.3 17.3 48 1.5 54.8-6.1 9.6-10.6 12.3-23.8 12.8-34.1 1.8 3.8 3.4 9.1 4 16.6 0 0 6.4-9.1 5.2-19.1-.6-5-2.9-10-7-11.8l-.1 0c4.6-1.8 9.2-3.2 13.5-4.1-42.3-10.2-73.4 20.6-83.1 31.8-16.7 19.2-35.5 8.8-35.5 8.8-.2 10.9 10.4 18.9 21.2 19.3zm62.7-45.8c3 9.1 3.4 27.7-7 35.4-16.3 12.1-32.2 5-37.9 1.6 7.5-11.4 25.4-26 44.9-37zm-134.4 231l-29.4 0c-5.5 0-8.2 1.6-9.5 2.9-1.9 2-2.2 4.7-.9 8.1 3.5 9.1 11.4 16.5 13.7 18.6 3.1 2.7 7.5 4.3 11.8 4.3 4.4 0 8.3-1.7 11-4.6 7.5-8.2 11.9-17.1 13-19.8 .6-1.5 1.3-4.5-.9-6.8-1.8-1.8-4.7-2.7-8.8-2.7zM349.5 317.3c-2.4 17.9-13 33.8-24.6 43.7-3.1-22.7-3.7-55.5-3.7-62.4 0-14.7 9.5-24.5 12.2-26.1 2.5-1.5 5.4-3 8.3-4.6 18-9.6 40.4-21.6 40.4-43.7 0-16.2-9.3-23.2-15.4-27.8-.8-.6-1.5-1.1-2.2-1.7-2.1-1.7-3.7-3-4.3-4.4-4.4-9.8-3.6-34.2-1.7-37.6 .6-.6 16.7-20.9 11.8-39.2-2-7.4-6.9-13.3-14.1-17-5.3-2.7-11.9-4.2-19.5-4.5-.1-2-.5-3.9-.9-5.9-.6-2.6-1.1-5.3-.9-8.1 .4-4.7 .8-9 2.2-11.3 8.4-13.3 28.8-17.6 29-17.6l12.3-2.4-8.1-9.5c-.1-.2-17.3-17.5-46.3-17.5-7.9 0-16 1.3-24.1 3.9-24.2 7.8-42.9 30.5-49.4 39.3-3.1-1-6.3-1.9-9.6-2.7-4.2-15.8 9-38.5 9-38.5s-13.6-3-33.7 15.2c-2.6-6.5-8.1-20.5-1.8-37.2-29.5 10.4-36.9 26.3-39.1 40.7-7.6-5.4-6.7-23.1-7.2-27.6-7.5 .9-29.2 21.9-28.2 48.3-2 .5-3.9 1.1-5.9 1.7-6.5-8.8-25.1-31.5-49.4-39.3-7.9-2.2-16-3.5-23.9-3.5-29 0-46.1 17.3-46.3 17.5l-8.1 9.4 12.3 2.4c.2 0 20.6 4.3 29 17.6 1.4 2.2 1.8 6.6 2.2 11.3 .2 2.8-.4 5.5-.9 8.1-.4 1.9-.8 3.9-.9 5.9-7.7 .3-14.2 1.8-19.5 4.5-7.2 3.7-12.1 9.6-14.1 17-5 18.2 11.2 38.5 11.8 39.2 1.9 3.4 2.7 27.8-1.7 37.6-.6 1.4-2.2 2.7-4.3 4.4-.7 .5-1.4 1.1-2.2 1.7-6.1 4.6-15.4 11.7-15.4 27.8 0 22.1 22.4 34.1 40.4 43.7 3 1.6 5.8 3.1 8.3 4.6 2.7 1.6 12.2 11.4 12.2 26.1 0 6.9-.6 39.7-3.7 62.4-11.6-9.9-22.2-25.9-24.6-43.8 0 0-29.2 22.6-20.6 70.8 5.2 29.5 23.2 46.1 47 54.7 8.8 19.1 29.4 45.7 67.3 49.6 14.4 11.8 34.4 19.5 63.6 19.5l.2 0c29.1 0 49.1-7.7 63.6-19.5 37.9-3.9 58.5-30.5 67.3-49.6 23.8-8.7 41.7-25.2 47-54.7 8.2-48.4-21.1-70.9-21.1-70.9zM306 37.7c5.6-1.8 11.6-2.7 17.7-2.7 11 0 19.9 3 24.7 5-3.1 1.4-6.4 3.2-9.7 5.3-2.4-.4-5.6-.8-9.2-.8-10.5 0-20.5 3.1-28.7 8.9-12.3 8.7-18 16.9-20.7 22.4-2.2-1.3-4.5-2.5-7.1-3.7-1.6-.8-3.1-1.5-4.7-2.2 6.1-9.1 19.9-26.5 37.7-32.2zm21 18.2c-.8 1-1.6 2.1-2.3 3.2-3.3 5.2-3.9 11.6-4.4 17.8-.5 6.4-1.1 12.5-4.4 17-4.2 .8-8.1 1.7-11.5 2.7-2.3-3.1-5.6-7-10.5-11.2 1.4-4.8 5.5-16.1 13.5-22.5 5.6-4.3 12.2-6.7 19.6-7zM45.9 45.3c-3.3-2.2-6.6-4-9.7-5.3 4.8-2 13.7-5 24.7-5 6.1 0 12 .9 17.7 2.7 17.8 5.8 31.6 23.2 37.7 32.1-1.6 .7-3.2 1.4-4.8 2.2-2.5 1.2-4.9 2.5-7.1 3.7-2.6-5.4-8.3-13.7-20.7-22.4-8.3-5.8-18.2-8.9-28.8-8.9-3.4 .1-6.6 .5-9 .9zM90.6 85.4c-4.9 4.2-8.3 8-10.5 11.2-3.4-.9-7.3-1.9-11.5-2.7-3.3-4.4-3.8-10.5-4.3-16.9-.5-6.2-1.1-12.6-4.4-17.8-.7-1.1-1.5-2.2-2.3-3.2 7.4 .3 14 2.6 19.5 7 8 6.3 12.1 17.6 13.5 22.4zM58.4 259.9c-2.7-1.6-5.6-3.1-8.4-4.6-14.9-8-30.2-16.3-30.2-30.5 0-11.1 4.3-14.6 8.9-18.2l.5-.4c.7-.6 1.4-1.2 2.2-1.8-.9 7.2-1.9 13.3-2.7 14.9 0 0 12.1-15 15.7-44.3 1.4-11.5-1.1-34.3-5.1-43 .2 4.9 0 9.8-.3 14.4-.4-.8-.8-1.6-1.3-2.2-3.2-4-11.8-17.5-9.4-26.6 .9-3.5 3.1-6 6.7-7.8 3.8-1.9 8.8-2.9 15.1-2.9 12.3 0 25.9 3.7 32.9 6 25.1 8 55.4 30.9 64.1 37.7 .2 .2 .4 .3 .4 .3l5.6 3.9-3.5-5.8c-.2-.3-19.1-31.4-53.2-46.5 2-2.9 7.4-8.1 21.6-15.1 21.4-10.5 46.5-15.8 74.3-15.8 27.9 0 52.9 5.3 74.3 15.8 14.2 6.9 19.6 12.2 21.6 15.1-34 15.1-52.9 46.2-53.1 46.5l-3.5 5.8 5.6-3.9s.2-.1 .4-.3c8.7-6.8 39-29.8 64.1-37.7 7-2.2 20.6-6 32.9-6 6.3 0 11.3 1 15.1 2.9 3.5 1.8 5.7 4.4 6.7 7.8 2.5 9.1-6.1 22.6-9.4 26.6-.5 .6-.9 1.3-1.3 2.2-.3-4.6-.5-9.5-.3-14.4-4 8.8-6.5 31.5-5.1 43 3.6 29.3 15.7 44.3 15.7 44.3-.8-1.6-1.8-7.7-2.7-14.9 .7 .6 1.5 1.2 2.2 1.8l.5 .4c4.6 3.7 8.9 7.1 8.9 18.2 0 14.2-15.4 22.5-30.2 30.5-2.9 1.5-5.7 3.1-8.4 4.6-8.7 5-18 16.7-19.1 34.2-.9 14.6 .9 49.9 3.4 75.9-12.4 4.8-26.7 6.4-39.7 6.8-2-4.1-3.9-8.5-5.5-13.1-.7-2-19.6-51.1-26.4-62.2 5.5 39 17.5 73.7 23.5 89.6-3.5-.5-7.3-.7-11.7-.7l-117 0c-4.4 0-8.3 .3-11.7 .7 6-15.9 18.1-50.6 23.5-89.6-6.8 11.2-25.7 60.3-26.4 62.2-1.6 4.6-3.5 9-5.5 13.1-13-.4-27.2-2-39.7-6.8 2.5-26 4.3-61.2 3.4-75.9-.9-17.4-10.3-29.2-19-34.2zM35.1 404.6c-12.1-20-8.7-54.1-3.7-59.1 10.9 34.4 47.2 44.3 74.4 45.4-2.7 4.2-5.2 7.6-7 10l-1.4 1.4c-7.2 7.8-8.6 18.5-4.1 31.8-22.7-.1-46.3-9.8-58.2-29.5zm45.7 43.5c6 1.1 12.2 1.9 18.6 2.4 3.5 8 7.4 15.9 12.3 23.1-14.4-5.9-24.4-16-30.9-25.5zm111.5 50.1c-60.6-.1-78.3-45.8-84.9-64.7-3.7-10.5-3.4-18.2 .9-23.1 2.9-3.3 9.5-7.2 24.6-7.2l118.8 0c15.1 0 21.8 3.9 24.6 7.2 4.2 4.8 4.5 12.6 .9 23.1-6.6 18.8-24.3 64.6-84.9 64.7zm80.6-24.6c4.9-7.2 8.8-15.1 12.3-23.1 6.4-.5 12.6-1.3 18.6-2.4-6.5 9.5-16.5 19.6-30.9 25.5zm76.6-69c-12 19.7-35.6 29.3-58.1 29.7 4.5-13.3 3.1-24.1-4.1-31.8-.4-.5-.9-1-1.4-1.5-1.8-2.4-4.3-5.8-7-10 27.2-1.2 63.5-11 74.4-45.4 5 5 8.4 39.1-3.8 59zM192.2 187.7l.2 0c12.7-.1 27.2-17.8 27.2-17.8-9.9 6-18.8 8.1-27.3 8.3-8.5-.2-17.4-2.3-27.3-8.3 0 0 14.5 17.6 27.2 17.8zm61.7 230.7l-29.4 0c-4.2 0-7.2 .9-8.9 2.7-2.2 2.3-1.5 5.2-.9 6.7 1 2.6 5.5 11.3 13 19.3 2.7 2.9 6.6 4.5 11 4.5s8.7-1.6 11.8-4.2c2.3-2 10.2-9.2 13.7-18.1 1.3-3.3 1-6-.9-7.9-1.3-1.3-4-2.9-9.4-3z\"]\n};\nvar faSupportnow = {\n  prefix: 'fab',\n  iconName: 'supportnow',\n  icon: [640, 512, [], \"e833\", \"M0 191.9l203.9-.1c1.8-.6 2.5-9.5 3.2-12.2 3.3-13.5 8.4-26.4 14.8-38.7l-160.2 0 0-48.2 234.5 0 0 39c-51.2 36.1-56.4 92.6-23.6 143.9 33.1 51.7 93.4 88.1 149.5 110.5 67.8-25.2 164.9-89.9 169.4-169.6 3.1-55.3-42.2-101.8-98.7-91.8-41.5 7.4-62.1 46.7-54.8 86.4l-48.2 0c-7.3-56.6 22.8-112.6 78.4-130.3 78.7-25.1 159.5 28 170.4 108.8 15.2 112.3-95.5 199.9-188.1 237.8-4.4 1.8-24.4 10.1-27.5 10.1l-280.3 0 0-48.2 178.5 0-38.1-28.9-23.2-22.1-198.3 0 0-48.2 163.1 0c-7.1-11.6-12.3-24.3-16.1-37.4-.7-2.5-2.1-12-3.8-12.6l-204.9-.1 0-48.2 0 0z\"]\n};\nvar faRockrms = {\n  prefix: 'fab',\n  iconName: 'rockrms',\n  icon: [512, 512, [], \"f3e9\", \"M256 8a248 248 0 1 0 0 496 248 248 0 1 0 0-496zM413.4 427.5l-90 0-112-131.3c-17.9-20.4-3.9-56.1 26.6-56.1l75.3 0-84.6-99.3-84.3 98.9-90 0 147.1-172.5c14.4-18.4 41.3-17.3 54.5 0L413.7 252.3c19 22.8 2 57.2-27.6 56.1-.6 0-74.2 .2-74.2 .2L413.4 427.5z\"]\n};\nvar faUnsplash = {\n  prefix: 'fab',\n  iconName: 'unsplash',\n  icon: [448, 512, [], \"e07c\", \"M448 230.2l0 249.8-448 0 0-249.8 141.1 0 0 124.9 165.7 0 0-124.9 141.1 0zM306.9 32l-165.7 0 0 124.9 165.7 0 0-124.9z\"]\n};\nvar faSquareInstagram = {\n  prefix: 'fab',\n  iconName: 'square-instagram',\n  icon: [448, 512, [\"instagram-square\"], \"e055\", \"M194.4 211.7a53.3 53.3 0 1 0 59.2 88.6 53.3 53.3 0 1 0 -59.2-88.6zm142.3-68.4c-5.2-5.2-11.5-9.3-18.4-12-18.1-7.1-57.6-6.8-83.1-6.5-4.1 0-7.9 .1-11.2 .1s-7.2 0-11.4-.1c-25.5-.3-64.8-.7-82.9 6.5-6.9 2.7-13.1 6.8-18.4 12s-9.3 11.5-12 18.4c-7.1 18.1-6.7 57.7-6.5 83.2 0 4.1 .1 7.9 .1 11.1s0 7-.1 11.1c-.2 25.5-.6 65.1 6.5 83.2 2.7 6.9 6.8 13.1 12 18.4s11.5 9.3 18.4 12c18.1 7.1 57.6 6.8 83.1 6.5 4.1 0 7.9-.1 11.2-.1s7.2 0 11.4 .1c25.5 .3 64.8 .7 82.9-6.5 6.9-2.7 13.1-6.8 18.4-12s9.3-11.5 12-18.4c7.2-18 6.8-57.4 6.5-83 0-4.2-.1-8.1-.1-11.4s0-7.1 .1-11.4c.3-25.5 .7-64.9-6.5-83-2.7-6.9-6.8-13.1-12-18.4l0 .2zm-67.1 44.5c18.1 12.1 30.6 30.9 34.9 52.2s-.2 43.5-12.3 61.6c-6 9-13.7 16.6-22.6 22.6s-19 10.1-29.6 12.2c-21.3 4.2-43.5-.2-61.6-12.3s-30.6-30.9-34.9-52.2 .2-43.5 12.2-61.6 30.9-30.6 52.2-34.9 43.5 .2 61.6 12.2l.1 0zm29.2-1.3c-3.1-2.1-5.6-5.1-7.1-8.6s-1.8-7.3-1.1-11.1 2.6-7.1 5.2-9.8 6.1-4.5 9.8-5.2 7.6-.4 11.1 1.1 6.5 3.9 8.6 7 3.2 6.8 3.2 10.6c0 2.5-.5 5-1.4 7.3s-2.4 4.4-4.1 6.2-3.9 3.2-6.2 4.2-4.8 1.5-7.3 1.5c-3.8 0-7.5-1.1-10.6-3.2l-.1 0zM448 96c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320zM357 389c-18.7 18.7-41.4 24.6-67 25.9-26.4 1.5-105.6 1.5-132 0-25.6-1.3-48.3-7.2-67-25.9s-24.6-41.4-25.8-67c-1.5-26.4-1.5-105.6 0-132 1.3-25.6 7.1-48.3 25.8-67s41.5-24.6 67-25.8c26.4-1.5 105.6-1.5 132 0 25.6 1.3 48.3 7.1 67 25.8s24.6 41.4 25.8 67c1.5 26.3 1.5 105.4 0 131.9-1.3 25.6-7.1 48.3-25.8 67l0 .1z\"]\n};\nvar faInstagramSquare = faSquareInstagram;\nvar faFirstOrderAlt = {\n  prefix: 'fab',\n  iconName: 'first-order-alt',\n  icon: [512, 512, [], \"f50a\", \"M256 8a248 248 0 1 0 0 496 248 248 0 1 0 0-496zm0 7.8a240.2 240.2 0 1 1 0 480.4 240.2 240.2 0 1 1 0-480.4zm0 20.5a219.7 219.7 0 1 0 0 439.4 219.7 219.7 0 1 0 0-439.4zm0 8.2a211.5 211.5 0 1 1 0 423 211.5 211.5 0 1 1 0-423zm186.2 260c-4.4 17.1-11.2 33.5-20.1 48.7l-74.1-35.9 61.5 54.8c-10.6 14.1-23.2 26.6-37.2 37.3l-54.8-61.6 35.9 74.3c-15.2 9-31.6 15.8-48.6 20.2l-27.3-78.5 4.8 82.9c-8.6 1.2-17.4 1.8-26.3 1.8s-17.7-.6-26.3-1.8l4.8-82.5-27.2 78c-17.1-4.5-33.4-11.3-48.7-20.2l35.9-74.3-54.9 61.6c-14-10.7-26.6-23.2-37.2-37.3l61.6-54.9-74.3 35.9C80.7 338 74 321.7 69.5 304.6l77.8-27.1-82.2 4.8c-1.2-8.6-1.8-17.3-1.8-26.2 0-9 .6-17.8 1.8-26.5l82.4 4.8-77.9-27.2c4.5-17.1 11.3-33.5 20.2-48.7l74.2 35.9-61.5-54.9c10.7-14 23.2-26.6 37.3-37.2l54.8 61.5-35.8-74.2c15.2-8.9 31.6-15.7 48.6-20.1l26.9 77.2-4.7-81.6c8.6-1.2 17.4-1.8 26.3-1.8s17.7 .6 26.3 1.8l-4.7 82.2 27-77.8c17.3 4.5 33.6 11.4 48.6 20.2l-35.8 74.1 54.7-61.5c14.1 10.7 26.6 23.2 37.2 37.2l-61.4 54.8 74.1-35.9c8.9 15.2 15.7 31.6 20.2 48.6l-77.8 27.1 82.2-4.7c1.2 8.7 1.8 17.5 1.8 26.5 0 8.9-.6 17.6-1.8 26.2l-82.1-4.7 77.7 27.1z\"]\n};\nvar faFulcrum = {\n  prefix: 'fab',\n  iconName: 'fulcrum',\n  icon: [256, 512, [], \"f50b\", \"M63.8 164.1L28.4 207.7-7 164.1 28.4 120.6 63.8 164.1zM112.2 0l-20.5 198.2-51 57.8 51 57.8 20.5 198.2 0-211.1-41.1-44.9 41.1-44.9 0-211.1zm79.7 164.1l35.4 43.6 35.4-43.6-35.4-43.5-35.4 43.5zm-48.5 47l41.1 44.9-41.1 44.9 0 211.1 20.6-198.2 51-57.8-51-57.8-20.6-198.2 0 211.1z\"]\n};\nvar faArchLinux = {\n  prefix: 'fab',\n  iconName: 'arch-linux',\n  icon: [576, 512, [], \"e867\", \"M288.7-7.8c-24.1 59-38.6 97.7-65.4 155 16.4 17.4 36.6 37.6 69.4 60.5-35.2-14.5-59.2-28.9-77.2-44-34.3 71.6-88.1 173.5-197.2 369.4 85.7-49.5 152.2-80 214.1-91.6-2.7-11.4-4.1-23.8-4-36.7l.1-2.7c1.4-54.9 29.9-97.2 63.8-94.4s60.2 49.8 58.8 104.7c-.3 10.3-1.4 20.2-3.4 29.4 61.2 12 127 42.4 211.6 91.2-16.7-30.7-31.6-58.3-45.8-84.7-22.4-17.4-45.7-39.9-93.3-64.4 32.7 8.5 56.3 18.3 74.5 29.3-144.5-269.1-156.2-304.8-205.8-421.1z\"]\n};\nvar faFediverse = {\n  prefix: 'fab',\n  iconName: 'fediverse',\n  icon: [576, 512, [], \"e865\", \"M394.8 526.9a54 54 0 1 1 5.8-107.8 54 54 0 1 1 -5.8 107.8zm-50.1-80.6c-5.5 10.9-7.4 23.3-5.6 35.4L168.7 454.4c5.5-10.9 7.5-23.3 5.7-35.4l170.3 27.3zM112.7 481.6a54 54 0 1 1 5.9-107.8 54 54 0 1 1 -5.9 107.8zm257.7-61.4c-10.9 5.6-19.7 14.4-25.4 25.3l-70.6-70.9 33.6-17 62.4 62.7zM486.1 261c8.7 8.6 19.8 14.3 31.9 16.4L439.4 430.8c-8.7-8.6-19.8-14.3-31.9-16.4L486.1 261zM376.7 219.3l30.5 195.1c-12.1-1.9-24.5-.1-35.4 5.3l-32.2-206.3 37.2 6zM350.4 328.9L174.2 418.2c-2-12.1-7.6-23.2-16.2-32l186.6-94.6 5.8 37.2zm-152.7-22l-40.3 78.7c-8.7-8.6-19.8-14.3-31.9-16.3l45.6-89 26.6 26.7zM124.7 369c-12.1-1.8-24.4 .2-35.4 5.6L62.7 204.3c12.1 1.8 24.5-.1 35.4-5.6L124.7 369zm147.1-47.8l-33.6 17-139.4-139.9c10.9-5.6 19.7-14.4 25.4-25.3L271.8 321.2zm197.5-92.8c2 12.1 7.6 23.2 16.2 31.9l-89.3 45.2-5.8-37.2 78.9-40zm55.6 44.3a54 54 0 1 1 5.9-107.8 54 54 0 1 1 -5.9 107.8zM284.6 58.7c8.7 8.6 19.8 14.3 31.8 16.3l-95.3 186.1-26.6-26.7 90-175.8zM474.9 192.1c-5.5 10.9-7.5 23.3-5.7 35.3l-206.4-33.1 17.2-33.5 195 31.3zM68.7 199.6A54 54 0 1 1 74.6 91.8 54 54 0 1 1 68.7 199.6zm432-33.4c-10.9 5.6-19.7 14.4-25.4 25.3L353.5 69.3c10.9-5.6 19.7-14.4 25.4-25.3L500.6 166.2zM229.3 152.6l-17.2 33.5-87.4-14c5.4-10.9 7.4-23.3 5.5-35.4l99 15.9zm139.5 15.9l-37.2-6-13.6-87.2c12.1 1.7 24.5-.3 35.3-5.9l15.5 99.1zM267.8 26.2c2 12.1 7.6 23.2 16.2 31.9l-153.9 78c-2-12.1-7.6-23.2-16.2-31.9l153.9-78zm55.6 44.3a54 54 0 1 1 5.8-107.8 54 54 0 1 1 -5.8 107.8z\"]\n};\nvar faBraveReverse = {\n  prefix: 'fab',\n  iconName: 'brave-reverse',\n  icon: [448, 512, [], \"e63d\", \"M298.5 0c3 0 5.8 1.3 7.8 3.6l38.1 44c.5-.1 1-.2 1.5-.3 9.2-1.6 18.6-2.2 27.7-1.2 11.6 1.4 21.5 5.4 28.9 12.9 7.7 7.8 15.4 15.8 22.6 23.6 2.5 2.7 4.9 5.2 6.9 7.4 .7 .8 1.4 1.5 1.9 2 3.4 3.7 4.2 8.1 2.7 11.9l-9.8 24.6 13.1 38.1c.7 2 .8 4.1 .2 6.2-.1 .4-.1 .4-.5 2.1l-1.5 5.8c-1.6 6.3-3.5 13.3-5.4 20.9-5.6 21.6-11.2 43.2-16.4 63.4-12.9 49.9-21.4 82.7-23.4 90.9-11.1 44.5-19.9 60-48.3 80.3-24.9 17.8-76.8 53.6-86.8 60-1 .6-2 1.3-3.4 2.3-.5 .4-3.2 2.2-3.9 2.7-4.9 3.3-8.3 5.5-12.1 7.3-4.7 2.2-9.3 3.5-13.9 3.5s-9.1-1.2-13.9-3.5c-3.7-1.8-7.2-3.9-12.1-7.3-.8-.5-3.4-2.4-3.9-2.7-1.4-1-2.5-1.7-3.4-2.3-10-6.4-61.9-42.1-86.8-60-28.4-20.4-37.2-35.8-48.3-80.3-2-8.2-10.5-41-23.3-90.5-5.3-20.6-10.9-42.2-16.5-63.8-2-7.6-3.8-14.6-5.4-20.9l-1.5-5.8-.5-2.1c-.5-2-.4-4.2 .2-6.2l13.1-38.1-9.9-24.5c-1.5-3.8-.7-8.2 2-11.2 1.2-1.3 1.8-2 2.6-2.8 2-2.2 4.4-4.7 6.9-7.4 7.3-7.7 15-15.7 22.7-23.5 7.4-7.5 17.3-11.6 28.9-12.9 9.1-1.1 18.5-.5 27.7 1.2 .5 .1 1 .2 1.5 .3l38.1-44c2-2.4 4.8-3.7 7.8-3.7l148 0zm-4.7 21.1l-138.6 0-39.1 45.1c-2.6 3-6.7 4.3-10.6 3.2-.2-.1-.7-.2-1.5-.4-1.3-.3-2.9-.6-4.5-.9-7.4-1.3-14.9-1.8-21.7-1-7.3 .9-13 3.2-16.6 6.9-7.6 7.7-15.2 15.6-22.3 23.3-1.7 1.8-3.3 3.5-4.8 5.1l8.8 22c1 2.4 1 5 .2 7.5L29.7 170.6c.4 1.4 .5 1.9 1.2 4.8 1.6 6.3 3.5 13.3 5.4 20.9 5.6 21.6 11.2 43.2 16.4 63.4 12.9 50 21.4 82.8 23.4 91 10.1 40.1 16.4 51.3 40.2 68.3 24.6 17.6 76.3 53.2 85.9 59.3 1.2 .8 2.5 1.6 4 2.7 .6 .4 3.2 2.2 3.9 2.7 4 2.8 6.7 4.4 9.2 5.6 2.2 1 3.9 1.5 5.1 1.5s2.9-.5 5.1-1.5c2.5-1.2 5.2-2.8 9.2-5.6 .7-.5 3.3-2.3 3.9-2.7 1.6-1.1 2.8-1.9 4-2.7 9.6-6.1 61.3-41.7 85.9-59.3 23.8-17.1 30.2-28.2 40.1-68.3 2.1-8.3 10.5-41.1 23.3-90.7 5.3-20.6 10.9-42.2 16.5-63.8 2-7.6 3.8-14.6 5.4-20.9 .7-2.9 .9-3.4 1.2-4.8l-13.3-38.8c-.8-2.4-.8-5.1 .2-7.5l8.8-22c-1.5-1.6-3.1-3.3-4.8-5.1-7.2-7.6-14.7-15.5-22.3-23.3-3.7-3.7-9.3-6-16.6-6.9-6.8-.8-14.4-.3-21.7 1-1.7 .3-3.2 .6-4.5 .9-.8 .2-1.3 .3-1.5 .4-3.8 1.1-7.9-.2-10.6-3.2L293.8 21.1zM224.5 316c2.8 0 20.9 6.5 35.4 14.1s25 13 28.3 15.2 1.3 6.2-1.7 8.4-44.1 34.6-48.1 38.2-9.8 9.5-13.8 9.5-9.8-5.9-13.8-9.5-45.1-36-48.1-38.2-5.1-6.2-1.7-8.4 13.9-7.5 28.3-15.2 32.5-14.1 35.4-14.1l-.2 0zm.1-230.7c.7 0 8.8 .2 20.5 4.2 12.3 4.2 25.7 9.4 31.9 9.4s51.9-8.9 51.9-8.9 54.2 66.7 54.2 81-6.8 18-13.7 25.4-36.8 39.8-40.7 43.9-11.9 10.5-7.1 21.8 11.7 25.8 3.9 40.4-21 24.4-29.4 22.8-28.4-12.2-35.7-17.1-30.5-24.3-30.5-31.8 24-20.8 28.4-23.9 24.7-14.8 25.1-19.4 .3-6-5.7-17.4-16.7-26.7-14.9-36.8 19.1-15.4 31.5-20.2 36.2-13.7 39.2-15.1 2.2-2.7-6.8-3.6-34.6-4.3-46.1-1.1-31.2 8.2-32.8 10.9-3 2.7-1.4 11.8 10.1 52.8 10.9 60.6 2.4 12.9-5.8 14.8-22.1 5.2-26.8 5.2-18.6-3.3-26.8-5.2-6.6-7-5.8-14.8 9.3-51.5 10.9-60.6 .2-9.2-1.4-11.8-21.3-7.6-32.8-10.9-37.1 .2-46.1 1.1-9.8 2.2-6.8 3.6 26.8 10.4 39.2 15.1 29.7 10 31.5 20.2-9 25.4-14.9 36.8-6.1 12.8-5.7 17.4 20.6 16.4 25.1 19.4 28.4 16.4 28.4 23.9-23.2 27-30.5 31.8-27.2 15.4-35.7 17.1-21.7-8.2-29.4-22.8-.8-29.1 3.9-40.4-3.3-17.7-7.1-21.8-33.8-36.5-40.7-43.9-13.7-11.2-13.7-25.4 54.2-81 54.2-81 45.8 8.9 51.9 8.9 19.5-5.2 31.9-9.4 20.6-4.2 20.6-4.2l-.3 0z\"]\n};\nvar faAvianex = {\n  prefix: 'fab',\n  iconName: 'avianex',\n  icon: [512, 512, [], \"f374\", \"M453.2 32l-312 0C102.3 32 65 63.2 57.9 101.7L1.3 410.3C-5.8 448.8 20 480 59 480l312 0c38.9 0 76.2-31.2 83.3-69.7L511 101.8C518 63.2 492.2 32 453.2 32zM395 379.3l-32 13.5-115.4-110c-14.7 10-29.2 19.5-41.7 27.1l22.1 64.2-17.9 12.7-40.6-61-52.4-48.1 15.7-15.4 58 31.1c9.3-10.5 20.8-22.6 32.8-34.9l-20.5-29.6-68.8-99.8 18.8-28.9 8.9-4.8 103.1 112.4 4.9 4.5c19.4-18.8 33.8-32.4 33.8-32.4 7.7-6.5 21.5-2.9 30.7 7.9 9 10.5 10.6 24.7 2.7 31.3-1.8 1.3-15.5 11.4-35.3 25.6l4.5 7.3 94.9 119.4-6.3 7.9z\"]\n};\nvar faNs8 = {\n  prefix: 'fab',\n  iconName: 'ns8',\n  icon: [640, 512, [], \"f3d5\", \"M104.3 269.2l26.1 0 0-26.2-26.1 0 0 26.2zM156.8 243l-.1-26.2 0-.9c-.2-10.4-4.4-20.3-11.9-27.6s-17.5-11.3-27.9-11.1-20.3 4.4-27.6 11.8-11.3 17.5-11.2 27.9l0 .2 26.4 0 0-.2c.1-3.4 1.5-6.6 3.9-9s5.7-3.7 9.1-3.7 6.7 1.3 9.1 3.7 3.8 5.6 3.9 9l0 26.2 26.3 0zm52.4 25.8c0 12-2.4 23.8-6.9 34.9s-11.3 21.1-19.7 29.6-18.5 15.2-29.6 19.7-22.9 6.9-34.9 6.9l-.6 0c-24.2 0-47.3-9.6-64.4-26.7S26.3 293 26.3 268.8l-26.3 0 0 .2c0 15.4 3.1 30.7 9 44.9s14.6 27.2 25.5 38.1 23.9 19.5 38.1 25.4 29.5 8.9 44.9 8.9l.8 0c15.4 0 30.7-3 44.9-9s27.2-14.6 38.1-25.5 19.5-23.8 25.4-38.1 8.9-29.5 8.9-44.9l0-26-26.3 0 0 26zm-157.2 0c.1 17.3 7 33.9 19.2 46.1s28.8 19.1 46.1 19.1 33.9-6.9 46.1-19.1 19.2-28.8 19.2-46.1l-26.3 0c-.2 10.2-4.4 20-11.7 27.2s-17.1 11.2-27.4 11.2-20.1-4-27.4-11.2-11.5-16.9-11.7-27.2l0-26-26.3 0 0-26.6c.3-17.3 7.4-33.8 19.7-45.8s29-18.8 46.3-18.6 33.8 7.2 45.9 19.5 18.9 28.9 18.9 46.2l0 25.3 26.3 0 0-25.3c0-24.3-9.7-47.7-26.9-64.9s-40.5-26.9-64.9-26.9-47.7 9.7-64.9 26.9-26.9 40.5-26.9 64.9l0 25.4 26.3 0 0 26zm418.4-71.2c13.7 0 24.6 6.6 30.1 18.3l.7 1.5 23.2-11.5-.6-1.4c-8-19.3-28.5-31.3-53.4-31.3-23.1 0-43.6 11.4-51 28.4-.1 26.9-.2 23.9 0 24.8 4.7 11 14.6 19.4 28.7 24.2 6.5 2 13.1 3.3 19.8 4 5.5 .7 10.6 1.4 15.8 3.1 6.4 2.1 10.5 5.3 12.8 9.8l0 9.9c-3.7 7.5-13.8 12.3-25.8 12.3-14.3 0-26-6.9-31.9-19l-.7-1.5-23 11.5 .6 1.4c7.9 19.4 29.6 32 55.3 32 23.6 0 44.6-11.4 52.3-28.4l.2-25.9-.2-.7c-4.9-11-15.2-19.6-28.9-24.2-7.7-2.7-14.3-3.6-20.7-4.4-5-.5-10-1.5-14.8-2.9-6.3-1.9-10.4-5.1-12.6-9.6l0-8.4c3.4-7.4 12.9-12.1 24.2-12.1l0 0zM287.6 311.3l26.1 0 0-68.4-26.1 0 0 68.4zM639.8 258c-2.9-6.3-8.3-12-15.4-16.7 5.6-3.8 10.1-9.1 13-15.3l.2-25.3-.2-.7c-7.4-16-26.7-26.7-48.2-26.7S548.5 184 541.1 200l-.2 25.3 .2 .7c2.9 6.1 7.4 11.4 13 15.3-7.2 4.7-12.5 10.5-15.4 16.7l-.2 28.9 .2 .7c7.6 16 27.9 26.7 50.6 26.7s43.1-10.7 50.6-26.7l.2-28.9-.2-.7zm-73.2-50.8c3.6-6.3 12.6-10.5 22.6-10.5s19 4.2 22.6 10.5l0 13.7c-3.5 6.2-12.6 10.3-22.6 10.3s-19.1-4.2-22.6-10.3l0-13.7zm47.3 72.2c-3.8 6.6-13.3 10.9-24.7 10.9-11.1 0-21-4.4-24.7-10.9l0-16.2c3.7-6.3 13.5-10.5 24.7-10.5 11.3 0 20.9 4.1 24.7 10.5l0 16.2zM376.4 266l-59.8-89.7-29 0 0 40.6 26.5 0 0 .4 62.5 94.1 25.7 0 0-135.1-25.9 0 0 89.7z\"]\n};\nvar faSquarePinterest = {\n  prefix: 'fab',\n  iconName: 'square-pinterest',\n  icon: [448, 512, [\"pinterest-square\"], \"f0d3\", \"M384 32L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l72.6 0-2.2-.8c-5.4-48.1-3.1-57.5 15.7-134.7 3.9-16 8.5-35 13.9-57.9 0 0-7.3-14.8-7.3-36.5 0-70.7 75.5-78 75.5-25 0 13.5-5.4 31.1-11.2 49.8-3.3 10.6-6.6 21.5-9.1 32-5.7 24.5 12.3 44.4 36.4 44.4 43.7 0 77.2-46 77.2-112.4 0-58.8-42.3-99.9-102.6-99.9-69.9 0-110.9 52.4-110.9 106.6 0 21.1 8.2 43.7 18.3 56 2 2.4 2.3 4.5 1.7 7-1.1 4.7-3.1 12.9-4.7 19.2-1 4-1.8 7.3-2.1 8.6-1.1 4.5-3.5 5.5-8.2 3.3-30.6-14.3-49.8-59.1-49.8-95.1 0-77.5 56.2-148.6 162.2-148.6 85.2 0 151.4 60.7 151.4 141.8 0 84.6-53.3 152.7-127.4 152.7-24.9 0-48.3-12.9-56.3-28.2 0 0-12.3 46.9-15.3 58.4-5 19.3-17.6 42.9-27.4 59.3L384 480c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64z\"]\n};\nvar faPinterestSquare = faSquarePinterest;\nvar faBluetoothB = {\n  prefix: 'fab',\n  iconName: 'bluetooth-b',\n  icon: [256, 512, [], \"f294\", \"M164.9 260L257.5 156.7 111.6 0 111.6 206.3 25.4 120.2-6 151.6 102.1 260-6 368.4 25.4 399.8 111.6 313.7 114.3 512 262.8 363.4 164.9 260zm40.9-103l-50 50-.3-100.3 50.3 50.3zm-50 156l50 50-50.3 50.3 .3-100.3z\"]\n};\nvar faGripfire = {\n  prefix: 'fab',\n  iconName: 'gripfire',\n  icon: [320, 512, [], \"f3ac\", \"M80.5 301.4c0-73.8 105.1-122.5 105.1-203 0-47.1-34-88-39.1-90.4 .4 3.3 .6 6.7 .6 10 0 92.1-147.1 153.9-147.1 268.6 0 49.8 32.2 79.2 66.5 108.3 65.1 46.7 78.1 71.4 78.1 86.6 0 10.1-4.8 17-4.8 22.3 13.1-16.7 17.4-31.9 17.5-46.4 0-29.6-21.7-56.3-44.2-86.5-16-22.3-32.6-42.6-32.6-69.5zm205.3-39c-12.1-66.8-78-124.4-94.7-130.9l4 7.2c2.4 5.1 3.4 10.9 3.4 17.1 0 44.7-54.2 111.2-56.6 116.7-2.2 5.1-3.2 10.5-3.2 15.8 0 20.1 15.2 42.1 17.9 42.1 2.4 0 56.6-55.4 58.1-87.7 6.4 11.7 9.1 22.6 9.1 33.4 0 41.2-41.8 96.9-41.8 96.9 0 11.6 31.9 53.2 35.5 53.2 1 0 2.2-1.4 3.2-2.4 37.9-39.3 67.3-85 67.3-136.8 0-8-.7-16.2-2.2-24.6z\"]\n};\nvar faSquareGooglePlus = {\n  prefix: 'fab',\n  iconName: 'square-google-plus',\n  icon: [448, 512, [\"google-plus-square\"], \"f0d4\", \"M448 96c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320zM64 256c0-55.3 44.7-100 100-100 27 0 49.5 9.8 67 26.2l-27.1 26.1c-7.4-7.1-20.3-15.4-39.8-15.4-34.1 0-61.9 28.2-61.9 63.2 0 34.9 27.8 63.2 61.9 63.2 39.6 0 54.4-28.5 56.8-43.1l-56.9 0 0-34.4 94.4 0c1 5 1.6 10.1 1.6 16.6 0 57.1-38.3 97.6-96 97.6-55.3 0-100-44.7-100-100zm291 18.2l0 29-29.2 0 0-29-29 0 0-29.2 29 0 0-29 29.2 0 0 29 29 0 0 29.2-29 0z\"]\n};\nvar faGooglePlusSquare = faSquareGooglePlus;\nvar faGitee = {\n  prefix: 'fab',\n  iconName: 'gitee',\n  icon: [512, 512, [], \"e863\", \"M256 512a256 256 0 1 1 0-512 256 256 0 1 1 0 512zM385.6 113.8l0 0-177 0c-52.4 0-94.8 42.4-94.8 94.8l0 177c0 7 5.7 12.6 12.6 12.6l186.5 0c47.1 0 85.3-38.2 85.3-85.3l0-72.7c0-7-5.7-12.6-12.6-12.6l-145.4 0c-7 0-12.6 5.7-12.6 12.6l0 31.6c0 6.6 5.1 12.1 11.6 12.6l1 0 88.5 0c6.6 0 12.1 5.1 12.6 11.6l0 1 0 6.3c0 20.9-17 37.9-37.9 37.9l-120.1 0c-7 0-12.6-5.7-12.6-12.6l0-120.1c0-20.4 16.1-37.1 36.4-37.9l1.6 0 177 0c7 0 12.6-5.7 12.6-12.6l0-31.6c0-7-5.6-12.6-12.6-12.6z\"]\n};\nvar faXmpp = {\n  prefix: 'fab',\n  iconName: 'xmpp',\n  icon: [576, 512, [], \"e864\", \"M0 47.2c3.5 137.1 117.1 278.6 252.9 356.7-31.5 25-67.2 44.1-106.2 53.9l0 5.4c56.4-2.3 98.1-20.1 141.3-40.7 65.7 34.6 122.2 39.9 141.4 40.7l0-5.4c-39-9.8-74.7-28.8-106.2-53.8 135.7-78.2 249.3-219.8 252.8-356.8-58.4 25.7-119.1 44.2-180.1 62.3l0 0c3.4 59-20.2 170.4-107.9 262.3-88.4-92.3-111.2-204.1-107.8-262.3l0 0C117.7 92.6 59.3 70.2 0 47.2zM93.9 97l73.6 21.8C165.4 216 226.8 358 341.3 432.2 190.5 376.9 89.9 215.7 93.9 97zm388.3 0c3.3 99-65.6 224.7-171.7 296.4-4.7-4.1-9.3-8.4-13.8-12.7 77-80.2 113.2-186.3 111.9-261.9L482.1 97zM264.5 410.5c3 1.6 5.9 3.2 8.9 4.7-12.5 6.4-25.4 12.1-38.6 17 10.3-6.7 20.2-13.9 29.7-21.7z\"]\n};\nvar faAppStore = {\n  prefix: 'fab',\n  iconName: 'app-store',\n  icon: [512, 512, [], \"f36f\", \"M255.9 120.9l9.1-15.7c5.6-9.8 18.1-13.1 27.9-7.5s13.1 18.1 7.5 27.9l-87.5 151.5 63.3 0c20.5 0 32 24.1 23.1 40.8l-185.5 0c-11.3 0-20.4-9.1-20.4-20.4s9.1-20.4 20.4-20.4l52 0 66.6-115.4-20.8-36.1c-5.6-9.8-2.3-22.2 7.5-27.9 9.8-5.6 22.2-2.3 27.9 7.5l8.9 15.7zm-78.7 218l-19.6 34c-5.6 9.8-18.1 13.1-27.9 7.5s-13.1-18.1-7.5-27.9l14.6-25.2c16.4-5.1 29.8-1.2 40.4 11.6zm168.9-61.7l53.1 0c11.3 0 20.4 9.1 20.4 20.4S410.5 318 399.2 318l-29.5 0 19.9 34.5c5.6 9.8 2.3 22.2-7.5 27.9-9.8 5.6-22.2 2.3-27.9-7.5-33.5-58.1-58.7-101.6-75.4-130.6-17.1-29.5-4.9-59.1 7.2-69.1 13.4 23 33.4 57.7 60.1 104zM256 8a248 248 0 1 0 0 496 248 248 0 1 0 0-496zM40 256a216 216 0 1 1 432 0 216 216 0 1 1 -432 0z\"]\n};\nvar faWix = {\n  prefix: 'fab',\n  iconName: 'wix',\n  icon: [640, 512, [], \"f5cf\", \"M393.4 131.7c0 13 2.1 32.7-28.7 43.8-9.5 3.4-16 9.7-16 9.7 0-31 4.7-42.2 17.4-48.9 9.8-5.1 27.2-4.6 27.2-4.6zM277.6 167.2l-34.2 132.7-28.5-108.6c-7.7-32-20.8-48.5-48.4-48.5-27.4 0-40.7 16.2-48.4 48.5L89.5 299.9 55.3 167.2C49.7 140.5 23.9 129 0 132L65.6 379.9s21.6 1.6 32.5-4c14.2-7.2 21-12.8 29.6-46.6 7.7-30.1 29.1-118.4 31.1-124.7 4.8-14.9 11.1-13.8 15.4 0 2 6.3 23.5 94.6 31.1 124.7 8.6 33.7 15.4 39.3 29.6 46.6 10.8 5.5 32.5 4 32.5 4L332.9 132c-24.4-3.1-49.8 8.9-55.3 35.3zm115.8 5.2s-4.1 6.3-13.5 11.6c-6 3.4-11.8 5.6-18 8.6-15.1 7.3-13.2 13.9-13.2 35.2l0 152.1s16.6 2.1 27.4-3.4c13.9-7.1 17.1-14 17.3-44.8l0-150.3 0 0 0-9zm163.4 84.1L640 132.8s-35.1-6-52.5 9.8c-13.3 12.1-24.4 29.6-54.2 72.5-.5 .7-6.3 10.5-13.1 0-29.3-42.2-40.8-60.3-54.2-72.5-17.4-15.8-52.5-9.8-52.5-9.8l83.2 123.7-83 123.4s36.6 4.6 54-11.2c11.5-10.5 17.6-20.4 52.5-70.7 6.8-10.5 12.6-.8 13.1 0 29.4 42.4 39.2 58.1 53.1 70.7 17.4 15.8 53.3 11.2 53.3 11.2l-83-123.4z\"]\n};\nvar faIntercom = {\n  prefix: 'fab',\n  iconName: 'intercom',\n  icon: [448, 512, [], \"f7af\", \"M392 32L56 32C25.1 32 0 57.1 0 88L0 424c0 30.9 25.1 56 56 56l336 0c30.9 0 56-25.1 56-56l0-336c0-30.9-25.1-56-56-56zM283.7 114.1c0-19.8 29.9-19.8 29.9 0l0 199.5c0 19.8-29.9 19.8-29.9 0l0-199.5zm-74.6-7.5c0-19.8 29.9-19.8 29.9 0l0 216.5c0 19.8-29.9 19.8-29.9 0l0-216.5zm-74.7 7.5c0-19.8 29.9-19.8 29.9 0l0 199.5c0 19.8-29.9 19.8-29.9 0l0-199.5zM59.7 144c0-19.8 29.9-19.8 29.9 0l0 134.3c0 19.8-29.9 19.8-29.9 0l0-134.3zM383.1 371.8c-72.8 63-241.7 65.4-318.1 0-15-12.8 4.4-35.5 19.4-22.7 65.9 55.3 216.1 53.9 279.3 0 14.9-12.9 34.3 9.8 19.4 22.7zm5.2-93.5c0 19.8-29.9 19.8-29.9 0l0-134.3c0-19.8 29.9-19.8 29.9 0l0 134.3z\"]\n};\nvar faReacteurope = {\n  prefix: 'fab',\n  iconName: 'reacteurope',\n  icon: [576, 512, [], \"f75d\", \"M250.7 211.7l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1-2.3-6.8-2.3 6.8-7.2 .1 5.7 4.3-2 6.8zm63.7 0l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.2-.1-2.3-6.8-2.3 6.8-7.2 .1 5.7 4.3-1.9 6.8zm-91.3 50.5l-3.4 0c-4.8 0-3.8 4-3.8 12.1 0 4.7-2.3 6.1-5.8 6.1s-5.8-1.4-5.8-6.1l0-36.6c0-4.7 2.3-6.1 5.8-6.1s5.8 1.4 5.8 6.1c0 7.2-.7 10.5 3.8 10.5l3.4 0c4.7-.1 3.8-3.9 3.8-12.3 0-9.9-6.7-14.1-16.8-14.1l-.2 0c-10.1 0-16.8 4.2-16.8 14.1l0 40.1c0 10.4 6.7 14.1 16.8 14.1l.2 0c10.1 0 16.8-3.8 16.8-14.1 0-9.9 1.1-13.8-3.8-13.8zm-80.7 17.4l-14.7 0 0-19.3 11.4 0c2.5 0 3.8-1.3 3.8-3.8l0-2.1c0-2.5-1.3-3.8-3.8-3.8l-11.4 0 0-18.3 14.4 0c2.5 0 3.8-1.3 3.8-3.8l0-2.1c0-2.5-1.3-3.8-3.8-3.8l-21.7 0c-2.4-.1-3.7 1.3-3.7 3.8l0 59.1c0 2.5 1.3 3.8 3.8 3.8l21.9 0c2.5 0 3.8-1.3 3.8-3.8l0-2.1c0-2.5-1.3-3.8-3.8-3.8zm-42-18.5c4.6-2 7.3-6 7.3-12.4l0-11.9c0-10.1-6.7-14.1-16.8-14.1l-13.4 0c-2.5 0-3.8 1.3-3.8 3.8l0 59.1c0 2.5 1.3 3.8 3.8 3.8l3.4 0c2.5 0 3.8-1.3 3.8-3.8l0-22.9 5.6 0 7.4 23.5c.2 1 .8 1.8 1.6 2.4s1.8 .9 2.7 .8l3.3 0c2.8 0 4-1.8 3.2-4.4l-8.1-23.9zm-3.8-14c0 4.8-2.5 6.1-6.1 6.1l-5.8 0 0-20.9 5.8 0c3.6 0 6.1 1.3 6.1 6.1l0 8.7zM176.1 226c-.1-.5-.2-1-.4-1.4s-.6-.8-1-1.1-.8-.6-1.3-.7-1-.2-1.5-.1l-6.9 0c-.5 0-1 0-1.4 .2s-.9 .4-1.3 .7-.7 .7-.9 1.1-.4 .9-.4 1.4l-11 59.2c-.5 2.7 .9 4.1 3.4 4.1l3 0c.5 .1 1 0 1.5-.2s.9-.4 1.3-.7 .7-.7 .9-1.2 .4-.9 .4-1.4l1.8-11.3 12.2 0 1.8 11.3c0 .5 .2 1 .4 1.4s.5 .9 .9 1.2 .8 .6 1.3 .7 1 .2 1.5 .2l3.5 0c2.6 0 3.9-1.4 3.4-4.1L176.1 226zm-12.3 39.3l4.7-29.7 4.7 29.7-9.4 0zm89.3 20.2l0-53.2 7.5 0c2.5 0 3.8-1.3 3.8-3.8l0-2.1c0-2.5-1.3-3.8-3.8-3.8l-25.8 0c-2.5 0-3.8 1.3-3.8 3.8l0 2.1c0 2.5 1.3 3.8 3.8 3.8l7.3 0 0 53.2c0 2.5 1.3 3.8 3.8 3.8l3.4 0c2.5 0 3.8-1.3 3.8-3.8l0 0zm248-.8l-19.4 0 0-26.7 16.1 0c.3 0 .5 0 .8-.1s.5-.2 .7-.4 .3-.4 .4-.7 .1-.5 .1-.8l0-.8c0-.3 0-.5-.1-.8s-.2-.5-.4-.7-.4-.3-.7-.4-.5-.1-.8-.1l-16.1 0 0-25.8 19.1 0c.3 0 .5 0 .8-.1s.5-.2 .7-.4 .3-.4 .4-.7 .1-.5 .1-.8l0-.8c0-.3 0-.5-.1-.8s-.2-.5-.4-.7-.4-.3-.7-.4-.5-.1-.8-.1l-22.2 0c-.3-.1-.5-.1-.8 0s-.5 .2-.7 .4-.3 .4-.4 .7-.1 .5-.1 .8l0 63c0 .3 0 .5 .1 .8s.2 .5 .4 .6 .4 .3 .7 .4 .5 .1 .8 .1l22.5 0c.3 0 .5 0 .8-.1s.5-.2 .7-.4 .3-.4 .4-.6 .1-.5 .1-.8l0-.8c0-.3 0-.5-.1-.8s-.2-.5-.4-.7-.4-.3-.7-.4-.5-.1-.8-.1l0 0zM408 221.8l-.8 0c-10.1 0-15.3 4.7-15.3 14.1l0 40.1c0 9.3 5.2 14.1 15.3 14.1l.8 0c10.1 0 15.3-4.8 15.3-14.1l0-40.1c0-9.4-5.2-14.1-15.3-14.1l0 0zm10.2 52.4c-.1 8-3 11.1-10.5 11.1s-10.5-3.1-10.5-11.1l0-36.6c0-7.9 3-11.1 10.5-11.1s10.5 3.2 10.5 11.1l0 36.6zm-46.5-14.5c6.1-1.6 9.2-6.1 9.2-13.3l0-9.7c0-9.4-5.2-14.1-15.3-14.1l-13.7 0c-.3 0-.5 0-.8 .1s-.5 .2-.7 .4-.3 .4-.4 .6-.1 .5-.1 .8l0 63c0 .3 0 .5 .1 .8s.2 .5 .4 .6 .4 .3 .7 .4 .5 .1 .8 .1l1.2 0c.3 0 .5 0 .8-.1s.5-.2 .6-.4 .3-.4 .4-.6 .1-.5 .1-.8l0-26.9 11.6 0 10.4 27.2c.2 .5 .5 .9 .9 1.1s.9 .4 1.4 .4l1.5 0c1.4 0 2-1 1.5-2.3l-10.6-27.3zm-6.4-3.9l-10.2 0 0-28.5 10.2 0c7.5 0 10.5 3.1 10.5 11.1l0 6.4c0 7.8-3 11-10.5 11l0 0zm85.9-33.1l-13.7 0c-.3-.1-.5-.1-.8 0s-.5 .2-.7 .4-.3 .4-.4 .7-.1 .5-.1 .8l0 63c0 .3 0 .5 .1 .8s.2 .5 .4 .6 .4 .3 .7 .4 .5 .1 .8 .1l1.2 0c.3 0 .5 0 .8-.1s.5-.2 .6-.4 .3-.4 .4-.6 .1-.5 .1-.8l0-26.1 10.6 0c10.1 0 15.3-4.8 15.3-14.1l0-10.5c0-9.4-5.2-14.1-15.3-14.1zm10.2 22.8c0 7.9-3 11.1-10.5 11.1l-10.2 0 0-29.2 10.2 0c7.5-.1 10.5 3.1 10.5 11l0 7.1zM259.6 308l-2.3-6.8-2.3 6.8-7.1 .1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1zM487.2 171.9c-11.7-4.4-23.5-8.1-35.6-11.3 19.6-78 11.6-134.7-22.3-153.9-34.5-19.4-85.9 4.3-138.2 55.2 3.4 3.3 6.8 6.7 10.2 10.2 82.5-80 119.6-53.5 120.9-52.8 22.4 12.7 36 55.8 15.5 137.8-27.8-6.4-56.1-10.7-84.6-13-71.9-100.5-140.6-142.1-182.2-142.1-30.8 0-43.8 21-47.6 27.7-18.1 32-13.3 84.2 .1 133.8-70.5 20.3-120.7 54.1-120.3 95 .5 59.6 103.2 87.8 122.1 92.8-20.5 81.9-10.1 135.6 22.3 153.9 28 15.8 75.1 6 138.2-55.2-3.4-3.3-6.8-6.7-10.2-10.2-82.5 80-119.7 53.5-120.9 52.8-22.3-12.6-36-55.6-15.5-137.9 12.4 2.9 41.8 9.5 84.6 13 71.9 100.4 140.6 142 182.1 142 30.8 0 43.8-21 47.6-27.7 18-31.9 13.3-84.1-.1-133.8 152.3-43.8 156.2-130.2 33.9-176.3l0 0zM136 36.8c2.9-5.1 11.9-20.3 34.9-20.3 36.8 0 98.8 39.6 163.3 126.2-31.3-1.8-62.7-1.5-93.9 .9 13-18.3 27.1-35.8 42.2-52.4-3.4-3.5-6.8-6.9-10.2-10.2-18.3 20.2-35.3 41.7-50.7 64.2-28.5 2.7-56.7 7.6-84.4 14.6-.2-1.4-24.3-82.2-1.2-123l0 0zM440.8 475.1c-2.9 5.1-11.8 20.3-34.9 20.3-36.7 0-98.7-39.4-163.3-126.2 31.3 1.8 62.7 1.5 93.9-.9-13 18.3-27.1 35.8-42.2 52.4 3.4 3.5 6.8 6.9 10.2 10.2 18.4-20.2 35.3-41.7 50.7-64.2 47.3-4.7 80.3-13.5 84.4-14.6 22.7 84.4 4.5 117 1.2 123zm9.1-138.6c-3.6-11.9-7.7-24.1-12.4-36.4-2.1 0-4.2-.5-6.1-1.5s-3.5-2.4-4.6-4.2l-.1 .1c-1.6 1.5-3.4 2.7-5.4 3.6 5.7 14.3 10.6 28.4 14.7 42.2-23.7 6-47.7 10.3-72 13 3.5-5.3 17.2-26.2 32.2-54.2-2.1-.8-4.2-1.9-6-3.2-1.1 1.2-3.6 4.2-10.9 4.2-6.2 11.2-17.4 30.9-33.9 55.2-37.4 3.3-75 3.6-112.4 1-7.9-11.2-21.5-31.1-36.8-57.8-1-.4-2-.9-3-1.5-1.9 1.6-3.9 3.2-12.6 3.2 6.3 11.2 17.5 30.7 33.8 54.6-24.3-2.3-48.4-6.2-72.2-11.7 3.9-14 8.6-28.3 14.1-42.9-3.2 0-5.4 .2-8.4-1-2.2 .8-4.6 1.1-6.9 1-4.9 13.4-9.1 26.5-12.7 39.4-159.9-42.6-140.3-123.6-1.5-164 3.6 11.9 7.7 24.1 12.4 36.4 10.4 0 12.9 3.4 14.4 5.3 .7-.8 1.4-1.6 2.3-2.2-5.8-14.7-10.9-29.2-15.2-43.3 7-1.8 32.4-8.4 72-13-15.9 24.3-26.7 43.9-32.8 55.3 3.1 1.8 5.3 4.6 6.4 8 2.5-3.7 6.1-6.6 10.2-8.4 6.5-11.7 17.9-31.9 34.8-56.9 37.4-3.3 75-3.6 112.4-1 31.5 44.6 28.9 48.1 42.5 64.5 2.6-3.5 6.3-6 10.4-7.4-6.4-11.4-17.6-31-34.3-55.5 40.4 4.1 65 10 72.2 11.7-4 14.4-8.9 29.2-14.6 44.2 2.5 1 4.8 2.4 6.8 4.3l.1 .1c1-1.5 2.3-2.8 3.8-3.8s3.3-1.6 5.1-1.8c4.9-13.4 9.2-26.6 12.8-39.5 11.7 3.1 23.2 6.8 34.5 11 106.1 39.9 74 87.9 72.6 90.4-19.8 35.1-80.1 55.2-105.7 62.5zm-114.4-114l-1.2 0c-.3 0-.5 0-.8 .1s-.5 .2-.6 .4-.3 .4-.4 .6-.1 .5-.1 .8l0 49.8c0 7.9-2.6 11.1-10.1 11.1s-10.1-3.1-10.1-11.1l0-49.8c0-.3 0-.5-.1-.8s-.2-.5-.4-.7-.4-.3-.7-.4-.5-.1-.8-.1l-1.2 0c-.3 0-.5 0-.8 .1s-.5 .2-.7 .4-.3 .4-.4 .6-.1 .5-.1 .8l0 51.5c0 9.6 5 14.1 15.1 14.1l.4 0c10.1 0 15.1-4.6 15.1-14.1l0-51.5c0-.3-.1-.5-.2-.8s-.3-.5-.5-.6-.4-.3-.7-.4-.5-.1-.8-.1zM321.8 308l-2.3-6.8-2.3 6.8-7.1 .1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1zm-31.1 7.4l-2.3-6.8-2.3 6.8-7.1 .1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1zm5.1-30.8l-19.4 0 0-26.7 16.1 0c.3 0 .5 0 .8-.1s.5-.2 .7-.4 .3-.4 .4-.7 .1-.5 .1-.8l0-.8c0-.3 0-.5-.1-.8s-.2-.5-.4-.7-.4-.3-.7-.4-.5-.1-.8-.1l-16.1 0 0-25.8 19.1 0c.3 0 .5 0 .8-.1s.5-.2 .7-.4 .3-.4 .4-.7 .1-.5 .1-.8l0-.8c0-.3 0-.5-.1-.8s-.2-.5-.4-.7-.4-.3-.7-.4-.5-.1-.8-.1l-22.2 0c-.3 0-.5 0-.8 .1s-.5 .2-.7 .4-.3 .4-.4 .6-.1 .5-.1 .8l0 63c0 .3 0 .5 .1 .8s.2 .5 .4 .6 .4 .3 .7 .4 .5 .1 .8 .1l22.5 0c.3 0 .5 0 .8-.1s.5-.2 .7-.4 .3-.4 .4-.7 .1-.5 .1-.8l0-.8c0-.3 0-.6-.1-.8s-.2-.5-.4-.7-.4-.4-.7-.4-.5-.1-.8-.1l0 0zm-7.4-99.4l-2.3 6.8-7.1 .1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1-2.3-6.8z\"]\n};\nvar faWaze = {\n  prefix: 'fab',\n  iconName: 'waze',\n  icon: [512, 512, [], \"f83f\", \"M502.6 201.7c14.5 85.9-30.9 167.9-113.2 208.1 13 34.1-12.4 70.2-48.3 70.2-13.2 0-26-5.1-35.6-14.2s-15.3-21.6-16-34.8c-6.4 .2-64.2 0-76.3-.6-.3 6.8-1.9 13.5-4.7 19.6s-6.9 11.7-11.9 16.3-10.8 8.2-17.2 10.5-13.2 3.4-19.9 3.1c-33.9-1.4-58-34.8-47-67.9-37.2-13.1-72.5-34.9-99.6-70.8-13-17.3-.5-41.8 20.8-41.8 46.3 0 32.2-54.2 43.2-110.3 18.4-93.9 116.8-157.1 211.7-157.1 102.5 0 197.2 70.7 214.1 169.7zM373.9 388.3c42-19.2 81.3-56.7 96.3-102.1 40.5-123.1-64.2-228-181.7-228-83.4 0-170.3 55.4-186.1 136-9.5 48.9 5 131.4-68.7 131.4 24.9 33.1 58.3 52.6 93.7 64 24.7-21.8 63.9-15.5 79.8 14.3 14.2 1 79.2 1.2 87.9 .8 3.5-6.9 8.5-12.9 14.7-17.5s13.2-7.9 20.8-9.5 15.4-1.4 22.9 .4 14.5 5.3 20.5 10.2zM205.5 187.1c0-34.7 50.8-34.7 50.8 0s-50.8 34.7-50.8 0zm116.6 0c0-34.7 50.9-34.7 50.9 0s-50.9 34.8-50.9 0zM199.5 257.8c-3.4-16.9 22.2-22.2 25.6-5.2l.1 .3c4.1 21.4 29.8 44 64.1 43.1 35.7-.9 59.3-22.2 64.1-42.8 4.5-16.1 28.6-10.4 25.5 6-5.2 22.2-31.2 62-91.5 62.9-42.6 0-80.9-27.8-87.9-64.2l0 0z\"]\n};\nvar faCreativeCommonsRemix = {\n  prefix: 'fab',\n  iconName: 'creative-commons-remix',\n  icon: [512, 512, [], \"f4ee\", \"M255.6 8C397.4 8 504 118.1 504 256 504 403.1 385.5 504 255.6 504 121.6 504 8 394.5 8 256 8 123.1 112.7 8 255.6 8zm.8 44.7c-118.2 0-203.7 97.9-203.7 203.3 0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3zM418.1 260.4l4.9 2.2 0 70c-7.2 3.6-63.4 27.5-67.3 28.8-6.5-1.8-113.7-46.8-137.3-56.2l-64.2 26.6-63.3-27.5 0-63.8 59.3-24.8c-.7-.7-.4 5-.4-70.4l67.3-29.7 151.9 62.9 0 61.6 49.1 20.3zm-70.4 81.5l0-43.8-.4 0 0-1.8-113.8-46.5 0 45.2 113.8 46.9 0-.4 .4 .4zm7.5-57.6l39.9-16.4-36.8-15.5-39 16.4 35.9 15.5zm52.3 38.1l0-43-44.3 18.6 0 43.4 44.3-19z\"]\n};\nvar faBandcamp = {\n  prefix: 'fab',\n  iconName: 'bandcamp',\n  icon: [512, 512, [], \"f2d5\", \"M256 8a248 248 0 1 0 0 496 248 248 0 1 0 0-496zm48.2 326.1l-181 0 84.7-156.1 181 0-84.7 156.1z\"]\n};\nvar faSquareWebAwesomeStroke = {\n  prefix: 'fab',\n  iconName: 'square-web-awesome-stroke',\n  icon: [448, 512, [], \"e684\", \"M64 64C46.3 64 32 78.3 32 96l0 320c0 17.7 14.3 32 32 32l320 0c17.7 0 32-14.3 32-32l0-320c0-17.7-14.3-32-32-32L64 64zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm235 81.6l53 46.4 52.2-10.4c-2.6-3.9-4.2-8.5-4.2-13.6 0-13.3 10.7-24 24-24s24 10.7 24 24c0 13-10.3 23.6-23.2 24L304.5 349.1c-5.2 11.5-16.6 18.9-29.2 18.9l-102.6 0c-12.6 0-24-7.4-29.2-18.9L87.2 224c-12.9-.4-23.2-11-23.2-24 0-13.3 10.7-24 24-24s24 10.7 24 24c0 5-1.5 9.7-4.2 13.6L160 224 213.1 177.6c-8.9-4.1-15-13.1-15-23.6 0-14.4 11.6-26 26-26s26 11.6 26 26c0 10.5-6.2 19.5-15.1 23.6z\"]\n};\nvar faVimeoV = {\n  prefix: 'fab',\n  iconName: 'vimeo-v',\n  icon: [448, 512, [], \"f27d\", \"M447.8 153.6c-2 43.6-32.4 103.3-91.4 179.1-60.9 79.2-112.4 118.8-154.6 118.8-26.1 0-48.2-24.1-66.3-72.3-35.2-129.2-50.2-204.9-79.3-204.9-3.4 0-15.1 7.1-35.2 21.1L0 168.2c51.6-45.3 100.9-95.7 131.8-98.5 34.9-3.4 56.3 20.5 64.4 71.5 28.7 181.5 41.4 208.9 93.6 126.7 18.7-29.6 28.8-52.1 30.2-67.6 4.8-45.9-35.8-42.8-63.3-31 22-72.1 64.1-107.1 126.2-105.1 45.8 1.2 67.5 31.1 64.9 89.4z\"]\n};\nvar faStrava = {\n  prefix: 'fab',\n  iconName: 'strava',\n  icon: [384, 512, [], \"f428\", \"M158.4 0L7 292 96.2 292 158.4 175.9 220.1 292 308.6 292 158.4 0zM308.6 292l-43.9 88.2-44.6-88.2-67.6 0 112.2 220 111.5-220-67.6 0z\"]\n};\nvar faUniregistry = {\n  prefix: 'fab',\n  iconName: 'uniregistry',\n  icon: [384, 512, [], \"f404\", \"M192 480c39.5 0 76.2-11.8 106.8-32.2l-213.5 0C115.8 468.2 152.5 480 192 480zM102.9 286.9l0-12.4-102.9 0 0 12.4c0 2.5 0 5 .1 7.4l103.1 0c-.2-2.4-.3-4.9-.3-7.4zm20.5 57l-114.9 0c2.6 8.5 5.8 16.8 9.6 24.8l138.3 0c-12.9-5.7-24.1-14.2-33-24.8zm-17.7-34.7l-104.4 0c.9 7.6 2.2 15 3.9 22.3l109.7 0c-4-6.9-7.2-14.4-9.2-22.3zm-2.8-69.3l-102.9 0 0 17.3 102.9 0 0-17.3zm0-173.2l-102.9 0 0 4.9 102.9 0 0-4.9zm0-34.7l-102.9 0 0 2.5 102.9 0 0-2.5zm0 69.3l-102.9 0 0 7.4 102.9 0 0-7.4zm0 104l-102.9 0 0 14.8 102.9 0 0-14.8zm0-69.3l-102.9 0 0 9.9 102.9 0 0-9.9zm0 34.6l-102.9 0 0 12.4 102.9 0 0-12.4zM269.1 331.5l109.7 0c1.8-7.3 3.1-14.7 3.9-22.3l-104.4 0c-2.1 7.9-5.2 15.4-9.2 22.3zm12-185.7l102.9 0 0-9.8-102.9 0 0 9.8zm0 37.2l102.9 0 0-12.4-102.9 0 0 12.4zm0-74.3l102.9 0 0-7.4-102.9 0 0 7.4zm0-76.7l0 2.5 102.9 0 0-2.5-102.9 0zM78.1 442.9l227.7 0c11.8-8.7 22.7-18.6 32.2-29.7l-293.1 0c9.6 11 21.4 21 33.2 29.7zm203-371.3l102.9 0 0-4.9-102.9 0 0 4.9zm0 148.5l102.9 0 0-14.8-102.9 0 0 14.8zM38.8 405.7l305.3 0c6.7-8.5 12.6-17.6 17.8-27.2L23 378.5c5.2 9.6 9.2 18.7 15.8 27.2zm188.8-37.1l139.4 0c3.7-8 5.8-16.2 8.5-24.8l-115 0c-8.8 10.7-20.1 19.2-32.9 24.8zm53.5-81.7c0 2.5-.1 5-.4 7.4l103.1 0c.1-2.5 .2-4.9 .2-7.4l0-12.4-102.9 0 0 12.4zm0-29.7l102.9 0 0-17.3-102.9 0 0 17.3z\"]\n};\nvar faCcDinersClub = {\n  prefix: 'fab',\n  iconName: 'cc-diners-club',\n  icon: [576, 512, [], \"f24c\", \"M239.7 79.9a175.8 175.8 0 1 0 0 351.6 175.8 175.8 0 1 0 0-351.6zM199.8 359.5c-41.7-15.9-71.4-56.4-71.4-103.8s29.7-87.9 71.4-104.1l0 207.9zm79.8 .3l0-208.2c41.7 16.2 71.4 56.7 71.4 104.1s-29.7 87.9-71.4 104.1zM528 32L48 32C21.5 32 0 53.5 0 80L0 432c0 26.5 21.5 48 48 48l480 0c26.5 0 48-21.5 48-48l0-352c0-26.5-21.5-48-48-48zM329.7 448l-90.3 0C133.2 448 45.6 362.5 45.6 257.8 45.6 143.2 133.2 64 239.4 64l90.3 0c105 0 200.7 79.2 200.7 193.8 0 104.7-95.7 190.2-200.7 190.2z\"]\n};\nvar faKubernetes = {\n  prefix: 'fab',\n  iconName: 'kubernetes',\n  icon: [512, 512, [], \"e857\", \"M256 316.1c3.5-.1 7.2 2 8.9 5.1L293 371.7c-3.6 1.2-7.3 2.3-11.2 3.1-21.4 4.9-42.7 3.4-62-3.2l27.9-50.4c1.7-3.1 4.9-5 8.2-5.1zm50.5-23.4l57.2 9.7c-8.4 23.5-24.4 43.9-45.8 57.5l-22.2-53.6c-2-4.7 .1-10.4 4.8-12.6 1.9-.9 4.1-1.3 6-.9zm-89.1 7.7c.5 2.1 .3 4.2-.5 6l-21.8 53.3c-20.5-13.2-36.9-32.9-45.7-57.1l56.7-9.6c5.1-.9 10.1 2.4 11.3 7.5zm58.8-41l-3.9 17.1-15.8 7.6-15.9-7.7-4-17.1 11-13.7 17.7 0 11 13.7zm-73.7-16.7c3.9 3.4 4.4 9.5 1.2 13.6-1.3 1.7-3.1 2.8-5 3.3l-55.3 16.2c-2.8-25.7 3.3-50.7 16.1-71.6l43.1 38.6zm150.7-38.5c6.4 10.4 11.2 22 14.1 34.6 2.9 12.4 3.6 24.8 2.4 36.8l-55.6-16c-5-1.4-8.1-6.7-6.9-11.7 .5-2.1 1.6-3.8 3.1-5.1l42.9-38.5zm-113.8 4.4c-.2 5.2-4.7 9.4-9.9 9.4-2.1 0-4.1-.7-5.7-1.8l-47.3-33.4c14.5-14.3 33.1-24.8 54.5-29.7 3.9-.9 7.8-1.6 11.7-2l-3.3 57.6zm30.8-57.6c25 3.1 48.1 14.4 65.8 31.7l-47.1 33.2c-4.2 3-10 2.3-13.3-1.8-1.3-1.7-2-3.6-2.1-5.6l-3.3-57.5zM254.5-1.3c5.9-.3 11.7 .9 17 3.4L455 89.7c4.7 2.3 8.9 5.6 12.2 9.7s5.6 8.8 6.8 13.9l45.3 196.9c1.2 5.1 1.2 10.4 0 15.5s-3.5 9.9-6.8 13.9L385.6 497.6c-3.3 4.1-7.5 7.4-12.2 9.6s-10 3.4-15.2 3.4l-203.6 0c-5.3 0-10.5-1.2-15.2-3.4s-8.9-5.5-12.2-9.6L.2 339.7c-.7-.9-1.4-1.8-2-2.8-2.6-3.9-4.3-8.3-5.1-12.9s-.7-9.3 .3-13.8L38.7 113.4c1.2-5.1 3.5-9.9 6.8-13.9s7.5-7.4 12.2-9.7L241.1 2.1c4.2-2 8.8-3.2 13.4-3.4zm1.8 67c-6.1 0-11 5.5-11 12.2 0 .1 0 .2 0 .3 0 .9-.1 2 0 2.8 .1 3.9 1 6.9 1.5 10.4 .9 7.7 1.7 14 1.2 19.9-.5 2.2-2.1 4.3-3.6 5.7l-.2 4.6c-6.6 .5-13.2 1.6-19.8 3.1-28.5 6.5-53.1 21.1-71.8 41-1.2-.8-3.3-2.3-4-2.8-2 .3-4 .9-6.5-.6-4.9-3.3-9.4-7.9-14.8-13.4-2.5-2.6-4.3-5.1-7.2-7.7-.7-.6-1.7-1.4-2.4-2-2.3-1.8-5-2.8-7.7-2.9-3.4-.1-6.6 1.2-8.8 3.9-3.8 4.7-2.5 12 2.7 16.2 .1 0 .1 .1 .2 .1 .7 .6 1.6 1.3 2.3 1.8 3.1 2.3 6 3.5 9.1 5.3 6.6 4.1 12 7.4 16.3 11.5 1.7 1.8 2 4.9 2.2 6.3l3.5 3.2c-18.8 28.4-27.6 63.4-22.4 99.1l-4.6 1.3c-1.2 1.6-2.9 4-4.7 4.7-5.6 1.8-12 2.4-19.7 3.3-3.6 .3-6.7 .1-10.5 .8-.8 .2-2 .4-2.9 .7l-.1 0-.2 .1c-6.5 1.6-10.7 7.5-9.3 13.4 1.3 5.9 7.7 9.4 14.2 8l.2 0c.1 0 .1-.1 .2-.1 .9-.2 2.1-.4 2.8-.6 3.8-1 6.5-2.5 9.8-3.8 7.3-2.6 13.3-4.8 19.2-5.6 2.4-.2 5 1.5 6.3 2.2l4.8-.8c11 34.1 34.1 61.7 63.3 79.1l-2 4.8c.7 1.9 1.5 4.4 1 6.2-2.1 5.5-5.8 11.4-9.9 17.9-2 3-4.1 5.3-5.9 8.8-.4 .8-1 2.1-1.4 3-2.8 6-.8 13 4.7 15.6 5.5 2.6 12.2-.1 15.2-6.2l0 0c.4-.9 1-2 1.4-2.8 1.6-3.6 2.1-6.6 3.2-10.1 2.9-7.3 4.5-14.9 8.5-19.7 1.1-1.3 2.9-1.8 4.8-2.3l2.5-4.5c25.5 9.8 54 12.4 82.5 5.9 6.5-1.5 12.8-3.4 18.8-5.7 .7 1.2 2 3.6 2.3 4.2 1.9 .6 3.9 .9 5.6 3.4 3 5.1 5 11.2 7.5 18.5 1.1 3.4 1.6 6.5 3.2 10.1 .4 .8 1 2 1.4 2.8 2.9 6.1 9.7 8.8 15.2 6.2 5.4-2.6 7.5-9.6 4.7-15.6-.4-.9-1-2.1-1.4-3-1.8-3.4-3.9-5.7-5.9-8.7-4.2-6.5-7.6-11.9-9.8-17.4-.9-2.8 .2-4.6 .8-6.5-.4-.5-1.3-3.2-1.8-4.4 30.4-17.9 52.8-46.6 63.3-79.6 1.4 .2 3.9 .7 4.7 .8 1.7-1.1 3.2-2.5 6.2-2.3 5.9 .8 11.9 3 19.2 5.6 3.4 1.3 6.1 2.8 9.8 3.8 .8 .2 1.9 .4 2.8 .6 .1 0 .1 0 .2 .1l.2 0c6.5 1.4 12.8-2.2 14.2-8s-2.8-11.8-9.3-13.4c-.9-.2-2.3-.6-3.2-.7-3.8-.7-6.9-.5-10.5-.8-7.7-.8-14-1.4-19.7-3.2-2.3-.9-4-3.7-4.8-4.8l-4.4-1.3c2.3-16.6 1.7-33.9-2.3-51.3-4-17.5-11.1-33.5-20.6-47.6 1.1-1 3.3-2.9 3.9-3.5 .2-2 0-4 2.1-6.2 4.3-4.1 9.8-7.4 16.3-11.5 3.1-1.8 6-3 9.1-5.3 .7-.5 1.7-1.3 2.4-1.9 5.3-4.2 6.5-11.4 2.7-16.2s-11.1-5.2-16.4-1c-.7 .6-1.8 1.4-2.4 2-2.9 2.5-4.8 5-7.2 7.7-5.4 5.5-9.9 10.1-14.8 13.4-2.1 1.2-5.3 .8-6.7 .7l-4.2 3c-23.8-25-56.2-41-91.2-44.1-.1-1.5-.2-4.1-.2-4.9-1.4-1.4-3.2-2.5-3.6-5.5-.5-5.9 .3-12.3 1.3-19.9 .5-3.6 1.4-6.6 1.5-10.4 0-.9 0-2.2 0-3.1 0-6.7-4.9-12.2-11-12.2z\"]\n};\nvar faPinterest = {\n  prefix: 'fab',\n  iconName: 'pinterest',\n  icon: [512, 512, [], \"f0d2\", \"M504 256c0 137-111 248-248 248-25.6 0-50.2-3.9-73.4-11.1 10.1-16.5 25.2-43.5 30.8-65 3-11.6 15.4-59 15.4-59 8.1 15.4 31.7 28.5 56.8 28.5 74.8 0 128.7-68.8 128.7-154.3 0-81.9-66.9-143.2-152.9-143.2-107 0-163.9 71.8-163.9 150.1 0 36.4 19.4 81.7 50.3 96.1 4.7 2.2 7.2 1.2 8.3-3.3 .8-3.4 5-20.3 6.9-28.1 .6-2.5 .3-4.7-1.7-7.1-10.1-12.5-18.3-35.3-18.3-56.6 0-54.7 41.4-107.6 112-107.6 60.9 0 103.6 41.5 103.6 100.9 0 67.1-33.9 113.6-78 113.6-24.3 0-42.6-20.1-36.7-44.8 7-29.5 20.5-61.3 20.5-82.6 0-19-10.2-34.9-31.4-34.9-24.9 0-44.9 25.7-44.9 60.2 0 22 7.4 36.8 7.4 36.8s-24.5 103.8-29 123.2C161.5 437.2 163.5 467.4 165.6 487 73.4 450.9 8 361.1 8 256 8 119 119 8 256 8S504 119 504 256z\"]\n};\nvar faAlgolia = {\n  prefix: 'fab',\n  iconName: 'algolia',\n  icon: [512, 512, [], \"f36c\", \"M256 0c-139.9 0-254 112.7-256 252.1-2 141.5 112.9 258.7 254.5 259.5 43.7 .3 85.9-10.4 123.3-30.7 3.6-2 4.2-7 1.1-9.7l-24-21.2c-4.9-4.3-11.8-5.5-17.8-3-26.1 11.1-54.5 16.8-83.7 16.4-114.4-1.5-206.9-96.6-205.1-211 1.8-112.9 94.3-204.2 207.7-204.2l207.7 0 0 369-117.8-104.7c-3.8-3.4-9.7-2.7-12.7 1.3-18.9 25-49.7 40.6-83.9 38.2-47.5-3.3-85.9-41.5-89.5-88.9-4.2-56.6 40.6-103.9 96.3-103.9 50.4 0 91.9 38.8 96.2 88 .4 4.4 2.4 8.5 5.7 11.4l30.7 27.2c3.5 3.1 9 1.2 9.9-3.4 2.2-11.8 3-24.2 2.1-36.8-4.9-72-63.3-130-135.4-134.4-82.7-5.1-151.8 59.5-154 140.6-2.1 78.9 62.6 147 141.6 148.7 33 .7 63.6-9.6 88.3-27.6L495 509.4c6.6 5.8 17 1.2 17-7.7l0-492c0-5.4-4.4-9.7-9.7-9.7L256 0z\"]\n};\nvar faStackpath = {\n  prefix: 'fab',\n  iconName: 'stackpath',\n  icon: [448, 512, [], \"f842\", \"M244.6 232.4c0 8.5-4.3 20.5-21.3 20.5l-19.6 0 0-41.5 19.6 0c17.1 0 21.3 12.4 21.3 21zM448 32l0 448-448 0 0-448 448 0zM151.3 287.8c0-21.2-12.1-34.5-46.7-44.8-20.6-7.4-26-10.9-26-18.6s7-14.6 20.4-14.6c14.1 0 20.8 8.4 20.8 18.4l30.7 0 .2-.6c.5-19.6-15.1-41.6-51.1-41.6-23.4 0-52.6 10.8-52.6 38.3 0 19.4 9.2 31.3 50.7 44.4 17.3 6.2 21.9 10.4 21.9 19.5 0 15.2-19.1 14.2-19.5 14.2-20.4 0-25.7-9.1-25.7-21.9l-30.8 0-.2 .6c-.7 31.3 28.4 45.2 56.6 45.2 30 0 51.1-13.6 51.1-38.3zm125.4-55.6c0-25.3-18.4-45.5-53.4-45.5l-51.8 0 0 138.2 32.2 0 0-47.4 19.6 0c30.3 0 53.4-16 53.4-45.4zM297.9 325l49.1-138.2-31.1 0-47.9 138.2 29.9 0zM404.5 186.8l-31.1 0-47.9 138.2 29.9 0 49.1-138.2z\"]\n};\nvar faOctopusDeploy = {\n  prefix: 'fab',\n  iconName: 'octopus-deploy',\n  icon: [512, 512, [], \"e082\", \"M455.7 349.2c-45.9-39.1-36.7-77.9-16.1-128.1 35.7-87-23.5-186.9-109.6-212.8-92.9-27.9-195.7 16-230.3 108.8-8.7 23.5-12.5 48.5-11 73.5 1.7 29.5 14.7 53 24.1 80.3 17.2 50.2-28.1 92.7-66.7 117.6-46.8 30.2-36.3 39.9-8.4 41.9 23.4 1.7 44.5-4.5 65.3-15 9.2-4.6 40.7-18.9 45.1-28.6-12.2 26.6-37 72.7-21.5 102.1 19.1 36.2 67.1-31.8 76.7-45.8 8.6-12.6 43-81.3 63.6-46.9 18.9 31.4 8.6 76.4 35.7 104.6 32.9 34.2 51.2-18.3 51.4-44.2 .2-16.4-6.1-95.9 29.9-59.9 21.4 21.4 52.9 71.2 88.6 67 38.7-4.5-22.1-68-28.3-78.7 5.4 4.3 53.7 34.1 53.8 9.5 .1-18.8-30.1-34.7-42.5-45.3z\"]\n};\nvar faYammer = {\n  prefix: 'fab',\n  iconName: 'yammer',\n  icon: [512, 512, [], \"f840\", \"M500.7 159.5c-.4-1.8-1.2-3.4-2.3-4.8s-2.5-2.6-4.1-3.5c-3.1-1.6-6.7-2-10.1-1.1l-26.4 6.6 0-.2-22.3 5.8-1.2 .3-.6-2.2c-15.5-58.3-45-111.9-86.1-156.2-2.6-2.7-6.1-4.2-9.8-4.3s-7.3 1.3-10 3.8l-102.9 102.7-199.9 0c-6.6 0-12.9 2.6-17.6 7.3S0 124.8 0 131.4l0 249C0 387 2.6 393.3 7.3 398s11 7.3 17.6 7.3L225 405.3 328.1 508c2.6 2.6 6 4 9.7 4s7.1-1.4 9.7-4c.1-.1 .2-.3 .4-.4 29.3-31.5 52.8-67.8 69.6-107.4 6.9-16.5 12.7-33.5 17.3-50.8l0 0 20.4 5.3 0-.1 28.3 7.3c.9 .2 1.7 .4 2.6 .5 1.4 .2 2.8 .2 4.1-.1 2.5-.5 4.8-1.7 6.7-3.4s3.2-4 3.8-6.5c15.2-63.4 15.2-129.6 .1-193l0 0zM337.1 24.7l0 0 0 0 0 0zM226.9 189.8l-52.6 91.3c-1 1.7-1.5 3.7-1.5 5.7l0 46.2c0 5.8-2.3 11.4-6.5 15.6s-9.7 6.4-15.6 6.4l-3.4 0c-5.8 0-11.4-2.3-15.6-6.4s-6.5-9.7-6.5-15.6l0-45.7c0-1.9-.5-3.8-1.4-5.5L72.3 189.6c-1.9-3.4-2.8-7.1-2.8-11s1.1-7.6 3-10.9 4.7-6.1 8.1-8 7.1-2.9 11-2.9l3.3 0c4 0 8 1.1 11.5 3.2s6.3 5.1 8.1 8.7l36.4 70.3 37.5-70.5c1.8-3.5 4.6-6.4 7.9-8.4s7.2-3.2 11.1-3.2 7.8 .9 11.2 2.8 6.3 4.7 8.2 8.1c2 3.3 3 7.1 3 11s-1 7.7-3 11l0 0zM337.1 24.7c35.9 40.6 61.9 89 75.8 141.3l.6 2-114.1 29.6 0-66.1c0-6.6-2.7-12.9-7.3-17.6s-11-7.3-17.6-7.3l-19.4 0 82.1-81.8zM397.6 392l0 0 0 0c-14.7 34.8-35.1 67-60.2 95.2l-82.2-81.9 19.2 0c6.6 0 12.9-2.6 17.6-7.3s7.3-11 7.3-17.6l0-66.2 114.6 29.9c-4.4 16.3-9.8 32.3-16.3 47.9l0 0zm84-52.4l0 0-50.6-13.1-131.7-34.3 0-72.5 119.7-31 4.5-1.2c29.9-7.7 49.2-12.8 58.1-15.1 12 55.1 12 112.1 0 167.2z\"]\n};\nvar faModx = {\n  prefix: 'fab',\n  iconName: 'modx',\n  icon: [448, 512, [], \"f285\", \"M356 241.8l36.7 23.7 0 214.5-133-83.8 96.3-154.4zM440 75l-213.7 0-23 37.8 153.5 96.5 83.2-134.3zM351 217.8l-295.8-185.8 0 214.5 46 29 249.8-57.7zM97 294.2L8 437 221.7 437 346.7 236.5 97 294.2z\"]\n};\nvar faSquareThreads = {\n  prefix: 'fab',\n  iconName: 'square-threads',\n  icon: [448, 512, [], \"e619\", \"M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM237.8 96.3c-99 0-166.3 70.2-166.3 172.1 0 93.2 65.9 147.3 144.5 147.3 64.9 0 130.6-37.9 130.6-102.7 0-33.9-19.4-56.3-47.5-69-.4-46.4-25.6-74.3-68-74.3-28.3 0-52.2 12.8-64.7 33.3L193.8 222c7.1-11.2 16.9-20.5 35-20.5 20.3 0 30.8 11.3 33.8 32.3-9.8-1.5-19.6-2.3-29.8-2.3-54.9 0-80.7 24.8-80.8 57.7s25.8 53.1 63.9 53.1c41.8 0 66.7-28.2 77-63 10.6 4.8 17.9 16 17.9 32.9 0 45.1-52 69.6-96.1 69.6-65 0-107.5-42.7-107.5-112.1 0-85.1 56.2-139.6 131.7-139.6 50.7 0 75.8 22.2 92.8 52.1l28-19.6c-18.5-38.7-59.9-66.3-122-66.3zm-2 167.2c9 0 17.8 .6 25.7 2.3-5.6 25.6-22.2 42.8-46.7 42.8-14.3 0-26.9-6.8-26.9-19.3 0-19.7 24.2-25.7 48-25.7z\"]\n};\nvar faOldRepublic = {\n  prefix: 'fab',\n  iconName: 'old-republic',\n  icon: [512, 512, [], \"f510\", \"M243.8 10.2c7.5-.3 15-.3 22.5-.1 3.6 .1 7.2 .4 10.8 .7 4.9 .3 9.8 1 14.7 1.6 2.9 .4 5.8 1 8.7 1.5 7.9 1.3 15.7 3.3 23.4 5.4 12.2 3.5 24.2 7.9 35.8 13.2 26.6 12.2 50.9 29.2 71.6 49.9 20 20.1 36.7 43.5 48.9 69.2 1.1 2.6 2.4 5.1 3.5 7.7 2.8 6.4 5.4 13 7.6 19.6 4.1 12.3 7.3 25 9.4 37.8 .6 3.1 1 6.3 1.4 9.5 .5 3.8 .9 7.7 1.2 11.6 .8 8.3 .8 16.7 .8 25.1-.1 5-.3 9.9-.7 14.9-.2 3.4-.5 6.8-1 10.1-.4 2.7-.6 5.5-1.1 8.2-.9 5.1-1.7 10.3-2.9 15.4-4.1 18.5-10.3 36.6-18.5 53.6-15.8 32.8-38.8 62.2-67.1 85.1-17.3 14.1-36.4 25.9-56.9 34.9-6.2 2.7-12.5 5.3-18.9 7.4-3.5 1.2-7 2.4-10.6 3.4-6.6 1.9-13.3 3.6-20 5-4.7 .9-9.3 1.7-14 2.5-5.3 .7-10.5 1.4-15.8 1.7-6.7 .7-13.4 .8-20.1 .8-6.8 0-13.6-.1-20.4-.8-3.3-.2-6.6-.5-9.8-1-2.7-.4-5.5-.6-8.2-1.1-4.1-.7-8.2-1.4-12.4-2.2-4.2-.9-8.5-1.9-12.7-3-8.6-2.2-17.1-5-25.4-8.1-10.5-4.1-20.8-8.7-30.6-14.2-2.1-1.2-4.3-2.3-6.4-3.6-11.2-6.6-21.9-14.1-31.9-22.3-34.7-28.4-61.4-66.4-76.4-108.7-3.1-8.7-5.7-17.6-7.8-26.7-1.5-6.2-2.5-12.4-3.6-18.7-.4-2.3-.6-4.7-1-7.1-.6-4-.8-8-1.2-11.9-.8-9.5-.7-19-.5-28.5 .1-3.5 .3-7 .7-10.5 .3-3.2 .5-6.4 .9-9.5 .4-2.8 .7-5.6 1.2-8.4 .7-3.9 1.3-7.9 2.1-11.8 3.4-16.5 8.5-32.7 15.3-48.2 1.2-2.9 2.6-5.7 3.9-8.6 8.1-16.7 17.9-32.6 29.5-47.1 20-25.4 45.1-46.7 73.3-62.5 7.5-4.2 15.2-8 23.1-11.4 15.8-6.9 32.4-12 49.3-15.4 3.5-.7 7-1.2 10.6-1.8 2.6-.5 5.3-.7 7.9-1.1 3.5-.5 7.1-.7 10.6-1 2.5-.2 4.9-.4 7.4-.5zm8.6 24.4c-9.2 .1-18.4 1-27.6 2.2-7.3 1.1-14.5 2.6-21.7 4.3-13.9 3.5-27.5 8.3-40.5 14.4-10.5 5-20.6 10.7-30.2 17.2-4.2 2.9-8.4 5.8-12.3 9-5.1 4-10 8.2-14.7 12.6-2.5 2.2-4.8 4.7-7.2 7.1-28.2 28.8-48.4 65.4-57.5 104.7-2 8.4-3.5 17-4.4 25.6-1.1 8.9-1.4 17.9-1.4 26.8 .1 7.1 .4 14.3 1.2 21.4 .6 7.1 1.9 14.2 3.2 21.2 1.1 4.6 2 9.3 3.3 13.9 6.3 23.4 16.5 45.7 30.1 65.8 8.6 13 18.8 24.9 30 35.8 16.3 15.8 35 29 55.3 39.2 7.3 3.5 14.7 6.9 22.3 9.6 5 1.8 10.1 3.6 15.2 5 11.3 3.2 22.8 5.6 34.4 7.1 2.9 .3 5.8 .6 8.7 .9 13.8 1.1 27.7 1 41.5-.4 4.4-.6 8.9-1 13.3-1.8 3.6-.7 7.3-1.2 10.9-2.1 4.1-1 8.3-1.9 12.4-3.1 26.5-7.3 51.6-19.7 73.6-36.2 15.8-11.8 30-25.8 42.1-41.3 3.3-4 6.2-8.3 9.1-12.6 3.4-5.1 6.6-10.2 9.6-15.5 2.4-4.4 4.7-8.9 7-13.4 5.7-12.1 10.3-24.6 13.8-37.5 2.6-10 4.7-20.2 5.9-30.4 1.8-13.5 1.9-27.1 1.3-40.7-.3-3.9-.7-7.8-1-11.7-2.2-19.1-6.8-37.9-13.8-55.8-6-15.1-13.5-29.6-22.6-43.1-12.7-18.8-28.2-35.7-46-49.8-25-20-54.5-34.5-85.6-42.1-7.8-1.9-15.7-3.3-23.6-4.4-3.9-.6-7.8-.8-11.8-1.2-7.4-.6-14.8-.7-22.2-.6zM147.3 83.5c13.3-8.9 28.1-15.4 43.3-20.2-3.2 1.8-6.4 3.4-9.5 5.3-11.2 6.7-21.5 14.9-30.4 24.5-6.8 7.4-12.8 15.7-17 24.9-3.3 6.9-5.6 14.2-6.9 21.7-.9 4.8-1.3 9.8-1.2 14.8 .1 13.7 4.4 27.1 11.3 38.8 5.9 10.2 13.6 19.3 22.4 27.3 4.9 4.4 10.2 8.1 15 12.6 2.3 2.2 4.5 4.4 6.4 6.9 2.6 3.3 4.9 7 6 11.1 .9 3 .7 6.2 .7 9.3 0 4.1 0 8.2 0 12.3 .1 3.5 0 7.1 .1 10.6 .1 2.4 0 4.8 .1 7.1 .2 5.8 .1 11.5 .1 17.3 .1 2.9 0 5.8 .1 8.7 0 1.6 .1 3.3 0 4.9-.9 .1-1.8 .2-2.7 .2-11 0-21.9-2.6-32-6.9-6-2.7-11.8-5.9-17.1-9.8-5.8-4.2-11.1-9-15.8-14.3-6.5-7.2-12-15.4-16.6-23.9-1.1-2-2.2-4-3.2-6.1-1.2-2.6-2.6-5.1-3.7-7.8-4-9.7-6.6-19.9-8.1-30.3-.5-4.4-1.1-8.9-1.2-13.3-.7-15.7 .8-31.6 4.7-46.8 2.1-8.2 4.8-16.2 8.3-23.8 6.3-14.2 15.3-27.2 26.3-38.2 6.3-6.2 13.1-11.8 20.5-16.7zM322.7 63.4c2.7 .7 5.4 1.7 8.1 2.7 6.4 2.3 12.7 4.8 18.7 8 13.1 6.4 25.3 14.8 35.8 25 10.2 10 18.7 21.6 25.1 34.3 1.3 2.7 2.6 5.5 3.8 8.3 6.3 15.1 10 31.3 11.2 47.6 .4 4.5 .4 9.1 .5 13.6 .1 11.6-1.5 23.3-4.3 34.5-2 7.3-4.3 14.5-7.9 21.2-3.2 6.6-6.7 13.2-10.8 19.2-6.9 10.5-15.6 19.9-25.8 27.2-10.5 7.6-22.6 13-35.4 15.4-3.5 .7-7.1 1.1-10.7 1.2-1.8 .1-3.7 .2-5.6-.1-.3-2.1 0-4.3 0-6.5 0-3.7 .1-7.4 .1-11.2 .2-7 0-14.1 .2-21.1 0-2.4 0-4.8 0-7.1 .2-5.1 0-10.1 .1-15.2 .1-3-.2-6 .5-9 .7-2.5 1.8-4.9 3.1-7.1 4.5-7.3 11.1-13 17.7-18.3 5.4-4.2 10.5-8.8 15-13.8 7.7-8.4 14.2-17.9 18.8-28.3 2.5-5.9 4.5-12.1 5.5-18.5 .9-4.4 1.1-8.8 1-13.3 0-7.8-1.4-15.6-3.6-23.2-1.8-5.7-4.3-11.2-7.1-16.4-3.9-6.9-8.6-13.3-14-19.2-9.9-10.8-21.8-19.9-34.6-27.1-1.8-1-3.8-1.8-5.6-3zM221.9 121.9c1-1.2 2-2.3 3.1-3.4-.6 .9-1.3 1.8-2 2.7-3.1 3.9-5.5 8.3-7 13.1-.9 3.3-1.7 6.6-1.7 10-.1 2.5-.1 5.1 .3 7.6 1.1 7.6 4.3 14.9 8.8 21.1 2 2.7 4.2 5.3 6.9 7.3 1.6 1.3 3.5 2.1 5.3 3 3.1 1.7 6.3 3.2 9.1 5.5 2.7 2.1 4.6 5.3 4.4 8.8 0 73.7 0 147.3 0 221 0 1.4-.1 2.7 0 4 .1 1.5 .8 2.8 1.5 4.1 .9 1.7 1.8 3.3 3.2 4.6 .9 .8 2 1.4 3.2 1.2 1.5-.2 2.7-1.4 3.4-2.6 1-1.5 1.7-3.2 2.3-4.9 .8-2.1 .4-4.4 .5-6.6 .1-4 0-8.1 .1-12.1 0-5.9 0-11.8 .1-17.7 .1-3.6 0-7.2 .1-10.9 .2-4 0-8.1 .1-12.1 0-6 0-12 .1-18 .1-3.6 0-7.2 .1-10.9 .1-3.9 0-7.9 .1-11.8 0-6 0-12 .1-18 .2-3.9 0-7.9 .2-11.8 .3 1.4 .1 2.9 .2 4.4 .2 3.6 .4 7.2 .8 10.8 .3 3.4 .4 6.9 .9 10.3 .4 3.1 .5 6.2 1 9.3 .6 4.1 .9 8.2 1.5 12.3 1.5 9 2.8 18.1 5.1 27 1.1 4.8 2.4 9.6 4 14.3 2.5 7.9 5.7 15.7 10.3 22.6 1.7 2.6 3.9 5 6.1 7.2 .3 .2 .6 .5 .9 .7 .6 .3 1.3-.1 1.7-.6 .7-.9 1.2-1.9 1.7-2.9 4.1-7.8 8.2-15.6 12.3-23.3 .7-1.3 1.4-2.6 2.6-3.6 1.8-1.6 3.8-2.7 6-3.6 2.9-1.2 5.9-2.2 9-2.4 6.6-.6 13.1 .7 19.6 1.8 3.7 .6 7.4 1.2 11.1 1.4 3.7 .1 7.5 .1 11.2-.3 8.6-.9 17-3 24.9-6.2 5.3-2.2 10.5-4.8 15.3-7.9 11.5-7.2 21.5-16.6 30-27 1.2-1.4 2.2-2.9 3.5-4.3-1.2 3.2-2.7 6.4-4.2 9.5-1.3 2.9-2.8 5.6-4.3 8.4-5.2 9.6-11 18.9-17.8 27.5-4 5.2-8.5 10.1-13.3 14.6-6.6 6.1-14.1 11.4-22.4 14.8-8.2 3.4-17.3 4.6-26.1 3.3-3.6-.6-7-1.7-10.4-2.9-2.8-1-5.4-2.4-8-3.7-3.4-1.7-6.6-3.8-9.7-6.1 2.7 3.1 5.7 5.9 8.7 8.6 4.3 3.8 8.7 7.3 13.6 10.2 4 2.5 8.3 4.4 12.8 5.5 1.5 .4 3 .5 4.5 .6-1.3 1.1-2.6 2-4 3-9.6 6.5-20 11.9-30.7 16.4-20.9 8.7-43.2 14-65.7 15.3-4.7 .2-9.3 .4-14 .4-5-.1-10-.1-14.9-.7-11.2-.8-22.3-2.7-33.2-5.4-10.4-2.7-20.6-6.1-30.3-10.6-8.7-3.9-17.1-8.4-25-13.8-1.8-1.3-3.7-2.5-5.4-4.1 6.6-1.2 13-3.4 19-6.5 5.7-2.9 11-6.7 15.6-11.1 2.2-2.2 4.3-4.6 6.2-7.1-3.4 2.1-6.9 4.2-10.6 5.8-4.4 2.2-9.1 3.8-13.8 5-5.7 1.5-11.7 1.7-17.6 1.1-8.1-1-15.9-4.3-22.5-9-4.3-2.9-8.2-6.4-12-10.1-9.9-10.2-18.2-21.8-25.7-33.9-3.9-6.3-7.5-12.7-11.1-19.2-1-2-2.1-4.1-3.2-6.1 2.8 2.9 5.6 6 8.4 8.9 19.2 19.2 37.6 32.3 53.7 35.5 3.1 .7 6.3 .5 9.5 .8 2.8 .3 5.6 .2 8.3 .3 5 .1 10.1 0 15.2-.2 3.6-.2 7.3-.7 10.9-1.1 2.1-.2 4.1-.7 6.1-1.2 3.9-1 8.1-1 11.8 .6 4.8 1.8 8.4 5.6 11.4 9.7 2.2 3 4.1 6.2 5.7 9.6 1.2 2.4 2.5 4.8 3.6 7.3 1 2.2 2.2 4.4 3.4 6.5 .7 1 1.4 2.2 2.6 2.6 1.1-.8 1.7-1.9 2.3-3 2.1-4.2 3.4-8.6 4.9-13 2-6.6 3.8-13.3 5.2-20 2.2-9.3 3.2-18.7 4.5-28.1 .6-4 .8-8 1.3-12 .9-10.6 1.9-21.3 2.2-31.9 .1-1.9 .2-3.7 .3-5.6 0-4.3 .2-8.7 .2-13 0-2.4 0-4.8 0-7.1 0-5.1-.2-10.1-.2-15.2-.2-6.6-.7-13.2-1.3-19.8-.7-5.9-1.5-11.8-3.1-17.5-2-7.7-5.6-15-9.8-21.8-3.2-5.1-6.8-9.9-11.1-14-3.9-3.9-8.6-7.1-13.9-8.4-1.5-.4-3.1-.4-4.6-.6 .1-3 .7-5.9 1.3-8.8 1.6-7.7 3.8-15.3 6.8-22.6 1.5-4 3.4-7.9 5.4-11.7 3.4-6.6 7.6-12.8 12.5-18.5zm31.3 1.7c.4-.1 .7-.1 1.1-.2 .2 1.8 .1 3.6 .1 5.4l0 38.1c0 1.7 .1 3.5-.2 5.2-.4 0-.7 0-1.1 0-.9-3.8-1.7-7.6-2.6-11.3-.4-1.5-.6-3.1-1.1-4.6-1.7-.2-3.4-.2-5.2-.2-5.1 0-10.1 0-15.2 0-1.7 0-3.3 .1-5 0 0-.4-.3-.9 .2-1.2 1.3-.7 2.7-.9 4.1-1.4 3.4-1.1 6.9-2.2 10.3-3.3 1.4-.5 2.9-.7 4.2-1.5 0-.6 0-1.1 0-1.7-1.2-.6-2.5-.9-3.8-1.3-3.1-1-6.3-2-9.4-3-1.8-.6-3.7-1-5.4-1.8 0-.4-.1-.7-.1-1.1 5.1-.2 10.2 .1 15.3-.1 3.4-.1 6.7 .1 10.1-.1 .1-.4 .3-.8 .4-1.2 1.1-4.9 2.3-9.8 3.4-14.7zm6-.2c.4 0 .7 .1 1.1 .2 1 3.8 1.7 7.8 2.7 11.6 .4 1.4 .6 2.9 1 4.3 2.5 .2 5.1 0 7.6 0 5.2 .1 10.3 .1 15.5 .1 .8 0 1.5 0 2.3 .1 0 .4-.1 .7-.1 1.1-1.8 .8-3.8 1.2-5.7 1.9-3.7 1.2-7.5 2.4-11.2 3.6-.6 .2-1.1 .4-1.7 .6-.2 .6-.2 1.1-.1 1.7 .9 .5 1.8 .8 2.8 1.1 4.9 1.5 9.7 3.1 14.6 4.6 .4 .1 .8 .3 1.1 .5 .4 .3 .2 .8 .2 1.2-1.7 .1-3.3 0-5 0-5.2 0-10.3 0-15.5 0-1.6 0-3.2 0-4.8 .2-.5 1.7-.7 3.4-1.2 5.1-.9 3.6-1.5 7.2-2.5 10.8-.4 0-.7 0-1.1 .1-.3-1.7-.2-3.5-.2-5.2l0-38.1c0-1.8-.1-3.6 .1-5.4zm-186 45c1.1-2.2 2.1-4.4 3.4-6.5-1.8 7.6-2.9 15.3-3.6 23-.8 7.7-.8 15.5-.5 23.2 1.1 19.9 5.5 39.8 14.2 57.9 3 6 6.4 11.8 10.5 17.1 6.1 7.5 12.5 14.8 19.8 21.1 4.8 4.1 10 7.8 15.5 10.8 3.3 1.7 6.5 3.4 9.9 4.7 5 2 10.2 3.6 15.4 4.9 3.8 1 7.8 1.4 11.5 2.7 5 1.6 9.5 4.6 13 8.4 4.9 5.2 8.1 11.9 10.2 18.7 1 2.9 1.6 5.9 2.2 8.9 .2 .8 .2 1.5 .2 2.3-6.5 2.8-13.3 5.1-20.3 6.2-4.1 .8-8.3 1-12.5 1.1-10.2 .2-20.5-1.8-30.1-5.1-3.7-1.4-7.5-2.9-11-4.7-8.1-3.8-15.6-8.7-22.5-14.5-2.9-2.6-5.8-5.1-8.4-8-9.2-9.8-16.3-21.4-21.8-33.7-2.4-5.5-4.6-11.2-6.4-17-1.2-3.9-2.4-7.9-3.3-11.9-.7-2.9-1.2-5.9-1.9-8.9-.5-2.1-.7-4.3-1-6.5-.8-5.4-1.3-10.9-1.3-16.4 .1-6.2 .2-12.4 1.1-18.5 .4-2.9 .7-5.7 1.2-8.6 1-5.7 2.1-11.4 3.7-16.9 3.1-11.6 7.5-23 12.7-33.8zm363.7-6.4c1.1 1.7 1.9 3.5 2.8 5.3 2.1 4.5 4.2 8.9 6 13.5 7.6 18.8 12.3 38.8 13 59 0 1.8 .1 3.5 .1 5.3 .1 9.6-1.3 19.1-3.2 28.5-.7 3.6-1.5 7.2-2.6 10.7-4 14.7-10 29-18.4 41.8-8.2 12.6-19 23.5-31.8 31.4-5.7 3.6-11.8 6.6-18 9.2-5.8 2.2-11.7 4-17.8 5.1-6.4 1-12.9 1.5-19.4 1.2-7.9-.5-15.8-2.1-23.2-4.8-1.9-.8-3.9-1.5-5.8-2.3-.2-1.5 .2-3 .5-4.5 1.2-5.7 3-11.4 5.7-16.6 2.4-4.5 5.5-8.7 9.5-11.9 2.4-2.1 5.2-3.6 8.2-4.8 3.6-1.5 7.5-2 11.2-2.8 7.2-1.7 14.4-3.9 21.2-7 10.3-4.7 19.7-11.4 27.6-19.5 1.6-1.6 3.2-3.2 4.7-4.9 3.4-3.8 6.7-7.6 9.8-11.5 7.5-10.1 12.8-21.6 16.7-33.5 1.6-5.3 3.2-10.6 4.2-16.1 .6-2.9 1-5.8 1.5-8.7 .9-6.1 1.6-12.2 1.7-18.4 .1-6.6 .1-13.3-.5-19.9-.7-8-1.9-16-3.7-23.8z\"]\n};\nvar faSuse = {\n  prefix: 'fab',\n  iconName: 'suse',\n  icon: [640, 512, [], \"f7d6\", \"M604.5 210a10.4 10.4 0 1 1 -11.4-17.4 10.4 10.4 0 1 1 11.4 17.4zM621 187.2a38.5 38.5 0 1 1 -75 17.6 38.5 38.5 0 1 1 75-17.6zM433.7 336.7c3.2 4.6 5.8 9 7.3 13.4 1 3.1 2.4 7.3 5.5 8.9 .2 .1 .3 .2 .5 .2 5.7 2.1 20.3 1.7 20.3 1.7l26.8 0c2.3 0 22.4 0 21.9-2.3-2.4-10.8-14.9-12.7-24.4-18.3-8.7-5.2-17-11.1-20.8-21.3-2-5.2-.8-17.4 2.6-21.8 2.5-3.2 6.1-5.3 10-6.2 4.3-.9 8.8-.1 13.1 .3 5.3 .5 10.6 1.5 15.9 2.2 10.3 1.3 20.6 1.9 31 1.6 17.1-.5 34.2-3.2 50.4-8.7 11.3-3.8 22.4-8.9 32-16.1 10.9-8.1 8.1-7.4-3-6.2-13.3 1.4-26.6 1.6-39.9 .8-12.4-.7-24.7-2.2-35.9-7.9-8.8-4.6-16.4-9.1-23.4-16.2-1-1.1-1.7-4.2 .2-6.2 1.9-1.9 5.8-.8 7 .2 12.2 10.2 30.5 18.6 49.3 19.5 10.2 .5 20.1 .7 30.4 .3 5.1-.2 12.8-.2 17.9-.3 2.6 0 9.8 .7 11.2-2.1 .4-.8 .4-1.8 .3-2.7-1.5-40.9-4.5-86.9-47.3-106.5-31.9-14.6-79.7-37.2-99.9-46.6-4.7-2.2-10.2 1.3-10.2 6.5 0 13.6 .7 33.3 .7 51.1-9.7-9.9-26-16.1-38.4-21.8-14.1-6.5-28.7-12-43.5-16.6-29.8-9.2-60.7-14.9-91.7-18-35.2-3.5-71-1.8-105.7 5.3-56.9 12.2-113.1 39.7-155.7 79.8-26.1 24.6-46.6 59.7-48 95.2-2 50.3 12.1 77.3 38 105.2 41.3 44.4 130.2 50.6 166.2-2 16.2-23.7 19.7-55.8 8-82-11.8-26.2-38.8-45.1-67.4-46-22.2-.7-45.9 10.6-54.5 31.1-6.5 15.7-2.8 35.1 9 47.3 4.6 4.8 10.9 8.7 17.7 7.1 4-.9 7.4-3.9 8-8 .9-6-4.4-9.9-7.6-14.5-5.8-8.3-4.7-20.9 2.7-27.9 6.2-6 15.3-7.8 23.9-7.7 8 0 16.2 1.4 23.1 5.5 9.7 5.7 16.2 16.2 18.4 27.2 6.7 33-20.2 59.9-56.6 62-18.6 1.1-37.6-3.8-52.1-15.5-36.9-29.8-45.9-90.3-3.8-122.7 40-30.7 90.4-22.8 120.2-6.8 23.8 12.8 41.5 33.6 55 56.7 6.7 11.6 12.5 23.7 17.8 36.1 5.1 11.8 9.9 23.8 20.2 32.5 6.8 5.8 15.2 5.6 24.1 5.6l50.8 0c6.9 0 5.2-4.6 2.2-7.7-6.7-6.9-16.4-8.4-25.4-10.9-20.5-5.6-18.4-32.8-12.7-32.8 18.3 0 18.9 .6 34.9 .3 23.2-.3 30.2-1.7 48.3 5 9.7 3.6 19 13.1 25.1 21.7z\"]\n};\nvar faAppStoreIos = {\n  prefix: 'fab',\n  iconName: 'app-store-ios',\n  icon: [448, 512, [], \"f370\", \"M400 32L48 32C21.5 32 0 53.5 0 80L0 432c0 26.5 21.5 48 48 48l352 0c26.5 0 48-21.5 48-48l0-352c0-26.5-21.5-48-48-48zM127 384.5c-5.5 9.6-17.8 12.8-27.3 7.3-9.6-5.5-12.8-17.8-7.3-27.3l14.3-24.7c16.1-4.9 29.3-1.1 39.6 11.4L127 384.5zm138.9-53.9L84 330.6c-11 0-20-9-20-20s9-20 20-20l51 0 65.4-113.2-20.5-35.4c-5.5-9.6-2.2-21.8 7.3-27.3 9.6-5.5 21.8-2.2 27.3 7.3l8.9 15.4 8.9-15.4c5.5-9.6 17.8-12.8 27.3-7.3 9.6 5.5 12.8 17.8 7.3 27.3l-85.8 148.6 62.1 0c20.2 0 31.5 23.7 22.7 40zm98.1 0l-29 0 19.6 33.9c5.5 9.6 2.2 21.8-7.3 27.3-9.6 5.5-21.8 2.2-27.3-7.3-32.9-56.9-57.5-99.7-74-128.1-16.7-29-4.8-58 7.1-67.8 13.1 22.7 32.7 56.7 58.9 102l52 0c11 0 20 9 20 20 0 11.1-9 20-20 20z\"]\n};\nvar faUltralyticsYolo = {\n  prefix: 'fab',\n  iconName: 'ultralytics-yolo',\n  icon: [512, 512, [], \"e86f\", \"M383.5 10.8c61.8-.2 112.3 50.6 112.3 112.9-.2 2.7 0 0-.1 3.3l.3 .3c-1.5 89.9-53 168.4-127.4 208.5l0 52.8c0 62.6-51.1 113.5-113.7 112.9-62-.6-111.4-52.2-111.4-114.3l0-51.2c-40.7-21.9-74.5-55.2-97-95.6 23.2 16.5 51.7 26 82 25.9 78.6-.2 142.2-64 142.3-142.5 .1-62.3 50.5-112.7 112.9-112.9zm-255 225.8a112.9 112.9 0 1 1 0-225.8 112.9 112.9 0 1 1 0 225.8z\"]\n};\nvar faSquareDribbble = {\n  prefix: 'fab',\n  iconName: 'square-dribbble',\n  icon: [448, 512, [\"dribbble-square\"], \"f397\", \"M165.9 132.5c-38.3 18-66.8 53.3-75.7 95.7 6.1 .1 62.4 .3 126.4-16.7-22.7-40.2-47.1-74.1-50.7-79zm26.1-9.1c3.8 5.1 28.6 38.9 51 80 48.6-18.3 69.1-45.9 71.6-49.4-33.6-29.8-79.3-41.1-122.6-30.6zM277.4 382c-2-12-10-53.8-29.2-103.6-55.1 18.8-93.8 56.4-108.1 85.6 40.5 31.6 93.3 36.7 137.3 18zM227.8 232.6C159.6 253 93.4 252.2 87.4 252l0 4.2c0 35.1 13.3 67.1 35.1 91.4 22.2-37.9 67.1-77.9 116.5-91.8-3.4-7.8-7.2-15.5-11.1-23.2l-.1 0zm72.5 136.9c30.7-20.7 52.5-53.6 58.6-91.6-4.6-1.5-42.3-12.7-85.1-5.8 17.9 49.1 25.1 89.1 26.5 97.4zm-34.8-119c45.5-5.7 90.7 3.4 95.2 4.4-.3-32.3-11.8-61.9-30.9-85.1-2.9 3.9-25.8 33.2-76.3 53.9 4.8 9.8 8.3 17.8 12 26.8zM384 32L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64zM224 96a160 160 0 1 1 0 320 160 160 0 1 1 0-320z\"]\n};\nvar faDribbbleSquare = faSquareDribbble;\nvar faUikit = {\n  prefix: 'fab',\n  iconName: 'uikit',\n  icon: [448, 512, [], \"f403\", \"M443.9 128l0 256-225.9 128-218-128 0-214.3 87.6 45.1 0 117 133.5 75.5 135.8-75.5 0-151-101.1-57.6 87.6-53.1 100.5 57.9zM308.6 49.1l-84.8-49.1-88.6 54.8 86 47.3 87.4-53z\"]\n};\nvar faSuperpowers = {\n  prefix: 'fab',\n  iconName: 'superpowers',\n  icon: [448, 512, [], \"f2dd\", \"M448 32c-83.3 11-166.8 22-250 33-92 12.5-163.3 86.7-169 180-3.3 55.5 18 109.5 57.8 148.2L0 480c83.3-11 166.5-22 249.8-33 91.8-12.5 163.3-86.8 168.7-179.8 3.5-55.5-18-109.5-57.7-148.2L448 32zM368.3 264.3c-4.2 79.5-74 139.2-152.8 134.5-79.5-4.7-140.7-71-136.3-151 4.5-79.2 74.3-139.3 153-134.5 79.3 4.7 140.5 71 136.1 151z\"]\n};\nvar faYoutube = {\n  prefix: 'fab',\n  iconName: 'youtube',\n  icon: [576, 512, [61802], \"f167\", \"M549.7 124.1C543.5 100.4 524.9 81.8 501.4 75.5 458.9 64 288.1 64 288.1 64S117.3 64 74.7 75.5C51.2 81.8 32.7 100.4 26.4 124.1 15 167 15 256.4 15 256.4s0 89.4 11.4 132.3c6.3 23.6 24.8 41.5 48.3 47.8 42.6 11.5 213.4 11.5 213.4 11.5s170.8 0 213.4-11.5c23.5-6.3 42-24.2 48.3-47.8 11.4-42.9 11.4-132.3 11.4-132.3s0-89.4-11.4-132.3zM232.2 337.6l0-162.4 142.7 81.2-142.7 81.2z\"]\n};\nvar faEmber = {\n  prefix: 'fab',\n  iconName: 'ember',\n  icon: [640, 512, [], \"f423\", \"M639.9 254.6c-1.1-10.7-10.7-6.8-10.7-6.8s-15.6 12.1-29.3 10.7c-13.7-1.3-9.4-32-9.4-32s3-28.1-5.1-30.4c-8.1-2.4-18 7.3-18 7.3s-12.4 13.7-18.3 31.2l-1.6 .5s1.9-30.6-.3-37.6c-1.6-3.5-16.4-3.2-18.8 3s-14.2 49.2-15 67.2c0 0-23.1 19.6-43.3 22.8s-25-9.4-25-9.4 54.8-15.3 52.9-59.1-44.2-27.6-49-24c-4.6 3.5-29.4 18.4-36.6 59.7-.2 1.4-.7 7.5-.7 7.5s-21.2 14.2-33 18c0 0 33-55.6-7.3-80.9-11.4-6.8-21.3-.5-27.2 5.3 13.6-17.3 46.4-64.2 36.9-105.2-5.8-24.4-18-27.1-29.2-23.1-17 6.7-23.5 16.7-23.5 16.7s-22 32-27.1 79.5-12.6 105.1-12.6 105.1-10.5 10.2-20.2 10.7-5.4-28.7-5.4-28.7 7.5-44.6 7-52.1-1.1-11.6-9.9-14.2c-8.9-2.7-18.5 8.6-18.5 8.6s-25.5 38.7-27.7 44.6l-1.3 2.4-1.3-1.6s18-52.7 .8-53.5-28.5 18.8-28.5 18.8-19.6 32.8-20.4 36.5l-1.3-1.6s8.1-38.2 6.4-47.6c-1.6-9.4-10.5-7.5-10.5-7.5s-11.3-1.3-14.2 5.9-13.7 55.3-15 70.7c0 0-28.2 20.2-46.8 20.4-18.5 .3-16.7-11.8-16.7-11.8s68-23.3 49.4-69.2c-8.3-11.8-18-15.5-31.7-15.3-13.7 .3-30.3 8.6-41.3 33.3-5.3 11.8-6.8 23-7.8 31.5 0 0-12.3 2.4-18.8-2.9s-10 0-10 0-11.2 14-.1 18.3 28.1 6.1 28.1 6.1c1.6 7.5 6.2 19.5 19.6 29.7 20.2 15.3 58.8-1.3 58.8-1.3l15.9-8.8s.5 14.6 12.1 16.7 16.4 1 36.5-47.9c11.8-25 12.6-23.6 12.6-23.6l1.3-.3s-9.1 46.8-5.6 59.7C187.7 319.4 203 318 203 318s8.3 2.4 15-21.2 19.6-49.9 19.6-49.9l1.6 0s-5.6 48.1 3 63.7 30.9 5.3 30.9 5.3 15.6-7.8 18-10.2c0 0 18.5 15.8 44.6 12.9 58.3-11.5 79.1-25.9 79.1-25.9s10 24.4 41.1 26.7c35.5 2.7 54.8-18.6 54.8-18.6s-.3 13.5 12.1 18.6 20.7-22.8 20.7-22.8l20.7-57.2 1.9 0s1.1 37.3 21.5 43.2 47-13.7 47-13.7 6.4-3.5 5.3-14.3zm-578 5.3c.8-32 21.8-45.9 29-39 7.3 7 4.6 22-9.1 31.4-13.7 9.5-19.9 7.6-19.9 7.6zM334.7 136.1s19.1-49.7 23.6-25.5-40 96.2-40 96.2c.5-16.2 16.4-70.7 16.4-70.7zm22.8 138.4c-12.6 33-43.3 19.6-43.3 19.6s-3.5-11.8 6.4-44.9 33.3-20.2 33.3-20.2 16.2 12.4 3.6 45.5zm84.6-14.6s-3-10.5 8.1-30.6c11-20.2 19.6-9.1 19.6-9.1s9.4 10.2-1.3 25.5-26.4 14.2-26.4 14.2z\"]\n};\nvar faBootstrap = {\n  prefix: 'fab',\n  iconName: 'bootstrap',\n  icon: [576, 512, [], \"f836\", \"M333.5 201.4c0-22.1-15.6-34.3-43-34.3l-50.4 0 0 71.2 42.5 0c32.8-.1 50.9-13.3 50.9-36.9zM517 188.6c-9.5-30.9-10.9-68.8-9.8-98.1 1.1-30.5-22.7-58.5-54.7-58.5L123.7 32c-32.1 0-55.8 28.1-54.7 58.5 1 29.3-.3 67.2-9.8 98.1-9.6 31-25.7 50.6-52.2 53.1l0 28.5c26.4 2.5 42.6 22.1 52.2 53.1 9.5 30.9 10.9 68.8 9.8 98.1-1.1 30.5 22.7 58.5 54.7 58.5l328.7 0c32.1 0 55.8-28.1 54.7-58.5-1-29.3 .3-67.2 9.8-98.1 9.6-31 25.7-50.6 52.1-53.1l0-28.5c-26.3-2.5-42.5-22.1-52-53.1zM300.2 375.1l-97.9 0 0-238.3 97.4 0c43.3 0 71.7 23.4 71.7 59.4 0 25.3-19.1 47.9-43.5 51.8l0 1.3c33.2 3.6 55.5 26.6 55.5 58.3 0 42.1-31.3 67.5-83.2 67.5zm-10-108.7l-50.1 0 0 78.4 52.3 0c34.2 0 52.3-13.7 52.3-39.5 0-25.7-18.6-38.9-54.5-38.9z\"]\n};\nvar faItunes = {\n  prefix: 'fab',\n  iconName: 'itunes',\n  icon: [448, 512, [], \"f3b4\", \"M223.6 80.3a171.3 171.3 0 1 0 .2 342.5 171.3 171.3 0 1 0 -.2-342.5zm79.4 240c-3.2 13.6-13.5 21.2-27.3 23.8-12.1 2.2-22.2 2.8-31.9-5-11.8-10-12-26.4-1.4-36.8 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 3.2-3.6 2.2-2 2.2-80.8 0-5.6-2.7-7.1-8.4-6.1-4 .7-91.9 17.1-91.9 17.1-5 1.1-6.7 2.6-6.7 8.3 0 116.1 .5 110.8-1.2 118.5-2.1 9-7.6 15.8-14.9 19.6-8.3 4.6-23.4 6.6-31.4 5.2-21.4-4-28.9-28.7-14.4-42.9 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 5-5.7 .9-127 2.6-133.7 .4-2.6 1.5-4.8 3.5-6.4 2.1-1.7 5.8-2.7 6.7-2.7 101-19 113.3-21.4 115.1-21.4 5.7-.4 9 3 9 8.7-.1 170.6 .4 161.4-1 167.6zM345.2 32L102.8 32C45.9 32 0 77.9 0 134.8L0 377.2C0 434.1 45.9 480 102.8 480l242.4 0c57 0 102.8-45.9 102.8-102.8l0-242.4C448 77.9 402.1 32 345.2 32zM223.6 59a192.5 192.5 0 1 1 0 385 192.5 192.5 0 1 1 0-385z\"]\n};\nvar faSquareXing = {\n  prefix: 'fab',\n  iconName: 'square-xing',\n  icon: [448, 512, [\"xing-square\"], \"f169\", \"M448 96c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320zM93.8 320.2c-5.5 0-8.7-5.3-6-10.3l49.3-86.7c.1 0 .1-.1 0-.2l-31.4-54c-3-5.6 .2-10.1 6-10.1l46.6 0c5.2 0 9.5 2.9 12.9 8.7l31.9 55.3c-1.3 2.3-18 31.7-50.1 88.2-3.5 6.2-7.7 9.1-12.6 9.1l-46.6 0zm163.5-33.4l0 .2 65.5 119c2.8 5.1 .1 10.1-6 10.1l-46.6 0c-5.5 0-9.7-2.9-12.9-8.7l-66-120.3c1.8-3.2 22.9-40.4 63.3-111.6 11.7-20.7 25.1-44.3 40.1-70.8 3.3-5.8 7.4-8.7 12.5-8.7l46.9 0c5.7-.1 8.8 4.7 6 10L257.3 286.8z\"]\n};\nvar faXingSquare = faSquareXing;\nvar faCss3Alt = {\n  prefix: 'fab',\n  iconName: 'css3-alt',\n  icon: [384, 512, [], \"f38b\", \"M0 32L34.9 427.8 192 480 349.1 427.8 384 32 0 32zm313.1 80l-4.8 47.3-115.3 49.3-.3 .1 111.5 0-12.8 146.6-98.2 28.7-98.8-29.2-6.4-73.9 48.9 0 3.2 38.3 52.6 13.3 54.7-15.4 3.7-61.6-166.3-.5 0-.1-.2 .1-3.6-46.3 112.1-46.7 6.5-2.7-122.9 0-5.8-47.3 242.2 0z\"]\n};\nvar faNextcloud = {\n  prefix: 'fab',\n  iconName: 'nextcloud',\n  icon: [640, 512, [], \"e8b5\", \"M327.8 404.7c10 0 16.4 4.2 19.3 6.6 1.3 1.1 1.6 2.4 .2 4l-.8 1.3c-1.1 1.6-2.4 1.6-4 .5-2.6-1.9-7.7-5.3-14.5-5.3-12.7 0-22.7 9.5-22.7 23.5 0 13.7 10 23.2 22.7 23.3 8.2 0 13.7-3.7 16.4-6.1 1.6-1.1 2.7-.8 3.7 .8l.8 1.1c.8 1.6 .5 2.6-.8 4-2.9 2.4-10.1 7.4-20.6 7.4-17.2 0-30.4-12.4-30.4-30.4 .3-18 13.5-30.7 30.7-30.7zm-164.2 0c15.6 0 24.3 11.1 24.3 27.8 0 1.6-1.3 2.9-2.9 2.9l-42 0c.3 14.8 10.6 23.2 22.5 23.3 7.4 0 12.7-3.2 15.3-5.3 1.6-1.1 2.9-.8 3.7 .8l.8 1.3c.8 1.3 .5 2.6-.8 3.7-3.2 2.4-10 6.3-19.3 6.3-17.2 0-30.4-12.4-30.4-30.4 .3-19 13-30.4 28.8-30.4zm253.6 0c16.9 0 30.7 13 30.7 30.1 0 17.4-13.7 30.6-30.7 30.7s-30.7-13.2-30.7-30.7c0-17.2 13.8-30.1 30.7-30.1zm48.3 1.3c1.8 0 2.9 1.1 2.9 2.9l0 32c0 9 6.1 17.2 17.2 17.2 11.4 0 17.2-8.2 17.2-17.2l0-32c0-1.8 1.1-2.9 2.9-2.9l2.1 0c1.8 0 2.9 1.1 2.6 2.9l0 34.1c0 15.1-11.1 22.5-24.8 22.5s-24.8-7.4-24.8-22.5l0-34.1c0-1.9 .8-2.9 2.7-2.9l2.1 0zm105.8-23.2c1.8 0 4.7 1.1 4.7 2.9l0 75.3c0 1.8-.8 2.9-2.6 2.9l-1.9 0c-1.8 0-2.9-.8-2.9-2.6l0-4.5c0-2.1 .5-3.7 .5-3.7l-.3 0s-5 12.2-20.1 12.2c-15.6 0-25.4-12.4-25.4-30.4-.5-18 10.3-30.1 25.6-30.1 14 0 19 11.6 19 11.6l.3 0s-.3-1.9-.3-4.5l0-26.2c0-1.8-.8-2.9 1.1-2.9l2.1 0zM365.9 383c1.8 0 4.7 1.1 4.7 2.9l0 63.2c0 7.4 3.4 8.2 6.1 8.4 1.3 0 2.4 .8 2.4 2.7l0 1.8c0 1.8-.8 2.9-2.9 2.9-4.8 0-13.2-1.6-13.2-14.3l0-64.7c0-1.4-.6-2.3-.1-2.7l.9-.2 2.1 0zM246.2 405.6c.6-.1 1.3 .1 2 .7l1.6 1.3c1.4 1.2 1.5 2.7 .3 4.1l-6.6 7.8 0 0-13 15.5c5.6 6.7 12.1 14.5 19.6 23.3 1.2 1.4 1.3 2.7-.2 3.9l-1.6 1.3c-1.4 1.2-2.9 1.1-4.1-.3l-6.6-7.8 0 0-12.1-14.5c-4.9 5.8-11.1 13.3-18.7 22.3-1.2 1.4-2.5 1.7-3.9 .5l-1.6-1.3c-1.4-1.2-1.5-2.7-.3-4.1l6.6-7.8 0 0 13-15.5-8.8-10.6-10.7-12.7c-1.2-1.4-1.3-2.7 .2-3.9l1.6-1.4c.7-.6 1.4-.8 2.1-.8 .7 .1 1.4 .4 2 1.2 3.5 4.1 9.7 11.6 18.7 22.3 4.9-5.8 11.1-13.2 18.7-22.3 .6-.7 1.2-1.1 1.9-1.2zM271 389.9c1.9 0 2.7 1.1 2.7 2.9l0 13.8 11.9 0c1.8 0 2.9 1.1 2.9 2.9l0 .8c0 1.8-1.1 2.7-2.9 2.7l-11.9 0 0 29.1c0 13.5 8.2 15.1 12.7 15.3 2.4 .3 3.2 .8 3.2 2.9l0 1.6c0 1.8-.8 2.6-3.2 2.6-12.7 0-20.3-7.7-20.3-21.4l0-50.2c0-1.8 1.1-2.9 2.9-2.9l2.1 0zM68.8 381.7c1.1 0 1.9 .4 2.3 1.1 .2 .2 .3 .3 .5 .5l41.8 64.9 0-63.7c0-1.8 1.1-2.9 2.9-2.9l2.1 0c1.8 0 2.6 1.1 2.6 2.9l0 76.7c0 1.8-.8 2.9-2.6 2.9l-2.1 0c-.4 0-.6-.1-.9-.2-.1 0-.2 0-.3 0-.1 0-.2-.1-.3-.2-.2-.1-.4-.2-.6-.3-.1-.1-.1-.1-.2-.2-.2-.2-.4-.4-.6-.7l-41.8-64.9 0 63.7c0 1.8-1 2.9-2.9 2.9l-2.1 0c-1.8 0-2.7-1-2.7-2.9l0-76.7c0-1.8 .8-2.9 2.7-2.9l2.1 0zm348.4 30.1c-12.4 0-22.7 10-22.7 23 .3 13.5 10.3 23.8 22.7 23.8s22.5-10 22.5-23.8c0-13.2-10.1-23-22.5-23zm132.4 0c-10.3 0-18.7 8.5-18.7 23.2 .3 14.3 7.7 23.5 18.5 23.5 9.8 0 18.8-6.9 18.8-23.5 0-11.9-6.1-23.2-18.5-23.2zm-386.2-.5c-9.8 0-18.2 6.4-20.1 18.2l36.5 0c-.5-12.2-7.9-18.2-16.4-18.2zM320.5 46.4c65.8 0 121.8 44.3 139.7 104.5 15.4-31.6 47.8-53.6 85.1-53.6 52 0 94.7 42.7 94.7 94.7s-42.8 94.7-94.7 94.7c-37.3 0-69.7-22-85.1-53.6-17.9 60.2-73.8 104.6-139.7 104.6-66.3 0-122.6-45-140-105.9-15.1 32.3-48 55-85.8 55-52 0-94.7-42.8-94.7-94.7S42.7 97.3 94.7 97.3c37.8 0 70.6 22.6 85.8 55 17.4-60.9 73.7-105.9 140-105.9zm0 55.6a90.1 90.1 0 1 0 0 180.2 90.1 90.1 0 1 0 0-180.2zM94.7 153a39.1 39.1 0 1 0 .1 78.3 39.1 39.1 0 1 0 -.1-78.3zm450.5 0a39.1 39.1 0 1 0 0 78.3 39.1 39.1 0 1 0 0-78.3z\"]\n};\nvar faSquarespace = {\n  prefix: 'fab',\n  iconName: 'squarespace',\n  icon: [512, 512, [], \"f5be\", \"M186.1 343.3c-9.7 9.7-9.7 25.3 0 34.9s25.3 9.6 34.9 0L378.3 221.1c19.3-19.3 50.6-19.3 69.9 0s19.3 50.6 0 69.9L294 445.1c19.3 19.3 50.5 19.3 69.8 0l0 0 119.3-119.2c38.6-38.6 38.6-101.1 0-139.7-38.6-38.6-101.2-38.6-139.7 0L186.1 343.3zM430.7 238.5c-9.7-9.7-25.3-9.7-34.9 0L238.5 395.7c-19.3 19.3-50.5 19.3-69.8 0l0 0c-9.6-9.6-25.3-9.7-34.9 0l0 0c-9.7 9.6-9.7 25.3 0 34.9l0 0c38.6 38.6 101.1 38.6 139.7 0L430.7 273.5c9.6-9.7 9.6-25.3 0-34.9zm-262 87.3L325.9 168.7c9.6-9.6 9.6-25.3 0-34.9-9.6-9.6-25.3-9.6-34.9 0L133.7 290.9c-19.3 19.3-50.6 19.3-69.9 0l0 0c-19.3-19.3-19.3-50.5 0-69.8l0 0 154.2-154.2c-19.3-19.3-50.5-19.3-69.8 0l0 0-119.2 119.3c-38.6 38.6-38.6 101.1 0 139.7 38.6 38.6 101.1 38.6 139.7 0zM81.3 273.5c9.6 9.6 25.3 9.6 34.9 0L273.5 116.3c19.3-19.3 50.6-19.3 69.8 0l0 0c9.7 9.6 25.3 9.6 34.9 0s9.6-25.3 0-34.9c-38.6-38.6-101.1-38.6-139.7 0L81.3 238.5c-9.6 9.6-9.6 25.3 0 34.9l0 0z\"]\n};\nvar faTrello = {\n  prefix: 'fab',\n  iconName: 'trello',\n  icon: [448, 512, [], \"f181\", \"M392.3 32L56.1 32c-31 0-56.1 25.1-56.1 56-.1 0 0-4 0 336 0 30.9 25.1 56 56 56l336.2 0c30.8-.2 55.7-25.2 55.7-56l0-336c.1-30.8-24.8-55.8-55.6-56zM197 371.3c-.2 14.7-12.1 26.6-26.9 26.6l-82.7 0c-14.8 .1-26.9-11.8-27-26.6l0-254.2c0-14.8 12-26.9 26.9-26.9l82.9 0c14.8 0 26.9 12 26.9 26.9l0 254.2-.1 0zm193.1-112c0 14.8-12 26.9-26.9 26.9l-81 0c-14.8 0-26.9-12-26.9-26.9l0-142.1c0-14.8 12-26.9 26.8-26.9l81.1 0c14.8 0 26.9 12 26.9 26.9l0 142.1z\"]\n};\nvar faViadeo = {\n  prefix: 'fab',\n  iconName: 'viadeo',\n  icon: [448, 512, [], \"f2a9\", \"M276.4 150.5l0 .7c-17.9-52.6-42.6-103.4-70.8-151.2 43.3 29.2 67 100 70.8 150.5zm32.7 121.7c7.6 18.2 11 37.5 11 57 0 77.7-57.8 141-137.8 139.4l3.8-.3c74.2-46.7 109.3-118.6 109.3-205.1 0-38.1-6.5-75.9-18.9-112 1 11.7 1 23.7 1 35.4 0 91.8-18.1 241.6-116.6 280-65.7-11.4-111.3-68.6-111.3-137.4 0-75.6 57.4-142.3 135.4-142.3 16.8 0 33.7 3.1 49.1 9.6 1.7-15.1 6.5-29.9 13.4-43.3-19.9-7.2-41.2-10.7-62.5-10.7-161.5 0-238.7 195.9-129.9 313.7 67.9 74.6 192 73.9 259.8 0 56.6-61.3 60.9-142.4 36.4-201-12.7 8-27.1 13.9-42.2 17zM418.3 11.7c-31 66.5-81.3 47.2-115.8 80.1-12.4 12-20.6 34-20.6 50.5 0 14.1 4.5 27.1 12 38.8 47.4-11 98.3-46 118.2-90.7-.7 5.5-4.8 14.4-7.2 19.2-20.3 35.7-64.6 65.6-99.7 84.9 14.8 14.4 33.7 25.8 55 25.8 79 0 110.1-134.6 58.1-208.6z\"]\n};\nvar faSearchengin = {\n  prefix: 'fab',\n  iconName: 'searchengin',\n  icon: [448, 512, [], \"f3eb\", \"M214.6 130.3l-67.2 28.2 0-115.3-54.7 190.3 54.7-24.2 0 130.3 67.2-209.3zM131.4 33.6l-1.3 4.7-15.2 52.9C74.6 106.7 46 145.8 46 191.5 46 243.8 80.3 287.4 129.4 297l0 53.6C51.5 340.1-6 272.4-6 191.6-6 111.1 53.8 44.4 131.4 33.6zM442.8 480.8c-11.2 11.2-23.1 12.3-28.6 10.5-5.4-1.8-27.1-19.9-60.4-44.4-33.3-24.6-33.6-35.7-43-56.7-9.4-20.9-30.4-42.6-57.5-52.4l-9.7-14.7c-24.7 16.9-53 26.9-81.3 28.7l2.1-6.6 15.9-49.5c46.5-11.9 80.9-54 80.9-104.2 0-54.5-38.4-102.1-96-107.1l0-52.1c83.2 5.1 148.8 74.5 148.8 159.3 0 33.6-11.2 64.7-29 90.4l14.6 9.6c9.8 27.1 31.5 48 52.4 57.4s32.2 9.7 56.8 43c24.6 33.2 42.7 54.9 44.5 60.3s.7 17.3-10.5 28.5zm-9.9-17.9c0-4.4-3.6-8-8-8s-8 3.6-8 8 3.6 8 8 8 8-3.6 8-8z\"]\n};\nvar faUnrealEngine = {\n  prefix: 'fab',\n  iconName: 'unreal-engine',\n  icon: [512, 512, [], \"e85c\", \"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zm65.5-113.7l-25.1-28.3-42.4 42.6c-24.1-.3-47.9-6.2-69.3-17.2s-40.1-26.9-54.5-46.3c4.5 1.4 9.2 2.3 13.9 2.6 6.9 .1 14.5-2.4 14.5-14.1l0-115.1c.1-3-.5-5.9-1.7-8.6s-3.1-5-5.4-6.9-5-3.1-7.9-3.7-5.9-.5-8.8 .2c-19.6 4.5-35.3 53.5-35.3 53.5-.2-22.6 4.5-45 13.8-65.6s23-39 40.1-53.8c22.5-19.5 50.1-32.2 79.6-36.7-21.4 12.2-33.5 32.1-33.5 48.9 0 26.9 16.2 23.6 21 19.7l0 155.3c.8 1.9 1.9 3.8 3.2 5.5 2.1 3 5 5.4 8.2 7s6.9 2.5 10.5 2.5c16.2 0 37.3-18.5 37.3-18.5l0-125.7c0-12.8-9.6-28.2-19.3-33.5 0 0 17.9-3.2 31.7 7.4 2.6-3.2 5.3-6.2 8.2-9.1 32.2-31.6 62.5-40.6 87.7-45.1 0 0-45.9 36.1-45.9 84.5 0 36 .9 123.8 .9 123.8 17 16.4 42.4-7.3 65.2-30.8-4.4 21.3-24 75.9-86.6 105.4z\"]\n};\nvar faPaypal = {\n  prefix: 'fab',\n  iconName: 'paypal',\n  icon: [384, 512, [], \"f1ed\", \"M111.9 295.9c-3.5 19.2-17.4 108.7-21.5 134-.3 1.8-1 2.5-3 2.5l-74.6 0c-7.6 0-13.1-6.6-12.1-13.9L59.3 46.6c1.5-9.6 10.1-16.9 20-16.9 152.3 0 165.1-3.7 204 11.4 60.1 23.3 65.6 79.5 44 140.3-21.5 62.6-72.5 89.5-140.1 90.3-43.4 .7-69.5-7-75.3 24.2zM357.6 152c-1.8-1.3-2.5-1.8-3 1.3-2 11.4-5.1 22.5-8.8 33.6-39.9 113.8-150.5 103.9-204.5 103.9-6.1 0-10.1 3.3-10.9 9.4-22.6 140.4-27.1 169.7-27.1 169.7-1 7.1 3.5 12.9 10.6 12.9l63.5 0c8.6 0 15.7-6.3 17.4-14.9 .7-5.4-1.1 6.1 14.4-91.3 4.6-22 14.3-19.7 29.3-19.7 71 0 126.4-28.8 142.9-112.3 6.5-34.8 4.6-71.4-23.8-92.6z\"]\n};\nvar faSquareBluesky = {\n  prefix: 'fab',\n  iconName: 'square-bluesky',\n  icon: [448, 512, [], \"e6a3\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM224 247.4c14.5-30 54-85.8 90.7-113.3 26.5-19.9 69.3-35.2 69.3 13.7 0 9.8-5.6 82.1-8.9 93.8-11.4 40.8-53 51.2-90 44.9 64.7 11 81.2 47.5 45.6 84-67.5 69.3-97-17.4-104.6-39.6l-.3-.9c-.9-2.6-1.4-4.1-1.8-4.1s-.9 1.5-1.8 4.1c-.1 .3-.2 .6-.3 .9-7.6 22.2-37.1 108.8-104.6 39.6-35.5-36.5-19.1-73 45.6-84-37 6.3-78.6-4.1-90-44.9-3.3-11.7-8.9-84-8.9-93.8 0-48.9 42.9-33.5 69.3-13.7 36.7 27.5 76.2 83.4 90.7 113.3z\"]\n};\nvar faDAndDBeyond = {\n  prefix: 'fab',\n  iconName: 'd-and-d-beyond',\n  icon: [640, 512, [], \"f6ca\", \"M313.8 241.5c13.8 0 21-10.1 24.8-17.9-1-1.1-5-4.2-7.4-6.6-2.4 4.3-8.2 10.7-13.9 10.7-10.2 0-15.4-14.7-3.2-26.6-.5-.2-4.3-1.8-8 2.4 0-3 1-5.1 2.1-6.6-3.5 1.3-9.8 5.6-11.4 7.9 .2-5.8 1.6-7.5 .6-9l-.2-.2s-8.5 5.6-9.3 14.7c0 0 1.1-1.6 2.1-1.9 .6-.3 1.3 0 .6 1.9-.2 .6-5.8 15.7 5.1 26-.6-1.6-1.9-7.6 2.4-1.9-.3 .1 5.8 7.1 15.7 7.1zm52.4-21.1c0-4-4.9-4.4-5.6-4.5 2 3.9 .9 7.5 .2 9 2.5-.4 5.4-1.6 5.4-4.5zm10.3 5.2c0-6.4-6.2-11.4-13.5-10.7 8 1.3 5.6 13.8-5 11.4 3.7-2.6 3.2-9.9-1.3-12.5 1.4 4.2-3 8.2-7.4 4.6-2.4-1.9-8-6.6-10.6-8.6-2.4-2.1-5.5-1-6.6-1.8-1.3-1.1-.5-3.8-2.2-5-1.6-.8-3-.3-4.8-1-1.6-.6-2.7-1.9-2.6-3.5-2.5 4.4 3.4 6.3 4.5 8.5 1 1.9-.8 4.8 4 8.5 14.8 11.6 9.1 8 10.4 18.1 .6 4.3 4.2 6.7 6.4 7.4-2.1-1.9-2.9-6.4 0-9.3 0 13.9 19.2 13.3 23.1 6.4-2.4 1.1-7-.2-9-1.9 7.7 1 14.2-4.1 14.6-10.6zm-39.4-18.4c2 .8 1.6 .7 6.4 4.5 10.2-24.5 21.7-15.7 22-15.5 2.2-1.9 9.8-3.8 13.8-2.7-2.4-2.7-7.5-6.2-13.3-6.2-4.7 0-7.4 2.2-8 1.3-.8-1.4 3.2-3.4 3.2-3.4-5.4 .2-9.6 6.7-11.2 5.9-1.1-.5 1.4-3.7 1.4-3.7-5.1 2.9-9.3 9.1-10.2 13 4.6-5.8 13.8-9.8 19.7-9-10.5 .5-19.5 9.7-23.8 15.8zm242.5 51.9c-20.7 0-40 1.3-50.3 2.1l7.4 8.2 0 77.2-7.4 8.2c10.4 .8 30.9 2.1 51.6 2.1 42.1 0 59.1-20.7 59.1-48.9 0-29.3-23.2-48.9-60.4-48.9zm-15.1 75.6l0-53.3c30.1-3.3 46.8 3.8 46.8 26.3 0 25.6-21.4 30.2-46.8 27zM301.6 181c-1-3.4-.2-6.9 1.1-9.4 1 3 2.6 6.4 7.5 9-.5-2.4-.2-5.6 .5-8-1.4-5.4 2.1-9.9 6.4-9.9 6.9 0 8.5 8.8 4.7 14.4 2.1 3.2 5.5 5.6 7.7 7.8 3.2-3.7 5.5-9.5 5.5-13.8 0-8.2-5.5-15.9-16.7-16.5-20-.9-20.2 16.6-20 18.9 .5 5.2 3.4 7.8 3.3 7.5zm-.4 6c-.5 1.8-7 3.7-10.2 6.9 4.8-1 7-.2 7.8 1.8 .5 1.4-.2 3.4-.5 5.6 1.6-1.8 7-5.5 11-6.2-1-.3-3.4-.8-4.3-.8 2.9-3.4 9.3-4.5 12.8-3.7-2.2-.2-6.7 1.1-8.5 2.6 1.6 .3 3 .6 4.3 1.1-2.1 .8-4.8 3.4-5.8 6.1 7-5 13.1 5.2 7 8.2 .8 .2 2.7 0 3.5-.5-.3 1.1-1.9 3-3 3.4 2.9 0 7-1.9 8.2-4.6 0 0-1.8 .6-2.6-.2s.3-4.3 .3-4.3c-2.3 2.9-3.4-1.3-1.3-4.2-1-.3-3.5-.6-4.6-.5 3.2-1.1 10.4-1.8 11.2-.3 .6 1.1-1 3.4-1 3.4 4-.5 8.3 1.1 6.7 5.1 2.9-1.4 5.5-5.9 4.8-10.4-.3 1-1.6 2.4-2.9 2.7 .2-1.4-1-2.2-1.9-2.6 1.7-9.6-14.6-14.2-14.1-23.9-1 1.3-1.8 5-.8 7.1 2.7 3.2 8.7 6.7 10.1 12.2-2.6-6.4-15.1-11.4-14.6-20.2-1.6 1.6-2.6 7.8-1.3 11 2.4 1.4 4.5 3.8 4.8 6.1-2.2-5.1-11.4-6.1-13.9-12.2-.6 2.2-.3 5 1 6.7 0 0-2.2-.8-7-.6 1.7 .6 5.1 3.5 4.8 5.2zm25.9 7.4c-2.7 0-3.5-2.1-4.2-4.3 3.3 1.3 4.2 4.3 4.2 4.3zm38.9 3.7l-1-.6c-1.1-1-2.9-1.4-4.7-1.4-2.9 0-5.8 1.3-7.5 3.4-.8 .8-1.4 1.8-2.1 2.6l0 15.7c3.5 2.6 7.1-2.9 3-7.2 1.5 .3 4.6 2.7 5.1 3.2 0 0 2.6-.5 5-.5 2.1 0 3.9 .3 5.6 1.1l0-18.4c-1.1 .5-2.2 1-2.7 1.4l-.7 .7zM79.9 305.9c17.2-4.6 16.2-18 16.2-19.9 0-20.6-24.1-25-37-25l-56.1 0 8.3 8.6 0 29.5-11.3 0 11.4 14.6 0 32.3-8.4 8.6c61.7 0 73.8 1.5 86.4-5.9 6.7-4 9.9-9.8 9.9-17.6 0-5.1 2.6-18.8-19.4-25.2zM38.6 278.4c20 0 29.6-.8 29.6 9.1l0 3c0 12.1-19 8.8-29.6 8.8l0-20.9zm0 59.2l0-22.6c12.2 0 32.7-2.3 32.7 8.8l0 4.5 .2 0c0 11.2-12.5 9.3-32.9 9.3zm101.2-19.3l23.1 .2 0-.2 14.1-21.2-37.2 0 0-14.9 52.4 0-14.1-21 0-.2-73.5 .2 7.4 8.2 0 77.1-7.4 8.2 81.2 0 14.1-21.2-60.1 .2 0-15.4zm214.7-60.1c-73.9 0-77.5 99.3-.3 99.3 77.9 0 74.1-99.3 .3-99.3zm-.3 77.5c-37.4 0-36.9-55.3 .2-55.3 36.8 .1 38.8 55.3-.2 55.3zm-91.3-8.3l44.1-66.2-41.7 0 6.1 7.2-20.5 37.2-.3 0-21-37.2 6.4-7.2-44.9 0 44.1 65.8 .2 19.4-7.7 8.2 42.6 0-7.2-8.2-.2-19zM234.5 176.1c1.6 1.3 2.9 2.4 2.9 6.6l0 38.8c0 4.2-.8 5.3-2.7 6.4-.1 .1-7.5 4.5-7.9 4.6l35.1 0c10 0 17.4-1.5 26-8.6-.6-5 .2-9.5 .8-12 0-.2-1.8 1.4-2.7 3.5 0-5.7 1.6-15.4 9.6-20.5-.1 0-3.7-.8-9 1.1 2-3.1 10-7.9 10.4-7.9-8.2-26-38-22.9-32.2-22.9-30.9 0-32.6 .3-39.9-4 .1 .8 .5 8.2 9.6 14.9zm21.5 5.5c4.6 0 23.1-3.3 23.1 17.3 0 20.7-18.4 17.3-23.1 17.3l0-34.6zm228.9 79.6l7 8.3 0 42.5-.3 0c-5.4-14.4-42.3-41.5-45.2-50.9l-31.6 0 7.4 8.5 0 76.9-7.2 8.3 39 0-7.4-8.2 0-47.4 .3 0c3.7 10.6 44.5 42.9 48.5 55.6l21.3 0 0-85.2 7.4-8.3-39.2-.1zM378.2 165.1c-32.2 0-32.8 .2-39.9-4 .1 .7 .5 8.3 9.6 14.9 3.1 2 2.9 4.3 2.9 9.5 1.8-1.1 3.8-2.2 6.1-3-1.1 1.1-2.7 2.7-3.5 4.5 1-1.1 7.5-5.1 14.6-3.5-1.6 .3-4 1.1-6.1 2.9 .1 0 2.1-1.1 7.5-.3l0-4.3c4.7 0 23.1-3.4 23.1 17.3 0 20.5-18.5 17.3-19.7 17.3 5.7 4.4 5.8 12 2.2 16.3l.3 0c33.4 0 36.7-27.3 36.7-34 0-3.8-1.1-32-33.8-33.6z\"]\n};\nvar faMicrosoft = {\n  prefix: 'fab',\n  iconName: 'microsoft',\n  icon: [448, 512, [], \"f3ca\", \"M0 32l214.6 0 0 214.6-214.6 0 0-214.6zm233.4 0l214.6 0 0 214.6-214.6 0 0-214.6zM0 265.4l214.6 0 0 214.6-214.6 0 0-214.6zm233.4 0l214.6 0 0 214.6-214.6 0 0-214.6z\"]\n};\nvar faFly = {\n  prefix: 'fab',\n  iconName: 'fly',\n  icon: [320, 512, [], \"f417\", \"M165.9 427.8c12.9 11.7 33.7 33.3 33.2 50.7 0 .8-.1 1.6-.1 2.5-1.8 19.8-18.8 31.1-39.1 31-25-.1-39.9-16.8-38.7-35.8 1-16.2 20.5-36.7 32.4-47.6 2.3-2.1 2.7-2.7 5.6-3.6 3.4 0 3.9 .3 6.7 2.8zM300 67.3c-16.3-25.7-38.6-40.6-63.3-52.1-25.5-10.7-54.6-15.4-76.6-15.2-44.1 0-71.2 13.2-81.1 17.3-53.6 27.9-84.4 69.9-82.9 141.3 7.1 82.2 97 176 155.8 233.8 1.7 1.6 4.5 4.5 6.2 5.1l3.3 .1c2.1-.7 1.8-.5 3.5-2.1 52.3-49.2 140.7-145.8 155.9-215.7 7-39.2 3.1-72.5-20.8-112.5zM154.9 351.9c-28-51.1-65.2-130.7-69.3-189-3.4-47.5 11.4-131.2 69.3-136.7l0 325.7zM296.8 180c-16.4 56.8-77.3 128-118.9 170.3 27.8-51.9 65.2-133.3 67.2-191.9 1.6-45.9-9.8-105.8-48-131.4 88.8 18.3 115.5 98.1 99.7 153z\"]\n};\nvar faCcStripe = {\n  prefix: 'fab',\n  iconName: 'cc-stripe',\n  icon: [576, 512, [], \"f1f5\", \"M492.4 220.8c-8.9 0-18.7 6.7-18.7 22.7l36.7 0c0-16-9.3-22.7-18-22.7zM375 223.4c-8.2 0-13.3 2.9-17 7l.2 52.8c3.5 3.7 8.5 6.7 16.8 6.7 13.1 0 21.9-14.3 21.9-33.4 0-18.6-9-33.2-21.9-33.1zM528 32L48 32C21.5 32 0 53.5 0 80L0 432c0 26.5 21.5 48 48 48l480 0c26.5 0 48-21.5 48-48l0-352c0-26.5-21.5-48-48-48zM122.2 281.1c0 25.6-20.3 40.1-49.9 40.3-12.2 0-25.6-2.4-38.8-8.1l0-33.9c12 6.4 27.1 11.3 38.9 11.3 7.9 0 13.6-2.1 13.6-8.7 0-17-54-10.6-54-49.9 0-25.2 19.2-40.2 48-40.2 11.8 0 23.5 1.8 35.3 6.5l0 33.4c-10.8-5.8-24.5-9.1-35.3-9.1-7.5 0-12.1 2.2-12.1 7.7 0 16 54.3 8.4 54.3 50.7zM191 224.5l-27 0 0 50.5c0 20.9 22.5 14.4 27 12.6l0 28.9c-4.7 2.6-13.3 4.7-24.9 4.7-21.1 0-36.9-15.5-36.9-36.5l.2-113.9 34.7-7.4 0 30.8 26.9 0 0 30.3zm74 2.4c-4.5-1.5-18.7-3.6-27.1 7.4l0 84.4-35.5 0 0-124.5 30.7 0 2.2 10.5c8.3-15.3 24.9-12.2 29.6-10.5l.1 0 0 32.7zm44.1 91.8l-35.7 0 0-124.5 35.7 0 0 124.5zm0-142.9l-35.7 7.6 0-28.9 35.7-7.6 0 28.9zm74.1 145.5c-12.4 0-20-5.3-25.1-9l-.1 40.2-35.5 7.5 0-165.8 31.3 0 1.8 8.8c4.9-4.5 13.9-11.1 27.8-11.1 24.9 0 48.4 22.5 48.4 63.8 0 45.1-23.2 65.5-48.6 65.6zm160.4-51.5l-69.5 0c1.6 16.6 13.8 21.5 27.6 21.5 14.1 0 25.2-3 34.9-7.9l0 28.6c-9.7 5.3-22.4 9.2-39.4 9.2-34.6 0-58.8-21.7-58.8-64.5 0-36.2 20.5-64.9 54.3-64.9 33.7 0 51.3 28.7 51.3 65.1 0 3.5-.3 10.9-.4 12.9z\"]\n};\nvar faWordpressSimple = {\n  prefix: 'fab',\n  iconName: 'wordpress-simple',\n  icon: [512, 512, [], \"f411\", \"M256 8a248 248 0 1 0 0 496 248 248 0 1 0 0-496zM33 256c0-32.3 6.9-63 19.3-90.7L158.7 456.7C84.3 420.5 33 344.2 33 256zM256 479c-21.9 0-43-3.2-63-9.1l66.9-194.4 68.5 187.8c.5 1.1 1 2.1 1.6 3.1-23.1 8.1-48 12.6-74 12.6zm30.7-327.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-21.9 0-58.7-2.8-58.7-2.8-12-.7-13.4 17.7-1.4 18.4 0 0 11.4 1.4 23.4 2.1l34.7 95.2-48.8 146.3-81.2-241.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-4.2 0-9.1-.1-14.4-.3 39.9-60.5 108.4-100.5 186.3-100.5 58 0 110.9 22.2 150.6 58.5-1-.1-1.9-.2-2.9-.2-21.9 0-37.4 19.1-37.4 39.6 0 18.4 10.6 33.9 21.9 52.3 8.5 14.8 18.4 33.9 18.4 61.5 0 19.1-7.3 41.2-17 72.1l-22.2 74.3-80.7-239.6zm81.4 297.2l68.1-196.9c12.7-31.8 17-57.2 17-79.9 0-8.2-.5-15.8-1.5-22.9 17.4 31.8 27.3 68.2 27.3 107 0 82.3-44.6 154.1-110.9 192.7z\"]\n};\nvar faSellsy = {\n  prefix: 'fab',\n  iconName: 'sellsy',\n  icon: [640, 512, [], \"f213\", \"M540 237.3c3.1-12.3 4.3-24.8 4.3-37.4 0-92.5-75.4-167.9-167.9-167.9-77.2 0-144.6 53-163 127.8-15.3-13.2-34.9-20.5-55.2-20.5-46.3 0-84 37.7-84 84 0 7.4 .9 15 3.1 22.4-42.9 20.2-70.8 63.7-70.8 111.2 0 68 55.5 123.2 123.2 123.2l381.2 0c67.7 0 123.2-55.2 123.2-123.2 0-56.4-38.9-106-94.1-119.5zM200.2 401.6c0 8.3-7 15.3-15.3 15.3l-30.9 0c-8.3 0-15.3-7-15.3-15.3l0-110.9c0-8.3 7-15.3 15.3-15.3l30.9 0c8.3 0 15.3 7 15.3 15.3l0 110.9zm89.5 0c0 8.3-7 15.3-15.3 15.3l-30.9 0c-8.3 0-15.3-7-15.3-15.3l0-131.5c0-8.3 7-15.3 15.3-15.3l30.9 0c8.3 0 15.3 7 15.3 15.3l0 131.5zm89.5 0c0 8.3-7 15.3-15.3 15.3l-31 0c-8.3 0-15.3-7-15.3-15.3l0-162.7c0-8.3 7-15.3 15.3-15.3l31 0c8.3 0 15.3 7 15.3 15.3l0 162.7zm87 0c0 8.3-7 15.3-15.3 15.3l-28.5 0c-8.3 0-15.3-7-15.3-15.3l0-224.6c0-8.6 7-15.6 15.3-15.6l28.5 0c8.3 0 15.3 7 15.3 15.6l0 224.6z\"]\n};\nvar faDashcube = {\n  prefix: 'fab',\n  iconName: 'dashcube',\n  icon: [448, 512, [], \"f210\", \"M326.9 104l-216.2 0c-51.1 0-91.2 43.3-91.2 93.5l0 229.5c0 50.5 40.1 85 91.2 85l227.2 0c51.1 0 91.2-34.5 91.2-85l0-427-102.2 104zM154.2 416.5c-17.7 0-32.4-15.1-32.4-32.8l0-142.9c0-17.7 14.7-32.5 32.4-32.5l140.7 0c17.7 0 32 14.8 32 32.5l0 123.5 51.1 52.3-223.8 0 0-.1z\"]\n};\nvar faGitter = {\n  prefix: 'fab',\n  iconName: 'gitter',\n  icon: [384, 512, [], \"f426\", \"M66.4 322.5l-50.4 0 0-322.5 50.4 0 0 322.5zM166.9 76.1l-50.4 0 0 435.9 50.4 0 0-435.9zm100.6 0l-50.4 0 0 435.9 50.4 0 0-435.9zM368 76l-50.4 0 0 247 50.4 0 0-247z\"]\n};\nvar faWolfPackBattalion = {\n  prefix: 'fab',\n  iconName: 'wolf-pack-battalion',\n  icon: [448, 512, [], \"f514\", \"M236.2 471.5l10.6 15.8 5.3-12.3 5.3 7 0 29.9c21.1-7.9 21.1-66.9 25.5-97.2 4.6-31.9-.9-92.8 81.4-149.1-8.9-23.6-12-49.4-2.6-80 27.9 3.4 53.9 10.6 63.3 54.1l-30.3 8.4c11.1 23 17 46.8 13.2 72.1l-27.3-7-6.2 33.4-18.5-7-8.8 33.4-19.4-7 26.4 21.1 8.8-28.2 24.6 5.2 7-35.6 26.4 14.5c.2-20 7-58.1-8.8-84.5l26.4 5.3c4-22.1-2.4-39.2-7.9-56.7l22.4 9.7c-.4-25.1-29.9-56.8-61.6-58.5-20.2-1.1-56.7-25.2-54.1-51.9 2-19.9 17.4-42.6 43.1-49.7-44 36.5-9.7 67.3 5.3 73.5 4.4-11.4 17.5-69.1 0-130.2-40.4 22.9-89.7 65.1-93.2 147.8l-58 38.7-3.5 93.2 107.3-59.8 7 7-17.6 3.5-44 38.7-15.8-5.3-28.1 49.3-3.5 119.6 21.1 15.8-32.5 15.8-32.6-15.8 21.1-15.8-3.5-119.6-28.2-49.3-15.8 5.3-44-38.7-17.6-3.5 7-7 107.3 59.8-3.5-93.3-58.1-38.7c-3.5-82.8-52.7-125-93.2-147.9-17.5 61.1-4.4 118.8 0 130.2 15-6.2 49.3-37 5.3-73.5 25.7 7.1 41.1 29.8 43.1 49.7 2.6 26.7-33.9 50.8-54.1 51.9-31.7 1.7-61.2 33.4-61.6 58.5l22.4-9.7C13.4 224.7 7 241.8 11 263.9l26.4-5.3c-15.8 26.4-9.1 64.4-8.8 84.4l26.4-14.5 7 35.6 24.6-5.3 8.8 28.2 26.4-21.1-19.4 7-8.8-33.4-18.5 7-6.2-33.4-27.3 7C38 294.8 43.8 271 55 248l-30.3-8.4c9.4-43.5 35.5-50.8 63.3-54.1 9.4 30.6 6.2 56.5-2.6 80.1 82.3 56.3 76.8 117.2 81.4 149.1 4.4 30.3 4.4 89.3 25.5 97.2l0-29.8 5.3-7 5.3 12.3 10.6-15.8 11.4 21.1 11.4-21.1 0 0zm79.2-95L299.5 366c7.5-4.4 13.8-8.4 19.4-12.3-.6 7.2-.3 13.8-3.5 22.8l0 0zm28.2-49.3c-.4 10.9-.9 21.7-1.8 31.7-7.8-1.9-15.6-3.8-21.1-7 8.2-7.9 15.6-16.3 22.9-24.7l0 0zm24.6 5.3c0-13.4-2.1-24.2-5.3-33.4-5.5 9.5-11.7 18.6-18.5 27.3l23.8 6.2zm3.5-80.9c19.4 12.8 27.8 33.7 29.9 56.3-12.3-4.5-24.6-9.3-37-10.6 5.1-12 6.6-28.1 7-45.7l0 0zm-1.8-45.7c.8 14.3 1.8 28.8 1.8 42.2 19.2-8.1 29.8-9.7 44-14.1-10.6-19-27.2-25.5-45.8-28.2l0 0zM134.2 376.5L150 366c-7.5-4.4-13.8-8.4-19.4-12.3 .6 7.3 .3 13.9 3.5 22.9l0 0zM106 327.3c.4 10.9 .9 21.7 1.8 31.7 7.8-1.9 15.6-3.8 21.1-7-8.2-7.9-15.6-16.3-22.9-24.7zm-24.6 5.3c0-13.4 2-24.2 5.3-33.4 5.5 9.5 11.7 18.6 18.5 27.3l-23.8 6.2zm-3.5-80.9c-19.4 12.8-27.8 33.7-29.9 56.3 12.3-4.5 24.6-9.3 37-10.6-5-12-6.6-28.1-7-45.7l-.1 0zm1.8-45.7c-.8 14.3-1.8 28.8-1.8 42.2-19.2-8.1-29.8-9.7-44-14.1 10.6-19 27.2-25.5 45.8-28.1z\"]\n};\nvar faLastfm = {\n  prefix: 'fab',\n  iconName: 'lastfm',\n  icon: [512, 512, [], \"f202\", \"M225.8 367.1l-18.8-51s-30.5 34-76.2 34c-40.5 0-69.2-35.2-69.2-91.5 0-72.1 36.4-97.9 72.1-97.9 66.5 0 74.8 53.3 100.9 134.9 18.8 56.9 54 102.6 155.4 102.6 72.7 0 122-22.3 122-80.9 0-72.9-62.7-80.6-115-92.1-25.8-5.9-33.4-16.4-33.4-34 0-19.9 15.8-31.7 41.6-31.7 28.2 0 43.4 10.6 45.7 35.8l58.6-7c-4.7-52.8-41.1-74.5-100.9-74.5-52.8 0-104.4 19.9-104.4 83.9 0 39.9 19.4 65.1 68 76.8 44.9 10.6 79.8 13.8 79.8 45.7 0 21.7-21.1 30.5-61 30.5-59.2 0-83.9-31.1-97.9-73.9-32-96.8-43.6-163-161.3-163-86.1 0-131.8 54.5-131.8 147.2 0 89.1 45.7 137.2 127.9 137.2 66.2 0 97.9-31.1 97.9-31.1z\"]\n};\nvar faShopware = {\n  prefix: 'fab',\n  iconName: 'shopware',\n  icon: [512, 512, [], \"f5b5\", \"M403.5 455.4c-42.6 31.7-94.4 48.7-147.5 48.6-137.2 0-248-111-248-248 0-137.2 111-248 248-248 61.2-.1 120.2 22.6 165.7 63.5 .6 .5 .9 1.2 1.1 1.9s.1 1.5-.3 2.2-.8 1.3-1.5 1.6-1.4 .5-2.2 .4c-18.8-2.5-37.7-3.7-56.7-3.7-129.4 0-222.4 53.5-222.4 155.4 0 109 92.1 145.9 176.8 178.7 33.6 13 65.4 25.4 87 41.6 .4 .3 .8 .8 1.1 1.3s.4 1 .4 1.6-.1 1.1-.4 1.6-.6 .9-1.1 1.3l-.1 0zM503 233.1c-.1-.9-.5-1.8-1.3-2.4-51.8-43-93.6-60.5-144.5-60.5-84.1 0-80.3 52.2-80.3 53.6 0 42.6 52.1 62 112.3 84.5 31.1 11.6 63.2 23.6 92.7 39.9 .4 .2 .9 .4 1.4 .4s1 0 1.5-.2 .9-.4 1.3-.8 .6-.8 .8-1.2c14.1-36 19.5-74.8 16-113.3z\"]\n};\nvar faBlogger = {\n  prefix: 'fab',\n  iconName: 'blogger',\n  icon: [448, 512, [], \"f37c\", \"M162.4 196c4.8-4.9 6.2-5.1 36.4-5.1 27.2 0 28.1 .1 32.1 2.1 5.8 2.9 8.3 7 8.3 13.6 0 5.9-2.4 10-7.6 13.4-2.8 1.8-4.5 1.9-31.1 2.1-16.4 .1-29.5-.2-31.5-.8-10.3-2.9-14.1-17.7-6.6-25.3zm61.4 94.5c-53.9 0-55.8 .2-60.2 4.1-3.5 3.1-5.7 9.4-5.1 13.9 .7 4.7 4.8 10.1 9.2 12 2.2 1 14.1 1.7 56.3 1.2l47.9-.6 9.2-1.5c9-5.1 10.5-17.4 3.1-24.4-5.3-4.7-5-4.7-60.4-4.7zM447.2 420.6c-3.5 28.4-23 50.4-51.1 57.5-7.2 1.8-9.7 1.9-172.9 1.8-157.8 0-165.9-.1-172-1.8-8.4-2.2-15.6-5.5-22.3-10-5.6-3.8-13.9-11.8-17-16.4-3.8-5.6-8.2-15.3-10-22S0 420.3 0 256.3c0-163.1 0-166.6 1.8-173.7 6.3-24.7 25.9-43.6 51.2-49.2 7.3-1.6 332.1-1.9 340-.3 21.2 4.3 37.9 17.1 47.6 36.4 7.7 15.3 7-1.5 7.3 180.6 .2 115.8 0 164.5-.7 170.5zM361.8 235.4c-1.1-5-4.2-9.6-7.7-11.5-1.1-.6-8-1.3-15.5-1.7-12.4-.6-13.8-.8-17.8-3.1-6.2-3.6-7.9-7.6-8-18.3 0-20.4-8.5-39.4-25.3-56.5-12-12.2-25.3-20.5-40.6-25.1-3.6-1.1-11.8-1.5-39.2-1.8-42.9-.5-52.5 .4-67.1 6.2-27 10.7-46.3 33.4-53.4 62.4-1.3 5.4-1.6 14.2-1.9 64.3-.4 62.8 0 72.1 4 84.5 9.7 30.7 37.1 53.4 64.6 58.4 9.2 1.7 122.2 2.1 133.7 .5 20.1-2.7 35.9-10.8 50.7-25.9 10.7-10.9 17.4-22.8 21.8-38.5 3.2-10.9 2.9-88.4 1.7-93.9z\"]\n};\nvar faEdge = {\n  prefix: 'fab',\n  iconName: 'edge',\n  icon: [512, 512, [], \"f282\", \"M120.1 37.4c41-25.2 87.6-38.2 134.9-37.4 168 0 257 123.8 257 219.5-.1 32.7-13 63.9-35.9 87.2-22.9 23.2-54 36.5-86.7 37-75.2 0-91.5-23.1-91.5-32 0-3.8 1.2-6.2 4.8-9.4l1-1.2 .4-1.6c10.5-11.5 15.9-26.2 15.9-41.6 0-78.7-82.2-142.7-184-142.7-37.5-.3-74.5 8.9-107.5 26.9 27-57.5 82.7-97.6 91.3-103.8 .8-.6 .3-.8 .3-.8zm15.6 318.1c-1.4 30 4.6 60 16.4 87.2 13.6 26.4 32.7 51 56.5 69.3-59.5-11.5-111.5-43.9-149.4-89.3-38.1-46.4-59.2-104.3-59.2-164.8 0-51.2 62.4-94.4 136-94.4 36.6-.6 72.4 10.9 101.8 32.7l-3.6 1.2c-51.5 17.6-98.5 90.7-98.5 158.1zM469.8 400l-.7 .1c-11.8 18.8-25.9 35.1-42.2 49.5-30.8 28-68.1 45.5-108.8 49.9-18.6 .3-36.8-3.2-53.8-11.4-25.6-10.3-47.1-30-61.6-53-14.4-23.9-21.1-51.7-19-79.6-.6-20.1 5.4-40.3 15-58.2 13.9 33.1 37.5 61.3 67.6 80.8s65.5 29.5 101.4 28.6c31 .3 62.1-6.7 90.2-20.5l1.9-.9c3.9-2.3 7.7-3.9 11.6 0 4.5 4.9 1.8 9.2-1.2 14-.2 .2-.3 .5-.4 .7z\"]\n};\nvar faIoxhost = {\n  prefix: 'fab',\n  iconName: 'ioxhost',\n  icon: [640, 512, [], \"f208\", \"M616 160l-67.3 0C511.2 70.7 422.9 8 320 8 183 8 72 119 72 256 72 272.4 73.6 288.5 76.7 304L24 304c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24l67.3 0c37.5 89.3 125.8 152 228.7 152 137 0 248-111 248-248 0-16.4-1.6-32.5-4.7-48l52.7 0c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24zm-96 96c0 110.5-89.5 200-200 200-75.7 0-141.6-42-175.5-104L424 352c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24l-298.2 0c-3.8-15.4-5.8-31.4-5.8-48 0-110.5 89.5-200 200-200 75.7 0 141.6 42 175.5 104L216 160c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24l298.2 0c3.8 15.4 5.8 31.4 5.8 48zM216 232l208 0c13.3 0 24 10.7 24 24 0 13.2-10.7 24-24 24l-208 0c-13.3 0-24-10.7-24-24 0-13.2 10.7-24 24-24z\"]\n};\nvar faSchlix = {\n  prefix: 'fab',\n  iconName: 'schlix',\n  icon: [448, 512, [], \"f3ea\", \"M350.5 157.7l-54.2-46.1 73.4-39 78.3 44.2-97.5 40.9zM192 122.1l45.7-28.2 34.7 34.6-55.4 29-25-35.4zm-65.1 6.6l31.9-22.1 17.2 28.4-36.7 22.5-12.4-28.8zm-23.3 88.2l-8.8-34.8 29.6-18.3 13.1 35.3-33.9 17.8zM82.4 133.2l23.9-18.1 8.9 24-26.7 18.3-6.1-24.2zM59 206.5l-3.6-28.4 22.3-15.5 6.1 28.7-24.8 15.2zM28.4 223.1l20.8-12.8 3.3 33.4-22.9 12-1.2-32.6zM1.4 268L20.6 257.8 21 296 0 304.8 1.4 268zm59.1 59.3l-28.3 8.3-1.6-46.8 25.1-10.7 4.8 49.2zM99 263.2l-31.1 13-5.2-40.8 27.4-14.4 8.9 42.2zM123.2 377l-41.6 5.9-8.1-63.5 35.2-10.8 14.5 68.4zm28.5-139.9l21.2 57.1-46.2 13.6-13.7-54.1 38.7-16.6zm85.7 230.5l-70.9-3.3-24.3-95.8 55.2-8.6 40 107.7zM152.5 187.9l42.2-22.4 28 45.9-50.8 21.3-19.4-44.8zm41 94.9l61.3-18.7 52.8 86.6-79.8 11.3-34.3-79.2zm51.4-85.6l67.3-28.8 65.5 65.4-88.6 26.2-44.2-62.8z\"]\n};\nvar faDAndD = {\n  prefix: 'fab',\n  iconName: 'd-and-d',\n  icon: [576, 512, [], \"f38d\", \"M82.9 98.9c-.6-17.2 2-33.8 12.7-48.2 .3 7.4 1.2 14.5 4.2 21.6 5.9-27.5 19.7-49.3 42.3-65.5-1.9 5.9-3.5 11.8-3 17.7 8.7-7.4 18.8-17.8 44.4-22.7 14.7-2.8 29.7-2 42.1 1 38.5 9.3 61 34.3 69.7 72.3 5.3 23.1 .7 45-8.3 66.4-5.2 12.4-12 24.4-20.7 35.1-2-1.9-3.9-3.8-5.8-5.6-42.8-40.8-26.8-25.2-37.4-37.4-1.1-1.2-1-2.2-.1-3.6 8.3-13.5 11.8-28.2 10-44-1.1-9.8-4.3-18.9-11.3-26.2-14.5-15.3-39.2-15-53.5 .6-11.4 12.5-14.1 27.4-10.9 43.6 .2 1.3 .4 2.7 0 3.9-3.4 13.7-4.6 27.6-2.5 41.6 .1 .5 .1 1.1 .1 1.6 0 .3-.1 .5-.2 1.1-21.8-11-36-28.3-43.2-52.2-8.3 17.8-11.1 35.5-6.6 54.1-15.6-15.2-21.3-34.3-22-55.2zM552.5 222.1c-11.6-11.6-25-20.4-40.1-26.6-12.8-5.2-26-7.9-39.9-7.1-10 .6-19.6 3.1-29 6.4-2.5 .9-5.1 1.6-7.7 2.2-4.9 1.2-7.3-3.1-4.7-6.8 3.2-4.6 3.4-4.2 15-12 .6-.4 1.2-.8 2.2-1.5l-2.5 0c-.6 0-1.2 .2-1.9 .3-19.3 3.3-30.7 15.5-48.9 29.6-10.4 8.1-13.8 3.8-12-.5 1.4-3.5 3.3-6.7 5.1-10 1-1.8 2.3-3.4 3.5-5.1-.2-.2-.5-.3-.7-.5-27 18.3-46.7 42.4-57.7 73.3 .3 .3 .7 .6 1 .9 .3-.6 .5-1.2 .9-1.7 10.4-12.1 22.8-21.8 36.6-29.8 18.2-10.6 37.5-18.3 58.7-20.2 4.3-.4 8.7-.1 13.1-.1-1.8 .7-3.5 .9-5.3 1.1-18.5 2.4-35.5 9-51.5 18.5-30.2 17.9-54.5 42.2-75.1 70.4-.3 .4-.4 .9-.7 1.3 14.5 5.3 24 17.3 36.1 25.6 .2-.1 .3-.2 .4-.4l1.2-2.7c12.2-26.9 27-52.3 46.7-74.5 16.7-18.8 38-25.3 62.5-20 5.9 1.3 11.4 4.4 17.2 6.8 2.3-1.4 5.1-3.2 8-4.7 8.4-4.3 17.4-7 26.7-9 14.7-3.1 29.5-4.9 44.5-1.3l0-.5c-.5-.4-1.2-.8-1.7-1.4zM317.1 397.6c-39.4-33-22.8-19.5-42.7-35.6-.8 .9 0-.2-1.9 3-11.2 19.1-25.5 35.3-44 47.6-10.3 6.8-21.5 11.8-34.1 11.8-21.6 0-38.2-9.5-49.4-27.8-12-19.5-13.3-40.7-8.2-62.6 7.8-33.8 30.1-55.2 38.6-64.3-18.7-6.2-33 1.7-46.4 13.9 .8-13.9 4.3-26.2 11.8-37.3-24.3 10.6-45.9 25-64.8 43.9-.3-5.8 5.4-43.7 5.6-44.7 .3-2.7-.6-5.3-3-7.4-24.2 24.7-44.5 51.8-56.1 84.6 7.4-5.9 14.9-11.4 23.6-16.2-8.3 22.3-19.6 52.8-7.8 101.1 4.6 19 11.9 36.8 24.1 52.3 2.9 3.7 6.3 6.9 9.5 10.3 .2-.2 .4-.3 .6-.5-1.4-7-2.2-14.1-1.5-21.9 2.2 3.2 3.9 6 5.9 8.6 12.6 16 28.7 27.4 47.2 35.6 25 11.3 51.1 13.3 77.9 8.6 54.9-9.7 90.7-48.6 116-98.8 1-1.8 .6-2.9-.9-4.2zm172-46.4c-9.5-3.1-22.2-4.2-28.7-2.9 9.9 4 14.1 6.6 18.8 12 12.6 14.4 10.4 34.7-5.4 45.6-11.7 8.1-24.9 10.5-38.9 9.1-1.2-.1-2.3-.4-3-.6 2.8-3.7 6-7 8.1-10.8 9.4-16.8 5.4-42.1-8.7-56.1-2.1-2.1-4.6-3.9-7-5.9-.3 1.3-.1 2.1 .1 2.8 4.2 16.6-8.1 32.4-24.8 31.8-7.6-.3-13.9-3.8-19.6-8.5-19.5-16.1-39.1-32.1-58.5-48.3-5.9-4.9-12.5-8.1-20.1-8.7-4.6-.4-9.3-.6-13.9-.9-5.9-.4-8.8-2.8-10.4-8.4-.9-3.4-1.5-6.8-2.2-10.2-1.5-8.1-6.2-13-14.3-14.2-4.4-.7-8.9-1-13.3-1.5-13-1.4-19.8-7.4-22.6-20.3-5 11-1.6 22.4 7.3 29.9 4.5 3.8 9.3 7.3 13.8 11.2 4.6 3.8 7.4 8.7 7.9 14.8 .4 4.7 .8 9.5 1.8 14.1 2.2 10.6 8.9 18.4 17 25.1 16.5 13.7 33 27.3 49.5 41.1 17.9 15 13.9 32.8 13 56-.9 22.9 12.2 42.9 33.5 51.2 1 .4 2 .6 3.6 1.1-15.7-18.2-10.1-44.1 .7-52.3 .3 2.2 .4 4.3 .9 6.4 9.4 44.1 45.4 64.2 85 56.9 16-2.9 30.6-8.9 42.9-19.8 2-1.8 3.7-4.1 5.9-6.5-19.3 4.6-35.8 .1-50.9-10.6 .7-.3 1.3-.3 1.9-.3 21.3 1.8 40.6-3.4 57-17.4 19.5-16.6 26.6-42.9 17.4-66-8.3-20.1-23.6-32.3-43.8-38.9zM99.8 179.3c-5.3-9.2-13.2-15.6-22.1-21.3 13.7-.5 26.6 .2 39.6 3.7-7-12.2-8.5-24.7-5-38.7 5.3 11.9 13.7 20.1 23.6 26.8 19.7 13.2 35.7 19.6 46.7 30.2 3.4 3.3 6.3 7.1 9.6 10.9-.8-2.1-1.4-4.1-2.2-6-5-10.6-13-18.6-22.6-25-1.8-1.2-2.8-2.5-3.4-4.5-3.3-12.5-3-25.1-.7-37.6 1-5.5 2.8-10.9 4.5-16.3 .8-2.4 2.3-4.6 4-6.6 .6 6.9 0 25.5 19.6 46 10.8 11.3 22.4 21.9 33.9 32.7 9 8.5 18.3 16.7 25.5 26.8 1.1 1.6 2.2 3.3 3.8 4.7-5-13-14.2-24.1-24.2-33.8-9.6-9.3-19.4-18.4-29.2-27.4-3.3-3-4.6-6.7-5.1-10.9-1.2-10.4 0-20.6 4.3-30.2 .5-1 1.1-2 1.9-3.3 .5 4.2 .6 7.9 1.4 11.6 4.8 23.1 20.4 36.3 49.3 63.5 10 9.4 19.3 19.2 25.6 31.6 4.8 9.3 7.3 19 5.7 29.6-.1 .6 .5 1.7 1.1 2 6.2 2.6 10 6.9 9.7 14.3 7.7-2.6 12.5-8 16.4-14.5 4.2 20.2-9.1 50.3-27.2 58.7 .4-4.5 5-23.4-16.5-27.7-6.8-1.3-12.8-1.3-22.9-2.1 4.7-9 10.4-20.6 .5-22.4-24.9-4.6-52.8 1.9-57.8 4.6 8.2 .4 16.3 1 23.5 3.3-2 6.5-4 12.7-5.8 18.9-1.9 6.5 2.1 14.6 9.3 9.6 1.2-.9 2.3-1.9 3.3-2.7-3.1 17.9-2.9 15.9-2.8 18.3 .3 10.2 9.5 7.8 15.7 7.3-2.5 11.8-29.5 27.3-45.4 25.8 7-4.7 12.7-10.3 15.9-17.9-6.5 .8-12.9 1.6-19.2 2.4l-.3-.9c4.7-3.4 8-7.8 10.2-13.1 8.7-21.1-3.6-38-25-39.9-9.1-.8-17.8 .8-25.9 5.5 6.2-15.6 17.2-26.6 32.6-34.5-15.2-4.3-8.9-2.7-24.6-6.3 14.6-9.3 30.2-13.2 46.5-14.6-5.2-3.2-48.1-3.6-70.2 20.9 7.9 1.4 15.5 2.8 23.2 4.2-23.8 7-44 19.7-62.4 35.6 1.1-4.8 2.7-9.5 3.3-14.3 .6-4.5 .8-9.2 .1-13.6-1.5-9.4-8.9-15.1-19.7-16.3-7.9-.9-15.6 .1-23.3 1.3-.9 .1-1.7 .3-2.9 0 15.8-14.8 36-21.7 53.1-33.5 6-4.5 6.8-8.2 3-14.9zm128.4 26.8c3.3 16 12.6 25.5 23.8 24.3-4.6-11.3-12.1-19.5-23.8-24.3z\"]\n};\nvar faVuejs = {\n  prefix: 'fab',\n  iconName: 'vuejs',\n  icon: [448, 512, [], \"f41f\", \"M356.9 64.3l-76.9 0-56 88.6-48-88.6-176 0 224 383.7 224-383.7-91.1 0zM55.7 96.3l53.8 0 114.5 198.2 114.4-198.2 53.8 0-168.2 288.2-168.3-288.2z\"]\n};\nvar faMeta = {\n  prefix: 'fab',\n  iconName: 'meta',\n  icon: [640, 512, [], \"e49b\", \"M640 317.9c0 91.3-39.4 148.5-110.3 148.5-62.6 0-95.8-34.6-156.9-136.6l-31.4-52.6c-8.3-12.5-14.5-24.2-21.2-35-20.1 33.8-47.1 83-47.1 83-67 116.6-104.6 141.2-156.9 141.2-72.8 0-116.2-57.3-116.2-145.9 0-143 79.8-278.1 183.9-278.1 50.2 0 93.8 24.7 144.8 89.5 37.1-50.1 78.1-89.5 130.6-89.5 99.1 0 180.7 125.7 180.7 275.5zM287.4 192.2c-42.9-62.1-70.9-80.5-104.4-80.5-61.9 0-113.8 106.1-113.8 210 0 48.5 18.5 75.7 49.6 75.7 30.2 0 49-19 103.2-103.8 0 0 24.7-39.1 65.4-101.4zM531.2 397.4c32.2 0 46.9-27.5 46.9-74.9 0-124.2-54.3-225.4-123.2-225.4-33.2 0-61.1 25.9-94.9 78 9.4 13.8 19.1 29 29.3 45.4l37.5 62.4c58.7 94.1 73.5 114.5 104.4 114.5z\"]\n};\nvar faCreativeCommonsShare = {\n  prefix: 'fab',\n  iconName: 'creative-commons-share',\n  icon: [512, 512, [], \"f4f2\", \"M255.6 8C397.4 8 504 118.1 504 256 504 403.1 385.5 504 255.6 504 121.6 504 8 394.5 8 256 8 123.1 112.7 8 255.6 8zm.8 44.7c-118.2 0-203.7 97.9-203.7 203.3 0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3zm101 132.4c7.8 0 13.7 6.1 13.7 13.7l0 182.5c0 7.7-6.1 13.7-13.7 13.7l-135.1 0c-7.7 0-13.7-6-13.7-13.7l0-54-54 0c-7.8 0-13.7-6-13.7-13.7l0-182.5c0-8.2 6.6-12.7 12.4-13.7l136.4 0c7.7 0 13.7 6 13.7 13.7l0 54 54 0zM167.9 300.3l40.7 0 0-101.4c0-7.4 5.8-12.6 12-13.7l55.8 0 0-40.3-108.5 0 0 155.4zm176.2-88.1l-108.5 0 0 155.4 108.5 0 0-155.4z\"]\n};\nvar faStudiovinari = {\n  prefix: 'fab',\n  iconName: 'studiovinari',\n  icon: [512, 512, [], \"f3f8\", \"M480.7 187.7l4.2 28 0 28-25.1 44.1-39.8 78.4-56.1 67.5-79.1 37.8-17.7 24.5-7.7 12-9.6 4s17.3-63.6 19.4-63.6 20.3 .7 20.3 .7l66.7-38.6-92.5 26.1-55.9 36.8-22.8 28-6.6 1.4 20.8-73.6 6.9-5.5 20.7 12.9 88.3-45.2 56.8-51.5 14.8-68.4-125.4 23.3 15.2-18.2-173.4-53.3 81.9-10.5-166-122.9 114.9 18.1-101.3-108 252.9 126.6-31.5-38 124.4 74.4-143.3-99 18.7 38.4-49.6-18.1-45.5-84.3 194.6 122-42.9-55.8 108 96.4 12-8.9-21-16.4 4.2-37.8 37.8-10.4 29.2 24.7 11.5 4.2-7 6.2 8.5 12-13.1 7.4-10.3 20.2 10.5 23.9z\"]\n};\nvar faBitbucket = {\n  prefix: 'fab',\n  iconName: 'bitbucket',\n  icon: [512, 512, [61810], \"f171\", \"M22.2 32c-2.1 0-4.2 .4-6.1 1.1s-3.7 1.9-5.2 3.4-2.7 3.2-3.5 5.1-1.3 4-1.3 6.1c0 .9 .1 1.9 .2 2.8L74.1 462.7c.8 5.1 3.4 9.7 7.3 13s8.8 5.2 14 5.2l325.7 0c3.8 .1 7.5-1.3 10.5-3.7s4.9-5.9 5.5-9.7L505 50.7c.7-4.2-.3-8.4-2.8-11.9s-6.2-5.7-10.4-6.4c-.9-.1-1.9-.2-2.8-.2L22.2 32zM308.1 329.8l-104 0-28.1-147 157.3 0-25.2 147z\"]\n};\nvar faVk = {\n  prefix: 'fab',\n  iconName: 'vk',\n  icon: [448, 512, [], \"f189\", \"M31.5 63.5C0 95 0 145.7 0 247L0 265C0 366.3 0 417 31.5 448.5S113.7 480 215 480l17.9 0c101.4 0 152.1 0 183.5-31.5S448 366.3 448 265l0-17.9c0-101.4 0-152.1-31.5-183.5S334.3 32 233 32L215 32C113.7 32 63 32 31.5 63.5zM75.6 168.3l51.1 0c1.7 85.5 39.4 121.7 69.3 129.2l0-129.2 48.2 0 0 73.7c29.5-3.2 60.5-36.8 70.9-73.7l48.2 0c-3.9 19.2-11.8 37.3-23.1 53.3s-25.7 29.5-42.5 39.6c18.7 9.3 35.2 22.4 48.4 38.5s22.9 34.9 28.3 55l-53 0c-4.9-17.5-14.8-33.1-28.6-45s-30.7-19.4-48.7-21.6l0 66.6-5.8 0c-102.1 0-160.3-70-162.8-186.5z\"]\n};\nvar faGithub = {\n  prefix: 'fab',\n  iconName: 'github',\n  icon: [512, 512, [], \"f09b\", \"M216.5 362.5c-66-8-112.5-55.5-112.5-117 0-25 9-52 24-70-6.5-16.5-5.5-51.5 2-66 20-2.5 47 8 63 22.5 19-6 39-9 63.5-9s44.5 3 62.5 8.5c15.5-14 43-24.5 63-22 7 13.5 8 48.5 1.5 65.5 16 19 24.5 44.5 24.5 70.5 0 61.5-46.5 108-113.5 116.5 17 11 28.5 35 28.5 62.5l0 52C323 491.5 335.5 500 350.5 494 441 459.5 512 369 512 257 512 115.5 397 0 255.5 0S0 115.5 0 257c0 111 70.5 203 165.5 237.5 13.5 5 26.5-4 26.5-17.5l0-40c-7 3-16 5-24 5-33 0-52.5-18-66.5-51.5-5.5-13.5-11.5-21.5-23-23-6-.5-8-3-8-6 0-6 10-10.5 20-10.5 14.5 0 27 9 40 27.5 10 14.5 20.5 21 33 21s20.5-4.5 32-16c8.5-8.5 15-16 21-21z\"]\n};\nvar faCodiepie = {\n  prefix: 'fab',\n  iconName: 'codiepie',\n  icon: [512, 512, [], \"f284\", \"M442.5 202.9c30.7 0 33.5 53.1-.3 53.1l-10.8 0 0 44.3-26.6 0 0-97.4 37.7 0zM492 352.6C449.9 444.5 370.4 504 268 504 131 504 20 393 20 256S131 8 268 8c97.4 0 172.8 53.7 218.2 138.4L300.2 255.2 492 352.6zm-38.5 12.5l-60.3-30.7c-27.1 44.3-70.4 71.4-122.4 71.4-82.5 0-149.2-66.7-149.2-148.9 0-82.5 66.7-149.2 149.2-149.2 48.4 0 88.9 23.5 116.9 63.4l59.5-34.6C406.5 73.9 342.5 36.5 268 36.5 146.8 36.5 48.5 134.8 48.5 256S146.8 475.5 268 475.5c78.6 0 146.5-42.1 185.5-110.4z\"]\n};\nvar faPiedPiper = {\n  prefix: 'fab',\n  iconName: 'pied-piper',\n  icon: [448, 512, [], \"f2ae\", \"M440.2 23.2c-26.7 6.8-68.1 28.5-114.6 67.5-30.9-17.5-65.8-26.7-101.4-26.7-114.9 0-208 93.1-208 208s93.1 208 208 208 208-93.1 208-208c.1-54.1-21-106.1-58.7-144.8-6.6 8.5-12.3 17.7-17 27.4 28.9 32.3 44.8 74.1 44.9 117.4 0 97.7-79.4 177.1-177.1 177.1-30.8 0-61-8.1-87.6-23.4 82.9-107.3 150.8-37.8 184.3-226.6 5.8-32.6 28-94.3 126.2-160.2 8.1-5.4 2.4-18.1-7-15.7zM109.3 406.4C89.8 389.8 74.2 369.2 63.5 346s-16.3-48.5-16.3-74c0-97.7 79.4-177.1 177.1-177.1 26.6 0 52.8 6.1 76.6 17.8-66 62.1-126.9 152.9-191.6 293.8z\"]\n};\nvar faRaspberryPi = {\n  prefix: 'fab',\n  iconName: 'raspberry-pi',\n  icon: [448, 512, [], \"f7bb\", \"M392.5 232.5l-3.7-6.5c.1-46.4-21.4-65.3-46.5-79.7 7.6-2 15.4-3.6 17.6-13.2 13.1-3.3 15.8-9.4 17.1-15.8 3.4-2.3 14.8-8.7 13.6-19.7 6.4-4.4 10-10.1 8.1-18.1 6.9-7.5 8.7-13.7 5.8-19.4 8.3-10.3 4.6-15.6 1.1-20.9 6.2-11.2 .7-23.2-16.6-21.2-6.9-10.1-21.9-7.8-24.2-7.8-2.6-3.2-6-6-16.5-4.7-6.8-6.1-14.4-5-22.3-2.1-9.3-7.3-15.5-1.4-22.6 .8-11.3-3.6-13.9 1.3-19.4 3.4-12.3-2.6-16.1 3-22 8.9l-6.9-.1c-18.6 10.8-27.8 32.8-31.1 44.1-3.3-11.3-12.5-33.3-31.1-44.1l-6.9 .1c-5.9-5.9-9.7-11.5-22-8.9-5.6-2-8.1-7-19.4-3.4-4.6-1.4-8.9-4.4-13.9-4.3-2.6 .1-5.5 1-8.7 3.5-7.9-3-15.5-4-22.3 2.1-10.5-1.3-14 1.4-16.5 4.7-2.3 0-17.3-2.3-24.2 7.8-17.3-2-22.7 10-16.5 21.2-3.5 5.4-7.2 10.7 1.1 20.9-2.9 5.7-1.1 11.9 5.8 19.4-1.8 8 1.8 13.7 8.1 18.1-1.2 11 10.2 17.4 13.6 19.7 1.3 6.4 4 12.4 17.1 15.8 2.2 9.5 10 11.2 17.6 13.2-25.1 14.4-46.6 33.3-46.5 79.7l-3.7 6.5c-28.8 17.2-54.7 72.7-14.2 117.7 2.6 14.1 7.1 24.2 11 35.4 5.9 45.2 44.5 66.3 54.6 68.8 14.9 11.2 30.8 21.8 52.2 29.2 20.3 20.6 42.3 28.4 64.3 28.4l1 0c22.1 0 44-7.8 64.2-28.4 21.5-7.4 37.3-18 52.2-29.2 10.2-2.5 48.7-23.6 54.6-68.8 3.9-11.2 8.4-21.3 11-35.4 40.6-45.1 14.7-100.5-14-117.7zm-22.2-8c-1.5 18.7-98.9-65.1-82.1-67.9 45.7-7.5 83.6 19.2 82.1 67.9zm-43 93.1c-24.5 15.8-59.8 5.6-78.8-22.8s-14.6-64.2 9.9-80 59.8-5.6 78.8 22.8 14.6 64.2-9.9 80zM259.4 29.3c.8 4.2 1.8 6.8 2.9 7.6 5.4-5.8 9.8-11.7 16.8-17.3 0 3.3-1.7 6.8 2.5 9.4 3.7-5 8.8-9.5 15.5-13.3-3.2 5.6-.6 7.3 1.2 9.6 5.1-4.4 10-8.8 19.4-12.3-2.6 3.1-6.2 6.2-2.4 9.8 5.3-3.3 10.6-6.6 23.1-8.9-2.8 3.1-8.7 6.3-5.1 9.4 6.6-2.5 14-4.4 22.1-5.4-3.9 3.2-7.1 6.3-3.9 8.8 7.1-2.2 16.9-5.1 26.4-2.6l-6 6.1c-.7 .8 14.1 .6 23.9 .8-3.6 5-7.2 9.7-9.3 18.2 1 1 5.8 .4 10.4 0-4.7 9.9-12.8 12.3-14.7 16.6 2.9 2.2 6.8 1.6 11.2 .1-3.4 6.9-10.4 11.7-16 17.3 1.4 1 3.9 1.6 9.7 .9-5.2 5.5-11.4 10.5-18.8 15 1.3 1.5 5.8 1.5 10 1.6-6.7 6.5-15.3 9.9-23.4 14.2 4 2.7 6.9 2.1 10 2.1-5.7 4.7-15.4 7.1-24.4 10 1.7 2.7 3.4 3.4 7.1 4.1-9.5 5.3-23.2 2.9-27 5.6 .9 2.7 3.6 4.4 6.7 5.8-15.4 .9-57.3-.6-65.4-32.3 15.7-17.3 44.4-37.5 93.7-62.6-38.4 12.8-73 30-102 53.5-34.3-15.9-10.8-55.9 5.8-71.8zM225 143.9c24.2-.3 54.1 17.8 54 34.7-.1 15-21 27.1-53.8 26.9-32.1-.4-53.7-15.2-53.6-29.8 0-11.9 26.2-32.5 53.4-31.8zM102 131.1c3.7-.7 5.4-1.5 7.1-4.1-9-2.8-18.7-5.3-24.4-10 3.1 0 6 .7 10-2.1-8.1-4.3-16.7-7.7-23.4-14.2 4.2-.1 8.7 0 10-1.6-7.4-4.5-13.6-9.5-18.8-15 5.8 .7 8.3 .1 9.7-.9-5.6-5.6-12.7-10.4-16-17.3 4.3 1.5 8.3 2 11.2-.1-1.9-4.2-10-6.7-14.7-16.6 4.6 .4 9.4 1 10.4 0-2.1-8.5-5.8-13.3-9.3-18.2 9.8-.1 24.6 0 23.9-.8l-6-6.1c9.5-2.5 19.3 .4 26.4 2.6 3.2-2.5-.1-5.6-3.9-8.8 8.1 1.1 15.4 2.9 22.1 5.4 3.5-3.1-2.3-6.3-5.1-9.4 12.5 2.3 17.8 5.6 23.1 8.9 3.8-3.6 .2-6.7-2.4-9.8 9.4 3.4 14.3 7.9 19.4 12.3 1.7-2.3 4.4-4 1.2-9.6 6.7 3.8 11.8 8.3 15.5 13.3 4.1-2.6 2.5-6.2 2.5-9.4 7 5.6 11.4 11.5 16.8 17.3 1.1-.8 2-3.4 2.9-7.6 16.6 15.9 40.1 55.9 6 71.8-29-23.5-63.6-40.7-102-53.5 49.3 25 78 45.3 93.7 62.6-8 31.8-50 33.2-65.4 32.3 3.1-1.4 5.8-3.2 6.7-5.8-4-2.8-17.6-.4-27.2-5.6zm60.1 24.1c16.8 2.8-80.6 86.5-82.1 67.9-1.5-48.7 36.5-75.5 82.1-67.9zM58.7 342c-23.7-18.8-31.3-73.7 12.6-98.3 26.5-7 9 107.8-12.6 98.3zm91 98.2c-13.3 7.9-45.8 4.7-68.8-27.9-15.5-27.4-13.5-55.2-2.6-63.4 16.3-9.8 41.5 3.4 60.9 25.6 16.9 20 24.6 55.3 10.5 65.7zM123.3 320.5c-24.5-15.8-28.9-51.6-9.9-80s54.3-38.6 78.8-22.8 28.9 51.6 9.9 80c-19.1 28.4-54.4 38.6-78.8 22.8zM225.5 496c-29.4 1.2-58.2-23.7-57.8-32.3-.4-12.7 35.8-22.6 59.3-22 23.7-1 55.6 7.5 55.7 18.9 .5 11-28.8 35.9-57.2 35.4zm58.9-124.9c.2 29.7-26.2 53.8-58.8 54s-59.2-23.8-59.4-53.4l0-.6c-.2-29.7 26.2-53.8 58.8-54s59.2 23.8 59.4 53.4l0 .6zm82.2 42.7c-25.3 34.6-59.6 35.9-72.3 26.3-13.3-12.4-3.2-50.9 15.1-72 20.9-23.3 43.3-38.5 58.9-26.6 10.5 10.3 16.7 49.1-1.7 72.3zm22.9-73.2c-21.5 9.4-39-105.3-12.6-98.3 43.9 24.7 36.3 79.6 12.6 98.3z\"]\n};\nvar faCss3 = {\n  prefix: 'fab',\n  iconName: 'css3',\n  icon: [512, 512, [], \"f13c\", \"M480 32l-64 368-223.3 80-192.7-80 19.6-94.8 82 0-8 40.6 116.4 44.4 134.1-44.4 18.8-97.1-333.4 0 16-82 333.7 0 10.5-52.7-333.4 0 16.3-82 407.4 0z\"]\n};\nvar faHubspot = {\n  prefix: 'fab',\n  iconName: 'hubspot',\n  icon: [448, 512, [], \"f3b2\", \"M235.8 211.6c-25.1 23.7-40.8 57.3-40.8 94.6 0 29.3 9.7 56.3 26 78L171.5 434c-4.4-1.6-9.1-2.5-14-2.5-10.8 0-20.9 4.2-28.5 11.8s-11.8 17.8-11.8 28.6 4.2 20.9 11.8 28.5 17.8 11.6 28.5 11.6c10.8 0 20.9-3.9 28.6-11.6 7.6-7.6 11.8-17.8 11.8-28.5 0-4.2-.6-8.2-1.9-12.1l50-50.2c22 16.9 49.4 26.9 79.3 26.9 71.9 0 130-58.3 130-130.2 0-65.2-47.7-119.2-110.2-128.7l0-61.6c17.5-7.4 28.2-23.8 28.2-42.9 0-26.1-20.9-47.9-47-47.9S279.6 47 279.6 73.1c0 19.1 10.7 35.5 28.2 42.9l0 61.2c-15.2 2.1-29.6 6.7-42.7 13.6-27.6-20.9-117.5-85.7-168.9-124.8 1.2-4.4 2-9 2-13.8 0-28.8-23.5-52.2-52.4-52.2-28.8 0-52.2 23.4-52.2 52.2 0 28.9 23.4 52.3 52.2 52.3 9.8 0 18.9-2.9 26.8-7.6L235.8 211.6zm89.5 25.6a69 69 0 1 1 0 138 69 69 0 1 1 0-138z\"]\n};\nvar faCmplid = {\n  prefix: 'fab',\n  iconName: 'cmplid',\n  icon: [640, 512, [], \"e360\", \"M226.1 388.2c0-.7-.2-1.5-.6-2.1s-1-1.1-1.7-1.4c-.5-.2-1.1-.4-1.6-.4l-149.6 0c-3.1 0-6.2-.8-8.9-2.2s-5.1-3.5-6.9-6.1-2.9-5.5-3.3-8.6 0-6.2 1.1-9.1L81.6 255.7c2-7.2 6.2-13.5 12-18.2s12.9-7.4 20.4-7.8l148.6 0c1.5-.1 2.9-.6 4-1.6s2-2.2 2.4-3.6l10.8-41.1c.4-1 .3-2-.1-2.9s-1.2-1.6-2.1-2c-.4-.2-.9-.3-1.4-.3-.1 0-.1 0-.2 0l-148.5 0c-22.2 1.2-43.4 9.2-60.8 23s-30 32.7-36.2 54.1L3.5 358.8c-3.2 8.7-4.2 18-3 27.1s4.6 17.9 9.9 25.5 12.3 13.8 20.5 18 17.3 6.5 26.5 6.6c1 0 1.9 0 2.9-.1l148.6 0c1.5-.1 2.9-.7 4-1.6s2-2.2 2.4-3.6l10.7-41.1c.2-.5 .3-.9 .3-1.4zm80.5-307c.2-.4 .3-.9 .3-1.4 0-.5-.1-1-.3-1.5s-.5-.9-.8-1.2-.8-.6-1.2-.8-1-.3-1.5-.3l-41.2 0c-1.5 .1-2.9 .6-4 1.6s-2 2.2-2.4 3.6l-21.3 80.9 51.1 0 21.4-80.9zm-126.3 287l51.1 0 32-122.6-51.1 0-32 122.6zM511.9 79.7c0-1-.5-1.9-1.2-2.6s-1.7-1.1-2.6-1.1c-.1 0-.1 0-.2 0l-41 0c-1.5 .1-2.9 .6-4.1 1.5s-2 2.2-2.5 3.6L368.9 430.6c-.2 .4-.3 .9-.3 1.3 0 1 .4 2 1.1 2.7s1.7 1.1 2.7 1.1l41.2 0c1.5-.1 2.9-.6 4-1.6s2-2.2 2.4-3.6L511.5 81.2c.2-.5 .3-1 .3-1.5zM324.6 384.5l-41 0c-1.5 .1-2.9 .7-4 1.6s-2 2.2-2.4 3.6l-10.7 41.1c-.2 .4-.3 .9-.3 1.4 0 .5 .1 1 .3 1.5s.5 .9 .8 1.2 .8 .6 1.2 .8 1 .3 1.5 .3c.1 0 .2 0 .3 0l40.9 0c1.5-.1 2.9-.6 4-1.6s2-2.2 2.4-3.6l10.8-41.1c.2-.6 .3-1.2 .3-1.8s-.3-1.2-.6-1.7-.8-.9-1.3-1.2-1.2-.4-1.8-.4c-.1 0-.2 0-.3 0l0 0zM636 76.1l-41 0c-1.5 .1-2.9 .6-4 1.5s-2 2.2-2.4 3.6L497.1 430.6c-.2 .4-.2 .9-.2 1.3 0 1 .4 2 1.1 2.7s1.7 1.1 2.7 1.1l41.1 0c1.5-.1 2.9-.6 4-1.6s2-2.2 2.4-3.6L639.7 81.2c.2-.5 .3-1 .3-1.5-.1-1-.5-1.9-1.2-2.5s-1.6-1-2.6-1c-.1 0-.1 0-.2 0l0-.1zM371.6 225.2l10.8-41.1c.2-.4 .2-.9 .2-1.4 0-1-.4-2-1.1-2.7s-1.7-1.1-2.7-1.1l-41.3 0c-1.5 .1-2.9 .7-4 1.6s-2 2.2-2.4 3.6l-10.8 41.1c-.2 .5-.3 1-.3 1.5l0 .2c.1 1 .5 1.8 1.2 2.5s1.6 1 2.6 1c.1 0 .2 0 .3 0l41.1 0c1.5-.1 2.9-.6 4-1.6s2-2.2 2.4-3.6z\"]\n};\nvar faDyalog = {\n  prefix: 'fab',\n  iconName: 'dyalog',\n  icon: [448, 512, [], \"f399\", \"M16 32l0 119.2 64 0 0-55.2 107.2 0C300.6 96 368 176.2 368 255.9 368 332 309.4 416 187.2 416l-171.2 0 0 64 171.2 0C347.9 480 432 367.3 432 255.9 432 197.2 409.9 142.5 369.7 101.6 324.9 56 261.7 32 187.2 32L16 32z\"]\n};\nvar faElementor = {\n  prefix: 'fab',\n  iconName: 'elementor',\n  icon: [512, 512, [], \"f430\", \"M.5 256c0 141 113.6 255 254.6 255 142 0 256-114 256-255 0-140-114-253.9-256-253.9-141 0-254.6 113.9-254.6 253.9zM192.1 150l0 213-43 0 0-213 43 0zm42 0l128 0 0 43-128 0 0-43zm128 85l0 43-128 0 0-43 128 0zm-128 85l128 0 0 43-128 0 0-43z\"]\n};\nvar faFirstOrder = {\n  prefix: 'fab',\n  iconName: 'first-order',\n  icon: [448, 512, [], \"f2b0\", \"M13.3 229.2c.1-.1 .2-.3 .3-.4 0 .1 0 .3-.1 .4l-.2 0zM224.4 96.6c-7.1 0-14.6 .6-21.4 1.7l3.7 67.4-22-64c-14.3 3.7-27.7 9.4-40 16.6l29.4 61.4-45.1-50.9c-11.4 8.9-21.7 19.1-30.6 30.9l50.6 45.4-61.1-29.7c-7.1 12.3-12.9 25.7-16.6 40l64.3 22.6-68-4c-.9 7.1-1.4 14.6-1.4 22s.6 14.6 1.4 21.7l67.7-4-64 22.6c3.7 14.3 9.4 27.7 16.6 40.3L149 306.9 98.1 352c8.9 11.7 19.1 22.3 30.9 30.9l44.9-50.9-29.5 61.4c12.3 7.4 25.7 13.1 40 16.9l22.3-64.6-4 68c7.1 1.1 14.6 1.7 21.7 1.7 7.4 0 14.6-.6 21.7-1.7l-4-68.6 22.6 65.1c14.3-4 27.7-9.4 40-16.9l-29.4-61.3 44.9 50.9c11.7-8.9 22-19.1 30.6-30.9l-50.6-45.1 61.1 29.4c7.1-12.3 12.9-25.7 16.6-40.3l-64-22.3 67.4 4c1.1-7.1 1.4-14.3 1.4-21.7s-.3-14.9-1.4-22l-67.7 4 64-22.3c-3.7-14.3-9.1-28-16.6-40.3l-60.9 29.7 50.6-45.4c-8.9-11.7-19.1-22-30.6-30.9l-45.1 50.9 29.4-61.1c-12.3-7.4-25.7-13.1-40-16.9l-22.3 64.3 4-67.7c-7.1-1.2-14.3-1.7-21.7-1.7zM443.8 128L443.8 384 224.4 512 5 384 5 128 224.4 0 443.8 128zm-17.1 10.3l-202.3-117.4-202.3 117.4 0 235.1 202.3 117.7 202.3-117.7 0-235.1zM224.4 37.1l187.7 109.4 0 218.9-187.7 109.5-187.7-109.5 0-218.8 187.7-109.5zm0 50.9c-92.3 0-166.9 75.1-166.9 168 0 92.6 74.6 167.7 166.9 167.7 92 0 166.9-75.1 166.9-167.7 0-92.9-74.9-168-166.9-168z\"]\n};\nvar faDribbble = {\n  prefix: 'fab',\n  iconName: 'dribbble',\n  icon: [512, 512, [], \"f17d\", \"M256 8a248 248 0 1 0 0 496 248 248 0 1 0 0-496zM420 122.4c29.5 36 47.4 82 47.8 132-7-1.5-77-15.7-147.5-6.8-5.8-14-11.2-26.4-18.6-41.6 78.3-32 113.8-77.5 118.3-83.5zM396.4 97.9c-3.8 5.4-35.7 48.3-111 76.5-34.7-63.8-73.2-116.2-79-124 67.2-16.2 138 1.3 190.1 47.5zM165.9 64.6c5.6 7.7 43.4 60.1 78.5 122.5-99.1 26.3-186.4 25.9-195.8 25.8 13.7-65.7 58-120.4 117.3-148.3zM44.2 256.3c0-2.2 0-4.3 .1-6.5 9.3 .2 111.9 1.5 217.7-30.1 6.1 11.9 11.9 23.9 17.2 35.9-76.6 21.6-146.2 83.5-180.5 142.3-33.8-37.6-54.5-87.2-54.5-141.6zM126 423.4c22.1-45.2 82.2-103.6 167.6-132.8 29.7 77.3 42 142.1 45.2 160.6-68.1 29-150 21.1-212.8-27.9zm248.4 8.5c-2.2-12.9-13.4-74.9-41.2-151 66.4-10.6 124.7 6.8 131.9 9.1-9.4 58.9-43.3 109.8-90.8 142z\"]\n};\nvar faLinkedin = {\n  prefix: 'fab',\n  iconName: 'linkedin',\n  icon: [448, 512, [], \"f08c\", \"M416 32L31.9 32C14.3 32 0 46.5 0 64.3L0 447.7C0 465.5 14.3 480 31.9 480L416 480c17.6 0 32-14.5 32-32.3l0-383.4C448 46.5 433.6 32 416 32zM135.4 416l-66.4 0 0-213.8 66.5 0 0 213.8-.1 0zM102.2 96a38.5 38.5 0 1 1 0 77 38.5 38.5 0 1 1 0-77zM384.3 416l-66.4 0 0-104c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9l0 105.8-66.4 0 0-213.8 63.7 0 0 29.2 .9 0c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9l0 117.2z\"]\n};\nvar faCcPaypal = {\n  prefix: 'fab',\n  iconName: 'cc-paypal',\n  icon: [576, 512, [], \"f1f4\", \"M186.3 258.2c0 12.2-9.7 21.5-22 21.5-9.2 0-16-5.2-16-15 0-12.2 9.5-22 21.7-22 9.3 0 16.3 5.7 16.3 15.5zM80.5 209.7l-4.7 0c-1.5 0-3 1-3.2 2.7l-4.3 26.7 8.2-.3c11 0 19.5-1.5 21.5-14.2 2.3-13.4-6.2-14.9-17.5-14.9zm284 0l-4.5 0c-1.8 0-3 1-3.2 2.7l-4.2 26.7 8-.3c13 0 22-3 22-18-.1-10.6-9.6-11.1-18.1-11.1zM576 80l0 352c0 26.5-21.5 48-48 48L48 480c-26.5 0-48-21.5-48-48L0 80C0 53.5 21.5 32 48 32l480 0c26.5 0 48 21.5 48 48zM128.3 215.4c0-21-16.2-28-34.7-28l-40 0c-2.5 0-5 2-5.2 4.7L32 294.2c-.3 2 1.2 4 3.2 4l19 0c2.7 0 5.2-2.9 5.5-5.7l4.5-26.6c1-7.2 13.2-4.7 18-4.7 28.6 0 46.1-17 46.1-45.8zm84.2 8.8l-19 0c-3.8 0-4 5.5-4.2 8.2-5.8-8.5-14.2-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9 0 20.2-4.9 26.5-11.9-.5 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4l17.2 0c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zM253 322.1l63.7-92.6c.5-.5 .5-1 .5-1.7 0-1.7-1.5-3.5-3.2-3.5l-19.2 0c-1.7 0-3.5 1-4.5 2.5l-26.5 39-11-37.5c-.8-2.2-3-4-5.5-4l-18.7 0c-1.7 0-3.2 1.8-3.2 3.5 0 1.2 19.5 56.8 21.2 62.1-2.7 3.8-20.5 28.6-20.5 31.6 0 1.8 1.5 3.2 3.2 3.2l19.2 0c1.8-.1 3.5-1.1 4.5-2.6zM412.3 215.4c0-21-16.2-28-34.7-28l-39.7 0c-2.7 0-5.2 2-5.5 4.7l-16.2 102c-.2 2 1.3 4 3.2 4l20.5 0c2 0 3.5-1.5 4-3.2l4.5-29c1-7.2 13.2-4.7 18-4.7 28.4 0 45.9-17 45.9-45.8zm84.2 8.8l-19 0c-3.8 0-4 5.5-4.3 8.2-5.5-8.5-14-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9.3 0 20.5-4.9 26.5-11.9-.3 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4l17.3 0c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zM544 190.9c0-2-1.5-3.5-3.2-3.5l-18.5 0c-1.5 0-3 1.2-3.2 2.7l-16.2 104-.3 .5c0 1.8 1.5 3.5 3.5 3.5l16.5 0c2.5 0 5-2.9 5.2-5.7l16.2-101.2 0-.3zm-90 51.8c-12.2 0-21.7 9.7-21.7 22 0 9.7 7 15 16.2 15 12 0 21.7-9.2 21.7-21.5 .1-9.8-6.9-15.5-16.2-15.5z\"]\n};\nvar faDhl = {\n  prefix: 'fab',\n  iconName: 'dhl',\n  icon: [640, 512, [], \"f790\", \"M238 301.2l58.7 0 22.3-30.2-58.7 0-22.3 30.2zM0 282.9l0 6.4 81.8 0 4.7-6.4-86.5 0zM172.9 271c-8.7 0-6-3.6-4.6-5.5 2.8-3.8 7.6-10.4 10.4-14.1s2.8-5.9-2.8-5.9l-51 0-41.1 55.8 100.1 0c33.1 0 51.5-22.5 57.2-30.3l-68.2 0zm317.5-6.9l39.3-53.4-62.2 0-39.3 53.4 62.2 0zM95.3 271l-95.3 0 0 6.4 90.6 0 4.7-6.4zm111-26.6c-2.8 3.8-7.5 10.4-10.3 14.2-1.4 2-4.1 5.5 4.6 5.5l45.6 0s7.3-10 13.5-18.4c8.4-11.4 .7-35-29.2-35l-117.9 0-20.4 27.8 111.4 0c5.6 0 5.5 2.2 2.7 5.9zM0 301.2l73.1 0 4.7-6.4-77.8 0 0 6.4zm323 0l58.7 0 22.3-30.2-58.7 0c-.1 0-22.3 30.2-22.3 30.2zm222 .1l95 0 0-6.4-90.3 0-4.7 6.4zM567.3 271l-4.7 6.4 77.4 0 0-6.4-72.7 0zm-13.5 18.3l86.2 0 0-6.4-81.5 0-4.7 6.4zM389.6 210.7l-22.5 30.6-26.2 0 22.5-30.6-58.7 0-39.3 53.4 143.6 0 39.3-53.4-58.7 0zM423.1 271s-4.3 5.9-6.4 8.7c-7.4 10-.9 21.6 23.2 21.6l94.3 0 22.3-30.3-133.4 0z\"]\n};\nvar faTex = {\n  prefix: 'fab',\n  iconName: 'tex',\n  icon: [640, 512, [], \"e7ff\", \"M620.8 95.4c-30.8 .4-42.1 16.6-47.7 24.5l-.1 .1-55.7 80.5 82.8 121.1c7.5 10.6 11.3 12.5 35.4 12.5l0 9.1c-9.1-.7-28-.7-37.7-.7-12.4 0-30.8 0-42.9 .7l0-9.1c13.2-.8 16.6-7.3 16.6-10.2 0-1.1 0-2.3-3-6.4l-65.5-96.3-60.2 87.9c-1.9 2.7-3.8 5.4-3.8 10.2 0 6.1 3.4 13.6 15 14.7l0 9.1c-9.4-.7-27.1-.7-37.2-.7l-2.8 0-11.7 82.6-195.9 0 0-9.1c26.7 0 30.9 0 30.9-16.9l0-203.2c0-16.9-4.3-16.9-30.9-16.9l0-10.3 19.8 0c-4.8-61.1-10.8-71.7-68-71.8l-20.7 0c-6.8 1.5-6.8 6.1-6.8 14.4l0 205c0 13.6 1.1 17.8 32.4 17.8l10.5 0 0 9.1-.4 0c-17.9-.3-36.7-.7-54.9-.7s-36.9 .3-54.8 .7l-.6 0 0-9.1 10.7 0c31.7 0 32.8-4.1 32.8-17.8l0-205c0-8.7 0-13.2-7.2-14.3l-20.8 0c-58.4 0-63.7 10.9-68.6 73.3l-6.8 0 6.3-83.3 217.5 0 6.1 81.8 164.1 0 9 83.3-6.8 0c-5.3-49.8-12.1-73-70.3-73l-51.5 0c-15 0-15.8 1.9-15.8 14.6l0 93.3 35.5 0c35.5 0 38.9-12.8 38.9-44l6 0 0 97.9-6 0c0-31.8-3.4-44.8-38.9-44.8l-35.5 0 0 105.2c0 13 .7 14.8 15.8 14.8l52.2 0c61.1 0 69.9-25.8 77.4-73.6-7.7 0-16.3 .2-22.2 .7l0-9.1c7.2 0 31.7-.4 47.8-23.8l65.5-95.7-72.7-106.7c-8.3-11.7-15.1-12.5-35.8-12.5l0-9.1c9.1 .7 27.9 .7 37.7 .7 12.4 0 30.8 0 42.9-.7l0 9.1c-12.5 .4-16.6 6.8-16.6 10.2 0 1.1 .4 2.3 3 6.4l55.7 81.6 49.7-72.1c2.7-3.7 4.5-6.8 4.5-11.3 0-6.1-3-13.6-15-14.8l0-9.1c9.4 .7 24.8 .7 37.2 .7 9 0 23.3 0 32-.7l0 9.1z\"]\n};\nvar faClaude = {\n  prefix: 'fab',\n  iconName: 'claude',\n  icon: [512, 512, [], \"e861\", \"M100.4 340.5l100.7-56.5 1.7-4.9-1.7-2.7-4.9 0-16.8-1-57.5-1.6-49.9-2.1-48.3-2.6-12.2-2.6-11.4-15 1.2-7.5 10.2-6.9 14.7 1.3c18.9 1.3 45.9 3.1 81 5.6l35.2 2.1 52.2 5.4 8.3 0 1.2-3.4-2.8-2.1-2.2-2.1-50.3-34.1-54.4-36-28.5-20.7-15.4-10.5-7.8-9.8-3.4-21.5 14-15.4 18.8 1.3 4.8 1.3 19 14.7 40.7 31.5 53.1 39.1 7.8 6.5 3.1-2.2 .4-1.6-3.5-5.8-28.9-52.2-30.8-53.1-13.7-22-3.6-13.2c-1.3-5.4-2.2-10-2.2-15.5l15.9-21.6 8.8-2.8 21.2 2.8 8.9 7.8 13.2 30.2 21.4 47.5 33.2 64.6 9.7 19.2 5.2 17.8 1.9 5.4 3.4 0 0-3.1 2.7-36.4 5-44.7 4.9-57.5 1.7-16.2 8-19.4 15.9-10.5 12.4 5.9 10.2 14.7-1.4 9.5-6.1 39.5-11.9 61.9-7.8 41.5 4.5 0 5.2-5.2 21-27.8 35.2-44.1 15.5-17.5 18.1-19.3 11.6-9.2 22 0 16.2 24.1-7.3 24.9-22.7 28.7-18.8 24.4-27 36.3-16.8 29 1.6 2.3 4-.4 60.9-13 32.9-5.9 39.3-6.7 17.8 8.3 1.9 8.4-7 17.2-42 10.4-49.2 9.8-73.3 17.3-.9 .7 1 1.3 33 3.1 14.1 .8 34.6 0 64.4 4.8 16.8 11.1 10.1 13.6-1.7 10.4-25.9 13.2c-15.5-3.7-54.4-12.9-116.6-27.7l-28-7-3.9 0 0 2.3 23.3 22.8 42.7 38.6 53.5 49.8 2.7 12.3-6.9 9.7-7.3-1-47-35.4-18.1-15.9-41.1-34.6-2.7 0 0 3.6 9.5 13.9 50 75.2 2.6 23-3.6 7.5-13 4.5-14.2-2.6-29.3-41.1-30.2-46.3-24.4-41.5-3 1.7-14.4 154.8-6.7 7.9-15.5 5.9-13-9.8-6.9-15.9 6.9-31.5 8.3-41.1 6.7-32.7 6.1-40.6 3.6-13.5-.2-.9-3 .4-30.6 42-46.5 62.9-36.8 39.4-8.8 3.5-15.3-7.9 1.4-14.1 8.5-12.6 50.9-64.8 30.7-40.2 19.8-23.2-.1-3.4-1.2 0-135.3 87.8-24.1 3.1-10.4-9.7 1.3-15.9 4.9-5.2 40.7-28-.1 .1 0 .1z\"]\n};\nvar faShopify = {\n  prefix: 'fab',\n  iconName: 'shopify',\n  icon: [448, 512, [], \"e057\", \"M388.5 104.1c-.2-1.1-.7-2.1-1.5-2.8s-1.8-1.2-2.9-1.2c-2 0-37.2-.8-37.2-.8s-21.6-20.8-29.6-28.8l0 432.7 125.7-31.2s-54-365.5-54.4-367.9zM288.9 70.5c-1.9-6.1-4.3-11.9-7.2-17.6-10.4-20-26-30.9-44.4-30.9-1.3 0-2.7 .1-4 .4-.4-.8-1.2-1.2-1.6-2-8-8.8-18.4-12.8-30.8-12.4-24 .8-48 18-67.2 48.8-13.6 21.6-24 48.8-26.8 70.1-27.6 8.4-46.8 14.4-47.2 14.8-14 4.4-14.4 4.8-16 18-1.2 10-38 291.8-38 291.8l302.6 52.5 0-438.3c-1.5 .1-2.9 .2-4.4 .4 0 0-5.6 1.6-14.8 4.4zM233.6 87.7c-16 4.8-33.6 10.4-50.8 15.6 4.8-18.8 14.4-37.6 25.6-50 4.4-4.4 10.4-9.6 17.2-12.8 6.8 14.4 8.4 34 8 47.2zM200.8 24.4c5-.2 10 1.1 14.4 3.6-6.4 3.2-12.8 8.4-18.8 14.4-15.2 16.4-26.8 42-31.6 66.5-14.4 4.4-28.8 8.8-42 12.8 8.8-38.4 41.2-96.4 78-97.2zM154.4 244.6c1.6 25.6 69.2 31.2 73.2 91.7 2.8 47.6-25.2 80.1-65.6 82.5-48.8 3.2-75.6-25.6-75.6-25.6l10.4-44s26.8 20.4 48.4 18.8c14-.8 19.2-12.4 18.8-20.4-2-33.6-57.2-31.6-60.8-86.9-3.2-46.4 27.2-93.3 94.5-97.7 26-1.6 39.2 4.8 39.2 4.8l-15.2 57.6s-17.2-8-37.6-6.4c-29.6 2-30 20.8-29.6 25.6zM249.6 82.9c0-12-1.6-29.2-7.2-43.6 18.4 3.6 27.2 24 31.2 36.4-7.2 2-15.2 4.4-24 7.2z\"]\n};\nvar faSquareReddit = {\n  prefix: 'fab',\n  iconName: 'square-reddit',\n  icon: [448, 512, [\"reddit-square\"], \"f1a2\", \"M64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32zM305.9 166.4c20.6 0 37.3-16.7 37.3-37.3s-16.7-37.3-37.3-37.3c-18 0-33.1 12.8-36.6 29.8-30.2 3.2-53.8 28.8-53.8 59.9l0 .2c-32.8 1.4-62.8 10.7-86.6 25.5-8.8-6.8-19.9-10.9-32-10.9-28.9 0-52.3 23.4-52.3 52.3 0 21 12.3 39 30.1 47.4 1.7 60.7 67.9 109.6 149.3 109.6s147.6-48.9 149.3-109.7c17.7-8.4 29.9-26.4 29.9-47.3 0-28.9-23.4-52.3-52.3-52.3-12 0-23 4-31.9 10.8-24-14.9-54.3-24.2-87.5-25.4l0-.1c0-22.2 16.5-40.7 37.9-43.7 3.9 16.5 18.7 28.7 36.3 28.7l.2-.2zM155 248.1c14.6 0 25.8 15.4 25 34.4s-11.8 25.9-26.5 25.9-27.5-7.7-26.6-26.7 13.5-33.5 28.1-33.5l0-.1zm166.4 33.5c.9 19-12 26.7-26.6 26.7s-25.6-6.9-26.5-25.9 10.3-34.4 25-34.4 27.3 14.6 28.1 33.5l0 .1zm-42.1 49.6c-9 21.5-30.3 36.7-55.1 36.7s-46.1-15.1-55.1-36.7c-1.1-2.6 .7-5.4 3.4-5.7 16.1-1.6 33.5-2.5 51.7-2.5s35.6 .9 51.7 2.5c2.7 .3 4.5 3.1 3.4 5.7z\"]\n};\nvar faRedditSquare = faSquareReddit;\nvar faCreativeCommonsNc = {\n  prefix: 'fab',\n  iconName: 'creative-commons-nc',\n  icon: [512, 512, [], \"f4e8\", \"M255.6 8C395.4 8 504 115.9 504 256 504 403.2 385.5 504 255.6 504 121.1 504 8 393.2 8 256 8 123.1 112.7 8 255.6 8zM63.8 189.1c-7.4 20.4-11.1 42.7-11.1 66.9 0 110.9 92.1 202.4 203.7 202.4 122.4 0 177.2-101.8 178.5-104.1l-93.4-41.6c-7.7 37.1-41.2 53-68.2 55.4l0 38.1-28.8 0 0-38.2c-27.5-.3-52.6-10.2-75.3-29.7l34.1-34.5c31.7 29.4 86.4 31.8 86.4-2.2 0-6.2-2.2-11.2-6.6-15.1-14.2-6-1.8-.1-219.3-97.4zM256.4 52.3C218 52.3 144 61 85.9 145.3l94.8 42.5c10-31.3 40.4-42.9 63.8-44.3l0-38.1 28.8 0 0 38.1c22.7 1.2 43.4 8.9 62 23L303 199.7c-42.7-29.9-83.5-8-70 11.1 53.4 24.1 43.8 19.8 93 41.6l127.1 56.7c4.1-17.4 6.2-35.1 6.2-53.1 0-57-19.8-105-59.3-143.9-39.3-39.9-87.2-59.8-143.6-59.8z\"]\n};\nvar faGalacticRepublic = {\n  prefix: 'fab',\n  iconName: 'galactic-republic',\n  icon: [512, 512, [], \"f50c\", \"M256 8a248 248 0 1 1 0 496 248 248 0 1 1 0-496zm0 16.5a231.5 231.5 0 1 0 0 462.9 231.5 231.5 0 1 0 0-462.9zm27.6 21.8l0 24.6c30.3 4.5 59 16.3 83.6 34.5l17.4-17.4c-28.7-22.1-63.3-36.9-101-41.8zm-55.4 .1c-37.6 4.9-72.2 19.8-100.9 41.9l17.3 17.4 .1 0c24.1-17.8 52.6-30.1 83.5-34.7l0-24.5zm12.2 50.2l0 82.9c-10 2-19.4 5.9-27.7 11.4l-58.6-58.6-21.9 21.9 58.7 58.7c-5.5 8.2-9.4 17.6-11.5 27.6l-82.9 0 0 31 82.9 0c2 10 6 19.3 11.5 27.5l-58.7 58.7 21.9 21.9 58.6-58.6c8.4 5.6 17.8 9.5 27.7 11.5l0 82.9 31 0 0-82.9c10-2 19.4-6.1 27.6-11.5l58.7 58.7 21.9-21.9-58.7-58.7c5.5-8.2 9.5-17.5 11.5-27.5l82.9 0 0-31-82.9 0c-2-10-6-19.4-11.5-27.6l58.7-58.7-21.9-21.9-58.7 58.7c-8.2-5.5-17.6-9.5-27.6-11.5l0-82.9-31 0zm183.2 30.7l-17.4 17.4c18.3 24.6 30.2 53.4 34.7 83.7l24.6 0c-5-37.7-19.8-72.3-41.9-101zm-335.6 .1c-22.1 28.7-36.9 63.3-41.8 100.9l24.6 0c4.6-31 16.8-59.4 34.6-83.5L88.2 127.4zM46.3 283.7c4.9 37.6 19.7 72.2 41.8 100.9l17.4-17.4C87.7 343.1 75.6 314.6 71 283.7l-24.6 0 0 0zm394.7 0c-4.6 31-16.8 59.5-34.7 83.6l17.4 17.4c22.1-28.7 37-63.3 41.9-101l-24.6 0zM144.7 406.4l-17.4 17.4c28.7 22.1 63.3 37 101 41.9l0-24.6c-31-4.6-59.5-16.8-83.6-34.6zm222.5 0c-24.1 17.8-52.6 30.1-83.6 34.7l0 24.6c37.7-4.9 72.2-19.8 101-41.8l-17.3-17.4-.1 0z\"]\n};\nvar faFacebook = {\n  prefix: 'fab',\n  iconName: 'facebook',\n  icon: [512, 512, [62000], \"f09a\", \"M512 256C512 114.6 397.4 0 256 0S0 114.6 0 256C0 376 82.7 476.8 194.2 504.5l0-170.3-52.8 0 0-78.2 52.8 0 0-33.7c0-87.1 39.4-127.5 125-127.5 16.2 0 44.2 3.2 55.7 6.4l0 70.8c-6-.6-16.5-1-29.6-1-42 0-58.2 15.9-58.2 57.2l0 27.8 83.6 0-14.4 78.2-69.3 0 0 175.9C413.8 494.8 512 386.9 512 256z\"]\n};\nvar faGitlab = {\n  prefix: 'fab',\n  iconName: 'gitlab',\n  icon: [512, 512, [], \"f296\", \"M504 204.6l-.7-1.8-69.7-181.8c-1.4-3.6-3.9-6.6-7.2-8.6-2.4-1.6-5.1-2.5-8-2.8s-5.7 .1-8.4 1.1-5.1 2.7-7.1 4.8c-1.9 2.1-3.3 4.7-4.1 7.4l-47 144-190.5 0-47.1-144c-.8-2.8-2.2-5.3-4.1-7.4-2-2.1-4.4-3.7-7.1-4.8-2.6-1-5.5-1.4-8.4-1.1s-5.6 1.2-8 2.8c-3.2 2-5.8 5.1-7.2 8.6L9.8 202.8 9 204.6c-10 26.2-11.3 55-3.5 82 7.7 26.9 24 50.7 46.4 67.6l.3 .2 .6 .4 106 79.5c38.5 29.1 66.7 50.3 84.6 63.9 3.7 1.9 8.3 4.3 13 4.3s9.3-2.4 13-4.3c17.9-13.5 46.1-34.9 84.6-63.9l106.7-79.9 .3-.3c22.4-16.9 38.7-40.6 45.6-67.5 8.6-27 7.4-55.8-2.6-82z\"]\n};\nvar faQq = {\n  prefix: 'fab',\n  iconName: 'qq',\n  icon: [448, 512, [], \"f1d6\", \"M434.1 420.4c-11.5 1.4-44.9-52.7-44.9-52.7 0 31.3-16.1 72.2-51 101.8 16.8 5.2 54.8 19.2 45.8 34.4-7.3 12.3-125.5 7.9-159.6 4-34.1 3.8-152.3 8.3-159.6-4-9-15.2 28.9-29.2 45.8-34.4-34.9-29.5-51.1-70.4-51.1-101.8 0 0-33.3 54.1-44.9 52.7-5.4-.6-12.4-29.6 9.3-99.7 10.3-33 22-60.5 40.1-105.8-3.1-116.9 45.2-215 160.3-215 113.7 0 163.2 96.1 160.3 215 18.1 45.2 29.9 72.9 40.1 105.8 21.8 70.1 14.7 99.1 9.3 99.7z\"]\n};\nvar faStripe = {\n  prefix: 'fab',\n  iconName: 'stripe',\n  icon: [640, 512, [], \"f429\", \"M165 144.7l-43.3 9.2-.2 142.4c0 26.3 19.8 43.3 46.1 43.3 14.6 0 25.3-2.7 31.2-5.9l0-33.8c-5.7 2.3-33.7 10.5-33.7-15.7l0-63.2 33.7 0 0-37.8-33.7 0-.1-38.5zm89.1 51.6l-2.7-13.1-38.4 0 0 153.2 44.3 0 0-103.1c10.5-13.8 28.2-11.1 33.9-9.3l0-40.8c-6-2.1-26.7-6-37.1 13.1zM346.4 124l-44.6 9.5 0 36.2 44.6-9.5 0-36.2zM44.9 228.3c0-6.9 5.8-9.6 15.1-9.7 13.5 0 30.7 4.1 44.2 11.4l0-41.8c-14.7-5.8-29.4-8.1-44.1-8.1-36 0-60 18.8-60 50.2 0 49.2 67.5 41.2 67.5 62.4 0 8.2-7.1 10.9-17 10.9-14.7 0-33.7-6.1-48.6-14.2l0 40c16.5 7.1 33.2 10.1 48.5 10.1 36.9 0 62.3-15.8 62.3-47.8 0-52.9-67.9-43.4-67.9-63.4zM640 261.6c0-45.5-22-81.4-64.2-81.4s-67.9 35.9-67.9 81.1c0 53.5 30.3 78.2 73.5 78.2 21.2 0 37.1-4.8 49.2-11.5l0-33.4c-12.1 6.1-26 9.8-43.6 9.8-17.3 0-32.5-6.1-34.5-26.9l86.9 0c.2-2.3 .6-11.6 .6-15.9zm-87.9-16.8c0-20 12.3-28.4 23.4-28.4 10.9 0 22.5 8.4 22.5 28.4l-45.9 0zM439.2 180.2c-17.4 0-28.6 8.2-34.8 13.9l-2.3-11-39.1 0 0 204.8 44.4-9.4 .1-50.2c6.4 4.7 15.9 11.2 31.4 11.2 31.8 0 60.8-23.2 60.8-79.6 .1-51.6-29.3-79.7-60.5-79.7zM428.6 302.7c-10.4 0-16.6-3.8-20.9-8.4l-.3-66c4.6-5.1 11-8.8 21.2-8.8 16.2 0 27.4 18.2 27.4 41.4 .1 23.9-10.9 41.8-27.4 41.8zM301.9 336.4l44.6 0 0-153.2-44.6 0 0 153.2z\"]\n};\nvar faDailymotion = {\n  prefix: 'fab',\n  iconName: 'dailymotion',\n  icon: [448, 512, [], \"e052\", \"M298.9 267c-7.4-4.2-15.8-6.3-24.4-6.2-13.2 0-24.4 4.4-33.4 13.3s-13.6 20-13.6 33.4c0 14.1 4.4 25.6 13.3 34.6s20 13.4 33.4 13.4c13.7 0 25-4.6 34.1-13.8S322 321.1 322 307.5c0-8.2-2.1-16.3-6.1-23.5-4-7.1-9.8-13-17-17zM0 32l0 448 448 0 0-448-448 0zM374.7 405.3l-53.1 0 0-23.9-.7 0c-10.5 17.5-29.1 26.2-55.8 26.2-18.4 0-34.7-4.4-48.9-13.1-14.1-8.6-25.5-21-32.9-35.8-7.7-15.1-11.6-32.1-11.6-50.9 0-18.4 3.9-35.1 11.8-50.2 7.5-14.7 18.9-27.1 32.9-35.8 14.1-8.7 30-13.1 47.7-13.1 10.2-.1 20.2 1.6 29.7 5.2 8.9 3.5 17.2 9.1 25 17l0-77.9 55.8-12.1 0 264.4z\"]\n};\nvar faSteam = {\n  prefix: 'fab',\n  iconName: 'steam',\n  icon: [512, 512, [], \"f1b6\", \"M504 256c0 137-111.2 248-248.4 248-113.8 0-209.6-76.3-239-180.4l95.2 39.3c6.4 32.1 34.9 56.4 68.9 56.4 39.2 0 71.9-32.4 70.2-73.5l84.5-60.2c52.1 1.3 95.8-40.9 95.8-93.5 0-51.6-42-93.5-93.7-93.5s-93.7 42-93.7 93.5l0 1.2-59.2 85.7c-15.5-.9-30.7 3.4-43.5 12.1L8 236.1C18.2 108.4 125.1 8 255.6 8 392.8 8 504 119 504 256zM163.7 384.3l-30.5-12.6c5.6 11.6 15.3 20.8 27.2 25.8 26.9 11.2 57.8-1.6 69-28.4 5.4-13 5.5-27.3 .1-40.3S214 305.6 201 300.2c-12.9-5.4-26.7-5.2-38.9-.6l31.5 13c19.8 8.2 29.2 30.9 20.9 50.7-8.3 19.9-31 29.2-50.8 21zM337.5 129.8a62.3 62.3 0 1 1 0 124.6 62.3 62.3 0 1 1 0-124.6zm.1 109a46.8 46.8 0 1 0 0-93.6 46.8 46.8 0 1 0 0 93.6z\"]\n};\nvar faVenmoV = {\n  prefix: 'fab',\n  iconName: 'venmo-v',\n  icon: [512, 512, [], \"e85b\", \"M466.5 14.8c17.4 28.7 25.3 58.2 25.3 95.5 0 119-101.9 273.5-184.7 382.1l-188.9 0-75.8-451.5 165.4-15.7 40.1 321.3c37.4-60.8 83.6-156.3 83.6-221.4 0-35.6-6.1-59.9-15.7-79.9L466.5 14.8z\"]\n};\nvar faSnapchat = {\n  prefix: 'fab',\n  iconName: 'snapchat',\n  icon: [512, 512, [62124, \"snapchat-ghost\"], \"f2ab\", \"M497.1 366.6c-3.4-9.2-9.8-14.1-17.1-18.2-1.4-.8-2.6-1.5-3.7-1.9-2.2-1.1-4.4-2.2-6.6-3.4-22.8-12.1-40.6-27.3-53-45.4-3.5-5.1-6.6-10.5-9.1-16.1-1.1-3-1-4.7-.2-6.3 .8-1.2 1.7-2.2 2.9-3 3.9-2.6 8-5.2 10.7-7 4.9-3.2 8.8-5.7 11.2-7.4 9.4-6.5 15.9-13.5 20-21.3 2.9-5.4 4.5-11.3 4.9-17.4s-.6-12.2-2.8-17.8c-6.2-16.3-21.6-26.4-40.3-26.4-3.9 0-7.9 .4-11.7 1.2-1 .2-2.1 .5-3.1 .7 .2-11.2-.1-22.9-1.1-34.5-3.5-40.8-17.8-62.1-32.7-79.2-9.5-10.7-20.7-19.7-33.2-26.7-22.6-12.9-48.2-19.4-76.1-19.4s-53.4 6.5-76 19.4c-12.5 7-23.7 16.1-33.3 26.8-14.9 17-29.2 38.4-32.7 79.2-1 11.6-1.2 23.4-1.1 34.5-1-.3-2-.5-3.1-.7-3.9-.8-7.8-1.2-11.7-1.2-18.7 0-34.1 10.1-40.3 26.4-2.2 5.7-3.2 11.8-2.8 17.8s2 12 4.9 17.4c4.1 7.8 10.7 14.7 20 21.3 2.5 1.7 6.4 4.2 11.2 7.4 2.6 1.7 6.5 4.2 10.3 6.7 1.3 .9 2.4 2 3.3 3.3 .8 1.6 .8 3.4-.4 6.6-2.5 5.5-5.5 10.8-8.9 15.8-12.1 17.7-29.4 32.6-51.4 44.6-11.7 6.2-23.9 10.3-29 24.3-3.9 10.5-1.3 22.5 8.5 32.6 3.6 3.8 7.8 6.9 12.4 9.4 9.6 5.3 19.8 9.3 30.3 12.1 2.2 .6 4.3 1.5 6.1 2.7 3.6 3.1 3.1 7.9 7.8 14.8 2.4 3.6 5.4 6.7 9 9.1 10 6.9 21.3 7.4 33.2 7.8 10.8 .4 23 .9 36.9 5.5 5.8 1.9 11.8 5.6 18.7 9.9 16.7 10.3 39.6 24.3 77.8 24.3s61.3-14.1 78.1-24.4c6.9-4.2 12.9-7.9 18.5-9.8 13.9-4.6 26.2-5.1 36.9-5.5 11.9-.5 23.2-.9 33.2-7.8 4.2-2.9 7.7-6.7 10.2-11.2 3.4-5.8 3.4-9.9 6.6-12.8 1.8-1.2 3.7-2.1 5.8-2.6 10.7-2.8 21-6.9 30.8-12.2 4.9-2.6 9.3-6.1 13-10.2l.1-.2c9.2-9.9 11.5-21.5 7.8-31.8zm-34 18.3c-20.7 11.5-34.5 10.2-45.3 17.1-9.1 5.9-3.7 18.5-10.3 23.1-8.1 5.6-32.2-.4-63.2 9.9-25.6 8.5-42 32.8-88 32.8s-62-24.3-88.1-32.9c-31-10.3-55.1-4.2-63.2-9.9-6.6-4.6-1.2-17.2-10.3-23.1-10.7-6.9-24.5-5.7-45.3-17.1-13.2-7.3-5.7-11.8-1.3-13.9 75.1-36.4 87.1-92.6 87.7-96.7 .6-5 1.4-9-4.2-14.1-5.4-5-29.2-19.7-35.8-24.3-10.9-7.6-15.7-15.3-12.2-24.6 2.5-6.5 8.5-8.9 14.9-8.9 2 0 4 .2 6 .7 12 2.6 23.7 8.6 30.4 10.2 .8 .2 1.6 .3 2.5 .3 3.6 0 4.9-1.8 4.6-5.9-.8-13.1-2.6-38.7-.6-62.6 2.8-32.9 13.4-49.2 26-63.6 6.1-6.9 34.5-37 88.9-37S339 74.2 345 81.1c12.6 14.4 23.2 30.7 26 63.6 2.1 23.9 .3 49.5-.6 62.6-.3 4.3 1 5.9 4.6 5.9 .8 0 1.7-.1 2.5-.3 6.7-1.6 18.4-7.6 30.4-10.2 2-.4 4-.7 6-.7 6.4 0 12.4 2.5 14.9 8.9 3.5 9.4-1.2 17-12.2 24.6-6.6 4.6-30.4 19.3-35.8 24.3-5.6 5.1-4.8 9.1-4.2 14.2 .5 4.2 12.5 60.4 87.7 96.7 4.4 2.2 11.9 6.7-1.3 14.1z\"]\n};\nvar faSnapchatGhost = faSnapchat;\nvar faGalacticSenate = {\n  prefix: 'fab',\n  iconName: 'galactic-senate',\n  icon: [512, 512, [], \"f50d\", \"M249.9 33.5l0 26.1c-13.6 20.6-23.9 108.6-24.5 215.3 11.7-15.6 19.1-33.3 19.1-48.2l0-16.9c0-5.3 .8-10.5 2.2-15.6 .6-2.1 1.4-4.1 2.6-5.8s3.4-3.8 6.7-3.8 5.4 2.1 6.7 3.8c1.2 1.8 2 3.7 2.6 5.8 1.4 5.1 2.2 10.3 2.2 15.6l0 16.9c0 14.9 7.4 32.6 19.1 48.2-.6-106.8-10.9-194.7-24.5-215.3l0-26.1-12.3 0zM223.5 181.3c-9.5 2.1-18.7 5.2-27.5 9.1 8.9 16.1 9.8 32.6 1.7 37.3-8 4.6-21.8-4.2-31.4-19.8-11.6 8.8-21.9 19.3-30.6 31.1 14.7 9.6 22.9 22.9 18.3 30.7-4.5 7.7-20 7.1-35.5-1-5.8 13.2-9.7 27.5-11.6 42.4 9.7 .2 18.7 2.4 26.2 6 17.8-.3 32.8-2 40.5-4.2 5.6-26.4 23-48.2 46.3-59.5 .7-25.6 1.9-49.7 3.5-72.1zm65 0c1.6 22.4 2.7 46.5 3.5 72.1 23.3 11.3 40.8 33.2 46.3 59.5 7.7 2.3 22.7 3.9 40.5 4.2 7.5-3.7 16.5-5.8 26.2-6-1.9-14.9-5.9-29.2-11.7-42.4-15.4 8.1-30.9 8.7-35.5 1-4.6-7.7 3.6-21.1 18.3-30.7-8.7-11.8-19-22.3-30.6-31.1-9.5 15.6-23.4 24.4-31.4 19.8-8.1-4.6-7.2-21.2 1.7-37.3-8.8-3.9-18-7-27.4-9.1zM256 189.9c-3.2 0-5.9 8.8-6.1 19.9l0 0 0 16.9c0 41.4-49 95-93.5 95-52 0-122.8-1.4-156.4 29.2l0 2.5c9.4 17.1 20.6 33.2 33.2 48 12.5-21.1 51.6-41 108-41.4 45.7 1 79 20.3 90.8 40.9 0 0 0 0 0 .1 7.7 2.1 15.8 3.2 24 3.2 8.2 0 16.4-1.1 24-3.2 0 0 0 0 0-.1 11.7-20.5 45.1-39.8 90.8-40.9 56.4 .4 95.5 20.3 108 41.4 12.6-14.8 23.8-30.9 33.2-48l0-2.5c-33.6-30.6-104.4-29.2-156.4-29.2-44.5 0-93.5-53.6-93.5-95l0-16.9-.1 0c-.2-11.1-2.9-19.9-6.1-19.9zm0 177.9a40.6 40.6 0 1 1 0-81.3 40.6 40.6 0 1 1 0 81.3zm0-73.6a33 33 0 1 0 0 65.9 33 33 0 1 0 0-65.9zm0 59.8a26.8 26.8 0 1 1 0-53.6 26.8 26.8 0 1 1 0 53.6zm-114.8 13c-10.2 .1-21.6 .4-30.5 1.7 .4 4.4 1.5 18.6 7.1 29.8 9.1-2.6 18.4-3.9 27.6-3.9 41.3 .9 71.5 34.4 78.3 74.5l.1 4.7c10.4 1.9 21.2 2.9 32.2 2.9 11 0 21.8-1 32.2-2.9l.1-4.7c6.8-40.1 37-73.5 78.3-74.5 9.3 0 18.5 1.3 27.6 3.9 5.6-11.1 6.7-25.3 7.1-29.8-8.9-1.3-20.3-1.6-30.5-1.7-18.8 .4-35.2 4.2-48.6 9.7-12.5 16-29.2 30-49.6 33.1-.1 0-.2 0-.3 0 0 0-.1 0-.2 .1-5.2 1.1-10.6 1.6-16.2 1.6-5.5 0-10.9-.5-16.2-1.6-.1 0-.1 0-.2-.1-.1 0-.2 0-.3 0-20.4-3-37-17-49.6-33.1-13.4-5.5-29.9-9.2-48.6-9.7z\"]\n};\nvar faPhoenixFramework = {\n  prefix: 'fab',\n  iconName: 'phoenix-framework',\n  icon: [640, 512, [], \"f3dc\", \"M212.9 344.3c3.8-.1 22.8-1.4 25.6-2.2-2.4-2.6-43.6-1-68-49.6-4.3-8.6-7.5-17.6-6.4-27.6 2.9-25.5 32.9-30 52-18.5 36 21.6 63.3 91.3 113.7 97.5 37 4.5 84.6-17 108.2-45.4-.6-.1-.8-.2-1-.1-.4 .1-.8 .2-1.1 .3-33.3 12.1-94.3 9.7-134.7-14.8-37.6-22.8-53.1-58.7-51.8-74.6 1.8-21.3 22.9-23.2 35.9-19.6 14.4 3.9 24.4 17.6 38.9 27.4 15.6 10.4 32.9 13.7 51.3 10.3 14.9-2.7 34.4-12.3 36.5-14.5-1.1-.1-1.8-.1-2.5-.2-6.2-.6-12.4-.8-18.5-1.7-111.2-16.5-128.9-163.6-252.5-173.1-44.3-3.4-99.4 8.1-136.3 35-.8 .6-1.5 1.2-2.2 1.8 .1 .2 .1 .3 .2 .5 .8 0 1.6-.1 2.4-.2 6.3-1 12.5-.8 18.7 .3 23.8 4.3 47.7 23.1 55.9 76.5 5.3 34.3-.7 50.8 8 86.1 19 77.1 91 107.6 127.7 106.4zM75.3 64.9c-.9-1-.9-1.2-1.3-2 12.1-2.6 24.2-4.1 36.6-4.8-1.1 14.7-22.2 21.3-35.3 6.8zM272.2 415.4c-42.8 1.2-92-26.7-123.5-61.4-4.6-5-16.8-20.2-18.6-23.4l.4-.4c6.6 4.1 25.7 18.6 54.8 27 24.2 7 48.1 6.3 71.6-3.3 22.7-9.3 41-.5 43.1 2.9-18.5 3.8-20.1 4.4-24 7.9-5.1 4.4-4.6 11.7 7 17.2 26.2 12.4 63-2.8 97.2 25.4 2.4 2 8.1 7.8 10.1 10.7-.1 .2-.3 .3-.4 .5-4.8-1.5-16.4-7.5-40.2-9.3-24.7-2-46.3 5.3-77.5 6.2zM447 163.4c16.4-5.2 41.3-13.4 66.5-3.3 16.1 6.5 26.2 18.7 32.1 34.6 3.5 9.4 5.1 19.7 5.1 28.7-.2 0-.4 0-.6 .1-.2-.4-.4-.9-.5-1.3-5-22-29.9-43.8-67.6-29.9-50.2 18.6-130.4 9.7-176.9-48-.7-.9-2.4-1.7-1.3-3.2 .1-.2 2.1 .6 3 1.3 18.1 13.4 38.3 21.9 60.3 26.2 30.5 6.1 54.6 2.9 79.9-5.2zM549.7 280.9c-32.4 .2-33.8 50.1-103.6 64.4-18.2 3.7-38.7 4.6-44.9 4.2l0-.4c2.8-1.5 14.7-2.6 29.7-16.6 7.9-7.3 15.3-15.1 22.8-22.9 19.5-20.2 41.4-42.2 81.9-39 23.1 1.8 29.3 8.2 36.1 12.7 .3 .2 .4 .5 .7 .9-.5 0-.7 .1-.9 0-7-2.7-14.3-3.3-21.8-3.3zm-12.3-24.1c-.1 .2-.1 .4-.2 .6-28.9-4.4-48-7.9-68.5 4-17 9.9-31.4 20.5-62 24.4-27.1 3.4-45.1 2.4-66.1-8-.3-.2-.6-.4-1-.6 0-.2 .1-.3 .1-.5 24.9 3.8 36.4 5.1 55.5-5.8 22.3-12.9 40.1-26.6 71.3-31 29.6-4.1 51.3 2.5 70.9 16.9zM268.6 97.3c-.6-.6-1.1-1.2-2.1-2.3 7.6 0 29.7-1.2 53.4 8.4 19.7 8 32.2 21 50.2 32.9 11.1 7.3 23.4 9.3 36.4 8.1 4.3-.4 8.5-1.2 12.8-1.7 .4-.1 .9 0 1.5 .3-.6 .4-1.2 .9-1.8 1.2-8.1 4-16.7 6.3-25.6 7.1-26.1 2.6-50.3-3.7-73.4-15.4-19.3-9.9-36.4-22.9-51.4-38.6zM640 335.7c-3.5 3.1-22.7 11.6-42.7 5.3-12.3-3.9-19.5-14.9-31.6-24.1-10-7.6-20.9-7.9-28.1-8.4 .6-.8 .9-1.2 1.2-1.4 14.8-9.2 30.5-12.2 47.3-6.5 12.5 4.2 19.2 13.5 30.4 24.2 10.8 10.4 21 9.9 23.1 10.5 .1-.1 .2 0 .4 .4zm-212.5 137c2.2 1.2 1.6 1.5 1.5 2-18.5-1.4-33.9-7.6-46.8-22.2-21.8-24.7-41.7-27.9-48.6-29.7 .5-.2 .8-.4 1.1-.4 13.1 .1 26.1 .7 38.9 3.9 25.3 6.4 35 25.4 41.6 35.3 3.2 4.8 7.3 8.3 12.3 11.1z\"]\n};\nvar faGit = {\n  prefix: 'fab',\n  iconName: 'git',\n  icon: [512, 512, [], \"f1d3\", \"M216.3 158.4l-79.3 0c-40-10.5-130.5-7.8-130.5 74.8 0 30.1 15 51.2 35 61-25.1 23-37 33.8-37 49.2 0 11 4.5 21.1 17.9 26.8-14.3 13.4-22.4 23.1-22.4 41.4 0 32.1 28 50.8 101.6 50.8 70.8 0 111.8-26.4 111.8-73.2 0-58.7-45.2-56.5-151.6-63l13.4-21.6c27.3 7.6 118.7 10 118.7-67.9 0-18.7-7.7-31.7-15-41.1l37.4-2.8 0-34.5zM152.9 400.3c0 32.1-104.9 32.1-104.9 2.4 0-8.1 5.3-15 10.6-21.5 77.7 5.3 94.3 3.4 94.3 19.1zM102.1 265.7c-52.8 0-50.5-71.2 1.2-71.2 49.5 0 50.8 71.2-1.2 71.2zM235.4 366.2l0-32.1c26.7-3.7 27.2-2 27.2-11l0-119.5c0-8.5-2.1-7.4-27.2-16.3l4.5-32.9 84.2 0 0 168.7c0 6.5 .4 7.3 6.5 8.1l20.7 2.8 0 32.1-115.9 0zm52.5-244.3c-23.2 0-36.6-13.4-36.6-36.6s13.4-35.8 36.6-35.8c23.6 0 37 12.6 37 35.8s-13.4 36.6-37 36.6zM512 350.5c-17.5 8.5-43.1 16.3-66.3 16.3-48.4 0-66.7-19.5-66.7-65.5l0-106.5c0-5.4 1-4.1-31.7-4.1l0-36.2c35.8-4.1 50-22 54.5-66.3l38.6 0c0 65.8-1.3 61.8 3.3 61.8l57.3 0 0 40.6-60.6 0 0 97.1c0 6.9-4.9 51.4 60.6 26.8l11 35.8z\"]\n};\nvar faOptinMonster = {\n  prefix: 'fab',\n  iconName: 'optin-monster',\n  icon: [576, 512, [], \"f23c\", \"M572.8 421.4c5.6-9.5 4.7-15.2-5.4-11.6-3-4.9-7-9.5-11.1-13.8 2.9-9.7-.7-14.2-10.8-9.2-4.6-3.2-10.3-6.5-15.9-9.2 0-15.1-11.6-11.6-17.6-5.7-10.4-1.5-18.7-.3-26.8 5.7 .3-6.5 .3-13 .3-19.7 12.6 0 40.2-11 45.9-36.2 1.4-6.8 1.6-13.8-.3-21.9-3-13.5-14.3-21.3-25.1-25.7-.8-5.9-7.6-14.3-14.9-15.9s-12.4 4.9-14.1 10.3c-8.5 0-19.2 2.8-21.1 8.4-5.4-.5-11.1-1.4-16.8-1.9 2.7-1.9 5.4-3.5 8.4-4.6 5.4-9.2 14.6-11.4 25.7-11.6l0-2.8c19.5-.5 43-5.9 53.8-18.1 12.7-13.8 14.6-37.3 12.4-55.1-2.4-17.3-9.7-37.6-24.6-48.1-8.4-5.9-21.6-.8-22.7 9.5-2.2 19.6 1.2 30-38.6 25.1-10.3-23.8-24.6-44.6-42.7-60-69.6-59.7-167.7-53.8-244.2-37.6 19.7 4.6 41.1 8.6 59.7 16.5-26.2 2.4-52.7 11.3-76.2 23.2-32.8 17-44 29.9-56.7 42.4 14.9-2.2 28.9-5.1 43.8-3.8-9.7 5.4-18.4 12.2-26.5 20-25.8 .9-23.8-5.3-26.2-25.9-1.1-10.5-14.3-15.4-22.7-9.7-28.1 19.9-33.5 79.9-12.2 103.5 10.8 12.2 35.1 17.3 54.9 17.8-.3 1.1-.3 1.9-.3 2.7 10.8 .5 19.5 2.7 24.6 11.6 3 1.1 5.7 2.7 8.1 4.6-5.4 .5-11.1 1.4-16.5 1.9-3.3-6.6-13.7-8.1-21.1-8.1-1.6-5.7-6.5-12.2-14.1-10.3-6.8 1.9-14.1 10-14.9 15.9-22.5 9.5-30.1 26.8-25.1 47.6 5.3 24.8 33 36.2 45.9 36.2l0 19.7c-6.6-5-14.3-7.5-26.8-5.7-5.5-5.5-17.3-10.1-17.3 5.7-5.9 2.7-11.4 5.9-15.9 9.2-9.8-4.9-13.6-1.7-11.1 9.2-4.1 4.3-7.8 8.6-11.1 13.8-10.2-3.7-11 2.2-5.4 11.6-1.1 3.5-1.6 7-1.9 10.8-.5 31.6 44.6 64 73.5 65.1 17.3 .5 34.6-8.4 43-23.5 113.2 4.9 226.7 4.1 340.2 0 8.1 15.1 25.4 24.3 42.7 23.5 29.2-1.1 74.3-33.5 73.5-65.1 .2-3.7-.7-7.2-1.7-10.7zM499 167.4c1.1-3 2.4-8.4 2.4-14.6 0-5.9 6.8-8.1 14.1-.8 11.1 11.6 14.9 40.5 13.8 51.1-4.1-13.6-13-29-30.3-35.7zm-4.6 6.7c19.5 6.2 28.6 27.6 29.7 48.9-1.1 2.7-3 5.4-4.9 7.6-5.7 5.9-15.4 10-26.2 12.2 4.3-21.3 .3-47.3-12.7-63 4.9-.8 10.9-2.4 14.1-5.7zm-24.1 6.8c13.8 11.9 20 39.2 14.1 63.5-4.1 .5-8.1 .8-11.6 .8-1.9-21.9-6.8-44-14.3-64.6 3.7 .3 8.1 .3 11.8 .3zM47.7 203c-1.1-10.5 2.4-39.5 13.8-51.1 7-7.3 14.1-5.1 14.1 .8 0 6.2 1.4 11.6 2.4 14.6-17.3 6.8-26.2 22.2-30.3 35.7zm9.7 27.6c-1.9-2.2-3.5-4.9-4.9-7.6 1.4-21.3 10.3-42.7 29.7-48.9 3.2 3.2 9.2 4.9 14.1 5.7-13 15.7-17 41.6-12.7 63-10.8-2.2-20.5-6-26.2-12.2zm47.9 14.6c-4.1 0-8.1-.3-12.7-.8-4.6-18.6-1.9-38.9 5.4-53l0 .3 12.2-5.1c4.9-1.9 9.7-3.8 14.9-4.9-10.7 19.7-17.4 41.3-19.8 63.5zm184-10.5a76.1 76.1 0 1 1 0-152.2 76.1 76.1 0 1 1 0 152.2zm115.6 22.1c-.3 17.8-7 48.9-23 57-13.2 6.6-6.5-7.5-16.5-58.1 13.3 .3 26.6 .3 39.5 1.1zm-54-1.6c.8 4.9 3.8 40.3-1.6 41.9-11.6 3.5-40 4.3-51.1-1.1-4.1-3-4.6-35.9-4.3-41.1l0 .3c18.9-.3 38.1-.3 57 0zM278.5 309c-13 3.5-41.6 4.1-54.6-1.6-6.5-2.7-3.8-42.4-1.9-51.6 19.2-.5 38.4-.5 57.8-.8l0 .3c1.1 8.3 3.3 51.2-1.3 53.7zM172 257.9c12.2-.8 24.6-1.4 36.8-1.6-2.4 15.4-3 43.5-4.9 52.2-1.1 6.8-4.3 6.8-9.7 4.3-21.9-9.8-27.6-35.2-22.2-54.9zm-35.4 31.3c7.8-1.1 15.7-1.9 23.5-2.7 1.6 6.2 3.8 11.9 7 17.6 10 17 44 35.7 45.1 7 6.2 14.9 40.8 12.2 54.9 10.8 15.7-1.4 23.8-1.4 26.8-14.3 12.4 4.3 30.8 4.1 44 3 11.3-.8 20.8-.5 24.6-8.9 1.1 5.1 1.9 11.6 4.6 16.8 10.8 21.3 37.3 1.4 46.8-31.6 8.6 .8 17.6 1.9 26.5 2.7-.4 1.3-3.8 7.3 7.3 11.6-47.6 47-95.7 87.8-163.2 107-63.2-20.8-112.1-59.5-155.9-106.5 9.6-3.4 10.4-8.8 8-12.5zM115 461.7c-3.8 17.8-21.9 29.7-39.7 28.9-19.2-.8-46.5-17-59.2-36.5-2.7-31.1 43.8-61.3 66.2-54.6 14.9 4.3 27.8 30.8 33.5 54 0 3-.3 5.7-.8 8.2zm-8.7-66c-.5-13.5-.5-27-.3-40.5l.3 0c2.7-1.6 5.7-3.8 7.8-6.5 6.5-1.6 13-5.1 15.1-9.2 3.3-7.1-7-7.5-5.4-12.4 2.7-1.1 5.7-2.2 7.8-3.5 29.2 29.2 58.6 56.5 97.3 77-36.8 11.3-72.4 27.6-105.9 47-1.2-18.6-7.7-35.9-16.7-51.9zm337.6 64.6c-103 3.5-206.2 4.1-309.4 0 0 .3 0 .3-.3 .3l0-.3 .3 0c35.1-21.6 72.2-39.2 112.4-50.8 11.6 5.1 23 9.5 34.9 13.2 2.2 .8 2.2 .8 4.3 0 14.3-4.1 28.4-9.2 42.2-15.4 41.5 11.7 78.8 31.7 115.6 53zm10.5-12.4c-35.9-19.5-73-35.9-111.9-47.6 38.1-20 71.9-47.3 103.5-76.7 2.2 1.4 4.6 2.4 7.6 3.2 0 .8 .3 1.9 .5 2.4-4.6 2.7-7.8 6.2-5.9 10.3 2.2 3.8 8.6 7.6 15.1 8.9 2.4 2.7 5.1 5.1 8.1 6.8 0 13.8-.3 27.6-.8 41.3l.3-.3c-9.3 15.9-15.5 37-16.5 51.7zm105.9 6.2c-12.7 19.5-40 35.7-59.2 36.5-19.3 .9-40.5-13.2-40.5-37 5.7-23.2 18.9-49.7 33.5-54 22.7-6.9 69.2 23.4 66.2 54.5zM373.1 75.2c-3.8-72.1-100.8-79.7-126-23.5 44.6-24.3 90.3-15.7 126 23.5zM75 407.1c-15.7 1.6-49.5 25.4-49.5 43.2 0 11.6 15.7 19.5 32.2 14.9 12.2-3.2 31.1-17.6 35.9-27.3 6-11.6-3.7-32.7-18.6-30.8zM290.9 230.9c28.6 0 51.9-21.6 51.9-48.4 0-36.1-40.5-58.1-72.2-44.3 9.5 3 16.5 11.6 16.5 21.6 0 23.3-33.3 32-46.5 11.3-7.3 34.1 19.4 59.8 50.3 59.8zM68.2 474.1c.5 6.5 12.2 12.7 21.6 9.5 6.8-2.7 14.6-10.5 17.3-16.2 3-7-1.1-20-9.7-18.4-8.9 1.6-29.7 16.7-29.2 25.1zm433.2-67c-14.9-1.9-24.6 19.2-18.9 30.8 4.9 9.7 24.1 24.1 36.2 27.3 16.5 4.6 32.2-3.2 32.2-14.9 0-17.8-33.8-41.6-49.5-43.2zM479 449c-8.4-1.6-12.4 11.3-9.5 18.4 2.4 5.7 10.3 13.5 17.3 16.2 9.2 3.2 21.1-3 21.3-9.5 .9-8.4-20.2-23.5-29.1-25.1z\"]\n};\nvar faJenkins = {\n  prefix: 'fab',\n  iconName: 'jenkins',\n  icon: [448, 512, [], \"f3b6\", \"M455.4 425c-1.4-11.2-19-23.1-28.2-31.9-5.1-5-29-23.1-30.4-29.9-1.4-6.6 9.7-21.5 13.3-28.9 5.1-10.7 8.8-23.7 11.3-32.6 18.8-66.1 20.7-156.9-6.2-211.2-10.2-20.6-38.6-49-56.4-62.5-42-31.7-119.6-35.3-170.1-16.6-14.1 5.2-27.8 9.8-40.1 17.1-33.1 19.4-68.3 32.5-78.1 71.6-24.2 10.8-31.5 41.8-30.3 77.8 .2 7 4.1 15.8 2.7 22.4-.7 3.3-5.2 7.6-6.1 9.8-11.6 27.7-2.3 64 11.1 83.7 8.1 11.9 21.5 22.4 39.2 25.2 .7 10.6 3.3 19.7 8.2 30.4 3.1 6.8 14.7 19 10.4 27.7-2.2 4.4-21 13.8-27.3 17.6-21.1 12.5-36.4 20.3-55.9 34.3-12.6 9-32.3 10.2-29.2 31.1 2.1 14.1 10.1 31.6 14.7 45.8 .7 2 1.4 4.1 2.1 6l422 0c4.9-15.3 9.7-30.9 14.6-47.2 3.4-11.4 10.2-27.8 8.7-39.7zM174.2 33.7c1.8-.5 3.4 .7 4.9 2.4-.2 5.2-5.4 5.1-8.9 6.8-5.4 6.7-13.4 9.8-20 17.2-6.8 7.5-14.4 27.7-23.4 30-4.5 1.1-9.7-.8-13.6-.5-10.4 .7-17.7 6-28.3 7.5 13.6-29.9 56.1-54 89.3-63.4zM69.4 127.3c13.5-14.9 32.1-24.1 54.8-25.9 11.7 29.7-8.4 65-.9 97.6 2.3 9.9 10.2 25.4-2.4 25.7 .3-28.3-34.8-46.3-61.3-29.6-1.8-21.5-4.9-51.7 9.8-67.8zm36.7 200.2c-1-4.1-2.7-12.9-2.3-15.1 1.6-8.7 17.1-12.5 11-24.7-11.3-.1-13.8 10.2-24.1 11.3-26.7 2.6-45.6-35.4-44.4-58.4 1-19.5 17.6-38.2 40.1-35.8 16 1.8 21.4 19.2 24.5 34.7 9.2 .5 22.5-.4 26.9-7.6-.6-17.5-8.8-31.6-8.2-47.7 1-30.3 17.5-57.6 4.8-87.4 13.6-30.9 53.5-55.3 83.1-70 36.6-18.3 94.9-3.7 129.3 15.8 19.7 11.1 34.4 32.7 48.3 50.7-19.5-5.8-36.1 4.2-33.1 20.3 16.3-14.9 44.2-.2 52.5 16.4 7.9 15.8 7.8 39.3 9 62.8 2.9 57-10.4 115.9-39.1 157.1-7.7 11-14.1 23-24.9 30.6-26 18.2-65.4 34.7-99.2 23.4-44.7-15-65-44.8-89.5-78.8 .7 18.7 13.8 34.1 26.8 48.4 11.3 12.5 25 26.6 39.7 32.4-12.3-2.9-31.1-3.8-36.2 7.2-28.6-1.9-55.1-4.8-68.7-24.2-10.6-15.4-21.4-41.4-26.3-61.4zm222 124.1c4.1-3 11.1-2.9 17.4-3.6-5.4-2.7-13-3.7-19.3-2.2-.1-4.2-2-6.8-3.2-10.2 10.6-3.8 35.5-28.5 49.6-20.3 6.7 3.9 9.5 26.2 10.1 37 .4 9-.8 18-4.5 22.8-18.8-.6-35.8-2.8-50.7-7 .9-6.1-1-12.1 .6-16.5zm-17.2-20c-16.8 .8-26-1.2-38.3-10.8 .2-.8 1.4-.5 1.5-1.4 18 8 40.8-3.3 59-4.9-7.9 5.1-14.6 11.6-22.2 17.1zm-12.1 33.2c-1.6-9.4-3.5-12-2.8-20.2 25-16.6 29.7 28.6 2.8 20.2zM194.3 438.6c-11.6-.7-48.1-14-38.5-23.7 9.4 6.5 27.5 4.9 41.3 7.3 .8 4.4-2.8 10.2-2.8 16.4zM26 497.1c-4.3-12.7-9.2-25.1-14.8-36.9 30.8-23.8 65.3-48.9 102.2-63.5 2.8-1.1 23.2 25.4 26.2 27.6 16.5 11.7 37 21 56.2 30.2 1.2 8.8 3.9 20.2 8.7 35.5 .7 2.3 1.4 4.7 2.2 7.2l-180.7 0 0-.1zm240.6 5.7l-.8 0c.3-.2 .5-.4 .8-.5l0 .5zm7.5-5.7c2.1-1.4 4.3-2.8 6.4-4.3 1.1 1.4 2.2 2.8 3.2 4.3l-9.6 0zm15.1-24.7c-10.8 7.3-20.6 18.3-33.3 25.2-6 3.3-27 11.7-33.4 10.2-3.6-.8-3.9-5.3-5.4-9.5-3.1-9-10.1-23.4-10.8-37-.8-17.2-2.5-46 16-42.4 14.9 2.9 32.3 9.7 43.9 16.1 7.1 3.9 11.1 8.6 21.9 9.5-.1 1.4-.1 2.8-.2 4.3-5.9 3.9-15.3 3.8-21.8 7.1 9.5 .4 17 2.7 23.5 5.9-.1 3.4-.3 7-.4 10.6zm53.4 24.7l-14 0c-.1-3.2-2.8-5.8-6.1-5.8s-5.9 2.6-6.1 5.8l-17.4 0c-2.8-4.4-5.7-8.6-8.9-12.5 2.1-2.2 4-4.7 6-6.9 9 3.7 14.8-4.9 21.7-4.2 7.9 .8 14.2 11.7 25.4 11l-.6 12.6zm8.7 0c.2-4 .4-7.8 .6-11.5 15.6-7.3 29 1.3 35.7 11.5l-36.3 0zm83.4-37c-2.3 11.2-5.8 24-9.9 37.1-.2-.1-.4-.1-.6-.1l-27.9 0c.6-1.1 1.2-2.2 1.9-3.3-2.6-6.1-9-8.7-10.9-15.5 12.1-22.7 6.5-93.4-24.2-78.5 4.3-6.3 15.6-11.5 20.8-19.3 13 10.4 20.8 20.3 33.2 31.4 6.8 6 20 13.3 21.4 23.1 .8 5.5-2.6 18.9-3.8 25.1zM190.5 130.5c5.4-14.9 27.2-34.7 45-32 7.7 1.2 18 8.2 12.2 17.7-30.2-7-45.2 12.6-54.4 33.1-8.1-2-4.9-13.1-2.8-18.8zm184.1 63.1c8.2-3.6 22.4-.7 29.6-5.3-4.2-11.5-10.3-21.4-9.3-37.7 .5 0 1 0 1.4 .1 6.8 14.2 12.7 29.2 21.4 41.7-5.7 13.5-43.6 25.4-43.1 1.2zm-96.8 2.7c-6.8-10.9-19-32.5-14.5-45.3 6.5 11.9 8.6 24.4 17.8 33.3 4.1 4 12.2 9 8.2 20.2-.9 2.7-7.8 8.6-11.7 9.7-14.4 4.3-47.9 .9-36.6-17.1 11.9 .7 27.9 7.8 36.8-.8zm27.3 70c3.8 6.6 1.4 18.7 12.1 20.6 20.2 3.4 43.6-12.3 58.1-17.8 9-15.2-.8-20.7-8.9-30.5-16.6-20-38.8-44.8-38-74.7 6.7-4.9 7.3 7.4 8.2 9.7 8.7 20.3 30.4 46.2 46.3 63.5 3.9 4.3 10.3 8.4 11 11.2 2.1 8.2-5.4 18-4.5 23.5-21.7 13.9-45.8 29.1-81.4 25.6-7.4-6.7-10.3-21.4-2.9-31.1zm-201.3-9.2c-6.8-3.9-8.4-21-16.4-21.4-11.4-.7-9.3 22.2-9.3 35.5-7.8-7.1-9.2-29.1-3.5-40.3-6.6-3.2-9.5 3.6-13.1 5.9 4.7-34.1 49.8-15.8 42.3 20.3zm299.6 28.8c-10.1 19.2-24.4 40.4-54 41-.6-6.2-1.1-15.6 0-19.4 22.7-2.2 36.6-13.7 54-21.6zM261.5 298.3c18.9 9.9 53.6 11 79.3 10.2 1.4 5.6 1.3 12.6 1.4 19.4-33 1.8-72-6.4-80.7-29.6zM353.7 345c-1.7 4.3-5.3 9.3-9.8 11.1-12.1 4.9-45.6 8.7-62.4-.3-10.7-5.7-17.5-18.5-23.4-26-2.8-3.6-16.9-12.9-.2-12.9 13.1 32.7 58 29 95.8 28.1z\"]\n};\nvar faSlideshare = {\n  prefix: 'fab',\n  iconName: 'slideshare',\n  icon: [512, 512, [], \"f1e7\", \"M187.9 153.7c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7s61.7-26 61.7-57.7c0-32-27.7-57.7-61.7-57.7zm143.4 0c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7 34.3 0 61.7-26 61.7-57.7 .1-32-27.4-57.7-61.7-57.7zm156.6 90l-6 4.3 0-198.3c0-27.4-20.6-49.7-46-49.7L76.8 0c-25.4 0-46 22.3-46 49.7l0 198.3c-2-1.4-4.3-2.9-6.3-4.3-15.1-10.6-25.1 4-16 17.7 18.3 22.6 53.1 50.3 106.3 72-56.3 191.7 137.4 222.3 134.3 124.1 0-.7 .3-56.6 .3-96.6 5.1 1.1 9.4 2.3 13.7 3.1 0 39.7 .3 92.8 .3 93.5-3.1 98.3 190.6 67.7 134.3-124 53.1-21.7 88-49.4 106.3-72 9.1-13.8-.9-28.3-16.1-17.8zm-30.5 19.2c-68.9 37.4-128.3 31.1-160.6 29.7-23.7-.9-32.6 9.1-33.7 24.9-10.3-7.7-18.6-15.5-20.3-17.1-5.1-5.4-13.7-8-27.1-7.7-31.7 1.1-89.7 7.4-157.4-28l0-192.4c0-34.9 8.9-45.7 40.6-45.7l317.7 0c30.3 0 40.9 12.9 40.9 45.7l0 190.6-.1 0z\"]\n};\nvar faUber = {\n  prefix: 'fab',\n  iconName: 'uber',\n  icon: [448, 512, [], \"f402\", \"M414.1 32L33.9 32C15.2 32 0 47.2 0 65.9L0 446c0 18.8 15.2 34 33.9 34L414 480c18.7 0 33.9-15.2 33.9-33.9l0-380.2C448 47.2 432.8 32 414.1 32zM237.6 391.1C163 398.6 96.4 344.2 88.9 269.6l94.4 0 0 20.4c0 3.7 3 6.8 6.8 6.8l67.9 0c3.7 0 6.8-3 6.8-6.8l0-67.9c0-3.7-3-6.8-6.8-6.8l-67.9 0c-3.7 0-6.8 3-6.8 6.8l0 20.4-94.4 0c7-69.4 65.4-122.2 135.1-122.2s128.1 52.8 135.1 122.2c7.5 74.5-46.9 141.1-121.5 148.6z\"]\n};\nvar faDigitalOcean = {\n  prefix: 'fab',\n  iconName: 'digital-ocean',\n  icon: [512, 512, [], \"f391\", \"M87 481.8l73.7 0 0-73.6-73.7 0 0 73.6zM25.4 346.6l0 61.6 61.6 0 0-61.6-61.6 0zM491.6 176.9C468.6 102.7 409.2 43.6 335 20.3 164.9-32.8 8 93.7 8 255.9l95.8 0c0-101.8 101-180.5 208.1-141.7 39.7 14.3 71.5 46.1 85.8 85.7 39.1 107-39.7 207.8-141.4 208l0 .3-.3 0 0 95.8c162.6 0 288.8-156.8 235.6-327.1zm-235.3 231l0-95.3-95.6 0 0 95.6 95.3 0 0-.3 .3 0z\"]\n};\nvar faSoundcloud = {\n  prefix: 'fab',\n  iconName: 'soundcloud',\n  icon: [640, 512, [], \"f1be\", \"M640.2 298.6c-1.3 23.1-11.5 44.8-28.4 60.5s-39.2 24.4-62.3 24.1l-218 0c-4.8 0-9.4-2-12.8-5.4s-5.3-8-5.3-12.8l0-234.8c-.2-4 .9-8 3.1-11.4s5.3-6.1 9-7.7c0 0 20.1-13.9 62.3-13.9 25.8 0 51.1 6.9 73.3 20.1 17.3 10.2 32.3 23.8 44.1 40.1s20 34.8 24.2 54.4c7.5-2.1 15.3-3.2 23.1-3.2 11.7-.1 23.3 2.2 34.2 6.7s20.5 11.3 28.7 19.7 14.6 18.3 18.9 29.3 6.3 22.6 5.9 34.3zm-354-153.5c.1-1 0-2-.3-2.9s-.8-1.8-1.5-2.6-1.5-1.3-2.4-1.7c-1.8-.8-4-.8-5.8 0-.9 .4-1.7 1-2.4 1.7s-1.2 1.6-1.5 2.6-.4 1.9-.3 2.9c-6 78.9-10.6 152.9 0 231.6 .2 1.7 1 3.3 2.3 4.5 2.6 2.4 6.8 2.4 9.4 0 1.3-1.2 2.1-2.8 2.3-4.5 11.3-79.4 6.6-152 0-231.6l.2 0zm-44 27.3c-.2-1.8-1.1-3.5-2.4-4.7s-3.1-1.9-5-1.9-3.6 .7-5 1.9-2.2 2.9-2.4 4.7c-7.9 67.9-7.9 136.5 0 204.4 .3 1.8 1.2 3.4 2.5 4.5s3.1 1.8 4.8 1.8 3.5-.6 4.8-1.8 2.2-2.8 2.5-4.5c8.8-67.8 8.8-136.5 .1-204.4l.1 0zm-44.3-6.9c-.2-1.8-1-3.4-2.3-4.6s-3-1.8-4.8-1.8-3.5 .7-4.8 1.8-2.1 2.8-2.3 4.6c-6.7 72-10.2 139.3 0 211.1 0 1.9 .7 3.7 2.1 5s3.1 2.1 5 2.1 3.7-.7 5-2.1 2.1-3.1 2.1-5c10.5-72.8 7.3-138.2 .1-211.1l-.1 0zm-44 20.6c0-1.9-.8-3.8-2.1-5.2s-3.2-2.1-5.2-2.1-3.8 .8-5.2 2.1-2.1 3.2-2.1 5.2c-8.1 63.3-8.1 127.5 0 190.8 .2 1.8 1 3.4 2.4 4.6s3.1 1.9 4.8 1.9 3.5-.7 4.8-1.9 2.2-2.8 2.4-4.6c8.8-63.3 8.9-127.5 .3-190.8l-.1 0zm-44.5 47.6c0-1.9-.8-3.8-2.1-5.1s-3.2-2.1-5.1-2.1-3.8 .8-5.1 2.1-2.1 3.2-2.1 5.1c-10.5 49.2-5.5 93.9 .4 143.6 .3 1.6 1.1 3.1 2.3 4.2s2.8 1.7 4.5 1.7 3.2-.6 4.5-1.7 2.1-2.5 2.3-4.2c6.6-50.4 11.6-94.1 .4-143.6zm-44.1-7.5c-.2-1.8-1.1-3.5-2.4-4.8s-3.2-1.9-5-1.9-3.6 .7-5 1.9-2.2 2.9-2.4 4.8c-9.3 50.2-6.2 94.4 .3 144.5 .7 7.6 13.6 7.5 14.4 0 7.2-50.9 10.5-93.8 .3-144.5l-.2 0zM20.7 250.8c-.2-1.8-1.1-3.5-2.4-4.8s-3.2-1.9-5-1.9-3.6 .7-5 1.9-2.3 2.9-2.4 4.8c-8.5 33.7-5.9 61.6 .6 95.4 .2 1.7 1 3.3 2.3 4.4s2.9 1.8 4.7 1.8 3.4-.6 4.7-1.8 2.1-2.7 2.3-4.4c7.5-34.5 11.2-61.8 .4-95.4l-.2 0z\"]\n};\nvar faSquareFigma = {\n  prefix: 'fab',\n  iconName: 'square-figma',\n  icon: [448, 512, [], \"e7e4\", \"M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM173.7 96c-33 0-59.8 26.8-59.8 59.8 0 21 10.8 39.4 27.2 50.1-16.4 10.7-27.2 29.1-27.2 50.1s10.8 39.5 27.2 50.1c-16.4 10.7-27.2 29.1-27.2 50.1 0 33.1 27.1 59.8 60.1 59.8 33.2 0 60.6-26.9 60.6-60.3l0-55.7c10.6 9.8 24.8 15.8 40.4 15.8l1.1 0c33 0 59.8-26.8 59.8-59.8 0-21-10.8-39.5-27.2-50.1 16.4-10.7 27.2-29.1 27.2-50.1 0-33-26.8-59.8-59.8-59.8L173.7 96zm41.6 219.8l0 39.9c0 22.6-18.6 41-41.3 41-22.4 0-40.7-18.2-40.7-40.5 0-22.3 18.1-40.4 40.3-40.4l41.7 0zm0-100.3l0 80.9-41.7 0c-22.3-.1-40.3-18.2-40.3-40.5 0-22.3 18.1-40.5 40.5-40.5l41.6 0zm60.8 0c22.3 0 40.5 18.1 40.5 40.5s-18.1 40.5-40.5 40.5l-1.1 0c-22.3 0-40.4-18.1-40.4-40.5s18.1-40.5 40.4-40.5l1.1 0zm-60.8-19.3l-41.6 0c-22.3 0-40.5-18.1-40.5-40.4s18.1-40.5 40.5-40.5l41.6 0 0 80.9zm60.8-80.9c22.3 0 40.5 18.1 40.5 40.5s-18.1 40.4-40.5 40.4l-41.5 0 0-80.9 41.5 0z\"]\n};\nvar faCreativeCommonsSa = {\n  prefix: 'fab',\n  iconName: 'creative-commons-sa',\n  icon: [512, 512, [], \"f4ef\", \"M255.6 8C397.4 8 504 118.1 504 256 504 403.1 385.5 504 255.6 504 121.6 504 8 394.5 8 256 8 123.1 112.7 8 255.6 8zm.8 44.7c-118.2 0-203.7 97.9-203.7 203.3 0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3zM145.7 221c13-83.9 80.5-95.7 108.9-95.7 99.8 0 127.5 82.5 127.5 134.2 0 63.6-41 132.9-128.9 132.9-38.9 0-99.1-20-109.4-97l62.5 0c1.5 30.1 19.6 45.2 54.5 45.2 23.3 0 58-18.2 58-82.8 0-82.5-49.1-80.6-56.7-80.6-33.1 0-51.7 14.6-55.8 43.8l18.2 0-49.2 49.2-49-49.2 19.4 0z\"]\n};\nvar faChrome = {\n  prefix: 'fab',\n  iconName: 'chrome',\n  icon: [512, 512, [], \"f268\", \"M0 256c0-46.6 12.5-90.4 34.3-128.9L144.1 318.3c21.9 39.2 63.8 65.7 111.9 65.7 14.3 0 27.1-2.3 40.8-6.6L220.5 509.6C95.9 492.3 0 385.3 0 256zm365.1 65.6c12.3-19.2 18.9-42.5 18.9-65.6 0-38.2-16.8-72.5-43.3-96l152.7 0c12 29.6 18.6 62.1 18.6 96 0 141.4-114.6 255.1-256 256L365.1 321.6zM477.8 128L256 128c-62.9 0-113.7 44.1-125.5 102.7L54.2 98.5C101 38.5 174 0 256 0 350.8 0 433.5 51.5 477.8 128zM344 256a88 88 0 1 1 -176 0 88 88 0 1 1 176 0z\"]\n};\nvar faTradeFederation = {\n  prefix: 'fab',\n  iconName: 'trade-federation',\n  icon: [512, 512, [], \"f513\", \"M256 8.8a247.2 247.2 0 1 0 0 494.4 247.2 247.2 0 1 0 0-494.4zm0 11.6a235.6 235.6 0 1 1 0 471.2 235.6 235.6 0 1 1 0-471.2zM411.1 163.1l0-46.8-193.8 0 0 81.7-155.1 0 36.7 46 117.7 0 0 196.8 48.8 0 0-195.8 83.3 0 0-47-83.3 0 0-34.8 145.7 0 0-.1zm-73.3 45.1l0 23.9-82.9 0 0 197.4-26.8 0 0-197.4-123.8 0-20.1-23.9 143.9 0 0-80.6 171.8 0 0 24.4-145 0 0 56.2 82.9 0zm-161.3-69l-12.4-20.7 2.1 23.8-23.5 5.4 23.3 5.4-2.1 24 12.3-20.5 22.2 9.5-15.7-18.1 15.8-18.1-22 9.3zm-29.6-19.7l9.3-11.5-12.7 5.9-8-12.4 1.7 13.9-14.3 3.8 13.7 2.7-.8 14.7 6.8-12.2 13.8 5.3-9.5-10.2zM312.3 264.7l-13.1 5.6-7.3-12.2 1.3 14.2-13.9 3.2 13.9 3.2-1.2 14.2 7.3-12.2 13.1 5.5-9.4-10.7 9.3-10.8zm106.9-77.2l-20.9 9.1-12-19.6 2.2 22.7-22.3 5.4 22.2 4.9-1.8 22.9 11.5-19.6 21.2 8.8-15.1-17 15-17.6zM256 29.9a226.1 226.1 0 1 0 0 452.2 226.1 226.1 0 1 0 0-452.2zM350.6 196l0 51-83.3 0 0 195.7-52.7 0 0-196.8-116.7 0-40-49.9 157.4 0 0-81.6 197.8 0 0 50.7-145.7 0 0 30.9 83.2 0zM256 43.2c60.3 0 114.8 25 153.6 65.2l-199.1 0 0 81.6-157.4 0C81.1 104.8 161.4 43.2 256 43.2zm0 427.1c-117.9 0-213.6-95.6-213.6-213.5 0-21.2 3.1-41.8 8.9-61.1l43.8 56.3 114.7 0 0 196.8 64.6 0 0-195.8 83.3 0 0-62.7-83.2 0 0-19.2 145.6 0 0-50.8c30.8 37 49.3 84.6 49.3 136.5 .1 117.9-95.5 213.5-213.4 213.5zM186.8 275l-11-21.4 1.7 24.5-23.7 3.9 23.8 5.9-3.7 23.8 13-20.9 21.5 10.8-15.8-18.8 16.9-17.1-22.7 9.3z\"]\n};\nvar faVaadin = {\n  prefix: 'fab',\n  iconName: 'vaadin',\n  icon: [448, 512, [], \"f408\", \"M224.5 140.7C226 123.1 229.4 88 274.3 88l98.6 0c20.7 0 32.1-7.8 32.1-21.6l0-12.3c0-12.2 9.3-22.1 21.5-22.1S448 41.9 448 54.1l0 36.5c0 42.9-21.5 62-66.8 62l-100.5 0c-30.1 0-33 14.7-33 27.1 0 1.3-.1 2.5-.2 3.7-.7 12.3-10.9 22.2-23.4 22.2s-22.7-9.8-23.4-22.2c-.1-1.2-.2-2.4-.2-3.7 0-12.3-3-27.1-33-27.1l-100.7 0C21.5 152.6 0 133.5 0 90.6L0 54.1C0 41.9 9.4 32 21.6 32s21.5 9.9 21.5 22.1l0 12.3C43.1 80.2 54.5 88 75.2 88l98.6 0c44.8 0 48.3 35.1 49.8 52.7l.9 0zM224 456c11.5 0 21.4-7 25.7-16.3 1.1-1.8 97.1-169.6 98.2-171.4 11.9-19.6-3.2-44.3-27.2-44.3-13.9 0-23.3 6.4-29.8 20.3L224 362 157.1 244.3c-6.4-13.9-15.9-20.3-29.8-20.3-24 0-39.1 24.6-27.2 44.3 1.1 1.9 97.1 169.6 98.2 171.4 4.3 9.3 14.2 16.3 25.7 16.3z\"]\n};\nvar faDeviantart = {\n  prefix: 'fab',\n  iconName: 'deviantart',\n  icon: [320, 512, [], \"f1bd\", \"M320 93.2l-98.2 179.1 7.4 9.5 90.8 0 0 127.7-160.9 0-13.5 9.2-43.7 84c-.3 0-8.6 8.6-9.2 9.2l-92.7 0 0-93.2 93.2-179.4-7.4-9.2-85.8 0 0-127.6 156 0 13.5-9.2 43.7-84c.3 0 8.6-8.6 9.2-9.2l97.6 0 0 93.1z\"]\n};\nvar faMedium = {\n  prefix: 'fab',\n  iconName: 'medium',\n  icon: [448, 512, [62407, \"medium-m\"], \"f23a\", \"M369.4 32c43.4 0 78.6 35.2 78.6 78.6l0 83.8c-1.9-.1-3.8-.2-5.7-.2l-.4 0c-10 0-22.3 2.4-31.1 6.8-10 4.6-18.7 11.5-26 20.6-11.8 14.6-18.9 34.3-20.6 56.4-.1 .7-.1 1.3-.2 2s-.1 1.2-.1 1.9c-.1 1.2-.1 2.4-.1 3.6 0 1.9-.1 3.8 0 5.8 1.2 50.1 28.2 90.2 76.3 90.2 2.7 0 5.3-.1 7.9-.4l0 20.4c0 43.4-35.2 78.6-78.6 78.6L78.6 480C35.2 480 0 444.8 0 401.4L0 110.6C0 67.2 35.2 32 78.6 32l290.8 0zM82.3 138.9l.3 .1c13.2 3 19.8 7.4 19.8 23.4l0 187.2c0 16-6.7 20.4-19.9 23.4l-.3 .1 0 2.8 52.8 0 0-2.8-.3-.1c-13.2-3-19.9-7.4-19.9-23.4l0-176.3 86.1 202.5 4.9 0 88.6-208.2 0 186.6c-1.1 12.6-7.8 16.5-19.7 19.2l-.3 .1 0 2.7 91.9 0 0-2.7-.3-.1c-11.9-2.7-18.7-6.6-19.9-19.2l-.1-191.8 .1 0c0-16 6.7-20.4 19.9-23.4l.3-.1 0-2.7-72.2 0-67 157.4-67-157.4-77.8 0 0 2.7zM448 340.3c-25.1-7.4-43-35.1-41.2-67.8l0 0 41.1 0 0 67.8zm-6.4-135.6c2.3 0 4.4 .3 6.4 .9l0 57.4-40.2 0c1.5-33.6 13.6-57.9 33.8-58.3z\"]\n};\nvar faMediumM = faMedium;\nvar faYoutubeShorts = {\n  prefix: 'fab',\n  iconName: 'youtube-shorts',\n  icon: [448, 512, [], \"e8bc\", \"M416.1 52.3c-25.4-47.8-85.2-66.1-133.5-41L70.9 122.5c-48.3 25.2-66.8 84.3-41.4 132.1 17.1 32.1 49.7 50.9 83.9 52.2L73.7 327.7C25.4 352.8 6.8 412 32.2 459.8s85.2 66.1 133.5 41L377.5 389.5c48.3-25.2 66.8-84.3 41.4-132.1-17.1-32.1-49.7-50.9-83.9-52.2l39.7-20.9C423 159.2 441.5 100 416.1 52.3zM296.5 256.3l-128.2 78.7 0-157.9 128.2 79.1z\"]\n};\nvar faOpencart = {\n  prefix: 'fab',\n  iconName: 'opencart',\n  icon: [640, 512, [], \"f23d\", \"M331.8 440.4a45.8 45.8 0 1 1 91.5 .3 45.8 45.8 0 1 1 -91.5-.3zM169.4 394.9a45.7 45.7 0 1 0 .3 91.3 45.7 45.7 0 1 0 -.3-91.3zm291.7-270c-302.2 0-379.2-12.8-461.1-99.2 34.4 51.7 53.3 148.9 373.1 144.2 333.3-5 130 86.1 70.8 188.9 186.7-166.7 319.4-233.9 17.2-233.9z\"]\n};\nvar faMattermost = {\n  prefix: 'fab',\n  iconName: 'mattermost',\n  icon: [512, 512, [], \"e8b4\", \"M262.9 .1l-35 41.4C163 53.2 107 97.5 85 162.5 52.3 259.1 107.2 365.1 207.6 399.1s208.4-16.9 241.1-113.6c21.9-64.8 4.5-133.7-39.5-182.3l-2.7-54.3C494.8 113 535.3 229.3 498.5 338.1 453.1 472 307.8 543.7 174 498.4S-31.7 307.8 13.6 173.9C50.5 65 153.6-2.9 262.9 .1zm71.8 23.6c1.4 .5 2.5 1.5 3.2 2.7 0 .1 .1 .1 .2 .2s.1 .2 .1 .3c.3 .6 .6 1.4 .8 2.3 .6 4.3 .4 22.1 .4 22.5l1 37.9 1.5 43.7 1.9 76c0 .7 .5 35.2-23.4 58.7-24.2 23.7-54 21.6-73.3 15s-44.3-22.9-49.2-56.5 17-60.8 17-60.8L262.4 106.3 290.1 72.5 314 43c.2-.3 11-14.7 14-17.7 .6-.6 1.3-1 1.9-1.3 .1-.1 .3-.2 .4-.2l.1 0c1.3-.6 2.8-.7 4.3-.2z\"]\n};\nvar faYCombinator = {\n  prefix: 'fab',\n  iconName: 'y-combinator',\n  icon: [448, 512, [], \"f23b\", \"M448 32l0 448-448 0 0-448 448 0zM236 287.5l77.5-145.5-32.7 0-45.8 91c-4.7 9.3-9 18.3-12.8 26.8l-12.2-26.8-45.2-91-35 0 76.7 143.8 0 94.5 29.5 0 0-92.8z\"]\n};\nvar faLine = {\n  prefix: 'fab',\n  iconName: 'line',\n  icon: [512, 512, [], \"f3c0\", \"M311 196.8l0 81.3c0 2.1-1.6 3.7-3.7 3.7l-13 0c-1.3 0-2.4-.7-3-1.5L254 230 254 278.2c0 2.1-1.6 3.7-3.7 3.7l-13 0c-2.1 0-3.7-1.6-3.7-3.7l0-81.3c0-2.1 1.6-3.7 3.7-3.7l12.9 0c1.1 0 2.4 .6 3 1.6l37.3 50.3 0-48.2c0-2.1 1.6-3.7 3.7-3.7l13 0c2.1-.1 3.8 1.6 3.8 3.5l0 .1zm-93.7-3.7l-13 0c-2.1 0-3.7 1.6-3.7 3.7l0 81.3c0 2.1 1.6 3.7 3.7 3.7l13 0c2.1 0 3.7-1.6 3.7-3.7l0-81.3c0-1.9-1.6-3.7-3.7-3.7zm-31.4 68.1l-35.6 0 0-64.4c0-2.1-1.6-3.7-3.7-3.7l-13 0c-2.1 0-3.7 1.6-3.7 3.7l0 81.3c0 1 .3 1.8 1 2.5 .7 .6 1.5 1 2.5 1l52.2 0c2.1 0 3.7-1.6 3.7-3.7l0-13c0-1.9-1.6-3.7-3.5-3.7l.1 0zm193.7-68.1l-52.3 0c-1.9 0-3.7 1.6-3.7 3.7l0 81.3c0 1.9 1.6 3.7 3.7 3.7l52.2 0c2.1 0 3.7-1.6 3.7-3.7l0-13.1c0-2.1-1.6-3.7-3.7-3.7l-35.5 0 0-13.6 35.5 0c2.1 0 3.7-1.6 3.7-3.7l0-13.1c0-2.1-1.6-3.7-3.7-3.7l-35.5 0 0-13.7 35.5 0c2.1 0 3.7-1.6 3.7-3.7l0-13c-.1-1.9-1.7-3.7-3.7-3.7l.1 0zM512 93.4l0 326c-.1 51.2-42.1 92.7-93.4 92.6l-326 0C41.4 511.9-.1 469.8 0 418.6l0-326C.1 41.4 42.2-.1 93.4 0l326 0c51.2 .1 92.7 42.1 92.6 93.4zM441.6 233.5c0-83.4-83.7-151.3-186.4-151.3S68.8 150.1 68.8 233.5c0 74.7 66.3 137.4 155.9 149.3 21.8 4.7 19.3 12.7 14.4 42.1-.8 4.7-3.8 18.4 16.1 10.1s107.3-63.2 146.5-108.2c27-29.7 39.9-59.8 39.9-93.1l0-.2z\"]\n};\nvar faAmilia = {\n  prefix: 'fab',\n  iconName: 'amilia',\n  icon: [448, 512, [], \"f36d\", \"M240.2 32c-61.9 0-131.5 16.9-184.2 55.4-5.1 3.1-9.1 9.2-7.2 19.4 1.1 5.1 5.1 27.4 10.2 39.6 4.1 10.2 14.2 10.2 20.3 6.1 32.5-22.3 96.5-47.7 152.3-47.7 57.9 0 58.9 28.4 58.9 73.1l0 38.5C203.1 227.7 78.3 251 46.8 264.2 11.3 280.5 16.4 357.7 16.4 376S31.6 480 141.3 480c47.8 0 113.7-20.7 153.3-42.1l0 25.4c0 3 2.1 8.2 6.1 9.1 3.1 1 50.7 2 59.9 2s62.5 .3 66.5-.7c4.1-1 5.1-6.1 5.1-9.1l0-296.6c-.1-80.3-57.9-136-192-136zm50.2 348c-21.4 13.2-48.7 24.4-79.1 24.4-52.8 0-58.9-33.5-59-44.7 0-12.2-3-42.7 18.3-52.9 24.3-13.2 75.1-29.4 119.8-33.5l0 106.7z\"]\n};\nvar faAsymmetrik = {\n  prefix: 'fab',\n  iconName: 'asymmetrik',\n  icon: [576, 512, [], \"f372\", \"M517.5 309.2c38.8-40 58.1-80 58.5-116.1 .8-65.5-59.4-118.2-169.4-135-128.7-19.7-288.5 15.5-406.6 82.4 52-26.5 110.6-48.2 170.7-58.2 74.5-20.5 153-25.4 221.3-14.8 152.5 23.8 196.8 127.5 98.8 231.7-10.2 10.8-22 21.1-35 30.6L304.9 103.4 114.7 388.9c-65.6-29.4-76.5-90.2-19.1-151.2 20.8-22.2 48.3-41.9 79.5-58.1 20-12.2 39.7-22.6 62-30.7-65.1 20.3-122.7 52.9-161.6 92.9-27.7 28.6-41.4 57.1-41.7 82.9-.5 35.1 23.4 65.1 68.4 83l-34.5 51.7 101.6 0 22-34.4c22.2 1 45.3 0 68.6-2.7l-22.8 37.1 135.5 0-32.6-53.1c18.6-5.3 36.9-11.5 54.5-18.7l45.9 71.8 101.6 0-73.4-110.4c18.5-12.1 35-25.5 48.9-39.8zM329.9 389.7l-25-40.6-32.7 53.3c-23.4 3.5-46.7 5.1-69.2 4.4l101.9-159.3 78.7 123c-17.2 7.4-35.3 13.9-53.7 19.2z\"]\n};\nvar faPhabricator = {\n  prefix: 'fab',\n  iconName: 'phabricator',\n  icon: [512, 512, [], \"f3db\", \"M331.1 262.1l-.1-13s21.7-19.8 21.1-21.2l-9.5-20c-.6-1.4-29.5-.5-29.5-.5l-9.4-9.3s.2-28.5-1.2-29.1l-20.1-9.2c-1.4-.6-20.7 21-20.7 21l-13.1-.2s-20.5-21.4-21.9-20.8l-20 8.3c-1.4 .5 .2 28.9 .2 28.9l-9.1 9.1s-29.2-.9-29.7 .4L160 226.3c-.6 1.4 21 21 21 21l.1 12.9S159.4 280 160 281.4l9.5 20c.6 1.4 29.5 .5 29.5 .5l9.4 9.3s-.2 31.8 1.2 32.3l20.1 8.3c1.4 .6 20.7-23.5 20.7-23.5l13.1 .2s20.5 23.8 21.8 23.3l20-7.5c1.4-.6-.2-32.1-.2-32.1l9.1-9.1s29.2 .9 29.7-.5l8.1-19.8c.7-1.1-20.9-20.7-20.9-20.7zm-44.9-8.7c.7 17.1-12.8 31.6-30.1 32.4s-32.1-12.5-32.8-29.6 12.8-31.6 30.1-32.3c17.3-.8 32.1 12.5 32.8 29.5zm201.2-37.9l-97-97-.1 .1c-75.1-73.3-195.4-72.8-269.8 1.6-50.9 51-27.8 27.9-95.7 95.3-22.3 22.3-22.3 58.7 0 81 69.9 69.4 46.4 46 97.4 97l.1-.1c75.1 73.3 195.4 72.9 269.8-1.6 51-50.9 27.9-27.9 95.3-95.3 22.3-22.3 22.3-58.7 0-81zM363.5 148.2a152.3 152.3 0 1 1 -215 215.6 152.3 152.3 0 1 1 215-215.6z\"]\n};\nvar faBots = {\n  prefix: 'fab',\n  iconName: 'bots',\n  icon: [640, 512, [], \"e340\", \"M86.3 197.8c-8-.1-15.9 1.7-23.1 5.1s-13.5 8.6-18.4 14.9l0-61.9c0-2.2-.9-4.3-2.4-5.8s-3.6-2.4-5.8-2.4l-28.4 0c-2.2 0-4.3 .9-5.8 2.4S0 153.8 0 156L0 333.6c0 1.1 .2 2.1 .6 3.1s1 1.9 1.8 2.7 1.7 1.4 2.7 1.8 2.1 .6 3.1 .6l28.4 0c1.1 0 2.1-.2 3.1-.6s1.9-1 2.7-1.8 1.4-1.7 1.8-2.7 .6-2.1 .6-3.1l0-8.1c11.6 13.4 25.9 19.8 41.6 19.8 34.6 0 61.9-26.2 61.9-73.8 0-45.9-27-73.6-61.9-73.6zM71.5 305.7c-9.6 0-21.2-4.9-26.7-12.5l0-43c5.5-7.6 17.2-12.8 26.7-12.8 17.7 0 31.1 13.1 31.1 34 0 21.2-13.4 34.3-31.1 34.3zm156.4-59a17.4 17.4 0 1 0 0 34.8 17.4 17.4 0 1 0 0-34.8zm46.1-90l0-44.7c2.8-1.2 5.2-3.3 6.6-6s1.9-5.8 1.3-8.9-2.2-5.7-4.6-7.7-5.4-3-8.4-3-6.1 1.1-8.4 3-4 4.7-4.6 7.7-.1 6.1 1.3 8.9 3.8 4.8 6.6 6l0 44.7c-28 1.3-54.4 13.6-73.6 34.1s-29.5 47.7-28.8 75.8 12.3 54.7 32.4 74.3 47 30.6 75.1 30.6 55-11 75.1-30.6 31.7-46.3 32.4-74.3-9.7-55.3-28.8-75.8-45.5-32.8-73.6-34.1zm86 107.4c0 30.5-40.8 55.3-91.1 55.3s-91.1-24.7-91.1-55.3 40.8-55.3 91.1-55.3 91.1 24.7 91.1 55.3l0 0zm-50.2 17.4c3.4 0 6.8-1 9.7-2.9s5.1-4.6 6.4-7.8 1.7-6.7 1-10.1-2.3-6.5-4.8-8.9-5.5-4.1-8.9-4.8-6.9-.3-10.1 1-5.9 3.5-7.8 6.4-2.9 6.2-2.9 9.7c0 4.6 1.8 9 5.1 12.3s7.7 5.1 12.3 5.1l0 0zm270.9-31c-14.8-2.6-22.4-3.8-22.4-9.9 0-5.5 7.3-9.9 17.7-9.9 12.2 .1 24.2 3.6 34.5 10.1 1.8 1.2 4 1.6 6.2 1.1s4-1.7 5.1-3.6c.1-.1 .1-.2 .2-.3l8.6-14.9c1.1-1.9 1.4-4.1 .8-6.1s-1.9-3.9-3.7-5c-15.7-9.4-33.7-14.3-52-14.1-39 0-60.2 21.5-60.2 46.2 0 36.3 33.7 41.9 57.6 45.6 13.4 2.3 24.1 4.4 24.1 11 0 6.4-5.5 10.8-18.9 10.8-13.6 0-31-6.2-42.6-13.6-.9-.6-1.9-1-3-1.2s-2.1-.2-3.2 .1-2.1 .7-2.9 1.3-1.6 1.4-2.2 2.3c0 .1-.1 .1-.1 .2l-10.2 16.9c-1.1 1.8-1.4 4-1 6s1.7 3.9 3.5 5c15.2 10.3 37.7 16.7 59.4 16.7 40.4 0 64-19.8 64-46.5 0-38.1-35.5-43.9-59.3-48.3zm-95.9 60.8c-.5-2-1.8-3.7-3.6-4.8s-3.9-1.5-5.9-1.1c-1.4 .3-2.8 .4-4.2 .4-7.8 0-12.5-6.1-12.5-14.2l0-51.2 20.3 0c2.2 0 4.2-.9 5.8-2.4s2.4-3.6 2.4-5.8l0-22.7c0-2.2-.9-4.2-2.4-5.8s-3.6-2.4-5.8-2.4l-20.3 0 0-30.2c0-2.2-.9-4.2-2.4-5.8s-3.6-2.4-5.8-2.4l-28.2 0c-2.2 0-4.2 .9-5.8 2.4s-2.4 3.6-2.4 5.8l0 30.2-15.1 0c-1.1 0-2.1 .2-3.1 .6s-1.9 1-2.6 1.8-1.4 1.7-1.8 2.6-.6 2-.6 3.1l0 22.7c0 1.1 .2 2.1 .6 3.1s1 1.9 1.8 2.6 1.7 1.4 2.6 1.8 2 .6 3.1 .6l15.1 0 0 63.7c0 27 15.4 41.3 43.9 41.3 12.2 0 21.4-2.2 27.6-5.4 1.6-.8 2.9-2.2 3.7-3.9s.9-3.6 .5-5.4l-5-19.3z\"]\n};\nvar faSquareBuildAwesomeStroke = {\n  prefix: 'fab',\n  iconName: 'square-build-awesome-stroke',\n  icon: [448, 512, [], \"e8b7\", \"M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM64 64C46.3 64 32 78.3 32 96l0 320c0 17.7 14.3 32 32 32l320 0c17.7 0 32-14.3 32-32l0-320c0-17.7-14.3-32-32-32L64 64zm160 64c57.4 0 104 46.6 104 104 0 47.1-36.7 97.6-77.2 114.3l12.1 27.2c.8 1.7 1.1 3.5 1.1 5.4 0 7.3-5.9 13.2-13.2 13.2l-53.6 0c-7.3 0-13.2-5.9-13.2-13.2 0-1.8 .4-3.7 1.1-5.4l12.1-27.2c-40.5-16.7-77.2-67.2-77.2-114.3 0-57.4 46.6-104 104-104zm-14.5 33.5c-31.3 6.4-55.2 33.1-57.4 65.8-.4 6.6 4.6 12.3 11.2 12.8s12.3-4.6 12.8-11.2c1.4-21.7 17.4-39.6 38.2-43.8 6.5-1.3 10.7-7.7 9.3-14.2s-7.7-10.7-14.2-9.3z\"]\n};\nvar faVine = {\n  prefix: 'fab',\n  iconName: 'vine',\n  icon: [384, 512, [], \"f1ca\", \"M384 254.7l0 52.1c-18.4 4.2-36.9 6.1-52.1 6.1-36.9 77.4-103 143.8-125.1 156.2-14 7.9-27.1 8.4-42.7-.8-27.1-16.3-129.9-100.6-164.1-365.6l74.5 0c18.7 159.1 64.5 240.7 114.8 301.8 27.9-27.9 54.8-65.1 75.6-106.9-49.8-25.3-80.1-80.9-80.1-145.6 0-65.6 37.7-115.1 102.2-115.1 114.9 0 106.2 127.9 81.6 181.5 0 0-46.4 9.2-63.5-20.5 3.4-11.3 8.2-30.8 8.2-48.5 0-31.3-11.3-46.6-28.4-46.6-18.2 0-30.8 17.1-30.8 50 .1 79.2 59.4 118.7 129.9 101.9z\"]\n};\nvar faRor = {\n  prefix: 'fab',\n  iconName: 'ror',\n  icon: [640, 512, [], \"e8bd\", \"M261.4 484.1l-99.5 0 49.7-76.2 49.7 76.2zm208.1 0l-99.5 0 49.8-76.2 49.7 76.2zM312.6 121.4c19.5 0 37.5 3.1 53.9 9.2 16.5 6.1 30.7 14.9 42.7 26.3s21.4 25.2 28 41.4c.9 2.2 1.7 4.4 2.5 6.7l0-77.2 96.6 0c12.7 0 24.7 1.2 36.1 3.7s21.4 6.6 30 12.3c8.6 5.8 15.4 13.5 20.4 23.3s7.6 21.9 7.6 36.5c0 17.6-4.5 32.6-13.7 44.9-9.1 12.3-22.6 20.2-40.2 23.4l63.5 105.4-65.9 0-52.2-99.8-27.1 0 0 99.8-55 0 0-77.2c-.8 2.2-1.6 4.5-2.5 6.7-6.7 16.2-16.1 30-28 41.4-12 11.4-26.2 20.2-42.7 26.3-16.5 6.1-34.4 9.2-53.9 9.2s-37.5-3.1-53.9-9.2c-16.5-6.1-30.7-14.9-42.7-26.3-12-11.4-21.4-25.2-28.1-41.4s-10-34.3-10-54.3c0-2 0-3.9 .1-5.8-.4 .6-.8 1.2-1.2 1.8-9.1 12.3-22.5 20.2-40.2 23.4l63.4 105.4-65.9 0-52.2-99.8-27.1 0 0 99.8-55 0 0-249.5 96.5 0c12.7 0 24.7 1.2 36.1 3.7s21.4 6.6 30 12.3c8.6 5.8 15.4 13.5 20.4 23.3 3.8 7.4 6.2 16.2 7.2 26.3 6.5-14.1 15.1-26.3 25.8-36.5 12-11.4 26.2-20.2 42.7-26.3 16.5-6.1 34.4-9.2 53.9-9.2zm.1 50.8c-11.8 0-22.4 2-31.9 6-9.5 4-17.7 9.6-24.5 16.8-6.8 7.2-12 15.7-15.7 25.5s-5.5 20.6-5.5 32.1c0 11.8 1.8 22.5 5.5 32.3s8.9 18.2 15.7 25.4c6.8 7.2 15 12.8 24.5 16.8s20.1 6 31.9 6c11.7 0 22.4-2 31.9-6 9.5-4 17.7-9.6 24.5-16.8 6.8-7.2 12.1-15.6 15.7-25.4s5.4-20.5 5.4-32.3c0-11.5-1.8-22.2-5.4-32.1-3.6-9.8-8.9-18.4-15.7-25.5-6.8-7.2-15-12.8-24.5-16.8s-20.1-6-31.9-6zM55 174.3l0 56.7 32.4 0c5 0 10.2-.2 15.7-.5 5.5-.3 10.5-1.4 15-3.2s8.1-4.5 11.1-8.3 4.4-9.1 4.4-15.8c0-6.3-1.3-11.4-3.9-15.2s-5.9-6.6-9.9-8.7-8.6-3.4-13.7-4.1-10.3-1.1-15.2-1.1l-35.9 0zm439.7 0l0 56.7 32.4 0c5 0 10.2-.2 15.7-.5 5.5-.3 10.5-1.4 14.9-3.2s8.2-4.5 11.1-8.3 4.4-9.1 4.4-15.8c0-6.3-1.3-11.4-3.9-15.2s-5.9-6.6-9.9-8.7-8.6-3.4-13.8-4.1-10.2-1.1-15.2-1.1l-35.9 0zM211.7 104l-49.7-76.2 99.5 0-49.7 76.2zm208.1 0l-49.8-76.2 99.5 0-49.7 76.2z\"]\n};\nvar faMedrt = {\n  prefix: 'fab',\n  iconName: 'medrt',\n  icon: [576, 512, [], \"f3c8\", \"M129.7 256c0 121.8 83.9 222.8 193.5 241.1-18.7 4.5-38.2 6.9-58.2 6.9-137.6 0-249-111-249-248S127.4 8 264.9 8c20.1 0 39.6 2.4 58.2 6.9-109.6 18.3-193.4 119.3-193.4 241.1zM427.1 356.3c-77.7 55.4-179.6 47.5-240.4-14.6 5.5 14.1 12.7 27.7 21.7 40.5 61.6 88.2 182.4 109.3 269.7 47s108.1-184.3 46.5-272.6c-9-12.9-19.3-24.3-30.5-34.2 37.4 78.8 10.7 178.5-67 233.9zm-218.8-244c-1.4 1-2.7 2.1-4 3.1 64.3-17.8 135.9 4 178.9 60.5 35.7 47 42.9 106.6 24.4 158 56.7-56.2 67.6-142.1 22.3-201.8-50-65.5-149.1-74.4-221.6-19.8zM312 224c-4.4 0-8-3.6-8-8l0-40c0-4.4-3.6-8-8-8l-48 0c-4.4 0-8 3.6-8 8l0 40c0 4.4-3.6 8-8 8l-40 0c-4.4 0-8 3.6-8 8l0 48c0 4.4 3.6 8 8 8l40 0c4.4 0 8 3.6 8 8l0 40c0 4.4 3.6 8 8 8l48 0c4.4 0 8-3.6 8-8l0-40c0-4.4 3.6-8 8-8l40 0c4.4 0 8-3.6 8-8l0-48c0-4.4-3.6-8-8-8l-40 0z\"]\n};\nvar faOsi = {\n  prefix: 'fab',\n  iconName: 'osi',\n  icon: [512, 512, [], \"f41a\", \"M8 266.4c2.3-135.8 97.4-232.4 213.8-248.1 138.8-18.6 255.6 75.8 278 201.1 21.3 118.8-44 230-151.6 274-9.3 3.8-14.4 1.7-18-7.7-17.8-46.3-35.6-92.6-53.4-139-3.1-8.1-1-13.2 7-16.8 24.2-11 39.3-29.4 43.3-55.8 1.5-9.7 1-19.6-1.5-29.1s-6.9-18.4-12.9-26.1-13.6-14.1-22.2-18.8-18.1-7.5-27.9-8.3c-39-3.4-71.8 23.7-77.5 59.7-5.2 33 11.1 63.7 41.9 77.7 9.6 4.4 11.5 8.6 7.8 18.4-17.9 46.6-35.8 93.2-53.7 139.9-2.6 6.9-8.3 9.3-15.5 6.5-52.6-20.3-101.4-61-130.8-119-24.9-49.2-25.2-87.7-26.8-108.7zm20.9-1.9c.4 6.6 .6 14.3 1.3 22.1 6.3 71.9 49.6 143.5 131 183.1 3.2 1.5 4.4 .8 5.6-2.3 14.9-39.1 29.9-78.2 45-117.3 1.3-3.3 .6-4.8-2.4-6.7-31.6-19.9-47.3-48.5-45.6-86 1-21.6 9.3-40.5 23.8-56.3 30-32.7 77-39.8 115.5-17.6 15.6 9 28.2 22.3 36.2 38.4s11.2 34.2 9 52c-3.6 30.6-19.3 53.9-45.7 69.8-2.7 1.6-3.5 2.9-2.3 6 15.2 39.2 30.3 78.4 45.2 117.7 1.2 3.1 2.4 3.8 5.6 2.3 35.5-16.6 65.2-40.3 88.1-72 34.8-48.2 49.1-101.9 42.3-161-13.7-117.5-119.4-214.8-255.5-198-106.1 13-195.3 102.5-197.1 225.8z\"]\n};\nvar faGg = {\n  prefix: 'fab',\n  iconName: 'gg',\n  icon: [512, 512, [], \"f260\", \"M179.2 230.4l102.4 102.4-102.4 102.4-179.2-179.2 179.2-179.2 44.8 44.8-25.6 25.6-19.2-19.2-128 128 128 128 51.5-51.5-77.1-76.5 25.6-25.6zM332.8 76.8l-102.4 102.4 102.4 102.4 25.6-25.6-77.1-76.5 51.5-51.5 128 128-128 128-19.2-19.2-25.6 25.6 44.8 44.8 179.2-179.2-179.2-179.2z\"]\n};\nvar faBuysellads = {\n  prefix: 'fab',\n  iconName: 'buysellads',\n  icon: [448, 512, [], \"f20d\", \"M224 150.7l42.9 160.7-85.8 0 42.9-160.7zM448 80l0 352c0 26.5-21.5 48-48 48L48 480c-26.5 0-48-21.5-48-48L0 80C0 53.5 21.5 32 48 32l352 0c26.5 0 48 21.5 48 48zM382.7 405.3l-94.5-298.7-128.4 0-94.5 298.7 90.7 0 111.7-91.6 24.2 91.6 90.8 0z\"]\n};\nvar faGooglePlus = {\n  prefix: 'fab',\n  iconName: 'google-plus',\n  icon: [512, 512, [], \"f2b3\", \"M256 8a248 248 0 1 0 0 496 248 248 0 1 0 0-496zM185.3 380c-32.9 0-64.4-13.1-87.7-36.3s-36.3-54.8-36.3-87.7 13.1-64.4 36.3-87.7 54.8-36.3 87.7-36.3c31.3 0 60.1 11 83 32.3l-33.6 32.6c-13.2-12.9-31.3-19.1-49.4-19.1-42.9 0-77.2 35.5-77.2 78.1S142.3 334 185.3 334c32.6 0 64.9-19.1 70.1-53.3l-70.1 0 0-42.6 116.9 0c1.3 6.8 1.9 13.8 1.9 20.7 0 70.8-47.5 121.2-118.8 121.2zM415.5 273.8l0 35.5-35.5 0 0-35.5-35.5 0 0-35.5 35.5 0 0-35.5 35.5 0 0 35.5 35.2 0 0 35.5-35.2 0z\"]\n};\nvar faScreenpal = {\n  prefix: 'fab',\n  iconName: 'screenpal',\n  icon: [512, 512, [], \"e570\", \"M278.6 22.5a22.5 22.5 0 1 1 -45 0 22.5 22.5 0 1 1 45 0zM198.7 259a57.4 57.4 0 1 1 114.8 0 57.4 57.4 0 1 1 -114.8 0zm138.6 91c22.3-19.9 36.5-47.3 39.9-77l119.5 0c-3.5 61.4-30.4 119.2-75.2 161.4-44.7 42.2-103.9 65.8-165.4 65.8S135.4 476.6 90.7 434.4C45.9 392.2 19.1 334.4 15.5 273l119.7 0c3.4 29.7 17.6 57.1 39.9 77s51.2 30.9 81.1 30.9c29 0 58.7-11 81.1-30.9zM28.3 141.7a22.5 22.5 0 1 1 45-1.4 22.5 22.5 0 1 1 -45 1.4zm455.6-.7a22.4 22.4 0 1 1 -44.9 0 22.4 22.4 0 1 1 44.9 0zM318 95.3c-17.3 13.8-39.2 22.8-61.9 22.8s-44.6-9-61.9-22.8c-17.3-14.7-28.8-35.1-32.4-57.5 15.1-6.4 30.8-11.3 46.9-14.5 0 12.6 5 24.6 13.9 33.5s20.9 13.9 33.5 13.9 24.6-5 33.5-13.9 13.9-20.9 13.9-33.5c16.1 3.2 31.8 8.1 46.9 14.5-3.6 22.4-15.1 42.8-32.4 57.5zM82.9 231c-21.4 7.6-44.7 7.4-65.9-.6 2-16.3 5.6-32.3 10.8-47.9 5.4 3.1 11.3 5.1 17.5 6 6.2 .8 12.4 .4 18.5-1.2 6-1.7 11.6-4.4 16.6-8.2s9.1-8.5 12.2-13.9 5.1-11.4 6-17.5c.8-6.2 .4-12.5-1.2-18.5s-4.4-11.6-8.2-16.6c-3.8-4.9-8.5-9.1-13.9-12.2 10.8-12.3 22.9-23.5 36-33.3 17.6 14.3 29.5 34.5 33.6 56.8s.1 45.4-11.2 65c-11.4 19.6-29.4 34.5-50.7 42.1zm346.4 .1c-21.3-7.6-39.3-22.6-50.7-42.2-11.3-19.6-15.2-42.7-11.1-65 4.1-22.2 16-42.4 33.5-56.7 13.1 9.8 25.2 21 36 33.3-10.7 6.4-18.4 16.7-21.5 28.8-3.2 12-2.3 24.8 4.8 35.6 6.2 10.8 16.4 18.7 28.4 22s24.9 1.7 35.7-4.3c5.3 15.5 8.9 31.6 10.9 47.8-22.1 8.1-44.6 8.3-66 .7z\"]\n};\nvar faBitcoin = {\n  prefix: 'fab',\n  iconName: 'bitcoin',\n  icon: [512, 512, [], \"f379\", \"M8 256a248 248 0 1 1 496 0 248 248 0 1 1 -496 0zm354.3-35.3c4.9-33-20.2-50.7-54.6-62.6l11.1-44.7-27.2-6.8-10.9 43.5c-7.2-1.8-14.5-3.5-21.8-5.1l10.9-43.8-27.2-6.8-11.2 44.7c-5.9-1.3-11.7-2.7-17.4-4.1l0-.1-37.5-9.4-7.2 29.1s20.2 4.6 19.8 4.9c11 2.8 13 10 12.7 15.8l-12.7 50.9c.8 .2 1.7 .5 2.8 .9-.9-.2-1.9-.5-2.9-.7l-17.8 71.3c-1.3 3.3-4.8 8.4-12.5 6.5 .3 .4-19.8-4.9-19.8-4.9l-13.5 31.1 35.4 8.8c6.6 1.7 13 3.4 19.4 5l-11.3 45.2 27.2 6.8 11.2-44.7c7.2 2 14.4 3.8 21.7 5.6l-11.1 44.5 27.2 6.8 11.3-45.1c46.4 8.8 81.3 5.2 96-36.7 11.8-33.8-.6-53.3-25-66 17.8-4.1 31.2-15.8 34.7-39.9zm-62.2 87.2c-8.4 33.8-65.3 15.5-83.8 10.9l14.9-59.9c18.4 4.6 77.6 13.7 68.8 49zm8.4-87.7c-7.7 30.7-55 15.1-70.4 11.3l13.5-54.3c15.4 3.8 64.8 11 56.8 43z\"]\n};\nvar faSwift = {\n  prefix: 'fab',\n  iconName: 'swift',\n  icon: [448, 512, [], \"f8e1\", \"M448 156.1c0-4.5-.1-9-.2-13.5-.1-9.9-1-19.7-2.6-29.4-1.7-9.7-4.8-19.2-9.2-28-9-17.7-23.4-32.1-41.2-41.1-8.8-4.5-18.3-7.6-28-9.2-9.7-1.6-19.6-2.5-29.4-2.6-4.5-.1-9-.2-13.5-.2L124.1 32c-4.5 0-9 .1-13.5 .2-2.4 .1-4.9 .2-7.4 .3-7.4 .3-14.8 1.1-22.1 2.3-7.3 1.3-14.4 3.3-21.2 6.1-2.3 1-4.6 2-6.8 3.1-6.6 3.4-12.8 7.5-18.4 12.3-1.9 1.6-3.7 3.3-5.4 5-7 7-12.9 15-17.4 23.8-4.4 8.8-7.6 18.3-9.2 28-1.6 9.7-2.4 19.6-2.5 29.4-.1 4.5-.2 9-.2 13.5L0 355.9c0 4.5 .1 9 .2 13.5 .1 9.9 1 19.7 2.6 29.4 1.7 9.7 4.8 19.2 9.2 28 9 17.7 23.4 32.1 41.1 41.1 8.8 4.4 18.3 7.5 28 9.2 9.7 1.6 19.6 2.5 29.4 2.6 4.5 .1 9 .2 13.5 .2l199.8 0c4.5 0 9-.1 13.5-.2 9.9-.1 19.7-1 29.4-2.6 9.7-1.7 19.2-4.8 28-9.2 17.7-9 32.1-23.4 41.1-41.2 4.4-8.8 7.6-18.3 9.2-28 1.6-9.7 2.5-19.6 2.6-29.4 .1-4.5 .2-9 .2-13.5l0-183.8c0-5.4 0-10.7 0-16zm-69.9 241c-20-38.9-57.2-29.3-76.3-19.5-1.7 1-3.5 2-5.2 3l-.4 .2c-39.5 21-92.5 22.5-145.8-.4-43.4-18.8-80.1-50.3-105.3-90.4 12.3 9.1 25.4 16.9 39.2 23.4 56.4 26.4 113 24.5 153 0-57-43.8-104.6-101-141.1-147.2-7-8.1-13.2-16.8-18.8-25.9 43.7 40 112.7 90.2 137.5 104.1-52.6-55.5-98.9-123.9-96.7-121.7 82.8 83.4 159.2 130.6 159.2 130.6 2.9 1.6 5 2.8 6.7 4 1.6-4.1 3-8.2 4.2-12.5 13.2-48.3-1.7-103.6-35.3-149.2 76.8 46.1 122.2 133.7 103.6 207.8-.4 1.7-1 3.4-1.4 5.1 38.5 47.4 28 98.2 23.1 88.6l0 0z\"]\n};\nvar faFilesPinwheel = {\n  prefix: 'fab',\n  iconName: 'files-pinwheel',\n  icon: [512, 512, [], \"e69f\", \"M253.5 246.4L137.2 130.2c-.6-.6-1-1.3-1.4-2s-.5-1.6-.5-2.4 .2-1.6 .5-2.4 .8-1.4 1.4-2L253.6 5.1c.9-.9 2-1.5 3.2-1.7s2.5-.1 3.6 .3 2.1 1.3 2.8 2.3 1.1 2.2 1.1 3.5l0 232.5c0 1.3-.3 2.5-1 3.6s-1.7 1.9-2.9 2.4-2.5 .6-3.7 .3-2.4-.9-3.2-1.9zm40.3-4.4l0-134.4c0-.8 .1-1.6 .5-2.4s.8-1.5 1.3-2.1 1.3-1.1 2-1.4 1.6-.5 2.4-.5l134.4 0c1.2 0 2.5 .4 3.5 1.1s1.8 1.7 2.3 2.8 .6 2.4 .3 3.6-.9 2.3-1.7 3.2L304.3 246.4c-.9 .8-2 1.4-3.2 1.6s-2.4 .1-3.5-.4-2.1-1.3-2.8-2.3-1.1-2.2-1.1-3.4l.1 .1zm30.6 35c-1.2 0-2.5-.3-3.5-1s-1.9-1.6-2.4-2.8-.6-2.4-.4-3.6 .8-2.3 1.7-3.2L404 182.2c.6-.6 1.3-1 2-1.4s1.6-.5 2.4-.5 1.6 .2 2.4 .5 1.4 .8 2 1.4l84.4 84.2c.9 .9 1.5 2 1.7 3.2s.1 2.5-.3 3.6-1.3 2.1-2.3 2.8-2.2 1.1-3.5 1.1l-168.5 0 .1-.1zm90.7 131l-95.3-95.2c-.9-.9-1.5-2-1.7-3.2s-.1-2.5 .4-3.7 1.3-2.1 2.4-2.8 2.3-1 3.5-1l95.2 0c1.7 0 3.2 .7 4.4 1.8s1.8 2.8 1.8 4.4l0 95.3c0 1.2-.4 2.5-1.1 3.5s-1.7 1.8-2.8 2.3-2.4 .6-3.6 .3-2.3-.9-3.2-1.7zM16.8 302.1l216.9 0c1.2 0 2.5 .4 3.5 1.1s1.8 1.7 2.3 2.8 .6 2.4 .3 3.6-.8 2.3-1.7 3.2L129.7 421.2c-.6 .6-1.3 1-2 1.4s-1.6 .5-2.4 .5-1.6-.2-2.4-.5-1.4-.8-2-1.4L12.3 312.8c-.9-.9-1.5-2-1.7-3.2s-.1-2.5 .4-3.6 1.3-2.1 2.3-2.8 2.3-1 3.5-1l0-.1zM264.3 465.3c0 .8-.2 1.6-.5 2.4s-.8 1.5-1.4 2-1.3 1-2 1.4-1.6 .5-2.4 .5l-128 0c-1.2 0-2.5-.4-3.5-1.1s-1.8-1.7-2.3-2.8-.6-2.4-.3-3.6 .8-2.3 1.7-3.2l128-128c.9-.9 2-1.5 3.2-1.7s2.5-.1 3.6 .3 2.1 1.3 2.8 2.3 1.1 2.2 1.1 3.5l0 128zm40-132.5l82.8 82.7c.6 .6 1 1.3 1.4 2s.5 1.6 .5 2.4-.2 1.6-.5 2.4-.8 1.4-1.4 2L304.3 507c-.9 .9-2 1.5-3.2 1.7s-2.5 .1-3.6-.3-2.1-1.3-2.8-2.3-1.1-2.2-1.1-3.5l0-165.4c0-1.2 .4-2.5 1.1-3.5s1.7-1.8 2.8-2.3 2.4-.6 3.6-.3 2.3 .8 3.2 1.7zM79 122.4c0-1.2 .3-2.5 1-3.5s1.7-1.8 2.8-2.3 2.4-.6 3.6-.4 2.3 .8 3.2 1.7L238.1 266.4c.9 .9 1.5 2 1.7 3.2s.1 2.5-.3 3.6-1.3 2.1-2.3 2.8-2.2 1.1-3.5 1.1l-148.4 0c-1.7 0-3.2-.7-4.4-1.8s-1.8-2.8-1.8-4.4l0-148.4-.1-.1z\"]\n};\nvar faLaravel = {\n  prefix: 'fab',\n  iconName: 'laravel',\n  icon: [512, 512, [], \"f3bd\", \"M504.6 115.8c-.1-.2-.2-.5-.3-.7-.1-.4-.3-.8-.5-1.2-.2-.2-.3-.5-.5-.7-.2-.3-.5-.6-.7-.9-.2-.2-.5-.4-.8-.6-.3-.2-.6-.5-.9-.7L404.6 55.5c-1.2-.7-2.6-1.1-4-1.1s-2.8 .4-4 1.1L300.3 111c-.3 .2-.6 .4-.9 .7-.3 .2-.5 .4-.8 .6-.3 .3-.5 .6-.7 .9-.2 .2-.4 .4-.5 .7-.2 .4-.4 .8-.5 1.2-.1 .2-.2 .4-.3 .7-.2 .7-.3 1.4-.3 2.1l0 105.2-80.2 46.2 0-205.9c0-.7-.1-1.4-.3-2.1-.1-.2-.2-.4-.3-.7-.1-.4-.3-.8-.5-1.2-.1-.3-.4-.5-.5-.7-.2-.3-.5-.6-.7-.9-.2-.2-.5-.4-.8-.6-.3-.2-.6-.5-.9-.7L115.8 1.1c-1.2-.7-2.6-1.1-4-1.1s-2.8 .4-4 1.1L11.5 56.5c-.3 .2-.6 .4-.9 .7-.3 .2-.5 .4-.8 .6-.3 .3-.5 .6-.7 .9-.2 .3-.4 .5-.6 .7-.2 .4-.4 .8-.5 1.2-.1 .2-.2 .4-.3 .7-.2 .7-.3 1.4-.3 2.1l0 329.7c0 1.4 .4 2.8 1.1 4s1.7 2.2 2.9 2.9L204 510.9c.4 .2 .9 .4 1.3 .5 .2 .1 .4 .2 .6 .3 1.3 .4 2.8 .4 4.1 0 .2-.1 .4-.2 .6-.2 .5-.2 1-.3 1.4-.6L404.6 400.1c1.2-.7 2.2-1.7 2.9-2.9s1.1-2.6 1.1-4l0-105.3 92.2-53.1c1.2-.7 2.2-1.7 2.9-3s1.1-2.6 1.1-4l0-109.8c0-.7-.1-1.4-.2-2.1zM111.8 17.3l80.2 46.1-80.2 46.2-80.2-46.2 80.2-46.2zm88.2 60l0 201.3c-33.2 19.1-59.9 34.5-80.2 46.2l0-201.3C153 104.4 179.7 89 200 77.3zm0 412.8L23.5 388.5 23.5 77.3c20.3 11.7 47.1 27.1 80.2 46.2l0 215.2c0 .3 .1 .6 .1 .9 0 .4 .1 .8 .2 1.2 .1 .3 .2 .6 .4 .9 .1 .3 .3 .7 .4 1 .2 .3 .4 .5 .6 .8 .2 .3 .4 .6 .7 .8 .2 .2 .5 .4 .8 .6 .3 .2 .6 .5 .9 .7l92.2 52.2 .1 92.4zm8-106.2L128 338.6c54.7-31.5 113.5-65.3 176.3-101.5l80.1 46.1C355 300 296.2 333.5 208 383.9zm184.5 4.6l-176.5 101.6 0-92.3C317.4 340 376.2 306.4 392.5 297l0 91.4zm0-119.1c-20.3-11.6-47.1-27-80.2-46.1l0-91.4c20.3 11.7 47.1 27.1 80.2 46.2l0 91.3zm8-105.3l-80.2-46.2 80.2-46.2 80.2 46.1-80.2 46.2zm8 105.3l0-91.3c33.2-19.1 60-34.5 80.3-46.2l0 91.4-80.3 46.2z\"]\n};\nvar faWpforms = {\n  prefix: 'fab',\n  iconName: 'wpforms',\n  icon: [448, 512, [], \"f298\", \"M448 75.2l0 361.7c0 24.3-19 43.2-43.2 43.2l-361.6 0C19.3 480 0 461.4 0 436.8L0 75.2C0 51.1 18.8 32 43.2 32l361.7 0c24 0 43.1 18.8 43.1 43.2zM410.7 436.8l0-361.6c0-3-2.6-5.8-5.8-5.8l-9.3 0-110.3 74.6-61.3-49.9-61.2 49.9-110.3-74.7-9.3 0c-3.2 0-5.8 2.8-5.8 5.8l0 361.7c0 3 2.6 5.8 5.8 5.8l361.7 0c3.2 .1 5.8-2.7 5.8-5.8zM150.2 186l0 37-73.5 0 0-37 73.5 0zm0 74.4l0 37.3-73.5 0 0-37.3 73.5 0zm11.1-147.3l54-43.7-118.5 0 64.5 43.7zm210 72.9l0 37-196 0 0-37 196 0zm0 74.4l0 37.3-196 0 0-37.3 196 0zM286.7 113.1l64.5-43.7-118.4 0 53.9 43.7zM371.3 335l0 37.3-99.4 0 0-37.3 99.4 0z\"]\n};\nvar faSpeakerDeck = {\n  prefix: 'fab',\n  iconName: 'speaker-deck',\n  icon: [512, 512, [], \"f83c\", \"M213.9 296L100 296c-26.5 0-52-10.5-70.7-29.3S0 222.5 0 196 10.5 144 29.3 125.3 73.5 96 100 96l132.8 0c10.6 0 20.8 4.2 28.3 11.7s11.7 17.7 11.7 28.3-4.2 20.8-11.7 28.3-17.7 11.7-28.3 11.7L98 176c-26.5 0-26.4 40 0 40l113.8 0c26.5 0 52 10.5 70.7 29.3s29.3 44.2 29.3 70.7-10.5 52-29.3 70.7-44.2 29.3-70.7 29.3L40 416c-10.6 0-20.8-4.2-28.3-11.7S0 386.6 0 376 4.2 355.2 11.7 347.7 29.4 336 40 336l173.9 0c26.5 0 26.5-40 0-40zM298 416c13.5-9.2 25-21 33.8-34.7s14.7-29.2 17.3-45.3l64.6 0c2.6 0 5.2-.6 7.6-1.6s4.6-2.5 6.4-4.4 3.3-4.1 4.2-6.5 1.5-5 1.4-7.6l0-120c0-2.6-.5-5.2-1.4-7.6s-2.4-4.6-4.2-6.5-4-3.3-6.4-4.4-5-1.6-7.6-1.6l-117.2 0c9.7-11.1 15-25.3 15-40s-5.3-28.9-15-40l136.9 0c43.4 0 78.6 35.8 78.6 80l0 160c0 44.2-35.2 80-78.6 80L298 416z\"]\n};\nvar faFlickr = {\n  prefix: 'fab',\n  iconName: 'flickr',\n  icon: [448, 512, [], \"f16e\", \"M400 32L48 32C21.5 32 0 53.5 0 80L0 432c0 26.5 21.5 48 48 48l352 0c26.5 0 48-21.5 48-48l0-352c0-26.5-21.5-48-48-48zM144.5 192a63.5 63.5 0 1 1 0 127 63.5 63.5 0 1 1 0-127zm159 0a63.5 63.5 0 1 1 0 127 63.5 63.5 0 1 1 0-127z\"]\n};\nvar faCcVisa = {\n  prefix: 'fab',\n  iconName: 'cc-visa',\n  icon: [576, 512, [], \"f1f0\", \"M470.1 231.3s7.6 37.2 9.3 45l-33.4 0c3.3-8.9 16-43.5 16-43.5-.2 .3 3.3-9.1 5.3-14.9l2.8 13.4zM576 80l0 352c0 26.5-21.5 48-48 48L48 480c-26.5 0-48-21.5-48-48L0 80C0 53.5 21.5 32 48 32l480 0c26.5 0 48 21.5 48 48zM152.5 331.2l63.2-155.2-42.5 0-39.3 106-4.3-21.5-14-71.4c-2.3-9.9-9.4-12.7-18.2-13.1l-64.7 0-.7 3.1c15.8 4 29.9 9.8 42.2 17.1l35.8 135 42.5 0zm94.4 .2l25.2-155.4-40.2 0-25.1 155.4 40.1 0zm139.9-50.8c.2-17.7-10.6-31.2-33.7-42.3-14.1-7.1-22.7-11.9-22.7-19.2 .2-6.6 7.3-13.4 23.1-13.4 13.1-.3 22.7 2.8 29.9 5.9l3.6 1.7 5.5-33.6c-7.9-3.1-20.5-6.6-36-6.6-39.7 0-67.6 21.2-67.8 51.4-.3 22.3 20 34.7 35.2 42.2 15.5 7.6 20.8 12.6 20.8 19.3-.2 10.4-12.6 15.2-24.1 15.2-16 0-24.6-2.5-37.7-8.3l-5.3-2.5-5.6 34.9c9.4 4.3 26.8 8.1 44.8 8.3 42.2 .1 69.7-20.8 70-53zM528 331.4l-32.4-155.4-31.1 0c-9.6 0-16.9 2.8-21 12.9l-59.7 142.5 42.2 0s6.9-19.2 8.4-23.3l51.6 0c1.2 5.5 4.8 23.3 4.8 23.3l37.2 0z\"]\n};\nvar faUpwork = {\n  prefix: 'fab',\n  iconName: 'upwork',\n  icon: [640, 512, [], \"e641\", \"M493.9 295.6c-50.3 0-83.5-38.9-92.8-53.9 11.9-95.3 46.8-125.4 92.8-125.4 45.5 0 80.9 36.4 80.9 89.7s-35.4 89.7-80.9 89.7l0-.1zm0-237.8c-81.9 0-127.8 53.4-141 108.4-14.9-28-25.9-65.5-34.5-100.3l-113.2 0 0 141c0 51.1-23.3 89-68.8 89s-71.6-37.8-71.6-89l.5-141-65.3 0 0 141c0 41.1 13.3 78.4 37.6 105.1 25 27.5 59.2 41.8 98.8 41.8 78.8 0 133.8-60.4 133.8-146.9l0-94.8c8.2 31.2 27.8 91.1 65.3 143.6l-35 199.4 66.4 0 23.1-141.3c7.6 6.3 15.7 12 24.2 17 22.2 14 47.7 21.9 73.9 22.8 0 0 4 .2 6.1 .2 81.2 0 145.9-62.9 145.9-147.8S575.3 57.9 494.1 57.9l-.2-.1z\"]\n};\nvar faKakaoTalk = {\n  prefix: 'fab',\n  iconName: 'kakao-talk',\n  icon: [576, 512, [], \"e7d7\", \"M288 2.5c159.1 0 288 101.7 288 227.1 0 125.4-128.9 227.1-288 227.1-17.5 0-34.6-1.2-51.2-3.6-16.6 11.7-112.6 79.1-121.7 80.4 0 0-3.7 1.4-6.9-.4s-2.6-6.7-2.6-6.7C106.6 519.8 130.6 437.2 135 421.9 53.9 381.8 0 310.6 0 229.5 0 104.1 128.9 2.5 288 2.5zM86.2 161.7c-9 0-16.3 7.3-16.3 16.3s7.3 16.3 16.3 16.3l25.9 0 0 98.7c0 8.8 7.5 15.9 16.6 15.9s16.6-7.1 16.6-15.9l0-98.7 25.9 0c9 0 16.3-7.3 16.3-16.3s-7.3-16.3-16.3-16.3l-85.1 0zm140.8 0c-10.8 .2-19.3 8.4-22.1 16.4L165.2 282.7c-5 15.7-.6 21.5 3.9 23.6 3.2 1.5 6.9 2.3 10.6 2.3 6.9 0 12.2-2.8 13.8-7.3l8.2-21.6 50.7 0 8.2 21.5c1.6 4.5 6.9 7.3 13.8 7.3 3.7 0 7.3-.8 10.6-2.3 4.6-2.1 9-7.9 3.9-23.6L249.2 178.1c-2.8-8-11.3-16.2-22.2-16.4zm180.9 0c-9.2 0-16.6 7.5-16.6 16.6l0 113.7c0 9.2 7.5 16.6 16.6 16.6s16.6-7.5 16.6-16.6l0-36.2 5.8-5.8 38.9 51.6c3.2 4.2 8 6.6 13.3 6.6 3.6 0 7.1-1.1 10-3.3 3.5-2.7 5.8-6.6 6.4-11s-.5-8.8-3.2-12.3l-40.9-54.2 37.9-37.8c2.6-2.6 3.9-6.2 3.7-10.1-.2-3.9-2-7.6-4.9-10.5-3.1-3.1-7.3-4.9-11.4-4.9-3.6 0-6.8 1.3-9.2 3.7l-46.3 46.4 0-35.7c0-9.2-7.5-16.6-16.6-16.6zm-91.3 0c-9.3 0-16.9 7.5-16.9 16.6l0 112.8c0 8.4 7.1 15.2 15.9 15.3l53.3 0c8.8 0 15.9-6.9 15.9-15.3s-7.2-15.2-15.9-15.2l-35.3 0 0-97.6c0-9.2-7.6-16.6-17-16.6zm-73 88.6l-33.2 0 16.6-47.1 16.6 47.1z\"]\n};\nvar faFlutter = {\n  prefix: 'fab',\n  iconName: 'flutter',\n  icon: [448, 512, [], \"e694\", \"M429.5 236.3L291.7 374.1 429.5 512 272 512c-36.1-36.1-82.1-82.1-137.9-137.9l137.9-137.8 157.5 0zM272 0L16 256 94.8 334.8 429.5 0 272 0z\"]\n};\nvar faBuffer = {\n  prefix: 'fab',\n  iconName: 'buffer',\n  icon: [448, 512, [], \"f837\", \"M428.2 380.7L231.7 478.5c-2.3 1-4.8 1.5-7.3 1.5s-5-.5-7.3-1.5L20.5 380.7c-4-2-4-5.3 0-7.3L67.6 350c2.3-1 4.8-1.5 7.3-1.5s5 .5 7.3 1.5l134.8 67c2.3 1 4.8 1.5 7.3 1.5s5-.5 7.3-1.5l134.8-67c2.3-1 4.8-1.5 7.3-1.5s5 .5 7.3 1.5l47.1 23.4c4 2 4 5.2 0 7.2zm0-136.5l-47.1-23.4c-2.3-1-4.8-1.5-7.3-1.5s-5 .5-7.3 1.5L231.7 287.8c-2.3 1-4.8 1.5-7.3 1.5s-5-.5-7.3-1.5L82.3 220.7c-2.3-1-4.8-1.5-7.3-1.5s-5 .5-7.3 1.5L20.5 244.1c-4 2-4 5.3 0 7.3l196.5 97.8c2.3 1 4.8 1.5 7.3 1.5s5-.5 7.3-1.5l196.5-97.8c4-2 4-5.3 0-7.3zM20.5 130.4L217 220.7c4.7 1.9 10 1.9 14.7 0l196.5-90.3c4-1.9 4-4.9 0-6.7L231.7 33.4c-4.7-1.9-10-1.9-14.7 0L20.5 123.7c-4 1.8-4 4.9 0 6.7z\"]\n};\nvar faGratipay = {\n  prefix: 'fab',\n  iconName: 'gratipay',\n  icon: [512, 512, [], \"f184\", \"M256 0a256 256 0 1 0 0 512 256 256 0 1 0 0-512zM374.3 233.7L257.7 391.3 141.3 233.7c-9-12.3-19.7-52 14-74.3 29-18.7 56.4-4.3 70.7 12.3 16.4 18.5 48.1 17.4 63.7 0 14.3-16.6 41.7-31 70.3-12.3 34 22.3 23.3 61.9 14.2 74.3z\"]\n};\nvar faGooglePay = {\n  prefix: 'fab',\n  iconName: 'google-pay',\n  icon: [640, 512, [], \"e079\", \"M105.7 215l0 41.2 57.1 0c-1.2 6.6-3.6 12.9-7.2 18.5s-8.4 10.4-13.9 14.1c-9.5 6.6-21.7 10.3-36 10.3-27.6 0-50.9-18.9-59.3-44.2-4.4-13.3-4.4-27.7 0-41 8.4-25.5 31.7-44.4 59.3-44.4 7.5-.1 14.9 1.2 21.9 4s13.3 6.9 18.6 12.1L176.5 155c-19.1-18.1-44.4-28.1-70.7-27.8-19.7 .1-38.9 5.7-55.6 16.1s-30.1 25.3-38.8 43C3.9 201.2 0 217.7 0 234.4s3.9 33.2 11.3 48.1l0 .2c8.7 17.7 22.1 32.5 38.8 43s35.9 16 55.6 16c28.5 0 52.5-9.5 70-25.9 20-18.6 31.4-46.2 31.4-78.9 0-7.3-.6-14.6-1.8-21.8l-99.7 0zm389.4-4c-10.1-9.4-23.9-14.1-41.4-14.1-22.5 0-39.3 8.3-50.5 24.9L424.1 235c7.6-11.3 18.1-17 31.3-17 8.4 0 16.5 3.2 22.7 8.8 3 2.6 5.5 5.9 7.1 9.6s2.5 7.6 2.5 11.7l0 5.5c-9.1-5.1-20.6-7.8-34.6-7.8-16.4 0-29.6 3.9-39.5 11.8s-14.8 18.3-14.8 31.6c-.2 5.9 1 11.8 3.4 17.2s6 10.2 10.5 14.1c9.2 8.3 21 12.5 34.8 12.5 16.3 0 29.2-7.3 39-21.9l1 0 0 17.7 22.6 0 0-78.7c.1-16.6-4.9-29.7-15-39zm-19.2 89.3c-3.5 3.5-7.6 6.3-12.2 8.2s-9.5 2.9-14.4 2.9c-6.7 .1-13.1-2.1-18.3-6.2-2.4-1.8-4.4-4.2-5.7-6.9s-2-5.7-2-8.7c0-7 3.2-12.8 9.5-17.4s14.5-7 24.1-7c13.2-.2 23.5 2.8 30.8 8.8 0 10.1-4 18.9-11.7 26.4zm-93.7-142c-5.3-5.3-11.6-9.5-18.6-12.3s-14.4-4.2-21.9-4l-62.7 0 0 186.7 23.6 0 0-75.6 39 0c16 0 29.5-5.4 40.5-15.9 .9-.9 1.8-1.8 2.6-2.7 9.6-10.5 14.8-24.4 14.3-38.6s-6.6-27.7-16.9-37.6l0 0zm-16.6 62.2c-3 3.2-6.6 5.7-10.6 7.4s-8.4 2.5-12.7 2.3l-39.6 0 0-65.2 39.6 0c8.5 0 16.6 3.3 22.6 9.2 6.1 6.1 9.6 14.3 9.8 23s-3.1 17-9 23.3l0 0zM614.3 201l-36.5 91.7-.5 0-37.4-91.7-25.7 0 51.8 119.6-29.4 64.3 24.3 0 79-183.9-25.7 0z\"]\n};\nvar faApple = {\n  prefix: 'fab',\n  iconName: 'apple',\n  icon: [384, 512, [], \"f179\", \"M319.1 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7-55.8 .9-115.1 44.5-115.1 133.2 0 26.2 4.8 53.3 14.4 81.2 12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zM262.5 104.5c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z\"]\n};\nvar faTumblr = {\n  prefix: 'fab',\n  iconName: 'tumblr',\n  icon: [320, 512, [], \"f173\", \"M309.9 480.3c-13.6 14.5-50 31.7-97.4 31.7-120.8 0-147-88.8-147-140.6l0-144-47.5 0c-5.5 0-10-4.5-10-10l0-68c0-7.2 4.5-13.6 11.3-16 62-21.8 81.5-76 84.3-117.1 .8-11 6.5-16.3 16.1-16.3l70.9 0c5.5 0 10 4.5 10 10l0 115.2 83 0c5.5 0 10 4.4 10 9.9l0 81.7c0 5.5-4.5 10-10 10l-83.4 0 0 133.2c0 34.2 23.7 53.6 68 35.8 4.8-1.9 9-3.2 12.7-2.2 3.5 .9 5.8 3.4 7.4 7.9l22 64.3c1.8 5 3.3 10.6-.4 14.5z\"]\n};\nvar faPhoenixSquadron = {\n  prefix: 'fab',\n  iconName: 'phoenix-squadron',\n  icon: [512, 512, [], \"f511\", \"M96 63.4c46.5-36.1 105.6-56.1 164.5-54.6 29.6-.4 59.1 5.4 86.9 15.3-24.1-4.6-49-6.3-73.4-2.5-42.9 5.3-83 27.2-111.8 59.2 5.7-1 10.8-3.7 16-5.9 18.1-7.9 37.5-13.3 57.2-14.8 19.7-2.1 39.6-.4 59.3 1.9-14.4 2.8-29.1 4.6-43 9.6-34.4 11.1-65.3 33.2-86.3 62.6-13.8 19.7-23.6 42.9-24.7 67.1-.4 16.5 5.2 34.8 19.8 44 11.2 6.8 24.6 9.2 37.5 6.7 15.4-2.5 30.1-8.6 43.6-16.3 11.5-6.8 22.7-14.6 32-24.3 3.8-3.2 2.5-8.4 2.6-12.8-2.1-.3-4.4-1.1-6.3 .3-11.4 6.3-23.4 11.4-35.8 15.4-20 6.2-42.2 8.5-62.1 .8 12.8 1.7 26.1 .3 37.7-5.4 20.2-9.7 36.8-25.2 54.4-38.8 27.7-21.3 57.5-39.9 88.9-55.3 25.7-12 52.9-22.8 81.6-24.1-15.6 13.7-32.1 26.5-46.8 41.4-14.5 14-27.5 29.5-40.1 45.2-3.5 4.6-9 6.9-13.6 10.2-22.4 15-40.3 35.8-51.9 60.1-9.3 19.7-14.5 41.9-11.8 63.6 1.9 13.7 8.7 27.6 20.9 34.9 12.9 8 29 8.1 43.5 5.1 32.8-7.4 61.4-28.9 81-55.8 20.4-27.5 30.5-62.2 29.2-96.3-.5-7.5-1.6-15-1.7-22.5 8 19.5 14.8 39.7 16.6 60.8 2 14.3 .7 28.8-1.6 42.9-1.9 11-5.7 21.5-7.8 32.4 20.4-22.9 34-50.9 39.3-81.1 5.6-35.5 .7-71.9-14.2-104.6 20.8 32 32.3 69.6 35.7 107.5 .5 12.7 .5 25.5 0 38.2-2.8 34.3-12.9 67.6-29.6 97.8-26.1 47.3-68 85.6-117.2 108-78.3 36.2-174.7 31.3-248-14.7-39-23.8-70.6-58-91.4-98.7-14.7-28.9-23.3-60.5-25.4-92.9l0-31.3C3.9 172 40.9 105.8 96 63.4zm222 80.3c5.5-.9 10.8-2.4 16-4.5 5-1.8 9.2-5.9 10.3-11.2-9 5-18 9.9-26.3 15.7z\"]\n};\nvar faCentercode = {\n  prefix: 'fab',\n  iconName: 'centercode',\n  icon: [512, 512, [], \"f380\", \"M201.8 254.8a64.1 64.1 0 1 1 127.4 13.8 64.1 64.1 0 1 1 -127.4-13.8zm41.6 248.9C96.7 496-8.2 365.5 10.1 224.3 21.3 137.7 75.9 67.4 149.2 32.3 310.2-44.8 498.9 69.7 503.9 248.9 508 395.9 385.5 511.1 243.4 503.7zm179.9-180c27.9-118-160.5-205.9-237.2-234.2-57.5 56.3-69.1 188.6-33.8 344.4 68.8 15.8 169.1-26.4 271-110.2z\"]\n};\nvar faDebian = {\n  prefix: 'fab',\n  iconName: 'debian',\n  icon: [448, 512, [], \"e60b\", \"M380.4 245.6c3-7.6 5.5-14 5.2-24.4l-4.3 9c4.4-13.2 4-27.1 3.6-40.4-.2-6-.3-11.8 0-17.4l-1.8-.5c-1.5-45.2-40.6-93.1-75.3-109.4-30-13.8-76.1-16.2-97.3-5.8 1.3-1.1 4.2-2 6.8-2.7l.3-.1c3.3-1 6-1.7 4-2.9-19.2 1.9-24.9 5.5-31.1 9.4l-.1 0c-4.6 2.9-9.5 6-20.3 8.7-3.5 3.4 1.7 2 5.8 .9s7.2-1.9-.1 2.4c-3.5 1-6.6 1.3-9.6 1.6l-.1 0c-8.3 .8-15.8 1.6-30.7 17 .8 1.3 3.4-.2 5.3-1.3l.1-.1c2.3-1.4 3.4-2-1.7 4.4-19.1-2.4-60.3 43.7-69.1 59l4.6 .8c-3.2 8-6.8 14.8-10 20.8-4.3 8.1-7.9 14.9-8.7 21.3-.3 5.1-1 11-1.7 17.3-.1 1-.2 2-.3 3l-.1 .6c-3 27.3-6.7 60.8 3.9 73l-1.3 13c.6 1.2 1.1 2.3 1.6 3.5 .2 .4 .4 .8 .5 1.1 1 2.1 2 4.2 3.3 6.2l-3 .2c7 22.1 10.8 22.5 15.1 22.9 4.4 .4 9.3 .9 18.7 24.2-2.7-.9-5.5-1.9-9.4-7.2-.5 4.1 5.8 16.3 13.1 25.8l-3.1 3.6c2.1 3.7 4.8 6.2 7.6 8.8 1 .9 2.1 1.9 3.1 2.9-11.9-6.5 3.2 13.7 11.9 25.2 .8 1.1 1.5 2 2.2 2.9 1.4 1.9 2.5 3.4 2.9 4.1l2.4-4.2c-.3 6.1 4.3 13.9 13.1 24.7l7.3-.3c3 6 14 16.7 20.7 17.2l-4.4 5.8c8.1 2.6 10.3 4.3 12.7 6.2 2.6 2.1 5.4 4.3 16.1 8.1l-4.2-7.4c3.5 3 6.2 5.9 8.8 8.7l.1 .1c5.2 5.6 9.9 10.6 19.7 15.3 10.7 3.7 16.6 4.7 22.7 5.8 .3 0 .6 .1 .9 .1 5.4 .8 11.2 1.8 20.8 4.5-1.1-.1-2.2-.1-3.3-.1-2.3-.1-4.7-.1-7-.1-14.4-.2-29.2-.4-42.7-5.2-96.6-25.7-184.9-139-178.4-255.6-.6-9.9-.3-20.9 0-30.7 .4-13.5 .7-24.8-1.6-28.3l1-3.1c5.3-17.4 11.7-38.2 23.8-62.8l-.1-.2 0-.1c.4 .4 3.4 3.4 8.8-5.8 .8-1.8 1.6-3.7 2.4-5.6 .5-1.1 .9-2.2 1.4-3.2 2.5-6.1 5.1-12.3 8.4-17.9l2.6-.6c1.7-10.1 17-23.8 29.8-35.2l1.1-1c5.7-5.1 10.7-9.7 13.6-13.1l.7 4.4c17-15.9 44.6-27.5 65.6-36.4l.5-.2c4.8-2 9.3-3.9 13.3-5.7-3.4 3.8 2.2 2.7 10 1 4.8-1 10.4-2.1 15.3-2.4l-3.9 2.1c-2.7 1.4-5.4 2.8-8 4.6 8.1-2 11.7-1.4 15.7-.8l.3 0c3.5 .6 7.3 1.2 14.6 .2-5.6 .8-12.3 3-11.2 3.8 7.9 .9 12.8-.1 17.2-1l.2 0c5.5-1.1 10.3-2 19.3 .9l-1-4.8c7.3 2.6 12.7 4.3 17.5 5.8l.5 .1c10 3 17.6 5.3 34.2 14.1 3.2 .2 5.3-.5 7.4-1.2l.1 0c3.6-1.1 7-2.1 15.2 1.2 .3 .5 .5 1 .7 1.4 .1 .2 .2 .5 .3 .7l0 .1c1 2.6 1.8 4.6 14.6 12.1 1.7-.7-2.7-4.7-6.4-8.2l-.1-.1c-.2-.1-.3-.3-.5-.4 32.2 17.3 67.3 54.1 78 93.5-6-11.1-5.2-5.5-4.3 .5 .6 4 1.2 8.1-.2 7.5 4.5 12.1 8.1 24.5 10.4 37.4l-.8-2.9-.1-.3c-3.3-11.9-9.6-34.3-19.9-49.3-.4 4.3-2.8 3.9-5.2 3.5l-.1 0c-3.3-.6-6.2-1.1-1.9 12.6 2.6 3.8 3.1 2.4 3.5 1.1 .5-1.5 .9-2.7 4.7 5.2 .1 4.1 1 8.2 2.1 12.7l.1 .6c.1 .3 .1 .5 .2 .8l.1 .6c.6 2.6 1.3 5.4 1.8 8.4-1.1-.2-2.3-2.2-3.4-4.2-1.4-2.4-2.8-4.7-3.7-3.2 2.4 11.5 6.5 17.4 8 18.3-.3 .6-.6 .7-1.1 .7-.8 0-1.8 .1-1.9 5.3 .7 13.7 3.3 12.5 5.3 11.6 .6-.3 1.2-.6 1.7-.4-.6 2.5-1.6 5.1-2.7 7.9-2.8 7.1-6 15.4-3.4 26.1-.8-3-2-6-3.1-8.9l-.1-.4c-.2-.5-.4-1-.6-1.5-.3-.8-.6-1.6-.9-2.3-.6 4.4-.3 7.7-.1 10.6l0 .7c.4 5.3 .7 10-3 19.9 4.3-14.2 3.8-26.9-.2-20.8 1 10.9-3.7 20.4-8 28.9l-.1 .2c-3.6 7.1-6.8 13.5-5.9 19.3l-5.2-7.1c-7.5 10.9-7 13.3-6.5 15.5l0 .1c.5 1.9 1 3.8-3.4 10.8 1.7-2.9 1.3-3.6 1-4.2-.4-.8-.7-1.5 1.7-5.1-1.6 .1-5.5 3.9-10.1 8.5-3.9 3.9-8.5 8.4-12.8 11.8-37.5 30.1-82.3 34-125.6 17.8 .2-1-.2-2.1-3.1-4.1-36.8-28.2-58.5-52.1-50.9-107.5 2.1-1.6 3.6-5.8 5.3-10.8l.2-.4 .1-.3 0-.1c2.9-8.4 6.5-18.8 14.3-23.8 7.8-17.3 31.3-33.3 56.4-33.7 25.6-1.4 47.2 13.7 58.1 27.9-19.8-18.4-52.1-24-79.7-10.4-28.2 12.7-45 43.8-42.5 74.7 .3-.4 .6-.6 .9-.8l.2-.2c.6-.5 1.1-.9 1.4-3.3-.9 60.2 64.8 104.3 112.1 82l.6 1.3c12.7-3.5 15.9-6.5 20.3-10.7l.1-.1c2.2-2.1 4.7-4.5 8.9-7.3-.3 .7-1.3 1.7-2.4 2.7-2.2 2.1-4.6 4.5-1.6 4.6 5-1.3 18.5-13.4 28.5-22.3 .6-.5 1.2-1 1.7-1.5 1.5-1.3 2.8-2.5 4-3.6l.3-.3c1.9-4.2 1.6-5.6 1.3-7l0-.1c-.4-1.6-.8-3.3 2.4-9.6l7.3-3.7c.8-2.1 1.5-4.1 2.2-6 .2-.6 .5-1.2 .7-1.8l-.4-.2-.1-.1zM248 334.1c-6-3-13.7-8.9-14.8-11.4l-.4 .3c-.3 .6-.5 1.3-.2 2.2-12.2-5.7-23.4-14.3-32.6-24.9 4.9 7.1 10.1 14.1 17 19.5-6.9-2.3-15.1-11.8-21.6-19.3l-.1-.1c-4.3-5-7.9-9.1-9.7-9.5 19.8 35.5 80.5 62.3 112.3 49-14.7 .5-33.4 .3-49.9-5.8zm79.3-119.7l-.1-.2c-.5-1.5-1.1-3.1-1.7-3.4 1.4-5.8 5.4-10.7 4.4 4.6-1 3.8-1.8 1.5-2.6-1zm-4.2 22.2c-1.3 7.9-5 15.5-10.1 22.5 .2-2-1.2-2.4-2.6-2.8-2.9-.8-5.9-1.6 5.6-16.1-.5 1.9-2.1 4.6-3.7 7.3l-.3 .4c-3.6 5.9-6.7 11 4 4.3l1-1.8c2.6-4.5 5-8.8 6-13.8l.1 0zm-55.6 33.9c7.1 .6 14.1 .6 21-1.1-2.5 2.4-5.2 4.8-8.3 7.2-11.1-1.7-21.2-6-12.7-6.1zm-92.6 11.6c3.6 7.1 6.4 11.5 9 15.7l.1 .2c2.3 3.7 4.4 7.1 6.8 11.7-5.1-4.2-8.7-9.5-12.5-15l-.3-.5c-1.4-2.1-2.8-4.2-4.4-6.2l1.2-5.9 .1 0zm7.5-9.6c1.6 3.3 3.2 6.4 5.7 9.1l2.6 7.7-1.3-2.1c-3.2-5.3-6.3-10.6-8-16.7l1 2zm238.9-41.6c-2.3 17.4-7.7 34.6-16 50.3 7.6-14.9 12.5-30.9 14.8-47.2l1.2-3.1zM35.8 110.6c.4 .8 1.4 .5 2.3 .3 1.9-.5 3.6-.9-.1 7.6-.5 .3-1 .7-1.5 1-1.4 .9-2.8 1.9-3.9 3 1.9-3.8 3.5-7.4 3.2-11.9zM25.5 152.3c-.7 3.7-1.5 7.9-3.4 13.9 .2-1.9 0-3.5-.2-4.9l0-.1c-.4-3.4-.7-6.3 4.3-12.8-.3 1.2-.5 2.5-.7 3.8l0 .1z\"]\n};\nvar faMastodon = {\n  prefix: 'fab',\n  iconName: 'mastodon',\n  icon: [448, 512, [], \"f4f6\", \"M433 179.1c0-97.2-63.7-125.7-63.7-125.7-62.5-28.7-228.6-28.4-290.5 0 0 0-63.7 28.5-63.7 125.7 0 115.7-6.6 259.4 105.6 289.1 40.5 10.7 75.3 13 103.3 11.4 50.8-2.8 79.3-18.1 79.3-18.1l-1.7-36.9s-36.3 11.4-77.1 10.1c-40.4-1.4-83-4.4-89.6-54-.6-4.6-.9-9.3-.9-13.9 85.6 20.9 158.7 9.1 178.7 6.7 56.1-6.7 105-41.3 111.2-72.9 9.8-49.8 9-121.5 9-121.5zM357.9 304.3l-46.6 0 0-114.2c0-49.7-64-51.6-64 6.9l0 62.5-46.3 0 0-62.5c0-58.5-64-56.6-64-6.9l0 114.2-46.7 0c0-122.1-5.2-147.9 18.4-175 25.9-28.9 79.8-30.8 103.8 6.1l11.6 19.5 11.6-19.5c24.1-37.1 78.1-34.8 103.8-6.1 23.7 27.3 18.4 53 18.4 175l0 0z\"]\n};\nvar faSketch = {\n  prefix: 'fab',\n  iconName: 'sketch',\n  icon: [512, 512, [], \"f7c6\", \"M27.8 162.2l-18.5 24.9 90.5 0 6.9-130.7-78.9 105.8zM396.6 45.7L268 32 403.7 179.2 396.6 45.7zM112.5 218.3l-11.2-22-91.1 0 224.9 261.7-122.6-239.7zm2-31.2l284 0C340.6 124.3 293.3 72.9 256.6 33L114.5 187.1zm297.3 9.1l-133.9 261.8 224.8-261.7-90.9 0 0-.1zM415.7 69l-9.4-12.6 .9 17.3 6.1 113.4 90.3 0-87.9-118.1zM113.8 93.5L109.2 179.1 245 32 116.4 45.7 113.8 93.5zM401.5 196.2l-290 0c18.2 35.6 66.6 130.2 145.1 283.8L401.5 196.2z\"]\n};\nvar faWebAwesome = {\n  prefix: 'fab',\n  iconName: 'web-awesome',\n  icon: [640, 512, [], \"e682\", \"M372.2 52c0 20.9-12.4 39-30.2 47.2L448 192 552.4 171.1c-5.3-7.7-8.4-17.1-8.4-27.1 0-26.5 21.5-48 48-48s48 21.5 48 48c0 26-20.6 47.1-46.4 48L481 442.3c-10.3 23-33.2 37.7-58.4 37.7l-205.2 0c-25.2 0-48-14.8-58.4-37.7L46.4 192C20.6 191.1 0 170 0 144 0 117.5 21.5 96 48 96s48 21.5 48 48c0 10.1-3.1 19.4-8.4 27.1L192 192 298.1 99.1c-17.7-8.3-30-26.3-30-47.1 0-28.7 23.3-52 52-52s52 23.3 52 52l.1 0z\"]\n};\nvar faSass = {\n  prefix: 'fab',\n  iconName: 'sass',\n  icon: [640, 512, [], \"f41e\", \"M301.8 378.9l0 0zm249.1-87c-20.1 0-40 4.6-58 13.5-5.9-11.9-12-22.3-13-30.1-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.3-6.7-24 2.5-25.3 5.9c-2.3 6.2-4.1 12.6-5.3 19.1-2.3 11.7-25.8 53.5-39.1 75.3-4.4-8.5-8.1-16-8.9-22-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.3-6.7-24 2.5-25.3 5.9-2.7 11.4-5.3 19.1-33.9 77.3-42.1 95.4c-4.2 9.2-7.8 16.6-10.4 21.6-.4 .8-.7 1.3-.9 1.7 .3-.5 .5-1 .5-.8-2.2 4.3-3.5 6.7-3.5 6.7l0 .1c-1.7 3.2-3.6 6.1-4.5 6.1-.6 0-1.9-8.4 .3-19.9 4.7-24.2 15.8-61.8 15.7-63.1-.1-.7 2.1-7.2-7.3-10.7-9.1-3.3-12.4 2.2-13.2 2.2s-1.4 2-1.4 2 10.1-42.4-19.4-42.4c-18.4 0-44 20.2-56.6 38.5-7.9 4.3-25 13.6-43 23.5-6.9 3.8-14 7.7-20.7 11.4-.5-.5-.9-1-1.4-1.5-35.8-38.2-101.9-65.2-99.1-116.5 1-18.7 7.5-67.8 127.1-127.4 98-48.8 176.3-35.4 189.8-5.6 19.4 42.5-41.9 121.6-143.7 133-38.8 4.3-59.2-10.7-64.3-16.3-5.3-5.9-6.1-6.2-8.1-5.1-3.3 1.8-1.2 7 0 10.1 3 7.9 15.5 21.9 36.8 28.9 18.7 6.1 64.2 9.5 119.2-11.8 61.8-23.8 109.9-90.1 95.8-145.6-14.4-56.4-107.9-74.9-196.3-43.5-52.7 18.7-109.7 48.1-150.7 86.4-48.7 45.6-56.5 85.3-53.3 101.9 11.4 58.9 92.6 97.3 125.1 125.7-1.6 .9-3.1 1.7-4.5 2.5-16.3 8.1-78.2 40.5-93.7 74.7-17.5 38.8 2.9 66.6 16.3 70.4 41.8 11.6 84.6-9.3 107.6-43.6s20.2-79.1 9.6-99.5c-.1-.3-.3-.5-.4-.8 4.2-2.5 8.5-5 12.8-7.5 8.3-4.9 16.4-9.4 23.5-13.3-4 10.8-6.9 23.8-8.4 42.6-1.8 22 7.3 50.5 19.1 61.7 5.2 4.9 11.5 5 15.4 5 13.8 0 20-11.4 26.9-25 8.5-16.6 16-35.9 16-35.9s-9.4 52.2 16.3 52.2c9.4 0 18.8-12.1 23-18.3l0 .1s.2-.4 .7-1.2c1-1.5 1.5-2.4 1.5-2.4l0-.3c3.8-6.5 12.1-21.4 24.6-46 16.2-31.8 31.7-71.5 31.7-71.5 1.5 8.7 3.6 17.3 6.2 25.8 2.8 9.5 8.7 19.9 13.4 30-3.8 5.2-6.1 8.2-6.1 8.2 0 .1 0 .1 .1 .2-3 4-6.4 8.3-9.9 12.5-12.8 15.2-28 32.6-30 37.6-2.4 5.9-1.8 10.3 2.8 13.7 3.4 2.6 9.4 3 15.7 2.5 11.5-.8 19.6-3.6 23.5-5.4 7.2-2.6 14-6.1 20.2-10.6 12.5-9.2 20.1-22.4 19.4-39.8-.4-9.6-3.5-19.2-7.3-28.2 1.1-1.6 2.3-3.3 3.4-5 19.8-28.9 35.1-60.6 35.1-60.6 1.5 8.7 3.6 17.3 6.2 25.8 2.4 8.1 7.1 17 11.4 25.7-18.6 15.1-30.1 32.6-34.1 44.1-7.4 21.3-1.6 30.9 9.3 33.1 4.9 1 11.9-1.3 17.1-3.5 7.7-2.6 15-6.3 21.6-11.1 12.5-9.2 24.6-22.1 23.8-39.6-.3-7.9-2.5-15.8-5.4-23.4 15.7-6.6 36.1-10.2 62.1-7.2 55.7 6.5 66.6 41.3 64.5 55.8s-13.8 22.6-17.7 25-5.1 3.3-4.8 5.1c.5 2.6 2.3 2.5 5.6 1.9 4.6-.8 29.2-11.8 30.3-38.7 1.6-34-31.1-71.4-89-71.1l0 0zM121.8 436.6c-18.4 20.1-44.2 27.7-55.3 21.3-11.9-6.9-7.2-36.5 15.5-57.9 13.8-13 31.6-25 43.4-32.4 2.7-1.6 6.6-4 11.4-6.9 .8-.5 1.2-.7 1.2-.7 .9-.6 1.9-1.1 2.9-1.7 8.3 30.4 .3 57.2-19.1 78.3l0 0zm134.4-91.4c-6.4 15.7-19.9 55.7-28.1 53.6-7-1.8-11.3-32.3-1.4-62.3 5-15.1 15.6-33.1 21.9-40.1 10.1-11.3 21.2-14.9 23.8-10.4 3.5 5.9-12.2 49.4-16.2 59.2zm111 53c-2.7 1.4-5.2 2.3-6.4 1.6-.9-.5 1.1-2.4 1.1-2.4s13.9-14.9 19.4-21.7c3.2-4 6.9-8.7 10.9-13.9 0 .5 .1 1 .1 1.6-.1 17.9-17.3 30-25.1 34.8l0 0zm85.6-19.5c-2-1.4-1.7-6.1 5-20.7 2.6-5.7 8.6-15.3 19-24.5 1.2 3.5 1.8 7.1 1.9 10.8-.1 22.5-16.2 30.9-25.9 34.4l0 0z\"]\n};\nvar faThreema = {\n  prefix: 'fab',\n  iconName: 'threema',\n  icon: [384, 512, [], \"e85f\", \"M87.4 445.1c18.5 0 33.5 15 33.5 33.4S105.9 512 87.4 512 54 497 54 478.5 69 445.1 87.4 445.1zm109.2 0c18.5 0 33.5 15 33.5 33.4s-15 33.5-33.5 33.5-33.4-15-33.4-33.5 15-33.4 33.4-33.4zm109.3 0c18.5 0 33.5 15 33.5 33.4s-15 33.5-33.5 33.5-33.5-15-33.5-33.5 15-33.4 33.5-33.4zM192.3 .3c109.8 0 199.2 89.3 199.2 199.1S302.2 398.5 192.4 398.5c-40.5 0-78.1-12.1-109.6-32.9l-76.5 24.5 24.8-74C7.3 283.4-6.8 243-6.8 199.4-6.8 89.7 82.5 .3 192.3 .3zm.1 93.7c-31.6 0-57.3 25.8-57.3 57.3l0 26.7-1.8 0c-10 0-18 8-18 18l0 72.3c0 10 8 18 18 18l118.1 0c10 0 18-8 18-18l.1 0 0-72.3c0-10-8.1-18-18-18l-1.8 0 0-26.7c0-31.6-25.8-57.3-57.3-57.3zm-.1 23.5c18.6 0 33.8 15.1 33.8 33.8l0 26.7-67.6 0 0-26.7c0-18.6 15.1-33.8 33.8-33.8z\"]\n};\nvar faSquareWhatsapp = {\n  prefix: 'fab',\n  iconName: 'square-whatsapp',\n  icon: [448, 512, [\"whatsapp-square\"], \"f40c\", \"M92.1 254.6c0 24.9 7 49.2 20.2 70.1l3.1 5-13.3 48.6 49.9-13.1 4.8 2.9c20.2 12 43.4 18.4 67.1 18.4l.1 0c72.6 0 133.3-59.1 133.3-131.8 0-35.2-15.2-68.3-40.1-93.2-25-25-58-38.7-93.2-38.7-72.7 0-131.8 59.1-131.9 131.8zM274.8 330c-12.6 1.9-22.4 .9-47.5-9.9-36.8-15.9-61.8-51.5-66.9-58.7-.4-.6-.7-.9-.8-1.1-2-2.6-16.2-21.5-16.2-41 0-18.4 9-27.9 13.2-32.3 .3-.3 .5-.5 .7-.8 3.6-4 7.9-5 10.6-5 2.6 0 5.3 0 7.6 .1l.8 0c2.3 0 5.2 0 8.1 6.8 1.2 2.9 3 7.3 4.9 11.8 3.3 8 6.7 16.3 7.3 17.6 1 2 1.7 4.3 .3 6.9-3.4 6.8-6.9 10.4-9.3 13-3.1 3.2-4.5 4.7-2.3 8.6 15.3 26.3 30.6 35.4 53.9 47.1 4 2 6.3 1.7 8.6-1 2.3-2.6 9.9-11.6 12.5-15.5 2.6-4 5.3-3.3 8.9-2s23.1 10.9 27.1 12.9c.8 .4 1.5 .7 2.1 1 2.8 1.4 4.7 2.3 5.5 3.6 .9 1.9 .9 9.9-2.4 19.1-3.3 9.3-19.1 17.7-26.7 18.8zM448 96c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320zM148.1 393.9L64 416 86.5 333.8c-13.9-24-21.2-51.3-21.2-79.3 .1-87.4 71.2-158.5 158.6-158.5 42.4 0 82.2 16.5 112.2 46.5 29.9 30 47.9 69.8 47.9 112.2 0 87.4-72.7 158.5-160.1 158.5-26.6 0-52.7-6.7-75.8-19.3z\"]\n};\nvar faWhatsappSquare = faSquareWhatsapp;\nvar faSkype = {\n  prefix: 'fab',\n  iconName: 'skype',\n  icon: [448, 512, [], \"f17e\", \"M424.7 299.8c2.9-14 4.7-28.9 4.7-43.8 0-113.5-91.9-205.3-205.3-205.3-14.9 0-29.7 1.7-43.8 4.7-19-14.7-42.6-23.4-68.3-23.4-61.8 0-112 50.2-112 112 0 25.7 8.7 49.3 23.3 68.2-2.9 14-4.7 28.9-4.7 43.8 0 113.5 91.9 205.3 205.3 205.3 14.9 0 29.7-1.7 43.8-4.7 19 14.6 42.6 23.3 68.2 23.3 61.8 0 112-50.2 112-112 .1-25.6-8.6-49.2-23.2-68.1zM230.1 391.3c-65.6 0-120.5-29.2-120.5-65 0-16 9-30.6 29.5-30.6 31.2 0 34.1 44.9 88.1 44.9 25.7 0 42.3-11.4 42.3-26.3 0-18.7-16-21.6-42-28-62.5-15.4-117.8-22-117.8-87.2 0-59.2 58.6-81.1 109.1-81.1 55.1 0 110.8 21.9 110.8 55.4 0 16.9-11.4 31.8-30.3 31.8-28.3 0-29.2-33.5-75-33.5-25.7 0-42 7-42 22.5 0 19.8 20.8 21.8 69.1 33 41.4 9.3 90.7 26.8 90.7 77.6 0 59.1-57.1 86.5-112 86.5z\"]\n};\nvar faAngular = {\n  prefix: 'fab',\n  iconName: 'angular',\n  icon: [448, 512, [], \"f420\", \"M185.7 268.1l76.2 0-38.1-91.6-38.1 91.6zM223.8 32L16 106.4 47.8 382.1 223.8 480 399.8 382.1 431.6 106.4 223.8 32zM354 373.8l-48.6 0-26.2-65.4-110.6 0-26.2 65.4-48.7 0 130.1-292.3 130.2 292.3z\"]\n};\nvar faCircleZulip = {\n  prefix: 'fab',\n  iconName: 'circle-zulip',\n  icon: [512, 512, [], \"e851\", \"M256 512a256 256 0 1 1 0-512 256 256 0 1 1 0 512zM243.5 240c1.2-1.9-.9-4.2-2.6-2.8l-89 79.5c-9.2 7.2-15.2 19.1-15.2 32.5 0 21.9 16 39.8 35.7 39.8l167.3 0c19.6 0 35.7-17.9 35.7-39.8 0-21.9-16.1-39.7-35.7-39.8l-126.6 0c-1.9 0-3-2.3-2.1-4.1L243.5 240zM172.4 123.1c-19.6 0-35.7 17.9-35.7 39.8s16 39.8 35.7 39.8l126.6 0c1.9 0 3.1 2.2 2.2 4.1L268.5 272c-1.2 1.9 .9 4.2 2.6 2.8l89-79.5c9.2-7.2 15.2-19.1 15.2-32.5 0-21.9-16-39.7-35.7-39.8l-167.3 0z\"]\n};\nvar faOpensuse = {\n  prefix: 'fab',\n  iconName: 'opensuse',\n  icon: [640, 512, [], \"e62b\", \"M471.1 102.7s-.3 18.3-.3 20.3c-9.1-3-74.4-24.1-135.7-26.3-51.9-1.8-122.8-4.3-223 57.3-19.4 12.4-73.9 46.1-99.6 109.7-5.5 13.3-12.6 43.3-5.5 71.4 3.3 12.8 8.9 24.9 16.5 35.7 17.4 25 46.6 41.6 78.1 44.4 44.4 3.9 78.1-16 90-53.3 8.2-25.8 0-63.6-31.5-82.9-25.6-15.7-53.3-12.1-69.2-1.6-13.9 9.2-21.8 23.5-21.6 39.2 .3 27.8 24.3 42.6 41.5 42.6 5.4 0 10.7-.9 15.8-2.7 6.5-1.8 13.3-6.5 13.3-14.9 0-12.1-11.6-14.8-16.8-13.9-2.9 .5-4.5 2-11.8 2.4-2-.2-12-3.1-12-14l0-.1c.2-12.3 13.2-18 25.5-16.9 32.3 2.8 47.7 40.7 28.5 65.7-18.3 23.7-76.6 23.2-99.7-20.4-26-49.2 12.7-111.2 87-98.4 33.2 5.7 83.6 35.5 102.4 104.3l45.9 0c-5.7-17.6-8.9-68.3 42.7-68.3 56.7 0 63.9 39.9 79.8 68.3l48.6 0c-12.8-18.3-21.7-38.7-18.9-55.8 5.6-33.8 39.7-18.4 82.4-17.4 66.5 .4 102.1-27 103.1-28 3.7-3.1 6.5-15.8 7-17.7 1.3-5.1-3.2-2.4-3.2-2.4-8.7 5.2-30.5 15.2-50.9 15.6-25.3 .5-76.2-25.4-81.6-28.2-.3-.4 .1 1.2-11-25.5 88.4 58.3 118.3 40.5 145.2 21.7 .8-.6 4.3-2.9 3.6-5.7-13.8-48.1-22.4-62.7-34.5-69.6-37-21.6-125-34.7-129.2-35.3 .1-.1-.9-.3-.9 .7zm60.4 72.8a37.6 37.6 0 1 1 75.2 2.6 37.6 37.6 0 1 1 -75.2-2.6zm38.6-25.3c-3.6-.3-7.1 .1-10.5 1.2s-6.5 2.9-9.2 5.3-4.8 5.3-6.3 8.5-2.4 6.7-2.5 10.3 .5 7.1 1.8 10.4 3.3 6.3 5.8 8.9 5.5 4.5 8.8 5.9 6.9 2 10.4 1.9c3.6 .3 7.1-.1 10.5-1.2s6.5-2.9 9.2-5.3 4.8-5.3 6.3-8.5 2.4-6.7 2.5-10.3-.5-7.1-1.8-10.4-3.3-6.3-5.8-8.9-5.5-4.5-8.8-5.9-6.9-2-10.4-1.9zm4.3 28.8c-15.4 0-15.4-15.6 0-15.6s15.4 15.6 0 15.6z\"]\n};\nvar faDropbox = {\n  prefix: 'fab',\n  iconName: 'dropbox',\n  icon: [576, 512, [], \"f16b\", \"M288.4 116.3l-132 84.3 132 84.3-132 84.3-132.4-85.1 132.3-84.3-132.3-83.5 132.3-84.3 132.1 84.3zM155.6 395.7l132-84.3 132 84.3-132 84.3-132-84.3zM288.4 284.1l132-84.3-132-83.6 131.3-84.2 132.3 84.3-132.3 84.3 132.3 84.2-132.3 84.3-131.3-85z\"]\n};\nvar faDeezer = {\n  prefix: 'fab',\n  iconName: 'deezer',\n  icon: [512, 512, [], \"e077\", \"M14.8 101.1C6.6 101.1 0 127.6 0 160.3s6.6 59.2 14.8 59.2 14.8-26.5 14.8-59.2-6.6-59.2-14.8-59.2zM448.7 40.9c-7.7 0-14.5 17.1-19.4 44.1-7.7-46.7-20.2-77-34.2-77-16.8 0-31.1 42.9-38 105.4-6.6-45.4-16.8-74.2-28.3-74.2-16.1 0-29.6 56.9-34.7 136.2-9.4-40.8-23.2-66.3-38.3-66.3s-28.8 25.5-38.3 66.3c-5.1-79.3-18.6-136.2-34.7-136.2-11.5 0-21.7 28.8-28.3 74.2-6.6-62.5-21.2-105.4-37.8-105.4-14 0-26.5 30.4-34.2 77-4.8-27-11.7-44.1-19.4-44.1-14.3 0-26 59.2-26 132.1S49 305.2 63.3 305.2c5.9 0 11.5-9.9 15.8-26.8 6.9 61.7 21.2 104.1 38 104.1 13 0 24.5-25.5 32.1-65.6 5.4 76.3 18.6 130.4 34.2 130.4 9.7 0 18.6-21.4 25.3-56.4 7.9 72.2 26.3 122.7 47.7 122.7s39.5-50.5 47.7-122.7c6.6 35 15.6 56.4 25.3 56.4 15.6 0 28.8-54.1 34.2-130.4 7.7 40.1 19.4 65.6 32.1 65.6 16.6 0 30.9-42.3 38-104.1 4.3 16.8 9.7 26.8 15.8 26.8 14.3 0 26-59.2 26-132.1S463 40.9 448.7 40.9zm48.5 60.2c-8.2 0-14.8 26.5-14.8 59.2s6.6 59.2 14.8 59.2 14.8-26.5 14.8-59.2-6.6-59.2-14.8-59.2z\"]\n};\nvar faCreativeCommonsSampling = {\n  prefix: 'fab',\n  iconName: 'creative-commons-sampling',\n  icon: [512, 512, [], \"f4f0\", \"M255.6 8C397.4 8 504 118.1 504 256 504 403.1 385.5 504 255.6 504 121.6 504 8 394.5 8 256 8 123.1 112.7 8 255.6 8zm.8 44.7c-118.2 0-203.7 97.9-203.7 203.3 0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3zm3.6 53.2c2.8-.3 11.5 1 11.5 11.5l6.6 107.2 4.9-59.3c0-6 4.7-10.6 10.6-10.6s10.6 4.7 10.6 10.6c0 2.5-.5-5.7 5.7 81.5l5.8-64.2c.3-2.9 2.9-9.3 10.2-9.3 3.8 0 9.9 2.3 10.6 8.9l11.5 96.5 5.3-12.8c1.8-4.4 5.2-6.6 10.2-6.6l58 0 0 21.3-50.9 0-18.2 44.3c-3.9 9.9-19.5 9.1-20.8-3.1l-4-31.9-7.5 92.6c-.3 3-3 9.3-10.2 9.3-3 0-9.8-2.1-10.6-9.3 0-1.9 .6 5.8-6.2-77.9l-5.3 72.2c-1.1 4.8-4.8 9.3-10.6 9.3-2.9 0-9.8-2-10.6-9.3 0-1.9 .5 6.7-5.8-87.7L255 383.9c0 6.3-3.6 12.4-10.6 12.4-5.2 0-10.6-4.1-10.6-12L228 296.6c-5.8 92.5-5.3 84-5.3 85.9-1.1 4.8-4.8 9.3-10.6 9.3-3 0-9.8-2.1-10.6-9.3 0-.7-.4-1.1-.4-2.6l-6.2-88.6-4.9 56.7c-.7 6.5-6.7 9.3-10.6 9.3-5.8 0-9.6-4.1-10.6-8.9L157.7 272c-2 4-3.5 8.4-11.1 8.4l-51.4 0 0-21.3 44.8 0 13.7-27.9c4.4-9.9 18.2-7.2 19.9 2.7l3.1 20.4 8.4-97.9c0-6 4.8-10.6 10.6-10.6 .5 0 10.6-.2 10.6 12.4l4.9 69.1 6.6-92.6c0-10.1 9.5-10.6 10.2-10.6 .6 0 10.6 .7 10.6 10.6l5.3 80.6 6.2-97.9c.1-1.1-.6-10.3 9.9-11.5z\"]\n};\nvar faJediOrder = {\n  prefix: 'fab',\n  iconName: 'jedi-order',\n  icon: [448, 512, [], \"f50e\", \"M398.9 373.6c95.9-122.1 17.2-233.1 17.2-233.1 45.4 85.8-41.4 170.5-41.4 170.5 105-171.5-60.5-271.5-60.5-271.5 96.9 72.7-10.1 190.7-10.1 190.7 85.8 158.4-68.6 230.1-68.6 230.1s-.4-16.9-2.2-85.7c4.3 4.5 34.5 36.2 34.5 36.2l-24.2-47.4 62.6-9.1-62.6-9.1 20.2-55.5-31.4 45.9c-2.2-87.7-7.8-305.1-7.9-306.9 0 1-5.6 219-7.9 306.9l-31.4-45.9 20.2 55.5-62.6 9.1 62.6 9.1-24.2 47.4 34.5-36.2c-1.8 68.8-2.2 85.7-2.2 85.7S59.1 388.6 144.9 230.2c0 0-107-118.1-10.1-190.7 0 0-165.5 99.9-60.5 271.5 0 0-86.8-84.8-41.4-170.5 0 0-78.7 111 17.2 233.1 0 0-26.2-16.1-49.4-77.7 0 0 16.9 183.3 222 185.7l4.1 0c205-2.4 222-185.7 222-185.7-23.6 61.5-49.9 77.7-49.9 77.7z\"]\n};\nvar faRProject = {\n  prefix: 'fab',\n  iconName: 'r-project',\n  icon: [576, 512, [], \"f4f7\", \"M578.5 226.6C578.5 119.1 448.4 32 288 32S-2.5 119.1-2.5 226.6c0 95.8 103.3 175.4 239.4 191.5l0 61.9 99.1 0 0-61.5c24.3-2.7 47.6-7.4 69.4-13.9l40.1 75.4 112 0-67.4-113.7c54.5-35.4 88.4-84.9 88.4-139.7zM111.7 241.1c0-73.5 98.9-133 220.8-133s211.9 40.7 211.9 133c0 50.1-26.5 85-70.3 106.4-2.4-1.6-4.7-2.9-6.4-3.7-10.2-5.2-27.8-10.5-27.8-10.5s86.6-6.4 86.6-92.7-90.6-87.9-90.6-87.9l-199 0 0 208.3c-74.1-21.5-125.2-67.1-125.2-119.9zm225.1 38.3l0-55.6c57.8 0 87.8-6.8 87.8 27.3 0 36.5-38.2 28.3-87.8 28.3zm-.9 72.5l26.6 0c10.8 0 18.9 11.7 24 19.2-16.1 1.9-33 2.8-50.6 2.9l0-22.1z\"]\n};\nvar faInstalod = {\n  prefix: 'fab',\n  iconName: 'instalod',\n  icon: [512, 512, [], \"e081\", \"M153.6 480l233.7 0 115.4-204.2-298.3 57.4-50.8 146.8zM505 240.1L387.4 32 155.9 32 360.5 267.9 505 240.1zM124.6 48.8L7.5 256 123.5 461.2 225.9 165.6 124.6 48.8z\"]\n};\nvar faCanadianMapleLeaf = {\n  prefix: 'fab',\n  iconName: 'canadian-maple-leaf',\n  icon: [512, 512, [], \"f785\", \"M383.8 351.7c2.5-2.5 105.2-92.4 105.2-92.4l-17.5-7.5c-10-4.9-7.4-11.5-5-17.4 2.4-7.6 20.1-67.3 20.1-67.3s-47.7 10-57.7 12.5c-7.5 2.4-10-2.5-12.5-7.5s-15-32.4-15-32.4-52.6 59.9-55.1 62.3c-10 7.5-20.1 0-17.6-10 0-10 27.6-129.6 27.6-129.6s-30.1 17.4-40.1 22.4c-7.5 5-12.6 5-17.6-5-5.1-7.5-42.7-79.8-42.7-79.8s-37.5 72.3-42.5 79.8c-5 10-10 10-17.6 5-10-5-40.1-22.4-40.1-22.4S183.3 182 183.3 192c2.5 10-7.5 17.5-17.6 10-2.5-2.5-55.1-62.3-55.1-62.3s-12.5 27.3-15 32.3-5 9.9-12.5 7.5C73 177 25.4 167 25.4 167S43 226.7 45.5 234.3c2.4 6 5 12.5-5 17.4L23 259.3s102.6 89.9 105.2 92.4c5.1 5 10 7.5 5.1 22.5-5.1 15-10.1 35.1-10.1 35.1s95.2-20.1 105.3-22.6c8.7-.9 18.3 2.5 18.3 12.5S241 512 241 512l30 0s-5.8-102.7-5.8-112.8 9.5-13.4 18.4-12.5c10 2.5 105.2 22.6 105.2 22.6s-5-20.1-10-35.1 0-17.5 5-22.5z\"]\n};\nvar faEthereum = {\n  prefix: 'fab',\n  iconName: 'ethereum',\n  icon: [320, 512, [], \"f42e\", \"M311.9 260.8L160 353.6 8 260.8 160 0 311.9 260.8zM160 383.4L8 290.6 160 512 312 290.6 160 383.4z\"]\n};\nvar faHouzz = {\n  prefix: 'fab',\n  iconName: 'houzz',\n  icon: [448, 512, [], \"f27c\", \"M276 330.7l-104.6 0 0 149.3-154.3 0 0-448 109.5 0 0 104.5 305.1 85.6 0 257.9-155.7 0 0-149.3z\"]\n};\nvar faViber = {\n  prefix: 'fab',\n  iconName: 'viber',\n  icon: [512, 512, [], \"f409\", \"M444.3 49.9c-12.7-11.7-64.1-49-178.7-49.5 0 0-135.1-8.1-200.9 52.3-36.6 36.6-49.5 90.3-50.9 156.8s-3.1 191.1 117 224.9l.1 0-.1 51.6s-.8 20.9 13 25.1c16.6 5.2 26.4-10.7 42.3-27.8 8.7-9.4 20.7-23.2 29.8-33.7 82.2 6.9 145.3-8.9 152.5-11.2 16.6-5.4 110.5-17.4 125.7-142 15.8-128.6-7.6-209.8-49.8-246.5zM458.2 287c-12.9 104-89 110.6-103 115.1-6 1.9-61.5 15.7-131.2 11.2 0 0-52 62.7-68.2 79-5.3 5.3-11.1 4.8-11-5.7 0-6.9 .4-85.7 .4-85.7l0 0C43.4 372.7 49.4 266.6 50.5 211.1s11.6-101 42.6-131.6c55.7-50.5 170.4-43 170.4-43 96.9 .4 143.3 29.6 154.1 39.4 35.7 30.6 53.9 103.8 40.6 211.1zm-139-80.8c.4 8.6-12.5 9.2-12.9 .6-1.1-22-11.4-32.7-32.6-33.9-8.6-.5-7.8-13.4 .7-12.9 27.9 1.5 43.4 17.5 44.8 46.2zm20.3 11.3c1-42.4-25.5-75.6-75.8-79.3-8.5-.6-7.6-13.5 .9-12.9 58 4.2 88.9 44.1 87.8 92.5-.1 8.6-13.1 8.2-12.9-.3zm47 13.4c.1 8.6-12.9 8.7-12.9 .1-.6-81.5-54.9-125.9-120.8-126.4-8.5-.1-8.5-12.9 0-12.9 73.7 .5 133 51.4 133.7 139.2zM375.2 329l0 .2c-10.8 19-31 40-51.8 33.3l-.2-.3c-21.1-5.9-70.8-31.5-102.2-56.5-16.2-12.8-31-27.9-42.4-42.4-10.3-12.9-20.7-28.2-30.8-46.6-21.3-38.5-26-55.7-26-55.7-6.7-20.8 14.2-41 33.3-51.8l.2 0c9.2-4.8 18-3.2 23.9 3.9 0 0 12.4 14.8 17.7 22.1 5 6.8 11.7 17.7 15.2 23.8 6.1 10.9 2.3 22-3.7 26.6l-12 9.6c-6.1 4.9-5.3 14-5.3 14s17.8 67.3 84.3 84.3c0 0 9.1 .8 14-5.3l9.6-12c4.6-6 15.7-9.8 26.6-3.7 14.7 8.3 33.4 21.2 45.8 32.9 7 5.7 8.6 14.4 3.8 23.6z\"]\n};\nvar faKickstarter = {\n  prefix: 'fab',\n  iconName: 'kickstarter',\n  icon: [448, 512, [\"square-kickstarter\"], \"f3bb\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM320.8 233l-23.3 23.1 23.3 22.9c24.1 23.9 24.1 63 0 86.9s-63.4 23.9-87.6 0l-8.5-8.4c-11.3 16-29.7 26.5-50.9 26.5-34.1 0-61.9-27.5-61.9-61.4l0-133.2c0-33.8 27.7-61.4 61.9-61.4 21.1 0 39.6 10.5 50.9 26.5l8.5-8.4c24.1-23.9 63.4-23.9 87.6 0s24.1 63 0 86.9z\"]\n};\nvar faSquareKickstarter = faKickstarter;\nvar faSpotify = {\n  prefix: 'fab',\n  iconName: 'spotify',\n  icon: [512, 512, [], \"f1bc\", \"M256 8a248 248 0 1 0 0 496 248 248 0 1 0 0-496zM356.7 372.9c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4zm26.9-65.6c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm31-76.2c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3z\"]\n};\nvar faBuildAwesome = {\n  prefix: 'fab',\n  iconName: 'build-awesome',\n  icon: [448, 512, [], \"e8ac\", \"M224 0c114.9 0 208 93.1 208 208 0 94.2-73.4 195.3-154.4 228.6l24.1 54.3c1.5 3.4 2.3 7 2.3 10.7 0 14.6-11.8 26.4-26.4 26.4l-107.2 0c-14.6 0-26.4-11.8-26.4-26.4 0-3.7 .8-7.3 2.3-10.7l24.1-54.3C89.4 403.3 16 302.2 16 208 16 93.1 109.1 0 224 0zm-.6 85.6c-2.7-13-15.3-21.4-28.3-18.8-62.6 12.8-110.5 66.2-114.8 131.5-.9 13.2 9.2 24.7 22.4 25.5 13.2 .9 24.6-9.2 25.5-22.4 2.9-43.5 34.8-79.1 76.5-87.6 13-2.6 21.4-15.3 18.7-28.3z\"]\n};\nvar faLeanpub = {\n  prefix: 'fab',\n  iconName: 'leanpub',\n  icon: [576, 512, [], \"f212\", \"M386.6 111.5l15.1 249-11-.3c-36.2-.8-71.6 8.8-102.7 28-31-19.2-66.4-28-102.7-28-45.6 0-82.1 10.7-123.5 27.7L93.2 129.6c28.5-11.8 61.5-18.1 92.2-18.1 41.2 0 73.8 13.2 102.7 42.5 27.7-28.3 59-41.7 98.5-42.5zM569.2 448c-25.5 0-47.5-5.2-70.5-15.6-34.3-15.6-70-25-107.9-25-39 0-74.9 12.9-102.7 40.6-27.7-27.7-63.7-40.6-102.7-40.6-37.9 0-73.6 9.3-107.9 25-22.2 9.9-44.7 15.6-69.2 15.6L7 448 49.6 98.9c39.3-22.2 87-34.9 132.3-34.9 37.1 0 75.2 7.7 106.2 29.1 31-21.4 69.2-29.1 106.2-29.1 45.3 0 93 12.6 132.3 34.9L569.2 448zm-43.4-44.7L491.8 123c-30.7-14-67.2-21.4-101-21.4-38.4 0-74.4 12.1-102.7 38.7-28.3-26.6-64.2-38.7-102.7-38.7-33.8 0-70.3 7.4-101 21.4l-34 280.2c47.2-19.5 82.9-33.5 135-33.5 37.6 0 70.8 9.6 102.7 29.6 31.8-20 65.1-29.6 102.7-29.6 52.2 0 87.8 14 135 33.5z\"]\n};\nvar faJava = {\n  prefix: 'fab',\n  iconName: 'java',\n  icon: [384, 512, [], \"f4e4\", \"M277.8 312.9c9.8-6.7 23.4-12.5 23.4-12.5s-38.7 7-77.2 10.2c-47.1 3.9-97.7 4.7-123.1 1.3-60.1-8 33-30.1 33-30.1s-36.1-2.4-80.6 19c-52.5 25.4 130 37 224.5 12.1zm-85.4-32.1c-19-42.7-83.1-80.2 0-145.8 103.7-81.8 50.5-135 50.5-135 21.5 84.5-75.6 110.1-110.7 162.6-23.9 35.9 11.7 74.4 60.2 118.2zM307 104.6c.1 0-175.2 43.8-91.5 140.2 24.7 28.4-6.5 54-6.5 54s62.7-32.4 33.9-72.9C216 188.1 195.4 169.3 307 104.6zm-6.1 270.5c-.5 1-1.2 1.8-2 2.6 128.3-33.7 81.1-118.9 19.8-97.3-3.3 1.2-6.2 3.4-8.2 6.3 3.6-1.3 7.3-2.3 11-3 31-6.5 75.5 41.5-20.6 91.4zM348 437.4s14.5 11.9-15.9 21.2c-57.9 17.5-240.8 22.8-291.6 .7-18.3-7.9 16-19 26.8-21.3 11.2-2.4 17.7-2 17.7-2-20.3-14.3-131.3 28.1-56.4 40.2 204.2 33.2 372.4-14.9 319.4-38.8zM124.5 396c-78.7 22 47.9 67.4 148.1 24.5-9.8-3.8-19.2-8.4-28.2-13.8-44.7 8.5-65.4 9.1-106 4.5-33.5-3.8-13.9-15.2-13.9-15.2zm179.8 97.2c-78.7 14.8-175.8 13.1-233.3 3.6 0-.1 11.8 9.7 72.4 13.6 92.2 5.9 233.8-3.3 237.1-46.9 0 0-6.4 16.5-76.2 29.7zM260.7 353c-59.2 11.4-93.5 11.1-136.8 6.6-33.5-3.5-11.6-19.7-11.6-19.7-86.8 28.8 48.2 61.4 169.5 25.9-7.8-2.8-15-7.1-21.1-12.8z\"]\n};\nvar faNfcSymbol = {\n  prefix: 'fab',\n  iconName: 'nfc-symbol',\n  icon: [512, 512, [], \"e531\", \"M360.9 32.4c7.7-1.3 15.7 .5 21.2 5 84.1 58.7 129.9 136.3 129.9 217.7 0 83.1-45.8 160.8-129.9 219.5-4.8 4-11.7 5.9-18.6 5.3-7-.6-13.5-3.6-18.4-8.5L161.7 288.7c-5.6-5.5-8.7-13-9.6-20.9 0-7.8 4-15.3 9.5-20.9 5.6-5.5 13.1-8.7 20.9-8.7 7.9 0 15.4 3.1 20.9 8.6L368.5 411.2c54.6-44.7 84.3-99.2 84.3-156.1 0-61.6-36.9-122.2-103.9-169.3-6.4-4.5-10.8-11.4-12.1-19.1-1.4-7.7 .4-15.7 5-22.1 4.5-6.4 11.4-10.8 19.1-12.1zm-206 447.2c-7.7 1.3-15.6-.5-22.1-5-83.1-58.7-129-136.4-129-219.5 0-81.4 45.8-159 129-217.7 5.7-4 12.6-5.9 19.6-5.3 6.9 .6 13.4 3.6 18.3 8.5L354.1 223.3c5.6 5.5 8.7 13 8.7 20.9 .1 6.9-3 15.3-8.6 20.9-5.5 5.5-13 8.7-20.9 8.7-7.8 0-16.2-3.1-20.9-8.6L147.3 100.7c-54.6 45.2-84.3 99.2-84.3 154.4 0 63.4 36.9 124 103.1 171.1 7.3 4.6 11.6 11.4 13 19.2 1.3 7.7-.5 15.7-5 22.1s-11.4 10.7-19.2 12.1z\"]\n};\nvar faWodu = {\n  prefix: 'fab',\n  iconName: 'wodu',\n  icon: [640, 512, [], \"e088\", \"M178.4 339.7l-37.3 0-28.9-116.2-.5 0-28.5 116.2-38 0-45.2-170.8 37.5 0 27 116.2 .5 0 29.7-116.2 35.2 0 29.2 117.7 .5 0 28-117.7 36.8 0-45.9 170.8zm93-127c39 0 64.1 25.8 64.1 65.3 0 39.2-25.1 65-64.1 65-38.7 0-63.9-25.8-63.9-65 0-39.5 25.1-65.3 63.9-65.3zm0 104.8c23.2 0 30.1-19.9 30.1-39.5 0-19.9-6.9-39.7-30.1-39.7-27.7 0-29.9 19.9-29.9 39.7 0 19.6 6.9 39.5 29.9 39.5zm163.7 6.5l-.5 0c-7.9 13.4-21.8 19.1-37.5 19.1-37.3 0-55.5-32-55.5-66.2 0-33.2 18.4-64.1 54.8-64.1 14.6 0 28.9 6.2 36.8 18.4l.2 0 0-62.2 34 0 0 170.8-32.3 0 0-15.8zm-29.7-85.6c-22.2 0-29.9 19.1-29.9 39.5 0 19.4 8.8 39.7 29.9 39.7 22.5 0 29.2-19.6 29.2-39.9 0-20.1-7.2-39.2-29.2-39.2zM593 339.7l-32.3 0 0-17.2-.7 0c-8.6 13.9-23.4 20.6-37.8 20.6-36.1 0-45.2-20.3-45.2-50.9l0-76.1 34 0 0 69.8c0 20.3 6 30.4 21.8 30.4 18.4 0 26.3-10.3 26.3-35.4l0-64.8 34 0 0 123.6zm9.5-36.8l37.5 0 0 36.8-37.5 0 0-36.8z\"]\n};\nvar faSquareSteam = {\n  prefix: 'fab',\n  iconName: 'square-steam',\n  icon: [448, 512, [\"steam-square\"], \"f1b7\", \"M165.6 309.1c18.6 7.7 27.3 28.9 19.6 47.4s-29 27.2-47.6 19.4l-28.5-11.8c5 10.6 13.8 19.4 25.4 24.2 25.2 10.5 54.1-1.4 64.6-26.5 5.1-12.1 5.1-25.5 .1-37.7-5.1-12.1-14.5-21.6-26.7-26.7-12.1-5-25-4.8-36.4-.5l29.5 12.2zM448 96c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96l0 144.7 116.6 48.1c12-8.2 26.2-12.1 40.7-11.3l55.4-80.2 0-1.1c0-48.2 39.3-87.5 87.6-87.5s87.6 39.3 87.6 87.5c0 49.2-40.9 88.7-89.6 87.5l-79 56.3c1.6 38.5-29.1 68.8-65.7 68.8-31.8 0-58.5-22.7-64.5-52.7L0 319.2 0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320zM241.9 196.2a58.4 58.4 0 1 0 116.8 0 58.4 58.4 0 1 0 -116.8 0zm102.4-.1a43.9 43.9 0 1 1 -87.8 0 43.9 43.9 0 1 1 87.8 0z\"]\n};\nvar faSteamSquare = faSquareSteam;\nvar faCreativeCommonsNcEu = {\n  prefix: 'fab',\n  iconName: 'creative-commons-nc-eu',\n  icon: [512, 512, [], \"f4e9\", \"M255.7 8C111.6 8 8 124.8 8 256 8 392.3 119.7 504 255.7 504 385.9 504 504 403.1 504 256 504 117 396.4 8 255.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-23.2 3.7-45.2 10.9-66l65.7 29.1-4.7 0 0 29.5 23.3 0c0 6.2-.4 3.2-.4 19.5l-22.8 0 0 29.5 27 0c11.4 67 67.2 101.3 124.6 101.3 26.6 0 50.6-7.9 64.8-15.8l-10-46.1c-8.7 4.6-28.2 10.8-47.3 10.8-28.2 0-58.1-10.9-67.3-50.2l90.3 0 128.3 56.8c-1.5 2.1-56.2 104.3-178.8 104.3zM239.6 268.1l-.5-.4 .9 .4-.4 0zm77.2-19.5l3.7 0 0-29.5-70.3 0-28.6-12.6c2.5-5.5 5.4-10.5 8.8-14.3 12.9-15.8 31.1-22.4 51.1-22.4 18.3 0 35.3 5.4 46.1 10l11.6-47.3c-15-6.6-37-12.4-62.3-12.4-39 0-72.2 15.8-95.9 42.3-5.3 6.1-9.8 12.9-13.9 20.1L85.5 146.4c64.6-96.8 157.7-93.6 170.7-93.6 113 0 203 90.2 203 203.4 0 18.7-2.1 36.3-6.3 52.9L316.8 248.6z\"]\n};\nvar faNpm = {\n  prefix: 'fab',\n  iconName: 'npm',\n  icon: [576, 512, [], \"f3d4\", \"M288 288l-32 0 0-64 32 0 0 64zM576 160l0 192-288 0 0 32-128 0 0-32-160 0 0-192 576 0zM160 192l-128 0 0 128 64 0 0-96 32 0 0 96 32 0 0-128zm160 0l-128 0 0 160 64 0 0-32 64 0 0-128zm224 0l-192 0 0 128 64 0 0-96 32 0 0 96 32 0 0-96 32 0 0 96 32 0 0-128z\"]\n};\nvar faCloudscale = {\n  prefix: 'fab',\n  iconName: 'cloudscale',\n  icon: [448, 512, [], \"f383\", \"M318.1 154l-9.4 7.6c-22.5-19.3-51.5-33.6-83.3-33.6-71.6 0-129.4 60.8-129.4 132.3 0 6.6 .4 13.1 1.4 19.4-2-56 41.8-97.4 92.6-97.4 24.2 0 46.2 9.4 62.6 24.7l-25.2 20.4c-8.3-.9-16.8 1.8-23.1 8.1-11.1 11-11.1 28.9 0 40 11.1 11 28.9 11 40 0 6.3-6.3 9-14.9 8.1-23.1l75.2-88.8c6.3-6.5-3.3-15.9-9.5-9.6zM213.7 246.5a14 14 0 1 1 20.6 19 14 14 0 1 1 -20.6-19zM224 32a224 224 0 1 0 0 448 224 224 0 1 0 0-448zm0 64a160 160 0 1 1 0 320 160 160 0 1 1 0-320z\"]\n};\nvar faThemeco = {\n  prefix: 'fab',\n  iconName: 'themeco',\n  icon: [448, 512, [], \"f5c6\", \"M202.9 8.4c9.9-5.7 26-5.8 36-.2L430 115.9c10 5.6 18 19.4 18 30.9L448 364c0 11.4-8.1 25.3-18 31L238.8 503.7c-9.9 5.7-26 5.6-35.8-.2L17.9 395.1C8 389.3 0 375.4 0 364L0 146.7c0-11.4 8-25.4 17.9-31.1L202.9 8.4zM125.5 208.3c-15.9 0-31.9 .1-47.8 .1l0 101.4 19.1 0 0-29.8 28.7 0c49.7 0 49.6-71.7 0-71.7zM265.6 308.6l-30.7-34.6c37-7.5 34.8-65.2-10.9-65.5-16.1 0-32.2-.1-48.3-.1l0 101.6 19.1 0 0-33.9 18.4 0 29.6 33.9 22.8 0 0-1.3zm-41.6-82.3c23.3 0 23.3 32.5 0 32.5l-29.1 0 0-32.5 29.1 0zm-95.6-1.6c21.2 0 21.1 38.9 0 38.9l-32.3 0 0-38.8 32.3 0zm192.6-18.2c-68.5 0-71 105.8 0 105.8 69.5 0 69.4-105.8 0-105.8zm0 17.4c44.1 0 44.8 70.9 0 70.9s-44.4-70.9 0-70.9z\"]\n};\nvar faGooglePlay = {\n  prefix: 'fab',\n  iconName: 'google-play',\n  icon: [448, 512, [], \"f3ab\", \"M293.6 234.3L72.9 13 353.7 174.2 293.6 234.3zM15.3 0C2.3 6.8-6.4 19.2-6.4 35.3l0 441.3c0 16.1 8.7 28.5 21.7 35.3L271.9 255.9 15.3 0zM440.5 225.6l-58.9-34.1-65.7 64.5 65.7 64.5 60.1-34.1c18-14.3 18-46.5-1.2-60.8zM72.9 499L353.7 337.8 293.6 277.7 72.9 499z\"]\n};\nvar faKorvue = {\n  prefix: 'fab',\n  iconName: 'korvue',\n  icon: [448, 512, [], \"f42f\", \"M387.6 34l-327 0C27.9 34 1.1 60.8 1.1 93.5l0 327.1c0 32.6 26.8 59.4 59.5 59.4l327.1 0c33 0 59.5-26.8 59.5-59.5l0-327C447.1 60.8 420.3 34 387.6 34zM88.2 120.8l96 0 0 116 61.8-116 110.9 0-81.2 132-187.5 0 0-132zM250 392.9l-65.7-113.6 0 113.6-96 0 0-130.8 191.5 0 88.6 130.8-118.4 0z\"]\n};\nvar faW3c = {\n  prefix: 'fab',\n  iconName: 'w3c',\n  icon: [640, 512, [], \"e7de\", \"M105.2 305.3l30.9-104.7c7.9-26.7 8.6-40.6 .2-68.8l-10.1-33.9 44.1 0 61 207.4 45.7-155.5c13.3-45.3 21.1-51.9 59.4-51.9l132.8 0c-24.2 42.9-49.3 85.2-73.9 127.9 2.6 .8 5.2 1.8 7.7 2.8 17.3 7.1 32.2 19.4 42 35.5 11.2 18.5 16.8 40.2 16.8 65.2 0 30.8-8.2 56.8-24.6 77.8-14.5 18.6-35 29.5-58.2 31.2 0 .3-5.2 .4-5.8 .4-39.7-.1-70.8-32.1-83.1-68.7l42.9 0c3.5 5.3 6.8 10.7 11.2 15.5 8.1 7.3 18.5 10.9 29.3 11.1 13.1 0 23.3-9.1 29.9-19.8 8.1-13.2 12.2-29 12.2-47.5 0-13.1-1.8-24.3-5.3-33.6-.9-2.3-1.9-4.5-3-6.6-1.4-2.6-2.9-5.1-4.7-7.4-10.1-13.2-29.3-19.7-47.5-19.8l-28.2 0 70.3-122-35.6 0c-43.1 0-35.9-5.4-50.4 43.3l-75.7 255.3-4.2 0-63.1-211.1-63.1 211.1-4.2 0-101-340.7 44.2 0 61 207.4zM467 335.7c.3 .6 11.3 20.3 18.3 30.3 7.1 10.1 19.8 20.9 24.8 24.6s19.1 12.5 34.3 13.9c15.2 1.5 23.3 .2 38.7-6.6 15.4-6.8 27.9-20.4 34.9-28.1 6.9-7.6 17.9-27.3 18.2-27.7l3.3 16.8c1.7 9-1 23.7-4.1 30-4.3 8.6-7.6 13.5-14 20.3-6.1 6.5-16.7 13.5-21.3 16.4-4.6 2.9-23.1 15.1-50.1 10.3s-44.7-25.9-53.9-38.2c-9.8-13.2-16.7-28.3-19-33.2-3.8-8.4-9.9-28.2-10.1-28.8zm169.7-218c3.3 20.3-.1 28.7-9.1 46l-12.7 24.2c-.3-.6-10-20.7-25.9-31.9-13.6-9.6-22.5-11.7-36.3-8.8-17.8 3.7-38 25-46.8 51.2-10.5 31.4-10.7 46.6-11 60.6-.6 22.4 2.9 35.6 2.9 35.6s-15.4-28.5-15.2-70.1c.1-29.7 4.8-56.7 18.5-83.3 12.1-23.4 30.1-37.4 46.1-39.1 16.5-1.7 29.6 6.3 39.7 14.9 10.6 9 21.3 28.8 21.3 28.8l24.9-49.8 3.6 21.8z\"]\n};\nvar faGrav = {\n  prefix: 'fab',\n  iconName: 'grav',\n  icon: [512, 512, [], \"f2d6\", \"M302.6 210.6c4.5 4.5 4.5 12.3 0 16.8l-10 10c-4.5 4.9-12.3 4.9-17.1 0l-10.8-10.8c-4.5-4.9-4.5-12.3 0-17.1l10-10c4.5-4.5 12.3-4.5 17.1 0l10.8 11.1zm-31.2-20.3a7.7 7.7 0 1 0 -10.6-11 7.7 7.7 0 1 0 10.6 11zm-26.8 5.5a7.5 7.5 0 1 0 10.7 10.5 7.5 7.5 0 1 0 -10.7-10.5zM319.4 182c-20.5-14.9-34.9-44.6-12.3-70.3 22.3-25.7 42-17.8 61.7 .8 12.3 11.7 30.2 25.7 17.8 49.8-12.9 24.3-46.6 34.3-67.2 19.7zm49.2-45.9c-9.2-10.3-24.1 7.1-16 16.6 7.6 9.3 33.1 2.5 16-16.6zM0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zm443.7 44c2.6-16.6-20.9-17.1-26-26.5-14-24.9-28.6-38-56.3-31.4 12-8.3 24.3-6.3 24.3-6.3 .3-6.6 0-13.4-9.7-25.7 4-12.9 .3-23.1 .3-23.1 16-8.9 27.7-25.2 30-44.6 3.7-32-19.4-61.1-51.4-64.8-22.8-2.6-45.1 7.9-56.1 26.5-23.9 41.4 1.4 73.2 23.1 84-14.9-1.4-35.4-12.3-41.4-35.4-6.8-26.5 2.9-51.4 9.2-63.4 0 0-4.5-6-8.3-9.2 0 0-14.2 0-25.4 5.5 12.3-15.7 26-14.9 26-14.9 0-6.6-.6-15.4-3.7-22.3-5.6-11.4-24.6-13.3-32.7 2.9 .1-.2 .3-.4 .4-.5-5.2 12.3-1.1 57.7 17.4 90-2.6 1.4-9.4 6.3-13.4 10.3-22.3 10-58 62.2-58 62.2-29.1 11.1-79.7 52.5-72.9 82.3 .3 3.1 1.4 5.7 3.1 7.7-2.9 2.3-5.7 5.2-8.6 8.6-12.3 14.2-5.5 36.3 18.3 25.2 16.3-7.4 30.6-20.9 37.5-31.4 0 0-5.7-5.2-16.8-4.5 28.6-6.8 35.4-9.7 47.7-9.4 8.3 4 8.3-35.4 8.3-35.4 0-15.2-2.3-32-11.5-42.8 12.9 12.6 30 33.8 28.9 62.6-.8 18.9-15.7 23.7-15.7 23.7-9.4 17.1-44.6 68-31.4 109.4 0 0-10-15.4-10.5-22.8-18 20-48 54-25.4 66.6 27.5 15.2 112.3-91.5 130.3-146.9 35.7-21.5 57.2-48.8 66-67.1 22.7 44.9 98.4 97.5 104.4 60.9z\"]\n};\nvar faAws = {\n  prefix: 'fab',\n  iconName: 'aws',\n  icon: [640, 512, [], \"f375\", \"M180.4 203c-.7 22.6 10.6 32.7 10.9 39-.1 1.3-.6 2.5-1.3 3.6s-1.7 2-2.8 2.6l-12.8 9c-1.7 1.2-3.6 1.8-5.6 1.9-.4 0-8.2 1.8-20.5-25.6-7.5 9.4-17 16.9-27.9 22s-22.7 7.7-34.7 7.5c-16.3 .9-60.4-9.2-58.1-56.2-1.6-38.3 34.1-62.1 70.9-60 7.1 0 21.6 .4 47 6.3l0-15.6c2.7-26.5-14.7-47-44.8-43.9-2.4 0-19.4-.5-45.8 10.1-7.4 3.4-8.3 2.8-10.8 2.8-7.4 0-4.4-21.5-2.9-24.2 5.2-6.4 35.9-18.4 65.9-18.2 20.1-1.8 40.1 4.4 55.7 17.3 6.3 7.1 11.2 15.4 14.2 24.4s4.2 18.5 3.5 28l0 69.3zM94 235.4c32.4-.5 46.2-20 49.3-30.5 2.5-10.1 2.1-16.4 2.1-27.4-9.7-2.3-23.6-4.9-39.6-4.9-15.2-1.1-42.8 5.6-41.7 32.3-1.2 16.8 11.1 31.4 30 30.5zm170.9 23.1c-7.9 .7-11.5-4.9-12.7-10.4L202.4 83.4c-1-2.8-1.6-5.6-1.9-8.6-.2-1.2 .1-2.4 .8-3.4s1.8-1.6 3-1.8c.2 0-2.1 0 22.2 0 8.8-.9 11.6 6 12.6 10.4L274.9 220.8 308.1 80c.5-3.2 2.9-11.1 12.8-10.2l17.2 0c2.2-.2 11.1-.5 12.7 10.4L384.1 222.7 421 80.1c.5-2.2 2.7-11.4 12.7-10.4l19.7 0c.9-.1 6.2-.8 5.3 8.6-.4 1.8 3.4-10.7-52.8 169.9-1.1 5.5-4.8 11.1-12.7 10.4l-18.7 0c-10.9 1.2-12.5-9.7-12.7-10.7l-33.2-137.1-32.8 137c-.2 1.1-1.7 11.9-12.7 10.7l-18.3 0 0 0zm273.5 5.6c-5.9 0-33.9-.3-57.4-12.3-2.3-1-4.3-2.6-5.7-4.8s-2.1-4.6-2.1-7.1l0-10.7c0-8.5 6.2-6.9 8.8-5.9 10 4.1 16.5 7.1 28.8 9.6 36.7 7.5 52.8-2.3 56.7-4.5 13.2-7.8 14.2-25.7 5.3-34.9-10.5-8.8-15.5-9.1-53.1-21-4.6-1.3-43.7-13.6-43.8-52.4-.6-28.2 25-56.2 69.5-56 12.7 0 46.4 4.1 55.6 15.6 1.4 2.1 2 4.6 1.9 7l0 10.1c0 4.4-1.6 6.7-4.9 6.7-7.7-.9-21.4-11.2-49.2-10.8-6.9-.4-39.9 .9-38.4 25-.4 19 26.6 26.1 29.7 26.9 36.5 11 48.6 12.8 63.1 29.6 17.1 22.2 7.9 48.3 4.3 55.4-19.1 37.5-68.4 34.4-69.3 34.4zm40.2 104.9c-70 51.7-171.7 79.2-258.5 79.2-117.1 .8-230.3-42.3-317.3-120.7-6.5-5.9-.8-14 7.2-9.5 96.5 55.2 205.7 84.2 316.9 84.1 83-.4 165.1-17.3 241.6-49.5 11.8-5 21.8 7.8 10.1 16.4zm29.2-33.3c-9-11.5-59.3-5.4-81.8-2.7-6.8 .8-7.9-5.1-1.8-9.5 40.1-28.2 105.9-20.1 113.4-10.6 7.5 9.5-2.1 75.4-39.6 106.9-5.8 4.9-11.3 2.3-8.7-4.1 8.4-21.3 27.4-68.5 18.4-80z\"]\n};\nvar faGlideG = {\n  prefix: 'fab',\n  iconName: 'glide-g',\n  icon: [448, 512, [], \"f2a6\", \"M407.1 211.2c-3.5-1.4-11.6-3.8-15.4-3.8-37.1 0-62.2 16.8-93.5 34.5l-.9-.9c7-47.3 23.5-91.9 23.5-140.4 0-71.5-38.2-100.6-108.4-100.6-115.1 0-173.4 113.7-173.4 198.4 0 87.9 51.3 136.6 138.6 136.6 12 0 11-1 11 3.8-16.9 128.9-90.8 133.1-90.8 94.6 0-39.2 45-58.6 45.5-61-.3-12.2-47-27.6-58.9-27.6-33.9 .1-52.4 51.2-52.4 79.3 0 51.9 32.8 87.9 85.5 87.9 77.4 0 134-77.8 151.4-145.4 15.1-60.5 11.2-63.3 19.7-67.6 32.2-16.2 57.5-27 93.8-27 17.8 0 30.5 3.7 58.9 8.4 2.9 0 6.7-2.9 6.7-5.8 0-8-33.4-60.5-40.9-63.4zM231.8 126.8c-9.3 44.7-18.6 89.6-27.8 134.3-2.3 10.2-13.3 7.8-22 7.8-38.3 0-49-41.8-49-73.1 0-47 18-109.3 61.8-133.4 7-4.1 14.8-6.7 22.6-6.7 18.6 0 20 13.3 20 28.7-.1 14.3-2.7 28.5-5.6 42.4z\"]\n};\nvar faXrp = {\n  prefix: 'fab',\n  iconName: 'xrp',\n  icon: [512, 512, [], \"e8ba\", \"M157.1 313.5c54.7-54.1 143.4-54.2 198.2 0l152.1 150.5-72.7 0-115.8-114.6c-34.7-34.3-90.8-34.3-125.5 0L77.7 464 5 464 157.1 313.5zm36.3-151.8c34.7 34.3 90.8 34.3 125.5 0L433.8 48 506.4 48 355.2 197.6c-54.7 54.1-143.4 54.1-198.1 0L5.9 48 78.6 48 193.4 161.7z\"]\n};\nvar faJsfiddle = {\n  prefix: 'fab',\n  iconName: 'jsfiddle',\n  icon: [576, 512, [], \"f1cc\", \"M511.1 237.5c-4.7-2.6-5.7-5.7-6.4-10.8-2.4-16.5-3.5-33.6-9.1-49.1-35.9-100-154-143.4-246.8-91.6-27.4 15.2-49 36.4-65.5 63.9-3.2-1.5-5.5-2.7-7.8-3.7-30.1-12.4-59-10.1-85.3 9.2-25.5 18.7-36.4 44.5-32.7 76.4 .4 3-2 7.6-4.5 9.5-39.7 30-56 78.1-41.9 124.6 13.8 45.6 57.5 79.8 105.6 81.4 30.3 1 60.6 .5 91 .5 84 0 168.1 .5 252.1-.5 52.7-.6 96.1-36.9 108.2-87.3 11.5-48.1-11.1-97.3-56.8-122.6zm21.1 156.9c-18.2 22.4-42.3 35.3-71.3 35.7-56.9 .8-113.8 .2-170.7 .2 0 .7-163 .2-163.7 .2-43.9-.3-76.7-19.8-95.2-60-18.9-41.2-4-90.8 34.2-116.1 9.2-6.1 12.5-11.6 10.1-23.1-5.5-26.4 4.5-48 26.4-63 23-15.7 47.4-16.1 72-3.1 10.3 5.4 14.6 11.6 22.2-2.5 14.2-26.4 34.6-46.7 60.7-61.3 97.5-54.4 228.4 7.6 230.2 132.7 .1 8.2 2.4 12.4 9.8 15.9 57.6 26.8 74.5 96.1 35.1 144.5zm-87.8-80.5c-5.8 31.2-34.6 55.1-66.7 55.1-17 0-32.1-6.5-44.1-17.7-27.7-25.7-71.1-75-95.9-93.4-20.1-14.9-42-12.3-60.3 3.8-50 44.1 15.9 121.8 67.1 77.2 4.5-4 7.8-9.5 12.7-12.8 8.2-5.5 20.8-.9 13.2 10.6-17.4 26.3-49.3 38.2-78.9 29.3-28.9-8.7-48.8-36-48.6-70.2 1.2-22.5 12.4-43.1 35.4-56 22.6-12.6 46.4-13.1 67 2.5 50.8 38.5 75.6 81.7 107.3 101.2 24.6 15.1 54.3 7.4 68.8-17.5 28.8-49.2-34.6-105-78.9-63.5-4 3.7-6.9 8.9-11.4 11.7-11 6.8-17.3-4.1-12.8-10.4 20.7-28.6 50.5-40.4 83.3-28.2 31.4 11.7 49.1 44.4 42.8 78.2z\"]\n};\nvar faKeybase = {\n  prefix: 'fab',\n  iconName: 'keybase',\n  icon: [448, 512, [], \"f4f5\", \"M286.2 419a18 18 0 1 0 0 36 18 18 0 1 0 0-36zM398.1 271.4c-9.5-14.6-39.4-52.4-87.3-73.7-6.1-2.7-12.2-5.1-18.4-7.3 4.1-9.9 6-20.6 5.8-31.4s-2.7-21.3-7.2-31.1-10.9-18.5-18.9-25.7-17.4-12.6-27.6-16c-12.4-4.1-23.3-6-32.4-5.8-.6-2-1.9-11 9.4-35l-22.9-13.5-5.5 7.6c-8.7 12.1-16.9 23.6-24.3 34.9-2.7-.6-5.5-1.1-8.3-1.2-41.5-2.4-39-2.3-41.1-2.3-50.6 0-50.8 52.1-50.8 45.9l-2.4 36.7c-1.6 27 19.8 50.2 47.6 51.8l8.9 .5C106 215.5 90.4 227.5 76.6 241.4 14 304.7 14 374 14 429.8l0 33.6 23.3-29.8c3.1 13.1 8 25.8 14.6 37.6 5.8 10.1 14.9 9.4 19.6 7.3 4.2-1.9 10-6.9 3.8-20.1-8-16.8-13.3-34.7-15.8-53.1l46.8-59.8-24.7 74.1c58.2-42.4 157.4-61.8 236.2-38.6 34.2 10.1 67.4 .7 84.7-23.8 .7-1 1.2-2.2 1.8-3.2 1.8 9.4 2.7 18.9 2.8 28.4 0 23.3-3.7 52.9-14.9 81.6-2.5 6.5 1.8 14.5 8.6 15.7 7.4 1.6 15.3-3.1 18.4-11.1 9.6-25.5 14.6-54.6 14.6-86.2 0-38.6-13-77.5-35.9-110.9zM142.4 128.6l-15.7-.9-1.4 21.8 13.1 .8c-.6 6.5-.5 13.1 .3 19.6l-22.4-1.3c-1.6-.1-3.2-.5-4.7-1.1s-2.8-1.6-3.9-2.8-1.9-2.6-2.5-4.1-.8-3.1-.7-4.7L107 119c1-12.2 13.9-11.3 13.3-11.3l29.1 1.7c-2.8 6.2-5.1 12.6-7 19.2zM290.8 300.8c-2.1 1.6-4.8 2.4-7.5 2.2s-5.1-1.5-6.9-3.5l-9.7-11.5-34.4 27c-1.6 1.3-3.7 1.9-5.8 1.7s-4-1.2-5.3-2.8l-15.8-18.6c-1.2-1.6-1.7-3.5-1.5-5.4s1.3-3.7 2.8-4.9l34.6-27.2-14.1-16.7-17.1 13.5c-1.6 1.2-3.5 1.8-5.5 1.6s-3.8-1.1-5.1-2.6c0 0-3.7-4.4-3.8-4.5-1.2-1.6-1.7-3.5-1.5-5.5s1.3-3.7 2.8-4.9L214 225.2s-18.5-22-18.6-22.1c-.8-1-1.3-2.1-1.7-3.3s-.4-2.5-.3-3.7 .6-2.4 1.2-3.5 1.5-2 2.5-2.8c2.1-1.7 4.8-2.4 7.4-2.2s5.1 1.5 6.9 3.6l81.1 96.3c.8 1 1.3 2.1 1.7 3.3s.4 2.5 .3 3.7-.6 2.5-1.2 3.5-1.5 2.1-2.5 2.8zM187.4 419a18 18 0 1 0 0 36 18 18 0 1 0 0-36z\"]\n};\nvar faLumonDrop = {\n  prefix: 'fab',\n  iconName: 'lumon-drop',\n  icon: [576, 512, [], \"e7e3\", \"M480 32c53 0 96 43 96 96l0 224c0 53-43 96-96 96L96 448c-53 0-96-43-96-96L0 128C0 75 43 32 96 32l384 0zM302.4 114.7c-9.8-16.4-20.5-16.4-29.6 0l-68.9 114c-10.7 15.6-16.4 32.8-16.4 52.5 0 50.9 44.3 94.3 100.1 94.3 55 0 100.9-43.5 100.9-94.3 0-19.7-6.6-37.8-17.2-52.5l-68.9-114z\"]\n};\nvar faForgejo = {\n  prefix: 'fab',\n  iconName: 'forgejo',\n  icon: [320, 512, [], \"e860\", \"M261.5 1.2c34 0 61.6 27.6 61.6 61.6s-27.6 61.6-61.6 61.6c-23 0-43.1-12.7-53.7-31.4l-28.5 0c-24 0-47 9.5-64 26.5s-26.5 40-26.5 64l0 43.5c26-19.5 57.7-30.2 90.6-30.2l28.5 0c10.6-18.7 30.6-31.4 53.7-31.4 34 0 61.6 27.6 61.6 61.6s-27.6 61.6-61.6 61.6c-23 0-43.1-12.7-53.7-31.4l-28.5 0c-24 0-47 9.5-64 26.5s-26.5 40-26.5 64l0 47.8c18.7 10.6 31.4 30.6 31.4 53.6 0 34-27.6 61.6-61.6 61.6S-3 483.2-3 449.2c0-23 12.7-43.1 31.4-53.6l0-212c0-40 15.9-78.4 44.2-106.7s66.7-44.2 106.7-44.2l28.5 0c10.6-18.7 30.6-31.4 53.7-31.4zM58.6 423.9c-14 0-25.3 11.3-25.3 25.3s11.3 25.4 25.3 25.4 25.4-11.4 25.4-25.4-11.4-25.3-25.4-25.3zM261.5 201.7a25.4 25.4 0 1 0 0 50.7 25.4 25.4 0 1 0 0-50.7zm0-164.2a25.4 25.4 0 1 0 0 50.7 25.4 25.4 0 1 0 0-50.7z\"]\n};\nvar faPostgresql = {\n  prefix: 'fab',\n  iconName: 'postgresql',\n  icon: [512, 512, [], \"e858\", \"M219.8 171.3c3.9 .5 13.1 2.7 12.3 8.5-.8 5.9-9.2 9.1-14.2 8.4-4.7-.7-13.2-6.1-12.3-12.1l.3-2.1c4.2 0 8.3-3.5 13.9-2.7zm168.1-3.4c10.8 2.6-1.1 13.5-6.8 14.3-4.3 .6-12.1-2.2-12.8-7.4-1-7.4 15.7-7.9 19.7-6.9zm-22-140.8c35.7-.3 81.3 9.4 114.3 51.7 7.2 9.2 10 24 9.7 40.9-.8 49.6-26 129.4-70.7 197.4 4.5 2.9 17.6 7.4 51.1 .5 5.6-1.2 12.7-2.2 17.6 1.6 18.2 13.9-19.6 35.1-28.4 39.2-13.2 6.2-34.8 9.5-51.2 8.7-2.1-.2-4.3-.2-6.3-.6-5.1-1.1-7.4-1-8.3-.7-1.1 .3-1.4 2.9-1.6 3.8-2.8 24.9-7.7 64.7-10.7 82-2.8 16.3-7.7 29.3-17.2 39.2-9.5 9.9-22.8 15.7-40.6 19.5-22.3 4.8-37.9-.1-48.7-9.1-10.3-8.7-15.2-20.4-18-27.4-1.8-4.5-3-11.5-4-19.8-2.3-19.8-3.3-50.4-3-83.3-24.6 22.1-55 17.2-68.2 13.9-10.5-2.6-33-16.1-17.5-28.7 11.9-9.7 30.3-5.5 42.2-15 2.4-1.9 11.4-10.6 11.4-13.5-10-.3-19.6-2.9-28.1-7.5-13.5 14.5-26.4 29.5-39.3 44.6-8.3 9.9-17.4 15.8-27.4 16.2-9.9 .4-18.7-4.6-26.1-11.8-7.3-7.1-14.1-17.2-20.4-29-19-35.5-33.2-86.1-42.3-126.4-6-26.7-9.6-49.1-10.1-59-2.2-44.3 8-74.1 26-93.2 17.9-19 42.4-26 66.1-27.4 35.6-2 71 8.5 86.6 13.8l5 1.8c15.9-10.8 36.1-17.4 61.7-17 13.2 .2 25.5 2.2 36.7 4.2 18.6-7.1 39.8-9.5 59.4-9.7zm-96 20.5c-24.7-.4-42.9 6.5-56.6 16.8-.8 .6-1.8 1-2.8 1.2-14.4 11.8-23.9 28-30.3 44.8-7.2 19.1-10 38.5-11.1 51.5 7.6-4.3 17.9-8.7 28.7-11.2 10.5-2.4 22.4-3.2 32.7 .8 10.9 4.2 19 13.3 22.2 28.1 7.5 34.7 6.7 58.2 2.7 75.9-4.8 21-16.8 39.5-21.9 60.4 3.5-.9 7.1-.6 9.8 .1l7.2 2.9c7.7 4.4 12.8 13 14 21.7 2 6 .1 14.3 0 20.6 6.7 16.3 7.2 36.1 6.7 53.3-.7 25-1 40.2 3.2 51.7 2.9 7.9 4.7 16.4 10.4 22.8 2.6 3 6.1 5.5 10.9 6.8 18.5 5.1 44-4.7 56.6-18.2 7.7-8.2 12.3-19.3 13.4-33.9 1.1-13.6 4.2-27.6 6.3-41.1l2.9-8.8c1.7-14.8 3.4-29.6 5-44.4-.4-9.1 .9-16.1 3.9-21.5 3.1-5.7 7.6-8.9 11.8-10.8 1.8-.8 3.9-1.2 5.6-2-1.6-2.4-3.6-4.6-5.3-6.8-8.2-10.4-13.3-22.3-19.7-33.8-8.5-15.2-23.8-42.2-30.1-67.5-4.1-16.4-4.9-34.5 6-47 9.8-11.2 26.9-15.5 51.9-13-3.4-10-11.4-27.5-24.8-44.7-18-23-45.7-45.9-85.7-53.1-7.3-.9-15.2-1.5-23.6-1.7zm-32.2 282c-8 .7-15.5 18.2-21.7 23.1-6.2 4.9-14.5 7.6-30 10.7-4.5 .9-7.7 1.9-9.7 2.8 22.3 15.8 58.3 3.2 72.6-16.8 1.7-2.4 2.1-6 .5-10.2-1.7-4.5-6.4-10.1-11.9-9.6zM117.6 49.2c-21.6 1.2-42 7.5-56.4 22.8-14.4 15.2-24.2 40.6-22.1 82.5 .4 8.5 3.8 30 9.8 56.6 8.9 39.8 23.7 90.3 40.6 122.2 6 11.1 17.4 33 32.8 32.3 4.4-.2 10.1-2.8 17-11 12.6-14.8 25.2-29.5 38.5-43.7-17.9-15.4-28.5-40.3-24.8-67.2 3.4-24.3 .5-48.2 1.2-72.5 .4-11.9 2.3-38.7 12.6-65.8 5.9-15.5 14.5-31.3 27.4-44.2-16.4-5.4-47.1-13.5-76.6-11.9zM405.1 328.9c-3.8 1.1-6.7 2.2-8.7 5.8-1.3 2.4-2.5 6.7-2.2 14.2 4.8 3.9 14.1 3.3 19.8 3.2 13.9-.2 29.9-3.1 39.3-7.5 7.9-3.7 14.7-8.3 19-12.2-38.2 7.7-55.4 2.1-63.2-4.8-1.3 .4-2.9 .9-3.9 1.2zM225.3 164.9c-15.4-5.9-35.4 1.8-48.9 9.4-3.6 2-6.5 4-7.9 5.2 .4 8.8 2.8 36.1-1.4 66.3-5.1 36.6 21.7 66.6 52.5 66.7 5.1-20.8 17-39.2 21.8-60.1 3.5-15.3 4.5-36.6-2.7-69.7-2.3-10.5-7.4-15.4-13.4-17.7zM370.1 42.2c-15.2-.2-28.8 1.7-39.2 3.8 26 11.8 45.6 29.7 59.6 47.6 17.4 22.2 26.3 44.1 29 55 .7 2.7 1.3 5.7 .5 8.4 .6 18.9-4 31.3-4.6 49.2-.4 12.9 2.9 28.1 3.7 44.7 .8 15.7-1 32.5-11.2 49.5 .8 1 1.6 2.1 2.4 3.1 26.8-42.2 46-88.6 56.3-128.5 5.5-21.4 8.4-40.7 8.7-56.1 .2-15.2-2-25.4-5.8-30.4-28.3-36.1-66.8-45.8-99.3-46.2zm35.6 119.5c-25.3-3.2-37.3 1.5-42.8 7.7-6 6.8-6.8 18.5-2.9 34.1 5.7 22.6 20.1 48.6 28.7 64 3.6 6.4 6.4 13.1 10 19.4 5.5-11.7 6.6-23.5 6-35.5-.7-15-4.2-30.3-3.7-45.8l.4-7.4c1.2-14.3 4.1-24.6 4.2-36.5z\"]\n};\nvar faWeebly = {\n  prefix: 'fab',\n  iconName: 'weebly',\n  icon: [512, 512, [], \"f5cc\", \"M425.1 65.8c-39.9 0-73.3 25.7-83.7 64.3-18.2-58.1-65.5-64.3-85-64.3-19.8 0-66.8 6.3-85.3 64.3-10.4-38.6-43.4-64.3-83.7-64.3-49 0-87.5 33.9-87.5 77.2 0 29 4.2 33.3 77.2 233.5 22.4 60.6 67.8 69.4 92.7 69.4 39.2 0 70-19.5 85.9-54 15.9 34.8 46.7 54.3 85.9 54.3 25 0 70.4-9.1 92.7-69.7 76.6-208.6 77.5-205.6 77.5-227.2 .6-48.3-36-83.5-86.9-83.5zm26.3 114.8L385.9 357.1c-7.9 21.5-21.2 37.2-46.2 37.2-23.4 0-37.4-12.4-44-33.9l-39.3-117.4-1 0-39.3 117.4c-7 21.5-20.9 33.6-44 33.6-25 0-38.3-15.7-46.2-37.2L60.9 181.6c-5.4-14.8-7.9-23.9-7.9-34.5 0-16.3 15.8-29.4 38.3-29.4 18.7 0 32 11.8 36.1 29.1l44 139.8 1 0 44.7-136.8c6-19.7 16.5-32.1 39-32.1s32.9 12.1 39 32.1l44.7 136.8 1 0 44-139.8c4.1-17.2 17.4-29.1 36.1-29.1 22.2 0 38.3 13.3 38.3 35.7-.3 7.9-4.1 16-7.6 27.2z\"]\n};\nvar faDocker = {\n  prefix: 'fab',\n  iconName: 'docker',\n  icon: [640, 512, [], \"f395\", \"M349.9 236.3l-66.1 0 0-59.4 66.1 0 0 59.4zm0-204.3l-66.1 0 0 60.7 66.1 0 0-60.7zm78.2 144.8l-66.1 0 0 59.4 66.1 0 0-59.4zM271.8 104.7l-66.1 0 0 60.1 66.1 0 0-60.1zm78.1 0l-66.1 0 0 60.1 66.1 0 0-60.1zm276.8 100c-14.4-9.7-47.6-13.2-73.1-8.4-3.3-24-16.7-44.9-41.1-63.7l-14-9.3-9.3 14c-18.4 27.8-23.4 73.6-3.7 103.8-8.7 4.7-25.8 11.1-48.4 10.7l-434.7 0c-8.7 50.8 5.8 116.8 44 162.1 37.1 43.9 92.7 66.2 165.4 66.2 157.4 0 273.9-72.5 328.4-204.2 21.4 .4 67.6 .1 91.3-45.2 1.5-2.5 6.6-13.2 8.5-17.1l-13.3-8.9zM115.6 176.8l-66 0 0 59.4 66.1 0 0-59.4-.1 0zm78.1 0l-66.1 0 0 59.4 66.1 0 0-59.4zm78.1 0l-66.1 0 0 59.4 66.1 0 0-59.4zm-78.1-72.1l-66.1 0 0 60.1 66.1 0 0-60.1z\"]\n};\nvar faMagento = {\n  prefix: 'fab',\n  iconName: 'magento',\n  icon: [448, 512, [], \"f3c4\", \"M445.9 127.9l0 256.1-63.4 36.5 0-255.8-158.5-91.6-158.6 91.6 .4 255.9-63.3-36.6 0-255.9 221.9-128.1 221.5 127.9zM255.8 420.5l-31.6 18.4-31.8-18.2 0-256-63.3 36.6 .1 255.9 94.9 54.9 95.1-54.9 0-256-63.4-36.6 0 255.9z\"]\n};\nvar faLetsEncrypt = {\n  prefix: 'fab',\n  iconName: 'lets-encrypt',\n  icon: [512, 512, [], \"e8b2\", \"M256.6 103.5c28.5 0 55.9 11.3 76.1 31.5s31.5 47.5 31.5 76.1l0 31.8 24.9 0c5.4 0 10.6 2.2 14.5 6s6 9.1 6.1 14.5l0 196.1c0 5.4-2.2 10.7-6 14.5s-9.1 6-14.5 6l-265.1 0c-5.4 0-10.7-2.2-14.5-6s-6-9.1-6.1-14.5l0-196c0-5.4 2.2-10.7 6.1-14.5s9.1-6 14.5-6l24.9 0 0-31.8c0-28.5 11.4-55.9 31.5-76.1s47.6-31.5 76.1-31.5zm0 217c-6 0-11.9 2-16.7 5.7s-8.2 8.9-9.7 14.7-1.1 12 1.2 17.6 6.5 10.2 11.7 13.1l0 26.6c0 3.6 1.4 7 3.9 9.5s5.9 3.9 9.5 3.9 7-1.4 9.5-3.9 3.9-5.9 3.9-9.5l0-26.6c5.2-3 9.4-7.6 11.7-13.1s2.8-11.7 1.3-17.6-4.9-11-9.7-14.7-10.7-5.7-16.7-5.7zm0-155.3c-12.2 0-23.9 4.8-32.5 13.4s-13.4 20.3-13.4 32.5l0 31.8 91.8 0 0-31.8c0-12.2-4.8-23.9-13.4-32.5s-20.3-13.4-32.5-13.4zM97.2 176c4.7 .4 9.2 2.5 12.4 6s5 8.1 5 12.8-1.8 9.3-5 12.8-7.7 5.6-12.4 6l-64 0c-4.7-.4-9.1-2.5-12.4-6s-5-8.1-5-12.8 1.8-9.3 5-12.8 7.6-5.6 12.4-6l64 0zM480 176c4.7 .4 9.2 2.5 12.4 6s5 8.1 5 12.8-1.8 9.3-5 12.8-7.7 5.6-12.4 6l-64.6 0c-2.6 .2-5.2-.1-7.6-1s-4.7-2.2-6.6-4-3.4-3.9-4.4-6.3-1.6-4.9-1.6-7.5 .5-5.2 1.6-7.5 2.5-4.5 4.4-6.3 4.2-3.1 6.6-4 5-1.2 7.6-1l64.6 0zM90.2 34.8c4.7-.6 9.5 .5 13.4 3.3l50.6 41.6c3 2.5 5.2 5.8 6.2 9.5s.9 7.7-.4 11.3-3.7 6.8-6.9 9-6.9 3.4-10.8 3.4l0 .1c-4.4 0-8.6-1.5-12-4.3L79.7 67c-3.4-3.3-5.5-7.7-5.8-12.5s1.2-9.4 4.3-13.1 7.3-6 12-6.7zm332.9-.3c4.8 .6 9.2 3 12.2 6.7s4.6 8.5 4.2 13.3-2.6 9.3-6.2 12.6l-50.6 41.6c-3.4 2.8-7.6 4.3-11.9 4.3-3.9 0-7.7-1.2-10.8-3.4s-5.6-5.4-6.9-9.1-1.4-7.6-.4-11.3 3.2-7.1 6.2-9.5L409.7 38c3.9-2.9 8.7-4.1 13.5-3.6zM256.6-32c4.7 0 9.3 1.8 12.8 5s5.6 7.7 6 12.4l0 64.5c0 5-2 9.7-5.5 13.2s-8.3 5.5-13.3 5.5c-5 0-9.8-2-13.3-5.5s-5.5-8.3-5.5-13.3l0-64.4c.4-4.7 2.5-9.2 6-12.4s8.1-5 12.8-5z\"]\n};\nvar faTorBrowser = {\n  prefix: 'fab',\n  iconName: 'tor-browser',\n  icon: [512, 512, [], \"e838\", \"M256.5 465.4l0-31c98.3-.3 177.9-80 177.9-178.4S354.8 77.9 256.5 77.6l0-31C372 46.8 465.4 140.5 465.4 256S372 465.2 256.5 465.4zm0-108.6c55.4-.3 100.3-45.3 100.3-100.8S312 155.5 256.5 155.2l0-31c72.6 .3 131.4 59.2 131.4 131.8S329.1 387.6 256.5 387.8l0-31zm0-155.1c29.7 .3 53.8 24.5 53.8 54.3s-24 54-53.8 54.3l0-108.6zM0 256a256 256 0 1 0 512 0 256 256 0 1 0 -512 0z\"]\n};\nvar faGitAlt = {\n  prefix: 'fab',\n  iconName: 'git-alt',\n  icon: [448, 512, [], \"f841\", \"M439.6 236.1L244 40.5C238.6 35 231.2 32 223.6 32s-15 3-20.4 8.4l-40.7 40.6 51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3l-46.3-46.3 0 121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56l0-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4L204.1 471.6c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4L439.6 276.9c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4z\"]\n};\nvar faFirefoxBrowser = {\n  prefix: 'fab',\n  iconName: 'firefox-browser',\n  icon: [512, 512, [], \"e007\", \"M130.2 127.5l0 0zm351.4 45.4c-10.6-25.5-32.1-53-48.9-61.7 13.7 26.9 21.7 53.9 24.7 74 0 .1 0 .3 .1 .4-27.6-68.8-74.4-96.5-112.6-156.8-15-23.7-10.9-25.2-13.1-24.7l-.1 .1c-46.7 26-75.3 78.4-82.6 122.7-16.6 .9-32.9 5-47.9 12.1-1.4 .6-2.5 1.7-3.1 3s-.9 2.8-.6 4.3c.2 .8 .6 1.6 1.1 2.3s1.2 1.3 1.9 1.7 1.6 .7 2.4 .8 1.7 0 2.5-.3l.5-.2c15.5-7.3 32.4-11.2 49.5-11.3 62.8-.6 97.2 44 107.6 62.3-13-9.2-36.4-18.2-58.8-14.3 87.7 43.9 64.2 194.5-57.4 189.2-59.5-2.6-97.1-51-100.5-90.8 0 0 11.2-41.9 80.6-41.9 7.5 0 28.9-20.9 29.3-27-.1-2-42.5-18.9-59.1-35.2-8.8-8.7-13.1-12.9-16.8-16.1-2-1.7-4.1-3.3-6.3-4.8-5.6-19.5-5.8-40-.7-59.6-25.1 11.4-44.6 29.4-58.7 45.4l-.1 0c-9.7-12.2-9-52.6-8.4-61.1-.1-.5-7.2 3.7-8.2 4.3-8.6 6.1-16.5 12.9-23.8 20.4-16.3 16.6-44.1 50.2-55.5 101.2-4.5 20.4-6.8 44.4-6.8 52.3 0 134.7 109.2 243.9 243.9 243.9 120.6 0 223-87.2 240.4-202.6 11.6-76.7-14.7-131.1-14.7-132z\"]\n};\nvar faCloudsmith = {\n  prefix: 'fab',\n  iconName: 'cloudsmith',\n  icon: [512, 512, [], \"f384\", \"M512 227.6L512 284.5 284.4 512 227.6 512 0 284.4 0 227.6 227.6 0 284.5 0 512 227.6zm-256 162c17.8 .5 35.6-2.6 52.2-9.1s31.8-16.2 44.6-28.7 23-27.3 29.9-43.8 10.5-34.1 10.5-52-3.6-35.5-10.5-52-17.1-31.3-29.9-43.8-28-22.2-44.6-28.7-34.4-9.6-52.2-9.1c-17.8-.5-35.6 2.6-52.2 9.1s-31.8 16.3-44.6 28.7-23 27.3-29.9 43.8-10.5 34.1-10.5 52 3.6 35.5 10.5 52 17.1 31.3 29.9 43.8 28 22.2 44.6 28.7 34.4 9.6 52.2 9.1z\"]\n};\nvar faWizardsOfTheCoast = {\n  prefix: 'fab',\n  iconName: 'wizards-of-the-coast',\n  icon: [640, 512, [], \"f730\", \"M219.2 345.7c-1.9 1.4-11.1 8.4-.3 23.6 4.6 6.4 14.1 12.8 21.7 6.6 6.5-4.9 7.4-12.9 .3-23-5.5-7.8-14.3-12.9-21.7-7.1zm336.8 75.9c-.3 1.7-.6 1.7 .8 0 2.1-4.2 4.2-10.2 5-19.9 3.1-38.5-40.3-71.5-101.3-78-54.7-6-124.4 9.2-188.8 60.5l-.3 1.6c2.6 5 5 10.7 3.4 21.2l.8 .3c63.9-58.4 131.2-77.2 184.4-73.8 58.4 3.7 100 34 100 68.1 0 10-2.6 15.7-3.9 20.2zM392.3 240.4c.8 7.1 4.2 10.2 9.2 10.5 5.5 .3 9.4-2.6 10.5-6.6 .8-3.4 2.1-29.8 2.1-29.8S402.8 221 399.1 225c-3.7 3.7-7.3 8.4-6.8 15.5zm-50-151.1c-204.5 0-329.2 137.5-341.5 151.9-1 .5-1.3 .8 .8 1.3 60.5 16.5 155.8 81.2 196.1 202.2l1 .3c55.2-69.9 140.9-128.1 237-128.1 80.9 0 130.2 42.2 130.2 80.4 0 18.3-6.6 33.5-22.3 46.3 0 1-.2 .8 .8 .8 14.7-10.7 27.5-28.8 27.5-48.2 0-22.8-12.1-38.2-12.1-38.2 7.1 7.1 10.7 16.2 10.7 16.2 5.8-40.9 27-62.3 27-62.3-2.4-9.7-6.8-17.8-6.8-17.8 7.6 8.1 14.4 27.5 14.4 41.4 0 10.5-3.4 22.8-12.6 31.9l.3 .5c8.1-5 16.5-16.8 16.5-38 0-15.7-4.7-25.9-4.7-25.9 5.8-5.2 11.3-9.2 16-11.8 .8 3.4 2.1 9.7 2.4 14.9 0 1 .8 1.8 1 0 .8-5.8-.3-16.2-.3-16.5 6-3.1 9.7-4.5 9.7-4.5-15.7-110.3-144-196.9-291.2-196.9zM243 378.9c-11.1 9-24.2 4.1-30.6-4.2-7.4-9.6-6.8-24.1 4.2-32.5 14.8-11.4 27.1-.5 31.2 5.5 .3 .4 12.1 16.6-4.7 31.2zm2.1-136.4l9.4-17.8 11.8 71-12.6 6-24.6-28.8 14.1-26.7 3.7 4.4-1.8-8.1zm18.6 117.6l-.3-.3c2-4.1-2.5-6.6-17.5-31.7-1.3-2.4-3.1-2.9-4.4-2.6l-.3-.5c7.9-5.8 15.4-10.2 25.4-15.7l.5 .3c1.3 1.8 2.1 2.9 3.4 4.7l-.3 .5c-1-.3-2.4-.8-5.2 .3-2.1 .8-7.9 3.7-12.3 7.6l0 1.3c1.6 2.4 3.9 6.6 5.8 9.7l.3 0c10-6.3 7.6-4.5 11.5-7.9l.3 0c.5 1.8 .5 1.8 1.8 5.5l-.3 .3c-3.1 .6-4.7 .3-11.5 5.5l0 .3c9.5 17 11 16.8 12.6 16l.3 .3c-2.3 1.6-6.3 4.2-9.7 6.6zM319 327.6c-3.1 1.6-6 2.9-10 5l-.3-.3c1.3-2.6 1.2-2.7-11.8-32.5l-.3-.3c-.2 0-8.9 3.7-10 7.3l-.5 0-1-5.8 .3-.5c7.3-4.6 25.5-11.6 27.8-12.6l.5 .3 3.1 5-.3 .5c-3.5-1.8-7.4 .8-12.3 2.6l0 .3c12.3 32 12.7 30.6 14.7 30.6l0 .2zm44.8-16.5c-4.2 1-5.2 1.3-9.7 2.9l-.3-.3 .5-4.5c-1-3.4-3.1-11.5-3.7-13.6l-.3-.3c-3.4 .8-8.9 2.6-12.8 3.9l-.3 .3c.8 2.6 3.1 9.9 4.2 13.9 .8 2.4 1.8 2.9 2.9 3.1l0 .5c-3.7 1-7.1 2.6-10.2 3.9l-.3-.3c1-1.3 1-2.9 .3-5-1-3.1-8.1-23.8-9.2-27.2-.5-1.8-1.6-3.1-2.6-3.1l0-.5c3.1-1 6-2.1 10.7-3.4l.3 .3-.3 4.7c1.3 3.9 2.4 7.6 3.1 9.7l.3 0c3.9-1.3 9.4-2.9 12.8-3.9l.3-.3-2.6-9.4c-.5-1.8-1-3.4-2.6-3.9l0-.3c4.4-1 7.3-1.8 10.7-2.4l.3 .3c-1 1.3-1 2.9-.5 4.4 1.6 6.3 4.7 20.4 6.3 26.5 .5 2.6 1.8 3.4 2.6 3.9zm32.2-6.8l-.3 .3c-4.7 .5-14.1 2.4-22.5 4.2l-.3-.3 .8-4.2c-1.6-7.9-3.4-18.6-5-26.2-.3-1.8-.8-2.9-2.6-3.7l.8-.5c9.2-1.6 20.2-2.4 24.9-2.6l.3 .3c.5 2.4 .8 3.1 1.6 5.5l-.3 .3c-1.1-1.1-3.3-3.2-16.2-.8l-.3 .3c.3 1.6 1 6.6 1.6 9.9l.3 .3c9.5-1.7 4.8-.1 10.7-2.4l.3 0c0 1.6-.3 1.8-.3 5.2l-.3 0c-4.8-1-2.2-.9-10.2 0l-.3 .3c.3 2.1 1.6 9.4 2.1 12.6l.3 .3c1.2 .4 14.2-.6 16.2-4.7l.3 0c-.5 2.4-1 4.2-1.6 6zm10.7-44.5c-4.5 2.4-8.1 2.9-11 2.9-.2 0-11.4 1.1-17.5-10-6.7-10.8-1-25.2 5.5-31.7 8.8-8.1 23.4-10.1 28.5-17 8-10.3-13-22.3-29.6-5.8l-2.6-2.9 5.2-16.2c25.6-1.6 45.2-3 50 16.2 .8 3.1 0 9.4-.3 12.1 0 2.6-1.8 18.8-2.1 23-.5 4.2-.8 18.3-.8 20.7 .3 2.4 .5 4.2 1.6 5.5 1.6 1.8 5.8 1.8 5.8 1.8l-.8 4.7c-11.8-1.1-10.3-.6-20.4-1-3.2-5.1-2.2-3.3-4.2-7.9 0 0-4.2 3.9-7.3 5.5zM443.9 281c-6.4-10.6-19.8-7.2-21.7 5.5-2.6 17.1 14.3 19.8 20.7 10.2l.3 .3c-.5 1.8-1.8 6-1.8 6.3l-.5 .5c-10.3 6.9-28.5-2.5-25.7-18.6 1.9-10.9 14.4-18.9 28.8-9.9l.3 .5c0 1.1-.3 3.4-.3 5.3zm5.8-87.7l0-6.6c.7 0 19.6 3.3 27.8 7.3l-1.6 17.5s10.2-9.4 15.4-10.7c5.2-1.6 14.9 7.3 14.9 7.3l-11.3 11.3c-12.1-6.4-19.6-.1-20.7 .8-5.3 38.7-8.6 42.2 4.4 46.1l-.5 4.7c-17.6-4.3-18.5-4.5-36.9-7.3l.8-4.7c7.3 0 7.5-5.3 7.6-6.8 0 0 5-53.2 5-55.3 0-2.9-5-3.7-5-3.7zm11 114.4c-8.1-2.1-14.1-11-10.7-20.7 3.1-9.4 12.3-12.3 18.9-10.2 9.2 2.6 12.8 11.8 10.7 19.4-2.6 8.9-9.4 13.9-18.9 11.5zm42.2 9.7c-2.4-.5-7.1-2.4-8.6-2.9l0-.3 1.6-1.8c.6-8.2 .6-7.3 .3-7.6-4.8-1.8-6.7-2.4-7.1-2.4-1.3 1.8-2.9 4.5-3.7 5.5l-.8 3.4 0 .3c-1.3-.3-3.9-1.3-6-1.6l0-.3 2.6-1.8c3.4-4.7 10-14.1 13.9-20.2l0-2.1 .5-.3c2.1 .8 5.5 2.1 7.6 2.9 .5 .5 .2-1.9-1 25.1-.2 1.8 0 2.6 .8 3.9zm-4.7-89.8c11.3-18.3 30.8-16.2 34-3.4l7.6-26.2c2.3-6.2-2.8-9.9-4.5-11.3l1.8-3.7c12.2 10.4 16.4 14 22.5 20.4-25.9 73.1-30.8 80.8-24.6 84.3l-1.8 4.4c-6.4-3.3-8.9-4.4-17.8-8.6l2.1-6.8c-.3-.3-3.9 3.9-9.7 3.7-19.1-1.3-22.9-31.7-9.7-52.9zm29.3 79.3c0-5.7-6.3-7.9-7.9-5.2-1.3 2.1 1 5 2.9 8.4 1.6 2.6 2.6 6.3 1 9.4-2.6 6.3-12.4 5.3-15.4-.8 0-.7-.3 .1 1.8-4.7l.8-.3c-.6 5.7 6.1 9.6 8.4 5 1-2.1-.5-5.5-2.1-8.4-1.6-2.6-3.7-6.3-1.8-9.7 2.7-5.1 11.3-4.5 14.7 2.4l0 .5-2.4 3.4zm21.2 13.4c-2-3.3-.9-2.1-4.5-4.7l-.3 0c-2.4 4.2-5.8 10.5-8.6 16.2-1.3 2.4-1 3.4-.8 3.9l-.3 .3-5.8-4.4 .3-.3 2.1-1.3c3.1-5.8 6.6-12.1 9.2-17l0-.3c-2.6-2-1.2-1.5-6-1.8l0-.3 3.1-3.4 .3 0c3.7 2.4 10 6.8 12.3 8.9l.3 .3-1.3 3.9zM575.8 276l-2.9-2.9c.8-2.4 1.8-5 2.1-7.6 .7-9.7-11.5-11.8-11.5-5 0 5 7.9 19.4 7.9 27.8 0 10.2-5.8 15.7-13.9 16.5-8.4 .8-20.2-10.5-20.2-10.5l5-14.4 2.9 2.1c-3 17.8 17.7 20.4 13.3 5.2-1.1-4-18.7-34.2 2.1-38.2 13.6-2.4 23 16.5 23 16.5L575.8 276zm35.6-10.2c-11-30.4-60.5-127.5-192-129.6-53.4-1-94.3 15.4-132.8 38l85.6-9.2-91.4 20.7 25.1 19.6-3.9-16.5c7.5-1.7 39.1-8.5 66.8-8.9l-22.3 80.4c13.6-.7 19-9 19.6-22.8l5-1 .3 26.7c-22.5 3.2-37.3 6.7-49.5 9.9l13.1-43.2-61.5-36.7 2.4 8.1 10.2 5c6.3 18.6 19.4 56.6 20.4 58.7 2 4.3 3.2 5.8 12 4.5l1.1 5c-16.1 4.9-23.7 7.6-39 14.4l-2.4-4.7c4.4-2.9 8.7-3.9 5.5-12.8-23.7-62.5-21.5-58.1-22.8-59.4l2.4-4.4 33.5 67.3c-3.8-11.9 1.7 1.7-33-78.8l-41.9 88.5 4.7-13.9-35.9-42.2 27.8 93.5-11.8 8.4c-111.9-101.7-105.8-98.4-113.7-98.7-5.5-.3-13.6 5.5-13.6 5.5l-5-6c30.6-23.5 31.6-24.3 58.4-42.7l4.2 7.1s-5.8 4.2-7.9 7.1c-5.9 9.3 1.7 13.3 61.8 75.7l-18.8-58.9 39.8-10.2 25.7 30.6 4.4-12.3-5-24.6 13.1-3.4 .5 3.1 3.7-10.5-94.3 29.3 11.3-5-13.6-42.4 17.3-9.2 30.1 36.1 28.5-13.1c-1.4-7.5-2.5-14.5-4.7-19.6l17.3 13.9 4.7-2.1-59.2-42.7 23.1 11.5c19-6.1 25.2-7.5 32.2-9.7l2.6 11c-12.6 12.6 1.4 16.8 6.5 19.4l-13.6-61 12 28.3c4.2-1.3 7.3-2.1 7.3-2.1l2.6 8.6s-3.1 1-6.3 2.1l8.9 21 33.8-65.7-20.7 61c42.4-24.1 81.4-36.7 132-35.9 67 1 167.3 40.8 199.8 139.8 .8 2.1 0 2.6-.8 .3zm-408-113.4s1.8-.5 4.2-1.3l9.4 7.6c-.4 0-3.4-.3-11.3 2.4l-2.4-8.6zm143.8 38.5c-1.6-.6-26.5-4.8-33.3 20.7l21.7 17 11.5-37.7zM318.4 67.1c-58.4 0-106.1 12-115 14.4l0 .8c8.4 2.1 14.4 4.2 21.2 11.8l1.6 .3c6.6-1.8 49-13.9 110.2-13.9 180.2 0 301.7 116.8 301.7 223.4l0 10c0 1.3 .8 2.6 1.1 .5 .5-2.1 .8-8.6 .8-19.6 .3-83.8-96.6-227.6-321.6-227.6zM529.5 236.8c1.3-5.8 0-12.3-7.3-13.1-9.6-1.1-16.1 23.8-17 33.5-.8 5.5-1.3 14.9 6 14.9 4.7 0 9.7-.9 18.3-35.4zM468 279.7c-2.6-.8-9.4-.8-12.6 10.5-1.8 6.8 .5 13.4 6 14.7 3.7 1.1 8.9 .5 11.8-10.7 2.6-9.9-1.8-13.6-5.2-14.4zm23 21c1.8 .5 3.1 1 5.8 1.8 0-1.8 .5-8.4 .8-12.1-1 1.3-5.5 8.1-6.6 10l0 .3z\"]\n};\nvar faCreativeCommonsNd = {\n  prefix: 'fab',\n  iconName: 'creative-commons-nd',\n  icon: [512, 512, [], \"f4eb\", \"M255.6 8C397.4 8 504 118.1 504 256 504 403.1 385.5 504 255.6 504 121.6 504 8 394.5 8 256 8 123.1 112.7 8 255.6 8zm.8 44.7c-118.2 0-203.7 97.9-203.7 203.3 0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3zm94 144.3l0 42.5-180.3 0 0-42.5 180.3 0zm0 79.8l0 42.5-180.3 0 0-42.5 180.3 0z\"]\n};\nvar faUsps = {\n  prefix: 'fab',\n  iconName: 'usps',\n  icon: [512, 512, [], \"f7e1\", \"M428.3 241.7c25.8-41.3 15.2-48.8-11.7-48.8l-27 0c-.1 0-1.5-1.4-10.9 8-11.2 5.6-37.9 6.3-37.9 8.7 0 4.5 70.3-3.1 88.1 0 9.5 1.5-1.5 20.4-4.4 32-.5 4.5 2.4 2.3 3.8 .1zM316.2 264.3c64-21.3 97.3-23.9 102-26.2 4.4-2.9-4.4-6.6-26.2-5.8-51.7 2.2-137.6 37.1-172.6 53.9l-30.7-93.3 196.6 0c-2.7-28.2-152.9-22.6-337.9-22.6L-5 415.8c196.4-97.3 258.9-130.3 321.2-151.5zM62.7 96c253.3 53.7 330 65.7 332.1 85.2 36.4 0 45.9 0 52.4 6.6 21.1 19.7-14.6 67.7-14.6 67.7-4.4 2.9-406.4 160.2-406.4 160.2L449.3 415.7 517 96 62.7 96z\"]\n};\nvar faSquareLetterboxd = {\n  prefix: 'fab',\n  iconName: 'square-letterboxd',\n  icon: [448, 512, [], \"e62e\", \"M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM105.1 187C66.4 187 35 218.3 35 257s31.4 70 70.1 70c24.8 0 46.5-12.8 59-32.2l.5-.7-.4-.6c-6.5-10.6-10.2-23.1-10.2-36.5 0-13.6 3.9-26.3 10.6-37.1-12.4-19.8-34.4-32.9-59.5-32.9zM224 187c-24.8 0-46.5 12.8-59 32.2l-.5 .7 .4 .6c6.5 10.6 10.2 23.1 10.2 36.5 0 13.6-3.9 26.3-10.6 37.1 12.4 19.7 34.4 32.9 59.5 32.9 24.8 0 46.5-12.8 59-32.2l.5-.7-.4-.6c-6.5-10.6-10.2-23.1-10.2-36.5 0-13.6 3.9-26.3 10.6-37.1-12.4-19.7-34.4-32.9-59.5-32.9zm118.9 0c-24.8 0-46.5 12.8-59 32.2l-.5 .7 .4 .6c6.5 10.6 10.2 23.1 10.2 36.5 0 13.6-3.9 26.3-10.6 37.1 12.4 19.8 34.4 32.9 59.5 32.9 38.7 0 70.1-31.3 70.1-70s-31.4-70-70.1-70z\"]\n};\nvar faMandalorian = {\n  prefix: 'fab',\n  iconName: 'mandalorian',\n  icon: [384, 512, [], \"f50f\", \"M200.6 511.9c-1-3.3-1.7-15.8-1.4-24.6 .6-15.9 1-24.7 1.4-28.8 .6-6.2 2.9-20.7 3.3-21.4 .6-1 .4-27.9-.2-33.1-.3-2.6-.6-11.9-.7-20.7-.1-16.5-.5-20.1-2.7-24.8-1.1-2.3-1.2-3.8-1-11.4 .2-4.2 .1-8.5-.3-12.7-2-13-3.5-27.7-3.2-33.9s.4-7.1 2.1-9.7c3.1-4.7 6.5-14 8.6-23.3 2.3-9.9 3.9-17.2 4.6-20.7 1.1-5.1 2.6-10.1 4.4-15.1 2.3-6.2 2.5-15.4 .4-15.4-.3 0-1.4 1.2-2.4 2.7s-4.8 4.8-8.3 7.4c-8.4 6.1-11.7 9.4-12.7 12.6s-1 7.2-.2 7.8c.3 .2 1.3 2.4 2.1 4.9 1.6 5 1.9 10.3 .7 15.4-.4 1.8-1 5.5-1.5 8.2s-1 6.5-1.3 8.2c-.2 1.5-.7 3-1.5 4.3-1 1-1.1 .9-2.1-.5-.7-1.5-1.2-3.1-1.4-4.7-.2-1.7-1.6-7.1-3.1-11.9-3.3-10.9-3.5-16.2-1-21 .8-1.4 1.4-3 1.7-4.6 0-2.4-2.2-5.3-7.4-9.9-7-6.2-8.6-7.9-10.2-11.3-1.7-3.6-3.1-4.1-4.5-1.5-1.8 3-2.6 9.1-3 22l-.3 12.2 2 2.2c3.2 3.7 12.1 16.5 13.8 19.8 3.4 6.7 4.3 11.7 4.4 23.6s1 22.8 2 24.7c.4 .7 .5 1.4 .3 1.5s.4 2.1 1.3 4.3c1 2.9 1.7 5.9 2.1 9 .4 3.5 .9 7 1.7 10.4 2.2 9.6 2.8 14.1 2.4 20.1-.2 3.3-.5 11.1-.7 17.3-1.3 41.8-1.8 58-2 61.2-.1 2-.4 11.5-.6 21.1-.4 16.3-1.3 27.4-2.4 28.6-.6 .7-8.1-4.9-12.5-9.5-3.8-3.9-4-4.8-2.8-9.9 .7-3 2.3-18.3 3.3-32.6 .4-4.8 .8-10.5 1-12.7 .8-9.4 1.7-20.3 2.6-34.8 .6-8.5 1.3-16.4 1.7-17.7s.9-9.9 1.1-19.1l.4-16.8-2.3-4.3c-1.7-3.3-4.9-6.9-13.2-15.3-6-6.1-11.8-12.3-12.9-13.8l-2-2.8 .8-10.9c1.1-15.7 1.1-48.6 0-59.1l-.9-8.7-3.3-4.5c-5.9-8.1-5.8-7.7-6.2-33.3-.1-6.1-.4-11.5-.6-12.1-.8-1.9-3-2.7-8.5-3-8.9-.6-11-1.9-23.8-14.6-6.2-6-12.3-12-13.8-13.2-2.8-2.4-2.8-2-.6-9.6l1.4-4.6-1.7-3c-.8-1.4-1.6-2.8-2.6-4.1-1.3-1.5-5.5-10.9-6-13.5-.2-.7-.2-1.4-.1-2.1s.5-1.3 .9-1.8c2.2-2.9 3.4-5.7 4.5-10.7 2.3-11.2 7.7-26.1 10.6-29.2 3.2-3.5 7.7-1 9.4 5 1.3 4.8 1.4 9.8 .1 18.6-.5 3.7-.9 7.4-1 11.1 0 4 .2 4.7 2.3 7.4 3.3 4.4 7.7 7.4 15.2 10.5 1.7 .7 3.3 1.7 4.7 2.8 11.2 10.7 18.6 16.2 22.9 16.9 5.2 .8 8 4.5 10 13.4 1.3 5.7 4 11.1 5.5 11.1 1.2-.2 2.3-.7 3.3-1.4 2-1.2 2.2-1.7 2.2-4.2-.3-6-.9-11.9-2-17.8-.4-1.7-.8-4.1-.9-5.4s-.6-3.8-1-5.7c-2.6-11.2-3.6-15.5-4.1-16-1.6-2-4.1-10.2-4.9-15.9-1.6-11.1-4-14.2-12.9-17.4-4.9-1.8-9.4-4.5-13.3-7.9-1.2-1-4-3.2-6.4-5.1s-4.4-3.5-4.6-3.8c-.8-.7-1.7-1.4-2.7-2-6.2-4.2-8.8-7-11.3-12l-2.4-5c-.1-8.7-.3-17.3-.4-26l6.9-6.6c4-3.8 8.5-7.4 10.6-8.4 3.3-1.7 4.4-1.9 11.4-2 8.5-.2 10.1 0 11.7 1.6s1.4 6.4-.3 8.5c-.6 .7-1.1 1.5-1.3 2.3 0 .6-2.6 4.9-5.4 9-1.1 2.2-1.9 4.5-2.4 6.8 20.4 13.4 21.6 3.8 14.1 29l11.4 2.5c3.1-8.7 6.5-17.3 8.6-26.2 .3-7.6-12-4.2-15.4-8.7-2.3-5.9 3.1-14.2 6.1-19.2 1.6-2.3 6.6-4.7 8.8-4.1 .9 .2 4.2-.4 7.4-1.3 2.5-.8 5-1.3 7.5-1.7 2-.2 4.1-.7 6-1.3 3.7-1.1 4.5-1.2 6.3-.4 1.9 .6 3.8 1.1 5.8 1.4 2.1 .3 4.1 .9 6 1.9 1.6 .9 3.3 1.7 5 2.2 2.5 .7 3 .6 7-1.7L226 5.4 236.7 5c10.4-.4 10.8-.5 15.3-2.7L256.5 0 259 1.4c1.8 1 3.1 2.7 4.9 6 2.4 4.5 2.4 4.6 1.4 7.4-.9 2.4-.9 3.3-.1 6.4 .5 2 1.2 4 2.1 5.9 .6 1.3 1.1 2.6 1.3 4 .3 4.3 0 5.3-2.4 6.9-2.2 1.5-7 7.9-7 9.3-.2 1-.6 2-1.1 3-5 11.5-6.8 13.6-14.3 17-9.2 4.2-12.3 5.2-16.2 5.2-3.1 0-4 .2-4.5 1.3-1.2 1.4-2.5 2.7-4.1 3.7-1.8 1.2-3.3 2.9-4.4 4.8-.5 1.2-1.4 2.2-2.5 2.9-.9 .4-1.8 1-2.5 1.7-2.2 1.9-4.6 3.7-7 5.4-3.3 2.3-6.9 5-7.9 6-.7 .7-1.5 1.3-2.4 1.7-.8 .4-1.6 .9-2.1 1.6-1.3 1.4-1.5 2.1-1.1 4.6 .3 2 .8 4 1.4 5.9 1.3 3.8 1.3 7.9 0 10.6s-.9 6.7 1.4 9.6c2 2.6 2.2 4.6 .7 8.8-.8 2.9-1.1 5.9-1.1 8.9 0 4.9 .2 6.3 1.5 8.4s1.8 2.5 3.2 2.3c2-.2 2.3-1.1 4.7-12.1 2.2-10 3.7-11.9 13.8-17.1 2.9-1.5 7.5-4 10-5.4s6.8-3.7 9.4-4.9c5.9-2.6 11.2-6.6 15.2-11.7 7.1-8.8 10-16.2 12.8-33.3 .4-2.8 1.3-5.4 2.9-7.7 1.4-2.2 2.4-4.7 2.9-7.3 1-5.3 2.9-9.1 5.6-11.5 4.7-4.2 6-1.1 4.6 10.9-.5 3.9-1.1 10.3-1.4 14.4l-.6 7.4c3 2.7 5.9 5.5 8.9 8.2l.1 8.4c.1 4.6 .5 9.5 .9 10.9l.8 2.5-6.4 6.3c-8.5 8.3-12.9 13.9-16.8 21.6-1.8 3.5-3.7 7.1-4.4 8-2.2 3.1-6.5 13-8.8 20.3l-2.3 7.2-7 6.5c-3.8 3.6-8 7.2-9.2 8.2-3 2.3-4.3 5.1-4.3 10-.1 2.5 .4 5 1.6 7.3 .8 1.6 1.5 3.2 2.1 4.8 .3 1 .9 2 1.6 2.9 1.4 1.6 1.9 16.1 .8 23.2-.7 4.5-3.6 12-4.7 12-1.8 0-4.1 9.3-5.1 20.7-.2 2-.6 5.9-1 8.7s-1 10-1.4 16c-.8 12.2-.2 18.8 2 23.2 3.4 6.7 .5 12.7-11 22.8l-4 3.5 .1 5.2c.1 3 .4 6 1.1 8.9 4.6 16 4.7 16.9 4.4 37.1-.5 26.4-.3 40.3 .6 44.2 .5 2.3 .9 4.6 1.1 7 .2 2 .7 5.3 1.1 7.4 .5 2.3 .8 11 .8 22.7l0 19.1-1.8 2.6c-2.7 3.9-15.1 13.5-15.5 12.3l.1 0zm29.5-45.1c-.2-.3-.3-6.9-.3-14.6 0-14.1-.9-27.5-2.3-34.4-.4-2-.8-9.7-.9-17.1-.2-11.9-1.4-24.4-2.6-26.4-.7-1.1-3-17.7-3-21.3 0-4.2 1-6 5.3-9.1s4.9-3.1 5.5-.7c.3 1.1 1.4 5.6 2.6 10 3.9 15.1 4.1 16.3 4 21.7-.1 5.8-.1 6.1-1.7 17.7-1 7.1-1.2 12.4-1 28.4 .2 19.4-.6 35.7-2 41.3-.7 2.8-2.8 5.5-3.4 4.4l-.1 0zm-71-37.6c-.8-3.6-1.3-7.2-1.7-10.8s-1-7.2-1.7-10.8c-.5-2.1-.9-4.3-1-6.5-.3-3.2-.9-7.5-1.3-9.5-1-4.8-3.3-19.4-3.4-21.1 0-.7-.3-4-.7-7.4-.7-6.2-.8-27.7-.2-28.3 1-1 6.6 2.8 11.3 7.4l5.3 5.3-.4 6.5c-.2 3.6-.6 10.2-.8 14.8-.5 13.3-.7 8.7-1.6 28.4-.8 17.4-1.9 31.3-2.6 32-.1 .1-.2 .1-.2 .2s-.2 0-.3 0-.2 0-.3-.1-.1-.1-.2-.2l0 0zM72 162.6c21.1 12.8 17.8 14.2 28.5 17.7 13 4.3 18.9 7.1 23.2 16.9-43.7 36.1-69 57.9-76.7 70.9-31 52-6 101.6 62.8 87.2-14.2 29.2-78 28.6-98.7-4.9-24.7-40-22.1-118.3 61-187.7l0 0zm210.8 179c56.7 6.9 82.3-37.7 46.5-89.2 0 0-26.9-29.3-64.3-68 3-15.5 9.5-32.1 30.6-53.8 89.2 63.5 92 141.6 92.5 149.4 4.3 70.6-78.7 91.2-105.3 61.7l0 0z\"]\n};\nvar faSlack = {\n  prefix: 'fab',\n  iconName: 'slack',\n  icon: [448, 512, [62447, \"slack-hash\"], \"f198\", \"M94.1 315.1c0 25.9-21.2 47.1-47.1 47.1S0 341 0 315.1 21.2 268 47.1 268l47.1 0 0 47.1zm23.7 0c0-25.9 21.2-47.1 47.1-47.1S212 289.2 212 315.1l0 117.8c0 25.9-21.2 47.1-47.1 47.1s-47.1-21.2-47.1-47.1l0-117.8zm47.1-189c-25.9 0-47.1-21.2-47.1-47.1S139 32 164.9 32 212 53.2 212 79.1l0 47.1-47.1 0zm0 23.7c25.9 0 47.1 21.2 47.1 47.1S190.8 244 164.9 244L47.1 244C21.2 244 0 222.8 0 196.9s21.2-47.1 47.1-47.1l117.8 0zm189 47.1c0-25.9 21.2-47.1 47.1-47.1S448 171 448 196.9 426.8 244 400.9 244l-47.1 0 0-47.1zm-23.7 0c0 25.9-21.2 47.1-47.1 47.1S236 222.8 236 196.9l0-117.8C236 53.2 257.2 32 283.1 32s47.1 21.2 47.1 47.1l0 117.8zm-47.1 189c25.9 0 47.1 21.2 47.1 47.1S309 480 283.1 480 236 458.8 236 432.9l0-47.1 47.1 0zm0-23.7c-25.9 0-47.1-21.2-47.1-47.1S257.2 268 283.1 268l117.8 0c25.9 0 47.1 21.2 47.1 47.1s-21.2 47.1-47.1 47.1l-117.8 0z\"]\n};\nvar faSlackHash = faSlack;\nvar faAngellist = {\n  prefix: 'fab',\n  iconName: 'angellist',\n  icon: [384, 512, [], \"f209\", \"M315.6 215.4c11.7-32.6 45.4-126.9 45.4-157.1 0-26.6-15.7-48.9-43.7-48.9-44.6 0-84.6 131.7-97.1 163.1-9.7-28.5-55.1-172.5-95.1-172.5-31.1 0-45.7 22.9-45.7 51.7 0 35.3 34.2 126.8 46.6 162-6.3-2.3-13.1-4.3-20-4.3-23.4 0-48.3 29.1-48.3 52.6 0 8.9 4.9 21.4 8 29.7-36.9 10-51.1 34.6-51.1 71.7-.1 72.2 68.3 148.6 164.5 148.6 118 0 191.4-88.6 191.4-202.9 0-43.1-6.9-82-54.9-93.7zM280.2 108c4-12.3 21.1-64.3 37.1-64.3 8.6 0 10.9 8.9 10.9 16 0 19.1-38.6 124.6-47.1 148l-34-6 33.1-93.7zM110.8 48.3c0-11.9 14.5-45.7 46.3 47.1l34.6 100.3c-15.6-1.3-27.7-3-35.4 1.4-10.9-28.8-45.5-119.7-45.5-148.8zM108.5 244c29.3 0 67.1 94.6 67.1 107.4 0 5.1-4.9 11.4-10.6 11.4-20.9 0-76.9-76.9-76.9-97.7 .1-7.7 12.7-21.1 20.4-21.1zM292.8 430.3c-29.1 32-66.3 48.6-109.7 48.6-59.4 0-106.3-32.6-128.9-88.3-17.1-43.4 3.8-68.3 20.6-68.3 11.4 0 54.3 60.3 54.3 73.1 0 4.9-7.7 8.3-11.7 8.3-16.1 0-22.4-15.5-51.1-51.4-29.7 29.7 20.5 86.9 58.3 86.9 26.1 0 43.1-24.2 38-42 3.7 0 8.3 .3 11.7-.6 1.1 27.1 9.1 59.4 41.7 61.7 0-.9 2-7.1 2-7.4 0-17.4-10.6-32.6-10.6-50.3 0-28.3 21.7-55.7 43.7-71.7 8-6 17.7-9.7 27.1-13.1 9.7-3.7 20-8 27.4-15.4-1.1-11.2-5.7-21.1-16.9-21.1-27.7 0-120.6 4-120.6-39.7 0-6.7 .1-13.1 17.4-13.1 32.3 0 114.3 8 138.3 29.1 18.1 16.1 24.3 113.2-31 174.7zm-98.6-126c9.7 3.1 19.7 4 29.7 6-7.4 5.4-14 12-20.3 19.1-2.8-8.5-6.2-16.8-9.4-25.1z\"]\n};\nvar faAndroid = {\n  prefix: 'fab',\n  iconName: 'android',\n  icon: [640, 512, [], \"f17b\", \"M131.2 61.9c5.3-.5 10.6 .6 15.3 3s8.6 6.2 11.3 10.8c17 29.5 34.2 58.9 51.2 88.4 3.5-1.4 7-2.7 10.5-3.9 31.3-10.9 64.2-16.6 97.4-16.9 1 0 2.1 0 3.2 0 38.1 0 76.2 7 111.6 21.1L483 75.7c1.8-3.2 4.3-6 7.2-8.2s6.2-3.9 9.8-4.8c3.1-.8 6.4-1.1 9.6-.8 4.2 .4 8.3 1.7 11.9 3.8 4 2.4 7.3 5.7 9.7 9.7 2 3.4 3.3 7.2 3.8 11.2s.1 8-1.2 11.7c-.6 1.9-1.4 3.7-2.4 5.5l-49.7 85.8c19.5 12.2 37.6 26.5 53.9 42.8 12.3 12.2 23.5 25.4 33.5 39.5 8.2 11.5 15.6 23.6 22.2 36.2 17.5 33.6 28.6 70.5 32.7 108.1l-608 0c4.1-37.7 15.2-74.5 32.7-108.1 14.5-27.9 33.4-53.5 55.7-75.7 16.5-16.4 34.7-30.9 54.5-43.1l-49.5-85.4c-3.7-6.4-4.7-14.1-2.8-21.2 1.9-7.1 6.4-13.1 12.7-16.8 3.6-2.2 7.7-3.5 11.9-3.8zm67.3 215.8c-12.2-8.1-30.1-2.5-40.1 12.5s-8.2 33.8 3.9 41.9 30.1 2.5 40.1-12.5 8.2-33.8-3.9-41.9zm283.6 12.5c-10-15-27.9-20.6-40.1-12.5s-13.9 26.9-3.9 41.9c10 15 27.9 20.6 40.1 12.5s13.9-26.9 3.9-41.9z\"]\n};\nvar faMeetup = {\n  prefix: 'fab',\n  iconName: 'meetup',\n  icon: [576, 512, [], \"f2e0\", \"M131.1 414.3c1.1 5.7-2.3 11.1-8 12.3-5.4 1.1-10.9-2.3-12-8-1.1-5.4 2.3-11.1 7.7-12.3s11.1 2.3 12.3 8zm143.1 71.4c-6.3 4.6-8 13.4-3.7 20 4.6 6.6 13.4 8.3 20 3.7 6.3-4.6 8-13.4 3.4-20-4.2-6.5-13.1-8.3-19.7-3.7zm-86-462.3a11.8 11.8 0 1 0 -4.9-23 11.8 11.8 0 1 0 4.9 23zM66.5 226.3a22.2 22.2 0 1 0 -24.7 36.9 22.2 22.2 0 1 0 24.7-36.9zm272-170.9a22.1 22.1 0 1 0 -22.4-38 22.1 22.1 0 1 0 22.4 38zm-191.1 58a16.9 16.9 0 1 0 -18.8-28 16.9 16.9 0 1 0 18.8 28zm372.3 156c-7.4 1.7-12.3 9.1-10.6 16.9 1.4 7.4 8.9 12.3 16.3 10.6 7.4-1.4 12.3-8.9 10.6-16.6-1.5-7.4-8.9-12.3-16.3-10.9zm39.7-56.8a10.1 10.1 0 1 0 -19.8 4.3 10.1 10.1 0 1 0 19.8-4.3zm-80.3-73.7a18.8 18.8 0 1 0 20.7 31.3 18.8 18.8 0 1 0 -20.7-31.3zm-6.3 139.4c26.3 43.1 15.1 100-26.3 129.1-17.4 12.3-37.1 17.7-56.9 17.1-12 47.1-69.4 64.6-105.1 32.6-1.1 .9-2.6 1.7-3.7 2.9-39.1 27.1-92.3 17.4-119.4-22.3-9.7-14.3-14.6-30.6-15.1-46.9-65.4-10.9-90-94-41.1-139.7-28.3-46.9 .6-107.4 53.4-114.9 25.1-66.2 107.6-97.6 163.6-54.2 67.4-22.3 136.3 29.4 130.9 101.1 41.1 12.6 52.8 66.9 19.7 95.2zm-70 74.3c-3.1-20.6-40.9-4.6-43.1-27.1-3.1-32 43.7-101.1 40-128-3.4-24-19.4-29.1-33.4-29.4-13.4-.3-16.9 2-21.4 4.6-2.9 1.7-6.6 4.9-11.7-.3-6.3-6-11.1-11.7-19.4-12.9-12.3-2-17.7 2-26.6 9.7-3.4 2.9-12 12.9-20 9.1-3.4-1.7-15.4-7.7-24-11.4-16.3-7.1-40 4.6-48.6 20-12.9 22.9-38 113.1-41.7 125.1-8.6 26.6 10.9 48.6 36.9 47.1 11.1-.6 18.3-4.6 25.4-17.4 4-7.4 41.7-107.7 44.6-112.6 2-3.4 8.9-8 14.6-5.1 5.7 3.1 6.9 9.4 6 15.1-1.1 9.7-28 70.9-28.9 77.7-3.4 22.9 26.9 26.6 38.6 4 3.7-7.1 45.7-92.6 49.4-98.3 4.3-6.3 7.4-8.3 11.7-8 3.1 0 8.3 .9 7.1 10.9-1.4 9.4-35.1 72.3-38.9 87.7-4.6 20.6 6.6 41.4 24.9 50.6 11.4 5.7 62.5 15.7 58.5-11.1zm5.7 92.3a23.3 23.3 0 1 0 26.2 38.4 23.3 23.3 0 1 0 -26.2-38.4z\"]\n};\nvar faFonticonsFi = {\n  prefix: 'fab',\n  iconName: 'fonticons-fi',\n  icon: [384, 512, [], \"f3a2\", \"M114.4 224l92.4 0-15.2 51.2-76.4 0 0 157.8c0 8-2.8 9.2 4.4 10l59.6 5.6 0 34.4-179.2 0 0-35.2 29.2-2.8c7.2-.8 9.2-3.2 9.2-10.8l0-155.8c0-3.2-4-3.2-8-3.2l-30.4 0 0-51.2 38.4 0 0-28.8c0-68 36.4-96 106-96 46.8 0 88.8 11.2 88.8 72.4L163.6 180c.4-25.6-6-31.6-22.4-31.6-25.2 0-26 13.6-26 37.6l0 32c0 3.2-4.8 6-.8 6zM384 483l-140.8 0 0-34.4 28-3.6c7.2-.8 10.4-2.4 10.4-10l0-148c0-5.6-4-9.2-9.2-10.8l-33.2-8.8 9.2-40.4 110 0 0 208c0 8-3.6 8.8 4 10l21.6 3.6 0 34.4zM354 135.8l12.4 45.6-10 10-42.8-22.8-42.8 22.8-10-10 12.4-45.6-30-36.4 4.8-10 38 0 21.2-38.4 12.8 0 21.2 38.4 38 0 4.8 13.2-30 33.2z\"]\n};\nvar faPalfed = {\n  prefix: 'fab',\n  iconName: 'palfed',\n  icon: [576, 512, [], \"f3d8\", \"M384.9 193.9c0-47.4-55.2-44.2-95.4-29.8-1.3 39.4-2.5 80.7-3 119.8 .7 2.8 2.6 6.2 15.1 6.2 36.8 0 83.4-42.8 83.3-96.2zM190.4 266.1c.2 0 6.5-2.7 11.2-2.7 26.6 0 20.7 44.1-14.4 44.1-21.5 0-37.1-18.1-37.1-43 0-42 42.9-95.6 100.7-126.5 1-12.4 3-22 10.5-28.2 11.2-9 26.6-3.5 29.5 11.1 72.2-22.2 135.2 1 135.2 72 0 77.9-79.3 152.6-140.1 138.2-.1 39.4 .9 74.4 2.7 100l0 .2c.2 3.4 .6 12.5-5.3 19.1-9.6 10.6-33.4 10-36.4-22.3-4.1-44.4 .2-206.1 1.4-242.5-21.5 15-58.5 50.3-58.5 75.9 .2 2.5 .4 4 .6 4.6zM8 181.1s-.1 37.4 38.4 37.4l30 0 22.4 217.2s0 44.3 44.7 44.3l288.9 0s44.7-.4 44.7-44.3l22.4-217.2 30 0s38.4 1.2 38.4-37.4c0 0 .1-37.4-38.4-37.4l-30.1 0c-7.3-25.6-30.2-74.3-119.4-74.3l-28 0 0-19.1s-2.7-18.4-21.1-18.4l-85.8 0S224 31.9 224 50.3l0 19.1-28.1 0s-105 4.2-120.5 74.3l-29 0S8 142.5 8 181.1z\"]\n};\nvar faWpbeginner = {\n  prefix: 'fab',\n  iconName: 'wpbeginner',\n  icon: [512, 512, [], \"f297\", \"M463.2 322.4c56.2 64.3 4.2 157.6-91.9 157.6-39.6 0-78.8-17.7-100.1-50-6.9 .4-22.7 .4-29.6 0-21.4 32.4-60.6 50-100.1 50-95.5 0-148.3-93-91.9-157.6-79.1-131.9 31.3-290.4 206.8-290.4 175.6 0 285.9 158.6 206.8 290.4zm-339.6-83l41.5 0 0-58.1-41.5 0 0 58.1zm217.2 86.1l0-23.8c-60.5 20.9-132.4 9.2-187.6-34l.2 24.9c51.1 46.4 131.7 57.9 187.3 32.9zM190 239.4l166.1 0 0-58.1-166.1 0 0 58.1z\"]\n};\nvar faDiaspora = {\n  prefix: 'fab',\n  iconName: 'diaspora',\n  icon: [448, 512, [], \"f791\", \"M219.7 354.6c-1.4 0-88 119.9-88.7 119.9S44.4 414 44 413.3 130.6 287.5 130.6 285.8c0-2.2-129.6-44-137.6-47.1-1.3-.5 31.4-101.8 31.7-102.1 .6-.7 144.4 47 145.5 47 .4 0 .9-.6 1-1.3 .4-2 1-148.6 1.7-149.6 .8-1.2 104.5-.7 105.1-.3 1.5 1 3.5 156.1 6.1 156.1 1.4 0 138.7-47 139.3-46.3 .8 .9 31.9 102.2 31.5 102.6-.9 .9-140.2 47.1-140.6 48.8-.3 1.4 82.8 122.1 82.5 122.9s-85.5 63.5-86.3 63.5c-1-.2-89-125.5-90.9-125.5l0 0z\"]\n};\nvar faProductHunt = {\n  prefix: 'fab',\n  iconName: 'product-hunt',\n  icon: [512, 512, [], \"f288\", \"M326.3 218.8c0 20.5-16.7 37.2-37.2 37.2l-70.3 0 0-74.4 70.3 0c20.5 0 37.2 16.7 37.2 37.2zM8 256a248 248 0 1 1 496 0 248 248 0 1 1 -496 0zm367.9-37.2c0-47.9-38.9-86.8-86.8-86.8l-119.9 0 0 248 49.6 0 0-74.4 70.3 0c47.9 0 86.8-38.9 86.8-86.8z\"]\n};\nvar faSquareUpwork = {\n  prefix: 'fab',\n  iconName: 'square-upwork',\n  icon: [448, 512, [], \"e67c\", \"M56 32l336 0c30.9 0 56 25.1 56 56l0 336c0 30.9-25.1 56-56 56L56 480c-30.9 0-56-25.1-56-56L0 88C0 57.1 25.1 32 56 32zM270.9 274.2c6.6-52.9 25.9-69.5 51.4-69.5 25.3 0 44.9 20.2 44.9 49.7s-19.7 49.7-44.9 49.7c-27.9 0-46.3-21.5-51.4-29.9zm-26.7-41.8c-8.2-15.5-14.3-36.3-19.2-55.6l-62.9 0 0 78.1c0 28.4-12.9 49.4-38.2 49.4S84.1 283.4 84.1 255l.3-78.1-36.2 0 0 78.1c0 22.8 7.4 43.5 20.9 58.2 13.9 15.2 32.8 23.2 54.8 23.2 43.7 0 74.2-33.5 74.2-81.5l0-52.5c4.6 17.3 15.4 50.5 36.2 79.7l-19.3 110.5 36.8 0 12.8-78.4c4.2 3.5 8.7 6.6 13.4 9.4 12.3 7.8 26.4 12.2 40.9 12.6l3.4 0c45.1 0 80.9-34.9 80.9-81.9s-35.9-82.2-80.9-82.2c-45.4 0-70.9 29.7-78.1 60.1l0 .2z\"]\n};\nvar faCuttlefish = {\n  prefix: 'fab',\n  iconName: 'cuttlefish',\n  icon: [448, 512, [], \"f38c\", \"M348 305.5c-17.5 31.6-57.4 54.5-96 54.5-56.6 0-104-47.4-104-104s47.4-104 104-104c38.6 0 78.5 22.9 96 54.5 13.7-50.9 41.7-93.3 87-117.8-45.3-49.6-110.5-80.7-183-80.7-137 0-248 111-248 248S115 504 252 504c72.5 0 137.7-31.1 183-80.7-45.3-24.5-73.3-66.9-87-117.8z\"]\n};\nvar faMedapps = {\n  prefix: 'fab',\n  iconName: 'medapps',\n  icon: [320, 512, [], \"f3c6\", \"M118.3 238.4c3.5-12.5 6.9-33.6 13.2-33.6 8.3 1.8 9.6 23.4 18.6 36.6 4.6-23.5 5.3-85.1 14.1-86.7 9-.7 19.7 66.5 22 77.5 9.9 4.1 48.9 6.6 48.9 6.6 1.9 7.3-24 7.6-40 7.8-4.6 14.8-5.4 27.7-11.4 28-4.7 .2-8.2-28.8-17.5-49.6l-9.4 65.5c-4.4 13-15.5-22.5-21.9-39.3-3.3-.1-62.4-1.6-47.6-7.8l31-5zM228 448c21.2 0 21.2-32 0-32L92 416c-21.2 0-21.2 32 0 32l136 0zm-24 64c21.2 0 21.2-32 0-32l-88 0c-21.2 0-21.2 32 0 32l88 0zm34.2-141.5c3.2-18.9 5.2-36.4 11.9-48.8 7.9-14.7 16.1-28.1 24-41 24.6-40.4 45.9-75.2 45.9-125.5 0-85.6-71.8-155.2-160-155.2S0 69.6 0 155.2c0 50.2 21.3 85.1 45.9 125.5 7.9 12.9 16 26.3 24 41 6.7 12.5 8.7 29.8 11.9 48.9 3.5 21 36.1 15.7 32.6-5.1-3.6-21.7-5.6-40.7-15.3-58.6-32.6-60.4-66.1-95.6-66.1-151.7 0-67.9 57-123.2 127-123.2S287 87.3 287 155.2c0 56.1-33.5 91.3-66.1 151.6-9.7 18-11.7 37.4-15.3 58.6-3.4 20.6 29 26.4 32.6 5.1z\"]\n};\nvar faPix = {\n  prefix: 'fab',\n  iconName: 'pix',\n  icon: [512, 512, [], \"e43a\", \"M242.4 292.5c5.4-5.4 14.7-5.4 20.1 0l77 77c14.2 14.2 33.1 22 53.1 22l15.1 0-97.1 97.1c-30.3 29.5-79.5 29.5-109.8 0l-97.5-97.4 9.3 0c20 0 38.9-7.8 53.1-22l76.7-76.7zm20.1-73.6c-6.4 5.5-14.6 5.6-20.1 0l-76.7-76.7c-14.2-15.1-33.1-22-53.1-22l-9.3 0 97.4-97.4c30.4-30.3 79.6-30.3 109.9 0l97.2 97.1-15.2 0c-20 0-38.9 7.8-53.1 22l-77 77zM112.6 142.7c13.8 0 26.5 5.6 37.1 15.4l76.7 76.7c7.2 6.3 16.6 10.8 26.1 10.8 9.4 0 18.8-4.5 26-10.8l77-77c9.8-9.7 23.3-15.3 37.1-15.3l37.7 0 58.3 58.3c30.3 30.3 30.3 79.5 0 109.8l-58.3 58.3-37.7 0c-13.8 0-27.3-5.6-37.1-15.4l-77-77c-13.9-13.9-38.2-13.9-52.1 .1l-76.7 76.6c-10.6 9.8-23.3 15.4-37.1 15.4l-31.8 0-58-58c-30.3-30.3-30.3-79.5 0-109.8l58-58.1 31.8 0z\"]\n};\nvar faSquareTumblr = {\n  prefix: 'fab',\n  iconName: 'square-tumblr',\n  icon: [448, 512, [\"tumblr-square\"], \"f174\", \"M448 96c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320zM256.8 416c-75.5 0-91.9-55.5-91.9-87.9l0-90-29.7 0c-3.4 0-6.2-2.8-6.2-6.2l0-42.5c0-4.5 2.8-8.5 7.1-10 38.8-13.7 50.9-47.5 52.7-73.2 .5-6.9 4.1-10.2 10-10.2l44.3 0c3.4 0 6.2 2.8 6.2 6.2l0 72 51.9 0c3.4 0 6.2 2.8 6.2 6.2l0 51.1c0 3.4-2.8 6.2-6.2 6.2l-52.1 0 0 83.3c0 21.4 14.8 33.5 42.5 22.4 3-1.2 5.6-2 8-1.4 2.2 .5 3.6 2.1 4.6 4.9L318 387.1c1 3.2 2 6.7-.3 9.1-8.5 9.1-31.2 19.8-60.9 19.8z\"]\n};\nvar faTumblrSquare = faSquareTumblr;\nvar faReact = {\n  prefix: 'fab',\n  iconName: 'react',\n  icon: [512, 512, [], \"f41b\", \"M418.2 177.2c-5.4-1.8-10.8-3.5-16.2-5.1 .9-3.7 1.7-7.4 2.5-11.1 12.3-59.6 4.2-107.5-23.1-123.3-26.3-15.1-69.2 .6-112.6 38.4-4.3 3.7-8.5 7.6-12.5 11.5-2.7-2.6-5.5-5.2-8.3-7.7-45.5-40.4-91.1-57.4-118.4-41.5-26.2 15.2-34 60.3-23 116.7 1.1 5.6 2.3 11.1 3.7 16.7-6.4 1.8-12.7 3.8-18.6 5.9-53.4 18.5-91.7 47.7-91.7 77.9 0 31.2 40.8 62.5 96.3 81.5 4.5 1.5 9 3 13.6 4.3-1.5 6-2.8 11.9-4 18-10.5 55.5-2.3 99.5 23.9 114.6 27 15.6 72.4-.4 116.6-39.1 3.5-3.1 7-6.3 10.5-9.7 4.4 4.3 9 8.4 13.6 12.4 42.8 36.8 85.1 51.7 111.2 36.6 27-15.6 35.8-62.9 24.4-120.5-.9-4.4-1.9-8.9-3-13.5 3.2-.9 6.3-1.9 9.4-2.9 57.7-19.1 99.5-50 99.5-81.7 0-30.3-39.4-59.7-93.8-78.4zM282.9 92.3c37.2-32.4 71.9-45.1 87.7-36 16.9 9.7 23.4 48.9 12.8 100.4-.7 3.4-1.4 6.7-2.3 10-22.2-5-44.7-8.6-67.3-10.6-13-18.6-27.2-36.4-42.6-53.1 3.9-3.7 7.7-7.2 11.7-10.7zM167.2 307.5c5.1 8.7 10.3 17.4 15.8 25.9-15.6-1.7-31.1-4.2-46.4-7.5 4.4-14.4 9.9-29.3 16.3-44.5 4.6 8.8 9.3 17.5 14.3 26.1zM136.9 187.2c14.4-3.2 29.7-5.8 45.6-7.8-5.3 8.3-10.5 16.8-15.4 25.4-4.9 8.5-9.7 17.2-14.2 26-6.3-14.9-11.6-29.5-16-43.6zm27.4 68.9c6.6-13.8 13.8-27.3 21.4-40.6s15.8-26.2 24.4-38.9c15-1.1 30.3-1.7 45.9-1.7s31 .6 45.9 1.7c8.5 12.6 16.6 25.5 24.3 38.7s14.9 26.7 21.7 40.4c-6.7 13.8-13.9 27.4-21.6 40.8-7.6 13.3-15.7 26.2-24.2 39-14.9 1.1-30.4 1.6-46.1 1.6s-30.9-.5-45.6-1.4c-8.7-12.7-16.9-25.7-24.6-39s-14.8-26.8-21.5-40.6zm180.6 51.2c5.1-8.8 9.9-17.7 14.6-26.7 6.4 14.5 12 29.2 16.9 44.3-15.5 3.5-31.2 6.2-47 8 5.4-8.4 10.5-17 15.5-25.6zm14.4-76.5c-4.7-8.8-9.5-17.6-14.5-26.2-4.9-8.5-10-16.9-15.3-25.2 16.1 2 31.5 4.7 45.9 8-4.6 14.8-10 29.2-16.1 43.4zM256.2 118.3c10.5 11.4 20.4 23.4 29.6 35.8-19.8-.9-39.7-.9-59.5 0 9.8-12.9 19.9-24.9 29.9-35.8zM140.2 57c16.8-9.8 54.1 4.2 93.4 39 2.5 2.2 5 4.6 7.6 7-15.5 16.7-29.8 34.5-42.9 53.1-22.6 2-45 5.5-67.2 10.4-1.3-5.1-2.4-10.3-3.5-15.5-9.4-48.4-3.2-84.9 12.6-94zM115.7 320.6c-4.2-1.2-8.3-2.5-12.4-3.9-21.3-6.7-45.5-17.3-63-31.2-10.1-7-16.9-17.8-18.8-29.9 0-18.3 31.6-41.7 77.2-57.6 5.7-2 11.5-3.8 17.3-5.5 6.8 21.7 15 43 24.5 63.6-9.6 20.9-17.9 42.5-24.8 64.5zm116.6 98c-16.5 15.1-35.6 27.1-56.4 35.3-11.1 5.3-23.9 5.8-35.3 1.3-15.9-9.2-22.5-44.5-13.5-92 1.1-5.6 2.3-11.2 3.7-16.7 22.4 4.8 45 8.1 67.9 9.8 13.2 18.7 27.7 36.6 43.2 53.4-3.2 3.1-6.4 6.1-9.6 8.9zm24.5-24.3c-10.2-11-20.4-23.2-30.3-36.3 9.6 .4 19.5 .6 29.5 .6 10.3 0 20.4-.2 30.4-.7-9.2 12.7-19.1 24.8-29.6 36.4zm130.7 30c-.9 12.2-6.9 23.6-16.5 31.3-15.9 9.2-49.8-2.8-86.4-34.2-4.2-3.6-8.4-7.5-12.7-11.5 15.3-16.9 29.4-34.8 42.2-53.6 22.9-1.9 45.7-5.4 68.2-10.5 1 4.1 1.9 8.2 2.7 12.2 4.9 21.6 5.7 44.1 2.5 66.3zm18.2-107.5c-2.8 .9-5.6 1.8-8.5 2.6-7-21.8-15.6-43.1-25.5-63.8 9.6-20.4 17.7-41.4 24.5-62.9 5.2 1.5 10.2 3.1 15 4.7 46.6 16 79.3 39.8 79.3 58 0 19.6-34.9 44.9-84.8 61.4zM256 301.8a45.8 45.8 0 1 0 0-91.6 45.8 45.8 0 1 0 0 91.6z\"]\n};\nvar faHuggingFace = {\n  prefix: 'fab',\n  iconName: 'hugging-face',\n  icon: [576, 512, [], \"e869\", \"M286.8 8.2c130 0 235.4 105.8 235.4 236.3 0 17.7-1.9 35-5.6 51.7-1.4 6.5-3.1 12.8-5.1 19.1 6.5-.6 13 .6 18.7 3.5 12.6 6.5 20.2 21.7 18.2 35.7-.7 4.9-2.4 9.4-4.8 13.5 5.2 4.2 9 10.1 10.8 17.1 1.4 5.5 2.9 17.1-4.8 28.9 5.8 9.2 6.6 20.6 2.2 30.6-6.2 14.1-21.7 25.3-51.7 37.3-32.5 13-67.1 21.9-102.3 21.9-32 0-55.9-8.9-71-26.4-13 2.2-26.3 3.4-40 3.4-12.7 0-25.2-1-37.3-2.9-15.1 17.2-38.8 25.9-70.6 25.9-35.1 0-70-9-102.4-21.9-30-12-45.5-23.1-51.7-37.3-4.4-9.9-3.6-21.4 2.2-30.6-7.7-11.9-6.3-23.4-4.8-28.9 1.8-7 5.7-12.9 10.8-17.1-2.5-4.1-4.1-8.6-4.8-13.5-1.5-10.4 2-20.7 9.7-29.2 6.1-6.7 15.1-10.3 24.2-10.2-1.9-6.1-3.6-12.4-5-18.7-3.7-16.7-5.7-34-5.7-51.8 0-130.5 105.4-236.3 235.4-236.3zM117.5 311c-13-8.2-22.1-3.6-19 13.4s57.2 58.2 52 67.2c-5.2 8.8-23.5-10.1-23.8-10.5 0 0-58.2-53.1-70.8-39.3-12.6 13.8 9.6 25.4 41.3 44.7s34.2 24.4 29.7 31.7-74.5-52-81.1-26.8c-6.5 25.1 71.4 32.4 66.7 49.8-4.8 17.4-54.9-32.8-65.2-13.3-10.3 19.6 70.8 42.6 71.4 42.7 26.2 6.8 92.6 21.3 115.9-12.9 16.7-24.6 15.6-43.1-7.4-66.1s-36.3-56.7-36.3-56.7c0-.2-5-19.5-16.3-17.8-11.4 1.8-19.7 31 4.1 48.9 23.8 17.9-4.7 30-13.9 13.3-9.2-16.8-34.2-59.9-47.1-68.2zm360.6 13.4c3.1-17-6.1-21.6-19-13.4-13 8.3-37.9 51.4-47.1 68.2s-37.7 4.6-13.9-13.3 15.4-47.1 4.1-48.9-16.3 17.8-16.3 17.8c-.1 .2-13.4 33.7-36.3 56.7-22.9 23-24.1 41.5-7.4 66.1 23.2 34.2 89.7 19.7 115.9 12.9 1.5-.4 81.6-23.3 71.4-42.7-10.3-19.5-60.4 30.6-65.3 13.3-4.8-17.3 73.2-24.6 66.7-49.8-6.6-25.1-76.6 34.1-81.1 26.8-4.5-7.3-2-12.4 29.7-31.7 31.7-19.3 54-30.9 41.3-44.7-12.7-13.8-70.8 39.3-70.8 39.3-.4 .4-18.6 19.3-23.8 10.5-5.3-8.9 48.9-50.1 52-67.2zM286.8 32.6c-116.6 0-211.1 94.9-211.1 211.9 0 17.1 2 33.8 5.8 49.7 0-.1 .1-.1 .2-.2 6.1-7.4 14.9-11.4 24.7-11.4 17.7 0 31.1 11.9 41.5 24.9 6.8-9.4 17.1-15 27.9-15 20.7 0 33.2 18.1 37.9 34.3 2.3 5.5 13.6 30.5 30.4 47.4 25.7 25.8 32.2 52.4 19.4 80.9 16 1.8 32.8 1.7 49.2-.3-12.5-28.4-6-54.9 19.6-80.6 16.9-16.9 28.1-41.9 30.5-47.4 4.7-16.2 17.2-34.3 37.9-34.3 10.9 0 21.2 5.6 27.9 15 10.4-13 23.8-24.9 41.5-24.9 8.7 0 16.6 3.1 22.5 8.9 5-22 6.4-45.8 4.1-68.7-10.8-106.9-100.7-190.3-210-190.3zm1.5 234.2c43.6 0 79-42 79-14.5 0 27.4-19.2 80.9-78.8 80.9-19.2 0-34.2-5.5-45.8-13.9-23.2-19.4-33.4-48.2-33.4-66.9 0-27.4 35.4 14.5 79 14.5zm-13.3 25c-8.2 2.4-15.5 6.8-21.5 12.6 22 12.8 50.4 12.9 71.7-1.3-5.5-4.9-12-8.7-19.1-11-5.1-1.6-10.4 15.8-16 15.8-5.2 0-10.3-17.6-15.1-16.2zM147.1 215.5a19.8 19.8 0 1 1 0-39.6 19.8 19.8 0 1 1 0 39.6zm282.4 0a19.8 19.8 0 1 1 0-39.6 19.8 19.8 0 1 1 0 39.6zm-244-55.4c7.9-14.9 26.3-20.5 41.1-12.6s20.4 26.4 12.6 41.2c-3.7 7-15.5-4.4-22.4-1.9-7.7 2.7-10.8 18.7-18.6 14.6-14.8-7.9-20.4-26.4-12.6-41.2zm164.4-12.6c14.8-7.9 33.2-2.3 41.1 12.6s2.2 33.3-12.6 41.2c-7.8 4.2-10.9-11.8-18.7-14.6-6.9-2.4-18.7 9-22.4 1.9-7.9-14.9-2.2-33.3 12.6-41.2z\"]\n};\nvar faJxl = {\n  prefix: 'fab',\n  iconName: 'jxl',\n  icon: [448, 512, [], \"e67b\", \"M412.2 32L35.8 32C16 32 0 48 0 67.8L0 444.2C0 464 16 480 35.8 480l376.4 0c19.8 0 35.8-16 35.8-35.8l0-376.4C448 48 432 32 412.2 32zM378.6 333.7c0 40.2-32.6 72.8-72.8 72.8l-235.6 0c0-40.2 32.6-72.8 72.8-72.8l235.6 0zm0-113.9c0 40.2-32.6 72.8-72.8 72.8l-235.6 0c0-40.2 32.6-72.8 72.8-72.8l235.6 0zm0-113.9c0 40.2-32.6 72.8-72.8 72.8l-235.6 0c0-40.2 32.6-72.8 72.8-72.8l235.6 0z\"]\n};\nvar faSquareLinkedin = {\n  prefix: 'fab',\n  iconName: 'square-linkedin',\n  icon: [448, 512, [], \"e7d0\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm5 170.2l66.5 0 0 213.8-66.5 0 0-213.8zm71.7-67.7a38.5 38.5 0 1 1 -77 0 38.5 38.5 0 1 1 77 0zM317.9 416l0-104c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9l0 105.8-66.4 0 0-213.8 63.7 0 0 29.2 .9 0c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9l0 117.2-66.4 0z\"]\n};\nvar faCss = {\n  prefix: 'fab',\n  iconName: 'css',\n  icon: [448, 512, [], \"e6a2\", \"M376.3 32L0 32 0 408.3c0 19 7.6 37.2 21 50.7s31.7 21 50.7 21l304.6 0c19 0 37.2-7.6 50.7-21s21-31.7 21-50.7l0-304.6c0-19-7.6-37.2-21-50.7s-31.7-21-50.7-21zM332.4 431.4c-7.7-8.5-11.7-20.7-12-36.6l31.3 0c.2 14.1 5.1 21.1 14.8 21.1c4.9 0 8.4-1.6 10.5-4.7c2-3.1 3-8 3-14.8c0-5.4-1.3-9.9-4-13.4c-3.5-4.2-8.1-7.5-13.2-9.5L351.2 368c-10.3-4.9-17.8-10.8-22.5-17.6c-4.5-6.8-6.7-16.3-6.7-28.4c0-13.6 4-24.6 11.8-33.1c8.1-8.5 19.1-12.7 33.2-12.7c13.6 0 24.1 4.2 31.5 12.5c7.5 8.4 11.5 20.3 11.8 35.9l-30.1 0c.2-5.1-.9-10.2-3-14.8c-1.7-3.4-5-5.1-10-5.1c-8.8 0-13.2 5.2-13.2 15.7c0 5.3 1.1 9.4 3.2 12.6c3.1 3.5 7 6.2 11.4 7.8l11.1 4.9c11.5 5.3 19.7 11.7 24.8 19.4c5.1 7.7 7.6 18 7.6 31c0 15.5-4 27.4-12.3 35.7c-8.2 8.3-19.5 12.5-34.1 12.5s-25.6-4.2-33.4-12.7zm-101 0c-7.7-8.5-11.7-20.7-12-36.6l31.3 0c.2 14.1 5.1 21.1 14.8 21.1c4.9 0 8.4-1.6 10.4-4.7c2-3.1 3-8 3-14.8c0-5.4-1.3-9.9-3.9-13.4c-3.5-4.2-8.1-7.5-13.2-9.5L250.2 368c-10.3-4.9-17.8-10.8-22.5-17.6c-4.5-6.8-6.7-16.3-6.7-28.4c0-13.6 4-24.6 11.8-33.1c8.1-8.5 19.1-12.7 33.2-12.7c13.6 0 24.1 4.2 31.4 12.5c7.6 8.4 11.5 20.3 11.9 35.9l-30.1 0c.2-5.1-.9-10.2-3-14.8c-1.7-3.4-5-5.1-10-5.1c-8.8 0-13.2 5.2-13.2 15.7c0 5.3 1.1 9.4 3.2 12.6c3.1 3.5 7 6.2 11.4 7.8l11.1 4.9c11.5 5.3 19.7 11.7 24.8 19.4c5.1 7.7 7.6 18 7.6 31c0 15.5-4.1 27.4-12.3 35.7s-19.5 12.5-34.1 12.5s-25.6-4.2-33.4-12.7zm-105.6 1.1c-8.4-7.7-12.5-19.2-12.5-34.5l0-75.4c0-15.2 4.4-26.7 13.2-34.6c8.9-7.8 20.7-11.8 35.2-11.8c14.1 0 25.2 4 33.4 12c8.3 8 12.5 20 12.5 35.9l0 6-33.1 0 0-5.8c0-6.1-1.3-10.7-4-13.6c-1.1-1.5-2.6-2.7-4.3-3.5s-3.5-1.2-5.4-1.1c-5.4 0-9.2 1.8-11.4 5.6c-2.3 5.2-3.3 10.8-3 16.4l0 65.5c0 13.7 4.8 20.6 14.4 20.8c4.5 0 7.9-1.6 10.2-4.8c2.5-4.1 3.7-8.8 3.5-13.6l0-4.9 33.1 0 0 5.1c0 10.6-2.1 19.5-6.2 26.6c-4 6.9-9.9 12.5-17.1 16c-7.7 3.7-16.1 5.5-24.6 5.3c-14.2 0-25.5-3.9-33.8-11.6z\"]\n};\nvar faHashnode = {\n  prefix: 'fab',\n  iconName: 'hashnode',\n  icon: [512, 512, [], \"e499\", \"M35.7 171.1c-46.9 46-46.9 122.9 0 169.8L171.6 476.8c46 46.9 122.9 46.9 169.8 0L477.3 340.9c46.9-46.9 46.9-123.8 0-169.8L341.4 35.2c-46.9-46.9-123.8-46.9-169.8 0L35.7 171.1zM196 196.5a84.5 84.5 0 1 1 120 119 84.5 84.5 0 1 1 -120-119z\"]\n};\nvar faRedditAlien = {\n  prefix: 'fab',\n  iconName: 'reddit-alien',\n  icon: [512, 512, [], \"f281\", \"M373 138.6c-25.2 0-46.3-17.5-51.9-41-30.6 4.3-54.2 30.7-54.2 62.4l0 .2c47.4 1.8 90.6 15.1 124.9 36.3 12.6-9.7 28.4-15.5 45.5-15.5 41.3 0 74.7 33.4 74.7 74.7 0 29.8-17.4 55.5-42.7 67.5-2.4 86.8-97 156.6-213.2 156.6S45.5 410.1 43 323.4c-25.4-11.9-43-37.7-43-67.7 0-41.3 33.4-74.7 74.7-74.7 17.2 0 33 5.8 45.7 15.6 34-21.1 76.8-34.4 123.7-36.4l0-.3c0-44.3 33.7-80.9 76.8-85.5 4.9-24.2 26.3-42.4 52.1-42.4 29.4 0 53.3 23.9 53.3 53.3s-23.9 53.3-53.3 53.3zM157.5 255.3c-20.9 0-38.9 20.8-40.2 47.9s17.1 38.1 38 38.1 36.6-9.8 37.8-36.9-14.7-49.1-35.7-49.1l.1 0zM395 303.1c-1.2-27.1-19.2-47.9-40.2-47.9s-36.9 22-35.7 49.1 16.9 36.9 37.8 36.9 39.3-11 38-38.1l.1 0zm-60.1 70.8c1.5-3.6-1-7.7-4.9-8.1-23-2.3-47.9-3.6-73.8-3.6s-50.8 1.3-73.8 3.6c-3.9 .4-6.4 4.5-4.9 8.1 12.9 30.8 43.3 52.4 78.7 52.4s65.8-21.6 78.7-52.4z\"]\n};\nvar faTiktok = {\n  prefix: 'fab',\n  iconName: 'tiktok',\n  icon: [448, 512, [], \"e07b\", \"M448.5 209.9c-44 .1-87-13.6-122.8-39.2l0 178.7c0 33.1-10.1 65.4-29 92.6s-45.6 48-76.6 59.6-64.8 13.5-96.9 5.3-60.9-25.9-82.7-50.8-35.3-56-39-88.9 2.9-66.1 18.6-95.2 40-52.7 69.6-67.7 62.9-20.5 95.7-16l0 89.9c-15-4.7-31.1-4.6-46 .4s-27.9 14.6-37 27.3-14 28.1-13.9 43.9 5.2 31 14.5 43.7 22.4 22.1 37.4 26.9 31.1 4.8 46-.1 28-14.4 37.2-27.1 14.2-28.1 14.2-43.8l0-349.4 88 0c-.1 7.4 .6 14.9 1.9 22.2 3.1 16.3 9.4 31.9 18.7 45.7s21.3 25.6 35.2 34.6c19.9 13.1 43.2 20.1 67 20.1l0 87.4z\"]\n};\nvar faWordpress = {\n  prefix: 'fab',\n  iconName: 'wordpress',\n  icon: [512, 512, [], \"f19a\", \"M61.7 169.4l101.5 278c-71-34.4-119.9-107.2-119.9-191.4 0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8 .9 0 1.8 .1 2.8 .2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7 .3 13.7 .3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4 46.6-139.6-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zM259.7 274.6L195.9 460.1c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9L259.7 274.6zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9c63.3-36.9 105.8-105.4 105.8-183.9 0-37-9.4-71.8-26-102.1zM8 256a248 248 0 1 1 496 0 248 248 0 1 1 -496 0zm484.6 0a236.6 236.6 0 1 0 -473.2 0 236.6 236.6 0 1 0 473.2 0z\"]\n};\nvar faIdeal = {\n  prefix: 'fab',\n  iconName: 'ideal',\n  icon: [512, 512, [], \"e013\", \"M93.8 165.5a49.1 49.1 0 1 0 0 98.1 49.1 49.1 0 1 0 0-98.1zM54.3 425.8l78.9 0 0-140.5-78.9 0 0 140.5zM205.8 214.2c0-20-10-22.5-18.7-22.5l-14 0 0 45.8 14 0c9.7 0 18.7-2.8 18.7-23.3zm201.7 46l0-91.3 22.8 0 0 68.6 33.7 0C454.6 113.1 356.8 86.2 267.8 86.2l-94.8 0 0 82.8 14 0c25.6 0 41.5 17.4 41.5 45.3 0 28.8-15.5 46-41.5 46l-14 0 0 165.6 94.8 0c144.6 0 194.9-67.2 196.7-165.6l-57.1 0zm-109.8 0l-56.2 0 0-91.2 54.4 0 0 22.7-31.7 0 0 10.6 30 0 0 22.7-30 0 0 12.5 33.5 0 0 22.7zm74.7 0l-5.2-17.7-29.7 0-5.2 17.7-23.7 0 27.5-91.3 32.3 0 27.5 91.3-23.7 0zM267.8 32L.1 32 .1 480 267.8 480c161.8 0 251-79.7 251-224.5 0-83.5-32.6-223.5-251-223.5zm0 426.9l-246.6 0 0-405.9 246.6 0c142.1 0 229.9 64.6 229.9 202.4 0 134.1-81 203.4-229.9 203.4zm83.9-264.9l-7.5 25.8 16.4 0-7.5-25.8-1.4 0z\"]\n};\nvar faPiedPiperPp = {\n  prefix: 'fab',\n  iconName: 'pied-piper-pp',\n  icon: [448, 512, [], \"f1a7\", \"M205.3 174.6c0 21.1-14.2 38.1-31.7 38.1-7.1 0-12.8-1.2-17.2-3.7l0-68c4.4-2.7 10.1-4.2 17.2-4.2 17.5 0 31.7 16.9 31.7 37.8zm52.6 67c-7.1 0-12.8 1.5-17.2 4.2l0 68c4.4 2.5 10.1 3.7 17.2 3.7 17.4 0 31.7-16.9 31.7-37.8 0-21.1-14.3-38.1-31.7-38.1zM448 80l0 352c0 26.5-21.5 48-48 48L48 480c-26.5 0-48-21.5-48-48L0 80C0 53.5 21.5 32 48 32l352 0c26.5 0 48 21.5 48 48zM185 255.1c41 0 74.2-35.6 74.2-79.6S226 95.9 185 95.9c-12 0-24.1 3.2-34.6 8.8l-45.7 0 0 206.3 51.8-10.1 0-50.6c8.6 3.1 18.1 4.8 28.5 4.8zm158.4 25.3c0-44-33.2-79.6-73.9-79.6-3.2 0-6.4 .2-9.6 .7-3.7 12.5-10.1 23.8-19.2 33.4-13.8 15-32.2 23.8-51.8 24.8l0 156.3 51.8-10.1 0-50.6c8.6 3.2 18.2 4.7 28.7 4.7 40.8 0 74-35.6 74-79.6z\"]\n};\nvar faUssunnah = {\n  prefix: 'fab',\n  iconName: 'ussunnah',\n  icon: [512, 512, [], \"f407\", \"M496.9 268.1c0 63.9-25.4 125.2-70.6 170.3S319.9 509 256 509 130.8 483.5 85.7 438.4 15.1 331.9 15.1 268c0-63.9 25.4-125.2 70.6-170.4S192.2 27.1 256.1 27.1 381.3 52.4 426.5 97.6 497 204.1 497 268l-.1 .1zM39.5 268c-.6 28.8 4.5 57.5 15.1 84.3s26.4 51.2 46.6 71.8 44.2 37 70.8 48.1 55.1 16.9 83.9 16.9 57.4-5.8 83.9-16.9 50.6-27.5 70.8-48.1 36-45 46.6-71.8 15.7-55.5 15.1-84.3c.6-28.8-4.5-57.5-15.1-84.3s-26.4-51.2-46.6-71.8-44.2-37-70.8-48.1-55.1-16.9-83.9-16.9-57.4 5.8-83.9 16.9-50.6 27.5-70.8 48.1-36 45-46.6 71.8-15.7 55.5-15.1 84.3zm385.9 63.3c-12.7 0-21.6-1.9-26.7-5.9-5.5-4.3-8.2-12.3-8.2-23.8l0-96.5c0-6.5-5.2-20.2-15.7-41.2 7 0 17-9.1 30-27.2l0 147.8c0 11 2.4 19.4 7 25.3 3.7 4.7 10.1 8.9 19 12.6 1.2 .4 2.6 .9 4.1 1.4 2.9 .9 6.3 2.1 10.3 3.5-1.8 2.7-8.3 4-19.9 4l.1 0zm-219 0c-1.3 2.4-3.6 5.5-6.8 9.4l-18.5 22.5c-1-6.1-4-13-9.3-20.6s-9.7-11.4-13.4-11.4l-89.8 0c3.3-5.3 4.9-8.8 4.9-10.8s-.8-5.3-2.4-9.7c-1.5-4.4-2.4-8.5-2.4-12.4 0-7.4 2.1-13.9 6.3-19.3l20-25.6-7.1-17.7 16.1-19.8 6.7 16.8 8-10.3c-1.8 6.4-2.6 12.3-2.6 17.7 0 4.2 2.8 13.3 8.3 27.3l16.2 40.7 17.7 0c2.8 .4 7.7 5 14.6 13.9 1.8 2.4 4.3 5.8 7.7 10.2 1.4 1.9 2.9 3.9 4.6 6.1 1.3-2.3 2-4.6 2-7.1 0-2-1.3-6.6-4-13.4L178 304.1c-4-10.6-6.1-17.7-6.1-21.3 0-6.3 1.9-12.3 5.8-17.9 .5-.6 1-1.3 1.5-1.9 4.4-5.6 8.8-11.1 13.3-16.5-1.1 4.6-1.7 8.7-1.7 12 0 3.7 1.7 9.9 5.1 18.8l7.9 20.4c1.9 4.7 3 8.2 3.7 10.3l25.9 0-.9-2.6c-1.4-3.9-4-7-7.7-9.3l15.6-20.1 12.3 32 13.4 0-6.1-15.8c-1.5-3.9-4-7-7.7-9.3l15.7-20.1 17.3 45.2 13.4 0-11.4-29.4c-1.5-3.9-4-7-7.7-9.3l15.6-20 22.4 58.7 26.2 0c1.5 0 3-1.1 4.5-3.1s2.2-4.1 2.2-6.3l0-93.5c0-6.5-4.5-20.3-13.7-41.2 5.4 0 14.1-9.1 26.2-27.2l0 163.5c0 7.2 .6 12 1.7 14.6 1.6 3.4 5.3 6.2 11.1 8.2-3.9 5.6-8.7 8.5-14.5 8.5l-154.8 0-.1-.2zm-98-44c-2.7-6.7-4-11.7-4-15-.6 1.2-2.4 3.7-5.4 7.6-1.4 1.9-2.2 3.7-2.2 5.3 0 2.6 .8 5.7 2.2 9.3l5.6 13.9c5 0 9 0 11.9-.1l-8.2-20.9 .1-.1zm13.5-72.4c-3-5.2-7-9.3-11.9-11.9-3.5-1.9-5.3-4.3-5.3-7.4 0-2.4 4.6-8.6 14-18.3 .2 3.8 1.9 7.6 4.9 11.2 3.1 3.6 4.6 7 4.6 10.1 0 2.6-2.1 8-6.2 16.3l-.1 0zm-27.6 0c-3-5.2-7-9.3-11.9-11.9-3.5-1.9-5.3-4.3-5.3-7.4 0-2.4 4.6-8.6 14-18.3 .2 3.8 1.9 7.6 4.9 11.2 3.1 3.6 4.6 7 4.6 10.1 0 2.6-2.1 8-6.2 16.3l-.1 0zm87 27.5c-3-5.2-7-9.3-11.9-11.9-3.5-1.9-5.3-4.3-5.3-7.4 0-2.4 4.6-8.6 14-18.3 .2 3.8 1.9 7.6 4.9 11.2 3.1 3.6 4.6 7 4.6 10.1 0 2.6-2.1 8-6.2 16.3l-.1 0z\"]\n};\nvar faFortAwesomeAlt = {\n  prefix: 'fab',\n  iconName: 'fort-awesome-alt',\n  icon: [512, 512, [], \"f3a3\", \"M208 237.4l-22.2 0c-2.1 0-3.7 1.6-3.7 3.7l0 51.7c0 2.1 1.6 3.7 3.7 3.7l22.2 0c2.1 0 3.7-1.6 3.7-3.7l0-51.7c0-2.1-1.6-3.7-3.7-3.7zm118.2 0l-22.2 0c-2.1 0-3.7 1.6-3.7 3.7l0 51.7c0 2.1 1.6 3.7 3.7 3.7l22.2 0c2.1 0 3.7-1.6 3.7-3.7l0-51.7c-.1-2.1-1.7-3.7-3.7-3.7zm132-125.1c-2.3-3.2-4.6-6.4-7.1-9.5-9.8-12.5-20.8-24-32.8-34.4-4.5-3.9-9.1-7.6-13.9-11.2-1.6-1.2-3.2-2.3-4.8-3.5-27.6-19.6-59.3-33.7-93.6-40.7-16.2-3.3-32.9-5-50-5s-33.9 1.7-50 5c-34.3 7.1-66 21.2-93.3 40.8-1.6 1.1-3.2 2.3-4.8 3.5-4.8 3.6-9.4 7.3-13.9 11.2-3 2.6-5.9 5.3-8.8 8s-5.7 5.5-8.4 8.4c-5.5 5.7-10.7 11.8-15.6 18-2.4 3.1-4.8 6.3-7.1 9.5-28.9 40.6-45.8 90.1-45.8 143.6 0 2 .1 4 .1 6 .1 .7 .1 1.3 .1 2 .1 1.3 .1 2.7 .2 4 0 .8 .1 1.5 .1 2.3 0 1.3 .1 2.5 .2 3.7 .1 .8 .1 1.6 .2 2.4 .1 1.1 .2 2.3 .3 3.5 0 .8 .1 1.6 .2 2.4 .1 1.2 .3 2.4 .4 3.6 .1 .8 .2 1.5 .3 2.3 .1 1.3 .3 2.6 .5 3.9 .1 .6 .2 1.3 .3 1.9l.9 5.7c.1 .6 .2 1.1 .3 1.7 .3 1.3 .5 2.7 .8 4 .2 .8 .3 1.6 .5 2.4 .2 1 .5 2.1 .7 3.2 .2 .9 .4 1.7 .6 2.6 .2 1 .4 2 .7 3 .2 .9 .5 1.8 .7 2.7 .3 1 .5 1.9 .8 2.9 .3 .9 .5 1.8 .8 2.7 .2 .9 .5 1.9 .8 2.8s.5 1.8 .8 2.7c.3 1 .6 1.9 .9 2.8 .6 1.6 1.1 3.3 1.7 4.9 .4 1 .7 1.9 1 2.8 .3 1 .7 2 1.1 3 .3 .8 .6 1.5 .9 2.3l1.2 3c.3 .7 .6 1.5 .9 2.2 .4 1 .9 2 1.3 3l.9 2.1c.5 1 .9 2 1.4 3 .3 .7 .6 1.3 .9 2 .5 1 1 2.1 1.5 3.1 .2 .6 .5 1.1 .8 1.7 .6 1.1 1.1 2.2 1.7 3.3 .1 .2 .2 .3 .3 .5 2.2 4.1 4.4 8.2 6.8 12.2 .2 .4 .5 .8 .7 1.2 .7 1.1 1.3 2.2 2 3.3 .3 .5 .6 .9 .9 1.4 .6 1.1 1.3 2.1 2 3.2 .3 .5 .6 .9 .9 1.4 .7 1.1 1.4 2.1 2.1 3.2 .2 .4 .5 .8 .8 1.2 .7 1.1 1.5 2.2 2.3 3.3 .2 .2 .3 .5 .5 .7 37.5 51.7 94.4 88.5 160 99.4 .9 .1 1.7 .3 2.6 .4 1 .2 2.1 .4 3.1 .5s1.9 .3 2.8 .4c1 .2 2 .3 3 .4 .9 .1 1.9 .2 2.9 .3s1.9 .2 2.9 .3 2.1 .2 3.1 .3c.9 .1 1.8 .1 2.7 .2 1.1 .1 2.3 .1 3.4 .2 .8 0 1.7 .1 2.5 .1 1.3 0 2.6 .1 3.9 .1 .7 .1 1.4 .1 2.1 .1 2 .1 4 .1 6 .1s4-.1 6-.1c.7 0 1.4-.1 2.1-.1 1.3 0 2.6 0 3.9-.1 .8 0 1.7-.1 2.5-.1 1.1-.1 2.3-.1 3.4-.2 .9 0 1.8-.1 2.7-.2 1-.1 2.1-.2 3.1-.3s1.9-.2 2.9-.3c.9-.1 1.9-.2 2.9-.3s2-.3 3-.4 1.9-.3 2.8-.4c1-.2 2.1-.3 3.1-.5 .9-.1 1.7-.3 2.6-.4 65.6-11 122.5-47.7 160.1-102.4 .2-.2 .3-.5 .5-.7 .8-1.1 1.5-2.2 2.3-3.3 .2-.4 .5-.8 .8-1.2 .7-1.1 1.4-2.1 2.1-3.2 .3-.5 .6-.9 .9-1.4 .6-1.1 1.3-2.1 2-3.2 .3-.5 .6-.9 .9-1.4 .7-1.1 1.3-2.2 2-3.3 .2-.4 .5-.8 .7-1.2 2.4-4 4.6-8.1 6.8-12.2 .1-.2 .2-.3 .3-.5 .6-1.1 1.1-2.2 1.7-3.3 .2-.6 .5-1.1 .8-1.7 .5-1 1-2.1 1.5-3.1 .3-.7 .6-1.3 .9-2 .5-1 1-2 1.4-3l.9-2.1c.5-1 .9-2 1.3-3 .3-.7 .6-1.5 .9-2.2l1.2-3c.3-.8 .6-1.5 .9-2.3 .4-1 .7-2 1.1-3s.7-1.9 1-2.8c.6-1.6 1.2-3.3 1.7-4.9 .3-1 .6-1.9 .9-2.8s.5-1.8 .8-2.7c.2-.9 .5-1.9 .8-2.8s.6-1.8 .8-2.7c.3-1 .5-1.9 .8-2.9 .2-.9 .5-1.8 .7-2.7 .2-1 .5-2 .7-3 .2-.9 .4-1.7 .6-2.6 .2-1 .5-2.1 .7-3.2 .2-.8 .3-1.6 .5-2.4 .3-1.3 .6-2.7 .8-4 .1-.6 .2-1.1 .3-1.7l.9-5.7c.1-.6 .2-1.3 .3-1.9 .1-1.3 .3-2.6 .5-3.9 .1-.8 .2-1.5 .3-2.3 .1-1.2 .3-2.4 .4-3.6 0-.8 .1-1.6 .2-2.4 .1-1.1 .2-2.3 .3-3.5 .1-.8 .1-1.6 .2-2.4 .1 1.7 .1 .5 .2-.7 0-.8 .1-1.5 .1-2.3 .1-1.3 .2-2.7 .2-4 .1-.7 .1-1.3 .1-2 .1-2 .1-4 .1-6 0-53.5-16.9-103-45.8-143.7zM448 371.5c-9.4 15.5-20.6 29.9-33.6 42.9-20.6 20.6-44.5 36.7-71.2 48-13.9 5.8-28.2 10.3-42.9 13.2l0-75.8c0-58.6-88.6-58.6-88.6 0l0 75.8c-14.7-2.9-29-7.3-42.9-13.2-26.7-11.3-50.6-27.4-71.2-48-13-13-24.2-27.4-33.6-42.9l0-71.3c0-2.1 1.6-3.7 3.7-3.7l22.1 0c2.1 0 3.7 1.6 3.7 3.7l0 25.8 29.6 0 0-144c0-2.1 1.6-3.7 3.7-3.7l22.1 0c2.1 0 3.7 1.6 3.7 3.7l0 25.9 29.5 0 0-25.9c0-2.1 1.6-3.7 3.7-3.7l22.2 0c2.1 0 3.7 1.6 3.7 3.7l0 25.9 29.5 0 0-25.9c0-4.8 6.5-3.7 9.5-3.7l0-90.2c-4.4-2-7.4-6.7-7.4-11.5 0-16.8 25.4-16.8 25.4 0 0 4.8-3 9.4-7.4 11.5l0 3.9c6.3-1.4 12.7-2.3 19.2-2.3 9.4 0 18.4 3.5 26.3 3.5 7.2 0 15.2-3.5 19.4-3.5 2.1 0 3.7 1.6 3.7 3.7l0 48.4c0 5.6-18.7 6.5-22.4 6.5-8.6 0-16.6-3.5-25.4-3.5-7 0-14.1 1.2-20.8 2.8l0 30.7c3 0 9.5-1.1 9.5 3.7l0 25.9 29.5 0 0-25.9c0-2.1 1.6-3.7 3.7-3.7l22.2 0c2.1 0 3.7 1.6 3.7 3.7l0 25.9 29.5 0 0-25.9c0-2.1 1.6-3.7 3.7-3.7l22.1 0c2.1 0 3.7 1.6 3.7 3.7l0 144 29.5 0 0-25.8c0-2.1 1.6-3.7 3.7-3.7l22.2 0c2.1 0 3.7 1.6 3.7 3.7l0 71.3z\"]\n};\nvar faBuromobelexperte = {\n  prefix: 'fab',\n  iconName: 'buromobelexperte',\n  icon: [448, 512, [], \"f37f\", \"M0 32l0 128 128 0 0-128-128 0zM120 152l-112 0 0-112 112 0 0 112zM160 32l0 128 128 0 0-128-128 0zM280 152l-112 0 0-112 112 0 0 112zM320 32l0 128 128 0 0-128-128 0zM440 152l-112 0 0-112 112 0 0 112zM0 192l0 128 128 0 0-128-128 0zM120 312l-112 0 0-112 112 0 0 112zm40-120l0 128 128 0 0-128-128 0zM280 312l-112 0 0-112 112 0 0 112zm40-120l0 128 128 0 0-128-128 0zM440 312l-112 0 0-112 112 0 0 112zM0 352l0 128 128 0 0-128-128 0zM120 472l-112 0 0-112 112 0 0 112zm40-120l0 128 128 0 0-128-128 0zM280 472l-112 0 0-112 112 0 0 112zm40-120l0 128 128 0 0-128-128 0z\"]\n};\nvar faBilibili = {\n  prefix: 'fab',\n  iconName: 'bilibili',\n  icon: [512, 512, [], \"e3d9\", \"M488.6 104.1c16.7 18.1 24.4 39.7 23.3 65.7l0 202.4c-.4 26.4-9.2 48.1-26.5 65.1-17.2 17-39.1 25.9-65.5 26.7L92 464c-26.4-.8-48.2-9.8-65.3-27.2-17.1-17.4-26-40.3-26.7-68.6L0 169.8c.8-26 9.7-47.6 26.7-65.7 17.1-16.3 38.8-25.3 65.3-26.1l29.4 0-25.4-25.8c-5.7-5.7-8.6-13-8.6-21.8s2.9-16.1 8.6-21.8 13-8.6 21.9-8.6 16.1 2.9 21.9 8.6l73.3 69.4 88 0 74.5-69.4C381.7 2.9 389.2 0 398 0s16.1 2.9 21.9 8.6c5.7 5.7 8.6 13 8.6 21.8s-2.9 16.1-8.6 21.8L394.6 78 423.9 78c26.4 .8 48 9.8 64.7 26.1zm-38.8 69.7c-.4-9.6-3.7-17.4-10.7-23.5-5.2-6.1-14-9.4-22.7-9.8l-320.4 0c-9.6 .4-17.4 3.7-23.6 9.8-6.1 6.1-9.4 13.9-9.8 23.5l0 194.4c0 9.2 3.3 17 9.8 23.5s14.4 9.8 23.6 9.8l320.4 0c9.2 0 17-3.3 23.3-9.8s9.7-14.3 10.1-23.5l0-194.4zM185.5 216.5c6.3 6.3 9.7 14.1 10.1 23.2l0 33.3c-.4 9.2-3.7 16.9-9.8 23.2-6.2 6.3-14 9.5-23.6 9.5s-17.5-3.2-23.6-9.5-9.4-14-9.8-23.2l0-33.3c.4-9.1 3.8-16.9 10.1-23.2s13.2-9.6 23.3-10c9.2 .4 17 3.7 23.3 10zm191.5 0c6.3 6.3 9.7 14.1 10.1 23.2l0 33.3c-.4 9.2-3.7 16.9-9.8 23.2s-14 9.5-23.6 9.5-17.4-3.2-23.6-9.5c-7-6.3-9.4-14-9.7-23.2l0-33.3c.3-9.1 3.7-16.9 10-23.2s14.1-9.6 23.3-10c9.2 .4 17 3.7 23.3 10z\"]\n};\nvar faNeos = {\n  prefix: 'fab',\n  iconName: 'neos',\n  icon: [448, 512, [], \"f612\", \"M383.8 512l-95.1 0-108.2-154.5 0 91.1-86.4 63.4-97.7 0 0-482.2 40.5-29.8 108 0 123.7 176.1 0-112.7 86.4-63.4 97.7 0 0 461.5-68.9 50.5zM7.2 35.3l0 460.7 72-52.9 0-249.1 215.5 307.6 84.8 0 52.4-38.2-78.3 0-316.1-450.5-30.2 22.3zM89.7 501.9l80-58.8 0-101-79.8-114.4 0 220.9-72.6 53.3 72.3 0 0 0zM49 10.8l310.6 442.6 82.4 0 0-442.6-79.8 0 0 317.6-222.9-317.6-90.3 0zM279.4 191.6l72 102.8 0-278.5-72 53 0 122.7z\"]\n};\nvar faDev = {\n  prefix: 'fab',\n  iconName: 'dev',\n  icon: [448, 512, [], \"f6cc\", \"M120.1 208.3c-3.9-2.9-7.8-4.3-11.6-4.3l-17.4 0 0 104.5 17.4 0c3.9 0 7.8-1.4 11.6-4.3s5.8-7.3 5.8-13.1l0-69.7c0-5.8-2-10.2-5.8-13.1zM404.1 32L43.9 32C19.7 32 .1 51.6 0 75.8L0 436.2C.1 460.4 19.7 480 43.9 480l360.2 0c24.2 0 43.8-19.6 43.9-43.8l0-360.4C447.9 51.6 428.3 32 404.1 32zM154.2 291.2c0 18.8-11.6 47.3-48.4 47.3l-46.4 0 0-165.5 47.4 0c35.4 0 47.4 28.5 47.4 47.3l0 70.9zm100.7-88.7l-53.3 0 0 38.4 32.6 0 0 29.6-32.6 0 0 38.4 53.3 0 0 29.6-62.2 0c-11.2 .3-20.4-8.5-20.7-19.7l0-125.1c-.3-11.1 8.6-20.4 19.7-20.7l63.2 0 0 29.5zM358.5 317.8c-13.2 30.7-36.8 24.6-47.4 0l-38.5-144.8 32.6 0 29.7 113.7 29.6-113.7 32.6 0-38.5 144.8z\"]\n};\nvar faMatrix = {\n  prefix: 'fab',\n  iconName: 'matrix',\n  icon: [512, 512, [], \"e8b3\", \"M61.6 27l-32.9 0 0 458 32.9 0 0 11-45.6 0 0-480 45.6 0 0 11zM496 496l-45.6 0 0-11 32.9 0 0-458-32.9 0 0-11 45.6 0 0 480zM324.1 167.6c9 0 17.4 1.1 25.2 3.3s14.3 5.7 19.8 10.6 9.8 11.2 12.9 19c3 7.8 4.6 17.3 4.6 28.3l0 114.5-47 0 0-97c0-5.7-.2-11.2-.6-16.3s-1.7-9.5-3.6-13.2c-2-3.8-4.9-6.8-8.7-9s-9.1-3.3-15.7-3.3c-6.6 0-12 1.3-16.1 3.8-4.1 2.6-7.3 5.8-9.6 10-2.3 4.1-3.9 8.7-4.6 13.9-.7 5.2-1.2 10.4-1.2 15.7l0 95.3-47 0 0-96c0-5.1-.1-10.1-.4-15-.2-5-1.2-9.5-2.9-13.8-1.7-4.1-4.4-7.6-8.3-10.1s-9.5-3.8-17.1-3.8c-2.2 0-5.2 .5-8.8 1.5s-7.2 2.9-10.6 5.6-6.4 6.7-8.8 11.9-3.6 12-3.6 20.4l0 99.3-47 0 0-171.3 44.3 0 0 23.2 .7 0c6.2-8.9 13.7-15.7 22.3-20.5 8.7-4.9 18.7-7.3 30-7.3 10.8 0 20.7 2.1 29.6 6.3s15.7 11.6 20.4 22.2c5.1-7.5 12-14.1 20.7-19.8s19-8.6 30.9-8.6z\"]\n};\nvar faHotjar = {\n  prefix: 'fab',\n  iconName: 'hotjar',\n  icon: [512, 512, [], \"f3b1\", \"M361.8 0c0 131.6-80.7 176.8-140.2 209.4-.6 .3-1.1 .6-1.6 .9-53.8 30.2-88.7 49.8-89.6 122l-98.1 0c0-131.5 80.7-176.7 140.2-209.3 54.8-29.8 90.3-50 90.3-123l99 0zM301.3 302.6c54.8-29.8 90.3-50 90.3-123l98 0c0 131.6-80.7 176.7-140.2 209.4-54.8 29.8-90.3 50-90.3 123l-98 0c0-131.6 80.7-176.8 140.2-209.4z\"]\n};\nvar faDochub = {\n  prefix: 'fab',\n  iconName: 'dochub',\n  icon: [448, 512, [], \"f394\", \"M413.9 160L272 160 272 19.6 413.9 160zM320 192l0 130c0 66.8-36.5 100.1-113.3 100.1l-94.7 0 0-337.3 94.7 0c12 0 23.1 .8 33.1 2.5l0-84C228.9 1.1 217.4 0 205.2 0L16 0 16 512 205.2 512C345.7 512 416 447.4 416 318.1l0-126.1-96 0z\"]\n};\nvar faCodeberg = {\n  prefix: 'fab',\n  iconName: 'codeberg',\n  icon: [512, 512, [], \"e8ad\", \"M0 256c0 48.1 13.5 95.3 39.1 136L252.5 116.1c1.5-2 5.4-2 6.9 0l89.1 115.2-63.8 0 1.4 5.1 66.4 0 18.8 24.3-78.4 0 2.2 8 82.4 0 16.6 21.4-93 0 2.9 10.3 98 0 14.8 19.1-107.5 0 3.5 12.6 113.6 0 13 16.8-122 0 3.9 13.9 128.8 0 12 15.5-136.5 0 3.9 13.9 143.3 0C498.5 351.2 512 304 512 256 512 114.6 397.4 0 256 0S0 114.6 0 256zM333.9 407.5l3.9 13.9 113.6 0c3.7-4.4 7.5-9.2 11-13.9l-128.5 0zm8.2 29.4l3.8 13.9 76 0c5-4.2 10.4-9.1 15.2-13.9l-95 0zm8.2 29.4l3.9 13.8 25.7 0c7.6-4.4 14.6-8.8 22.2-13.8l-51.8 0z\"]\n};\nvar faVimeo = {\n  prefix: 'fab',\n  iconName: 'vimeo',\n  icon: [448, 512, [], \"f40a\", \"M403.2 32L44.8 32C20.1 32 0 52.1 0 76.8L0 435.2C0 459.9 20.1 480 44.8 480l358.4 0c24.7 0 44.8-20.1 44.8-44.8l0-358.4C448 52.1 427.9 32 403.2 32zM377 180.8c-1.4 31.5-23.4 74.7-66 129.4-44 57.2-81.3 85.8-111.7 85.8-18.9 0-34.8-17.4-47.9-52.3-25.5-93.3-36.4-148-57.4-148-2.4 0-10.9 5.1-25.4 15.2L53.4 191.3c37.3-32.8 72.9-69.2 95.2-71.2 25.2-2.4 40.7 14.8 46.5 51.7 20.7 131.2 29.9 151 67.6 91.6 13.5-21.4 20.8-37.7 21.8-48.9 3.5-33.2-25.9-30.9-45.8-22.4 15.9-52.1 46.3-77.4 91.2-76 33.3 .9 49 22.5 47.1 64.7z\"]\n};\nvar faMaxcdn = {\n  prefix: 'fab',\n  iconName: 'maxcdn',\n  icon: [512, 512, [], \"f136\", \"M461.1 442.7l-97.4 0 51.9-242.7c2.3-10.2 .9-19.5-4.4-25.7-5-6.1-13.7-9.6-24.2-9.6l-49.3 0-59.5 278-97.4 0 59.5-278-83.4 0-59.5 278-97.4 0 59.5-278-44.6-95.4 372.1 0c39.4 0 75.3 16.3 98.3 44.9 23.3 28.6 31.8 67.4 23.6 105.9L461.1 442.7z\"]\n};\nvar faSquareFontAwesomeStroke = {\n  prefix: 'fab',\n  iconName: 'square-font-awesome-stroke',\n  icon: [448, 512, [\"font-awesome-alt\"], \"f35c\", \"M64 64C46.3 64 32 78.3 32 96l0 320c0 17.7 14.3 32 32 32l320 0c17.7 0 32-14.3 32-32l0-320c0-17.7-14.3-32-32-32L64 64zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm154 58c0 9.3-4.8 17.4-12.1 22l188.9 0c7.3 0 13.2 5.9 13.2 13.2 0 1.8-.4 3.7-1.1 5.4L312 264 342.9 333.4c.8 1.7 1.1 3.5 1.1 5.4 0 7.3-5.9 13.2-13.2 13.2l-186.8 0 0 32-32 0 0-209.5c-6.1-4.8-10-12.2-10-20.5 0-14.4 11.6-26 26-26s26 11.6 26 26z\"]\n};\nvar faFontAwesomeAlt = faSquareFontAwesomeStroke;\nvar faSpeakap = {\n  prefix: 'fab',\n  iconName: 'speakap',\n  icon: [448, 512, [], \"f3f3\", \"M64.4 391.8C-15 303.6-7.6 167.4 81.1 87.6s224.8-73 304.2 15.2 72 224.4-16.6 304.1c-18.7 16.9 64 43.1 42 52.3-82.1 34.2-253.9 35-346.2-67.5l0 0zM277.7 180.2l38.5-40.9c-9.6-8.9-32-26.8-76.2-27.6-52.3-.9-95.9 28.3-96.8 80-.2 11.3 .3 36.7 29.4 54.8 34.5 21.4 86.5 21.5 86 52.3-.4 21.3-26.4 25.8-38.6 25.6-3 0-30.2-.5-47.6-24.6l-40 42.6c28.2 27 59 32.6 83.5 33 10.2 .2 96.4 .3 97.8-81 .3-15.8-2.1-39.7-28.9-56.6-34.4-21.6-85-19.4-84.4-49.7 .4-23.3 31-25.4 37.5-25.3 .4 0 26.6 .3 39.6 17.4l0 0z\"]\n};\nvar faFantasyFlightGames = {\n  prefix: 'fab',\n  iconName: 'fantasy-flight-games',\n  icon: [512, 512, [], \"f6dc\", \"M256 32.9L32.9 256 256 479.1 479.1 256 256 32.9zM88.3 255.8c2-2 11.9-12.3 96.5-97.5 41.4-41.8 86.2-43.8 119.8-18.7 24.6 18.4 62.1 58.9 62.1 59 .7 .7 1.1 2.9 .6 3.4-11.3 11.8-22.7 23.5-33.5 34.7-34.2-32.3-40.5-38.2-48.5-44-17.8-12.7-41.4-10.1-57 5.1-2.2 2.1-1.8 3.4 .1 5.4 2.9 2.9 28.1 28.3 35.1 35.8-11.9 11.6-23.7 23-35.7 34.7-12-12.5-24.5-25.5-36.5-38.1-21.4 21.1-41.7 41.1-61.8 61L88.3 255.8zM323.2 357.4c-35.5 35.4-78.1 38.1-107 20.5-22.1-13.5-39.4-32.1-72.9-66.8 12-12.4 23.8-24.4 35.4-36.3 33 31.9 37.1 36 44.7 42.1 18.5 14.7 42.5 13.7 59.3-1.8 3.7-3.4 3.7-3.6 .1-7.2-10.6-10.7-21.2-21.4-31.8-32.2-1.3-1.3-3-2.5-.8-4.7 10.8-10.7 21.5-21.5 32.2-32.3 .3-.3 .6-.4 1.9-1.1 12.4 12.9 24.9 25.9 37.2 38.8 21-20.7 41.2-40.7 61.3-60.4 13.7 13.4 27.1 26.6 40.9 40-20.2 20.9-81.7 82.7-100.5 101.5zM256 0L0 256 256 512 512 256 256 0zM16 256L256 16 496 256 256 496 16 256z\"]\n};\nvar faLinux = {\n  prefix: 'fab',\n  iconName: 'linux',\n  icon: [448, 512, [], \"f17c\", \"M220.9 123.3c1 .5 1.8 1.7 3 1.7 1.1 0 2.8-.4 2.9-1.5 .2-1.4-1.9-2.3-3.2-2.9-1.7-.7-3.9-1-5.5-.1-.4 .2-.8 .7-.6 1.1 .3 1.3 2.3 1.1 3.4 1.7zM199 125c1.2 0 2-1.2 3-1.7 1.1-.6 3.1-.4 3.5-1.6 .2-.4-.2-.9-.6-1.1-1.6-.9-3.8-.6-5.5 .1-1.3 .6-3.4 1.5-3.2 2.9 .1 1 1.8 1.5 2.8 1.4zM420 403.8c-3.6-4-5.3-11.6-7.2-19.7-1.8-8.1-3.9-16.8-10.5-22.4-1.3-1.1-2.6-2.1-4-2.9-1.3-.8-2.7-1.5-4.1-2 9.2-27.3 5.6-54.5-3.7-79.1-11.4-30.1-31.3-56.4-46.5-74.4-17.1-21.5-33.7-41.9-33.4-72 .5-45.9 5.1-131.2-75.8-131.3-102.4-.2-76.8 103.4-77.9 135.2-1.7 23.4-6.4 41.8-22.5 64.7-18.9 22.5-45.5 58.8-58.1 96.7-6 17.9-8.8 36.1-6.2 53.3-6.5 5.8-11.4 14.7-16.6 20.2-4.2 4.3-10.3 5.9-17 8.3s-14 6-18.5 14.5c-2.1 3.9-2.8 8.1-2.8 12.4 0 3.9 .6 7.9 1.2 11.8 1.2 8.1 2.5 15.7 .8 20.8-5.2 14.4-5.9 24.4-2.2 31.7 3.8 7.3 11.4 10.5 20.1 12.3 17.3 3.6 40.8 2.7 59.3 12.5 19.8 10.4 39.9 14.1 55.9 10.4 11.6-2.6 21.1-9.6 25.9-20.2 12.5-.1 26.3-5.4 48.3-6.6 14.9-1.2 33.6 5.3 55.1 4.1 .6 2.3 1.4 4.6 2.5 6.7l0 .1c8.3 16.7 23.8 24.3 40.3 23 16.6-1.3 34.1-11 48.3-27.9 13.6-16.4 36-23.2 50.9-32.2 7.4-4.5 13.4-10.1 13.9-18.3 .4-8.2-4.4-17.3-15.5-29.7zM223.8 87.3c9.8-22.2 34.2-21.8 44-.4 6.5 14.2 3.6 30.9-4.3 40.4-1.6-.8-5.9-2.6-12.6-4.9 1.1-1.2 3.1-2.7 3.9-4.6 4.8-11.8-.2-27-9.1-27.3-7.3-.5-13.9 10.8-11.8 23-4.1-2-9.4-3.5-13-4.4-1-6.9-.3-14.6 2.9-21.8zM183.1 75.8c10.1 0 20.8 14.2 19.1 33.5-3.5 1-7.1 2.5-10.2 4.6 1.2-8.9-3.3-20.1-9.6-19.6-8.4 .7-9.8 21.2-1.8 28.1 1 .8 1.9-.2-5.9 5.5-15.6-14.6-10.5-52.1 8.4-52.1zm-13.6 60.7c6.2-4.6 13.6-10 14.1-10.5 4.7-4.4 13.5-14.2 27.9-14.2 7.1 0 15.6 2.3 25.9 8.9 6.3 4.1 11.3 4.4 22.6 9.3 8.4 3.5 13.7 9.7 10.5 18.2-2.6 7.1-11 14.4-22.7 18.1-11.1 3.6-19.8 16-38.2 14.9-3.9-.2-7-1-9.6-2.1-8-3.5-12.2-10.4-20-15-8.6-4.8-13.2-10.4-14.7-15.3-1.4-4.9 0-9 4.2-12.3zm3.3 334c-2.7 35.1-43.9 34.4-75.3 18-29.9-15.8-68.6-6.5-76.5-21.9-2.4-4.7-2.4-12.7 2.6-26.4l0-.2c2.4-7.6 .6-16-.6-23.9-1.2-7.8-1.8-15 .9-20 3.5-6.7 8.5-9.1 14.8-11.3 10.3-3.7 11.8-3.4 19.6-9.9 5.5-5.7 9.5-12.9 14.3-18 5.1-5.5 10-8.1 17.7-6.9 8.1 1.2 15.1 6.8 21.9 16l19.6 35.6c9.5 19.9 43.1 48.4 41 68.9zm-1.4-25.9c-4.1-6.6-9.6-13.6-14.4-19.6 7.1 0 14.2-2.2 16.7-8.9 2.3-6.2 0-14.9-7.4-24.9-13.5-18.2-38.3-32.5-38.3-32.5-13.5-8.4-21.1-18.7-24.6-29.9s-3-23.3-.3-35.2c5.2-22.9 18.6-45.2 27.2-59.2 2.3-1.7 .8 3.2-8.7 20.8-8.5 16.1-24.4 53.3-2.6 82.4 .6-20.7 5.5-41.8 13.8-61.5 12-27.4 37.3-74.9 39.3-112.7 1.1 .8 4.6 3.2 6.2 4.1 4.6 2.7 8.1 6.7 12.6 10.3 12.4 10 28.5 9.2 42.4 1.2 6.2-3.5 11.2-7.5 15.9-9 9.9-3.1 17.8-8.6 22.3-15 7.7 30.4 25.7 74.3 37.2 95.7 6.1 11.4 18.3 35.5 23.6 64.6 3.3-.1 7 .4 10.9 1.4 13.8-35.7-11.7-74.2-23.3-84.9-4.7-4.6-4.9-6.6-2.6-6.5 12.6 11.2 29.2 33.7 35.2 59 2.8 11.6 3.3 23.7 .4 35.7 16.4 6.8 35.9 17.9 30.7 34.8-2.2-.1-3.2 0-4.2 0 3.2-10.1-3.9-17.6-22.8-26.1-19.6-8.6-36-8.6-38.3 12.5-12.1 4.2-18.3 14.7-21.4 27.3-2.8 11.2-3.6 24.7-4.4 39.9-.5 7.7-3.6 18-6.8 29-32.1 22.9-76.7 32.9-114.3 7.2zm257.4-11.5c-.9 16.8-41.2 19.9-63.2 46.5-13.2 15.7-29.4 24.4-43.6 25.5s-26.5-4.8-33.7-19.3c-4.7-11.1-2.4-23.1 1.1-36.3 3.7-14.2 9.2-28.8 9.9-40.6 .8-15.2 1.7-28.5 4.2-38.7 2.6-10.3 6.6-17.2 13.7-21.1 .3-.2 .7-.3 1-.5 .8 13.2 7.3 26.6 18.8 29.5 12.6 3.3 30.7-7.5 38.4-16.3 9-.3 15.7-.9 22.6 5.1 9.9 8.5 7.1 30.3 17.1 41.6 10.6 11.6 14 19.5 13.7 24.6zM173.4 148.7c2 1.9 4.7 4.5 8 7.1 6.6 5.2 15.8 10.6 27.3 10.6 11.6 0 22.5-5.9 31.8-10.8 4.9-2.6 10.9-7 14.8-10.4s5.9-6.3 3.1-6.6-2.6 2.6-6 5.1c-4.4 3.2-9.7 7.4-13.9 9.8-7.4 4.2-19.5 10.2-29.9 10.2s-18.7-4.8-24.9-9.7c-3.1-2.5-5.7-5-7.7-6.9-1.5-1.4-1.9-4.6-4.3-4.9-1.4-.1-1.8 3.7 1.7 6.5z\"]\n};\nvar faCottonBureau = {\n  prefix: 'fab',\n  iconName: 'cotton-bureau',\n  icon: [512, 512, [], \"f89e\", \"M474.3 330.4C450.6 422.3 380.1 475 272.4 478.8l0-49.2c0-48 26.4-74.4 74.4-74.4 62 0 99.2-37.2 99.2-99.2 0-61.4-36.5-98.3-97.4-99.1-33-69.3-146.5-64.7-177.2 0-60.9 .8-97.4 37.7-97.4 99.1 0 62.1 37.3 99.4 99.4 99.4 48 0 74.6 26.2 74.6 74.4l0 49.2c-134.4-5-211.1-85.1-211.1-223 0-141.8 81.4-223.2 223.2-223.2 114.8 0 189.8 53.2 214.7 148.8l25.3 0C473.9 71.5 388.2 8 259.8 8 105 8 12 101.2 12 255.8 12 411.1 105.2 504.3 259.8 504 388.1 504 473.7 440.2 499.5 330.4l-25.2 0zM357 182.3c41.4 3.4 64.2 29 64.2 73.7 0 48-26.4 74.4-74.4 74.4-28.6 0-49.3-9.6-61.6-27.3 83.1-16.5 75.6-99.7 71.8-120.7zm-81.7 97.4c-2.5-10.3-16.3-87 56.2-97 2.3 10.1 16.5 87.1-56.3 97l0 0zM260 132c28.6 0 49 9.7 61.4 27.6-28.4 5.5-49.4 20.6-61.6 43.4-12.2-22.9-33.2-38-61.6-43.4 12.4-17.7 33.3-27.4 61.6-27.4l.2-.3zm-71.5 50.7c73.2 10.6 58.9 86.8 56.5 97-72.4-9.8-59-87-56.2-97l-.2 0zM173.2 330.4c-48 0-74.4-26.4-74.4-74.4 0-44.4 22.9-70 64.2-73.7-6.8 37.2-1.4 106.5 71.6 120.7-12.1 17.6-32.8 27.3-61.1 27.3l-.3 0zm53.2 12.4c14.3-7.6 26-19.3 33.6-33.5 7.8 14.5 19.3 25.5 33.8 33.5-14.4 7.6-26.1 19.4-33.6 33.8-8-14.5-19.1-26.2-33.6-33.8l-.3 0z\"]\n};\nvar faGoogleWallet = {\n  prefix: 'fab',\n  iconName: 'google-wallet',\n  icon: [448, 512, [], \"f1ee\", \"M156.8 126.8c37.6 60.6 64.2 113.1 84.3 162.5-8.3 33.8-18.8 66.5-31.3 98.3-13.2-52.3-26.5-101.3-56-148.5 6.5-36.4 2.3-73.6 3-112.3zM109.3 200l-93.2 0c-6.5 0-10.5 7.5-6.5 12.7 42.2 54.3 71.7 117.8 91.7 187.3l103.5 0c-16.2-69.7-38.7-133.7-82.5-193.5-3-4-8-6.5-13-6.5zm47.8-88c68.5 108 130 234.5 138.2 368L409 480c-12-138-68.4-265-143.2-368l-108.7 0zM408.9 43.5c-1.8-6.8-8.2-11.5-15.2-11.5l-88.3 0c-5.3 0-9 5-7.8 10.3 13.2 46.5 22.3 95.5 26.5 146 48.2 86.2 79.7 178.3 90.6 270.8 15.8-60.5 25.3-133.5 25.3-203 0-73.6-12.1-145.1-31.1-212.6z\"]\n};\nvar faFoursquare = {\n  prefix: 'fab',\n  iconName: 'foursquare',\n  icon: [384, 512, [], \"f180\", \"M331.1 3L57.9 3C20.4 3 8 31.3 8 49.1L8 482.9c0 20.3 12.1 27.7 18.2 30.1 6.2 2.5 22.8 4.6 32.9-7.1 128.9-149.4 131.1-151.9 131.1-151.9 3.1-3.4 3.4-3.1 6.8-3.1l83.4 0c35.1 0 40.6-25.2 44.3-39.7l48.6-243C381.8 25.8 371.1 3 331.1 3zM314.8 76.8l-11.4 59.7c-1.2 6.5-9.5 13.2-16.9 13.2l-106.4 0c-12 0-20.6 8.3-20.6 20.3l0 13c0 12 8.6 20.6 20.6 20.6l90.4 0c8.3 0 16.6 9.2 14.8 18.2-1.8 8.9-10.5 53.8-11.4 58.8-.9 4.9-6.8 13.5-16.9 13.5l-73.5 0c-13.5 0-17.2 1.8-26.5 12.6 0 0-8.9 11.4-89.5 108.3-.9 .9-1.8 .6-1.8-.3l0-338.8c0-7.7 6.8-16.6 16.6-16.6l219 0c8.2 0 15.6 7.7 13.5 17.5z\"]\n};\nvar faShirtsinbulk = {\n  prefix: 'fab',\n  iconName: 'shirtsinbulk',\n  icon: [448, 512, [], \"f214\", \"M100 410.3l30.6 13.4 4.4-9.9-30.6-13.4-4.4 9.9zm39.4 17.5l30.6 13.4 4.4-9.9-30.6-13.4-4.4 9.9zm172.1-14l4.4 9.9 30.6-13.4-4.4-9.9-30.6 13.4zM179.1 445l30.3 13.7 4.4-9.9-30.3-13.4-4.4 9.6zM60.4 392.8l30.6 13.4 4.4-9.6-30.6-13.7-4.4 9.9zm211.4 38.5l4.4 9.9 30.6-13.4-4.4-9.9-30.6 13.4zm-39.3 17.5l4.4 9.9 30.6-13.7-4.4-9.6-30.6 13.4zm118.4-52.2l4.4 9.6 30.6-13.4-4.4-9.9-30.6 13.7zM170 46.6l-33.5 0 0 10.5 33.5 0 0-10.5zm-47.2 0l-33.6 0 0 10.5 33.5 0 .1-10.5zm-47.3 0l-33.2 0 0 10.5 33.3 0-.1-10.5zm141.5 0l-33.2 0 0 10.5 33.2 0 0-10.5zm94.5 0l-33.5 0 0 10.5 33.5 0 0-10.5zm47.3 0l-33.5 0 0 10.5 33.5 0 0-10.5zm-94.6 0l-33.2 0 0 10.5 33.2 0 0-10.5zm141.5 0l-33.3 0 0 10.5 33.3 0 0-10.5zM52.8 351.1l-10.8 0 0 33.5 10.8 0 0-33.5zm70-215.9l-33.6 0 0 10.5 33.5 0 .1-10.5zm-70 10.6l22.8 0 0-10.5-33.6 0 0 33.5 10.8 0 0-23zM221.7 374.4a91.3 91.3 0 1 0 0-182.6 91.3 91.3 0 1 0 0 182.6zM173.5 263.3c0-25.4 29.5-31.8 49.6-31.8 16.9 0 29.2 5.8 44.3 12l-8.8 16.9-.9 0c-6.4-9.9-24.8-13.1-35.6-13.1-9 0-29.8 1.8-29.8 14.9 0 21.6 78.5-10.2 78.5 37.9 0 25.4-31.5 31.2-51 31.2-18.1 0-32.4-2.9-47.2-12.2l9-18.4 .9 0c6.1 12.2 23.6 14.9 35.9 14.9 8.7 0 32.7-1.2 32.7-14.3 0-26.1-77.6 6.3-77.6-38zM52.8 178.4l-10.8 0 0 33.6 10.8 0 0-33.6zM395.2 384.6l10.8 0 0-33.5-10.8 0 0 33.5zM52.8 307.9l-10.8 0 0 33.5 10.8 0 0-33.5zM0 3.7l0 406 221.7 98.6 226.3-98.6 0-406-448 0zM418.8 390.8l-196.8 85.7-192.8-85.7 0-270.1 389.7 0 0 270.1-.1 0zm0-299.3l-389.6 0 0-58.6 389.7 0 0 58.6-.1 0zM52.8 221.6l-10.8 0 0 33.5 10.8 0 0-33.5zm0 43.2l-10.8 0 0 33.5 10.8 0 0-33.5zM170 135.2l-33.5 0 0 10.5 33.5 0 0-10.5zM395.2 298.3l10.8 0 0-33.5-10.8 0 0 33.5zm0-43.2l10.8 0 0-33.5-10.8 0 0 33.5zM217 135.2l-33.2 0 0 10.5 33.2 0 0-10.5zM395.2 212l10.8 0 0-33.5-10.8 0 0 33.5zm0 129.5l10.8 0 0-33.5-10.8 0 0 33.5zm-131-206.3l-33.2 0 0 10.5 33.2 0 0-10.5zm47.3 0l-33.5 0 0 10.5 33.5 0 0-10.5zm83.7 33.6l10.8 0 0-33.5-33.5 0 0 10.5 22.8 0-.1 23zm-36.4-33.6l-33.5 0 0 10.5 33.5 0 0-10.5z\"]\n};\nvar faMintbit = {\n  prefix: 'fab',\n  iconName: 'mintbit',\n  icon: [512, 512, [], \"e62f\", \"M73.2 512l0-73.1 292.5 0 0-73.2 73.2 0 0-146.3 73.1 0 0-219.4-219.4 0 0 73.1-146.3 0 0 73.2-73.1 0 0 292.6-73.2 0 0 73.1 73.2 0zm73.1-219.4l73.2 0 0 73.1-73.2 0 0-73.1zm73.2-73.1l73.1 0 0 73.1-73.2 0 0-73.2 .1 .1zm73.1 0l0-73.2 73.2 0 0 73.1-73.2 0 0 .1zM365.7 73.1l73.2 0 0 73.2-73.2 0 0-73.2z\"]\n};\nvar faZulip = {\n  prefix: 'fab',\n  iconName: 'zulip',\n  icon: [448, 512, [], \"e853\", \"M424 99c0 22.6-10.1 42.6-25.5 54.8L249.3 287.7c-2.8 2.4-6.4-1.5-4.4-4.7l54.7-110.1c1.5-3.1-.5-6.9-3.6-6.9L83.8 166C50.9 166 24 135.9 24 99 24 62.1 50.9 32 83.8 32l280.4 0C397.1 32 424 62.1 424 99zM83.8 480l280.4 0c32.9 0 59.8-30.2 59.8-67s-26.9-67-59.8-67l-212.3 0c-3.1 0-5.1-3.8-3.6-6.9L203.1 229c2-3.2-1.6-7.1-4.4-4.7L49.5 358.2C34.1 370.4 24 390.4 24 413 24 449.8 50.9 480 83.8 480z\"]\n};\nvar faStaylinked = {\n  prefix: 'fab',\n  iconName: 'staylinked',\n  icon: [448, 512, [], \"f3f5\", \"M386.7 292.5l2.7 2.7-170-167.3c-3.5-3.5-9.7-3.7-13.8-.5L148.3 171c-4.2 3.2-4.6 8.7-1.1 12.2l68.1 64.3c3.6 3.5 9.9 3.7 14 .5l.1-.1c4.1-3.2 10.4-3 14 .5l84 81.3c3.6 3.5 3.2 9-.9 12.2l-93.2 74c-4.2 3.3-10.5 3.1-14.2-.4L67.2 268c-3.5-3.5-9.7-3.7-13.9-.5L7.5 302.4c-4.2 3.2-4.7 8.7-1.2 12.2L215 510.7s7.4 6.8 17.3-.8L430.3 346c4-3.2 4.4-8.7 .7-12.2l-44.3-41.3zm54.5-83.4L230.7 2.5c-1.5-1.2-8-5.5-16.3 1.1L7.6 165.7c-4.2 3.2-4.8 8.7-1.2 12.2l42.3 41.7 171.7 165.1c3.7 3.5 10.1 3.7 14.3 .4l50.2-38.8-.3-.3 7.7-6c4.2-3.2 4.6-8.7 .9-12.2l-57.1-54.4c-3.6-3.5-10-3.7-14.2-.5l-.1 .1c-4.2 3.2-10.5 3.1-14.2-.4L113 180.8c-3.6-3.5-3.1-8.9 1.1-12.2l92.2-71.5c4.1-3.2 10.3-3 13.9 .5l160.4 159c3.7 3.5 10 3.7 14.1 .5l45.8-35.8c4.1-3.2 4.4-8.7 .7-12.2z\"]\n};\nvar faWebflow = {\n  prefix: 'fab',\n  iconName: 'webflow',\n  icon: [640, 512, [], \"e65c\", \"M640 64l-204.2 399.2-191.8 0 85.5-165.5-3.8 0C255.1 389.3 149.9 449.5 0 463.2L0 300.1s95.9-5.7 152.3-64.9l-152.3 0 0-171.2 171.1 0 0 140.8 3.8 0 70-140.8 129.4 0 0 139.9 3.8 0 72.6-139.9 189.3 0z\"]\n};\nvar faRenren = {\n  prefix: 'fab',\n  iconName: 'renren',\n  icon: [512, 512, [], \"f18b\", \"M214 169.1C214 279.5 153 374.5 66.4 416.5 30 373.2 8 317.7 8 256.6 8 133.9 97.1 32.2 214 12.5l0 156.6zM255 504c-42.9 0-83.3-11-118.5-30.4 57.2-36.1 103.4-90.7 118.5-154.6 15.5 63.9 61.7 118.5 118.8 154.7-35.1 19.3-75.5 30.3-118.8 30.3zm190.6-87.5C359 374.5 298 279.6 298 169.1l0-156.6c116.9 19.7 206 121.4 206 244.1 0 61.1-22 116.6-58.4 159.9z\"]\n};\nvar faKoFi = {\n  prefix: 'fab',\n  iconName: 'ko-fi',\n  icon: [512, 512, [], \"e856\", \"M249.8 75c89.8 0 113 1.1 146.3 4.4 78.1 7.8 123.6 56 123.6 125.2l0 8.9c0 64.3-47.1 116.9-110.8 122.4-5 16.6-12.8 33.2-23.3 49.9-24.4 37.7-73.1 85.3-162.9 85.3l-17.7 0c-73.1 0-129.7-31.6-163.5-89.2-29.9-50.4-33.8-106.4-33.8-181.2 0-73.7 44.4-113.6 96.4-120.2 39.3-5 88.1-5.5 145.7-5.5zm0 41.6c-60.4 0-103.6 .5-136.3 5.5-46 6.7-64.3 32.7-64.3 79.2l.2 25.7c1.2 57.3 7.1 97.1 27.5 134.5 26.6 49.3 74.8 68.2 129.7 68.2l17.2 0c72 0 107-34.9 126.3-65.4 9.4-15.5 17.7-32.7 22.2-54.3l3.3-13.8 19.9 0c44.3 0 82.6-36 82.6-82l0-8.3c0-51.5-32.2-78.7-88.1-85.3-31.6-2.8-50.4-3.9-140.2-3.9zM267 169.2c38.2 0 64.8 31.6 64.8 67 0 32.7-18.3 61-42.1 83.1-15 15-39.3 30.5-55.9 40.5-4.4 2.8-10 4.4-16.7 4.4-5.5 0-10.5-1.7-15.5-4.4-16.6-10-41-25.5-56.5-40.5-21.8-20.8-39.2-46.9-41.3-77l-.2-6.1c0-35.5 25.5-67 64.3-67 22.7 0 38.8 11.6 49.3 27.7 11.6-16.1 27.2-27.7 49.9-27.7zm122.5-3.9c28.3 0 43.8 16.6 43.8 43.2s-15.5 42.7-43.8 42.7c-8.9 0-13.8-5-13.8-11.7l0-62.6c0-6.7 5-11.6 13.8-11.6z\"]\n};\nvar faRev = {\n  prefix: 'fab',\n  iconName: 'rev',\n  icon: [448, 512, [], \"f5b2\", \"M158.7 274.9a65.6 65.6 0 1 1 131.2 0 65.6 65.6 0 1 1 -131.2 0zm270.7-5.1l-.1 0c-.7-29.3-7.7-58.2-20.5-84.6s-31.2-49.7-53.8-68.4L309.6 143c22 14.2 40.1 33.8 52.7 56.8s19.1 48.8 19.1 75.1c0 86.6-70.5 157.1-157.1 157.1S67.2 361.5 67.2 274.9c0-81.9 63-149.3 143-156.4l0 39.1 108.8-62.8-108.8-62.8 0 38.3c-106.7 7.2-191 96-191 204.6 0 111.6 89.1 202.3 200.1 205l0 .1 210.2 0 0-210.2z\"]\n};\nvar faKeycdn = {\n  prefix: 'fab',\n  iconName: 'keycdn',\n  icon: [512, 512, [], \"f3ba\", \"M63.8 409.3l60.5-59c32.1 42.8 71.1 66 126.6 67.4 30.5 .7 60.3-7 86.4-22.4 5.1 5.3 18.5 19.5 20.9 22-32.2 20.7-69.6 31.1-108.1 30.2-43.3-1.1-84.6-16.7-117.7-44.4 .3-.6-38.2 37.5-38.6 37.9 9.5 29.8-13.1 62.4-46.3 62.4-26.8-.1-47.5-21.7-47.5-48.5 0-34.3 33.1-56.6 63.8-45.6zM418.7 156.9c19.1 31.3 29.6 67.4 28.7 104-1.1 44.8-19 87.5-48.6 121 .3 .3 23.8 25.2 24.1 25.5 9.6-1.3 19.2 2 25.9 9.1 11.3 12 10.9 30.9-1.1 42.4-12 11.3-30.9 10.9-42.4-1.1-6.7-7-9.4-16.8-7.6-26.3-24.9-26.6-44.4-47.2-44.4-47.2 42.7-34.1 63.3-79.6 64.4-124.2 .7-28.9-7.2-57.2-21.1-82.2l22.1-21zM104 53.1c6.7 7 9.4 16.8 7.6 26.3l45.9 48.1c-4.7 3.8-13.3 10.4-22.8 21.3-25.4 28.5-39.6 64.8-40.7 102.9-.7 28.9 6.1 57.2 20 82.4L92 355.6c-19.3-31.6-28.9-67.7-27.8-104.7 1-44.6 18.3-87.6 47.5-121.1L86.4 103.4c-9.6 1.3-19.2-2-25.9-9.1-11.3-12-10.9-30.9 1.1-42.4 11.9-11.2 30.6-10.9 42.4 1.2zM464.9 8c26 0 47.1 22.4 47.1 48.3S490.9 104 464.9 104c-6.3 .1-14-1.1-15.9-1.8l-62.9 59.7c-32.7-43.6-76.7-65.9-126.9-67.2-30.5-.7-60.3 6.8-86.2 22.4l-21.1-22C184.1 74.3 221.5 64 260 64.9 303.3 66 344.6 81.6 377.7 109.5l41.1-38.6c-1.5-4.7-2.2-9.6-2.2-14.5-.1-26.7 22.3-48.4 48.3-48.4zM256.7 113.4c5.5 0 10.9 .4 16.4 1.1 78.1 9.8 133.4 81.1 123.8 159.1-9.8 78.1-81.1 133.4-159.1 123.8-78.1-9.8-133.4-81.1-123.8-159.2 9.3-72.4 70.1-124.6 142.7-124.8zm-59 119.4c.6 22.7 12.2 41.8 32.4 52.2l-11 51.7 73.7 0-11-51.7c20.1-10.9 32.1-29 32.4-52.2-.4-32.8-25.8-57.5-58.3-58.3-32.1 .8-57.3 24.8-58.2 58.3z\"]\n};\nvar faHireAHelper = {\n  prefix: 'fab',\n  iconName: 'hire-a-helper',\n  icon: [512, 512, [], \"f3b0\", \"M443.1 0L71.9 0C67.9 37.3 37.4 67.8 0 71.7L0 443.2c37.4 4.9 66 32.4 71.9 68.8l372.2 0c3-36.4 32.5-65.8 67.9-69.8l0-370.5C475.6 65.8 447 36.4 443.1 0zm-37 404.9c-36.3 0-18.8-2-55.1-2-35.8 0-21 2-56.1 2-5.9 0-4.9-8.2 0-9.8 22.8-7.6 22.9-10.2 24.6-12.8 10.4-15.6 5.9-83 5.9-113 0-5.3-6.4-12.8-13.8-12.8l-111.2 0c-7.4 0-13.8 7.5-13.8 12.8 0 30-4.5 97.4 5.9 113 1.7 2.5 1.8 5.2 24.6 12.8 4.9 1.6 6 9.8 0 9.8-35.1 0-20.3-2-56.1-2-36.3 0-18.8 2-55.1 2-7.9 0-5.8-10.8 0-10.8 10.2-3.4 13.5-3.5 21.7-13.8 7.7-12.9 7.9-44.4 7.9-127.8l0-101.2c0-22.2-12.2-28.3-28.6-32.4-8.8-2.2-4-11.8 1-11.8 36.5 0 20.6 2 57.1 2 32.7 0 16.5-2 49.2-2 3.3 0 8.5 8.3 1 10.8-4.9 1.6-27.6 3.7-27.6 39.3 0 45.6-.2 55.8 1 68.8 0 1.3 2.3 12.8 12.8 12.8l109.2 0c10.5 0 12.8-11.5 12.8-12.8 1.2-13 1-23.2 1-68.8 0-35.6-22.7-37.7-27.6-39.3-7.5-2.5-2.3-10.8 1-10.8 32.7 0 16.5 2 49.2 2 36.5 0 20.6-2 57.1-2 4.9 0 9.9 9.6 1 11.8-16.4 4.1-28.6 10.3-28.6 32.4l0 101.2c0 83.4 .1 114.9 7.9 127.8 8.2 10.2 11.4 10.4 21.7 13.8 5.8 0 7.8 10.8 0 10.8z\"]\n};\nvar faSquareHackerNews = {\n  prefix: 'fab',\n  iconName: 'square-hacker-news',\n  icon: [448, 512, [\"hacker-news-square\"], \"f3af\", \"M448 96c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320zM21 229.2s.1-.1 .1-.2 .1-.2 .2-.2c0 .1 0 .3-.1 .4l-.2 0zM239.2 384l-31.4 0 0-102.7-79.8-153.3 37.3 0c41.5 77.7 48.1 95.8 54.1 112 1.6 4.3 3.1 8.5 5.2 13.6 3.2-7 5.1-11.9 7.1-17.3 5.9-15.3 12.8-33.2 53.5-108.3l34.8 0-80.8 155.1 0 100.9z\"]\n};\nvar faHackerNewsSquare = faSquareHackerNews;\nvar faCreativeCommonsPdAlt = {\n  prefix: 'fab',\n  iconName: 'creative-commons-pd-alt',\n  icon: [512, 512, [], \"f4ed\", \"M255.6 8C112.7 8 8 123.1 8 256 8 394.5 121.6 504 255.6 504 385.5 504 504 403.1 504 256 504 118.1 397.4 8 255.6 8zm.8 450.8c-112.5 0-203.7-93-203.7-202.8 0-105.4 85.5-203.3 203.7-203.3 112.6 0 202.9 89.5 202.8 203.3 0 121.7-99.6 202.8-202.8 202.8zM324.7 186l-53.2 0 0 137.2 53.2 0c21.4 0 70-5.1 70-68.6 0-63.4-48.6-68.6-70-68.6zm.8 108.5l-19.9 0 0-79.7 19.4-.1c3.8 0 35-2.1 35 39.9 0 24.6-10.5 39.9-34.5 39.9zM211.7 186l-68.2 0 0 137.3 34.6 0 0-44.3 27 0c54.1 0 57.1-37.5 57.1-46.5 0-31-16.8-46.5-50.5-46.5zm-4.9 67.3l-29.2 0 0-41.6 28.3 0c30.9 0 28.8 41.6 .9 41.6z\"]\n};\nvar faOrcid = {\n  prefix: 'fab',\n  iconName: 'orcid',\n  icon: [512, 512, [], \"f8d2\", \"M294.7 188.2l-45.9 0 0 153.8 47.5 0c67.6 0 83.1-51.3 83.1-76.9 0-41.6-26.5-76.9-84.7-76.9zM256 8a248 248 0 1 0 0 496 248 248 0 1 0 0-496zM175.2 368.8l-29.8 0 0-207.5 29.8 0 0 207.5zM160.3 98.5a19.6 19.6 0 1 1 0 39.2 19.6 19.6 0 1 1 0-39.2zM300 369l-81 0 0-207.7 80.6 0c76.7 0 110.4 54.8 110.4 103.9 0 53.3-41.7 103.9-110 103.9z\"]\n};\nvar faBoardGameGeek = {\n  prefix: 'fab',\n  iconName: 'board-game-geek',\n  icon: [640, 512, [\"bgg\"], \"e855\", \"M168.8 168.3l30.1-8.2-12.3 98.8 16.7 16.1-38.9 91.2-111.8 41.2-52.6-131.8 17.7-17-10.5-84.3 191.2-70.3-29.5 64.3zm180.6 16.5c11.6 0 19 7.4 19 17.9l0 31.5c0 9.7-6.3 18.9-19.5 22.1 13.1 3.1 20.5 12 20.5 21.4l0 30.9c0 11.1-7.4 18.1-19 18.1l-89.1 0 0-141.8 88 0zM298 299.8l33 0c1.5 0 2.1-1 2.1-2.1l0-26.9c0-1-.6-2.3-2.1-2.3l-33 0 0 31.3zm0-57.3l33 0c1.5 0 2.1-1.1 2.1-2.3l0-24.8c0-1-.6-2.3-2.1-2.3l-33 0 0 29.4zm204.1-27.2l-65.6 0c-1 0-2.1 1.1-2.1 2.3l0 76.1c0 1.3 1 2.1 2.1 2.1l29.7 0c1.5 0 2.3-.8 2.3-2.1l0-24-19.3 0 12.8-30 40.1 0 0 70.8c0 9.2-7.2 16.2-16.3 16.2l-71.5 0c-9.1 0-16.5-7-16.5-16.2l0-109.7c0-8.6 7.4-16 16.5-16l87.8 0 0 30.5zm132.6 0l-65.6 0c-1.1 0-2.1 1.1-2.1 2.3l0 76.1c0 1.3 1 2.1 2.1 2.1l29.6 0c1.5 0 2.3-.8 2.3-2.1l0-24-19.2 0 12.8-30 40.1 0 0 70.8c0 9.2-7.2 16.2-16.3 16.2l-71.5 0c-9.1 0-16.5-6.9-16.5-16.2l0-109.7c0-8.6 7.4-16 16.5-16l87.8 0 0 30.5z\"]\n};\nvar faBgg = faBoardGameGeek;\nvar faVisualStudio = {\n  prefix: 'fab',\n  iconName: 'visual-studio',\n  icon: [512, 512, [], \"e8be\", \"M317.8 18.7c13.2 0-1.4-2.2 162.8 57 .7 .4 1.1 .4 1.8 .8 17.6 7.3 29.6 24.5 29.6 44.2l0 267c0 19.7-12.1 36.9-29.6 44.2-.4 0-1.1 .4-2.9 1.1L335 484.6c-5.5 2.2-11.3 3.3-17.2 3.3-16.8 0-31.8-8.8-40.2-22-.5-.5-6.2-10.3-10.2-16.1-1.1-1.5-1.8-2.9-2.9-4.4L92.5 155.5C81.9 137.2 64 125.8 44.2 122.9l92.2-45 .4-.4c6.2-2.9 13.5-4.8 20.8-4.8 16.1 0 30.3 8 39.1 20.1l0 .4 169 238.1 0-166-36.6 51.6-84.9-119.6 31.8-54.9c.7-.7 1.1-1.4 1.4-1.8 8.4-13.2 23.4-21.9 40.2-21.9zm-117 390.9l-4 5.5 0 .3c-8.8 12.1-23 20.1-39.1 20.1-7.3 0-14.6-1.8-20.8-4.7l-.4-.4-92.9-45c20.1-2.9 38-13.9 49-32.6l17.2-28.5 20.5-34.4 70.6 119.6zM24.1 159.1c11.7-2.9 27.8-.7 36.9 15l47.9 80.1-47.9 80.1c-6.9 12.1-17.5 16.5-27.4 16.5-3.3 0-6.6-.7-9.5-1.5-11.7-3.3-24.1-13.2-24.1-31.8L0 190.9c0-18.6 12.4-28.5 24.1-31.8z\"]\n};\nvar faBehance = {\n  prefix: 'fab',\n  iconName: 'behance',\n  icon: [576, 512, [], \"f1b4\", \"M232 237.2c31.8-15.2 48.4-38.2 48.4-74 0-70.6-52.6-87.8-113.3-87.8l-167.1 0 0 354.4 171.8 0c64.4 0 124.9-30.9 124.9-102.9 0-44.5-21.1-77.4-64.7-89.7zM77.9 135.9l73.1 0c28.1 0 53.4 7.9 53.4 40.5 0 30.1-19.7 42.2-47.5 42.2l-79 0 0-82.7zm83.3 233.7l-83.3 0 0-97.6 84.9 0c34.3 0 56 14.3 56 50.6 0 35.8-25.9 47-57.6 47zM519.7 128.9l-143.7 0 0-34.9 143.7 0 0 34.9zM576 305.2c0-75.9-44.4-139.2-124.9-139.2-78.2 0-131.3 58.8-131.3 135.8 0 79.9 50.3 134.7 131.3 134.7 61.3 0 101-27.6 120.1-86.3l-62.2 0c-6.7 21.9-34.3 33.5-55.7 33.5-41.3 0-63-24.2-63-65.3l185.1 0c.3-4.2 .6-8.7 .6-13.2zM390.4 274c2.3-33.7 24.7-54.8 58.5-54.8 35.4 0 53.2 20.8 56.2 54.8l-114.7 0z\"]\n};\nvar faMonero = {\n  prefix: 'fab',\n  iconName: 'monero',\n  icon: [512, 512, [], \"f3d0\", \"M360 384l108.4 0C425 455.9 346.1 504 256 504S87 455.9 43.6 384l108.4 0 0-127.8 104 104.8 104-105 0 128zM96 336l0-208 159.4 159.4 160.6-159.4 0 208 74.8 0c8.5-25.1 13.2-52 13.2-80 0-137-111-248-248-248S8 119 8 256c0 28 4.6 54.9 13.2 80L96 336z\"]\n};\nvar faFigma = {\n  prefix: 'fab',\n  iconName: 'figma',\n  icon: [384, 512, [], \"f799\", \"M14 95.8C14 42.9 56.9 0 109.8 0L274.2 0c52.9 0 95.8 42.9 95.8 95.8 0 33.5-17.2 63-43.2 80.1 26 17.1 43.2 46.6 43.2 80.1 0 52.9-42.9 95.8-95.8 95.8l-2.1 0c-24.8 0-47.4-9.4-64.4-24.9l0 88.3c0 53.6-44 96.8-97.4 96.8-52.8 0-96.3-42.8-96.3-95.8 0-33.5 17.2-63 43.2-80.1-26-17.1-43.2-46.6-43.2-80.1s17.2-63 43.2-80.1C31.2 158.8 14 129.3 14 95.8zm162.3 95.8l-66.5 0c-35.6 0-64.4 28.8-64.4 64.4 0 35.4 28.6 64.2 64 64.4l66.9 0 0-128.8zM207.7 256c0 35.6 28.8 64.4 64.4 64.4l2.1 0c35.6 0 64.4-28.8 64.4-64.4s-28.8-64.4-64.4-64.4l-2.1 0c-35.6 0-64.4 28.8-64.4 64.4zm-97.9 95.8l-.4 0c-35.4 .2-64 29-64 64.4s29.2 64.4 64.9 64.4c36.3 0 66-29.4 66-65.5l0-63.4-66.5 0zm0-320.4c-35.6 0-64.4 28.8-64.4 64.4s28.8 64.4 64.4 64.4l66.5 0 0-128.8-66.5 0zm97.9 128.8l66.5 0c35.6 0 64.4-28.8 64.4-64.4s-28.8-64.4-64.4-64.4l-66.5 0 0 128.8z\"]\n};\nvar faInstagram = {\n  prefix: 'fab',\n  iconName: 'instagram',\n  icon: [448, 512, [], \"f16d\", \"M224.3 141a115 115 0 1 0 -.6 230 115 115 0 1 0 .6-230zm-.6 40.4a74.6 74.6 0 1 1 .6 149.2 74.6 74.6 0 1 1 -.6-149.2zm93.4-45.1a26.8 26.8 0 1 1 53.6 0 26.8 26.8 0 1 1 -53.6 0zm129.7 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM399 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z\"]\n};\nvar faPerbyte = {\n  prefix: 'fab',\n  iconName: 'perbyte',\n  icon: [448, 512, [], \"e083\", \"M305.3 284.6l-58.7 0 0 98.7 58.7 0c16.3 0 29-4.6 38.2-13.8s13.8-21.2 13.8-36.1c0-14.6-4.7-26.3-14-35.3s-22-13.5-37.9-13.5zM149.4 128.7l-58.7 0 0 98.7 58.7 0c16.3 0 29-4.6 38.2-13.8s13.8-21.2 13.8-36.1c0-14.6-4.7-26.3-14-35.3s-22-13.5-37.9-13.5zM366.6 32L81.4 32c-21.6 0-42.2 8.6-57.5 23.9S0 91.8 0 113.4L0 398.6c0 21.6 8.6 42.2 23.9 57.5S59.8 480 81.4 480l285.3 0c21.6 0 42.2-8.6 57.5-23.9S448 420.2 448 398.6l0-285.3c0-21.6-8.6-42.2-23.9-57.5S388.2 32 366.6 32zm63.6 366.6c0 16.9-6.7 33-18.7 45s-28.1 18.6-45 18.7l-285.3 0c-16.9 0-33-6.7-45-18.7s-18.6-28.1-18.7-45l0-285.3c0-16.9 6.7-33 18.7-45s28.1-18.6 45-18.7l285.3 0c16.9 0 33 6.7 45 18.7s18.6 28.1 18.7 45l0 285.3zm-125-269.9l-58.7 0 0 98.7 58.7 0c16.3 0 29-4.6 38.2-13.8s13.8-21.2 13.8-36.1c0-14.6-4.7-26.3-14-35.3s-22-13.5-37.9-13.5z\"]\n};\nvar faSquareVimeo = {\n  prefix: 'fab',\n  iconName: 'square-vimeo',\n  icon: [448, 512, [\"vimeo-square\"], \"f194\", \"M448 96c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320zM318.5 309.5c-43.5 56.5-80.3 84.8-110.4 84.8-18.7 0-34.4-17.2-47.3-51.6-3.8-13.9-7.3-26.9-10.5-39-18.2-68.3-28.6-107.4-46.2-107.4-2.4 0-10.8 5-25.1 15.1L64 192c7-6.1 13.9-12.4 20.6-18.5 29.1-26.3 55.6-50.3 73.5-51.9 24.9-2.4 40.2 14.6 46 51.1 20.5 129.6 29.6 149.2 66.8 90.5 13.4-21.2 20.6-37.2 21.5-48.3 3.4-32.8-25.6-30.6-45.2-22.2 15.7-51.5 45.8-76.5 90.1-75.1 32.9 1 48.4 22.4 46.5 64-1.4 31.1-23.2 73.8-65.3 127.9z\"]\n};\nvar faVimeoSquare = faSquareVimeo;\nvar faPushed = {\n  prefix: 'fab',\n  iconName: 'pushed',\n  icon: [448, 512, [], \"f3e1\", \"M415.1 111.9l-98.5-9 14-33.4c10.4-23.5-10.8-40.4-28.7-37L30.6 76.9c-15.1 2.7-26 18.3-21.4 36.6L114.3 461.8c6.5 21.3 36.7 24.2 47.7 7L197.3 388 432.5 156.7c16.4-16.8 4.3-42.9-17.4-44.8zM305.7 53.6c5.1-.7 7.5 2.5 5.2 7.4l-16.8 39.9-177.4-16.3 189-31zM30.8 107.9c-3.1-5.1 1-10 6.1-9.1l248.7 22.7-96.9 230.7-157.9-244.3zM144.1 456.4c-2.6 4-7.9 3.1-9.4-1.2L51.6 179.7 179.3 377.3c-7 15-35.2 79.1-35.2 79.1zM416.9 141.9l-198.7 195.4 89.7-213.7 106.4 9.7c4 1.1 5.7 5.3 2.6 8.6z\"]\n};\nvar faMixcloud = {\n  prefix: 'fab',\n  iconName: 'mixcloud',\n  icon: [640, 512, [], \"f289\", \"M213 346.6l-33.2 0 0-151.5 6.2-21.6-10.7 0-38.1 173.1-61 0-38.4-173.1-10.5 0 5.9 21.6 0 151.5-33.2 0 0-181.6 65.7 0 36.6 173.1 8.5 0 36.6-173.1 65.7 0 0 181.6zm331.5-63l-86 62.1 0-38.1 72.9-51.8-72.9-51.8 0-38.1 86 62.3 9.3 0 86.3-62.3 0 38.1-73.1 51.8 73.1 51.8 0 38.1-86.3-62.1-9.3 0zM430.2 272.3l-182 0 0-33.1 182 0 0 33.1z\"]\n};\nvar faYandexInternational = {\n  prefix: 'fab',\n  iconName: 'yandex-international',\n  icon: [320, 512, [], \"f414\", \"M129.5 512l0-166.1-111-297.9 55.8 0 81.8 229.7 94.1-277.7 51.3 0-120.7 347.8 0 164.2-51.3 0z\"]\n};\nvar faHive = {\n  prefix: 'fab',\n  iconName: 'hive',\n  icon: [512, 512, [], \"e07f\", \"M260.4 254.9L131.5 33.1c-.2-.3-.5-.6-.8-.8s-.7-.3-1.1-.3-.8 .1-1.1 .3-.6 .5-.8 .8L.3 254.9c-.2 .3-.3 .7-.3 1.1s.1 .8 .3 1.1L129.1 478.9c.2 .3 .5 .6 .8 .8s.7 .3 1.1 .3 .8-.1 1.1-.3 .6-.5 .8-.8L260.4 257.1c.2-.3 .3-.7 .3-1.1s-.1-.8-.3-1.1zm39.1-25.7c.2 .3 .5 .6 .8 .8s.7 .3 1.1 .3l66.5 0c.4 0 .8-.1 1.1-.3s.6-.5 .8-.8 .3-.7 .3-1.1-.1-.8-.3-1.1L259.1 33.1c-.2-.3-.5-.6-.8-.8s-.7-.3-1.1-.3l-66.5 0c-.4 0-.8 .1-1.1 .3s-.6 .5-.8 .8-.3 .7-.3 1.1 .1 .8 .3 1.1L299.4 229.2zm212.3 25.7L384.9 33.1c-.2-.3-.5-.6-.8-.8s-.7-.3-1.1-.3l-66.6 0c-.4 0-.8 .1-1.1 .3s-.6 .5-.8 .8-.3 .7-.3 1.1 .1 .8 .3 1.1L440.7 256 314.5 476.7c-.2 .3-.3 .7-.3 1.1s.1 .8 .3 1.1 .5 .6 .8 .8 .7 .3 1.1 .3l66.6 0c.4 0 .8-.1 1.1-.3s.6-.5 .8-.8L511.7 257.1c.2-.3 .3-.7 .3-1.1s-.1-.8-.3-1.1zM366 284.9l-66.5 0c-.4 0-.8 .1-1.1 .3s-.6 .5-.8 .8L188.8 476.7c-.2 .3-.3 .7-.3 1.1s.1 .8 .3 1.1 .5 .6 .8 .8 .7 .3 1.1 .3l66.5 0c.4 0 .8-.1 1.1-.3s.6-.5 .8-.8L367.9 288.3c.2-.3 .3-.7 .3-1.1s-.1-.8-.3-1.1-.5-.6-.8-.8-.7-.3-1.1-.3z\"]\n};\nvar faCreativeCommonsZero = {\n  prefix: 'fab',\n  iconName: 'creative-commons-zero',\n  icon: [512, 512, [], \"f4f3\", \"M255.6 8C397.4 8 504 118.1 504 256 504 403.1 385.5 504 255.6 504 121.6 504 8 394.5 8 256 8 123.1 112.7 8 255.6 8zm.8 44.7c-118.2 0-203.7 97.9-203.7 203.3 0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3zm-.4 60.5c-81.9 0-102.5 77.3-102.5 142.8S174.1 398.8 256 398.8 358.5 321.5 358.5 256 337.9 113.2 256 113.2zm0 53.9c3.3 0 6.4 .5 9.2 1.2 5.9 5.1 8.8 12.1 3.1 21.9L213.8 290.4c-1.7-12.7-1.9-25.1-1.9-34.4 0-28.8 2-88.9 44.1-88.9zm40.8 46.2c2.9 15.4 3.3 31.4 3.3 42.7 0 28.9-2 88.9-44.1 88.9-13.5 0-32.6-7.7-20.1-26.4l60.9-105.2z\"]\n};\nvar faSquareSnapchat = {\n  prefix: 'fab',\n  iconName: 'square-snapchat',\n  icon: [448, 512, [\"snapchat-square\"], \"f2ad\", \"M384 32L64 32c-17 0-33.3 6.7-45.3 18.7S0 79 0 96L0 416c0 17 6.7 33.3 18.7 45.3S47 480 64 480l320 0c17 0 33.3-6.7 45.3-18.7S448 433 448 416l0-320c0-17-6.7-33.3-18.7-45.3S401 32 384 32zm-3.9 319.3l-.1 .1c-2.5 2.8-5.4 5.1-8.7 6.8-6.5 3.6-13.4 6.3-20.6 8.2-1.4 .4-2.7 1-3.9 1.8-2.2 1.9-2.1 4.6-4.4 8.6-1.7 3-4 5.5-6.8 7.5-6.7 4.6-14.2 4.9-22.2 5.2-7.2 .3-15.4 .6-24.7 3.7-3.8 1.2-7.8 3.7-12.4 6.5-11.3 6.9-26.7 16.4-52.3 16.4s-40.9-9.4-52.1-16.3c-4.7-2.9-8.7-5.4-12.5-6.6-9.3-3.1-17.5-3.4-24.7-3.7-8-.3-15.5-.6-22.2-5.2-2.4-1.6-4.4-3.7-6-6.1-3.2-4.6-2.9-7.8-5.3-9.9-1.3-.8-2.6-1.5-4.1-1.8-7.1-1.9-13.9-4.6-20.3-8.1-3.1-1.6-5.9-3.8-8.3-6.3-6.6-6.8-8.3-14.8-5.7-21.8 3.4-9.3 11.6-12.1 19.4-16.3 14.8-8 26.3-18.1 34.4-29.9 2.3-3.3 4.3-6.9 6-10.6 .8-2.2 .8-3.3 .2-4.4-.6-.9-1.3-1.6-2.2-2.2-2.5-1.7-5.1-3.4-6.9-4.5-3.3-2.1-5.9-3.8-7.5-5-6.3-4.4-10.6-9-13.4-14.2-1.9-3.6-3-7.6-3.3-11.6s.4-8.1 1.9-11.9c4.1-10.9 14.5-17.7 27-17.7 2.6 0 5.3 .3 7.8 .8 .7 .2 1.4 .3 2 .5-.1-7.4 .1-15.4 .7-23.1 2.4-27.3 11.9-41.6 21.9-53 6.4-7.2 13.9-13.2 22.3-17.9 15.1-8.6 32.2-13 50.9-13s35.8 4.4 50.9 13c8.3 4.7 15.9 10.8 22.2 17.9 10 11.4 19.5 25.7 21.9 53 .6 7.7 .9 15.4 .7 23.1 .7-.2 1.4-.3 2.1-.5 2.6-.6 5.2-.8 7.8-.8 12.5 0 22.8 6.8 27 17.7 1.5 3.8 2.1 7.9 1.9 11.9s-1.4 8-3.3 11.6c-2.7 5.2-7.1 9.9-13.4 14.2-1.7 1.2-4.3 2.9-7.5 5-1.8 1.2-4.5 2.9-7.2 4.7-.8 .5-1.4 1.2-1.9 2-.5 1-.5 2.2 .2 4.2 1.7 3.8 3.7 7.4 6.1 10.8 8.3 12.1 20.2 22.3 35.5 30.4 1.5 .8 3 1.5 4.4 2.3 .7 .3 1.6 .8 2.5 1.3 4.9 2.7 9.2 6 11.5 12.2 2.5 6.9 1 14.7-5.2 21.3zm-16.7-18.5c-50.3-24.3-58.3-61.9-58.7-64.7-.4-3.4-.9-6 2.8-9.5 3.6-3.3 19.5-13.2 24-16.3 7.3-5.1 10.5-10.2 8.2-16.5-1.7-4.3-5.7-6-10-6-1.3 0-2.7 .2-4 .4-8 1.7-15.8 5.8-20.4 6.9-.5 .1-1.1 .2-1.7 .2-2.4 0-3.3-1.1-3.1-4 .6-8.8 1.8-25.9 .4-41.9-1.9-22-9-32.9-17.4-42.6-4.1-4.6-23.1-24.7-59.5-24.7s-55.4 20.1-59.5 24.8c-8.4 9.7-15.5 20.6-17.4 42.6-1.4 16-.1 33.1 .4 41.9 .2 2.8-.7 4-3.1 4-.6 0-1.1-.1-1.7-.2-4.5-1.1-12.3-5.1-20.3-6.9-1.3-.3-2.6-.4-4-.4-4.3 0-8.3 1.6-10 6-2.4 6.3 .8 11.4 8.2 16.5 4.4 3.1 20.4 13 24 16.3 3.7 3.4 3.2 6.1 2.8 9.5-.4 2.8-8.4 40.4-58.7 64.7-2.9 1.4-8 4.4 .9 9.3 13.9 7.6 23.1 6.8 30.3 11.4 6.1 3.9 2.5 12.4 6.9 15.4 5.5 3.8 21.6-.3 42.3 6.6 17.4 5.7 28.1 22 59 22s41.8-16.3 58.9-22c20.8-6.9 36.9-2.8 42.3-6.6 4.4-3.1 .8-11.5 6.9-15.4 7.2-4.6 16.4-3.8 30.3-11.5 8.8-4.9 3.8-7.9 .9-9.4z\"]\n};\nvar faSnapchatSquare = faSquareSnapchat;\nvar faThemeisle = {\n  prefix: 'fab',\n  iconName: 'themeisle',\n  icon: [512, 512, [], \"f2b2\", \"M208 88.3c0-10 6.3-21.7 17.7-21.7 11.1 0 17.7 11.7 17.7 21.7 0 10.3-6.6 21.7-17.7 21.7-11.4 0-17.7-11.4-17.7-21.7zm304 160c0 36-11.4 102.3-36.3 129.7-22.9 24.9-87.4 61.1-120.9 70.6l-1.1 .3 0 32.6c0 16.3-12.6 30.6-29.1 30.6-10 0-19.4-5.7-24.6-14.3-5.4 8.6-14.9 14.3-24.9 14.3s-19.4-5.7-24.9-14.3c-5.1 8.6-14.6 14.3-24.6 14.3-10.3 0-19.4-5.7-24.9-14.3-5.1 8.6-14.6 14.3-24.6 14.3-18.9 0-29.4-15.7-29.4-32.9-16.3 12.3-35.7 19.4-56.6 19.4-22 0-43.4-8.3-60.3-22.9 10.3-.3 20.6-2.3 30.3-5.7-20.9-5.7-39.4-18.9-52-36.3 21.4 4.6 46.2 1.7 67.1-11.1-22-22-56.6-58.9-68.6-87.4-5.7-13.4-6.9-31.4-6.9-45.7 0-49.7 20.3-160 86.3-160 10.6 0 18.9 4.9 23.1 14.9 3.7-5.4 7.7-10.5 12-15.4 2-2.6 5.7-5.4 7.1-8.3 8-12.6 11.7-21.1 21.7-34 32.3-41.1 81.7-69.4 134.9-69.4 6 0 12 .3 17.7 1.1 10.9-11.7 26-18.3 41.7-18.3 14.6 0 29.7 6 40 16.3 .9 .9 1.4 2.3 1.4 3.4 0 3.7-10.3 13.4-12.9 16.3 4.3 1.4 15.7 6.9 15.7 12 0 2.9-2.9 5.1-4.6 7.1 31.4 27.7 49.4 67.1 56.3 108 4.3-5.1 10.3-8.6 17.1-8.6 10.6 0 20.9 7.1 28.6 14 20.9 18.6 25.7 53.1 25.7 79.7zM188 89.4c0 18.3 12.6 37.1 32.3 37.1s32.3-18.9 32.3-37.1c0-18-12.6-36.9-32.3-36.9S188 71.4 188 89.4zM237.7 194c0-19.7 3.7-39.1 8.6-58.3-52 79.5-13.5 184.6 68.9 184.6 21.4 0 42.6-7.7 60-20 2-7.4 3.7-14.9 3.7-22.6 0-14.3-6.3-21.4-20.6-21.4-4.6 0-9.1 .9-13.4 1.7-63.3 12.7-107.1 3.7-107.1-64zM196.6 448.9c0-11.1-8.9-20.9-20.3-20.9s-20 9.7-20 20.9l0 32.6c0 11.1 8.6 21.1 20 21.1s20.3-9.7 20.3-21.1l0-32.6zm49.1 0c0-11.1-8.6-20.9-20-20.9s-20.3 9.7-20.3 20.9l0 32.6c0 11.1 8.9 21.1 20.3 21.1s20-10 20-21.1l0-32.6zm49.7 0c0-11.1-8.9-20.9-20.3-20.9s-20.3 9.7-20.3 20.9l0 32.6c0 11.1 8.9 21.1 20.3 21.1s20.3-9.7 20.3-21.1l0-32.6zm49.7 0c0-11.1-8.9-20.9-20.3-20.9s-20.3 9.7-20.3 20.9l0 32.6c0 11.1 8.9 21.1 20.3 21.1s20.3-10 20.3-21.1l0-32.6zM421.7 286c-30.9 59.1-90.3 102.6-158.6 102.6-96.6 0-160.6-84.6-160.6-176.6 0-16.9 2-33.4 6-49.7-20 33.7-29.7 72.6-29.7 111.4 0 60.3 24.9 121.7 71.4 160.9 5.1-9.7 14.9-16.3 26-16.3 10 0 19.4 5.7 24.6 14.3 5.4-8.6 14.6-14.3 24.9-14.3 10 0 19.4 5.7 24.6 14.3 5.4-8.6 14.9-14.3 24.9-14.3s19.4 5.7 24.9 14.3c5.1-8.6 14.6-14.3 24.6-14.3 10.9 0 20.9 6.6 25.7 16 43.4-36.3 68.6-92 71.4-148.3zm10.6-99.7c0-53.7-34.6-105.7-92.6-105.7-30.3 0-58.6 15.1-78.9 36.9-20 66.4-27.4 136.6 41.4 136.6 28.8 0 97.4-28.5 84.3 36.9 28.9-26 45.7-65.7 45.7-104.6z\"]\n};\nvar faDartLang = {\n  prefix: 'fab',\n  iconName: 'dart-lang',\n  icon: [512, 512, [], \"e693\", \"M378.6 78.9c-2.8-.1-5.6-.2-8.5-.2l-264.1 0 143.2-72c7.4-4.4 18.8-6.7 30.4-6.7 13.5 0 29.4 9.2 37 16.8l62 62 0 .1zM107.3 96.5l262.8 0c16 0 25.4 1.4 35.4 9.3l106.5 106.4 0 208.8-79.3 .7-325.4-325.2zM96.5 373l0-262.2 323.8 323.8 .7 77.4-212.2 0-98.1-98.2C99.4 402.5 96.5 398.5 96.5 373zM78.7 105.3l0 267.7c0 3.3 .1 6.3 .2 9.1l-62-62C6.5 309.3 0 294.3 0 279.6 0 272.8 3.9 262.1 6.7 256l72-150.7z\"]\n};\nvar faDeploydog = {\n  prefix: 'fab',\n  iconName: 'deploydog',\n  icon: [512, 512, [], \"f38e\", \"M382.2 136l51.7 0 0 239.6-51.7 0 0-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9l0-103.9zM317.5 297.8a33.2 33.2 0 1 0 66.4 1 33.2 33.2 0 1 0 -66.4-1zM188.5 136l51.7 0 0 239.6-51.7 0 0-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9l0-103.9zM123.8 297.8a33.2 33.2 0 1 0 66.4 1 33.2 33.2 0 1 0 -66.4-1zM448 96c17.5 0 32 14.4 32 32l0 256c0 17.5-14.4 32-32 32L64 416c-17.5 0-32-14.4-32-32l0-256c0-17.5 14.4-32 32-32l384 0zm0-32L64 64C28.8 64 0 92.8 0 128L0 384c0 35.2 28.8 64 64 64l384 0c35.2 0 64-28.8 64-64l0-256c0-35.2-28.8-64-64-64z\"]\n};\nvar faFlipboard = {\n  prefix: 'fab',\n  iconName: 'flipboard',\n  icon: [448, 512, [], \"f44d\", \"M0 32l0 448 448 0 0-448-448 0zM358.4 211.2l-89.6 0 0 89.6-89.6 0 0 89.6-89.6 0 0-268.8 268.8 0 0 89.6z\"]\n};\nvar faBuyNLarge = {\n  prefix: 'fab',\n  iconName: 'buy-n-large',\n  icon: [576, 512, [], \"f8a6\", \"M288.2 32C133.5 32 8 132.3 8 256S133.5 480 288.2 480 568.4 379.7 568.4 256 442.9 32 288.2 32zM202.8 389.2l-138.5 1.4 77.2-290.7 133.4 0c63.2 0 84.9 28.6 78 72.8-.4 2.3-.9 4.6-1.5 6.9-5.6-1.3-11.4-1.9-17.2-1.9-42.3 0-76.7 33.9-76.7 75.7 0 37.1 27.1 68 62.9 74.5-18.2 37.2-56.2 60.9-117.7 61.5zM358.2 207.1l32 0-22.2 90.3-35.4 0-11.2-35.6-7.8 35.6-37.8 0 26.6-90.3 31.3 0 15 36.8 9.4-36.8zM504.1 389.2l-197.1 0 15.8-61.2c3.8 .6 7.6 .8 11.5 .8 42.3 0 76.7-33.9 76.7-75.6 0-32.6-21-60.5-50.4-71.1l21.3-82.4 92.5 0-53 205.4 103.9 0-21.2 84.1zM211.9 269.4l-24.7 0-13.8 56.5 24.7 0c16.1 0 32.1-3.2 37.9-26.6 5.6-22.3-8-29.8-24.1-29.8zM233.2 170l-21.3 0-11.7 47.7 21.4 0c18 0 35.4-14.6 39.2-30.1 4.6-18.9-9.5-17.6-27.6-17.6z\"]\n};\nvar faWatchmanMonitoring = {\n  prefix: 'fab',\n  iconName: 'watchman-monitoring',\n  icon: [512, 512, [], \"e087\", \"M256 16a240 240 0 1 0 0 480 240 240 0 1 0 0-480zM121.7 429.1c-51.6-40.2-84.9-102.8-84.9-173.1 0-21.7 3.2-43.3 9.6-64.1l102.9-17.9-.1 11-13.9 2s-.1 12.5-.1 19.5c0 2 .4 4 1.2 5.8s2.1 3.4 3.7 4.6l9.5 7.4-27.7 204.9zM227.4 145.9l8.5-7.6s6.9-5.4-.1-9.3c-7.2-4-39.5-34.5-39.5-34.5-5.3-5.5-8.3-7.3-15.5 0 0 0-32.3 30.5-39.5 34.5-7.1 4-.1 9.3-.1 9.3l8.5 7.6 0 4.4-73.5-19.2c39.6-56.9 105.5-94.3 180-94.3 31.3 0 62.2 6.7 90.6 19.6s53.8 31.8 74.3 55.4l-193.5 37.7 0-3.6zm34.1 329.3l-33.9-250.9 9.5-7.4c1.6-1.2 2.8-2.8 3.7-4.6s1.3-3.8 1.2-5.8c0-7-.1-19.5-.1-19.5l-13.9-2-.1-10.5 241.7 31.4c3.9 16.4 5.8 33.3 5.8 50.1 0 119.1-95.4 216.2-213.8 219.1z\"]\n};\nvar faHips = {\n  prefix: 'fab',\n  iconName: 'hips',\n  icon: [640, 512, [], \"f452\", \"M251.6 157.6c0-1.9-.9-2.8-2.8-2.8l-40.9 0c-1.6 0-2.7 1.4-2.7 2.8l0 201.8c0 1.4 1.1 2.8 2.7 2.8l40.9 0c1.9 0 2.8-.9 2.8-2.8l0-201.8zM156.5 168c-16.1-11.8-36.3-17.9-60.3-18-18.1-.1-34.6 3.7-49.8 11.4l0-81.2c0-1.8-.9-2.7-2.8-2.7l-40.9 0C.9 77.5 0 78.4 0 80.2L0 359.4c0 1.9 .9 2.8 2.7 2.8l41 0c1.9 0 2.8-.9 2.8-2.8l0-136.1c0-.8-2.8-27 45.8-27 48.5 0 45.8 26.1 45.8 27l0 122.6c0 9 7.3 16.3 16.4 16.3l27.3 0c1.8 0 2.7-.9 2.7-2.8l0-136.1c0-23.4-9.3-41.8-28-55.3zM634.9 278.1c-6.8-15.7-18.4-27-34.9-34.1l-57.6-25.3c-8.6-3.6-9.2-11.2-2.6-16.1 7.4-5.5 44.3-13.9 84 6.8 1.7 1 4-.3 4-2.4l0-44.7c0-1.3-.6-2.1-1.9-2.6-17.7-6.6-36.1-9.9-55.1-9.9-26.5 0-45.3 5.8-58.5 15.4-.5 .4-28.4 20-22.7 53.7 3.4 19.6 15.8 34.2 37.2 43.6L580.4 286c11.6 5.1 15.2 13.3 12.2 21.2-3.7 9.1-13.2 13.6-36.5 13.6-24.3 0-44.7-8.9-58.4-19.1-2.1-1.4-4.4 .2-4.4 2.3l0 34.4c0 10.4 4.9 17.3 14.6 20.7 15.6 5.5 31.6 8.2 48.2 8.2 12.7 0 25.8-1.2 36.3-4.3 .7-.3 36-8.9 45.6-45.8 3.5-13.5 2.4-26.5-3.1-39.1zM376.2 149.8c-31.7 0-104.2 20.1-104.2 103.5l0 183.5c0 .8 .6 2.7 2.7 2.7l40.9 0c1.9 0 2.8-.9 2.8-2.7l0-88.8c16.5 12.7 35.8 19.1 57.7 19.1 60.5 0 108.7-48.5 108.7-108.7 .1-60.3-48.2-108.6-108.6-108.6zm0 46.6a62.2 62.2 0 1 1 0 124.3 62.2 62.2 0 1 1 0-124.3zM228.3 72.5c-15.9 0-28.8 12.9-28.9 28.9 0 15.6 12.7 28.9 28.9 28.9s28.9-13.1 28.9-28.9c0-16.2-13-28.9-28.9-28.9z\"]\n};\nvar faCloudversify = {\n  prefix: 'fab',\n  iconName: 'cloudversify',\n  icon: [640, 512, [], \"f385\", \"M160.6 304c8.2 68.5 67.4 115.5 146 111.3 51.2 43.3 136.8 45.8 186.4-5.6 69.2 1.1 118.5-44.6 131.5-99.5 14.8-62.5-18.2-132.5-92.1-155.1-33-88.1-131.4-101.5-186.5-85-57.3 17.3-84.3 53.2-99.3 109.7-7.8 2.7-26.5 8.9-45 24.1 11.7 0 15.2 8.9 15.2 19.5l0 20.4c0 10.7-8.7 19.5-19.5 19.5l-20.2 0c-10.7 0-19.5-6-19.5-16.7l0-6.6-46.8 0c-3.8 0-10.8 4.3-10.8 11.9l0 40.4c0 6.4 5.3 11.8 11.7 11.8l48.9 0 0-.1zM388 312c-10.7 46.3 21.7 72.4 55.3 86.8-107.2 33.8-171.6-50.8-135.3-110.8-33.2 21.6-33.7 71.2-29.2 92.9-17.9-12.4-53.8-32.4-57.4-79.8-3-39.9 21.5-75.7 57-93.9 30.6-15.8 103.5-8.5 133.6 40.8-14.1-48-53.8-70.1-101.8-74.8 30.9-30.7 64.4-50.3 114.2-43.7 69.8 9.3 133.2 82.8 67.7 150.5 35-16.3 48.7-54.4 47.5-76.9l10.5 19.6c11.8 22 15.2 47.6 9.4 72-9.2 39-40.6 68.8-79.7 76.5-32.1 6.3-83.1-5.1-91.8-59.2zM140 208l-39.8 0c-8.9 0-16.2-7.3-16.2-16.2l0-39.6c0-8.9 7.3-16.2 16.2-16.2l39.8 0c8.9 0 16.2 7.3 16.2 16.2l0 39.6c0 8.9-7.3 16.2-16.2 16.2zM22.1 168c-5.6 0-10.1-4.5-10.1-10.1l0-27.8c0-5.6 4.5-10.1 10.1-10.1l27.7 0c5.5 0 10.1 4.5 10.1 10.1l0 27.8c0 5.6-4.5 10.1-10.1 10.1l-27.7 0zM180 142.7l0-21.4c0-5.1 4.2-9.3 9.3-9.3l21.4 0c5.1 0 9.3 4.2 9.3 9.3l0 21.4c0 5.1-4.2 9.3-9.3 9.3l-21.4 0c-5.1 0-9.3-4.2-9.3-9.3zM68 235.5l0 25c0 6.3-5.1 11.5-11.4 11.5l-25.2 0c-6.3 0-11.4-5.2-11.4-11.5l0-25c0-6.3 5.1-11.5 11.4-11.5l25.1 0c6.4 0 11.5 5.2 11.5 11.5z\"]\n};\nvar faGoodreads = {\n  prefix: 'fab',\n  iconName: 'goodreads',\n  icon: [448, 512, [], \"f3a8\", \"M299.9 191.2c5.1 37.3-4.7 79-35.9 100.7-22.3 15.5-52.8 14.1-70.8 5.7-37.1-17.3-49.5-58.6-46.8-97.2 4.3-60.9 40.9-87.9 75.3-87.5 46.9-.2 71.8 31.8 78.2 78.3zM448 88l0 336c0 30.9-25.1 56-56 56L56 480c-30.9 0-56-25.1-56-56L0 88C0 57.1 25.1 32 56 32l336 0c30.9 0 56 25.1 56 56zM330 313.2s-.1-34-.1-217.3l-29 0 0 40.3c-.8 .3-1.2-.5-1.6-1.2-9.6-20.7-35.9-46.3-76-46-51.9 .4-87.2 31.2-100.6 77.8-4.3 14.9-5.8 30.1-5.5 45.6 1.7 77.9 45.1 117.8 112.4 115.2 28.9-1.1 54.5-17 69-45.2 .5-1 1.1-1.9 1.7-2.9 .2 .1 .4 .1 .6 .2 .3 3.8 .2 30.7 .1 34.5-.2 14.8-2 29.5-7.2 43.5-7.8 21-22.3 34.7-44.5 39.5-17.8 3.9-35.6 3.8-53.2-1.2-21.5-6.1-36.5-19-41.1-41.8-.3-1.6-1.3-1.3-2.3-1.3l-26.8 0c.8 10.6 3.2 20.3 8.5 29.2 24.2 40.5 82.7 48.5 128.2 37.4 49.9-12.3 67.3-54.9 67.4-106.3z\"]\n};\nvar faTidal = {\n  prefix: 'fab',\n  iconName: 'tidal',\n  icon: [640, 512, [], \"e7dc\", \"M107.2 48l-1.3 0c-32.3 33.1-65.4 65.5-98 98.5-2.6 2.8-6.1 5.1-7.9 8.6 35.6 35.4 71 71 106.6 106.4 35.4-35.3 70.7-70.8 106.1-106.1l0-1.3-73.2-73.2C128.8 69.8 117.3 59.6 107.2 48zm213.5 0l-1.3 0c-34.9 36.1-71.5 71-106.3 107.2 35.9 35.1 71 71 106.7 106.3 34.3-34.1 68.4-68.4 102.6-102.4 1.5-1.5 3.3-2.8 4.1-4.8-34.6-33.8-68.4-68.2-102.6-102.1-1.3-1.3-2.3-2.6-3.3-4.1zm213.5 0l-1.3 0c-17.2 18-35.1 35.3-52.6 53-17.9 17.7-35.4 35.7-53.5 53.3 .8 2.3 3 3.6 4.6 5.5L533.3 261.5c36.1-34.9 70.8-71.2 106.7-106.1-.5-2.2-2.6-3.5-4-5L555.8 70.2c-7.1-7.4-14.9-14.2-21.5-22.2zM319.6 261.7c-34.9 35.1-70 70-104.9 104.9-.3 .7-.7 1.7-1 2.3 24 23.7 47.7 47.5 71.5 71.3 11.8 11.3 22.8 23.5 34.9 34.4 8.4-7.4 16.4-16.4 24.7-24.3 25.5-25.3 51-51 76.5-76.3 1.8-2.2 4.3-3.6 5.5-6.3-35.4-34.9-70.5-70.2-105.6-105.4l-1.5-.7z\"]\n};\nvar faUnity = {\n  prefix: 'fab',\n  iconName: 'unity',\n  icon: [448, 512, [], \"e049\", \"M243.6 91.6l80.1 46.8c2.9 1.6 3 6.2 0 7.8l-95.2 55.6c-2.9 1.7-6.3 1.6-9 0l-95.2-55.6c-2.9-1.6-3-6.3 0-7.8l80.1-46.8 0-91.6-204.4 119.4 0 238.8 78.4-45.8 0-93.6c-.1-3.3 3.8-5.7 6.7-3.9l95.2 55.6c2.9 1.7 4.5 4.7 4.5 7.8l0 111.2c.1 3.3-3.8 5.7-6.7 3.9L98 346.8 19.6 392.6 224 512 428.4 392.6 350 346.8 269.9 393.6c-2.8 1.7-6.8-.5-6.7-3.9l0-111.2c0-3.3 1.8-6.3 4.5-7.8L362.9 215c2.8-1.7 6.8 .5 6.7 3.9l0 93.6 78.4 45.8 0-238.8-204.4-119.4 0 91.6z\"]\n};\nvar faTencentWeibo = {\n  prefix: 'fab',\n  iconName: 'tencent-weibo',\n  icon: [320, 512, [], \"f1d5\", \"M40.5 495.8c1.4 19.9-27.6 22.2-29.7 2.9-11.6-129.9 31.1-239.5 101.4-313.2-15.6-34 9.2-77.1 50.6-77.1 30.3 0 55.1 24.6 55.1 55.1 0 44-49.5 70.8-86.9 45.1-65.7 71.3-101.4 169.8-90.5 287.2zM160.2 .1c-125.9 0-204.3 134.2-148.3 242.3 8.7 17.4 35.3 4.5 26.3-13.4-46.3-92.6 21-199.2 122-199.2 75.4 0 136.9 61.4 136.9 136.9 0 90.8-86.9 153.9-167.7 133.1-19.1-4.1-25.6 24.4-6.6 29.1 110.7 23.2 204-60 204-162.3 0-91.9-74.6-166.5-166.6-166.5z\"]\n};\nvar faFreeCodeCamp = {\n  prefix: 'fab',\n  iconName: 'free-code-camp',\n  icon: [576, 512, [], \"f2c5\", \"M97.4 96.2c10.4-10.6 16-17.1 16-21.9 0-2.8-1.9-5.5-3.8-7.4-2.4-1.8-5.4-2.8-8.4-2.8-8.5 0-20.9 8.8-35.8 25.7-41.5 47.3-62.7 93.1-61.8 160.6S21 367.3 57.6 412.2c18.8 23.6 33.2 35.8 43.5 35.8 3.2-.3 6.1-1.6 8.4-3.8 1.9-2.8 3.8-5.6 3.8-8.4 0-5.6-3.9-12.2-13.2-20.6-44.5-42.3-67.3-97-67.5-165-.2-61.4 21.6-112.4 64.8-154zM239.6 420.1c.6 .4 .9 .6 .9 .6l-.9-.6zm93.8 .6l.2-.1c-.2 .1-.3 .2-.2 .1zm3.1-158.2c-16.2-4.2 50.4-82.9-68.1-177.2 0 0 15.5 49.4-62.8 159.6-74.3 104.4 23.5 168.7 34 175.2-6.7-4.3-47.4-35.7 9.6-128.6 11-18.3 25.5-34.9 43.5-72.2 0 0 15.9 22.4 7.6 71.1-12.5 73.6 53.8 52.5 54.8 53.5 22.8 26.8-17.7 73.5-21.6 76.6 5.5-3.7 117.7-78 33-188.1-6 6-13.8 34.2-30 30.1zM511 89.7c-14.9-16.9-27.4-25.7-35.9-25.7-3 .1-5.9 1.1-8.4 2.8-1.9 1.9-3.8 4.7-3.8 7.4 0 4.8 5.6 11.3 16 21.9 43.2 41.6 65 92.6 64.8 154.1-.2 68-23 122.6-67.5 165-9.3 8.4-13.2 14.9-13.2 20.6 0 2.7 1.9 5.6 3.8 8.4 2.3 2.2 5.2 3.6 8.4 3.8 10.3 0 24.7-12.1 43.5-35.8 36.6-44.9 53.1-94.4 54.1-161.9S552.5 137 511 89.7z\"]\n};\nvar faXTwitter = {\n  prefix: 'fab',\n  iconName: 'x-twitter',\n  icon: [448, 512, [], \"e61b\", \"M357.2 48L427.8 48 273.6 224.2 455 464 313 464 201.7 318.6 74.5 464 3.8 464 168.7 275.5-5.2 48 140.4 48 240.9 180.9 357.2 48zM332.4 421.8l39.1 0-252.4-333.8-42 0 255.3 333.8z\"]\n};\nvar faStickerMule = {\n  prefix: 'fab',\n  iconName: 'sticker-mule',\n  icon: [576, 512, [], \"f3f7\", \"M561.7 199.6l0 0zm-6.2-77.4c-7.7-22.3-5.1-7.2-13.4-36.9-1.6-6.5-3.6-14.5-6.2-20-4.4-8.7-4.6-7.5-4.6-9.5 0-5.3 30.7-45.3 19-46.9-5.7-.6-12.2 11.6-20.6 17-8.6 4.2-8 5-10.3 5-2.6 0-5.7-3-6.2-5-2-5.7 1.9-25.9-3.6-25.9-3.6 0-12.3 24.8-17 25.8-5.2 1.3-27.9-11.4-75.1 18-25.3 13.2-86.9 65.2-87 65.3-6.7 4.7-20 4.7-35.5 16-44.4 30.1-109.6 9.4-110.7 9-110.6-26.8-128-15.2-159 11.5-20.8 17.9-23.7 36.5-24.2 38.9-4.2 20.4 5.2 48.3 6.7 64.3 1.8 19.3-2.7 17.7 7.7 98.3 .5 1 4.1 0 5.1 1.5 0 8.4-3.8 12.1-4.1 13-1.5 4.5-1.5 10.5 0 16 2.3 8.2 8.2 37.2 8.2 46.9 0 41.8 .4 44 2.6 49.4 3.9 10 12.5 9.1 17 12 3.1 3.5-.5 8.5 1 12.5 .5 2 3.6 4 6.2 5 9.2 3.6 27 .3 29.9-2.5 1.6-1.5 .5-4.5 3.1-5 5.1 0 10.8-.5 14.4-2.5 5.1-2.5 4.1-6 1.5-10.5-.4-.8-7-13.3-9.8-16-2.1-2-5.1-3-7.2-4.5-5.8-4.9-10.3-19.4-10.3-19.5-4.6-19.4-10.3-46.3-4.1-66.8 4.6-17.2 39.5-87.7 39.6-87.8 4.1-6.5 17-11.5 27.3-7 6 1.9 19.3 22 65.4 30.9 47.9 8.7 97.4-2 112.2-2 2.8 2-1.9 13-.5 38.9 0 26.4-.4 13.7-4.1 29.9-2.2 9.7 3.4 23.2-1.5 46.9-1.4 9.8-9.9 32.7-8.2 43.4 .5 1 1 2 1.5 3.5 .5 4.5 1.5 8.5 4.6 10 7.3 3.6 12-3.5 9.8 11.5-.7 3.1-2.6 12 1.5 15 4.4 3.7 30.6 3.4 36.5 .5 2.6-1.5 1.6-4.5 6.4-7.4 1.9-.9 11.3-.4 11.3-6.5 .3-1.8-9.2-19.9-9.3-20-2.6-3.5-9.2-4.5-11.3-8-6.9-10.1-1.7-52.6 .5-59.4 3-11 5.6-22.4 8.7-32.4 11-42.5 10.3-50.6 16.5-68.3 .8-1.8 6.4-23.1 10.3-29.9 9.3-17 21.7-32.4 33.5-47.4 18-22.9 34-46.9 52-69.8 6.1-7 8.2-13.7 18-8 10.8 5.7 21.6 7 31.9 17 14.6 12.8 10.2 18.2 11.8 22.9 1.5 5 7.7 10.5 14.9 9.5 10.4-2 13-2.5 13.4-2.5 2.6-.5 5.7-5 7.2-8 3.1-5.5 7.2-9 7.2-16.5 0-7.7-.4-2.8-20.6-52.9z\"]\n};\nvar faTwitch = {\n  prefix: 'fab',\n  iconName: 'twitch',\n  icon: [448, 512, [], \"f1e8\", \"M359.4 103.5l-38.6 0 0 109.7 38.6 0 0-109.7zM253.2 103l-38.6 0 0 109.8 38.6 0 0-109.8zM89 0l-96.5 91.4 0 329.2 115.8 0 0 91.4 96.5-91.4 77.3 0 173.8-164.6 0-256-366.9 0zM417.3 237.8l-77.2 73.1-77.2 0-67.6 64 0-64-86.9 0 0-274.3 308.9 0 0 201.2z\"]\n};\nvar faKickstarterK = {\n  prefix: 'fab',\n  iconName: 'kickstarter-k',\n  icon: [448, 512, [], \"f3bc\", \"M356.7 256.2l40.8-40.5c42.2-41.9 42.2-110.3 0-152.1s-111-41.9-153.2 0L229.3 78.4C209.6 50.3 177.1 32 140.2 32 80.5 32 32 80.2 32 139.5l0 233c0 59.4 48.5 107.5 108.2 107.5 37.1 0 69.3-18.3 89-46.4l14.9 14.7c42.2 41.9 111 41.9 153.2 0s42.2-110.3 0-152.1l-40.8-40 .1 0z\"]\n};\nvar faCriticalRole = {\n  prefix: 'fab',\n  iconName: 'critical-role',\n  icon: [448, 512, [], \"f6c9\", \"M225.8 0c.3 .2 216.6 124.5 217.1 124.7 3 1.2 3.7 3.5 3.7 6.6-.1 83.4-.1 166.9 0 250.4 .1 1.2-.2 2.4-.8 3.4s-1.5 1.9-2.6 2.4c-21.4 12-207.9 118.3-218.9 124.6l-3 0c-79.3-45.7-218.3-125.4-218.4-125.5-.6-.3-1.1-.7-1.4-1.3s-.5-1.2-.4-1.9c0-.9 0-225.9-.1-253.1-.1-1 .2-2 .7-2.9s1.3-1.6 2.2-2C27.2 112.1 213.2 6 224.1 0l1.8 0zM215.4 20.4l-.2-.2c-64.7 36.9-129.5 73.7-194.2 110.6 0 .1 .1 .2 .1 .4L52 142.9c-7.7 6-8.3 6-10.6 5.1-.1 0-24.2-9.3-26.8-10l0 230.4c.9-1.4 64.1-110.9 64.1-111 1.6-2.8 3-1.9 9.1-1.5 1.4 .1 1.5 .2 .8 1.4-41.2 71.3-36.4 63-67.5 116.9-.8 1.4-.6 1.1 1.2 1.1l186.5 0c1.4 0 1.7-.2 1.7-1.6l0-8.9c0-1.3 2.4-.8-18.4-1-7.5-.1-14.1-3.2-21.4-12.7-7.4-9.7-14.6-19.4-21.8-29.2-2.3-3.1-3.4-2.4-16.8-2.4-1.8 0-1.8 0-1.8 1.8 .3 26.2 .2 25.3 1 32.7 .5 4.4 2.2 4.2 9.7 4.8 3.1 .3 3.9 4.1 .5 4.9-1.6 .4-31.6 .5-33.7-.1-.5-.1-1-.5-1.3-.9s-.5-1-.4-1.6 .3-1.1 .6-1.5 .9-.7 1.4-.8c3.3-.8 6.2 .8 6.7-4.4 1.3-13.7 1.2-9 1.1-79.4 0-10.8-.4-12.6-5.4-13.6-1.2-.2-3.5-.2-4.7-.6-2.9-1-2-4.8 1.8-4.8 33.7 0 46.1-1.1 56.1 4.9 7.7 4.6 12 11.5 12.5 20.4 .9 14.6-6.5 22.3-15 32.6-.2 .1-.3 .3-.4 .5s-.1 .4-.1 .6 0 .4 .1 .6 .2 .4 .4 .5c2.6 3.2 5 6.6 7.7 9.8 27.6 33.2 24.1 30.5 41.3 33.1 .9 .1 1-.4 1-1.2l0-11c0-1 .3-1.4 1.4-1.3 7.8 1.2 15.8 1.1 23.6-.3 1.1-.1 1.5 .2 1.5 1.3 0 .1 .9 26.7 .9 26.8 0 1.5 .7 1.6 1.9 1.6l186.7 0c-27.2-47-54.2-94-81.2-140.8 2.3-.7-.4 0 6.7-1.4 2-.4 2.1-.4 3.1 1.4 7.3 12.6 77.3 134 77.4 134.1l0-230.4c-1.7 .5-103.3 38.7-105.8 39.7-1.1 .4-1.5 .2-1.9-.9-.6-1.9-1.3-3.8-2.1-5.6-.3-.8-.1-1.1 .6-1.4 .1 0 95.5-35.8 103-38.8-65.4-37.6-130.6-75-196-112.6l86.8 150.4-.3 .3c-9.6-.9-10.5-1.6-11.8-3.9-1-1.7-73.5-127.7-82-142.2-9.1 14.7-83.6 146.2-85.4 146.3-2.9 .2-5.9 .1-9.2 .1 28.8-49.8 57.6-99.5 86.2-149l0 0zm51.9 129.9c1.9-.1 3.7-.4 5.5-.8 1.7-.3 2.5 .2 2.6 1.9 0 .1 .1 19.1-.9 20.5s-1.9 1.2-2.6-.2c-5-9.7 6.2-9.7-39.1-12-.7 0-1 .2-1 .9 0 .1 3.7 122 3.7 122.1 0 .9 .5 1.2 1.2 1.5 3 1.2 5.9 2.5 8.7 4 7.3 4.3 11.4 10.8 12.4 19.3 1.4 11.8-2.8 35.8-32.2 37.1-2.8 .1-28.3 1.1-34.1-23.3-4.7-19.3 8.3-32.7 19.9-36.4 .6-.1 1.2-.4 1.5-.9s.5-1.1 .5-1.7c.1-5.6 3-107.1 3.7-121.3 0-1.1-.6-1.2-1.4-1.1-32.3 .5-36.7-.3-40.2 8.5-2.4 6.2-4.1 1.3-4 .2 1.1-6 2.2-12 3.3-18 .4-2.1 1.4-2.6 3.4-1.9 5.6 2.1 6.7 1.7 37.2 1.9 1.7 0 1.8-.1 1.8-1.8 .7-27.5 .6-22.6 1-29.6 .1-.6-.1-1.2-.3-1.7s-.7-.9-1.3-1.1c-5.6-2.9-8.8-7.6-8.9-13.9-.4-14.8 17.7-21.7 27.4-11.5 6.8 7.2 5.8 18.9-2.5 24.2-.8 .4-1.4 1.1-1.8 1.8s-.6 1.6-.4 2.5c0 .6-.1-4.3 1 30 0 .9 .4 1.1 1.2 1.1 .1 0 23-.1 34.5-.4l0-.1zM68.3 141.7c19.8-4.5 32.7-.6 52.5 1.7 2.8 .3 3.7 1.2 3.6 4-.2 5-1.2 22.3-1.2 23.1 0 .5-.2 1-.5 1.4s-.7 .7-1.2 .9c-4.1 1.7-3.6-4.4-4-7.3-3.1-22.4-73.9-32.7-74.6 25.4-.3 23.9 17 53.6 54.1 50.9 27.2-2 19-20.2 24.8-20.5 .4-.1 .9 0 1.3 .1s.8 .4 1.1 .7 .5 .7 .6 1.2 .1 .9 0 1.3c-1.8 10.8-3.4 19-3.4 19.2-1.5 9.2-86.7 22.1-93.4-42.1-2.7-25.8 10.4-53.4 40.3-60.2zm80 87.7l-19.5 0c-.6 0-1.2-.1-1.6-.4s-.8-.8-1-1.4c2.4-3.8 5.9 .9 5.9-6.1-.1-25.8 .2-38 .2-40.1 0-3.4-.5-4.6-3.3-4.9-7-.7-3.1-3.4-1.1-3.4 11.8-.1 22.6-.2 30 .7 8.8 1.1 16.7 12.6 7.9 22.6-2 2.2-4 4.4-6.1 6.7 1 1.2 6.9 8.8 17.3 19.7 2.7 2.8 6.2 3.5 9.9 3.1 .6 0 1.1-.2 1.5-.6s.7-.9 .7-1.5c.3-3.4 .3 4.7 .4-40.6 0-5.6-.3-6.6-3.2-6.8-4-.4-4-2.3-.7-3.4l19.1-.1c.3 0 4.5 .5 1 3.4 0 0-.2 0-.2 0-3.6 .3-3.9 1-4 4.6-.3 43.9 .1 40.2 .4 42.8 .1 .8 .3 2.2 5.1 2.1 2.5 0 3.9 3.4 0 3.4-10.4 .1-20.7 0-31.1 .1-10.7 0-13.5-6.2-24.2-20.8-1.6-2.2-8.3-2.4-8.2-.4 .9 16.5 0 17.8 4 17.7 4.8-.1 4.7 3.6 .8 3.5l.1 0zm275-10.1c-1.2 7.1 .2 10.4-5.3 10.3-61.5-.4-47.8-.2-50.7-.3-1.2-.1-2.4-.4-3.6-.7-2.5-.6 1.5-1.2-.4-5.6-1.4-3.4-2.8-6.8-4.1-10.2-.1-.4-.4-.8-.7-1.1s-.8-.4-1.3-.4c-4.9-.2-9.7-.2-14.6 .1-.3 0-.6 .2-.9 .3s-.5 .4-.7 .7c-1.6 3.6-3.1 7.3-4.5 11-1.3 3.2 7.9 1.3 12.2 2.2 3 .6 4.5 3.7 .7 3.7l-26.4 0c-2.9 0-3.1-3.2-.7-3.2 1.2 .1 2.4-.2 3.5-.9s1.9-1.5 2.4-2.6c1.5-3 2.8-6 4.1-9.1 18.2-42.1 17.1-40.2 18.4-41.6 .2-.2 .4-.4 .7-.6s.6-.2 .8-.2 .6 .1 .8 .2 .5 .3 .7 .6c2.9 3.3 18.4 44.7 23.6 51.9 2 2.7 5.7 2 6.4 2 3.6 .1 4-1.1 4.1-4.3 .1-1.9 .1 1.2 .1-41.2 0-4.5-2.4-3.7-5.6-4.3-.3 0-2.6-.6-.1-3.1 .2-.2-.9-.2 21.7-.2 2.3 0 5.3 2.8-1.2 3.4-.4 0-.7 0-1.1 .2s-.6 .3-.9 .6-.4 .6-.6 .9-.2 .7-.1 1.1c-.1 1.6-.2 38.9 .3 41.2 .2 .7 .6 1.4 1.2 1.8s1.3 .7 2.1 .6c13.3 .4 14.9 .4 16-3.4 1.7-5.8 4.1-2.5 3.7-.2l0 .1zM318.6 283.6c-4.2 0-4.4-3.4-.6-3.4 35.9-.2 28.1 .4 37.2-.6 1.7-.2 2.4 .2 2.3 1.9-.3 3.4-.6 6.8-1 10.2-.2 2.2-3.2 2.6-3.4-.2-.4-5.3-2.2-4.5-15.6-5.1-1.6-.1-1.6 0-1.6 1.5l0 16.1c0 1.7 0 1.6 1.6 1.5 3.1-.2 10.3 .3 15.7-1.5 .5-.2 3.3-1.8 3.1 1.8 0 .2-.8 10.4-1.2 11.4-.5 1.3-1.9 1.5-2.6 .3-1.2-2 0-5.1-3.7-5.3-15.4-.9-12.9-2.5-12.9 6 0 12.3-.8 16.1 3.9 16.2 16.6 .5 14.4 0 16.4-5.7 .8-2.4 3.5-1.8 3.2 .6-.4 3.2-.8 6.4-1.2 9.6 0 .4-.2 2.4-4.7 2.4-37.2-.1-34.5-.2-35.2-.3-2.7-.5-2.2-3 .2-3.4 1.1-.2 4 .5 4.2-2.6 2.4-56.2-.1-51.3-3.9-51.3l0 0zm-.4-109.5c2.5 .6 3.1 1.8 3 4.6-.3 5.3-.3 9-.6 9.7-.7 2.2-3.1 2.1-3.3-.3-.4-4.8-3-7.8-7.6-9.1-26.3-7.7-32.8 15.5-27.2 30.2 5.9 15.4 22 15.9 28.9 13.8 5.9-1.9 5.9-6.5 6.9-7.6 1.2-1.3 2.2-1.8 3.1 1.1 0 .1 .6 11.9-6 12.7-1.6 .2-19.4 3.7-32.7-3.4-21-11.2-16.7-35.5-6.9-45.3 14-14.1 39.9-7.1 42.3-6.5l0 0zM289.8 280.1c3.3 0 3.7 3 .2 3.4-2.6 .3-5-.4-5 5.5 0 2-.2 29 .4 41.4 .1 2.3 1.2 3.5 3.4 3.7 22 1.2 15-1.7 18.8-6.3 1.8-2.2 2.8 .8 2.8 1.1 .3 13.6-4 12.4-5.2 12.4l-38.2-.2c-1.9-.2-2.1-3-.4-3.4 2-.5 4.9 .4 5.1-2.8 1-15.9 .6-44.6 .3-47.8-.3-3.8-2.8-3.3-5.7-3.7-2.5-.4-2-3.2 .3-3.2 1.4 0 18 0 23.1 0zm-31.6-57.8c.1 4.1 2.9 3.5 6 3.6 2.6 .1 2.5 3.4-.1 3.4-6.5 0-13.7 0-21.6-.1-3.8 0-3.4-3.4 0-3.4 4.5 0 3.2 1.6 3.4-45.5 0-5.1-3.3-3.5-4.7-4.2-2.6-1.2-1.4-3.1 .4-3.2 1.3 0 20.2-.4 21.2 .2s1.9 1.6-.4 2.9c-1 .5-3.9-.3-4.2 2.5 0 .2-.8 1.6-.1 43.8l0 0zM221.3 496.6c.5 .3 1 .5 1.6 .5s1.1-.2 1.6-.5c17-9.8 182-103.6 197.4-112.5-.1-.4 11.3-.2-181.5-.3-1.2 0-1.6 .4-1.5 1.6 0 .1 1.3 44.5 1.2 50.4-.1 2.6-.6 5.2-1.4 7.7-.6 1.8 .4-.5-13.5 32.2-.7 1.7-1 2.2-2-.1-4.2-10.3-8.3-20.7-12.6-31-1.5-3.4-2.2-7.1-2-10.8 .2-2.5 .8-16.1 1.5-48 0-1.9 0-2-2-2l-183 0c2.6 1.6 178.3 102.6 196 112.8l.1 0zM130.4 307.9c0 2.4 .4 2.8 2.8 3 11.5 1.2 21 3.7 25.6-7.3 6-14.5 2.7-34.4-12.5-38.8-2-.6-16-2.8-15.9 1.5 0 8 0 11.6 0 41.6zm105.8-15c0 2.1 1.1 38.7 1.1 39.1 .3 9.9-25.6 5.8-25.2-2.6 .1-2 1.4-37.4 1.1-39.4-14.1 7.4-14.4 40.2 6.4 48.8 4 1.7 8.4 1.9 12.5 .6s7.6-4 9.9-7.7c4.9-7.8 6.8-29.5-5.4-39-.1 .1-.2 .1-.4 .1l0 0zm-12.3-198c-9.8 0-9.7 14.8-.1 14.9s10.1-14.9 .1-14.9l0 0zM143.7 198.6c0 1.8 .4 2.4 2.2 2.6 13.6 1.4 12.5-11 12.2-13.4-1.7-11.2-14.4-10.2-14.4-7.8 0 4.5 0 13.7 0 18.6zM356 205l-6.1-15.8c-2.2 5.5-4.2 10.6-6.2 15.8l12.3 0z\"]\n};\nvar faSteamSymbol = {\n  prefix: 'fab',\n  iconName: 'steam-symbol',\n  icon: [448, 512, [], \"f3f6\", \"M273.5 177.5a61 61 0 1 1 122 0 61 61 0 1 1 -122 0zm174.5 .2c0 63-51 113.8-113.7 113.8L225 371.3c-4 43-40.5 76.8-84.5 76.8-40.5 0-74.7-28.8-83-67L0 358 0 250.7 97.2 290c15.1-9.2 32.2-13.3 52-11.5l71-101.7C220.7 114.5 271.7 64 334.2 64 397 64 448 115 448 177.7zM203 363c0-34.7-27.8-62.5-62.5-62.5-4.5 0-9 .5-13.5 1.5l26 10.5c25.5 10.2 38 39 27.7 64.5-10.2 25.5-39.2 38-64.7 27.5-10.2-4-20.5-8.3-30.7-12.2 10.5 19.7 31.2 33.2 55.2 33.2 34.7 0 62.5-27.8 62.5-62.5zM410.5 177.7a76.4 76.4 0 1 0 -152.8 0 76.4 76.4 0 1 0 152.8 0z\"]\n};\nvar faMailchimp = {\n  prefix: 'fab',\n  iconName: 'mailchimp',\n  icon: [448, 512, [], \"f59e\", \"M331 243.5c3.1-.4 6.2-.4 9.3 0 1.7-3.8 2-10.4 .5-17.6-2.2-10.7-5.3-17.1-11.5-16.1s-6.5 8.7-4.2 19.4c1.3 6 3.5 11.1 6 14.3l0 0zM277.4 252c4.5 2 7.2 3.3 8.3 2.1 1.9-1.9-3.5-9.4-12.1-13.1-5-2.1-10.4-2.8-15.8-2.2s-10.5 2.7-14.8 5.8c-3 2.2-5.8 5.2-5.4 7.1 .9 3.7 10-2.7 22.6-3.5 7-.4 12.8 1.8 17.3 3.7l0 0zm-9 5.1c-9.1 1.4-15 6.5-13.5 10.1 .9 .3 1.2 .8 5.2-.8 6-2.3 12.4-2.9 18.7-1.9 2.9 .3 4.3 .5 4.9-.5 1.5-2.2-5.7-8-15.4-6.9l0 0zm54.2 17.1c3.4-6.9-10.9-13.9-14.3-7s10.9 13.9 14.3 7l0 0zm15.7-20.5c-7.7-.1-8 15.8-.3 15.9s8-15.8 .3-16l0 0zM119.5 332.7c-1.3 .3-6 1.5-8.5-2.3-5.2-8 11.1-20.4 3-35.8-9.1-17.5-27.8-13.5-35-5.5-8.7 9.6-8.7 23.5-5 24.1 4.3 .6 4.1-6.5 7.4-11.6 .9-1.4 2.1-2.6 3.5-3.6s3-1.6 4.6-2 3.4-.4 5 0 3.3 1 4.7 1.9c11.6 7.6 1.4 17.8 2.3 28.6 1.4 16.7 18.4 16.4 21.6 9 .2-.4 .3-.8 .3-1.2s-.2-.8-.5-1.1c0 .9 .7-1.3-3.4-.4l0 0zm299.7-17.1c-3.3-11.7-2.6-9.2-6.8-20.5 2.4-3.7 15.3-24-3.1-43.3-10.4-10.9-33.9-16.5-41.1-18.5-1.5-11.4 4.6-58.7-21.5-83 20.8-21.6 33.8-45.3 33.7-65.7-.1-39.2-48.2-51-107.4-26.5l-12.5 5.3c-.1 0-22.7-22.3-23.1-22.6-67.5-58.9-278.8 175.9-211.3 232.9l14.8 12.5c-4 10.7-5.4 22.2-4.1 33.5 3.4 33.4 36 60.4 67.5 60.4 57.7 133.1 267.9 133.3 322.3 3 1.7-4.5 9.1-24.6 9.1-42.4s-10.1-25.3-16.5-25.3l0 0zm-316 48.2c-22.8-.6-47.5-21.1-49.9-45.5-6.2-61.3 74.3-75.3 84-12.3 4.5 29.6-4.7 58.5-34.1 57.8l0 0zM84.7 249.6c-15.2 3-28.5 11.5-36.7 23.5-4.9-4.1-14-12-15.6-15-13-24.8 14.2-73 33.3-100.2 47.1-67.2 120.9-118.1 155-108.9 5.5 1.6 23.9 22.9 23.9 22.9s-34.1 18.9-65.8 45.3C136.2 150 104 197.7 84.7 249.6zM323.6 350.7s-35.7 5.3-69.5-7.1c6.2-20.2 27 6.1 96.4-13.8 15.3-4.4 35.4-13 51-25.4 3.4 7.8 5.8 15.9 7.1 24.3 3.7-.7 14.2-.5 11.4 18.1-3.3 19.9-11.7 36-25.9 50.8-8.9 9.6-19.4 17.5-31.2 23.3-6.5 3.4-13.3 6.3-20.3 8.6-53.5 17.5-108.3-1.7-126-43-1.4-3.1-2.6-6.4-3.6-9.7-7.5-27.2-1.1-59.8 18.8-80.4 1.2-1.3 2.5-2.9 2.5-4.8-.2-1.7-.8-3.3-1.9-4.5-7-10.1-31.2-27.4-26.3-60.8 3.5-24 24.5-40.9 44.1-39.9l5 .3c8.5 .5 15.9 1.6 22.9 1.9 11.7 .5 22.2-1.2 34.6-11.6 4.2-3.5 7.6-6.5 13.3-7.5 2.3-.6 4.7-.7 7-.3s4.6 1.2 6.6 2.5c10 6.6 11.4 22.7 11.9 34.5 .3 6.7 1.1 23 1.4 27.6 .6 10.7 3.4 12.2 9.1 14 3.2 1 6.2 1.8 10.5 3.1 13.2 3.7 21 7.5 26 12.3 2.5 2.5 4.2 5.8 4.7 9.3 1.6 11.4-8.8 25.4-36.3 38.2-46.7 21.7-93.7 14.4-100.5 13.7-20.2-2.7-31.6 23.3-19.5 41.1 22.6 33.4 122.4 20 151.4-21.4 .7-1 .1-1.6-.7-1-41.8 28.6-97.1 38.2-128.5 26-4.8-1.8-14.7-6.4-15.9-16.7 43.6 13.5 71 .7 71 .7s2-2.8-.6-2.5zM171.7 157.5c16.7-19.4 37.4-36.2 55.8-45.6 .1-.1 .3-.1 .5-.1s.3 .1 .4 .2 .2 .3 .2 .4 0 .3-.1 .5c-1.5 2.7-4.3 8.3-5.2 12.7 0 .1 0 .3 0 .4s.2 .3 .3 .4 .3 .1 .4 .1 .3 0 .4-.1c11.5-7.8 31.5-16.2 49-17.3 .2 0 .3 0 .5 .1s.2 .2 .3 .4 .1 .3 0 .5-.1 .3-.3 .4c-2.9 2.2-5.5 4.8-7.7 7.7-.1 .1-.1 .2-.1 .4s0 .3 .1 .4 .2 .2 .3 .3 .2 .1 .4 .1c12.3 .1 29.7 4.4 41 10.7 .8 .4 .2 1.9-.6 1.7-69.5-15.9-123.1 18.5-134.5 26.8-.2 .1-.3 .1-.5 .1s-.3-.1-.5-.2-.2-.3-.2-.5 .1-.4 .2-.5l-.1 0z\"]\n};\nvar faLumon = {\n  prefix: 'fab',\n  iconName: 'lumon',\n  icon: [640, 512, [], \"e7e2\", \"M452.5 223.5c9.8 0 16.5 6.3 16.5 16.6l0 31.8c0 10.3-6.6 16.6-16.6 16.6l-56.2 0c-9.8 0-16.5-6.3-16.5-16.6l0-31.8c0-10.3 6.7-16.6 16.5-16.6l56.3 0zm-25.7 13.1c-1.5-2.6-3.2-2.6-4.6 0l-10.7 17.6c-1.7 2.4-2.6 5.1-2.6 8.2 0 7.9 6.9 14.6 15.6 14.6 8.5 0 15.6-6.7 15.6-14.6 0-3-1-5.8-2.7-8.2l-10.7-17.6zM85.8 223.8c1 0 1.5 .6 1.5 1.5l0 50.3 64.6 0c1 0 1.6 .6 1.6 1.5l0 9.7c0 .9-.6 1.5-1.6 1.5l-78.4 0c-1 0-1.6-.6-1.6-1.5l0-61.4c0-.9 .6-1.5 1.6-1.5l12.3 0zm88.3 0c1 0 1.5 .6 1.5 1.5l0 45c0 4 2 5.2 5.7 5.2l46.9 0c3.8 0 5.7-1.3 5.7-5.2l0-45c0-.9 .5-1.5 1.5-1.5l12.3 0c1 0 1.6 .6 1.6 1.5l0 46c0 10.5-5.3 16.8-17.6 16.8l-54 0c-12.3 0-17.6-6.3-17.6-16.8l0-46c0-.9 .6-1.5 1.6-1.5l12.3 0zm108.2 0c1 0 1.6 .5 2.2 1.4l30.5 46.4 1.4 0 30.5-46.4c.6-.9 1.2-1.4 2.2-1.4l18 0c1 0 1.5 .6 1.5 1.5l0 61.4c0 .9-.5 1.5-1.5 1.5l-12.3 0c-1 0-1.6-.6-1.6-1.5l0-43.8-1.1 0-28.7 43.8c-.6 .9-1.3 1.5-2.4 1.5l-10.7 0c-1 0-1.7-.6-2.3-1.5l-28.7-43.8-1.1 0 0 43.8c0 .9-.5 1.5-1.5 1.5l-12.3 0c-1 0-1.6-.6-1.6-1.5l0-61.4c0-.9 .6-1.5 1.6-1.5l17.9 0zm214.4 0c.9 0 1.3 .4 2.2 1.1l52.7 46.3 1.3 0 0-46c0-.9 .6-1.5 1.6-1.5l12.3 0c1 0 1.6 .6 1.6 1.5l0 61.4c0 .9-.6 1.5-1.6 1.5l-14.4 0c-1 0-1.4-.4-2.3-1.1l-52.6-46.3-1.4 0 0 46c0 .9-.5 1.5-1.5 1.5l-12.3 0c-1 0-1.6-.6-1.6-1.5l0-61.4c0-.9 .6-1.5 1.6-1.5l14.4 0zM320 114.1c87.9 0 167.7 15.7 225.5 41l2.7 1.2C587.1 173.8 640 206.5 640 256s-52.9 82.2-91.8 99.6l-2.7 1.2c-57.8 25.4-137.6 41-225.5 41-76.2 0-155.1-10.5-225.5-41-39.6-17.4-94.5-50.3-94.5-100.8s54.9-83.5 94.5-100.8c70.4-30.5 149.3-41 225.5-41zm-88.9 229c20.3 29 52.8 49.6 88.9 49.6 36.2 0 68.7-20.6 89-49.7l-177.9 .1zm-96.1 0c43.3 29.7 96.7 43.5 148.4 48-24.2-9.1-44.4-26.7-58.6-48.1l-89.9 0zm280.3-.1c-14.2 21.4-34.4 39.1-58.6 48.1 51.8-4.5 105.3-18.3 148.6-48.2l-90 0zm-337.4 .1c44.1 23.1 93.7 35.4 142.7 42.6-33.4-8.6-66.5-21.9-94.4-42.6l-48.3 0zm436.2-.2c-27.9 20.8-61.1 34.2-94.6 42.8 47.3-6.9 89.6-18.5 123.9-33.6l1.7-.8c6.1-2.7 11.9-5.5 17.4-8.4l-48.5 0zM520 173.6c10.7 8.7 19.8 18.1 27 28.2 .4 .6 .5 1.3 .1 2s-1 1-1.7 1l-1.6 0c-.6 0-1.2-.3-1.5-.8-7.9-10.9-18.2-21.1-30.6-30.4l-93.5 0c5.4 8.8 9.9 18.5 13.4 28.6 .2 .6 .1 1.2-.2 1.7s-.9 .8-1.6 .8l-1.4 0c-.8 0-1.5-.5-1.8-1.3-3.8-10.7-8.7-20.8-14.5-29.9l-184.3 .1c-5.8 9.1-10.7 19.1-14.4 29.8-.3 .8-1 1.3-1.8 1.3l-1.4 0c-.6 0-1.2-.3-1.6-.8s-.5-1.1-.2-1.7c3.5-10.2 8-19.7 13.4-28.6l-93.6 0c-12.3 9.3-22.6 19.4-30.4 30.3-.4 .5-.9 .8-1.5 .8l-1.6 0c-.7 0-1.4-.4-1.7-1s-.3-1.4 .1-2c7.6-10.5 16.7-19.9 26.8-28l-51 0c-28.9 16.6-62 43.3-63.5 79.7l44.7 0c.5 0 1 .2 1.3 .6s.6 .8 .6 1.3l0 1.3c0 1.1-.9 1.9-1.9 1.9l-44.7 0C6.8 295 40 321.7 69 338.3l50.9 0c-10.3-8.4-19.1-17.4-26.1-27l-.8-1.1c-.4-.6-.5-1.3-.1-2s1-1 1.7-1l1.6 0 .2 0c.5 .1 1 .3 1.3 .8 7.9 10.9 18.1 21 30.5 30.3l93.6 0c-5.3-8.8-9.8-18.4-13.4-28.5-.2-.6-.1-1.2 .2-1.7s.9-.8 1.6-.8l1.4 0 .2 0c.7 .1 1.4 .6 1.7 1.3 3.8 10.7 8.6 20.7 14.4 29.8l184.5-.1c5.8-9.1 10.6-19.1 14.4-29.7l.1-.1c.3-.7 1-1.1 1.7-1.1l1.4 0c.6 0 1.2 .3 1.6 .8s.5 1.2 .2 1.7c-3.5 10.1-8 19.7-13.3 28.5l93.7 0c12.3-9.3 22.5-19.4 30.3-30.2l.1-.2c.4-.4 .9-.6 1.4-.6l1.6 0c.7 0 1.4 .4 1.7 1s.3 1.4-.1 2c-7.1 10-16.1 19.3-26.7 27.9l51.1 0c28.8-16.6 61.8-43.3 63.4-79.6l-44.7 0c-1 0-1.9-.9-1.9-1.9l0-1.3c0-1.1 .9-1.9 1.9-1.9l44.7 0c-1.6-36.5-34.9-63.3-63.9-79.9l-50.9 0zM220.5 126.2c-49.1 7.1-98.7 19.5-143 42.7l48.4 0c27.9-20.8 61-34.1 94.5-42.7zm62.8-5.4c-51.8 4.5-105.2 18.3-148.6 48.1l90 0c14.2-21.4 34.4-39 58.6-48.1zm36.6-1.6c-36.2 0-68.7 20.6-89 49.7l177.9-.1c-20.3-29.1-52.7-49.6-88.9-49.6zm36.6 1.6c24.2 9.1 44.4 26.6 58.5 48l89.8 0c-43.3-29.7-96.6-43.5-148.3-48zm62.8 5.4c33.4 8.5 66.4 21.9 94.3 42.5l48.3 0c-44.1-23.1-93.6-35.4-142.6-42.5z\"]\n};\nvar faNutritionix = {\n  prefix: 'fab',\n  iconName: 'nutritionix',\n  icon: [448, 512, [], \"f3d6\", \"M112 8.1S245.4-.1 233 112.5c0 0 19.1-74.9 103-40.6 0 0-17.7 74-88 56 0 0 14.6-54.6 66.1-56.6 0 0-39.9-10.3-82.1 48.8 0 0-19.8-94.5-93.6-99.7 0 0 75.2 19.4 77.6 107.5 0 .1-106.4 7-104-119.8zM424 323.7c0 48.5-9.7 95.3-32 132.3-42.2 30.9-105 48-168 48-62.9 0-125.8-17.1-168-48-22.3-37-32-83.8-32-132.3 0-48.4 17.7-94.7 40-131.7 42.2-30.9 97.1-48.6 160-48.6 63 0 117.8 17.6 160 48.6 22.3 37 40 83.3 40 131.7zM144 428a28 28 0 1 0 -56 0 28 28 0 1 0 56 0zm0-66.2a28 28 0 1 0 -56 0 28 28 0 1 0 56 0zm0-66.2a28 28 0 1 0 -56 0 28 28 0 1 0 56 0zM216 428a28 28 0 1 0 -56 0 28 28 0 1 0 56 0zm0-66.2a28 28 0 1 0 -56 0 28 28 0 1 0 56 0zm0-66.2a28 28 0 1 0 -56 0 28 28 0 1 0 56 0zM288 428a28 28 0 1 0 -56 0 28 28 0 1 0 56 0zm0-66.2a28 28 0 1 0 -56 0 28 28 0 1 0 56 0zm0-66.2a28 28 0 1 0 -56 0 28 28 0 1 0 56 0zM360 428a28 28 0 1 0 -56 0 28 28 0 1 0 56 0zm0-66.2a28 28 0 1 0 -56 0 28 28 0 1 0 56 0zm0-66.2a28 28 0 1 0 -56 0 28 28 0 1 0 56 0zM384 256c-4.8-22.3-7.4-36.9-16-56-38.8-19.9-90.5-32-144-32S118.8 180.1 80 200c-8.8 19.5-11.2 33.9-16 56 42.2-7.9 98.7-14.8 160-14.8s117.8 6.9 160 14.8z\"]\n};\nvar faCreativeCommonsSamplingPlus = {\n  prefix: 'fab',\n  iconName: 'creative-commons-sampling-plus',\n  icon: [512, 512, [], \"f4f1\", \"M255.6 8C397.4 8 504 118.1 504 256 504 403.1 385.5 504 255.6 504 121.6 504 8 394.5 8 256 8 123.1 112.7 8 255.6 8zm.8 44.7c-118.2 0-203.7 97.9-203.7 203.3 0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3zm107 205.6c-4.7 0-9 2.8-10.7 7.2l-4 9.5-11-92.8c-1.7-13.9-22-13.4-23.1 .4l-4.3 51.4-5.2-68.8c-1.1-14.3-22.1-14.2-23.2 0l-3.5 44.9-5.9-94.3c-.9-14.5-22.3-14.4-23.2 0l-5.1 83.7-4.3-66.3c-.9-14.4-22.2-14.4-23.2 0l-5.3 80.2-4.1-57c-1.1-14.3-22-14.3-23.2-.2l-7.7 89.8-1.8-12.2c-1.7-11.4-17.1-13.6-22-3.3l-13.2 27.7-43.9 0 0 23.2 51.3 0c4.4 0 8.4-2.5 10.4-6.4l10.7 73.1c2 13.5 21.9 13 23.1-.7l3.8-43.6 5.7 78.3c1.1 14.4 22.3 14.2 23.2-.1l4.6-70.4 4.8 73.3c.9 14.4 22.3 14.4 23.2-.1l4.9-80.5 4.5 71.8c.9 14.3 22.1 14.5 23.2 .2l4.6-58.6 4.9 64.4c1.1 14.3 22 14.2 23.1 .1l6.8-83 2.7 22.3c1.4 11.8 17.7 14.1 22.3 3.1l18-43.4 50.5 0 0-23.2-58.4 .3zm-78 5.2l-21.9 0 0 21.9c0 4.1-3.3 7.5-7.5 7.5-4.1 0-7.5-3.3-7.5-7.5l0-21.9-21.9 0c-4.1 0-7.5-3.3-7.5-7.5 0-4.1 3.4-7.5 7.5-7.5l21.9 0 0-21.9c0-4.1 3.4-7.5 7.5-7.5s7.5 3.3 7.5 7.5l0 21.9 21.9 0c4.1 0 7.5 3.3 7.5 7.5 0 4.1-3.4 7.5-7.5 7.5z\"]\n};\nvar faRedhat = {\n  prefix: 'fab',\n  iconName: 'redhat',\n  icon: [512, 512, [], \"f7bc\", \"M341.5 285.6c33.7 0 82.3-6.9 82.3-47 .2-6.7 .9-1.8-20.9-96.2-4.6-19.1-8.7-27.8-42.3-44.6-26.1-13.3-82.9-35.4-99.7-35.4-15.7 0-20.2 20.2-38.9 20.2-18 0-31.3-15.1-48.1-15.1-16.1 0-26.7 11-34.8 33.6-27.5 77.6-26.3 74.3-26.1 78.3 0 24.8 97.6 106.1 228.5 106.1zM429 254.8c4.7 22 4.7 24.3 4.7 27.2 0 37.7-42.3 58.6-98 58.6-125.7 .1-235.9-73.6-235.9-122.3 0-6.8 1.4-13.5 4.1-19.7-45.2 2.3-103.8 10.3-103.8 62 0 84.7 200.6 189 359.5 189 121.8 0 152.5-55.1 152.5-98.6 0-34.2-29.6-73-82.9-96.2z\"]\n};\nvar faSquarePiedPiper = {\n  prefix: 'fab',\n  iconName: 'square-pied-piper',\n  icon: [448, 512, [\"pied-piper-square\"], \"e01e\", \"M32.1 419l-32 60.2 .8-328C.9 85.3 54.1 32 120.1 32l327.2 0C354.3 60.9 257.4 126.2 193.4 200.6 122.8 282 82.7 338 32.1 419zm416-387S305.3 98.8 261.7 199.1c-23.2 53.6-28.9 118.1-71 158.6-28.9 27.8-69.8 38.2-105.3 56.3-23.2 12-66.4 40.5-84.9 66l328.4 0c66 0 119.3-53.3 119.3-119.2-.1 0-.1-328.8-.1-328.8z\"]\n};\nvar faPiedPiperSquare = faSquarePiedPiper;\nvar faWhatsapp = {\n  prefix: 'fab',\n  iconName: 'whatsapp',\n  icon: [448, 512, [], \"f232\", \"M380.9 97.1c-41.9-42-97.7-65.1-157-65.1-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480 117.7 449.1c32.4 17.7 68.9 27 106.1 27l.1 0c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3 18.6-68.1-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1s56.2 81.2 56.1 130.5c0 101.8-84.9 184.6-186.6 184.6zM325.1 300.5c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8s-14.3 18-17.6 21.8c-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7 .9-6.9-.5-9.7s-12.5-30.1-17.1-41.2c-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2s-9.7 1.4-14.8 6.9c-5.1 5.6-19.4 19-19.4 46.3s19.9 53.7 22.6 57.4c2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4s4.6-24.1 3.2-26.4c-1.3-2.5-5-3.9-10.5-6.6z\"]\n};\nvar faImdb = {\n  prefix: 'fab',\n  iconName: 'imdb',\n  icon: [448, 512, [], \"f2d8\", \"M89.5 323.6l-35.6 0 0-137.4 35.6 0 0 137.4zm66.6-73.1l9.1-64.3 46.3 0 0 137.4-31 0 0-92.7-13.4 92.7-21.3 0-13-90.7-.1 90.7-31.2 0 0-137.4 46.1 0c.5 8.3 2.8 18.1 4.3 29.4l4.2 34.9zm67.6 73.1l0-137.4 26.6 0c17 0 27 .9 33 2.4 6.1 1.7 10.7 4.2 13.9 7.9 3.1 3.3 5.1 6.6 5.8 12 .9 4.4 1.4 13.1 1.4 26.2l0 48.2c0 12.3-.7 20.5-1.9 24.7-1.1 4.1-3.1 7.4-6 9.7-2.8 2.4-6.4 4.1-10.7 5-4.2 .8-10.6 1.3-19.1 1.3l-43 0zm35.5-113.9l0 89.4c5.1 0 8.3-1 9.4-2.3 1.1-2 1.8-7.6 1.8-16.7l0-53.3c0-6.2-.1-10.2-.7-12-.3-1.8-1.2-3-2.6-4.7-1.4 0-4.1-.4-7.9-.4zm57.3 113.9l0-137.4 34.1 0 0 43.9c2.9-2.4 6.1-4.9 9.5-6.6 3.6-1.5 8.8-2.4 12.8-2.4 4.8 0 8.9 .8 12.3 2.2 3.4 1.5 6 3.5 8 6.2 1.7 2.6 2.7 5.3 3.1 7.8 .4 2.6-.2 8-.2 16.2l0 38.6c0 8.2 .2 14.3-.8 18.4-1.1 4-3.8 7.6-7.8 9.6-4.1 3.9-8.9 5.3-14.6 5.3-4 0-9.2-.9-12.7-2.5-3.5-1.8-6.7-4.5-9.6-8l-2.1 8.7-32 0zm45.1-20.7c.7-1.8 1-6 1-12.5l0-35.4c0-5.6-.3-9.5-1.1-11.2-.7-1.9-3.7-2.7-5.8-2.7-2 0-3.4 .8-4.1 2.3-.6 1.5-1 5.4-1 11.6l0 36.4c0 6.1 .4 10 1.2 11.6 .6 1.7 2.1 2.5 4.1 2.5 2.2 0 4.2-.8 5.7-2.6zM418.4 32c15.7 1.2 28.7 15.2 28.7 31.9l0 384.2c0 16.4-11.9 30.4-28.2 31-.3 0-.5 .9-.8 .9L29.9 480c-.3 0-.6-.9-.8-.1-15.7-1.4-27.9-13.8-29-30.2L0 61.8C1.1 45.9 13.8 33.1 30.3 31.1l387.4 0c.2 0 .5 .9 .7 .9zM30.3 41.3C19 42 10 51 9.3 62.4l0 387.3c.4 5.4 2.7 10.5 6.4 14.3 3.8 3.9 8.8 6.3 14.2 6.7l388.2 0c11.5-1 20.6-11.6 20.6-22.6l0-384.2c0-5.7-2.1-11.3-6-15.5s-9.3-6.8-15-7.2l-387.4 0z\"]\n};\nvar faPython = {\n  prefix: 'fab',\n  iconName: 'python',\n  icon: [448, 512, [], \"f3e2\", \"M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2l-40.1 0 0 47.4c0 36.8-31.2 67.8-66.8 67.8l-106.8 0c-29.2 0-53.4 25-53.4 54.3l0 101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3l0-40.7-106.7 0 0-13.6 160.2 0c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 444.7a20.4 20.4 0 1 1 0-40.7 20.4 20.4 0 1 1 0 40.7zM167.8 248.1l106.8 0c29.7 0 53.4-24.5 53.4-54.3l0-101.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8 .1-45.2 8-53.4 24.7-53.4 55.6l0 40.7 106.9 0 0 13.6-147 0c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2l36.7 0 0-48.8c0-35.3 30.5-66.4 66.8-66.4zM161.2 64.7a20.4 20.4 0 1 1 0 40.8 20.4 20.4 0 1 1 0-40.8z\"]\n};\nvar faCashApp = {\n  prefix: 'fab',\n  iconName: 'cash-app',\n  icon: [448, 512, [], \"e7d4\", \"M440.3 96.9c-9.4-26.5-30.3-47.4-56.8-57-24.1-7.9-46.3-7.9-91.6-7.9L156 32c-44.8 0-67.2 0-91.3 7.5-26.5 9.6-47.4 30.5-57 57-7.7 24.3-7.7 46.7-7.7 91.7L0 323.8c0 45.2 0 67.4 7.5 91.5 9.6 26.5 30.5 47.4 57 57 24.3 7.7 46.7 7.7 91.6 7.7l135.7 0c45 0 67.4 0 91.6-7.7 26.5-9.6 47.4-30.5 57-57 7.7-24.3 7.7-46.7 7.7-91.5l0-135.5c0-45 0-67.4-7.7-91.5zM323.1 185.4l-25.8 21.1c-2.3 1.9-5.5 1.5-7.3-.9-13.2-16.2-33.7-25.4-56.1-25.4-25 0-40.6 10.9-40.6 26.2-.4 12.8 11.7 19.6 49.1 27.7 47.2 10 68.7 29.7 68.7 62.7 0 41.4-33.7 71.9-86.4 75.3l-5.1 24.5c-.4 2.3-2.6 4.1-5.1 4.1l-40.6 0c-3.4 0-5.8-3.2-5.1-6.4l6.4-27.3c-26-7.5-47.2-22-59.3-39.7-1.5-2.3-1.1-5.3 1.1-7l28.2-22c2.3-1.9 5.8-1.3 7.5 1.1 14.9 20.9 38 33.3 65.7 33.3 25 0 43.8-12.2 43.8-29.7 0-13.4-9.4-19.6-41.2-26.2-54.2-11.7-75.8-31.8-75.8-64.9 0-38.4 32.2-67.2 80.9-71l5.3-25.4c.4-2.3 2.6-4.1 5.1-4.1l39.9 0c3.2 0 5.8 3 5.1 6.2l-6.2 28.4c20.9 6.4 38 17.9 48.7 32.2 1.7 2.1 1.3 5.3-.9 7z\"]\n};\nvar faInternetArchive = {\n  prefix: 'fab',\n  iconName: 'internet-archive',\n  icon: [448, 512, [], \"e8b1\", \"M450.8 512l-452.7 0 0-23.2 452.7 0 0 23.2zm-17-35.7l-417.8 0 0-32.2 417.8 0 0 32.2zM47.6 132.1c6.2 0 12.3 .7 18.4 1.9 1.5 .3 2.2 .6 2.3 2.4 1 20.6 2.3 41.3 2.9 61.9 .9 21.9 1.5 43.8 1.8 65.7 .3 15.5 .1 31.1-.1 46.6-.3 17.3-.7 34.5-1.4 51.8-.7 18.4-1.9 36.9-2.9 55.4-.2 3.5-.5 7-.8 10.5-6.8 1.8-13.6 2.8-20.3 2.9-6.7-.1-13.5-1.1-20.3-2.9-.3-3.4-.6-6.9-.8-10.5-1-18.4-2.1-36.9-2.9-55.4-.7-17.3-1.1-34.5-1.4-51.8-.2-15.5-.3-31.1-.1-46.6 .4-21.9 1-43.8 1.8-65.7 .7-20.6 2.1-41.3 3.1-61.9 .1-1.7 .9-2.1 2.3-2.4 6.1-1.3 12.3-1.9 18.4-1.9zm113.1 0c6.2 0 12.3 .7 18.4 1.9 1.5 .3 2.2 .6 2.3 2.4 1 20.6 2.4 41.3 2.9 61.9 .9 21.9 1.5 43.8 1.8 65.7 .3 15.5 .1 31.1-.1 46.6-.3 17.3-.6 34.5-1.4 51.8-.7 18.4-1.9 36.9-2.9 55.4-.2 3.5-.5 7-.8 10.5-6.8 1.8-13.6 2.8-20.3 2.9-6.7-.1-13.5-1.1-20.3-2.9-.3-3.4-.7-6.9-.9-10.5-1-18.4-2.1-36.9-2.9-55.4-.7-17.3-1.1-34.5-1.4-51.8-.2-15.5-.3-31.1-.1-46.6 .4-21.9 1-43.8 1.8-65.7 .7-20.6 2.2-41.3 3.1-61.9 .1-1.7 .8-2.1 2.3-2.4 6.1-1.3 12.3-1.9 18.4-1.9zm131.2 0c6.2 0 12.3 .7 18.4 1.9 1.5 .3 2.2 .6 2.3 2.4 1.1 20.6 2.3 41.3 2.9 61.9 .9 21.9 1.5 43.8 1.8 65.7 .3 15.5 .1 31.1-.1 46.6-.3 17.3-.7 34.5-1.4 51.8-.7 18.4-1.9 36.9-2.9 55.4-.2 3.5-.5 7-.8 10.5-6.8 1.8-13.6 2.8-20.3 2.9-6.7-.1-13.5-1.1-20.3-2.9-.3-3.4-.6-6.9-.8-10.5-1-18.4-2.1-36.9-2.9-55.4-.7-17.3-1.1-34.5-1.4-51.8-.2-15.5-.3-31.1-.1-46.6 .4-21.9 1-43.8 1.8-65.7 .7-20.6 2.1-41.3 3.1-61.9 .1-1.7 .9-2.1 2.3-2.4 6.1-1.3 12.3-1.9 18.4-1.9zm110.5 0c6.2 0 12.3 .7 18.4 1.9 1.5 .3 2.3 .6 2.4 2.4 1.1 20.6 2.3 41.3 2.9 61.9 .9 21.9 1.5 43.8 1.8 65.7 .3 15.5 .1 31.1-.1 46.6-.3 17.3-.7 34.5-1.4 51.8-.7 18.4-1.9 36.9-2.9 55.4-.2 3.5-.6 7-.9 10.5-6.8 1.8-13.6 2.8-20.3 2.9-6.7-.1-13.5-1.1-20.3-2.9-.3-3.4-.6-6.9-.8-10.5-1-18.4-2.2-36.9-2.9-55.4-.7-17.3-1.1-34.5-1.4-51.8-.2-15.5-.3-31.1-.1-46.6 .4-21.9 1-43.8 1.8-65.7 .7-20.6 2.1-41.3 3.1-61.9 .1-1.7 .9-2.1 2.3-2.4 6.1-1.3 12.3-1.9 18.4-1.9zm26.4-9.3l-415.5 0 0-44.6 415.5 0 0 44.6zm9.8-71.8L426.2 64.7 16 64.7 3.5 50.9 221.1 0 438.6 50.9z\"]\n};\nvar faPinterestP = {\n  prefix: 'fab',\n  iconName: 'pinterest-p',\n  icon: [384, 512, [], \"f231\", \"M204 6.5c-102.6 0-204 68.4-204 179.1 0 70.4 39.6 110.4 63.6 110.4 9.9 0 15.6-27.6 15.6-35.4 0-9.3-23.7-29.1-23.7-67.8 0-80.4 61.2-137.4 140.4-137.4 68.1 0 118.5 38.7 118.5 109.8 0 53.1-21.3 152.7-90.3 152.7-24.9 0-46.2-18-46.2-43.8 0-37.8 26.4-74.4 26.4-113.4 0-66.2-93.9-54.2-93.9 25.8 0 16.8 2.1 35.4 9.6 50.7-13.8 59.4-42 147.9-42 209.1 0 18.9 2.7 37.5 4.5 56.4 3.4 3.8 1.7 3.4 6.9 1.5 50.4-69 48.6-82.5 71.4-172.8 12.3 23.4 44.1 36 69.3 36 106.2 0 153.9-103.5 153.9-196.8 0-99.3-85.8-164.1-180-164.1z\"]\n};\nvar faWhmcs = {\n  prefix: 'fab',\n  iconName: 'whmcs',\n  icon: [448, 512, [], \"f40d\", \"M448 161l0-21.3-28.5-8.8-2.2-10.4 20.1-20.7-10.4-19.4-29 7.5-7.2-7.5 7.5-28.2-19.1-11.6-21.3 21-10.7-3.2-7-26.4-22.6 0-6.2 26.4-12.1 3.2-19.7-21-19.4 11 8.1 27.7-8.1 8.4-28.5-7.5-11 19.1 20.7 21-2.9 10.4-28.5 7.8-.3 21.7 28.8 7.5 2.4 12.1-20.1 19.9 10.4 18.5 29.6-7.5 7.2 8.6-8.1 26.9 19.9 11.6 19.4-20.4 11.6 2.9 6.7 28.5 22.6 .3 6.7-28.8 11.6-3.5 20.7 21.6 20.4-12.1-8.8-28 7.8-8.1 28.8 8.8 10.3-20.1-20.9-18.8 2.2-12.1 29.1-7zM328.8 92.6a56.8 56.8 0 1 1 0 113.6 56.8 56.8 0 1 1 0-113.6zm72.3 130l46.9 14.5 0 39.9-55.1 13.4-4.1 22.7 38.9 35.3-19.2 37.9-54-16.7-14.6 15.2 16.7 52.5-38.3 22.7-38.9-40.5-21.7 6.6-12.6 54-42.4-.5-12.6-53.6-21.7-5.6-36.4 38.4-37.4-21.7 15.2-50.5-13.7-16.1-55.5 14.1-19.7-34.8 37.9-37.4-4.8-22.8-54-14.1 .5-40.9 53.5-14.7 5.7-19.7-38.9-39.4 20.7-35.8 53.6 14.1 15.2-15.7-15.2-52 36.4-20.7 36.8 39.4 22.7-6.1 11.6-52 42.4 0 11.6 45.9-22.6-5.9-6.3-1.7-3.3 5.7-11 19.1-3.3 5.6 4.6 4.6 17.2 17.4-.3 1-23.8 6.5-6.2 1.7c0 3.2-.1 9.6-.3 19.3-47.5 10.4-83.3 52.8-83.3 103.5 0 58.3 47.3 105.7 105.7 105.7 50.5 0 92.7-35.4 103.2-82.8 9.9 .1 16.6 .2 20.1 .3l1.6-6.7 5.6-24 1.9-.6 17.1 17.8 4.7 4.9 5.8-3.4 20.4-12.1 5.8-3.5-2-6.5-6.8-21.2z\"]\n};\nvar faJoget = {\n  prefix: 'fab',\n  iconName: 'joget',\n  icon: [512, 512, [], \"f3b7\", \"M386.1 45C345.6 19.9 300.6 8 256.2 8 173 8 91.8 49.9 44.9 125.9-27 242.5 9.3 395.2 125.9 467.1s269.3 35.6 341.2-80.9C539 269.6 502.7 116.8 386.1 45zm51.8 323.2c-40.4 65.5-110.4 101.5-182 101.5-6.8 0-13.6-.4-20.4-1-9-13.6-19.9-33.3-23.7-42.4-5.7-13.7-27.2-45.6 31.2-67.1 51.7-19.1 176.7-16.5 208.8-17.6-4 9-8.6 17.9-13.9 26.6zM237.1 281.9c-55.5-1.4-81.7-20.8-58.5-48.2s51.1-40.7 68.9-51.2c17.9-10.5 27.3-33.7-23.6-29.7-128.6 8.7-167.3 99.3-178.3 140.2-8.8-49.7-.1-102.7 28.5-149.1 61.9-100.5 193.5-131.7 294-69.8 74.8 46.1 111.2 130.9 99.3 212.7-24.9-.5-179.3-3.6-230.3-4.9zm183.8-54.8c-22.7-6-57 11.3-86.7 27.2-29.7 15.8-31.1 8.2-31.1 8.2s40.2-28.1 50.7-34.5 31.9-14 13.4-24.6c-3.2-1.8-6.7-2.7-10.4-2.7-17.8 0-41.5 18.7-67.5 35.6-31.5 20.5-65.3 31.3-65.3 31.3L393.5 266 440 242.6s3.6-9.5-19.1-15.5z\"]\n};\nvar faSquareYoutube = {\n  prefix: 'fab',\n  iconName: 'square-youtube',\n  icon: [448, 512, [61798, \"youtube-square\"], \"f431\", \"M282 256.2l-95.2-54.1 0 108.2 95.2-54.1zM384 32L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64zm14.4 136.1c7.6 28.6 7.6 88.2 7.6 88.2s0 59.6-7.6 88.1c-4.2 15.8-16.5 27.7-32.2 31.9-28.3 7.7-142.2 7.7-142.2 7.7s-113.9 0-142.2-7.6c-15.7-4.2-28-16.1-32.2-31.9-7.6-28.6-7.6-88.2-7.6-88.2s0-59.7 7.6-88.2c4.2-15.8 16.5-28.2 32.2-32.4 28.3-7.7 142.2-7.7 142.2-7.7s113.9 0 142.2 7.7c15.7 4.2 28 16.6 32.2 32.4z\"]\n};\nvar faYoutubeSquare = faSquareYoutube;\nvar faAtlassian = {\n  prefix: 'fab',\n  iconName: 'atlassian',\n  icon: [512, 512, [], \"f77b\", \"M152.2 236.4c-7.7-8.2-19.7-7.7-24.8 2.8L1.6 490.2c-5 10 2.4 21.7 13.4 21.7l175 0c5.8 .1 11-3.2 13.4-8.4 37.9-77.8 15.1-196.3-51.2-267.1zM244.4 8.1c-122.3 193.4-8.5 348.6 65 495.5 2.5 5.1 7.7 8.4 13.4 8.4L497 512c11.2 0 18.4-11.8 13.4-21.7 0 0-234.5-470.6-240.4-482.3-5.3-10.6-18.8-10.8-25.6 .1z\"]\n};\nvar faPiedPiperHat = {\n  prefix: 'fab',\n  iconName: 'pied-piper-hat',\n  icon: [640, 512, [], \"f4e5\", \"M640 24.9c-80.8 53.6-89.4 92.5-96.4 104.4-6.7 12.2-11.7 60.3-23.3 83.6-11.7 23.6-54.2 42.2-66.1 50-11.7 7.8-28.3 38.1-41.9 64.2-108.1-4.4-167.4 38.8-259.2 93.6 29.4-9.7 43.3-16.7 43.3-16.7 94.2-36 139.3-68.3 281.1-49.2 1.1 0 1.9 .6 2.8 .8 3.9 2.2 5.3 6.9 3.1 10.8l-53.9 95.8c-2.5 4.7-7.8 7.2-13.1 6.1-126.8-23.8-226.9 17.3-318.9 18.6-73.4 1.1-97.5-33.5-97.5-35.1 0-1.1 .6-1.7 1.7-1.7 0 0 38.3 0 103.1-15.3 73.6-140.3 139.2-189.4 210.6-189.4 0 0 71.7 0 90.6 61.9 22.8-39.7 28.3-49.2 28.3-49.2 5.3-9.4 35-77.2 86.4-141.4 51.5-64 90.4-79.9 119.3-91.8z\"]\n};\nvar faInternetExplorer = {\n  prefix: 'fab',\n  iconName: 'internet-explorer',\n  icon: [512, 512, [], \"f26b\", \"M483.1 159.7c10.9-24.6 21.4-60.4 21.4-87.9 0-72.7-79.6-98.4-209.7-38.6-107.6-7.2-211.2 73.7-237.1 186.5 30.9-34.9 78.3-82.3 122-101.2-54.3 48.3-100.6 109.4-135.7 173.2-20.7 37.9-44 99.2-44 145 0 98.6 92.9 86.5 180.3 42 31.4 15.4 66.6 15.6 101.7 15.6 97.1 0 184.2-54.3 216.8-146l-120.8 0c-52.5 88.6-196.8 53-196.8-47.4l328.8 0c6.4-43.6-1.7-95.7-26.9-141.2zM64.6 346.9C82.3 398 118.3 442.7 164.8 470.2 76.1 519.1-8.4 499.3 64.6 346.9zM180.5 238c2-55.2 50.3-94.9 104-94.9 53.4 0 102 39.7 104 94.9l-208 0zM365.1 50.4c21.4-10.3 48.6-22 72.6-22 31.4 0 54.3 21.7 54.3 53.7 0 20-7.4 49-14.6 67.9-26.3-42.3-66-81.6-112.3-99.6z\"]\n};\nvar faAirbnb = {\n  prefix: 'fab',\n  iconName: 'airbnb',\n  icon: [448, 512, [], \"f834\", \"M224.5 373.1c-25.2-31.7-40.1-59.4-45-83.2-22.5-88 112.6-88 90.1 0-5.4 24.2-20.3 52-45 83.2l-.1 0zm138.2 73.2c-42.1 18.3-83.7-10.9-119.3-50.5 103.9-130.1 46.1-200-18.8-200-54.9 0-85.2 46.5-73.3 100.5 6.9 29.2 25.2 62.4 54.4 99.5-32.5 36-60.5 52.7-85.2 54.9-50 7.4-89.1-41.1-71.3-91.1 15.1-39.2 111.7-231.2 115.9-241.6 15.8-30.1 25.6-57.4 59.4-57.4 32.3 0 43.4 25.9 60.4 59.9 36 70.6 89.4 177.5 114.8 239.1 13.2 33.1-1.4 71.3-37 86.6zm47-136.1c-128.9-274.3-136-278.2-185.1-278.2-45.5 0-64.9 31.7-84.7 72.8-106.2 212.3-116.4 242.4-117.3 245-25.2 69.3 26.7 130.2 89.6 130.2 21.7 0 60.6-6.1 112.4-62.4 58.7 63.8 101.3 62.4 112.4 62.4 62.9 .1 114.9-60.9 89.6-130.2 0-3.9-16.8-38.9-16.8-39.6l0 0z\"]\n};\nvar faJs = {\n  prefix: 'fab',\n  iconName: 'js',\n  icon: [448, 512, [], \"f3b8\", \"M0 32l0 448 448 0 0-448-448 0zM243.8 381.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5L152 385.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5l0-143.1 42.1 0 0 143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43L301 382.1c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z\"]\n};\nvar faQuinscape = {\n  prefix: 'fab',\n  iconName: 'quinscape',\n  icon: [512, 512, [], \"f459\", \"M313.7 474.6l-1 0c-41.9 0-82.1-16.7-111.8-46.3s-46.3-69.9-46.3-111.8 16.7-82.1 46.3-111.8 69.9-46.3 111.8-46.3c94.9 0 168.2 83.1 157 176.6 4 5.1 8.2 9.6 11.2 15.3 13.4-30.3 20.3-62.4 20.3-97.7 0-135.1-109.5-244.6-244.6-244.6S12.1 117.5 12.1 252.6 121.6 497.2 256.6 497.2c23.8 .2 47.6-3.2 70.4-10.1-5.2-3.5-8.9-8.1-13.3-12.5zm78.3-169a99.2 99.2 0 1 0 0 198.4 99.2 99.2 0 1 0 0-198.4z\"]\n};\nvar faAdversal = {\n  prefix: 'fab',\n  iconName: 'adversal',\n  icon: [512, 512, [], \"f36a\", \"M482.1 32L28.7 32C5.8 32 0 37.9 0 60.9L0 451.1C0 474.4 5.8 480 28.7 480l453.4 0c24.4 0 29.9-5.2 29.9-29.7l0-388.1c0-24.6-5.4-30.2-29.9-30.2zM178.4 220.3c-27.5-20.2-72.1-8.7-84.2 23.4-4.3 11.1-9.3 9.5-17.5 8.3-9.7-1.5-17.2-3.2-22.5-5.5-28.8-11.4 8.6-55.3 24.9-64.3 41.1-21.4 83.4-22.2 125.3-4.8 40.9 16.8 34.5 59.2 34.5 128.5 2.7 25.8-4.3 58.3 9.3 88.8 1.9 4.4 .4 7.9-2.7 10.7-8.4 6.7-39.3 2.2-46.6-7.4-1.9-2.2-1.8-3.6-3.9-6.2-3.6-3.9-7.3-2.2-11.9 1-57.4 36.4-140.3 21.4-147-43.3-3.1-29.3 12.4-57.1 39.6-71 38.2-19.5 112.2-11.8 114-30.9 1.1-10.2-1.9-20.1-11.3-27.3zm286.7 222c0 15.1-11.1 9.9-17.8 9.9l-394.9 0c-7.4 0-18.2 4.8-17.8-10.7 .4-13.9 10.5-9.1 17.1-9.1 132.3-.4 264.5-.4 396.8 0 6.8 0 16.6-4.4 16.6 9.9zm3.8-340.5l0 291c0 5.7-.7 13.9-8.1 13.9-12.4-.4-27.5 7.1-36.1-5.6-5.8-8.7-7.8-4-12.4-1.2-53.4 29.7-128.1 7.1-144.4-85.2-6.1-33.4-.7-67.1 15.7-100 11.8-23.9 56.9-76.1 136.1-30.5l0-71c0-26.2-.1-26.2 26-26.2 3.1 0 6.6 .4 9.7 0 10.1-.8 13.6 4.4 13.6 14.3-.1 .2-.1 .3-.1 .5zM417.4 334.1c-19.5 47.6-72.9 43.3-90 5.2-15.1-33.3-15.5-68.2 .4-101.5 16.3-34.1 59.7-35.7 81.5-4.8 20.6 28.8 14.9 84.6 8.1 101.1zM122.6 369.4c-7.5-1.3-33-3.3-33.7-27.8-.4-13.9 7.8-23 19.8-25.8 24.4-5.9 49.3-9.9 73.7-14.7 8.9-2 7.4 4.4 7.8 9.5 1.4 33-26.1 59.2-67.6 58.8z\"]\n};\nvar faCreativeCommons = {\n  prefix: 'fab',\n  iconName: 'creative-commons',\n  icon: [512, 512, [], \"f25e\", \"M253.8 214.9l-33.2 17.3c-9.4-19.6-25.2-19.9-27.5-19.9-22.1 0-33.2 14.6-33.2 43.8 0 23.6 9.2 43.8 33.2 43.8 14.5 0 24.6-7.1 30.6-21.3l30.6 15.5c-6.2 11.5-25.7 39-65.1 39-22.6 0-74-10.3-74-77 0-58.7 43-77.1 72.6-77.1 30.7 0 52.7 11.9 66 35.9zm143 0l-32.8 17.3c-9.5-19.8-25.7-19.9-27.9-19.9-22.1 0-33.2 14.6-33.2 43.8 0 23.5 9.2 43.8 33.2 43.8 14.4 0 24.6-7.1 30.5-21.3l31 15.5c-2.1 3.8-21.4 39-65.1 39-22.7 0-74-9.9-74-77 0-58.7 43-77.1 72.6-77.1 30.7 0 52.6 11.9 65.6 35.9zM255.6 8C112.7 8 8 123.1 8 256.1 8 394.5 121.6 504.1 255.6 504.1 385.5 504.1 504 403.2 504 256.1 504 118.2 397.4 8 255.6 8zm.9 450.8c-112.5 0-203.7-93-203.7-202.8 0-105.4 85.4-203.3 203.7-203.3 112.5 0 202.8 89.5 202.8 203.3 0 121.7-99.7 202.8-202.8 202.8z\"]\n};\nvar faNotion = {\n  prefix: 'fab',\n  iconName: 'notion',\n  icon: [512, 512, [], \"e7d9\", \"M94.9 100.2c14.9 12.1 20.5 11.2 48.6 9.3L407.8 93.6c5.6 0 .9-5.6-.9-6.5L362.9 55.4c-8.4-6.5-19.6-14-41.1-12.1L65.9 61.9c-9.3 .9-11.2 5.6-7.5 9.3l36.4 28.9zm15.9 61.6l0 278.1c0 14.9 7.5 20.5 24.3 19.6l290.5-16.8c16.8-.9 18.7-11.2 18.7-23.3l0-276.2c0-12.1-4.7-18.7-15-17.7L125.7 143.1c-11.2 .9-14.9 6.5-14.9 18.7zm286.7 14.9c1.9 8.4 0 16.8-8.4 17.8l-14 2.8 0 205.3c-12.2 6.5-23.4 10.3-32.7 10.3-15 0-18.7-4.7-29.9-18.7l-91.5-143.7 0 139 29 6.5s0 16.8-23.4 16.8l-64.4 3.7c-1.9-3.7 0-13.1 6.5-14.9l16.8-4.7 0-183.8-23.3-1.9c-1.9-8.4 2.8-20.5 15.9-21.5l69.1-4.7 95.3 145.6 0-128.8-24.3-2.8c-1.9-10.3 5.6-17.7 14.9-18.7l64.5-3.8zM44.4 36.7L310.6 17.1c32.7-2.8 41.1-.9 61.6 14l85 59.7c14 10.3 18.7 13.1 18.7 24.3l0 327.6c0 20.5-7.5 32.7-33.6 34.5L133.2 495.8c-19.6 .9-29-1.9-39.2-14.9L31.4 399.7c-11.2-14.9-15.9-26.1-15.9-39.2l0-291.2c0-16.8 7.5-30.8 28.9-32.7z\"]\n};\nvar faCopilot = {\n  prefix: 'fab',\n  iconName: 'copilot',\n  icon: [512, 512, [], \"e8c7\", \"M255.5 42.2c58.2 0 101.6 20.4 131.5 44.6 12.5 5 23 11.7 31.4 20.3 18.1 18.5 24.2 43.4 24.2 71.8 0 7.9-.3 15.6-1.1 23.2 4.9 9.9 10.2 23.2 13.8 32.3 26.8 7.8 47.6 36.7 55.5 56.7 .9 2.2 1.3 4.5 1.3 6.9l0 56.7c0 2.7-.4 5.4-1.8 7.7-18.4 31.9-124.9 107.1-254.2 107.1S20.1 394.3 1.8 362.4c-1.3-2.3-1.8-5-1.8-7.7L0 298c0-2.3 .4-4.7 1.2-6.9 7.9-19.9 28.7-48.9 55.6-56.7 3.6-9.1 8.8-22.5 13.8-32.3-.8-7.5-1.1-15.3-1.1-23.2 0-28.4 6-53.3 24.2-71.8 8.5-8.7 19-15.3 31.4-20.3 29.8-24.2 72.3-44.6 130.5-44.6zm-3.2 192.4c-2.3 3.8-4.8 7.4-7.6 10.8-16.4 20.2-40.9 31.8-74.8 31.8-36.8 0-63.7-7.7-80.7-26.8-.9-1-1.7-2.1-1.8-2.2l-2.1 2.2 0 140.4c30.6 16.6 96.3 46.5 170.6 46.5s140-29.8 170.6-46.5l0-140.4-2.1-2.2c-.1 .1-.8 1-1.8 2.2-16.9 19.2-43.9 26.8-80.7 26.8-33.9 0-58.4-11.6-74.8-31.8-2.8-3.4-5.3-7.1-7.5-10.8-1.2 0-6.1 0-7.4 0zM202.7 304c11.8 0 21.3 9.5 21.3 21.3l0 42.7c0 11.8-9.5 21.3-21.3 21.3s-21.3-9.5-21.3-21.3l0-42.7c0-11.8 9.5-21.3 21.3-21.3zm106.6 0c11.8 0 21.3 9.5 21.3 21.3l0 42.7c0 11.8-9.5 21.3-21.3 21.3S288 379.7 288 367.9l0-42.7c0-11.8 9.5-21.3 21.3-21.3zM176.7 107.7c-32.1 3.5-50 11.4-60.2 21.8-9.9 10.1-15 25.2-15 49.5 0 25.8 3.7 41.1 11.9 50.3 7.8 8.8 23.1 16 56.7 16 25.8 0 40.5-8.4 50-20 10.1-12.5 15.8-30.7 18.7-53.2 .9-7.1 1.3-13.4 1.3-19.1l0-.5c0-16.4-3.6-27.1-9.3-33.6-7.3-8.3-22.3-14.7-54-11.3zm158.7 0c-31.7-3.4-46.7 3-54 11.3-5.7 6.6-9.3 17.2-9.3 33.6l0 .5c0 5.7 .4 12 1.3 19.1 2.9 22.5 8.6 40.8 18.7 53.2 9.4 11.6 24.2 20 50 20 33.6 0 48.9-7.2 56.7-16 8.2-9.3 11.9-24.5 11.9-50.3 0-24.3-5.2-39.4-15-49.5-10.2-10.4-28.1-18.4-60.2-21.8z\"]\n};\nvar faChromecast = {\n  prefix: 'fab',\n  iconName: 'chromecast',\n  icon: [512, 512, [], \"f838\", \"M448 64L64.2 64c-23.6 0-42.7 19.1-42.7 42.7l0 63.9 42.7 0 0-63.9 383.8 0 0 298.6-149.2 0 0 42.7 149.4 0c23.6 0 42.7-19.1 42.7-42.7l0-298.6C490.9 83.1 471.6 64 448 64zM21.5 383.6l0 63.9 63.9 0c0-35.3-28.6-63.9-63.9-63.9zm0-85l0 42.4c58.9 0 106.6 48.1 106.6 107l42.7 0c.1-82.4-66.9-149.3-149.3-149.4zM213.6 448l42.7 0C255.8 318.5 151 213.7 21.5 213.4l0 42.4c106-.2 192 86.2 192.1 192.2z\"]\n};\nvar faUltralyticsHub = {\n  prefix: 'fab',\n  iconName: 'ultralytics-hub',\n  icon: [512, 512, [], \"e86e\", \"M130.4 16c60.9 0 110.4 49.5 110.4 110.4l0 24.9c4.8-.7 9.7-1 14.6-1 88.1-.2 165.1 49 205.4 121.2-22.8-16.2-50.7-25.4-80.4-25.3-77.1 .2-139.5 62.6-139.6 139.4-.1 60.9-49.5 110.3-110.7 110.5-60.6 .2-110.2-49.5-110.2-110.5 .2-2.6 0 0 .1-3.2l0-256C20.1 65.5 69.5 16 130.4 16zM380.3 496a110.4 110.4 0 1 1 0-220.9 110.4 110.4 0 1 1 0 220.9z\"]\n};\nvar faWikipediaW = {\n  prefix: 'fab',\n  iconName: 'wikipedia-w',\n  icon: [640, 512, [], \"f266\", \"M640 51.2l-.3 12.2c-28.1 .8-45 15.8-55.8 40.3-25 57.8-103.3 240-155.3 358.6l-13.6 0-81.9-193.1c-32.5 63.6-68.3 130-99.2 193.1-.3 .3-15 0-15-.3-46.9-109.7-96.1-218.6-143.1-328.6-11.4-26.7-49.4-70-75.6-69.7 0-3.1-.3-10-.3-14.2l161.9 0 0 13.9c-19.2 1.1-52.8 13.3-43.3 34.2 21.9 49.7 103.6 240.3 125.6 288.6 15-29.7 57.8-109.2 75.3-142.8-13.9-28.3-58.6-133.9-72.8-160-9.7-17.8-36.1-19.4-55.8-19.7l0-13.9 142.5 .3 0 13.1c-19.4 .6-38.1 7.8-29.4 26.1 18.9 40 30.6 68.1 48.1 104.7 5.6-10.8 34.7-69.4 48.1-100.8 8.9-20.6-3.9-28.6-38.6-29.4 .3-3.6 0-10.3 .3-13.6 44.4-.3 111.1-.3 123.1-.6l0 13.6C462.4 64 439.1 76 426.8 94.9L367.6 217.7c6.4 16.1 63.3 142.8 69.2 156.7L559.2 91.8c-8.6-23.1-36.4-28.1-47.2-28.3l0-13.9 127.8 1.1 .2 .5z\"]\n};\nvar faSitrox = {\n  prefix: 'fab',\n  iconName: 'sitrox',\n  icon: [448, 512, [], \"e44a\", \"M212.4 0l0 0 235.6 0 0 128-384 0C64 57.6 141.8 .5 212.4 0zm24.8 192l0 0c69.9 .5 146.7 57.6 146.7 128l-173.2 0 0 0C140.9 319.6 64 262.4 64 192l173.3 0zm-1.7 320c70.7-.5 148.4-57.6 148.4-128l-384 0 0 128 235.6 0 0 0z\"]\n};\nvar faSquareGitlab = {\n  prefix: 'fab',\n  iconName: 'square-gitlab',\n  icon: [448, 512, [\"gitlab-square\"], \"e5ae\", \"M0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96zm337.5 12.5l44.6 116.4 .4 1.2c5.6 16.8 7.2 35.2 2.3 52.5-5 17.2-15.4 32.4-29.8 43.3l-.2 .1-68.4 51.2-54.1 40.9c-.5 .2-1.1 .5-1.7 .8-2 1-4.4 2-6.7 2-3 0-6.8-1.8-8.3-2.8l-54.2-40.9-67.9-50.9-.4-.3-.2-.1c-14.3-10.8-24.8-26-29.7-43.3s-4.2-35.7 2.2-52.5l.5-1.2 44.7-116.4c.9-2.3 2.5-4.3 4.5-5.6 1.6-1 3.4-1.6 5.2-1.8 1.3-.7 2.1-.4 3.4 .1 .6 .2 1.2 .5 2 .7 1 .4 1.6 .9 2.4 1.5 .6 .4 1.2 1 2.1 1.5 1.2 1.4 2.2 3 2.7 4.8l29.2 92.2 122.9 0 30.2-92.2c.5-1.8 1.4-3.4 2.6-4.8s2.8-2.4 4.5-3.1c1.7-.6 3.6-.9 5.4-.7s3.6 .8 5.2 1.8c2 1.3 3.7 3.3 4.6 5.6z\"]\n};\nvar faGitlabSquare = faSquareGitlab;\nvar faShoelace = {\n  prefix: 'fab',\n  iconName: 'shoelace',\n  icon: [512, 512, [], \"e60c\", \"M405.2 331c2.2-1.1 4.4-2.3 6.5-3.7l8.3-4.8c1.5-1.1 4.4-3.4 8.7-6.7l.5-.5c3.4-3.4 7.2-5 11.3-4.9 1.8 0 3.9 .5 6.4 1.5l31-27.5c.9-.7 1.7-1.3 2.6-1.8l.2 0c3.3-1.9 6-1.8 8.2 .4 3.9 2.1 4.2 5.6 .9 10.6L457.2 322c.2 .5 .4 1 .4 1.5 .5 2.2 .3 4.4-.5 6.6-.7 1.5-1.8 2.9-3.1 4.2-1.4 1.4-2.7 2.8-4.2 4.2L431 352.2c-1.7 1.2-3.4 2.3-5.1 3.3-2.1 1.3-4.3 2.5-6.6 3.6-1 .4-1.9 .9-2.9 1.3-5.9 2.5-11.9 4.2-18.2 5-2.9 24.5-11.3 47.1-25.1 67.8-17.5 25.7-41.4 45.4-71.8 58.8-30.2 13.5-63 20.2-98.2 20.2-48.6-.5-88-11.4-118.2-32.8-35.1-25-52.6-57.9-52.6-99.1l0-5.6c1.2-28.1 9.5-54.6 24.8-79.8 15.1-24.9 37.1-41.7 66.1-50.5 14.9-4.4 29.9-6.6 45-6.6 15.5 0 31.6 2.9 48.1 8.6s35.2 15.5 55.9 29.5l54.1 36.3c15.1 9.8 28.8 16.5 41.2 20-2.6-25.1-11.7-46.6-27.3-64.5-15.7-18.1-35.6-31.3-59.9-39.7L257 220c-21.4-7.5-37.3-14.9-47.7-22.2-28.2-19.1-43.8-45.2-47-78.5l-.5-9.8c0-32.1 13-58.9 39-80.5 23-19.3 50.6-29 82.5-29 24 0 45.6 6.9 64.7 20.8 19.2 14 30.1 33.8 32.6 59.4l.5 10c0 18.6-4.8 34.5-14.4 47.7-9.8 13.2-18.5 19.9-26 19.9-1.6-.1-3.1-.3-4.5-.6l-34 32c-5.5 3-9.2 2.5-11.1-1.6-1.9-2.2-1.8-4.9 .5-8.2l.2-.2c.5-.7 1.2-1.5 2-2.4l31.6-30c-.4-1.5-.6-3.1-.6-4.8 0-4.1 1.6-7.6 4.9-10.4 13.8-12.4 20.8-26.7 20.8-42.8 0-16-6.1-29.5-18.2-40.4s-28.7-16.5-49.7-16.8c-26.2 0-47.8 7.9-64.7 23.7S192.6 89.9 192.6 112c0 17.8 6.9 33.9 20.6 48.3 13.6 14.2 34.6 25.4 63 33.5 39.8 11.5 70.2 31 91.3 58.3 18.7 24.2 29.1 51.3 31.3 81.4 2.2-.7 4.3-1.5 6.5-2.6l-.1 .1zM294.4 178.7c0 1.1 .6 1.6 1.8 1.6 .1 0 9.7-8.9 28.8-26.6 0-2.4-5.1 .9-15.3 10-10.2 9.2-15.3 14.2-15.3 14.9l0 .1zm8 6.4c0-1-.5-1.5-1.5-1.5-1.1 0-2.1 .5-2.9 1.6-1.9-.1-3.3 .1-4.2 .7-.4 .2-.5 .5-.5 .7 0 .7 .5 1.3 1.5 1.6l3.3 0c2.9-1.1 4.4-2.2 4.4-3.3l-.1 .2zM325 165.2c0-2.8-1.6-2.8-4.9 0-1.6 1.5-3.6 3.5-6 6.2-.8 .6-2.6 2.2-5.3 4.9-2.8 2.9-4.2 4.7-4.2 5.3l.2 1.3c.7 .2 1.2 .4 1.5 .4 .1 0 3.3-2.9 9.5-8.7s9.3-8.9 9.3-9.3l-.1-.1zm159.7 120l-30.6 27c1.8 1 3.2 2.4 4 4.2l30.2-27c.2-1.2 .1-2.2-.5-2.9-.6-.5-1.6-.9-3.1-1.3zm-1.6-.9l-.7-.7-27 21.9 1.6 2 26-23.1 .1-.1zM366.9 363.9c-8-2.1-15.4-4.6-22.2-7.5-15.3-6.2-34.3-17-57-32.4l-37.4-25.3c-15.8-10.1-30.2-17.6-43.2-22.6-13.1-4.9-26-7.3-38.6-7.3l-5.5 0c-32.2 1.7-57.2 13.8-75 36.2-16.6 20.8-25 45.3-25 73.6 0 31.8 12.8 56.7 38.2 74.7 25.4 18.1 60.2 27.1 104.4 27.1 34.7 0 64-6.2 87.8-18.6 23.7-12.4 42.1-28.8 55.2-49.2 9.8-15.5 15.9-31.8 18.2-48.8l.1 .1z\"]\n};\nvar faOpenstreetmap = {\n  prefix: 'fab',\n  iconName: 'openstreetmap',\n  icon: [512, 512, [], \"e86b\", \"M61 498.7c-7.1-1.8-10.8-4.7-29.6-23.6-22.5-22.4-23.9-24.6-23.9-36.3 0-13-3.9-8.4 67.9-80.3 72.5-72.7 68.7-69.5 81.9-69.5 6.1 0 7.6 .4 12.5 2.8l5.6 2.8c11.7-11.7 23.4-23.4 35.1-35.1l-4.4-6.9c-8.6-13.3-16.6-32.8-20.3-48.9-10.2-45.4 .8-93.3 29.8-129.7 50.1-62.8 140.1-76.7 206.6-32 36.5 24.5 60.3 62.5 67 107 1.4 9.4 1.4 31.8 0 41.8-4.9 34.6-19.7 64-44.4 88.7-12.7 12.7-23 20.1-39.2 28.2-19.3 9.7-35.7 14.3-58 16.1-31.7 2.6-66.9-6.1-93.8-23.4l-6.9-4.4c-11.7 11.7-23.4 23.4-35.1 35.1l2.8 5.6c2.5 4.9 2.8 6.4 2.8 12.5 0 13.1 3.1 9.4-69 81.5-55.6 55.5-64.1 63.7-68.4 65.7-5.5 2.5-13.9 3.4-19 2.1zM359.4 296.9c40.1-7.3 75.1-34 92.7-70.7 28-58.4 9.2-127-44.8-163.3-12.9-8.7-30.8-16-47.7-19.4-11.7-2.4-36.4-2.1-48.6 .5-18.2 3.9-34.9 11.1-49.4 21.4-8.9 6.4-23.7 21.1-29.9 29.9-34.6 49-31.5 114.1 7.7 159.3 20.1 23.2 47.8 38.4 78.6 43 10.2 1.5 31 1.2 41.5-.8zm-35.5-17.4c-13.8-2.2-25.6-5.7-35.1-10.5l-5.4-2.7 0-49.9-9.5 0c-8.2 0-19.5 1.6-27.7 4-1.1 .3-1.5 1.6-1.7 4.8l-.3 4.4-4.1-7.8c-9-17.2-12.2-30.7-12.2-51.4 0-16 1.1-23.4 5.6-36.3 2.4-6.8 8.2-18.9 10.8-22.3 1.1-1.5 1.2-1.1 1.3 3.3l0 5c18.8-.2 37.6-.3 56.4-.5 .2-4.7 .3-9.5 .5-14.2l-19 0 0-31 3.4-1.7c5.6-2.8 15.9-6.7 21.7-8.2 3-.8 6.1-1.6 6.9-1.8 1.2-.4 1.3 .1 .7 3.3-1.2 6.1-.9 23 .5 29 2.8 11.9 9.8 20.7 19.2 24.3 5.6 2.1 16.3 2.6 22.5 .9 5.9-1.6 12.5-6.4 15.9-11.5 5-7.5 6.7-14.1 7.2-27.1l.4-11.4 7 3.6c8 4.2 17.8 11.2 24.9 18 4.8 4.6 5 4.8 5 9.2l0 4.5-18.9 0 0 14.6 35 0c1.3 2.6 2.5 5.2 3.8 7.7l-9.7 0c-6.7 0-12.7 .6-19.4 1.9l-9.7 1.9 0 7.1c0 3.9 .2 7.1 .3 7.1s4.1-.8 8.7-1.7 8.7-1.7 9.1-1.7c.4 0 .8 11.3 .8 25.8l0 25.8c-6.2 .2-12.3 .3-18.5 .5-.2 4.7-.3 9.4-.5 14.2 13.5 .2 27 .3 40.4 .5-1 2.3-2 4.5-3 6.8l-10.7 .1c-9.9 .1-11.1 .2-15.6 2.5-11.8 5.8-18.1 18.9-18.3 37.9l-.1 9.3-5.8 3c-5 2.6-22.6 9-24.9 9-.5 0-.8-12-.8-30.6l0-30.6-9.4 0c-6 0-12.4 .6-17.9 1.7-12.6 2.6-11.5 1.7-11.5 9.5 0 5 .3 6.8 1.1 6.8 .6 0 4.6-.8 8.8-1.7s8-1.7 8.3-1.7 .6 11 .6 24.5l0 24.5-7.5-.1c-4.1-.1-8.5-.3-9.7-.5zm-39.4-71.6c8.9-3.9 15.6-12.9 18.3-24.4 1.6-6.9 1.7-22.6 0-30.2-2.5-12-9.6-21.1-19.3-24.8-6.9-2.6-18.4-2.6-25.3 0-9.7 3.7-16.4 12.8-19.2 25.6-1.6 7.5-1.6 21.4 0 28.9 2.6 12.5 10.5 22.3 20.6 25.6 7 2.3 18.9 2 24.9-.7zm-19.9-14.5c-3.5-3-5.2-8.9-5.8-20.6-.6-10.5 .6-21.3 2.9-26 2-4.3 5.8-6.4 10.4-6 7.4 .8 10.3 6.5 11.1 22.5 .9 16.7-1.9 28.9-7 31.3-3.9 1.8-8.6 1.3-11.6-1.2zm94.9 15.1c15-4.6 22.8-20.1 21.9-43.5-.8-19.9-7.9-32.1-21.5-37.2-5.7-2.1-18-1.8-24 .5-9.6 3.7-16.4 12.4-19.3 24.7-2 8.6-1.3 28 1.3 35.2 4 11.3 11.6 18.7 21.4 21 5.8 1.4 14.4 1 20.3-.8zm-16.7-14.2c-5-2.7-7.3-13.2-6.5-30.1 .6-12.8 1.5-16.7 4.8-20.4 4.7-5.3 13.6-3.8 16.7 2.8 3.4 7.3 4 30.1 1 40.2-1.7 5.7-5.2 8.8-10.1 8.7-2 0-4.6-.6-5.8-1.3zm-85.2 51.5c-7.3-7.6-9.9-11.4-8.4-11.9 2.9-.9 13.9-3.1 14.2-2.8 .2 .2 .2 4.9 .1 10.4l-.2 10.1-5.6-5.9zm156.4-1.2c.7-6 3.1-11.5 5.7-13.2 2.9-1.8 6.4-2.6 8-1.7 1.2 .7 .9 1.5-2.4 5.9-2.1 2.8-5.6 7-7.8 9.4l-4 4.3 .5-4.7zM438.4 161l.1-32.9 2.6 7.7c5.1 15.3 6.9 31.8 5.1 46.6-1.4 11.6-1.4 11.5-4.9 11.5l-3 0 .1-32.9zM344 106.2c-2.6-1-5.3-4.8-6.5-9-1.2-4-1.5-28.5-.4-33.5 .6-3 .9-3.2 3.8-3.2 6.2 0 18.3 2 18.7 3.1 .2 .6 .7 4.9 1 9.5 .7 9.7-.7 23.2-2.8 27.6-2.4 5.1-8.5 7.5-13.7 5.3zm-94.3-2.4c.4-.8 3.7-4.6 7.3-8.4l6.5-6.9c0 5.6 0 11.2 .1 16.8l-7.3 0c-6.7 0-7.3-.1-6.5-1.5zm34.4 341.7c-24-6.9-43.9-12.9-44.2-13.1-.5-.6 24.3-88.5 25.3-89.6 .5-.5 85.4 23.3 88.9 24.9 1.2 .6-.1 5.8-10.6 42.4-6.6 23-12.4 43.2-12.8 45s-1.4 3.2-1.9 3.1-20.7-5.8-44.7-12.7zM342.8 456c0-1.1 24.7-87.3 25.1-87.6 .9-.7 87.1-24.7 87.4-24.4 .4 .4-24.1 87.3-24.7 87.9-.4 .3-83.2 24-85.8 24.5-1.1 .2-1.9 .1-1.9-.4zM199.6 417.5c17-17.1 32.2-32.7 33.7-34.7 3.4-4.5 8.2-14.8 9.5-20.5 .5-2.4 1.1-7.1 1.2-10.5l.2-6.2 3.7-1c2-.6 3.8-.9 4-.7 .5 .5-24.3 87-25.1 87.8-.4 .3-13.6 4.3-29.4 8.8l-28.7 8.2 31-31.1zm166.9-61.6c-.2-.3-.7-2-1.2-3.7l-.9-3.2 3.2-.5c27-4.6 55.9-17.3 78.7-34.5 3.3-2.5 5.1-3.4 5.3-2.7 1.1 3.3 5.5 19.1 5.4 19.3-.7 .7-90.2 25.8-90.5 25.4zM62.9 329.8c-1-.8-23.8-77.9-25.5-86.4-.3-1.7 3-.9 43.8 10.8 42.7 12.2 44.2 12.7 44.8 14.9 .5 2 .2 2.6-2.5 4.5-1.7 1.2-15.5 14.6-30.7 29.8s-27.8 27.6-28 27.6-1.1-.5-1.8-1.1zm16.5-88.2c-23.9-6.9-43.5-12.6-43.6-12.6-.3-.2 25.3-89.3 25.9-89.8 .4-.4 89.1 24.4 90 25.2 .2 .2-5.4 20.5-12.4 45.1-11.6 40.7-12.9 44.8-14.5 44.7-1 0-21.3-5.7-45.2-12.6zm59.6 10.8c.2-.6 4.3-14.5 8.9-30.9l8.5-29.7 1.1 6.5c1.9 11.2 5.3 23.9 9.3 35.1 2.1 5.9 3.8 10.9 3.6 11s-6.7 2-14.5 4.3-14.9 4.2-15.8 4.5c-1.1 .3-1.5 .1-1.2-.7zM106 139.1c-23.9-6.9-43.7-12.8-43.9-13.2-.8-1.3-25.1-87-24.7-87.4 .5-.5 86.8 24.3 87.6 25.1 .9 1 25.8 88.2 25.1 88-.3 0-20.1-5.7-44-12.6zm43.2-34.5C136.5 60 139 68.8 137.2 62.5l34.1-9.7c18.8-5.4 34.7-9.9 35.4-10.2s-1.6 2.8-5.2 6.8c-19.1 21.3-31.5 44-39.4 71.9-1.5 5.2-2.7 10.3-2.7 11.3 0 5.9-2.3-.5-10.2-28z\"]\n};\nvar faSellcast = {\n  prefix: 'fab',\n  iconName: 'sellcast',\n  icon: [448, 512, [], \"f2da\", \"M353.5 32L94.8 32C42.7 32 .1 74.6 .1 126.6l0 258.7C.1 437.4 42.7 480 94.8 480l258.7 0c52.1 0 94.7-42.6 94.7-94.6l0-258.8c0-52-42.6-94.6-94.7-94.6zm-50 316.4c-27.9 48.2-89.9 64.9-138.2 37.2-22.9 39.8-54.9 8.6-42.3-13.2l15.7-27.2c5.9-10.3 19.2-13.9 29.5-7.9 18.6 10.8-.1-.1 18.5 10.7 27.6 15.9 63.4 6.3 79.4-21.3 15.9-27.6 6.3-63.4-21.3-79.4-17.8-10.2-.6-.4-18.6-10.6-24.6-14.2-3.4-51.9 21.6-37.5 18.6 10.8-.1-.1 18.5 10.7 48.4 28 65.1 90.3 37.2 138.5zm21.8-208.8c-17 29.5-16.3 28.8-19 31.5-6.5 6.5-16.3 8.7-26.5 3.6-18.6-10.8 .1 .1-18.5-10.7-27.6-15.9-63.4-6.3-79.4 21.3s-6.3 63.4 21.3 79.4c0 0 18.5 10.6 18.6 10.6 24.6 14.2 3.4 51.9-21.6 37.5-18.6-10.8 .1 .1-18.5-10.7-48.2-27.8-64.9-90.1-37.1-138.4 27.9-48.2 89.9-64.9 138.2-37.2l4.8-8.4c14.3-24.9 52-3.3 37.7 21.5z\"]\n};\nvar faMix = {\n  prefix: 'fab',\n  iconName: 'mix',\n  icon: [448, 512, [], \"f3cb\", \"M0 64L0 412.9c0 56.2 88 58.1 88 0l0-238.6c7.9-52.9 88-50.4 88 6.5l0 175.3c0 57.9 96 58 96 0L272 240c5.3-54.7 88-52.5 88 4.3l0 23.8c0 59.9 88 56.6 88 0L448 64 0 64z\"]\n};\nvar faCcApplePay = {\n  prefix: 'fab',\n  iconName: 'cc-apple-pay',\n  icon: [576, 512, [], \"f416\", \"M302.2 218.4c0 17.2-10.5 27.1-29 27.1l-24.3 0 0-54.2 24.4 0c18.4 0 28.9 9.8 28.9 27.1zM349.7 281c0 8.3 7.2 13.7 18.5 13.7 14.4 0 25.2-9.1 25.2-21.9l0-7.7-23.5 1.5c-13.3 .9-20.2 5.8-20.2 14.4zM576 79l0 352c0 26.5-21.5 48-48 48L48 479c-26.5 0-48-21.5-48-48L0 79C0 52.5 21.5 31 48 31l480 0c26.5 0 48 21.5 48 48zM127.8 197.2c8.4 .7 16.8-4.2 22.1-10.4 5.2-6.4 8.6-15 7.7-23.7-7.4 .3-16.6 4.9-21.9 11.3-4.8 5.5-8.9 14.4-7.9 22.8zm60.6 74.5c-.2-.2-19.6-7.6-19.8-30-.2-18.7 15.3-27.7 16-28.2-8.8-13-22.4-14.4-27.1-14.7-12.2-.7-22.6 6.9-28.4 6.9-5.9 0-14.7-6.6-24.3-6.4-12.5 .2-24.2 7.3-30.5 18.6-13.1 22.6-3.4 56 9.3 74.4 6.2 9.1 13.7 19.1 23.5 18.7 9.3-.4 13-6 24.2-6 11.3 0 14.5 6 24.3 5.9 10.2-.2 16.5-9.1 22.8-18.2 6.9-10.4 9.8-20.4 10-21zm135.4-53.4c0-26.6-18.5-44.8-44.9-44.8l-51.2 0 0 136.4 21.2 0 0-46.6 29.3 0c26.8 0 45.6-18.4 45.6-45zm90 23.7c0-19.7-15.8-32.4-40-32.4-22.5 0-39.1 12.9-39.7 30.5l19.1 0c1.6-8.4 9.4-13.9 20-13.9 13 0 20.2 6 20.2 17.2l0 7.5-26.4 1.6c-24.6 1.5-37.9 11.6-37.9 29.1 0 17.7 13.7 29.4 33.4 29.4 13.3 0 25.6-6.7 31.2-17.4l.4 0 0 16.4 19.6 0 0-68 .1 0zM516 210.9l-21.5 0-24.9 80.6-.4 0-24.9-80.6-22.3 0 35.9 99.3-1.9 6c-3.2 10.2-8.5 14.2-17.9 14.2-1.7 0-4.9-.2-6.2-.3l0 16.4c1.2 .4 6.5 .5 8.1 .5 20.7 0 30.4-7.9 38.9-31.8L516 210.9z\"]\n};\nvar faSolana = {\n  prefix: 'fab',\n  iconName: 'solana',\n  icon: [512, 512, [], \"e85e\", \"M510.5 385.2l-84.9 88.7c-1.8 1.9-4.1 3.5-6.6 4.5s-5.2 1.6-7.9 1.6L8.9 480c-1.9 0-3.8-.5-5.4-1.6s-2.9-2.5-3.6-4.2-1-3.6-.7-5.5 1.2-3.6 2.5-4.9l84.9-88.7c1.8-1.9 4.1-3.5 6.5-4.5s5.1-1.6 7.8-1.6l402.4 0c1.9 0 3.8 .5 5.4 1.6s2.9 2.5 3.6 4.2 1 3.6 .7 5.5-1.2 3.6-2.5 4.9zM425.7 206.6c-1.8-1.9-4.1-3.5-6.6-4.5s-5.2-1.6-7.9-1.6l-402.4 0c-1.9 0-3.8 .5-5.4 1.6s-2.9 2.5-3.6 4.2-1 3.6-.7 5.5 1.2 3.6 2.5 4.9l84.9 88.7c1.8 1.9 4.1 3.5 6.5 4.5s5.1 1.6 7.8 1.6l402.4 0c1.9 0 3.8-.5 5.4-1.6s2.9-2.5 3.6-4.2 1-3.6 .7-5.5-1.2-3.6-2.5-4.9l-84.9-88.7zM8.9 142.9l402.4 0c2.7 0 5.4-.5 7.9-1.6s4.7-2.6 6.6-4.5l84.9-88.7c1.3-1.4 2.2-3.1 2.5-4.9s.1-3.7-.7-5.5-2-3.2-3.6-4.2-3.5-1.6-5.4-1.6L101 32c-2.7 0-5.4 .5-7.8 1.6s-4.7 2.6-6.5 4.5L1.7 126.8c-1.3 1.4-2.2 3.1-2.5 4.9s-.1 3.7 .7 5.5 2 3.2 3.6 4.2 3.5 1.6 5.4 1.6z\"]\n};\nvar faTypescript = {\n  prefix: 'fab',\n  iconName: 'typescript',\n  icon: [448, 512, [], \"e840\", \"M16.8 32l414.4 0c9.3 0 16.8 7.5 16.8 16.8l0 414.4c0 9.3-7.5 16.8-16.8 16.8L16.8 480C7.5 480 0 472.5 0 463.2L0 48.8C0 39.5 7.5 32 16.8 32zM249 270.3l0-36.7-159.4 0 0 36.7 56.9 0 0 163.6 45.3 0 0-163.6 57.2 0zm18.1 159.3c7.3 3.7 15.9 6.5 25.9 8.4s20.5 2.8 31.5 2.8c10.8 0 21-1 30.7-3.1s18.2-5.4 25.5-10.1 13.1-10.9 17.4-18.4 6.4-17 6.4-28.2c0-8.1-1.2-15.2-3.7-21.3s-5.9-11.5-10.5-16.3-10.1-9-16.5-12.8-13.7-7.3-21.7-10.7c-5.9-2.4-11.2-4.8-15.9-7.1s-8.7-4.6-11.9-7-5.8-4.9-7.6-7.5-2.7-5.7-2.7-9c0-3.1 .8-5.8 2.4-8.3s3.8-4.6 6.7-6.4 6.5-3.1 10.7-4.1 8.9-1.5 14.1-1.5c3.7 0 7.7 .3 11.9 .8s8.4 1.4 12.6 2.6 8.3 2.6 12.3 4.4 7.7 3.8 11 6.1l0-41.8c-6.8-2.6-14.3-4.5-22.4-5.8s-17.4-1.9-27.9-1.9c-10.7 0-20.8 1.1-30.4 3.4s-18 5.8-25.2 10.7-13 11-17.2 18.5-6.3 16.5-6.3 26.9c0 13.3 3.9 24.7 11.6 34.1s19.5 17.4 35.2 23.9c6.2 2.5 11.9 5 17.3 7.4s10 4.9 13.8 7.5 7 5.4 9.2 8.5 3.4 6.6 3.4 10.5c0 2.9-.7 5.6-2.1 8s-3.5 4.6-6.4 6.4-6.4 3.2-10.7 4.3-9.3 1.5-15 1.5c-9.7 0-19.4-1.7-28.9-5.1s-18.4-8.5-26.6-15.3l0 44.7z\"]\n};\nvar faBrave = {\n  prefix: 'fab',\n  iconName: 'brave',\n  icon: [448, 512, [], \"e63c\", \"M145.6 0l157 0 44.7 50.8s39.3-10.9 57.8 7.6 33.8 34.9 33.8 34.9l-12 29.5 15.3 43.7s-44.9 170.2-50.1 191c-10.4 40.9-17.4 56.8-46.9 77.5s-82.9 56.8-91.6 62.2c-1.9 1.2-3.9 2.5-5.9 3.9-7.5 5.1-15.8 10.8-23.5 10.8s-16.1-5.7-23.5-10.8c-2-1.4-4-2.8-5.9-3.9-8.7-5.5-62.1-41.5-91.6-62.2s-36.5-36.6-46.9-77.5c-5.3-20.8-50.1-191-50.1-191L21.5 122.8 9.3 93.3s15.3-16.4 33.8-34.9 57.8-7.6 57.8-7.6L145.6 0zm78.5 407.6c3.7 0 8.9-4.7 13-8.4 .6-.5 1.2-1.1 1.7-1.5 4.2-3.7 47.8-37.5 51-39.8s5.4-6.5 1.9-8.7c-2.8-1.7-10-5.5-20.3-10.8-3-1.6-6.3-3.2-9.7-5-15.4-8-34.5-14.7-37.5-14.7s-22.1 6.8-37.5 14.7c-3.5 1.8-6.7 3.5-9.7 5-10.3 5.3-17.6 9.1-20.3 10.8-3.6 2.2-1.4 6.4 1.9 8.7s46.8 36.1 51 39.8c.5 .5 1.1 1 1.7 1.5 4.1 3.7 9.3 8.4 13 8.4l-.2 0zm0-165.7c4.7 0 17.6-3 26.4-5l2-.5c7.8-1.8 7.3-6.3 6.4-13-.1-.8-.2-1.6-.3-2.4-.6-6.1-5.8-33.1-9.1-50.3-1.1-5.8-2-10.5-2.4-12.9-1.5-8.1-.6-9.4 .7-11.3 .2-.3 .5-.7 .7-1.1 1.4-2.3 16-6.2 27.9-9.5 2.5-.7 4.8-1.3 6.9-1.9 10.6-3 32.4-.6 44.2 .6 1.8 .2 3.4 .4 4.7 .5 9.6 .9 10.4 2.3 7.2 3.8-2.3 1.1-16.2 6.3-28.7 10.9-4.7 1.8-9.2 3.5-12.8 4.8-1.5 .5-3 1.1-4.5 1.7-12.5 4.6-27.2 10-28.9 19.4-1.5 8.3 5.2 19.9 11.3 30.3 1.6 2.8 3.2 5.5 4.6 8.1 6.3 11.9 6.5 13.3 6.1 18.1-.4 3.9-14.5 12.7-22.4 17.6-1.8 1.1-3.3 2.1-4.2 2.7-.8 .5-2.1 1.4-3.8 2.4-8.6 5.2-26.3 16-26.3 22.5 0 7.8 24.6 28.1 32.4 33.2s28.9 16.1 37.9 17.8 23-8.5 31.2-23.8c7.7-14.4 1.7-28.5-3.2-40l-.9-2.2c-4.5-10.6 1.9-17 6.2-21.3 .5-.5 1-1 1.4-1.4l43-45.7c1.3-1.3 2.5-2.6 3.7-3.8 5.8-5.7 10.8-10.5 10.8-22.8 0-14.9-57.5-84.5-57.5-84.5s-48.5 9.3-55.1 9.3c-5.2 0-15.3-3.5-25.8-7.1-2.7-.9-5.4-1.9-8-2.7-13-4.3-21.8-4.4-21.8-4.4s-8.7 0-21.8 4.4c-2.7 .9-5.4 1.8-8 2.7-10.5 3.6-20.6 7.1-25.8 7.1-6.5 0-55.1-9.3-55.1-9.3s-57.5 69.6-57.5 84.5c0 12.3 4.9 17.1 10.8 22.8 1.2 1.2 2.5 2.4 3.7 3.8l43.1 45.8c.4 .5 .9 .9 1.4 1.4 4.3 4.3 10.6 10.7 6.2 21.3l-.9 2.2c-4.9 11.5-11 25.6-3.2 40 8.2 15.3 22.2 25.5 31.2 23.8s30.1-12.7 37.9-17.8 32.4-25.4 32.4-33.2c0-6.5-17.7-17.3-26.3-22.5-1.7-1-3.1-1.9-3.8-2.4-.9-.6-2.4-1.5-4.2-2.7-7.9-4.9-22-13.7-22.4-17.6-.4-4.8-.3-6.2 6.1-18.1 1.3-2.5 2.9-5.3 4.6-8.1 6-10.4 12.8-22 11.3-30.3-1.7-9.4-16.4-14.8-28.9-19.4-1.6-.6-3.1-1.1-4.5-1.7-3.6-1.4-8.1-3.1-12.8-4.8l-.1 0c-12.5-4.7-26.4-9.9-28.7-10.9-3.2-1.5-2.3-2.8 7.2-3.8 1.3-.1 2.9-.3 4.7-.5 11.8-1.3 33.6-3.6 44.2-.6 2.1 .6 4.4 1.2 6.9 1.9 11.9 3.2 26.5 7.2 27.9 9.5 .2 .4 .5 .7 .7 1.1 1.3 1.9 2.2 3.2 .7 11.3-.4 2.4-1.3 7.1-2.4 12.9-3.3 17.2-8.5 44.2-9.1 50.3-.1 .8-.2 1.7-.3 2.4-.8 6.7-1.4 11.2 6.4 13l2 .5c8.8 2 21.8 5 26.4 5l0-.1z\"]\n};\nvar faEtsy = {\n  prefix: 'fab',\n  iconName: 'etsy',\n  icon: [384, 512, [], \"f2d7\", \"M384 348c-1.8 10.7-13.8 110-15.5 132-117.9-4.3-219.9-4.7-368.5 0l0-25.5c45.5-8.9 60.6-8 61-35.2 1.8-72.3 3.5-244.1 0-322-1-28.5-12.1-26.8-61-36L0 35.8c73.9 2.4 255.9 8.6 363-3.8-3.5 38.2-7.8 126.5-7.8 126.5l-23.2 0C320.9 115.7 313.2 68 277.3 68l-137 0c-10.2 0-10.7 3.5-10.7 9.8l0 163.8c58 .5 88.5-2.5 88.5-2.5 29.8-1 27.6-8.5 40.7-65.3l25.8 0c-4.4 101.4-3.9 61.8-1.8 160.3L257 334c-9.2-40.1-9.1-61-39.5-61.5 0 0-21.5-2-88-2l0 139c0 26 14.3 38.3 44.3 38.3l89.3 0c63.6 0 66.6-25 98.7-99.8l22.2 0z\"]\n};\nvar faRobloxCreatorStudio = {\n  prefix: 'fab',\n  iconName: 'roblox-creator-studio',\n  icon: [576, 512, [], \"e8b6\", \"M330.3 329.5L349 259.7 498.9 299.9 440 519.5 24 408 64.2 258.2 330.3 329.5zm221.2-226L511.3 253.3 245.2 182 226.5 251.8 76.6 211.7 135.5-8 551.5 103.5z\"]\n};\nvar faBtc = {\n  prefix: 'fab',\n  iconName: 'btc',\n  icon: [384, 512, [], \"f15a\", \"M310.4 242.6c27.7-14.2 45.4-39.4 41.3-81.3-5.4-57.4-52.5-76.6-114.8-81.9l0-79.4-48.5 0 0 77.2c-12.6 0-25.5 .3-38.4 .6l0-77.8-48.5 0 0 79.4c-17.8 .5-38.6 .3-97.4 0l0 51.7c38.3-.7 58.4-3.1 63 21.4l0 217.4c-2.9 19.5-18.5 16.7-53.3 16.1L4 443.7c88.5 0 97.4 .3 97.4 .3l0 68 48.5 0 0-67.1c13.2 .3 26.2 .3 38.4 .3l0 66.7 48.5 0 0-68c81.3-4.4 135.6-24.9 142.9-101.5 5.7-61.4-23.3-88.9-69.3-99.9zM150.8 134.6c27.4 0 113.1-8.5 113.1 48.5 0 54.5-85.7 48.2-113.1 48.2l0-96.7zm0 251.8l0-106.5c32.8 0 133.1-9.1 133.1 53.3 0 60.2-100.4 53.3-133.1 53.3z\"]\n};\nvar faAdn = {\n  prefix: 'fab',\n  iconName: 'adn',\n  icon: [512, 512, [], \"f170\", \"M256 167.5l64.9 98.8-129.8 0 64.9-98.8zM8 256a248 248 0 1 1 496 0 248 248 0 1 1 -496 0zm396.2 82.7l-148.2-223.2-148.2 223.2 30.4 0 33.6-51.7 168.6 0 33.6 51.7 30.2 0z\"]\n};\nvar faSquareXTwitter = {\n  prefix: 'fab',\n  iconName: 'square-x-twitter',\n  icon: [448, 512, [], \"e61a\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm297.1 84l-103.8 118.6 122.1 161.4-95.6 0-74.8-97.9-85.7 97.9-47.5 0 111-126.9-117.1-153.1 98 0 67.7 89.5 78.2-89.5 47.5 0zM323.3 367.6l-169.9-224.7-28.3 0 171.8 224.7 26.4 0z\"]\n};\nvar faSquareFontAwesome = {\n  prefix: 'fab',\n  iconName: 'square-font-awesome',\n  icon: [448, 512, [], \"e5ad\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm90 122c0 9.3-4.8 17.4-12.1 22l188.9 0c7.3 0 13.2 5.9 13.2 13.2 0 1.8-.4 3.7-1.1 5.4L312 264 342.9 333.4c.7 1.7 1.1 3.5 1.1 5.4 0 7.3-5.9 13.2-13.2 13.2l-186.8 0 0 32-32 0 0-209.5c-6.1-4.8-10-12.2-10-20.5 0-14.4 11.6-26 26-26s26 11.6 26 26z\"]\n};\nvar faForumbee = {\n  prefix: 'fab',\n  iconName: 'forumbee',\n  icon: [448, 512, [], \"f211\", \"M5.8 309.7C2 292.7 0 275.5 0 258.3 0 135 99.8 35 223.1 35 239.7 35 256.4 37 272.4 40.5 149 87.5 51.9 186 5.8 309.7zM398.7 120.5c-13.7-17.5-29.7-32.7-47.8-45.3-149.6 44.3-266.3 162.1-309.7 312 12.5 18.1 28 35.6 45.2 49 43.1-151.3 161.2-271.7 312.3-315.7zm15.8 252.7c15.2-25.1 25.4-53.7 29.5-82.8-79.4 42.9-145 110.6-187.6 190.3 30-4.4 58.9-15.3 84.6-31.3 35 13.1 70.9 24.3 107 33.6-9.3-36.5-20.4-74.5-33.5-109.8zm29.7-145.5c-2.6-19.5-7.9-38.7-15.8-56.8-137.9 45.8-246.4 156.6-291.3 295.1 18.1 7.6 37 12.5 56.6 15.2 46.3-114.1 136.8-206.8 250.5-253.5z\"]\n};\nvar fa42Group = {\n  prefix: 'fab',\n  iconName: '42-group',\n  icon: [640, 512, [\"innosoft\"], \"e080\", \"M320 96l0 320c21 0 41.8-4.1 61.2-12.2s37-19.8 51.9-34.7 26.6-32.5 34.7-51.9 12.2-40.2 12.2-61.2-4.1-41.8-12.2-61.2-19.8-37.1-34.7-51.9-32.5-26.6-51.9-34.7-40.2-12.2-61.2-12.2zM0 256L160 416 320 256 160 96 0 256zm480 0c0 21 4.1 41.8 12.2 61.2s19.8 37 34.7 51.9 32.5 26.6 51.9 34.7 40.2 12.2 61.2 12.2l0-320c-42.4 0-83.1 16.9-113.1 46.9S480 213.6 480 256z\"]\n};\nvar faInnosoft = fa42Group;\nvar faStumbleuponCircle = {\n  prefix: 'fab',\n  iconName: 'stumbleupon-circle',\n  icon: [512, 512, [], \"f1a3\", \"M264 8a248 248 0 1 0 0 496 248 248 0 1 0 0-496zm0 177.5c-9.8 0-17.8 8-17.8 17.8l0 106.9c0 40.9-33.9 73.9-74.9 73.9-41.4 0-74.9-33.5-74.9-74.9l0-46.5 57.3 0 0 45.8c0 10 8 17.8 17.8 17.8s17.8-7.9 17.8-17.8l0-108.4c0-40 34.2-72.1 74.7-72.1 40.7 0 74.7 32.3 74.7 72.6l0 23.7-34.1 10.1-22.9-10.7 0-20.6c.1-9.6-7.9-17.6-17.7-17.6zM431.6 309.1c0 41.4-33.5 74.9-74.9 74.9-41.2 0-74.9-33.2-74.9-74.2l0-46.8 22.9 10.7 34.1-10.1 0 47.1c0 9.8 8 17.6 17.8 17.6s17.8-7.9 17.8-17.6l0-48 57.3 0c-.1 45.9-.1 46.4-.1 46.4z\"]\n};\nvar faSymfony = {\n  prefix: 'fab',\n  iconName: 'symfony',\n  icon: [512, 512, [], \"f83d\", \"M256 8a248 248 0 1 0 0 496 248 248 0 1 0 0-496zM389.7 151.5c-11.5 .4-19.4-6.4-19.8-16.9-.3-9.2 6.7-13.4 6.5-18.9-.2-6.5-10.2-6.8-12.9-6.7-39.8 1.3-48.6 57-58.9 113.8 21.4 3.2 36.6-.7 45.1-6.2 12-7.7-3.3-15.7-1.4-24.6 4-18.2 32.6-19 32 5.3-.4 17.9-25.9 41.8-77.6 35.7-10.8 59.5-18.4 115-58.2 161.7-29 34.5-58.4 39.8-71.6 40.3-24.6 .9-41-12.3-41.6-29.8-.6-17 14.4-26.3 24.3-26.6 21.9-.8 30.1 25.7 14.9 34-12.1 9.7 .1 12.6 2.1 12.6 10.4-.4 17.3-5.5 22.2-9 24-20 33.2-54.9 45.4-118.3 8.2-49.7 17-78 18.2-82-16.9-12.7-27.1-28.6-49.8-34.7-15.6-4.2-25.1-.6-31.8 7.8-7.9 10-5.3 23 2.4 30.7l12.6 14c15.5 17.9 24 31.9 20.8 50.6-5.1 29.9-40.7 52.9-82.9 39.9-36-11.1-42.7-36.6-38.4-50.6 7.5-24.2 42.4-11.7 34.6 13.6-2.8 8.6-4.9 8.7-6.3 13.1-4.6 14.8 41.8 28.4 51-1.4 4.5-14.5-5.3-21.7-22.2-39.9-28.5-31.7-16-65.5 2.9-79.7 52.8-39.4 100.5 17.5 110.6 25.8 37.2-109 100.5-105.5 102.4-105.5 25.2-.8 44.2 10.6 44.8 28.6 .2 7.7-4.2 22.6-19.5 23.1z\"]\n};\nvar faSalesforce = {\n  prefix: 'fab',\n  iconName: 'salesforce',\n  icon: [640, 512, [], \"f83b\", \"M249.4 245.6l-26.4 0c.7-5.2 3.3-14.1 13.6-14.1 6.8 0 12 3.8 12.7 14.1zM386 231.8c-.5 0-14.1-1.8-14.1 20s13.6 20 14.1 20c13 0 14.1-13.5 14.1-20 0-21.8-13.7-20-14.1-20zM142.8 255.5c-1.1 .9-2 2-2.5 3.2s-.8 2.7-.7 4c0 4.8 2.1 6.1 3.3 7 4.7 3.7 15.1 2.1 20.9 1l0-16.9c-5.3-1.1-16.7-2-20.9 1.6zM640.5 232c0 87.6-80 154.4-165.4 136.4-18.4 33-70.7 70.8-132.2 41.6-41.2 96-177.9 92.2-213.8-5.2-119.7 23.9-178.8-138.4-75.3-199.3-34.8-79.4 22.6-173.6 114.3-173.6 19.1 0 37.9 4.4 55 12.9s32 20.7 43.6 35.8c20.7-21.4 49.4-34.8 81.1-34.8 42.3 0 79 23.5 98.8 58.6 92.8-40.7 193.8 28.2 193.8 127.5zM120.9 263.8c0-11.8-11.7-15.2-17.9-17.2-5.3-2.1-13.4-3.5-13.4-8.9 0-9.5 17-6.7 25.2-2.1 0 0 1.2 .7 1.6-.5 .2-.7 2.4-6.6 2.6-7.3 .1-.3 .1-.6-.1-.8s-.4-.5-.6-.6c-12.3-7.6-40.7-8.5-40.7 12.7 0 12.5 11.5 15.4 17.9 17.2 4.7 1.6 13.2 3 13.2 8.7 0 4-3.5 7.1-9.2 7.1-6.9 0-13.5-2.2-19-6.3-.5-.2-1.4-.7-1.6 .7l-2.4 7.5c-.5 .9 .2 1.2 .2 1.4 1.8 1.4 10.3 6.6 22.8 6.6 13.2 0 21.4-7.1 21.4-18.1l0 0zm32-42.6c-10.1 0-18.7 3.2-21.4 5.2-.1 .1-.2 .2-.3 .3s-.1 .2-.1 .4 0 .3 0 .4 .1 .3 .2 .4l2.6 7.1c.1 .2 .2 .5 .5 .6s.5 .2 .7 .1c.6 0 6.8-4 16.9-4 4 0 7.1 .7 9.2 2.4 3.6 2.8 3.1 8.3 3.1 10.6-4.8-.3-19.1-3.4-29.4 3.8-2.3 1.6-4.3 3.8-5.5 6.3s-1.9 5.4-1.8 8.2c0 5.9 1.5 10.4 6.6 14.4 12.2 8.2 36.3 2 38.1 1.4 1.6-.3 3.5-.7 3.5-1.9l0-33.9c0-4.6 .3-21.6-22.8-21.6l0 .1zm46.6-21c0-.2 0-.3-.1-.5s-.1-.3-.3-.4-.2-.2-.4-.3-.3-.1-.5-.1l-9.8 0c-.2 0-.3 0-.5 .1s-.3 .1-.4 .3-.2 .2-.3 .4-.1 .3-.1 .5l0 79c0 .2 0 .3 .1 .5s.1 .3 .3 .4 .2 .2 .4 .3 .3 .1 .5 .1l9.9 0c.2 0 .3 0 .5-.1s.3-.1 .4-.3 .2-.2 .3-.4 .1-.3 .1-.5l-.1-79zm55.7 28.9c-2.1-2.3-6.8-7.5-17.6-7.5-3.5 0-14.2 .2-20.7 8.9-6.4 7.6-6.6 18.1-6.6 21.4 0 3.1 .2 14.3 7.1 21.2 2.6 2.9 9.1 8.2 22.8 8.2 10.8 0 16.5-2.3 18.6-3.8 .5-.2 .7-.7 .2-1.9l-2.3-6.8c-.1-.3-.3-.5-.6-.6s-.5-.2-.8-.1c-2.6 .9-6.3 2.8-15.3 2.8-17.4 0-16.8-14.7-16.9-16.7l37.2 0c.3 0 .5-.1 .7-.3s.4-.4 .4-.7c-.3 0 2.1-14.7-6.1-24.2l0 0zm36.7 52.7c13.2 0 21.4-7.1 21.4-18.1 0-11.8-11.7-15.2-17.9-17.2-4.1-1.7-13.4-3.4-13.4-8.9 0-3.8 3.3-6.4 8.5-6.4 5.8 .1 11.5 1.6 16.7 4.2 0 0 1.2 .7 1.6-.5 .2-.7 2.4-6.6 2.6-7.3 .1-.3 .1-.6-.1-.8s-.4-.5-.6-.6c-7.9-4.9-16.7-4.9-20.2-4.9-12 0-20.5 7.3-20.5 17.6 0 12.5 11.5 15.4 17.9 17.2 6.1 2 13.2 3.3 13.2 8.7 0 4-3.5 7.1-9.2 7.1-6.9 0-13.5-2.2-19-6.4-.1-.1-.3-.2-.5-.2s-.4 0-.5 .1-.3 .2-.4 .3-.2 .3-.2 .5l-2.3 7.5c-.5 .9 .2 1.2 .2 1.4 1.7 1.4 10.3 6.6 22.8 6.6l0 0zM357.6 224c0-.7-.2-1.2-1.2-1.2l-11.8 0c0-.1 .9-8.9 4.5-12.5 4.2-4.2 11.8-1.6 12-1.6 1.2 .5 1.4 0 1.6-.5l2.8-7.8c.7-.9 0-1.2-.2-1.4-5.1-2-17.4-2.9-24.5 4.2-5.5 5.5-7 13.9-8 19.5l-8.5 0c-.3 0-.6 .2-.8 .4s-.3 .5-.4 .8l-1.4 7.8c0 .7 .2 1.2 1.2 1.2l8.2 0c-8.5 47.9-8.7 50.2-10.3 55.5-1.1 3.6-3.3 6.9-5.9 7.8-.1 0-3.9 1.7-9.6-.2 0 0-.9-.5-1.4 .7-.2 .7-2.6 6.8-2.8 7.5s0 1.4 .5 1.4c5.1 2 13 1.8 17.9 0 6.3-2.3 9.7-7.9 11.5-12.9 2.8-7.7 2.8-9.8 11.8-59.7l12.2 0c.3 0 .6-.2 .8-.4s.3-.5 .4-.8l1.4-7.8zM411 240c-.6-1.7-5.1-18.1-25.2-18.1-15.2 0-23 10-25.2 18.1-1 3-3.2 14 0 23.5 .1 .3 4.4 18.1 25.2 18.1 15 0 22.9-9.6 25.2-18.1 3.2-9.6 1-20.5 0-23.5zm45.4-16.7c-5-1.7-16.6-1.9-22.1 5.4l0-4.5c0-.2 0-.3-.1-.5s-.1-.3-.3-.4-.2-.2-.4-.3-.3-.1-.5-.1l-9.4 0c-.2 0-.3 0-.5 .1s-.3 .1-.4 .3-.2 .2-.3 .4-.1 .3-.1 .5l0 55.3c0 .2 0 .3 .1 .5s.1 .3 .3 .4 .2 .2 .4 .3 .3 .1 .5 .1l9.6 0c.2 0 .3 0 .5-.1s.3-.1 .4-.3 .2-.2 .3-.4 .1-.3 .1-.5l0-27.8c0-2.9 .1-11.4 4.5-15.1 4.9-4.9 12-3.4 13.4-3.1 .3 0 .6-.1 .8-.3s.4-.4 .6-.7c1.2-2.6 2.2-5.3 3.1-8 .1-.3 .1-.5 0-.8s-.3-.5-.5-.6l0 0zm46.8 54.1l-2.1-7.3c-.5-1.2-1.4-.7-1.4-.7-4.2 1.8-10.1 1.9-11.3 1.9-4.6 0-17.2-1.1-17.2-19.8 0-6.2 1.8-19.8 16.5-19.8 3.9-.1 7.8 .5 11.5 1.6 0 0 .9 .5 1.2-.7 .9-2.6 1.6-4.5 2.6-7.5 .2-.9-.5-1.2-.7-1.2-11.6-3.9-22.3-2.5-27.8 0-1.6 .7-16.2 6.5-16.2 27.5 0 2.9-.6 30.1 28.9 30.1 5.3 0 10.6-1 15.5-2.8 .2-.2 .4-.4 .5-.6s.1-.5 0-.8l0 0zm53.9-39.5c-.8-3-5.4-16.2-22.3-16.2-16 0-23.5 10.1-25.6 18.6-1.2 3.8-1.7 7.8-1.7 11.8 0 25.9 18.8 29.4 29.9 29.4 10.8 0 16.5-2.3 18.6-3.8 .5-.2 .7-.7 .2-1.9l-2.4-6.8c-.1-.3-.3-.5-.6-.6s-.6-.2-.8-.1c-2.6 .9-6.3 2.8-15.3 2.8-17.4 0-16.9-14.7-16.9-16.7l37.2 0c.3 0 .5-.1 .7-.3s.4-.4 .4-.7c-.2 0 .9-7.1-1.4-15.5l0 0zm-23.3-6.4c-10.3 0-13 9-13.6 14.1l26.4 0c-.9-11.9-7.6-14.1-12.7-14.1l0 0z\"]\n};\nvar faSourcetree = {\n  prefix: 'fab',\n  iconName: 'sourcetree',\n  icon: [448, 512, [], \"f7d3\", \"M427.4 203c0-112.1-90.9-203-203-203-112.1-.2-203 90.6-203.2 202.6-.1 43 13.5 84.8 38.7 119.6s60.9 60.6 101.8 73.8l0 101.7c0 3.8 1.5 7.4 4.2 10.1s6.3 4.2 10.1 4.2l96.4 0c3.8 0 7.4-1.5 10.1-4.2s4.2-6.3 4.2-10.1l0-101.6c40.8-13.2 76.5-39 101.7-73.7s38.9-76.5 39-119.4zm-271.6 0c0-90.8 137.3-90.8 137.3 0-.1 89.9-137.3 91-137.3 0z\"]\n};\nvar faLinkedinIn = {\n  prefix: 'fab',\n  iconName: 'linkedin-in',\n  icon: [448, 512, [], \"f0e1\", \"M100.3 448l-92.9 0 0-299.1 92.9 0 0 299.1zM53.8 108.1C24.1 108.1 0 83.5 0 53.8 0 39.5 5.7 25.9 15.8 15.8s23.8-15.8 38-15.8 27.9 5.7 38 15.8 15.8 23.8 15.8 38c0 29.7-24.1 54.3-53.8 54.3zM447.9 448l-92.7 0 0-145.6c0-34.7-.7-79.2-48.3-79.2-48.3 0-55.7 37.7-55.7 76.7l0 148.1-92.8 0 0-299.1 89.1 0 0 40.8 1.3 0c12.4-23.5 42.7-48.3 87.9-48.3 94 0 111.3 61.9 111.3 142.3l0 164.3-.1 0z\"]\n};\nvar faHtml5 = {\n  prefix: 'fab',\n  iconName: 'html5',\n  icon: [384, 512, [], \"f13b\", \"M0 32L34.9 427.8 191.5 480 349.1 427.8 384 32 0 32zM308.2 159.9l-183.8 0 4.1 49.4 175.6 0-13.6 148.4-97.9 27 0 .3-1.1 0-98.7-27.3-6-75.8 47.7 0 3.5 38.1 53.5 14.5 53.7-14.5 6-62.2-166.9 0-12.8-145.6 241.1 0-4.4 47.7z\"]\n};\nvar faRust = {\n  prefix: 'fab',\n  iconName: 'rust',\n  icon: [512, 512, [], \"e07a\", \"M508.5 249.8l-21.8-13.5c-.2-2-.3-3.9-.5-5.9l18.7-17.5c.9-.9 1.6-1.9 2-3.1s.5-2.5 .2-3.7-.8-2.4-1.6-3.3-1.8-1.7-3-2.1l-24-9c-.5-1.9-1.1-3.8-1.7-5.6l15-20.8c.7-1 1.2-2.2 1.3-3.4s0-2.5-.5-3.7-1.2-2.2-2.2-2.9-2.1-1.3-3.4-1.5l-25.4-4.2c-.9-1.7-1.8-3.4-2.7-5.2l10.7-23.4c.5-1.1 .7-2.4 .6-3.6s-.5-2.4-1.2-3.5-1.6-1.9-2.8-2.5-2.4-.8-3.6-.8l-25.8 .9c-1.2-1.5-2.4-2.9-3.6-4.4L439 81.8c.3-1.2 .3-2.5-.1-3.7s-1-2.3-1.9-3.2-2-1.5-3.2-1.9-2.5-.4-3.7-.1L405 78.9c-1.4-1.2-2.9-2.4-4.4-3.6l.9-25.8c.1-1.3-.2-2.5-.8-3.6s-1.4-2.1-2.5-2.8-2.2-1.1-3.5-1.2-2.5 .1-3.7 .6L367.7 53.2c-1.7-.9-3.4-1.8-5.1-2.7l-4.2-25.4c-.2-1.2-.7-2.4-1.5-3.4s-1.8-1.7-2.9-2.2-2.4-.7-3.7-.5-2.4 .6-3.4 1.3L326 35.3c-1.9-.6-3.8-1.1-5.6-1.7l-9-24c-.4-1.2-1.2-2.2-2.1-3s-2.1-1.4-3.3-1.6-2.5-.2-3.7 .2-2.3 1.1-3.1 2L281.6 25.9c-2-.2-3.9-.4-5.9-.5L262.3 3.5c-.7-1.1-1.6-1.9-2.7-2.6s-2.3-.9-3.6-.9-2.5 .3-3.6 .9-2 1.5-2.7 2.6L236.2 25.3c-2 .2-3.9 .3-5.9 .6L212.9 7.1c-.9-.9-1.9-1.6-3.1-2s-2.5-.5-3.7-.2-2.4 .8-3.3 1.6-1.7 1.8-2.1 3l-9 24c-1.9 .6-3.8 1.1-5.7 1.7l-20.8-15c-1-.7-2.2-1.2-3.4-1.3s-2.5 0-3.7 .5-2.2 1.2-2.9 2.2-1.3 2.1-1.5 3.4l-4.2 25.4c-1.7 .9-3.4 1.8-5.2 2.7L120.9 42.6c-1.1-.5-2.4-.7-3.7-.6s-2.5 .5-3.5 1.2-1.9 1.7-2.5 2.8-.8 2.4-.8 3.6l.9 25.8c-1.5 1.2-3 2.4-4.4 3.6L81.8 73c-1.2-.3-2.5-.3-3.7 .1s-2.3 1-3.2 1.9-1.5 2-1.9 3.2-.4 2.5-.1 3.7L78.9 107c-1.2 1.4-2.4 2.9-3.6 4.4l-25.8-.9c-1.3 0-2.5 .2-3.6 .8s-2.1 1.4-2.8 2.4-1.1 2.2-1.2 3.5 .1 2.5 .6 3.6l10.7 23.4c-.9 1.7-1.8 3.4-2.7 5.2l-25.4 4.1c-1.2 .2-2.4 .7-3.4 1.5s-1.7 1.8-2.2 2.9-.7 2.4-.5 3.7 .6 2.4 1.3 3.4l15 20.8c-.6 1.9-1.1 3.8-1.7 5.7l-24 9c-1.2 .4-2.2 1.2-3 2.1s-1.4 2.1-1.6 3.3-.2 2.5 .2 3.7 1.1 2.3 2 3.1l18.7 17.5c-.2 2-.4 3.9-.6 5.9L3.5 249.8c-1.1 .7-1.9 1.6-2.6 2.7s-.9 2.3-.9 3.6 .3 2.5 .9 3.6 1.5 2 2.6 2.7l21.8 13.5c.2 2 .3 3.9 .6 5.9L7.1 299.1c-.9 .9-1.6 1.9-2 3.1s-.5 2.5-.2 3.7 .8 2.4 1.6 3.3 1.8 1.7 3 2.1l24 9c.6 1.9 1.1 3.8 1.7 5.6l-15 20.8c-.7 1-1.2 2.2-1.3 3.4s0 2.5 .5 3.7 1.2 2.2 2.2 2.9 2.1 1.3 3.4 1.5l25.4 4.2c.9 1.7 1.8 3.4 2.7 5.1L42.6 391.1c-.5 1.1-.7 2.4-.6 3.6s.5 2.5 1.2 3.5c.7 1.1 1.6 1.9 2.7 2.5s2.4 .8 3.6 .8l25.8-.9c1.2 1.5 2.4 2.9 3.6 4.4L73 430.2c-.3 1.2-.3 2.5 .1 3.7s1 2.3 1.9 3.2 2 1.5 3.2 1.9 2.5 .4 3.7 .1l25.2-5.9c1.5 1.2 2.9 2.4 4.4 3.6l-.9 25.8c0 1.3 .2 2.5 .8 3.6s1.4 2.1 2.5 2.8 2.2 1.1 3.5 1.2 2.5-.1 3.6-.6l23.4-10.7c1.7 .9 3.4 1.8 5.1 2.7l4.2 25.4c.2 1.2 .7 2.4 1.5 3.4s1.8 1.8 2.9 2.2 2.4 .7 3.7 .5 2.4-.6 3.4-1.3l20.8-15c1.9 .6 3.8 1.1 5.6 1.7l9 24c.4 1.2 1.2 2.2 2.1 3s2.1 1.4 3.3 1.6 2.5 .2 3.7-.2 2.3-1.1 3.1-2l17.5-18.7c2 .2 3.9 .4 5.9 .6l13.5 21.8c.7 1.1 1.6 1.9 2.7 2.6s2.3 .9 3.6 .9 2.5-.3 3.6-.9 2-1.5 2.7-2.6l13.5-21.8c2-.2 3.9-.3 5.9-.6l17.5 18.7c.9 .9 1.9 1.6 3.1 2s2.5 .5 3.7 .2 2.4-.8 3.3-1.6 1.7-1.8 2.1-3l9-24c1.9-.6 3.8-1.1 5.6-1.7l20.8 15c1 .7 2.2 1.2 3.4 1.3s2.5 0 3.7-.5 2.2-1.2 2.9-2.2 1.3-2.1 1.5-3.4l4.2-25.4c1.7-.9 3.4-1.8 5.1-2.7l23.4 10.7c1.1 .5 2.4 .7 3.6 .6s2.4-.5 3.5-1.2 1.9-1.6 2.5-2.8 .8-2.4 .8-3.6l-.9-25.8c1.5-1.2 2.9-2.4 4.4-3.6l25.2 5.9c1.2 .3 2.5 .3 3.7-.1s2.3-1 3.2-1.9 1.5-2 1.9-3.2 .4-2.5 .1-3.7L433.1 405c1.2-1.4 2.4-2.9 3.6-4.4l25.8 .9c1.3 .1 2.5-.2 3.6-.8s2.1-1.4 2.8-2.5c.7-1 1.1-2.2 1.2-3.5s-.1-2.5-.6-3.6l-10.7-23.4c.9-1.7 1.8-3.4 2.7-5.1l25.4-4.2c1.2-.2 2.4-.7 3.4-1.5s1.8-1.8 2.2-2.9 .7-2.4 .5-3.7-.6-2.4-1.3-3.4l-15-20.8c.6-1.9 1.1-3.8 1.7-5.6l24-9c1.2-.4 2.2-1.2 3-2.1s1.4-2.1 1.6-3.3 .2-2.5-.2-3.7-1.1-2.3-2-3.1l-18.7-17.5c.2-1.9 .4-3.9 .6-5.9l21.8-13.5c1.1-.7 1.9-1.6 2.6-2.7s.9-2.3 .9-3.6-.3-2.5-.9-3.6-1.5-2-2.6-2.7l0 0zm-151 129.1c-3.6-.8-7.4-.1-10.5 1.9s-5.3 5.2-6 8.8l-7.6 35.7c-24.6 11.1-51.3 16.8-78.3 16.7s-53.6-6.1-78.1-17.4l-7.6-35.7c-.4-1.8-1.1-3.5-2.1-5s-2.4-2.8-3.9-3.8-3.2-1.7-5-2-3.6-.3-5.4 .1l-31.5 6.8c-5.8-6-11.3-12.5-16.3-19.2l153.2 0c1.7 0 2.9-.3 2.9-1.9l0-54.2c0-1.6-1.2-1.9-2.9-1.9l-44.8 0 0-34.4 48.5 0c4.4 0 23.7 1.3 29.8 25.9 1.9 7.5 6.2 32.1 9.1 40 2.9 8.8 14.6 26.5 27.1 26.5l79 0c-5.3 7.1-11.1 13.8-17.3 20.1l-32.1-6.9zm25.8 34.5c0 3-.9 6-2.6 8.5s-4 4.5-6.8 5.6-5.8 1.5-8.8 .9-5.7-2-7.8-4.2-3.6-4.8-4.2-7.8-.3-6 .8-8.8 3.1-5.2 5.6-6.9 5.4-2.6 8.5-2.6l.4 0c4 .1 7.7 1.8 10.5 4.6s4.3 6.7 4.3 10.6l.1 0zm-225.6-.7c0 3-.9 6-2.6 8.5s-4.1 4.5-6.8 5.6-5.8 1.5-8.8 .9-5.7-2-7.8-4.2-3.6-4.8-4.2-7.8-.3-6 .9-8.8 3.1-5.2 5.6-6.8 5.4-2.6 8.5-2.6l.5 0c4 .1 7.7 1.8 10.5 4.6s4.3 6.7 4.3 10.6l.1 0zM69.6 234.2l32.8-14.6c1.7-.7 3.2-1.8 4.4-3.1s2.2-2.9 2.9-4.6 1-3.5 .9-5.3-.5-3.6-1.2-5.3l-6.8-15.2 26.6 0 0 119.7-53.6 0c-6.6-23.2-8.7-47.6-6.1-71.6zM58.3 198.1c0-2 .4-4 1.2-5.8s1.9-3.5 3.3-4.9 3.1-2.5 4.9-3.3 3.8-1.2 5.8-1.2l.5 0c3 .1 5.9 1 8.3 2.8s4.3 4.1 5.4 6.9 1.3 5.8 .7 8.8-2.1 5.6-4.3 7.7-4.9 3.5-7.8 4.1-6 .2-8.7-.9-5.1-3.1-6.8-5.6-2.5-5.4-2.5-8.4l0 0zm155.2 24.5l0-35.3 63.3 0c3.3 0 23.1 3.8 23.1 18.6 0 12.3-15.2 16.7-27.7 16.7l-58.7 0zM399 306.7c-9.8 1.1-20.6-4.1-22-10.1-5.8-32.5-15.4-39.4-30.6-51.4 18.9-12 38.5-29.6 38.5-53.3 0-25.5-17.5-41.6-29.4-49.5-16.8-11-35.3-13.2-40.3-13.2l-198.9 0c27.5-30.7 64.4-51.5 104.9-59.2l23.5 24.6c1.3 1.3 2.8 2.4 4.4 3.1s3.5 1.1 5.3 1.2 3.6-.3 5.3-.9 3.2-1.7 4.6-2.9l26.3-25c26.8 5 52.1 15.8 74.3 31.6s40.6 36.2 54.1 59.9l-18 40.6c-1.5 3.4-1.5 7.2-.2 10.6s3.9 6.2 7.3 7.7l34.6 15.3c1.1 10.8 1.2 21.7 .4 32.5l-19.3 0c-1.9 0-2.7 1.3-2.7 3.1l0 8.8c0 20.8-11.7 25.3-22 26.5zM240 60.2c0-4 1.6-7.9 4.5-10.7s6.7-4.5 10.7-4.5l.4 0c3 .1 5.9 1 8.4 2.8s4.3 4.1 5.4 6.9 1.3 5.8 .7 8.8-2.1 5.6-4.3 7.7-4.9 3.5-7.8 4-6 .2-8.7-.9-5.1-3.1-6.8-5.6-2.5-5.4-2.5-8.4zM436.8 214c-2 0-4-.4-5.8-1.2s-3.5-1.9-4.9-3.3-2.5-3.1-3.3-4.9-1.2-3.8-1.2-5.8 .4-4 1.2-5.8 1.9-3.5 3.3-4.9 3.1-2.5 4.9-3.3 3.8-1.2 5.8-1.2l.4 0c4 .1 7.9 1.7 10.7 4.6s4.4 6.8 4.3 10.8-1.7 7.9-4.6 10.7-6.8 4.4-10.8 4.3z\"]\n};\nvar faHornbill = {\n  prefix: 'fab',\n  iconName: 'hornbill',\n  icon: [512, 512, [], \"f592\", \"M76.8 370.3c1 7.8-.4 15.8-4.1 22.8s-9.6 12.6-16.7 16.1-15.1 4.7-22.9 3.3-15-5.1-20.6-10.7-9.2-12.9-10.5-20.7 0-15.8 3.6-22.9 9.3-12.8 16.3-16.5 15-5 22.9-3.9c-78.3-111.3 52-190.5 52-190.5-5.9 43-8.2 91.2-8.2 91.2-67.3 41.5 .9 64.1 39.8 72.9 9.9 27 27.8 50.2 51.4 66.7s51.6 25.3 80.3 25.3c1.9 0 3.8-.2 5.7-.3l.1 18.9c-99.2 1.4-158.7-29.1-188.9-51.6zm108-327.7c.9-7.2-.2-14.6-3.4-21.2-3-6.2-7.6-11.5-13.4-15.3s-12.5-5.9-19.4-6.2-13.8 1.4-19.8 4.7-11.1 8.3-14.5 14.3-5.2 12.8-5 19.7 2.2 13.7 5.9 19.5 8.9 10.6 15.1 13.6 13.1 4.4 20 3.9c-22.6 29.9-53.8 89.6-52.4 190l21.8-.2c0-.9-.1-1.8-.1-2.7 0-28 8.4-55.3 24.1-78.5s37.9-41.2 63.8-51.6c8-37.7 30.7-114.3 73.8-44.3 0 0 48.1 2.4 91.2 8.2 0 0-77.8-128-187.6-54.1l0 0zM489 176.8c6.3-3 11.7-7.7 15.5-13.6s5.9-12.7 6.1-19.8-1.6-14-5.2-20-8.7-11-14.9-14.3-13.2-4.8-20.2-4.4-13.8 2.8-19.5 6.9-10.2 9.6-13 16.1-3.7 13.6-2.7 20.5c-31.7-21.9-89.8-49.1-183.4-47.7l.1 22.5c2.7-.2 5.4-.4 8.1-.4 28.1 0 55.6 8.5 78.9 24.3s41.2 38.3 51.6 64.5c39.1 9 105.1 31.6 38.5 72.5 0 0-2.3 48.1-8.2 91.2 0 0 133.4-81.2 49-194.6 6.6 .6 13.3-.6 19.3-3.5l0 0zM374.4 436.2c21.4-32.5 46.4-89.7 45.1-179.7l-19.5 .1c.1 2.1 .3 4.1 .3 6.2 0 28.6-8.8 56.5-25.1 80s-39.5 41.4-66.3 51.4c-8.9 39-31.4 106.7-72.8 39.5 0 0-48.1-2.3-91.2-8.2 0 0 79.9 131.3 191.9 51 .3 4.9 1.5 9.6 3.6 14 2.9 6.1 7.5 11.4 13.1 15.1s12.2 6 19 6.4 13.6-1.1 19.6-4.2 11.1-7.8 14.7-13.6 5.6-12.4 5.7-19.2-1.5-13.5-4.8-19.4-8.2-10.9-14.1-14.3-12.6-5.2-19.4-5.1l0-.1z\"]\n};\nvar faPhp = {\n  prefix: 'fab',\n  iconName: 'php',\n  icon: [640, 512, [], \"f457\", \"M320 104.5c171.4 0 303.2 72.2 303.2 151.5S491.3 407.5 320 407.5C148.6 407.5 16.8 335.3 16.8 256S148.7 104.5 320 104.5zm0-16.8C143.3 87.7 0 163 0 256S143.3 424.3 320 424.3 640 349 640 256 496.7 87.7 320 87.7zM218.2 242.5c-7.9 40.5-35.8 36.3-70.1 36.3l13.7-70.6c38 0 63.8-4.1 56.4 34.3zM97.4 350.3l36.7 0 8.7-44.8c41.1 0 66.6 3 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7l-70.7 0-32.7 168.7zM283.1 136.7l36.5 0-8.7 44.8c31.5 0 60.7-2.3 74.8 10.7 14.8 13.6 7.7 31-8.3 113.1l-37 0c15.4-79.4 18.3-86 12.7-92-5.4-5.8-17.7-4.6-47.4-4.6l-18.8 96.6-36.5 0 32.7-168.6zM505 242.5c-8 41.1-36.7 36.3-70.1 36.3l13.7-70.6c38.2 0 63.8-4.1 56.4 34.3zM384.2 350.3l36.8 0 8.7-44.8c43.2 0 67.1 2.5 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7l-70.7 0-32.8 168.7z\"]\n};\nvar faDisqus = {\n  prefix: 'fab',\n  iconName: 'disqus',\n  icon: [576, 512, [], \"e7d5\", \"M290.2 512c-62.6 0-119.9-22.9-164.2-60.8L17 466.1 59.1 362.2c-14.7-32.4-22.9-68.3-22.9-106.2 0-141.4 113.7-256 254-256 140.3 0 254 114.6 254 256 0 141.4-113.7 256-254 256zM428.9 255.3l0-.7C428.9 180.7 376.8 128 287 128l-97 0 0 256 95.6 0c90.5 0 143.4-54.9 143.4-128.7zM288 321.1l-28.4 0 0-130.2 28.4 0c41.7 0 69.3 23.8 69.3 64.7l0 .7c0 41.3-27.7 64.7-69.3 64.7z\"]\n};\nvar fa500px = {\n  prefix: 'fab',\n  iconName: '500px',\n  icon: [384, 512, [], \"f26e\", \"M71.8 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2l.3 0 0-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7 8.5-28.6 53 0 89.4-10.1 89.4-64.4 0-61-77.1-89.6-116.9-44.6-23.5 26.4-17.6 42.1-17.6 157.6 50.7 31 118.3 22 160.4-20.1 24.8-24.8 38.5-58 38.5-93 0-35.2-13.8-68.2-38.8-93.3-24.8-24.8-57.8-38.5-93.3-38.5S151 163.3 126.3 188c-.3 .3-16 16.5-21.2 23.9l-.5 .6c-3.3 4.7-6.3 9.1-20.1 6.1-6.9-1.7-14.3-5.8-14.3-11.8L70.2 20c0-5 3.9-10.5 10.5-10.5L322 9.5c8.3 0 8.3 11.6 8.3 15.1 0 3.9 0 15.1-8.3 15.1l-223.2 0 0 132.9 .3 0c104.2-109.8 282.8-36 282.8 108.9 0 178.1-244.8 220.3-310.1 62.8zM135.1 83.5c-.5 4.2 4.6 24.5 14.6 20.6 124.8-47.5 202.8 40.4 209.4 40.4 4.8 0 22.8-15.3 14.3-22.8-93.2-89-234.5-57-238.3-38.2zM361.5 414.7c-110 109.9-299 60.8-332-104.2 0-12.2-30.4-7.4-28.9 3.3 24 173.4 246 256.9 381.6 121.3 6.9-7.8-12.6-28.4-20.7-20.4zM182.1 306.6c0 4 4.3 7.3 5.5 8.5 3 3 6.1 4.4 8.5 4.4 3.8 0 2.6 .2 22.3-19.5 19.6 19.3 19.1 19.5 22.3 19.5 5.4 0 18.5-10.4 10.7-18.2l-17.3-17.3 18.2-18.2c6.3-6.8-10.1-21.8-16.2-15.7L218.2 268c-18.6-18.8-18.4-19.5-21.5-19.5-5 0-18 11.7-12.4 17.3L202.5 284c-18.1 17.9-20.4 19.2-20.4 22.6z\"]\n};\nvar faAffiliatetheme = {\n  prefix: 'fab',\n  iconName: 'affiliatetheme',\n  icon: [512, 512, [], \"f36b\", \"M159.7 237.4C108.4 308.3 43.1 348.2 14 326.6-15.2 304.9 2.8 230 54.2 159.1 105.5 88.2 170.8 48.3 199.9 69.9s11.1 96.6-40.2 167.5zm351.2-57.3c-73.8 123.4-191.9 187.7-264.5 143.6-25-15.2-41.3-41.2-49-73.8-33.6 64.8-92.8 113.8-164.1 133.2 49.8 59.3 124.1 96.9 207 96.9 150 0 271.6-123.1 271.6-274.9 .1-8.5-.3-16.8-1-25z\"]\n};\nvar faRedRiver = {\n  prefix: 'fab',\n  iconName: 'red-river',\n  icon: [448, 512, [], \"f3e3\", \"M353.2 32L94.8 32C42.4 32 0 74.4 0 126.8L0 385.2C0 437.6 42.4 480 94.8 480l258.4 0c52.4 0 94.8-42.4 94.8-94.8l0-258.4C448 74.4 405.6 32 353.2 32zM144.9 200.9l0 56.3c0 27-21.9 48.9-48.9 48.9l0-154.2c0-13.2 10.7-23.9 23.9-23.9l154.2 0c0 27-21.9 48.9-48.9 48.9l-56.3 0c-12.3-.6-24.6 11.6-24 24zm176.3 72l-56.3 0c-12.3-.6-24.6 11.6-24 24l0 56.3c0 27-21.9 48.9-48.9 48.9l0-154.2c0-13.2 10.7-23.9 23.9-23.9l154.2 0c0 27-21.9 48.9-48.9 48.9z\"]\n};\nvar faTwitter = {\n  prefix: 'fab',\n  iconName: 'twitter',\n  icon: [512, 512, [], \"f099\", \"M459.4 151.7c.3 4.5 .3 9.1 .3 13.6 0 138.7-105.6 298.6-298.6 298.6-59.5 0-114.7-17.2-161.1-47.1 8.4 1 16.6 1.3 25.3 1.3 49.1 0 94.2-16.6 130.3-44.8-46.1-1-84.8-31.2-98.1-72.8 6.5 1 13 1.6 19.8 1.6 9.4 0 18.8-1.3 27.6-3.6-48.1-9.7-84.1-52-84.1-103l0-1.3c14 7.8 30.2 12.7 47.4 13.3-28.3-18.8-46.8-51-46.8-87.4 0-19.5 5.2-37.4 14.3-53 51.7 63.7 129.3 105.3 216.4 109.8-1.6-7.8-2.6-15.9-2.6-24 0-57.8 46.8-104.9 104.9-104.9 30.2 0 57.5 12.7 76.7 33.1 23.7-4.5 46.5-13.3 66.6-25.3-7.8 24.4-24.4 44.8-46.1 57.8 21.1-2.3 41.6-8.1 60.4-16.2-14.3 20.8-32.2 39.3-52.6 54.3z\"]\n};\nvar faFortAwesome = {\n  prefix: 'fab',\n  iconName: 'fort-awesome',\n  icon: [512, 512, [], \"f286\", \"M489.5 287.9l-27.4 0c-2.6 0-4.6 2-4.6 4.6l0 32-36.6 0 0-178.3c0-2.6-2-4.6-4.6-4.6l-27.4 0c-2.6 0-4.6 2-4.6 4.6l0 32-36.6 0 0-32c0-2.6-2-4.6-4.6-4.6l-27.4 0c-2.6 0-4.6 2-4.6 4.6l0 32-36.6 0 0-32c0-6-8-4.6-11.7-4.6l0-38c8.3-2 17.1-3.4 25.7-3.4 10.9 0 20.9 4.3 31.4 4.3 4.6 0 27.7-1.1 27.7-8l0-60c0-2.6-2-4.6-4.6-4.6-5.1 0-15.1 4.3-24 4.3-9.7 0-20.9-4.3-32.6-4.3-8 0-16 1.1-23.7 2.9l0-4.9c5.4-2.6 9.1-8.3 9.1-14.3 0-20.7-31.4-20.8-31.4 0 0 6 3.7 11.7 9.1 14.3l0 111.7c-3.7 0-11.7-1.4-11.7 4.6l0 32-36.6 0 0-32c0-2.6-2-4.6-4.6-4.6l-27.4 0c-2.6 0-4.6 2-4.6 4.6l0 32-36.3 0 0-32c0-2.6-2-4.6-4.6-4.6l-27.4 0c-2.6 0-4.6 2-4.6 4.6l0 178.3-36.6 0 0-32c0-2.6-2-4.6-4.6-4.6l-27.4 0c-2.6 0-4.6 2-4.6 4.6l0 219.5 182.9 0 0-96c0-72.6 109.7-72.6 109.7 0l0 96 182.9 0 0-219.5c.1-2.6-1.9-4.6-4.5-4.6zm-288.1-4.5c0 2.6-2 4.6-4.6 4.6l-27.4 0c-2.6 0-4.6-2-4.6-4.6l0-64c0-2.6 2-4.6 4.6-4.6l27.4 0c2.6 0 4.6 2 4.6 4.6l0 64zm146.4 0c0 2.6-2 4.6-4.6 4.6l-27.4 0c-2.6 0-4.6-2-4.6-4.6l0-64c0-2.6 2-4.6 4.6-4.6l27.4 0c2.6 0 4.6 2 4.6 4.6l0 64z\"]\n};\nvar faMixer = {\n  prefix: 'fab',\n  iconName: 'mixer',\n  icon: [448, 512, [], \"e056\", \"M82.6 76.1c-3.8-5.1-8.7-9.4-14.2-12.5s-11.7-5.1-18.1-5.7-12.8 .1-18.8 2.2-11.6 5.3-16.3 9.6c-17.6 16.2-19 43.5-4.8 62.8l91.8 123-92.3 124.1c-14.2 19.3-13.1 46.6 4.7 62.8 4.7 4.3 10.3 7.6 16.3 9.6s12.5 2.8 18.8 2.2 12.5-2.5 18.1-5.7 10.4-7.4 14.2-12.5L210.9 262.7c1.5-2.1 2.3-4.6 2.3-7.1s-.8-5-2.3-7.1L82.6 76.1zM438.2 379.6l-92.3-124.1 91.8-123c14.2-19.2 12.8-46.6-4.7-62.8-4.7-4.3-10.3-7.6-16.3-9.6s-12.5-2.8-18.8-2.2-12.5 2.5-18.1 5.7-10.4 7.4-14.2 12.5l-128 172.1c-1.5 2.1-2.3 4.6-2.3 7.1s.8 5 2.3 7.1L366 435.9c3.8 5.1 8.7 9.4 14.2 12.5s11.7 5.1 18.1 5.7 12.8-.1 18.8-2.2 11.6-5.3 16.3-9.6c17.8-16.2 19-43.5 4.7-62.8z\"]\n};\nvar faLyft = {\n  prefix: 'fab',\n  iconName: 'lyft',\n  icon: [512, 512, [], \"f3c3\", \"M0 81.1l77.8 0 0 208.7c0 33.1 15 52.8 27.2 61-12.7 11.1-51.2 20.9-80.2-2.8-17-14-24.8-37.3-24.8-59L0 81.1zM485.9 254.6l0-22 23.8 0 0-76.8-26.1 0c-10.1-46.3-51.2-80.7-100.3-80.7-56.6 0-102.7 46-102.7 102.7l0 179.2c16 2.3 35.4-.3 51.7-14 17.1-14 24.8-37.2 24.8-59l0-6.7 38.8 0 0-76.8-38.8 0 0-23.3c0-34.6 52.2-34.6 52.2 0l0 77.1c0 56.6 46 102.7 102.7 102.7l0-76.5c-14.5 0-26.1-11.7-26.1-25.9zm-294.3-99l0 113c0 15.4-23.8 15.4-23.8 0l0-113-76.8 0 0 132.7c0 23.8 8 54 45 63.9 37 9.8 58.2-10.6 58.2-10.6-2.1 13.4-14.5 23.3-34.9 25.3-15.5 1.6-35.2-3.6-45-7.8l0 70.3c25.1 7.5 51.5 9.8 77.6 4.7 47.1-9.1 76.8-48.4 76.8-100.8l0-178.2-77.1 0 0 .5z\"]\n};\nvar faApplePay = {\n  prefix: 'fab',\n  iconName: 'apple-pay',\n  icon: [640, 512, [], \"f415\", \"M116.9 158.5c-7.5 8.9-19.5 15.9-31.5 14.9-1.5-12 4.4-24.8 11.3-32.6 7.5-9.1 20.6-15.6 31.3-16.1 1.2 12.4-3.7 24.7-11.1 33.8zm10.9 17.2c-17.4-1-32.3 9.9-40.5 9.9-8.4 0-21-9.4-34.8-9.1-17.9 .3-34.5 10.4-43.6 26.5-18.8 32.3-4.9 80 13.3 106.3 8.9 13 19.5 27.3 33.5 26.8 13.3-.5 18.5-8.6 34.5-8.6 16.1 0 20.8 8.6 34.8 8.4 14.5-.3 23.6-13 32.5-26 10.1-14.8 14.3-29.1 14.5-29.9-.3-.3-28-10.9-28.3-42.9-.3-26.8 21.9-39.5 22.9-40.3-12.5-18.6-32-20.6-38.8-21.1zm100.4-36.2l0 194.9 30.3 0 0-66.6 41.9 0c38.3 0 65.1-26.3 65.1-64.3s-26.4-64-64.1-64l-73.2 0zM258.5 165l34.9 0c26.3 0 41.3 14 41.3 38.6s-15 38.8-41.4 38.8l-34.8 0 0-77.4zM420.7 335.9c19 0 36.6-9.6 44.6-24.9l.6 0 0 23.4 28 0 0-97c0-28.1-22.5-46.3-57.1-46.3-32.1 0-55.9 18.4-56.8 43.6l27.3 0c2.3-12 13.4-19.9 28.6-19.9 18.5 0 28.9 8.6 28.9 24.5l0 10.8-37.8 2.3c-35.1 2.1-54.1 16.5-54.1 41.5 .1 25.2 19.7 42 47.8 42zm8.2-23.1c-16.1 0-26.4-7.8-26.4-19.6 0-12.3 9.9-19.4 28.8-20.5l33.6-2.1 0 11c0 18.2-15.5 31.2-36 31.2zm102.5 74.6c29.5 0 43.4-11.3 55.5-45.4l53.1-149-30.8 0-35.6 115.1-.6 0-35.6-115.1-31.6 0 51.2 141.9-2.8 8.6c-4.6 14.6-12.1 20.3-25.5 20.3-2.4 0-7-.3-8.9-.5l0 23.4c1.8 .4 9.3 .7 11.6 .7z\"]\n};\nvar faArtstation = {\n  prefix: 'fab',\n  iconName: 'artstation',\n  icon: [512, 512, [], \"f77a\", \"M2.1 377.4l43 74.3c4.3 8.5 10.8 15.7 18.9 20.7s17.4 7.6 27 7.6l285.4 0-59.2-102.6-315.1 0zM501.9 350L335.7 59.3c-4.4-8.2-10.9-15.1-18.9-20S299.7 32 290.4 32l-88.4 0 257.3 447.6 40.7-70.5c1.9-3.2 21-29.7 2-59.1zM275.2 304.5l-115.5-200-115.5 200 231 0z\"]\n};\nvar faNodeJs = {\n  prefix: 'fab',\n  iconName: 'node-js',\n  icon: [448, 512, [], \"f3d3\", \"M224.5 508c-6.7 0-13.5-1.8-19.4-5.2l-61.7-36.5c-9.2-5.2-4.7-7-1.7-8 12.3-4.3 14.8-5.2 27.9-12.7 1.4-.8 3.2-.5 4.6 .4l47.4 28.1c1.7 1 4.1 1 5.7 0L412 367.5c1.7-1 2.8-3 2.8-5l0-213.2c0-2.1-1.1-4-2.9-5.1L227.3 37.7c-1.7-1-4-1-5.7 0L37.1 144.3c-1.8 1-2.9 3-2.9 5.1l0 213.1c0 2 1.1 4 2.9 4.9l50.6 29.2c27.5 13.7 44.3-2.4 44.3-18.7l0-210.4c0-3 2.4-5.3 5.4-5.3l23.4 0c2.9 0 5.4 2.3 5.4 5.3l0 210.5c0 36.6-20 57.6-54.7 57.6-10.7 0-19.1 0-42.5-11.6L20.6 396.1c-12-6.9-19.4-19.8-19.4-33.7l0-213.1c0-13.8 7.4-26.8 19.4-33.7L205.1 9c11.7-6.6 27.2-6.6 38.8 0L428.6 115.7c12 6.9 19.4 19.8 19.4 33.7l0 213.1c0 13.8-7.4 26.7-19.4 33.7L243.9 502.8c-5.9 3.4-12.6 5.2-19.4 5.2zM373.6 297.9c0-39.9-27-50.5-83.7-58-57.4-7.6-63.2-11.5-63.2-24.9 0-11.1 4.9-25.9 47.4-25.9 37.9 0 51.9 8.2 57.7 33.8 .5 2.4 2.7 4.2 5.2 4.2l24 0c1.5 0 2.9-.6 3.9-1.7s1.5-2.6 1.4-4.1c-3.7-44.1-33-64.6-92.2-64.6-52.7 0-84.1 22.2-84.1 59.5 0 40.4 31.3 51.6 81.8 56.6 60.5 5.9 65.2 14.8 65.2 26.7 0 20.6-16.6 29.4-55.5 29.4-48.9 0-59.6-12.3-63.2-36.6-.4-2.6-2.6-4.5-5.3-4.5l-23.9 0c-3 0-5.3 2.4-5.3 5.3 0 31.1 16.9 68.2 97.8 68.2 58.4-.1 92-23.2 92-63.4z\"]\n};\nvar faUncharted = {\n  prefix: 'fab',\n  iconName: 'uncharted',\n  icon: [448, 512, [], \"e084\", \"M171.8 232.8c1.1 0 2.1-.3 3-.9s1.6-1.4 2-2.4c2.2-9.8 7.4-18.6 14.9-25.3 1.2-.8 1.7-2.5 1.7-4.1-.1-.7-.3-1.3-.6-1.9s-.9-1.1-1.4-1.4L74.5 128.5 149.1 85c1.5-.8 2.7-2 3.6-3.5s1.4-3.1 1.4-4.8c0-1.7-.4-3.4-1.3-4.9s-2.2-2.7-3.7-3.4L126.7 55.6c-1.5-.8-3.1-1.2-4.8-1.2s-3.3 .4-4.8 1.2L17 113.6c-1.5 .8-2.7 2-3.6 3.5s-1.4 3.1-1.4 4.8L12 237c0 1.7 .4 3.4 1.3 4.9s2.2 2.7 3.7 3.4l22.4 12.8c1.5 .9 3.2 1.3 5 1.2 2.4 .1 4.8-.8 6.6-2.5 1.8-1.9 2.8-4.4 2.9-7l0-85.3 115.9 67.9c.6 .3 1.4 .4 2.1 .4zM323.4 377.7c-1.7 .1-3.4 .5-5 1.2l-74.5 43.1 0-134.2c0-2.9-2.9-5.8-6.2-4.6-9.4 2.8-19.5 3-29 .4-.7-.2-1.5-.2-2.2-.1s-1.4 .4-2 .9-1.1 1-1.4 1.7-.5 1.4-.5 2.1l0 133.3-74.5-43.1c-1.5-.9-3.2-1.3-5-1.2-2.5 0-4.9 1-6.7 2.8s-2.8 4.2-2.8 6.7l0 26.1c0 1.7 .4 3.4 1.3 4.9s2.2 2.7 3.7 3.4l100.2 57.6c1.5 .9 3.2 1.3 5 1.2 1.7 0 3.4-.4 5-1.2l100.2-57.6c1.5-.8 2.7-2 3.6-3.5s1.4-3.1 1.4-4.8l0-26.1c-.8-4.6-5.4-9.1-10.4-9.1zM286.1 78a23 23 0 1 0 0-46 23 23 0 1 0 0 46zm63.6-10.1a23 23 0 1 0 0 46 23 23 0 1 0 0-46zm63.2 83.7a23 23 0 1 0 0-46 23 23 0 1 0 0 46zm-63.2-9.2a23 23 0 1 0 0 46 23 23 0 1 0 0-46zm-63.6 83.2c4.5 0 9-1.3 12.8-3.9s6.7-6.1 8.5-10.3 2.2-8.8 1.3-13.3-3.1-8.6-6.3-11.8-7.3-5.4-11.8-6.3-9.1-.4-13.3 1.3-7.8 4.7-10.3 8.5-3.9 8.2-3.9 12.8c0 3 .6 6 1.8 8.8s2.9 5.3 5 7.5 4.7 3.8 7.5 5 5.8 1.8 8.8 1.8l0 0zM224 262c4.5 0 9-1.4 12.8-3.9s6.7-6.1 8.5-10.3 2.2-8.8 1.3-13.3-3.1-8.6-6.3-11.8-7.3-5.4-11.8-6.3-9.1-.4-13.3 1.3-7.8 4.7-10.3 8.5-3.9 8.2-3.9 12.8c0 3 .6 6 1.7 8.8s2.8 5.3 5 7.5 4.7 3.8 7.5 5 5.8 1.8 8.8 1.8l0 0zm188.9-82.4c-4.6 0-9 1.3-12.8 3.9s-6.7 6.1-8.5 10.3-2.2 8.8-1.3 13.3 3.1 8.6 6.3 11.8 7.3 5.4 11.8 6.3 9.1 .4 13.3-1.3 7.8-4.7 10.3-8.5 3.9-8.2 3.9-12.8c0-6.1-2.4-11.9-6.7-16.3s-10.2-6.7-16.3-6.7l0 0zm0 72.3c-4.6 0-9 1.3-12.8 3.9s-6.7 6.1-8.5 10.3-2.2 8.8-1.3 13.3 3.1 8.6 6.3 11.8 7.3 5.4 11.8 6.3 9.1 .4 13.3-1.3 7.8-4.7 10.3-8.5 3.9-8.2 3.9-12.8c0-6.1-2.4-11.9-6.7-16.3s-10.2-6.7-16.3-6.7l0 0z\"]\n};\nvar faPlaystation = {\n  prefix: 'fab',\n  iconName: 'playstation',\n  icon: [576, 512, [], \"f3df\", \"M571 372.3c-11.3 14.2-38.8 24.3-38.8 24.3l-205.1 73.6 0-54.3 150.9-53.8c17.1-6.1 19.8-14.8 5.8-19.4-13.9-4.6-39.1-3.3-56.2 2.9l-100.5 35.5 0-56.4c23.2-7.8 47.1-13.6 75.7-16.8 40.9-4.5 90.9 .6 130.2 15.5 44.2 14 49.2 34.7 38 48.9zM346.6 279.8l0-139c0-16.3-3-31.3-18.3-35.6-11.7-3.8-19 7.1-19 23.4l0 347.9-93.8-29.8 0-414.7c39.9 7.4 98 24.9 129.2 35.4 79.5 27.3 106.4 61.3 106.4 137.8 0 74.5-46 102.8-104.5 74.6zM43.3 410.2c-45.4-12.8-53-39.5-32.3-54.8 19.1-14.2 51.7-24.9 51.7-24.9l134.5-47.8 0 54.5-96.8 34.6c-17.1 6.1-19.7 14.8-5.8 19.4s39.1 3.3 56.2-2.9l46.4-16.9 0 48.8c-51.6 9.3-101.4 7.3-153.9-10z\"]\n};\nvar faMicroblog = {\n  prefix: 'fab',\n  iconName: 'microblog',\n  icon: [448, 512, [], \"e01a\", \"M399.8 362.2c29.5-34.7 47.1-78.3 47.1-125.8 0-113-99.6-204.4-222.5-204.4S2 123.5 2 236.4 101.6 440.9 224.5 440.9c27 0 53.9-4.5 79.4-13.4 1.4-.5 3-.5 4.5-.1s2.7 1.4 3.6 2.6c18.6 25.1 47.6 42.7 79.9 49.9 1.1 .2 2.3 0 3.3-.6s1.7-1.6 1.9-2.8c.1-.6 .1-1.3 0-1.9s-.4-1.2-.8-1.7c-12.3-16-18.7-35.8-18-56s8.4-39.5 21.7-54.7l-.2 .1zM330 212.4l-57.3 43.5 20.8 68.9c.4 1.3 .4 2.7-.1 4s-1.2 2.4-2.3 3.2-2.4 1.2-3.8 1.2-2.7-.4-3.8-1.2l-59.1-41-59.1 41.1c-1.1 .8-2.4 1.2-3.8 1.2s-2.7-.4-3.8-1.2-1.9-1.9-2.3-3.2-.5-2.7-.1-4l20.8-68.9-57.3-43.5c-1.1-.8-1.9-1.9-2.3-3.2s-.4-2.7 0-4 1.2-2.4 2.3-3.2 2.4-1.3 3.7-1.3l71.9-1.5 23.7-67.9c.4-1.3 1.3-2.4 2.4-3.2s2.4-1.2 3.8-1.2 2.7 .4 3.8 1.2 1.9 1.9 2.4 3.2l23.7 67.9 71.9 1.5c1.4 0 2.7 .4 3.8 1.2s1.9 1.9 2.3 3.2 .4 2.7 0 4-1.2 2.4-2.3 3.3l0 0z\"]\n};\nvar faGitkraken = {\n  prefix: 'fab',\n  iconName: 'gitkraken',\n  icon: [576, 512, [], \"f3a6\", \"M557.7 118.1c-2.3-6.1-9.3-9.2-15.3-6.6-5.7 2.4-8.5 8.9-6.3 14.6 10.9 29 16.9 60.5 16.9 93.3 0 134.6-100.3 245.7-230.2 262.7l0-123.7c7.9-1.5 15.5-3.6 23-6.2l0 104c106.7-25.9 185.9-122.1 185.9-236.8 0-91.8-50.8-171.8-125.8-213.3-5.7-3.2-13-.9-15.9 5-2.7 5.5-.6 12.2 4.7 15.1 67.9 37.6 113.9 110 113.9 193.2 0 93.3-57.9 173.1-139.8 205.4l0-92.2c14.2-4.5 24.9-17.7 24.9-33.5 0-13.1-6.8-24.4-17.3-30.5 8.3-79.5 44.5-58.6 44.5-83.9l0-14.7c0-38-87.9-161.8-129-164.7-2.5-.2-5-.2-7.6 0-41.2 3-129.1 126.7-129.1 164.7l0 14.8c0 25.3 36.3 4.3 44.5 83.9-10.6 6.1-17.3 17.4-17.3 30.5 0 15.8 10.6 29 24.8 33.5l0 92.2c-81.9-32.2-139.8-112-139.8-205.4 0-83.1 46-155.5 113.9-193.2 5.4-3 7.4-9.6 4.7-15.1-2.9-5.9-10.1-8.2-15.9-5-75 41.5-125.8 121.5-125.8 213.3 0 114.7 79.2 210.8 185.9 236.8l0-104c7.6 2.5 15.1 4.6 23 6.2l0 123.7c-129.8-17-230.2-128.1-230.2-262.7 0-32.8 6-64.3 16.9-93.3 2.2-5.8-.6-12.2-6.3-14.6-6-2.6-13 .4-15.3 6.6-11.8 31.5-18.3 65.6-18.3 101.3 0 155.1 122.6 281.6 276.3 287.8l0-145.9c6.8 .4 15 .5 23.4 0l0 145.8c153.7-6.1 276.3-132.6 276.3-287.7 0-35.7-6.5-69.8-18.3-101.4zM357.9 322.9a23.7 23.7 0 1 1 0-47.4 23.7 23.7 0 1 1 0 47.4zM218.1 275.4a23.7 23.7 0 1 1 0 47.4 23.7 23.7 0 1 1 0-47.4z\"]\n};\nvar faTelegram = {\n  prefix: 'fab',\n  iconName: 'telegram',\n  icon: [512, 512, [62462, \"telegram-plane\"], \"f2c6\", \"M256 8a248 248 0 1 0 0 496 248 248 0 1 0 0-496zM371 176.7c-3.7 39.2-19.9 134.4-28.1 178.3-3.5 18.6-10.3 24.8-16.9 25.4-14.4 1.3-25.3-9.5-39.3-18.7-21.8-14.3-34.2-23.2-55.3-37.2-24.5-16.1-8.6-25 5.3-39.5 3.7-3.8 67.1-61.5 68.3-66.7 .2-.7 .3-3.1-1.2-4.4s-3.6-.8-5.1-.5c-2.2 .5-37.1 23.5-104.6 69.1-9.9 6.8-18.9 10.1-26.9 9.9-8.9-.2-25.9-5-38.6-9.1-15.5-5-27.9-7.7-26.8-16.3 .6-4.5 6.7-9 18.4-13.7 72.3-31.5 120.5-52.3 144.6-62.3 68.9-28.6 83.2-33.6 92.5-33.8 2.1 0 6.6 .5 9.6 2.9 2 1.7 3.2 4.1 3.5 6.7 .5 3.2 .6 6.5 .4 9.8z\"]\n};\nvar faTelegramPlane = faTelegram;\nvar faUltralytics = {\n  prefix: 'fab',\n  iconName: 'ultralytics',\n  icon: [512, 512, [], \"e86d\", \"M391.4 39.7c65.8-.2 118.6 51.8 120.4 116.6 .7 26.4-1.5 54.1-3.8 74.1-17.2 148.6-122.4 242-252.4 242-95.4-.1-179.4-52.7-223.2-130.6 24.4 17.4 54.5 27.4 87.6 27.4 83.2 .1 151.4-67.4 151.2-150l.1-60.6c-.2-65.7 53.9-119 120.1-118.9zM119.9 100.2c66.2 0 119.9 53.3 119.9 119S186.1 338.3 119.9 338.3 0 285 0 219.3c0-65.7 53.7-119 119.9-119z\"]\n};\nvar faItunesNote = {\n  prefix: 'fab',\n  iconName: 'itunes-note',\n  icon: [384, 512, [], \"f3b5\", \"M381.9 388.2c-6.4 27.4-27.2 42.8-55.1 48-24.5 4.5-44.9 5.6-64.5-10.2-23.9-20.1-24.2-53.4-2.7-74.4 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 6.4-7.2 4.4-4.1 4.4-163.2 0-11.2-5.5-14.3-17-12.3-8.2 1.4-185.7 34.6-185.7 34.6-10.2 2.2-13.4 5.2-13.4 16.7 0 234.7 1.1 223.9-2.5 239.5-4.2 18.2-15.4 31.9-30.2 39.5-16.8 9.3-47.2 13.4-63.4 10.4-43.2-8.1-58.4-58-29.1-86.6 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 10.1-11.5 1.8-256.6 5.2-270.2 .8-5.2 3-9.6 7.1-12.9 4.2-3.5 11.8-5.5 13.4-5.5 204-38.2 228.9-43.1 232.4-43.1 11.5-.8 18.1 6 18.1 17.6 .2 344.5 1.1 326-1.8 338.5z\"]\n};\nvar faLess = {\n  prefix: 'fab',\n  iconName: 'less',\n  icon: [640, 512, [], \"f41d\", \"M613.2 219c0-20.5 3.2-32.6 3.2-54.6 0-34.2-12.6-45.2-40.5-45.2l-20.5 0 0 24.2 6.3 0c14.2 0 17.3 4.7 17.3 22.1 0 16.3-1.6 32.6-1.6 51.5 0 24.2 7.9 33.6 23.6 37.3l0 1.6c-15.8 3.7-23.6 13.1-23.6 37.3 0 18.9 1.6 34.2 1.6 51.5 0 17.9-3.7 22.6-17.3 22.6l0 .5-6.3 0 0 25.2 20.5 0c27.8 0 40.5-11 40.5-45.2 0-22.6-3.2-34.2-3.2-54.6 0-11 6.8-22.6 27.3-23.6l0-27.3c-20.5-.7-27.3-12.3-27.3-23.3zM507.6 251c-15.8-6.3-30.5-10-30.5-20.5 0-7.9 6.3-12.6 17.9-12.6s22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-21 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51s-22.5-41-43-47.8zM148.7 310.4c-3.7 0-8.4-3.2-8.4-13.1l0-178.2-74.6 0c-28.4 0-41 11-41 45.2 0 22.6 3.2 35.2 3.2 54.6 0 11-6.8 22.6-27.3 23.6l0 27.3c20.5 .5 27.3 12.1 27.3 23.1 0 19.4-3.2 31-3.2 53.6 0 34.2 12.6 45.2 40.5 45.2l20.5 0 0-24.2-6.3 0c-13.1 0-17.3-5.3-17.3-22.6s1.6-32.1 1.6-51.5c0-24.2-7.9-33.6-23.6-37.3l0-1.6c15.8-3.7 23.6-13.1 23.6-37.3 0-18.9-1.6-34.2-1.6-51.5s3.7-22.1 17.3-22.1l14.1 0 0 150.8c0 32.1 11 53.1 43.1 53.1 10 0 17.9-1.6 23.6-3.7l-5.3-34.2c-3.1 .8-4.6 .8-6.2 .8zM380.4 251c-16.3-6.3-31-10-31-20.5 0-7.9 6.3-12.6 17.9-12.6s22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-20.5 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51 .1-28.9-22.5-41-43-47.8zm-155-68.8c-38.4 0-75.1 32.1-74.1 82.5 0 52 34.2 82.5 79.3 82.5 18.9 0 39.9-6.8 56.2-17.9L271 301.5c-11.6 6.8-22.6 10-34.2 10-21 0-37.3-10-41.5-34.2l95.2 0c.5-3.7 1.6-11 1.6-19.4 .6-42.6-22.6-75.7-66.7-75.7zm-30 66.2c3.2-21 15.8-31 30.5-31 18.9 0 26.3 13.1 26.3 31l-56.8 0z\"]\n};\nvar faFirefox = {\n  prefix: 'fab',\n  iconName: 'firefox',\n  icon: [512, 512, [], \"f269\", \"M503.5 241.5c-.1-1.6-.2-3.1-.2-4.7l0-.1-.4-4.7 0-.1c-1.3-13.9-3.7-27.7-7.3-41.2 0-.1 0-.1-.1-.2l-1.1-4c-.1-.2-.1-.5-.2-.6-.4-1.2-.7-2.5-1.1-3.7-.1-.2-.1-.6-.2-.8-.4-1.2-.7-2.4-1.1-3.5-.1-.4-.2-.6-.4-1-.4-1.2-.7-2.3-1.2-3.5l-.4-1.1c-.4-1.1-.8-2.3-1.2-3.4-.1-.3-.2-.7-.4-1-.5-1.1-.8-2.3-1.3-3.4-.1-.2-.2-.6-.4-.8-.5-1.2-1-2.3-1.4-3.5 0-.1-.1-.2-.1-.4-1.6-3.8-3.2-7.7-5-11.4l-.4-.7c-.5-1-.8-1.8-1.3-2.6-.2-.5-.5-1.1-.7-1.6-.4-.8-.8-1.6-1.2-2.4-.4-.6-.6-1.2-1-1.8s-.8-1.4-1.2-2.3c-.4-.6-.7-1.3-1.1-1.9s-.8-1.4-1.2-2.2c-.4-.7-.8-1.4-1.2-2-.4-.7-.8-1.3-1.2-2s-.8-1.3-1.2-2-.8-1.3-1.2-1.9-.8-1.4-1.3-2.2c-.4-.6-.8-1.2-1.2-1.8l-1.4-2.1c-.4-.6-.8-1.2-1.2-1.8-.5-.7-1.1-1.6-1.6-2.3-.4-.5-.7-1.1-1.1-1.6l-1.8-2.5c-.4-.5-.6-.8-1-1.3-1-1.3-1.8-2.5-2.8-3.7-7.2-9.4-15-18.3-23.5-26.6-5.7-6-11.8-11.5-18.3-16.7-4-3.5-8.2-6.7-12.5-9.8-7.7-5.8-16-10.8-24.6-15.1-2.4-1.3-4.8-2.5-7.2-3.7-17.7-8.6-36.3-15.2-55.4-19.6-1.9-.4-3.8-.8-5.6-1.2l-.1 0c-1-.1-1.8-.4-2.8-.5-12.5-2.4-25.2-3.7-38-4l-10.6 0c-15.3 .2-30.5 1.9-45.5 5-33.6 7.1-63.2 21.2-82.9 39-1.1 1-1.9 1.7-2.4 2.2l-.5 .5 .1 0c0 0 .1 0 .1 0s0-.1 0-.1l-.1 .1c.1-.1 .1-.1 .2-.1 14.6-8.8 34.9-16 49.4-19.6l5.9-1.4c.4-.1 .8-.1 1.2-.2 1.7-.4 3.4-.7 5.2-1.1 .2 0 .6-.1 .8-.1 64.2-11.7 132.6 7.5 180.2 53 10.3 9.8 19.3 20.8 26.9 32.8 30.4 49.2 27.5 111.1 3.8 147.6-34.4 53-111.4 71.3-159 24.8-16-15.5-25.2-36.7-25.6-59-.2-10.7 2-21.2 6.2-31 1.7-3.8 13.1-25.7 18.2-24.6-13.1-2.8-37.5 2.6-54.7 28.2-15.4 22.9-14.5 58.2-5 83.3-6-12.4-10.1-25.6-12.1-39.2-12.2-82.6 43.3-153 94.3-170.5-27.5-24-96.5-22.3-147.7 15.4-29.9 22-51.2 53.2-62.5 90.4 1.7-20.9 9.6-52.1 25.8-83.9-17.2 8.9-39 37-49.8 62.9-15.6 37.4-21 82.2-16.1 124.8 .4 3.2 .7 6.4 1.1 9.6 19.9 117.1 122 206.4 244.8 206.4 137.1 0 248.3-111.2 248.3-248.4-.1-4.5-.2-9.1-.5-13.5z\"]\n};\nvar faKaggle = {\n  prefix: 'fab',\n  iconName: 'kaggle',\n  icon: [320, 512, [], \"f5fa\", \"M304.2 501.5L158.4 320.3 298.2 185c2.6-2.7 1.7-10.5-5.3-10.5l-69.2 0c-3.5 0-7 1.8-10.5 5.3l-132.3 133.7 0-306c0-5-2.5-7.5-7.5-7.5L21.5 0C16.5 0 14 2.5 14 7.5l0 497c0 5 2.5 7.5 7.5 7.5l51.9 0c5 0 7.5-2.5 7.5-7.5l0-109 30.8-29.3 110.5 140.6c3 3.5 6.5 5.3 10.5 5.3l66.9 0c3.5 0 5.5-1 6-3l-1.4-7.6z\"]\n};\nvar faFacebookMessenger = {\n  prefix: 'fab',\n  iconName: 'facebook-messenger',\n  icon: [512, 512, [], \"f39f\", \"M256.6 8c-140 0-248.6 102.3-248.6 240.6 0 72.3 29.7 134.8 78.1 177.9 8.3 7.5 6.6 11.9 8 58.2 .1 3.2 1 6.4 2.6 9.2s3.9 5.2 6.7 6.9 5.9 2.8 9.1 3 6.5-.3 9.5-1.6C174.9 479 175.6 477.2 184.6 479.6 337.8 521.8 504 423.7 504 248.6 504 110.3 396.6 8 256.6 8zM405.8 193.1l-73 115.6c-2.8 4.3-6.4 8.1-10.6 11s-9.1 4.8-14.1 5.8-10.3 .8-15.3-.4-9.7-3.4-13.8-6.4l-58.1-43.5c-2.6-1.9-5.8-3-9-3s-6.4 1.1-9 3l-78.4 59.4c-10.5 7.9-24.2-4.6-17.1-15.7l73-115.6c2.8-4.3 6.4-8.1 10.6-11s9.1-4.8 14.1-5.8 10.3-.8 15.3 .4 9.7 3.4 13.9 6.4l58.1 43.5c2.6 1.9 5.8 3 9 3s6.4-1.1 9-3l78.4-59.4c10.4-8 24.1 4.5 17.1 15.6z\"]\n};\nvar faAudible = {\n  prefix: 'fab',\n  iconName: 'audible',\n  icon: [640, 512, [], \"f373\", \"M640 199.9l0 54-320 200-320-199.9 0-54 320 200 320-200.1zm-194.5 72l47.1-29.4c-37.2-55.8-100.7-92.6-172.7-92.6s-135.5 36.7-172.6 92.4l.3 0c2.5-2.3 5.1-4.5 7.7-6.7 89.7-74.4 219.4-58.1 290.2 36.3zM225.4 290.7c16.9-11.9 36.5-18.7 57.4-18.7 34.4 0 65.2 18.4 86.4 47.6l45.4-28.4c-20.9-29.9-55.6-49.5-94.8-49.5-38.9 0-73.4 19.4-94.4 49zM103.6 161.1C235.4 56.8 421.8 84.7 521.1 223.2l.7 1 48.8-30.4c-53.5-81.7-145.8-135.7-250.7-135.7-103.5 0-196.6 53.5-250.5 135.6 9.9-10.5 22.7-23.5 34.2-32.6z\"]\n};\nvar faPatreon = {\n  prefix: 'fab',\n  iconName: 'patreon',\n  icon: [512, 512, [], \"f3d9\", \"M490 153.8c-.1-65.4-51-119-110.7-138.3-74.2-24-172-20.5-242.9 12.9-85.8 40.5-112.8 129.3-113.8 217.8-.8 72.8 6.4 264.4 114.6 265.8 80.3 1 92.3-102.5 129.5-152.3 26.4-35.5 60.5-45.5 102.4-55.9 72-17.8 121.1-74.7 121-150l-.1 0z\"]\n};\nvar faVnv = {\n  prefix: 'fab',\n  iconName: 'vnv',\n  icon: [640, 512, [], \"f40b\", \"M104.9 352c-34.1 0-46.4-30.4-46.4-30.4L2.6 210.1S-7.8 192 13 192l32.8 0c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.7-74.5c5.6-9.5 8.4-18.1 18.8-18.1l32.8 0c20.8 0 10.4 18.1 10.4 18.1L186.4 321.6S174.2 352 140 352l-35.1 0zm395 0c-34.1 0-46.4-30.4-46.4-30.4L397.6 210.1S387.2 192 408 192l32.8 0c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.8-74.5c5.6-9.5 8.4-18.1 18.8-18.1l32.9 0c20.8 0 10.4 18.1 10.4 18.1L581.5 321.6S569.3 352 535.1 352l-35.2 0zM337.6 192c34.1 0 46.4 30.4 46.4 30.4l55.9 111.5S450.3 352 429.5 352l-32.8 0c-10.4 0-13.2-8.7-18.8-18.1l-36.7-74.5s-5.2-13.1-21.1-13.1-21.1 13.1-21.1 13.1l-36.7 74.5c-5.6 9.4-8.4 18.1-18.8 18.1l-32.9 0c-20.8 0-10.4-18.1-10.4-18.1l55.9-111.5S268.3 192 302.5 192l35.1 0z\"]\n};\nvar faPagelines = {\n  prefix: 'fab',\n  iconName: 'pagelines',\n  icon: [384, 512, [], \"f18c\", \"M384.1 312.7c-55.1 136.7-187.1 54-187.1 54-40.5 81.8-107.4 134.4-184.6 134.7-16.1 0-16.6-24.4 0-24.4 64.4-.3 120.5-42.7 157.2-110.1-41.1 15.9-118.6 27.9-161.6-82.2 109-44.9 159.1 11.2 178.3 45.5 9.9-24.4 17-50.9 21.6-79.7 0 0-139.7 21.9-149.5-98.1 119.1-47.9 152.6 76.7 152.6 76.7 1.6-16.7 3.3-52.6 3.3-53.4 0 0-106.3-73.7-38.1-165.2 124.6 43 61.4 162.4 61.4 162.4 .5 1.6 .5 23.8 0 33.4 0 0 45.2-89 136.4-57.5-4.2 134-141.9 106.4-141.9 106.4-4.4 27.4-11.2 53.4-20 77.5 0 0 83-91.8 172-20z\"]\n};\nvar faAmazon = {\n  prefix: 'fab',\n  iconName: 'amazon',\n  icon: [448, 512, [], \"f270\", \"M257.7 162.7c-48.7 1.8-169.5 15.5-169.5 117.5 0 109.5 138.3 114 183.5 43.2 6.5 10.2 35.4 37.5 45.3 46.8l56.8-56s-32.3-25.3-32.3-52.8l0-147.1C341.5 89 317 32 229.2 32 141.2 32 94.5 87 94.5 136.3l73.5 6.8c16.3-49.5 54.2-49.5 54.2-49.5 40.7-.1 35.5 29.8 35.5 69.1zm0 86.8c0 80-84.2 68-84.2 17.2 0-47.2 50.5-56.7 84.2-57.8l0 40.6zM393.7 413c-7.7 10-70 67-174.5 67S34.7 408.5 10.2 379c-6.8-7.7 1-11.3 5.5-8.3 73.3 44.5 187.8 117.8 372.5 30.3 7.5-3.7 13.3 2 5.5 12zm39.8 2.2c-6.5 15.8-16 26.8-21.2 31-5.5 4.5-9.5 2.7-6.5-3.8s19.3-46.5 12.7-55c-6.5-8.3-37-4.3-48-3.2-10.8 1-13 2-14-.3-2.3-5.7 21.7-15.5 37.5-17.5 15.7-1.8 41-.8 46 5.7 3.7 5.1 0 27.1-6.5 43.1z\"]\n};\nvar faEnvira = {\n  prefix: 'fab',\n  iconName: 'envira',\n  icon: [448, 512, [], \"f299\", \"M0 32c477.6 0 366.6 317.3 367.1 366.3l80.9 81.7-26 0-70.4-71.2C312.6 413 227.2 443.3 137.2 371.8 47 300.3 52 214.7 0 32zM79.7 78c-49.7-23.5-5.2 9.2-5.2 9.2 45.2 31.2 66 73.7 90.2 119.9 31.5 60.2 79 139.7 144.2 167.7 65 28 34.2 12.5 6-8.5-28.2-21.2-68.2-87-91-130.2-31.7-60-61-118.6-144.2-158.1z\"]\n};\nvar faLinode = {\n  prefix: 'fab',\n  iconName: 'linode',\n  icon: [448, 512, [], \"f2b8\", \"M366.3 186.9l-59.5 36.9-.8 36.9-29.3-19.3-39.4 24.3c2.2 55.2 2.5 59.3 2.5 59.5l-97.2 65.4-15.1-104.7 108.1-62-40.2-26-75.4 38.5-21-143.3 129-49.4-91.3-43.6-125.7 39.4 27.7 134.9 41.9 32.7-31.8 15.1 20.9 101.4 29.3 27.7-20.9 12.6 16.8 78.8 66.2 69.6c-10.8-74.8-11.7-78.6-11.7-78.8l77.9-55.3C244 365.4 242.3 367 242.3 367l.8 24.3 33.5 28.5-.8-77.1 46.9-33.5 26.8-18.4-2.5 36 25.1 17.6 6.7-74.6 58.7-43.6-71.2-39.4z\"]\n};\nvar faAccusoft = {\n  prefix: 'fab',\n  iconName: 'accusoft',\n  icon: [640, 512, [], \"f369\", \"M322.1 252l0-1-51.2-65.8s-12 1.6-25 15.1c-9 9.3-242.1 239.1-243.4 240.9-7 10 1.6 6.8 15.7 1.7 .8 0 114.5-36.6 114.5-36.6 .5-.6-.1-.1 .6-.6-.4-5.1-.8-26.2-1-27.7-.6-5.2 2.2-6.9 7-8.9l92.6-33.8c.6-.8 88.5-81.7 90.2-83.3zM482.2 372.1c13.3 16.1 20.7 13.3 30.8 9.3 3.2-1.2 115.4-47.6 117.8-48.9 8-4.3-1.7-16.7-7.2-23.4-2.1-2.5-205.1-245.6-207.2-248.3-9.7-12.2-14.3-12.9-38.4-12.8-10.2 0-106.8 .5-116.5 .6-19.2 .1-32.9-.3-19.2 16.9 7.7 9.5 234.2 299.7 239.9 306.6zm152.7 1.6c-2.3-.3-24.6-4.7-38-7.2 0 0-115 50.4-117.5 51.6-16 7.3-26.9-3.2-36.7-14.6l-57.1-74c-5.4-.9-60.4-9.6-65.3-9.3-3.1 .2-9.6 .8-14.4 2.9-4.9 2.1-145.2 52.8-150.2 54.7-5.1 2-11.4 3.6-11.1 7.6 .2 2.5 2 2.6 4.6 3.5 2.7 .8 300.9 67.6 308 69.1 15.6 3.3 38.5 10.5 53.6 1.7 2.1-1.2 123.8-76.4 125.8-77.8 5.4-4 4.3-6.8-1.7-8.2z\"]\n};\nvar faErlang = {\n  prefix: 'fab',\n  iconName: 'erlang',\n  icon: [640, 512, [], \"f39d\", \"M87.2 53.5l-87.2 0 0 405 100.4 0c-49.7-52.6-78.8-125.3-78.7-212.1-.1-76.7 24-142.7 65.5-192.9zm238.2 9.7c-45.9 .1-85.1 33.5-89.2 83.2l169.9 0c-1.1-49.7-34.5-83.1-80.7-83.2zm230.7-9.6l.3 0-.1-.1-.2 .1zm.3 0c31.4 42.7 48.7 97.5 46.2 162.7 .5 6 .5 11.7 0 24.1l-372.4 0c-.2 109.7 38.9 194.9 138.6 195.3 68.5-.3 118-51 151.9-106.1l96.4 48.2c-17.4 30.9-36.5 57.8-57.9 80.8l80.8 0 0-405-83.6 0z\"]\n};\nvar faUnison = {\n  prefix: 'fab',\n  iconName: 'unison',\n  icon: [512, 512, [], \"e854\", \"M435.1 161.7a13.9 13.9 0 1 1 19.6-19.7 13.9 13.9 0 1 1 -19.6 19.7zM369.7 97.8c10.4 2.1 20.6 5.2 30.4 9.2 6.8 2.8 10.1 10.8 7.3 17.7-2.8 6.7-10.9 10.1-17.6 7.3-8.3-3.4-16.8-5.8-25.7-7.8-8.6-1.7-17.3-2.5-26-2.5-19.3 0-37.1-10.3-46.7-27-8.7-15.1-20.6-28.9-34.7-39.7-59.1-45.5-143.8-34.3-189.2 25-2.6 3.3-6.5 5.3-10.7 5.3-7.4 0-13.5-6.1-13.5-13.5 0-3.2 1.2-6.3 3.2-8.8 12.9-16.7 28.9-30.7 47.1-41.2 77.4-44.8 176.4-18.2 221.1 59.4 4.3 8.2 13.7 13.3 22.8 13.5 10.8 0 21.6 1 32.2 3.1zM35 270c4.6-8.2 4.6-18.2 0-26.4-21.9-36.5-27.3-82.3-16.3-123.2 1.6-5.9 6.9-10 13-10 8.7 0 15.3 8.7 13 17-9.5 35.4-3.4 71 13.7 102.9 9.3 16.5 9.3 36.7 0 53.1-8.7 15.7-14.8 32.4-17.2 50.3-9.7 73.9 42.3 141.7 116.2 151.4 7.3 1 12.6 7.9 11.6 15.2-1 7.3-7.8 12.6-15.1 11.6-21.1-2.8-41.4-9.7-59.8-20.3-75.6-43.6-104.9-145.8-59.2-221.5zM216.9 509c-7.4 2-15.1-2.4-17.1-9.8s2.5-15 9.9-16.9c8.5-2.2 17.4 4.5 17.4 13.4 0 6.2-4.2 11.6-10.2 13.3zm122.3-91c-9.5 0-18.4 5-23.2 13.2-4.9 9.4-11.7 18.2-18.7 26.2l0 0c-7.1 8-14.8 15.2-23.2 21.7-5.9 4.5-14.4 3.4-19-2.5s-3.4-14.4 2.5-18.9c7-5.4 13.5-11.5 19.4-18.1l0 0c5.9-6.6 11.1-13.8 15.5-21.6 9.7-16.7 27.5-27 46.8-27 17.8 0 35.4-3.5 51.8-10.3 68.3-28.3 101.1-108.3 73.2-176.5-.6-1.6-1-3.3-1-5 0-7.4 6.1-13.5 13.5-13.5 5.4 0 10.3 3.2 12.4 8.2 8.2 19.7 12.4 40.8 12.4 62.1 0 89.5-72.7 162.1-162.4 162.1l0 0zm-13.1-268c3.9-.4 7.9-.6 11.9-.6 59.3 0 108.2 48.7 108.2 107.8S397.3 365 338 365c-4 0-7.9-.2-11.8-.6-22.2-1.7-43.3 10.4-52.9 30.4-17.2 39.1-56.2 64.5-99.1 64.5-59.3 0-108.2-48.7-108.2-107.8 0-23.2 7.5-45.7 21.4-64.3 12.2-18.3 12.1-42.3-.4-60.5-13.6-18.5-20.9-40.8-20.9-63.7 0-59.1 48.8-107.8 108.2-107.8 42.8 0 81.8 25.4 99 64.4 9.6 20 30.7 32.1 52.9 30.4zM106.8 393.4c14.4 25.2 41.1 40.8 69.8 40.8 44.2 0 80.6-36.8 80.6-81.6s-36.4-81.6-80.6-81.6c-14.2 0-28.1 3.8-40.3 10.9-38.3 22.4-51.6 72.7-29.5 111.4zM268 298c14.4 25.2 41.1 40.8 69.8 40.8 44.2 0 80.6-36.8 80.6-81.6s-36.4-81.6-80.6-81.6c-14.2 0-28.1 3.8-40.3 10.9-38.3 22.4-51.6 72.7-29.5 111.4zm-91.2-54.6c44.2 0 80.5-36.8 80.5-81.6s-36.4-81.6-80.6-81.6-80.6 36.8-80.6 81.6c0 44.7 36.4 81.6 80.6 81.6z\"]\n};\nvar faCcDiscover = {\n  prefix: 'fab',\n  iconName: 'cc-discover',\n  icon: [576, 512, [], \"f1f2\", \"M520.4 196.1c0-7.9-5.5-12.1-15.6-12.1l-4.9 0 0 24.9 4.7 0c10.3 0 15.8-4.4 15.8-12.8zM528 32L48 32C21.5 32 0 53.5 0 80L0 432c0 26.5 21.5 48 48 48l480 0c26.5 0 48-21.5 48-48l0-352c0-26.5-21.5-48-48-48zM483.9 170.9c22.6 0 52.9-4.1 52.9 24.4 0 12.6-6.6 20.7-18.7 23.2l25.8 34.4-19.6 0-22.2-32.8-2.2 0 0 32.8-16 0 0-82zM428 171l45.3 0 0 14-29.3 0 0 18.2 28.3 0 0 13.8-28.3 0 0 22.2 29.3 0 0 13.8-45.3 0 0-82zm-68.7 0l21.9 55.2 22.2-55.2 17.5 0-35.5 84.2-8.6 0-35-84.2 17.5 0zm-55.9 86.2a44.6 44.6 0 1 1 0-89.2 44.6 44.6 0 1 1 0 89.2zm-49.3-83.1l0 19c-20.1-20.1-46.8-4.7-46.8 19 0 25 27.5 38.5 46.8 19.2l0 19c-29.7 14.3-63.3-5.7-63.3-38.2 0-31.2 33.1-53 63.3-38zm-97.2 66.3c11.4 0 22.4-15.3-3.3-24.4-15-5.5-20.2-11.4-20.2-22.7 0-23.2 30.6-31.4 49.7-14.3l-8.4 10.8c-10.4-11.6-24.9-6.2-24.9 2.5 0 4.4 2.7 6.9 12.3 10.3 18.2 6.6 23.6 12.5 23.6 25.6 0 29.5-38.8 37.4-56.6 11.3l10.3-9.9c3.7 7.1 9.9 10.8 17.5 10.8zM55.4 253l-23.4 0 0-82 23.4 0c26.1 0 44.1 17 44.1 41.1 0 18.5-13.2 40.9-44.1 40.9zm67.5 0l-16 0 0-82 16 0 0 82zM544 433c0 8.2-6.8 15-15 15l-401 0c189.6-35.6 382.7-139.2 416-160l0 145zM74.1 191.6c-5.2-4.9-11.6-6.6-21.9-6.6l-4.2 0 0 54.2 4.2 0c10.3 0 17-2 21.9-6.4 5.7-5.2 8.9-12.8 8.9-20.7s-3.2-15.5-8.9-20.5z\"]\n};\nvar faSafari = {\n  prefix: 'fab',\n  iconName: 'safari',\n  icon: [512, 512, [], \"f267\", \"M274.7 274.7L237.3 237.3 166 346 274.7 274.7zM256 8a248 248 0 1 0 0 496 248 248 0 1 0 0-496zM411.8 182.8l14.8-6.1c1-.4 2-.6 3.1-.6s2.1 .2 3.1 .6 1.8 1 2.6 1.7 1.3 1.6 1.7 2.6 .6 2 .6 3.1-.2 2.1-.6 3.1-1 1.9-1.7 2.6-1.6 1.3-2.6 1.7L418 197.6c-2 .8-4.2 .8-6.1 0s-3.5-2.4-4.3-4.3-.8-4.2 0-6.1 2.4-3.5 4.3-4.3zM314.4 94l6.1-14.8c.8-2 2.4-3.5 4.3-4.3s4.2-.8 6.1 0 3.5 2.4 4.3 4.3 .8 4.2 0 6.1l-6.1 14.8c-.8 2-2.4 3.5-4.3 4.3s-4.2 .8-6.1 0c-1-.4-1.9-1-2.6-1.7s-1.3-1.6-1.7-2.6-.6-2-.6-3.1 .2-2.1 .6-3.1zM256 60c2.1 0 4.2 .8 5.7 2.3S264 65.9 264 68l0 16c0 2.1-.8 4.2-2.3 5.7s-3.5 2.3-5.7 2.3-4.2-.8-5.7-2.3-2.3-3.5-2.3-5.7l0-16c0-2.1 .8-4.2 2.3-5.7S253.9 60 256 60zM181 74.9c1-.4 2-.6 3.1-.6s2.1 .2 3.1 .6 1.9 1 2.6 1.7 1.3 1.6 1.7 2.6L197.6 94c.4 1 .7 2 .7 3.1s-.2 2.1-.6 3.1-1 1.9-1.7 2.6-1.6 1.4-2.6 1.8-2 .6-3.1 .6-2.1-.2-3.1-.6-1.9-1-2.6-1.8-1.3-1.7-1.7-2.7l-6.1-14.8c-.8-2-.8-4.2 0-6.1s2.4-3.5 4.3-4.3zm-63.6 42.5c1.5-1.5 3.5-2.3 5.7-2.3s4.2 .8 5.7 2.3L140 128.7c1.5 1.5 2.3 3.5 2.3 5.6s-.8 4.1-2.3 5.6c-1.5 1.5-3.5 2.3-5.7 2.3s-4.2-.8-5.7-2.3l-11.3-11.3c-1.5-1.5-2.3-3.5-2.3-5.6s.8-4.1 2.3-5.6l0 0zM60 256c0-2.1 .8-4.2 2.3-5.7S65.9 248 68 248l16 0c2.1 0 4.2 .8 5.7 2.3s2.3 3.5 2.3 5.7-.8 4.2-2.3 5.7-3.5 2.3-5.7 2.3l-16 0c-2.1 0-4.2-.8-5.7-2.3S60 258.1 60 256zm40.2 73.2l-14.8 6.1c-1 .4-2 .6-3.1 .6s-2.1-.2-3.1-.6-1.9-1-2.6-1.7-1.3-1.6-1.7-2.6-.6-2-.6-3.1 .2-2.1 .6-3.1 1-1.9 1.7-2.6 1.6-1.3 2.6-1.7L94 314.4c2-.8 4.2-.8 6.1 0s3.5 2.4 4.3 4.3 .8 4.2 0 6.1-2.4 3.5-4.3 4.3zm4.3-136c-.4 1-1 1.9-1.7 2.6s-1.6 1.3-2.6 1.7-2 .6-3.1 .6-2.1-.2-3.1-.6l-14.8-6.1c-2-.8-3.5-2.4-4.3-4.3s-.8-4.2 0-6.1 2.4-3.5 4.3-4.3 4.2-.8 6.1 0l14.8 6.1c2 .8 3.5 2.4 4.3 4.3s.8 4.2 0 6.1l0 0zM197.6 418l-6.1 14.8c-.4 1-1 1.9-1.7 2.6s-1.6 1.3-2.6 1.7-2 .6-3.1 .6-2.1-.2-3.1-.6-1.9-1-2.6-1.7-1.3-1.6-1.7-2.6-.6-2-.6-3.1 .2-2.1 .6-3.1l6.1-14.8c.4-1 1-1.9 1.7-2.7s1.6-1.4 2.6-1.8 2-.6 3.1-.6 2.1 .2 3.1 .6 1.9 1 2.6 1.8 1.3 1.7 1.7 2.6 .6 2 .6 3.1-.2 2.1-.7 3.1zM264 444c0 2.1-.8 4.2-2.3 5.7s-3.5 2.3-5.7 2.3-4.2-.8-5.7-2.3-2.3-3.5-2.3-5.7l0-16c0-2.1 .8-4.2 2.3-5.7s3.5-2.3 5.7-2.3 4.2 .8 5.7 2.3 2.3 3.5 2.3 5.7l0 16zm67-6.9c-1 .4-2 .6-3.1 .6s-2.1-.2-3.1-.6-1.9-1-2.6-1.7-1.3-1.6-1.7-2.6L314.4 418c-.8-2-.8-4.2 0-6.1s2.4-3.5 4.3-4.3 4.2-.8 6.1 0 3.5 2.4 4.3 4.3l6.1 14.8c.8 2 .8 4.2 0 6.1s-2.4 3.5-4.3 4.3zm63.6-42.5c-1.5 1.5-3.5 2.3-5.7 2.3s-4.2-.8-5.7-2.3L372 383.3c-1.5-1.5-2.3-3.5-2.3-5.6s.8-4.1 2.3-5.6 3.5-2.3 5.7-2.3 4.2 .8 5.7 2.3l11.3 11.3c1.5 1.5 2.3 3.5 2.3 5.6s-.8 4.1-2.3 5.6l0 0zM286.2 286.2L110.3 401.7 225.8 225.8 401.7 110.3 286.2 286.2zM437.1 331c-.8 2-2.4 3.5-4.3 4.3s-4.2 .8-6.1 0l-14.8-6.1c-2-.8-3.5-2.4-4.3-4.3s-.8-4.2 0-6.1c.4-1 1-1.9 1.7-2.6s1.6-1.3 2.6-1.7 2-.6 3.1-.6 2.1 .2 3.1 .6l14.8 6.1c2 .8 3.5 2.4 4.3 4.3s.8 4.2 0 6.1zm6.9-67l-16 0c-2.1 0-4.2-.8-5.7-2.3s-2.3-3.5-2.3-5.7 .8-4.2 2.3-5.7 3.5-2.3 5.7-2.3l16 0c2.1 0 4.2 .8 5.7 2.3s2.3 3.5 2.3 5.7-.8 4.2-2.3 5.7-3.5 2.3-5.7 2.3z\"]\n};\nvar faSpaceAwesome = {\n  prefix: 'fab',\n  iconName: 'space-awesome',\n  icon: [512, 512, [], \"e5ac\", \"M96 256l32 0 0 256-128 0 0-160 32 0 0-32 32 0 0-32 32 0 0-32zm416 96l0 160-128 0 0-256 32 0 0 32 32 0 0 32 32 0 0 32 32 0zM320 64l32 0 0 384-32 0 0-32-128 0 0 32-32 0 0-384 32 0 0-32 32 0 0-32 64 0 0 32 32 0 0 32zm-32 64l-64 0 0 64 64 0 0-64z\"]\n};\nvar faNode = {\n  prefix: 'fab',\n  iconName: 'node',\n  icon: [640, 512, [], \"f419\", \"M316.3 452c-2.1 0-4.2-.6-6.1-1.6L291 439c-2.9-1.6-1.5-2.2-.5-2.5 3.8-1.3 4.6-1.6 8.7-4 .4-.2 1-.1 1.4 .1l14.8 8.8c.5 .3 1.3 .3 1.8 0L375 408c.5-.3 .9-.9 .9-1.6l0-66.7c0-.7-.3-1.3-.9-1.6l-57.8-33.3c-.5-.3-1.2-.3-1.8 0l-57.8 33.3c-.6 .3-.9 1-.9 1.6l0 66.7c0 .6 .4 1.2 .9 1.5l15.8 9.1c8.6 4.3 13.9-.8 13.9-5.8l0-65.9c0-.9 .7-1.7 1.7-1.7l7.3 0c.9 0 1.7 .7 1.7 1.7l0 65.9c0 11.5-6.2 18-17.1 18-3.3 0-6 0-13.3-3.6l-15.2-8.7c-3.7-2.2-6.1-6.2-6.1-10.5l0-66.7c0-4.3 2.3-8.4 6.1-10.5l57.8-33.4c3.7-2.1 8.5-2.1 12.1 0l57.8 33.4c3.7 2.2 6.1 6.2 6.1 10.5l0 66.7c0 4.3-2.3 8.4-6.1 10.5l-57.8 33.4c-1.7 1.1-3.8 1.7-6 1.7zM363 386.2c0-12.5-8.4-15.8-26.2-18.2-18-2.4-19.8-3.6-19.8-7.8 0-3.5 1.5-8.1 14.8-8.1 11.9 0 16.3 2.6 18.1 10.6 .2 .8 .8 1.3 1.6 1.3l7.5 0c.5 0 .9-.2 1.2-.5 .3-.4 .5-.8 .4-1.3-1.2-13.8-10.3-20.2-28.8-20.2-16.5 0-26.3 7-26.3 18.6 0 12.7 9.8 16.1 25.6 17.7 18.9 1.9 20.4 4.6 20.4 8.3 0 6.5-5.2 9.2-17.4 9.2-15.3 0-18.7-3.8-19.8-11.4-.1-.8-.8-1.4-1.7-1.4l-7.5 0c-.9 0-1.7 .7-1.7 1.7 0 9.7 5.3 21.3 30.6 21.3 18.5 0 29-7.2 29-19.8zm54.5-50.1c0 6.1-5 11.1-11.1 11.1s-11.1-5-11.1-11.1c0-6.3 5.2-11.1 11.1-11.1 6-.1 11.1 4.8 11.1 11.1zm-1.8 0c0-5.2-4.2-9.3-9.4-9.3-5.1 0-9.3 4.1-9.3 9.3s4.2 9.4 9.3 9.4c5.2-.1 9.4-4.3 9.4-9.4zm-4.5 6.2l-2.6 0c-.1-.6-.5-3.8-.5-3.9-.2-.7-.4-1.1-1.3-1.1l-2.2 0 0 5-2.4 0 0-12.5 4.3 0c1.5 0 4.4 0 4.4 3.3 0 2.3-1.5 2.8-2.4 3.1 1.7 .1 1.8 1.2 2.1 2.8 .1 1 .3 2.7 .6 3.3zm-2.8-8.8c0-1.7-1.2-1.7-1.8-1.7l-2 0 0 3.5 1.9 0c1.6 0 1.9-1.1 1.9-1.8zM137.3 191c0-2.7-1.4-5.1-3.7-6.4L72.3 149.3c-1-.6-2.2-.9-3.4-1l-.6 0c-1.2 0-2.3 .4-3.4 1L3.7 184.6C1.4 185.9 0 188.4 0 191l.1 95c0 1.3 .7 2.5 1.8 3.2s2.5 .7 3.7 0L42 268.3c2.3-1.4 3.7-3.8 3.7-6.4l0-44.4c0-2.6 1.4-5.1 3.7-6.4l15.5-8.9c1.2-.7 2.4-1 3.7-1s2.6 .3 3.7 1l15.5 8.9c2.3 1.3 3.7 3.8 3.7 6.4l0 44.4c0 2.6 1.4 5.1 3.7 6.4l36.4 20.9c1.1 .7 2.6 .7 3.7 0 1.1-.6 1.8-1.9 1.8-3.2l.2-95zM472.5 87.3l0 176.4c0 2.6-1.4 5.1-3.7 6.4l-61.3 35.4c-2.3 1.3-5.1 1.3-7.4 0l-61.3-35.4c-2.3-1.3-3.7-3.8-3.7-6.4l0-70.8c0-2.6 1.4-5.1 3.7-6.4l61.3-35.4c2.3-1.3 5.1-1.3 7.4 0l15.3 8.8c1.7 1 3.9-.3 3.9-2.2l0-94c0-2.8 3-4.6 5.5-3.2l36.5 20.4c2.3 1.2 3.8 3.7 3.8 6.4zm-46 128.9c0-.7-.4-1.3-.9-1.6l-21-12.2c-.6-.3-1.3-.3-1.9 0l-21 12.2c-.6 .3-.9 .9-.9 1.6l0 24.3c0 .7 .4 1.3 .9 1.6l21 12.1c.6 .3 1.3 .3 1.8 0l21-12.1c.6-.3 .9-.9 .9-1.6l0-24.3 .1 0zm209.8-.7c2.3-1.3 3.7-3.8 3.7-6.4l0-17.1c0-2.6-1.4-5.1-3.7-6.4l-60.9-35.4c-2.3-1.3-5.1-1.3-7.4 0l-61.3 35.4c-2.3 1.3-3.7 3.8-3.7 6.4l0 70.8c0 2.7 1.4 5.1 3.7 6.4l60.9 34.7c2.2 1.3 5 1.3 7.3 0l36.8-20.5c2.5-1.4 2.5-5 0-6.4L550 241.6c-1.2-.7-1.9-1.9-1.9-3.2l0-22.2c0-1.3 .7-2.5 1.9-3.2l19.2-11.1c1.1-.7 2.6-.7 3.7 0L592.1 213c1.1 .7 1.9 1.9 1.9 3.2l0 17.4c0 2.8 3.1 4.6 5.6 3.2l36.7-21.3zM559 219c-.4 .3-.7 .7-.7 1.2l0 13.6c0 .5 .3 1 .7 1.2l11.8 6.8c.4 .3 1 .3 1.4 0L584 235c.4-.3 .7-.7 .7-1.2l0-13.6c0-.5-.3-1-.7-1.2l-11.8-6.8c-.4-.3-1-.3-1.4 0L559 219zM304.8 262.5l0-70.4c0-2.6-1.6-5.1-3.9-6.4l-61.1-35.2c-2.1-1.2-5-1.4-7.4 0l-61.1 35.2c-2.3 1.3-3.9 3.7-3.9 6.4l0 70.4c0 2.8 1.9 5.2 4 6.4l61.2 35.2c2.4 1.4 5.2 1.3 7.4 0l61-35.2c1.8-1 3.1-2.7 3.6-4.7 .1-.5 .2-1.1 .2-1.7zM230.5 137.6l-.8 .5 1.1 0-.3-.5zm76.2 130.2l-.4-.7 0 .9 .4-.2z\"]\n};\nvar faCodepen = {\n  prefix: 'fab',\n  iconName: 'codepen',\n  icon: [512, 512, [], \"f1cb\", \"M502.3 159.7l-234-156c-8-4.9-16.5-5-24.6 0l-234 156c-6 4-9.7 11.1-9.7 18.3L0 334c0 7.1 3.7 14.3 9.7 18.3l234 156c8 4.9 16.5 5 24.6 0l234-156c6-4 9.7-11.1 9.7-18.3l0-156c0-7.1-3.7-14.3-9.7-18.3zM278 63.1l172.3 114.9-76.9 51.4-95.4-63.7 0-102.6zm-44 0L234 165.7 138.6 229.4 61.7 178 234 63.1zM44 219.1L99.1 256 44 292.8 44 219.1zM234 448.8L61.7 334 138.6 282.6 234 346.3 234 448.8zM256 308l-77.7-52 77.7-52 77.7 52-77.7 52zm22 140.9l0-102.6 95.4-63.7 76.9 51.4-172.3 114.9zm190-156l-55.1-36.9 55.1-36.9 0 73.7z\"]\n};\nvar faRavelry = {\n  prefix: 'fab',\n  iconName: 'ravelry',\n  icon: [512, 512, [], \"f2d9\", \"M498.6 234.2c-1.2-10.3-1.7-20.8-3.7-31-2.5-12.4-5.7-24.6-9.6-36.6-6.8-20.9-17.2-40.3-30.9-57.5-5.9-7.6-12.1-14.8-18.8-21.7-14.1-14-30-26.1-47.1-36.1-17.8-10.6-36.8-18.9-56.7-24.7-11-3.1-22.3-5.4-33.5-7.6-6.8-1.3-13.7-1.7-20.6-2.5-.3 0-.6-.4-.9-.6-10.8 0-21.5 0-32.3 0-2.4 .4-4.8 .9-7.2 1.2-11.6 1.2-23.1 3.6-34.3 7.1-13.8 4.1-27.1 9.6-39.8 16.4-13.3 7-26.1 15.1-38.1 24.2-6.2 4.6-12.3 9.4-18 14.5-10.2 9.2-20.4 18.4-29.9 28.3-12.8 13.3-24.1 28.1-33.6 44-8.6 14-15.5 29-20.5 44.6-7.2 22.7-10.3 46.6-9.2 70.3 .6 13.5 2 26.9 4.4 40.2 3.4 18.4 9 36.3 16.7 53.3 13.6 29.2 32.1 51.5 50.4 67.9 12.8 11.6 26.8 21.9 41.8 30.6 17.7 10.4 36.4 18.9 55.9 25.3 13.3 4.3 26.9 7.6 40.6 9.8 6.1 1 12.3 1.3 18.4 1.9 .4 .1 .8 .3 1.2 .6l32.3 0c2.5-.4 5-.9 7.5-1.1 16.3-1.3 32.1-5.3 47.5-10.7 17.2-5.9 33.7-13.9 49-23.8 9.7-6.4 19.4-13.1 28.7-20.1 5.8-4.3 11-9.5 16.3-14.5 4-3.7 7.8-7.6 11.5-11.5 12-12.7 22.6-26.6 31.4-41.6 9.5-16 17.4-32.9 22.3-50.9 2.9-10.4 4.9-21 7-31.7 1-5.3 1.3-10.7 1.9-16.1 0-.3 .4-.6 .6-.9l0-37.1c-.2-.6-.4-1.2-.6-1.8zm-161.1-1.2s-16.6-3-28.5-3c-27.2 0-33.6 14.9-33.6 37l0 93.7-73.5 0 0-190.7 73.5 0 0 31.9c8.9-26.8 26.8-36.2 62-36.2l0 67.3z\"]\n};\nvar faAlipay = {\n  prefix: 'fab',\n  iconName: 'alipay',\n  icon: [448, 512, [], \"f642\", \"M377.7 32L70.3 32C31.4 32 0 63.4 0 102.3L0 409.7C0 448.6 31.4 480 70.3 480l307.5 0c38.5 0 69.8-31.1 70.3-69.6-46-25.6-110.6-60.3-171.6-88.4-32.1 44-84.1 81-148.6 81-70.6 0-93.7-45.3-97-76.4-4-39 14.9-81.5 99.5-81.5 35.4 0 79.4 10.2 127.1 25 16.5-30.1 26.5-60.3 26.5-60.3l-178.2 0 0-16.7 92.1 0 0-31.2-109.4 0 0-19 109.4 0 0-50.4 50.9 0 0 50.4 109.4 0 0 19-109.4 0 0 31.2 88.8 0s-15.2 46.6-38.3 90.9c48.9 16.7 100 36 148.6 52.7l0-234.4c.2-38.7-31.2-70.3-69.9-70.3zM47.3 323c1 20.2 10.2 53.7 69.9 53.7 52.1 0 92.6-39.7 117.9-72.9-44.6-18.7-84.5-31.4-109.4-31.4-67.4 0-79.4 33.1-78.4 50.6z\"]\n};\nvar faCcAmex = {\n  prefix: 'fab',\n  iconName: 'cc-amex',\n  icon: [576, 512, [], \"f1f3\", \"M0 432c0 26.5 21.5 48 48 48l480 0c26.5 0 48-21.5 48-48l0-1.1-61.7 0-31.9-35.1-31.9 35.1-203.7 0 0-163.8-65.8 0 81.7-184.7 78.6 0 28.1 63.2 0-63.2 97.2 0 16.9 47.6 17-47.6 75.5 0 0-2.4c0-26.5-21.5-48-48-48L48 32C21.5 32 0 53.5 0 80L0 432zm440.4-21.7l42.2-46.3 42 46.3 51.4 0-68-72.1 68-72.1-50.6 0-42 46.7-41.5-46.7-51.4 0 67.5 72.5-67.4 71.6 0-33.1-83 0 0-22.2 80.9 0 0-32.3-80.9 0 0-22.4 83 0 0-33.1-122 0 0 143.2 171.8 0zm96.3-72l39.3 41.9 0-83.3-39.3 41.4zm-36.3-92l36.9-100.6 0 100.6 38.7 0 0-143.3-60.2 0-32.2 89.3-31.9-89.3-61.2 0 0 143.1-63.2-143.1-51.2 0-62.4 143.3 43 0 11.9-28.7 65.9 0 12 28.7 82.7 0 0-100.3 36.8 100.3 34.4 0zM282 185.4l19.5-46.9 19.4 46.9-38.9 0z\"]\n};\nvar faPiedPiperAlt = {\n  prefix: 'fab',\n  iconName: 'pied-piper-alt',\n  icon: [576, 512, [], \"f1a8\", \"M244 246c-3.2-2-6.3-2.9-10.1-2.9-6.6 0-12.6 3.2-19.3 3.7l1.7 4.9 27.7-5.7zM379.9 443.9c-19 0-64.1 9.5-79.9 19.8l6.9 45.1c35.7 6.1 70.1 3.6 106-9.8-4.8-10-23.5-55.1-33-55.1zM340.8 177c6.6 2.8 11.5 9.2 22.7 22.1 2-1.4 7.5-5.2 7.5-8.6 0-4.9-11.8-13.2-13.2-23 11.2-5.7 25.2-6 37.6-8.9 68.1-16.4 116.3-52.9 146.8-116.7 6.1-12.6 11.8-25.8 12.4-39.9l-2 2.6c-28.4 50-33 63.2-81.3 100-31.9 24.4-69.2 40.2-106.6 54.6l-6.3-.3 0-21.8c-19.6 1.6-19.7-14.6-31.6-23-18.7 20.6-31.6 40.8-58.9 51.1-12.7 4.8-19.6 10-25.9 21.8 34.9-16.4 91.2-13.5 98.8-10zM555.5 0l-.6 1.1-.3 .9 .6-.6 .3-1.4zM496.3 382.1c-33.9-56.9-75.3-118.4-150-115.5l-.3-6c-1.1-13.5 32.8 3.2 35.1-31l-14.4 7.2c-19.8-45.7-8.6-54.3-65.5-54.3-14.7 0-26.7 1.7-41.4 4.6 2.9 18.6 2.2 36.7-10.9 50.3l19.5 5.5c-1.7 3.2-2.9 6.3-2.9 9.8 0 21 42.8 2.9 42.8 33.6 0 18.4-36.8 60.1-54.9 60.1-8 0-53.7-50-53.4-60.1l.3-4.6 52.3-11.5c13-2.6 12.3-22.7-2.9-22.7-3.7 0-43.1 9.2-49.4 10.6-2-5.2-7.5-14.1-13.8-14.1-3.2 0-6.3 3.2-9.5 4-9.2 2.6-31 2.9-21.5 20.1L15.9 298.5c-5.5 1.1-8.9 6.3-8.9 11.8 0 6 5.5 10.9 11.5 10.9 8 0 131.3-28.4 147.4-32.2 2.6 3.2 4.6 6.3 7.8 8.6 20.1 14.4 59.8 85.9 76.4 85.9 24.1 0 58-22.4 71.3-41.9 3.2-4.3 6.9-7.5 12.4-6.9 .6 13.8-31.6 34.2-33 43.7-1.4 10.2-1 35.2-.3 41.1 26.7 8.1 52-3.6 77.9-2.9 4.3-21 10.6-41.9 9.8-63.5l-.3-9.5c-1.4-34.2-10.9-38.5-34.8-58.6-1.1-1.1-2.6-2.6-3.7-4 2.2-1.4 1.1-1 4.6-1.7 88.5 0 56.3 183.6 111.5 229.9 33.1-15 72.5-27.9 103.5-47.2-29-25.6-52.6-45.7-72.7-79.9zM300.1 428.2l0 27.2 11.8-3.4-2.9-23.8-8.9 0zM231.4 277.8l24.1 61.2 21-13.8-31.3-50.9-13.8 3.5zm84.4 154.9l2 12.4c9-1.5 58.4-6.6 58.4-14.1 0-1.4-.6-3.2-.9-4.6-26.8 0-36.9 3.8-59.5 6.3z\"]\n};\nvar faLetterboxd = {\n  prefix: 'fab',\n  iconName: 'letterboxd',\n  icon: [640, 512, [], \"e62d\", \"M521.3 128C586.9 128 640 181.1 640 246.6S586.9 365.2 521.3 365.2c-42.5 0-79.7-22.3-100.7-55.8 11.4-18.2 18-39.7 18-62.8s-6.6-44.6-18-62.8l.8-1.2c20.8-32.3 56.8-53.9 97.9-54.6l2 0zM320 128c42.5 0 79.7 22.3 100.7 55.8-11.4 18.2-18 39.7-18 62.8s6.6 44.6 18 62.8l-.8 1.2c-20.8 32.3-56.8 53.9-97.9 54.6l-2 0c-42.5 0-79.7-22.3-100.7-55.8 11.4-18.2 18-39.7 18-62.8s-6.6-44.6-18-62.8l.8-1.2c20.8-32.3 56.8-53.9 97.9-54.6l2 0zm-201.3 0c42.5 0 79.7 22.3 100.7 55.8-11.4 18.2-18 39.7-18 62.8s6.6 44.6 18 62.8l-.8 1.2c-20.8 32.3-56.8 53.9-97.9 54.6l-2 0C53.1 365.1 0 312.1 0 246.6S53.1 128 118.7 128z\"]\n};\nvar faOpera = {\n  prefix: 'fab',\n  iconName: 'opera',\n  icon: [512, 512, [], \"f26a\", \"M321.9 32.7c-170.2 0-252.6 223.8-147.5 355.1 36.5 45.4 88.6 75.6 147.5 75.6 36.3 0 70.3-11.1 99.4-30.4-43.8 39.2-101.9 63-165.3 63-3.9 0-8 0-11.9-.3-131.5-6.1-236.1-114.6-236.1-247.7 0-137 111-248 248-248l.8 0c63.1 .3 120.7 24.1 164.4 63.1-29-19.4-63.1-30.4-99.3-30.4zM423.7 430.4c-40.9 24.7-90.7 23.6-132-5.8 56.2-20.5 97.7-91.6 97.7-176.6 0-84.7-41.2-155.8-97.4-176.6 41.8-29.2 91.2-30.3 132.9-5 105.9 98.7 105.5 265.7-1.2 364z\"]\n};\nvar faWeibo = {\n  prefix: 'fab',\n  iconName: 'weibo',\n  icon: [512, 512, [], \"f18a\", \"M407 177.6c7.6-24-13.4-46.8-37.4-41.7-22 4.8-28.8-28.1-7.1-32.8 50.1-10.9 92.3 37.1 76.5 84.8-6.8 21.2-38.8 10.8-32-10.3zM214.8 446.7c-106.3 0-214.8-51.4-214.8-136.3 0-44.3 28-95.4 76.3-143.7 99.7-99.7 203.2-100.9 173.6-5.7-4 13.1 12.3 5.7 12.3 6 79.5-33.6 140.5-16.8 114 51.4-3.7 9.4 1.1 10.9 8.3 13.1 135.7 42.3 34.8 215.2-169.7 215.2zM358.5 300.4c-5.4-55.7-78.5-94-163.4-85.7-84.8 8.6-148.8 60.3-143.4 116s78.5 94 163.4 85.7c84.8-8.6 148.8-60.3 143.4-116zM347.9 35.1c-25.9 5.6-16.8 43.7 8.3 38.3 72.3-15.2 134.8 52.8 111.7 124-7.4 24.2 29.1 37 37.4 12 31.9-99.8-55.1-195.9-157.4-174.3zm-78.5 311c-17.1 38.8-66.8 60-109.1 46.3-40.8-13.1-58-53.4-40.3-89.7 17.7-35.4 63.1-55.4 103.4-45.1 42 10.8 63.1 50.2 46 88.5zm-86.3-30c-12.9-5.4-30 .3-38 12.9-8.3 12.9-4.3 28 8.6 34 13.1 6 30.8 .3 39.1-12.9 8-13.1 3.7-28.3-9.7-34zm32.6-13.4c-5.1-1.7-11.4 .6-14.3 5.4-2.9 5.1-1.4 10.6 3.7 12.9 5.1 2 11.7-.3 14.6-5.4 2.8-5.2 1.1-10.9-4-12.9z\"]\n};\nvar faXrpl = {\n  prefix: 'fab',\n  iconName: 'xrpl',\n  icon: [640, 512, [], \"e8bb\", \"M170.8 59.8l-10.8 0c-15.7 .1-30.8 6.4-41.9 17.5s-17.4 26.2-17.5 41.9l0 63.2c0 13.1-3.2 25.9-9.3 37.5s-14.9 21.5-25.7 28.8c10.8 7.3 19.7 17.2 25.8 28.8s9.3 24.5 9.3 37.5l0 73.2c0 16.8 6.7 32.8 18.5 44.7s28 18.5 44.7 18.5l0 27.8c-24.2-.1-47.3-9.7-64.4-26.8S72.8 412 72.8 387.8l0-72.8c0-13.4-5.1-26.3-14.2-36s-21.7-15.6-35.1-16.4l.8-13.9-.8-13.9c13.4-.8 25.9-6.7 35.1-16.4s14.3-22.6 14.2-36l0-63.2c0-11.4 2.3-22.8 6.6-33.3S90.3 65.6 98.3 57.5 116.1 43 126.6 38.6 148.5 32 160 32l10.8 0 0 27.8zM480.7 32c23.1 .1 45.1 9.3 61.4 25.6s25.4 38.4 25.3 61.5l0 63.2c0 13.4 5.1 26.3 14.2 36s21.7 15.6 35.1 16.4l-.8 13.9 .8 13.9c-13.4 .8-25.9 6.7-35.1 16.4s-14.3 22.6-14.2 36l0 72.8c0 24.2-9.5 47.4-26.6 64.5s-40.2 26.8-64.4 26.8l0-27.8c16.8 0 32.9-6.7 44.7-18.5s18.5-27.9 18.5-44.7l0-73.2c0-13.1 3.2-26 9.3-37.5s15-21.4 25.8-28.8c-10.8-7.4-19.6-17.3-25.7-28.8s-9.3-24.4-9.3-37.5l0-63.2c0-7.8-1.5-15.5-4.4-22.7s-7.3-13.7-12.7-19.2-12-9.9-19.2-12.9-14.9-4.6-22.7-4.6l-10.8 0 0-27.8 10.8 0zM320.4 264.5c20.9 0 40.9 7.8 56.3 22l86.4 80.9-41.2 0-65.6-61.7c-9.7-8.9-22.5-13.9-35.7-13.9s-25.9 5-35.7 13.9l-65.9 61.7-41.2 0 86.4-80.9c15.3-14.1 35.4-22 56.3-22zm-35.9-59.8c9.7 8.9 22.5 13.9 35.7 13.9s25.9-4.9 35.7-13.9l65.5-60.9 41.2 0-86 80.6c-15.4 14-35.5 21.7-56.3 21.7s-40.9-7.7-56.3-21.7l-86-80.6 41.2 0 65.2 60.9z\"]\n};\nvar faReadme = {\n  prefix: 'fab',\n  iconName: 'readme',\n  icon: [576, 512, [], \"f4d5\", \"M528.3 46.5l-139.8 0c-48.1 0-89.9 33.3-100.4 80.3-10.6-47-52.3-80.3-100.4-80.3L48 46.5C21.5 46.5 0 68 0 94.5L0 340.3c0 26.5 21.5 48 48 48l89.7 0c102.2 0 132.7 24.4 147.3 75 .7 2.8 5.2 2.8 6 0 14.7-50.6 45.2-75 147.3-75l89.7 0c26.5 0 48-21.5 48-48l0-245.7c0-26.4-21.3-47.9-47.7-48.1zM242 311.9c0 1.9-1.5 3.5-3.5 3.5l-160.3 0c-1.9 0-3.5-1.5-3.5-3.5l0-22.9c0-1.9 1.5-3.5 3.5-3.5l160.4 0c1.9 0 3.5 1.5 3.5 3.5l0 22.9-.1 0zm0-60.9c0 1.9-1.5 3.5-3.5 3.5l-160.3 0c-1.9 0-3.5-1.5-3.5-3.5l0-22.9c0-1.9 1.5-3.5 3.5-3.5l160.4 0c1.9 0 3.5 1.5 3.5 3.5l0 22.9-.1 0zm0-60.9c0 1.9-1.5 3.5-3.5 3.5l-160.3 0c-1.9 0-3.5-1.5-3.5-3.5l0-22.9c0-1.9 1.5-3.5 3.5-3.5l160.4 0c1.9 0 3.5 1.5 3.5 3.5l0 22.9-.1 0zM501.3 311.8c0 1.9-1.5 3.5-3.5 3.5l-160.3 0c-1.9 0-3.5-1.5-3.5-3.5l0-22.9c0-1.9 1.5-3.5 3.5-3.5l160.4 0c1.9 0 3.5 1.5 3.5 3.5l0 22.9-.1 0zm0-60.9c0 1.9-1.5 3.5-3.5 3.5l-160.3 0c-1.9 0-3.5-1.5-3.5-3.5l0-22.9c0-1.9 1.5-3.5 3.5-3.5l160.4 0c1.9 0 3.5 1.5 3.5 3.5l0 22.9-.1 0zm0-60.9c0 1.9-1.5 3.5-3.5 3.5l-160.3 0c-1.9 0-3.5-1.5-3.5-3.5l0-22.8c0-1.9 1.5-3.5 3.5-3.5l160.4 0c1.9 0 3.5 1.5 3.5 3.5l0 22.8-.1 0z\"]\n};\nvar faGolang = {\n  prefix: 'fab',\n  iconName: 'golang',\n  icon: [640, 512, [], \"e40f\", \"M400.1 194.8c-10.9 2.8-19.9 4.3-29.1 7.6-7.3 1.9-14.7 3.9-23.2 6.1l-.6 .1c-4.2 1.2-4.6 1.3-8.5-3.2-4.7-5.3-8.1-8.7-14.6-11.9-19.7-9.6-38.7-6.8-56.4 4.7-21.2 13.7-32.1 34-31.8 59.2 .3 25 17.4 45.5 41.2 48.9 22 2.8 39.8-4.6 53.8-20.5 2.1-2.6 4-5.3 6.1-8.3 .8-1 1.5-2.1 2.3-3.3l-60.1 0c-6.5 0-8.1-4-5.9-9.3 4-9.7 11.5-25.9 15.9-34 .9-1.8 3.1-5.8 6.9-5.8l101.1 0c4.5-13.4 11.8-26.9 21.6-39.7 22.7-29.9 49.3-45.5 87.2-52 31.8-5.6 61.7-2.5 88.9 15.9 24.6 16.8 39.8 39.6 43.9 69.5 5.3 42.1-6.9 76.3-36.7 105.6-19.7 20.9-44.9 34-73.9 39.9-5.6 1-11.1 1.5-16.5 2-2.9 .2-5.7 .5-8.5 .8-28.3-.6-54.2-8.7-76-27.4-15.3-13.3-25.9-29.6-31.1-48.5-3.7 7.3-8 14.4-14 21.1-21.6 29.6-50.9 48-87.9 52.9-30.6 4.1-58.9-1.8-83.9-20.5-23-17.5-36.1-40.5-39.5-69.2-4.1-34 5.9-65.4 26.4-91.3 22.2-29 51.5-47.4 87.3-53.9 29.3-6.2 57.3-1.9 82.6 15.3 16.5 10.9 28.3 25.8 36.1 43.9 1.9 2.8 .6 4.4-3.1 5.3zM48.3 200.4c-1.3 0-1.6-.6-.9-1.6l6.6-8.4c.6-.9 2.2-1.5 3.4-1.5l111.3 0c1.2 0 1.5 .9 .9 1.8l-5.3 8.1c-.6 1-2.2 1.9-3.1 1.9l-112.8-.3zM1.2 229.1c-1.2 0-1.6-.7-.9-1.6l6.5-8.4c.6-.9 2.2-1.6 3.4-1.6l142.1 0c1.2 0 1.8 1 1.5 1.9l-2.5 7.5c-.3 1.2-1.5 1.9-2.8 1.9L1.2 229.1zm74.5 26.8c-.6 .9-.3 1.8 .9 1.8l68 .3c.9 0 2.2-.9 2.2-2.1l.6-7.5c0-1.3-.6-2.2-1.9-2.2l-62.3 0c-1.2 0-2.5 .9-3.1 1.9l-4.4 7.8zm501.5-18c-.2-2.6-.3-4.8-.7-7-5.6-30.8-34-48.3-63.6-41.4-29 6.5-47.7 24.9-54.5 54.2-5.6 24.3 6.2 48.9 28.6 58.9 17.2 7.5 34.3 6.6 50.8-1.9 24.6-13.6 38-32.7 39.6-59.5-.1-1.2-.1-2.3-.2-3.3z\"]\n};\nvar faA11yProject = {\n  prefix: 'fab',\n  iconName: 'a11y-project',\n  icon: [512, 512, [], \"e8c2\", \"M256 0a256 256 0 1 0 0 512 256 256 0 1 0 0-512zm-3.7 117a33.1 33.1 0 1 1 -.1-66.2 33.1 33.1 0 1 1 .1 66.2zm143.3 40.8l-98.5 12.4 .1 98.6 47.7 159.3c.6 2.4 .7 4.8 .4 7.3s-1.2 4.7-2.4 6.8-2.9 3.9-4.9 5.4-4.2 2.5-6.6 3.1c-9.9 2.5-20.1-3-22.6-13l-48.9-145-15 0-45 148c-3.8 9.7-14.5 14.1-24.2 10.3-9.6-3.7-15.4-14.6-11.6-24.3l41.3-156.3 0-100.2-90.8-12.3c-9.3-.8-15.6-8.9-14.9-18.3 .7-9.4 9.2-16.3 18.5-15.6l110.3 9.5 48.3 0 117.4-9.7c2.2-.1 4.4 .3 6.5 1s4 1.9 5.6 3.5 3 3.3 3.9 5.4 1.4 4.2 1.5 6.4c.4 9.3-6.8 17.2-16.1 17.6l0 0z\"]\n};\nvar faStackExchange = {\n  prefix: 'fab',\n  iconName: 'stack-exchange',\n  icon: [448, 512, [], \"f18d\", \"M18.1 332.3l412.7 0 0 22c0 37.7-29.3 68-65.3 68l-19 0-86.8 89.7 0-89.7-176.3 0c-36 0-65.3-30.3-65.3-68l0-22zm0-23.6l412.7 0 0-85-412.7 0 0 85zm0-109.4l412.7 0 0-85-412.7 0 0 85zM365.4 0L83.4 0c-36 0-65.3 30.3-65.3 67.7l0 22.3 412.7 0 0-22.3C430.7 30.3 401.4 0 365.4 0z\"]\n};\nvar faGulp = {\n  prefix: 'fab',\n  iconName: 'gulp',\n  icon: [256, 512, [], \"f3ae\", \"M210 391.1l-14.1 24.6-4.6 80.2c0 8.9-28.3 16.1-63.1 16.1s-63.1-7.2-63.1-16.1l-5.8-79.4-14.9-25.4c41.2 17.3 126 16.7 165.6 0zM14 137.8L27.6 263.3c5.9-20 20.8-47 40-55.2 6.3-2.7 12.7-2.7 18.7 .9 5.2 3 9.6 9.3 10.1 11.8 1.2 6.5-2 9.1-4.5 9.1-3 0-5.3-4.6-6.8-7.3-4.1-7.3-10.3-7.6-16.9-2.8-6.9 5-12.9 13.4-17.1 20.7-5.1 8.8-9.4 18.5-12 28.2-1.5 5.6-2.9 14.6-.6 19.9 1 2.2 2.5 3.6 4.9 3.6 5 0 12.3-6.6 15.8-10.1 4.5-4.5 10.3-11.5 12.5-16l5.2-15.5c2.6-6.8 9.9-5.6 9.9 0 0 10.2-3.7 13.6-10 34.7-5.8 19.5-7.6 25.8-7.6 25.8-.7 2.8-3.4 7.5-6.3 7.5-1.2 0-2.1-.4-2.6-1.2-1-1.4-.9-5.3-.8-6.3 .2-3.2 6.3-22.2 7.3-25.2-2 2.2-4.1 4.4-6.4 6.6-5.4 5.1-14.1 11.8-21.5 11.8-3.4 0-5.6-.9-7.7-2.4l7.6 79.6c2 5 39.2 17.1 88.2 17.1 49.1 0 86.3-12.2 88.2-17.1l10.9-94.6c-5.7 5.2-12.3 11.6-19.6 14.8-5.4 2.3-17.4 3.8-17.4-5.7 0-5.2 9.1-14.8 14.4-21.5 1.4-1.7 4.7-5.9 4.7-8.1 0-2.9-6-2.2-11.7 2.5-3.2 2.7-6.2 6.3-8.7 9.7-4.3 6-6.6 11.2-8.5 15.5-6.2 14.2-4.1 8.6-9.1 22-5 13.3-4.2 11.8-5.2 14-.9 1.9-2.2 3.5-4 4.5-1.9 1-4.5 .9-6.1-.3-.9-.6-1.3-1.9-1.3-3.7 0-.9 .1-1.8 .3-2.7 1.5-6.1 7.8-18.1 15-34.3 1.6-3.7 1-2.6 .8-2.3-6.2 6-10.9 8.9-14.4 10.5-5.8 2.6-13 2.6-14.5-4.1-.1-.4-.1-.8-.2-1.2-11.8 9.2-24.3 11.7-20-8.1-4.6 8.2-12.6 14.9-22.4 14.9-4.1 0-7.1-1.4-8.6-5.1-2.3-5.5 1.3-14.9 4.6-23.8 1.7-4.5 4-9.9 7.1-16.2 1.6-3.4 4.2-5.4 7.6-4.5 .6 .2 1.1 .4 1.6 .7 2.6 1.8 1.6 4.5 .3 7.2-3.8 7.5-7.1 13-9.3 20.8-.9 3.3-2 9 1.5 9 2.4 0 4.7-.8 6.9-2.4 4.6-3.4 8.3-8.5 11.1-13.5 2-3.6 4.4-8.3 5.6-12.3 .5-1.7 1.1-3.3 1.8-4.8 1.1-2.5 2.6-5.1 5.2-5.1 1.3 0 2.4 .5 3.2 1.5 1.7 2.2 1.3 4.5 .4 6.9-2 5.6-4.7 10.6-6.9 16.7-1.3 3.5-2.7 8-2.7 11.7 0 3.4 3.7 2.6 6.8 1.2 2.4-1.1 4.8-2.8 6.8-4.5 1.2-4.9 .9-3.8 26.4-68.2 1.3-3.3 3.7-4.7 6.1-4.7 1.2 0 2.2 .4 3.2 1.1 1.7 1.3 1.7 4.1 1 6.2-.7 1.9-.6 1.3-4.5 10.5-5.2 12.1-8.6 20.8-13.2 31.9-1.9 4.6-7.7 18.9-8.7 22.3-.6 2.2-1.3 5.8 1 5.8 5.4 0 19.3-13.1 23.1-17 .2-.3 .5-.4 .9-.6 .6-1.9 1.2-3.7 1.7-5.5 1.4-3.8 2.7-8.2 5.3-11.3 .8-1 1.7-1.6 2.7-1.6 2.8 0 4.2 1.2 4.2 4 0 1.1-.7 5.1-1.1 6.2 1.4-1.5 2.9-3 4.5-4.5 15-13.9 25.7-6.8 25.7 .2 0 7.4-8.9 17.7-13.8 23.4-1.6 1.9-4.9 5.4-5 6.4 0 1.3 .9 1.8 2.2 1.8 2 0 6.4-3.5 8-4.7 5-3.9 11.8-9.9 16.6-14.1l14.8-136.8c-30.5 17.1-197.6 17.2-228.3 .2zm229.7-8.5c0 21-231.2 21-231.2 0 0-8.8 51.8-15.9 115.6-15.9 9 0 17.8 .1 26.3 .4L167 65.1 228.3 .6c1.4-1.4 5.8-.2 9.9 3.5s6.6 7.9 5.3 9.3l-.1 .1-57.3 60.5-10 40.7c39.9 2.6 67.6 8.1 67.6 14.6zm-69.4 4.6c0-.8-.9-1.5-2.5-2.1l-.2 .8c0 1.3-5 2.4-11.1 2.4s-11.1-1.1-11.1-2.4c0-.1 0-.2 .1-.3l.2-.7c-1.8 .6-3 1.4-3 2.3 0 2.1 6.2 3.7 13.7 3.7 7.7 .1 13.9-1.6 13.9-3.7z\"]\n};\nvar faYelp = {\n  prefix: 'fab',\n  iconName: 'yelp',\n  icon: [384, 512, [], \"f1e9\", \"M42.9 240.3l99.6 48.6c19.2 9.4 16.2 37.5-4.5 42.7L30.5 358.5c-3.2 .8-6.4 .9-9.6 .3s-6.2-1.8-8.9-3.7-4.9-4.3-6.6-7.1-2.7-5.9-3.1-9.2c-3.3-28.8-.2-57.9 9-85.3 1-3.1 2.7-5.9 4.9-8.3s4.9-4.2 7.9-5.5 6.2-1.8 9.5-1.8 6.4 .9 9.3 2.3zm44 239.3c23.8 16.3 50.9 27.3 79.4 32.1 3.2 .6 6.5 .4 9.6-.4s6.1-2.3 8.6-4.4 4.6-4.6 6-7.5 2.3-6.1 2.4-9.4l3.9-110.8c.7-21.3-25.5-31.9-39.8-16.1L82.8 445.5c-2.2 2.4-3.8 5.3-4.8 8.4s-1.3 6.4-.9 9.6 1.5 6.3 3.1 9.1 3.9 5.2 6.6 7l0 0zM232.2 369.7l58.8 94c1.7 2.8 4 5.1 6.8 6.9s5.8 3 9 3.5 6.5 .3 9.7-.5 6.1-2.4 8.6-4.4c22.3-18.4 40.3-41.5 52.7-67.6 1.4-2.9 2.1-6.1 2.2-9.4s-.6-6.5-1.9-9.4-3.2-5.7-5.6-7.8-5.2-3.9-8.3-4.9L258.7 335.7c-20.3-6.5-37.8 15.8-26.5 33.9zM380.6 237.4c-11.5-26.5-28.7-50.2-50.4-69.3-2.4-2.1-5.3-3.7-8.4-4.7s-6.4-1.2-9.6-.8-6.3 1.5-9.1 3.2-5.1 4-6.9 6.7l-62 91.9c-11.9 17.7 4.7 40.6 25.2 34.7L366 268.6c3.1-.9 6-2.5 8.5-4.6s4.5-4.7 5.8-7.7 2.1-6.2 2.2-9.4-.6-6.5-1.9-9.5l0 0zM62.1 30.2c-2.8 1.4-5.4 3.3-7.4 5.7s-3.6 5.2-4.5 8.2-1.2 6.2-.9 9.3 1.3 6.1 2.9 8.9L156.3 242.6c11.7 20.2 42.6 11.9 42.6-11.4l0-208.3c0-3.1-.6-6.3-1.8-9.2s-3.1-5.5-5.4-7.6-5-3.8-8-4.8-6.1-1.4-9.3-1.2c-39 3.1-77 13.3-112.3 30.1z\"]\n};\nvar faGofore = {\n  prefix: 'fab',\n  iconName: 'gofore',\n  icon: [448, 512, [], \"f3a7\", \"M348 319.8l-13.2 0 0 34.7c-24.5 23.1-56.3 35.8-89.9 35.8-73.2 0-132.4-60.2-132.4-134.4 0-74.1 59.2-134.4 132.4-134.4 35.3 0 68.6 14 93.6 39.4l62.3-63.3c-41.8-42.3-97.1-65.6-156.1-65.6-122.7 0-220.7 100.6-220.7 224 0 122.5 97 224 220.7 224 63.2 0 124.5-26.2 171-82.5-2-27.6-13.4-77.7-67.7-77.7zM335.9 207.3l-106.3 0 0 89 118.4 0c33.5 0 60.5 15.1 76 41.8l0-30.6c0-65.2-40.4-100.2-88.1-100.2z\"]\n};\nvar faTesla = {\n  prefix: 'fab',\n  iconName: 'tesla',\n  icon: [512, 512, [], \"e8b9\", \"M309.1 49.8c1 0 91.5 2.1 181.5 43.8-23.2 34.8-69.2 52-69.2 52-3.1-30.7-24.7-38.2-93.3-38.2L256.1 512 183.6 107.4c-68.1 0-89.7 7.6-92.9 38.2-.9-.4-46.3-17.5-69.2-52 90.5-41.9 181.5-43.8 181.5-43.8l53 64.6 53-64.6zM256.1 0c75.6 .3 163.4 13 257.1 50.1 0 .1-3 9.3-14.4 29.8-80.4-35-159-47.7-228.8-48.7l-13.8 0C182.9 30.6 99.1 42.5 13.4 79.8 3.2 61.3-1 50.1-1 50.1 92.7 13 180.5 .3 256.1 0z\"]\n};\nvar faAviato = {\n  prefix: 'fab',\n  iconName: 'aviato',\n  icon: [640, 512, [], \"f421\", \"M107.2 283.5l-19-41.8-52.1 0-19 41.8-17.1 0 62.2-131.4 62.2 131.4-17.2 0zm-45-98.1l-19.6 42.5 39.2 0-19.6-42.5zM174.9 287.8l-62.2-131.4 17.1 0 45.1 96 45.1-96 17 0-62.1 131.4zm80.6-4.3l0-127.1 15.5 0 0 127.1-15.5 0zM464.6 167.9l0 115.6-17.3 0 0-115.6-41.2 0 0-11.5 99.6 0 0 11.5-41.1 0zM640 218.8c0 9.2-1.7 17.8-5.1 25.8s-8.2 15.1-14.2 21.1-13.1 10.8-21.1 14.2-16.6 5.1-25.8 5.1-17.8-1.7-25.8-5.1-15.1-8.2-21.1-14.2-10.8-13-14.2-21.1c-3.4-8-5.1-16.6-5.1-25.8s1.7-17.8 5.1-25.8 8.2-15.1 14.2-21.1 13-8.4 21.1-11.9c8-3.4 16.6-5.1 25.8-5.1s17.8 1.7 25.8 5.1 15.1 5.8 21.1 11.9c6 6 10.7 13.1 14.2 21.1 3.4 8 5.1 16.6 5.1 25.8zm-15.5 0c0-7.3-1.3-14-3.9-20.3s-6.2-11.7-10.8-16.3-10-8.2-16.2-10.9-12.8-4-19.8-4-13.6 1.3-19.8 4-11.6 6.3-16.2 10.9-8.2 10-10.8 16.3-3.9 13.1-3.9 20.3c0 7.3 1.3 14 3.9 20.3s6.2 11.7 10.8 16.3 10 8.2 16.2 10.9 12.8 4 19.8 4 13.6-1.3 19.8-4 11.6-6.3 16.2-10.9 8.2-10 10.8-16.3 3.9-13.1 3.9-20.3zm-94.8 96.7l0-6.3 88.9-10-242.9 13.4c.6-2.2 1.1-4.6 1.4-7.2 .3-2 .5-4.2 .6-6.5l64.8-8.1-64.9 1.9c0-.4-.1-.7-.1-1.1-2.8-17.2-25.5-23.7-25.5-23.7l-1.1-26.3 23.8 0 19 41.8 17.1 0-62.2-131.4-62.2 131.4 17.1 0 19-41.8 23.6 0-1.1 26.4s-22.7 6.5-25.5 23.7c-.1 .3-.1 .7-.1 1.1l-64.9-1.9 64.8 8.1c.1 2.3 .3 4.4 .6 6.5 .3 2.6 .8 5 1.4 7.2l-242.9-13.5 88.9 10 0 6.3c-5.9 .9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4s12.4-5.6 12.4-12.4c0-6.2-4.6-11.3-10.5-12.2l0-5.8 80.3 9 0 5.4c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2s12.4-3.4 12.4-10.2c0-6-4.3-11-9.9-12.1l0-4.9 28.4 3.2 0 23.7-5.9 0 0 13.9 5.9 0 0-6.6 5 0 0 6.6 5.9 0 0-13.8-5.9 0 0-23.2 38.3 4.3c8.1 11.4 19 13.6 19 13.6l-.1 6.7-5.1 .2-.1 12.1 4.1 0 .1-5 5.2 0 .1 5 4.1 0-.1-12.1-5.1-.2-.1-6.7s10.9-2.1 19-13.6l38.3-4.3 0 23.2-5.9 0 0 13.8 5.9 0 0-6.6 5 0 0 6.6 5.9 0 0-13.8-5.9 0 0-23.7 28.4-3.2 0 4.9c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2s12.4-3.4 12.4-10.2c0-6-4.3-11-9.9-12.1l0-5.4 80.3-9 0 5.8c-5.9 .9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4s12.4-5.6 12.4-12.4c-.2-6.3-4.7-11.4-10.7-12.3zM328.9 227.9l19.6-42.5 19.6 42.5-17.9 0-1.7-40.3-1.7 40.3-17.9 0z\"]\n};\nvar faPadlet = {\n  prefix: 'fab',\n  iconName: 'padlet',\n  icon: [640, 512, [], \"e4a0\", \"M297.9 0l.1 0c7.6 .1 14.4 4.7 17.5 11.8l132 308.5 .3-.1 .2 .4-2.8 10-42.9 158c-3.7 16.2-19.7 26.3-35.8 22.6l-68.4-15.6-68.5 15.6c-16.1 3.7-32.1-6.4-35.8-22.6l-42.9-158-2.7-10 .1-.4 132.1-308.4c3-7 9.9-11.6 17.5-11.8zM160.1 322.1l131 39.1 6.9 122.5 7.9-121.5 130.6-39.3 .2-.1-131 25.1-8.6-320.2-5.2 320.2-131.8-25.8zM426 222.6l94.4-41 73.8 0-157 247.6 31.6-109-42.8-97.6zm171.5-41.2l41.4 76.2c4 7.5-3.9 15.9-11.6 12.2l-47.6-22.7 17.8-65.7zM127.3 318.5L158.7 430 1.6 154.5c-5.9-10.4 5.5-22 15.9-16.2l151.8 84.2-42.1 96z\"]\n};\nvar faEdgeLegacy = {\n  prefix: 'fab',\n  iconName: 'edge-legacy',\n  icon: [448, 512, [], \"e078\", \"M-6 228.2l.4-.5c0 .2 0 .3-.1 .5l-.3 0zm460.6 15.5c0-44-7.8-84.5-28.8-122.4-41-73.4-113.6-113.3-198.6-113.3-139.9-.3-218.3 105.2-232.8 219.7 42.4-61.3 117.1-121.4 220.4-125 0 0 109.7 0 99.4 105l-175.8 0c6.4-37.4 18.5-59 34.3-78.9-75 34.9-121.8 96.1-120.8 188.3 .8 71.5 50.1 144.8 120.8 172 83.4 31.8 192.8 7.2 240.1-21.3l0-104.4c-80.9 56.5-270.9 60.9-272.3-67.6l314.1 0 0-52.1z\"]\n};\nvar faSquareLastfm = {\n  prefix: 'fab',\n  iconName: 'square-lastfm',\n  icon: [448, 512, [\"lastfm-square\"], \"f203\", \"M448 96c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320zM210.7 280.8c-1.8-5.5-3.4-10.8-5-15.9-12.9-41.9-21-68.4-58-68.4-22.4 0-45.1 16.1-45.1 61.2 0 35.2 18 57.2 43.3 57.2 28.6 0 47.6-21.3 47.6-21.3l11.7 31.9s-19.8 19.4-61.2 19.4c-51.3 0-79.9-30.1-79.9-85.8 0-57.9 28.6-92 82.5-92 67.9 0 79.3 35.3 96.4 88.4 1.4 4.4 2.9 8.9 4.4 13.5 8.8 26.8 24.2 46.2 61.2 46.2 24.9 0 38.1-5.5 38.1-19.1 0-17.5-16.9-21.2-40-26.4-3.2-.7-6.5-1.4-9.9-2.2-30.4-7.3-42.5-23.1-42.5-48 0-40 32.3-52.4 65.2-52.4 37.4 0 60.1 13.6 63 46.6l-36.7 4.4c-1.5-15.8-11-22.4-28.6-22.4-16.1 0-26 7.3-26 19.8 0 11 4.8 17.6 20.9 21.3 2.2 .5 4.5 1 6.7 1.4 31.1 6.5 65.1 13.7 65.1 56.1 .1 36.7-30.7 50.6-76.1 50.6-63.4 0-85.4-28.6-97.1-64.1z\"]\n};\nvar faLastfmSquare = faSquareLastfm;\nvar faGoodreadsG = {\n  prefix: 'fab',\n  iconName: 'goodreads-g',\n  icon: [320, 512, [], \"f3a9\", \"M10.8 403.3l2.8 0c12.7 0 25.5 0 38.2 .1 1.6 0 3.1-.4 3.6 2.1 7.1 34.9 30 54.6 62.9 63.9 26.9 7.6 54.1 7.8 81.3 1.8 33.8-7.4 56-28.3 68-60.4 8-21.5 10.7-43.8 11-66.5 .1-5.8 .3-47-.2-52.8l-.9-.3c-.8 1.5-1.7 2.9-2.5 4.4-22.1 43.1-61.3 67.4-105.4 69.1-103 4-169.4-57-172-176.2-.5-23.7 1.8-46.9 8.3-69.7 20.6-71.1 74.6-118.2 153.9-118.8 61.3-.4 101.5 38.7 116.2 70.3 .5 1.1 1.3 2.3 2.4 1.9l0-61.6 44.3 0c0 280.3 .1 332.2 .1 332.2-.1 78.5-26.7 143.7-103 162.2-69.5 16.9-159 4.8-196-57.2-8-13.5-11.8-28.3-13-44.5zM157.1 36.5c-52.5-.5-108.5 40.7-115 133.8-4.1 59 14.8 122.2 71.5 148.6 27.6 12.9 74.3 15 108.3-8.7 47.6-33.2 62.7-97 54.8-154-9.7-71.1-47.8-120-119.6-119.7z\"]\n};\nvar faCcMastercard = {\n  prefix: 'fab',\n  iconName: 'cc-mastercard',\n  icon: [576, 512, [], \"f1f1\", \"M482.9 410.3c0 6.8-4.6 11.7-11.2 11.7-6.8 0-11.2-5.2-11.2-11.7s4.4-11.7 11.2-11.7c6.6 0 11.2 5.2 11.2 11.7zM172.1 398.6c-7.1 0-11.2 5.2-11.2 11.7S165 422 172.1 422c6.5 0 10.9-4.9 10.9-11.7-.1-6.5-4.4-11.7-10.9-11.7zm117.5-.3c-5.4 0-8.7 3.5-9.5 8.7l19.1 0c-.9-5.7-4.4-8.7-9.6-8.7zm107.8 .3c-6.8 0-10.9 5.2-10.9 11.7s4.1 11.7 10.9 11.7 11.2-4.9 11.2-11.7c0-6.5-4.4-11.7-11.2-11.7zm105.9 26.1c0 .3 .3 .5 .3 1.1 0 .3-.3 .5-.3 1.1-.3 .3-.3 .5-.5 .8-.3 .3-.5 .5-1.1 .5-.3 .3-.5 .3-1.1 .3-.3 0-.5 0-1.1-.3-.3 0-.5-.3-.8-.5-.3-.3-.5-.5-.5-.8-.3-.5-.3-.8-.3-1.1 0-.5 0-.8 .3-1.1 0-.5 .3-.8 .5-1.1 .3-.3 .5-.3 .8-.5 .5-.3 .8-.3 1.1-.3 .5 0 .8 0 1.1 .3 .5 .3 .8 .3 1.1 .5s.2 .6 .5 1.1zm-2.2 1.4c.5 0 .5-.3 .8-.3 .3-.3 .3-.5 .3-.8s0-.5-.3-.8c-.3 0-.5-.3-1.1-.3l-1.6 0 0 3.5 .8 0 0-1.4 .3 0 1.1 1.4 .8 0-1.1-1.3zM576 81l0 352c0 26.5-21.5 48-48 48L48 481c-26.5 0-48-21.5-48-48L0 81C0 54.5 21.5 33 48 33l480 0c26.5 0 48 21.5 48 48zM64 220.6c0 76.5 62.1 138.5 138.5 138.5 27.2 0 53.9-8.2 76.5-23.1-72.9-59.3-72.4-171.2 0-230.5-22.6-15-49.3-23.1-76.5-23.1-76.4-.1-138.5 62-138.5 138.2zM288 329.4c70.5-55 70.2-162.2 0-217.5-70.2 55.3-70.5 162.6 0 217.5zM145.7 405.7c0-8.7-5.7-14.4-14.7-14.7-4.6 0-9.5 1.4-12.8 6.5-2.4-4.1-6.5-6.5-12.2-6.5-3.8 0-7.6 1.4-10.6 5.4l0-4.4-8.2 0 0 36.7 8.2 0c0-18.9-2.5-30.2 9-30.2 10.2 0 8.2 10.2 8.2 30.2l7.9 0c0-18.3-2.5-30.2 9-30.2 10.2 0 8.2 10 8.2 30.2l8.2 0 0-23-.2 0zM190.6 392l-7.9 0 0 4.4c-2.7-3.3-6.5-5.4-11.7-5.4-10.3 0-18.2 8.2-18.2 19.3 0 11.2 7.9 19.3 18.2 19.3 5.2 0 9-1.9 11.7-5.4l0 4.6 7.9 0 0-36.8zm40.5 25.6c0-15-22.9-8.2-22.9-15.2 0-5.7 11.9-4.8 18.5-1.1l3.3-6.5c-9.4-6.1-30.2-6-30.2 8.2 0 14.3 22.9 8.3 22.9 15 0 6.3-13.5 5.8-20.7 .8l-3.5 6.3c11.2 7.6 32.6 6 32.6-7.5zm35.4 9.3l-2.2-6.8c-3.8 2.1-12.2 4.4-12.2-4.1l0-16.6 13.1 0 0-7.4-13.1 0 0-11.2-8.2 0 0 11.2-7.6 0 0 7.3 7.6 0 0 16.7c0 17.6 17.3 14.4 22.6 10.9zm13.3-13.4l27.5 0c0-16.2-7.4-22.6-17.4-22.6-10.6 0-18.2 7.9-18.2 19.3 0 20.5 22.6 23.9 33.8 14.2l-3.8-6c-7.8 6.4-19.6 5.8-21.9-4.9zM338.9 392c-4.6-2-11.6-1.8-15.2 4.4l0-4.4-8.2 0 0 36.7 8.2 0 0-20.7c0-11.6 9.5-10.1 12.8-8.4l2.4-7.6zm10.6 18.3c0-11.4 11.6-15.1 20.7-8.4l3.8-6.5c-11.6-9.1-32.7-4.1-32.7 15 0 19.8 22.4 23.8 32.7 15l-3.8-6.5c-9.2 6.5-20.7 2.6-20.7-8.6zM416.2 392l-8.2 0 0 4.4c-8.3-11-29.9-4.8-29.9 13.9 0 19.2 22.4 24.7 29.9 13.9l0 4.6 8.2 0 0-36.8zm33.7 0c-2.4-1.2-11-2.9-15.2 4.4l0-4.4-7.9 0 0 36.7 7.9 0 0-20.7c0-11 9-10.3 12.8-8.4l2.4-7.6zm40.3-14.9l-7.9 0 0 19.3c-8.2-10.9-29.9-5.1-29.9 13.9 0 19.4 22.5 24.6 29.9 13.9l0 4.6 7.9 0 0-51.7zm7.6-75.1l0 4.6 .8 0 0-4.6 1.9 0 0-.8-4.6 0 0 .8 1.9 0zm6.6 123.8c0-.5 0-1.1-.3-1.6-.3-.3-.5-.8-.8-1.1s-.8-.5-1.1-.8c-.5 0-1.1-.3-1.6-.3-.3 0-.8 .3-1.4 .3-.5 .3-.8 .5-1.1 .8-.5 .3-.8 .8-.8 1.1-.3 .5-.3 1.1-.3 1.6 0 .3 0 .8 .3 1.4 0 .3 .3 .8 .8 1.1 .3 .3 .5 .5 1.1 .8 .5 .3 1.1 .3 1.4 .3 .5 0 1.1 0 1.6-.3 .3-.3 .8-.5 1.1-.8s.5-.8 .8-1.1c.3-.6 .3-1.1 .3-1.4zm3.2-124.7l-1.4 0-1.6 3.5-1.6-3.5-1.4 0 0 5.4 .8 0 0-4.1 1.6 3.5 1.1 0 1.4-3.5 0 4.1 1.1 0 0-5.4zm4.4-80.5c0-76.2-62.1-138.3-138.5-138.3-27.2 0-53.9 8.2-76.5 23.1 72.1 59.3 73.2 171.5 0 230.5 22.6 15 49.5 23.1 76.5 23.1 76.4 .1 138.5-61.9 138.5-138.4z\"]\n};\nvar faDiscourse = {\n  prefix: 'fab',\n  iconName: 'discourse',\n  icon: [448, 512, [], \"f393\", \"M225.9 32C103.3 32 0 130.5 0 252.1 0 256 .1 480 .1 480l225.8-.2C348.6 479.8 448 377.5 448 255.9S348.6 32 225.9 32zM224 384c-19.4 0-37.9-4.3-54.4-12.1L88.5 392 111.4 317c-9.8-18.1-15.4-38.9-15.4-61 0-70.7 57.3-128 128-128s128 57.3 128 128-57.3 128-128 128z\"]\n};\nvar faBlackTie = {\n  prefix: 'fab',\n  iconName: 'black-tie',\n  icon: [448, 512, [], \"f27e\", \"M0 32l0 448 448 0 0-448-448 0zM316.5 357.2l-92.5 88.7-92.5-88.7 64.5-184-64.5-86.6 184.9 0-64.4 86.6 64.5 184z\"]\n};\nvar faSquareFacebook = {\n  prefix: 'fab',\n  iconName: 'square-facebook',\n  icon: [448, 512, [\"facebook-square\"], \"f082\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l98.2 0 0-145.8-52.8 0 0-78.2 52.8 0 0-33.7c0-87.1 39.4-127.5 125-127.5 16.2 0 44.2 3.2 55.7 6.4l0 70.8c-6-.6-16.5-1-29.6-1-42 0-58.2 15.9-58.2 57.2l0 27.8 83.6 0-14.4 78.2-69.3 0 0 145.8 129 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32z\"]\n};\nvar faFacebookSquare = faSquareFacebook;\nvar faBattleNet = {\n  prefix: 'fab',\n  iconName: 'battle-net',\n  icon: [512, 512, [], \"f835\", \"M448.8 225.6c26.9 .2 35.6-7.4 38.9-12.4 12.5-16.3-7.1-47.6-52.8-71.3 17.8-33.6 30.1-63.7 36.3-85.3 3.4-11.8 1.1-19 .5-20.3-1.7 10.5-15.8 48.5-48.2 100-25-11.2-56.5-20.1-93.8-23.8-8.9-16.9-34.9-63.9-60.5-88.9-16.8-16.5-30.3-22.6-40.8-23.5l0 0c-13.8-1.6-22.7 5.8-27.4 11-17.2 18.5-24.3 48.9-25 84.1-7.2-12.3-17.2-24.6-28.5-25.9l-.2 0c-20.7-3.5-38.4 29.2-36 81.3-38.4 1.4-71 5.8-93 11.2-9.9 2.4-16.2 7.3-17.8 9.7 1-.4 22.4-9.2 111.6-9.2 5.2 53 29.8 101.8 26 93.2-9.7 15.4-38.2 62.4-47.3 97.7-5.9 22.9-4.4 37.6 .2 47.1 5.6 12.8 16.4 16.7 23.2 18.3 25 5.7 55.4-3.6 86.7-21.1-7.5 12.8-13.9 28.5-9.1 39.3 7.3 19.6 44.5 18.7 88.4-9.4 20.2 32.2 40.1 57.9 55.7 74.1 2.6 2.8 5.5 5.2 8.8 7.1 5.1 3.2 8.6 3.4 8.6 3.4-8.2-6.7-34-38-62.5-91.8 22.2-16 45.7-38.9 67.5-69.3 122.8 4.6 143.3-24.8 148-31.6 14.7-19.9 3.4-57.4-57.3-93.7zM371 331.8c23.8-37.7 30.3-67.8 29.4-92.3 27.9 17.6 47.2 37.6 49.1 58.8 1.1 12.9-8.1 29.1-78.5 33.5zM217.1 387.7c9.8-6.2 19.5-13.1 29.2-20.5 6.7 13.3 13.6 26.1 20.6 38.2-40.6 21.9-68.8 12.8-49.8-17.7zm215-171.3c-10.3-5.3-21.2-10.3-32.4-15 7.9-12.1 15.5-24.4 22.7-36.9 39.1 24.1 45.9 53.2 9.6 51.9zM279.4 398c-5.5-11.4-11-23.5-16.5-36.4 43.2 1.3 62.4-18.7 63.3-20.4 0 .1-25 15.6-62.5 12.2 30.6-25.6 59.1-53.7 85.1-84 8.7-10.2 17-20.6 24.9-31.1-.4-.3-1.5-3-16.5-12-51.7 60.3-102.3 98-132.8 115.9-20.6-11.2-40.8-31.8-55.7-61.5-20-39.9-30-82.4-31.6-116.1 12.3 .9 25.3 2.2 38.8 3.9-22.3 36.8-14.4 63-13.5 64.2 0-.1-1-29.2 20.1-59.6 9 52.5 24 103.8 44.7 152.8 .9-.4 1.8 .9 18.7-8.2-26.3-74.5-33.8-138.2-34-173.4 20-12.4 48.2-19.8 81.6-17.8 44.6 2.7 86.4 15.2 116.3 30.7-7.1 10.4-14.9 21.3-23.3 32.5-20.7-37.7-47.3-43.9-48.9-43.7 .1 0 25.9 14.1 41.5 47.2-37.5-13.8-76.1-24.4-115.3-31.7-13.1-2.4-26.2-4.4-39.4-6-.1 .4-1.8 1.8-2.2 20.3 77.9 14.5 136.6 39.9 167.2 57.2 .7 23.6-7 51.6-25.4 79.6-24.6 37.3-56.4 67.2-84.8 85.4zm27.4-287c-44.6-1.7-73.6 7.4-94.7 20.7 2-52.3 21.3-76.4 38.2-75.3 16.9-4.2 54.9 52.2 56.5 54.6zm-130.7 3.1c.5 12.1 1.6 24.6 3.2 37.3-14.6-.9-28.7-1.3-42.4-1.3-.1 3.2-.1-51 24.7-49.6l.1 0c5.8 1.1 10.6 6.9 14.4 13.6zm-28.1 162c20.8 39.7 43.3 60.6 65.3 72.3-46.8 24.8-77.5 20-84.9 4.5-.2-.2-11.1-15.3 19.7-76.8l0 0z\"]\n};\nvar faBimobject = {\n  prefix: 'fab',\n  iconName: 'bimobject',\n  icon: [448, 512, [], \"f378\", \"M416 32L32 32C14.4 32 0 46.4 0 64L0 448c0 17.6 14.4 32 32 32l384 0c17.6 0 32-14.4 32-32l0-384c0-17.6-14.4-32-32-32zM352 289.4c0 49.4-11.4 82.6-103.8 82.6l-16.9 0c-44.1 0-62.4-14.9-70.4-38.8l-.9 0 0 34.8-64 0 0-232 64 0 0 74.7 1.1 0c4.6-30.5 39.7-38.8 69.7-38.8l17.3 0c92.4 0 103.8 33.1 103.8 82.5l0 35 .1 0zm-64-28.9l0 22.9c0 21.7-3.4 33.8-38.4 33.8l-45.3 0c-28.9 0-44.1-6.5-44.1-35.7l0-19c0-29.3 15.2-35.7 44.1-35.7l45.3 0c35-.2 38.4 12 38.4 33.7z\"]\n};\nvar faSvelte = {\n  prefix: 'fab',\n  iconName: 'svelte',\n  icon: [448, 512, [], \"e868\", \"M202.1 26.4c66.8-42.6 159.3-22.7 206.1 44.3 11.1 15.5 19 33.1 23.2 51.8s4.7 37.9 1.3 56.7c-3.2 18-10.1 35.1-20.1 50.3 14.6 27.9 19.6 60 14 91-3.3 18.4-10.4 36-20.9 51.5s-24.1 28.7-39.9 38.7L248.3 485.6c-66.8 42.6-159.3 22.7-206.1-44.2-11.1-15.5-19-33.2-23.2-51.8s-4.7-37.9-1.3-56.7c3.2-18 10.1-35.1 20.1-50.3-14.7-27.9-19.6-60-14-91.1 3.3-18.4 10.4-36 20.9-51.5s24.1-28.7 39.9-38.7L202.1 26.4zM315.6 67.2c-17.9-6.6-37.4-7.6-55.9-2.8-8.4 2.3-16.5 5.8-23.8 10.5L118.5 149.7c-9.5 6-17.7 13.9-24 23.3S84 192.8 82 203.9c-2 11.3-1.7 22.9 .8 34.1s7.3 21.8 13.9 31.2c10.9 15.7 26.3 27.6 44.2 34.3s37.4 7.6 55.9 2.8c8.4-2.3 16.5-5.8 23.8-10.5l44.8-28.6c2.2-1.4 4.7-2.5 7.2-3.2 5.6-1.4 11.4-1.2 16.8 .8s10 5.6 13.3 10.3c2 2.8 3.5 6 4.2 9.4s.9 6.9 .3 10.3c-.6 3.3-1.9 6.5-3.8 9.3-1.9 2.8-4.4 5.2-7.2 7L178.8 386.1c-2.2 1.4-4.7 2.5-7.2 3.2-5.6 1.4-11.4 1.2-16.8-.8s-10-5.6-13.3-10.3c-3.6-5.1-5.3-11.2-4.7-17.4l.4-4.4-4.3-1.3c-16.5-5-32.1-12.7-45.9-22.9l-6-4.4-2.2 6.7c-1.2 3.6-2.1 7.3-2.8 11-2 11.3-1.7 22.9 .8 34.1s7.3 21.8 13.9 31.1c10.9 15.7 26.3 27.6 44.2 34.3s37.4 7.6 55.8 2.8c8.4-2.3 16.5-5.8 23.9-10.5l117.3-74.8c9.5-6 17.7-13.9 24-23.3s10.6-19.9 12.6-31c2-11.3 1.8-22.9-.8-34.1s-7.3-21.8-14-31.1c-10.9-15.7-26.3-27.6-44.2-34.3s-37.4-7.6-55.9-2.8c-8.4 2.3-16.5 5.8-23.8 10.5L185 244.8c-2.2 1.4-4.6 2.5-7.2 3.2-5.6 1.4-11.5 1.2-16.8-.8s-10-5.6-13.3-10.3c-2-2.8-3.4-6-4.2-9.4s-.9-6.9-.2-10.3c.6-3.3 1.9-6.5 3.8-9.3s4.4-5.2 7.2-7l117.4-74.8c2.2-1.4 4.7-2.5 7.2-3.2 5.6-1.4 11.4-1.1 16.8 .9s10 5.6 13.3 10.3c3.6 5.1 5.2 11.3 4.7 17.4l-.4 4.4 4.4 1.3c16.5 5 32 12.8 45.9 23l6 4.4 2.2-6.8c1.2-3.6 2.1-7.3 2.8-11 2-11.3 1.8-22.9-.8-34.1s-7.3-21.8-14-31.1c-10.9-15.7-26.3-27.6-44.2-34.3z\"]\n};\nvar faSquareDeskpro = {\n  prefix: 'fab',\n  iconName: 'square-deskpro',\n  icon: [448, 512, [], \"e844\", \"M408.8 32C430.4 32 448 49.6 448 71.2l0 369.6c0 21.6-17.6 39.2-39.2 39.2L39.2 480C17.6 480 0 462.4 0 440.8L0 71.2C0 49.6 17.6 32 39.2 32l369.6 0zM110.9 274.1l0 114.4 89.1-.1c20.6 0 39.4-3.2 56.3-9.5s31.3-15.4 43.2-27c12.2-11.9 21.6-26 28.2-42.1 4.6-11.1 7.7-23 9.2-35.7l-43.8 0c-1.1 6.4-2.8 12.4-5.1 18.2-4.2 10.9-10.3 20.3-18.2 28.2-7.9 7.7-17.4 13.7-28.6 17.9-11.1 4.3-23.5 6.4-37.3 6.4l-50 0 0-70.6-43 .1zm0-151.4l0 114.4 43-.1 0-70.7 50 0c13.7 0 26.2 2.1 37.3 6.4 11.1 4.3 20.6 10.3 28.6 18.3 7.9 7.7 14 17.1 18.2 28.2 2.3 5.6 4 11.5 5.1 17.8l43.9 .1c-1.4-12.6-4.4-24.4-8.9-35.3-6.6-16.4-16-30.5-28.1-42.2-12.1-11.9-26.7-21.1-43.6-27.5-16.9-6.4-35.7-9.5-56.3-9.5l-89 .1z\"]\n};\nvar faTailwindCss = {\n  prefix: 'fab',\n  iconName: 'tailwind-css',\n  icon: [640, 512, [], \"e866\", \"M320 64c-85.3 0-138.7 42.7-160 128 32-42.7 69.3-58.7 112-48 24.3 6.1 41.7 23.8 61 43.3 31.4 31.8 67.7 68.7 147 68.7 85.3 0 138.7-42.7 160-128-32 42.7-69.3 58.7-112 48-24.3-6.1-41.7-23.8-61-43.3-31.4-31.8-67.7-68.7-147-68.7zM160 256c-85.3 0-138.7 42.7-160 128 32-42.7 69.3-58.7 112-48 24.3 6.1 41.7 23.8 61 43.3 31.4 31.8 67.7 68.7 147 68.7 85.3 0 138.7-42.7 160-128-32 42.7-69.3 58.7-112 48-24.3-6.1-41.7-23.8-61-43.3-31.4-31.8-67.7-68.7-147-68.7z\"]\n};\nvar icons = {\n  faSquareGithub: faSquareGithub,\n  faGithubSquare: faGithubSquare,\n  faThinkPeaks: faThinkPeaks,\n  faGoogleDrive: faGoogleDrive,\n  faAutoprefixer: faAutoprefixer,\n  faSquareViadeo: faSquareViadeo,\n  faViadeoSquare: faViadeoSquare,\n  faCpanel: faCpanel,\n  faMendeley: faMendeley,\n  faDraft2digital: faDraft2digital,\n  faReplyd: faReplyd,\n  faDevpost: faDevpost,\n  faEmpire: faEmpire,\n  faAccessibleIcon: faAccessibleIcon,\n  faQuora: faQuora,\n  faCcJcb: faCcJcb,\n  faFedora: faFedora,\n  faDuolingo: faDuolingo,\n  faFirstdraft: faFirstdraft,\n  faFreebsd: faFreebsd,\n  faOdysee: faOdysee,\n  faGgCircle: faGgCircle,\n  faCloudflare: faCloudflare,\n  faHackerrank: faHackerrank,\n  faSkyatlas: faSkyatlas,\n  faDeskpro: faDeskpro,\n  faResolving: faResolving,\n  faBlackberry: faBlackberry,\n  faStripeS: faStripeS,\n  faSquareBehance: faSquareBehance,\n  faBehanceSquare: faBehanceSquare,\n  faServicestack: faServicestack,\n  faRocketchat: faRocketchat,\n  faRebel: faRebel,\n  faSquareWebAwesome: faSquareWebAwesome,\n  faLinktree: faLinktree,\n  faSimplybuilt: faSimplybuilt,\n  faStubber: faStubber,\n  faApper: faApper,\n  faGoogleScholar: faGoogleScholar,\n  faYarn: faYarn,\n  faStackOverflow: faStackOverflow,\n  faBluetooth: faBluetooth,\n  faCreativeCommonsNcJp: faCreativeCommonsNcJp,\n  faReddit: faReddit,\n  faConnectdevelop: faConnectdevelop,\n  faResearchgate: faResearchgate,\n  faSignalMessenger: faSignalMessenger,\n  faXing: faXing,\n  faSquareJs: faSquareJs,\n  faJsSquare: faJsSquare,\n  faFonticons: faFonticons,\n  faUps: faUps,\n  faAmazonPay: faAmazonPay,\n  faPandora: faPandora,\n  faOpenid: faOpenid,\n  faVsco: faVsco,\n  faGlobaleaks: faGlobaleaks,\n  faVenmo: faVenmo,\n  faUbuntu: faUbuntu,\n  faViacoin: faViacoin,\n  faZhihu: faZhihu,\n  faYandex: faYandex,\n  faPixiv: faPixiv,\n  faOpenai: faOpenai,\n  faSith: faSith,\n  faJulia: faJulia,\n  faObsStudio: faObsStudio,\n  faNfcDirectional: faNfcDirectional,\n  faStorybook: faStorybook,\n  faCreativeCommonsBy: faCreativeCommonsBy,\n  faUmbraco: faUmbraco,\n  faHooli: faHooli,\n  faSquareGit: faSquareGit,\n  faGitSquare: faGitSquare,\n  faOdnoklassniki: faOdnoklassniki,\n  faDrupal: faDrupal,\n  faBloggerB: faBloggerB,\n  faInvision: faInvision,\n  faFacebookF: faFacebookF,\n  faCentos: faCentos,\n  faScaleway: faScaleway,\n  faCcAmazonPay: faCcAmazonPay,\n  faEbay: faEbay,\n  faContao: faContao,\n  faEllo: faEllo,\n  faSistrix: faSistrix,\n  faPeriscope: faPeriscope,\n  faExpeditedssl: faExpeditedssl,\n  faNapster: faNapster,\n  faDelicious: faDelicious,\n  faGuilded: faGuilded,\n  faObsidian: faObsidian,\n  faXbox: faXbox,\n  faUntappd: faUntappd,\n  faGooglePlusG: faGooglePlusG,\n  faGithubAlt: faGithubAlt,\n  faGetPocket: faGetPocket,\n  faGlide: faGlide,\n  faBity: faBity,\n  faWpexplorer: faWpexplorer,\n  faMegaport: faMegaport,\n  faLeetcode: faLeetcode,\n  faMdb: faMdb,\n  faPage4: faPage4,\n  faTheRedYeti: faTheRedYeti,\n  faJira: faJira,\n  faFedex: faFedex,\n  faEvernote: faEvernote,\n  faUsb: faUsb,\n  faAngrycreative: faAngrycreative,\n  faMizuni: faMizuni,\n  faItchIo: faItchIo,\n  faWindows: faWindows,\n  faDolibarr: faDolibarr,\n  faStumbleupon: faStumbleupon,\n  faGoogle: faGoogle,\n  faDiscord: faDiscord,\n  faHackerNews: faHackerNews,\n  faEleventy: faEleventy,\n  fa11ty: fa11ty,\n  faTeamspeak: faTeamspeak,\n  faSupple: faSupple,\n  faSquareTwitter: faSquareTwitter,\n  faTwitterSquare: faTwitterSquare,\n  faVim: faVim,\n  faFontAwesome: faFontAwesome,\n  faFontAwesomeFlag: faFontAwesomeFlag,\n  faFontAwesomeLogoFull: faFontAwesomeLogoFull,\n  faWirsindhandwerk: faWirsindhandwerk,\n  faWsh: faWsh,\n  faZoom: faZoom,\n  faSubstack: faSubstack,\n  faConfluence: faConfluence,\n  faDigg: faDigg,\n  faThreads: faThreads,\n  faWpressr: faWpressr,\n  faRendact: faRendact,\n  faYoast: faYoast,\n  faNimblr: faNimblr,\n  faPixelfed: faPixelfed,\n  faYahoo: faYahoo,\n  faBluesky: faBluesky,\n  faScribd: faScribd,\n  faCreativeCommonsPd: faCreativeCommonsPd,\n  faEarlybirds: faEarlybirds,\n  faSymfonycasts: faSymfonycasts,\n  faSquareOdnoklassniki: faSquareOdnoklassniki,\n  faOdnoklassnikiSquare: faOdnoklassnikiSquare,\n  faMarkdown: faMarkdown,\n  faTypo3: faTypo3,\n  faJoomla: faJoomla,\n  faWeixin: faWeixin,\n  faGrunt: faGrunt,\n  faSupportnow: faSupportnow,\n  faRockrms: faRockrms,\n  faUnsplash: faUnsplash,\n  faSquareInstagram: faSquareInstagram,\n  faInstagramSquare: faInstagramSquare,\n  faFirstOrderAlt: faFirstOrderAlt,\n  faFulcrum: faFulcrum,\n  faArchLinux: faArchLinux,\n  faFediverse: faFediverse,\n  faBraveReverse: faBraveReverse,\n  faAvianex: faAvianex,\n  faNs8: faNs8,\n  faSquarePinterest: faSquarePinterest,\n  faPinterestSquare: faPinterestSquare,\n  faBluetoothB: faBluetoothB,\n  faGripfire: faGripfire,\n  faSquareGooglePlus: faSquareGooglePlus,\n  faGooglePlusSquare: faGooglePlusSquare,\n  faGitee: faGitee,\n  faXmpp: faXmpp,\n  faAppStore: faAppStore,\n  faWix: faWix,\n  faIntercom: faIntercom,\n  faReacteurope: faReacteurope,\n  faWaze: faWaze,\n  faCreativeCommonsRemix: faCreativeCommonsRemix,\n  faBandcamp: faBandcamp,\n  faSquareWebAwesomeStroke: faSquareWebAwesomeStroke,\n  faVimeoV: faVimeoV,\n  faStrava: faStrava,\n  faUniregistry: faUniregistry,\n  faCcDinersClub: faCcDinersClub,\n  faKubernetes: faKubernetes,\n  faPinterest: faPinterest,\n  faAlgolia: faAlgolia,\n  faStackpath: faStackpath,\n  faOctopusDeploy: faOctopusDeploy,\n  faYammer: faYammer,\n  faModx: faModx,\n  faSquareThreads: faSquareThreads,\n  faOldRepublic: faOldRepublic,\n  faSuse: faSuse,\n  faAppStoreIos: faAppStoreIos,\n  faUltralyticsYolo: faUltralyticsYolo,\n  faSquareDribbble: faSquareDribbble,\n  faDribbbleSquare: faDribbbleSquare,\n  faUikit: faUikit,\n  faSuperpowers: faSuperpowers,\n  faYoutube: faYoutube,\n  faEmber: faEmber,\n  faBootstrap: faBootstrap,\n  faItunes: faItunes,\n  faSquareXing: faSquareXing,\n  faXingSquare: faXingSquare,\n  faCss3Alt: faCss3Alt,\n  faNextcloud: faNextcloud,\n  faSquarespace: faSquarespace,\n  faTrello: faTrello,\n  faViadeo: faViadeo,\n  faSearchengin: faSearchengin,\n  faUnrealEngine: faUnrealEngine,\n  faPaypal: faPaypal,\n  faSquareBluesky: faSquareBluesky,\n  faDAndDBeyond: faDAndDBeyond,\n  faMicrosoft: faMicrosoft,\n  faFly: faFly,\n  faCcStripe: faCcStripe,\n  faWordpressSimple: faWordpressSimple,\n  faSellsy: faSellsy,\n  faDashcube: faDashcube,\n  faGitter: faGitter,\n  faWolfPackBattalion: faWolfPackBattalion,\n  faLastfm: faLastfm,\n  faShopware: faShopware,\n  faBlogger: faBlogger,\n  faEdge: faEdge,\n  faIoxhost: faIoxhost,\n  faSchlix: faSchlix,\n  faDAndD: faDAndD,\n  faVuejs: faVuejs,\n  faMeta: faMeta,\n  faCreativeCommonsShare: faCreativeCommonsShare,\n  faStudiovinari: faStudiovinari,\n  faBitbucket: faBitbucket,\n  faVk: faVk,\n  faGithub: faGithub,\n  faCodiepie: faCodiepie,\n  faPiedPiper: faPiedPiper,\n  faRaspberryPi: faRaspberryPi,\n  faCss3: faCss3,\n  faHubspot: faHubspot,\n  faCmplid: faCmplid,\n  faDyalog: faDyalog,\n  faElementor: faElementor,\n  faFirstOrder: faFirstOrder,\n  faDribbble: faDribbble,\n  faLinkedin: faLinkedin,\n  faCcPaypal: faCcPaypal,\n  faDhl: faDhl,\n  faTex: faTex,\n  faClaude: faClaude,\n  faShopify: faShopify,\n  faSquareReddit: faSquareReddit,\n  faRedditSquare: faRedditSquare,\n  faCreativeCommonsNc: faCreativeCommonsNc,\n  faGalacticRepublic: faGalacticRepublic,\n  faFacebook: faFacebook,\n  faGitlab: faGitlab,\n  faQq: faQq,\n  faStripe: faStripe,\n  faDailymotion: faDailymotion,\n  faSteam: faSteam,\n  faVenmoV: faVenmoV,\n  faSnapchat: faSnapchat,\n  faSnapchatGhost: faSnapchatGhost,\n  faGalacticSenate: faGalacticSenate,\n  faPhoenixFramework: faPhoenixFramework,\n  faGit: faGit,\n  faOptinMonster: faOptinMonster,\n  faJenkins: faJenkins,\n  faSlideshare: faSlideshare,\n  faUber: faUber,\n  faDigitalOcean: faDigitalOcean,\n  faSoundcloud: faSoundcloud,\n  faSquareFigma: faSquareFigma,\n  faCreativeCommonsSa: faCreativeCommonsSa,\n  faChrome: faChrome,\n  faTradeFederation: faTradeFederation,\n  faVaadin: faVaadin,\n  faDeviantart: faDeviantart,\n  faMedium: faMedium,\n  faMediumM: faMediumM,\n  faYoutubeShorts: faYoutubeShorts,\n  faOpencart: faOpencart,\n  faMattermost: faMattermost,\n  faYCombinator: faYCombinator,\n  faLine: faLine,\n  faAmilia: faAmilia,\n  faAsymmetrik: faAsymmetrik,\n  faPhabricator: faPhabricator,\n  faBots: faBots,\n  faSquareBuildAwesomeStroke: faSquareBuildAwesomeStroke,\n  faVine: faVine,\n  faRor: faRor,\n  faMedrt: faMedrt,\n  faOsi: faOsi,\n  faGg: faGg,\n  faBuysellads: faBuysellads,\n  faGooglePlus: faGooglePlus,\n  faScreenpal: faScreenpal,\n  faBitcoin: faBitcoin,\n  faSwift: faSwift,\n  faFilesPinwheel: faFilesPinwheel,\n  faLaravel: faLaravel,\n  faWpforms: faWpforms,\n  faSpeakerDeck: faSpeakerDeck,\n  faFlickr: faFlickr,\n  faCcVisa: faCcVisa,\n  faUpwork: faUpwork,\n  faKakaoTalk: faKakaoTalk,\n  faFlutter: faFlutter,\n  faBuffer: faBuffer,\n  faGratipay: faGratipay,\n  faGooglePay: faGooglePay,\n  faApple: faApple,\n  faTumblr: faTumblr,\n  faPhoenixSquadron: faPhoenixSquadron,\n  faCentercode: faCentercode,\n  faDebian: faDebian,\n  faMastodon: faMastodon,\n  faSketch: faSketch,\n  faWebAwesome: faWebAwesome,\n  faSass: faSass,\n  faThreema: faThreema,\n  faSquareWhatsapp: faSquareWhatsapp,\n  faWhatsappSquare: faWhatsappSquare,\n  faSkype: faSkype,\n  faAngular: faAngular,\n  faCircleZulip: faCircleZulip,\n  faOpensuse: faOpensuse,\n  faDropbox: faDropbox,\n  faDeezer: faDeezer,\n  faCreativeCommonsSampling: faCreativeCommonsSampling,\n  faJediOrder: faJediOrder,\n  faRProject: faRProject,\n  faInstalod: faInstalod,\n  faCanadianMapleLeaf: faCanadianMapleLeaf,\n  faEthereum: faEthereum,\n  faHouzz: faHouzz,\n  faViber: faViber,\n  faKickstarter: faKickstarter,\n  faSquareKickstarter: faSquareKickstarter,\n  faSpotify: faSpotify,\n  faBuildAwesome: faBuildAwesome,\n  faLeanpub: faLeanpub,\n  faJava: faJava,\n  faNfcSymbol: faNfcSymbol,\n  faWodu: faWodu,\n  faSquareSteam: faSquareSteam,\n  faSteamSquare: faSteamSquare,\n  faCreativeCommonsNcEu: faCreativeCommonsNcEu,\n  faNpm: faNpm,\n  faCloudscale: faCloudscale,\n  faThemeco: faThemeco,\n  faGooglePlay: faGooglePlay,\n  faKorvue: faKorvue,\n  faW3c: faW3c,\n  faGrav: faGrav,\n  faAws: faAws,\n  faGlideG: faGlideG,\n  faXrp: faXrp,\n  faJsfiddle: faJsfiddle,\n  faKeybase: faKeybase,\n  faLumonDrop: faLumonDrop,\n  faForgejo: faForgejo,\n  faPostgresql: faPostgresql,\n  faWeebly: faWeebly,\n  faDocker: faDocker,\n  faMagento: faMagento,\n  faLetsEncrypt: faLetsEncrypt,\n  faTorBrowser: faTorBrowser,\n  faGitAlt: faGitAlt,\n  faFirefoxBrowser: faFirefoxBrowser,\n  faCloudsmith: faCloudsmith,\n  faWizardsOfTheCoast: faWizardsOfTheCoast,\n  faCreativeCommonsNd: faCreativeCommonsNd,\n  faUsps: faUsps,\n  faSquareLetterboxd: faSquareLetterboxd,\n  faMandalorian: faMandalorian,\n  faSlack: faSlack,\n  faSlackHash: faSlackHash,\n  faAngellist: faAngellist,\n  faAndroid: faAndroid,\n  faMeetup: faMeetup,\n  faFonticonsFi: faFonticonsFi,\n  faPalfed: faPalfed,\n  faWpbeginner: faWpbeginner,\n  faDiaspora: faDiaspora,\n  faProductHunt: faProductHunt,\n  faSquareUpwork: faSquareUpwork,\n  faCuttlefish: faCuttlefish,\n  faMedapps: faMedapps,\n  faPix: faPix,\n  faSquareTumblr: faSquareTumblr,\n  faTumblrSquare: faTumblrSquare,\n  faReact: faReact,\n  faHuggingFace: faHuggingFace,\n  faJxl: faJxl,\n  faSquareLinkedin: faSquareLinkedin,\n  faCss: faCss,\n  faHashnode: faHashnode,\n  faRedditAlien: faRedditAlien,\n  faTiktok: faTiktok,\n  faWordpress: faWordpress,\n  faIdeal: faIdeal,\n  faPiedPiperPp: faPiedPiperPp,\n  faUssunnah: faUssunnah,\n  faFortAwesomeAlt: faFortAwesomeAlt,\n  faBuromobelexperte: faBuromobelexperte,\n  faBilibili: faBilibili,\n  faNeos: faNeos,\n  faDev: faDev,\n  faMatrix: faMatrix,\n  faHotjar: faHotjar,\n  faDochub: faDochub,\n  faCodeberg: faCodeberg,\n  faVimeo: faVimeo,\n  faMaxcdn: faMaxcdn,\n  faSquareFontAwesomeStroke: faSquareFontAwesomeStroke,\n  faFontAwesomeAlt: faFontAwesomeAlt,\n  faSpeakap: faSpeakap,\n  faFantasyFlightGames: faFantasyFlightGames,\n  faLinux: faLinux,\n  faCottonBureau: faCottonBureau,\n  faGoogleWallet: faGoogleWallet,\n  faFoursquare: faFoursquare,\n  faShirtsinbulk: faShirtsinbulk,\n  faMintbit: faMintbit,\n  faZulip: faZulip,\n  faStaylinked: faStaylinked,\n  faWebflow: faWebflow,\n  faRenren: faRenren,\n  faKoFi: faKoFi,\n  faRev: faRev,\n  faKeycdn: faKeycdn,\n  faHireAHelper: faHireAHelper,\n  faSquareHackerNews: faSquareHackerNews,\n  faHackerNewsSquare: faHackerNewsSquare,\n  faCreativeCommonsPdAlt: faCreativeCommonsPdAlt,\n  faOrcid: faOrcid,\n  faBoardGameGeek: faBoardGameGeek,\n  faBgg: faBgg,\n  faVisualStudio: faVisualStudio,\n  faBehance: faBehance,\n  faMonero: faMonero,\n  faFigma: faFigma,\n  faInstagram: faInstagram,\n  faPerbyte: faPerbyte,\n  faSquareVimeo: faSquareVimeo,\n  faVimeoSquare: faVimeoSquare,\n  faPushed: faPushed,\n  faMixcloud: faMixcloud,\n  faYandexInternational: faYandexInternational,\n  faHive: faHive,\n  faCreativeCommonsZero: faCreativeCommonsZero,\n  faSquareSnapchat: faSquareSnapchat,\n  faSnapchatSquare: faSnapchatSquare,\n  faThemeisle: faThemeisle,\n  faDartLang: faDartLang,\n  faDeploydog: faDeploydog,\n  faFlipboard: faFlipboard,\n  faBuyNLarge: faBuyNLarge,\n  faWatchmanMonitoring: faWatchmanMonitoring,\n  faHips: faHips,\n  faCloudversify: faCloudversify,\n  faGoodreads: faGoodreads,\n  faTidal: faTidal,\n  faUnity: faUnity,\n  faTencentWeibo: faTencentWeibo,\n  faFreeCodeCamp: faFreeCodeCamp,\n  faXTwitter: faXTwitter,\n  faStickerMule: faStickerMule,\n  faTwitch: faTwitch,\n  faKickstarterK: faKickstarterK,\n  faCriticalRole: faCriticalRole,\n  faSteamSymbol: faSteamSymbol,\n  faMailchimp: faMailchimp,\n  faLumon: faLumon,\n  faNutritionix: faNutritionix,\n  faCreativeCommonsSamplingPlus: faCreativeCommonsSamplingPlus,\n  faRedhat: faRedhat,\n  faSquarePiedPiper: faSquarePiedPiper,\n  faPiedPiperSquare: faPiedPiperSquare,\n  faWhatsapp: faWhatsapp,\n  faImdb: faImdb,\n  faPython: faPython,\n  faCashApp: faCashApp,\n  faInternetArchive: faInternetArchive,\n  faPinterestP: faPinterestP,\n  faWhmcs: faWhmcs,\n  faJoget: faJoget,\n  faSquareYoutube: faSquareYoutube,\n  faYoutubeSquare: faYoutubeSquare,\n  faAtlassian: faAtlassian,\n  faPiedPiperHat: faPiedPiperHat,\n  faInternetExplorer: faInternetExplorer,\n  faAirbnb: faAirbnb,\n  faJs: faJs,\n  faQuinscape: faQuinscape,\n  faAdversal: faAdversal,\n  faCreativeCommons: faCreativeCommons,\n  faNotion: faNotion,\n  faCopilot: faCopilot,\n  faChromecast: faChromecast,\n  faUltralyticsHub: faUltralyticsHub,\n  faWikipediaW: faWikipediaW,\n  faSitrox: faSitrox,\n  faSquareGitlab: faSquareGitlab,\n  faGitlabSquare: faGitlabSquare,\n  faShoelace: faShoelace,\n  faOpenstreetmap: faOpenstreetmap,\n  faSellcast: faSellcast,\n  faMix: faMix,\n  faCcApplePay: faCcApplePay,\n  faSolana: faSolana,\n  faTypescript: faTypescript,\n  faBrave: faBrave,\n  faEtsy: faEtsy,\n  faRobloxCreatorStudio: faRobloxCreatorStudio,\n  faBtc: faBtc,\n  faAdn: faAdn,\n  faSquareXTwitter: faSquareXTwitter,\n  faSquareFontAwesome: faSquareFontAwesome,\n  faForumbee: faForumbee,\n  fa42Group: fa42Group,\n  faInnosoft: faInnosoft,\n  faStumbleuponCircle: faStumbleuponCircle,\n  faSymfony: faSymfony,\n  faSalesforce: faSalesforce,\n  faSourcetree: faSourcetree,\n  faLinkedinIn: faLinkedinIn,\n  faHtml5: faHtml5,\n  faRust: faRust,\n  faHornbill: faHornbill,\n  faPhp: faPhp,\n  faDisqus: faDisqus,\n  fa500px: fa500px,\n  faAffiliatetheme: faAffiliatetheme,\n  faRedRiver: faRedRiver,\n  faTwitter: faTwitter,\n  faFortAwesome: faFortAwesome,\n  faMixer: faMixer,\n  faLyft: faLyft,\n  faApplePay: faApplePay,\n  faArtstation: faArtstation,\n  faNodeJs: faNodeJs,\n  faUncharted: faUncharted,\n  faPlaystation: faPlaystation,\n  faMicroblog: faMicroblog,\n  faGitkraken: faGitkraken,\n  faTelegram: faTelegram,\n  faTelegramPlane: faTelegramPlane,\n  faUltralytics: faUltralytics,\n  faItunesNote: faItunesNote,\n  faLess: faLess,\n  faFirefox: faFirefox,\n  faKaggle: faKaggle,\n  faFacebookMessenger: faFacebookMessenger,\n  faAudible: faAudible,\n  faPatreon: faPatreon,\n  faVnv: faVnv,\n  faPagelines: faPagelines,\n  faAmazon: faAmazon,\n  faEnvira: faEnvira,\n  faLinode: faLinode,\n  faAccusoft: faAccusoft,\n  faErlang: faErlang,\n  faUnison: faUnison,\n  faCcDiscover: faCcDiscover,\n  faSafari: faSafari,\n  faSpaceAwesome: faSpaceAwesome,\n  faNode: faNode,\n  faCodepen: faCodepen,\n  faRavelry: faRavelry,\n  faAlipay: faAlipay,\n  faCcAmex: faCcAmex,\n  faPiedPiperAlt: faPiedPiperAlt,\n  faLetterboxd: faLetterboxd,\n  faOpera: faOpera,\n  faWeibo: faWeibo,\n  faXrpl: faXrpl,\n  faReadme: faReadme,\n  faGolang: faGolang,\n  faA11yProject: faA11yProject,\n  faStackExchange: faStackExchange,\n  faGulp: faGulp,\n  faYelp: faYelp,\n  faGofore: faGofore,\n  faTesla: faTesla,\n  faAviato: faAviato,\n  faPadlet: faPadlet,\n  faEdgeLegacy: faEdgeLegacy,\n  faSquareLastfm: faSquareLastfm,\n  faLastfmSquare: faLastfmSquare,\n  faGoodreadsG: faGoodreadsG,\n  faCcMastercard: faCcMastercard,\n  faDiscourse: faDiscourse,\n  faBlackTie: faBlackTie,\n  faSquareFacebook: faSquareFacebook,\n  faFacebookSquare: faFacebookSquare,\n  faBattleNet: faBattleNet,\n  faBimobject: faBimobject,\n  faSvelte: faSvelte,\n  faSquareDeskpro: faSquareDeskpro,\n  faTailwindCss: faTailwindCss\n};\n\nexport { icons as fab, prefix, faSquareGithub, faGithubSquare, faThinkPeaks, faGoogleDrive, faAutoprefixer, faSquareViadeo, faViadeoSquare, faCpanel, faMendeley, faDraft2digital, faReplyd, faDevpost, faEmpire, faAccessibleIcon, faQuora, faCcJcb, faFedora, faDuolingo, faFirstdraft, faFreebsd, faOdysee, faGgCircle, faCloudflare, faHackerrank, faSkyatlas, faDeskpro, faResolving, faBlackberry, faStripeS, faSquareBehance, faBehanceSquare, faServicestack, faRocketchat, faRebel, faSquareWebAwesome, faLinktree, faSimplybuilt, faStubber, faApper, faGoogleScholar, faYarn, faStackOverflow, faBluetooth, faCreativeCommonsNcJp, faReddit, faConnectdevelop, faResearchgate, faSignalMessenger, faXing, faSquareJs, faJsSquare, faFonticons, faUps, faAmazonPay, faPandora, faOpenid, faVsco, faGlobaleaks, faVenmo, faUbuntu, faViacoin, faZhihu, faYandex, faPixiv, faOpenai, faSith, faJulia, faObsStudio, faNfcDirectional, faStorybook, faCreativeCommonsBy, faUmbraco, faHooli, faSquareGit, faGitSquare, faOdnoklassniki, faDrupal, faBloggerB, faInvision, faFacebookF, faCentos, faScaleway, faCcAmazonPay, faEbay, faContao, faEllo, faSistrix, faPeriscope, faExpeditedssl, faNapster, faDelicious, faGuilded, faObsidian, faXbox, faUntappd, faGooglePlusG, faGithubAlt, faGetPocket, faGlide, faBity, faWpexplorer, faMegaport, faLeetcode, faMdb, faPage4, faTheRedYeti, faJira, faFedex, faEvernote, faUsb, faAngrycreative, faMizuni, faItchIo, faWindows, faDolibarr, faStumbleupon, faGoogle, faDiscord, faHackerNews, faEleventy, fa11ty, faTeamspeak, faSupple, faSquareTwitter, faTwitterSquare, faVim, faFontAwesome, faFontAwesomeFlag, faFontAwesomeLogoFull, faWirsindhandwerk, faWsh, faZoom, faSubstack, faConfluence, faDigg, faThreads, faWpressr, faRendact, faYoast, faNimblr, faPixelfed, faYahoo, faBluesky, faScribd, faCreativeCommonsPd, faEarlybirds, faSymfonycasts, faSquareOdnoklassniki, faOdnoklassnikiSquare, faMarkdown, faTypo3, faJoomla, faWeixin, faGrunt, faSupportnow, faRockrms, faUnsplash, faSquareInstagram, faInstagramSquare, faFirstOrderAlt, faFulcrum, faArchLinux, faFediverse, faBraveReverse, faAvianex, faNs8, faSquarePinterest, faPinterestSquare, faBluetoothB, faGripfire, faSquareGooglePlus, faGooglePlusSquare, faGitee, faXmpp, faAppStore, faWix, faIntercom, faReacteurope, faWaze, faCreativeCommonsRemix, faBandcamp, faSquareWebAwesomeStroke, faVimeoV, faStrava, faUniregistry, faCcDinersClub, faKubernetes, faPinterest, faAlgolia, faStackpath, faOctopusDeploy, faYammer, faModx, faSquareThreads, faOldRepublic, faSuse, faAppStoreIos, faUltralyticsYolo, faSquareDribbble, faDribbbleSquare, faUikit, faSuperpowers, faYoutube, faEmber, faBootstrap, faItunes, faSquareXing, faXingSquare, faCss3Alt, faNextcloud, faSquarespace, faTrello, faViadeo, faSearchengin, faUnrealEngine, faPaypal, faSquareBluesky, faDAndDBeyond, faMicrosoft, faFly, faCcStripe, faWordpressSimple, faSellsy, faDashcube, faGitter, faWolfPackBattalion, faLastfm, faShopware, faBlogger, faEdge, faIoxhost, faSchlix, faDAndD, faVuejs, faMeta, faCreativeCommonsShare, faStudiovinari, faBitbucket, faVk, faGithub, faCodiepie, faPiedPiper, faRaspberryPi, faCss3, faHubspot, faCmplid, faDyalog, faElementor, faFirstOrder, faDribbble, faLinkedin, faCcPaypal, faDhl, faTex, faClaude, faShopify, faSquareReddit, faRedditSquare, faCreativeCommonsNc, faGalacticRepublic, faFacebook, faGitlab, faQq, faStripe, faDailymotion, faSteam, faVenmoV, faSnapchat, faSnapchatGhost, faGalacticSenate, faPhoenixFramework, faGit, faOptinMonster, faJenkins, faSlideshare, faUber, faDigitalOcean, faSoundcloud, faSquareFigma, faCreativeCommonsSa, faChrome, faTradeFederation, faVaadin, faDeviantart, faMedium, faMediumM, faYoutubeShorts, faOpencart, faMattermost, faYCombinator, faLine, faAmilia, faAsymmetrik, faPhabricator, faBots, faSquareBuildAwesomeStroke, faVine, faRor, faMedrt, faOsi, faGg, faBuysellads, faGooglePlus, faScreenpal, faBitcoin, faSwift, faFilesPinwheel, faLaravel, faWpforms, faSpeakerDeck, faFlickr, faCcVisa, faUpwork, faKakaoTalk, faFlutter, faBuffer, faGratipay, faGooglePay, faApple, faTumblr, faPhoenixSquadron, faCentercode, faDebian, faMastodon, faSketch, faWebAwesome, faSass, faThreema, faSquareWhatsapp, faWhatsappSquare, faSkype, faAngular, faCircleZulip, faOpensuse, faDropbox, faDeezer, faCreativeCommonsSampling, faJediOrder, faRProject, faInstalod, faCanadianMapleLeaf, faEthereum, faHouzz, faViber, faKickstarter, faSquareKickstarter, faSpotify, faBuildAwesome, faLeanpub, faJava, faNfcSymbol, faWodu, faSquareSteam, faSteamSquare, faCreativeCommonsNcEu, faNpm, faCloudscale, faThemeco, faGooglePlay, faKorvue, faW3c, faGrav, faAws, faGlideG, faXrp, faJsfiddle, faKeybase, faLumonDrop, faForgejo, faPostgresql, faWeebly, faDocker, faMagento, faLetsEncrypt, faTorBrowser, faGitAlt, faFirefoxBrowser, faCloudsmith, faWizardsOfTheCoast, faCreativeCommonsNd, faUsps, faSquareLetterboxd, faMandalorian, faSlack, faSlackHash, faAngellist, faAndroid, faMeetup, faFonticonsFi, faPalfed, faWpbeginner, faDiaspora, faProductHunt, faSquareUpwork, faCuttlefish, faMedapps, faPix, faSquareTumblr, faTumblrSquare, faReact, faHuggingFace, faJxl, faSquareLinkedin, faCss, faHashnode, faRedditAlien, faTiktok, faWordpress, faIdeal, faPiedPiperPp, faUssunnah, faFortAwesomeAlt, faBuromobelexperte, faBilibili, faNeos, faDev, faMatrix, faHotjar, faDochub, faCodeberg, faVimeo, faMaxcdn, faSquareFontAwesomeStroke, faFontAwesomeAlt, faSpeakap, faFantasyFlightGames, faLinux, faCottonBureau, faGoogleWallet, faFoursquare, faShirtsinbulk, faMintbit, faZulip, faStaylinked, faWebflow, faRenren, faKoFi, faRev, faKeycdn, faHireAHelper, faSquareHackerNews, faHackerNewsSquare, faCreativeCommonsPdAlt, faOrcid, faBoardGameGeek, faBgg, faVisualStudio, faBehance, faMonero, faFigma, faInstagram, faPerbyte, faSquareVimeo, faVimeoSquare, faPushed, faMixcloud, faYandexInternational, faHive, faCreativeCommonsZero, faSquareSnapchat, faSnapchatSquare, faThemeisle, faDartLang, faDeploydog, faFlipboard, faBuyNLarge, faWatchmanMonitoring, faHips, faCloudversify, faGoodreads, faTidal, faUnity, faTencentWeibo, faFreeCodeCamp, faXTwitter, faStickerMule, faTwitch, faKickstarterK, faCriticalRole, faSteamSymbol, faMailchimp, faLumon, faNutritionix, faCreativeCommonsSamplingPlus, faRedhat, faSquarePiedPiper, faPiedPiperSquare, faWhatsapp, faImdb, faPython, faCashApp, faInternetArchive, faPinterestP, faWhmcs, faJoget, faSquareYoutube, faYoutubeSquare, faAtlassian, faPiedPiperHat, faInternetExplorer, faAirbnb, faJs, faQuinscape, faAdversal, faCreativeCommons, faNotion, faCopilot, faChromecast, faUltralyticsHub, faWikipediaW, faSitrox, faSquareGitlab, faGitlabSquare, faShoelace, faOpenstreetmap, faSellcast, faMix, faCcApplePay, faSolana, faTypescript, faBrave, faEtsy, faRobloxCreatorStudio, faBtc, faAdn, faSquareXTwitter, faSquareFontAwesome, faForumbee, fa42Group, faInnosoft, faStumbleuponCircle, faSymfony, faSalesforce, faSourcetree, faLinkedinIn, faHtml5, faRust, faHornbill, faPhp, faDisqus, fa500px, faAffiliatetheme, faRedRiver, faTwitter, faFortAwesome, faMixer, faLyft, faApplePay, faArtstation, faNodeJs, faUncharted, faPlaystation, faMicroblog, faGitkraken, faTelegram, faTelegramPlane, faUltralytics, faItunesNote, faLess, faFirefox, faKaggle, faFacebookMessenger, faAudible, faPatreon, faVnv, faPagelines, faAmazon, faEnvira, faLinode, faAccusoft, faErlang, faUnison, faCcDiscover, faSafari, faSpaceAwesome, faNode, faCodepen, faRavelry, faAlipay, faCcAmex, faPiedPiperAlt, faLetterboxd, faOpera, faWeibo, faXrpl, faReadme, faGolang, faA11yProject, faStackExchange, faGulp, faYelp, faGofore, faTesla, faAviato, faPadlet, faEdgeLegacy, faSquareLastfm, faLastfmSquare, faGoodreadsG, faCcMastercard, faDiscourse, faBlackTie, faSquareFacebook, faFacebookSquare, faBattleNet, faBimobject, faSvelte, faSquareDeskpro, faTailwindCss };\n","import { faRss } from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    faXTwitter,\n    faInstagram,\n    faThreads,\n    faLinkedin,\n    faGithub,\n    faBluesky,\n    faFacebook,\n} from \"@fortawesome/free-brands-svg-icons\"\n\nexport const PROD_URL = \"https://ourworldindata.org\"\n\nexport const DEFAULT_LOCAL_BAKE_DIR = \"localBake\"\n\nexport const SMALL_BREAKPOINT_MEDIA_QUERY = \"(width <= 768px)\"\nexport const MEDIUM_BREAKPOINT_MEDIA_QUERY = \"(width <= 960px)\"\n\nexport const TOUCH_DEVICE_MEDIA_QUERY =\n    \"(hover: none), (pointer: coarse), (pointer: none)\"\n\n// <details> elements sharing a name form an exclusive accordion: opening one\n// closes the others. Shared by all collapsible sections of the mobile site\n// menu (topic areas, Resources, About). In browsers without support\n// (Chrome <120, Safari <17.2, Firefox <130), sections still expand/collapse\n// but don't auto-close each other.\nexport const MOBILE_MENU_DETAILS_NAME = \"site-mobile-menu\"\n\nexport const DATA_INSIGHTS_ATOM_FEED_NAME = \"atom-data-insights.xml\"\n\nexport const DEFAULT_ATOM_FEED_PROPS = {\n    title: \"Atom feed for Our World in Data\",\n    href: \"/atom.xml\",\n}\n\nexport const DATA_INSIGHT_ATOM_FEED_PROPS = {\n    title: \"Atom feed for Data Insights\",\n    href: `https://ourworldindata.org/${DATA_INSIGHTS_ATOM_FEED_NAME}`,\n}\n\nexport const DEFAULT_TOMBSTONE_REASON =\n    \"Our World in Data is designed to be an evergreen publication. This \" +\n    \"means that when a page cannot be updated due to outdated data or \" +\n    \"missing information, we prefer to remove it rather than present \" +\n    \"incomplete or inaccurate research and data to our readers.\"\n\nexport const SOCIALS = [\n    {\n        title: \"X\",\n        url: \"https://x.com/ourworldindata\",\n        icon: faXTwitter,\n    },\n    {\n        title: \"Instagram\",\n        url: \"https://www.instagram.com/ourworldindata/\",\n        icon: faInstagram,\n    },\n    {\n        title: \"Threads\",\n        url: \"https://www.threads.net/@ourworldindata\",\n        icon: faThreads,\n    },\n    {\n        title: \"Facebook\",\n        url: \"https://facebook.com/ourworldindata\",\n        icon: faFacebook,\n    },\n    {\n        title: \"LinkedIn\",\n        url: \"https://www.linkedin.com/company/ourworldindata\",\n        icon: faLinkedin,\n    },\n    {\n        title: \"Bluesky\",\n        url: \"https://bsky.app/profile/ourworldindata.org\",\n        icon: faBluesky,\n    },\n    {\n        title: \"GitHub\",\n        url: \"https://github.com/owid\",\n        icon: faGithub,\n    },\n]\n\nexport const RSS_FEEDS = [\n    {\n        title: \"Research & Writing\",\n        url: \"/atom.xml\",\n        icon: faRss,\n    },\n    {\n        title: \"Data Insights\",\n        url: `/${DATA_INSIGHTS_ATOM_FEED_NAME}`,\n        icon: faRss,\n    },\n]\n\nexport enum Menu {\n    Topics = \"topics\",\n    Resources = \"resources\",\n    About = \"about\",\n    Subscribe = \"subscribe\",\n    Search = \"search\",\n}\n\nexport const ABOUT_LINKS = [\n    { title: \"About us\", url: \"/about\" },\n    { title: \"Organization\", url: \"/organization\" },\n    { title: \"Funding\", url: \"/funding\" },\n    { title: \"Team\", url: \"/team\" },\n    { title: \"Jobs\", url: \"/jobs\" },\n    { title: \"FAQs\", url: \"/faqs\" },\n]\n\nexport enum GalleryArrowDirection {\n    prev = \"prev\",\n    next = \"next\",\n}\n","import { faArrowLeftLong } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { GalleryArrowDirection } from \"../SiteConstants.js\"\n\nexport const GalleryArrow = ({\n    disabled,\n    onClick,\n    direction,\n}: {\n    disabled: boolean\n    onClick: VoidFunction\n    direction: GalleryArrowDirection\n}) => {\n    const flip =\n        direction === GalleryArrowDirection.next ? \"horizontal\" : undefined\n    const classes = [\"gallery-arrow\", direction]\n\n    return (\n        <button\n            aria-label={`Go to ${\n                direction === GalleryArrowDirection.next ? \"next\" : \"previous\"\n            } slide`}\n            disabled={disabled}\n            onClick={onClick}\n            className={classes.join(\" \")}\n        >\n            <FontAwesomeIcon icon={faArrowLeftLong} flip={flip} />\n        </button>\n    )\n}\n","import {\n    DEFAULT_GRAPHER_HEIGHT,\n    DEFAULT_GRAPHER_WIDTH,\n    generateGrapherImageSrcSet,\n} from \"@ourworldindata/grapher\"\nimport { GRAPHER_DYNAMIC_THUMBNAIL_URL } from \"../settings/clientSettings.mjs\"\nimport { Url } from \"@ourworldindata/utils\"\n\nfunction GrapherImageSource({\n    defaultSrc,\n    suppressHydrationWarning,\n}: {\n    defaultSrc: string\n    suppressHydrationWarning: boolean | undefined\n}) {\n    const srcSet = generateGrapherImageSrcSet(defaultSrc)\n    const sizes = `(max-width: 850px) 100vw, 850px`\n\n    return (\n        <source\n            id=\"grapher-preview-source\"\n            srcSet={srcSet}\n            sizes={sizes}\n            suppressHydrationWarning={suppressHydrationWarning}\n        />\n    )\n}\n\nexport default function GrapherImage(props: {\n    className?: string\n    url: string\n    alt?: string\n    noFormatting?: boolean\n    enablePopulatingUrlParams?: boolean\n}): React.ReactElement\nexport default function GrapherImage(props: {\n    className?: string\n    slug: string\n    queryString?: string\n    alt?: string\n    noFormatting?: boolean\n    enablePopulatingUrlParams?: boolean\n}): React.ReactElement\nexport default function GrapherImage(props: {\n    className?: string\n    url?: string\n    slug?: string\n    queryString?: string\n    alt?: string\n    noFormatting?: boolean\n    enablePopulatingUrlParams?: boolean\n}) {\n    if (!GRAPHER_DYNAMIC_THUMBNAIL_URL) return null\n\n    let slug: string\n    let queryString: string\n    if (props.url) {\n        const url = Url.fromURL(props.url)\n        slug = url.slug!\n        queryString = url.queryStr\n    } else {\n        slug = props.slug!\n        queryString = props.queryString ?? \"\"\n    }\n\n    const defaultSrc = `${GRAPHER_DYNAMIC_THUMBNAIL_URL}/${slug}.png${queryString}`\n    return (\n        <picture\n            className={props.className}\n            // This tells our Cloudflare functions to replace the src with the dynamic thumbnail URL, including URL params like `?time=2020`.\n            // Enabling this option only makes sense if this is the _main_ chart on a _standalone_ grapher/data page - it will pass on the URL params from the page to the thumbnail.\n            data-owid-populate-url-params={props.enablePopulatingUrlParams}\n        >\n            <GrapherImageSource\n                defaultSrc={defaultSrc}\n                suppressHydrationWarning={props.enablePopulatingUrlParams}\n            />\n            <img\n                className=\"GrapherImage\"\n                src={defaultSrc}\n                alt={props.alt}\n                width={DEFAULT_GRAPHER_WIDTH}\n                height={DEFAULT_GRAPHER_HEIGHT}\n                loading=\"lazy\"\n                data-no-img-formatting={props.noFormatting}\n                // Suppresses a (inevitable) hydration mismatch warning when the image is rendered on the server with a dynamic URL incl. query\n                // params, and the client then replaces it with \"just\" a normal URL.\n                suppressHydrationWarning={props.enablePopulatingUrlParams}\n            />\n        </picture>\n    )\n}\n","import { BasicChartInformation } from \"@ourworldindata/utils\"\nimport * as React from \"react\"\nimport { BAKED_BASE_URL } from \"../../settings/clientSettings.mjs\"\nimport GrapherImage from \"../GrapherImage.js\"\n\nexport const AllChartsListItem = ({\n    chart,\n    onClick,\n    isActive,\n}: {\n    chart: BasicChartInformation\n    onClick: (e: React.MouseEvent) => void\n    isActive: boolean\n}) => {\n    return (\n        <li key={chart.slug} className={isActive ? \"active\" : \"\"}>\n            <a\n                href={`${BAKED_BASE_URL}/grapher/${chart.slug}`}\n                onClick={onClick}\n            >\n                <GrapherImage\n                    slug={chart.slug}\n                    alt={`A thumbnail of the \"${chart.title}\" chart`}\n                    noFormatting\n                />\n                <span>{chart.title}</span>\n            </a>\n            {chart.variantName ? (\n                <span className=\"variantName\">{chart.variantName}</span>\n            ) : null}\n        </li>\n    )\n}\n","import { useMemo, useRef } from \"react\"\nimport {\n    FetchingGrapher,\n    GrapherProgrammaticInterface,\n    useElementBounds,\n} from \"@ourworldindata/grapher\"\nimport {\n    ADMIN_BASE_URL,\n    GRAPHER_DYNAMIC_CONFIG_URL,\n    BAKED_GRAPHER_URL,\n    DATA_API_URL,\n    CATALOG_URL,\n} from \"../settings/clientSettings.mjs\"\n\nexport interface GrapherFigureViewProps {\n    slug?: string\n    configUrl?: string\n    config?: Partial<GrapherProgrammaticInterface>\n    useProvidedConfigOnly?: boolean // If true, will not fetch config from URL\n    queryStr?: string\n    isEmbeddedInAnOwidPage: boolean\n    isEmbeddedInADataPage: boolean\n    isPreviewing?: boolean\n}\n\nexport function GrapherFigureView(\n    props: GrapherFigureViewProps\n): React.ReactElement {\n    const slug = props.slug\n\n    if (!slug && !props.configUrl) {\n        console.error(\n            \"GrapherFigureView requires either a slug or a configUrl to be provided.\"\n        )\n    }\n\n    const base = useRef<HTMLDivElement>(null)\n    // Wait for the figure to be measured before mounting Grapher. Otherwise,\n    // embedded charts briefly render at DEFAULT_GRAPHER_BOUNDS (850px wide)\n    // before ResizeObserver reports the actual container size.\n    const bounds = useElementBounds(base, null, {\n        preserveLastNonZeroBounds: true,\n    })\n\n    const config: GrapherProgrammaticInterface = useMemo(() => {\n        return {\n            enableKeyboardShortcuts: !props.isEmbeddedInAnOwidPage,\n            ...props.config,\n            bakedGrapherURL: BAKED_GRAPHER_URL,\n            adminBaseUrl: ADMIN_BASE_URL,\n            isEmbeddedInAnOwidPage: props.isEmbeddedInAnOwidPage,\n            isEmbeddedInADataPage: props.isEmbeddedInADataPage,\n        }\n    }, [\n        props.config,\n        props.isEmbeddedInAnOwidPage,\n        props.isEmbeddedInADataPage,\n    ])\n\n    if (props.configUrl && props.useProvidedConfigOnly) {\n        throw new Error(\n            \"useProvidedConfigOnly is true, but configUrl has been provided. This will not work as expected.\"\n        )\n    }\n\n    const slugConfigUrl = slug\n        ? `${GRAPHER_DYNAMIC_CONFIG_URL}/${slug}.config.json${props.isPreviewing ? \"?nocache\" : \"\"}`\n        : undefined\n\n    const configUrl = !props.useProvidedConfigOnly\n        ? (props.configUrl ?? slugConfigUrl)\n        : undefined\n\n    return (\n        <figure className=\"chart grapher-component\" ref={base}>\n            {bounds && (\n                <FetchingGrapher\n                    // Remount when switching between chart configs (e.g. related charts)\n                    // so we don't briefly render the previous GrapherState while\n                    // fetching the new config/data.\n                    key={configUrl ?? slug}\n                    config={config}\n                    configUrl={configUrl}\n                    dataApiUrl={DATA_API_URL}\n                    catalogUrl={CATALOG_URL}\n                    archiveContext={config.archiveContext}\n                    queryStr={props.queryStr}\n                    externalBounds={bounds}\n                    noCache={props.isPreviewing}\n                />\n            )}\n        </figure>\n    )\n}\n","import { HIDE_IF_JS_ENABLED_CLASSNAME } from \"@ourworldindata/types\"\nimport { GrapherFigureView } from \"./GrapherFigureView.js\"\nimport cx from \"clsx\"\nimport GrapherImage from \"./GrapherImage.js\"\nimport { useIntersectionObserver, useIsClient } from \"usehooks-ts\"\nimport { GrapherProgrammaticInterface } from \"@ourworldindata/grapher\"\n\nexport interface GrapherWithFallbackProps {\n    slug?: string\n    configUrl?: string // Optional, if provided will override slug\n    useProvidedConfigOnly?: boolean // If true, will not fetch config from URL\n    className?: string\n    id?: string\n    enablePopulatingUrlParams?: boolean\n    config: Partial<GrapherProgrammaticInterface>\n    queryStr?: string\n    isEmbeddedInAnOwidPage: boolean\n    isEmbeddedInADataPage: boolean\n    isPreviewing?: boolean\n}\n\nexport function GrapherWithFallback(props: GrapherWithFallbackProps) {\n    const { slug, className, id, config, queryStr, isPreviewing } = props\n\n    if (!slug && !props.configUrl) {\n        console.error(\n            \"GrapherWithFallback requires either a slug or a configUrl to be provided.\"\n        )\n    }\n\n    const isClient = useIsClient()\n    const { ref, isIntersecting: shouldLoadGrapher } = useIntersectionObserver({\n        rootMargin: \"400px\",\n        freezeOnceVisible: true,\n    })\n\n    return (\n        <div\n            className={cx(\n                \"GrapherWithFallback\",\n                \"full-width-on-mobile\",\n                className\n            )}\n            id={id}\n            ref={ref}\n        >\n            {isClient && shouldLoadGrapher ? (\n                <GrapherFigureView\n                    slug={slug}\n                    configUrl={props.configUrl}\n                    config={config}\n                    useProvidedConfigOnly={props.useProvidedConfigOnly}\n                    queryStr={queryStr}\n                    isEmbeddedInAnOwidPage={props.isEmbeddedInAnOwidPage}\n                    isEmbeddedInADataPage={props.isEmbeddedInADataPage}\n                    isPreviewing={isPreviewing}\n                />\n            ) : (\n                <figure\n                    className={cx(\n                        \"chart\",\n                        \"GrapherWithFallback__fallback\",\n                        className\n                    )}\n                    aria-hidden={isClient}\n                >\n                    {!isClient &&\n                        (props.configUrl ? (\n                            <GrapherImage\n                                className={HIDE_IF_JS_ENABLED_CLASSNAME}\n                                url={props.configUrl}\n                                enablePopulatingUrlParams={\n                                    props.enablePopulatingUrlParams\n                                }\n                            />\n                        ) : (\n                            <GrapherImage\n                                className={HIDE_IF_JS_ENABLED_CLASSNAME}\n                                slug={slug!}\n                                queryString={queryStr}\n                                enablePopulatingUrlParams={\n                                    props.enablePopulatingUrlParams\n                                }\n                            />\n                        ))}\n                </figure>\n            )}\n        </div>\n    )\n}\n","import { createContext, useContext } from \"react\"\nimport {\n    ArchiveContext,\n    OwidGdocType,\n    RefDictionary,\n} from \"@ourworldindata/types\"\n\nexport const DocumentContext = createContext<{\n    isPreviewing: boolean\n    archiveContext?: ArchiveContext\n    footnotes?: RefDictionary\n    gdocType?: OwidGdocType\n}>({\n    isPreviewing: false,\n})\n\nexport function useDocumentContext() {\n    return useContext(DocumentContext)\n}\n\n/** The URL of the versions file, on live pages and on archive pages */\nexport function useVersionsFileUrl(): string | undefined {\n    const { archiveContext } = useDocumentContext()\n    return (\n        archiveContext?.versionsFileUrl ??\n        (archiveContext?.type === \"archive-page\"\n            ? archiveContext.archiveNavigation.versionsFileUrl\n            : undefined)\n    )\n}\n","import * as _ from \"lodash-es\"\nimport { useState } from \"react\"\nimport * as React from \"react\"\nimport { RelatedChart } from \"@ourworldindata/utils\"\nimport { GRAPHER_PREVIEW_CLASS } from \"@ourworldindata/types\"\nimport { GalleryArrow } from \"./GalleryArrow.js\"\nimport { GalleryArrowDirection } from \"../SiteConstants.js\"\nimport { AllChartsListItem } from \"./AllChartsListItem.js\"\nimport { GrapherWithFallback } from \"../GrapherWithFallback.js\"\nimport { useDocumentContext } from \"../gdocs/DocumentContext.js\"\n\nexport const RELATED_CHARTS_CLASS_NAME = \"related-charts\"\n\nexport const RelatedCharts = ({\n    charts,\n    showKeyChartsOnly = false,\n}: {\n    charts: RelatedChart[]\n    showKeyChartsOnly?: boolean\n}) => {\n    const [activeChartIdx, setActiveChartIdx] = useState(0)\n    const { isPreviewing } = useDocumentContext()\n\n    const chartsToShow = showKeyChartsOnly\n        ? charts.filter((chart) => !!chart.keyChartLevel)\n        : charts\n\n    const sortedCharts = _.orderBy(\n        chartsToShow,\n        (chart) => chart.keyChartLevel,\n        \"desc\"\n    )\n\n    const isFirstSlideActive = activeChartIdx === 0\n    const isLastSlideActive = activeChartIdx === sortedCharts.length - 1\n    const activeChart = sortedCharts[activeChartIdx]\n    const activeChartSlug = activeChart?.slug\n\n    const onClickItem = (event: React.MouseEvent, idx: number) => {\n        // Allow opening charts in new tab/window with ⌘+CLICK\n        if (!event.metaKey && !event.shiftKey && !event.ctrlKey) {\n            event.preventDefault()\n            setActiveChartIdx(idx)\n        }\n    }\n\n    const figure = (\n        <GrapherWithFallback\n            slug={activeChartSlug}\n            className={GRAPHER_PREVIEW_CLASS}\n            id={`related-chart-${activeChartIdx}`}\n            enablePopulatingUrlParams={true}\n            isEmbeddedInAnOwidPage={true}\n            isEmbeddedInADataPage={false}\n            config={{\n                archiveContext: activeChart.archiveContext,\n                enableKeyboardShortcuts: false,\n            }}\n            isPreviewing={isPreviewing}\n        />\n    )\n\n    const singleChartView = (\n        <div className={RELATED_CHARTS_CLASS_NAME}>\n            <div className=\"grid grid-cols-12\">\n                <div className=\"related-charts__chart span-cols-7 span-md-cols-12\">\n                    {figure}\n                </div>\n            </div>\n        </div>\n    )\n\n    const multipleChartsView = (\n        <div className={RELATED_CHARTS_CLASS_NAME}>\n            <div className=\"grid grid-cols-12\">\n                <div className=\"related-charts__thumbnails span-cols-5 span-md-cols-12\">\n                    <ul className=\"related-charts__list\">\n                        {sortedCharts.map((chart, idx) => (\n                            <AllChartsListItem\n                                chart={chart}\n                                key={chart.slug}\n                                onClick={(e) => onClickItem(e, idx)}\n                                isActive={idx === activeChartIdx}\n                            />\n                        ))}\n                    </ul>\n                </div>\n                <div className=\"related-charts__chart span-cols-7 span-md-cols-12\">\n                    <div className=\"related-charts__figure\">{figure}</div>\n                    <div className=\"gallery-navigation\">\n                        <GalleryArrow\n                            disabled={isFirstSlideActive}\n                            onClick={() =>\n                                setActiveChartIdx(activeChartIdx - 1)\n                            }\n                            direction={GalleryArrowDirection.prev}\n                        ></GalleryArrow>\n                        <div className=\"gallery-pagination\">\n                            {`Chart ${activeChartIdx + 1} of ${\n                                sortedCharts.length\n                            }`}\n                        </div>\n                        <GalleryArrow\n                            disabled={isLastSlideActive}\n                            onClick={() =>\n                                setActiveChartIdx(activeChartIdx + 1)\n                            }\n                            direction={GalleryArrowDirection.next}\n                        ></GalleryArrow>\n                    </div>\n                </div>\n            </div>\n        </div>\n    )\n\n    return charts.length === 1 ? singleChartView : multipleChartsView\n}\n","// src/subscribable.ts\nvar Subscribable = class {\n  constructor() {\n    this.listeners = /* @__PURE__ */ new Set();\n    this.subscribe = this.subscribe.bind(this);\n  }\n  subscribe(listener) {\n    this.listeners.add(listener);\n    this.onSubscribe();\n    return () => {\n      this.listeners.delete(listener);\n      this.onUnsubscribe();\n    };\n  }\n  hasListeners() {\n    return this.listeners.size > 0;\n  }\n  onSubscribe() {\n  }\n  onUnsubscribe() {\n  }\n};\nexport {\n  Subscribable\n};\n//# sourceMappingURL=subscribable.js.map","// src/timeoutManager.ts\nvar defaultTimeoutProvider = {\n  // We need the wrapper function syntax below instead of direct references to\n  // global setTimeout etc.\n  //\n  // BAD: `setTimeout: setTimeout`\n  // GOOD: `setTimeout: (cb, delay) => setTimeout(cb, delay)`\n  //\n  // If we use direct references here, then anything that wants to spy on or\n  // replace the global setTimeout (like tests) won't work since we'll already\n  // have a hard reference to the original implementation at the time when this\n  // file was imported.\n  setTimeout: (callback, delay) => setTimeout(callback, delay),\n  clearTimeout: (timeoutId) => clearTimeout(timeoutId),\n  setInterval: (callback, delay) => setInterval(callback, delay),\n  clearInterval: (intervalId) => clearInterval(intervalId)\n};\nvar TimeoutManager = class {\n  // We cannot have TimeoutManager<T> as we must instantiate it with a concrete\n  // type at app boot; and if we leave that type, then any new timer provider\n  // would need to support ReturnType<typeof setTimeout>, which is infeasible.\n  //\n  // We settle for type safety for the TimeoutProvider type, and accept that\n  // this class is unsafe internally to allow for extension.\n  #provider = defaultTimeoutProvider;\n  #providerCalled = false;\n  setTimeoutProvider(provider) {\n    if (process.env.NODE_ENV !== \"production\") {\n      if (this.#providerCalled && provider !== this.#provider) {\n        console.error(\n          `[timeoutManager]: Switching provider after calls to previous provider might result in unexpected behavior.`,\n          { previous: this.#provider, provider }\n        );\n      }\n    }\n    this.#provider = provider;\n    if (process.env.NODE_ENV !== \"production\") {\n      this.#providerCalled = false;\n    }\n  }\n  setTimeout(callback, delay) {\n    if (process.env.NODE_ENV !== \"production\") {\n      this.#providerCalled = true;\n    }\n    return this.#provider.setTimeout(callback, delay);\n  }\n  clearTimeout(timeoutId) {\n    this.#provider.clearTimeout(timeoutId);\n  }\n  setInterval(callback, delay) {\n    if (process.env.NODE_ENV !== \"production\") {\n      this.#providerCalled = true;\n    }\n    return this.#provider.setInterval(callback, delay);\n  }\n  clearInterval(intervalId) {\n    this.#provider.clearInterval(intervalId);\n  }\n};\nvar timeoutManager = new TimeoutManager();\nfunction systemSetTimeoutZero(callback) {\n  setTimeout(callback, 0);\n}\nexport {\n  TimeoutManager,\n  defaultTimeoutProvider,\n  systemSetTimeoutZero,\n  timeoutManager\n};\n//# sourceMappingURL=timeoutManager.js.map","// src/utils.ts\nimport { timeoutManager } from \"./timeoutManager.js\";\nvar isServer = typeof window === \"undefined\" || \"Deno\" in globalThis;\nfunction noop() {\n}\nfunction functionalUpdate(updater, input) {\n  return typeof updater === \"function\" ? updater(input) : updater;\n}\nfunction isValidTimeout(value) {\n  return typeof value === \"number\" && value >= 0 && value !== Infinity;\n}\nfunction timeUntilStale(updatedAt, staleTime) {\n  return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0);\n}\nfunction resolveStaleTime(staleTime, query) {\n  return typeof staleTime === \"function\" ? staleTime(query) : staleTime;\n}\nfunction resolveEnabled(enabled, query) {\n  return typeof enabled === \"function\" ? enabled(query) : enabled;\n}\nfunction matchQuery(filters, query) {\n  const {\n    type = \"all\",\n    exact,\n    fetchStatus,\n    predicate,\n    queryKey,\n    stale\n  } = filters;\n  if (queryKey) {\n    if (exact) {\n      if (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) {\n        return false;\n      }\n    } else if (!partialMatchKey(query.queryKey, queryKey)) {\n      return false;\n    }\n  }\n  if (type !== \"all\") {\n    const isActive = query.isActive();\n    if (type === \"active\" && !isActive) {\n      return false;\n    }\n    if (type === \"inactive\" && isActive) {\n      return false;\n    }\n  }\n  if (typeof stale === \"boolean\" && query.isStale() !== stale) {\n    return false;\n  }\n  if (fetchStatus && fetchStatus !== query.state.fetchStatus) {\n    return false;\n  }\n  if (predicate && !predicate(query)) {\n    return false;\n  }\n  return true;\n}\nfunction matchMutation(filters, mutation) {\n  const { exact, status, predicate, mutationKey } = filters;\n  if (mutationKey) {\n    if (!mutation.options.mutationKey) {\n      return false;\n    }\n    if (exact) {\n      if (hashKey(mutation.options.mutationKey) !== hashKey(mutationKey)) {\n        return false;\n      }\n    } else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) {\n      return false;\n    }\n  }\n  if (status && mutation.state.status !== status) {\n    return false;\n  }\n  if (predicate && !predicate(mutation)) {\n    return false;\n  }\n  return true;\n}\nfunction hashQueryKeyByOptions(queryKey, options) {\n  const hashFn = options?.queryKeyHashFn || hashKey;\n  return hashFn(queryKey);\n}\nfunction hashKey(queryKey) {\n  return JSON.stringify(\n    queryKey,\n    (_, val) => isPlainObject(val) ? Object.keys(val).sort().reduce((result, key) => {\n      result[key] = val[key];\n      return result;\n    }, {}) : val\n  );\n}\nfunction partialMatchKey(a, b) {\n  if (a === b) {\n    return true;\n  }\n  if (typeof a !== typeof b) {\n    return false;\n  }\n  if (a && b && typeof a === \"object\" && typeof b === \"object\") {\n    return Object.keys(b).every((key) => partialMatchKey(a[key], b[key]));\n  }\n  return false;\n}\nvar hasOwn = Object.prototype.hasOwnProperty;\nfunction replaceEqualDeep(a, b) {\n  if (a === b) {\n    return a;\n  }\n  const array = isPlainArray(a) && isPlainArray(b);\n  if (!array && !(isPlainObject(a) && isPlainObject(b))) return b;\n  const aItems = array ? a : Object.keys(a);\n  const aSize = aItems.length;\n  const bItems = array ? b : Object.keys(b);\n  const bSize = bItems.length;\n  const copy = array ? new Array(bSize) : {};\n  let equalItems = 0;\n  for (let i = 0; i < bSize; i++) {\n    const key = array ? i : bItems[i];\n    const aItem = a[key];\n    const bItem = b[key];\n    if (aItem === bItem) {\n      copy[key] = aItem;\n      if (array ? i < aSize : hasOwn.call(a, key)) equalItems++;\n      continue;\n    }\n    if (aItem === null || bItem === null || typeof aItem !== \"object\" || typeof bItem !== \"object\") {\n      copy[key] = bItem;\n      continue;\n    }\n    const v = replaceEqualDeep(aItem, bItem);\n    copy[key] = v;\n    if (v === aItem) equalItems++;\n  }\n  return aSize === bSize && equalItems === aSize ? a : copy;\n}\nfunction shallowEqualObjects(a, b) {\n  if (!b || Object.keys(a).length !== Object.keys(b).length) {\n    return false;\n  }\n  for (const key in a) {\n    if (a[key] !== b[key]) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction isPlainArray(value) {\n  return Array.isArray(value) && value.length === Object.keys(value).length;\n}\nfunction isPlainObject(o) {\n  if (!hasObjectPrototype(o)) {\n    return false;\n  }\n  const ctor = o.constructor;\n  if (ctor === void 0) {\n    return true;\n  }\n  const prot = ctor.prototype;\n  if (!hasObjectPrototype(prot)) {\n    return false;\n  }\n  if (!prot.hasOwnProperty(\"isPrototypeOf\")) {\n    return false;\n  }\n  if (Object.getPrototypeOf(o) !== Object.prototype) {\n    return false;\n  }\n  return true;\n}\nfunction hasObjectPrototype(o) {\n  return Object.prototype.toString.call(o) === \"[object Object]\";\n}\nfunction sleep(timeout) {\n  return new Promise((resolve) => {\n    timeoutManager.setTimeout(resolve, timeout);\n  });\n}\nfunction replaceData(prevData, data, options) {\n  if (typeof options.structuralSharing === \"function\") {\n    return options.structuralSharing(prevData, data);\n  } else if (options.structuralSharing !== false) {\n    if (process.env.NODE_ENV !== \"production\") {\n      try {\n        return replaceEqualDeep(prevData, data);\n      } catch (error) {\n        console.error(\n          `Structural sharing requires data to be JSON serializable. To fix this, turn off structuralSharing or return JSON-serializable data from your queryFn. [${options.queryHash}]: ${error}`\n        );\n        throw error;\n      }\n    }\n    return replaceEqualDeep(prevData, data);\n  }\n  return data;\n}\nfunction keepPreviousData(previousData) {\n  return previousData;\n}\nfunction addToEnd(items, item, max = 0) {\n  const newItems = [...items, item];\n  return max && newItems.length > max ? newItems.slice(1) : newItems;\n}\nfunction addToStart(items, item, max = 0) {\n  const newItems = [item, ...items];\n  return max && newItems.length > max ? newItems.slice(0, -1) : newItems;\n}\nvar skipToken = Symbol();\nfunction ensureQueryFn(options, fetchOptions) {\n  if (process.env.NODE_ENV !== \"production\") {\n    if (options.queryFn === skipToken) {\n      console.error(\n        `Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${options.queryHash}'`\n      );\n    }\n  }\n  if (!options.queryFn && fetchOptions?.initialPromise) {\n    return () => fetchOptions.initialPromise;\n  }\n  if (!options.queryFn || options.queryFn === skipToken) {\n    return () => Promise.reject(new Error(`Missing queryFn: '${options.queryHash}'`));\n  }\n  return options.queryFn;\n}\nfunction shouldThrowError(throwOnError, params) {\n  if (typeof throwOnError === \"function\") {\n    return throwOnError(...params);\n  }\n  return !!throwOnError;\n}\nexport {\n  addToEnd,\n  addToStart,\n  ensureQueryFn,\n  functionalUpdate,\n  hashKey,\n  hashQueryKeyByOptions,\n  isPlainArray,\n  isPlainObject,\n  isServer,\n  isValidTimeout,\n  keepPreviousData,\n  matchMutation,\n  matchQuery,\n  noop,\n  partialMatchKey,\n  replaceData,\n  replaceEqualDeep,\n  resolveEnabled,\n  resolveStaleTime,\n  shallowEqualObjects,\n  shouldThrowError,\n  skipToken,\n  sleep,\n  timeUntilStale\n};\n//# sourceMappingURL=utils.js.map","// src/focusManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nimport { isServer } from \"./utils.js\";\nvar FocusManager = class extends Subscribable {\n  #focused;\n  #cleanup;\n  #setup;\n  constructor() {\n    super();\n    this.#setup = (onFocus) => {\n      if (!isServer && window.addEventListener) {\n        const listener = () => onFocus();\n        window.addEventListener(\"visibilitychange\", listener, false);\n        return () => {\n          window.removeEventListener(\"visibilitychange\", listener);\n        };\n      }\n      return;\n    };\n  }\n  onSubscribe() {\n    if (!this.#cleanup) {\n      this.setEventListener(this.#setup);\n    }\n  }\n  onUnsubscribe() {\n    if (!this.hasListeners()) {\n      this.#cleanup?.();\n      this.#cleanup = void 0;\n    }\n  }\n  setEventListener(setup) {\n    this.#setup = setup;\n    this.#cleanup?.();\n    this.#cleanup = setup((focused) => {\n      if (typeof focused === \"boolean\") {\n        this.setFocused(focused);\n      } else {\n        this.onFocus();\n      }\n    });\n  }\n  setFocused(focused) {\n    const changed = this.#focused !== focused;\n    if (changed) {\n      this.#focused = focused;\n      this.onFocus();\n    }\n  }\n  onFocus() {\n    const isFocused = this.isFocused();\n    this.listeners.forEach((listener) => {\n      listener(isFocused);\n    });\n  }\n  isFocused() {\n    if (typeof this.#focused === \"boolean\") {\n      return this.#focused;\n    }\n    return globalThis.document?.visibilityState !== \"hidden\";\n  }\n};\nvar focusManager = new FocusManager();\nexport {\n  FocusManager,\n  focusManager\n};\n//# sourceMappingURL=focusManager.js.map","// src/thenable.ts\nimport { noop } from \"./utils.js\";\nfunction pendingThenable() {\n  let resolve;\n  let reject;\n  const thenable = new Promise((_resolve, _reject) => {\n    resolve = _resolve;\n    reject = _reject;\n  });\n  thenable.status = \"pending\";\n  thenable.catch(() => {\n  });\n  function finalize(data) {\n    Object.assign(thenable, data);\n    delete thenable.resolve;\n    delete thenable.reject;\n  }\n  thenable.resolve = (value) => {\n    finalize({\n      status: \"fulfilled\",\n      value\n    });\n    resolve(value);\n  };\n  thenable.reject = (reason) => {\n    finalize({\n      status: \"rejected\",\n      reason\n    });\n    reject(reason);\n  };\n  return thenable;\n}\nfunction tryResolveSync(promise) {\n  let data;\n  promise.then((result) => {\n    data = result;\n    return result;\n  }, noop)?.catch(noop);\n  if (data !== void 0) {\n    return { data };\n  }\n  return void 0;\n}\nexport {\n  pendingThenable,\n  tryResolveSync\n};\n//# sourceMappingURL=thenable.js.map","// src/notifyManager.ts\nimport { systemSetTimeoutZero } from \"./timeoutManager.js\";\nvar defaultScheduler = systemSetTimeoutZero;\nfunction createNotifyManager() {\n  let queue = [];\n  let transactions = 0;\n  let notifyFn = (callback) => {\n    callback();\n  };\n  let batchNotifyFn = (callback) => {\n    callback();\n  };\n  let scheduleFn = defaultScheduler;\n  const schedule = (callback) => {\n    if (transactions) {\n      queue.push(callback);\n    } else {\n      scheduleFn(() => {\n        notifyFn(callback);\n      });\n    }\n  };\n  const flush = () => {\n    const originalQueue = queue;\n    queue = [];\n    if (originalQueue.length) {\n      scheduleFn(() => {\n        batchNotifyFn(() => {\n          originalQueue.forEach((callback) => {\n            notifyFn(callback);\n          });\n        });\n      });\n    }\n  };\n  return {\n    batch: (callback) => {\n      let result;\n      transactions++;\n      try {\n        result = callback();\n      } finally {\n        transactions--;\n        if (!transactions) {\n          flush();\n        }\n      }\n      return result;\n    },\n    /**\n     * All calls to the wrapped function will be batched.\n     */\n    batchCalls: (callback) => {\n      return (...args) => {\n        schedule(() => {\n          callback(...args);\n        });\n      };\n    },\n    schedule,\n    /**\n     * Use this method to set a custom notify function.\n     * This can be used to for example wrap notifications with `React.act` while running tests.\n     */\n    setNotifyFunction: (fn) => {\n      notifyFn = fn;\n    },\n    /**\n     * Use this method to set a custom function to batch notifications together into a single tick.\n     * By default React Query will use the batch function provided by ReactDOM or React Native.\n     */\n    setBatchNotifyFunction: (fn) => {\n      batchNotifyFn = fn;\n    },\n    setScheduler: (fn) => {\n      scheduleFn = fn;\n    }\n  };\n}\nvar notifyManager = createNotifyManager();\nexport {\n  createNotifyManager,\n  defaultScheduler,\n  notifyManager\n};\n//# sourceMappingURL=notifyManager.js.map","// src/onlineManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nimport { isServer } from \"./utils.js\";\nvar OnlineManager = class extends Subscribable {\n  #online = true;\n  #cleanup;\n  #setup;\n  constructor() {\n    super();\n    this.#setup = (onOnline) => {\n      if (!isServer && window.addEventListener) {\n        const onlineListener = () => onOnline(true);\n        const offlineListener = () => onOnline(false);\n        window.addEventListener(\"online\", onlineListener, false);\n        window.addEventListener(\"offline\", offlineListener, false);\n        return () => {\n          window.removeEventListener(\"online\", onlineListener);\n          window.removeEventListener(\"offline\", offlineListener);\n        };\n      }\n      return;\n    };\n  }\n  onSubscribe() {\n    if (!this.#cleanup) {\n      this.setEventListener(this.#setup);\n    }\n  }\n  onUnsubscribe() {\n    if (!this.hasListeners()) {\n      this.#cleanup?.();\n      this.#cleanup = void 0;\n    }\n  }\n  setEventListener(setup) {\n    this.#setup = setup;\n    this.#cleanup?.();\n    this.#cleanup = setup(this.setOnline.bind(this));\n  }\n  setOnline(online) {\n    const changed = this.#online !== online;\n    if (changed) {\n      this.#online = online;\n      this.listeners.forEach((listener) => {\n        listener(online);\n      });\n    }\n  }\n  isOnline() {\n    return this.#online;\n  }\n};\nvar onlineManager = new OnlineManager();\nexport {\n  OnlineManager,\n  onlineManager\n};\n//# sourceMappingURL=onlineManager.js.map","// src/retryer.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport { isServer, sleep } from \"./utils.js\";\nfunction defaultRetryDelay(failureCount) {\n  return Math.min(1e3 * 2 ** failureCount, 3e4);\n}\nfunction canFetch(networkMode) {\n  return (networkMode ?? \"online\") === \"online\" ? onlineManager.isOnline() : true;\n}\nvar CancelledError = class extends Error {\n  constructor(options) {\n    super(\"CancelledError\");\n    this.revert = options?.revert;\n    this.silent = options?.silent;\n  }\n};\nfunction isCancelledError(value) {\n  return value instanceof CancelledError;\n}\nfunction createRetryer(config) {\n  let isRetryCancelled = false;\n  let failureCount = 0;\n  let continueFn;\n  const thenable = pendingThenable();\n  const isResolved = () => thenable.status !== \"pending\";\n  const cancel = (cancelOptions) => {\n    if (!isResolved()) {\n      const error = new CancelledError(cancelOptions);\n      reject(error);\n      config.onCancel?.(error);\n    }\n  };\n  const cancelRetry = () => {\n    isRetryCancelled = true;\n  };\n  const continueRetry = () => {\n    isRetryCancelled = false;\n  };\n  const canContinue = () => focusManager.isFocused() && (config.networkMode === \"always\" || onlineManager.isOnline()) && config.canRun();\n  const canStart = () => canFetch(config.networkMode) && config.canRun();\n  const resolve = (value) => {\n    if (!isResolved()) {\n      continueFn?.();\n      thenable.resolve(value);\n    }\n  };\n  const reject = (value) => {\n    if (!isResolved()) {\n      continueFn?.();\n      thenable.reject(value);\n    }\n  };\n  const pause = () => {\n    return new Promise((continueResolve) => {\n      continueFn = (value) => {\n        if (isResolved() || canContinue()) {\n          continueResolve(value);\n        }\n      };\n      config.onPause?.();\n    }).then(() => {\n      continueFn = void 0;\n      if (!isResolved()) {\n        config.onContinue?.();\n      }\n    });\n  };\n  const run = () => {\n    if (isResolved()) {\n      return;\n    }\n    let promiseOrValue;\n    const initialPromise = failureCount === 0 ? config.initialPromise : void 0;\n    try {\n      promiseOrValue = initialPromise ?? config.fn();\n    } catch (error) {\n      promiseOrValue = Promise.reject(error);\n    }\n    Promise.resolve(promiseOrValue).then(resolve).catch((error) => {\n      if (isResolved()) {\n        return;\n      }\n      const retry = config.retry ?? (isServer ? 0 : 3);\n      const retryDelay = config.retryDelay ?? defaultRetryDelay;\n      const delay = typeof retryDelay === \"function\" ? retryDelay(failureCount, error) : retryDelay;\n      const shouldRetry = retry === true || typeof retry === \"number\" && failureCount < retry || typeof retry === \"function\" && retry(failureCount, error);\n      if (isRetryCancelled || !shouldRetry) {\n        reject(error);\n        return;\n      }\n      failureCount++;\n      config.onFail?.(failureCount, error);\n      sleep(delay).then(() => {\n        return canContinue() ? void 0 : pause();\n      }).then(() => {\n        if (isRetryCancelled) {\n          reject(error);\n        } else {\n          run();\n        }\n      });\n    });\n  };\n  return {\n    promise: thenable,\n    status: () => thenable.status,\n    cancel,\n    continue: () => {\n      continueFn?.();\n      return thenable;\n    },\n    cancelRetry,\n    continueRetry,\n    canStart,\n    start: () => {\n      if (canStart()) {\n        run();\n      } else {\n        pause().then(run);\n      }\n      return thenable;\n    }\n  };\n}\nexport {\n  CancelledError,\n  canFetch,\n  createRetryer,\n  isCancelledError\n};\n//# sourceMappingURL=retryer.js.map","// src/removable.ts\nimport { timeoutManager } from \"./timeoutManager.js\";\nimport { isServer, isValidTimeout } from \"./utils.js\";\nvar Removable = class {\n  #gcTimeout;\n  destroy() {\n    this.clearGcTimeout();\n  }\n  scheduleGc() {\n    this.clearGcTimeout();\n    if (isValidTimeout(this.gcTime)) {\n      this.#gcTimeout = timeoutManager.setTimeout(() => {\n        this.optionalRemove();\n      }, this.gcTime);\n    }\n  }\n  updateGcTime(newGcTime) {\n    this.gcTime = Math.max(\n      this.gcTime || 0,\n      newGcTime ?? (isServer ? Infinity : 5 * 60 * 1e3)\n    );\n  }\n  clearGcTimeout() {\n    if (this.#gcTimeout) {\n      timeoutManager.clearTimeout(this.#gcTimeout);\n      this.#gcTimeout = void 0;\n    }\n  }\n};\nexport {\n  Removable\n};\n//# sourceMappingURL=removable.js.map","// src/query.ts\nimport {\n  ensureQueryFn,\n  noop,\n  replaceData,\n  resolveEnabled,\n  resolveStaleTime,\n  skipToken,\n  timeUntilStale\n} from \"./utils.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { CancelledError, canFetch, createRetryer } from \"./retryer.js\";\nimport { Removable } from \"./removable.js\";\nvar Query = class extends Removable {\n  #initialState;\n  #revertState;\n  #cache;\n  #client;\n  #retryer;\n  #defaultOptions;\n  #abortSignalConsumed;\n  constructor(config) {\n    super();\n    this.#abortSignalConsumed = false;\n    this.#defaultOptions = config.defaultOptions;\n    this.setOptions(config.options);\n    this.observers = [];\n    this.#client = config.client;\n    this.#cache = this.#client.getQueryCache();\n    this.queryKey = config.queryKey;\n    this.queryHash = config.queryHash;\n    this.#initialState = getDefaultState(this.options);\n    this.state = config.state ?? this.#initialState;\n    this.scheduleGc();\n  }\n  get meta() {\n    return this.options.meta;\n  }\n  get promise() {\n    return this.#retryer?.promise;\n  }\n  setOptions(options) {\n    this.options = { ...this.#defaultOptions, ...options };\n    this.updateGcTime(this.options.gcTime);\n    if (this.state && this.state.data === void 0) {\n      const defaultState = getDefaultState(this.options);\n      if (defaultState.data !== void 0) {\n        this.setState(\n          successState(defaultState.data, defaultState.dataUpdatedAt)\n        );\n        this.#initialState = defaultState;\n      }\n    }\n  }\n  optionalRemove() {\n    if (!this.observers.length && this.state.fetchStatus === \"idle\") {\n      this.#cache.remove(this);\n    }\n  }\n  setData(newData, options) {\n    const data = replaceData(this.state.data, newData, this.options);\n    this.#dispatch({\n      data,\n      type: \"success\",\n      dataUpdatedAt: options?.updatedAt,\n      manual: options?.manual\n    });\n    return data;\n  }\n  setState(state, setStateOptions) {\n    this.#dispatch({ type: \"setState\", state, setStateOptions });\n  }\n  cancel(options) {\n    const promise = this.#retryer?.promise;\n    this.#retryer?.cancel(options);\n    return promise ? promise.then(noop).catch(noop) : Promise.resolve();\n  }\n  destroy() {\n    super.destroy();\n    this.cancel({ silent: true });\n  }\n  reset() {\n    this.destroy();\n    this.setState(this.#initialState);\n  }\n  isActive() {\n    return this.observers.some(\n      (observer) => resolveEnabled(observer.options.enabled, this) !== false\n    );\n  }\n  isDisabled() {\n    if (this.getObserversCount() > 0) {\n      return !this.isActive();\n    }\n    return this.options.queryFn === skipToken || this.state.dataUpdateCount + this.state.errorUpdateCount === 0;\n  }\n  isStatic() {\n    if (this.getObserversCount() > 0) {\n      return this.observers.some(\n        (observer) => resolveStaleTime(observer.options.staleTime, this) === \"static\"\n      );\n    }\n    return false;\n  }\n  isStale() {\n    if (this.getObserversCount() > 0) {\n      return this.observers.some(\n        (observer) => observer.getCurrentResult().isStale\n      );\n    }\n    return this.state.data === void 0 || this.state.isInvalidated;\n  }\n  isStaleByTime(staleTime = 0) {\n    if (this.state.data === void 0) {\n      return true;\n    }\n    if (staleTime === \"static\") {\n      return false;\n    }\n    if (this.state.isInvalidated) {\n      return true;\n    }\n    return !timeUntilStale(this.state.dataUpdatedAt, staleTime);\n  }\n  onFocus() {\n    const observer = this.observers.find((x) => x.shouldFetchOnWindowFocus());\n    observer?.refetch({ cancelRefetch: false });\n    this.#retryer?.continue();\n  }\n  onOnline() {\n    const observer = this.observers.find((x) => x.shouldFetchOnReconnect());\n    observer?.refetch({ cancelRefetch: false });\n    this.#retryer?.continue();\n  }\n  addObserver(observer) {\n    if (!this.observers.includes(observer)) {\n      this.observers.push(observer);\n      this.clearGcTimeout();\n      this.#cache.notify({ type: \"observerAdded\", query: this, observer });\n    }\n  }\n  removeObserver(observer) {\n    if (this.observers.includes(observer)) {\n      this.observers = this.observers.filter((x) => x !== observer);\n      if (!this.observers.length) {\n        if (this.#retryer) {\n          if (this.#abortSignalConsumed) {\n            this.#retryer.cancel({ revert: true });\n          } else {\n            this.#retryer.cancelRetry();\n          }\n        }\n        this.scheduleGc();\n      }\n      this.#cache.notify({ type: \"observerRemoved\", query: this, observer });\n    }\n  }\n  getObserversCount() {\n    return this.observers.length;\n  }\n  invalidate() {\n    if (!this.state.isInvalidated) {\n      this.#dispatch({ type: \"invalidate\" });\n    }\n  }\n  async fetch(options, fetchOptions) {\n    if (this.state.fetchStatus !== \"idle\" && // If the promise in the retyer is already rejected, we have to definitely\n    // re-start the fetch; there is a chance that the query is still in a\n    // pending state when that happens\n    this.#retryer?.status() !== \"rejected\") {\n      if (this.state.data !== void 0 && fetchOptions?.cancelRefetch) {\n        this.cancel({ silent: true });\n      } else if (this.#retryer) {\n        this.#retryer.continueRetry();\n        return this.#retryer.promise;\n      }\n    }\n    if (options) {\n      this.setOptions(options);\n    }\n    if (!this.options.queryFn) {\n      const observer = this.observers.find((x) => x.options.queryFn);\n      if (observer) {\n        this.setOptions(observer.options);\n      }\n    }\n    if (process.env.NODE_ENV !== \"production\") {\n      if (!Array.isArray(this.options.queryKey)) {\n        console.error(\n          `As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`\n        );\n      }\n    }\n    const abortController = new AbortController();\n    const addSignalProperty = (object) => {\n      Object.defineProperty(object, \"signal\", {\n        enumerable: true,\n        get: () => {\n          this.#abortSignalConsumed = true;\n          return abortController.signal;\n        }\n      });\n    };\n    const fetchFn = () => {\n      const queryFn = ensureQueryFn(this.options, fetchOptions);\n      const createQueryFnContext = () => {\n        const queryFnContext2 = {\n          client: this.#client,\n          queryKey: this.queryKey,\n          meta: this.meta\n        };\n        addSignalProperty(queryFnContext2);\n        return queryFnContext2;\n      };\n      const queryFnContext = createQueryFnContext();\n      this.#abortSignalConsumed = false;\n      if (this.options.persister) {\n        return this.options.persister(\n          queryFn,\n          queryFnContext,\n          this\n        );\n      }\n      return queryFn(queryFnContext);\n    };\n    const createFetchContext = () => {\n      const context2 = {\n        fetchOptions,\n        options: this.options,\n        queryKey: this.queryKey,\n        client: this.#client,\n        state: this.state,\n        fetchFn\n      };\n      addSignalProperty(context2);\n      return context2;\n    };\n    const context = createFetchContext();\n    this.options.behavior?.onFetch(context, this);\n    this.#revertState = this.state;\n    if (this.state.fetchStatus === \"idle\" || this.state.fetchMeta !== context.fetchOptions?.meta) {\n      this.#dispatch({ type: \"fetch\", meta: context.fetchOptions?.meta });\n    }\n    this.#retryer = createRetryer({\n      initialPromise: fetchOptions?.initialPromise,\n      fn: context.fetchFn,\n      onCancel: (error) => {\n        if (error instanceof CancelledError && error.revert) {\n          this.setState({\n            ...this.#revertState,\n            fetchStatus: \"idle\"\n          });\n        }\n        abortController.abort();\n      },\n      onFail: (failureCount, error) => {\n        this.#dispatch({ type: \"failed\", failureCount, error });\n      },\n      onPause: () => {\n        this.#dispatch({ type: \"pause\" });\n      },\n      onContinue: () => {\n        this.#dispatch({ type: \"continue\" });\n      },\n      retry: context.options.retry,\n      retryDelay: context.options.retryDelay,\n      networkMode: context.options.networkMode,\n      canRun: () => true\n    });\n    try {\n      const data = await this.#retryer.start();\n      if (data === void 0) {\n        if (process.env.NODE_ENV !== \"production\") {\n          console.error(\n            `Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`\n          );\n        }\n        throw new Error(`${this.queryHash} data is undefined`);\n      }\n      this.setData(data);\n      this.#cache.config.onSuccess?.(data, this);\n      this.#cache.config.onSettled?.(\n        data,\n        this.state.error,\n        this\n      );\n      return data;\n    } catch (error) {\n      if (error instanceof CancelledError) {\n        if (error.silent) {\n          return this.#retryer.promise;\n        } else if (error.revert) {\n          if (this.state.data === void 0) {\n            throw error;\n          }\n          return this.state.data;\n        }\n      }\n      this.#dispatch({\n        type: \"error\",\n        error\n      });\n      this.#cache.config.onError?.(\n        error,\n        this\n      );\n      this.#cache.config.onSettled?.(\n        this.state.data,\n        error,\n        this\n      );\n      throw error;\n    } finally {\n      this.scheduleGc();\n    }\n  }\n  #dispatch(action) {\n    const reducer = (state) => {\n      switch (action.type) {\n        case \"failed\":\n          return {\n            ...state,\n            fetchFailureCount: action.failureCount,\n            fetchFailureReason: action.error\n          };\n        case \"pause\":\n          return {\n            ...state,\n            fetchStatus: \"paused\"\n          };\n        case \"continue\":\n          return {\n            ...state,\n            fetchStatus: \"fetching\"\n          };\n        case \"fetch\":\n          return {\n            ...state,\n            ...fetchState(state.data, this.options),\n            fetchMeta: action.meta ?? null\n          };\n        case \"success\":\n          const newState = {\n            ...state,\n            ...successState(action.data, action.dataUpdatedAt),\n            dataUpdateCount: state.dataUpdateCount + 1,\n            ...!action.manual && {\n              fetchStatus: \"idle\",\n              fetchFailureCount: 0,\n              fetchFailureReason: null\n            }\n          };\n          this.#revertState = action.manual ? newState : void 0;\n          return newState;\n        case \"error\":\n          const error = action.error;\n          return {\n            ...state,\n            error,\n            errorUpdateCount: state.errorUpdateCount + 1,\n            errorUpdatedAt: Date.now(),\n            fetchFailureCount: state.fetchFailureCount + 1,\n            fetchFailureReason: error,\n            fetchStatus: \"idle\",\n            status: \"error\"\n          };\n        case \"invalidate\":\n          return {\n            ...state,\n            isInvalidated: true\n          };\n        case \"setState\":\n          return {\n            ...state,\n            ...action.state\n          };\n      }\n    };\n    this.state = reducer(this.state);\n    notifyManager.batch(() => {\n      this.observers.forEach((observer) => {\n        observer.onQueryUpdate();\n      });\n      this.#cache.notify({ query: this, type: \"updated\", action });\n    });\n  }\n};\nfunction fetchState(data, options) {\n  return {\n    fetchFailureCount: 0,\n    fetchFailureReason: null,\n    fetchStatus: canFetch(options.networkMode) ? \"fetching\" : \"paused\",\n    ...data === void 0 && {\n      error: null,\n      status: \"pending\"\n    }\n  };\n}\nfunction successState(data, dataUpdatedAt) {\n  return {\n    data,\n    dataUpdatedAt: dataUpdatedAt ?? Date.now(),\n    error: null,\n    isInvalidated: false,\n    status: \"success\"\n  };\n}\nfunction getDefaultState(options) {\n  const data = typeof options.initialData === \"function\" ? options.initialData() : options.initialData;\n  const hasData = data !== void 0;\n  const initialDataUpdatedAt = hasData ? typeof options.initialDataUpdatedAt === \"function\" ? options.initialDataUpdatedAt() : options.initialDataUpdatedAt : 0;\n  return {\n    data,\n    dataUpdateCount: 0,\n    dataUpdatedAt: hasData ? initialDataUpdatedAt ?? Date.now() : 0,\n    error: null,\n    errorUpdateCount: 0,\n    errorUpdatedAt: 0,\n    fetchFailureCount: 0,\n    fetchFailureReason: null,\n    fetchMeta: null,\n    isInvalidated: false,\n    status: hasData ? \"success\" : \"pending\",\n    fetchStatus: \"idle\"\n  };\n}\nexport {\n  Query,\n  fetchState\n};\n//# sourceMappingURL=query.js.map","// src/queryObserver.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { fetchState } from \"./query.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport {\n  isServer,\n  isValidTimeout,\n  noop,\n  replaceData,\n  resolveEnabled,\n  resolveStaleTime,\n  shallowEqualObjects,\n  timeUntilStale\n} from \"./utils.js\";\nimport { timeoutManager } from \"./timeoutManager.js\";\nvar QueryObserver = class extends Subscribable {\n  constructor(client, options) {\n    super();\n    this.options = options;\n    this.#client = client;\n    this.#selectError = null;\n    this.#currentThenable = pendingThenable();\n    this.bindMethods();\n    this.setOptions(options);\n  }\n  #client;\n  #currentQuery = void 0;\n  #currentQueryInitialState = void 0;\n  #currentResult = void 0;\n  #currentResultState;\n  #currentResultOptions;\n  #currentThenable;\n  #selectError;\n  #selectFn;\n  #selectResult;\n  // This property keeps track of the last query with defined data.\n  // It will be used to pass the previous data and query to the placeholder function between renders.\n  #lastQueryWithDefinedData;\n  #staleTimeoutId;\n  #refetchIntervalId;\n  #currentRefetchInterval;\n  #trackedProps = /* @__PURE__ */ new Set();\n  bindMethods() {\n    this.refetch = this.refetch.bind(this);\n  }\n  onSubscribe() {\n    if (this.listeners.size === 1) {\n      this.#currentQuery.addObserver(this);\n      if (shouldFetchOnMount(this.#currentQuery, this.options)) {\n        this.#executeFetch();\n      } else {\n        this.updateResult();\n      }\n      this.#updateTimers();\n    }\n  }\n  onUnsubscribe() {\n    if (!this.hasListeners()) {\n      this.destroy();\n    }\n  }\n  shouldFetchOnReconnect() {\n    return shouldFetchOn(\n      this.#currentQuery,\n      this.options,\n      this.options.refetchOnReconnect\n    );\n  }\n  shouldFetchOnWindowFocus() {\n    return shouldFetchOn(\n      this.#currentQuery,\n      this.options,\n      this.options.refetchOnWindowFocus\n    );\n  }\n  destroy() {\n    this.listeners = /* @__PURE__ */ new Set();\n    this.#clearStaleTimeout();\n    this.#clearRefetchInterval();\n    this.#currentQuery.removeObserver(this);\n  }\n  setOptions(options) {\n    const prevOptions = this.options;\n    const prevQuery = this.#currentQuery;\n    this.options = this.#client.defaultQueryOptions(options);\n    if (this.options.enabled !== void 0 && typeof this.options.enabled !== \"boolean\" && typeof this.options.enabled !== \"function\" && typeof resolveEnabled(this.options.enabled, this.#currentQuery) !== \"boolean\") {\n      throw new Error(\n        \"Expected enabled to be a boolean or a callback that returns a boolean\"\n      );\n    }\n    this.#updateQuery();\n    this.#currentQuery.setOptions(this.options);\n    if (prevOptions._defaulted && !shallowEqualObjects(this.options, prevOptions)) {\n      this.#client.getQueryCache().notify({\n        type: \"observerOptionsUpdated\",\n        query: this.#currentQuery,\n        observer: this\n      });\n    }\n    const mounted = this.hasListeners();\n    if (mounted && shouldFetchOptionally(\n      this.#currentQuery,\n      prevQuery,\n      this.options,\n      prevOptions\n    )) {\n      this.#executeFetch();\n    }\n    this.updateResult();\n    if (mounted && (this.#currentQuery !== prevQuery || resolveEnabled(this.options.enabled, this.#currentQuery) !== resolveEnabled(prevOptions.enabled, this.#currentQuery) || resolveStaleTime(this.options.staleTime, this.#currentQuery) !== resolveStaleTime(prevOptions.staleTime, this.#currentQuery))) {\n      this.#updateStaleTimeout();\n    }\n    const nextRefetchInterval = this.#computeRefetchInterval();\n    if (mounted && (this.#currentQuery !== prevQuery || resolveEnabled(this.options.enabled, this.#currentQuery) !== resolveEnabled(prevOptions.enabled, this.#currentQuery) || nextRefetchInterval !== this.#currentRefetchInterval)) {\n      this.#updateRefetchInterval(nextRefetchInterval);\n    }\n  }\n  getOptimisticResult(options) {\n    const query = this.#client.getQueryCache().build(this.#client, options);\n    const result = this.createResult(query, options);\n    if (shouldAssignObserverCurrentProperties(this, result)) {\n      this.#currentResult = result;\n      this.#currentResultOptions = this.options;\n      this.#currentResultState = this.#currentQuery.state;\n    }\n    return result;\n  }\n  getCurrentResult() {\n    return this.#currentResult;\n  }\n  trackResult(result, onPropTracked) {\n    return new Proxy(result, {\n      get: (target, key) => {\n        this.trackProp(key);\n        onPropTracked?.(key);\n        if (key === \"promise\") {\n          this.trackProp(\"data\");\n          if (!this.options.experimental_prefetchInRender && this.#currentThenable.status === \"pending\") {\n            this.#currentThenable.reject(\n              new Error(\n                \"experimental_prefetchInRender feature flag is not enabled\"\n              )\n            );\n          }\n        }\n        return Reflect.get(target, key);\n      }\n    });\n  }\n  trackProp(key) {\n    this.#trackedProps.add(key);\n  }\n  getCurrentQuery() {\n    return this.#currentQuery;\n  }\n  refetch({ ...options } = {}) {\n    return this.fetch({\n      ...options\n    });\n  }\n  fetchOptimistic(options) {\n    const defaultedOptions = this.#client.defaultQueryOptions(options);\n    const query = this.#client.getQueryCache().build(this.#client, defaultedOptions);\n    return query.fetch().then(() => this.createResult(query, defaultedOptions));\n  }\n  fetch(fetchOptions) {\n    return this.#executeFetch({\n      ...fetchOptions,\n      cancelRefetch: fetchOptions.cancelRefetch ?? true\n    }).then(() => {\n      this.updateResult();\n      return this.#currentResult;\n    });\n  }\n  #executeFetch(fetchOptions) {\n    this.#updateQuery();\n    let promise = this.#currentQuery.fetch(\n      this.options,\n      fetchOptions\n    );\n    if (!fetchOptions?.throwOnError) {\n      promise = promise.catch(noop);\n    }\n    return promise;\n  }\n  #updateStaleTimeout() {\n    this.#clearStaleTimeout();\n    const staleTime = resolveStaleTime(\n      this.options.staleTime,\n      this.#currentQuery\n    );\n    if (isServer || this.#currentResult.isStale || !isValidTimeout(staleTime)) {\n      return;\n    }\n    const time = timeUntilStale(this.#currentResult.dataUpdatedAt, staleTime);\n    const timeout = time + 1;\n    this.#staleTimeoutId = timeoutManager.setTimeout(() => {\n      if (!this.#currentResult.isStale) {\n        this.updateResult();\n      }\n    }, timeout);\n  }\n  #computeRefetchInterval() {\n    return (typeof this.options.refetchInterval === \"function\" ? this.options.refetchInterval(this.#currentQuery) : this.options.refetchInterval) ?? false;\n  }\n  #updateRefetchInterval(nextInterval) {\n    this.#clearRefetchInterval();\n    this.#currentRefetchInterval = nextInterval;\n    if (isServer || resolveEnabled(this.options.enabled, this.#currentQuery) === false || !isValidTimeout(this.#currentRefetchInterval) || this.#currentRefetchInterval === 0) {\n      return;\n    }\n    this.#refetchIntervalId = timeoutManager.setInterval(() => {\n      if (this.options.refetchIntervalInBackground || focusManager.isFocused()) {\n        this.#executeFetch();\n      }\n    }, this.#currentRefetchInterval);\n  }\n  #updateTimers() {\n    this.#updateStaleTimeout();\n    this.#updateRefetchInterval(this.#computeRefetchInterval());\n  }\n  #clearStaleTimeout() {\n    if (this.#staleTimeoutId) {\n      timeoutManager.clearTimeout(this.#staleTimeoutId);\n      this.#staleTimeoutId = void 0;\n    }\n  }\n  #clearRefetchInterval() {\n    if (this.#refetchIntervalId) {\n      timeoutManager.clearInterval(this.#refetchIntervalId);\n      this.#refetchIntervalId = void 0;\n    }\n  }\n  createResult(query, options) {\n    const prevQuery = this.#currentQuery;\n    const prevOptions = this.options;\n    const prevResult = this.#currentResult;\n    const prevResultState = this.#currentResultState;\n    const prevResultOptions = this.#currentResultOptions;\n    const queryChange = query !== prevQuery;\n    const queryInitialState = queryChange ? query.state : this.#currentQueryInitialState;\n    const { state } = query;\n    let newState = { ...state };\n    let isPlaceholderData = false;\n    let data;\n    if (options._optimisticResults) {\n      const mounted = this.hasListeners();\n      const fetchOnMount = !mounted && shouldFetchOnMount(query, options);\n      const fetchOptionally = mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions);\n      if (fetchOnMount || fetchOptionally) {\n        newState = {\n          ...newState,\n          ...fetchState(state.data, query.options)\n        };\n      }\n      if (options._optimisticResults === \"isRestoring\") {\n        newState.fetchStatus = \"idle\";\n      }\n    }\n    let { error, errorUpdatedAt, status } = newState;\n    data = newState.data;\n    let skipSelect = false;\n    if (options.placeholderData !== void 0 && data === void 0 && status === \"pending\") {\n      let placeholderData;\n      if (prevResult?.isPlaceholderData && options.placeholderData === prevResultOptions?.placeholderData) {\n        placeholderData = prevResult.data;\n        skipSelect = true;\n      } else {\n        placeholderData = typeof options.placeholderData === \"function\" ? options.placeholderData(\n          this.#lastQueryWithDefinedData?.state.data,\n          this.#lastQueryWithDefinedData\n        ) : options.placeholderData;\n      }\n      if (placeholderData !== void 0) {\n        status = \"success\";\n        data = replaceData(\n          prevResult?.data,\n          placeholderData,\n          options\n        );\n        isPlaceholderData = true;\n      }\n    }\n    if (options.select && data !== void 0 && !skipSelect) {\n      if (prevResult && data === prevResultState?.data && options.select === this.#selectFn) {\n        data = this.#selectResult;\n      } else {\n        try {\n          this.#selectFn = options.select;\n          data = options.select(data);\n          data = replaceData(prevResult?.data, data, options);\n          this.#selectResult = data;\n          this.#selectError = null;\n        } catch (selectError) {\n          this.#selectError = selectError;\n        }\n      }\n    }\n    if (this.#selectError) {\n      error = this.#selectError;\n      data = this.#selectResult;\n      errorUpdatedAt = Date.now();\n      status = \"error\";\n    }\n    const isFetching = newState.fetchStatus === \"fetching\";\n    const isPending = status === \"pending\";\n    const isError = status === \"error\";\n    const isLoading = isPending && isFetching;\n    const hasData = data !== void 0;\n    const result = {\n      status,\n      fetchStatus: newState.fetchStatus,\n      isPending,\n      isSuccess: status === \"success\",\n      isError,\n      isInitialLoading: isLoading,\n      isLoading,\n      data,\n      dataUpdatedAt: newState.dataUpdatedAt,\n      error,\n      errorUpdatedAt,\n      failureCount: newState.fetchFailureCount,\n      failureReason: newState.fetchFailureReason,\n      errorUpdateCount: newState.errorUpdateCount,\n      isFetched: newState.dataUpdateCount > 0 || newState.errorUpdateCount > 0,\n      isFetchedAfterMount: newState.dataUpdateCount > queryInitialState.dataUpdateCount || newState.errorUpdateCount > queryInitialState.errorUpdateCount,\n      isFetching,\n      isRefetching: isFetching && !isPending,\n      isLoadingError: isError && !hasData,\n      isPaused: newState.fetchStatus === \"paused\",\n      isPlaceholderData,\n      isRefetchError: isError && hasData,\n      isStale: isStale(query, options),\n      refetch: this.refetch,\n      promise: this.#currentThenable,\n      isEnabled: resolveEnabled(options.enabled, query) !== false\n    };\n    const nextResult = result;\n    if (this.options.experimental_prefetchInRender) {\n      const finalizeThenableIfPossible = (thenable) => {\n        if (nextResult.status === \"error\") {\n          thenable.reject(nextResult.error);\n        } else if (nextResult.data !== void 0) {\n          thenable.resolve(nextResult.data);\n        }\n      };\n      const recreateThenable = () => {\n        const pending = this.#currentThenable = nextResult.promise = pendingThenable();\n        finalizeThenableIfPossible(pending);\n      };\n      const prevThenable = this.#currentThenable;\n      switch (prevThenable.status) {\n        case \"pending\":\n          if (query.queryHash === prevQuery.queryHash) {\n            finalizeThenableIfPossible(prevThenable);\n          }\n          break;\n        case \"fulfilled\":\n          if (nextResult.status === \"error\" || nextResult.data !== prevThenable.value) {\n            recreateThenable();\n          }\n          break;\n        case \"rejected\":\n          if (nextResult.status !== \"error\" || nextResult.error !== prevThenable.reason) {\n            recreateThenable();\n          }\n          break;\n      }\n    }\n    return nextResult;\n  }\n  updateResult() {\n    const prevResult = this.#currentResult;\n    const nextResult = this.createResult(this.#currentQuery, this.options);\n    this.#currentResultState = this.#currentQuery.state;\n    this.#currentResultOptions = this.options;\n    if (this.#currentResultState.data !== void 0) {\n      this.#lastQueryWithDefinedData = this.#currentQuery;\n    }\n    if (shallowEqualObjects(nextResult, prevResult)) {\n      return;\n    }\n    this.#currentResult = nextResult;\n    const shouldNotifyListeners = () => {\n      if (!prevResult) {\n        return true;\n      }\n      const { notifyOnChangeProps } = this.options;\n      const notifyOnChangePropsValue = typeof notifyOnChangeProps === \"function\" ? notifyOnChangeProps() : notifyOnChangeProps;\n      if (notifyOnChangePropsValue === \"all\" || !notifyOnChangePropsValue && !this.#trackedProps.size) {\n        return true;\n      }\n      const includedProps = new Set(\n        notifyOnChangePropsValue ?? this.#trackedProps\n      );\n      if (this.options.throwOnError) {\n        includedProps.add(\"error\");\n      }\n      return Object.keys(this.#currentResult).some((key) => {\n        const typedKey = key;\n        const changed = this.#currentResult[typedKey] !== prevResult[typedKey];\n        return changed && includedProps.has(typedKey);\n      });\n    };\n    this.#notify({ listeners: shouldNotifyListeners() });\n  }\n  #updateQuery() {\n    const query = this.#client.getQueryCache().build(this.#client, this.options);\n    if (query === this.#currentQuery) {\n      return;\n    }\n    const prevQuery = this.#currentQuery;\n    this.#currentQuery = query;\n    this.#currentQueryInitialState = query.state;\n    if (this.hasListeners()) {\n      prevQuery?.removeObserver(this);\n      query.addObserver(this);\n    }\n  }\n  onQueryUpdate() {\n    this.updateResult();\n    if (this.hasListeners()) {\n      this.#updateTimers();\n    }\n  }\n  #notify(notifyOptions) {\n    notifyManager.batch(() => {\n      if (notifyOptions.listeners) {\n        this.listeners.forEach((listener) => {\n          listener(this.#currentResult);\n        });\n      }\n      this.#client.getQueryCache().notify({\n        query: this.#currentQuery,\n        type: \"observerResultsUpdated\"\n      });\n    });\n  }\n};\nfunction shouldLoadOnMount(query, options) {\n  return resolveEnabled(options.enabled, query) !== false && query.state.data === void 0 && !(query.state.status === \"error\" && options.retryOnMount === false);\n}\nfunction shouldFetchOnMount(query, options) {\n  return shouldLoadOnMount(query, options) || query.state.data !== void 0 && shouldFetchOn(query, options, options.refetchOnMount);\n}\nfunction shouldFetchOn(query, options, field) {\n  if (resolveEnabled(options.enabled, query) !== false && resolveStaleTime(options.staleTime, query) !== \"static\") {\n    const value = typeof field === \"function\" ? field(query) : field;\n    return value === \"always\" || value !== false && isStale(query, options);\n  }\n  return false;\n}\nfunction shouldFetchOptionally(query, prevQuery, options, prevOptions) {\n  return (query !== prevQuery || resolveEnabled(prevOptions.enabled, query) === false) && (!options.suspense || query.state.status !== \"error\") && isStale(query, options);\n}\nfunction isStale(query, options) {\n  return resolveEnabled(options.enabled, query) !== false && query.isStaleByTime(resolveStaleTime(options.staleTime, query));\n}\nfunction shouldAssignObserverCurrentProperties(observer, optimisticResult) {\n  if (!shallowEqualObjects(observer.getCurrentResult(), optimisticResult)) {\n    return true;\n  }\n  return false;\n}\nexport {\n  QueryObserver\n};\n//# sourceMappingURL=queryObserver.js.map","// src/infiniteQueryBehavior.ts\nimport { addToEnd, addToStart, ensureQueryFn } from \"./utils.js\";\nfunction infiniteQueryBehavior(pages) {\n  return {\n    onFetch: (context, query) => {\n      const options = context.options;\n      const direction = context.fetchOptions?.meta?.fetchMore?.direction;\n      const oldPages = context.state.data?.pages || [];\n      const oldPageParams = context.state.data?.pageParams || [];\n      let result = { pages: [], pageParams: [] };\n      let currentPage = 0;\n      const fetchFn = async () => {\n        let cancelled = false;\n        const addSignalProperty = (object) => {\n          Object.defineProperty(object, \"signal\", {\n            enumerable: true,\n            get: () => {\n              if (context.signal.aborted) {\n                cancelled = true;\n              } else {\n                context.signal.addEventListener(\"abort\", () => {\n                  cancelled = true;\n                });\n              }\n              return context.signal;\n            }\n          });\n        };\n        const queryFn = ensureQueryFn(context.options, context.fetchOptions);\n        const fetchPage = async (data, param, previous) => {\n          if (cancelled) {\n            return Promise.reject();\n          }\n          if (param == null && data.pages.length) {\n            return Promise.resolve(data);\n          }\n          const createQueryFnContext = () => {\n            const queryFnContext2 = {\n              client: context.client,\n              queryKey: context.queryKey,\n              pageParam: param,\n              direction: previous ? \"backward\" : \"forward\",\n              meta: context.options.meta\n            };\n            addSignalProperty(queryFnContext2);\n            return queryFnContext2;\n          };\n          const queryFnContext = createQueryFnContext();\n          const page = await queryFn(queryFnContext);\n          const { maxPages } = context.options;\n          const addTo = previous ? addToStart : addToEnd;\n          return {\n            pages: addTo(data.pages, page, maxPages),\n            pageParams: addTo(data.pageParams, param, maxPages)\n          };\n        };\n        if (direction && oldPages.length) {\n          const previous = direction === \"backward\";\n          const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n          const oldData = {\n            pages: oldPages,\n            pageParams: oldPageParams\n          };\n          const param = pageParamFn(options, oldData);\n          result = await fetchPage(oldData, param, previous);\n        } else {\n          const remainingPages = pages ?? oldPages.length;\n          do {\n            const param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result);\n            if (currentPage > 0 && param == null) {\n              break;\n            }\n            result = await fetchPage(result, param);\n            currentPage++;\n          } while (currentPage < remainingPages);\n        }\n        return result;\n      };\n      if (context.options.persister) {\n        context.fetchFn = () => {\n          return context.options.persister?.(\n            fetchFn,\n            {\n              client: context.client,\n              queryKey: context.queryKey,\n              meta: context.options.meta,\n              signal: context.signal\n            },\n            query\n          );\n        };\n      } else {\n        context.fetchFn = fetchFn;\n      }\n    }\n  };\n}\nfunction getNextPageParam(options, { pages, pageParams }) {\n  const lastIndex = pages.length - 1;\n  return pages.length > 0 ? options.getNextPageParam(\n    pages[lastIndex],\n    pages,\n    pageParams[lastIndex],\n    pageParams\n  ) : void 0;\n}\nfunction getPreviousPageParam(options, { pages, pageParams }) {\n  return pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0;\n}\nfunction hasNextPage(options, data) {\n  if (!data) return false;\n  return getNextPageParam(options, data) != null;\n}\nfunction hasPreviousPage(options, data) {\n  if (!data || !options.getPreviousPageParam) return false;\n  return getPreviousPageParam(options, data) != null;\n}\nexport {\n  hasNextPage,\n  hasPreviousPage,\n  infiniteQueryBehavior\n};\n//# sourceMappingURL=infiniteQueryBehavior.js.map","// src/infiniteQueryObserver.ts\nimport { QueryObserver } from \"./queryObserver.js\";\nimport {\n  hasNextPage,\n  hasPreviousPage,\n  infiniteQueryBehavior\n} from \"./infiniteQueryBehavior.js\";\nvar InfiniteQueryObserver = class extends QueryObserver {\n  constructor(client, options) {\n    super(client, options);\n  }\n  bindMethods() {\n    super.bindMethods();\n    this.fetchNextPage = this.fetchNextPage.bind(this);\n    this.fetchPreviousPage = this.fetchPreviousPage.bind(this);\n  }\n  setOptions(options) {\n    super.setOptions({\n      ...options,\n      behavior: infiniteQueryBehavior()\n    });\n  }\n  getOptimisticResult(options) {\n    options.behavior = infiniteQueryBehavior();\n    return super.getOptimisticResult(options);\n  }\n  fetchNextPage(options) {\n    return this.fetch({\n      ...options,\n      meta: {\n        fetchMore: { direction: \"forward\" }\n      }\n    });\n  }\n  fetchPreviousPage(options) {\n    return this.fetch({\n      ...options,\n      meta: {\n        fetchMore: { direction: \"backward\" }\n      }\n    });\n  }\n  createResult(query, options) {\n    const { state } = query;\n    const parentResult = super.createResult(query, options);\n    const { isFetching, isRefetching, isError, isRefetchError } = parentResult;\n    const fetchDirection = state.fetchMeta?.fetchMore?.direction;\n    const isFetchNextPageError = isError && fetchDirection === \"forward\";\n    const isFetchingNextPage = isFetching && fetchDirection === \"forward\";\n    const isFetchPreviousPageError = isError && fetchDirection === \"backward\";\n    const isFetchingPreviousPage = isFetching && fetchDirection === \"backward\";\n    const result = {\n      ...parentResult,\n      fetchNextPage: this.fetchNextPage,\n      fetchPreviousPage: this.fetchPreviousPage,\n      hasNextPage: hasNextPage(options, state.data),\n      hasPreviousPage: hasPreviousPage(options, state.data),\n      isFetchNextPageError,\n      isFetchingNextPage,\n      isFetchPreviousPageError,\n      isFetchingPreviousPage,\n      isRefetchError: isRefetchError && !isFetchNextPageError && !isFetchPreviousPageError,\n      isRefetching: isRefetching && !isFetchingNextPage && !isFetchingPreviousPage\n    };\n    return result;\n  }\n};\nexport {\n  InfiniteQueryObserver\n};\n//# sourceMappingURL=infiniteQueryObserver.js.map","// src/mutation.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Removable } from \"./removable.js\";\nimport { createRetryer } from \"./retryer.js\";\nvar Mutation = class extends Removable {\n  #client;\n  #observers;\n  #mutationCache;\n  #retryer;\n  constructor(config) {\n    super();\n    this.#client = config.client;\n    this.mutationId = config.mutationId;\n    this.#mutationCache = config.mutationCache;\n    this.#observers = [];\n    this.state = config.state || getDefaultState();\n    this.setOptions(config.options);\n    this.scheduleGc();\n  }\n  setOptions(options) {\n    this.options = options;\n    this.updateGcTime(this.options.gcTime);\n  }\n  get meta() {\n    return this.options.meta;\n  }\n  addObserver(observer) {\n    if (!this.#observers.includes(observer)) {\n      this.#observers.push(observer);\n      this.clearGcTimeout();\n      this.#mutationCache.notify({\n        type: \"observerAdded\",\n        mutation: this,\n        observer\n      });\n    }\n  }\n  removeObserver(observer) {\n    this.#observers = this.#observers.filter((x) => x !== observer);\n    this.scheduleGc();\n    this.#mutationCache.notify({\n      type: \"observerRemoved\",\n      mutation: this,\n      observer\n    });\n  }\n  optionalRemove() {\n    if (!this.#observers.length) {\n      if (this.state.status === \"pending\") {\n        this.scheduleGc();\n      } else {\n        this.#mutationCache.remove(this);\n      }\n    }\n  }\n  continue() {\n    return this.#retryer?.continue() ?? // continuing a mutation assumes that variables are set, mutation must have been dehydrated before\n    this.execute(this.state.variables);\n  }\n  async execute(variables) {\n    const onContinue = () => {\n      this.#dispatch({ type: \"continue\" });\n    };\n    const mutationFnContext = {\n      client: this.#client,\n      meta: this.options.meta,\n      mutationKey: this.options.mutationKey\n    };\n    this.#retryer = createRetryer({\n      fn: () => {\n        if (!this.options.mutationFn) {\n          return Promise.reject(new Error(\"No mutationFn found\"));\n        }\n        return this.options.mutationFn(variables, mutationFnContext);\n      },\n      onFail: (failureCount, error) => {\n        this.#dispatch({ type: \"failed\", failureCount, error });\n      },\n      onPause: () => {\n        this.#dispatch({ type: \"pause\" });\n      },\n      onContinue,\n      retry: this.options.retry ?? 0,\n      retryDelay: this.options.retryDelay,\n      networkMode: this.options.networkMode,\n      canRun: () => this.#mutationCache.canRun(this)\n    });\n    const restored = this.state.status === \"pending\";\n    const isPaused = !this.#retryer.canStart();\n    try {\n      if (restored) {\n        onContinue();\n      } else {\n        this.#dispatch({ type: \"pending\", variables, isPaused });\n        await this.#mutationCache.config.onMutate?.(\n          variables,\n          this,\n          mutationFnContext\n        );\n        const context = await this.options.onMutate?.(\n          variables,\n          mutationFnContext\n        );\n        if (context !== this.state.context) {\n          this.#dispatch({\n            type: \"pending\",\n            context,\n            variables,\n            isPaused\n          });\n        }\n      }\n      const data = await this.#retryer.start();\n      await this.#mutationCache.config.onSuccess?.(\n        data,\n        variables,\n        this.state.context,\n        this,\n        mutationFnContext\n      );\n      await this.options.onSuccess?.(\n        data,\n        variables,\n        this.state.context,\n        mutationFnContext\n      );\n      await this.#mutationCache.config.onSettled?.(\n        data,\n        null,\n        this.state.variables,\n        this.state.context,\n        this,\n        mutationFnContext\n      );\n      await this.options.onSettled?.(\n        data,\n        null,\n        variables,\n        this.state.context,\n        mutationFnContext\n      );\n      this.#dispatch({ type: \"success\", data });\n      return data;\n    } catch (error) {\n      try {\n        await this.#mutationCache.config.onError?.(\n          error,\n          variables,\n          this.state.context,\n          this,\n          mutationFnContext\n        );\n        await this.options.onError?.(\n          error,\n          variables,\n          this.state.context,\n          mutationFnContext\n        );\n        await this.#mutationCache.config.onSettled?.(\n          void 0,\n          error,\n          this.state.variables,\n          this.state.context,\n          this,\n          mutationFnContext\n        );\n        await this.options.onSettled?.(\n          void 0,\n          error,\n          variables,\n          this.state.context,\n          mutationFnContext\n        );\n        throw error;\n      } finally {\n        this.#dispatch({ type: \"error\", error });\n      }\n    } finally {\n      this.#mutationCache.runNext(this);\n    }\n  }\n  #dispatch(action) {\n    const reducer = (state) => {\n      switch (action.type) {\n        case \"failed\":\n          return {\n            ...state,\n            failureCount: action.failureCount,\n            failureReason: action.error\n          };\n        case \"pause\":\n          return {\n            ...state,\n            isPaused: true\n          };\n        case \"continue\":\n          return {\n            ...state,\n            isPaused: false\n          };\n        case \"pending\":\n          return {\n            ...state,\n            context: action.context,\n            data: void 0,\n            failureCount: 0,\n            failureReason: null,\n            error: null,\n            isPaused: action.isPaused,\n            status: \"pending\",\n            variables: action.variables,\n            submittedAt: Date.now()\n          };\n        case \"success\":\n          return {\n            ...state,\n            data: action.data,\n            failureCount: 0,\n            failureReason: null,\n            error: null,\n            status: \"success\",\n            isPaused: false\n          };\n        case \"error\":\n          return {\n            ...state,\n            data: void 0,\n            error: action.error,\n            failureCount: state.failureCount + 1,\n            failureReason: action.error,\n            isPaused: false,\n            status: \"error\"\n          };\n      }\n    };\n    this.state = reducer(this.state);\n    notifyManager.batch(() => {\n      this.#observers.forEach((observer) => {\n        observer.onMutationUpdate(action);\n      });\n      this.#mutationCache.notify({\n        mutation: this,\n        type: \"updated\",\n        action\n      });\n    });\n  }\n};\nfunction getDefaultState() {\n  return {\n    context: void 0,\n    data: void 0,\n    error: null,\n    failureCount: 0,\n    failureReason: null,\n    isPaused: false,\n    status: \"idle\",\n    variables: void 0,\n    submittedAt: 0\n  };\n}\nexport {\n  Mutation,\n  getDefaultState\n};\n//# sourceMappingURL=mutation.js.map","// src/mutationCache.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Mutation } from \"./mutation.js\";\nimport { matchMutation, noop } from \"./utils.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar MutationCache = class extends Subscribable {\n  constructor(config = {}) {\n    super();\n    this.config = config;\n    this.#mutations = /* @__PURE__ */ new Set();\n    this.#scopes = /* @__PURE__ */ new Map();\n    this.#mutationId = 0;\n  }\n  #mutations;\n  #scopes;\n  #mutationId;\n  build(client, options, state) {\n    const mutation = new Mutation({\n      client,\n      mutationCache: this,\n      mutationId: ++this.#mutationId,\n      options: client.defaultMutationOptions(options),\n      state\n    });\n    this.add(mutation);\n    return mutation;\n  }\n  add(mutation) {\n    this.#mutations.add(mutation);\n    const scope = scopeFor(mutation);\n    if (typeof scope === \"string\") {\n      const scopedMutations = this.#scopes.get(scope);\n      if (scopedMutations) {\n        scopedMutations.push(mutation);\n      } else {\n        this.#scopes.set(scope, [mutation]);\n      }\n    }\n    this.notify({ type: \"added\", mutation });\n  }\n  remove(mutation) {\n    if (this.#mutations.delete(mutation)) {\n      const scope = scopeFor(mutation);\n      if (typeof scope === \"string\") {\n        const scopedMutations = this.#scopes.get(scope);\n        if (scopedMutations) {\n          if (scopedMutations.length > 1) {\n            const index = scopedMutations.indexOf(mutation);\n            if (index !== -1) {\n              scopedMutations.splice(index, 1);\n            }\n          } else if (scopedMutations[0] === mutation) {\n            this.#scopes.delete(scope);\n          }\n        }\n      }\n    }\n    this.notify({ type: \"removed\", mutation });\n  }\n  canRun(mutation) {\n    const scope = scopeFor(mutation);\n    if (typeof scope === \"string\") {\n      const mutationsWithSameScope = this.#scopes.get(scope);\n      const firstPendingMutation = mutationsWithSameScope?.find(\n        (m) => m.state.status === \"pending\"\n      );\n      return !firstPendingMutation || firstPendingMutation === mutation;\n    } else {\n      return true;\n    }\n  }\n  runNext(mutation) {\n    const scope = scopeFor(mutation);\n    if (typeof scope === \"string\") {\n      const foundMutation = this.#scopes.get(scope)?.find((m) => m !== mutation && m.state.isPaused);\n      return foundMutation?.continue() ?? Promise.resolve();\n    } else {\n      return Promise.resolve();\n    }\n  }\n  clear() {\n    notifyManager.batch(() => {\n      this.#mutations.forEach((mutation) => {\n        this.notify({ type: \"removed\", mutation });\n      });\n      this.#mutations.clear();\n      this.#scopes.clear();\n    });\n  }\n  getAll() {\n    return Array.from(this.#mutations);\n  }\n  find(filters) {\n    const defaultedFilters = { exact: true, ...filters };\n    return this.getAll().find(\n      (mutation) => matchMutation(defaultedFilters, mutation)\n    );\n  }\n  findAll(filters = {}) {\n    return this.getAll().filter((mutation) => matchMutation(filters, mutation));\n  }\n  notify(event) {\n    notifyManager.batch(() => {\n      this.listeners.forEach((listener) => {\n        listener(event);\n      });\n    });\n  }\n  resumePausedMutations() {\n    const pausedMutations = this.getAll().filter((x) => x.state.isPaused);\n    return notifyManager.batch(\n      () => Promise.all(\n        pausedMutations.map((mutation) => mutation.continue().catch(noop))\n      )\n    );\n  }\n};\nfunction scopeFor(mutation) {\n  return mutation.options.scope?.id;\n}\nexport {\n  MutationCache\n};\n//# sourceMappingURL=mutationCache.js.map","// src/mutationObserver.ts\nimport { getDefaultState } from \"./mutation.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { hashKey, shallowEqualObjects } from \"./utils.js\";\nvar MutationObserver = class extends Subscribable {\n  #client;\n  #currentResult = void 0;\n  #currentMutation;\n  #mutateOptions;\n  constructor(client, options) {\n    super();\n    this.#client = client;\n    this.setOptions(options);\n    this.bindMethods();\n    this.#updateResult();\n  }\n  bindMethods() {\n    this.mutate = this.mutate.bind(this);\n    this.reset = this.reset.bind(this);\n  }\n  setOptions(options) {\n    const prevOptions = this.options;\n    this.options = this.#client.defaultMutationOptions(options);\n    if (!shallowEqualObjects(this.options, prevOptions)) {\n      this.#client.getMutationCache().notify({\n        type: \"observerOptionsUpdated\",\n        mutation: this.#currentMutation,\n        observer: this\n      });\n    }\n    if (prevOptions?.mutationKey && this.options.mutationKey && hashKey(prevOptions.mutationKey) !== hashKey(this.options.mutationKey)) {\n      this.reset();\n    } else if (this.#currentMutation?.state.status === \"pending\") {\n      this.#currentMutation.setOptions(this.options);\n    }\n  }\n  onUnsubscribe() {\n    if (!this.hasListeners()) {\n      this.#currentMutation?.removeObserver(this);\n    }\n  }\n  onMutationUpdate(action) {\n    this.#updateResult();\n    this.#notify(action);\n  }\n  getCurrentResult() {\n    return this.#currentResult;\n  }\n  reset() {\n    this.#currentMutation?.removeObserver(this);\n    this.#currentMutation = void 0;\n    this.#updateResult();\n    this.#notify();\n  }\n  mutate(variables, options) {\n    this.#mutateOptions = options;\n    this.#currentMutation?.removeObserver(this);\n    this.#currentMutation = this.#client.getMutationCache().build(this.#client, this.options);\n    this.#currentMutation.addObserver(this);\n    return this.#currentMutation.execute(variables);\n  }\n  #updateResult() {\n    const state = this.#currentMutation?.state ?? getDefaultState();\n    this.#currentResult = {\n      ...state,\n      isPending: state.status === \"pending\",\n      isSuccess: state.status === \"success\",\n      isError: state.status === \"error\",\n      isIdle: state.status === \"idle\",\n      mutate: this.mutate,\n      reset: this.reset\n    };\n  }\n  #notify(action) {\n    notifyManager.batch(() => {\n      if (this.#mutateOptions && this.hasListeners()) {\n        const variables = this.#currentResult.variables;\n        const onMutateResult = this.#currentResult.context;\n        const context = {\n          client: this.#client,\n          meta: this.options.meta,\n          mutationKey: this.options.mutationKey\n        };\n        if (action?.type === \"success\") {\n          this.#mutateOptions.onSuccess?.(\n            action.data,\n            variables,\n            onMutateResult,\n            context\n          );\n          this.#mutateOptions.onSettled?.(\n            action.data,\n            null,\n            variables,\n            onMutateResult,\n            context\n          );\n        } else if (action?.type === \"error\") {\n          this.#mutateOptions.onError?.(\n            action.error,\n            variables,\n            onMutateResult,\n            context\n          );\n          this.#mutateOptions.onSettled?.(\n            void 0,\n            action.error,\n            variables,\n            onMutateResult,\n            context\n          );\n        }\n      }\n      this.listeners.forEach((listener) => {\n        listener(this.#currentResult);\n      });\n    });\n  }\n};\nexport {\n  MutationObserver\n};\n//# sourceMappingURL=mutationObserver.js.map","// src/queriesObserver.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { QueryObserver } from \"./queryObserver.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { replaceEqualDeep, shallowEqualObjects } from \"./utils.js\";\nfunction difference(array1, array2) {\n  const excludeSet = new Set(array2);\n  return array1.filter((x) => !excludeSet.has(x));\n}\nfunction replaceAt(array, index, value) {\n  const copy = array.slice(0);\n  copy[index] = value;\n  return copy;\n}\nvar QueriesObserver = class extends Subscribable {\n  #client;\n  #result;\n  #queries;\n  #options;\n  #observers;\n  #combinedResult;\n  #lastCombine;\n  #lastResult;\n  #observerMatches = [];\n  constructor(client, queries, options) {\n    super();\n    this.#client = client;\n    this.#options = options;\n    this.#queries = [];\n    this.#observers = [];\n    this.#result = [];\n    this.setQueries(queries);\n  }\n  onSubscribe() {\n    if (this.listeners.size === 1) {\n      this.#observers.forEach((observer) => {\n        observer.subscribe((result) => {\n          this.#onUpdate(observer, result);\n        });\n      });\n    }\n  }\n  onUnsubscribe() {\n    if (!this.listeners.size) {\n      this.destroy();\n    }\n  }\n  destroy() {\n    this.listeners = /* @__PURE__ */ new Set();\n    this.#observers.forEach((observer) => {\n      observer.destroy();\n    });\n  }\n  setQueries(queries, options) {\n    this.#queries = queries;\n    this.#options = options;\n    if (process.env.NODE_ENV !== \"production\") {\n      const queryHashes = queries.map(\n        (query) => this.#client.defaultQueryOptions(query).queryHash\n      );\n      if (new Set(queryHashes).size !== queryHashes.length) {\n        console.warn(\n          \"[QueriesObserver]: Duplicate Queries found. This might result in unexpected behavior.\"\n        );\n      }\n    }\n    notifyManager.batch(() => {\n      const prevObservers = this.#observers;\n      const newObserverMatches = this.#findMatchingObservers(this.#queries);\n      this.#observerMatches = newObserverMatches;\n      newObserverMatches.forEach(\n        (match) => match.observer.setOptions(match.defaultedQueryOptions)\n      );\n      const newObservers = newObserverMatches.map((match) => match.observer);\n      const newResult = newObservers.map(\n        (observer) => observer.getCurrentResult()\n      );\n      const hasLengthChange = prevObservers.length !== newObservers.length;\n      const hasIndexChange = newObservers.some(\n        (observer, index) => observer !== prevObservers[index]\n      );\n      const hasStructuralChange = hasLengthChange || hasIndexChange;\n      const hasResultChange = hasStructuralChange ? true : newResult.some((result, index) => {\n        const prev = this.#result[index];\n        return !prev || !shallowEqualObjects(result, prev);\n      });\n      if (!hasStructuralChange && !hasResultChange) return;\n      if (hasStructuralChange) {\n        this.#observers = newObservers;\n      }\n      this.#result = newResult;\n      if (!this.hasListeners()) return;\n      if (hasStructuralChange) {\n        difference(prevObservers, newObservers).forEach((observer) => {\n          observer.destroy();\n        });\n        difference(newObservers, prevObservers).forEach((observer) => {\n          observer.subscribe((result) => {\n            this.#onUpdate(observer, result);\n          });\n        });\n      }\n      this.#notify();\n    });\n  }\n  getCurrentResult() {\n    return this.#result;\n  }\n  getQueries() {\n    return this.#observers.map((observer) => observer.getCurrentQuery());\n  }\n  getObservers() {\n    return this.#observers;\n  }\n  getOptimisticResult(queries, combine) {\n    const matches = this.#findMatchingObservers(queries);\n    const result = matches.map(\n      (match) => match.observer.getOptimisticResult(match.defaultedQueryOptions)\n    );\n    return [\n      result,\n      (r) => {\n        return this.#combineResult(r ?? result, combine);\n      },\n      () => {\n        return this.#trackResult(result, matches);\n      }\n    ];\n  }\n  #trackResult(result, matches) {\n    return matches.map((match, index) => {\n      const observerResult = result[index];\n      return !match.defaultedQueryOptions.notifyOnChangeProps ? match.observer.trackResult(observerResult, (accessedProp) => {\n        matches.forEach((m) => {\n          m.observer.trackProp(accessedProp);\n        });\n      }) : observerResult;\n    });\n  }\n  #combineResult(input, combine) {\n    if (combine) {\n      if (!this.#combinedResult || this.#result !== this.#lastResult || combine !== this.#lastCombine) {\n        this.#lastCombine = combine;\n        this.#lastResult = this.#result;\n        this.#combinedResult = replaceEqualDeep(\n          this.#combinedResult,\n          combine(input)\n        );\n      }\n      return this.#combinedResult;\n    }\n    return input;\n  }\n  #findMatchingObservers(queries) {\n    const prevObserversMap = new Map(\n      this.#observers.map((observer) => [observer.options.queryHash, observer])\n    );\n    const observers = [];\n    queries.forEach((options) => {\n      const defaultedOptions = this.#client.defaultQueryOptions(options);\n      const match = prevObserversMap.get(defaultedOptions.queryHash);\n      if (match) {\n        observers.push({\n          defaultedQueryOptions: defaultedOptions,\n          observer: match\n        });\n      } else {\n        observers.push({\n          defaultedQueryOptions: defaultedOptions,\n          observer: new QueryObserver(this.#client, defaultedOptions)\n        });\n      }\n    });\n    return observers;\n  }\n  #onUpdate(observer, result) {\n    const index = this.#observers.indexOf(observer);\n    if (index !== -1) {\n      this.#result = replaceAt(this.#result, index, result);\n      this.#notify();\n    }\n  }\n  #notify() {\n    if (this.hasListeners()) {\n      const previousResult = this.#combinedResult;\n      const newTracked = this.#trackResult(this.#result, this.#observerMatches);\n      const newResult = this.#combineResult(newTracked, this.#options?.combine);\n      if (previousResult !== newResult) {\n        notifyManager.batch(() => {\n          this.listeners.forEach((listener) => {\n            listener(this.#result);\n          });\n        });\n      }\n    }\n  }\n};\nexport {\n  QueriesObserver\n};\n//# sourceMappingURL=queriesObserver.js.map","// src/queryCache.ts\nimport { hashQueryKeyByOptions, matchQuery } from \"./utils.js\";\nimport { Query } from \"./query.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar QueryCache = class extends Subscribable {\n  constructor(config = {}) {\n    super();\n    this.config = config;\n    this.#queries = /* @__PURE__ */ new Map();\n  }\n  #queries;\n  build(client, options, state) {\n    const queryKey = options.queryKey;\n    const queryHash = options.queryHash ?? hashQueryKeyByOptions(queryKey, options);\n    let query = this.get(queryHash);\n    if (!query) {\n      query = new Query({\n        client,\n        queryKey,\n        queryHash,\n        options: client.defaultQueryOptions(options),\n        state,\n        defaultOptions: client.getQueryDefaults(queryKey)\n      });\n      this.add(query);\n    }\n    return query;\n  }\n  add(query) {\n    if (!this.#queries.has(query.queryHash)) {\n      this.#queries.set(query.queryHash, query);\n      this.notify({\n        type: \"added\",\n        query\n      });\n    }\n  }\n  remove(query) {\n    const queryInMap = this.#queries.get(query.queryHash);\n    if (queryInMap) {\n      query.destroy();\n      if (queryInMap === query) {\n        this.#queries.delete(query.queryHash);\n      }\n      this.notify({ type: \"removed\", query });\n    }\n  }\n  clear() {\n    notifyManager.batch(() => {\n      this.getAll().forEach((query) => {\n        this.remove(query);\n      });\n    });\n  }\n  get(queryHash) {\n    return this.#queries.get(queryHash);\n  }\n  getAll() {\n    return [...this.#queries.values()];\n  }\n  find(filters) {\n    const defaultedFilters = { exact: true, ...filters };\n    return this.getAll().find(\n      (query) => matchQuery(defaultedFilters, query)\n    );\n  }\n  findAll(filters = {}) {\n    const queries = this.getAll();\n    return Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) : queries;\n  }\n  notify(event) {\n    notifyManager.batch(() => {\n      this.listeners.forEach((listener) => {\n        listener(event);\n      });\n    });\n  }\n  onFocus() {\n    notifyManager.batch(() => {\n      this.getAll().forEach((query) => {\n        query.onFocus();\n      });\n    });\n  }\n  onOnline() {\n    notifyManager.batch(() => {\n      this.getAll().forEach((query) => {\n        query.onOnline();\n      });\n    });\n  }\n};\nexport {\n  QueryCache\n};\n//# sourceMappingURL=queryCache.js.map","// src/queryClient.ts\nimport {\n  functionalUpdate,\n  hashKey,\n  hashQueryKeyByOptions,\n  noop,\n  partialMatchKey,\n  resolveStaleTime,\n  skipToken\n} from \"./utils.js\";\nimport { QueryCache } from \"./queryCache.js\";\nimport { MutationCache } from \"./mutationCache.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { infiniteQueryBehavior } from \"./infiniteQueryBehavior.js\";\nvar QueryClient = class {\n  #queryCache;\n  #mutationCache;\n  #defaultOptions;\n  #queryDefaults;\n  #mutationDefaults;\n  #mountCount;\n  #unsubscribeFocus;\n  #unsubscribeOnline;\n  constructor(config = {}) {\n    this.#queryCache = config.queryCache || new QueryCache();\n    this.#mutationCache = config.mutationCache || new MutationCache();\n    this.#defaultOptions = config.defaultOptions || {};\n    this.#queryDefaults = /* @__PURE__ */ new Map();\n    this.#mutationDefaults = /* @__PURE__ */ new Map();\n    this.#mountCount = 0;\n  }\n  mount() {\n    this.#mountCount++;\n    if (this.#mountCount !== 1) return;\n    this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n      if (focused) {\n        await this.resumePausedMutations();\n        this.#queryCache.onFocus();\n      }\n    });\n    this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n      if (online) {\n        await this.resumePausedMutations();\n        this.#queryCache.onOnline();\n      }\n    });\n  }\n  unmount() {\n    this.#mountCount--;\n    if (this.#mountCount !== 0) return;\n    this.#unsubscribeFocus?.();\n    this.#unsubscribeFocus = void 0;\n    this.#unsubscribeOnline?.();\n    this.#unsubscribeOnline = void 0;\n  }\n  isFetching(filters) {\n    return this.#queryCache.findAll({ ...filters, fetchStatus: \"fetching\" }).length;\n  }\n  isMutating(filters) {\n    return this.#mutationCache.findAll({ ...filters, status: \"pending\" }).length;\n  }\n  /**\n   * Imperative (non-reactive) way to retrieve data for a QueryKey.\n   * Should only be used in callbacks or functions where reading the latest data is necessary, e.g. for optimistic updates.\n   *\n   * Hint: Do not use this function inside a component, because it won't receive updates.\n   * Use `useQuery` to create a `QueryObserver` that subscribes to changes.\n   */\n  getQueryData(queryKey) {\n    const options = this.defaultQueryOptions({ queryKey });\n    return this.#queryCache.get(options.queryHash)?.state.data;\n  }\n  ensureQueryData(options) {\n    const defaultedOptions = this.defaultQueryOptions(options);\n    const query = this.#queryCache.build(this, defaultedOptions);\n    const cachedData = query.state.data;\n    if (cachedData === void 0) {\n      return this.fetchQuery(options);\n    }\n    if (options.revalidateIfStale && query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))) {\n      void this.prefetchQuery(defaultedOptions);\n    }\n    return Promise.resolve(cachedData);\n  }\n  getQueriesData(filters) {\n    return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n      const data = state.data;\n      return [queryKey, data];\n    });\n  }\n  setQueryData(queryKey, updater, options) {\n    const defaultedOptions = this.defaultQueryOptions({ queryKey });\n    const query = this.#queryCache.get(\n      defaultedOptions.queryHash\n    );\n    const prevData = query?.state.data;\n    const data = functionalUpdate(updater, prevData);\n    if (data === void 0) {\n      return void 0;\n    }\n    return this.#queryCache.build(this, defaultedOptions).setData(data, { ...options, manual: true });\n  }\n  setQueriesData(filters, updater, options) {\n    return notifyManager.batch(\n      () => this.#queryCache.findAll(filters).map(({ queryKey }) => [\n        queryKey,\n        this.setQueryData(queryKey, updater, options)\n      ])\n    );\n  }\n  getQueryState(queryKey) {\n    const options = this.defaultQueryOptions({ queryKey });\n    return this.#queryCache.get(\n      options.queryHash\n    )?.state;\n  }\n  removeQueries(filters) {\n    const queryCache = this.#queryCache;\n    notifyManager.batch(() => {\n      queryCache.findAll(filters).forEach((query) => {\n        queryCache.remove(query);\n      });\n    });\n  }\n  resetQueries(filters, options) {\n    const queryCache = this.#queryCache;\n    return notifyManager.batch(() => {\n      queryCache.findAll(filters).forEach((query) => {\n        query.reset();\n      });\n      return this.refetchQueries(\n        {\n          type: \"active\",\n          ...filters\n        },\n        options\n      );\n    });\n  }\n  cancelQueries(filters, cancelOptions = {}) {\n    const defaultedCancelOptions = { revert: true, ...cancelOptions };\n    const promises = notifyManager.batch(\n      () => this.#queryCache.findAll(filters).map((query) => query.cancel(defaultedCancelOptions))\n    );\n    return Promise.all(promises).then(noop).catch(noop);\n  }\n  invalidateQueries(filters, options = {}) {\n    return notifyManager.batch(() => {\n      this.#queryCache.findAll(filters).forEach((query) => {\n        query.invalidate();\n      });\n      if (filters?.refetchType === \"none\") {\n        return Promise.resolve();\n      }\n      return this.refetchQueries(\n        {\n          ...filters,\n          type: filters?.refetchType ?? filters?.type ?? \"active\"\n        },\n        options\n      );\n    });\n  }\n  refetchQueries(filters, options = {}) {\n    const fetchOptions = {\n      ...options,\n      cancelRefetch: options.cancelRefetch ?? true\n    };\n    const promises = notifyManager.batch(\n      () => this.#queryCache.findAll(filters).filter((query) => !query.isDisabled() && !query.isStatic()).map((query) => {\n        let promise = query.fetch(void 0, fetchOptions);\n        if (!fetchOptions.throwOnError) {\n          promise = promise.catch(noop);\n        }\n        return query.state.fetchStatus === \"paused\" ? Promise.resolve() : promise;\n      })\n    );\n    return Promise.all(promises).then(noop);\n  }\n  fetchQuery(options) {\n    const defaultedOptions = this.defaultQueryOptions(options);\n    if (defaultedOptions.retry === void 0) {\n      defaultedOptions.retry = false;\n    }\n    const query = this.#queryCache.build(this, defaultedOptions);\n    return query.isStaleByTime(\n      resolveStaleTime(defaultedOptions.staleTime, query)\n    ) ? query.fetch(defaultedOptions) : Promise.resolve(query.state.data);\n  }\n  prefetchQuery(options) {\n    return this.fetchQuery(options).then(noop).catch(noop);\n  }\n  fetchInfiniteQuery(options) {\n    options.behavior = infiniteQueryBehavior(options.pages);\n    return this.fetchQuery(options);\n  }\n  prefetchInfiniteQuery(options) {\n    return this.fetchInfiniteQuery(options).then(noop).catch(noop);\n  }\n  ensureInfiniteQueryData(options) {\n    options.behavior = infiniteQueryBehavior(options.pages);\n    return this.ensureQueryData(options);\n  }\n  resumePausedMutations() {\n    if (onlineManager.isOnline()) {\n      return this.#mutationCache.resumePausedMutations();\n    }\n    return Promise.resolve();\n  }\n  getQueryCache() {\n    return this.#queryCache;\n  }\n  getMutationCache() {\n    return this.#mutationCache;\n  }\n  getDefaultOptions() {\n    return this.#defaultOptions;\n  }\n  setDefaultOptions(options) {\n    this.#defaultOptions = options;\n  }\n  setQueryDefaults(queryKey, options) {\n    this.#queryDefaults.set(hashKey(queryKey), {\n      queryKey,\n      defaultOptions: options\n    });\n  }\n  getQueryDefaults(queryKey) {\n    const defaults = [...this.#queryDefaults.values()];\n    const result = {};\n    defaults.forEach((queryDefault) => {\n      if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n        Object.assign(result, queryDefault.defaultOptions);\n      }\n    });\n    return result;\n  }\n  setMutationDefaults(mutationKey, options) {\n    this.#mutationDefaults.set(hashKey(mutationKey), {\n      mutationKey,\n      defaultOptions: options\n    });\n  }\n  getMutationDefaults(mutationKey) {\n    const defaults = [...this.#mutationDefaults.values()];\n    const result = {};\n    defaults.forEach((queryDefault) => {\n      if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n        Object.assign(result, queryDefault.defaultOptions);\n      }\n    });\n    return result;\n  }\n  defaultQueryOptions(options) {\n    if (options._defaulted) {\n      return options;\n    }\n    const defaultedOptions = {\n      ...this.#defaultOptions.queries,\n      ...this.getQueryDefaults(options.queryKey),\n      ...options,\n      _defaulted: true\n    };\n    if (!defaultedOptions.queryHash) {\n      defaultedOptions.queryHash = hashQueryKeyByOptions(\n        defaultedOptions.queryKey,\n        defaultedOptions\n      );\n    }\n    if (defaultedOptions.refetchOnReconnect === void 0) {\n      defaultedOptions.refetchOnReconnect = defaultedOptions.networkMode !== \"always\";\n    }\n    if (defaultedOptions.throwOnError === void 0) {\n      defaultedOptions.throwOnError = !!defaultedOptions.suspense;\n    }\n    if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n      defaultedOptions.networkMode = \"offlineFirst\";\n    }\n    if (defaultedOptions.queryFn === skipToken) {\n      defaultedOptions.enabled = false;\n    }\n    return defaultedOptions;\n  }\n  defaultMutationOptions(options) {\n    if (options?._defaulted) {\n      return options;\n    }\n    return {\n      ...this.#defaultOptions.mutations,\n      ...options?.mutationKey && this.getMutationDefaults(options.mutationKey),\n      ...options,\n      _defaulted: true\n    };\n  }\n  clear() {\n    this.#queryCache.clear();\n    this.#mutationCache.clear();\n  }\n};\nexport {\n  QueryClient\n};\n//# sourceMappingURL=queryClient.js.map","\"use client\";\n\n// src/QueryClientProvider.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar QueryClientContext = React.createContext(\n  void 0\n);\nvar useQueryClient = (queryClient) => {\n  const client = React.useContext(QueryClientContext);\n  if (queryClient) {\n    return queryClient;\n  }\n  if (!client) {\n    throw new Error(\"No QueryClient set, use QueryClientProvider to set one\");\n  }\n  return client;\n};\nvar QueryClientProvider = ({\n  client,\n  children\n}) => {\n  React.useEffect(() => {\n    client.mount();\n    return () => {\n      client.unmount();\n    };\n  }, [client]);\n  return /* @__PURE__ */ jsx(QueryClientContext.Provider, { value: client, children });\n};\nexport {\n  QueryClientContext,\n  QueryClientProvider,\n  useQueryClient\n};\n//# sourceMappingURL=QueryClientProvider.js.map","\"use client\";\n\n// src/IsRestoringProvider.ts\nimport * as React from \"react\";\nvar IsRestoringContext = React.createContext(false);\nvar useIsRestoring = () => React.useContext(IsRestoringContext);\nvar IsRestoringProvider = IsRestoringContext.Provider;\nexport {\n  IsRestoringProvider,\n  useIsRestoring\n};\n//# sourceMappingURL=IsRestoringProvider.js.map","\"use client\";\n\n// src/QueryErrorResetBoundary.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createValue() {\n  let isReset = false;\n  return {\n    clearReset: () => {\n      isReset = false;\n    },\n    reset: () => {\n      isReset = true;\n    },\n    isReset: () => {\n      return isReset;\n    }\n  };\n}\nvar QueryErrorResetBoundaryContext = React.createContext(createValue());\nvar useQueryErrorResetBoundary = () => React.useContext(QueryErrorResetBoundaryContext);\nvar QueryErrorResetBoundary = ({\n  children\n}) => {\n  const [value] = React.useState(() => createValue());\n  return /* @__PURE__ */ jsx(QueryErrorResetBoundaryContext.Provider, { value, children: typeof children === \"function\" ? children(value) : children });\n};\nexport {\n  QueryErrorResetBoundary,\n  useQueryErrorResetBoundary\n};\n//# sourceMappingURL=QueryErrorResetBoundary.js.map","\"use client\";\n\n// src/errorBoundaryUtils.ts\nimport * as React from \"react\";\nimport { shouldThrowError } from \"@tanstack/query-core\";\nvar ensurePreventErrorBoundaryRetry = (options, errorResetBoundary) => {\n  if (options.suspense || options.throwOnError || options.experimental_prefetchInRender) {\n    if (!errorResetBoundary.isReset()) {\n      options.retryOnMount = false;\n    }\n  }\n};\nvar useClearResetErrorBoundary = (errorResetBoundary) => {\n  React.useEffect(() => {\n    errorResetBoundary.clearReset();\n  }, [errorResetBoundary]);\n};\nvar getHasError = ({\n  result,\n  errorResetBoundary,\n  throwOnError,\n  query,\n  suspense\n}) => {\n  return result.isError && !errorResetBoundary.isReset() && !result.isFetching && query && (suspense && result.data === void 0 || shouldThrowError(throwOnError, [result.error, query]));\n};\nexport {\n  ensurePreventErrorBoundaryRetry,\n  getHasError,\n  useClearResetErrorBoundary\n};\n//# sourceMappingURL=errorBoundaryUtils.js.map","// src/suspense.ts\nvar defaultThrowOnError = (_error, query) => query.state.data === void 0;\nvar ensureSuspenseTimers = (defaultedOptions) => {\n  if (defaultedOptions.suspense) {\n    const MIN_SUSPENSE_TIME_MS = 1e3;\n    const clamp = (value) => value === \"static\" ? value : Math.max(value ?? MIN_SUSPENSE_TIME_MS, MIN_SUSPENSE_TIME_MS);\n    const originalStaleTime = defaultedOptions.staleTime;\n    defaultedOptions.staleTime = typeof originalStaleTime === \"function\" ? (...args) => clamp(originalStaleTime(...args)) : clamp(originalStaleTime);\n    if (typeof defaultedOptions.gcTime === \"number\") {\n      defaultedOptions.gcTime = Math.max(\n        defaultedOptions.gcTime,\n        MIN_SUSPENSE_TIME_MS\n      );\n    }\n  }\n};\nvar willFetch = (result, isRestoring) => result.isLoading && result.isFetching && !isRestoring;\nvar shouldSuspend = (defaultedOptions, result) => defaultedOptions?.suspense && result.isPending;\nvar fetchOptimistic = (defaultedOptions, observer, errorResetBoundary) => observer.fetchOptimistic(defaultedOptions).catch(() => {\n  errorResetBoundary.clearReset();\n});\nexport {\n  defaultThrowOnError,\n  ensureSuspenseTimers,\n  fetchOptimistic,\n  shouldSuspend,\n  willFetch\n};\n//# sourceMappingURL=suspense.js.map","\"use client\";\n\n// src/useQueries.ts\nimport * as React from \"react\";\nimport {\n  QueriesObserver,\n  QueryObserver,\n  noop,\n  notifyManager\n} from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nimport { useIsRestoring } from \"./IsRestoringProvider.js\";\nimport { useQueryErrorResetBoundary } from \"./QueryErrorResetBoundary.js\";\nimport {\n  ensurePreventErrorBoundaryRetry,\n  getHasError,\n  useClearResetErrorBoundary\n} from \"./errorBoundaryUtils.js\";\nimport {\n  ensureSuspenseTimers,\n  fetchOptimistic,\n  shouldSuspend,\n  willFetch\n} from \"./suspense.js\";\nfunction useQueries({\n  queries,\n  ...options\n}, queryClient) {\n  const client = useQueryClient(queryClient);\n  const isRestoring = useIsRestoring();\n  const errorResetBoundary = useQueryErrorResetBoundary();\n  const defaultedQueries = React.useMemo(\n    () => queries.map((opts) => {\n      const defaultedOptions = client.defaultQueryOptions(\n        opts\n      );\n      defaultedOptions._optimisticResults = isRestoring ? \"isRestoring\" : \"optimistic\";\n      return defaultedOptions;\n    }),\n    [queries, client, isRestoring]\n  );\n  defaultedQueries.forEach((query) => {\n    ensureSuspenseTimers(query);\n    ensurePreventErrorBoundaryRetry(query, errorResetBoundary);\n  });\n  useClearResetErrorBoundary(errorResetBoundary);\n  const [observer] = React.useState(\n    () => new QueriesObserver(\n      client,\n      defaultedQueries,\n      options\n    )\n  );\n  const [optimisticResult, getCombinedResult, trackResult] = observer.getOptimisticResult(\n    defaultedQueries,\n    options.combine\n  );\n  const shouldSubscribe = !isRestoring && options.subscribed !== false;\n  React.useSyncExternalStore(\n    React.useCallback(\n      (onStoreChange) => shouldSubscribe ? observer.subscribe(notifyManager.batchCalls(onStoreChange)) : noop,\n      [observer, shouldSubscribe]\n    ),\n    () => observer.getCurrentResult(),\n    () => observer.getCurrentResult()\n  );\n  React.useEffect(() => {\n    observer.setQueries(\n      defaultedQueries,\n      options\n    );\n  }, [defaultedQueries, options, observer]);\n  const shouldAtLeastOneSuspend = optimisticResult.some(\n    (result, index) => shouldSuspend(defaultedQueries[index], result)\n  );\n  const suspensePromises = shouldAtLeastOneSuspend ? optimisticResult.flatMap((result, index) => {\n    const opts = defaultedQueries[index];\n    if (opts) {\n      const queryObserver = new QueryObserver(client, opts);\n      if (shouldSuspend(opts, result)) {\n        return fetchOptimistic(opts, queryObserver, errorResetBoundary);\n      } else if (willFetch(result, isRestoring)) {\n        void fetchOptimistic(opts, queryObserver, errorResetBoundary);\n      }\n    }\n    return [];\n  }) : [];\n  if (suspensePromises.length > 0) {\n    throw Promise.all(suspensePromises);\n  }\n  const firstSingleResultWhichShouldThrow = optimisticResult.find(\n    (result, index) => {\n      const query = defaultedQueries[index];\n      return query && getHasError({\n        result,\n        errorResetBoundary,\n        throwOnError: query.throwOnError,\n        query: client.getQueryCache().get(query.queryHash),\n        suspense: query.suspense\n      });\n    }\n  );\n  if (firstSingleResultWhichShouldThrow?.error) {\n    throw firstSingleResultWhichShouldThrow.error;\n  }\n  return getCombinedResult(trackResult());\n}\nexport {\n  useQueries\n};\n//# sourceMappingURL=useQueries.js.map","\"use client\";\n\n// src/useBaseQuery.ts\nimport * as React from \"react\";\nimport { isServer, noop, notifyManager } from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nimport { useQueryErrorResetBoundary } from \"./QueryErrorResetBoundary.js\";\nimport {\n  ensurePreventErrorBoundaryRetry,\n  getHasError,\n  useClearResetErrorBoundary\n} from \"./errorBoundaryUtils.js\";\nimport { useIsRestoring } from \"./IsRestoringProvider.js\";\nimport {\n  ensureSuspenseTimers,\n  fetchOptimistic,\n  shouldSuspend,\n  willFetch\n} from \"./suspense.js\";\nfunction useBaseQuery(options, Observer, queryClient) {\n  if (process.env.NODE_ENV !== \"production\") {\n    if (typeof options !== \"object\" || Array.isArray(options)) {\n      throw new Error(\n        'Bad argument type. Starting with v5, only the \"Object\" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object'\n      );\n    }\n  }\n  const isRestoring = useIsRestoring();\n  const errorResetBoundary = useQueryErrorResetBoundary();\n  const client = useQueryClient(queryClient);\n  const defaultedOptions = client.defaultQueryOptions(options);\n  client.getDefaultOptions().queries?._experimental_beforeQuery?.(\n    defaultedOptions\n  );\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!defaultedOptions.queryFn) {\n      console.error(\n        `[${defaultedOptions.queryHash}]: No queryFn was passed as an option, and no default queryFn was found. The queryFn parameter is only optional when using a default queryFn. More info here: https://tanstack.com/query/latest/docs/framework/react/guides/default-query-function`\n      );\n    }\n  }\n  defaultedOptions._optimisticResults = isRestoring ? \"isRestoring\" : \"optimistic\";\n  ensureSuspenseTimers(defaultedOptions);\n  ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary);\n  useClearResetErrorBoundary(errorResetBoundary);\n  const isNewCacheEntry = !client.getQueryCache().get(defaultedOptions.queryHash);\n  const [observer] = React.useState(\n    () => new Observer(\n      client,\n      defaultedOptions\n    )\n  );\n  const result = observer.getOptimisticResult(defaultedOptions);\n  const shouldSubscribe = !isRestoring && options.subscribed !== false;\n  React.useSyncExternalStore(\n    React.useCallback(\n      (onStoreChange) => {\n        const unsubscribe = shouldSubscribe ? observer.subscribe(notifyManager.batchCalls(onStoreChange)) : noop;\n        observer.updateResult();\n        return unsubscribe;\n      },\n      [observer, shouldSubscribe]\n    ),\n    () => observer.getCurrentResult(),\n    () => observer.getCurrentResult()\n  );\n  React.useEffect(() => {\n    observer.setOptions(defaultedOptions);\n  }, [defaultedOptions, observer]);\n  if (shouldSuspend(defaultedOptions, result)) {\n    throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary);\n  }\n  if (getHasError({\n    result,\n    errorResetBoundary,\n    throwOnError: defaultedOptions.throwOnError,\n    query: client.getQueryCache().get(defaultedOptions.queryHash),\n    suspense: defaultedOptions.suspense\n  })) {\n    throw result.error;\n  }\n  ;\n  client.getDefaultOptions().queries?._experimental_afterQuery?.(\n    defaultedOptions,\n    result\n  );\n  if (defaultedOptions.experimental_prefetchInRender && !isServer && willFetch(result, isRestoring)) {\n    const promise = isNewCacheEntry ? (\n      // Fetch immediately on render in order to ensure `.promise` is resolved even if the component is unmounted\n      fetchOptimistic(defaultedOptions, observer, errorResetBoundary)\n    ) : (\n      // subscribe to the \"cache promise\" so that we can finalize the currentThenable once data comes in\n      client.getQueryCache().get(defaultedOptions.queryHash)?.promise\n    );\n    promise?.catch(noop).finally(() => {\n      observer.updateResult();\n    });\n  }\n  return !defaultedOptions.notifyOnChangeProps ? observer.trackResult(result) : result;\n}\nexport {\n  useBaseQuery\n};\n//# sourceMappingURL=useBaseQuery.js.map","\"use client\";\n\n// src/useQuery.ts\nimport { QueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useQuery(options, queryClient) {\n  return useBaseQuery(options, QueryObserver, queryClient);\n}\nexport {\n  useQuery\n};\n//# sourceMappingURL=useQuery.js.map","// src/queryOptions.ts\nfunction queryOptions(options) {\n  return options;\n}\nexport {\n  queryOptions\n};\n//# sourceMappingURL=queryOptions.js.map","\"use client\";\n\n// src/useIsFetching.ts\nimport * as React from \"react\";\nimport { notifyManager } from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nfunction useIsFetching(filters, queryClient) {\n  const client = useQueryClient(queryClient);\n  const queryCache = client.getQueryCache();\n  return React.useSyncExternalStore(\n    React.useCallback(\n      (onStoreChange) => queryCache.subscribe(notifyManager.batchCalls(onStoreChange)),\n      [queryCache]\n    ),\n    () => client.isFetching(filters),\n    () => client.isFetching(filters)\n  );\n}\nexport {\n  useIsFetching\n};\n//# sourceMappingURL=useIsFetching.js.map","\"use client\";\n\n// src/useMutation.ts\nimport * as React from \"react\";\nimport {\n  MutationObserver,\n  noop,\n  notifyManager,\n  shouldThrowError\n} from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nfunction useMutation(options, queryClient) {\n  const client = useQueryClient(queryClient);\n  const [observer] = React.useState(\n    () => new MutationObserver(\n      client,\n      options\n    )\n  );\n  React.useEffect(() => {\n    observer.setOptions(options);\n  }, [observer, options]);\n  const result = React.useSyncExternalStore(\n    React.useCallback(\n      (onStoreChange) => observer.subscribe(notifyManager.batchCalls(onStoreChange)),\n      [observer]\n    ),\n    () => observer.getCurrentResult(),\n    () => observer.getCurrentResult()\n  );\n  const mutate = React.useCallback(\n    (variables, mutateOptions) => {\n      observer.mutate(variables, mutateOptions).catch(noop);\n    },\n    [observer]\n  );\n  if (result.error && shouldThrowError(observer.options.throwOnError, [result.error])) {\n    throw result.error;\n  }\n  return { ...result, mutate, mutateAsync: result.mutate };\n}\nexport {\n  useMutation\n};\n//# sourceMappingURL=useMutation.js.map","\"use client\";\n\n// src/useInfiniteQuery.ts\nimport { InfiniteQueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useInfiniteQuery(options, queryClient) {\n  return useBaseQuery(\n    options,\n    InfiniteQueryObserver,\n    queryClient\n  );\n}\nexport {\n  useInfiniteQuery\n};\n//# sourceMappingURL=useInfiniteQuery.js.map","import cx from \"clsx\"\nimport { faLocationDot } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { GrapherTrendArrow } from \"@ourworldindata/components\"\nimport { SearchChartHitDataDisplayProps } from \"@ourworldindata/types\"\n\nexport function SearchChartHitDataDisplay({\n    entityName,\n    endValue,\n    time,\n    unit,\n    startValue,\n    trend,\n    showLocationIcon,\n    className,\n}: SearchChartHitDataDisplayProps): React.ReactElement | null {\n    return (\n        <div className={cx(\"search-chart-hit-data-display\", className)}>\n            <div className=\"search-chart-hit-data-display__location\">\n                {showLocationIcon && (\n                    <FontAwesomeIcon\n                        className=\"search-chart-hit-data-display__icon\"\n                        icon={faLocationDot}\n                        size=\"sm\"\n                    />\n                )}\n                {entityName}\n            </div>\n            <div className=\"search-chart-hit-data-display__value\">\n                {startValue && (\n                    <>\n                        {startValue}\n                        <GrapherTrendArrow direction={trend ?? \"right\"} />\n                    </>\n                )}\n                {endValue}\n            </div>\n            <div className=\"search-chart-hit-data-display__unit-time\">\n                {unit && (\n                    <>\n                        <span className=\"search-chart-hit-data-display__unit\">\n                            {unit}\n                        </span>\n                        ,{\" \"}\n                    </>\n                )}\n                {time}\n            </div>\n        </div>\n    )\n}\n","function _define_property(obj, key, value) {\n    if (key in obj) {\n        Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });\n    } else obj[key] = value;\n\n    return obj;\n}\nexport { _define_property as _ };\n","import { _ as _define_property } from \"./_define_property.js\";\n\nfunction _object_spread(target) {\n    for (var i = 1; i < arguments.length; i++) {\n        var source = arguments[i] != null ? arguments[i] : {};\n        var ownKeys = Object.keys(source);\n\n        if (typeof Object.getOwnPropertySymbols === \"function\") {\n            ownKeys = ownKeys.concat(\n                Object.getOwnPropertySymbols(source).filter(function(sym) {\n                    return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n                })\n            );\n        }\n\n        ownKeys.forEach(function(key) {\n            _define_property(target, key, source[key]);\n        });\n    }\n\n    return target;\n}\nexport { _object_spread as _ };\n","function ownKeys(object, enumerableOnly) {\n    var keys = Object.keys(object);\n\n    if (Object.getOwnPropertySymbols) {\n        var symbols = Object.getOwnPropertySymbols(object);\n        if (enumerableOnly) {\n            symbols = symbols.filter(function(sym) {\n                return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n            });\n        }\n        keys.push.apply(keys, symbols);\n    }\n\n    return keys;\n}\nfunction _object_spread_props(target, source) {\n    source = source != null ? source : {};\n\n    if (Object.getOwnPropertyDescriptors) Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    else {\n        ownKeys(Object(source)).forEach(function(key) {\n            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n        });\n    }\n\n    return target;\n}\nexport { _object_spread_props as _ };\n","function _object_without_properties_loose(source, excluded) {\n    if (source == null) return {};\n\n    var target = {}, sourceKeys = Object.getOwnPropertyNames(source), key, i;\n    for (i = 0; i < sourceKeys.length; i++) {\n        key = sourceKeys[i];\n        if (excluded.indexOf(key) >= 0) continue;\n        if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n        target[key] = source[key];\n    }\n\n    return target;\n}\nexport { _object_without_properties_loose as _ };\n","import { _ as _object_without_properties_loose } from \"./_object_without_properties_loose.js\";\n\nfunction _object_without_properties(source, excluded) {\n    if (source == null) return {};\n\n    var target = {}, sourceKeys, key, i;\n    if (typeof Reflect !== \"undefined\" && Reflect.ownKeys) {\n        sourceKeys = Reflect.ownKeys(source);\n        for (i = 0; i < sourceKeys.length; i++) {\n            key = sourceKeys[i];\n            if (excluded.indexOf(key) >= 0) continue;\n            if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n            target[key] = source[key];\n        }\n\n        return target;\n    }\n\n    target = _object_without_properties_loose(source, excluded);\n    if (Object.getOwnPropertySymbols) {\n        sourceKeys = Object.getOwnPropertySymbols(source);\n        for (i = 0; i < sourceKeys.length; i++) {\n            key = sourceKeys[i];\n            if (excluded.indexOf(key) >= 0) continue;\n            if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n            target[key] = source[key];\n        }\n    }\n\n    return target;\n}\n\nexport { _object_without_properties as _ };\n","/**\n * This implementation is taken from Lodash implementation.\n * See: https://github.com/lodash/lodash/blob/4.17.11-npm/escape.js\n */ // Used to map characters to HTML entities.\nvar htmlEntities = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n};\n// Used to match HTML entities and HTML characters.\nvar regexUnescapedHtml = /[&<>\"']/g;\nvar regexHasUnescapedHtml = RegExp(regexUnescapedHtml.source);\n/**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n */ function escape(value) {\n    return value && regexHasUnescapedHtml.test(value) ? value.replace(regexUnescapedHtml, function(character) {\n        return htmlEntities[character];\n    }) : value;\n}\n/**\n * This implementation is taken from Lodash implementation.\n * See: https://github.com/lodash/lodash/blob/4.17.11-npm/unescape.js\n */ // Used to map HTML entities to characters.\nvar htmlCharacters = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n};\n// Used to match HTML entities and HTML characters.\nvar regexEscapedHtml = /&(amp|quot|lt|gt|#39);/g;\nvar regexHasEscapedHtml = RegExp(regexEscapedHtml.source);\n/**\n * Converts the HTML entities \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * characters.\n */ function unescape(value) {\n    return value && regexHasEscapedHtml.test(value) ? value.replace(regexEscapedHtml, function(character) {\n        return htmlCharacters[character];\n    }) : value;\n}\n\nexport { escape, unescape };\n","import { _ as _$4 } from '@swc/helpers/esm/_define_property.js';\nimport { _ as _$1 } from '@swc/helpers/esm/_extends.js';\nimport { _ } from '@swc/helpers/esm/_object_destructuring_empty.js';\nimport { _ as _$3 } from '@swc/helpers/esm/_object_spread.js';\nimport { _ as _$2 } from '@swc/helpers/esm/_object_spread_props.js';\nimport { escape } from './escape-html.js';\nimport { isPlainObject } from './isPlainObject.js';\n\nvar TAG_PLACEHOLDER = {\n    highlightPreTag: '__ais-highlight__',\n    highlightPostTag: '__/ais-highlight__'\n};\nvar TAG_REPLACEMENT = {\n    highlightPreTag: '<mark>',\n    highlightPostTag: '</mark>'\n};\n// @MAJOR: in the future, this should only escape, not replace\nfunction replaceTagsAndEscape(value) {\n    return escape(value).replace(new RegExp(TAG_PLACEHOLDER.highlightPreTag, 'g'), TAG_REPLACEMENT.highlightPreTag).replace(new RegExp(TAG_PLACEHOLDER.highlightPostTag, 'g'), TAG_REPLACEMENT.highlightPostTag);\n}\nfunction recursiveEscape(input) {\n    if (isPlainObject(input) && typeof input.value !== 'string') {\n        return Object.keys(input).reduce(function(acc, key) {\n            return _$2(_$3({}, acc), _$4({}, key, recursiveEscape(input[key])));\n        }, {});\n    }\n    if (Array.isArray(input)) {\n        return input.map(recursiveEscape);\n    }\n    return _$2(_$3({}, input), {\n        value: replaceTagsAndEscape(input.value)\n    });\n}\nfunction escapeHits(hits) {\n    if (hits.__escaped === undefined) {\n        // We don't override the value on hit because it will mutate the raw results\n        // instead we make a shallow copy and we assign the escaped values on it.\n        hits = hits.map(function(_0) {\n            _(_0); var hit = _$1({}, _0);\n            if (hit._highlightResult) {\n                hit._highlightResult = recursiveEscape(hit._highlightResult);\n            }\n            if (hit._snippetResult) {\n                hit._snippetResult = recursiveEscape(hit._snippetResult);\n            }\n            return hit;\n        });\n        hits.__escaped = true;\n    }\n    return hits;\n}\nfunction escapeFacets(facetHits) {\n    return facetHits.map(function(h) {\n        return _$2(_$3({}, h), {\n            highlighted: replaceTagsAndEscape(h.highlighted)\n        });\n    });\n}\n\nexport { TAG_PLACEHOLDER, TAG_REPLACEMENT, escapeFacets, escapeHits };\n","import { TAG_REPLACEMENT } from './escape-highlight.js';\n\nfunction getHighlightedParts(highlightedValue) {\n    // @MAJOR: this should use TAG_PLACEHOLDER\n    var highlightPostTag = TAG_REPLACEMENT.highlightPostTag, highlightPreTag = TAG_REPLACEMENT.highlightPreTag;\n    var splitByPreTag = highlightedValue.split(highlightPreTag);\n    var firstValue = splitByPreTag.shift();\n    var elements = !firstValue ? [] : [\n        {\n            value: firstValue,\n            isHighlighted: false\n        }\n    ];\n    splitByPreTag.forEach(function(split) {\n        var splitByPostTag = split.split(highlightPostTag);\n        elements.push({\n            value: splitByPostTag[0],\n            isHighlighted: true\n        });\n        if (splitByPostTag[1] !== '') {\n            elements.push({\n                value: splitByPostTag[1],\n                isHighlighted: false\n            });\n        }\n    });\n    return elements;\n}\n\nexport { getHighlightedParts };\n","function getPropertyByPath(object, path) {\n    var parts = Array.isArray(path) ? path : path.split('.');\n    return parts.reduce(function(current, key) {\n        return current && current[key];\n    }, object);\n}\n\nexport { getPropertyByPath };\n","// eslint-disable-next-line no-restricted-globals\n/**\n * Runs code on browser environments safely.\n */ function safelyRunOnBrowser(callback) {\n    var fallback = (arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {\n        fallback: function fallback() {\n            return undefined;\n        }\n    }).fallback;\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof window === 'undefined') {\n        return fallback();\n    }\n    // eslint-disable-next-line no-restricted-globals\n    return callback({\n        window: window\n    });\n}\n\nexport { safelyRunOnBrowser };\n","function cx() {\n    for(var _len = arguments.length, classNames = new Array(_len), _key = 0; _key < _len; _key++){\n        classNames[_key] = arguments[_key];\n    }\n    return classNames.reduce(function(acc, className) {\n        if (Array.isArray(className)) {\n            return acc.concat(className);\n        }\n        return acc.concat([\n            className\n        ]);\n    }, []).filter(Boolean).join(' ');\n}\n\nexport { cx };\n","import { _ as _$2 } from '@swc/helpers/esm/_object_spread.js';\nimport { _ as _$1 } from '@swc/helpers/esm/_object_spread_props.js';\nimport { _ } from '@swc/helpers/esm/_object_without_properties.js';\nimport { cx } from '../lib/cx.js';\n\nfunction createHighlightPartComponent(param) {\n    var createElement = param.createElement;\n    return function HighlightPart(param) {\n        var classNames = param.classNames, children = param.children, highlightedTagName = param.highlightedTagName, isHighlighted = param.isHighlighted, nonHighlightedTagName = param.nonHighlightedTagName;\n        var TagName = isHighlighted ? highlightedTagName : nonHighlightedTagName;\n        return /*#__PURE__*/ createElement(TagName, {\n            className: isHighlighted ? classNames.highlighted : classNames.nonHighlighted\n        }, children);\n    };\n}\nfunction createHighlightComponent(param) {\n    var createElement = param.createElement, Fragment = param.Fragment;\n    var HighlightPart = createHighlightPartComponent({\n        createElement: createElement,\n        Fragment: Fragment\n    });\n    return function Highlight(userProps) {\n        var parts = userProps.parts, _userProps_highlightedTagName = userProps.highlightedTagName, highlightedTagName = _userProps_highlightedTagName === void 0 ? 'mark' : _userProps_highlightedTagName, _userProps_nonHighlightedTagName = userProps.nonHighlightedTagName, nonHighlightedTagName = _userProps_nonHighlightedTagName === void 0 ? 'span' : _userProps_nonHighlightedTagName, _userProps_separator = userProps.separator, separator = _userProps_separator === void 0 ? ', ' : _userProps_separator, className = userProps.className, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, props = _(userProps, [\n            \"parts\",\n            \"highlightedTagName\",\n            \"nonHighlightedTagName\",\n            \"separator\",\n            \"className\",\n            \"classNames\"\n        ]);\n        return /*#__PURE__*/ createElement(\"span\", _$1(_$2({}, props), {\n            className: cx(classNames.root, className)\n        }), parts.map(function(part, partIndex) {\n            var isLastPart = partIndex === parts.length - 1;\n            return /*#__PURE__*/ createElement(Fragment, {\n                key: partIndex\n            }, part.map(function(subPart, subPartIndex) {\n                return /*#__PURE__*/ createElement(HighlightPart, {\n                    key: subPartIndex,\n                    classNames: classNames,\n                    highlightedTagName: highlightedTagName,\n                    nonHighlightedTagName: nonHighlightedTagName,\n                    isHighlighted: subPart.isHighlighted\n                }, subPart.value);\n            }), !isLastPart && /*#__PURE__*/ createElement(\"span\", {\n                className: classNames.separator\n            }, separator));\n        }));\n    };\n}\n\nexport { createHighlightComponent };\n","import { safelyRunOnBrowser } from 'instantsearch.js/es/lib/utils/index.js';\n\nfunction usePoweredBy() {\n    var hostname = safelyRunOnBrowser(function(param) {\n        var window = param.window;\n        var _window_location;\n        return ((_window_location = window.location) === null || _window_location === void 0 ? void 0 : _window_location.hostname) || '';\n    }, {\n        fallback: function fallback() {\n            return '';\n        }\n    });\n    return {\n        url: \"https://www.algolia.com/?utm_source=react-instantsearch&utm_medium=website&utm_content=\".concat(hostname, \"&utm_campaign=poweredby\")\n    };\n}\n\nexport { usePoweredBy };\n","import { createHighlightComponent } from 'instantsearch-ui-components';\nimport { createElement, Fragment } from 'react';\n\nvar InternalHighlight = createHighlightComponent({\n    createElement: createElement,\n    Fragment: Fragment\n});\n\nexport { InternalHighlight };\n","import { _ as _$1 } from '@swc/helpers/esm/_object_spread.js';\nimport { _ } from '@swc/helpers/esm/_object_without_properties.js';\nimport { cx } from 'instantsearch-ui-components';\nimport React from 'react';\nimport { InternalHighlight } from './InternalHighlight.js';\n\nfunction Highlight(_0) {\n    var _0_classNames = _0.classNames, classNames = _0_classNames === void 0 ? {} : _0_classNames, props = _(_0, [\n        \"classNames\"\n    ]);\n    return /*#__PURE__*/ React.createElement(InternalHighlight, _$1({\n        classNames: {\n            root: cx('ais-Highlight', classNames.root),\n            highlighted: cx('ais-Highlight-highlighted', classNames.highlighted),\n            nonHighlighted: cx('ais-Highlight-nonHighlighted', classNames.nonHighlighted),\n            separator: cx('ais-Highlight-separator', classNames.separator)\n        }\n    }, props));\n}\n\nexport { Highlight };\n","import { _ as _$2 } from '@swc/helpers/esm/_object_spread.js';\nimport { _ as _$1 } from '@swc/helpers/esm/_object_spread_props.js';\nimport { _ } from '@swc/helpers/esm/_object_without_properties.js';\nimport { getPropertyByPath, getHighlightedParts, unescape } from 'instantsearch.js/es/lib/utils/index.js';\nimport React from 'react';\nimport { Highlight as Highlight$1 } from '../ui/Highlight.js';\n\nfunction Highlight(_0) {\n    var hit = _0.hit, attribute = _0.attribute, highlightedTagName = _0.highlightedTagName, nonHighlightedTagName = _0.nonHighlightedTagName, separator = _0.separator, props = _(_0, [\n        \"hit\",\n        \"attribute\",\n        \"highlightedTagName\",\n        \"nonHighlightedTagName\",\n        \"separator\"\n    ]);\n    var property = getPropertyByPath(hit._highlightResult, attribute) || [];\n    var properties = Array.isArray(property) ? property : [\n        property\n    ];\n    var parts = properties.map(function(singleValue) {\n        return getHighlightedParts(unescape(singleValue.value || ''));\n    });\n    return /*#__PURE__*/ React.createElement(Highlight$1, _$1(_$2({}, props), {\n        parts: parts,\n        highlightedTagName: highlightedTagName,\n        nonHighlightedTagName: nonHighlightedTagName,\n        separator: separator\n    }));\n}\n\nexport { Highlight };\n","import { _ as _$2 } from '@swc/helpers/esm/_object_spread.js';\nimport { _ as _$1 } from '@swc/helpers/esm/_object_spread_props.js';\nimport { _ } from '@swc/helpers/esm/_object_without_properties.js';\nimport { cx } from 'instantsearch-ui-components';\nimport React from 'react';\n\nfunction PoweredBy(_0) {\n    var _0_classNames = _0.classNames, classNames = _0_classNames === void 0 ? {} : _0_classNames, url = _0.url, _0_theme = _0.theme, theme = _0_theme === void 0 ? 'light' : _0_theme, props = _(_0, [\n        \"classNames\",\n        \"url\",\n        \"theme\"\n    ]);\n    return /*#__PURE__*/ React.createElement(\"div\", _$1(_$2({}, props), {\n        className: cx('ais-PoweredBy', theme === 'dark' ? cx('ais-PoweredBy--dark', classNames.dark) : cx('ais-PoweredBy--light', classNames.light), classNames.root, props.className)\n    }), /*#__PURE__*/ React.createElement(\"a\", {\n        href: url,\n        target: \"_blank\",\n        className: cx('ais-PoweredBy-link', classNames.link),\n        \"aria-label\": \"Search by Algolia\",\n        rel: \"noopener noreferrer\"\n    }, /*#__PURE__*/ React.createElement(\"svg\", {\n        viewBox: \"0 0 572 64\",\n        className: cx('ais-PoweredBy-logo', classNames.logo)\n    }, /*#__PURE__*/ React.createElement(\"path\", {\n        fill: theme === 'dark' ? '#FFF' : '#36395A',\n        d: \"M16 48.3c-3.4 0-6.3-.6-8.7-1.7A12.4 12.4 0 0 1 1.9 42C.6 40 0 38 0 35.4h6.5a6.7 6.7 0 0 0 3.9 6c1.4.7 3.3 1.1 5.6 1.1 2.2 0 4-.3 5.4-1a7 7 0 0 0 3-2.4 6 6 0 0 0 1-3.4c0-1.5-.6-2.8-1.9-3.7-1.3-1-3.3-1.6-5.9-1.8l-4-.4c-3.7-.3-6.6-1.4-8.8-3.4a10 10 0 0 1-3.3-7.9c0-2.4.6-4.6 1.8-6.4a12 12 0 0 1 5-4.3c2.2-1 4.7-1.6 7.5-1.6s5.5.5 7.6 1.6a12 12 0 0 1 5 4.4c1.2 1.8 1.8 4 1.8 6.7h-6.5a6.4 6.4 0 0 0-3.5-5.9c-1-.6-2.6-1-4.4-1s-3.2.3-4.4 1c-1.1.6-2 1.4-2.6 2.4-.5 1-.8 2-.8 3.1a5 5 0 0 0 1.5 3.6c1 1 2.6 1.7 4.7 1.9l4 .3c2.8.2 5.2.8 7.2 1.8 2.1 1 3.7 2.2 4.9 3.8a9.7 9.7 0 0 1 1.7 5.8c0 2.5-.7 4.7-2 6.6a13 13 0 0 1-5.6 4.4c-2.4 1-5.2 1.6-8.4 1.6Zm35.6 0c-2.6 0-4.8-.4-6.7-1.3a13 13 0 0 1-4.7-3.5 17.1 17.1 0 0 1-3.6-10.4v-1c0-2 .3-3.8 1-5.6a13 13 0 0 1 7.3-8.3 15 15 0 0 1 6.3-1.4A13.2 13.2 0 0 1 64 24.3c1 2.2 1.6 4.6 1.6 7.2V34H39.4v-4.3h21.8l-1.8 2.2c0-2-.3-3.7-.9-5.1a7.3 7.3 0 0 0-2.7-3.4c-1.2-.7-2.7-1.1-4.6-1.1s-3.4.4-4.7 1.3a8 8 0 0 0-2.9 3.6c-.6 1.5-.9 3.3-.9 5.4 0 2 .3 3.7 1 5.3a7.9 7.9 0 0 0 2.8 3.7c1.3.8 3 1.3 5 1.3s3.8-.5 5.1-1.3c1.3-1 2.1-2 2.4-3.2h6a11.8 11.8 0 0 1-7 8.7 16 16 0 0 1-6.4 1.2ZM80 48c-2.2 0-4-.3-5.7-1a8.4 8.4 0 0 1-3.7-3.3 9.7 9.7 0 0 1-1.3-5.2c0-2 .5-3.8 1.5-5.2a9 9 0 0 1 4.3-3.1c1.8-.7 4-1 6.7-1H89v4.1h-7.5c-2 0-3.4.5-4.4 1.4-1 1-1.6 2.1-1.6 3.6s.5 2.7 1.6 3.6c1 1 2.5 1.4 4.4 1.4 1.1 0 2.2-.2 3.2-.7 1-.4 1.9-1 2.6-2 .6-1 1-2.4 1-4.2l1.7 2.1c-.2 2-.7 3.8-1.5 5.2a9 9 0 0 1-3.4 3.3 12 12 0 0 1-5.3 1Zm9.5-.7v-8.8h-1v-10c0-1.8-.5-3.2-1.4-4.1-1-1-2.4-1.4-4.2-1.4a142.9 142.9 0 0 0-10.2.4v-5.6a74.8 74.8 0 0 1 8.6-.4c3 0 5.5.4 7.5 1.2s3.4 2 4.4 3.6c1 1.7 1.4 4 1.4 6.7v18.4h-5Zm12.9 0V17.8h5v12.3h-.2c0-4.2 1-7.4 2.8-9.5a11 11 0 0 1 8.3-3.1h1v5.6h-2a9 9 0 0 0-6.3 2.2c-1.5 1.5-2.2 3.6-2.2 6.4v15.6h-6.4Zm34.4 1a15 15 0 0 1-6.6-1.3c-1.9-.9-3.4-2-4.7-3.5a15.5 15.5 0 0 1-2.7-5c-.6-1.7-1-3.6-1-5.4v-1c0-2 .4-3.8 1-5.6a15 15 0 0 1 2.8-4.9c1.3-1.5 2.8-2.6 4.6-3.5a16.4 16.4 0 0 1 13.3.2c2 1 3.5 2.3 4.8 4a12 12 0 0 1 2 6H144c-.2-1.6-1-3-2.2-4.1a7.5 7.5 0 0 0-5.2-1.7 8 8 0 0 0-4.7 1.3 8 8 0 0 0-2.8 3.6 13.8 13.8 0 0 0 0 10.3c.6 1.5 1.5 2.7 2.8 3.6s2.8 1.3 4.8 1.3c1.5 0 2.7-.2 3.8-.8a7 7 0 0 0 2.6-2c.7-1 1-2 1.2-3.2h6.2a11 11 0 0 1-2 6.2 15.1 15.1 0 0 1-11.8 5.5Zm19.7-1v-40h6.4V31h-1.3c0-3 .4-5.5 1.1-7.6a9.7 9.7 0 0 1 3.5-4.8A9.9 9.9 0 0 1 172 17h.3c3.5 0 6 1.1 7.9 3.5 1.7 2.3 2.6 5.7 2.6 10v16.8h-6.4V29.6c0-2.1-.6-3.8-1.8-5a6.4 6.4 0 0 0-4.8-1.8c-2 0-3.7.7-5 2a7.8 7.8 0 0 0-1.9 5.5v17h-6.4Zm63.8 1a12.2 12.2 0 0 1-10.9-6.2 19 19 0 0 1-1.8-7.3h1.4v12.5h-5.1v-40h6.4v19.8l-2 3.5c.2-3.1.8-5.7 1.9-7.7a11 11 0 0 1 4.4-4.5c1.8-1 3.9-1.5 6.1-1.5a13.4 13.4 0 0 1 12.8 9.1c.7 1.9 1 3.8 1 6v1c0 2.2-.3 4.1-1 6a13.6 13.6 0 0 1-13.2 9.4Zm-1.2-5.5a8.4 8.4 0 0 0 7.9-5c.7-1.5 1.1-3.3 1.1-5.3s-.4-3.8-1.1-5.3a8.7 8.7 0 0 0-3.2-3.6 9.6 9.6 0 0 0-9.2-.2 8.5 8.5 0 0 0-3.3 3.2c-.8 1.4-1.3 3-1.3 5v2.3a9 9 0 0 0 1.3 4.8 9 9 0 0 0 3.4 3c1.4.7 2.8 1 4.4 1Zm27.3 3.9-10-28.9h6.5l9.5 28.9h-6Zm-7.5 12.2v-5.7h4.9c1 0 2-.1 2.9-.4a4 4 0 0 0 2-1.4c.4-.7.9-1.6 1.2-2.7l8.6-30.9h6.2l-9.3 32.4a14 14 0 0 1-2.5 5 8.9 8.9 0 0 1-4 2.8c-1.5.6-3.4.9-5.6.9h-4.4Zm9-12.2v-5.2h6.4v5.2H248Z\"\n    }), /*#__PURE__*/ React.createElement(\"path\", {\n        fill: theme === 'dark' ? '#FFF' : '#003DFF',\n        d: \"M534.4 9.1H528a.8.8 0 0 1-.7-.7V1.8c0-.4.2-.7.6-.8l6.5-1c.4 0 .8.2.9.6v7.8c0 .4-.4.7-.8.7zM428 35.2V.8c0-.5-.3-.8-.7-.8h-.2l-6.4 1c-.4 0-.7.4-.7.8v35c0 1.6 0 11.8 12.3 12.2.5 0 .8-.4.8-.8V43c0-.4-.3-.7-.6-.8-4.5-.5-4.5-6-4.5-7zm106.5-21.8H528c-.4 0-.7.4-.7.8v34c0 .4.3.8.7.8h6.5c.4 0 .8-.4.8-.8v-34c0-.5-.4-.8-.8-.8zm-17.7 21.8V.8c0-.5-.3-.8-.8-.8l-6.5 1c-.4 0-.7.4-.7.8v35c0 1.6 0 11.8 12.3 12.2.4 0 .8-.4.8-.8V43c0-.4-.3-.7-.7-.8-4.4-.5-4.4-6-4.4-7zm-22.2-20.6a16.5 16.5 0 0 1 8.6 9.3c.8 2.2 1.3 4.8 1.3 7.5a19.4 19.4 0 0 1-4.6 12.6 14.8 14.8 0 0 1-5.2 3.6c-2 .9-5.2 1.4-6.8 1.4a21 21 0 0 1-6.7-1.4 15.4 15.4 0 0 1-8.6-9.3 21.3 21.3 0 0 1 0-14.4 15.2 15.2 0 0 1 8.6-9.3c2-.8 4.3-1.2 6.7-1.2s4.6.4 6.7 1.2zm-6.7 27.6c2.7 0 4.7-1 6.2-3s2.2-4.3 2.2-7.8-.7-6.3-2.2-8.3-3.5-3-6.2-3-4.7 1-6.1 3c-1.5 2-2.2 4.8-2.2 8.3s.7 5.8 2.2 7.8 3.5 3 6.2 3zm-88.8-28.8c-6.2 0-11.7 3.3-14.8 8.2a18.6 18.6 0 0 0 4.8 25.2c1.8 1.2 4 1.8 6.2 1.7s.1 0 .1 0h.9c4.2-.7 8-4 9.1-8.1v7.4c0 .4.3.7.8.7h6.4a.7.7 0 0 0 .7-.7V14.2c0-.5-.3-.8-.7-.8h-13.5zm6.3 26.5a9.8 9.8 0 0 1-5.7 2h-.5a10 10 0 0 1-9.2-14c1.4-3.7 5-6.3 9-6.3h6.4v18.3zm152.3-26.5h13.5c.5 0 .8.3.8.7v33.7c0 .4-.3.7-.8.7h-6.4a.7.7 0 0 1-.8-.7v-7.4c-1.2 4-4.8 7.4-9 8h-.1a4.2 4.2 0 0 1-.5.1h-.9a10.3 10.3 0 0 1-7-2.6c-4-3.3-6.5-8.4-6.5-14.2 0-3.7 1-7.2 3-10 3-5 8.5-8.3 14.7-8.3zm.6 28.4c2.2-.1 4.2-.6 5.7-2V21.7h-6.3a9.8 9.8 0 0 0-9 6.4 10.2 10.2 0 0 0 9.1 13.9h.5zM452.8 13.4c-6.2 0-11.7 3.3-14.8 8.2a18.5 18.5 0 0 0 3.6 24.3 10.4 10.4 0 0 0 13 .6c2.2-1.5 3.8-3.7 4.5-6.1v7.8c0 2.8-.8 5-2.2 6.3-1.5 1.5-4 2.2-7.5 2.2l-6-.3c-.3 0-.7.2-.8.5l-1.6 5.5c-.1.4.1.8.5 1h.1c2.8.4 5.5.6 7 .6 6.3 0 11-1.4 14-4.1 2.7-2.5 4.2-6.3 4.5-11.4V14.2c0-.5-.4-.8-.8-.8h-13.5zm6.3 8.2v18.3a9.6 9.6 0 0 1-5.6 2h-1a10.3 10.3 0 0 1-8.8-14c1.4-3.7 5-6.3 9-6.3h6.4zM291 31.5A32 32 0 0 1 322.8 0h30.8c.6 0 1.2.5 1.2 1.2v61.5c0 1.1-1.3 1.7-2.2 1l-19.2-17a18 18 0 0 1-11 3.4 18.1 18.1 0 1 1 18.2-14.8c-.1.4-.5.7-.9.6-.1 0-.3 0-.4-.2l-3.8-3.4c-.4-.3-.6-.8-.7-1.4a12 12 0 1 0-2.4 8.3c.4-.4 1-.5 1.6-.2l14.7 13.1v-46H323a26 26 0 1 0 10 49.7c.8-.4 1.6-.2 2.3.3l3 2.7c.3.2.3.7 0 1l-.2.2a32 32 0 0 1-47.2-28.6z\"\n    }))));\n}\n\nexport { PoweredBy };\n","import { _ } from '@swc/helpers/esm/_object_spread.js';\nimport React from 'react';\nimport { usePoweredBy } from 'react-instantsearch-core';\nimport { PoweredBy as PoweredBy$1 } from '../ui/PoweredBy.js';\n\nfunction PoweredBy(props) {\n    var url = usePoweredBy().url;\n    var uiProps = {\n        url: url\n    };\n    return /*#__PURE__*/ React.createElement(PoweredBy$1, _({}, props, uiProps));\n}\n\nexport { PoweredBy };\n","import { _ as _$1 } from '@swc/helpers/esm/_object_spread.js';\nimport { _ } from '@swc/helpers/esm/_object_without_properties.js';\nimport { cx } from 'instantsearch-ui-components';\nimport React from 'react';\nimport { InternalHighlight } from './InternalHighlight.js';\n\nfunction Snippet(_0) {\n    var _0_classNames = _0.classNames, classNames = _0_classNames === void 0 ? {} : _0_classNames, props = _(_0, [\n        \"classNames\"\n    ]);\n    return /*#__PURE__*/ React.createElement(InternalHighlight, _$1({\n        classNames: {\n            root: cx('ais-Snippet', classNames.root),\n            highlighted: cx('ais-Snippet-highlighted', classNames.highlighted),\n            nonHighlighted: cx('ais-Snippet-nonHighlighted', classNames.nonHighlighted),\n            separator: cx('ais-Snippet-separator', classNames.separator)\n        }\n    }, props));\n}\n\nexport { Snippet };\n","import { _ as _$2 } from '@swc/helpers/esm/_object_spread.js';\nimport { _ as _$1 } from '@swc/helpers/esm/_object_spread_props.js';\nimport { _ } from '@swc/helpers/esm/_object_without_properties.js';\nimport { getPropertyByPath, getHighlightedParts, unescape } from 'instantsearch.js/es/lib/utils/index.js';\nimport React from 'react';\nimport { Snippet as Snippet$1 } from '../ui/Snippet.js';\n\nfunction Snippet(_0) {\n    var hit = _0.hit, attribute = _0.attribute, highlightedTagName = _0.highlightedTagName, nonHighlightedTagName = _0.nonHighlightedTagName, separator = _0.separator, props = _(_0, [\n        \"hit\",\n        \"attribute\",\n        \"highlightedTagName\",\n        \"nonHighlightedTagName\",\n        \"separator\"\n    ]);\n    var property = getPropertyByPath(hit._snippetResult, attribute) || [];\n    var properties = Array.isArray(property) ? property : [\n        property\n    ];\n    var parts = properties.map(function(singleValue) {\n        return getHighlightedParts(unescape(singleValue.value || ''));\n    });\n    return /*#__PURE__*/ React.createElement(Snippet$1, _$1(_$2({}, props), {\n        parts: parts,\n        highlightedTagName: highlightedTagName,\n        nonHighlightedTagName: nonHighlightedTagName,\n        separator: separator\n    }));\n}\n\nexport { Snippet };\n","import cx from \"clsx\"\nimport * as _ from \"lodash-es\"\nimport { Highlight } from \"react-instantsearch\"\nimport { CHARTS_INDEX } from \"./searchUtils.js\"\nimport { SearchChartHit } from \"@ourworldindata/types\"\n\ninterface SearchChartHitHeaderProps {\n    hit: SearchChartHit\n    title?: string\n    subtitle?: string\n    url: string\n    source?: string\n    isLarge?: boolean\n    onClick: (vizType: null) => void\n}\n\nexport function SearchChartHitHeader({\n    hit,\n    title,\n    subtitle,\n    url,\n    source,\n    isLarge = false,\n    onClick,\n}: SearchChartHitHeaderProps) {\n    return (\n        <a\n            className={cx(\"search-chart-hit-header\", {\n                \"search-chart-hit-header--large\": isLarge,\n            })}\n            href={url}\n            onClick={() => onClick(null)}\n            data-algolia-index={CHARTS_INDEX}\n            data-algolia-object-id={hit.objectID}\n            data-algolia-position={hit.__position}\n        >\n            <div className=\"search-chart-hit-header__content-wrapper\">\n                {isLarge && (\n                    <img\n                        src=\"owid-logo.svg\"\n                        alt=\"Our World in Data logo\"\n                        className=\"search-chart-hit-header__logo\"\n                        width={104}\n                        height={57}\n                    />\n                )}\n                <div className=\"search-chart-hit-header__content\">\n                    <div className=\"search-chart-hit-header__title-container\">\n                        <h3 className=\"search-chart-hit-header__title\">\n                            {title || hit.title}\n                        </h3>\n                        {source && (\n                            <span className=\"search-chart-hit-header__source search-chart-hit-header__source--desktop\">\n                                Source: {source}\n                            </span>\n                        )}\n                    </div>\n                    <SearchChartHitSubtitle hit={hit} subtitle={subtitle} />\n                    {source && (\n                        <span className=\"search-chart-hit-header__source search-chart-hit-header__source--mobile\">\n                            Source: {source}\n                        </span>\n                    )}\n                </div>\n            </div>\n        </a>\n    )\n}\n\nfunction SearchChartHitSubtitle({\n    hit,\n    subtitle,\n}: {\n    hit: SearchChartHit\n    subtitle?: string // fresh subtitle from the live-fetched grapher\n}) {\n    const hasSubtitle = !!subtitle || !!hit.subtitle\n\n    if (!hit.titleVariant && !hasSubtitle) return null\n\n    // Prefer the fresh subtitle when it differs from the indexed one\n    const shouldUseFreshSubtitle = !!subtitle && subtitle !== hit.subtitle\n\n    return (\n        <div className=\"search-chart-hit-header__subtitle\">\n            {hit.titleVariant && (\n                <span className=\"search-chart-hit-header__title-variant\">\n                    {_.upperFirst(hit.titleVariant)}\n                </span>\n            )}\n            {/* Separator only when a subtitle follows the variant */}\n            {hit.titleVariant && hasSubtitle ? \" – \" : null}\n            {shouldUseFreshSubtitle ? (\n                subtitle\n            ) : hit.subtitle ? (\n                <Highlight\n                    hit={hit}\n                    attribute=\"subtitle\"\n                    highlightedTagName=\"strong\"\n                />\n            ) : null}\n        </div>\n    )\n}\n","import * as R from \"remeda\"\nimport {\n    EntityName,\n    LATEST_FEED_TYPE_VALUES,\n    OwidGdocType,\n    TagGraphRoot,\n    SearchState,\n    SearchChartHit,\n    StackedArticleHit,\n    TopicPageHit,\n    FilterType,\n    LatestType,\n    ProfileHit,\n    PageChronologicalRecord,\n    DataInsightHit,\n    FlatArticleHit,\n} from \"@ourworldindata/types\"\nimport { type SearchResponse } from \"algoliasearch\"\nimport { type LiteClient } from \"algoliasearch/lite\"\nimport {\n    getFilterNamesOfType,\n    formatCountryFacetFilters,\n    formatTopicFacetFilters,\n    getSelectableTopics,\n    CHARTS_INDEX,\n    PAGES_INDEX,\n    PAGES_CHRONOLOGICAL_INDEX,\n    DATA_CATALOG_ATTRIBUTES,\n    formatDisjunctiveFacetFilters,\n} from \"./searchUtils.js\"\nimport {\n    buildChartsFacetFilters,\n    searchSingleForHits,\n    searchSingleForHitsWithClosestMatches,\n    recommendTopicPages,\n    TOPIC_PAGE_TYPE_FILTER,\n    MAX_FACET_VALUES,\n} from \"@ourworldindata/utils\"\nimport { RichDataComponentVariant } from \"./SearchChartHitRichDataTypes.js\"\n\nfunction makeStateForKey(state: SearchState) {\n    return R.pick(state, [\"query\", \"filters\", \"requireAllCountries\"])\n}\n\n/**\n * Query Key factory for search\n * Provides hierarchical query keys for better cache management and invalidation\n */\nexport const searchQueryKeys = {\n    topicTagGraph: [\"topicTagGraph\"] as const,\n    charts: (state: SearchState) =>\n        [CHARTS_INDEX, \"charts\", makeStateForKey(state)] as const,\n    dataTopics: (state: SearchState) =>\n        [CHARTS_INDEX, \"topics\", makeStateForKey(state)] as const,\n    dataInsights: (state: SearchState) =>\n        [PAGES_INDEX, \"data-insights\", makeStateForKey(state)] as const,\n    articles: (state: SearchState) =>\n        [PAGES_INDEX, \"articles\", makeStateForKey(state)] as const,\n    topicPages: (state: SearchState) =>\n        [PAGES_INDEX, \"topic-pages\", makeStateForKey(state)] as const,\n    writingTopics: (state: SearchState) =>\n        [PAGES_INDEX, \"topics\", makeStateForKey(state)] as const,\n    profiles: (state: SearchState) =>\n        [PAGES_INDEX, \"profiles\", makeStateForKey(state)] as const,\n} as const\n\nexport const latestPagesQueryKey = {\n    latestPages: (topics: string[], latestType: LatestType | null) =>\n        [\n            PAGES_CHRONOLOGICAL_INDEX,\n            \"latest\",\n            topics.length > 0 ? topics.sort().join(\"~\") : \"all\",\n            latestType ?? \"all\",\n        ] as const,\n} as const\n\nexport const chartHitQueryKeys = {\n    chartInfo: (slug: string, entities: string[], queryParams?: string) =>\n        [\"chart-info\", slug, entities, queryParams] as const,\n    searchResultData: (\n        slug: string,\n        queryParams: string | undefined,\n        version: number,\n        variant: RichDataComponentVariant,\n        entities: EntityName[] | undefined,\n        numDataTableRowsPerColumn: number\n    ) =>\n        [\n            \"chart-hit-data\",\n            slug,\n            queryParams,\n            version,\n            variant,\n            entities,\n            numDataTableRowsPerColumn,\n        ] as const,\n} as const\n\nexport async function queryDataTopics(\n    liteSearchClient: LiteClient,\n    state: SearchState,\n    tagGraph: TagGraphRoot,\n    selectedTopic: string | undefined\n) {\n    const dataTopics = [...getSelectableTopics(tagGraph, selectedTopic)]\n\n    const countryFacetFilters = formatCountryFacetFilters(\n        getFilterNamesOfType(state.filters, FilterType.COUNTRY),\n        state.requireAllCountries\n    )\n    const searchParams = dataTopics.map((topic) => {\n        const topicFacetFilters = formatTopicFacetFilters(new Set([topic]))\n        const facetFilters = [...countryFacetFilters, ...topicFacetFilters]\n        return {\n            indexName: CHARTS_INDEX,\n            attributesToRetrieve: DATA_CATALOG_ATTRIBUTES,\n            query: state.query,\n            facetFilters: facetFilters,\n            highlightPreTag: \"<mark>\",\n            highlightPostTag: \"</mark>\",\n            hitsPerPage: 4,\n        }\n    })\n\n    const response =\n        await liteSearchClient.searchForHits<SearchChartHit>(searchParams)\n    return response.results.map((res, i) => ({\n        title: dataTopics[i],\n        charts: res,\n    }))\n}\n\nexport async function queryCharts(\n    liteSearchClient: LiteClient,\n    state: SearchState,\n    page: number = 0\n) {\n    const datasetFacetFilters = [\n        ...formatDisjunctiveFacetFilters(\n            getFilterNamesOfType(state.filters, FilterType.DATASET_PRODUCT),\n            \"datasetProducts\"\n        ),\n        ...formatDisjunctiveFacetFilters(\n            getFilterNamesOfType(state.filters, FilterType.DATASET_NAMESPACE),\n            \"datasetNamespaces\"\n        ),\n        ...formatDisjunctiveFacetFilters(\n            getFilterNamesOfType(state.filters, FilterType.DATASET_VERSION),\n            \"datasetVersions\"\n        ),\n        ...formatDisjunctiveFacetFilters(\n            getFilterNamesOfType(state.filters, FilterType.DATASET_PRODUCER),\n            \"datasetProducers\"\n        ),\n    ]\n    const facetFilters = buildChartsFacetFilters({\n        query: state.query,\n        filters: state.filters,\n        requireAllCountries: state.requireAllCountries,\n        datasetFacetFilters,\n    })\n\n    const searchParams = {\n        indexName: CHARTS_INDEX,\n        attributesToRetrieve: DATA_CATALOG_ATTRIBUTES,\n        query: state.query,\n        facetFilters,\n        highlightPreTag: \"<mark>\",\n        highlightPostTag: \"</mark>\",\n        hitsPerPage: 9,\n        page,\n    }\n\n    return searchSingleForHitsWithClosestMatches<SearchChartHit>(\n        liteSearchClient,\n        searchParams\n    )\n}\n\nexport async function queryDataInsights(\n    liteSearchClient: LiteClient,\n    state: SearchState,\n    page: number = 0,\n    hitsPerPage: number = 4\n) {\n    const selectedCountryNames = getFilterNamesOfType(\n        state.filters,\n        FilterType.COUNTRY\n    )\n    const hasCountry = selectedCountryNames.size > 0\n    const selectedTopics = getFilterNamesOfType(state.filters, FilterType.TOPIC)\n    // Using the selected countries as query search terms until data insights\n    // are tagged with countries.\n    const query = [\n        state.query,\n        // Use advanced syntax to search for countries as exact phrases\n        ...selectedCountryNames.keys().map((c) => `\"${c}\"`),\n    ]\n        .filter(Boolean)\n        .join(\" \")\n\n    const searchParams = {\n        indexName: PAGES_INDEX,\n        query,\n        filters: `type:${OwidGdocType.DataInsight}`,\n        facetFilters: formatTopicFacetFilters(selectedTopics),\n        // Do not search through the content of data insights in case there\n        // is a country filter present. This is to avoid returning data\n        // insights that might mention a country, but are not *about* that\n        // country (e.g. \"Unlike Germany...\").\n        ...(hasCountry && {\n            // a subset of searchableAttributes on the Pages index\n            restrictSearchableAttributes: [\"title\", \"tags\", \"authors\"],\n        }),\n        attributesToRetrieve: [\"title\", \"thumbnailUrl\", \"date\", \"slug\", \"type\"],\n        highlightPreTag: \"<mark>\",\n        highlightPostTag: \"</mark>\",\n        hitsPerPage,\n        page,\n    }\n\n    // Selected countries are part of the query, so the closest-matches\n    // fallback would drop them as optional words and show results that\n    // ignore the country filter. An empty section is the honest answer.\n    const search = hasCountry\n        ? searchSingleForHits\n        : searchSingleForHitsWithClosestMatches\n\n    return search<DataInsightHit>(liteSearchClient, searchParams)\n}\n\nexport async function queryArticles(\n    liteSearchClient: LiteClient,\n    state: SearchState,\n    offset: number = 0,\n    length: number\n) {\n    const selectedCountryNames = getFilterNamesOfType(\n        state.filters,\n        FilterType.COUNTRY\n    )\n    const hasCountry = selectedCountryNames.size > 0\n    const selectedTopics = getFilterNamesOfType(state.filters, FilterType.TOPIC)\n    const isFilterOnly = state.query.trim() === \"\"\n    // Using the selected countries as query search terms until articles\n    // are tagged with countries.\n    const query = [\n        state.query,\n        // Use advanced syntax to search for countries as exact phrases\n        ...selectedCountryNames.keys().map((c) => `\"${c}\"`),\n    ]\n        .filter(Boolean)\n        .join(\" \")\n\n    const searchParams = {\n        indexName: PAGES_INDEX,\n        query,\n        filters: `type:${OwidGdocType.Article} OR type:${OwidGdocType.AboutPage}`,\n        facetFilters: formatTopicFacetFilters(selectedTopics),\n        // Do not search through the content of articles in case there is a\n        // country filter present. This is to avoid returning articles that\n        // might mention a country, but are not *about* that country (e.g.\n        // \"Unlike Germany...\").\n        ...(hasCountry && {\n            // a subset of searchableAttributes on the Pages index\n            restrictSearchableAttributes: [\"title\", \"tags\", \"authors\"],\n        }),\n        attributesToRetrieve: [\n            \"title\",\n            \"thumbnailUrl\",\n            \"date\",\n            \"slug\",\n            \"type\",\n            isFilterOnly ? \"excerpt\" : \"content\",\n            \"authors\",\n        ],\n        highlightPreTag: \"<mark>\",\n        highlightPostTag: \"</mark>\",\n        offset,\n        length,\n    }\n\n    // No closest-matches fallback with a country filter (see queryDataInsights)\n    const search = hasCountry\n        ? searchSingleForHits\n        : searchSingleForHitsWithClosestMatches\n\n    return search<FlatArticleHit>(liteSearchClient, searchParams)\n}\n\nconst TOPIC_PAGE_ATTRIBUTES = [\n    \"title\",\n    \"type\",\n    \"slug\",\n    \"excerpt\",\n    \"excerptLong\",\n]\n\n/**\n * Topic pages to recommend for the current search (see recommendTopicPages\n * in @ourworldindata/utils, which /api/search?type=topics shares).\n */\nexport async function queryTopicPages(\n    liteSearchClient: LiteClient,\n    state: SearchState,\n    tagGraph: TagGraphRoot,\n    offset: number = 0,\n    length: number\n): Promise<SearchResponse<TopicPageHit>> {\n    return recommendTopicPages<TopicPageHit>(liteSearchClient, {\n        chartsIndexName: CHARTS_INDEX,\n        pagesIndexName: PAGES_INDEX,\n        state,\n        loadTagGraph: () => Promise.resolve(tagGraph),\n        attributesToRetrieve: TOPIC_PAGE_ATTRIBUTES,\n        offset,\n        length,\n    })\n}\n\nexport async function queryProfiles(\n    liteSearchClient: LiteClient,\n    state: SearchState,\n    offset: number = 0,\n    length: number\n) {\n    const selectedCountryNames = getFilterNamesOfType(\n        state.filters,\n        FilterType.COUNTRY\n    )\n    const selectedTopics = getFilterNamesOfType(state.filters, FilterType.TOPIC)\n\n    const facetFilters = [\n        ...formatCountryFacetFilters(\n            selectedCountryNames,\n            state.requireAllCountries\n        ),\n        ...formatTopicFacetFilters(selectedTopics),\n    ]\n\n    const searchParams = {\n        indexName: PAGES_INDEX,\n        query: state.query,\n        filters: `type:${OwidGdocType.Profile}`,\n        facetFilters,\n        attributesToRetrieve: [\n            \"title\",\n            \"thumbnailUrl\",\n            \"slug\",\n            \"excerpt\",\n            \"type\",\n            \"availableEntities\",\n        ],\n        highlightPreTag: \"<mark>\",\n        highlightPostTag: \"</mark>\",\n        offset,\n        length,\n    }\n\n    return searchSingleForHits<ProfileHit>(liteSearchClient, searchParams)\n}\n\nexport interface LatestPagesResult {\n    response: SearchResponse<PageChronologicalRecord>\n    /** The type filter this page was fetched with. The UI judges displayed\n     *  results by the filters that produced them (not the URL's, which run\n     *  ahead of the data during a filter change). */\n    latestType: LatestType | null\n    /** Tag facet counts filtered by the active type, disjunctive on topics.\n     *  Used to determine which topic pills to disable. */\n    tagFacetCounts: Record<string, number>\n    /** latestType facet counts filtered by topics only (no type filter).\n     *  Used to determine which type options in the \"Filter by type\"\n     *  dropdown to disable. */\n    latestTypeFacetCounts: Record<string, number>\n}\n\n// The gdoc-type guard that excludes topic pages and linear topic pages\n// (indexed for the atom feed but hidden from /latest).\nconst LATEST_BASE_FILTER = LATEST_FEED_TYPE_VALUES.map((t) => `type:${t}`).join(\n    \" OR \"\n)\n\n// Issues three searches in a single batched `liteSearchClient.searchForHits([...])`\n// call (one network round-trip): the paginated card list plus per-axis facet\n// counts used to disable filter options that would yield zero results. Each\n// facet-count query drops its own axis so the returned counts reflect \"what\n// would happen if the user picked a different value here?\" rather than being\n// self-narrowed to the current selection.\n//\n// `facetFilters` uses Algolia's array-of-arrays form: outer array is AND,\n// inner array is OR (cf. `formatDisjunctiveFacetFilters` in searchUtils.tsx).\nexport async function queryLatestPages(\n    liteSearchClient: LiteClient,\n    topics: string[],\n    offset: number,\n    length: number,\n    latestType: LatestType | null = null\n) {\n    // Each axis lives in its own `facetFilters` group so queries can include\n    // or omit it independently. Multiple topics are OR'd within their group.\n    const topicFacetFilters =\n        topics.length > 0\n            ? formatDisjunctiveFacetFilters(new Set(topics), \"tags\")\n            : []\n    const latestTypeFacetFilter = latestType\n        ? formatDisjunctiveFacetFilters(new Set([latestType]), \"latestType\")\n        : []\n\n    const searchParams = [\n        // Query 1: paginated cards (apply both user filters)\n        {\n            indexName: PAGES_CHRONOLOGICAL_INDEX,\n            query: \"\",\n            filters: LATEST_BASE_FILTER,\n            facetFilters: [...topicFacetFilters, ...latestTypeFacetFilter],\n            offset,\n            length,\n        },\n        // Query 2: latestType counts under topic selection (drop type\n        // filter) — drives disabling of type options in the \"Filter by\n        // type\" dropdown.\n        {\n            indexName: PAGES_CHRONOLOGICAL_INDEX,\n            query: \"\",\n            filters: LATEST_BASE_FILTER,\n            facetFilters: topicFacetFilters,\n            offset: 0,\n            length: 0,\n            facets: [\"latestType\"],\n        },\n        // Query 3: tag counts under type selection (drop topic filter) —\n        // drives disabling of topic pills.\n        {\n            indexName: PAGES_CHRONOLOGICAL_INDEX,\n            query: \"\",\n            filters: LATEST_BASE_FILTER,\n            facetFilters: latestTypeFacetFilter,\n            offset: 0,\n            length: 0,\n            facets: [\"tags\"],\n            // Algolia returns at most 100 values per facet unless asked for\n            // more, and this index carries appreciably more topic tags than\n            // that. Today the caller only looks up the tag graph's ~10\n            // top-level areas, all of which are common enough to survive the\n            // truncation, so nothing is visibly wrong — but a tag absent from\n            // these counts reads as \"0 results\" and disables its pill (see\n            // LatestSearch), and the same hook already exposes the full\n            // searchable-topic list next to the areas. Ask for the lot rather\n            // than leave that waiting to happen.\n            maxValuesPerFacet: MAX_FACET_VALUES,\n        },\n    ]\n\n    const response =\n        await liteSearchClient.searchForHits<PageChronologicalRecord>(\n            searchParams\n        )\n    const [mainResult, typeResult, topicResult] = response.results\n    return {\n        response: mainResult,\n        latestType,\n        tagFacetCounts: topicResult.facets?.tags ?? {},\n        latestTypeFacetCounts: typeResult.facets?.latestType ?? {},\n    }\n}\n\nexport async function queryWritingTopics(\n    liteSearchClient: LiteClient,\n    tagGraph: TagGraphRoot,\n    selectedTopic: string | undefined\n) {\n    const writingTopics = [...getSelectableTopics(tagGraph, selectedTopic)]\n\n    // Create search parameters for both articles and topic pages for each topic\n    const searchParams = writingTopics.flatMap((topic) => {\n        const topicFacetFilters = formatTopicFacetFilters(new Set([topic]))\n\n        return [\n            {\n                indexName: PAGES_INDEX,\n                attributesToRetrieve: [\n                    \"title\",\n                    \"slug\",\n                    \"thumbnailUrl\",\n                    \"excerpt\",\n                    \"type\",\n                ],\n                filters: `type:${OwidGdocType.Article} OR type:${OwidGdocType.AboutPage}`,\n                facetFilters: topicFacetFilters,\n                highlightPreTag: \"<mark>\",\n                highlightPostTag: \"</mark>\",\n                hitsPerPage: 3,\n            },\n            {\n                indexName: PAGES_INDEX,\n                attributesToRetrieve: [\"title\", \"slug\", \"type\"],\n                filters: TOPIC_PAGE_TYPE_FILTER,\n                facetFilters: topicFacetFilters,\n                highlightPreTag: \"<mark>\",\n                highlightPostTag: \"</mark>\",\n                hitsPerPage: 8,\n            },\n        ]\n    })\n\n    const response = await liteSearchClient.searchForHits<\n        StackedArticleHit | TopicPageHit\n    >(searchParams)\n    // Process results in pairs (articles, then topic pages for each topic).\n    return writingTopics.map((topic, i) => {\n        const articles = response.results[\n            i * 2\n        ] as SearchResponse<StackedArticleHit>\n        const topicPages = response.results[\n            i * 2 + 1\n        ] as SearchResponse<TopicPageHit>\n\n        return {\n            title: topic,\n            articles,\n            topicPages,\n            totalCount: (articles.nbHits ?? 0) + (topicPages.nbHits ?? 0),\n        }\n    })\n}\n","import { SearchChartHitComponentVariant } from \"@ourworldindata/types\"\n\nexport type RichDataComponentVariant = Extract<\n    SearchChartHitComponentVariant,\n    \"large\" | \"medium\"\n>\n\nexport enum PreviewVariant {\n    Thumbnail = \"thumbnail\",\n    Large = \"large\",\n}\n\nexport interface PreviewType {\n    variant: PreviewVariant\n    isMinimal: boolean\n}\n","import * as R from \"remeda\"\nimport * as _ from \"lodash-es\"\nimport { match } from \"ts-pattern\"\nimport {\n    PreviewType,\n    PreviewVariant,\n    RichDataComponentVariant,\n} from \"./SearchChartHitRichDataTypes.js\"\nimport {\n    SearchChartHitComponentVariant,\n    GridSlotKey,\n    LargeVariantGridSlotKey,\n    MediumVariantGridSlotKey,\n    LayoutSlot,\n} from \"@ourworldindata/types\"\nimport { getTableColumnCountForGridSlotKey } from \"@ourworldindata/utils\"\n\n// Keep in sync with $scatter-thumbnail-width and $scatter-thumbnail-height in SearchChartHitRichData.scss\nconst SCATTER_THUMBNAIL_WIDTH = 300\nconst SCATTER_THUMBNAIL_HEIGHT = 200\n\n/** Number of table columns for a number of placed tabs */\nexport function getTotalColumnCount(\n    placedTabs: LayoutSlot<GridSlotKey>[]\n): number {\n    return R.sumBy(placedTabs, (tab) =>\n        getTableColumnCountForGridSlotKey(tab.slotKey)\n    )\n}\n\nexport function makeSlotClassNames(\n    variant: RichDataComponentVariant,\n    slot: GridSlotKey\n): string {\n    const baseName = `${variant}-variant`\n    return `${baseName}__slot ${baseName}__${mapGridSlotKeyToClassName(slot)}`\n}\n\nexport function getPreviewType(\n    variant: SearchChartHitComponentVariant,\n    { isPrimaryTab }: { isPrimaryTab: boolean }\n): PreviewType {\n    // Use the large thumbnail for the primary tab in the large variant\n    if (isPrimaryTab && variant === \"large\")\n        return { variant: PreviewVariant.Large, isMinimal: true }\n\n    // Use the minimal version for the first tab which is annotated by the table\n    const isMinimal = isPrimaryTab\n\n    return { variant: PreviewVariant.Thumbnail, isMinimal }\n}\n\nexport function calculateScatterPreviewImageDimensions(): {\n    width: number\n    height: number\n} {\n    return {\n        width: 4 * SCATTER_THUMBNAIL_WIDTH,\n        height: 4 * SCATTER_THUMBNAIL_HEIGHT,\n    }\n}\n\nfunction mapGridSlotKeyToClassName(\n    slot: MediumVariantGridSlotKey | LargeVariantGridSlotKey\n): string {\n    return (\n        match(slot)\n            // medium variant grid slots\n            .with(MediumVariantGridSlotKey.Single, () => \"single-slot\")\n            .with(MediumVariantGridSlotKey.Double, () => \"double-slot\")\n            .with(MediumVariantGridSlotKey.Triple, () => \"triple-slot\")\n            .with(MediumVariantGridSlotKey.Quad, () => \"quad-slot\")\n            .with(MediumVariantGridSlotKey.SmallLeft, () => \"small-slot-left\")\n            .with(MediumVariantGridSlotKey.SmallRight, () => \"small-slot-right\")\n\n            // large variant grid slots\n            .with(LargeVariantGridSlotKey.Full, () => \"full\")\n            .with(LargeVariantGridSlotKey.LeftQuad, () => \"left-quad\")\n            .with(LargeVariantGridSlotKey.RightQuad, () => \"right-quad\")\n            .with(\n                LargeVariantGridSlotKey.RightQuadLeftColumn,\n                () => \"right-quad-left-column\"\n            )\n            .with(LargeVariantGridSlotKey.TopRightCell, () => \"top-right-cell\")\n            .with(\n                LargeVariantGridSlotKey.BottomRightCell,\n                () => \"bottom-right-cell\"\n            )\n            .with(LargeVariantGridSlotKey.SingleCell, () => \"single-cell\")\n            .exhaustive()\n    )\n}\n","import { QueryStatus, useQuery } from \"@tanstack/react-query\"\nimport {\n    ChartRecordType,\n    EntityName,\n    GrapherTabName,\n    GrapherValuesJson,\n    SearchChartHit,\n} from \"@ourworldindata/types\"\nimport { fetchJson } from \"@ourworldindata/utils\"\nimport {\n    constructChartInfoUrl,\n    constructChartUrl,\n    constructPreviewUrl,\n    toGrapherQueryParams,\n} from \"./searchUtils\"\nimport { chartHitQueryKeys } from \"./queries\"\nimport { PreviewVariant } from \"./SearchChartHitRichDataTypes.js\"\nimport { calculateScatterPreviewImageDimensions } from \"./SearchChartHitRichDataHelpers.js\"\n\nexport function useQueryChartInfo({\n    hit,\n    entities,\n    enabled,\n}: {\n    hit: SearchChartHit\n    entities: EntityName[]\n    enabled?: boolean\n}): {\n    data?: GrapherValuesJson\n    status: QueryStatus\n} {\n    const isChartRecord = hit.type === ChartRecordType.Chart\n\n    const { data, status } = useQuery({\n        queryKey: chartHitQueryKeys.chartInfo(\n            hit.slug,\n            entities,\n            isChartRecord ? undefined : hit.queryParams\n        ),\n        queryFn: () => {\n            const entityParam = toGrapherQueryParams({ entities })\n            const url = constructChartInfoUrl({\n                hit,\n                grapherParams: entityParam,\n            })\n            if (!url) return null\n            return fetchJson<GrapherValuesJson>(url)\n        },\n        enabled,\n    })\n\n    // If the result is null, the query URL couldn't be constructed. In this\n    // case, return an error status instead of a success status with null data\n    if (data === null) return { status: \"error\" }\n\n    return { data, status }\n}\n\nexport function constructChartAndPreviewUrlsForTab({\n    hit,\n    tab,\n    entities,\n    hasScatter = false,\n}: {\n    hit: SearchChartHit\n    tab: GrapherTabName\n    entities?: EntityName[]\n    hasScatter?: boolean\n}): { chartUrl: string; previewUrl: string } {\n    const grapherParams = toGrapherQueryParams({ entities, tab })\n\n    const chartUrl = constructChartUrl({\n        hit,\n        grapherParams,\n    })\n\n    const imageDimensions = hasScatter\n        ? calculateScatterPreviewImageDimensions()\n        : undefined\n    const previewUrl = constructPreviewUrl({\n        hit,\n        grapherParams,\n        variant: PreviewVariant.Thumbnail,\n        imageWidth: imageDimensions?.width,\n        imageHeight: imageDimensions?.height,\n    })\n\n    return { chartUrl, previewUrl }\n}\n","import { useMemo } from \"react\"\nimport { buildChartHitDataDisplayProps, Tippy } from \"@ourworldindata/utils\"\nimport {\n    GRAPHER_TAB_NAMES,\n    GrapherChartType,\n    SearchChartHitComponentProps,\n} from \"@ourworldindata/types\"\nimport {\n    constructChartUrl,\n    pickEntitiesForChartHit,\n    toGrapherQueryParams,\n} from \"./searchUtils.js\"\nimport { Button, GrapherTabIcon } from \"@ourworldindata/components\"\nimport { useIntersectionObserver, useMediaQuery } from \"usehooks-ts\"\nimport {\n    makeLabelForGrapherTab,\n    WORLD_ENTITY_NAME,\n} from \"@ourworldindata/grapher\"\nimport { SearchChartHitDataDisplay } from \"./SearchChartHitDataDisplay.js\"\nimport { SearchChartHitHeader } from \"./SearchChartHitHeader.js\"\nimport { faDownload } from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    constructChartAndPreviewUrlsForTab,\n    useQueryChartInfo,\n} from \"./SearchChartHitSmallHelpers.js\"\nimport { SMALL_BREAKPOINT_MEDIA_QUERY } from \"../SiteConstants.js\"\n\nexport function SearchChartHitSmall({\n    hit,\n    selectedRegionNames,\n    onClick,\n}: SearchChartHitComponentProps) {\n    const isSmallScreen = useMediaQuery(SMALL_BREAKPOINT_MEDIA_QUERY)\n\n    // Intersection observer for lazy loading chart info\n    const { ref, isIntersecting: hasBeenVisible } = useIntersectionObserver({\n        rootMargin: \"400px\", // Start loading 400px before visible\n        freezeOnceVisible: true, // Only trigger once\n    })\n\n    const entities = useMemo(\n        () => pickEntitiesForChartHit(hit, selectedRegionNames),\n        [hit, selectedRegionNames]\n    )\n\n    const entityForDisplay = entities[0] ?? WORLD_ENTITY_NAME\n    const hasUserPickedEntities = entities.length > 0\n\n    // Fetch chart info and data values\n    const { data: chartInfo } = useQueryChartInfo({\n        hit,\n        entities: [entityForDisplay],\n        // Only fetch when the component is visible\n        enabled: hasBeenVisible,\n    })\n\n    // The first chart tab is the primary chart type\n    const chartType: GrapherChartType | undefined = hit.availableTabs.find(\n        (tab) =>\n            tab !== GRAPHER_TAB_NAMES.Table &&\n            tab !== GRAPHER_TAB_NAMES.WorldMap\n    )\n\n    const dataDisplayProps = buildChartHitDataDisplayProps({\n        chartInfo,\n        chartType,\n        entity: entityForDisplay,\n        isEntityPickedByUser: hasUserPickedEntities,\n    })\n\n    const grapherParams = toGrapherQueryParams({ entities })\n    const chartUrl = constructChartUrl({ hit, grapherParams })\n    const downloadUrl = constructChartUrl({\n        hit,\n        grapherParams,\n        overlay: \"download-data\",\n    })\n\n    return (\n        <article ref={ref} className=\"search-chart-hit-small\">\n            <div className=\"search-chart-hit-small__content\">\n                <SearchChartHitHeader\n                    hit={hit}\n                    url={chartUrl}\n                    source={chartInfo?.source}\n                    onClick={onClick}\n                />\n                <div className=\"search-chart-hit-small__tabs-container\">\n                    {hit.availableTabs.map((tab) => {\n                        const { chartUrl } = constructChartAndPreviewUrlsForTab(\n                            { hit, tab, entities }\n                        )\n\n                        const label = makeLabelForGrapherTab(tab, {\n                            format: \"long\",\n                        })\n\n                        return (\n                            <Tippy\n                                key={tab}\n                                appendTo={() => document.body}\n                                className=\"search-chart-hit-small__tippy\"\n                                content={label}\n                                placement=\"bottom\"\n                                theme=\"dark\"\n                                disabled={isSmallScreen}\n                            >\n                                <a\n                                    href={chartUrl}\n                                    onClick={() => onClick(tab)}\n                                    aria-label={label}\n                                >\n                                    <GrapherTabIcon tab={tab} />\n                                </a>\n                            </Tippy>\n                        )\n                    })}\n                </div>\n            </div>\n            {dataDisplayProps && (\n                <SearchChartHitDataDisplay {...dataDisplayProps} />\n            )}\n            <Tippy\n                appendTo={() => document.body}\n                className=\"search-chart-hit-small__tippy\"\n                content=\"Download options\"\n                placement=\"bottom\"\n                theme=\"dark\"\n                disabled={isSmallScreen}\n            >\n                {/* Without this wrapper element, the tippy isn't positioned correctly */}\n                <div className=\"search-chart-hit-small__download-button-wrapper\">\n                    <Button\n                        className=\"search-chart-hit-small__download-button\"\n                        theme=\"solid-light-blue\"\n                        href={downloadUrl}\n                        icon={faDownload}\n                        ariaLabel=\"Download options\"\n                        dataTrackNote=\"search-download-options\"\n                    />\n                </div>\n            </Tippy>\n        </article>\n    )\n}\n","import cx from \"clsx\"\nimport * as R from \"remeda\"\nimport { SearchChartHitDataTableProps } from \"@ourworldindata/types\"\nimport { GrapherTrendArrow } from \"@ourworldindata/components\"\n\nexport function SearchChartHitDataTable({\n    rows,\n    title,\n    numRowsPerColumn = 4,\n}: SearchChartHitDataTableProps & {\n    numRowsPerColumn?: number\n}): React.ReactElement {\n    // Show the time in the title if all items refer to the same time\n    const timedRows = rows.filter((row) => row.time)\n    const mainTime = timedRows[0]?.time\n    const shouldShowTimeInTitle =\n        mainTime !== undefined &&\n        timedRows.every((row) => row.time === mainTime)\n\n    // Hide the time in each row if it's shown in the title\n    const displayRows = shouldShowTimeInTitle\n        ? rows.map((item) => R.omit(item, [\"time\"]))\n        : rows\n\n    // Hide the color in each row if all rows share the same color\n    const shouldShowSwatch =\n        rows.length <= 1 || rows.some((row) => row.color !== rows[0].color)\n\n    const shouldSpanBothColumns = displayRows.length <= numRowsPerColumn\n\n    return (\n        <div className=\"search-chart-hit-table\">\n            <Header\n                title={title}\n                time={shouldShowTimeInTitle ? mainTime : undefined}\n                timePreposition={timedRows[0]?.timePreposition}\n            />\n            {displayRows.map((row) => (\n                <Row\n                    key={row.label}\n                    row={row}\n                    shouldShowSwatch={shouldShowSwatch}\n                    shouldSpanBothColumns={shouldSpanBothColumns}\n                />\n            ))}\n        </div>\n    )\n}\n\nfunction Header({\n    title,\n    time,\n    timePreposition = \"in\",\n}: {\n    title: string\n    time?: string\n    timePreposition?: string\n}): React.ReactElement {\n    return (\n        <div className=\"search-chart-hit-table-header search-chart-hit-table-row col-span\">\n            <span className=\"search-chart-hit-table-header__title\">\n                {title}\n            </span>\n            {time && (\n                <span>\n                    , {timePreposition} {time}\n                </span>\n            )}\n        </div>\n    )\n}\n\nfunction Row({\n    row,\n    shouldShowSwatch = true,\n    shouldSpanBothColumns,\n}: {\n    row: SearchChartHitDataTableProps[\"rows\"][number]\n    shouldShowSwatch?: boolean\n    shouldSpanBothColumns: boolean\n}): React.ReactElement {\n    return (\n        <div\n            className={cx(\"search-chart-hit-table-row\", {\n                \"col-span\": shouldSpanBothColumns,\n                \"search-chart-hit-table-row--muted\": row.muted,\n            })}\n        >\n            {shouldShowSwatch && row.color && (\n                <span\n                    className={cx(\"search-chart-hit-table-row__swatch\", {\n                        \"search-chart-hit-table-row__swatch--rounded\":\n                            row.rounded,\n                        \"search-chart-hit-table-row__swatch--outlined\":\n                            row.outlined,\n                        \"search-chart-hit-table-row__swatch--striped\":\n                            row.striped,\n                        \"search-chart-hit-table-row__swatch--no-data\":\n                            row.striped === \"no-data\",\n                    })}\n                    style={{ backgroundColor: row.color }}\n                />\n            )}\n            <span className=\"search-chart-hit-table-row__name\">\n                {row.label}\n            </span>\n            {row.value !== undefined && (\n                <>\n                    <span className=\"search-chart-hit-table-row__spacer\" />\n                    <span className=\"search-chart-hit-table-row__value\">\n                        {row.startValue && (\n                            <>\n                                <span\n                                    style={\n                                        row.startValueColor\n                                            ? { color: row.startValueColor }\n                                            : undefined\n                                    }\n                                >\n                                    {row.startValue}\n                                </span>\n                                {row.trend ? (\n                                    <GrapherTrendArrow\n                                        className=\"search-chart-hit-table-row__arrow\"\n                                        direction={row.trend}\n                                    />\n                                ) : (\n                                    <span className=\"search-chart-hit-table-row__vs\">\n                                        {\" \"}\n                                        vs.{\" \"}\n                                    </span>\n                                )}\n                            </>\n                        )}\n                        <span\n                            style={\n                                row.valueColor\n                                    ? { color: row.valueColor }\n                                    : undefined\n                            }\n                        >\n                            {row.value}\n                        </span>\n                        {row.time && (\n                            <span className=\"search-chart-hit-table-row__time\">\n                                {\" \"}\n                                {row.timePreposition ?? \"in\"} {row.time}\n                            </span>\n                        )}\n                    </span>\n                </>\n            )}\n        </div>\n    )\n}\n","import cx from \"clsx\"\n\nexport function CaptionedLink({\n    url,\n    className,\n    onClick,\n    children,\n    caption,\n}: {\n    url: string\n    className?: string\n    onClick?: () => void\n    children: React.ReactNode\n    caption: React.ReactNode\n}): React.ReactElement {\n    return (\n        <a\n            href={url}\n            className={cx(\"search-chart-hit-captioned-link\", className)}\n            onClick={onClick}\n        >\n            {children}\n            <div className=\"search-chart-hit-captioned-link__label\">\n                {caption}\n            </div>\n        </a>\n    )\n}\n\nexport function CaptionedLinkOverlay({\n    children,\n}: {\n    children: React.ReactNode\n}): React.ReactElement {\n    return (\n        <div className=\"search-chart-hit-captioned-link__overlay\">\n            <div className=\"search-chart-hit-captioned-link__cta\">\n                {children}\n            </div>\n        </div>\n    )\n}\n","import { SearchChartHitDataTable } from \"./SearchChartHitDataTable\"\nimport {\n    CaptionedLink,\n    CaptionedLinkOverlay,\n} from \"./SearchChartHitCaptionedLink\"\nimport {\n    GRAPHER_TAB_NAMES,\n    SearchChartHitDataTableProps,\n} from \"@ourworldindata/types\"\nimport { GrapherTabIcon } from \"@ourworldindata/components\"\n\nexport function CaptionedTable({\n    chartUrl,\n    dataTableContent,\n    numAvailableEntities,\n    numRowsPerColumn,\n    entityType,\n    entityTypePlural,\n    className,\n    onClick,\n}: {\n    chartUrl: string\n    dataTableContent?: SearchChartHitDataTableProps\n    numAvailableEntities: number\n    numRowsPerColumn?: number\n    entityType: string\n    entityTypePlural: string\n    className?: string\n    onClick?: () => void\n}): React.ReactElement | null {\n    if (!dataTableContent) return null\n\n    const caption =\n        numAvailableEntities === 1\n            ? `Data available for ${numAvailableEntities} ${entityType}`\n            : `Data available for ${numAvailableEntities} ${entityTypePlural}`\n\n    const captionWithIcon = (\n        <span className=\"search-chart-hit-captioned-link-label-content\">\n            <GrapherTabIcon tab={GRAPHER_TAB_NAMES.Table} />\n            {caption}\n        </span>\n    )\n\n    return (\n        <CaptionedLink\n            caption={captionWithIcon}\n            url={chartUrl}\n            className={className}\n            onClick={onClick}\n        >\n            <div className=\"search-chart-hit-table-wrapper\">\n                <div className=\"search-chart-hit-table-wrapper-content\">\n                    <SearchChartHitDataTable\n                        {...dataTableContent}\n                        numRowsPerColumn={numRowsPerColumn}\n                    />\n                </div>\n                <CaptionedLinkOverlay>Click to explore</CaptionedLinkOverlay>\n            </div>\n        </CaptionedLink>\n    )\n}\n","import { faHeartBroken } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { useState } from \"react\"\nimport cx from \"clsx\"\nimport {\n    GRAPHER_THUMBNAIL_HEIGHT,\n    GRAPHER_THUMBNAIL_WIDTH,\n} from \"@ourworldindata/grapher\"\nimport { CaptionedLinkOverlay } from \"./SearchChartHitCaptionedLink.js\"\n\nexport const SearchChartHitThumbnail = ({\n    previewUrl,\n    hoverOverlayText,\n    imageWidth = GRAPHER_THUMBNAIL_WIDTH,\n    imageHeight = GRAPHER_THUMBNAIL_HEIGHT,\n}: {\n    previewUrl: string\n    hoverOverlayText: string\n    imageWidth?: number\n    imageHeight?: number\n}) => {\n    const [imgLoaded, setImgLoaded] = useState(false)\n    const [imgError, setImgError] = useState(false)\n\n    return (\n        <div className=\"search-chart-hit-thumbnail\">\n            {imgError && (\n                <div className=\"chart-hit-img-error\">\n                    <FontAwesomeIcon icon={faHeartBroken} />\n                    <span>Chart preview not available</span>\n                </div>\n            )}\n            <img\n                key={previewUrl}\n                className={cx({ loaded: imgLoaded, error: imgError })}\n                loading=\"lazy\"\n                width={imageWidth}\n                height={imageHeight}\n                src={previewUrl}\n                onLoad={() => setImgLoaded(true)}\n                onError={() => setImgError(true)}\n            />\n            <CaptionedLinkOverlay>{hoverOverlayText}</CaptionedLinkOverlay>\n        </div>\n    )\n}\n","import { makeLabelForGrapherTab } from \"@ourworldindata/grapher\"\nimport { GrapherTabName } from \"@ourworldindata/types\"\nimport { SearchChartHitThumbnail } from \"./SearchChartHitThumbnail\"\nimport { CaptionedLink } from \"./SearchChartHitCaptionedLink\"\nimport { GrapherTabIcon } from \"@ourworldindata/components\"\nimport { checkIsVeryShortUnit } from \"@ourworldindata/utils\"\n\nexport function CaptionedThumbnail({\n    chartType,\n    chartUrl,\n    previewUrl,\n    isSmallSlot = false,\n    imageWidth,\n    imageHeight,\n    unit,\n    className,\n    onClick,\n}: {\n    chartType: GrapherTabName\n    chartUrl: string\n    previewUrl: string\n    isSmallSlot?: boolean\n    imageWidth?: number\n    imageHeight?: number\n    unit?: string\n    className?: string\n    onClick?: () => void\n}): React.ReactElement {\n    const caption = makeLabelForGrapherTab(chartType, { format: \"long\" })\n    const hoverOverlayText = isSmallSlot ? \"Explore\" : \"Click to explore\"\n\n    const captionWithIcon = (\n        <span className=\"search-chart-hit-captioned-link-label-content\">\n            <GrapherTabIcon tab={chartType} />\n            {caption}\n            {unit && !checkIsVeryShortUnit(unit) && (\n                <span className=\"unit\">Measured in {unit}</span>\n            )}\n        </span>\n    )\n\n    return (\n        <CaptionedLink\n            caption={captionWithIcon}\n            url={chartUrl}\n            className={className}\n            onClick={onClick}\n        >\n            <SearchChartHitThumbnail\n                previewUrl={previewUrl}\n                imageWidth={imageWidth}\n                imageHeight={imageHeight}\n                hoverOverlayText={hoverOverlayText}\n            />\n        </CaptionedLink>\n    )\n}\n","import { useIntersectionObserver } from \"usehooks-ts\"\nimport { SearchChartHitComponentProps } from \"@ourworldindata/types\"\nimport { useMemo } from \"react\"\nimport cx from \"clsx\"\nimport {\n    constructChartUrl,\n    pickEntitiesForChartHit,\n    toGrapherQueryParams,\n} from \"./searchUtils.js\"\nimport { WORLD_ENTITY_NAME } from \"@ourworldindata/grapher\"\nimport {\n    buildChartHitDataDisplayProps,\n    GRAPHER_TAB_NAMES,\n    GrapherChartType,\n    placeGrapherTabsInMediumVariantGridLayout,\n} from \"@ourworldindata/utils\"\nimport { SearchChartHitHeader } from \"./SearchChartHitHeader.js\"\nimport { Button } from \"@ourworldindata/components\"\nimport { faDownload } from \"@fortawesome/free-solid-svg-icons\"\nimport { CaptionedThumbnail } from \"./SearchChartHitCaptionedThumbnail.js\"\nimport { SearchChartHitDataDisplay } from \"./SearchChartHitDataDisplay.js\"\nimport {\n    getTotalColumnCount,\n    makeSlotClassNames,\n} from \"./SearchChartHitRichDataHelpers.js\"\nimport {\n    constructChartAndPreviewUrlsForTab,\n    useQueryChartInfo,\n} from \"./SearchChartHitSmallHelpers.js\"\n\nexport function SearchChartHitRichDataFallback({\n    hit,\n    selectedRegionNames,\n    onClick,\n}: SearchChartHitComponentProps) {\n    const hasScatter = hit.availableTabs.includes(GRAPHER_TAB_NAMES.ScatterPlot)\n\n    // Intersection observer for lazy loading chart info\n    const { ref, isIntersecting: hasBeenVisible } = useIntersectionObserver({\n        rootMargin: \"400px\", // Start loading 400px before visible\n        freezeOnceVisible: true, // Only trigger once\n    })\n\n    const entities = useMemo(\n        () => pickEntitiesForChartHit(hit, selectedRegionNames),\n        [hit, selectedRegionNames]\n    )\n\n    const entityForDisplay = entities[0] ?? WORLD_ENTITY_NAME\n    const hasUserPickedEntities = entities.length > 0\n\n    const entityParam = toGrapherQueryParams({ entities })\n    const chartUrl = constructChartUrl({ hit, grapherParams: entityParam })\n\n    // Fetch chart info and data values\n    const { data: chartInfo } = useQueryChartInfo({\n        hit,\n        entities,\n        // Only fetch when the component is visible\n        enabled: hasBeenVisible,\n    })\n\n    // The first chart tab is the 'primary' chart type\n    const chartType: GrapherChartType | undefined = hit.availableTabs.find(\n        (tab) =>\n            tab !== GRAPHER_TAB_NAMES.Table &&\n            tab !== GRAPHER_TAB_NAMES.WorldMap\n    )\n\n    const dataDisplayProps = buildChartHitDataDisplayProps({\n        chartInfo,\n        chartType,\n        entity: entityForDisplay,\n        isEntityPickedByUser: hasUserPickedEntities,\n    })\n\n    const grapherTabs = hit.availableTabs.filter(\n        (tab) => tab !== GRAPHER_TAB_NAMES.Table\n    )\n    const placedTabs = placeGrapherTabsInMediumVariantGridLayout(grapherTabs, {\n        hasDataDisplay: !!dataDisplayProps,\n        hasDataTable: false,\n    })\n\n    const contentStyle = {\n        \"--num-columns\": getTotalColumnCount(placedTabs),\n    } as React.CSSProperties\n\n    return (\n        <div ref={ref} className=\"search-chart-hit-rich-data\">\n            <div className=\"search-chart-hit-rich-data__header\">\n                <SearchChartHitHeader\n                    hit={hit}\n                    url={chartUrl}\n                    source={chartInfo?.source}\n                    onClick={onClick}\n                />\n                <div className=\"search-chart-hit-rich-data__header-actions\">\n                    <Button\n                        text=\"Download options\"\n                        className=\"search-chart-hit-rich-data__button\"\n                        theme=\"solid-light-blue\"\n                        href={constructChartUrl({\n                            hit,\n                            overlay: \"download-data\",\n                        })}\n                        icon={faDownload}\n                        iconPosition=\"left\"\n                        dataTrackNote=\"search-download-options\"\n                    />\n                </div>\n            </div>\n\n            <div\n                className={cx(\n                    \"search-chart-hit-rich-data__content\",\n                    \"search-chart-hit-rich-data__content--medium\",\n                    {\n                        \"search-chart-hit-rich-data__content--scatter\":\n                            hasScatter,\n                    }\n                )}\n                style={contentStyle}\n            >\n                {placedTabs.map(({ grapherTab, slotKey }) => {\n                    const { chartUrl, previewUrl } =\n                        constructChartAndPreviewUrlsForTab({\n                            hit,\n                            tab: grapherTab,\n                            entities,\n                            hasScatter,\n                        })\n\n                    const className = makeSlotClassNames(\"medium\", slotKey)\n\n                    return (\n                        <CaptionedThumbnail\n                            key={grapherTab}\n                            chartType={grapherTab}\n                            chartUrl={chartUrl}\n                            previewUrl={previewUrl}\n                            className={className}\n                            onClick={() => onClick(grapherTab)}\n                        />\n                    )\n                })}\n\n                {dataDisplayProps && (\n                    <SearchChartHitDataDisplay\n                        className=\"data-slot\"\n                        {...dataDisplayProps}\n                    />\n                )}\n            </div>\n        </div>\n    )\n}\n","import * as R from \"remeda\"\nimport { useMemo } from \"react\"\nimport cx from \"clsx\"\nimport { useIntersectionObserver, useMediaQuery } from \"usehooks-ts\"\nimport { faDownload } from \"@fortawesome/free-solid-svg-icons\"\nimport { match } from \"ts-pattern\"\nimport {\n    GRAPHER_THUMBNAIL_HEIGHT,\n    GRAPHER_THUMBNAIL_WIDTH,\n    mapGrapherTabNameToQueryParam,\n} from \"@ourworldindata/grapher\"\nimport {\n    EntityName,\n    GRAPHER_TAB_NAMES,\n    GrapherTabName,\n    GridSlotKey,\n    LargeVariantGridSlotKey,\n    MediumVariantGridSlotKey,\n    LayoutSlot,\n    GrapherSearchResultJson,\n    GrapherQueryParams,\n    ChartRecordType,\n    SearchChartHit,\n    SearchChartHitComponentProps,\n    SearchChartHitComponentVariant,\n} from \"@ourworldindata/types\"\nimport { Button } from \"@ourworldindata/components\"\nimport { MEDIUM_BREAKPOINT_MEDIA_QUERY } from \"../SiteConstants.js\"\nimport {\n    constructChartUrl,\n    constructPreviewUrl,\n    constructSearchResultUrl,\n    pickEntitiesForChartHit,\n} from \"./searchUtils.js\"\nimport {\n    getTotalColumnCount,\n    makeSlotClassNames,\n    getPreviewType,\n    calculateScatterPreviewImageDimensions,\n} from \"./SearchChartHitRichDataHelpers.js\"\nimport { SearchChartHitHeader } from \"./SearchChartHitHeader.js\"\nimport { CaptionedTable } from \"./SearchChartHitCaptionedTable.js\"\nimport { CaptionedThumbnail } from \"./SearchChartHitCaptionedThumbnail.js\"\nimport { SearchChartHitDataDisplay } from \"./SearchChartHitDataDisplay.js\"\nimport { SearchChartHitRichDataFallback } from \"./SearchChartHitRichDataFallback.js\"\nimport {\n    PreviewVariant,\n    RichDataComponentVariant,\n} from \"./SearchChartHitRichDataTypes.js\"\nimport { QueryStatus, useQuery } from \"@tanstack/react-query\"\nimport { chartHitQueryKeys } from \"./queries.js\"\nimport { fetchJson } from \"@ourworldindata/utils\"\n\n// Keep in sync with $num-rows-per-column in SearchChartHitRichData.scss\nconst NUM_DATA_TABLE_ROWS_PER_COLUMN_IN_MEDIUM_VARIANT = 4\nconst NUM_DATA_TABLE_ROWS_PER_COLUMN_IN_LARGE_VARIANT = 10\n\n// Keep in sync with $scatter-num-data-table-rows-per-column in SearchChartHitRichData.scss\nconst SCATTER_NUM_DATA_TABLE_ROWS_PER_COLUMN_IN_MEDIUM_VARIANT = 6\n\nexport function SearchChartHitRichData({\n    hit,\n    selectedRegionNames,\n    onClick,\n    variant,\n}: SearchChartHitComponentProps & {\n    variant: RichDataComponentVariant\n}) {\n    const isMediumScreen = useMediaQuery(MEDIUM_BREAKPOINT_MEDIA_QUERY)\n\n    // Determine the maximum number of data table rows per column\n    const isLargeVariant = variant === \"large\"\n    const hasScatter = hit.availableTabs.includes(GRAPHER_TAB_NAMES.ScatterPlot)\n    const numDataTableRowsPerColumn = isLargeVariant\n        ? NUM_DATA_TABLE_ROWS_PER_COLUMN_IN_LARGE_VARIANT\n        : hasScatter\n          ? SCATTER_NUM_DATA_TABLE_ROWS_PER_COLUMN_IN_MEDIUM_VARIANT\n          : NUM_DATA_TABLE_ROWS_PER_COLUMN_IN_MEDIUM_VARIANT\n\n    // Entities available for the chart\n    const availableEntities =\n        hit.originalAvailableEntities ?? hit.availableEntities\n\n    // Entities selected by the user\n    const pickedEntities = useMemo(\n        () => pickEntitiesForChartHit(hit, selectedRegionNames),\n        [hit, selectedRegionNames]\n    )\n\n    // Intersection observer for lazy loading config and data\n    const { ref, isIntersecting: hasBeenVisible } = useIntersectionObserver({\n        rootMargin: \"400px\", // Start loading 400px before visible\n        freezeOnceVisible: true, // Only trigger once\n    })\n\n    // Fetch search result data for this chart hit\n    const { data, status: loadingStatus } = useQuerySearchResultDataForChartHit(\n        {\n            hit,\n            params: {\n                version: 1,\n                variant,\n                entities: pickedEntities,\n                numDataTableRowsPerColumn,\n            },\n            enabled: hasBeenVisible,\n        }\n    )\n\n    // Render the fallback component if config or data loading failed\n    if (loadingStatus === \"error\") {\n        return (\n            <SearchChartHitRichDataFallback\n                hit={hit}\n                selectedRegionNames={selectedRegionNames}\n                onClick={onClick}\n            />\n        )\n    }\n\n    // Render a placeholder component while the config and data are loading\n    if (loadingStatus === \"pending\" || data === undefined) {\n        const chartUrl = constructChartUrl({ hit })\n        const sourcesUrl = constructChartUrl({ hit, overlay: \"sources\" })\n        const downloadUrl = constructChartUrl({ hit, overlay: \"download-data\" })\n\n        return (\n            <div ref={ref} className=\"search-chart-hit-rich-data\">\n                <div className=\"search-chart-hit-rich-data__header\">\n                    <SearchChartHitHeader\n                        hit={hit}\n                        url={chartUrl}\n                        isLarge={isLargeVariant}\n                        onClick={onClick}\n                    />\n                    <SearchChartHitHeaderActionButtons\n                        isLarge={isLargeVariant}\n                        sourcesUrl={sourcesUrl}\n                        downloadUrl={downloadUrl}\n                    />\n                </div>\n                <RichDataContentPlaceholder\n                    variant={variant}\n                    hasScatter={hasScatter}\n                />\n            </div>\n        )\n    }\n\n    const countryParam = R.pick(data.grapherQueryParams, [\"country\"])\n    const chartUrl = constructChartUrl({ hit, grapherParams: countryParam })\n    const sourcesUrl = constructChartUrl({\n        hit,\n        grapherParams: countryParam,\n        overlay: \"sources\",\n    })\n    const downloadUrl = constructChartUrl({\n        hit,\n        grapherParams: countryParam,\n        overlay: \"download-data\",\n    })\n\n    const contentStyle = {\n        \"--num-columns\": getTotalColumnCount(data.layout),\n    } as React.CSSProperties\n\n    return (\n        <div ref={ref} className=\"search-chart-hit-rich-data\">\n            <div className=\"search-chart-hit-rich-data__header\">\n                <SearchChartHitHeader\n                    hit={hit}\n                    title={data.title}\n                    subtitle={data.subtitle}\n                    url={chartUrl}\n                    source={data.source}\n                    isLarge={isLargeVariant}\n                    onClick={onClick}\n                />\n                <SearchChartHitHeaderActionButtons\n                    isLarge={isLargeVariant}\n                    sourcesUrl={sourcesUrl}\n                    downloadUrl={downloadUrl}\n                />\n            </div>\n\n            <div\n                className={cx(\n                    \"search-chart-hit-rich-data__content\",\n                    `search-chart-hit-rich-data__content--${variant}`,\n                    {\n                        \"search-chart-hit-rich-data__content--scatter\":\n                            hasScatter,\n                    }\n                )}\n                style={contentStyle}\n            >\n                {data.layout.map(\n                    ({ grapherTab, slotKey, chartParams }, tabIndex) => {\n                        const isSmallSlot =\n                            slotKey === MediumVariantGridSlotKey.SmallLeft ||\n                            slotKey === MediumVariantGridSlotKey.SmallRight\n\n                        const chartUrl = constructChartUrlForTab({\n                            hit,\n                            grapherTab,\n                            primaryGrapherTab: data.layout[0].grapherTab,\n                            grapherQueryParams: data.grapherQueryParams,\n                            overwriteParams: chartParams,\n                        })\n\n                        const { previewUrl, imageWidth, imageHeight } =\n                            constructPreviewUrlForTab({\n                                hit,\n                                grapherQueryParams: data.grapherQueryParams,\n                                variant,\n                                layout: data.layout,\n                                slotIndex: tabIndex,\n                                isMediumScreen,\n                                hasScatter,\n                            })\n\n                        const className = makeSlotClassNames(variant, slotKey)\n\n                        // Show the unit only on the first tab's thumbnail\n                        // and only if the tab is not a scatter plot\n                        const isScatter =\n                            grapherTab === GRAPHER_TAB_NAMES.ScatterPlot\n                        const unit =\n                            tabIndex === 0 && !isScatter ? data.unit : undefined\n\n                        return grapherTab === GRAPHER_TAB_NAMES.Table ? (\n                            <CaptionedTable\n                                key={grapherTab}\n                                chartUrl={chartUrl}\n                                dataTableContent={data.dataTable}\n                                numAvailableEntities={\n                                    data.numAvailableEntities ??\n                                    availableEntities.length\n                                }\n                                numRowsPerColumn={numDataTableRowsPerColumn}\n                                entityType={data.entityType}\n                                entityTypePlural={data.entityTypePlural}\n                                className={className}\n                                onClick={() => onClick(grapherTab)}\n                            />\n                        ) : (\n                            <CaptionedThumbnail\n                                key={grapherTab}\n                                chartType={grapherTab}\n                                isSmallSlot={isSmallSlot}\n                                chartUrl={chartUrl}\n                                previewUrl={previewUrl}\n                                imageWidth={imageWidth}\n                                imageHeight={imageHeight}\n                                unit={unit}\n                                className={className}\n                                onClick={() => onClick(grapherTab)}\n                            />\n                        )\n                    }\n                )}\n\n                {data.valueDisplay && (\n                    <SearchChartHitDataDisplay\n                        className=\"data-slot\"\n                        {...data.valueDisplay}\n                    />\n                )}\n            </div>\n        </div>\n    )\n}\n\nfunction SearchChartHitHeaderActionButtons({\n    isLarge,\n    sourcesUrl,\n    downloadUrl,\n}: {\n    isLarge: boolean\n    sourcesUrl: string\n    downloadUrl: string\n}): React.ReactElement {\n    return (\n        <div className=\"search-chart-hit-rich-data__header-actions\">\n            {isLarge && (\n                <Button\n                    text=\"Learn more about this data\"\n                    className=\"search-chart-hit-rich-data__button\"\n                    theme=\"outline-light-blue\"\n                    href={sourcesUrl}\n                    icon={null}\n                    dataTrackNote=\"search-sources-modal\"\n                />\n            )}\n            <Button\n                text=\"Download options\"\n                className=\"search-chart-hit-rich-data__button\"\n                theme=\"solid-light-blue\"\n                href={downloadUrl}\n                icon={faDownload}\n                iconPosition=\"left\"\n                dataTrackNote=\"search-download-options\"\n            />\n        </div>\n    )\n}\n\nfunction RichDataContentPlaceholder({\n    variant,\n    hasScatter,\n}: {\n    variant: RichDataComponentVariant\n    hasScatter: boolean\n}): React.ReactElement {\n    return match(variant)\n        .with(\"medium\", () => (\n            <RichDataContentMediumVariantPlaceholder hasScatter={hasScatter} />\n        ))\n        .with(\"large\", () => <RichDataContentLargeVariantPlaceholder />)\n        .exhaustive()\n}\n\nfunction RichDataContentMediumVariantPlaceholder({\n    hasScatter,\n}: {\n    hasScatter: boolean\n}): React.ReactElement {\n    return (\n        <div\n            className={cx(\n                \"search-chart-hit-rich-data__content\",\n                \"search-chart-hit-rich-data__content--medium\",\n                { \"search-chart-hit-rich-data__content--scatter\": hasScatter }\n            )}\n            style={{ \"--num-columns\": 3 } as React.CSSProperties}\n        >\n            <GrapherThumbnailPlaceholder\n                variant=\"medium\"\n                slot={MediumVariantGridSlotKey.Single}\n            />\n            <GrapherThumbnailPlaceholder\n                variant=\"medium\"\n                slot={MediumVariantGridSlotKey.Single}\n            />\n            <GrapherThumbnailPlaceholder\n                variant=\"medium\"\n                slot={MediumVariantGridSlotKey.Single}\n            />\n        </div>\n    )\n}\n\nfunction RichDataContentLargeVariantPlaceholder(): React.ReactElement {\n    return (\n        <div className=\"search-chart-hit-rich-data__content search-chart-hit-rich-data__content--large\">\n            <GrapherThumbnailPlaceholder\n                variant=\"large\"\n                slot={LargeVariantGridSlotKey.LeftQuad}\n            />\n            <GrapherThumbnailPlaceholder\n                variant=\"large\"\n                slot={LargeVariantGridSlotKey.RightQuadLeftColumn}\n            />\n            <GrapherThumbnailPlaceholder\n                variant=\"large\"\n                slot={LargeVariantGridSlotKey.SingleCell}\n            />\n            <GrapherThumbnailPlaceholder\n                variant=\"large\"\n                slot={LargeVariantGridSlotKey.SingleCell}\n            />\n        </div>\n    )\n}\n\nfunction GrapherThumbnailPlaceholder({\n    variant,\n    slot,\n}: {\n    variant: RichDataComponentVariant\n    slot: GridSlotKey\n}): React.ReactElement {\n    return (\n        <div\n            className={cx(\n                \"search-chart-hit-rich-data__placeholder\",\n                makeSlotClassNames(variant, slot)\n            )}\n        >\n            <div className=\"search-chart-hit-rich-data__thumbnail-placeholder\" />\n            <div className=\"search-chart-hit-rich-data__captioned-link-label\" />\n        </div>\n    )\n}\n\nfunction useQuerySearchResultDataForChartHit({\n    hit,\n    params,\n    enabled,\n}: {\n    hit: SearchChartHit\n    params: {\n        version: number\n        entities?: EntityName[]\n        variant: RichDataComponentVariant\n        numDataTableRowsPerColumn: number\n    }\n    enabled?: boolean\n}): { data?: GrapherSearchResultJson; status: QueryStatus } {\n    const { data, status } = useQuery({\n        queryKey: chartHitQueryKeys.searchResultData(\n            hit.slug,\n            hit.type === ChartRecordType.Chart ? undefined : hit.queryParams,\n            params.version,\n            params.variant,\n            params.entities,\n            params.numDataTableRowsPerColumn\n        ),\n        queryFn: () => {\n            const url = constructSearchResultUrl({ hit, params })\n            if (!url) return null\n            return fetchJson<GrapherSearchResultJson>(url, { timeoutMs: 5000 })\n        },\n        // If a query fails, it's likely because the worker\n        // exceeded resource limits (which is expected for some\n        // of our charts). Rather than retrying, we fail immediately\n        // and fall back to a simpler display.\n        retry: false,\n        enabled,\n    })\n\n    // If the result is null, the query URL couldn't be constructed. In this\n    // case, return an error status instead of a success status with null data\n    if (data === null) return { status: \"error\" }\n\n    // Treat an empty data table as an error\n    if (data && data.dataTable.rows.length === 0) return { status: \"error\" }\n\n    return { data, status }\n}\n\nfunction constructChartUrlForTab({\n    hit,\n    grapherTab,\n    primaryGrapherTab,\n    grapherQueryParams,\n    overwriteParams,\n}: {\n    hit: SearchChartHit\n    grapherTab: GrapherTabName\n    primaryGrapherTab: GrapherTabName\n    grapherQueryParams: GrapherQueryParams\n    overwriteParams?: GrapherQueryParams\n}): string {\n    // Use Grapher's changedParams to construct chart URL.\n    // We override the tab parameter because the GrapherState is currently set to\n    // the first tab of the chart, but we need to generate URLs for the specific\n    // tab being rendered in this preview.\n    const grapherParams = {\n        ...grapherQueryParams,\n        ...overwriteParams,\n        tab: mapGrapherTabNameToQueryParam(grapherTab),\n    }\n\n    // We don't want to link to a chart where entities are highlighted.\n    const omitParamsForChartUrl: (keyof GrapherQueryParams)[] = [\"focus\"]\n\n    // In case of scatters and Marimekkos, we also ignore the current\n    // entity selection so that we always link to a chart with the default\n    // selection.\n    if (\n        grapherTab === GRAPHER_TAB_NAMES.ScatterPlot ||\n        grapherTab === GRAPHER_TAB_NAMES.Marimekko ||\n        primaryGrapherTab === GRAPHER_TAB_NAMES.ScatterPlot ||\n        primaryGrapherTab === GRAPHER_TAB_NAMES.Marimekko\n    )\n        omitParamsForChartUrl.push(\"country\")\n\n    return constructChartUrl({\n        hit,\n        grapherParams: R.omit(grapherParams, omitParamsForChartUrl),\n    })\n}\n\nfunction constructPreviewUrlForTab({\n    hit,\n    grapherQueryParams,\n    variant,\n    layout,\n    slotIndex,\n    isMediumScreen,\n    hasScatter,\n}: {\n    hit: SearchChartHit\n    grapherQueryParams: GrapherQueryParams\n    variant: SearchChartHitComponentVariant\n    layout: LayoutSlot[]\n    slotIndex: number\n    isMediumScreen: boolean\n    hasScatter: boolean\n}): { previewUrl: string; imageWidth?: number; imageHeight?: number } {\n    const { grapherTab, previewParams } = layout[slotIndex]\n\n    // Always use the complete version on smaller screens since\n    // the table might not be visible\n    const isPrimaryTab = slotIndex === 0\n    const previewType = isMediumScreen\n        ? { variant: PreviewVariant.Thumbnail, isMinimal: false }\n        : getPreviewType(variant, { isPrimaryTab })\n\n    // Use Grapher's changedParams to construct preview URL.\n    // We override the tab parameter because the GrapherState is currently set to\n    // the first tab of the chart, but we need to generate URLs for the specific\n    // tab being rendered in this preview.\n    const grapherParams = {\n        ...grapherQueryParams,\n        tab: mapGrapherTabNameToQueryParam(grapherTab),\n    }\n\n    const { width: imageWidth, height: imageHeight } =\n        previewType.variant === PreviewVariant.Large\n            ? calculateLargePreviewImageDimensions(layout)\n            : hasScatter\n              ? calculateScatterPreviewImageDimensions()\n              : {}\n\n    // Use a smaller font size for chart types where labels or legends would\n    // otherwise be too overpowering in thumbnail previews. Otherwise, rely on\n    // the default\n    const tabsWithSmallerFont: GrapherTabName[] = [\n        GRAPHER_TAB_NAMES.WorldMap,\n        GRAPHER_TAB_NAMES.DiscreteBar,\n        GRAPHER_TAB_NAMES.StackedDiscreteBar,\n        GRAPHER_TAB_NAMES.Swimlane,\n        GRAPHER_TAB_NAMES.Dumbbell,\n    ]\n    const fontSize =\n        previewType.variant === PreviewVariant.Thumbnail &&\n        tabsWithSmallerFont.includes(grapherTab)\n            ? 12\n            : undefined\n\n    const previewUrl = constructPreviewUrl({\n        hit,\n        grapherParams: {\n            ...grapherParams,\n            ...previewParams,\n        },\n        variant: previewType.variant,\n        isMinimal: previewType.isMinimal,\n        fontSize,\n        imageWidth,\n        imageHeight,\n    })\n\n    return { previewUrl, imageWidth, imageHeight }\n}\n\nfunction calculateLargePreviewImageDimensions(layout: LayoutSlot[]): {\n    width: number\n    height: number\n} {\n    const slots = layout.map(({ slotKey }) => slotKey)\n\n    if (slots.length <= 2) {\n        return {\n            width: 4 * GRAPHER_THUMBNAIL_WIDTH,\n            height: 4 * GRAPHER_THUMBNAIL_HEIGHT,\n        }\n    }\n\n    // The large chart must be a little taller to match the combined height of\n    // both thumbnails plus the vertical spacing and caption text between them.\n    return {\n        width: 4 * GRAPHER_THUMBNAIL_WIDTH,\n        height: 4 * GRAPHER_THUMBNAIL_HEIGHT + 4 * 16, // Magic number\n    }\n}\n","import { match } from \"ts-pattern\"\nimport { useMediaQuery } from \"usehooks-ts\"\nimport { SearchChartHitSmall } from \"./SearchChartHitSmall.js\"\nimport {\n    SearchChartHitComponentProps,\n    SearchChartHitComponentVariant,\n} from \"@ourworldindata/types\"\nimport { SearchChartHitRichData } from \"./SearchChartHitRichData.js\"\nimport { MEDIUM_BREAKPOINT_MEDIA_QUERY } from \"../SiteConstants.js\"\n\nexport const SearchChartHitComponent = (\n    props: SearchChartHitComponentProps & {\n        variant: SearchChartHitComponentVariant\n    }\n) => {\n    const { variant, ...componentProps } = props\n    return match(variant)\n        .with(\"large\", () => <SearchChartHitLarge {...componentProps} />)\n        .with(\"medium\", () => <SearchChartHitMedium {...componentProps} />)\n        .with(\"small\", () => <SearchChartHitSmall {...componentProps} />)\n        .exhaustive()\n}\n\nconst SearchChartHitMedium = (\n    props: SearchChartHitComponentProps\n): React.ReactElement => {\n    return <SearchChartHitRichData variant=\"medium\" {...props} />\n}\n\nconst SearchChartHitLarge = (\n    props: SearchChartHitComponentProps\n): React.ReactElement => {\n    const isMediumScreen = useMediaQuery(MEDIUM_BREAKPOINT_MEDIA_QUERY)\n\n    // On smaller screens, render the medium variant which implements the\n    // mobile layout for smaller viewports\n    if (isMediumScreen) return <SearchChartHitMedium {...props} />\n\n    return <SearchChartHitRichData variant=\"large\" {...props} />\n}\n","/**\n * @remix-run/router v1.23.2\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nfunction _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Actions represent the type of change to a location value.\n */\nvar Action;\n(function (Action) {\n  /**\n   * A POP indicates a change to an arbitrary index in the history stack, such\n   * as a back or forward navigation. It does not describe the direction of the\n   * navigation, only that the current index changed.\n   *\n   * Note: This is the default action for newly created history objects.\n   */\n  Action[\"Pop\"] = \"POP\";\n  /**\n   * A PUSH indicates a new entry being added to the history stack, such as when\n   * a link is clicked and a new page loads. When this happens, all subsequent\n   * entries in the stack are lost.\n   */\n  Action[\"Push\"] = \"PUSH\";\n  /**\n   * A REPLACE indicates the entry at the current index in the history stack\n   * being replaced by a new one.\n   */\n  Action[\"Replace\"] = \"REPLACE\";\n})(Action || (Action = {}));\nconst PopStateEventType = \"popstate\";\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nfunction createMemoryHistory(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  let {\n    initialEntries = [\"/\"],\n    initialIndex,\n    v5Compat = false\n  } = options;\n  let entries; // Declare so we can access from createMemoryLocation\n  entries = initialEntries.map((entry, index) => createMemoryLocation(entry, typeof entry === \"string\" ? null : entry.state, index === 0 ? \"default\" : undefined));\n  let index = clampIndex(initialIndex == null ? entries.length - 1 : initialIndex);\n  let action = Action.Pop;\n  let listener = null;\n  function clampIndex(n) {\n    return Math.min(Math.max(n, 0), entries.length - 1);\n  }\n  function getCurrentLocation() {\n    return entries[index];\n  }\n  function createMemoryLocation(to, state, key) {\n    if (state === void 0) {\n      state = null;\n    }\n    let location = createLocation(entries ? getCurrentLocation().pathname : \"/\", to, state, key);\n    warning(location.pathname.charAt(0) === \"/\", \"relative pathnames are not supported in memory history: \" + JSON.stringify(to));\n    return location;\n  }\n  function createHref(to) {\n    return typeof to === \"string\" ? to : createPath(to);\n  }\n  let history = {\n    get index() {\n      return index;\n    },\n    get action() {\n      return action;\n    },\n    get location() {\n      return getCurrentLocation();\n    },\n    createHref,\n    createURL(to) {\n      return new URL(createHref(to), \"http://localhost\");\n    },\n    encodeLocation(to) {\n      let path = typeof to === \"string\" ? parsePath(to) : to;\n      return {\n        pathname: path.pathname || \"\",\n        search: path.search || \"\",\n        hash: path.hash || \"\"\n      };\n    },\n    push(to, state) {\n      action = Action.Push;\n      let nextLocation = createMemoryLocation(to, state);\n      index += 1;\n      entries.splice(index, entries.length, nextLocation);\n      if (v5Compat && listener) {\n        listener({\n          action,\n          location: nextLocation,\n          delta: 1\n        });\n      }\n    },\n    replace(to, state) {\n      action = Action.Replace;\n      let nextLocation = createMemoryLocation(to, state);\n      entries[index] = nextLocation;\n      if (v5Compat && listener) {\n        listener({\n          action,\n          location: nextLocation,\n          delta: 0\n        });\n      }\n    },\n    go(delta) {\n      action = Action.Pop;\n      let nextIndex = clampIndex(index + delta);\n      let nextLocation = entries[nextIndex];\n      index = nextIndex;\n      if (listener) {\n        listener({\n          action,\n          location: nextLocation,\n          delta\n        });\n      }\n    },\n    listen(fn) {\n      listener = fn;\n      return () => {\n        listener = null;\n      };\n    }\n  };\n  return history;\n}\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nfunction createBrowserHistory(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  function createBrowserLocation(window, globalHistory) {\n    let {\n      pathname,\n      search,\n      hash\n    } = window.location;\n    return createLocation(\"\", {\n      pathname,\n      search,\n      hash\n    },\n    // state defaults to `null` because `window.history.state` does\n    globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || \"default\");\n  }\n  function createBrowserHref(window, to) {\n    return typeof to === \"string\" ? to : createPath(to);\n  }\n  return getUrlBasedHistory(createBrowserLocation, createBrowserHref, null, options);\n}\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nfunction createHashHistory(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  function createHashLocation(window, globalHistory) {\n    let {\n      pathname = \"/\",\n      search = \"\",\n      hash = \"\"\n    } = parsePath(window.location.hash.substr(1));\n    // Hash URL should always have a leading / just like window.location.pathname\n    // does, so if an app ends up at a route like /#something then we add a\n    // leading slash so all of our path-matching behaves the same as if it would\n    // in a browser router.  This is particularly important when there exists a\n    // root splat route (<Route path=\"*\">) since that matches internally against\n    // \"/*\" and we'd expect /#something to 404 in a hash router app.\n    if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n      pathname = \"/\" + pathname;\n    }\n    return createLocation(\"\", {\n      pathname,\n      search,\n      hash\n    },\n    // state defaults to `null` because `window.history.state` does\n    globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || \"default\");\n  }\n  function createHashHref(window, to) {\n    let base = window.document.querySelector(\"base\");\n    let href = \"\";\n    if (base && base.getAttribute(\"href\")) {\n      let url = window.location.href;\n      let hashIndex = url.indexOf(\"#\");\n      href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n    }\n    return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n  }\n  function validateHashLocation(location, to) {\n    warning(location.pathname.charAt(0) === \"/\", \"relative pathnames are not supported in hash history.push(\" + JSON.stringify(to) + \")\");\n  }\n  return getUrlBasedHistory(createHashLocation, createHashHref, validateHashLocation, options);\n}\nfunction invariant(value, message) {\n  if (value === false || value === null || typeof value === \"undefined\") {\n    throw new Error(message);\n  }\n}\nfunction warning(cond, message) {\n  if (!cond) {\n    // eslint-disable-next-line no-console\n    if (typeof console !== \"undefined\") console.warn(message);\n    try {\n      // Welcome to debugging history!\n      //\n      // This error is thrown as a convenience, so you can more easily\n      // find the source for a warning that appears in the console by\n      // enabling \"pause on exceptions\" in your JavaScript debugger.\n      throw new Error(message);\n      // eslint-disable-next-line no-empty\n    } catch (e) {}\n  }\n}\nfunction createKey() {\n  return Math.random().toString(36).substr(2, 8);\n}\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location, index) {\n  return {\n    usr: location.state,\n    key: location.key,\n    idx: index\n  };\n}\n/**\n * Creates a Location object with a unique key from the given Path\n */\nfunction createLocation(current, to, state, key) {\n  if (state === void 0) {\n    state = null;\n  }\n  let location = _extends({\n    pathname: typeof current === \"string\" ? current : current.pathname,\n    search: \"\",\n    hash: \"\"\n  }, typeof to === \"string\" ? parsePath(to) : to, {\n    state,\n    // TODO: This could be cleaned up.  push/replace should probably just take\n    // full Locations now and avoid the need to run through this flow at all\n    // But that's a pretty big refactor to the current test suite so going to\n    // keep as is for the time being and just let any incoming keys take precedence\n    key: to && to.key || key || createKey()\n  });\n  return location;\n}\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nfunction createPath(_ref) {\n  let {\n    pathname = \"/\",\n    search = \"\",\n    hash = \"\"\n  } = _ref;\n  if (search && search !== \"?\") pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n  if (hash && hash !== \"#\") pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n  return pathname;\n}\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nfunction parsePath(path) {\n  let parsedPath = {};\n  if (path) {\n    let hashIndex = path.indexOf(\"#\");\n    if (hashIndex >= 0) {\n      parsedPath.hash = path.substr(hashIndex);\n      path = path.substr(0, hashIndex);\n    }\n    let searchIndex = path.indexOf(\"?\");\n    if (searchIndex >= 0) {\n      parsedPath.search = path.substr(searchIndex);\n      path = path.substr(0, searchIndex);\n    }\n    if (path) {\n      parsedPath.pathname = path;\n    }\n  }\n  return parsedPath;\n}\nfunction getUrlBasedHistory(getLocation, createHref, validateLocation, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  let {\n    window = document.defaultView,\n    v5Compat = false\n  } = options;\n  let globalHistory = window.history;\n  let action = Action.Pop;\n  let listener = null;\n  let index = getIndex();\n  // Index should only be null when we initialize. If not, it's because the\n  // user called history.pushState or history.replaceState directly, in which\n  // case we should log a warning as it will result in bugs.\n  if (index == null) {\n    index = 0;\n    globalHistory.replaceState(_extends({}, globalHistory.state, {\n      idx: index\n    }), \"\");\n  }\n  function getIndex() {\n    let state = globalHistory.state || {\n      idx: null\n    };\n    return state.idx;\n  }\n  function handlePop() {\n    action = Action.Pop;\n    let nextIndex = getIndex();\n    let delta = nextIndex == null ? null : nextIndex - index;\n    index = nextIndex;\n    if (listener) {\n      listener({\n        action,\n        location: history.location,\n        delta\n      });\n    }\n  }\n  function push(to, state) {\n    action = Action.Push;\n    let location = createLocation(history.location, to, state);\n    if (validateLocation) validateLocation(location, to);\n    index = getIndex() + 1;\n    let historyState = getHistoryState(location, index);\n    let url = history.createHref(location);\n    // try...catch because iOS limits us to 100 pushState calls :/\n    try {\n      globalHistory.pushState(historyState, \"\", url);\n    } catch (error) {\n      // If the exception is because `state` can't be serialized, let that throw\n      // outwards just like a replace call would so the dev knows the cause\n      // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n      // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n      if (error instanceof DOMException && error.name === \"DataCloneError\") {\n        throw error;\n      }\n      // They are going to lose state here, but there is no real\n      // way to warn them about it since the page will refresh...\n      window.location.assign(url);\n    }\n    if (v5Compat && listener) {\n      listener({\n        action,\n        location: history.location,\n        delta: 1\n      });\n    }\n  }\n  function replace(to, state) {\n    action = Action.Replace;\n    let location = createLocation(history.location, to, state);\n    if (validateLocation) validateLocation(location, to);\n    index = getIndex();\n    let historyState = getHistoryState(location, index);\n    let url = history.createHref(location);\n    globalHistory.replaceState(historyState, \"\", url);\n    if (v5Compat && listener) {\n      listener({\n        action,\n        location: history.location,\n        delta: 0\n      });\n    }\n  }\n  function createURL(to) {\n    // window.location.origin is \"null\" (the literal string value) in Firefox\n    // under certain conditions, notably when serving from a local HTML file\n    // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n    let base = window.location.origin !== \"null\" ? window.location.origin : window.location.href;\n    let href = typeof to === \"string\" ? to : createPath(to);\n    // Treating this as a full URL will strip any trailing spaces so we need to\n    // pre-encode them since they might be part of a matching splat param from\n    // an ancestor route\n    href = href.replace(/ $/, \"%20\");\n    invariant(base, \"No window.location.(origin|href) available to create URL for href: \" + href);\n    return new URL(href, base);\n  }\n  let history = {\n    get action() {\n      return action;\n    },\n    get location() {\n      return getLocation(window, globalHistory);\n    },\n    listen(fn) {\n      if (listener) {\n        throw new Error(\"A history only accepts one active listener\");\n      }\n      window.addEventListener(PopStateEventType, handlePop);\n      listener = fn;\n      return () => {\n        window.removeEventListener(PopStateEventType, handlePop);\n        listener = null;\n      };\n    },\n    createHref(to) {\n      return createHref(window, to);\n    },\n    createURL,\n    encodeLocation(to) {\n      // Encode a Location the same way window.location would\n      let url = createURL(to);\n      return {\n        pathname: url.pathname,\n        search: url.search,\n        hash: url.hash\n      };\n    },\n    push,\n    replace,\n    go(n) {\n      return globalHistory.go(n);\n    }\n  };\n  return history;\n}\n//#endregion\n\nvar ResultType;\n(function (ResultType) {\n  ResultType[\"data\"] = \"data\";\n  ResultType[\"deferred\"] = \"deferred\";\n  ResultType[\"redirect\"] = \"redirect\";\n  ResultType[\"error\"] = \"error\";\n})(ResultType || (ResultType = {}));\nconst immutableRouteKeys = new Set([\"lazy\", \"caseSensitive\", \"path\", \"id\", \"index\", \"children\"]);\nfunction isIndexRoute(route) {\n  return route.index === true;\n}\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nfunction convertRoutesToDataRoutes(routes, mapRouteProperties, parentPath, manifest) {\n  if (parentPath === void 0) {\n    parentPath = [];\n  }\n  if (manifest === void 0) {\n    manifest = {};\n  }\n  return routes.map((route, index) => {\n    let treePath = [...parentPath, String(index)];\n    let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n    invariant(route.index !== true || !route.children, \"Cannot specify children on an index route\");\n    invariant(!manifest[id], \"Found a route id collision on id \\\"\" + id + \"\\\".  Route \" + \"id's must be globally unique within Data Router usages\");\n    if (isIndexRoute(route)) {\n      let indexRoute = _extends({}, route, mapRouteProperties(route), {\n        id\n      });\n      manifest[id] = indexRoute;\n      return indexRoute;\n    } else {\n      let pathOrLayoutRoute = _extends({}, route, mapRouteProperties(route), {\n        id,\n        children: undefined\n      });\n      manifest[id] = pathOrLayoutRoute;\n      if (route.children) {\n        pathOrLayoutRoute.children = convertRoutesToDataRoutes(route.children, mapRouteProperties, treePath, manifest);\n      }\n      return pathOrLayoutRoute;\n    }\n  });\n}\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/v6/utils/match-routes\n */\nfunction matchRoutes(routes, locationArg, basename) {\n  if (basename === void 0) {\n    basename = \"/\";\n  }\n  return matchRoutesImpl(routes, locationArg, basename, false);\n}\nfunction matchRoutesImpl(routes, locationArg, basename, allowPartial) {\n  let location = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n  let pathname = stripBasename(location.pathname || \"/\", basename);\n  if (pathname == null) {\n    return null;\n  }\n  let branches = flattenRoutes(routes);\n  rankRouteBranches(branches);\n  let matches = null;\n  for (let i = 0; matches == null && i < branches.length; ++i) {\n    // Incoming pathnames are generally encoded from either window.location\n    // or from router.navigate, but we want to match against the unencoded\n    // paths in the route definitions.  Memory router locations won't be\n    // encoded here but there also shouldn't be anything to decode so this\n    // should be a safe operation.  This avoids needing matchRoutes to be\n    // history-aware.\n    let decoded = decodePath(pathname);\n    matches = matchRouteBranch(branches[i], decoded, allowPartial);\n  }\n  return matches;\n}\nfunction convertRouteMatchToUiMatch(match, loaderData) {\n  let {\n    route,\n    pathname,\n    params\n  } = match;\n  return {\n    id: route.id,\n    pathname,\n    params,\n    data: loaderData[route.id],\n    handle: route.handle\n  };\n}\nfunction flattenRoutes(routes, branches, parentsMeta, parentPath) {\n  if (branches === void 0) {\n    branches = [];\n  }\n  if (parentsMeta === void 0) {\n    parentsMeta = [];\n  }\n  if (parentPath === void 0) {\n    parentPath = \"\";\n  }\n  let flattenRoute = (route, index, relativePath) => {\n    let meta = {\n      relativePath: relativePath === undefined ? route.path || \"\" : relativePath,\n      caseSensitive: route.caseSensitive === true,\n      childrenIndex: index,\n      route\n    };\n    if (meta.relativePath.startsWith(\"/\")) {\n      invariant(meta.relativePath.startsWith(parentPath), \"Absolute route path \\\"\" + meta.relativePath + \"\\\" nested under path \" + (\"\\\"\" + parentPath + \"\\\" is not valid. An absolute child route path \") + \"must start with the combined path of all its parent routes.\");\n      meta.relativePath = meta.relativePath.slice(parentPath.length);\n    }\n    let path = joinPaths([parentPath, meta.relativePath]);\n    let routesMeta = parentsMeta.concat(meta);\n    // Add the children before adding this route to the array, so we traverse the\n    // route tree depth-first and child routes appear before their parents in\n    // the \"flattened\" version.\n    if (route.children && route.children.length > 0) {\n      invariant(\n      // Our types know better, but runtime JS may not!\n      // @ts-expect-error\n      route.index !== true, \"Index routes must not have child routes. Please remove \" + (\"all child routes from route path \\\"\" + path + \"\\\".\"));\n      flattenRoutes(route.children, branches, routesMeta, path);\n    }\n    // Routes without a path shouldn't ever match by themselves unless they are\n    // index routes, so don't add them to the list of possible branches.\n    if (route.path == null && !route.index) {\n      return;\n    }\n    branches.push({\n      path,\n      score: computeScore(path, route.index),\n      routesMeta\n    });\n  };\n  routes.forEach((route, index) => {\n    var _route$path;\n    // coarse-grain check for optional params\n    if (route.path === \"\" || !((_route$path = route.path) != null && _route$path.includes(\"?\"))) {\n      flattenRoute(route, index);\n    } else {\n      for (let exploded of explodeOptionalSegments(route.path)) {\n        flattenRoute(route, index, exploded);\n      }\n    }\n  });\n  return branches;\n}\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path) {\n  let segments = path.split(\"/\");\n  if (segments.length === 0) return [];\n  let [first, ...rest] = segments;\n  // Optional path segments are denoted by a trailing `?`\n  let isOptional = first.endsWith(\"?\");\n  // Compute the corresponding required segment: `foo?` -> `foo`\n  let required = first.replace(/\\?$/, \"\");\n  if (rest.length === 0) {\n    // Intepret empty string as omitting an optional segment\n    // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n    return isOptional ? [required, \"\"] : [required];\n  }\n  let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n  let result = [];\n  // All child paths with the prefix.  Do this for all children before the\n  // optional version for all children, so we get consistent ordering where the\n  // parent optional aspect is preferred as required.  Otherwise, we can get\n  // child sections interspersed where deeper optional segments are higher than\n  // parent optional segments, where for example, /:two would explode _earlier_\n  // then /:one.  By always including the parent as required _for all children_\n  // first, we avoid this issue\n  result.push(...restExploded.map(subpath => subpath === \"\" ? required : [required, subpath].join(\"/\")));\n  // Then, if this is an optional value, add all child versions without\n  if (isOptional) {\n    result.push(...restExploded);\n  }\n  // for absolute paths, ensure `/` instead of empty segment\n  return result.map(exploded => path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded);\n}\nfunction rankRouteBranches(branches) {\n  branches.sort((a, b) => a.score !== b.score ? b.score - a.score // Higher score first\n  : compareIndexes(a.routesMeta.map(meta => meta.childrenIndex), b.routesMeta.map(meta => meta.childrenIndex)));\n}\nconst paramRe = /^:[\\w-]+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = s => s === \"*\";\nfunction computeScore(path, index) {\n  let segments = path.split(\"/\");\n  let initialScore = segments.length;\n  if (segments.some(isSplat)) {\n    initialScore += splatPenalty;\n  }\n  if (index) {\n    initialScore += indexRouteValue;\n  }\n  return segments.filter(s => !isSplat(s)).reduce((score, segment) => score + (paramRe.test(segment) ? dynamicSegmentValue : segment === \"\" ? emptySegmentValue : staticSegmentValue), initialScore);\n}\nfunction compareIndexes(a, b) {\n  let siblings = a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n  return siblings ?\n  // If two routes are siblings, we should try to match the earlier sibling\n  // first. This allows people to have fine-grained control over the matching\n  // behavior by simply putting routes with identical paths in the order they\n  // want them tried.\n  a[a.length - 1] - b[b.length - 1] :\n  // Otherwise, it doesn't really make sense to rank non-siblings by index,\n  // so they sort equally.\n  0;\n}\nfunction matchRouteBranch(branch, pathname, allowPartial) {\n  if (allowPartial === void 0) {\n    allowPartial = false;\n  }\n  let {\n    routesMeta\n  } = branch;\n  let matchedParams = {};\n  let matchedPathname = \"/\";\n  let matches = [];\n  for (let i = 0; i < routesMeta.length; ++i) {\n    let meta = routesMeta[i];\n    let end = i === routesMeta.length - 1;\n    let remainingPathname = matchedPathname === \"/\" ? pathname : pathname.slice(matchedPathname.length) || \"/\";\n    let match = matchPath({\n      path: meta.relativePath,\n      caseSensitive: meta.caseSensitive,\n      end\n    }, remainingPathname);\n    let route = meta.route;\n    if (!match && end && allowPartial && !routesMeta[routesMeta.length - 1].route.index) {\n      match = matchPath({\n        path: meta.relativePath,\n        caseSensitive: meta.caseSensitive,\n        end: false\n      }, remainingPathname);\n    }\n    if (!match) {\n      return null;\n    }\n    Object.assign(matchedParams, match.params);\n    matches.push({\n      // TODO: Can this as be avoided?\n      params: matchedParams,\n      pathname: joinPaths([matchedPathname, match.pathname]),\n      pathnameBase: normalizePathname(joinPaths([matchedPathname, match.pathnameBase])),\n      route\n    });\n    if (match.pathnameBase !== \"/\") {\n      matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n    }\n  }\n  return matches;\n}\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/v6/utils/generate-path\n */\nfunction generatePath(originalPath, params) {\n  if (params === void 0) {\n    params = {};\n  }\n  let path = originalPath;\n  if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n    warning(false, \"Route path \\\"\" + path + \"\\\" will be treated as if it were \" + (\"\\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\" because the `*` character must \") + \"always follow a `/` in the pattern. To get rid of this warning, \" + (\"please change the route path to \\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\".\"));\n    path = path.replace(/\\*$/, \"/*\");\n  }\n  // ensure `/` is added at the beginning if the path is absolute\n  const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n  const stringify = p => p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n  const segments = path.split(/\\/+/).map((segment, index, array) => {\n    const isLastSegment = index === array.length - 1;\n    // only apply the splat if it's the last segment\n    if (isLastSegment && segment === \"*\") {\n      const star = \"*\";\n      // Apply the splat\n      return stringify(params[star]);\n    }\n    const keyMatch = segment.match(/^:([\\w-]+)(\\??)$/);\n    if (keyMatch) {\n      const [, key, optional] = keyMatch;\n      let param = params[key];\n      invariant(optional === \"?\" || param != null, \"Missing \\\":\" + key + \"\\\" param\");\n      return stringify(param);\n    }\n    // Remove any optional markers from optional static segments\n    return segment.replace(/\\?$/g, \"\");\n  })\n  // Remove empty segments\n  .filter(segment => !!segment);\n  return prefix + segments.join(\"/\");\n}\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/v6/utils/match-path\n */\nfunction matchPath(pattern, pathname) {\n  if (typeof pattern === \"string\") {\n    pattern = {\n      path: pattern,\n      caseSensitive: false,\n      end: true\n    };\n  }\n  let [matcher, compiledParams] = compilePath(pattern.path, pattern.caseSensitive, pattern.end);\n  let match = pathname.match(matcher);\n  if (!match) return null;\n  let matchedPathname = match[0];\n  let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n  let captureGroups = match.slice(1);\n  let params = compiledParams.reduce((memo, _ref, index) => {\n    let {\n      paramName,\n      isOptional\n    } = _ref;\n    // We need to compute the pathnameBase here using the raw splat value\n    // instead of using params[\"*\"] later because it will be decoded then\n    if (paramName === \"*\") {\n      let splatValue = captureGroups[index] || \"\";\n      pathnameBase = matchedPathname.slice(0, matchedPathname.length - splatValue.length).replace(/(.)\\/+$/, \"$1\");\n    }\n    const value = captureGroups[index];\n    if (isOptional && !value) {\n      memo[paramName] = undefined;\n    } else {\n      memo[paramName] = (value || \"\").replace(/%2F/g, \"/\");\n    }\n    return memo;\n  }, {});\n  return {\n    params,\n    pathname: matchedPathname,\n    pathnameBase,\n    pattern\n  };\n}\nfunction compilePath(path, caseSensitive, end) {\n  if (caseSensitive === void 0) {\n    caseSensitive = false;\n  }\n  if (end === void 0) {\n    end = true;\n  }\n  warning(path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"), \"Route path \\\"\" + path + \"\\\" will be treated as if it were \" + (\"\\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\" because the `*` character must \") + \"always follow a `/` in the pattern. To get rid of this warning, \" + (\"please change the route path to \\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\".\"));\n  let params = [];\n  let regexpSource = \"^\" + path.replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n  .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n  .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n  .replace(/\\/:([\\w-]+)(\\?)?/g, (_, paramName, isOptional) => {\n    params.push({\n      paramName,\n      isOptional: isOptional != null\n    });\n    return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n  });\n  if (path.endsWith(\"*\")) {\n    params.push({\n      paramName: \"*\"\n    });\n    regexpSource += path === \"*\" || path === \"/*\" ? \"(.*)$\" // Already matched the initial /, just match the rest\n    : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n  } else if (end) {\n    // When matching to the end, ignore trailing slashes\n    regexpSource += \"\\\\/*$\";\n  } else if (path !== \"\" && path !== \"/\") {\n    // If our path is non-empty and contains anything beyond an initial slash,\n    // then we have _some_ form of path in our regex, so we should expect to\n    // match only if we find the end of this path segment.  Look for an optional\n    // non-captured trailing slash (to match a portion of the URL) or the end\n    // of the path (if we've matched to the end).  We used to do this with a\n    // word boundary but that gives false positives on routes like\n    // /user-preferences since `-` counts as a word boundary.\n    regexpSource += \"(?:(?=\\\\/|$))\";\n  } else ;\n  let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n  return [matcher, params];\n}\nfunction decodePath(value) {\n  try {\n    return value.split(\"/\").map(v => decodeURIComponent(v).replace(/\\//g, \"%2F\")).join(\"/\");\n  } catch (error) {\n    warning(false, \"The URL path \\\"\" + value + \"\\\" could not be decoded because it is is a \" + \"malformed URL segment. This is probably due to a bad percent \" + (\"encoding (\" + error + \").\"));\n    return value;\n  }\n}\n/**\n * @private\n */\nfunction stripBasename(pathname, basename) {\n  if (basename === \"/\") return pathname;\n  if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n    return null;\n  }\n  // We want to leave trailing slash behavior in the user's control, so if they\n  // specify a basename with a trailing slash, we should support it\n  let startIndex = basename.endsWith(\"/\") ? basename.length - 1 : basename.length;\n  let nextChar = pathname.charAt(startIndex);\n  if (nextChar && nextChar !== \"/\") {\n    // pathname does not start with basename/\n    return null;\n  }\n  return pathname.slice(startIndex) || \"/\";\n}\nconst ABSOLUTE_URL_REGEX$1 = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\nconst isAbsoluteUrl = url => ABSOLUTE_URL_REGEX$1.test(url);\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/v6/utils/resolve-path\n */\nfunction resolvePath(to, fromPathname) {\n  if (fromPathname === void 0) {\n    fromPathname = \"/\";\n  }\n  let {\n    pathname: toPathname,\n    search = \"\",\n    hash = \"\"\n  } = typeof to === \"string\" ? parsePath(to) : to;\n  let pathname;\n  if (toPathname) {\n    if (isAbsoluteUrl(toPathname)) {\n      pathname = toPathname;\n    } else {\n      if (toPathname.includes(\"//\")) {\n        let oldPathname = toPathname;\n        toPathname = toPathname.replace(/\\/\\/+/g, \"/\");\n        warning(false, \"Pathnames cannot have embedded double slashes - normalizing \" + (oldPathname + \" -> \" + toPathname));\n      }\n      if (toPathname.startsWith(\"/\")) {\n        pathname = resolvePathname(toPathname.substring(1), \"/\");\n      } else {\n        pathname = resolvePathname(toPathname, fromPathname);\n      }\n    }\n  } else {\n    pathname = fromPathname;\n  }\n  return {\n    pathname,\n    search: normalizeSearch(search),\n    hash: normalizeHash(hash)\n  };\n}\nfunction resolvePathname(relativePath, fromPathname) {\n  let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n  let relativeSegments = relativePath.split(\"/\");\n  relativeSegments.forEach(segment => {\n    if (segment === \"..\") {\n      // Keep the root \"\" segment so the pathname starts at /\n      if (segments.length > 1) segments.pop();\n    } else if (segment !== \".\") {\n      segments.push(segment);\n    }\n  });\n  return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\nfunction getInvalidPathError(char, field, dest, path) {\n  return \"Cannot include a '\" + char + \"' character in a manually specified \" + (\"`to.\" + field + \"` field [\" + JSON.stringify(path) + \"].  Please separate it out to the \") + (\"`to.\" + dest + \"` field. Alternatively you may provide the full path as \") + \"a string in <Link to=\\\"...\\\"> and the router will parse it for you.\";\n}\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same.  Both of the following examples should link back to the root:\n *\n *   <Route path=\"/\">\n *     <Route path=\"accounts\" element={<Link to=\"..\"}>\n *   </Route>\n *\n *   <Route path=\"/\">\n *     <Route path=\"accounts\">\n *       <Route element={<AccountsLayout />}>       // <-- Does not contribute\n *         <Route index element={<Link to=\"..\"} />  // <-- Does not contribute\n *       </Route\n *     </Route>\n *   </Route>\n */\nfunction getPathContributingMatches(matches) {\n  return matches.filter((match, index) => index === 0 || match.route.path && match.route.path.length > 0);\n}\n// Return the array of pathnames for the current route matches - used to\n// generate the routePathnames input for resolveTo()\nfunction getResolveToMatches(matches, v7_relativeSplatPath) {\n  let pathMatches = getPathContributingMatches(matches);\n  // When v7_relativeSplatPath is enabled, use the full pathname for the leaf\n  // match so we include splat values for \".\" links.  See:\n  // https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329\n  if (v7_relativeSplatPath) {\n    return pathMatches.map((match, idx) => idx === pathMatches.length - 1 ? match.pathname : match.pathnameBase);\n  }\n  return pathMatches.map(match => match.pathnameBase);\n}\n/**\n * @private\n */\nfunction resolveTo(toArg, routePathnames, locationPathname, isPathRelative) {\n  if (isPathRelative === void 0) {\n    isPathRelative = false;\n  }\n  let to;\n  if (typeof toArg === \"string\") {\n    to = parsePath(toArg);\n  } else {\n    to = _extends({}, toArg);\n    invariant(!to.pathname || !to.pathname.includes(\"?\"), getInvalidPathError(\"?\", \"pathname\", \"search\", to));\n    invariant(!to.pathname || !to.pathname.includes(\"#\"), getInvalidPathError(\"#\", \"pathname\", \"hash\", to));\n    invariant(!to.search || !to.search.includes(\"#\"), getInvalidPathError(\"#\", \"search\", \"hash\", to));\n  }\n  let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n  let toPathname = isEmptyPath ? \"/\" : to.pathname;\n  let from;\n  // Routing is relative to the current pathname if explicitly requested.\n  //\n  // If a pathname is explicitly provided in `to`, it should be relative to the\n  // route context. This is explained in `Note on `<Link to>` values` in our\n  // migration guide from v5 as a means of disambiguation between `to` values\n  // that begin with `/` and those that do not. However, this is problematic for\n  // `to` values that do not provide a pathname. `to` can simply be a search or\n  // hash string, in which case we should assume that the navigation is relative\n  // to the current location's pathname and *not* the route pathname.\n  if (toPathname == null) {\n    from = locationPathname;\n  } else {\n    let routePathnameIndex = routePathnames.length - 1;\n    // With relative=\"route\" (the default), each leading .. segment means\n    // \"go up one route\" instead of \"go up one URL segment\".  This is a key\n    // difference from how <a href> works and a major reason we call this a\n    // \"to\" value instead of a \"href\".\n    if (!isPathRelative && toPathname.startsWith(\"..\")) {\n      let toSegments = toPathname.split(\"/\");\n      while (toSegments[0] === \"..\") {\n        toSegments.shift();\n        routePathnameIndex -= 1;\n      }\n      to.pathname = toSegments.join(\"/\");\n    }\n    from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n  }\n  let path = resolvePath(to, from);\n  // Ensure the pathname has a trailing slash if the original \"to\" had one\n  let hasExplicitTrailingSlash = toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n  // Or if this was a link to the current path which has a trailing slash\n  let hasCurrentTrailingSlash = (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n  if (!path.pathname.endsWith(\"/\") && (hasExplicitTrailingSlash || hasCurrentTrailingSlash)) {\n    path.pathname += \"/\";\n  }\n  return path;\n}\n/**\n * @private\n */\nfunction getToPathname(to) {\n  // Empty strings should be treated the same as / paths\n  return to === \"\" || to.pathname === \"\" ? \"/\" : typeof to === \"string\" ? parsePath(to).pathname : to.pathname;\n}\n/**\n * @private\n */\nconst joinPaths = paths => paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n/**\n * @private\n */\nconst normalizePathname = pathname => pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n/**\n * @private\n */\nconst normalizeSearch = search => !search || search === \"?\" ? \"\" : search.startsWith(\"?\") ? search : \"?\" + search;\n/**\n * @private\n */\nconst normalizeHash = hash => !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n *\n * @deprecated The `json` method is deprecated in favor of returning raw objects.\n * This method will be removed in v7.\n */\nconst json = function json(data, init) {\n  if (init === void 0) {\n    init = {};\n  }\n  let responseInit = typeof init === \"number\" ? {\n    status: init\n  } : init;\n  let headers = new Headers(responseInit.headers);\n  if (!headers.has(\"Content-Type\")) {\n    headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n  }\n  return new Response(JSON.stringify(data), _extends({}, responseInit, {\n    headers\n  }));\n};\nclass DataWithResponseInit {\n  constructor(data, init) {\n    this.type = \"DataWithResponseInit\";\n    this.data = data;\n    this.init = init || null;\n  }\n}\n/**\n * Create \"responses\" that contain `status`/`headers` without forcing\n * serialization into an actual `Response` - used by Remix single fetch\n */\nfunction data(data, init) {\n  return new DataWithResponseInit(data, typeof init === \"number\" ? {\n    status: init\n  } : init);\n}\nclass AbortedDeferredError extends Error {}\nclass DeferredData {\n  constructor(data, responseInit) {\n    this.pendingKeysSet = new Set();\n    this.subscribers = new Set();\n    this.deferredKeys = [];\n    invariant(data && typeof data === \"object\" && !Array.isArray(data), \"defer() only accepts plain objects\");\n    // Set up an AbortController + Promise we can race against to exit early\n    // cancellation\n    let reject;\n    this.abortPromise = new Promise((_, r) => reject = r);\n    this.controller = new AbortController();\n    let onAbort = () => reject(new AbortedDeferredError(\"Deferred data aborted\"));\n    this.unlistenAbortSignal = () => this.controller.signal.removeEventListener(\"abort\", onAbort);\n    this.controller.signal.addEventListener(\"abort\", onAbort);\n    this.data = Object.entries(data).reduce((acc, _ref2) => {\n      let [key, value] = _ref2;\n      return Object.assign(acc, {\n        [key]: this.trackPromise(key, value)\n      });\n    }, {});\n    if (this.done) {\n      // All incoming values were resolved\n      this.unlistenAbortSignal();\n    }\n    this.init = responseInit;\n  }\n  trackPromise(key, value) {\n    if (!(value instanceof Promise)) {\n      return value;\n    }\n    this.deferredKeys.push(key);\n    this.pendingKeysSet.add(key);\n    // We store a little wrapper promise that will be extended with\n    // _data/_error props upon resolve/reject\n    let promise = Promise.race([value, this.abortPromise]).then(data => this.onSettle(promise, key, undefined, data), error => this.onSettle(promise, key, error));\n    // Register rejection listeners to avoid uncaught promise rejections on\n    // errors or aborted deferred values\n    promise.catch(() => {});\n    Object.defineProperty(promise, \"_tracked\", {\n      get: () => true\n    });\n    return promise;\n  }\n  onSettle(promise, key, error, data) {\n    if (this.controller.signal.aborted && error instanceof AbortedDeferredError) {\n      this.unlistenAbortSignal();\n      Object.defineProperty(promise, \"_error\", {\n        get: () => error\n      });\n      return Promise.reject(error);\n    }\n    this.pendingKeysSet.delete(key);\n    if (this.done) {\n      // Nothing left to abort!\n      this.unlistenAbortSignal();\n    }\n    // If the promise was resolved/rejected with undefined, we'll throw an error as you\n    // should always resolve with a value or null\n    if (error === undefined && data === undefined) {\n      let undefinedError = new Error(\"Deferred data for key \\\"\" + key + \"\\\" resolved/rejected with `undefined`, \" + \"you must resolve/reject with a value or `null`.\");\n      Object.defineProperty(promise, \"_error\", {\n        get: () => undefinedError\n      });\n      this.emit(false, key);\n      return Promise.reject(undefinedError);\n    }\n    if (data === undefined) {\n      Object.defineProperty(promise, \"_error\", {\n        get: () => error\n      });\n      this.emit(false, key);\n      return Promise.reject(error);\n    }\n    Object.defineProperty(promise, \"_data\", {\n      get: () => data\n    });\n    this.emit(false, key);\n    return data;\n  }\n  emit(aborted, settledKey) {\n    this.subscribers.forEach(subscriber => subscriber(aborted, settledKey));\n  }\n  subscribe(fn) {\n    this.subscribers.add(fn);\n    return () => this.subscribers.delete(fn);\n  }\n  cancel() {\n    this.controller.abort();\n    this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n    this.emit(true);\n  }\n  async resolveData(signal) {\n    let aborted = false;\n    if (!this.done) {\n      let onAbort = () => this.cancel();\n      signal.addEventListener(\"abort\", onAbort);\n      aborted = await new Promise(resolve => {\n        this.subscribe(aborted => {\n          signal.removeEventListener(\"abort\", onAbort);\n          if (aborted || this.done) {\n            resolve(aborted);\n          }\n        });\n      });\n    }\n    return aborted;\n  }\n  get done() {\n    return this.pendingKeysSet.size === 0;\n  }\n  get unwrappedData() {\n    invariant(this.data !== null && this.done, \"Can only unwrap data on initialized and settled deferreds\");\n    return Object.entries(this.data).reduce((acc, _ref3) => {\n      let [key, value] = _ref3;\n      return Object.assign(acc, {\n        [key]: unwrapTrackedPromise(value)\n      });\n    }, {});\n  }\n  get pendingKeys() {\n    return Array.from(this.pendingKeysSet);\n  }\n}\nfunction isTrackedPromise(value) {\n  return value instanceof Promise && value._tracked === true;\n}\nfunction unwrapTrackedPromise(value) {\n  if (!isTrackedPromise(value)) {\n    return value;\n  }\n  if (value._error) {\n    throw value._error;\n  }\n  return value._data;\n}\n/**\n * @deprecated The `defer` method is deprecated in favor of returning raw\n * objects. This method will be removed in v7.\n */\nconst defer = function defer(data, init) {\n  if (init === void 0) {\n    init = {};\n  }\n  let responseInit = typeof init === \"number\" ? {\n    status: init\n  } : init;\n  return new DeferredData(data, responseInit);\n};\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst redirect = function redirect(url, init) {\n  if (init === void 0) {\n    init = 302;\n  }\n  let responseInit = init;\n  if (typeof responseInit === \"number\") {\n    responseInit = {\n      status: responseInit\n    };\n  } else if (typeof responseInit.status === \"undefined\") {\n    responseInit.status = 302;\n  }\n  let headers = new Headers(responseInit.headers);\n  headers.set(\"Location\", url);\n  return new Response(null, _extends({}, responseInit, {\n    headers\n  }));\n};\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst redirectDocument = (url, init) => {\n  let response = redirect(url, init);\n  response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n  return response;\n};\n/**\n * A redirect response that will perform a `history.replaceState` instead of a\n * `history.pushState` for client-side navigation redirects.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst replace = (url, init) => {\n  let response = redirect(url, init);\n  response.headers.set(\"X-Remix-Replace\", \"true\");\n  return response;\n};\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nclass ErrorResponseImpl {\n  constructor(status, statusText, data, internal) {\n    if (internal === void 0) {\n      internal = false;\n    }\n    this.status = status;\n    this.statusText = statusText || \"\";\n    this.internal = internal;\n    if (data instanceof Error) {\n      this.data = data.toString();\n      this.error = data;\n    } else {\n      this.data = data;\n    }\n  }\n}\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nfunction isRouteErrorResponse(error) {\n  return error != null && typeof error.status === \"number\" && typeof error.statusText === \"string\" && typeof error.internal === \"boolean\" && \"data\" in error;\n}\n\nconst validMutationMethodsArr = [\"post\", \"put\", \"patch\", \"delete\"];\nconst validMutationMethods = new Set(validMutationMethodsArr);\nconst validRequestMethodsArr = [\"get\", ...validMutationMethodsArr];\nconst validRequestMethods = new Set(validRequestMethodsArr);\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\nconst IDLE_NAVIGATION = {\n  state: \"idle\",\n  location: undefined,\n  formMethod: undefined,\n  formAction: undefined,\n  formEncType: undefined,\n  formData: undefined,\n  json: undefined,\n  text: undefined\n};\nconst IDLE_FETCHER = {\n  state: \"idle\",\n  data: undefined,\n  formMethod: undefined,\n  formAction: undefined,\n  formEncType: undefined,\n  formData: undefined,\n  json: undefined,\n  text: undefined\n};\nconst IDLE_BLOCKER = {\n  state: \"unblocked\",\n  proceed: undefined,\n  reset: undefined,\n  location: undefined\n};\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\nconst defaultMapRouteProperties = route => ({\n  hasErrorBoundary: Boolean(route.hasErrorBoundary)\n});\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Create a router and listen to history POP navigations\n */\nfunction createRouter(init) {\n  const routerWindow = init.window ? init.window : typeof window !== \"undefined\" ? window : undefined;\n  const isBrowser = typeof routerWindow !== \"undefined\" && typeof routerWindow.document !== \"undefined\" && typeof routerWindow.document.createElement !== \"undefined\";\n  const isServer = !isBrowser;\n  invariant(init.routes.length > 0, \"You must provide a non-empty routes array to createRouter\");\n  let mapRouteProperties;\n  if (init.mapRouteProperties) {\n    mapRouteProperties = init.mapRouteProperties;\n  } else if (init.detectErrorBoundary) {\n    // If they are still using the deprecated version, wrap it with the new API\n    let detectErrorBoundary = init.detectErrorBoundary;\n    mapRouteProperties = route => ({\n      hasErrorBoundary: detectErrorBoundary(route)\n    });\n  } else {\n    mapRouteProperties = defaultMapRouteProperties;\n  }\n  // Routes keyed by ID\n  let manifest = {};\n  // Routes in tree format for matching\n  let dataRoutes = convertRoutesToDataRoutes(init.routes, mapRouteProperties, undefined, manifest);\n  let inFlightDataRoutes;\n  let basename = init.basename || \"/\";\n  let dataStrategyImpl = init.dataStrategy || defaultDataStrategy;\n  let patchRoutesOnNavigationImpl = init.patchRoutesOnNavigation;\n  // Config driven behavior flags\n  let future = _extends({\n    v7_fetcherPersist: false,\n    v7_normalizeFormMethod: false,\n    v7_partialHydration: false,\n    v7_prependBasename: false,\n    v7_relativeSplatPath: false,\n    v7_skipActionErrorRevalidation: false\n  }, init.future);\n  // Cleanup function for history\n  let unlistenHistory = null;\n  // Externally-provided functions to call on all state changes\n  let subscribers = new Set();\n  // Externally-provided object to hold scroll restoration locations during routing\n  let savedScrollPositions = null;\n  // Externally-provided function to get scroll restoration keys\n  let getScrollRestorationKey = null;\n  // Externally-provided function to get current scroll position\n  let getScrollPosition = null;\n  // One-time flag to control the initial hydration scroll restoration.  Because\n  // we don't get the saved positions from <ScrollRestoration /> until _after_\n  // the initial render, we need to manually trigger a separate updateState to\n  // send along the restoreScrollPosition\n  // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n  // SSR did the initial scroll restoration.\n  let initialScrollRestored = init.hydrationData != null;\n  let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n  let initialMatchesIsFOW = false;\n  let initialErrors = null;\n  if (initialMatches == null && !patchRoutesOnNavigationImpl) {\n    // If we do not match a user-provided-route, fall back to the root\n    // to allow the error boundary to take over\n    let error = getInternalRouterError(404, {\n      pathname: init.history.location.pathname\n    });\n    let {\n      matches,\n      route\n    } = getShortCircuitMatches(dataRoutes);\n    initialMatches = matches;\n    initialErrors = {\n      [route.id]: error\n    };\n  }\n  // In SPA apps, if the user provided a patchRoutesOnNavigation implementation and\n  // our initial match is a splat route, clear them out so we run through lazy\n  // discovery on hydration in case there's a more accurate lazy route match.\n  // In SSR apps (with `hydrationData`), we expect that the server will send\n  // up the proper matched routes so we don't want to run lazy discovery on\n  // initial hydration and want to hydrate into the splat route.\n  if (initialMatches && !init.hydrationData) {\n    let fogOfWar = checkFogOfWar(initialMatches, dataRoutes, init.history.location.pathname);\n    if (fogOfWar.active) {\n      initialMatches = null;\n    }\n  }\n  let initialized;\n  if (!initialMatches) {\n    initialized = false;\n    initialMatches = [];\n    // If partial hydration and fog of war is enabled, we will be running\n    // `patchRoutesOnNavigation` during hydration so include any partial matches as\n    // the initial matches so we can properly render `HydrateFallback`'s\n    if (future.v7_partialHydration) {\n      let fogOfWar = checkFogOfWar(null, dataRoutes, init.history.location.pathname);\n      if (fogOfWar.active && fogOfWar.matches) {\n        initialMatchesIsFOW = true;\n        initialMatches = fogOfWar.matches;\n      }\n    }\n  } else if (initialMatches.some(m => m.route.lazy)) {\n    // All initialMatches need to be loaded before we're ready.  If we have lazy\n    // functions around still then we'll need to run them in initialize()\n    initialized = false;\n  } else if (!initialMatches.some(m => m.route.loader)) {\n    // If we've got no loaders to run, then we're good to go\n    initialized = true;\n  } else if (future.v7_partialHydration) {\n    // If partial hydration is enabled, we're initialized so long as we were\n    // provided with hydrationData for every route with a loader, and no loaders\n    // were marked for explicit hydration\n    let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n    let errors = init.hydrationData ? init.hydrationData.errors : null;\n    // If errors exist, don't consider routes below the boundary\n    if (errors) {\n      let idx = initialMatches.findIndex(m => errors[m.route.id] !== undefined);\n      initialized = initialMatches.slice(0, idx + 1).every(m => !shouldLoadRouteOnHydration(m.route, loaderData, errors));\n    } else {\n      initialized = initialMatches.every(m => !shouldLoadRouteOnHydration(m.route, loaderData, errors));\n    }\n  } else {\n    // Without partial hydration - we're initialized if we were provided any\n    // hydrationData - which is expected to be complete\n    initialized = init.hydrationData != null;\n  }\n  let router;\n  let state = {\n    historyAction: init.history.action,\n    location: init.history.location,\n    matches: initialMatches,\n    initialized,\n    navigation: IDLE_NAVIGATION,\n    // Don't restore on initial updateState() if we were SSR'd\n    restoreScrollPosition: init.hydrationData != null ? false : null,\n    preventScrollReset: false,\n    revalidation: \"idle\",\n    loaderData: init.hydrationData && init.hydrationData.loaderData || {},\n    actionData: init.hydrationData && init.hydrationData.actionData || null,\n    errors: init.hydrationData && init.hydrationData.errors || initialErrors,\n    fetchers: new Map(),\n    blockers: new Map()\n  };\n  // -- Stateful internal variables to manage navigations --\n  // Current navigation in progress (to be committed in completeNavigation)\n  let pendingAction = Action.Pop;\n  // Should the current navigation prevent the scroll reset if scroll cannot\n  // be restored?\n  let pendingPreventScrollReset = false;\n  // AbortController for the active navigation\n  let pendingNavigationController;\n  // Should the current navigation enable document.startViewTransition?\n  let pendingViewTransitionEnabled = false;\n  // Store applied view transitions so we can apply them on POP\n  let appliedViewTransitions = new Map();\n  // Cleanup function for persisting applied transitions to sessionStorage\n  let removePageHideEventListener = null;\n  // We use this to avoid touching history in completeNavigation if a\n  // revalidation is entirely uninterrupted\n  let isUninterruptedRevalidation = false;\n  // Use this internal flag to force revalidation of all loaders:\n  //  - submissions (completed or interrupted)\n  //  - useRevalidator()\n  //  - X-Remix-Revalidate (from redirect)\n  let isRevalidationRequired = false;\n  // Use this internal array to capture routes that require revalidation due\n  // to a cancelled deferred on action submission\n  let cancelledDeferredRoutes = [];\n  // Use this internal array to capture fetcher loads that were cancelled by an\n  // action navigation and require revalidation\n  let cancelledFetcherLoads = new Set();\n  // AbortControllers for any in-flight fetchers\n  let fetchControllers = new Map();\n  // Track loads based on the order in which they started\n  let incrementingLoadId = 0;\n  // Track the outstanding pending navigation data load to be compared against\n  // the globally incrementing load when a fetcher load lands after a completed\n  // navigation\n  let pendingNavigationLoadId = -1;\n  // Fetchers that triggered data reloads as a result of their actions\n  let fetchReloadIds = new Map();\n  // Fetchers that triggered redirect navigations\n  let fetchRedirectIds = new Set();\n  // Most recent href/match for fetcher.load calls for fetchers\n  let fetchLoadMatches = new Map();\n  // Ref-count mounted fetchers so we know when it's ok to clean them up\n  let activeFetchers = new Map();\n  // Fetchers that have requested a delete when using v7_fetcherPersist,\n  // they'll be officially removed after they return to idle\n  let deletedFetchers = new Set();\n  // Store DeferredData instances for active route matches.  When a\n  // route loader returns defer() we stick one in here.  Then, when a nested\n  // promise resolves we update loaderData.  If a new navigation starts we\n  // cancel active deferreds for eliminated routes.\n  let activeDeferreds = new Map();\n  // Store blocker functions in a separate Map outside of router state since\n  // we don't need to update UI state if they change\n  let blockerFunctions = new Map();\n  // Flag to ignore the next history update, so we can revert the URL change on\n  // a POP navigation that was blocked by the user without touching router state\n  let unblockBlockerHistoryUpdate = undefined;\n  // Initialize the router, all side effects should be kicked off from here.\n  // Implemented as a Fluent API for ease of:\n  //   let router = createRouter(init).initialize();\n  function initialize() {\n    // If history informs us of a POP navigation, start the navigation but do not update\n    // state.  We'll update our own state once the navigation completes\n    unlistenHistory = init.history.listen(_ref => {\n      let {\n        action: historyAction,\n        location,\n        delta\n      } = _ref;\n      // Ignore this event if it was just us resetting the URL from a\n      // blocked POP navigation\n      if (unblockBlockerHistoryUpdate) {\n        unblockBlockerHistoryUpdate();\n        unblockBlockerHistoryUpdate = undefined;\n        return;\n      }\n      warning(blockerFunctions.size === 0 || delta != null, \"You are trying to use a blocker on a POP navigation to a location \" + \"that was not created by @remix-run/router. This will fail silently in \" + \"production. This can happen if you are navigating outside the router \" + \"via `window.history.pushState`/`window.location.hash` instead of using \" + \"router navigation APIs.  This can also happen if you are using \" + \"createHashRouter and the user manually changes the URL.\");\n      let blockerKey = shouldBlockNavigation({\n        currentLocation: state.location,\n        nextLocation: location,\n        historyAction\n      });\n      if (blockerKey && delta != null) {\n        // Restore the URL to match the current UI, but don't update router state\n        let nextHistoryUpdatePromise = new Promise(resolve => {\n          unblockBlockerHistoryUpdate = resolve;\n        });\n        init.history.go(delta * -1);\n        // Put the blocker into a blocked state\n        updateBlocker(blockerKey, {\n          state: \"blocked\",\n          location,\n          proceed() {\n            updateBlocker(blockerKey, {\n              state: \"proceeding\",\n              proceed: undefined,\n              reset: undefined,\n              location\n            });\n            // Re-do the same POP navigation we just blocked, after the url\n            // restoration is also complete.  See:\n            // https://github.com/remix-run/react-router/issues/11613\n            nextHistoryUpdatePromise.then(() => init.history.go(delta));\n          },\n          reset() {\n            let blockers = new Map(state.blockers);\n            blockers.set(blockerKey, IDLE_BLOCKER);\n            updateState({\n              blockers\n            });\n          }\n        });\n        return;\n      }\n      return startNavigation(historyAction, location);\n    });\n    if (isBrowser) {\n      // FIXME: This feels gross.  How can we cleanup the lines between\n      // scrollRestoration/appliedTransitions persistance?\n      restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n      let _saveAppliedTransitions = () => persistAppliedTransitions(routerWindow, appliedViewTransitions);\n      routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n      removePageHideEventListener = () => routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n    }\n    // Kick off initial data load if needed.  Use Pop to avoid modifying history\n    // Note we don't do any handling of lazy here.  For SPA's it'll get handled\n    // in the normal navigation flow.  For SSR it's expected that lazy modules are\n    // resolved prior to router creation since we can't go into a fallbackElement\n    // UI for SSR'd apps\n    if (!state.initialized) {\n      startNavigation(Action.Pop, state.location, {\n        initialHydration: true\n      });\n    }\n    return router;\n  }\n  // Clean up a router and it's side effects\n  function dispose() {\n    if (unlistenHistory) {\n      unlistenHistory();\n    }\n    if (removePageHideEventListener) {\n      removePageHideEventListener();\n    }\n    subscribers.clear();\n    pendingNavigationController && pendingNavigationController.abort();\n    state.fetchers.forEach((_, key) => deleteFetcher(key));\n    state.blockers.forEach((_, key) => deleteBlocker(key));\n  }\n  // Subscribe to state updates for the router\n  function subscribe(fn) {\n    subscribers.add(fn);\n    return () => subscribers.delete(fn);\n  }\n  // Update our state and notify the calling context of the change\n  function updateState(newState, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n    state = _extends({}, state, newState);\n    // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n    // can be removed\n    let completedFetchers = [];\n    let deletedFetchersKeys = [];\n    if (future.v7_fetcherPersist) {\n      state.fetchers.forEach((fetcher, key) => {\n        if (fetcher.state === \"idle\") {\n          if (deletedFetchers.has(key)) {\n            // Unmounted from the UI and can be totally removed\n            deletedFetchersKeys.push(key);\n          } else {\n            // Returned to idle but still mounted in the UI, so semi-remains for\n            // revalidations and such\n            completedFetchers.push(key);\n          }\n        }\n      });\n    }\n    // Remove any lingering deleted fetchers that have already been removed\n    // from state.fetchers\n    deletedFetchers.forEach(key => {\n      if (!state.fetchers.has(key) && !fetchControllers.has(key)) {\n        deletedFetchersKeys.push(key);\n      }\n    });\n    // Iterate over a local copy so that if flushSync is used and we end up\n    // removing and adding a new subscriber due to the useCallback dependencies,\n    // we don't get ourselves into a loop calling the new subscriber immediately\n    [...subscribers].forEach(subscriber => subscriber(state, {\n      deletedFetchers: deletedFetchersKeys,\n      viewTransitionOpts: opts.viewTransitionOpts,\n      flushSync: opts.flushSync === true\n    }));\n    // Remove idle fetchers from state since we only care about in-flight fetchers.\n    if (future.v7_fetcherPersist) {\n      completedFetchers.forEach(key => state.fetchers.delete(key));\n      deletedFetchersKeys.forEach(key => deleteFetcher(key));\n    } else {\n      // We already called deleteFetcher() on these, can remove them from this\n      // Set now that we've handed the keys off to the data layer\n      deletedFetchersKeys.forEach(key => deletedFetchers.delete(key));\n    }\n  }\n  // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n  // and setting state.[historyAction/location/matches] to the new route.\n  // - Location is a required param\n  // - Navigation will always be set to IDLE_NAVIGATION\n  // - Can pass any other state in newState\n  function completeNavigation(location, newState, _temp) {\n    var _location$state, _location$state2;\n    let {\n      flushSync\n    } = _temp === void 0 ? {} : _temp;\n    // Deduce if we're in a loading/actionReload state:\n    // - We have committed actionData in the store\n    // - The current navigation was a mutation submission\n    // - We're past the submitting state and into the loading state\n    // - The location being loaded is not the result of a redirect\n    let isActionReload = state.actionData != null && state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && state.navigation.state === \"loading\" && ((_location$state = location.state) == null ? void 0 : _location$state._isRedirect) !== true;\n    let actionData;\n    if (newState.actionData) {\n      if (Object.keys(newState.actionData).length > 0) {\n        actionData = newState.actionData;\n      } else {\n        // Empty actionData -> clear prior actionData due to an action error\n        actionData = null;\n      }\n    } else if (isActionReload) {\n      // Keep the current data if we're wrapping up the action reload\n      actionData = state.actionData;\n    } else {\n      // Clear actionData on any other completed navigations\n      actionData = null;\n    }\n    // Always preserve any existing loaderData from re-used routes\n    let loaderData = newState.loaderData ? mergeLoaderData(state.loaderData, newState.loaderData, newState.matches || [], newState.errors) : state.loaderData;\n    // On a successful navigation we can assume we got through all blockers\n    // so we can start fresh\n    let blockers = state.blockers;\n    if (blockers.size > 0) {\n      blockers = new Map(blockers);\n      blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n    }\n    // Always respect the user flag.  Otherwise don't reset on mutation\n    // submission navigations unless they redirect\n    let preventScrollReset = pendingPreventScrollReset === true || state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && ((_location$state2 = location.state) == null ? void 0 : _location$state2._isRedirect) !== true;\n    // Commit any in-flight routes at the end of the HMR revalidation \"navigation\"\n    if (inFlightDataRoutes) {\n      dataRoutes = inFlightDataRoutes;\n      inFlightDataRoutes = undefined;\n    }\n    if (isUninterruptedRevalidation) ; else if (pendingAction === Action.Pop) ; else if (pendingAction === Action.Push) {\n      init.history.push(location, location.state);\n    } else if (pendingAction === Action.Replace) {\n      init.history.replace(location, location.state);\n    }\n    let viewTransitionOpts;\n    // On POP, enable transitions if they were enabled on the original navigation\n    if (pendingAction === Action.Pop) {\n      // Forward takes precedence so they behave like the original navigation\n      let priorPaths = appliedViewTransitions.get(state.location.pathname);\n      if (priorPaths && priorPaths.has(location.pathname)) {\n        viewTransitionOpts = {\n          currentLocation: state.location,\n          nextLocation: location\n        };\n      } else if (appliedViewTransitions.has(location.pathname)) {\n        // If we don't have a previous forward nav, assume we're popping back to\n        // the new location and enable if that location previously enabled\n        viewTransitionOpts = {\n          currentLocation: location,\n          nextLocation: state.location\n        };\n      }\n    } else if (pendingViewTransitionEnabled) {\n      // Store the applied transition on PUSH/REPLACE\n      let toPaths = appliedViewTransitions.get(state.location.pathname);\n      if (toPaths) {\n        toPaths.add(location.pathname);\n      } else {\n        toPaths = new Set([location.pathname]);\n        appliedViewTransitions.set(state.location.pathname, toPaths);\n      }\n      viewTransitionOpts = {\n        currentLocation: state.location,\n        nextLocation: location\n      };\n    }\n    updateState(_extends({}, newState, {\n      actionData,\n      loaderData,\n      historyAction: pendingAction,\n      location,\n      initialized: true,\n      navigation: IDLE_NAVIGATION,\n      revalidation: \"idle\",\n      restoreScrollPosition: getSavedScrollPosition(location, newState.matches || state.matches),\n      preventScrollReset,\n      blockers\n    }), {\n      viewTransitionOpts,\n      flushSync: flushSync === true\n    });\n    // Reset stateful navigation vars\n    pendingAction = Action.Pop;\n    pendingPreventScrollReset = false;\n    pendingViewTransitionEnabled = false;\n    isUninterruptedRevalidation = false;\n    isRevalidationRequired = false;\n    cancelledDeferredRoutes = [];\n  }\n  // Trigger a navigation event, which can either be a numerical POP or a PUSH\n  // replace with an optional submission\n  async function navigate(to, opts) {\n    if (typeof to === \"number\") {\n      init.history.go(to);\n      return;\n    }\n    let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, to, future.v7_relativeSplatPath, opts == null ? void 0 : opts.fromRouteId, opts == null ? void 0 : opts.relative);\n    let {\n      path,\n      submission,\n      error\n    } = normalizeNavigateOptions(future.v7_normalizeFormMethod, false, normalizedPath, opts);\n    let currentLocation = state.location;\n    let nextLocation = createLocation(state.location, path, opts && opts.state);\n    // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n    // URL from window.location, so we need to encode it here so the behavior\n    // remains the same as POP and non-data-router usages.  new URL() does all\n    // the same encoding we'd get from a history.pushState/window.location read\n    // without having to touch history\n    nextLocation = _extends({}, nextLocation, init.history.encodeLocation(nextLocation));\n    let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n    let historyAction = Action.Push;\n    if (userReplace === true) {\n      historyAction = Action.Replace;\n    } else if (userReplace === false) ; else if (submission != null && isMutationMethod(submission.formMethod) && submission.formAction === state.location.pathname + state.location.search) {\n      // By default on submissions to the current location we REPLACE so that\n      // users don't have to double-click the back button to get to the prior\n      // location.  If the user redirects to a different location from the\n      // action/loader this will be ignored and the redirect will be a PUSH\n      historyAction = Action.Replace;\n    }\n    let preventScrollReset = opts && \"preventScrollReset\" in opts ? opts.preventScrollReset === true : undefined;\n    let flushSync = (opts && opts.flushSync) === true;\n    let blockerKey = shouldBlockNavigation({\n      currentLocation,\n      nextLocation,\n      historyAction\n    });\n    if (blockerKey) {\n      // Put the blocker into a blocked state\n      updateBlocker(blockerKey, {\n        state: \"blocked\",\n        location: nextLocation,\n        proceed() {\n          updateBlocker(blockerKey, {\n            state: \"proceeding\",\n            proceed: undefined,\n            reset: undefined,\n            location: nextLocation\n          });\n          // Send the same navigation through\n          navigate(to, opts);\n        },\n        reset() {\n          let blockers = new Map(state.blockers);\n          blockers.set(blockerKey, IDLE_BLOCKER);\n          updateState({\n            blockers\n          });\n        }\n      });\n      return;\n    }\n    return await startNavigation(historyAction, nextLocation, {\n      submission,\n      // Send through the formData serialization error if we have one so we can\n      // render at the right error boundary after we match routes\n      pendingError: error,\n      preventScrollReset,\n      replace: opts && opts.replace,\n      enableViewTransition: opts && opts.viewTransition,\n      flushSync\n    });\n  }\n  // Revalidate all current loaders.  If a navigation is in progress or if this\n  // is interrupted by a navigation, allow this to \"succeed\" by calling all\n  // loaders during the next loader round\n  function revalidate() {\n    interruptActiveLoads();\n    updateState({\n      revalidation: \"loading\"\n    });\n    // If we're currently submitting an action, we don't need to start a new\n    // navigation, we'll just let the follow up loader execution call all loaders\n    if (state.navigation.state === \"submitting\") {\n      return;\n    }\n    // If we're currently in an idle state, start a new navigation for the current\n    // action/location and mark it as uninterrupted, which will skip the history\n    // update in completeNavigation\n    if (state.navigation.state === \"idle\") {\n      startNavigation(state.historyAction, state.location, {\n        startUninterruptedRevalidation: true\n      });\n      return;\n    }\n    // Otherwise, if we're currently in a loading state, just start a new\n    // navigation to the navigation.location but do not trigger an uninterrupted\n    // revalidation so that history correctly updates once the navigation completes\n    startNavigation(pendingAction || state.historyAction, state.navigation.location, {\n      overrideNavigation: state.navigation,\n      // Proxy through any rending view transition\n      enableViewTransition: pendingViewTransitionEnabled === true\n    });\n  }\n  // Start a navigation to the given action/location.  Can optionally provide a\n  // overrideNavigation which will override the normalLoad in the case of a redirect\n  // navigation\n  async function startNavigation(historyAction, location, opts) {\n    // Abort any in-progress navigations and start a new one. Unset any ongoing\n    // uninterrupted revalidations unless told otherwise, since we want this\n    // new navigation to update history normally\n    pendingNavigationController && pendingNavigationController.abort();\n    pendingNavigationController = null;\n    pendingAction = historyAction;\n    isUninterruptedRevalidation = (opts && opts.startUninterruptedRevalidation) === true;\n    // Save the current scroll position every time we start a new navigation,\n    // and track whether we should reset scroll on completion\n    saveScrollPosition(state.location, state.matches);\n    pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n    pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let loadingNavigation = opts && opts.overrideNavigation;\n    let matches = opts != null && opts.initialHydration && state.matches && state.matches.length > 0 && !initialMatchesIsFOW ?\n    // `matchRoutes()` has already been called if we're in here via `router.initialize()`\n    state.matches : matchRoutes(routesToUse, location, basename);\n    let flushSync = (opts && opts.flushSync) === true;\n    // Short circuit if it's only a hash change and not a revalidation or\n    // mutation submission.\n    //\n    // Ignore on initial page loads because since the initial hydration will always\n    // be \"same hash\".  For example, on /page#hash and submit a <Form method=\"post\">\n    // which will default to a navigation to /page\n    if (matches && state.initialized && !isRevalidationRequired && isHashChangeOnly(state.location, location) && !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))) {\n      completeNavigation(location, {\n        matches\n      }, {\n        flushSync\n      });\n      return;\n    }\n    let fogOfWar = checkFogOfWar(matches, routesToUse, location.pathname);\n    if (fogOfWar.active && fogOfWar.matches) {\n      matches = fogOfWar.matches;\n    }\n    // Short circuit with a 404 on the root error boundary if we match nothing\n    if (!matches) {\n      let {\n        error,\n        notFoundMatches,\n        route\n      } = handleNavigational404(location.pathname);\n      completeNavigation(location, {\n        matches: notFoundMatches,\n        loaderData: {},\n        errors: {\n          [route.id]: error\n        }\n      }, {\n        flushSync\n      });\n      return;\n    }\n    // Create a controller/Request for this navigation\n    pendingNavigationController = new AbortController();\n    let request = createClientSideRequest(init.history, location, pendingNavigationController.signal, opts && opts.submission);\n    let pendingActionResult;\n    if (opts && opts.pendingError) {\n      // If we have a pendingError, it means the user attempted a GET submission\n      // with binary FormData so assign here and skip to handleLoaders.  That\n      // way we handle calling loaders above the boundary etc.  It's not really\n      // different from an actionError in that sense.\n      pendingActionResult = [findNearestBoundary(matches).route.id, {\n        type: ResultType.error,\n        error: opts.pendingError\n      }];\n    } else if (opts && opts.submission && isMutationMethod(opts.submission.formMethod)) {\n      // Call action if we received an action submission\n      let actionResult = await handleAction(request, location, opts.submission, matches, fogOfWar.active, {\n        replace: opts.replace,\n        flushSync\n      });\n      if (actionResult.shortCircuited) {\n        return;\n      }\n      // If we received a 404 from handleAction, it's because we couldn't lazily\n      // discover the destination route so we don't want to call loaders\n      if (actionResult.pendingActionResult) {\n        let [routeId, result] = actionResult.pendingActionResult;\n        if (isErrorResult(result) && isRouteErrorResponse(result.error) && result.error.status === 404) {\n          pendingNavigationController = null;\n          completeNavigation(location, {\n            matches: actionResult.matches,\n            loaderData: {},\n            errors: {\n              [routeId]: result.error\n            }\n          });\n          return;\n        }\n      }\n      matches = actionResult.matches || matches;\n      pendingActionResult = actionResult.pendingActionResult;\n      loadingNavigation = getLoadingNavigation(location, opts.submission);\n      flushSync = false;\n      // No need to do fog of war matching again on loader execution\n      fogOfWar.active = false;\n      // Create a GET request for the loaders\n      request = createClientSideRequest(init.history, request.url, request.signal);\n    }\n    // Call loaders\n    let {\n      shortCircuited,\n      matches: updatedMatches,\n      loaderData,\n      errors\n    } = await handleLoaders(request, location, matches, fogOfWar.active, loadingNavigation, opts && opts.submission, opts && opts.fetcherSubmission, opts && opts.replace, opts && opts.initialHydration === true, flushSync, pendingActionResult);\n    if (shortCircuited) {\n      return;\n    }\n    // Clean up now that the action/loaders have completed.  Don't clean up if\n    // we short circuited because pendingNavigationController will have already\n    // been assigned to a new controller for the next navigation\n    pendingNavigationController = null;\n    completeNavigation(location, _extends({\n      matches: updatedMatches || matches\n    }, getActionDataForCommit(pendingActionResult), {\n      loaderData,\n      errors\n    }));\n  }\n  // Call the action matched by the leaf route for this navigation and handle\n  // redirects/errors\n  async function handleAction(request, location, submission, matches, isFogOfWar, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n    interruptActiveLoads();\n    // Put us in a submitting state\n    let navigation = getSubmittingNavigation(location, submission);\n    updateState({\n      navigation\n    }, {\n      flushSync: opts.flushSync === true\n    });\n    if (isFogOfWar) {\n      let discoverResult = await discoverRoutes(matches, location.pathname, request.signal);\n      if (discoverResult.type === \"aborted\") {\n        return {\n          shortCircuited: true\n        };\n      } else if (discoverResult.type === \"error\") {\n        let boundaryId = findNearestBoundary(discoverResult.partialMatches).route.id;\n        return {\n          matches: discoverResult.partialMatches,\n          pendingActionResult: [boundaryId, {\n            type: ResultType.error,\n            error: discoverResult.error\n          }]\n        };\n      } else if (!discoverResult.matches) {\n        let {\n          notFoundMatches,\n          error,\n          route\n        } = handleNavigational404(location.pathname);\n        return {\n          matches: notFoundMatches,\n          pendingActionResult: [route.id, {\n            type: ResultType.error,\n            error\n          }]\n        };\n      } else {\n        matches = discoverResult.matches;\n      }\n    }\n    // Call our action and get the result\n    let result;\n    let actionMatch = getTargetMatch(matches, location);\n    if (!actionMatch.route.action && !actionMatch.route.lazy) {\n      result = {\n        type: ResultType.error,\n        error: getInternalRouterError(405, {\n          method: request.method,\n          pathname: location.pathname,\n          routeId: actionMatch.route.id\n        })\n      };\n    } else {\n      let results = await callDataStrategy(\"action\", state, request, [actionMatch], matches, null);\n      result = results[actionMatch.route.id];\n      if (request.signal.aborted) {\n        return {\n          shortCircuited: true\n        };\n      }\n    }\n    if (isRedirectResult(result)) {\n      let replace;\n      if (opts && opts.replace != null) {\n        replace = opts.replace;\n      } else {\n        // If the user didn't explicity indicate replace behavior, replace if\n        // we redirected to the exact same location we're currently at to avoid\n        // double back-buttons\n        let location = normalizeRedirectLocation(result.response.headers.get(\"Location\"), new URL(request.url), basename, init.history);\n        replace = location === state.location.pathname + state.location.search;\n      }\n      await startRedirectNavigation(request, result, true, {\n        submission,\n        replace\n      });\n      return {\n        shortCircuited: true\n      };\n    }\n    if (isDeferredResult(result)) {\n      throw getInternalRouterError(400, {\n        type: \"defer-action\"\n      });\n    }\n    if (isErrorResult(result)) {\n      // Store off the pending error - we use it to determine which loaders\n      // to call and will commit it when we complete the navigation\n      let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n      // By default, all submissions to the current location are REPLACE\n      // navigations, but if the action threw an error that'll be rendered in\n      // an errorElement, we fall back to PUSH so that the user can use the\n      // back button to get back to the pre-submission form location to try\n      // again\n      if ((opts && opts.replace) !== true) {\n        pendingAction = Action.Push;\n      }\n      return {\n        matches,\n        pendingActionResult: [boundaryMatch.route.id, result]\n      };\n    }\n    return {\n      matches,\n      pendingActionResult: [actionMatch.route.id, result]\n    };\n  }\n  // Call all applicable loaders for the given matches, handling redirects,\n  // errors, etc.\n  async function handleLoaders(request, location, matches, isFogOfWar, overrideNavigation, submission, fetcherSubmission, replace, initialHydration, flushSync, pendingActionResult) {\n    // Figure out the right navigation we want to use for data loading\n    let loadingNavigation = overrideNavigation || getLoadingNavigation(location, submission);\n    // If this was a redirect from an action we don't have a \"submission\" but\n    // we have it on the loading navigation so use that if available\n    let activeSubmission = submission || fetcherSubmission || getSubmissionFromNavigation(loadingNavigation);\n    // If this is an uninterrupted revalidation, we remain in our current idle\n    // state.  If not, we need to switch to our loading state and load data,\n    // preserving any new action data or existing action data (in the case of\n    // a revalidation interrupting an actionReload)\n    // If we have partialHydration enabled, then don't update the state for the\n    // initial data load since it's not a \"navigation\"\n    let shouldUpdateNavigationState = !isUninterruptedRevalidation && (!future.v7_partialHydration || !initialHydration);\n    // When fog of war is enabled, we enter our `loading` state earlier so we\n    // can discover new routes during the `loading` state.  We skip this if\n    // we've already run actions since we would have done our matching already.\n    // If the children() function threw then, we want to proceed with the\n    // partial matches it discovered.\n    if (isFogOfWar) {\n      if (shouldUpdateNavigationState) {\n        let actionData = getUpdatedActionData(pendingActionResult);\n        updateState(_extends({\n          navigation: loadingNavigation\n        }, actionData !== undefined ? {\n          actionData\n        } : {}), {\n          flushSync\n        });\n      }\n      let discoverResult = await discoverRoutes(matches, location.pathname, request.signal);\n      if (discoverResult.type === \"aborted\") {\n        return {\n          shortCircuited: true\n        };\n      } else if (discoverResult.type === \"error\") {\n        let boundaryId = findNearestBoundary(discoverResult.partialMatches).route.id;\n        return {\n          matches: discoverResult.partialMatches,\n          loaderData: {},\n          errors: {\n            [boundaryId]: discoverResult.error\n          }\n        };\n      } else if (!discoverResult.matches) {\n        let {\n          error,\n          notFoundMatches,\n          route\n        } = handleNavigational404(location.pathname);\n        return {\n          matches: notFoundMatches,\n          loaderData: {},\n          errors: {\n            [route.id]: error\n          }\n        };\n      } else {\n        matches = discoverResult.matches;\n      }\n    }\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, activeSubmission, location, future.v7_partialHydration && initialHydration === true, future.v7_skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult);\n    // Cancel pending deferreds for no-longer-matched routes or routes we're\n    // about to reload.  Note that if this is an action reload we would have\n    // already cancelled all pending deferreds so this would be a no-op\n    cancelActiveDeferreds(routeId => !(matches && matches.some(m => m.route.id === routeId)) || matchesToLoad && matchesToLoad.some(m => m.route.id === routeId));\n    pendingNavigationLoadId = ++incrementingLoadId;\n    // Short circuit if we have no loaders to run\n    if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n      let updatedFetchers = markFetchRedirectsDone();\n      completeNavigation(location, _extends({\n        matches,\n        loaderData: {},\n        // Commit pending error if we're short circuiting\n        errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? {\n          [pendingActionResult[0]]: pendingActionResult[1].error\n        } : null\n      }, getActionDataForCommit(pendingActionResult), updatedFetchers ? {\n        fetchers: new Map(state.fetchers)\n      } : {}), {\n        flushSync\n      });\n      return {\n        shortCircuited: true\n      };\n    }\n    if (shouldUpdateNavigationState) {\n      let updates = {};\n      if (!isFogOfWar) {\n        // Only update navigation/actionNData if we didn't already do it above\n        updates.navigation = loadingNavigation;\n        let actionData = getUpdatedActionData(pendingActionResult);\n        if (actionData !== undefined) {\n          updates.actionData = actionData;\n        }\n      }\n      if (revalidatingFetchers.length > 0) {\n        updates.fetchers = getUpdatedRevalidatingFetchers(revalidatingFetchers);\n      }\n      updateState(updates, {\n        flushSync\n      });\n    }\n    revalidatingFetchers.forEach(rf => {\n      abortFetcher(rf.key);\n      if (rf.controller) {\n        // Fetchers use an independent AbortController so that aborting a fetcher\n        // (via deleteFetcher) does not abort the triggering navigation that\n        // triggered the revalidation\n        fetchControllers.set(rf.key, rf.controller);\n      }\n    });\n    // Proxy navigation abort through to revalidation fetchers\n    let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach(f => abortFetcher(f.key));\n    if (pendingNavigationController) {\n      pendingNavigationController.signal.addEventListener(\"abort\", abortPendingFetchRevalidations);\n    }\n    let {\n      loaderResults,\n      fetcherResults\n    } = await callLoadersAndMaybeResolveData(state, matches, matchesToLoad, revalidatingFetchers, request);\n    if (request.signal.aborted) {\n      return {\n        shortCircuited: true\n      };\n    }\n    // Clean up _after_ loaders have completed.  Don't clean up if we short\n    // circuited because fetchControllers would have been aborted and\n    // reassigned to new controllers for the next navigation\n    if (pendingNavigationController) {\n      pendingNavigationController.signal.removeEventListener(\"abort\", abortPendingFetchRevalidations);\n    }\n    revalidatingFetchers.forEach(rf => fetchControllers.delete(rf.key));\n    // If any loaders returned a redirect Response, start a new REPLACE navigation\n    let redirect = findRedirect(loaderResults);\n    if (redirect) {\n      await startRedirectNavigation(request, redirect.result, true, {\n        replace\n      });\n      return {\n        shortCircuited: true\n      };\n    }\n    redirect = findRedirect(fetcherResults);\n    if (redirect) {\n      // If this redirect came from a fetcher make sure we mark it in\n      // fetchRedirectIds so it doesn't get revalidated on the next set of\n      // loader executions\n      fetchRedirectIds.add(redirect.key);\n      await startRedirectNavigation(request, redirect.result, true, {\n        replace\n      });\n      return {\n        shortCircuited: true\n      };\n    }\n    // Process and commit output from loaders\n    let {\n      loaderData,\n      errors\n    } = processLoaderData(state, matches, loaderResults, pendingActionResult, revalidatingFetchers, fetcherResults, activeDeferreds);\n    // Wire up subscribers to update loaderData as promises settle\n    activeDeferreds.forEach((deferredData, routeId) => {\n      deferredData.subscribe(aborted => {\n        // Note: No need to updateState here since the TrackedPromise on\n        // loaderData is stable across resolve/reject\n        // Remove this instance if we were aborted or if promises have settled\n        if (aborted || deferredData.done) {\n          activeDeferreds.delete(routeId);\n        }\n      });\n    });\n    // Preserve SSR errors during partial hydration\n    if (future.v7_partialHydration && initialHydration && state.errors) {\n      errors = _extends({}, state.errors, errors);\n    }\n    let updatedFetchers = markFetchRedirectsDone();\n    let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n    let shouldUpdateFetchers = updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n    return _extends({\n      matches,\n      loaderData,\n      errors\n    }, shouldUpdateFetchers ? {\n      fetchers: new Map(state.fetchers)\n    } : {});\n  }\n  function getUpdatedActionData(pendingActionResult) {\n    if (pendingActionResult && !isErrorResult(pendingActionResult[1])) {\n      // This is cast to `any` currently because `RouteData`uses any and it\n      // would be a breaking change to use any.\n      // TODO: v7 - change `RouteData` to use `unknown` instead of `any`\n      return {\n        [pendingActionResult[0]]: pendingActionResult[1].data\n      };\n    } else if (state.actionData) {\n      if (Object.keys(state.actionData).length === 0) {\n        return null;\n      } else {\n        return state.actionData;\n      }\n    }\n  }\n  function getUpdatedRevalidatingFetchers(revalidatingFetchers) {\n    revalidatingFetchers.forEach(rf => {\n      let fetcher = state.fetchers.get(rf.key);\n      let revalidatingFetcher = getLoadingFetcher(undefined, fetcher ? fetcher.data : undefined);\n      state.fetchers.set(rf.key, revalidatingFetcher);\n    });\n    return new Map(state.fetchers);\n  }\n  // Trigger a fetcher load/submit for the given fetcher key\n  function fetch(key, routeId, href, opts) {\n    if (isServer) {\n      throw new Error(\"router.fetch() was called during the server render, but it shouldn't be. \" + \"You are likely calling a useFetcher() method in the body of your component. \" + \"Try moving it to a useEffect or a callback.\");\n    }\n    abortFetcher(key);\n    let flushSync = (opts && opts.flushSync) === true;\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, href, future.v7_relativeSplatPath, routeId, opts == null ? void 0 : opts.relative);\n    let matches = matchRoutes(routesToUse, normalizedPath, basename);\n    let fogOfWar = checkFogOfWar(matches, routesToUse, normalizedPath);\n    if (fogOfWar.active && fogOfWar.matches) {\n      matches = fogOfWar.matches;\n    }\n    if (!matches) {\n      setFetcherError(key, routeId, getInternalRouterError(404, {\n        pathname: normalizedPath\n      }), {\n        flushSync\n      });\n      return;\n    }\n    let {\n      path,\n      submission,\n      error\n    } = normalizeNavigateOptions(future.v7_normalizeFormMethod, true, normalizedPath, opts);\n    if (error) {\n      setFetcherError(key, routeId, error, {\n        flushSync\n      });\n      return;\n    }\n    let match = getTargetMatch(matches, path);\n    let preventScrollReset = (opts && opts.preventScrollReset) === true;\n    if (submission && isMutationMethod(submission.formMethod)) {\n      handleFetcherAction(key, routeId, path, match, matches, fogOfWar.active, flushSync, preventScrollReset, submission);\n      return;\n    }\n    // Store off the match so we can call it's shouldRevalidate on subsequent\n    // revalidations\n    fetchLoadMatches.set(key, {\n      routeId,\n      path\n    });\n    handleFetcherLoader(key, routeId, path, match, matches, fogOfWar.active, flushSync, preventScrollReset, submission);\n  }\n  // Call the action for the matched fetcher.submit(), and then handle redirects,\n  // errors, and revalidation\n  async function handleFetcherAction(key, routeId, path, match, requestMatches, isFogOfWar, flushSync, preventScrollReset, submission) {\n    interruptActiveLoads();\n    fetchLoadMatches.delete(key);\n    function detectAndHandle405Error(m) {\n      if (!m.route.action && !m.route.lazy) {\n        let error = getInternalRouterError(405, {\n          method: submission.formMethod,\n          pathname: path,\n          routeId: routeId\n        });\n        setFetcherError(key, routeId, error, {\n          flushSync\n        });\n        return true;\n      }\n      return false;\n    }\n    if (!isFogOfWar && detectAndHandle405Error(match)) {\n      return;\n    }\n    // Put this fetcher into it's submitting state\n    let existingFetcher = state.fetchers.get(key);\n    updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n      flushSync\n    });\n    let abortController = new AbortController();\n    let fetchRequest = createClientSideRequest(init.history, path, abortController.signal, submission);\n    if (isFogOfWar) {\n      let discoverResult = await discoverRoutes(requestMatches, new URL(fetchRequest.url).pathname, fetchRequest.signal, key);\n      if (discoverResult.type === \"aborted\") {\n        return;\n      } else if (discoverResult.type === \"error\") {\n        setFetcherError(key, routeId, discoverResult.error, {\n          flushSync\n        });\n        return;\n      } else if (!discoverResult.matches) {\n        setFetcherError(key, routeId, getInternalRouterError(404, {\n          pathname: path\n        }), {\n          flushSync\n        });\n        return;\n      } else {\n        requestMatches = discoverResult.matches;\n        match = getTargetMatch(requestMatches, path);\n        if (detectAndHandle405Error(match)) {\n          return;\n        }\n      }\n    }\n    // Call the action for the fetcher\n    fetchControllers.set(key, abortController);\n    let originatingLoadId = incrementingLoadId;\n    let actionResults = await callDataStrategy(\"action\", state, fetchRequest, [match], requestMatches, key);\n    let actionResult = actionResults[match.route.id];\n    if (fetchRequest.signal.aborted) {\n      // We can delete this so long as we weren't aborted by our own fetcher\n      // re-submit which would have put _new_ controller is in fetchControllers\n      if (fetchControllers.get(key) === abortController) {\n        fetchControllers.delete(key);\n      }\n      return;\n    }\n    // When using v7_fetcherPersist, we don't want errors bubbling up to the UI\n    // or redirects processed for unmounted fetchers so we just revert them to\n    // idle\n    if (future.v7_fetcherPersist && deletedFetchers.has(key)) {\n      if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {\n        updateFetcherState(key, getDoneFetcher(undefined));\n        return;\n      }\n      // Let SuccessResult's fall through for revalidation\n    } else {\n      if (isRedirectResult(actionResult)) {\n        fetchControllers.delete(key);\n        if (pendingNavigationLoadId > originatingLoadId) {\n          // A new navigation was kicked off after our action started, so that\n          // should take precedence over this redirect navigation.  We already\n          // set isRevalidationRequired so all loaders for the new route should\n          // fire unless opted out via shouldRevalidate\n          updateFetcherState(key, getDoneFetcher(undefined));\n          return;\n        } else {\n          fetchRedirectIds.add(key);\n          updateFetcherState(key, getLoadingFetcher(submission));\n          return startRedirectNavigation(fetchRequest, actionResult, false, {\n            fetcherSubmission: submission,\n            preventScrollReset\n          });\n        }\n      }\n      // Process any non-redirect errors thrown\n      if (isErrorResult(actionResult)) {\n        setFetcherError(key, routeId, actionResult.error);\n        return;\n      }\n    }\n    if (isDeferredResult(actionResult)) {\n      throw getInternalRouterError(400, {\n        type: \"defer-action\"\n      });\n    }\n    // Start the data load for current matches, or the next location if we're\n    // in the middle of a navigation\n    let nextLocation = state.navigation.location || state.location;\n    let revalidationRequest = createClientSideRequest(init.history, nextLocation, abortController.signal);\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let matches = state.navigation.state !== \"idle\" ? matchRoutes(routesToUse, state.navigation.location, basename) : state.matches;\n    invariant(matches, \"Didn't find any matches after fetcher action\");\n    let loadId = ++incrementingLoadId;\n    fetchReloadIds.set(key, loadId);\n    let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n    state.fetchers.set(key, loadFetcher);\n    let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, submission, nextLocation, false, future.v7_skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, [match.route.id, actionResult]);\n    // Put all revalidating fetchers into the loading state, except for the\n    // current fetcher which we want to keep in it's current loading state which\n    // contains it's action submission info + action data\n    revalidatingFetchers.filter(rf => rf.key !== key).forEach(rf => {\n      let staleKey = rf.key;\n      let existingFetcher = state.fetchers.get(staleKey);\n      let revalidatingFetcher = getLoadingFetcher(undefined, existingFetcher ? existingFetcher.data : undefined);\n      state.fetchers.set(staleKey, revalidatingFetcher);\n      abortFetcher(staleKey);\n      if (rf.controller) {\n        fetchControllers.set(staleKey, rf.controller);\n      }\n    });\n    updateState({\n      fetchers: new Map(state.fetchers)\n    });\n    let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach(rf => abortFetcher(rf.key));\n    abortController.signal.addEventListener(\"abort\", abortPendingFetchRevalidations);\n    let {\n      loaderResults,\n      fetcherResults\n    } = await callLoadersAndMaybeResolveData(state, matches, matchesToLoad, revalidatingFetchers, revalidationRequest);\n    if (abortController.signal.aborted) {\n      return;\n    }\n    abortController.signal.removeEventListener(\"abort\", abortPendingFetchRevalidations);\n    fetchReloadIds.delete(key);\n    fetchControllers.delete(key);\n    revalidatingFetchers.forEach(r => fetchControllers.delete(r.key));\n    let redirect = findRedirect(loaderResults);\n    if (redirect) {\n      return startRedirectNavigation(revalidationRequest, redirect.result, false, {\n        preventScrollReset\n      });\n    }\n    redirect = findRedirect(fetcherResults);\n    if (redirect) {\n      // If this redirect came from a fetcher make sure we mark it in\n      // fetchRedirectIds so it doesn't get revalidated on the next set of\n      // loader executions\n      fetchRedirectIds.add(redirect.key);\n      return startRedirectNavigation(revalidationRequest, redirect.result, false, {\n        preventScrollReset\n      });\n    }\n    // Process and commit output from loaders\n    let {\n      loaderData,\n      errors\n    } = processLoaderData(state, matches, loaderResults, undefined, revalidatingFetchers, fetcherResults, activeDeferreds);\n    // Since we let revalidations complete even if the submitting fetcher was\n    // deleted, only put it back to idle if it hasn't been deleted\n    if (state.fetchers.has(key)) {\n      let doneFetcher = getDoneFetcher(actionResult.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n    abortStaleFetchLoads(loadId);\n    // If we are currently in a navigation loading state and this fetcher is\n    // more recent than the navigation, we want the newer data so abort the\n    // navigation and complete it with the fetcher data\n    if (state.navigation.state === \"loading\" && loadId > pendingNavigationLoadId) {\n      invariant(pendingAction, \"Expected pending action\");\n      pendingNavigationController && pendingNavigationController.abort();\n      completeNavigation(state.navigation.location, {\n        matches,\n        loaderData,\n        errors,\n        fetchers: new Map(state.fetchers)\n      });\n    } else {\n      // otherwise just update with the fetcher data, preserving any existing\n      // loaderData for loaders that did not need to reload.  We have to\n      // manually merge here since we aren't going through completeNavigation\n      updateState({\n        errors,\n        loaderData: mergeLoaderData(state.loaderData, loaderData, matches, errors),\n        fetchers: new Map(state.fetchers)\n      });\n      isRevalidationRequired = false;\n    }\n  }\n  // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n  async function handleFetcherLoader(key, routeId, path, match, matches, isFogOfWar, flushSync, preventScrollReset, submission) {\n    let existingFetcher = state.fetchers.get(key);\n    updateFetcherState(key, getLoadingFetcher(submission, existingFetcher ? existingFetcher.data : undefined), {\n      flushSync\n    });\n    let abortController = new AbortController();\n    let fetchRequest = createClientSideRequest(init.history, path, abortController.signal);\n    if (isFogOfWar) {\n      let discoverResult = await discoverRoutes(matches, new URL(fetchRequest.url).pathname, fetchRequest.signal, key);\n      if (discoverResult.type === \"aborted\") {\n        return;\n      } else if (discoverResult.type === \"error\") {\n        setFetcherError(key, routeId, discoverResult.error, {\n          flushSync\n        });\n        return;\n      } else if (!discoverResult.matches) {\n        setFetcherError(key, routeId, getInternalRouterError(404, {\n          pathname: path\n        }), {\n          flushSync\n        });\n        return;\n      } else {\n        matches = discoverResult.matches;\n        match = getTargetMatch(matches, path);\n      }\n    }\n    // Call the loader for this fetcher route match\n    fetchControllers.set(key, abortController);\n    let originatingLoadId = incrementingLoadId;\n    let results = await callDataStrategy(\"loader\", state, fetchRequest, [match], matches, key);\n    let result = results[match.route.id];\n    // Deferred isn't supported for fetcher loads, await everything and treat it\n    // as a normal load.  resolveDeferredData will return undefined if this\n    // fetcher gets aborted, so we just leave result untouched and short circuit\n    // below if that happens\n    if (isDeferredResult(result)) {\n      result = (await resolveDeferredData(result, fetchRequest.signal, true)) || result;\n    }\n    // We can delete this so long as we weren't aborted by our our own fetcher\n    // re-load which would have put _new_ controller is in fetchControllers\n    if (fetchControllers.get(key) === abortController) {\n      fetchControllers.delete(key);\n    }\n    if (fetchRequest.signal.aborted) {\n      return;\n    }\n    // We don't want errors bubbling up or redirects followed for unmounted\n    // fetchers, so short circuit here if it was removed from the UI\n    if (deletedFetchers.has(key)) {\n      updateFetcherState(key, getDoneFetcher(undefined));\n      return;\n    }\n    // If the loader threw a redirect Response, start a new REPLACE navigation\n    if (isRedirectResult(result)) {\n      if (pendingNavigationLoadId > originatingLoadId) {\n        // A new navigation was kicked off after our loader started, so that\n        // should take precedence over this redirect navigation\n        updateFetcherState(key, getDoneFetcher(undefined));\n        return;\n      } else {\n        fetchRedirectIds.add(key);\n        await startRedirectNavigation(fetchRequest, result, false, {\n          preventScrollReset\n        });\n        return;\n      }\n    }\n    // Process any non-redirect errors thrown\n    if (isErrorResult(result)) {\n      setFetcherError(key, routeId, result.error);\n      return;\n    }\n    invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n    // Put the fetcher back into an idle state\n    updateFetcherState(key, getDoneFetcher(result.data));\n  }\n  /**\n   * Utility function to handle redirects returned from an action or loader.\n   * Normally, a redirect \"replaces\" the navigation that triggered it.  So, for\n   * example:\n   *\n   *  - user is on /a\n   *  - user clicks a link to /b\n   *  - loader for /b redirects to /c\n   *\n   * In a non-JS app the browser would track the in-flight navigation to /b and\n   * then replace it with /c when it encountered the redirect response.  In\n   * the end it would only ever update the URL bar with /c.\n   *\n   * In client-side routing using pushState/replaceState, we aim to emulate\n   * this behavior and we also do not update history until the end of the\n   * navigation (including processed redirects).  This means that we never\n   * actually touch history until we've processed redirects, so we just use\n   * the history action from the original navigation (PUSH or REPLACE).\n   */\n  async function startRedirectNavigation(request, redirect, isNavigation, _temp2) {\n    let {\n      submission,\n      fetcherSubmission,\n      preventScrollReset,\n      replace\n    } = _temp2 === void 0 ? {} : _temp2;\n    if (redirect.response.headers.has(\"X-Remix-Revalidate\")) {\n      isRevalidationRequired = true;\n    }\n    let location = redirect.response.headers.get(\"Location\");\n    invariant(location, \"Expected a Location header on the redirect Response\");\n    location = normalizeRedirectLocation(location, new URL(request.url), basename, init.history);\n    let redirectLocation = createLocation(state.location, location, {\n      _isRedirect: true\n    });\n    if (isBrowser) {\n      let isDocumentReload = false;\n      if (redirect.response.headers.has(\"X-Remix-Reload-Document\")) {\n        // Hard reload if the response contained X-Remix-Reload-Document\n        isDocumentReload = true;\n      } else if (ABSOLUTE_URL_REGEX.test(location)) {\n        const url = init.history.createURL(location);\n        isDocumentReload =\n        // Hard reload if it's an absolute URL to a new origin\n        url.origin !== routerWindow.location.origin ||\n        // Hard reload if it's an absolute URL that does not match our basename\n        stripBasename(url.pathname, basename) == null;\n      }\n      if (isDocumentReload) {\n        if (replace) {\n          routerWindow.location.replace(location);\n        } else {\n          routerWindow.location.assign(location);\n        }\n        return;\n      }\n    }\n    // There's no need to abort on redirects, since we don't detect the\n    // redirect until the action/loaders have settled\n    pendingNavigationController = null;\n    let redirectHistoryAction = replace === true || redirect.response.headers.has(\"X-Remix-Replace\") ? Action.Replace : Action.Push;\n    // Use the incoming submission if provided, fallback on the active one in\n    // state.navigation\n    let {\n      formMethod,\n      formAction,\n      formEncType\n    } = state.navigation;\n    if (!submission && !fetcherSubmission && formMethod && formAction && formEncType) {\n      submission = getSubmissionFromNavigation(state.navigation);\n    }\n    // If this was a 307/308 submission we want to preserve the HTTP method and\n    // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n    // redirected location\n    let activeSubmission = submission || fetcherSubmission;\n    if (redirectPreserveMethodStatusCodes.has(redirect.response.status) && activeSubmission && isMutationMethod(activeSubmission.formMethod)) {\n      await startNavigation(redirectHistoryAction, redirectLocation, {\n        submission: _extends({}, activeSubmission, {\n          formAction: location\n        }),\n        // Preserve these flags across redirects\n        preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n        enableViewTransition: isNavigation ? pendingViewTransitionEnabled : undefined\n      });\n    } else {\n      // If we have a navigation submission, we will preserve it through the\n      // redirect navigation\n      let overrideNavigation = getLoadingNavigation(redirectLocation, submission);\n      await startNavigation(redirectHistoryAction, redirectLocation, {\n        overrideNavigation,\n        // Send fetcher submissions through for shouldRevalidate\n        fetcherSubmission,\n        // Preserve these flags across redirects\n        preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n        enableViewTransition: isNavigation ? pendingViewTransitionEnabled : undefined\n      });\n    }\n  }\n  // Utility wrapper for calling dataStrategy client-side without having to\n  // pass around the manifest, mapRouteProperties, etc.\n  async function callDataStrategy(type, state, request, matchesToLoad, matches, fetcherKey) {\n    let results;\n    let dataResults = {};\n    try {\n      results = await callDataStrategyImpl(dataStrategyImpl, type, state, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties);\n    } catch (e) {\n      // If the outer dataStrategy method throws, just return the error for all\n      // matches - and it'll naturally bubble to the root\n      matchesToLoad.forEach(m => {\n        dataResults[m.route.id] = {\n          type: ResultType.error,\n          error: e\n        };\n      });\n      return dataResults;\n    }\n    for (let [routeId, result] of Object.entries(results)) {\n      if (isRedirectDataStrategyResultResult(result)) {\n        let response = result.result;\n        dataResults[routeId] = {\n          type: ResultType.redirect,\n          response: normalizeRelativeRoutingRedirectResponse(response, request, routeId, matches, basename, future.v7_relativeSplatPath)\n        };\n      } else {\n        dataResults[routeId] = await convertDataStrategyResultToDataResult(result);\n      }\n    }\n    return dataResults;\n  }\n  async function callLoadersAndMaybeResolveData(state, matches, matchesToLoad, fetchersToLoad, request) {\n    let currentMatches = state.matches;\n    // Kick off loaders and fetchers in parallel\n    let loaderResultsPromise = callDataStrategy(\"loader\", state, request, matchesToLoad, matches, null);\n    let fetcherResultsPromise = Promise.all(fetchersToLoad.map(async f => {\n      if (f.matches && f.match && f.controller) {\n        let results = await callDataStrategy(\"loader\", state, createClientSideRequest(init.history, f.path, f.controller.signal), [f.match], f.matches, f.key);\n        let result = results[f.match.route.id];\n        // Fetcher results are keyed by fetcher key from here on out, not routeId\n        return {\n          [f.key]: result\n        };\n      } else {\n        return Promise.resolve({\n          [f.key]: {\n            type: ResultType.error,\n            error: getInternalRouterError(404, {\n              pathname: f.path\n            })\n          }\n        });\n      }\n    }));\n    let loaderResults = await loaderResultsPromise;\n    let fetcherResults = (await fetcherResultsPromise).reduce((acc, r) => Object.assign(acc, r), {});\n    await Promise.all([resolveNavigationDeferredResults(matches, loaderResults, request.signal, currentMatches, state.loaderData), resolveFetcherDeferredResults(matches, fetcherResults, fetchersToLoad)]);\n    return {\n      loaderResults,\n      fetcherResults\n    };\n  }\n  function interruptActiveLoads() {\n    // Every interruption triggers a revalidation\n    isRevalidationRequired = true;\n    // Cancel pending route-level deferreds and mark cancelled routes for\n    // revalidation\n    cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n    // Abort in-flight fetcher loads\n    fetchLoadMatches.forEach((_, key) => {\n      if (fetchControllers.has(key)) {\n        cancelledFetcherLoads.add(key);\n      }\n      abortFetcher(key);\n    });\n  }\n  function updateFetcherState(key, fetcher, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n    state.fetchers.set(key, fetcher);\n    updateState({\n      fetchers: new Map(state.fetchers)\n    }, {\n      flushSync: (opts && opts.flushSync) === true\n    });\n  }\n  function setFetcherError(key, routeId, error, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n    let boundaryMatch = findNearestBoundary(state.matches, routeId);\n    deleteFetcher(key);\n    updateState({\n      errors: {\n        [boundaryMatch.route.id]: error\n      },\n      fetchers: new Map(state.fetchers)\n    }, {\n      flushSync: (opts && opts.flushSync) === true\n    });\n  }\n  function getFetcher(key) {\n    activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n    // If this fetcher was previously marked for deletion, unmark it since we\n    // have a new instance\n    if (deletedFetchers.has(key)) {\n      deletedFetchers.delete(key);\n    }\n    return state.fetchers.get(key) || IDLE_FETCHER;\n  }\n  function deleteFetcher(key) {\n    let fetcher = state.fetchers.get(key);\n    // Don't abort the controller if this is a deletion of a fetcher.submit()\n    // in it's loading phase since - we don't want to abort the corresponding\n    // revalidation and want them to complete and land\n    if (fetchControllers.has(key) && !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))) {\n      abortFetcher(key);\n    }\n    fetchLoadMatches.delete(key);\n    fetchReloadIds.delete(key);\n    fetchRedirectIds.delete(key);\n    // If we opted into the flag we can clear this now since we're calling\n    // deleteFetcher() at the end of updateState() and we've already handed the\n    // deleted fetcher keys off to the data layer.\n    // If not, we're eagerly calling deleteFetcher() and we need to keep this\n    // Set populated until the next updateState call, and we'll clear\n    // `deletedFetchers` then\n    if (future.v7_fetcherPersist) {\n      deletedFetchers.delete(key);\n    }\n    cancelledFetcherLoads.delete(key);\n    state.fetchers.delete(key);\n  }\n  function deleteFetcherAndUpdateState(key) {\n    let count = (activeFetchers.get(key) || 0) - 1;\n    if (count <= 0) {\n      activeFetchers.delete(key);\n      deletedFetchers.add(key);\n      if (!future.v7_fetcherPersist) {\n        deleteFetcher(key);\n      }\n    } else {\n      activeFetchers.set(key, count);\n    }\n    updateState({\n      fetchers: new Map(state.fetchers)\n    });\n  }\n  function abortFetcher(key) {\n    let controller = fetchControllers.get(key);\n    if (controller) {\n      controller.abort();\n      fetchControllers.delete(key);\n    }\n  }\n  function markFetchersDone(keys) {\n    for (let key of keys) {\n      let fetcher = getFetcher(key);\n      let doneFetcher = getDoneFetcher(fetcher.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n  }\n  function markFetchRedirectsDone() {\n    let doneKeys = [];\n    let updatedFetchers = false;\n    for (let key of fetchRedirectIds) {\n      let fetcher = state.fetchers.get(key);\n      invariant(fetcher, \"Expected fetcher: \" + key);\n      if (fetcher.state === \"loading\") {\n        fetchRedirectIds.delete(key);\n        doneKeys.push(key);\n        updatedFetchers = true;\n      }\n    }\n    markFetchersDone(doneKeys);\n    return updatedFetchers;\n  }\n  function abortStaleFetchLoads(landedId) {\n    let yeetedKeys = [];\n    for (let [key, id] of fetchReloadIds) {\n      if (id < landedId) {\n        let fetcher = state.fetchers.get(key);\n        invariant(fetcher, \"Expected fetcher: \" + key);\n        if (fetcher.state === \"loading\") {\n          abortFetcher(key);\n          fetchReloadIds.delete(key);\n          yeetedKeys.push(key);\n        }\n      }\n    }\n    markFetchersDone(yeetedKeys);\n    return yeetedKeys.length > 0;\n  }\n  function getBlocker(key, fn) {\n    let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n    if (blockerFunctions.get(key) !== fn) {\n      blockerFunctions.set(key, fn);\n    }\n    return blocker;\n  }\n  function deleteBlocker(key) {\n    state.blockers.delete(key);\n    blockerFunctions.delete(key);\n  }\n  // Utility function to update blockers, ensuring valid state transitions\n  function updateBlocker(key, newBlocker) {\n    let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n    // Poor mans state machine :)\n    // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n    invariant(blocker.state === \"unblocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"proceeding\" || blocker.state === \"blocked\" && newBlocker.state === \"unblocked\" || blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\", \"Invalid blocker state transition: \" + blocker.state + \" -> \" + newBlocker.state);\n    let blockers = new Map(state.blockers);\n    blockers.set(key, newBlocker);\n    updateState({\n      blockers\n    });\n  }\n  function shouldBlockNavigation(_ref2) {\n    let {\n      currentLocation,\n      nextLocation,\n      historyAction\n    } = _ref2;\n    if (blockerFunctions.size === 0) {\n      return;\n    }\n    // We ony support a single active blocker at the moment since we don't have\n    // any compelling use cases for multi-blocker yet\n    if (blockerFunctions.size > 1) {\n      warning(false, \"A router only supports one blocker at a time\");\n    }\n    let entries = Array.from(blockerFunctions.entries());\n    let [blockerKey, blockerFunction] = entries[entries.length - 1];\n    let blocker = state.blockers.get(blockerKey);\n    if (blocker && blocker.state === \"proceeding\") {\n      // If the blocker is currently proceeding, we don't need to re-check\n      // it and can let this navigation continue\n      return;\n    }\n    // At this point, we know we're unblocked/blocked so we need to check the\n    // user-provided blocker function\n    if (blockerFunction({\n      currentLocation,\n      nextLocation,\n      historyAction\n    })) {\n      return blockerKey;\n    }\n  }\n  function handleNavigational404(pathname) {\n    let error = getInternalRouterError(404, {\n      pathname\n    });\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let {\n      matches,\n      route\n    } = getShortCircuitMatches(routesToUse);\n    // Cancel all pending deferred on 404s since we don't keep any routes\n    cancelActiveDeferreds();\n    return {\n      notFoundMatches: matches,\n      route,\n      error\n    };\n  }\n  function cancelActiveDeferreds(predicate) {\n    let cancelledRouteIds = [];\n    activeDeferreds.forEach((dfd, routeId) => {\n      if (!predicate || predicate(routeId)) {\n        // Cancel the deferred - but do not remove from activeDeferreds here -\n        // we rely on the subscribers to do that so our tests can assert proper\n        // cleanup via _internalActiveDeferreds\n        dfd.cancel();\n        cancelledRouteIds.push(routeId);\n        activeDeferreds.delete(routeId);\n      }\n    });\n    return cancelledRouteIds;\n  }\n  // Opt in to capturing and reporting scroll positions during navigations,\n  // used by the <ScrollRestoration> component\n  function enableScrollRestoration(positions, getPosition, getKey) {\n    savedScrollPositions = positions;\n    getScrollPosition = getPosition;\n    getScrollRestorationKey = getKey || null;\n    // Perform initial hydration scroll restoration, since we miss the boat on\n    // the initial updateState() because we've not yet rendered <ScrollRestoration/>\n    // and therefore have no savedScrollPositions available\n    if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n      initialScrollRestored = true;\n      let y = getSavedScrollPosition(state.location, state.matches);\n      if (y != null) {\n        updateState({\n          restoreScrollPosition: y\n        });\n      }\n    }\n    return () => {\n      savedScrollPositions = null;\n      getScrollPosition = null;\n      getScrollRestorationKey = null;\n    };\n  }\n  function getScrollKey(location, matches) {\n    if (getScrollRestorationKey) {\n      let key = getScrollRestorationKey(location, matches.map(m => convertRouteMatchToUiMatch(m, state.loaderData)));\n      return key || location.key;\n    }\n    return location.key;\n  }\n  function saveScrollPosition(location, matches) {\n    if (savedScrollPositions && getScrollPosition) {\n      let key = getScrollKey(location, matches);\n      savedScrollPositions[key] = getScrollPosition();\n    }\n  }\n  function getSavedScrollPosition(location, matches) {\n    if (savedScrollPositions) {\n      let key = getScrollKey(location, matches);\n      let y = savedScrollPositions[key];\n      if (typeof y === \"number\") {\n        return y;\n      }\n    }\n    return null;\n  }\n  function checkFogOfWar(matches, routesToUse, pathname) {\n    if (patchRoutesOnNavigationImpl) {\n      if (!matches) {\n        let fogMatches = matchRoutesImpl(routesToUse, pathname, basename, true);\n        return {\n          active: true,\n          matches: fogMatches || []\n        };\n      } else {\n        if (Object.keys(matches[0].params).length > 0) {\n          // If we matched a dynamic param or a splat, it might only be because\n          // we haven't yet discovered other routes that would match with a\n          // higher score.  Call patchRoutesOnNavigation just to be sure\n          let partialMatches = matchRoutesImpl(routesToUse, pathname, basename, true);\n          return {\n            active: true,\n            matches: partialMatches\n          };\n        }\n      }\n    }\n    return {\n      active: false,\n      matches: null\n    };\n  }\n  async function discoverRoutes(matches, pathname, signal, fetcherKey) {\n    if (!patchRoutesOnNavigationImpl) {\n      return {\n        type: \"success\",\n        matches\n      };\n    }\n    let partialMatches = matches;\n    while (true) {\n      let isNonHMR = inFlightDataRoutes == null;\n      let routesToUse = inFlightDataRoutes || dataRoutes;\n      let localManifest = manifest;\n      try {\n        await patchRoutesOnNavigationImpl({\n          signal,\n          path: pathname,\n          matches: partialMatches,\n          fetcherKey,\n          patch: (routeId, children) => {\n            if (signal.aborted) return;\n            patchRoutesImpl(routeId, children, routesToUse, localManifest, mapRouteProperties);\n          }\n        });\n      } catch (e) {\n        return {\n          type: \"error\",\n          error: e,\n          partialMatches\n        };\n      } finally {\n        // If we are not in the middle of an HMR revalidation and we changed the\n        // routes, provide a new identity so when we `updateState` at the end of\n        // this navigation/fetch `router.routes` will be a new identity and\n        // trigger a re-run of memoized `router.routes` dependencies.\n        // HMR will already update the identity and reflow when it lands\n        // `inFlightDataRoutes` in `completeNavigation`\n        if (isNonHMR && !signal.aborted) {\n          dataRoutes = [...dataRoutes];\n        }\n      }\n      if (signal.aborted) {\n        return {\n          type: \"aborted\"\n        };\n      }\n      let newMatches = matchRoutes(routesToUse, pathname, basename);\n      if (newMatches) {\n        return {\n          type: \"success\",\n          matches: newMatches\n        };\n      }\n      let newPartialMatches = matchRoutesImpl(routesToUse, pathname, basename, true);\n      // Avoid loops if the second pass results in the same partial matches\n      if (!newPartialMatches || partialMatches.length === newPartialMatches.length && partialMatches.every((m, i) => m.route.id === newPartialMatches[i].route.id)) {\n        return {\n          type: \"success\",\n          matches: null\n        };\n      }\n      partialMatches = newPartialMatches;\n    }\n  }\n  function _internalSetRoutes(newRoutes) {\n    manifest = {};\n    inFlightDataRoutes = convertRoutesToDataRoutes(newRoutes, mapRouteProperties, undefined, manifest);\n  }\n  function patchRoutes(routeId, children) {\n    let isNonHMR = inFlightDataRoutes == null;\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    patchRoutesImpl(routeId, children, routesToUse, manifest, mapRouteProperties);\n    // If we are not in the middle of an HMR revalidation and we changed the\n    // routes, provide a new identity and trigger a reflow via `updateState`\n    // to re-run memoized `router.routes` dependencies.\n    // HMR will already update the identity and reflow when it lands\n    // `inFlightDataRoutes` in `completeNavigation`\n    if (isNonHMR) {\n      dataRoutes = [...dataRoutes];\n      updateState({});\n    }\n  }\n  router = {\n    get basename() {\n      return basename;\n    },\n    get future() {\n      return future;\n    },\n    get state() {\n      return state;\n    },\n    get routes() {\n      return dataRoutes;\n    },\n    get window() {\n      return routerWindow;\n    },\n    initialize,\n    subscribe,\n    enableScrollRestoration,\n    navigate,\n    fetch,\n    revalidate,\n    // Passthrough to history-aware createHref used by useHref so we get proper\n    // hash-aware URLs in DOM paths\n    createHref: to => init.history.createHref(to),\n    encodeLocation: to => init.history.encodeLocation(to),\n    getFetcher,\n    deleteFetcher: deleteFetcherAndUpdateState,\n    dispose,\n    getBlocker,\n    deleteBlocker,\n    patchRoutes,\n    _internalFetchControllers: fetchControllers,\n    _internalActiveDeferreds: activeDeferreds,\n    // TODO: Remove setRoutes, it's temporary to avoid dealing with\n    // updating the tree while validating the update algorithm.\n    _internalSetRoutes\n  };\n  return router;\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\nconst UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\nfunction createStaticHandler(routes, opts) {\n  invariant(routes.length > 0, \"You must provide a non-empty routes array to createStaticHandler\");\n  let manifest = {};\n  let basename = (opts ? opts.basename : null) || \"/\";\n  let mapRouteProperties;\n  if (opts != null && opts.mapRouteProperties) {\n    mapRouteProperties = opts.mapRouteProperties;\n  } else if (opts != null && opts.detectErrorBoundary) {\n    // If they are still using the deprecated version, wrap it with the new API\n    let detectErrorBoundary = opts.detectErrorBoundary;\n    mapRouteProperties = route => ({\n      hasErrorBoundary: detectErrorBoundary(route)\n    });\n  } else {\n    mapRouteProperties = defaultMapRouteProperties;\n  }\n  // Config driven behavior flags\n  let future = _extends({\n    v7_relativeSplatPath: false,\n    v7_throwAbortReason: false\n  }, opts ? opts.future : null);\n  let dataRoutes = convertRoutesToDataRoutes(routes, mapRouteProperties, undefined, manifest);\n  /**\n   * The query() method is intended for document requests, in which we want to\n   * call an optional action and potentially multiple loaders for all nested\n   * routes.  It returns a StaticHandlerContext object, which is very similar\n   * to the router state (location, loaderData, actionData, errors, etc.) and\n   * also adds SSR-specific information such as the statusCode and headers\n   * from action/loaders Responses.\n   *\n   * It _should_ never throw and should report all errors through the\n   * returned context.errors object, properly associating errors to their error\n   * boundary.  Additionally, it tracks _deepestRenderedBoundaryId which can be\n   * used to emulate React error boundaries during SSr by performing a second\n   * pass only down to the boundaryId.\n   *\n   * The one exception where we do not return a StaticHandlerContext is when a\n   * redirect response is returned or thrown from any action/loader.  We\n   * propagate that out and return the raw Response so the HTTP server can\n   * return it directly.\n   *\n   * - `opts.requestContext` is an optional server context that will be passed\n   *   to actions/loaders in the `context` parameter\n   * - `opts.skipLoaderErrorBubbling` is an optional parameter that will prevent\n   *   the bubbling of errors which allows single-fetch-type implementations\n   *   where the client will handle the bubbling and we may need to return data\n   *   for the handling route\n   */\n  async function query(request, _temp3) {\n    let {\n      requestContext,\n      skipLoaderErrorBubbling,\n      dataStrategy\n    } = _temp3 === void 0 ? {} : _temp3;\n    let url = new URL(request.url);\n    let method = request.method;\n    let location = createLocation(\"\", createPath(url), null, \"default\");\n    let matches = matchRoutes(dataRoutes, location, basename);\n    // SSR supports HEAD requests while SPA doesn't\n    if (!isValidMethod(method) && method !== \"HEAD\") {\n      let error = getInternalRouterError(405, {\n        method\n      });\n      let {\n        matches: methodNotAllowedMatches,\n        route\n      } = getShortCircuitMatches(dataRoutes);\n      return {\n        basename,\n        location,\n        matches: methodNotAllowedMatches,\n        loaderData: {},\n        actionData: null,\n        errors: {\n          [route.id]: error\n        },\n        statusCode: error.status,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null\n      };\n    } else if (!matches) {\n      let error = getInternalRouterError(404, {\n        pathname: location.pathname\n      });\n      let {\n        matches: notFoundMatches,\n        route\n      } = getShortCircuitMatches(dataRoutes);\n      return {\n        basename,\n        location,\n        matches: notFoundMatches,\n        loaderData: {},\n        actionData: null,\n        errors: {\n          [route.id]: error\n        },\n        statusCode: error.status,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null\n      };\n    }\n    let result = await queryImpl(request, location, matches, requestContext, dataStrategy || null, skipLoaderErrorBubbling === true, null);\n    if (isResponse(result)) {\n      return result;\n    }\n    // When returning StaticHandlerContext, we patch back in the location here\n    // since we need it for React Context.  But this helps keep our submit and\n    // loadRouteData operating on a Request instead of a Location\n    return _extends({\n      location,\n      basename\n    }, result);\n  }\n  /**\n   * The queryRoute() method is intended for targeted route requests, either\n   * for fetch ?_data requests or resource route requests.  In this case, we\n   * are only ever calling a single action or loader, and we are returning the\n   * returned value directly.  In most cases, this will be a Response returned\n   * from the action/loader, but it may be a primitive or other value as well -\n   * and in such cases the calling context should handle that accordingly.\n   *\n   * We do respect the throw/return differentiation, so if an action/loader\n   * throws, then this method will throw the value.  This is important so we\n   * can do proper boundary identification in Remix where a thrown Response\n   * must go to the Catch Boundary but a returned Response is happy-path.\n   *\n   * One thing to note is that any Router-initiated Errors that make sense\n   * to associate with a status code will be thrown as an ErrorResponse\n   * instance which include the raw Error, such that the calling context can\n   * serialize the error as they see fit while including the proper response\n   * code.  Examples here are 404 and 405 errors that occur prior to reaching\n   * any user-defined loaders.\n   *\n   * - `opts.routeId` allows you to specify the specific route handler to call.\n   *   If not provided the handler will determine the proper route by matching\n   *   against `request.url`\n   * - `opts.requestContext` is an optional server context that will be passed\n   *    to actions/loaders in the `context` parameter\n   */\n  async function queryRoute(request, _temp4) {\n    let {\n      routeId,\n      requestContext,\n      dataStrategy\n    } = _temp4 === void 0 ? {} : _temp4;\n    let url = new URL(request.url);\n    let method = request.method;\n    let location = createLocation(\"\", createPath(url), null, \"default\");\n    let matches = matchRoutes(dataRoutes, location, basename);\n    // SSR supports HEAD requests while SPA doesn't\n    if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n      throw getInternalRouterError(405, {\n        method\n      });\n    } else if (!matches) {\n      throw getInternalRouterError(404, {\n        pathname: location.pathname\n      });\n    }\n    let match = routeId ? matches.find(m => m.route.id === routeId) : getTargetMatch(matches, location);\n    if (routeId && !match) {\n      throw getInternalRouterError(403, {\n        pathname: location.pathname,\n        routeId\n      });\n    } else if (!match) {\n      // This should never hit I don't think?\n      throw getInternalRouterError(404, {\n        pathname: location.pathname\n      });\n    }\n    let result = await queryImpl(request, location, matches, requestContext, dataStrategy || null, false, match);\n    if (isResponse(result)) {\n      return result;\n    }\n    let error = result.errors ? Object.values(result.errors)[0] : undefined;\n    if (error !== undefined) {\n      // If we got back result.errors, that means the loader/action threw\n      // _something_ that wasn't a Response, but it's not guaranteed/required\n      // to be an `instanceof Error` either, so we have to use throw here to\n      // preserve the \"error\" state outside of queryImpl.\n      throw error;\n    }\n    // Pick off the right state value to return\n    if (result.actionData) {\n      return Object.values(result.actionData)[0];\n    }\n    if (result.loaderData) {\n      var _result$activeDeferre;\n      let data = Object.values(result.loaderData)[0];\n      if ((_result$activeDeferre = result.activeDeferreds) != null && _result$activeDeferre[match.route.id]) {\n        data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n      }\n      return data;\n    }\n    return undefined;\n  }\n  async function queryImpl(request, location, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch) {\n    invariant(request.signal, \"query()/queryRoute() requests must contain an AbortController signal\");\n    try {\n      if (isMutationMethod(request.method.toLowerCase())) {\n        let result = await submit(request, matches, routeMatch || getTargetMatch(matches, location), requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch != null);\n        return result;\n      }\n      let result = await loadRouteData(request, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch);\n      return isResponse(result) ? result : _extends({}, result, {\n        actionData: null,\n        actionHeaders: {}\n      });\n    } catch (e) {\n      // If the user threw/returned a Response in callLoaderOrAction for a\n      // `queryRoute` call, we throw the `DataStrategyResult` to bail out early\n      // and then return or throw the raw Response here accordingly\n      if (isDataStrategyResult(e) && isResponse(e.result)) {\n        if (e.type === ResultType.error) {\n          throw e.result;\n        }\n        return e.result;\n      }\n      // Redirects are always returned since they don't propagate to catch\n      // boundaries\n      if (isRedirectResponse(e)) {\n        return e;\n      }\n      throw e;\n    }\n  }\n  async function submit(request, matches, actionMatch, requestContext, dataStrategy, skipLoaderErrorBubbling, isRouteRequest) {\n    let result;\n    if (!actionMatch.route.action && !actionMatch.route.lazy) {\n      let error = getInternalRouterError(405, {\n        method: request.method,\n        pathname: new URL(request.url).pathname,\n        routeId: actionMatch.route.id\n      });\n      if (isRouteRequest) {\n        throw error;\n      }\n      result = {\n        type: ResultType.error,\n        error\n      };\n    } else {\n      let results = await callDataStrategy(\"action\", request, [actionMatch], matches, isRouteRequest, requestContext, dataStrategy);\n      result = results[actionMatch.route.id];\n      if (request.signal.aborted) {\n        throwStaticHandlerAbortedError(request, isRouteRequest, future);\n      }\n    }\n    if (isRedirectResult(result)) {\n      // Uhhhh - this should never happen, we should always throw these from\n      // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n      // can get back on the \"throw all redirect responses\" train here should\n      // this ever happen :/\n      throw new Response(null, {\n        status: result.response.status,\n        headers: {\n          Location: result.response.headers.get(\"Location\")\n        }\n      });\n    }\n    if (isDeferredResult(result)) {\n      let error = getInternalRouterError(400, {\n        type: \"defer-action\"\n      });\n      if (isRouteRequest) {\n        throw error;\n      }\n      result = {\n        type: ResultType.error,\n        error\n      };\n    }\n    if (isRouteRequest) {\n      // Note: This should only be non-Response values if we get here, since\n      // isRouteRequest should throw any Response received in callLoaderOrAction\n      if (isErrorResult(result)) {\n        throw result.error;\n      }\n      return {\n        matches: [actionMatch],\n        loaderData: {},\n        actionData: {\n          [actionMatch.route.id]: result.data\n        },\n        errors: null,\n        // Note: statusCode + headers are unused here since queryRoute will\n        // return the raw Response or value\n        statusCode: 200,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null\n      };\n    }\n    // Create a GET request for the loaders\n    let loaderRequest = new Request(request.url, {\n      headers: request.headers,\n      redirect: request.redirect,\n      signal: request.signal\n    });\n    if (isErrorResult(result)) {\n      // Store off the pending error - we use it to determine which loaders\n      // to call and will commit it when we complete the navigation\n      let boundaryMatch = skipLoaderErrorBubbling ? actionMatch : findNearestBoundary(matches, actionMatch.route.id);\n      let context = await loadRouteData(loaderRequest, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, null, [boundaryMatch.route.id, result]);\n      // action status codes take precedence over loader status codes\n      return _extends({}, context, {\n        statusCode: isRouteErrorResponse(result.error) ? result.error.status : result.statusCode != null ? result.statusCode : 500,\n        actionData: null,\n        actionHeaders: _extends({}, result.headers ? {\n          [actionMatch.route.id]: result.headers\n        } : {})\n      });\n    }\n    let context = await loadRouteData(loaderRequest, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, null);\n    return _extends({}, context, {\n      actionData: {\n        [actionMatch.route.id]: result.data\n      }\n    }, result.statusCode ? {\n      statusCode: result.statusCode\n    } : {}, {\n      actionHeaders: result.headers ? {\n        [actionMatch.route.id]: result.headers\n      } : {}\n    });\n  }\n  async function loadRouteData(request, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch, pendingActionResult) {\n    let isRouteRequest = routeMatch != null;\n    // Short circuit if we have no loaders to run (queryRoute())\n    if (isRouteRequest && !(routeMatch != null && routeMatch.route.loader) && !(routeMatch != null && routeMatch.route.lazy)) {\n      throw getInternalRouterError(400, {\n        method: request.method,\n        pathname: new URL(request.url).pathname,\n        routeId: routeMatch == null ? void 0 : routeMatch.route.id\n      });\n    }\n    let requestMatches = routeMatch ? [routeMatch] : pendingActionResult && isErrorResult(pendingActionResult[1]) ? getLoaderMatchesUntilBoundary(matches, pendingActionResult[0]) : matches;\n    let matchesToLoad = requestMatches.filter(m => m.route.loader || m.route.lazy);\n    // Short circuit if we have no loaders to run (query())\n    if (matchesToLoad.length === 0) {\n      return {\n        matches,\n        // Add a null for all matched routes for proper revalidation on the client\n        loaderData: matches.reduce((acc, m) => Object.assign(acc, {\n          [m.route.id]: null\n        }), {}),\n        errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? {\n          [pendingActionResult[0]]: pendingActionResult[1].error\n        } : null,\n        statusCode: 200,\n        loaderHeaders: {},\n        activeDeferreds: null\n      };\n    }\n    let results = await callDataStrategy(\"loader\", request, matchesToLoad, matches, isRouteRequest, requestContext, dataStrategy);\n    if (request.signal.aborted) {\n      throwStaticHandlerAbortedError(request, isRouteRequest, future);\n    }\n    // Process and commit output from loaders\n    let activeDeferreds = new Map();\n    let context = processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, skipLoaderErrorBubbling);\n    // Add a null for any non-loader matches for proper revalidation on the client\n    let executedLoaders = new Set(matchesToLoad.map(match => match.route.id));\n    matches.forEach(match => {\n      if (!executedLoaders.has(match.route.id)) {\n        context.loaderData[match.route.id] = null;\n      }\n    });\n    return _extends({}, context, {\n      matches,\n      activeDeferreds: activeDeferreds.size > 0 ? Object.fromEntries(activeDeferreds.entries()) : null\n    });\n  }\n  // Utility wrapper for calling dataStrategy server-side without having to\n  // pass around the manifest, mapRouteProperties, etc.\n  async function callDataStrategy(type, request, matchesToLoad, matches, isRouteRequest, requestContext, dataStrategy) {\n    let results = await callDataStrategyImpl(dataStrategy || defaultDataStrategy, type, null, request, matchesToLoad, matches, null, manifest, mapRouteProperties, requestContext);\n    let dataResults = {};\n    await Promise.all(matches.map(async match => {\n      if (!(match.route.id in results)) {\n        return;\n      }\n      let result = results[match.route.id];\n      if (isRedirectDataStrategyResultResult(result)) {\n        let response = result.result;\n        // Throw redirects and let the server handle them with an HTTP redirect\n        throw normalizeRelativeRoutingRedirectResponse(response, request, match.route.id, matches, basename, future.v7_relativeSplatPath);\n      }\n      if (isResponse(result.result) && isRouteRequest) {\n        // For SSR single-route requests, we want to hand Responses back\n        // directly without unwrapping\n        throw result;\n      }\n      dataResults[match.route.id] = await convertDataStrategyResultToDataResult(result);\n    }));\n    return dataResults;\n  }\n  return {\n    dataRoutes,\n    query,\n    queryRoute\n  };\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nfunction getStaticContextFromError(routes, context, error) {\n  let newContext = _extends({}, context, {\n    statusCode: isRouteErrorResponse(error) ? error.status : 500,\n    errors: {\n      [context._deepestRenderedBoundaryId || routes[0].id]: error\n    }\n  });\n  return newContext;\n}\nfunction throwStaticHandlerAbortedError(request, isRouteRequest, future) {\n  if (future.v7_throwAbortReason && request.signal.reason !== undefined) {\n    throw request.signal.reason;\n  }\n  let method = isRouteRequest ? \"queryRoute\" : \"query\";\n  throw new Error(method + \"() call aborted: \" + request.method + \" \" + request.url);\n}\nfunction isSubmissionNavigation(opts) {\n  return opts != null && (\"formData\" in opts && opts.formData != null || \"body\" in opts && opts.body !== undefined);\n}\nfunction normalizeTo(location, matches, basename, prependBasename, to, v7_relativeSplatPath, fromRouteId, relative) {\n  let contextualMatches;\n  let activeRouteMatch;\n  if (fromRouteId) {\n    // Grab matches up to the calling route so our route-relative logic is\n    // relative to the correct source route\n    contextualMatches = [];\n    for (let match of matches) {\n      contextualMatches.push(match);\n      if (match.route.id === fromRouteId) {\n        activeRouteMatch = match;\n        break;\n      }\n    }\n  } else {\n    contextualMatches = matches;\n    activeRouteMatch = matches[matches.length - 1];\n  }\n  // Resolve the relative path\n  let path = resolveTo(to ? to : \".\", getResolveToMatches(contextualMatches, v7_relativeSplatPath), stripBasename(location.pathname, basename) || location.pathname, relative === \"path\");\n  // When `to` is not specified we inherit search/hash from the current\n  // location, unlike when to=\".\" and we just inherit the path.\n  // See https://github.com/remix-run/remix/issues/927\n  if (to == null) {\n    path.search = location.search;\n    path.hash = location.hash;\n  }\n  // Account for `?index` params when routing to the current location\n  if ((to == null || to === \"\" || to === \".\") && activeRouteMatch) {\n    let nakedIndex = hasNakedIndexQuery(path.search);\n    if (activeRouteMatch.route.index && !nakedIndex) {\n      // Add one when we're targeting an index route\n      path.search = path.search ? path.search.replace(/^\\?/, \"?index&\") : \"?index\";\n    } else if (!activeRouteMatch.route.index && nakedIndex) {\n      // Remove existing ones when we're not\n      let params = new URLSearchParams(path.search);\n      let indexValues = params.getAll(\"index\");\n      params.delete(\"index\");\n      indexValues.filter(v => v).forEach(v => params.append(\"index\", v));\n      let qs = params.toString();\n      path.search = qs ? \"?\" + qs : \"\";\n    }\n  }\n  // If we're operating within a basename, prepend it to the pathname.  If\n  // this is a root navigation, then just use the raw basename which allows\n  // the basename to have full control over the presence of a trailing slash\n  // on root actions\n  if (prependBasename && basename !== \"/\") {\n    path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n  }\n  return createPath(path);\n}\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(normalizeFormMethod, isFetcher, path, opts) {\n  // Return location verbatim on non-submission navigations\n  if (!opts || !isSubmissionNavigation(opts)) {\n    return {\n      path\n    };\n  }\n  if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n    return {\n      path,\n      error: getInternalRouterError(405, {\n        method: opts.formMethod\n      })\n    };\n  }\n  let getInvalidBodyError = () => ({\n    path,\n    error: getInternalRouterError(400, {\n      type: \"invalid-body\"\n    })\n  });\n  // Create a Submission on non-GET navigations\n  let rawFormMethod = opts.formMethod || \"get\";\n  let formMethod = normalizeFormMethod ? rawFormMethod.toUpperCase() : rawFormMethod.toLowerCase();\n  let formAction = stripHashFromPath(path);\n  if (opts.body !== undefined) {\n    if (opts.formEncType === \"text/plain\") {\n      // text only support POST/PUT/PATCH/DELETE submissions\n      if (!isMutationMethod(formMethod)) {\n        return getInvalidBodyError();\n      }\n      let text = typeof opts.body === \"string\" ? opts.body : opts.body instanceof FormData || opts.body instanceof URLSearchParams ?\n      // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n      Array.from(opts.body.entries()).reduce((acc, _ref3) => {\n        let [name, value] = _ref3;\n        return \"\" + acc + name + \"=\" + value + \"\\n\";\n      }, \"\") : String(opts.body);\n      return {\n        path,\n        submission: {\n          formMethod,\n          formAction,\n          formEncType: opts.formEncType,\n          formData: undefined,\n          json: undefined,\n          text\n        }\n      };\n    } else if (opts.formEncType === \"application/json\") {\n      // json only supports POST/PUT/PATCH/DELETE submissions\n      if (!isMutationMethod(formMethod)) {\n        return getInvalidBodyError();\n      }\n      try {\n        let json = typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n        return {\n          path,\n          submission: {\n            formMethod,\n            formAction,\n            formEncType: opts.formEncType,\n            formData: undefined,\n            json,\n            text: undefined\n          }\n        };\n      } catch (e) {\n        return getInvalidBodyError();\n      }\n    }\n  }\n  invariant(typeof FormData === \"function\", \"FormData is not available in this environment\");\n  let searchParams;\n  let formData;\n  if (opts.formData) {\n    searchParams = convertFormDataToSearchParams(opts.formData);\n    formData = opts.formData;\n  } else if (opts.body instanceof FormData) {\n    searchParams = convertFormDataToSearchParams(opts.body);\n    formData = opts.body;\n  } else if (opts.body instanceof URLSearchParams) {\n    searchParams = opts.body;\n    formData = convertSearchParamsToFormData(searchParams);\n  } else if (opts.body == null) {\n    searchParams = new URLSearchParams();\n    formData = new FormData();\n  } else {\n    try {\n      searchParams = new URLSearchParams(opts.body);\n      formData = convertSearchParamsToFormData(searchParams);\n    } catch (e) {\n      return getInvalidBodyError();\n    }\n  }\n  let submission = {\n    formMethod,\n    formAction,\n    formEncType: opts && opts.formEncType || \"application/x-www-form-urlencoded\",\n    formData,\n    json: undefined,\n    text: undefined\n  };\n  if (isMutationMethod(submission.formMethod)) {\n    return {\n      path,\n      submission\n    };\n  }\n  // Flatten submission onto URLSearchParams for GET submissions\n  let parsedPath = parsePath(path);\n  // On GET navigation submissions we can drop the ?index param from the\n  // resulting location since all loaders will run.  But fetcher GET submissions\n  // only run a single loader so we need to preserve any incoming ?index params\n  if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n    searchParams.append(\"index\", \"\");\n  }\n  parsedPath.search = \"?\" + searchParams;\n  return {\n    path: createPath(parsedPath),\n    submission\n  };\n}\n// Filter out all routes at/below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(matches, boundaryId, includeBoundary) {\n  if (includeBoundary === void 0) {\n    includeBoundary = false;\n  }\n  let index = matches.findIndex(m => m.route.id === boundaryId);\n  if (index >= 0) {\n    return matches.slice(0, includeBoundary ? index + 1 : index);\n  }\n  return matches;\n}\nfunction getMatchesToLoad(history, state, matches, submission, location, initialHydration, skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult) {\n  let actionResult = pendingActionResult ? isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : pendingActionResult[1].data : undefined;\n  let currentUrl = history.createURL(state.location);\n  let nextUrl = history.createURL(location);\n  // Pick navigation matches that are net-new or qualify for revalidation\n  let boundaryMatches = matches;\n  if (initialHydration && state.errors) {\n    // On initial hydration, only consider matches up to _and including_ the boundary.\n    // This is inclusive to handle cases where a server loader ran successfully,\n    // a child server loader bubbled up to this route, but this route has\n    // `clientLoader.hydrate` so we want to still run the `clientLoader` so that\n    // we have a complete version of `loaderData`\n    boundaryMatches = getLoaderMatchesUntilBoundary(matches, Object.keys(state.errors)[0], true);\n  } else if (pendingActionResult && isErrorResult(pendingActionResult[1])) {\n    // If an action threw an error, we call loaders up to, but not including the\n    // boundary\n    boundaryMatches = getLoaderMatchesUntilBoundary(matches, pendingActionResult[0]);\n  }\n  // Don't revalidate loaders by default after action 4xx/5xx responses\n  // when the flag is enabled.  They can still opt-into revalidation via\n  // `shouldRevalidate` via `actionResult`\n  let actionStatus = pendingActionResult ? pendingActionResult[1].statusCode : undefined;\n  let shouldSkipRevalidation = skipActionErrorRevalidation && actionStatus && actionStatus >= 400;\n  let navigationMatches = boundaryMatches.filter((match, index) => {\n    let {\n      route\n    } = match;\n    if (route.lazy) {\n      // We haven't loaded this route yet so we don't know if it's got a loader!\n      return true;\n    }\n    if (route.loader == null) {\n      return false;\n    }\n    if (initialHydration) {\n      return shouldLoadRouteOnHydration(route, state.loaderData, state.errors);\n    }\n    // Always call the loader on new route instances and pending defer cancellations\n    if (isNewLoader(state.loaderData, state.matches[index], match) || cancelledDeferredRoutes.some(id => id === match.route.id)) {\n      return true;\n    }\n    // This is the default implementation for when we revalidate.  If the route\n    // provides it's own implementation, then we give them full control but\n    // provide this value so they can leverage it if needed after they check\n    // their own specific use cases\n    let currentRouteMatch = state.matches[index];\n    let nextRouteMatch = match;\n    return shouldRevalidateLoader(match, _extends({\n      currentUrl,\n      currentParams: currentRouteMatch.params,\n      nextUrl,\n      nextParams: nextRouteMatch.params\n    }, submission, {\n      actionResult,\n      actionStatus,\n      defaultShouldRevalidate: shouldSkipRevalidation ? false :\n      // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n      isRevalidationRequired || currentUrl.pathname + currentUrl.search === nextUrl.pathname + nextUrl.search ||\n      // Search params affect all loaders\n      currentUrl.search !== nextUrl.search || isNewRouteInstance(currentRouteMatch, nextRouteMatch)\n    }));\n  });\n  // Pick fetcher.loads that need to be revalidated\n  let revalidatingFetchers = [];\n  fetchLoadMatches.forEach((f, key) => {\n    // Don't revalidate:\n    //  - on initial hydration (shouldn't be any fetchers then anyway)\n    //  - if fetcher won't be present in the subsequent render\n    //    - no longer matches the URL (v7_fetcherPersist=false)\n    //    - was unmounted but persisted due to v7_fetcherPersist=true\n    if (initialHydration || !matches.some(m => m.route.id === f.routeId) || deletedFetchers.has(key)) {\n      return;\n    }\n    let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n    // If the fetcher path no longer matches, push it in with null matches so\n    // we can trigger a 404 in callLoadersAndMaybeResolveData.  Note this is\n    // currently only a use-case for Remix HMR where the route tree can change\n    // at runtime and remove a route previously loaded via a fetcher\n    if (!fetcherMatches) {\n      revalidatingFetchers.push({\n        key,\n        routeId: f.routeId,\n        path: f.path,\n        matches: null,\n        match: null,\n        controller: null\n      });\n      return;\n    }\n    // Revalidating fetchers are decoupled from the route matches since they\n    // load from a static href.  They revalidate based on explicit revalidation\n    // (submission, useRevalidator, or X-Remix-Revalidate)\n    let fetcher = state.fetchers.get(key);\n    let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n    let shouldRevalidate = false;\n    if (fetchRedirectIds.has(key)) {\n      // Never trigger a revalidation of an actively redirecting fetcher\n      shouldRevalidate = false;\n    } else if (cancelledFetcherLoads.has(key)) {\n      // Always mark for revalidation if the fetcher was cancelled\n      cancelledFetcherLoads.delete(key);\n      shouldRevalidate = true;\n    } else if (fetcher && fetcher.state !== \"idle\" && fetcher.data === undefined) {\n      // If the fetcher hasn't ever completed loading yet, then this isn't a\n      // revalidation, it would just be a brand new load if an explicit\n      // revalidation is required\n      shouldRevalidate = isRevalidationRequired;\n    } else {\n      // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n      // to explicit revalidations only\n      shouldRevalidate = shouldRevalidateLoader(fetcherMatch, _extends({\n        currentUrl,\n        currentParams: state.matches[state.matches.length - 1].params,\n        nextUrl,\n        nextParams: matches[matches.length - 1].params\n      }, submission, {\n        actionResult,\n        actionStatus,\n        defaultShouldRevalidate: shouldSkipRevalidation ? false : isRevalidationRequired\n      }));\n    }\n    if (shouldRevalidate) {\n      revalidatingFetchers.push({\n        key,\n        routeId: f.routeId,\n        path: f.path,\n        matches: fetcherMatches,\n        match: fetcherMatch,\n        controller: new AbortController()\n      });\n    }\n  });\n  return [navigationMatches, revalidatingFetchers];\n}\nfunction shouldLoadRouteOnHydration(route, loaderData, errors) {\n  // We dunno if we have a loader - gotta find out!\n  if (route.lazy) {\n    return true;\n  }\n  // No loader, nothing to initialize\n  if (!route.loader) {\n    return false;\n  }\n  let hasData = loaderData != null && loaderData[route.id] !== undefined;\n  let hasError = errors != null && errors[route.id] !== undefined;\n  // Don't run if we error'd during SSR\n  if (!hasData && hasError) {\n    return false;\n  }\n  // Explicitly opting-in to running on hydration\n  if (typeof route.loader === \"function\" && route.loader.hydrate === true) {\n    return true;\n  }\n  // Otherwise, run if we're not yet initialized with anything\n  return !hasData && !hasError;\n}\nfunction isNewLoader(currentLoaderData, currentMatch, match) {\n  let isNew =\n  // [a] -> [a, b]\n  !currentMatch ||\n  // [a, b] -> [a, c]\n  match.route.id !== currentMatch.route.id;\n  // Handle the case that we don't have data for a re-used route, potentially\n  // from a prior error or from a cancelled pending deferred\n  let isMissingData = currentLoaderData[match.route.id] === undefined;\n  // Always load if this is a net-new route or we don't yet have data\n  return isNew || isMissingData;\n}\nfunction isNewRouteInstance(currentMatch, match) {\n  let currentPath = currentMatch.route.path;\n  return (\n    // param change for this match, /users/123 -> /users/456\n    currentMatch.pathname !== match.pathname ||\n    // splat param changed, which is not present in match.path\n    // e.g. /files/images/avatar.jpg -> files/finances.xls\n    currentPath != null && currentPath.endsWith(\"*\") && currentMatch.params[\"*\"] !== match.params[\"*\"]\n  );\n}\nfunction shouldRevalidateLoader(loaderMatch, arg) {\n  if (loaderMatch.route.shouldRevalidate) {\n    let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n    if (typeof routeChoice === \"boolean\") {\n      return routeChoice;\n    }\n  }\n  return arg.defaultShouldRevalidate;\n}\nfunction patchRoutesImpl(routeId, children, routesToUse, manifest, mapRouteProperties) {\n  var _childrenToPatch;\n  let childrenToPatch;\n  if (routeId) {\n    let route = manifest[routeId];\n    invariant(route, \"No route found to patch children into: routeId = \" + routeId);\n    if (!route.children) {\n      route.children = [];\n    }\n    childrenToPatch = route.children;\n  } else {\n    childrenToPatch = routesToUse;\n  }\n  // Don't patch in routes we already know about so that `patch` is idempotent\n  // to simplify user-land code. This is useful because we re-call the\n  // `patchRoutesOnNavigation` function for matched routes with params.\n  let uniqueChildren = children.filter(newRoute => !childrenToPatch.some(existingRoute => isSameRoute(newRoute, existingRoute)));\n  let newRoutes = convertRoutesToDataRoutes(uniqueChildren, mapRouteProperties, [routeId || \"_\", \"patch\", String(((_childrenToPatch = childrenToPatch) == null ? void 0 : _childrenToPatch.length) || \"0\")], manifest);\n  childrenToPatch.push(...newRoutes);\n}\nfunction isSameRoute(newRoute, existingRoute) {\n  // Most optimal check is by id\n  if (\"id\" in newRoute && \"id\" in existingRoute && newRoute.id === existingRoute.id) {\n    return true;\n  }\n  // Second is by pathing differences\n  if (!(newRoute.index === existingRoute.index && newRoute.path === existingRoute.path && newRoute.caseSensitive === existingRoute.caseSensitive)) {\n    return false;\n  }\n  // Pathless layout routes are trickier since we need to check children.\n  // If they have no children then they're the same as far as we can tell\n  if ((!newRoute.children || newRoute.children.length === 0) && (!existingRoute.children || existingRoute.children.length === 0)) {\n    return true;\n  }\n  // Otherwise, we look to see if every child in the new route is already\n  // represented in the existing route's children\n  return newRoute.children.every((aChild, i) => {\n    var _existingRoute$childr;\n    return (_existingRoute$childr = existingRoute.children) == null ? void 0 : _existingRoute$childr.some(bChild => isSameRoute(aChild, bChild));\n  });\n}\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(route, mapRouteProperties, manifest) {\n  if (!route.lazy) {\n    return;\n  }\n  let lazyRoute = await route.lazy();\n  // If the lazy route function was executed and removed by another parallel\n  // call then we can return - first lazy() to finish wins because the return\n  // value of lazy is expected to be static\n  if (!route.lazy) {\n    return;\n  }\n  let routeToUpdate = manifest[route.id];\n  invariant(routeToUpdate, \"No route found in manifest\");\n  // Update the route in place.  This should be safe because there's no way\n  // we could yet be sitting on this route as we can't get there without\n  // resolving lazy() first.\n  //\n  // This is different than the HMR \"update\" use-case where we may actively be\n  // on the route being updated.  The main concern boils down to \"does this\n  // mutation affect any ongoing navigations or any current state.matches\n  // values?\".  If not, it should be safe to update in place.\n  let routeUpdates = {};\n  for (let lazyRouteProperty in lazyRoute) {\n    let staticRouteValue = routeToUpdate[lazyRouteProperty];\n    let isPropertyStaticallyDefined = staticRouteValue !== undefined &&\n    // This property isn't static since it should always be updated based\n    // on the route updates\n    lazyRouteProperty !== \"hasErrorBoundary\";\n    warning(!isPropertyStaticallyDefined, \"Route \\\"\" + routeToUpdate.id + \"\\\" has a static property \\\"\" + lazyRouteProperty + \"\\\" \" + \"defined but its lazy function is also returning a value for this property. \" + (\"The lazy route property \\\"\" + lazyRouteProperty + \"\\\" will be ignored.\"));\n    if (!isPropertyStaticallyDefined && !immutableRouteKeys.has(lazyRouteProperty)) {\n      routeUpdates[lazyRouteProperty] = lazyRoute[lazyRouteProperty];\n    }\n  }\n  // Mutate the route with the provided updates.  Do this first so we pass\n  // the updated version to mapRouteProperties\n  Object.assign(routeToUpdate, routeUpdates);\n  // Mutate the `hasErrorBoundary` property on the route based on the route\n  // updates and remove the `lazy` function so we don't resolve the lazy\n  // route again.\n  Object.assign(routeToUpdate, _extends({}, mapRouteProperties(routeToUpdate), {\n    lazy: undefined\n  }));\n}\n// Default implementation of `dataStrategy` which fetches all loaders in parallel\nasync function defaultDataStrategy(_ref4) {\n  let {\n    matches\n  } = _ref4;\n  let matchesToLoad = matches.filter(m => m.shouldLoad);\n  let results = await Promise.all(matchesToLoad.map(m => m.resolve()));\n  return results.reduce((acc, result, i) => Object.assign(acc, {\n    [matchesToLoad[i].route.id]: result\n  }), {});\n}\nasync function callDataStrategyImpl(dataStrategyImpl, type, state, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties, requestContext) {\n  let loadRouteDefinitionsPromises = matches.map(m => m.route.lazy ? loadLazyRouteModule(m.route, mapRouteProperties, manifest) : undefined);\n  let dsMatches = matches.map((match, i) => {\n    let loadRoutePromise = loadRouteDefinitionsPromises[i];\n    let shouldLoad = matchesToLoad.some(m => m.route.id === match.route.id);\n    // `resolve` encapsulates route.lazy(), executing the loader/action,\n    // and mapping return values/thrown errors to a `DataStrategyResult`.  Users\n    // can pass a callback to take fine-grained control over the execution\n    // of the loader/action\n    let resolve = async handlerOverride => {\n      if (handlerOverride && request.method === \"GET\" && (match.route.lazy || match.route.loader)) {\n        shouldLoad = true;\n      }\n      return shouldLoad ? callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, requestContext) : Promise.resolve({\n        type: ResultType.data,\n        result: undefined\n      });\n    };\n    return _extends({}, match, {\n      shouldLoad,\n      resolve\n    });\n  });\n  // Send all matches here to allow for a middleware-type implementation.\n  // handler will be a no-op for unneeded routes and we filter those results\n  // back out below.\n  let results = await dataStrategyImpl({\n    matches: dsMatches,\n    request,\n    params: matches[0].params,\n    fetcherKey,\n    context: requestContext\n  });\n  // Wait for all routes to load here but 'swallow the error since we want\n  // it to bubble up from the `await loadRoutePromise` in `callLoaderOrAction` -\n  // called from `match.resolve()`\n  try {\n    await Promise.all(loadRouteDefinitionsPromises);\n  } catch (e) {\n    // No-op\n  }\n  return results;\n}\n// Default logic for calling a loader/action is the user has no specified a dataStrategy\nasync function callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, staticContext) {\n  let result;\n  let onReject;\n  let runHandler = handler => {\n    // Setup a promise we can race against so that abort signals short circuit\n    let reject;\n    // This will never resolve so safe to type it as Promise<DataStrategyResult> to\n    // satisfy the function return value\n    let abortPromise = new Promise((_, r) => reject = r);\n    onReject = () => reject();\n    request.signal.addEventListener(\"abort\", onReject);\n    let actualHandler = ctx => {\n      if (typeof handler !== \"function\") {\n        return Promise.reject(new Error(\"You cannot call the handler for a route which defines a boolean \" + (\"\\\"\" + type + \"\\\" [routeId: \" + match.route.id + \"]\")));\n      }\n      return handler({\n        request,\n        params: match.params,\n        context: staticContext\n      }, ...(ctx !== undefined ? [ctx] : []));\n    };\n    let handlerPromise = (async () => {\n      try {\n        let val = await (handlerOverride ? handlerOverride(ctx => actualHandler(ctx)) : actualHandler());\n        return {\n          type: \"data\",\n          result: val\n        };\n      } catch (e) {\n        return {\n          type: \"error\",\n          result: e\n        };\n      }\n    })();\n    return Promise.race([handlerPromise, abortPromise]);\n  };\n  try {\n    let handler = match.route[type];\n    // If we have a route.lazy promise, await that first\n    if (loadRoutePromise) {\n      if (handler) {\n        // Run statically defined handler in parallel with lazy()\n        let handlerError;\n        let [value] = await Promise.all([\n        // If the handler throws, don't let it immediately bubble out,\n        // since we need to let the lazy() execution finish so we know if this\n        // route has a boundary that can handle the error\n        runHandler(handler).catch(e => {\n          handlerError = e;\n        }), loadRoutePromise]);\n        if (handlerError !== undefined) {\n          throw handlerError;\n        }\n        result = value;\n      } else {\n        // Load lazy route module, then run any returned handler\n        await loadRoutePromise;\n        handler = match.route[type];\n        if (handler) {\n          // Handler still runs even if we got interrupted to maintain consistency\n          // with un-abortable behavior of handler execution on non-lazy or\n          // previously-lazy-loaded routes\n          result = await runHandler(handler);\n        } else if (type === \"action\") {\n          let url = new URL(request.url);\n          let pathname = url.pathname + url.search;\n          throw getInternalRouterError(405, {\n            method: request.method,\n            pathname,\n            routeId: match.route.id\n          });\n        } else {\n          // lazy() route has no loader to run.  Short circuit here so we don't\n          // hit the invariant below that errors on returning undefined.\n          return {\n            type: ResultType.data,\n            result: undefined\n          };\n        }\n      }\n    } else if (!handler) {\n      let url = new URL(request.url);\n      let pathname = url.pathname + url.search;\n      throw getInternalRouterError(404, {\n        pathname\n      });\n    } else {\n      result = await runHandler(handler);\n    }\n    invariant(result.result !== undefined, \"You defined \" + (type === \"action\" ? \"an action\" : \"a loader\") + \" for route \" + (\"\\\"\" + match.route.id + \"\\\" but didn't return anything from your `\" + type + \"` \") + \"function. Please return a value or `null`.\");\n  } catch (e) {\n    // We should already be catching and converting normal handler executions to\n    // DataStrategyResults and returning them, so anything that throws here is an\n    // unexpected error we still need to wrap\n    return {\n      type: ResultType.error,\n      result: e\n    };\n  } finally {\n    if (onReject) {\n      request.signal.removeEventListener(\"abort\", onReject);\n    }\n  }\n  return result;\n}\nasync function convertDataStrategyResultToDataResult(dataStrategyResult) {\n  let {\n    result,\n    type\n  } = dataStrategyResult;\n  if (isResponse(result)) {\n    let data;\n    try {\n      let contentType = result.headers.get(\"Content-Type\");\n      // Check between word boundaries instead of startsWith() due to the last\n      // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n      if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n        if (result.body == null) {\n          data = null;\n        } else {\n          data = await result.json();\n        }\n      } else {\n        data = await result.text();\n      }\n    } catch (e) {\n      return {\n        type: ResultType.error,\n        error: e\n      };\n    }\n    if (type === ResultType.error) {\n      return {\n        type: ResultType.error,\n        error: new ErrorResponseImpl(result.status, result.statusText, data),\n        statusCode: result.status,\n        headers: result.headers\n      };\n    }\n    return {\n      type: ResultType.data,\n      data,\n      statusCode: result.status,\n      headers: result.headers\n    };\n  }\n  if (type === ResultType.error) {\n    if (isDataWithResponseInit(result)) {\n      var _result$init3, _result$init4;\n      if (result.data instanceof Error) {\n        var _result$init, _result$init2;\n        return {\n          type: ResultType.error,\n          error: result.data,\n          statusCode: (_result$init = result.init) == null ? void 0 : _result$init.status,\n          headers: (_result$init2 = result.init) != null && _result$init2.headers ? new Headers(result.init.headers) : undefined\n        };\n      }\n      // Convert thrown data() to ErrorResponse instances\n      return {\n        type: ResultType.error,\n        error: new ErrorResponseImpl(((_result$init3 = result.init) == null ? void 0 : _result$init3.status) || 500, undefined, result.data),\n        statusCode: isRouteErrorResponse(result) ? result.status : undefined,\n        headers: (_result$init4 = result.init) != null && _result$init4.headers ? new Headers(result.init.headers) : undefined\n      };\n    }\n    return {\n      type: ResultType.error,\n      error: result,\n      statusCode: isRouteErrorResponse(result) ? result.status : undefined\n    };\n  }\n  if (isDeferredData(result)) {\n    var _result$init5, _result$init6;\n    return {\n      type: ResultType.deferred,\n      deferredData: result,\n      statusCode: (_result$init5 = result.init) == null ? void 0 : _result$init5.status,\n      headers: ((_result$init6 = result.init) == null ? void 0 : _result$init6.headers) && new Headers(result.init.headers)\n    };\n  }\n  if (isDataWithResponseInit(result)) {\n    var _result$init7, _result$init8;\n    return {\n      type: ResultType.data,\n      data: result.data,\n      statusCode: (_result$init7 = result.init) == null ? void 0 : _result$init7.status,\n      headers: (_result$init8 = result.init) != null && _result$init8.headers ? new Headers(result.init.headers) : undefined\n    };\n  }\n  return {\n    type: ResultType.data,\n    data: result\n  };\n}\n// Support relative routing in internal redirects\nfunction normalizeRelativeRoutingRedirectResponse(response, request, routeId, matches, basename, v7_relativeSplatPath) {\n  let location = response.headers.get(\"Location\");\n  invariant(location, \"Redirects returned/thrown from loaders/actions must have a Location header\");\n  if (!ABSOLUTE_URL_REGEX.test(location)) {\n    let trimmedMatches = matches.slice(0, matches.findIndex(m => m.route.id === routeId) + 1);\n    location = normalizeTo(new URL(request.url), trimmedMatches, basename, true, location, v7_relativeSplatPath);\n    response.headers.set(\"Location\", location);\n  }\n  return response;\n}\nfunction normalizeRedirectLocation(location, currentUrl, basename, historyInstance) {\n  // Match Chrome's behavior:\n  // https://github.com/chromium/chromium/blob/216dbeb61db0c667e62082e5f5400a32d6983df3/content/public/common/url_utils.cc#L82\n  let invalidProtocols = [\"about:\", \"blob:\", \"chrome:\", \"chrome-untrusted:\", \"content:\", \"data:\", \"devtools:\", \"file:\", \"filesystem:\",\n  // eslint-disable-next-line no-script-url\n  \"javascript:\"];\n  if (ABSOLUTE_URL_REGEX.test(location)) {\n    // Strip off the protocol+origin for same-origin + same-basename absolute redirects\n    let normalizedLocation = location;\n    let url = normalizedLocation.startsWith(\"//\") ? new URL(currentUrl.protocol + normalizedLocation) : new URL(normalizedLocation);\n    if (invalidProtocols.includes(url.protocol)) {\n      throw new Error(\"Invalid redirect location\");\n    }\n    let isSameBasename = stripBasename(url.pathname, basename) != null;\n    if (url.origin === currentUrl.origin && isSameBasename) {\n      return url.pathname + url.search + url.hash;\n    }\n  }\n  try {\n    let url = historyInstance.createURL(location);\n    if (invalidProtocols.includes(url.protocol)) {\n      throw new Error(\"Invalid redirect location\");\n    }\n  } catch (e) {}\n  return location;\n}\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches.  During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(history, location, signal, submission) {\n  let url = history.createURL(stripHashFromPath(location)).toString();\n  let init = {\n    signal\n  };\n  if (submission && isMutationMethod(submission.formMethod)) {\n    let {\n      formMethod,\n      formEncType\n    } = submission;\n    // Didn't think we needed this but it turns out unlike other methods, patch\n    // won't be properly normalized to uppercase and results in a 405 error.\n    // See: https://fetch.spec.whatwg.org/#concept-method\n    init.method = formMethod.toUpperCase();\n    if (formEncType === \"application/json\") {\n      init.headers = new Headers({\n        \"Content-Type\": formEncType\n      });\n      init.body = JSON.stringify(submission.json);\n    } else if (formEncType === \"text/plain\") {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = submission.text;\n    } else if (formEncType === \"application/x-www-form-urlencoded\" && submission.formData) {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = convertFormDataToSearchParams(submission.formData);\n    } else {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = submission.formData;\n    }\n  }\n  return new Request(url, init);\n}\nfunction convertFormDataToSearchParams(formData) {\n  let searchParams = new URLSearchParams();\n  for (let [key, value] of formData.entries()) {\n    // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n    searchParams.append(key, typeof value === \"string\" ? value : value.name);\n  }\n  return searchParams;\n}\nfunction convertSearchParamsToFormData(searchParams) {\n  let formData = new FormData();\n  for (let [key, value] of searchParams.entries()) {\n    formData.append(key, value);\n  }\n  return formData;\n}\nfunction processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, skipLoaderErrorBubbling) {\n  // Fill in loaderData/errors from our loaders\n  let loaderData = {};\n  let errors = null;\n  let statusCode;\n  let foundError = false;\n  let loaderHeaders = {};\n  let pendingError = pendingActionResult && isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : undefined;\n  // Process loader results into state.loaderData/state.errors\n  matches.forEach(match => {\n    if (!(match.route.id in results)) {\n      return;\n    }\n    let id = match.route.id;\n    let result = results[id];\n    invariant(!isRedirectResult(result), \"Cannot handle redirect results in processLoaderData\");\n    if (isErrorResult(result)) {\n      let error = result.error;\n      // If we have a pending action error, we report it at the highest-route\n      // that throws a loader error, and then clear it out to indicate that\n      // it was consumed\n      if (pendingError !== undefined) {\n        error = pendingError;\n        pendingError = undefined;\n      }\n      errors = errors || {};\n      if (skipLoaderErrorBubbling) {\n        errors[id] = error;\n      } else {\n        // Look upwards from the matched route for the closest ancestor error\n        // boundary, defaulting to the root match.  Prefer higher error values\n        // if lower errors bubble to the same boundary\n        let boundaryMatch = findNearestBoundary(matches, id);\n        if (errors[boundaryMatch.route.id] == null) {\n          errors[boundaryMatch.route.id] = error;\n        }\n      }\n      // Clear our any prior loaderData for the throwing route\n      loaderData[id] = undefined;\n      // Once we find our first (highest) error, we set the status code and\n      // prevent deeper status codes from overriding\n      if (!foundError) {\n        foundError = true;\n        statusCode = isRouteErrorResponse(result.error) ? result.error.status : 500;\n      }\n      if (result.headers) {\n        loaderHeaders[id] = result.headers;\n      }\n    } else {\n      if (isDeferredResult(result)) {\n        activeDeferreds.set(id, result.deferredData);\n        loaderData[id] = result.deferredData.data;\n        // Error status codes always override success status codes, but if all\n        // loaders are successful we take the deepest status code.\n        if (result.statusCode != null && result.statusCode !== 200 && !foundError) {\n          statusCode = result.statusCode;\n        }\n        if (result.headers) {\n          loaderHeaders[id] = result.headers;\n        }\n      } else {\n        loaderData[id] = result.data;\n        // Error status codes always override success status codes, but if all\n        // loaders are successful we take the deepest status code.\n        if (result.statusCode && result.statusCode !== 200 && !foundError) {\n          statusCode = result.statusCode;\n        }\n        if (result.headers) {\n          loaderHeaders[id] = result.headers;\n        }\n      }\n    }\n  });\n  // If we didn't consume the pending action error (i.e., all loaders\n  // resolved), then consume it here.  Also clear out any loaderData for the\n  // throwing route\n  if (pendingError !== undefined && pendingActionResult) {\n    errors = {\n      [pendingActionResult[0]]: pendingError\n    };\n    loaderData[pendingActionResult[0]] = undefined;\n  }\n  return {\n    loaderData,\n    errors,\n    statusCode: statusCode || 200,\n    loaderHeaders\n  };\n}\nfunction processLoaderData(state, matches, results, pendingActionResult, revalidatingFetchers, fetcherResults, activeDeferreds) {\n  let {\n    loaderData,\n    errors\n  } = processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, false // This method is only called client side so we always want to bubble\n  );\n  // Process results from our revalidating fetchers\n  revalidatingFetchers.forEach(rf => {\n    let {\n      key,\n      match,\n      controller\n    } = rf;\n    let result = fetcherResults[key];\n    invariant(result, \"Did not find corresponding fetcher result\");\n    // Process fetcher non-redirect errors\n    if (controller && controller.signal.aborted) {\n      // Nothing to do for aborted fetchers\n      return;\n    } else if (isErrorResult(result)) {\n      let boundaryMatch = findNearestBoundary(state.matches, match == null ? void 0 : match.route.id);\n      if (!(errors && errors[boundaryMatch.route.id])) {\n        errors = _extends({}, errors, {\n          [boundaryMatch.route.id]: result.error\n        });\n      }\n      state.fetchers.delete(key);\n    } else if (isRedirectResult(result)) {\n      // Should never get here, redirects should get processed above, but we\n      // keep this to type narrow to a success result in the else\n      invariant(false, \"Unhandled fetcher revalidation redirect\");\n    } else if (isDeferredResult(result)) {\n      // Should never get here, deferred data should be awaited for fetchers\n      // in resolveDeferredResults\n      invariant(false, \"Unhandled fetcher deferred data\");\n    } else {\n      let doneFetcher = getDoneFetcher(result.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n  });\n  return {\n    loaderData,\n    errors\n  };\n}\nfunction mergeLoaderData(loaderData, newLoaderData, matches, errors) {\n  let mergedLoaderData = _extends({}, newLoaderData);\n  for (let match of matches) {\n    let id = match.route.id;\n    if (newLoaderData.hasOwnProperty(id)) {\n      if (newLoaderData[id] !== undefined) {\n        mergedLoaderData[id] = newLoaderData[id];\n      }\n    } else if (loaderData[id] !== undefined && match.route.loader) {\n      // Preserve existing keys not included in newLoaderData and where a loader\n      // wasn't removed by HMR\n      mergedLoaderData[id] = loaderData[id];\n    }\n    if (errors && errors.hasOwnProperty(id)) {\n      // Don't keep any loader data below the boundary\n      break;\n    }\n  }\n  return mergedLoaderData;\n}\nfunction getActionDataForCommit(pendingActionResult) {\n  if (!pendingActionResult) {\n    return {};\n  }\n  return isErrorResult(pendingActionResult[1]) ? {\n    // Clear out prior actionData on errors\n    actionData: {}\n  } : {\n    actionData: {\n      [pendingActionResult[0]]: pendingActionResult[1].data\n    }\n  };\n}\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(matches, routeId) {\n  let eligibleMatches = routeId ? matches.slice(0, matches.findIndex(m => m.route.id === routeId) + 1) : [...matches];\n  return eligibleMatches.reverse().find(m => m.route.hasErrorBoundary === true) || matches[0];\n}\nfunction getShortCircuitMatches(routes) {\n  // Prefer a root layout route if present, otherwise shim in a route object\n  let route = routes.length === 1 ? routes[0] : routes.find(r => r.index || !r.path || r.path === \"/\") || {\n    id: \"__shim-error-route__\"\n  };\n  return {\n    matches: [{\n      params: {},\n      pathname: \"\",\n      pathnameBase: \"\",\n      route\n    }],\n    route\n  };\n}\nfunction getInternalRouterError(status, _temp5) {\n  let {\n    pathname,\n    routeId,\n    method,\n    type,\n    message\n  } = _temp5 === void 0 ? {} : _temp5;\n  let statusText = \"Unknown Server Error\";\n  let errorMessage = \"Unknown @remix-run/router error\";\n  if (status === 400) {\n    statusText = \"Bad Request\";\n    if (method && pathname && routeId) {\n      errorMessage = \"You made a \" + method + \" request to \\\"\" + pathname + \"\\\" but \" + (\"did not provide a `loader` for route \\\"\" + routeId + \"\\\", \") + \"so there is no way to handle the request.\";\n    } else if (type === \"defer-action\") {\n      errorMessage = \"defer() is not supported in actions\";\n    } else if (type === \"invalid-body\") {\n      errorMessage = \"Unable to encode submission body\";\n    }\n  } else if (status === 403) {\n    statusText = \"Forbidden\";\n    errorMessage = \"Route \\\"\" + routeId + \"\\\" does not match URL \\\"\" + pathname + \"\\\"\";\n  } else if (status === 404) {\n    statusText = \"Not Found\";\n    errorMessage = \"No route matches URL \\\"\" + pathname + \"\\\"\";\n  } else if (status === 405) {\n    statusText = \"Method Not Allowed\";\n    if (method && pathname && routeId) {\n      errorMessage = \"You made a \" + method.toUpperCase() + \" request to \\\"\" + pathname + \"\\\" but \" + (\"did not provide an `action` for route \\\"\" + routeId + \"\\\", \") + \"so there is no way to handle the request.\";\n    } else if (method) {\n      errorMessage = \"Invalid request method \\\"\" + method.toUpperCase() + \"\\\"\";\n    }\n  }\n  return new ErrorResponseImpl(status || 500, statusText, new Error(errorMessage), true);\n}\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(results) {\n  let entries = Object.entries(results);\n  for (let i = entries.length - 1; i >= 0; i--) {\n    let [key, result] = entries[i];\n    if (isRedirectResult(result)) {\n      return {\n        key,\n        result\n      };\n    }\n  }\n}\nfunction stripHashFromPath(path) {\n  let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n  return createPath(_extends({}, parsedPath, {\n    hash: \"\"\n  }));\n}\nfunction isHashChangeOnly(a, b) {\n  if (a.pathname !== b.pathname || a.search !== b.search) {\n    return false;\n  }\n  if (a.hash === \"\") {\n    // /page -> /page#hash\n    return b.hash !== \"\";\n  } else if (a.hash === b.hash) {\n    // /page#hash -> /page#hash\n    return true;\n  } else if (b.hash !== \"\") {\n    // /page#hash -> /page#other\n    return true;\n  }\n  // If the hash is removed the browser will re-perform a request to the server\n  // /page#hash -> /page\n  return false;\n}\nfunction isDataStrategyResult(result) {\n  return result != null && typeof result === \"object\" && \"type\" in result && \"result\" in result && (result.type === ResultType.data || result.type === ResultType.error);\n}\nfunction isRedirectDataStrategyResultResult(result) {\n  return isResponse(result.result) && redirectStatusCodes.has(result.result.status);\n}\nfunction isDeferredResult(result) {\n  return result.type === ResultType.deferred;\n}\nfunction isErrorResult(result) {\n  return result.type === ResultType.error;\n}\nfunction isRedirectResult(result) {\n  return (result && result.type) === ResultType.redirect;\n}\nfunction isDataWithResponseInit(value) {\n  return typeof value === \"object\" && value != null && \"type\" in value && \"data\" in value && \"init\" in value && value.type === \"DataWithResponseInit\";\n}\nfunction isDeferredData(value) {\n  let deferred = value;\n  return deferred && typeof deferred === \"object\" && typeof deferred.data === \"object\" && typeof deferred.subscribe === \"function\" && typeof deferred.cancel === \"function\" && typeof deferred.resolveData === \"function\";\n}\nfunction isResponse(value) {\n  return value != null && typeof value.status === \"number\" && typeof value.statusText === \"string\" && typeof value.headers === \"object\" && typeof value.body !== \"undefined\";\n}\nfunction isRedirectResponse(result) {\n  if (!isResponse(result)) {\n    return false;\n  }\n  let status = result.status;\n  let location = result.headers.get(\"Location\");\n  return status >= 300 && status <= 399 && location != null;\n}\nfunction isValidMethod(method) {\n  return validRequestMethods.has(method.toLowerCase());\n}\nfunction isMutationMethod(method) {\n  return validMutationMethods.has(method.toLowerCase());\n}\nasync function resolveNavigationDeferredResults(matches, results, signal, currentMatches, currentLoaderData) {\n  let entries = Object.entries(results);\n  for (let index = 0; index < entries.length; index++) {\n    let [routeId, result] = entries[index];\n    let match = matches.find(m => (m == null ? void 0 : m.route.id) === routeId);\n    // If we don't have a match, then we can have a deferred result to do\n    // anything with.  This is for revalidating fetchers where the route was\n    // removed during HMR\n    if (!match) {\n      continue;\n    }\n    let currentMatch = currentMatches.find(m => m.route.id === match.route.id);\n    let isRevalidatingLoader = currentMatch != null && !isNewRouteInstance(currentMatch, match) && (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n    if (isDeferredResult(result) && isRevalidatingLoader) {\n      // Note: we do not have to touch activeDeferreds here since we race them\n      // against the signal in resolveDeferredData and they'll get aborted\n      // there if needed\n      await resolveDeferredData(result, signal, false).then(result => {\n        if (result) {\n          results[routeId] = result;\n        }\n      });\n    }\n  }\n}\nasync function resolveFetcherDeferredResults(matches, results, revalidatingFetchers) {\n  for (let index = 0; index < revalidatingFetchers.length; index++) {\n    let {\n      key,\n      routeId,\n      controller\n    } = revalidatingFetchers[index];\n    let result = results[key];\n    let match = matches.find(m => (m == null ? void 0 : m.route.id) === routeId);\n    // If we don't have a match, then we can have a deferred result to do\n    // anything with.  This is for revalidating fetchers where the route was\n    // removed during HMR\n    if (!match) {\n      continue;\n    }\n    if (isDeferredResult(result)) {\n      // Note: we do not have to touch activeDeferreds here since we race them\n      // against the signal in resolveDeferredData and they'll get aborted\n      // there if needed\n      invariant(controller, \"Expected an AbortController for revalidating fetcher deferred result\");\n      await resolveDeferredData(result, controller.signal, true).then(result => {\n        if (result) {\n          results[key] = result;\n        }\n      });\n    }\n  }\n}\nasync function resolveDeferredData(result, signal, unwrap) {\n  if (unwrap === void 0) {\n    unwrap = false;\n  }\n  let aborted = await result.deferredData.resolveData(signal);\n  if (aborted) {\n    return;\n  }\n  if (unwrap) {\n    try {\n      return {\n        type: ResultType.data,\n        data: result.deferredData.unwrappedData\n      };\n    } catch (e) {\n      // Handle any TrackedPromise._error values encountered while unwrapping\n      return {\n        type: ResultType.error,\n        error: e\n      };\n    }\n  }\n  return {\n    type: ResultType.data,\n    data: result.deferredData.data\n  };\n}\nfunction hasNakedIndexQuery(search) {\n  return new URLSearchParams(search).getAll(\"index\").some(v => v === \"\");\n}\nfunction getTargetMatch(matches, location) {\n  let search = typeof location === \"string\" ? parsePath(location).search : location.search;\n  if (matches[matches.length - 1].route.index && hasNakedIndexQuery(search || \"\")) {\n    // Return the leaf index route when index is present\n    return matches[matches.length - 1];\n  }\n  // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n  // pathless layout routes)\n  let pathMatches = getPathContributingMatches(matches);\n  return pathMatches[pathMatches.length - 1];\n}\nfunction getSubmissionFromNavigation(navigation) {\n  let {\n    formMethod,\n    formAction,\n    formEncType,\n    text,\n    formData,\n    json\n  } = navigation;\n  if (!formMethod || !formAction || !formEncType) {\n    return;\n  }\n  if (text != null) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData: undefined,\n      json: undefined,\n      text\n    };\n  } else if (formData != null) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData,\n      json: undefined,\n      text: undefined\n    };\n  } else if (json !== undefined) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData: undefined,\n      json,\n      text: undefined\n    };\n  }\n}\nfunction getLoadingNavigation(location, submission) {\n  if (submission) {\n    let navigation = {\n      state: \"loading\",\n      location,\n      formMethod: submission.formMethod,\n      formAction: submission.formAction,\n      formEncType: submission.formEncType,\n      formData: submission.formData,\n      json: submission.json,\n      text: submission.text\n    };\n    return navigation;\n  } else {\n    let navigation = {\n      state: \"loading\",\n      location,\n      formMethod: undefined,\n      formAction: undefined,\n      formEncType: undefined,\n      formData: undefined,\n      json: undefined,\n      text: undefined\n    };\n    return navigation;\n  }\n}\nfunction getSubmittingNavigation(location, submission) {\n  let navigation = {\n    state: \"submitting\",\n    location,\n    formMethod: submission.formMethod,\n    formAction: submission.formAction,\n    formEncType: submission.formEncType,\n    formData: submission.formData,\n    json: submission.json,\n    text: submission.text\n  };\n  return navigation;\n}\nfunction getLoadingFetcher(submission, data) {\n  if (submission) {\n    let fetcher = {\n      state: \"loading\",\n      formMethod: submission.formMethod,\n      formAction: submission.formAction,\n      formEncType: submission.formEncType,\n      formData: submission.formData,\n      json: submission.json,\n      text: submission.text,\n      data\n    };\n    return fetcher;\n  } else {\n    let fetcher = {\n      state: \"loading\",\n      formMethod: undefined,\n      formAction: undefined,\n      formEncType: undefined,\n      formData: undefined,\n      json: undefined,\n      text: undefined,\n      data\n    };\n    return fetcher;\n  }\n}\nfunction getSubmittingFetcher(submission, existingFetcher) {\n  let fetcher = {\n    state: \"submitting\",\n    formMethod: submission.formMethod,\n    formAction: submission.formAction,\n    formEncType: submission.formEncType,\n    formData: submission.formData,\n    json: submission.json,\n    text: submission.text,\n    data: existingFetcher ? existingFetcher.data : undefined\n  };\n  return fetcher;\n}\nfunction getDoneFetcher(data) {\n  let fetcher = {\n    state: \"idle\",\n    formMethod: undefined,\n    formAction: undefined,\n    formEncType: undefined,\n    formData: undefined,\n    json: undefined,\n    text: undefined,\n    data\n  };\n  return fetcher;\n}\nfunction restoreAppliedTransitions(_window, transitions) {\n  try {\n    let sessionPositions = _window.sessionStorage.getItem(TRANSITIONS_STORAGE_KEY);\n    if (sessionPositions) {\n      let json = JSON.parse(sessionPositions);\n      for (let [k, v] of Object.entries(json || {})) {\n        if (v && Array.isArray(v)) {\n          transitions.set(k, new Set(v || []));\n        }\n      }\n    }\n  } catch (e) {\n    // no-op, use default empty object\n  }\n}\nfunction persistAppliedTransitions(_window, transitions) {\n  if (transitions.size > 0) {\n    let json = {};\n    for (let [k, v] of transitions) {\n      json[k] = [...v];\n    }\n    try {\n      _window.sessionStorage.setItem(TRANSITIONS_STORAGE_KEY, JSON.stringify(json));\n    } catch (error) {\n      warning(false, \"Failed to save applied view transitions in sessionStorage (\" + error + \").\");\n    }\n  }\n}\n//#endregion\n\nexport { AbortedDeferredError, Action, IDLE_BLOCKER, IDLE_FETCHER, IDLE_NAVIGATION, UNSAFE_DEFERRED_SYMBOL, DeferredData as UNSAFE_DeferredData, ErrorResponseImpl as UNSAFE_ErrorResponseImpl, convertRouteMatchToUiMatch as UNSAFE_convertRouteMatchToUiMatch, convertRoutesToDataRoutes as UNSAFE_convertRoutesToDataRoutes, decodePath as UNSAFE_decodePath, getResolveToMatches as UNSAFE_getResolveToMatches, invariant as UNSAFE_invariant, warning as UNSAFE_warning, createBrowserHistory, createHashHistory, createMemoryHistory, createPath, createRouter, createStaticHandler, data, defer, generatePath, getStaticContextFromError, getToPathname, isDataWithResponseInit, isDeferredData, isRouteErrorResponse, joinPaths, json, matchPath, matchRoutes, normalizePathname, parsePath, redirect, redirectDocument, replace, resolvePath, resolveTo, stripBasename };\n//# sourceMappingURL=router.js.map\n","/**\n * React Router v6.30.3\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport { UNSAFE_invariant, joinPaths, matchPath, UNSAFE_decodePath, UNSAFE_getResolveToMatches, UNSAFE_warning, resolveTo, parsePath, matchRoutes, Action, UNSAFE_convertRouteMatchToUiMatch, stripBasename, IDLE_BLOCKER, isRouteErrorResponse, createMemoryHistory, AbortedDeferredError, createRouter } from '@remix-run/router';\nexport { AbortedDeferredError, Action as NavigationType, createPath, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, redirectDocument, replace, resolvePath } from '@remix-run/router';\n\nfunction _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nconst DataRouterContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  DataRouterContext.displayName = \"DataRouter\";\n}\nconst DataRouterStateContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  DataRouterStateContext.displayName = \"DataRouterState\";\n}\nconst AwaitContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  AwaitContext.displayName = \"Await\";\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level `<Router>` API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\n\nconst NavigationContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  NavigationContext.displayName = \"Navigation\";\n}\nconst LocationContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  LocationContext.displayName = \"Location\";\n}\nconst RouteContext = /*#__PURE__*/React.createContext({\n  outlet: null,\n  matches: [],\n  isDataRoute: false\n});\nif (process.env.NODE_ENV !== \"production\") {\n  RouteContext.displayName = \"Route\";\n}\nconst RouteErrorContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  RouteErrorContext.displayName = \"RouteError\";\n}\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/v6/hooks/use-href\n */\nfunction useHref(to, _temp) {\n  let {\n    relative\n  } = _temp === void 0 ? {} : _temp;\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n  // router loaded. We can help them understand how to avoid that.\n  \"useHref() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  let {\n    basename,\n    navigator\n  } = React.useContext(NavigationContext);\n  let {\n    hash,\n    pathname,\n    search\n  } = useResolvedPath(to, {\n    relative\n  });\n  let joinedPathname = pathname;\n\n  // If we're operating within a basename, prepend it to the pathname prior\n  // to creating the href.  If this is a root navigation, then just use the raw\n  // basename which allows the basename to have full control over the presence\n  // of a trailing slash on root links\n  if (basename !== \"/\") {\n    joinedPathname = pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n  }\n  return navigator.createHref({\n    pathname: joinedPathname,\n    search,\n    hash\n  });\n}\n\n/**\n * Returns true if this component is a descendant of a `<Router>`.\n *\n * @see https://reactrouter.com/v6/hooks/use-in-router-context\n */\nfunction useInRouterContext() {\n  return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/v6/hooks/use-location\n */\nfunction useLocation() {\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n  // router loaded. We can help them understand how to avoid that.\n  \"useLocation() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/v6/hooks/use-navigation-type\n */\nfunction useNavigationType() {\n  return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * `<NavLink>`.\n *\n * @see https://reactrouter.com/v6/hooks/use-match\n */\nfunction useMatch(pattern) {\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n  // router loaded. We can help them understand how to avoid that.\n  \"useMatch() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  let {\n    pathname\n  } = useLocation();\n  return React.useMemo(() => matchPath(pattern, UNSAFE_decodePath(pathname)), [pathname, pattern]);\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\n\nconst navigateEffectWarning = \"You should call navigate() in a React.useEffect(), not when \" + \"your component is first rendered.\";\n\n// Mute warnings for calls to useNavigate in SSR environments\nfunction useIsomorphicLayoutEffect(cb) {\n  let isStatic = React.useContext(NavigationContext).static;\n  if (!isStatic) {\n    // We should be able to get rid of this once react 18.3 is released\n    // See: https://github.com/facebook/react/pull/26395\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(cb);\n  }\n}\n\n/**\n * Returns an imperative method for changing the location. Used by `<Link>`s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/v6/hooks/use-navigate\n */\nfunction useNavigate() {\n  let {\n    isDataRoute\n  } = React.useContext(RouteContext);\n  // Conditional usage is OK here because the usage of a data router is static\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\nfunction useNavigateUnstable() {\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n  // router loaded. We can help them understand how to avoid that.\n  \"useNavigate() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  let dataRouterContext = React.useContext(DataRouterContext);\n  let {\n    basename,\n    future,\n    navigator\n  } = React.useContext(NavigationContext);\n  let {\n    matches\n  } = React.useContext(RouteContext);\n  let {\n    pathname: locationPathname\n  } = useLocation();\n  let routePathnamesJson = JSON.stringify(UNSAFE_getResolveToMatches(matches, future.v7_relativeSplatPath));\n  let activeRef = React.useRef(false);\n  useIsomorphicLayoutEffect(() => {\n    activeRef.current = true;\n  });\n  let navigate = React.useCallback(function (to, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(activeRef.current, navigateEffectWarning) : void 0;\n\n    // Short circuit here since if this happens on first render the navigate\n    // is useless because we haven't wired up our history listener yet\n    if (!activeRef.current) return;\n    if (typeof to === \"number\") {\n      navigator.go(to);\n      return;\n    }\n    let path = resolveTo(to, JSON.parse(routePathnamesJson), locationPathname, options.relative === \"path\");\n\n    // If we're operating within a basename, prepend it to the pathname prior\n    // to handing off to history (but only if we're not in a data router,\n    // otherwise it'll prepend the basename inside of the router).\n    // If this is a root navigation, then we navigate to the raw basename\n    // which allows the basename to have full control over the presence of a\n    // trailing slash on root links\n    if (dataRouterContext == null && basename !== \"/\") {\n      path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n    }\n    (!!options.replace ? navigator.replace : navigator.push)(path, options.state, options);\n  }, [basename, navigator, routePathnamesJson, locationPathname, dataRouterContext]);\n  return navigate;\n}\nconst OutletContext = /*#__PURE__*/React.createContext(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/v6/hooks/use-outlet-context\n */\nfunction useOutletContext() {\n  return React.useContext(OutletContext);\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by `<Outlet>` to render child routes.\n *\n * @see https://reactrouter.com/v6/hooks/use-outlet\n */\nfunction useOutlet(context) {\n  let outlet = React.useContext(RouteContext).outlet;\n  if (outlet) {\n    return /*#__PURE__*/React.createElement(OutletContext.Provider, {\n      value: context\n    }, outlet);\n  }\n  return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/v6/hooks/use-params\n */\nfunction useParams() {\n  let {\n    matches\n  } = React.useContext(RouteContext);\n  let routeMatch = matches[matches.length - 1];\n  return routeMatch ? routeMatch.params : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/v6/hooks/use-resolved-path\n */\nfunction useResolvedPath(to, _temp2) {\n  let {\n    relative\n  } = _temp2 === void 0 ? {} : _temp2;\n  let {\n    future\n  } = React.useContext(NavigationContext);\n  let {\n    matches\n  } = React.useContext(RouteContext);\n  let {\n    pathname: locationPathname\n  } = useLocation();\n  let routePathnamesJson = JSON.stringify(UNSAFE_getResolveToMatches(matches, future.v7_relativeSplatPath));\n  return React.useMemo(() => resolveTo(to, JSON.parse(routePathnamesJson), locationPathname, relative === \"path\"), [to, routePathnamesJson, locationPathname, relative]);\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an `<Outlet>` to render their child route's\n * element.\n *\n * @see https://reactrouter.com/v6/hooks/use-routes\n */\nfunction useRoutes(routes, locationArg) {\n  return useRoutesImpl(routes, locationArg);\n}\n\n// Internal implementation with accept optional param for RouterProvider usage\nfunction useRoutesImpl(routes, locationArg, dataRouterState, future) {\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n  // router loaded. We can help them understand how to avoid that.\n  \"useRoutes() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  let {\n    navigator\n  } = React.useContext(NavigationContext);\n  let {\n    matches: parentMatches\n  } = React.useContext(RouteContext);\n  let routeMatch = parentMatches[parentMatches.length - 1];\n  let parentParams = routeMatch ? routeMatch.params : {};\n  let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n  let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n  let parentRoute = routeMatch && routeMatch.route;\n  if (process.env.NODE_ENV !== \"production\") {\n    // You won't get a warning about 2 different <Routes> under a <Route>\n    // without a trailing *, but this is a best-effort warning anyway since we\n    // cannot even give the warning unless they land at the parent route.\n    //\n    // Example:\n    //\n    // <Routes>\n    //   {/* This route path MUST end with /* because otherwise\n    //       it will never match /blog/post/123 */}\n    //   <Route path=\"blog\" element={<Blog />} />\n    //   <Route path=\"blog/feed\" element={<BlogFeed />} />\n    // </Routes>\n    //\n    // function Blog() {\n    //   return (\n    //     <Routes>\n    //       <Route path=\"post/:id\" element={<Post />} />\n    //     </Routes>\n    //   );\n    // }\n    let parentPath = parentRoute && parentRoute.path || \"\";\n    warningOnce(parentPathname, !parentRoute || parentPath.endsWith(\"*\"), \"You rendered descendant <Routes> (or called `useRoutes()`) at \" + (\"\\\"\" + parentPathname + \"\\\" (under <Route path=\\\"\" + parentPath + \"\\\">) but the \") + \"parent route path has no trailing \\\"*\\\". This means if you navigate \" + \"deeper, the parent won't match anymore and therefore the child \" + \"routes will never render.\\n\\n\" + (\"Please change the parent <Route path=\\\"\" + parentPath + \"\\\"> to <Route \") + (\"path=\\\"\" + (parentPath === \"/\" ? \"*\" : parentPath + \"/*\") + \"\\\">.\"));\n  }\n  let locationFromContext = useLocation();\n  let location;\n  if (locationArg) {\n    var _parsedLocationArg$pa;\n    let parsedLocationArg = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n    !(parentPathnameBase === \"/\" || ((_parsedLocationArg$pa = parsedLocationArg.pathname) == null ? void 0 : _parsedLocationArg$pa.startsWith(parentPathnameBase))) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"When overriding the location using `<Routes location>` or `useRoutes(routes, location)`, \" + \"the location pathname must begin with the portion of the URL pathname that was \" + (\"matched by all parent routes. The current pathname base is \\\"\" + parentPathnameBase + \"\\\" \") + (\"but pathname \\\"\" + parsedLocationArg.pathname + \"\\\" was given in the `location` prop.\")) : UNSAFE_invariant(false) : void 0;\n    location = parsedLocationArg;\n  } else {\n    location = locationFromContext;\n  }\n  let pathname = location.pathname || \"/\";\n  let remainingPathname = pathname;\n  if (parentPathnameBase !== \"/\") {\n    // Determine the remaining pathname by removing the # of URL segments the\n    // parentPathnameBase has, instead of removing based on character count.\n    // This is because we can't guarantee that incoming/outgoing encodings/\n    // decodings will match exactly.\n    // We decode paths before matching on a per-segment basis with\n    // decodeURIComponent(), but we re-encode pathnames via `new URL()` so they\n    // match what `window.location.pathname` would reflect.  Those don't 100%\n    // align when it comes to encoded URI characters such as % and &.\n    //\n    // So we may end up with:\n    //   pathname:           \"/descendant/a%25b/match\"\n    //   parentPathnameBase: \"/descendant/a%b\"\n    //\n    // And the direct substring removal approach won't work :/\n    let parentSegments = parentPathnameBase.replace(/^\\//, \"\").split(\"/\");\n    let segments = pathname.replace(/^\\//, \"\").split(\"/\");\n    remainingPathname = \"/\" + segments.slice(parentSegments.length).join(\"/\");\n  }\n  let matches = matchRoutes(routes, {\n    pathname: remainingPathname\n  });\n  if (process.env.NODE_ENV !== \"production\") {\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(parentRoute || matches != null, \"No routes matched location \\\"\" + location.pathname + location.search + location.hash + \"\\\" \") : void 0;\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(matches == null || matches[matches.length - 1].route.element !== undefined || matches[matches.length - 1].route.Component !== undefined || matches[matches.length - 1].route.lazy !== undefined, \"Matched leaf route at location \\\"\" + location.pathname + location.search + location.hash + \"\\\" \" + \"does not have an element or Component. This means it will render an <Outlet /> with a \" + \"null value by default resulting in an \\\"empty\\\" page.\") : void 0;\n  }\n  let renderedMatches = _renderMatches(matches && matches.map(match => Object.assign({}, match, {\n    params: Object.assign({}, parentParams, match.params),\n    pathname: joinPaths([parentPathnameBase,\n    // Re-encode pathnames that were decoded inside matchRoutes\n    navigator.encodeLocation ? navigator.encodeLocation(match.pathname).pathname : match.pathname]),\n    pathnameBase: match.pathnameBase === \"/\" ? parentPathnameBase : joinPaths([parentPathnameBase,\n    // Re-encode pathnames that were decoded inside matchRoutes\n    navigator.encodeLocation ? navigator.encodeLocation(match.pathnameBase).pathname : match.pathnameBase])\n  })), parentMatches, dataRouterState, future);\n\n  // When a user passes in a `locationArg`, the associated routes need to\n  // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n  // to use the scoped location instead of the global location.\n  if (locationArg && renderedMatches) {\n    return /*#__PURE__*/React.createElement(LocationContext.Provider, {\n      value: {\n        location: _extends({\n          pathname: \"/\",\n          search: \"\",\n          hash: \"\",\n          state: null,\n          key: \"default\"\n        }, location),\n        navigationType: Action.Pop\n      }\n    }, renderedMatches);\n  }\n  return renderedMatches;\n}\nfunction DefaultErrorComponent() {\n  let error = useRouteError();\n  let message = isRouteErrorResponse(error) ? error.status + \" \" + error.statusText : error instanceof Error ? error.message : JSON.stringify(error);\n  let stack = error instanceof Error ? error.stack : null;\n  let lightgrey = \"rgba(200,200,200, 0.5)\";\n  let preStyles = {\n    padding: \"0.5rem\",\n    backgroundColor: lightgrey\n  };\n  let codeStyles = {\n    padding: \"2px 4px\",\n    backgroundColor: lightgrey\n  };\n  let devInfo = null;\n  if (process.env.NODE_ENV !== \"production\") {\n    console.error(\"Error handled by React Router default ErrorBoundary:\", error);\n    devInfo = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"p\", null, \"\\uD83D\\uDCBF Hey developer \\uD83D\\uDC4B\"), /*#__PURE__*/React.createElement(\"p\", null, \"You can provide a way better UX than this when your app throws errors by providing your own \", /*#__PURE__*/React.createElement(\"code\", {\n      style: codeStyles\n    }, \"ErrorBoundary\"), \" or\", \" \", /*#__PURE__*/React.createElement(\"code\", {\n      style: codeStyles\n    }, \"errorElement\"), \" prop on your route.\"));\n  }\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"h2\", null, \"Unexpected Application Error!\"), /*#__PURE__*/React.createElement(\"h3\", {\n    style: {\n      fontStyle: \"italic\"\n    }\n  }, message), stack ? /*#__PURE__*/React.createElement(\"pre\", {\n    style: preStyles\n  }, stack) : null, devInfo);\n}\nconst defaultErrorElement = /*#__PURE__*/React.createElement(DefaultErrorComponent, null);\nclass RenderErrorBoundary extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      location: props.location,\n      revalidation: props.revalidation,\n      error: props.error\n    };\n  }\n  static getDerivedStateFromError(error) {\n    return {\n      error: error\n    };\n  }\n  static getDerivedStateFromProps(props, state) {\n    // When we get into an error state, the user will likely click \"back\" to the\n    // previous page that didn't have an error. Because this wraps the entire\n    // application, that will have no effect--the error page continues to display.\n    // This gives us a mechanism to recover from the error when the location changes.\n    //\n    // Whether we're in an error state or not, we update the location in state\n    // so that when we are in an error state, it gets reset when a new location\n    // comes in and the user recovers from the error.\n    if (state.location !== props.location || state.revalidation !== \"idle\" && props.revalidation === \"idle\") {\n      return {\n        error: props.error,\n        location: props.location,\n        revalidation: props.revalidation\n      };\n    }\n\n    // If we're not changing locations, preserve the location but still surface\n    // any new errors that may come through. We retain the existing error, we do\n    // this because the error provided from the app state may be cleared without\n    // the location changing.\n    return {\n      error: props.error !== undefined ? props.error : state.error,\n      location: state.location,\n      revalidation: props.revalidation || state.revalidation\n    };\n  }\n  componentDidCatch(error, errorInfo) {\n    console.error(\"React Router caught the following error during render\", error, errorInfo);\n  }\n  render() {\n    return this.state.error !== undefined ? /*#__PURE__*/React.createElement(RouteContext.Provider, {\n      value: this.props.routeContext\n    }, /*#__PURE__*/React.createElement(RouteErrorContext.Provider, {\n      value: this.state.error,\n      children: this.props.component\n    })) : this.props.children;\n  }\n}\nfunction RenderedRoute(_ref) {\n  let {\n    routeContext,\n    match,\n    children\n  } = _ref;\n  let dataRouterContext = React.useContext(DataRouterContext);\n\n  // Track how deep we got in our render pass to emulate SSR componentDidCatch\n  // in a DataStaticRouter\n  if (dataRouterContext && dataRouterContext.static && dataRouterContext.staticContext && (match.route.errorElement || match.route.ErrorBoundary)) {\n    dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n  }\n  return /*#__PURE__*/React.createElement(RouteContext.Provider, {\n    value: routeContext\n  }, children);\n}\nfunction _renderMatches(matches, parentMatches, dataRouterState, future) {\n  var _dataRouterState;\n  if (parentMatches === void 0) {\n    parentMatches = [];\n  }\n  if (dataRouterState === void 0) {\n    dataRouterState = null;\n  }\n  if (future === void 0) {\n    future = null;\n  }\n  if (matches == null) {\n    var _future;\n    if (!dataRouterState) {\n      return null;\n    }\n    if (dataRouterState.errors) {\n      // Don't bail if we have data router errors so we can render them in the\n      // boundary.  Use the pre-matched (or shimmed) matches\n      matches = dataRouterState.matches;\n    } else if ((_future = future) != null && _future.v7_partialHydration && parentMatches.length === 0 && !dataRouterState.initialized && dataRouterState.matches.length > 0) {\n      // Don't bail if we're initializing with partial hydration and we have\n      // router matches.  That means we're actively running `patchRoutesOnNavigation`\n      // so we should render down the partial matches to the appropriate\n      // `HydrateFallback`.  We only do this if `parentMatches` is empty so it\n      // only impacts the root matches for `RouterProvider` and no descendant\n      // `<Routes>`\n      matches = dataRouterState.matches;\n    } else {\n      return null;\n    }\n  }\n  let renderedMatches = matches;\n\n  // If we have data errors, trim matches to the highest error boundary\n  let errors = (_dataRouterState = dataRouterState) == null ? void 0 : _dataRouterState.errors;\n  if (errors != null) {\n    let errorIndex = renderedMatches.findIndex(m => m.route.id && (errors == null ? void 0 : errors[m.route.id]) !== undefined);\n    !(errorIndex >= 0) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"Could not find a matching route for errors on route IDs: \" + Object.keys(errors).join(\",\")) : UNSAFE_invariant(false) : void 0;\n    renderedMatches = renderedMatches.slice(0, Math.min(renderedMatches.length, errorIndex + 1));\n  }\n\n  // If we're in a partial hydration mode, detect if we need to render down to\n  // a given HydrateFallback while we load the rest of the hydration data\n  let renderFallback = false;\n  let fallbackIndex = -1;\n  if (dataRouterState && future && future.v7_partialHydration) {\n    for (let i = 0; i < renderedMatches.length; i++) {\n      let match = renderedMatches[i];\n      // Track the deepest fallback up until the first route without data\n      if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {\n        fallbackIndex = i;\n      }\n      if (match.route.id) {\n        let {\n          loaderData,\n          errors\n        } = dataRouterState;\n        let needsToRunLoader = match.route.loader && loaderData[match.route.id] === undefined && (!errors || errors[match.route.id] === undefined);\n        if (match.route.lazy || needsToRunLoader) {\n          // We found the first route that's not ready to render (waiting on\n          // lazy, or has a loader that hasn't run yet).  Flag that we need to\n          // render a fallback and render up until the appropriate fallback\n          renderFallback = true;\n          if (fallbackIndex >= 0) {\n            renderedMatches = renderedMatches.slice(0, fallbackIndex + 1);\n          } else {\n            renderedMatches = [renderedMatches[0]];\n          }\n          break;\n        }\n      }\n    }\n  }\n  return renderedMatches.reduceRight((outlet, match, index) => {\n    // Only data routers handle errors/fallbacks\n    let error;\n    let shouldRenderHydrateFallback = false;\n    let errorElement = null;\n    let hydrateFallbackElement = null;\n    if (dataRouterState) {\n      error = errors && match.route.id ? errors[match.route.id] : undefined;\n      errorElement = match.route.errorElement || defaultErrorElement;\n      if (renderFallback) {\n        if (fallbackIndex < 0 && index === 0) {\n          warningOnce(\"route-fallback\", false, \"No `HydrateFallback` element provided to render during initial hydration\");\n          shouldRenderHydrateFallback = true;\n          hydrateFallbackElement = null;\n        } else if (fallbackIndex === index) {\n          shouldRenderHydrateFallback = true;\n          hydrateFallbackElement = match.route.hydrateFallbackElement || null;\n        }\n      }\n    }\n    let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n    let getChildren = () => {\n      let children;\n      if (error) {\n        children = errorElement;\n      } else if (shouldRenderHydrateFallback) {\n        children = hydrateFallbackElement;\n      } else if (match.route.Component) {\n        // Note: This is a de-optimized path since React won't re-use the\n        // ReactElement since it's identity changes with each new\n        // React.createElement call.  We keep this so folks can use\n        // `<Route Component={...}>` in `<Routes>` but generally `Component`\n        // usage is only advised in `RouterProvider` when we can convert it to\n        // `element` ahead of time.\n        children = /*#__PURE__*/React.createElement(match.route.Component, null);\n      } else if (match.route.element) {\n        children = match.route.element;\n      } else {\n        children = outlet;\n      }\n      return /*#__PURE__*/React.createElement(RenderedRoute, {\n        match: match,\n        routeContext: {\n          outlet,\n          matches,\n          isDataRoute: dataRouterState != null\n        },\n        children: children\n      });\n    };\n    // Only wrap in an error boundary within data router usages when we have an\n    // ErrorBoundary/errorElement on this route.  Otherwise let it bubble up to\n    // an ancestor ErrorBoundary/errorElement\n    return dataRouterState && (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? /*#__PURE__*/React.createElement(RenderErrorBoundary, {\n      location: dataRouterState.location,\n      revalidation: dataRouterState.revalidation,\n      component: errorElement,\n      error: error,\n      children: getChildren(),\n      routeContext: {\n        outlet: null,\n        matches,\n        isDataRoute: true\n      }\n    }) : getChildren();\n  }, null);\n}\nvar DataRouterHook = /*#__PURE__*/function (DataRouterHook) {\n  DataRouterHook[\"UseBlocker\"] = \"useBlocker\";\n  DataRouterHook[\"UseRevalidator\"] = \"useRevalidator\";\n  DataRouterHook[\"UseNavigateStable\"] = \"useNavigate\";\n  return DataRouterHook;\n}(DataRouterHook || {});\nvar DataRouterStateHook = /*#__PURE__*/function (DataRouterStateHook) {\n  DataRouterStateHook[\"UseBlocker\"] = \"useBlocker\";\n  DataRouterStateHook[\"UseLoaderData\"] = \"useLoaderData\";\n  DataRouterStateHook[\"UseActionData\"] = \"useActionData\";\n  DataRouterStateHook[\"UseRouteError\"] = \"useRouteError\";\n  DataRouterStateHook[\"UseNavigation\"] = \"useNavigation\";\n  DataRouterStateHook[\"UseRouteLoaderData\"] = \"useRouteLoaderData\";\n  DataRouterStateHook[\"UseMatches\"] = \"useMatches\";\n  DataRouterStateHook[\"UseRevalidator\"] = \"useRevalidator\";\n  DataRouterStateHook[\"UseNavigateStable\"] = \"useNavigate\";\n  DataRouterStateHook[\"UseRouteId\"] = \"useRouteId\";\n  return DataRouterStateHook;\n}(DataRouterStateHook || {});\nfunction getDataRouterConsoleError(hookName) {\n  return hookName + \" must be used within a data router.  See https://reactrouter.com/v6/routers/picking-a-router.\";\n}\nfunction useDataRouterContext(hookName) {\n  let ctx = React.useContext(DataRouterContext);\n  !ctx ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return ctx;\n}\nfunction useDataRouterState(hookName) {\n  let state = React.useContext(DataRouterStateContext);\n  !state ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return state;\n}\nfunction useRouteContext(hookName) {\n  let route = React.useContext(RouteContext);\n  !route ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return route;\n}\n\n// Internal version with hookName-aware debugging\nfunction useCurrentRouteId(hookName) {\n  let route = useRouteContext(hookName);\n  let thisRoute = route.matches[route.matches.length - 1];\n  !thisRoute.route.id ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, hookName + \" can only be used on routes that contain a unique \\\"id\\\"\") : UNSAFE_invariant(false) : void 0;\n  return thisRoute.route.id;\n}\n\n/**\n * Returns the ID for the nearest contextual route\n */\nfunction useRouteId() {\n  return useCurrentRouteId(DataRouterStateHook.UseRouteId);\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nfunction useNavigation() {\n  let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n  return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nfunction useRevalidator() {\n  let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n  let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n  return React.useMemo(() => ({\n    revalidate: dataRouterContext.router.revalidate,\n    state: state.revalidation\n  }), [dataRouterContext.router.revalidate, state.revalidation]);\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nfunction useMatches() {\n  let {\n    matches,\n    loaderData\n  } = useDataRouterState(DataRouterStateHook.UseMatches);\n  return React.useMemo(() => matches.map(m => UNSAFE_convertRouteMatchToUiMatch(m, loaderData)), [matches, loaderData]);\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nfunction useLoaderData() {\n  let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n  if (state.errors && state.errors[routeId] != null) {\n    console.error(\"You cannot `useLoaderData` in an errorElement (routeId: \" + routeId + \")\");\n    return undefined;\n  }\n  return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nfunction useRouteLoaderData(routeId) {\n  let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n  return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nfunction useActionData() {\n  let state = useDataRouterState(DataRouterStateHook.UseActionData);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n  return state.actionData ? state.actionData[routeId] : undefined;\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error.  This is intended to be called from your\n * ErrorBoundary/errorElement to display a proper error message.\n */\nfunction useRouteError() {\n  var _state$errors;\n  let error = React.useContext(RouteErrorContext);\n  let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n  // If this was a render error, we put it in a RouteError context inside\n  // of RenderErrorBoundary\n  if (error !== undefined) {\n    return error;\n  }\n\n  // Otherwise look for errors from our data router state\n  return (_state$errors = state.errors) == null ? void 0 : _state$errors[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor `<Await />` value\n */\nfunction useAsyncValue() {\n  let value = React.useContext(AwaitContext);\n  return value == null ? void 0 : value._data;\n}\n\n/**\n * Returns the error from the nearest ancestor `<Await />` value\n */\nfunction useAsyncError() {\n  let value = React.useContext(AwaitContext);\n  return value == null ? void 0 : value._error;\n}\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation.  Mostly used to avoid\n * using half-filled form data.  This does not handle hard-reloads or\n * cross-origin navigations.\n */\nfunction useBlocker(shouldBlock) {\n  let {\n    router,\n    basename\n  } = useDataRouterContext(DataRouterHook.UseBlocker);\n  let state = useDataRouterState(DataRouterStateHook.UseBlocker);\n  let [blockerKey, setBlockerKey] = React.useState(\"\");\n  let blockerFunction = React.useCallback(arg => {\n    if (typeof shouldBlock !== \"function\") {\n      return !!shouldBlock;\n    }\n    if (basename === \"/\") {\n      return shouldBlock(arg);\n    }\n\n    // If they provided us a function and we've got an active basename, strip\n    // it from the locations we expose to the user to match the behavior of\n    // useLocation\n    let {\n      currentLocation,\n      nextLocation,\n      historyAction\n    } = arg;\n    return shouldBlock({\n      currentLocation: _extends({}, currentLocation, {\n        pathname: stripBasename(currentLocation.pathname, basename) || currentLocation.pathname\n      }),\n      nextLocation: _extends({}, nextLocation, {\n        pathname: stripBasename(nextLocation.pathname, basename) || nextLocation.pathname\n      }),\n      historyAction\n    });\n  }, [basename, shouldBlock]);\n\n  // This effect is in charge of blocker key assignment and deletion (which is\n  // tightly coupled to the key)\n  React.useEffect(() => {\n    let key = String(++blockerId);\n    setBlockerKey(key);\n    return () => router.deleteBlocker(key);\n  }, [router]);\n\n  // This effect handles assigning the blockerFunction.  This is to handle\n  // unstable blocker function identities, and happens only after the prior\n  // effect so we don't get an orphaned blockerFunction in the router with a\n  // key of \"\".  Until then we just have the IDLE_BLOCKER.\n  React.useEffect(() => {\n    if (blockerKey !== \"\") {\n      router.getBlocker(blockerKey, blockerFunction);\n    }\n  }, [router, blockerKey, blockerFunction]);\n\n  // Prefer the blocker from `state` not `router.state` since DataRouterContext\n  // is memoized so this ensures we update on blocker state updates\n  return blockerKey && state.blockers.has(blockerKey) ? state.blockers.get(blockerKey) : IDLE_BLOCKER;\n}\n\n/**\n * Stable version of useNavigate that is used when we are in the context of\n * a RouterProvider.\n */\nfunction useNavigateStable() {\n  let {\n    router\n  } = useDataRouterContext(DataRouterHook.UseNavigateStable);\n  let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);\n  let activeRef = React.useRef(false);\n  useIsomorphicLayoutEffect(() => {\n    activeRef.current = true;\n  });\n  let navigate = React.useCallback(function (to, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(activeRef.current, navigateEffectWarning) : void 0;\n\n    // Short circuit here since if this happens on first render the navigate\n    // is useless because we haven't wired up our router subscriber yet\n    if (!activeRef.current) return;\n    if (typeof to === \"number\") {\n      router.navigate(to);\n    } else {\n      router.navigate(to, _extends({\n        fromRouteId: id\n      }, options));\n    }\n  }, [router, id]);\n  return navigate;\n}\nconst alreadyWarned$1 = {};\nfunction warningOnce(key, cond, message) {\n  if (!cond && !alreadyWarned$1[key]) {\n    alreadyWarned$1[key] = true;\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, message) : void 0;\n  }\n}\n\nconst alreadyWarned = {};\nfunction warnOnce(key, message) {\n  if (process.env.NODE_ENV !== \"production\" && !alreadyWarned[message]) {\n    alreadyWarned[message] = true;\n    console.warn(message);\n  }\n}\nconst logDeprecation = (flag, msg, link) => warnOnce(flag, \"\\u26A0\\uFE0F React Router Future Flag Warning: \" + msg + \". \" + (\"You can use the `\" + flag + \"` future flag to opt-in early. \") + (\"For more information, see \" + link + \".\"));\nfunction logV6DeprecationWarnings(renderFuture, routerFuture) {\n  if ((renderFuture == null ? void 0 : renderFuture.v7_startTransition) === undefined) {\n    logDeprecation(\"v7_startTransition\", \"React Router will begin wrapping state updates in `React.startTransition` in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_starttransition\");\n  }\n  if ((renderFuture == null ? void 0 : renderFuture.v7_relativeSplatPath) === undefined && (!routerFuture || routerFuture.v7_relativeSplatPath === undefined)) {\n    logDeprecation(\"v7_relativeSplatPath\", \"Relative route resolution within Splat routes is changing in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath\");\n  }\n  if (routerFuture) {\n    if (routerFuture.v7_fetcherPersist === undefined) {\n      logDeprecation(\"v7_fetcherPersist\", \"The persistence behavior of fetchers is changing in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_fetcherpersist\");\n    }\n    if (routerFuture.v7_normalizeFormMethod === undefined) {\n      logDeprecation(\"v7_normalizeFormMethod\", \"Casing of `formMethod` fields is being normalized to uppercase in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_normalizeformmethod\");\n    }\n    if (routerFuture.v7_partialHydration === undefined) {\n      logDeprecation(\"v7_partialHydration\", \"`RouterProvider` hydration behavior is changing in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_partialhydration\");\n    }\n    if (routerFuture.v7_skipActionErrorRevalidation === undefined) {\n      logDeprecation(\"v7_skipActionErrorRevalidation\", \"The revalidation behavior after 4xx/5xx `action` responses is changing in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_skipactionerrorrevalidation\");\n    }\n  }\n}\n\n/**\n  Webpack + React 17 fails to compile on any of the following because webpack\n  complains that `startTransition` doesn't exist in `React`:\n  * import { startTransition } from \"react\"\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n  Moving it to a constant such as the following solves the Webpack/React 17 issue:\n  * import * as React from from \"react\";\n    const START_TRANSITION = \"startTransition\";\n    START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n  However, that introduces webpack/terser minification issues in production builds\n  in React 18 where minification/obfuscation ends up removing the call of\n  React.startTransition entirely from the first half of the ternary.  Grabbing\n  this exported reference once up front resolves that issue.\n\n  See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nfunction RouterProvider(_ref) {\n  let {\n    fallbackElement,\n    router,\n    future\n  } = _ref;\n  let [state, setStateImpl] = React.useState(router.state);\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    if (v7_startTransition && startTransitionImpl) {\n      startTransitionImpl(() => setStateImpl(newState));\n    } else {\n      setStateImpl(newState);\n    }\n  }, [setStateImpl, v7_startTransition]);\n\n  // Need to use a layout effect here so we are subscribed early enough to\n  // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n  React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n  React.useEffect(() => {\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(fallbackElement == null || !router.future.v7_partialHydration, \"`<RouterProvider fallbackElement>` is deprecated when using \" + \"`v7_partialHydration`, use a `HydrateFallback` component instead\") : void 0;\n    // Only log this once on initial mount\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n  let navigator = React.useMemo(() => {\n    return {\n      createHref: router.createHref,\n      encodeLocation: router.encodeLocation,\n      go: n => router.navigate(n),\n      push: (to, state, opts) => router.navigate(to, {\n        state,\n        preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n      }),\n      replace: (to, state, opts) => router.navigate(to, {\n        replace: true,\n        state,\n        preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n      })\n    };\n  }, [router]);\n  let basename = router.basename || \"/\";\n  let dataRouterContext = React.useMemo(() => ({\n    router,\n    navigator,\n    static: false,\n    basename\n  }), [router, navigator, basename]);\n  React.useEffect(() => logV6DeprecationWarnings(future, router.future), [router, future]);\n\n  // The fragment and {null} here are important!  We need them to keep React 18's\n  // useId happy when we are server-rendering since we may have a <script> here\n  // containing the hydrated server-side staticContext (from StaticRouterProvider).\n  // useId relies on the component tree structure to generate deterministic id's\n  // so we need to ensure it remains the same on the client even though\n  // we don't need the <script> tag\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DataRouterContext.Provider, {\n    value: dataRouterContext\n  }, /*#__PURE__*/React.createElement(DataRouterStateContext.Provider, {\n    value: state\n  }, /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    location: state.location,\n    navigationType: state.historyAction,\n    navigator: navigator,\n    future: {\n      v7_relativeSplatPath: router.future.v7_relativeSplatPath\n    }\n  }, state.initialized || router.future.v7_partialHydration ? /*#__PURE__*/React.createElement(DataRoutes, {\n    routes: router.routes,\n    future: router.future,\n    state: state\n  }) : fallbackElement))), null);\n}\nfunction DataRoutes(_ref2) {\n  let {\n    routes,\n    future,\n    state\n  } = _ref2;\n  return useRoutesImpl(routes, undefined, state, future);\n}\n/**\n * A `<Router>` that stores all entries in memory.\n *\n * @see https://reactrouter.com/v6/router-components/memory-router\n */\nfunction MemoryRouter(_ref3) {\n  let {\n    basename,\n    children,\n    initialEntries,\n    initialIndex,\n    future\n  } = _ref3;\n  let historyRef = React.useRef();\n  if (historyRef.current == null) {\n    historyRef.current = createMemoryHistory({\n      initialEntries,\n      initialIndex,\n      v5Compat: true\n    });\n  }\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location\n  });\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n  }, [setStateImpl, v7_startTransition]);\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  React.useEffect(() => logV6DeprecationWarnings(future), [future]);\n  return /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    children: children,\n    location: state.location,\n    navigationType: state.action,\n    navigator: history,\n    future: future\n  });\n}\n/**\n * Changes the current location.\n *\n * Note: This API is mostly useful in React.Component subclasses that are not\n * able to use hooks. In functional components, we recommend you use the\n * `useNavigate` hook instead.\n *\n * @see https://reactrouter.com/v6/components/navigate\n */\nfunction Navigate(_ref4) {\n  let {\n    to,\n    replace,\n    state,\n    relative\n  } = _ref4;\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of\n  // the router loaded. We can help them understand how to avoid that.\n  \"<Navigate> may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  let {\n    future,\n    static: isStatic\n  } = React.useContext(NavigationContext);\n  process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(!isStatic, \"<Navigate> must not be used on the initial render in a <StaticRouter>. \" + \"This is a no-op, but you should modify your code so the <Navigate> is \" + \"only ever rendered in response to some user interaction or state change.\") : void 0;\n  let {\n    matches\n  } = React.useContext(RouteContext);\n  let {\n    pathname: locationPathname\n  } = useLocation();\n  let navigate = useNavigate();\n\n  // Resolve the path outside of the effect so that when effects run twice in\n  // StrictMode they navigate to the same place\n  let path = resolveTo(to, UNSAFE_getResolveToMatches(matches, future.v7_relativeSplatPath), locationPathname, relative === \"path\");\n  let jsonPath = JSON.stringify(path);\n  React.useEffect(() => navigate(JSON.parse(jsonPath), {\n    replace,\n    state,\n    relative\n  }), [navigate, jsonPath, relative, replace, state]);\n  return null;\n}\n/**\n * Renders the child route's element, if there is one.\n *\n * @see https://reactrouter.com/v6/components/outlet\n */\nfunction Outlet(props) {\n  return useOutlet(props.context);\n}\n/**\n * Declares an element that should be rendered at a certain URL path.\n *\n * @see https://reactrouter.com/v6/components/route\n */\nfunction Route(_props) {\n  process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"A <Route> is only ever to be used as the child of <Routes> element, \" + \"never rendered directly. Please wrap your <Route> in a <Routes>.\") : UNSAFE_invariant(false) ;\n}\n/**\n * Provides location context for the rest of the app.\n *\n * Note: You usually won't render a `<Router>` directly. Instead, you'll render a\n * router that is more specific to your environment such as a `<BrowserRouter>`\n * in web browsers or a `<StaticRouter>` for server rendering.\n *\n * @see https://reactrouter.com/v6/router-components/router\n */\nfunction Router(_ref5) {\n  let {\n    basename: basenameProp = \"/\",\n    children = null,\n    location: locationProp,\n    navigationType = Action.Pop,\n    navigator,\n    static: staticProp = false,\n    future\n  } = _ref5;\n  !!useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"You cannot render a <Router> inside another <Router>.\" + \" You should never have more than one in your app.\") : UNSAFE_invariant(false) : void 0;\n\n  // Preserve trailing slashes on basename, so we can let the user control\n  // the enforcement of trailing slashes throughout the app\n  let basename = basenameProp.replace(/^\\/*/, \"/\");\n  let navigationContext = React.useMemo(() => ({\n    basename,\n    navigator,\n    static: staticProp,\n    future: _extends({\n      v7_relativeSplatPath: false\n    }, future)\n  }), [basename, future, navigator, staticProp]);\n  if (typeof locationProp === \"string\") {\n    locationProp = parsePath(locationProp);\n  }\n  let {\n    pathname = \"/\",\n    search = \"\",\n    hash = \"\",\n    state = null,\n    key = \"default\"\n  } = locationProp;\n  let locationContext = React.useMemo(() => {\n    let trailingPathname = stripBasename(pathname, basename);\n    if (trailingPathname == null) {\n      return null;\n    }\n    return {\n      location: {\n        pathname: trailingPathname,\n        search,\n        hash,\n        state,\n        key\n      },\n      navigationType\n    };\n  }, [basename, pathname, search, hash, state, key, navigationType]);\n  process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(locationContext != null, \"<Router basename=\\\"\" + basename + \"\\\"> is not able to match the URL \" + (\"\\\"\" + pathname + search + hash + \"\\\" because it does not start with the \") + \"basename, so the <Router> won't render anything.\") : void 0;\n  if (locationContext == null) {\n    return null;\n  }\n  return /*#__PURE__*/React.createElement(NavigationContext.Provider, {\n    value: navigationContext\n  }, /*#__PURE__*/React.createElement(LocationContext.Provider, {\n    children: children,\n    value: locationContext\n  }));\n}\n/**\n * A container for a nested tree of `<Route>` elements that renders the branch\n * that best matches the current location.\n *\n * @see https://reactrouter.com/v6/components/routes\n */\nfunction Routes(_ref6) {\n  let {\n    children,\n    location\n  } = _ref6;\n  return useRoutes(createRoutesFromChildren(children), location);\n}\n/**\n * Component to use for rendering lazily loaded data from returning defer()\n * in a loader function\n */\nfunction Await(_ref7) {\n  let {\n    children,\n    errorElement,\n    resolve\n  } = _ref7;\n  return /*#__PURE__*/React.createElement(AwaitErrorBoundary, {\n    resolve: resolve,\n    errorElement: errorElement\n  }, /*#__PURE__*/React.createElement(ResolveAwait, null, children));\n}\nvar AwaitRenderStatus = /*#__PURE__*/function (AwaitRenderStatus) {\n  AwaitRenderStatus[AwaitRenderStatus[\"pending\"] = 0] = \"pending\";\n  AwaitRenderStatus[AwaitRenderStatus[\"success\"] = 1] = \"success\";\n  AwaitRenderStatus[AwaitRenderStatus[\"error\"] = 2] = \"error\";\n  return AwaitRenderStatus;\n}(AwaitRenderStatus || {});\nconst neverSettledPromise = new Promise(() => {});\nclass AwaitErrorBoundary extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      error: null\n    };\n  }\n  static getDerivedStateFromError(error) {\n    return {\n      error\n    };\n  }\n  componentDidCatch(error, errorInfo) {\n    console.error(\"<Await> caught the following error during render\", error, errorInfo);\n  }\n  render() {\n    let {\n      children,\n      errorElement,\n      resolve\n    } = this.props;\n    let promise = null;\n    let status = AwaitRenderStatus.pending;\n    if (!(resolve instanceof Promise)) {\n      // Didn't get a promise - provide as a resolved promise\n      status = AwaitRenderStatus.success;\n      promise = Promise.resolve();\n      Object.defineProperty(promise, \"_tracked\", {\n        get: () => true\n      });\n      Object.defineProperty(promise, \"_data\", {\n        get: () => resolve\n      });\n    } else if (this.state.error) {\n      // Caught a render error, provide it as a rejected promise\n      status = AwaitRenderStatus.error;\n      let renderError = this.state.error;\n      promise = Promise.reject().catch(() => {}); // Avoid unhandled rejection warnings\n      Object.defineProperty(promise, \"_tracked\", {\n        get: () => true\n      });\n      Object.defineProperty(promise, \"_error\", {\n        get: () => renderError\n      });\n    } else if (resolve._tracked) {\n      // Already tracked promise - check contents\n      promise = resolve;\n      status = \"_error\" in promise ? AwaitRenderStatus.error : \"_data\" in promise ? AwaitRenderStatus.success : AwaitRenderStatus.pending;\n    } else {\n      // Raw (untracked) promise - track it\n      status = AwaitRenderStatus.pending;\n      Object.defineProperty(resolve, \"_tracked\", {\n        get: () => true\n      });\n      promise = resolve.then(data => Object.defineProperty(resolve, \"_data\", {\n        get: () => data\n      }), error => Object.defineProperty(resolve, \"_error\", {\n        get: () => error\n      }));\n    }\n    if (status === AwaitRenderStatus.error && promise._error instanceof AbortedDeferredError) {\n      // Freeze the UI by throwing a never resolved promise\n      throw neverSettledPromise;\n    }\n    if (status === AwaitRenderStatus.error && !errorElement) {\n      // No errorElement, throw to the nearest route-level error boundary\n      throw promise._error;\n    }\n    if (status === AwaitRenderStatus.error) {\n      // Render via our errorElement\n      return /*#__PURE__*/React.createElement(AwaitContext.Provider, {\n        value: promise,\n        children: errorElement\n      });\n    }\n    if (status === AwaitRenderStatus.success) {\n      // Render children with resolved value\n      return /*#__PURE__*/React.createElement(AwaitContext.Provider, {\n        value: promise,\n        children: children\n      });\n    }\n\n    // Throw to the suspense boundary\n    throw promise;\n  }\n}\n\n/**\n * @private\n * Indirection to leverage useAsyncValue for a render-prop API on `<Await>`\n */\nfunction ResolveAwait(_ref8) {\n  let {\n    children\n  } = _ref8;\n  let data = useAsyncValue();\n  let toRender = typeof children === \"function\" ? children(data) : children;\n  return /*#__PURE__*/React.createElement(React.Fragment, null, toRender);\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// UTILS\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Creates a route config from a React \"children\" object, which is usually\n * either a `<Route>` element or an array of them. Used internally by\n * `<Routes>` to create a route config from its children.\n *\n * @see https://reactrouter.com/v6/utils/create-routes-from-children\n */\nfunction createRoutesFromChildren(children, parentPath) {\n  if (parentPath === void 0) {\n    parentPath = [];\n  }\n  let routes = [];\n  React.Children.forEach(children, (element, index) => {\n    if (! /*#__PURE__*/React.isValidElement(element)) {\n      // Ignore non-elements. This allows people to more easily inline\n      // conditionals in their route config.\n      return;\n    }\n    let treePath = [...parentPath, index];\n    if (element.type === React.Fragment) {\n      // Transparently support React.Fragment and its children.\n      routes.push.apply(routes, createRoutesFromChildren(element.props.children, treePath));\n      return;\n    }\n    !(element.type === Route) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"[\" + (typeof element.type === \"string\" ? element.type : element.type.name) + \"] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>\") : UNSAFE_invariant(false) : void 0;\n    !(!element.props.index || !element.props.children) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"An index route cannot have child routes.\") : UNSAFE_invariant(false) : void 0;\n    let route = {\n      id: element.props.id || treePath.join(\"-\"),\n      caseSensitive: element.props.caseSensitive,\n      element: element.props.element,\n      Component: element.props.Component,\n      index: element.props.index,\n      path: element.props.path,\n      loader: element.props.loader,\n      action: element.props.action,\n      errorElement: element.props.errorElement,\n      ErrorBoundary: element.props.ErrorBoundary,\n      hasErrorBoundary: element.props.ErrorBoundary != null || element.props.errorElement != null,\n      shouldRevalidate: element.props.shouldRevalidate,\n      handle: element.props.handle,\n      lazy: element.props.lazy\n    };\n    if (element.props.children) {\n      route.children = createRoutesFromChildren(element.props.children, treePath);\n    }\n    routes.push(route);\n  });\n  return routes;\n}\n\n/**\n * Renders the result of `matchRoutes()` into a React element.\n */\nfunction renderMatches(matches) {\n  return _renderMatches(matches);\n}\n\nfunction mapRouteProperties(route) {\n  let updates = {\n    // Note: this check also occurs in createRoutesFromChildren so update\n    // there if you change this -- please and thank you!\n    hasErrorBoundary: route.ErrorBoundary != null || route.errorElement != null\n  };\n  if (route.Component) {\n    if (process.env.NODE_ENV !== \"production\") {\n      if (route.element) {\n        process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"You should not include both `Component` and `element` on your route - \" + \"`Component` will be used.\") : void 0;\n      }\n    }\n    Object.assign(updates, {\n      element: /*#__PURE__*/React.createElement(route.Component),\n      Component: undefined\n    });\n  }\n  if (route.HydrateFallback) {\n    if (process.env.NODE_ENV !== \"production\") {\n      if (route.hydrateFallbackElement) {\n        process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"You should not include both `HydrateFallback` and `hydrateFallbackElement` on your route - \" + \"`HydrateFallback` will be used.\") : void 0;\n      }\n    }\n    Object.assign(updates, {\n      hydrateFallbackElement: /*#__PURE__*/React.createElement(route.HydrateFallback),\n      HydrateFallback: undefined\n    });\n  }\n  if (route.ErrorBoundary) {\n    if (process.env.NODE_ENV !== \"production\") {\n      if (route.errorElement) {\n        process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"You should not include both `ErrorBoundary` and `errorElement` on your route - \" + \"`ErrorBoundary` will be used.\") : void 0;\n      }\n    }\n    Object.assign(updates, {\n      errorElement: /*#__PURE__*/React.createElement(route.ErrorBoundary),\n      ErrorBoundary: undefined\n    });\n  }\n  return updates;\n}\nfunction createMemoryRouter(routes, opts) {\n  return createRouter({\n    basename: opts == null ? void 0 : opts.basename,\n    future: _extends({}, opts == null ? void 0 : opts.future, {\n      v7_prependBasename: true\n    }),\n    history: createMemoryHistory({\n      initialEntries: opts == null ? void 0 : opts.initialEntries,\n      initialIndex: opts == null ? void 0 : opts.initialIndex\n    }),\n    hydrationData: opts == null ? void 0 : opts.hydrationData,\n    routes,\n    mapRouteProperties,\n    dataStrategy: opts == null ? void 0 : opts.dataStrategy,\n    patchRoutesOnNavigation: opts == null ? void 0 : opts.patchRoutesOnNavigation\n  }).initialize();\n}\n\nexport { Await, MemoryRouter, Navigate, Outlet, Route, Router, RouterProvider, Routes, DataRouterContext as UNSAFE_DataRouterContext, DataRouterStateContext as UNSAFE_DataRouterStateContext, LocationContext as UNSAFE_LocationContext, NavigationContext as UNSAFE_NavigationContext, RouteContext as UNSAFE_RouteContext, logV6DeprecationWarnings as UNSAFE_logV6DeprecationWarnings, mapRouteProperties as UNSAFE_mapRouteProperties, useRouteId as UNSAFE_useRouteId, useRoutesImpl as UNSAFE_useRoutesImpl, createMemoryRouter, createRoutesFromChildren, createRoutesFromChildren as createRoutesFromElements, renderMatches, useActionData, useAsyncError, useAsyncValue, useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes };\n//# sourceMappingURL=index.js.map\n","/**\n * React Router DOM v5 Compat v6.30.3\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { UNSAFE_mapRouteProperties, UNSAFE_logV6DeprecationWarnings, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, Router, UNSAFE_useRoutesImpl, UNSAFE_NavigationContext, useHref, useResolvedPath, useLocation, useNavigate, createPath, UNSAFE_useRouteId, UNSAFE_RouteContext, useMatches, useNavigation, useBlocker, Routes, Route } from 'react-router';\nexport { AbortedDeferredError, Await, MemoryRouter, Navigate, NavigationType, Outlet, Route, Router, Routes, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, UNSAFE_LocationContext, UNSAFE_NavigationContext, UNSAFE_RouteContext, UNSAFE_useRouteId, createMemoryRouter, createPath, createRoutesFromChildren, createRoutesFromElements, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, redirectDocument, renderMatches, replace, resolvePath, useActionData, useAsyncError, useAsyncValue, useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes } from 'react-router';\nimport { stripBasename, UNSAFE_warning, createRouter, createBrowserHistory, createHashHistory, UNSAFE_ErrorResponseImpl, UNSAFE_invariant, joinPaths, IDLE_FETCHER, matchPath } from '@remix-run/router';\nimport { parsePath, Action, createPath as createPath$1 } from 'history';\nimport { Route as Route$1, useHistory } from 'react-router-dom';\n\nfunction _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n  return target;\n}\n\nconst defaultMethod = \"get\";\nconst defaultEncType = \"application/x-www-form-urlencoded\";\nfunction isHtmlElement(object) {\n  return object != null && typeof object.tagName === \"string\";\n}\nfunction isButtonElement(object) {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\nfunction isFormElement(object) {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\nfunction isInputElement(object) {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\nfunction isModifiedEvent(event) {\n  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\nfunction shouldProcessLinkClick(event, target) {\n  return event.button === 0 && (\n  // Ignore everything but left clicks\n  !target || target === \"_self\") &&\n  // Let browser handle \"target=_blank\" etc.\n  !isModifiedEvent(event) // Ignore clicks with modifier keys\n  ;\n}\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n *   let searchParams = new URLSearchParams([\n *     ['sort', 'name'],\n *     ['sort', 'price']\n *   ]);\n *\n * you can do:\n *\n *   let searchParams = createSearchParams({\n *     sort: ['name', 'price']\n *   });\n */\nfunction createSearchParams(init) {\n  if (init === void 0) {\n    init = \"\";\n  }\n  return new URLSearchParams(typeof init === \"string\" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo, key) => {\n    let value = init[key];\n    return memo.concat(Array.isArray(value) ? value.map(v => [key, v]) : [[key, value]]);\n  }, []));\n}\nfunction getSearchParamsForLocation(locationSearch, defaultSearchParams) {\n  let searchParams = createSearchParams(locationSearch);\n  if (defaultSearchParams) {\n    // Use `defaultSearchParams.forEach(...)` here instead of iterating of\n    // `defaultSearchParams.keys()` to work-around a bug in Firefox related to\n    // web extensions. Relevant Bugzilla tickets:\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1414602\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1023984\n    defaultSearchParams.forEach((_, key) => {\n      if (!searchParams.has(key)) {\n        defaultSearchParams.getAll(key).forEach(value => {\n          searchParams.append(key, value);\n        });\n      }\n    });\n  }\n  return searchParams;\n}\n// One-time check for submitter support\nlet _formDataSupportsSubmitter = null;\nfunction isFormDataSubmitterSupported() {\n  if (_formDataSupportsSubmitter === null) {\n    try {\n      new FormData(document.createElement(\"form\"),\n      // @ts-expect-error if FormData supports the submitter parameter, this will throw\n      0);\n      _formDataSupportsSubmitter = false;\n    } catch (e) {\n      _formDataSupportsSubmitter = true;\n    }\n  }\n  return _formDataSupportsSubmitter;\n}\nconst supportedFormEncTypes = new Set([\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"]);\nfunction getFormEncType(encType) {\n  if (encType != null && !supportedFormEncTypes.has(encType)) {\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"\\\"\" + encType + \"\\\" is not a valid `encType` for `<Form>`/`<fetcher.Form>` \" + (\"and will default to \\\"\" + defaultEncType + \"\\\"\")) : void 0;\n    return null;\n  }\n  return encType;\n}\nfunction getFormSubmissionInfo(target, basename) {\n  let method;\n  let action;\n  let encType;\n  let formData;\n  let body;\n  if (isFormElement(target)) {\n    // When grabbing the action from the element, it will have had the basename\n    // prefixed to ensure non-JS scenarios work, so strip it since we'll\n    // re-prefix in the router\n    let attr = target.getAttribute(\"action\");\n    action = attr ? stripBasename(attr, basename) : null;\n    method = target.getAttribute(\"method\") || defaultMethod;\n    encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n    formData = new FormData(target);\n  } else if (isButtonElement(target) || isInputElement(target) && (target.type === \"submit\" || target.type === \"image\")) {\n    let form = target.form;\n    if (form == null) {\n      throw new Error(\"Cannot submit a <button> or <input type=\\\"submit\\\"> without a <form>\");\n    }\n    // <button>/<input type=\"submit\"> may override attributes of <form>\n    // When grabbing the action from the element, it will have had the basename\n    // prefixed to ensure non-JS scenarios work, so strip it since we'll\n    // re-prefix in the router\n    let attr = target.getAttribute(\"formaction\") || form.getAttribute(\"action\");\n    action = attr ? stripBasename(attr, basename) : null;\n    method = target.getAttribute(\"formmethod\") || form.getAttribute(\"method\") || defaultMethod;\n    encType = getFormEncType(target.getAttribute(\"formenctype\")) || getFormEncType(form.getAttribute(\"enctype\")) || defaultEncType;\n    // Build a FormData object populated from a form and submitter\n    formData = new FormData(form, target);\n    // If this browser doesn't support the `FormData(el, submitter)` format,\n    // then tack on the submitter value at the end.  This is a lightweight\n    // solution that is not 100% spec compliant.  For complete support in older\n    // browsers, consider using the `formdata-submitter-polyfill` package\n    if (!isFormDataSubmitterSupported()) {\n      let {\n        name,\n        type,\n        value\n      } = target;\n      if (type === \"image\") {\n        let prefix = name ? name + \".\" : \"\";\n        formData.append(prefix + \"x\", \"0\");\n        formData.append(prefix + \"y\", \"0\");\n      } else if (name) {\n        formData.append(name, value);\n      }\n    }\n  } else if (isHtmlElement(target)) {\n    throw new Error(\"Cannot submit element that is not <form>, <button>, or \" + \"<input type=\\\"submit|image\\\">\");\n  } else {\n    method = defaultMethod;\n    action = null;\n    encType = defaultEncType;\n    body = target;\n  }\n  // Send body for <Form encType=\"text/plain\" so we encode it into text\n  if (formData && encType === \"text/plain\") {\n    body = formData;\n    formData = undefined;\n  }\n  return {\n    action,\n    method: method.toLowerCase(),\n    encType,\n    formData,\n    body\n  };\n}\n\nconst _excluded = [\"onClick\", \"relative\", \"reloadDocument\", \"replace\", \"state\", \"target\", \"to\", \"preventScrollReset\", \"viewTransition\"],\n  _excluded2 = [\"aria-current\", \"caseSensitive\", \"className\", \"end\", \"style\", \"to\", \"viewTransition\", \"children\"],\n  _excluded3 = [\"fetcherKey\", \"navigate\", \"reloadDocument\", \"replace\", \"state\", \"method\", \"action\", \"onSubmit\", \"relative\", \"preventScrollReset\", \"viewTransition\"];\n// HEY YOU! DON'T TOUCH THIS VARIABLE!\n//\n// It is replaced with the proper version at build time via a babel plugin in\n// the rollup config.\n//\n// Export a global property onto the window for React Router detection by the\n// Core Web Vitals Technology Report.  This way they can configure the `wappalyzer`\n// to detect and properly classify live websites as being built with React Router:\n// https://github.com/HTTPArchive/wappalyzer/blob/main/src/technologies/r.json\nconst REACT_ROUTER_VERSION = \"6\";\ntry {\n  window.__reactRouterVersion = REACT_ROUTER_VERSION;\n} catch (e) {\n  // no-op\n}\nfunction createBrowserRouter(routes, opts) {\n  return createRouter({\n    basename: opts == null ? void 0 : opts.basename,\n    future: _extends({}, opts == null ? void 0 : opts.future, {\n      v7_prependBasename: true\n    }),\n    history: createBrowserHistory({\n      window: opts == null ? void 0 : opts.window\n    }),\n    hydrationData: (opts == null ? void 0 : opts.hydrationData) || parseHydrationData(),\n    routes,\n    mapRouteProperties: UNSAFE_mapRouteProperties,\n    dataStrategy: opts == null ? void 0 : opts.dataStrategy,\n    patchRoutesOnNavigation: opts == null ? void 0 : opts.patchRoutesOnNavigation,\n    window: opts == null ? void 0 : opts.window\n  }).initialize();\n}\nfunction createHashRouter(routes, opts) {\n  return createRouter({\n    basename: opts == null ? void 0 : opts.basename,\n    future: _extends({}, opts == null ? void 0 : opts.future, {\n      v7_prependBasename: true\n    }),\n    history: createHashHistory({\n      window: opts == null ? void 0 : opts.window\n    }),\n    hydrationData: (opts == null ? void 0 : opts.hydrationData) || parseHydrationData(),\n    routes,\n    mapRouteProperties: UNSAFE_mapRouteProperties,\n    dataStrategy: opts == null ? void 0 : opts.dataStrategy,\n    patchRoutesOnNavigation: opts == null ? void 0 : opts.patchRoutesOnNavigation,\n    window: opts == null ? void 0 : opts.window\n  }).initialize();\n}\nfunction parseHydrationData() {\n  var _window;\n  let state = (_window = window) == null ? void 0 : _window.__staticRouterHydrationData;\n  if (state && state.errors) {\n    state = _extends({}, state, {\n      errors: deserializeErrors(state.errors)\n    });\n  }\n  return state;\n}\nfunction deserializeErrors(errors) {\n  if (!errors) return null;\n  let entries = Object.entries(errors);\n  let serialized = {};\n  for (let [key, val] of entries) {\n    // Hey you!  If you change this, please change the corresponding logic in\n    // serializeErrors in react-router-dom/server.tsx :)\n    if (val && val.__type === \"RouteErrorResponse\") {\n      serialized[key] = new UNSAFE_ErrorResponseImpl(val.status, val.statusText, val.data, val.internal === true);\n    } else if (val && val.__type === \"Error\") {\n      // Attempt to reconstruct the right type of Error (i.e., ReferenceError)\n      if (val.__subType) {\n        let ErrorConstructor = window[val.__subType];\n        if (typeof ErrorConstructor === \"function\") {\n          try {\n            // @ts-expect-error\n            let error = new ErrorConstructor(val.message);\n            // Wipe away the client-side stack trace.  Nothing to fill it in with\n            // because we don't serialize SSR stack traces for security reasons\n            error.stack = \"\";\n            serialized[key] = error;\n          } catch (e) {\n            // no-op - fall through and create a normal Error\n          }\n        }\n      }\n      if (serialized[key] == null) {\n        let error = new Error(val.message);\n        // Wipe away the client-side stack trace.  Nothing to fill it in with\n        // because we don't serialize SSR stack traces for security reasons\n        error.stack = \"\";\n        serialized[key] = error;\n      }\n    } else {\n      serialized[key] = val;\n    }\n  }\n  return serialized;\n}\nconst ViewTransitionContext = /*#__PURE__*/React.createContext({\n  isTransitioning: false\n});\nif (process.env.NODE_ENV !== \"production\") {\n  ViewTransitionContext.displayName = \"ViewTransition\";\n}\nconst FetchersContext = /*#__PURE__*/React.createContext(new Map());\nif (process.env.NODE_ENV !== \"production\") {\n  FetchersContext.displayName = \"Fetchers\";\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region Components\n////////////////////////////////////////////////////////////////////////////////\n/**\n  Webpack + React 17 fails to compile on any of the following because webpack\n  complains that `startTransition` doesn't exist in `React`:\n  * import { startTransition } from \"react\"\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n  Moving it to a constant such as the following solves the Webpack/React 17 issue:\n  * import * as React from from \"react\";\n    const START_TRANSITION = \"startTransition\";\n    START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n  However, that introduces webpack/terser minification issues in production builds\n  in React 18 where minification/obfuscation ends up removing the call of\n  React.startTransition entirely from the first half of the ternary.  Grabbing\n  this exported reference once up front resolves that issue.\n\n  See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\nconst FLUSH_SYNC = \"flushSync\";\nconst flushSyncImpl = ReactDOM[FLUSH_SYNC];\nconst USE_ID = \"useId\";\nconst useIdImpl = React[USE_ID];\nfunction startTransitionSafe(cb) {\n  if (startTransitionImpl) {\n    startTransitionImpl(cb);\n  } else {\n    cb();\n  }\n}\nfunction flushSyncSafe(cb) {\n  if (flushSyncImpl) {\n    flushSyncImpl(cb);\n  } else {\n    cb();\n  }\n}\nclass Deferred {\n  constructor() {\n    this.status = \"pending\";\n    this.promise = new Promise((resolve, reject) => {\n      this.resolve = value => {\n        if (this.status === \"pending\") {\n          this.status = \"resolved\";\n          resolve(value);\n        }\n      };\n      this.reject = reason => {\n        if (this.status === \"pending\") {\n          this.status = \"rejected\";\n          reject(reason);\n        }\n      };\n    });\n  }\n}\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nfunction RouterProvider(_ref) {\n  let {\n    fallbackElement,\n    router,\n    future\n  } = _ref;\n  let [state, setStateImpl] = React.useState(router.state);\n  let [pendingState, setPendingState] = React.useState();\n  let [vtContext, setVtContext] = React.useState({\n    isTransitioning: false\n  });\n  let [renderDfd, setRenderDfd] = React.useState();\n  let [transition, setTransition] = React.useState();\n  let [interruption, setInterruption] = React.useState();\n  let fetcherData = React.useRef(new Map());\n  let {\n    v7_startTransition\n  } = future || {};\n  let optInStartTransition = React.useCallback(cb => {\n    if (v7_startTransition) {\n      startTransitionSafe(cb);\n    } else {\n      cb();\n    }\n  }, [v7_startTransition]);\n  let setState = React.useCallback((newState, _ref2) => {\n    let {\n      deletedFetchers,\n      flushSync: flushSync,\n      viewTransitionOpts: viewTransitionOpts\n    } = _ref2;\n    newState.fetchers.forEach((fetcher, key) => {\n      if (fetcher.data !== undefined) {\n        fetcherData.current.set(key, fetcher.data);\n      }\n    });\n    deletedFetchers.forEach(key => fetcherData.current.delete(key));\n    let isViewTransitionUnavailable = router.window == null || router.window.document == null || typeof router.window.document.startViewTransition !== \"function\";\n    // If this isn't a view transition or it's not available in this browser,\n    // just update and be done with it\n    if (!viewTransitionOpts || isViewTransitionUnavailable) {\n      if (flushSync) {\n        flushSyncSafe(() => setStateImpl(newState));\n      } else {\n        optInStartTransition(() => setStateImpl(newState));\n      }\n      return;\n    }\n    // flushSync + startViewTransition\n    if (flushSync) {\n      // Flush through the context to mark DOM elements as transition=ing\n      flushSyncSafe(() => {\n        // Cancel any pending transitions\n        if (transition) {\n          renderDfd && renderDfd.resolve();\n          transition.skipTransition();\n        }\n        setVtContext({\n          isTransitioning: true,\n          flushSync: true,\n          currentLocation: viewTransitionOpts.currentLocation,\n          nextLocation: viewTransitionOpts.nextLocation\n        });\n      });\n      // Update the DOM\n      let t = router.window.document.startViewTransition(() => {\n        flushSyncSafe(() => setStateImpl(newState));\n      });\n      // Clean up after the animation completes\n      t.finished.finally(() => {\n        flushSyncSafe(() => {\n          setRenderDfd(undefined);\n          setTransition(undefined);\n          setPendingState(undefined);\n          setVtContext({\n            isTransitioning: false\n          });\n        });\n      });\n      flushSyncSafe(() => setTransition(t));\n      return;\n    }\n    // startTransition + startViewTransition\n    if (transition) {\n      // Interrupting an in-progress transition, cancel and let everything flush\n      // out, and then kick off a new transition from the interruption state\n      renderDfd && renderDfd.resolve();\n      transition.skipTransition();\n      setInterruption({\n        state: newState,\n        currentLocation: viewTransitionOpts.currentLocation,\n        nextLocation: viewTransitionOpts.nextLocation\n      });\n    } else {\n      // Completed navigation update with opted-in view transitions, let 'er rip\n      setPendingState(newState);\n      setVtContext({\n        isTransitioning: true,\n        flushSync: false,\n        currentLocation: viewTransitionOpts.currentLocation,\n        nextLocation: viewTransitionOpts.nextLocation\n      });\n    }\n  }, [router.window, transition, renderDfd, fetcherData, optInStartTransition]);\n  // Need to use a layout effect here so we are subscribed early enough to\n  // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n  React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n  // When we start a view transition, create a Deferred we can use for the\n  // eventual \"completed\" render\n  React.useEffect(() => {\n    if (vtContext.isTransitioning && !vtContext.flushSync) {\n      setRenderDfd(new Deferred());\n    }\n  }, [vtContext]);\n  // Once the deferred is created, kick off startViewTransition() to update the\n  // DOM and then wait on the Deferred to resolve (indicating the DOM update has\n  // happened)\n  React.useEffect(() => {\n    if (renderDfd && pendingState && router.window) {\n      let newState = pendingState;\n      let renderPromise = renderDfd.promise;\n      let transition = router.window.document.startViewTransition(async () => {\n        optInStartTransition(() => setStateImpl(newState));\n        await renderPromise;\n      });\n      transition.finished.finally(() => {\n        setRenderDfd(undefined);\n        setTransition(undefined);\n        setPendingState(undefined);\n        setVtContext({\n          isTransitioning: false\n        });\n      });\n      setTransition(transition);\n    }\n  }, [optInStartTransition, pendingState, renderDfd, router.window]);\n  // When the new location finally renders and is committed to the DOM, this\n  // effect will run to resolve the transition\n  React.useEffect(() => {\n    if (renderDfd && pendingState && state.location.key === pendingState.location.key) {\n      renderDfd.resolve();\n    }\n  }, [renderDfd, transition, state.location, pendingState]);\n  // If we get interrupted with a new navigation during a transition, we skip\n  // the active transition, let it cleanup, then kick it off again here\n  React.useEffect(() => {\n    if (!vtContext.isTransitioning && interruption) {\n      setPendingState(interruption.state);\n      setVtContext({\n        isTransitioning: true,\n        flushSync: false,\n        currentLocation: interruption.currentLocation,\n        nextLocation: interruption.nextLocation\n      });\n      setInterruption(undefined);\n    }\n  }, [vtContext.isTransitioning, interruption]);\n  React.useEffect(() => {\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(fallbackElement == null || !router.future.v7_partialHydration, \"`<RouterProvider fallbackElement>` is deprecated when using \" + \"`v7_partialHydration`, use a `HydrateFallback` component instead\") : void 0;\n    // Only log this once on initial mount\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n  let navigator = React.useMemo(() => {\n    return {\n      createHref: router.createHref,\n      encodeLocation: router.encodeLocation,\n      go: n => router.navigate(n),\n      push: (to, state, opts) => router.navigate(to, {\n        state,\n        preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n      }),\n      replace: (to, state, opts) => router.navigate(to, {\n        replace: true,\n        state,\n        preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n      })\n    };\n  }, [router]);\n  let basename = router.basename || \"/\";\n  let dataRouterContext = React.useMemo(() => ({\n    router,\n    navigator,\n    static: false,\n    basename\n  }), [router, navigator, basename]);\n  let routerFuture = React.useMemo(() => ({\n    v7_relativeSplatPath: router.future.v7_relativeSplatPath\n  }), [router.future.v7_relativeSplatPath]);\n  React.useEffect(() => UNSAFE_logV6DeprecationWarnings(future, router.future), [future, router.future]);\n  // The fragment and {null} here are important!  We need them to keep React 18's\n  // useId happy when we are server-rendering since we may have a <script> here\n  // containing the hydrated server-side staticContext (from StaticRouterProvider).\n  // useId relies on the component tree structure to generate deterministic id's\n  // so we need to ensure it remains the same on the client even though\n  // we don't need the <script> tag\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(UNSAFE_DataRouterContext.Provider, {\n    value: dataRouterContext\n  }, /*#__PURE__*/React.createElement(UNSAFE_DataRouterStateContext.Provider, {\n    value: state\n  }, /*#__PURE__*/React.createElement(FetchersContext.Provider, {\n    value: fetcherData.current\n  }, /*#__PURE__*/React.createElement(ViewTransitionContext.Provider, {\n    value: vtContext\n  }, /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    location: state.location,\n    navigationType: state.historyAction,\n    navigator: navigator,\n    future: routerFuture\n  }, state.initialized || router.future.v7_partialHydration ? /*#__PURE__*/React.createElement(MemoizedDataRoutes, {\n    routes: router.routes,\n    future: router.future,\n    state: state\n  }) : fallbackElement))))), null);\n}\n// Memoize to avoid re-renders when updating `ViewTransitionContext`\nconst MemoizedDataRoutes = /*#__PURE__*/React.memo(DataRoutes);\nfunction DataRoutes(_ref3) {\n  let {\n    routes,\n    future,\n    state\n  } = _ref3;\n  return UNSAFE_useRoutesImpl(routes, undefined, state, future);\n}\n/**\n * A `<Router>` for use in web browsers. Provides the cleanest URLs.\n */\nfunction BrowserRouter(_ref4) {\n  let {\n    basename,\n    children,\n    future,\n    window\n  } = _ref4;\n  let historyRef = React.useRef();\n  if (historyRef.current == null) {\n    historyRef.current = createBrowserHistory({\n      window,\n      v5Compat: true\n    });\n  }\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location\n  });\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n  }, [setStateImpl, v7_startTransition]);\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  React.useEffect(() => UNSAFE_logV6DeprecationWarnings(future), [future]);\n  return /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    children: children,\n    location: state.location,\n    navigationType: state.action,\n    navigator: history,\n    future: future\n  });\n}\n/**\n * A `<Router>` for use in web browsers. Stores the location in the hash\n * portion of the URL so it is not sent to the server.\n */\nfunction HashRouter(_ref5) {\n  let {\n    basename,\n    children,\n    future,\n    window\n  } = _ref5;\n  let historyRef = React.useRef();\n  if (historyRef.current == null) {\n    historyRef.current = createHashHistory({\n      window,\n      v5Compat: true\n    });\n  }\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location\n  });\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n  }, [setStateImpl, v7_startTransition]);\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  React.useEffect(() => UNSAFE_logV6DeprecationWarnings(future), [future]);\n  return /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    children: children,\n    location: state.location,\n    navigationType: state.action,\n    navigator: history,\n    future: future\n  });\n}\n/**\n * A `<Router>` that accepts a pre-instantiated history object. It's important\n * to note that using your own history object is highly discouraged and may add\n * two versions of the history library to your bundles unless you use the same\n * version of the history library that React Router uses internally.\n */\nfunction HistoryRouter(_ref6) {\n  let {\n    basename,\n    children,\n    future,\n    history\n  } = _ref6;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location\n  });\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n  }, [setStateImpl, v7_startTransition]);\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  React.useEffect(() => UNSAFE_logV6DeprecationWarnings(future), [future]);\n  return /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    children: children,\n    location: state.location,\n    navigationType: state.action,\n    navigator: history,\n    future: future\n  });\n}\nif (process.env.NODE_ENV !== \"production\") {\n  HistoryRouter.displayName = \"unstable_HistoryRouter\";\n}\nconst isBrowser = typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.document.createElement !== \"undefined\";\nconst ABSOLUTE_URL_REGEX$1 = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n/**\n * The public API for rendering a history-aware `<a>`.\n */\nconst Link = /*#__PURE__*/React.forwardRef(function LinkWithRef(_ref7, ref) {\n  let {\n      onClick,\n      relative,\n      reloadDocument,\n      replace,\n      state,\n      target,\n      to,\n      preventScrollReset,\n      viewTransition\n    } = _ref7,\n    rest = _objectWithoutPropertiesLoose(_ref7, _excluded);\n  let {\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  // Rendered into <a href> for absolute URLs\n  let absoluteHref;\n  let isExternal = false;\n  if (typeof to === \"string\" && ABSOLUTE_URL_REGEX$1.test(to)) {\n    // Render the absolute href server- and client-side\n    absoluteHref = to;\n    // Only check for external origins client-side\n    if (isBrowser) {\n      try {\n        let currentUrl = new URL(window.location.href);\n        let targetUrl = to.startsWith(\"//\") ? new URL(currentUrl.protocol + to) : new URL(to);\n        let path = stripBasename(targetUrl.pathname, basename);\n        if (targetUrl.origin === currentUrl.origin && path != null) {\n          // Strip the protocol/origin/basename for same-origin absolute URLs\n          to = path + targetUrl.search + targetUrl.hash;\n        } else {\n          isExternal = true;\n        }\n      } catch (e) {\n        // We can't do external URL detection without a valid URL\n        process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"<Link to=\\\"\" + to + \"\\\"> contains an invalid URL which will probably break \" + \"when clicked - please update to a valid URL path.\") : void 0;\n      }\n    }\n  }\n  // Rendered into <a href> for relative URLs\n  let href = useHref(to, {\n    relative\n  });\n  let internalOnClick = useLinkClickHandler(to, {\n    replace,\n    state,\n    target,\n    preventScrollReset,\n    relative,\n    viewTransition\n  });\n  function handleClick(event) {\n    if (onClick) onClick(event);\n    if (!event.defaultPrevented) {\n      internalOnClick(event);\n    }\n  }\n  return (\n    /*#__PURE__*/\n    // eslint-disable-next-line jsx-a11y/anchor-has-content\n    React.createElement(\"a\", _extends({}, rest, {\n      href: absoluteHref || href,\n      onClick: isExternal || reloadDocument ? onClick : handleClick,\n      ref: ref,\n      target: target\n    }))\n  );\n});\nif (process.env.NODE_ENV !== \"production\") {\n  Link.displayName = \"Link\";\n}\n/**\n * A `<Link>` wrapper that knows if it's \"active\" or not.\n */\nconst NavLink = /*#__PURE__*/React.forwardRef(function NavLinkWithRef(_ref8, ref) {\n  let {\n      \"aria-current\": ariaCurrentProp = \"page\",\n      caseSensitive = false,\n      className: classNameProp = \"\",\n      end = false,\n      style: styleProp,\n      to,\n      viewTransition,\n      children\n    } = _ref8,\n    rest = _objectWithoutPropertiesLoose(_ref8, _excluded2);\n  let path = useResolvedPath(to, {\n    relative: rest.relative\n  });\n  let location = useLocation();\n  let routerState = React.useContext(UNSAFE_DataRouterStateContext);\n  let {\n    navigator,\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  let isTransitioning = routerState != null &&\n  // Conditional usage is OK here because the usage of a data router is static\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  useViewTransitionState(path) && viewTransition === true;\n  let toPathname = navigator.encodeLocation ? navigator.encodeLocation(path).pathname : path.pathname;\n  let locationPathname = location.pathname;\n  let nextLocationPathname = routerState && routerState.navigation && routerState.navigation.location ? routerState.navigation.location.pathname : null;\n  if (!caseSensitive) {\n    locationPathname = locationPathname.toLowerCase();\n    nextLocationPathname = nextLocationPathname ? nextLocationPathname.toLowerCase() : null;\n    toPathname = toPathname.toLowerCase();\n  }\n  if (nextLocationPathname && basename) {\n    nextLocationPathname = stripBasename(nextLocationPathname, basename) || nextLocationPathname;\n  }\n  // If the `to` has a trailing slash, look at that exact spot.  Otherwise,\n  // we're looking for a slash _after_ what's in `to`.  For example:\n  //\n  // <NavLink to=\"/users\"> and <NavLink to=\"/users/\">\n  // both want to look for a / at index 6 to match URL `/users/matt`\n  const endSlashPosition = toPathname !== \"/\" && toPathname.endsWith(\"/\") ? toPathname.length - 1 : toPathname.length;\n  let isActive = locationPathname === toPathname || !end && locationPathname.startsWith(toPathname) && locationPathname.charAt(endSlashPosition) === \"/\";\n  let isPending = nextLocationPathname != null && (nextLocationPathname === toPathname || !end && nextLocationPathname.startsWith(toPathname) && nextLocationPathname.charAt(toPathname.length) === \"/\");\n  let renderProps = {\n    isActive,\n    isPending,\n    isTransitioning\n  };\n  let ariaCurrent = isActive ? ariaCurrentProp : undefined;\n  let className;\n  if (typeof classNameProp === \"function\") {\n    className = classNameProp(renderProps);\n  } else {\n    // If the className prop is not a function, we use a default `active`\n    // class for <NavLink />s that are active. In v5 `active` was the default\n    // value for `activeClassName`, but we are removing that API and can still\n    // use the old default behavior for a cleaner upgrade path and keep the\n    // simple styling rules working as they currently do.\n    className = [classNameProp, isActive ? \"active\" : null, isPending ? \"pending\" : null, isTransitioning ? \"transitioning\" : null].filter(Boolean).join(\" \");\n  }\n  let style = typeof styleProp === \"function\" ? styleProp(renderProps) : styleProp;\n  return /*#__PURE__*/React.createElement(Link, _extends({}, rest, {\n    \"aria-current\": ariaCurrent,\n    className: className,\n    ref: ref,\n    style: style,\n    to: to,\n    viewTransition: viewTransition\n  }), typeof children === \"function\" ? children(renderProps) : children);\n});\nif (process.env.NODE_ENV !== \"production\") {\n  NavLink.displayName = \"NavLink\";\n}\n/**\n * A `@remix-run/router`-aware `<form>`. It behaves like a normal form except\n * that the interaction with the server is with `fetch` instead of new document\n * requests, allowing components to add nicer UX to the page as the form is\n * submitted and returns with data.\n */\nconst Form = /*#__PURE__*/React.forwardRef((_ref9, forwardedRef) => {\n  let {\n      fetcherKey,\n      navigate,\n      reloadDocument,\n      replace,\n      state,\n      method = defaultMethod,\n      action,\n      onSubmit,\n      relative,\n      preventScrollReset,\n      viewTransition\n    } = _ref9,\n    props = _objectWithoutPropertiesLoose(_ref9, _excluded3);\n  let submit = useSubmit();\n  let formAction = useFormAction(action, {\n    relative\n  });\n  let formMethod = method.toLowerCase() === \"get\" ? \"get\" : \"post\";\n  let submitHandler = event => {\n    onSubmit && onSubmit(event);\n    if (event.defaultPrevented) return;\n    event.preventDefault();\n    let submitter = event.nativeEvent.submitter;\n    let submitMethod = (submitter == null ? void 0 : submitter.getAttribute(\"formmethod\")) || method;\n    submit(submitter || event.currentTarget, {\n      fetcherKey,\n      method: submitMethod,\n      navigate,\n      replace,\n      state,\n      relative,\n      preventScrollReset,\n      viewTransition\n    });\n  };\n  return /*#__PURE__*/React.createElement(\"form\", _extends({\n    ref: forwardedRef,\n    method: formMethod,\n    action: formAction,\n    onSubmit: reloadDocument ? onSubmit : submitHandler\n  }, props));\n});\nif (process.env.NODE_ENV !== \"production\") {\n  Form.displayName = \"Form\";\n}\n/**\n * This component will emulate the browser's scroll restoration on location\n * changes.\n */\nfunction ScrollRestoration(_ref10) {\n  let {\n    getKey,\n    storageKey\n  } = _ref10;\n  useScrollRestoration({\n    getKey,\n    storageKey\n  });\n  return null;\n}\nif (process.env.NODE_ENV !== \"production\") {\n  ScrollRestoration.displayName = \"ScrollRestoration\";\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region Hooks\n////////////////////////////////////////////////////////////////////////////////\nvar DataRouterHook;\n(function (DataRouterHook) {\n  DataRouterHook[\"UseScrollRestoration\"] = \"useScrollRestoration\";\n  DataRouterHook[\"UseSubmit\"] = \"useSubmit\";\n  DataRouterHook[\"UseSubmitFetcher\"] = \"useSubmitFetcher\";\n  DataRouterHook[\"UseFetcher\"] = \"useFetcher\";\n  DataRouterHook[\"useViewTransitionState\"] = \"useViewTransitionState\";\n})(DataRouterHook || (DataRouterHook = {}));\nvar DataRouterStateHook;\n(function (DataRouterStateHook) {\n  DataRouterStateHook[\"UseFetcher\"] = \"useFetcher\";\n  DataRouterStateHook[\"UseFetchers\"] = \"useFetchers\";\n  DataRouterStateHook[\"UseScrollRestoration\"] = \"useScrollRestoration\";\n})(DataRouterStateHook || (DataRouterStateHook = {}));\n// Internal hooks\nfunction getDataRouterConsoleError(hookName) {\n  return hookName + \" must be used within a data router.  See https://reactrouter.com/v6/routers/picking-a-router.\";\n}\nfunction useDataRouterContext(hookName) {\n  let ctx = React.useContext(UNSAFE_DataRouterContext);\n  !ctx ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return ctx;\n}\nfunction useDataRouterState(hookName) {\n  let state = React.useContext(UNSAFE_DataRouterStateContext);\n  !state ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return state;\n}\n// External hooks\n/**\n * Handles the click behavior for router `<Link>` components. This is useful if\n * you need to create custom `<Link>` components with the same click behavior we\n * use in our exported `<Link>`.\n */\nfunction useLinkClickHandler(to, _temp) {\n  let {\n    target,\n    replace: replaceProp,\n    state,\n    preventScrollReset,\n    relative,\n    viewTransition\n  } = _temp === void 0 ? {} : _temp;\n  let navigate = useNavigate();\n  let location = useLocation();\n  let path = useResolvedPath(to, {\n    relative\n  });\n  return React.useCallback(event => {\n    if (shouldProcessLinkClick(event, target)) {\n      event.preventDefault();\n      // If the URL hasn't changed, a regular <a> will do a replace instead of\n      // a push, so do the same here unless the replace prop is explicitly set\n      let replace = replaceProp !== undefined ? replaceProp : createPath(location) === createPath(path);\n      navigate(to, {\n        replace,\n        state,\n        preventScrollReset,\n        relative,\n        viewTransition\n      });\n    }\n  }, [location, navigate, path, replaceProp, state, target, to, preventScrollReset, relative, viewTransition]);\n}\n/**\n * A convenient wrapper for reading and writing search parameters via the\n * URLSearchParams interface.\n */\nfunction useSearchParams(defaultInit) {\n  process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(typeof URLSearchParams !== \"undefined\", \"You cannot use the `useSearchParams` hook in a browser that does not \" + \"support the URLSearchParams API. If you need to support Internet \" + \"Explorer 11, we recommend you load a polyfill such as \" + \"https://github.com/ungap/url-search-params.\") : void 0;\n  let defaultSearchParamsRef = React.useRef(createSearchParams(defaultInit));\n  let hasSetSearchParamsRef = React.useRef(false);\n  let location = useLocation();\n  let searchParams = React.useMemo(() =>\n  // Only merge in the defaults if we haven't yet called setSearchParams.\n  // Once we call that we want those to take precedence, otherwise you can't\n  // remove a param with setSearchParams({}) if it has an initial value\n  getSearchParamsForLocation(location.search, hasSetSearchParamsRef.current ? null : defaultSearchParamsRef.current), [location.search]);\n  let navigate = useNavigate();\n  let setSearchParams = React.useCallback((nextInit, navigateOptions) => {\n    const newSearchParams = createSearchParams(typeof nextInit === \"function\" ? nextInit(searchParams) : nextInit);\n    hasSetSearchParamsRef.current = true;\n    navigate(\"?\" + newSearchParams, navigateOptions);\n  }, [navigate, searchParams]);\n  return [searchParams, setSearchParams];\n}\nfunction validateClientSideSubmission() {\n  if (typeof document === \"undefined\") {\n    throw new Error(\"You are calling submit during the server render. \" + \"Try calling submit within a `useEffect` or callback instead.\");\n  }\n}\nlet fetcherId = 0;\nlet getUniqueFetcherId = () => \"__\" + String(++fetcherId) + \"__\";\n/**\n * Returns a function that may be used to programmatically submit a form (or\n * some arbitrary data) to the server.\n */\nfunction useSubmit() {\n  let {\n    router\n  } = useDataRouterContext(DataRouterHook.UseSubmit);\n  let {\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  let currentRouteId = UNSAFE_useRouteId();\n  return React.useCallback(function (target, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    validateClientSideSubmission();\n    let {\n      action,\n      method,\n      encType,\n      formData,\n      body\n    } = getFormSubmissionInfo(target, basename);\n    if (options.navigate === false) {\n      let key = options.fetcherKey || getUniqueFetcherId();\n      router.fetch(key, currentRouteId, options.action || action, {\n        preventScrollReset: options.preventScrollReset,\n        formData,\n        body,\n        formMethod: options.method || method,\n        formEncType: options.encType || encType,\n        flushSync: options.flushSync\n      });\n    } else {\n      router.navigate(options.action || action, {\n        preventScrollReset: options.preventScrollReset,\n        formData,\n        body,\n        formMethod: options.method || method,\n        formEncType: options.encType || encType,\n        replace: options.replace,\n        state: options.state,\n        fromRouteId: currentRouteId,\n        flushSync: options.flushSync,\n        viewTransition: options.viewTransition\n      });\n    }\n  }, [router, basename, currentRouteId]);\n}\n// v7: Eventually we should deprecate this entirely in favor of using the\n// router method directly?\nfunction useFormAction(action, _temp2) {\n  let {\n    relative\n  } = _temp2 === void 0 ? {} : _temp2;\n  let {\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  let routeContext = React.useContext(UNSAFE_RouteContext);\n  !routeContext ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFormAction must be used inside a RouteContext\") : UNSAFE_invariant(false) : void 0;\n  let [match] = routeContext.matches.slice(-1);\n  // Shallow clone path so we can modify it below, otherwise we modify the\n  // object referenced by useMemo inside useResolvedPath\n  let path = _extends({}, useResolvedPath(action ? action : \".\", {\n    relative\n  }));\n  // If no action was specified, browsers will persist current search params\n  // when determining the path, so match that behavior\n  // https://github.com/remix-run/remix/issues/927\n  let location = useLocation();\n  if (action == null) {\n    // Safe to write to this directly here since if action was undefined, we\n    // would have called useResolvedPath(\".\") which will never include a search\n    path.search = location.search;\n    // When grabbing search params from the URL, remove any included ?index param\n    // since it might not apply to our contextual route.  We add it back based\n    // on match.route.index below\n    let params = new URLSearchParams(path.search);\n    let indexValues = params.getAll(\"index\");\n    let hasNakedIndexParam = indexValues.some(v => v === \"\");\n    if (hasNakedIndexParam) {\n      params.delete(\"index\");\n      indexValues.filter(v => v).forEach(v => params.append(\"index\", v));\n      let qs = params.toString();\n      path.search = qs ? \"?\" + qs : \"\";\n    }\n  }\n  if ((!action || action === \".\") && match.route.index) {\n    path.search = path.search ? path.search.replace(/^\\?/, \"?index&\") : \"?index\";\n  }\n  // If we're operating within a basename, prepend it to the pathname prior\n  // to creating the form action.  If this is a root navigation, then just use\n  // the raw basename which allows the basename to have full control over the\n  // presence of a trailing slash on root actions\n  if (basename !== \"/\") {\n    path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n  }\n  return createPath(path);\n}\n// TODO: (v7) Change the useFetcher generic default from `any` to `unknown`\n/**\n * Interacts with route loaders and actions without causing a navigation. Great\n * for any interaction that stays on the same page.\n */\nfunction useFetcher(_temp3) {\n  var _route$matches;\n  let {\n    key\n  } = _temp3 === void 0 ? {} : _temp3;\n  let {\n    router\n  } = useDataRouterContext(DataRouterHook.UseFetcher);\n  let state = useDataRouterState(DataRouterStateHook.UseFetcher);\n  let fetcherData = React.useContext(FetchersContext);\n  let route = React.useContext(UNSAFE_RouteContext);\n  let routeId = (_route$matches = route.matches[route.matches.length - 1]) == null ? void 0 : _route$matches.route.id;\n  !fetcherData ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFetcher must be used inside a FetchersContext\") : UNSAFE_invariant(false) : void 0;\n  !route ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFetcher must be used inside a RouteContext\") : UNSAFE_invariant(false) : void 0;\n  !(routeId != null) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFetcher can only be used on routes that contain a unique \\\"id\\\"\") : UNSAFE_invariant(false) : void 0;\n  // Fetcher key handling\n  // OK to call conditionally to feature detect `useId`\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  let defaultKey = useIdImpl ? useIdImpl() : \"\";\n  let [fetcherKey, setFetcherKey] = React.useState(key || defaultKey);\n  if (key && key !== fetcherKey) {\n    setFetcherKey(key);\n  } else if (!fetcherKey) {\n    // We will only fall through here when `useId` is not available\n    setFetcherKey(getUniqueFetcherId());\n  }\n  // Registration/cleanup\n  React.useEffect(() => {\n    router.getFetcher(fetcherKey);\n    return () => {\n      // Tell the router we've unmounted - if v7_fetcherPersist is enabled this\n      // will not delete immediately but instead queue up a delete after the\n      // fetcher returns to an `idle` state\n      router.deleteFetcher(fetcherKey);\n    };\n  }, [router, fetcherKey]);\n  // Fetcher additions\n  let load = React.useCallback((href, opts) => {\n    !routeId ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"No routeId available for fetcher.load()\") : UNSAFE_invariant(false) : void 0;\n    router.fetch(fetcherKey, routeId, href, opts);\n  }, [fetcherKey, routeId, router]);\n  let submitImpl = useSubmit();\n  let submit = React.useCallback((target, opts) => {\n    submitImpl(target, _extends({}, opts, {\n      navigate: false,\n      fetcherKey\n    }));\n  }, [fetcherKey, submitImpl]);\n  let FetcherForm = React.useMemo(() => {\n    let FetcherForm = /*#__PURE__*/React.forwardRef((props, ref) => {\n      return /*#__PURE__*/React.createElement(Form, _extends({}, props, {\n        navigate: false,\n        fetcherKey: fetcherKey,\n        ref: ref\n      }));\n    });\n    if (process.env.NODE_ENV !== \"production\") {\n      FetcherForm.displayName = \"fetcher.Form\";\n    }\n    return FetcherForm;\n  }, [fetcherKey]);\n  // Exposed FetcherWithComponents\n  let fetcher = state.fetchers.get(fetcherKey) || IDLE_FETCHER;\n  let data = fetcherData.get(fetcherKey);\n  let fetcherWithComponents = React.useMemo(() => _extends({\n    Form: FetcherForm,\n    submit,\n    load\n  }, fetcher, {\n    data\n  }), [FetcherForm, submit, load, fetcher, data]);\n  return fetcherWithComponents;\n}\n/**\n * Provides all fetchers currently on the page. Useful for layouts and parent\n * routes that need to provide pending/optimistic UI regarding the fetch.\n */\nfunction useFetchers() {\n  let state = useDataRouterState(DataRouterStateHook.UseFetchers);\n  return Array.from(state.fetchers.entries()).map(_ref11 => {\n    let [key, fetcher] = _ref11;\n    return _extends({}, fetcher, {\n      key\n    });\n  });\n}\nconst SCROLL_RESTORATION_STORAGE_KEY = \"react-router-scroll-positions\";\nlet savedScrollPositions = {};\n/**\n * When rendered inside a RouterProvider, will restore scroll positions on navigations\n */\nfunction useScrollRestoration(_temp4) {\n  let {\n    getKey,\n    storageKey\n  } = _temp4 === void 0 ? {} : _temp4;\n  let {\n    router\n  } = useDataRouterContext(DataRouterHook.UseScrollRestoration);\n  let {\n    restoreScrollPosition,\n    preventScrollReset\n  } = useDataRouterState(DataRouterStateHook.UseScrollRestoration);\n  let {\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  let location = useLocation();\n  let matches = useMatches();\n  let navigation = useNavigation();\n  // Trigger manual scroll restoration while we're active\n  React.useEffect(() => {\n    window.history.scrollRestoration = \"manual\";\n    return () => {\n      window.history.scrollRestoration = \"auto\";\n    };\n  }, []);\n  // Save positions on pagehide\n  usePageHide(React.useCallback(() => {\n    if (navigation.state === \"idle\") {\n      let key = (getKey ? getKey(location, matches) : null) || location.key;\n      savedScrollPositions[key] = window.scrollY;\n    }\n    try {\n      sessionStorage.setItem(storageKey || SCROLL_RESTORATION_STORAGE_KEY, JSON.stringify(savedScrollPositions));\n    } catch (error) {\n      process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (\" + error + \").\") : void 0;\n    }\n    window.history.scrollRestoration = \"auto\";\n  }, [storageKey, getKey, navigation.state, location, matches]));\n  // Read in any saved scroll locations\n  if (typeof document !== \"undefined\") {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      try {\n        let sessionPositions = sessionStorage.getItem(storageKey || SCROLL_RESTORATION_STORAGE_KEY);\n        if (sessionPositions) {\n          savedScrollPositions = JSON.parse(sessionPositions);\n        }\n      } catch (e) {\n        // no-op, use default empty object\n      }\n    }, [storageKey]);\n    // Enable scroll restoration in the router\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      let getKeyWithoutBasename = getKey && basename !== \"/\" ? (location, matches) => getKey( // Strip the basename to match useLocation()\n      _extends({}, location, {\n        pathname: stripBasename(location.pathname, basename) || location.pathname\n      }), matches) : getKey;\n      let disableScrollRestoration = router == null ? void 0 : router.enableScrollRestoration(savedScrollPositions, () => window.scrollY, getKeyWithoutBasename);\n      return () => disableScrollRestoration && disableScrollRestoration();\n    }, [router, basename, getKey]);\n    // Restore scrolling when state.restoreScrollPosition changes\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      // Explicit false means don't do anything (used for submissions)\n      if (restoreScrollPosition === false) {\n        return;\n      }\n      // been here before, scroll to it\n      if (typeof restoreScrollPosition === \"number\") {\n        window.scrollTo(0, restoreScrollPosition);\n        return;\n      }\n      // try to scroll to the hash\n      if (location.hash) {\n        let el = document.getElementById(decodeURIComponent(location.hash.slice(1)));\n        if (el) {\n          el.scrollIntoView();\n          return;\n        }\n      }\n      // Don't reset if this navigation opted out\n      if (preventScrollReset === true) {\n        return;\n      }\n      // otherwise go to the top on new locations\n      window.scrollTo(0, 0);\n    }, [location, restoreScrollPosition, preventScrollReset]);\n  }\n}\n/**\n * Setup a callback to be fired on the window's `beforeunload` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nfunction useBeforeUnload(callback, options) {\n  let {\n    capture\n  } = options || {};\n  React.useEffect(() => {\n    let opts = capture != null ? {\n      capture\n    } : undefined;\n    window.addEventListener(\"beforeunload\", callback, opts);\n    return () => {\n      window.removeEventListener(\"beforeunload\", callback, opts);\n    };\n  }, [callback, capture]);\n}\n/**\n * Setup a callback to be fired on the window's `pagehide` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes.  This event is better supported than beforeunload across browsers.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nfunction usePageHide(callback, options) {\n  let {\n    capture\n  } = options || {};\n  React.useEffect(() => {\n    let opts = capture != null ? {\n      capture\n    } : undefined;\n    window.addEventListener(\"pagehide\", callback, opts);\n    return () => {\n      window.removeEventListener(\"pagehide\", callback, opts);\n    };\n  }, [callback, capture]);\n}\n/**\n * Wrapper around useBlocker to show a window.confirm prompt to users instead\n * of building a custom UI with useBlocker.\n *\n * Warning: This has *a lot of rough edges* and behaves very differently (and\n * very incorrectly in some cases) across browsers if user click addition\n * back/forward navigations while the confirm is open.  Use at your own risk.\n */\nfunction usePrompt(_ref12) {\n  let {\n    when,\n    message\n  } = _ref12;\n  let blocker = useBlocker(when);\n  React.useEffect(() => {\n    if (blocker.state === \"blocked\") {\n      let proceed = window.confirm(message);\n      if (proceed) {\n        // This timeout is needed to avoid a weird \"race\" on POP navigations\n        // between the `window.history` revert navigation and the result of\n        // `window.confirm`\n        setTimeout(blocker.proceed, 0);\n      } else {\n        blocker.reset();\n      }\n    }\n  }, [blocker, message]);\n  React.useEffect(() => {\n    if (blocker.state === \"blocked\" && !when) {\n      blocker.reset();\n    }\n  }, [blocker, when]);\n}\n/**\n * Return a boolean indicating if there is an active view transition to the\n * given href.  You can use this value to render CSS classes or viewTransitionName\n * styles onto your elements\n *\n * @param href The destination href\n * @param [opts.relative] Relative routing type (\"route\" | \"path\")\n */\nfunction useViewTransitionState(to, opts) {\n  if (opts === void 0) {\n    opts = {};\n  }\n  let vtContext = React.useContext(ViewTransitionContext);\n  !(vtContext != null) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`.  \" + \"Did you accidentally import `RouterProvider` from `react-router`?\") : UNSAFE_invariant(false) : void 0;\n  let {\n    basename\n  } = useDataRouterContext(DataRouterHook.useViewTransitionState);\n  let path = useResolvedPath(to, {\n    relative: opts.relative\n  });\n  if (!vtContext.isTransitioning) {\n    return false;\n  }\n  let currentPath = stripBasename(vtContext.currentLocation.pathname, basename) || vtContext.currentLocation.pathname;\n  let nextPath = stripBasename(vtContext.nextLocation.pathname, basename) || vtContext.nextLocation.pathname;\n  // Transition is active if we're going to or coming from the indicated\n  // destination.  This ensures that other PUSH navigations that reverse\n  // an indicated transition apply.  I.e., on the list view you have:\n  //\n  //   <NavLink to=\"/details/1\" viewTransition>\n  //\n  // If you click the breadcrumb back to the list view:\n  //\n  //   <NavLink to=\"/list\" viewTransition>\n  //\n  // We should apply the transition because it's indicated as active going\n  // from /list -> /details/1 and therefore should be active on the reverse\n  // (even though this isn't strictly a POP reverse)\n  return matchPath(path.pathname, nextPath) != null || matchPath(path.pathname, currentPath) != null;\n}\n//#endregion\n\n// v5 isn't in TypeScript, they'll also lose the @types/react-router with this\n// but not worried about that for now.\nfunction CompatRoute(props) {\n  let {\n    location,\n    path\n  } = props;\n  if (!props.exact) path += \"/*\";\n  return /*#__PURE__*/React.createElement(Routes, {\n    location: location\n  }, /*#__PURE__*/React.createElement(Route, {\n    path: path,\n    element: /*#__PURE__*/React.createElement(Route$1, _extends({}, props))\n  }));\n}\n// Copied with 💜 from https://github.com/bvaughn/react-resizable-panels/blob/main/packages/react-resizable-panels/src/hooks/useIsomorphicEffect.ts\nconst canUseEffectHooks = !!(typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.document.createElement !== \"undefined\");\nconst useIsomorphicLayoutEffect = canUseEffectHooks ? React.useLayoutEffect : () => {};\nfunction CompatRouter(_ref) {\n  let {\n    children\n  } = _ref;\n  let history = useHistory();\n  let [state, setState] = React.useState(() => ({\n    location: history.location,\n    action: history.action\n  }));\n  useIsomorphicLayoutEffect(() => {\n    history.listen((location, action) => setState({\n      location,\n      action\n    }));\n  }, [history]);\n  return /*#__PURE__*/React.createElement(Router, {\n    navigationType: state.action,\n    location: state.location,\n    navigator: history\n  }, /*#__PURE__*/React.createElement(Routes, null, /*#__PURE__*/React.createElement(Route, {\n    path: \"*\",\n    element: children\n  })));\n}\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n/**\n * A `<Router>` that may not navigate to any other location. This is useful\n * on the server where there is no stateful UI.\n */\nfunction StaticRouter(_ref2) {\n  let {\n    basename,\n    children,\n    location: locationProp = \"/\"\n  } = _ref2;\n  if (typeof locationProp === \"string\") {\n    locationProp = parsePath(locationProp);\n  }\n  let action = Action.Pop;\n  let location = {\n    pathname: locationProp.pathname || \"/\",\n    search: locationProp.search || \"\",\n    hash: locationProp.hash || \"\",\n    state: locationProp.state != null ? locationProp.state : null,\n    key: locationProp.key || \"default\"\n  };\n  let staticNavigator = {\n    createHref(to) {\n      return typeof to === \"string\" ? to : createPath$1(to);\n    },\n    encodeLocation(to) {\n      let href = typeof to === \"string\" ? to : createPath$1(to);\n      // Treating this as a full URL will strip any trailing spaces so we need to\n      // pre-encode them since they might be part of a matching splat param from\n      // an ancestor route\n      href = href.replace(/ $/, \"%20\");\n      let encoded = ABSOLUTE_URL_REGEX.test(href) ? new URL(href) : new URL(href, \"http://localhost\");\n      return {\n        pathname: encoded.pathname,\n        search: encoded.search,\n        hash: encoded.hash\n      };\n    },\n    push(to) {\n      throw new Error(\"You cannot use navigator.push() on the server because it is a stateless \" + \"environment. This error was probably triggered when you did a \" + (\"`navigate(\" + JSON.stringify(to) + \")` somewhere in your app.\"));\n    },\n    replace(to) {\n      throw new Error(\"You cannot use navigator.replace() on the server because it is a stateless \" + \"environment. This error was probably triggered when you did a \" + (\"`navigate(\" + JSON.stringify(to) + \", { replace: true })` somewhere \") + \"in your app.\");\n    },\n    go(delta) {\n      throw new Error(\"You cannot use navigator.go() on the server because it is a stateless \" + \"environment. This error was probably triggered when you did a \" + (\"`navigate(\" + delta + \")` somewhere in your app.\"));\n    },\n    back() {\n      throw new Error(\"You cannot use navigator.back() on the server because it is a stateless \" + \"environment.\");\n    },\n    forward() {\n      throw new Error(\"You cannot use navigator.forward() on the server because it is a stateless \" + \"environment.\");\n    }\n  };\n  return /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    children: children,\n    location: location,\n    navigationType: action,\n    navigator: staticNavigator,\n    static: true\n  });\n}\n\nexport { BrowserRouter, CompatRoute, CompatRouter, Form, HashRouter, Link, NavLink, RouterProvider, ScrollRestoration, StaticRouter, useScrollRestoration as UNSAFE_useScrollRestoration, createBrowserRouter, createHashRouter, createSearchParams, HistoryRouter as unstable_HistoryRouter, usePrompt as unstable_usePrompt, useBeforeUnload, useFetcher, useFetchers, useFormAction, useLinkClickHandler, useSearchParams, useSubmit };\n//# sourceMappingURL=index.js.map\n","import {\n    ScoredFilterPositioned,\n    SearchState,\n    Filter,\n    SearchResultType,\n    SearchUrlParam,\n    FilterType,\n    SynonymMap,\n    SearchActions,\n} from \"@ourworldindata/types\"\nimport {\n    deserializeSet,\n    createTopicFilter,\n    createCountryFilter,\n    createDatasetProductsFilter,\n    createDatasetNamespaceFilter,\n    createDatasetVersionFilter,\n    createDatasetProducerFilter,\n    isValidResultType,\n    serializeSet,\n    getFilterNamesOfType,\n    extractFiltersFromQuery,\n    splitIntoWords,\n    removeMatchedWordsWithStopWords,\n    createFilter,\n    SEARCH_BASE_PATH,\n} from \"./searchUtils.js\"\nimport { useMemo, useEffect, useCallback } from \"react\"\nimport { useSearchParams } from \"react-router-dom-v5-compat\"\n\nexport const DEFAULT_SEARCH_STATE: SearchState = {\n    query: \"\",\n    filters: [],\n    requireAllCountries: false,\n    resultType: SearchResultType.DATA,\n}\n\n/**\n * Hook that manages search state via URL search params.\n *\n * Key design principle: URL is the source of truth. State is derived\n * synchronously from URL params, including automatic filter detection.\n */\n\nexport function useSearchParamsState(\n    eligibleRegionNames: string[],\n    eligibleTopicsAndAreas: string[],\n    synonymMap: SynonymMap\n): {\n    state: SearchState\n    actions: SearchActions\n} {\n    const [searchParams, setSearchParams] = useSearchParams()\n\n    // Derive state from URL, applying automatic filters as part of derivation.\n    // This ensures state consistency when URLs are manually edited.\n    const state = useMemo(() => {\n        const rawState = searchParamsToState(\n            searchParams,\n            eligibleRegionNames,\n            eligibleTopicsAndAreas\n        )\n        return applyAutomaticFilters(rawState, eligibleRegionNames, synonymMap)\n    }, [searchParams, eligibleRegionNames, eligibleTopicsAndAreas, synonymMap])\n\n    // Sanitize URL in the following cases:\n    // - automatic filters have been applied\n    // - query params are invalid (e.g. \"countryes=France\")\n    // - query params contain invalid values (e.g. \"countries=Franc\")\n    useEffect(() => {\n        if (urlNeedsSanitization(searchParams, state)) {\n            // replace current entry in browser history to keep it clean.\n            setSearchParams(stateToSearchParams(state), { replace: true })\n        }\n    }, [searchParams, state, setSearchParams])\n\n    const updateParams = useCallback(\n        (\n            updater: (current: SearchState) => SearchState,\n            options?: { replace?: boolean }\n        ) => {\n            const newState = updater(state)\n            // Update URL atomically by applying auto-filters before setting search\n            // params. This ensures the unicity of browser history entries, query execution\n            // and analytics event per user action.\n            const stateWithAutoFilters = applyAutomaticFilters(\n                newState,\n                eligibleRegionNames,\n                synonymMap\n            )\n            setSearchParams(stateToSearchParams(stateWithAutoFilters), options)\n        },\n        [setSearchParams, state, eligibleRegionNames, synonymMap]\n    )\n\n    const actions = useMemo<SearchActions>(\n        () => ({\n            setQuery: (query: string) => {\n                updateParams((s) => ({ ...s, query: query.trim() }))\n            },\n\n            addCountry: (country: string) => {\n                updateParams((s) => {\n                    const exists = s.filters.some(\n                        (f) =>\n                            f.type === FilterType.COUNTRY && f.name === country\n                    )\n                    if (exists) return s\n                    return {\n                        ...s,\n                        filters: [...s.filters, createCountryFilter(country)],\n                    }\n                })\n            },\n\n            // Compound action to ensure a single entry in the browser history.\n            addCountryAndSetQuery: (country: string, query: string) => {\n                updateParams((s) => {\n                    const exists = s.filters.some(\n                        (f) =>\n                            f.type === FilterType.COUNTRY && f.name === country\n                    )\n                    return {\n                        ...s,\n                        query: query.trim(),\n                        filters: exists\n                            ? s.filters\n                            : [...s.filters, createCountryFilter(country)],\n                    }\n                })\n            },\n\n            removeCountry: (country: string) => {\n                updateParams((s) => {\n                    const newFilters = s.filters.filter(\n                        (f) =>\n                            !(\n                                f.type === FilterType.COUNTRY &&\n                                f.name === country\n                            )\n                    )\n                    const hasCountryFilters = newFilters.some(\n                        (f) => f.type === FilterType.COUNTRY\n                    )\n                    return {\n                        ...s,\n                        filters: newFilters,\n                        requireAllCountries: hasCountryFilters\n                            ? s.requireAllCountries\n                            : false,\n                    }\n                })\n            },\n\n            setTopic: (topic: string) => {\n                updateParams((s) => {\n                    const newFilters = s.filters.filter(\n                        (f) => f.type !== FilterType.TOPIC\n                    )\n                    return {\n                        ...s,\n                        filters: [...newFilters, createTopicFilter(topic)],\n                    }\n                })\n            },\n\n            // Compound action to ensure a single entry in the browser history.\n            setTopicAndClearQuery: (topic: string) => {\n                updateParams((s) => {\n                    const newFilters = s.filters.filter(\n                        (f) => f.type !== FilterType.TOPIC\n                    )\n                    return {\n                        ...s,\n                        query: \"\",\n                        filters: [...newFilters, createTopicFilter(topic)],\n                    }\n                })\n            },\n\n            removeTopic: (topic: string) => {\n                updateParams((s) => ({\n                    ...s,\n                    filters: s.filters.filter(\n                        (f) =>\n                            !(f.type === FilterType.TOPIC && f.name === topic)\n                    ),\n                }))\n            },\n\n            addFilter: (filter: Filter) => {\n                updateParams((s) => {\n                    const exists = s.filters.some(\n                        (f) => f.type === filter.type && f.name === filter.name\n                    )\n                    if (exists) return s\n                    return { ...s, filters: [...s.filters, filter] }\n                })\n            },\n\n            removeFilter: (filter: Filter) => {\n                updateParams((s) => {\n                    const newFilters = s.filters.filter(\n                        (f) =>\n                            !(f.type === filter.type && f.name === filter.name)\n                    )\n                    const hasCountryFilters = newFilters.some(\n                        (f) => f.type === FilterType.COUNTRY\n                    )\n                    return {\n                        ...s,\n                        filters: newFilters,\n                        requireAllCountries:\n                            filter.type === FilterType.COUNTRY &&\n                            !hasCountryFilters\n                                ? false\n                                : s.requireAllCountries,\n                    }\n                })\n            },\n\n            toggleRequireAllCountries: () => {\n                updateParams((s) => ({\n                    ...s,\n                    requireAllCountries: !s.requireAllCountries,\n                }))\n            },\n\n            setResultType: (resultType: SearchResultType) => {\n                updateParams((s) => ({ ...s, resultType }))\n            },\n\n            reset: () => {\n                setSearchParams(new URLSearchParams())\n            },\n        }),\n        [updateParams, setSearchParams]\n    )\n\n    return { state, actions }\n}\n\n/**\n * Derives SearchState from URLSearchParams. Sanitizes parameters before using\n * them. If parameters are missing, defaults are used.\n */\nexport function searchParamsToState(\n    searchParams: URLSearchParams,\n    eligibleRegionNames: string[],\n    eligibleTopicsAndAreas: string[]\n): SearchState {\n    const topicsSet = deserializeSet(searchParams.get(\"topics\")).intersection(\n        new Set(eligibleTopicsAndAreas)\n    )\n    const countriesSet = deserializeSet(\n        searchParams.get(\"countries\")\n    ).intersection(new Set(eligibleRegionNames))\n    const datasetsSet = new Set(\n        deserializeSet(searchParams.get(\"datasetProducts\"))\n            .keys()\n            .filter(Boolean)\n    )\n    const namespacesSet = new Set(\n        deserializeSet(searchParams.get(\"datasetNamespaces\"))\n            .keys()\n            .filter(Boolean)\n    )\n    const versionsSet = new Set(\n        deserializeSet(searchParams.get(\"datasetVersions\"))\n            .keys()\n            .filter(Boolean)\n    )\n    const producersSet = new Set(\n        deserializeSet(searchParams.get(\"datasetProducers\"))\n            .keys()\n            .filter(Boolean)\n    )\n\n    const filters: Filter[] = [\n        ...topicsSet.keys().map((topic) => createTopicFilter(topic)),\n\n        ...countriesSet.keys().map((country) => createCountryFilter(country)),\n\n        ...datasetsSet\n            .keys()\n            .map((dataset) => createDatasetProductsFilter(dataset)),\n\n        ...namespacesSet\n            .keys()\n            .map((namespace) => createDatasetNamespaceFilter(namespace)),\n\n        ...versionsSet\n            .keys()\n            .map((version) => createDatasetVersionFilter(version)),\n\n        ...producersSet\n            .keys()\n            .map((producer) => createDatasetProducerFilter(producer)),\n    ]\n\n    const resultTypeParam = searchParams.get(\"resultType\") ?? undefined\n\n    return {\n        query: searchParams.get(\"q\") ?? DEFAULT_SEARCH_STATE.query,\n        filters,\n        requireAllCountries:\n            searchParams.get(\"requireAllCountries\") === \"true\" ||\n            DEFAULT_SEARCH_STATE.requireAllCountries,\n        resultType: isValidResultType(resultTypeParam)\n            ? resultTypeParam\n            : DEFAULT_SEARCH_STATE.resultType,\n    }\n}\n\n/**\n * Converts SearchState to URLSearchParams, only including non-default values.\n */\nexport function stateToSearchParams(state: SearchState): URLSearchParams {\n    const params = new URLSearchParams()\n\n    if (state.query) {\n        params.set(SearchUrlParam.QUERY, state.query)\n    }\n\n    const topics = serializeSet(\n        getFilterNamesOfType(state.filters, FilterType.TOPIC)\n    )\n    if (topics) {\n        params.set(SearchUrlParam.TOPIC, topics)\n    }\n\n    const countries = serializeSet(\n        getFilterNamesOfType(state.filters, FilterType.COUNTRY)\n    )\n    if (countries) {\n        params.set(SearchUrlParam.COUNTRY, countries)\n    }\n\n    const datasets = serializeSet(\n        getFilterNamesOfType(state.filters, FilterType.DATASET_PRODUCT)\n    )\n    if (datasets) {\n        params.set(SearchUrlParam.DATASET_PRODUCT, datasets)\n    }\n\n    const namespaces = serializeSet(\n        getFilterNamesOfType(state.filters, FilterType.DATASET_NAMESPACE)\n    )\n    if (namespaces) {\n        params.set(SearchUrlParam.DATASET_NAMESPACE, namespaces)\n    }\n\n    const versions = serializeSet(\n        getFilterNamesOfType(state.filters, FilterType.DATASET_VERSION)\n    )\n    if (versions) {\n        params.set(SearchUrlParam.DATASET_VERSION, versions)\n    }\n\n    const producers = serializeSet(\n        getFilterNamesOfType(state.filters, FilterType.DATASET_PRODUCER)\n    )\n    if (producers) {\n        params.set(SearchUrlParam.DATASET_PRODUCER, producers)\n    }\n\n    if (state.requireAllCountries) {\n        params.set(SearchUrlParam.REQUIRE_ALL_COUNTRIES, \"true\")\n    }\n\n    // Only include resultType if not the default\n    if (state.resultType !== DEFAULT_SEARCH_STATE.resultType) {\n        params.set(SearchUrlParam.RESULT_TYPE, state.resultType)\n    }\n\n    return params\n}\n\n/**\n * Build a link to the site search, pre-filtered to a single topic and a given\n * result type (Data / Writing). Used by the LTP \"Sections\" block and the\n * sidebar TOC's bottom \"See all charts\" CTA.\n */\nexport function buildSearchHrefForCard(\n    resultType: SearchResultType,\n    tagName: string\n): string {\n    const searchState: SearchState = {\n        query: \"\",\n        filters: [createTopicFilter(tagName)],\n        requireAllCountries: false,\n        resultType,\n    }\n    const params = stateToSearchParams(searchState)\n    return `${SEARCH_BASE_PATH}?${params.toString()}`\n}\n\n/**\n * Checks if URL params need sanitization (i.e., contain invalid values that\n * were filtered out during parsing).\n */\nexport function urlNeedsSanitization(\n    searchParams: URLSearchParams,\n    state: SearchState\n): boolean {\n    const sanitizedParams = stateToSearchParams(state)\n    return searchParams.toString() !== sanitizedParams.toString()\n}\n\n/**\n * Core logic for replacing query words with filters.\n * Used by both automatic filter detection and manual filter suggestions.\n */\nexport function replaceQueryWordsWithFilters(\n    state: SearchState,\n    filtersWithPositions: ScoredFilterPositioned[]\n): SearchState {\n    if (filtersWithPositions.length === 0) return state\n\n    // Collect all positions that need to be removed from the query\n    const allPositions = filtersWithPositions.flatMap((f) => f.positions)\n\n    // Remove matched words from query\n    const queryWords = splitIntoWords(state.query)\n    const newQuery = removeMatchedWordsWithStopWords(queryWords, allPositions)\n\n    // Add new filters (avoiding duplicates)\n    const existingFilterKeys = new Set(\n        state.filters.map((f) => `${f.type}:${f.name}`)\n    )\n    const newFilters = filtersWithPositions\n        .filter((f) => !existingFilterKeys.has(`${f.type}:${f.name}`))\n        // do not include positions in the state, which would break assumptions\n        // for deep equality in analytics logging when automatic filters are applied\n        .map((f) => createFilter(f.type)(f.name))\n\n    return {\n        ...state,\n        query: newQuery.trim(),\n        filters: [...state.filters, ...newFilters],\n    }\n}\n\n/**\n * Applies automatic country filters detected in the query.\n * Extracts exact country name matches from the query and adds them as filters,\n * removing the matched words from the query string.\n */\nexport function applyAutomaticFilters(\n    state: SearchState,\n    allRegionNames: string[],\n    synonymMap: SynonymMap\n): SearchState {\n    if (!state.query) return state\n\n    const matches = extractFiltersFromQuery(\n        state.query,\n        allRegionNames,\n        [], // do not suggest topics for auto-detection\n        state.filters,\n        { threshold: 1, limit: 1 }, // only exact matches\n        synonymMap\n    )\n\n    // Only auto-apply exact country matches\n    const countryMatches = matches.filter(\n        (match) => match.type === FilterType.COUNTRY\n    )\n\n    return replaceQueryWordsWithFilters(state, countryMatches)\n}\n","// src/cache/createBrowserLocalStorageCache.ts\nfunction createBrowserLocalStorageCache(options) {\n  let storage;\n  const namespaceKey = `algolia-client-js-${options.key}`;\n  function getStorage() {\n    if (storage === void 0) {\n      storage = options.localStorage || window.localStorage;\n    }\n    return storage;\n  }\n  function getNamespace() {\n    return JSON.parse(getStorage().getItem(namespaceKey) || \"{}\");\n  }\n  function setNamespace(namespace) {\n    getStorage().setItem(namespaceKey, JSON.stringify(namespace));\n  }\n  function yieldToMain() {\n    return new Promise((resolve) => setTimeout(resolve, 0));\n  }\n  function getFilteredNamespace() {\n    const timeToLive = options.timeToLive ? options.timeToLive * 1e3 : null;\n    const namespace = getNamespace();\n    const currentTime = (/* @__PURE__ */ new Date()).getTime();\n    let changed = false;\n    const filtered = Object.fromEntries(\n      Object.entries(namespace).filter(([, cacheItem]) => {\n        if (!cacheItem || cacheItem.timestamp === void 0) {\n          changed = true;\n          return false;\n        }\n        if (!timeToLive) {\n          return true;\n        }\n        if (cacheItem.timestamp + timeToLive < currentTime) {\n          changed = true;\n          return false;\n        }\n        return true;\n      })\n    );\n    return { namespace: filtered, changed };\n  }\n  return {\n    get(key, defaultValue, events = {\n      miss: () => Promise.resolve()\n    }) {\n      return yieldToMain().then(() => {\n        const { namespace, changed } = getFilteredNamespace();\n        const cachedItem = namespace[JSON.stringify(key)];\n        if (changed) {\n          setNamespace(namespace);\n        }\n        if (cachedItem) {\n          return cachedItem.value;\n        }\n        return defaultValue().then((value) => events.miss(value).then(() => value));\n      });\n    },\n    set(key, value) {\n      return yieldToMain().then(() => {\n        const namespace = getNamespace();\n        namespace[JSON.stringify(key)] = {\n          timestamp: (/* @__PURE__ */ new Date()).getTime(),\n          value\n        };\n        getStorage().setItem(namespaceKey, JSON.stringify(namespace));\n        return value;\n      });\n    },\n    delete(key) {\n      return yieldToMain().then(() => {\n        const namespace = getNamespace();\n        delete namespace[JSON.stringify(key)];\n        getStorage().setItem(namespaceKey, JSON.stringify(namespace));\n      });\n    },\n    clear() {\n      return Promise.resolve().then(() => {\n        getStorage().removeItem(namespaceKey);\n      });\n    }\n  };\n}\n\n// src/cache/createNullCache.ts\nfunction createNullCache() {\n  return {\n    get(_key, defaultValue, events = {\n      miss: () => Promise.resolve()\n    }) {\n      const value = defaultValue();\n      return value.then((result) => Promise.all([result, events.miss(result)])).then(([result]) => result);\n    },\n    set(_key, value) {\n      return Promise.resolve(value);\n    },\n    delete(_key) {\n      return Promise.resolve();\n    },\n    clear() {\n      return Promise.resolve();\n    }\n  };\n}\n\n// src/cache/createFallbackableCache.ts\nfunction createFallbackableCache(options) {\n  const caches = [...options.caches];\n  const current = caches.shift();\n  if (current === void 0) {\n    return createNullCache();\n  }\n  return {\n    get(key, defaultValue, events = {\n      miss: () => Promise.resolve()\n    }) {\n      return current.get(key, defaultValue, events).catch(() => {\n        return createFallbackableCache({ caches }).get(key, defaultValue, events);\n      });\n    },\n    set(key, value) {\n      return current.set(key, value).catch(() => {\n        return createFallbackableCache({ caches }).set(key, value);\n      });\n    },\n    delete(key) {\n      return current.delete(key).catch(() => {\n        return createFallbackableCache({ caches }).delete(key);\n      });\n    },\n    clear() {\n      return current.clear().catch(() => {\n        return createFallbackableCache({ caches }).clear();\n      });\n    }\n  };\n}\n\n// src/cache/createMemoryCache.ts\nfunction createMemoryCache(options = { serializable: true }) {\n  let cache = {};\n  return {\n    get(key, defaultValue, events = {\n      miss: () => Promise.resolve()\n    }) {\n      const keyAsString = JSON.stringify(key);\n      if (keyAsString in cache) {\n        return Promise.resolve(options.serializable ? JSON.parse(cache[keyAsString]) : cache[keyAsString]);\n      }\n      const promise = defaultValue();\n      return promise.then((value) => events.miss(value)).then(() => promise);\n    },\n    set(key, value) {\n      cache[JSON.stringify(key)] = options.serializable ? JSON.stringify(value) : value;\n      return Promise.resolve(value);\n    },\n    delete(key) {\n      delete cache[JSON.stringify(key)];\n      return Promise.resolve();\n    },\n    clear() {\n      cache = {};\n      return Promise.resolve();\n    }\n  };\n}\n\n// src/constants.ts\nvar DEFAULT_CONNECT_TIMEOUT_BROWSER = 1e3;\nvar DEFAULT_READ_TIMEOUT_BROWSER = 2e3;\nvar DEFAULT_WRITE_TIMEOUT_BROWSER = 3e4;\nvar DEFAULT_CONNECT_TIMEOUT_NODE = 2e3;\nvar DEFAULT_READ_TIMEOUT_NODE = 5e3;\nvar DEFAULT_WRITE_TIMEOUT_NODE = 3e4;\nvar DEFAULT_REPLACE_ALL_OBJECTS_MAX_RETRIES = 800;\n\n// src/createAlgoliaAgent.ts\nfunction createAlgoliaAgent(version) {\n  const algoliaAgent = {\n    value: `Algolia for JavaScript (${version})`,\n    add(options) {\n      const addedAlgoliaAgent = `; ${options.segment}${options.version !== void 0 ? ` (${options.version})` : \"\"}`;\n      if (algoliaAgent.value.indexOf(addedAlgoliaAgent) === -1) {\n        algoliaAgent.value = `${algoliaAgent.value}${addedAlgoliaAgent}`;\n      }\n      return algoliaAgent;\n    }\n  };\n  return algoliaAgent;\n}\n\n// src/createAuth.ts\nfunction createAuth(appId, apiKey, authMode = \"WithinHeaders\") {\n  const credentials = {\n    \"x-algolia-api-key\": apiKey,\n    \"x-algolia-application-id\": appId\n  };\n  return {\n    headers() {\n      return authMode === \"WithinHeaders\" ? credentials : {};\n    },\n    queryParameters() {\n      return authMode === \"WithinQueryParameters\" ? credentials : {};\n    }\n  };\n}\n\n// src/createIterablePromise.ts\nfunction createIterablePromise({\n  func,\n  validate,\n  aggregator,\n  error,\n  timeout = () => 0\n}) {\n  const retry = (previousResponse) => {\n    return new Promise((resolve, reject) => {\n      func(previousResponse).then(async (response) => {\n        if (aggregator) {\n          await aggregator(response);\n        }\n        if (await validate(response)) {\n          return resolve(response);\n        }\n        if (error && await error.validate(response)) {\n          return reject(new Error(await error.message(response)));\n        }\n        return setTimeout(\n          () => {\n            retry(response).then(resolve).catch(reject);\n          },\n          await timeout()\n        );\n      }).catch((err) => {\n        reject(err);\n      });\n    });\n  };\n  return retry();\n}\n\n// src/getAlgoliaAgent.ts\nfunction getAlgoliaAgent({ algoliaAgents, client, version }) {\n  const defaultAlgoliaAgent = createAlgoliaAgent(version).add({\n    segment: client,\n    version\n  });\n  algoliaAgents.forEach((algoliaAgent) => defaultAlgoliaAgent.add(algoliaAgent));\n  return defaultAlgoliaAgent;\n}\n\n// src/logger/createNullLogger.ts\nfunction createNullLogger() {\n  return {\n    debug(_message, _args) {\n      return Promise.resolve();\n    },\n    info(_message, _args) {\n      return Promise.resolve();\n    },\n    error(_message, _args) {\n      return Promise.resolve();\n    }\n  };\n}\n\n// src/logger/logWarning.ts\nfunction logWarning(logger, message) {\n  if (logger.warn) {\n    void Promise.resolve(logger.warn(message)).catch(() => {\n    });\n  } else {\n    console.warn(message);\n  }\n}\n\n// src/sse.ts\nvar MAX_LINE_BUFFER_SIZE = 10 * 1024 * 1024;\nasync function* readableStreamToAsyncIterable(stream) {\n  const reader = stream.getReader();\n  try {\n    while (true) {\n      const { done, value } = await reader.read();\n      if (done) return;\n      yield value;\n    }\n  } finally {\n    reader.releaseLock();\n  }\n}\nfunction toAsyncIterable(stream) {\n  if (Symbol.asyncIterator in stream) {\n    return stream;\n  }\n  return readableStreamToAsyncIterable(stream);\n}\nasync function* iterLines(stream) {\n  const decoder = new TextDecoder(\"utf-8\");\n  const buffer = [];\n  let bufferSize = 0;\n  let trailingCR = false;\n  let isFirstLine = true;\n  for await (const chunk of toAsyncIterable(stream)) {\n    const text = decoder.decode(chunk, { stream: true });\n    let offset = 0;\n    if (trailingCR) {\n      trailingCR = false;\n      if (text.length > 0 && text[0] === \"\\n\") {\n        offset = 1;\n      }\n    }\n    while (offset < text.length) {\n      const crIdx = text.indexOf(\"\\r\", offset);\n      const lfIdx = text.indexOf(\"\\n\", offset);\n      if (crIdx === -1 && lfIdx === -1) {\n        const remaining2 = text.slice(offset);\n        buffer.push(remaining2);\n        bufferSize += remaining2.length;\n        if (bufferSize > MAX_LINE_BUFFER_SIZE) {\n          throw new Error(\"SSE line buffer exceeded 10MB\");\n        }\n        break;\n      }\n      let endIdx;\n      let skipLen;\n      if (crIdx !== -1 && (lfIdx === -1 || crIdx < lfIdx)) {\n        endIdx = crIdx;\n        if (crIdx + 1 < text.length) {\n          skipLen = text[crIdx + 1] === \"\\n\" ? 2 : 1;\n        } else {\n          trailingCR = true;\n          skipLen = 1;\n        }\n      } else {\n        endIdx = lfIdx;\n        skipLen = 1;\n      }\n      const segment = text.slice(offset, endIdx);\n      buffer.push(segment);\n      let line = buffer.length === 1 ? buffer[0] : buffer.join(\"\");\n      buffer.length = 0;\n      bufferSize = 0;\n      if (isFirstLine) {\n        if (line.startsWith(\"\\uFEFF\")) {\n          line = line.slice(1);\n        }\n        isFirstLine = false;\n      }\n      yield line;\n      offset = endIdx + skipLen;\n    }\n  }\n  const remaining = decoder.decode();\n  if (remaining) {\n    buffer.push(remaining);\n  }\n  if (buffer.length > 0) {\n    let line = buffer.join(\"\");\n    if (isFirstLine && line.startsWith(\"\\uFEFF\")) {\n      line = line.slice(1);\n    }\n    yield line;\n  }\n}\nvar SSEDecoder = class {\n  data = [];\n  eventType = \"\";\n  lastEventId = null;\n  retry = null;\n  decode(line) {\n    if (line === \"\") {\n      return this.dispatch();\n    }\n    if (line[0] === \":\") {\n      return null;\n    }\n    const colonIdx = line.indexOf(\":\");\n    let field;\n    let value;\n    if (colonIdx === -1) {\n      field = line;\n      value = \"\";\n    } else {\n      field = line.slice(0, colonIdx);\n      value = line.slice(colonIdx + 1);\n      if (value[0] === \" \") {\n        value = value.slice(1);\n      }\n    }\n    switch (field) {\n      case \"data\":\n        this.data.push(value);\n        break;\n      case \"event\":\n        this.eventType = value;\n        break;\n      case \"id\":\n        if (!value.includes(\"\\0\")) {\n          this.lastEventId = value;\n        }\n        break;\n      case \"retry\":\n        if (/^[0-9]+$/.test(value)) {\n          this.retry = parseInt(value, 10);\n        }\n        break;\n    }\n    return null;\n  }\n  dispatch() {\n    const currentEventType = this.eventType;\n    this.eventType = \"\";\n    if (this.data.length === 0) {\n      return null;\n    }\n    const event = {\n      data: this.data.join(\"\\n\"),\n      event: currentEventType,\n      id: this.lastEventId,\n      retry: this.retry\n    };\n    this.data = [];\n    return event;\n  }\n};\nasync function* iterSSEEvents(stream) {\n  const decoder = new SSEDecoder();\n  for await (const line of iterLines(stream)) {\n    const event = decoder.decode(line);\n    if (event !== null) {\n      yield event;\n    }\n  }\n}\n\n// src/transporter/compress.ts\nvar COMPRESSION_THRESHOLD = 750;\n\n// src/transporter/createStatefulHost.ts\nvar EXPIRATION_DELAY = 2 * 60 * 1e3;\nfunction createStatefulHost(host, status = \"up\") {\n  const lastUpdate = Date.now();\n  function isUp() {\n    return status === \"up\" || Date.now() - lastUpdate > EXPIRATION_DELAY;\n  }\n  function isTimedOut() {\n    return status === \"timed out\" && Date.now() - lastUpdate <= EXPIRATION_DELAY;\n  }\n  return { ...host, status, lastUpdate, isUp, isTimedOut };\n}\n\n// src/transporter/errors.ts\nvar AlgoliaError = class extends Error {\n  name = \"AlgoliaError\";\n  constructor(message, name) {\n    super(message);\n    if (name) {\n      this.name = name;\n    }\n  }\n};\nvar IndexNotFoundError = class extends AlgoliaError {\n  constructor(indexName) {\n    super(`${indexName} does not exist`, \"IndexNotFoundError\");\n  }\n};\nvar IndicesInSameAppError = class extends AlgoliaError {\n  constructor() {\n    super(\"Indices are in the same application. Use operationIndex instead.\", \"IndicesInSameAppError\");\n  }\n};\nvar IndexAlreadyExistsError = class extends AlgoliaError {\n  constructor(indexName) {\n    super(`${indexName} index already exists.`, \"IndexAlreadyExistsError\");\n  }\n};\nvar ErrorWithStackTrace = class extends AlgoliaError {\n  stackTrace;\n  correlationId;\n  constructor(message, stackTrace, name, correlationId) {\n    super(correlationId ? `${message} (Correlation-ID: ${correlationId})` : message, name);\n    this.stackTrace = stackTrace;\n    this.correlationId = correlationId;\n  }\n};\nvar RetryError = class extends ErrorWithStackTrace {\n  constructor(stackTrace, correlationId) {\n    super(\n      \"Unreachable hosts - your application id may be incorrect. If the error persists, please visit our help center https://alg.li/support-unreachable-hosts or reach out to the Algolia Support team: https://alg.li/support\",\n      stackTrace,\n      \"RetryError\",\n      correlationId\n    );\n  }\n};\nvar ApiError = class extends ErrorWithStackTrace {\n  status;\n  constructor(message, status, stackTrace, name = \"ApiError\", correlationId) {\n    super(message, stackTrace, name, correlationId);\n    this.status = status;\n  }\n};\nvar DeserializationError = class extends AlgoliaError {\n  response;\n  correlationId;\n  constructor(message, response, correlationId) {\n    super(correlationId ? `${message} (Correlation-ID: ${correlationId})` : message, \"DeserializationError\");\n    this.response = response;\n    this.correlationId = correlationId;\n  }\n};\nvar DetailedApiError = class extends ApiError {\n  error;\n  constructor(message, status, error, stackTrace, correlationId) {\n    super(message, status, stackTrace, \"DetailedApiError\", correlationId);\n    this.error = error;\n  }\n};\n\n// src/transporter/helpers.ts\nfunction shuffle(array) {\n  const shuffledArray = array;\n  for (let c = array.length - 1; c > 0; c--) {\n    const b = Math.floor(Math.random() * (c + 1));\n    const a = array[c];\n    shuffledArray[c] = array[b];\n    shuffledArray[b] = a;\n  }\n  return shuffledArray;\n}\nfunction serializeUrl(host, path, queryParameters) {\n  const queryParametersAsString = serializeQueryParameters(queryParameters);\n  let url = `${host.protocol}://${host.url}${host.port ? `:${host.port}` : \"\"}/${path.charAt(0) === \"/\" ? path.substring(1) : path}`;\n  if (queryParametersAsString.length) {\n    url += `?${queryParametersAsString}`;\n  }\n  return url;\n}\nfunction serializeQueryParameters(parameters) {\n  return Object.keys(parameters).filter((key) => parameters[key] !== void 0).sort().map(\n    (key) => `${key}=${encodeURIComponent(\n      Object.prototype.toString.call(parameters[key]) === \"[object Array]\" ? parameters[key].join(\",\") : parameters[key]\n    ).replace(/\\+/g, \"%20\")}`\n  ).join(\"&\");\n}\nfunction serializeData(request, requestOptions) {\n  if (request.method === \"GET\" || request.data === void 0 && requestOptions.data === void 0) {\n    return void 0;\n  }\n  const data = Array.isArray(request.data) ? request.data : { ...request.data, ...requestOptions.data };\n  return JSON.stringify(data);\n}\nfunction serializeHeaders(baseHeaders, requestHeaders, requestOptionsHeaders) {\n  const headers = {\n    Accept: \"application/json\",\n    ...baseHeaders,\n    ...requestHeaders,\n    ...requestOptionsHeaders\n  };\n  const serializedHeaders = {};\n  Object.keys(headers).forEach((header) => {\n    const value = headers[header];\n    serializedHeaders[header.toLowerCase()] = value;\n  });\n  return serializedHeaders;\n}\nfunction deserializeSuccess(response) {\n  if (response.status === 204 || response.content.length === 0) {\n    return void 0;\n  }\n  try {\n    return JSON.parse(response.content);\n  } catch (e) {\n    throw new DeserializationError(e.message, response, getCorrelationId(response.headers));\n  }\n}\nfunction deserializeSuccessWithHttpInfo(response) {\n  return {\n    status: response.status,\n    headers: response.headers,\n    content: response.content,\n    data: deserializeSuccess(response)\n  };\n}\nfunction getCorrelationId(headers) {\n  if (!headers) {\n    return void 0;\n  }\n  if (headers[\"correlation-id\"] !== void 0) {\n    return headers[\"correlation-id\"];\n  }\n  const header = Object.keys(headers).find((key) => key.toLowerCase() === \"correlation-id\");\n  return header === void 0 ? void 0 : headers[header];\n}\nfunction getLastCorrelationId(stackTrace) {\n  for (let i = stackTrace.length - 1; i >= 0; i--) {\n    const correlationId = getCorrelationId(stackTrace[i].response.headers);\n    if (correlationId !== void 0) {\n      return correlationId;\n    }\n  }\n  return void 0;\n}\nfunction deserializeFailure(response, stackFrame) {\n  const { content, status } = response;\n  const correlationId = getCorrelationId(response.headers);\n  try {\n    const parsed = JSON.parse(content);\n    if (\"error\" in parsed) {\n      return new DetailedApiError(parsed.message, status, parsed.error, stackFrame, correlationId);\n    }\n    return new ApiError(parsed.message, status, stackFrame, \"ApiError\", correlationId);\n  } catch {\n  }\n  return new ApiError(content, status, stackFrame, \"ApiError\", correlationId);\n}\n\n// src/transporter/requestId.ts\nvar BASE62_CHARS = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\nvar REQUEST_ID_LENGTH = 11;\nfunction generateRequestId() {\n  var _a;\n  let requestId = \"\";\n  if (typeof ((_a = globalThis.crypto) == null ? void 0 : _a.getRandomValues) === \"function\") {\n    const bytes = new Uint8Array(REQUEST_ID_LENGTH);\n    globalThis.crypto.getRandomValues(bytes);\n    for (const byte of bytes) {\n      requestId += BASE62_CHARS[byte % BASE62_CHARS.length];\n    }\n    return requestId;\n  }\n  for (let i = 0; i < REQUEST_ID_LENGTH; i++) {\n    requestId += BASE62_CHARS[Math.floor(Math.random() * BASE62_CHARS.length)];\n  }\n  return requestId;\n}\nfunction hasRequestId(headers, queryParameters) {\n  return headers !== void 0 && Object.keys(headers).some((header) => header.toLowerCase() === \"request-id\") || queryParameters !== void 0 && Object.keys(queryParameters).some((parameter) => parameter.toLowerCase() === \"x-algolia-request-id\");\n}\nfunction withRequestId(transporter, requestOptions) {\n  if (transporter.requestIdChannel === void 0 || hasRequestId(transporter.baseHeaders, transporter.baseQueryParameters) || hasRequestId(requestOptions == null ? void 0 : requestOptions.headers, requestOptions == null ? void 0 : requestOptions.queryParameters)) {\n    return requestOptions;\n  }\n  if (transporter.requestIdChannel === \"headers\") {\n    return { ...requestOptions, headers: { ...requestOptions == null ? void 0 : requestOptions.headers, \"request-id\": generateRequestId() } };\n  }\n  return {\n    ...requestOptions,\n    queryParameters: { ...requestOptions == null ? void 0 : requestOptions.queryParameters, \"x-algolia-request-id\": generateRequestId() }\n  };\n}\n\n// src/transporter/responses.ts\nfunction isNetworkError({ isTimedOut, status }) {\n  return !isTimedOut && ~~status === 0;\n}\nfunction isRetryable({ isTimedOut, status }) {\n  return isTimedOut || isNetworkError({ isTimedOut, status }) || ~~(status / 100) !== 2 && ~~(status / 100) !== 4;\n}\nfunction isSuccess({ status }) {\n  return ~~(status / 100) === 2;\n}\n\n// src/transporter/stackTrace.ts\nfunction stackTraceWithoutCredentials(stackTrace) {\n  return stackTrace.map((stackFrame) => stackFrameWithoutCredentials(stackFrame));\n}\nfunction stackFrameWithoutCredentials(stackFrame) {\n  const modifiedHeaders = stackFrame.request.headers[\"x-algolia-api-key\"] ? { \"x-algolia-api-key\": \"*****\" } : {};\n  return {\n    ...stackFrame,\n    request: {\n      ...stackFrame.request,\n      headers: {\n        ...stackFrame.request.headers,\n        ...modifiedHeaders\n      }\n    }\n  };\n}\n\n// src/transporter/createTransporter.ts\nfunction createTransporter({\n  hosts,\n  hostsCache,\n  baseHeaders,\n  logger,\n  baseQueryParameters,\n  algoliaAgent,\n  timeouts,\n  requester,\n  requestsCache,\n  responsesCache,\n  compress,\n  compression,\n  requestIdChannel\n}) {\n  function injectRequestId(headers, queryParameters) {\n    if (requestIdChannel === void 0 || headers[\"request-id\"] !== void 0 || Object.keys(queryParameters).some((parameter) => parameter.toLowerCase() === \"x-algolia-request-id\")) {\n      return;\n    }\n    if (requestIdChannel === \"headers\") {\n      headers[\"request-id\"] = generateRequestId();\n    } else {\n      queryParameters[\"x-algolia-request-id\"] = generateRequestId();\n    }\n  }\n  async function createRetryableOptions(compatibleHosts) {\n    const statefulHosts = await Promise.all(\n      compatibleHosts.map((compatibleHost) => {\n        return hostsCache.get(compatibleHost, () => {\n          return Promise.resolve(createStatefulHost(compatibleHost));\n        });\n      })\n    );\n    const hostsUp = statefulHosts.filter((host) => host.isUp());\n    const hostsTimedOut = statefulHosts.filter((host) => host.isTimedOut());\n    const hostsAvailable = [...hostsUp, ...hostsTimedOut];\n    const compatibleHostsAvailable = hostsAvailable.length > 0 ? hostsAvailable : compatibleHosts;\n    return {\n      hosts: compatibleHostsAvailable,\n      getTimeout(timeoutsCount, baseTimeout) {\n        const timeoutMultiplier = hostsTimedOut.length === 0 && timeoutsCount === 0 ? 1 : hostsTimedOut.length + 3 + timeoutsCount;\n        return timeoutMultiplier * baseTimeout;\n      }\n    };\n  }\n  async function retryableRequest(request, requestOptions, isRead) {\n    const stackTrace = [];\n    const serializedData = serializeData(request, requestOptions);\n    const headers = serializeHeaders(baseHeaders, request.headers, requestOptions.headers);\n    const wantsCompression = compression === \"gzip\" && serializedData !== void 0 && serializedData.length > COMPRESSION_THRESHOLD && (request.method === \"POST\" || request.method === \"PUT\");\n    if (wantsCompression && compress === void 0) {\n      logger.info(\"Compression is disabled because no compress method is available.\");\n    }\n    const shouldCompress = wantsCompression && compress !== void 0;\n    const data = shouldCompress ? await compress(serializedData) : serializedData;\n    if (shouldCompress) {\n      headers[\"content-encoding\"] = \"gzip\";\n    }\n    const dataQueryParameters = request.method === \"GET\" ? {\n      ...request.data,\n      ...requestOptions.data\n    } : {};\n    const queryParameters = {\n      ...baseQueryParameters,\n      ...request.queryParameters,\n      ...dataQueryParameters\n    };\n    if (algoliaAgent.value) {\n      queryParameters[\"x-algolia-agent\"] = algoliaAgent.value;\n    }\n    if (requestOptions && requestOptions.queryParameters) {\n      for (const key of Object.keys(requestOptions.queryParameters)) {\n        if (!requestOptions.queryParameters[key] || Object.prototype.toString.call(requestOptions.queryParameters[key]) === \"[object Object]\") {\n          queryParameters[key] = requestOptions.queryParameters[key];\n        } else {\n          queryParameters[key] = requestOptions.queryParameters[key].toString();\n        }\n      }\n    }\n    injectRequestId(headers, queryParameters);\n    let timeoutsCount = 0;\n    const retry = async (retryableHosts, getTimeout) => {\n      const host = retryableHosts.pop();\n      if (host === void 0) {\n        throw new RetryError(stackTraceWithoutCredentials(stackTrace), getLastCorrelationId(stackTrace));\n      }\n      const timeout = { ...timeouts, ...requestOptions.timeouts };\n      const payload = {\n        data,\n        headers,\n        method: request.method,\n        url: serializeUrl(host, request.path, queryParameters),\n        connectTimeout: getTimeout(timeoutsCount, timeout.connect),\n        responseTimeout: getTimeout(timeoutsCount, isRead ? timeout.read : timeout.write)\n      };\n      const pushToStackTrace = (response2) => {\n        const stackFrame = {\n          request: payload,\n          response: response2,\n          host,\n          triesLeft: retryableHosts.length\n        };\n        stackTrace.push(stackFrame);\n        return stackFrame;\n      };\n      const response = await requester.send(payload);\n      if (isRetryable(response)) {\n        const stackFrame = pushToStackTrace(response);\n        if (response.isTimedOut) {\n          timeoutsCount++;\n        }\n        logger.info(\"Retryable failure\", stackFrameWithoutCredentials(stackFrame));\n        await hostsCache.set(host, createStatefulHost(host, response.isTimedOut ? \"timed out\" : \"down\"));\n        return retry(retryableHosts, getTimeout);\n      }\n      if (isSuccess(response)) {\n        return response;\n      }\n      pushToStackTrace(response);\n      throw deserializeFailure(response, stackTrace);\n    };\n    const compatibleHosts = hosts.filter(\n      (host) => host.accept === \"readWrite\" || (isRead ? host.accept === \"read\" : host.accept === \"write\")\n    );\n    const options = await createRetryableOptions(compatibleHosts);\n    return retry([...options.hosts].reverse(), options.getTimeout);\n  }\n  function createRequest(request, requestOptions = {}) {\n    const createRetryableRequest = () => {\n      return retryableRequest(request, requestOptions, isRead).then(\n        (response) => deserializeSuccess(response)\n      );\n    };\n    const isRead = request.useReadTransporter || request.method === \"GET\";\n    const cacheable = requestOptions.cacheable || request.cacheable;\n    if (cacheable !== true) {\n      return createRetryableRequest();\n    }\n    const key = {\n      request,\n      requestOptions,\n      transporter: {\n        queryParameters: baseQueryParameters,\n        headers: baseHeaders\n      }\n    };\n    return responsesCache.get(\n      key,\n      () => {\n        return requestsCache.get(\n          key,\n          () => (\n            /**\n             * Finally, if there is no request in progress with the same key,\n             * this `createRetryableRequest()` will actually trigger the\n             * retryable request.\n             */\n            requestsCache.set(key, createRetryableRequest()).then(\n              (response) => Promise.all([requestsCache.delete(key), response]),\n              (err) => Promise.all([requestsCache.delete(key), Promise.reject(err)])\n            ).then(([_, response]) => response)\n          )\n        );\n      },\n      {\n        /**\n         * Of course, once we get this response back from the server, we\n         * tell response cache to actually store the received response\n         * to be used later.\n         */\n        miss: (response) => responsesCache.set(key, response)\n      }\n    );\n  }\n  function createRequestWithHttpInfo(request, requestOptions = {}) {\n    const isRead = request.useReadTransporter || request.method === \"GET\";\n    return retryableRequest(request, requestOptions, isRead).then(\n      (response) => deserializeSuccessWithHttpInfo(response)\n    );\n  }\n  async function* requestStream(request, requestOptions = {}) {\n    if (!requester.sendStream) {\n      throw new Error(\"This requester does not support streaming\");\n    }\n    const data = serializeData(request, requestOptions);\n    const headers = serializeHeaders(baseHeaders, request.headers, requestOptions.headers);\n    headers[\"accept\"] = \"text/event-stream\";\n    const dataQueryParameters = request.method === \"GET\" ? {\n      ...request.data,\n      ...requestOptions.data\n    } : {};\n    const queryParameters = {\n      ...baseQueryParameters,\n      ...request.queryParameters,\n      ...dataQueryParameters\n    };\n    if (algoliaAgent.value) {\n      queryParameters[\"x-algolia-agent\"] = algoliaAgent.value;\n    }\n    if (requestOptions && requestOptions.queryParameters) {\n      for (const key of Object.keys(requestOptions.queryParameters)) {\n        if (!requestOptions.queryParameters[key] || Object.prototype.toString.call(requestOptions.queryParameters[key]) === \"[object Object]\") {\n          queryParameters[key] = requestOptions.queryParameters[key];\n        } else {\n          queryParameters[key] = requestOptions.queryParameters[key].toString();\n        }\n      }\n    }\n    injectRequestId(headers, queryParameters);\n    const isRead = request.useReadTransporter || request.method === \"GET\";\n    const compatibleHosts = hosts.filter(\n      (host2) => host2.accept === \"readWrite\" || (isRead ? host2.accept === \"read\" : host2.accept === \"write\")\n    );\n    const options = await createRetryableOptions(compatibleHosts);\n    const host = options.hosts[0];\n    if (!host) {\n      throw new RetryError([]);\n    }\n    const timeout = { ...timeouts, ...requestOptions.timeouts };\n    const payload = {\n      data,\n      headers,\n      method: request.method,\n      url: serializeUrl(host, request.path, queryParameters),\n      connectTimeout: timeout.connect,\n      responseTimeout: isRead ? timeout.read : timeout.write\n    };\n    const stream = await requester.sendStream(payload);\n    yield* iterSSEEvents(stream);\n  }\n  return {\n    hostsCache,\n    requester,\n    timeouts,\n    logger,\n    algoliaAgent,\n    baseHeaders,\n    baseQueryParameters,\n    requestIdChannel,\n    hosts,\n    request: createRequest,\n    requestWithHttpInfo: createRequestWithHttpInfo,\n    requestStream,\n    requestsCache,\n    responsesCache\n  };\n}\n\n// src/types/logger.ts\nvar LogLevelEnum = {\n  Debug: 1,\n  Info: 2,\n  Error: 3\n};\n\n// src/validateParam.ts\nfunction validateRequired(field, method, value) {\n  if (value == null || typeof value === \"string\" && value.length === 0) {\n    throw new Error(`Parameter \\`${field}\\` is required when calling \\`${method}\\`.`);\n  }\n}\nexport {\n  AlgoliaError,\n  ApiError,\n  COMPRESSION_THRESHOLD,\n  DEFAULT_CONNECT_TIMEOUT_BROWSER,\n  DEFAULT_CONNECT_TIMEOUT_NODE,\n  DEFAULT_READ_TIMEOUT_BROWSER,\n  DEFAULT_READ_TIMEOUT_NODE,\n  DEFAULT_REPLACE_ALL_OBJECTS_MAX_RETRIES,\n  DEFAULT_WRITE_TIMEOUT_BROWSER,\n  DEFAULT_WRITE_TIMEOUT_NODE,\n  DeserializationError,\n  DetailedApiError,\n  ErrorWithStackTrace,\n  IndexAlreadyExistsError,\n  IndexNotFoundError,\n  IndicesInSameAppError,\n  LogLevelEnum,\n  RetryError,\n  createAlgoliaAgent,\n  createAuth,\n  createBrowserLocalStorageCache,\n  createFallbackableCache,\n  createIterablePromise,\n  createMemoryCache,\n  createNullCache,\n  createNullLogger,\n  createStatefulHost,\n  createTransporter,\n  deserializeFailure,\n  deserializeSuccess,\n  deserializeSuccessWithHttpInfo,\n  generateRequestId,\n  getAlgoliaAgent,\n  getCorrelationId,\n  getLastCorrelationId,\n  isNetworkError,\n  isRetryable,\n  isSuccess,\n  iterSSEEvents,\n  logWarning,\n  serializeData,\n  serializeHeaders,\n  serializeQueryParameters,\n  serializeUrl,\n  shuffle,\n  stackFrameWithoutCredentials,\n  stackTraceWithoutCredentials,\n  validateRequired,\n  withRequestId\n};\n//# sourceMappingURL=common.js.map","function d(r){let t={};for(let o of r.trim().split(/[\\r\\n]+/)){let e=o.indexOf(\": \");e>0&&(t[o.slice(0,e).toLowerCase()]=o.slice(e+2))}return t}function c(){function r(t){return new Promise(o=>{let e=new XMLHttpRequest;e.open(t.method,t.url,!0),Object.keys(t.headers).forEach(n=>e.setRequestHeader(n,t.headers[n]));let u=(n,a)=>setTimeout(()=>{e.abort(),o({status:0,content:a,isTimedOut:!0})},n),i=u(t.connectTimeout,\"Connection timeout\"),s;e.onreadystatechange=()=>{e.readyState>e.OPENED&&s===void 0&&(clearTimeout(i),s=u(t.responseTimeout,\"Socket timeout\"))},e.onerror=()=>{e.status===0&&(clearTimeout(i),clearTimeout(s),o({content:e.responseText||\"Network request failed\",status:e.status,isTimedOut:!1}))},e.onload=()=>{clearTimeout(i),clearTimeout(s),o({content:e.responseText,headers:d(e.getAllResponseHeaders()),status:e.status,isTimedOut:!1})},e.send(t.data)})}return{send:r}}export{c as createXhrRequester};\n//# sourceMappingURL=requester.xhr.js.map","// lite/builds/browser.ts\nimport {\n  createBrowserLocalStorageCache,\n  createFallbackableCache,\n  createMemoryCache,\n  createNullLogger\n} from \"@algolia/client-common\";\nimport { createXhrRequester } from \"@algolia/requester-browser-xhr\";\n\n// lite/src/liteClient.ts\nimport { createAuth, createTransporter, getAlgoliaAgent, shuffle, validateRequired } from \"@algolia/client-common\";\nvar apiClientVersion = \"5.57.0\";\nfunction getDefaultHosts(appId) {\n  return [\n    {\n      url: `${appId}-dsn.algolia.net`,\n      accept: \"read\",\n      protocol: \"https\"\n    },\n    {\n      url: `${appId}.algolia.net`,\n      accept: \"write\",\n      protocol: \"https\"\n    }\n  ].concat(\n    shuffle([\n      {\n        url: `${appId}-1.algolianet.com`,\n        accept: \"readWrite\",\n        protocol: \"https\"\n      },\n      {\n        url: `${appId}-2.algolianet.com`,\n        accept: \"readWrite\",\n        protocol: \"https\"\n      },\n      {\n        url: `${appId}-3.algolianet.com`,\n        accept: \"readWrite\",\n        protocol: \"https\"\n      }\n    ])\n  );\n}\nfunction createLiteClient({\n  appId: appIdOption,\n  apiKey: apiKeyOption,\n  authMode,\n  algoliaAgents,\n  ...options\n}) {\n  const auth = createAuth(appIdOption, apiKeyOption, authMode);\n  const transporter = createTransporter({\n    hosts: getDefaultHosts(appIdOption),\n    ...options,\n    algoliaAgent: getAlgoliaAgent({\n      algoliaAgents,\n      client: \"Lite\",\n      version: apiClientVersion\n    }),\n    baseHeaders: {\n      \"content-type\": \"text/plain\",\n      ...auth.headers(),\n      ...options.baseHeaders\n    },\n    baseQueryParameters: {\n      ...auth.queryParameters(),\n      ...options.baseQueryParameters\n    }\n  });\n  return {\n    transporter,\n    /**\n     * The `appId` currently in use.\n     */\n    appId: appIdOption,\n    /**\n     * The `apiKey` currently in use.\n     */\n    apiKey: apiKeyOption,\n    /**\n     * Clears the cache of the transporter for the `requestsCache` and `responsesCache` properties.\n     */\n    clearCache() {\n      return Promise.all([transporter.requestsCache.clear(), transporter.responsesCache.clear()]).then(() => void 0);\n    },\n    /**\n     * Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system.\n     */\n    get _ua() {\n      return transporter.algoliaAgent.value;\n    },\n    /**\n     * Adds a `segment` to the `x-algolia-agent` sent with every requests.\n     *\n     * @param segment - The algolia agent (user-agent) segment to add.\n     * @param version - The version of the agent.\n     */\n    addAlgoliaAgent(segment, version) {\n      transporter.algoliaAgent.add({ segment, version });\n    },\n    /**\n     * Helper method to switch the API key used to authenticate the requests.\n     *\n     * @param params - Method params.\n     * @param params.apiKey - The new API Key to use.\n     */\n    setClientApiKey({ apiKey }) {\n      if (!authMode || authMode === \"WithinHeaders\") {\n        transporter.baseHeaders[\"x-algolia-api-key\"] = apiKey;\n      } else {\n        transporter.baseQueryParameters[\"x-algolia-api-key\"] = apiKey;\n      }\n    },\n    /**\n     * Helper: calls the `search` method but with certainty that we will only request Algolia records (hits) and not facets.\n     * Disclaimer: We don't assert that the parameters you pass to this method only contains `hits` requests to prevent impacting search performances, this helper is purely for typing purposes.\n     *\n     * @summary Search multiple indices for `hits`.\n     * @param searchMethodParams - Query requests and strategies. Results will be received in the same order as the queries.\n     * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions.\n     */\n    searchForHits(searchMethodParams, requestOptions) {\n      return this.search(searchMethodParams, requestOptions);\n    },\n    /**\n     * Helper: calls the `search` method but with certainty that we will only request Algolia facets and not records (hits).\n     * Disclaimer: We don't assert that the parameters you pass to this method only contains `facets` requests to prevent impacting search performances, this helper is purely for typing purposes.\n     *\n     * @summary Search multiple indices for `facets`.\n     * @param searchMethodParams - Query requests and strategies. Results will be received in the same order as the queries.\n     * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions.\n     */\n    searchForFacets(searchMethodParams, requestOptions) {\n      return this.search(searchMethodParams, requestOptions);\n    },\n    /**\n     * This method lets you send requests to the Algolia REST API.\n     * @param customPost - The customPost object.\n     * @param customPost.path - Path of the endpoint, for example `1/newFeature`.\n     * @param customPost.parameters - Query parameters to apply to the current query.\n     * @param customPost.body - Parameters to send with the custom request.\n     * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions.\n     */\n    customPost({ path, parameters, body }, requestOptions) {\n      validateRequired(\"path\", \"customPost\", path);\n      const requestPath = \"/{path}\".replace(\"{path}\", path);\n      const headers = {};\n      const queryParameters = parameters ? parameters : {};\n      const request = {\n        method: \"POST\",\n        path: requestPath,\n        queryParameters,\n        headers,\n        data: body ? body : {}\n      };\n      return transporter.request(request, requestOptions);\n    },\n    /**\n     * This method lets you send requests to the Algolia REST API.\n     *\n     * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call.\n     * @param customPost - The customPost object.\n     * @param customPost.path - Path of the endpoint, for example `1/newFeature`.\n     * @param customPost.parameters - Query parameters to apply to the current query.\n     * @param customPost.body - Parameters to send with the custom request.\n     * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions.\n     * @see customPost for the plain version.\n     */\n    customPostWithHTTPInfo({ path, parameters, body }, requestOptions) {\n      validateRequired(\"path\", \"customPostWithHTTPInfo\", path);\n      const requestPath = \"/{path}\".replace(\"{path}\", path);\n      const headers = {};\n      const queryParameters = parameters ? parameters : {};\n      const request = {\n        method: \"POST\",\n        path: requestPath,\n        queryParameters,\n        headers,\n        data: body ? body : {}\n      };\n      return transporter.requestWithHttpInfo(request, requestOptions);\n    },\n    /**\n     * Retrieves recommendations from selected AI models.\n     *\n     * Required API Key ACLs:\n     *  - search\n     * @param getRecommendationsParams - The getRecommendationsParams object.\n     * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions.\n     */\n    getRecommendations(getRecommendationsParams, requestOptions) {\n      if (getRecommendationsParams && Array.isArray(getRecommendationsParams)) {\n        const newSignatureRequest = {\n          requests: getRecommendationsParams\n        };\n        getRecommendationsParams = newSignatureRequest;\n      }\n      validateRequired(\"getRecommendationsParams\", \"getRecommendations\", getRecommendationsParams);\n      validateRequired(\"getRecommendationsParams.requests\", \"getRecommendations\", getRecommendationsParams.requests);\n      const requestPath = \"/1/indexes/*/recommendations\";\n      const headers = {};\n      const queryParameters = {};\n      const request = {\n        method: \"POST\",\n        path: requestPath,\n        queryParameters,\n        headers,\n        data: getRecommendationsParams,\n        useReadTransporter: true,\n        cacheable: true\n      };\n      return transporter.request(request, requestOptions);\n    },\n    /**\n     * Retrieves recommendations from selected AI models.\n     *\n     * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call.\n     *\n     * Required API Key ACLs:\n     *  - search\n     * @param getRecommendationsParams - The getRecommendationsParams object.\n     * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions.\n     * @see getRecommendations for the plain version.\n     */\n    getRecommendationsWithHTTPInfo(getRecommendationsParams, requestOptions) {\n      if (getRecommendationsParams && Array.isArray(getRecommendationsParams)) {\n        const newSignatureRequest = {\n          requests: getRecommendationsParams\n        };\n        getRecommendationsParams = newSignatureRequest;\n      }\n      validateRequired(\"getRecommendationsParams\", \"getRecommendationsWithHTTPInfo\", getRecommendationsParams);\n      validateRequired(\n        \"getRecommendationsParams.requests\",\n        \"getRecommendationsWithHTTPInfo\",\n        getRecommendationsParams.requests\n      );\n      const requestPath = \"/1/indexes/*/recommendations\";\n      const headers = {};\n      const queryParameters = {};\n      const request = {\n        method: \"POST\",\n        path: requestPath,\n        queryParameters,\n        headers,\n        data: getRecommendationsParams,\n        useReadTransporter: true,\n        cacheable: true\n      };\n      return transporter.requestWithHttpInfo(request, requestOptions);\n    },\n    /**\n     * Runs multiple search queries against one or more indices in a single API request.  Use cases include:  - Searching different indices, such as products and marketing content. - Run multiple queries on the same index with different parameters or filters.  If you know the expected result type, use the `searchForHits` or `searchForFacets` helper to simplify the response format.\n     *\n     * Required API Key ACLs:\n     *  - search\n     * @param searchMethodParams - Multi-query search request body. Results are returned in the same order as the requests.\n     * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions.\n     */\n    search(searchMethodParams, requestOptions) {\n      if (searchMethodParams && Array.isArray(searchMethodParams)) {\n        const newSignatureRequest = {\n          requests: searchMethodParams.map(({ params, ...legacyRequest }) => {\n            if (legacyRequest.type === \"facet\") {\n              return {\n                ...legacyRequest,\n                ...params,\n                type: \"facet\"\n              };\n            }\n            return {\n              ...legacyRequest,\n              ...params,\n              facet: void 0,\n              maxFacetHits: void 0,\n              facetQuery: void 0\n            };\n          })\n        };\n        searchMethodParams = newSignatureRequest;\n      }\n      validateRequired(\"searchMethodParams\", \"search\", searchMethodParams);\n      validateRequired(\"searchMethodParams.requests\", \"search\", searchMethodParams.requests);\n      const requestPath = \"/1/indexes/*/queries\";\n      const headers = {};\n      const queryParameters = {};\n      const request = {\n        method: \"POST\",\n        path: requestPath,\n        queryParameters,\n        headers,\n        data: searchMethodParams,\n        useReadTransporter: true,\n        cacheable: true\n      };\n      return transporter.request(request, requestOptions);\n    },\n    /**\n     * Runs multiple search queries against one or more indices in a single API request.  Use cases include:  - Searching different indices, such as products and marketing content. - Run multiple queries on the same index with different parameters or filters.  If you know the expected result type, use the `searchForHits` or `searchForFacets` helper to simplify the response format.\n     *\n     * Resolves with the full HTTP response information: status code, headers (when the requester captures them), raw body and deserialized data. Bypasses the requests and responses caches: always performs the API call.\n     *\n     * Required API Key ACLs:\n     *  - search\n     * @param searchMethodParams - Multi-query search request body. Results are returned in the same order as the requests.\n     * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions.\n     * @see search for the plain version.\n     */\n    searchWithHTTPInfo(searchMethodParams, requestOptions) {\n      if (searchMethodParams && Array.isArray(searchMethodParams)) {\n        const newSignatureRequest = {\n          requests: searchMethodParams.map(({ params, ...legacyRequest }) => {\n            if (legacyRequest.type === \"facet\") {\n              return {\n                ...legacyRequest,\n                ...params,\n                type: \"facet\"\n              };\n            }\n            return {\n              ...legacyRequest,\n              ...params,\n              facet: void 0,\n              maxFacetHits: void 0,\n              facetQuery: void 0\n            };\n          })\n        };\n        searchMethodParams = newSignatureRequest;\n      }\n      validateRequired(\"searchMethodParams\", \"searchWithHTTPInfo\", searchMethodParams);\n      validateRequired(\"searchMethodParams.requests\", \"searchWithHTTPInfo\", searchMethodParams.requests);\n      const requestPath = \"/1/indexes/*/queries\";\n      const headers = {};\n      const queryParameters = {};\n      const request = {\n        method: \"POST\",\n        path: requestPath,\n        queryParameters,\n        headers,\n        data: searchMethodParams,\n        useReadTransporter: true,\n        cacheable: true\n      };\n      return transporter.requestWithHttpInfo(request, requestOptions);\n    }\n  };\n}\n\n// lite/builds/browser.ts\nfunction liteClient(appId, apiKey, options) {\n  if (!appId || typeof appId !== \"string\") {\n    throw new Error(\"`appId` is missing.\");\n  }\n  if (!apiKey || typeof apiKey !== \"string\") {\n    throw new Error(\"`apiKey` is missing.\");\n  }\n  const { compression: _compression, ...browserOptions } = options || {};\n  return createLiteClient({\n    appId,\n    apiKey,\n    timeouts: {\n      connect: 1e3,\n      read: 2e3,\n      write: 3e4\n    },\n    logger: createNullLogger(),\n    requester: createXhrRequester(),\n    algoliaAgents: [{ segment: \"Browser\" }],\n    authMode: \"WithinQueryParameters\",\n    requestIdChannel: \"queryParameters\",\n    responsesCache: createMemoryCache(),\n    requestsCache: createMemoryCache({ serializable: false }),\n    hostsCache: createFallbackableCache({\n      caches: [createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }), createMemoryCache()]\n    }),\n    ...browserOptions\n  });\n}\nexport {\n  apiClientVersion,\n  liteClient\n};\n//# sourceMappingURL=browser.js.map","function i(e){return e instanceof Error&&e.name===\"AbortError\"}function d(e,s){return i(e)?s:e instanceof Error?e.message:\"Network request failed\"}function R({requesterOptions:e={}}={}){async function s(t){let o=new AbortController,a=o.signal,c=n=>setTimeout(()=>{o.abort()},n),m=c(t.connectTimeout),r;try{r=await fetch(t.url,{method:t.method,body:t.data||null,redirect:\"manual\",signal:a,...e,headers:{...e.headers,...t.headers}})}catch(n){return{status:0,content:d(n,\"Connection timeout\"),isTimedOut:i(n)}}clearTimeout(m),c(t.responseTimeout);try{let n=await r.text(),u={};return r.headers.forEach((h,f)=>{u[f]=h}),{content:n,headers:u,isTimedOut:!1,status:r.status}}catch(n){return{status:0,content:d(n,\"Socket timeout\"),isTimedOut:i(n)}}}async function l(t){let o=await fetch(t.url,{method:t.method,body:t.data||null,redirect:\"manual\",...e,headers:{...e.headers,...t.headers}});if(!o.ok){let a=await o.text();throw new Error(`HTTP ${o.status}: ${a}`)}if(o.body===null)throw new Error(\"Response body is null \\u2014 streaming not supported\");return o.body}return{send:s,sendStream:l}}export{R as createFetchRequester};\n//# sourceMappingURL=requester.fetch.browser.js.map","import { liteClient, LiteClient } from \"algoliasearch/lite\"\nimport {\n    createNullCache,\n    type EndRequest,\n    type Requester,\n    type Response,\n} from \"@algolia/client-common\"\nimport { createFetchRequester } from \"@algolia/requester-fetch\"\nimport { isEmptyQuerySearchPayload } from \"@ourworldindata/utils\"\nimport {\n    ALGOLIA_CACHED_QUERIES_URL,\n    ALGOLIA_ID,\n    ALGOLIA_SEARCH_KEY,\n} from \"../../settings/clientSettings.mjs\"\n\n// Multi-query search requests where every query string is empty (the\n// \"browse\" requests issued by default states: the search landing page, the\n// empty autocomplete panel, /latest, featured metrics, ...) don't depend on\n// user input, so instead of hitting Algolia directly we send them to a\n// Cloudflare function of ours that proxies Algolia and caches the results\n// aggressively (functions/api/search/cached-queries.ts). Everything else\n// goes to Algolia directly.\nconst shouldUseCachedQueriesEndpoint = (request: EndRequest): boolean => {\n    if (request.method.toUpperCase() !== \"POST\") return false\n    if (typeof request.data !== \"string\") return false\n    // Only the multi-query search endpoint is proxied\n    if (!request.url.includes(\"/1/indexes/*/queries\")) return false\n    try {\n        return isEmptyQuerySearchPayload(JSON.parse(request.data))\n    } catch {\n        return false\n    }\n}\n\nconst isSuccessStatus = (status: number): boolean =>\n    status >= 200 && status < 300\n\nconst createCachingRequester = (): Requester => {\n    const fetchRequester = createFetchRequester()\n    return {\n        async send(request: EndRequest): Promise<Response> {\n            if (!ALGOLIA_CACHED_QUERIES_URL) return fetchRequester.send(request)\n            if (!shouldUseCachedQueriesEndpoint(request))\n                return fetchRequester.send(request)\n\n            const response = await fetchRequester\n                .send({ ...request, url: ALGOLIA_CACHED_QUERIES_URL })\n                .catch(() => null)\n            if (response && isSuccessStatus(response.status)) return response\n\n            // If our caching endpoint is unavailable or rejects the request,\n            // fall back to querying Algolia directly\n            return fetchRequester.send(request)\n        },\n    }\n}\n\nlet liteSearchClient: LiteClient | null = null\n\n/**\n * Disable Algolia's response cache so React Query alone decides when cached\n * results should be reused or refetched.\n */\nexport const getLiteSearchClient = (): LiteClient => {\n    if (!liteSearchClient) {\n        liteSearchClient = liteClient(ALGOLIA_ID, ALGOLIA_SEARCH_KEY, {\n            requester: createCachingRequester(),\n            responsesCache: createNullCache(),\n        })\n    }\n    return liteSearchClient\n}\n\nlet autocompleteSearchClient: LiteClient | null = null\n\n/**\n * Keep Algolia's response cache for autocomplete. It already manages requests\n * through @algolia/autocomplete-js, so adding React Query solely for caching\n * would introduce another state layer. A separate client lets React Query-backed\n * searches disable Algolia's cache without making autocomplete re-request prior\n * input when users backspace or retype it.\n */\nexport const getAutocompleteSearchClient = (): LiteClient => {\n    if (!autocompleteSearchClient) {\n        autocompleteSearchClient = liteClient(ALGOLIA_ID, ALGOLIA_SEARCH_KEY)\n    }\n    return autocompleteSearchClient\n}\n","export const SearchResultHeaderSkeleton = () => {\n    return (\n        <div className=\"search-result-header-skeleton\">\n            <div className=\"search-result-header-skeleton__title\" />\n            <div className=\"search-result-header-skeleton__count\" />\n        </div>\n    )\n}\n","export const SearchDataTopicsResultsSkeleton = () => {\n    return (\n        <>\n            <div className=\"search-data-topics-results span-cols-14 grid grid-cols-12-full-width\">\n                <SearchChartHitMediumSkeleton />\n                <SearchChartHitMediumSkeleton />\n                <SearchChartHitMediumSkeleton />\n            </div>\n        </>\n    )\n}\n\nexport const SearchChartHitMediumSkeleton = () => (\n    <div className=\"search-data-topic--skeleton span-cols-14\">\n        <div className=\"search-data-topic__header--skeleton animate-pulse\"></div>\n        <ul className=\"search-data-topic__list--skeleton grid grid-cols-4\">\n            <CaptionedThumbnailSkeleton />\n            <CaptionedThumbnailSkeleton />\n            <CaptionedThumbnailSkeleton />\n            <CaptionedThumbnailSkeleton />\n        </ul>\n        <div className=\"search-data-topic__see-all-button--skeleton\" />\n    </div>\n)\n\nconst CaptionedThumbnailSkeleton = () => (\n    <li className=\"search-chart-skeleton animate-pulse span-cols-1\">\n        <div className=\"search-chart-skeleton__thumbnail\" />\n        <div className=\"search-chart-skeleton__title\" />\n        <div className=\"search-chart-skeleton__title\" />\n    </li>\n)\n","import { SearchResultHeaderSkeleton } from \"./SearchResultHeaderSkeleton.js\"\nimport { SearchChartHitMediumSkeleton } from \"./SearchDataTopicsResultsSkeleton.js\"\n\nexport const SearchDataResultsSkeleton = () => {\n    return (\n        <div className=\"search-data-results__hits animate-pulse\">\n            <SearchResultHeaderSkeleton />\n            <ul className=\"search-data-results__list\">\n                <li className=\"search-data-results__hit\">\n                    <SearchChartHitMediumSkeleton />\n                </li>\n                <li className=\"search-data-results__hit\">\n                    <SearchChartHitMediumSkeleton />\n                </li>\n                <li className=\"search-data-results__hit\">\n                    <SearchChartHitMediumSkeleton />\n                </li>\n            </ul>\n        </div>\n    )\n}\n","import { useQuery } from \"@tanstack/react-query\"\nimport { SearchResultType, FEATURED_METRICS_ID } from \"@ourworldindata/types\"\nimport { SearchChartHitComponent } from \"./search/SearchChartHitComponent.js\"\nimport { createTopicFilter, SEARCH_BASE_PATH } from \"./search/searchUtils.js\"\nimport { stateToSearchParams } from \"./search/searchState.js\"\nimport { queryCharts, searchQueryKeys } from \"./search/queries.js\"\nimport { getLiteSearchClient } from \"./search/searchClients.js\"\nimport { SearchDataResultsSkeleton } from \"./search/SearchDataResultsSkeleton.js\"\nimport { Button } from \"@ourworldindata/components\"\nimport { faMagnifyingGlass } from \"@fortawesome/free-solid-svg-icons\"\nimport cx from \"clsx\"\nimport { useDocumentContext } from \"./gdocs/DocumentContext.js\"\nimport {\n    getTopicPageHeading,\n    sentenceCaseIfNotTopicPage,\n} from \"@ourworldindata/utils\"\n\nconst MAX_MEDIUM_RESULTS = 4\nconst MAX_SMALL_RESULTS = 5\n\nexport type FeaturedMetricsProps = {\n    topicName: string\n    className?: string\n    isDataPage?: boolean\n    id?: string\n}\n\nexport const FeaturedMetrics = ({\n    topicName,\n    className,\n    isDataPage = false,\n    id = FEATURED_METRICS_ID,\n}: FeaturedMetricsProps) => {\n    const liteSearchClient = getLiteSearchClient()\n    const { gdocType } = useDocumentContext()\n    const headingFragment = getTopicPageHeading(\"featuredData\", gdocType)\n    const headingCaseCorrected = `${headingFragment} on ${sentenceCaseIfNotTopicPage(topicName, gdocType, false)}`\n\n    const searchState = {\n        query: \"\",\n        filters: [createTopicFilter(topicName)],\n        requireAllCountries: false,\n        resultType: SearchResultType.DATA,\n    }\n\n    const { data, isLoading, isError } = useQuery({\n        // reusing the same query key function as search for simplicity but\n        // would technically collide if using the same query client instance\n        queryKey: searchQueryKeys.charts(searchState),\n        queryFn: () => queryCharts(liteSearchClient, searchState, 0),\n        enabled: Boolean(topicName),\n    })\n\n    if (isError || !topicName) return null\n\n    let hits = (data?.hits ?? []).slice(\n        0,\n        MAX_MEDIUM_RESULTS + MAX_SMALL_RESULTS\n    )\n    // for all-charts-vs-featured-v1 experiment, exclude a hit that\n    // links to the page we are already on.\n    if (isDataPage && typeof window !== \"undefined\") {\n        hits = hits.filter(\n            (hit) =>\n                hit.type !== \"chart\" ||\n                `/grapher/${hit.slug}` !== window.location.pathname\n        )\n    }\n\n    if (!isLoading && hits.length === 0) return null\n\n    const params = stateToSearchParams(searchState)\n    const searchHref = `${SEARCH_BASE_PATH}?${params.toString()}`\n\n    return (\n        <section className={cx(className, \"needs-dividers\")} id={id}>\n            {isDataPage ? (\n                <h2 className=\"featured-metrics__title\">\n                    <span>More Data on {topicName}</span>\n                </h2>\n            ) : (\n                <h1 className=\"h1-semibold\">\n                    <span>{headingCaseCorrected}</span>\n                    <a\n                        className=\"deep-link\"\n                        aria-labelledby={id}\n                        href={`#${id}`}\n                    />\n                </h1>\n            )}\n            {isLoading ? (\n                <SearchDataResultsSkeleton />\n            ) : (\n                <>\n                    <ul className=\"search-data-results__list\">\n                        {hits.map((hit, hitIndex) => {\n                            const variant =\n                                hitIndex < MAX_MEDIUM_RESULTS\n                                    ? \"medium\"\n                                    : \"small\"\n\n                            return (\n                                <li\n                                    className=\"search-data-results__hit\"\n                                    key={hit.objectID}\n                                >\n                                    <SearchChartHitComponent\n                                        hit={hit}\n                                        variant={variant}\n                                        selectedRegionNames={[]}\n                                        onClick={() => undefined}\n                                    />\n                                </li>\n                            )\n                        })}\n                    </ul>\n                    <div className=\"article-block__featured-metrics__see-all\">\n                        <Button\n                            theme=\"solid-vermillion\"\n                            text={`See all ${data?.nbHits ?? 0} charts on this topic`}\n                            href={searchHref}\n                            dataTrackNote=\"featured-metrics-see-all\"\n                            icon={faMagnifyingGlass}\n                            iconPosition=\"left\"\n                        />\n                    </div>\n                </>\n            )}\n        </section>\n    )\n}\n","import { QueryClient, QueryCache } from \"@tanstack/react-query\"\nimport * as Sentry from \"@sentry/react\"\n\nlet queryClient: QueryClient | null = null\n\n// Shared site-wide React Query client. Individual queries should override\n// staleTime as appropriate (e.g. Infinity for static config).\nexport const getSiteQueryClient = (): QueryClient => {\n    if (!queryClient) {\n        queryClient = new QueryClient({\n            defaultOptions: {\n                queries: {\n                    staleTime: 60 * 60 * 1000, // 1 hour\n                },\n            },\n            // Manually sending errors to Sentry as React Query silently captures\n            // errors. Some things to consider before setting up an error handling\n            // strategy:\n            // - throwOnError (v5) or useErrorBoundary (v4) defined at the query client\n            //   level means that errors in queries are thrown and can be caught by an\n            //   error boundary.\n            // - however, a global error boundary around the search component means that\n            //   a single fetch error (e.g. in SearchChartHitSmall) crashes the whole\n            //   search results page. This calls for a more fine-grained approach.\n            //\n            // Logging is not a substitute for actual error handling, but rather a way\n            // to gauge the prevalence of fetch errors in a React Query world, where\n            // queries are now automatically retried (3 times by default) before\n            // actually failing.\n            queryCache: new QueryCache({\n                onError: (error) => {\n                    Sentry.captureException(error)\n                },\n            }),\n        })\n    }\n    return queryClient\n}\n","import { PropsWithChildren } from \"react\"\nimport { QueryClientProvider } from \"@tanstack/react-query\"\nimport { getSiteQueryClient } from \"./queryClient.js\"\n\nexport const SiteQueryClientProvider = ({ children }: PropsWithChildren) => {\n    const queryClient = getSiteQueryClient()\n\n    return (\n        <QueryClientProvider client={queryClient}>\n            {children}\n        </QueryClientProvider>\n    )\n}\n","import cx from \"clsx\"\nimport { RelatedChart } from \"@ourworldindata/utils\"\nimport { ChartRecordType, SearchChartHit } from \"@ourworldindata/types\"\nimport { SearchChartHitRichData } from \"./search/SearchChartHitRichData.js\"\nimport { SiteQueryClientProvider } from \"./SiteQueryClientProvider.js\"\nimport { SiteAnalytics } from \"./SiteAnalytics.js\"\n\nexport const RELATED_DATA_CHARTS_ID = \"explore-related-charts\"\n\nconst NUM_RELATED_CHARTS = 5\n\nconst analytics = new SiteAnalytics()\n\n// The rich-data card is driven almost entirely by the chart's\n// `.search-result.json` response, so a minimal synthesized hit is enough.\n// `availableEntities`/`availableTabs` are left empty: there's no region\n// selection on the data page, and the table caption's entity count now comes\n// from the search-result response (numAvailableEntities).\nfunction relatedChartToSearchChartHit(\n    chart: RelatedChart,\n    index: number\n): SearchChartHit {\n    return {\n        type: ChartRecordType.Chart,\n        slug: chart.slug,\n        title: chart.title,\n        variantName: chart.variantName ?? undefined,\n        availableEntities: [],\n        availableTabs: [],\n        objectID: String(chart.chartId),\n        __position: index,\n    }\n}\n\nexport const RelatedDataCharts = ({\n    charts,\n    className,\n    id = RELATED_DATA_CHARTS_ID,\n}: {\n    charts: RelatedChart[]\n    className?: string\n    id?: string\n}) => {\n    if (charts.length === 0) return null\n\n    const visibleCharts = charts.slice(0, NUM_RELATED_CHARTS)\n\n    return (\n        <SiteQueryClientProvider>\n            <section className={cx(\"related-data-charts\", className)} id={id}>\n                <ul className=\"related-data-charts__list\">\n                    {visibleCharts.map((chart, index) => {\n                        const hit = relatedChartToSearchChartHit(chart, index)\n                        return (\n                            <li\n                                className=\"related-data-charts__hit\"\n                                key={chart.chartId}\n                            >\n                                <SearchChartHitRichData\n                                    hit={hit}\n                                    variant=\"medium\"\n                                    onClick={(vizType) =>\n                                        analytics.logSiteClick(\n                                            \"related-data-charts\",\n                                            // `<1-indexed position>:<slug>[:<vizType>]`\n                                            // — position lets us see which card\n                                            // in the list was clicked.\n                                            [\n                                                index + 1,\n                                                chart.slug,\n                                                ...(vizType ? [vizType] : []),\n                                            ].join(\":\")\n                                        )\n                                    }\n                                />\n                            </li>\n                        )\n                    })}\n                </ul>\n            </section>\n        </SiteQueryClientProvider>\n    )\n}\n","import {\n    DownloadApiOptions,\n    DownloadButtonLink,\n    ExpandableToggle,\n    makeFilteredDownloadDescription,\n    makeFullDownloadDescription,\n    CodeSnippet,\n    NonRedistributableDataNotice,\n} from \"@ourworldindata/components\"\nimport { CoreColumn, OwidTable } from \"@ourworldindata/core-table\"\nimport {\n    CsvDownloadType,\n    getDataDownloadFilename,\n    getDownloadUrl,\n    getNonRedistributableInfo,\n    useDataApiDownloadConfig,\n    type DataDownloadContextBase,\n} from \"@ourworldindata/grapher\"\nimport {\n    Distribution,\n    ArchiveContext,\n    OwidColumnDef,\n    type DownloadRewriteTarget,\n} from \"@ourworldindata/types\"\nimport {\n    makeDownloadCodeExamples,\n    SERVER_SIDE_DOWNLOAD_HELP_TEXT,\n} from \"@ourworldindata/utils\"\n\nfunction getDownloadRewriteAttrs(target: DownloadRewriteTarget): {\n    \"data-owid-download-url-target\": DownloadRewriteTarget\n} {\n    return { \"data-owid-download-url-target\": target }\n}\n\nfunction getCodeExampleRewriteTarget(name: string): DownloadRewriteTarget {\n    switch (name) {\n        case \"Excel / Google Sheets\":\n            return \"api-example-excel\"\n        case \"Python with Pandas\":\n            return \"api-example-python\"\n        case \"R\":\n            return \"api-example-r\"\n        case \"Stata\":\n            return \"api-example-stata\"\n        default:\n            throw new Error(`Unknown download code example: ${name}`)\n    }\n}\n\nfunction ApiAndCodeExamplesSection({\n    downloadCtxBase,\n    firstYColDef,\n}: {\n    downloadCtxBase: DataDownloadContextBase\n    firstYColDef?: OwidColumnDef\n}) {\n    const {\n        csvUrl,\n        metadataUrl,\n        onlyVisible,\n        setOnlyVisible,\n        shortColNames,\n        setShortColNames,\n    } = useDataApiDownloadConfig({ downloadCtxBase, firstYColDef })\n    const codeExamples = makeDownloadCodeExamples(csvUrl, metadataUrl)\n\n    return (\n        <>\n            <div className=\"downloads-section\">\n                <h4 className=\"citation__how-to-header\">Data API</h4>\n                <p className=\"citation__paragraph\">\n                    Use these URLs to programmatically access this chart's data\n                    and configure your requests with the options below.{\" \"}\n                    <a\n                        href=\"https://docs.owid.io/projects/etl/api/\"\n                        data-track-note=\"datapage_download_api_docs\"\n                    >\n                        Our documentation provides more information\n                    </a>{\" \"}\n                    on how to use the API, and you can find a few code examples\n                    below.\n                </p>\n\n                <DownloadApiOptions\n                    onlyVisible={onlyVisible}\n                    onOnlyVisibleChange={setOnlyVisible}\n                    shortColNames={shortColNames}\n                    onShortColNamesChange={setShortColNames}\n                    firstYColDef={firstYColDef}\n                />\n                <section className=\"downloads__api-urls\">\n                    <div>\n                        <h5 className=\"downloads__code-label\">\n                            Data URL (CSV format)\n                        </h5>\n                        <CodeSnippet\n                            code={csvUrl}\n                            theme=\"light\"\n                            codeAttributes={getDownloadRewriteAttrs(\"api-csv\")}\n                        />\n                    </div>\n                    <div>\n                        <h5 className=\"downloads__code-label\">\n                            Metadata URL (JSON format)\n                        </h5>\n                        <CodeSnippet\n                            code={metadataUrl}\n                            theme=\"light\"\n                            codeAttributes={getDownloadRewriteAttrs(\n                                \"api-metadata\"\n                            )}\n                        />\n                    </div>\n                </section>\n            </div>\n            <div className=\"download-data-section downloads-section\">\n                <ExpandableToggle\n                    label=\"Code examples\"\n                    alwaysVisibleDescription={\n                        <p className=\"citation__paragraph\">\n                            Examples of how to load this data into different\n                            data analysis tools.\n                        </p>\n                    }\n                    content={\n                        <div className=\"downloads__code-blocks\">\n                            {Object.entries(codeExamples).map(\n                                ([name, snippet]) => (\n                                    <div key={name}>\n                                        <h5 className=\"downloads__code-label\">\n                                            {name}\n                                        </h5>\n                                        <CodeSnippet\n                                            code={snippet}\n                                            theme=\"light\"\n                                            codeAttributes={getDownloadRewriteAttrs(\n                                                getCodeExampleRewriteTarget(\n                                                    name\n                                                )\n                                            )}\n                                        />\n                                    </div>\n                                )\n                            )}\n                        </div>\n                    }\n                />\n            </div>\n        </>\n    )\n}\n\nexport type DownloadSectionProps = {\n    slug: string\n    baseUrl?: string\n    searchParams?: URLSearchParams\n    externalQueryParams?: Record<string, string>\n    tableForDownload?: OwidTable\n    filteredTableForDownload?: OwidTable\n    yColumns?: CoreColumn[]\n    archivedChartInfo?: ArchiveContext\n    distribution?: Distribution\n    hideRowCounts?: boolean\n}\n\nexport default function DownloadSection({\n    slug,\n    baseUrl,\n    searchParams,\n    externalQueryParams,\n    tableForDownload,\n    filteredTableForDownload,\n    yColumns,\n    archivedChartInfo,\n    distribution,\n    hideRowCounts,\n}: DownloadSectionProps) {\n    const isOnArchivalPage = archivedChartInfo?.type === \"archive-page\"\n\n    const {\n        cols: nonRedistributableCols,\n        sourceLinks: tableForDownloadSourceLinks,\n    } = getNonRedistributableInfo(tableForDownload)\n\n    const externalSearchParams = new URLSearchParams()\n    for (const [key, value] of Object.entries(externalQueryParams ?? {})) {\n        if (value) {\n            externalSearchParams.set(key, value)\n        }\n    }\n\n    const downloadCtx: DataDownloadContextBase = {\n        slug,\n        searchParams: new URLSearchParams(searchParams),\n        externalSearchParams,\n        baseUrl: baseUrl ?? `/grapher/${slug}`,\n    }\n\n    const fullDownloadUrl = getDownloadUrl(\"zip\", {\n        ...downloadCtx,\n        csvDownloadType: CsvDownloadType.Full,\n        shortColNames: false,\n    })\n\n    const filteredDownloadUrl = getDownloadUrl(\"zip\", {\n        ...downloadCtx,\n        csvDownloadType: CsvDownloadType.CurrentSelection,\n        shortColNames: false,\n    })\n\n    const fullDownloadFilename = getDataDownloadFilename({\n        slug,\n        extension: \"zip\",\n        csvDownloadType: CsvDownloadType.Full,\n    })\n\n    const filteredDownloadFilename = getDataDownloadFilename({\n        slug,\n        extension: \"zip\",\n        csvDownloadType: CsvDownloadType.CurrentSelection,\n    })\n\n    let archiveDownloadVisUrl = \"\"\n    if (isOnArchivalPage) {\n        const overlaySearchParams = new URLSearchParams(searchParams)\n        overlaySearchParams.set(\"overlay\", \"download-vis\")\n        archiveDownloadVisUrl = `?${overlaySearchParams.toString()}`\n    }\n\n    let archiveDownloadDataUrl = \"\"\n    if (isOnArchivalPage) {\n        const overlaySearchParams = new URLSearchParams(searchParams)\n        overlaySearchParams.set(\"overlay\", \"download-data\")\n        archiveDownloadDataUrl = `?${overlaySearchParams.toString()}`\n    }\n\n    const firstYColDef = yColumns?.[0]?.def\n    const sourceLinksFromDistribution =\n        distribution?.allowed === false ? distribution.sourceLinks : undefined\n    const sourceLinks =\n        tableForDownloadSourceLinks ?? sourceLinksFromDistribution ?? []\n    const shouldShowNonRedistributableNotice =\n        !!nonRedistributableCols?.length ||\n        (!tableForDownload && distribution?.allowed === false)\n\n    const fullDownloadDescription = makeFullDownloadDescription(\n        hideRowCounts ? undefined : tableForDownload?.numRows\n    )\n    const filteredDownloadDescription = makeFilteredDownloadDescription({\n        numRows: hideRowCounts ? undefined : filteredTableForDownload?.numRows,\n    })\n\n    return (\n        <div className=\"downloads grid span-cols-12\">\n            <h3\n                className=\"metadata-section__heading span-cols-2 span-lg-cols-3 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\"\n                id=\"download\"\n            >\n                Download\n            </h3>\n            <div className=\"col-start-4 span-cols-6 col-lg-start-5 span-lg-cols-7 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\">\n                {isOnArchivalPage ? (\n                    <div className=\"downloads-section\">\n                        <h4 className=\"citation__how-to-header\">\n                            Quick download\n                        </h4>\n                        {shouldShowNonRedistributableNotice ? (\n                            <>\n                                <p className=\"citation__paragraph\">\n                                    You can download the{\" \"}\n                                    <a\n                                        href={archiveDownloadVisUrl}\n                                        data-track-note=\"datapage_download_vis_link\"\n                                    >\n                                        visualization\n                                    </a>{\" \"}\n                                    as an image.\n                                </p>\n                                <div className=\"citation__paragraph\">\n                                    <NonRedistributableDataNotice\n                                        sourceLinks={sourceLinks}\n                                        listClassName=\"metadata-list\"\n                                    />\n                                </div>\n                            </>\n                        ) : (\n                            <p className=\"citation__paragraph\">\n                                You can download the{\" \"}\n                                <a\n                                    href={archiveDownloadVisUrl}\n                                    data-track-note=\"datapage_download_vis_link\"\n                                >\n                                    visualization\n                                </a>{\" \"}\n                                as an image or download the chart{\" \"}\n                                <a\n                                    href={archiveDownloadDataUrl}\n                                    data-track-note=\"datapage_download_data_link\"\n                                >\n                                    data\n                                </a>\n                                .\n                            </p>\n                        )}\n                    </div>\n                ) : shouldShowNonRedistributableNotice ? (\n                    <div className=\"downloads-section\">\n                        <h4 className=\"citation__how-to-header\">\n                            The data in this chart is not available to download\n                        </h4>\n                        <div className=\"citation__paragraph\">\n                            <NonRedistributableDataNotice\n                                sourceLinks={sourceLinks}\n                                listClassName=\"metadata-list\"\n                            />\n                        </div>\n                    </div>\n                ) : (\n                    <>\n                        <div className=\"downloads-section\">\n                            <h4 className=\"citation__how-to-header\">\n                                Quick download\n                            </h4>\n                            <p className=\"citation__paragraph\">\n                                {SERVER_SIDE_DOWNLOAD_HELP_TEXT}\n                            </p>\n                            <div className=\"downloads__download-buttons\">\n                                <DownloadButtonLink\n                                    title=\"Download full data\"\n                                    description={fullDownloadDescription}\n                                    icon=\"full\"\n                                    trackingNote=\"datapage_download_full_data--server\"\n                                    href={fullDownloadUrl}\n                                    download={fullDownloadFilename}\n                                    {...getDownloadRewriteAttrs(\n                                        \"download-full-data\"\n                                    )}\n                                />\n                                <DownloadButtonLink\n                                    title=\"Download displayed data\"\n                                    description={filteredDownloadDescription}\n                                    icon=\"selected\"\n                                    trackingNote=\"datapage_download_filtered_data--server\"\n                                    href={filteredDownloadUrl}\n                                    download={filteredDownloadFilename}\n                                    {...getDownloadRewriteAttrs(\n                                        \"download-filtered-data\"\n                                    )}\n                                />\n                            </div>\n                        </div>\n                        <ApiAndCodeExamplesSection\n                            downloadCtxBase={downloadCtx}\n                            firstYColDef={firstYColDef}\n                        />\n                    </>\n                )}\n            </div>\n        </div>\n    )\n}\n","import {\n    DataPageDataV2,\n    DataPageRelatedResearch,\n    getAttributionFragmentsFromVariable,\n    getLastUpdatedFromVariable,\n    getNextUpdateFromVariable,\n    GrapherInterface,\n    intersection,\n    omitUndefinedValues,\n    OwidVariableWithSource,\n} from \"@ourworldindata/utils\"\n\nexport const DEFAULT_PAGE_DESCRIPTION =\n    \"An interactive visualization from Our World in Data.\"\n\nexport function processRelatedResearch(\n    candidates: DataPageRelatedResearch[],\n    topicTags: string[]\n) {\n    let relatedResearch\n    if (candidates.length > 3 && topicTags.length > 0) {\n        relatedResearch = candidates.filter((research) => {\n            const shared = intersection(research.tags, topicTags)\n            return shared.length > 0\n        })\n    } else relatedResearch = [...candidates]\n\n    return relatedResearch\n}\nexport function getDatapageDataV2(\n    variableMetadata: OwidVariableWithSource,\n    partialGrapherConfig: GrapherInterface\n): DataPageDataV2 {\n    const lastUpdated = getLastUpdatedFromVariable(variableMetadata) ?? \"\"\n    const nextUpdate = getNextUpdateFromVariable(variableMetadata)\n    return {\n        status: \"draft\",\n        title: variableMetadata.presentation?.titlePublic\n            ? omitUndefinedValues({\n                  title: variableMetadata.presentation?.titlePublic,\n                  attributionShort:\n                      variableMetadata.presentation?.attributionShort,\n                  titleVariant: variableMetadata.presentation?.titleVariant,\n              })\n            : {\n                  title:\n                      partialGrapherConfig.title ??\n                      variableMetadata.display?.name ??\n                      variableMetadata.name ??\n                      \"\",\n              },\n        description: variableMetadata.description,\n        descriptionShort: variableMetadata.descriptionShort,\n        descriptionFromProducer: variableMetadata.descriptionFromProducer,\n        attributionShort: variableMetadata.presentation?.attributionShort,\n        titleVariant: variableMetadata.presentation?.titleVariant,\n        topicTagsLinks: variableMetadata.presentation?.topicTagsLinks ?? [],\n        attributions: getAttributionFragmentsFromVariable(variableMetadata),\n        descriptionKey: variableMetadata.descriptionKey,\n        descriptionProcessing: variableMetadata.descriptionProcessing,\n        owidProcessingLevel: variableMetadata.processingLevel,\n        dateRange: variableMetadata.timespan ?? \"\",\n        lastUpdated: lastUpdated,\n        nextUpdate: nextUpdate,\n        allCharts: [],\n        relatedChartsByCoview: [],\n        relatedResearch: [],\n        source: variableMetadata.source,\n        origins: variableMetadata.origins ?? [],\n        chartConfig: partialGrapherConfig as Record<string, unknown>,\n        license: partialGrapherConfig.license,\n        unit: variableMetadata.display?.unit ?? variableMetadata.unit,\n        unitConversionFactor: variableMetadata.display?.conversionFactor,\n    }\n}\n","import { createContext } from \"react\"\nimport {\n    LinkedAuthor,\n    LinkedCallouts,\n    LinkedChart,\n    LinkedIndicator,\n    OwidGdocMinimalPostInterface,\n    ImageMetadata,\n    RelatedChart,\n    LatestAnnouncement,\n    LatestDataInsight,\n    OwidGdocHomepageMetadata,\n    DbEnrichedLatestWork,\n    NarrativeChartInfo,\n    MinimalTag,\n    LinkedStaticViz,\n    BespokeMetadata,\n} from \"@ourworldindata/types\"\n\nexport type Attachments = {\n    donors?: string[]\n    linkedAuthors?: LinkedAuthor[]\n    linkedCharts: Record<string, LinkedChart>\n    linkedIndicators: Record<number, LinkedIndicator>\n    linkedDocuments: Record<string, OwidGdocMinimalPostInterface>\n    imageMetadata: Record<string, ImageMetadata>\n    relatedCharts: RelatedChart[]\n    latestDataInsights?: LatestDataInsight[]\n    latestAnnouncements?: LatestAnnouncement[]\n    homepageMetadata?: OwidGdocHomepageMetadata\n    latestWorkLinks?: DbEnrichedLatestWork[]\n    linkedNarrativeCharts?: Record<string, NarrativeChartInfo>\n    linkedStaticViz?: Record<string, LinkedStaticViz>\n    tags: MinimalTag[]\n    topicArea?: string\n    linkedCallouts?: LinkedCallouts\n    bespokeMetadata?: BespokeMetadata\n}\n\nexport const AttachmentsContext = createContext<Attachments>({\n    linkedAuthors: [],\n    linkedDocuments: {},\n    imageMetadata: {},\n    linkedCharts: {},\n    linkedIndicators: {},\n    relatedCharts: [],\n    latestDataInsights: [],\n    latestAnnouncements: [],\n    homepageMetadata: {},\n    latestWorkLinks: [],\n    linkedNarrativeCharts: {},\n    linkedStaticViz: {},\n    tags: [],\n    linkedCallouts: {},\n})\n","import * as _ from \"lodash-es\"\nimport { useEffect, useState, useSyncExternalStore } from \"react\"\nimport { MultiEmbedderSingleton } from \"./multiembedder/MultiEmbedder.js\"\nimport { getWindowQueryStr } from \"@ourworldindata/utils\"\nimport { reaction } from \"mobx\"\n\n// True while the user is actively scrolling; flips back to false once\n// scrolling has paused for `idleMs`. Lets consumers react to \"scrolling\n// settled\" by watching for the transition back to false.\nexport const useIsScrolling = (idleMs: number): boolean => {\n    const [isScrolling, setIsScrolling] = useState(false)\n\n    useEffect(() => {\n        const settle = _.debounce(() => setIsScrolling(false), idleMs)\n        const onScroll = () => {\n            setIsScrolling(true)\n            settle()\n        }\n        document.addEventListener(\"scroll\", onScroll, { passive: true })\n        return () => {\n            document.removeEventListener(\"scroll\", onScroll)\n            settle.cancel()\n        }\n    }, [idleMs])\n\n    return isScrolling\n}\n\nexport const useEmbedChart = (\n    refChartContainer: React.RefObject<HTMLDivElement | null>,\n    isPreviewing: boolean\n) => {\n    useEffect(() => {\n        if (refChartContainer.current) {\n            // Track newly injected <figure> elements in embedder\n            MultiEmbedderSingleton.observeFigures(\n                refChartContainer.current,\n                isPreviewing\n            )\n        }\n    }, [refChartContainer, isPreviewing])\n}\n\nexport const useTriggerOnEscape = (\n    trigger: VoidFunction,\n    { active = true }: { active?: boolean } = {}\n) => {\n    useEffect(() => {\n        if (!active) return\n\n        const handleEscape = (e: KeyboardEvent) => {\n            if (e.key === \"Escape\") {\n                trigger()\n            }\n        }\n        document.addEventListener(\"keydown\", handleEscape)\n        return () => {\n            document.removeEventListener(\"keydown\", handleEscape)\n        }\n    }, [trigger, active])\n}\n\n// Transforms Mobx state into a functional React state, by setting up\n// a listener with Mobx's `reaction` and updating the React state.\n// Make sure that the `mobxStateGetter` function is wrapped in `useCallback`,\n// otherwise the listener will be set up on every render, causing\n// an infinite loop.\nexport const useMobxStateToReactState = <T>(\n    mobxStateGetter: () => T,\n    enabled: boolean = true\n) => {\n    const [state, setState] = useState(() =>\n        enabled ? mobxStateGetter() : undefined\n    )\n\n    useEffect(() => {\n        if (!enabled) return\n        const disposer = reaction(mobxStateGetter, setState, {\n            fireImmediately: true,\n        })\n        return disposer\n    }, [enabled, mobxStateGetter])\n    return state\n}\n\nexport const useWindowQueryParams = () => {\n    function subscribe(callback: () => void) {\n        const navigation = window.navigation\n        if (navigation) {\n            // At the time of writing (June 2025), the Navigation API is only\n            // available in Chrome/Edge 102+, and not in Firefox or Safari.\n            // https://caniuse.com/mdn-api_navigation\n            navigation.addEventListener(\"navigatesuccess\", callback)\n            return () => {\n                navigation.removeEventListener(\"navigatesuccess\", callback)\n            }\n        } else {\n            // Fall back to polling.\n            let lastQueryString = getWindowQueryStr()\n            const interval = setInterval(() => {\n                const currentQueryString = getWindowQueryStr()\n                if (currentQueryString !== lastQueryString) {\n                    lastQueryString = currentQueryString\n                    callback()\n                }\n            }, 1000)\n            return () => clearInterval(interval)\n        }\n    }\n\n    function getSnapshot() {\n        if (typeof window === \"undefined\") return \"\"\n        return getWindowQueryStr()\n    }\n\n    function getServerSnapshot() {\n        return \"\"\n    }\n\n    return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot)\n}\n\nconst subscribeToNothing = () => () => undefined\n\n/**\n * Returns false during server rendering and hydration, and true afterwards.\n * Unlike setting state in a mount effect, it doesn't need an extra render when\n * the component mounts on the client after hydration.\n */\nexport const useHasHydrated = (): boolean =>\n    useSyncExternalStore(\n        subscribeToNothing,\n        () => true,\n        () => false\n    )\n","import { useContext, createContext } from \"react\"\nimport {\n    CalloutFunction,\n    ImageMetadata,\n    LinkedChart,\n    OwidGdocPostContent,\n    OwidGdocMinimalPostInterface,\n    LinkedIndicator,\n    OwidGdocDataInsightContent,\n    ContentGraphLinkType,\n    OwidGdocDataInsightInterface,\n    OwidGdocPostInterface,\n    OwidEnrichedGdocBlock,\n    OwidEnrichedGdocBlockTypeMap,\n    LinkedStaticViz,\n    OwidGdocType,\n} from \"@ourworldindata/types\"\n\nimport {\n    getCanonicalUrl,\n    getLinkType,\n    getUrlTarget,\n} from \"@ourworldindata/components\"\nimport {\n    formatAuthors,\n    formatAuthorsForBibtex,\n    getCalloutValue,\n    getRegionByNameOrVariantName,\n    makeLinkedCalloutKey,\n    slugify,\n    traverseEnrichedBlock,\n    Url,\n} from \"@ourworldindata/utils\"\nimport { AttachmentsContext } from \"./AttachmentsContext.js\"\nimport { PROD_URL } from \"../SiteConstants.js\"\nimport { BAKED_BASE_URL, IS_ARCHIVE } from \"../../settings/clientSettings.mjs\"\n\nconst getOrigin = (url: string, base?: string): string | undefined => {\n    try {\n        return new URL(url, base).origin\n    } catch {\n        return undefined\n    }\n}\n\nexport function isExternalUrl(\n    linkType: ContentGraphLinkType,\n    url: string\n): boolean {\n    if (linkType !== ContentGraphLinkType.Url) return false\n    const bakedOrigin = getOrigin(BAKED_BASE_URL)\n    if (!bakedOrigin) return false\n    const linkOrigin = getOrigin(url, bakedOrigin)\n    if (!linkOrigin) return false\n    return linkOrigin !== bakedOrigin\n}\n\nexport const breadcrumbColorForCoverColor = (\n    coverColor: OwidGdocPostContent[\"cover-color\"]\n): \"white\" | \"blue\" => {\n    // exhaustive list of all possible cover colors\n    switch (coverColor) {\n        case \"sdg-color-1\": // red\n        case \"sdg-color-3\": // green\n        case \"sdg-color-4\": // red\n        case \"sdg-color-5\": // orange-red\n        case \"sdg-color-8\": // dark red\n        case \"sdg-color-10\": // purple\n        case \"sdg-color-13\": // dark green\n        case \"sdg-color-14\": // blue\n        case \"sdg-color-16\": // blue\n        case \"sdg-color-17\": // dark blue\n            return \"white\"\n        case \"sdg-color-2\": // orange\n        case \"sdg-color-6\": // light blue\n        case \"sdg-color-7\": // yellow\n        case \"sdg-color-9\": // orange\n        case \"sdg-color-11\": // yellow orange\n        case \"sdg-color-12\": // yellow-brown\n        case \"sdg-color-15\": // light green\n        case \"amber\": // amber\n        case undefined: // default cover color: blue-10\n            return \"blue\"\n    }\n}\n\nexport const useLinkedAuthor = (\n    name: string\n): {\n    name: string\n    slug: string | null\n    featuredImage: string | null\n} => {\n    const { linkedAuthors } = useContext(AttachmentsContext)\n    const author = linkedAuthors?.find((author) => author.name === name)\n    if (!author) return { name, slug: null, featuredImage: null }\n    return author\n}\n\n// Older gdoc content can still pass \"Name (role)\" through to rendering.\nconst stripTrailingAuthorRole = (name: string): string =>\n    name.replace(/\\s*\\([^)]+\\)\\s*$/, \"\")\n\nexport const getAuthorTeamAnchorId = (name: string): string => {\n    const nameWithoutRole = stripTrailingAuthorRole(name)\n    const nameWithoutTitle = nameWithoutRole\n        .replace(/^(Dr\\.|Professor)\\s+/, \"\")\n        .replace(/\\s*,\\s*[^,]+$/, \"\")\n    return slugify(\n        // Convert letters with diacritics to their base Latin letters,\n        // e.g. \"é\" -> \"e\".\n        nameWithoutTitle.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\")\n    )\n}\n\nconst authorNamesWithoutTeamAnchors = new Set([\n    \"guest authors\",\n    \"our world in data\",\n    \"our world in data team\",\n])\n\nexport const getAuthorTeamAnchorUrl = (\n    name: string,\n    baseUrl: string = \"\"\n): string => {\n    const nameWithoutRole = stripTrailingAuthorRole(name)\n    if (authorNamesWithoutTeamAnchors.has(nameWithoutRole.toLowerCase())) {\n        return `${baseUrl}/team`\n    }\n    return `${baseUrl}/team#${getAuthorTeamAnchorId(nameWithoutRole)}`\n}\n\ntype LinkedDocument = OwidGdocMinimalPostInterface & { url: string }\n\nexport const getLinkedDocumentUrl = (\n    linkedDocument: Pick<OwidGdocMinimalPostInterface, \"slug\" | \"type\">,\n    originalUrl: string,\n    baseUrl: string = BAKED_BASE_URL\n): string => {\n    if (IS_ARCHIVE) {\n        baseUrl = PROD_URL\n    }\n\n    const parsedUrl = Url.fromURL(originalUrl)\n\n    let slug = linkedDocument.slug\n    if (linkedDocument.type === OwidGdocType.Profile) {\n        const entityParam = parsedUrl.queryParams.entity\n        if (entityParam) {\n            const region = getRegionByNameOrVariantName(entityParam)\n            if (region) {\n                slug = `${slug}/${region.slug}`\n            }\n        }\n    }\n\n    const canonicalUrl = getCanonicalUrl(baseUrl, {\n        slug,\n        content: { type: linkedDocument.type },\n    })\n\n    return `${canonicalUrl}${parsedUrl.hash}`\n}\n\nexport const useLinkedDocument = (\n    url: string\n): { linkedDocument?: LinkedDocument; errorMessage?: string } => {\n    const { linkedDocuments } = useContext(AttachmentsContext)\n    let errorMessage: string | undefined = undefined\n    let linkedDocument: OwidGdocMinimalPostInterface | undefined = undefined\n    const linkType = getLinkType(url)\n    if (linkType !== ContentGraphLinkType.Gdoc) {\n        return { linkedDocument }\n    }\n\n    const urlTarget = getUrlTarget(url)\n    linkedDocument = linkedDocuments?.[urlTarget]\n\n    if (!linkedDocument) {\n        errorMessage = `Google doc URL ${url} isn't registered.`\n        return { errorMessage }\n    } else if (!linkedDocument.published) {\n        errorMessage = `Article with slug \"${linkedDocument.slug}\" isn't published.`\n    }\n\n    // Validate ?entity=X for profile-type docs (when provided)\n    const parsedUrl = Url.fromURL(url)\n    const entityParam = parsedUrl.queryParams.entity\n    if (\n        linkedDocument.type === OwidGdocType.Profile &&\n        entityParam &&\n        !errorMessage\n    ) {\n        const region = getRegionByNameOrVariantName(entityParam)\n        if (!region) {\n            errorMessage = `Unknown entity name \"${entityParam}\" in profile link.`\n        } else if (!linkedDocument.availableEntityCodes) {\n            errorMessage = `Unable to determine available entities for profile \"${linkedDocument.slug}\".`\n        } else if (!linkedDocument.availableEntityCodes.includes(region.code)) {\n            errorMessage = `Entity \"${entityParam}\" is not available for profile \"${linkedDocument.slug}\".`\n        }\n    }\n\n    // Don't return a linked document with a URL when there's a country\n    // validation error — this prevents rendering a broken link\n    if (errorMessage) {\n        return { errorMessage }\n    }\n\n    return {\n        linkedDocument: {\n            ...linkedDocument,\n            url: getLinkedDocumentUrl(linkedDocument, url),\n        },\n        errorMessage,\n    }\n}\n\nexport const useLinkedChart = (\n    url: string\n): { linkedChart?: LinkedChart; errorMessage?: string } => {\n    const { linkedCharts } = useContext(AttachmentsContext)\n    const linkType = getLinkType(url)\n    if (linkType !== \"grapher\" && linkType !== \"explorer\") return {}\n\n    const parsedOriginalUrl = Url.fromURL(url)\n    const urlTarget = getUrlTarget(url)\n    const linkedChart = linkedCharts?.[urlTarget]\n    if (!linkedChart) {\n        return {\n            errorMessage:\n                linkType === \"explorer\"\n                    ? `Explorer with slug \"${urlTarget}\" not found`\n                    : `Chart or multi-dim data page with slug \"${urlTarget}\" not found`,\n        }\n    }\n\n    const parsedResolvedUrl = Url.fromURL(linkedChart.resolvedUrl)\n    const resolvedUrl = parsedResolvedUrl.setQueryParams({\n        ...parsedResolvedUrl.queryParams,\n        ...parsedOriginalUrl.queryParams,\n    }).fullUrl\n\n    return { linkedChart: { ...linkedChart, resolvedUrl } }\n}\n\nexport const useLinkedIndicator = (\n    id: number\n): { linkedIndicator?: LinkedIndicator; errorMessage?: string } => {\n    const { linkedIndicators } = useContext(AttachmentsContext)\n\n    const linkedIndicator = linkedIndicators?.[id]\n\n    if (!linkedIndicator) {\n        return {\n            errorMessage: `Indicator with id ${id} not found`,\n        }\n    }\n\n    return { linkedIndicator }\n}\n\nexport const useImage = (\n    filename: string | undefined\n): ImageMetadata | undefined => {\n    const { imageMetadata } = useContext(AttachmentsContext)\n    if (!filename) return\n    const metadata = imageMetadata[filename]\n    return metadata\n}\n\nexport function useDonors(): string[] | undefined {\n    const { donors } = useContext(AttachmentsContext)\n    return donors\n}\n\nexport const useLinkedNarrativeChart = (name: string) => {\n    const { linkedNarrativeCharts } = useContext(AttachmentsContext)\n    return linkedNarrativeCharts?.[name]\n}\n\nexport const useLinkedStaticViz = (\n    name: string\n): LinkedStaticViz | undefined => {\n    const { linkedStaticViz } = useContext(AttachmentsContext)\n    return linkedStaticViz?.[name]\n}\n\n/**\n * Context provided to span-callout spans within a data-callout block.\n * Contains the URL and entity from the parent data-callout, and the\n * linked callout data from attachments.\n */\nexport interface DataCalloutContextType {\n    url: string\n}\n\nexport const DataCalloutContext = createContext<DataCalloutContextType | null>(\n    null\n)\n\nexport function useCalloutValue(\n    functionName: CalloutFunction,\n    parameters: string[]\n): string | undefined {\n    const { linkedCallouts = {} } = useContext(AttachmentsContext)\n    const calloutContext = useContext(DataCalloutContext)\n\n    if (!calloutContext) return undefined\n\n    const key = makeLinkedCalloutKey(calloutContext.url)\n\n    const linkedCallout = linkedCallouts[key]\n\n    if (!linkedCallout?.values) return undefined\n\n    return getCalloutValue(linkedCallout.values, functionName, parameters)\n}\n\nexport function getShortPageCitation(\n    authors: string[],\n    title: string,\n    publishedAt: Date | null\n) {\n    return `${formatAuthors(authors)} (${publishedAt?.getFullYear()}) - “${title}”`\n}\n\n/**\n * Build the citation string and BibTeX entry shown in a gdoc page's\n * \"Cite this work\" section.\n */\nexport function buildGdocCitation({\n    authors,\n    title,\n    publishedAt,\n    slug,\n    canonicalUrl,\n    archivalPhrase,\n}: {\n    authors: string[]\n    title: string\n    publishedAt: Date | null\n    slug: string\n    canonicalUrl: string\n    archivalPhrase?: string\n}): { citationText: string; bibtex: string } {\n    const shortPageCitation = getShortPageCitation(authors, title, publishedAt)\n    const citationText = `${shortPageCitation} Published online at OurWorldinData.org. Retrieved from: '${canonicalUrl}' [Online Resource]${archivalPhrase ? ` ${archivalPhrase}` : \"\"}`\n\n    const bibtex = `@article{owid-${slug.replace(/\\//g, \"-\")},\n    author = {${formatAuthorsForBibtex(authors)}},\n    title = {${title}},\n    journal = {Our World in Data},\n    year = {${publishedAt?.getFullYear()}},\n    note = {${canonicalUrl}}\n}`\n\n    return { citationText, bibtex }\n}\n\n/**\n * Block types come from the user and may not be all lowercase. Returns the\n * block with a lowercased type, without copying it if it already is.\n */\nexport function normalizeBlockType(\n    block: OwidEnrichedGdocBlock\n): OwidEnrichedGdocBlock {\n    const type = block.type.toLowerCase()\n    if (type === block.type) return block\n    return { ...block, type } as OwidEnrichedGdocBlock\n}\n\n/**\n * Takes a gdoc, block type, and number n and returns up to n first consecutive\n * blocks of the specified type e.g. takeConsecutiveBlocksOfType(gdoc, \"text\",\n * 3) will return up to 3 consecutive text blocks from the gdoc.\n *\n * If there are 2 text blocks, 1 image block, and then another text block, it\n * will return only the first 2 consecutive text blocks.\n **/\nexport function takeConsecutiveBlocksOfType<\n    T extends keyof OwidEnrichedGdocBlockTypeMap,\n>(\n    gdoc: OwidGdocPostInterface | OwidGdocDataInsightInterface,\n    type: T,\n    n: number\n): OwidEnrichedGdocBlockTypeMap[T][] {\n    if (!gdoc.content.body || n <= 0) return []\n    const foundBlocks: OwidEnrichedGdocBlockTypeMap[T][] = []\n\n    let startedCollecting = false\n    for (const block of gdoc.content.body) {\n        if (foundBlocks.length >= n) break\n\n        if (block.type === type) {\n            foundBlocks.push(block as OwidEnrichedGdocBlockTypeMap[T])\n            startedCollecting = true\n        } else if (startedCollecting) {\n            // We've started collecting blocks of the desired type, but this block is not of that type\n            // So we stop collecting consecutive blocks\n            break\n        }\n        // If we haven't started collecting yet and this isn't the right type, continue looking\n    }\n\n    return foundBlocks\n}\n\n/**\n * Takes a gdoc and a block type and returns the first block of that type found in the gdoc\n * e.g. getFirstBlockOfType(gdoc, \"image\") will return the first image block in the gdoc\n * and it will be typed correctly as an EnrichedBlockImage\n **/\nexport function getFirstBlockOfType<\n    T extends keyof OwidEnrichedGdocBlockTypeMap,\n>(\n    gdoc: OwidGdocPostInterface | OwidGdocDataInsightInterface,\n    type: T\n): OwidEnrichedGdocBlockTypeMap[T] | undefined {\n    if (!gdoc.content.body) return undefined\n    for (const block of gdoc.content.body) {\n        let foundBlock: OwidEnrichedGdocBlockTypeMap[T] | undefined\n        traverseEnrichedBlock(block, (node) => {\n            if (!foundBlock && node.type === type) {\n                foundBlock = node as OwidEnrichedGdocBlockTypeMap[T]\n            }\n        })\n        if (foundBlock) return foundBlock\n    }\n    return undefined\n}\n\n// Always use the smallFilename for old data insights, where two filenames were always provided\n// Doing this in code was simpler than migrating all the DI gdocs themselves\n// See https://github.com/owid/owid-grapher/issues/4416\nexport function addPreferSmallFilenameToDataInsightImages(\n    content: OwidGdocDataInsightContent\n): OwidGdocDataInsightContent {\n    content.body.forEach((node) =>\n        traverseEnrichedBlock(node, (block) => {\n            if (block.type === \"image\") {\n                block.preferSmallFilename = true\n            }\n        })\n    )\n    return content\n}\n","import { createContext, useContext } from \"react\"\n\nexport const DebugContext = createContext<boolean | undefined>(undefined)\n\nexport const useDebug = () => {\n    const context = useContext(DebugContext)\n\n    if (context === undefined) {\n        throw new Error(\"useDebug must be used within a DebugProvider\")\n    }\n    return context\n}\n","import * as React from \"react\"\nimport * as Sentry from \"@sentry/react\"\nimport { Button } from \"@ourworldindata/components\"\nimport { useDebug } from \"../DebugContext.js\"\n\nexport const BlockErrorBoundary = ({\n    children,\n    className,\n}: {\n    children: React.ReactNode\n    className: string\n}) => {\n    return (\n        <Sentry.ErrorBoundary\n            fallback={({ error, resetError }) => {\n                if (!(error instanceof Error)) {\n                    error = new Error(String(error))\n                }\n                return (\n                    <BlockErrorFallback\n                        className={className}\n                        error={error as Error}\n                        resetError={resetError}\n                    />\n                )\n            }}\n        >\n            {children}\n        </Sentry.ErrorBoundary>\n    )\n}\n\nexport const BlockErrorFallback = ({\n    error,\n    resetError,\n    className = \"\",\n}: {\n    error: Error\n    resetError?: VoidFunction\n    className?: string\n}): React.ReactElement => {\n    const debug = useDebug()\n    return (\n        <div\n            className={className}\n            style={{\n                display: \"flex\",\n                flexDirection: \"column\",\n                gap: \"8px\",\n                alignItems: \"center\",\n                backgroundColor: \"#ffe5e5\",\n                padding: \"20px\",\n                marginTop: \"20px\",\n                marginBottom: \"20px\",\n            }}\n        >\n            <h3 style={{ margin: 0 }}>{error.name}</h3>\n            {debug && (\n                <>\n                    <div>{error.message}</div>\n                    {resetError && (\n                        <Button\n                            theme=\"solid-vermillion\"\n                            text=\"Try again\"\n                            ariaLabel=\"Reload content\"\n                            onClick={resetError}\n                            icon={null}\n                        />\n                    )}\n                </>\n            )}\n        </div>\n    )\n}\n","import React, { useRef, useImperativeHandle, useEffect, useContext, useLayoutEffect, useState, useCallback, useMemo } from 'react';\n\n/**\n * Rounds number to given decimal\n * eg. roundNumber(2.34343, 1) => 2.3\n */\nvar roundNumber = function (num, decimal) {\n    return Number(num.toFixed(decimal));\n};\n/**\n * Checks if value is number, if not it returns default value\n * 1# eg. checkIsNumber(2, 30) => 2\n * 2# eg. checkIsNumber(null, 30) => 30\n */\nvar checkIsNumber = function (num, defaultValue) {\n    return typeof num === \"number\" ? num : defaultValue;\n};\n\nvar handleCallback = function (context, event, callback) {\n    if (callback && typeof callback === \"function\") {\n        callback(context, event);\n    }\n};\n\n/* eslint-disable no-plusplus */\n/* eslint-disable no-param-reassign */\n/**\n * Functions should return denominator of the target value, which is the next animation step.\n * t is a value from 0 to 1, reflecting the percentage of animation status.\n */\nvar easeOut = function (t) {\n    return -Math.cos(t * Math.PI) / 2 + 0.5;\n};\n// linear\nvar linear = function (t) {\n    return t;\n};\n// accelerating from zero velocity\nvar easeInQuad = function (t) {\n    return t * t;\n};\n// decelerating to zero velocity\nvar easeOutQuad = function (t) {\n    return t * (2 - t);\n};\n// acceleration until halfway, then deceleration\nvar easeInOutQuad = function (t) {\n    return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n};\n// accelerating from zero velocity\nvar easeInCubic = function (t) {\n    return t * t * t;\n};\n// decelerating to zero velocity\nvar easeOutCubic = function (t) {\n    return --t * t * t + 1;\n};\n// acceleration until halfway, then deceleration\nvar easeInOutCubic = function (t) {\n    return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n};\n// accelerating from zero velocity\nvar easeInQuart = function (t) {\n    return t * t * t * t;\n};\n// decelerating to zero velocity\nvar easeOutQuart = function (t) {\n    return 1 - --t * t * t * t;\n};\n// acceleration until halfway, then deceleration\nvar easeInOutQuart = function (t) {\n    return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\n};\n// accelerating from zero velocity\nvar easeInQuint = function (t) {\n    return t * t * t * t * t;\n};\n// decelerating to zero velocity\nvar easeOutQuint = function (t) {\n    return 1 + --t * t * t * t * t;\n};\n// acceleration until halfway, then deceleration\nvar easeInOutQuint = function (t) {\n    return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t;\n};\nvar animations = {\n    easeOut: easeOut,\n    linear: linear,\n    easeInQuad: easeInQuad,\n    easeOutQuad: easeOutQuad,\n    easeInOutQuad: easeInOutQuad,\n    easeInCubic: easeInCubic,\n    easeOutCubic: easeOutCubic,\n    easeInOutCubic: easeInOutCubic,\n    easeInQuart: easeInQuart,\n    easeOutQuart: easeOutQuart,\n    easeInOutQuart: easeInOutQuart,\n    easeInQuint: easeInQuint,\n    easeOutQuint: easeOutQuint,\n    easeInOutQuint: easeInOutQuint,\n};\n\n/* eslint-disable no-param-reassign */\nvar handleCancelAnimationFrame = function (animation) {\n    if (typeof animation === \"number\") {\n        cancelAnimationFrame(animation);\n    }\n};\nvar handleCancelAnimation = function (contextInstance) {\n    if (!contextInstance.mounted)\n        return;\n    handleCancelAnimationFrame(contextInstance.animation);\n    // Clear animation state\n    contextInstance.animate = false;\n    contextInstance.animation = null;\n    contextInstance.velocity = null;\n};\nfunction handleSetupAnimation(contextInstance, animationName, animationTime, callback) {\n    if (!contextInstance.mounted)\n        return;\n    var startTime = new Date().getTime();\n    var lastStep = 1;\n    // if another animation is active\n    handleCancelAnimation(contextInstance);\n    // new animation\n    contextInstance.animation = function () {\n        if (!contextInstance.mounted) {\n            return handleCancelAnimationFrame(contextInstance.animation);\n        }\n        var frameTime = new Date().getTime() - startTime;\n        var animationProgress = frameTime / animationTime;\n        var animationType = animations[animationName];\n        var step = animationType(animationProgress);\n        if (frameTime >= animationTime) {\n            callback(lastStep);\n            contextInstance.animation = null;\n        }\n        else if (contextInstance.animation) {\n            callback(step);\n            requestAnimationFrame(contextInstance.animation);\n        }\n    };\n    requestAnimationFrame(contextInstance.animation);\n}\nfunction isValidTargetState(targetState) {\n    var scale = targetState.scale, positionX = targetState.positionX, positionY = targetState.positionY;\n    if (Number.isNaN(scale) ||\n        Number.isNaN(positionX) ||\n        Number.isNaN(positionY)) {\n        return false;\n    }\n    return true;\n}\nfunction animate(contextInstance, targetState, animationTime, animationName) {\n    var isValid = isValidTargetState(targetState);\n    if (!contextInstance.mounted || !isValid)\n        return;\n    var setTransformState = contextInstance.setTransformState;\n    var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n    var scaleDiff = targetState.scale - scale;\n    var positionXDiff = targetState.positionX - positionX;\n    var positionYDiff = targetState.positionY - positionY;\n    if (animationTime === 0) {\n        setTransformState(targetState.scale, targetState.positionX, targetState.positionY);\n    }\n    else {\n        // animation start timestamp\n        handleSetupAnimation(contextInstance, animationName, animationTime, function (step) {\n            var newScale = scale + scaleDiff * step;\n            var newPositionX = positionX + positionXDiff * step;\n            var newPositionY = positionY + positionYDiff * step;\n            setTransformState(newScale, newPositionX, newPositionY);\n        });\n    }\n}\n\n/* eslint-disable no-param-reassign */\nfunction getComponentsSizes(wrapperComponent, contentComponent, newScale) {\n    var wrapperWidth = wrapperComponent.offsetWidth;\n    var wrapperHeight = wrapperComponent.offsetHeight;\n    var contentWidth = contentComponent.offsetWidth;\n    var contentHeight = contentComponent.offsetHeight;\n    var newContentWidth = contentWidth * newScale;\n    var newContentHeight = contentHeight * newScale;\n    var newDiffWidth = wrapperWidth - newContentWidth;\n    var newDiffHeight = wrapperHeight - newContentHeight;\n    return {\n        wrapperWidth: wrapperWidth,\n        wrapperHeight: wrapperHeight,\n        newContentWidth: newContentWidth,\n        newDiffWidth: newDiffWidth,\n        newContentHeight: newContentHeight,\n        newDiffHeight: newDiffHeight,\n    };\n}\nvar getBounds = function (wrapperWidth, newContentWidth, diffWidth, wrapperHeight, newContentHeight, diffHeight, centerZoomedOut) {\n    var scaleWidthFactor = wrapperWidth > newContentWidth\n        ? diffWidth * (centerZoomedOut ? 1 : 0.5)\n        : 0;\n    var scaleHeightFactor = wrapperHeight > newContentHeight\n        ? diffHeight * (centerZoomedOut ? 1 : 0.5)\n        : 0;\n    var minPositionX = wrapperWidth - newContentWidth - scaleWidthFactor;\n    var maxPositionX = scaleWidthFactor;\n    var minPositionY = wrapperHeight - newContentHeight - scaleHeightFactor;\n    var maxPositionY = scaleHeightFactor;\n    return { minPositionX: minPositionX, maxPositionX: maxPositionX, minPositionY: minPositionY, maxPositionY: maxPositionY };\n};\nvar calculateBounds = function (contextInstance, newScale) {\n    var wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent;\n    var centerZoomedOut = contextInstance.setup.centerZoomedOut;\n    if (!wrapperComponent || !contentComponent) {\n        throw new Error(\"Components are not mounted\");\n    }\n    var _a = getComponentsSizes(wrapperComponent, contentComponent, newScale), wrapperWidth = _a.wrapperWidth, wrapperHeight = _a.wrapperHeight, newContentWidth = _a.newContentWidth, newDiffWidth = _a.newDiffWidth, newContentHeight = _a.newContentHeight, newDiffHeight = _a.newDiffHeight;\n    var bounds = getBounds(wrapperWidth, newContentWidth, newDiffWidth, wrapperHeight, newContentHeight, newDiffHeight, Boolean(centerZoomedOut));\n    return bounds;\n};\n/**\n * Keeps value between given bounds, used for limiting view to given boundaries\n * 1# eg. boundLimiter(2, 0, 3, true) => 2\n * 2# eg. boundLimiter(4, 0, 3, true) => 3\n * 3# eg. boundLimiter(-2, 0, 3, true) => 0\n * 4# eg. boundLimiter(10, 0, 3, false) => 10\n */\nvar boundLimiter = function (value, minBound, maxBound, isActive) {\n    if (!isActive)\n        return roundNumber(value, 2);\n    if (value < minBound)\n        return roundNumber(minBound, 2);\n    if (value > maxBound)\n        return roundNumber(maxBound, 2);\n    return roundNumber(value, 2);\n};\nvar handleCalculateBounds = function (contextInstance, newScale) {\n    var bounds = calculateBounds(contextInstance, newScale);\n    // Save bounds\n    contextInstance.bounds = bounds;\n    return bounds;\n};\nfunction getMouseBoundedPosition(positionX, positionY, bounds, limitToBounds, paddingValueX, paddingValueY, wrapperComponent) {\n    var minPositionX = bounds.minPositionX, minPositionY = bounds.minPositionY, maxPositionX = bounds.maxPositionX, maxPositionY = bounds.maxPositionY;\n    var paddingX = 0;\n    var paddingY = 0;\n    if (wrapperComponent) {\n        paddingX = paddingValueX;\n        paddingY = paddingValueY;\n    }\n    var x = boundLimiter(positionX, minPositionX - paddingX, maxPositionX + paddingX, limitToBounds);\n    var y = boundLimiter(positionY, minPositionY - paddingY, maxPositionY + paddingY, limitToBounds);\n    return { x: x, y: y };\n}\n\nfunction handleCalculateZoomPositions(contextInstance, mouseX, mouseY, newScale, bounds, limitToBounds) {\n    var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n    var scaleDifference = newScale - scale;\n    if (typeof mouseX !== \"number\" || typeof mouseY !== \"number\") {\n        console.error(\"Mouse X and Y position were not provided!\");\n        return { x: positionX, y: positionY };\n    }\n    var calculatedPositionX = positionX - mouseX * scaleDifference;\n    var calculatedPositionY = positionY - mouseY * scaleDifference;\n    // do not limit to bounds when there is padding animation,\n    // it causes animation strange behaviour\n    var newPositions = getMouseBoundedPosition(calculatedPositionX, calculatedPositionY, bounds, limitToBounds, 0, 0, null);\n    return newPositions;\n}\nfunction checkZoomBounds(zoom, minScale, maxScale, zoomPadding, enablePadding) {\n    var scalePadding = enablePadding ? zoomPadding : 0;\n    var minScaleWithPadding = minScale - scalePadding;\n    if (!Number.isNaN(maxScale) && zoom >= maxScale)\n        return maxScale;\n    if (!Number.isNaN(minScale) && zoom <= minScaleWithPadding)\n        return minScaleWithPadding;\n    return zoom;\n}\n\nvar isPanningStartAllowed = function (contextInstance, event) {\n    var excluded = contextInstance.setup.panning.excluded;\n    var isInitialized = contextInstance.isInitialized, wrapperComponent = contextInstance.wrapperComponent;\n    var target = event.target;\n    var targetIsShadowDom = \"shadowRoot\" in target && \"composedPath\" in event;\n    var isWrapperChild = targetIsShadowDom\n        ? event.composedPath().some(function (el) {\n            if (!(el instanceof Element)) {\n                return false;\n            }\n            return wrapperComponent === null || wrapperComponent === void 0 ? void 0 : wrapperComponent.contains(el);\n        })\n        : wrapperComponent === null || wrapperComponent === void 0 ? void 0 : wrapperComponent.contains(target);\n    var isAllowed = isInitialized && target && isWrapperChild;\n    if (!isAllowed)\n        return false;\n    var isExcluded = isExcludedNode(target, excluded);\n    if (isExcluded)\n        return false;\n    return true;\n};\nvar isPanningAllowed = function (contextInstance) {\n    var isInitialized = contextInstance.isInitialized, isPanning = contextInstance.isPanning, setup = contextInstance.setup;\n    var disabled = setup.panning.disabled;\n    var isAllowed = isInitialized && isPanning && !disabled;\n    if (!isAllowed)\n        return false;\n    return true;\n};\nvar handlePanningSetup = function (contextInstance, event) {\n    var _a = contextInstance.transformState, positionX = _a.positionX, positionY = _a.positionY;\n    contextInstance.isPanning = true;\n    // Panning with mouse\n    var x = event.clientX;\n    var y = event.clientY;\n    contextInstance.startCoords = { x: x - positionX, y: y - positionY };\n};\nvar handleTouchPanningSetup = function (contextInstance, event) {\n    var touches = event.touches;\n    var _a = contextInstance.transformState, positionX = _a.positionX, positionY = _a.positionY;\n    contextInstance.isPanning = true;\n    // Panning with touch\n    var oneFingerTouch = touches.length === 1;\n    if (oneFingerTouch) {\n        var x = touches[0].clientX;\n        var y = touches[0].clientY;\n        contextInstance.startCoords = { x: x - positionX, y: y - positionY };\n    }\n};\nfunction handlePanToBounds(contextInstance) {\n    var _a = contextInstance.transformState, positionX = _a.positionX, positionY = _a.positionY, scale = _a.scale;\n    var _b = contextInstance.setup, disabled = _b.disabled, limitToBounds = _b.limitToBounds, centerZoomedOut = _b.centerZoomedOut;\n    var wrapperComponent = contextInstance.wrapperComponent;\n    if (disabled || !wrapperComponent || !contextInstance.bounds)\n        return;\n    var _c = contextInstance.bounds, maxPositionX = _c.maxPositionX, minPositionX = _c.minPositionX, maxPositionY = _c.maxPositionY, minPositionY = _c.minPositionY;\n    var xChanged = positionX > maxPositionX || positionX < minPositionX;\n    var yChanged = positionY > maxPositionY || positionY < minPositionY;\n    var mousePosX = positionX > maxPositionX\n        ? wrapperComponent.offsetWidth\n        : contextInstance.setup.minPositionX || 0;\n    var mousePosY = positionY > maxPositionY\n        ? wrapperComponent.offsetHeight\n        : contextInstance.setup.minPositionY || 0;\n    var _d = handleCalculateZoomPositions(contextInstance, mousePosX, mousePosY, scale, contextInstance.bounds, limitToBounds || centerZoomedOut), x = _d.x, y = _d.y;\n    return {\n        scale: scale,\n        positionX: xChanged ? x : positionX,\n        positionY: yChanged ? y : positionY,\n    };\n}\nfunction handleNewPosition(contextInstance, newPositionX, newPositionY, paddingValueX, paddingValueY) {\n    var limitToBounds = contextInstance.setup.limitToBounds;\n    var wrapperComponent = contextInstance.wrapperComponent, bounds = contextInstance.bounds;\n    var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n    if (wrapperComponent === null ||\n        bounds === null ||\n        (newPositionX === positionX && newPositionY === positionY)) {\n        return;\n    }\n    var _b = getMouseBoundedPosition(newPositionX, newPositionY, bounds, limitToBounds, paddingValueX, paddingValueY, wrapperComponent), x = _b.x, y = _b.y;\n    contextInstance.setTransformState(scale, x, y);\n}\nvar getPanningClientPosition = function (contextInstance, clientX, clientY) {\n    var startCoords = contextInstance.startCoords, transformState = contextInstance.transformState;\n    var panning = contextInstance.setup.panning;\n    var lockAxisX = panning.lockAxisX, lockAxisY = panning.lockAxisY;\n    var positionX = transformState.positionX, positionY = transformState.positionY;\n    if (!startCoords) {\n        return { x: positionX, y: positionY };\n    }\n    var mouseX = clientX - startCoords.x;\n    var mouseY = clientY - startCoords.y;\n    var newPositionX = lockAxisX ? positionX : mouseX;\n    var newPositionY = lockAxisY ? positionY : mouseY;\n    return { x: newPositionX, y: newPositionY };\n};\nvar getPaddingValue = function (contextInstance, size) {\n    var setup = contextInstance.setup, transformState = contextInstance.transformState;\n    var scale = transformState.scale;\n    var minScale = setup.minScale, disablePadding = setup.disablePadding;\n    if (size > 0 && scale >= minScale && !disablePadding) {\n        return size;\n    }\n    return 0;\n};\n\nvar isVelocityCalculationAllowed = function (contextInstance) {\n    var mounted = contextInstance.mounted;\n    var _a = contextInstance.setup, disabled = _a.disabled, velocityAnimation = _a.velocityAnimation;\n    var scale = contextInstance.transformState.scale;\n    var disabledVelocity = velocityAnimation.disabled;\n    var isAllowed = !disabledVelocity || scale > 1 || !disabled || mounted;\n    if (!isAllowed)\n        return false;\n    return true;\n};\nvar isVelocityAllowed = function (contextInstance) {\n    var mounted = contextInstance.mounted, velocity = contextInstance.velocity, bounds = contextInstance.bounds;\n    var _a = contextInstance.setup, disabled = _a.disabled, velocityAnimation = _a.velocityAnimation;\n    var scale = contextInstance.transformState.scale;\n    var disabledVelocity = velocityAnimation.disabled;\n    var isAllowed = !disabledVelocity || scale > 1 || !disabled || mounted;\n    if (!isAllowed)\n        return false;\n    if (!velocity || !bounds)\n        return false;\n    return true;\n};\nfunction getVelocityMoveTime(contextInstance, velocity) {\n    var velocityAnimation = contextInstance.setup.velocityAnimation;\n    var equalToMove = velocityAnimation.equalToMove, animationTime = velocityAnimation.animationTime, sensitivity = velocityAnimation.sensitivity;\n    if (equalToMove) {\n        return animationTime * velocity * sensitivity;\n    }\n    return animationTime;\n}\nfunction getVelocityPosition(newPosition, startPosition, currentPosition, isLocked, limitToBounds, minPosition, maxPosition, minTarget, maxTarget, step) {\n    if (limitToBounds) {\n        if (startPosition > maxPosition && currentPosition > maxPosition) {\n            var calculatedPosition = maxPosition + (newPosition - maxPosition) * step;\n            if (calculatedPosition > maxTarget)\n                return maxTarget;\n            if (calculatedPosition < maxPosition)\n                return maxPosition;\n            return calculatedPosition;\n        }\n        if (startPosition < minPosition && currentPosition < minPosition) {\n            var calculatedPosition = minPosition + (newPosition - minPosition) * step;\n            if (calculatedPosition < minTarget)\n                return minTarget;\n            if (calculatedPosition > minPosition)\n                return minPosition;\n            return calculatedPosition;\n        }\n    }\n    if (isLocked)\n        return startPosition;\n    return boundLimiter(newPosition, minPosition, maxPosition, limitToBounds);\n}\n\nfunction getSizeMultiplier(wrapperComponent, equalToMove) {\n    var defaultMultiplier = 1;\n    if (equalToMove) {\n        return Math.min(defaultMultiplier, wrapperComponent.offsetWidth / window.innerWidth);\n    }\n    return defaultMultiplier;\n}\nfunction handleCalculateVelocity(contextInstance, position) {\n    var isAllowed = isVelocityCalculationAllowed(contextInstance);\n    if (!isAllowed) {\n        return;\n    }\n    var lastMousePosition = contextInstance.lastMousePosition, velocityTime = contextInstance.velocityTime, setup = contextInstance.setup;\n    var wrapperComponent = contextInstance.wrapperComponent;\n    var equalToMove = setup.velocityAnimation.equalToMove;\n    var now = Date.now();\n    if (lastMousePosition && velocityTime && wrapperComponent) {\n        var sizeMultiplier = getSizeMultiplier(wrapperComponent, equalToMove);\n        var distanceX = position.x - lastMousePosition.x;\n        var distanceY = position.y - lastMousePosition.y;\n        var velocityX = distanceX / sizeMultiplier;\n        var velocityY = distanceY / sizeMultiplier;\n        var interval = now - velocityTime;\n        var speed = distanceX * distanceX + distanceY * distanceY;\n        var velocity = Math.sqrt(speed) / interval;\n        contextInstance.velocity = { velocityX: velocityX, velocityY: velocityY, total: velocity };\n    }\n    contextInstance.lastMousePosition = position;\n    contextInstance.velocityTime = now;\n}\nfunction handleVelocityPanning(contextInstance) {\n    var velocity = contextInstance.velocity, bounds = contextInstance.bounds, setup = contextInstance.setup, wrapperComponent = contextInstance.wrapperComponent;\n    var isAllowed = isVelocityAllowed(contextInstance);\n    if (!isAllowed || !velocity || !bounds || !wrapperComponent) {\n        return;\n    }\n    var velocityX = velocity.velocityX, velocityY = velocity.velocityY, total = velocity.total;\n    var maxPositionX = bounds.maxPositionX, minPositionX = bounds.minPositionX, maxPositionY = bounds.maxPositionY, minPositionY = bounds.minPositionY;\n    var limitToBounds = setup.limitToBounds, alignmentAnimation = setup.alignmentAnimation;\n    var zoomAnimation = setup.zoomAnimation, panning = setup.panning;\n    var lockAxisY = panning.lockAxisY, lockAxisX = panning.lockAxisX;\n    var animationType = zoomAnimation.animationType;\n    var sizeX = alignmentAnimation.sizeX, sizeY = alignmentAnimation.sizeY, velocityAlignmentTime = alignmentAnimation.velocityAlignmentTime;\n    var alignAnimationTime = velocityAlignmentTime;\n    var moveAnimationTime = getVelocityMoveTime(contextInstance, total);\n    var finalAnimationTime = Math.max(moveAnimationTime, alignAnimationTime);\n    var paddingValueX = getPaddingValue(contextInstance, sizeX);\n    var paddingValueY = getPaddingValue(contextInstance, sizeY);\n    var paddingX = (paddingValueX * wrapperComponent.offsetWidth) / 100;\n    var paddingY = (paddingValueY * wrapperComponent.offsetHeight) / 100;\n    var maxTargetX = maxPositionX + paddingX;\n    var minTargetX = minPositionX - paddingX;\n    var maxTargetY = maxPositionY + paddingY;\n    var minTargetY = minPositionY - paddingY;\n    var startState = contextInstance.transformState;\n    var startTime = new Date().getTime();\n    handleSetupAnimation(contextInstance, animationType, finalAnimationTime, function (step) {\n        var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n        var frameTime = new Date().getTime() - startTime;\n        var animationProgress = frameTime / alignAnimationTime;\n        var alignAnimation = animations[alignmentAnimation.animationType];\n        var alignStep = 1 - alignAnimation(Math.min(1, animationProgress));\n        var customStep = 1 - step;\n        var newPositionX = positionX + velocityX * customStep;\n        var newPositionY = positionY + velocityY * customStep;\n        var currentPositionX = getVelocityPosition(newPositionX, startState.positionX, positionX, lockAxisX, limitToBounds, minPositionX, maxPositionX, minTargetX, maxTargetX, alignStep);\n        var currentPositionY = getVelocityPosition(newPositionY, startState.positionY, positionY, lockAxisY, limitToBounds, minPositionY, maxPositionY, minTargetY, maxTargetY, alignStep);\n        if (positionX !== newPositionX || positionY !== newPositionY) {\n            contextInstance.setTransformState(scale, currentPositionX, currentPositionY);\n        }\n    });\n}\n\nfunction handlePanningStart(contextInstance, event) {\n    var scale = contextInstance.transformState.scale;\n    handleCancelAnimation(contextInstance);\n    handleCalculateBounds(contextInstance, scale);\n    if (window.TouchEvent !== undefined && event instanceof TouchEvent) {\n        handleTouchPanningSetup(contextInstance, event);\n    }\n    else {\n        handlePanningSetup(contextInstance, event);\n    }\n}\nfunction handleAlignToBounds(contextInstance, customAnimationTime) {\n    var scale = contextInstance.transformState.scale;\n    var _a = contextInstance.setup, minScale = _a.minScale, alignmentAnimation = _a.alignmentAnimation;\n    var disabled = alignmentAnimation.disabled, sizeX = alignmentAnimation.sizeX, sizeY = alignmentAnimation.sizeY, animationTime = alignmentAnimation.animationTime, animationType = alignmentAnimation.animationType;\n    var isDisabled = disabled || scale < minScale || (!sizeX && !sizeY);\n    if (isDisabled)\n        return;\n    var targetState = handlePanToBounds(contextInstance);\n    if (targetState) {\n        animate(contextInstance, targetState, customAnimationTime !== null && customAnimationTime !== void 0 ? customAnimationTime : animationTime, animationType);\n    }\n}\nfunction handlePanning(contextInstance, clientX, clientY) {\n    var startCoords = contextInstance.startCoords, setup = contextInstance.setup;\n    var _a = setup.alignmentAnimation, sizeX = _a.sizeX, sizeY = _a.sizeY;\n    if (!startCoords)\n        return;\n    var _b = getPanningClientPosition(contextInstance, clientX, clientY), x = _b.x, y = _b.y;\n    var paddingValueX = getPaddingValue(contextInstance, sizeX);\n    var paddingValueY = getPaddingValue(contextInstance, sizeY);\n    handleCalculateVelocity(contextInstance, { x: x, y: y });\n    handleNewPosition(contextInstance, x, y, paddingValueX, paddingValueY);\n}\nfunction handlePanningEnd(contextInstance) {\n    if (contextInstance.isPanning) {\n        var velocityDisabled = contextInstance.setup.panning.velocityDisabled;\n        var velocity = contextInstance.velocity, wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent;\n        contextInstance.isPanning = false;\n        contextInstance.animate = false;\n        contextInstance.animation = null;\n        var wrapperRect = wrapperComponent === null || wrapperComponent === void 0 ? void 0 : wrapperComponent.getBoundingClientRect();\n        var contentRect = contentComponent === null || contentComponent === void 0 ? void 0 : contentComponent.getBoundingClientRect();\n        var wrapperWidth = (wrapperRect === null || wrapperRect === void 0 ? void 0 : wrapperRect.width) || 0;\n        var wrapperHeight = (wrapperRect === null || wrapperRect === void 0 ? void 0 : wrapperRect.height) || 0;\n        var contentWidth = (contentRect === null || contentRect === void 0 ? void 0 : contentRect.width) || 0;\n        var contentHeight = (contentRect === null || contentRect === void 0 ? void 0 : contentRect.height) || 0;\n        var isZoomed = wrapperWidth < contentWidth || wrapperHeight < contentHeight;\n        var shouldAnimate = !velocityDisabled && velocity && (velocity === null || velocity === void 0 ? void 0 : velocity.total) > 0.1 && isZoomed;\n        if (shouldAnimate) {\n            handleVelocityPanning(contextInstance);\n        }\n        else {\n            handleAlignToBounds(contextInstance);\n        }\n    }\n}\n\nfunction handleZoomToPoint(contextInstance, scale, mouseX, mouseY) {\n    var _a = contextInstance.setup, minScale = _a.minScale, maxScale = _a.maxScale, limitToBounds = _a.limitToBounds;\n    var newScale = checkZoomBounds(roundNumber(scale, 2), minScale, maxScale, 0, false);\n    var bounds = handleCalculateBounds(contextInstance, newScale);\n    var _b = handleCalculateZoomPositions(contextInstance, mouseX, mouseY, newScale, bounds, limitToBounds), x = _b.x, y = _b.y;\n    return { scale: newScale, positionX: x, positionY: y };\n}\nfunction handleAlignToScaleBounds(contextInstance, mousePositionX, mousePositionY) {\n    var scale = contextInstance.transformState.scale;\n    var wrapperComponent = contextInstance.wrapperComponent;\n    var _a = contextInstance.setup, minScale = _a.minScale, limitToBounds = _a.limitToBounds, zoomAnimation = _a.zoomAnimation;\n    var disabled = zoomAnimation.disabled, animationTime = zoomAnimation.animationTime, animationType = zoomAnimation.animationType;\n    var isDisabled = disabled || scale >= minScale;\n    if (scale >= 1 || limitToBounds) {\n        // fire fit to bounds animation\n        handleAlignToBounds(contextInstance);\n    }\n    if (isDisabled || !wrapperComponent || !contextInstance.mounted)\n        return;\n    var mouseX = mousePositionX || wrapperComponent.offsetWidth / 2;\n    var mouseY = mousePositionY || wrapperComponent.offsetHeight / 2;\n    var targetState = handleZoomToPoint(contextInstance, minScale, mouseX, mouseY);\n    if (targetState) {\n        animate(contextInstance, targetState, animationTime, animationType);\n    }\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n    return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nfunction __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n    var e = new Error(message);\r\n    return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nvar initialState = {\n    previousScale: 1,\n    scale: 1,\n    positionX: 0,\n    positionY: 0,\n};\nvar initialSetup = {\n    disabled: false,\n    minPositionX: null,\n    maxPositionX: null,\n    minPositionY: null,\n    maxPositionY: null,\n    minScale: 1,\n    maxScale: 8,\n    limitToBounds: true,\n    centerZoomedOut: false,\n    centerOnInit: false,\n    disablePadding: false,\n    smooth: true,\n    wheel: {\n        step: 0.2,\n        disabled: false,\n        smoothStep: 0.001,\n        wheelDisabled: false,\n        touchPadDisabled: false,\n        activationKeys: [],\n        excluded: [],\n    },\n    panning: {\n        disabled: false,\n        velocityDisabled: false,\n        lockAxisX: false,\n        lockAxisY: false,\n        allowLeftClickPan: true,\n        allowMiddleClickPan: true,\n        allowRightClickPan: true,\n        wheelPanning: false,\n        activationKeys: [],\n        excluded: [],\n    },\n    pinch: {\n        step: 5,\n        disabled: false,\n        excluded: [],\n    },\n    doubleClick: {\n        disabled: false,\n        step: 0.7,\n        mode: \"zoomIn\",\n        animationType: \"easeOut\",\n        animationTime: 200,\n        excluded: [],\n    },\n    zoomAnimation: {\n        disabled: false,\n        size: 0.4,\n        animationTime: 200,\n        animationType: \"easeOut\",\n    },\n    alignmentAnimation: {\n        disabled: false,\n        sizeX: 100,\n        sizeY: 100,\n        animationTime: 200,\n        velocityAlignmentTime: 400,\n        animationType: \"easeOut\",\n    },\n    velocityAnimation: {\n        disabled: false,\n        sensitivity: 1,\n        animationTime: 400,\n        animationType: \"easeOut\",\n        equalToMove: true,\n    },\n};\nvar baseClasses = {\n    wrapperClass: \"react-transform-wrapper\",\n    contentClass: \"react-transform-component\",\n};\n\nvar createState = function (props) {\n    var _a, _b, _c, _d;\n    return {\n        previousScale: (_a = props.initialScale) !== null && _a !== void 0 ? _a : initialState.scale,\n        scale: (_b = props.initialScale) !== null && _b !== void 0 ? _b : initialState.scale,\n        positionX: (_c = props.initialPositionX) !== null && _c !== void 0 ? _c : initialState.positionX,\n        positionY: (_d = props.initialPositionY) !== null && _d !== void 0 ? _d : initialState.positionY,\n    };\n};\nvar createSetup = function (props) {\n    var newSetup = __assign({}, initialSetup);\n    Object.keys(props).forEach(function (key) {\n        var validValue = typeof props[key] !== \"undefined\";\n        var validParameter = typeof initialSetup[key] !== \"undefined\";\n        if (validParameter && validValue) {\n            var dataType = Object.prototype.toString.call(initialSetup[key]);\n            var isObject = dataType === \"[object Object]\";\n            var isArray = dataType === \"[object Array]\";\n            if (isObject) {\n                newSetup[key] = __assign(__assign({}, initialSetup[key]), props[key]);\n            }\n            else if (isArray) {\n                newSetup[key] = __spreadArray(__spreadArray([], initialSetup[key], true), props[key], true);\n            }\n            else {\n                newSetup[key] = props[key];\n            }\n        }\n    });\n    return newSetup;\n};\n\nvar handleCalculateButtonZoom = function (contextInstance, delta, step) {\n    var scale = contextInstance.transformState.scale;\n    var wrapperComponent = contextInstance.wrapperComponent, setup = contextInstance.setup;\n    var maxScale = setup.maxScale, minScale = setup.minScale, zoomAnimation = setup.zoomAnimation, smooth = setup.smooth;\n    var size = zoomAnimation.size;\n    if (!wrapperComponent) {\n        throw new Error(\"Wrapper is not mounted\");\n    }\n    var targetScale = smooth\n        ? scale * Math.exp(delta * step)\n        : scale + delta * step;\n    var newScale = checkZoomBounds(roundNumber(targetScale, 3), minScale, maxScale, size, false);\n    return newScale;\n};\nfunction handleZoomToViewCenter(contextInstance, delta, step, animationTime, animationType) {\n    var wrapperComponent = contextInstance.wrapperComponent;\n    var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n    if (!wrapperComponent)\n        return console.error(\"No WrapperComponent found\");\n    var wrapperWidth = wrapperComponent.offsetWidth;\n    var wrapperHeight = wrapperComponent.offsetHeight;\n    var mouseX = (wrapperWidth / 2 - positionX) / scale;\n    var mouseY = (wrapperHeight / 2 - positionY) / scale;\n    var newScale = handleCalculateButtonZoom(contextInstance, delta, step);\n    var targetState = handleZoomToPoint(contextInstance, newScale, mouseX, mouseY);\n    if (!targetState) {\n        return console.error(\"Error during zoom event. New transformation state was not calculated.\");\n    }\n    animate(contextInstance, targetState, animationTime, animationType);\n}\nfunction resetTransformations(contextInstance, animationTime, animationType, onResetTransformation) {\n    var setup = contextInstance.setup, wrapperComponent = contextInstance.wrapperComponent;\n    var limitToBounds = setup.limitToBounds;\n    var initialTransformation = createState(contextInstance.props);\n    var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n    if (!wrapperComponent)\n        return;\n    var newBounds = calculateBounds(contextInstance, initialTransformation.scale);\n    var boundedPositions = getMouseBoundedPosition(initialTransformation.positionX, initialTransformation.positionY, newBounds, limitToBounds, 0, 0, wrapperComponent);\n    var newState = {\n        scale: initialTransformation.scale,\n        positionX: boundedPositions.x,\n        positionY: boundedPositions.y,\n    };\n    if (scale === initialTransformation.scale &&\n        positionX === initialTransformation.positionX &&\n        positionY === initialTransformation.positionY) {\n        return;\n    }\n    onResetTransformation === null || onResetTransformation === void 0 ? void 0 : onResetTransformation();\n    animate(contextInstance, newState, animationTime, animationType);\n}\nfunction getOffset(element, wrapper, content, state) {\n    var offset = element.getBoundingClientRect();\n    var wrapperOffset = wrapper.getBoundingClientRect();\n    var contentOffset = content.getBoundingClientRect();\n    var xOff = wrapperOffset.x * state.scale;\n    var yOff = wrapperOffset.y * state.scale;\n    return {\n        x: (offset.x - contentOffset.x + xOff) / state.scale,\n        y: (offset.y - contentOffset.y + yOff) / state.scale,\n    };\n}\nfunction calculateZoomToNode(contextInstance, node, customZoom) {\n    var wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent, transformState = contextInstance.transformState;\n    var _a = contextInstance.setup, limitToBounds = _a.limitToBounds, minScale = _a.minScale, maxScale = _a.maxScale;\n    if (!wrapperComponent || !contentComponent)\n        return transformState;\n    var wrapperRect = wrapperComponent.getBoundingClientRect();\n    var nodeRect = node.getBoundingClientRect();\n    var nodeOffset = getOffset(node, wrapperComponent, contentComponent, transformState);\n    var nodeLeft = nodeOffset.x;\n    var nodeTop = nodeOffset.y;\n    var nodeWidth = nodeRect.width / transformState.scale;\n    var nodeHeight = nodeRect.height / transformState.scale;\n    var scaleX = wrapperComponent.offsetWidth / nodeWidth;\n    var scaleY = wrapperComponent.offsetHeight / nodeHeight;\n    var newScale = checkZoomBounds(customZoom || Math.min(scaleX, scaleY), minScale, maxScale, 0, false);\n    var offsetX = (wrapperRect.width - nodeWidth * newScale) / 2;\n    var offsetY = (wrapperRect.height - nodeHeight * newScale) / 2;\n    var newPositionX = (wrapperRect.left - nodeLeft) * newScale + offsetX;\n    var newPositionY = (wrapperRect.top - nodeTop) * newScale + offsetY;\n    var bounds = calculateBounds(contextInstance, newScale);\n    var _b = getMouseBoundedPosition(newPositionX, newPositionY, bounds, limitToBounds, 0, 0, wrapperComponent), x = _b.x, y = _b.y;\n    return { positionX: x, positionY: y, scale: newScale };\n}\n\nvar zoomIn = function (contextInstance) {\n    return function (step, animationTime, animationType) {\n        if (step === void 0) { step = 0.5; }\n        if (animationTime === void 0) { animationTime = 300; }\n        if (animationType === void 0) { animationType = \"easeOut\"; }\n        handleZoomToViewCenter(contextInstance, 1, step, animationTime, animationType);\n    };\n};\nvar zoomOut = function (contextInstance) {\n    return function (step, animationTime, animationType) {\n        if (step === void 0) { step = 0.5; }\n        if (animationTime === void 0) { animationTime = 300; }\n        if (animationType === void 0) { animationType = \"easeOut\"; }\n        handleZoomToViewCenter(contextInstance, -1, step, animationTime, animationType);\n    };\n};\nvar setTransform = function (contextInstance) {\n    return function (newPositionX, newPositionY, newScale, animationTime, animationType) {\n        if (animationTime === void 0) { animationTime = 300; }\n        if (animationType === void 0) { animationType = \"easeOut\"; }\n        var _a = contextInstance.transformState, positionX = _a.positionX, positionY = _a.positionY, scale = _a.scale;\n        var wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent;\n        var disabled = contextInstance.setup.disabled;\n        if (disabled || !wrapperComponent || !contentComponent)\n            return;\n        var targetState = {\n            positionX: Number.isNaN(newPositionX) ? positionX : newPositionX,\n            positionY: Number.isNaN(newPositionY) ? positionY : newPositionY,\n            scale: Number.isNaN(newScale) ? scale : newScale,\n        };\n        animate(contextInstance, targetState, animationTime, animationType);\n    };\n};\nvar resetTransform = function (contextInstance) {\n    return function (animationTime, animationType) {\n        if (animationTime === void 0) { animationTime = 200; }\n        if (animationType === void 0) { animationType = \"easeOut\"; }\n        resetTransformations(contextInstance, animationTime, animationType);\n    };\n};\nvar centerView = function (contextInstance) {\n    return function (scale, animationTime, animationType) {\n        if (animationTime === void 0) { animationTime = 200; }\n        if (animationType === void 0) { animationType = \"easeOut\"; }\n        var transformState = contextInstance.transformState, wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent;\n        if (wrapperComponent && contentComponent) {\n            var targetState = getCenterPosition(scale || transformState.scale, wrapperComponent, contentComponent);\n            animate(contextInstance, targetState, animationTime, animationType);\n        }\n    };\n};\nvar zoomToElement = function (contextInstance) {\n    return function (node, scale, animationTime, animationType) {\n        if (animationTime === void 0) { animationTime = 600; }\n        if (animationType === void 0) { animationType = \"easeOut\"; }\n        handleCancelAnimation(contextInstance);\n        var wrapperComponent = contextInstance.wrapperComponent;\n        var target = typeof node === \"string\" ? document.getElementById(node) : node;\n        if (wrapperComponent && target && wrapperComponent.contains(target)) {\n            var targetState = calculateZoomToNode(contextInstance, target, scale);\n            animate(contextInstance, targetState, animationTime, animationType);\n        }\n    };\n};\n\nvar getControls = function (contextInstance) {\n    return {\n        instance: contextInstance,\n        zoomIn: zoomIn(contextInstance),\n        zoomOut: zoomOut(contextInstance),\n        setTransform: setTransform(contextInstance),\n        resetTransform: resetTransform(contextInstance),\n        centerView: centerView(contextInstance),\n        zoomToElement: zoomToElement(contextInstance),\n    };\n};\nvar getState = function (contextInstance) {\n    return {\n        instance: contextInstance,\n        state: contextInstance.transformState,\n    };\n};\nvar getContext = function (contextInstance) {\n    var ref = {};\n    Object.assign(ref, getState(contextInstance));\n    Object.assign(ref, getControls(contextInstance));\n    return ref;\n};\n\n// We want to make event listeners non-passive, and to do so have to check\n// that browsers support EventListenerOptions in the first place.\n// https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\nvar passiveSupported = false;\nfunction makePassiveEventOption() {\n    try {\n        var options = {\n            get passive() {\n                // This function will be called when the browser\n                //   attempts to access the passive property.\n                passiveSupported = true;\n                return false;\n            },\n        };\n        return options;\n    }\n    catch (err) {\n        passiveSupported = false;\n        return passiveSupported;\n    }\n}\n\nvar matchPrefix = \".\".concat(baseClasses.wrapperClass);\nvar isExcludedNode = function (node, excluded) {\n    return excluded.some(function (exclude) {\n        return node.matches(\"\".concat(matchPrefix, \" \").concat(exclude, \", \").concat(matchPrefix, \" .\").concat(exclude, \", \").concat(matchPrefix, \" \").concat(exclude, \" *, \").concat(matchPrefix, \" .\").concat(exclude, \" *\"));\n    });\n};\nvar cancelTimeout = function (timeout) {\n    if (timeout) {\n        clearTimeout(timeout);\n    }\n};\n\nvar getTransformStyles = function (x, y, scale) {\n    // Standard translate prevents blurry svg on the safari\n    return \"translate(\".concat(x, \"px, \").concat(y, \"px) scale(\").concat(scale, \")\");\n};\nvar getMatrixTransformStyles = function (x, y, scale) {\n    // The shorthand for matrix does not work for Safari hence the need to explicitly use matrix3d\n    // Refer to https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix\n    var a = scale;\n    var b = 0;\n    var c = 0;\n    var d = scale;\n    var tx = x;\n    var ty = y;\n    return \"matrix3d(\".concat(a, \", \").concat(b, \", 0, 0, \").concat(c, \", \").concat(d, \", 0, 0, 0, 0, 1, 0, \").concat(tx, \", \").concat(ty, \", 0, 1)\");\n};\nvar getCenterPosition = function (scale, wrapperComponent, contentComponent) {\n    var contentWidth = contentComponent.offsetWidth * scale;\n    var contentHeight = contentComponent.offsetHeight * scale;\n    var centerPositionX = (wrapperComponent.offsetWidth - contentWidth) / 2;\n    var centerPositionY = (wrapperComponent.offsetHeight - contentHeight) / 2;\n    return {\n        scale: scale,\n        positionX: centerPositionX,\n        positionY: centerPositionY,\n    };\n};\n\nfunction mergeRefs(refs) {\n    return function (value) {\n        refs.forEach(function (ref) {\n            if (typeof ref === \"function\") {\n                ref(value);\n            }\n            else if (ref != null) {\n                ref.current = value;\n            }\n        });\n    };\n}\n\nvar isWheelAllowed = function (contextInstance, event) {\n    var _a = contextInstance.setup.wheel, disabled = _a.disabled, wheelDisabled = _a.wheelDisabled, touchPadDisabled = _a.touchPadDisabled, excluded = _a.excluded;\n    var isInitialized = contextInstance.isInitialized, isPanning = contextInstance.isPanning;\n    var target = event.target;\n    var isAllowed = isInitialized && !isPanning && !disabled && target;\n    if (!isAllowed)\n        return false;\n    // Event ctrlKey detects if touchpad action is executing wheel or pinch gesture\n    if (wheelDisabled && !event.ctrlKey)\n        return false;\n    if (touchPadDisabled && event.ctrlKey)\n        return false;\n    var isExcluded = isExcludedNode(target, excluded);\n    if (isExcluded)\n        return false;\n    return true;\n};\nvar getDeltaY = function (event) {\n    if (event) {\n        return event.deltaY < 0 ? 1 : -1;\n    }\n    return 0;\n};\nfunction getDelta(event, customDelta) {\n    var deltaY = getDeltaY(event);\n    var delta = checkIsNumber(customDelta, deltaY);\n    return delta;\n}\nfunction getMousePosition(event, contentComponent, scale) {\n    var contentRect = contentComponent.getBoundingClientRect();\n    var mouseX = 0;\n    var mouseY = 0;\n    if (\"clientX\" in event) {\n        // mouse position x, y over wrapper component\n        mouseX = (event.clientX - contentRect.left) / scale;\n        mouseY = (event.clientY - contentRect.top) / scale;\n    }\n    else {\n        var touch = event.touches[0];\n        mouseX = (touch.clientX - contentRect.left) / scale;\n        mouseY = (touch.clientY - contentRect.top) / scale;\n    }\n    if (Number.isNaN(mouseX) || Number.isNaN(mouseY))\n        console.error(\"No mouse or touch offset found\");\n    return {\n        x: mouseX,\n        y: mouseY,\n    };\n}\nvar handleCalculateWheelZoom = function (contextInstance, delta, step, disable, getTarget) {\n    var scale = contextInstance.transformState.scale;\n    var wrapperComponent = contextInstance.wrapperComponent, setup = contextInstance.setup;\n    var maxScale = setup.maxScale, minScale = setup.minScale, zoomAnimation = setup.zoomAnimation, disablePadding = setup.disablePadding;\n    var size = zoomAnimation.size, disabled = zoomAnimation.disabled;\n    if (!wrapperComponent) {\n        throw new Error(\"Wrapper is not mounted\");\n    }\n    var targetScale = scale + delta * step;\n    if (getTarget)\n        return targetScale;\n    var paddingEnabled = disable ? false : !disabled;\n    var newScale = checkZoomBounds(roundNumber(targetScale, 3), minScale, maxScale, size, paddingEnabled && !disablePadding);\n    return newScale;\n};\nvar handleWheelZoomStop = function (contextInstance, event) {\n    var previousWheelEvent = contextInstance.previousWheelEvent;\n    var scale = contextInstance.transformState.scale;\n    var _a = contextInstance.setup, maxScale = _a.maxScale, minScale = _a.minScale;\n    if (!previousWheelEvent)\n        return false;\n    if (scale < maxScale || scale > minScale)\n        return true;\n    if (Math.sign(previousWheelEvent.deltaY) !== Math.sign(event.deltaY))\n        return true;\n    if (previousWheelEvent.deltaY > 0 && previousWheelEvent.deltaY < event.deltaY)\n        return true;\n    if (previousWheelEvent.deltaY < 0 && previousWheelEvent.deltaY > event.deltaY)\n        return true;\n    if (Math.sign(previousWheelEvent.deltaY) !== Math.sign(event.deltaY))\n        return true;\n    return false;\n};\n\nvar isPinchStartAllowed = function (contextInstance, event) {\n    var _a = contextInstance.setup.pinch, disabled = _a.disabled, excluded = _a.excluded;\n    var isInitialized = contextInstance.isInitialized;\n    var target = event.target;\n    var isAllowed = isInitialized && !disabled && target;\n    if (!isAllowed)\n        return false;\n    var isExcluded = isExcludedNode(target, excluded);\n    if (isExcluded)\n        return false;\n    return true;\n};\nvar isPinchAllowed = function (contextInstance) {\n    var disabled = contextInstance.setup.pinch.disabled;\n    var isInitialized = contextInstance.isInitialized, pinchStartDistance = contextInstance.pinchStartDistance;\n    var isAllowed = isInitialized && !disabled && pinchStartDistance;\n    if (!isAllowed)\n        return false;\n    return true;\n};\nvar calculateTouchMidPoint = function (event, scale, contentComponent) {\n    var contentRect = contentComponent.getBoundingClientRect();\n    var touches = event.touches;\n    var firstPointX = roundNumber(touches[0].clientX - contentRect.left, 5);\n    var firstPointY = roundNumber(touches[0].clientY - contentRect.top, 5);\n    var secondPointX = roundNumber(touches[1].clientX - contentRect.left, 5);\n    var secondPointY = roundNumber(touches[1].clientY - contentRect.top, 5);\n    return {\n        x: (firstPointX + secondPointX) / 2 / scale,\n        y: (firstPointY + secondPointY) / 2 / scale,\n    };\n};\nvar getTouchDistance = function (event) {\n    return Math.sqrt(Math.pow((event.touches[0].pageX - event.touches[1].pageX), 2) +\n        Math.pow((event.touches[0].pageY - event.touches[1].pageY), 2));\n};\nvar calculatePinchZoom = function (contextInstance, currentDistance) {\n    var pinchStartScale = contextInstance.pinchStartScale, pinchStartDistance = contextInstance.pinchStartDistance, setup = contextInstance.setup;\n    var maxScale = setup.maxScale, minScale = setup.minScale, zoomAnimation = setup.zoomAnimation, disablePadding = setup.disablePadding;\n    var size = zoomAnimation.size, disabled = zoomAnimation.disabled;\n    if (!pinchStartScale || pinchStartDistance === null || !currentDistance) {\n        throw new Error(\"Pinch touches distance was not provided\");\n    }\n    if (currentDistance < 0) {\n        return contextInstance.transformState.scale;\n    }\n    var touchProportion = currentDistance / pinchStartDistance;\n    var scaleDifference = touchProportion * pinchStartScale;\n    return checkZoomBounds(roundNumber(scaleDifference, 2), minScale, maxScale, size, !disabled && !disablePadding);\n};\n\nvar wheelStopEventTime = 160;\nvar wheelAnimationTime = 100;\nvar handleWheelStart = function (contextInstance, event) {\n    var _a = contextInstance.props, onWheelStart = _a.onWheelStart, onZoomStart = _a.onZoomStart;\n    if (!contextInstance.wheelStopEventTimer) {\n        handleCancelAnimation(contextInstance);\n        handleCallback(getContext(contextInstance), event, onWheelStart);\n        handleCallback(getContext(contextInstance), event, onZoomStart);\n    }\n};\nvar handleWheelZoom = function (contextInstance, event) {\n    var _a = contextInstance.props, onWheel = _a.onWheel, onZoom = _a.onZoom;\n    var contentComponent = contextInstance.contentComponent, setup = contextInstance.setup, transformState = contextInstance.transformState;\n    var scale = transformState.scale;\n    var limitToBounds = setup.limitToBounds, centerZoomedOut = setup.centerZoomedOut, zoomAnimation = setup.zoomAnimation, wheel = setup.wheel, disablePadding = setup.disablePadding, smooth = setup.smooth;\n    var size = zoomAnimation.size, disabled = zoomAnimation.disabled;\n    var step = wheel.step, smoothStep = wheel.smoothStep;\n    if (!contentComponent) {\n        throw new Error(\"Component not mounted\");\n    }\n    event.preventDefault();\n    event.stopPropagation();\n    var delta = getDelta(event, null);\n    var zoomStep = smooth ? smoothStep * Math.abs(event.deltaY) : step;\n    var newScale = handleCalculateWheelZoom(contextInstance, delta, zoomStep, !event.ctrlKey);\n    // if scale not change\n    if (scale === newScale)\n        return;\n    var bounds = handleCalculateBounds(contextInstance, newScale);\n    var mousePosition = getMousePosition(event, contentComponent, scale);\n    var isPaddingDisabled = disabled || size === 0 || centerZoomedOut || disablePadding;\n    var isLimitedToBounds = limitToBounds && isPaddingDisabled;\n    var _b = handleCalculateZoomPositions(contextInstance, mousePosition.x, mousePosition.y, newScale, bounds, isLimitedToBounds), x = _b.x, y = _b.y;\n    contextInstance.previousWheelEvent = event;\n    contextInstance.setTransformState(newScale, x, y);\n    handleCallback(getContext(contextInstance), event, onWheel);\n    handleCallback(getContext(contextInstance), event, onZoom);\n};\nvar handleWheelStop = function (contextInstance, event) {\n    var _a = contextInstance.props, onWheelStop = _a.onWheelStop, onZoomStop = _a.onZoomStop;\n    // fire animation\n    cancelTimeout(contextInstance.wheelAnimationTimer);\n    contextInstance.wheelAnimationTimer = setTimeout(function () {\n        if (!contextInstance.mounted)\n            return;\n        handleAlignToScaleBounds(contextInstance, event.x, event.y);\n        contextInstance.wheelAnimationTimer = null;\n    }, wheelAnimationTime);\n    // Wheel stop event\n    var hasStoppedZooming = handleWheelZoomStop(contextInstance, event);\n    if (hasStoppedZooming) {\n        cancelTimeout(contextInstance.wheelStopEventTimer);\n        contextInstance.wheelStopEventTimer = setTimeout(function () {\n            if (!contextInstance.mounted)\n                return;\n            contextInstance.wheelStopEventTimer = null;\n            handleCallback(getContext(contextInstance), event, onWheelStop);\n            handleCallback(getContext(contextInstance), event, onZoomStop);\n        }, wheelStopEventTime);\n    }\n};\n\nvar getTouchCenter = function (event) {\n    var totalX = 0;\n    var totalY = 0;\n    // Sum up the positions of all touches\n    for (var i = 0; i < 2; i += 1) {\n        totalX += event.touches[i].clientX;\n        totalY += event.touches[i].clientY;\n    }\n    // Calculate the average position\n    var x = totalX / 2;\n    var y = totalY / 2;\n    return { x: x, y: y };\n};\nvar handlePinchStart = function (contextInstance, event) {\n    var distance = getTouchDistance(event);\n    contextInstance.pinchStartDistance = distance;\n    contextInstance.lastDistance = distance;\n    contextInstance.pinchStartScale = contextInstance.transformState.scale;\n    contextInstance.isPanning = false;\n    var center = getTouchCenter(event);\n    contextInstance.pinchLastCenterX = center.x;\n    contextInstance.pinchLastCenterY = center.y;\n    handleCancelAnimation(contextInstance);\n};\nvar handlePinchZoom = function (contextInstance, event) {\n    var contentComponent = contextInstance.contentComponent, pinchStartDistance = contextInstance.pinchStartDistance, wrapperComponent = contextInstance.wrapperComponent;\n    var scale = contextInstance.transformState.scale;\n    var _a = contextInstance.setup, limitToBounds = _a.limitToBounds, centerZoomedOut = _a.centerZoomedOut, zoomAnimation = _a.zoomAnimation, alignmentAnimation = _a.alignmentAnimation;\n    var disabled = zoomAnimation.disabled, size = zoomAnimation.size;\n    // if one finger starts from outside of wrapper\n    if (pinchStartDistance === null || !contentComponent)\n        return;\n    var midPoint = calculateTouchMidPoint(event, scale, contentComponent);\n    // if touches goes off of the wrapper element\n    if (!Number.isFinite(midPoint.x) || !Number.isFinite(midPoint.y))\n        return;\n    var currentDistance = getTouchDistance(event);\n    var newScale = calculatePinchZoom(contextInstance, currentDistance);\n    var center = getTouchCenter(event);\n    // pan should be scale invariant.\n    var panX = center.x - (contextInstance.pinchLastCenterX || 0);\n    var panY = center.y - (contextInstance.pinchLastCenterY || 0);\n    if (newScale === scale && panX === 0 && panY === 0)\n        return;\n    contextInstance.pinchLastCenterX = center.x;\n    contextInstance.pinchLastCenterY = center.y;\n    var bounds = handleCalculateBounds(contextInstance, newScale);\n    var isPaddingDisabled = disabled || size === 0 || centerZoomedOut;\n    var isLimitedToBounds = limitToBounds && isPaddingDisabled;\n    var _b = handleCalculateZoomPositions(contextInstance, midPoint.x, midPoint.y, newScale, bounds, isLimitedToBounds), x = _b.x, y = _b.y;\n    contextInstance.pinchMidpoint = midPoint;\n    contextInstance.lastDistance = currentDistance;\n    var sizeX = alignmentAnimation.sizeX, sizeY = alignmentAnimation.sizeY;\n    var paddingValueX = getPaddingValue(contextInstance, sizeX);\n    var paddingValueY = getPaddingValue(contextInstance, sizeY);\n    var newPositionX = x + panX;\n    var newPositionY = y + panY;\n    var _c = getMouseBoundedPosition(newPositionX, newPositionY, bounds, limitToBounds, paddingValueX, paddingValueY, wrapperComponent), finalX = _c.x, finalY = _c.y;\n    contextInstance.setTransformState(newScale, finalX, finalY);\n};\nvar handlePinchStop = function (contextInstance) {\n    var pinchMidpoint = contextInstance.pinchMidpoint;\n    contextInstance.velocity = null;\n    contextInstance.lastDistance = null;\n    contextInstance.pinchMidpoint = null;\n    contextInstance.pinchStartScale = null;\n    contextInstance.pinchStartDistance = null;\n    handleAlignToScaleBounds(contextInstance, pinchMidpoint === null || pinchMidpoint === void 0 ? void 0 : pinchMidpoint.x, pinchMidpoint === null || pinchMidpoint === void 0 ? void 0 : pinchMidpoint.y);\n};\n\nvar handleDoubleClickStop = function (contextInstance, event) {\n    var onZoomStop = contextInstance.props.onZoomStop;\n    var animationTime = contextInstance.setup.doubleClick.animationTime;\n    cancelTimeout(contextInstance.doubleClickStopEventTimer);\n    contextInstance.doubleClickStopEventTimer = setTimeout(function () {\n        contextInstance.doubleClickStopEventTimer = null;\n        handleCallback(getContext(contextInstance), event, onZoomStop);\n    }, animationTime);\n};\nvar handleDoubleClickResetMode = function (contextInstance, event) {\n    var _a = contextInstance.props, onZoomStart = _a.onZoomStart, onZoom = _a.onZoom;\n    var _b = contextInstance.setup.doubleClick, animationTime = _b.animationTime, animationType = _b.animationType;\n    handleCallback(getContext(contextInstance), event, onZoomStart);\n    resetTransformations(contextInstance, animationTime, animationType, function () {\n        return handleCallback(getContext(contextInstance), event, onZoom);\n    });\n    handleDoubleClickStop(contextInstance, event);\n};\nfunction getDoubleClickScale(mode, scale) {\n    if (mode === \"toggle\") {\n        return scale === 1 ? 1 : -1;\n    }\n    return mode === \"zoomOut\" ? -1 : 1;\n}\nfunction handleDoubleClick(contextInstance, event) {\n    var setup = contextInstance.setup, doubleClickStopEventTimer = contextInstance.doubleClickStopEventTimer, transformState = contextInstance.transformState, contentComponent = contextInstance.contentComponent;\n    var scale = transformState.scale;\n    var _a = contextInstance.props, onZoomStart = _a.onZoomStart, onZoom = _a.onZoom;\n    var _b = setup.doubleClick, disabled = _b.disabled, mode = _b.mode, step = _b.step, animationTime = _b.animationTime, animationType = _b.animationType;\n    if (disabled)\n        return;\n    if (doubleClickStopEventTimer)\n        return;\n    if (mode === \"reset\") {\n        return handleDoubleClickResetMode(contextInstance, event);\n    }\n    if (!contentComponent)\n        return console.error(\"No ContentComponent found\");\n    var delta = getDoubleClickScale(mode, contextInstance.transformState.scale);\n    var newScale = handleCalculateButtonZoom(contextInstance, delta, step);\n    // stop execution when scale didn't change\n    if (scale === newScale)\n        return;\n    handleCallback(getContext(contextInstance), event, onZoomStart);\n    var mousePosition = getMousePosition(event, contentComponent, scale);\n    var targetState = handleZoomToPoint(contextInstance, newScale, mousePosition.x, mousePosition.y);\n    if (!targetState) {\n        return console.error(\"Error during zoom event. New transformation state was not calculated.\");\n    }\n    handleCallback(getContext(contextInstance), event, onZoom);\n    animate(contextInstance, targetState, animationTime, animationType);\n    handleDoubleClickStop(contextInstance, event);\n}\nvar isDoubleClickAllowed = function (contextInstance, event) {\n    var isInitialized = contextInstance.isInitialized, setup = contextInstance.setup, wrapperComponent = contextInstance.wrapperComponent;\n    var _a = setup.doubleClick, disabled = _a.disabled, excluded = _a.excluded;\n    var target = event.target;\n    var isWrapperChild = wrapperComponent === null || wrapperComponent === void 0 ? void 0 : wrapperComponent.contains(target);\n    var isAllowed = isInitialized && target && isWrapperChild && !disabled;\n    if (!isAllowed)\n        return false;\n    var isExcluded = isExcludedNode(target, excluded);\n    if (isExcluded)\n        return false;\n    return true;\n};\n\nvar ZoomPanPinch = /** @class */ (function () {\n    function ZoomPanPinch(props) {\n        var _this = this;\n        this.mounted = true;\n        this.pinchLastCenterX = null;\n        this.pinchLastCenterY = null;\n        this.onChangeCallbacks = new Set();\n        this.onInitCallbacks = new Set();\n        // Components\n        this.wrapperComponent = null;\n        this.contentComponent = null;\n        // Initialization\n        this.isInitialized = false;\n        this.bounds = null;\n        // wheel helpers\n        this.previousWheelEvent = null;\n        this.wheelStopEventTimer = null;\n        this.wheelAnimationTimer = null;\n        // panning helpers\n        this.isPanning = false;\n        this.isWheelPanning = false;\n        this.startCoords = null;\n        this.lastTouch = null;\n        // pinch helpers\n        this.distance = null;\n        this.lastDistance = null;\n        this.pinchStartDistance = null;\n        this.pinchStartScale = null;\n        this.pinchMidpoint = null;\n        // double click helpers\n        this.doubleClickStopEventTimer = null;\n        // velocity helpers\n        this.velocity = null;\n        this.velocityTime = null;\n        this.lastMousePosition = null;\n        // animations helpers\n        this.animate = false;\n        this.animation = null;\n        this.maxBounds = null;\n        // key press\n        this.pressedKeys = {};\n        this.mount = function () {\n            _this.initializeWindowEvents();\n        };\n        this.unmount = function () {\n            _this.cleanupWindowEvents();\n        };\n        this.update = function (newProps) {\n            _this.props = newProps;\n            handleCalculateBounds(_this, _this.transformState.scale);\n            _this.setup = createSetup(newProps);\n        };\n        this.initializeWindowEvents = function () {\n            var _a, _b;\n            var passive = makePassiveEventOption();\n            var currentDocument = (_a = _this.wrapperComponent) === null || _a === void 0 ? void 0 : _a.ownerDocument;\n            var currentWindow = currentDocument === null || currentDocument === void 0 ? void 0 : currentDocument.defaultView;\n            (_b = _this.wrapperComponent) === null || _b === void 0 ? void 0 : _b.addEventListener(\"wheel\", _this.onWheelPanning, passive);\n            // Panning on window to allow panning when mouse is out of component wrapper\n            currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"mousedown\", _this.onPanningStart, passive);\n            currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"mousemove\", _this.onPanning, passive);\n            currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"mouseup\", _this.onPanningStop, passive);\n            currentDocument === null || currentDocument === void 0 ? void 0 : currentDocument.addEventListener(\"mouseleave\", _this.clearPanning, passive);\n            currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"keyup\", _this.setKeyUnPressed, passive);\n            currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"keydown\", _this.setKeyPressed, passive);\n        };\n        this.cleanupWindowEvents = function () {\n            var _a, _b;\n            var passive = makePassiveEventOption();\n            var currentDocument = (_a = _this.wrapperComponent) === null || _a === void 0 ? void 0 : _a.ownerDocument;\n            var currentWindow = currentDocument === null || currentDocument === void 0 ? void 0 : currentDocument.defaultView;\n            currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"mousedown\", _this.onPanningStart, passive);\n            currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"mousemove\", _this.onPanning, passive);\n            currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"mouseup\", _this.onPanningStop, passive);\n            currentDocument === null || currentDocument === void 0 ? void 0 : currentDocument.removeEventListener(\"mouseleave\", _this.clearPanning, passive);\n            currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"keyup\", _this.setKeyUnPressed, passive);\n            currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"keydown\", _this.setKeyPressed, passive);\n            document.removeEventListener(\"mouseleave\", _this.clearPanning, passive);\n            handleCancelAnimation(_this);\n            (_b = _this.observer) === null || _b === void 0 ? void 0 : _b.disconnect();\n        };\n        this.handleInitializeWrapperEvents = function (wrapper) {\n            // Zooming events on wrapper\n            var passive = makePassiveEventOption();\n            wrapper.addEventListener(\"wheel\", _this.onWheelZoom, passive);\n            wrapper.addEventListener(\"dblclick\", _this.onDoubleClick, passive);\n            wrapper.addEventListener(\"touchstart\", _this.onTouchPanningStart, passive);\n            wrapper.addEventListener(\"touchmove\", _this.onTouchPanning, passive);\n            wrapper.addEventListener(\"touchend\", _this.onTouchPanningStop, passive);\n        };\n        this.handleInitialize = function (wrapper, contentComponent) {\n            var isCentered = false;\n            var centerOnInit = _this.setup.centerOnInit;\n            var hasTarget = function (entries, target) {\n                // eslint-disable-next-line no-restricted-syntax\n                for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n                    var entry = entries_1[_i];\n                    if (entry.target === target) {\n                        return true;\n                    }\n                }\n                return false;\n            };\n            _this.applyTransformation();\n            _this.onInitCallbacks.forEach(function (callback) {\n                callback(getContext(_this));\n            });\n            _this.observer = new ResizeObserver(function (entries) {\n                if (hasTarget(entries, wrapper) || hasTarget(entries, contentComponent)) {\n                    if (centerOnInit && !isCentered) {\n                        var currentWidth = contentComponent.offsetWidth;\n                        var currentHeight = contentComponent.offsetHeight;\n                        if (currentWidth > 0 || currentHeight > 0) {\n                            isCentered = true;\n                            _this.setCenter();\n                        }\n                    }\n                    else {\n                        handleCancelAnimation(_this);\n                        handleCalculateBounds(_this, _this.transformState.scale);\n                        handleAlignToBounds(_this, 0);\n                    }\n                }\n            });\n            // Start observing the target node for configured mutations\n            _this.observer.observe(wrapper);\n            _this.observer.observe(contentComponent);\n        };\n        /// ///////\n        // Zoom\n        /// ///////\n        this.onWheelZoom = function (event) {\n            var disabled = _this.setup.disabled;\n            if (disabled)\n                return;\n            var isAllowed = isWheelAllowed(_this, event);\n            if (!isAllowed)\n                return;\n            var keysPressed = _this.isPressingKeys(_this.setup.wheel.activationKeys);\n            if (!keysPressed)\n                return;\n            handleWheelStart(_this, event);\n            handleWheelZoom(_this, event);\n            handleWheelStop(_this, event);\n        };\n        /// ///////\n        // Pan\n        /// ///////\n        this.onWheelPanning = function (event) {\n            var _a = _this.setup, disabled = _a.disabled, wheel = _a.wheel, panning = _a.panning;\n            if (!_this.wrapperComponent ||\n                !_this.contentComponent ||\n                disabled ||\n                !wheel.wheelDisabled ||\n                panning.disabled ||\n                !panning.wheelPanning ||\n                event.ctrlKey) {\n                return;\n            }\n            event.preventDefault();\n            event.stopPropagation();\n            var _b = _this.transformState, positionX = _b.positionX, positionY = _b.positionY;\n            var mouseX = positionX - event.deltaX;\n            var mouseY = positionY - event.deltaY;\n            var newPositionX = panning.lockAxisX ? positionX : mouseX;\n            var newPositionY = panning.lockAxisY ? positionY : mouseY;\n            var _c = _this.setup.alignmentAnimation, sizeX = _c.sizeX, sizeY = _c.sizeY;\n            var paddingValueX = getPaddingValue(_this, sizeX);\n            var paddingValueY = getPaddingValue(_this, sizeY);\n            if (newPositionX === positionX && newPositionY === positionY)\n                return;\n            handleNewPosition(_this, newPositionX, newPositionY, paddingValueX, paddingValueY);\n        };\n        this.onPanningStart = function (event) {\n            var disabled = _this.setup.disabled;\n            var onPanningStart = _this.props.onPanningStart;\n            if (disabled)\n                return;\n            var isAllowed = isPanningStartAllowed(_this, event);\n            if (!isAllowed)\n                return;\n            var keysPressed = _this.isPressingKeys(_this.setup.panning.activationKeys);\n            if (!keysPressed)\n                return;\n            if (event.button === 0 && !_this.setup.panning.allowLeftClickPan)\n                return;\n            if (event.button === 1 && !_this.setup.panning.allowMiddleClickPan)\n                return;\n            if (event.button === 2 && !_this.setup.panning.allowRightClickPan)\n                return;\n            event.preventDefault();\n            event.stopPropagation();\n            handleCancelAnimation(_this);\n            handlePanningStart(_this, event);\n            handleCallback(getContext(_this), event, onPanningStart);\n        };\n        this.onPanning = function (event) {\n            var disabled = _this.setup.disabled;\n            var onPanning = _this.props.onPanning;\n            if (disabled)\n                return;\n            var isAllowed = isPanningAllowed(_this);\n            if (!isAllowed)\n                return;\n            var keysPressed = _this.isPressingKeys(_this.setup.panning.activationKeys);\n            if (!keysPressed)\n                return;\n            event.preventDefault();\n            event.stopPropagation();\n            handlePanning(_this, event.clientX, event.clientY);\n            handleCallback(getContext(_this), event, onPanning);\n        };\n        this.onPanningStop = function (event) {\n            var onPanningStop = _this.props.onPanningStop;\n            if (_this.isPanning) {\n                handlePanningEnd(_this);\n                handleCallback(getContext(_this), event, onPanningStop);\n            }\n        };\n        /// ///////\n        // Pinch\n        /// ///////\n        this.onPinchStart = function (event) {\n            var disabled = _this.setup.disabled;\n            var _a = _this.props, onPinchingStart = _a.onPinchingStart, onZoomStart = _a.onZoomStart;\n            if (disabled)\n                return;\n            var isAllowed = isPinchStartAllowed(_this, event);\n            if (!isAllowed)\n                return;\n            handlePinchStart(_this, event);\n            handleCancelAnimation(_this);\n            handleCallback(getContext(_this), event, onPinchingStart);\n            handleCallback(getContext(_this), event, onZoomStart);\n        };\n        this.onPinch = function (event) {\n            var disabled = _this.setup.disabled;\n            var _a = _this.props, onPinching = _a.onPinching, onZoom = _a.onZoom;\n            if (disabled)\n                return;\n            var isAllowed = isPinchAllowed(_this);\n            if (!isAllowed)\n                return;\n            event.preventDefault();\n            event.stopPropagation();\n            handlePinchZoom(_this, event);\n            handleCallback(getContext(_this), event, onPinching);\n            handleCallback(getContext(_this), event, onZoom);\n        };\n        this.onPinchStop = function (event) {\n            var _a = _this.props, onPinchingStop = _a.onPinchingStop, onZoomStop = _a.onZoomStop;\n            if (_this.pinchStartScale) {\n                handlePinchStop(_this);\n                handleCallback(getContext(_this), event, onPinchingStop);\n                handleCallback(getContext(_this), event, onZoomStop);\n            }\n        };\n        /// ///////\n        // Touch\n        /// ///////\n        this.onTouchPanningStart = function (event) {\n            var disabled = _this.setup.disabled;\n            var onPanningStart = _this.props.onPanningStart;\n            if (disabled)\n                return;\n            var isAllowed = isPanningStartAllowed(_this, event);\n            if (!isAllowed)\n                return;\n            var isDoubleTap = _this.lastTouch &&\n                +new Date() - _this.lastTouch < 200 &&\n                event.touches.length === 1;\n            if (!isDoubleTap) {\n                _this.lastTouch = +new Date();\n                handleCancelAnimation(_this);\n                var touches = event.touches;\n                var isPanningAction = touches.length === 1;\n                var isPinchAction = touches.length === 2;\n                if (isPanningAction) {\n                    handleCancelAnimation(_this);\n                    handlePanningStart(_this, event);\n                    handleCallback(getContext(_this), event, onPanningStart);\n                }\n                if (isPinchAction) {\n                    _this.onPinchStart(event);\n                }\n            }\n        };\n        this.onTouchPanning = function (event) {\n            var disabled = _this.setup.disabled;\n            var onPanning = _this.props.onPanning;\n            if (_this.isPanning && event.touches.length === 1) {\n                if (disabled)\n                    return;\n                var isAllowed = isPanningAllowed(_this);\n                if (!isAllowed)\n                    return;\n                event.preventDefault();\n                event.stopPropagation();\n                var touch = event.touches[0];\n                handlePanning(_this, touch.clientX, touch.clientY);\n                handleCallback(getContext(_this), event, onPanning);\n            }\n            else if (event.touches.length > 1) {\n                _this.onPinch(event);\n            }\n        };\n        this.onTouchPanningStop = function (event) {\n            _this.onPanningStop(event);\n            _this.onPinchStop(event);\n        };\n        /// ///////\n        // Double Click\n        /// ///////\n        this.onDoubleClick = function (event) {\n            var disabled = _this.setup.disabled;\n            if (disabled)\n                return;\n            var isAllowed = isDoubleClickAllowed(_this, event);\n            if (!isAllowed)\n                return;\n            handleDoubleClick(_this, event);\n        };\n        /// ///////\n        // Helpers\n        /// ///////\n        this.clearPanning = function (event) {\n            if (_this.isPanning) {\n                _this.onPanningStop(event);\n            }\n        };\n        this.setKeyPressed = function (e) {\n            _this.pressedKeys[e.key] = true;\n        };\n        this.setKeyUnPressed = function (e) {\n            _this.pressedKeys[e.key] = false;\n        };\n        this.isPressingKeys = function (keys) {\n            if (!keys.length) {\n                return true;\n            }\n            return Boolean(keys.find(function (key) { return _this.pressedKeys[key]; }));\n        };\n        this.setTransformState = function (scale, positionX, positionY) {\n            var onTransformed = _this.props.onTransformed;\n            if (!Number.isNaN(scale) &&\n                !Number.isNaN(positionX) &&\n                !Number.isNaN(positionY)) {\n                if (scale !== _this.transformState.scale) {\n                    _this.transformState.previousScale = _this.transformState.scale;\n                    _this.transformState.scale = scale;\n                }\n                _this.transformState.positionX = positionX;\n                _this.transformState.positionY = positionY;\n                _this.applyTransformation();\n                var ctx_1 = getContext(_this);\n                _this.onChangeCallbacks.forEach(function (callback) { return callback(ctx_1); });\n                handleCallback(ctx_1, { scale: scale, positionX: positionX, positionY: positionY }, onTransformed);\n            }\n            else {\n                console.error(\"Detected NaN set state values\");\n            }\n        };\n        this.setCenter = function () {\n            if (_this.wrapperComponent && _this.contentComponent) {\n                var targetState = getCenterPosition(_this.transformState.scale, _this.wrapperComponent, _this.contentComponent);\n                _this.setTransformState(targetState.scale, targetState.positionX, targetState.positionY);\n            }\n        };\n        this.handleTransformStyles = function (x, y, scale) {\n            if (_this.props.customTransform) {\n                return _this.props.customTransform(x, y, scale);\n            }\n            return getTransformStyles(x, y, scale);\n        };\n        this.applyTransformation = function () {\n            if (!_this.mounted || !_this.contentComponent)\n                return;\n            var _a = _this.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n            var transform = _this.handleTransformStyles(positionX, positionY, scale);\n            _this.contentComponent.style.transform = transform;\n        };\n        this.getContext = function () {\n            return getContext(_this);\n        };\n        /**\n         * Hooks\n         */\n        this.onChange = function (callback) {\n            if (!_this.onChangeCallbacks.has(callback)) {\n                _this.onChangeCallbacks.add(callback);\n            }\n            return function () {\n                _this.onChangeCallbacks.delete(callback);\n            };\n        };\n        this.onInit = function (callback) {\n            if (!_this.onInitCallbacks.has(callback)) {\n                _this.onInitCallbacks.add(callback);\n            }\n            return function () {\n                _this.onInitCallbacks.delete(callback);\n            };\n        };\n        /**\n         * Initialization\n         */\n        this.init = function (wrapperComponent, contentComponent) {\n            _this.cleanupWindowEvents();\n            _this.wrapperComponent = wrapperComponent;\n            _this.contentComponent = contentComponent;\n            handleCalculateBounds(_this, _this.transformState.scale);\n            _this.handleInitializeWrapperEvents(wrapperComponent);\n            _this.handleInitialize(wrapperComponent, contentComponent);\n            _this.initializeWindowEvents();\n            _this.isInitialized = true;\n            var ctx = getContext(_this);\n            handleCallback(ctx, undefined, _this.props.onInit);\n        };\n        this.props = props;\n        this.setup = createSetup(this.props);\n        this.transformState = createState(this.props);\n    }\n    return ZoomPanPinch;\n}());\n\nvar Context = React.createContext(null);\nvar getContent = function (children, ctx) {\n    if (typeof children === \"function\") {\n        return children(ctx);\n    }\n    return children;\n};\nvar TransformWrapper = React.forwardRef(function (props, ref) {\n    var instance = useRef(new ZoomPanPinch(props)).current;\n    var content = getContent(props.children, getControls(instance));\n    useImperativeHandle(ref, function () { return getControls(instance); }, [instance]);\n    useEffect(function () {\n        instance.update(props);\n    }, [instance, props]);\n    return React.createElement(Context.Provider, { value: instance }, content);\n});\n\nvar KeepScale = React.forwardRef(function (props, ref) {\n    var localRef = useRef(null);\n    var instance = useContext(Context);\n    useEffect(function () {\n        return instance.onChange(function (ctx) {\n            if (localRef.current) {\n                var positionX = 0;\n                var positionY = 0;\n                localRef.current.style.transform = instance.handleTransformStyles(positionX, positionY, 1 / ctx.instance.transformState.scale);\n            }\n        });\n    }, [instance]);\n    return React.createElement(\"div\", __assign({}, props, { ref: mergeRefs([localRef, ref]) }));\n});\n\nvar initialElementRect = {\n    width: 0,\n    height: 0,\n    y: 0,\n    x: 0,\n    top: 0,\n    bottom: 0,\n    left: 0,\n    right: 0,\n};\nvar useResize = function (ref, onResize, dependencies) {\n    var resizeObserverRef = useRef();\n    var rectRef = useRef(initialElementRect);\n    var didUnmount = useRef(false);\n    useLayoutEffect(function () {\n        var _a;\n        didUnmount.current = false;\n        if (!(\"ResizeObserver\" in window)) {\n            return;\n        }\n        if (ref) {\n            resizeObserverRef.current = new ResizeObserver(function (entries) {\n                var newSize = ref.getBoundingClientRect();\n                if (!Array.isArray(entries) ||\n                    !entries.length ||\n                    didUnmount.current ||\n                    (newSize.width === rectRef.current.width &&\n                        newSize.height === rectRef.current.height))\n                    return;\n                onResize(newSize, ref);\n                rectRef.current = newSize;\n            });\n            (_a = resizeObserverRef.current) === null || _a === void 0 ? void 0 : _a.observe(ref);\n        }\n        return function () {\n            var _a;\n            didUnmount.current = true;\n            if (ref) {\n                (_a = resizeObserverRef.current) === null || _a === void 0 ? void 0 : _a.unobserve(ref);\n            }\n        };\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, __spreadArray([onResize, ref], dependencies, true));\n};\n\nvar previewStyles = {\n    position: \"absolute\",\n    zIndex: 2,\n    top: \"0px\",\n    left: \"0px\",\n    boxSizing: \"border-box\",\n    border: \"3px solid red\",\n    transformOrigin: \"0% 0%\",\n    boxShadow: \"rgba(0,0,0,0.2) 0 0 0 10000000px\",\n};\nvar MiniMap = function (_a) {\n    var _b = _a.width, width = _b === void 0 ? 200 : _b, _c = _a.height, height = _c === void 0 ? 200 : _c, _d = _a.borderColor, borderColor = _d === void 0 ? \"red\" : _d, children = _a.children, rest = __rest(_a, [\"width\", \"height\", \"borderColor\", \"children\"]);\n    var _e = useState(false), initialized = _e[0], setInitialized = _e[1];\n    var instance = useTransformContext();\n    var miniMapInstance = useRef(null);\n    var mainRef = useRef(null);\n    var wrapperRef = useRef(null);\n    var previewRef = useRef(null);\n    var getViewportSize = useCallback(function () {\n        if (instance.wrapperComponent) {\n            var rect = instance.wrapperComponent.getBoundingClientRect();\n            return {\n                width: rect.width,\n                height: rect.height,\n            };\n        }\n        return {\n            width: 0,\n            height: 0,\n        };\n    }, [instance.wrapperComponent]);\n    var getContentSize = useCallback(function () {\n        if (instance.contentComponent) {\n            var rect = instance.contentComponent.getBoundingClientRect();\n            return {\n                width: rect.width / instance.transformState.scale,\n                height: rect.height / instance.transformState.scale,\n            };\n        }\n        return {\n            width: 0,\n            height: 0,\n        };\n    }, [instance.contentComponent, instance.transformState.scale]);\n    var computeMiniMapScale = useCallback(function () {\n        var contentSize = getContentSize();\n        var scaleX = width / contentSize.width;\n        var scaleY = height / contentSize.height;\n        var scale = scaleY > scaleX ? scaleX : scaleY;\n        return scale;\n    }, [getContentSize, height, width]);\n    var computeMiniMapSize = function () {\n        var contentSize = getContentSize();\n        var scaleX = width / contentSize.width;\n        var scaleY = height / contentSize.height;\n        if (scaleY > scaleX) {\n            return { width: width, height: contentSize.height * scaleX };\n        }\n        return { width: contentSize.width * scaleY, height: height };\n    };\n    var computeMiniMapStyle = function () {\n        var scale = computeMiniMapScale();\n        var style = {\n            transform: \"scale(\".concat(scale || 1, \")\"),\n            transformOrigin: \"0% 0%\",\n            position: \"absolute\",\n            boxSizing: \"border-box\",\n            zIndex: 1,\n            overflow: \"hidden\",\n        };\n        Object.keys(style).forEach(function (key) {\n            if (wrapperRef.current) {\n                wrapperRef.current.style[key] = style[key];\n            }\n        });\n    };\n    var transformMiniMap = function () {\n        computeMiniMapStyle();\n        var miniSize = computeMiniMapSize();\n        var wrapSize = getContentSize();\n        if (wrapperRef.current) {\n            wrapperRef.current.style.width = \"\".concat(wrapSize.width, \"px\");\n            wrapperRef.current.style.height = \"\".concat(wrapSize.height, \"px\");\n        }\n        if (mainRef.current) {\n            mainRef.current.style.width = \"\".concat(miniSize.width, \"px\");\n            mainRef.current.style.height = \"\".concat(miniSize.height, \"px\");\n        }\n        if (previewRef.current) {\n            var size = getViewportSize();\n            var scale = computeMiniMapScale();\n            var previewScale = scale * (1 / instance.transformState.scale);\n            var transform = instance.handleTransformStyles(-instance.transformState.positionX * previewScale, -instance.transformState.positionY * previewScale, 1);\n            previewRef.current.style.transform = transform;\n            previewRef.current.style.width = \"\".concat(size.width * previewScale, \"px\");\n            previewRef.current.style.height = \"\".concat(size.height * previewScale, \"px\");\n        }\n    };\n    var initialize = function () {\n        transformMiniMap();\n    };\n    useTransformEffect(function () {\n        transformMiniMap();\n    });\n    useTransformInit(function () {\n        initialize();\n        setInitialized(true);\n    });\n    useResize(instance.contentComponent, initialize, [initialized]);\n    useEffect(function () {\n        return instance.onChange(function (zpp) {\n            var scale = computeMiniMapScale();\n            if (miniMapInstance.current) {\n                miniMapInstance.current.instance.transformState.scale =\n                    zpp.instance.transformState.scale;\n                miniMapInstance.current.instance.transformState.positionX =\n                    zpp.instance.transformState.positionX * scale;\n                miniMapInstance.current.instance.transformState.positionY =\n                    zpp.instance.transformState.positionY * scale;\n            }\n        });\n    }, [computeMiniMapScale, instance, miniMapInstance]);\n    var wrapperStyle = useMemo(function () {\n        return {\n            position: \"relative\",\n            zIndex: 2,\n            overflow: \"hidden\",\n        };\n    }, []);\n    return (React.createElement(\"div\", __assign({}, rest, { ref: mainRef, style: wrapperStyle, className: \"rzpp-mini-map \".concat(rest.className || \"\") }),\n        React.createElement(\"div\", __assign({}, rest, { ref: wrapperRef, className: \"rzpp-wrapper\" }), children),\n        React.createElement(\"div\", { className: \"rzpp-preview\", ref: previewRef, style: __assign(__assign({}, previewStyles), { borderColor: borderColor }) })));\n};\n\nfunction styleInject(css, ref) {\n  if ( ref === void 0 ) ref = {};\n  var insertAt = ref.insertAt;\n\n  if (!css || typeof document === 'undefined') { return; }\n\n  var head = document.head || document.getElementsByTagName('head')[0];\n  var style = document.createElement('style');\n  style.type = 'text/css';\n\n  if (insertAt === 'top') {\n    if (head.firstChild) {\n      head.insertBefore(style, head.firstChild);\n    } else {\n      head.appendChild(style);\n    }\n  } else {\n    head.appendChild(style);\n  }\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nvar css_248z = \".transform-component-module_wrapper__SPB86 {\\n  position: relative;\\n  width: -moz-fit-content;\\n  width: fit-content;\\n  height: -moz-fit-content;\\n  height: fit-content;\\n  overflow: hidden;\\n  -webkit-touch-callout: none; /* iOS Safari */\\n  -webkit-user-select: none; /* Safari */\\n  -khtml-user-select: none; /* Konqueror HTML */\\n  -moz-user-select: none; /* Firefox */\\n  -ms-user-select: none; /* Internet Explorer/Edge */\\n  user-select: none;\\n  margin: 0;\\n  padding: 0;\\n  transform: translate3d(0, 0, 0);\\n}\\n.transform-component-module_content__FBWxo {\\n  display: flex;\\n  flex-wrap: wrap;\\n  width: -moz-fit-content;\\n  width: fit-content;\\n  height: -moz-fit-content;\\n  height: fit-content;\\n  margin: 0;\\n  padding: 0;\\n  transform-origin: 0% 0%;\\n}\\n.transform-component-module_content__FBWxo img {\\n  pointer-events: none;\\n}\\n\";\nvar styles = {\"wrapper\":\"transform-component-module_wrapper__SPB86\",\"content\":\"transform-component-module_content__FBWxo\"};\nstyleInject(css_248z);\n\nvar TransformComponent = function (_a) {\n    var children = _a.children, _b = _a.wrapperClass, wrapperClass = _b === void 0 ? \"\" : _b, _c = _a.contentClass, contentClass = _c === void 0 ? \"\" : _c, wrapperStyle = _a.wrapperStyle, contentStyle = _a.contentStyle, _d = _a.wrapperProps, wrapperProps = _d === void 0 ? {} : _d, _e = _a.contentProps, contentProps = _e === void 0 ? {} : _e;\n    var _f = useContext(Context), init = _f.init, cleanupWindowEvents = _f.cleanupWindowEvents;\n    var wrapperRef = useRef(null);\n    var contentRef = useRef(null);\n    useEffect(function () {\n        var wrapper = wrapperRef.current;\n        var content = contentRef.current;\n        if (wrapper !== null && content !== null && init) {\n            init === null || init === void 0 ? void 0 : init(wrapper, content);\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n        return function () {\n            cleanupWindowEvents === null || cleanupWindowEvents === void 0 ? void 0 : cleanupWindowEvents();\n        };\n    }, []);\n    return (React.createElement(\"div\", __assign({}, wrapperProps, { ref: wrapperRef, className: \"\".concat(baseClasses.wrapperClass, \" \").concat(styles.wrapper, \" \").concat(wrapperClass), style: wrapperStyle }),\n        React.createElement(\"div\", __assign({}, contentProps, { ref: contentRef, className: \"\".concat(baseClasses.contentClass, \" \").concat(styles.content, \" \").concat(contentClass), style: contentStyle }), children)));\n};\n\nvar useTransformContext = function () {\n    var libraryContext = useContext(Context);\n    if (!libraryContext) {\n        throw new Error(\"Transform context must be placed inside TransformWrapper\");\n    }\n    return libraryContext;\n};\n\nvar useControls = function () {\n    var libraryContext = useTransformContext();\n    return getControls(libraryContext);\n};\n\nvar useTransformInit = function (callback) {\n    var libraryContext = useTransformContext();\n    useEffect(function () {\n        var unmountCallback;\n        var unmount;\n        if (libraryContext.contentComponent && libraryContext.wrapperComponent) {\n            unmountCallback = callback(getState(libraryContext));\n        }\n        else {\n            unmount = libraryContext.onInit(function (ref) {\n                unmountCallback = callback(getState(ref.instance));\n            });\n        }\n        return function () {\n            unmount === null || unmount === void 0 ? void 0 : unmount();\n            unmountCallback === null || unmountCallback === void 0 ? void 0 : unmountCallback();\n        };\n    }, []);\n};\n\nvar useTransformEffect = function (callback) {\n    var libraryContext = useTransformContext();\n    useEffect(function () {\n        var unmountCallback;\n        var unmount = libraryContext.onChange(function (ref) {\n            unmountCallback = callback(getState(ref.instance));\n        });\n        return function () {\n            unmount();\n            unmountCallback === null || unmountCallback === void 0 ? void 0 : unmountCallback();\n        };\n    }, [callback, libraryContext]);\n};\n\nfunction useTransformComponent(callback) {\n    var libraryContext = useTransformContext();\n    var _a = useState(callback(getState(libraryContext))), transformRender = _a[0], setTransformRender = _a[1];\n    useEffect(function () {\n        var mounted = true;\n        var unmount = libraryContext.onChange(function (ref) {\n            if (mounted) {\n                setTransformRender(callback(getState(ref.instance)));\n            }\n        });\n        return function () {\n            unmount();\n            mounted = false;\n        };\n    }, [callback, libraryContext]);\n    return transformRender;\n}\n\nexport { Context, KeepScale, MiniMap, TransformComponent, TransformWrapper, getCenterPosition, getMatrixTransformStyles, getTransformStyles, useControls, useTransformComponent, useTransformContext, useTransformEffect, useTransformInit };\n//# sourceMappingURL=index.esm.js.map\n","import { useCallback, useRef, useState } from \"react\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faSearchPlus,\n    faSearchMinus,\n    faCompress,\n    faDownload,\n    faXmark,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { TransformWrapper, TransformComponent } from \"react-zoom-pan-pinch\"\nimport { LoadingIndicator, BodyPortal } from \"@ourworldindata/components\"\nimport { triggerDownloadFromBlob } from \"@ourworldindata/utils\"\nimport { useTriggerOnEscape } from \"./hooks.js\"\nimport cx from \"clsx\"\n\nconst LightboxImage = ({\n    src,\n    alt,\n    isLoaded,\n    setIsLoaded,\n    width,\n    height,\n}: {\n    src: string\n    alt?: string\n    isLoaded: boolean\n    setIsLoaded: any\n    width: number\n    height: number\n}) => {\n    return (\n        <img\n            width={width}\n            height={height}\n            onLoad={() => setIsLoaded(true)}\n            className={cx({\n                \"lightbox__img--is-svg\": src.endsWith(\".svg\"),\n            })}\n            src={src}\n            alt={alt}\n            style={{ opacity: !isLoaded ? 0 : 1, transition: \"opacity 1s\" }}\n        />\n    )\n}\n\nexport const Lightbox = ({\n    onClose,\n    imgSrc,\n    imgFilename,\n    width,\n    height,\n    alt,\n    hideDownload,\n}: {\n    onClose: () => void\n    imgSrc: string\n    imgFilename?: string\n    width: number\n    height: number\n    alt?: string\n    // With CF Images, the filename is not the last part of the URL\n    // so we need to pass it separately\n    hideDownload?: boolean\n}) => {\n    const [isLoaded, setIsLoaded] = useState(false)\n    const contentRef = useRef<HTMLDivElement>(null)\n\n    const handleDownload = useCallback(async () => {\n        const response = await fetch(imgSrc)\n        const blob = await response.blob()\n        const filename = imgFilename || imgSrc.split(\"/\").pop() || \"image\"\n        triggerDownloadFromBlob(filename, blob)\n    }, [imgFilename, imgSrc])\n\n    const onContentClick = useCallback(\n        (e: React.MouseEvent) => {\n            if (e.target === contentRef.current) {\n                onClose()\n            }\n        },\n        [onClose]\n    )\n\n    useTriggerOnEscape(onClose)\n\n    return (\n        <BodyPortal containerClassName=\"lightbox\">\n            <div className=\"container\">\n                {!isLoaded && <LoadingIndicator color=\"#ccc\" />}\n                <TransformWrapper\n                    doubleClick={{ mode: \"reset\" }}\n                    smooth={false}\n                >\n                    {({ zoomIn, zoomOut, resetTransform }) => (\n                        <>\n                            <div\n                                className=\"content\"\n                                ref={contentRef}\n                                onClick={onContentClick}\n                            >\n                                <TransformComponent>\n                                    <LightboxImage\n                                        width={width}\n                                        height={height}\n                                        src={imgSrc}\n                                        alt={alt}\n                                        isLoaded={isLoaded}\n                                        setIsLoaded={setIsLoaded}\n                                    />\n                                </TransformComponent>\n                            </div>\n                            <div className=\"tools\">\n                                {isLoaded && (\n                                    <>\n                                        <button\n                                            aria-label=\"Zoom in\"\n                                            onClick={() => zoomIn()}\n                                        >\n                                            <FontAwesomeIcon\n                                                icon={faSearchPlus}\n                                            />\n                                        </button>\n                                        <button\n                                            aria-label=\"Zoom out\"\n                                            onClick={() => zoomOut()}\n                                        >\n                                            <FontAwesomeIcon\n                                                icon={faSearchMinus}\n                                            />\n                                        </button>\n                                        <button\n                                            aria-label=\"Reset zoom\"\n                                            onClick={() => resetTransform()}\n                                        >\n                                            <FontAwesomeIcon\n                                                icon={faCompress}\n                                            />\n                                        </button>\n                                        {!hideDownload && (\n                                            <button\n                                                onClick={handleDownload}\n                                                aria-label=\"Download high resolution image\"\n                                            >\n                                                <FontAwesomeIcon\n                                                    icon={faDownload}\n                                                />\n                                            </button>\n                                        )}\n                                    </>\n                                )}\n                                <button aria-label=\"Close\" onClick={onClose}>\n                                    <FontAwesomeIcon icon={faXmark} />\n                                </button>\n                            </div>\n                        </>\n                    )}\n                </TransformWrapper>\n            </div>\n        </BodyPortal>\n    )\n}\n","import cx from \"clsx\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faDownload } from \"@fortawesome/free-solid-svg-icons\"\n\ninterface FloatingDownloadButtonProps {\n    label: string\n    onClick: () => void\n    containerClassName?: string\n}\n\nexport function FloatingDownloadButton({\n    label,\n    onClick,\n    containerClassName,\n}: FloatingDownloadButtonProps) {\n    return (\n        <div\n            className={cx(\n                \"article-block__image-download-button-container\",\n                containerClassName\n            )}\n        >\n            <button\n                aria-label={label}\n                className=\"article-block__image-download-button\"\n                onClick={(event) => {\n                    event.preventDefault()\n                    onClick()\n                }}\n            >\n                <div className=\"article-block__image-download-button-background-layer\">\n                    <FontAwesomeIcon\n                        icon={faDownload}\n                        className=\"article-block__image-download-button-icon\"\n                    />\n\n                    <span className=\"article-block__image-download-button-text\">\n                        {label}\n                    </span>\n                </div>\n            </button>\n        </div>\n    )\n}\n","import { useCallback, useState } from \"react\"\nimport {\n    AssetMap,\n    generateSourceProps,\n    ImageMetadata,\n    readFromAssetMap,\n    triggerDownloadFromBlob,\n} from \"@ourworldindata/utils\"\nimport cx from \"clsx\"\nimport { CLOUDFLARE_IMAGES_URL } from \"../../../settings/clientSettings.mjs\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\nimport { useImage } from \"../utils.js\"\nimport { BlockErrorFallback } from \"./BlockErrorBoundary.js\"\nimport { SMALL_BREAKPOINT_MEDIA_QUERY } from \"../../SiteConstants.js\"\nimport { useMediaQuery } from \"usehooks-ts\"\nimport { Container } from \"./layout.js\"\nimport { Lightbox } from \"../../Lightbox.js\"\nimport { FloatingDownloadButton } from \"./FloatingDownloadButton.js\"\n\n// generates rules that tell the browser:\n// below the breakpoint (default 960px), the image will be 95vw wide\n// above it, the image will be (at maximum) some fraction of 1280px\nconst generateResponsiveSizes = (\n    numberOfColumns: number,\n    breakpoint: number = 960\n): string =>\n    `(max-width: ${breakpoint}px) 95vw, (min-width: ${breakpoint}px) ${Math.floor(\n        1280 * (numberOfColumns / 12)\n    )}px`\n\nconst gridSpan2 = generateResponsiveSizes(2)\nconst gridSpan3Sm = generateResponsiveSizes(3, 768)\nconst gridSpan5 = generateResponsiveSizes(5)\nconst gridSpan6 = generateResponsiveSizes(6)\nconst gridSpan7 = generateResponsiveSizes(7)\nconst gridSpan8 = generateResponsiveSizes(8)\nconst gridSpan12 = generateResponsiveSizes(12)\n\nexport type ImageParentContainer =\n    | Exclude<Container, \"sticky-right-left-heading-column\">\n    | \"author-byline\"\n    | \"thumbnail\"\n    | \"full-width\"\n    | \"person\"\n    | \"latest-article\"\n    | \"latest-data-insight\"\n    | \"latest-data-insight-expanded\"\n    | \"chart-rows\"\n    | \"pull-chart\"\n    | \"bespoke-component--narrow\"\n    | \"bespoke-component--wide\"\n    | \"bespoke-component--widest\"\n\nconst containerSizes: Record<ImageParentContainer, string> = {\n    [\"default\"]: gridSpan8,\n    [\"sticky-right-left-column\"]: gridSpan5,\n    [\"sticky-right-right-column\"]: gridSpan7,\n    [\"sticky-left-left-column\"]: gridSpan7,\n    [\"sticky-left-right-column\"]: gridSpan5,\n    [\"side-by-side\"]: gridSpan6,\n    [\"thumbnail\"]: \"350px\",\n    [\"datapage\"]: gridSpan6,\n    [\"data-insight\"]: \"100%\",\n    [\"full-width\"]: \"100vw\",\n    [\"key-insight\"]: gridSpan5,\n    [\"key-insight-asset\"]: gridSpan7,\n    [\"about-page\"]: gridSpan8,\n    [\"author-byline\"]: \"48px\",\n    [\"author-header\"]: gridSpan2,\n    [\"person\"]: gridSpan2,\n    [\"latest-article\"]: gridSpan3Sm,\n    [\"latest-data-insight\"]: gridSpan5,\n    // Full width of the in-place data insight card on /latest (6 columns).\n    [\"latest-data-insight-expanded\"]: gridSpan6,\n    [\"latest-announcement\"]: gridSpan6,\n    [\"chart-rows\"]: gridSpan3Sm,\n    [\"pull-chart\"]: gridSpan3Sm,\n    [\"bespoke-component--narrow\"]: gridSpan6,\n    [\"bespoke-component--wide\"]: gridSpan8,\n    [\"bespoke-component--widest\"]: gridSpan12,\n}\n\nexport const LIGHTBOX_IMAGE_CLASS = \"lightbox-image\"\n\nfunction makeSrc(image: ImageMetadata, assetMap?: AssetMap) {\n    if (!image.cloudflareId) {\n        throw new Error(\"Image has no cloudflareId\")\n    }\n    return readFromAssetMap(assetMap, {\n        path: image.filename,\n        fallback: `${CLOUDFLARE_IMAGES_URL}/${image.cloudflareId}/w=${image.originalWidth}`,\n    })\n}\n\nexport default function Image(props: {\n    filename?: string\n    smallFilename?: string\n    alt?: string\n    hasOutline?: boolean\n    className?: string\n    containerType?: ImageParentContainer\n    shouldLightbox?: boolean\n    shouldHideDownloadButton?: boolean\n    preferSmallFilename?: boolean\n    // Manually-passed image data (for StaticViz)\n    imageData?: ImageMetadata\n    smallImageData?: ImageMetadata\n}) {\n    const {\n        filename,\n        smallFilename,\n        hasOutline,\n        containerType = \"default\",\n        shouldLightbox = true,\n        shouldHideDownloadButton = false,\n        preferSmallFilename,\n        imageData,\n        smallImageData,\n    } = props\n\n    const className = cx(\"image\", props.className, {\n        \"image--has-outline\": hasOutline,\n    })\n\n    // Whether we should show the lightbox and a download button\n    const isInteractive = shouldLightbox && containerType !== \"thumbnail\"\n\n    const { archiveContext, isPreviewing } = useDocumentContext()\n    const isOnArchivalPage = archiveContext?.type === \"archive-page\"\n    const assetMap = isOnArchivalPage\n        ? archiveContext?.assets?.runtime\n        : undefined\n    const isSmall = useMediaQuery(SMALL_BREAKPOINT_MEDIA_QUERY)\n\n    // Always call hooks unconditionally, then choose which data to use\n    const imageFromHook = useImage(filename)\n    const smallImageFromHook = useImage(smallFilename)\n\n    // Use manually-passed image data if provided, otherwise use filename-based lookup\n    const image = imageData || imageFromHook\n    const smallImage = smallImageData || smallImageFromHook\n    const activeImage =\n        (isSmall || preferSmallFilename) && smallImage ? smallImage : image\n    const [isLightboxOpen, setIsLightboxOpen] = useState(false)\n\n    const openLightbox = useCallback(() => {\n        if (isInteractive) {\n            setIsLightboxOpen(true)\n        }\n    }, [isInteractive])\n\n    const renderImageError = (name: string) => (\n        <BlockErrorFallback\n            className={className}\n            error={{\n                name: \"Image error\",\n                message: `Image with filename \"${name}\" not found. This block will not render when the page is baked.`,\n            }}\n        />\n    )\n\n    const handleDownload = useCallback(async () => {\n        if (!activeImage) return\n        const { filename } = activeImage\n        const src = makeSrc(activeImage, assetMap)\n        if (src && filename) {\n            const response = await fetch(src)\n            const blob = await response.blob()\n            triggerDownloadFromBlob(filename, blob)\n        }\n    }, [activeImage, assetMap])\n\n    if (!activeImage || !activeImage.cloudflareId) {\n        if (isPreviewing) {\n            return renderImageError(filename || \"unknown\")\n        }\n        // Don't render anything if we're not previewing (i.e. a bake) and the image is not found\n        return null\n    }\n\n    const alt = props.alt ?? activeImage.defaultAlt ?? undefined\n\n    const imageSrc = makeSrc(activeImage, assetMap)\n    const sourceProps = generateSourceProps(\n        smallImage,\n        activeImage,\n        CLOUDFLARE_IMAGES_URL,\n        assetMap\n    )\n\n    const downloadButton =\n        isInteractive && !shouldHideDownloadButton ? (\n            <FloatingDownloadButton\n                label=\"Download\"\n                onClick={() => handleDownload()}\n            />\n        ) : null\n\n    return (\n        <div className={className}>\n            <picture onClick={openLightbox}>\n                {sourceProps.map((props, i) => (\n                    <source\n                        key={i}\n                        {...props}\n                        sizes={\n                            containerSizes[containerType] ??\n                            containerSizes.default\n                        }\n                    />\n                ))}\n                <img\n                    src={imageSrc}\n                    alt={alt}\n                    className={isInteractive ? LIGHTBOX_IMAGE_CLASS : undefined}\n                    loading=\"lazy\"\n                    // There's no way of knowing in advance whether we'll be showing the image or smallImage - we just have to choose one\n                    // I went with image, as we currently only use smallImage for data insights\n                    width={activeImage.originalWidth ?? undefined}\n                    height={activeImage.originalHeight ?? undefined}\n                />\n            </picture>\n            {downloadButton}\n            {isLightboxOpen && (\n                <Lightbox\n                    imgSrc={imageSrc}\n                    onClose={() => setIsLightboxOpen(false)}\n                    imgFilename={activeImage.filename}\n                    width={activeImage.originalWidth}\n                    height={activeImage.originalHeight}\n                    alt={alt}\n                    hideDownload={shouldHideDownloadButton}\n                />\n            )}\n        </div>\n    )\n}\n","import { getCanonicalUrl } from \"@ourworldindata/components\"\nimport { OwidGdocType } from \"@ourworldindata/types\"\nimport { getAuthorTeamAnchorUrl, useLinkedAuthor } from \"../utils.js\"\nimport Image from \"./Image.js\"\nimport { IS_ARCHIVE } from \"../../../settings/clientSettings.mjs\"\nimport { PROD_URL } from \"../../SiteConstants.js\"\n\nconst BASE_URL = IS_ARCHIVE ? PROD_URL : \"\"\n\nexport default function LinkedAuthor({\n    className,\n    name,\n    includeImage,\n    role,\n}: {\n    className?: string\n    name: string\n    includeImage?: boolean\n    role?: string\n}) {\n    const author = useLinkedAuthor(name)\n    const image =\n        includeImage && author.featuredImage ? (\n            <Image\n                className=\"linked-author-image\"\n                filename={author.featuredImage}\n                alt={author.name}\n                containerType=\"author-byline\"\n                shouldLightbox={false}\n            />\n        ) : undefined\n\n    const path = author.slug\n        ? getCanonicalUrl(BASE_URL, {\n              slug: author.slug,\n              content: { type: OwidGdocType.Author },\n          })\n        : getAuthorTeamAnchorUrl(author.name, BASE_URL)\n    return (\n        <span>\n            <a className={className} href={path}>\n                {image}\n                {author.name}\n            </a>\n            {role && ` (${role})`}\n        </span>\n    )\n}\n","import { Fragment, type ReactNode } from \"react\"\nimport { CREDITS_ID } from \"@ourworldindata/utils\"\nimport LinkedAuthor from \"./LinkedAuthor.js\"\n\nexport const Byline = ({\n    authors,\n    authorRoles,\n    contributors = [],\n    prefix = \"By \",\n}: {\n    authors: string[]\n    authorRoles?: Record<string, string>\n    contributors?: string[]\n    prefix?: ReactNode\n}) => {\n    const items: { key: string; node: ReactNode }[] = authors.map((name) => ({\n        key: name,\n        node: <LinkedAuthor name={name} role={authorRoles?.[name]} />,\n    }))\n\n    if (contributors.length > 0)\n        items.push({\n            key: CREDITS_ID,\n            node: (\n                <a href={`#${CREDITS_ID}`}>\n                    {contributors.length}{\" \"}\n                    {contributors.length === 1 ? \"contributor\" : \"contributors\"}\n                </a>\n            ),\n        })\n\n    return (\n        <>\n            {prefix}\n            {items.map(({ key, node }, index) => {\n                const isLast = index === items.length - 1\n                const isSecondToLast = index === items.length - 2\n                return (\n                    <Fragment key={key}>\n                        {node}\n                        {/* Use Oxford comma when there are more than two items. */}\n                        {!isLast && items.length > 2 && \", \"}\n                        {isSecondToLast && items.length > 1 && \" and \"}\n                    </Fragment>\n                )\n            })}\n        </>\n    )\n}\n","import { EnrichedBlockCallout } from \"@ourworldindata/types\"\nimport { faInfoCircle } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { ArticleBlocks } from \"./ArticleBlocks.js\"\n\nconst iconMap = {\n    info: faInfoCircle,\n}\n\nexport default function Callout({\n    className,\n    block,\n    shouldRenderLinks = true,\n}: {\n    className?: string\n    block: EnrichedBlockCallout\n    shouldRenderLinks?: boolean\n}) {\n    const icon = block.icon ? iconMap[block.icon] : null\n    return (\n        <div className={className}>\n            {block.title ? (\n                <h4 className=\"callout-heading\">\n                    {icon && (\n                        <FontAwesomeIcon className=\"callout-icon\" icon={icon} />\n                    )}\n                    {block.title}\n                </h4>\n            ) : null}\n            <ArticleBlocks\n                blocks={block.text}\n                shouldRenderLinks={shouldRenderLinks}\n            />\n        </div>\n    )\n}\n","import { useState } from \"react\"\nimport {\n    EXPLORER_DYNAMIC_THUMBNAIL_URL,\n    GRAPHER_DYNAMIC_THUMBNAIL_URL,\n} from \"../../../settings/clientSettings.mjs\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faHeartBroken } from \"@fortawesome/free-solid-svg-icons\"\n\ninterface ChartPreviewProps {\n    chartSlug: string\n    queryString?: string\n    chartType?: \"chart\" | \"explorer\"\n}\n\nexport function ChartPreview({\n    chartSlug,\n    queryString = \"\",\n    chartType,\n}: ChartPreviewProps) {\n    const [imgLoaded, setImgLoaded] = useState(false)\n    const [imgError, setImgError] = useState(false)\n    const baseUrl =\n        chartType === \"explorer\"\n            ? EXPLORER_DYNAMIC_THUMBNAIL_URL\n            : GRAPHER_DYNAMIC_THUMBNAIL_URL\n\n    const thumbnailUrl = `${baseUrl}/${chartSlug}.png${queryString}`\n\n    return (\n        <div className=\"chart-preview\">\n            {imgError ? (\n                <div className=\"chart-preview-error\">\n                    <FontAwesomeIcon icon={faHeartBroken} />\n                    Preview unavailable\n                </div>\n            ) : (\n                <img\n                    src={thumbnailUrl}\n                    alt=\"Chart preview\"\n                    style={{\n                        display: imgLoaded ? \"block\" : \"none\",\n                    }}\n                    onLoad={() => setImgLoaded(true)}\n                    onError={() => setImgError(true)}\n                />\n            )}\n            {!imgLoaded && !imgError && (\n                <div className=\"chart-preview-loading\">\n                    Loading preview&hellip;\n                </div>\n            )}\n        </div>\n    )\n}\n","import { getLinkType } from \"@ourworldindata/components\"\nimport { SpanLink } from \"@ourworldindata/types\"\nimport { useLinkedDocument, useLinkedChart } from \"../utils.js\"\nimport { Url } from \"@ourworldindata/utils\"\nimport Tippy from \"@tippyjs/react\"\nimport SpanElements from \"./SpanElements.js\"\nimport { ChartPreview } from \"./ChartPreview.js\"\nimport { SiteAnalytics } from \"../../SiteAnalytics.js\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faChartLine } from \"@fortawesome/free-solid-svg-icons\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\n\nconst analytics = new SiteAnalytics()\n\nexport default function LinkedA({ span }: { span: SpanLink }) {\n    const linkType = getLinkType(span.url)\n    const { archiveContext, isPreviewing } = useDocumentContext()\n    const isOnArchivalPage = archiveContext?.type === \"archive-page\"\n    const { linkedDocument, errorMessage } = useLinkedDocument(span.url)\n    const { linkedChart } = useLinkedChart(span.url)\n\n    if (linkType === \"url\") {\n        return (\n            <a href={span.url} className=\"span-link\">\n                <SpanElements spans={span.children} />\n            </a>\n        )\n    }\n    if (linkedChart) {\n        const url = Url.fromURL(linkedChart.resolvedUrl)\n        const chartSlug = url.slug || \"\"\n        const queryString = url.queryStr\n\n        const chartLink = (\n            <a\n                href={linkedChart.resolvedUrl}\n                className=\"span-link span-linked-chart\"\n            >\n                <SpanElements spans={span.children} />\n                <FontAwesomeIcon\n                    className=\"span-linked-chart-icon\"\n                    icon={faChartLine}\n                />\n            </a>\n        )\n\n        if (isOnArchivalPage) {\n            return chartLink\n        }\n\n        return (\n            <Tippy\n                content={\n                    <ChartPreview\n                        chartType={url.isExplorer ? \"explorer\" : \"chart\"}\n                        chartSlug={chartSlug}\n                        queryString={queryString}\n                    />\n                }\n                onShow={() =>\n                    analytics.logChartPreviewMouseover(linkedChart.resolvedUrl)\n                }\n                delay={[300, 0]}\n                placement=\"top\"\n                maxWidth={512}\n                theme=\"light\"\n                arrow={false}\n                touch={false}\n            >\n                {chartLink}\n            </Tippy>\n        )\n    }\n    if (linkedDocument && linkedDocument.published && linkedDocument.url) {\n        return (\n            <a href={linkedDocument.url} className=\"span-link\">\n                <SpanElements spans={span.children} />\n            </a>\n        )\n    }\n    if (errorMessage && isPreviewing) {\n        return (\n            <span className=\"span-link--error\" title={errorMessage}>\n                <SpanElements spans={span.children} />\n            </span>\n        )\n    }\n    return <SpanElements spans={span.children} />\n}\n","import { SpanRef } from \"@ourworldindata/types\"\nimport { Tippy } from \"@ourworldindata/utils\"\nimport { useDocumentContext } from \"./gdocs/DocumentContext.js\"\nimport ArticleBlock from \"./gdocs/components/ArticleBlock.js\"\nimport SpanElements from \"./gdocs/components/SpanElements.js\"\n\nexport const Footnote = ({ span }: { span: SpanRef }) => {\n    const { footnotes } = useDocumentContext()\n    const footnote = Object.values(footnotes ?? {}).find(\n        (ref) => span.url === `#note-${ref.index + 1}`\n    )\n    const reference = (\n        <a href={span.url} className=\"ref\">\n            <SpanElements spans={span.children} />\n        </a>\n    )\n\n    if (!footnote) return reference\n\n    const onEvent = (_instance: unknown, event: Event): void => {\n        if (event.type === \"click\") event.preventDefault()\n    }\n\n    return (\n        <Tippy\n            appendTo={() => document.body}\n            content={\n                <div>\n                    {footnote.content.map((block, i) => (\n                        <ArticleBlock key={i} b={block} />\n                    ))}\n                </div>\n            }\n            interactive\n            interactiveDebounce={50}\n            placement=\"bottom\"\n            theme=\"owid-footnote\"\n            trigger=\"mouseenter focus click\"\n            onTrigger={onEvent}\n            onUntrigger={onEvent}\n        >\n            {reference}\n        </Tippy>\n    )\n}\n","import { Span, SpanCallout } from \"@ourworldindata/types\"\nimport * as React from \"react\"\nimport { match } from \"ts-pattern\"\nimport LinkedA from \"./LinkedA.js\"\nimport SpanElements from \"./SpanElements.js\"\nimport { useGuidedChartLinkHandler } from \"@ourworldindata/grapher\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faEye } from \"@fortawesome/free-solid-svg-icons\"\nimport { spansToUnformattedPlainText } from \"@ourworldindata/utils\"\nimport cx from \"clsx\"\nimport { Footnote } from \"../../Footnote.js\"\nimport { useCalloutValue } from \"../utils.js\"\nimport { useHasHydrated } from \"../../hooks.js\"\n\nfunction SpanCalloutElement({\n    span,\n}: {\n    span: SpanCallout\n}): React.ReactElement {\n    const value = useCalloutValue(span.functionName, span.parameters)\n    return value ? <span className=\"span-callout\">{value}</span> : <></>\n}\n\nexport default function SpanElement({\n    span,\n    shouldRenderLinks = true,\n}: {\n    span: Span\n    shouldRenderLinks?: boolean\n}): React.ReactElement {\n    const handleGuidedChartLinkClick = useGuidedChartLinkHandler()\n    const hasHydrated = useHasHydrated()\n\n    return match(span)\n        .with({ spanType: \"span-simple-text\" }, (span) => (\n            <span\n                // A fix for the legacy way we did CTAs for data insights\n                // If/once we've migrated them all to use the {.cta} component, this won't be necessary\n                // TODO: https://github.com/owid/owid-grapher/issues/5437\n                className={cx({ \"span-plain-arrow\": span.text.trim() === \"→\" })}\n            >\n                {span.text}\n            </span>\n        ))\n        .with({ spanType: \"span-link\" }, (span) =>\n            shouldRenderLinks ? (\n                <LinkedA span={span} />\n            ) : (\n                <span>\n                    <SpanElements\n                        spans={span.children}\n                        shouldRenderLinks={shouldRenderLinks}\n                    />\n                </span>\n            )\n        )\n        .with({ spanType: \"span-ref\" }, (span) =>\n            shouldRenderLinks ? (\n                <Footnote span={span} />\n            ) : (\n                <span className=\"ref\">\n                    <SpanElements\n                        spans={span.children}\n                        shouldRenderLinks={shouldRenderLinks}\n                    />\n                </span>\n            )\n        )\n        .with({ spanType: \"span-guided-chart-link\" }, (span) => {\n            if (!shouldRenderLinks) {\n                return (\n                    <span className=\"guided-chart-link\">\n                        <SpanElements\n                            spans={span.children}\n                            shouldRenderLinks={shouldRenderLinks}\n                        />\n                    </span>\n                )\n            }\n\n            const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n                e.preventDefault()\n                if (handleGuidedChartLinkClick) {\n                    handleGuidedChartLinkClick(span.url)\n                }\n            }\n\n            return (\n                <a\n                    className=\"guided-chart-link\"\n                    href={span.url}\n                    aria-label={\n                        hasHydrated\n                            ? `\"${spansToUnformattedPlainText(span.children)}\". Click to set this section's chart to this view.`\n                            : undefined\n                    }\n                    onClick={handleClick}\n                >\n                    <FontAwesomeIcon icon={faEye} />\n                    <SpanElements\n                        spans={span.children}\n                        shouldRenderLinks={shouldRenderLinks}\n                    />\n                </a>\n            )\n        })\n        .with({ spanType: \"span-dod\" }, (span) => (\n            <span className=\"dod-span\" data-id={`${span.id}`} tabIndex={0}>\n                <SpanElements\n                    spans={span.children}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            </span>\n        ))\n        .with({ spanType: \"span-newline\" }, () => <br />)\n        .with({ spanType: \"span-italic\" }, (span) => (\n            <em>\n                <SpanElements\n                    spans={span.children}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            </em>\n        ))\n        .with({ spanType: \"span-bold\" }, (span) => (\n            <strong>\n                <SpanElements\n                    spans={span.children}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            </strong>\n        ))\n        .with({ spanType: \"span-underline\" }, (span) => (\n            <u>\n                <SpanElements\n                    spans={span.children}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            </u>\n        ))\n        .with({ spanType: \"span-subscript\" }, (span) => (\n            <sub>\n                <SpanElements\n                    spans={span.children}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            </sub>\n        ))\n        .with({ spanType: \"span-superscript\" }, (span) => (\n            <sup>\n                <SpanElements\n                    spans={span.children}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            </sup>\n        ))\n        .with({ spanType: \"span-quote\" }, (span) => (\n            <q>\n                <SpanElements\n                    spans={span.children}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            </q>\n        ))\n        .with({ spanType: \"span-fallback\" }, (span) => (\n            <span>\n                <SpanElements\n                    spans={span.children}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            </span>\n        ))\n        .with({ spanType: \"span-callout\" }, (span) => (\n            <SpanCalloutElement span={span} />\n        ))\n        .exhaustive()\n}\n","import { Span } from \"@ourworldindata/types\"\nimport SpanElement from \"./SpanElement.js\"\n\nexport default function SpanElements({\n    spans,\n    shouldRenderLinks = true,\n}: {\n    spans: Span[]\n    shouldRenderLinks?: boolean\n}) {\n    return (\n        <>\n            {spans.map((span, index) => (\n                <SpanElement\n                    key={index}\n                    span={span}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            ))}\n        </>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport {\n    getVariableMetadataRoute,\n    migrateGrapherConfigToLatestVersion,\n} from \"@ourworldindata/grapher\"\nimport {\n    AssetMap,\n    GrapherInterface,\n    MultiDimDataPageConfigEnriched,\n    OwidVariableWithSourceAndDimension,\n} from \"@ourworldindata/types\"\nimport {\n    fetchJson,\n    fetchWithRetry,\n    readFromAssetMap,\n} from \"@ourworldindata/utils\"\nimport {\n    DATA_API_URL,\n    MULTI_DIM_DYNAMIC_CONFIG_URL,\n} from \"../../settings/clientSettings.mjs\"\n\nexport const cachedGetVariableMetadata = _.memoize(\n    async (\n        variableId: number,\n        isPreviewing: boolean,\n        assetMap?: AssetMap\n    ): Promise<OwidVariableWithSourceAndDimension> => {\n        const response = await fetchWithRetry(\n            getVariableMetadataRoute(DATA_API_URL, variableId, {\n                assetMap,\n                noCache: isPreviewing,\n            })\n        )\n        return await response.json()\n    },\n    (variableId, isPreviewing) => `${variableId}-${isPreviewing}`\n)\n\nexport const cachedGetGrapherConfigByUuid = _.memoize(\n    async (\n        grapherConfigUuid: string,\n        isPreviewing: boolean,\n        assetMap?: AssetMap\n    ): Promise<GrapherInterface> => {\n        const configFileName = `${grapherConfigUuid}.config.json`\n        const fallbackUrl = `/grapher/by-uuid/${configFileName}${isPreviewing ? \"?nocache\" : \"\"}`\n        const url = readFromAssetMap(assetMap, {\n            path: configFileName,\n            fallback: fallbackUrl,\n        })\n        const response = await fetchWithRetry(url)\n        return migrateGrapherConfigToLatestVersion(await response.json())\n    },\n    (grapherConfigUuid, isPreviewing) => `${grapherConfigUuid}-${isPreviewing}`\n)\n\nexport async function getMultiDimConfigBySlug(\n    slug: string,\n    isPreviewing: boolean\n): Promise<MultiDimDataPageConfigEnriched> {\n    const url = `${MULTI_DIM_DYNAMIC_CONFIG_URL}/${slug}.json${isPreviewing ? \"?nocache\" : \"\"}`\n    return fetchJson<MultiDimDataPageConfigEnriched>(url)\n}\n","import * as _ from \"lodash-es\"\nimport { RefObject, useEffect, useMemo, useRef, useState } from \"react\"\n\nimport {\n    GrapherAnalytics,\n    GrapherProgrammaticInterface,\n} from \"@ourworldindata/grapher\"\nimport { MultiDimDimensionChoices } from \"@ourworldindata/types\"\nimport { MultiDimDataPageConfig } from \"@ourworldindata/utils\"\nimport { useQuery } from \"@tanstack/react-query\"\nimport {\n    ADMIN_BASE_URL,\n    BAKED_GRAPHER_URL,\n    DATA_API_URL,\n} from \"../../settings/clientSettings.mjs\"\nimport { getMultiDimConfigBySlug } from \"./api.js\"\n\nexport const analytics = new GrapherAnalytics()\n\n/**\n * Used to create a base grapher config for an mdim shared among all views.\n * @param additionalConfig - Additional config to merge with the base config.\n */\nexport const useBaseGrapherConfig = (\n    additionalConfig?: Partial<GrapherProgrammaticInterface>\n) => {\n    return useMemo(() => {\n        return {\n            bakedGrapherURL: BAKED_GRAPHER_URL,\n            adminBaseUrl: ADMIN_BASE_URL,\n            dataApiUrl: DATA_API_URL,\n            canHideExternalControlsInEmbed: true,\n            // Iframe embeds are 600px tall when external controls are hidden.\n            // Multi-dim controls need another 74px, so the embed code we\n            // recommend for multi-dims with controls is 674px tall.\n            recommendedIframeEmbedHeight: 674,\n            ...additionalConfig,\n        }\n    }, [additionalConfig])\n}\n\nexport function useMultiDimConfig({\n    slug,\n    isPreviewing,\n    enabled = true,\n}: {\n    slug?: string\n    isPreviewing?: boolean\n    enabled?: boolean\n}) {\n    return useQuery({\n        queryKey: [\"multi-dim-config\", slug, Boolean(isPreviewing)],\n        queryFn: () => {\n            if (!slug) {\n                throw new Error(\"Slug is required\")\n            }\n            return getMultiDimConfigBySlug(slug, Boolean(isPreviewing))\n        },\n        enabled: Boolean(slug) && enabled,\n        staleTime: Infinity,\n    })\n}\n\nexport function useMultiDimAnalytics(\n    slug: string | null,\n    config: MultiDimDataPageConfig,\n    settings: MultiDimDimensionChoices,\n    containerRef?: RefObject<HTMLElement | null>\n) {\n    // Settings might be a different object with the same properties, so we\n    // can't rely on React's equality check.\n    const oldSettingsRef = useRef<MultiDimDimensionChoices | null>(null)\n    const [hasBeenVisible, setHasBeenVisible] = useState(false)\n\n    useEffect(() => {\n        const container = containerRef?.current\n        if (!container || !(\"IntersectionObserver\" in window)) return undefined\n\n        const observer = new IntersectionObserver((entries) => {\n            entries.forEach((entry) => {\n                if (entry.isIntersecting) {\n                    setHasBeenVisible(true)\n                    observer.disconnect()\n                }\n            })\n        })\n        observer.observe(container)\n        return () => observer.disconnect()\n    }, [containerRef])\n\n    useEffect(() => {\n        // Log analytics event on page load and when the settings change, but\n        // only once the multi-dim has become visible. Without a container to\n        // observe, treat it as visible right away.\n        const isVisible =\n            hasBeenVisible ||\n            !containerRef ||\n            !(\"IntersectionObserver\" in window)\n        if (slug && isVisible && !_.isEqual(settings, oldSettingsRef.current)) {\n            const newView = config.findViewByDimensions(settings)\n            if (newView) {\n                analytics.logGrapherView(slug, {\n                    viewConfigId: newView.fullConfigId,\n                })\n            }\n            oldSettingsRef.current = { ...settings }\n        }\n    }, [config, containerRef, hasBeenVisible, slug, settings])\n}\n","import * as _ from \"lodash-es\"\nimport { useMemo } from \"react\"\n\nimport { MultiDimDimensionChoices } from \"@ourworldindata/types\"\nimport { MultiDimDataPageConfig } from \"@ourworldindata/utils\"\n\n/**\n * Hook that resolves partial settings to complete settings by filling in default values\n * for any missing dimensions.\n */\nexport function useResolvedSettings(\n    settings: MultiDimDimensionChoices,\n    dimensions: MultiDimDataPageConfig[\"dimensions\"]\n): MultiDimDimensionChoices {\n    return useMemo(\n        () =>\n            _.mapValues(\n                dimensions,\n                (dim) =>\n                    settings[dim.slug] ?? Object.values(dim.choices)[0].slug\n            ),\n        [settings, dimensions]\n    )\n}\n","import { faCaretDown } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport cx from \"clsx\"\nimport { useState } from \"react\"\nimport {\n    Select,\n    Button,\n    Popover,\n    ListBox,\n    ListBoxSection,\n    Header,\n    Collection,\n    ListBoxItem,\n    Text,\n} from \"react-aria-components\"\nimport * as _ from \"lodash-es\"\n\nimport { CloseButton, RadioButton } from \"@ourworldindata/components\"\nimport { Choice, DimensionEnriched } from \"@ourworldindata/types\"\n\nfunction DimensionItem({ choice }: { choice: Choice }) {\n    return (\n        <ListBoxItem\n            className=\"md-menu__radio-button\"\n            id={choice.slug}\n            textValue={choice.name}\n        >\n            {({ isSelected }) => (\n                <RadioButton\n                    checked={isSelected}\n                    onChange={_.noop}\n                    label={\n                        <>\n                            <Text className=\"md-label\" slot=\"label\">\n                                {choice.name}\n                            </Text>\n                            {choice.description && (\n                                <Text\n                                    className=\"md-description\"\n                                    slot=\"description\"\n                                >\n                                    {choice.description}\n                                </Text>\n                            )}\n                        </>\n                    }\n                />\n            )}\n        </ListBoxItem>\n    )\n}\n\nexport default function DimensionDropdown({\n    className,\n    dimension,\n    value,\n    onChange,\n    disabled,\n}: {\n    className?: string\n    dimension: DimensionEnriched\n    value: string\n    onChange: (value: string) => void\n    disabled?: boolean\n}) {\n    const [isOpen, setIsOpen] = useState(false)\n    const isDisabled = disabled || dimension.choices.length === 1\n    return (\n        <Select\n            className={cx(\"md-settings__dropdown\", className)}\n            isDisabled={isDisabled}\n            isOpen={isOpen}\n            onOpenChange={setIsOpen}\n            value={value}\n            onChange={(key) => {\n                if (typeof key === \"string\") onChange(key)\n            }}\n            aria-label={dimension.name}\n        >\n            <Button\n                className=\"md-settings__dropdown-toggle\"\n                data-track-note=\"multi-dim-choice-dropdown\"\n            >\n                <span className=\"md-settings__dropdown-label\">\n                    {dimension.name}\n                </span>\n                <span className=\"md-settings__dropdown-current-choice\">\n                    {dimension.choicesBySlug[value].name}\n                </span>\n                <div>\n                    {/* The div is neccesary to keep the icon `display: inline`,\n            so it aligns with the text correctly. */}\n                    <FontAwesomeIcon icon={faCaretDown} />\n                </div>\n            </Button>\n            <Popover\n                className=\"md-menu\"\n                // Avoid multiple of 4 to increase the chance the next option is\n                // partially visible when scrolling is required.\n                maxHeight={393}\n                placement=\"bottom start\"\n                offset={4}\n            >\n                <div className=\"md-menu__overlay-header\">\n                    <div>\n                        <h2 className=\"md-menu__overlay-header-title\">\n                            {dimension.name}\n                        </h2>\n                        {dimension.description && (\n                            <p className=\"md-menu__dimension-description\">\n                                {dimension.description}\n                            </p>\n                        )}\n                    </div>\n                    <CloseButton\n                        className=\"md-menu__overlay-header-close-button\"\n                        onClick={() => setIsOpen(false)}\n                    />\n                </div>\n                <ListBox>\n                    {Object.entries(dimension.choicesByGroup).map(\n                        ([groupLabel, groupChoices]) =>\n                            groupLabel !== \"undefined\" ? (\n                                <ListBoxSection\n                                    key={groupLabel}\n                                    className=\"md-menu__group\"\n                                >\n                                    <Header className=\"md-menu__group-label\">\n                                        {groupLabel}\n                                    </Header>\n                                    <Collection>\n                                        {groupChoices.map((choice) => (\n                                            <DimensionItem\n                                                key={choice.slug}\n                                                choice={choice}\n                                            />\n                                        ))}\n                                    </Collection>\n                                </ListBoxSection>\n                            ) : (\n                                groupChoices.map((choice) => (\n                                    <DimensionItem\n                                        key={choice.slug}\n                                        choice={choice}\n                                    />\n                                ))\n                            )\n                    )}\n                </ListBox>\n            </Popover>\n        </Select>\n    )\n}\n","import cx from \"clsx\"\nimport { faMinus, faPlus } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { forwardRef, useState } from \"react\"\n\nimport {\n    DimensionEnriched,\n    MultiDimDimensionChoices,\n} from \"@ourworldindata/types\"\nimport DimensionDropdown from \"./DimensionDropdown.js\"\n\nconst MultiDimDropdowns = forwardRef<\n    HTMLDivElement,\n    {\n        className?: string\n        availableSettings: Record<string, DimensionEnriched>\n        resolvedSettings: MultiDimDimensionChoices\n        onChange: (settings: MultiDimDimensionChoices) => void\n        collapsedCount: number\n        disabled?: boolean\n    }\n>(function MultiDimDropdowns(\n    {\n        className,\n        availableSettings,\n        resolvedSettings,\n        onChange,\n        collapsedCount,\n        disabled,\n    },\n    ref\n) {\n    const [isExpanded, setIsExpanded] = useState(false)\n    const dimensionsArray = Object.values(availableSettings)\n    const needsToggle = dimensionsArray.length > collapsedCount\n\n    return (\n        <div className={cx(\"md-dropdowns\", className)} ref={ref}>\n            {dimensionsArray.map((dim, index) => (\n                <DimensionDropdown\n                    key={dim.slug}\n                    className={cx({\n                        \"md-settings__dropdown-toggle--hidden\":\n                            !isExpanded && index >= collapsedCount,\n                    })}\n                    dimension={dim}\n                    value={resolvedSettings[dim.slug]}\n                    onChange={(value) => {\n                        onChange({\n                            ...resolvedSettings,\n                            [dim.slug]: value,\n                        })\n                    }}\n                    disabled={disabled}\n                />\n            ))}\n            {needsToggle && (\n                <button\n                    className=\"md-dropdowns__toggle\"\n                    onClick={() => setIsExpanded(!isExpanded)}\n                    type=\"button\"\n                    aria-expanded={isExpanded}\n                >\n                    <FontAwesomeIcon\n                        className=\"md-dropdowns__toggle-icon\"\n                        icon={isExpanded ? faMinus : faPlus}\n                        aria-hidden=\"true\"\n                    />\n                    <span className=\"md-dropdowns__toggle-text\">\n                        {isExpanded ? \"Show less\" : \"Show more\"}\n                    </span>\n                </button>\n            )}\n        </div>\n    )\n})\n\nexport default MultiDimDropdowns\n","import cx from \"clsx\"\nimport { useMemo, useState, useRef, useCallback } from \"react\"\nimport { useMediaQuery, useResizeObserver } from \"usehooks-ts\"\n\nimport { MultiDimDimensionChoices } from \"@ourworldindata/types\"\nimport { MultiDimDataPageConfig } from \"@ourworldindata/utils\"\nimport { SMALL_BREAKPOINT_MEDIA_QUERY } from \"../SiteConstants.js\"\nimport { useResolvedSettings } from \"./multiDimSettings.js\"\nimport MultiDimDropdowns from \"./MultiDimDropdowns.js\"\n\nexport default function MultiDimEmbedSettingsPanel({\n    className,\n    config,\n    settings,\n    onChange,\n}: {\n    className?: string\n    config: MultiDimDataPageConfig\n    settings: MultiDimDimensionChoices\n    onChange: (settings: MultiDimDimensionChoices) => void\n}) {\n    const { dimensions } = config\n    const resolvedSettings = useResolvedSettings(settings, dimensions)\n    const isSmallScreen = useMediaQuery(SMALL_BREAKPOINT_MEDIA_QUERY)\n    const containerRef = useRef<HTMLDivElement>(null)\n    const dropdownsRef = useRef<HTMLDivElement>(null)\n\n    const availableSettings = useMemo(() => {\n        return config.filterToAvailableChoices(resolvedSettings)\n            .dimensionsWithAvailableChoices\n    }, [resolvedSettings, config])\n\n    const dimensionsArray = useMemo(() => {\n        return Object.values(availableSettings)\n    }, [availableSettings])\n\n    const [collapsedCount, setCollapsedCount] = useState(dimensionsArray.length)\n\n    const calculateCollapsedCount = useCallback(() => {\n        if (isSmallScreen) {\n            const length = dimensionsArray.length\n            setCollapsedCount(length > 3 ? 2 : length)\n            return\n        }\n\n        const container = containerRef.current\n        const dropdownsContainer = dropdownsRef.current\n        if (!container || !dropdownsContainer) return\n\n        const containerWidth = container.offsetWidth\n        const containerPadding = 32 // 16px on each side\n        const buffer = 5 // For some reason the numbers don't add up precisely\n        const availableWidth = containerWidth - containerPadding - buffer\n        const gap = 8 // Gap between dropdowns (and also toggle button) as defined in CSS\n        const toggleButtonWidth = 90\n\n        const dropdowns = Array.from(\n            dropdownsContainer.querySelectorAll<HTMLDivElement>(\n                \".md-settings__dropdown\"\n            )\n        )\n\n        // First, try to fit all dropdowns without toggle button\n        let totalWidthAllDropdowns = 0\n        for (let i = 0; i < dropdowns.length; i++) {\n            const dropdownWidth = dropdowns[i].offsetWidth\n            totalWidthAllDropdowns += dropdownWidth\n            if (i > 0) totalWidthAllDropdowns += gap\n        }\n\n        let newCollapsedCount: number\n        if (totalWidthAllDropdowns <= availableWidth) {\n            // All dropdowns fit without toggle button\n            newCollapsedCount = dropdowns.length\n        } else {\n            // Not all dropdowns fit, so we need toggle button\n            // Try to fit as many as possible with toggle button space reserved\n            let totalWidth = 0\n            let fittingDropdowns = 0\n            const availableWidthWithToggle = availableWidth - toggleButtonWidth\n\n            for (const dropdown of dropdowns) {\n                // We always add the gap, because it exists also between the\n                // last dropdown and the toggle button.\n                const dropdownWidth = dropdown.offsetWidth + gap\n                const totalWidthWithThisDropdown = totalWidth + dropdownWidth\n                if (totalWidthWithThisDropdown <= availableWidthWithToggle) {\n                    totalWidth = totalWidthWithThisDropdown\n                    fittingDropdowns++\n                } else {\n                    break\n                }\n            }\n\n            // Ensure at least 1 dropdown is visible if there are any\n            newCollapsedCount = Math.max(1, fittingDropdowns)\n        }\n\n        setCollapsedCount(newCollapsedCount)\n    }, [dimensionsArray.length, isSmallScreen])\n\n    useResizeObserver({\n        ref: containerRef as React.RefObject<HTMLDivElement>,\n        onResize: calculateCollapsedCount,\n    })\n\n    return (\n        <div className={cx(\"md-embed-settings\", className)} ref={containerRef}>\n            <div className=\"h6-black-caps md-embed-settings__header\">\n                Configure the data\n            </div>\n            <MultiDimDropdowns\n                ref={dropdownsRef}\n                availableSettings={availableSettings}\n                resolvedSettings={resolvedSettings}\n                onChange={onChange}\n                collapsedCount={collapsedCount}\n            />\n        </div>\n    )\n}\n","import { runInAction } from \"mobx\"\nimport {\n    useCallback,\n    useContext,\n    useEffect,\n    useMemo,\n    useRef,\n    useState,\n} from \"react\"\nimport * as Sentry from \"@sentry/react\"\nimport {\n    getCachingInputTableFetcher,\n    Grapher,\n    GrapherProgrammaticInterface,\n    useMaybeGlobalGrapherStateRef,\n    GuidedChartContext,\n    loadCatalogData,\n    useElementBounds,\n} from \"@ourworldindata/grapher\"\nimport {\n    extractMultiDimChoicesFromSearchParams,\n    GRAPHER_TAB_QUERY_PARAMS,\n    GrapherQueryParams,\n    MultiDimDataPageConfig,\n    MultiDimDimensionChoices,\n} from \"@ourworldindata/utils\"\nimport { ArchiveContext } from \"@ourworldindata/types\"\nimport { cachedGetGrapherConfigByUuid } from \"./api.js\"\nimport MultiDimEmbedSettingsPanel from \"./MultiDimEmbedSettingsPanel.js\"\nimport { useBaseGrapherConfig, useMultiDimAnalytics } from \"./hooks.js\"\nimport {\n    BAKED_GRAPHER_URL,\n    CATALOG_URL,\n    DATA_API_URL,\n} from \"../../settings/clientSettings.mjs\"\n\nexport default function MultiDim({\n    config,\n    localGrapherConfig,\n    slug,\n    queryStr,\n    archiveContext,\n    isPreviewing,\n}: {\n    config: MultiDimDataPageConfig\n    localGrapherConfig?: GrapherProgrammaticInterface\n    slug: string | null\n    queryStr: string\n    archiveContext?: ArchiveContext\n    isPreviewing?: boolean\n}) {\n    const assetMap =\n        archiveContext?.type === \"archive-page\"\n            ? archiveContext.assets.runtime\n            : undefined\n    // A mutable object shared with the GrapherState: passed to it on mount and\n    // updated in the effect below\n    const manager = useRef(localGrapherConfig?.manager ?? {})\n    /* oxlint-disable react/refs */\n    const grapherStateRef = useMaybeGlobalGrapherStateRef({\n        manager: manager.current,\n        queryStr,\n        additionalDataLoaderFn: (catalogKey) =>\n            loadCatalogData(catalogKey, {\n                baseUrl: CATALOG_URL,\n                assetMap,\n            }),\n        archiveContext,\n        isConfigReady: false,\n    })\n    /* oxlint-enable react/refs */\n\n    const grapherDataLoader = useRef(\n        getCachingInputTableFetcher(DATA_API_URL, archiveContext, isPreviewing)\n    )\n    const grapherContainerRef = useRef<HTMLDivElement>(null)\n    const bounds = useElementBounds(grapherContainerRef)\n    const additionalConfig = useMemo(\n        () => ({ archiveContext, isEmbeddedInAnOwidPage: true }),\n        [archiveContext]\n    )\n    const baseGrapherConfig = useBaseGrapherConfig(additionalConfig)\n    const searchParams = useMemo(\n        () => new URLSearchParams(queryStr),\n        [queryStr]\n    )\n    const hasControls = searchParams.get(\"hideControls\") !== \"true\"\n\n    const [settings, setSettings] = useState(() => {\n        const choices = extractMultiDimChoicesFromSearchParams(\n            searchParams,\n            config\n        )\n        return config.filterToAvailableChoices(choices).selectedChoices\n    })\n    const [guidedQueryParams, setGuidedQueryParams] =\n        useState<GrapherQueryParams | null>(null)\n\n    const handleBaseSettingsChange = useCallback(\n        (settings: MultiDimDimensionChoices) => {\n            const { selectedChoices } =\n                config.filterToAvailableChoices(settings)\n            setSettings(selectedChoices)\n        },\n        [config]\n    )\n\n    const handleSettingsChange = useCallback(\n        (settings: MultiDimDimensionChoices) => {\n            handleBaseSettingsChange(settings)\n            setGuidedQueryParams(null)\n        },\n        [handleBaseSettingsChange]\n    )\n\n    const handleGuidedChartSettingsChange = useCallback(\n        (\n            settings: MultiDimDimensionChoices,\n            queryParams: GrapherQueryParams\n        ) => {\n            handleBaseSettingsChange(settings)\n            setGuidedQueryParams(queryParams)\n        },\n        [handleBaseSettingsChange]\n    )\n\n    useMultiDimAnalytics(slug, config, settings, grapherContainerRef)\n\n    // Register with GuidedChartContext for guided chart link support\n    const guidedChartContext = useContext(GuidedChartContext)\n    const hasRegistered = useRef(false)\n    useEffect(() => {\n        if (guidedChartContext?.registerMultiDim && !hasRegistered.current) {\n            guidedChartContext.registerMultiDim({\n                config,\n                onSettingsChange: handleGuidedChartSettingsChange,\n                grapherContainerRef: grapherContainerRef,\n            })\n            hasRegistered.current = true\n        }\n    }, [guidedChartContext, config, handleGuidedChartSettingsChange])\n\n    // NOTE (Martin): We used to use `grapherState.isDataReady` here to prevent\n    // an edge case race condition on a slow network from setting incorrect\n    // data. However, that caused flickering when switching between guided chart\n    // links, which was even worse and I didn't figure out how else to fix it\n    // than to remove the `grapherState.isDataReady` usage.\n    useEffect(() => {\n        // Prevent a race condition from setting incorrect data.\n        // https://react.dev/learn/synchronizing-with-effects#fetching-data\n        let ignoreFetchedData = false\n\n        const grapherState = grapherStateRef.current\n        if (!grapherState) return\n\n        const newView = config.findViewByDimensions(settings)\n        if (!newView) {\n            throw new Error(\n                `No view found for dimensions: ${JSON.stringify(settings)}`\n            )\n        }\n\n        const analyticsContext = {\n            slug: slug ?? undefined,\n            viewConfigId: newView.fullConfigId,\n        }\n        manager.current.analyticsContext = analyticsContext\n        manager.current.adminCreateNarrativeChartPath = `narrative-charts/create?type=multiDim&chartConfigId=${newView.fullConfigId}`\n        if (slug) manager.current.baseUrl = `${BAKED_GRAPHER_URL}/${slug}`\n\n        const isGuidedChartUpdate = guidedQueryParams !== null\n        // Guided chart links should not inherit query params from the\n        // previously selected view. Otherwise omitted params, such as\n        // `country`, can stick around after clicking a different guided link.\n        const queryParams = isGuidedChartUpdate\n            ? guidedQueryParams\n            : grapherState.changedParams\n        const newGrapherParams: GrapherQueryParams = {\n            ...queryParams,\n            ...settings,\n        }\n        // We want to preserve the grapher tab when switching between views,\n        // except when the switch happens via a guided chart link.\n        if (!isGuidedChartUpdate) {\n            // If the grapher has data, preserve the active tab in the new view,\n            // otherwise use the tab from the URL.\n            newGrapherParams.tab = grapherState.hasData\n                ? grapherState.mapGrapherTabToQueryParam(grapherState.activeTab)\n                : (searchParams.get(\"tab\") ?? undefined)\n        }\n\n        // reset map state if switching to a chart\n        if (newGrapherParams.tab !== GRAPHER_TAB_QUERY_PARAMS.map) {\n            newGrapherParams.globe = \"0\"\n            newGrapherParams.mapSelect = \"\"\n        }\n\n        const previousTab = grapherState.activeTab\n\n        cachedGetGrapherConfigByUuid(\n            newView.fullConfigId,\n            Boolean(isPreviewing),\n            assetMap\n        )\n            .then(async (viewGrapherConfig) => {\n                if (ignoreFetchedData) return\n                const grapherConfig = {\n                    ...viewGrapherConfig,\n                    ...baseGrapherConfig,\n                    ...localGrapherConfig,\n                }\n                if (slug) {\n                    grapherConfig.slug = slug // Needed for the URL used for sharing.\n                }\n                runInAction(() => {\n                    grapherState.setAuthoredVersion(grapherConfig)\n                    grapherState.reset()\n                    grapherState.updateFromObject(grapherConfig)\n                    grapherState.isConfigReady = true\n                    grapherState.populateFromQueryParams(newGrapherParams)\n                })\n\n                await grapherDataLoader\n                    .current(\n                        grapherConfig.dimensions ?? [],\n                        grapherConfig.selectedEntityColors\n                    )\n                    .then((table) => {\n                        if (table) {\n                            runInAction(() => {\n                                grapherState.inputTable = table\n                            })\n                        }\n                    })\n\n                // The below code needs to run after the data has been loaded, so that it has access\n                // to the table and its time range\n                runInAction(() => {\n                    // When switching between mdim views, we usually preserve the tab.\n                    // However, if the new chart doesn't support the previously selected tab,\n                    // Grapher automatically switches to a supported one. In such cases,\n                    // we call adjustStateForTab to make adjustments that ensure the new view\n                    // is sensible (e.g. updating the time selection when switching from a\n                    // single-time chart like a discrete bar chart to a multi-time chart like\n                    // a line chart).\n                    const currentTab = grapherState.activeTab\n                    if (previousTab !== currentTab)\n                        grapherState.adjustStateForTab(currentTab)\n                })\n            })\n            .catch(Sentry.captureException)\n        return () => {\n            ignoreFetchedData = true\n        }\n    }, [\n        assetMap,\n        config,\n        isPreviewing,\n        localGrapherConfig,\n        searchParams,\n        settings,\n        slug,\n        guidedQueryParams,\n        baseGrapherConfig,\n        manager,\n        grapherStateRef,\n    ])\n\n    useEffect(() => {\n        if (grapherStateRef.current) {\n            runInAction(() => {\n                grapherStateRef.current.externalBounds = bounds\n            })\n        }\n    }, [bounds, grapherStateRef])\n\n    return (\n        <div className=\"multi-dim-container full-width-on-mobile\">\n            {hasControls && (\n                <MultiDimEmbedSettingsPanel\n                    className=\"multi-dim-settings\"\n                    config={config}\n                    settings={settings}\n                    onChange={handleSettingsChange}\n                />\n            )}\n            <div\n                className=\"multi-dim-grapher-container\"\n                ref={grapherContainerRef}\n            >\n                <Grapher\n                    // oxlint-disable-next-line react/refs -- the MobX GrapherState is created once and never replaced\n                    grapherState={grapherStateRef.current}\n                    {...baseGrapherConfig}\n                />\n            </div>\n        </div>\n    )\n}\n","import { useIntersectionObserver, useIsClient } from \"usehooks-ts\"\nimport { GrapherProgrammaticInterface } from \"@ourworldindata/grapher\"\nimport {\n    GRAPHER_PREVIEW_CLASS,\n    HIDE_IF_JS_ENABLED_CLASSNAME,\n} from \"@ourworldindata/types\"\nimport { Url, MultiDimDataPageConfig } from \"@ourworldindata/utils\"\nimport GrapherImage from \"./GrapherImage.js\"\nimport { useMultiDimConfig } from \"./multiDim/hooks.js\"\nimport MultiDim from \"./multiDim/MultiDim.js\"\n\nexport function MultiDimEmbed({\n    url,\n    chartConfig,\n    isPreviewing,\n}: {\n    url: string\n    chartConfig: Partial<GrapherProgrammaticInterface>\n    isPreviewing?: boolean\n}) {\n    const isClient = useIsClient()\n    const { ref, isIntersecting: hasBeenVisible } = useIntersectionObserver({\n        rootMargin: \"400px\",\n        freezeOnceVisible: true,\n    })\n\n    const embedUrl = Url.fromURL(url)\n    const { queryStr, slug } = embedUrl\n    const {\n        data: config,\n        error,\n        isError,\n    } = useMultiDimConfig({\n        slug,\n        isPreviewing,\n        enabled: hasBeenVisible,\n    })\n\n    if (!slug) {\n        return <div>Error: No slug found in URL</div>\n    }\n\n    const shouldRenderMultiDim = isClient && hasBeenVisible && config\n\n    return (\n        <div className=\"multi-dim-embed\" ref={ref}>\n            {shouldRenderMultiDim ? (\n                <MultiDim\n                    slug={slug}\n                    config={MultiDimDataPageConfig.fromObject(config)}\n                    localGrapherConfig={chartConfig}\n                    queryStr={queryStr}\n                    isPreviewing={isPreviewing}\n                />\n            ) : (\n                <>\n                    <figure\n                        className={`${GRAPHER_PREVIEW_CLASS} GrapherWithFallback__fallback`}\n                        aria-hidden={isClient}\n                    >\n                        {!isClient && (\n                            <GrapherImage\n                                className={HIDE_IF_JS_ENABLED_CLASSNAME}\n                                url={url}\n                            />\n                        )}\n                    </figure>\n                    {isError ? <div>Error: {error.message}</div> : null}\n                </>\n            )}\n        </div>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport { useRef, useMemo, useContext, useEffect } from \"react\"\nimport { GuidedChartContext } from \"@ourworldindata/grapher\"\nimport { EnrichedBlockChart, Url } from \"@ourworldindata/utils\"\nimport { ChartConfigType, GRAPHER_PREVIEW_CLASS } from \"@ourworldindata/types\"\nimport { useLinkedChart } from \"../utils.js\"\nimport SpanElements from \"./SpanElements.js\"\nimport cx from \"clsx\"\nimport { GrapherWithFallback } from \"../../GrapherWithFallback.js\"\nimport { MultiDimEmbed } from \"../../MultiDimEmbed.js\"\nimport { useEmbedChart } from \"../../hooks.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\n\nconst DEFAULT_CHART_HEIGHT = \"575px\"\nconst CHART_WITH_EXTERNAL_CONTROLS_HEIGHT = \"700px\"\n\nexport default function Chart({\n    d,\n    className,\n    fullWidthOnMobile = false,\n    hideControls = false,\n    shouldRenderLinks = true,\n}: {\n    d: EnrichedBlockChart\n    className?: string\n    fullWidthOnMobile?: boolean\n    hideControls?: boolean\n    shouldRenderLinks?: boolean\n}) {\n    const { isPreviewing, archiveContext } = useDocumentContext()\n    const refChartContainer = useRef<HTMLDivElement>(null)\n    const archiveIframeRef = useRef<HTMLIFrameElement | null>(null)\n    useEmbedChart(refChartContainer, isPreviewing)\n\n    // Register the chart with GuidedChartContext for guided chart scrollTo on mobile\n    const guidedChartContext = useContext(GuidedChartContext)\n    const registerChartElement = guidedChartContext?.registerChartElement\n    useEffect(() => {\n        if (!registerChartElement || !refChartContainer.current) return\n        return registerChartElement(refChartContainer.current)\n    }, [registerChartElement])\n\n    // d.url may use an old slug that has since had a redirect created for it\n    // useLinkedChart references a hashmap that has resolved these old slugs to their current chart\n    // It also extracts the queryString from d.url (if present) and appends it to linkedChart.resolvedUrl\n    // This means we can link to the same chart multiple times with different querystrings\n    // and it should all resolve correctly via the same linkedChart\n    const { linkedChart } = useLinkedChart(d.url)\n    const configType = linkedChart?.configType\n    const isExplorer = configType === ChartConfigType.Explorer\n    const isMultiDim = configType === ChartConfigType.MultiDim\n    const shouldApplyHideControls = hideControls && (isExplorer || isMultiDim)\n    const resolvedUrl = linkedChart?.resolvedUrl ?? \"\"\n    const resolvedUrlParsed = useMemo(() => {\n        let baseUrl = Url.fromURL(resolvedUrl)\n\n        // Append peerCountries param if specified in the archie block\n        if (d.peerCountries) {\n            baseUrl = baseUrl.updateQueryParams({\n                peerCountries: d.peerCountries,\n            })\n        }\n\n        if (shouldApplyHideControls) {\n            baseUrl = baseUrl.updateQueryParams({ hideControls: \"true\" })\n        }\n\n        return baseUrl\n    }, [resolvedUrl, d.peerCountries, shouldApplyHideControls])\n    const resolvedQueryParams = useMemo(() => {\n        return { ...resolvedUrlParsed.queryParams }\n    }, [resolvedUrlParsed])\n    const chartConfig = useMemo(\n        () => ({\n            archiveContext: linkedChart?.archivedPageVersion,\n        }),\n        [linkedChart?.archivedPageVersion]\n    )\n    const controlsAreVisible =\n        resolvedUrlParsed.queryParams.hideControls !== \"true\"\n    const isExplorerWithControls = isExplorer && controlsAreVisible\n    const isMultiDimWithControls = isMultiDim && controlsAreVisible\n    const hasExternalControls = isExplorerWithControls || isMultiDimWithControls\n\n    const archivedChartVersion = linkedChart?.archivedPageVersion\n    const shouldRenderArchiveEmbed =\n        archiveContext?.type === \"archive-page\" && !!archivedChartVersion\n\n    const archiveUrl = useMemo(() => {\n        if (!shouldRenderArchiveEmbed) return undefined\n        const baseUrl = Url.fromURL(archivedChartVersion.archiveUrl)\n        return baseUrl.updateQueryParams(resolvedQueryParams)\n    }, [shouldRenderArchiveEmbed, archivedChartVersion, resolvedQueryParams])\n\n    const slug = resolvedUrlParsed.slug\n    const queryStr = resolvedUrlParsed.queryStr\n\n    useEffect(() => {\n        if (\n            !shouldRenderArchiveEmbed ||\n            !guidedChartContext?.registerArchiveChart ||\n            !configType\n        )\n            return\n        const unregister = guidedChartContext.registerArchiveChart({\n            iframeRef: archiveIframeRef,\n            baseUrl: archiveUrl?.fullUrl ?? archivedChartVersion.archiveUrl,\n            defaultQueryParams: resolvedQueryParams,\n            chartConfigType: configType,\n        })\n        return () => {\n            unregister()\n        }\n    }, [\n        configType,\n        guidedChartContext,\n        shouldRenderArchiveEmbed,\n        archiveUrl?.fullUrl,\n        archivedChartVersion?.archiveUrl,\n        archivedChartVersion,\n        resolvedQueryParams,\n    ])\n\n    if (!linkedChart || !slug) return null\n\n    if (shouldRenderArchiveEmbed && archiveUrl) {\n        const defaultHeight =\n            isExplorerWithControls || isMultiDimWithControls\n                ? CHART_WITH_EXTERNAL_CONTROLS_HEIGHT\n                : DEFAULT_CHART_HEIGHT\n        return (\n            <div\n                className={cx(className, {\n                    \"full-width-on-mobile\":\n                        !isExplorerWithControls && fullWidthOnMobile,\n                })}\n                ref={refChartContainer}\n            >\n                <iframe\n                    ref={archiveIframeRef}\n                    src={archiveUrl.fullUrl}\n                    width=\"100%\"\n                    height={d.height || defaultHeight}\n                    style={{\n                        border: \"0px none\",\n                        display: \"block\",\n                    }}\n                    loading=\"lazy\"\n                    title={linkedChart.title}\n                />\n                {d.caption ? (\n                    <figcaption>\n                        <SpanElements\n                            spans={d.caption}\n                            shouldRenderLinks={shouldRenderLinks}\n                        />\n                    </figcaption>\n                ) : null}\n            </div>\n        )\n    }\n\n    return (\n        <div\n            className={cx(className, {\n                \"full-width-on-mobile\":\n                    !isExplorerWithControls && fullWidthOnMobile,\n            })}\n            ref={refChartContainer}\n        >\n            <div\n                className={cx(\"owid-chart-frame\", {\n                    \"owid-chart-frame--explorer-with-controls\":\n                        isExplorerWithControls,\n                    \"owid-chart-frame--multi-dim-with-controls\":\n                        isMultiDimWithControls,\n                })}\n                style={d.height ? { height: d.height } : undefined}\n            >\n                {isExplorer ? (\n                    <figure\n                        // Use unique `key` to force React to re-render tree\n                        key={resolvedUrl}\n                        className={cx({\n                            [GRAPHER_PREVIEW_CLASS]: !isExplorer,\n                            chart: !hasExternalControls,\n                            explorer: isExplorerWithControls,\n                            \"multi-dim\": isMultiDimWithControls,\n                        })}\n                        data-grapher-src={isExplorer ? undefined : resolvedUrl}\n                        data-explorer-src={\n                            isExplorer ? resolvedUrlParsed.fullUrl : undefined\n                        }\n                    >\n                        <div className=\"js--show-warning-block-if-js-disabled\" />\n                    </figure>\n                ) : isMultiDim ? (\n                    <MultiDimEmbed\n                        url={resolvedUrlParsed.fullUrl}\n                        chartConfig={chartConfig}\n                        isPreviewing={isPreviewing}\n                    />\n                ) : (\n                    <GrapherWithFallback\n                        slug={slug}\n                        config={chartConfig}\n                        queryStr={queryStr}\n                        isEmbeddedInAnOwidPage={true}\n                        isEmbeddedInADataPage={false}\n                        isPreviewing={isPreviewing}\n                    />\n                )}\n            </div>\n            {d.caption ? (\n                <figcaption>\n                    <SpanElements\n                        spans={d.caption}\n                        shouldRenderLinks={shouldRenderLinks}\n                    />\n                </figcaption>\n            ) : null}\n        </div>\n    )\n}\n","import { useState } from \"react\"\nimport {\n    faCircleArrowRight,\n    faCircleArrowLeft,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\n\nimport { EnrichedBlockChartStory } from \"@ourworldindata/utils\"\nimport SpanElements from \"./SpanElements.js\"\nimport Chart from \"./Chart.js\"\nimport cx from \"clsx\"\n\nexport default function ChartStory({\n    d,\n    className = \"\",\n    shouldRenderLinks = true,\n}: {\n    d: EnrichedBlockChartStory\n    className?: string\n    shouldRenderLinks?: boolean\n}) {\n    const { items } = d\n    const [currentIndex, setCurrentIndex] = useState(0)\n    const currentSlide = items[currentIndex]\n    const showDetails = !!currentSlide.technical.length\n    const maxSlide = items.length - 1\n\n    return (\n        <div className={cx(className, \"chart-story grid grid-cols-8\")}>\n            <div className=\"chart-story__nav-hud span-cols-8 overline-black-caps align-center\">\n                {`Chart ${currentIndex + 1} of ${items.length}`}\n            </div>\n            <button\n                aria-label=\"Go to previous slide\"\n                disabled={currentIndex === 0}\n                className=\"chart-story__nav-arrow chart-story__nav-arrow--left span-cols-1 align-center\"\n                onClick={() => {\n                    setCurrentIndex(Math.max(0, currentIndex - 1))\n                }}\n            >\n                <FontAwesomeIcon icon={faCircleArrowLeft} />\n            </button>\n            <div className=\"chart-story__narrative-text span-cols-6 h3-bold align-center\">\n                <SpanElements\n                    spans={currentSlide.narrative.value}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            </div>\n            <button\n                aria-label=\"Go to next slide\"\n                disabled={currentIndex === maxSlide}\n                className=\"chart-story__nav-arrow chart-story__nav-arrow--right span-cols-1 col-start-8 align-center\"\n                onClick={() => {\n                    setCurrentIndex(Math.min(maxSlide, currentIndex + 1))\n                }}\n            >\n                <FontAwesomeIcon icon={faCircleArrowRight} />\n            </button>\n\n            <div className=\"chart-story__chart span-cols-8\">\n                {/* We use the key to reset the state of multi-dims when they\n                only differ by query params. Consider lifting the state up to\n                avoid re-rendering the whole component. */}\n                <Chart\n                    key={currentSlide.chart.url}\n                    d={currentSlide.chart}\n                    hideControls\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            </div>\n            {showDetails ? (\n                <>\n                    <div className=\"chart-story__technical-text span-cols-8 overline-black-caps\">\n                        About this chart\n                    </div>\n                    <div className=\"chart-story__technical-details span-cols-8 grid grid-cols-8\">\n                        <ul className=\"span-cols-6 col-start-2\">\n                            {currentSlide.technical.map((d: any, i: number) => {\n                                return (\n                                    <li className=\"body-3-medium\" key={i}>\n                                        <SpanElements\n                                            spans={d.value}\n                                            shouldRenderLinks={\n                                                shouldRenderLinks\n                                            }\n                                        />\n                                    </li>\n                                )\n                            })}\n                        </ul>\n                    </div>\n                </>\n            ) : null}\n        </div>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport { removeDiacritics } from \"@ourworldindata/utils\"\nimport { useDonors } from \"../utils.js\"\n\nfunction* generateTestimonials() {\n    yield \"Our World in Data is a profound source of information and inspiration for solving global problems. Thank you.\"\n    yield \"To me, investing in evidence-based solutions to both combat and prevent disasters is one of the smartest things we can do for humanity. That's why I've become a monthly donor to Our World in Data!\"\n    yield \"Our World in Data is a tremendous resource to help the general public and policymakers be objective about the problems we're facing and also the success we've had so far.\"\n    yield \"The research produced by Our World in Data has the potential to make a real difference in the world. By shedding light on issues such as poverty, inequality, and health, they can help policymakers, researchers, and activists make informed decisions that improve people's lives.\"\n    yield \"Simply the best, most accessible and reliable source for some of the most important data about our world.\"\n    yield \"Our World in Data constantly challenges my thinking in the best possible ways. The world is smarter for this site.\"\n    yield \"Your work with facts is essential in this chaotic world. It is also extremely well-presented and concise enough for people to be able to read even if they are in a hurry.\"\n    yield \"Thanks for everything you do. I use your work about once a week in my undergraduate lectures.\"\n    yield \"Clear facts for everyone on the planet.\"\n    yield \"A wide-ranging curated set of data that is presented well and made available for all to use. Truly a service to and for the world we live in.\"\n    yield \"Your work is invaluable towards creating a better and more just world. Thank you!\"\n    yield \"It seems every time I visit your page I learn something fascinating. Thank you for the eye-opening and engaging content.\"\n}\n\nfunction Testimonials({\n    testimonials,\n}: {\n    testimonials: (string | undefined)[]\n}) {\n    const [first, second] = testimonials\n    if (!first) return null\n    return (\n        <>\n            <h4 className=\"h5-black-caps\">From our readers</h4>\n            <div className=\"donor-testimonials\">\n                <blockquote className=\"donor-testimonial\">\n                    <p>{`“${first}”`}</p>\n                </blockquote>\n                {second && (\n                    <blockquote className=\"donor-testimonial\">\n                        <p>{`“${second}”`}</p>\n                    </blockquote>\n                )}\n            </div>\n        </>\n    )\n}\n\nexport default function Donors({ className }: { className?: string }) {\n    const donors = useDonors()\n    if (!donors) return null\n\n    const donorsByLetter = _.groupBy(donors, (donor) =>\n        removeDiacritics(donor[0].toUpperCase())\n    )\n    const testimonialGenerator = generateTestimonials()\n    return (\n        <div className={className}>\n            <div className=\"col-start-2 span-cols-12\">\n                <p className=\"donors-note\">(Listed in alphabetical order)</p>\n                {Object.entries(donorsByLetter).map(\n                    ([letter, donors], index) => (\n                        <div key={letter}>\n                            <h3 className=\"donors-letter\">{letter}</h3>\n                            <ul className=\"donor-list\">\n                                {donors.map((donor) => (\n                                    <li key={donor} className=\"donor-item\">\n                                        {donor}\n                                    </li>\n                                ))}\n                            </ul>\n                            {index % 4 === 0 && (\n                                <Testimonials\n                                    testimonials={[\n                                        testimonialGenerator.next().value ||\n                                            undefined,\n                                        testimonialGenerator.next().value ||\n                                            undefined,\n                                    ]}\n                                />\n                            )}\n                        </div>\n                    )\n                )}\n            </div>\n        </div>\n    )\n}\n","import { EnrichedBlockText, Span } from \"@ourworldindata/utils\"\nimport SpanElements from \"./SpanElements.js\"\n\nfunction isOnlyEmptySpans(spans: Span[]) {\n    return spans.every((span) => {\n        const isNewline = span.spanType === \"span-newline\"\n        const isSimpleText = span.spanType === \"span-simple-text\"\n        const isEmptySimpleText = isSimpleText && span.text === \"\"\n        return isNewline || isEmptySimpleText\n    })\n}\n\nexport default function Paragraph({\n    d,\n    className = \"\",\n    shouldRenderLinks = true,\n}: {\n    d: EnrichedBlockText\n    className?: string\n    shouldRenderLinks?: boolean\n}) {\n    if (isOnlyEmptySpans(d.value)) {\n        return null\n    }\n    return (\n        <p className={className}>\n            <SpanElements\n                spans={d.value}\n                shouldRenderLinks={shouldRenderLinks}\n            />\n        </p>\n    )\n}\n","import * as R from \"remeda\"\nimport cx from \"clsx\"\n\nexport type Container =\n    | \"default\"\n    | \"sticky-right-left-column\"\n    | \"sticky-right-left-heading-column\"\n    | \"sticky-right-right-column\"\n    | \"sticky-left-left-column\"\n    | \"sticky-left-right-column\"\n    | \"side-by-side\"\n    | \"datapage\"\n    | \"key-insight\"\n    | \"key-insight-asset\"\n    | \"about-page\"\n    | \"author-header\"\n    | \"data-insight\"\n    | \"latest-announcement\"\n\n// Each container must have a default layout, usually just full-width\ntype Layouts = { default: string; [key: string]: string }\n\n// no line-wrapping for easier alphabetisation\n// oxfmt-ignore\nexport const layouts: { [key in Container]: Layouts } = {\n    [\"default\"]: {\n        [\"align\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"all-charts\"]: \"col-start-2 span-cols-12\",\n        [\"aside--left\"]: \"col-start-2 span-cols-3 span-md-cols-10 col-md-start-3 span-sm-cols-12 col-sm-start-2\",\n        [\"aside--right\"]: \"col-start-11 span-cols-3 span-md-cols-10 col-md-start-3 span-sm-cols-12 col-sm-start-2\",\n        [\"bespoke-component--narrow\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"bespoke-component--wide\"]: \"col-start-4 span-cols-8 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"bespoke-component--widest\"]: \"span-cols-12 col-start-2\",\n        [\"chart-story\"]: \"col-start-4 span-cols-8 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"chart\"]: \"col-start-4 span-cols-8 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"chart--narrow\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"chart--wide\"]: \"col-start-4 span-cols-8 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"chart--widest\"]: \"col-start-2 span-cols-12 col-md-start-2 span-md-cols-12\",\n        [\"cta\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"country-profile-selector\"]: \"span-cols-14 grid grid-cols-12-full-width\",\n        [\"data-callout\"]: \"span-cols-14 grid grid-cols-12-full-width\",\n        [\"data-callout-group\"]: \"span-cols-14 grid grid-cols-12-full-width\",\n        [\"default\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"divider\"]: \"col-start-2 span-cols-12\",\n        [\"explorer\"]: \"col-start-2 span-cols-12\",\n        [\"explorer--narrow\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"explorer--wide\"]: \"col-start-2 span-cols-12\",\n        [\"explorer--widest\"]: \"col-start-2 span-cols-12\",\n        [\"explorer-tiles\"]: \"grid grid-cols-12 span-cols-12 col-start-2\",\n        [\"gray-section\"]: \"span-cols-14 grid grid-cols-12-full-width\",\n        [\"explore-data-section\"]: \"span-cols-14 grid grid-cols-12-full-width\",\n        [\"guided-chart\"]: \"grid grid-cols-12-full-width span-cols-14\",\n        [\"heading\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"homepage-search\"]: \"grid grid-cols-12-full-width span-cols-14\",\n        [\"featured-metrics\"]: \"col-start-2 span-cols-12\",\n        [\"featured-data-insights\"]: \"col-start-2 span-cols-12\",\n        [\"homepage-intro\"]: \"grid grid-cols-12-full-width span-cols-14\",\n        [\"horizontal-rule\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"html\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"image--narrow\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 col-sm-start-2 span-sm-cols-12\",\n        [\"image--wide\"]: \"col-start-4 span-cols-8 col-md-start-2 span-md-cols-12\",\n        [\"image--widest\"]: \"col-start-2 span-cols-12 col-md-start-2 span-md-cols-12\",\n        [\"static-viz--narrow\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 col-sm-start-2 span-sm-cols-12\",\n        [\"static-viz--wide\"]: \"col-start-4 span-cols-8 col-md-start-2 span-md-cols-12\",\n        [\"static-viz--widest\"]: \"col-start-2 span-cols-12 col-md-start-2 span-md-cols-12\",\n        [\"image-caption\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"key-indicator\"]: \"col-start-2 span-cols-12\",\n        [\"key-indicator-collection\"]: \"grid col-start-2 span-cols-12\",\n        [\"key-insights\"]: \"col-start-2 span-cols-12\",\n        [\"latest-data-insights\"]: \"grid grid-cols-12-full-width span-cols-14\",\n        [\"list\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"numbered-list\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"prominent-link\"]: \"grid grid-cols-6 span-cols-6 col-start-5 span-md-cols-10 col-md-start-3 grid-md-cols-10 span-sm-cols-12 col-sm-start-2 grid-sm-cols-12\",\n        [\"pill-row\"]: \"grid span-cols-14 grid-cols-12-full-width\",\n        [\"pull-quote--left\"]: \"span-cols-14 grid grid-cols-12-full-width\",\n        [\"pull-quote--left-center\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"pull-quote--right-center\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"pull-quote--right\"]: \"span-cols-14 grid grid-cols-12-full-width\",\n        [\"chart-rows\"]: \"col-start-4 span-cols-8 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"pull-chart\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"resource-panel\"]: \"col-start-11 span-cols-3 span-rows-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"recirc--left\"]: \"col-start-2 span-cols-3 span-rows-3 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"recirc--center\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"recirc--right\"]: \"col-start-11 span-cols-3 span-rows-3 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"subscribe-banner--left\"]: \"col-start-2 span-cols-3 span-rows-3 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"subscribe-banner--center\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"subscribe-banner--right\"]: \"col-start-11 span-cols-3 span-rows-3 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"research-and-writing\"]: \"col-start-2 span-cols-12\",\n        [\"sdg-grid\"]: \"grid col-start-2 span-cols-12 col-lg-start-3 span-lg-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"side-by-side\"]: \"grid span-cols-12 col-start-2\",\n        [\"sticky-left-left-column\"]: \"grid grid-cols-7 span-cols-7 span-md-cols-10 grid-md-cols-10 col-md-start-2 span-sm-cols-12 grid-sm-cols-12 col-sm-start-1\",\n        [\"sticky-left-right-column\"]: \"grid grid-cols-5 span-cols-5 span-md-cols-10 grid-md-cols-10 col-md-start-2 span-sm-cols-12 grid-sm-cols-12 col-sm-start-1\",\n        [\"sticky-left\"]: \"grid span-cols-12 col-start-2\",\n        [\"sticky-right-left-column\"]: \"grid span-cols-5 grid grid-cols-5 span-md-cols-10 grid-md-cols-10 col-md-start-2 span-sm-cols-12 grid-sm-cols-12 col-sm-start-1\",\n        [\"sticky-right-right-column\"]: \"span-cols-7 grid-cols-7 span-md-cols-10 grid-md-cols-10 col-md-start-2 span-sm-cols-12 grid-sm-cols-12 col-sm-start-1\",\n        [\"sticky-right\"]: \"grid span-cols-12 col-start-2\",\n        [\"table--narrow\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"table--wide\"]: \"col-start-2 span-cols-12\",\n        [\"text\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"toc\"]: \"grid grid-cols-8 col-start-4 span-cols-8 grid-md-cols-10 col-md-start-3 span-md-cols-10 grid-sm-cols-12 span-sm-cols-12 col-sm-start-2\",\n        [\"ltp-toc\"]: \"grid grid-cols-12 col-start-2 span-cols-12 grid-sm-cols-12 span-sm-cols-12 col-sm-start-2\",\n        [\"topic-page-intro\"]: \"grid col-start-2 span-cols-12\",\n        [\"video\"]: \"col-start-4 span-cols-8 col-md-start-2 span-md-cols-12\",\n    },\n    [\"datapage\"]: {\n        [\"default\"]: \"col-start-2 span-cols-6 col-lg-start-2 span-lg-cols-7 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\",\n        [\"chart\"]: \"span-cols-8 span-lg-cols-9 span-md-cols-12\",\n        [\"chart--narrow\"]: \"span-cols-8 span-lg-cols-9 span-md-cols-12\",\n        [\"chart--wide\"]: \"span-cols-8 span-lg-cols-9 span-md-cols-12\",\n        [\"chart--widest\"]: \"span-cols-8 span-lg-cols-9 span-md-cols-12\",\n        [\"explorer--narrow\"]: \"span-cols-8 span-lg-cols-9 span-md-cols-12\",\n        [\"explorer--wide\"]: \"span-cols-8 span-lg-cols-9 span-md-cols-12\",\n        [\"explorer--widest\"]: \"span-cols-8 span-lg-cols-9 span-md-cols-12\",\n    },\n    [\"about-page\"]: {\n        [\"default\"]: \"grid col-start-2 span-cols-12\",\n        [\"people\"]: \"col-start-2 span-cols-8 col-md-start-2 span-md-cols-12\",\n        [\"donors\"]: \"grid grid-cols-12-full-width col-start-1 col-end-limit\",\n        [\"sticky-left-left-column\"]: \"grid grid-cols-7 span-cols-7 span-md-cols-10 grid-md-cols-10\",\n        [\"sticky-left-right-column\"]: \"grid grid-cols-5 span-cols-5 span-md-cols-10 grid-md-cols-10\",\n        [\"sticky-left\"]: \"grid span-cols-12 col-start-2\",\n        [\"sticky-right-left-column\"]: \"grid span-cols-5 grid grid-cols-5 span-md-cols-10 grid-md-cols-10 col-md-start-2 span-sm-cols-12 grid-sm-cols-12 col-sm-start-1\",\n        [\"sticky-right-right-column\"]: \"span-cols-7 grid-cols-7 span-md-cols-10 grid-md-cols-10 col-md-start-2 span-sm-cols-12 grid-sm-cols-12 col-sm-start-1\",\n        [\"sticky-right\"]: \"grid span-cols-12 col-start-2\",\n        [\"table--narrow\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"table--wide\"]: \"col-start-2 span-cols-12\",\n    },\n    [\"author-header\"]: {\n        [\"default\"]: \"span-cols-8\",\n        [\"image\"]: \"span-cols-2 span-md-cols-3\",\n        [\"text\"]: \"span-cols-6 span-md-cols-8 col-sm-start-2 span-sm-cols-12\",\n        [\"socials\"]: \"span-cols-3 col-sm-start-2 span-sm-cols-12\",\n    },\n    [\"sticky-right-left-column\"]: {\n        [\"default\"]: \"span-cols-5 span-md-cols-10 span-sm-cols-12\",\n        [\"prominent-link\"]: \"grid grid-cols-5 span-cols-5 span-md-cols-10 grid-md-cols-10 span-sm-cols-12 grid-sm-cols-12\",\n    },\n    [\"sticky-right-left-heading-column\"]: {\n        [\"default\"]: \"span-cols-5 span-md-cols-10 col-md-start-2 span-sm-cols-12 col-sm-start-1\"\n    },\n    [\"sticky-right-right-column\"]: {\n        [\"default\"]: \"span-cols-7 span-md-cols-10 span-sm-cols-12\",\n         [\"prominent-link\"]: \"grid grid-cols-6 span-cols-6 span-md-cols-12 grid-md-cols-12\",\n    },\n    [\"sticky-left-left-column\"]: {\n        [\"default\"]: \"span-cols-7 span-md-cols-10 span-sm-cols-12\",\n        [\"prominent-link\"]: \"grid grid-cols-6 span-cols-6 span-md-cols-12 grid-md-cols-12\",\n    },\n    [\"sticky-left-right-column\"]: {\n        [\"default\"]: \"span-cols-5 span-md-cols-10 span-sm-cols-12\",\n        [\"prominent-link\"]: \"grid grid-cols-6 span-cols-6 span-md-cols-12 grid-md-cols-12\",\n    },\n    [\"side-by-side\"]: {\n        [\"default\"]: \"span-cols-6 span-sm-cols-12\",\n        [\"prominent-link\"]: \"grid grid-cols-6 span-cols-6 grid-sm-cols-12 span-sm-cols-12 \",\n        [\"cookie-notice\"]: \"span-cols-5 col-start-2 span-md-cols-6 col-md-start-1 span-sm-cols-12 col-sm-start-1\"\n    },\n    [\"data-insight\"]: {\n        // no grid containers or grid sizing for data insights - they're always just a single column\n        [\"default\"]: \"\",\n    },\n    [\"key-insight\"]: {\n        [\"default\"]: \"col-start-1 span-cols-5 col-md-start-1 span-md-cols-12\",\n        [\"prominent-link\"]: \"grid grid-cols-6 span-cols-6 span-md-cols-12 grid-md-cols-12\",\n    },\n    [\"key-insight-asset\"]: {\n        [\"default\"]: \"\",\n    },\n    [\"latest-announcement\"]: {\n        [\"default\"]: \"span-cols-8 span-sm-cols-6\",\n        [\"expandable-text\"]: \"grid grid-cols-8 grid-sm-cols-6\",\n        [\"image--narrow\"]: \"span-cols-6 span-sm-cols-5\",\n        [\"image--wide\"]: \"span-cols-6 span-sm-cols-5\",\n        [\"image--widest\"]: \"span-cols-6 span-sm-cols-5\",\n    },\n}\n\n/** The grid column classes for a block type */\nexport function getGridColumns(\n    blockType: string = \"default\",\n    containerType: Container = \"default\"\n): string {\n    return (\n        R.prop(layouts, containerType, blockType) ??\n        // fallback to the default for the container\n        R.prop(layouts, containerType, \"default\")\n    )\n}\n\nexport function getLayout(\n    blockType: string = \"default\",\n    containerType: Container = \"default\"\n): string {\n    return cx(\n        `article-block__${blockType}`,\n        getGridColumns(blockType, containerType)\n    )\n}\n","import { EnrichedBlockPullQuote } from \"@ourworldindata/utils\"\nimport Paragraph from \"./Paragraph.js\"\nimport { getLayout } from \"./layout.js\"\n\nexport default function PullQuote({\n    d,\n    className = \"\",\n    shouldRenderLinks = true,\n}: {\n    d: EnrichedBlockPullQuote\n    className?: string\n    shouldRenderLinks?: boolean\n}) {\n    return (\n        <div className={className}>\n            <blockquote className={d.align}>{d.quote}</blockquote>\n            {d.content.map((block, i) => (\n                <Paragraph\n                    key={i}\n                    d={block}\n                    className={getLayout(\"text\")}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            ))}\n        </div>\n    )\n}\n","import Image, { ImageParentContainer } from \"./Image.js\"\n\nexport default function ChartThumbnail({\n    image,\n    containerType,\n}: {\n    image: string\n    containerType: ImageParentContainer\n}) {\n    return (\n        <>\n            <Image\n                filename={image}\n                containerType={containerType}\n                shouldLightbox={false}\n                shouldHideDownloadButton={true}\n            />\n            <div className=\"chart-thumbnail__overlay\">\n                <div className=\"chart-thumbnail__cta\">Click to explore</div>\n            </div>\n        </>\n    )\n}\n","import { useId } from \"react\"\nimport {\n    EnrichedBlockChartRows,\n    EnrichedChartRowItem,\n} from \"@ourworldindata/types\"\nimport { useGuidedChartLinkHandler } from \"@ourworldindata/grapher\"\nimport cx from \"clsx\"\nimport ChartThumbnail from \"./ChartThumbnail.js\"\nimport Paragraph from \"./Paragraph.js\"\nimport SpanElements from \"./SpanElements.js\"\n\nfunction ChartRow({\n    row,\n    shouldRenderLinks,\n}: {\n    row: EnrichedChartRowItem\n    shouldRenderLinks: boolean\n}) {\n    const onGuidedChartLinkClick = useGuidedChartLinkHandler()\n    const contentId = useId()\n\n    const thumbnail = (\n        <ChartThumbnail image={row.image} containerType=\"chart-rows\" />\n    )\n\n    const hasContent = row.content.length > 0\n    const content = hasContent && (\n        <div id={contentId} className=\"chart-rows__row-content\">\n            {row.content.map((block, i) => (\n                <Paragraph\n                    key={i}\n                    d={block}\n                    className=\"article-block__text\"\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            ))}\n        </div>\n    )\n\n    const thumbnailLink = onGuidedChartLinkClick ? (\n        <button\n            className=\"chart-thumbnail\"\n            onClick={() => onGuidedChartLinkClick(row.url)}\n            aria-label=\"Update chart to this view\"\n            aria-describedby={hasContent ? contentId : undefined}\n        >\n            {thumbnail}\n        </button>\n    ) : !shouldRenderLinks ? (\n        <div className=\"chart-thumbnail chart-thumbnail--static\">\n            {thumbnail}\n        </div>\n    ) : (\n        <a\n            href={row.url}\n            className=\"chart-thumbnail\"\n            aria-label=\"See chart\"\n            aria-describedby={hasContent ? contentId : undefined}\n        >\n            {thumbnail}\n        </a>\n    )\n\n    return (\n        <div className=\"chart-rows__row\">\n            {content}\n            <figure className=\"chart-rows__chart\">\n                {thumbnailLink}\n                {row.caption && (\n                    <figcaption className=\"chart-rows__caption\">\n                        <SpanElements\n                            spans={row.caption}\n                            shouldRenderLinks={shouldRenderLinks}\n                        />\n                    </figcaption>\n                )}\n            </figure>\n        </div>\n    )\n}\n\nexport default function ChartRows({\n    d,\n    className = \"\",\n    shouldRenderLinks = true,\n}: {\n    d: EnrichedBlockChartRows\n    className?: string\n    shouldRenderLinks?: boolean\n}) {\n    const isInGuidedChart = !!useGuidedChartLinkHandler()\n\n    return (\n        <div\n            className={cx(\n                \"chart-rows\",\n                { \"chart-rows--guided\": isInGuidedChart },\n                { \"chart-rows--standalone\": !isInGuidedChart },\n                className\n            )}\n        >\n            <span className=\"chart-rows__kicker\">\n                {d.kicker || \"More views of this data\"}\n            </span>\n            {!isInGuidedChart && d.title && (\n                <h4 className=\"chart-rows__title\">{d.title}</h4>\n            )}\n            <div className=\"chart-rows__rows-container\">\n                {d.rows.map((row, i) => (\n                    <ChartRow\n                        key={i}\n                        row={row}\n                        shouldRenderLinks={shouldRenderLinks}\n                    />\n                ))}\n            </div>\n            {!isInGuidedChart && d.source && (\n                <p className=\"chart-rows__source\">\n                    <span className=\"chart-rows__source-label\">\n                        Data source:{\" \"}\n                    </span>\n                    {d.source}\n                </p>\n            )}\n        </div>\n    )\n}\n","import { useId } from \"react\"\nimport { EnrichedBlockPullChart } from \"@ourworldindata/types\"\nimport cx from \"clsx\"\nimport ChartThumbnail from \"./ChartThumbnail.js\"\nimport Paragraph from \"./Paragraph.js\"\n\nexport default function PullChart({\n    d,\n    className = \"\",\n    shouldRenderLinks = true,\n}: {\n    d: EnrichedBlockPullChart\n    className?: string\n    shouldRenderLinks?: boolean\n}) {\n    const contentId = useId()\n    const alignClass = `pull-chart--align-${d.align ?? \"left-center\"}`\n    const hasContent = d.content.length > 0\n\n    return (\n        <div className={cx(\"pull-chart\", alignClass, className)}>\n            {shouldRenderLinks ? (\n                <a\n                    href={d.url}\n                    className=\"chart-thumbnail pull-chart__thumbnail\"\n                    aria-label=\"See chart\"\n                    aria-describedby={hasContent ? contentId : undefined}\n                >\n                    <ChartThumbnail\n                        image={d.image}\n                        containerType=\"pull-chart\"\n                    />\n                </a>\n            ) : (\n                <div className=\"chart-thumbnail chart-thumbnail--static pull-chart__thumbnail\">\n                    <ChartThumbnail\n                        image={d.image}\n                        containerType=\"pull-chart\"\n                    />\n                </div>\n            )}\n            {hasContent && (\n                <div className=\"pull-chart__content\" id={contentId}>\n                    {d.content.map((block, i) => (\n                        <Paragraph\n                            key={i}\n                            d={block}\n                            className=\"article-block__text\"\n                            shouldRenderLinks={shouldRenderLinks}\n                        />\n                    ))}\n                </div>\n            )}\n        </div>\n    )\n}\n","import * as R from \"remeda\"\nimport { createContext, useContext } from \"react\"\n\ninterface AriaAnnouncerContextType {\n    announce: (message: string) => void\n    announcement: string\n}\n\nexport const AriaAnnouncerContext =\n    createContext<AriaAnnouncerContextType | null>(null)\n\nexport const useAriaAnnouncer = () => {\n    const context = useContext(AriaAnnouncerContext)\n    if (!context) {\n        // Fallback for cases where the component is used outside of AriaAnnouncerProvider\n        return {\n            announce: R.identity,\n            announcement: \"\",\n        }\n    }\n    return context\n}\n","import { runInAction } from \"mobx\"\nimport {\n    EnrichedBlockGuidedChart,\n    GrapherQueryParams,\n    MultiDimDimensionChoices,\n} from \"@ourworldindata/types\"\nimport { Container } from \"./layout.js\"\nimport { useRef, useCallback, useState } from \"react\"\nimport {\n    MultiDimDataPageConfig,\n    Url,\n    extractMultiDimChoicesFromSearchParams,\n} from \"@ourworldindata/utils\"\nimport { ArticleBlocks } from \"./ArticleBlocks.js\"\nimport {\n    GuidedChartContext,\n    GrapherState,\n    buildArchiveGuidedChartSrc,\n} from \"@ourworldindata/grapher\"\nimport type { ArchiveGuidedChartRegistration } from \"@ourworldindata/grapher\"\nimport { SiteAnalytics } from \"../../SiteAnalytics.js\"\nimport { useAriaAnnouncer } from \"../../AriaAnnouncerUtils.js\"\nimport { getPrefersReducedMotion } from \"@ourworldindata/components\"\n\nconst analytics = new SiteAnalytics()\n\nexport default function GuidedChart({\n    d,\n    containerType = \"default\",\n    shouldRenderLinks = true,\n    interactiveImages = true,\n}: {\n    d: EnrichedBlockGuidedChart\n    containerType?: Container\n    className?: string\n    shouldRenderLinks?: boolean\n    interactiveImages?: boolean\n}) {\n    const stateRef = useRef<GrapherState | null>(null)\n    const chartRef = useRef<HTMLDivElement | null>(null)\n    const [multiDimData, setMultiDimData] = useState<{\n        config: MultiDimDataPageConfig\n        onSettingsChange: (\n            newSettings: MultiDimDimensionChoices,\n            queryParams: GrapherQueryParams\n        ) => void\n        grapherContainerRef: React.RefObject<HTMLDivElement | null>\n    } | null>(null)\n    const { announce } = useAriaAnnouncer()\n    const archiveChartRegistrationRef =\n        useRef<ArchiveGuidedChartRegistration | null>(null)\n\n    const registerArchiveChart = useCallback(\n        (registration: ArchiveGuidedChartRegistration) => {\n            archiveChartRegistrationRef.current = registration\n            return () => {\n                if (archiveChartRegistrationRef.current === registration) {\n                    archiveChartRegistrationRef.current = null\n                }\n            }\n        },\n        []\n    )\n\n    const registerGrapherState = useCallback((grapherState: GrapherState) => {\n        stateRef.current = grapherState\n        return () => {\n            if (stateRef.current === grapherState) stateRef.current = null\n        }\n    }, [])\n\n    const registerChartElement = useCallback((element: HTMLDivElement) => {\n        chartRef.current = element\n        return () => {\n            if (chartRef.current === element) chartRef.current = null\n        }\n    }, [])\n\n    const applyGuidedChartLinkToArchive = useCallback((url: Url): boolean => {\n        const registration = archiveChartRegistrationRef.current\n        const iframeEl = registration?.iframeRef.current\n        if (!registration || !iframeEl) return false\n\n        const nextSrc = buildArchiveGuidedChartSrc(registration, url)\n        if (iframeEl.src === nextSrc) return true\n        // oxlint-disable-next-line react/immutability -- navigating the iframe from an event handler\n        iframeEl.src = nextSrc\n        return true\n    }, [])\n\n    const handleGuidedChartLinkClick = useCallback(\n        (href: string) => {\n            const url = Url.fromURL(href)\n            const handledArchiveIframe = applyGuidedChartLinkToArchive(url)\n\n            let didUpdateChart = handledArchiveIframe\n\n            if (!handledArchiveIframe) {\n                const grapherState = stateRef.current\n                if (!grapherState) return\n\n                // If the chart is a MultiDim, we have to update its settings directly\n                if (multiDimData) {\n                    const searchParams = new URLSearchParams()\n                    Object.entries(url.queryParams).forEach(([key, value]) => {\n                        if (value !== undefined) {\n                            searchParams.set(key, value)\n                        }\n                    })\n                    const choices = extractMultiDimChoicesFromSearchParams(\n                        searchParams,\n                        multiDimData.config\n                    )\n                    // MultiDim must set the query params itself only after it\n                    // sets the config of the selected view.\n                    multiDimData.onSettingsChange(choices, url.queryParams)\n                } else {\n                    // Update the grapher state with the new params (e.g. countries, tab, etc)\n                    runInAction(() => {\n                        grapherState.clearQueryParams()\n                        grapherState.populateFromQueryParams(url.queryParams)\n                    })\n                }\n                didUpdateChart = true\n            }\n\n            if (!didUpdateChart) return\n\n            analytics.logGuidedChartLinkClick(url.fullUrl)\n            announce(\"Chart updated to reflect the selected view.\")\n\n            // Scroll to chart if it's not already visible.\n            // Skip if the chart is sticky-positioned (it's already\n            // pinned in view by CSS).\n            // For multi-dim, scroll to the full container (including\n            // dropdowns), not just the grapher area inside it.\n            const chartElement =\n                multiDimData?.grapherContainerRef.current || chartRef.current\n            const target =\n                chartElement?.closest(\".multi-dim-container\") ?? chartElement\n            if (target) {\n                const isSticky = getComputedStyle(target).position === \"sticky\"\n                const rect = target.getBoundingClientRect()\n                const isFullyVisible =\n                    rect.top >= 0 && rect.bottom <= window.innerHeight\n                if (!isSticky && !isFullyVisible) {\n                    setTimeout(() => {\n                        target.scrollIntoView({\n                            behavior: getPrefersReducedMotion()\n                                ? \"auto\"\n                                : \"smooth\",\n                            block: \"nearest\",\n                        })\n                    }, 100)\n                }\n            }\n        },\n        [announce, applyGuidedChartLinkToArchive, multiDimData]\n    )\n\n    return (\n        <GuidedChartContext.Provider\n            value={{\n                registerGrapherState,\n                registerChartElement,\n                onGuidedChartLinkClick: handleGuidedChartLinkClick,\n                registerArchiveChart,\n                registerMultiDim: (registrationData: {\n                    config: MultiDimDataPageConfig\n                    onSettingsChange: (\n                        newSettings: MultiDimDimensionChoices,\n                        queryParams: GrapherQueryParams\n                    ) => void\n                    grapherContainerRef: React.RefObject<HTMLDivElement | null>\n                }) => {\n                    setMultiDimData(registrationData)\n                },\n            }}\n        >\n            <ArticleBlocks\n                blocks={d.content}\n                containerType={containerType}\n                shouldRenderLinks={shouldRenderLinks}\n                interactiveImages={interactiveImages}\n            />\n        </GuidedChartContext.Provider>\n    )\n}\n","import {\n    ARCHIVED_THUMBNAIL_FILENAME,\n    DEFAULT_THUMBNAIL_FILENAME,\n} from \"@ourworldindata/types\"\nimport {\n    EXPLORER_DYNAMIC_THUMBNAIL_URL,\n    GRAPHER_DYNAMIC_THUMBNAIL_URL,\n} from \"../../../settings/clientSettings.mjs\"\nimport Image from \"./Image\"\n\nexport const Thumbnail = ({\n    thumbnail,\n    className,\n}: {\n    thumbnail?: string\n    className?: string\n}) => {\n    if (!thumbnail)\n        return (\n            <img\n                src={`/${DEFAULT_THUMBNAIL_FILENAME}`}\n                className={className}\n                loading=\"lazy\"\n            />\n        )\n    if (\n        (GRAPHER_DYNAMIC_THUMBNAIL_URL &&\n            thumbnail.startsWith(GRAPHER_DYNAMIC_THUMBNAIL_URL)) ||\n        (EXPLORER_DYNAMIC_THUMBNAIL_URL &&\n            thumbnail.startsWith(EXPLORER_DYNAMIC_THUMBNAIL_URL)) ||\n        thumbnail.endsWith(ARCHIVED_THUMBNAIL_FILENAME) ||\n        thumbnail.endsWith(DEFAULT_THUMBNAIL_FILENAME)\n    ) {\n        return <img src={thumbnail} className={className} loading=\"lazy\" />\n    } else {\n        return (\n            <Image\n                filename={thumbnail}\n                containerType=\"thumbnail\"\n                className={className}\n            />\n        )\n    }\n}\n","import { ReactNode } from \"react\"\nimport { EnrichedHybridLink, Url } from \"@ourworldindata/utils\"\nimport { useLinkedChart, useLinkedDocument } from \"../utils\"\nimport { Thumbnail } from \"./Thumbnail\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faExternalLinkAlt } from \"@fortawesome/free-solid-svg-icons\"\n\ntype HybridLinkProps = EnrichedHybridLink & { shouldRenderLinks: boolean }\n\n/** A div instead of an <a> when links are off, e.g. inside a card that is\n * itself a link. */\nfunction HybridLinkTarget({\n    href,\n    shouldRenderLinks,\n    children,\n}: {\n    href: string\n    shouldRenderLinks: boolean\n    children: ReactNode\n}) {\n    if (!shouldRenderLinks) {\n        return <div className=\"hybrid-link-item__link\">{children}</div>\n    }\n    return (\n        <a className=\"hybrid-link-item__link\" href={href}>\n            {children}\n        </a>\n    )\n}\n\nfunction HybridGdocLink(props: HybridLinkProps) {\n    const { linkedDocument } = useLinkedDocument(props.url)\n\n    // Checking for slug, because url always contains https://ourworldindata.org\n    if (!linkedDocument?.slug) return null\n\n    const title = props.title || linkedDocument.title\n    const subtitle =\n        props.subtitle || linkedDocument.excerpt || linkedDocument.subtitle\n\n    return (\n        <li className=\"hybrid-link-item\">\n            <HybridLinkTarget\n                href={linkedDocument.url}\n                shouldRenderLinks={props.shouldRenderLinks}\n            >\n                <Thumbnail\n                    thumbnail={linkedDocument[\"featured-image\"]}\n                    className=\"hybrid-link-thumbnail\"\n                />\n                <div className=\"hybrid-link-item-text\">\n                    <h4>{title}</h4>\n                    <p>{subtitle}</p>\n                </div>\n            </HybridLinkTarget>\n        </li>\n    )\n}\n\nfunction HybridChartLink(props: HybridLinkProps) {\n    const { linkedChart } = useLinkedChart(props.url)\n    if (!linkedChart) return null\n\n    const title = props.title || linkedChart.title\n    const subtitle = props.subtitle || linkedChart.subtitle\n\n    return (\n        <li className=\"hybrid-link-item\">\n            <HybridLinkTarget\n                href={linkedChart.resolvedUrl}\n                shouldRenderLinks={props.shouldRenderLinks}\n            >\n                <Thumbnail\n                    thumbnail={linkedChart.thumbnail}\n                    className=\"hybrid-link-thumbnail\"\n                />\n                <div className=\"hybrid-link-item-text\">\n                    <h4>{title}</h4>\n                    <p>{subtitle}</p>\n                </div>\n            </HybridLinkTarget>\n        </li>\n    )\n}\n\nfunction HybridExternalLink(props: HybridLinkProps) {\n    return (\n        <li className=\"hybrid-link-item hybrid-link-item--external\">\n            <HybridLinkTarget\n                href={props.url}\n                shouldRenderLinks={props.shouldRenderLinks}\n            >\n                {props.thumbnail && (\n                    <Thumbnail\n                        thumbnail={props.thumbnail}\n                        className=\"hybrid-link-thumbnail\"\n                    />\n                )}\n                <div className=\"hybrid-link-item-text\">\n                    <h4>\n                        {props.title}\n                        <FontAwesomeIcon\n                            className=\"hybrid-link-item__external-icon\"\n                            icon={faExternalLinkAlt}\n                        />\n                    </h4>\n                    <p>{props.subtitle}</p>\n                </div>\n            </HybridLinkTarget>\n        </li>\n    )\n}\n\nexport function HybridLinkList({\n    links,\n    shouldRenderLinks = true,\n}: {\n    links: EnrichedHybridLink[]\n    shouldRenderLinks?: boolean\n}) {\n    return (\n        <ul className=\"hybrid-link-list\">\n            {links.map((link) => {\n                const url = Url.fromURL(link.url)\n                if (url.isGoogleDoc) {\n                    return (\n                        <HybridGdocLink\n                            {...link}\n                            key={link.url}\n                            shouldRenderLinks={shouldRenderLinks}\n                        />\n                    )\n                }\n                if (url.isGrapher || url.isExplorer) {\n                    return (\n                        <HybridChartLink\n                            {...link}\n                            key={link.url}\n                            shouldRenderLinks={shouldRenderLinks}\n                        />\n                    )\n                }\n                return (\n                    <HybridExternalLink\n                        {...link}\n                        key={link.url}\n                        shouldRenderLinks={shouldRenderLinks}\n                    />\n                )\n            })}\n        </ul>\n    )\n}\n","import cx from \"clsx\"\nimport { EnrichedBlockRecirc } from \"@ourworldindata/utils\"\nimport { HybridLinkList } from \"./HybridLinkList.js\"\n\nexport default function Recirc({\n    d,\n    className = \"\",\n}: {\n    d: EnrichedBlockRecirc\n    className?: string\n}) {\n    return (\n        <div className={cx(className, \"recirc\", `recirc--${d.align}`)}>\n            <span className=\"recirc__heading body-3-bold\">{d.title}</span>\n            <HybridLinkList links={d.links} />\n        </div>\n    )\n}\n","import cx from \"clsx\"\nimport { EnrichedBlockSubscribeBanner } from \"@ourworldindata/utils\"\nimport { Button } from \"@ourworldindata/components\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faEnvelopeOpenText } from \"@fortawesome/free-solid-svg-icons\"\nimport { IS_ARCHIVE } from \"../../../settings/clientSettings.mjs\"\nimport { PROD_URL } from \"../../SiteConstants.js\"\n\n// We don't archive the subscribe page.\nconst BASE_URL = IS_ARCHIVE ? PROD_URL : \"\"\n\nexport default function SubscribeBanner({\n    d,\n    className = \"\",\n}: {\n    d: EnrichedBlockSubscribeBanner\n    className?: string\n}) {\n    return (\n        <div\n            className={cx(\n                className,\n                \"subscribe-banner\",\n                `subscribe-banner--${d.align}`\n            )}\n        >\n            <div className=\"subscribe-banner__text\">\n                <div className=\"subscribe-banner__header\">\n                    <FontAwesomeIcon icon={faEnvelopeOpenText} />\n                    <h5 className=\"h4-semibold\">\n                        Subscribe to our newsletters\n                    </h5>\n                </div>\n                <p className=\"subscribe-banner__p body-3-medium\">\n                    We send two regular newsletters so you can stay up to date\n                    on our work and receive curated highlights from across Our\n                    World in Data.\n                </p>\n            </div>\n            <Button\n                className=\"subscribe-banner__button\"\n                theme=\"solid-vermillion\"\n                text=\"Subscribe\"\n                href={`${BASE_URL}/subscribe`}\n                icon={null}\n                dataTrackNote=\"subscribe_banner_subscribe\"\n            />\n        </div>\n    )\n}\n","import { EnrichedBlockList, EnrichedBlockText } from \"@ourworldindata/utils\"\nimport SpanElements from \"./SpanElements.js\"\n\nexport default function List({\n    d,\n    className = \"\",\n    shouldRenderLinks = true,\n}: {\n    d: EnrichedBlockList\n    className?: string\n    shouldRenderLinks?: boolean\n}) {\n    return (\n        <ul className={className}>\n            {d.items.map((_d: EnrichedBlockText, i: number) => {\n                return (\n                    <li key={i}>\n                        <SpanElements\n                            spans={_d.value}\n                            shouldRenderLinks={shouldRenderLinks}\n                        />\n                    </li>\n                )\n            })}\n        </ul>\n    )\n}\n","import {\n    EnrichedBlockNumberedList,\n    EnrichedBlockText,\n} from \"@ourworldindata/utils\"\nimport SpanElements from \"./SpanElements.js\"\n\nexport default function NumberedList({\n    d,\n    className = \"\",\n    shouldRenderLinks = true,\n}: {\n    d: EnrichedBlockNumberedList\n    className?: string\n    shouldRenderLinks?: boolean\n}) {\n    return (\n        <ol className={className}>\n            {d.items.map((_d: EnrichedBlockText, i: number) => {\n                return (\n                    <li key={i}>\n                        <SpanElements\n                            spans={_d.value}\n                            shouldRenderLinks={shouldRenderLinks}\n                        />\n                    </li>\n                )\n            })}\n        </ol>\n    )\n}\n","import * as React from \"react\"\nimport { EnrichedBlockSDGGrid } from \"@ourworldindata/utils\"\nimport cx from \"clsx\"\nimport { BAKED_BASE_URL } from \"../../../settings/clientSettings.mjs\"\n\nexport default function SDGGrid({\n    d,\n    className = \"\",\n}: {\n    d: EnrichedBlockSDGGrid\n    className?: string\n}) {\n    return (\n        <ul className={cx(\"sdg-grid\", className)}>\n            {d.items.map((tile: { goal: string; link: string }, i: number) => {\n                return (\n                    <SDGTile\n                        key={i}\n                        number={i + 1}\n                        goal={tile.goal}\n                        link={tile.link}\n                    />\n                )\n            })}\n        </ul>\n    )\n}\n\nconst SDGTile = ({\n    number,\n    goal,\n    link,\n}: {\n    number: number\n    goal: string\n    link: string\n}) => {\n    const sdgNumberPadded = number.toString().padStart(2, \"0\")\n    const sdgIconUrl = `${BAKED_BASE_URL}/images/sdg-icons/sdg-icon-${sdgNumberPadded}.svg`\n\n    return (\n        <li\n            className=\"span-cols-2 span-lg-cols-4 span-sm-cols-8 col-sm-start-3\"\n            style={\n                {\n                    \"--sdg-color\": `var(--sdg-color-${number})`,\n                } as React.CSSProperties\n            }\n            key={number}\n        >\n            <a href={link}>\n                <div\n                    className=\"sdg-grid__icon\"\n                    style={{\n                        mask: `url(${sdgIconUrl}) no-repeat center`,\n                        WebkitMask: `url(${sdgIconUrl}) no-repeat center`,\n                    }}\n                />\n                <h4 className=\"overline-black-caps\">SDG {number}</h4>\n                <span className=\"h3-bold goal\">{goal}</span>\n            </a>\n        </li>\n    )\n}\n","import cx from \"clsx\"\nimport * as React from \"react\"\n\nexport default function People({\n    className,\n    columns,\n    children,\n}: {\n    className?: string\n    columns?: \"2\" | \"4\"\n    children: React.ReactNode\n}) {\n    return (\n        <div\n            className={cx(\n                \"people\",\n                {\n                    \"people-cols-2 grid-cols-2 grid-md-cols-1\": columns === \"2\",\n                    \"people-cols-4 grid-cols-4 grid-lg-cols-2 grid-sm-cols-1\":\n                        columns === \"4\",\n                },\n                className\n            )}\n        >\n            {children}\n        </div>\n    )\n}\n","import { TocHeadingWithSupertitle } from \"@ourworldindata/utils\"\nimport { faArrowDown, faPlus, faMinus } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport cx from \"clsx\"\n\nexport default function SDGTableOfContents({\n    toc,\n    className = \"\",\n    title,\n}: {\n    toc: TocHeadingWithSupertitle[]\n    className?: string\n    title: string\n}) {\n    return (\n        <nav className={cx(className, \"sdg-toc\")}>\n            <details className=\"sdg-toc__details-wrapper span-cols-6 span-md-cols-8 span-sm-cols-10\">\n                <summary\n                    className=\"sdg-toc__toggle\"\n                    aria-label=\"Toggle table of contents\"\n                    data-track-note=\"toc_toggle\"\n                >\n                    <span>{title}</span>\n                    <span className=\"sdg-toc__toggle-icon\">\n                        <FontAwesomeIcon\n                            className=\"icon-closed\"\n                            icon={faPlus}\n                        />\n                        <FontAwesomeIcon className=\"icon-open\" icon={faMinus} />\n                    </span>\n                </summary>\n                <div className=\"sdg-toc__content\">\n                    <ul>\n                        {toc.map(\n                            (\n                                { title, supertitle, isSubheading, slug },\n                                i: number\n                            ) => (\n                                <li\n                                    key={i}\n                                    className={\n                                        isSubheading ? \"subsection\" : \"section\"\n                                    }\n                                >\n                                    <a\n                                        href={`#${slug}`}\n                                        data-track-note=\"toc_link\"\n                                    >\n                                        {supertitle ? (\n                                            <span className=\"supertitle\">\n                                                {supertitle}\n                                            </span>\n                                        ) : null}\n                                        {title}\n                                    </a>\n                                    {!isSubheading && (\n                                        <FontAwesomeIcon icon={faArrowDown} />\n                                    )}\n                                </li>\n                            )\n                        )}\n                    </ul>\n                </div>\n            </details>\n        </nav>\n    )\n}\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faCircleInfo } from \"@fortawesome/free-solid-svg-icons\"\n\nexport const MissingData = ({ className }: { className?: string }) => (\n    <div className={className}>\n        <h4>\n            <FontAwesomeIcon icon={faCircleInfo} />\n            No data for this indicator\n        </h4>\n        <p>\n            We are currently not aware of data for this indicator. You can\n            notify us of available data for this indicator via our{\" \"}\n            <a href=\"/feedback\">feedback form</a>.\n        </p>\n    </div>\n)\n","import { Span } from \"@ourworldindata/utils\"\nimport SpanElements from \"./SpanElements.js\"\nimport { faArrowRight } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\n\n// A little wrapper to nest the SVG inside the <a> tag.\n// We do this so that :visited styles apply,\n// because a:visited + svg { fill: $purple-60 } doesn't work\n// due to security countermeasures: https://hacks.mozilla.org/2010/03/privacy-related-changes-coming-to-css-vistited/\nfunction AdditionalChartsLink({ item }: { item: Span[] }) {\n    if (item.length === 1 && item[0].spanType === \"span-link\") {\n        return (\n            <a href={item[0].url}>\n                <SpanElements spans={item[0].children} />{\" \"}\n                <FontAwesomeIcon icon={faArrowRight} />\n            </a>\n        )\n    }\n    return null\n}\n\nexport const AdditionalCharts = ({\n    items,\n    className,\n}: {\n    items: Span[][]\n    className?: string\n}) => {\n    return (\n        <div className={className}>\n            <h4>Additional charts</h4>\n            <ul>\n                {items.map((item, i) => (\n                    <li key={i}>\n                        <AdditionalChartsLink item={item} />\n                    </li>\n                ))}\n            </ul>\n        </div>\n    )\n}\n","import cx from \"clsx\"\nimport { HybridLinkList } from \"./HybridLinkList.js\"\nimport { useLinkedChart, useLinkedDocument } from \"../utils.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\nimport { BlockErrorFallback } from \"./BlockErrorBoundary.js\"\n\nexport const ProminentLink = (props: {\n    url: string\n    className: string\n    title?: string\n    description?: string\n    thumbnail?: string\n    shouldRenderLinks?: boolean\n}) => {\n    const { errorMessage: documentErrorMessage } = useLinkedDocument(props.url)\n    const { errorMessage: linkedChartErrorMessage } = useLinkedChart(props.url)\n    const errorMessage = documentErrorMessage || linkedChartErrorMessage\n    const { isPreviewing } = useDocumentContext()\n\n    if (errorMessage) {\n        if (isPreviewing) {\n            return (\n                <div className={props.className}>\n                    <BlockErrorFallback\n                        className=\"span-cols-6 span-md-cols-10 span-sm-cols-12\"\n                        error={{\n                            name: \"Error with prominent link\",\n                            message: `${errorMessage} This block won't render when the page is published`,\n                        }}\n                    />\n                </div>\n            )\n        } else return null\n    }\n\n    return (\n        <div className={cx(\"prominent-link\", props.className)}>\n            <HybridLinkList\n                links={[\n                    // Map the prominent link props to a single hybrid link\n                    {\n                        url: props.url,\n                        title: props.title,\n                        subtitle: props.description,\n                        thumbnail: props.thumbnail,\n                        type: \"hybrid-link\",\n                    },\n                ]}\n                shouldRenderLinks={props.shouldRenderLinks}\n            />\n        </div>\n    )\n}\n","import { useRef, useState } from \"react\"\nimport * as React from \"react\"\nimport cx from \"clsx\"\n\nexport const ExpandableParagraph = (\n    props:\n        | {\n              children: React.ReactNode\n              dangerouslySetInnerHTML?: undefined\n              className?: string\n              buttonVariant?: \"slim\" | \"full\"\n          }\n        | {\n              children?: undefined\n              dangerouslySetInnerHTML: {\n                  __html: string\n              }\n              className?: string\n              buttonVariant?: \"slim\" | \"full\"\n          }\n) => {\n    const CLOSED_HEIGHT = 100\n    const BUTTON_HEIGHT = 40\n    const [isClosed, setIsClosed] = useState(true)\n    const containerRef = useRef<HTMLDivElement>(null)\n    const buttonRef = useRef<HTMLButtonElement>(null)\n\n    const { className, buttonVariant = \"full\", ...propsWithoutStyles } = props\n\n    const toggleExpanded = () => {\n        const currentContainer = containerRef.current\n        const currentButton = buttonRef.current\n        if (!isClosed) {\n            if (currentContainer && currentButton) {\n                const containerTop =\n                    currentContainer.getBoundingClientRect().top\n                const buttonTop = currentButton.getBoundingClientRect().top\n                window.scrollTo({\n                    top:\n                        window.scrollY +\n                        containerTop -\n                        buttonTop +\n                        CLOSED_HEIGHT +\n                        BUTTON_HEIGHT / 2,\n                    behavior: \"auto\",\n                })\n            }\n            setIsClosed(true)\n        } else {\n            setIsClosed(false)\n        }\n    }\n\n    return (\n        <div className={cx(\"expandable-paragraph\", className)}>\n            <div\n                // inert prevents focus on elements that are not visible\n                // ideally would only apply to elements below the fold but that's hard\n                inert={isClosed}\n                ref={containerRef}\n                // Either pass children or dangerouslySetInnerHTML\n                {...propsWithoutStyles}\n                className={cx(\"expandable-paragraph__content\", {\n                    \"expandable-paragraph__content--closed\": isClosed,\n                })}\n            />\n\n            <button\n                aria-label=\"Expand paragraph\"\n                className={cx(\n                    \"expandable-paragraph__expand-button\",\n                    `expandable-paragraph__expand-button--${buttonVariant}`\n                )}\n                style={{\n                    height: BUTTON_HEIGHT,\n                }}\n                onClick={toggleExpanded}\n                ref={buttonRef}\n            >\n                {isClosed ? \"Show more\" : \"Show less\"}\n            </button>\n        </div>\n    )\n}\n","import { FEATURE_FLAGS, Features } from \"../settings/clientSettings.mjs\"\n\nexport function hasTopicNewsletterCard(\n    topicArea: string | undefined\n): topicArea is string {\n    return !!topicArea && FEATURE_FLAGS.includes(Features.EmailNotifications)\n}\n","import cx from \"clsx\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faBell, faEnvelopeOpenText } from \"@fortawesome/free-solid-svg-icons\"\nimport { Button } from \"@ourworldindata/components\"\nimport { LatestUrlParam } from \"@ourworldindata/types\"\nimport { IS_ARCHIVE } from \"../settings/clientSettings.mjs\"\nimport { PROD_URL } from \"./SiteConstants.js\"\nimport { hasTopicNewsletterCard } from \"./topicNewsletter.js\"\n\n// We don't archive the subscribe page.\nconst BASE_URL = IS_ARCHIVE ? PROD_URL : \"\"\n\n/** Where the card sits, so analytics can tell the placements apart. */\nexport type TopicNewsletterCardPlacement =\n    | \"topic_page\"\n    | \"latest\"\n    | \"grapher_page\"\n    | \"datapage_metadata\"\n    | \"about_this_data\"\n\nexport default function TopicNewsletterCard({\n    topicArea,\n    placement,\n    pageType = \"topic\",\n    variant = \"wide\",\n    className,\n}: {\n    topicArea?: string\n    placement: TopicNewsletterCardPlacement\n    pageType?: \"topic\" | \"chart\"\n    /** \"narrow\" drops \"Subscribe to\" from the copy for ~300px-wide slots. */\n    variant?: \"wide\" | \"narrow\"\n    className?: string\n}) {\n    if (!hasTopicNewsletterCard(topicArea)) return null\n\n    const heading =\n        pageType === \"chart\"\n            ? \"Interested in this chart?\"\n            : \"Interested in this topic?\"\n\n    return (\n        <div className={cx(\"topic-newsletter-card\", className)}>\n            <div className=\"topic-newsletter-card__header\">\n                <FontAwesomeIcon icon={faBell} />\n                <h3 className=\"topic-newsletter-card__heading h4-semibold\">\n                    {heading}\n                </h3>\n            </div>\n            <p className=\"topic-newsletter-card__p body-3-medium\">\n                {variant === \"narrow\"\n                    ? \"Get email updates on all our work about\"\n                    : \"Subscribe to get email updates on all our work about\"}{\" \"}\n                <strong>{topicArea}</strong>.\n            </p>\n            <Button\n                className=\"topic-newsletter-card__button\"\n                theme=\"outline-vermillion\"\n                text=\"Subscribe\"\n                icon={faEnvelopeOpenText}\n                iconPosition=\"left\"\n                href={`${BASE_URL}/subscribe?${new URLSearchParams({ [LatestUrlParam.TOPICS]: topicArea })}`}\n                dataTrackNote={`topic_newsletter_subscribe_${placement}`}\n            />\n        </div>\n    )\n}\n","import { useContext } from \"react\"\nimport {\n    EnrichedTopicPageIntroRelatedTopic,\n    EnrichedBlockTopicPageIntro,\n    getTopicPageHeading,\n} from \"@ourworldindata/utils\"\nimport { useLinkedDocument } from \"../utils.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\nimport { AttachmentsContext } from \"../AttachmentsContext.js\"\nimport Paragraph from \"./Paragraph.js\"\nimport TopicNewsletterCard from \"../../TopicNewsletterCard.js\"\n\ntype TopicPageIntroProps = EnrichedBlockTopicPageIntro & {\n    className?: string\n}\n\nfunction TopicPageRelatedTopic({\n    text,\n    url,\n}: EnrichedTopicPageIntroRelatedTopic) {\n    const { linkedDocument, errorMessage } = useLinkedDocument(url)\n    const { isPreviewing } = useDocumentContext()\n    if (errorMessage && isPreviewing) {\n        return <li>{errorMessage}</li>\n    }\n    const topicText = linkedDocument?.title || text\n    const topicUrl = linkedDocument?.url ?? url\n    return (\n        <li>\n            <a href={topicUrl}>{topicText}</a>\n        </li>\n    )\n}\n\nexport function TopicPageIntro(props: TopicPageIntroProps) {\n    const { topicArea } = useContext(AttachmentsContext)\n    const { gdocType } = useDocumentContext()\n    const heading = getTopicPageHeading(\"relatedTopics\", gdocType)\n\n    return (\n        <div className={props.className} id=\"introduction\">\n            <div className=\"topic-page-intro__content body-1-regular span-cols-6 span-md-cols-8 span-sm-cols-12\">\n                {props.content.map((text, i) => (\n                    <Paragraph d={text} key={i} />\n                ))}\n            </div>\n            <div className=\"topic-page-intro__links col-start-9 span-cols-4 col-md-start-1 span-md-cols-12\">\n                <TopicNewsletterCard\n                    topicArea={topicArea}\n                    placement=\"topic_page\"\n                    className=\"topic-newsletter-card--topic-page-intro\"\n                />\n                {props.downloadButton ? (\n                    <div className=\"topic-page-intro__download-button\">\n                        <a href={props.downloadButton.url}>\n                            {props.downloadButton.text}\n                        </a>\n                    </div>\n                ) : null}\n                {props.relatedTopics?.length ? (\n                    <aside className=\"topic-page-intro__related-topics\">\n                        <h4 className=\"overline-black-caps\">{heading}</h4>\n                        <ul>\n                            {props.relatedTopics.map((relatedTopic) => (\n                                <TopicPageRelatedTopic\n                                    key={relatedTopic.url}\n                                    {...relatedTopic}\n                                />\n                            ))}\n                        </ul>\n                    </aside>\n                ) : null}\n            </div>\n        </div>\n    )\n}\n","import e from\"react\";const t=\"react-horizontal-scrolling-menu\",n=`${t}--item`,o=`${t}--scroll-container`,r=`${t}--wrapper`,s=`${t}--inner-wrapper`,i=`${t}--header`,l=`${t}--arrow-left`,a=`${t}--arrow-right`,u=`${t}--footer`,c=\"itemId\",d=\"data-key\",h=\"data-index\",f={first:\"first\",last:\"last\",onInit:\"onInit\",onUpdate:\"onUpdate\"},v=\"\",m={current:null};var p=Object.freeze({__proto__:null,rootClassName:t,itemClassName:n,scrollContainerClassName:o,wrapperClassName:r,innerWrapperClassName:s,headerClassName:i,arrowLeftClassName:l,arrowRightClassName:a,footerClassName:u,id:c,dataKeyAttribute:d,dataIndexAttribute:h,events:f,emptyStr:v,emptyRef:m});class b{constructor(){this.subscribe=(e,t)=>{this.observers.set(e,(this.observers.get(e)||[]).concat(t))},this.unsubscribe=(e,t)=>{const n=(this.observers.get(e)||[]).filter((e=>e!==t));n.length?this.observers.set(e,n):this.observers.delete(e)},this.emitUpdates=(e,t)=>{const n=this.observers.get(e)||[];null==n||n.forEach((e=>e(t)))},this.updateBatch=(e,t=!0)=>{e.length&&(e.forEach((([e,t])=>this.emitUpdates(e,t))),t&&this.emitUpdates(f.onUpdate))},this.update=(e,t)=>{this.emitUpdates(e,t),this.emitUpdates(f.onUpdate)},this.observers=new Map}}class g extends Map{constructor(){super(),this.subscribe=(e,t)=>this.observer.subscribe(e,t),this.unsubscribe=(e,t)=>this.observer.unsubscribe(e,t),this.isEdgeItem=({key:e,value:t,first:n=this.first(),last:o=this.last()})=>{const r=[];return e===(null==n?void 0:n.key)?r.push([f.first,t]):e===(null==o?void 0:o.key)&&r.push([f.last,t]),r},this.edgeItemsCheck=e=>{const t=this.first(),n=this.last(),o=e.find((([e])=>e===(null==t?void 0:t.key))),r=[];o&&r.push([f.first,o[1]]);const s=e.find((([e])=>e===(null==n?void 0:n.key)));return s&&r.push([f.last,s[1]]),r},this.toArr=()=>this.sort([...this]),this.toItems=()=>this.toArr().map((([e])=>e)),this.sort=e=>e.sort((([,e],[,t])=>+e.index-+t.index)),this.set=(e,t)=>{const n=String(e),o=[[n,t]];return super.set(n,t),o.push(...this.isEdgeItem({key:n,value:t,first:this.first(),last:this.last()})),this.observer.updateBatch(o),this},this.setBatch=e=>{this.firstRun&&this.observer.update(f.onInit);const t=[...e];return this.sort(t).forEach((([e,t])=>{super.set(String(e),t)})),t.push(...this.edgeItemsCheck(t)),this.observer.updateBatch(t,!this.firstRun),this.firstRun=!1,this},this.first=()=>{var e;return null===(e=this.toArr()[0])||void 0===e?void 0:e[1]},this.last=()=>{var e,t;return null===(t=null===(e=this.toArr().slice(-1))||void 0===e?void 0:e[0])||void 0===t?void 0:t[1]},this.filter=e=>this.toArr().filter(e),this.find=e=>this.toArr().find(e),this.findIndex=e=>this.toArr().findIndex(e),this.getCurrentPos=e=>{const t=this.toArr(),n=t.findIndex((([t,n])=>t===e||n===e));return[t,n]},this.prev=e=>{var t;const[n,o]=this.getCurrentPos(e);return-1!==o?null===(t=n[o-1])||void 0===t?void 0:t[1]:void 0},this.next=e=>{var t;const[n,o]=this.getCurrentPos(e);return-1!==o?null===(t=n[o+1])||void 0===t?void 0:t[1]:void 0},this.getVisible=()=>this.filter((e=>e[1].visible)),this.observer=new b,this.firstRun=!0}}const y=e=>\"object\"==typeof e&&null!=e&&1===e.nodeType,w=(e,t)=>(!t||\"hidden\"!==e)&&\"visible\"!==e&&\"clip\"!==e,E=(e,t)=>{if(e.clientHeight<e.scrollHeight||e.clientWidth<e.scrollWidth){const n=getComputedStyle(e,null);return w(n.overflowY,t)||w(n.overflowX,t)||(e=>{const t=(e=>{if(!e.ownerDocument||!e.ownerDocument.defaultView)return null;try{return e.ownerDocument.defaultView.frameElement}catch(e){return null}})(e);return!!t&&(t.clientHeight<e.scrollHeight||t.clientWidth<e.scrollWidth)})(e)}return!1},M=(e,t,n,o,r,s,i,l)=>s<e&&i>t||s>e&&i<t?0:s<=e&&l<=n||i>=t&&l>=n?s-e-o:i>t&&l<n||s<e&&l>n?i-t+r:0,C=e=>{const t=e.parentElement;return null==t?e.getRootNode().host||null:t},I=(e,t)=>{var n,o,r,s;if(\"undefined\"==typeof document)return[];const{scrollMode:i,block:l,inline:a,boundary:u,skipOverflowHiddenElements:c}=t,d=\"function\"==typeof u?u:e=>e!==u;if(!y(e))throw new TypeError(\"Invalid target\");const h=document.scrollingElement||document.documentElement,f=[];let v=e;for(;y(v)&&d(v);){if(v=C(v),v===h){f.push(v);break}null!=v&&v===document.body&&E(v)&&!E(document.documentElement)||null!=v&&E(v,c)&&f.push(v)}const m=null!=(o=null==(n=window.visualViewport)?void 0:n.width)?o:innerWidth,p=null!=(s=null==(r=window.visualViewport)?void 0:r.height)?s:innerHeight,{scrollX:b,scrollY:g}=window,{height:w,width:I,top:x,right:k,bottom:N,left:S}=e.getBoundingClientRect(),{top:R,right:$,bottom:O,left:B}=(e=>{const t=window.getComputedStyle(e);return{top:parseFloat(t.scrollMarginTop)||0,right:parseFloat(t.scrollMarginRight)||0,bottom:parseFloat(t.scrollMarginBottom)||0,left:parseFloat(t.scrollMarginLeft)||0}})(e);let T=\"start\"===l||\"nearest\"===l?x-R:\"end\"===l?N+O:x+w/2-R+O,W=\"center\"===a?S+I/2-B+$:\"end\"===a?k+$:S-B;const j=[];for(let e=0;e<f.length;e++){const t=f[e],{height:n,width:o,top:r,right:s,bottom:u,left:c}=t.getBoundingClientRect();if(\"if-needed\"===i&&x>=0&&S>=0&&N<=p&&k<=m&&x>=r&&N<=u&&S>=c&&k<=s)return j;const d=getComputedStyle(t),v=parseInt(d.borderLeftWidth,10),y=parseInt(d.borderTopWidth,10),E=parseInt(d.borderRightWidth,10),C=parseInt(d.borderBottomWidth,10);let R=0,$=0;const O=\"offsetWidth\"in t?t.offsetWidth-t.clientWidth-v-E:0,B=\"offsetHeight\"in t?t.offsetHeight-t.clientHeight-y-C:0,A=\"offsetWidth\"in t?0===t.offsetWidth?0:o/t.offsetWidth:0,L=\"offsetHeight\"in t?0===t.offsetHeight?0:n/t.offsetHeight:0;if(h===t)R=\"start\"===l?T:\"end\"===l?T-p:\"nearest\"===l?M(g,g+p,p,y,C,g+T,g+T+w,w):T-p/2,$=\"start\"===a?W:\"center\"===a?W-m/2:\"end\"===a?W-m:M(b,b+m,m,v,E,b+W,b+W+I,I),R=Math.max(0,R+g),$=Math.max(0,$+b);else{R=\"start\"===l?T-r-y:\"end\"===l?T-u+C+B:\"nearest\"===l?M(r,u,n,y,C+B,T,T+w,w):T-(r+n/2)+B/2,$=\"start\"===a?W-c-v:\"center\"===a?W-(c+o/2)+O/2:\"end\"===a?W-s+E+O:M(c,s,o,v,E+O,W,W+I,I);const{scrollLeft:e,scrollTop:i}=t;R=0===L?0:Math.max(0,Math.min(i+R/L,t.scrollHeight-n/L+B)),$=0===A?0:Math.max(0,Math.min(e+$/A,t.scrollWidth-o/A+O)),T+=i-R,W+=e-$}j.push({el:t,top:R,left:$})}return j};function x(e,t){if(!e.isConnected||!(e=>{let t=e;for(;t&&t.parentNode;){if(t.parentNode===document)return!0;t=t.parentNode instanceof ShadowRoot?t.parentNode.host:t.parentNode}return!1})(e))return;const n=(e=>{const t=window.getComputedStyle(e);return{top:parseFloat(t.scrollMarginTop)||0,right:parseFloat(t.scrollMarginRight)||0,bottom:parseFloat(t.scrollMarginBottom)||0,left:parseFloat(t.scrollMarginLeft)||0}})(e);if((e=>\"object\"==typeof e&&\"function\"==typeof e.behavior)(t))return t.behavior(I(e,t));const o=\"boolean\"==typeof t||null==t?void 0:t.behavior;for(const{el:r,top:s,left:i}of I(e,(e=>!1===e?{block:\"end\",inline:\"nearest\"}:(e=>e===Object(e)&&0!==Object.keys(e).length)(e)?e:{block:\"start\",inline:\"nearest\"})(t))){const e=s-n.top+n.bottom,t=i-n.left+n.right;r.scroll({top:e,left:t,behavior:o})}}let k;const N=()=>(k||(k=\"performance\"in window?performance.now.bind(performance):Date.now),k());function S(e){const t=N(),n=Math.min((t-e.startTime)/e.duration,1),o=e.ease(n),r=e.startX+(e.x-e.startX)*o,s=e.startY+(e.y-e.startY)*o;e.method(r,s,n,o),r!==e.x||s!==e.y?requestAnimationFrame((()=>S(e))):e.cb()}function R(e,t,n){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:600,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:e=>1+--e*e*e*e*e,s=arguments.length>5?arguments[5]:void 0,i=arguments.length>6?arguments[6]:void 0;const l=e,a=e.scrollLeft,u=e.scrollTop;S({scrollable:l,method:(t,n,o,r)=>{const s=Math.ceil(t),l=Math.ceil(n);e.scrollLeft=s,e.scrollTop=l,null==i||i({target:e,elapsed:o,value:r,left:s,top:l})},startTime:N(),startX:a,startY:u,x:t,y:n,duration:o,ease:r,cb:s})}const $=function(e,t){const n=t||{};return(e=>e&&!e.behavior||\"smooth\"===e.behavior)(n)?x(e,{block:n.block,inline:n.inline,scrollMode:n.scrollMode,boundary:n.boundary,skipOverflowHiddenElements:n.skipOverflowHiddenElements,behavior:e=>Promise.all(e.reduce(((e,t)=>{let{el:o,left:r,top:s}=t;const i=o.scrollLeft,l=o.scrollTop;return i===r&&l===s?e:[...e,new Promise((e=>R(o,r,s,n.duration,n.ease,(()=>e({el:o,left:[i,r],top:[l,s]})),n.onScrollChange)))]}),[]))}):Promise.resolve(x(e,t))},O=e=>Object.values(e).map((e=>e.current)).filter(Boolean);function B(e,t,n,o,r,s){var i;const l=(null===(i=null==e?void 0:e.entry)||void 0===i?void 0:i.target)||e;if(!l)return;const a={behavior:t||\"smooth\",inline:n||\"end\",block:o||\"nearest\"};return s?l.scrollIntoView(a):$(l,Object.assign(Object.assign({},r),a))}const T=e=>document.querySelector(`[${d}='${e}']`),W=e=>document.querySelector(`[${h}='${e}']`);function j(t){return e.isValidElement(t)&&t||\"function\"==typeof t&&e.createElement(t,null)||!!t&&\"object\"==typeof t&&e.createElement(t,null)||null}const A=e=>{var t;return String((null===(t=null==e?void 0:e.props)||void 0===t?void 0:t[c])||((null==e?void 0:e.key)||v).replace(/^\\.\\$/,v))};function L(e){return!!e&&Object.prototype.hasOwnProperty.call(e,\"current\")}var V=e.memo((function({children:t,className:n,id:o,index:r,refs:s}){const i=e.useRef(null);return s[String(r)]=i,e.createElement(\"div\",{className:n,[d]:o,[h]:r,ref:i},t)}));function H({children:t,itemClassName:o=v,refs:r}){const s=e.Children.toArray(t).filter(Boolean),i=e.useMemo((()=>`${n} ${o}`),[o]);return s.map(((t,n)=>{const o=A(t);return e.createElement(V,{className:i,id:o,key:o,refs:r,index:n},t)}))}function U({className:t=v,children:n,onScroll:r=(()=>{}),scrollRef:s,containerRef:i}){const l=e.useMemo((()=>`${o} ${t}`),[t]),a=e.useCallback((e=>{L(s)?s.current=e:s(e),L(i)?i.current=e:i(e)}),[s,i]);return e.createElement(\"div\",{className:l,onScroll:r,ref:a},n)}const F=e.createContext({});const P=e=>{var t;const n=e[Math.floor(e.length/2)];return{first:null==e?void 0:e[0],center:n,last:null===(t=e.slice(-1))||void 0===t?void 0:t[0]}},D=\"undefined\"!=typeof window?e.useLayoutEffect:e.useEffect;function X({items:t,itemsChanged:n,refs:o,options:r}){const s=e.useRef(),i=e.useCallback((e=>{t.setBatch(function(e,t){return[...e].map((e=>{var n,o,r,s;const i=e.target,l=String(null!==(o=null===(n=null==i?void 0:i.dataset)||void 0===n?void 0:n.key)&&void 0!==o?o:v);return[l,{index:String(null!==(s=null===(r=null==i?void 0:i.dataset)||void 0===r?void 0:r.index)&&void 0!==s?s:v),key:l,entry:e,visible:e.intersectionRatio>=t.ratio}]}))}(e,r))}),[t,r]);D((()=>{const e=O(o),t=s.current||new IntersectionObserver(i,r);return s.current=t,e.forEach((e=>t.observe(e))),()=>{t.disconnect(),s.current=void 0}}),[i,n,r,o])}const Y=t=>e.Children.toArray(t).map(A).filter(Boolean);const _={ratio:.9,rootMargin:\"5px\",threshold:[.05,.5,.75,.95]};function q(e,t){return{prev:()=>function(e,t){const n=e.findIndex((e=>e===(null==t?void 0:t[0]))),o=t.length,r=n-o,s=r<0,i=s?0:r,l=e.slice(i,s?o:n);return l.length===o?l:e.slice(n,o)}(e,t),next:()=>function(e,t){const n=e.findIndex((e=>{var n;return e===(null===(n=t.slice(-1))||void 0===n?void 0:n[0])})),o=t.length,r=n+o+1,s=r>e.length-1,i=s?e.length-1:r,l=e.slice(s?i-o+1:n+1,i);return l.length===o?l:e.slice(e.length-o,e.length+o)}(e,t)}}const z={current:{}},K=()=>{};function G({LeftArrow:t,RightArrow:n,children:o,Header:c,Footer:d,transitionDuration:h=500,transitionBehavior:p,onInit:b=K,onUpdate:y=K,onMouseDown:w,onMouseLeave:E,onMouseUp:M,onMouseMove:C,onScroll:I=K,onTouchMove:x,onTouchStart:k,onTouchEnd:N,onWheel:S=K,options:R=_,scrollContainerClassName:$=v,containerRef:O=m,itemClassName:A=v,wrapperClassName:V=v,apiRef:P=z,RTL:q,noPolyfill:G=!0}){const J=j(t),Q=j(n),Z=j(c),ee=j(d),te=e.useRef(null),[ne]=e.useState({}),oe=e.useMemo((()=>Object.assign(Object.assign(Object.assign({},_),R),{root:te.current})),[R]),re=e.useRef(new g).current,se=function(t,n){const[o,r]=e.useState(v),s=e.useMemo((()=>Y(t)),[t]);return e.useEffect((()=>{const e=s.filter(Boolean).join(v);n.toItems().filter((e=>!s.includes(e))).forEach((e=>{n.delete(e)})),r(e)}),[s,n]),o}(o,re),ie=((t,n)=>{const o=e.useRef(!0),r=e.useMemo((()=>[n-.05,n-.01,n,n+.01,n+.05]),[n]),s=e.useCallback((e=>{var t;o.current=(null===(t=null==e?void 0:e[0])||void 0===t?void 0:t.intersectionRatio)>=n}),[n]);return D((()=>{const e=new IntersectionObserver(s,{threshold:r,rootMargin:\"0px\"});return t.current&&e.observe(t.current),()=>e.disconnect()}),[o,t,s,r]),o})(te,oe.ratio+.05<1?oe.ratio+.05:.95);X(e.useMemo((()=>({items:re,itemsChanged:se,options:oe,refs:ne})),[re,se,ne,oe]));const le=e.useMemo((()=>function(t,n,o,r){var s,i,l;const a=(n,o=!1)=>{const[r,s]=e.useState(o),i=e.useCallback((e=>{s(!!(null==e?void 0:e.visible))}),[]);return e.useEffect((()=>(t.subscribe(n,i),()=>{t.unsubscribe(n,i)})),[n,i]),r},u=!!(null===(s=t.first())||void 0===s?void 0:s.visible),c=!!(null===(i=t.last())||void 0===i?void 0:i.visible),d=e=>{var n;return null===(n=t.find((t=>t[1].key===String(e))))||void 0===n?void 0:n[1]},h=()=>{var e,n;const o=null===(n=null===(e=t.getVisible())||void 0===e?void 0:e[0])||void 0===n?void 0:n[1];return o?t.prev(o):void 0},f=()=>{var e;const n=null===(e=t.getVisible().findLast((()=>!0)))||void 0===e?void 0:e[1];return n?t.next(n):void 0},v=null===(l=null==o?void 0:o.boundary)||void 0===l?void 0:l.current;return{getItemById:d,getItemElementById:T,getItemByIndex:e=>{var n;return null===(n=t.find((t=>String(t[1].index)===String(e))))||void 0===n?void 0:n[1]},getItemElementByIndex:W,getNextElement:f,getPrevElement:h,isFirstItemVisible:u,isItemVisible:e=>t.getVisible().map((e=>e[0])).includes(String(e)),isLastItem:e=>t.last()===d(e),isLastItemVisible:c,scrollNext:(e,t,n,{duration:s,boundary:i=v}={})=>{const l=null!=e?e:null==o?void 0:o.behavior;return B(f(),l,t||\"start\",n||\"nearest\",{boundary:i,duration:null!=s?s:null==o?void 0:o.duration},r)},scrollPrev:(e,t,n,{duration:s,boundary:i=v}={})=>{const l=null!=e?e:null==o?void 0:o.behavior;return B(h(),l,t||\"end\",n||\"nearest\",{boundary:i,duration:null!=s?s:null==o?void 0:o.duration},r)},useIsVisible:a,useLeftArrowVisible:()=>{const t=a(\"first\",!0),[o,r]=e.useState(t);return e.useEffect((()=>{n.current&&r(t)}),[t]),o},useRightArrowVisible:()=>{const t=a(\"last\",!1),[o,r]=e.useState(t);return e.useEffect((()=>{n.current&&r(t)}),[t]),o},scrollToItem:(e,t,n,s,i)=>{var l;return B(e,null!=t?t:null==o?void 0:o.behavior,n,s,Object.assign(Object.assign({boundary:v},i),{duration:null!==(l=null==i?void 0:i.duration)&&void 0!==l?l:null==o?void 0:o.duration}),r)}}}(re,ie,{duration:h,behavior:p,boundary:te},G)),[re,h,p,G,ie]),ae=e.useCallback((()=>Object.assign(Object.assign({},le),{items:re,scrollContainer:te,menuVisible:ie})),[le,re,te,ie]),[ue,ce]=e.useState((()=>ae()));(({context:t,onInit:n,onUpdate:o})=>{const r=e.useCallback((()=>n(t)),[n,t]),s=e.useCallback((()=>o(t)),[o,t]),{items:i}=t;e.useEffect((()=>(i.subscribe(f.onInit,r),i.subscribe(f.onUpdate,s),()=>{i.unsubscribe(f.onInit,r),i.unsubscribe(f.onUpdate,s)})),[i,r,s])})({context:ue,onInit:b,onUpdate:y}),e.useEffect((()=>ce(ae())),[ae]),e.useEffect((()=>{L(P)?P.current=ue:P(ue)}),[ue,P]);const de=e.useCallback((e=>I(ue,e)),[I,ue]),he=e.useCallback((e=>S(ue,e)),[S,ue]),fe=e.useMemo((()=>`${r} ${V}`),[V]),ve=e.useMemo((()=>`${$}${q?\" rtl\":v}`),[q,$]);return e.createElement(\"div\",{className:fe,onWheel:he,onMouseDown:null==w?void 0:w(ue),onMouseLeave:null==E?void 0:E(ue),onMouseUp:null==M?void 0:M(ue),onMouseMove:null==C?void 0:C(ue),onTouchStart:null==k?void 0:k(ue),onTouchMove:null==x?void 0:x(ue),onTouchEnd:null==N?void 0:N(ue)},e.createElement(F.Provider,{value:ue},e.createElement(\"div\",{className:i},Z),e.createElement(\"div\",{className:s},e.createElement(\"div\",{className:l},J),e.createElement(U,{className:ve,onScroll:de,scrollRef:te,containerRef:O},e.createElement(H,{refs:ne,itemClassName:A},o)),e.createElement(\"div\",{className:a},Q)),e.createElement(\"div\",{className:u},ee)))}export{G as ScrollMenu,F as VisibilityContext,p as constants,P as getItemsPos,q as slidingWindow};\n","import { useRef } from \"react\"\nimport { useIsClient } from \"usehooks-ts\"\nimport { useEmbedChart } from \"../../hooks.js\"\nimport {\n    EnrichedBlockNarrativeChart,\n    GRAPHER_PREVIEW_CLASS,\n    HIDE_IF_JS_ENABLED_CLASSNAME,\n} from \"@ourworldindata/types\"\nimport { useLinkedNarrativeChart } from \"../utils.js\"\nimport cx from \"clsx\"\nimport { BlockErrorFallback } from \"./BlockErrorBoundary.js\"\nimport SpanElements from \"./SpanElements.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\nimport {\n    DEFAULT_GRAPHER_HEIGHT,\n    DEFAULT_GRAPHER_WIDTH,\n    GRAPHER_NARRATIVE_CHART_CONFIG_FIGURE_ATTR,\n} from \"@ourworldindata/grapher\"\nimport {\n    BAKED_GRAPHER_URL,\n    GRAPHER_DYNAMIC_THUMBNAIL_URL,\n} from \"../../../settings/clientSettings.mjs\"\nimport { queryParamsToStr, readFromAssetMap } from \"@ourworldindata/utils\"\n\nexport default function NarrativeChart({\n    d,\n    className,\n    fullWidthOnMobile = false,\n    shouldRenderLinks = true,\n}: {\n    d: EnrichedBlockNarrativeChart\n    className?: string\n    fullWidthOnMobile?: boolean\n    shouldRenderLinks?: boolean\n}) {\n    const refChartContainer = useRef<HTMLDivElement>(null)\n    const { isPreviewing, archiveContext } = useDocumentContext()\n    const isClient = useIsClient()\n    useEmbedChart(refChartContainer, isPreviewing)\n\n    const viewMetadata = useLinkedNarrativeChart(d.name)\n\n    if (!viewMetadata) {\n        if (isPreviewing) {\n            return (\n                <BlockErrorFallback\n                    className={className}\n                    error={{\n                        name: \"Narrative chart not found\",\n                        message: `Narrative chart with name \"${d.name}\" couldn't be found.`,\n                    }}\n                />\n            )\n        } else return null // If not previewing, just don't render anything\n    }\n\n    const metadataStringified = JSON.stringify(viewMetadata)\n\n    const parentQueryString = queryParamsToStr(\n        viewMetadata.queryParamsForParentChart\n    )\n    const resolvedUrl = `${BAKED_GRAPHER_URL}/${viewMetadata.parentChartSlug}${parentQueryString}`\n\n    const isOnArchivalPage = archiveContext?.type === \"archive-page\"\n    const assetMap = isOnArchivalPage\n        ? archiveContext?.assets?.runtime\n        : undefined\n\n    const archivedParentUrl = viewMetadata.latestArchivedParent?.archiveUrl\n        ? `${viewMetadata.latestArchivedParent.archiveUrl}${parentQueryString}`\n        : undefined\n    const linkTarget =\n        isOnArchivalPage && archivedParentUrl ? archivedParentUrl : resolvedUrl\n\n    const imageSrc = readFromAssetMap(assetMap, {\n        path: d.name,\n        fallback: `${GRAPHER_DYNAMIC_THUMBNAIL_URL}/by-uuid/${viewMetadata.chartConfigId}.png`,\n    })\n    const shouldRenderImage = isOnArchivalPage || !isClient\n    const imageClassName = cx({\n        [HIDE_IF_JS_ENABLED_CLASSNAME]: !isOnArchivalPage,\n    })\n    const image = (\n        <img\n            className=\"GrapherImage\"\n            src={imageSrc}\n            alt={viewMetadata.title}\n            width={DEFAULT_GRAPHER_WIDTH}\n            height={DEFAULT_GRAPHER_HEIGHT}\n            loading=\"lazy\"\n        />\n    )\n\n    return (\n        <div\n            className={cx(className, {\n                \"full-width-on-mobile\": fullWidthOnMobile,\n            })}\n            ref={refChartContainer}\n        >\n            <div\n                className=\"owid-chart-frame\"\n                // On archival pages the static image is the permanent rendering,\n                // so let it dictate the height instead of forcing the live-Grapher\n                // default (which leaves blank space when the image's aspect ratio\n                // doesn't match the frame's, e.g. in column layouts).\n                style={\n                    isOnArchivalPage\n                        ? { height: \"auto\" }\n                        : d.height\n                          ? { height: d.height }\n                          : undefined\n                }\n            >\n                <figure\n                    key={metadataStringified}\n                    className={cx(GRAPHER_PREVIEW_CLASS, \"chart\")}\n                    // MultiEmbedder should not kick in on archival pages.\n                    {...(!isOnArchivalPage && {\n                        [GRAPHER_NARRATIVE_CHART_CONFIG_FIGURE_ATTR]:\n                            metadataStringified,\n                    })}\n                >\n                    {shouldRenderImage &&\n                        (shouldRenderLinks ? (\n                            <a className={imageClassName} href={linkTarget}>\n                                {image}\n                            </a>\n                        ) : (\n                            <div className={imageClassName}>{image}</div>\n                        ))}\n                </figure>\n            </div>\n            {d.caption ? (\n                <figcaption>\n                    <SpanElements\n                        spans={d.caption}\n                        shouldRenderLinks={shouldRenderLinks}\n                    />\n                </figcaption>\n            ) : null}\n        </div>\n    )\n}\n","import { useCallback, useContext, useEffect, useState } from \"react\"\nimport * as React from \"react\"\nimport { ScrollMenu, VisibilityContext } from \"react-horizontal-scrolling-menu\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faAngleRight } from \"@fortawesome/free-solid-svg-icons\"\nimport cx from \"clsx\"\nimport {\n    getWindowUrl,\n    setWindowUrl,\n    EnrichedBlockKeyInsightsSlide,\n    slugify,\n    KEY_INSIGHTS_ID,\n} from \"@ourworldindata/utils\"\nimport { BlockSize, OwidEnrichedGdocBlock } from \"@ourworldindata/types\"\n\nimport { ArticleBlocks } from \"./ArticleBlocks.js\"\nimport Image from \"./Image.js\"\nimport Chart from \"./Chart.js\"\nimport NarrativeChart from \"./NarrativeChart.js\"\n\nexport const KEY_INSIGHTS_CLASS_NAME = \"key-insights\"\nexport const KEY_INSIGHTS_INSIGHT_PARAM = \"insight\"\nconst KEY_INSIGHTS_THUMBS_CLASS_NAME = \"thumbs\"\nconst KEY_INSIGHTS_THUMB_CLASS_NAME = \"thumb\"\nconst KEY_INSIGHTS_SLIDES_CLASS_NAME = \"slides\"\nconst KEY_INSIGHTS_SLIDE_CLASS_NAME = \"slide\"\nconst KEY_INSIGHTS_SLIDE_CONTENT_CLASS_NAME = \"content\"\n\ntype scrollVisibilityApiType = React.ContextType<typeof VisibilityContext>\n\nenum ArrowDirection {\n    prev = \"prev\",\n    next = \"next\",\n}\n\nconst Thumb = ({\n    title,\n    onClick,\n    selected,\n}: {\n    title: string\n    onClick: () => void\n    itemId: string // needed by react-horizontal-scrolling-menu, see lib's examples\n    selected: boolean\n}) => {\n    return (\n        <button\n            aria-label={`Go to slide: ${title}`}\n            onClick={onClick}\n            role=\"tab\"\n            aria-selected={selected}\n            className={KEY_INSIGHTS_THUMB_CLASS_NAME}\n        >\n            {title}\n        </button>\n    )\n}\n\n/**\n * Tab-based switcher for key insights\n *\n * NB: this component has only received limited efforts towards accessibility.\n *\n * A next possible step would be to managage focus via arrow keys (see\n * https://w3c.github.io/aria/#managingfocus). A good implementation of\n * accessibility practices for this kind of widget is available at\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/tab_role\n */\nexport const KeyInsightsThumbs = ({ titles }: { titles: string[] }) => {\n    const [selectedId, setSelectedId] = useState<string>(\"0\")\n    const [slides, setSlides] = useState<HTMLElement | null>(null)\n    const [slug, setSlug] = useState<string>(\"\")\n    const apiRef = React.useRef({} as scrollVisibilityApiType)\n\n    // Not using useRef() here so that the  \"select slide based on hash\" effect,\n    // running on page load only, runs after the ref has been attached (and not\n    // on first render, which would be before)\n    // https://reactjs.org/docs/hooks-faq.html#how-can-i-measure-a-dom-node\n    const thumbsRef: React.RefCallback<HTMLDivElement> = useCallback((node) => {\n        if (node !== null) {\n            const keyInsightsNode = node.parentElement?.parentElement\n\n            const tempSlides = keyInsightsNode?.querySelector(\n                `.${KEY_INSIGHTS_SLIDES_CLASS_NAME}`\n            ) as HTMLDivElement | null\n            setSlides(tempSlides)\n            // get slug from previous <h3>\n            setSlug(\n                keyInsightsNode?.previousElementSibling?.getAttribute(\"id\") ??\n                    \"\"\n            )\n        }\n    }, [])\n\n    // Select active slide based on URL\n    useEffect(() => {\n        if (!slides) return\n\n        const insightParam =\n            getWindowUrl().queryParams[KEY_INSIGHTS_INSIGHT_PARAM]\n        if (!insightParam) return\n\n        const selectedSlideIdx = Array.from(\n            slides.querySelectorAll(`.${KEY_INSIGHTS_SLIDE_CLASS_NAME}`)\n        ).findIndex((slide) => {\n            // Since query params are a form of user input, the selector might\n            // not be valid.\n            try {\n                return slide.querySelector(`#${insightParam}`)\n            } catch {\n                return false\n            }\n        })\n\n        if (selectedSlideIdx === -1) return\n        setSelectedId(selectedSlideIdx.toString())\n    }, [slides])\n\n    // Scroll to selected item\n    useEffect(() => {\n        const item = apiRef.current.getItemById(selectedId)\n        if (!item) return\n\n        apiRef.current.scrollToItem(item, \"smooth\", \"center\", \"nearest\")\n    }, [selectedId])\n\n    // Select active slide when corresponding thumb selected\n    useEffect(() => {\n        if (!slides) return\n\n        // A less imperative, more React way to do this would be preferred. To\n        // switch between slides, I aimed to keep their content untouched\n        // (including event listeners hydrated by other components), while only\n        // updating their wrappers. Managing the switching logic through React\n        // would have required hydrating KeyInsightsSlides as well as all\n        // possible content components within them - even though they would have\n        // been already hydrated at the page level. From that perspective, the\n        // gain is not clear, and the approach not necessarily cleaner, so I\n        // stuck with the imperative approach.\n\n        slides\n            .querySelectorAll(`.${KEY_INSIGHTS_SLIDE_CLASS_NAME}`)\n            .forEach((slide, idx) => {\n                if (idx === Number(selectedId)) {\n                    slide.setAttribute(\"data-active\", \"true\")\n                    const windowUrl = getWindowUrl()\n                    const anchor = slide.querySelector(\"h4\")?.getAttribute(\"id\")\n                    if (\n                        !anchor ||\n                        windowUrl.queryParams[KEY_INSIGHTS_INSIGHT_PARAM] ===\n                            anchor\n                    )\n                        return\n                    setWindowUrl(\n                        windowUrl\n                            .updateQueryParams({\n                                [KEY_INSIGHTS_INSIGHT_PARAM]: anchor,\n                            })\n                            // When a key insight slug is changed, links\n                            // pointing to that key insight soft-break and take\n                            // readers to the top of the page. Adding an anchor\n                            // pointing to the the block title (h3) serves as a\n                            // stopgap, taking readers to the key insights block\n                            // instead but without selecting a particular\n                            // insight.\n                            //\n                            // This also improves the UX of readers coming\n                            // through shared insights URL. e.g.\n                            // /key-insights-demo?insight=insight-1#key-insights\n                            // shows the whole insights block, including its\n                            // titles (the target of the anchor).\n                            .update({ hash: `#${slug}` })\n                    )\n                } else {\n                    slide.setAttribute(\"data-active\", \"false\")\n                }\n            })\n        // see https://github.com/owid/owid-grapher/pull/1435#discussion_r888058198\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [selectedId])\n\n    return (\n        <div\n            className={KEY_INSIGHTS_THUMBS_CLASS_NAME}\n            role=\"tablist\"\n            ref={thumbsRef}\n        >\n            <ScrollMenu\n                LeftArrow={LeftArrow}\n                RightArrow={RightArrow}\n                apiRef={apiRef}\n            >\n                {titles.map((title, i) => {\n                    const itemId = `${i}`\n                    return (\n                        <Thumb\n                            title={title}\n                            key={itemId}\n                            itemId={itemId}\n                            onClick={() => {\n                                setSelectedId(itemId)\n                            }}\n                            selected={itemId === selectedId}\n                        />\n                    )\n                })}\n            </ScrollMenu>\n        </div>\n    )\n}\n\nconst Arrow = ({\n    children,\n    disabled,\n    onClick,\n    className,\n    direction,\n}: {\n    children: React.ReactNode\n    disabled: boolean\n    onClick: VoidFunction\n    className?: string\n    direction: ArrowDirection\n}) => {\n    const classes = [\"arrow\", className]\n    return (\n        <button\n            aria-label={`Scroll to ${\n                direction === ArrowDirection.next ? \"next\" : \"previous\"\n            } slide`}\n            disabled={disabled}\n            onClick={onClick}\n            className={classes.join(\" \")}\n        >\n            {children}\n        </button>\n    )\n}\n\nconst LeftArrow = () => {\n    const { useLeftArrowVisible, scrollPrev } = useContext(VisibilityContext)\n\n    const disabled = useLeftArrowVisible()\n\n    return (\n        !disabled && (\n            <Arrow\n                disabled={false}\n                onClick={() => scrollPrev()}\n                className=\"left\"\n                direction={ArrowDirection.prev}\n            >\n                <FontAwesomeIcon icon={faAngleRight} flip=\"horizontal\" />\n            </Arrow>\n        )\n    )\n}\n\nconst RightArrow = () => {\n    const { useRightArrowVisible, scrollNext } = useContext(VisibilityContext)\n\n    const disabled = useRightArrowVisible()\n\n    return (\n        !disabled && (\n            <Arrow\n                disabled={false}\n                onClick={() => scrollNext()}\n                className=\"right\"\n                direction={ArrowDirection.next}\n            >\n                <FontAwesomeIcon icon={faAngleRight} />\n            </Arrow>\n        )\n    )\n}\n\ntype KeyInsightsProps = {\n    className?: string\n    insights: EnrichedBlockKeyInsightsSlide[]\n    heading: string\n}\n\nexport const KeyInsights = ({\n    insights,\n    heading,\n    className,\n}: KeyInsightsProps) => {\n    function renderAssetForInsight({\n        filename,\n        url,\n        narrativeChartName,\n        asset,\n    }: {\n        filename?: string\n        url?: string\n        narrativeChartName?: string\n        asset?: OwidEnrichedGdocBlock[]\n    }): React.ReactElement | null {\n        if (asset?.length) {\n            return (\n                <ArticleBlocks\n                    blocks={asset}\n                    containerType=\"key-insight-asset\"\n                />\n            )\n        }\n        if (filename) {\n            return (\n                <Image\n                    filename={filename}\n                    containerType=\"sticky-right-left-column\"\n                />\n            )\n        }\n        if (url) {\n            return (\n                <Chart\n                    d={{\n                        url,\n                        type: \"chart\",\n                        size: BlockSize.Wide,\n                        parseErrors: [],\n                    }}\n                    fullWidthOnMobile={true}\n                />\n            )\n        }\n        if (narrativeChartName) {\n            return (\n                <NarrativeChart\n                    d={{\n                        name: narrativeChartName,\n                        type: \"narrative-chart\",\n                        size: BlockSize.Wide,\n                        parseErrors: [],\n                    }}\n                    fullWidthOnMobile={true}\n                />\n            )\n        }\n\n        return null\n    }\n    return (\n        <div className={className}>\n            <h1\n                className=\"article-block__heading h1-semibold\"\n                id={KEY_INSIGHTS_ID}\n            >\n                <span>{heading}</span>\n                <a\n                    className=\"deep-link\"\n                    aria-labelledby={KEY_INSIGHTS_ID}\n                    href={`#${KEY_INSIGHTS_ID}`}\n                />\n            </h1>\n            <div className={KEY_INSIGHTS_CLASS_NAME}>\n                <div>\n                    <KeyInsightsThumbs\n                        titles={insights.map(({ title }) => title)}\n                    />\n                    <div className={KEY_INSIGHTS_SLIDES_CLASS_NAME}>\n                        {insights.map(\n                            (\n                                {\n                                    title,\n                                    content,\n                                    filename,\n                                    url,\n                                    narrativeChartName,\n                                    asset,\n                                },\n                                idx\n                            ) => {\n                                return (\n                                    <div\n                                        key={idx}\n                                        className={cx(\n                                            KEY_INSIGHTS_SLIDE_CLASS_NAME,\n                                            \"grid grid-cols-12 span-cols-12\"\n                                        )}\n                                        data-active={idx === 0}\n                                        role=\"tabpanel\"\n                                        tabIndex={0}\n                                    >\n                                        <div className=\"grid span-cols-12\">\n                                            <div className=\"article-block__key-insights-content-column span-cols-5 span-md-cols-12\">\n                                                <h4\n                                                    id={slugify(title)}\n                                                    className=\"key-insights-title\"\n                                                >\n                                                    {title}\n                                                </h4>\n                                                <div\n                                                    className={\n                                                        KEY_INSIGHTS_SLIDE_CONTENT_CLASS_NAME\n                                                    }\n                                                >\n                                                    <ArticleBlocks\n                                                        blocks={content}\n                                                        containerType=\"key-insight\"\n                                                    />\n                                                </div>\n                                            </div>\n                                            <div className=\"key-insight__asset-container span-cols-7 span-md-cols-12\">\n                                                {renderAssetForInsight({\n                                                    filename,\n                                                    url,\n                                                    narrativeChartName,\n                                                    asset,\n                                                })}\n                                            </div>\n                                        </div>\n                                    </div>\n                                )\n                            }\n                        )}\n                    </div>\n                </div>\n            </div>\n        </div>\n    )\n}\n","import { useContext } from \"react\"\nimport cx from \"clsx\"\nimport {\n    EnrichedBlockResearchAndWriting,\n    EnrichedBlockResearchAndWritingLink,\n    formatAuthors,\n    formatDate,\n    getResearchAndWritingId,\n    getTopicPageHeading,\n    sentenceCaseIfNotTopicPage,\n} from \"@ourworldindata/utils\"\nimport { useLinkedDocument } from \"../utils.js\"\nimport Image, { ImageParentContainer } from \"./Image.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\nimport { AttachmentsContext } from \"../AttachmentsContext.js\"\nimport { Button } from \"@ourworldindata/components\"\nimport {\n    ARCHIVED_THUMBNAIL_FILENAME,\n    DEFAULT_GDOC_FEATURED_IMAGE,\n    DEFAULT_THUMBNAIL_FILENAME,\n    DbEnrichedLatestWork,\n    SearchResultType,\n    SearchState,\n} from \"@ourworldindata/types\"\nimport {\n    createTopicFilter,\n    SEARCH_BASE_PATH,\n} from \"../../search/searchUtils.js\"\nimport { stateToSearchParams } from \"../../search/searchState.js\"\nimport { faMagnifyingGlass } from \"@fortawesome/free-solid-svg-icons\"\n\nfunction Thumbnail({\n    filename,\n    containerType,\n}: {\n    filename: string\n    containerType: ImageParentContainer\n}) {\n    if (\n        filename === ARCHIVED_THUMBNAIL_FILENAME ||\n        filename === DEFAULT_THUMBNAIL_FILENAME\n    ) {\n        return <img src={`/${filename}`} />\n    }\n    return (\n        <Image\n            filename={filename}\n            shouldLightbox={false}\n            containerType={containerType}\n        />\n    )\n}\n\ntype ResearchAndWritingProps = {\n    className?: string\n} & EnrichedBlockResearchAndWriting\n\nfunction ResearchAndWritingLink(\n    props: EnrichedBlockResearchAndWritingLink & {\n        className?: string\n        isSmall?: boolean\n        shouldHideThumbnail?: boolean\n        shouldHideThumbnailSm?: boolean\n        shouldHideSubtitle?: boolean\n        shouldHideAuthors?: boolean\n        shouldHideDate?: boolean\n    }\n) {\n    let {\n        value: {\n            url,\n            title,\n            subtitle,\n            authors,\n            filename = DEFAULT_GDOC_FEATURED_IMAGE,\n            date,\n        },\n        shouldHideThumbnail = false,\n        shouldHideThumbnailSm = false,\n        isSmall = false,\n        shouldHideSubtitle = false,\n        shouldHideAuthors = false,\n        shouldHideDate = false,\n        className,\n    } = props\n    const { linkedDocument, errorMessage } = useLinkedDocument(url)\n    const { isPreviewing } = useDocumentContext()\n\n    if (errorMessage) {\n        if (isPreviewing) {\n            return (\n                <div\n                    className={cx(\n                        className,\n                        \"research-and-writing-link--error\"\n                    )}\n                >\n                    <p>{errorMessage}</p>\n                    <p>This block won't render during baking</p>\n                </div>\n            )\n        }\n        return null\n    }\n\n    if (linkedDocument) {\n        url = linkedDocument.url\n        title = linkedDocument.title || title\n        authors = linkedDocument.authors || authors\n        subtitle = linkedDocument.excerpt || subtitle\n        filename = linkedDocument[\"featured-image\"] || filename\n        date = linkedDocument.publishedAt || date\n    }\n\n    return (\n        <a\n            href={url}\n            className={cx(\n                \"research-and-writing-link\",\n                {\n                    \"research-and-writing-link--hide-thumbnail-sm\":\n                        shouldHideThumbnailSm,\n                },\n                className\n            )}\n        >\n            {filename && !shouldHideThumbnail ? (\n                <figure>\n                    <Thumbnail\n                        filename={filename}\n                        containerType={isSmall ? \"thumbnail\" : \"default\"}\n                    />\n                </figure>\n            ) : null}\n            {date && !shouldHideDate ? (\n                <p className=\"research-and-writing-link__date\">\n                    {formatDate(new Date(date))}\n                </p>\n            ) : null}\n            <h3\n                className={cx(\"research-and-writing-link__title\", {\n                    \"research-and-writing-link__title--large\": !isSmall,\n                })}\n            >\n                {title}\n            </h3>\n            {subtitle && !shouldHideSubtitle ? (\n                <p\n                    className={cx(\"research-and-writing-link__description\", {\n                        \"research-and-writing-link__description--large\":\n                            !isSmall,\n                    })}\n                >\n                    {subtitle}\n                </p>\n            ) : null}\n            {authors && !shouldHideAuthors ? (\n                <p className=\"research-and-writing-link__authors body-3-medium-italic\">\n                    {formatAuthors(authors)}\n                </p>\n            ) : null}\n        </a>\n    )\n}\n\nconst parseLatestWorkToResearchAndWritingLink = (\n    latestWork: DbEnrichedLatestWork\n): EnrichedBlockResearchAndWritingLink => {\n    return {\n        value: {\n            ...latestWork,\n            url: `/${latestWork.slug}`, // we might want to use a version of getCanonicalUrl here if we start linking to types other than OwidGdocType.Article\n            filename: latestWork[\"featured-image\"] || undefined,\n            date: latestWork.publishedAt || undefined,\n            subtitle: latestWork.subtitle || undefined,\n        },\n    }\n}\n\nexport function ResearchAndWriting(props: ResearchAndWritingProps) {\n    const {\n        heading,\n        \"hide-authors\": hideAuthors,\n        \"hide-date\": hideDate,\n        variant,\n        primary,\n        secondary,\n        more,\n        rows,\n        latest,\n        className,\n    } = props\n\n    const slug = getResearchAndWritingId(heading)\n\n    // Get the URLs from the links of the featured work section. These will be\n    // excluded from the latest work section below to avoid duplication.\n    const primarySecondaryUrls = [...primary, ...secondary].map(\n        (link) => link.value.url\n    )\n    const { latestWorkLinks, tags } = useContext(AttachmentsContext)\n    const { gdocType } = useDocumentContext()\n    const defaultHeading = getTopicPageHeading(\"researchAndWriting\", gdocType)\n    const customHeadingCaseCorrected = sentenceCaseIfNotTopicPage(\n        heading,\n        gdocType\n    )\n    const topicName = tags?.[0]?.name\n    let seeAllResearchHref: string | undefined\n    if (topicName) {\n        const searchState: SearchState = {\n            query: \"\",\n            filters: [createTopicFilter(topicName)],\n            requireAllCountries: false,\n            resultType: SearchResultType.WRITING,\n        }\n        const params = stateToSearchParams(searchState)\n        seeAllResearchHref = `${SEARCH_BASE_PATH}?${params.toString()}`\n    }\n    // There might be latestWorkLinks available but we only want to show them if\n    // a {.latest} block has been added\n    const latestArticles =\n        latest && latestWorkLinks\n            ? latestWorkLinks\n                  // We want to filter out the primary and secondary links (aka.\n                  // featured work links) from the latest work section to avoid\n                  // duplication. Only featured links pointing to gdocs are\n                  // considered.\n                  .filter(\n                      (link) =>\n                          !primarySecondaryUrls.includes(\n                              `https://docs.google.com/document/d/${link.id}/edit`\n                          )\n                  )\n                  .map(parseLatestWorkToResearchAndWritingLink)\n            : latest?.articles\n\n    // If there are no primary links, we revert to scrolling through the\n    // secondary links. This is because the absence of primary links currently\n    // means that we are on a author page using the topics template, where all\n    // of the author's work is shown through secondary links. In this case,\n    // where nothing competes with the secondary links, we revert to a more\n    // natural scrolling behaviour.\n    //\n    // Using the presence of primary links as a proxy for this behaviour is\n    // bordering on a hack, and makes reasoning about the component slightly\n    // more difficult, but is considered acceptable for now.\n    //\n    // see https://owid.slack.com/archives/C06KFK86HST/p1716469728775129\n\n    const shouldPrimarySecondaryOverflow = primary.length > 0\n\n    const isFeaturedVariant = variant === \"featured\"\n\n    return (\n        <section\n            className={cx(className, \"grid\", {\n                \"article-block__research-and-writing--featured needs-dividers\":\n                    isFeaturedVariant,\n            })}\n        >\n            <h1\n                className={cx(\"h1-semibold span-cols-12\", {\n                    \"research-and-writing__heading--featured\":\n                        isFeaturedVariant,\n                })}\n                id={slug}\n            >\n                <span>{customHeadingCaseCorrected || defaultHeading}</span>\n                <a\n                    className=\"deep-link\"\n                    aria-labelledby={slug}\n                    href={`#${slug}`}\n                />\n            </h1>\n            <div className=\"span-cols-12 research-and-writing-row\">\n                <div\n                    className={cx(\"research-and-writing-row__links\", {\n                        \"research-and-writing-row__links--overflow\":\n                            shouldPrimarySecondaryOverflow,\n                        \"research-and-writing-row__links--featured\":\n                            isFeaturedVariant,\n                        grid: !isFeaturedVariant,\n                    })}\n                >\n                    {primary.map((link, i) => (\n                        <ResearchAndWritingLink\n                            className={cx({\n                                \"research-and-writing-link--featured\":\n                                    isFeaturedVariant,\n                                \"span-cols-6 span-sm-cols-12\":\n                                    !isFeaturedVariant,\n                            })}\n                            isSmall={isFeaturedVariant}\n                            key={i}\n                            shouldHideAuthors={hideAuthors}\n                            shouldHideDate={hideDate}\n                            {...link}\n                        />\n                    ))}\n                    {secondary.map((link, i) => (\n                        <ResearchAndWritingLink\n                            key={i}\n                            className={cx({\n                                \"research-and-writing-link--featured\":\n                                    isFeaturedVariant,\n                                \"span-cols-3 span-md-cols-6 span-sm-cols-12\":\n                                    !isFeaturedVariant,\n                            })}\n                            isSmall\n                            shouldHideAuthors={hideAuthors}\n                            shouldHideDate={hideDate}\n                            {...link}\n                        />\n                    ))}\n                </div>\n            </div>\n            {rows.map((row, i) => (\n                <div key={i} className=\"span-cols-12 research-and-writing-row\">\n                    <h2\n                        className={cx(\n                            \"h2-bold research-and-writing-row__heading\",\n                            {\n                                \"research-and-writing-row__heading--featured\":\n                                    isFeaturedVariant,\n                            }\n                        )}\n                    >\n                        {row.heading}\n                    </h2>\n                    <div\n                        className={cx(\n                            \"research-and-writing-row__links research-and-writing-row__links--overflow\",\n                            {\n                                \"research-and-writing-row__links--featured\":\n                                    isFeaturedVariant,\n                                \"grid grid-cols-4 grid-lg-cols-3 grid-md-cols-2\":\n                                    !isFeaturedVariant,\n                            }\n                        )}\n                    >\n                        {row.articles.map((link, i) => (\n                            <ResearchAndWritingLink\n                                shouldHideSubtitle\n                                shouldHideAuthors={hideAuthors}\n                                shouldHideDate={hideDate}\n                                isSmall\n                                className={cx({\n                                    \"research-and-writing-link--featured\":\n                                        isFeaturedVariant,\n                                    \"span-cols-1\": !isFeaturedVariant,\n                                })}\n                                key={i}\n                                {...link}\n                            />\n                        ))}\n                    </div>\n                </div>\n            ))}\n            {more ? (\n                <div className=\"span-cols-12 research-and-writing-row\">\n                    <h2\n                        className={cx(\n                            \"h2-bold research-and-writing-row__heading\",\n                            {\n                                \"research-and-writing-row__heading--featured\":\n                                    isFeaturedVariant,\n                            }\n                        )}\n                    >\n                        {more.heading}\n                    </h2>\n                    <div\n                        className={cx(\n                            \"research-and-writing-row__links research-and-writing-row__links--condensed-sm research-and-writing-row__links--condensed research-and-writing-row__links--overflow\",\n                            {\n                                \"research-and-writing-row__links--featured\":\n                                    isFeaturedVariant,\n                                \"grid grid-cols-4 grid-lg-cols-3 grid-md-cols-2\":\n                                    !isFeaturedVariant,\n                            }\n                        )}\n                    >\n                        {more.articles.map((link, i) => (\n                            <ResearchAndWritingLink\n                                shouldHideThumbnail\n                                shouldHideSubtitle\n                                shouldHideAuthors={hideAuthors}\n                                shouldHideDate={hideDate}\n                                isSmall\n                                className={cx({\n                                    \"research-and-writing-link--featured\":\n                                        isFeaturedVariant,\n                                    \"span-cols-1\": !isFeaturedVariant,\n                                })}\n                                key={i}\n                                {...link}\n                            />\n                        ))}\n                    </div>\n                </div>\n            ) : null}\n            {latest && latestArticles?.length ? (\n                <div className=\"span-cols-12 research-and-writing-row\">\n                    <h2\n                        className={cx(\n                            \"h1-semibold research-and-writing-row__heading research-and-writing-row__heading--divider\",\n                            {\n                                \"research-and-writing-row__heading--featured\":\n                                    isFeaturedVariant,\n                            }\n                        )}\n                    >\n                        {latest.heading || \"Latest work\"}\n                    </h2>\n                    <div\n                        className={cx(\n                            \"research-and-writing-row__links research-and-writing-row__links--condensed-sm\",\n                            {\n                                \"research-and-writing-row__links--featured\":\n                                    isFeaturedVariant,\n                                \"grid grid-cols-4 grid-lg-cols-3 grid-md-cols-2 grid-sm-cols-1\":\n                                    !isFeaturedVariant,\n                            }\n                        )}\n                    >\n                        {latestArticles.map((link, i) => (\n                            <ResearchAndWritingLink\n                                isSmall\n                                shouldHideThumbnailSm\n                                shouldHideAuthors={hideAuthors}\n                                shouldHideDate={hideDate}\n                                className={cx({\n                                    \"research-and-writing-link--featured\":\n                                        isFeaturedVariant,\n                                    \"span-cols-1\": !isFeaturedVariant,\n                                })}\n                                key={i}\n                                {...link}\n                            />\n                        ))}\n                    </div>\n                </div>\n            ) : null}\n            {variant === \"featured\" && seeAllResearchHref ? (\n                <div className=\"span-cols-12 research-and-writing-row\">\n                    <div className=\"research-and-writing__see-all\">\n                        <Button\n                            theme=\"solid-vermillion\"\n                            text={`See all articles on this topic`}\n                            href={seeAllResearchHref}\n                            icon={faMagnifyingGlass}\n                            iconPosition=\"left\"\n                        />\n                    </div>\n                </div>\n            ) : null}\n        </section>\n    )\n}\n","import { useContext } from \"react\"\nimport urljoin from \"url-join\"\nimport cx from \"clsx\"\nimport {\n    EnrichedBlockAllCharts,\n    RelatedChart,\n    Url,\n    ALL_CHARTS_ID,\n    KeyChartLevel,\n    queryParamsToStr,\n    getTopicPageHeading,\n    sentenceCaseIfNotTopicPage,\n} from \"@ourworldindata/utils\"\nimport { AttachmentsContext } from \"../AttachmentsContext.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\nimport { RelatedCharts } from \"../../blocks/RelatedCharts.js\"\nimport { BAKED_BASE_URL } from \"../../../settings/clientSettings.mjs\"\nimport { Button } from \"@ourworldindata/components\"\n\ntype AllChartsProps = EnrichedBlockAllCharts & {\n    className?: string\n    id?: string\n}\n\nfunction sortRelatedCharts(\n    relatedCharts: RelatedChart[],\n    sortedSlugs: string[]\n): RelatedChart[] {\n    const chartBySlug = new Map(\n        relatedCharts.map((chart) => [chart.slug, chart])\n    )\n\n    const topCharts: RelatedChart[] = []\n    for (const slug of new Set(sortedSlugs)) {\n        const chart = chartBySlug.get(slug)\n        if (chart) {\n            topCharts.push({ ...chart, keyChartLevel: KeyChartLevel.Top })\n            chartBySlug.delete(slug)\n        }\n    }\n\n    return [...topCharts, ...chartBySlug.values()]\n}\n\nexport function AllCharts(props: AllChartsProps) {\n    const { heading, top, className, id = ALL_CHARTS_ID } = props\n    const { relatedCharts, tags } = useContext(AttachmentsContext)\n    const { gdocType } = useDocumentContext()\n    const defaultHeadingFragment = getTopicPageHeading(\"keyCharts\", gdocType)\n    if (relatedCharts.length === 0) return null\n\n    const topSlugs = top.map((item) => Url.fromURL(item.url).slug as string)\n\n    const firstTag = tags[0]\n    const firstTagDataCatalogQueryString = firstTag\n        ? queryParamsToStr({ topics: firstTag.name })\n        : \"\"\n\n    const sortedRelatedCharts = sortRelatedCharts(relatedCharts, topSlugs)\n    return (\n        <section className={cx(className, \"needs-dividers\")}>\n            <h1 className=\"article-block__heading h1-semibold\" id={id}>\n                <span>\n                    {firstTag\n                        ? `${defaultHeadingFragment} on ${sentenceCaseIfNotTopicPage(firstTag.name, gdocType, false)}`\n                        : heading}\n                </span>\n                <a className=\"deep-link\" aria-labelledby={id} href={`#${id}`} />\n            </h1>\n            <Button\n                theme=\"solid-vermillion\"\n                text=\"See all charts on this topic\"\n                href={`${urljoin(BAKED_BASE_URL, `/data`, firstTagDataCatalogQueryString)}`}\n            />\n            <RelatedCharts\n                showKeyChartsOnly={true}\n                charts={sortedRelatedCharts}\n            />\n        </section>\n    )\n}\n","import cx from \"clsx\"\nimport {\n    LARGEST_IMAGE_WIDTH,\n    Span,\n    readFromAssetMap,\n} from \"@ourworldindata/utils\"\nimport { useImage } from \"../utils.js\"\nimport SpanElements from \"./SpanElements.js\"\nimport { CLOUDFLARE_IMAGES_URL } from \"../../../settings/clientSettings.mjs\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\n\ninterface VideoProps {\n    url: string\n    caption?: Span[]\n    className?: string\n    shouldLoop?: boolean\n    shouldAutoplay?: boolean\n    filename: string\n    shouldRenderLinks?: boolean\n}\n\nexport default function Video(props: VideoProps) {\n    const {\n        url,\n        caption,\n        className,\n        shouldLoop,\n        shouldAutoplay,\n        filename,\n        shouldRenderLinks = true,\n    } = props\n    const { archiveContext } = useDocumentContext()\n    const isOnArchivalPage = archiveContext?.type === \"archive-page\"\n    const assetMap = isOnArchivalPage\n        ? archiveContext?.assets?.runtime\n        : undefined\n\n    const poster = useImage(filename)\n    const posterSrc = poster?.cloudflareId\n        ? readFromAssetMap(assetMap, {\n              path: poster.filename,\n              fallback: `${CLOUDFLARE_IMAGES_URL}/${poster.cloudflareId}/w=${LARGEST_IMAGE_WIDTH}`,\n          })\n        : undefined\n\n    const videoSrc = readFromAssetMap(assetMap, {\n        path: url,\n        fallback: url,\n    })\n\n    return (\n        <figure className={cx(className)}>\n            <video\n                muted\n                controls\n                autoPlay={shouldAutoplay}\n                preload={shouldAutoplay ? \"auto\" : \"none\"}\n                loop={shouldLoop}\n                poster={posterSrc}\n            >\n                <source src={videoSrc} type=\"video/mp4\" />\n            </video>\n            {caption ? (\n                <figcaption>\n                    <SpanElements\n                        spans={caption}\n                        shouldRenderLinks={shouldRenderLinks}\n                    />\n                </figcaption>\n            ) : null}\n        </figure>\n    )\n}\n","import cx from \"clsx\"\nimport { useLinkedStaticViz } from \"../utils.js\"\nimport Image, { ImageParentContainer } from \"./Image.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\nimport {\n    useCallback,\n    useEffect,\n    useMemo,\n    useState,\n    useId,\n    type MouseEvent,\n} from \"react\"\nimport { BlockErrorFallback } from \"./BlockErrorBoundary.js\"\nimport {\n    MarkdownTextWrap,\n    MarkdownTextWrapHtml,\n    OverlayHeader,\n} from \"@ourworldindata/components\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faArrowRight, faDownload } from \"@fortawesome/free-solid-svg-icons\"\nimport { CLOUDFLARE_IMAGES_URL } from \"../../../settings/clientSettings.mjs\"\nimport { triggerDownloadFromBlob } from \"@ourworldindata/utils\"\nimport { ImageMetadata, LinkedStaticViz, Span } from \"@ourworldindata/types\"\nimport { useTriggerOnEscape } from \"../../hooks.js\"\nimport SpanElements from \"./SpanElements.js\"\nimport { SiteAnalytics } from \"../../SiteAnalytics.js\"\n\nconst analytics = new SiteAnalytics()\n\ninterface StaticVizProps {\n    name: string\n    className?: string\n    containerType?: ImageParentContainer\n    hasOutline?: boolean\n    caption?: Span[]\n    shouldRenderLinks?: boolean\n}\n\nexport default function StaticViz(props: StaticVizProps) {\n    const {\n        name,\n        className,\n        containerType = \"default\",\n        hasOutline = true,\n        caption,\n        shouldRenderLinks = true,\n    } = props\n    const staticViz = useLinkedStaticViz(name)\n    const { isPreviewing } = useDocumentContext()\n    const [isDownloadModalOpen, setIsDownloadModalOpen] = useState(false)\n\n    if (!staticViz) {\n        if (isPreviewing) {\n            return (\n                <BlockErrorFallback\n                    className={cx(\"static-viz\", className)}\n                    error={{\n                        name: \"StaticViz error\",\n                        message: `StaticViz with name \"${name}\" not found. This block will not render when the page is baked.`,\n                    }}\n                />\n            )\n        }\n        return null\n    }\n\n    return (\n        <figure className={cx(\"static-viz\", className)}>\n            <div className=\"static-viz__image-wrapper\">\n                <Image\n                    hasOutline={hasOutline}\n                    imageData={staticViz.desktop}\n                    smallImageData={staticViz.mobile}\n                    containerType={containerType}\n                    shouldHideDownloadButton\n                />\n            </div>\n            <button\n                type=\"button\"\n                className=\"static-viz__download-button\"\n                onClick={() => setIsDownloadModalOpen(true)}\n            >\n                <FontAwesomeIcon icon={faDownload} />\n                Download image or data\n            </button>\n            {caption ? (\n                <figcaption className=\"static-viz__caption\">\n                    <SpanElements\n                        spans={caption}\n                        shouldRenderLinks={shouldRenderLinks}\n                    />\n                </figcaption>\n            ) : null}\n            {isDownloadModalOpen && (\n                <StaticVizDownloadModal\n                    staticViz={staticViz}\n                    onClose={() => setIsDownloadModalOpen(false)}\n                />\n            )}\n        </figure>\n    )\n}\n\ninterface DownloadOption {\n    key: string\n    title: string\n    description: string\n    previewImage?: ImageMetadata\n    onClick?: () => void\n    href?: string\n    onClickAnalytics?: () => void\n}\n\nconst StaticVizDownloadModal = ({\n    staticViz,\n    onClose,\n}: {\n    staticViz: LinkedStaticViz\n    onClose: () => void\n}) => {\n    const dialogTitleId = useId()\n    useTriggerOnEscape(onClose)\n\n    useEffect(() => {\n        document.documentElement.classList.add(\"no-scroll\")\n        return () => {\n            document.documentElement.classList.remove(\"no-scroll\")\n        }\n    }, [])\n\n    const downloadImage = useCallback(\n        async (\n            image: ImageMetadata,\n            fallbackName: string,\n            variant: \"desktop\" | \"mobile\"\n        ) => {\n            if (!image.cloudflareId) return\n            const url = makeImageSrc(image)\n            if (!url) return\n            try {\n                const response = await fetch(url)\n                const blob = await response.blob()\n                const filename = image.filename ?? fallbackName\n                triggerDownloadFromBlob(filename, blob)\n                analytics.logStaticVizDownload(\n                    staticViz.name,\n                    \"image_download\",\n                    variant\n                )\n            } catch (error) {\n                console.error(\"Failed to download static viz image\", error)\n            }\n        },\n        [staticViz.name]\n    )\n\n    const imageOptions: DownloadOption[] = useMemo(() => {\n        const hasMobile = !!staticViz.mobile\n        const desktopTitle = hasMobile ? \"Desktop version\" : \"Download image\"\n\n        const options: DownloadOption[] = [\n            {\n                key: \"desktop-image\",\n                title: desktopTitle,\n                description: createDimensionsLabel(staticViz.desktop),\n                previewImage: staticViz.desktop,\n                onClick: () =>\n                    downloadImage(\n                        staticViz.desktop,\n                        `${staticViz.name}-desktop.png`,\n                        \"desktop\"\n                    ),\n            },\n        ]\n\n        if (hasMobile) {\n            options.push({\n                key: \"mobile-image\",\n                title: \"Mobile version\",\n                description: createDimensionsLabel(staticViz.mobile!),\n                previewImage: staticViz.mobile,\n                onClick: () =>\n                    downloadImage(\n                        staticViz.mobile!,\n                        `${staticViz.name}-mobile.png`,\n                        \"mobile\"\n                    ),\n            })\n        }\n\n        return options\n    }, [downloadImage, staticViz])\n\n    const dataOptions: DownloadOption[] = useMemo(() => {\n        const options: DownloadOption[] = []\n        if (staticViz.grapherUrl) {\n            options.push({\n                key: \"grapher-data\",\n                title: \"Download data (CSV)\",\n                description:\n                    \"Download the data behind this visualization as a CSV file.\",\n                href: `${staticViz.grapherUrl}.csv`,\n                onClickAnalytics: () =>\n                    analytics.logStaticVizDownload(\n                        staticViz.name,\n                        \"data_download\",\n                        staticViz.grapherUrl\n                    ),\n            })\n        }\n        if (staticViz.sourceUrl) {\n            options.push({\n                key: \"source-link\",\n                title: \"View source dataset\",\n                description:\n                    \"Visit the external dataset or documentation referenced for this visualization.\",\n                href: staticViz.sourceUrl,\n                onClickAnalytics: () =>\n                    analytics.logStaticVizDownload(\n                        staticViz.name,\n                        \"source_link_click\",\n                        staticViz.sourceUrl\n                    ),\n            })\n        }\n        return options\n    }, [staticViz.grapherUrl, staticViz.sourceUrl, staticViz.name])\n\n    const handleOverlayClick = useCallback(\n        (event: MouseEvent<HTMLDivElement>) => {\n            if (event.target === event.currentTarget) onClose()\n        },\n        [onClose]\n    )\n\n    const grapherLink = staticViz.grapherUrl?.trim().length\n        ? staticViz.grapherUrl\n        : undefined\n\n    const hasTwoImages = imageOptions.length > 1\n\n    return (\n        <div\n            className=\"static-viz__download-overlay\"\n            onClick={handleOverlayClick}\n            role=\"presentation\"\n        >\n            <div\n                className=\"static-viz-download-modal\"\n                role=\"dialog\"\n                aria-modal=\"true\"\n                aria-labelledby={dialogTitleId}\n            >\n                <OverlayHeader\n                    title=\"Download\"\n                    onDismiss={onClose}\n                    className=\"static-viz-download-modal__header\"\n                />\n                <span id={dialogTitleId} className=\"sr-only\">\n                    Download\n                </span>\n                <div className=\"static-viz-download-modal__content\">\n                    {staticViz.description && (\n                        <section className=\"static-viz-download-modal__section\">\n                            <div className=\"static-viz-download-modal__heading\">\n                                <h3>How this visualization was made</h3>\n                            </div>\n                            <div className=\"static-viz-download-modal__description\">\n                                <MarkdownTextWrapHtml\n                                    textWrap={\n                                        new MarkdownTextWrap({\n                                            text: staticViz.description,\n                                            fontSize: 14,\n                                            lineHeight: 1.2,\n                                        })\n                                    }\n                                />\n                            </div>\n                        </section>\n                    )}\n                    <section className=\"static-viz-download-modal__section\">\n                        <div className=\"static-viz-download-modal__heading\">\n                            <h3>{hasTwoImages ? \"Images\" : \"Image\"}</h3>\n                            <p>\n                                {hasTwoImages\n                                    ? \"Download high-resolution images for this static visualization.\"\n                                    : \"Download a high-resolution version of this static visualization.\"}\n                            </p>\n                        </div>\n                        {imageOptions.map((option) => (\n                            <DownloadButton\n                                key={option.key}\n                                title={option.title}\n                                description={\n                                    option.description ||\n                                    \"High-resolution export.\"\n                                }\n                                previewImage={option.previewImage}\n                                onClick={option.onClick}\n                            />\n                        ))}\n                    </section>\n                    {!!dataOptions.length && (\n                        <section className=\"static-viz-download-modal__section\">\n                            <div className=\"static-viz-download-modal__heading\">\n                                <h3>Data</h3>\n                                <p>\n                                    Explore or download the dataset that was\n                                    used to create this visualization.\n                                </p>\n                            </div>\n                            {dataOptions.map((option) => (\n                                <DownloadButton\n                                    key={option.key}\n                                    title={option.title}\n                                    description={option.description}\n                                    href={option.href}\n                                    onClickAnalytics={option.onClickAnalytics}\n                                />\n                            ))}\n                        </section>\n                    )}\n                    {grapherLink && (\n                        <section className=\"static-viz-download-modal__section\">\n                            <div className=\"static-viz-download-modal__heading\">\n                                <h3>Continue exploring</h3>\n                                <p>\n                                    Visit this chart on Our World in Data to\n                                    explore and customize the data.\n                                </p>\n                            </div>\n                            <a\n                                href={grapherLink}\n                                className=\"static-viz-download-modal__grapher-link\"\n                            >\n                                Open interactive chart{\" \"}\n                                <FontAwesomeIcon icon={faArrowRight} />\n                            </a>\n                        </section>\n                    )}\n                </div>\n            </div>\n        </div>\n    )\n}\n\nconst DownloadButton = ({\n    title,\n    description,\n    previewImage,\n    onClick,\n    href,\n    onClickAnalytics,\n}: {\n    title: string\n    description: string\n    previewImage?: ImageMetadata\n    onClick?: () => void\n    href?: string\n    onClickAnalytics?: () => void\n}) => {\n    const content = (\n        <>\n            {previewImage && (\n                <div className=\"static-viz-download-modal__preview\">\n                    <Image\n                        imageData={previewImage}\n                        containerType=\"thumbnail\"\n                        shouldLightbox={false}\n                        shouldHideDownloadButton\n                        alt=\"\"\n                    />\n                </div>\n            )}\n            <div className=\"static-viz-download-modal__button-content\">\n                <h4>{title}</h4>\n                <p>{description}</p>\n            </div>\n            <FontAwesomeIcon\n                icon={faDownload}\n                className=\"static-viz-download-modal__button-icon\"\n                aria-hidden=\"true\"\n            />\n        </>\n    )\n\n    if (href) {\n        return (\n            <a\n                className=\"static-viz-download-modal__button\"\n                href={href}\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                onClick={onClickAnalytics}\n            >\n                {content}\n            </a>\n        )\n    }\n\n    return (\n        <button\n            type=\"button\"\n            className=\"static-viz-download-modal__button\"\n            onClick={onClick}\n        >\n            {content}\n        </button>\n    )\n}\n\nconst createDimensionsLabel = (image: ImageMetadata): string => {\n    if (image.originalWidth && image.originalHeight) {\n        return `${image.originalWidth} × ${image.originalHeight}px`\n    }\n    return \"High-resolution export.\"\n}\n\nconst makeImageSrc = (image: ImageMetadata, width?: number) => {\n    if (!image.cloudflareId) return undefined\n    const fallbackWidth = image.originalWidth ?? 1600\n    return `${CLOUDFLARE_IMAGES_URL}/${image.cloudflareId}/w=${\n        width ?? fallbackWidth\n    }`\n}\n","import * as React from \"react\"\nimport { EnrichedBlockTable } from \"@ourworldindata/utils\"\nimport { ArticleBlocks } from \"./ArticleBlocks.js\"\nimport SpanElements from \"./SpanElements.js\"\n\nfunction TableCell(props: {\n    tag: \"td\" | \"th\"\n    scope?: \"row\" | \"col\"\n    children: React.ReactNode\n}) {\n    const { tag, scope, children } = props\n    return React.createElement(tag, { scope }, children)\n}\n\nexport type TableProps = {\n    className?: string\n    shouldRenderLinks?: boolean\n    interactiveImages?: boolean\n} & EnrichedBlockTable\n\nexport function Table(props: TableProps) {\n    const {\n        className,\n        rows,\n        template,\n        shouldRenderLinks = true,\n        interactiveImages = true,\n    } = props\n    const isFirstColumnHeader =\n        template === \"header-column-row\" || template === \"header-column\"\n    const isFirstRowHeader =\n        template === \"header-column-row\" || template === \"header-row\"\n\n    return (\n        <div className={className}>\n            <table>\n                {isFirstRowHeader && (\n                    <thead>\n                        <tr>\n                            {rows[0]?.cells.map((cell, columnIndex) => {\n                                const scope =\n                                    isFirstColumnHeader && columnIndex === 0\n                                        ? \"row\"\n                                        : \"col\"\n                                return (\n                                    <TableCell\n                                        key={columnIndex}\n                                        scope={scope}\n                                        tag=\"th\"\n                                    >\n                                        <ArticleBlocks\n                                            blocks={cell.content}\n                                            shouldRenderLinks={\n                                                shouldRenderLinks\n                                            }\n                                            interactiveImages={\n                                                interactiveImages\n                                            }\n                                        />\n                                    </TableCell>\n                                )\n                            })}\n                        </tr>\n                    </thead>\n                )}\n                <tbody>\n                    {rows\n                        .slice(isFirstRowHeader ? 1 : 0)\n                        .map((row, rowIndex) => {\n                            const actualRowIndex = isFirstRowHeader\n                                ? rowIndex + 1\n                                : rowIndex\n                            return (\n                                <tr key={actualRowIndex}>\n                                    {row.cells.map((cell, columnIndex) => {\n                                        const scope =\n                                            isFirstColumnHeader &&\n                                            columnIndex === 0\n                                                ? \"row\"\n                                                : undefined\n                                        const tag = scope ? \"th\" : \"td\"\n\n                                        return (\n                                            <TableCell\n                                                key={columnIndex}\n                                                scope={scope}\n                                                tag={tag}\n                                            >\n                                                <ArticleBlocks\n                                                    blocks={cell.content}\n                                                    shouldRenderLinks={\n                                                        shouldRenderLinks\n                                                    }\n                                                    interactiveImages={\n                                                        interactiveImages\n                                                    }\n                                                />\n                                            </TableCell>\n                                        )\n                                    })}\n                                </tr>\n                            )\n                        })}\n                </tbody>\n                {props.caption && (\n                    <caption>\n                        <SpanElements\n                            spans={props.caption}\n                            shouldRenderLinks={shouldRenderLinks}\n                        />\n                    </caption>\n                )}\n            </table>\n        </div>\n    )\n}\n","import {\n    ChartConfigType,\n    EnrichedBlockExplorerTiles,\n} from \"@ourworldindata/types\"\nimport { Button } from \"@ourworldindata/components\"\nimport { useLinkedChart } from \"../utils.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\nimport { BAKED_BASE_URL } from \"../../../settings/clientSettings.mjs\"\n\nfunction ExplorerTile({ url }: { url: string }) {\n    const { linkedChart, errorMessage } = useLinkedChart(url)\n    const { isPreviewing } = useDocumentContext()\n    if (errorMessage && isPreviewing) {\n        return <p>{errorMessage}</p>\n    }\n    if (!linkedChart) {\n        return null\n    }\n    // Grapher URLs are only valid here if they resolve to a multi-dim data page\n    if (linkedChart.configType === ChartConfigType.Grapher) {\n        if (isPreviewing) {\n            return (\n                <p>\n                    Explorer tiles can only link to explorers or multi-dim data\n                    pages, but {url} is a regular grapher chart\n                </p>\n            )\n        }\n        return null\n    }\n    const icon = linkedChart.tags[0] ? (\n        <img\n            className=\"explorer-tile__icon\"\n            height={40}\n            width={40}\n            src={`${BAKED_BASE_URL}/images/tag-icons/${encodeURIComponent(\n                linkedChart.tags[0]\n            )}.svg`}\n            alt={`Icon for topic ${linkedChart.tags[0]}`}\n            loading=\"lazy\"\n        />\n    ) : null\n\n    return (\n        <li className=\"span-cols-3 span-md-cols-6\">\n            <a className=\"explorer-tile\" href={linkedChart.resolvedUrl}>\n                {icon}\n                <div className=\"explorer-tile__text-container\">\n                    <p className=\"h3-bold explorer-tile__title\">\n                        {linkedChart.title}\n                    </p>\n                    <p className=\"h3-bold explorer-tile__suffix\">\n                        {\" \"}\n                        Data Explorer\n                    </p>\n                </div>\n            </a>\n        </li>\n    )\n}\n\ntype ExplorerTilesProps = EnrichedBlockExplorerTiles & {\n    className?: string\n}\n\nexport function ExplorerTiles({\n    className,\n    title,\n    subtitle,\n    explorers,\n}: ExplorerTilesProps) {\n    return (\n        <div className={className}>\n            <h2 className=\"h2-bold span-cols-6 span-md-12 explorer-tiles__title\">\n                {title}\n            </h2>\n            <Button\n                className=\"span-cols-4 col-start-9 span-md-cols-5 col-md-start-8 col-sm-start-1 span-sm-cols-12 body-3-medium explorer-tiles__cta\"\n                href=\"/explorers\"\n                text=\"See all our Data Explorers\"\n                theme=\"outline-vermillion\"\n            />\n\n            <p className=\"body-2-regular explorer-tiles__subtitle span-cols-8 span-md-cols-7 span-sm-cols-12\">\n                {subtitle}\n            </p>\n            <ul className=\"span-cols-12 grid explorer-tiles-grid\">\n                {explorers.map((explorer) => (\n                    <ExplorerTile key={explorer.url} {...explorer} />\n                ))}\n            </ul>\n        </div>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport cx from \"clsx\"\n\nimport {\n    BlockSize,\n    EnrichedBlockKeyIndicator,\n    EnrichedBlockText,\n} from \"@ourworldindata/types\"\nimport { Button } from \"@ourworldindata/components\"\n\nimport Chart from \"./Chart.js\"\nimport Paragraph from \"./Paragraph.js\"\nimport { useLinkedChart, useLinkedIndicator } from \"../utils.js\"\n\nexport default function KeyIndicator({\n    d,\n    className,\n}: {\n    d: EnrichedBlockKeyIndicator\n    className?: string\n}) {\n    const { linkedChart } = useLinkedChart(d.datapageUrl)\n    const { linkedIndicator } = useLinkedIndicator(\n        linkedChart?.indicatorId ?? 0\n    )\n\n    if (!linkedChart) return null\n    if (!linkedIndicator) return null\n\n    const source = _.capitalize(d.source || linkedIndicator.attributionShort)\n\n    return (\n        <div className={cx(\"key-indicator grid grid-cols-12\", className)}>\n            <div className=\"left col-start-1 span-cols-4 span-md-cols-12\">\n                <div className=\"indicator-metadata\">\n                    <span className=\"indicator-title\">\n                        {linkedIndicator.title}\n                    </span>{\" \"}\n                    <span className=\"indicator-source\">{source}</span>\n                </div>\n                <h4 className=\"narrative-title\">{d.title}</h4>\n                <div className=\"text\">\n                    {d.text.map((textBlock: EnrichedBlockText, i: number) => (\n                        <Paragraph d={textBlock} key={i} />\n                    ))}\n                </div>\n                <Button\n                    className=\"datapage-link datapage-link-desktop\"\n                    href={linkedChart.resolvedUrl}\n                    text=\"Explore the data\"\n                    theme=\"solid-blue\"\n                />\n            </div>\n            <Chart\n                className=\"key-indicator-chart col-start-5 span-cols-8 span-md-cols-12 margin-0\"\n                d={{\n                    url: d.datapageUrl, // The URL is resolved in the component.\n                    type: \"chart\",\n                    size: BlockSize.Wide,\n                    parseErrors: [],\n                }}\n            />\n            <Button\n                className=\"datapage-link datapage-link-mobile col-start-1 span-cols-12\"\n                href={linkedChart.resolvedUrl}\n                text=\"Explore the data\"\n                theme=\"solid-blue\"\n            />\n        </div>\n    )\n}\n","import { useContext } from \"react\"\nimport * as React from \"react\"\nimport cx from \"clsx\"\nimport {\n    Button as AriaButton,\n    Disclosure,\n    DisclosureGroup,\n    DisclosurePanel,\n} from \"react-aria-components\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faArrowRight,\n    faPlus,\n    faEarthAmericas,\n    faChartLine,\n    faTable,\n    IconDefinition,\n} from \"@fortawesome/free-solid-svg-icons\"\n\nimport {\n    EnrichedBlockKeyIndicatorCollection,\n    EnrichedBlockKeyIndicator,\n    GRAPHER_TAB_CONFIG_OPTIONS,\n} from \"@ourworldindata/types\"\nimport { Url, commafyNumber } from \"@ourworldindata/utils\"\nimport { isValidTabQueryParam } from \"@ourworldindata/grapher\"\n\nimport { useLinkedChart, useLinkedIndicator } from \"../utils.js\"\nimport KeyIndicator from \"./KeyIndicator.js\"\nimport { AttachmentsContext } from \"../AttachmentsContext.js\"\nimport { Button } from \"@ourworldindata/components\"\nimport { SEARCH_BASE_PATH } from \"../../search/searchUtils.js\"\n\nconst tabIconMap: Record<\"chart\" | \"map\" | \"table\", IconDefinition> = {\n    chart: faChartLine,\n    map: faEarthAmericas,\n    table: faTable,\n}\n\nexport default function KeyIndicatorCollection({\n    d,\n    className,\n}: {\n    d: EnrichedBlockKeyIndicatorCollection\n    className?: string\n}) {\n    const disclosureIds = d.blocks.map(\n        (block: EnrichedBlockKeyIndicator) =>\n            `key-indicator-collection_${Url.fromURL(block.datapageUrl).slug ?? \"\"}`\n    )\n\n    const { homepageMetadata } = useContext(AttachmentsContext)\n\n    const { blocks } = d\n    return (\n        <section className={cx(\"key-indicator-collection\", className)}>\n            <header className=\"key-indicator-collection__header span-cols-8 span-sm-cols-12\">\n                <h2 className=\"h2-bold\">Explore our data</h2>\n                {homepageMetadata?.chartCount ? (\n                    <p className=\"body-2-regular\">\n                        Featured data from our collection of{\" \"}\n                        {commafyNumber(homepageMetadata.chartCount)} interactive\n                        charts.\n                    </p>\n                ) : (\n                    <p className=\"body-2-regular\">\n                        Featured data from our collection\n                    </p>\n                )}\n            </header>\n            <Button\n                href={SEARCH_BASE_PATH}\n                className=\"key-indicator-collection__all-charts-button body-3-medium span-cols-4 col-start-9 col-sm-start-1 span-sm-cols-12\"\n                text=\"See all our data\"\n                theme=\"outline-vermillion\"\n            />\n            <DisclosureGroup\n                className=\"span-cols-12\"\n                defaultExpandedKeys={disclosureIds.slice(0, 1)}\n            >\n                {blocks.map(\n                    (block: EnrichedBlockKeyIndicator, blockIndex: number) => {\n                        const disclosureId = disclosureIds[blockIndex]\n\n                        return (\n                            <AccordionItem\n                                // assumes a key indicator doesn't appear twice on a page\n                                id={disclosureId}\n                                key={disclosureId}\n                                block={block}\n                            >\n                                <KeyIndicator d={block} />\n                            </AccordionItem>\n                        )\n                    }\n                )}\n            </DisclosureGroup>\n        </section>\n    )\n}\n\nfunction AccordionItem({\n    id,\n    block,\n    children,\n}: {\n    id: string\n    block: EnrichedBlockKeyIndicator\n    children: React.ReactNode\n}): React.ReactElement {\n    return (\n        <Disclosure\n            id={id}\n            className={({ isExpanded }) =>\n                cx(\"accordion-item\", {\n                    \"accordion-item--open\": isExpanded,\n                    \"accordion-item--closed\": !isExpanded,\n                })\n            }\n        >\n            {({ isExpanded }) => (\n                <>\n                    {/* desktop */}\n                    <h3 className=\"accordion-item__heading\">\n                        <AriaButton\n                            slot=\"trigger\"\n                            className=\"accordion-item__button\"\n                        >\n                            <KeyIndicatorHeader\n                                block={block}\n                                isContentVisible={isExpanded}\n                            />\n                        </AriaButton>\n                    </h3>\n                    {/* mobile */}\n                    {!isExpanded && (\n                        <KeyIndicatorLink block={block}>\n                            <KeyIndicatorHeader block={block} />\n                        </KeyIndicatorLink>\n                    )}\n                    <DisclosurePanel\n                        className=\"accordion-item__content\"\n                        role=\"region\"\n                    >\n                        {children}\n                    </DisclosurePanel>\n                </>\n            )}\n        </Disclosure>\n    )\n}\n\nfunction KeyIndicatorHeader({\n    block,\n    isContentVisible,\n}: {\n    block: EnrichedBlockKeyIndicator\n    isContentVisible?: boolean\n}) {\n    const { linkedChart } = useLinkedChart(block.datapageUrl)\n    const { linkedIndicator } = useLinkedIndicator(\n        linkedChart?.indicatorId ?? 0\n    )\n\n    if (!linkedChart) return null\n    if (!linkedIndicator) return null\n\n    const { queryParams } = Url.fromURL(linkedChart.resolvedUrl)\n    const tabFromQueryParams =\n        queryParams.tab && isValidTabQueryParam(queryParams.tab)\n            ? queryParams.tab\n            : undefined\n    const activeTab =\n        tabFromQueryParams ||\n        linkedChart.tab ||\n        GRAPHER_TAB_CONFIG_OPTIONS.chart\n    const activeTabType =\n        activeTab === \"table\" || activeTab === \"map\" ? activeTab : \"chart\"\n\n    const source = block.source || linkedIndicator.attributionShort\n\n    return (\n        <div className=\"key-indicator-header\">\n            <div className=\"key-indicator-header__left\">\n                <FontAwesomeIcon\n                    icon={tabIconMap[activeTabType]}\n                    className=\"key-indicator-header__tab-icon\"\n                />\n                <div>\n                    <span className=\"key-indicator-header__title\">\n                        {linkedIndicator.title}\n                    </span>\n                    {source && (\n                        <>\n                            {\" \"}\n                            <span className=\"key-indicator-header__source\">\n                                {source}\n                            </span>\n                        </>\n                    )}\n                </div>\n            </div>\n            {!isContentVisible && (\n                <div>\n                    {/* desktop */}\n                    <FontAwesomeIcon\n                        icon={faPlus}\n                        className=\"key-indicator-header__icon\"\n                    />\n                    {/* mobile */}\n                    <FontAwesomeIcon\n                        icon={faArrowRight}\n                        className=\"key-indicator-header__icon\"\n                    />\n                </div>\n            )}\n        </div>\n    )\n}\n\nfunction KeyIndicatorLink({\n    block,\n    children,\n}: {\n    block: EnrichedBlockKeyIndicator\n    children: React.ReactNode\n}) {\n    const { linkedChart } = useLinkedChart(block.datapageUrl)\n    const { linkedIndicator } = useLinkedIndicator(\n        linkedChart?.indicatorId ?? 0\n    )\n\n    if (!linkedChart) return null\n    if (!linkedIndicator) return null\n\n    return (\n        <a\n            className=\"accordion-item__link-mobile\"\n            href={linkedChart.resolvedUrl}\n        >\n            {children}\n        </a>\n    )\n}\n","import { EnrichedBlockPillRow } from \"@ourworldindata/types\"\nimport { useLinkedDocument } from \"../utils.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\n\nfunction Pill(props: { text?: string; url: string }) {\n    const { linkedDocument, errorMessage } = useLinkedDocument(props.url)\n    const { isPreviewing } = useDocumentContext()\n    const url = linkedDocument?.url ?? props.url\n    const text = props.text ?? linkedDocument?.title\n\n    if (isPreviewing) {\n        if (errorMessage || !text || !url) {\n            return (\n                <li className=\"article-block__pill article-block__pill--error\">\n                    {errorMessage}\n                </li>\n            )\n        }\n    }\n\n    if (!text || !url) return null\n\n    return (\n        <li className=\"article-block__pill\">\n            <a className=\"body-3-medium\" href={url}>\n                {text}\n            </a>\n        </li>\n    )\n}\n\nexport function PillRow(props: EnrichedBlockPillRow & { className?: string }) {\n    return (\n        <div className={props.className}>\n            <div className=\"article-block__pill-row-interior span-cols-12 col-start-2\">\n                <p className=\"h5-black-caps\">{props.title}</p>\n                <ul>\n                    {props.pills.map((pill, i) => (\n                        <Pill key={i} {...pill} />\n                    ))}\n                </ul>\n            </div>\n        </div>\n    )\n}\n","export function NewsletterIcon({ className }: { className?: string }) {\n    return (\n        <svg\n            width=\"48\"\n            height=\"48\"\n            fill=\"none\"\n            className={className}\n            viewBox=\"0 0 48 48\"\n        >\n            <circle cx=\"24\" cy=\"24\" r=\"24\" fill=\"#dbe5f0\" />\n            <rect\n                width=\"25.466\"\n                height=\"17.339\"\n                x=\"11.268\"\n                y=\"19.395\"\n                fill=\"#fff\"\n                rx=\"2.709\"\n            />\n            <path fill=\"#fff\" d=\"M15.06 11.81h17.881v13.004H15.06z\" />\n            <path\n                fill=\"#355174\"\n                d=\"M11.268 21.107q-.067.259-.068.531v12.497c0 .542.164 1.042.44 1.463l8.546-7.02zm25.463.002-8.917 7.468 8.547 7.02c.278-.421.44-.922.44-1.462V21.638q-.001-.271-.07-.53M15.467 12.8c0-.294.239-.533.533-.533h16.002c.294 0 .533.24.533.533v10.409l3.668-3.072a2.3 2.3 0 0 0-.341-.305l-2.26-1.78V12.8c0-.882-.718-1.6-1.6-1.6H16c-.882 0-1.6.718-1.6 1.6v5.253l-2.234 1.76a2.4 2.4 0 0 0-.365.325l3.666 3.07zm7.519 14.86-10.591 8.698c.424.28.93.444 1.473.444h20.268c.544 0 1.05-.166 1.47-.446L25.019 27.66a1.6 1.6 0 0 0-2.032 0\"\n            />\n            <path\n                fill=\"#98a9bd\"\n                d=\"M20.073 15.934c.287 0 .541.254.541.541v5.69c0 .152.119.27.271.27h6.773c.288 0 .542.254.542.542a.546.546 0 0 1-.542.542h-6.773a1.337 1.337 0 0 1-1.354-1.355v-5.689c0-.287.237-.541.542-.541m2.167 3.25c.288 0 .542.254.542.542v1.084a.545.545 0 0 1-.542.542.535.535 0 0 1-.542-.542v-1.084c0-.288.237-.542.542-.542m2.167-1.083v2.709a.545.545 0 0 1-.542.542.535.535 0 0 1-.542-.542V18.1c0-.287.238-.541.542-.541.288 0 .542.254.542.542m1.084.542c.287 0 .541.254.541.541v1.626a.546.546 0 0 1-.541.542.535.535 0 0 1-.542-.542v-1.626c0-.287.237-.541.542-.541m2.167-1.626v3.793a.546.546 0 0 1-.542.542.535.535 0 0 1-.542-.542v-3.793c0-.288.237-.542.542-.542.288 0 .542.254.542.542\"\n            />\n        </svg>\n    )\n}\n","import {\n    MAILCHIMP_API_SERVER,\n    MAILCHIMP_NEWSLETTER_LIST_ID,\n} from \"@ourworldindata/types\"\n\nexport const MAILCHIMP_NEWSLETTER_SIGNUP_FORM_ACTION = `https://ourworldindata.${MAILCHIMP_API_SERVER}.list-manage.com/subscribe/post?u=18058af086319ba6afad752ec&id=${MAILCHIMP_NEWSLETTER_LIST_ID}`\n\nexport const MAILCHIMP_NEWSLETTER_GROUP_ID = \"85302\"\nexport const MAILCHIMP_OWID_BRIEF_GROUP_VALUE = \"2\"\nexport const MAILCHIMP_SIGNUP_HONEYPOT_NAME = `b_18058af086319ba6afad752ec_${MAILCHIMP_NEWSLETTER_LIST_ID}`\n\nexport function makeMailchimpNewsletterGroupInputName(\n    groupValue: string\n): string {\n    return `group[${MAILCHIMP_NEWSLETTER_GROUP_ID}][${groupValue}]`\n}\n","import { useRef, useState } from \"react\"\nimport { TurnstileInstance } from \"@marsidev/react-turnstile\"\n\nexport const NEWSLETTER_HONEYPOT_FIELD = \"website\"\n\nexport function useNewsletterSpamProtection() {\n    const ref = useRef<TurnstileInstance>(undefined)\n    const [captchaToken, setCaptchaToken] = useState(\"\")\n\n    return {\n        ref,\n        captchaToken,\n        setCaptchaToken,\n        resetCaptcha: () => {\n            setCaptchaToken(\"\")\n            ref.current?.reset()\n        },\n        /** The spam-protection fields of an API request, read from the submitted form. */\n        spamProtectionFields: (form: HTMLFormElement) => ({\n            captchaToken,\n            website:\n                new FormData(form).get(NEWSLETTER_HONEYPOT_FIELD)?.toString() ??\n                \"\",\n        }),\n    }\n}\n","import { Ref, useState } from \"react\"\nimport { Turnstile, TurnstileInstance } from \"@marsidev/react-turnstile\"\nimport { TURNSTILE_SITE_KEY } from \"../../settings/clientSettings.mjs\"\nimport { NEWSLETTER_HONEYPOT_FIELD } from \"./useNewsletterSpamProtection.js\"\n\nexport function NewsletterSpamProtection({\n    action = \"subscribe\",\n    ref,\n    onToken,\n}: {\n    action?: \"subscribe\" | \"request-link\"\n    ref: Ref<TurnstileInstance | undefined>\n    /** Called with the verification token, or \"\" when it is no longer valid. */\n    onToken: (token: string) => void\n}) {\n    const [error, setError] = useState<string | null>(null)\n\n    function onError() {\n        onToken(\"\")\n        setError(\n            \"Verification could not load. Please reload the page and try again.\"\n        )\n    }\n\n    return (\n        <>\n            {/* A trap for form-filling bots: humans never see it, so a filled\n            value marks the submission as spam. Keep anything that would give\n            that away out of the rendered markup. */}\n            <div className=\"newsletter-form__website\" aria-hidden=\"true\">\n                <label>\n                    Website\n                    <input\n                        type=\"text\"\n                        name={NEWSLETTER_HONEYPOT_FIELD}\n                        tabIndex={-1}\n                        autoComplete=\"off\"\n                    />\n                </label>\n            </div>\n            <Turnstile\n                ref={ref}\n                className=\"newsletter-form__turnstile\"\n                siteKey={TURNSTILE_SITE_KEY}\n                options={{\n                    action,\n                    appearance: \"interaction-only\",\n                    size: \"flexible\",\n                }}\n                onSuccess={(token) => {\n                    onToken(token)\n                    setError(null)\n                }}\n                onExpire={() => onToken(\"\")}\n                onTimeout={() => onToken(\"\")}\n                onError={onError}\n                onUnsupported={onError}\n                scriptOptions={{ onError }}\n            />\n            {error && (\n                <p className=\"newsletter-form__alert\" role=\"alert\">\n                    {error}\n                </p>\n            )}\n        </>\n    )\n}\n","import { EMAIL_NOTIFICATIONS_API_BASE_URL } from \"../../settings/clientSettings.mjs\"\n\nexport const GENERIC_ERROR_MESSAGE = \"Something went wrong. Please try again.\"\n\n/**\n * An error whose message the API wrote for readers, so forms can show it as\n * is. Anything else that ends up in a catch block gets a generic message\n * via `getErrorMessage`.\n */\nexport class ApiError extends Error {}\n\n/**\n * These return the raw response rather than using `fetchJson` from utils,\n * because callers need the status: 410 marks an expired magic link and drives\n * its own screen rather than an error message, and `fetchJson` throws on a\n * non-ok response before the body — and the `error` message it carries — can\n * be read.\n */\nexport function apiGet(\n    path: string,\n    params: Record<string, string>\n): Promise<Response> {\n    const query = new URLSearchParams(params).toString()\n    return fetch(`${EMAIL_NOTIFICATIONS_API_BASE_URL}${path}?${query}`)\n}\n\nexport function apiPost(path: string, body: unknown): Promise<Response> {\n    return fetch(`${EMAIL_NOTIFICATIONS_API_BASE_URL}${path}`, {\n        method: \"POST\",\n        headers: {\n            Accept: \"application/json\",\n            \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify(body),\n    })\n}\n\n/** Turns a non-ok response into an Error carrying the API's `error` message. */\nexport async function throwIfApiError(response: Response): Promise<void> {\n    if (response.ok) return\n    const json: { error?: string } | null = await response\n        .json()\n        .catch(() => null)\n    throw new ApiError(json?.error ?? GENERIC_ERROR_MESSAGE)\n}\n\nexport function getErrorMessage(error: unknown): string {\n    return error instanceof ApiError ? error.message : GENERIC_ERROR_MESSAGE\n}\n","import { Checkbox } from \"@ourworldindata/components\"\n\nexport const NewsletterOption = ({\n    id,\n    imageSrc,\n    title,\n    cadence,\n    description,\n    checked,\n    disabled,\n    onChange,\n}: {\n    id: string\n    imageSrc?: string\n    title: string\n    cadence: string\n    description: string\n    checked: boolean\n    disabled?: boolean\n    onChange: () => void\n}) => (\n    <div className=\"newsletter-option\">\n        {imageSrc && (\n            <img\n                className=\"newsletter-option__image\"\n                src={imageSrc}\n                width={85}\n                height={46}\n                alt=\"\"\n            />\n        )}\n        <div className=\"newsletter-option__content\">\n            <Checkbox\n                id={id}\n                autoComplete=\"off\"\n                checked={checked}\n                disabled={disabled}\n                onChange={onChange}\n                label={\n                    <span className=\"newsletter-option__heading\">\n                        <span className=\"newsletter-option__title\">\n                            {title}\n                        </span>{\" \"}\n                        <span className=\"newsletter-option__cadence\">\n                            {cadence}\n                        </span>\n                    </span>\n                }\n            />\n            <p className=\"newsletter-option__description\">{description}</p>\n        </div>\n    </div>\n)\n","/**\n * Hand-off from the small newsletter signup forms to /subscribe when \"Follow\n * Topics\" is ticked: kept in sessionStorage rather than the URL so the email\n * address never lands in history, analytics or referrers.\n */\n\nconst STORAGE_KEY = \"owid-subscribe-prefill\"\n\nexport interface SubscribePrefill {\n    email: string\n    subscribeToOwidBrief: boolean\n}\n\nexport function storeSubscribePrefill(prefill: SubscribePrefill): void {\n    try {\n        sessionStorage.setItem(STORAGE_KEY, JSON.stringify(prefill))\n    } catch {\n        // Storage can be unavailable (private mode, blocked site data); the\n        // subscribe page then just starts from its defaults.\n    }\n}\n\n/** Reads and clears the hand-off, so a later visit starts fresh. */\nexport function takeSubscribePrefill(): SubscribePrefill | undefined {\n    try {\n        const raw = sessionStorage.getItem(STORAGE_KEY)\n        if (!raw) return undefined\n        sessionStorage.removeItem(STORAGE_KEY)\n        const parsed: unknown = JSON.parse(raw)\n        if (\n            typeof parsed !== \"object\" ||\n            parsed === null ||\n            typeof (parsed as SubscribePrefill).email !== \"string\"\n        )\n            return undefined\n        return {\n            email: (parsed as SubscribePrefill).email,\n            subscribeToOwidBrief: !!(parsed as SubscribePrefill)\n                .subscribeToOwidBrief,\n        }\n    } catch {\n        return undefined\n    }\n}\n","export const OWID_BRIEF_TITLE = \"The OWID Brief\"\nexport const OWID_BRIEF_CADENCE = \"Twice a month\"\nexport const OWID_BRIEF_DESCRIPTION =\n    \"Stay up to date with our latest work plus curated highlights from across Our World in Data, twice a month.\"\n\nexport const FOLLOW_TOPICS_TITLE = \"Follow Topics\"\nexport const FOLLOW_TOPICS_CADENCE = \"Daily or weekly\"\nexport const FOLLOW_TOPICS_DESCRIPTION =\n    \"Receive updates on the topics you follow as we publish them, at your preferred frequency.\"\n\nexport const PrivacyNotice = ({ className }: { className: string }) => (\n    <div className={className}>\n        By subscribing you are agreeing to the terms of our{\" \"}\n        <a href=\"/privacy-policy\">privacy policy</a>.\n    </div>\n)\n","import { NewsletterSpamProtection } from \"./NewsletterSpamProtection.js\"\nimport { useNewsletterSpamProtection } from \"./useNewsletterSpamProtection.js\"\nimport { useState } from \"react\"\nimport * as React from \"react\"\nimport cx from \"clsx\"\nimport { useMutation } from \"@tanstack/react-query\"\nimport { Button, TextInput } from \"@ourworldindata/components\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faCheck } from \"@fortawesome/free-solid-svg-icons\"\nimport { EmailNotificationsSubscribeRequest } from \"@ourworldindata/types\"\nimport { SiteAnalytics } from \"../SiteAnalytics.js\"\nimport { NewsletterSubscriptionContext } from \"../newsletter.js\"\nimport { SiteQueryClientProvider } from \"../SiteQueryClientProvider.js\"\nimport {\n    apiPost,\n    getErrorMessage,\n    throwIfApiError,\n} from \"./emailNotificationsApi.js\"\nimport { NewsletterOption } from \"./NewsletterOption.js\"\nimport { storeSubscribePrefill } from \"./subscribePrefill.js\"\nimport {\n    FOLLOW_TOPICS_CADENCE,\n    FOLLOW_TOPICS_DESCRIPTION,\n    FOLLOW_TOPICS_TITLE,\n    OWID_BRIEF_CADENCE,\n    OWID_BRIEF_DESCRIPTION,\n    OWID_BRIEF_TITLE,\n    PrivacyNotice,\n} from \"./newsletterCopy.js\"\n\nconst analytics = new SiteAnalytics()\n\n/**\n * The compact signup form shown in the header, the floating button, the\n * homepage and /latest once email notifications are enabled.\n *\n * The OWID Brief alone subscribes in place through our API (which adds the\n * address to Mailchimp). \"Follow Topics\" needs the topic and cadence controls\n * that only /subscribe has, so it hands the email and Brief choice over to\n * that page instead of subscribing here.\n */\nexport const NewsletterSignupForm = (props: {\n    context: NewsletterSubscriptionContext\n    className?: string\n}) => (\n    // The floating site-tools mount has no query client above it.\n    <SiteQueryClientProvider>\n        <NewsletterSignupFormInner {...props} />\n    </SiteQueryClientProvider>\n)\n\nconst NewsletterSignupFormInner = ({\n    context,\n    className,\n}: {\n    context: NewsletterSubscriptionContext\n    className?: string\n}) => {\n    const [subscribeToOwidBrief, setSubscribeToOwidBrief] = useState(true)\n    const [followTopics, setFollowTopics] = useState(false)\n    const {\n        ref: captchaRef,\n        captchaToken,\n        setCaptchaToken,\n        resetCaptcha,\n        spamProtectionFields,\n    } = useNewsletterSpamProtection()\n    const [email, setEmail] = useState(\"\")\n    const [hasEditedEmail, setHasEditedEmail] = useState(false)\n\n    const subscribe = useMutation({\n        mutationFn: async (request: EmailNotificationsSubscribeRequest) => {\n            const response = await apiPost(\"/subscribe\", request)\n            await throwIfApiError(response)\n        },\n        onSuccess: () => {\n            analytics.logSiteFormSubmit(\n                \"newsletter-subscribe\",\n                `Subscribe [${context}]`\n            )\n        },\n        onError: (error) => {\n            analytics.logNewsletterSubscribeError(\n                context,\n                getErrorMessage(error)\n            )\n            resetCaptcha()\n        },\n    })\n\n    const isSubmittable = subscribeToOwidBrief || followTopics\n    const showCaptcha =\n        hasEditedEmail &&\n        ((subscribeToOwidBrief && !followTopics) || !!captchaToken)\n\n    const handleSubmit = (event: React.SubmitEvent<HTMLFormElement>) => {\n        event.preventDefault()\n        if (!isSubmittable || subscribe.isPending) return\n        const trimmedEmail = email.trim()\n\n        if (followTopics) {\n            analytics.logSiteClick(\n                \"newsletter-follow-topics-handoff\",\n                `Subscribe [${context}]`\n            )\n            storeSubscribePrefill({ email: trimmedEmail, subscribeToOwidBrief })\n            window.location.assign(\"/subscribe\")\n            return\n        }\n\n        if (!captchaToken) return\n        subscribe.mutate({\n            ...spamProtectionFields(event.currentTarget),\n            email: trimmedEmail,\n            subscribeToOwidBrief,\n        })\n    }\n\n    if (subscribe.isSuccess)\n        return (\n            <div\n                className={cx(\"newsletter-signup-form__success\", className)}\n                role=\"status\"\n            >\n                <span\n                    className=\"newsletter-signup-form__success-icon\"\n                    aria-hidden=\"true\"\n                >\n                    <FontAwesomeIcon icon={faCheck} />\n                </span>\n                <span>Your subscription to The OWID Brief is active.</span>\n            </div>\n        )\n\n    // The submit button stays disabled until a captcha token arrives, so the\n    // form needs JavaScript: there is no native fallback before hydration.\n    return (\n        <form\n            className={cx(\"newsletter-signup-form\", className)}\n            onSubmit={handleSubmit}\n        >\n            <NewsletterOption\n                id={`newsletter-signup-brief-${context}`}\n                title={OWID_BRIEF_TITLE}\n                cadence={OWID_BRIEF_CADENCE}\n                description={OWID_BRIEF_DESCRIPTION}\n                checked={subscribeToOwidBrief}\n                disabled={subscribe.isPending}\n                onChange={() => setSubscribeToOwidBrief(!subscribeToOwidBrief)}\n            />\n            <NewsletterOption\n                id={`newsletter-signup-topics-${context}`}\n                title={FOLLOW_TOPICS_TITLE}\n                cadence={\n                    followTopics\n                        ? \"Choose topics in next step\"\n                        : FOLLOW_TOPICS_CADENCE\n                }\n                description={FOLLOW_TOPICS_DESCRIPTION}\n                checked={followTopics}\n                disabled={subscribe.isPending}\n                onChange={() => setFollowTopics(!followTopics)}\n            />\n            {!isSubmittable && (\n                <div className=\"newsletter-signup-form__alert\">\n                    Please select at least one option.\n                </div>\n            )}\n            {subscribe.error && (\n                <div className=\"newsletter-signup-form__alert\">\n                    {getErrorMessage(subscribe.error)}\n                </div>\n            )}\n            <TextInput\n                className=\"newsletter-signup-form__email sentry-mask\"\n                type=\"email\"\n                autoComplete=\"email\"\n                placeholder=\"Your email address\"\n                required={true}\n                value={email}\n                disabled={subscribe.isPending}\n                onChange={(event) => {\n                    setHasEditedEmail(true)\n                    setEmail(event.target.value)\n                }}\n            />\n            {showCaptcha && (\n                <NewsletterSpamProtection\n                    ref={captchaRef}\n                    onToken={setCaptchaToken}\n                />\n            )}\n            <Button\n                className=\"newsletter-signup-form__submit\"\n                type=\"submit\"\n                theme=\"solid-vermillion\"\n                icon={null}\n                disabled={\n                    !isSubmittable ||\n                    subscribe.isPending ||\n                    (!followTopics && !captchaToken)\n                }\n                text={\n                    followTopics\n                        ? \"See subscription options\"\n                        : subscribe.isPending\n                          ? \"Subscribing…\"\n                          : \"Subscribe\"\n                }\n            />\n            <PrivacyNotice className=\"newsletter-signup-form__privacy-notice\" />\n        </form>\n    )\n}\n","import { useState } from \"react\"\nimport * as React from \"react\"\nimport cx from \"clsx\"\nimport { faTimes, faEnvelopeOpenText } from \"@fortawesome/free-solid-svg-icons\"\nimport { SiteAnalytics } from \"./SiteAnalytics.js\"\nimport { TextInput } from \"@ourworldindata/components\"\nimport { FEATURE_FLAGS, Features } from \"../settings/clientSettings.mjs\"\nimport { NewsletterSubscriptionContext } from \"./newsletter.js\"\nimport { NewsletterIcon } from \"./gdocs/components/NewsletterIcon.js\"\nimport { SiteToolsButton } from \"./SiteToolsButton.js\"\nimport {\n    MAILCHIMP_NEWSLETTER_GROUP_ID,\n    MAILCHIMP_NEWSLETTER_SIGNUP_FORM_ACTION,\n    MAILCHIMP_OWID_BRIEF_GROUP_VALUE,\n    MAILCHIMP_SIGNUP_HONEYPOT_NAME,\n    makeMailchimpNewsletterGroupInputName,\n} from \"./Newsletter/mailchimpSignup.js\"\nimport { NewsletterSignupForm } from \"./Newsletter/NewsletterSignupForm.js\"\n\nconst analytics = new SiteAnalytics()\n\nconst isEmailNotificationsEnabled = FEATURE_FLAGS.includes(\n    Features.EmailNotifications\n)\n\nexport const NewsletterSignup = ({\n    context,\n    className,\n    showSubheading,\n    children,\n}: {\n    context: NewsletterSubscriptionContext\n    className?: string\n    showSubheading?: boolean\n    children?: React.ReactNode\n}) => (\n    <div\n        className={cx(\n            isEmailNotificationsEnabled && \"newsletter-signup-panel\",\n            className\n        )}\n    >\n        <NewsletterSubscriptionHeader showSubheading={showSubheading} />\n        {isEmailNotificationsEnabled ? (\n            <NewsletterSignupForm context={context} />\n        ) : (\n            <MailchimpSubscriptionForm context={context} />\n        )}\n        {children}\n    </div>\n)\n\nexport const NewsletterSubscription = ({\n    context,\n}: {\n    context:\n        | NewsletterSubscriptionContext.Homepage\n        | NewsletterSubscriptionContext.Floating\n}) => {\n    const [isOpen, setIsOpen] = useState(false)\n\n    const subscribeText = \"Subscribe\"\n\n    return (\n        <div className={`newsletter-subscription${isOpen ? \" active\" : \"\"}`}>\n            {isOpen && (\n                <>\n                    <div\n                        className=\"overlay\"\n                        onClick={() => {\n                            setIsOpen(false)\n                        }}\n                    />\n                    <div className=\"box\">\n                        <NewsletterSignup context={context} />\n                    </div>\n                </>\n            )}\n            {isOpen ? (\n                <SiteToolsButton\n                    icon={faTimes}\n                    label=\"Close subscription form\"\n                    tooltip={false}\n                    onClick={() => setIsOpen(false)}\n                />\n            ) : (\n                <SiteToolsButton\n                    icon={faEnvelopeOpenText}\n                    label={subscribeText}\n                    dataTrackNote=\"dialog_open_newsletter\"\n                    onClick={() => setIsOpen(true)}\n                />\n            )}\n        </div>\n    )\n}\n\nexport const NewsletterSubscriptionHeader = ({\n    showSubheading = false,\n}: {\n    showSubheading?: boolean\n}) => {\n    return (\n        <div className=\"newsletter-subscription-header\">\n            <NewsletterIcon className=\"newsletter-subscription-header__icon\" />\n            <h4 className=\"newsletter-subscription-header__heading h3-bold\">\n                Subscribe to our newsletters\n            </h4>\n            {showSubheading && (\n                <span className=\"newsletter-subscription-header__subheading\">\n                    Receive our latest work by email\n                </span>\n            )}\n        </div>\n    )\n}\n\n/** The pre-email-notifications form, posting straight to Mailchimp. */\nexport const MailchimpSubscriptionForm = ({\n    context,\n    className = \"\",\n}: {\n    context: NewsletterSubscriptionContext\n    className?: string\n}) => {\n    const DATA_INSIGHTS = \"16\"\n    const BIWEEKLY = MAILCHIMP_OWID_BRIEF_GROUP_VALUE\n    const idDataInsights = `mce-group[${MAILCHIMP_NEWSLETTER_GROUP_ID}]-${MAILCHIMP_NEWSLETTER_GROUP_ID}-0${context ? \"-\" + context : \"\"}`\n    const idBiweekly = `mce-group[${MAILCHIMP_NEWSLETTER_GROUP_ID}]-${MAILCHIMP_NEWSLETTER_GROUP_ID}-1${context ? \"-\" + context : \"\"}`\n\n    const [frequencies, setFrequencies] = useState([DATA_INSIGHTS, BIWEEKLY])\n    const isSubmittable = frequencies.length !== 0\n\n    const updateFrequencies = (e: React.ChangeEvent<HTMLInputElement>) => {\n        if (e.target.checked) {\n            setFrequencies([e.target.value, ...frequencies])\n        } else {\n            setFrequencies(\n                frequencies.filter((frequency) => frequency !== e.target.value)\n            )\n        }\n    }\n\n    return (\n        <form\n            className={cx(\"newsletter-subscription-form\", className)}\n            action={MAILCHIMP_NEWSLETTER_SIGNUP_FORM_ACTION}\n            method=\"post\"\n            id=\"mc-embedded-subscribe-banner\"\n            name=\"mc-embedded-subscribe-banner\"\n            onSubmit={() =>\n                analytics.logSiteFormSubmit(\n                    \"newsletter-subscribe\",\n                    `Subscribe [${context ?? \"other-contexts\"}]`\n                )\n            }\n        >\n            <img\n                alt=\"\"\n                className=\"newsletter-subscription-form__checkbox-image\"\n                src=\"/images/biweekly-newsletter.webp\"\n                width={1200}\n                height={630}\n            />\n            <div className=\"newsletter-subscription-form__checkbox\">\n                <input\n                    type=\"checkbox\"\n                    value={BIWEEKLY}\n                    name={makeMailchimpNewsletterGroupInputName(BIWEEKLY)}\n                    id={idBiweekly}\n                    checked={frequencies.includes(BIWEEKLY)}\n                    onChange={updateFrequencies}\n                />\n                <label htmlFor={idBiweekly}>\n                    <span className=\"newsletter-subscription-form__label-title\">\n                        The OWID Brief\n                    </span>{\" \"}\n                    <span className=\"newsletter-subscription-form__label-frequency note-12-medium\">\n                        Twice a month\n                    </span>\n                    <div className=\"newsletter-subscription-form__label-text\">\n                        Stay up to date with our latest work plus curated\n                        highlights from across Our World in Data, twice a month.\n                    </div>\n                </label>\n                <a\n                    className=\"newsletter-subscription-form__example-link note-12-medium\"\n                    href=\"https://mailchi.mp/ourworldindata/owid-brief-2025-11-14\"\n                >\n                    See example OWID Brief newsletter\n                </a>\n            </div>\n            <img\n                alt=\"\"\n                className=\"newsletter-subscription-form__checkbox-image\"\n                src=\"/images/data-insights.webp\"\n                width={1200}\n                height={630}\n            />\n            <div className=\"newsletter-subscription-form__checkbox\">\n                <input\n                    type=\"checkbox\"\n                    value={DATA_INSIGHTS}\n                    name={makeMailchimpNewsletterGroupInputName(DATA_INSIGHTS)}\n                    id={idDataInsights}\n                    checked={frequencies.includes(DATA_INSIGHTS)}\n                    onChange={updateFrequencies}\n                />\n                <label htmlFor={idDataInsights}>\n                    <span className=\"newsletter-subscription-form__label-title\">\n                        Data Insights\n                    </span>{\" \"}\n                    <span className=\"newsletter-subscription-form__label-frequency note-12-medium\">\n                        Every few days\n                    </span>\n                    <div className=\"newsletter-subscription-form__label-text\">\n                        Receive our bite-sized insights on how the world is\n                        changing, every few days.\n                    </div>\n                </label>\n                <a\n                    className=\"newsletter-subscription-form__example-link note-12-medium\"\n                    href=\"https://us8.campaign-archive.com/?u=18058af086319ba6afad752ec&id=fdf16136e1\"\n                >\n                    See example Data Insights newsletter\n                </a>\n            </div>\n            {frequencies.length === 0 && (\n                <div className=\"newsletter-subscription-form__alert\">\n                    Please select at least one option.\n                </div>\n            )}\n            <div className=\"newsletter-subscription-form__email-submit\">\n                <TextInput\n                    placeholder=\"Your email address\"\n                    type=\"email\"\n                    className=\"newsletter-subscription-form__email sentry-mask\"\n                    name=\"EMAIL\"\n                    required={true}\n                />\n                <button\n                    aria-label=\"Subscribe to newsletter\"\n                    disabled={!isSubmittable}\n                    onClick={() =>\n                        analytics.logSiteClick(\n                            \"newsletter-subscribe\",\n                            `Subscribe [${context ?? \"other-contexts\"}]`\n                        )\n                    }\n                    className=\"newsletter-subscription-form__submit\"\n                >\n                    Subscribe\n                </button>\n            </div>\n            {/* This hidden field should not be the last element in the form as long as we use the row-gap mixin\n            to space elements vertically. When placed as the last element of the form, this hidden element becomes\n            the target of the :last-child selector of the row-gap mixin, when it should be applied to the last visible\n            element instead */}\n            <input\n                type=\"hidden\"\n                name={MAILCHIMP_SIGNUP_HONEYPOT_NAME}\n                tabIndex={-1}\n            />\n            <div className=\"newsletter-subscription-form__privacy-notice\">\n                By subscribing you are agreeing to the terms of our{\" \"}\n                <a href=\"/privacy-policy\">privacy policy</a>.\n            </div>\n        </form>\n    )\n}\n","export function AnnouncementsIcon() {\n    return (\n        <svg fill=\"none\" viewBox=\"0 0 56 56\">\n            <circle cx=\"28.002\" cy=\"28.002\" r=\"28.002\" fill=\"#dbe5f0\" />\n            <mask\n                id=\"a\"\n                width=\"57\"\n                height=\"57\"\n                x=\"0\"\n                y=\"0\"\n                maskUnits=\"userSpaceOnUse\"\n            >\n                <circle cx=\"28.002\" cy=\"28.002\" r=\"28.002\" fill=\"#dbe5f0\" />\n            </mask>\n            <g mask=\"url(#a)\">\n                <rect\n                    width=\"37\"\n                    height=\"55\"\n                    x=\"9.5\"\n                    y=\"16.5\"\n                    fill=\"#fff\"\n                    stroke=\"#cedef0\"\n                    rx=\"2.5\"\n                />\n                <circle cx=\"14.5\" cy=\"23.5\" r=\"2.5\" fill=\"#355174\" />\n                <circle cx=\"14.5\" cy=\"47.5\" r=\"2.5\" fill=\"#355174\" />\n                <rect\n                    width=\"21\"\n                    height=\"5\"\n                    x=\"21\"\n                    y=\"21\"\n                    fill=\"#98a9bd\"\n                    rx=\"1\"\n                />\n                <rect\n                    width=\"21\"\n                    height=\"5\"\n                    x=\"21\"\n                    y=\"45\"\n                    fill=\"#98a9bd\"\n                    rx=\"1\"\n                />\n                <rect\n                    width=\"21\"\n                    height=\"14\"\n                    x=\"21\"\n                    y=\"28\"\n                    fill=\"#c3d7ee\"\n                    rx=\"1\"\n                />\n                <rect\n                    width=\"21\"\n                    height=\"14\"\n                    x=\"21\"\n                    y=\"52\"\n                    fill=\"#c3d7ee\"\n                    rx=\"1\"\n                />\n            </g>\n        </svg>\n    )\n}\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { RSS_FEEDS, SOCIALS } from \"./SiteConstants.js\"\nimport { NewsletterSubscriptionContext } from \"./newsletter.js\"\n\nexport const OwidSocials = ({\n    includeRss = false,\n    context,\n}: {\n    includeRss?: boolean\n    context: NewsletterSubscriptionContext\n}) => {\n    const items = includeRss ? [...SOCIALS, ...RSS_FEEDS] : SOCIALS\n    return (\n        <div className=\"owid-socials\">\n            <p className=\"owid-socials__heading\">Follow us</p>\n            <ul className=\"owid-socials__list\">\n                {items.map(({ title, url, icon }) => (\n                    <li className=\"owid-socials__item\" key={title}>\n                        <a\n                            className=\"owid-socials__link\"\n                            href={url}\n                            title={title}\n                            data-track-note={context}\n                        >\n                            <FontAwesomeIcon\n                                className=\"owid-socials__label-icon\"\n                                icon={icon}\n                            />\n                            <span className=\"owid-socials__label\">{title}</span>\n                        </a>\n                    </li>\n                ))}\n            </ul>\n        </div>\n    )\n}\n","export enum NewsletterSubscriptionContext {\n    Homepage = \"homepage\",\n    /** The dropdown behind the \"Subscribe\" button in the site header. */\n    Header = \"header\",\n    /** The bottom-right site tools button. */\n    Floating = \"floating\",\n    HomepageDataInsights = \"homepageDataInsights\",\n    FloatingDataInsights = \"floatingDataInsights\",\n    Latest = \"latest\",\n    SubscribePage = \"subscribePage\",\n    DataInsightsIndex = \"dataInsightsIndex\",\n}\n","import {\n    LATEST_PATH,\n    LATEST_TYPE_LABELS,\n    LATEST_TYPE_VALUES,\n    LatestFeedGdoc,\n    LatestType,\n    EnrichedBlockImage,\n    LatestUrlParam,\n    OwidEnrichedGdocBlock,\n    PageChronologicalRecord,\n} from \"@ourworldindata/types\"\nimport {\n    deriveAnnouncementLatestType,\n    OwidGdocType,\n} from \"@ourworldindata/utils\"\nimport { match } from \"ts-pattern\"\n\n/** Build the /latest page path, optionally pre-filtered by type. */\nexport function buildLatestPagePath(type?: LatestType): string {\n    return type ? `${LATEST_PATH}?${LatestUrlParam.TYPE}=${type}` : LATEST_PATH\n}\n\n/** Decode the URL query `?type=` param back to a LatestType or null. */\nexport function decodeLatestType(param: string | null): LatestType | null {\n    if (!param) return null\n    return (LATEST_TYPE_VALUES as readonly string[]).includes(param)\n        ? (param as LatestType)\n        : null\n}\n\n/**\n * Map a /latest-eligible gdoc to its LatestType. Articles and Data Insights\n * pass through from `content.type`; Announcements bucket via kicker. Used by\n * the indexer; render-site call sites that already know they have an\n * announcement should call `deriveAnnouncementLatestType` directly.\n */\nexport function deriveLatestType(gdoc: LatestFeedGdoc): LatestType {\n    return match<LatestFeedGdoc, LatestType>(gdoc)\n        .with({ content: { type: OwidGdocType.Article } }, () => \"article\")\n        .with(\n            { content: { type: OwidGdocType.DataInsight } },\n            () => \"data-insight\"\n        )\n        .with({ content: { type: OwidGdocType.Announcement } }, (g) =>\n            deriveAnnouncementLatestType(g.content.kicker)\n        )\n        .exhaustive()\n}\n\n/** Plural display label for a LatestType — used as the dropdown label on\n * /latest's \"Filter by type\" filter (\"Articles\", \"Data Insights\", …). */\nexport const latestTypeLabelPlural = (type: LatestType): string =>\n    `${LATEST_TYPE_LABELS[type]}s`\n\n/** First image block, returned by identity so callers can remove it from the body. */\nexport function findThumbnailImageBlock(\n    blocks: OwidEnrichedGdocBlock[]\n): EnrichedBlockImage | undefined {\n    return blocks.find((block) => block.type === \"image\")\n}\n\n/**\n * How cards render in a type-filtered feed that offers the View toggle:\n * \"expanded\" shows each card in full, read in place; \"compact\" shows the same\n * teaser card the unfiltered feed does, linking out to the page. Local UI\n * state, deliberately not in the URL.\n */\nexport const LATEST_FEED_VIEWS = [\"expanded\", \"compact\"] as const\nexport type LatestFeedView = (typeof LATEST_FEED_VIEWS)[number]\nexport const DEFAULT_LATEST_FEED_VIEW: LatestFeedView = \"expanded\"\n\n/** Whether a type filter offers the Expanded/Compact control. */\nexport function hasViewToggle(latestType: LatestType | null): boolean {\n    return latestType === \"data-insight\"\n}\n\n/**\n * Topic filter usage, most popular first, measured from 2026-06-05 to\n * 2026-07-30. Usage was similar across areas (0.4–0.7% of sessions) under\n * the previous order, so the ranking is indicative. Keep it fixed during\n * the sticky filters experiment; unranked areas retain tag-graph order.\n */\nexport const LATEST_TOPIC_AREAS_BY_POPULARITY: readonly string[] = [\n    \"Energy and Environment\",\n    \"Poverty and Economic Development\",\n    \"Violence and War\",\n    \"Innovation and Technological Change\",\n    \"Food and Agriculture\",\n    \"Health\",\n    \"Living Conditions, Community and Wellbeing\",\n    \"Population and Demographic Change\",\n    \"Education and Knowledge\",\n    \"Human Rights and Democracy\",\n]\n\nexport function sortTopicAreasByPopularity(areas: string[]): string[] {\n    const rank = (area: string): number => {\n        const i = LATEST_TOPIC_AREAS_BY_POPULARITY.indexOf(area)\n        return i === -1 ? Number.MAX_SAFE_INTEGER : i\n    }\n    // Array.prototype.sort is stable, so unranked areas keep their order.\n    return [...areas].sort((a, b) => rank(a) - rank(b))\n}\n\n/** Grid positioning applied to the root of every hit card. */\nexport const LATEST_HIT_GRID_CLASSES =\n    \"span-cols-8 col-start-2 span-md-cols-12 col-md-start-2 span-sm-cols-14 col-sm-start-1\"\n\n/** The newsletter slot sits in the right-hand column beside the first\n * cards, and goes full-bleed once that column collapses. Shared by the live\n * UI, the no-results state and the baked skeleton so the layouts can't\n * drift apart. */\nexport const LATEST_NEWSLETTER_SIGNUP_CLASSES =\n    \"latest-page__newsletter-signup col-start-11 span-cols-3 col-lg-start-10 span-lg-cols-4 span-md-cols-14 col-md-start-1\"\n\n/** Grid positioning for the facets row and the divider beneath it — shared\n * between the live UI (LatestSearch) and the baked skeleton\n * (LatestPageSkeleton) so the two layouts can't drift apart. */\nexport const LATEST_FACETS_CONTAINER_CLASSES =\n    \"latest-search__facets-container span-cols-12 col-start-2 span-md-cols-12 col-md-start-2 span-sm-cols-14 col-sm-start-1\"\n\nexport const LATEST_FILTERS_DIVIDER_CLASSES =\n    \"latest-search__filters-divider span-cols-12 col-start-2 span-md-cols-12 col-md-start-2 span-sm-cols-14 col-sm-start-1\"\n\n/** Stable id for the announcement content heading, used by parent wrappers\n * (the feed's <article>) for aria-labelledby. */\nexport const announcementContentTitleId = (slug: string) =>\n    `announcement-content-${slug}-title`\n\n/**\n * Shape the hit record into the AttachmentsContext value expected by the\n * gdoc components that render inside each card (Image, ArticleBlocks, etc.).\n */\nexport function makeAttachments(hit: PageChronologicalRecord) {\n    return {\n        imageMetadata: \"imageMetadata\" in hit ? (hit.imageMetadata ?? {}) : {},\n        linkedAuthors: \"linkedAuthors\" in hit ? (hit.linkedAuthors ?? []) : [],\n        linkedCharts: \"linkedCharts\" in hit ? (hit.linkedCharts ?? {}) : {},\n        linkedDocuments:\n            \"linkedDocuments\" in hit ? (hit.linkedDocuments ?? {}) : {},\n        // Intentionally empty: card-level rendering doesn't reach into these,\n        // and indexing them per record would inflate the Algolia payload\n        // unnecessarily. If a future card type needs them, add them to\n        // PageChronologicalRecord and to the indexer in pagesChronological.ts.\n        linkedIndicators: {},\n        relatedCharts: [],\n        tags: [],\n    }\n}\n","import { RefObject, useContext, useRef, useState } from \"react\"\nimport cx from \"clsx\"\nimport {\n    EnrichedBlockHomepageIntro,\n    EnrichedBlockHomepageIntroPost,\n    LATEST_TYPE_LABELS,\n    OwidGdocMinimalAnnouncementInterface,\n} from \"@ourworldindata/types\"\nimport {\n    dayjs,\n    deriveAnnouncementLatestType,\n    formatAuthors,\n} from \"@ourworldindata/utils\"\nimport { useLinkedDocument } from \"../utils.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\nimport Image, { ImageParentContainer } from \"./Image.js\"\nimport { BlockErrorFallback } from \"./BlockErrorBoundary.js\"\nimport * as R from \"remeda\"\nimport { NewsletterSignup } from \"../../NewsletterSubscription.js\"\nimport { AttachmentsContext } from \"../AttachmentsContext.js\"\nimport { Button } from \"@ourworldindata/components\"\nimport { AnnouncementsIcon } from \"./AnnouncementsIcon.js\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faArrowRight, faHeart } from \"@fortawesome/free-solid-svg-icons\"\nimport { useResizeObserver } from \"usehooks-ts\"\nimport { OwidSocials } from \"../../OwidSocials.js\"\nimport { NewsletterSubscriptionContext } from \"../../newsletter.js\"\nimport { buildLatestPagePath } from \"../../latest/latestUtils.js\"\n\ntype FeaturedWorkTileProps = EnrichedBlockHomepageIntroPost & {\n    className?: string\n    id: string\n    thumbnailSize?: ImageParentContainer\n}\n\nfunction FeaturedWorkTile({\n    title,\n    kicker,\n    authors,\n    description,\n    url,\n    filename,\n    className = \"\",\n    thumbnailSize = \"thumbnail\",\n    isNew,\n    id,\n}: FeaturedWorkTileProps) {\n    const { linkedDocument, errorMessage } = useLinkedDocument(url)\n    const { isPreviewing } = useDocumentContext()\n    const linkedDocumentFeaturedImage = linkedDocument?.[\"featured-image\"]\n    const thumbnailFilename = filename ?? linkedDocumentFeaturedImage\n    const href = linkedDocument?.url ?? url\n\n    if (isPreviewing) {\n        if (errorMessage) {\n            return (\n                <BlockErrorFallback\n                    error={{\n                        name: \"Error with featured work\",\n                        message: `${errorMessage} This block won't render when the page is published`,\n                    }}\n                />\n            )\n        }\n    }\n\n    title ||= linkedDocument?.title\n    authors ||= linkedDocument?.authors\n    description ||= linkedDocument?.excerpt\n\n    return (\n        <a\n            href={href}\n            aria-labelledby={id}\n            className={cx(\"homepage-intro__featured-tile\", className, {\n                \"homepage-intro__featured-tile--missing-image\":\n                    !thumbnailFilename,\n            })}\n        >\n            {thumbnailFilename && (\n                <Image\n                    shouldLightbox={false}\n                    filename={thumbnailFilename}\n                    containerType={thumbnailSize}\n                />\n            )}\n            {kicker && (\n                <span className=\"h6-black-caps homepage-intro__featured-work-kicker\">\n                    {isNew && (\n                        <>\n                            <span className=\"homepage-intro__new-tag\">\n                                New\n                            </span>{\" \"}\n                        </>\n                    )}\n                    {kicker}\n                </span>\n            )}\n            {title && (\n                <h3\n                    id={id}\n                    className=\"homepage-intro__featured-work-title h3-bold\"\n                >\n                    {title}\n                </h3>\n            )}\n            {description && (\n                <p className=\"homepage-intro__featured-work-description body-3-medium\">\n                    {description}\n                </p>\n            )}\n            {authors && (\n                <p className=\"homepage-intro__featured-work-authors body-3-medium-italic\">\n                    {formatAuthors(authors)}\n                </p>\n            )}\n        </a>\n    )\n}\n\nfunction useIsOverflowing<T extends HTMLElement = HTMLElement>(\n    ref: RefObject<T>\n): boolean {\n    const [isOverflowing, setIsOverflowing] = useState(false)\n\n    useResizeObserver({\n        ref,\n        onResize: () => {\n            const element = ref.current\n            if (!element) return\n\n            const overflowing =\n                element.scrollWidth > element.clientWidth ||\n                element.scrollHeight > element.clientHeight\n\n            setIsOverflowing(overflowing)\n        },\n    })\n\n    return isOverflowing\n}\n\nfunction HomepageAnnouncement(props: {\n    announcement: OwidGdocMinimalAnnouncementInterface\n}) {\n    const { announcement } = props\n    const announcementRef = useRef<HTMLLIElement>(null)\n    const isOverflowing = useIsOverflowing(\n        announcementRef as RefObject<HTMLElement>\n    )\n    const href = `/latest#${announcement.slug}`\n\n    const publishedAtDayJs = dayjs(announcement.publishedAt)\n    const publishedAtFormatted = publishedAtDayJs.isToday()\n        ? \"Today\"\n        : publishedAtDayJs.isYesterday()\n          ? \"Yesterday\"\n          : publishedAtDayJs.isSame(dayjs(), \"week\")\n            ? \"This Week\"\n            : publishedAtDayJs.fromNow()\n\n    const latestType = deriveAnnouncementLatestType(announcement.kicker)\n    const kickerLabel = `${LATEST_TYPE_LABELS[latestType]} · `\n\n    return (\n        <li\n            className={cx(\"homepage-intro__announcement\", {\n                \"homepage-intro__announcement--is-overflowing\": isOverflowing,\n            })}\n            ref={announcementRef}\n        >\n            <a\n                className=\"homepage-intro__announcement-link\"\n                aria-labelledby={`announcement-${announcement.id}`}\n                // skip overflowing links to prevent inner scrolling that breaks the layout\n                tabIndex={isOverflowing ? -1 : undefined}\n                href={href}\n            >\n                <span className=\"homepage-intro__announcement-meta h6-black-caps\">\n                    {kickerLabel}\n                    {publishedAtFormatted}\n                </span>\n                <h3\n                    id={`announcement-${announcement.id}`}\n                    className=\"homepage-intro__announcement-title body-2-bold-tight\"\n                >\n                    {announcement.title}\n                </h3>\n                <p className=\"homepage-intro__excerpt body-3-medium\">\n                    {announcement.excerpt}\n                </p>\n                <span className=\"homepage-intro__announcement-read-more body-3-medium\">\n                    Read more <FontAwesomeIcon icon={faArrowRight} />\n                </span>\n            </a>\n        </li>\n    )\n}\n\nfunction HomepageAnnouncements() {\n    const { homepageMetadata = {} } = useContext(AttachmentsContext)\n    const announcements = R.prop(homepageMetadata, \"announcements\")\n    if (!announcements || announcements.length === 0) return null\n    return (\n        <div className=\"homepage-intro__announcements span-cols-1 span-md-cols-2\">\n            <div className=\"homepage-intro__announcements-header\">\n                <AnnouncementsIcon />\n                <h4 className=\"h3-bold\">Updates and announcements</h4>\n            </div>\n            <ul className=\"homepage-intro__announcements-list\">\n                {announcements.map((announcement) => (\n                    <HomepageAnnouncement\n                        announcement={announcement}\n                        key={announcement.id}\n                    />\n                ))}\n            </ul>\n            <Button\n                className=\"homepage-intro__latest-button\"\n                href={buildLatestPagePath()}\n                text=\"See all updates\"\n                theme=\"outline-vermillion\"\n            />\n            <Button\n                className=\"homepage-intro__subscribe-button\"\n                href=\"/subscribe\"\n                text=\"Subscribe to our newsletters\"\n                theme=\"solid-vermillion\"\n                dataTrackNote=\"homepage_intro_subscribe\"\n            />\n        </div>\n    )\n}\n\nfunction DonationCta() {\n    return (\n        <div className=\"homepage-intro__donation-cta\">\n            <FontAwesomeIcon icon={faHeart} />\n            <div>\n                <p className=\"homepage-intro__donation-message note-12-medium\">\n                    We are a non-profit — all our work is free to use and openly\n                    licensed.\n                </p>\n                <a\n                    href=\"/donate\"\n                    className=\"homepage-intro__donation-link body-3-bold\"\n                >\n                    Donate to support us\n                </a>\n            </div>\n        </div>\n    )\n}\n\nexport type HomepageIntroProps = {\n    className?: string\n} & EnrichedBlockHomepageIntro\n\nexport function HomepageIntro({ className, featuredWork }: HomepageIntroProps) {\n    const tiles = featuredWork.slice(0, 4)\n    if (tiles.length < 4) {\n        return null\n    }\n    const [w1, w2, w3, w4] = tiles as [\n        EnrichedBlockHomepageIntroPost,\n        EnrichedBlockHomepageIntroPost,\n        EnrichedBlockHomepageIntroPost,\n        EnrichedBlockHomepageIntroPost,\n    ]\n\n    return (\n        <section className={cx(\"homepage-intro\", className)}>\n            <div className=\"homepage-intro__featured-work grid grid-cols-2 span-cols-6 col-start-2 span-md-cols-14\">\n                <div className=\"homepage-intro__featured-work-column homepage-intro__featured-work-column__desktop\">\n                    <FeaturedWorkTile id={\"fw1\"} {...w1} />\n                    <FeaturedWorkTile id={\"fw3\"} {...w3} />\n                </div>\n                <div className=\"homepage-intro__featured-work-column homepage-intro__featured-work-column__desktop\">\n                    <FeaturedWorkTile id={\"fw2\"} {...w2} />\n                    <FeaturedWorkTile id={\"fw4\"} {...w4} />\n                </div>\n                <div className=\"homepage-intro__featured-work-column homepage-intro__featured-work-column__mobile\">\n                    {[w1, w2, w3, w4].map((tile, index) => (\n                        <FeaturedWorkTile\n                            key={index}\n                            id={`fw${index + 1}`}\n                            {...tile}\n                        />\n                    ))}\n                </div>\n            </div>\n            <div className=\"grid grid-cols-2 span-cols-6 span-md-cols-14 col-md-start-1\">\n                <HomepageAnnouncements />\n                <div className=\"span-cols-1 span-md-cols-2\">\n                    <NewsletterSignup\n                        className=\"homepage-intro__newsletter-signup\"\n                        context={NewsletterSubscriptionContext.Homepage}\n                        showSubheading\n                    >\n                        <OwidSocials\n                            context={NewsletterSubscriptionContext.Homepage}\n                        />\n                    </NewsletterSignup>\n                    <DonationCta />\n                </div>\n            </div>\n        </section>\n    )\n}\n","import { createContext, useContext } from \"react\"\nimport {\n    SearchState,\n    SynonymMap,\n    TemplateConfig,\n    TagGraphRoot,\n    SearchActions,\n} from \"@ourworldindata/types\"\nimport { LiteClient } from \"algoliasearch/lite\"\nimport { SiteAnalytics } from \"../SiteAnalytics.js\"\n\ninterface SearchContextType {\n    state: SearchState\n    actions: SearchActions\n    liteSearchClient: LiteClient\n    templateConfig: TemplateConfig\n    topicTagGraph: TagGraphRoot\n    synonymMap: SynonymMap\n    analytics: SiteAnalytics\n}\n\nexport const SearchContext = createContext<SearchContextType | null>(null)\n\nexport const useSearchContext = () => {\n    const context = useContext(SearchContext)\n    if (!context) {\n        throw new Error(\n            \"useSearchContext must be used within a SearchContext.Provider\"\n        )\n    }\n    return context\n}\n","import { FilterType, SearchState } from \"@ourworldindata/types\"\nimport {\n    getFilterNamesOfType,\n    getSelectedTopic,\n    getPaginationOffsetAndLength,\n    getNbPaginatedItemsRequested,\n    CHARTS_INDEX,\n    PAGES_INDEX,\n    PAGES_CHRONOLOGICAL_INDEX,\n} from \"./searchUtils.js\"\nimport { DEFAULT_SEARCH_STATE } from \"./searchState.js\"\nimport { useSearchContext } from \"./SearchContext.js\"\nimport { fetchJson, flattenNonTopicNodes } from \"@ourworldindata/utils\"\nimport {\n    useInfiniteQuery,\n    useQuery,\n    useQueryClient,\n} from \"@tanstack/react-query\"\nimport { LiteClient } from \"algoliasearch/lite\"\nimport type { SearchResponse } from \"algoliasearch\"\nimport {\n    useCallback,\n    useEffect,\n    useMemo,\n    useRef,\n    useSyncExternalStore,\n} from \"react\"\nimport type { TagGraphNode, TagGraphRoot } from \"@ourworldindata/types\"\nimport { SiteAnalytics } from \"../SiteAnalytics.js\"\nimport * as R from \"remeda\"\n\nexport function useSelectedTopic() {\n    const { state } = useSearchContext()\n    return getSelectedTopic(state.filters)\n}\n\nexport function useSelectedRegionNames() {\n    const { state } = useSearchContext()\n    return Array.from(getFilterNamesOfType(state.filters, FilterType.COUNTRY))\n}\n\n/**\n * Extracts and memoizes area names and all searchable tags from the topic tag graph.\n * Searchable tags include both topics (tags with a topic page) and tags with searchableInAlgolia set.\n */\nexport function useTagGraphTopics(topicTagGraph?: TagGraphRoot) {\n    const allAreas = useMemo(\n        () => topicTagGraph?.children.map((child) => child.name) || [],\n        [topicTagGraph]\n    )\n\n    const allTopics = useMemo(() => {\n        if (!topicTagGraph) return []\n\n        function getAllSearchableTopics(node: TagGraphNode) {\n            return node.children.reduce((acc, child) => {\n                if (child.isSearchable) {\n                    acc.add(child.name)\n                }\n                if (child.children.length) {\n                    const topics = getAllSearchableTopics(child)\n                    topics.forEach((topic) => acc.add(topic))\n                }\n                return acc\n            }, new Set<string>())\n        }\n        return [...getAllSearchableTopics(topicTagGraph)]\n    }, [topicTagGraph])\n\n    return { allAreas, allTopics }\n}\n\n/**\n * Handles analytics tracking for search state changes.\n */\nexport function useSearchAnalytics(\n    state: SearchState,\n    analytics: SiteAnalytics\n) {\n    const lastLoggedStateRef = useRef<SearchState | null>(null)\n\n    useEffect(() => {\n        // Skip analytics for the initial default/empty page load, but keep\n        // tracking later transitions back to the default state. Updating the\n        // ref here lets us track repeated filter states separated by a reset,\n        // e.g. A -> default -> A.\n        if (\n            lastLoggedStateRef.current === null &&\n            R.isDeepEqual(state, DEFAULT_SEARCH_STATE)\n        ) {\n            lastLoggedStateRef.current = state\n            return\n        }\n        // Skip if we already logged this state\n        if (R.isDeepEqual(state, lastLoggedStateRef.current)) return\n\n        lastLoggedStateRef.current = state\n        analytics.logSearch(state)\n    }, [state, analytics])\n}\n\ntype QueryKeyState = Pick<\n    SearchState,\n    \"query\" | \"filters\" | \"requireAllCountries\"\n>\n\n/**\n * Compute Algolia `offset` and `length` so the UI can show a smaller\n * first page (e.g. 2) and larger subsequent pages (e.g. 6) without\n * skipping results.\n *\n * Rationale:\n * - Using different `hitsPerPage` values together with Algolia's `page`\n *   parameter creates gaps: Algolia computes start = page * hitsPerPage,\n *   so switching page sizes means some indices are never requested and thus\n *   skipped.\n * - To avoid skipped results we request explicit `offset` and `length`:\n *   \"start at result N and give me M results\".\n *\n * Example (articles: first=2 later=6):\n * - UI page 0 -> offset=0, length=2 -> results 0..1\n * - UI page 1 -> offset=2, length=6 -> results 2..7\n * - UI page 2 -> offset=8, length=6 -> results 8..13\n */\n\nexport function useInfiniteSearchOffset<THit>({\n    queryKey,\n    queryFn,\n    firstPageSize,\n    laterPageSize,\n    enabled = true,\n}: {\n    queryKey: (state: SearchState) => readonly (string | QueryKeyState)[]\n    queryFn: (\n        liteSearchClient: LiteClient,\n        state: SearchState,\n        offset: number,\n        length: number\n    ) => Promise<SearchResponse<THit>>\n    firstPageSize: number\n    laterPageSize: number\n    enabled?: boolean\n}) {\n    const { state, liteSearchClient } = useSearchContext()\n    const query = useInfiniteQuery({\n        queryKey: queryKey(state),\n        queryFn: ({ pageParam }) => {\n            if (typeof pageParam !== \"number\")\n                throw new Error(\"Invalid pageParam\")\n\n            const { offset, length } = getPaginationOffsetAndLength(\n                pageParam,\n                firstPageSize,\n                laterPageSize\n            )\n\n            return queryFn(liteSearchClient, state, offset, length)\n        },\n        getNextPageParam: (lastPage, allPages) => {\n            const currentPageIndex = allPages.length - 1\n\n            const requestedSoFar = getNbPaginatedItemsRequested(\n                currentPageIndex,\n                firstPageSize,\n                laterPageSize,\n                lastPage.hits.length\n            )\n\n            return requestedSoFar < (lastPage.nbHits ?? 0)\n                ? currentPageIndex + 1\n                : undefined\n        },\n        enabled,\n        initialPageParam: 0,\n    })\n\n    const hits = query.data?.pages.flatMap((page) => page.hits) || []\n    const totalResults = query.data?.pages[0]?.nbHits || 0\n    // Set by the closest-matches fallback in queries.ts: the section shows\n    // relaxed (\"did you mean\"-style) results because the exact search was empty.\n    const isClosestMatches = Boolean(\n        (query.data?.pages[0] as { closestMatches?: boolean } | undefined)\n            ?.closestMatches\n    )\n\n    return {\n        ...query,\n        hits,\n        totalResults,\n        isClosestMatches,\n    }\n}\n\nexport function useInfiniteSearch<THit>({\n    queryKey,\n    queryFn,\n    enabled = true,\n}: {\n    queryKey: (state: SearchState) => readonly (string | QueryKeyState)[]\n    queryFn: (\n        liteSearchClient: LiteClient,\n        state: SearchState,\n        page: number\n    ) => Promise<SearchResponse<THit>>\n    enabled?: boolean\n}) {\n    const { state, liteSearchClient } = useSearchContext()\n\n    const query = useInfiniteQuery({\n        // All paginated subqueries share the same query key\n        queryKey: queryKey(state),\n        queryFn: ({ pageParam }) => {\n            if (typeof pageParam !== \"number\")\n                throw new Error(\"Invalid pageParam\")\n\n            return queryFn(liteSearchClient, state, pageParam)\n        },\n        getNextPageParam: (lastPage) => {\n            const { page = 0, nbPages = 1 } = lastPage\n            return page < nbPages - 1 ? page + 1 : undefined\n        },\n        initialPageParam: 0,\n        enabled,\n    })\n\n    const hits = query.data?.pages.flatMap((page) => page.hits) || []\n    const totalResults = query.data?.pages[0]?.nbHits || 0\n    // Set by the closest-matches fallback in queries.ts: the section shows\n    // relaxed (\"did you mean\"-style) results because the exact search was empty.\n    const isClosestMatches = Boolean(\n        (query.data?.pages[0] as { closestMatches?: boolean } | undefined)\n            ?.closestMatches\n    )\n\n    return {\n        ...query,\n        hits,\n        totalResults,\n        isClosestMatches,\n    }\n}\n\n// Every Algolia search this app issues keys its React Query entry off one of\n// the index names (see `searchQueryKeys` in queries.ts). Other site queries\n// (chart data, the topic tag graph) don't, and their failures must not be\n// reported as a search outage.\nfunction isSearchIndexQueryKey(queryKey: readonly unknown[]): boolean {\n    const [indexName] = queryKey\n    return (\n        indexName === CHARTS_INDEX ||\n        indexName === PAGES_INDEX ||\n        indexName === PAGES_CHRONOLOGICAL_INDEX\n    )\n}\n\nconst getServerSnapshotForSearchError = () => false\n\n/**\n * Whether an Algolia search backing the results currently on screen has\n * failed. By the time a query reaches the error state React Query has already\n * exhausted its retries, so this means the search request genuinely didn't go\n * through — which the UI needs to tell apart from a search that legitimately\n * found nothing.\n *\n * Only `active` queries are considered, so errors still cached from an earlier\n * query or filter selection don't leak into the current one.\n */\nexport function useHasSearchError(): boolean {\n    const queryCache = useQueryClient().getQueryCache()\n\n    const subscribe = useCallback(\n        (onStoreChange: () => void) => queryCache.subscribe(onStoreChange),\n        [queryCache]\n    )\n\n    const getSnapshot = useCallback(\n        () =>\n            queryCache\n                .findAll({\n                    type: \"active\",\n                    predicate: (query) => isSearchIndexQueryKey(query.queryKey),\n                })\n                .some((query) => query.state.status === \"error\"),\n        [queryCache]\n    )\n\n    return useSyncExternalStore(\n        subscribe,\n        getSnapshot,\n        getServerSnapshotForSearchError\n    )\n}\n\nexport function useTopicTagGraph({ isPreviewing }: { isPreviewing: boolean }) {\n    return useQuery({\n        queryKey: [\"topic-tag-graph\", isPreviewing],\n        queryFn: async () => {\n            const url = isPreviewing\n                ? \"/admin/api/topicTagGraph.json\"\n                : \"/topicTagGraph.json\"\n            const tagGraph = await fetchJson<TagGraphRoot>(url)\n            return flattenNonTopicNodes(tagGraph)\n        },\n        staleTime: Infinity,\n    })\n}\n","export function createRef(initialValue) {\n  return {\n    current: initialValue\n  };\n}","export function debounce(fn, time) {\n  var timerId = undefined;\n  return function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    if (timerId) {\n      clearTimeout(timerId);\n    }\n    timerId = setTimeout(function () {\n      return fn.apply(void 0, args);\n    }, time);\n  };\n}","export function flatten(values) {\n  return values.reduce(function (a, b) {\n    return a.concat(b);\n  }, []);\n}","var autocompleteId = 0;\nexport function generateAutocompleteId() {\n  return \"autocomplete-\".concat(autocompleteId++);\n}","export function getAttributeValueByPath(record, path) {\n  return path.reduce(function (current, key) {\n    return current && current[key];\n  }, record);\n}","export function getItemsCount(state) {\n  if (state.collections.length === 0) {\n    return 0;\n  }\n  return state.collections.reduce(function (sum, collection) {\n    return sum + collection.items.length;\n  }, 0);\n}","function isPrimitive(obj) {\n  return obj !== Object(obj);\n}\nexport function isEqual(first, second) {\n  if (first === second) {\n    return true;\n  }\n  if (isPrimitive(first) || isPrimitive(second) || typeof first === 'function' || typeof second === 'function') {\n    return first === second;\n  }\n  if (Object.keys(first).length !== Object.keys(second).length) {\n    return false;\n  }\n  for (var _i = 0, _Object$keys = Object.keys(first); _i < _Object$keys.length; _i++) {\n    var key = _Object$keys[_i];\n    if (!(key in second)) {\n      return false;\n    }\n    if (!isEqual(first[key], second[key])) {\n      return false;\n    }\n  }\n  return true;\n}","export var noop = function noop() {};","/**\n * Safely runs code meant for browser environments only.\n */\nexport function safelyRunOnBrowser(callback) {\n  if (typeof window !== 'undefined') {\n    return callback({\n      window: window\n    });\n  }\n  return undefined;\n}","export var version = '1.19.9';","import { version } from './version';\nexport var userAgents = [{\n  segment: 'autocomplete-core',\n  version: version\n}];","export function createClickedEvent(_ref) {\n  var item = _ref.item,\n    _ref$items = _ref.items,\n    items = _ref$items === void 0 ? [] : _ref$items;\n  return {\n    index: item.__autocomplete_indexName,\n    items: [item],\n    positions: [1 + items.findIndex(function (x) {\n      return x.objectID === item.objectID;\n    })],\n    queryID: item.__autocomplete_queryID,\n    algoliaSource: ['autocomplete']\n  };\n}","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n/**\n * Determines if a given insights `client` supports the optional call to `init`\n * and the ability to set credentials via extra parameters when sending events.\n */\nexport function isModernInsightsClient(client) {\n  var _split$map = (client.version || '').split('.').map(Number),\n    _split$map2 = _slicedToArray(_split$map, 2),\n    major = _split$map2[0],\n    minor = _split$map2[1];\n\n  /* eslint-disable @typescript-eslint/camelcase */\n  var v3 = major >= 3;\n  var v2_4 = major === 2 && minor >= 4;\n  var v1_10 = major === 1 && minor >= 10;\n  return v3 || v2_4 || v1_10;\n  /* eslint-enable @typescript-eslint/camelcase */\n}","var _excluded = [\"items\"],\n  _excluded2 = [\"items\"];\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { isModernInsightsClient } from './isModernInsightsClient';\nfunction chunk(item) {\n  var chunkSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 20;\n  var chunks = [];\n  for (var i = 0; i < item.objectIDs.length; i += chunkSize) {\n    chunks.push(_objectSpread(_objectSpread({}, item), {}, {\n      objectIDs: item.objectIDs.slice(i, i + chunkSize)\n    }));\n  }\n  return chunks;\n}\nfunction mapToInsightsParamsApi(params) {\n  return params.map(function (_ref) {\n    var items = _ref.items,\n      param = _objectWithoutProperties(_ref, _excluded);\n    return _objectSpread(_objectSpread({}, param), {}, {\n      objectIDs: (items === null || items === void 0 ? void 0 : items.map(function (_ref2) {\n        var objectID = _ref2.objectID;\n        return objectID;\n      })) || param.objectIDs\n    });\n  });\n}\nexport function createSearchInsightsApi(searchInsights) {\n  var canSendHeaders = isModernInsightsClient(searchInsights);\n  function sendToInsights(method, payloads, items) {\n    if (canSendHeaders && typeof items !== 'undefined') {\n      var _items$0$__autocomple = items[0].__autocomplete_algoliaCredentials,\n        appId = _items$0$__autocomple.appId,\n        apiKey = _items$0$__autocomple.apiKey;\n      var headers = {\n        'X-Algolia-Application-Id': appId,\n        'X-Algolia-API-Key': apiKey\n      };\n      searchInsights.apply(void 0, [method].concat(_toConsumableArray(payloads), [{\n        headers: headers\n      }]));\n    } else {\n      searchInsights.apply(void 0, [method].concat(_toConsumableArray(payloads)));\n    }\n  }\n  return {\n    /**\n     * Initializes Insights with Algolia credentials.\n     */\n    init: function init(appId, apiKey) {\n      searchInsights('init', {\n        appId: appId,\n        apiKey: apiKey\n      });\n    },\n    /**\n     * Sets the authenticated user token to attach to events.\n     * Unsets the authenticated token by passing `undefined`.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/set-authenticated-user-token/\n     */\n    setAuthenticatedUserToken: function setAuthenticatedUserToken(authenticatedUserToken) {\n      searchInsights('setAuthenticatedUserToken', authenticatedUserToken);\n    },\n    /**\n     * Sets the user token to attach to events.\n     */\n    setUserToken: function setUserToken(userToken) {\n      searchInsights('setUserToken', userToken);\n    },\n    /**\n     * Sends click events to capture a query and its clicked items and positions.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/clicked-object-ids-after-search/\n     */\n    clickedObjectIDsAfterSearch: function clickedObjectIDsAfterSearch() {\n      for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {\n        params[_key] = arguments[_key];\n      }\n      if (params.length > 0) {\n        sendToInsights('clickedObjectIDsAfterSearch', mapToInsightsParamsApi(params), params[0].items);\n      }\n    },\n    /**\n     * Sends click events to capture clicked items.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/clicked-object-ids/\n     */\n    clickedObjectIDs: function clickedObjectIDs() {\n      for (var _len2 = arguments.length, params = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        params[_key2] = arguments[_key2];\n      }\n      if (params.length > 0) {\n        sendToInsights('clickedObjectIDs', mapToInsightsParamsApi(params), params[0].items);\n      }\n    },\n    /**\n     * Sends click events to capture the filters a user clicks on.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/clicked-filters/\n     */\n    clickedFilters: function clickedFilters() {\n      for (var _len3 = arguments.length, params = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        params[_key3] = arguments[_key3];\n      }\n      if (params.length > 0) {\n        searchInsights.apply(void 0, ['clickedFilters'].concat(params));\n      }\n    },\n    /**\n     * Sends conversion events to capture a query and its clicked items.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/converted-object-ids-after-search/\n     */\n    convertedObjectIDsAfterSearch: function convertedObjectIDsAfterSearch() {\n      for (var _len4 = arguments.length, params = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n        params[_key4] = arguments[_key4];\n      }\n      if (params.length > 0) {\n        sendToInsights('convertedObjectIDsAfterSearch', mapToInsightsParamsApi(params), params[0].items);\n      }\n    },\n    /**\n     * Sends conversion events to capture clicked items.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/converted-object-ids/\n     */\n    convertedObjectIDs: function convertedObjectIDs() {\n      for (var _len5 = arguments.length, params = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n        params[_key5] = arguments[_key5];\n      }\n      if (params.length > 0) {\n        sendToInsights('convertedObjectIDs', mapToInsightsParamsApi(params), params[0].items);\n      }\n    },\n    /**\n     * Sends conversion events to capture the filters a user uses when converting.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/converted-filters/\n     */\n    convertedFilters: function convertedFilters() {\n      for (var _len6 = arguments.length, params = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n        params[_key6] = arguments[_key6];\n      }\n      if (params.length > 0) {\n        searchInsights.apply(void 0, ['convertedFilters'].concat(params));\n      }\n    },\n    /**\n     * Sends view events to capture clicked items.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/viewed-object-ids/\n     */\n    viewedObjectIDs: function viewedObjectIDs() {\n      for (var _len7 = arguments.length, params = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n        params[_key7] = arguments[_key7];\n      }\n      if (params.length > 0) {\n        params.reduce(function (acc, _ref3) {\n          var items = _ref3.items,\n            param = _objectWithoutProperties(_ref3, _excluded2);\n          return [].concat(_toConsumableArray(acc), _toConsumableArray(chunk(_objectSpread(_objectSpread({}, param), {}, {\n            objectIDs: (items === null || items === void 0 ? void 0 : items.map(function (_ref4) {\n              var objectID = _ref4.objectID;\n              return objectID;\n            })) || param.objectIDs\n          })).map(function (payload) {\n            return {\n              items: items,\n              payload: payload\n            };\n          })));\n        }, []).forEach(function (_ref5) {\n          var items = _ref5.items,\n            payload = _ref5.payload;\n          return sendToInsights('viewedObjectIDs', [payload], items);\n        });\n      }\n    },\n    /**\n     * Sends view events to capture the filters a user uses when viewing.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/viewed-filters/\n     */\n    viewedFilters: function viewedFilters() {\n      for (var _len8 = arguments.length, params = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n        params[_key8] = arguments[_key8];\n      }\n      if (params.length > 0) {\n        searchInsights.apply(void 0, ['viewedFilters'].concat(params));\n      }\n    }\n  };\n}","export function createViewedEvents(_ref) {\n  var items = _ref.items;\n  var itemsByIndexName = items.reduce(function (acc, current) {\n    var _acc$current$__autoco;\n    acc[current.__autocomplete_indexName] = ((_acc$current$__autoco = acc[current.__autocomplete_indexName]) !== null && _acc$current$__autoco !== void 0 ? _acc$current$__autoco : []).concat(current);\n    return acc;\n  }, {});\n  return Object.keys(itemsByIndexName).map(function (indexName) {\n    var items = itemsByIndexName[indexName];\n    return {\n      index: indexName,\n      items: items,\n      algoliaSource: ['autocomplete']\n    };\n  });\n}","export function isAlgoliaInsightsHit(hit) {\n  return hit.objectID && hit.__autocomplete_indexName && hit.__autocomplete_queryID;\n}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { createRef, debounce, isEqual, noop, safelyRunOnBrowser } from '@algolia/autocomplete-shared';\nimport { createClickedEvent } from './createClickedEvent';\nimport { createSearchInsightsApi } from './createSearchInsightsApi';\nimport { createViewedEvents } from './createViewedEvents';\nimport { isAlgoliaInsightsHit } from './isAlgoliaInsightsHit';\nvar VIEW_EVENT_DELAY = 400;\nvar ALGOLIA_INSIGHTS_VERSION = '2.15.0';\nvar ALGOLIA_INSIGHTS_SRC = \"https://cdn.jsdelivr.net/npm/search-insights@\".concat(ALGOLIA_INSIGHTS_VERSION, \"/dist/search-insights.min.js\");\nvar sendViewedObjectIDs = debounce(function (_ref) {\n  var onItemsChange = _ref.onItemsChange,\n    items = _ref.items,\n    insights = _ref.insights,\n    state = _ref.state;\n  onItemsChange({\n    insights: insights,\n    insightsEvents: createViewedEvents({\n      items: items\n    }).map(function (event) {\n      return _objectSpread({\n        eventName: 'Items Viewed'\n      }, event);\n    }),\n    state: state\n  });\n}, VIEW_EVENT_DELAY);\nexport function createAlgoliaInsightsPlugin(options) {\n  var _getOptions = getOptions(options),\n    providedInsightsClient = _getOptions.insightsClient,\n    insightsInitParams = _getOptions.insightsInitParams,\n    onItemsChange = _getOptions.onItemsChange,\n    onSelectEvent = _getOptions.onSelect,\n    onActiveEvent = _getOptions.onActive,\n    __autocomplete_clickAnalytics = _getOptions.__autocomplete_clickAnalytics;\n  var insightsClient = providedInsightsClient;\n  if (!providedInsightsClient) {\n    safelyRunOnBrowser(function (_ref2) {\n      var window = _ref2.window;\n      var pointer = window.AlgoliaAnalyticsObject || 'aa';\n      if (typeof pointer === 'string') {\n        insightsClient = window[pointer];\n      }\n      if (!insightsClient) {\n        window.AlgoliaAnalyticsObject = pointer;\n        if (!window[pointer]) {\n          window[pointer] = function () {\n            if (!window[pointer].queue) {\n              window[pointer].queue = [];\n            }\n            for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n              args[_key] = arguments[_key];\n            }\n            window[pointer].queue.push(args);\n          };\n        }\n        window[pointer].version = ALGOLIA_INSIGHTS_VERSION;\n        insightsClient = window[pointer];\n        loadInsights(window);\n      }\n    });\n  }\n\n  // We return an empty plugin if `insightsClient` is still undefined at\n  // this stage, which can happen in server environments.\n  if (!insightsClient) {\n    return {};\n  }\n  if (insightsInitParams) {\n    insightsClient('init', _objectSpread({\n      partial: true\n    }, insightsInitParams));\n  }\n  var insights = createSearchInsightsApi(insightsClient);\n  var previousItems = createRef([]);\n  var debouncedOnStateChange = debounce(function (_ref3) {\n    var state = _ref3.state;\n    if (!state.isOpen) {\n      return;\n    }\n    var items = state.collections.reduce(function (acc, current) {\n      return [].concat(_toConsumableArray(acc), _toConsumableArray(current.items));\n    }, []).filter(isAlgoliaInsightsHit);\n    if (!isEqual(previousItems.current.map(function (x) {\n      return x.objectID;\n    }), items.map(function (x) {\n      return x.objectID;\n    }))) {\n      previousItems.current = items;\n      if (items.length > 0) {\n        sendViewedObjectIDs({\n          onItemsChange: onItemsChange,\n          items: items,\n          insights: insights,\n          state: state\n        });\n      }\n    }\n  }, 0);\n  return {\n    name: 'aa.algoliaInsightsPlugin',\n    subscribe: function subscribe(_ref4) {\n      var setContext = _ref4.setContext,\n        onSelect = _ref4.onSelect,\n        onActive = _ref4.onActive;\n      function setInsightsContext(userToken) {\n        setContext({\n          algoliaInsightsPlugin: {\n            __algoliaSearchParameters: _objectSpread(_objectSpread({}, __autocomplete_clickAnalytics ? {\n              clickAnalytics: true\n            } : {}), userToken ? {\n              userToken: normalizeUserToken(userToken)\n            } : {}),\n            insights: insights\n          }\n        });\n      }\n      insightsClient('addAlgoliaAgent', 'insights-plugin');\n      setInsightsContext();\n\n      // Handles user token changes\n      insightsClient('onUserTokenChange', function (userToken) {\n        setInsightsContext(userToken);\n      });\n      insightsClient('getUserToken', null, function (_error, userToken) {\n        setInsightsContext(userToken);\n      });\n      onSelect(function (_ref5) {\n        var item = _ref5.item,\n          state = _ref5.state,\n          event = _ref5.event,\n          source = _ref5.source;\n        if (!isAlgoliaInsightsHit(item)) {\n          return;\n        }\n        onSelectEvent({\n          state: state,\n          event: event,\n          insights: insights,\n          item: item,\n          insightsEvents: [_objectSpread({\n            eventName: 'Item Selected'\n          }, createClickedEvent({\n            item: item,\n            items: source.getItems().filter(isAlgoliaInsightsHit)\n          }))]\n        });\n      });\n      onActive(function (_ref6) {\n        var item = _ref6.item,\n          source = _ref6.source,\n          state = _ref6.state,\n          event = _ref6.event;\n        if (!isAlgoliaInsightsHit(item)) {\n          return;\n        }\n        onActiveEvent({\n          state: state,\n          event: event,\n          insights: insights,\n          item: item,\n          insightsEvents: [_objectSpread({\n            eventName: 'Item Active'\n          }, createClickedEvent({\n            item: item,\n            items: source.getItems().filter(isAlgoliaInsightsHit)\n          }))]\n        });\n      });\n    },\n    onStateChange: function onStateChange(_ref7) {\n      var state = _ref7.state;\n      debouncedOnStateChange({\n        state: state\n      });\n    },\n    __autocomplete_pluginOptions: options\n  };\n}\nfunction getAlgoliaSources() {\n  var _context$algoliaInsig;\n  var algoliaSourceBase = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var context = arguments.length > 1 ? arguments[1] : undefined;\n  return [].concat(_toConsumableArray(algoliaSourceBase), ['autocomplete-internal'], _toConsumableArray((_context$algoliaInsig = context.algoliaInsightsPlugin) !== null && _context$algoliaInsig !== void 0 && _context$algoliaInsig.__automaticInsights ? ['autocomplete-automatic'] : []));\n}\nfunction getOptions(options) {\n  return _objectSpread({\n    onItemsChange: function onItemsChange(_ref8) {\n      var insights = _ref8.insights,\n        insightsEvents = _ref8.insightsEvents,\n        state = _ref8.state;\n      insights.viewedObjectIDs.apply(insights, _toConsumableArray(insightsEvents.map(function (event) {\n        return _objectSpread(_objectSpread({}, event), {}, {\n          algoliaSource: getAlgoliaSources(event.algoliaSource, state.context)\n        });\n      })));\n    },\n    onSelect: function onSelect(_ref9) {\n      var insights = _ref9.insights,\n        insightsEvents = _ref9.insightsEvents,\n        state = _ref9.state;\n      insights.clickedObjectIDsAfterSearch.apply(insights, _toConsumableArray(insightsEvents.map(function (event) {\n        return _objectSpread(_objectSpread({}, event), {}, {\n          algoliaSource: getAlgoliaSources(event.algoliaSource, state.context)\n        });\n      })));\n    },\n    onActive: noop,\n    __autocomplete_clickAnalytics: true\n  }, options);\n}\nfunction loadInsights(environment) {\n  var errorMessage = \"[Autocomplete]: Could not load search-insights.js. Please load it manually following https://alg.li/insights-autocomplete\";\n  try {\n    var script = environment.document.createElement('script');\n    script.async = true;\n    script.src = ALGOLIA_INSIGHTS_SRC;\n    script.onerror = function () {\n      // eslint-disable-next-line no-console\n      console.error(errorMessage);\n    };\n    document.body.appendChild(script);\n  } catch (cause) {\n    // eslint-disable-next-line no-console\n    console.error(errorMessage);\n  }\n}\n\n/**\n * While `search-insights` supports both string and number user tokens,\n * the Search API only accepts strings. This function normalizes the user token.\n */\nfunction normalizeUserToken(userToken) {\n  return typeof userToken === 'number' ? userToken.toString() : userToken;\n}","function createInternalCancelablePromise(promise, initialState) {\n  var state = initialState;\n  return {\n    then: function then(onfulfilled, onrejected) {\n      return createInternalCancelablePromise(promise.then(createCallback(onfulfilled, state, promise), createCallback(onrejected, state, promise)), state);\n    },\n    catch: function _catch(onrejected) {\n      return createInternalCancelablePromise(promise.catch(createCallback(onrejected, state, promise)), state);\n    },\n    finally: function _finally(onfinally) {\n      if (onfinally) {\n        state.onCancelList.push(onfinally);\n      }\n      return createInternalCancelablePromise(promise.finally(createCallback(onfinally && function () {\n        state.onCancelList = [];\n        return onfinally();\n      }, state, promise)), state);\n    },\n    cancel: function cancel() {\n      state.isCanceled = true;\n      var callbacks = state.onCancelList;\n      state.onCancelList = [];\n      callbacks.forEach(function (callback) {\n        callback();\n      });\n    },\n    isCanceled: function isCanceled() {\n      return state.isCanceled === true;\n    }\n  };\n}\nexport function createCancelablePromise(executor) {\n  return createInternalCancelablePromise(new Promise(function (resolve, reject) {\n    return executor(resolve, reject);\n  }), {\n    isCanceled: false,\n    onCancelList: []\n  });\n}\ncreateCancelablePromise.resolve = function (value) {\n  return cancelable(Promise.resolve(value));\n};\ncreateCancelablePromise.reject = function (reason) {\n  return cancelable(Promise.reject(reason));\n};\nexport function cancelable(promise) {\n  return createInternalCancelablePromise(promise, {\n    isCanceled: false,\n    onCancelList: []\n  });\n}\nfunction createCallback(onResult, state, fallback) {\n  if (!onResult) {\n    return fallback;\n  }\n  return function callback(arg) {\n    if (state.isCanceled) {\n      return arg;\n    }\n    return onResult(arg);\n  };\n}","// Ensures multiple callers sync to the same promise.\nvar _hasWaitPromiseResolved = true;\nvar _waitPromise;\nexport function createCancelablePromiseList() {\n  var list = [];\n  return {\n    add: function add(cancelablePromise) {\n      list.push(cancelablePromise);\n      return cancelablePromise.finally(function () {\n        list = list.filter(function (item) {\n          return item !== cancelablePromise;\n        });\n      });\n    },\n    cancelAll: function cancelAll() {\n      list.forEach(function (promise) {\n        return promise.cancel();\n      });\n    },\n    isEmpty: function isEmpty() {\n      return list.length === 0;\n    },\n    wait: function wait(timeout) {\n      // Reuse promise if already exists. Keeps multiple callers subscribed to the same promise.\n      if (!_hasWaitPromiseResolved) {\n        return _waitPromise;\n      }\n\n      // Creates a promise which either resolves after all pending requests complete\n      // or the timeout is reached (if provided). Whichever comes first.\n      _hasWaitPromiseResolved = false;\n      _waitPromise = !timeout ? Promise.all(list) : Promise.race([Promise.all(list), new Promise(function (resolve) {\n        return setTimeout(resolve, timeout);\n      })]);\n      return _waitPromise.then(function () {\n        _hasWaitPromiseResolved = true;\n      });\n    }\n  };\n}","/**\n * Creates a runner that executes promises in a concurrent-safe way.\n *\n * This is useful to prevent older promises to resolve after a newer promise,\n * otherwise resulting in stale resolved values.\n */\nexport function createConcurrentSafePromise() {\n  var basePromiseId = -1;\n  var latestResolvedId = -1;\n  var latestResolvedValue = undefined;\n  return function runConcurrentSafePromise(promise) {\n    basePromiseId++;\n    var currentPromiseId = basePromiseId;\n    return Promise.resolve(promise).then(function (x) {\n      // The promise might take too long to resolve and get outdated. This would\n      // result in resolving stale values.\n      // When this happens, we ignore the promise value and return the one\n      // coming from the latest resolved value.\n      //\n      // +----------------------------------+\n      // |        100ms                     |\n      // | run(1) +--->  R1                 |\n      // |        300ms                     |\n      // | run(2) +-------------> R2 (SKIP) |\n      // |        200ms                     |\n      // | run(3) +--------> R3             |\n      // +----------------------------------+\n      if (latestResolvedValue && currentPromiseId < latestResolvedId) {\n        return latestResolvedValue;\n      }\n      latestResolvedId = currentPromiseId;\n      latestResolvedValue = x;\n      return x;\n    });\n  };\n}","/**\n * Returns the next active item ID from the current state.\n *\n * We allow circular keyboard navigation from the base index.\n * The base index can either be `null` (nothing is highlighted) or `0`\n * (the first item is highlighted).\n * The base index is allowed to get assigned `null` only if\n * `props.defaultActiveItemId` is `null`. This pattern allows to \"stop\"\n * by the actual query before navigating to other suggestions as seen on\n * Google or Amazon.\n *\n * @param moveAmount The offset to increment (or decrement) the last index\n * @param baseIndex The current index to compute the next index from\n * @param itemCount The number of items\n * @param defaultActiveItemId The default active index to fallback to\n */\nexport function getNextActiveItemId(moveAmount, baseIndex, itemCount, defaultActiveItemId) {\n  if (!itemCount) {\n    return null;\n  }\n  if (moveAmount < 0 && (baseIndex === null || defaultActiveItemId !== null && baseIndex === 0)) {\n    return itemCount + moveAmount;\n  }\n  var numericIndex = (baseIndex === null ? -1 : baseIndex) + moveAmount;\n  if (numericIndex <= -1 || numericIndex >= itemCount) {\n    return defaultActiveItemId === null ? null : 0;\n  }\n  return numericIndex;\n}","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nimport { invariant, decycle, noop } from '@algolia/autocomplete-shared';\nexport function getNormalizedSources(getSources, params) {\n  var seenSourceIds = [];\n  return Promise.resolve(getSources(params)).then(function (sources) {\n    invariant(Array.isArray(sources), function () {\n      return \"The `getSources` function must return an array of sources but returned type \".concat(JSON.stringify(_typeof(sources)), \":\\n\\n\").concat(JSON.stringify(decycle(sources), null, 2));\n    });\n    return Promise.all(sources\n    // We allow `undefined` and `false` sources to allow users to use\n    // `Boolean(query) && source` (=> `false`).\n    // We need to remove these values at this point.\n    .filter(function (maybeSource) {\n      return Boolean(maybeSource);\n    }).map(function (source) {\n      invariant(typeof source.sourceId === 'string', 'A source must provide a `sourceId` string.');\n      if (seenSourceIds.includes(source.sourceId)) {\n        throw new Error(\"[Autocomplete] The `sourceId` \".concat(JSON.stringify(source.sourceId), \" is not unique.\"));\n      }\n      seenSourceIds.push(source.sourceId);\n      var defaultSource = {\n        getItemInputValue: function getItemInputValue(_ref) {\n          var state = _ref.state;\n          return state.query;\n        },\n        getItemUrl: function getItemUrl() {\n          return undefined;\n        },\n        onSelect: function onSelect(_ref2) {\n          var setIsOpen = _ref2.setIsOpen;\n          setIsOpen(false);\n        },\n        onActive: noop,\n        onResolve: noop\n      };\n      Object.keys(defaultSource).forEach(function (key) {\n        defaultSource[key].__default = true;\n      });\n      var normalizedSource = _objectSpread(_objectSpread({}, defaultSource), source);\n      return Promise.resolve(normalizedSource);\n    }));\n  });\n}","function _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n/**\n * If a plugin is configured to await a submit event, this returns a promise\n * for either the max timeout value found or until it completes.\n * Otherwise, return undefined.\n */\nexport var getPluginSubmitPromise = function getPluginSubmitPromise(plugins, pendingRequests) {\n  var waitUntilComplete = false;\n  var timeouts = [];\n  var _iterator = _createForOfIteratorHelper(plugins),\n    _step;\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var _plugin$__autocomplet, _plugin$__autocomplet2;\n      var plugin = _step.value;\n      var value = (_plugin$__autocomplet = plugin.__autocomplete_pluginOptions) === null || _plugin$__autocomplet === void 0 ? void 0 : (_plugin$__autocomplet2 = _plugin$__autocomplet.awaitSubmit) === null || _plugin$__autocomplet2 === void 0 ? void 0 : _plugin$__autocomplet2.call(_plugin$__autocomplet);\n      if (typeof value === 'number') {\n        timeouts.push(value);\n      } else if (value === true) {\n        waitUntilComplete = true;\n        break; // break loop as bool overrides num array below\n      }\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n  if (waitUntilComplete) {\n    return pendingRequests.wait();\n  } else if (timeouts.length > 0) {\n    return pendingRequests.wait(Math.max.apply(Math, timeouts));\n  }\n  return undefined;\n};","// We don't have access to the autocomplete source when we call `onKeyDown`\n// or `onClick` because those are native browser events.\n// However, we can get the source from the suggestion index.\nfunction getCollectionFromActiveItemId(state) {\n  // Given 3 sources with respectively 1, 2 and 3 suggestions: [1, 2, 3]\n  // We want to get the accumulated counts:\n  // [1, 1 + 2, 1 + 2 + 3] = [1, 3, 3 + 3] = [1, 3, 6]\n  var accumulatedCollectionsCount = state.collections.map(function (collections) {\n    return collections.items.length;\n  }).reduce(function (acc, collectionsCount, index) {\n    var previousValue = acc[index - 1] || 0;\n    var nextValue = previousValue + collectionsCount;\n    acc.push(nextValue);\n    return acc;\n  }, []);\n\n  // Based on the accumulated counts, we can infer the index of the suggestion.\n  var collectionIndex = accumulatedCollectionsCount.reduce(function (acc, current) {\n    if (current <= state.activeItemId) {\n      return acc + 1;\n    }\n    return acc;\n  }, 0);\n  return state.collections[collectionIndex];\n}\n\n/**\n * Gets the highlighted index relative to a suggestion object (not the absolute\n * highlighted index).\n *\n * Example:\n *  [['a', 'b'], ['c', 'd', 'e'], ['f']]\n *                      ↑\n *         (absolute: 3, relative: 1)\n */\nfunction getRelativeActiveItemId(_ref) {\n  var state = _ref.state,\n    collection = _ref.collection;\n  var isOffsetFound = false;\n  var counter = 0;\n  var previousItemsOffset = 0;\n  while (isOffsetFound === false) {\n    var currentCollection = state.collections[counter];\n    if (currentCollection === collection) {\n      isOffsetFound = true;\n      break;\n    }\n    previousItemsOffset += currentCollection.items.length;\n    counter++;\n  }\n  return state.activeItemId - previousItemsOffset;\n}\nexport function getActiveItem(state) {\n  var collection = getCollectionFromActiveItemId(state);\n  if (!collection) {\n    return null;\n  }\n  var item = collection.items[getRelativeActiveItemId({\n    state: state,\n    collection: collection\n  })];\n  var source = collection.source;\n  var itemInputValue = source.getItemInputValue({\n    item: item,\n    state: state\n  });\n  var itemUrl = source.getItemUrl({\n    item: item,\n    state: state\n  });\n  return {\n    item: item,\n    itemInputValue: itemInputValue,\n    itemUrl: itemUrl,\n    source: source\n  };\n}","/**\n * Returns a full element id for an autocomplete element.\n *\n * @param autocompleteInstanceId The id of the autocomplete instance\n * @param elementId The specific element id\n * @param source The source of the element, when it needs to be scoped\n */\nexport function getAutocompleteElementId(autocompleteInstanceId, elementId, source) {\n  return [autocompleteInstanceId, source === null || source === void 0 ? void 0 : source.sourceId, elementId].filter(Boolean).join('-').replace(/\\s/g, '');\n}","export function isOrContainsNode(parent, child) {\n  return parent === child || parent.contains(child);\n}","var regex = /((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;\nexport function isSamsung(userAgent) {\n  return Boolean(userAgent && userAgent.match(regex));\n}","export function mapToAlgoliaResponse(rawResults) {\n  return {\n    results: rawResults,\n    hits: rawResults.map(function (result) {\n      return result.hits;\n    }).filter(Boolean),\n    facetHits: rawResults.map(function (result) {\n      var _facetHits;\n      return (_facetHits = result.facetHits) === null || _facetHits === void 0 ? void 0 : _facetHits.map(function (facetHit) {\n        // Bring support for the highlighting components.\n        return {\n          label: facetHit.value,\n          count: facetHit.count,\n          _highlightResult: {\n            label: {\n              value: facetHit.highlighted\n            }\n          }\n        };\n      });\n    }).filter(Boolean)\n  };\n}","export function getNativeEvent(event) {\n  return event.nativeEvent || event;\n}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { createCancelablePromiseList } from './utils';\nexport function createStore(reducer, props, onStoreStateChange) {\n  var state = props.initialState;\n  return {\n    getState: function getState() {\n      return state;\n    },\n    dispatch: function dispatch(action, payload) {\n      var prevState = _objectSpread({}, state);\n      state = reducer(state, {\n        type: action,\n        props: props,\n        payload: payload\n      });\n      onStoreStateChange({\n        state: state,\n        prevState: prevState\n      });\n    },\n    pendingRequests: createCancelablePromiseList()\n  };\n}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { flatten } from '@algolia/autocomplete-shared';\nexport function getAutocompleteSetters(_ref) {\n  var store = _ref.store;\n  var setActiveItemId = function setActiveItemId(value) {\n    store.dispatch('setActiveItemId', value);\n  };\n  var setQuery = function setQuery(value) {\n    store.dispatch('setQuery', value);\n  };\n  var setCollections = function setCollections(rawValue) {\n    var baseItemId = 0;\n    var value = rawValue.map(function (collection) {\n      return _objectSpread(_objectSpread({}, collection), {}, {\n        // We flatten the stored items to support calling `getAlgoliaResults`\n        // from the source itself.\n        items: flatten(collection.items).map(function (item) {\n          return _objectSpread(_objectSpread({}, item), {}, {\n            __autocomplete_id: baseItemId++\n          });\n        })\n      });\n    });\n    store.dispatch('setCollections', value);\n  };\n  var setIsOpen = function setIsOpen(value) {\n    store.dispatch('setIsOpen', value);\n  };\n  var setStatus = function setStatus(value) {\n    store.dispatch('setStatus', value);\n  };\n  var setContext = function setContext(value) {\n    store.dispatch('setContext', value);\n  };\n  return {\n    setActiveItemId: setActiveItemId,\n    setQuery: setQuery,\n    setCollections: setCollections,\n    setIsOpen: setIsOpen,\n    setStatus: setStatus,\n    setContext: setContext\n  };\n}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { getItemsCount, generateAutocompleteId, flatten } from '@algolia/autocomplete-shared';\nimport { getNormalizedSources } from './utils';\nexport function getDefaultProps(props, pluginSubscribers) {\n  var _props$id;\n  /* eslint-disable no-restricted-globals */\n  var environment = typeof window !== 'undefined' ? window : {};\n  /* eslint-enable no-restricted-globals */\n  var plugins = props.plugins || [];\n  return _objectSpread(_objectSpread({\n    debug: false,\n    openOnFocus: false,\n    enterKeyHint: undefined,\n    ignoreCompositionEvents: false,\n    placeholder: '',\n    autoFocus: false,\n    defaultActiveItemId: null,\n    stallThreshold: 300,\n    insights: undefined,\n    environment: environment,\n    shouldPanelOpen: function shouldPanelOpen(_ref) {\n      var state = _ref.state;\n      return getItemsCount(state) > 0;\n    },\n    reshape: function reshape(_ref2) {\n      var sources = _ref2.sources;\n      return sources;\n    }\n  }, props), {}, {\n    // Since `generateAutocompleteId` triggers a side effect (it increments\n    // an internal counter), we don't want to execute it if unnecessary.\n    id: (_props$id = props.id) !== null && _props$id !== void 0 ? _props$id : generateAutocompleteId(),\n    plugins: plugins,\n    // The following props need to be deeply defaulted.\n    initialState: _objectSpread({\n      activeItemId: null,\n      query: '',\n      completion: null,\n      collections: [],\n      isOpen: false,\n      status: 'idle',\n      context: {}\n    }, props.initialState),\n    onStateChange: function onStateChange(params) {\n      var _props$onStateChange;\n      (_props$onStateChange = props.onStateChange) === null || _props$onStateChange === void 0 ? void 0 : _props$onStateChange.call(props, params);\n      plugins.forEach(function (x) {\n        var _x$onStateChange;\n        return (_x$onStateChange = x.onStateChange) === null || _x$onStateChange === void 0 ? void 0 : _x$onStateChange.call(x, params);\n      });\n    },\n    onSubmit: function onSubmit(params) {\n      var _props$onSubmit;\n      (_props$onSubmit = props.onSubmit) === null || _props$onSubmit === void 0 ? void 0 : _props$onSubmit.call(props, params);\n      plugins.forEach(function (x) {\n        var _x$onSubmit;\n        return (_x$onSubmit = x.onSubmit) === null || _x$onSubmit === void 0 ? void 0 : _x$onSubmit.call(x, params);\n      });\n    },\n    onReset: function onReset(params) {\n      var _props$onReset;\n      (_props$onReset = props.onReset) === null || _props$onReset === void 0 ? void 0 : _props$onReset.call(props, params);\n      plugins.forEach(function (x) {\n        var _x$onReset;\n        return (_x$onReset = x.onReset) === null || _x$onReset === void 0 ? void 0 : _x$onReset.call(x, params);\n      });\n    },\n    getSources: function getSources(params) {\n      return Promise.all([].concat(_toConsumableArray(plugins.map(function (plugin) {\n        return plugin.getSources;\n      })), [props.getSources]).filter(Boolean).map(function (getSources) {\n        return getNormalizedSources(getSources, params);\n      })).then(function (nested) {\n        return flatten(nested);\n      }).then(function (sources) {\n        return sources.map(function (source) {\n          return _objectSpread(_objectSpread({}, source), {}, {\n            onSelect: function onSelect(params) {\n              source.onSelect(params);\n              pluginSubscribers.forEach(function (x) {\n                var _x$onSelect;\n                return (_x$onSelect = x.onSelect) === null || _x$onSelect === void 0 ? void 0 : _x$onSelect.call(x, params);\n              });\n            },\n            onActive: function onActive(params) {\n              source.onActive(params);\n              pluginSubscribers.forEach(function (x) {\n                var _x$onActive;\n                return (_x$onActive = x.onActive) === null || _x$onActive === void 0 ? void 0 : _x$onActive.call(x, params);\n              });\n            },\n            onResolve: function onResolve(params) {\n              source.onResolve(params);\n              pluginSubscribers.forEach(function (x) {\n                var _x$onResolve;\n                return (_x$onResolve = x.onResolve) === null || _x$onResolve === void 0 ? void 0 : _x$onResolve.call(x, params);\n              });\n            }\n          });\n        });\n      });\n    },\n    navigator: _objectSpread({\n      navigate: function navigate(_ref3) {\n        var itemUrl = _ref3.itemUrl;\n        environment.location.assign(itemUrl);\n      },\n      navigateNewTab: function navigateNewTab(_ref4) {\n        var itemUrl = _ref4.itemUrl;\n        var windowReference = environment.open(itemUrl, '_blank', 'noopener');\n        windowReference === null || windowReference === void 0 ? void 0 : windowReference.focus();\n      },\n      navigateNewWindow: function navigateNewWindow(_ref5) {\n        var itemUrl = _ref5.itemUrl;\n        environment.open(itemUrl, '_blank', 'noopener');\n      }\n    }, props.navigator)\n  });\n}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { flatten } from '@algolia/autocomplete-shared';\nexport function reshape(_ref) {\n  var collections = _ref.collections,\n    props = _ref.props,\n    state = _ref.state;\n  // Sources are grouped by `sourceId` to conveniently pick them via destructuring.\n  // Example: `const { recentSearchesPlugin } = sourcesBySourceId`\n  var originalSourcesBySourceId = collections.reduce(function (acc, collection) {\n    return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, collection.source.sourceId, _objectSpread(_objectSpread({}, collection.source), {}, {\n      getItems: function getItems() {\n        // We provide the resolved items from the collection to the `reshape` prop.\n        return flatten(collection.items);\n      }\n    })));\n  }, {});\n  var _props$plugins$reduce = props.plugins.reduce(function (acc, plugin) {\n      if (plugin.reshape) {\n        return plugin.reshape(acc);\n      }\n      return acc;\n    }, {\n      sourcesBySourceId: originalSourcesBySourceId,\n      state: state\n    }),\n    sourcesBySourceId = _props$plugins$reduce.sourcesBySourceId;\n  var reshapeSources = props.reshape({\n    sourcesBySourceId: sourcesBySourceId,\n    sources: Object.values(sourcesBySourceId),\n    state: state\n  });\n\n  // We reconstruct the collections with the items modified by the `reshape` prop.\n  return flatten(reshapeSources).filter(Boolean).map(function (source) {\n    return {\n      source: source,\n      items: source.getItems()\n    };\n  });\n}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport { decycle, flatten, invariant } from '@algolia/autocomplete-shared';\nimport { mapToAlgoliaResponse } from './utils';\nfunction isDescription(item) {\n  return Boolean(item.execute);\n}\nfunction isRequesterDescription(description) {\n  return Boolean(description === null || description === void 0 ? void 0 : description.execute);\n}\nexport function preResolve(itemsOrDescription, sourceId, state) {\n  if (isRequesterDescription(itemsOrDescription)) {\n    var contextParameters = itemsOrDescription.requesterId === 'algolia' ? Object.assign.apply(Object, [{}].concat(_toConsumableArray(Object.keys(state.context).map(function (key) {\n      var _state$context$key;\n      return (_state$context$key = state.context[key]) === null || _state$context$key === void 0 ? void 0 : _state$context$key.__algoliaSearchParameters;\n    })))) : {};\n    return _objectSpread(_objectSpread({}, itemsOrDescription), {}, {\n      requests: itemsOrDescription.queries.map(function (query) {\n        return {\n          query: itemsOrDescription.requesterId === 'algolia' ? _objectSpread(_objectSpread({}, query), {}, {\n            params: _objectSpread(_objectSpread({}, contextParameters), query.params)\n          }) : query,\n          sourceId: sourceId,\n          transformResponse: itemsOrDescription.transformResponse\n        };\n      })\n    });\n  }\n  return {\n    items: itemsOrDescription,\n    sourceId: sourceId\n  };\n}\nexport function resolve(items) {\n  var packed = items.reduce(function (acc, current) {\n    if (!isDescription(current)) {\n      acc.push(current);\n      return acc;\n    }\n    var searchClient = current.searchClient,\n      execute = current.execute,\n      requesterId = current.requesterId,\n      requests = current.requests;\n    var container = acc.find(function (item) {\n      return isDescription(current) && isDescription(item) && item.searchClient === searchClient && Boolean(requesterId) && item.requesterId === requesterId;\n    });\n    if (container) {\n      var _container$items;\n      (_container$items = container.items).push.apply(_container$items, _toConsumableArray(requests));\n    } else {\n      var request = {\n        execute: execute,\n        requesterId: requesterId,\n        items: requests,\n        searchClient: searchClient\n      };\n      acc.push(request);\n    }\n    return acc;\n  }, []);\n  var values = packed.map(function (maybeDescription) {\n    if (!isDescription(maybeDescription)) {\n      return Promise.resolve(maybeDescription);\n    }\n    var _ref = maybeDescription,\n      execute = _ref.execute,\n      items = _ref.items,\n      searchClient = _ref.searchClient;\n    return execute({\n      searchClient: searchClient,\n      requests: items\n    });\n  });\n  return Promise.all(values).then(function (responses) {\n    return flatten(responses);\n  });\n}\nexport function postResolve(responses, sources, store) {\n  return sources.map(function (source) {\n    var matches = responses.filter(function (response) {\n      return response.sourceId === source.sourceId;\n    });\n    var results = matches.map(function (_ref2) {\n      var items = _ref2.items;\n      return items;\n    });\n    var transform = matches[0].transformResponse;\n    var items = transform ? transform(mapToAlgoliaResponse(results)) : results;\n    source.onResolve({\n      source: source,\n      results: results,\n      items: items,\n      state: store.getState()\n    });\n    invariant(Array.isArray(items), function () {\n      return \"The `getItems` function from source \\\"\".concat(source.sourceId, \"\\\" must return an array of items but returned type \").concat(JSON.stringify(_typeof(items)), \":\\n\\n\").concat(JSON.stringify(decycle(items), null, 2), \".\\n\\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems\");\n    });\n    invariant(items.every(Boolean), \"The `getItems` function from source \\\"\".concat(source.sourceId, \"\\\" must return an array of items but returned \").concat(JSON.stringify(undefined), \".\\n\\nDid you forget to return items?\\n\\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems\"));\n    return {\n      source: source,\n      items: items\n    };\n  });\n}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _excluded = [\"event\", \"nextState\", \"props\", \"query\", \"refresh\", \"store\"];\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nimport { reshape } from './reshape';\nimport { preResolve, resolve, postResolve } from './resolve';\nimport { cancelable, createConcurrentSafePromise, getActiveItem } from './utils';\nvar lastStalledId = null;\nvar runConcurrentSafePromise = createConcurrentSafePromise();\nexport function onInput(_ref) {\n  var event = _ref.event,\n    _ref$nextState = _ref.nextState,\n    nextState = _ref$nextState === void 0 ? {} : _ref$nextState,\n    props = _ref.props,\n    query = _ref.query,\n    refresh = _ref.refresh,\n    store = _ref.store,\n    setters = _objectWithoutProperties(_ref, _excluded);\n  if (lastStalledId) {\n    props.environment.clearTimeout(lastStalledId);\n  }\n  var setCollections = setters.setCollections,\n    setIsOpen = setters.setIsOpen,\n    setQuery = setters.setQuery,\n    setActiveItemId = setters.setActiveItemId,\n    setStatus = setters.setStatus,\n    setContext = setters.setContext;\n  setQuery(query);\n  setActiveItemId(props.defaultActiveItemId);\n  if (!query && props.openOnFocus === false) {\n    var _nextState$isOpen;\n    var collections = store.getState().collections.map(function (collection) {\n      return _objectSpread(_objectSpread({}, collection), {}, {\n        items: []\n      });\n    });\n    setStatus('idle');\n    setCollections(collections);\n    setIsOpen((_nextState$isOpen = nextState.isOpen) !== null && _nextState$isOpen !== void 0 ? _nextState$isOpen : props.shouldPanelOpen({\n      state: store.getState()\n    }));\n\n    // We make sure to update the latest resolved value of the tracked\n    // promises to keep late resolving promises from \"cancelling\" the state\n    // updates performed in this code path.\n    // We chain with a void promise to respect `onInput`'s expected return type.\n    var _request = cancelable(runConcurrentSafePromise(collections).then(function () {\n      return Promise.resolve();\n    }));\n    return store.pendingRequests.add(_request);\n  }\n  setStatus('loading');\n  lastStalledId = props.environment.setTimeout(function () {\n    setStatus('stalled');\n  }, props.stallThreshold);\n\n  // We track the entire promise chain triggered by `onInput` before mutating\n  // the Autocomplete state to make sure that any state manipulation is based on\n  // fresh data regardless of when promises individually resolve.\n  // We don't track nested promises and only rely on the full chain resolution,\n  // meaning we should only ever manipulate the state once this concurrent-safe\n  // promise is resolved.\n  var request = cancelable(runConcurrentSafePromise(props.getSources(_objectSpread({\n    query: query,\n    refresh: refresh,\n    state: store.getState()\n  }, setters)).then(function (sources) {\n    return Promise.all(sources.map(function (source) {\n      return Promise.resolve(source.getItems(_objectSpread({\n        query: query,\n        refresh: refresh,\n        state: store.getState()\n      }, setters))).then(function (itemsOrDescription) {\n        return preResolve(itemsOrDescription, source.sourceId, store.getState());\n      });\n    })).then(resolve).then(function (responses) {\n      var __automaticInsights = responses.some(function (_ref2) {\n        var items = _ref2.items;\n        return isSearchResponseWithAutomaticInsightsFlag(items);\n      });\n\n      // No need to pollute the context if `__automaticInsights=false`\n      if (__automaticInsights) {\n        var _store$getState$conte;\n        setContext({\n          algoliaInsightsPlugin: _objectSpread(_objectSpread({}, ((_store$getState$conte = store.getState().context) === null || _store$getState$conte === void 0 ? void 0 : _store$getState$conte.algoliaInsightsPlugin) || {}), {}, {\n            __automaticInsights: __automaticInsights\n          })\n        });\n      }\n      return postResolve(responses, sources, store);\n    }).then(function (collections) {\n      return reshape({\n        collections: collections,\n        props: props,\n        state: store.getState()\n      });\n    });\n  }))).then(function (collections) {\n    var _nextState$isOpen2;\n    // Parameters passed to `onInput` could be stale when the following code\n    // executes, because `onInput` calls may not resolve in order.\n    // If it becomes a problem we'll need to save the last passed parameters.\n    // See: https://codesandbox.io/s/agitated-cookies-y290z\n\n    setStatus('idle');\n    setCollections(collections);\n    var isPanelOpen = props.shouldPanelOpen({\n      state: store.getState()\n    });\n    setIsOpen((_nextState$isOpen2 = nextState.isOpen) !== null && _nextState$isOpen2 !== void 0 ? _nextState$isOpen2 : props.openOnFocus && !query && isPanelOpen || isPanelOpen);\n    var highlightedItem = getActiveItem(store.getState());\n    if (store.getState().activeItemId !== null && highlightedItem) {\n      var item = highlightedItem.item,\n        itemInputValue = highlightedItem.itemInputValue,\n        itemUrl = highlightedItem.itemUrl,\n        source = highlightedItem.source;\n      source.onActive(_objectSpread({\n        event: event,\n        item: item,\n        itemInputValue: itemInputValue,\n        itemUrl: itemUrl,\n        refresh: refresh,\n        source: source,\n        state: store.getState()\n      }, setters));\n    }\n  }).finally(function () {\n    setStatus('idle');\n    if (lastStalledId) {\n      props.environment.clearTimeout(lastStalledId);\n    }\n  });\n  return store.pendingRequests.add(request);\n}\nfunction isSearchResponseWithAutomaticInsightsFlag(items) {\n  return !Array.isArray(items) && Boolean(items === null || items === void 0 ? void 0 : items._automaticInsights);\n}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _excluded = [\"event\", \"props\", \"refresh\", \"store\"];\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nimport { onInput } from './onInput';\nimport { getPluginSubmitPromise, getActiveItem, getAutocompleteElementId } from './utils';\nexport function onKeyDown(_ref) {\n  var event = _ref.event,\n    props = _ref.props,\n    refresh = _ref.refresh,\n    store = _ref.store,\n    setters = _objectWithoutProperties(_ref, _excluded);\n  if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n    // eslint-disable-next-line no-inner-declarations\n    var triggerScrollIntoView = function triggerScrollIntoView() {\n      var highlightedItem = getActiveItem(store.getState());\n      var nodeItem = props.environment.document.getElementById(getAutocompleteElementId(props.id, \"item-\".concat(store.getState().activeItemId), highlightedItem === null || highlightedItem === void 0 ? void 0 : highlightedItem.source));\n      if (nodeItem) {\n        nodeItem.scrollIntoView({\n          block: 'nearest',\n          inline: 'nearest'\n        });\n      }\n    }; // eslint-disable-next-line no-inner-declarations\n    var triggerOnActive = function triggerOnActive() {\n      var highlightedItem = getActiveItem(store.getState());\n      if (store.getState().activeItemId !== null && highlightedItem) {\n        var item = highlightedItem.item,\n          itemInputValue = highlightedItem.itemInputValue,\n          itemUrl = highlightedItem.itemUrl,\n          source = highlightedItem.source;\n        source.onActive(_objectSpread({\n          event: event,\n          item: item,\n          itemInputValue: itemInputValue,\n          itemUrl: itemUrl,\n          refresh: refresh,\n          source: source,\n          state: store.getState()\n        }, setters));\n      }\n    }; // Default browser behavior changes the caret placement on ArrowUp and\n    // ArrowDown.\n    event.preventDefault();\n\n    // When re-opening the panel, we need to split the logic to keep the actions\n    // synchronized as `onInput` returns a promise.\n    if (store.getState().isOpen === false && (props.openOnFocus || Boolean(store.getState().query))) {\n      onInput(_objectSpread({\n        event: event,\n        props: props,\n        query: store.getState().query,\n        refresh: refresh,\n        store: store\n      }, setters)).then(function () {\n        store.dispatch(event.key, {\n          nextActiveItemId: props.defaultActiveItemId\n        });\n        triggerOnActive();\n        // Since we rely on the DOM, we need to wait for all the micro tasks to\n        // finish (which include re-opening the panel) to make sure all the\n        // elements are available.\n        setTimeout(triggerScrollIntoView, 0);\n      });\n    } else {\n      store.dispatch(event.key, {});\n      triggerOnActive();\n      triggerScrollIntoView();\n    }\n  } else if (event.key === 'Escape') {\n    // This prevents the default browser behavior on `input[type=\"search\"]`\n    // from removing the query right away because we first want to close the\n    // panel.\n    event.preventDefault();\n    store.dispatch(event.key, null);\n\n    // Hitting the `Escape` key signals the end of a user interaction with the\n    // autocomplete. At this point, we should ignore any requests that are still\n    // pending and could reopen the panel once they resolve, because that would\n    // result in an unsolicited UI behavior.\n    store.pendingRequests.cancelAll();\n  } else if (event.key === 'Tab') {\n    store.dispatch('blur', null);\n\n    // Hitting the `Tab` key signals the end of a user interaction with the\n    // autocomplete. At this point, we should ignore any requests that are still\n    // pending and could reopen the panel once they resolve, because that would\n    // result in an unsolicited UI behavior.\n    store.pendingRequests.cancelAll();\n  } else if (event.key === 'Enter') {\n    // No active item, so we let the browser handle the native `onSubmit` form\n    // event.\n    if (store.getState().activeItemId === null || store.getState().collections.every(function (collection) {\n      return collection.items.length === 0;\n    })) {\n      var waitForSubmit = getPluginSubmitPromise(props.plugins, store.pendingRequests);\n      if (waitForSubmit !== undefined) {\n        waitForSubmit.then(store.pendingRequests.cancelAll); // Cancel the rest if timeout number is provided\n      } else if (!props.debug) {\n        // If requests are still pending when the panel closes, they could reopen\n        // the panel once they resolve.\n        // We want to prevent any subsequent query from reopening the panel\n        // because it would result in an unsolicited UI behavior.\n        store.pendingRequests.cancelAll();\n      }\n      return;\n    }\n\n    // This prevents the `onSubmit` event to be sent because an item is\n    // highlighted.\n    event.preventDefault();\n    var _ref2 = getActiveItem(store.getState()),\n      item = _ref2.item,\n      itemInputValue = _ref2.itemInputValue,\n      itemUrl = _ref2.itemUrl,\n      source = _ref2.source;\n    if (event.metaKey || event.ctrlKey) {\n      if (itemUrl !== undefined) {\n        source.onSelect(_objectSpread({\n          event: event,\n          item: item,\n          itemInputValue: itemInputValue,\n          itemUrl: itemUrl,\n          refresh: refresh,\n          source: source,\n          state: store.getState()\n        }, setters));\n        props.navigator.navigateNewTab({\n          itemUrl: itemUrl,\n          item: item,\n          state: store.getState()\n        });\n      }\n    } else if (event.shiftKey) {\n      if (itemUrl !== undefined) {\n        source.onSelect(_objectSpread({\n          event: event,\n          item: item,\n          itemInputValue: itemInputValue,\n          itemUrl: itemUrl,\n          refresh: refresh,\n          source: source,\n          state: store.getState()\n        }, setters));\n        props.navigator.navigateNewWindow({\n          itemUrl: itemUrl,\n          item: item,\n          state: store.getState()\n        });\n      }\n    } else if (event.altKey) {\n      // Keep native browser behavior\n    } else {\n      if (itemUrl !== undefined) {\n        source.onSelect(_objectSpread({\n          event: event,\n          item: item,\n          itemInputValue: itemInputValue,\n          itemUrl: itemUrl,\n          refresh: refresh,\n          source: source,\n          state: store.getState()\n        }, setters));\n        props.navigator.navigate({\n          itemUrl: itemUrl,\n          item: item,\n          state: store.getState()\n        });\n        return;\n      }\n      onInput(_objectSpread({\n        event: event,\n        nextState: {\n          isOpen: false\n        },\n        props: props,\n        query: itemInputValue,\n        refresh: refresh,\n        store: store\n      }, setters)).then(function () {\n        source.onSelect(_objectSpread({\n          event: event,\n          item: item,\n          itemInputValue: itemInputValue,\n          itemUrl: itemUrl,\n          refresh: refresh,\n          source: source,\n          state: store.getState()\n        }, setters));\n      });\n    }\n  }\n}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _excluded = [\"props\", \"refresh\", \"store\"],\n  _excluded2 = [\"inputElement\", \"formElement\", \"panelElement\"],\n  _excluded3 = [\"inputElement\"],\n  _excluded4 = [\"inputElement\", \"maxLength\"],\n  _excluded5 = [\"source\"],\n  _excluded6 = [\"item\", \"source\"];\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nimport { noop } from '@algolia/autocomplete-shared';\nimport { onInput } from './onInput';\nimport { onKeyDown as _onKeyDown } from './onKeyDown';\nimport { getPluginSubmitPromise, getActiveItem, getAutocompleteElementId, isOrContainsNode, isSamsung, getNativeEvent } from './utils';\nexport function getPropGetters(_ref) {\n  var props = _ref.props,\n    refresh = _ref.refresh,\n    store = _ref.store,\n    setters = _objectWithoutProperties(_ref, _excluded);\n  var getEnvironmentProps = function getEnvironmentProps(providedProps) {\n    var inputElement = providedProps.inputElement,\n      formElement = providedProps.formElement,\n      panelElement = providedProps.panelElement,\n      rest = _objectWithoutProperties(providedProps, _excluded2);\n    function onMouseDownOrTouchStart(event) {\n      // The `onTouchStart`/`onMouseDown` events shouldn't trigger the `blur`\n      // handler when it's not an interaction with Autocomplete.\n      // We detect it with the following heuristics:\n      // - the panel is closed AND there are no pending requests\n      //   (no interaction with the autocomplete, no future state updates)\n      // - OR the touched target is the input element (should open the panel)\n      var isAutocompleteInteraction = store.getState().isOpen || !store.pendingRequests.isEmpty();\n      if (!isAutocompleteInteraction || event.target === inputElement) {\n        return;\n      }\n\n      // @TODO: support cases where there are multiple Autocomplete instances.\n      // Right now, a second instance makes this computation return false.\n      var isTargetWithinAutocomplete = [formElement, panelElement].some(function (contextNode) {\n        return isOrContainsNode(contextNode, event.target);\n      });\n      if (isTargetWithinAutocomplete === false) {\n        store.dispatch('blur', null);\n\n        // If requests are still pending when the user closes the panel, they\n        // could reopen the panel once they resolve.\n        // We want to prevent any subsequent query from reopening the panel\n        // because it would result in an unsolicited UI behavior.\n        if (!props.debug) {\n          store.pendingRequests.cancelAll();\n        }\n      }\n    }\n    return _objectSpread({\n      // We do not rely on the native `blur` event of the input to close the\n      // panel, but rather on a custom `touchstart`/`mousedown` event outside\n      // of the autocomplete elements.\n      // This ensures we don't mistakenly interpret interactions within the\n      // autocomplete (but outside of the input) as a signal to close the panel.\n      // For example, clicking reset button causes an input blur, but if\n      // `openOnFocus=true`, it shouldn't close the panel.\n      // On touch devices, scrolling results (`touchmove`) causes an input blur\n      // but shouldn't close the panel.\n      onTouchStart: onMouseDownOrTouchStart,\n      onMouseDown: onMouseDownOrTouchStart,\n      // When scrolling on touch devices (mobiles, tablets, etc.), we want to\n      // mimic the native platform behavior where the input is blurred to\n      // hide the virtual keyboard. This gives more vertical space to\n      // discover all the suggestions showing up in the panel.\n      onTouchMove: function onTouchMove(event) {\n        if (store.getState().isOpen === false || inputElement !== props.environment.document.activeElement || event.target === inputElement) {\n          return;\n        }\n        inputElement.blur();\n      }\n    }, rest);\n  };\n  var getRootProps = function getRootProps(rest) {\n    return _objectSpread({\n      role: 'combobox',\n      'aria-expanded': store.getState().isOpen,\n      'aria-haspopup': 'listbox',\n      'aria-controls': store.getState().isOpen ? store.getState().collections.map(function (_ref2) {\n        var source = _ref2.source;\n        return getAutocompleteElementId(props.id, 'list', source);\n      }).join(' ') : undefined,\n      'aria-labelledby': getAutocompleteElementId(props.id, 'label')\n    }, rest);\n  };\n  var getFormProps = function getFormProps(providedProps) {\n    var inputElement = providedProps.inputElement,\n      rest = _objectWithoutProperties(providedProps, _excluded3);\n    var handleSubmit = function handleSubmit(event) {\n      var _providedProps$inputE;\n      props.onSubmit(_objectSpread({\n        event: event,\n        refresh: refresh,\n        state: store.getState()\n      }, setters));\n      store.dispatch('submit', null);\n      (_providedProps$inputE = providedProps.inputElement) === null || _providedProps$inputE === void 0 ? void 0 : _providedProps$inputE.blur();\n    };\n    return _objectSpread({\n      action: '',\n      noValidate: true,\n      role: 'search',\n      onSubmit: function onSubmit(event) {\n        event.preventDefault();\n        var waitForSubmit = getPluginSubmitPromise(props.plugins, store.pendingRequests);\n        if (waitForSubmit !== undefined) {\n          waitForSubmit.then(function () {\n            return handleSubmit(event);\n          });\n        } else {\n          handleSubmit(event);\n        }\n      },\n      onReset: function onReset(event) {\n        var _providedProps$inputE2;\n        event.preventDefault();\n        props.onReset(_objectSpread({\n          event: event,\n          refresh: refresh,\n          state: store.getState()\n        }, setters));\n        store.dispatch('reset', null);\n        (_providedProps$inputE2 = providedProps.inputElement) === null || _providedProps$inputE2 === void 0 ? void 0 : _providedProps$inputE2.focus();\n      }\n    }, rest);\n  };\n  var getInputProps = function getInputProps(providedProps) {\n    var _props$environment$na;\n    function onFocus(event) {\n      // We want to trigger a query when `openOnFocus` is true\n      // because the panel should open with the current query.\n      if (props.openOnFocus || Boolean(store.getState().query)) {\n        onInput(_objectSpread({\n          event: event,\n          props: props,\n          query: store.getState().completion || store.getState().query,\n          refresh: refresh,\n          store: store\n        }, setters));\n      }\n      store.dispatch('focus', null);\n    }\n    var _ref3 = providedProps || {},\n      inputElement = _ref3.inputElement,\n      _ref3$maxLength = _ref3.maxLength,\n      maxLength = _ref3$maxLength === void 0 ? 512 : _ref3$maxLength,\n      rest = _objectWithoutProperties(_ref3, _excluded4);\n    var activeItem = getActiveItem(store.getState());\n    var userAgent = ((_props$environment$na = props.environment.navigator) === null || _props$environment$na === void 0 ? void 0 : _props$environment$na.userAgent) || '';\n    var shouldFallbackKeyHint = isSamsung(userAgent);\n    var enterKeyHint = props.enterKeyHint || (activeItem !== null && activeItem !== void 0 && activeItem.itemUrl && !shouldFallbackKeyHint ? 'go' : 'search');\n    return _objectSpread({\n      'aria-autocomplete': 'both',\n      'aria-activedescendant': store.getState().isOpen && store.getState().activeItemId !== null ? getAutocompleteElementId(props.id, \"item-\".concat(store.getState().activeItemId), activeItem === null || activeItem === void 0 ? void 0 : activeItem.source) : undefined,\n      'aria-controls': store.getState().isOpen ? store.getState().collections.filter(function (collection) {\n        return collection.items.length > 0;\n      }).map(function (_ref4) {\n        var source = _ref4.source;\n        return getAutocompleteElementId(props.id, 'list', source);\n      }).join(' ') : undefined,\n      'aria-labelledby': getAutocompleteElementId(props.id, 'label'),\n      value: store.getState().completion || store.getState().query,\n      id: getAutocompleteElementId(props.id, 'input'),\n      autoComplete: 'off',\n      autoCorrect: 'off',\n      autoCapitalize: 'off',\n      enterKeyHint: enterKeyHint,\n      spellCheck: 'false',\n      autoFocus: props.autoFocus,\n      placeholder: props.placeholder,\n      maxLength: maxLength,\n      type: 'search',\n      onChange: function onChange(event) {\n        var value = event.currentTarget.value;\n        if (props.ignoreCompositionEvents && getNativeEvent(event).isComposing) {\n          setters.setQuery(value);\n          return;\n        }\n        onInput(_objectSpread({\n          event: event,\n          props: props,\n          query: value.slice(0, maxLength),\n          refresh: refresh,\n          store: store\n        }, setters));\n      },\n      onCompositionEnd: function onCompositionEnd(event) {\n        onInput(_objectSpread({\n          event: event,\n          props: props,\n          query: event.currentTarget.value.slice(0, maxLength),\n          refresh: refresh,\n          store: store\n        }, setters));\n      },\n      onKeyDown: function onKeyDown(event) {\n        if (getNativeEvent(event).isComposing) {\n          return;\n        }\n        _onKeyDown(_objectSpread({\n          event: event,\n          props: props,\n          refresh: refresh,\n          store: store\n        }, setters));\n      },\n      onFocus: onFocus,\n      // We don't rely on the `blur` event.\n      // See explanation in `onTouchStart`/`onMouseDown`.\n      // @MAJOR See if we need to keep this handler.\n      onBlur: noop,\n      onClick: function onClick(event) {\n        // When the panel is closed and you click on the input while\n        // the input is focused, the `onFocus` event is not triggered\n        // (default browser behavior).\n        // In an autocomplete context, it makes sense to open the panel in this\n        // case.\n        // We mimic this event by catching the `onClick` event which\n        // triggers the `onFocus` for the panel to open.\n        if (providedProps.inputElement === props.environment.document.activeElement && !store.getState().isOpen) {\n          onFocus(event);\n        }\n      }\n    }, rest);\n  };\n  var getLabelProps = function getLabelProps(rest) {\n    return _objectSpread({\n      htmlFor: getAutocompleteElementId(props.id, 'input'),\n      id: getAutocompleteElementId(props.id, 'label')\n    }, rest);\n  };\n  var getListProps = function getListProps(providedProps) {\n    var _ref5 = providedProps || {},\n      source = _ref5.source,\n      rest = _objectWithoutProperties(_ref5, _excluded5);\n    return _objectSpread({\n      role: 'listbox',\n      'aria-labelledby': getAutocompleteElementId(props.id, 'label'),\n      id: getAutocompleteElementId(props.id, 'list', source)\n    }, rest);\n  };\n  var getPanelProps = function getPanelProps(rest) {\n    return _objectSpread({\n      onMouseDown: function onMouseDown(event) {\n        // Prevents the `activeElement` from being changed to the panel so\n        // that the blur event is not triggered, otherwise it closes the\n        // panel.\n        event.preventDefault();\n      },\n      onMouseLeave: function onMouseLeave() {\n        store.dispatch('mouseleave', null);\n      }\n    }, rest);\n  };\n  var getItemProps = function getItemProps(providedProps) {\n    var item = providedProps.item,\n      source = providedProps.source,\n      rest = _objectWithoutProperties(providedProps, _excluded6);\n    return _objectSpread({\n      id: getAutocompleteElementId(props.id, \"item-\".concat(item.__autocomplete_id), source),\n      role: 'option',\n      'aria-selected': store.getState().activeItemId === item.__autocomplete_id,\n      onMouseMove: function onMouseMove(event) {\n        if (item.__autocomplete_id === store.getState().activeItemId) {\n          return;\n        }\n        store.dispatch('mousemove', item.__autocomplete_id);\n        var activeItem = getActiveItem(store.getState());\n        if (store.getState().activeItemId !== null && activeItem) {\n          var _item = activeItem.item,\n            itemInputValue = activeItem.itemInputValue,\n            itemUrl = activeItem.itemUrl,\n            _source = activeItem.source;\n          _source.onActive(_objectSpread({\n            event: event,\n            item: _item,\n            itemInputValue: itemInputValue,\n            itemUrl: itemUrl,\n            refresh: refresh,\n            source: _source,\n            state: store.getState()\n          }, setters));\n        }\n      },\n      onMouseDown: function onMouseDown(event) {\n        // Prevents the `activeElement` from being changed to the item so it\n        // can remain with the current `activeElement`.\n        event.preventDefault();\n      },\n      onClick: function onClick(event) {\n        var itemInputValue = source.getItemInputValue({\n          item: item,\n          state: store.getState()\n        });\n        var itemUrl = source.getItemUrl({\n          item: item,\n          state: store.getState()\n        });\n\n        // If `getItemUrl` is provided, it means that the suggestion\n        // is a link, not plain text that aims at updating the query.\n        // We can therefore skip the state change because it will update\n        // the `activeItemId`, resulting in a UI flash, especially\n        // noticeable on mobile.\n        var runPreCommand = itemUrl ? Promise.resolve() : onInput(_objectSpread({\n          event: event,\n          nextState: {\n            isOpen: false\n          },\n          props: props,\n          query: itemInputValue,\n          refresh: refresh,\n          store: store\n        }, setters));\n        runPreCommand.then(function () {\n          source.onSelect(_objectSpread({\n            event: event,\n            item: item,\n            itemInputValue: itemInputValue,\n            itemUrl: itemUrl,\n            refresh: refresh,\n            source: source,\n            state: store.getState()\n          }, setters));\n        });\n      }\n    }, rest);\n  };\n  return {\n    getEnvironmentProps: getEnvironmentProps,\n    getRootProps: getRootProps,\n    getFormProps: getFormProps,\n    getLabelProps: getLabelProps,\n    getInputProps: getInputProps,\n    getPanelProps: getPanelProps,\n    getListProps: getListProps,\n    getItemProps: getItemProps\n  };\n}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { userAgents } from '@algolia/autocomplete-shared';\nexport function getMetadata(_ref) {\n  var _, _options$__autocomple, _options$__autocomple2, _options$__autocomple3;\n  var plugins = _ref.plugins,\n    options = _ref.options;\n  var optionsKey = (_ = (((_options$__autocomple = options.__autocomplete_metadata) === null || _options$__autocomple === void 0 ? void 0 : _options$__autocomple.userAgents) || [])[0]) === null || _ === void 0 ? void 0 : _.segment;\n  var extraOptions = optionsKey ? _defineProperty({}, optionsKey, Object.keys(((_options$__autocomple2 = options.__autocomplete_metadata) === null || _options$__autocomple2 === void 0 ? void 0 : _options$__autocomple2.options) || {})) : {};\n  return {\n    plugins: plugins.map(function (plugin) {\n      return {\n        name: plugin.name,\n        options: Object.keys(plugin.__autocomplete_pluginOptions || [])\n      };\n    }),\n    options: _objectSpread({\n      'autocomplete-core': Object.keys(options)\n    }, extraOptions),\n    ua: userAgents.concat(((_options$__autocomple3 = options.__autocomplete_metadata) === null || _options$__autocomple3 === void 0 ? void 0 : _options$__autocomple3.userAgents) || [])\n  };\n}\nexport function injectMetadata(_ref3) {\n  var _environment$navigato, _environment$navigato2;\n  var metadata = _ref3.metadata,\n    environment = _ref3.environment;\n  var isMetadataEnabled = (_environment$navigato = environment.navigator) === null || _environment$navigato === void 0 ? void 0 : (_environment$navigato2 = _environment$navigato.userAgent) === null || _environment$navigato2 === void 0 ? void 0 : _environment$navigato2.includes('Algolia Crawler');\n  if (isMetadataEnabled) {\n    var metadataContainer = environment.document.createElement('meta');\n    var headRef = environment.document.querySelector('head');\n    metadataContainer.name = 'algolia:metadata';\n    setTimeout(function () {\n      metadataContainer.content = JSON.stringify(metadata);\n      headRef.appendChild(metadataContainer);\n    }, 0);\n  }\n}","import { getActiveItem } from './utils';\nexport function getCompletion(_ref) {\n  var _getActiveItem;\n  var state = _ref.state;\n  if (state.isOpen === false || state.activeItemId === null) {\n    return null;\n  }\n  return ((_getActiveItem = getActiveItem(state)) === null || _getActiveItem === void 0 ? void 0 : _getActiveItem.itemInputValue) || null;\n}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { getItemsCount, invariant } from '@algolia/autocomplete-shared';\nimport { getCompletion } from './getCompletion';\nimport { getNextActiveItemId } from './utils';\nexport var stateReducer = function stateReducer(state, action) {\n  switch (action.type) {\n    case 'setActiveItemId':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: action.payload\n        });\n      }\n    case 'setQuery':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          query: action.payload,\n          completion: null\n        });\n      }\n    case 'setCollections':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          collections: action.payload\n        });\n      }\n    case 'setIsOpen':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          isOpen: action.payload\n        });\n      }\n    case 'setStatus':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          status: action.payload\n        });\n      }\n    case 'setContext':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          context: _objectSpread(_objectSpread({}, state.context), action.payload)\n        });\n      }\n    case 'ArrowDown':\n      {\n        var nextState = _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: action.payload.hasOwnProperty('nextActiveItemId') ? action.payload.nextActiveItemId : getNextActiveItemId(1, state.activeItemId, getItemsCount(state), action.props.defaultActiveItemId)\n        });\n        return _objectSpread(_objectSpread({}, nextState), {}, {\n          completion: getCompletion({\n            state: nextState\n          })\n        });\n      }\n    case 'ArrowUp':\n      {\n        var _nextState = _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: getNextActiveItemId(-1, state.activeItemId, getItemsCount(state), action.props.defaultActiveItemId)\n        });\n        return _objectSpread(_objectSpread({}, _nextState), {}, {\n          completion: getCompletion({\n            state: _nextState\n          })\n        });\n      }\n    case 'Escape':\n      {\n        if (state.isOpen) {\n          return _objectSpread(_objectSpread({}, state), {}, {\n            activeItemId: null,\n            isOpen: false,\n            completion: null\n          });\n        }\n        return _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: null,\n          query: '',\n          status: 'idle',\n          collections: []\n        });\n      }\n    case 'submit':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: null,\n          isOpen: false,\n          status: 'idle'\n        });\n      }\n    case 'reset':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId:\n          // Since we open the panel on reset when openOnFocus=true\n          // we need to restore the highlighted index to the defaultActiveItemId. (DocSearch use-case)\n\n          // Since we close the panel when openOnFocus=false\n          // we lose track of the highlighted index. (Query-suggestions use-case)\n          action.props.openOnFocus === true ? action.props.defaultActiveItemId : null,\n          status: 'idle',\n          completion: null,\n          query: ''\n        });\n      }\n    case 'focus':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: action.props.defaultActiveItemId,\n          isOpen: (action.props.openOnFocus || Boolean(state.query)) && action.props.shouldPanelOpen({\n            state: state\n          })\n        });\n      }\n    case 'blur':\n      {\n        if (action.props.debug) {\n          return state;\n        }\n        return _objectSpread(_objectSpread({}, state), {}, {\n          isOpen: false,\n          activeItemId: null\n        });\n      }\n    case 'mousemove':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: action.payload\n        });\n      }\n    case 'mouseleave':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: action.props.defaultActiveItemId\n        });\n      }\n    default:\n      invariant(false, \"The reducer action \".concat(JSON.stringify(action.type), \" is not supported.\"));\n      return state;\n  }\n};","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { createAlgoliaInsightsPlugin } from '@algolia/autocomplete-plugin-algolia-insights';\nimport { checkOptions } from './checkOptions';\nimport { createStore } from './createStore';\nimport { getAutocompleteSetters } from './getAutocompleteSetters';\nimport { getDefaultProps } from './getDefaultProps';\nimport { getPropGetters } from './getPropGetters';\nimport { getMetadata, injectMetadata } from './metadata';\nimport { onInput } from './onInput';\nimport { stateReducer } from './stateReducer';\nexport function createAutocomplete(options) {\n  checkOptions(options);\n  var subscribers = [];\n  var props = getDefaultProps(options, subscribers);\n  var store = createStore(stateReducer, props, onStoreStateChange);\n  var setters = getAutocompleteSetters({\n    store: store\n  });\n  var propGetters = getPropGetters(_objectSpread({\n    props: props,\n    refresh: refresh,\n    store: store,\n    navigator: props.navigator\n  }, setters));\n  function onStoreStateChange(_ref) {\n    var _state$context, _state$context$algoli;\n    var prevState = _ref.prevState,\n      state = _ref.state;\n    props.onStateChange(_objectSpread({\n      prevState: prevState,\n      state: state,\n      refresh: refresh,\n      navigator: props.navigator\n    }, setters));\n    if (!isAlgoliaInsightsPluginEnabled() && (_state$context = state.context) !== null && _state$context !== void 0 && (_state$context$algoli = _state$context.algoliaInsightsPlugin) !== null && _state$context$algoli !== void 0 && _state$context$algoli.__automaticInsights && props.insights !== false) {\n      var plugin = createAlgoliaInsightsPlugin({\n        __autocomplete_clickAnalytics: false\n      });\n      props.plugins.push(plugin);\n      subscribePlugins([plugin]);\n    }\n  }\n  function refresh() {\n    return onInput(_objectSpread({\n      event: new Event('input'),\n      nextState: {\n        isOpen: store.getState().isOpen\n      },\n      props: props,\n      navigator: props.navigator,\n      query: store.getState().query,\n      refresh: refresh,\n      store: store\n    }, setters));\n  }\n  function subscribePlugins(plugins) {\n    plugins.forEach(function (plugin) {\n      var _plugin$subscribe;\n      return (_plugin$subscribe = plugin.subscribe) === null || _plugin$subscribe === void 0 ? void 0 : _plugin$subscribe.call(plugin, _objectSpread(_objectSpread({}, setters), {}, {\n        navigator: props.navigator,\n        refresh: refresh,\n        onSelect: function onSelect(fn) {\n          subscribers.push({\n            onSelect: fn\n          });\n        },\n        onActive: function onActive(fn) {\n          subscribers.push({\n            onActive: fn\n          });\n        },\n        onResolve: function onResolve(fn) {\n          subscribers.push({\n            onResolve: fn\n          });\n        }\n      }));\n    });\n  }\n  function isAlgoliaInsightsPluginEnabled() {\n    return props.plugins.some(function (plugin) {\n      return plugin.name === 'aa.algoliaInsightsPlugin';\n    });\n  }\n  if (props.insights && !isAlgoliaInsightsPluginEnabled()) {\n    var insightsParams = typeof props.insights === 'boolean' ? {} : props.insights;\n    props.plugins.push(createAlgoliaInsightsPlugin(insightsParams));\n  }\n  subscribePlugins(props.plugins);\n  injectMetadata({\n    metadata: getMetadata({\n      plugins: props.plugins,\n      options: options\n    }),\n    environment: props.environment\n  });\n  return _objectSpread(_objectSpread({\n    refresh: refresh,\n    navigator: props.navigator\n  }, propGetters), setters);\n}","var n=function(t,s,r,e){var u;s[0]=0;for(var h=1;h<s.length;h++){var p=s[h++],a=s[h]?(s[0]|=p?1:2,r[s[h++]]):s[++h];3===p?e[0]=a:4===p?e[1]=Object.assign(e[1]||{},a):5===p?(e[1]=e[1]||{})[s[++h]]=a:6===p?e[1][s[++h]]+=a+\"\":p?(u=t.apply(a,n(t,a,r,[\"\",null])),e.push(u),a[0]?s[0]|=2:(s[h-2]=0,s[h]=u)):e.push(a)}return e},t=new Map;export default function(s){var r=t.get(this);return r||(r=new Map,t.set(this,r)),(r=n(this,r.get(s)||(r.set(s,r=function(n){for(var t,s,r=1,e=\"\",u=\"\",h=[0],p=function(n){1===r&&(n||(e=e.replace(/^\\s*\\n\\s*|\\s*\\n\\s*$/g,\"\")))?h.push(0,n,e):3===r&&(n||e)?(h.push(3,n,e),r=2):2===r&&\"...\"===e&&n?h.push(4,n,0):2===r&&e&&!n?h.push(5,0,!0,e):r>=5&&((e||!n&&5===r)&&(h.push(r,0,e,s),r=6),n&&(h.push(r,n,0,s),r=6)),e=\"\"},a=0;a<n.length;a++){a&&(1===r&&p(),p(a));for(var l=0;l<n[a].length;l++)t=n[a][l],1===r?\"<\"===t?(p(),h=[h],r=3):e+=t:4===r?\"--\"===e&&\">\"===t?(r=1,e=\"\"):e=t+e[0]:u?t===u?u=\"\":e+=t:'\"'===t||\"'\"===t?u=t:\">\"===t?(p(),r=1):r&&(\"=\"===t?(r=5,s=e,e=\"\"):\"/\"===t&&(r<5||\">\"===n[a][l+1])?(p(),3===r&&(h=h[0]),r=h,(h=h[0]).push(2,0,r),r=0):\" \"===t||\"\\t\"===t||\"\\n\"===t||\"\\r\"===t?(p(),r=2):e+=t),3===r&&\"!--\"===e&&(r=4,h=h[0])}return p(),h}(s)),r),arguments,[])).length>1?r:r[0]}\n","export var ClearIcon = function ClearIcon(_ref) {\n  var environment = _ref.environment;\n  var element = environment.document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n  element.setAttribute('class', 'aa-ClearIcon');\n  element.setAttribute('viewBox', '0 0 24 24');\n  element.setAttribute('width', '18');\n  element.setAttribute('height', '18');\n  element.setAttribute('fill', 'currentColor');\n  var path = environment.document.createElementNS('http://www.w3.org/2000/svg', 'path');\n  path.setAttribute('d', 'M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z');\n  element.appendChild(path);\n  return element;\n};","import { invariant } from '@algolia/autocomplete-shared';\nexport function getHTMLElement(environment, value) {\n  if (typeof value === 'string') {\n    var element = environment.document.querySelector(value);\n    invariant(element !== null, \"The element \".concat(JSON.stringify(value), \" is not in the document.\"));\n    return element;\n  }\n  return value;\n}","export function mergeClassNames() {\n  for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n    values[_key] = arguments[_key];\n  }\n  return values.reduce(function (acc, current) {\n    Object.keys(current).forEach(function (key) {\n      var accValue = acc[key];\n      var currentValue = current[key];\n      if (accValue !== currentValue) {\n        acc[key] = [accValue, currentValue].filter(Boolean).join(' ');\n      }\n    });\n    return acc;\n  }, {});\n}","function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar isPlainObject = function isPlainObject(value) {\n  return value && _typeof(value) === 'object' && Object.prototype.toString.call(value) === '[object Object]';\n};\nexport function mergeDeep() {\n  for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n    values[_key] = arguments[_key];\n  }\n  return values.reduce(function (acc, current) {\n    Object.keys(current).forEach(function (key) {\n      var accValue = acc[key];\n      var currentValue = current[key];\n      if (Array.isArray(accValue) && Array.isArray(currentValue)) {\n        acc[key] = accValue.concat.apply(accValue, _toConsumableArray(currentValue));\n      } else if (isPlainObject(accValue) && isPlainObject(currentValue)) {\n        acc[key] = mergeDeep(accValue, currentValue);\n      } else {\n        acc[key] = currentValue;\n      }\n    });\n    return acc;\n  }, {});\n}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nexport function pickBy(obj, predicate) {\n  return Object.entries(obj).reduce(function (acc, _ref) {\n    var _ref2 = _slicedToArray(_ref, 2),\n      key = _ref2[0],\n      value = _ref2[1];\n    if (predicate({\n      key: key,\n      value: value\n    })) {\n      return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, key, value));\n    }\n    return acc;\n  }, {});\n}","/* eslint-disable */\n\n/**\n * Touch-specific event aliases\n *\n * See https://w3c.github.io/touch-events/#extensions-to-the-globaleventhandlers-mixin\n */\nvar TOUCH_EVENTS_ALIASES = ['ontouchstart', 'ontouchend', 'ontouchmove', 'ontouchcancel'];\n\n/*\n * Taken from Preact\n *\n * See https://github.com/preactjs/preact/blob/6ab49d9020740127577bf4af66bf63f4af7f9fee/src/diff/props.js#L58-L151\n */\n\nfunction setStyle(style, key, value) {\n  if (value === null) {\n    style[key] = '';\n  } else if (typeof value !== 'number') {\n    style[key] = value;\n  } else {\n    style[key] = value + 'px';\n  }\n}\n\n/**\n * Proxy an event to hooked event handlers\n */\nfunction eventProxy(event) {\n  var _this$_listeners;\n  this === null || this === void 0 ? void 0 : (_this$_listeners = this._listeners) === null || _this$_listeners === void 0 ? void 0 : _this$_listeners[event.type](event);\n}\n\n/**\n * Set a property value on a DOM node\n */\nexport function setProperty(dom, name, value) {\n  var useCapture;\n  var nameLower;\n  var oldValue = dom[name];\n  if (name === 'style') {\n    if (typeof value == 'string') {\n      dom.style = value;\n    } else {\n      if (value === null) {\n        dom.style = '';\n      } else {\n        for (name in value) {\n          if (!oldValue || value[name] !== oldValue[name]) {\n            setStyle(dom.style, name, value[name]);\n          }\n        }\n      }\n    }\n  }\n  // Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6\n  else if (name[0] === 'o' && name[1] === 'n') {\n    useCapture = name !== (name = name.replace(/Capture$/, ''));\n    nameLower = name.toLowerCase();\n    if (nameLower in dom || TOUCH_EVENTS_ALIASES.includes(nameLower)) name = nameLower;\n    name = name.slice(2);\n    if (!dom._listeners) dom._listeners = {};\n    dom._listeners[name] = value;\n    if (value) {\n      if (!oldValue) dom.addEventListener(name, eventProxy, useCapture);\n    } else {\n      dom.removeEventListener(name, eventProxy, useCapture);\n    }\n  } else if (name !== 'list' && name !== 'tagName' &&\n  // HTMLButtonElement.form and HTMLInputElement.form are read-only but can be set using\n  // setAttribute\n  name !== 'form' && name !== 'type' && name !== 'size' && name !== 'download' && name !== 'href' && name in dom) {\n    dom[name] = value == null ? '' : value;\n  } else if (typeof value != 'function' && name !== 'dangerouslySetInnerHTML') {\n    if (value == null || value === false &&\n    // ARIA-attributes have a different notion of boolean values.\n    // The value `false` is different from the attribute not\n    // existing on the DOM, so we can't remove it. For non-boolean\n    // ARIA-attributes we could treat false as a removal, but the\n    // amount of exceptions would cost us too many bytes. On top of\n    // that other VDOM frameworks also always stringify `false`.\n    !/^ar/.test(name)) {\n      dom.removeAttribute(name);\n    } else {\n      dom.setAttribute(name, value);\n    }\n  }\n}\nfunction getNormalizedName(name) {\n  switch (name) {\n    case 'onChange':\n      return 'onInput';\n    // see: https://github.com/preactjs/preact/issues/1978\n    case 'onCompositionEnd':\n      return 'oncompositionend';\n    default:\n      return name;\n  }\n}\nexport function setProperties(dom, props) {\n  for (var name in props) {\n    setProperty(dom, getNormalizedName(name), props[name]);\n  }\n}\nexport function setPropertiesWithoutEvents(dom, props) {\n  for (var name in props) {\n    if (!(name[0] === 'o' && name[1] === 'n')) {\n      setProperty(dom, getNormalizedName(name), props[name]);\n    }\n  }\n}","var _excluded = [\"children\"];\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nimport { setProperties } from './utils';\nexport function getCreateDomElement(environment) {\n  return function createDomElement(tagName, _ref) {\n    var _ref$children = _ref.children,\n      children = _ref$children === void 0 ? [] : _ref$children,\n      props = _objectWithoutProperties(_ref, _excluded);\n    var element = environment.document.createElement(tagName);\n    setProperties(element, props);\n    element.append.apply(element, _toConsumableArray(children));\n    return element;\n  };\n}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _excluded = [\"autocompleteScopeApi\", \"environment\", \"classNames\", \"getInputProps\", \"getInputPropsCore\", \"isDetached\", \"state\"];\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nimport { getCreateDomElement } from '../getCreateDomElement';\nimport { setProperties } from '../utils';\nexport var Input = function Input(_ref) {\n  var autocompleteScopeApi = _ref.autocompleteScopeApi,\n    environment = _ref.environment,\n    classNames = _ref.classNames,\n    getInputProps = _ref.getInputProps,\n    getInputPropsCore = _ref.getInputPropsCore,\n    isDetached = _ref.isDetached,\n    state = _ref.state,\n    props = _objectWithoutProperties(_ref, _excluded);\n  var createDomElement = getCreateDomElement(environment);\n  var element = createDomElement('input', props);\n  var inputProps = getInputProps(_objectSpread({\n    state: state,\n    props: getInputPropsCore({\n      inputElement: element\n    }),\n    inputElement: element\n  }, autocompleteScopeApi));\n  setProperties(element, _objectSpread(_objectSpread({}, inputProps), {}, {\n    onKeyDown: function onKeyDown(event) {\n      // In detached mode we don't want to close the panel when hitting `Tab`.\n      if (isDetached && event.key === 'Tab') {\n        return;\n      }\n      inputProps.onKeyDown(event);\n    }\n  }));\n  return element;\n};","export var LoadingIcon = function LoadingIcon(_ref) {\n  var environment = _ref.environment;\n  var element = environment.document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n  element.setAttribute('class', 'aa-LoadingIcon');\n  element.setAttribute('viewBox', '0 0 100 100');\n  element.setAttribute('width', '20');\n  element.setAttribute('height', '20');\n  element.innerHTML = \"<circle\\n  cx=\\\"50\\\"\\n  cy=\\\"50\\\"\\n  fill=\\\"none\\\"\\n  r=\\\"35\\\"\\n  stroke=\\\"currentColor\\\"\\n  stroke-dasharray=\\\"164.93361431346415 56.97787143782138\\\"\\n  stroke-width=\\\"6\\\"\\n>\\n  <animateTransform\\n    attributeName=\\\"transform\\\"\\n    type=\\\"rotate\\\"\\n    repeatCount=\\\"indefinite\\\"\\n    dur=\\\"1s\\\"\\n    values=\\\"0 50 50;90 50 50;180 50 50;360 50 50\\\"\\n    keyTimes=\\\"0;0.40;0.65;1\\\"\\n  />\\n</circle>\";\n  var pauseAnimations = function pauseAnimations() {\n    // Wait until the element is in the DOM.\n    if (!element.parentElement) {\n      setTimeout(pauseAnimations, 0);\n      return;\n    }\n    element.pauseAnimations();\n  };\n  if ('pauseAnimations' in element) {\n    pauseAnimations();\n  }\n  return element;\n};","export var SearchIcon = function SearchIcon(_ref) {\n  var environment = _ref.environment;\n  var element = environment.document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n  element.setAttribute('class', 'aa-SubmitIcon');\n  element.setAttribute('viewBox', '0 0 24 24');\n  element.setAttribute('width', '20');\n  element.setAttribute('height', '20');\n  element.setAttribute('fill', 'currentColor');\n  var path = environment.document.createElementNS('http://www.w3.org/2000/svg', 'path');\n  path.setAttribute('d', 'M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z');\n  element.appendChild(path);\n  return element;\n};","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { ClearIcon, Input, LoadingIcon, SearchIcon } from './elements';\nimport { getCreateDomElement } from './getCreateDomElement';\nimport { setProperties } from './utils';\nexport function createAutocompleteDom(_ref) {\n  var autocomplete = _ref.autocomplete,\n    autocompleteScopeApi = _ref.autocompleteScopeApi,\n    classNames = _ref.classNames,\n    environment = _ref.environment,\n    isDetached = _ref.isDetached,\n    _ref$placeholder = _ref.placeholder,\n    placeholder = _ref$placeholder === void 0 ? 'Search' : _ref$placeholder,\n    propGetters = _ref.propGetters,\n    setIsModalOpen = _ref.setIsModalOpen,\n    state = _ref.state,\n    translations = _ref.translations;\n  var createDomElement = getCreateDomElement(environment);\n  var rootProps = propGetters.getRootProps(_objectSpread({\n    state: state,\n    props: autocomplete.getRootProps({})\n  }, autocompleteScopeApi));\n  var root = createDomElement('div', _objectSpread({\n    class: classNames.root\n  }, rootProps));\n  var detachedContainer = createDomElement('div', {\n    class: classNames.detachedContainer,\n    onMouseDown: function onMouseDown(event) {\n      event.stopPropagation();\n    }\n  });\n  var detachedOverlay = createDomElement('div', {\n    class: classNames.detachedOverlay,\n    children: [detachedContainer],\n    onMouseDown: function onMouseDown() {\n      setIsModalOpen(false);\n      autocomplete.setIsOpen(false);\n    }\n  });\n  var labelProps = propGetters.getLabelProps(_objectSpread({\n    state: state,\n    props: autocomplete.getLabelProps({})\n  }, autocompleteScopeApi));\n  var submitButton = createDomElement('button', {\n    class: classNames.submitButton,\n    type: 'submit',\n    title: translations.submitButtonTitle,\n    children: [SearchIcon({\n      environment: environment\n    })]\n  });\n  // @MAJOR Remove the label wrapper for the submit button.\n  // The submit button is sufficient for accessibility purposes, and\n  // wrapping it with the label actually makes it less accessible (see CR-6077).\n  var label = createDomElement('label', _objectSpread({\n    class: classNames.label,\n    children: [submitButton],\n    ariaLabel: translations.submitButtonTitle\n  }, labelProps));\n  var clearButton = createDomElement('button', {\n    class: classNames.clearButton,\n    type: 'reset',\n    title: translations.clearButtonTitle,\n    children: [ClearIcon({\n      environment: environment\n    })]\n  });\n  var loadingIndicator = createDomElement('div', {\n    class: classNames.loadingIndicator,\n    children: [LoadingIcon({\n      environment: environment\n    })]\n  });\n  var input = Input({\n    class: classNames.input,\n    environment: environment,\n    state: state,\n    getInputProps: propGetters.getInputProps,\n    getInputPropsCore: autocomplete.getInputProps,\n    autocompleteScopeApi: autocompleteScopeApi,\n    isDetached: isDetached\n  });\n  var inputWrapperPrefix = createDomElement('div', {\n    class: classNames.inputWrapperPrefix,\n    children: [label, loadingIndicator]\n  });\n  var inputWrapperSuffix = createDomElement('div', {\n    class: classNames.inputWrapperSuffix,\n    children: [clearButton]\n  });\n  var inputWrapper = createDomElement('div', {\n    class: classNames.inputWrapper,\n    children: [input]\n  });\n  var formProps = propGetters.getFormProps(_objectSpread({\n    state: state,\n    props: autocomplete.getFormProps({\n      inputElement: input\n    })\n  }, autocompleteScopeApi));\n  var form = createDomElement('form', _objectSpread({\n    class: classNames.form,\n    children: [inputWrapperPrefix, inputWrapper, inputWrapperSuffix]\n  }, formProps));\n  var panelProps = propGetters.getPanelProps(_objectSpread({\n    state: state,\n    props: autocomplete.getPanelProps({})\n  }, autocompleteScopeApi));\n  var panel = createDomElement('div', _objectSpread({\n    class: classNames.panel\n  }, panelProps));\n  var detachedSearchButtonQuery = createDomElement('div', {\n    class: classNames.detachedSearchButtonQuery,\n    textContent: state.query\n  });\n  var detachedSearchButtonPlaceholder = createDomElement('div', {\n    class: classNames.detachedSearchButtonPlaceholder,\n    hidden: Boolean(state.query),\n    textContent: placeholder\n  });\n  if (process.env.NODE_ENV === 'test') {\n    setProperties(panel, {\n      'data-testid': 'panel'\n    });\n  }\n  if (isDetached) {\n    var detachedSearchButtonIcon = createDomElement('div', {\n      class: classNames.detachedSearchButtonIcon,\n      ariaLabel: translations.detachedSearchButtonTitle,\n      children: [SearchIcon({\n        environment: environment\n      })]\n    });\n    var detachedSearchButton = createDomElement('button', {\n      type: 'button',\n      class: classNames.detachedSearchButton,\n      title: translations.detachedSearchButtonTitle,\n      id: labelProps.id,\n      onClick: function onClick() {\n        setIsModalOpen(true);\n      },\n      children: [detachedSearchButtonIcon, detachedSearchButtonPlaceholder, detachedSearchButtonQuery]\n    });\n    var detachedCancelButton = createDomElement('button', {\n      type: 'button',\n      class: classNames.detachedCancelButton,\n      textContent: translations.detachedCancelButtonText,\n      // Prevent `onTouchStart` from closing the panel\n      // since it should be initiated by `onClick` only\n      onTouchStart: function onTouchStart(event) {\n        event.stopPropagation();\n      },\n      onClick: function onClick() {\n        autocomplete.setIsOpen(false);\n        setIsModalOpen(false);\n      }\n    });\n    var detachedFormContainer = createDomElement('div', {\n      class: classNames.detachedFormContainer,\n      children: [form, detachedCancelButton]\n    });\n    detachedContainer.appendChild(detachedFormContainer);\n    root.appendChild(detachedSearchButton);\n  } else {\n    root.appendChild(form);\n  }\n  return {\n    detachedContainer: detachedContainer,\n    detachedOverlay: detachedOverlay,\n    detachedSearchButtonQuery: detachedSearchButtonQuery,\n    detachedSearchButtonPlaceholder: detachedSearchButtonPlaceholder,\n    inputWrapper: inputWrapper,\n    input: input,\n    root: root,\n    form: form,\n    label: label,\n    submitButton: submitButton,\n    clearButton: clearButton,\n    loadingIndicator: loadingIndicator,\n    panel: panel\n  };\n}","export function createEffectWrapper() {\n  var effects = [];\n  var cleanups = [];\n  function runEffect(fn) {\n    effects.push(fn);\n    var effectCleanup = fn();\n    cleanups.push(effectCleanup);\n  }\n  return {\n    runEffect: runEffect,\n    cleanupEffects: function cleanupEffects() {\n      var currentCleanups = cleanups;\n      cleanups = [];\n      currentCleanups.forEach(function (cleanup) {\n        cleanup();\n      });\n    },\n    runEffects: function runEffects() {\n      var currentEffects = effects;\n      effects = [];\n      currentEffects.forEach(function (effect) {\n        runEffect(effect);\n      });\n    }\n  };\n}","export function createReactiveWrapper() {\n  var reactives = [];\n  return {\n    reactive: function reactive(value) {\n      var current = value();\n      var reactive = {\n        _fn: value,\n        _ref: {\n          current: current\n        },\n        get value() {\n          return this._ref.current;\n        },\n        set value(value) {\n          this._ref.current = value;\n        }\n      };\n      reactives.push(reactive);\n      return reactive;\n    },\n    runReactives: function runReactives() {\n      reactives.forEach(function (value) {\n        value._ref.current = value._fn();\n      });\n    }\n  };\n}","var n,l,u,t,i,o,r,f,e,c={},s=[],a=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,h=Array.isArray;function v(n,l){for(var u in l)n[u]=l[u];return n}function p(n){var l=n.parentNode;l&&l.removeChild(n)}function y(l,u,t){var i,o,r,f={};for(r in u)\"key\"==r?i=u[r]:\"ref\"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return d(l,f,i,o,null)}function d(n,t,i,o,r){var f={type:n,props:t,key:i,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==r?++u:r};return null==r&&null!=l.vnode&&l.vnode(f),f}function _(){return{current:null}}function k(n){return n.children}function b(n,l){this.props=n,this.context=l}function g(n,l){if(null==l)return n.__?g(n.__,n.__.__k.indexOf(n)+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?g(n):null}function m(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return m(n)}}function w(n){(!n.__d&&(n.__d=!0)&&i.push(n)&&!x.__r++||o!==l.debounceRendering)&&((o=l.debounceRendering)||r)(x)}function x(){var n,l,u,t,o,r,e,c,s;for(i.sort(f);n=i.shift();)n.__d&&(l=i.length,t=void 0,o=void 0,r=void 0,c=(e=(u=n).__v).__e,(s=u.__P)&&(t=[],o=[],(r=v({},e)).__v=e.__v+1,L(s,e,r,u.__n,void 0!==s.ownerSVGElement,null!=e.__h?[c]:null,t,null==c?g(e):c,e.__h,o),M(t,e,o),e.__e!=c&&m(e)),i.length>l&&i.sort(f));x.__r=0}function P(n,l,u,t,i,o,r,f,e,a,v){var p,y,_,b,m,w,x,P,S,H=0,I=t&&t.__k||s,T=I.length,j=T,z=l.length;for(u.__k=[],p=0;p<z;p++)null!=(b=u.__k[p]=null==(b=l[p])||\"boolean\"==typeof b||\"function\"==typeof b?null:\"string\"==typeof b||\"number\"==typeof b||\"bigint\"==typeof b?d(null,b,null,null,b):h(b)?d(k,{children:b},null,null,null):b.__b>0?d(b.type,b.props,b.key,b.ref?b.ref:null,b.__v):b)?(b.__=u,b.__b=u.__b+1,-1===(P=A(b,I,x=p+H,j))?_=c:(_=I[P]||c,I[P]=void 0,j--),L(n,b,_,i,o,r,f,e,a,v),m=b.__e,(y=b.ref)&&_.ref!=y&&(_.ref&&O(_.ref,null,b),v.push(y,b.__c||m,b)),null!=m&&(null==w&&(w=m),(S=_===c||null===_.__v)?-1==P&&H--:P!==x&&(P===x+1?H++:P>x?j>z-x?H+=P-x:H--:H=P<x&&P==x-1?P-x:0),x=p+H,\"function\"!=typeof b.type||P===x&&_.__k!==b.__k?\"function\"==typeof b.type||P===x&&!S?void 0!==b.__d?(e=b.__d,b.__d=void 0):e=m.nextSibling:e=$(n,m,e):e=C(b,e,n),\"function\"==typeof u.type&&(u.__d=e))):(_=I[p])&&null==_.key&&_.__e&&(_.__e==e&&(e=g(_)),q(_,_,!1));for(u.__e=w,p=T;p--;)null!=I[p]&&(\"function\"==typeof u.type&&null!=I[p].__e&&I[p].__e==u.__d&&(u.__d=I[p].__e.nextSibling),q(I[p],I[p]))}function C(n,l,u){for(var t,i=n.__k,o=0;i&&o<i.length;o++)(t=i[o])&&(t.__=n,l=\"function\"==typeof t.type?C(t,l,u):$(u,t.__e,l));return l}function S(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(h(n)?n.some(function(n){S(n,l)}):l.push(n)),l}function $(n,l,u){return null==u||u.parentNode!==n?n.insertBefore(l,null):l==u&&null!=l.parentNode||n.insertBefore(l,u),l.nextSibling}function A(n,l,u,t){var i=n.key,o=n.type,r=u-1,f=u+1,e=l[u];if(null===e||e&&i==e.key&&o===e.type)return u;if(t>(null!=e?1:0))for(;r>=0||f<l.length;){if(r>=0){if((e=l[r])&&i==e.key&&o===e.type)return r;r--}if(f<l.length){if((e=l[f])&&i==e.key&&o===e.type)return f;f++}}return-1}function H(n,l,u,t,i){var o;for(o in u)\"children\"===o||\"key\"===o||o in l||T(n,o,null,u[o],t);for(o in l)i&&\"function\"!=typeof l[o]||\"children\"===o||\"key\"===o||\"value\"===o||\"checked\"===o||u[o]===l[o]||T(n,o,l[o],u[o],t)}function I(n,l,u){\"-\"===l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||a.test(l)?u:u+\"px\"}function T(n,l,u,t,i){var o;n:if(\"style\"===l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof t&&(n.style.cssText=t=\"\"),t)for(l in t)u&&l in u||I(n.style,l,\"\");if(u)for(l in u)t&&u[l]===t[l]||I(n.style,l,u[l])}else if(\"o\"===l[0]&&\"n\"===l[1])o=l!==(l=l.replace(/Capture$/,\"\")),l=l.toLowerCase()in n?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?t||n.addEventListener(l,o?z:j,o):n.removeEventListener(l,o?z:j,o);else if(\"dangerouslySetInnerHTML\"!==l){if(i)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"width\"!==l&&\"height\"!==l&&\"href\"!==l&&\"list\"!==l&&\"form\"!==l&&\"tabIndex\"!==l&&\"download\"!==l&&\"rowSpan\"!==l&&\"colSpan\"!==l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||!1===u&&\"-\"!==l[4]?n.removeAttribute(l):n.setAttribute(l,u))}}function j(n){return this.l[n.type+!1](l.event?l.event(n):n)}function z(n){return this.l[n.type+!0](l.event?l.event(n):n)}function L(n,u,t,i,o,r,f,e,c,s){var a,p,y,d,_,g,m,w,x,C,S,$,A,H,I,T=u.type;if(void 0!==u.constructor)return null;null!=t.__h&&(c=t.__h,e=u.__e=t.__e,u.__h=null,r=[e]),(a=l.__b)&&a(u);n:if(\"function\"==typeof T)try{if(w=u.props,x=(a=T.contextType)&&i[a.__c],C=a?x?x.props.value:a.__:i,t.__c?m=(p=u.__c=t.__c).__=p.__E:(\"prototype\"in T&&T.prototype.render?u.__c=p=new T(w,C):(u.__c=p=new b(w,C),p.constructor=T,p.render=B),x&&x.sub(p),p.props=w,p.state||(p.state={}),p.context=C,p.__n=i,y=p.__d=!0,p.__h=[],p._sb=[]),null==p.__s&&(p.__s=p.state),null!=T.getDerivedStateFromProps&&(p.__s==p.state&&(p.__s=v({},p.__s)),v(p.__s,T.getDerivedStateFromProps(w,p.__s))),d=p.props,_=p.state,p.__v=u,y)null==T.getDerivedStateFromProps&&null!=p.componentWillMount&&p.componentWillMount(),null!=p.componentDidMount&&p.__h.push(p.componentDidMount);else{if(null==T.getDerivedStateFromProps&&w!==d&&null!=p.componentWillReceiveProps&&p.componentWillReceiveProps(w,C),!p.__e&&(null!=p.shouldComponentUpdate&&!1===p.shouldComponentUpdate(w,p.__s,C)||u.__v===t.__v)){for(u.__v!==t.__v&&(p.props=w,p.state=p.__s,p.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.forEach(function(n){n&&(n.__=u)}),S=0;S<p._sb.length;S++)p.__h.push(p._sb[S]);p._sb=[],p.__h.length&&f.push(p);break n}null!=p.componentWillUpdate&&p.componentWillUpdate(w,p.__s,C),null!=p.componentDidUpdate&&p.__h.push(function(){p.componentDidUpdate(d,_,g)})}if(p.context=C,p.props=w,p.__P=n,p.__e=!1,$=l.__r,A=0,\"prototype\"in T&&T.prototype.render){for(p.state=p.__s,p.__d=!1,$&&$(u),a=p.render(p.props,p.state,p.context),H=0;H<p._sb.length;H++)p.__h.push(p._sb[H]);p._sb=[]}else do{p.__d=!1,$&&$(u),a=p.render(p.props,p.state,p.context),p.state=p.__s}while(p.__d&&++A<25);p.state=p.__s,null!=p.getChildContext&&(i=v(v({},i),p.getChildContext())),y||null==p.getSnapshotBeforeUpdate||(g=p.getSnapshotBeforeUpdate(d,_)),P(n,h(I=null!=a&&a.type===k&&null==a.key?a.props.children:a)?I:[I],u,t,i,o,r,f,e,c,s),p.base=u.__e,u.__h=null,p.__h.length&&f.push(p),m&&(p.__E=p.__=null)}catch(n){u.__v=null,(c||null!=r)&&(u.__e=e,u.__h=!!c,r[r.indexOf(e)]=null),l.__e(n,u,t)}else null==r&&u.__v===t.__v?(u.__k=t.__k,u.__e=t.__e):u.__e=N(t.__e,u,t,i,o,r,f,c,s);(a=l.diffed)&&a(u)}function M(n,u,t){for(var i=0;i<t.length;i++)O(t[i],t[++i],t[++i]);l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function N(l,u,t,i,o,r,f,e,s){var a,v,y,d=t.props,_=u.props,k=u.type,b=0;if(\"svg\"===k&&(o=!0),null!=r)for(;b<r.length;b++)if((a=r[b])&&\"setAttribute\"in a==!!k&&(k?a.localName===k:3===a.nodeType)){l=a,r[b]=null;break}if(null==l){if(null===k)return document.createTextNode(_);l=o?document.createElementNS(\"http://www.w3.org/2000/svg\",k):document.createElement(k,_.is&&_),r=null,e=!1}if(null===k)d===_||e&&l.data===_||(l.data=_);else{if(r=r&&n.call(l.childNodes),v=(d=t.props||c).dangerouslySetInnerHTML,y=_.dangerouslySetInnerHTML,!e){if(null!=r)for(d={},b=0;b<l.attributes.length;b++)d[l.attributes[b].name]=l.attributes[b].value;(y||v)&&(y&&(v&&y.__html==v.__html||y.__html===l.innerHTML)||(l.innerHTML=y&&y.__html||\"\"))}if(H(l,_,d,o,e),y)u.__k=[];else if(P(l,h(b=u.props.children)?b:[b],u,t,i,o&&\"foreignObject\"!==k,r,f,r?r[0]:t.__k&&g(t,0),e,s),null!=r)for(b=r.length;b--;)null!=r[b]&&p(r[b]);e||(\"value\"in _&&void 0!==(b=_.value)&&(b!==l.value||\"progress\"===k&&!b||\"option\"===k&&b!==d.value)&&T(l,\"value\",b,d.value,!1),\"checked\"in _&&void 0!==(b=_.checked)&&b!==l.checked&&T(l,\"checked\",b,d.checked,!1))}return l}function O(n,u,t){try{\"function\"==typeof n?n(u):n.current=u}catch(n){l.__e(n,t)}}function q(n,u,t){var i,o;if(l.unmount&&l.unmount(n),(i=n.ref)&&(i.current&&i.current!==n.__e||O(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(n){l.__e(n,u)}i.base=i.__P=null,n.__c=void 0}if(i=n.__k)for(o=0;o<i.length;o++)i[o]&&q(i[o],u,t||\"function\"!=typeof n.type);t||null==n.__e||p(n.__e),n.__=n.__e=n.__d=void 0}function B(n,l,u){return this.constructor(n,u)}function D(u,t,i){var o,r,f,e;l.__&&l.__(u,t),r=(o=\"function\"==typeof i)?null:i&&i.__k||t.__k,f=[],e=[],L(t,u=(!o&&i||t).__k=y(k,null,[u]),r||c,c,void 0!==t.ownerSVGElement,!o&&i?[i]:r?null:t.firstChild?n.call(t.childNodes):null,f,!o&&i?i:r?r.__e:t.firstChild,o,e),M(f,u,e)}function E(n,l){D(n,l,E)}function F(l,u,t){var i,o,r,f,e=v({},l.props);for(r in l.type&&l.type.defaultProps&&(f=l.type.defaultProps),u)\"key\"==r?i=u[r]:\"ref\"==r?o=u[r]:e[r]=void 0===u[r]&&void 0!==f?f[r]:u[r];return arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),d(l.type,e,i||l.key,o||l.ref,null)}function G(n,l){var u={__c:l=\"__cC\"+e++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,t;return this.getChildContext||(u=[],(t={})[l]=this,this.getChildContext=function(){return t},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(function(n){n.__e=!0,w(n)})},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n)}}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=s.slice,l={__e:function(n,l,u,t){for(var i,o,r;l=l.__;)if((i=l.__c)&&!i.__)try{if((o=i.constructor)&&null!=o.getDerivedStateFromError&&(i.setState(o.getDerivedStateFromError(n)),r=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),r=i.__d),r)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&void 0===n.constructor},b.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=v({},this.state),\"function\"==typeof n&&(n=n(v({},u),this.props)),n&&v(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),w(this))},b.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),w(this))},b.prototype.render=k,i=[],r=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,f=function(n,l){return n.__v.__b-l.__v.__b},x.__r=0,e=0;export{b as Component,k as Fragment,F as cloneElement,G as createContext,y as createElement,_ as createRef,y as h,E as hydrate,t as isValidElement,l as options,D as render,S as toChildArray};\n//# sourceMappingURL=preact.module.js.map\n","export var HIGHLIGHT_PRE_TAG = '__aa-highlight__';\nexport var HIGHLIGHT_POST_TAG = '__/aa-highlight__';","import { HIGHLIGHT_PRE_TAG, HIGHLIGHT_POST_TAG } from '../constants';\n/**\n * Creates a data structure that allows to concatenate similar highlighting\n * parts in a single value.\n */\nfunction createAttributeSet() {\n  var initialValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var value = initialValue;\n  return {\n    get: function get() {\n      return value;\n    },\n    add: function add(part) {\n      var lastPart = value[value.length - 1];\n      if ((lastPart === null || lastPart === void 0 ? void 0 : lastPart.isHighlighted) === part.isHighlighted) {\n        value[value.length - 1] = {\n          value: lastPart.value + part.value,\n          isHighlighted: lastPart.isHighlighted\n        };\n      } else {\n        value.push(part);\n      }\n    }\n  };\n}\nexport function parseAttribute(_ref) {\n  var highlightedValue = _ref.highlightedValue;\n  var preTagParts = highlightedValue.split(HIGHLIGHT_PRE_TAG);\n  var firstValue = preTagParts.shift();\n  var parts = createAttributeSet(firstValue ? [{\n    value: firstValue,\n    isHighlighted: false\n  }] : []);\n  preTagParts.forEach(function (part) {\n    var postTagParts = part.split(HIGHLIGHT_POST_TAG);\n    parts.add({\n      value: postTagParts[0],\n      isHighlighted: true\n    });\n    if (postTagParts[1] !== '') {\n      parts.add({\n        value: postTagParts[1],\n        isHighlighted: false\n      });\n    }\n  });\n  return parts.get();\n}","function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport { getAttributeValueByPath, warn } from '@algolia/autocomplete-shared';\nimport { parseAttribute } from './parseAttribute';\nexport function parseAlgoliaHitHighlight(_ref) {\n  var hit = _ref.hit,\n    attribute = _ref.attribute;\n  var path = Array.isArray(attribute) ? attribute : [attribute];\n  var highlightedValue = getAttributeValueByPath(hit, ['_highlightResult'].concat(_toConsumableArray(path), ['value']));\n  if (typeof highlightedValue !== 'string') {\n    process.env.NODE_ENV !== 'production' ? warn(false, \"The attribute \\\"\".concat(path.join('.'), \"\\\" described by the path \").concat(JSON.stringify(path), \" does not exist on the hit. Did you set it in `attributesToHighlight`?\") + '\\nSee https://www.algolia.com/doc/api-reference/api-parameters/attributesToHighlight/') : void 0;\n    highlightedValue = getAttributeValueByPath(hit, path) || '';\n  }\n  return parseAttribute({\n    highlightedValue: highlightedValue\n  });\n}","var htmlEscapes = {\n  '&amp;': '&',\n  '&lt;': '<',\n  '&gt;': '>',\n  '&quot;': '\"',\n  '&#39;': \"'\"\n};\nvar hasLetterOrNumber = function () {\n  try {\n    return new RegExp('[\\\\p{L}\\\\p{N}_]', 'u');\n  } catch (_unused) {\n    return new RegExp(/\\w/i);\n  }\n}();\nvar regexEscapedHtml = /&(amp|quot|lt|gt|#39);/g;\nvar regexHasEscapedHtml = RegExp(regexEscapedHtml.source);\nfunction unescape(value) {\n  return value && regexHasEscapedHtml.test(value) ? value.replace(regexEscapedHtml, function (character) {\n    return htmlEscapes[character];\n  }) : value;\n}\nexport function isPartHighlighted(parts, i) {\n  var _parts$isHighlighted, _parts, _parts$isHighlighted2, _parts2;\n  var current = parts[i];\n  var isNextHighlighted = (_parts$isHighlighted = (_parts = parts[i + 1]) === null || _parts === void 0 ? void 0 : _parts.isHighlighted) !== null && _parts$isHighlighted !== void 0 ? _parts$isHighlighted : true;\n  var isPreviousHighlighted = (_parts$isHighlighted2 = (_parts2 = parts[i - 1]) === null || _parts2 === void 0 ? void 0 : _parts2.isHighlighted) !== null && _parts$isHighlighted2 !== void 0 ? _parts$isHighlighted2 : true;\n  if (!hasLetterOrNumber.test(unescape(current.value)) && isPreviousHighlighted === isNextHighlighted) {\n    return isPreviousHighlighted;\n  }\n  return current.isHighlighted;\n}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { isPartHighlighted } from './isPartHighlighted';\nexport function reverseHighlightedParts(parts) {\n  // We don't want to highlight the whole word when no parts match.\n  if (!parts.some(function (part) {\n    return part.isHighlighted;\n  })) {\n    return parts.map(function (part) {\n      return _objectSpread(_objectSpread({}, part), {}, {\n        isHighlighted: false\n      });\n    });\n  }\n  return parts.map(function (part, i) {\n    return _objectSpread(_objectSpread({}, part), {}, {\n      isHighlighted: !isPartHighlighted(parts, i)\n    });\n  });\n}","import { parseAlgoliaHitHighlight } from './parseAlgoliaHitHighlight';\nimport { reverseHighlightedParts } from './reverseHighlightedParts';\nexport function parseAlgoliaHitReverseHighlight(props) {\n  return reverseHighlightedParts(parseAlgoliaHitHighlight(props));\n}","function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport { getAttributeValueByPath, warn } from '@algolia/autocomplete-shared';\nimport { parseAttribute } from './parseAttribute';\nexport function parseAlgoliaHitSnippet(_ref) {\n  var hit = _ref.hit,\n    attribute = _ref.attribute;\n  var path = Array.isArray(attribute) ? attribute : [attribute];\n  var highlightedValue = getAttributeValueByPath(hit, ['_snippetResult'].concat(_toConsumableArray(path), ['value']));\n  if (typeof highlightedValue !== 'string') {\n    process.env.NODE_ENV !== 'production' ? warn(false, \"The attribute \\\"\".concat(path.join('.'), \"\\\" described by the path \").concat(JSON.stringify(path), \" does not exist on the hit. Did you set it in `attributesToSnippet`?\") + '\\nSee https://www.algolia.com/doc/api-reference/api-parameters/attributesToSnippet/') : void 0;\n    highlightedValue = getAttributeValueByPath(hit, path) || '';\n  }\n  return parseAttribute({\n    highlightedValue: highlightedValue\n  });\n}","import { parseAlgoliaHitSnippet } from './parseAlgoliaHitSnippet';\nimport { reverseHighlightedParts } from './reverseHighlightedParts';\nexport function parseAlgoliaHitReverseSnippet(props) {\n  return reverseHighlightedParts(parseAlgoliaHitSnippet(props));\n}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nexport function createRequester(fetcher, requesterId) {\n  function execute(fetcherParams) {\n    return fetcher({\n      searchClient: fetcherParams.searchClient,\n      queries: fetcherParams.requests.map(function (x) {\n        return x.query;\n      })\n    }).then(function (responses) {\n      return responses.map(function (response, index) {\n        var _fetcherParams$reques = fetcherParams.requests[index],\n          sourceId = _fetcherParams$reques.sourceId,\n          transformResponse = _fetcherParams$reques.transformResponse;\n        return {\n          items: response,\n          sourceId: sourceId,\n          transformResponse: transformResponse\n        };\n      });\n    });\n  }\n  return function createSpecifiedRequester(requesterParams) {\n    return function requester(requestParams) {\n      return _objectSpread(_objectSpread({\n        requesterId: requesterId,\n        execute: execute\n      }, requesterParams), requestParams);\n    };\n  };\n}","// typed as any, since it accepts the _real_ js clients, not the interface we otherwise expect\nexport function getAppIdAndApiKey(searchClient) {\n  var transporter = searchClient.transporter || {};\n  var headers = transporter.headers || transporter.baseHeaders || {};\n  var queryParameters = transporter.queryParameters || transporter.baseQueryParameters || {};\n  var APP_ID = 'x-algolia-application-id';\n  var API_KEY = 'x-algolia-api-key';\n  var appId = headers[APP_ID] || queryParameters[APP_ID];\n  var apiKey = headers[API_KEY] || queryParameters[API_KEY];\n  return {\n    appId: appId,\n    apiKey: apiKey\n  };\n}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _excluded = [\"params\"];\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport { userAgents as coreUserAgents, invariant } from '@algolia/autocomplete-shared';\nimport { HIGHLIGHT_PRE_TAG, HIGHLIGHT_POST_TAG } from '../constants';\nimport { getAppIdAndApiKey } from '../utils';\nexport function fetchAlgoliaResults(_ref) {\n  var searchClient = _ref.searchClient,\n    queries = _ref.queries,\n    _ref$userAgents = _ref.userAgents,\n    userAgents = _ref$userAgents === void 0 ? [] : _ref$userAgents;\n  if (typeof searchClient.addAlgoliaAgent === 'function') {\n    var algoliaAgents = [].concat(_toConsumableArray(coreUserAgents), _toConsumableArray(userAgents));\n    algoliaAgents.forEach(function (_ref2) {\n      var segment = _ref2.segment,\n        version = _ref2.version;\n      searchClient.addAlgoliaAgent(segment, version);\n    });\n  }\n  var _getAppIdAndApiKey = getAppIdAndApiKey(searchClient),\n    appId = _getAppIdAndApiKey.appId,\n    apiKey = _getAppIdAndApiKey.apiKey;\n  invariant(Boolean(appId), 'The Algolia `appId` was not accessible from the searchClient passed.');\n  invariant(Boolean(apiKey), 'The Algolia `apiKey` was not accessible from the searchClient passed.');\n  return searchClient.search(queries.map(function (searchParameters) {\n    var params = searchParameters.params,\n      headers = _objectWithoutProperties(searchParameters, _excluded);\n    return _objectSpread(_objectSpread({}, headers), {}, {\n      params: _objectSpread({\n        hitsPerPage: 5,\n        highlightPreTag: HIGHLIGHT_PRE_TAG,\n        highlightPostTag: HIGHLIGHT_POST_TAG\n      }, params)\n    });\n  })).then(function (response) {\n    return response.results.map(function (result, resultIndex) {\n      var _result$hits;\n      return _objectSpread(_objectSpread({}, result), {}, {\n        hits: (_result$hits = result.hits) === null || _result$hits === void 0 ? void 0 : _result$hits.map(function (hit) {\n          return _objectSpread(_objectSpread({}, hit), {}, {\n            // Bring support for the Insights plugin.\n            __autocomplete_indexName: result.index || queries[resultIndex].indexName,\n            __autocomplete_queryID: result.queryID,\n            __autocomplete_algoliaCredentials: {\n              appId: appId,\n              apiKey: apiKey\n            }\n          });\n        })\n      });\n    });\n  });\n}","import { parseAlgoliaHitHighlight } from '@algolia/autocomplete-preset-algolia';\nexport function createHighlightComponent(_ref) {\n  var createElement = _ref.createElement,\n    Fragment = _ref.Fragment;\n  function Highlight(_ref2) {\n    var hit = _ref2.hit,\n      attribute = _ref2.attribute,\n      _ref2$tagName = _ref2.tagName,\n      tagName = _ref2$tagName === void 0 ? 'mark' : _ref2$tagName;\n    return createElement(Fragment, {}, parseAlgoliaHitHighlight({\n      hit: hit,\n      attribute: attribute\n    }).map(function (x, index) {\n      return x.isHighlighted ? createElement(tagName, {\n        key: index\n      }, x.value) : x.value;\n    }));\n  }\n  Highlight.__autocomplete_componentName = 'Highlight';\n  return Highlight;\n}","import { parseAlgoliaHitReverseHighlight } from '@algolia/autocomplete-preset-algolia';\nexport function createReverseHighlightComponent(_ref) {\n  var createElement = _ref.createElement,\n    Fragment = _ref.Fragment;\n  function ReverseHighlight(_ref2) {\n    var hit = _ref2.hit,\n      attribute = _ref2.attribute,\n      _ref2$tagName = _ref2.tagName,\n      tagName = _ref2$tagName === void 0 ? 'mark' : _ref2$tagName;\n    return createElement(Fragment, {}, parseAlgoliaHitReverseHighlight({\n      hit: hit,\n      attribute: attribute\n    }).map(function (x, index) {\n      return x.isHighlighted ? createElement(tagName, {\n        key: index\n      }, x.value) : x.value;\n    }));\n  }\n  ReverseHighlight.__autocomplete_componentName = 'ReverseHighlight';\n  return ReverseHighlight;\n}","import { parseAlgoliaHitReverseSnippet } from '@algolia/autocomplete-preset-algolia';\nexport function createReverseSnippetComponent(_ref) {\n  var createElement = _ref.createElement,\n    Fragment = _ref.Fragment;\n  function ReverseSnippet(_ref2) {\n    var hit = _ref2.hit,\n      attribute = _ref2.attribute,\n      _ref2$tagName = _ref2.tagName,\n      tagName = _ref2$tagName === void 0 ? 'mark' : _ref2$tagName;\n    return createElement(Fragment, {}, parseAlgoliaHitReverseSnippet({\n      hit: hit,\n      attribute: attribute\n    }).map(function (x, index) {\n      return x.isHighlighted ? createElement(tagName, {\n        key: index\n      }, x.value) : x.value;\n    }));\n  }\n  ReverseSnippet.__autocomplete_componentName = 'ReverseSnippet';\n  return ReverseSnippet;\n}","import { parseAlgoliaHitSnippet } from '@algolia/autocomplete-preset-algolia';\nexport function createSnippetComponent(_ref) {\n  var createElement = _ref.createElement,\n    Fragment = _ref.Fragment;\n  function Snippet(_ref2) {\n    var hit = _ref2.hit,\n      attribute = _ref2.attribute,\n      _ref2$tagName = _ref2.tagName,\n      tagName = _ref2$tagName === void 0 ? 'mark' : _ref2$tagName;\n    return createElement(Fragment, {}, parseAlgoliaHitSnippet({\n      hit: hit,\n      attribute: attribute\n    }).map(function (x, index) {\n      return x.isHighlighted ? createElement(tagName, {\n        key: index\n      }, x.value) : x.value;\n    }));\n  }\n  Snippet.__autocomplete_componentName = 'Snippet';\n  return Snippet;\n}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _excluded = [\"classNames\", \"container\", \"getEnvironmentProps\", \"getFormProps\", \"getInputProps\", \"getItemProps\", \"getLabelProps\", \"getListProps\", \"getPanelProps\", \"getRootProps\", \"panelContainer\", \"panelPlacement\", \"render\", \"renderNoResults\", \"renderer\", \"detachedMediaQuery\", \"components\", \"translations\"];\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nimport { generateAutocompleteId, invariant, warn } from '@algolia/autocomplete-shared';\nimport { createElement as preactCreateElement, Fragment as PreactFragment, render } from 'preact';\nimport { createHighlightComponent, createReverseHighlightComponent, createReverseSnippetComponent, createSnippetComponent } from './components';\nimport { getHTMLElement, mergeClassNames } from './utils';\nvar defaultClassNames = {\n  clearButton: 'aa-ClearButton',\n  detachedCancelButton: 'aa-DetachedCancelButton',\n  detachedContainer: 'aa-DetachedContainer',\n  detachedFormContainer: 'aa-DetachedFormContainer',\n  detachedOverlay: 'aa-DetachedOverlay',\n  detachedSearchButton: 'aa-DetachedSearchButton',\n  detachedSearchButtonIcon: 'aa-DetachedSearchButtonIcon',\n  detachedSearchButtonPlaceholder: 'aa-DetachedSearchButtonPlaceholder',\n  detachedSearchButtonQuery: 'aa-DetachedSearchButtonQuery',\n  form: 'aa-Form',\n  input: 'aa-Input',\n  inputWrapper: 'aa-InputWrapper',\n  inputWrapperPrefix: 'aa-InputWrapperPrefix',\n  inputWrapperSuffix: 'aa-InputWrapperSuffix',\n  item: 'aa-Item',\n  label: 'aa-Label',\n  list: 'aa-List',\n  loadingIndicator: 'aa-LoadingIndicator',\n  panel: 'aa-Panel',\n  panelLayout: 'aa-PanelLayout aa-Panel--scrollable',\n  root: 'aa-Autocomplete',\n  source: 'aa-Source',\n  sourceFooter: 'aa-SourceFooter',\n  sourceHeader: 'aa-SourceHeader',\n  sourceNoResults: 'aa-SourceNoResults',\n  submitButton: 'aa-SubmitButton'\n};\nvar defaultRender = function defaultRender(_ref, root) {\n  var children = _ref.children,\n    render = _ref.render;\n  render(children, root);\n};\nvar defaultRenderer = {\n  createElement: preactCreateElement,\n  Fragment: PreactFragment,\n  render: render\n};\nexport function getDefaultOptions(options) {\n  var _core$id;\n  var classNames = options.classNames,\n    container = options.container,\n    getEnvironmentProps = options.getEnvironmentProps,\n    getFormProps = options.getFormProps,\n    getInputProps = options.getInputProps,\n    getItemProps = options.getItemProps,\n    getLabelProps = options.getLabelProps,\n    getListProps = options.getListProps,\n    getPanelProps = options.getPanelProps,\n    getRootProps = options.getRootProps,\n    panelContainer = options.panelContainer,\n    panelPlacement = options.panelPlacement,\n    render = options.render,\n    renderNoResults = options.renderNoResults,\n    renderer = options.renderer,\n    detachedMediaQuery = options.detachedMediaQuery,\n    components = options.components,\n    translations = options.translations,\n    core = _objectWithoutProperties(options, _excluded);\n\n  /* eslint-disable no-restricted-globals */\n  var environment = typeof window !== 'undefined' ? window : {};\n  /* eslint-enable no-restricted-globals */\n  var containerElement = getHTMLElement(environment, container);\n  invariant(containerElement.tagName !== 'INPUT', 'The `container` option does not support `input` elements. You need to change the container to a `div`.');\n  process.env.NODE_ENV !== 'production' ? warn(!(render && renderer && !(renderer !== null && renderer !== void 0 && renderer.render)), \"You provided the `render` option but did not provide a `renderer.render`. Since v1.6.0, you can provide a `render` function directly in `renderer`.\" + \"\\nTo get rid of this warning, do any of the following depending on your use case.\" + \"\\n- If you are using the `render` option only to override Autocomplete's default `render` function, pass the `render` function into `renderer` and remove the `render` option.\" + '\\n- If you are using the `render` option to customize the layout, pass your `render` function into `renderer` and use it from the provided parameters of the `render` option.' + '\\n- If you are using the `render` option to work with React 18, pass an empty `render` function into `renderer`.' + '\\nSee https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-render') : void 0;\n  process.env.NODE_ENV !== 'production' ? warn(!renderer || render || renderer.Fragment && renderer.createElement && renderer.render, \"You provided an incomplete `renderer` (missing: \".concat([!(renderer !== null && renderer !== void 0 && renderer.createElement) && '`renderer.createElement`', !(renderer !== null && renderer !== void 0 && renderer.Fragment) && '`renderer.Fragment`', !(renderer !== null && renderer !== void 0 && renderer.render) && '`renderer.render`'].filter(Boolean).join(', '), \"). This can cause rendering issues.\") + '\\nSee https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-renderer') : void 0;\n  var defaultedRenderer = _objectSpread(_objectSpread({}, defaultRenderer), renderer);\n  var defaultComponents = {\n    Highlight: createHighlightComponent(defaultedRenderer),\n    ReverseHighlight: createReverseHighlightComponent(defaultedRenderer),\n    ReverseSnippet: createReverseSnippetComponent(defaultedRenderer),\n    Snippet: createSnippetComponent(defaultedRenderer)\n  };\n  var defaultTranslations = {\n    clearButtonTitle: 'Clear',\n    detachedCancelButtonText: 'Cancel',\n    detachedSearchButtonTitle: 'Search',\n    submitButtonTitle: 'Submit'\n  };\n  return {\n    renderer: {\n      classNames: mergeClassNames(defaultClassNames, classNames !== null && classNames !== void 0 ? classNames : {}),\n      container: containerElement,\n      getEnvironmentProps: getEnvironmentProps !== null && getEnvironmentProps !== void 0 ? getEnvironmentProps : function (_ref2) {\n        var props = _ref2.props;\n        return props;\n      },\n      getFormProps: getFormProps !== null && getFormProps !== void 0 ? getFormProps : function (_ref3) {\n        var props = _ref3.props;\n        return props;\n      },\n      getInputProps: getInputProps !== null && getInputProps !== void 0 ? getInputProps : function (_ref4) {\n        var props = _ref4.props;\n        return props;\n      },\n      getItemProps: getItemProps !== null && getItemProps !== void 0 ? getItemProps : function (_ref5) {\n        var props = _ref5.props;\n        return props;\n      },\n      getLabelProps: getLabelProps !== null && getLabelProps !== void 0 ? getLabelProps : function (_ref6) {\n        var props = _ref6.props;\n        return props;\n      },\n      getListProps: getListProps !== null && getListProps !== void 0 ? getListProps : function (_ref7) {\n        var props = _ref7.props;\n        return props;\n      },\n      getPanelProps: getPanelProps !== null && getPanelProps !== void 0 ? getPanelProps : function (_ref8) {\n        var props = _ref8.props;\n        return props;\n      },\n      getRootProps: getRootProps !== null && getRootProps !== void 0 ? getRootProps : function (_ref9) {\n        var props = _ref9.props;\n        return props;\n      },\n      panelContainer: panelContainer ? getHTMLElement(environment, panelContainer) : environment.document.body,\n      panelPlacement: panelPlacement !== null && panelPlacement !== void 0 ? panelPlacement : 'input-wrapper-width',\n      render: render !== null && render !== void 0 ? render : defaultRender,\n      renderNoResults: renderNoResults,\n      renderer: defaultedRenderer,\n      detachedMediaQuery: detachedMediaQuery !== null && detachedMediaQuery !== void 0 ? detachedMediaQuery : getComputedStyle(environment.document.documentElement).getPropertyValue('--aa-detached-media-query'),\n      components: _objectSpread(_objectSpread({}, defaultComponents), components),\n      translations: _objectSpread(_objectSpread({}, defaultTranslations), translations)\n    },\n    core: _objectSpread(_objectSpread({}, core), {}, {\n      id: (_core$id = core.id) !== null && _core$id !== void 0 ? _core$id : generateAutocompleteId(),\n      environment: environment\n    })\n  };\n}","export function getPanelPlacementStyle(_ref) {\n  var panelPlacement = _ref.panelPlacement,\n    container = _ref.container,\n    form = _ref.form,\n    environment = _ref.environment;\n  var containerRect = container.getBoundingClientRect();\n  // Some browsers have specificities to retrieve the document scroll position.\n  // See https://stackoverflow.com/a/28633515/9940315\n  var scrollTop = environment.pageYOffset || environment.document.documentElement.scrollTop || environment.document.body.scrollTop || 0;\n  var top = scrollTop + containerRect.top + containerRect.height;\n  switch (panelPlacement) {\n    case 'start':\n      {\n        return {\n          top: top,\n          left: containerRect.left\n        };\n      }\n    case 'end':\n      {\n        return {\n          top: top,\n          right: environment.document.documentElement.clientWidth - (containerRect.left + containerRect.width)\n        };\n      }\n    case 'full-width':\n      {\n        return {\n          top: top,\n          left: 0,\n          right: 0,\n          width: 'unset',\n          maxWidth: 'unset'\n        };\n      }\n    case 'input-wrapper-width':\n      {\n        var formRect = form.getBoundingClientRect();\n        return {\n          top: top,\n          left: formRect.left,\n          right: environment.document.documentElement.clientWidth - (formRect.left + formRect.width),\n          width: 'unset',\n          maxWidth: 'unset'\n        };\n      }\n    default:\n      {\n        throw new Error(\"[Autocomplete] The `panelPlacement` value \".concat(JSON.stringify(panelPlacement), \" is not valid.\"));\n      }\n  }\n}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/** @jsxRuntime classic */\n/** @jsx renderer.createElement */\n\nimport { setProperties, setPropertiesWithoutEvents } from './utils';\nexport function renderSearchBox(_ref) {\n  var autocomplete = _ref.autocomplete,\n    autocompleteScopeApi = _ref.autocompleteScopeApi,\n    dom = _ref.dom,\n    propGetters = _ref.propGetters,\n    state = _ref.state;\n  setPropertiesWithoutEvents(dom.root, propGetters.getRootProps(_objectSpread({\n    state: state,\n    props: autocomplete.getRootProps({})\n  }, autocompleteScopeApi)));\n  setPropertiesWithoutEvents(dom.input, propGetters.getInputProps(_objectSpread({\n    state: state,\n    props: autocomplete.getInputProps({\n      inputElement: dom.input\n    }),\n    inputElement: dom.input\n  }, autocompleteScopeApi)));\n  setProperties(dom.label, {\n    hidden: state.status === 'stalled'\n  });\n  setProperties(dom.loadingIndicator, {\n    hidden: state.status !== 'stalled'\n  });\n  toggleAnimation(dom.loadingIndicator, state.status === 'stalled');\n  setProperties(dom.clearButton, {\n    hidden: !state.query\n  });\n  setProperties(dom.detachedSearchButtonQuery, {\n    textContent: state.query\n  });\n  setProperties(dom.detachedSearchButtonPlaceholder, {\n    hidden: Boolean(state.query)\n  });\n}\n\n// Safari will animate the SVG even when it's hidden. We need to pause the\n// animation manually. See:\n// - https://github.com/algolia/autocomplete/issues/1322\n// - https://bugs.webkit.org/show_bug.cgi?id=298217\nfunction toggleAnimation(element, isActive) {\n  var _element$firstChild;\n  var svgElement = ((_element$firstChild = element.firstChild) === null || _element$firstChild === void 0 ? void 0 : _element$firstChild.nodeName) === 'svg' ? element.firstChild : null;\n  if (!svgElement || !svgElement.pauseAnimations || !svgElement.unpauseAnimations) {\n    return;\n  }\n  if (isActive) {\n    svgElement.unpauseAnimations();\n  } else {\n    svgElement.pauseAnimations();\n  }\n}\nexport function renderPanel(render, _ref2) {\n  var autocomplete = _ref2.autocomplete,\n    autocompleteScopeApi = _ref2.autocompleteScopeApi,\n    classNames = _ref2.classNames,\n    html = _ref2.html,\n    dom = _ref2.dom,\n    panelContainer = _ref2.panelContainer,\n    propGetters = _ref2.propGetters,\n    state = _ref2.state,\n    components = _ref2.components,\n    renderer = _ref2.renderer;\n  if (!state.isOpen) {\n    if (panelContainer.contains(dom.panel)) {\n      panelContainer.removeChild(dom.panel);\n    }\n    return;\n  }\n\n  // We add the panel element to the DOM when it's not yet appended and that the\n  // items are fetched.\n  if (!panelContainer.contains(dom.panel) && state.status !== 'loading') {\n    panelContainer.appendChild(dom.panel);\n  }\n  dom.panel.classList.toggle('aa-Panel--stalled', state.status === 'stalled');\n  var sections = state.collections.filter(function (_ref3) {\n    var source = _ref3.source,\n      items = _ref3.items;\n    return source.templates.noResults || items.length > 0;\n  }).map(function (_ref4, sourceIndex) {\n    var source = _ref4.source,\n      items = _ref4.items;\n    return renderer.createElement(\"section\", {\n      key: sourceIndex,\n      className: classNames.source,\n      \"data-autocomplete-source-id\": source.sourceId\n    }, source.templates.header && renderer.createElement(\"div\", {\n      className: classNames.sourceHeader\n    }, source.templates.header({\n      components: components,\n      createElement: renderer.createElement,\n      Fragment: renderer.Fragment,\n      items: items,\n      source: source,\n      state: state,\n      html: html\n    })), source.templates.noResults && items.length === 0 ? renderer.createElement(\"div\", {\n      className: classNames.sourceNoResults\n    }, source.templates.noResults({\n      components: components,\n      createElement: renderer.createElement,\n      Fragment: renderer.Fragment,\n      source: source,\n      state: state,\n      html: html\n    })) : renderer.createElement(\"ul\", _extends({\n      className: classNames.list\n    }, propGetters.getListProps(_objectSpread({\n      state: state,\n      props: autocomplete.getListProps({\n        source: source\n      })\n    }, autocompleteScopeApi))), items.map(function (item) {\n      var itemProps = autocomplete.getItemProps({\n        item: item,\n        source: source\n      });\n      return renderer.createElement(\"li\", _extends({\n        key: itemProps.id,\n        className: classNames.item\n      }, propGetters.getItemProps(_objectSpread({\n        state: state,\n        props: itemProps\n      }, autocompleteScopeApi))), source.templates.item({\n        components: components,\n        createElement: renderer.createElement,\n        Fragment: renderer.Fragment,\n        item: item,\n        state: state,\n        html: html\n      }));\n    })), source.templates.footer && renderer.createElement(\"div\", {\n      className: classNames.sourceFooter\n    }, source.templates.footer({\n      components: components,\n      createElement: renderer.createElement,\n      Fragment: renderer.Fragment,\n      items: items,\n      source: source,\n      state: state,\n      html: html\n    })));\n  });\n  var children = renderer.createElement(renderer.Fragment, null, renderer.createElement(\"div\", {\n    className: classNames.panelLayout\n  }, sections), renderer.createElement(\"div\", {\n    className: \"aa-GradientBottom\"\n  }));\n  var elements = sections.reduce(function (acc, current) {\n    acc[current.props['data-autocomplete-source-id']] = current;\n    return acc;\n  }, {});\n  render(_objectSpread(_objectSpread({\n    children: children,\n    state: state,\n    sections: sections,\n    elements: elements\n  }, renderer), {}, {\n    components: components,\n    html: html\n  }, autocompleteScopeApi), dom.panel);\n}","import { version } from '@algolia/autocomplete-shared';\nexport var userAgents = [{\n  segment: 'autocomplete-js',\n  version: version\n}];","var _excluded = [\"components\"];\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { createAutocomplete } from '@algolia/autocomplete-core';\nimport { createRef, debounce, getItemsCount, warn } from '@algolia/autocomplete-shared';\nimport htm from 'htm';\nimport { createAutocompleteDom } from './createAutocompleteDom';\nimport { createEffectWrapper } from './createEffectWrapper';\nimport { createReactiveWrapper } from './createReactiveWrapper';\nimport { getDefaultOptions } from './getDefaultOptions';\nimport { getPanelPlacementStyle } from './getPanelPlacementStyle';\nimport { renderPanel, renderSearchBox } from './render';\nimport { userAgents } from './userAgents';\nimport { mergeDeep, pickBy, setProperties } from './utils';\nvar instancesCount = 0;\nexport function autocomplete(options) {\n  var _createEffectWrapper = createEffectWrapper(),\n    runEffect = _createEffectWrapper.runEffect,\n    cleanupEffects = _createEffectWrapper.cleanupEffects,\n    runEffects = _createEffectWrapper.runEffects;\n  var _createReactiveWrappe = createReactiveWrapper(),\n    reactive = _createReactiveWrappe.reactive,\n    runReactives = _createReactiveWrappe.runReactives;\n  var hasNoResultsSourceTemplateRef = createRef(false);\n  var optionsRef = createRef(options);\n  var onStateChangeRef = createRef(undefined);\n  var props = reactive(function () {\n    return getDefaultOptions(optionsRef.current);\n  });\n  var isDetached = reactive(function () {\n    return props.value.core.environment.matchMedia(props.value.renderer.detachedMediaQuery).matches;\n  });\n  var autocomplete = reactive(function () {\n    return createAutocomplete(_objectSpread(_objectSpread({}, props.value.core), {}, {\n      onStateChange: function onStateChange(params) {\n        var _onStateChangeRef$cur, _props$value$core$onS, _props$value$core;\n        hasNoResultsSourceTemplateRef.current = params.state.collections.some(function (collection) {\n          return collection.source.templates.noResults;\n        });\n        (_onStateChangeRef$cur = onStateChangeRef.current) === null || _onStateChangeRef$cur === void 0 ? void 0 : _onStateChangeRef$cur.call(onStateChangeRef, params);\n        (_props$value$core$onS = (_props$value$core = props.value.core).onStateChange) === null || _props$value$core$onS === void 0 ? void 0 : _props$value$core$onS.call(_props$value$core, params);\n      },\n      shouldPanelOpen: optionsRef.current.shouldPanelOpen || function (_ref) {\n        var state = _ref.state;\n        if (isDetached.value) {\n          return true;\n        }\n        var hasItems = getItemsCount(state) > 0;\n        if (!props.value.core.openOnFocus && !state.query) {\n          return hasItems;\n        }\n        var hasNoResultsTemplate = Boolean(hasNoResultsSourceTemplateRef.current || props.value.renderer.renderNoResults);\n        return !hasItems && hasNoResultsTemplate || hasItems;\n      },\n      __autocomplete_metadata: {\n        userAgents: userAgents,\n        options: options\n      }\n    }));\n  });\n  var lastStateRef = createRef(_objectSpread({\n    collections: [],\n    completion: null,\n    context: {},\n    isOpen: false,\n    query: '',\n    activeItemId: null,\n    status: 'idle'\n  }, props.value.core.initialState));\n  var propGetters = {\n    getEnvironmentProps: props.value.renderer.getEnvironmentProps,\n    getFormProps: props.value.renderer.getFormProps,\n    getInputProps: props.value.renderer.getInputProps,\n    getItemProps: props.value.renderer.getItemProps,\n    getLabelProps: props.value.renderer.getLabelProps,\n    getListProps: props.value.renderer.getListProps,\n    getPanelProps: props.value.renderer.getPanelProps,\n    getRootProps: props.value.renderer.getRootProps\n  };\n  var autocompleteScopeApi = {\n    setActiveItemId: autocomplete.value.setActiveItemId,\n    setQuery: autocomplete.value.setQuery,\n    setCollections: autocomplete.value.setCollections,\n    setIsOpen: autocomplete.value.setIsOpen,\n    setStatus: autocomplete.value.setStatus,\n    setContext: autocomplete.value.setContext,\n    refresh: autocomplete.value.refresh,\n    navigator: autocomplete.value.navigator\n  };\n  var html = reactive(function () {\n    return htm.bind(props.value.renderer.renderer.createElement);\n  });\n  var dom = reactive(function () {\n    return createAutocompleteDom({\n      autocomplete: autocomplete.value,\n      autocompleteScopeApi: autocompleteScopeApi,\n      classNames: props.value.renderer.classNames,\n      environment: props.value.core.environment,\n      isDetached: isDetached.value,\n      placeholder: props.value.core.placeholder,\n      propGetters: propGetters,\n      setIsModalOpen: setIsModalOpen,\n      state: lastStateRef.current,\n      translations: props.value.renderer.translations\n    });\n  });\n  function setPanelPosition() {\n    setProperties(dom.value.panel, {\n      style: isDetached.value ? {} : getPanelPlacementStyle({\n        panelPlacement: props.value.renderer.panelPlacement,\n        container: dom.value.root,\n        form: dom.value.form,\n        environment: props.value.core.environment\n      })\n    });\n  }\n  function scheduleRender(state) {\n    lastStateRef.current = state;\n    var renderProps = {\n      autocomplete: autocomplete.value,\n      autocompleteScopeApi: autocompleteScopeApi,\n      classNames: props.value.renderer.classNames,\n      components: props.value.renderer.components,\n      container: props.value.renderer.container,\n      html: html.value,\n      dom: dom.value,\n      panelContainer: isDetached.value ? dom.value.detachedContainer : props.value.renderer.panelContainer,\n      propGetters: propGetters,\n      state: lastStateRef.current,\n      renderer: props.value.renderer.renderer\n    };\n    var render = !getItemsCount(state) && !hasNoResultsSourceTemplateRef.current && props.value.renderer.renderNoResults || props.value.renderer.render;\n    renderSearchBox(renderProps);\n    renderPanel(render, renderProps);\n  }\n  runEffect(function () {\n    var environmentProps = autocomplete.value.getEnvironmentProps({\n      formElement: dom.value.form,\n      panelElement: dom.value.panel,\n      inputElement: dom.value.input\n    });\n    setProperties(props.value.core.environment, environmentProps);\n    return function () {\n      setProperties(props.value.core.environment, Object.keys(environmentProps).reduce(function (acc, key) {\n        return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, key, undefined));\n      }, {}));\n    };\n  });\n  runEffect(function () {\n    var panelContainerElement = isDetached.value ? props.value.core.environment.document.body : props.value.renderer.panelContainer;\n    var panelElement = isDetached.value ? dom.value.detachedOverlay : dom.value.panel;\n    if (isDetached.value && lastStateRef.current.isOpen) {\n      setIsModalOpen(true);\n    }\n    scheduleRender(lastStateRef.current);\n    return function () {\n      if (panelContainerElement.contains(panelElement)) {\n        panelContainerElement.removeChild(panelElement);\n        panelContainerElement.classList.remove('aa-Detached');\n      }\n    };\n  });\n  runEffect(function () {\n    var containerElement = props.value.renderer.container;\n    containerElement.appendChild(dom.value.root);\n    return function () {\n      containerElement.removeChild(dom.value.root);\n    };\n  });\n  runEffect(function () {\n    var debouncedRender = debounce(function (_ref2) {\n      var state = _ref2.state;\n      scheduleRender(state);\n    }, 0);\n    onStateChangeRef.current = function (_ref3) {\n      var state = _ref3.state,\n        prevState = _ref3.prevState;\n      if (isDetached.value && prevState.isOpen !== state.isOpen) {\n        setIsModalOpen(state.isOpen);\n      }\n\n      // The outer DOM might have changed since the last time the panel was\n      // positioned. The layout might have shifted vertically for instance.\n      // It's therefore safer to re-calculate the panel position before opening\n      // it again.\n      if (!isDetached.value && state.isOpen && !prevState.isOpen) {\n        setPanelPosition();\n      }\n\n      // We scroll to the top of the panel whenever the query changes (i.e. new\n      // results come in) so that users don't have to.\n      if (state.query !== prevState.query) {\n        var scrollablePanels = props.value.core.environment.document.querySelectorAll('.aa-Panel--scrollable');\n        scrollablePanels.forEach(function (scrollablePanel) {\n          if (scrollablePanel.scrollTop !== 0) {\n            scrollablePanel.scrollTop = 0;\n          }\n        });\n      }\n      debouncedRender({\n        state: state\n      });\n    };\n    return function () {\n      onStateChangeRef.current = undefined;\n    };\n  });\n  runEffect(function () {\n    var onResize = debounce(function () {\n      var previousIsDetached = isDetached.value;\n      isDetached.value = props.value.core.environment.matchMedia(props.value.renderer.detachedMediaQuery).matches;\n      if (previousIsDetached !== isDetached.value) {\n        update({});\n      } else {\n        requestAnimationFrame(setPanelPosition);\n      }\n    }, 20);\n    props.value.core.environment.addEventListener('resize', onResize);\n    return function () {\n      props.value.core.environment.removeEventListener('resize', onResize);\n    };\n  });\n  runEffect(function () {\n    if (!isDetached.value) {\n      return function () {};\n    }\n    function toggleModalClassname(isActive) {\n      dom.value.detachedContainer.classList.toggle('aa-DetachedContainer--modal', isActive);\n    }\n    function onChange(event) {\n      toggleModalClassname(event.matches);\n    }\n    var isModalDetachedMql = props.value.core.environment.matchMedia(getComputedStyle(props.value.core.environment.document.documentElement).getPropertyValue('--aa-detached-modal-media-query'));\n    toggleModalClassname(isModalDetachedMql.matches);\n\n    // Prior to Safari 14, `MediaQueryList` isn't based on `EventTarget`,\n    // so we must use `addListener` and `removeListener` to observe media query lists.\n    // See https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList/addListener\n    var hasModernEventListener = Boolean(isModalDetachedMql.addEventListener);\n    hasModernEventListener ? isModalDetachedMql.addEventListener('change', onChange) : isModalDetachedMql.addListener(onChange);\n    return function () {\n      hasModernEventListener ? isModalDetachedMql.removeEventListener('change', onChange) : isModalDetachedMql.removeListener(onChange);\n    };\n  });\n  runEffect(function () {\n    requestAnimationFrame(setPanelPosition);\n    return function () {};\n  });\n  function destroy() {\n    instancesCount--;\n    cleanupEffects();\n  }\n  function update() {\n    var updatedOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    cleanupEffects();\n    var _props$value$renderer = props.value.renderer,\n      components = _props$value$renderer.components,\n      rendererProps = _objectWithoutProperties(_props$value$renderer, _excluded);\n    optionsRef.current = mergeDeep(rendererProps, props.value.core, {\n      // We need to filter out default components so they can be replaced with\n      // a new `renderer`, without getting rid of user components.\n      // @MAJOR Deal with registering components with the same name as the\n      // default ones. If we disallow overriding default components, we'd just\n      // need to pass all `components` here.\n      components: pickBy(components, function (_ref4) {\n        var value = _ref4.value;\n        return !value.hasOwnProperty('__autocomplete_componentName');\n      }),\n      initialState: lastStateRef.current\n    }, updatedOptions);\n    runReactives();\n    runEffects();\n    autocomplete.value.refresh().then(function () {\n      scheduleRender(lastStateRef.current);\n    });\n  }\n  function setIsModalOpen(value) {\n    var prevValue = props.value.core.environment.document.body.contains(dom.value.detachedOverlay);\n    if (value === prevValue) {\n      return;\n    }\n    if (value) {\n      props.value.core.environment.document.body.appendChild(dom.value.detachedOverlay);\n      props.value.core.environment.document.body.classList.add('aa-Detached');\n      dom.value.input.focus();\n    } else {\n      props.value.core.environment.document.body.removeChild(dom.value.detachedOverlay);\n      props.value.core.environment.document.body.classList.remove('aa-Detached');\n    }\n  }\n  process.env.NODE_ENV !== 'production' ? warn(instancesCount === 0, \"Autocomplete doesn't support multiple instances running at the same time. Make sure to destroy the previous instance before creating a new one.\\n\\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-destroy\") : void 0;\n  instancesCount++;\n  return _objectSpread(_objectSpread({}, autocompleteScopeApi), {}, {\n    update: update,\n    destroy: destroy\n  });\n}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { createRequester, fetchAlgoliaResults } from '@algolia/autocomplete-preset-algolia';\nimport { userAgents } from '../userAgents';\nexport var createAlgoliaRequester = createRequester(function (params) {\n  return fetchAlgoliaResults(_objectSpread(_objectSpread({}, params), {}, {\n    userAgents: userAgents\n  }));\n}, 'algolia');","import { createAlgoliaRequester } from './createAlgoliaRequester';\n\n/**\n * Retrieves Algolia results from multiple indices.\n */\nexport var getAlgoliaResults = createAlgoliaRequester({\n  transformResponse: function transformResponse(response) {\n    return response.hits;\n  }\n});","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nexport function addHighlightedAttribute(_ref) {\n  var item = _ref.item,\n    query = _ref.query;\n  return _objectSpread(_objectSpread({}, item), {}, {\n    _highlightResult: {\n      label: {\n        value: query ? item.label.replace(new RegExp(query.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), 'gi'), function (match) {\n          return \"__aa-highlight__\".concat(match, \"__/aa-highlight__\");\n        }) : item.label\n      }\n    }\n  });\n}","export var LOCAL_STORAGE_KEY = 'AUTOCOMPLETE_RECENT_SEARCHES';\nexport var LOCAL_STORAGE_KEY_TEST = '__AUTOCOMPLETE_RECENT_SEARCHES_PLUGIN_TEST_KEY__';\nexport var defaultTranslations = {\n  removeSearchTitle: 'Remove this search',\n  fillQueryTitle: function fillQueryTitle(text) {\n    return \"Fill query with \\\"\".concat(text, \"\\\"\");\n  }\n};","import { LOCAL_STORAGE_KEY_TEST } from './constants';\nfunction isLocalStorageSupported() {\n  try {\n    localStorage.setItem(LOCAL_STORAGE_KEY_TEST, '');\n    localStorage.removeItem(LOCAL_STORAGE_KEY_TEST);\n    return true;\n  } catch (error) {\n    return false;\n  }\n}\nexport function getLocalStorage(_ref) {\n  var key = _ref.key;\n  if (!isLocalStorageSupported()) {\n    return {\n      setItem: function setItem() {},\n      getItem: function getItem() {\n        return [];\n      }\n    };\n  }\n  return {\n    setItem: function setItem(items) {\n      return window.localStorage.setItem(key, JSON.stringify(items));\n    },\n    getItem: function getItem() {\n      var items = window.localStorage.getItem(key);\n      return items ? JSON.parse(items) : [];\n    }\n  };\n}","function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport { getLocalStorage } from './getLocalStorage';\nexport function createLocalStorage(_ref) {\n  var key = _ref.key,\n    limit = _ref.limit,\n    search = _ref.search;\n  var storage = getLocalStorage({\n    key: key\n  });\n  return {\n    onAdd: function onAdd(item) {\n      storage.setItem([item].concat(_toConsumableArray(storage.getItem())));\n    },\n    onRemove: function onRemove(id) {\n      storage.setItem(storage.getItem().filter(function (x) {\n        return x.id !== id;\n      }));\n    },\n    getAll: function getAll() {\n      var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n      return search({\n        query: query,\n        items: storage.getItem(),\n        limit: limit\n      }).slice(0, limit);\n    }\n  };\n}","export function createStorageApi(storage) {\n  return {\n    addItem: function addItem(item) {\n      storage.onRemove(item.id);\n      storage.onAdd(item);\n    },\n    removeItem: function removeItem(id) {\n      storage.onRemove(id);\n    },\n    getAll: function getAll(query) {\n      return storage.getAll(query);\n    }\n  };\n}","/** @jsxRuntime classic */\n/** @jsx createElement */\n\nexport function getTemplates(_ref) {\n  var onRemove = _ref.onRemove,\n    onTapAhead = _ref.onTapAhead,\n    translations = _ref.translations;\n  return {\n    item: function item(_ref2) {\n      var item = _ref2.item,\n        createElement = _ref2.createElement,\n        components = _ref2.components;\n      return createElement(\"div\", {\n        className: \"aa-ItemWrapper\"\n      }, createElement(\"div\", {\n        className: \"aa-ItemContent\"\n      }, createElement(\"div\", {\n        className: \"aa-ItemIcon aa-ItemIcon--noBorder\"\n      }, createElement(\"svg\", {\n        viewBox: \"0 0 24 24\",\n        fill: \"currentColor\"\n      }, createElement(\"path\", {\n        d: \"M12.516 6.984v5.25l4.5 2.672-0.75 1.266-5.25-3.188v-6h1.5zM12 20.016q3.281 0 5.648-2.367t2.367-5.648-2.367-5.648-5.648-2.367-5.648 2.367-2.367 5.648 2.367 5.648 5.648 2.367zM12 2.016q4.125 0 7.055 2.93t2.93 7.055-2.93 7.055-7.055 2.93-7.055-2.93-2.93-7.055 2.93-7.055 7.055-2.93z\"\n      }))), createElement(\"div\", {\n        className: \"aa-ItemContentBody\"\n      }, createElement(\"div\", {\n        className: \"aa-ItemContentTitle\"\n      }, createElement(components.ReverseHighlight, {\n        hit: item,\n        attribute: \"label\"\n      }), item.category && createElement(\"span\", {\n        className: \"aa-ItemContentSubtitle aa-ItemContentSubtitle--inline\"\n      }, createElement(\"span\", {\n        className: \"aa-ItemContentSubtitleIcon\"\n      }), \" in\", ' ', createElement(\"span\", {\n        className: \"aa-ItemContentSubtitleCategory\"\n      }, item.category))))), createElement(\"div\", {\n        className: \"aa-ItemActions\"\n      }, createElement(\"button\", {\n        type: \"button\",\n        className: \"aa-ItemActionButton\",\n        title: translations.removeSearchTitle,\n        onClick: function onClick(event) {\n          event.preventDefault();\n          event.stopPropagation();\n          onRemove(item.id);\n        }\n      }, createElement(\"svg\", {\n        viewBox: \"0 0 24 24\",\n        fill: \"currentColor\"\n      }, createElement(\"path\", {\n        d: \"M18 7v13c0 0.276-0.111 0.525-0.293 0.707s-0.431 0.293-0.707 0.293h-10c-0.276 0-0.525-0.111-0.707-0.293s-0.293-0.431-0.293-0.707v-13zM17 5v-1c0-0.828-0.337-1.58-0.879-2.121s-1.293-0.879-2.121-0.879h-4c-0.828 0-1.58 0.337-2.121 0.879s-0.879 1.293-0.879 2.121v1h-4c-0.552 0-1 0.448-1 1s0.448 1 1 1h1v13c0 0.828 0.337 1.58 0.879 2.121s1.293 0.879 2.121 0.879h10c0.828 0 1.58-0.337 2.121-0.879s0.879-1.293 0.879-2.121v-13h1c0.552 0 1-0.448 1-1s-0.448-1-1-1zM9 5v-1c0-0.276 0.111-0.525 0.293-0.707s0.431-0.293 0.707-0.293h4c0.276 0 0.525 0.111 0.707 0.293s0.293 0.431 0.293 0.707v1zM9 11v6c0 0.552 0.448 1 1 1s1-0.448 1-1v-6c0-0.552-0.448-1-1-1s-1 0.448-1 1zM13 11v6c0 0.552 0.448 1 1 1s1-0.448 1-1v-6c0-0.552-0.448-1-1-1s-1 0.448-1 1z\"\n      }))), createElement(\"button\", {\n        type: \"button\",\n        className: \"aa-ItemActionButton\",\n        title: translations.fillQueryTitle(item.label),\n        onClick: function onClick(event) {\n          event.preventDefault();\n          event.stopPropagation();\n          onTapAhead(item);\n        }\n      }, createElement(\"svg\", {\n        viewBox: \"0 0 24 24\",\n        fill: \"currentColor\"\n      }, createElement(\"path\", {\n        d: \"M8 17v-7.586l8.293 8.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-8.293-8.293h7.586c0.552 0 1-0.448 1-1s-0.448-1-1-1h-10c-0.552 0-1 0.448-1 1v10c0 0.552 0.448 1 1 1s1-0.448 1-1z\"\n      })))));\n    }\n  };\n}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { createRef, warn } from '@algolia/autocomplete-shared';\nimport { defaultTranslations } from './constants';\nimport { createStorageApi } from './createStorageApi';\nimport { getTemplates } from './getTemplates';\nfunction getDefaultSubscribe(store) {\n  return function subscribe(_ref) {\n    var onSelect = _ref.onSelect;\n    onSelect(function (_ref2) {\n      var item = _ref2.item,\n        state = _ref2.state,\n        source = _ref2.source;\n      var inputValue = source.getItemInputValue({\n        item: item,\n        state: state\n      });\n      if (source.sourceId === 'querySuggestionsPlugin' && inputValue) {\n        var recentItem = {\n          id: inputValue,\n          label: inputValue,\n          category: item.__autocomplete_qsCategory\n        };\n        store.addItem(recentItem);\n      }\n    });\n  };\n}\nexport function createRecentSearchesPlugin(options) {\n  var _getOptions = getOptions(options),\n    storage = _getOptions.storage,\n    transformSource = _getOptions.transformSource,\n    subscribe = _getOptions.subscribe,\n    translations = _getOptions.translations;\n  var store = createStorageApi(storage);\n  var lastItemsRef = createRef([]);\n  return {\n    name: 'aa.recentSearchesPlugin',\n    subscribe: subscribe !== null && subscribe !== void 0 ? subscribe : getDefaultSubscribe(store),\n    onSubmit: function onSubmit(_ref3) {\n      var state = _ref3.state;\n      var query = state.query;\n      if (query) {\n        var recentItem = {\n          id: query,\n          label: query\n        };\n        store.addItem(recentItem);\n      }\n    },\n    getSources: function getSources(_ref4) {\n      var query = _ref4.query,\n        setQuery = _ref4.setQuery,\n        refresh = _ref4.refresh,\n        state = _ref4.state;\n      lastItemsRef.current = store.getAll(query);\n      function onRemove(id) {\n        store.removeItem(id);\n        refresh();\n      }\n      function onTapAhead(item) {\n        setQuery(item.label);\n        refresh();\n      }\n      return Promise.resolve(lastItemsRef.current).then(function (items) {\n        if (items.length === 0) {\n          return [];\n        }\n        return [transformSource({\n          source: {\n            sourceId: 'recentSearchesPlugin',\n            getItemInputValue: function getItemInputValue(_ref5) {\n              var item = _ref5.item;\n              return item.label;\n            },\n            getItems: function getItems() {\n              return items;\n            },\n            templates: getTemplates({\n              onRemove: onRemove,\n              onTapAhead: onTapAhead,\n              translations: translations\n            })\n          },\n          onRemove: onRemove,\n          onTapAhead: onTapAhead,\n          state: state\n        })];\n      });\n    },\n    data: _objectSpread(_objectSpread({}, store), {}, {\n      // @ts-ignore SearchOptions `facetFilters` is ReadonlyArray\n      getAlgoliaSearchParams: function getAlgoliaSearchParams() {\n        var _params$facetFilters, _params$hitsPerPage;\n        var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n        // If the items returned by `store.getAll` are contained in a Promise,\n        // we cannot provide the search params in time when this function is called\n        // because we need to resolve the promise before getting the value.\n        if (!Array.isArray(lastItemsRef.current)) {\n          process.env.NODE_ENV !== 'production' ? warn(false, 'The `getAlgoliaSearchParams` function is not supported with storages that return promises in `getAll`.') : void 0;\n          return params;\n        }\n        return _objectSpread(_objectSpread({}, params), {}, {\n          facetFilters: [].concat(_toConsumableArray((_params$facetFilters = params.facetFilters) !== null && _params$facetFilters !== void 0 ? _params$facetFilters : []), _toConsumableArray(lastItemsRef.current.map(function (item) {\n            return [\"objectID:-\".concat(item.label)];\n          }))),\n          hitsPerPage: Math.max(1, ((_params$hitsPerPage = params.hitsPerPage) !== null && _params$hitsPerPage !== void 0 ? _params$hitsPerPage : 10) - lastItemsRef.current.length)\n        });\n      }\n    }),\n    __autocomplete_pluginOptions: options\n  };\n}\nfunction getOptions(options) {\n  return _objectSpread(_objectSpread({\n    transformSource: function transformSource(_ref6) {\n      var source = _ref6.source;\n      return source;\n    }\n  }, options), {}, {\n    translations: _objectSpread(_objectSpread({}, defaultTranslations), options.translations)\n  });\n}","import { addHighlightedAttribute } from './addHighlightedAttribute';\nexport function search(_ref) {\n  var query = _ref.query,\n    items = _ref.items,\n    limit = _ref.limit;\n  if (!query) {\n    return items.slice(0, limit).map(function (item) {\n      return addHighlightedAttribute({\n        item: item,\n        query: query\n      });\n    });\n  }\n  return items.filter(function (item) {\n    return item.label.toLowerCase().includes(query.toLowerCase());\n  }).slice(0, limit).map(function (item) {\n    return addHighlightedAttribute({\n      item: item,\n      query: query\n    });\n  });\n}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { defaultTranslations, LOCAL_STORAGE_KEY } from './constants';\nimport { createLocalStorage } from './createLocalStorage';\nimport { createRecentSearchesPlugin } from './createRecentSearchesPlugin';\nimport { search as defaultSearch } from './search';\nexport function createLocalStorageRecentSearchesPlugin(options) {\n  var _getOptions = getOptions(options),\n    key = _getOptions.key,\n    limit = _getOptions.limit,\n    transformSource = _getOptions.transformSource,\n    search = _getOptions.search,\n    subscribe = _getOptions.subscribe,\n    translations = _getOptions.translations;\n  var storage = createLocalStorage({\n    key: [LOCAL_STORAGE_KEY, key].join(':'),\n    limit: limit,\n    search: search\n  });\n  var recentSearchesPlugin = createRecentSearchesPlugin({\n    transformSource: transformSource,\n    storage: storage,\n    subscribe: subscribe,\n    translations: translations\n  });\n  return _objectSpread(_objectSpread({}, recentSearchesPlugin), {}, {\n    name: 'aa.localStorageRecentSearchesPlugin',\n    __autocomplete_pluginOptions: options\n  });\n}\nfunction getOptions(options) {\n  return _objectSpread(_objectSpread({\n    limit: 5,\n    search: defaultSearch,\n    transformSource: function transformSource(_ref) {\n      var source = _ref.source;\n      return source;\n    }\n  }, options), {}, {\n    translations: _objectSpread(_objectSpread({}, defaultTranslations), options.translations)\n  });\n}","import { countries, excludeUndefined } from \"@ourworldindata/utils\"\nimport * as R from \"remeda\"\nimport { SynonymMap } from \"@ourworldindata/types\"\n\nexport const synonyms = [\n    // Organizations\n    [\"owid\", \"our world in data\"],\n    [\"imf\", \"international monetary fund\", \"fmi\" /* spanish, french */],\n    [\"united nations\", \"un\", \"onu\" /* spanish, french */],\n    [\"maddison project database\", \"bolt and van zanden\"],\n    [\"world inequality database\", \"wid\"],\n    [\n        \"organisation for economic co-operation and development\",\n        \"organization for economic co-operation and development\",\n        \"oecd\",\n        \"ocde\" /* spanish, french */,\n    ],\n    [\"economist intelligence unit\", \"eiu\"],\n    [\n        \"food and agriculture organization\",\n        \"food and agriculture organisation\",\n        \"fao\",\n        \"faostat\",\n    ],\n    [\"penn world table\", \"pwt\"],\n    [\n        \"world trade organization\",\n        \"wto\",\n        \"world trade organisation\",\n        \"omc\" /* spanish, french */,\n    ],\n    [\"international energy agency\", \"iea\", \"aie\" /* spanish, french */],\n    [\"luxembourg income study\", \"lis\"],\n    [\"institute for health metrics and evaluation\", \"ihme\"],\n    [\"integrated values surveys\", \"ivs\", \"wvs\", \"world values survey\"],\n    [\"international federation of robotics\", \"ifr\"],\n    [\"world bank poverty and inequality platform\", \"pip\"],\n    [\"world wildlife fund\", \"wwf\"],\n    [\"international renewable energy agency\", \"irena\"],\n    [\n        \"international telecommunication union\",\n        \"itu\",\n        \"uit\" /* spanish, french */,\n    ],\n    [\"food and drug administration\", \"fda\"],\n    [\n        \"international labour organization\",\n        \"international labor organization\",\n        \"international labour organisation\",\n        \"ilo\",\n        \"ilostat\",\n        \"oit\" /* spanish, french */,\n    ],\n    [\"population division\", \"un wpp\", \"unwpp\"],\n    [\"centers for disease control and prevention\", \"cdc\"],\n    [\n        \"international union for conservation of nature\",\n        \"iucn\",\n        \"uicn\" /* spanish, french */,\n    ],\n    [\"framework convention on climate change\", \"unfccc\"],\n    [\n        \"united nations development programme\",\n        \"united nations development program\",\n        \"un development programme\",\n        \"un development program\",\n        \"undp\",\n        \"pnud\" /* spanish, french */,\n    ],\n    [\"environment programme\", \"environment program\", \"unep\"],\n    [\n        \"uppsala conflict data program\",\n        \"uppsala conflict data programme\",\n        \"ucdp\",\n    ],\n    [\"energy information administration\", \"eia\"],\n    [\n        \"world tourism organization\",\n        \"world tourism organisation\",\n        \"unwto\",\n        \"un tourism\",\n        \"omt\" /* spanish, french */,\n    ],\n    [\n        \"high commissioner for refugees\",\n        \"unhcr\",\n        \"acnur\" /* spanish */,\n        \"hcr\" /* french */,\n    ],\n    [\"office for national statistics\", \"ons\"],\n    [\n        \"programme on hiv/aids\",\n        \"program on hiv/aids\",\n        \"unaids\",\n        \"onusida\" /* spanish, french */,\n    ],\n    [\n        \"world intellectual property organization\",\n        \"world intellectual property organisation\",\n        \"wipo\",\n        \"ompi\" /* spanish, french */,\n    ],\n    [\n        \"wellbeing research centre\",\n        \"wellbeing research center\",\n        \"whr\",\n        \"world happiness report\",\n    ],\n    [\"stockholm international peace research institute\", \"sipri\"],\n    [\"bureau of labor statistics\", \"bls\"],\n    [\"peace research institute oslo\", \"prio\"],\n    [\"varieties of democracy\", \"v-dem\", \"vdem\"],\n    [\"bertelsmann transformation index\", \"bti\"],\n    [\"federal bureau of investigation\", \"fbi\"],\n    [\n        \"world health organization\",\n        \"world health organisation\",\n        \"oms\" /* spanish, french */,\n    ],\n\n    // Units & measurements\n    [\"rate\", \"share\", \"percentage\", \"percent\"],\n    [\"per capita\", \"per person\"],\n    [\"price\", \"prices\", \"pricing\", \"cost\", \"costs\"],\n    [\"meter\", \"metre\", \"meters\", \"metres\"],\n    [\"kilometer\", \"kilometre\", \"kilometers\", \"kilometres\"],\n    [\"time use\", \"time spent\", \"time spend\"],\n\n    // Population and Demographic Change\n    [\"people\", \"population\"],\n    [\"pop\", \"population\"],\n    [\"overpopulation\", \"population growth\"],\n    [\"kids\", \"children\"],\n    [\"infant\", \"infants\", \"one year old\", \"1 year old\"],\n    [\"fertility\", \"children per woman\"],\n    [\"life expectancy\", \"longevity\"],\n    [\"dying\", \"death\", \"deaths\", \"mortality\"],\n    [\"maternal mortality\", \"maternal death\", \"maternal deaths\"],\n    // Demography course vocabulary: abbreviations and the textbook names of\n    // rates we chart under other titles\n    [\"birth rate\", \"crude birth rate\", \"cbr\"],\n    [\"infant mortality\", \"imr\"],\n    [\"fertility rate\", \"total fertility rate\", \"tfr\"],\n    [\n        \"natural population growth\",\n        \"natural increase\",\n        \"rate of natural increase\",\n        \"natural increase rate\",\n        \"natural rate of increase\",\n        \"rni\",\n        \"nir\",\n    ],\n    [\"demographic transition\", \"demographic transition model\", \"dtm\"],\n    [\"population pyramid\", \"population by age\"],\n    [\n        \"migration\",\n        \"immigration\",\n        \"emigration\",\n        \"migrant\",\n        \"migrants\",\n        \"immigrant\",\n        \"immigrants\",\n        \"emigrant\",\n        \"emigrants\",\n    ],\n    [\"urbanization\", \"urbanisation\", \"urban\"],\n\n    // Health\n    [\"disease\", \"diseases\", \"illness\"],\n    [\"healthcare\", \"health care\", \"medical care\"],\n    [\"maternal health\", \"reproductive health\"],\n    [\"epidemic\", \"outbreak\", \"pandemic\"],\n    [\"incidence\", \"daily new confirmed cases\"],\n    [\n        \"hospital admission\",\n        \"hospital admissions\",\n        \"hospitalization\",\n        \"hospitalizations\",\n        \"hospitalisation\",\n        \"hospitalisations\",\n        \"in hospital\",\n    ],\n    [\n        \"non-communicable disease\",\n        \"ncd\",\n        \"chronic disease\",\n        \"non-communicable diseases\",\n        \"chronic diseases\",\n    ],\n    [\n        \"communicable disease\",\n        \"infectious disease\",\n        \"communicable diseases\",\n        \"infectious diseases\",\n    ],\n    [\"antibiotic resistance\", \"antimicrobial resistance\"],\n    [\"covid\", \"covid-19\", \"coronavirus\", \"corona\"],\n    [\"flu\", \"influenza\"],\n    [\n        \"hiv\",\n        \"aids\",\n        \"hiv/aids\",\n        \"vih\" /* spanish, french: hiv */,\n        \"sida\" /* spanish, french: aids */,\n        \"vih/sida\" /* spanish, french: hiv/aids */,\n    ],\n    [\"tb\", \"tuberculosis\"],\n    [\"ntd\", \"neglected tropical diseases\", \"neglected tropical disease\"],\n    [\"hpv\", \"human papillomavirus\"],\n    [\"stroke\", \"cerebrovascular\"],\n    [\"heart\", \"cardiovascular\", \"cardiac\"],\n    [\n        \"immunization\",\n        \"immunizations\",\n        \"immunisation\",\n        \"immunisations\",\n        \"vaccine\",\n        \"vaccines\",\n        \"vaccination\",\n        \"vaccinations\",\n        \"vacuna\" /* spanish */,\n    ],\n    [\n        \"vaccine hesitancy\",\n        \"vaccine attitude\",\n        \"vaccine attitudes\",\n        \"vaccine willingness\",\n    ],\n    [\n        \"malnutrition\",\n        \"undernutrition\",\n        \"stunting\",\n        \"wasting\",\n        \"undernourished\",\n        \"malnourished\",\n        \"hunger\",\n        \"undernourishment\",\n        \"malnourishment\",\n        \"food insecurity\",\n    ],\n    [\"micronutrient deficiency\", \"vitamin deficiency\", \"mineral deficiency\"],\n    [\"obesity\", \"overweight\", \"body mass index\", \"bmi\"],\n    [\"smoking\", \"tobacco\", \"cigarettes\"],\n    [\"alcohol\", \"drinking\"],\n    [\"drug\", \"drugs\", \"substance use\"],\n    [\"contraception\", \"birth control\", \"family planning\"],\n    [\"fgm\", \"female genital mutilation\"],\n    [\"depression\", \"depressive\", \"mental health\"],\n    [\n        \"happiness\",\n        \"happy\",\n        \"happyness\" /* common typo */,\n        \"satisfaction\",\n        \"life satisfaction\",\n    ],\n\n    // Energy and Environment\n    [\n        \"co2\",\n        \"CO₂\",\n        \"c02\" /* common typo, zero instead of \"o\" */,\n        \"carbon dioxide\",\n    ],\n    [\n        \"carbon footprint\",\n        \"emissions footprint\",\n        \"carbon emissions\",\n        \"co2 emissions\",\n        \"CO₂ emissions\",\n        \"c02 emissions\",\n        \"carbon dioxide emissions\",\n    ],\n    [\"ch4\", \"CH₄\", \"methane\"],\n    [\"n2o\", \"N₂O\", \"nitrous oxide\"],\n    [\"NOx\", \"NOₓ\", \"nitrogen dioxide\"],\n    [\"ghg\", \"greenhouse gas\"],\n    [\"climate change\", \"global warming\"],\n    [\"smog\", \"air pollution\", \"air quality\"],\n    [\"deforestation\", \"forest loss\", \"tree loss\"],\n    [\"land use\", \"land-use\", \"land cover\"],\n    [\"biodiversity\", \"species\", \"ecosystem\", \"extinction\", \"habitat\"],\n    [\"ocean\", \"marine\", \"sea\"],\n    [\"soil\", \"land\"],\n    [\"soil erosion\", \"land degradation\"],\n    [\"sea level rise\", \"sea levels\", \"ocean levels\"],\n    [\"plastic pollution\", \"plastic waste\"],\n    [\"recycling\", \"reuse\"],\n    [\"electric power\", \"power\", \"electricity\"],\n    [\"energy consumption\", \"energy use\", \"energy demand\"],\n    [\n        \"energy access\",\n        \"electricity access\",\n        \"access to electricity\",\n        \"access to energy\",\n    ],\n    [\n        \"renewable energy\",\n        \"clean energy\",\n        \"green energy\",\n        \"renewables\",\n        \"alternative energy\",\n    ],\n    [\"atomic\", \"nuclear\"],\n    [\"nuclear power\", \"nuclear energy\"],\n    [\"solar\", \"photovoltaic\", \"photovoltaics\", \"pv\"],\n    [\"solar power\", \"solar energy\"],\n    [\"wind power\", \"wind energy\"],\n    [\"hydropower\", \"hydro power\", \"hydroelectric power\"],\n    [\"geothermal energy\", \"geothermal power\"],\n    [\"production\", \"generation\"],\n\n    // Food and Agriculture\n    [\"pork\", \"pigmeat\"],\n    [\"cheese\", \"dairy\"],\n    [\"farm\", \"farming\", \"agriculture\", \"food production\"],\n    [\n        \"clean water\",\n        \"safe water\",\n        \"drinking water\",\n        \"water pollution\",\n        \"water quality\",\n    ],\n    [\"water demand\", \"water withdrawal\", \"water scarcity\", \"water stress\"],\n    [\"sanitation\", \"toilet\", \"toilets\", \"latrine\", \"latrines\"],\n\n    // Poverty and Economic Development\n    [\n        \"gdp\",\n        \"gpd\" /* common typo; too short for Algolia's typo tolerance */,\n        \"gross domestic product\",\n        \"economic output\",\n        \"pib\" /* spanish, french */,\n        \"pil\" /* italian */,\n        \"bip\" /* polish */,\n        \"bnp\" /* swedish, danish, norwegian */,\n    ],\n    [\"gdp per capita\", \"income per person\"],\n    [\"salary\", \"wage\", \"wages\", \"income\"],\n    [\"pay gap\", \"wage gap\", \"gender pay gap\", \"gender wage gap\"],\n    [\"poverty\", \"poor\"],\n    [\"inequality\", \"gini\"],\n    [\"inflation\", \"price change\", \"price changes\", \"change in price\"],\n    [\"employment\", \"jobs\", \"workforce\", \"labor\", \"labour\"],\n    [\n        \"informality\",\n        \"informal sector\",\n        \"informal employment\",\n        \"informal work\",\n        \"informal economy\",\n    ],\n    [\"productivity\", \"labor productivity\", \"labour productivity\"],\n    [\"debt\", \"public debt\", \"government debt\"],\n    [\"industrialization\", \"industrialisation\", \"manufacturing\"],\n    [\"remittances\", \"money transfers\", \"money sent\", \"money received\"],\n    [\"foreign aid\", \"development assistance\", \"oda\"],\n    [\"fdi\", \"foreign direct investment\"],\n    [\"funding\", \"funded\"],\n    [\"r&d\", \"r & d\", \"research\"],\n    [\n        \"hdi\",\n        \"hdi score\",\n        \"human development index\",\n        \"idh\" /* spanish, french */,\n    ],\n    [\n        \"sdg\",\n        \"sdgs\",\n        \"sustainable development goal\",\n        \"sustainable development goals\",\n        \"sdg tracker\",\n    ],\n\n    // Education and Knowledge\n    [\"education\", \"schooling\", \"school\"],\n    [\"tertiary\", \"university\", \"college\", \"post-secondary\"],\n    [\"literacy\", \"illiteracy\", \"literate\", \"illiterate\", \"read and write\"],\n    [\"enrollment\", \"enrolment\", \"enrolled\"],\n\n    // Innovation and Technological Change\n    [\n        \"artificial intelligence\",\n        \"ai\",\n        \"machine learning\",\n        \"neural network\",\n        \"deep learning\",\n        \"chatgpt\",\n        \"chat gpt\",\n        \"gpt\",\n        \"claude\",\n        \"gemini\",\n        \"llm\",\n        \"large language model\",\n    ],\n    [\"internet\", \"broadband\", \"online\"],\n    [\n        \"mobile phone\",\n        \"mobile phones\",\n        \"cell phone\",\n        \"cell phones\",\n        \"smartphone\",\n        \"smartphones\",\n    ],\n    [\n        \"plane\",\n        \"planes\",\n        \"airplane\",\n        \"airplanes\",\n        \"aviation\",\n        \"airline\",\n        \"airlines\",\n        \"flying\",\n        \"air travel\",\n        \"flight\",\n        \"flights\",\n    ],\n    [\n        \"EV\",\n        \"EVs\",\n        \"electric vehicle\",\n        \"electric vehicles\",\n        \"electric car\",\n        \"electric cars\",\n        \"hybrid car\",\n        \"hybrid cars\",\n    ],\n    [\"trains\", \"railway\"],\n    [\"public transport\", \"public transportation\", \"mass transit\"],\n    [\n        \"self-driving\",\n        \"driverless\",\n        \"autonomous car\",\n        \"autonomous vehicle\",\n        \"self driving\",\n        \"robotaxis\",\n    ],\n\n    // Human Rights and Democracy\n    [\n        \"homosexual\",\n        \"homosexuality\",\n        \"gay\",\n        \"lesbian\",\n        \"LGBT\",\n        \"LGBTQ\",\n        \"LGBTQIA\",\n    ],\n    [\n        \"sexism\",\n        \"gender discrimination\",\n        \"gender gap\",\n        \"gender inequality\",\n        \"gender inequalities\",\n        \"inequality by gender\",\n    ],\n    [\"gender inequality index\", \"gii\"],\n    [\"sex\", \"gender\"],\n    [\"jail\", \"prison\"],\n\n    // Violence and War\n    [\"homicide\", \"murder\", \"murders\"],\n    [\"gun\", \"guns\", \"firearm\", \"firearms\"],\n    [\"conflict\", \"war\"],\n    [\"defense\", \"defence\", \"military\"],\n\n    // Geography\n    [\"gaza\", \"palestine\", \"west bank\"],\n    [\"turkey\", \"türkiye\", \"turkiye\"],\n    [\"ivory coast\", \"côte d'ivoire\", \"cote d'ivoire\"],\n    [\"burma\", \"myanmar\"],\n    [\"holland\", \"netherlands\"],\n    [\"timor-leste\", \"timor leste\", \"east timor\"],\n    [\"cabo verde\", \"cape verde\"],\n]\n\n/**\n * Builds a synonym map where each term points to all its possible synonyms across groups.\n * Handles both bidirectional synonyms (from synonym groups) and unidirectional country alternatives.\n *\n * Examples:\n * - Bidirectional: \"ai\" → [\"artificial intelligence\", \"machine learning\", \"neural network\"]\n * - Bidirectional: \"artificial intelligence\" → [\"ai\", \"machine learning\", \"neural network\"]\n * - Unidirectional: \"us\" → [\"united states\"] (but \"united states\" does not map back to \"us\")\n * - Unidirectional: \"uk\" → [\"united kingdom\"]\n *\n * @returns Map where keys are lowercase terms and values are arrays of their synonyms\n */\nexport function buildSynonymMap(): SynonymMap {\n    const synonymMap: SynonymMap = new Map()\n\n    // Process bidirectional synonym groups\n    for (const group of synonyms) {\n        for (const term of group) {\n            const [, otherTerms] = R.partition(group, (t) => t === term)\n            const termLower = term.toLowerCase()\n            const otherTermsLower = otherTerms.map((t) => t.toLowerCase())\n\n            if (synonymMap.has(termLower)) {\n                // Merge with existing synonyms, avoiding overriding previous\n                // synonyms (e.g. \"economic growth\")\n                const existing = synonymMap.get(termLower)!\n                const combined = [...existing, ...otherTermsLower]\n                synonymMap.set(termLower, [...new Set(combined)])\n            } else {\n                synonymMap.set(termLower, otherTermsLower)\n            }\n        }\n    }\n\n    // Process unidirectional country alternatives (us -> united states, but not united states -> us)\n    for (const country of countries) {\n        const alternatives = excludeUndefined([\n            country.shortName,\n            ...(country.variantNames ?? []),\n        ])\n\n        for (const alternative of alternatives) {\n            const alternativeLower = alternative.toLowerCase()\n            const countryNameLower = country.name.toLowerCase()\n            // this will technically overwrite any existing synonym mapping with\n            // country alternatives. In practice the risk of collision is low\n            // given that we don't use countries' short codes (only short names\n            // and variants, which amounts to less 10 countries). So code\n            // simplicity is favoured here.\n            synonymMap.set(alternativeLower, [countryNameLower])\n        }\n    }\n\n    return synonymMap\n}\n","import { ReactNode } from \"react\"\nimport { faClose } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport cx from \"clsx\"\n\nexport function SearchFilterPill({\n    name,\n    selected = false,\n    interactive = false,\n    icon,\n    className,\n}: {\n    name: string\n    selected?: boolean\n    interactive?: boolean\n    icon: ReactNode\n    className?: string\n}) {\n    const nameLabel = name.replaceAll(\" and \", \" & \")\n    return (\n        <span\n            className={cx(\n                \"search-filter-pill\",\n                {\n                    \"search-filter-pill--selected\": selected,\n                    \"search-filter-pill--interactive\": interactive,\n                },\n                className\n            )}\n        >\n            {icon}\n            <span className=\"name\">{nameLabel}</span>\n            {selected && (\n                <span className=\"close\">\n                    <FontAwesomeIcon icon={faClose} />\n                </span>\n            )}\n        </span>\n    )\n}\n","import * as _ from \"lodash-es\"\n\nexport interface DebouncedPromise<T> {\n    schedule(value: T): Promise<T>\n    cancel(): void\n}\n\n/**\n * Unlike the naive debounce from Algolia's documentation, this settles a\n * superseded promise with `canceledValue`. Algolia tracks every sources promise\n * until it settles, so merely clearing its timeout would retain pending request\n * chains while the autocomplete remains mounted.\n */\nexport function createDebouncedPromise<T>(\n    delay: number,\n    canceledValue: T\n): DebouncedPromise<T> {\n    let settlePending: ((value: T) => void) | undefined\n    const resolveLatest = _.debounce(\n        (value: T, resolve: (value: T) => void) => {\n            settlePending = undefined\n            resolve(value)\n        },\n        delay\n    )\n\n    function schedule(value: T): Promise<T> {\n        settlePending?.(canceledValue)\n\n        return new Promise((resolve) => {\n            settlePending = resolve\n            resolveLatest(value, resolve)\n        })\n    }\n\n    function cancel(): void {\n        resolveLatest.cancel()\n        settlePending?.(canceledValue)\n        settlePending = undefined\n    }\n\n    return { schedule, cancel }\n}\n","import { useRef, useState, useEffect, useMemo } from \"react\"\nimport * as React from \"react\"\nimport { createRoot, Root } from \"react-dom/client\"\nimport urljoin from \"url-join\"\nimport { useTopicTagGraph, useTagGraphTopics } from \"./searchHooks.js\"\nimport {\n    AutocompleteApi,\n    AutocompleteSource,\n    autocomplete,\n    getAlgoliaResults,\n} from \"@algolia/autocomplete-js\"\nimport { LiteClient } from \"algoliasearch/lite\"\nimport { createLocalStorageRecentSearchesPlugin } from \"@algolia/autocomplete-plugin-recent-searches\"\nimport {\n    ChartRecordType,\n    Filter,\n    FilterType,\n    SynonymMap,\n    SearchResultType,\n    SearchUrlParam,\n} from \"@ourworldindata/types\"\nimport { getCanonicalUrl } from \"@ourworldindata/components\"\nimport {\n    ALGOLIA_ID,\n    ALGOLIA_SEARCH_KEY,\n    BAKED_BASE_URL,\n    BAKED_GRAPHER_URL,\n} from \"../../settings/clientSettings.mjs\"\nimport { DEFAULT_SEARCH_PLACEHOLDER } from \"./searchClient.js\"\nimport { getAutocompleteSearchClient } from \"./searchClients.js\"\nimport {\n    PAGES_INDEX,\n    CHARTS_INDEX,\n    suggestFiltersFromQuerySuffix,\n    getFilterIcon,\n    getItemUrlForFilter,\n    getPageTypeNameAndIcon,\n    SEARCH_BASE_PATH,\n} from \"./searchUtils.js\"\nimport {\n    getUserCountryInformation,\n    listedRegionsNames,\n    OwidGdocType,\n    queryParamsToStr,\n} from \"@ourworldindata/utils\"\nimport { SiteAnalytics } from \"../SiteAnalytics.js\"\nimport { tinykeys } from \"tinykeys\"\nimport * as Sentry from \"@sentry/react\"\nimport { match } from \"ts-pattern\"\nimport { EXPLORERS_ROUTE_FOLDER } from \"@ourworldindata/explorer\"\nimport { buildSynonymMap } from \"./synonymUtils.js\"\nimport { SearchFilterPill } from \"./SearchFilterPill.js\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faLineChart, faSearch } from \"@fortawesome/free-solid-svg-icons\"\nimport { createDebouncedPromise } from \"./debouncePromise.js\"\n\nexport const AUTOCOMPLETE_CONTAINER_ID = \"#autocomplete\"\n// A magic number slightly higher than our $md breakpoint to ensure there's\n// enough room for everything in the site nav between 960-1045px. Related to\n// vars in Autocomplete.scss.\nexport const DETACHED_MODE_MAX_WIDTH = 1045\nconst DETACHED_MEDIA_QUERY = `(width <= ${DETACHED_MODE_MAX_WIDTH}px)`\nconst AUTOCOMPLETE_DEBOUNCE_MS = 200\n// Account for the intentional debounce before using Algolia's default 300 ms\n// threshold to show the stalled loading state as recommended in the docs.\n// https://www.algolia.com/doc/ui-libraries/autocomplete/guides/debouncing-sources\nconst STALL_THRESHOLD_MS = AUTOCOMPLETE_DEBOUNCE_MS + 300\n\nconst siteAnalytics = new SiteAnalytics()\ntype BaseItem = Record<string, unknown>\n\n// Per-instance factory: the plugin holds internal subscription state, so\n// sharing one plugin object across multiple Autocomplete instances causes\n// state from one instance (e.g. open panel) to leak into another.\nconst buildRecentSearchesPlugin = () =>\n    createLocalStorageRecentSearchesPlugin({\n        key: \"RECENT_SEARCH\",\n        limit: 3,\n        transformSource({ source }) {\n            return {\n                ...source,\n                onSelect({ item, navigator }) {\n                    navigator.navigate({\n                        itemUrl: `${SEARCH_BASE_PATH}${queryParamsToStr({ q: item.id, resultType: SearchResultType.ALL })}`,\n                    } as any)\n                },\n            }\n        },\n    })\n\nlet liteSearchClient: LiteClient | null\nif (ALGOLIA_ID && ALGOLIA_SEARCH_KEY) {\n    liteSearchClient = getAutocompleteSearchClient()\n} else {\n    liteSearchClient = null\n    console.warn(\"Algolia credentials are not set\")\n}\n\nconst onSelect: AutocompleteSource<BaseItem>[\"onSelect\"] = ({\n    navigator,\n    item,\n    state,\n}) => {\n    const itemUrl = item.slug as string\n    navigator.navigate({ itemUrl, item, state })\n}\n\nconst getItemUrl: AutocompleteSource<BaseItem>[\"getItemUrl\"] = ({ item }) =>\n    item.slug as string\n\n// The slugs we index to Algolia don't include grapher/, explorers/, or data-insights/ subdirectories\n// Prepend them with this function when we need them\nconst prependSubdirectoryToAlgoliaItemUrl = (item: BaseItem): string => {\n    const indexName = item.__autocomplete_indexName as string\n    return match(indexName)\n        .with(PAGES_INDEX, () => {\n            return getCanonicalUrl(BAKED_BASE_URL, {\n                slug: item.slug as string,\n                content: {\n                    type: item.type as OwidGdocType,\n                },\n            })\n        })\n        .with(CHARTS_INDEX, () => {\n            return match(item.type as ChartRecordType)\n                .with(ChartRecordType.ExplorerView, () => {\n                    const url = new URL(\n                        urljoin(\n                            BAKED_BASE_URL,\n                            EXPLORERS_ROUTE_FOLDER,\n                            item.slug as string\n                        )\n                    )\n                    const queryParams = new URLSearchParams(\n                        item.queryParams as string\n                    )\n                    for (const [key, value] of queryParams) {\n                        url.searchParams.set(key, value)\n                    }\n                    return url.toString()\n                })\n                .with(ChartRecordType.Chart, () => {\n                    return urljoin(BAKED_GRAPHER_URL, item.slug as string)\n                })\n                .with(ChartRecordType.MultiDimView, () => {\n                    const url = new URL(\n                        urljoin(BAKED_GRAPHER_URL, item.slug as string)\n                    )\n                    const queryParams = new URLSearchParams(\n                        item.queryParams as string\n                    )\n                    for (const [key, value] of queryParams) {\n                        url.searchParams.set(key, value)\n                    }\n                    return url.toString()\n                })\n                .exhaustive()\n        })\n        .otherwise(() => {\n            Sentry.captureMessage(`Unknown Algolia index name: ${indexName}`, {\n                level: \"error\",\n            })\n            return urljoin(BAKED_BASE_URL, item.slug as string)\n        })\n}\n\nconst FeaturedSearchesSource: AutocompleteSource<BaseItem> = {\n    sourceId: \"suggestedSearch\",\n    onSelect,\n    getItemUrl,\n    getItems() {\n        return [\"CO2\", \"Energy\", \"Education\", \"Poverty\", \"Democracy\"].map(\n            (term) => ({\n                title: term,\n                slug: `${SEARCH_BASE_PATH}${queryParamsToStr({ q: term, resultType: SearchResultType.ALL })}`,\n            })\n        )\n    },\n\n    templates: {\n        item: ({ item }) => {\n            return (\n                <span className=\"autocomplete-item-contents\">\n                    <span className=\"autocomplete-item-contents__type-icon\">\n                        <FontAwesomeIcon icon={faSearch} />\n                    </span>\n                    <span className=\"autocomplete-item-contents__query autocomplete-item-contents__query--only\">\n                        {item.title as string}\n                    </span>\n                </span>\n            )\n        },\n    },\n}\n\nconst algoliaItemTemplate: AutocompleteSource<BaseItem>[\"templates\"] = {\n    item: ({ item, components }) => {\n        const indexName = item.__autocomplete_indexName as string\n\n        const { label: indexLabel, icon: indexIcon } = match(indexName)\n            .with(CHARTS_INDEX, () => ({\n                label:\n                    item.type === ChartRecordType.ExplorerView\n                        ? \"Explorer\"\n                        : \"Chart\",\n                icon: faLineChart,\n            }))\n            .with(PAGES_INDEX, () => {\n                const { name, icon } = getPageTypeNameAndIcon(\n                    item.type as OwidGdocType\n                )\n                return { label: name, icon }\n            })\n            .otherwise(() => {\n                Sentry.captureMessage(\n                    `Unknown Algolia index name: ${indexName}`,\n                    { level: \"error\" }\n                )\n                return { label: \"Result\", icon: faSearch }\n            })\n\n        return (\n            <span\n                className=\"autocomplete-item-contents\"\n                key={item.title as string}\n                translate=\"no\"\n            >\n                <span>\n                    <FontAwesomeIcon\n                        icon={indexIcon}\n                        className=\"autocomplete-item-contents__type-icon\"\n                    />\n                </span>\n                <span>\n                    <components.Highlight\n                        hit={item}\n                        attribute={\"title\"}\n                        tagName=\"strong\"\n                    />\n                    <span className=\"autocomplete-item-contents__contentType\">\n                        {indexLabel}\n                    </span>\n                </span>\n            </span>\n        )\n    },\n}\n\nconst makeAlgoliaOnSelect =\n    (searchSource?: string): AutocompleteSource<BaseItem>[\"onSelect\"] =>\n    ({ navigator, item, state }) => {\n        const itemUrl = prependSubdirectoryToAlgoliaItemUrl(item)\n        siteAnalytics.logInstantSearchClick({\n            query: state.query,\n            url: itemUrl,\n            position: String(state.activeItemId),\n            source: searchSource,\n        })\n        navigator.navigate({ itemUrl, item, state })\n    }\n\nconst algoliaGetItemUrl: AutocompleteSource<BaseItem>[\"getItemUrl\"] = ({\n    item,\n}) => prependSubdirectoryToAlgoliaItemUrl(item)\n\nconst ALGOLIA_PAGES_ITEM_PARAMS = {\n    attributesToRetrieve: [\"title\", \"slug\", \"type\"],\n    attributesToHighlight: [\"title\"],\n}\n\nconst ALGOLIA_CHARTS_ITEM_PARAMS = {\n    attributesToRetrieve: [\"title\", \"slug\", \"type\", \"queryParams\"],\n    attributesToHighlight: [\"title\"],\n}\n\nconst createAlgoliaPagesSource = (\n    searchSource?: string\n): AutocompleteSource<BaseItem> => ({\n    sourceId: \"autocomplete\",\n    onSelect: makeAlgoliaOnSelect(searchSource),\n    getItemUrl: algoliaGetItemUrl,\n    getItems({ query }) {\n        if (!liteSearchClient) return []\n\n        return getAlgoliaResults<BaseItem>({\n            searchClient: liteSearchClient,\n            queries: [\n                {\n                    indexName: PAGES_INDEX,\n                    params: {\n                        query,\n                        hitsPerPage: 2,\n                        distinct: true,\n                        filters: `NOT type:${OwidGdocType.Profile}`,\n                        ...ALGOLIA_PAGES_ITEM_PARAMS,\n                    },\n                },\n            ],\n        })\n    },\n    templates: algoliaItemTemplate,\n})\n\nconst createAlgoliaChartsSource = (\n    searchSource?: string\n): AutocompleteSource<BaseItem> => ({\n    sourceId: \"autocomplete-charts\",\n    onSelect: makeAlgoliaOnSelect(searchSource),\n    getItemUrl: algoliaGetItemUrl,\n    getItems({ query }) {\n        if (!liteSearchClient) return []\n\n        return getAlgoliaResults<BaseItem>({\n            searchClient: liteSearchClient,\n            queries: [\n                {\n                    indexName: CHARTS_INDEX,\n                    params: {\n                        query,\n                        hitsPerPage: 3,\n                        distinct: true,\n                        ...ALGOLIA_CHARTS_ITEM_PARAMS,\n                    },\n                },\n            ],\n        })\n    },\n    templates: algoliaItemTemplate,\n})\n\nconst createFiltersSource = (\n    allTopics: string[],\n    synonymMap: SynonymMap,\n    searchSource?: string\n): AutocompleteSource<BaseItem> => ({\n    sourceId: \"filters\",\n    onSelect({ navigator, item, state }) {\n        const itemUrl = item.slug as string\n        siteAnalytics.logInstantSearchClick({\n            query: state.query,\n            url: itemUrl,\n            position: String(state.activeItemId),\n            source: searchSource,\n        })\n        navigator.navigate({ itemUrl, item, state })\n    },\n    getItemUrl,\n    getItems({ query }) {\n        if (!query.trim()) return []\n\n        const suggestions = suggestFiltersFromQuerySuffix(\n            query,\n            listedRegionsNames(),\n            allTopics,\n            [], // no selected filters in this context\n            synonymMap\n        )\n\n        return (\n            suggestions.suggestions\n                // Suggestions must now be explicitly selected by the user\n                // (opt-out by default). Pressing \"enter\" will search for the\n                // current query directly, so we no longer need to include an\n                // extra query suggestion here.\n                .filter((filter) => filter.type !== FilterType.QUERY)\n                .map((filter) => ({\n                    filter,\n                    unmatchedQuery: suggestions.unmatchedQuery,\n                    slug: getItemUrlForFilter(\n                        filter,\n                        suggestions.unmatchedQuery\n                    ),\n                }))\n        )\n    },\n    templates: {\n        item: ({ item }) => {\n            const filter = item.filter as Filter\n            const unmatchedQuery = item.unmatchedQuery as string\n\n            return (\n                match(filter.type)\n                    .with(FilterType.COUNTRY, () => (\n                        <span className=\"autocomplete-item-contents\">\n                            <span className=\"autocomplete-item-contents__type-icon\">\n                                <FontAwesomeIcon icon={faSearch} />\n                            </span>\n                            <span className=\"autocomplete-item-contents__query autocomplete-item-contents__query--unmatched\">\n                                {unmatchedQuery} {filter.name.toLowerCase()}\n                            </span>\n                        </span>\n                    ))\n                    .with(FilterType.TOPIC, () => (\n                        <span className=\"autocomplete-item-contents\">\n                            <span className=\"autocomplete-item-contents__type-icon\">\n                                <FontAwesomeIcon icon={faSearch} />\n                            </span>\n                            <SearchFilterPill\n                                name={filter.name}\n                                icon={getFilterIcon(filter)}\n                            />\n                        </span>\n                    ))\n                    // dataset filters are not suggested in autocomplete\n                    .with(\n                        FilterType.DATASET_PRODUCT,\n                        FilterType.DATASET_NAMESPACE,\n                        FilterType.DATASET_VERSION,\n                        FilterType.DATASET_PRODUCER,\n                        () => <></>\n                    )\n                    // query filters are filtered out in getItems\n                    .with(FilterType.QUERY, () => <></>)\n                    .exhaustive()\n            )\n        },\n    },\n})\n\n/**\n * Creates a profile source that boosts the user's geolocated country\n * using Algolia's `optionalFilters`. This avoids running expensive\n * client-side country detection on every keystroke while still ensuring:\n * - \"energy\" → \"Energy in Canada\" (boosted by geolocation)\n * - \"canada\" → Canada profiles (matched by Algolia on title)\n * - \"energy france\" → \"Energy in France\" (matched naturally)\n *\n * Requires the `filters` ranking criterion in the index settings\n * (see configureAlgolia.ts).\n */\nconst createProfileSource = (\n    countryName: string | undefined,\n    searchSource?: string\n): AutocompleteSource<BaseItem> => ({\n    sourceId: \"profiles\",\n    onSelect: makeAlgoliaOnSelect(searchSource),\n    getItemUrl: algoliaGetItemUrl,\n    getItems({ query }) {\n        if (!liteSearchClient) return []\n\n        return getAlgoliaResults<BaseItem>({\n            searchClient: liteSearchClient,\n            queries: [\n                {\n                    indexName: PAGES_INDEX,\n                    params: {\n                        query,\n                        filters: `type:${OwidGdocType.Profile}`,\n                        ...(countryName && {\n                            optionalFilters: [\n                                `availableEntities:${countryName}`,\n                            ],\n                        }),\n                        hitsPerPage: 1,\n                        ...ALGOLIA_PAGES_ITEM_PARAMS,\n                    },\n                },\n            ],\n        })\n    },\n    templates: algoliaItemTemplate,\n})\n\nexport function Autocomplete({\n    onActivate,\n    onClose,\n    className,\n    placeholder = DEFAULT_SEARCH_PLACEHOLDER,\n    panelClassName,\n    isPreviewing,\n    // Optional id override. Defaults to \"autocomplete\" so existing call sites\n    // (topnav, homepage) keep working. Pass a unique id when more than one\n    // Autocomplete renders on the same page — the underlying library uses the\n    // container element to scope click-outside / blur detection, and duplicate\n    // ids prevent the panel from closing on outside clicks.\n    id = \"autocomplete\",\n    // Where this autocomplete is rendered (e.g. \"topnav\", \"homepage\",\n    // \"datapage\"). Attached to instant-search-click analytics so we can tell\n    // which search bar a click came from.\n    searchSource,\n}: {\n    onActivate?: () => void\n    onClose?: () => void\n    className?: string\n    placeholder?: string\n    panelClassName?: string\n    isPreviewing?: boolean\n    id?: string\n    searchSource: string\n}) {\n    const containerRef = useRef<HTMLDivElement>(null)\n    const panelRootRef = useRef<Root | null>(null)\n    const rootRef = useRef<HTMLElement | null>(null)\n    const { data: topicTagGraph } = useTopicTagGraph({\n        isPreviewing: Boolean(isPreviewing),\n    })\n    const { allTopics } = useTagGraphTopics(topicTagGraph)\n\n    const synonymMap = useMemo(() => buildSynonymMap(), [])\n    const recentSearchesPlugin = useMemo(() => buildRecentSearchesPlugin(), [])\n    const debouncedResolveSources = useMemo(\n        () =>\n            createDebouncedPromise<AutocompleteSource<BaseItem>[]>(\n                AUTOCOMPLETE_DEBOUNCE_MS,\n                []\n            ),\n        []\n    )\n\n    const [search, setSearch] = useState<AutocompleteApi<BaseItem> | null>(null)\n\n    const userCountryNameRef = useRef<string | undefined>(undefined)\n    useEffect(() => {\n        void getUserCountryInformation().then((info) => {\n            userCountryNameRef.current = info?.name\n        })\n    }, [])\n\n    useEffect(() => {\n        if (!containerRef.current) return\n\n        const search = autocomplete({\n            placeholder,\n            // Setting the `enterKeyHint` fixes a bug on Samsung phones where\n            // characters may be deleted when typing.\n            // https://support.algolia.com/hc/en-us/articles/35765245191057-Why-are-characters-being-deleted-from-Autocomplete-when-typing-on-a-Samsung-device\n            enterKeyHint: \"search\",\n            detachedMediaQuery: DETACHED_MEDIA_QUERY,\n            container: containerRef.current,\n            classNames: {\n                panel: panelClassName,\n            },\n            openOnFocus: true,\n            stallThreshold: STALL_THRESHOLD_MS,\n            // Submitting is handled in onSubmit; the form's action and the\n            // input's name let Firefox offer \"Add Search Engine\" on\n            // right-click. autocomplete-js types the action as \"\", but\n            // applies whatever we return to the form element.\n            getFormProps: ({ props }) => ({\n                ...props,\n                action: SEARCH_BASE_PATH as \"\",\n            }),\n            getInputProps: ({ props }) => ({\n                ...props,\n                name: SearchUrlParam.QUERY,\n            }),\n            onStateChange({ state, prevState }) {\n                if (onActivate && !prevState.isOpen && state.isOpen) {\n                    onActivate()\n                } else if (onClose && prevState.isOpen && !state.isOpen) {\n                    onClose()\n                }\n            },\n            // Keep the panel open while typing even if there are no suggestions (would otherwise close by default)\n            shouldPanelOpen({ state }) {\n                if (state.query) return true\n                return state.collections.some(\n                    (collection) => collection.items.length > 0\n                )\n            },\n            onSubmit({ state, navigator }) {\n                if (!state.query) return\n                navigator.navigate({\n                    itemUrl: `${SEARCH_BASE_PATH}${queryParamsToStr({ q: state.query, resultType: SearchResultType.ALL })}`,\n                    // this method is incorrectly typed - `item` and `state` are optional\n                } as any)\n            },\n            renderer: {\n                createElement: React.createElement,\n                Fragment: React.Fragment,\n                render: () => {\n                    // empty method, see https://www.algolia.com/doc/ui-libraries/autocomplete/integrations/using-react/#with-react-18\n                },\n            },\n            render({ children }, root) {\n                if (!panelRootRef.current || rootRef.current !== root) {\n                    rootRef.current = root\n\n                    panelRootRef.current?.unmount()\n                    panelRootRef.current = createRoot(root)\n                }\n\n                panelRootRef.current.render(children)\n            },\n            getSources({ query }) {\n                const sources: AutocompleteSource<BaseItem>[] = []\n                if (query) {\n                    sources.push(\n                        createFiltersSource(\n                            allTopics,\n                            synonymMap,\n                            searchSource\n                        ),\n                        createProfileSource(\n                            userCountryNameRef.current,\n                            searchSource\n                        ),\n                        createAlgoliaPagesSource(searchSource),\n                        createAlgoliaChartsSource(searchSource)\n                    )\n                } else {\n                    debouncedResolveSources.cancel()\n                    return [FeaturedSearchesSource]\n                }\n                return debouncedResolveSources.schedule(sources)\n            },\n            plugins: [recentSearchesPlugin],\n        })\n\n        setSearch(search)\n\n        const input =\n            containerRef.current.querySelector<HTMLInputElement>(\"input\")\n        if (input) {\n            input.dataset.testid = \"autocomplete-input\"\n            const inputId = input.id\n            const button = containerRef.current.querySelector(\n                `label[for='${inputId}'] button`\n            )\n            // Disable the button on mount. We know there's no input because the element is created by JS\n            // and thus isn't persisted between navigations\n            button?.setAttribute(\"disabled\", \"true\")\n\n            input.addEventListener(\"input\", () => {\n                const isFormValid = input.checkValidity()\n                if (isFormValid) {\n                    button?.removeAttribute(\"disabled\")\n                } else {\n                    button?.setAttribute(\"disabled\", \"true\")\n                }\n            })\n        }\n\n        return () => {\n            debouncedResolveSources.cancel()\n            search.destroy()\n        }\n    }, [\n        onActivate,\n        onClose,\n        placeholder,\n        panelClassName,\n        containerRef,\n        allTopics,\n        synonymMap,\n        recentSearchesPlugin,\n        userCountryNameRef,\n        searchSource,\n        debouncedResolveSources,\n    ])\n\n    // Close the panel on outside click. We can't rely on autocomplete-js's\n    // built-in blur detection when multiple Autocomplete instances are on the\n    // same page (e.g. topnav + datapage search): the library wires its blur\n    // handler via `window._listeners.mousedown = handler` (single-slot\n    // assignment in @algolia/autocomplete-js setProperties.js), so the second\n    // instance to mount overwrites the first's handler — and only the\n    // last-mounted instance closes properly. The autocomplete-core source\n    // even carries a `@TODO: support cases where there are multiple\n    // Autocomplete instances` comment for this. addEventListener stacks\n    // rather than overwriting, so a per-instance listener here works for any\n    // number of instances.\n    //\n    // This only applies to the docked panel. In detached (mobile) mode the\n    // library renders a full-screen modal portaled to document.body — outside\n    // both containerRef and the panel root — and handles its own dismissal\n    // (backdrop tap, cancel button). Running our handler there would treat a\n    // tap on the modal's own input or buttons as an outside click and close it,\n    // so we bail when the detached media query matches.\n    useEffect(() => {\n        if (!search) return\n\n        const onDocMouseDown = (e: MouseEvent) => {\n            if (window.matchMedia(DETACHED_MEDIA_QUERY).matches) return\n\n            const target = e.target as Node | null\n            if (!target) return\n            const isInsideContainer =\n                containerRef.current?.contains(target) ?? false\n            const isInsidePanel = rootRef.current?.contains(target) ?? false\n            if (!isInsideContainer && !isInsidePanel) {\n                search.setIsOpen(false)\n            }\n        }\n        document.addEventListener(\"mousedown\", onDocMouseDown)\n        return () => {\n            document.removeEventListener(\"mousedown\", onDocMouseDown)\n        }\n    }, [search])\n\n    // Preserve the page scroll position across the detached (mobile) modal.\n    // autocomplete-theme-classic locks the page with `body.aa-Detached {\n    // height: 100vh; overflow: hidden }` while the modal is open, which clamps\n    // the window scroll to 0 and never restores it on close — so closing the\n    // modal jumps the page to the top. The library does no save/restore, and we\n    // can't read the position in onStateChange because the class (and the\n    // reset) is applied before our callback runs. So we track the page scroll\n    // while the modal is closed and restore it once it closes again.\n    useEffect(() => {\n        if (!search) return\n\n        let savedScrollY = window.scrollY\n        let isModalOpen = document.body.classList.contains(\"aa-Detached\")\n\n        const onScroll = () => {\n            if (!isModalOpen) savedScrollY = window.scrollY\n        }\n\n        // Key off the exact class that triggers the reset. The observer\n        // callback (a microtask) runs before the clamp's async scroll event, so\n        // isModalOpen is already true by the time the scroll-to-0 fires and we\n        // don't overwrite the saved position.\n        const observer = new MutationObserver(() => {\n            const open = document.body.classList.contains(\"aa-Detached\")\n            if (open === isModalOpen) return\n            isModalOpen = open\n            if (!open) window.scrollTo(0, savedScrollY)\n        })\n\n        window.addEventListener(\"scroll\", onScroll, { passive: true })\n        observer.observe(document.body, {\n            attributes: true,\n            attributeFilter: [\"class\"],\n        })\n\n        return () => {\n            window.removeEventListener(\"scroll\", onScroll)\n            observer.disconnect()\n        }\n    }, [search])\n\n    // Register a global shortcut to open the search box on typing \"/\"\n    useEffect(() => {\n        if (!search) return\n\n        const openSearch = (e: KeyboardEvent): void => {\n            e.preventDefault() // don't type \"/\" into input\n            search.setIsOpen(true)\n\n            const input =\n                containerRef.current?.querySelector<HTMLInputElement>(\"input\")\n            input?.focus()\n        }\n\n        // \"/\" needs Shift on many non-US keyboard layouts (e.g. German, Spanish, Swedish, ...)\n        return tinykeys(window, { \"[Shift]+/\": openSearch })\n    }, [search, containerRef])\n\n    return <div className={className} ref={containerRef} id={id} />\n}\n","import { useContext } from \"react\"\nimport { Autocomplete } from \"../../search/Autocomplete.js\"\nimport { AttachmentsContext } from \"../AttachmentsContext.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\nimport { commafyNumber } from \"@ourworldindata/utils\"\nimport { SEARCH_BASE_PATH } from \"../../search/searchUtils.js\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faArrowRight,\n    faBook,\n    faBookmark,\n    faChartLine,\n    faMagnifyingGlassChart,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { BAKED_BASE_URL } from \"../../../settings/clientSettings.mjs\"\nimport { buildLatestPagePath } from \"../../latest/latestUtils.js\"\n\nexport function HomepageSearch(props: { className?: string }) {\n    const { homepageMetadata } = useContext(AttachmentsContext)\n    const { isPreviewing } = useDocumentContext()\n    const chartCount = homepageMetadata?.chartCount\n    const topicCount = homepageMetadata?.topicCount\n    const explorerCount = homepageMetadata?.explorerCount\n    const articleCount = homepageMetadata?.articleCount\n    const message =\n        chartCount && topicCount && explorerCount && articleCount ? (\n            <div>\n                <ul className=\"homepage-search__links\">\n                    <li>\n                        <a\n                            className=\"homepage-search__link body-3-medium\"\n                            href={SEARCH_BASE_PATH}\n                        >\n                            <FontAwesomeIcon icon={faChartLine} />\n                            {commafyNumber(chartCount)} charts\n                        </a>\n                    </li>\n                    <li>\n                        <a\n                            className=\"homepage-search__link body-3-medium\"\n                            href=\"#all-topics\"\n                        >\n                            <FontAwesomeIcon icon={faBookmark} />\n                            {commafyNumber(topicCount)} topic pages\n                        </a>\n                    </li>\n                    <li>\n                        <a\n                            className=\"homepage-search__link body-3-medium\"\n                            href=\"/explorers\"\n                        >\n                            <FontAwesomeIcon icon={faMagnifyingGlassChart} />\n                            {commafyNumber(explorerCount)} data explorers\n                        </a>\n                    </li>\n                    <li>\n                        <a\n                            className=\"homepage-search__link body-3-medium\"\n                            href={buildLatestPagePath(\"article\")}\n                        >\n                            <FontAwesomeIcon icon={faBook} />\n                            {commafyNumber(articleCount)} articles\n                        </a>\n                    </li>\n                </ul>\n                <div className=\"homepage-search__links--mobile\">\n                    <a href=\"/data\" className=\"body-3-medium\">\n                        {commafyNumber(chartCount)} charts\n                    </a>{\" \"}\n                    across {commafyNumber(topicCount)} topics\n                </div>\n                <p className=\"homepage-search__tagline\">\n                    All free: open access and openly licensed\n                </p>\n            </div>\n        ) : (\n            <p className=\"homepage-search__tagline\">\n                Thousands of charts across 200 topics - All free: open access\n                and openly licensed\n            </p>\n        )\n    return (\n        <div className={props.className}>\n            <h2 className=\"h1-semibold span-cols-6 col-start-5 span-md-cols-10 col-md-start-3 span-sm-cols-12 col-sm-start-2\">\n                Research and data to make progress against the world’s largest\n                problems.\n            </h2>\n            <a\n                href={`${BAKED_BASE_URL}/about#our-mission`}\n                className=\"homepage-search__about-link span-cols-6 col-start-5 span-md-cols-10 col-md-start-3 span-sm-cols-12 col-sm-start-2\"\n            >\n                Read about our mission <FontAwesomeIcon icon={faArrowRight} />\n            </a>\n            <Autocomplete\n                className=\"span-cols-6 col-start-5 span-md-cols-10 col-md-start-3 span-sm-cols-12 col-sm-start-2\"\n                panelClassName=\"homepage-search__panel\"\n                isPreviewing={isPreviewing}\n                searchSource=\"homepage\"\n            />\n            <div className=\"span-cols-14 homepage-search__links-and-tagline\">\n                {message}\n            </div>\n        </div>\n    )\n}\n","import cx from \"clsx\"\nimport { faCalendarDay } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\n\nimport { dayjs } from \"@ourworldindata/utils\"\n\nexport default function DataInsightDateline({\n    className,\n    publishedAt,\n    formatOptions = {\n        month: \"long\",\n        day: \"numeric\",\n    },\n    highlightToday,\n}: {\n    className?: string\n    publishedAt: Date | null\n    formatOptions?: Intl.DateTimeFormatOptions\n    highlightToday?: boolean\n}) {\n    const date = dayjs(publishedAt)\n    let highlightClassName\n    let formattedDate\n    if (publishedAt) {\n        if (date.isToday()) {\n            formattedDate = \"Today\"\n            if (highlightToday) {\n                highlightClassName = \"data-insight-dateline--is-today\"\n            }\n        } else if (date.isYesterday()) {\n            formattedDate = \"Yesterday\"\n        } else {\n            const options =\n                date.year() !== dayjs().year()\n                    ? { ...formatOptions, year: \"numeric\" as const }\n                    : formatOptions\n            formattedDate = date.toDate().toLocaleDateString(\"en-US\", options)\n        }\n    } else {\n        formattedDate = \"Unpublished\"\n    }\n    return (\n        <p\n            className={cx(\n                \"data-insight-dateline\",\n                className,\n                highlightClassName\n            )}\n            suppressHydrationWarning={true}\n        >\n            <FontAwesomeIcon\n                className=\"data-insight-dateline__icon\"\n                icon={faCalendarDay}\n            />\n            {formattedDate}\n        </p>\n    )\n}\n","import { memo, useState, useCallback, useEffect, useRef } from \"react\"\nimport {\n    faChevronRight,\n    faChevronLeft,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport cx from \"clsx\"\nimport * as R from \"remeda\"\n\nimport { Button, getPrefersReducedMotion } from \"@ourworldindata/components\"\nimport { formatAuthors, OwidEnrichedGdocBlock } from \"@ourworldindata/utils\"\nimport { findThumbnailImageBlock } from \"../../latest/latestUtils.js\"\nimport Image from \"./Image.js\"\nimport { ArticleBlocks } from \"./ArticleBlocks.js\"\nimport DataInsightDateline from \"./DataInsightDateline.js\"\n\n/** One card in a \"Our latest …\" carousel. Callers map their own content onto\n * this shape (see latestCarouselItems.ts) so the carousel itself doesn't know\n * whether it's showing data insights or announcements. */\nexport interface LatestCarouselItem {\n    id: string\n    title: string\n    authors: string[]\n    body: OwidEnrichedGdocBlock[]\n    publishedAt?: Date\n    href: string\n}\n\n/** Card colours. \"blue\" is the data insight look; \"white\" mirrors the data\n * update card in the /latest feed so announcements don't read as insights. */\nexport type LatestCarouselTheme = \"blue\" | \"white\"\n\nexport default function LatestCarousel({\n    className,\n    items,\n    seeAllHref,\n    seeAllText,\n    theme = \"blue\",\n    tall = false,\n}: {\n    className?: string\n    items: LatestCarouselItem[]\n    seeAllHref: string\n    seeAllText: string\n    theme?: LatestCarouselTheme\n    /** Room for 4:5 thumbnails on small screens, e.g. data update charts. */\n    tall?: boolean\n}) {\n    const scrollerRef = useRef<HTMLUListElement>(null)\n    const [selectedIndex, setSelectedIndex] = useState(0)\n\n    const updateSelectedIndex = useCallback(() => {\n        const scroller = scrollerRef.current\n        if (!scroller) return\n        const cards = getVisibleCards(scroller)\n        const maxScroll = scroller.scrollWidth - scroller.clientWidth\n        if (cards.length === 0 || maxScroll <= 0) setSelectedIndex(0)\n        else if (scroller.scrollLeft >= maxScroll - 1)\n            // At the very end of the scroller the last card counts as\n            // selected even though it can't reach its snap position.\n            setSelectedIndex(cards.length - 1)\n        else setSelectedIndex(findNearestCardIndex(cards, scroller.scrollLeft))\n    }, [])\n\n    useEffect(() => {\n        const scroller = scrollerRef.current\n        if (!scroller) return\n        updateSelectedIndex()\n        scroller.addEventListener(\"scroll\", updateSelectedIndex, {\n            passive: true,\n        })\n        window.addEventListener(\"resize\", updateSelectedIndex)\n        return () => {\n            scroller.removeEventListener(\"scroll\", updateSelectedIndex)\n            window.removeEventListener(\"resize\", updateSelectedIndex)\n        }\n    }, [updateSelectedIndex])\n\n    // Since snapping is mandatory, the scroller always rests on a snap\n    // position, so the selected index tells us whether there's room to\n    // scroll. items.length - 1 is the last card reachable by the buttons: the\n    // \"See all\" card beyond it only exists on small screens, where the buttons\n    // are hidden.\n    const canScrollPrev = selectedIndex > 0\n    const canScrollNext = selectedIndex < items.length - 1\n\n    const scrollToCard = (index: number): void => {\n        const scroller = scrollerRef.current\n        if (!scroller) return\n        const cards = getVisibleCards(scroller)\n        const card = cards[index]\n        if (!card) return\n        scroller.scrollTo({\n            left: card.offsetLeft - cards[0].offsetLeft,\n            behavior: getPrefersReducedMotion() ? \"auto\" : \"smooth\",\n        })\n    }\n\n    return (\n        <div\n            className={cx(\"latest-carousel\", className, {\n                \"latest-carousel--white\": theme === \"white\",\n                \"latest-carousel--tall\": tall,\n            })}\n        >\n            <ul className=\"latest-carousel__card-container\" ref={scrollerRef}>\n                {items.map((item, index) => (\n                    <CarouselCard\n                        key={item.id}\n                        index={index}\n                        isSnapped={index === selectedIndex}\n                        title={item.title}\n                        authors={item.authors}\n                        body={item.body}\n                        publishedAt={item.publishedAt}\n                        href={item.href}\n                    />\n                ))}\n                {/* Only shown on small screens (see CSS). */}\n                <li\n                    className={cx(\n                        \"latest-carousel__card\",\n                        \"latest-carousel__card--see-all\",\n                        {\n                            \"latest-carousel__card--snapped\":\n                                items.length === selectedIndex,\n                        }\n                    )}\n                >\n                    <Button\n                        className=\"latest-carousel__card__see-all body-3-medium\"\n                        href={seeAllHref}\n                        text={seeAllText}\n                        theme=\"outline-vermillion\"\n                    />\n                </li>\n            </ul>\n            {canScrollPrev && (\n                <Button\n                    ariaLabel=\"Scroll to the previous card\"\n                    className=\"latest-carousel__control-button latest-carousel__control-button--prev js--hide-if-js-disabled\"\n                    theme=\"solid-blue\"\n                    onClick={() => scrollToCard(selectedIndex - 1)}\n                    icon={faChevronLeft}\n                    text=\"\"\n                />\n            )}\n            {canScrollNext && (\n                <Button\n                    ariaLabel=\"Scroll to the next card\"\n                    className=\"latest-carousel__control-button latest-carousel__control-button--next js--hide-if-js-disabled\"\n                    theme=\"solid-blue\"\n                    onClick={() => scrollToCard(selectedIndex + 1)}\n                    icon={faChevronRight}\n                    text=\"\"\n                />\n            )}\n            {/* Without JS the dots would never update as the user scrolls. */}\n            <div className=\"latest-carousel__dots js--hide-if-js-disabled\">\n                {/* The extra dot belongs to the \"See all\" card; it's hidden\n                    along with its card on larger screens (see CSS). */}\n                {Array.from({ length: items.length + 1 }, (_, index) => (\n                    <div\n                        key={index}\n                        className={cx(\"latest-carousel__dot\", {\n                            \"latest-carousel__dot--see-all\":\n                                index === items.length,\n                            \"latest-carousel__dot--selected\":\n                                index === selectedIndex,\n                        })}\n                    />\n                ))}\n            </div>\n        </div>\n    )\n}\n\nfunction getVisibleCards(scroller: HTMLElement): HTMLElement[] {\n    return Array.from(scroller.children).filter(\n        (card): card is HTMLElement =>\n            card instanceof HTMLElement && card.offsetWidth > 0\n    )\n}\n\nfunction findNearestCardIndex(\n    cards: HTMLElement[],\n    scrollLeft: number\n): number {\n    const origin = cards[0].offsetLeft\n    const nearest = R.firstBy(\n        cards.map((card, index) => ({ card, index })),\n        ({ card }) => Math.abs(card.offsetLeft - origin - scrollLeft)\n    )\n    return nearest?.index ?? 0\n}\n\nconst CarouselCard = memo(function CarouselCard({\n    index,\n    isSnapped,\n    title,\n    authors,\n    body,\n    publishedAt,\n    href,\n}: {\n    index: number\n    isSnapped: boolean\n    title: string\n    authors: string[]\n    body: OwidEnrichedGdocBlock[]\n    publishedAt?: Date\n    href: string\n}) {\n    const titleId = `latest-carousel__card-title-${index}`\n    const firstImageBlock = findThumbnailImageBlock(body)\n    const otherBlocks = body.filter((block) => block !== firstImageBlock)\n    return (\n        <li\n            className={cx(\"latest-carousel__card\", {\n                \"latest-carousel__card--snapped\": isSnapped,\n            })}\n        >\n            <a\n                className=\"latest-carousel__card__link\"\n                href={href}\n                aria-labelledby={titleId}\n            >\n                {firstImageBlock && (\n                    <Image\n                        className=\"latest-carousel__card-left\"\n                        filename={\n                            firstImageBlock.smallFilename ||\n                            firstImageBlock.filename\n                        }\n                        containerType=\"latest-data-insight\"\n                        shouldLightbox={false}\n                    />\n                )}\n                <div className=\"latest-carousel__card-right\">\n                    {publishedAt && (\n                        <DataInsightDateline\n                            className=\"latest-carousel__card-dateline\"\n                            publishedAt={publishedAt}\n                            highlightToday={true}\n                        />\n                    )}\n                    <h3 id={titleId} className=\"latest-carousel__card-title\">\n                        {title}\n                    </h3>\n                    <p className=\"latest-carousel__card-authors\">\n                        {formatAuthors(authors)}\n                    </p>\n                    {/* Clipped under a fade with no \"Continue reading\" — the\n                        card is one link, the way the feed's condensed cards\n                        are; the fade is the affordance. */}\n                    <div className=\"latest-carousel__card-body\">\n                        <ArticleBlocks\n                            blocks={otherBlocks}\n                            containerType=\"data-insight\"\n                            shouldRenderLinks={false}\n                            interactiveImages={false}\n                        />\n                    </div>\n                </div>\n            </a>\n        </li>\n    )\n})\n","import {\n    LatestAnnouncement,\n    LatestDataInsight,\n    OwidGdocType,\n} from \"@ourworldindata/types\"\nimport { getPrefixedGdocPath } from \"@ourworldindata/utils\"\nimport { LatestCarouselItem } from \"./LatestCarousel.js\"\n\n/** Mappers onto the carousel's card shape. They live here rather than in\n * LatestCarousel so the carousel stays unaware of the content types it shows,\n * and so both data insight call sites build their items identically. */\n\nexport function dataInsightsToCarouselItems(\n    dataInsights: LatestDataInsight[]\n): LatestCarouselItem[] {\n    return dataInsights.map((dataInsight) => ({\n        id: dataInsight.id,\n        title: dataInsight.content.title,\n        authors: dataInsight.content.authors,\n        body: dataInsight.content.body,\n        publishedAt: dataInsight.publishedAt\n            ? new Date(dataInsight.publishedAt)\n            : undefined,\n        href: `/data-insights/${dataInsight.slug}`,\n    }))\n}\n\nexport function announcementsToCarouselItems(\n    announcements: LatestAnnouncement[]\n): LatestCarouselItem[] {\n    return announcements.map((announcement) => ({\n        id: announcement.id,\n        title: announcement.content.title,\n        authors: announcement.content.authors,\n        body: announcement.content.body,\n        publishedAt: announcement.publishedAt\n            ? new Date(announcement.publishedAt)\n            : undefined,\n        // Announcements bake to /<slug> today and will move under a per-kind\n        // namespace later; going through getPrefixedGdocPath means this\n        // follows along.\n        href: getPrefixedGdocPath(\"\", {\n            slug: announcement.slug,\n            content: { type: OwidGdocType.Announcement },\n        }),\n    }))\n}\n","import { useContext } from \"react\"\nimport cx from \"clsx\"\n\nimport { AttachmentsContext } from \"../AttachmentsContext.js\"\nimport { Button } from \"@ourworldindata/components\"\nimport LatestCarousel from \"./LatestCarousel.js\"\nimport { dataInsightsToCarouselItems } from \"./latestCarouselItems.js\"\nimport { buildLatestPagePath } from \"../../latest/latestUtils.js\"\n\nexport default function LatestDataInsightsBlock({\n    className,\n}: {\n    className?: string\n}) {\n    const { latestDataInsights } = useContext(AttachmentsContext)\n    if (!latestDataInsights?.length) return null\n\n    return (\n        <section className={cx(className, \"latest-data-insights-block\")}>\n            <header className=\"latest-data-insights-block__header span-cols-8 col-start-2 span-sm-cols-12 col-sm-start-2\">\n                <h2 className=\"h2-bold\">Data Insights</h2>\n                <p className=\"body-2-regular\">\n                    Bite-sized insights on how the world is changing, published\n                    every few days.\n                </p>\n            </header>\n            <Button\n                href={buildLatestPagePath(\"data-insight\")}\n                className=\"latest-data-insights-block__see-all-data-insights-button body-3-medium span-cols-4 col-start-10 span-sm-cols-12 col-sm-start-2\"\n                text=\"See all Data Insights\"\n                theme=\"outline-vermillion\"\n            />\n            <LatestCarousel\n                className=\"span-cols-12 col-start-2\"\n                items={dataInsightsToCarouselItems(latestDataInsights)}\n                seeAllHref={buildLatestPagePath(\"data-insight\")}\n                seeAllText=\"See all our Data Insights\"\n            />\n        </section>\n    )\n}\n","import { EnrichedSocialLink, SocialLinkType } from \"@ourworldindata/types\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    IconDefinition,\n    faFacebook,\n    faInstagram,\n    faLinkedin,\n    faMastodon,\n    faThreads,\n    faXTwitter,\n    faYoutube,\n    faBluesky,\n} from \"@fortawesome/free-brands-svg-icons\"\nimport { faEnvelope, faLink } from \"@fortawesome/free-solid-svg-icons\"\n\nconst typeToIcon: Record<SocialLinkType, IconDefinition> = {\n    x: faXTwitter,\n    facebook: faFacebook,\n    instagram: faInstagram,\n    linkedin: faLinkedin,\n    youtube: faYoutube,\n    threads: faThreads,\n    mastodon: faMastodon,\n    bluesky: faBluesky,\n    email: faEnvelope,\n    link: faLink,\n}\n\nfunction SocialLink({ url, text, type }: EnrichedSocialLink) {\n    return (\n        <li className=\"article-block__social-link social-link\">\n            <FontAwesomeIcon icon={type ? typeToIcon[type] : faLink} />\n            <a href={url}>{text}</a>\n        </li>\n    )\n}\n\nexport function Socials({\n    className,\n    links,\n}: {\n    className?: string\n    links: EnrichedSocialLink[]\n}) {\n    return (\n        <div className={className}>\n            <ul>\n                {links.map((link) => (\n                    <SocialLink key={link.url} {...link} />\n                ))}\n            </ul>\n        </div>\n    )\n}\n","import { useMediaQuery } from \"usehooks-ts\"\n\nimport { EnrichedBlockPerson } from \"@ourworldindata/types\"\nimport { SMALL_BREAKPOINT_MEDIA_QUERY } from \"../../SiteConstants.js\"\nimport { getAuthorTeamAnchorId, useLinkedDocument } from \"../utils.js\"\nimport { ArticleBlocks } from \"./ArticleBlocks.js\"\nimport Image from \"./Image.js\"\nimport { Socials } from \"./Socials.js\"\n\nexport default function Person({ person }: { person: EnrichedBlockPerson }) {\n    const { linkedDocument } = useLinkedDocument(person.url ?? \"\")\n    const isSmallScreen = useMediaQuery(SMALL_BREAKPOINT_MEDIA_QUERY)\n    const url = linkedDocument?.url\n\n    const heading = <h3 className=\"person-heading\">{person.name}</h3>\n\n    const header = (\n        <div className=\"person-header\">\n            {url ? <a href={url}>{heading}</a> : heading}\n            {person.title && (\n                <span className=\"person-title\">{person.title}</span>\n            )}\n        </div>\n    )\n\n    const image = person.image ? (\n        <Image\n            className=\"person-image\"\n            filename={person.image}\n            containerType=\"person\"\n            shouldLightbox={false}\n        />\n    ) : null\n\n    return (\n        <div className=\"person\" id={getAuthorTeamAnchorId(person.name)}>\n            {person.image && (\n                <div className=\"person-image-container\">\n                    {url ? (\n                        <a href={url} className=\"person-image--link-wrapper\">\n                            {image}\n                        </a>\n                    ) : (\n                        image\n                    )}\n                    {isSmallScreen && header}\n                </div>\n            )}\n            <div>\n                {(!person.image || !isSmallScreen) && header}\n                <ArticleBlocks blocks={person.text} />\n                {person.socials && (\n                    <Socials\n                        className=\"person-socials\"\n                        links={person.socials}\n                    />\n                )}\n            </div>\n        </div>\n    )\n}\n","import type { BespokeComponentDefinition } from \"./bespokeComponentTypes.ts\"\n\nexport const BESPOKE_COMPONENT_REGISTRY: Record<\n    string,\n    BespokeComponentDefinition\n> = {\n    \"causes-of-death\": {\n        scriptUrl: \"/causes-of-death/index.js\",\n        dataUrl: \"ihme_gbd/latest/gbd_treemap_json\",\n        metadataFilename: \"causes-of-death.metadata.json\",\n    },\n    \"deforestation-trade\": {\n        scriptUrl: \"/deforestation-trade/index.js\",\n        dataUrl: \"forests/latest/deforestation_trade\",\n        metadataFilename: \"deforestation-trade.metadata.json\",\n    },\n    demography: {\n        scriptUrl: \"/demography/index.js\",\n        dataUrl: \"un_wpp/latest/demography\",\n        metadataFilename: \"demography.metadata.json\",\n    },\n    \"food-trade\": {\n        scriptUrl: \"/food-trade/index.js\",\n        dataUrl: \"faostat/latest/food_trade\",\n        metadataFilename: \"food-trade.metadata.json\",\n    },\n    migration: {\n        scriptUrl: \"/migration/index.js\",\n        dataUrl: \"un_migration/latest/migration_stock_flows_json\",\n        metadataFilename: \"migration-stock-flows.metadata.json\",\n    },\n    \"migrant-demographics\": {\n        scriptUrl: \"/migrant-demographics/index.js\",\n        dataUrl: \"un_migration/latest/migrant_demographics\",\n        metadataFilename: \"migrant-demographics.metadata.json\",\n    },\n}\n","type BespokeComponentReturnType = void | undefined | (() => void)\n\nexport interface BespokeComponentDataUrls {\n    dataUrl: string\n    metadataUrl: string\n}\n\nexport type BespokeAuthoredConfig = Record<string, string>\n\nexport interface BespokeVariantProps<Config> {\n    config: Config\n    urls: BespokeComponentDataUrls\n}\n\n/** Set in code by the page embedding a bespoke component, never authored */\nexport interface EmbedOptions {\n    urlSync?: boolean\n    hideMetadataModal?: boolean\n}\n\nexport interface BespokeComponentMountOpts extends Partial<BespokeComponentDataUrls> {\n    variant?: string\n    config?: BespokeAuthoredConfig\n    embedOptions?: EmbedOptions\n}\n\nexport type BespokeComponentMountFn = (\n    container: HTMLDivElement,\n    opts: BespokeComponentMountOpts\n) => BespokeComponentReturnType | Promise<BespokeComponentReturnType>\n\nexport class BespokeConfigError extends Error {\n    override name = \"BespokeConfigError\"\n}\n\nexport function isBespokeConfigError(\n    error: unknown\n): error is BespokeConfigError {\n    return error instanceof Error && error.name === \"BespokeConfigError\"\n}\n\n/**\n * The expected interface for a bespoke component's ESM module.\n * The module must export a `mount` function that receives a container div\n * and configuration object. The container is isolated via Shadow DOM.\n */\nexport interface BespokeComponentModule {\n    mount: BespokeComponentMountFn\n    VARIANTS?: BespokeComponentVariantsList\n}\n\nexport interface BespokeComponentVariantsEntry<\n    VariantName extends string = string,\n> extends Record<string, unknown> {\n    name: VariantName\n    description: string\n    demoConfig?: BespokeAuthoredConfig\n    demoEmbedOptions?: EmbedOptions\n    defaultSize?: \"narrow\" | \"wide\" | \"widest\"\n}\n\nexport type BespokeComponentVariantsList<VariantName extends string = string> =\n    BespokeComponentVariantsEntry<VariantName>[]\n\nexport type BespokeConfigField =\n    | {\n          type: \"string\" | \"number\" | \"integer\" | \"boolean\"\n          default?: string\n          description: string\n      }\n    | {\n          type: \"enum\"\n          values: readonly string[]\n          default?: string\n          description: string\n      }\n    | {\n          type: \"custom\"\n          format: string\n          parse: (value: string) => unknown\n          description: string\n      }\n\nexport type BespokeConfigSpec = Record<string, BespokeConfigField>\n\nexport interface BespokeComponentDefinition {\n    /** URL to the ES module that exports the component's mount function, relative to BESPOKE_BASE_URL */\n    scriptUrl: string\n    /** Folder the component's data files are served from, relative to BESPOKE_DATA_URL */\n    dataUrl: string\n    /** The component's metadata file inside `dataUrl` */\n    metadataFilename: string\n}\n","import type {\n    BespokeAuthoredConfig,\n    BespokeComponentModule,\n    EmbedOptions,\n} from \"./bespokeComponentTypes.ts\"\n\n/**\n * Mount a bespoke component into a shadow DOM container.\n *\n * Creates (or reuses) a shadow root on the given element, dynamically imports\n * the JS module, and calls its `mount` function.\n *\n * Returns a dispose function that cleans up the mounted component.\n * Respects the provided AbortSignal to cancel mid-flight.\n */\nexport async function mountBespokeComponentInShadow({\n    container,\n    scriptUrl,\n    variant,\n    config,\n    embedOptions,\n    dataUrl,\n    metadataUrl,\n    signal,\n}: {\n    container: HTMLDivElement\n    scriptUrl: string\n    variant?: string\n    config?: BespokeAuthoredConfig\n    embedOptions?: EmbedOptions\n    dataUrl?: string\n    metadataUrl?: string\n    signal?: AbortSignal\n}): Promise<{ dispose?: () => void }> {\n    let shadowRoot = container.shadowRoot\n    if (!shadowRoot) {\n        shadowRoot = container.attachShadow({ mode: \"open\" })\n    }\n    shadowRoot.replaceChildren()\n\n    const module = (await import(\n        /* @vite-ignore */\n        scriptUrl\n    )) as BespokeComponentModule\n\n    if (signal?.aborted) return {}\n\n    if (typeof module.mount !== \"function\") {\n        throw new Error(\"Module does not export a mount function\")\n    }\n\n    const mountContainer = document.createElement(\"div\")\n    mountContainer.className = \"bespoke-container\"\n    shadowRoot.appendChild(mountContainer)\n\n    const result = await module.mount(mountContainer, {\n        variant,\n        config,\n        embedOptions,\n        dataUrl,\n        metadataUrl,\n    })\n    const dispose = typeof result === \"function\" ? result : undefined\n\n    return { dispose }\n}\n","import type {\n    BespokeComponentDataUrls,\n    BespokeComponentDefinition,\n} from \"./bespokeComponentTypes.ts\"\n\nexport const PRODUCTION_DATA_BASE_URL =\n    \"https://api.ourworldindata.org/v1/bespoke\"\n\nexport interface BespokeComponentUrls extends BespokeComponentDataUrls {\n    scriptUrl: string\n}\n\nexport function resolveBespokeComponentUrls(\n    definition: BespokeComponentDefinition,\n    {\n        scriptBaseUrl,\n        dataBaseUrl,\n    }: { scriptBaseUrl?: string; dataBaseUrl?: string }\n): BespokeComponentUrls {\n    const dataBase = dataBaseUrl?.trim() || PRODUCTION_DATA_BASE_URL\n\n    const scriptUrl = resolveUrl(definition.scriptUrl, scriptBaseUrl)\n    const dataUrl = resolveUrl(definition.dataUrl, dataBase)\n    const metadataUrl = resolveUrl(definition.metadataFilename, dataUrl)\n\n    return { scriptUrl, dataUrl, metadataUrl }\n}\n\nfunction resolveUrl(url: string, baseUrl: string | undefined): string {\n    const base = baseUrl?.trim().replace(/\\/$/, \"\")\n    if (!base) return url\n\n    if (url.startsWith(\"http://\") || url.startsWith(\"https://\")) return url\n\n    return `${base}/${url.replace(/^\\//, \"\")}`\n}\n","import {\n    EnrichedBlockBespokeComponent,\n    HIDE_IF_JS_DISABLED_CLASSNAME,\n    HIDE_IF_JS_ENABLED_CLASSNAME,\n} from \"@ourworldindata/types\"\nimport { LoadingIndicator } from \"@ourworldindata/components\"\nimport cx from \"clsx\"\nimport { useEffect, useMemo, useRef, useState } from \"react\"\nimport { useIntersectionObserver } from \"usehooks-ts\"\nimport Image from \"./Image.js\"\nimport { useImage } from \"../utils.js\"\nimport { BESPOKE_COMPONENT_REGISTRY } from \"../../../bespoke/shared/bespokeComponentRegistry.js\"\nimport {\n    isBespokeConfigError,\n    type EmbedOptions,\n} from \"../../../bespoke/shared/bespokeComponentTypes.js\"\nimport { mountBespokeComponentInShadow } from \"../../../bespoke/shared/bespokeComponentShadowDom.js\"\nimport { resolveBespokeComponentUrls } from \"../../../bespoke/shared/bespokeComponentUrls.js\"\nimport {\n    BESPOKE_BASE_URL,\n    BESPOKE_DATA_URL,\n} from \"../../../settings/clientSettings.mjs\"\n\n/**\n * Renders a bespoke component inside a Shadow DOM container.\n *\n * This is not a normal React component - it renders client-only and mounts\n * an external ES module into a Shadow DOM. This allows embedding\n * independently-built components that bundle their own JS and CSS,\n * isolated from the rest of the page styles.\n *\n * Example ArchieML:\n * {.bespoke-component}\n *   bundle: poverty-plots\n *   variant: distribution # Variant is optional, but can be useful when the bundle contains multiple charts that should be connected in state, but rendered in different places.\n *   {.config}\n *     country: \"USA\"\n *     year: 2020\n *   {}\n * {}\n */\nexport function BespokeComponent({\n    className,\n    block,\n    embedOptions,\n}: {\n    className?: string\n    block: EnrichedBlockBespokeComponent\n    embedOptions?: EmbedOptions\n}) {\n    const containerRef = useRef<HTMLDivElement>(null)\n    const disposeRef = useRef<(() => void) | null>(null)\n    const [isLoading, setIsLoading] = useState(true)\n    const [loadError, setLoadError] = useState<string | null>(null)\n\n    // Defer loading the component's JS until it approaches the viewport\n    const { ref: intersectionRef, isIntersecting: hasBeenVisible } =\n        useIntersectionObserver({\n            rootMargin: \"400px\",\n            freezeOnceVisible: true,\n        })\n\n    const definition = useMemo(\n        () => BESPOKE_COMPONENT_REGISTRY[block.bundle],\n        [block.bundle]\n    )\n\n    const fallbackImage = useImage(block.fallbackImageFilename)\n\n    const urls = useMemo(() => {\n        if (!definition || !BESPOKE_BASE_URL.trim()) return undefined\n        return resolveBespokeComponentUrls(definition, {\n            scriptBaseUrl: BESPOKE_BASE_URL,\n            dataBaseUrl: BESPOKE_DATA_URL,\n        })\n    }, [definition])\n\n    // Only surface config errors once the component approaches the viewport,\n    // like load errors, so the server-rendered markup stays the same\n    const configError = !hasBeenVisible\n        ? null\n        : !definition\n          ? `Unknown bespoke bundle: \"${block.bundle}\"`\n          : !urls\n            ? \"This custom component cannot be displayed on this page.\"\n            : null\n    const error = configError ?? loadError\n\n    useEffect(() => {\n        if (!hasBeenVisible || !definition || !urls) return\n\n        const container = containerRef.current\n        if (!container) return\n\n        const abortController = new AbortController()\n\n        // Reset in case we're remounting after the bundle or config changed\n        setLoadError(null)\n        setIsLoading(true)\n\n        mountBespokeComponentInShadow({\n            container,\n            scriptUrl: urls.scriptUrl,\n            variant: block.variant,\n            config: block.config,\n            embedOptions,\n            dataUrl: urls.dataUrl,\n            metadataUrl: urls.metadataUrl,\n            signal: abortController.signal,\n        })\n            .then(({ dispose }) => {\n                if (abortController.signal.aborted) return\n                if (dispose) disposeRef.current = dispose\n                setIsLoading(false)\n            })\n            .catch((err) => {\n                if (abortController.signal.aborted) return\n                const message =\n                    err instanceof Error ? err.message : \"Unknown error\"\n                setLoadError(\n                    isBespokeConfigError(err)\n                        ? `Invalid config for bespoke bundle \"${block.bundle}\": ${message}`\n                        : `Failed to load bespoke bundle \"${block.bundle}\": ${message}`\n                )\n                console.error(\n                    `Failed to hydrate bespoke bundle \"${block.bundle}\":`,\n                    err\n                )\n            })\n\n        return () => {\n            abortController.abort()\n            if (disposeRef.current) {\n                disposeRef.current()\n                disposeRef.current = null\n            }\n            container.shadowRoot?.replaceChildren()\n        }\n    }, [\n        block.bundle,\n        block.variant,\n        block.config,\n        embedOptions,\n        definition,\n        urls,\n        hasBeenVisible,\n    ])\n\n    if (error) {\n        return <BespokeError className={className} message={error} />\n    }\n\n    return (\n        <div className={className} ref={intersectionRef}>\n            {isLoading && (\n                <div className={HIDE_IF_JS_DISABLED_CLASSNAME}>\n                    <LoadingIndicator />\n                </div>\n            )}\n            {fallbackImage ? (\n                <Image\n                    className={cx(\n                        HIDE_IF_JS_ENABLED_CLASSNAME,\n                        \"bespoke-component__fallback-image\"\n                    )}\n                    imageData={fallbackImage}\n                    containerType={`bespoke-component--${block.size}`}\n                    shouldLightbox={false}\n                />\n            ) : (\n                <div className=\"js--show-warning-block-if-js-disabled\" />\n            )}\n            <div ref={containerRef}></div>\n        </div>\n    )\n}\n\nfunction BespokeError({\n    className,\n    message,\n}: {\n    className?: string\n    message: string\n}) {\n    return (\n        <div className={cx(className, \"bespoke-component__error\")}>\n            {message}\n        </div>\n    )\n}\n","import React from \"react\"\nimport cx from \"clsx\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faMinus, faPlus } from \"@fortawesome/free-solid-svg-icons\"\nimport { SiteAnalytics } from \"../../SiteAnalytics.js\"\n\nconst analytics = new SiteAnalytics()\n\nexport const Expander = (props: {\n    className?: string\n    children: React.ReactNode\n    title: string\n    heading?: string\n    subtitle?: string\n}) => {\n    const { className } = props\n\n    return (\n        <details\n            onToggle={(e) => {\n                const isOpen = e.currentTarget.open\n                analytics.logExpanderToggle(props.title, isOpen)\n            }}\n            className={cx(\"expander\", className)}\n        >\n            <summary className=\"expander__summary\">\n                {props.heading && (\n                    <span className=\"body-3-bold expander__heading\">\n                        {props.heading}\n                    </span>\n                )}\n                <span className=\"h4-semibold expander__title\">\n                    {props.title}\n                </span>\n                {props.subtitle && (\n                    <span className=\"body-3-regular expander__subtitle\">\n                        {props.subtitle}\n                    </span>\n                )}\n                <FontAwesomeIcon\n                    icon={faPlus}\n                    className=\"expander__status-icon plus\"\n                />\n                <FontAwesomeIcon\n                    icon={faMinus}\n                    className=\"expander__status-icon minus\"\n                />\n            </summary>\n            {props.children}\n        </details>\n    )\n}\n","import cx from \"clsx\"\nimport {\n    EnrichedBlockResourcePanel,\n    ResourcePanelIcon as TResourcePanelIcon,\n} from \"@ourworldindata/types\"\nimport { useContext } from \"react\"\nimport { AttachmentsContext } from \"../AttachmentsContext\"\nimport { BAKED_BASE_URL } from \"../../../settings/clientSettings.mjs\"\nimport { HybridLinkList } from \"./HybridLinkList\"\nimport { Button } from \"@ourworldindata/components\"\nimport { queryParamsToStr } from \"@ourworldindata/utils\"\n\nfunction DataCatalogButton({ buttonText }: { buttonText?: string }) {\n    const { tags } = useContext(AttachmentsContext)\n    const firstTagName = tags[0]?.name\n    if (!buttonText || !firstTagName) return null\n\n    const dataCatalogUrl =\n        `${BAKED_BASE_URL}/data` +\n        queryParamsToStr({\n            topics: firstTagName,\n        })\n    return (\n        <Button\n            href={dataCatalogUrl}\n            text={buttonText}\n            theme={\"solid-vermillion\"}\n        />\n    )\n}\n\nfunction ResourcePanelIcon({\n    className,\n    icon,\n}: {\n    className: string\n    icon?: TResourcePanelIcon\n}) {\n    if (!icon) return null\n\n    const iconMap: Record<TResourcePanelIcon, React.ReactElement> = {\n        chart: (\n            // Different from the FontAwesome linechart that we have\n            <svg fill=\"none\" viewBox=\"0 0 32 32\">\n                <path\n                    fill=\"#ce261e\"\n                    d=\"m5.1 27.546 6.158-11.564 7.034 6.254a1.93 1.93 0 0 0 2.444.098c.237-.18.43-.41.563-.676l5.32-10.59-1.755-.868-5.29 10.6-7.034-6.254a1.93 1.93 0 0 0-1.62-.492 1.93 1.93 0 0 0-1.368.964l-5.097 9.636V2.491H2.527v25.055a1.927 1.927 0 0 0 1.928 1.927h25.054v-1.927z\"\n                />\n            </svg>\n        ),\n    }\n\n    return <div className={className}>{iconMap[icon]}</div>\n}\n\nexport function ResourcePanel({\n    icon,\n    className,\n    title,\n    kicker,\n    buttonText,\n    links,\n}: EnrichedBlockResourcePanel & {\n    className?: string\n}) {\n    return (\n        <div className={cx(className, \"resource-panel\")}>\n            <ResourcePanelIcon className=\"resource-panel__icon\" icon={icon} />\n            {kicker && (\n                <span className=\"body-3-bold resource-panel__kicker\">\n                    {kicker}\n                </span>\n            )}\n            {title && (\n                <h3 className=\"h3-bold resource-panel__title\">{title}</h3>\n            )}\n            <HybridLinkList links={links} />\n            <DataCatalogButton buttonText={buttonText} />\n        </div>\n    )\n}\n","import LinkedA from \"./LinkedA.js\"\nimport cx from \"clsx\"\nimport { SpanLink } from \"@ourworldindata/types\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faArrowRight } from \"@fortawesome/free-solid-svg-icons\"\n\nexport function Cta(props: {\n    url: string\n    text: string\n    className?: string\n    shouldRenderLinks?: boolean\n}) {\n    // Transforming into the span shape because LinkedA takes care of resolving all attachments already\n    const asSpan: SpanLink = {\n        url: props.url,\n        children: [{ spanType: \"span-simple-text\", text: props.text }],\n        spanType: \"span-link\",\n    }\n    return (\n        <div className={cx(props.className, \"cta\")}>\n            {props.shouldRenderLinks ? <LinkedA span={asSpan} /> : props.text}\n            <FontAwesomeIcon icon={faArrowRight} />\n        </div>\n    )\n}\n","import { SearchResultHeaderSkeleton } from \"./SearchResultHeaderSkeleton.js\"\n\nexport const SearchDataInsightsResultsSkeleton = () => {\n    return (\n        <div className=\"grid span-cols-12 col-start-2\">\n            <section className=\"search-data-insights-results animate-pulse span-cols-12\">\n                <SearchResultHeaderSkeleton />\n                <div className=\"search-data-insights-results__hits\">\n                    <SearchDataInsightHitSkeleton />\n                    <SearchDataInsightHitSkeleton />\n                    <SearchDataInsightHitSkeleton />\n                    <SearchDataInsightHitSkeleton />\n                </div>\n            </section>\n        </div>\n    )\n}\n\nconst SearchDataInsightHitSkeleton = () => (\n    <div className=\"search-data-insight-hit-skeleton\">\n        <div className=\"search-data-insight-hit__image-container\">\n            {/* Needs non-empty children to maintain aspect ratio. */}\n            <div />\n        </div>\n        <div className=\"search-data-insight-hit-skeleton__date\" />\n        <div className=\"search-data-insight-hit-skeleton__title\" />\n        <div className=\"search-data-insight-hit-skeleton__title\" />\n        <div className=\"search-data-insight-hit-skeleton__title\" />\n    </div>\n)\n","import cx from \"clsx\"\nimport { getCanonicalUrl } from \"@ourworldindata/components\"\nimport { formatDate } from \"@ourworldindata/utils\"\nimport { OwidGdocType, DataInsightHit } from \"@ourworldindata/types\"\n\nexport const SearchDataInsightHit = ({\n    hit,\n    className,\n    onClick,\n}: {\n    hit: DataInsightHit\n    className?: string\n    onClick: VoidFunction\n}) => {\n    const href = getCanonicalUrl(\"\", {\n        slug: hit.slug,\n        content: { type: OwidGdocType.DataInsight },\n    })\n\n    return (\n        <a\n            className={cx(\"search-data-insight-hit\", className)}\n            href={href}\n            onClick={onClick}\n        >\n            <article>\n                {hit.thumbnailUrl && (\n                    <div className=\"search-data-insight-hit__image-container\">\n                        <img\n                            className=\"search-data-insight-hit__image\"\n                            src={hit.thumbnailUrl}\n                            alt=\"\"\n                        />\n                    </div>\n                )}\n                <div className=\"search-data-insight-hit__date\">\n                    {formatDate(new Date(hit.date))}\n                </div>\n                <h3 className=\"search-data-insight-hit__title\">{hit.title}</h3>\n            </article>\n        </a>\n    )\n}\n","import { useMemo } from \"react\"\nimport { useQuery } from \"@tanstack/react-query\"\nimport {\n    SearchResultType,\n    SearchState,\n    FEATURED_DATA_INSIGHTS_ID,\n} from \"@ourworldindata/types\"\nimport { createTopicFilter } from \"./search/searchUtils.js\"\nimport { queryDataInsights, searchQueryKeys } from \"./search/queries.js\"\nimport { getLiteSearchClient } from \"./search/searchClients.js\"\nimport { SearchDataInsightsResultsSkeleton } from \"./search/SearchDataInsightsResultsSkeleton.js\"\nimport { SearchDataInsightHit } from \"./search/SearchDataInsightHit.js\"\nimport { Button } from \"@ourworldindata/components\"\nimport cx from \"clsx\"\nimport { buildLatestPagePath } from \"./latest/latestUtils.js\"\nimport { useDocumentContext } from \"./gdocs/DocumentContext.js\"\nimport {\n    sentenceCaseIfNotTopicPage,\n    getTopicPageHeading,\n} from \"@ourworldindata/utils\"\n\nconst MAX_DATA_INSIGHTS_RESULTS = 1000 // setting to maximum allowed to get all results\n\nexport type FeaturedDataInsightsProps = {\n    topicName: string\n    className?: string\n}\n\nexport const FeaturedDataInsights = ({\n    topicName,\n    className,\n}: FeaturedDataInsightsProps) => {\n    const liteSearchClient = getLiteSearchClient()\n    const { gdocType } = useDocumentContext()\n    const headingFragment = getTopicPageHeading(\"dataInsights\", gdocType)\n    const headingCaseCorrected = `${headingFragment} on ${sentenceCaseIfNotTopicPage(topicName, gdocType, false)}`\n\n    const searchState = useMemo<SearchState>(\n        () => ({\n            query: \"\",\n            filters: [createTopicFilter(topicName)],\n            requireAllCountries: false,\n            resultType: SearchResultType.WRITING,\n        }),\n        [topicName]\n    )\n\n    const { data, isError, isLoading } = useQuery({\n        // reusing the same query key function as search for simplicity but\n        // would technically collide if using the same query client instance\n        queryKey: searchQueryKeys.dataInsights(searchState),\n        queryFn: () =>\n            queryDataInsights(\n                liteSearchClient,\n                searchState,\n                0,\n                MAX_DATA_INSIGHTS_RESULTS\n            ),\n        enabled: Boolean(topicName),\n    })\n\n    const hits = data?.hits ?? []\n    const totalResults = data?.nbHits ?? 0\n\n    if (isError || !topicName) return null\n    if (!isLoading && totalResults === 0) return null\n\n    return (\n        <section\n            className={cx(className, \"needs-dividers\")}\n            id={FEATURED_DATA_INSIGHTS_ID}\n        >\n            <h1 className=\"h1-semibold\">\n                <span>{headingCaseCorrected}</span>\n                <a\n                    className=\"deep-link\"\n                    aria-labelledby={FEATURED_DATA_INSIGHTS_ID}\n                    href={`#${FEATURED_DATA_INSIGHTS_ID}`}\n                />\n            </h1>\n            {isLoading ? (\n                <SearchDataInsightsResultsSkeleton />\n            ) : (\n                <>\n                    <div className=\"article-block__featured-data-insights__hits\">\n                        {hits.map((hit) => (\n                            <SearchDataInsightHit\n                                key={hit.objectID}\n                                className=\"article-block__featured-data-insights__hit\"\n                                hit={hit}\n                                onClick={() => undefined}\n                            />\n                        ))}\n                    </div>\n                    <div className=\"article-block__featured-data-insights__see-all\">\n                        <Button\n                            theme=\"solid-vermillion\"\n                            text=\"See all data insights\"\n                            href={buildLatestPagePath(\"data-insight\")}\n                            dataTrackNote=\"featured-data-insights-see-all\"\n                        />\n                    </div>\n                </>\n            )}\n        </section>\n    )\n}\n","import { PropsWithChildren } from \"react\"\nimport cx from \"clsx\"\nimport {\n    ExploreDataSectionAlignment,\n    EXPLORE_DATA_SECTION_ID,\n    EXPLORE_DATA_SECTION_DEFAULT_TITLE,\n} from \"@ourworldindata/types\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\nimport { sentenceCaseIfNotTopicPage } from \"@ourworldindata/utils\"\n\ntype ExploreDataSectionProps = PropsWithChildren<{\n    title?: string\n    className?: string\n    align: ExploreDataSectionAlignment\n}>\n\nexport const ExploreDataSection = ({\n    title = EXPLORE_DATA_SECTION_DEFAULT_TITLE,\n    className,\n    align,\n    children,\n}: ExploreDataSectionProps) => {\n    const { gdocType } = useDocumentContext()\n    const titleCaseCorrected = sentenceCaseIfNotTopicPage(title, gdocType)\n    return (\n        <section\n            id={EXPLORE_DATA_SECTION_ID}\n            className={cx(\n                className,\n                \"explore-data-section\",\n                `explore-data-section--${align}`,\n                \"no-dividers\"\n            )}\n        >\n            <header className=\"explore-data-section__header col-start-2 span-cols-12 col-md-start-3 span-md-cols-10 col-sm-start-2 span-sm-cols-12\">\n                <div className=\"icon\" aria-hidden=\"true\">\n                    {icon}\n                </div>\n                <h1>{titleCaseCorrected}</h1>\n            </header>\n            {children}\n        </section>\n    )\n}\n\nconst icon = (\n    <svg width=\"24\" height=\"24\" fill=\"none\">\n        <path\n            fill=\"#ce261e\"\n            d=\"M5.283 10.788h2.264v6.659H5.283zm3.774-3.996h2.264v11.321H9.057zm3.773 2.664h2.264v7.991H12.83z\"\n        />\n        <path\n            fill=\"#355174\"\n            d=\"M9.75 0A9.75 9.75 0 0 0 0 9.75c0 5.383 4.365 9.748 9.75 9.748 2.107 0 4.16-.684 5.846-1.95l5.686 5.685c.22.218.573.218.793 0l1.157-1.158a.56.56 0 0 0 0-.792l-5.684-5.684a9.75 9.75 0 0 0 1.95-5.85C19.498 4.365 15.133 0 9.75 0m0 1.95a7.8 7.8 0 0 1-.001 15.599 7.8 7.8 0 0 1-7.8-7.8 7.8 7.8 0 0 1 7.8-7.8Z\"\n        />\n    </svg>\n)\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faArrowDown,\n    faArrowRight,\n    faBook,\n    faChartSimple,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { TocHeadingWithSupertitle } from \"@ourworldindata/utils\"\nimport { SearchResultType } from \"@ourworldindata/types\"\nimport { buildSearchHrefForCard } from \"../../search/searchState.js\"\nimport cx from \"clsx\"\n\nconst DEFAULT_TITLE = \"Sections\"\nconst SECONDARY_CARDS = [\n    {\n        id: \"data\",\n        title: \"Data\",\n        description: \"See all charts\",\n        icon: faChartSimple,\n        resultType: SearchResultType.DATA,\n    },\n    {\n        id: \"writing\",\n        title: \"Writing\",\n        description: \"See all articles and insights\",\n        icon: faBook,\n        resultType: SearchResultType.WRITING,\n    },\n] as const\n\nexport const LTPTableOfContents = ({\n    toc,\n    className,\n    title,\n    tagName,\n}: {\n    toc: TocHeadingWithSupertitle[]\n    className?: string\n    title?: string\n    tagName: string\n}) => {\n    // The flat TOC carries both h1s and h2s; the LTP \"Sections\" list shows only\n    // the top-level (h1) headings.\n    const headings = toc.filter((heading) => !heading.isSubheading)\n\n    if (headings.length === 0) return null\n\n    const resolvedTitle = title ?? DEFAULT_TITLE\n    const resourceSectionTitle = `All our work on ${tagName}`\n\n    const resourceCards = SECONDARY_CARDS.map((card) => ({\n        ...card,\n        href: buildSearchHrefForCard(card.resultType, tagName),\n    }))\n\n    return (\n        <nav className={cx(className, \"ltp-toc\")} aria-label={resolvedTitle}>\n            <p className=\"ltp-toc__title col-start-2 span-cols-10 col-md-start-1 span-md-cols-12 span-sm-cols-12\">\n                {resolvedTitle}\n            </p>\n            <div className=\"ltp-toc__primary col-start-2 span-cols-7 col-md-start-1 span-md-cols-8 span-sm-cols-12\">\n                <ul className=\"ltp-toc__primary-list\">\n                    {headings.map((heading) => {\n                        const { slug, title } = heading\n                        if (!slug || !title) return null\n                        return (\n                            <li key={slug} className=\"ltp-toc__primary-item\">\n                                <FontAwesomeIcon icon={faArrowDown} />\n                                <a\n                                    href={`#${slug}`}\n                                    className=\"ltp-toc__primary-link\"\n                                    data-track-note=\"toc_link\"\n                                >\n                                    {title}\n                                </a>\n                            </li>\n                        )\n                    })}\n                </ul>\n            </div>\n            <div className=\"ltp-toc__secondary span-cols-3 span-md-cols-4 span-sm-cols-12\">\n                <p className=\"ltp-toc__secondary-title\">\n                    {resourceSectionTitle}\n                </p>\n                <ul className=\"ltp-toc__secondary-list\">\n                    {resourceCards.map(\n                        ({ id, title: cardTitle, description, icon, href }) => (\n                            <li key={id}>\n                                <a\n                                    className=\"ltp-toc__secondary-card\"\n                                    href={href}\n                                >\n                                    <div className=\"ltp-toc__secondary-card-content\">\n                                        <span\n                                            className=\"ltp-toc__secondary-card-icon\"\n                                            aria-hidden=\"true\"\n                                        >\n                                            <FontAwesomeIcon icon={icon} />\n                                        </span>\n                                        <div className=\"ltp-toc__secondary-card-text\">\n                                            <span className=\"ltp-toc__secondary-card-title\">\n                                                {cardTitle}\n                                            </span>\n                                            <span className=\"ltp-toc__secondary-card-description\">\n                                                {description}\n                                            </span>\n                                        </div>\n                                    </div>\n                                    <FontAwesomeIcon\n                                        icon={faArrowRight}\n                                        className=\"ltp-toc__secondary-card-arrow\"\n                                        aria-hidden=\"true\"\n                                    />\n                                </a>\n                            </li>\n                        )\n                    )}\n                </ul>\n            </div>\n        </nav>\n    )\n}\n","import { EnrichedBlockDataCallout } from \"@ourworldindata/types\"\nimport { Container, getLayout } from \"./layout.js\"\nimport ArticleBlock from \"./ArticleBlock.js\"\nimport { DataCalloutContext, DataCalloutContextType } from \"../utils.js\"\n\n/**\n * DataCallout component wraps data-callout block content and provides\n * context for span-callout spans to look up their values.\n */\nexport function DataCallout({\n    block,\n    containerType = \"default\",\n    shouldRenderLinks = true,\n}: {\n    block: EnrichedBlockDataCallout\n    containerType?: Container\n    shouldRenderLinks?: boolean\n}) {\n    const contextValue: DataCalloutContextType = {\n        url: block.url,\n    }\n\n    return (\n        <DataCalloutContext.Provider value={contextValue}>\n            <div className={getLayout(\"data-callout\", containerType)}>\n                {block.content.map((textBlock, index) => (\n                    <ArticleBlock\n                        key={index}\n                        b={textBlock}\n                        shouldRenderLinks={shouldRenderLinks}\n                    />\n                ))}\n            </div>\n        </DataCalloutContext.Provider>\n    )\n}\n\nexport default DataCallout\n","import { EnrichedBlockDataCalloutGroup } from \"@ourworldindata/types\"\nimport { Container, getLayout } from \"./layout.js\"\nimport ArticleBlock from \"./ArticleBlock.js\"\n\n/**\n * DataCalloutGroup is a logical container that wraps editorial content\n * (e.g. headings) together with data-callout blocks. During baking,\n * if none of the child data-callouts have data for the current entity,\n * the entire group's content is cleared — hiding the heading too.\n *\n * At render time, it simply renders its children; the visibility logic\n * has already been applied server-side.\n */\nexport function DataCalloutGroup({\n    block,\n    containerType = \"default\",\n    shouldRenderLinks = true,\n}: {\n    block: EnrichedBlockDataCalloutGroup\n    containerType?: Container\n    shouldRenderLinks?: boolean\n}) {\n    return (\n        <div className={getLayout(\"data-callout-group\", containerType)}>\n            {block.content.map((child, index) => (\n                <ArticleBlock\n                    key={index}\n                    b={child}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            ))}\n        </div>\n    )\n}\n\nexport default DataCalloutGroup\n","import { useState, useMemo, ReactNode } from \"react\"\nimport { EnrichedBlockCountryProfileSelector } from \"@ourworldindata/types\"\nimport {\n    FuzzySearch,\n    getRegionByCode,\n    getRegionByNameOrVariantName,\n    getTopicPageHeading,\n    sentenceCaseIfNotTopicPage,\n} from \"@ourworldindata/utils\"\nimport { useLinkedDocument } from \"../utils.js\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faArrowRight,\n    faMagnifyingGlass,\n    faTimesCircle,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { IS_ARCHIVE } from \"../../../settings/clientSettings.mjs\"\nimport { PROD_URL } from \"../../SiteConstants.js\"\nimport urlJoin from \"url-join\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\n\ninterface CountryItem {\n    name: string\n    code: string\n    slug: string\n    searchKeys: string[]\n}\n\ninterface FilteredCountryItem {\n    country: CountryItem\n    highlightIndexes?: number[]\n}\n\nconst FALLBACK_DEFAULT_COUNTRY_NAMES = [\n    \"United Kingdom\",\n    \"United States\",\n    \"China\",\n    \"Nigeria\",\n    \"India\",\n    \"Brazil\",\n]\n\nfunction resolveCountriesToItems(entityCodes: string[]): CountryItem[] {\n    return entityCodes\n        .map((code) => {\n            const region = getRegionByCode(code)\n            if (!region) return undefined\n            return {\n                name: region.name,\n                code: region.code,\n                slug: region.slug,\n                searchKeys: [\n                    region.name,\n                    ...(region.shortName ? [region.shortName] : []),\n                    ...(\"variantNames\" in region\n                        ? (region.variantNames ?? [])\n                        : []),\n                ],\n            }\n        })\n        .filter((item): item is CountryItem => !!item)\n        .sort((a, b) => a.name.localeCompare(b.name))\n}\n\nfunction resolveDefaultCountries(\n    defaultCountryNames: string[],\n    allCountries: CountryItem[]\n): CountryItem[] {\n    const allByCode = new Map(allCountries.map((c) => [c.code, c]))\n    return defaultCountryNames\n        .map((name) => {\n            const region = getRegionByNameOrVariantName(name)\n            if (!region) return undefined\n            return allByCode.get(region.code)\n        })\n        .filter((item): item is CountryItem => !!item)\n}\n\nexport function CountryProfileSelector({\n    block,\n    className,\n}: {\n    block: EnrichedBlockCountryProfileSelector\n    className?: string\n}) {\n    const { gdocType } = useDocumentContext()\n    const defaultHeading = getTopicPageHeading(\"countryProfiles\", gdocType)\n    const { linkedDocument, errorMessage } = useLinkedDocument(block.url)\n    const [searchTerm, setSearchTerm] = useState(\"\")\n\n    const availableEntityCodes = linkedDocument?.availableEntityCodes\n    const allCountries = useMemo(() => {\n        if (!availableEntityCodes) return []\n        return resolveCountriesToItems(availableEntityCodes)\n    }, [availableEntityCodes])\n\n    const defaultCountries = useMemo(() => {\n        const names = block.defaultCountries.length\n            ? block.defaultCountries\n            : FALLBACK_DEFAULT_COUNTRY_NAMES\n        return resolveDefaultCountries(names, allCountries)\n    }, [block.defaultCountries, allCountries])\n\n    const fuzzyCountrySearch = useMemo(\n        () =>\n            FuzzySearch.withKeyArray(\n                allCountries,\n                (country) => country.searchKeys,\n                (country) => country.code,\n                { limit: 6 }\n            ),\n        [allCountries]\n    )\n\n    const filteredCountries = useMemo<FilteredCountryItem[]>(() => {\n        const term = searchTerm.trim()\n        if (!term) {\n            return defaultCountries.map((country) => ({ country }))\n        }\n\n        return fuzzyCountrySearch.search(term).map((country) => ({\n            country,\n            highlightIndexes: fuzzyCountrySearch.single(term, country.name)\n                ?.indexes,\n        }))\n    }, [searchTerm, defaultCountries, fuzzyCountrySearch])\n\n    if (errorMessage) {\n        return (\n            <div className={className}>\n                <p className=\"country-profile-selector__error\">\n                    {errorMessage}\n                </p>\n            </div>\n        )\n    }\n\n    if (!linkedDocument) return null\n\n    const profileBaseUrl = urlJoin(\n        // We currently don't archive topic pages or profiles, so this component shouldn't appear in an archive\n        // but if it does (in an article, for some reason) we want to make sure the links point to the live site, not the archive.\n        IS_ARCHIVE ? PROD_URL : \"/\",\n        \"profile\",\n        linkedDocument.slug\n    )\n    const title = block.title ?? defaultHeading\n    const titleCaseCorrected = sentenceCaseIfNotTopicPage(title, gdocType)\n    const description =\n        block.description ?? \"Browse country-level data and insights.\"\n\n    return (\n        <div className={className}>\n            <div className=\"country-profile-selector grid grid-cols-12 col-start-2 span-cols-12\">\n                <div className=\"country-profile-selector__info span-cols-5 span-sm-cols-12\">\n                    <h2\n                        className=\"country-profile-selector__title h1-semibold\"\n                        id=\"country-profile-selector\"\n                    >\n                        {titleCaseCorrected}\n                    </h2>\n                    <p className=\"country-profile-selector__description body-2-regular\">\n                        {description}\n                    </p>\n                </div>\n                <div className=\"country-profile-selector__panel col-start-8 span-cols-4 col-md-start-7 span-md-cols-6 span-sm-cols-12\">\n                    <div className=\"country-profile-selector__search-wrapper\">\n                        <FontAwesomeIcon\n                            icon={faMagnifyingGlass}\n                            className=\"country-profile-selector__search-icon\"\n                        />\n\n                        <input\n                            type=\"text\"\n                            className=\"country-profile-selector__search\"\n                            placeholder=\"Search for a country...\"\n                            value={searchTerm}\n                            onChange={(e) => setSearchTerm(e.target.value)}\n                        />\n                        {searchTerm && (\n                            <button\n                                className=\"country-profile-selector__clear-button\"\n                                aria-label=\"Clear search\"\n                                onClick={() => setSearchTerm(\"\")}\n                            >\n                                <FontAwesomeIcon icon={faTimesCircle} />\n                            </button>\n                        )}\n                    </div>\n                    <div className=\"country-profile-selector__grid\">\n                        {filteredCountries.length > 0 ? (\n                            filteredCountries.map((country) => (\n                                <CountryProfileLink\n                                    key={country.country.code}\n                                    country={country.country}\n                                    highlightIndexes={country.highlightIndexes}\n                                    profileBaseUrl={profileBaseUrl}\n                                />\n                            ))\n                        ) : searchTerm.trim() ? (\n                            <NoResults searchTerm={searchTerm} />\n                        ) : null}\n                    </div>\n                </div>\n            </div>\n        </div>\n    )\n}\n\n/**\n * Takes e.g. \"United States\" and [0, 7]\n * returns [<strong>U</strong>, \"nited \", <strong>S</strong>, \"tates\"]\n */\nfunction highlightMatch(text: string, highlightIndexes?: number[]): ReactNode {\n    if (!highlightIndexes?.length) return text\n\n    const highlighted = new Set(highlightIndexes)\n    const parts: ReactNode[] = []\n    let start = 0\n\n    while (start < text.length) {\n        const isMatch = highlighted.has(start)\n        let end = start + 1\n        while (end < text.length && highlighted.has(end) === isMatch) {\n            end++\n        }\n\n        const chunk = text.slice(start, end)\n        parts.push(isMatch ? <strong key={start}>{chunk}</strong> : chunk)\n        start = end\n    }\n\n    return parts\n}\n\nfunction CountryProfileLink({\n    country,\n    highlightIndexes,\n    profileBaseUrl,\n}: {\n    country: CountryItem\n    highlightIndexes?: number[]\n    profileBaseUrl: string\n}) {\n    return (\n        <a\n            href={`${profileBaseUrl}/${country.slug}`}\n            className=\"country-profile-selector__country\"\n        >\n            <img\n                className=\"country-profile-selector__flag\"\n                src={`/images/flags/${country.code}.svg`}\n                alt=\"\"\n                loading=\"lazy\"\n            />\n            <span className=\"country-profile-selector__country-name body-3-medium\">\n                {highlightMatch(country.name, highlightIndexes)}\n                <FontAwesomeIcon\n                    className=\"country-profile-selector__arrow\"\n                    icon={faArrowRight}\n                />\n            </span>\n        </a>\n    )\n}\n\nfunction NoResults({ searchTerm }: { searchTerm: string }) {\n    return (\n        <p className=\"country-profile-selector__no-results body-3-medium\">\n            No country profiles found for &ldquo;{searchTerm}&rdquo;\n        </p>\n    )\n}\n","import cx from \"clsx\"\nimport { useContext, useState, useEffect } from \"react\"\n\nimport Callout from \"./Callout.js\"\nimport ChartStory from \"./ChartStory.js\"\nimport Chart from \"./Chart.js\"\nimport Donors from \"./Donors.js\"\nimport PullQuote from \"./PullQuote.js\"\nimport ChartRows from \"./ChartRows.js\"\nimport PullChart from \"./PullChart.js\"\nimport GuidedChart from \"./GuidedChart.js\"\nimport Recirc from \"./Recirc.js\"\nimport SubscribeBanner from \"./SubscribeBanner.js\"\nimport List from \"./List.js\"\nimport NumberedList from \"./NumberedList.js\"\nimport Image, { ImageParentContainer } from \"./Image.js\"\nimport {\n    EXPERIMENT_ARM_SEPARATOR,\n    EXPERIMENT_PREFIX,\n    OwidEnrichedGdocBlock,\n    spansToUnformattedPlainText,\n    TocHeadingWithSupertitle,\n    Url,\n    defaultExperimentState,\n    getExperimentState,\n    ExperimentState,\n} from \"@ourworldindata/utils\"\nimport { CodeSnippet, convertHeadingTextToId } from \"@ourworldindata/components\"\nimport SDGGrid from \"./SDGGrid.js\"\nimport { BlockErrorBoundary, BlockErrorFallback } from \"./BlockErrorBoundary.js\"\nimport { match } from \"ts-pattern\"\nimport SpanElements from \"./SpanElements.js\"\nimport Paragraph from \"./Paragraph.js\"\nimport People from \"./People.js\"\nimport SDGTableOfContents from \"./SDGTableOfContents.js\"\nimport urlSlug from \"url-slug\"\nimport { MissingData } from \"./MissingData.js\"\nimport { AdditionalCharts } from \"./AdditionalCharts.js\"\nimport { ProminentLink } from \"./ProminentLink.js\"\nimport { ExpandableParagraph } from \"../../blocks/ExpandableParagraph.js\"\nimport { TopicPageIntro } from \"./TopicPageIntro.js\"\nimport { KeyInsights } from \"./KeyInsights.js\"\nimport { ResearchAndWriting } from \"./ResearchAndWriting.js\"\nimport { AllCharts } from \"./AllCharts.js\"\nimport Video from \"./Video.js\"\nimport StaticViz from \"./StaticViz.js\"\nimport { Table } from \"./Table.js\"\nimport { ExplorerTiles } from \"./ExplorerTiles.js\"\nimport KeyIndicator from \"./KeyIndicator.js\"\nimport KeyIndicatorCollection from \"./KeyIndicatorCollection.js\"\nimport { PillRow } from \"./PillRow.js\"\nimport { HomepageIntro } from \"./HomepageIntro.js\"\nimport { HomepageSearch } from \"./HomepageSearch.js\"\nimport LatestDataInsightsBlock from \"./LatestDataInsightsBlock.js\"\nimport { Socials } from \"./Socials.js\"\nimport Person from \"./Person.js\"\nimport NarrativeChart from \"./NarrativeChart.js\"\nimport { BespokeComponent } from \"./BespokeComponent.js\"\nimport { Container, getLayout } from \"./layout.js\"\nimport { Expander } from \"./Expander.js\"\nimport { BlockSize, ChartConfigType } from \"@ourworldindata/types\"\nimport { normalizeBlockType, useLinkedChart } from \"../utils.js\"\nimport { ResourcePanel } from \"./ResourcePanel.js\"\nimport { Cta } from \"./Cta.js\"\nimport { AttachmentsContext } from \"../AttachmentsContext.js\"\nimport { FeaturedMetrics } from \"../../FeaturedMetrics.js\"\nimport { FeaturedDataInsights } from \"../../FeaturedDataInsights.js\"\nimport { ExploreDataSection } from \"./ExploreDataSection.js\"\nimport { LTPTableOfContents } from \"./LTPTableOfContents.js\"\nimport { DataCallout } from \"./DataCallout.js\"\nimport { DataCalloutGroup } from \"./DataCalloutGroup.js\"\nimport { CountryProfileSelector } from \"./CountryProfileSelector.js\"\n\nfunction ArticleBlockInternal({\n    b: rawBlock,\n    containerType = \"default\",\n    toc,\n    shouldRenderLinks = true,\n    interactiveImages = true,\n}: {\n    b: OwidEnrichedGdocBlock\n    containerType?: Container\n    toc?: TocHeadingWithSupertitle[]\n    shouldRenderLinks?: boolean\n    interactiveImages?: boolean\n}) {\n    const { tags } = useContext(AttachmentsContext)\n    const block = normalizeBlockType(rawBlock)\n\n    const { linkedChart } = useLinkedChart(\n        block.type === \"chart\" ? block.url : \"\"\n    )\n    // Special handling for mdims in side-by-side blocks to align them with\n    // other charts.\n    const isSideBySide = block.type === \"side-by-side\"\n    const sideBySideBlock = isSideBySide ? block : null\n    const leftBlock = sideBySideBlock?.left?.[0] || null\n    const rightBlock = sideBySideBlock?.right?.[0] || null\n    const leftIsChart = leftBlock?.type === \"chart\"\n    const rightIsChart = rightBlock?.type === \"chart\"\n    // Hooks must be called unconditionally.\n    const { linkedChart: leftLinkedChart } = useLinkedChart(\n        leftIsChart ? leftBlock.url : \"\"\n    )\n    const { linkedChart: rightLinkedChart } = useLinkedChart(\n        rightIsChart ? rightBlock.url : \"\"\n    )\n\n    // note: experimentState should NOT be used to conditionally render content b/c\n    // it will cause a flash of content before js loads.\n    const [experimentState, setExperimentState] = useState<ExperimentState>(\n        defaultExperimentState\n    )\n    useEffect(() => {\n        if (typeof window !== \"undefined\") {\n            const s = getExperimentState()\n            // oxlint-disable-next-line react/set-state-in-effect -- read client-only experiment cookies after hydration\n            setExperimentState(s)\n        }\n    }, [])\n\n    if (block.parseErrors.some(({ isWarning }) => !isWarning)) {\n        return (\n            <BlockErrorFallback\n                className={getLayout(\"default\", containerType)}\n                error={{\n                    name: `Error in ${block.type}`,\n                    message: block.parseErrors[0].message,\n                }}\n            />\n        )\n    }\n    return match(block)\n        .with({ type: \"aside\" }, ({ caption, position = \"right\" }) => (\n            <aside\n                className={cx(\n                    \"body-3-medium-italic\",\n                    \"article-block__aside\",\n                    getLayout(`aside--${position}`)\n                )}\n            >\n                <span className=\"article-block__aside-label\">Aside: </span>\n                {caption ? (\n                    <SpanElements\n                        spans={caption}\n                        shouldRenderLinks={shouldRenderLinks}\n                    />\n                ) : null}\n            </aside>\n        ))\n        .with({ type: \"all-charts\" }, (block) => {\n            const layoutClassName = getLayout(\"featured-metrics\", containerType)\n            const topicName = tags[0]?.name\n\n            if (!topicName) {\n                return (\n                    <BlockErrorFallback\n                        className={layoutClassName}\n                        error={{\n                            name: `Error in ${block.type}`,\n                            message:\n                                \"Featured metrics requires at least one tag on the document.\",\n                        }}\n                    />\n                )\n            }\n\n            return (\n                <>\n                    {/*\n                     * The id is swapped between AllCharts and FeaturedMetrics based\n                     * on experiment arm so that the #all-charts sticky nav link always\n                     * scrolls to the visible element. Browsers won't scroll to a\n                     * display:none element, so a static id on AllCharts would break\n                     * navigation in the featured-metrics arm.\n                     */}\n                    <AllCharts\n                        {...block}\n                        id={\n                            experimentState &&\n                            experimentState[\n                                `${EXPERIMENT_PREFIX}-all-charts-vs-featured-v1`\n                            ]?.isPageInExperiment &&\n                            experimentState[\n                                `${EXPERIMENT_PREFIX}-all-charts-vs-featured-v1`\n                            ]?.arm !== \"all-charts\"\n                                ? \"\"\n                                : \"all-charts\"\n                        }\n                        className={cx(\n                            getLayout(\"all-charts\", containerType),\n                            `${EXPERIMENT_PREFIX}-all-charts-vs-featured-v1${EXPERIMENT_ARM_SEPARATOR}featured-metrics--hide`\n                        )}\n                    />\n                    <FeaturedMetrics\n                        id={\n                            experimentState &&\n                            experimentState[\n                                `${EXPERIMENT_PREFIX}-all-charts-vs-featured-v1`\n                            ]?.isPageInExperiment &&\n                            experimentState[\n                                `${EXPERIMENT_PREFIX}-all-charts-vs-featured-v1`\n                            ]?.arm === \"featured-metrics\"\n                                ? \"all-charts\"\n                                : \"\"\n                        }\n                        topicName={topicName}\n                        className={cx(\n                            layoutClassName,\n                            `${EXPERIMENT_PREFIX}-all-charts-vs-featured-v1${EXPERIMENT_ARM_SEPARATOR}featured-metrics--show`\n                        )}\n                    />\n                </>\n            )\n        })\n        .with({ type: \"chart\" }, (block) => {\n            const resolvedUrl = linkedChart?.resolvedUrl ?? block.url\n            const { isExplorer, queryParams } = Url.fromURL(resolvedUrl)\n            const areControlsHidden = queryParams.hideControls === \"true\"\n            const size = block.size ?? BlockSize.Wide\n            const layoutSubtype =\n                isExplorer && !areControlsHidden\n                    ? `explorer--${size}`\n                    : `chart--${size}`\n            return (\n                <Chart\n                    className={cx(\n                        \"article-block__chart\",\n                        getLayout(layoutSubtype, containerType),\n                        {\n                            \"hide-sm-only\": block.visibility === \"desktop\",\n                            \"show-sm-only\": block.visibility === \"mobile\",\n                        }\n                    )}\n                    d={block}\n                    fullWidthOnMobile={true}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            )\n        })\n        .with({ type: \"narrative-chart\" }, (block) => {\n            const size = block.size ?? BlockSize.Wide\n            return (\n                <NarrativeChart\n                    className={cx(\n                        \"article-block__chart\",\n                        getLayout(`chart--${size}`, containerType)\n                    )}\n                    d={block}\n                    fullWidthOnMobile={true}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            )\n        })\n        .with({ type: \"code\" }, (block) => (\n            <CodeSnippet\n                className={getLayout(\"code-snippet\", containerType)}\n                code={block.text.map((text) => text.value.text).join(\"\\n\")}\n            />\n        ))\n        .with({ type: \"donors\" }, (_block) => (\n            <Donors className={getLayout(\"donors\", containerType)} />\n        ))\n        .with({ type: \"callout\" }, (block) => (\n            <Callout\n                className={getLayout(\"callout\", containerType)}\n                block={block}\n                shouldRenderLinks={shouldRenderLinks}\n            />\n        ))\n        .with({ type: \"chart-story\" }, (block) => (\n            <ChartStory\n                d={block}\n                className={getLayout(\"chart-story\", containerType)}\n                shouldRenderLinks={shouldRenderLinks}\n            />\n        ))\n        .with({ type: \"image\" }, (block) => (\n            <figure\n                className={cx(\n                    \"article-block__image\",\n                    getLayout(`image--${block.size}`, containerType),\n                    {\n                        \"hide-sm-only\": block.visibility === \"desktop\",\n                        \"show-sm-only\": block.visibility === \"mobile\",\n                    }\n                )}\n            >\n                <Image\n                    filename={block.filename}\n                    smallFilename={block.smallFilename}\n                    alt={block.alt}\n                    hasOutline={block.hasOutline}\n                    containerType={containerType as ImageParentContainer}\n                    preferSmallFilename={block.preferSmallFilename}\n                    shouldLightbox={interactiveImages}\n                />\n                {block.caption ? (\n                    <figcaption\n                        className={getLayout(\"image-caption\", containerType)}\n                    >\n                        <SpanElements\n                            spans={block.caption}\n                            shouldRenderLinks={shouldRenderLinks}\n                        />\n                    </figcaption>\n                ) : null}\n            </figure>\n        ))\n        .with({ type: \"video\" }, (block) => (\n            <Video\n                className={cx(getLayout(\"video\", containerType), {\n                    \"hide-sm-only\": block.visibility === \"desktop\",\n                    \"show-sm-only\": block.visibility === \"mobile\",\n                })}\n                url={block.url}\n                shouldLoop={block.shouldLoop}\n                shouldAutoplay={block.shouldAutoplay}\n                caption={block.caption}\n                filename={block.filename}\n                shouldRenderLinks={shouldRenderLinks}\n            />\n        ))\n        .with({ type: \"static-viz\" }, (block) => (\n            <StaticViz\n                className={cx(\n                    \"article-block__static-viz\",\n                    getLayout(`static-viz--${block.size}`, containerType)\n                )}\n                name={block.name}\n                containerType={containerType as ImageParentContainer}\n                hasOutline={block.hasOutline}\n                caption={block.caption}\n                shouldRenderLinks={shouldRenderLinks}\n            />\n        ))\n        .with({ type: \"people\" }, (block) => (\n            <People className={getLayout(\"people\", containerType)}>\n                {block.items.map((block, index) => (\n                    <ArticleBlock key={index} b={block} />\n                ))}\n            </People>\n        ))\n        .with({ type: \"people-rows\" }, (block) => (\n            <People\n                className={getLayout(\"people-rows\", containerType)}\n                columns={block.columns}\n            >\n                {block.people.map((block, index) => (\n                    <ArticleBlock key={index} b={block} />\n                ))}\n            </People>\n        ))\n        .with({ type: \"person\" }, (block) => <Person person={block} />)\n        .with({ type: \"pull-quote\" }, (block) => (\n            <PullQuote\n                className={getLayout(\n                    `pull-quote--${block.align}`,\n                    containerType\n                )}\n                d={block}\n                shouldRenderLinks={shouldRenderLinks}\n            />\n        ))\n        .with({ type: \"guided-chart\" }, (block) => (\n            <GuidedChart\n                className={getLayout(\"guided-chart\", containerType)}\n                containerType={containerType}\n                d={block}\n                shouldRenderLinks={shouldRenderLinks}\n                interactiveImages={interactiveImages}\n            />\n        ))\n        .with({ type: \"recirc\" }, (block) => (\n            <Recirc\n                className={getLayout(`recirc--${block.align}`, containerType)}\n                d={block}\n            />\n        ))\n        .with({ type: \"subscribe-banner\" }, (block) => (\n            <SubscribeBanner\n                className={getLayout(\n                    `subscribe-banner--${block.align}`,\n                    containerType\n                )}\n                d={block}\n            />\n        ))\n        .with({ type: \"resource-panel\" }, (block) => (\n            <ResourcePanel\n                {...block}\n                className={getLayout(`resource-panel`, containerType)}\n            />\n        ))\n        .with({ type: \"numbered-list\" }, (block) => (\n            <NumberedList\n                className={getLayout(\"numbered-list\", containerType)}\n                d={block}\n                shouldRenderLinks={shouldRenderLinks}\n            />\n        ))\n        .with({ type: \"list\" }, (block) => (\n            <List\n                className={getLayout(\"list\", containerType)}\n                d={block}\n                shouldRenderLinks={shouldRenderLinks}\n            />\n        ))\n        .with({ type: \"text\" }, (block) => {\n            return (\n                <Paragraph\n                    d={block}\n                    className={getLayout(\"text\", containerType)}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            )\n        })\n        .with({ type: \"simple-text\" }, (block) => <>{block.value.text}</>)\n        .with({ type: \"heading\", level: 1 }, (block) => (\n            <h1\n                className={cx(\n                    \"h1-semibold\",\n                    getLayout(\"heading\", containerType)\n                )}\n                id={convertHeadingTextToId(block.text)}\n            >\n                <SpanElements\n                    spans={block.text}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n                {shouldRenderLinks && (\n                    <a\n                        className=\"deep-link\"\n                        href={`#${convertHeadingTextToId(block.text)}`}\n                    />\n                )}\n            </h1>\n        ))\n        .with({ type: \"heading\", level: 2 }, (block) => {\n            const { supertitle, text } = block\n\n            const id = supertitle\n                ? urlSlug(\n                      `${spansToUnformattedPlainText(\n                          supertitle\n                      )}-${spansToUnformattedPlainText(text)}`\n                  )\n                : convertHeadingTextToId(block.text)\n\n            return (\n                <>\n                    {supertitle ? (\n                        <div className={getLayout(\"divider\", containerType)} />\n                    ) : null}\n                    <h2\n                        className={cx(\n                            \"h2-bold\",\n                            getLayout(\"heading\", containerType),\n                            {\n                                \"has-supertitle\": supertitle\n                                    ? spansToUnformattedPlainText(supertitle)\n                                    : \"\",\n                            }\n                        )}\n                        id={id}\n                    >\n                        {supertitle ? (\n                            <div className=\"article-block__heading-supertitle overline-black-caps\">\n                                <SpanElements\n                                    spans={supertitle}\n                                    shouldRenderLinks={shouldRenderLinks}\n                                />\n                            </div>\n                        ) : null}\n                        <SpanElements\n                            spans={text}\n                            shouldRenderLinks={shouldRenderLinks}\n                        />\n                        {shouldRenderLinks && (\n                            <a className=\"deep-link\" href={`#${id}`} />\n                        )}\n                    </h2>\n                </>\n            )\n        })\n        .with({ type: \"heading\", level: 3 }, (block) => {\n            const { supertitle, text } = block\n            const id = supertitle\n                ? urlSlug(\n                      `${spansToUnformattedPlainText(\n                          supertitle\n                      )}-${spansToUnformattedPlainText(text)}`\n                  )\n                : convertHeadingTextToId(block.text)\n            return (\n                <h3\n                    className={cx(\n                        \"h3-bold\",\n                        getLayout(\"heading\", containerType),\n                        {\n                            \"has-supertitle\": supertitle\n                                ? spansToUnformattedPlainText(supertitle)\n                                : undefined,\n                        }\n                    )}\n                    id={id}\n                >\n                    {supertitle ? (\n                        <div className=\"article-block__heading-supertitle overline-black-caps\">\n                            <SpanElements\n                                spans={supertitle}\n                                shouldRenderLinks={shouldRenderLinks}\n                            />\n                        </div>\n                    ) : null}\n                    <SpanElements\n                        spans={text}\n                        shouldRenderLinks={shouldRenderLinks}\n                    />\n                    {shouldRenderLinks && (\n                        <a\n                            className=\"deep-link\"\n                            aria-labelledby={id}\n                            href={`#${id}`}\n                        />\n                    )}\n                </h3>\n            )\n        })\n        .with({ type: \"heading\", level: 4 }, (block) => (\n            <h4\n                className={cx(\n                    \"h4-semibold\",\n                    getLayout(\"heading\", containerType)\n                )}\n                id={convertHeadingTextToId(block.text)}\n            >\n                <SpanElements\n                    spans={block.text}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            </h4>\n        ))\n        .with({ type: \"heading\", level: 5 }, (block) => (\n            <h5\n                className={cx(\n                    \"overline-black-caps\",\n                    getLayout(\"heading\", containerType)\n                )}\n                id={convertHeadingTextToId(block.text)}\n            >\n                <SpanElements\n                    spans={block.text}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            </h5>\n        ))\n        .with(\n            { type: \"heading\" },\n            // during parsing we take care of level being in a valid range\n            () => null\n        )\n        .with({ type: \"html\" }, (block) => (\n            <div\n                className={getLayout(\"html\", containerType)}\n                dangerouslySetInnerHTML={{ __html: block.value }}\n            />\n        ))\n        .with({ type: \"horizontal-rule\" }, () => (\n            <hr className={getLayout(\"horizontal-rule\", containerType)} />\n        ))\n        .with({ type: \"sdg-grid\" }, (block) => (\n            <SDGGrid\n                className={getLayout(\"sdg-grid\", containerType)}\n                d={block}\n            />\n        ))\n        .with({ type: \"sticky-right\" }, (block) => {\n            const firstBlock = block.left[0]\n            let separateHeading = null\n            let left = block.left\n            if (\n                firstBlock?.type === \"heading\" &&\n                block.right[0]?.type !== \"chart-story\"\n            ) {\n                separateHeading = firstBlock\n                left = block.left.slice(1)\n            }\n            return (\n                <div className={getLayout(\"sticky-right\", containerType)}>\n                    {separateHeading && (\n                        <ArticleBlock\n                            b={separateHeading}\n                            containerType=\"sticky-right-left-heading-column\"\n                            shouldRenderLinks={shouldRenderLinks}\n                            interactiveImages={interactiveImages}\n                        />\n                    )}\n                    <div\n                        className={cx(\n                            getLayout(\n                                \"sticky-right-left-column\",\n                                containerType\n                            ),\n                            { \"grid-row-start-2\": separateHeading }\n                        )}\n                    >\n                        {left.map((item, i) => (\n                            <ArticleBlock\n                                key={i}\n                                b={item}\n                                containerType=\"sticky-right-left-column\"\n                                shouldRenderLinks={shouldRenderLinks}\n                                interactiveImages={interactiveImages}\n                            />\n                        ))}\n                    </div>\n                    <div\n                        className={cx(\n                            getLayout(\n                                \"sticky-right-right-column\",\n                                containerType\n                            ),\n                            {\n                                \"grid-row-start-2 grid-md-row-start-auto\":\n                                    separateHeading,\n                            }\n                        )}\n                    >\n                        <div className=\"sticky-column-wrapper grid grid-cols-7 span-cols-7 grid-md-cols-10 span-md-cols-10 grid-sm-cols-12 span-sm-cols-12\">\n                            {block.right.map((item, i) => (\n                                <ArticleBlock\n                                    key={i}\n                                    b={item}\n                                    containerType=\"sticky-right-right-column\"\n                                    shouldRenderLinks={shouldRenderLinks}\n                                    interactiveImages={interactiveImages}\n                                />\n                            ))}\n                        </div>\n                    </div>\n                </div>\n            )\n        })\n        .with({ type: \"sticky-left\" }, (block) => (\n            <div className={getLayout(\"sticky-left\", containerType)}>\n                <div\n                    className={getLayout(\n                        \"sticky-left-left-column\",\n                        containerType\n                    )}\n                >\n                    <div className=\"sticky-column-wrapper grid grid-cols-7 span-cols-7 grid-md-cols-10 span-md-cols-10 grid-sm-cols-12 span-sm-cols-12\">\n                        {block.left.map((item, i) => (\n                            <ArticleBlock\n                                key={i}\n                                b={item}\n                                containerType=\"sticky-left-left-column\"\n                                shouldRenderLinks={shouldRenderLinks}\n                                interactiveImages={interactiveImages}\n                            />\n                        ))}\n                    </div>\n                </div>\n                <div\n                    className={getLayout(\n                        \"sticky-left-right-column\",\n                        containerType\n                    )}\n                >\n                    {block.right.map((item, i) => (\n                        <ArticleBlock\n                            key={i}\n                            b={item}\n                            containerType=\"sticky-left-right-column\"\n                            shouldRenderLinks={shouldRenderLinks}\n                            interactiveImages={interactiveImages}\n                        />\n                    ))}\n                </div>\n            </div>\n        ))\n        .with({ type: \"side-by-side\" }, (block) => {\n            // Use the chart info detected at the top level. The compensation\n            // offsets the multi-dim's controls row, which is only rendered\n            // when the embed's controls are visible (no hideControls=true).\n            const controlsHidden = (url: string | undefined): boolean =>\n                Url.fromURL(url ?? \"\").queryParams.hideControls === \"true\"\n            const leftIsMdimWithControls =\n                leftLinkedChart?.configType === ChartConfigType.MultiDim &&\n                !controlsHidden(leftIsChart ? leftBlock.url : undefined)\n            const rightIsMdimWithControls =\n                rightLinkedChart?.configType === ChartConfigType.MultiDim &&\n                !controlsHidden(rightIsChart ? rightBlock.url : undefined)\n\n            // Check if both are charts and one is mdim and the other isn't\n            const shouldApplyCompensation =\n                leftIsChart &&\n                rightIsChart &&\n                leftIsMdimWithControls !== rightIsMdimWithControls\n\n            return (\n                <div className={getLayout(\"side-by-side\", containerType)}>\n                    <div\n                        className={cx(\n                            \"grid grid-cols-6 span-cols-6 span-sm-cols-12\",\n                            {\n                                \"mdim-compensation\":\n                                    shouldApplyCompensation &&\n                                    !leftIsMdimWithControls,\n                            }\n                        )}\n                    >\n                        {block.left.map((item, i) => (\n                            <ArticleBlock\n                                key={i}\n                                b={item}\n                                containerType=\"side-by-side\"\n                                shouldRenderLinks={shouldRenderLinks}\n                                interactiveImages={interactiveImages}\n                            />\n                        ))}\n                    </div>\n                    <div\n                        className={cx(\n                            \"grid grid-cols-6 span-cols-6 span-sm-cols-12\",\n                            {\n                                \"mdim-compensation\":\n                                    shouldApplyCompensation &&\n                                    !rightIsMdimWithControls,\n                            }\n                        )}\n                    >\n                        {block.right.map((item, i) => (\n                            <ArticleBlock\n                                key={i}\n                                b={item}\n                                containerType=\"side-by-side\"\n                                shouldRenderLinks={shouldRenderLinks}\n                                interactiveImages={interactiveImages}\n                            />\n                        ))}\n                    </div>\n                </div>\n            )\n        })\n        .with({ type: \"gray-section\" }, (block) => (\n            <div className={getLayout(\"gray-section\")}>\n                {block.items.map((item, i) => (\n                    <ArticleBlock\n                        key={i}\n                        b={item}\n                        shouldRenderLinks={shouldRenderLinks}\n                        interactiveImages={interactiveImages}\n                    />\n                ))}\n            </div>\n        ))\n        .with({ type: \"explore-data-section\" }, (block) => (\n            <ExploreDataSection\n                title={block.title}\n                align={block.align}\n                className={getLayout(\"explore-data-section\")}\n            >\n                {block.content.map((item, i) => (\n                    <ArticleBlock\n                        key={i}\n                        b={item}\n                        shouldRenderLinks={shouldRenderLinks}\n                        interactiveImages={interactiveImages}\n                    />\n                ))}\n            </ExploreDataSection>\n        ))\n        .with({ type: \"conditional-section\" }, (block) => (\n            <>\n                {block.content.map((item, i) => (\n                    <ArticleBlock\n                        key={i}\n                        b={item}\n                        containerType={containerType}\n                        toc={toc}\n                        shouldRenderLinks={shouldRenderLinks}\n                        interactiveImages={interactiveImages}\n                    />\n                ))}\n            </>\n        ))\n        .with({ type: \"prominent-link\" }, (block) => (\n            <ProminentLink\n                className={getLayout(\"prominent-link\", containerType)}\n                {...block}\n                shouldRenderLinks={shouldRenderLinks}\n            />\n        ))\n        .with({ type: \"sdg-toc\" }, () => {\n            return toc ? (\n                <SDGTableOfContents\n                    toc={toc}\n                    title=\"List of targets and indicators\"\n                    className={getLayout(\"toc\", containerType)}\n                />\n            ) : null\n        })\n        .with({ type: \"ltp-toc\" }, (block) => {\n            const layoutClassName = getLayout(\"ltp-toc\", containerType)\n            const tagName = tags[0]?.name\n\n            if (!tagName) {\n                return (\n                    <BlockErrorFallback\n                        className={layoutClassName}\n                        error={{\n                            name: `Error in ${block.type}`,\n                            message:\n                                \"Linear topic TOC requires at least one tag on the document.\",\n                        }}\n                    />\n                )\n            }\n\n            return toc?.length ? (\n                <LTPTableOfContents\n                    title={block.title}\n                    toc={toc}\n                    tagName={tagName}\n                    className={layoutClassName}\n                />\n            ) : null\n        })\n        .with({ type: \"missing-data\" }, () => (\n            <MissingData className={getLayout(\"missing-data\", containerType)} />\n        ))\n        .with({ type: \"additional-charts\" }, (block) => (\n            <AdditionalCharts\n                items={block.items}\n                className={getLayout(\"additional-charts\", containerType)}\n            />\n        ))\n        .with({ type: \"expandable-paragraph\" }, (block) => (\n            <ExpandableParagraph\n                className={getLayout(\"expandable-paragraph\", containerType)}\n            >\n                {block.items.map((item, i) => (\n                    <ArticleBlock\n                        key={i}\n                        b={item}\n                        shouldRenderLinks={shouldRenderLinks}\n                        interactiveImages={interactiveImages}\n                    />\n                ))}\n            </ExpandableParagraph>\n        ))\n        .with({ type: \"expander\" }, (block) => (\n            <Expander\n                className={getLayout(\"expander\", containerType)}\n                {...block}\n            >\n                <div className=\"expander__content\">\n                    {block.content.map((item, i) => (\n                        <ArticleBlock\n                            key={i}\n                            b={item}\n                            shouldRenderLinks={shouldRenderLinks}\n                            interactiveImages={interactiveImages}\n                        />\n                    ))}\n                </div>\n            </Expander>\n        ))\n        .with({ type: \"topic-page-intro\" }, (block) => (\n            <TopicPageIntro\n                {...block}\n                className={getLayout(\"topic-page-intro\", containerType)}\n            />\n        ))\n        .with({ type: \"cookie-notice\" }, () => {\n            return (\n                <div\n                    className={cx(\n                        getLayout(\"cookie-notice\", containerType),\n                        \"wp-block-cookie-preferences\"\n                    )}\n                ></div>\n            )\n        })\n        .with({ type: \"cta\" }, (block) => {\n            return (\n                <Cta\n                    {...block}\n                    className={getLayout(\"cta\", containerType)}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            )\n        })\n        .with({ type: \"key-insights\" }, (block) => (\n            <KeyInsights\n                {...block}\n                className={getLayout(\"key-insights\", containerType)}\n            />\n        ))\n        .with({ type: \"research-and-writing\" }, (block) => (\n            <ResearchAndWriting\n                {...block}\n                className={getLayout(\"research-and-writing\", containerType)}\n            />\n        ))\n        .with({ type: \"align\" }, (block) => (\n            <div\n                className={cx(\n                    `align-${block.alignment}`,\n                    getLayout(\"align\", containerType)\n                )}\n            >\n                {block.content.map((b, i) => (\n                    <ArticleBlock\n                        key={i}\n                        b={b}\n                        shouldRenderLinks={shouldRenderLinks}\n                        interactiveImages={interactiveImages}\n                    />\n                ))}\n            </div>\n        ))\n        .with({ type: \"table\" }, (block) => (\n            <Table\n                className={cx(\n                    getLayout(`table--${block.size}`, containerType),\n                    `article-block__table--${block.template}`\n                )}\n                {...block}\n                shouldRenderLinks={shouldRenderLinks}\n                interactiveImages={interactiveImages}\n            />\n        ))\n        .with({ type: \"blockquote\" }, (block) => {\n            // If the citation exists and is a URL, it uses the cite attribute\n            // If the citation exists and is not a URL, it uses the footer\n            // Otherwise, we show nothing for cases where the citation is written in the surrounding text\n            const isCitationAUrl = Boolean(block.citation?.startsWith(\"http\"))\n            const shouldShowCitationInFooter = block.citation && !isCitationAUrl\n            const blockquoteProps = isCitationAUrl\n                ? { cite: block.citation }\n                : {}\n\n            return (\n                <blockquote\n                    className={cx(getLayout(\"blockquote\", containerType))}\n                    {...blockquoteProps}\n                >\n                    {block.text.map((textBlock, i) => (\n                        <Paragraph\n                            className=\"article-block__text\"\n                            d={textBlock}\n                            key={i}\n                            shouldRenderLinks={shouldRenderLinks}\n                        />\n                    ))}\n\n                    {shouldShowCitationInFooter ? (\n                        <footer>\n                            – <cite>{block.citation}</cite>\n                        </footer>\n                    ) : null}\n                </blockquote>\n            )\n        })\n        .with({ type: \"explorer-tiles\" }, (block) => (\n            <ExplorerTiles\n                className={getLayout(\"explorer-tiles\", containerType)}\n                {...block}\n            />\n        ))\n        .with({ type: \"latest-data-insights\" }, () => (\n            <LatestDataInsightsBlock\n                className={getLayout(\"latest-data-insights\", containerType)}\n            />\n        ))\n        .with({ type: \"key-indicator\" }, (block) => (\n            <KeyIndicator className={getLayout(\"key-indicator\")} d={block} />\n        ))\n        .with({ type: \"key-indicator-collection\" }, (block) => (\n            <KeyIndicatorCollection\n                className={getLayout(\"key-indicator-collection\")}\n                d={block}\n            />\n        ))\n        .with({ type: \"pill-row\" }, (block) => {\n            return (\n                <PillRow\n                    {...block}\n                    className={getLayout(\"pill-row\", containerType)}\n                />\n            )\n        })\n        .with({ type: \"homepage-search\" }, (_) => {\n            return (\n                <HomepageSearch\n                    className={getLayout(\"homepage-search\", containerType)}\n                />\n            )\n        })\n        .with({ type: \"homepage-intro\" }, (block) => {\n            return (\n                <HomepageIntro\n                    className={getLayout(\"homepage-intro\")}\n                    {...block}\n                />\n            )\n        })\n        .with({ type: \"featured-metrics\" }, () => {\n            const layoutClassName = getLayout(\"featured-metrics\", containerType)\n            const topicName = tags[0]?.name\n\n            if (!topicName) {\n                return (\n                    <BlockErrorFallback\n                        className={layoutClassName}\n                        error={{\n                            name: `Error in ${block.type}`,\n                            message:\n                                \"Featured metrics requires at least one tag on the document.\",\n                        }}\n                    />\n                )\n            }\n\n            return (\n                <FeaturedMetrics\n                    topicName={topicName}\n                    className={layoutClassName}\n                />\n            )\n        })\n        .with({ type: \"featured-data-insights\" }, () => {\n            const layoutClassName = getLayout(\n                \"featured-data-insights\",\n                containerType\n            )\n            const topicName = tags[0]?.name\n\n            if (!topicName) {\n                return (\n                    <BlockErrorFallback\n                        className={layoutClassName}\n                        error={{\n                            name: `Error in ${block.type}`,\n                            message:\n                                \"Featured data insights requires at least one tag on the document.\",\n                        }}\n                    />\n                )\n            }\n\n            return (\n                <FeaturedDataInsights\n                    topicName={topicName}\n                    className={layoutClassName}\n                />\n            )\n        })\n        .with({ type: \"socials\" }, (block) => (\n            <Socials\n                className={getLayout(\"socials\", containerType)}\n                links={block.links}\n            />\n        ))\n        .with({ type: \"data-callout\" }, (block) => (\n            <DataCallout\n                block={block}\n                containerType={containerType}\n                shouldRenderLinks={shouldRenderLinks}\n            />\n        ))\n        .with({ type: \"data-callout-group\" }, (block) => (\n            <DataCalloutGroup\n                block={block}\n                containerType={containerType}\n                shouldRenderLinks={shouldRenderLinks}\n            />\n        ))\n        .with({ type: \"country-profile-selector\" }, (block) => (\n            <CountryProfileSelector\n                block={block}\n                className={getLayout(\"country-profile-selector\", containerType)}\n            />\n        ))\n        .with({ type: \"bespoke-component\" }, (block) => (\n            <BespokeComponent\n                className={getLayout(\n                    `bespoke-component--${block.size}`,\n                    containerType\n                )}\n                block={block}\n            />\n        ))\n        .with({ type: \"chart-rows\" }, (block) => (\n            <ChartRows\n                className={getLayout(\"chart-rows\", containerType)}\n                d={block}\n                shouldRenderLinks={shouldRenderLinks}\n            />\n        ))\n        .with({ type: \"pull-chart\" }, (block) => (\n            <PullChart\n                className={getLayout(\"pull-chart\", containerType)}\n                d={block}\n                shouldRenderLinks={shouldRenderLinks}\n            />\n        ))\n        .exhaustive()\n}\n\nexport default function ArticleBlock({\n    b: block,\n    containerType = \"default\",\n    toc,\n    shouldRenderLinks = true,\n    interactiveImages = true,\n}: {\n    b: OwidEnrichedGdocBlock\n    containerType?: Container\n    toc?: TocHeadingWithSupertitle[]\n    shouldRenderLinks?: boolean\n    interactiveImages?: boolean\n}) {\n    return (\n        <BlockErrorBoundary className={getLayout(\"default\", containerType)}>\n            <ArticleBlockInternal\n                b={block}\n                containerType={containerType}\n                toc={toc}\n                shouldRenderLinks={shouldRenderLinks}\n                interactiveImages={interactiveImages}\n            />\n        </BlockErrorBoundary>\n    )\n}\n","import {\n    EnrichedBlockSubscribeBanner,\n    OwidEnrichedGdocBlock,\n} from \"@ourworldindata/types\"\n\nexport const injectAutomaticSubscribeBanner = (\n    blocks: OwidEnrichedGdocBlock[]\n): OwidEnrichedGdocBlock[] => {\n    const lastHeadingIndex = blocks.findLastIndex(\n        (block) => block.type === \"heading\" && block.level === 1\n    )\n\n    if (lastHeadingIndex === -1) return blocks\n\n    const SubscribeBannerBlock: EnrichedBlockSubscribeBanner = {\n        type: \"subscribe-banner\",\n        align: \"center\",\n        parseErrors: [],\n    }\n\n    return [\n        ...blocks.slice(0, lastHeadingIndex),\n        SubscribeBannerBlock,\n        ...blocks.slice(lastHeadingIndex),\n    ]\n}\n\nconst endsIntro = (block: OwidEnrichedGdocBlock): boolean =>\n    block.type === \"heading\" || block.type === \"ltp-toc\"\n\n/**\n * The index of the last block of the intro: everything from the first text\n * block up to the next heading or table of contents.\n */\nexport const getIntroEndIndex = (blocks: OwidEnrichedGdocBlock[]): number => {\n    const firstTextIndex = blocks.findIndex((block) => block.type === \"text\")\n    if (firstTextIndex === -1) return 0\n    const nextSectionIndex = blocks.findIndex(\n        (block, i) => i > firstTextIndex && endsIntro(block)\n    )\n    return nextSectionIndex === -1 ? blocks.length - 1 : nextSectionIndex - 1\n}\n","import { Fragment, type ReactNode } from \"react\"\nimport ArticleBlock from \"./ArticleBlock.js\"\nimport {\n    getIntroEndIndex,\n    injectAutomaticSubscribeBanner,\n} from \"./gdocComponentUtils.js\"\nimport { Container } from \"./layout.js\"\nimport {\n    OwidEnrichedGdocBlock,\n    TocHeadingWithSupertitle,\n} from \"@ourworldindata/utils\"\n\n/**\n * Renders a list of article blocks.\n *\n * @param blocks\n * @param containerType\n * @param toc\n * @param shouldRenderLinks - Won't render <a> elements when false. Useful to avoid\n * invalid nested links.\n * @param afterIntro - Optional element rendered as a sibling grid item after\n * the intro, i.e. before the first heading or table of contents that follows\n * the opening text. It is responsible for its own grid placement classes.\n * @constructor\n */\nexport const ArticleBlocks = ({\n    blocks,\n    containerType = \"default\",\n    toc,\n    shouldRenderLinks = true,\n    interactiveImages = true,\n    automaticSubscribeBanner = false,\n    afterIntro,\n}: {\n    blocks: OwidEnrichedGdocBlock[]\n    containerType?: Container\n    toc?: TocHeadingWithSupertitle[]\n    shouldRenderLinks?: boolean\n    interactiveImages?: boolean\n    automaticSubscribeBanner?: boolean\n    afterIntro?: ReactNode\n}) => {\n    const blocksToRender = automaticSubscribeBanner\n        ? injectAutomaticSubscribeBanner(blocks)\n        : blocks\n\n    const afterIntroIndex = afterIntro ? getIntroEndIndex(blocksToRender) : -1\n\n    return (\n        <>\n            {blocksToRender.map((block: OwidEnrichedGdocBlock, i: number) => {\n                const articleBlock = (\n                    <ArticleBlock\n                        b={block}\n                        containerType={containerType}\n                        toc={toc}\n                        shouldRenderLinks={shouldRenderLinks}\n                        interactiveImages={interactiveImages}\n                    />\n                )\n                return (\n                    <Fragment key={i}>\n                        {articleBlock}\n                        {i === afterIntroIndex ? afterIntro : null}\n                    </Fragment>\n                )\n            })}\n        </>\n    )\n}\n","interface MarkdownBlock {\n    type: \"heading\" | \"listItem\" | \"paragraph\"\n    lines: string[]\n}\n\nexport interface DescriptionKeySplit {\n    /** Shown above the fold of the metadata box */\n    preview: string\n    /** Revealed when the box is expanded */\n    remainder: string\n}\n\nconst LIST_ITEM_START = /^\\s*([-*+]|\\d+[.)])\\s/\nconst HEADING_START = /^#{1,6}\\s/\n\nconst CODE_FENCE_START = /^\\s*(```|~~~)/\n\n// A rough line-based markdown block parser, just detailed enough to find safe\n// places to split a descriptionKey into a preview and a remainder. Nested list\n// items and lazy continuation lines stay attached to their parent block so a\n// split never lands inside a list item.\nfunction parseMarkdownBlocks(markdown: string): MarkdownBlock[] {\n    const blocks: MarkdownBlock[] = []\n    let current: MarkdownBlock | undefined\n    let inCodeFence = false\n    for (const line of markdown.split(\"\\n\")) {\n        // Everything inside a code fence stays attached to the block that\n        // opened it, so that a `# comment` inside the fence isn't mistaken\n        // for a heading (which could make the split land inside the fence).\n        if (inCodeFence) {\n            current?.lines.push(line)\n            if (CODE_FENCE_START.test(line)) inCodeFence = false\n            continue\n        }\n        if (CODE_FENCE_START.test(line)) {\n            inCodeFence = true\n            if (!current) {\n                current = { type: \"paragraph\", lines: [] }\n                blocks.push(current)\n            }\n            current.lines.push(line)\n            continue\n        }\n        if (!line.trim()) {\n            current = undefined\n        } else if (HEADING_START.test(line)) {\n            current = undefined\n            blocks.push({ type: \"heading\", lines: [line] })\n        } else if (LIST_ITEM_START.test(line)) {\n            const isNested = /^\\s/.test(line)\n            if (isNested && current?.type === \"listItem\") {\n                current.lines.push(line)\n            } else {\n                current = { type: \"listItem\", lines: [line] }\n                blocks.push(current)\n            }\n        } else if (current) {\n            current.lines.push(line)\n        } else {\n            current = { type: \"paragraph\", lines: [line] }\n            blocks.push(current)\n        }\n    }\n    return blocks\n}\n\nexport function countDescriptionKeyBullets(markdown: string): number {\n    return parseMarkdownBlocks(markdown).filter(\n        (block) => block.type === \"listItem\"\n    ).length\n}\n\nconst LEFT_COLUMN_TALLER_BULLET_COUNT = 5\n\n/** Whether the description column is expected to be the shorter of the two. */\nexport function isDescriptionColumnShorter(descriptionKey?: string): boolean {\n    const bulletCount = descriptionKey\n        ? countDescriptionKeyBullets(descriptionKey)\n        : 0\n    return bulletCount < LEFT_COLUMN_TALLER_BULLET_COUNT\n}\n\n// Adjacent list items are always rejoined tightly, so a \"loose\" list (bullets\n// separated by blank lines) comes out tight — a deliberate simplification.\nfunction joinMarkdownBlocks(blocks: MarkdownBlock[]): string {\n    return blocks\n        .map((block, i) => {\n            const previous = blocks[i - 1]\n            const separator = !previous\n                ? \"\"\n                : block.type === \"listItem\" && previous.type === \"listItem\"\n                  ? \"\\n\"\n                  : \"\\n\\n\"\n            return separator + block.lines.join(\"\\n\")\n        })\n        .join(\"\")\n}\n\n// Cap the preview by total length too: block-count rules alone don't keep the\n// box compact when e.g. each of three bullets holds a whole paragraph\n// (\"Rationale: … / Definition: … / Method of estimation: …\"-style texts).\n// Roughly the amount of text that fit the previously used 220px-tall clamp.\nconst PREVIEW_CHARACTER_BUDGET = 1000\n\nconst MARKDOWN_LINK = /\\[([^\\]]*)\\]\\([^)]*\\)/g\n\n// Measure a block by its visible text — link targets take up no preview\n// space, so `[text](url)` counts as just `text`.\nfunction visibleLength(block: MarkdownBlock): number {\n    return block.lines.join(\"\\n\").replace(MARKDOWN_LINK, \"$1\").length\n}\n\n// How many blocks of the descriptionKey to show in the preview:\n// - if it has headings, the first heading's section (up to the next heading)\n// - if it's a bulleted list, the first three bullets (plus any intro text)\n// - if it's plain paragraphs, the first two\n// …but never more than fits the character budget (and always at least one).\nfunction findPreviewEnd(blocks: MarkdownBlock[]): number {\n    let previewEnd: number\n    const headingIndexes = blocks.flatMap((block, i) =>\n        block.type === \"heading\" ? [i] : []\n    )\n    if (headingIndexes.length > 0) {\n        previewEnd = headingIndexes[1] ?? blocks.length\n    } else if (blocks.some((block) => block.type === \"listItem\")) {\n        previewEnd = blocks.length\n        let listItemCount = 0\n        for (let i = 0; i < blocks.length; i++) {\n            if (blocks[i].type === \"listItem\" && ++listItemCount === 3) {\n                previewEnd = i + 1\n                break\n            }\n        }\n    } else {\n        previewEnd = Math.min(2, blocks.length)\n    }\n\n    let budgetLeft = PREVIEW_CHARACTER_BUDGET\n    for (let i = 0; i < previewEnd; i++) {\n        budgetLeft -= visibleLength(blocks[i])\n        if (budgetLeft < 0 && i > 0) return i\n    }\n    return previewEnd\n}\n\nfunction splitBlocksAt(\n    blocks: MarkdownBlock[],\n    previewEnd: number\n): DescriptionKeySplit {\n    return {\n        preview: joinMarkdownBlocks(blocks.slice(0, previewEnd)),\n        remainder: joinMarkdownBlocks(blocks.slice(previewEnd)),\n    }\n}\n\n/** Split a descriptionKey markdown string by the shape of its blocks */\nexport function splitDescriptionKey(markdown: string): DescriptionKeySplit {\n    const blocks = parseMarkdownBlocks(markdown)\n    return splitBlocksAt(blocks, findPreviewEnd(blocks))\n}\n","import cx from \"clsx\"\nimport {\n    DATAPAGE_SOURCES_AND_PROCESSING_SECTION_ID,\n    SimpleMarkdownText,\n    IndicatorSources,\n    ExpandableToggle,\n    CodeSnippet,\n    makeSource,\n    IndicatorProcessing,\n    INDICATOR_PROCESSING_SECTION_ID,\n    MetadataBoxExpander,\n    MetadataBoxCollapseButton,\n    MetadataBoxSection,\n    MetadataBoxKeyData,\n    MetadataBoxKeyDataRow,\n    MetadataBoxReuseNotice,\n    ChartLicenseNotice,\n} from \"@ourworldindata/components\"\nimport {\n    ArchiveContext,\n    DataPageDataV2,\n    FaqEntryData,\n    IndicatorTitleWithFragments,\n    LicenseOption,\n    OwidEnrichedGdocBlock,\n    PrimaryTopic,\n} from \"@ourworldindata/types\"\nimport { useRef } from \"react\"\nimport {\n    formatAttributions,\n    prepareSourcesForDisplay,\n    getIndicatorCitations,\n    spansToUnformattedPlainText,\n} from \"@ourworldindata/utils\"\nimport { Byline } from \"./gdocs/components/Byline.js\"\nimport { ArticleBlocks } from \"./gdocs/components/ArticleBlocks.js\"\nimport { splitDescriptionKey } from \"./datapageUtils.js\"\nimport { SiteAnalytics } from \"./SiteAnalytics.js\"\n\nconst analytics = new SiteAnalytics()\n\ninterface IndicatorMetadataSectionsProps {\n    datapageData: DataPageDataV2\n    className?: string\n    faqEntries: FaqEntryData | undefined\n    detailsRef: React.RefObject<HTMLDetailsElement | null>\n    canonicalUrl: string\n    archiveContext: ArchiveContext | undefined\n    primaryTopic?: PrimaryTopic\n    title: IndicatorTitleWithFragments\n    descriptionProcessing: string | undefined\n    license?: LicenseOption\n}\n\n// FAQs arrive as a flat block list — each question is a heading followed by its\n// answer blocks. Split on headings so each question can render as its own toggle.\nfunction groupFaqsByQuestion(\n    blocks: OwidEnrichedGdocBlock[]\n): { question: string; answer: OwidEnrichedGdocBlock[] }[] {\n    const questions: {\n        question: string\n        answer: OwidEnrichedGdocBlock[]\n    }[] = []\n    for (const block of blocks) {\n        if (block.type === \"heading\") {\n            questions.push({\n                question: spansToUnformattedPlainText(block.text),\n                answer: [],\n            })\n        } else if (questions.length > 0) {\n            const answer = questions[questions.length - 1].answer\n            if (block.type === \"expandable-paragraph\") {\n                // Flatten expandable paragraphs into the main answer, since the question is already hidden behind a toggle.\n                answer.push(...block.items)\n            } else {\n                answer.push(block)\n            }\n        }\n    }\n    return questions\n}\n\nfunction IndicatorMetadataSections({\n    datapageData,\n    className,\n    faqEntries,\n    detailsRef,\n    canonicalUrl,\n    archiveContext,\n    primaryTopic,\n    title,\n    descriptionProcessing,\n    license,\n}: IndicatorMetadataSectionsProps) {\n    const { origins, source } = datapageData\n    const sourcesForDisplay = prepareSourcesForDisplay({\n        origins,\n        source,\n    })\n\n    const citationUrl = archiveContext?.archiveUrl ?? canonicalUrl\n    const {\n        short: citationShort,\n        long: citationLong,\n        datapage: citationDatapage,\n    } = getIndicatorCitations({\n        indicatorTitle: title,\n        origins,\n        source,\n        attributions: datapageData.attributions,\n        attributionShort: datapageData.attributionShort,\n        titleVariant: datapageData.titleVariant,\n        owidProcessingLevel: datapageData.owidProcessingLevel,\n        citationUrl,\n        archivalDate: archiveContext?.archivalDate,\n        primaryTopic,\n    })\n\n    const faqQuestions = groupFaqsByQuestion(faqEntries?.faqs ?? [])\n\n    // Only the start of a long descriptionKey is shown above the fold; the\n    // rest goes inside the <details> so that it works without JavaScript and\n    // browsers auto-expand it when in-page search matches hidden text.\n    const { preview: descriptionKeyPreview, remainder: descriptionKeyRest } =\n        splitDescriptionKey(datapageData.descriptionKey ?? \"\")\n\n    return (\n        <MetadataBoxExpander\n            className={className}\n            detailsRef={detailsRef}\n            preview={\n                descriptionKeyPreview ? (\n                    <SimpleMarkdownText\n                        text={descriptionKeyPreview}\n                        dataTrackNote=\"wysk_link\"\n                        dodTrackNote=\"wysk/preview\"\n                    />\n                ) : undefined\n            }\n            onToggle={(isOpen) =>\n                analytics.logSiteClick(\n                    isOpen ? \"expand_metadata_box\" : \"collapse_metadata_box\"\n                )\n            }\n        >\n            {descriptionKeyRest && (\n                <div className=\"metadata-box-expander__remainder metadata-box-expander__prose\">\n                    <SimpleMarkdownText\n                        text={descriptionKeyRest}\n                        dataTrackNote=\"wysk_link\"\n                        dodTrackNote=\"wysk/expanded\"\n                    />\n                </div>\n            )}\n            <MetadataBoxSection\n                title=\"Frequently asked questions\"\n                id=\"faqs\"\n                className=\"metadata-box-section--faqs\"\n            >\n                {faqQuestions.map((faq) => (\n                    <ExpandableToggle\n                        key={faq.question}\n                        label={faq.question}\n                        content={\n                            <ArticleBlocks\n                                blocks={faq.answer}\n                                containerType=\"datapage\"\n                            />\n                        }\n                        onToggle={(isOpen) =>\n                            analytics.logExpandableToggle(\n                                // untranslated source text\n                                faq.question.slice(0, 100),\n                                isOpen\n                            )\n                        }\n                    />\n                ))}\n                <ExpandableToggle\n                    label=\"How did Our World in Data process this data?\"\n                    contentId={INDICATOR_PROCESSING_SECTION_ID}\n                    content={\n                        <IndicatorProcessing\n                            descriptionProcessing={descriptionProcessing}\n                            trackNote=\"processing_link\"\n                            dodTrackNote=\"processing\"\n                        />\n                    }\n                    onToggle={(isOpen) =>\n                        analytics.logExpandableToggle(\n                            \"how_owid_processed_data\",\n                            isOpen\n                        )\n                    }\n                />\n            </MetadataBoxSection>\n            {datapageData.descriptionFromProducer && (\n                <MetadataBoxSection title=\"Documentation from data sources\">\n                    <ExpandableToggle\n                        label={\n                            datapageData.attributionShort ||\n                            \"Principal data source\"\n                        }\n                        content={\n                            <div className=\"indicator-metadata-box__producer-docs\">\n                                <SimpleMarkdownText\n                                    text={datapageData.descriptionFromProducer}\n                                    dataTrackNote=\"producer_link\"\n                                    dodTrackNote=\"producer_documentation\"\n                                />\n                            </div>\n                        }\n                        onToggle={(isOpen) =>\n                            analytics.logExpandableToggle(\n                                \"producer_documentation\",\n                                isOpen\n                            )\n                        }\n                    />\n                </MetadataBoxSection>\n            )}\n            <MetadataBoxSection\n                title=\"Data sources\"\n                id={DATAPAGE_SOURCES_AND_PROCESSING_SECTION_ID}\n            >\n                <IndicatorSources\n                    sources={sourcesForDisplay}\n                    retrievedFromTrackNote=\"retrieved_from\"\n                    descriptionTrackNote=\"source_link\"\n                    dodTrackNote=\"data_sources\"\n                    hideReuseThisWorkText\n                    hideTeasers\n                    onSourceToggle={(_source, index, isOpen) =>\n                        analytics.logExpandableToggle(\n                            `data_source_${index + 1}`,\n                            isOpen\n                        )\n                    }\n                />\n            </MetadataBoxSection>\n            {(citationShort || citationLong) && (\n                <MetadataBoxSection title=\"How to cite\">\n                    {citationDatapage && (\n                        <ExpandableToggle\n                            label=\"How to cite this page\"\n                            content={\n                                <>\n                                    <p>\n                                        To cite this page overall, including any\n                                        descriptions, FAQs or explanations of\n                                        the data authored by Our World in Data,\n                                        please use the following citation:\n                                    </p>\n                                    <CodeSnippet\n                                        code={citationDatapage}\n                                        theme=\"light\"\n                                        useMarkdown={true}\n                                        onCopy={() =>\n                                            analytics.logSiteClick(\n                                                \"copy_citation\",\n                                                \"citation_page\"\n                                            )\n                                        }\n                                    />\n                                </>\n                            }\n                            onToggle={(isOpen) =>\n                                analytics.logExpandableToggle(\n                                    \"how_to_cite_page\",\n                                    isOpen\n                                )\n                            }\n                        />\n                    )}\n                    {citationShort && (\n                        <ExpandableToggle\n                            label=\"How to cite this data\"\n                            content={\n                                <>\n                                    <p className=\"citation__paragraph\">\n                                        If you have limited space (e.g. in data\n                                        visualizations), you can use this\n                                        abbreviated in-line citation:\n                                    </p>\n                                    <CodeSnippet\n                                        code={citationShort}\n                                        theme=\"light\"\n                                        useMarkdown={true}\n                                        onCopy={() =>\n                                            analytics.logSiteClick(\n                                                \"copy_citation\",\n                                                \"citation_data_short\"\n                                            )\n                                        }\n                                    />\n                                    {citationLong && (\n                                        <>\n                                            <p className=\"citation__paragraph\">\n                                                Full citation\n                                            </p>\n                                            <CodeSnippet\n                                                code={citationLong}\n                                                theme=\"light\"\n                                                useMarkdown={true}\n                                                onCopy={() =>\n                                                    analytics.logSiteClick(\n                                                        \"copy_citation\",\n                                                        \"citation_data_full\"\n                                                    )\n                                                }\n                                            />\n                                        </>\n                                    )}\n                                </>\n                            }\n                            onToggle={(isOpen) =>\n                                analytics.logExpandableToggle(\n                                    \"how_to_cite_data\",\n                                    isOpen\n                                )\n                            }\n                        />\n                    )}\n                </MetadataBoxSection>\n            )}\n            <MetadataBoxSection className=\"indicator-metadata-box__reuse-notice\">\n                <MetadataBoxReuseNotice>\n                    <ChartLicenseNotice license={license} />\n                </MetadataBoxReuseNotice>\n            </MetadataBoxSection>\n        </MetadataBoxExpander>\n    )\n}\n\nexport default function IndicatorMetadataBox({\n    datapageData,\n    faqEntries,\n    className,\n    id,\n    canonicalUrl,\n    archiveContext,\n    license,\n}: {\n    datapageData: DataPageDataV2\n    className?: string\n    id?: string\n    faqEntries: FaqEntryData | undefined\n    canonicalUrl: string\n    archiveContext: ArchiveContext | undefined\n    license?: LicenseOption\n}) {\n    // Owners of the dataset backing this indicator. For now we show a single\n    // indicator's owners; multi-indicator charts will get a separate metadata\n    // expander per indicator, so we don't merge owners across datasets here.\n    const owners = datapageData.owners?.[0]?.owners ?? []\n\n    const attribution = formatAttributions(datapageData.attributions ?? [])\n    const sourceString = makeSource({\n        attribution,\n        owidProcessingLevel: datapageData.owidProcessingLevel,\n        processingId: INDICATOR_PROCESSING_SECTION_ID,\n    })\n\n    const detailsRef = useRef<HTMLDetailsElement | null>(null)\n\n    return (\n        <div\n            className={cx(\"metadata-box indicator-metadata-box\", className)}\n            id={id}\n        >\n            <MetadataBoxCollapseButton detailsRef={detailsRef} />\n            <h2 className=\"indicator-metadata-box__title body-2-bold-tight\">\n                {datapageData.title.title}\n                <span className=\"indicator-metadata-box__title-variant\">\n                    {datapageData.titleVariant}\n                </span>\n            </h2>\n            <MetadataBoxKeyData>\n                {datapageData.descriptionShort && (\n                    <MetadataBoxKeyDataRow\n                        label=\"Description\"\n                        isFullWidth\n                        isLabelScreenReaderOnly\n                    >\n                        <SimpleMarkdownText\n                            text={datapageData.descriptionShort}\n                            dodTrackNote=\"key_data\"\n                        />\n                    </MetadataBoxKeyDataRow>\n                )}\n                {sourceString && (\n                    <MetadataBoxKeyDataRow\n                        label=\"Data source\"\n                        isFullWidth\n                        labelClassName=\"metadata-box-key-data__key--source\"\n                    >\n                        {sourceString}\n                    </MetadataBoxKeyDataRow>\n                )}\n                {datapageData.unit && (\n                    <MetadataBoxKeyDataRow label=\"Unit\">\n                        {datapageData.unit}\n                    </MetadataBoxKeyDataRow>\n                )}\n                {datapageData.dateRange && (\n                    <MetadataBoxKeyDataRow label=\"Date range\">\n                        {datapageData.dateRange}\n                    </MetadataBoxKeyDataRow>\n                )}\n                {datapageData.lastUpdated && (\n                    <MetadataBoxKeyDataRow label=\"Last updated\">\n                        {datapageData.lastUpdated}\n                    </MetadataBoxKeyDataRow>\n                )}\n                {datapageData.nextUpdate && (\n                    <MetadataBoxKeyDataRow label=\"Next expected update\">\n                        {datapageData.nextUpdate}\n                    </MetadataBoxKeyDataRow>\n                )}\n                {owners.length > 0 && (\n                    <MetadataBoxKeyDataRow label=\"Managed by\">\n                        <Byline authors={owners} prefix=\"\" />\n                    </MetadataBoxKeyDataRow>\n                )}\n            </MetadataBoxKeyData>\n            <IndicatorMetadataSections\n                datapageData={datapageData}\n                faqEntries={faqEntries}\n                detailsRef={detailsRef}\n                canonicalUrl={canonicalUrl}\n                archiveContext={archiveContext}\n                primaryTopic={datapageData.primaryTopic}\n                title={datapageData.title}\n                descriptionProcessing={datapageData.descriptionProcessing}\n                license={license}\n            />\n        </div>\n    )\n}\n","import { DataPageDataV2, joinTitleFragments } from \"@ourworldindata/types\"\nimport {\n    makeSource,\n    makeLastUpdated,\n    makeNextUpdate,\n    makeDateRange,\n    makeUnit,\n    makeUnitConversionFactor,\n    makeLinks,\n    SimpleMarkdownText,\n} from \"@ourworldindata/components\"\n\nexport default function KeyDataTable({\n    datapageData,\n    attribution,\n}: {\n    datapageData: DataPageDataV2\n    attribution: string\n}) {\n    const source = makeSource({\n        attribution: attribution,\n        owidProcessingLevel: datapageData.owidProcessingLevel,\n    })\n    const lastUpdated = makeLastUpdated(datapageData)\n    const nextUpdate = makeNextUpdate(datapageData)\n    const dateRange = makeDateRange(datapageData)\n    const unit = makeUnit(datapageData)\n    const unitConversionFactor = makeUnitConversionFactor(datapageData)\n    const links = makeLinks({ link: datapageData.source?.link })\n\n    return (\n        <div className=\"key-data-block grid grid-cols-4 grid-sm-cols-12\">\n            {datapageData.descriptionShort && (\n                <div className=\"key-data span-cols-4 span-sm-cols-12\">\n                    <div className=\"key-data-description-short__title\">\n                        {datapageData.title.title}\n                    </div>\n                    <div className=\"key-data-description-short__title-fragments\">\n                        {\n                            // This method may return undefined if both fields are empty\n                            joinTitleFragments(\n                                datapageData.attributionShort,\n                                datapageData.titleVariant\n                            )\n                        }\n                    </div>\n                    <div>\n                        <SimpleMarkdownText\n                            text={datapageData.descriptionShort}\n                            dodTrackNote=\"key_data\"\n                            useParagraphs={false}\n                        />\n                    </div>\n                </div>\n            )}\n            {source && (\n                <div className=\"key-data span-cols-4 span-sm-cols-12\">\n                    <div className=\"key-data__title\">Source</div>\n                    <div>{source}</div>\n                </div>\n            )}\n            {lastUpdated && (\n                <div className=\"key-data span-cols-2 span-sm-cols-6\">\n                    <div className=\"key-data__title\">Last updated</div>\n                    <div>{lastUpdated}</div>\n                </div>\n            )}\n            {nextUpdate && (\n                <div className=\"key-data span-cols-2 span-sm-cols-6\">\n                    <div className=\"key-data__title\">Next expected update</div>\n                    <div>{nextUpdate}</div>\n                </div>\n            )}\n            {dateRange && (\n                <div className=\"key-data span-cols-2 span-sm-cols-6\">\n                    <div className=\"key-data__title\">Date range</div>\n                    <div>{dateRange}</div>\n                </div>\n            )}\n            {unit && (\n                <div className=\"key-data span-cols-2 span-sm-cols-6\">\n                    <div className=\"key-data__title\">Unit</div>\n                    <div>{unit}</div>\n                </div>\n            )}\n            {unitConversionFactor && (\n                <div className=\"key-data span-cols-2 span-sm-cols-6\">\n                    <div className=\"key-data__title\">\n                        Unit conversion factor\n                    </div>\n                    <div>{unitConversionFactor}</div>\n                </div>\n            )}\n            {links && (\n                <div className=\"key-data span-cols-2 span-sm-cols-6\">\n                    <div className=\"key-data__title\">Links</div>\n                    <div className=\"key-data__content--hide-overflow\">\n                        {links}\n                    </div>\n                </div>\n            )}\n        </div>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport cx from \"clsx\"\nimport { faArrowDown } from \"@fortawesome/free-solid-svg-icons\"\n\nimport {\n    DATAPAGE_ABOUT_THIS_DATA_SECTION_ID,\n    SimpleMarkdownText,\n    ExpandableToggle,\n    HtmlOrSimpleMarkdownText,\n    Button,\n} from \"@ourworldindata/components\"\nimport { DataPageDataV2 } from \"@ourworldindata/types\"\nimport { formatAttributions } from \"@ourworldindata/utils\"\nimport KeyDataTable from \"./KeyDataTable.js\"\nimport { SiteAnalytics } from \"./SiteAnalytics.js\"\nimport TopicNewsletterCard from \"./TopicNewsletterCard.js\"\nimport { hasTopicNewsletterCard } from \"./topicNewsletter.js\"\nimport { isDescriptionColumnShorter } from \"./datapageUtils.js\"\n\nconst analytics = new SiteAnalytics()\n\nexport default function AboutThisData({\n    datapageData,\n    hasFaq,\n    className,\n    id,\n    topicArea,\n}: {\n    datapageData: DataPageDataV2\n    hasFaq: boolean\n    className?: string\n    id?: string\n    topicArea?: string\n}) {\n    const hasDescriptionKey = !!datapageData.descriptionKey\n    const attribution = formatAttributions(datapageData.attributions ?? [])\n    const id_ = id ?? DATAPAGE_ABOUT_THIS_DATA_SECTION_ID\n    const hasKeyInfo =\n        hasDescriptionKey ||\n        !!datapageData.descriptionFromProducer ||\n        !!datapageData.source?.additionalInfo\n    const isNewsletterCardOnLeft = isDescriptionColumnShorter(\n        datapageData.descriptionKey\n    )\n\n    return (\n        <div\n            className={cx(\n                \"wrapper-about-this-data grid grid-cols-12\",\n                className\n            )}\n        >\n            {hasKeyInfo ? (\n                <>\n                    <h2 id={id_} className=\"key-info__title span-cols-12\">\n                        What you should know about this indicator\n                    </h2>\n                    <div className=\"col-start-1 span-cols-8 span-lg-cols-7 span-sm-cols-12\">\n                        <div className=\"key-info__content\">\n                            {datapageData.descriptionKey && (\n                                <div className=\"key-info__key-description\">\n                                    <SimpleMarkdownText\n                                        text={datapageData.descriptionKey.trim()}\n                                        dataTrackNote=\"wysk_link\"\n                                        dodTrackNote=\"wysk\"\n                                    />\n                                </div>\n                            )}\n\n                            <div className=\"key-info__expandable-descriptions\">\n                                {datapageData.descriptionFromProducer && (\n                                    <ExpandableToggle\n                                        label={\n                                            datapageData.attributionShort\n                                                ? `How is this data described by its producer - ${datapageData.attributionShort}?`\n                                                : \"How is this data described by its producer?\"\n                                        }\n                                        content={\n                                            <div className=\"article-block__text\">\n                                                <SimpleMarkdownText\n                                                    text={\n                                                        datapageData.descriptionFromProducer\n                                                    }\n                                                    dataTrackNote=\"producer_link\"\n                                                    dodTrackNote=\"producer_documentation\"\n                                                />\n                                            </div>\n                                        }\n                                        onToggle={(isOpen) =>\n                                            analytics.logExpandableToggle(\n                                                \"producer_documentation\",\n                                                isOpen\n                                            )\n                                        }\n                                    />\n                                )}\n                                {datapageData.source?.additionalInfo && (\n                                    <ExpandableToggle\n                                        label=\"Additional information about this data\"\n                                        content={\n                                            <div\n                                                className=\"expandable-info-blocks__content\"\n                                                data-dod-track-note=\"additional_information\"\n                                            >\n                                                <HtmlOrSimpleMarkdownText\n                                                    text={datapageData.source?.additionalInfo.trim()}\n                                                />\n                                            </div>\n                                        }\n                                        onToggle={(isOpen) =>\n                                            analytics.logExpandableToggle(\n                                                \"additional_information\",\n                                                isOpen\n                                            )\n                                        }\n                                    />\n                                )}\n                            </div>\n                        </div>\n                        {hasDescriptionKey && hasFaq && (\n                            <Button\n                                className=\"key-info__learn-more\"\n                                theme=\"solid-light-blue\"\n                                text=\"Learn more in the FAQs\"\n                                href=\"#faqs\"\n                                icon={faArrowDown}\n                                dataTrackNote=\"wysk_learn_more_in_faqs\"\n                            />\n                        )}\n                        {isNewsletterCardOnLeft && (\n                            <TopicNewsletterCard\n                                pageType=\"chart\"\n                                topicArea={topicArea}\n                                placement=\"about_this_data\"\n                                className=\"topic-newsletter-card--key-info-left topic-newsletter-card--horizontal\"\n                            />\n                        )}\n                    </div>\n                    <div className=\"key-info__right span-cols-4 span-lg-cols-5 span-sm-cols-12\">\n                        <KeyDataTable\n                            datapageData={datapageData}\n                            attribution={attribution}\n                        />\n                        {!isNewsletterCardOnLeft && (\n                            <TopicNewsletterCard\n                                pageType=\"chart\"\n                                topicArea={topicArea}\n                                placement=\"about_this_data\"\n                                variant=\"narrow\"\n                                className=\"topic-newsletter-card--key-info\"\n                            />\n                        )}\n                    </div>\n                </>\n            ) : (\n                <>\n                    <h2\n                        className=\"about-this-data__title span-cols-3 span-lg-cols-3 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\"\n                        id={id_}\n                    >\n                        About this data\n                    </h2>\n                    <div\n                        className={cx(\n                            \"about-this-data__key-data col-start-4 span-cols-10 col-lg-start-5 span-lg-cols-8 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\",\n                            // Make room for the card only when there is one.\n                            {\n                                \"about-this-data__key-data--with-newsletter-card\":\n                                    hasTopicNewsletterCard(topicArea),\n                            }\n                        )}\n                    >\n                        <KeyDataTable\n                            datapageData={datapageData}\n                            attribution={attribution}\n                        />\n                    </div>\n                    <TopicNewsletterCard\n                        pageType=\"chart\"\n                        topicArea={topicArea}\n                        placement=\"about_this_data\"\n                        variant=\"narrow\"\n                        className=\"topic-newsletter-card--about-this-data col-start-10 span-cols-3 col-lg-start-10 span-lg-cols-3 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\"\n                    />\n                </>\n            )}\n        </div>\n    )\n}\n","import {\n    DataPageRelatedResearch,\n    DEFAULT_THUMBNAIL_FILENAME,\n} from \"@ourworldindata/types\"\nimport { formatAuthors } from \"@ourworldindata/utils\"\nimport { BAKED_BASE_URL } from \"../settings/clientSettings.mjs\"\nimport Image from \"./gdocs/components/Image.js\"\n\nexport default function DataPageResearchAndWriting({\n    relatedResearch,\n}: {\n    relatedResearch: DataPageRelatedResearch[]\n}) {\n    return (\n        <div className=\"section-wrapper grid\">\n            <h2\n                className=\"related-research__title span-cols-3 span-lg-cols-12\"\n                id=\"research-and-writing\"\n            >\n                Related research and writing\n            </h2>\n            <div className=\"related-research__items grid grid-cols-9 grid-lg-cols-12 span-cols-9 span-lg-cols-12\">\n                {relatedResearch.map((research) => (\n                    <a\n                        href={research.url}\n                        key={research.url}\n                        className=\"related-research__item grid grid-cols-4 grid-lg-cols-6 grid-sm-cols-12 span-cols-4 span-lg-cols-6 span-sm-cols-12\"\n                    >\n                        <Thumbnail filename={research.imageUrl} />\n                        <div className=\"span-cols-3 span-lg-cols-4 span-sm-cols-9\">\n                            <h3 className=\"related-article__title\">\n                                {research.title}\n                            </h3>\n                            <div className=\"related-article__authors body-3-medium-italic\">\n                                {research.authors &&\n                                    research.authors.length &&\n                                    formatAuthors(research.authors)}\n                            </div>\n                        </div>\n                    </a>\n                ))}\n            </div>\n        </div>\n    )\n}\n\nfunction Thumbnail({ filename }: { filename: string }) {\n    if (!filename) {\n        return (\n            <img\n                className=\"span-lg-cols-2 span-sm-cols-3\"\n                src={`${BAKED_BASE_URL}/${DEFAULT_THUMBNAIL_FILENAME}`}\n            />\n        )\n    }\n    return (\n        <Image\n            className=\"span-lg-cols-2 span-sm-cols-3\"\n            containerType=\"thumbnail\"\n            filename={filename}\n            shouldLightbox={false}\n        />\n    )\n}\n","import { type ReactNode } from \"react\"\n\nimport {\n    DATAPAGE_SOURCES_AND_PROCESSING_SECTION_ID,\n    IndicatorSources,\n    IndicatorProcessing,\n    CodeSnippet,\n    DataCitation,\n    ChartLicenseNotice,\n} from \"@ourworldindata/components\"\nimport {\n    FaqEntryData,\n    LicenseOption,\n    OwidOrigin,\n    PrimaryTopic,\n    OwidSource,\n    IndicatorTitleWithFragments,\n    OwidProcessingLevel,\n    ArchiveContext,\n} from \"@ourworldindata/types\"\nimport {\n    prepareSourcesForDisplay,\n    getIndicatorCitations,\n} from \"@ourworldindata/utils\"\nimport { ArticleBlocks } from \"./gdocs/components/ArticleBlocks.js\"\nimport { SiteAnalytics } from \"./SiteAnalytics.js\"\n\nconst analytics = new SiteAnalytics()\n\nexport default function MetadataSection({\n    attributionShort,\n    attributions,\n    canonicalUrl,\n    descriptionProcessing,\n    faqEntries,\n    license,\n    origins,\n    owidProcessingLevel,\n    primaryTopic,\n    source,\n    title,\n    titleVariant,\n    archiveContext,\n    downloadSection,\n}: {\n    attributionShort?: string\n    attributions: string[]\n    canonicalUrl: string\n    descriptionProcessing?: string\n    faqEntries?: FaqEntryData\n    license?: LicenseOption\n    origins: OwidOrigin[]\n    owidProcessingLevel?: OwidProcessingLevel\n    primaryTopic?: PrimaryTopic\n    source?: OwidSource\n    title: IndicatorTitleWithFragments\n    titleVariant?: string\n    archiveContext?: ArchiveContext\n    downloadSection?: ReactNode\n}) {\n    const sourcesForDisplay = prepareSourcesForDisplay({ origins, source })\n    const citationUrl = archiveContext?.archiveUrl ?? canonicalUrl\n    const {\n        short: citationShort,\n        long: citationLong,\n        datapage: citationDatapage,\n    } = getIndicatorCitations({\n        indicatorTitle: title,\n        origins,\n        source,\n        attributions,\n        attributionShort,\n        titleVariant,\n        owidProcessingLevel,\n        citationUrl,\n        archivalDate: archiveContext?.archivalDate,\n        primaryTopic,\n    })\n    return (\n        <div className=\"MetadataSection span-cols-14 grid grid-cols-12-full-width\">\n            <div className=\"col-start-2 span-cols-12\">\n                {!!faqEntries?.faqs.length && (\n                    <div className=\"section-wrapper section-wrapper__faqs grid\">\n                        <h2\n                            className=\"metadata-section__title span-cols-2 span-lg-cols-3 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\"\n                            id=\"faqs\"\n                        >\n                            Frequently Asked Questions\n                        </h2>\n                        <div className=\"faqs__items grid grid-cols-10 grid-lg-cols-9 grid-md-cols-12 span-cols-10 span-lg-cols-9 span-md-cols-12 span-sm-cols-12\">\n                            <ArticleBlocks\n                                blocks={faqEntries.faqs}\n                                containerType=\"datapage\"\n                            />\n                        </div>\n                    </div>\n                )}\n                <div className=\"section-wrapper grid\">\n                    <h2\n                        className=\"data-sources-processing__title span-cols-2 span-lg-cols-3 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\"\n                        id={DATAPAGE_SOURCES_AND_PROCESSING_SECTION_ID}\n                    >\n                        Sources and processing\n                    </h2>\n                    <div className=\"data-sources grid span-cols-12\">\n                        <h3 className=\"metadata-section__heading span-cols-2 span-lg-cols-3 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\">\n                            This data is based on the following sources\n                        </h3>\n                        <div className=\"col-start-4 span-cols-6 col-lg-start-5 span-lg-cols-7 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\">\n                            <IndicatorSources\n                                sources={sourcesForDisplay}\n                                retrievedFromTrackNote=\"retrieved_from\"\n                                descriptionTrackNote=\"source_link\"\n                                dodTrackNote=\"data_sources\"\n                                onSourceToggle={(_source, index, isOpen) =>\n                                    analytics.logExpandableToggle(\n                                        `data_source_${index + 1}`,\n                                        isOpen\n                                    )\n                                }\n                            />\n                        </div>\n                    </div>\n                    <div className=\"data-processing grid span-cols-12\">\n                        <h3 className=\"metadata-section__heading span-cols-2 span-lg-cols-3 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\">\n                            How we process data at Our World in Data\n                        </h3>\n                        <div className=\"col-start-4 span-cols-6 col-lg-start-5 span-lg-cols-7 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\">\n                            <IndicatorProcessing\n                                descriptionProcessing={descriptionProcessing}\n                                trackNote=\"processing_link\"\n                                dodTrackNote=\"processing\"\n                            />\n                        </div>\n                    </div>\n                </div>\n                <div className=\"section-wrapper grid\">\n                    <h2\n                        className=\"metadata-section__title span-cols-2 span-lg-cols-3 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\"\n                        id=\"reuse-this-work\"\n                    >\n                        Reuse this work\n                    </h2>\n                    <div className=\"col-start-4 span-cols-6 col-lg-start-5 span-lg-cols-7 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\">\n                        <ul className=\"metadata-list\">\n                            <li>\n                                All data produced by third-party providers and\n                                made available by Our World in Data are subject\n                                to the license terms from the original\n                                providers. Our work would not be possible\n                                without the data providers we rely on, so we ask\n                                you to always cite them appropriately (see\n                                below). This is crucial to allow data providers\n                                to continue doing their work, enhancing,\n                                maintaining and updating valuable data.\n                            </li>\n                            <li>\n                                <ChartLicenseNotice license={license} />\n                            </li>\n                        </ul>\n                    </div>\n\n                    {(citationShort || citationLong || citationDatapage) && (\n                        <div className=\"citations grid span-cols-12\">\n                            <h3 className=\"metadata-section__heading span-cols-2 span-lg-cols-3 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\">\n                                Citations\n                            </h3>\n                            <div className=\"col-start-4 span-cols-6 col-lg-start-5 span-lg-cols-7 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\">\n                                {citationDatapage && (\n                                    <div className=\"citations-section\">\n                                        <h4 className=\"citation__how-to-header\">\n                                            How to cite this page\n                                        </h4>\n                                        <p className=\"citation__paragraph\">\n                                            To cite this page overall, including\n                                            any descriptions, FAQs or\n                                            explanations of the data authored by\n                                            Our World in Data, please use the\n                                            following citation:\n                                        </p>\n                                        <CodeSnippet\n                                            code={citationDatapage}\n                                            theme=\"light\"\n                                            useMarkdown={true}\n                                            onCopy={() =>\n                                                analytics.logSiteClick(\n                                                    \"copy_citation\",\n                                                    \"citation_page\"\n                                                )\n                                            }\n                                        />\n                                    </div>\n                                )}\n                                <div className=\"citations-section\">\n                                    <h4 className=\"citation__how-to-header\">\n                                        How to cite this data\n                                    </h4>\n                                    {(citationShort || citationLong) && (\n                                        <DataCitation\n                                            citationLong={citationLong}\n                                            citationShort={citationShort}\n                                            onCopy={(citation) =>\n                                                analytics.logSiteClick(\n                                                    \"copy_citation\",\n                                                    citation\n                                                )\n                                            }\n                                        />\n                                    )}\n                                </div>\n                            </div>\n                        </div>\n                    )}\n                    {downloadSection}\n                </div>\n            </div>\n        </div>\n    )\n}\n","import { useMemo, useEffect, useState } from \"react\"\nimport { GrapherProgrammaticInterface } from \"@ourworldindata/grapher\"\nimport { DATAPAGE_ABOUT_THIS_DATA_SECTION_ID } from \"@ourworldindata/components\"\nimport {\n    EXPERIMENT_ARM_SEPARATOR,\n    EXPERIMENT_PREFIX,\n    DataPageV2ContentFields,\n    GrapherInterface,\n    ImageMetadata,\n    defaultExperimentState,\n    getExperimentState,\n    ExperimentState,\n    isDataPageMetadataRedesignActive,\n} from \"@ourworldindata/utils\"\nimport { RelatedCharts } from \"./blocks/RelatedCharts.js\"\nimport { FeaturedMetrics } from \"./FeaturedMetrics.js\"\nimport { RelatedDataCharts } from \"./RelatedDataCharts.js\"\nimport {\n    ADMIN_BASE_URL,\n    BAKED_GRAPHER_URL,\n} from \"../settings/clientSettings.mjs\"\nimport DownloadSection, {\n    type DownloadSectionProps,\n} from \"./DownloadSection.js\"\nimport { processRelatedResearch } from \"./dataPage.js\"\nimport { GrapherWithFallback } from \"./GrapherWithFallback.js\"\nimport { AttachmentsContext } from \"./gdocs/AttachmentsContext.js\"\nimport { DocumentContext } from \"./gdocs/DocumentContext.js\"\nimport { useWindowQueryParams } from \"./hooks.js\"\nimport IndicatorMetadataBox from \"./IndicatorMetadataBox.js\"\nimport AboutThisData from \"./AboutThisData.js\"\nimport TopicNewsletterCard from \"./TopicNewsletterCard.js\"\nimport DataPageResearchAndWriting from \"./DataPageResearchAndWriting.js\"\nimport MetadataSection from \"./MetadataSection.js\"\nimport { SiteQueryClientProvider } from \"./SiteQueryClientProvider.js\"\n\ndeclare global {\n    interface Window {\n        _OWID_DATAPAGEV2_PROPS: DataPageV2ContentFields\n        _OWID_GRAPHER_CONFIG: GrapherInterface\n    }\n}\nexport const OWID_DATAPAGE_CONTENT_ROOT_ID = \"owid-datapageJson-root\"\n\ntype DataPageDownloadSectionProps = Pick<\n    DownloadSectionProps,\n    \"archivedChartInfo\" | \"baseUrl\" | \"distribution\" | \"slug\"\n>\n\nfunction DataPageDownloadSection({\n    archivedChartInfo,\n    baseUrl,\n    distribution,\n    slug,\n}: DataPageDownloadSectionProps) {\n    const reactiveQueryStr = useWindowQueryParams()\n    const searchParams = new URLSearchParams(reactiveQueryStr)\n\n    return (\n        <DownloadSection\n            slug={slug}\n            baseUrl={baseUrl}\n            searchParams={searchParams}\n            distribution={distribution}\n            archivedChartInfo={archivedChartInfo}\n        />\n    )\n}\n\nexport const DataPageV2Content = ({\n    datapageData,\n    topicArea,\n    grapherConfig,\n    isPreviewing = false,\n    faqEntries,\n    canonicalUrl = \"{URL}\", // when we bake pages to their proper url this will be set correctly but on preview pages we leave this undefined\n    imageMetadata,\n    archiveContext,\n    distribution,\n}: DataPageV2ContentFields & {\n    grapherConfig: GrapherInterface\n    imageMetadata: Record<string, ImageMetadata>\n}) => {\n    const slug = grapherConfig.slug\n    const useNewDatapageDesign = isDataPageMetadataRedesignActive(\n        `/grapher/${slug}`\n    )\n    const queryStr =\n        typeof window !== \"undefined\" ? window?.location?.search : undefined\n\n    // Initialize the grapher for client-side rendering\n    const mergedGrapherConfig: GrapherProgrammaticInterface = useMemo(\n        () => ({\n            ...grapherConfig,\n            bindUrlToWindow: typeof window !== \"undefined\",\n            adminBaseUrl: ADMIN_BASE_URL,\n            bakedGrapherURL: BAKED_GRAPHER_URL,\n            enableKeyboardShortcuts: typeof window !== \"undefined\",\n            archiveContext,\n            useNewDatapageMetadataLayout: useNewDatapageDesign,\n        }),\n        [grapherConfig, archiveContext, useNewDatapageDesign]\n    )\n\n    const relatedResearch = processRelatedResearch(\n        datapageData.relatedResearch,\n        datapageData.topicTagsLinks ?? []\n    )\n\n    // note: experimentState should NOT be used to conditionally render content b/c\n    // it will cause a flash of content before js loads.\n    const [experimentState, setExperimentState] = useState<ExperimentState>(\n        defaultExperimentState\n    )\n    useEffect(() => {\n        if (typeof window !== \"undefined\") {\n            const s = getExperimentState()\n            // oxlint-disable-next-line react/set-state-in-effect -- read client-only experiment cookies after hydration\n            setExperimentState(s)\n        }\n    }, [])\n\n    // Note: yColumns is not passed here, which means the short column names\n    // option won't be visible in the download section on data pages. To enable\n    // this feature, we'd need to load variable metadata on the server and pass\n    // the column definitions through to this component.\n    const downloadSection = slug ? (\n        <DataPageDownloadSection\n            slug={slug}\n            baseUrl={`${BAKED_GRAPHER_URL}/${slug}`}\n            distribution={distribution}\n            archivedChartInfo={archiveContext}\n        />\n    ) : undefined\n\n    return (\n        <AttachmentsContext.Provider\n            value={{\n                linkedDocuments: {},\n                imageMetadata,\n                linkedCharts: {},\n                linkedIndicators: {},\n                linkedAuthors: datapageData.linkedAuthors,\n                relatedCharts: [],\n                tags: [],\n            }}\n        >\n            <DocumentContext.Provider value={{ isPreviewing }}>\n                <div\n                    className=\"DataPageContent__grapher-for-embed\"\n                    data-dod-track-note=\"grapher\"\n                >\n                    <GrapherWithFallback\n                        config={mergedGrapherConfig}\n                        useProvidedConfigOnly\n                        slug={grapherConfig.slug}\n                        queryStr={queryStr}\n                        enablePopulatingUrlParams\n                        isEmbeddedInAnOwidPage={false}\n                        isEmbeddedInADataPage={false}\n                        isPreviewing={isPreviewing}\n                    />\n                </div>\n                <div className=\"DataPageContent grid grid-cols-12-full-width\">\n                    <div className=\"span-cols-14 grid grid-cols-12-full-width full-width--border\">\n                        <div\n                            className=\"chart-key-info col-start-2 span-cols-12\"\n                            data-dod-track-note=\"grapher\"\n                        >\n                            {grapherConfig.slug && (\n                                <GrapherWithFallback\n                                    slug={grapherConfig.slug}\n                                    config={mergedGrapherConfig}\n                                    useProvidedConfigOnly\n                                    id=\"explore-the-data\"\n                                    queryStr={queryStr}\n                                    enablePopulatingUrlParams\n                                    isEmbeddedInADataPage={true}\n                                    isEmbeddedInAnOwidPage={false}\n                                    isPreviewing={isPreviewing}\n                                />\n                            )}\n                            {!useNewDatapageDesign && (\n                                <AboutThisData\n                                    datapageData={datapageData}\n                                    hasFaq={!!faqEntries?.faqs.length}\n                                    id={DATAPAGE_ABOUT_THIS_DATA_SECTION_ID}\n                                    topicArea={topicArea}\n                                />\n                            )}\n                        </div>\n                        {useNewDatapageDesign && (\n                            <IndicatorMetadataBox\n                                datapageData={datapageData}\n                                faqEntries={faqEntries}\n                                canonicalUrl={canonicalUrl}\n                                archiveContext={archiveContext}\n                                id={DATAPAGE_ABOUT_THIS_DATA_SECTION_ID}\n                                license={grapherConfig.license}\n                            />\n                        )}\n                        {useNewDatapageDesign && (\n                            <TopicNewsletterCard\n                                pageType=\"chart\"\n                                topicArea={topicArea}\n                                placement=\"datapage_metadata\"\n                                variant=\"narrow\"\n                                className=\"topic-newsletter-card--datapage-metadata col-start-11 span-cols-3 col-md-start-2 span-md-cols-12\"\n                            />\n                        )}\n                        {useNewDatapageDesign &&\n                            relatedResearch &&\n                            relatedResearch.length > 0 && (\n                                <div className=\"datapage-research-and-writing-v2 col-start-2 span-cols-12\">\n                                    <DataPageResearchAndWriting\n                                        relatedResearch={relatedResearch}\n                                    />\n                                </div>\n                            )}\n\n                        {useNewDatapageDesign &&\n                            datapageData.relatedChartsByCoview &&\n                            datapageData.relatedChartsByCoview.length > 0 && (\n                                <>\n                                    <h2 className=\"datapage-v2__related-charts-heading span-cols-12 col-start-2 h2-bold\">\n                                        Related charts\n                                    </h2>\n                                    <div className=\"span-cols-14 grid grid-cols-12-full-width\">\n                                        <RelatedDataCharts\n                                            className=\"col-start-2 span-cols-12\"\n                                            charts={\n                                                datapageData.relatedChartsByCoview\n                                            }\n                                        />\n                                    </div>\n                                </>\n                            )}\n                    </div>\n                    {useNewDatapageDesign && downloadSection && (\n                        // The new design moves sources/processing/citations into\n                        // the IndicatorMetadataBox above, so only the data\n                        // download remains here. Rendered with the same wrapper\n                        // markup MetadataSection used so the layout is unchanged.\n                        <div className=\"MetadataSection span-cols-14 grid grid-cols-12-full-width\">\n                            <div className=\"col-start-2 span-cols-12\">\n                                <div className=\"section-wrapper grid\">\n                                    {downloadSection}\n                                </div>\n                            </div>\n                        </div>\n                    )}\n                    {!useNewDatapageDesign && (\n                        <>\n                            <div className=\"col-start-2 span-cols-12\">\n                                {relatedResearch &&\n                                    relatedResearch.length > 0 && (\n                                        <DataPageResearchAndWriting\n                                            relatedResearch={relatedResearch}\n                                        />\n                                    )}\n                                {datapageData.allCharts &&\n                                datapageData.allCharts.length > 0 ? (\n                                    <div\n                                        className={`section-wrapper section-wrapper__related-charts ${EXPERIMENT_PREFIX}-all-charts-vs-featured-v1${EXPERIMENT_ARM_SEPARATOR}featured-metrics--hide`}\n                                    >\n                                        <h2\n                                            className=\"related-charts__title\"\n                                            id=\"all-charts\"\n                                        >\n                                            Explore charts that include this\n                                            data\n                                        </h2>\n                                        <div>\n                                            <RelatedCharts\n                                                charts={datapageData.allCharts}\n                                            />\n                                        </div>\n                                    </div>\n                                ) : null}\n                                {datapageData.primaryTopic && (\n                                    <div\n                                        className={`section-wrapper ${EXPERIMENT_PREFIX}-all-charts-vs-featured-v1${EXPERIMENT_ARM_SEPARATOR}featured-metrics--show`}\n                                        id={\n                                            experimentState &&\n                                            experimentState[\n                                                `${EXPERIMENT_PREFIX}-all-charts-vs-featured-v1`\n                                            ]?.isPageInExperiment &&\n                                            experimentState[\n                                                `${EXPERIMENT_PREFIX}-all-charts-vs-featured-v1`\n                                            ]?.arm === \"featured-metrics\"\n                                                ? \"all-charts\"\n                                                : \"\"\n                                        }\n                                    >\n                                        <SiteQueryClientProvider>\n                                            <FeaturedMetrics\n                                                topicName={\n                                                    datapageData.primaryTopic\n                                                        .topicTag\n                                                }\n                                                isDataPage={true}\n                                            />\n                                        </SiteQueryClientProvider>\n                                    </div>\n                                )}\n                            </div>\n                            <MetadataSection\n                                attributionShort={datapageData.attributionShort}\n                                attributions={datapageData.attributions}\n                                canonicalUrl={canonicalUrl}\n                                descriptionProcessing={\n                                    datapageData.descriptionProcessing\n                                }\n                                faqEntries={faqEntries}\n                                license={grapherConfig.license}\n                                origins={datapageData.origins}\n                                owidProcessingLevel={\n                                    datapageData.owidProcessingLevel\n                                }\n                                primaryTopic={datapageData.primaryTopic}\n                                source={datapageData.source}\n                                title={datapageData.title}\n                                titleVariant={datapageData.titleVariant}\n                                archiveContext={archiveContext}\n                                downloadSection={downloadSection}\n                            />\n                        </>\n                    )}\n                </div>\n            </DocumentContext.Provider>\n        </AttachmentsContext.Provider>\n    )\n}\n","import { CREDITS_ID, EnrichedBlockText } from \"@ourworldindata/types\"\nimport { Byline } from \"./Byline.js\"\nimport Paragraph from \"./Paragraph.js\"\n\nexport default function Credits({\n    authors,\n    authorRoles,\n    contributors = [],\n    contributorRoles,\n    acknowledgements = [],\n}: {\n    authors: string[]\n    authorRoles?: Record<string, string>\n    contributors?: string[]\n    contributorRoles?: Record<string, string>\n    acknowledgements?: EnrichedBlockText[]\n}) {\n    if (contributors.length === 0 && acknowledgements.length === 0) return null\n\n    return (\n        <section\n            id={CREDITS_ID}\n            className=\"credits span-cols-14 grid grid-cols-12-full-width\"\n        >\n            <hr className=\"credits__divider col-start-2 span-cols-12\" />\n            <div className=\"credits__body col-start-4 span-cols-8 col-md-start-3 span-md-cols-10 col-sm-start-2 span-sm-cols-12\">\n                <h3 className=\"credits__heading\">\n                    Contributors & acknowledgements\n                </h3>\n                {authors.length > 0 && (\n                    <p className=\"credits__paragraph\">\n                        <Byline authors={authors} authorRoles={authorRoles} />.\n                    </p>\n                )}\n                {contributors.length > 0 && (\n                    <p className=\"credits__paragraph\">\n                        <Byline\n                            authors={contributors}\n                            authorRoles={contributorRoles}\n                            prefix=\"With contributions from \"\n                        />\n                        .\n                    </p>\n                )}\n                {acknowledgements.map((block, index) => (\n                    <Paragraph\n                        key={index}\n                        d={block}\n                        className=\"credits__paragraph\"\n                    />\n                ))}\n            </div>\n        </section>\n    )\n}\n","import { ENDNOTES_ID, RefDictionary } from \"@ourworldindata/utils\"\nimport ArticleBlock from \"./ArticleBlock.js\"\nimport cx from \"clsx\"\n\nexport default function Footnotes({\n    definitions,\n}: {\n    definitions: RefDictionary\n}) {\n    if (!definitions) {\n        return null\n    }\n\n    const definitionsArray = Object.values(definitions)\n    return (\n        <section className=\"footnote-container grid grid-cols-12-full-width col-start-1 col-end-limit\">\n            <div className=\"col-start-4 span-cols-8 col-md-start-3 span-md-cols-10 col-sm-start-2 span-sm-cols-12\">\n                <h3 id={ENDNOTES_ID}>Endnotes</h3>\n                <ol\n                    className={cx(\"footnote-list\", {\n                        \"footnote-list__single-column\":\n                            definitionsArray.length === 1,\n                    })}\n                >\n                    {definitionsArray\n                        .sort((a, b) => a.index - b.index)\n                        .map((ref) => {\n                            return (\n                                <li\n                                    id={`note-${ref.index + 1}`}\n                                    key={ref.index}\n                                    className=\"footnote-list__footnote\"\n                                >\n                                    {ref.content.map((block, i) => (\n                                        <ArticleBlock key={i} b={block} />\n                                    ))}\n                                </li>\n                            )\n                        })}\n                </ol>\n            </div>\n        </section>\n    )\n}\n","import { Fragment } from \"react\"\nimport { BreadcrumbItem } from \"@ourworldindata/utils\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faAngleRight } from \"@fortawesome/free-solid-svg-icons\"\nimport { BAKED_BASE_URL, IS_ARCHIVE } from \"../../settings/clientSettings.mjs\"\nimport { PROD_URL } from \"../SiteConstants.js\"\n\nconst BASE_URL = IS_ARCHIVE ? PROD_URL : BAKED_BASE_URL\n\nconst BreadcrumbSeparator = () => (\n    <span className=\"separator\">\n        <FontAwesomeIcon icon={faAngleRight} />\n    </span>\n)\n\nexport const Breadcrumbs = ({\n    items,\n    className,\n}: {\n    items: BreadcrumbItem[]\n    className: string\n}) => (\n    <div className={className}>\n        <a href={`${BASE_URL}/`}>Home</a>\n        <BreadcrumbSeparator />\n        {items.map((item, idx) => {\n            const isLast = idx === items.length - 1\n\n            const breadcrumb = item.href ? (\n                <a href={item.href} data-track-note=\"breadcrumb\">\n                    {item.label}\n                </a>\n            ) : (\n                <span>{item.label}</span>\n            )\n\n            return (\n                <Fragment key={item.label}>\n                    {breadcrumb}\n                    {!isLast && <BreadcrumbSeparator />}\n                </Fragment>\n            )\n        })}\n    </div>\n)\n","import cx from \"clsx\"\nimport {\n    BreadcrumbItem,\n    CITATION_ID,\n    LICENSE_ID,\n    PAST_VERSIONS_ID,\n    OwidGdocPostContent,\n    OwidGdocType,\n    formatDate,\n} from \"@ourworldindata/utils\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faBook, faClockRotateLeft } from \"@fortawesome/free-solid-svg-icons\"\nimport { faCreativeCommons } from \"@fortawesome/free-brands-svg-icons\"\nimport Image from \"./Image.js\"\nimport { Breadcrumbs } from \"../../Breadcrumb/Breadcrumb.js\"\nimport { breadcrumbColorForCoverColor } from \"../utils.js\"\nimport { Byline } from \"./Byline.js\"\nimport { useVersionsFileUrl } from \"../DocumentContext.js\"\n\nfunction OwidArticleHeader({\n    content,\n    publishedAt,\n    breadcrumbs,\n    isDeprecated,\n}: {\n    content: OwidGdocPostContent\n    publishedAt: Date | null\n    breadcrumbs?: BreadcrumbItem[]\n    isDeprecated?: boolean\n}) {\n    const coverStyle = content[\"cover-color\"]\n        ? { backgroundColor: `var(--${content[\"cover-color\"]})` }\n        : undefined\n\n    const breadcrumbColor = breadcrumbColorForCoverColor(content[\"cover-color\"])\n    const versionsFileUrl = useVersionsFileUrl()\n    const dateText =\n        content.dateline || (publishedAt && formatDate(publishedAt))\n    return (\n        <>\n            <div\n                className=\"centered-article-header__banner\"\n                style={coverStyle}\n            ></div>\n            {content[\"cover-image\"] ? (\n                <div className=\"centered-article-header__cover-image span-cols-14\">\n                    <Image\n                        filename={content[\"cover-image\"]}\n                        containerType=\"full-width\"\n                        shouldLightbox={false}\n                    />\n                </div>\n            ) : null}\n            {!!breadcrumbs?.length && (\n                <div className=\"centered-article-header__breadcrumbs-container col-start-4 span-cols-8 col-md-start-2 span-md-cols-12\">\n                    <Breadcrumbs\n                        items={breadcrumbs}\n                        className={`centered-article-header__breadcrumbs breadcrumbs-${breadcrumbColor}`}\n                    />\n                </div>\n            )}\n            <header\n                className={cx(\n                    \"centered-article-header align-center grid\",\n                    \"grid-cols-8 span-cols-8 col-start-4\",\n                    \"grid-md-cols-6 span-md-cols-12 col-md-start-2\"\n                )}\n            >\n                <div className=\"centered-article-header__title-container col-start-2 span-cols-6 span-md-cols-6 col-md-start-1\">\n                    {content.supertitle ? (\n                        <h3 className=\"centered-article-header__supertitle span-cols-8\">\n                            {content.supertitle}\n                        </h3>\n                    ) : null}\n                    <h1 className=\"centered-article-header__title\">\n                        {content.title}\n                    </h1>\n                </div>\n                {content.subtitle ? (\n                    <h2 className=\"centered-article-header__subtitle col-start-2 span-cols-6 span-md-cols-6 col-md-start-1\">\n                        {content.subtitle}\n                    </h2>\n                ) : null}\n                <div className=\"centered-article-header__meta-container col-start-2 span-cols-6 span-md-cols-6 col-md-start-1 grid grid-cols-2 \">\n                    {content.authors.length > 0 && (\n                        <div className=\"centered-article-header__byline span-cols-2\">\n                            <Byline\n                                authors={content.authors}\n                                authorRoles={content.authorRoles}\n                                contributors={content.contributors}\n                            />\n                        </div>\n                    )}\n                    <div className=\"centered-article-header__meta-row span-cols-2\">\n                        {versionsFileUrl ? (\n                            <a\n                                href={`#${PAST_VERSIONS_ID}`}\n                                data-track-note=\"gdoc-header-date-versions\"\n                                suppressHydrationWarning={true}\n                            >\n                                <FontAwesomeIcon icon={faClockRotateLeft} />\n                                {dateText}\n                            </a>\n                        ) : (\n                            <span suppressHydrationWarning={true}>\n                                {dateText}\n                            </span>\n                        )}\n                        {!isDeprecated && !content[\"hide-citation\"] && (\n                            <a href={`#${CITATION_ID}`}>\n                                <FontAwesomeIcon icon={faBook} />\n                                Cite this article\n                            </a>\n                        )}\n                    </div>\n                </div>\n            </header>\n        </>\n    )\n}\n\nfunction OwidTopicPageHeader({ content }: { content: OwidGdocPostContent }) {\n    return (\n        <header className=\"topic-page-header grid span-cols-14 grid-cols-12-full-width\">\n            <h1 className=\"display-2-semibold col-start-2 span-cols-8 col-sm-start-2 span-sm-cols-12\">\n                {content.title}\n            </h1>\n            <p className=\"topic-page-header__subtitle body-1-regular col-start-2 span-cols-8 col-sm-start-2 span-sm-cols-12\">\n                {content.subtitle}\n            </p>\n            {content.authors.length > 0 && (\n                <p className=\"topic-page-header__byline col-start-2 span-cols-8 col-sm-start-2 span-sm-cols-12\">\n                    <Byline\n                        authors={content.authors}\n                        authorRoles={content.authorRoles}\n                        contributors={content.contributors}\n                    />\n                </p>\n            )}\n            <div className=\"topic-page-header__cta-buttons col-start-2 span-cols-8 col-sm-start-2 span-sm-cols-12\">\n                <a href={`#${CITATION_ID}`}>\n                    <FontAwesomeIcon icon={faBook} />\n                    Cite this work\n                </a>\n                <a href={`#${LICENSE_ID}`}>\n                    <FontAwesomeIcon icon={faCreativeCommons} />\n                    Reuse this work\n                </a>\n            </div>\n        </header>\n    )\n}\n\nfunction OwidLinearTopicPageHeader({\n    content,\n}: {\n    content: OwidGdocPostContent\n}) {\n    return (\n        <header className=\"topic-page-header linear-topic-page-header grid span-cols-14 grid-cols-12-full-width\">\n            <h1 className=\"display-2-semibold col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\">\n                {content.title}\n            </h1>\n            <p className=\"topic-page-header__subtitle body-1-regular col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\">\n                {content.subtitle}\n            </p>\n            {content.authors.length > 0 && (\n                <p className=\"topic-page-header__byline col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\">\n                    <Byline\n                        authors={content.authors}\n                        authorRoles={content.authorRoles}\n                        contributors={content.contributors}\n                    />\n                </p>\n            )}\n            <div className=\"topic-page-header__cta-buttons linear-topic-page-header__cta-buttons col-start-11 span-cols-3 col-lg-start-5 span-lg-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\">\n                {!content[\"hide-citation\"] && (\n                    <a href={`#${CITATION_ID}`}>\n                        <FontAwesomeIcon icon={faBook} />\n                        Cite this work\n                    </a>\n                )}\n                <a href={`#${LICENSE_ID}`}>\n                    <FontAwesomeIcon icon={faCreativeCommons} />\n                    Reuse this work\n                </a>\n            </div>\n            {content.dateline && (\n                <p className=\"topic-page-header__dateline body-3-medium-italic col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\">\n                    {content.dateline}\n                </p>\n            )}\n        </header>\n    )\n}\n\nexport function OwidGdocHeader(props: {\n    content: OwidGdocPostContent\n    publishedAt: Date | null\n    breadcrumbs?: BreadcrumbItem[]\n    isDeprecated?: boolean\n}) {\n    if (props.content.type === OwidGdocType.Article)\n        return <OwidArticleHeader {...props} />\n    if (props.content.type === OwidGdocType.TopicPage)\n        return <OwidTopicPageHeader {...props} />\n    if (props.content.type === OwidGdocType.LinearTopicPage)\n        return <OwidLinearTopicPageHeader {...props} />\n    // Defaulting to ArticleHeader, but will require the value to be set for all docs going forward\n    return <OwidArticleHeader {...props} />\n}\n","import * as _ from \"lodash-es\"\nimport { Component, createRef } from \"react\"\nimport cx from \"clsx\"\nimport { getPrefersReducedMotion } from \"@ourworldindata/components\"\n\nfunction getTotalOffset(element: HTMLElement): {\n    x: number\n    y: number\n} {\n    let y = 0\n    let x = 0\n    while (true) {\n        x += element.offsetLeft\n        y += element.offsetTop\n        if (!element.offsetParent) {\n            break\n        }\n        element = element.offsetParent as HTMLElement\n    }\n    return { x, y }\n}\n\nconst STICKY_NAV_HEIGHT = 54\nconst HEADING_SCROLL_MARGIN = 16\n\ninterface HeadingPosition {\n    id: string\n    yPosition: number\n}\n\ninterface StickyNavLink {\n    text: string\n    target: string\n}\n\ninterface StickyNavProps {\n    links: StickyNavLink[]\n    className?: string\n}\nclass StickyNav extends Component<\n    StickyNavProps,\n    {\n        headingPositions: HeadingPosition[]\n        currentHeadingIndex?: number\n        links: StickyNavLink[]\n    }\n> {\n    ulRef = createRef<HTMLUListElement>()\n    resizeObserver: ResizeObserver | null = null\n\n    override state = {\n        currentHeadingIndex: undefined,\n        headingPositions: [] as HeadingPosition[],\n        links: this.props.links,\n    }\n\n    handleResize = () => {\n        window.requestAnimationFrame(() => this.setHeadingPositions())\n    }\n\n    handleScroll: () => void = _.throttle(() => {\n        this.setCurrentHeading()\n    }, 50)\n\n    // Make sure that each item in the nav actually points to a heading in the page\n    filterValidLinks() {\n        const validLinks = this.state.links.filter(\n            (link) =>\n                link.target.startsWith(\"#\") &&\n                document.querySelector(link.target)\n        )\n\n        this.setState({\n            links: validLinks,\n        })\n    }\n\n    setCurrentHeading() {\n        const { scrollY } = window\n        let currentHeadingIndex = 0\n        for (let i = 0; i < this.state.headingPositions.length; i++) {\n            const heading = this.state.headingPositions[i]\n            const target =\n                heading.yPosition -\n                STICKY_NAV_HEIGHT -\n                HEADING_SCROLL_MARGIN -\n                // Additional clearance for height of actual element\n                32\n            if (scrollY <= target) {\n                break\n            } else {\n                currentHeadingIndex = i\n            }\n        }\n\n        const current = this.ulRef.current\n        if (current) {\n            const parent = current.parentElement\n            if (parent) {\n                const hasScrollbar = parent.scrollWidth < current.scrollWidth\n                if (hasScrollbar) {\n                    const listItem = current.children[\n                        currentHeadingIndex\n                    ] as HTMLElement\n                    const containerPadding = 32\n                    current.scrollTo({\n                        behavior: getPrefersReducedMotion() ? \"auto\" : \"smooth\",\n                        left: listItem.offsetLeft - containerPadding,\n                    })\n                }\n            }\n        }\n\n        this.setState({\n            currentHeadingIndex,\n        })\n    }\n\n    setHeadingPositions() {\n        const headingPositions: HeadingPosition[] = []\n\n        this.state.links.forEach(({ target }, i) => {\n            const element = document.querySelector<HTMLElement>(target)\n            if (element) {\n                const { y } = getTotalOffset(element)\n                headingPositions.push({ id: target, yPosition: y })\n            } else {\n                // Because of filterValidLinks, this should never happen\n                // But if it does, pretend the heading exists\n                // 1 pixel after the preceding heading\n                const previousHeadingYPosition =\n                    i === 0 ? 0 : headingPositions[i - 1].yPosition\n                headingPositions.push({\n                    id: target,\n                    yPosition: previousHeadingYPosition + 1,\n                })\n            }\n        })\n\n        this.setState(\n            {\n                headingPositions,\n            },\n            () => {\n                this.setCurrentHeading()\n            }\n        )\n    }\n\n    override componentDidMount() {\n        this.filterValidLinks()\n        window.addEventListener(\"scroll\", this.handleScroll, { passive: true })\n        // Web fonts and grapher hydration make the page height change\n        // So we recalculate the heading positions whenever the document body changes size\n        this.resizeObserver = new ResizeObserver(this.handleResize)\n        this.resizeObserver.observe(document.body)\n    }\n\n    override componentWillUnmount() {\n        window.removeEventListener(\"scroll\", this.handleScroll)\n        this.resizeObserver?.disconnect()\n    }\n\n    override render() {\n        if (!this.state.links) return null\n        return (\n            <>\n                <style>\n                    {/* add scroll-margin-top to all elements with an ID */}\n                    {/* increase top margin for sticky columns so the nav doesn't obscure them */}\n                    {`\n                    [id] {\n                         scroll-margin-top:${\n                             STICKY_NAV_HEIGHT + HEADING_SCROLL_MARGIN\n                         }px;\n                    }\n                    .wp-sticky-container {\n                        top: 70px;\n                    }`}\n                </style>\n                <ul\n                    className={cx(\"sticky-nav-container\", this.props.className)}\n                    ref={this.ulRef}\n                >\n                    {this.state.links.map((link, i) => (\n                        <li key={link.target}>\n                            <a\n                                tabIndex={0}\n                                className={cx({\n                                    active:\n                                        i === this.state.currentHeadingIndex,\n                                })}\n                                href={link.target}\n                            >\n                                {link.text}\n                            </a>\n                        </li>\n                    ))}\n                </ul>\n            </>\n        )\n    }\n}\n\nexport default StickyNav\n","import { CITATION_ID } from \"@ourworldindata/utils\"\nimport { CodeSnippet } from \"@ourworldindata/components\"\n\n/** The \"Cite this work\" section at the foot of a gdoc page */\nexport function CitationSection({\n    citationText,\n    bibtex,\n    description,\n    isDeprecated,\n}: {\n    citationText: string\n    bibtex: string\n    description: string\n    isDeprecated?: boolean\n}) {\n    return (\n        <section\n            id={CITATION_ID}\n            className=\"grid grid-cols-12-full-width col-start-1 col-end-limit no-dividers\"\n        >\n            <div className=\"col-start-4 span-cols-8 col-md-start-3 span-md-cols-10 col-sm-start-2 span-sm-cols-12\">\n                <h3>Cite this work</h3>\n                {isDeprecated && (\n                    <p className=\"citation-deprecated-notice\">\n                        <span className=\"citation-deprecated-notice__highlight\">\n                            This content is outdated\n                        </span>\n                        , but if you would still like to use it, here is how to\n                        cite it:\n                        <br />\n                    </p>\n                )}\n                <p>{description}</p>\n                <div>\n                    <CodeSnippet code={citationText} />\n                </div>\n                <p>BibTeX citation</p>\n                <div>\n                    <CodeSnippet code={bibtex} />\n                </div>\n            </div>\n        </section>\n    )\n}\n","export const OxfordAndGcdlLogos = () => (\n    <>\n        <a href=\"https://www.oxfordmartin.ox.ac.uk/global-development\">\n            <img\n                src={\"/oms-logo.svg\"}\n                alt=\"Oxford Martin School logo\"\n                loading=\"lazy\"\n                width={96}\n                height={103}\n            />\n        </a>\n        <a href=\"https://www.ox.ac.uk/\">\n            <img\n                src={\"/oxford-logo.svg\"}\n                alt=\"University of Oxford logo\"\n                loading=\"lazy\"\n                width={96}\n                height={103}\n            />\n        </a>\n        <a href=\"https://global-change-data-lab.org/\">\n            <img\n                src={\"/gcdl-logo.svg\"}\n                alt=\"Global Change Data Lab logo\"\n                loading=\"lazy\"\n                width={80}\n                height={103}\n            />\n        </a>\n    </>\n)\n\nexport const SiteLogos = ({ homeUrl = \"/\" }: { homeUrl?: string }) => {\n    return (\n        <div className=\"site-logos\">\n            <div className=\"logo-owid\">\n                <a href={homeUrl}>\n                    Our World\n                    <br /> in Data\n                </a>\n            </div>\n            <div className=\"logos-wrapper\">\n                <OxfordAndGcdlLogos />\n            </div>\n        </div>\n    )\n}\n","import { ArchiveVersions } from \"@ourworldindata/types\"\nimport { QueryClient, useQuery } from \"@tanstack/react-query\"\n\n// The convention is to use a single query client shared via\n// QueryClientProvider, but currently we don't render the two components where\n// we fetch versions in the same React tree (they are hydrated separately), so\n// we share the query client this way.\nconst queryClient = new QueryClient()\n\nexport interface UseVersionsQueryOptions {\n    enabled?: boolean\n}\n\nexport async function fetchVersions(url: string): Promise<ArchiveVersions> {\n    const response = await fetch(url)\n    if (!response.ok) {\n        throw new Error(`Failed to fetch versions file: ${response.statusText}`)\n    }\n    return response.json()\n}\n\nexport function useVersionsQuery(\n    url?: string,\n    options?: UseVersionsQueryOptions\n) {\n    return useQuery(\n        {\n            queryKey: [\"archive-versions\"],\n            queryFn: () => {\n                if (!url) {\n                    throw new Error(\"URL is required\")\n                }\n                return fetchVersions(url)\n            },\n            enabled: Boolean(url) && (options?.enabled ?? true),\n            staleTime: \"static\", // Fetch only on page load.\n        },\n        queryClient\n    )\n}\n","import { useMemo } from \"react\"\nimport * as R from \"remeda\"\nimport { ArchiveVersions } from \"@ourworldindata/types\"\nimport { useVersionsQuery, UseVersionsQueryOptions } from \"./queries.js\"\n\nexport function useArchiveVersions(\n    versionsFileUrl?: string,\n    options?: UseVersionsQueryOptions\n): Omit<ReturnType<typeof useVersionsQuery>, \"data\"> & {\n    data: ArchiveVersions[\"versions\"]\n} {\n    const result = useVersionsQuery(versionsFileUrl, options)\n\n    const versions = useMemo(() => {\n        const versionsObj = result.data\n        if (\n            !R.isPlainObject(versionsObj) ||\n            !(\"versions\" in versionsObj) ||\n            !Array.isArray(versionsObj.versions)\n        )\n            return []\n\n        return versionsObj.versions\n    }, [result.data])\n\n    return useMemo(\n        () => ({\n            ...result,\n            data: versions,\n        }),\n        [result, versions]\n    )\n}\n","import { Button } from \"@ourworldindata/components\"\nimport { SiteLogos } from \"../SiteLogos.js\"\nimport {\n    faArrowLeft,\n    faArrowRight,\n    faInfoCircle,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    dayjs,\n    formatAsArchivalDate,\n    parseArchivalDate,\n    Tippy,\n} from \"@ourworldindata/utils\"\nimport {\n    ArchivalDateString,\n    type ArchiveSiteNavigationInfo,\n} from \"@ourworldindata/types\"\nimport { PROD_URL } from \"../SiteConstants.js\"\nimport { useMemo, useState } from \"react\"\nimport * as R from \"remeda\"\nimport { useWindowQueryParams } from \"../hooks.js\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { VersionsDrawer } from \"./VersionsDrawer.js\"\nimport { useArchiveVersions } from \"./versions.js\"\n\nexport const DATE_FORMAT = \"MMMM D, YYYY\"\nexport const TIME_FORMAT = \"HH:mm\"\n\nexport interface ArchiveNavigationProps extends Omit<\n    ArchiveSiteNavigationInfo,\n    \"contentType\"\n> {\n    archivalDate: ArchivalDateString\n}\n\ntype ArchiveWritingNavigationProps = Omit<\n    ArchiveNavigationProps,\n    \"previousVersion\" | \"nextVersion\"\n>\n\nfunction ArchiveText({ tooltipContent }: { tooltipContent: string }) {\n    return (\n        <div className=\"archive-navigation-bar__archive_text\">\n            Archive\n            <Tippy\n                content={tooltipContent}\n                theme=\"owid-footnote\"\n                placement=\"right\"\n                appendTo={() => document.body}\n                trigger=\"mouseenter focus click\"\n                interactive\n                interactiveDebounce={50}\n            >\n                <span className=\"archive-navigation-bar__archive_text--tooltip\">\n                    <FontAwesomeIcon icon={faInfoCircle} />\n                </span>\n            </Tippy>\n        </div>\n    )\n}\n\nfunction ArchiveDate({ dayjsDate }: { dayjsDate: dayjs.Dayjs }) {\n    return (\n        <div className=\"archive-navigation-bar__date\">\n            <span className=\"archive-navigation-bar__date-value\">\n                {dayjsDate.format(DATE_FORMAT)}\n            </span>\n            &nbsp;\n            <span className=\"archive-navigation-bar__time-value\">\n                at {dayjsDate.format(TIME_FORMAT)} UTC\n            </span>\n        </div>\n    )\n}\n\nexport function ArchiveDataNavigation(props: ArchiveNavigationProps) {\n    return (\n        <div className=\"archive-site-navigation\">\n            <ArchiveHeaderLogoBar />\n            <ArchiveDataNavigationBar {...props} />\n        </div>\n    )\n}\n\nfunction ArchiveHeaderLogoBar() {\n    return (\n        <div className=\"archive-header-logo-bar\">\n            <div className=\"wrapper\">\n                <SiteLogos homeUrl={PROD_URL} />\n            </div>\n        </div>\n    )\n}\n\nfunction ArchiveDataNavigationBar({\n    liveUrl,\n    previousVersion: propsPreviousVersion,\n    nextVersion: propsNextVersion,\n    archivalDate,\n    versionsFileUrl,\n}: ArchiveNavigationProps) {\n    const hasButtons = !!(liveUrl || propsPreviousVersion || propsNextVersion)\n    const dayjsDate = parseArchivalDate(archivalDate)\n    const pageArchivalDate = formatAsArchivalDate(dayjsDate)\n    const { data: versions } = useArchiveVersions(versionsFileUrl)\n    const queryStr = useWindowQueryParams()\n\n    const { previousVersion, nextVersion } = useMemo(() => {\n        if (versions.length === 0) {\n            return {\n                previousVersion: propsPreviousVersion,\n                nextVersion: propsNextVersion,\n            }\n        }\n        // Find the index of the current version in the sorted list\n        const currentVersionIdx = R.sortedIndexWith(\n            versions,\n            (item) => item.archivalDate < pageArchivalDate\n        )\n        if (versions[currentVersionIdx]?.archivalDate === pageArchivalDate) {\n            return {\n                previousVersion: versions[currentVersionIdx - 1],\n                nextVersion: versions[currentVersionIdx + 1],\n            }\n        } else {\n            // This case is rare but could in theory happen: The current version could not be found in the array.\n            // In this case, we have versionsArr[currentVersionIdx] > pageArchivalDate,\n            // so we need a slightly different logic to find the previous and next versions.\n            return {\n                previousVersion: versions[currentVersionIdx - 1],\n                nextVersion: versions[currentVersionIdx],\n            }\n        }\n    }, [pageArchivalDate, propsPreviousVersion, propsNextVersion, versions])\n\n    return (\n        <nav className=\"archive-navigation-bar grid grid-cols-12-full-width\">\n            <div className=\"archive-navigation-bar__wrapper col-start-2 span-cols-12\">\n                <ArchiveText tooltipContent=\"We update our data regularly. To aid transparency and reproducibility, we archive versions of the data when an update is made. This allows users to cite a specific version of the data that does not change.\" />\n                <ArchiveDate dayjsDate={dayjsDate} />\n                {hasButtons && (\n                    <div className=\"archive-data-navigation-bar__buttons\">\n                        <Button\n                            className=\"archive-data-navigation-bar__button archive-data-navigation-bar__button-left\"\n                            style={{\n                                visibility: previousVersion\n                                    ? \"visible\"\n                                    : \"hidden\",\n                            }}\n                            href={\n                                previousVersion\n                                    ? previousVersion.url + queryStr\n                                    : undefined\n                            }\n                            theme=\"outline-white\"\n                            icon={faArrowLeft}\n                            iconPosition=\"left\"\n                            text=\"Go to the previous version\"\n                            dataTrackNote=\"archive-header-go-to-previous\"\n                        />\n                        {liveUrl && (\n                            <Button\n                                className=\"archive-data-navigation-bar__button\"\n                                href={liveUrl + queryStr}\n                                theme=\"solid-dark-blue\"\n                                icon={null}\n                                text=\"Go to the live version\"\n                                dataTrackNote=\"archive-header-go-to-live\"\n                            />\n                        )}\n                        <Button\n                            className=\"archive-data-navigation-bar__button archive-data-navigation-bar__button-right\"\n                            style={{\n                                visibility: nextVersion ? \"visible\" : \"hidden\",\n                            }}\n                            href={\n                                nextVersion\n                                    ? nextVersion.url + queryStr\n                                    : undefined\n                            }\n                            theme=\"outline-white\"\n                            icon={faArrowRight}\n                            iconPosition=\"right\"\n                            text=\"Go to the next version\"\n                            dataTrackNote=\"archive-header-go-to-next\"\n                        />\n                    </div>\n                )}\n            </div>\n        </nav>\n    )\n}\n\nexport function ArchiveWritingNavigation(props: ArchiveWritingNavigationProps) {\n    return (\n        <div className=\"archive-site-navigation\">\n            <ArchiveHeaderLogoBar />\n            <ArchiveWritingNavigationBar {...props} />\n        </div>\n    )\n}\n\nfunction ArchiveWritingNavigationBar({\n    versionsFileUrl,\n    liveUrl,\n    archivalDate,\n}: ArchiveWritingNavigationProps) {\n    const hasButtons = Boolean(versionsFileUrl || liveUrl)\n    const dayjsDate = parseArchivalDate(archivalDate)\n    const pageArchivalDate = formatAsArchivalDate(dayjsDate)\n    const [isDrawerOpen, setIsDrawerOpen] = useState(false)\n    const [hasRequestedVersions, setHasRequestedVersions] = useState(false)\n    const { data: versions, status } = useArchiveVersions(versionsFileUrl, {\n        enabled: hasRequestedVersions,\n    })\n    const queryStr = useWindowQueryParams()\n    const liveVersionHref = liveUrl ? liveUrl + queryStr : undefined\n\n    function handleDrawerOpenChange(isOpen: boolean) {\n        setIsDrawerOpen(isOpen)\n        if (isOpen) setHasRequestedVersions(true)\n    }\n\n    return (\n        <>\n            <nav className=\"archive-navigation-bar grid grid-cols-12-full-width\">\n                <div className=\"archive-navigation-bar__wrapper col-start-2 span-cols-12\">\n                    <ArchiveText tooltipContent=\"We update our data and writing regularly. To aid transparency and reproducibility, we archive articles when either their content or related data changes. This allows you to cite a specific version of an article that remains the same across time.\" />\n                    <ArchiveDate dayjsDate={dayjsDate} />\n                    {hasButtons && (\n                        <div className=\"archive-writing-navigation-bar__buttons\">\n                            {versionsFileUrl && (\n                                <Button\n                                    theme=\"outline-white\"\n                                    icon={null}\n                                    text=\"Browse all versions\"\n                                    dataTrackNote=\"archive-header-browse-versions\"\n                                    onClick={() => handleDrawerOpenChange(true)}\n                                />\n                            )}\n                            {liveVersionHref && (\n                                <Button\n                                    href={liveVersionHref}\n                                    theme=\"solid-dark-blue\"\n                                    icon={null}\n                                    text=\"Go to the live version\"\n                                    dataTrackNote=\"archive-header-go-to-live\"\n                                />\n                            )}\n                        </div>\n                    )}\n                </div>\n            </nav>\n            {/* NOTE: We should render the versions drawer only once per page,\n            but since the header and the gdoc body are hydrated separately, they\n            don't have a common parent where we could share the drawer state and\n            render it only once. Data fetching is deduplicated because they\n            share the query client. */}\n            <VersionsDrawer\n                isOpen={isDrawerOpen}\n                onOpenChange={handleDrawerOpenChange}\n                versions={versions}\n                status={status}\n                queryString={queryStr}\n                liveUrl={liveVersionHref}\n                currentArchivalDate={pageArchivalDate}\n            />\n        </>\n    )\n}\n","import cx from \"clsx\"\nimport { ModalOverlay, Modal, Dialog } from \"react-aria-components\"\nimport type { QueryStatus } from \"@tanstack/react-query\"\nimport { CloseButton, LoadingIndicator } from \"@ourworldindata/components\"\nimport { ArchivalDateString, ArchiveVersions } from \"@ourworldindata/types\"\nimport { parseArchivalDate } from \"@ourworldindata/utils\"\nimport { ARCHIVE_BASE_URL, IS_ARCHIVE } from \"../../settings/clientSettings.mjs\"\nimport { DATE_FORMAT, TIME_FORMAT } from \"./ArchiveNavigation.js\"\n\nconst BASE_URL = IS_ARCHIVE ? \"\" : ARCHIVE_BASE_URL\n\nexport type ArchiveVersionEntry = ArchiveVersions[\"versions\"][number]\n\nfunction formatVersionDateTime(archivalDate: ArchivalDateString) {\n    const versionDate = parseArchivalDate(archivalDate)\n    return `${versionDate.format(DATE_FORMAT)} at ${versionDate.format(TIME_FORMAT)} UTC`\n}\n\nfunction getCurrentVersionEntry(\n    archivalDate?: ArchivalDateString,\n    archiveUrl?: string\n): ArchiveVersionEntry | undefined {\n    if (!archivalDate || typeof window === \"undefined\") return undefined\n    const url = archiveUrl\n        ? new URL(archiveUrl).pathname\n        : window.location.pathname\n    if (!url) return undefined\n    const slug = url.split(\"/\").filter(Boolean).pop()\n    if (!slug) return undefined\n    return { archivalDate, slug, url }\n}\n\nfunction VersionItem({\n    variant,\n    href,\n    title,\n    description,\n    isSelected,\n    isLive,\n}: {\n    variant: \"small\" | \"large\"\n    href: string\n    title: string\n    description?: string\n    isSelected?: boolean\n    isLive?: boolean\n}) {\n    return (\n        <li\n            className={cx(\"versions-drawer-timeline__item\", {\n                \"versions-drawer-timeline__item--small\": variant === \"small\",\n                \"versions-drawer-timeline__item--large\": variant === \"large\",\n                \"versions-drawer-timeline__item--selected\": isSelected,\n            })}\n        >\n            <div className=\"versions-drawer-timeline__dot\" aria-hidden />\n            <a\n                className=\"versions-drawer-timeline__link\"\n                href={href}\n                aria-current={isSelected ? \"page\" : undefined}\n                data-track-note=\"archive-timeline-version-link\"\n            >\n                <div\n                    className={\n                        // We need separate classes instead of default +\n                        // override because the font mixins don't define the\n                        // same properties.\n                        isLive\n                            ? \"versions-drawer-timeline__title--live\"\n                            : \"versions-drawer-timeline__title--archived\"\n                    }\n                >\n                    {title}\n                </div>\n                {description && (\n                    <div className=\"versions-drawer-timeline__description\">\n                        {description}\n                    </div>\n                )}\n            </a>\n        </li>\n    )\n}\n\nfunction VersionsTimeline({\n    versions,\n    queryString,\n    isLive,\n    isError,\n    liveUrl,\n    currentArchivalDate,\n}: {\n    versions: ArchiveVersionEntry[]\n    queryString: string\n    isLive?: boolean\n    isError?: boolean\n    liveUrl?: string\n    currentArchivalDate?: ArchivalDateString\n}) {\n    return (\n        <ol className=\"versions-drawer-timeline\" aria-label=\"Archived versions\">\n            {liveUrl && (\n                <VersionItem\n                    variant=\"large\"\n                    href={liveUrl}\n                    title=\"Live version\"\n                    isLive\n                    isSelected={isLive}\n                />\n            )}\n            {versions.toReversed().map((version, index) => {\n                const formattedDisplay = formatVersionDateTime(\n                    version.archivalDate\n                )\n                const isFirstVersion = index === versions.length - 1\n                const isSelected =\n                    !isLive && version.archivalDate === currentArchivalDate\n                return (\n                    <VersionItem\n                        key={version.archivalDate}\n                        variant={isFirstVersion ? \"large\" : \"small\"}\n                        href={`${BASE_URL}${version.url}${queryString}`}\n                        title={formattedDisplay}\n                        isSelected={isSelected}\n                        description={\n                            isFirstVersion && !isError\n                                ? \"First available archived version of this article\"\n                                : undefined\n                        }\n                    />\n                )\n            })}\n        </ol>\n    )\n}\n\nexport function VersionsDrawer({\n    isOpen,\n    onOpenChange,\n    versions,\n    status,\n    queryString,\n    isLive,\n    liveUrl,\n    currentArchivalDate,\n    archiveUrl,\n}: {\n    isOpen: boolean\n    onOpenChange: (isOpen: boolean) => void\n    versions: ArchiveVersionEntry[]\n    status: QueryStatus\n    queryString: string\n    isLive?: boolean\n    liveUrl?: string\n    currentArchivalDate?: ArchivalDateString\n    archiveUrl?: string\n}) {\n    const currentVersionEntry = getCurrentVersionEntry(\n        currentArchivalDate,\n        archiveUrl\n    )\n    const versionsForTimeline =\n        status === \"error\" && currentVersionEntry\n            ? [currentVersionEntry]\n            : versions\n    const showTimeline = versionsForTimeline.length > 0\n    let content\n    if (status === \"pending\") {\n        content = <LoadingIndicator />\n    } else if (status === \"error\") {\n        content = (\n            <>\n                {showTimeline ? (\n                    <>\n                        <VersionsTimeline\n                            versions={versionsForTimeline}\n                            queryString={queryString}\n                            isLive={isLive}\n                            isError={status === \"error\"}\n                            liveUrl={liveUrl}\n                            currentArchivalDate={currentArchivalDate}\n                        />\n                        <div\n                            className=\"versions-drawer__status versions-drawer__status--error\"\n                            role=\"alert\"\n                        >\n                            Unable to load more versions.\n                        </div>\n                    </>\n                ) : (\n                    <div className=\"versions-drawer__status\" role=\"status\">\n                        No archived versions available.\n                    </div>\n                )}\n            </>\n        )\n    } else if (!showTimeline) {\n        content = (\n            <div className=\"versions-drawer__status\" role=\"status\">\n                No archived versions available.\n            </div>\n        )\n    } else {\n        content = (\n            <VersionsTimeline\n                versions={versionsForTimeline}\n                queryString={queryString}\n                isLive={isLive}\n                liveUrl={liveUrl}\n                currentArchivalDate={currentArchivalDate}\n            />\n        )\n    }\n    return (\n        <ModalOverlay\n            className=\"versions-drawer-overlay\"\n            isOpen={isOpen}\n            onOpenChange={onOpenChange}\n            isDismissable\n        >\n            <Modal className=\"versions-drawer-modal\">\n                <Dialog\n                    aria-label=\"Version history\"\n                    className=\"versions-drawer-dialog\"\n                >\n                    {({ close }) => (\n                        <div className=\"versions-drawer-dialog__container\">\n                            <div className=\"versions-drawer-dialog__header\">\n                                <h2 className=\"versions-drawer-dialog__title\">\n                                    Version history\n                                </h2>\n                                <CloseButton\n                                    className=\"versions-drawer-dialog__close-button\"\n                                    onClick={() => close()}\n                                />\n                            </div>\n                            <div className=\"versions-drawer-dialog__content\">\n                                {content}\n                            </div>\n                        </div>\n                    )}\n                </Dialog>\n            </Modal>\n        </ModalOverlay>\n    )\n}\n","import { useState } from \"react\"\nimport { faClockRotateLeft } from \"@fortawesome/free-solid-svg-icons\"\nimport { PAST_VERSIONS_ID } from \"@ourworldindata/utils\"\nimport { Button } from \"@ourworldindata/components\"\nimport { VersionsDrawer } from \"../../archive/VersionsDrawer.js\"\nimport { useArchiveVersions } from \"../../archive/versions.js\"\nimport { useWindowQueryParams } from \"../../hooks.js\"\nimport { useDocumentContext, useVersionsFileUrl } from \"../DocumentContext.js\"\n\n/** The \"Past versions\" section at the foot of an article */\nexport function PastVersionsSection() {\n    const { archiveContext } = useDocumentContext()\n    const isOnArchivePage = archiveContext?.type === \"archive-page\"\n    const versionsFileUrl = useVersionsFileUrl()\n    const [isDrawerOpen, setIsDrawerOpen] = useState(false)\n    const [hasRequestedVersions, setHasRequestedVersions] = useState(false)\n    const { data: versions, status } = useArchiveVersions(versionsFileUrl, {\n        enabled: hasRequestedVersions,\n    })\n    const queryStr = useWindowQueryParams()\n    let liveUrl: string | undefined\n    if (isOnArchivePage) {\n        liveUrl = archiveContext?.archiveNavigation.liveUrl + queryStr\n    } else {\n        liveUrl =\n            typeof window !== \"undefined\" ? window.location.href : undefined\n    }\n\n    function handleDrawerOpenChange(isOpen: boolean) {\n        setIsDrawerOpen(isOpen)\n        if (isOpen) setHasRequestedVersions(true)\n    }\n\n    if (!versionsFileUrl) return null\n\n    return (\n        <section\n            id={PAST_VERSIONS_ID}\n            className=\"past-versions-section grid grid-cols-12-full-width col-start-1 col-end-limit\"\n        >\n            <div className=\"past-versions-section__content col-start-4 span-cols-8 col-md-start-3 span-md-cols-10 col-sm-start-2 span-sm-cols-12\">\n                <div className=\"past-versions-section__copy\">\n                    <h3>Past versions</h3>\n                    <p>\n                        We are a live site and we keep our work maintained. So\n                        our articles are often changed, including the data. You\n                        can browse previous versions of this work here.\n                    </p>\n                </div>\n                <Button\n                    className=\"past-versions-section__browse-button\"\n                    theme=\"outline-dark-blue\"\n                    text=\"Browse past versions\"\n                    icon={faClockRotateLeft}\n                    iconPosition=\"left\"\n                    onClick={() => handleDrawerOpenChange(true)}\n                    dataTrackNote=\"gdoc-past-versions-section-open\"\n                />\n            </div>\n            {/* NOTE: On archived pages, the archive navigation bar renders a\n            second versions drawer. It is hydrated separately from the gdoc\n            body, so the two can't share one drawer. Data fetching is\n            deduplicated because they share the query client. */}\n            <VersionsDrawer\n                isOpen={isDrawerOpen}\n                onOpenChange={handleDrawerOpenChange}\n                versions={versions}\n                status={status}\n                queryString={queryStr}\n                isLive={!isOnArchivePage}\n                liveUrl={liveUrl}\n                currentArchivalDate={archiveContext?.archivalDate}\n                archiveUrl={archiveContext?.archiveUrl}\n            />\n        </section>\n    )\n}\n","import { LICENSE_ID } from \"@ourworldindata/utils\"\nimport { IS_ARCHIVE } from \"../../../settings/clientSettings.mjs\"\nimport { PROD_URL } from \"../../SiteConstants.js\"\n\nconst BASE_URL = IS_ARCHIVE ? PROD_URL : \"\"\n\n/** The \"Reuse this work freely\" section at the foot of a gdoc page */\nexport function LicenseSection({ isDeprecated }: { isDeprecated?: boolean }) {\n    return (\n        <section\n            id={LICENSE_ID}\n            className=\"grid grid-cols-12-full-width col-start-1 col-end-limit\"\n        >\n            <div className=\"col-start-4 span-cols-8 col-md-start-3 span-md-cols-10 col-sm-start-2 span-sm-cols-12\">\n                {!isDeprecated && (\n                    <>\n                        <img\n                            src=\"/owid-logo.svg\"\n                            alt=\"Our World in Data logo\"\n                            loading=\"lazy\"\n                            width={85}\n                            height={47}\n                        />\n                        <h3>Reuse this work freely</h3>\n                    </>\n                )}\n\n                <p>\n                    All visualizations, data, and articles produced by Our World\n                    in Data are completely open access under the{\" \"}\n                    <a href=\"https://creativecommons.org/licenses/by/4.0/\">\n                        Creative Commons BY license\n                    </a>\n                    . You have the permission to use, distribute, and reproduce\n                    these in any medium, provided the source and authors are\n                    credited.\n                </p>\n                <p>\n                    The data produced by third parties and made available by Our\n                    World in Data is subject to the license terms from the\n                    original third-party authors. We will always indicate the\n                    original source of the data in our documentation, so you\n                    should always check the license of any such third-party data\n                    before use and redistribution.\n                </p>\n                {!isDeprecated && (\n                    <p>\n                        All of{\" \"}\n                        <a\n                            href={`${BASE_URL}/faqs#how-can-i-embed-one-of-your-interactive-charts-in-my-website`}\n                        >\n                            our charts can be embedded\n                        </a>{\" \"}\n                        in any site.\n                    </p>\n                )}\n            </div>\n        </section>\n    )\n}\n","import { useEffect, useRef } from \"react\"\n\n/**\n * Clears a lingering #section from the URL when the reader returns to the top\n * of the page (scrolling up above the first section, or clicking \"Back to\n * top\"), so it no longer points at a section they've scrolled away from.\n *\n * Fires only on the transition from a section to \"\" — `undefined` (scroll-spy\n * hasn't measured yet) never counts, so a deep-link #section survives the\n * initial render. replaceState avoids both a new history entry and a scroll\n * jump.\n */\nexport const useClearHashOnReturnToTop = (\n    activeId: string | undefined\n): void => {\n    const prevActiveIdRef = useRef(activeId)\n    useEffect(() => {\n        const prev = prevActiveIdRef.current\n        prevActiveIdRef.current = activeId\n        const hadActiveSection = prev !== undefined && prev !== \"\"\n        if (hadActiveSection && activeId === \"\" && window.location.hash) {\n            history.replaceState(\n                null,\n                \"\",\n                window.location.pathname + window.location.search\n            )\n        }\n    }, [activeId])\n}\n","import { useEffect, useRef, type RefObject } from \"react\"\n\nconst ACTIVE_TOC_ROW_SCROLL_MARGIN = 16\n\nexport const useKeepActiveTocRowInView = (\n    activeId: string | undefined\n): RefObject<HTMLDivElement | null> => {\n    const containerRef = useRef<HTMLDivElement>(null)\n\n    // Keep the active row visible inside the TOC's own scroll container as the\n    // scroll-spy advances. scrollTop is computed by hand (not scrollIntoView,\n    // which walks up the scroll chain) so this can never move the page.\n    useEffect(() => {\n        if (!activeId) return\n        const container = containerRef.current\n        // offsetParent is null when the container is display:none (mobile).\n        if (!container || container.offsetParent === null) return\n\n        const row = container.querySelector<HTMLElement>(\n            `[data-toc-id=\"${CSS.escape(activeId)}\"]`\n        )\n        if (!row) return\n\n        // Row position relative to the container's scrollable content (uses\n        // rects, not offsetTop, since the row can be positioned).\n        const containerRect = container.getBoundingClientRect()\n        const rowRect = row.getBoundingClientRect()\n        const rowTop = rowRect.top - containerRect.top + container.scrollTop\n        const rowBottom = rowTop + rowRect.height\n        const viewTop = container.scrollTop\n        const viewBottom = viewTop + container.clientHeight\n\n        let targetScrollTop: number | undefined\n        if (rowTop < viewTop + ACTIVE_TOC_ROW_SCROLL_MARGIN) {\n            targetScrollTop = rowTop - ACTIVE_TOC_ROW_SCROLL_MARGIN\n        } else if (rowBottom > viewBottom - ACTIVE_TOC_ROW_SCROLL_MARGIN) {\n            targetScrollTop =\n                rowBottom -\n                container.clientHeight +\n                ACTIVE_TOC_ROW_SCROLL_MARGIN\n        } else {\n            return // already comfortably visible\n        }\n\n        const maxScrollTop = container.scrollHeight - container.clientHeight\n        const nextScrollTop = Math.max(\n            0,\n            Math.min(targetScrollTop, maxScrollTop)\n        )\n        if (Math.abs(nextScrollTop - viewTop) < 1) return\n        // Instant: no animation to compete with the reader's own scrolling.\n        container.scrollTo({ top: nextScrollTop })\n    }, [activeId])\n\n    return containerRef\n}\n","import { useState, useEffect } from \"react\"\n\n/**\n * Scroll-spy for the sidebar TOC. Given a document-ordered list of element ids\n * (H1 section slugs interleaved with chart anchor ids), returns the id the\n * reader is currently on: the last target whose top edge has scrolled above a\n * fixed activation line near the top of the viewport. Pure function of scroll\n * position — same model as the topic-page top nav, site/blocks/StickyNav.tsx.\n * `undefined` until the first measurement, \"\" once measured while above the\n * first target.\n *\n * Clicking a TOC link needs no special handling: the anchor jump fires a\n * scroll event and the spy recomputes from the landing position.\n */\n\n// Activation line, in px from the top of the viewport: far enough below the\n// page chrome that the TOC advances when a section feels visually current.\nconst ACTIVATION_OFFSET_PX = 160\n\nexport function useTocScrollSpy(ids: string[]): string | undefined {\n    const [activeId, setActiveId] = useState<string | undefined>(undefined)\n\n    useEffect(() => {\n        if (ids.length === 0) return\n\n        let frame = 0\n\n        const computeActiveId = (): string => {\n            // \"\" when above the first target (reader at the top of the page).\n            let current = \"\"\n            for (const id of ids) {\n                const el = document.getElementById(id)\n                if (!el) continue // chart that didn't render — skip, no dead zone\n                // Hidden responsive variant (e.g. a mobile-only chart on\n                // desktop): display:none reports rect top 0, which would\n                // always sit above the line and steal the active state.\n                if (el.offsetParent === null) continue\n                if (el.getBoundingClientRect().top <= ACTIVATION_OFFSET_PX)\n                    current = id\n                // Document order: once one target is below the line, the rest\n                // are too.\n                else break\n            }\n            return current\n        }\n\n        const update = () => {\n            frame = 0\n            const next = computeActiveId()\n            setActiveId((prev) => (prev === next ? prev : next))\n        }\n\n        const onScrollOrResize = () => {\n            if (frame === 0) frame = window.requestAnimationFrame(update)\n        }\n\n        window.addEventListener(\"scroll\", onScrollOrResize, { passive: true })\n        window.addEventListener(\"resize\", onScrollOrResize, { passive: true })\n        update() // initial sync (deep-link / reload mid-page)\n\n        return () => {\n            window.removeEventListener(\"scroll\", onScrollOrResize)\n            window.removeEventListener(\"resize\", onScrollOrResize)\n            if (frame !== 0) window.cancelAnimationFrame(frame)\n        }\n    }, [ids])\n\n    return activeId\n}\n","import { useState, useEffect } from \"react\"\nimport { useMediaQuery } from \"usehooks-ts\"\n\n/**\n * True while a content block that would overlap the sidebar TOC is in the\n * viewport, so the sidebar can collapse out of its way (see isSidebarExpanded\n * in SidebarTableOfContents.tsx).\n *\n * Wide blocks are matched by span class so new wide block types are covered as\n * they ship:\n *\n * - Full-bleed (`span-cols-14`) blocks sit under the sidebar at any width.\n * - Full-text-column (`span-cols-12`) blocks only overlap while the viewport is\n *   too narrow to fit the 12-col content plus a full sidebar-width outer track\n *   on each side.\n * - Left-aligned (`col-start-2 span-cols-3`) blocks are narrow, but they start\n *   at the same left edge as a 12-col block — the edge the sidebar bleeds into\n *   from the outer track — so they share the 12-col overlap condition.\n *\n * The sidebar coexists with ≤8-col content, so centred 8-col blocks (e.g.\n * chart-story) are deliberately not matched.\n */\nconst WIDE_COL_SELECTOR = '[class*=\"article-block__\"].span-cols-12'\nconst LEFT_ALIGNED_SELECTOR =\n    '[class*=\"article-block__\"].col-start-2.span-cols-3'\nconst FULL_BLEED_SELECTOR = '[class*=\"article-block__\"].span-cols-14'\nconst WIDE_BLOCK_SELECTORS = `${WIDE_COL_SELECTOR}, ${LEFT_ALIGNED_SELECTOR}, ${FULL_BLEED_SELECTOR}`\n\n// Keep in sync with --inner-cols-max-total-width in site/css/grid.scss.\nconst GRID_INNER_COLS_MAX_WIDTH = 1280\n// Keep in sync with $sidebar-toc-frame-wide in site/SidebarTableOfContents.scss.\n// At widths where 12-col content can coexist with the sidebar, that frame applies.\nconst SIDEBAR_TOC_FRAME_WIDE = 273\nconst SIDEBAR_COEXIST_BREATHING_ROOM = 48\nconst COEXIST_MIN_WIDTH =\n    GRID_INNER_COLS_MAX_WIDTH +\n    2 * SIDEBAR_TOC_FRAME_WIDE +\n    SIDEBAR_COEXIST_BREATHING_ROOM\n\nexport function useWideBlockInView(): boolean {\n    // Defaults to `true` (assume a wide block overlaps) so the sidebar renders\n    // collapsed on the server and on the first client render and only opens\n    // once the client has measured that nothing overlaps.\n    const [inView, setInView] = useState(true)\n    const canWideColCoexist = useMediaQuery(`(width >= ${COEXIST_MIN_WIDTH}px)`)\n    useEffect(() => {\n        if (!(\"IntersectionObserver\" in window)) return\n\n        // Track intersecting blocks split by kind: full-bleed always overlaps\n        // the sidebar; 12-col only below the coexist width.\n        const fullBleed = new Set<Element>()\n        const wideCol = new Set<Element>()\n\n        const apply = () => {\n            setInView(\n                fullBleed.size > 0 || (!canWideColCoexist && wideCol.size > 0)\n            )\n        }\n\n        const observer = new IntersectionObserver(\n            (records) => {\n                for (const record of records) {\n                    const set = record.target.matches(FULL_BLEED_SELECTOR)\n                        ? fullBleed\n                        : wideCol\n                    if (record.isIntersecting) set.add(record.target)\n                    else set.delete(record.target)\n                }\n                apply()\n            },\n            // Small top/bottom buffer so the collapse begins just before the\n            // wide block reaches the sidebar.\n            { rootMargin: \"80px 0px 80px 0px\" }\n        )\n\n        const blocks = document.querySelectorAll(WIDE_BLOCK_SELECTORS)\n        blocks.forEach((block) => observer.observe(block))\n\n        // A page with no wide block gets no observer callback, so `inView` would\n        // stay stuck at its `true` default and the sidebar would never open.\n        // Resolve it explicitly (→ open). This is not hypothetical: 9 published\n        // linear topic pages currently render zero wide blocks — renewable-energy,\n        // fossil-fuels, energy-mix, electricity-mix, nuclear-energy, energy-access,\n        // clean-water, sanitation, teaching (text + ≤8-col charts only).\n        if (blocks.length === 0) apply()\n\n        return () => observer.disconnect()\n    }, [canWideColCoexist])\n\n    return inView\n}\n","import {\n    createContext,\n    useContext,\n    useEffect,\n    useMemo,\n    useRef,\n    useState,\n} from \"react\"\nimport { ModalOverlay, Modal, Dialog } from \"react-aria-components\"\nimport { useMediaQuery } from \"usehooks-ts\"\nimport cx from \"clsx\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faArrowUp,\n    faMagnifyingGlass,\n    faListUl,\n    faXmark,\n    faAnglesLeft,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    groupTocIntoSections,\n    TocHeadingWithSupertitle,\n} from \"@ourworldindata/utils\"\nimport { SearchResultType, TocSidebarSection } from \"@ourworldindata/types\"\nimport { useDocumentContext } from \"./gdocs/DocumentContext.js\"\nimport { useIsScrolling } from \"./hooks.js\"\nimport { buildSearchHrefForCard } from \"./search/searchState.js\"\nimport { useClearHashOnReturnToTop } from \"./useClearHashOnReturnToTop.js\"\nimport { useKeepActiveTocRowInView } from \"./useKeepActiveTocRowInView.js\"\nimport { useTocScrollSpy } from \"./useTocScrollSpy.js\"\nimport { useWideBlockInView } from \"./useWideBlockInView.js\"\n\n// Mirrors $sidebar-toc-sm in SidebarTableOfContents.scss: at/below this\n// width the mobile pill + mobile drawer replace the desktop sidebar.\nconst SIDEBAR_TOC_SM = 1200\n\nconst SIDEBAR_TOC_CONTENT_ID = \"sidebar-toc-content\"\n\n// Idle gap that counts as \"finished scrolling\", after which the sidebar\n// re-evaluates whether to show.\nconst SCROLL_IDLE_MS = 150\n\n// Scroll-spy state threaded through the section/subheading tree.\ninterface TocNavProps {\n    activeId: string | undefined\n}\n\n// Navigating via any TOC link (or Back to top) must dismiss the mobile drawer.\n// Only the mobile drawer provides a value; in the desktop sidebar there's\n// nothing to dismiss, so links there are plain anchors.\nconst TocNavigateContext = createContext<(() => void) | undefined>(undefined)\n\nexport const SidebarTableOfContents = ({\n    headings,\n    tagName,\n}: {\n    /** Flat, document-ordered TOC headings (h1 sections + h2 subheadings),\n     *  generated for the desktop sidebar. */\n    headings: TocHeadingWithSupertitle[]\n    /** Topic tag used to build the bottom \"See all charts\" CTA. The desktop\n     *  sidebar still renders without it — the CTA is simply omitted. */\n    tagName?: string\n}) => {\n    const sections = useMemo(() => groupTocIntoSections(headings), [headings])\n\n    // Document-ordered ids the scroll-spy observes: every heading slug, which\n    // is rendered as the corresponding heading element's id.\n    const spyIds = useMemo(() => headings.map((h) => h.slug), [headings])\n    // The spy tracks the page scroll; the ref keeps the highlighted row\n    // visible inside the sidebar's own scroll container.\n    const activeId = useTocScrollSpy(spyIds)\n    const sidebarContentRef = useKeepActiveTocRowInView(activeId)\n    const isWideBlockInView = useWideBlockInView()\n\n    useClearHashOnReturnToTop(activeId)\n\n    // Desktop-only. Collapsed on first render to match the baked HTML, then\n    // the effect resolves it once scrolling settles — expanded unless\n    // dismissed via the toggle or a full-width block overlaps — leaving it\n    // untouched mid-scroll so it doesn't flip as blocks pass by.\n    const isScrolling = useIsScrolling(SCROLL_IDLE_MS)\n    const [isSidebarExpanded, setIsSidebarExpanded] = useState(false)\n    const isDismissedRef = useRef(false)\n\n    useEffect(() => {\n        if (isScrolling) return\n        setIsSidebarExpanded(!isDismissedRef.current && !isWideBlockInView)\n    }, [isScrolling, isWideBlockInView])\n\n    // Close the mobile drawer if the viewport grows to desktop (resize /\n    // rotate / zoom) so it isn't stranded over the sidebar.\n    const [isMobileDrawerOpen, setIsMobileDrawerOpen] = useState(false)\n    const isDesktop = useMediaQuery(`(width >= ${SIDEBAR_TOC_SM + 1}px)`)\n    if (isDesktop && isMobileDrawerOpen) setIsMobileDrawerOpen(false)\n\n    // No H1 sections → no sidebar. This is intentional: an LTP with no H1s is\n    // an editorial fix, not a runtime fallback.\n    if (sections.length === 0) return null\n\n    return (\n        <div className=\"sidebar-toc\">\n            <nav\n                className={cx(\"sidebar-toc__sidebar\", {\n                    \"sidebar-toc__sidebar--collapsed\": !isSidebarExpanded,\n                })}\n                aria-label=\"Table of contents\"\n            >\n                {/* The toggle precedes the content in the DOM (though absolute\n                    positioning places it visually on the right edge) so that\n                    expanding a collapsed sidebar via the keyboard leaves focus\n                    on the toggle, and the next Tab flows forward into the\n                    revealed links rather than out into the article. */}\n                <button\n                    className=\"sidebar-toc__toggle\"\n                    onClick={() => {\n                        // Collapsing dismisses (the settle re-evaluation\n                        // keeps it collapsed); expanding re-arms it.\n                        isDismissedRef.current = isSidebarExpanded\n                        setIsSidebarExpanded(!isSidebarExpanded)\n                    }}\n                    // Disclosure button: a stable noun-phrase name; aria-expanded\n                    // carries the state. https://www.w3.org/WAI/ARIA/apg/patterns/disclosure/\n                    aria-label=\"Table of contents\"\n                    aria-expanded={isSidebarExpanded}\n                    aria-controls={SIDEBAR_TOC_CONTENT_ID}\n                    data-track-note={\n                        isSidebarExpanded ? \"toc_collapse\" : \"toc_expand\"\n                    }\n                >\n                    <FontAwesomeIcon\n                        icon={isSidebarExpanded ? faAnglesLeft : faListUl}\n                    />\n                </button>\n                <div\n                    className=\"sidebar-toc__sidebar-content\"\n                    id={SIDEBAR_TOC_CONTENT_ID}\n                    ref={sidebarContentRef}\n                >\n                    <BackToTop />\n                    <TocSections\n                        sections={sections}\n                        tagName={tagName}\n                        activeId={activeId}\n                    />\n                </div>\n            </nav>\n\n            <button\n                className=\"sidebar-toc__mobile-pill\"\n                onClick={() => setIsMobileDrawerOpen(true)}\n                aria-haspopup=\"dialog\"\n                aria-expanded={isMobileDrawerOpen}\n                data-track-note=\"toc_expand\"\n            >\n                <FontAwesomeIcon icon={faListUl} />\n                Contents\n            </button>\n\n            <ModalOverlay\n                className=\"sidebar-toc__mobile-drawer-overlay\"\n                isOpen={isMobileDrawerOpen}\n                onOpenChange={setIsMobileDrawerOpen}\n                isDismissable\n            >\n                <Modal className=\"sidebar-toc__mobile-drawer-modal\">\n                    <Dialog\n                        className=\"sidebar-toc__mobile-drawer\"\n                        aria-label=\"Table of contents\"\n                    >\n                        {({ close }) => (\n                            <TocNavigateContext.Provider value={close}>\n                                <div className=\"sidebar-toc__mobile-drawer-header\">\n                                    <BackToTop />\n                                    <button\n                                        className=\"sidebar-toc__mobile-drawer-close\"\n                                        onClick={close}\n                                        aria-label=\"Close table of contents\"\n                                        data-track-note=\"toc_collapse\"\n                                    >\n                                        <FontAwesomeIcon icon={faXmark} />\n                                    </button>\n                                </div>\n                                <TocSections\n                                    sections={sections}\n                                    tagName={tagName}\n                                    activeId={activeId}\n                                />\n                            </TocNavigateContext.Provider>\n                        )}\n                    </Dialog>\n                </Modal>\n            </ModalOverlay>\n        </div>\n    )\n}\n\nconst BackToTop = () => {\n    const onNavigate = useContext(TocNavigateContext)\n    return (\n        <button\n            type=\"button\"\n            className=\"sidebar-toc__back-to-top\"\n            onClick={() => {\n                window.scrollTo(0, 0)\n                onNavigate?.()\n            }}\n            data-track-note=\"toc_back_to_top\"\n        >\n            Back to top\n            <FontAwesomeIcon icon={faArrowUp} />\n        </button>\n    )\n}\n\nconst TocSections = ({\n    sections,\n    tagName,\n    activeId,\n}: {\n    sections: TocSidebarSection[]\n    tagName?: string\n} & TocNavProps) => {\n    return (\n        <>\n            {/* A nested list so assistive technologies announce \"list, N items\"\n                and the heading→subheading hierarchy: each section is an <li>\n                carrying its H1 link and (optionally) a sub-<ul> of H2s. */}\n            <ol className=\"sidebar-toc__sections\">\n                {sections.map((section, i) => (\n                    // Index-qualified: two H1s can slug identically (no dedup).\n                    <SectionGroup\n                        key={`${section.heading.slug}-${i}`}\n                        section={section}\n                        activeId={activeId}\n                    />\n                ))}\n            </ol>\n            {tagName ? <SeeAllChartsCta tagName={tagName} /> : null}\n        </>\n    )\n}\n\nconst SectionGroup = ({\n    section,\n    activeId,\n}: { section: TocSidebarSection } & TocNavProps) => {\n    const onNavigate = useContext(TocNavigateContext)\n    const { heading, subheadings } = section\n    return (\n        <li\n            className={cx(\"sidebar-toc__section\", {\n                \"sidebar-toc__section--active\": activeId === heading.slug,\n            })}\n        >\n            <a\n                className=\"sidebar-toc__h1\"\n                href={`#${heading.slug}`}\n                onClick={onNavigate}\n                data-track-note=\"toc_link\"\n                data-toc-id={heading.slug}\n                aria-current={\n                    activeId === heading.slug ? \"location\" : undefined\n                }\n            >\n                {heading.title}\n            </a>\n            {subheadings.length > 0 ? (\n                <ul className=\"sidebar-toc__subheadings\">\n                    {subheadings.map((subheading) => (\n                        <SubheadingRow\n                            key={subheading.slug}\n                            subheading={subheading}\n                            activeId={activeId}\n                        />\n                    ))}\n                </ul>\n            ) : null}\n        </li>\n    )\n}\n\nconst SubheadingRow = ({\n    subheading,\n    activeId,\n}: { subheading: TocHeadingWithSupertitle } & TocNavProps) => {\n    const onNavigate = useContext(TocNavigateContext)\n    const { slug, title } = subheading\n\n    return (\n        <li\n            className={cx(\"sidebar-toc__subheading\", {\n                \"sidebar-toc__subheading--active\": activeId === slug,\n            })}\n            data-toc-id={slug}\n        >\n            <a\n                href={`#${slug}`}\n                onClick={onNavigate}\n                data-track-note=\"toc_link\"\n                aria-current={activeId === slug ? \"location\" : undefined}\n            >\n                {title}\n            </a>\n        </li>\n    )\n}\n\nconst SeeAllChartsCta = ({ tagName }: { tagName: string }) => {\n    const { archiveContext } = useDocumentContext()\n    // The CTA links to the live site's search, which doesn't exist on (and\n    // wouldn't reflect) an archived snapshot — omit it there. Currently\n    // defensive: only articles get archived and none use the sidebar TOC,\n    // so this only kicks in if LTP/profile archiving ships.\n    if (archiveContext?.type === \"archive-page\") return null\n\n    return (\n        <a\n            className=\"sidebar-toc__cta\"\n            href={buildSearchHrefForCard(SearchResultType.DATA, tagName)}\n            data-track-note=\"toc_see_all_charts\"\n        >\n            <FontAwesomeIcon icon={faMagnifyingGlass} />\n            {/* Full label by default; a container query swaps in the short one\n                in panels too narrow to fit it. */}\n            <span className=\"sidebar-toc__cta-label--full\">\n                See all charts on this topic\n            </span>\n            <span className=\"sidebar-toc__cta-label--short\">\n                See all charts\n            </span>\n        </a>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport cx from \"clsx\"\nimport { useIntersectionObserver } from \"usehooks-ts\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faBoxArchive } from \"@fortawesome/free-solid-svg-icons\"\nimport { ArticleBlocks } from \"../components/ArticleBlocks.js\"\nimport Credits from \"../components/Credits.js\"\nimport Footnotes from \"../components/Footnotes.js\"\nimport { layouts } from \"../components/layout.js\"\nimport {\n    OwidGdocPostInterface,\n    OwidGdocType,\n    EnrichedBlockText,\n    getPhraseForArchivalDate,\n} from \"@ourworldindata/utils\"\nimport { BAKED_BASE_URL } from \"../../../settings/clientSettings.mjs\"\nimport { OwidGdocHeader } from \"../components/OwidGdocHeader.js\"\nimport StickyNav from \"../../blocks/StickyNav.js\"\nimport { buildGdocCitation } from \"../utils.js\"\nimport { CitationSection } from \"../components/CitationSection.js\"\nimport { PastVersionsSection } from \"../components/PastVersionsSection.js\"\nimport { LicenseSection } from \"../components/LicenseSection.js\"\nimport { SidebarTableOfContents } from \"../../SidebarTableOfContents.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\nimport TopicNewsletterCard from \"../../TopicNewsletterCard.js\"\n\nconst citationDescriptionsByArticleType: Record<\n    | OwidGdocType.Article\n    | OwidGdocType.TopicPage\n    | OwidGdocType.LinearTopicPage\n    | OwidGdocType.Fragment\n    | OwidGdocType.AboutPage,\n    string\n> = {\n    [OwidGdocType.TopicPage]:\n        \"Our articles and data visualizations rely on work from many different people and organizations. When citing this topic page, please also cite the underlying data sources. This topic page can be cited as:\",\n    [OwidGdocType.LinearTopicPage]:\n        \"Our articles and data visualizations rely on work from many different people and organizations. When citing this topic page, please also cite the underlying data sources. This topic page can be cited as:\",\n    [OwidGdocType.Article]:\n        \"Our articles and data visualizations rely on work from many different people and organizations. When citing this article, please also cite the underlying data sources. This article can be cited as:\",\n    // This case should never occur as Fragments aren't baked and can't be viewed by themselves.\n    [OwidGdocType.Fragment]:\n        \"Our articles and data visualizations rely on work from many different people and organizations. When citing this text, please also cite the underlying data sources. This text can be cited as:\",\n    // It is unlikely that we would want to cite an about page, but there might be a use case for it.\n    [OwidGdocType.AboutPage]:\n        \"Our articles and data visualizations rely on work from many different people and organizations. When citing this page, please also cite the underlying data sources. This page can be cited as:\",\n}\n\ntype GdocPostProps = Omit<\n    OwidGdocPostInterface,\n    \"contentMd5\" | \"markdown\" | \"publicationContext\" | \"revisionId\"\n> & {\n    isPreviewing?: boolean\n}\n\nexport function GdocPost({\n    content,\n    publishedAt,\n    slug,\n    breadcrumbs,\n    manualBreadcrumbs,\n    tags,\n    topicArea,\n}: GdocPostProps) {\n    const { archiveContext } = useDocumentContext()\n    const postType = content.type ?? OwidGdocType.Article\n    const citationDescription = citationDescriptionsByArticleType[postType]\n    const citationUrl =\n        archiveContext?.archiveUrl ?? `${BAKED_BASE_URL}/${slug}`\n    const { citationText, bibtex } = buildGdocCitation({\n        authors: content.authors,\n        title: content.title ?? \"\",\n        publishedAt,\n        slug,\n        canonicalUrl: citationUrl,\n        archivalPhrase: getPhraseForArchivalDate(archiveContext?.archivalDate),\n    })\n    const hasSidebarToc = content[\"sidebar-toc\"]\n    const sidebarHeadings =\n        content.toc && content[\"sidebar-toc-h1-only\"]\n            ? content.toc.filter((heading) => !heading.isSubheading)\n            : content.toc\n    const headingVariant = content[\"heading-variant\"] ?? \"light\"\n    const shouldHideSubscribeBanner =\n        content[\"hide-subscribe-banner\"] || postType === OwidGdocType.TopicPage\n    const isDeprecated =\n        postType === OwidGdocType.Article &&\n        Boolean(content[\"deprecation-notice\"])\n    const stickyNavLinks = content[\"sticky-nav\"]\n\n    return (\n        <article\n            className={cx(\n                \"centered-article-container grid grid-cols-12-full-width\",\n                `centered-article-container--heading-variant-${headingVariant}`,\n                // Only add this modifier class when content.type is defined\n                {\n                    [`centered-article-container--${content.type}`]:\n                        content.type,\n                }\n            )}\n        >\n            <OwidGdocHeader\n                content={content}\n                publishedAt={publishedAt}\n                breadcrumbs={manualBreadcrumbs ?? breadcrumbs ?? undefined}\n                isDeprecated={isDeprecated}\n            />\n            {isDeprecated && content[\"deprecation-notice\"] && (\n                <DeprecationNotice blocks={content[\"deprecation-notice\"]} />\n            )}\n            {hasSidebarToc && sidebarHeadings ? (\n                <SidebarTableOfContents\n                    headings={sidebarHeadings}\n                    tagName={tags?.[0]?.name}\n                />\n            ) : null}\n            {postType === OwidGdocType.TopicPage && stickyNavLinks?.length ? (\n                <nav className=\"sticky-nav sticky-nav--dark span-cols-14 grid grid-cols-12-full-width\">\n                    <StickyNav\n                        links={stickyNavLinks}\n                        className=\"span-cols-12 col-start-2\"\n                    />\n                </nav>\n            ) : null}\n            {content.body ? (\n                <ArticleBlocks\n                    toc={content.toc}\n                    blocks={content.body}\n                    automaticSubscribeBanner={!shouldHideSubscribeBanner}\n                    // Modular topic pages render the card from TopicPageIntro\n                    afterIntro={\n                        postType === OwidGdocType.LinearTopicPage ? (\n                            <TopicNewsletterCard\n                                topicArea={topicArea}\n                                placement=\"topic_page\"\n                                className={cx(\n                                    \"topic-newsletter-card--linear-topic-page\",\n                                    layouts.default[\"subscribe-banner--center\"]\n                                )}\n                            />\n                        ) : null\n                    }\n                />\n            ) : null}\n            <Credits\n                authors={content.authors}\n                authorRoles={content.authorRoles}\n                contributors={content.contributors}\n                contributorRoles={content.contributorRoles}\n                acknowledgements={content.acknowledgements}\n            />\n            {content.refs && !_.isEmpty(content.refs.definitions) ? (\n                <Footnotes definitions={content.refs.definitions} />\n            ) : null}\n            {!content[\"hide-citation\"] && (\n                <CitationSection\n                    citationText={citationText}\n                    bibtex={bibtex}\n                    description={citationDescription}\n                    isDeprecated={isDeprecated}\n                />\n            )}\n            {postType === OwidGdocType.Article && <PastVersionsSection />}\n            <LicenseSection isDeprecated={isDeprecated} />\n        </article>\n    )\n}\n\nfunction DeprecationNotice({ blocks }: { blocks: EnrichedBlockText[] }) {\n    const { isIntersecting, ref } = useIntersectionObserver({\n        // Stops the notice from flashing to full width on page load\n        initialIsIntersecting: true,\n    })\n    return (\n        <>\n            {/* Non-sticky sentinel element for observing intersection. */}\n            <div className=\"col-start-1 span-cols-14\" ref={ref} />\n            <div\n                className={cx(\n                    \"deprecation-notice col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 col-sm-start-2 span-sm-cols-12\",\n                    {\n                        \"deprecation-notice--sticky\": !isIntersecting,\n                    }\n                )}\n            >\n                <h4 className=\"deprecation-notice__heading\">\n                    <FontAwesomeIcon\n                        className=\"deprecation-notice__icon\"\n                        icon={faBoxArchive}\n                    />\n                    This article is outdated\n                </h4>\n                <ArticleBlocks blocks={blocks} />\n            </div>\n        </>\n    )\n}\n","import cx from \"clsx\"\nimport { faChevronRight } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { LatestType } from \"@ourworldindata/types\"\nimport {\n    buildLatestPagePath,\n    latestTypeLabelPlural,\n} from \"../../latest/latestUtils.js\"\n\n/**\n * Breadcrumb for a standalone page that also appears in the /latest feed —\n * data insights and announcements. Links back to the feed filtered to the\n * page's own kind, so it doubles as the page's \"what kind of thing is this\"\n * label. Hidden on small screens (see CSS).\n */\nexport default function LatestBreadcrumb({\n    className,\n    latestType,\n    title,\n}: {\n    className?: string\n    latestType: LatestType\n    title: string\n}) {\n    return (\n        <div className={cx(\"latest-breadcrumb\", className)}>\n            <a href={buildLatestPagePath(latestType)}>\n                {latestTypeLabelPlural(latestType)}\n            </a>\n            <FontAwesomeIcon icon={faChevronRight} />\n            <span>{title}</span>\n        </div>\n    )\n}\n","import cx from \"clsx\"\nimport { faArrowRight } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport LatestCarousel, {\n    LatestCarouselItem,\n    LatestCarouselTheme,\n} from \"./LatestCarousel.js\"\n\n/** The \"Our latest …\" section at the bottom of a standalone page: heading,\n * \"See all\" link, and the carousel itself. Renders nothing when there's\n * nothing to show. */\nexport default function LatestCarouselSection({\n    className,\n    heading,\n    seeAllText,\n    seeAllHref,\n    items,\n    theme,\n    tall,\n}: {\n    className?: string\n    heading: string\n    seeAllText: string\n    seeAllHref: string\n    items: LatestCarouselItem[]\n    theme?: LatestCarouselTheme\n    tall?: boolean\n}) {\n    if (!items.length) return null\n\n    return (\n        <div className={cx(className, \"latest-carousel-section\")}>\n            <h2 className=\"h2-bold\">{heading}</h2>\n            <a href={seeAllHref} className=\"latest-carousel-section__see-all\">\n                {seeAllText} <FontAwesomeIcon icon={faArrowRight} />\n            </a>\n            <LatestCarousel\n                className=\"latest-carousel-section__carousel\"\n                items={items}\n                seeAllHref={seeAllHref}\n                seeAllText={seeAllText}\n                theme={theme}\n                tall={tall}\n            />\n        </div>\n    )\n}\n","import { useState } from \"react\"\nimport cx from \"clsx\"\nimport { faCheck, faChain } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { copyToClipboard } from \"@ourworldindata/utils\"\nimport { BAKED_BASE_URL } from \"../../../settings/clientSettings.mjs\"\n\n/** Copies a page's canonical URL to the clipboard. `path` is site-relative\n * (e.g. \"/data-insights/some-slug\"); the baked base URL is prepended so the\n * reader gets a shareable absolute link. */\nexport default function CopyLinkButton({\n    path,\n    trackNote,\n    className,\n    variant,\n}: {\n    path: string\n    trackNote: string\n    className?: string\n    variant?: \"text\"\n}) {\n    const [hasCopied, setHasCopied] = useState(false)\n    return (\n        <>\n            <button\n                type=\"button\"\n                aria-label=\"Copy link to clipboard\"\n                data-track-note={trackNote}\n                className={cx(\"copy-link-button body-3-medium\", className, {\n                    \"copy-link-button--text\": variant === \"text\",\n                })}\n                onClick={async () => {\n                    if (!(await copyToClipboard(`${BAKED_BASE_URL}${path}`)))\n                        return\n                    setHasCopied(true)\n                    setTimeout(() => {\n                        setHasCopied(false)\n                    }, 1000)\n                }}\n            >\n                {hasCopied ? (\n                    <>\n                        <FontAwesomeIcon icon={faCheck} /> Copied!\n                    </>\n                ) : (\n                    <>\n                        <FontAwesomeIcon icon={faChain} /> Copy link\n                    </>\n                )}\n            </button>\n            <span role=\"status\" className=\"sr-only\">\n                {hasCopied ? \"Link copied to clipboard\" : \"\"}\n            </span>\n        </>\n    )\n}\n","import cx from \"clsx\"\nimport { MinimalTag } from \"@ourworldindata/utils\"\n\n/** The \"Related topic pages:\" chips in a standalone page's footer. */\nexport default function RelatedTopicsList({\n    tags,\n    className,\n}: {\n    tags?: MinimalTag[]\n    className?: string\n}) {\n    if (!tags?.length) return null\n    return (\n        <div className={cx(className, \"related-topics\")}>\n            <p className=\"body-3-regular\">Related topic pages:</p>\n            <ul>\n                {tags.map((tag) => (\n                    <li key={tag.name}>\n                        <a href={`/${tag.slug}`}>{tag.name}</a>\n                    </li>\n                ))}\n            </ul>\n        </div>\n    )\n}\n","import cx from \"clsx\"\nimport LinkedAuthor from \"./LinkedAuthor.js\"\n\n/** Linked author names and photos, wrapping as a row. Always upright, including\n * when an author has no photo. Callers supply spacing through className. */\nexport default function AvatarByline({\n    authors,\n    authorRoles,\n    className,\n}: {\n    authors: string[]\n    authorRoles?: Record<string, string>\n    /** Layout hooks the caller owns — margins, z-index — not type or colour. */\n    className?: string\n}) {\n    if (authors.length === 0) return null\n    return (\n        <div className={cx(\"avatar-byline body-3-medium\", className)}>\n            {authors.map((name) => (\n                <LinkedAuthor\n                    key={name}\n                    className=\"avatar-byline__author\"\n                    name={name}\n                    role={authorRoles?.[name]}\n                    includeImage={true}\n                />\n            ))}\n        </div>\n    )\n}\n","import * as React from \"react\"\nimport cx from \"clsx\"\nimport { OwidEnrichedGdocBlock } from \"@ourworldindata/types\"\nimport { ArticleBlocks } from \"./ArticleBlocks.js\"\nimport AvatarByline from \"./AvatarByline.js\"\nimport DataInsightDateline from \"./DataInsightDateline.js\"\n\n/** Grid placement of the narrow single column a standalone page is laid out\n * in — the body card and the breadcrumb above it. */\nexport const STANDALONE_POST_GRID_CLASSES =\n    \"span-cols-6 col-start-5 span-md-cols-8 col-md-start-4 col-sm-start-1 span-sm-cols-14\"\n\n/**\n * The white card a short standalone page is made of: dateline, title, author\n * byline, body, and a footer the page supplies (related topics, copy buttons).\n * Shared by data insight and announcement pages so the two can't drift apart.\n *\n * Blocks render with the \"data-insight\" container type, which means \"single\n * column, no grid sizing\" — the card is one narrow column on every page that\n * uses this.\n */\nexport default function StandalonePostBody({\n    className,\n    title,\n    authors,\n    authorRoles,\n    body,\n    publishedAt,\n    footer,\n}: {\n    className?: string\n    title: string\n    authors: string[]\n    authorRoles?: Record<string, string>\n    body: OwidEnrichedGdocBlock[]\n    publishedAt: Date | string | null\n    footer?: React.ReactNode\n}) {\n    return (\n        <div\n            className={cx(\n                \"grid grid-cols-1\",\n                STANDALONE_POST_GRID_CLASSES,\n                className\n            )}\n        >\n            <div className=\"standalone-post-body\">\n                <DataInsightDateline\n                    className=\"standalone-post-body__dateline\"\n                    publishedAt={publishedAt ? new Date(publishedAt) : null}\n                    formatOptions={{\n                        year: \"numeric\",\n                        month: \"long\",\n                        day: \"2-digit\",\n                    }}\n                />\n                <h1 className=\"body-1-bold\">{title}</h1>\n                <AvatarByline\n                    className=\"standalone-post-body__authors\"\n                    authors={authors}\n                    authorRoles={authorRoles}\n                />\n                <div className=\"standalone-post-body__blocks\">\n                    <ArticleBlocks blocks={body} containerType=\"data-insight\" />\n                </div>\n                {footer && (\n                    <div className=\"standalone-post-body__footer\">{footer}</div>\n                )}\n            </div>\n        </div>\n    )\n}\n","import {\n    OwidEnrichedGdocBlock,\n    OwidGdocMinimalPostInterface,\n    Span,\n} from \"@ourworldindata/utils\"\nimport { getLinkType, getUrlTarget } from \"@ourworldindata/components\"\nimport { ContentGraphLinkType } from \"@ourworldindata/types\"\nimport { getLinkedDocumentUrl } from \"./utils.js\"\n\nfunction spansToPlainText(spans: Span[]): string {\n    return spans\n        .map((span): string => {\n            if (span.spanType === \"span-simple-text\") return span.text\n            if (span.spanType === \"span-newline\") return \"\\n\"\n            return spansToPlainText(span.children)\n        })\n        .join(\"\")\n}\n\nfunction resolveCtaUrl(\n    rawUrl: string,\n    linkedDocuments: Record<string, OwidGdocMinimalPostInterface>\n): string {\n    if (getLinkType(rawUrl) !== ContentGraphLinkType.Gdoc) return rawUrl\n    const target = getUrlTarget(rawUrl)\n    const doc = linkedDocuments[target]\n    if (!doc) return rawUrl\n    return getLinkedDocumentUrl(doc, rawUrl)\n}\n\nfunction ensureTrailingPunctuation(text: string): string {\n    const trimmed = text.trimEnd()\n    return /[.!?…][\"'”’)\\]]*$/.test(trimmed) ? trimmed : `${trimmed}.`\n}\n\n/** Plain text for the admin-only \"Copy for social\" button, shared by data\n * insights and announcements. The authors note is passed in because its\n * wording differs per gdoc type. */\nexport function buildSocialText({\n    title,\n    body,\n    authorsNote,\n    linkedDocuments,\n}: {\n    title: string\n    body: OwidEnrichedGdocBlock[]\n    authorsNote?: string\n    linkedDocuments: Record<string, OwidGdocMinimalPostInterface>\n}): string {\n    const paragraphs: string[] = []\n    let ctaText: string | undefined\n    let ctaUrl: string | undefined\n\n    for (const block of body) {\n        if (block.type === \"text\") {\n            paragraphs.push(spansToPlainText(block.value))\n        } else if (block.type === \"cta\") {\n            ctaText = block.text.replace(/[.:]+$/, \"\")\n            ctaUrl = resolveCtaUrl(block.url, linkedDocuments)\n        }\n    }\n\n    const parts = [ensureTrailingPunctuation(title), paragraphs.join(\"\\n\\n\")]\n\n    if (authorsNote) {\n        parts.push(authorsNote)\n    }\n\n    if (ctaText && ctaUrl) {\n        parts.push(`${ctaText}: ${ctaUrl}`)\n    }\n\n    return parts.filter(Boolean).join(\"\\n\\n\")\n}\n","import { useState } from \"react\"\nimport cx from \"clsx\"\nimport { copyToClipboard } from \"@ourworldindata/utils\"\nimport { shouldShowStaffControls } from \"@ourworldindata/grapher\"\nimport { useIsClient } from \"usehooks-ts\"\n\nexport function CopySocialButton({\n    text,\n    className,\n}: {\n    text: string\n    className?: string\n}) {\n    const isClient = useIsClient()\n    const [label, setLabel] = useState(\"Copy for social\")\n\n    if (!isClient || !shouldShowStaffControls()) return null\n\n    function handleClick() {\n        void copyToClipboard(text)\n        setLabel(\"Copied!\")\n        setTimeout(() => setLabel(\"Copy for social\"), 1000)\n    }\n\n    return (\n        <a\n            href=\"#\"\n            className={cx(\"body-3-medium\", className)}\n            onClick={(e) => {\n                e.preventDefault()\n                handleClick()\n            }}\n        >\n            {label}\n        </a>\n    )\n}\n","import {\n    OwidGdocDataInsightInterface,\n    formatAuthors,\n} from \"@ourworldindata/utils\"\nimport { useContext } from \"react\"\nimport * as React from \"react\"\nimport LatestBreadcrumb from \"../components/LatestBreadcrumb.js\"\nimport LatestCarouselSection from \"../components/LatestCarouselSection.js\"\nimport CopyLinkButton from \"../components/CopyLinkButton.js\"\nimport RelatedTopicsList from \"../components/RelatedTopicsList.js\"\nimport StandalonePostBody, {\n    STANDALONE_POST_GRID_CLASSES,\n} from \"../components/StandalonePostBody.js\"\nimport { dataInsightsToCarouselItems } from \"../components/latestCarouselItems.js\"\nimport { AttachmentsContext } from \"../AttachmentsContext.js\"\nimport { buildSocialText } from \"../socialText.js\"\nimport { CopySocialButton } from \"../components/CopySocialButton.js\"\nimport { buildLatestPagePath } from \"../../latest/latestUtils.js\"\n\nfunction buildAuthorsNote(authors: string[]): string | undefined {\n    if (authors.length === 0) return undefined\n    return `(This Data Insight was written by ${formatAuthors(authors)}.)`\n}\n\ntype DataInsightProps = {\n    className?: string\n} & Omit<\n    OwidGdocDataInsightInterface,\n    \"contentMd5\" | \"markdown\" | \"publicationContext\" | \"revisionId\"\n>\n\nexport const DataInsightPage = (\n    props: DataInsightProps\n): React.ReactElement => {\n    const attachments = useContext(AttachmentsContext)\n    const latestDataInsights = attachments.latestDataInsights?.filter(\n        (dataInsight) => dataInsight.content.title !== props.content.title\n    )\n\n    return (\n        <div className=\"grid grid-cols-12-full-width standalone-post-page\">\n            <LatestBreadcrumb\n                className={STANDALONE_POST_GRID_CLASSES}\n                latestType=\"data-insight\"\n                title={props.content.title}\n            />\n            <StandalonePostBody\n                title={props.content.title}\n                authors={props.content.authors}\n                authorRoles={props.content.authorRoles}\n                body={props.content.body}\n                publishedAt={props.publishedAt}\n                footer={\n                    <>\n                        <RelatedTopicsList tags={props.tags ?? undefined} />\n                        <CopyLinkButton\n                            path={`/data-insights/${props.slug}`}\n                            trackNote=\"data_insight_copy_link\"\n                        />\n                        <CopySocialButton\n                            className=\"copy-link-button\"\n                            text={buildSocialText({\n                                title: props.content.title,\n                                body: props.content.body,\n                                authorsNote: buildAuthorsNote(\n                                    props.content.authors\n                                ),\n                                linkedDocuments: attachments.linkedDocuments,\n                            })}\n                        />\n                    </>\n                }\n            />\n            <LatestCarouselSection\n                className=\"span-cols-12 col-start-2\"\n                heading=\"Our latest Data Insights\"\n                seeAllText=\"See all Data Insights\"\n                seeAllHref={buildLatestPagePath(\"data-insight\")}\n                items={dataInsightsToCarouselItems(latestDataInsights ?? [])}\n            />\n        </div>\n    )\n}\n","import { OwidGdocPostInterface } from \"@ourworldindata/utils\"\nimport * as React from \"react\"\n\ntype FragmentProps = Omit<\n    OwidGdocPostInterface,\n    \"contentMd5\" | \"markdown\" | \"publicationContext\" | \"revisionId\"\n>\n\n/**\n * We would like to handle Fragments better in the future\n * For now, we're just displaying them as JSON\n * When we get around to that, we should render them via the admin, because style bleed isn't so important and we don't\n * want to add extra JS/CSS to the common bundle\n */\nexport function Fragment(props: FragmentProps): React.ReactElement {\n    return (\n        <div className=\"grid grid-cols-12-full-width\">\n            <h5 className=\"h5-black-caps span-cols-12 col-start-2\">Fragment</h5>\n            <h2\n                className=\"display-1-semibold span-cols-12 col-start-2\"\n                style={{ marginTop: 0 }}\n            >\n                {props.content.title}{\" \"}\n            </h2>\n            <pre className=\"fragment-json span-cols-12 col-start-2\">\n                {JSON.stringify(props.content, null, 2)}\n            </pre>\n        </div>\n    )\n}\n","import * as React from \"react\"\nimport { ArticleBlocks } from \"../components/ArticleBlocks.js\"\nimport { OwidGdocHomepageContent } from \"@ourworldindata/types\"\nimport { getAllChildrenOfArea } from \"@ourworldindata/utils\"\nimport { AttachmentsContext } from \"../AttachmentsContext.js\"\n\nexport interface HomepageProps {\n    content: OwidGdocHomepageContent\n}\n\nconst AllTopicsSection = () => {\n    const { homepageMetadata } = React.useContext(AttachmentsContext)\n    if (!homepageMetadata) return null\n    const { tagGraph } = homepageMetadata\n    if (!tagGraph) return null\n\n    // We have to flatten the areas because we can't nest <ul> elements and have them render correctly\n    // Filter to only include topics (tags with slugs) - searchable non-topic tags shouldn't appear here\n    const flattenedAreas = tagGraph.children.map((area) => ({\n        ...area,\n        children: getAllChildrenOfArea(area).filter((topic) => topic.isTopic),\n    }))\n\n    return (\n        <section\n            id=\"all-topics\"\n            className=\"grid grid-cols-12-full-width span-cols-14 homepage-topics-section\"\n        >\n            <h2 className=\"h2-bold span-cols-12 col-start-2\">All our topics</h2>\n            <p className=\"body-2-regular span-cols-12 col-start-2\">\n                All our data, research, and writing — topic by topic.\n            </p>\n            {flattenedAreas.map((area) => (\n                <section\n                    key={area.name}\n                    className=\"homepage-topic span-cols-12 col-start-2\"\n                >\n                    <h2 className=\"homepage-topic__topic-name h3-bold\">\n                        {area.name}\n                    </h2>\n                    <ul className=\"homepage-topic__topic-list display-3-regular\">\n                        {area.children.map(({ slug, name }) =>\n                            slug ? (\n                                <li\n                                    className=\"homepage-topic__topic-entry\"\n                                    key={`topic-entry-${slug}`}\n                                >\n                                    <a href={`/${slug}`}>{name}</a>\n                                </li>\n                            ) : (\n                                <li\n                                    className=\"homepage-topic__subtopic\"\n                                    key={`subarea-${name}`}\n                                >\n                                    {name}:\n                                </li>\n                            )\n                        )}\n                    </ul>\n                </section>\n            ))}\n        </section>\n    )\n}\n\nexport const Homepage = (props: HomepageProps): React.ReactElement => {\n    const { content } = props\n\n    return (\n        <div className=\"grid grid-cols-12-full-width\">\n            <ArticleBlocks blocks={content.body} />\n            <AllTopicsSection />\n        </div>\n    )\n}\n","import * as React from \"react\"\nimport {\n    OwidEnrichedGdocBlock,\n    OwidGdocAuthorContent,\n    OwidGdocAuthorInterface,\n} from \"@ourworldindata/types\"\nimport { ArticleBlocks } from \"../components/ArticleBlocks.js\"\nimport Image from \"../components/Image.js\"\nimport ArticleBlock from \"../components/ArticleBlock.js\"\nimport { getLayout } from \"../components/layout.js\"\nimport cx from \"clsx\"\n\ntype AuthorProps = Omit<\n    OwidGdocAuthorInterface,\n    \"contentMd5\" | \"markdown\" | \"publicationContext\" | \"revisionId\"\n> & {\n    content: OwidGdocAuthorContent\n}\n\nconst AuthorHeader = (gdoc: AuthorProps) => {\n    const {\n        title,\n        role,\n        bio,\n        \"featured-image\": featuredImage,\n        socials,\n    } = gdoc.content\n\n    // ✋ This component has two versions, one for small screens and one for\n    // medium and up. The medium version is hidden on small screens and vice\n    // versa. Please make sure to keep the two versions in sync when applicable.\n\n    return (\n        <div className=\"author-header grid grid-cols-12-full-width span-cols-14\">\n            <section className=\"author-header__sm grid grid-cols-12-full-width span-cols-14\">\n                <div className=\"col-start-2 span-cols-8\">\n                    <h1 className=\"author-header__name\">{title}</h1>\n                    <div className=\"author-header__role\">{role}</div>\n                </div>\n                {featuredImage && (\n                    <div className=\"grid grid-cols-3 col-start-11 span-cols-3\">\n                        <Image\n                            filename={featuredImage}\n                            alt={`Portrait of ${title}`}\n                            className={cx(\n                                \"author-header__portrait\",\n                                getLayout(\"image\", \"author-header\")\n                            )}\n                            shouldLightbox={false}\n                            containerType=\"author-header\"\n                        />\n                    </div>\n                )}\n                {socials && (\n                    <ArticleBlock b={socials} containerType=\"author-header\" />\n                )}\n                {bio?.length && (\n                    <ArticleBlocks blocks={bio} containerType=\"author-header\" />\n                )}\n            </section>\n            <section className=\"author-header__md grid grid-cols-12-full-width span-cols-14\">\n                <div className=\"span-cols-8 col-start-2 span-md-cols-7 col-md-start-2\">\n                    <h1 className=\"author-header__name\">{title}</h1>\n                    <div className=\"author-header__role\">{role}</div>\n                    {bio?.length && (\n                        <ArticleBlocks\n                            blocks={bio}\n                            containerType=\"author-header\"\n                        />\n                    )}\n                </div>\n                <div className=\"grid grid-cols-3 col-start-11 span-cols-3 span-md-cols-4 col-md-start-10\">\n                    {featuredImage && (\n                        <Image\n                            filename={featuredImage}\n                            alt={`Portrait of ${title}`}\n                            className={cx(\n                                \"author-header__portrait\",\n                                getLayout(\"image\", \"author-header\")\n                            )}\n                            shouldLightbox={false}\n                            containerType=\"author-header\"\n                        />\n                    )}\n                    {socials && (\n                        <ArticleBlock\n                            b={socials}\n                            containerType=\"author-header\"\n                        />\n                    )}\n                </div>\n            </section>\n        </div>\n    )\n}\n\nexport const AuthorWork = ({ blocks }: { blocks: OwidEnrichedGdocBlock[] }) => {\n    return (\n        <div className=\"author-work grid grid-cols-12-full-width span-cols-14\">\n            <ArticleBlocks blocks={blocks} />\n        </div>\n    )\n}\n\nexport const Author = (gdoc: AuthorProps): React.ReactElement => {\n    return (\n        <>\n            <AuthorHeader {...gdoc} />\n            <AuthorWork blocks={gdoc.content.body} />\n        </>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport cx from \"clsx\"\nimport { useEffect, useRef } from \"react\"\n\nimport { OwidGdocAboutInterface } from \"@ourworldindata/types\"\nimport { ABOUT_LINKS } from \"../../SiteConstants.js\"\nimport { ArticleBlocks } from \"../components/ArticleBlocks.js\"\nimport Footnotes from \"../components/Footnotes.js\"\n\ntype AboutPageProps = Omit<\n    OwidGdocAboutInterface,\n    \"contentMd5\" | \"markdown\" | \"publicationContext\" | \"revisionId\"\n>\n\nexport default function AboutPage({ content, slug }: AboutPageProps) {\n    const shouldOverrideTitle = content[\"override-title\"]\n    return (\n        <main className=\"about-page centered-article-container grid grid-cols-12-full-width\">\n            <h1 className=\"about-header col-start-2 col-end-limit display-2-semibold\">\n                {(shouldOverrideTitle && content.title) || \"About\"}\n            </h1>\n            {!content[\"hide-nav\"] && <AboutNav slug={slug} />}\n            <div className=\"about-body grid grid-cols-12-full-width col-start-1 col-end-limit\">\n                <ArticleBlocks\n                    containerType=\"about-page\"\n                    blocks={content.body}\n                />\n            </div>\n            {content.refs && !_.isEmpty(content.refs.definitions) ? (\n                <Footnotes definitions={content.refs.definitions} />\n            ) : null}\n        </main>\n    )\n}\n\nfunction AboutNav({ slug }: { slug: string }) {\n    const activeLinkRef = useRef<HTMLAnchorElement>(null)\n\n    // Scroll the nav to the active link, since it might not be visible\n    // on mobile.\n    useEffect(() => {\n        const activeLink = activeLinkRef.current\n        if (activeLink) {\n            const nav = activeLink.closest(\"nav\")\n            if (nav) {\n                const activeLinkOffset = activeLink.offsetLeft\n                const navWidth = nav.offsetWidth\n                const activeLinkWidth = activeLink.offsetWidth\n                // Center the active link.\n                nav.scrollLeft =\n                    activeLinkOffset - (navWidth - activeLinkWidth) / 2\n            }\n        }\n    }, [])\n\n    return (\n        <nav className=\"about-nav grid grid-cols-12-full-width col-start-1 col-end-limit\">\n            <ul className=\"about-nav-list col-start-2 col-end-14 col-sm-start-1\">\n                {ABOUT_LINKS.map(({ title, url }) => {\n                    const isActive = url === `/${slug}`\n                    return (\n                        <li key={url}>\n                            <a\n                                className={cx(\"about-nav-link\", {\n                                    \"about-nav-link--is-active\": isActive,\n                                })}\n                                ref={isActive ? activeLinkRef : undefined}\n                                href={url}\n                                aria-current={isActive ? \"page\" : undefined}\n                            >\n                                {title}\n                            </a>\n                        </li>\n                    )\n                })}\n            </ul>\n        </nav>\n    )\n}\n","import {\n    AnnouncementLatestType,\n    LATEST_TYPE_LABELS,\n    OwidGdocAnnouncementInterface,\n} from \"@ourworldindata/types\"\nimport {\n    deriveAnnouncementLatestType,\n    formatAuthors,\n    getPrefixedGdocPath,\n    OwidGdocType,\n} from \"@ourworldindata/utils\"\nimport { useContext } from \"react\"\nimport * as React from \"react\"\nimport { AttachmentsContext } from \"../AttachmentsContext.js\"\nimport LatestBreadcrumb from \"../components/LatestBreadcrumb.js\"\nimport LatestCarouselSection from \"../components/LatestCarouselSection.js\"\nimport CopyLinkButton from \"../components/CopyLinkButton.js\"\nimport RelatedTopicsList from \"../components/RelatedTopicsList.js\"\nimport StandalonePostBody, {\n    STANDALONE_POST_GRID_CLASSES,\n} from \"../components/StandalonePostBody.js\"\nimport { announcementsToCarouselItems } from \"../components/latestCarouselItems.js\"\nimport { CopySocialButton } from \"../components/CopySocialButton.js\"\nimport { buildSocialText } from \"../socialText.js\"\nimport {\n    buildLatestPagePath,\n    latestTypeLabelPlural,\n} from \"../../latest/latestUtils.js\"\n\n// Announcements posted on social media are data and topic updates; the other\n// kinds (website upgrades, general announcements) aren't, so they don't get\n// the button.\nconst SOCIAL_LATEST_TYPES: readonly AnnouncementLatestType[] = [\n    \"data-update\",\n    \"topic-update\",\n]\n\ntype AnnouncementProps = {\n    className?: string\n} & Omit<\n    OwidGdocAnnouncementInterface,\n    \"contentMd5\" | \"markdown\" | \"publicationContext\" | \"revisionId\"\n>\n\nfunction buildAuthorsNote(\n    latestType: AnnouncementLatestType,\n    authors: string[]\n): string | undefined {\n    if (authors.length === 0) return undefined\n    const kicker = LATEST_TYPE_LABELS[latestType].toLowerCase()\n    return `This ${kicker} was led by ${formatAuthors(authors)}.`\n}\n\nexport const AnnouncementPage = ({\n    content,\n    publishedAt,\n    slug,\n    tags,\n}: AnnouncementProps): React.ReactElement => {\n    const { linkedDocuments, latestAnnouncements } =\n        useContext(AttachmentsContext)\n    const latestType = deriveAnnouncementLatestType(content.kicker)\n    const shouldShowCopySocialButton =\n        SOCIAL_LATEST_TYPES.includes(latestType) && content.body.length > 0\n    const path = getPrefixedGdocPath(\"\", {\n        slug,\n        content: { type: OwidGdocType.Announcement },\n    })\n    // The carousel is fed announcements of this page's own kind, so the one\n    // we're looking at has to come out of it.\n    const otherAnnouncements =\n        latestAnnouncements?.filter(\n            (announcement) => announcement.slug !== slug\n        ) ?? []\n\n    return (\n        <div className=\"grid grid-cols-12-full-width standalone-post-page\">\n            <LatestBreadcrumb\n                className={STANDALONE_POST_GRID_CLASSES}\n                latestType={latestType}\n                title={content.title}\n            />\n            <StandalonePostBody\n                title={content.title}\n                authors={content.authors}\n                authorRoles={content.authorRoles}\n                body={content.body}\n                publishedAt={publishedAt}\n                footer={\n                    <>\n                        <RelatedTopicsList tags={tags ?? undefined} />\n                        <CopyLinkButton\n                            path={path}\n                            trackNote=\"announcement_copy_link\"\n                        />\n                        {shouldShowCopySocialButton && (\n                            <CopySocialButton\n                                className=\"copy-link-button\"\n                                text={buildSocialText({\n                                    title: content.title,\n                                    body: content.body,\n                                    authorsNote: buildAuthorsNote(\n                                        latestType,\n                                        content.authors\n                                    ),\n                                    linkedDocuments,\n                                })}\n                            />\n                        )}\n                    </>\n                }\n            />\n            <LatestCarouselSection\n                className=\"span-cols-12 col-start-2\"\n                heading={`Our latest ${latestTypeLabelPlural(latestType).toLowerCase()}`}\n                seeAllText={`See all ${latestTypeLabelPlural(latestType).toLowerCase()}`}\n                seeAllHref={buildLatestPagePath(latestType)}\n                items={announcementsToCarouselItems(otherAnnouncements)}\n                theme=\"white\"\n                tall\n            />\n        </div>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport { ArticleBlocks } from \"../components/ArticleBlocks.js\"\nimport Footnotes from \"../components/Footnotes.js\"\nimport {\n    OwidGdocProfileInterface,\n    CITATION_ID,\n    LICENSE_ID,\n} from \"@ourworldindata/utils\"\nimport { getCanonicalUrl } from \"@ourworldindata/components\"\nimport { BAKED_BASE_URL } from \"../../../settings/clientSettings.mjs\"\nimport { OwidGdocType } from \"@ourworldindata/types\"\nimport { buildGdocCitation } from \"../utils.js\"\nimport { CitationSection } from \"../components/CitationSection.js\"\nimport { LicenseSection } from \"../components/LicenseSection.js\"\nimport { Byline } from \"../components/Byline.js\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faBook } from \"@fortawesome/free-solid-svg-icons\"\nimport { faCreativeCommons } from \"@fortawesome/free-brands-svg-icons\"\nimport { SidebarTableOfContents } from \"../../SidebarTableOfContents.js\"\n\nconst CITATION_DESCRIPTION =\n    \"Our articles and data visualizations rely on work from many different people and organizations. When citing this profile page, please also cite the underlying data sources. This profile page can be cited as:\"\n\ntype ProfileProps = Omit<\n    OwidGdocProfileInterface,\n    \"markdown\" | \"publicationContext\" | \"revisionId\"\n> & {\n    isPreviewing?: boolean\n}\n\nexport function Profile({ content, publishedAt, slug, tags }: ProfileProps) {\n    const hasSidebarToc = content[\"sidebar-toc\"]\n    const sidebarHeadings =\n        content.toc && content[\"sidebar-toc-h1-only\"]\n            ? content.toc.filter((heading) => !heading.isSubheading)\n            : content.toc\n    const instantiatedEntity = content.instantiatedEntity\n\n    const { citationText, bibtex } = buildGdocCitation({\n        authors: content.authors,\n        title: content.title ?? \"\",\n        publishedAt,\n        slug,\n        canonicalUrl: getCanonicalUrl(BAKED_BASE_URL, {\n            slug,\n            content: { type: OwidGdocType.Profile },\n        }),\n    })\n\n    return (\n        <article className=\"centered-article-container grid grid-cols-12-full-width centered-article-container--profile\">\n            <header className=\"topic-page-header grid span-cols-14 grid-cols-12-full-width\">\n                <div className=\"profile-title col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\">\n                    <div className=\"profile-title__container\">\n                        {instantiatedEntity?.isCountry && (\n                            <img\n                                className=\"profile-title__flag\"\n                                src={`/images/flags/${instantiatedEntity.code}.svg`}\n                                alt=\"\"\n                                width={64}\n                                height={48}\n                            />\n                        )}\n                        <span className=\"profile-title__label h5-black-caps\">\n                            {instantiatedEntity?.name}{\" \"}\n                            {instantiatedEntity?.isCountry\n                                ? \"Country Profile\"\n                                : \"Region Profile\"}\n                        </span>\n                    </div>\n                    <h1 className=\"display-2-semibold\">{content.title}</h1>\n                </div>\n                {content.subtitle && (\n                    <p className=\"topic-page-header__subtitle body-1-regular col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\">\n                        {content.subtitle}\n                    </p>\n                )}\n                {content.authors.length > 0 && (\n                    <p className=\"topic-page-header__byline col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\">\n                        <Byline\n                            authors={content.authors}\n                            authorRoles={content.authorRoles}\n                        />\n                    </p>\n                )}\n                <div className=\"topic-page-header__cta-buttons col-start-11 span-cols-3 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\">\n                    <a href={`#${CITATION_ID}`}>\n                        <FontAwesomeIcon icon={faBook} />\n                        Cite this work\n                    </a>\n                    <a href={`#${LICENSE_ID}`}>\n                        <FontAwesomeIcon icon={faCreativeCommons} />\n                        Reuse this work\n                    </a>\n                </div>\n            </header>\n            {hasSidebarToc && sidebarHeadings ? (\n                <SidebarTableOfContents\n                    headings={sidebarHeadings}\n                    tagName={tags?.[0]?.name}\n                />\n            ) : null}\n            {content.body ? <ArticleBlocks blocks={content.body} /> : null}\n            {content.refs && !_.isEmpty(content.refs.definitions) ? (\n                <Footnotes definitions={content.refs.definitions} />\n            ) : null}\n            <CitationSection\n                citationText={citationText}\n                bibtex={bibtex}\n                description={CITATION_DESCRIPTION}\n            />\n            <LicenseSection />\n        </article>\n    )\n}\n","import { useRef } from \"react\"\nimport cx from \"clsx\"\nimport {\n    BESPOKE_METADATA_TITLE,\n    BespokeMetadataKeyData,\n    BespokeMetadataSections,\n    MetadataBoxCollapseButton,\n    MetadataBoxExpander,\n    SimpleMarkdownText,\n} from \"@ourworldindata/components\"\nimport { BespokeMetadata } from \"@ourworldindata/types\"\n\n/** Methods and sources for a bespoke data viz */\nexport function BespokeMetadataBox({\n    metadata,\n    citationUrl,\n    pageCitation,\n    className,\n}: {\n    metadata: BespokeMetadata\n    citationUrl?: string\n    pageCitation?: string\n    className?: string\n}) {\n    const detailsRef = useRef<HTMLDetailsElement | null>(null)\n\n    return (\n        <div className={cx(\"metadata-box\", \"bespoke-metadata-box\", className)}>\n            <MetadataBoxCollapseButton detailsRef={detailsRef} />\n            <h2 className=\"bespoke-metadata-box__title\">\n                {BESPOKE_METADATA_TITLE}\n            </h2>\n            <BespokeMetadataKeyData metadata={metadata} />\n            <MetadataBoxExpander\n                detailsRef={detailsRef}\n                showMoreLabel=\"More about this data\"\n                preview={\n                    metadata.descriptionKey ? (\n                        <SimpleMarkdownText text={metadata.descriptionKey} />\n                    ) : undefined\n                }\n            >\n                <BespokeMetadataSections\n                    metadata={metadata}\n                    citationUrl={citationUrl}\n                    pageCitation={pageCitation}\n                />\n            </MetadataBoxExpander>\n        </div>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport { useContext, useMemo } from \"react\"\nimport cx from \"clsx\"\nimport {\n    BlockSize,\n    EnrichedBlockBespokeComponent,\n    OwidEnrichedGdocBlock,\n    OwidGdocFeaturedVizContent,\n    OwidGdocFeaturedVizInterface,\n    OwidGdocType,\n} from \"@ourworldindata/types\"\nimport { formatDate } from \"@ourworldindata/utils\"\nimport { getCanonicalUrl } from \"@ourworldindata/components\"\nimport { BAKED_BASE_URL } from \"../../../settings/clientSettings.mjs\"\nimport { AttachmentsContext } from \"../AttachmentsContext.js\"\nimport { ArticleBlocks } from \"../components/ArticleBlocks.js\"\nimport { getGridColumns, getLayout } from \"../components/layout.js\"\nimport { BespokeComponent } from \"../components/BespokeComponent.js\"\nimport { BespokeMetadataBox } from \"../components/BespokeMetadataBox.js\"\nimport { Byline } from \"../components/Byline.js\"\nimport { CitationSection } from \"../components/CitationSection.js\"\nimport { LicenseSection } from \"../components/LicenseSection.js\"\nimport Credits from \"../components/Credits.js\"\nimport Footnotes from \"../components/Footnotes.js\"\nimport { buildGdocCitation } from \"../utils.js\"\n\nconst CITATION_DESCRIPTION =\n    \"Our articles and data visualizations rely on work from many different people and organizations. When citing this page, please also cite the underlying data sources. This page can be cited as:\"\n\ntype FeaturedVizProps = Omit<\n    OwidGdocFeaturedVizInterface,\n    \"contentMd5\" | \"markdown\" | \"publicationContext\" | \"revisionId\"\n> & {\n    isPreviewing?: boolean\n}\n\nexport function FeaturedViz({ content, publishedAt, slug }: FeaturedVizProps) {\n    const { bespokeMetadata } = useContext(AttachmentsContext)\n\n    const { before, hero, after } = useMemo(\n        () => splitFeaturedVizBody(content.body),\n        [content.body]\n    )\n    const heroEmbedOptions = useMemo(\n        () => ({ urlSync: true, hideMetadataModal: !!bespokeMetadata }),\n        [bespokeMetadata]\n    )\n\n    const canonicalUrl = getCanonicalUrl(BAKED_BASE_URL, {\n        slug,\n        content: { type: OwidGdocType.FeaturedViz },\n    })\n    const { citationText, bibtex } = buildGdocCitation({\n        authors: content.authors,\n        title: content.title ?? \"\",\n        publishedAt,\n        slug,\n        canonicalUrl,\n    })\n    const shouldShowCitation = !content[\"hide-citation\"]\n\n    return (\n        <article className=\"centered-article-container centered-article-container--featured-viz grid grid-cols-12-full-width\">\n            <FeaturedVizHeader content={content} publishedAt={publishedAt} />\n            {before.length > 0 && (\n                <hr\n                    className={cx(\n                        \"featured-viz-divider\",\n                        getLayout(\"horizontal-rule\")\n                    )}\n                />\n            )}\n            <ArticleBlocks blocks={before} />\n            {hero && (\n                <div className=\"featured-viz-hero span-cols-14 grid grid-cols-12-full-width\">\n                    <BespokeComponent\n                        className={cx(\n                            \"featured-viz-hero__viz\",\n                            getLayout(`bespoke-component--${hero.size}`)\n                        )}\n                        block={hero}\n                        embedOptions={heroEmbedOptions}\n                    />\n                    {bespokeMetadata && (\n                        <BespokeMetadataBox\n                            className={getMetadataBoxColumns(hero.size)}\n                            metadata={bespokeMetadata}\n                            citationUrl={canonicalUrl}\n                            pageCitation={\n                                shouldShowCitation ? citationText : undefined\n                            }\n                        />\n                    )}\n                </div>\n            )}\n            <ArticleBlocks blocks={after} />\n            <Credits\n                authors={content.authors}\n                authorRoles={content.authorRoles}\n                contributors={content.contributors}\n                contributorRoles={content.contributorRoles}\n                acknowledgements={content.acknowledgements}\n            />\n            {content.refs && !_.isEmpty(content.refs.definitions) ? (\n                <Footnotes definitions={content.refs.definitions} />\n            ) : null}\n            {shouldShowCitation && (\n                <CitationSection\n                    citationText={citationText}\n                    bibtex={bibtex}\n                    description={CITATION_DESCRIPTION}\n                />\n            )}\n            <LicenseSection />\n        </article>\n    )\n}\n\nfunction FeaturedVizHeader({\n    content,\n    publishedAt,\n}: {\n    content: OwidGdocFeaturedVizContent\n    publishedAt: Date | null\n}) {\n    return (\n        <header className=\"featured-viz-header grid span-cols-14 grid-cols-12-full-width\">\n            <h1 className=\"featured-viz-header__title col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 col-sm-start-2 span-sm-cols-12\">\n                {content.title}\n            </h1>\n            {content.subtitle ? (\n                <p className=\"featured-viz-header__subtitle col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 col-sm-start-2 span-sm-cols-12\">\n                    {content.subtitle}\n                </p>\n            ) : null}\n            {content.authors.length > 0 && (\n                <p className=\"featured-viz-header__byline col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 col-sm-start-2 span-sm-cols-12\">\n                    <Byline\n                        authors={content.authors}\n                        authorRoles={content.authorRoles}\n                        contributors={content.contributors}\n                    />\n                </p>\n            )}\n            <p\n                className=\"featured-viz-header__dateline col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 col-sm-start-2 span-sm-cols-12\"\n                suppressHydrationWarning={true}\n            >\n                {content.dateline || (publishedAt && formatDate(publishedAt))}\n            </p>\n        </header>\n    )\n}\n\n/**\n * The box tracks the hero's width, except that a `widest` hero would give it\n * lines too long to read comfortably. It takes the hero's columns without the\n * hero's block class, which carries a bespoke component's min-height.\n */\nfunction getMetadataBoxColumns(heroSize: BlockSize | undefined): string {\n    const size = heroSize === BlockSize.Widest ? BlockSize.Wide : heroSize\n    return getGridColumns(size ? `bespoke-component--${size}` : \"default\")\n}\n\ninterface FeaturedVizBodySplit {\n    /** Blocks before the featured viz, usually a short intro paragraph. */\n    before: OwidEnrichedGdocBlock[]\n    /** The featured viz itself, or undefined if the body has none. */\n    hero: EnrichedBlockBespokeComponent | undefined\n    /** Blocks after the featured viz. */\n    after: OwidEnrichedGdocBlock[]\n}\n\n/**\n * Split the body around its featured viz, so the page can render that one\n * block on its own full-bleed band\n */\nfunction splitFeaturedVizBody(\n    body: OwidEnrichedGdocBlock[] = []\n): FeaturedVizBodySplit {\n    // Find the first bespoke-component block at the top level\n    const heroIndex = body.findIndex(\n        (block) => block.type === \"bespoke-component\"\n    )\n    if (heroIndex === -1) return { before: body, hero: undefined, after: [] }\n\n    return {\n        before: body.slice(0, heroIndex),\n        hero: body[heroIndex] as EnrichedBlockBespokeComponent,\n        after: body.slice(heroIndex + 1),\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport { OwidGdocType, ArchiveContext } from \"@ourworldindata/types\"\nimport { OwidGdocPageProps } from \"@ourworldindata/utils\"\nimport { match, P } from \"ts-pattern\"\nimport { useIsClient } from \"usehooks-ts\"\nimport { GdocPost } from \"./pages/GdocPost.js\"\nimport { DataInsightPage } from \"./pages/DataInsight.js\"\nimport { Fragment } from \"./pages/Fragment.js\"\nimport { Homepage } from \"./pages/Homepage.js\"\nimport { Author } from \"./pages/Author.js\"\nimport AboutPage from \"./pages/AboutPage.js\"\nimport { AttachmentsContext } from \"./AttachmentsContext.js\"\nimport { DocumentContext } from \"./DocumentContext.js\"\nimport { AnnouncementPage } from \"./pages/Announcement.js\"\nimport { Profile } from \"./pages/Profile.js\"\nimport { FeaturedViz } from \"./pages/FeaturedViz.js\"\nimport { ADMIN_BASE_URL } from \"../../settings/clientSettings.mjs\"\nimport { shouldShowStaffControls } from \"@ourworldindata/grapher\"\nimport { SiteQueryClientProvider } from \"../SiteQueryClientProvider.js\"\n\ntype OwidGdocProps = OwidGdocPageProps & {\n    isPreviewing?: boolean\n    archiveContext?: ArchiveContext\n}\n\nfunction AdminLinks({ id }: Pick<OwidGdocPageProps, \"id\">) {\n    const isClient = useIsClient()\n    if (!isClient || !id || !shouldShowStaffControls()) return null\n\n    return (\n        <div className=\"gdoc-admin-bar\">\n            <a\n                href={`https://docs.google.com/document/d/${id}/edit`}\n                id=\"gdoc-link\"\n                target=\"_blank\"\n                rel=\"noopener\"\n            >\n                Gdoc\n            </a>\n            <span>/</span>\n            <a\n                href={`${ADMIN_BASE_URL}/admin/gdocs/${id}/preview`}\n                id=\"admin-link\"\n                target=\"_blank\"\n                rel=\"noopener\"\n            >\n                Admin\n            </a>\n        </div>\n    )\n}\n\nexport function OwidGdoc({\n    isPreviewing = false,\n    archiveContext,\n    ...props\n}: OwidGdocProps): React.ReactElement {\n    const content = match(props)\n        .with(\n            {\n                content: {\n                    type: P.union(\n                        OwidGdocType.Article,\n                        OwidGdocType.TopicPage,\n                        OwidGdocType.LinearTopicPage\n                    ),\n                },\n            },\n            (props) => <GdocPost {...props} />\n        )\n        .with({ content: { type: OwidGdocType.AboutPage } }, (props) => (\n            <AboutPage {...props} />\n        ))\n        .with({ content: { type: OwidGdocType.DataInsight } }, (props) => (\n            <DataInsightPage {...props} />\n        ))\n        .with({ content: { type: OwidGdocType.Announcement } }, (props) => (\n            <AnnouncementPage {...props} />\n        ))\n        .with({ content: { type: OwidGdocType.Homepage } }, (props) => (\n            <Homepage {...props} />\n        ))\n        .with({ content: { type: OwidGdocType.Author } }, (props) => (\n            <Author {...props} />\n        ))\n        .with({ content: { type: OwidGdocType.Fragment } }, (props) => (\n            <Fragment {...props} />\n        ))\n        .with({ content: { type: OwidGdocType.Profile } }, (props) => (\n            <Profile {...props} />\n        ))\n        .with({ content: { type: OwidGdocType.FeaturedViz } }, (props) => (\n            <FeaturedViz {...props} />\n        ))\n        .with(P.any, (gdoc) => (\n            <div\n                className=\"grid grid-cols-12-full-width\"\n                style={{ height: 250 }}\n            >\n                <h3 className=\"span-cols-12 col-start-2\">\n                    Unknown article type: \"{gdoc.content?.type}\"\n                </h3>\n                <p className=\"span-cols-12 col-start-2\">\n                    Must be one of: {Object.values(OwidGdocType).join(\", \")}\n                </p>\n            </div>\n        ))\n        .run()\n\n    return (\n        <AttachmentsContext.Provider\n            value={{\n                donors: _.get(props, \"donors\", []),\n                linkedAuthors: _.get(props, \"linkedAuthors\", []),\n                linkedDocuments: _.get(props, \"linkedDocuments\", {}),\n                imageMetadata: _.get(props, \"imageMetadata\", {}),\n                linkedCharts: _.get(props, \"linkedCharts\", {}),\n                linkedIndicators: _.get(props, \"linkedIndicators\", {}),\n                relatedCharts: _.get(props, \"relatedCharts\", []),\n                latestDataInsights: _.get(props, \"latestDataInsights\", []),\n                latestAnnouncements: _.get(props, \"latestAnnouncements\", []),\n                homepageMetadata: _.get(props, \"homepageMetadata\", {}),\n                latestWorkLinks: _.get(props, \"latestWorkLinks\", []),\n                linkedNarrativeCharts: _.get(\n                    props,\n                    \"linkedNarrativeCharts\",\n                    {}\n                ),\n                linkedStaticViz: _.get(props, \"linkedStaticViz\", {}),\n                linkedCallouts: _.get(props, \"linkedCallouts\", {}),\n                bespokeMetadata: _.get(props, \"bespokeMetadata\"),\n                // lodash doesn't use fallback when value is null\n                tags: props.tags ?? [],\n                topicArea: props.topicArea,\n            }}\n        >\n            <DocumentContext.Provider\n                value={{\n                    isPreviewing,\n                    archiveContext,\n                    gdocType: props.content.type,\n                    footnotes:\n                        \"refs\" in props.content\n                            ? props.content.refs?.definitions\n                            : undefined,\n                }}\n            >\n                <SiteQueryClientProvider>\n                    {!isPreviewing && <AdminLinks id={props.id} />}\n                    {content}\n                </SiteQueryClientProvider>\n            </DocumentContext.Provider>\n        </AttachmentsContext.Provider>\n    )\n}\n","import { FeedbackPrompt } from \"./Feedback.js\"\nimport { NewsletterSubscriptionContext } from \"./newsletter.js\"\nimport { NewsletterSubscription } from \"./NewsletterSubscription.js\"\n// Uncomment along with the Jobs button below when a job posting goes live.\n// import { faHandshake } from \"@fortawesome/free-solid-svg-icons\"\n// import { SiteToolsButton } from \"./SiteToolsButton.js\"\n\nexport const SITE_TOOLS_ROOT_CLASS = \"site-tools-root\"\n\nexport default function SiteTools() {\n    return (\n        <div className=\"site-tools\">\n            <NewsletterSubscription\n                context={NewsletterSubscriptionContext.Floating}\n            />\n            <FeedbackPrompt />\n            {/* <SiteToolsButton\n                icon={faHandshake}\n                label=\"Jobs\"\n                href=\"/jobs\"\n                dataTrackNote=\"page_open_jobs\"\n            /> */}\n        </div>\n    )\n}\n","import { BAKED_BASE_URL } from \"../settings/clientSettings.mjs\"\nimport {\n    ArchiveMetaInformation,\n    DetailDictionary,\n    fetchWithRetry,\n    readFromAssetMap,\n} from \"@ourworldindata/utils\"\nimport { SiteAnalytics } from \"./SiteAnalytics.js\"\nimport { initializeDetailsOnDemand } from \"@ourworldindata/components\"\n\ndeclare global {\n    interface Window {\n        _OWID_ARCHIVE_CONTEXT?: ArchiveMetaInformation\n    }\n}\n\nconst siteAnalytics = new SiteAnalytics()\n\nexport async function runDetailsOnDemand(): Promise<void> {\n    const runtimeAssetMap =\n        (typeof window !== \"undefined\" &&\n            window._OWID_ARCHIVE_CONTEXT?.assets?.runtime) ||\n        undefined\n\n    const dodFetchUrl = readFromAssetMap(runtimeAssetMap, {\n        path: \"dods.json\",\n        fallback: `${BAKED_BASE_URL}/dods.json`,\n    })\n\n    const details: DetailDictionary = await fetchWithRetry(dodFetchUrl, {\n        method: \"GET\",\n        credentials: \"same-origin\",\n        headers: {\n            Accept: \"application/json\",\n        },\n    }).then((res) => res.json())\n\n    initializeDetailsOnDemand({\n        details,\n        onDodShown: (id, dodSpan) =>\n            siteAnalytics.logDodShown(id, getDodTrackNote(dodSpan)),\n    })\n}\n\nexport const DOD_TRACK_NOTE_ATTR = \"data-dod-track-note\"\n\n/**\n * The page region a DoD span sits in, per its own or the nearest ancestor's\n * data-dod-track-note (set via SimpleMarkdownText's dodTrackNote on data pages),\n * or undefined if none.\n */\nexport function getDodTrackNote(dodSpan: Element): string | undefined {\n    return (\n        dodSpan\n            .closest(`[${DOD_TRACK_NOTE_ATTR}]`)\n            ?.getAttribute(DOD_TRACK_NOTE_ATTR) ?? undefined\n    )\n}\n","import cx from \"clsx\"\nimport * as React from \"react\"\nimport {\n    IReactionDisposer,\n    computed,\n    observable,\n    reaction,\n    makeObservable,\n} from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { WindowGraphers } from \"./DynamicCollectionPage.js\"\nimport { GRAPHER_PREVIEW_CLASS } from \"@ourworldindata/types\"\nimport GrapherImage from \"../GrapherImage.js\"\n\ninterface DynamicCollectionProps {\n    baseUrl: string\n    initialDynamicCollection?: string\n}\n\n@observer\nexport class DynamicCollection extends React.Component<DynamicCollectionProps> {\n    initialDynamicCollection: string | undefined =\n        this.props.initialDynamicCollection\n    graphers: undefined | WindowGraphers = undefined\n    pollInterval: null | ReturnType<typeof setInterval> = null\n    disposers: IReactionDisposer[] = []\n\n    constructor(props: DynamicCollectionProps) {\n        super(props)\n\n        makeObservable(this, {\n            initialDynamicCollection: observable,\n            graphers: observable,\n        })\n    }\n\n    @computed get allGrapherSlugsAndQueryStrings() {\n        if (!this.graphers) return []\n\n        // If the grapher hasn't mounted yet, we use the original slugAndQueryString\n        // This allows us to update the URL if users interact with graphers that have mounted\n        // while still keeping the unmounted graphers in the URL in the right place\n        const slugsAndQueryStrings = new Array(this.graphers.size)\n\n        for (const [originalSlugAndUrl, { index, grapher }] of this.graphers) {\n            if (!grapher) {\n                // Strip index suffix from originalSlugAndUrl\n                const withoutIndex = originalSlugAndUrl.replace(/-\\d+$/, \"\")\n                slugsAndQueryStrings[index] = encodeURIComponent(withoutIndex)\n            } else {\n                slugsAndQueryStrings[index] = encodeURIComponent(\n                    `${grapher.grapherState.slug}${grapher.grapherState.queryStr}`\n                )\n            }\n        }\n\n        return slugsAndQueryStrings\n    }\n\n    override componentDidMount() {\n        this.pollInterval = setInterval(this.pollForGraphers, 1000)\n    }\n\n    pollForGraphers = () => {\n        if (typeof window !== \"undefined\" && window.graphers) {\n            this.graphers = window.graphers\n            clearInterval(this.pollInterval!)\n            this.setupReaction()\n        }\n    }\n\n    setupReaction = () => {\n        this.disposers.push(\n            reaction(\n                () => this.allGrapherSlugsAndQueryStrings,\n                (allGrapherSlugsAndQueryStrings: string[]) => {\n                    const newUrl = `${\n                        this.props.baseUrl\n                    }/collection/custom?charts=${allGrapherSlugsAndQueryStrings.join(\n                        \"+\"\n                    )}`\n                    history.replaceState({}, \"\", newUrl)\n                }\n            )\n        )\n    }\n\n    renderInterior = () => {\n        if (!this.initialDynamicCollection)\n            return (\n                <p className=\"span-cols-12\">\n                    No charts were added to this collection.\n                    {/* TODO: Algolia search? */}\n                </p>\n            )\n        return (\n            <div className=\"grid span-cols-12\">\n                {this.initialDynamicCollection\n                    .split(\" \")\n                    .map((chartSlug, index) => {\n                        const grapherUrl = `${this.props.baseUrl}/grapher/${chartSlug}`\n                        return (\n                            <figure\n                                key={index}\n                                className={cx(\n                                    GRAPHER_PREVIEW_CLASS,\n                                    \"span-cols-6 span-md-cols-12\"\n                                )}\n                                data-grapher-src={grapherUrl}\n                                data-grapher-index={index}\n                            >\n                                <a href={grapherUrl}>\n                                    <GrapherImage slug={chartSlug} />\n                                </a>\n                            </figure>\n                        )\n                    })}\n            </div>\n        )\n    }\n\n    override render() {\n        return (\n            <>\n                {/* TODO: Add Algolia search to add new charts? */}\n                {this.renderInterior()}\n            </>\n        )\n    }\n}\n","import * as React from \"react\"\nimport ReactDOM from \"react-dom/client\"\nimport { BAKED_BASE_URL } from \"../../settings/clientSettings.mjs\"\nimport { DYNAMIC_COLLECTION_PAGE_CONTAINER_ID } from \"@ourworldindata/utils\"\nimport { ObservableMap, observable } from \"mobx\"\nimport { Grapher } from \"@ourworldindata/grapher\"\nimport { DynamicCollection } from \"./DynamicCollection.js\"\n\n/**\n * After the MultiEmbedder has mounted a Grapher, we poll grapherRef until grapherRef.current is defined,\n * and then update the window.graphers Map with it.\n *\n * This is what allows us to use a reaction in the DynamicCollection component to update the URL whenever a Grapher is updated.\n */\nexport function embedDynamicCollectionGrapher(\n    grapherRef: React.RefObject<Grapher | null>,\n    figure: Element\n) {\n    const interval = setInterval(() => {\n        if (grapherRef.current) {\n            const originalSlug =\n                grapherRef.current.grapherState.slug +\n                grapherRef.current.grapherState.queryStr\n\n            const index = figure.getAttribute(\"data-grapher-index\")\n\n            const windowGrapher = window.graphers.get(\n                `${originalSlug}-${index}`\n            )\n\n            if (windowGrapher) {\n                windowGrapher.grapher = grapherRef.current\n            }\n            clearInterval(interval)\n        }\n    }, 1000)\n}\n\nexport function hydrateDynamicCollectionPage() {\n    const container = document.querySelector(\n        `#${DYNAMIC_COLLECTION_PAGE_CONTAINER_ID}`\n    )\n    if (!container) {\n        console.error(\n            `Could not find container with id ${DYNAMIC_COLLECTION_PAGE_CONTAINER_ID}`\n        )\n        return\n    }\n\n    const urlParams = new URLSearchParams(window.location.search)\n    const initialDynamicCollection = urlParams.get(\"charts\") || \"\"\n    window.graphers = new ObservableMap()\n    const entries = initialDynamicCollection.split(\" \").entries()\n    for (const [index, chartSlug] of entries) {\n        window.graphers.set(\n            // Include index in the key so that we can have multiple of the same chart\n            // This gets tracked in the DOM via data-grapher-index, so that the MultiEmbedder can update the correct object\n            // when the grapher mounts\n            `${chartSlug}-${index}`,\n            observable({\n                index,\n                grapher: undefined,\n            })\n        )\n    }\n    ReactDOM.hydrateRoot(\n        container,\n        <DynamicCollection\n            baseUrl={BAKED_BASE_URL}\n            initialDynamicCollection={initialDynamicCollection}\n        />\n    )\n}\n","import {\n    keepPreviousData,\n    queryOptions,\n    useInfiniteQuery,\n    useQueries,\n    useQuery,\n} from \"@tanstack/react-query\"\nimport { LiteClient } from \"algoliasearch/lite\"\nimport { useEffect, useRef, useState } from \"react\"\nimport * as R from \"remeda\"\nimport {\n    latestPagesQueryKey,\n    queryLatestPages,\n    LatestPagesResult,\n} from \"../search/queries.js\"\nimport {\n    DEFAULT_LATEST_STATE,\n    type LatestState,\n    type LatestType,\n    type PageChronologicalRecord,\n} from \"@ourworldindata/types\"\nimport { getPrefixedGdocPath, OwidGdocType } from \"@ourworldindata/utils\"\nimport { match } from \"ts-pattern\"\nimport { SiteAnalytics, getLatestExperimentArm } from \"../SiteAnalytics.js\"\n\nconst DEFAULT_PAGE_SIZE = 20\n\n/*\n * Bake probes.\n *\n * Publishing updates the Algolia index synchronously, but the published\n * item's standalone page only exists once the next site bake completes — so\n * for a while, a freshly published card would link to a 404. During a grace\n * period after publish (`FRESH_WINDOW_MS`) we therefore HEAD-probe a card's\n * page and don't show the card until the probe comes back 200; past the\n * window we assume the bake has caught up.\n *\n * Two consumers share the probes through the query cache:\n *\n * - each card that links out gates its own rendering on `useIsLikelyBaked`;\n * - `LatestSearch` holds its loading skeleton until `useAreFreshProbesSettled`\n *   reports every first-page probe answered, so that the feed renders in one\n *   commit with its composition final. Without this, gated cards mount late:\n *   scrolling to a `/latest#slug` deeplink misses its anchor, and cards\n *   popping in shift the feed under the reader.\n *\n * A card gates only when it links to its own standalone page. The expanded\n * data insight and data update cards *are* that page's content, so they\n * render ungated and navigate elsewhere; their condensed counterparts are\n * teasers whose one destination is that page, so they wait for it.\n */\n\nexport const FRESH_WINDOW_MS = 60 * 60 * 1000\n\n// Callers pass `now` read once via a useState initializer, keeping render pure\nconst isFreshlyPublished = (publishedAt: string | Date, now: number): boolean =>\n    now - new Date(publishedAt).getTime() < FRESH_WINDOW_MS\n\n// Shared by both probe consumers — identical query keys are what make their\n// fetches dedupe.\nconst isLikelyBakedQueryOptions = (href: string) =>\n    queryOptions({\n        queryKey: [\"isLikelyBaked\", href],\n        queryFn: async () => {\n            // Resolve 404s as a final `false` rather than throwing — React\n            // Query only retries on rejected promises, so this caches the 404\n            // for the session. Network errors still throw and get the default\n            // retry/backoff treatment.\n            const res = await fetch(href, { method: \"HEAD\" })\n            return res.ok\n        },\n        staleTime: Infinity,\n    })\n\n/**\n * The URL a hit's probe checks, or null for card types that render ungated.\n * Sole source of the probe URL, so both consumers necessarily fire the same\n * queries — and exhaustive over the hit types, so adding one forces a\n * decision here about whether it gates.\n *\n * Always the hit's standalone page — the one destination whose existence\n * depends on this publish's bake. A card may link elsewhere in some states\n * (a data update's expanded CTA points at a pre-existing data page), but\n * those destinations can't 404 from a pending bake, so the standalone page\n * is what we vet. Whether a card gates on the answer is the card's own call:\n * it turns on how that card is currently rendering, which this doesn't know.\n */\nfunction getProbeHref(hit: PageChronologicalRecord): string | null {\n    return match(hit)\n        .with(\n            { type: OwidGdocType.Article },\n            { type: OwidGdocType.DataInsight },\n            // Data updates link out to their announcement page; plain\n            // announcements render their content inline and don't gate.\n            { type: OwidGdocType.Announcement, latestType: \"data-update\" },\n            (hit) =>\n                getPrefixedGdocPath(\"\", {\n                    slug: hit.slug,\n                    content: { type: hit.type },\n                })\n        )\n        .with({ type: OwidGdocType.Announcement }, () => null)\n        .with(\n            { type: OwidGdocType.TopicPage },\n            { type: OwidGdocType.LinearTopicPage },\n            () => null\n        )\n        .exhaustive()\n}\n\n/**\n * Whether it's safe to show this hit's card (see \"Bake probes\" above).\n * True unless the hit is gated — fresh, of a type that links to its own\n * standalone page — and its probe hasn't come back 200. Heuristic by design:\n * past the grace period this returns true without verifying anything.\n */\nexport function useIsLikelyBaked(hit: PageChronologicalRecord): boolean {\n    const [now] = useState(() => Date.now())\n    const probeHref = getProbeHref(hit)\n    const needsProbe = probeHref !== null && isFreshlyPublished(hit.date, now)\n\n    const { data } = useQuery({\n        ...isLikelyBakedQueryOptions(probeHref ?? \"\"),\n        enabled: needsProbe,\n    })\n\n    return !needsProbe || data === true\n}\n\n/**\n * Whether every fresh hit on the given page has a settled bake probe — the\n * signal `LatestSearch` extends its skeleton on (see \"Bake probes\" above).\n * Runs the probes itself so they start before any card mounts; the cards'\n * own `useIsLikelyBaked` calls then read them from the cache.\n *\n * Pass the first page only. The feed is chronological, so fresh hits are\n * always among the newest — and \"load more\" pages must never re-trigger the\n * skeleton.\n */\nexport function useAreFreshProbesSettled(\n    hits: PageChronologicalRecord[]\n): boolean {\n    const [now] = useState(() => Date.now())\n    const results = useQueries({\n        queries: hits\n            .filter((hit) => isFreshlyPublished(hit.date, now))\n            .map(getProbeHref)\n            .filter((href) => href !== null)\n            .map(isLikelyBakedQueryOptions),\n    })\n    return results.every((result) => !result.isPending)\n}\n\n/**\n * Handles analytics tracking for /latest filter state changes.\n * Mirrors useSearchAnalytics in site/search/searchHooks.ts.\n */\nexport function useLatestAnalytics(\n    state: LatestState,\n    analytics: SiteAnalytics\n): void {\n    const lastLoggedStateRef = useRef<LatestState | null>(null)\n\n    useEffect(() => {\n        // Skip analytics for the initial default/empty page load, but keep\n        // tracking later transitions back to the default state. Updating the\n        // ref here lets us track repeated filter states separated by a reset,\n        // e.g. A -> default -> A. This can help inform the need for a visible\n        // reset button.\n        if (\n            lastLoggedStateRef.current === null &&\n            R.isDeepEqual(state, DEFAULT_LATEST_STATE)\n        ) {\n            lastLoggedStateRef.current = state\n            return\n        }\n        // Skip if we already logged this state.\n        if (R.isDeepEqual(state, lastLoggedStateRef.current)) return\n\n        lastLoggedStateRef.current = state\n        analytics.logLatest(state)\n    }, [state, analytics])\n}\n\nexport function useInfiniteLatestPages({\n    topics,\n    latestType = null,\n    liteSearchClient,\n    pageSize = DEFAULT_PAGE_SIZE,\n}: {\n    topics: string[]\n    latestType?: LatestType | null\n    liteSearchClient: LiteClient\n    pageSize?: number\n}) {\n    const query = useInfiniteQuery<LatestPagesResult, Error>({\n        queryKey: latestPagesQueryKey.latestPages(topics, latestType),\n        queryFn: ({ pageParam }) => {\n            if (typeof pageParam !== \"number\")\n                throw new Error(\"Invalid pageParam\")\n\n            const offset = pageParam * pageSize\n            return queryLatestPages(\n                liteSearchClient,\n                topics,\n                offset,\n                pageSize,\n                latestType\n            )\n        },\n        getNextPageParam: (lastPage, allPages) => {\n            const totalFetched = allPages.reduce(\n                (sum, page) => sum + page.response.hits.length,\n                0\n            )\n            return totalFetched < (lastPage.response.nbHits ?? 0)\n                ? allPages.length\n                : undefined\n        },\n        initialPageParam: 0,\n        placeholderData: keepPreviousData,\n    })\n\n    const hits: PageChronologicalRecord[] =\n        query.data?.pages.flatMap((page) => page.response.hits) || []\n    const totalResults = query.data?.pages[0]?.response.nbHits || 0\n    const tagFacetCounts: Record<string, number> =\n        query.data?.pages[0]?.tagFacetCounts || {}\n    const latestTypeFacetCounts: Record<string, number> =\n        query.data?.pages[0]?.latestTypeFacetCounts || {}\n\n    return {\n        ...query,\n        hits,\n        totalResults,\n        tagFacetCounts,\n        latestTypeFacetCounts,\n    }\n}\n\n/*\n * Sticky filters experiment (exp-latest-sticky-filters-v1).\n */\n\n/** Read the sticky-filter arm once on mount for the reveal-on-scroll-up hook.\n * Read during render: /latest mounts with createRoot, not hydration, so there\n * is no server render for a cookie read to disagree with. */\nexport function useLatestStickyFiltersArm(): string | undefined {\n    const [arm] = useState(getLatestExperimentArm)\n    return arm\n}\n\n/** Where a sticky element sits in the flow, in document coordinates, and the\n * viewport offset it pins at. A stuck element reports its *pinned* position\n * through both getBoundingClientRect and offsetTop, so the flow position is\n * read by dropping it out of sticky positioning for the duration of the\n * measurement — synchronous, so nothing paints in between. The pin offset is\n * a custom property so it's readable whichever offset the bar is currently\n * sticky at. */\nexport function getStickyLayout(el: HTMLElement): {\n    layoutTop: number\n    stickyTop: number\n} {\n    const stickyTop =\n        parseFloat(\n            getComputedStyle(el).getPropertyValue(STICKY_FILTERS_TOP_PROPERTY)\n        ) || 0\n    el.style.position = \"static\"\n    const layoutTop = window.scrollY + el.getBoundingClientRect().top\n    el.style.removeProperty(\"position\")\n    return { layoutTop, stickyTop }\n}\n\n/** Custom property carrying the offset the facets pin at (0 on desktop,\n * negative on mobile so only the pills stay). Set in LatestSearch.scss. */\nconst STICKY_FILTERS_TOP_PROPERTY = \"--latest-sticky-filters-top\"\n\n/** Custom property carrying the bar's own height, published by\n * useRevealOnScrollUp so CSS can park the bar that far above the pin\n * point. Read in LatestSearch.scss. */\nconst STICKY_FILTERS_HEIGHT_PROPERTY = \"--latest-sticky-filters-height\"\n\n/** How far the page has to move before a scroll counts as a change of\n * direction. Filters out sub-pixel jitter and the tail of iOS rubber-band\n * overscroll, either of which would otherwise flip the bar in and out. */\nconst SCROLL_DIRECTION_THRESHOLD_PX = 4\n\n/** Track scroll direction and publish the bar's height for its CSS offsets.\n * See README.md for the sticky positioning model. */\nexport function useRevealOnScrollUp(\n    enabled: boolean,\n    stickyRef: React.RefObject<HTMLElement | null>\n): boolean {\n    const [isRevealed, setIsRevealed] = useState(false)\n\n    useEffect(() => {\n        if (!enabled) return\n        const el = stickyRef.current\n        if (!el) return\n\n        // CSS parks the bar with `top: calc(pin offset - height)` and\n        // can't measure the height itself.\n        const publishHeight = (): void => {\n            el.style.setProperty(\n                STICKY_FILTERS_HEIGHT_PROPERTY,\n                `${el.offsetHeight}px`\n            )\n        }\n\n        let lastScrollY = window.scrollY\n        const onScroll = (): void => {\n            const scrollY = window.scrollY\n            const delta = scrollY - lastScrollY\n            if (Math.abs(delta) < SCROLL_DIRECTION_THRESHOLD_PX) return\n            lastScrollY = scrollY\n            setIsRevealed(delta < 0)\n        }\n\n        publishHeight()\n        // The bar's height changes when the filters restack at the mobile\n        // breakpoint, putting the type dropdown above the pills.\n        const resizeObserver = new ResizeObserver(publishHeight)\n        resizeObserver.observe(el)\n        window.addEventListener(\"scroll\", onScroll, { passive: true })\n        return () => {\n            window.removeEventListener(\"scroll\", onScroll)\n            resizeObserver.disconnect()\n            el.style.removeProperty(STICKY_FILTERS_HEIGHT_PROPERTY)\n        }\n    }, [enabled, stickyRef])\n\n    return enabled && isRevealed\n}\n","import React, { useCallback, useContext } from \"react\"\nimport cx from \"clsx\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faCaretDown,\n    faCaretLeft,\n    faCaretRight,\n    faFilter,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { ScrollMenu, VisibilityContext } from \"react-horizontal-scrolling-menu\"\nimport {\n    Button,\n    ListBox,\n    ListBoxItem,\n    Popover,\n    Select,\n    ToggleButton,\n    ToggleButtonGroup,\n    type Key,\n} from \"react-aria-components\"\nimport { LATEST_TYPE_VALUES, LatestType } from \"@ourworldindata/types\"\nimport { getPrefersReducedMotion } from \"@ourworldindata/components\"\nimport { latestTypeLabelPlural } from \"./latestUtils.js\"\n\n/** Label above the topic pills. Only shown on mobile in the sticky arms of\n * the sticky filters experiment, where the content-type dropdown moves\n * above the pills and the pills need a heading of their own. Rendered\n * unconditionally (and in the baked skeleton) so CSS can show it before\n * the app mounts. */\nexport const LATEST_TOPIC_FACETS_LABEL = \"Filter by topic\"\nconst LATEST_TOPIC_FACETS_LABEL_ID = \"latest-topic-facets-label\"\n\n/**\n * Wrapper that accepts the `itemId` prop required by\n * react-horizontal-scrolling-menu while rendering a react-aria ToggleButton.\n */\ntype TopicPillProps = React.ComponentProps<typeof ToggleButton> & {\n    itemId: string\n}\n\nconst TopicPill = ({ itemId: _itemId, ...props }: TopicPillProps) => {\n    return <ToggleButton {...props} />\n}\n\nfunction scrollPillIntoView(node: Element | null): void {\n    node?.scrollIntoView({\n        behavior: getPrefersReducedMotion() ? \"auto\" : \"smooth\",\n        inline: \"center\",\n        block: \"nearest\",\n    })\n}\n\nfunction scrollKeyboardFocusedPillIntoView(\n    event: React.FocusEvent<Element>\n): void {\n    // Pointer focus happens on mouse down. If we scroll the pill at that point,\n    // it can move out from under the pointer before mouse up, cancelling the\n    // click/selection. Keep this behavior for keyboard focus only.\n    if (event.currentTarget.matches(\":focus-visible\"))\n        scrollPillIntoView(event.currentTarget)\n}\n\nconst LeftArrow = () => {\n    const { useLeftArrowVisible, scrollPrev } = useContext(VisibilityContext)\n    const isFirstVisible = useLeftArrowVisible()\n\n    // Hide arrow when first item is visible (we're at the start)\n    if (isFirstVisible) return null\n\n    return (\n        <button\n            className=\"latest-topic-facets__scroll-arrow latest-topic-facets__scroll-arrow--left\"\n            aria-label=\"Scroll to previous topics\"\n            onClick={() => scrollPrev()}\n        >\n            <FontAwesomeIcon icon={faCaretLeft} />\n        </button>\n    )\n}\n\nconst ContentTypeListBoxItem = ({\n    id,\n    label,\n    ariaLabel,\n}: {\n    id: string\n    label: string\n    ariaLabel?: string\n}) => {\n    return (\n        <ListBoxItem\n            id={id}\n            textValue={label}\n            aria-label={ariaLabel}\n            className=\"latest-topic-facets__content-type-dropdown-item\"\n        >\n            {({ isSelected }) => (\n                <>\n                    <span\n                        className={cx(\n                            \"latest-topic-facets__content-type-radio\",\n                            {\n                                \"latest-topic-facets__content-type-radio--checked\":\n                                    isSelected,\n                            }\n                        )}\n                    >\n                        {isSelected && (\n                            <span className=\"latest-topic-facets__content-type-radio-dot\" />\n                        )}\n                    </span>\n                    <span className=\"latest-topic-facets__content-type-dropdown-label\">\n                        {label}\n                    </span>\n                </>\n            )}\n        </ListBoxItem>\n    )\n}\n\nconst RightArrow = () => {\n    const { useRightArrowVisible, scrollNext } = useContext(VisibilityContext)\n    const isLastVisible = useRightArrowVisible()\n\n    // Hide arrow when last item is visible (we're at the end)\n    if (isLastVisible) return null\n\n    return (\n        <button\n            className=\"latest-topic-facets__scroll-arrow latest-topic-facets__scroll-arrow--right\"\n            aria-label=\"Scroll to next topics\"\n            onClick={() => scrollNext()}\n        >\n            <FontAwesomeIcon icon={faCaretRight} />\n        </button>\n    )\n}\n\nexport const LatestTopicFacets = ({\n    topics,\n    selectedTopics,\n    onTopicsChange,\n    selectedType,\n    onLatestTypeChange,\n    disabledTypes,\n    disabledTopics,\n}: {\n    topics: string[]\n    selectedTopics: string[]\n    onTopicsChange: (topics: string[]) => void\n    selectedType: LatestType | null\n    onLatestTypeChange: (type: LatestType | null) => void\n    disabledTypes: Set<LatestType>\n    disabledTopics: Set<string>\n}) => {\n    // Topic selection on /latest is single-select in the UI: clicking a\n    // topic replaces the current selection (or clears it when re-clicked).\n    // The underlying state and query layers still model topics as a\n    // multi-value array with disjunctive (OR) semantics — matching /search,\n    // which uses the same `formatTopicFacetFilters` helper. Keeping that\n    // shape preserves parity if multi-select is ever added back.\n    const selectedKeys =\n        selectedTopics.length === 0\n            ? new Set<Key>([\"all\"])\n            : new Set<Key>(selectedTopics)\n\n    const handleSelectionChange = useCallback(\n        (keys: Set<Key>) => {\n            // \"all\" is a synthetic key for the All pill — strip it before\n            // propagating, since `selectedTopics` represents that state as [].\n            const next = [...keys]\n                .filter((k) => k !== \"all\")\n                .map((k) => String(k))\n            onTopicsChange(next)\n        },\n        [onTopicsChange]\n    )\n\n    return (\n        <div className=\"latest-topic-facets\">\n            <div className=\"latest-topic-facets__filters\">\n                <div className=\"latest-topic-facets__topics\">\n                    <span\n                        id={LATEST_TOPIC_FACETS_LABEL_ID}\n                        className=\"latest-topic-facets__topics-label\"\n                    >\n                        {LATEST_TOPIC_FACETS_LABEL}\n                    </span>\n                    <ToggleButtonGroup\n                        className=\"latest-topic-facets__topic-pills\"\n                        aria-labelledby={LATEST_TOPIC_FACETS_LABEL_ID}\n                        selectionMode=\"single\"\n                        selectedKeys={selectedKeys}\n                        onSelectionChange={handleSelectionChange}\n                    >\n                        <ScrollMenu\n                            LeftArrow={LeftArrow}\n                            RightArrow={RightArrow}\n                        >\n                            {[\n                                <TopicPill\n                                    key=\"all\"\n                                    itemId=\"all\"\n                                    id=\"all\"\n                                    className=\"latest-topic-facets__topic-pill\"\n                                    onFocus={scrollKeyboardFocusedPillIntoView}\n                                    aria-label=\"All topics\"\n                                >\n                                    All\n                                </TopicPill>,\n                                ...topics.map((topic) => (\n                                    <TopicPill\n                                        key={topic}\n                                        itemId={topic}\n                                        id={topic}\n                                        ref={\n                                            topic === selectedTopics[0]\n                                                ? scrollPillIntoView\n                                                : undefined\n                                        }\n                                        className=\"latest-topic-facets__topic-pill\"\n                                        isDisabled={disabledTopics.has(topic)}\n                                        onFocus={\n                                            scrollKeyboardFocusedPillIntoView\n                                        }\n                                    >\n                                        {topic}\n                                    </TopicPill>\n                                )),\n                            ]}\n                        </ScrollMenu>\n                    </ToggleButtonGroup>\n                </div>\n                <Select\n                    className=\"latest-topic-facets__content-type-dropdown\"\n                    aria-label=\"Filter by type\"\n                    value={selectedType ?? \"all\"}\n                    onChange={(key) =>\n                        onLatestTypeChange(\n                            key === \"all\" || key === null\n                                ? null\n                                : (key as LatestType)\n                        )\n                    }\n                    disabledKeys={disabledTypes}\n                >\n                    <Button className=\"latest-topic-facets__content-type-trigger\">\n                        <FontAwesomeIcon\n                            icon={faFilter}\n                            className=\"latest-topic-facets__content-type-trigger-icon\"\n                        />\n                        <span className=\"latest-topic-facets__content-type-trigger-label\">\n                            {selectedType\n                                ? latestTypeLabelPlural(selectedType)\n                                : \"Filter by type\"}\n                        </span>\n                        <FontAwesomeIcon\n                            icon={faCaretDown}\n                            className=\"latest-topic-facets__content-type-trigger-chevron\"\n                        />\n                    </Button>\n                    <Popover\n                        className=\"latest-topic-facets__content-type-dropdown-menu\"\n                        placement=\"bottom start\"\n                        offset={4}\n                    >\n                        <ListBox>\n                            <ContentTypeListBoxItem\n                                id=\"all\"\n                                label=\"All\"\n                                ariaLabel=\"All types\"\n                            />\n                            {LATEST_TYPE_VALUES.map((value) => (\n                                <ContentTypeListBoxItem\n                                    key={value}\n                                    id={value}\n                                    label={latestTypeLabelPlural(value)}\n                                />\n                            ))}\n                        </ListBox>\n                    </Popover>\n                </Select>\n            </div>\n        </div>\n    )\n}\n","export const LatestPageHeader = () => (\n    <header className=\"latest-page-header span-cols-14 grid grid-cols-12-full-width\">\n        <h1 className=\"display-2-semibold span-cols-8 col-start-2 col-md-start-2 span-md-cols-10 col-sm-start-2 span-sm-cols-12\">\n            Latest\n        </h1>\n        <p className=\"latest-page__header-subtitle body-1-regular span-cols-8 col-start-2 col-md-start-2 span-md-cols-10 col-sm-start-2 span-sm-cols-12\">\n            Our latest articles, data updates, and announcements\n        </p>\n    </header>\n)\n","import {\n    Label,\n    RadioButton,\n    RadioField,\n    RadioGroup,\n} from \"react-aria-components\"\nimport { LATEST_FEED_VIEWS, LatestFeedView } from \"./latestUtils.js\"\n\nconst VIEW_LABELS: Record<LatestFeedView, string> = {\n    expanded: \"Expanded\",\n    compact: \"Compact\",\n}\n\n/** Desktop Expanded/Compact control, placed above the newsletter sidebar. */\nexport const LatestViewToggle = ({\n    view,\n    onViewChange,\n}: {\n    view: LatestFeedView\n    onViewChange: (view: LatestFeedView) => void\n}) => (\n    <RadioGroup\n        className=\"latest-view-toggle col-start-11 span-cols-3 col-lg-start-10 span-lg-cols-4\"\n        orientation=\"horizontal\"\n        value={view}\n        onChange={(value) => onViewChange(value as LatestFeedView)}\n    >\n        <Label className=\"latest-view-toggle__label h6-black-caps\">View:</Label>\n        {LATEST_FEED_VIEWS.map((value) => (\n            <RadioField\n                key={value}\n                value={value}\n                className=\"latest-view-toggle__field\"\n            >\n                <RadioButton className=\"latest-view-toggle__option note-12-medium\">\n                    <span className=\"latest-view-toggle__radio\" />\n                    {VIEW_LABELS[value]}\n                </RadioButton>\n            </RadioField>\n        ))}\n    </RadioGroup>\n)\n","import { LatestState, LatestUrlParam } from \"@ourworldindata/types\"\nimport {\n    serializeSet,\n    topicAreasFromSearchParams,\n} from \"../search/searchUtils.js\"\nimport { decodeLatestType } from \"./latestUtils.js\"\n\n// Whitelist + validate /latest URL params. Topics not present in `allAreas`\n// are dropped; an unrecognized `type` becomes null. The pair with\n// `stateToSearchParams` lets the SPA canonicalize the URL the same way\n// /search does (see site/search/searchState.ts).\nexport function searchParamsToState(\n    searchParams: URLSearchParams,\n    allAreas: string[]\n): LatestState {\n    const topics = topicAreasFromSearchParams(searchParams, allAreas)\n    return {\n        topics,\n        latestType: decodeLatestType(searchParams.get(LatestUrlParam.TYPE)),\n    }\n}\n\nexport function stateToSearchParams(state: LatestState): URLSearchParams {\n    const params = new URLSearchParams()\n    const topics = serializeSet(new Set(state.topics))\n    if (topics) params.set(LatestUrlParam.TOPICS, topics)\n    if (state.latestType) params.set(LatestUrlParam.TYPE, state.latestType)\n    return params\n}\n\nexport function urlNeedsSanitization(\n    searchParams: URLSearchParams,\n    state: LatestState\n): boolean {\n    return searchParams.toString() !== stateToSearchParams(state).toString()\n}\n","import { LATEST_TYPE_LABELS, LatestType } from \"@ourworldindata/types\"\nimport DataInsightDateline from \"../gdocs/components/DataInsightDateline.js\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faArrowPointer,\n    faBook,\n    faBookmark,\n    faChartLine,\n    faLightbulb,\n    faNewspaper,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport type { IconDefinition } from \"@fortawesome/fontawesome-svg-core\"\n\n/** Icons shown in the metadata row, keyed by latestType. Labels live in\n * LATEST_TYPE_LABELS so other render sites (announcement page, homepage)\n * share the same wording. */\nconst LATEST_TYPE_ICONS: Record<LatestType, IconDefinition> = {\n    article: faBook,\n    \"data-insight\": faLightbulb,\n    \"data-update\": faChartLine,\n    \"topic-update\": faBookmark,\n    \"website-upgrade\": faArrowPointer,\n    announcement: faNewspaper,\n}\n\n/**\n * Metadata row shown above each card: icon + type label + #area on the left,\n * date on the right. Takes primitives so both Algolia-backed feed hits\n * (which carry an ISO date string) and the gdoc-backed standalone\n * announcement page (which has a Date) can pass through without converting.\n */\nexport const LatestHitMetadata = ({\n    latestType,\n    tags,\n    publishedAt,\n    selectedTopic,\n}: {\n    latestType?: LatestType\n    tags?: string[]\n    publishedAt: Date | string | null\n    selectedTopic?: string\n}) => {\n    const firstTag =\n        selectedTopic && tags?.includes(selectedTopic)\n            ? selectedTopic\n            : tags?.[0]\n    const date =\n        typeof publishedAt === \"string\" ? new Date(publishedAt) : publishedAt\n    return (\n        <div className=\"latest-hit-metadata\">\n            <span className=\"latest-hit-metadata__left h6-black-caps\">\n                {latestType && (\n                    <span className=\"latest-hit-metadata__type-label\">\n                        <FontAwesomeIcon\n                            icon={LATEST_TYPE_ICONS[latestType]}\n                            className=\"latest-hit-metadata__type-icon\"\n                        />\n                        {LATEST_TYPE_LABELS[latestType]}\n                    </span>\n                )}\n                {latestType && firstTag && (\n                    <span className=\"latest-hit-metadata__separator\">·</span>\n                )}\n                {firstTag && (\n                    <span className=\"latest-hit-metadata__area-tag\">\n                        {firstTag}\n                    </span>\n                )}\n            </span>\n            <DataInsightDateline\n                publishedAt={date}\n                className=\"latest-hit-metadata__dateline h6-black-caps\"\n            />\n        </div>\n    )\n}\n","import { createContext, useContext } from \"react\"\nimport { SiteAnalytics } from \"../SiteAnalytics.js\"\n\ninterface LatestContextType {\n    analytics: SiteAnalytics\n}\n\nexport const LatestContext = createContext<LatestContextType | null>(null)\n\nexport const useLatestContext = () => {\n    const context = useContext(LatestContext)\n    if (!context) {\n        throw new Error(\n            \"useLatestContext must be used within a LatestContext.Provider\"\n        )\n    }\n    return context\n}\n","import {\n    formatAuthors,\n    getPrefixedGdocPath,\n    OwidGdocType,\n} from \"@ourworldindata/utils\"\nimport { PageChronologicalArticleRecord } from \"@ourworldindata/types\"\nimport { AttachmentsContext } from \"../gdocs/AttachmentsContext.js\"\nimport Image from \"../gdocs/components/Image.js\"\nimport { ArticleBlocks } from \"../gdocs/components/ArticleBlocks.js\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faArrowRight } from \"@fortawesome/free-solid-svg-icons\"\nimport cx from \"clsx\"\nimport { LatestHitMetadata } from \"./LatestHitMetadata.js\"\nimport { LATEST_HIT_GRID_CLASSES, makeAttachments } from \"./latestUtils.js\"\nimport { useLatestContext } from \"./LatestContext.js\"\nimport { useIsLikelyBaked } from \"./latestHooks.js\"\n\n/**\n * Article card for the /latest feed.\n *\n * The excerpt has two modes: plain text by default, or full ArticleBlocks\n * (internal links, formatting, …) when `latest-feed-excerpt` is set on the\n * gdoc. The rich mode also renders a \"Read the article\" affordance.\n *\n * `latest-feed-featured-image` separately swaps the card thumbnail without\n * affecting the article page's `featured-image`.\n */\nexport const LatestArticleHit = ({\n    hit,\n    selectedTopic,\n    position,\n}: {\n    hit: PageChronologicalArticleRecord\n    selectedTopic?: string\n    position: number\n}) => {\n    const { analytics } = useLatestContext()\n    const latestFeedExcerpt = hit.latestFeedExcerpt?.length\n        ? hit.latestFeedExcerpt\n        : undefined\n    const href = getPrefixedGdocPath(\"\", {\n        slug: hit.slug,\n        content: { type: OwidGdocType.Article },\n    })\n    const isLikelyBaked = useIsLikelyBaked(hit)\n    const titleId = `latest-hit-${hit.slug}-title`\n    const handleResultClick = () =>\n        analytics.logLatestResultClick(hit, position)\n\n    if (!isLikelyBaked) return null\n\n    return (\n        <AttachmentsContext.Provider value={makeAttachments(hit)}>\n            <article\n                id={hit.slug}\n                aria-labelledby={titleId}\n                className={cx(\"latest-article-hit\", LATEST_HIT_GRID_CLASSES)}\n            >\n                <LatestHitMetadata\n                    latestType={hit.latestType}\n                    tags={hit.tags}\n                    publishedAt={hit.date}\n                    selectedTopic={selectedTopic}\n                />\n                <div className=\"latest-article-hit__card grid grid-cols-8\">\n                    {(hit.latestFeedFeaturedImage || hit.featuredImage) && (\n                        <Image\n                            filename={\n                                hit.latestFeedFeaturedImage ?? hit.featuredImage\n                            }\n                            className=\"latest-article-hit__image span-cols-3\"\n                            containerType=\"latest-article\"\n                            shouldLightbox={false}\n                        />\n                    )}\n                    <div className=\"latest-article-hit__content span-cols-5\">\n                        <h2 id={titleId} className=\"latest-article-hit__title\">\n                            <a\n                                href={href}\n                                className=\"latest-article-hit__title-link\"\n                                onClick={handleResultClick}\n                            >\n                                {hit.title}\n                            </a>\n                        </h2>\n                        <p className=\"latest-article-hit__authors\">\n                            {formatAuthors(hit.authors)}\n                        </p>\n                        {latestFeedExcerpt ? (\n                            <>\n                                <div className=\"latest-article-hit__excerpt latest-article-hit__excerpt--rich\">\n                                    <ArticleBlocks\n                                        blocks={latestFeedExcerpt}\n                                        shouldRenderLinks={true}\n                                    />\n                                </div>\n                                <a\n                                    href={href}\n                                    className=\"latest-article-hit__read-more\"\n                                    onClick={handleResultClick}\n                                >\n                                    Read the article\n                                    <FontAwesomeIcon icon={faArrowRight} />\n                                </a>\n                            </>\n                        ) : (\n                            <p className=\"latest-article-hit__excerpt\">\n                                {hit.excerpt}\n                            </p>\n                        )}\n                    </div>\n                </div>\n            </article>\n        </AttachmentsContext.Provider>\n    )\n}\n","import { PageChronologicalDataInsightRecord } from \"@ourworldindata/types\"\nimport { getPrefixedGdocPath } from \"@ourworldindata/utils\"\nimport { AttachmentsContext } from \"../gdocs/AttachmentsContext.js\"\nimport Image from \"../gdocs/components/Image.js\"\nimport { ArticleBlocks } from \"../gdocs/components/ArticleBlocks.js\"\nimport AvatarByline from \"../gdocs/components/AvatarByline.js\"\nimport CopyLinkButton from \"../gdocs/components/CopyLinkButton.js\"\nimport { LatestHitMetadata } from \"./LatestHitMetadata.js\"\nimport { findThumbnailImageBlock, makeAttachments } from \"./latestUtils.js\"\n\n/** Full insight in a six-column reading card. Navigation uses body and author links. */\nexport const LatestDataInsightExpanded = ({\n    hit,\n    selectedTopic,\n}: {\n    hit: PageChronologicalDataInsightRecord\n    selectedTopic?: string\n}) => {\n    const firstImage = findThumbnailImageBlock(hit.body)\n    const otherBlocks = hit.body.filter((block) => block !== firstImage)\n    const titleId = `latest-hit-${hit.slug}-title`\n\n    return (\n        <AttachmentsContext.Provider value={makeAttachments(hit)}>\n            <article\n                id={hit.slug}\n                aria-labelledby={titleId}\n                className=\"latest-data-insight-expanded span-cols-6 col-start-2 span-md-cols-12 col-md-start-2 span-sm-cols-14 col-sm-start-1\"\n            >\n                <LatestHitMetadata\n                    latestType={hit.latestType}\n                    tags={hit.tags}\n                    publishedAt={hit.date}\n                    selectedTopic={selectedTopic}\n                />\n                <div className=\"latest-data-insight-expanded__card\">\n                    <h2\n                        id={titleId}\n                        className=\"latest-data-insight-expanded__title body-1-bold\"\n                    >\n                        {hit.title}\n                    </h2>\n                    <AvatarByline\n                        className=\"latest-data-insight-expanded__authors\"\n                        authors={hit.authors}\n                        authorRoles={hit.authorRoles}\n                    />\n                    {firstImage && (\n                        <Image\n                            {...firstImage}\n                            className=\"latest-data-insight-expanded__image\"\n                            containerType=\"latest-data-insight-expanded\"\n                            shouldLightbox={false}\n                        />\n                    )}\n                    <div className=\"latest-data-insight-expanded__blocks\">\n                        <ArticleBlocks\n                            blocks={otherBlocks}\n                            containerType=\"data-insight\"\n                        />\n                    </div>\n                    <CopyLinkButton\n                        path={getPrefixedGdocPath(\"\", {\n                            slug: hit.slug,\n                            content: { type: hit.type },\n                        })}\n                        trackNote=\"latest_data_insight_copy_link\"\n                        className=\"latest-data-insight-expanded__copy-link\"\n                        variant=\"text\"\n                    />\n                </div>\n            </article>\n        </AttachmentsContext.Provider>\n    )\n}\n","import {\n    formatAuthors,\n    getPrefixedGdocPath,\n    OwidGdocType,\n} from \"@ourworldindata/utils\"\nimport { PageChronologicalDataInsightRecord } from \"@ourworldindata/types\"\nimport { AttachmentsContext } from \"../gdocs/AttachmentsContext.js\"\nimport Image from \"../gdocs/components/Image.js\"\nimport { ArticleBlocks } from \"../gdocs/components/ArticleBlocks.js\"\nimport cx from \"clsx\"\nimport { LatestHitMetadata } from \"./LatestHitMetadata.js\"\nimport {\n    LATEST_HIT_GRID_CLASSES,\n    findThumbnailImageBlock,\n    makeAttachments,\n} from \"./latestUtils.js\"\nimport { useLatestContext } from \"./LatestContext.js\"\nimport { useIsLikelyBaked } from \"./latestHooks.js\"\nimport { LatestDataInsightExpanded } from \"./LatestDataInsightExpanded.js\"\n\n/** Compact cards link to the insight page; expanded cards render it in place.\n * LatestSearch resolves the presentation from the displayed filter and view. */\nexport const LatestDataInsightHit = ({\n    hit,\n    selectedTopic,\n    position,\n    isExpanded,\n}: {\n    hit: PageChronologicalDataInsightRecord\n    selectedTopic?: string\n    position: number\n    isExpanded: boolean\n}) => {\n    if (isExpanded) {\n        return (\n            <LatestDataInsightExpanded\n                hit={hit}\n                selectedTopic={selectedTopic}\n            />\n        )\n    }\n    return (\n        <CondensedDataInsightHit\n            hit={hit}\n            selectedTopic={selectedTopic}\n            position={position}\n        />\n    )\n}\n\nconst CondensedDataInsightHit = ({\n    hit,\n    selectedTopic,\n    position,\n}: {\n    hit: PageChronologicalDataInsightRecord\n    selectedTopic?: string\n    position: number\n}) => {\n    const { analytics } = useLatestContext()\n    const href = getPrefixedGdocPath(\"\", {\n        slug: hit.slug,\n        content: { type: OwidGdocType.DataInsight },\n    })\n    const isLikelyBaked = useIsLikelyBaked(hit)\n    const firstImage = findThumbnailImageBlock(hit.body)\n    const otherBlocks = hit.body.filter((block) => block !== firstImage)\n    const titleId = `latest-hit-${hit.slug}-title`\n\n    if (!isLikelyBaked) return null\n\n    return (\n        <AttachmentsContext.Provider value={makeAttachments(hit)}>\n            <article\n                id={hit.slug}\n                className={cx(\n                    \"latest-data-insight-hit\",\n                    LATEST_HIT_GRID_CLASSES\n                )}\n            >\n                <LatestHitMetadata\n                    latestType={hit.latestType}\n                    tags={hit.tags}\n                    publishedAt={hit.date}\n                    selectedTopic={selectedTopic}\n                />\n                <a\n                    href={href}\n                    aria-labelledby={titleId}\n                    className=\"latest-data-insight-hit__card grid grid-cols-8\"\n                    onClick={() =>\n                        analytics.logLatestResultClick(hit, position)\n                    }\n                >\n                    {firstImage && (\n                        <Image\n                            className=\"latest-data-insight-hit__image span-cols-3\"\n                            filename={firstImage.filename}\n                            containerType=\"latest-data-insight\"\n                            shouldLightbox={false}\n                        />\n                    )}\n                    <div className=\"latest-data-insight-hit__content span-cols-5\">\n                        <h2\n                            id={titleId}\n                            className=\"latest-data-insight-hit__title body-1-bold\"\n                        >\n                            {hit.title}\n                        </h2>\n                        <p className=\"latest-data-insight-hit__authors\">\n                            {formatAuthors(hit.authors)}\n                        </p>\n                        <div className=\"latest-data-insight-hit__blocks\">\n                            <ArticleBlocks\n                                blocks={otherBlocks}\n                                shouldRenderLinks={false}\n                                interactiveImages={false}\n                            />\n                        </div>\n                    </div>\n                </a>\n            </article>\n        </AttachmentsContext.Provider>\n    )\n}\n","import { useState } from \"react\"\nimport * as React from \"react\"\nimport { OwidEnrichedGdocBlock } from \"@ourworldindata/types\"\nimport { ArticleBlocks } from \"../gdocs/components/ArticleBlocks.js\"\nimport { Container, getLayout } from \"../gdocs/components/layout.js\"\nimport cx from \"clsx\"\n\nconst MAX_LEAD_TEXT_BLOCKS = 2\n\n// Splits after the Nth `text` block. Non-text blocks (lists, headings,\n// images, CTAs…) are kept with whichever side they happen to fall on — the\n// design target is \"show two paragraphs of lead text\", so we count\n// paragraphs and let everything else ride along. If the input has fewer\n// than `n` text blocks, the entire input becomes lead and `trailingBlocks`\n// is empty.\nfunction splitAfterNthTextBlock(\n    blocks: OwidEnrichedGdocBlock[],\n    n: number\n): {\n    leadBlocks: OwidEnrichedGdocBlock[]\n    trailingBlocks: OwidEnrichedGdocBlock[]\n} {\n    let textCount = 0\n    for (let i = 0; i < blocks.length; i++) {\n        if (blocks[i].type === \"text\") {\n            textCount++\n            if (textCount >= n) {\n                return {\n                    leadBlocks: blocks.slice(0, i + 1),\n                    trailingBlocks: blocks.slice(i + 1),\n                }\n            }\n        }\n    }\n    return { leadBlocks: blocks, trailingBlocks: [] }\n}\n\nexport const ExpandableText = ({\n    blocks,\n    children,\n    containerType,\n    alwaysExpanded,\n    onReadMore,\n}: {\n    blocks: OwidEnrichedGdocBlock[]\n    children?: React.ReactNode\n    containerType?: Container\n    /** Render all blocks without a Read more toggle, e.g. for a deep-linked card. */\n    alwaysExpanded?: boolean\n    onReadMore?: () => void\n}) => {\n    const [expanded, setExpanded] = useState(false)\n    const isExpanded = alwaysExpanded || expanded\n    const { leadBlocks, trailingBlocks } = splitAfterNthTextBlock(\n        blocks,\n        MAX_LEAD_TEXT_BLOCKS\n    )\n\n    const hasMore = trailingBlocks.length > 0 || children\n\n    return (\n        <div className=\"expandable-text\">\n            <div\n                className={cx(\"expandable-text__lead\", {\n                    \"expandable-text__lead--collapsed\": !isExpanded,\n                })}\n            >\n                <ArticleBlocks\n                    blocks={leadBlocks}\n                    interactiveImages={false}\n                    containerType={containerType}\n                />\n                {hasMore && !isExpanded && (\n                    <>\n                        {\" \"}\n                        <button\n                            className=\"expandable-text__toggle\"\n                            onClick={() => {\n                                setExpanded(true)\n                                onReadMore?.()\n                            }}\n                        >\n                            Read more\n                        </button>\n                    </>\n                )}\n            </div>\n            {isExpanded && (\n                <div className={getLayout(\"expandable-text\", containerType)}>\n                    <ArticleBlocks\n                        blocks={trailingBlocks}\n                        interactiveImages={false}\n                        containerType={containerType}\n                    />\n                    <div className={getLayout(\"default\", containerType)}>\n                        {children}\n                    </div>\n                </div>\n            )}\n        </div>\n    )\n}\n","import { LatestType, OwidEnrichedGdocBlock } from \"@ourworldindata/types\"\nimport AvatarByline from \"../gdocs/components/AvatarByline.js\"\nimport { ExpandableText } from \"./ExpandableText.js\"\nimport { LatestHitMetadata } from \"./LatestHitMetadata.js\"\nimport { announcementContentTitleId } from \"./latestUtils.js\"\n\n/** Inner content of an announcement card in the /latest feed\n * (Algolia-backed). Always needs a wrapper that supplies the\n * AttachmentsContext and surrounding chrome — it is not a standalone\n * component on its own. <ExpandableText> truncates with a Read more toggle\n * unless isExpanded says the reader came looking for this kind of\n * announcement specifically. The standalone announcement page is a different\n * component (gdocs/pages/Announcement.tsx), built like the data insight\n * page. */\nexport const AnnouncementContent = ({\n    title,\n    latestType,\n    tags,\n    slug,\n    publishedAt,\n    authors,\n    authorRoles,\n    body,\n    isExpanded,\n    selectedTopic,\n    onReadMore,\n}: {\n    title: string\n    latestType?: LatestType\n    tags: string[]\n    slug: string\n    publishedAt: Date | string | null\n    authors: string[]\n    authorRoles?: Record<string, string>\n    body: OwidEnrichedGdocBlock[]\n    isExpanded?: boolean\n    selectedTopic?: string\n    onReadMore?: () => void\n}) => {\n    const titleId = announcementContentTitleId(slug)\n\n    // Keeps its class: the SCSS uses it as a hook to reorder the byline among\n    // the expanded announcement's trailing blocks.\n    const authorByline = authors.length > 0 && (\n        <AvatarByline\n            className=\"announcement-content__authors\"\n            authors={authors}\n            authorRoles={authorRoles}\n        />\n    )\n\n    return (\n        <div className=\"announcement-content\">\n            <LatestHitMetadata\n                latestType={latestType}\n                tags={tags}\n                publishedAt={publishedAt}\n                selectedTopic={selectedTopic}\n            />\n            <h2\n                id={titleId}\n                className=\"announcement-content__title subtitle-2-bold\"\n            >\n                {title}\n            </h2>\n            <ExpandableText\n                blocks={body}\n                containerType=\"latest-announcement\"\n                alwaysExpanded={isExpanded}\n                onReadMore={onReadMore}\n            >\n                {authorByline}\n            </ExpandableText>\n        </div>\n    )\n}\n","import { PageChronologicalAnnouncementRecord } from \"@ourworldindata/types\"\nimport cx from \"clsx\"\nimport { AttachmentsContext } from \"../gdocs/AttachmentsContext.js\"\nimport { AnnouncementContent } from \"./AnnouncementContent.js\"\nimport {\n    LATEST_HIT_GRID_CLASSES,\n    announcementContentTitleId,\n    makeAttachments,\n} from \"./latestUtils.js\"\nimport { useLatestContext } from \"./LatestContext.js\"\n\nexport const LatestAnnouncementHit = ({\n    hit,\n    selectedTopic,\n    position,\n    isExpanded,\n}: {\n    hit: PageChronologicalAnnouncementRecord\n    selectedTopic?: string\n    position: number\n    isExpanded: boolean\n}) => {\n    const { analytics } = useLatestContext()\n    return (\n        <AttachmentsContext.Provider value={makeAttachments(hit)}>\n            <article\n                id={hit.slug}\n                aria-labelledby={announcementContentTitleId(hit.slug)}\n                className={cx(\n                    \"latest-announcement-hit\",\n                    LATEST_HIT_GRID_CLASSES\n                )}\n            >\n                <AnnouncementContent\n                    title={hit.title}\n                    latestType={hit.latestType}\n                    tags={hit.tags ?? []}\n                    slug={hit.slug}\n                    publishedAt={hit.date}\n                    authors={hit.authors}\n                    authorRoles={hit.authorRoles}\n                    body={hit.body}\n                    selectedTopic={selectedTopic}\n                    onReadMore={() =>\n                        analytics.logLatestAnnouncementExpand(hit, position)\n                    }\n                    isExpanded={isExpanded}\n                />\n            </article>\n        </AttachmentsContext.Provider>\n    )\n}\n","import {\n    formatAuthors,\n    getPrefixedGdocPath,\n    OwidGdocType,\n} from \"@ourworldindata/utils\"\nimport { PageChronologicalAnnouncementRecord } from \"@ourworldindata/types\"\nimport cx from \"clsx\"\nimport { AttachmentsContext } from \"../gdocs/AttachmentsContext.js\"\nimport Image from \"../gdocs/components/Image.js\"\nimport { ArticleBlocks } from \"../gdocs/components/ArticleBlocks.js\"\nimport { LatestHitMetadata } from \"./LatestHitMetadata.js\"\nimport {\n    LATEST_HIT_GRID_CLASSES,\n    findThumbnailImageBlock,\n    makeAttachments,\n} from \"./latestUtils.js\"\nimport { useLatestContext } from \"./LatestContext.js\"\nimport { useIsLikelyBaked } from \"./latestHooks.js\"\nimport AvatarByline from \"../gdocs/components/AvatarByline.js\"\nimport CopyLinkButton from \"../gdocs/components/CopyLinkButton.js\"\n\n/** Compact cards link to the announcement page. Expanded cards render the\n * full update with independent body and author links — and so, being that\n * page's content rather than a link to it, don't wait on its bake. */\nexport const LatestDataUpdateHit = ({\n    hit,\n    selectedTopic,\n    position,\n    isExpanded,\n    showCopyLink,\n}: {\n    hit: PageChronologicalAnnouncementRecord\n    selectedTopic?: string\n    position: number\n    isExpanded: boolean\n    showCopyLink: boolean\n}) => {\n    const { analytics } = useLatestContext()\n    const announcementHref = getPrefixedGdocPath(\"\", {\n        slug: hit.slug,\n        content: { type: OwidGdocType.Announcement },\n    })\n    const isLikelyBaked = useIsLikelyBaked(hit)\n    const firstImage = findThumbnailImageBlock(hit.body)\n    const otherBlocks = hit.body.filter((block) => block !== firstImage)\n    const titleId = `latest-hit-${hit.slug}-title`\n    const Card = isExpanded ? \"div\" : \"a\"\n\n    // Only the compact card's destination depends on this publish's bake.\n    if (!isExpanded && !isLikelyBaked) return null\n\n    return (\n        <AttachmentsContext.Provider value={makeAttachments(hit)}>\n            <article\n                id={hit.slug}\n                aria-labelledby={titleId}\n                className={cx(\n                    \"latest-data-update-hit\",\n                    LATEST_HIT_GRID_CLASSES\n                )}\n            >\n                <LatestHitMetadata\n                    latestType={hit.latestType}\n                    tags={hit.tags}\n                    publishedAt={hit.date}\n                    selectedTopic={selectedTopic}\n                />\n                <Card\n                    href={isExpanded ? undefined : announcementHref}\n                    aria-labelledby={isExpanded ? undefined : titleId}\n                    onClick={\n                        isExpanded\n                            ? undefined\n                            : () =>\n                                  analytics.logLatestResultClick(hit, position)\n                    }\n                    className={cx(\n                        \"latest-data-update-hit__card grid grid-cols-8\",\n                        {\n                            \"latest-data-update-hit__card--collapsed\":\n                                !isExpanded,\n                        }\n                    )}\n                >\n                    {firstImage && (\n                        <Image\n                            {...firstImage}\n                            className=\"latest-data-update-hit__image span-cols-3\"\n                            containerType=\"latest-article\"\n                            shouldLightbox={false}\n                        />\n                    )}\n                    <div\n                        className={cx(\n                            \"latest-data-update-hit__content span-cols-5\",\n                            {\n                                \"latest-data-update-hit__content--collapsed\":\n                                    !isExpanded,\n                            }\n                        )}\n                    >\n                        <h2\n                            id={titleId}\n                            className=\"latest-data-update-hit__title body-1-bold\"\n                        >\n                            {hit.title}\n                        </h2>\n                        {isExpanded ? (\n                            <AvatarByline\n                                className=\"latest-data-update-hit__byline\"\n                                authors={hit.authors}\n                                authorRoles={hit.authorRoles}\n                            />\n                        ) : (\n                            <p className=\"latest-data-update-hit__authors\">\n                                {formatAuthors(hit.authors)}\n                            </p>\n                        )}\n                        <div className=\"latest-data-update-hit__blocks\">\n                            <ArticleBlocks\n                                blocks={otherBlocks}\n                                shouldRenderLinks={isExpanded}\n                                interactiveImages={isExpanded}\n                            />\n                        </div>\n                        {showCopyLink && (\n                            <CopyLinkButton\n                                path={announcementHref}\n                                trackNote=\"latest_data_update_copy_link\"\n                                className=\"latest-data-update-hit__copy-link\"\n                                variant=\"text\"\n                            />\n                        )}\n                    </div>\n                </Card>\n            </article>\n        </AttachmentsContext.Provider>\n    )\n}\n","import { OwidGdocType } from \"@ourworldindata/utils\"\nimport { PageChronologicalRecord } from \"@ourworldindata/types\"\nimport { LatestArticleHit } from \"./LatestArticleHit.js\"\nimport { LatestDataInsightHit } from \"./LatestDataInsightHit.js\"\nimport { LatestAnnouncementHit } from \"./LatestAnnouncementHit.js\"\nimport { LatestDataUpdateHit } from \"./LatestDataUpdateHit.js\"\nimport { match } from \"ts-pattern\"\n\ntype LatestHitProps = {\n    hit: PageChronologicalRecord\n    selectedTopic?: string\n    position: number\n    isExpanded: boolean\n    isTypeFiltered: boolean\n}\n\n/** Dispatches to the appropriate per-type hit card. */\nexport const LatestHit = ({\n    hit,\n    selectedTopic,\n    position,\n    isExpanded,\n    isTypeFiltered,\n}: LatestHitProps) => {\n    return match(hit)\n        .with({ type: OwidGdocType.Article }, (hit) => (\n            <LatestArticleHit\n                hit={hit}\n                selectedTopic={selectedTopic}\n                position={position}\n            />\n        ))\n        .with({ type: OwidGdocType.DataInsight }, (hit) => (\n            <LatestDataInsightHit\n                hit={hit}\n                selectedTopic={selectedTopic}\n                position={position}\n                isExpanded={isExpanded}\n            />\n        ))\n        .with(\n            { type: OwidGdocType.Announcement, latestType: \"data-update\" },\n            (hit) => (\n                <LatestDataUpdateHit\n                    hit={hit}\n                    selectedTopic={selectedTopic}\n                    position={position}\n                    isExpanded={isExpanded}\n                    showCopyLink={isExpanded && isTypeFiltered}\n                />\n            )\n        )\n        .with({ type: OwidGdocType.Announcement }, (hit) => (\n            <LatestAnnouncementHit\n                hit={hit}\n                selectedTopic={selectedTopic}\n                position={position}\n                isExpanded={isExpanded}\n            />\n        ))\n        .with(\n            { type: OwidGdocType.TopicPage },\n            { type: OwidGdocType.LinearTopicPage },\n            () => null\n        )\n        .exhaustive()\n}\n","import cx from \"clsx\"\nimport { NewsletterSubscriptionContext } from \"./newsletter.js\"\nimport { NewsletterSignup } from \"./NewsletterSubscription.js\"\nimport { OwidSocials } from \"./OwidSocials.js\"\n\nexport const NewsletterSignupBlock = ({\n    context,\n    className,\n}: {\n    context: NewsletterSubscriptionContext\n    className?: string\n}) => {\n    return (\n        <NewsletterSignup\n            className={cx(\"newsletter-signup\", className)}\n            context={context}\n        >\n            <OwidSocials context={context} />\n        </NewsletterSignup>\n    )\n}\n","import cx from \"clsx\"\nimport { NewsletterSignupBlock } from \"../NewsletterSignupBlock.js\"\nimport { NewsletterSubscriptionContext } from \"../newsletter.js\"\nimport TopicNewsletterCard from \"../TopicNewsletterCard.js\"\nimport { hasTopicNewsletterCard } from \"../topicNewsletter.js\"\nimport { LATEST_NEWSLETTER_SIGNUP_CLASSES } from \"./latestUtils.js\"\n\n/**\n * The /latest sidebar: the full signup block, or the topic card once a topic\n * area is selected. Format-only filters (`?type=…`) carry no topic area.\n */\nexport const LatestNewsletterSlot = ({ topicArea }: { topicArea?: string }) =>\n    hasTopicNewsletterCard(topicArea) ? (\n        <TopicNewsletterCard\n            className={cx(\n                \"topic-newsletter-card--latest\",\n                LATEST_NEWSLETTER_SIGNUP_CLASSES\n            )}\n            topicArea={topicArea}\n            placement=\"latest\"\n            variant=\"narrow\"\n        />\n    ) : (\n        <NewsletterSignupBlock\n            className={LATEST_NEWSLETTER_SIGNUP_CLASSES}\n            context={NewsletterSubscriptionContext.Latest}\n        />\n    )\n","import { LatestNewsletterSlot } from \"./LatestNewsletterSlot.js\"\nimport { LATEST_HIT_GRID_CLASSES } from \"./latestUtils.js\"\n\nconst LatestHitSkeleton = () => (\n    <div\n        className={`latest-hit-skeleton animate-pulse ${LATEST_HIT_GRID_CLASSES}`}\n        aria-hidden=\"true\"\n    >\n        <div className=\"latest-hit-skeleton__metadata\">\n            <div className=\"latest-hit-skeleton__metadata-bar\" />\n            <div className=\"latest-hit-skeleton__metadata-date\" />\n        </div>\n        <div className=\"latest-hit-skeleton__card grid grid-cols-8\">\n            <div className=\"latest-hit-skeleton__image span-cols-3\" />\n            <div className=\"latest-hit-skeleton__content span-cols-5\">\n                <div className=\"latest-hit-skeleton__title\" />\n                <div className=\"latest-hit-skeleton__byline\" />\n                <div className=\"latest-hit-skeleton__excerpt-line\" />\n                <div className=\"latest-hit-skeleton__excerpt-line latest-hit-skeleton__excerpt-line--short\" />\n            </div>\n        </div>\n    </div>\n)\n\nexport const LatestSearchSkeleton = ({ topicArea }: { topicArea?: string }) => (\n    <>\n        <LatestHitSkeleton />\n        <LatestHitSkeleton />\n        <LatestNewsletterSlot topicArea={topicArea} />\n        <LatestHitSkeleton />\n    </>\n)\n","import cx from \"clsx\"\nimport { Button } from \"@ourworldindata/components\"\nimport { useSpinDelay } from \"@ourworldindata/utils\"\n\nexport function SearchHorizontalDivider({\n    className,\n    hasButton,\n    isLoading,\n    onClick,\n}: {\n    className?: string\n    hasButton?: boolean\n    isLoading?: boolean\n    onClick?: () => void\n}) {\n    const showLoadingText = useSpinDelay(!!isLoading, {\n        delay: 200,\n        ssr: false,\n    })\n\n    return (\n        <div\n            className={cx(\n                \"search-horizontal-divider\",\n                {\n                    \"search-horizontal-divider--has-button\": hasButton,\n                },\n                className\n            )}\n        >\n            {hasButton && (\n                <Button\n                    className=\"search-horizontal-divider__button\"\n                    theme=\"solid-light-blue\"\n                    icon={null}\n                    text={showLoadingText ? \"Loading...\" : \"Show more\"}\n                    onClick={onClick}\n                    disabled={isLoading || showLoadingText}\n                    ariaLabel=\"Load more results\"\n                />\n            )}\n        </div>\n    )\n}\n","import React from \"react\"\nimport { IconDefinition, faSearch } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\n\nexport const SearchNoResults = ({\n    heading = \"There are no results for this query.\",\n    subtitle = (\n        <p className=\"body-3-medium\">\n            Try searching for something else or removing some filters.\n        </p>\n    ),\n    className = \"span-cols-12 col-start-2\",\n    icon = faSearch,\n}: {\n    heading?: string\n    subtitle?: React.ReactNode\n    className?: string\n    icon?: IconDefinition\n} = {}) => {\n    return (\n        <div className={`search-no-results ${className}`}>\n            <FontAwesomeIcon className=\"search-no-results__icon\" icon={icon} />\n            <h2 className=\"body-1-regular\">{heading}</h2>\n            {subtitle}\n        </div>\n    )\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\"\nimport cx from \"clsx\"\nimport { useSearchParams } from \"react-router-dom-v5-compat\"\nimport {\n    LATEST_TYPE_VALUES,\n    LatestState,\n    LatestType,\n    PageChronologicalRecord,\n    TagGraphRoot,\n} from \"@ourworldindata/types\"\nimport { LiteClient } from \"algoliasearch/lite\"\nimport { useTagGraphTopics } from \"../search/searchHooks.js\"\nimport {\n    useAreFreshProbesSettled,\n    useInfiniteLatestPages,\n    getStickyLayout,\n    useRevealOnScrollUp,\n    useLatestAnalytics,\n    useLatestStickyFiltersArm,\n} from \"./latestHooks.js\"\nimport { LatestTopicFacets } from \"./LatestTopicFacets.js\"\nimport { LatestPageHeader } from \"./LatestPageHeader.js\"\nimport {\n    DEFAULT_LATEST_FEED_VIEW,\n    LATEST_FACETS_CONTAINER_CLASSES,\n    LATEST_FILTERS_DIVIDER_CLASSES,\n    LATEST_HIT_GRID_CLASSES,\n    LatestFeedView,\n    hasViewToggle,\n    sortTopicAreasByPopularity,\n} from \"./latestUtils.js\"\nimport { LatestViewToggle } from \"./LatestViewToggle.js\"\nimport {\n    searchParamsToState,\n    stateToSearchParams,\n    urlNeedsSanitization,\n} from \"./latestState.js\"\nimport { LatestHit } from \"./LatestHit.js\"\nimport { LATEST_STICKY_FILTERS_ARMS, OwidGdocType } from \"@ourworldindata/utils\"\nimport { LatestNewsletterSlot } from \"./LatestNewsletterSlot.js\"\nimport { LatestSearchSkeleton } from \"./LatestSearchSkeleton.js\"\nimport { LatestContext } from \"./LatestContext.js\"\nimport { SiteAnalytics } from \"../SiteAnalytics.js\"\nimport { SearchHorizontalDivider } from \"../search/SearchHorizontalDivider.js\"\nimport { SearchNoResults } from \"../search/SearchNoResults.js\"\nimport { PoweredBy } from \"react-instantsearch\"\nimport { getPrefersReducedMotion } from \"@ourworldindata/components\"\n\n/**\n * If the facets are currently pinned, scroll so they sit exactly at their\n * pinned position with the content below starting right underneath — the\n * reader just changed a filter from the pinned bar and expects to see the\n * new results from the top, not wherever they had scrolled to. No-op when\n * the bar isn't pinned (at the top of the page, or in the flow).\n */\nfunction scrollToTopOfPinnedElement(el: HTMLElement): void {\n    if (getComputedStyle(el).position !== \"sticky\") return\n    const layout = getStickyLayout(el)\n    if (el.getBoundingClientRect().top > layout.stickyTop) return\n    window.scrollTo({\n        top: layout.layoutTop - layout.stickyTop,\n        behavior: getPrefersReducedMotion() ? \"auto\" : \"smooth\",\n    })\n}\n\nconst analytics = new SiteAnalytics()\n\nexport const LatestSearch = ({\n    topicTagGraph,\n    liteSearchClient,\n}: {\n    topicTagGraph: TagGraphRoot\n    liteSearchClient: LiteClient\n}) => {\n    const [searchParams, setSearchParams] = useSearchParams()\n\n    const { allAreas: tagGraphAreas } = useTagGraphTopics(topicTagGraph)\n    const allAreas = useMemo(\n        () => sortTopicAreasByPopularity(tagGraphAreas),\n        [tagGraphAreas]\n    )\n\n    const state = useMemo(\n        () => searchParamsToState(searchParams, allAreas),\n        [searchParams, allAreas]\n    )\n    const { topics, latestType } = state\n\n    // Expanded/Compact for type filters that offer the toggle. Local, not in\n    // the URL, and shared by all such filters. Deliberately never reset:\n    // only the reader's own click changes it, so it can't change under the\n    // cards that stay on screen while the next results load\n    // (keepPreviousData) the way a reset-on-filter-change would.\n    const [view, setView] = useState<LatestFeedView>(DEFAULT_LATEST_FEED_VIEW)\n    const shouldShowViewToggle = hasViewToggle(latestType)\n\n    useLatestAnalytics(state, analytics)\n\n    // Sticky filters experiment. The arm's layout is pure CSS keyed off the\n    // body class; the reveal-on-scroll-up arm additionally needs JS to\n    // reveal the facets container when the reader scrolls up.\n    const stickyFiltersArm = useLatestStickyFiltersArm()\n    const facetsContainerRef = useRef<HTMLDivElement>(null)\n    const areFiltersRevealed = useRevealOnScrollUp(\n        stickyFiltersArm === LATEST_STICKY_FILTERS_ARMS.revealOnScrollUp,\n        facetsContainerRef\n    )\n\n    // Sanitize URL: drop unknown params (e.g. legacy `?topic=Health` from old\n    // /data-insights links), invalid topic names, and invalid `type` values.\n    // Mirrors /search behavior in site/search/searchState.ts.\n    useEffect(() => {\n        if (urlNeedsSanitization(searchParams, state)) {\n            setSearchParams(stateToSearchParams(state), { replace: true })\n        }\n    }, [searchParams, state, setSearchParams])\n\n    const updateParams = (updater: (current: LatestState) => LatestState) => {\n        setSearchParams(stateToSearchParams(updater(state)))\n        if (facetsContainerRef.current)\n            scrollToTopOfPinnedElement(facetsContainerRef.current)\n    }\n\n    const onTopicsChange = (newTopics: string[]) => {\n        updateParams((s) => ({ ...s, topics: newTopics }))\n    }\n\n    const onLatestTypeChange = (newType: LatestType | null) => {\n        updateParams((s) => ({ ...s, latestType: newType }))\n    }\n\n    const clearAllFilters = () => {\n        updateParams(() => ({ topics: [], latestType: null }))\n    }\n\n    const {\n        hits,\n        tagFacetCounts,\n        latestTypeFacetCounts,\n        fetchNextPage,\n        hasNextPage,\n        isFetchingNextPage,\n        isLoading: arePagesLoading,\n        data,\n    } = useInfiniteLatestPages({\n        topics,\n        latestType,\n        liteSearchClient,\n    })\n\n    // The feed also counts as loading until the first page's bake probes have\n    // settled, so it renders in one commit with its composition final — see\n    // \"Bake probes\" in latestHooks.ts.\n    const areProbesSettled = useAreFreshProbesSettled(\n        data?.pages[0]?.response.hits ?? []\n    )\n    const isLoading = arePagesLoading || !areProbesSettled\n\n    // Disable type options that would yield 0 results under the current\n    // topic selection. Never disable the active type.\n    const disabledTypes = useMemo(() => {\n        const disabled = new Set<LatestType>()\n        for (const value of LATEST_TYPE_VALUES) {\n            if (value === latestType) continue\n            if ((latestTypeFacetCounts[value] ?? 0) === 0) disabled.add(value)\n        }\n        return disabled\n    }, [latestType, latestTypeFacetCounts])\n\n    // Disable topics that would yield 0 results under the current type\n    // filter. Never disable a selected topic, so it can be deselected.\n    const disabledTopics = useMemo(() => {\n        const disabled = new Set<string>()\n        for (const area of allAreas) {\n            if (topics.includes(area)) continue\n            if ((tagFacetCounts[area] ?? 0) === 0) disabled.add(area)\n        }\n        return disabled\n    }, [allAreas, tagFacetCounts, topics])\n\n    // Read from the URL, not from the DOM: some cards only render once\n    // they're expanded (indexed but not baked yet), and this is what expands them.\n    const hashSlug = window.location.hash.slice(1)\n\n    // After the first data load, scroll to the URL hash anchor (e.g.\n    // /latest#some-slug) so that links from the homepage land on the\n    // right card.\n    const didScrollToHash = useRef(false)\n    useEffect(() => {\n        if (didScrollToHash.current || isLoading || hits.length === 0) return\n        if (!hashSlug) return\n        const el = document.getElementById(hashSlug)\n        if (el) {\n            el.scrollIntoView()\n            didScrollToHash.current = true\n        }\n        // Depend on `hits.length` rather than `hits` — `hits` is a fresh\n        // array every render (from `flatMap`) and would re-fire the effect\n        // needlessly.\n    }, [isLoading, hits.length, hashSlug])\n\n    // Cards are judged by the type filter recorded on the *displayed*\n    // results, not the URL's: during a filter change the previous results\n    // stay on screen while the next page loads (keepPreviousData), and the\n    // incoming type would flash them expanded/collapsed. Only the type\n    // filter affects how a card renders; topics only change which hits\n    // come back.\n    const displayedLatestType = data?.pages[0]?.latestType ?? null\n    const activeView = hasViewToggle(displayedLatestType) ? view : undefined\n\n    // Insights expand only in their type-filtered feed, which defaults to\n    // Expanded — so a deep link already lands on an open card and needs no\n    // case of its own. Other announcements expand for a deep link; data\n    // updates also expand under their type filter.\n    const isExpanded = (hit: PageChronologicalRecord): boolean => {\n        if (hit.type === OwidGdocType.DataInsight)\n            return activeView === \"expanded\"\n        return hit.slug === hashSlug || displayedLatestType === \"data-update\"\n    }\n\n    return (\n        <LatestContext.Provider value={{ analytics }}>\n            <LatestPageHeader />\n            <div\n                ref={facetsContainerRef}\n                className={cx(LATEST_FACETS_CONTAINER_CLASSES, {\n                    \"latest-search__facets-container--revealed\":\n                        areFiltersRevealed,\n                })}\n            >\n                <LatestTopicFacets\n                    topics={allAreas}\n                    selectedTopics={topics}\n                    onTopicsChange={onTopicsChange}\n                    selectedType={latestType}\n                    onLatestTypeChange={onLatestTypeChange}\n                    disabledTypes={disabledTypes}\n                    disabledTopics={disabledTopics}\n                />\n            </div>\n            <hr className={LATEST_FILTERS_DIVIDER_CLASSES} />\n            {shouldShowViewToggle && (\n                <LatestViewToggle view={view} onViewChange={setView} />\n            )}\n            {isLoading ? (\n                <LatestSearchSkeleton topicArea={topics[0]} />\n            ) : hits.length === 0 ? (\n                <>\n                    <SearchNoResults\n                        className={`latest-search__no-results ${LATEST_HIT_GRID_CLASSES}`}\n                        subtitle={\n                            <p className=\"body-3-medium\">\n                                Try removing some filters or{\" \"}\n                                <button\n                                    className=\"latest-search__reset-button\"\n                                    onClick={clearAllFilters}\n                                >\n                                    reset filters\n                                </button>\n                                .\n                            </p>\n                        }\n                    />\n                    <LatestNewsletterSlot topicArea={topics[0]} />\n                </>\n            ) : (\n                <>\n                    {hits.slice(0, 2).map((hit, i) => (\n                        <LatestHit\n                            key={hit.objectID}\n                            hit={hit}\n                            selectedTopic={topics[0]}\n                            position={i + 1}\n                            isExpanded={isExpanded(hit)}\n                            isTypeFiltered={displayedLatestType !== null}\n                        />\n                    ))}\n                    {/* Always render the newsletter slot — with 0 or 1 hits it\n                        falls below whatever cards exist, which is the\n                        intended layout. */}\n                    <LatestNewsletterSlot topicArea={topics[0]} />\n                    {hits.slice(2).map((hit, i) => (\n                        <LatestHit\n                            key={hit.objectID}\n                            hit={hit}\n                            selectedTopic={topics[0]}\n                            position={i + 3}\n                            isExpanded={isExpanded(hit)}\n                            isTypeFiltered={displayedLatestType !== null}\n                        />\n                    ))}\n                    {hasNextPage && (\n                        <SearchHorizontalDivider\n                            className=\"span-cols-8 col-start-2 span-md-cols-12 col-md-start-2 span-sm-cols-14 col-sm-start-1\"\n                            hasButton\n                            isLoading={isFetchingNextPage}\n                            onClick={() => fetchNextPage()}\n                        />\n                    )}\n                </>\n            )}\n            <PoweredBy\n                className=\"col-start-2 span-cols-12\"\n                style={{ width: \"200px\", marginTop: \"32px\" }}\n            />\n        </LatestContext.Provider>\n    )\n}\n","import { TagGraphRoot } from \"@ourworldindata/types\"\nimport { LatestSearch } from \"./LatestSearch.js\"\nimport { getLiteSearchClient } from \"../search/searchClients.js\"\nimport { SiteQueryClientProvider } from \"../SiteQueryClientProvider.js\"\n\nexport const LatestSearchWrapper = ({\n    topicTagGraph,\n}: {\n    topicTagGraph: TagGraphRoot\n}) => {\n    const liteSearchClient = getLiteSearchClient()\n\n    return (\n        <SiteQueryClientProvider>\n            <LatestSearch\n                topicTagGraph={topicTagGraph}\n                liteSearchClient={liteSearchClient}\n            />\n        </SiteQueryClientProvider>\n    )\n}\n","import { useState } from \"react\"\nimport { MinimalExplorerInfo } from \"@ourworldindata/types\"\nimport { EXPLORER_DYNAMIC_THUMBNAIL_URL } from \"../settings/clientSettings.mjs\"\nimport { faHeartBroken } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { EXPLORERS_ROUTE_FOLDER } from \"@ourworldindata/explorer\"\n\nfunction ExplorerIndexPageCard(props: {\n    baseUrl: string\n    explorer: MinimalExplorerInfo\n}) {\n    const { baseUrl, explorer } = props\n    const [hasError, setHasError] = useState(false)\n    return (\n        <li key={explorer.slug}>\n            <a\n                className=\"explorer-index-page__card\"\n                href={`${baseUrl}/${EXPLORERS_ROUTE_FOLDER}/${explorer.slug}`}\n            >\n                {!hasError ? (\n                    <img\n                        width=\"850\"\n                        height=\"600\"\n                        loading=\"lazy\"\n                        onError={() => setHasError(true)}\n                        src={`${EXPLORER_DYNAMIC_THUMBNAIL_URL}/${explorer.slug}.png`}\n                    />\n                ) : (\n                    <div className=\"explorer-index-page__card-error\">\n                        <FontAwesomeIcon icon={faHeartBroken} />\n                        <span>Explorer preview not available</span>\n                    </div>\n                )}\n                <h2>{explorer.title}</h2>\n                <p>{explorer.subtitle}</p>\n            </a>\n        </li>\n    )\n}\n\nexport interface ExplorerIndexPageProps {\n    baseUrl: string\n    explorers: MinimalExplorerInfo[]\n}\n\nexport function ExplorerIndex(props: ExplorerIndexPageProps) {\n    const { baseUrl, explorers } = props\n    return (\n        <>\n            <header className=\"explorer-index-page__header grid grid-cols-12-full-width span-cols-14\">\n                <h1 className=\"h1-semibold span-cols-12 col-start-2 collection-title\">\n                    Data Explorers\n                </h1>\n                <p className=\"span-cols-8 col-start-2 span-md-cols-12 col-md-start-2 body-2-regular collection-explanation\">\n                    Our data explorers gather many indicators together to\n                    provide comprehensive overviews of their topics.\n                </p>\n            </header>\n            <ul className=\"explorer-index-page-list span-cols-12 col-start-2 grid grid-cols-4 grid-md-cols-2 grid-sm-cols-1\">\n                {explorers.map((explorer) => (\n                    <ExplorerIndexPageCard\n                        baseUrl={baseUrl}\n                        explorer={explorer}\n                        key={explorer.slug}\n                    />\n                ))}\n            </ul>\n        </>\n    )\n}\n\nexport const __OWID_EXPLORER_INDEX_PAGE_PROPS =\n    \"__OWID_EXPLORER_INDEX_PAGE_PROPS\"\n","import { dayjs, slugify } from \"@ourworldindata/utils\"\nimport { ReactPortal } from \"react\"\nimport * as React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport {\n    Action,\n    DATE_FORMAT,\n    getPreferenceValue,\n    getTodayDate,\n    Preference,\n    PreferenceType,\n} from \"../cookiePreferences.js\"\nimport { faCheck } from \"@fortawesome/free-solid-svg-icons\"\nimport { SiteAnalytics } from \"../SiteAnalytics.js\"\nimport { Button, Checkbox } from \"@ourworldindata/components\"\n\nconst ANALYTICS_ACTION = \"cookie_preferences\"\nconst analytics = new SiteAnalytics()\n\n// Note: CookiePreferences has been designed to be rendered through a portal\n// only. When this becomes limiting (e.g. cookies preferences rendered both in\n// the content and in the cookie bar), then at least two things need to be taken\n// care of:\n// - unique IDs for input elements in CookiePreference\n// - support for in-place rendering\n\nexport const CookiePreference = ({\n    title,\n    name,\n    consent,\n    disabled,\n    toggleConsent,\n    children,\n}: {\n    title: string\n    name: string\n    consent: boolean\n    disabled?: boolean\n    toggleConsent?: any\n    children: React.ReactNode\n}) => {\n    const id = `cookie-preference-${slugify(name)}`\n\n    const onChange = () => {\n        toggleConsent()\n        analytics.logSiteClick(\n            ANALYTICS_ACTION,\n            `${consent ? \"Refuse\" : \"Accept\"} ${name}`\n        )\n    }\n\n    return (\n        <div className=\"cookie-preference\">\n            <Checkbox\n                id={id}\n                checked={consent}\n                onChange={onChange}\n                label={title}\n                data-test={`${name}-preference`}\n                disabled={disabled}\n            />\n            <div className=\"description\">{children}</div>\n        </div>\n    )\n}\n\nexport const CookiePreferences = ({\n    preferences,\n    date,\n    dispatch,\n}: {\n    preferences: Preference[]\n    date?: string\n    dispatch: any\n}): ReactPortal | null => {\n    const cookiePreferencesDomSlot = document.querySelector(\n        // This class is referenced in ArticleBlock.tsx\n        // If changed or removed, update it there also.\n        \".wp-block-cookie-preferences\"\n    )\n    if (!cookiePreferencesDomSlot) return null\n\n    return ReactDOM.createPortal(\n        <div\n            data-test=\"cookie-preferences\"\n            id=\"cookie-preferences\"\n            className=\"cookie-preferences\"\n        >\n            <h2 id=\"cookie-preferences\">Cookie Preferences</h2>\n            <CookiePreference\n                title=\"Necessary cookies\"\n                name=\"necessary\"\n                consent={true}\n                disabled={true}\n            >\n                The website cannot function properly without these cookies. If\n                you wish, you can disable cookies completely in your browser\n                preferences.\n            </CookiePreference>\n            <CookiePreference\n                title=\"Optional cookies\"\n                name=\"analytics\"\n                consent={getPreferenceValue(\n                    PreferenceType.Analytics,\n                    preferences\n                )}\n                toggleConsent={() =>\n                    dispatch({\n                        type: Action.TogglePreference,\n                        payload: {\n                            preferenceType: PreferenceType.Analytics,\n                            date: getTodayDate(),\n                        },\n                    })\n                }\n            >\n                With your consent we use cookies to better understand how you\n                interact with our website. This helps us prioritize our work,\n                improve our navigation and search, and demonstrate the reach of\n                our work. As a non-profit organization we take your privacy\n                seriously and do not sell your data to any third parties.\n            </CookiePreference>\n            {date ? (\n                <div className=\"last-updated\">\n                    Preferences last updated:{\" \"}\n                    {dayjs(date, DATE_FORMAT).format(\"MMMM D, YYYY\")}\n                </div>\n            ) : (\n                <Button\n                    theme=\"solid-vermillion\"\n                    ariaLabel=\"Save cookie preferences\"\n                    onClick={() =>\n                        dispatch({\n                            type: Action.Persist,\n                            payload: { date: getTodayDate() },\n                        })\n                    }\n                    text=\"Save preferences\"\n                    icon={faCheck}\n                    iconPosition=\"left\"\n                    data-track-note={ANALYTICS_ACTION}\n                />\n            )}\n        </div>,\n        cookiePreferencesDomSlot\n    )\n}\n","import classnames from \"clsx\"\nimport { useState } from \"react\"\nimport { useMediaQuery, useTimeout } from \"usehooks-ts\"\nimport { faCheck } from \"@fortawesome/free-solid-svg-icons\"\nimport { Button } from \"@ourworldindata/components\"\nimport { Action, getTodayDate } from \"./cookiePreferences.js\"\nimport { SMALL_BREAKPOINT_MEDIA_QUERY } from \"./SiteConstants.js\"\n\nexport const CookieNotice = ({\n    accepted,\n    outdated,\n    dispatch,\n}: {\n    accepted: boolean\n    outdated: boolean\n    dispatch: any\n}) => {\n    const [mounted, setMounted] = useState(false)\n    useTimeout(() => setMounted(true), 200)\n    const isSmallScreen = useMediaQuery(SMALL_BREAKPOINT_MEDIA_QUERY)\n\n    const actions = (\n        <div className=\"cookie-notice__actions\">\n            <Button\n                theme=\"outline-dark-blue\"\n                text=\"Reject optional cookies\"\n                icon={null}\n                onClick={() =>\n                    dispatch({\n                        type: Action.Reject,\n                        payload: { date: getTodayDate() },\n                    })\n                }\n                className=\"cookie-notice__button\"\n                dataTrackNote=\"cookie_notice\"\n            />\n            <Button\n                theme=\"solid-dark-blue\"\n                text=\"Accept optional cookies\"\n                icon={faCheck}\n                iconPosition=\"left\"\n                onClick={() =>\n                    dispatch({\n                        type: Action.Accept,\n                        payload: { date: getTodayDate() },\n                    })\n                }\n                className=\"cookie-notice__button\"\n                dataTrackNote=\"cookie_notice\"\n            />\n        </div>\n    )\n\n    return (\n        <div\n            className={classnames(\"cookie-notice\", {\n                open: mounted && (!accepted || outdated),\n            })}\n        >\n            <div className=\"cookie-notice__inner\">\n                {isSmallScreen ? (\n                    <>\n                        <p className=\"cookie-notice__text\">\n                            We use essential cookies to run the site; these\n                            can’t be disabled. Other optional cookies help us\n                            understand how our site is used and improve it for\n                            everyone.\n                        </p>\n                        <p className=\"cookie-notice__text\">\n                            Read more in our{\" \"}\n                            <a href=\"/privacy-policy\">Privacy Policy</a> or{\" \"}\n                            <a href=\"/cookie-notice#cookie-preferences\">\n                                manage preferences\n                            </a>\n                            .\n                        </p>\n                        {actions}\n                    </>\n                ) : (\n                    <>\n                        <div className=\"cookie-notice__header\">\n                            <div>\n                                <h2 className=\"cookie-notice__title\">\n                                    Cookies help us build a better website\n                                </h2>\n                                <p className=\"cookie-notice__text\">\n                                    We are a <strong>non-profit</strong> that\n                                    relies on reader{\" \"}\n                                    <a href=\"/donate\">donations</a>. We never\n                                    use ads on our website or sell user data.\n                                </p>\n                            </div>\n                            {actions}\n                        </div>\n                        <p className=\"cookie-notice__text\">\n                            We use a small number of <strong>cookies</strong>{\" \"}\n                            and similar technologies to{\" \"}\n                            <strong>make our website work</strong>. Some of\n                            these are essential and can't be switched off. Other{\" \"}\n                            <strong>optional cookies</strong> help us better\n                            understand <strong>how our website is used</strong>{\" \"}\n                            — by accepting these, you can help us improve our\n                            publication for everyone. Read more in our{\" \"}\n                            <a href=\"/privacy-policy\">Privacy Policy</a> or{\" \"}\n                            <a href=\"/cookie-notice#cookie-preferences\">\n                                manage your cookie settings\n                            </a>\n                            .\n                        </p>\n                    </>\n                )}\n            </div>\n        </div>\n    )\n}\n","import { useEffect, useMemo, useReducer } from \"react\"\nimport { set as setCookie } from \"es-cookie\"\nimport { CookiePreferences } from \"../site/blocks/CookiePreferences.js\"\nimport { CookieNotice } from \"../site/CookieNotice.js\"\nimport {\n    Action,\n    arePreferencesOutdated,\n    COOKIE_PREFERENCES_COOKIE_NAME,\n    defaultState,\n    getPreferenceValue,\n    POLICY_DATE,\n    PreferenceType,\n    serializeState,\n    State,\n    updatePreference,\n} from \"./cookiePreferences.js\"\nimport { SiteAnalytics } from \"./SiteAnalytics.js\"\nimport {\n    maybeSampleSession,\n    getSessionSampleRate,\n    updateSentryTags,\n    updateSentryUser,\n} from \"./SentryUtils.js\"\n\nconst analytics = new SiteAnalytics()\n\nexport const CookiePreferencesManager = ({\n    initialState,\n}: {\n    initialState: State\n}) => {\n    const [state, dispatch] = useReducer(reducer, initialState)\n\n    // Reset state\n    useEffect(() => {\n        if (arePreferencesOutdated(state.date, POLICY_DATE)) {\n            dispatch({ type: Action.Reset })\n        }\n    }, [state.date])\n\n    // Commit state\n    useEffect(() => {\n        if (state.date) {\n            setCookie(COOKIE_PREFERENCES_COOKIE_NAME, serializeState(state), {\n                expires: 365 * 3,\n            })\n        }\n    }, [state])\n\n    // Set GA consent\n    const analyticsConsent = useMemo(\n        () =>\n            getPreferenceValue(PreferenceType.Analytics, state.preferences)\n                ? \"granted\"\n                : \"denied\",\n        [state.preferences]\n    )\n    useEffect(() => {\n        analytics.updateGAConsentSettings({\n            analytics_storage: analyticsConsent,\n        })\n\n        updateSentryTags()\n        updateSentryUser()\n        const sampleRate = getSessionSampleRate()\n        maybeSampleSession(sampleRate)\n    }, [analyticsConsent])\n\n    return (\n        <div data-test-policy-date={POLICY_DATE} className=\"cookie-manager\">\n            <CookieNotice\n                accepted={!!state.date}\n                outdated={arePreferencesOutdated(state.date, POLICY_DATE)}\n                dispatch={dispatch}\n            />\n            <CookiePreferences\n                preferences={state.preferences}\n                date={state.date?.toString()}\n                dispatch={dispatch}\n            />\n        </div>\n    )\n}\n\nconst reducer = (\n    state: State,\n    { type: actionType, payload }: { type: Action; payload?: any }\n): State => {\n    switch (actionType) {\n        case Action.Accept: {\n            return {\n                date: payload.date,\n                preferences: updatePreference(\n                    PreferenceType.Analytics,\n                    true,\n                    state.preferences\n                ),\n            }\n        }\n        case Action.TogglePreference:\n            return {\n                date: payload.date,\n                preferences: updatePreference(\n                    payload.preferenceType,\n                    !getPreferenceValue(\n                        payload.preferenceType,\n                        state.preferences\n                    ),\n                    state.preferences\n                ),\n            }\n        case Action.Reset:\n            return defaultState\n        case Action.Persist:\n            return {\n                ...state,\n                date: payload.date,\n            }\n        case Action.Reject:\n            return {\n                date: payload.date,\n                preferences: updatePreference(\n                    PreferenceType.Analytics,\n                    false,\n                    state.preferences\n                ),\n            }\n        default:\n            return state\n    }\n}\n","import { createContext, useContext } from \"react\"\nimport { Filter } from \"@ourworldindata/types\"\n\nexport interface SearchAutocompleteContextType {\n    activeIndex: number\n    setActiveIndex: (index: number) => void\n    suggestions: Filter[]\n    setSuggestions: (suggestions: Filter[]) => void\n    showSuggestions: boolean\n    setShowSuggestions: (isOpen: boolean) => void\n    onSelectActiveItem: () => void\n    registerSelectionHandler: (\n        handler: (filter: Filter, index: number) => void\n    ) => void\n}\n\nexport const SearchAutocompleteContext = createContext<\n    SearchAutocompleteContextType | undefined\n>(undefined)\n\nexport function useSearchAutocomplete() {\n    const context = useContext(SearchAutocompleteContext)\n    if (context === undefined) {\n        throw new Error(\n            \"useSearchAutocomplete must be used within a SearchAutocompleteContextProvider\"\n        )\n    }\n    return context\n}\n","import { ReactNode, forwardRef, ForwardedRef, useRef } from \"react\"\nimport { SearchUrlParam } from \"@ourworldindata/types\"\nimport { useIsClient, useMediaQuery } from \"usehooks-ts\"\nimport { SMALL_BREAKPOINT_MEDIA_QUERY } from \"../SiteConstants.js\"\nimport {\n    isCurrentRef,\n    getSearchAutocompleteId,\n    getSearchAutocompleteItemId,\n    SEARCH_BASE_PATH,\n} from \"./searchUtils.js\"\nimport { useSearchAutocomplete } from \"./SearchAutocompleteContext.js\"\n\nexport const SearchInput = forwardRef(\n    (\n        {\n            value,\n            setLocalQuery,\n            setGlobalQuery,\n            onBackspaceEmpty,\n            autoFocus,\n            children,\n            resetButton,\n        }: {\n            value: string\n            setLocalQuery: (query: string) => void\n            setGlobalQuery: (query: string) => void\n            onBackspaceEmpty: () => void\n            autoFocus: boolean\n            children?: ReactNode\n            resetButton?: React.ReactNode\n        },\n        inputRef: ForwardedRef<HTMLInputElement>\n    ) => {\n        const isSmallScreen = useMediaQuery(SMALL_BREAKPOINT_MEDIA_QUERY)\n        const isClient = useIsClient()\n        const hasUserInteracted = useRef(false)\n        const {\n            activeIndex,\n            setActiveIndex,\n            suggestions,\n            showSuggestions,\n            setShowSuggestions,\n            onSelectActiveItem,\n        } = useSearchAutocomplete()\n\n        let placeholder = \"\"\n        if (isClient) {\n            // Only set the placeholder on the client so that useMediaQuery has a chance to initialize\n            // Otherwise on mobile it will flash from the desktop version to the mobile placeholder\n            placeholder = isSmallScreen\n                ? \"Search data, topics, countries or keywords…\"\n                : \"Search for an indicator, a topic, a country, or a keyword…\"\n        }\n\n        // Generate unique IDs for ARIA relationships using utility functions\n        const autocompleteId = getSearchAutocompleteId()\n        const activeOptionId = getSearchAutocompleteItemId(activeIndex)\n\n        const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n            // Handle backspace on empty input to remove last filter\n            if (e.key === \"Backspace\" && value === \"\") {\n                e.preventDefault()\n                onBackspaceEmpty()\n                return\n            }\n\n            if (!showSuggestions || !suggestions.length) return\n\n            switch (e.key) {\n                case \"ArrowDown\":\n                    e.preventDefault()\n                    setActiveIndex(\n                        activeIndex < suggestions.length - 1\n                            ? activeIndex + 1\n                            : activeIndex\n                    )\n                    break\n\n                case \"ArrowUp\":\n                    e.preventDefault()\n                    setActiveIndex(activeIndex > 0 ? activeIndex - 1 : -1)\n                    break\n\n                case \"Escape\":\n                    e.preventDefault()\n                    setShowSuggestions(false)\n                    break\n\n                case \"Enter\":\n                    e.preventDefault()\n                    if (activeIndex >= 0) {\n                        onSelectActiveItem()\n                    } else {\n                        // Submit the form\n                        setGlobalQuery(value)\n                    }\n                    break\n            }\n        }\n\n        // Allow clicks on the form to focus the input. This is useful on mobile\n        // when the search bar stretches vertically and reveals white space\n        // readers might be clicking on. Do register clicks on children, as we\n        // want clicks removing active filters or resetting the search to focus\n        // the input.\n        const handleFormClick = (): void => {\n            if (isCurrentRef(inputRef)) inputRef.current.focus()\n        }\n\n        return (\n            <form\n                className=\"search-form\"\n                role=\"search\"\n                // Submitting is handled in JS; action and the input's name\n                // let Firefox offer \"Add Search Engine\" on right-click.\n                action={SEARCH_BASE_PATH}\n                onSubmit={(e) => {\n                    e.preventDefault()\n                    // unfocus input to hide autocomplete/hide mobile keyboard\n                    if (isCurrentRef(inputRef)) {\n                        inputRef.current.blur()\n                    }\n                    setGlobalQuery(value)\n                }}\n                onClick={handleFormClick}\n            >\n                {children}\n                <div className=\"search-input-row\">\n                    <input\n                        type=\"text\"\n                        name={SearchUrlParam.QUERY}\n                        // Named inputs get the browser's form history, which\n                        // would cover our own suggestions.\n                        autoComplete=\"off\"\n                        className=\"search-input body-3-regular\"\n                        ref={inputRef}\n                        data-testid=\"search-input\"\n                        placeholder={placeholder}\n                        enterKeyHint=\"search\"\n                        value={value}\n                        role=\"combobox\"\n                        autoFocus={autoFocus}\n                        aria-expanded={showSuggestions}\n                        aria-controls={autocompleteId}\n                        aria-activedescendant={activeOptionId}\n                        aria-autocomplete=\"list\"\n                        onChange={(e) => {\n                            hasUserInteracted.current = true\n                            setLocalQuery(e.target.value)\n                            if (e.target.value === \"\") {\n                                setGlobalQuery(\"\")\n                            } else {\n                                setShowSuggestions(true)\n                                setActiveIndex(0)\n                            }\n                        }}\n                        onKeyDown={handleKeyDown}\n                        onFocus={() => {\n                            // Only show suggestions on focus if the user has actually interacted\n                            // This prevents showing suggestions on initial autofocus\n                            if (hasUserInteracted.current) {\n                                setShowSuggestions(true)\n                                setActiveIndex(0)\n                            }\n                        }}\n                        onBlur={() => {\n                            setShowSuggestions(false)\n                        }}\n                    />\n                    {resetButton}\n                </div>\n            </form>\n        )\n    }\n)\n\nSearchInput.displayName = \"SearchInput\"\n","import { match } from \"ts-pattern\"\nimport { FilterType } from \"@ourworldindata/types\"\nimport { SearchFilterPill } from \"./SearchFilterPill.js\"\nimport {\n    buildFilterTestId,\n    getFilterAriaLabel,\n    getFilterIcon,\n} from \"./searchUtils.js\"\nimport { useSearchContext } from \"./SearchContext.js\"\n\nexport const SearchActiveFilters = () => {\n    const {\n        state: { filters },\n        actions: { removeCountry, removeTopic, removeFilter },\n    } = useSearchContext()\n    return (\n        <>\n            {filters.map((filter) =>\n                match(filter)\n                    .with({ type: FilterType.COUNTRY }, (filter) => (\n                        <button\n                            key={filter.name}\n                            type=\"button\"\n                            aria-label={getFilterAriaLabel(filter, \"remove\")}\n                            onClick={() => removeCountry(filter.name)}\n                            className=\"search-active-filter-button\"\n                        >\n                            <SearchFilterPill\n                                name={filter.name}\n                                icon={getFilterIcon(filter)}\n                                selected\n                            />\n                        </button>\n                    ))\n                    .with({ type: FilterType.TOPIC }, (filter) => (\n                        <button\n                            key={`topic-${filter.name}`}\n                            type=\"button\"\n                            aria-label={getFilterAriaLabel(filter, \"remove\")}\n                            onClick={() => removeTopic(filter.name)}\n                            className=\"search-active-filter-button\"\n                            data-testid={buildFilterTestId(\n                                \"search-active-filter-button\",\n                                filter.type,\n                                filter.name\n                            )}\n                        >\n                            <SearchFilterPill\n                                name={filter.name}\n                                icon={getFilterIcon(filter)}\n                                selected\n                            />\n                        </button>\n                    ))\n                    .with(\n                        { type: FilterType.DATASET_PRODUCT },\n                        { type: FilterType.DATASET_NAMESPACE },\n                        { type: FilterType.DATASET_VERSION },\n                        { type: FilterType.DATASET_PRODUCER },\n                        (filter) => (\n                            <button\n                                key={`${filter.type}-${filter.name}`}\n                                type=\"button\"\n                                aria-label={getFilterAriaLabel(\n                                    filter,\n                                    \"remove\"\n                                )}\n                                onClick={() => removeFilter(filter)}\n                                className=\"search-active-filter-button\"\n                            >\n                                <SearchFilterPill\n                                    name={filter.name}\n                                    icon={getFilterIcon(filter)}\n                                    selected\n                                />\n                            </button>\n                        )\n                    )\n                    .with({ type: FilterType.QUERY }, (_filter) => null)\n                    .exhaustive()\n            )}\n        </>\n    )\n}\n","import { faSearch, faFilter } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { match } from \"ts-pattern\"\nimport { Filter, FilterType } from \"@ourworldindata/types\"\nimport { SearchFilterPill } from \"./SearchFilterPill.js\"\nimport { getFilterIcon } from \"./searchUtils.js\"\n\nconst MAX_VISIBLE_FILTERS = 3\n\nexport function SearchAutocompleteItemContents({\n    filter,\n    activeFilters = [],\n    unmatchedQuery = \"\",\n}: {\n    filter: Filter\n    activeFilters?: Filter[]\n    unmatchedQuery?: string\n}) {\n    return (\n        <div className=\"search-autocomplete-item-contents\">\n            <FontAwesomeIcon\n                className=\"search-autocomplete-item-contents__type-icon\"\n                icon={faSearch}\n            />\n            {renderActiveFilters(activeFilters)}\n            {activeFilters.length > 0 && (\n                <span className=\"search-autocomplete-item-contents__ellipsis\">\n                    ...\n                </span>\n            )}\n            {match(filter.type)\n                // keep in sync with setQueries logic in SearchAutocomplete\n                .with(FilterType.QUERY, () => (\n                    <span className=\"search-autocomplete-item-contents__query\">\n                        {filter.name}\n                    </span>\n                ))\n                .with(FilterType.COUNTRY, () => (\n                    <span className=\"search-autocomplete-item-contents__query\">\n                        {unmatchedQuery} {filter.name.toLowerCase()}\n                    </span>\n                ))\n                .with(FilterType.TOPIC, () => (\n                    <SearchFilterPill\n                        name={filter.name}\n                        icon={getFilterIcon(filter)}\n                    />\n                ))\n                .with(\n                    FilterType.DATASET_PRODUCT,\n                    FilterType.DATASET_NAMESPACE,\n                    FilterType.DATASET_VERSION,\n                    FilterType.DATASET_PRODUCER,\n                    () => (\n                        /* dataset filters are not suggested in autocomplete */\n                        <></>\n                    )\n                )\n                .exhaustive()}\n        </div>\n    )\n}\n\nconst renderActiveFilters = (filters: Filter[]) => {\n    const isCollapsed = filters.length > MAX_VISIBLE_FILTERS\n    const visibleFilters = isCollapsed\n        ? filters.slice(0, MAX_VISIBLE_FILTERS)\n        : filters\n    const remainingCount = filters.length - MAX_VISIBLE_FILTERS\n\n    return (\n        <>\n            {visibleFilters.map((filter) => (\n                <SearchFilterPill\n                    className=\"search-filter-pill--active\"\n                    key={`${filter.type}-${filter.name}`}\n                    icon={getFilterIcon(filter)}\n                    name={filter.name}\n                    selected={true}\n                />\n            ))}\n            {isCollapsed && (\n                <SearchFilterPill\n                    className=\"search-filter-pill--more-filters\"\n                    icon={\n                        <span className=\"icon\">\n                            <FontAwesomeIcon icon={faFilter} />\n                        </span>\n                    }\n                    name={`+ ${remainingCount} more`}\n                />\n            )}\n        </>\n    )\n}\n","import cx from \"clsx\"\nimport { useEffect, useCallback, useState } from \"react\"\nimport { match } from \"ts-pattern\"\nimport {\n    suggestFiltersFromQuerySuffix,\n    getSearchAutocompleteId,\n    getSearchAutocompleteItemId,\n    getFilterAriaLabel,\n    buildFilterTestId,\n    splitIntoWords,\n    isNotStopWord,\n} from \"./searchUtils.js\"\nimport { useSearchAutocomplete } from \"./SearchAutocompleteContext.js\"\nimport { SearchAutocompleteItemContents } from \"./SearchAutocompleteItemContents.js\"\nimport { Filter, FilterType } from \"@ourworldindata/types\"\nimport { useSearchContext } from \"./SearchContext.js\"\nimport { listedRegionsNames } from \"@ourworldindata/utils\"\nimport { useDebounceValue } from \"usehooks-ts\"\n\nexport const SearchAutocomplete = ({\n    localQuery,\n    allTopics,\n    setLocalQuery,\n    setQuery,\n}: {\n    localQuery: string\n    allTopics: string[]\n    setLocalQuery: (query: string) => void\n    setQuery: (query: string) => void\n}) => {\n    const {\n        state: { filters },\n        actions: { addCountryAndSetQuery, setTopicAndClearQuery },\n        synonymMap,\n        analytics,\n    } = useSearchContext()\n\n    const [debouncedLocalQuery] = useDebounceValue(localQuery, 200)\n    const [unmatchedQuery, setUnmatchedQuery] = useState(\"\")\n\n    const {\n        activeIndex,\n        setActiveIndex,\n        setSuggestions,\n        showSuggestions,\n        setShowSuggestions,\n        registerSelectionHandler,\n        suggestions,\n    } = useSearchAutocomplete()\n\n    useEffect(() => {\n        const result = suggestFiltersFromQuerySuffix(\n            debouncedLocalQuery,\n            listedRegionsNames(),\n            allTopics,\n            filters,\n            synonymMap\n        )\n\n        // The suggestions live in the autocomplete context, which the search\n        // input shares for keyboard navigation, so we sync them from here\n        // (together with the matching unmatched query)\n        /* oxlint-disable react/set-state-in-effect */\n        setSuggestions(result.suggestions)\n        setUnmatchedQuery(result.unmatchedQuery)\n        /* oxlint-enable react/set-state-in-effect */\n    }, [debouncedLocalQuery, allTopics, filters, synonymMap, setSuggestions])\n\n    const setQueries = useCallback(\n        (query: string) => {\n            setLocalQuery(query)\n            setQuery(query)\n        },\n        [setLocalQuery, setQuery]\n    )\n\n    const handleSelection = useCallback(\n        (filter: Filter, index: number) => {\n            const logSearchAutocompleteClick = () => {\n                analytics.logSearchAutocompleteClick({\n                    query: localQuery,\n                    position: index,\n                    filterType: filter.type,\n                    filterName: filter.name,\n                    suggestions: suggestions.map((s) => s.name),\n                    suggestionsTypes: suggestions.map((s) => s.type),\n                    suggestionsCount: suggestions.length,\n                })\n            }\n\n            const unmatchedQueryNoStopWords = splitIntoWords(unmatchedQuery)\n                .filter(isNotStopWord)\n                .join(\" \")\n\n            match(filter.type)\n                // What readers see in each autocomplete suggestion is decoupled\n                // from what happens when they click on one:\n                // - display logic: SearchAutocompleteItemContents (1)\n                // - handling logic: below 👇 (2)\n                //\n                // For instance, when searching for \"co2 france\", we detect:\n                // - \"france\" as a country filter\n                //     - and show \"france\" as a filter pill (SearchFilterPill in 1)\n                //     - and add \"france\" to the active filters (addCountryAndSetQuery in 2)\n                // - \"co2\" as the unmatchedQuery\n                //    - and show \"co2\" as the unmatched query (unmatchedQuery in 1)\n                //    - and set the queries to \"co2\" (addCountryAndSetQuery in 2)\n                //\n                // This symmetry between display and handling logic needs to be\n                // manually maintained. If you change the handling logic, make\n                // sure to also update the display logic accordingly (and vice\n                // versa).\n                .with(FilterType.COUNTRY, () => {\n                    logSearchAutocompleteClick()\n                    setLocalQuery(unmatchedQueryNoStopWords)\n                    addCountryAndSetQuery(\n                        filter.name,\n                        unmatchedQueryNoStopWords\n                    )\n                })\n                .with(FilterType.TOPIC, () => {\n                    logSearchAutocompleteClick()\n                    setLocalQuery(\"\")\n                    setTopicAndClearQuery(filter.name)\n                })\n                .with(FilterType.QUERY, () => {\n                    logSearchAutocompleteClick()\n                    setQueries(localQuery || filter.name) // only use filter.name for default searches, as it may be lagging\n                })\n                .with(\n                    FilterType.DATASET_PRODUCT,\n                    FilterType.DATASET_NAMESPACE,\n                    FilterType.DATASET_VERSION,\n                    FilterType.DATASET_PRODUCER,\n                    () => {\n                        // no-op: dataset filters are not suggested in autocomplete\n                    }\n                )\n                .exhaustive()\n            setShowSuggestions(false)\n        },\n        [\n            addCountryAndSetQuery,\n            setTopicAndClearQuery,\n            setLocalQuery,\n            setShowSuggestions,\n            setQueries,\n            unmatchedQuery,\n            analytics,\n            localQuery,\n            suggestions,\n        ]\n    )\n\n    // Register the selection handler with the context\n    useEffect(() => {\n        registerSelectionHandler(handleSelection)\n    }, [handleSelection, registerSelectionHandler])\n\n    if (!showSuggestions || !suggestions.length) return null\n\n    return (\n        <div className=\"search-autocomplete-container\">\n            <ul\n                id={getSearchAutocompleteId()}\n                data-testid=\"search-autocomplete-listbox\"\n                role=\"listbox\"\n            >\n                {suggestions.map((filter, index) => (\n                    <li\n                        key={`${filter.type}:${filter.name}`}\n                        className={cx(\"search-autocomplete-item\", {\n                            \"search-autocomplete-item--active\":\n                                index === activeIndex,\n                        })}\n                        role=\"option\"\n                        aria-selected={index === activeIndex}\n                    >\n                        <button\n                            id={getSearchAutocompleteItemId(index)}\n                            type=\"button\"\n                            className={cx(\"search-autocomplete-button\", {\n                                \"search-autocomplete-button--active\":\n                                    index === activeIndex,\n                            })}\n                            // Prevent tabbing into the dropdown. On Firefox,\n                            // tabbing out of the input moves the focus to the\n                            // dropdown as it is being discarded, resetting the\n                            // focus to the body instead of the next interactive\n                            // element.\n                            tabIndex={-1}\n                            onMouseDown={\n                                // On mobile Safari, onBlur on the input doesn't\n                                // register the e.relatedTarget coming from an\n                                // onClick event on these buttons. So we use\n                                // onMouseDown to get there before onBlur.\n                                () => handleSelection(filter, index)\n                            }\n                            onMouseEnter={() => setActiveIndex(index)}\n                            aria-label={getFilterAriaLabel(filter, \"add\")}\n                            data-testid={buildFilterTestId(\n                                \"search-autocomplete-button\",\n                                filter.type,\n                                filter.name\n                            )}\n                        >\n                            <SearchAutocompleteItemContents\n                                filter={filter}\n                                activeFilters={filters}\n                                unmatchedQuery={unmatchedQuery}\n                            />\n                        </button>\n                    </li>\n                ))}\n            </ul>\n        </div>\n    )\n}\n","import {\n    faMapMarkerAlt,\n    faClose,\n    faMagnifyingGlass,\n    faTimesCircle,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    getPrefersReducedMotion,\n    LabeledSwitch,\n} from \"@ourworldindata/components\"\nimport { countriesByName } from \"@ourworldindata/utils\"\nimport { useState, useRef, useMemo } from \"react\"\nimport {\n    Button,\n    Popover,\n    ListBox,\n    ListBoxItem,\n    DialogTrigger,\n} from \"react-aria-components\"\nimport { useMediaQuery } from \"usehooks-ts\"\nimport { SMALL_BREAKPOINT_MEDIA_QUERY } from \"../SiteConstants.js\"\nimport cx from \"clsx\"\n\nconst alphabetizedCountriesByName = Object.values(countriesByName()).sort(\n    (a, b) => {\n        return a.name.localeCompare(b.name)\n    }\n)\n\nexport const SearchCountrySelector = ({\n    selectedRegionNames,\n    requireAllCountries,\n    addCountry,\n    removeCountry,\n    toggleRequireAllCountries,\n}: {\n    selectedRegionNames: string[]\n    requireAllCountries: boolean\n    addCountry: (country: string) => void\n    removeCountry: (country: string) => void\n    toggleRequireAllCountries: () => void\n}) => {\n    const [isOpen, setIsOpen] = useState(false)\n    const [countrySearchQuery, setCountrySearchQuery] = useState(\"\")\n    const isSmallScreen = useMediaQuery(SMALL_BREAKPOINT_MEDIA_QUERY)\n    const listContainerRef = useRef<HTMLDivElement>(null)\n\n    const toggleCountry = (country: string) => {\n        if (selectedRegionNames.includes(country)) {\n            removeCountry(country)\n        } else {\n            addCountry(country)\n        }\n    }\n\n    const handleOpenChange = (isOpen: boolean) => {\n        setIsOpen(isOpen)\n        // if opening on mobile, scroll down a little\n        if (isSmallScreen && isOpen) {\n            setTimeout(() => {\n                const listContainer = listContainerRef.current\n                if (listContainer) {\n                    const rect = listContainer.getBoundingClientRect()\n                    window.scrollBy({\n                        top: rect.top - 100,\n                        behavior: getPrefersReducedMotion() ? \"auto\" : \"smooth\",\n                    })\n                }\n            }, 100)\n        }\n    }\n\n    const filteredCountriesByName = useMemo(() => {\n        return alphabetizedCountriesByName.filter(\n            (country) =>\n                selectedRegionNames.includes(country.name) ||\n                country.name\n                    .toLowerCase()\n                    .includes(countrySearchQuery.toLowerCase())\n        )\n    }, [countrySearchQuery, selectedRegionNames])\n\n    return (\n        <div className=\"search-country-selector\">\n            <DialogTrigger isOpen={isOpen} onOpenChange={handleOpenChange}>\n                <Button\n                    className={cx(\"search-country-selector-button\", {\n                        \"search-country-selector-button--is-open\": isOpen,\n                    })}\n                    aria-expanded={isOpen}\n                    aria-label={\n                        isOpen\n                            ? \"Close country selector\"\n                            : \"Open country selector\"\n                    }\n                >\n                    <FontAwesomeIcon\n                        className=\"search-country-selector-button__icon\"\n                        icon={faMapMarkerAlt}\n                    />\n                    <span className=\"search-country-selector-button__text\">\n                        Select country\n                    </span>\n                </Button>\n                <Popover\n                    className=\"search-country-selector-list-container\"\n                    ref={listContainerRef}\n                    placement=\"bottom end\"\n                    crossOffset={8}\n                >\n                    <div className=\"search-country-selector-header\">\n                        <h5 className=\"h5-black-caps search-country-selector__heading\">\n                            Select or search for a country\n                        </h5>\n                        <Button\n                            aria-label=\"Close country selector\"\n                            className=\"search-country-selector-close-button\"\n                            onPress={() => setIsOpen(false)}\n                        >\n                            <FontAwesomeIcon icon={faClose} />\n                        </Button>\n                    </div>\n                    <LabeledSwitch\n                        className=\"search-country-selector-switch\"\n                        value={requireAllCountries}\n                        disabled={selectedRegionNames.length === 0}\n                        onToggle={toggleRequireAllCountries}\n                        label=\"Only show charts with data for all selected countries\"\n                    />\n                    <div className=\"search-country-selector-search-container\">\n                        <FontAwesomeIcon\n                            className=\"search-country-selector__search-icon\"\n                            icon={faMagnifyingGlass}\n                        />\n                        <input\n                            type=\"text\"\n                            placeholder=\"Search for a country\"\n                            className=\"search-country-selector-search-input body-3-regular\"\n                            value={countrySearchQuery}\n                            onChange={(e) =>\n                                setCountrySearchQuery(e.target.value)\n                            }\n                        />\n                        {countrySearchQuery && (\n                            <Button\n                                onPress={() => setCountrySearchQuery(\"\")}\n                                aria-label=\"Clear country search\"\n                                className=\"search-country-selector__clear-button\"\n                            >\n                                <FontAwesomeIcon icon={faTimesCircle} />\n                            </Button>\n                        )}\n                    </div>\n                    <ListBox\n                        className=\"search-country-selector-list\"\n                        aria-label=\"Countries\"\n                    >\n                        {filteredCountriesByName.map((country) => (\n                            <ListBoxItem\n                                key={country.name}\n                                id={country.name}\n                                className={cx(\n                                    \"search-country-selector-list__item\",\n                                    {\n                                        \"search-country-selector-list__item--selected\":\n                                            selectedRegionNames.includes(\n                                                country.name\n                                            ),\n                                    }\n                                )}\n                                textValue={country.name}\n                                onAction={() => toggleCountry(country.name)}\n                            >\n                                <img\n                                    className=\"flag\"\n                                    role=\"presentation\"\n                                    alt=\"\"\n                                    height={16}\n                                    width={20}\n                                    src={`/images/flags/${country.code}.svg`}\n                                />\n                                {country.name}\n                                <input\n                                    type=\"checkbox\"\n                                    checked={selectedRegionNames.includes(\n                                        country.name\n                                    )}\n                                    readOnly\n                                />\n                            </ListBoxItem>\n                        ))}\n                    </ListBox>\n                </Popover>\n            </DialogTrigger>\n        </div>\n    )\n}\n","import { useState, ReactNode, useRef, useCallback } from \"react\"\nimport { Filter } from \"@ourworldindata/types\"\nimport { SearchAutocompleteContext } from \"./SearchAutocompleteContext.js\"\n\nexport function SearchAutocompleteContextProvider({\n    children,\n}: {\n    children: ReactNode\n}) {\n    const [activeIndex, setActiveIndex] = useState<number>(-1)\n    const [suggestions, setSuggestions] = useState<Filter[]>([])\n    const [showSuggestions, setShowSuggestions] = useState<boolean>(false)\n    const selectionHandlerRef = useRef<\n        ((filter: Filter, index: number) => void) | null\n    >(null)\n\n    // Register a handler that will be called when an item is selected\n    const registerSelectionHandler = useCallback(\n        (handler: (filter: Filter, index: number) => void) => {\n            selectionHandlerRef.current = handler\n        },\n        []\n    )\n\n    // Handles selection of the currently active item\n    const onSelectActiveItem = useCallback(() => {\n        if (!selectionHandlerRef.current) return\n\n        // Call the registered handler with the selected filter\n        selectionHandlerRef.current(suggestions[activeIndex], activeIndex)\n    }, [activeIndex, suggestions])\n\n    return (\n        <SearchAutocompleteContext.Provider\n            value={{\n                activeIndex,\n                setActiveIndex,\n                suggestions,\n                setSuggestions,\n                showSuggestions,\n                setShowSuggestions,\n                onSelectActiveItem,\n                registerSelectionHandler,\n            }}\n        >\n            {children}\n        </SearchAutocompleteContext.Provider>\n    )\n}\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faTimesCircle } from \"@fortawesome/free-solid-svg-icons\"\n\nexport const SearchResetButton = ({\n    disabled,\n    onReset,\n}: {\n    disabled: boolean\n    onReset: () => void\n}) => {\n    return (\n        <button\n            className=\"search-reset-button\"\n            disabled={disabled}\n            aria-label=\"Clear search query and all filters\"\n            type=\"button\"\n            onClick={onReset}\n        >\n            <FontAwesomeIcon icon={faTimesCircle} />\n        </button>\n    )\n}\n","import { faSearch } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { useState, useCallback, useRef } from \"react\"\nimport { SearchInput } from \"./SearchInput.js\"\nimport { SearchActiveFilters } from \"./SearchActiveFilters.js\"\nimport { SearchAutocomplete } from \"./SearchAutocomplete.js\"\nimport { SearchCountrySelector } from \"./SearchCountrySelector.js\"\nimport { FilterType } from \"@ourworldindata/types\"\nimport { SearchAutocompleteContextProvider } from \"./SearchAutocompleteContextProvider.js\"\nimport { SearchResetButton } from \"./SearchResetButton.js\"\nimport { useSearchContext } from \"./SearchContext.js\"\nimport { useSelectedRegionNames } from \"./searchHooks.js\"\n\nexport const Searchbar = ({\n    allTopics,\n    autoFocus,\n}: {\n    allTopics: string[]\n    autoFocus: boolean\n}) => {\n    const {\n        state,\n        actions: {\n            setQuery,\n            addCountry,\n            removeCountry,\n            removeTopic,\n            toggleRequireAllCountries,\n            reset,\n            removeFilter,\n        },\n    } = useSearchContext()\n\n    const { filters, query, requireAllCountries } = state\n\n    const selectedRegionNames = useSelectedRegionNames()\n    // Storing this in local state so that query params don't update during\n    // typing. Whenever the state semantically changes, we update the local\n    // query by triggering a re-mount (see key prop on Searchbar in parent\n    // component).\n    const [localQuery, setLocalQuery] = useState(query)\n\n    const inputRef = useRef<HTMLInputElement>(null)\n\n    const removeLastFilter = useCallback(() => {\n        if (filters.length === 0) return\n\n        const lastFilter = filters[filters.length - 1]\n        if (lastFilter.type === FilterType.COUNTRY) {\n            removeCountry(lastFilter.name)\n        } else if (lastFilter.type === FilterType.TOPIC) {\n            removeTopic(lastFilter.name)\n        } else {\n            removeFilter(lastFilter)\n        }\n    }, [filters, removeCountry, removeFilter, removeTopic])\n\n    // Allow clicks on the search bar to focus the input. This is useful on\n    // mobile when the search bar stretches vertically and reveals white space\n    // readers might be clicking on. Do not register clicks on children, as we\n    // don't want clicks on the country selector to focus the input.\n    const handleSearchBarClick = (e: React.MouseEvent): void => {\n        if (e.target === e.currentTarget) inputRef.current?.focus()\n    }\n\n    return (\n        <>\n            <div className=\"search-bar\" onClick={handleSearchBarClick}>\n                <button\n                    className=\"search-bar__submit-button\"\n                    aria-label=\"Submit search\"\n                    onClick={() => setQuery(localQuery)}\n                >\n                    <FontAwesomeIcon icon={faSearch} />\n                </button>\n                <SearchAutocompleteContextProvider>\n                    <SearchInput\n                        ref={inputRef}\n                        value={localQuery}\n                        setLocalQuery={setLocalQuery}\n                        setGlobalQuery={setQuery}\n                        onBackspaceEmpty={removeLastFilter}\n                        autoFocus={autoFocus}\n                        resetButton={\n                            <SearchResetButton\n                                disabled={!(localQuery || filters.length)}\n                                onReset={() => {\n                                    setLocalQuery(\"\")\n                                    reset()\n                                }}\n                            />\n                        }\n                    >\n                        <SearchActiveFilters />\n                    </SearchInput>\n                    <SearchAutocomplete\n                        localQuery={localQuery}\n                        allTopics={allTopics}\n                        setLocalQuery={setLocalQuery}\n                        setQuery={setQuery}\n                    />\n                </SearchAutocompleteContextProvider>\n                <SearchCountrySelector\n                    requireAllCountries={requireAllCountries}\n                    toggleRequireAllCountries={toggleRequireAllCountries}\n                    selectedRegionNames={selectedRegionNames}\n                    addCountry={addCountry}\n                    removeCountry={removeCountry}\n                />\n            </div>\n        </>\n    )\n}\n","import { faMinus, faPlus } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport cx from \"clsx\"\nimport * as React from \"react\"\nimport { useState } from \"react\"\nimport { useSearchContext } from \"./SearchContext.js\"\nimport { useSelectedTopic } from \"./searchHooks.js\"\nimport { getSelectableTopics, buildFilterTestId } from \"./searchUtils.js\"\nimport { FilterType, SearchTopicType } from \"@ourworldindata/types\"\n\nexport const SearchTopicsRefinementList = ({\n    topicType,\n}: {\n    topicType: SearchTopicType | null\n}) => {\n    const {\n        actions: { setTopic },\n        topicTagGraph,\n        state: { query },\n    } = useSearchContext()\n    const selectedTopic = useSelectedTopic()\n    const selectableTopics = [\n        ...getSelectableTopics(topicTagGraph, selectedTopic),\n    ]\n\n    const [isExpanded, setIsExpanded] = useState(false)\n\n    return selectableTopics.length > 0 && !query ? (\n        <div className=\"search-topics-refinement-list\">\n            <h3 className=\"search-topics-refinement-list__heading h5-black-caps\">\n                Filter by{\" \"}\n                {topicType === SearchTopicType.Area\n                    ? \"topic\"\n                    : \"area of research\"}\n                :\n            </h3>\n            <button\n                aria-expanded={isExpanded}\n                aria-label={isExpanded ? \"Collapse topics\" : \"Expand topics\"}\n                className=\"search-topics-refinement-list__expand-button\"\n                onClick={() => setIsExpanded(!isExpanded)}\n            >\n                <h5 className=\"h5-black-caps\">Filter by topic</h5>\n                <FontAwesomeIcon icon={isExpanded ? faMinus : faPlus} />\n            </button>\n            <ul\n                className={cx(\"search-topics-refinement-list__list\", {\n                    \"search-topics-refinement-list__list--is-expanded\":\n                        isExpanded,\n                })}\n            >\n                {selectableTopics.map((topic, i) => {\n                    const topicLabel = topic.replaceAll(\" and \", \" & \")\n                    const isLast = i === selectableTopics.length - 1\n                    return (\n                        <React.Fragment key={i}>\n                            <li className=\"search-topics-refinement-list__list-item\">\n                                <button\n                                    aria-label={`Filter by ${topic}`}\n                                    data-testid={buildFilterTestId(\n                                        \"search-refinement-button\",\n                                        FilterType.TOPIC,\n                                        topic\n                                    )}\n                                    onClick={() => setTopic(topic)}\n                                >\n                                    <span className=\"body-3-medium\">\n                                        {topicLabel}\n                                    </span>{\" \"}\n                                </button>\n                            </li>\n                            {!isLast ? (\n                                <li\n                                    className=\"search-topics-refinement-list__separator\"\n                                    aria-hidden=\"true\"\n                                >\n                                    {/* including an empty space so that the list has spaces in it when copied to clipboard */}{\" \"}\n                                </li>\n                            ) : null}\n                        </React.Fragment>\n                    )\n                })}\n            </ul>\n        </div>\n    ) : null\n}\n","import { RadioButton } from \"@ourworldindata/components\"\nimport { SearchResultType } from \"@ourworldindata/types\"\nimport { useSearchContext } from \"./SearchContext.js\"\nimport {\n    getEffectiveResultType,\n    hasDatasetFilters,\n    isBrowsing,\n} from \"./searchUtils.js\"\n\nconst OPTIONS = [\n    { value: SearchResultType.ALL, label: \"All\" },\n    { value: SearchResultType.DATA, label: \"Data\" },\n    { value: SearchResultType.WRITING, label: \"Writing\" },\n]\n\nexport const SearchResultTypeToggle = () => {\n    const {\n        state,\n        actions: { setResultType },\n    } = useSearchContext()\n    const { resultType, filters, query } = state\n\n    if (hasDatasetFilters(filters)) return null\n\n    const effectiveResultType = getEffectiveResultType(\n        filters,\n        query,\n        resultType\n    )\n\n    const optionsToShow = isBrowsing(filters, query)\n        ? OPTIONS.filter((option) => option.value !== SearchResultType.ALL)\n        : OPTIONS\n\n    return (\n        <fieldset\n            className=\"search-result-type-toggle\"\n            role=\"radiogroup\"\n            aria-label=\"Result type\"\n        >\n            <legend className=\"search-result-type-toggle__legend\">\n                Filter by type of content:\n            </legend>\n            {optionsToShow.map((option) => (\n                <RadioButton\n                    key={option.value}\n                    checked={effectiveResultType === option.value}\n                    onChange={() => setResultType(option.value)}\n                    label={option.label}\n                    group=\"search-result-type\"\n                />\n            ))}\n        </fieldset>\n    )\n}\n","import { faArrowRight } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { commafyNumber } from \"@ourworldindata/utils\"\nimport type { SearchChartHit } from \"@ourworldindata/types\"\nimport type { SearchResponse } from \"algoliasearch\"\nimport { useSearchContext } from \"./SearchContext.js\"\nimport { useSelectedRegionNames } from \"./searchHooks.js\"\nimport { SearchChartHitComponent } from \"./SearchChartHitComponent.js\"\n\nexport const SearchDataTopic = ({\n    result: { title, charts },\n}: {\n    result: {\n        title: string\n        charts: SearchResponse<SearchChartHit>\n    }\n}) => {\n    const {\n        actions: { setTopic },\n        analytics,\n    } = useSearchContext()\n\n    const selectedRegionNames = useSelectedRegionNames()\n\n    if (charts.nbHits === 0) return null\n    const titleLabel = title.replaceAll(\" and \", \" & \")\n\n    function handleAddTopicClick() {\n        setTopic(title)\n        window.scrollTo({\n            top: 0,\n        })\n    }\n\n    function handleHitClick(\n        hit: SearchChartHit,\n        position: number,\n        vizType?: string | null\n    ) {\n        analytics.logSearchResultClick(hit, {\n            position,\n            source: \"ribbon\",\n            ribbonTag: title,\n            vizType,\n        })\n    }\n\n    return (\n        <div className=\"search-data-topic col-start-2 span-cols-12 col-sm-start-2 span-sm-cols-13\">\n            <button\n                className=\"search-data-topic__header-button\"\n                type=\"button\"\n                aria-label={`Add topic ${title} to filters`}\n                onClick={handleAddTopicClick}\n            >\n                <div className=\"search-data-topic__header\">\n                    <h2>{titleLabel}</h2>\n                    <span className=\"search-data-topic__hit-count\">\n                        {commafyNumber(charts.nbHits ?? 0)}{\" \"}\n                        {charts.nbHits === 1 ? \"chart\" : \"charts\"}\n                        <FontAwesomeIcon icon={faArrowRight} />\n                    </span>\n                </div>\n            </button>\n            <div className=\"search-data-topic-hits\">\n                <ul className=\"search-data-topic-list\">\n                    {charts.hits.map((hit, hitIndex) => (\n                        <li\n                            className=\"search-data-topic-hit\"\n                            key={hit.objectID}\n                        >\n                            <SearchChartHitComponent\n                                hit={hit}\n                                variant={hitIndex === 0 ? \"medium\" : \"small\"}\n                                onClick={(vizType) =>\n                                    handleHitClick(hit, hitIndex + 1, vizType)\n                                }\n                                selectedRegionNames={selectedRegionNames}\n                            />\n                        </li>\n                    ))}\n                </ul>\n            </div>\n            <button\n                className=\"search-data-topic__see-all-button\"\n                type=\"button\"\n                aria-label={`Add ${title} to filters`}\n                onClick={handleAddTopicClick}\n            >\n                <span>See all charts on {titleLabel}</span>\n                <FontAwesomeIcon icon={faArrowRight} />\n            </button>\n        </div>\n    )\n}\n","import { useQuery } from \"@tanstack/react-query\"\nimport { queryDataTopics, searchQueryKeys } from \"./queries.js\"\nimport { useSearchContext } from \"./SearchContext.js\"\nimport { useSelectedTopic } from \"./searchHooks.js\"\nimport { SearchDataTopic } from \"./SearchDataTopic.js\"\nimport { SearchDataTopicsResultsSkeleton } from \"./SearchDataTopicsResultsSkeleton.js\"\n\nexport const SearchDataTopicsResults = () => {\n    const { state, liteSearchClient, topicTagGraph } = useSearchContext()\n    const selectedTopic = useSelectedTopic()\n\n    const query = useQuery({\n        queryKey: searchQueryKeys.dataTopics(state),\n        queryFn: () =>\n            queryDataTopics(\n                liteSearchClient,\n                state,\n                topicTagGraph,\n                selectedTopic\n            ),\n    })\n\n    if (query.isLoading) return <SearchDataTopicsResultsSkeleton />\n    if (!query.data?.length) return null\n\n    return (\n        <div className=\"search-data-topics-results span-cols-12 col-start-2\">\n            <div>\n                {query.data.map((result) => (\n                    <SearchDataTopic key={result.title} result={result} />\n                ))}\n            </div>\n        </div>\n    )\n}\n","import { commafyNumber } from \"@ourworldindata/utils\"\n\nexport const SearchResultHeader = ({\n    count,\n    children,\n}: {\n    count: number\n    children: React.ReactNode\n}) => {\n    return (\n        <div className=\"search-result-header\">\n            <h2 className=\"search-result-header__title\">{children}</h2>\n            <span className=\"search-result-header__count\">\n                ({commafyNumber(count)} {count === 1 ? \"result\" : \"results\"})\n            </span>\n        </div>\n    )\n}\n","/**\n * Shown when a section displays relaxed (\"closest matches\") results because\n * the exact search returned nothing — see the closest-matches fallback in\n * queries.ts. Tells the user honestly that we don't have an exact answer,\n * while still offering the nearest content instead of a blank page.\n */\nexport function SearchClosestMatchesNotice() {\n    return (\n        <p className=\"search-closest-matches-notice\">\n            No results match all your search terms — showing the closest matches\n            instead.\n        </p>\n    )\n}\n","import { queryCharts, searchQueryKeys } from \"./queries.js\"\nimport { useSelectedRegionNames, useInfiniteSearch } from \"./searchHooks.js\"\nimport { SearchResultHeader } from \"./SearchResultHeader.js\"\nimport { SearchChartHit } from \"@ourworldindata/types\"\nimport { SearchDataResultsSkeleton } from \"./SearchDataResultsSkeleton.js\"\nimport { SearchChartHitComponent } from \"./SearchChartHitComponent.js\"\nimport { SearchClosestMatchesNotice } from \"./SearchClosestMatchesNotice.js\"\nimport { SearchHorizontalDivider } from \"./SearchHorizontalDivider.js\"\nimport { useSearchContext } from \"./SearchContext.js\"\n\nexport const SearchDataResults = ({\n    isFirstChartLarge,\n}: {\n    isFirstChartLarge: boolean\n}) => {\n    const { analytics } = useSearchContext()\n    const selectedRegionNames = useSelectedRegionNames()\n\n    const query = useInfiniteSearch({\n        queryKey: (state) => searchQueryKeys.charts(state),\n        queryFn: queryCharts,\n    })\n\n    const { hits, totalResults, isLoading, isClosestMatches } = query\n\n    function handleClick(\n        hit: SearchChartHit,\n        position: number,\n        vizType: string | null\n    ) {\n        analytics.logSearchResultClick(hit, {\n            position,\n            source: \"search\",\n            vizType,\n        })\n    }\n\n    if (!isLoading && totalResults === 0) return null\n\n    return (\n        <>\n            <section>\n                {isLoading ? (\n                    <SearchDataResultsSkeleton />\n                ) : (\n                    <>\n                        <SearchResultHeader count={totalResults}>\n                            Data\n                        </SearchResultHeader>\n                        {isClosestMatches && <SearchClosestMatchesNotice />}\n                        <ul className=\"search-data-results__list\">\n                            {hits.map((hit, hitIndex) => {\n                                const variant = isFirstChartLarge\n                                    ? hitIndex === 0\n                                        ? \"large\"\n                                        : hitIndex <= 3\n                                          ? \"medium\"\n                                          : \"small\"\n                                    : hitIndex < 4\n                                      ? \"medium\"\n                                      : \"small\"\n\n                                return (\n                                    <li\n                                        className=\"search-data-results__hit\"\n                                        key={hit.objectID}\n                                    >\n                                        <SearchChartHitComponent\n                                            hit={hit}\n                                            variant={variant}\n                                            selectedRegionNames={\n                                                selectedRegionNames\n                                            }\n                                            onClick={(vizType) =>\n                                                handleClick(\n                                                    hit,\n                                                    hitIndex + 1,\n                                                    vizType\n                                                )\n                                            }\n                                        />\n                                    </li>\n                                )\n                            })}\n                        </ul>\n                    </>\n                )}\n            </section>\n            <SearchHorizontalDivider\n                hasButton={!isLoading && query.hasNextPage}\n                isLoading={query.isFetchingNextPage}\n                onClick={query.fetchNextPage}\n            />\n        </>\n    )\n}\n","import cx from \"clsx\"\nimport { Snippet } from \"react-instantsearch\"\nimport { getCanonicalPath } from \"@ourworldindata/components\"\nimport { OwidGdocType, FlatArticleHit } from \"@ourworldindata/types\"\nimport { formatAuthors, formatDate } from \"@ourworldindata/utils\"\n\nexport function SearchFlatArticleHit({\n    className,\n    hit,\n    onClick,\n}: {\n    className?: string\n    hit: FlatArticleHit\n    onClick: VoidFunction\n}) {\n    const isArticle = hit.type === OwidGdocType.Article\n\n    return (\n        <a\n            className={cx(\"search-flat-article-hit\", className)}\n            href={getCanonicalPath(hit.slug, hit.type)}\n            onClick={onClick}\n        >\n            <article className=\"search-flat-article-hit__content\">\n                {hit.thumbnailUrl && (\n                    <div className=\"search-flat-article-hit__image-container\">\n                        <img\n                            src={hit.thumbnailUrl}\n                            role=\"presentation\"\n                            className=\"search-flat-article-hit__image\"\n                            alt=\"\"\n                        />\n                    </div>\n                )}\n                <div className=\"search-flat-article-hit__text\">\n                    <header>\n                        {isArticle && hit.date && (\n                            <div className=\"search-flat-article-hit__date\">\n                                {formatDate(new Date(hit.date))}\n                            </div>\n                        )}\n                        <h3 className=\"search-flat-article-hit__title\">\n                            {hit.title}\n                        </h3>\n                    </header>\n                    <div className=\"search-flat-article-hit__authors-and-excerpt\">\n                        {isArticle && (\n                            <span className=\"search-flat-article-hit__authors\">\n                                by {formatAuthors(hit.authors)} —{\" \"}\n                            </span>\n                        )}\n                        {hit.excerpt ? (\n                            <span className=\"search-flat-article-hit__excerpt\">\n                                {hit.excerpt}\n                            </span>\n                        ) : (\n                            <Snippet\n                                classNames={{\n                                    root: \"search-flat-article-hit__excerpt\",\n                                }}\n                                attribute=\"content\"\n                                highlightedTagName=\"strong\"\n                                hit={hit}\n                            />\n                        )}\n                    </div>\n                </div>\n            </article>\n        </a>\n    )\n}\n","import cx from \"clsx\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faArrowRightLong } from \"@fortawesome/free-solid-svg-icons\"\nimport { getCanonicalPath } from \"@ourworldindata/components\"\nimport { OwidGdocType, ProfileHit, TopicPageHit } from \"@ourworldindata/types\"\n\nfunction truncate(paragraphs: string[]) {\n    const maxWords = 35\n    let totalWords = 0\n    const result = []\n\n    for (const paragraph of paragraphs) {\n        const paragraphWords = paragraph.split(/\\s+/)\n        if (totalWords + paragraphWords.length <= maxWords) {\n            // We can include this entire paragraph\n            result.push(paragraph)\n            totalWords += paragraphWords.length\n        } else {\n            // This paragraph would exceed the limit, so truncate it\n            const remainingWords = maxWords - totalWords\n            if (remainingWords > 0) {\n                const truncatedWords = paragraphWords.slice(0, remainingWords)\n                result.push(truncatedWords.join(\" \") + \"...\")\n            }\n            break\n        }\n    }\n\n    return result\n}\n\nfunction getTagLabel(type: TopicPageHit[\"type\"] | ProfileHit[\"type\"]): string {\n    if (type === OwidGdocType.Profile) return \"Country profile\"\n    return \"Topic page\"\n}\n\nexport const SearchTopicPageHit = ({\n    className,\n    hit,\n    variant = \"small\",\n    flagCode,\n    onClick,\n}: {\n    className?: string\n    hit: TopicPageHit | ProfileHit\n    variant?: \"small\" | \"large\"\n    flagCode?: string\n    onClick: VoidFunction\n}) => (\n    <a\n        className={cx(\"search-topic-page-hit\", className)}\n        href={getCanonicalPath(hit.slug, hit.type)}\n        onClick={onClick}\n    >\n        <div className=\"search-topic-page-hit__tag\">\n            {flagCode && (\n                <img\n                    className=\"search-topic-page-hit__flag\"\n                    aria-hidden={true}\n                    height={12}\n                    width={16}\n                    src={`/images/flags/${flagCode}.svg`}\n                    alt=\"\"\n                />\n            )}\n            {getTagLabel(hit.type)}\n        </div>\n        <h3 className=\"search-topic-page-hit__title\">\n            <span className=\"search-topic-page-hit__title-text\">\n                {hit.title}\n            </span>{\" \"}\n            <FontAwesomeIcon\n                className=\"search-topic-page-hit__icon\"\n                icon={faArrowRightLong}\n            />\n        </h3>\n        <div className=\"search-topic-page-hit__excerpt\">\n            {variant === \"large\" &&\n            \"excerptLong\" in hit &&\n            hit.excerptLong &&\n            hit.excerptLong.length > 0 ? (\n                truncate(hit.excerptLong).map((text, index) => (\n                    <p\n                        key={index}\n                        className=\"search-topic-page-hit__excerpt-paragraph\"\n                    >\n                        {text}\n                    </p>\n                ))\n            ) : (\n                <p className=\"search-topic-page-hit__excerpt-paragraph\">\n                    {hit.excerpt}\n                </p>\n            )}\n        </div>\n    </a>\n)\n","import { ProfileHit } from \"@ourworldindata/types\"\nimport { countriesByName } from \"@ourworldindata/utils\"\nimport { SearchTopicPageHit } from \"./SearchTopicPageHit.js\"\n\nexport function SearchProfileHit({\n    className,\n    hit,\n    onClick,\n}: {\n    className?: string\n    hit: ProfileHit\n    onClick: VoidFunction\n}) {\n    const entityName = hit.availableEntities?.[0]\n    const countryCode = entityName\n        ? countriesByName()[entityName]?.code\n        : undefined\n\n    return (\n        <SearchTopicPageHit\n            className={className}\n            hit={hit}\n            flagCode={countryCode}\n            onClick={onClick}\n        />\n    )\n}\n","import { SearchResultHeaderSkeleton } from \"./SearchResultHeaderSkeleton.js\"\n\nexport const SearchWritingResultsSkeleton = () => {\n    return (\n        <div className=\"animate-pulse\">\n            <SearchResultHeaderSkeleton />\n            <div className=\"search-writing-results-skeleton search-writing-results__grid\">\n                <div className=\"search-writing-results__articles\">\n                    <SearchArticleHitSkeleton />\n                    <SearchArticleHitSkeleton />\n                    <SearchArticleHitSkeleton />\n                </div>\n                <div className=\"search-writing-results__topics\">\n                    <SearchTopicPageHitSkeleton />\n                    <SearchTopicPageHitSkeleton />\n                </div>\n            </div>\n        </div>\n    )\n}\n\nconst SearchArticleHitSkeleton = () => (\n    <div className=\"search-flat-article-hit-skeleton\">\n        <div className=\"search-flat-article-hit-skeleton__image\" />\n        <div className=\"search-flat-article-hit-skeleton__text\">\n            <div className=\"search-flat-article-hit-skeleton__date\" />\n            <div className=\"search-flat-article-hit-skeleton__title\" />\n            <div className=\"search-flat-article-hit-skeleton__authors-and-excerpt\" />\n        </div>\n    </div>\n)\n\nconst SearchTopicPageHitSkeleton = () => (\n    <div className=\"search-topic-page-hit-skeleton\" />\n)\n","import cx from \"clsx\"\nimport { match, P } from \"ts-pattern\"\nimport { useMediaQuery } from \"usehooks-ts\"\nimport * as _ from \"lodash-es\"\n\nimport {\n    OwidGdocType,\n    FlatArticleHit,\n    ProfileHit,\n    TopicPageHit,\n} from \"@ourworldindata/types\"\nimport { SMALL_BREAKPOINT_MEDIA_QUERY } from \"../SiteConstants.js\"\nimport {\n    searchQueryKeys,\n    queryArticles,\n    queryProfiles,\n    queryTopicPages,\n} from \"./queries.js\"\nimport { SearchResultHeader } from \"./SearchResultHeader.js\"\nimport { useInfiniteSearchOffset } from \"./searchHooks.js\"\nimport { SearchFlatArticleHit } from \"./SearchFlatArticleHit.js\"\nimport { SearchProfileHit } from \"./SearchProfileHit.js\"\nimport { SearchTopicPageHit } from \"./SearchTopicPageHit.js\"\nimport { SearchWritingResultsSkeleton } from \"./SearchWritingResultsSkeleton.js\"\nimport { SearchHorizontalDivider } from \"./SearchHorizontalDivider.js\"\nimport { useSearchContext } from \"./SearchContext.js\"\nimport { SearchClosestMatchesNotice } from \"./SearchClosestMatchesNotice.js\"\n\ntype WritingHit = FlatArticleHit | TopicPageHit | ProfileHit\n\nfunction SearchWritingHit({\n    hit,\n    hasLargeTopic,\n    onClick,\n}: {\n    hit: WritingHit\n    hasLargeTopic: boolean\n    onClick: () => void\n}) {\n    return match(hit)\n        .with({ type: OwidGdocType.Profile }, (hit) => (\n            <SearchProfileHit hit={hit} onClick={onClick} />\n        ))\n        .with(\n            {\n                type: P.union(\n                    OwidGdocType.TopicPage,\n                    OwidGdocType.LinearTopicPage\n                ),\n            },\n            (hit) => (\n                <SearchTopicPageHit\n                    hit={hit}\n                    variant={hasLargeTopic ? \"large\" : undefined}\n                    onClick={onClick}\n                />\n            )\n        )\n        .otherwise((hit) => (\n            <SearchFlatArticleHit hit={hit} onClick={onClick} />\n        ))\n}\n\nfunction SingleColumnResults({\n    hits,\n    hasLargeTopic,\n}: {\n    hits: WritingHit[]\n    hasLargeTopic: boolean\n}) {\n    const { analytics } = useSearchContext()\n\n    function handleClick(hit: WritingHit, position: number) {\n        analytics.logSearchResultClick(hit, {\n            position,\n            source: \"search\",\n        })\n    }\n\n    return (\n        <div className=\"search-writing-results__single-column\">\n            {hits.map((hit, index) => (\n                <SearchWritingHit\n                    key={hit.objectID}\n                    hit={hit}\n                    hasLargeTopic={hasLargeTopic}\n                    onClick={() => handleClick(hit, index + 1)}\n                />\n            ))}\n        </div>\n    )\n}\n\nfunction MultiColumnResults({\n    articles,\n    topics,\n    profiles,\n    orderedHits,\n    hasLargeTopic,\n}: {\n    articles: FlatArticleHit[]\n    topics: TopicPageHit[]\n    profiles: ProfileHit[]\n    orderedHits: WritingHit[]\n    hasLargeTopic: boolean\n}) {\n    const { analytics } = useSearchContext()\n    const hasArticles = articles.length > 0\n    const hitPositions = new Map(\n        orderedHits.map((hit, index) => [hit.objectID, index + 1])\n    )\n\n    function handleClick(hit: WritingHit) {\n        analytics.logSearchResultClick(hit, {\n            position: hitPositions.get(hit.objectID)!,\n            source: \"search\",\n        })\n    }\n\n    return (\n        <div className=\"search-writing-results__grid\">\n            {hasArticles && (\n                <div className=\"search-writing-results__articles\">\n                    {articles.map((hit) => (\n                        <SearchFlatArticleHit\n                            key={hit.objectID}\n                            hit={hit}\n                            onClick={() => handleClick(hit)}\n                        />\n                    ))}\n                </div>\n            )}\n            {(topics.length > 0 || profiles.length > 0) && (\n                <div\n                    className={cx(\"search-writing-results__topics\", {\n                        \"search-writing-results__topics--full-width\":\n                            !hasArticles,\n                    })}\n                >\n                    {profiles.map((hit) => (\n                        <SearchProfileHit\n                            key={hit.objectID}\n                            hit={hit}\n                            onClick={() => handleClick(hit)}\n                        />\n                    ))}\n                    {topics.map((hit) => (\n                        <SearchTopicPageHit\n                            key={hit.objectID}\n                            hit={hit}\n                            variant={hasLargeTopic ? \"large\" : undefined}\n                            onClick={() => handleClick(hit)}\n                        />\n                    ))}\n                </div>\n            )}\n        </div>\n    )\n}\n\nexport const SearchWritingResults = ({\n    hasTopicPages = true,\n    showProfiles = false,\n}: {\n    hasTopicPages?: boolean\n    showProfiles?: boolean\n}) => {\n    const isSmallScreen = useMediaQuery(SMALL_BREAKPOINT_MEDIA_QUERY)\n    const { topicTagGraph } = useSearchContext()\n\n    const profilesQuery = useInfiniteSearchOffset({\n        queryKey: (state) => searchQueryKeys.profiles(state),\n        queryFn: (liteSearchClient, state, offset, length) => {\n            return queryProfiles(liteSearchClient, state, offset, length)\n        },\n        firstPageSize: 2,\n        laterPageSize: 4,\n        enabled: showProfiles,\n    })\n\n    const profileSlots = Math.min(profilesQuery.totalResults, 2)\n    const profilesRequestDone = !showProfiles || !profilesQuery.isLoading\n\n    const articlesQuery = useInfiniteSearchOffset({\n        queryKey: (state) => searchQueryKeys.articles(state),\n        queryFn: (liteSearchClient, state, offset, length) => {\n            return queryArticles(liteSearchClient, state, offset, length)\n        },\n        firstPageSize: 4 - profileSlots,\n        laterPageSize: 6,\n        enabled: profilesRequestDone,\n    })\n\n    const noArticles = articlesQuery.totalResults === 0\n    const articleSlots = Math.min(articlesQuery.totalResults, 4 - profileSlots)\n    const topicFirstPageSize = 6 - profileSlots - articleSlots\n\n    const dependenciesLoaded = !articlesQuery.isLoading && profilesRequestDone\n\n    const topicsQuery = useInfiniteSearchOffset({\n        queryKey: (state) => searchQueryKeys.topicPages(state),\n        queryFn: (liteSearchClient, state, offset, length) => {\n            return queryTopicPages(\n                liteSearchClient,\n                state,\n                topicTagGraph,\n                offset,\n                length\n            )\n        },\n        firstPageSize: topicFirstPageSize,\n        laterPageSize: noArticles ? 6 : 4,\n        enabled: hasTopicPages && dependenciesLoaded,\n    })\n\n    const hasLargeTopic = topicsQuery.totalResults === 1\n    // Article-level closest matches are only a genuine rescue if the section\n    // as a whole found nothing exact. Topic pages and profiles never go\n    // through the closest-matches fallback (see queryTopicPages/queryProfiles\n    // in queries.ts), so any of their hits are exact — mixing in \"did you\n    // mean\" articles and the closest-matches notice alongside those would\n    // misrepresent an already-successful search as an empty one.\n    const sectionHasExactHitsElsewhere =\n        topicsQuery.totalResults > 0 || profilesQuery.totalResults > 0\n    const suppressArticlesRescue =\n        articlesQuery.isClosestMatches && sectionHasExactHitsElsewhere\n    const showArticlesClosestMatches =\n        articlesQuery.isClosestMatches && !sectionHasExactHitsElsewhere\n    const visibleArticlesTotal = suppressArticlesRescue\n        ? 0\n        : articlesQuery.totalResults\n    const totalCount =\n        visibleArticlesTotal +\n        topicsQuery.totalResults +\n        profilesQuery.totalResults\n    const hasNextPage =\n        articlesQuery.hasNextPage ||\n        topicsQuery.hasNextPage ||\n        profilesQuery.hasNextPage\n    const isFetchingNextPage =\n        articlesQuery.isFetchingNextPage ||\n        topicsQuery.isFetchingNextPage ||\n        profilesQuery.isFetchingNextPage\n    const isLoading =\n        articlesQuery.isLoading ||\n        topicsQuery.isLoading ||\n        profilesQuery.isLoading\n\n    const fetchNextPage = () =>\n        Promise.all([\n            articlesQuery.hasNextPage\n                ? articlesQuery.fetchNextPage()\n                : undefined,\n            topicsQuery.hasNextPage ? topicsQuery.fetchNextPage() : undefined,\n            profilesQuery.hasNextPage\n                ? profilesQuery.fetchNextPage()\n                : undefined,\n        ])\n\n    const articlePages = suppressArticlesRescue\n        ? []\n        : articlesQuery.data?.pages || []\n    const topicPages = topicsQuery.data?.pages || []\n    const visibleArticleHits = suppressArticlesRescue ? [] : articlesQuery.hits\n    const orderedHits: WritingHit[] = [\n        ...profilesQuery.hits,\n        ..._.zip(articlePages, topicPages).flatMap(\n            ([articlePage, topicPage]) => [\n                ...(articlePage?.hits || []),\n                ...(topicPage?.hits || []),\n            ]\n        ),\n    ]\n\n    if (!isLoading && totalCount === 0) return null\n\n    return (\n        <>\n            <section>\n                {isLoading ? (\n                    <SearchWritingResultsSkeleton />\n                ) : (\n                    <>\n                        <SearchResultHeader count={totalCount}>\n                            Research & Writing\n                        </SearchResultHeader>\n                        {showArticlesClosestMatches && (\n                            <SearchClosestMatchesNotice />\n                        )}\n                        {isSmallScreen ? (\n                            <SingleColumnResults\n                                hits={orderedHits}\n                                hasLargeTopic={hasLargeTopic}\n                            />\n                        ) : (\n                            <MultiColumnResults\n                                articles={visibleArticleHits}\n                                topics={topicsQuery.hits}\n                                profiles={profilesQuery.hits}\n                                orderedHits={orderedHits}\n                                hasLargeTopic={hasLargeTopic}\n                            />\n                        )}\n                    </>\n                )}\n            </section>\n            <SearchHorizontalDivider\n                hasButton={!isLoading && hasNextPage}\n                isLoading={isFetchingNextPage}\n                onClick={fetchNextPage}\n            />\n        </>\n    )\n}\n","import { useState } from \"react\"\nimport { useIntersectionObserver, useMediaQuery } from \"usehooks-ts\"\n\nimport { DataInsightHit } from \"@ourworldindata/types\"\nimport { SMALL_BREAKPOINT_MEDIA_QUERY } from \"../SiteConstants.js\"\nimport { queryDataInsights, searchQueryKeys } from \"./queries.js\"\nimport { SearchDataInsightHit } from \"./SearchDataInsightHit.js\"\nimport { SearchResultHeader } from \"./SearchResultHeader.js\"\nimport { useInfiniteSearch } from \"./searchHooks.js\"\nimport { SearchDataInsightsResultsSkeleton } from \"./SearchDataInsightsResultsSkeleton.js\"\nimport { SearchHorizontalDivider } from \"./SearchHorizontalDivider.js\"\nimport { useSearchContext } from \"./SearchContext.js\"\nimport { SearchClosestMatchesNotice } from \"./SearchClosestMatchesNotice.js\"\n\nexport function SearchDataInsightsResults() {\n    const { analytics } = useSearchContext()\n    const isSmallScreen = useMediaQuery(SMALL_BREAKPOINT_MEDIA_QUERY)\n    const query = useInfiniteSearch({\n        queryKey: (state) => searchQueryKeys.dataInsights(state),\n        queryFn: queryDataInsights,\n    })\n\n    // State rather than a ref, so the observer is re-created with the right\n    // root once the container mounts\n    const [container, setContainer] = useState<HTMLDivElement | null>(null)\n    const { ref: triggerRef } = useIntersectionObserver({\n        root: container,\n        // Observe only the x-axis.\n        // https://stackoverflow.com/a/68714239/9846837\n        rootMargin: \"100% 600px 100% 0%\",\n        onChange: (isIntersecting) => {\n            if (isIntersecting && !query.isFetchingNextPage) {\n                void query.fetchNextPage()\n            }\n        },\n    })\n\n    const { hits, totalResults, isLoading, isClosestMatches } = query\n\n    function handleClick(hit: DataInsightHit, position: number) {\n        analytics.logSearchResultClick(hit, {\n            position,\n            source: \"search\",\n        })\n    }\n\n    if (!isLoading && totalResults === 0) return null\n\n    return (\n        <>\n            <section>\n                {isLoading ? (\n                    <SearchDataInsightsResultsSkeleton />\n                ) : (\n                    <>\n                        <SearchResultHeader count={totalResults}>\n                            Data Insights\n                        </SearchResultHeader>\n                        {isClosestMatches && <SearchClosestMatchesNotice />}\n                        <div\n                            ref={setContainer}\n                            className=\"search-data-insights-results__hits\"\n                        >\n                            {hits.map((hit, index) => (\n                                <SearchDataInsightHit\n                                    key={hit.objectID}\n                                    hit={hit}\n                                    onClick={() => handleClick(hit, index + 1)}\n                                />\n                            ))}\n                            {query.hasNextPage && (\n                                <div\n                                    ref={triggerRef}\n                                    className=\"search-data-insights-results__trigger\"\n                                />\n                            )}\n                        </div>\n                    </>\n                )}\n            </section>\n            <SearchHorizontalDivider\n                hasButton={!isLoading && query.hasNextPage && !isSmallScreen}\n                isLoading={query.isFetchingNextPage}\n                onClick={query.fetchNextPage}\n            />\n        </>\n    )\n}\n","import { match } from \"ts-pattern\"\nimport { SearchTopicType } from \"@ourworldindata/types\"\nimport { SearchDataTopicsResults } from \"./SearchDataTopicsResults.js\"\nimport { SearchDataResults } from \"./SearchDataResults.js\"\nimport { useSearchContext } from \"./SearchContext.js\"\nimport { SearchWritingResults } from \"./SearchWritingResults.js\"\nimport { SearchDataInsightsResults } from \"./SearchDataInsightsResults.js\"\n\nexport const SearchTemplatesAll = () => {\n    const { templateConfig } = useSearchContext()\n\n    return (\n        match([\n            templateConfig.topicType,\n            templateConfig.hasCountry,\n            templateConfig.hasQuery,\n        ] as const)\n            // All + Topic + Country + Query\n            .with([SearchTopicType.Topic, true, true], () => (\n                <>\n                    <SearchDataInsightsResults />\n                    <SearchDataResults isFirstChartLarge={true} />\n                    <SearchWritingResults showProfiles={true} />\n                </>\n            ))\n            // All + Topic + Country + No Query\n            .with([SearchTopicType.Topic, true, false], () => (\n                <>\n                    <SearchDataInsightsResults />\n                    <SearchDataResults isFirstChartLarge={false} />\n                    <SearchWritingResults showProfiles={true} />\n                </>\n            ))\n            // All + Topic + No Country + Query\n            .with([SearchTopicType.Topic, false, true], () => (\n                <>\n                    <SearchWritingResults />\n                    <SearchDataResults isFirstChartLarge={true} />\n                    <SearchDataInsightsResults />\n                </>\n            ))\n            // All + Topic + No Country + No Query\n            .with([SearchTopicType.Topic, false, false], () => (\n                <>\n                    <SearchWritingResults />\n                    <SearchDataResults isFirstChartLarge={false} />\n                    <SearchDataInsightsResults />\n                </>\n            ))\n            // All + Area + Country + Query\n            .with([SearchTopicType.Area, true, true], () => (\n                <>\n                    <SearchDataInsightsResults />\n                    <SearchDataResults isFirstChartLarge={true} />\n                    <SearchWritingResults />\n                </>\n            ))\n            // All + Area + Country + No Query\n            .with([SearchTopicType.Area, true, false], () => (\n                <>\n                    <SearchDataInsightsResults />\n                    <SearchDataTopicsResults />\n                    <SearchWritingResults />\n                </>\n            ))\n            // All + Area + No Country + Query\n            .with([SearchTopicType.Area, false, true], () => (\n                <>\n                    <SearchWritingResults />\n                    <SearchDataResults isFirstChartLarge={true} />\n                    <SearchDataInsightsResults />\n                </>\n            ))\n            // All + Area + No Country + No Query\n            .with([SearchTopicType.Area, false, false], () => (\n                <>\n                    <SearchWritingResults />\n                    <SearchDataTopicsResults />\n                    <SearchDataInsightsResults />\n                </>\n            ))\n            // All + No Topic + Country + Query\n            .with([null, true, true], () => (\n                <>\n                    <SearchDataInsightsResults />\n                    <SearchDataResults isFirstChartLarge={true} />\n                    <SearchWritingResults showProfiles={true} />\n                </>\n            ))\n            // All + No Topic + Country + No Query\n            .with([null, true, false], () => (\n                <>\n                    <SearchDataInsightsResults />\n                    <SearchDataTopicsResults />\n                    <SearchWritingResults\n                        hasTopicPages={false}\n                        showProfiles={true}\n                    />\n                </>\n            ))\n            // All + No Topic + No Country + Query\n            .with([null, false, true], () => (\n                <>\n                    <SearchWritingResults />\n                    <SearchDataResults isFirstChartLarge={true} />\n                    <SearchDataInsightsResults />\n                </>\n            ))\n            // All + No Topic + No Country + No Query\n            .with([null, false, false], () => null)\n            .exhaustive()\n    )\n}\n","import { match, P } from \"ts-pattern\"\nimport { SearchTopicType } from \"@ourworldindata/types\"\nimport { useSearchContext } from \"./SearchContext.js\"\nimport { SearchDataResults } from \"./SearchDataResults.js\"\nimport { SearchDataTopicsResults } from \"./SearchDataTopicsResults.js\"\n\nexport const SearchTemplatesData = () => {\n    const { templateConfig } = useSearchContext()\n\n    return (\n        match([\n            templateConfig.topicType,\n            templateConfig.hasCountry,\n            templateConfig.hasQuery,\n            templateConfig.hasDatasetFilters,\n        ] as const)\n            // Dataset filters override all other template logic: always show\n            // flat data results regardless of topic/country/query combination.\n            .with([P._, P._, P._, true], () => (\n                <SearchDataResults isFirstChartLarge={false} />\n            ))\n            // Data + Topic + Country + Query\n            .with([SearchTopicType.Topic, true, true, false], () => (\n                <SearchDataResults isFirstChartLarge={true} />\n            ))\n            // Data + Topic + Country + No Query\n            .with([SearchTopicType.Topic, true, false, false], () => (\n                <SearchDataResults isFirstChartLarge={false} />\n            ))\n            // Data + Topic + No Country + Query\n            .with([SearchTopicType.Topic, false, true, false], () => (\n                <SearchDataResults isFirstChartLarge={true} />\n            ))\n            // Data + Topic + No Country + No Query\n            .with([SearchTopicType.Topic, false, false, false], () => (\n                <SearchDataResults isFirstChartLarge={false} />\n            ))\n            // Data + Area + Country + Query\n            .with([SearchTopicType.Area, true, true, false], () => (\n                <SearchDataResults isFirstChartLarge={true} />\n            ))\n            // Data + Area + Country + No Query\n            .with([SearchTopicType.Area, true, false, false], () => (\n                <SearchDataTopicsResults />\n            ))\n            // Data + Area + No Country + Query\n            .with([SearchTopicType.Area, false, true, false], () => (\n                <SearchDataResults isFirstChartLarge={true} />\n            ))\n            // Data + Area + No Country + No Query\n            .with([SearchTopicType.Area, false, false, false], () => (\n                <SearchDataTopicsResults />\n            ))\n            // Data + No Topic + Country + Query\n            .with([null, true, true, false], () => (\n                <SearchDataResults isFirstChartLarge={true} />\n            ))\n            // Data + No Topic + Country + No Query\n            .with([null, true, false, false], () => <SearchDataTopicsResults />)\n            // Data + No Topic + No Country + Query\n            .with([null, false, true, false], () => (\n                <SearchDataResults isFirstChartLarge={true} />\n            ))\n            // Data + No Topic + No Country + No Query\n            .with([null, false, false, false], () => (\n                <SearchDataTopicsResults />\n            ))\n            .exhaustive()\n    )\n}\n","import { getCanonicalPath } from \"@ourworldindata/components\"\nimport { StackedArticleHit } from \"@ourworldindata/types\"\n\nexport function SearchStackedArticleHit({\n    hit,\n    onClick,\n}: {\n    hit: StackedArticleHit\n    onClick: VoidFunction\n}) {\n    return (\n        <a\n            className=\"search-stacked-article-hit\"\n            href={getCanonicalPath(hit.slug, hit.type)}\n            onClick={onClick}\n        >\n            <article>\n                {hit.thumbnailUrl && (\n                    <img\n                        src={hit.thumbnailUrl}\n                        role=\"presentation\"\n                        className=\"search-stacked-article-hit__image\"\n                        alt=\"\"\n                    />\n                )}\n                <h3 className=\"search-stacked-article-hit__title\">\n                    {hit.title}\n                </h3>\n                {hit.excerpt && (\n                    <span className=\"search-stacked-article-hit__excerpt\">\n                        {hit.excerpt}\n                    </span>\n                )}\n            </article>\n        </a>\n    )\n}\n","import { faArrowRight } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { commafyNumber } from \"@ourworldindata/utils\"\nimport type { StackedArticleHit, TopicPageHit } from \"@ourworldindata/types\"\nimport type { SearchResponse } from \"algoliasearch\"\nimport { useSearchContext } from \"./SearchContext.js\"\nimport { Button, getCanonicalPath } from \"@ourworldindata/components\"\nimport { SearchStackedArticleHit } from \"./SearchStackedArticleHit.js\"\n\nexport const SearchWritingTopic = ({\n    result,\n}: {\n    result: {\n        title: string\n        articles: SearchResponse<StackedArticleHit>\n        topicPages: SearchResponse<TopicPageHit>\n        totalCount: number\n    }\n}) => {\n    const {\n        actions: { setTopic },\n        analytics,\n    } = useSearchContext()\n\n    if (result.totalCount === 0) return null\n\n    function handleAddTopicClick() {\n        setTopic(result.title)\n        window.scrollTo({ top: 0 })\n    }\n\n    function handleHitClick(\n        hit: StackedArticleHit | TopicPageHit,\n        position: number\n    ) {\n        analytics.logSearchResultClick(hit, {\n            position,\n            source: \"ribbon\",\n            ribbonTag: result.title,\n        })\n    }\n\n    return (\n        <section className=\"search-writing-topic-container\">\n            <div className=\"search-writing-topic\">\n                <button\n                    className=\"search-writing-topic__header\"\n                    type=\"button\"\n                    aria-label={`Filter by topic ${result.title}`}\n                    onClick={handleAddTopicClick}\n                >\n                    <h2 className=\"search-writing-topic__title\">\n                        {result.title}\n                    </h2>\n                    <div className=\"search-writing-topic__count\">\n                        {commafyNumber(result.totalCount)} articles and topic\n                        pages\n                        <div className=\"search-writing-topic__arrow\">\n                            <FontAwesomeIcon icon={faArrowRight} />\n                        </div>\n                    </div>\n                </button>\n\n                <div className=\"search-writing-topic__content\">\n                    <div className=\"search-writing-topic__featured-articles\">\n                        <h3 className=\"search-writing-topic__sub-title\">\n                            Featured articles\n                        </h3>\n                        <div className=\"search-writing-featured-articles__list\">\n                            {result.articles.hits.map((hit, index) => (\n                                <SearchStackedArticleHit\n                                    key={hit.objectID}\n                                    hit={hit}\n                                    onClick={() =>\n                                        handleHitClick(hit, index + 1)\n                                    }\n                                />\n                            ))}\n                        </div>\n                    </div>\n\n                    <hr className=\"search-writing-topic__divider\" />\n\n                    <div className=\"search-writing-topic__featured-topic-pages\">\n                        <h3 className=\"search-writing-topic__sub-title\">\n                            Featured topic pages\n                        </h3>\n                        <ul className=\"search-writing-featured-topics__list\">\n                            {result.topicPages.hits.map((hit, index) => (\n                                <li\n                                    key={hit.objectID}\n                                    className=\"search-writing-featured-topics__list-item\"\n                                >\n                                    <a\n                                        className=\"search-writing-topic-link\"\n                                        href={getCanonicalPath(\n                                            hit.slug,\n                                            hit.type\n                                        )}\n                                        onClick={() =>\n                                            handleHitClick(hit, index + 1)\n                                        }\n                                    >\n                                        {hit.title}\n                                        <FontAwesomeIcon\n                                            className=\"search-writing-topic-link__icon\"\n                                            icon={faArrowRight}\n                                        />\n                                    </a>\n                                </li>\n                            ))}\n                        </ul>\n                    </div>\n                </div>\n            </div>\n\n            <Button\n                className=\"search-writing-topic__see-all\"\n                theme=\"solid-light-blue\"\n                text={`See all ${commafyNumber(result.totalCount)} articles and topic pages`}\n                onClick={handleAddTopicClick}\n            />\n        </section>\n    )\n}\n","export const SearchWritingTopicsResultsSkeleton = () => {\n    return (\n        <div className=\"search-writing-topics-results span-cols-12 col-start-2\">\n            <SearchWritingTopicSkeleton />\n            <SearchWritingTopicSkeleton />\n            <SearchWritingTopicSkeleton />\n        </div>\n    )\n}\n\nconst SearchWritingTopicSkeleton = () => (\n    <section className=\"search-writing-topic span-cols-12 col-start-2\">\n        <div className=\"search-writing-topic__header--skeleton animate-pulse\">\n            <div className=\"search-writing-topic__title--skeleton\" />\n            <div className=\"search-writing-topic__count--skeleton\" />\n        </div>\n        <div className=\"search-writing-topic__content animate-pulse\">\n            <div className=\"search-writing-topic__featured-articles--skeleton\">\n                <div className=\"search-writing-topic__sub-title--skeleton\" />\n                <div className=\"search-writing-featured-articles__list\">\n                    <SearchStackedArticleHitSkeleton />\n                    <SearchStackedArticleHitSkeleton />\n                    <SearchStackedArticleHitSkeleton />\n                </div>\n            </div>\n            <div className=\"search-writing-topic__featured-topic-pages\">\n                <div className=\"search-writing-topic__sub-title--skeleton\" />\n                <ul className=\"search-writing-featured-topics__list\">\n                    <SearchWritingTopicLinkSkeleton />\n                    <SearchWritingTopicLinkSkeleton />\n                    <SearchWritingTopicLinkSkeleton />\n                    <SearchWritingTopicLinkSkeleton />\n                    <SearchWritingTopicLinkSkeleton />\n                    <SearchWritingTopicLinkSkeleton />\n                    <SearchWritingTopicLinkSkeleton />\n                    <SearchWritingTopicLinkSkeleton />\n                </ul>\n            </div>\n        </div>\n    </section>\n)\n\nconst SearchStackedArticleHitSkeleton = () => (\n    <div className=\"search-stacked-article-hit-skeleton\">\n        <div className=\"search-stacked-article-hit-skeleton__image\" />\n        <div className=\"search-stacked-article-hit-skeleton__title\" />\n        <div className=\"search-stacked-article-hit-skeleton__excerpt\" />\n    </div>\n)\n\nconst SearchWritingTopicLinkSkeleton = () => (\n    <li className=\"search-writing-topic-link-skeleton\" />\n)\n","import { useQuery } from \"@tanstack/react-query\"\nimport { queryWritingTopics, searchQueryKeys } from \"./queries.js\"\nimport { useSearchContext } from \"./SearchContext.js\"\nimport { useSelectedTopic } from \"./searchHooks.js\"\nimport { SearchWritingTopic } from \"./SearchWritingTopic.js\"\nimport { SearchWritingTopicsResultsSkeleton } from \"./SearchWritingTopicsResultsSkeleton.js\"\n\nexport const SearchWritingTopicsResults = () => {\n    const { state, liteSearchClient, topicTagGraph } = useSearchContext()\n    const selectedTopic = useSelectedTopic()\n\n    const query = useQuery({\n        queryKey: searchQueryKeys.writingTopics(state),\n        queryFn: () =>\n            queryWritingTopics(liteSearchClient, topicTagGraph, selectedTopic),\n    })\n\n    if (query.isLoading) return <SearchWritingTopicsResultsSkeleton />\n    if (!query.data?.length) return null\n\n    return (\n        <div className=\"search-writing-topics-results span-cols-12 col-start-2\">\n            {query.data.map((result) => (\n                <SearchWritingTopic key={result.title} result={result} />\n            ))}\n        </div>\n    )\n}\n","import { match } from \"ts-pattern\"\nimport { useSearchContext } from \"./SearchContext.js\"\nimport { SearchTopicType } from \"@ourworldindata/types\"\nimport { SearchWritingResults } from \"./SearchWritingResults.js\"\nimport { SearchDataInsightsResults } from \"./SearchDataInsightsResults.js\"\nimport { SearchWritingTopicsResults } from \"./SearchWritingTopicsResults.js\"\n\nexport const SearchTemplatesWriting = () => {\n    const { templateConfig } = useSearchContext()\n\n    return (\n        match([\n            templateConfig.topicType,\n            templateConfig.hasCountry,\n            templateConfig.hasQuery,\n        ] as const)\n            // Writing + Topic + Country + Query\n            .with([SearchTopicType.Topic, true, true], () => (\n                <>\n                    <SearchWritingResults showProfiles={true} />\n                    <SearchDataInsightsResults />\n                </>\n            ))\n            // Writing + Topic + Country + No Query\n            .with([SearchTopicType.Topic, true, false], () => (\n                <>\n                    <SearchDataInsightsResults />\n                    <SearchWritingResults showProfiles={true} />\n                </>\n            ))\n            // Writing + Topic + No Country + Query\n            .with([SearchTopicType.Topic, false, true], () => (\n                <>\n                    <SearchWritingResults />\n                    <SearchDataInsightsResults />\n                </>\n            ))\n            // Writing + Topic + No Country + No Query\n            .with([SearchTopicType.Topic, false, false], () => (\n                <>\n                    <SearchWritingResults />\n                    <SearchDataInsightsResults />\n                </>\n            ))\n            // Writing + Area + Country + Query\n            .with([SearchTopicType.Area, true, true], () => (\n                <>\n                    <SearchWritingResults />\n                    <SearchDataInsightsResults />\n                </>\n            ))\n            // Writing + Area + Country + No Query\n            .with([SearchTopicType.Area, true, false], () => (\n                <>\n                    <SearchDataInsightsResults />\n                    <SearchWritingResults />\n                </>\n            ))\n            // Writing + Area + No Country + Query\n            .with([SearchTopicType.Area, false, true], () => (\n                <>\n                    <SearchWritingResults />\n                    <SearchDataInsightsResults />\n                </>\n            ))\n            // Writing + Area + No Country + No Query\n            .with([SearchTopicType.Area, false, false], () => (\n                <>\n                    <SearchWritingResults />\n                    <SearchDataInsightsResults />\n                </>\n            ))\n            // Writing + No Topic + Country + Query\n            .with([null, true, true], () => (\n                <>\n                    <SearchWritingResults showProfiles={true} />\n                    <SearchDataInsightsResults />\n                </>\n            ))\n            // Writing + No Topic + Country + No Query\n            .with([null, true, false], () => (\n                <>\n                    <SearchDataInsightsResults />\n                    <SearchWritingResults\n                        hasTopicPages={false}\n                        showProfiles={true}\n                    />\n                </>\n            ))\n            // Writing + No Topic + No Country + Query\n            .with([null, false, true], () => (\n                <>\n                    <SearchWritingResults />\n                    <SearchDataInsightsResults />\n                </>\n            ))\n            // Writing + No Topic + No Country + No Query\n            .with([null, false, false], () => <SearchWritingTopicsResults />)\n            .exhaustive()\n    )\n}\n","import {\n    TagGraphRoot,\n    FilterType,\n    TemplateConfig,\n    SearchResultType,\n} from \"@ourworldindata/types\"\nimport { faExclamationTriangle } from \"@fortawesome/free-solid-svg-icons\"\nimport { LiteClient } from \"algoliasearch/lite\"\nimport { useMemo, useState } from \"react\"\nimport { match } from \"ts-pattern\"\nimport { useIsFetching } from \"@tanstack/react-query\"\n\n// Utils and hooks\nimport {\n    getFilterNamesOfType,\n    getSelectedTopicType,\n    getEffectiveResultType,\n    hasDatasetFilters,\n    isBrowsing,\n} from \"./searchUtils.js\"\nimport {\n    useTagGraphTopics,\n    useSearchAnalytics,\n    useHasSearchError,\n} from \"./searchHooks.js\"\nimport { stateToSearchParams, useSearchParamsState } from \"./searchState.js\"\n\n// Components\nimport { Searchbar } from \"./Searchbar.js\"\nimport { SearchTopicsRefinementList } from \"./SearchTopicsRefinementList.js\"\nimport { SearchContext } from \"./SearchContext.js\"\nimport { SearchResultTypeToggle } from \"./SearchResultTypeToggle.js\"\nimport { SearchTemplatesAll } from \"./SearchTemplatesAll.js\"\nimport { SearchTemplatesData } from \"./SearchTemplatesData.js\"\nimport { SearchTemplatesWriting } from \"./SearchTemplatesWriting.js\"\nimport { SearchNoResults } from \"./SearchNoResults.js\"\nimport { buildSynonymMap } from \"./synonymUtils.js\"\nimport { SiteAnalytics } from \"../SiteAnalytics.js\"\nimport { PoweredBy } from \"react-instantsearch\"\nimport { listedRegionsNames } from \"@ourworldindata/utils\"\n\nconst analytics = new SiteAnalytics()\n\nexport const Search = ({\n    topicTagGraph,\n    liteSearchClient,\n}: {\n    topicTagGraph: TagGraphRoot\n    liteSearchClient: LiteClient\n}) => {\n    // Extract topic and area data from the graph\n    const { allAreas: eligibleAreas, allTopics: eligibleTopics } =\n        useTagGraphTopics(topicTagGraph)\n\n    const eligibleRegionNames = useMemo(() => listedRegionsNames(), [])\n    const eligibleTopicsAndAreas = useMemo(\n        () => [...eligibleAreas, ...eligibleTopics],\n        [eligibleAreas, eligibleTopics]\n    )\n\n    const synonymMap = useMemo(() => buildSynonymMap(), [])\n\n    // State derived from URL - single source of truth (includes automatic filter detection)\n    const { state, actions } = useSearchParamsState(\n        eligibleRegionNames,\n        eligibleTopicsAndAreas,\n        synonymMap\n    )\n\n    // Handle analytics tracking (skips initial page load)\n    useSearchAnalytics(state, analytics)\n\n    const isFetching = useIsFetching()\n    const hasSearchError = useHasSearchError()\n\n    // The Searchbar is re-mounted whenever the search state changes (see its\n    // key below). Autofocus only the first one, and only if the user is\n    // browsing.\n    const searchbarKey = stateToSearchParams(state).toString()\n    const [autoFocusSearchbarKey, setAutoFocusSearchbarKey] = useState(() =>\n        isBrowsing(state.filters, state.query) ? searchbarKey : undefined\n    )\n    if (\n        autoFocusSearchbarKey !== undefined &&\n        autoFocusSearchbarKey !== searchbarKey\n    ) {\n        setAutoFocusSearchbarKey(undefined)\n    }\n\n    // Derived state for template configuration\n    const topicType = getSelectedTopicType(state.filters, eligibleAreas)\n    const templateConfig: TemplateConfig = {\n        resultType: getEffectiveResultType(\n            state.filters,\n            state.query,\n            state.resultType\n        ),\n        topicType,\n        hasCountry:\n            getFilterNamesOfType(state.filters, FilterType.COUNTRY).size > 0,\n        hasQuery: state.query.length > 0,\n        hasDatasetFilters: hasDatasetFilters(state.filters),\n    }\n\n    return (\n        <SearchContext.Provider\n            value={{\n                state,\n                actions,\n                liteSearchClient,\n                templateConfig,\n                topicTagGraph,\n                synonymMap,\n                analytics,\n            }}\n        >\n            <div className=\"search-controls-container span-cols-12 col-start-2\">\n                <Searchbar\n                    // force a component re-mount to sync local query state when\n                    // global state updates. This is relevant in two cases:\n                    // - a new global query is set (e.g. via autocomplete\n                    //   selection)\n                    // - filters are added/removed while an uncommitted local\n                    //   query exists (e.g. selecting a country from the country\n                    //   selector). In this case, we want to reset the local\n                    //   query to match the global one, discarding any\n                    //   uncommitted changes.\n                    key={searchbarKey}\n                    autoFocus={searchbarKey === autoFocusSearchbarKey}\n                    allTopics={eligibleTopics}\n                />\n            </div>\n            <div className=\"search-filters span-cols-12 col-start-2\">\n                <SearchTopicsRefinementList topicType={topicType} />\n                <SearchResultTypeToggle />\n            </div>\n            <div className=\"search-template-results col-start-2 span-cols-12\">\n                {/* SearchNoResults is hidden by CSS unless it ends up being\n                    the only child of this container, i.e. unless none of the\n                    result sections below rendered anything. */}\n                {!isFetching &&\n                    (hasSearchError ? (\n                        <SearchNoResults\n                            heading=\"Search is temporarily unavailable.\"\n                            subtitle={\n                                <p className=\"body-3-medium\">\n                                    Please try again later.\n                                </p>\n                            }\n                            icon={faExclamationTriangle}\n                        />\n                    ) : (\n                        <SearchNoResults />\n                    ))}\n                {match(templateConfig.resultType)\n                    .with(SearchResultType.ALL, () => <SearchTemplatesAll />)\n                    .with(SearchResultType.DATA, () => <SearchTemplatesData />)\n                    .with(SearchResultType.WRITING, () => (\n                        <SearchTemplatesWriting />\n                    ))\n                    .exhaustive()}\n            </div>\n            <PoweredBy\n                className=\"col-start-2 span-cols-12\"\n                style={{ width: \"200px\", marginTop: \"32px\" }}\n            />\n        </SearchContext.Provider>\n    )\n}\n","import { TagGraphRoot } from \"@ourworldindata/types\"\nimport { QueryClientProvider } from \"@tanstack/react-query\"\nimport { Search } from \"./Search.js\"\nimport { getLiteSearchClient } from \"./searchClients.js\"\nimport { getSiteQueryClient } from \"../queryClient.js\"\n\nexport const SearchWrapper = ({\n    topicTagGraph,\n}: {\n    topicTagGraph: TagGraphRoot\n}) => {\n    const queryClient = getSiteQueryClient()\n    const liteSearchClient = getLiteSearchClient()\n\n    return (\n        <QueryClientProvider client={queryClient}>\n            <Search\n                topicTagGraph={topicTagGraph}\n                liteSearchClient={liteSearchClient}\n            />\n        </QueryClientProvider>\n    )\n}\n","import { DebugContext } from \"./DebugContext.js\"\n\nexport function DebugProvider({\n    children,\n    debug = false,\n}: {\n    children: React.ReactNode\n    debug?: boolean\n}) {\n    return (\n        <DebugContext.Provider value={debug}>{children}</DebugContext.Provider>\n    )\n}\n","import React, { useState, useCallback, ReactNode } from \"react\"\nimport { AriaAnnouncerContext } from \"./AriaAnnouncerUtils.js\"\n\nexport const AriaAnnouncerProvider: React.FC<{ children: ReactNode }> = ({\n    children,\n}) => {\n    const [announcement, setAnnouncement] = useState(\"\")\n\n    const announce = useCallback((message: string) => {\n        setTimeout(() => {\n            setAnnouncement(message)\n            setTimeout(() => {\n                setAnnouncement(\"\")\n            }, 2000)\n        }, 100)\n    }, [])\n\n    return (\n        <AriaAnnouncerContext.Provider value={{ announce, announcement }}>\n            {children}\n        </AriaAnnouncerContext.Provider>\n    )\n}\n","import React from \"react\"\nimport { useAriaAnnouncer } from \"./AriaAnnouncerUtils.js\"\n\nexport const AriaAnnouncer: React.FC = () => {\n    const { announcement } = useAriaAnnouncer()\n\n    return (\n        <div\n            className=\"aria-announcer\"\n            aria-live=\"assertive\"\n            aria-atomic=\"true\"\n            role=\"status\"\n            style={{\n                position: \"absolute\",\n                left: \"-10000px\",\n                width: \"1px\",\n                height: \"1px\",\n                overflow: \"hidden\",\n            }}\n        >\n            {announcement}\n        </div>\n    )\n}\n","export default function TopicTags({\n    className,\n    topicTagsLinks,\n    tagToSlugMap,\n}: {\n    className?: string\n    topicTagsLinks?: string[]\n    tagToSlugMap: Record<string, string>\n}) {\n    // TODO (DB): mark topic pages\n    const tags = topicTagsLinks\n        ?.map((name) => ({ name, slug: tagToSlugMap[name] }))\n        .filter((tag) => !!tag.slug)\n    if (!tags?.length) return null\n\n    return (\n        <div className={className}>\n            <div className=\"topic-tags__label\">\n                See all data and research on:\n            </div>\n            <div className=\"topic-tags\">\n                {tags.map(({ name, slug }) => (\n                    <a key={slug} className=\"topic-tag\" href={`/${slug}`}>\n                        {name}\n                    </a>\n                ))}\n            </div>\n        </div>\n    )\n}\n","import cx from \"clsx\"\nimport { useMemo } from \"react\"\nimport { useMediaQuery } from \"usehooks-ts\"\n\nimport { MultiDimDimensionChoices } from \"@ourworldindata/types\"\nimport { MultiDimDataPageConfig } from \"@ourworldindata/utils\"\nimport { SMALL_BREAKPOINT_MEDIA_QUERY } from \"../SiteConstants.js\"\nimport { useResolvedSettings } from \"./multiDimSettings.js\"\nimport MultiDimDropdowns from \"./MultiDimDropdowns.js\"\n\nexport const MultiDimSettingsPanel = ({\n    className,\n    config,\n    settings,\n    onChange,\n    disabled,\n}: {\n    className?: string\n    config: MultiDimDataPageConfig\n    settings: MultiDimDimensionChoices\n    onChange: (settings: MultiDimDimensionChoices) => void\n    disabled?: boolean\n}) => {\n    const { dimensions } = config\n    const isSmallScreen = useMediaQuery(SMALL_BREAKPOINT_MEDIA_QUERY)\n    const resolvedSettings = useResolvedSettings(settings, dimensions)\n\n    const availableSettings = useMemo(() => {\n        return config.filterToAvailableChoices(resolvedSettings)\n            .dimensionsWithAvailableChoices\n    }, [resolvedSettings, config])\n\n    let collapsedCount = Number.POSITIVE_INFINITY\n    if (isSmallScreen) {\n        const length = Object.values(availableSettings).length\n        collapsedCount = length > 3 ? 2 : length\n    }\n\n    return (\n        <div className={cx(\"md-settings-row\", className)}>\n            <div className=\"h5-black-caps md-settings__configure-data\">\n                Configure the data\n            </div>\n            <MultiDimDropdowns\n                className=\"md-settings__dropdowns\"\n                availableSettings={availableSettings}\n                resolvedSettings={resolvedSettings}\n                onChange={onChange}\n                collapsedCount={collapsedCount}\n                disabled={disabled}\n            />\n        </div>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport { unstable_batchedUpdates } from \"react-dom\"\nimport { useSearchParams } from \"react-router-dom-v5-compat\"\nimport * as Sentry from \"@sentry/react\"\nimport { useIsClient } from \"usehooks-ts\"\nimport {\n    Grapher,\n    GrapherState,\n    getCachingInputTableFetcher,\n    GrapherManager,\n    loadCatalogData,\n    useElementBounds,\n} from \"@ourworldindata/grapher\"\nimport {\n    getMultiDimPageTitle,\n    joinTitleFragments,\n    MultiDimDataPageConfig,\n    extractMultiDimChoicesFromSearchParams,\n    isInIFrame,\n} from \"@ourworldindata/utils\"\nimport {\n    ArchiveContext,\n    DataPageRelatedResearch,\n    FaqEntryKeyedByGdocIdAndFragmentId,\n    GRAPHER_TAB_QUERY_PARAMS,\n    GrapherQueryParams,\n    HIDE_IF_JS_DISABLED_CLASSNAME,\n    HIDE_IF_JS_ENABLED_CLASSNAME,\n    ImageMetadata,\n    MultiDimDataPageConfigEnriched,\n    MultiDimDimensionChoices,\n    MultiDimDataPageInitialViewData,\n    PrimaryTopic,\n} from \"@ourworldindata/types\"\nimport AboutThisData from \"../AboutThisData.js\"\nimport TopicTags from \"../TopicTags.js\"\nimport MetadataSection from \"../MetadataSection.js\"\nimport DownloadSection from \"../DownloadSection.js\"\nimport GrapherImage from \"../GrapherImage.js\"\nimport { useMobxStateToReactState } from \"../hooks.js\"\nimport { MultiDimSettingsPanel } from \"./MultiDimDataPageSettingsPanel.js\"\nimport { getDatapageDataV2, processRelatedResearch } from \"../dataPage.js\"\nimport DataPageResearchAndWriting from \"../DataPageResearchAndWriting.js\"\nimport { AttachmentsContext } from \"../gdocs/AttachmentsContext.js\"\nimport {\n    cachedGetGrapherConfigByUuid,\n    cachedGetVariableMetadata,\n} from \"./api.js\"\nimport MultiDim from \"./MultiDim.js\"\nimport { useBaseGrapherConfig, useMultiDimAnalytics } from \"./hooks.js\"\nimport {\n    DATA_API_URL,\n    BAKED_GRAPHER_URL,\n    ADMIN_BASE_URL,\n    CATALOG_URL,\n} from \"../../settings/clientSettings.mjs\"\n\nexport const OWID_DATAPAGE_CONTENT_ROOT_ID = \"owid-datapageJson-root\"\nconst isIframe = isInIFrame()\n\nconst useTitleFragments = (config: MultiDimDataPageConfig) => {\n    const title = config.config.title\n    return useMemo(\n        () => joinTitleFragments(title.attributionShort, title.titleVariant),\n        [title]\n    )\n}\n\nexport type MultiDimDataPageContentProps = {\n    canonicalUrl: string\n    slug: string | null\n    config: MultiDimDataPageConfig\n    tagToSlugMap?: Record<string, string>\n    faqEntries?: FaqEntryKeyedByGdocIdAndFragmentId\n    primaryTopic?: PrimaryTopic\n    topicArea?: string\n    relatedResearchCandidates: DataPageRelatedResearch[]\n    imageMetadata: Record<string, ImageMetadata>\n    isPreviewing?: boolean\n    archiveContext?: ArchiveContext\n    initialViewData?: MultiDimDataPageInitialViewData\n    initialViewDimensions?: MultiDimDimensionChoices\n}\n\nexport type MultiDimDataPageData = Omit<\n    MultiDimDataPageContentProps,\n    \"config\"\n> & {\n    configObj: MultiDimDataPageConfigEnriched\n}\n\ndeclare global {\n    interface Window {\n        _OWID_MULTI_DIM_PROPS?: MultiDimDataPageData\n    }\n}\n\nexport function DataPageContent({\n    slug,\n    canonicalUrl,\n    config,\n    isPreviewing,\n    faqEntries,\n    primaryTopic,\n    topicArea,\n    relatedResearchCandidates,\n    tagToSlugMap,\n    imageMetadata,\n    archiveContext,\n    initialViewData,\n    initialViewDimensions,\n}: MultiDimDataPageContentProps) {\n    const assetMap =\n        archiveContext?.type === \"archive-page\"\n            ? archiveContext.assets.runtime\n            : undefined\n    // A non-empty manager is used in the size calculations\n    // within grapher, so we have to initialize it early with\n    // a truthy value\n    const managerRef = useRef<GrapherManager>({})\n    const grapherStateRef = useRef<GrapherState>(\n        new GrapherState({\n            additionalDataLoaderFn: (catalogKey) =>\n                loadCatalogData(catalogKey, {\n                    baseUrl: CATALOG_URL,\n                    assetMap,\n                }),\n            manager: managerRef.current,\n            archiveContext,\n            isConfigReady: false,\n        })\n    )\n    const grapherFigureRef = useRef<HTMLDivElement>(null)\n    const [searchParams, setSearchParams] = useSearchParams()\n    const [varDatapageData, setVarDatapageData] =\n        useState<MultiDimDataPageInitialViewData | null>(\n            initialViewData ?? null\n        )\n    const isClient = useIsClient()\n\n    // Workaround to prevent a race condition when switching between views.\n    // https://github.com/owid/owid-grapher/issues/5727\n    const [isLoadingView, setIsLoadingView] = useState(false)\n\n    const inputTableFetcher = useMemo(\n        () =>\n            getCachingInputTableFetcher(\n                DATA_API_URL,\n                archiveContext,\n                isPreviewing\n            ),\n        [archiveContext, isPreviewing]\n    )\n\n    const titleFragments = useTitleFragments(config)\n    const additionalConfig = useMemo(\n        () => ({ archiveContext }),\n        [archiveContext]\n    )\n    const baseGrapherConfig = useBaseGrapherConfig(additionalConfig)\n\n    const settings = useMemo(() => {\n        const choices = extractMultiDimChoicesFromSearchParams(\n            searchParams,\n            config\n        )\n        return config.filterToAvailableChoices(choices).selectedChoices\n    }, [searchParams, config])\n\n    const displayedSettings = isClient\n        ? settings\n        : (initialViewDimensions ?? settings)\n    const displayedSearchParams = isClient\n        ? searchParams\n        : new URLSearchParams(initialViewDimensions)\n    const fallbackQueryString = initialViewDimensions\n        ? `?${new URLSearchParams(initialViewDimensions).toString()}`\n        : \"\"\n\n    const updateGrapher = useCallback(\n        (\n            grapherState: GrapherState,\n            settings: MultiDimDimensionChoices,\n            grapherQueryParams: GrapherQueryParams\n        ) => {\n            const newView = config.findViewByDimensions(settings)\n            if (!newView) return\n\n            const variableId = newView.indicators?.[\"y\"]?.[0]?.id\n            if (!variableId) return\n\n            grapherState.isDataReady = false\n            setIsLoadingView(true)\n\n            const variableMetadataPromise = cachedGetVariableMetadata(\n                variableId,\n                Boolean(isPreviewing),\n                assetMap\n            )\n            const grapherConfigUuid = newView.fullConfigId\n\n            const grapherConfigPromise = cachedGetGrapherConfigByUuid(\n                grapherConfigUuid,\n                Boolean(isPreviewing),\n                assetMap\n            )\n            const analyticsContext = {\n                slug: slug!,\n                viewConfigId: grapherConfigUuid,\n            }\n            managerRef.current.analyticsContext = analyticsContext\n            managerRef.current.adminCreateNarrativeChartPath = `narrative-charts/create?type=multiDim&chartConfigId=${grapherConfigUuid}`\n\n            void Promise.all([variableMetadataPromise, grapherConfigPromise])\n                .then(async ([variableMetadata, grapherConfig]) => {\n                    const mergedMetadata = config.mergeViewMetadata(\n                        settings,\n                        variableMetadata\n                    )\n                    setVarDatapageData({\n                        ...getDatapageDataV2(mergedMetadata, grapherConfig),\n                        faqs: mergedMetadata.presentation?.faqs ?? [],\n                    })\n\n                    const grapherConfigWithBase = {\n                        ...grapherConfig,\n                        ...baseGrapherConfig,\n                    }\n                    const loadDataPromise = inputTableFetcher(\n                        grapherConfig.dimensions!,\n                        grapherConfig.selectedEntityColors\n                    ).then((inputTable) => {\n                        if (inputTable) grapherState.inputTable = inputTable\n                    })\n\n                    if (slug) {\n                        grapherConfigWithBase.slug = slug // Needed for the URL used for sharing.\n                    }\n                    // Batch the grapher updates to avoid getting intermediate\n                    // grapherChangedParams values, which make the URL update\n                    // multiple times while flashing.\n                    // https://stackoverflow.com/a/48610973/9846837\n\n                    const previousTab = grapherState.activeTab\n\n                    // TODO we may not need to this anymore in React 18.\n                    unstable_batchedUpdates(() => {\n                        grapherState.setAuthoredVersion(grapherConfigWithBase)\n                        grapherState.reset()\n                        grapherState.updateFromObject(grapherConfigWithBase)\n                        grapherState.isConfigReady = true\n\n                        grapherState.populateFromQueryParams(grapherQueryParams)\n                    })\n\n                    // The below code needs to run after the data has been loaded, so that it has access\n                    // to the table and its time range\n                    await loadDataPromise\n\n                    grapherState.isDataReady = true\n\n                    // When switching between mdim views, we usually preserve the tab.\n                    // However, if the new chart doesn't support the previously selected tab,\n                    // Grapher automatically switches to a supported one. In such cases,\n                    // we call adjustStateForTab to make adjustments that ensure the new view\n                    // is sensible (e.g. updating the time selection when switching from a\n                    // single-time chart like a discrete bar chart to a multi-time chart like\n                    // a line chart).\n                    const currentTab = grapherState.activeTab\n                    if (previousTab !== currentTab)\n                        grapherState.adjustStateForTab(currentTab)\n                })\n                .catch(Sentry.captureException)\n                .finally(() => setIsLoadingView(false))\n        },\n        [\n            assetMap,\n            config,\n            inputTableFetcher,\n            isPreviewing,\n            slug,\n            baseGrapherConfig,\n        ]\n    )\n\n    const handleSettingsChange = useCallback(\n        (settings: MultiDimDimensionChoices) => {\n            const grapher = grapherStateRef.current\n            if (!grapher) return\n\n            const { selectedChoices } =\n                config.filterToAvailableChoices(settings)\n            const newSearchParams = {\n                ...grapher.changedParams,\n                ...selectedChoices,\n            }\n            const newGrapherParams: GrapherQueryParams = {\n                ...newSearchParams,\n                // Pass the previous tab to grapher, but don't set it in URL. We\n                // want it set only when it's not the default, which is handled\n                // by effect that depends on `grapherChangedParams`.\n                tab: grapher.mapGrapherTabToQueryParam(grapher.activeTab),\n            }\n\n            // reset map state if switching to a chart\n            if (newGrapherParams.tab !== GRAPHER_TAB_QUERY_PARAMS.map) {\n                newGrapherParams.globe = \"0\"\n                newGrapherParams.mapSelect = \"\"\n            }\n\n            setSearchParams(newSearchParams, { replace: true })\n            updateGrapher(grapher, selectedChoices, newGrapherParams)\n        },\n        [config, setSearchParams, updateGrapher]\n    )\n\n    useMultiDimAnalytics(slug, config, settings)\n\n    // Set state from query params on page load.\n    useEffect(() => {\n        const grapher = grapherStateRef.current\n        if (!grapher) return\n        const queryParams = {\n            // On first page load, query params may be empty but settings are\n            // already correctly computed, so include them (e.g. for embed\n            // URLs).\n            ...Object.fromEntries(searchParams.entries()),\n            ...settings,\n        }\n        // this is not taking into account what used to be passed as \"manager\"\n        grapher.externalBounds = bounds\n        grapher.bakedGrapherURL = BAKED_GRAPHER_URL\n        grapher.adminBaseUrl = ADMIN_BASE_URL\n        updateGrapher(grapher, settings, queryParams)\n        // NOTE (Martin): This is the only way I was able to set the initial\n        // state on page load. Reconsider after the Grapher state refactor, i.e.\n        // when we decouple Grapher state from the Grapher components. Adding\n        // deps properly to the dep array leads to an infinite loop.\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [])\n\n    // De-mobx grapher.changedParams by transforming it into React state\n    const grapherChangedParams = useMobxStateToReactState(\n        useCallback(() => grapherStateRef.current?.changedParams, []),\n        !!grapherStateRef.current\n    )\n\n    useEffect(() => {\n        if (grapherChangedParams) {\n            setSearchParams(\n                { ...grapherChangedParams, ...settings },\n                { replace: true }\n            )\n        }\n    }, [grapherChangedParams, settings, setSearchParams])\n\n    const grapherCurrentTitle = useMobxStateToReactState(\n        useCallback(() => grapherStateRef.current?.fullTitle, []),\n        !!grapherStateRef.current\n    )\n\n    const fullTitle = useMemo(() => {\n        const grapherTitle = grapherCurrentTitle\n        if (!grapherTitle) return undefined\n        const mdimTitle = getMultiDimPageTitle(config.config.title)\n        return `${grapherTitle} | ${mdimTitle} | Our World in Data`\n    }, [grapherCurrentTitle, config.config.title])\n\n    useEffect(() => {\n        if (fullTitle) {\n            document.title = fullTitle\n        }\n    }, [fullTitle])\n\n    const bounds = useElementBounds(grapherFigureRef)\n\n    useEffect(() => {\n        if (bounds) {\n            grapherStateRef.current.externalBounds = bounds\n        }\n    }, [bounds])\n\n    const hasTopicTags = !!config.config.topicTags?.length\n\n    const relatedResearch = useMemo(\n        () =>\n            processRelatedResearch(\n                relatedResearchCandidates ?? [],\n                config.config.topicTags ?? []\n            ),\n        [relatedResearchCandidates, config.config.topicTags]\n    )\n\n    const faqEntriesForView = useMemo(() => {\n        return _.compact(\n            varDatapageData?.faqs?.flatMap(\n                (faq) => faqEntries?.faqs?.[faq.gdocId]?.[faq.fragmentId]\n            )\n        )\n    }, [varDatapageData?.faqs, faqEntries])\n\n    const tableForDownload = useMobxStateToReactState(\n        useCallback(() => grapherStateRef.current?.tableForDownload, []),\n        !!grapherStateRef.current\n    )\n    const filteredTableForDownload = useMobxStateToReactState(\n        useCallback(\n            () => grapherStateRef.current?.filteredTableForDownload,\n            []\n        ),\n        !!grapherStateRef.current\n    )\n    const yColumns = useMobxStateToReactState(\n        useCallback(\n            () => grapherStateRef.current?.yColumnsFromDimensionsOrSlugsOrAuto,\n            []\n        ),\n        !!grapherStateRef.current\n    )\n\n    const downloadSection = slug ? (\n        <DownloadSection\n            slug={slug}\n            baseUrl={`${BAKED_GRAPHER_URL}/${slug}`}\n            searchParams={displayedSearchParams}\n            externalQueryParams={displayedSettings}\n            tableForDownload={tableForDownload}\n            filteredTableForDownload={filteredTableForDownload}\n            yColumns={yColumns}\n            hideRowCounts={!isClient}\n            archivedChartInfo={archiveContext}\n        />\n    ) : undefined\n\n    return (\n        <AttachmentsContext.Provider\n            value={{\n                linkedDocuments: {},\n                imageMetadata,\n                linkedCharts: {},\n                linkedIndicators: {},\n                relatedCharts: [],\n                tags: [],\n            }}\n        >\n            <div className=\"DataPageContent MultiDimDataPageContent grid grid-cols-12-full-width\">\n                <div className=\"bg-blue-10 span-cols-14\">\n                    <div className=\"header__wrapper grid grid-cols-12-full-width\">\n                        <div className=\"header__left col-start-2 span-cols-8 col-sm-start-2 span-sm-cols-12\">\n                            <div className=\"header__supertitle\">Data</div>\n                            <h1 className=\"header__title\">\n                                {config.config.title.title}\n                            </h1>\n                            <div className=\"header__source\">\n                                {titleFragments}\n                            </div>\n                        </div>\n                        {hasTopicTags && tagToSlugMap && (\n                            <TopicTags\n                                className=\"header__right col-start-10 span-cols-4 col-sm-start-2 span-sm-cols-12\"\n                                topicTagsLinks={config.config.topicTags ?? []}\n                                tagToSlugMap={tagToSlugMap}\n                            />\n                        )}\n                        <div className=\"settings-row__wrapper col-start-2 span-cols-12 col-sm-start-2 span-sm-cols-12\">\n                            <MultiDimSettingsPanel\n                                config={config}\n                                settings={displayedSettings}\n                                onChange={handleSettingsChange}\n                                disabled={isLoadingView}\n                            />\n                        </div>\n                    </div>\n                </div>\n\n                <div className=\"span-cols-14 grid grid-cols-12-full-width full-width--border\">\n                    <div className=\"chart-key-info col-start-2 span-cols-12\">\n                        <div\n                            id=\"explore-the-data\"\n                            className=\"GrapherWithFallback full-width-on-mobile\"\n                        >\n                            <figure\n                                className={HIDE_IF_JS_DISABLED_CLASSNAME}\n                                data-grapher-src\n                                ref={grapherFigureRef}\n                            >\n                                <Grapher\n                                    grapherState={grapherStateRef.current}\n                                />\n                            </figure>\n                            {slug && (\n                                <figure\n                                    className={`${HIDE_IF_JS_ENABLED_CLASSNAME} GrapherWithFallback__fallback`}\n                                >\n                                    <GrapherImage\n                                        slug={slug}\n                                        queryString={fallbackQueryString}\n                                        alt={config.config.title.title}\n                                        enablePopulatingUrlParams\n                                    />\n                                    <p>\n                                        Interactive visualization requires\n                                        JavaScript.\n                                    </p>\n                                </figure>\n                            )}\n                        </div>\n                        {varDatapageData && (\n                            <AboutThisData\n                                datapageData={varDatapageData}\n                                hasFaq={!!faqEntriesForView?.length}\n                                topicArea={topicArea}\n                            />\n                        )}\n                    </div>\n                </div>\n                <div className=\"col-start-2 span-cols-12\">\n                    {relatedResearch && relatedResearch.length > 0 && (\n                        <DataPageResearchAndWriting\n                            relatedResearch={relatedResearch}\n                        />\n                    )}\n                </div>\n                {varDatapageData && (\n                    <MetadataSection\n                        attributionShort={varDatapageData.attributionShort}\n                        attributions={varDatapageData.attributions}\n                        canonicalUrl={canonicalUrl}\n                        descriptionProcessing={\n                            varDatapageData.descriptionProcessing\n                        }\n                        faqEntries={{ faqs: faqEntriesForView }}\n                        license={varDatapageData.license}\n                        origins={varDatapageData.origins}\n                        owidProcessingLevel={\n                            varDatapageData.owidProcessingLevel\n                        }\n                        primaryTopic={primaryTopic}\n                        source={varDatapageData.source}\n                        title={varDatapageData.title}\n                        titleVariant={varDatapageData.titleVariant}\n                        archiveContext={archiveContext}\n                        downloadSection={downloadSection}\n                    />\n                )}\n            </div>\n        </AttachmentsContext.Provider>\n    )\n}\n\nexport function MultiDimDataPageContent({\n    slug,\n    canonicalUrl,\n    config,\n    isPreviewing,\n    faqEntries,\n    primaryTopic,\n    topicArea,\n    relatedResearchCandidates,\n    tagToSlugMap,\n    imageMetadata,\n    archiveContext,\n    initialViewData,\n    initialViewDimensions,\n}: MultiDimDataPageContentProps) {\n    return isIframe ? (\n        <MultiDim\n            config={config}\n            slug={slug}\n            queryStr={location.search}\n            archiveContext={archiveContext}\n            isPreviewing={isPreviewing}\n        />\n    ) : (\n        <DataPageContent\n            slug={slug}\n            canonicalUrl={canonicalUrl}\n            config={config}\n            isPreviewing={isPreviewing}\n            faqEntries={faqEntries}\n            primaryTopic={primaryTopic}\n            topicArea={topicArea}\n            relatedResearchCandidates={relatedResearchCandidates}\n            tagToSlugMap={tagToSlugMap}\n            imageMetadata={imageMetadata}\n            archiveContext={archiveContext}\n            initialViewData={initialViewData}\n            initialViewDimensions={initialViewDimensions}\n        />\n    )\n}\n","import { TagGraphNode } from \"@ourworldindata/utils\"\n\nexport const SiteNavigationTopic = ({ topic }: { topic: TagGraphNode }) => {\n    return (\n        <li className=\"SiteNavigationTopic\">\n            <a href={`/${topic.slug}`} data-track-note=\"header_navigation\">\n                <span className=\"label\">{topic.name}</span>\n            </a>\n        </li>\n    )\n}\n","import React, { useState } from \"react\"\nimport {\n    TagGraphNode,\n    TagGraphRoot,\n    getAllChildrenOfArea,\n} from \"@ourworldindata/utils\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faArrowRight } from \"@fortawesome/free-solid-svg-icons\"\nimport classnames from \"clsx\"\nimport { SiteNavigationTopic } from \"./SiteNavigationTopic.js\"\n\nexport const SiteNavigationTopics = ({\n    tagGraph,\n    onClose,\n    className,\n}: {\n    tagGraph?: TagGraphRoot\n    onClose: () => void\n    className?: string\n}) => {\n    const [activeArea, setActiveArea] = useState<TagGraphNode | null>(\n        tagGraph?.children[0] || null\n    )\n\n    // calculate the number of 10 topic columns we need based on the number of topics\n    const numTopicColumns = activeArea\n        ? Math.ceil(\n              getAllChildrenOfArea(activeArea).filter((topic) => topic.slug)\n                  .length / 10\n          )\n        : 1\n\n    const stopPropagation = (e: React.MouseEvent) => {\n        e.stopPropagation()\n    }\n\n    return tagGraph?.children ? (\n        <div\n            className={classnames(\"SiteNavigationTopics\", className)}\n            // hack: this is to make sure the overlay is closed when clicking\n            // the - visually - empty space to the right of the topics menu. A\n            // click on the overlay in this area looks like a click on the\n            // overlay but is actually a click on the remaining grid columns of\n            // the menu. We then need to use stopPropagation to prevent clicks\n            // within the visible portion of the menu to bubble up and close the\n            // menu (and the overlay).\n            onClick={onClose}\n        >\n            <div className=\"categories\" onClick={stopPropagation}>\n                <div className=\"heading\">Browse by topic</div>\n                <ul>\n                    {tagGraph.children.map((area) => (\n                        <li key={area.id}>\n                            <button\n                                aria-label={`Toggle ${area.name} sub-menu`}\n                                onClick={() => {\n                                    setActiveArea(area)\n                                }}\n                                className={classnames({\n                                    active: area === activeArea,\n                                })}\n                            >\n                                <span>{area.name}</span>\n                                <FontAwesomeIcon icon={faArrowRight} />\n                            </button>\n                        </li>\n                    ))}\n                </ul>\n            </div>\n            {activeArea && (\n                <ul\n                    className={classnames(\"topics\", {\n                        \"columns-medium\": numTopicColumns === 2,\n                        \"columns-large\": numTopicColumns > 2,\n                    })}\n                    onClick={stopPropagation}\n                >\n                    {getAllChildrenOfArea(activeArea)\n                        .filter((topic) => topic.slug)\n                        .map((topic) => (\n                            <SiteNavigationTopic key={topic.id} topic={topic} />\n                        ))}\n                </ul>\n            )}\n        </div>\n    ) : null\n}\n","import { ABOUT_LINKS } from \"./SiteConstants.js\"\n\nexport function SiteAbout() {\n    return (\n        <ul>\n            {ABOUT_LINKS.map(({ title, url }) => (\n                <li key={url}>\n                    <a href={url}>{title}</a>\n                </li>\n            ))}\n        </ul>\n    )\n}\n","import { buildLatestPagePath } from \"./latest/latestUtils.js\"\n\nexport const SiteResources = () => {\n    return (\n        <ul>\n            <li>\n                <a href={buildLatestPagePath(\"data-insight\")}>Data Insights</a>\n            </li>\n            <li>\n                <a href=\"/explorers\">Data Explorers</a>\n            </li>\n            <li>\n                <a href=\"/sdgs\">SDG Tracker</a>\n            </li>\n            <li>\n                <a href=\"/teaching\">Teaching with OWID</a>\n            </li>\n        </ul>\n    )\n}\n","import cx from \"clsx\"\nimport { Autocomplete } from \"./search/Autocomplete.js\"\n\nexport const SiteSearchNavigation = ({\n    isActive,\n    onClose,\n    onActivate,\n    isPreviewing,\n}: {\n    isActive: boolean\n    onClose: VoidFunction\n    onActivate: VoidFunction\n    isPreviewing?: boolean\n}) => {\n    return (\n        <div className={cx(\"SiteSearchNavigation\", { active: isActive })}>\n            <Autocomplete\n                onActivate={onActivate}\n                onClose={onClose}\n                placeholder=\"Search for a topic, chart or article...\"\n                isPreviewing={isPreviewing}\n                searchSource=\"topnav\"\n            />\n        </div>\n    )\n}\n","import * as React from \"react\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faCaretDown } from \"@fortawesome/free-solid-svg-icons\"\nimport { SiteNavigationTopic } from \"./SiteNavigationTopic.js\"\nimport { TagGraphNode, getAllChildrenOfArea } from \"@ourworldindata/utils\"\nimport { getPrefersReducedMotion } from \"@ourworldindata/components\"\nimport { MOBILE_MENU_DETAILS_NAME } from \"./SiteConstants.js\"\n\nexport const SiteMobileArea = ({ area }: { area: TagGraphNode }) => {\n    const scrollAreaIntoView = (\n        event: React.ToggleEvent<HTMLDetailsElement>\n    ) => {\n        if (event.newState !== \"open\") return\n        const rect = event.currentTarget.getBoundingClientRect()\n        const isFullyVisible =\n            rect.top >= 0 && rect.bottom <= window.innerHeight\n        if (isFullyVisible) return\n        event.currentTarget.scrollIntoView({\n            behavior: getPrefersReducedMotion() ? \"auto\" : \"smooth\",\n        })\n    }\n\n    return (\n        <li className=\"SiteMobileArea\">\n            <details\n                name={MOBILE_MENU_DETAILS_NAME}\n                onToggle={scrollAreaIntoView}\n            >\n                <summary className=\"SiteMobileArea__summary\">\n                    {area.name}\n                    <FontAwesomeIcon\n                        className=\"SiteMobileMenu__caret\"\n                        icon={faCaretDown}\n                    />\n                </summary>\n                <div className=\"SiteMobileMenu__dropdown\">\n                    <ul>\n                        {getAllChildrenOfArea(area)\n                            .filter((topic) => topic.slug)\n                            .map((topic) => (\n                                <SiteNavigationTopic\n                                    key={topic.id}\n                                    topic={topic}\n                                />\n                            ))}\n                    </ul>\n                </div>\n            </details>\n        </li>\n    )\n}\n","import * as React from \"react\"\nimport { useEffect, useRef, useState } from \"react\"\nimport { createPortal } from \"react-dom\"\nimport { TagGraphRoot } from \"@ourworldindata/utils\"\nimport classnames from \"clsx\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faCaretDown, faTimes } from \"@fortawesome/free-solid-svg-icons\"\nimport { SiteAbout } from \"./SiteAbout.js\"\nimport { SiteResources } from \"./SiteResources.js\"\nimport { SiteMobileArea } from \"./SiteMobileArea.js\"\nimport { SEARCH_BASE_PATH } from \"./search/searchUtils.js\"\nimport { FeedbackForm } from \"./Feedback.js\"\nimport { Button, getPrefersReducedMotion } from \"@ourworldindata/components\"\nimport { buildLatestPagePath } from \"./latest/latestUtils.js\"\nimport { MOBILE_MENU_DETAILS_NAME } from \"./SiteConstants.js\"\n\nexport const SiteMobileMenu = ({\n    tagGraph,\n    className,\n}: {\n    tagGraph?: TagGraphRoot\n    className?: string\n}) => {\n    const [isFeedbackOpen, setIsFeedbackOpen] = useState(false)\n    const menuRef = useRef<HTMLDivElement>(null)\n\n    useEffect(() => {\n        if (!isFeedbackOpen) return\n        document.documentElement.classList.add(\"no-scroll\")\n        return () => {\n            document.documentElement.classList.remove(\"no-scroll\")\n        }\n    }, [isFeedbackOpen])\n\n    const scrollMenuIntoView = (\n        event: React.ToggleEvent<HTMLDetailsElement>\n    ) => {\n        if (event.newState !== \"open\" || !menuRef.current) return\n        const menuBottomOffset = menuRef.current.getBoundingClientRect().bottom\n\n        // put bottom of the menu at the bottom of the viewport if it's offscreen\n        if (menuBottomOffset > window.innerHeight) {\n            window.scrollTo({\n                top: menuBottomOffset - window.innerHeight + window.scrollY,\n                behavior: getPrefersReducedMotion() ? \"auto\" : \"smooth\",\n            })\n        }\n    }\n\n    return (\n        <div ref={menuRef} className={classnames(\"SiteMobileMenu\", className)}>\n            <ul>\n                <li>\n                    <span className=\"section__header\">Browse by topic</span>\n                    <ul className=\"section__dropdown--topics\">\n                        {tagGraph?.children.map((area) => (\n                            <SiteMobileArea key={area.id} area={area} />\n                        ))}\n                    </ul>\n                </li>\n                <li>\n                    <a href={SEARCH_BASE_PATH} className=\"section__header\">\n                        Data\n                    </a>\n                </li>\n                <li>\n                    <a href={buildLatestPagePath()} className=\"section__header\">\n                        Latest\n                    </a>\n                </li>\n                <li>\n                    <details\n                        name={MOBILE_MENU_DETAILS_NAME}\n                        onToggle={scrollMenuIntoView}\n                    >\n                        <summary className=\"section__header\">\n                            Resources\n                            <FontAwesomeIcon\n                                className=\"SiteMobileMenu__caret\"\n                                icon={faCaretDown}\n                            />\n                        </summary>\n                        <div className=\"SiteMobileMenu__dropdown\">\n                            <SiteResources />\n                        </div>\n                    </details>\n                </li>\n                <li>\n                    <details\n                        name={MOBILE_MENU_DETAILS_NAME}\n                        onToggle={scrollMenuIntoView}\n                    >\n                        <summary className=\"section__header\">\n                            About\n                            <FontAwesomeIcon\n                                className=\"SiteMobileMenu__caret\"\n                                icon={faCaretDown}\n                            />\n                        </summary>\n                        <div className=\"SiteMobileMenu__dropdown\">\n                            <SiteAbout />\n                        </div>\n                    </details>\n                </li>\n                <li>\n                    <a href=\"/donate\" className=\"donate\">\n                        Donate\n                    </a>\n                </li>\n                <li>\n                    <Button\n                        theme=\"outline-vermillion\"\n                        className=\"send-feedback-button\"\n                        dataTrackNote=\"page_open_feedback_mobile_menu\"\n                        icon={null}\n                        onClick={() => setIsFeedbackOpen(true)}\n                        text=\"Send feedback\"\n                    ></Button>\n                </li>\n            </ul>\n            {isFeedbackOpen &&\n                createPortal(\n                    <div className=\"SiteMobileFeedbackModal\">\n                        <div\n                            className=\"SiteMobileFeedbackModal__overlay\"\n                            onClick={() => setIsFeedbackOpen(false)}\n                        />\n                        <div className=\"SiteMobileFeedbackModal__box\">\n                            <button\n                                className=\"SiteMobileFeedbackModal__close\"\n                                aria-label=\"Close feedback form\"\n                                onClick={() => setIsFeedbackOpen(false)}\n                            >\n                                <FontAwesomeIcon icon={faTimes} />\n                            </button>\n                            <FeedbackForm\n                                autofocus={false}\n                                onClose={() => setIsFeedbackOpen(false)}\n                            />\n                        </div>\n                    </div>,\n                    document.body\n                )}\n        </div>\n    )\n}\n","import * as React from \"react\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faCaretDown, faCaretUp } from \"@fortawesome/free-solid-svg-icons\"\nimport cx from \"clsx\"\n\nexport const SiteNavigationToggle = ({\n    ariaLabel,\n    children,\n    isActive,\n    onToggle,\n    withCaret = false,\n    dropdown,\n    className,\n}: {\n    ariaLabel: string\n    children: React.ReactNode\n    isActive: boolean\n    onToggle: () => void\n    withCaret?: boolean\n    dropdown?: React.ReactNode\n    className?: string\n}) => {\n    return (\n        <div\n            className={cx(\"SiteNavigationToggle\", className, {\n                active: isActive,\n            })}\n        >\n            <button\n                aria-label={ariaLabel}\n                onClick={onToggle}\n                className={cx(\"SiteNavigationToggle__button\", {\n                    active: isActive,\n                })}\n            >\n                {children}\n                {withCaret && (\n                    <FontAwesomeIcon\n                        className=\"SiteNavigationToggle__caret\"\n                        icon={isActive ? faCaretUp : faCaretDown}\n                    />\n                )}\n            </button>\n            {isActive && dropdown && (\n                <div className=\"SiteNavigationToggle__dropdown\">{dropdown}</div>\n            )}\n        </div>\n    )\n}\n","import { useState, useCallback } from \"react\"\nimport {\n    faListUl,\n    faBars,\n    faXmark,\n    faEnvelopeOpenText,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { NewsletterSubscriptionContext } from \"./newsletter.js\"\nimport { NewsletterSignup } from \"./NewsletterSubscription.js\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { SiteNavigationTopics } from \"./SiteNavigationTopics.js\"\nimport { SiteLogos } from \"./SiteLogos.js\"\nimport { SiteAbout } from \"./SiteAbout.js\"\nimport { SiteResources } from \"./SiteResources.js\"\nimport { SiteSearchNavigation } from \"./SiteSearchNavigation.js\"\nimport { SiteMobileMenu } from \"./SiteMobileMenu.js\"\nimport { SiteNavigationToggle } from \"./SiteNavigationToggle.js\"\nimport { buildLatestPagePath } from \"./latest/latestUtils.js\"\nimport classnames from \"clsx\"\nimport { useTriggerOnEscape } from \"./hooks.js\"\nimport { useTopicTagGraph } from \"./search/searchHooks.js\"\nimport {\n    AUTOCOMPLETE_CONTAINER_ID,\n    DETACHED_MODE_MAX_WIDTH,\n} from \"./search/Autocomplete.js\"\nimport { Menu } from \"./SiteConstants.js\"\nimport { SEARCH_BASE_PATH } from \"./search/searchUtils.js\"\nimport { SiteAnalytics } from \"./SiteAnalytics.js\"\n\nconst analytics = new SiteAnalytics()\n\n// Note: tranforming the flag from an env string to a boolean in\n// clientSettings.mts is convoluted due to the two-pass SSR/Vite build process.\nconst HAS_DONATION_FLAG = false\n\nexport const SiteNavigation = ({\n    hideDonationFlag,\n    isOnHomepage,\n    isPreviewing,\n}: {\n    hideDonationFlag?: boolean\n    isOnHomepage?: boolean\n    isPreviewing?: boolean\n}) => {\n    const [menu, setActiveMenu] = useState<Menu | null>(null)\n    const { data: tagGraph } = useTopicTagGraph({\n        isPreviewing: Boolean(isPreviewing),\n    })\n\n    const isActiveMobileMenu =\n        menu !== null &&\n        [Menu.Topics, Menu.Resources, Menu.About].includes(menu)\n\n    // useCallback so as to not trigger a re-render for SiteSearchNavigation, which remounts\n    // Autocomplete and breaks it\n    const closeOverlay = useCallback(() => {\n        setActiveMenu(null)\n    }, [])\n\n    // Same SiteSearchNavigation re-rendering case as above\n    const setSearchAsActiveMenu = useCallback(() => {\n        setActiveMenu(Menu.Search)\n        // Forced DOM manipulation of the algolia autocomplete panel position 🙃\n        // Without this, the panel initially renders at the same width as the shrunk search input\n        // Fortunately we only have to do this when it mounts - it takes care of resizes\n        setTimeout(() => {\n            // Only run when screen size is large, .aa-DetachedContainer gets positioned correctly\n            if (window.innerWidth <= DETACHED_MODE_MAX_WIDTH) return\n            const [panel, autocompleteContainer] = [\n                \".aa-Panel\",\n                AUTOCOMPLETE_CONTAINER_ID,\n            ].map((className) => document.querySelector<HTMLElement>(className))\n            if (panel && autocompleteContainer) {\n                const bounds = autocompleteContainer.getBoundingClientRect()\n                panel.style.left = `${bounds.left}px`\n            }\n        }, 10)\n\n        setTimeout(() => {\n            const input = document.querySelector<HTMLElement>(\".aa-Input\")\n            if (input) {\n                input.focus()\n                input.setAttribute(\"required\", \"true\")\n            }\n        }, 10)\n    }, [])\n\n    const toggleMenu = (root: Menu) => {\n        if (menu === root) {\n            closeOverlay()\n        } else {\n            setActiveMenu(root)\n        }\n    }\n\n    useTriggerOnEscape(closeOverlay, { active: menu !== null })\n\n    return (\n        <>\n            {menu && <div className=\"overlay\" onClick={closeOverlay} />}\n            <div className=\"site-navigation\">\n                <div className=\"wrapper\">\n                    <div\n                        className={classnames(\"site-navigation-bar\", {\n                            \"search-active\": menu === Menu.Search,\n                        })}\n                    >\n                        <SiteNavigationToggle\n                            ariaLabel=\"Toggle menu\"\n                            isActive={isActiveMobileMenu}\n                            onToggle={() => toggleMenu(Menu.Topics)}\n                            className=\"SiteNavigationToggle--mobile-menu hide-sm-up\"\n                            dropdown={\n                                <SiteMobileMenu\n                                    tagGraph={tagGraph}\n                                    className=\"hide-sm-up\"\n                                />\n                            }\n                        >\n                            <FontAwesomeIcon\n                                icon={isActiveMobileMenu ? faXmark : faBars}\n                            />\n                        </SiteNavigationToggle>\n                        <SiteLogos />\n                        <nav className=\"site-primary-links hide-sm-only\">\n                            <ul>\n                                <li>\n                                    <SiteNavigationToggle\n                                        ariaLabel=\"Toggle topics menu\"\n                                        isActive={menu === Menu.Topics}\n                                        onToggle={() => toggleMenu(Menu.Topics)}\n                                        dropdown={\n                                            <SiteNavigationTopics\n                                                onClose={closeOverlay}\n                                                tagGraph={tagGraph}\n                                                className=\"hide-sm-only\"\n                                            />\n                                        }\n                                        className=\"topics\"\n                                    >\n                                        <FontAwesomeIcon\n                                            icon={faListUl}\n                                            style={{ marginRight: \"8px\" }}\n                                        />\n                                        Browse by topic\n                                    </SiteNavigationToggle>\n                                </li>\n                                <li>\n                                    <a href={SEARCH_BASE_PATH}>Data</a>\n                                </li>\n                                <li>\n                                    <a href={buildLatestPagePath()}>Latest</a>\n                                </li>\n                                <li className=\"with-relative-dropdown\">\n                                    <SiteNavigationToggle\n                                        ariaLabel=\"Toggle resources menu\"\n                                        isActive={menu === Menu.Resources}\n                                        onToggle={() =>\n                                            toggleMenu(Menu.Resources)\n                                        }\n                                        dropdown={<SiteResources />}\n                                        withCaret={true}\n                                    >\n                                        Resources\n                                    </SiteNavigationToggle>\n                                </li>\n                                <li className=\"with-relative-dropdown\">\n                                    <SiteNavigationToggle\n                                        ariaLabel=\"Toggle about menu\"\n                                        isActive={menu === Menu.About}\n                                        onToggle={() => toggleMenu(Menu.About)}\n                                        dropdown={<SiteAbout />}\n                                        withCaret={true}\n                                    >\n                                        About\n                                    </SiteNavigationToggle>\n                                </li>\n                            </ul>\n                        </nav>\n                        <div className=\"site-search-cta\">\n                            {!isOnHomepage && (\n                                <SiteSearchNavigation\n                                    isActive={menu === Menu.Search}\n                                    onClose={closeOverlay}\n                                    onActivate={setSearchAsActiveMenu}\n                                    isPreviewing={isPreviewing}\n                                />\n                            )}\n                            <SiteNavigationToggle\n                                ariaLabel=\"Toggle subscribe menu\"\n                                isActive={menu === Menu.Subscribe}\n                                onToggle={() => {\n                                    // Counts opens only, like the floating\n                                    // button's dialog_open_newsletter.\n                                    if (menu !== Menu.Subscribe)\n                                        analytics.logSiteClick(\n                                            \"header_open_newsletter\"\n                                        )\n                                    toggleMenu(Menu.Subscribe)\n                                }}\n                                dropdown={\n                                    <NewsletterSignup\n                                        context={\n                                            NewsletterSubscriptionContext.Header\n                                        }\n                                    />\n                                }\n                                className=\"newsletter-subscription\"\n                            >\n                                <span className=\"hide-lg-down\">Subscribe</span>\n                                <FontAwesomeIcon\n                                    className=\"hide-lg-up\"\n                                    icon={\n                                        menu === Menu.Subscribe\n                                            ? faXmark\n                                            : faEnvelopeOpenText\n                                    }\n                                />\n                            </SiteNavigationToggle>\n                            <a\n                                href=\"/donate\"\n                                className=\"donate\"\n                                data-track-note=\"header_navigation\"\n                            >\n                                Donate\n                            </a>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            {HAS_DONATION_FLAG && !hideDonationFlag && (\n                <a href=\"/donate\" className=\"site-navigation__giving\">\n                    It’s Giving Season. Help us do more with a donation.\n                </a>\n            )}\n        </>\n    )\n}\n","import { ArchiveMetaInformation } from \"@ourworldindata/types\"\nimport {\n    ArchiveWritingNavigation,\n    ArchiveDataNavigation,\n} from \"./archive/ArchiveNavigation.js\"\nimport { SiteNavigation } from \"./SiteNavigation.js\"\nimport { SiteQueryClientProvider } from \"./SiteQueryClientProvider.js\"\n\ninterface SiteHeaderProps {\n    hideDonationFlag?: boolean\n    /**\n     * Stops the search bar from being rendered, as we show it in the page content on the homepage\n     */\n    isOnHomepage?: boolean\n\n    // If this is an archived page, we need to render a different version of the site header\n    archiveInfo?: ArchiveMetaInformation\n    isPreviewing?: boolean\n}\n\nexport const SiteHeaderNavigation = (props: SiteHeaderProps) => {\n    const archiveInfo = props.archiveInfo\n    if (archiveInfo?.archiveNavigation) {\n        const archiveNavigation = archiveInfo.archiveNavigation\n        const nav =\n            archiveNavigation.contentType === \"writing\" ? (\n                <ArchiveWritingNavigation\n                    archivalDate={archiveInfo.archivalDate}\n                    {...archiveNavigation}\n                />\n            ) : (\n                <ArchiveDataNavigation\n                    archivalDate={archiveInfo.archivalDate}\n                    {...archiveNavigation}\n                />\n            )\n        return nav\n    }\n\n    return (\n        <SiteQueryClientProvider>\n            <SiteNavigation\n                hideDonationFlag={props.hideDonationFlag}\n                isOnHomepage={props.isOnHomepage}\n                isPreviewing={props.isPreviewing}\n            />\n        </SiteQueryClientProvider>\n    )\n}\n\nexport const SiteHeader = (props: SiteHeaderProps) => (\n    <header className=\"site-header\">\n        <div className=\"site-navigation-root\">\n            <SiteHeaderNavigation {...props} />\n        </div>\n    </header>\n)\n","import {\n    EmailNotificationsContentType,\n    TOPIC_AREA_NAMES,\n    TopicAreaName,\n} from \"@ourworldindata/types\"\n\nexport function areAllTopicsSelected(topicTags: TopicAreaName[]): boolean {\n    return TOPIC_AREA_NAMES.every((name) => topicTags.includes(name))\n}\n\n/**\n * \"All topics\" is stored as an empty topicTags array, so that topic areas\n * added later are automatically included. Translates between that storage\n * shape and the form's pill selection (where every pill is selected).\n */\nexport function topicTagsForStorage(\n    topicTags: TopicAreaName[]\n): TopicAreaName[] {\n    return areAllTopicsSelected(topicTags) ? [] : topicTags\n}\n\nexport function topicTagsFromStorage(\n    topicTags: TopicAreaName[]\n): TopicAreaName[] {\n    return topicTags.length === 0 ? [...TOPIC_AREA_NAMES] : topicTags\n}\n\nexport interface PreferencesValidationErrors {\n    topicTagsError: string | null\n    contentTypesError: string | null\n}\n\n/**\n * Client-side UX validation of the preference fields (the Cloudflare Function\n * is the authoritative validator, but it can't enforce these: an empty\n * topicTags array is how \"all topics\" is stored, so the server can't tell\n * \"nothing selected\" from \"all topics\"):\n * - at least one content type\n * - at least one topic whenever a topic-filtered content type is selected —\n *   only announcements are topic-independent\n *\n * Returns null when the selection is valid, otherwise per-field messages so\n * each can be rendered next to the fieldset it refers to.\n */\nexport function getPreferencesValidationErrors(\n    topicTags: TopicAreaName[],\n    contentTypes: EmailNotificationsContentType[]\n): PreferencesValidationErrors | null {\n    const hasTopicDependentContentType = contentTypes.some(\n        (contentType) => contentType !== \"announcement\"\n    )\n    const topicTagsError =\n        topicTags.length === 0 && hasTopicDependentContentType\n            ? \"Please select at least one topic to follow.\"\n            : null\n    const contentTypesError =\n        contentTypes.length === 0\n            ? \"Please select at least one type of content to receive.\"\n            : null\n    if (!topicTagsError && !contentTypesError) return null\n    return { topicTagsError, contentTypesError }\n}\n","import { RefObject } from \"react\"\nimport cx from \"clsx\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faBook,\n    faBullhorn,\n    faChartLine,\n    faCheck,\n    faMinus,\n    faLightbulb,\n    faPlus,\n    IconDefinition,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    EMAIL_NOTIFICATIONS_CONTENT_TYPE_LABELS,\n    EMAIL_NOTIFICATIONS_CONTENT_TYPES,\n    EMAIL_NOTIFICATIONS_FREQUENCIES,\n    EMAIL_NOTIFICATIONS_FREQUENCY_LABELS,\n    EmailNotificationsContentType,\n    EmailNotificationsFrequency,\n    TOPIC_AREA_NAMES,\n    TopicAreaName,\n} from \"@ourworldindata/types\"\nimport {\n    areAllTopicsSelected,\n    PreferencesValidationErrors,\n} from \"./emailNotificationsValidation.js\"\n\nconst CONTENT_TYPE_CARDS: Record<\n    EmailNotificationsContentType,\n    { icon: IconDefinition; description: string }\n> = {\n    article: {\n        icon: faBook,\n        description:\n            \"Longer-form narrative pieces. Published twice a month approximately.\",\n    },\n    \"data-insight\": {\n        icon: faLightbulb,\n        description:\n            \"Bite-sized insights on how the world is changing. Published every few days.\",\n    },\n    \"data-update\": {\n        icon: faChartLine,\n        description:\n            \"Major updates to the datasets behind our work. Published once or twice a week.\",\n    },\n    announcement: {\n        icon: faBullhorn,\n        description:\n            \"News about Our World in Data itself. Independent of the topics you follow.\",\n    },\n}\n\nconst TogglePill = ({\n    label,\n    selected,\n    onToggle,\n}: {\n    label: string\n    selected: boolean\n    onToggle: () => void\n}) => (\n    <button\n        type=\"button\"\n        className={cx(\"newsletter-preference-fields__pill\", {\n            \"newsletter-preference-fields__pill--selected\": selected,\n        })}\n        aria-pressed={selected}\n        onClick={onToggle}\n    >\n        <FontAwesomeIcon icon={selected ? faCheck : faPlus} />\n        {label}\n    </button>\n)\n\nconst ContentTypeCard = ({\n    icon,\n    title,\n    description,\n    selected,\n    onToggle,\n}: {\n    icon: IconDefinition\n    title: string\n    description: string\n    selected: boolean\n    onToggle: () => void\n}) => (\n    <button\n        type=\"button\"\n        className={cx(\"newsletter-preference-fields__card\", {\n            \"newsletter-preference-fields__card--selected\": selected,\n        })}\n        aria-pressed={selected}\n        onClick={onToggle}\n    >\n        <span className=\"newsletter-preference-fields__card-header\">\n            <FontAwesomeIcon icon={icon} />\n            <div\n                className={cx(\"newsletter-preference-fields__checkbox\", {\n                    \"newsletter-preference-fields__checkbox--selected\":\n                        selected,\n                })}\n            >\n                {selected && <FontAwesomeIcon icon={faCheck} />}\n            </div>\n        </span>\n        <span className=\"newsletter-preference-fields__card-title\">\n            {title}\n        </span>\n        <span className=\"newsletter-preference-fields__card-description\">\n            {description}\n        </span>\n    </button>\n)\n\nexport interface EmailNotificationsPreferenceFieldsProps {\n    topicTags: TopicAreaName[]\n    contentTypes: EmailNotificationsContentType[]\n    frequency: EmailNotificationsFrequency\n    onToggleTopicTag: (tagName: TopicAreaName) => void\n    onToggleContentType: (contentType: EmailNotificationsContentType) => void\n    onSetFrequency: (frequency: EmailNotificationsFrequency) => void\n    validationErrors?: PreferencesValidationErrors | null\n    /** Attached to the first rendered validation alert. */\n    firstAlertRef?: RefObject<HTMLDivElement | null>\n}\n\n/**\n * The topics / content types / frequency fieldsets, shared between the\n * subscribe form and the magic-link preferences form.\n */\nexport const EmailNotificationsPreferenceFields = ({\n    topicTags,\n    contentTypes,\n    frequency,\n    onToggleTopicTag,\n    onToggleContentType,\n    onSetFrequency,\n    validationErrors,\n    firstAlertRef,\n}: EmailNotificationsPreferenceFieldsProps) => {\n    const allTopicsSelected = areAllTopicsSelected(topicTags)\n\n    // The toggle callbacks use functional state updates, so toggling every\n    // affected pill in sequence composes correctly.\n    const toggleAllTopics = () => {\n        for (const name of TOPIC_AREA_NAMES) {\n            if (topicTags.includes(name) === allTopicsSelected)\n                onToggleTopicTag(name)\n        }\n    }\n\n    return (\n        <>\n            {/* The legend stays a direct child of the fieldset so it names the\n            group for assistive tech; the stylesheet lays it out next to the\n            select-all button. */}\n            <fieldset className=\"newsletter-form__fieldset newsletter-preference-fields__topics\">\n                <legend className=\"h6-black-caps\">I want updates about</legend>\n                <button\n                    type=\"button\"\n                    className=\"newsletter-preference-fields__select-all\"\n                    onClick={toggleAllTopics}\n                >\n                    <FontAwesomeIcon\n                        icon={allTopicsSelected ? faMinus : faPlus}\n                    />\n                    <span>\n                        {allTopicsSelected\n                            ? \"Deselect all topics\"\n                            : \"Select all topics\"}\n                    </span>\n                </button>\n                <div className=\"newsletter-preference-fields__pills\">\n                    {TOPIC_AREA_NAMES.map((name) => (\n                        <TogglePill\n                            key={name}\n                            label={name}\n                            selected={topicTags.includes(name)}\n                            onToggle={() => onToggleTopicTag(name)}\n                        />\n                    ))}\n                </div>\n                {validationErrors?.topicTagsError && (\n                    <div\n                        ref={firstAlertRef}\n                        className=\"newsletter-form__alert\"\n                        role=\"alert\"\n                    >\n                        {validationErrors.topicTagsError}\n                    </div>\n                )}\n            </fieldset>\n            <fieldset className=\"newsletter-form__fieldset\">\n                <legend className=\"h6-black-caps\">Show me</legend>\n                <div className=\"newsletter-preference-fields__cards\">\n                    {EMAIL_NOTIFICATIONS_CONTENT_TYPES.map((contentType) => (\n                        <ContentTypeCard\n                            key={contentType}\n                            icon={CONTENT_TYPE_CARDS[contentType].icon}\n                            title={\n                                EMAIL_NOTIFICATIONS_CONTENT_TYPE_LABELS[\n                                    contentType\n                                ]\n                            }\n                            description={\n                                CONTENT_TYPE_CARDS[contentType].description\n                            }\n                            selected={contentTypes.includes(contentType)}\n                            onToggle={() => onToggleContentType(contentType)}\n                        />\n                    ))}\n                </div>\n                {validationErrors?.contentTypesError && (\n                    <div\n                        ref={\n                            validationErrors.topicTagsError\n                                ? undefined\n                                : firstAlertRef\n                        }\n                        className=\"newsletter-form__alert\"\n                        role=\"alert\"\n                    >\n                        {validationErrors.contentTypesError}\n                    </div>\n                )}\n            </fieldset>\n            <fieldset className=\"newsletter-form__fieldset\">\n                <legend className=\"h6-black-caps\">Send me</legend>\n                <div className=\"newsletter-preference-fields__frequency-options\">\n                    {EMAIL_NOTIFICATIONS_FREQUENCIES.map((frequencyOption) => (\n                        <label\n                            key={frequencyOption}\n                            className={cx(\n                                \"newsletter-preference-fields__frequency-option\",\n                                {\n                                    \"newsletter-preference-fields__frequency-option--selected\":\n                                        frequency === frequencyOption,\n                                }\n                            )}\n                        >\n                            <input\n                                type=\"radio\"\n                                name=\"email-notifications-frequency\"\n                                value={frequencyOption}\n                                checked={frequency === frequencyOption}\n                                onChange={() => onSetFrequency(frequencyOption)}\n                            />\n                            {\n                                EMAIL_NOTIFICATIONS_FREQUENCY_LABELS[\n                                    frequencyOption\n                                ]\n                            }\n                        </label>\n                    ))}\n                </div>\n                <p className=\"newsletter-preference-fields__hint note-12-medium\">\n                    If we haven't published anything matching your preferences,\n                    you won't hear from us.\n                </p>\n            </fieldset>\n        </>\n    )\n}\n","import { getPrefersReducedMotion } from \"@ourworldindata/components\"\n\n/**\n * Called from the submit handler after a `flushSync` state update has put the\n * alert in the DOM, so a failed submit scrolls to its message even when the\n * submit button sits below the fields.\n */\nexport function scrollAlertIntoView(alert: HTMLElement | null): void {\n    alert?.scrollIntoView({\n        behavior: getPrefersReducedMotion() ? \"auto\" : \"smooth\",\n        block: \"center\",\n    })\n}\n","import { useRef, useState } from \"react\"\nimport { flushSync } from \"react-dom\"\nimport {\n    EMAIL_NOTIFICATIONS_CONTENT_TYPES,\n    EmailNotificationsContentType,\n    EmailNotificationsFrequency,\n    EmailNotificationsPreferences,\n    TopicAreaName,\n} from \"@ourworldindata/types\"\nimport { EmailNotificationsPreferenceFieldsProps } from \"./EmailNotificationsPreferenceFields.js\"\nimport {\n    getPreferencesValidationErrors,\n    PreferencesValidationErrors,\n    topicTagsForStorage,\n    topicTagsFromStorage,\n} from \"./emailNotificationsValidation.js\"\nimport { scrollAlertIntoView } from \"./scrollAlertIntoView.js\"\n\n/**\n * Announcements are opt-in: they are topic-independent news about Our World in\n * Data itself, rather than the published work most subscribers are here for.\n */\nexport const DEFAULT_CONTENT_TYPES: EmailNotificationsContentType[] =\n    EMAIL_NOTIFICATIONS_CONTENT_TYPES.filter(\n        (contentType) => contentType !== \"announcement\"\n    )\n\nexport const DEFAULT_FREQUENCY: EmailNotificationsFrequency = \"weekly\"\n\nfunction toggleInArray<T>(items: T[], item: T): T[] {\n    return items.includes(item)\n        ? items.filter((candidate) => candidate !== item)\n        : [...items, item]\n}\n\ninterface NotificationPreferencesState {\n    /** Spread onto <EmailNotificationsPreferenceFields>. */\n    fieldsProps: EmailNotificationsPreferenceFieldsProps\n    setTopicTags: (topicTags: TopicAreaName[]) => void\n    /** The shape the API stores, with \"all topics\" collapsed to []. */\n    forStorage: () => EmailNotificationsPreferences\n    /**\n     * Records per-field errors, scrolls the first one into view and returns\n     * whether the selection is valid.\n     */\n    validate: () => boolean\n    resetValidation: () => void\n}\n\n/**\n * The preference state shared by the subscribe form and the magic-link\n * preferences form: both edit the same fields, from the same defaults, through\n * the same <EmailNotificationsPreferenceFields>. The preferences form passes\n * the stored preferences to prefill from.\n */\nexport function useNotificationPreferences(\n    initialPreferences?: EmailNotificationsPreferences | null\n): NotificationPreferencesState {\n    // New subscribers pick their topics; stored preferences present the\n    // empty-means-all-topics shape with every pill selected.\n    const [topicTags, setTopicTags] = useState<TopicAreaName[]>(() =>\n        initialPreferences\n            ? topicTagsFromStorage(initialPreferences.topicTags)\n            : []\n    )\n    const [contentTypes, setContentTypes] = useState<\n        EmailNotificationsContentType[]\n    >(() => [...(initialPreferences?.contentTypes ?? DEFAULT_CONTENT_TYPES)])\n    const [frequency, setFrequency] = useState<EmailNotificationsFrequency>(\n        initialPreferences?.frequency ?? DEFAULT_FREQUENCY\n    )\n    const [validationErrors, setValidationErrors] =\n        useState<PreferencesValidationErrors | null>(null)\n    // The submit button sits below the fieldsets, so a failed submit may\n    // leave the error off-screen.\n    const firstAlertRef = useRef<HTMLDivElement>(null)\n\n    return {\n        fieldsProps: {\n            topicTags,\n            contentTypes,\n            frequency,\n            onToggleTopicTag: (tagName) =>\n                setTopicTags((current) => toggleInArray(current, tagName)),\n            onToggleContentType: (contentType) =>\n                setContentTypes((current) =>\n                    toggleInArray(current, contentType)\n                ),\n            onSetFrequency: setFrequency,\n            validationErrors,\n            firstAlertRef,\n        },\n        setTopicTags,\n        forStorage: () => ({\n            topicTags: topicTagsForStorage(topicTags),\n            contentTypes,\n            frequency,\n        }),\n        validate: () => {\n            const errors = getPreferencesValidationErrors(\n                topicTags,\n                contentTypes\n            )\n            flushSync(() => setValidationErrors(errors))\n            if (errors) scrollAlertIntoView(firstAlertRef.current)\n            return !errors\n        },\n        resetValidation: () => setValidationErrors(null),\n    }\n}\n","import { NewsletterSpamProtection } from \"./NewsletterSpamProtection.js\"\nimport { useNewsletterSpamProtection } from \"./useNewsletterSpamProtection.js\"\nimport { useEffect, useRef, useState } from \"react\"\nimport * as React from \"react\"\nimport { flushSync } from \"react-dom\"\nimport { useMutation } from \"@tanstack/react-query\"\nimport {\n    EmailNotificationsSubscribeRequest,\n    LatestUrlParam,\n    TOPIC_AREA_NAMES,\n} from \"@ourworldindata/types\"\nimport { getWindowUrl, setWindowUrl } from \"@ourworldindata/utils\"\nimport { Button, TextInput } from \"@ourworldindata/components\"\nimport { SiteAnalytics } from \"../SiteAnalytics.js\"\nimport { EmailNotificationsPreferenceFields } from \"./EmailNotificationsPreferenceFields.js\"\nimport { scrollAlertIntoView } from \"./scrollAlertIntoView.js\"\nimport {\n    apiPost,\n    getErrorMessage,\n    throwIfApiError,\n} from \"./emailNotificationsApi.js\"\nimport { topicAreasFromSearchParams } from \"../search/searchUtils.js\"\nimport { useNotificationPreferences } from \"./useNotificationPreferences.js\"\nimport { takeSubscribePrefill } from \"./subscribePrefill.js\"\nimport {\n    FOLLOW_TOPICS_CADENCE,\n    FOLLOW_TOPICS_DESCRIPTION,\n    FOLLOW_TOPICS_TITLE,\n    OWID_BRIEF_CADENCE,\n    OWID_BRIEF_DESCRIPTION,\n    OWID_BRIEF_TITLE,\n    PrivacyNotice,\n} from \"./newsletterCopy.js\"\n\nimport { NewsletterOption } from \"./NewsletterOption.js\"\n\nconst analytics = new SiteAnalytics()\n\nexport interface Subscription {\n    email: string\n    followTopics: boolean\n    subscribeToOwidBrief: boolean\n}\n\nexport const EmailNotificationsSubscribeForm = ({\n    onSubscribed,\n}: {\n    onSubscribed: (subscription: Subscription) => void\n}) => {\n    const {\n        ref: captchaRef,\n        captchaToken,\n        setCaptchaToken,\n        resetCaptcha,\n        spamProtectionFields,\n    } = useNewsletterSpamProtection()\n    const [email, setEmail] = useState(\"\")\n    const [subscribeToOwidBrief, setSubscribeToOwidBrief] = useState(true)\n    const [followTopics, setFollowTopics] = useState(true)\n    const [errorMessage, setErrorMessage] = useState<string | null>(null)\n    const alertRef = useRef<HTMLDivElement>(null)\n    const preferences = useNotificationPreferences()\n    const { setTopicTags } = preferences\n\n    // Client-side and server errors share this path. The alert is rendered\n    // synchronously so it can be scrolled to before the handler returns.\n    const showError = (message: string) => {\n        flushSync(() => setErrorMessage(message))\n        scrollAlertIntoView(alertRef.current)\n    }\n\n    // The page is baked, so the URL and storage are only known after\n    // hydration. The form isn't kept in sync with either afterwards, so both\n    // are consumed once.\n    useEffect(() => {\n        const prefill = takeSubscribePrefill()\n        if (prefill) {\n            // oxlint-disable-next-line react/set-state-in-effect -- reads client-only sessionStorage after hydration\n            setEmail(prefill.email)\n            setSubscribeToOwidBrief(prefill.subscribeToOwidBrief)\n            setFollowTopics(true)\n        }\n\n        const url = getWindowUrl()\n        const topicAreas = topicAreasFromSearchParams(\n            new URLSearchParams(url.queryStr),\n            TOPIC_AREA_NAMES\n        )\n        if (!topicAreas.length) return\n        setTopicTags(topicAreas)\n        setWindowUrl(\n            url.updateQueryParams({ [LatestUrlParam.TOPICS]: undefined })\n        )\n    }, [setTopicTags])\n\n    const subscribe = useMutation({\n        mutationFn: async (request: EmailNotificationsSubscribeRequest) => {\n            const response = await apiPost(\"/subscribe\", request)\n            await throwIfApiError(response)\n        },\n        onError: (error) => {\n            analytics.logNewsletterSubscribeError(\n                \"subscribe-page\",\n                getErrorMessage(error)\n            )\n            resetCaptcha()\n        },\n        retry: false,\n        onSuccess: (_, request) => {\n            analytics.logSiteFormSubmit(\n                \"newsletter-subscribe\",\n                \"Subscribe [subscribe-page]\"\n            )\n            onSubscribed({\n                email: request.email,\n                followTopics: request.notifications !== undefined,\n                subscribeToOwidBrief: request.subscribeToOwidBrief,\n            })\n        },\n    })\n\n    const handleSubmit = (event: React.SubmitEvent<HTMLFormElement>) => {\n        event.preventDefault()\n        if (subscribe.isPending || !captchaToken) return\n        setErrorMessage(null)\n        preferences.resetValidation()\n\n        const trimmedEmail = email.trim()\n        if (!trimmedEmail) return showError(\"Please enter your email address.\")\n        if (!followTopics && !subscribeToOwidBrief)\n            return showError(\"Please select at least one newsletter.\")\n        if (followTopics && !preferences.validate()) return\n\n        subscribe.mutate(\n            {\n                ...spamProtectionFields(event.currentTarget),\n                email: trimmedEmail,\n                notifications: followTopics\n                    ? preferences.forStorage()\n                    : undefined,\n                subscribeToOwidBrief,\n            },\n            { onError: (error) => showError(getErrorMessage(error)) }\n        )\n    }\n\n    return (\n        <form\n            className=\"email-notifications-subscribe-form\"\n            onSubmit={handleSubmit}\n        >\n            <NewsletterOption\n                id=\"email-notifications-owid-brief\"\n                imageSrc=\"/images/biweekly-newsletter.webp\"\n                title={OWID_BRIEF_TITLE}\n                cadence={OWID_BRIEF_CADENCE}\n                description={OWID_BRIEF_DESCRIPTION}\n                checked={subscribeToOwidBrief}\n                onChange={() => setSubscribeToOwidBrief(!subscribeToOwidBrief)}\n            />\n            <hr className=\"newsletter-form__divider\" />\n            <NewsletterOption\n                id=\"email-notifications-follow-topics\"\n                imageSrc=\"/images/data-insights.webp\"\n                title={FOLLOW_TOPICS_TITLE}\n                cadence={FOLLOW_TOPICS_CADENCE}\n                description={FOLLOW_TOPICS_DESCRIPTION}\n                checked={followTopics}\n                onChange={() => setFollowTopics(!followTopics)}\n            />\n            {followTopics && (\n                <div className=\"email-notifications-subscribe-form__topic-preferences\">\n                    <EmailNotificationsPreferenceFields\n                        {...preferences.fieldsProps}\n                    />\n                </div>\n            )}\n            {errorMessage && (\n                <div\n                    ref={alertRef}\n                    className=\"newsletter-form__alert\"\n                    role=\"alert\"\n                >\n                    {errorMessage}\n                </div>\n            )}\n            <NewsletterSpamProtection\n                ref={captchaRef}\n                onToken={setCaptchaToken}\n            />\n            <div className=\"newsletter-form__email-submit\">\n                <TextInput\n                    placeholder=\"Your email address\"\n                    type=\"email\"\n                    className=\"newsletter-form__email sentry-mask\"\n                    name=\"email\"\n                    value={email}\n                    onChange={(event) => setEmail(event.target.value)}\n                    required={true}\n                />\n                <Button\n                    type=\"submit\"\n                    theme=\"solid-vermillion\"\n                    icon={null}\n                    ariaLabel=\"Subscribe to email notifications\"\n                    text={subscribe.isPending ? \"Subscribing…\" : \"Subscribe\"}\n                    disabled={subscribe.isPending || !captchaToken}\n                />\n            </div>\n            <PrivacyNotice className=\"email-notifications-subscribe-form__privacy-notice\" />\n        </form>\n    )\n}\n","import { ReactNode, useEffect, useRef } from \"react\"\nimport cx from \"clsx\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faCheck, faLinkSlash } from \"@fortawesome/free-solid-svg-icons\"\n\n/**\n * The pieces shared by the two email notification pages (/subscribe and\n * /preferences). Both render into a `main.subscribe-page` grid, and\n * both swap between an editing screen and a terminal confirmation screen.\n */\nexport const SUBSCRIBE_PAGE_CONTENT_GRID_CLASSES =\n    \"span-cols-6 col-start-4 span-md-cols-10 col-md-start-3 span-sm-cols-12 col-sm-start-2\"\n\nexport const SubscribePageHero = ({\n    heading,\n    subheading,\n}: {\n    heading: string\n    subheading?: string\n}) => (\n    <header className=\"subscribe-page__hero grid grid-cols-12-full-width span-cols-14 col-start-1\">\n        <div className={SUBSCRIBE_PAGE_CONTENT_GRID_CLASSES}>\n            <h1 className=\"subscribe-page__heading\">{heading}</h1>\n            {subheading && (\n                <p className=\"subscribe-page__subheading\">{subheading}</p>\n            )}\n        </div>\n    </header>\n)\n\n/**\n * A terminal screen: subscribed, preferences saved, unsubscribed, or (with the\n * \"error\" variant) an expired/invalid link. It carries its own heading and is\n * rendered *instead of* the hero, so it must be rendered by whichever component\n * owns the page's screen state. Children are the explanatory text and any\n * follow-up action.\n */\nexport const SubscribePageConfirmation = ({\n    heading,\n    children,\n    variant = \"success\",\n}: {\n    heading: string\n    children: ReactNode\n    variant?: \"success\" | \"error\"\n}) => {\n    const headingRef = useRef<HTMLHeadingElement>(null)\n\n    useEffect(() => {\n        // Replacing the page contents is silent to screen readers, and the\n        // reader is likely scrolled down to the button they just used.\n        window.scrollTo(0, 0)\n        headingRef.current?.focus({ preventScroll: true })\n    }, [])\n\n    return (\n        <div\n            className={cx(\n                \"subscribe-page__confirmation\",\n                variant === \"error\" && \"subscribe-page__confirmation--error\",\n                SUBSCRIBE_PAGE_CONTENT_GRID_CLASSES\n            )}\n        >\n            <div className=\"subscribe-page__confirmation-icon\">\n                <FontAwesomeIcon\n                    icon={variant === \"error\" ? faLinkSlash : faCheck}\n                />\n            </div>\n            <h1\n                className=\"subscribe-page__heading subscribe-page__confirmation-heading\"\n                ref={headingRef}\n                tabIndex={-1}\n            >\n                {heading}\n            </h1>\n            {children}\n        </div>\n    )\n}\n","import { useState } from \"react\"\nimport cx from \"clsx\"\nimport { match } from \"ts-pattern\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faArrowRight } from \"@fortawesome/free-solid-svg-icons\"\nimport { Button } from \"@ourworldindata/components\"\nimport {\n    EmailNotificationsSubscribeForm,\n    Subscription,\n} from \"./EmailNotificationsSubscribeForm.js\"\nimport { OwidSocials } from \"../OwidSocials.js\"\nimport { NewsletterSubscriptionContext } from \"../newsletter.js\"\nimport { SiteQueryClientProvider } from \"../SiteQueryClientProvider.js\"\nimport {\n    SUBSCRIBE_PAGE_CONTENT_GRID_CLASSES,\n    SubscribePageConfirmation,\n    SubscribePageHero,\n} from \"./SubscribePageLayout.js\"\n\ntype SubscribeFlowState =\n    | { name: \"form\" }\n    | { name: \"success\"; subscription: Subscription }\n\nexport const SubscribeFlow = () => {\n    const [state, setState] = useState<SubscribeFlowState>({ name: \"form\" })\n\n    return match(state)\n        .with({ name: \"form\" }, () => (\n            <SiteQueryClientProvider>\n                <SubscribeFormScreen\n                    onSubscribed={(subscription) =>\n                        setState({ name: \"success\", subscription })\n                    }\n                />\n            </SiteQueryClientProvider>\n        ))\n        .with({ name: \"success\" }, ({ subscription }) => (\n            <SubscribePageConfirmation\n                heading={\n                    // Stay neutral: the public API hides whether confirmation is needed.\n                    subscription.followTopics\n                        ? \"You are now subscribed\"\n                        : \"Thanks for signing up\"\n                }\n            >\n                <SubscribedText subscription={subscription} />\n                <Button\n                    className=\"subscribe-page__confirmation-action\"\n                    theme=\"outline-vermillion\"\n                    href=\"/preferences\"\n                    text=\"Update your preferences\"\n                    icon={null}\n                />\n            </SubscribePageConfirmation>\n        ))\n        .exhaustive()\n}\n\n/**\n * Covers both immediate and double-opt-in Brief signups without exposing the\n * address's Mailchimp history.\n */\nconst SubscribedText = ({\n    subscription: { email, followTopics, subscribeToOwidBrief },\n}: {\n    subscription: Subscription\n}) => (\n    <>\n        {followTopics && (\n            <p className=\"subscribe-page__confirmation-text\">\n                We have sent a confirmation email to <strong>{email}</strong>{\" \"}\n                with a summary of your preferences.\n            </p>\n        )}\n        {subscribeToOwidBrief && (\n            <p className=\"subscribe-page__confirmation-text\">\n                We have added <strong>{email}</strong> to The OWID Brief. If you\n                had unsubscribed from it before, you will first receive an email\n                asking you to confirm your subscription.\n            </p>\n        )}\n    </>\n)\n\nconst SubscribeFormScreen = ({\n    onSubscribed,\n}: {\n    onSubscribed: (subscription: Subscription) => void\n}) => {\n    return (\n        <>\n            <SubscribePageHero\n                heading=\"Subscribe to our newsletters\"\n                subheading=\"Receive our latest work by email.\"\n            />\n            <div\n                className={cx(\n                    \"subscribe-page__content\",\n                    SUBSCRIBE_PAGE_CONTENT_GRID_CLASSES\n                )}\n            >\n                <EmailNotificationsSubscribeForm onSubscribed={onSubscribed} />\n            </div>\n            <aside className=\"subscribe-page__aside span-cols-3 col-start-11 span-md-cols-10 col-md-start-3 span-sm-cols-12 col-sm-start-2\">\n                <p className=\"subscribe-page__aside-heading h6-black-caps\">\n                    Already subscribed?\n                </p>\n                <a\n                    className=\"subscribe-page__manage-link\"\n                    href=\"/preferences\"\n                    data-track-note=\"subscribe_page_update_preferences\"\n                >\n                    Update your preferences{\" \"}\n                    <FontAwesomeIcon icon={faArrowRight} />\n                </a>\n            </aside>\n            <hr className=\"subscribe-page__divider span-cols-12 col-start-2\" />\n            <div\n                className={cx(\n                    \"subscribe-page__socials\",\n                    SUBSCRIBE_PAGE_CONTENT_GRID_CLASSES\n                )}\n            >\n                <OwidSocials\n                    includeRss\n                    context={NewsletterSubscriptionContext.SubscribePage}\n                />\n            </div>\n        </>\n    )\n}\n","import { useState } from \"react\"\nimport * as React from \"react\"\nimport { useMutation, useQuery } from \"@tanstack/react-query\"\nimport { match } from \"ts-pattern\"\nimport {\n    EmailNotificationsPreferences,\n    EmailNotificationsPreferencesResponse,\n    EmailNotificationsRequestLinkRequest,\n    EmailNotificationsUpdatePreferencesRequest,\n    EmailNotificationsUpdatePreferencesResponse,\n    OwidBriefOptInResult,\n} from \"@ourworldindata/types\"\nimport { Button, TextInput } from \"@ourworldindata/components\"\nimport { SiteQueryClientProvider } from \"../SiteQueryClientProvider.js\"\nimport { EmailNotificationsPreferenceFields } from \"./EmailNotificationsPreferenceFields.js\"\nimport {\n    apiGet,\n    apiPost,\n    getErrorMessage,\n    throwIfApiError,\n} from \"./emailNotificationsApi.js\"\nimport { NewsletterOption } from \"./NewsletterOption.js\"\nimport {\n    FOLLOW_TOPICS_CADENCE,\n    FOLLOW_TOPICS_DESCRIPTION,\n    FOLLOW_TOPICS_TITLE,\n    OWID_BRIEF_CADENCE,\n    OWID_BRIEF_DESCRIPTION,\n    OWID_BRIEF_TITLE,\n} from \"./newsletterCopy.js\"\nimport { NewsletterSpamProtection } from \"./NewsletterSpamProtection.js\"\nimport { useNewsletterSpamProtection } from \"./useNewsletterSpamProtection.js\"\nimport { useNotificationPreferences } from \"./useNotificationPreferences.js\"\nimport {\n    SUBSCRIBE_PAGE_CONTENT_GRID_CLASSES,\n    SubscribePageConfirmation,\n    SubscribePageHero,\n} from \"./SubscribePageLayout.js\"\n\n/**\n * The magic-link preferences page. Its mode is driven by the token in the URL\n * fragment (kept out of server logs):\n * - no token: enter-email form that requests a magic link (the response is\n *   identical whether the email is subscribed or not)\n * - valid token: the preferences form, prefilled, saving immediately (the\n *   magic link was the proof of inbox control), with independent Follow\n *   Topics and Mailchimp-owned OWID Brief controls\n * - expired token: offers to email a new link\n */\nexport const EmailNotificationsPreferencesForm = () => {\n    const [token] = useState(\n        () => window.location.hash.match(/token=([^&]+)/)?.[1] ?? null\n    )\n\n    return (\n        <SiteQueryClientProvider>\n            {token ? <TokenScreen token={token} /> : <EnterEmailScreen />}\n        </SiteQueryClientProvider>\n    )\n}\n\n/**\n * The screens the reader can act on, under the page heading. The terminal\n * screens (SubscribePageConfirmation) carry their own heading instead - which is\n * why this component renders the heading, rather than the page baking it.\n */\nconst PreferencesScreen = ({ children }: { children: React.ReactNode }) => (\n    <>\n        <SubscribePageHero heading=\"Update your email preferences\" />\n        <div className={SUBSCRIBE_PAGE_CONTENT_GRID_CLASSES}>{children}</div>\n    </>\n)\n\nconst LinkSentScreen = () => (\n    <PreferencesScreen>\n        <div className=\"newsletter-form__success\">\n            <h3 className=\"h3-bold\">Check your inbox</h3>\n            <p>\n                If that address is subscribed to email notifications, a link to\n                update its preferences is on its way. The link is valid for 30\n                minutes.\n            </p>\n        </div>\n    </PreferencesScreen>\n)\n\nconst ErrorAlert = ({ error }: { error: unknown }) =>\n    error ? (\n        <div className=\"newsletter-form__alert\">{getErrorMessage(error)}</div>\n    ) : null\n\nfunction useRequestLinkMutation() {\n    return useMutation({\n        retry: false,\n        mutationFn: async (request: EmailNotificationsRequestLinkRequest) => {\n            const response = await apiPost(\"/request-link\", request)\n            await throwIfApiError(response)\n        },\n    })\n}\n\nconst EnterEmailScreen = () => {\n    const {\n        ref: captchaRef,\n        captchaToken,\n        setCaptchaToken,\n        resetCaptcha,\n        spamProtectionFields,\n    } = useNewsletterSpamProtection()\n    const [email, setEmail] = useState(\"\")\n    const requestLink = useRequestLinkMutation()\n\n    if (requestLink.isSuccess) return <LinkSentScreen />\n\n    const handleSubmit = (event: React.SubmitEvent<HTMLFormElement>) => {\n        event.preventDefault()\n        const trimmedEmail = email.trim()\n        if (!trimmedEmail || requestLink.isPending || !captchaToken) return\n        requestLink.mutate(\n            {\n                ...spamProtectionFields(event.currentTarget),\n                email: trimmedEmail,\n            },\n            { onError: resetCaptcha }\n        )\n    }\n\n    return (\n        <PreferencesScreen>\n            <form\n                className=\"email-notifications-preferences-form\"\n                onSubmit={handleSubmit}\n            >\n                <p>\n                    Enter your email address and we'll send you a link to view\n                    and update your notification preferences.\n                </p>\n                <ErrorAlert error={requestLink.error} />\n                <NewsletterSpamProtection\n                    action=\"request-link\"\n                    ref={captchaRef}\n                    onToken={setCaptchaToken}\n                />\n                <div className=\"newsletter-form__email-submit\">\n                    <TextInput\n                        placeholder=\"Your email address\"\n                        type=\"email\"\n                        className=\"newsletter-form__email sentry-mask\"\n                        name=\"email\"\n                        value={email}\n                        onChange={(event) => setEmail(event.target.value)}\n                        required={true}\n                    />\n                    <Button\n                        type=\"submit\"\n                        theme=\"solid-vermillion\"\n                        icon={null}\n                        text={\n                            requestLink.isPending\n                                ? \"Sending…\"\n                                : \"Email me a link\"\n                        }\n                        disabled={requestLink.isPending || !captchaToken}\n                    />\n                </div>\n            </form>\n        </PreferencesScreen>\n    )\n}\n\nconst ExpiredLinkScreen = ({ token }: { token: string }) => {\n    const requestLink = useRequestLinkMutation()\n\n    if (requestLink.isSuccess) return <LinkSentScreen />\n\n    return (\n        <SubscribePageConfirmation\n            variant=\"error\"\n            heading=\"This link has expired\"\n        >\n            <p className=\"subscribe-page__confirmation-text\">\n                The link you followed is no longer valid. For your security,\n                preference links are only valid for 30 minutes. We can email you\n                a new one.\n            </p>\n            <ErrorAlert error={requestLink.error} />\n            <Button\n                className=\"subscribe-page__confirmation-action\"\n                theme=\"outline-vermillion\"\n                icon={null}\n                text={\n                    requestLink.isPending ? \"Sending…\" : \"Email me a new link\"\n                }\n                disabled={requestLink.isPending}\n                onClick={() => requestLink.mutate({ token })}\n            />\n        </SubscribePageConfirmation>\n    )\n}\n\nconst InvalidLinkScreen = () => (\n    <SubscribePageConfirmation variant=\"error\" heading=\"This link is not valid\">\n        <p className=\"subscribe-page__confirmation-text\">\n            The link you followed is not valid. Please use the link from our\n            most recent email, or request a new one.\n        </p>\n        <Button\n            className=\"subscribe-page__confirmation-action\"\n            theme=\"outline-vermillion\"\n            icon={null}\n            href=\"/preferences\"\n            text=\"Request a new link\"\n        />\n    </SubscribePageConfirmation>\n)\n\ntype TokenLookup =\n    | { state: \"expired\" }\n    | { state: \"invalid\" }\n    | {\n          state: \"valid\"\n          email: string\n          subscribedToTopicNotifications: boolean\n          preferences: EmailNotificationsPreferences | null\n          subscribedToOwidBrief: boolean | null\n      }\n\nasync function fetchPreferences(token: string): Promise<TokenLookup> {\n    const response = await apiGet(\"/preferences\", { token })\n    if (response.status === 410) return { state: \"expired\" }\n    if (!response.ok) return { state: \"invalid\" }\n    const json: EmailNotificationsPreferencesResponse = await response.json()\n    if (!json.email || !json.emailNotificationsStatus)\n        return { state: \"invalid\" }\n    return {\n        state: \"valid\",\n        email: json.email,\n        subscribedToTopicNotifications:\n            json.emailNotificationsStatus === \"subscribed\",\n        preferences: json.preferences ?? null,\n        subscribedToOwidBrief: json.subscribedToOwidBrief ?? null,\n    }\n}\n\ntype TokenScreenResult =\n    | { state: \"saved\"; owidBriefOptIn?: OwidBriefOptInResult }\n    | { state: \"unsubscribed\" }\n    | { state: \"expired\" }\n\nconst TokenScreen = ({ token }: { token: string }) => {\n    const [result, setResult] = useState<TokenScreenResult | null>(null)\n    const lookup = useQuery({\n        queryKey: [\"email-notifications-preferences\", token],\n        queryFn: () => fetchPreferences(token),\n        retry: false,\n        staleTime: Infinity,\n    })\n\n    if (result) {\n        return match(result)\n            .with({ state: \"saved\" }, ({ owidBriefOptIn }) => (\n                <SubscribePageConfirmation heading=\"Preferences updated\">\n                    <p className=\"subscribe-page__confirmation-text\">\n                        Your email preferences have been saved.\n                    </p>\n                    {owidBriefOptIn === \"pending\" && (\n                        <p className=\"subscribe-page__confirmation-text\">\n                            To start receiving The OWID Brief again, please\n                            confirm your subscription using the link in the\n                            confirmation email from Mailchimp. If you no longer\n                            have that email, please contact us at{\" \"}\n                            <a href=\"mailto:info@ourworldindata.org\">\n                                info@ourworldindata.org\n                            </a>\n                            .\n                        </p>\n                    )}\n                </SubscribePageConfirmation>\n            ))\n            .with({ state: \"unsubscribed\" }, () => (\n                <SubscribePageConfirmation heading=\"You have been successfully unsubscribed\">\n                    <p className=\"subscribe-page__confirmation-text\">\n                        You will no longer receive emails from us. You can\n                        resubscribe any time.\n                    </p>\n                    <Button\n                        className=\"subscribe-page__confirmation-action\"\n                        theme=\"outline-vermillion\"\n                        icon={null}\n                        href=\"/subscribe\"\n                        text=\"Resubscribe\"\n                        dataTrackNote=\"preferences_resubscribe\"\n                    />\n                </SubscribePageConfirmation>\n            ))\n            .with({ state: \"expired\" }, () => (\n                <ExpiredLinkScreen token={token} />\n            ))\n            .exhaustive()\n    }\n\n    if (lookup.isPending) {\n        return (\n            <PreferencesScreen>\n                <p>Loading your preferences…</p>\n            </PreferencesScreen>\n        )\n    }\n    if (lookup.isError) return <InvalidLinkScreen />\n\n    return match(lookup.data)\n        .with({ state: \"expired\" }, () => <ExpiredLinkScreen token={token} />)\n        .with({ state: \"invalid\" }, () => <InvalidLinkScreen />)\n        .with({ state: \"valid\" }, (data) => (\n            <PreferencesEditor\n                token={token}\n                email={data.email}\n                initialPreferences={data.preferences}\n                initialSubscribedToTopicNotifications={\n                    data.subscribedToTopicNotifications\n                }\n                initialSubscribedToOwidBrief={data.subscribedToOwidBrief}\n                onDone={setResult}\n            />\n        ))\n        .exhaustive()\n}\n\nconst PreferencesEditor = ({\n    token,\n    email,\n    initialPreferences,\n    initialSubscribedToTopicNotifications,\n    initialSubscribedToOwidBrief,\n    onDone,\n}: {\n    token: string\n    email: string\n    initialPreferences: EmailNotificationsPreferences | null\n    initialSubscribedToTopicNotifications: boolean\n    // null = Mailchimp unavailable, so the Brief control is disabled.\n    initialSubscribedToOwidBrief: boolean | null\n    onDone: (result: TokenScreenResult) => void\n}) => {\n    const preferences = useNotificationPreferences(initialPreferences)\n    const [subscribedToTopicNotifications, setSubscribedToTopicNotifications] =\n        useState(initialSubscribedToTopicNotifications)\n    const [subscribedToOwidBrief, setSubscribedToOwidBrief] = useState(\n        initialSubscribedToOwidBrief\n    )\n\n    const update = useMutation({\n        mutationFn: async (\n            request: EmailNotificationsUpdatePreferencesRequest\n        ): Promise<TokenScreenResult> => {\n            const response = await apiPost(\"/preferences\", request)\n            if (response.status === 410) return { state: \"expired\" }\n            await throwIfApiError(response)\n            if (request.action === \"unsubscribeAll\")\n                return { state: \"unsubscribed\" }\n            const data =\n                (await response.json()) as EmailNotificationsUpdatePreferencesResponse\n            return { state: \"saved\", owidBriefOptIn: data.owidBriefOptIn }\n        },\n        onSuccess: onDone,\n    })\n\n    const handleSave = (event: React.SubmitEvent<HTMLFormElement>) => {\n        event.preventDefault()\n        preferences.resetValidation()\n        if (subscribedToTopicNotifications && !preferences.validate()) return\n        // Send only changes, since pending Brief subscriptions appear unchecked.\n        const commonRequest = {\n            action: \"updatePreferences\" as const,\n            token,\n            subscribeToOwidBrief:\n                subscribedToOwidBrief === initialSubscribedToOwidBrief\n                    ? undefined\n                    : (subscribedToOwidBrief ?? undefined),\n        }\n        update.mutate(\n            subscribedToTopicNotifications\n                ? {\n                      ...commonRequest,\n                      subscribeToTopicNotifications: true,\n                      preferences: preferences.forStorage(),\n                  }\n                : {\n                      ...commonRequest,\n                      subscribeToTopicNotifications: false,\n                  }\n        )\n    }\n\n    const handleUnsubscribe = () => {\n        preferences.resetValidation()\n        update.mutate({\n            action: \"unsubscribeAll\",\n            token,\n        })\n    }\n\n    return (\n        <PreferencesScreen>\n            <form\n                className=\"email-notifications-preferences-form\"\n                onSubmit={handleSave}\n            >\n                <p>\n                    Updating the email notification preferences for{\" \"}\n                    <strong>{email}</strong>.\n                </p>\n                <fieldset className=\"newsletter-form__fieldset\">\n                    <legend className=\"h5-black-caps\">Newsletters</legend>\n                    {subscribedToOwidBrief !== null && (\n                        <>\n                            <NewsletterOption\n                                id=\"email-notifications-preferences-owid-brief\"\n                                imageSrc=\"/images/biweekly-newsletter.webp\"\n                                title={OWID_BRIEF_TITLE}\n                                cadence={OWID_BRIEF_CADENCE}\n                                description={OWID_BRIEF_DESCRIPTION}\n                                checked={subscribedToOwidBrief}\n                                onChange={() =>\n                                    setSubscribedToOwidBrief(\n                                        !subscribedToOwidBrief\n                                    )\n                                }\n                            />\n                            <hr className=\"newsletter-form__divider\" />\n                        </>\n                    )}\n                    <NewsletterOption\n                        id=\"email-notifications-preferences-follow-topics\"\n                        imageSrc=\"/images/data-insights.webp\"\n                        title={FOLLOW_TOPICS_TITLE}\n                        cadence={FOLLOW_TOPICS_CADENCE}\n                        description={FOLLOW_TOPICS_DESCRIPTION}\n                        checked={subscribedToTopicNotifications}\n                        onChange={() =>\n                            setSubscribedToTopicNotifications(\n                                !subscribedToTopicNotifications\n                            )\n                        }\n                    />\n                </fieldset>\n                {subscribedToTopicNotifications && (\n                    <EmailNotificationsPreferenceFields\n                        {...preferences.fieldsProps}\n                    />\n                )}\n                {subscribedToOwidBrief === null && (\n                    <div className=\"newsletter-form__alert\">\n                        We couldn't load your OWID Brief subscription. You can\n                        still update Follow Topics, or try again later to manage\n                        the Brief.\n                    </div>\n                )}\n                <ErrorAlert error={update.error} />\n                <div className=\"email-notifications-preferences-form__actions\">\n                    <Button\n                        type=\"submit\"\n                        theme=\"solid-vermillion\"\n                        icon={null}\n                        text={update.isPending ? \"Saving…\" : \"Save preferences\"}\n                        disabled={update.isPending}\n                    />\n                    {subscribedToOwidBrief !== null && (\n                        <button\n                            type=\"button\"\n                            className=\"email-notifications-preferences-form__unsubscribe\"\n                            disabled={update.isPending}\n                            onClick={handleUnsubscribe}\n                        >\n                            Unsubscribe from all email notifications\n                        </button>\n                    )}\n                </div>\n            </form>\n        </PreferencesScreen>\n    )\n}\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n    byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n    return (byteToHex[arr[offset + 0]] +\n        byteToHex[arr[offset + 1]] +\n        byteToHex[arr[offset + 2]] +\n        byteToHex[arr[offset + 3]] +\n        '-' +\n        byteToHex[arr[offset + 4]] +\n        byteToHex[arr[offset + 5]] +\n        '-' +\n        byteToHex[arr[offset + 6]] +\n        byteToHex[arr[offset + 7]] +\n        '-' +\n        byteToHex[arr[offset + 8]] +\n        byteToHex[arr[offset + 9]] +\n        '-' +\n        byteToHex[arr[offset + 10]] +\n        byteToHex[arr[offset + 11]] +\n        byteToHex[arr[offset + 12]] +\n        byteToHex[arr[offset + 13]] +\n        byteToHex[arr[offset + 14]] +\n        byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n    const uuid = unsafeStringify(arr, offset);\n    if (!validate(uuid)) {\n        throw TypeError('Stringified UUID is invalid');\n    }\n    return uuid;\n}\nexport default stringify;\n","const rnds8 = new Uint8Array(16);\nexport default function rng() {\n    return crypto.getRandomValues(rnds8);\n}\n","import rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nconst _state = {};\nfunction v7(options, buf, offset) {\n    let bytes;\n    if (options) {\n        bytes = v7Bytes(options.random ?? options.rng?.() ?? rng(), options.msecs, options.seq, buf, offset);\n    }\n    else {\n        const now = Date.now();\n        const rnds = rng();\n        updateV7State(_state, now, rnds);\n        bytes = v7Bytes(rnds, _state.msecs, _state.seq, buf, offset);\n    }\n    return buf ?? unsafeStringify(bytes);\n}\nexport function updateV7State(state, now, rnds) {\n    state.msecs ??= -Infinity;\n    state.seq ??= 0;\n    if (now > state.msecs) {\n        state.seq = (rnds[6] << 23) | (rnds[7] << 16) | (rnds[8] << 8) | rnds[9];\n        state.msecs = now;\n    }\n    else {\n        state.seq = (state.seq + 1) | 0;\n        if (state.seq === 0) {\n            state.msecs++;\n        }\n    }\n    return state;\n}\nfunction v7Bytes(rnds, msecs, seq, buf, offset = 0) {\n    if (rnds.length < 16) {\n        throw new Error('Random bytes length must be >= 16');\n    }\n    if (!buf) {\n        buf = new Uint8Array(16);\n        offset = 0;\n    }\n    else {\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n    }\n    msecs ??= Date.now();\n    seq ??= ((rnds[6] * 0x7f) << 24) | (rnds[7] << 16) | (rnds[8] << 8) | rnds[9];\n    buf[offset++] = (msecs / 0x10000000000) & 0xff;\n    buf[offset++] = (msecs / 0x100000000) & 0xff;\n    buf[offset++] = (msecs / 0x1000000) & 0xff;\n    buf[offset++] = (msecs / 0x10000) & 0xff;\n    buf[offset++] = (msecs / 0x100) & 0xff;\n    buf[offset++] = msecs & 0xff;\n    buf[offset++] = 0x70 | ((seq >>> 28) & 0x0f);\n    buf[offset++] = (seq >>> 20) & 0xff;\n    buf[offset++] = 0x80 | ((seq >>> 14) & 0x3f);\n    buf[offset++] = (seq >>> 6) & 0xff;\n    buf[offset++] = ((seq << 2) & 0xff) | (rnds[10] & 0x03);\n    buf[offset++] = rnds[11];\n    buf[offset++] = rnds[12];\n    buf[offset++] = rnds[13];\n    buf[offset++] = rnds[14];\n    buf[offset++] = rnds[15];\n    return buf;\n}\nexport default v7;\n","import { getPreferenceValue, PreferenceType } from \"./cookiePreferences.js\"\n\nexport const USER_SURVEY_MIN_VISIT_COUNT = 5\nexport const USER_SURVEY_RETURNING_USER_MIN_AGE_MS = 24 * 60 * 60 * 1000 // 24 hours\n\nexport const USER_SURVEY_FIRST_VISIT_TIMESTAMP_STORAGE_KEY =\n    \"owid.userSurvey.roleV1.firstVisitTimestampMs\"\nexport const USER_SURVEY_VISIT_COUNT_STORAGE_KEY =\n    \"owid.userSurvey.roleV1.visitCount\"\nexport const USER_SURVEY_ROLE_V1_RESPONSE_STORAGE_KEY =\n    \"owid.userSurvey.roleV1.response\"\n\nexport type UserSurveyResponse = \"answered\" | \"dismissed\"\n\nexport function isUserSurveyEligible({\n    hasAnalyticsConsent,\n    response,\n    visitCount,\n    firstVisitTimestampMs,\n    nowTimestampMs,\n}: {\n    hasAnalyticsConsent: boolean\n    response: UserSurveyResponse | undefined\n    visitCount: number\n    firstVisitTimestampMs: number | undefined\n    nowTimestampMs: number\n}): boolean {\n    if (!hasAnalyticsConsent) {\n        return false\n    }\n\n    if (response) {\n        return false\n    }\n\n    if (visitCount < USER_SURVEY_MIN_VISIT_COUNT) {\n        return false\n    }\n\n    if (\n        firstVisitTimestampMs === undefined ||\n        nowTimestampMs - firstVisitTimestampMs <\n            USER_SURVEY_RETURNING_USER_MIN_AGE_MS\n    ) {\n        return false\n    }\n\n    return true\n}\n\nexport function getUserSurveyWidgetEligibility(\n    nowTimestampMs: number = Date.now()\n): boolean {\n    const hasAnalyticsConsent = getPreferenceValue(PreferenceType.Analytics)\n    const response = getUserSurveyResponse()\n\n    if (!hasAnalyticsConsent) {\n        return false\n    }\n    if (response) {\n        return false\n    }\n\n    const visitCount = incrementAndGetUserSurveyVisitCount()\n    const firstVisitTimestampMs =\n        getOrSetUserSurveyFirstVisitTimestampMs(nowTimestampMs)\n\n    return isUserSurveyEligible({\n        hasAnalyticsConsent,\n        response,\n        visitCount,\n        firstVisitTimestampMs,\n        nowTimestampMs,\n    })\n}\n\nexport function markUserSurveyAnswered(): void {\n    setUserSurveyResponse(\"answered\")\n}\n\nexport function markUserSurveyDismissed(): void {\n    setUserSurveyResponse(\"dismissed\")\n}\n\nfunction parseUserSurveyResponse(\n    value: string | null\n): UserSurveyResponse | undefined {\n    if (value === \"answered\" || value === \"dismissed\") return value\n    return undefined\n}\n\nfunction getUserSurveyResponse(): UserSurveyResponse | undefined {\n    return parseUserSurveyResponse(\n        getFromLocalStorage(USER_SURVEY_ROLE_V1_RESPONSE_STORAGE_KEY)\n    )\n}\n\nfunction setUserSurveyResponse(response: UserSurveyResponse): void {\n    setInLocalStorage(USER_SURVEY_ROLE_V1_RESPONSE_STORAGE_KEY, response)\n}\n\nfunction getUserSurveyVisitCount(): number {\n    const value = getFromLocalStorage(USER_SURVEY_VISIT_COUNT_STORAGE_KEY)\n    if (!value) return 0\n\n    const parsed = Number.parseInt(value, 10)\n    if (!Number.isFinite(parsed) || parsed < 0) return 0\n    return parsed\n}\n\nfunction setUserSurveyVisitCount(visitCount: number): void {\n    setInLocalStorage(USER_SURVEY_VISIT_COUNT_STORAGE_KEY, String(visitCount))\n}\n\nfunction incrementAndGetUserSurveyVisitCount(): number {\n    const currentVisitCount = getUserSurveyVisitCount()\n    if (currentVisitCount >= USER_SURVEY_MIN_VISIT_COUNT) {\n        return currentVisitCount\n    }\n\n    const nextVisitCount = currentVisitCount + 1\n    setUserSurveyVisitCount(nextVisitCount)\n    return nextVisitCount\n}\n\nfunction getUserSurveyFirstVisitTimestampMs(): number | undefined {\n    const value = getFromLocalStorage(\n        USER_SURVEY_FIRST_VISIT_TIMESTAMP_STORAGE_KEY\n    )\n    if (!value) return undefined\n\n    const parsed = Number.parseInt(value, 10)\n    if (!Number.isFinite(parsed)) return undefined\n    return parsed\n}\n\nfunction setUserSurveyFirstVisitTimestampMs(timestampMs: number): void {\n    setInLocalStorage(\n        USER_SURVEY_FIRST_VISIT_TIMESTAMP_STORAGE_KEY,\n        String(timestampMs)\n    )\n}\n\nfunction getOrSetUserSurveyFirstVisitTimestampMs(\n    nowTimestampMs: number\n): number {\n    const firstVisitTimestampMs = getUserSurveyFirstVisitTimestampMs()\n    if (firstVisitTimestampMs !== undefined) return firstVisitTimestampMs\n\n    setUserSurveyFirstVisitTimestampMs(nowTimestampMs)\n    return nowTimestampMs\n}\n\nfunction getFromLocalStorage(key: string): string | null {\n    try {\n        if (typeof window === \"undefined\") return null\n        return window.localStorage.getItem(key)\n    } catch {\n        return null\n    }\n}\n\nfunction setInLocalStorage(key: string, value: string): void {\n    try {\n        if (typeof window === \"undefined\") return\n        window.localStorage.setItem(key, value)\n    } catch {\n        // ignore\n    }\n}\n","import {\n    faCheck,\n    faCircleXmark,\n    faXmark,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport cx from \"clsx\"\nimport * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport { useEffect, useRef, useState } from \"react\"\nimport { Form } from \"react-aria-components\"\nimport { match } from \"ts-pattern\"\nimport { v7 as uuidv7 } from \"uuid\"\nimport { Button, RadioButton } from \"@ourworldindata/components\"\nimport {\n    type UserSurveyExperimentArm,\n    type UserSurveyRoleAnswer,\n} from \"@ourworldindata/types\"\nimport { getExperimentState } from \"@ourworldindata/utils\"\nimport { SiteAnalytics } from \"../../SiteAnalytics.js\"\nimport {\n    getUserSurveyWidgetEligibility,\n    markUserSurveyAnswered,\n    markUserSurveyDismissed,\n} from \"../../userSurvey.js\"\nimport { useTriggerOnEscape } from \"../../hooks.js\"\n\nconst FEEDBACK_EMAIL_API_URL = \"https://feedback.owid.io\"\nconst FEEDBACK_STORAGE_API_URL = \"/api/user-survey\"\nconst USER_SURVEY_NAME = \"user-role-v1\"\nconst USER_SURVEY_EXPERIMENT_ID = \"exp-user-survey-role-v1\"\nconst USER_SURVEY_FREE_FORM_INPUT_ID = \"user-survey-free-form-input\"\nconst USER_SURVEY_FOLLOW_UP_INPUT_ID = \"user-survey-follow-up-input\"\nconst USER_SURVEY_TITLE_ID = \"user-survey-title\"\nconst USER_SURVEY_FOLLOW_UP_TITLE_ID = \"user-survey-follow-up-title\"\nconst USER_SURVEY_FOLLOW_UP_DESCRIPTION_ID = \"user-survey-follow-up-description\"\n\nconst siteAnalytics = new SiteAnalytics()\nconst responseId = uuidv7()\n\ntype RoleOption = {\n    id: string\n    label: string\n    description?: string\n    hasInlineInput?: boolean\n}\n\ntype SurveyState =\n    | { phase: \"hidden\" }\n    | { phase: \"role\"; experimentArm: UserSurveyExperimentArm }\n    | { phase: \"thankYou\"; roleAnswer: UserSurveyRoleAnswer }\n\ntype UserSurveyRoleStepProps = {\n    onDismiss: () => void\n    onAnswered: (roleAnswer: UserSurveyRoleAnswer) => void\n}\n\nconst LONG_LIST_OPTIONS: RoleOption[] = _.shuffle<RoleOption>([\n    {\n        id: \"policy-professional\",\n        label: \"Public policy professional\",\n        description:\n            \"Policy advisor, government official, or consultant working on public policy\",\n    },\n    {\n        id: \"journalist-or-media-professional\",\n        label: \"Journalist or media professional\",\n        description:\n            \"Reporting, writing, editing, or publishing for media or online platforms\",\n    },\n    {\n        id: \"educator\",\n        label: \"Educator\",\n        description: \"Teacher, lecturer, or professor\",\n    },\n    {\n        id: \"student\",\n        label: \"Student\",\n        description: \"School or university student\",\n    },\n    {\n        id: \"researcher-or-scientist\",\n        label: \"Researcher or scientist\",\n        description: \"Academic or applied research, including think tanks\",\n    },\n    {\n        id: \"ngo-or-civil-society-professional\",\n        label: \"NGO or civil society professional\",\n        description: \"Working in a local or international nonprofit\",\n    },\n    {\n        id: \"business-or-investment-professional\",\n        label: \"Business or investment professional\",\n        description:\n            \"Working in the private sector, including finance, industry, or startups\",\n    },\n    {\n        id: \"interested-member-of-the-public\",\n        label: \"Interested member of the public\",\n        description:\n            \"Using the site to learn, explore, or inform personal decisions\",\n    },\n    {\n        id: \"health-professional\",\n        label: \"Health professional\",\n        description: \"Clinician, public health worker, health practitioner\",\n    },\n]).concat([{ id: \"other\", label: \"Other\", hasInlineInput: true }])\n\nconst SHORT_LIST_OPTIONS: RoleOption[] = _.shuffle<RoleOption>([\n    {\n        id: \"government-civil-society-professional\",\n        label: \"Government or civil society professional\",\n    },\n    {\n        id: \"researcher-educator-student\",\n        label: \"Researcher, educator, or student\",\n    },\n    {\n        id: \"business-professional\",\n        label: \"Business professional\",\n    },\n    {\n        id: \"media-professional-or-journalist\",\n        label: \"Media professional or journalist\",\n    },\n    {\n        id: \"interested-member-of-public\",\n        label: \"Interested member of the public\",\n    },\n]).concat([{ id: \"other\", label: \"Other\", hasInlineInput: true }])\n\nfunction getAssignedExperimentArm() {\n    const assignedArm = getExperimentState()[USER_SURVEY_EXPERIMENT_ID]?.arm\n    if (\n        assignedArm === \"long-list\" ||\n        assignedArm === \"short-list\" ||\n        assignedArm === \"free-form\"\n    )\n        return assignedArm\n    return null\n}\n\nfunction isValidRoleAnswer(\n    selectedOptionId: string | null,\n    otherInput: string\n) {\n    return (\n        selectedOptionId !== null &&\n        (selectedOptionId !== \"other\" || otherInput.trim().length > 0)\n    )\n}\n\nfunction getFreeFormInput(selectedOptionId: string, otherInput: string) {\n    if (selectedOptionId !== \"other\") return undefined\n    return otherInput.trim()\n}\n\nfunction getSelectedOptionMeta(\n    selectedOptionId: string,\n    options: readonly { id: string; label: string }[]\n) {\n    const selectedOptionIndex = options.findIndex(\n        (option) => option.id === selectedOptionId\n    )\n    if (selectedOptionIndex === -1) return undefined\n\n    return {\n        optionIndex: selectedOptionIndex,\n        optionLabel: options[selectedOptionIndex].label,\n    }\n}\n\nfunction getFeedbackEnvironment() {\n    return `Current URL: ${window.location.href}\\nUser Agent: ${navigator.userAgent}\\nViewport: ${window.innerWidth}x${window.innerHeight}`\n}\n\nasync function sendFeedbackEmail({ message }: { message: string }) {\n    const response = await fetch(FEEDBACK_EMAIL_API_URL, {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify({\n            name: \"\",\n            email: \"\",\n            message,\n            environment: getFeedbackEnvironment(),\n        }),\n    })\n\n    if (!response.ok) {\n        throw new Error(\n            `Sending user survey feedback failed: ${response.status} ${response.statusText}`\n        )\n    }\n}\n\nasync function storeFeedback({\n    surveyName,\n    responseId,\n    feedbackAnswer,\n    roleAnswer,\n}: {\n    surveyName: string\n    responseId: string\n    feedbackAnswer: string\n    roleAnswer: UserSurveyRoleAnswer\n}) {\n    const response = await fetch(FEEDBACK_STORAGE_API_URL, {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify({\n            surveyName,\n            responseId,\n            feedbackAnswer,\n            roleAnswer,\n        }),\n    })\n\n    if (!response.ok) {\n        throw new Error(\n            `Storing user survey feedback failed: ${response.status} ${response.statusText}`\n        )\n    }\n}\n\nasync function submitFeedback({\n    surveyName,\n    responseId,\n    feedbackAnswer,\n    roleAnswer,\n}: {\n    surveyName: string\n    responseId: string\n    feedbackAnswer: string\n    roleAnswer: UserSurveyRoleAnswer\n}) {\n    await Promise.all([\n        sendFeedbackEmail({\n            message: buildFeedbackMessage({\n                surveyName,\n                responseId,\n                feedbackAnswer,\n                roleAnswer,\n            }),\n        }),\n        storeFeedback({\n            surveyName,\n            responseId,\n            feedbackAnswer,\n            roleAnswer,\n        }),\n    ])\n}\n\nfunction buildFeedbackMessage({\n    surveyName,\n    responseId,\n    feedbackAnswer,\n    roleAnswer,\n}: {\n    surveyName: string\n    responseId: string\n    feedbackAnswer: string\n    roleAnswer: UserSurveyRoleAnswer\n}) {\n    const messageLines = [\n        \"User survey context:\",\n        `survey_name: ${surveyName}`,\n        `response_id: ${responseId}`,\n        `experiment_arm: ${roleAnswer.experimentArm}`,\n    ]\n\n    if (roleAnswer.freeFormInput !== undefined) {\n        messageLines.push(`free_form_input: ${roleAnswer.freeFormInput}`)\n    }\n    if (\"optionId\" in roleAnswer) {\n        messageLines.push(`option_id: ${roleAnswer.optionId}`)\n        messageLines.push(`option_label: ${roleAnswer.optionLabel}`)\n        messageLines.push(`option_index: ${roleAnswer.optionIndex}`)\n    }\n\n    messageLines.push(\"\", \"Follow-up feedback:\", feedbackAnswer)\n    return messageLines.join(\"\\n\")\n}\n\nfunction logRoleSubmit({\n    surveyName,\n    responseId,\n    roleAnswer,\n}: {\n    surveyName: string\n    responseId: string\n    roleAnswer: UserSurveyRoleAnswer\n}) {\n    if (roleAnswer.experimentArm === \"free-form\") {\n        siteAnalytics.logUserSurveyRoleSubmit({\n            surveyName,\n            responseId,\n            experimentArm: roleAnswer.experimentArm,\n            freeFormInput: roleAnswer.freeFormInput,\n        })\n        return\n    }\n\n    siteAnalytics.logUserSurveyRoleSubmit({\n        surveyName,\n        responseId,\n        experimentArm: roleAnswer.experimentArm,\n        optionId: roleAnswer.optionId,\n        optionLabel: roleAnswer.optionLabel,\n        optionIndex: roleAnswer.optionIndex,\n        ...(roleAnswer.freeFormInput !== undefined\n            ? { freeFormInput: roleAnswer.freeFormInput }\n            : {}),\n    })\n}\n\nfunction submitRoleAnswer({\n    roleAnswer,\n    onAnswered,\n}: {\n    roleAnswer: UserSurveyRoleAnswer\n    onAnswered: (roleAnswer: UserSurveyRoleAnswer) => void\n}) {\n    logRoleSubmit({\n        surveyName: USER_SURVEY_NAME,\n        responseId,\n        roleAnswer,\n    })\n    onAnswered(roleAnswer)\n}\n\nfunction buildListRoleAnswer({\n    experimentArm,\n    selectedOptionId,\n    otherInput,\n    options,\n}: {\n    experimentArm: \"long-list\" | \"short-list\"\n    selectedOptionId: string | null\n    otherInput: string\n    options: readonly { id: string; label: string }[]\n}): UserSurveyRoleAnswer | undefined {\n    if (selectedOptionId === null) return undefined\n\n    const selectedOption = getSelectedOptionMeta(selectedOptionId, options)\n    if (!selectedOption) return undefined\n\n    const freeFormInput = getFreeFormInput(selectedOptionId, otherInput)\n    return {\n        experimentArm,\n        freeFormInput,\n        optionId: selectedOptionId,\n        optionLabel: selectedOption.optionLabel,\n        optionIndex: selectedOption.optionIndex,\n    }\n}\n\nfunction UserSurveyDialog({\n    className,\n    title,\n    onDismiss,\n    children,\n}: {\n    className: string\n    title: string\n    onDismiss: () => void\n    children: React.ReactNode\n}) {\n    return (\n        <aside\n            className={cx(\"user-survey\", className)}\n            role=\"region\"\n            aria-labelledby={USER_SURVEY_TITLE_ID}\n        >\n            <div className=\"user-survey__header\">\n                <h3 id={USER_SURVEY_TITLE_ID} className=\"user-survey__title\">\n                    {title}\n                </h3>\n                <Button\n                    className=\"user-survey__close-button\"\n                    theme=\"outline-light-blue\"\n                    onClick={onDismiss}\n                    ariaLabel=\"Close\"\n                    icon={faXmark}\n                />\n            </div>\n            {children}\n        </aside>\n    )\n}\n\nfunction ThankYouStep({\n    onDismiss,\n    onSuccess,\n    surveyName,\n    responseId,\n    roleAnswer,\n}: {\n    onDismiss: () => void\n    onSuccess: () => void\n    surveyName: string\n    responseId: string\n    roleAnswer: UserSurveyRoleAnswer\n}) {\n    const [feedback, setFeedback] = useState<string>(\"\")\n    const [isSubmitting, setIsSubmitting] = useState<boolean>(false)\n    const [submitError, setSubmitError] = useState<string | null>(null)\n    const isSubmitDisabled = isSubmitting || feedback.trim().length === 0\n    const headingRef = useRef<HTMLHeadingElement>(null)\n    useTriggerOnEscape(onDismiss)\n\n    // Move focus to the heading on mount so screen readers announce the phase\n    // transition from the role question to this thank-you step (WCAG 4.1.3).\n    useEffect(() => {\n        headingRef.current?.focus()\n    }, [])\n\n    function handleSubmit() {\n        const feedbackAnswer = feedback.trim()\n        if (feedbackAnswer.length === 0) {\n            onDismiss()\n            return\n        }\n\n        setIsSubmitting(true)\n        setSubmitError(null)\n\n        void submitFeedback({\n            surveyName,\n            responseId,\n            feedbackAnswer,\n            roleAnswer,\n        })\n            .then(() => {\n                siteAnalytics.logUserSurveyFeedbackSubmit({\n                    surveyName,\n                    responseId,\n                    experimentArm: roleAnswer.experimentArm,\n                })\n                onSuccess()\n            })\n            .catch(() => {\n                setSubmitError(\n                    \"Something went wrong while sending feedback. Please try again.\"\n                )\n            })\n            .finally(() => {\n                setIsSubmitting(false)\n            })\n    }\n\n    return (\n        <aside\n            className=\"user-survey user-survey--follow-up\"\n            role=\"region\"\n            aria-labelledby={USER_SURVEY_FOLLOW_UP_TITLE_ID}\n            aria-describedby={USER_SURVEY_FOLLOW_UP_DESCRIPTION_ID}\n        >\n            <div className=\"user-survey__follow-up-body\">\n                <div className=\"user-survey__follow-up-top-row\">\n                    <div className=\"user-survey__follow-up-checkmark\">\n                        <FontAwesomeIcon icon={faCheck} />\n                    </div>\n                    <Button\n                        className=\"user-survey__close-button user-survey__follow-up-close-button\"\n                        theme=\"outline-light-blue\"\n                        onClick={onDismiss}\n                        ariaLabel=\"Close\"\n                        icon={faXmark}\n                    />\n                </div>\n                <h3\n                    ref={headingRef}\n                    id={USER_SURVEY_FOLLOW_UP_TITLE_ID}\n                    className=\"user-survey__follow-up-title\"\n                    tabIndex={-1}\n                >\n                    Thank you for answering our survey.\n                </h3>\n                <p\n                    id={USER_SURVEY_FOLLOW_UP_DESCRIPTION_ID}\n                    className=\"user-survey__follow-up-description\"\n                >\n                    This will help us improve our website for our users.\n                </p>\n                <label\n                    className=\"user-survey__follow-up-label\"\n                    htmlFor={USER_SURVEY_FOLLOW_UP_INPUT_ID}\n                >\n                    Do you have any other feedback?\n                </label>\n                <textarea\n                    id={USER_SURVEY_FOLLOW_UP_INPUT_ID}\n                    className=\"user-survey__follow-up-textarea\"\n                    value={feedback}\n                    disabled={isSubmitting}\n                    maxLength={2000}\n                    onChange={(event) => {\n                        setFeedback(event.target.value)\n                    }}\n                    placeholder=\"Let us know here...\"\n                />\n                {submitError && (\n                    <p className=\"user-survey__follow-up-error\" role=\"alert\">\n                        {submitError}\n                    </p>\n                )}\n                <div className=\"user-survey__follow-up-actions\">\n                    <Button\n                        className=\"user-survey__follow-up-no-thanks-button\"\n                        theme=\"outline-light-blue\"\n                        disabled={isSubmitting}\n                        onClick={onDismiss}\n                        text=\"No thanks\"\n                        icon={null}\n                    />\n                    <Button\n                        className=\"user-survey__follow-up-submit-button\"\n                        theme=\"solid-light-blue\"\n                        disabled={isSubmitDisabled}\n                        onClick={handleSubmit}\n                        text={isSubmitting ? \"Submitting...\" : \"Submit\"}\n                        icon={null}\n                    />\n                </div>\n            </div>\n        </aside>\n    )\n}\n\nfunction ListRoleStep({\n    experimentArm,\n    options,\n    className,\n    radioButtonGroup,\n    radioButtonClassName,\n    onDismiss,\n    onAnswered,\n}: UserSurveyRoleStepProps & {\n    experimentArm: \"long-list\" | \"short-list\"\n    options: RoleOption[]\n    className: string\n    radioButtonGroup: string\n    radioButtonClassName?: string\n}) {\n    const [selectedOptionId, setSelectedOptionId] = useState<string | null>(\n        null\n    )\n    const [otherInput, setOtherInput] = useState<string>(\"\")\n    const otherInputRef = useRef<HTMLInputElement>(null)\n\n    function handleSubmit(event: React.SyntheticEvent<HTMLFormElement>) {\n        event.preventDefault()\n        if (!isSubmitEnabled) return\n        const roleAnswer = buildListRoleAnswer({\n            experimentArm,\n            selectedOptionId,\n            otherInput,\n            options,\n        })\n        if (!roleAnswer) return\n\n        submitRoleAnswer({ roleAnswer, onAnswered })\n    }\n\n    const isSubmitEnabled = isValidRoleAnswer(selectedOptionId, otherInput)\n\n    return (\n        <UserSurveyDialog\n            className={className}\n            title=\"Which of the following best describes you?\"\n            onDismiss={onDismiss}\n        >\n            <Form className=\"user-survey__form\" onSubmit={handleSubmit}>\n                <fieldset className=\"user-survey__fieldset\">\n                    <legend className=\"user-survey__legend\">I am a:</legend>\n                    <div className=\"user-survey__options\">\n                        {options.map((option) => {\n                            const isSelected = selectedOptionId === option.id\n\n                            return (\n                                <div\n                                    className=\"user-survey__option\"\n                                    key={option.id}\n                                >\n                                    <RadioButton\n                                        className={cx(\n                                            \"user-survey__radio-button\",\n                                            radioButtonClassName\n                                        )}\n                                        id={`user-survey-${radioButtonGroup}-${option.id}`}\n                                        group={radioButtonGroup}\n                                        checked={isSelected}\n                                        onChange={() =>\n                                            setSelectedOptionId(option.id)\n                                        }\n                                        label={\n                                            option.description ? (\n                                                <span className=\"user-survey__option-text\">\n                                                    <span className=\"user-survey__option-title\">\n                                                        {option.label}\n                                                    </span>\n                                                    <span className=\"user-survey__option-description\">\n                                                        {option.description}\n                                                    </span>\n                                                </span>\n                                            ) : (\n                                                option.label\n                                            )\n                                        }\n                                    />\n                                    {option.hasInlineInput && (\n                                        <div className=\"user-survey__other-input-wrapper\">\n                                            <input\n                                                ref={otherInputRef}\n                                                className=\"user-survey__other-input\"\n                                                type=\"text\"\n                                                value={otherInput}\n                                                maxLength={200}\n                                                onFocus={() => {\n                                                    setSelectedOptionId(\n                                                        option.id\n                                                    )\n                                                }}\n                                                onChange={(event) => {\n                                                    setSelectedOptionId(\n                                                        option.id\n                                                    )\n                                                    setOtherInput(\n                                                        event.target.value\n                                                    )\n                                                }}\n                                                placeholder=\"Please specify...\"\n                                                aria-label=\"Please specify\"\n                                            />\n                                            {otherInput.length > 0 && (\n                                                <button\n                                                    className=\"user-survey__other-input-clear-button\"\n                                                    type=\"button\"\n                                                    onClick={() => {\n                                                        setOtherInput(\"\")\n                                                        setSelectedOptionId(\n                                                            option.id\n                                                        )\n                                                        otherInputRef.current?.focus()\n                                                    }}\n                                                    aria-label=\"Clear other details\"\n                                                >\n                                                    <FontAwesomeIcon\n                                                        icon={faCircleXmark}\n                                                    />\n                                                </button>\n                                            )}\n                                        </div>\n                                    )}\n                                </div>\n                            )\n                        })}\n                    </div>\n                    <div\n                        className={cx(\"user-survey__submit-row\", {\n                            \"user-survey__submit-row--sticky\":\n                                selectedOptionId !== null,\n                        })}\n                    >\n                        <Button\n                            className=\"user-survey__submit-button\"\n                            type=\"submit\"\n                            disabled={!isSubmitEnabled}\n                            text=\"Submit\"\n                            theme=\"solid-light-blue\"\n                            icon={null}\n                        />\n                    </div>\n                </fieldset>\n            </Form>\n        </UserSurveyDialog>\n    )\n}\n\nfunction FreeFormRoleStep({ onDismiss, onAnswered }: UserSurveyRoleStepProps) {\n    const [value, setValue] = useState<string>(\"\")\n\n    function handleSubmit(event: React.SyntheticEvent<HTMLFormElement>) {\n        event.preventDefault()\n        if (!isSubmitEnabled) return\n        const freeFormInput = value.trim()\n        const roleAnswer: UserSurveyRoleAnswer = {\n            experimentArm: \"free-form\",\n            freeFormInput,\n        }\n        submitRoleAnswer({ roleAnswer, onAnswered })\n    }\n\n    const isSubmitEnabled = value.trim().length > 0\n\n    return (\n        <UserSurveyDialog\n            className=\"user-survey--free-form\"\n            title=\"How would you describe your main occupation?\"\n            onDismiss={onDismiss}\n        >\n            <Form className=\"user-survey__short-form\" onSubmit={handleSubmit}>\n                <div className=\"user-survey__short-body\">\n                    <label\n                        className=\"user-survey__short-legend\"\n                        htmlFor={USER_SURVEY_FREE_FORM_INPUT_ID}\n                    >\n                        I am a:\n                    </label>\n                    <input\n                        id={USER_SURVEY_FREE_FORM_INPUT_ID}\n                        className=\"user-survey__free-input\"\n                        type=\"text\"\n                        value={value}\n                        maxLength={200}\n                        onChange={(event) => setValue(event.target.value)}\n                        placeholder=\"eg. journalist, policy professional, educator...\"\n                    />\n                    <Button\n                        className=\"user-survey__submit-button\"\n                        type=\"submit\"\n                        disabled={!isSubmitEnabled}\n                        text=\"Submit\"\n                        theme=\"solid-light-blue\"\n                        icon={null}\n                    />\n                </div>\n            </Form>\n        </UserSurveyDialog>\n    )\n}\n\nexport default function UserSurvey() {\n    const [surveyState, setSurveyState] = useState<SurveyState>(() => {\n        const experimentArm = getUserSurveyWidgetEligibility()\n            ? getAssignedExperimentArm()\n            : null\n        if (experimentArm === null) return { phase: \"hidden\" }\n        return { phase: \"role\", experimentArm }\n    })\n\n    useEffect(() => {\n        if (surveyState.phase === \"role\") {\n            siteAnalytics.logUserSurveyRoleShow({\n                surveyName: USER_SURVEY_NAME,\n                responseId,\n                experimentArm: surveyState.experimentArm,\n            })\n        } else if (surveyState.phase === \"thankYou\") {\n            siteAnalytics.logUserSurveyThankYouShow({\n                surveyName: USER_SURVEY_NAME,\n                responseId,\n                experimentArm: surveyState.roleAnswer.experimentArm,\n            })\n        }\n    }, [surveyState])\n\n    function handleRoleAnswered(answer: UserSurveyRoleAnswer) {\n        if (surveyState.phase !== \"role\") return\n        setSurveyState({\n            phase: \"thankYou\",\n            roleAnswer: answer,\n        })\n        markUserSurveyAnswered()\n    }\n\n    function handleDismiss() {\n        if (surveyState.phase === \"hidden\") return\n        if (surveyState.phase === \"role\") {\n            markUserSurveyDismissed()\n            siteAnalytics.logUserSurveyRoleDismiss({\n                surveyName: USER_SURVEY_NAME,\n                responseId,\n                experimentArm: surveyState.experimentArm,\n            })\n        } else {\n            siteAnalytics.logUserSurveyThankYouDismiss({\n                surveyName: USER_SURVEY_NAME,\n                responseId,\n                experimentArm: surveyState.roleAnswer.experimentArm,\n            })\n        }\n        setSurveyState({ phase: \"hidden\" })\n    }\n\n    if (surveyState.phase === \"hidden\") return null\n    if (surveyState.phase === \"thankYou\") {\n        return (\n            <ThankYouStep\n                onDismiss={handleDismiss}\n                onSuccess={() => {\n                    setSurveyState({ phase: \"hidden\" })\n                }}\n                surveyName={USER_SURVEY_NAME}\n                responseId={responseId}\n                roleAnswer={surveyState.roleAnswer}\n            />\n        )\n    }\n    return match(surveyState.experimentArm)\n        .with(\"long-list\", () => (\n            <ListRoleStep\n                experimentArm=\"long-list\"\n                options={LONG_LIST_OPTIONS}\n                className=\"user-survey--long-list\"\n                radioButtonGroup=\"user-survey-long-role\"\n                onDismiss={handleDismiss}\n                onAnswered={handleRoleAnswered}\n            />\n        ))\n        .with(\"short-list\", () => (\n            <ListRoleStep\n                experimentArm=\"short-list\"\n                options={SHORT_LIST_OPTIONS}\n                className=\"user-survey--short-list\"\n                radioButtonGroup=\"user-survey-short-role\"\n                radioButtonClassName=\"user-survey__radio-button--short-list\"\n                onDismiss={handleDismiss}\n                onAnswered={handleRoleAnswered}\n            />\n        ))\n        .with(\"free-form\", () => (\n            <FreeFormRoleStep\n                onDismiss={handleDismiss}\n                onAnswered={handleRoleAnswered}\n            />\n        ))\n        .exhaustive()\n}\n","import {\n    Slide,\n    SlideTemplate,\n    SLIDE_TEMPLATE_FIELDS,\n    SLIDE_TEMPLATE_LABELS,\n    Url,\n} from \"@ourworldindata/utils\"\nimport { match } from \"ts-pattern\"\nimport { GrapherProgrammaticInterface } from \"@ourworldindata/grapher\"\n\n/** Create a default slide for a given template */\nexport function makeDefaultSlideForTemplate(template: SlideTemplate): Slide {\n    return match(template)\n        .with(SlideTemplate.Image, (t) => ({\n            template: t,\n            filename: null as string | null,\n        }))\n        .with(SlideTemplate.Chart, (t) => ({ template: t, url: \"\" }))\n        .with(SlideTemplate.TwoCharts, (t) => ({\n            template: t,\n            url1: \"\",\n            url2: \"\",\n        }))\n        .with(SlideTemplate.Cover, (t) => ({ template: t, title: \"\" }))\n        .with(SlideTemplate.Statement, (t) => ({ template: t, text: \"\" }))\n        .with(SlideTemplate.Outline, (t) => ({ template: t, text: \"\" }))\n        .with(SlideTemplate.Text, (t) => ({ template: t, text: \"\" }))\n        .exhaustive()\n}\n\n/** Human-readable labels for slide fields, used in conversion warnings. */\nconst SLIDE_FIELD_LABELS: Record<string, string> = {\n    url: \"chart URL\",\n    url1: \"first chart URL\",\n    url2: \"second chart URL\",\n    filename: \"image\",\n    title: \"title\",\n    subtitle: \"subtitle\",\n    text: \"text\",\n    largeText: \"large text\",\n    attribution: \"attribution\",\n    author: \"author\",\n    date: \"date\",\n    hideLogo: \"hide logo\",\n    blueBackground: \"blue background\",\n}\n\nfunction fieldLabel(field: string): string {\n    return SLIDE_FIELD_LABELS[field] ?? field\n}\n\n/** A field counts as \"empty\" if it's null, undefined, or an empty string. */\nfunction isEmptyFieldValue(value: unknown): boolean {\n    return value === null || value === undefined || value === \"\"\n}\n\n/**\n * Fields that are never carried across a slide conversion, even when both the\n * source and target templates happen to share the name. `template` is the\n * discriminant. `variant` is a template-specific layout setting whose allowed\n * values differ per template (e.g. Image vs. Statement), so carrying it over\n * could produce an invalid enum value; conversion always resets it to the\n * target template's default.\n */\nconst NON_CARRIED_FIELDS = new Set([\"template\", \"variant\"])\n\n/**\n * Convert a slide to a different template, carrying over every field that also\n * exists on the target template. Required fields missing on the source are\n * backfilled from `makeDefaultSlideForTemplate` so the result is always valid.\n * Chart URLs are renamed when converting between Chart and Two Charts.\n * Template-specific layout settings (see `NON_CARRIED_FIELDS`) are never carried\n * and reset to the target template's default.\n */\nexport function convertSlide(slide: Slide, target: SlideTemplate): Slide {\n    const result: Record<string, unknown> = {\n        ...makeDefaultSlideForTemplate(target),\n    }\n    const targetFields = new Set(SLIDE_TEMPLATE_FIELDS[target])\n    const source = slide as Record<string, unknown>\n\n    // Copy over every shared field, skipping the discriminant, template-specific\n    // layout settings, and undefined values\n    for (const [key, value] of Object.entries(source)) {\n        if (NON_CARRIED_FIELDS.has(key)) continue\n        if (value === undefined) continue\n        if (targetFields.has(key)) {\n            result[key] = value\n        }\n    }\n\n    // Special-case chart URL renames between Chart and Two Charts\n    if (\n        slide.template === SlideTemplate.Chart &&\n        target === SlideTemplate.TwoCharts &&\n        !isEmptyFieldValue(source.url)\n    ) {\n        result.url1 = source.url\n    }\n    if (\n        slide.template === SlideTemplate.TwoCharts &&\n        target === SlideTemplate.Chart &&\n        !isEmptyFieldValue(source.url1)\n    ) {\n        result.url = source.url1\n    }\n\n    result.template = target\n    return result as Slide\n}\n\n/**\n * Describe what converting a slide to a target template will lose:\n * - droppedFields: fields with content on the source that won't survive.\n * - emptyRequiredFields: required fields on the target left empty afterwards.\n */\nexport function describeConversionLoss(\n    slide: Slide,\n    target: SlideTemplate\n): { droppedFields: string[] } {\n    const targetFields = new Set(SLIDE_TEMPLATE_FIELDS[target])\n    const source = slide as Record<string, unknown>\n\n    // Fields whose content is preserved via the chart URL rename special-case\n    const renamedFields = new Set<string>()\n    if (\n        slide.template === SlideTemplate.Chart &&\n        target === SlideTemplate.TwoCharts\n    ) {\n        renamedFields.add(\"url\")\n    }\n    if (\n        slide.template === SlideTemplate.TwoCharts &&\n        target === SlideTemplate.Chart\n    ) {\n        renamedFields.add(\"url1\")\n    }\n\n    const droppedFields: string[] = []\n    for (const [key, value] of Object.entries(source)) {\n        // Skip the discriminant and template-specific layout settings: resetting\n        // `variant` is a layout change, not content loss, so it shouldn't be\n        // reported in the warning.\n        if (NON_CARRIED_FIELDS.has(key)) continue\n        if (isEmptyFieldValue(value)) continue\n        if (targetFields.has(key)) continue\n        if (renamedFields.has(key)) continue\n        droppedFields.push(fieldLabel(key))\n    }\n\n    return { droppedFields }\n}\n\n/** Whether converting between two templates loses any content. */\nexport function isLossyConversion(\n    slide: Slide,\n    target: SlideTemplate\n): boolean {\n    const { droppedFields } = describeConversionLoss(slide, target)\n    return droppedFields.length > 0\n}\n\n/** Build the warning message shown before a lossy conversion. */\nexport function buildConversionWarning(\n    slide: Slide,\n    target: SlideTemplate\n): string {\n    const { droppedFields } = describeConversionLoss(slide, target)\n    const fromLabel = SLIDE_TEMPLATE_LABELS[slide.template]\n    const toLabel = SLIDE_TEMPLATE_LABELS[target]\n    const parts: string[] = []\n    if (droppedFields.length > 0) {\n        parts.push(\n            `Converting ${fromLabel} → ${toLabel} will irrecoverably discard: ${droppedFields.join(\n                \", \"\n            )}.`\n        )\n    }\n\n    return parts.join(\" \")\n}\n\n/** Config applied to all slideshow chart embeds */\nconst baseGrapherConfig: Partial<GrapherProgrammaticInterface> = {\n    hideLogo: true,\n    hideTitle: true,\n    hideSubtitle: true,\n    hideShareButton: true,\n    hideFullscreenButton: true,\n    hideRelatedQuestion: true,\n    isEmbeddedInAnOwidPage: true,\n}\n\n/** Additional config when charts should be non-interactive (presentation mode) */\nconst minimalGrapherConfig: Partial<GrapherProgrammaticInterface> = {\n    // Note: we intentionally don't set hideTimeline here because it causes\n    // GrapherState to ignore the `time` query param for charts with a time\n    // dimension (line, stacked area, stacked bar). Instead, the timeline is\n    // hidden via CSS in SlideContent.scss.\n    hideControlsRow: true,\n    hideDownloadButton: true,\n    hideExploreTheDataButton: true,\n    hideEntityControls: true,\n}\n\n/** Additional config when charts should be interactive */\nconst interactiveGrapherConfig: Partial<GrapherProgrammaticInterface> = {\n    hideExploreTheDataButton: false,\n    hideDownloadButton: true,\n}\n\n/**\n * Returns the Grapher config for a slideshow chart embed.\n *\n * @param interactiveCharts - If true, timeline and controls are shown.\n *   If false, they're hidden for a cleaner presentation.\n */\nexport function getSlideshowGrapherConfig(options: {\n    interactiveCharts: boolean\n}): Partial<GrapherProgrammaticInterface> {\n    return {\n        ...baseGrapherConfig,\n        ...(options.interactiveCharts\n            ? interactiveGrapherConfig\n            : minimalGrapherConfig),\n    }\n}\n\n/** Parse a slide chart URL into its components */\nexport function parseSlideChartUrl(url: string): {\n    type: \"grapher\" | \"explorer\"\n    slug: string\n    queryString?: string\n} {\n    const parsed = Url.fromURL(url)\n    const pathname = parsed.pathname ?? \"\"\n    const type = pathname.startsWith(\"/explorers/\") ? \"explorer\" : \"grapher\"\n    const slug = parsed.slug ?? \"\"\n    const queryString = parsed.queryStr || undefined\n    return { type, slug, queryString }\n}\n\nexport function getSlideAspectRatio(\n    slide: Slide\n): \"slideshow-slide--narrow\" | \"slideshow-slide--wide\" {\n    return match(slide)\n        .with(\n            { template: SlideTemplate.Chart },\n            { template: SlideTemplate.Image },\n            (s) =>\n                s.text\n                    ? (\"slideshow-slide--wide\" as const)\n                    : (\"slideshow-slide--narrow\" as const)\n        )\n        .otherwise(() => \"slideshow-slide--wide\" as const)\n}\n","import React from \"react\"\nimport { OWID_LOGO_SVG, OWID_WORDMARK_SVG } from \"@ourworldindata/grapher\"\n\n/**\n * Renders within a slide or out in the .slides container when the slide is SlideTemplate.Cover\n */\nexport function SlideLogo({\n    coverSlideLogo = false,\n}: {\n    coverSlideLogo?: boolean\n}): React.ReactElement {\n    if (coverSlideLogo) {\n        return (\n            <span\n                className=\"cover-slide-logo\"\n                dangerouslySetInnerHTML={{ __html: OWID_WORDMARK_SVG }}\n            />\n        )\n    }\n    return (\n        <span\n            className=\"slideshow-slide-logo\"\n            dangerouslySetInnerHTML={{ __html: OWID_LOGO_SVG }}\n        />\n    )\n}\n","import React from \"react\"\nimport cx from \"clsx\"\nimport { Slide, SlideTemplate, ImageMetadata } from \"@ourworldindata/types\"\nimport { SimpleMarkdownText } from \"@ourworldindata/components\"\nimport { CLOUDFLARE_IMAGES_URL } from \"../../settings/clientSettings.mjs\"\nimport { GrapherFigureView } from \"../GrapherFigureView.js\"\nimport {\n    getSlideAspectRatio,\n    getSlideshowGrapherConfig,\n    parseSlideChartUrl,\n} from \"./slideshowUtils.js\"\nimport { match } from \"ts-pattern\"\nimport { SlideLogo } from \"./SlideLogo.js\"\n\n/**\n * Pure slide rendering component shared between the baked site and the\n * admin editor preview. Renders a single slide based on its template.\n *\n * For chart slides, it renders a `GrapherFigureView` by default.\n * The parent can override chart rendering via `renderChart` (used by\n * the admin editor to render `SlideGrapher` with live MobX sync, and\n * by `SlideshowPresentation` for smooth same-slug transitions).\n */\nexport function SlideRenderer(props: {\n    slide: Slide\n    imageMetadata?: Record<string, ImageMetadata>\n    /** Override chart rendering (for SlideGrapher with live sync) */\n    renderChart?: (url: string) => React.ReactElement\n    isHidden?: boolean\n}): React.ReactElement {\n    const { slide, imageMetadata, renderChart, isHidden } = props\n    const className = cx(\"slideshow-slide\", getSlideAspectRatio(slide), {\n        \"slideshow-slide--hidden\": isHidden,\n        \"slideshow-slide--blue-background\":\n            \"blueBackground\" in slide && slide.blueBackground,\n    })\n\n    return match(slide)\n        .with({ template: SlideTemplate.Cover }, (slide) => (\n            <div className={`${className} slideshow-slide--cover`}>\n                {(slide.subtitle || slide.date) && (\n                    <p className=\"cover-supertitle\">\n                        {slide.subtitle && (\n                            <span>\n                                <SimpleMarkdownText\n                                    openLinksInNewTab\n                                    text={slide.subtitle}\n                                    useParagraphs={false}\n                                />\n                            </span>\n                        )}\n                        {slide.date && <span>{slide.date}</span>}\n                    </p>\n                )}\n                <h1 className=\"cover-title\">\n                    <SimpleMarkdownText\n                        openLinksInNewTab\n                        text={slide.title}\n                        useParagraphs={false}\n                    />\n                </h1>\n                {slide.author && (\n                    <h2 className=\"cover-author\">{slide.author}</h2>\n                )}\n            </div>\n        ))\n        .with({ template: SlideTemplate.Image }, (slide) => (\n            <div\n                className={cx(className, \"slideshow-slide--image\", {\n                    \"slideshow-slide--image-text-dominant\":\n                        slide.variant === \"textImage\" && !!slide.text,\n                    \"slideshow-slide--image-small\":\n                        !!slide.smallImage && !!slide.text,\n                })}\n            >\n                {!slide.hideLogo && <SlideLogo />}\n                {slide.title && (\n                    <h1 className=\"slideshow-slide-title\">\n                        <SimpleMarkdownText\n                            openLinksInNewTab\n                            text={slide.title}\n                            useParagraphs={false}\n                        />\n                    </h1>\n                )}\n                <div className=\"slideshow-slide-chart-content\">\n                    <ImageRenderer\n                        filename={slide.filename}\n                        imageMetadata={imageMetadata}\n                    />\n                    {slide.text && (\n                        <div\n                            className={cx(\"slideshow-slide__text\", {\n                                \"slideshow-slide__text--large\": slide.largeText,\n                            })}\n                        >\n                            <SimpleMarkdownText\n                                text={slide.text}\n                                openLinksInNewTab\n                            />\n                        </div>\n                    )}\n                </div>\n            </div>\n        ))\n        .with({ template: SlideTemplate.Chart }, (slide) => (\n            <div className={`${className} slideshow-slide--chart`}>\n                {!slide.hideLogo && <SlideLogo />}\n                {slide.title && (\n                    <h1 className=\"slideshow-slide-title\">\n                        <SimpleMarkdownText\n                            openLinksInNewTab\n                            text={slide.title}\n                            useParagraphs={false}\n                        />\n                    </h1>\n                )}\n                {slide.subtitle && (\n                    <p className=\"slideshow-slide-subtitle\">\n                        <SimpleMarkdownText\n                            openLinksInNewTab\n                            text={slide.subtitle}\n                            useParagraphs={false}\n                        />\n                    </p>\n                )}\n                <div className=\"slideshow-slide-chart-content\">\n                    {slide.url ? (\n                        <ChartRenderer\n                            url={slide.url}\n                            renderChart={renderChart}\n                        />\n                    ) : (\n                        <div className=\"slideshow-slide__media-placeholder\">\n                            Chart\n                        </div>\n                    )}\n                    {slide.text && (\n                        <div\n                            className={cx(\"slideshow-slide__text\", {\n                                \"slideshow-slide__text--large\": slide.largeText,\n                            })}\n                        >\n                            <SimpleMarkdownText\n                                text={slide.text}\n                                openLinksInNewTab\n                            />\n                        </div>\n                    )}\n                </div>\n            </div>\n        ))\n        .with({ template: SlideTemplate.Outline }, (slide) => (\n            <div className={`${className} slideshow-slide--contents`}>\n                {!slide.hideLogo && <SlideLogo />}\n                {slide.title && (\n                    <h1 className=\"slideshow-slide-title\">\n                        <SimpleMarkdownText\n                            openLinksInNewTab\n                            text={slide.title}\n                            useParagraphs={false}\n                        />\n                    </h1>\n                )}\n                <div className=\"slideshow-slide-contents__list\">\n                    <SimpleMarkdownText text={slide.text} openLinksInNewTab />\n                </div>\n            </div>\n        ))\n        .with({ template: SlideTemplate.Statement }, (slide) => (\n            <div\n                className={cx(className, \"slideshow-slide--statement\", {\n                    \"slideshow-slide--statement-section-divider\":\n                        slide.variant === \"sectionDivider\",\n                })}\n            >\n                {!slide.hideLogo && <SlideLogo />}\n                <h1 className=\"slideshow-slide-statement__text\">\n                    <SimpleMarkdownText\n                        openLinksInNewTab\n                        text={slide.text}\n                        useParagraphs={false}\n                    />\n                </h1>\n                {slide.attribution && (\n                    <p className=\"slideshow-slide-statement__attribution\">\n                        {slide.attribution}\n                    </p>\n                )}\n            </div>\n        ))\n        .with({ template: SlideTemplate.Text }, (slide) => (\n            <div className={`${className} slideshow-slide--text`}>\n                {!slide.hideLogo && <SlideLogo />}\n                {slide.title && (\n                    <h1 className=\"slideshow-slide-title\">\n                        <SimpleMarkdownText\n                            openLinksInNewTab\n                            text={slide.title}\n                            useParagraphs={false}\n                        />\n                    </h1>\n                )}\n                <div\n                    className={cx(\"slideshow-slide__text-body\", {\n                        \"slideshow-slide__text-body--large\": slide.largeText,\n                    })}\n                >\n                    <SimpleMarkdownText text={slide.text} openLinksInNewTab />\n                </div>\n            </div>\n        ))\n        .with({ template: SlideTemplate.TwoCharts }, (slide) => (\n            <div className={`${className} slideshow-slide--two-charts`}>\n                {!slide.hideLogo && <SlideLogo />}\n                {slide.title && (\n                    <h1 className=\"slideshow-slide-title\">\n                        <SimpleMarkdownText\n                            openLinksInNewTab\n                            text={slide.title}\n                            useParagraphs={false}\n                        />\n                    </h1>\n                )}\n                {slide.subtitle && (\n                    <p className=\"slideshow-slide-subtitle\">\n                        <SimpleMarkdownText\n                            openLinksInNewTab\n                            text={slide.subtitle}\n                            useParagraphs={false}\n                        />\n                    </p>\n                )}\n                <div className=\"slideshow-slide-two-charts__content\">\n                    <div className=\"slideshow-slide-two-charts__chart\">\n                        {slide.url1 ? (\n                            <ChartRenderer\n                                url={slide.url1}\n                                renderChart={renderChart}\n                            />\n                        ) : (\n                            <div className=\"slideshow-slide__media-placeholder\">\n                                Chart 1\n                            </div>\n                        )}\n                    </div>\n                    <div className=\"slideshow-slide-two-charts__chart\">\n                        {slide.url2 ? (\n                            <ChartRenderer\n                                url={slide.url2}\n                                renderChart={renderChart}\n                            />\n                        ) : (\n                            <div className=\"slideshow-slide__media-placeholder\">\n                                Chart 2\n                            </div>\n                        )}\n                    </div>\n                </div>\n            </div>\n        ))\n        .otherwise(() => <div></div>)\n}\n\nfunction ImageRenderer(props: {\n    filename: string | null\n    imageMetadata?: Record<string, ImageMetadata>\n}): React.ReactElement {\n    const { filename, imageMetadata } = props\n\n    if (!filename) {\n        return <div className=\"slideshow-slide__media-placeholder\">IMAGE</div>\n    }\n\n    const metadata = imageMetadata?.[filename]\n    if (metadata?.cloudflareId) {\n        return (\n            <img\n                src={`${CLOUDFLARE_IMAGES_URL}/${metadata.cloudflareId}/public`}\n                alt={metadata.defaultAlt || filename}\n                className=\"slideshow-slide__image\"\n            />\n        )\n    }\n\n    return <div className=\"slideshow-slide__media-placeholder\">{filename}</div>\n}\n\nfunction ChartRenderer(props: {\n    url: string\n    renderChart?: (url: string) => React.ReactElement\n}): React.ReactElement {\n    const { url, renderChart } = props\n\n    if (renderChart) {\n        return renderChart(url)\n    }\n\n    // Default SSR fallback: parse URL and render GrapherFigureView.\n    // This only handles /grapher/ URLs; multi-dim and explorer\n    // rendering requires the client-side SlideChartEmbed component.\n    const parsed = parseSlideChartUrl(url)\n    return (\n        <div className=\"slideshow-slide__grapher-container\">\n            <GrapherFigureView\n                slug={parsed.slug}\n                queryStr={parsed.queryString}\n                isEmbeddedInAnOwidPage={true}\n                isEmbeddedInADataPage={false}\n                config={getSlideshowGrapherConfig({\n                    interactiveCharts: false,\n                })}\n            />\n        </div>\n    )\n}\n","import React, { useMemo, useRef } from \"react\"\nimport cx from \"clsx\"\nimport { FetchingGrapher, useElementBounds } from \"@ourworldindata/grapher\"\nimport {\n    ADMIN_BASE_URL,\n    BAKED_GRAPHER_URL,\n    CATALOG_URL,\n    DATA_API_URL,\n} from \"../../settings/clientSettings.mjs\"\nimport { getSlideshowGrapherConfig } from \"./slideshowUtils.js\"\n\n/**\n * Simple grapher wrapper for the baked site / preview.\n * Renders a FetchingGrapher with the correct config and query string.\n * No interactivity hooks, no query string tracking, no MobX reactions.\n */\nexport function SiteSlideGrapher(props: {\n    configUrl: string\n    queryStr?: string\n    interactiveCharts?: boolean\n}): React.ReactElement {\n    const { configUrl, queryStr, interactiveCharts } = props\n    const containerRef = useRef<HTMLDivElement>(null)\n    const bounds = useElementBounds(containerRef)\n\n    const grapherConfig = useMemo(\n        () => ({\n            bakedGrapherURL: BAKED_GRAPHER_URL,\n            adminBaseUrl: ADMIN_BASE_URL,\n            ...getSlideshowGrapherConfig({\n                interactiveCharts: interactiveCharts ?? false,\n            }),\n        }),\n        [interactiveCharts]\n    )\n\n    return (\n        <div\n            ref={containerRef}\n            className={cx(\"slideshow-slide__grapher-container\", {\n                \"slideshow-slide__grapher-container--interactive\":\n                    interactiveCharts,\n                \"slideshow-slide__grapher-container--non-interactive\":\n                    !interactiveCharts,\n            })}\n        >\n            <FetchingGrapher\n                config={grapherConfig}\n                configUrl={configUrl}\n                dataApiUrl={DATA_API_URL}\n                catalogUrl={CATALOG_URL}\n                archiveContext={undefined}\n                queryStr={queryStr}\n                externalBounds={bounds}\n            />\n        </div>\n    )\n}\n","import React, { useEffect, useRef, useState } from \"react\"\nimport {\n    buildExplorerProps,\n    Explorer,\n    ExplorerProps,\n} from \"@ourworldindata/explorer\"\nimport {\n    getSlideshowGrapherConfig,\n    parseSlideChartUrl,\n} from \"./slideshowUtils.js\"\nimport { BAKED_BASE_URL } from \"../../settings/clientSettings.mjs\"\nimport { fetchText } from \"@ourworldindata/utils\"\nimport { reaction, runInAction } from \"mobx\"\n\n/** Append hideControls=true to a query string so explorer chrome is hidden */\nfunction withHiddenControls(queryString?: string): string {\n    const params = new URLSearchParams(queryString?.replace(/^\\?/, \"\") ?? \"\")\n    params.set(\"hideControls\", \"true\")\n    return `?${params.toString()}`\n}\n\n/**\n * Simple explorer wrapper for the baked site / preview.\n * Fetches explorer HTML, builds props, and applies display overrides.\n * No query string tracking or admin callbacks.\n */\nexport function SiteSlideExplorer(props: {\n    url: string\n    interactiveCharts?: boolean\n}): React.ReactElement {\n    const { url, interactiveCharts } = props\n    const parsed = parseSlideChartUrl(url)\n    const explorerRef = useRef<Explorer>(null)\n\n    const [explorerProps, setExplorerProps] = useState<ExplorerProps | null>(\n        null\n    )\n\n    // Fetch explorer HTML and build props on mount\n    useEffect(() => {\n        let cancelled = false\n        const explorerUrl = `${BAKED_BASE_URL}/explorers/${parsed.slug}`\n        void fetchText(explorerUrl).then((html) => {\n            if (cancelled) return\n            void buildExplorerProps(\n                html,\n                withHiddenControls(parsed.queryString)\n            ).then((props) => {\n                if (!cancelled) setExplorerProps(props)\n            })\n        })\n        return () => {\n            cancelled = true\n        }\n    }, [parsed.slug, parsed.queryString])\n\n    // Apply display overrides whenever the grapher becomes ready.\n    // The Explorer resets grapherState on every view change, so\n    // using reaction ensures overrides survive resets.\n    useEffect(() => {\n        const explorer = explorerRef.current\n        if (!explorer) return\n\n        const dispose = reaction(\n            () => explorer.grapherState?.isReady,\n            (isReady) => {\n                if (!isReady) return\n                const config = getSlideshowGrapherConfig({\n                    interactiveCharts: interactiveCharts ?? false,\n                })\n                runInAction(() => {\n                    Object.assign(explorer.grapherState, config)\n                })\n            },\n            { fireImmediately: true }\n        )\n\n        return () => dispose()\n        // oxlint-disable-next-line react/exhaustive-effect-dependencies -- the Explorer (and explorerRef) only mounts once explorerProps have loaded\n    }, [explorerProps, interactiveCharts])\n\n    if (!explorerProps) {\n        return (\n            <div className=\"slide__media-placeholder\">Loading explorer...</div>\n        )\n    }\n\n    return (\n        <div className=\"slideshow-slide__grapher-container\">\n            <Explorer\n                ref={explorerRef}\n                {...explorerProps}\n                isEmbeddedInAnOwidPage={true}\n            />\n        </div>\n    )\n}\n","import React from \"react\"\nimport { ResolvedSlideChartInfo } from \"@ourworldindata/types\"\nimport { parseSlideChartUrl } from \"./slideshowUtils.js\"\nimport { GRAPHER_DYNAMIC_CONFIG_URL } from \"../../settings/clientSettings.mjs\"\nimport { SiteSlideGrapher } from \"./SiteSlideGrapher.js\"\nimport { SiteSlideExplorer } from \"./SiteSlideExplorer.js\"\n\n/**\n * Chart embed for the baked site / preview.\n * Routes to the correct renderer (grapher or explorer) based on URL and\n * bake-time resolution info. No interactivity hooks or admin callbacks.\n */\nexport function SiteSlideChartEmbed(props: {\n    url: string\n    resolvedInfo?: ResolvedSlideChartInfo\n    interactiveCharts?: boolean\n}): React.ReactElement {\n    const { url, resolvedInfo, interactiveCharts } = props\n    const parsed = parseSlideChartUrl(url)\n    const chartType = resolvedInfo?.type ?? parsed.type\n\n    if (chartType === \"explorer\") {\n        return (\n            <SiteSlideExplorer\n                url={url}\n                interactiveCharts={interactiveCharts}\n            />\n        )\n    }\n\n    // For multi-dim with bake-time resolution, use the pre-resolved config UUID.\n    // For regular graphers, use the slug-based config URL.\n    const configUrl =\n        resolvedInfo?.type === \"multi-dim\"\n            ? `${GRAPHER_DYNAMIC_CONFIG_URL}/by-uuid/${resolvedInfo.configId}.config.json`\n            : `${GRAPHER_DYNAMIC_CONFIG_URL}/${parsed.slug}.config.json`\n\n    return (\n        <SiteSlideGrapher\n            configUrl={configUrl}\n            queryStr={parsed.queryString}\n            interactiveCharts={interactiveCharts}\n        />\n    )\n}\n","import React, {\n    useCallback,\n    useEffect,\n    useEffectEvent,\n    useLayoutEffect,\n    useRef,\n    useState,\n} from \"react\"\nimport cx from \"clsx\"\nimport { match } from \"ts-pattern\"\nimport {\n    SlideTemplate,\n    SlideshowConfig,\n    ImageMetadata,\n    LinkedAuthor,\n    OwidGdocType,\n    ResolvedSlideChartInfo,\n} from \"@ourworldindata/types\"\nimport { getCanonicalUrl } from \"@ourworldindata/components\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faChevronLeft,\n    faChevronRight,\n    faExpand,\n    faCompress,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { SlideRenderer } from \"./SlideRenderer.js\"\nimport { SiteSlideChartEmbed } from \"./SiteSlideChartEmbed.js\"\nimport { SlideLogo } from \"./SlideLogo.js\"\nimport { useHasHydrated } from \"../hooks.js\"\n\nexport const _OWID_SLIDESHOW_PROPS = \"_OWID_SLIDESHOW_PROPS\"\n\nexport interface SlideshowPresentationProps {\n    title: string\n    authors?: string\n    linkedAuthors: LinkedAuthor[]\n    slides: SlideshowConfig[\"slides\"]\n    imageMetadata: Record<string, ImageMetadata>\n    /** Pre-resolved chart type info, keyed by slide URL. Computed at bake time. */\n    chartResolutions: Record<string, ResolvedSlideChartInfo>\n    /** If true, charts show timeline and controls. */\n    interactiveCharts?: boolean\n}\n\n/**\n * Interactive slideshow viewer with keyboard navigation.\n * Used on the baked site (hydrated) and importable by the admin editor.\n *\n * All slides are rendered simultaneously and toggled with CSS display.\n * This ensures all chart data is fetched upfront so navigation is instant.\n */\nexport function SlideshowPresentation(props: {\n    title: string\n    authors?: string\n    linkedAuthors?: LinkedAuthor[]\n    slides: SlideshowConfig[\"slides\"]\n    imageMetadata: Record<string, ImageMetadata>\n    /** Pre-resolved chart type info. If not provided, falls back to client-side resolution. */\n    chartResolutions?: Record<string, ResolvedSlideChartInfo>\n    /** If true, show timeline and controls on charts. */\n    interactiveCharts?: boolean\n    /** Override chart rendering (used by admin editor for live MobX sync) */\n    renderChart?: (url: string) => React.ReactElement\n    /** Controlled slide index (optional — if omitted, manages its own state) */\n    currentSlideIndex?: number\n    /** Called when the user navigates (optional — for controlled mode) */\n    onSlideChange?: (index: number) => void\n}): React.ReactElement {\n    const {\n        authors,\n        linkedAuthors,\n        slides,\n        imageMetadata,\n        chartResolutions,\n        interactiveCharts,\n        renderChart,\n    } = props\n\n    // Support both controlled (admin editor) and uncontrolled (baked site) modes.\n    // In uncontrolled mode, read the initial slide from the ?slide= query param\n    // (1-based) and keep the URL in sync as the user navigates.\n    const isControlled = props.currentSlideIndex !== undefined\n    const [internalIndex, setInternalIndex] = useState(() => {\n        if (isControlled || typeof window === \"undefined\") return 0\n        const param = new URLSearchParams(window.location.search).get(\"slide\")\n        if (!param) return 0\n        const parsed = parseInt(param, 10)\n        if (Number.isNaN(parsed) || parsed < 1) return 0\n        return Math.min(parsed - 1, slides.length - 1)\n    })\n    const currentIndex = props.currentSlideIndex ?? internalIndex\n    const setCurrentIndex = props.onSlideChange ?? setInternalIndex\n\n    // When hydrating with a ?slide= param, the server-rendered HTML shows\n    // slide 0 but the client initializes to a different slide. Suppress\n    // painting until the first client render to avoid a flash of the wrong\n    // slide's background.\n    const [isHydrated, setIsHydrated] = useState(isControlled)\n    useLayoutEffect(() => {\n        // oxlint-disable-next-line react/set-state-in-effect -- flips before the first paint after hydration\n        setIsHydrated(true)\n    }, [])\n\n    // Keep the URL ?slide= param in sync (uncontrolled mode only)\n    useEffect(() => {\n        if (isControlled || typeof window === \"undefined\") return\n        const url = new URL(window.location.href)\n        if (currentIndex === 0) {\n            url.searchParams.delete(\"slide\")\n        } else {\n            url.searchParams.set(\"slide\", String(currentIndex + 1))\n        }\n        window.history.replaceState(null, \"\", url.toString())\n    }, [currentIndex, isControlled])\n\n    const goToPrev = useCallback(() => {\n        setCurrentIndex(Math.max(0, currentIndex - 1))\n    }, [currentIndex, setCurrentIndex])\n\n    const goToNext = useCallback(() => {\n        setCurrentIndex(Math.min(slides.length - 1, currentIndex + 1))\n    }, [currentIndex, slides.length, setCurrentIndex])\n\n    // Default chart renderer for the baked site: each chart owns\n    // its own state (no shared grapherStateRef needed since all\n    // slides are mounted simultaneously).\n    const defaultRenderChart = useCallback(\n        (url: string): React.ReactElement => {\n            return (\n                <SiteSlideChartEmbed\n                    url={url}\n                    resolvedInfo={chartResolutions?.[url]}\n                    interactiveCharts={interactiveCharts}\n                />\n            )\n        },\n        [chartResolutions, interactiveCharts]\n    )\n\n    const containerRef = useRef<HTMLDivElement>(null)\n    const [isFullscreen, setIsFullscreen] = useState(false)\n    // Fullscreen isn't available on iPhone, or in iframes that don't allow it.\n    // Only checked after hydration to avoid a mismatch.\n    const hasHydrated = useHasHydrated()\n    const canFullscreen = hasHydrated && !!document.fullscreenEnabled\n\n    const toggleFullscreen = useCallback(() => {\n        const el = containerRef.current\n        if (!el || !document.fullscreenEnabled) return\n        if (!document.fullscreenElement) {\n            void el.requestFullscreen()\n        } else {\n            void document.exitFullscreen()\n        }\n    }, [])\n\n    // Sync fullscreen state with browser API\n    useEffect(() => {\n        const handleChange = () => {\n            setIsFullscreen(!!document.fullscreenElement)\n        }\n        document.addEventListener(\"fullscreenchange\", handleChange)\n        return () =>\n            document.removeEventListener(\"fullscreenchange\", handleChange)\n    }, [])\n\n    // Consolidated keyboard handler. An effect event, so the listener is only\n    // registered once (not torn down on every navigation).\n    const handleKeyDown = useEffectEvent((e: KeyboardEvent): void => {\n        match(e.key)\n            .with(\"ArrowLeft\", \"ArrowUp\", () => {\n                e.preventDefault()\n                goToPrev()\n            })\n            .with(\"ArrowRight\", \"ArrowDown\", \" \", () => {\n                e.preventDefault()\n                goToNext()\n            })\n            .with(\"Escape\", () => {\n                if (isFullscreen) {\n                    void document.exitFullscreen()\n                }\n            })\n            .with(\"f\", () => {\n                toggleFullscreen()\n            })\n            .otherwise(() => undefined)\n    })\n\n    useEffect(() => {\n        window.addEventListener(\"keydown\", handleKeyDown)\n        return () => window.removeEventListener(\"keydown\", handleKeyDown)\n    }, [])\n\n    if (slides.length === 0) return <div className=\"slides\" />\n\n    const activeRenderChart = renderChart ?? defaultRenderChart\n\n    const currentSlide = slides[currentIndex]\n    const isCoverSlide = currentSlide.template === SlideTemplate.Cover\n    const hideLogo = currentSlide.hideLogo ?? false\n\n    return (\n        <div\n            className={cx(\"slideshow-container\", {\n                \"slideshow-container--fullscreen\": isFullscreen,\n                \"slideshow-container--cover\":\n                    currentSlide?.template === SlideTemplate.Cover,\n                \"slideshow-container--blue-background\":\n                    currentSlide &&\n                    currentSlide.template !== SlideTemplate.Cover &&\n                    \"blueBackground\" in currentSlide &&\n                    currentSlide.blueBackground,\n            })}\n            style={isHydrated ? undefined : { visibility: \"hidden\" }}\n        >\n            <div\n                ref={containerRef}\n                className={cx({\n                    \"slideshow-slides\": true,\n                    \"slideshow-slides--fullscreen\": isFullscreen,\n                })}\n            >\n                {/* All slides are rendered simultaneously and toggled with\n                CSS display so that chart data is fetched upfront. */}\n                {slides.map((slide, i) => (\n                    <SlideRenderer\n                        key={i}\n                        isHidden={i !== currentIndex}\n                        slide={slide}\n                        imageMetadata={imageMetadata}\n                        renderChart={activeRenderChart}\n                    />\n                ))}\n                {!hideLogo && isCoverSlide && <SlideLogo coverSlideLogo />}\n            </div>\n            <div className=\"slideshow-footer\">\n                <span className=\"SlideshowPresentation__branding\">\n                    A presentation by{\" \"}\n                    <AuthorByline\n                        authors={authors}\n                        linkedAuthors={linkedAuthors}\n                    />\n                </span>\n                <div className=\"SlideshowPresentation__nav\">\n                    <button\n                        className=\"SlideshowPresentation__nav-button\"\n                        onClick={goToPrev}\n                        disabled={currentIndex === 0}\n                        aria-label=\"Previous slide\"\n                    >\n                        <FontAwesomeIcon icon={faChevronLeft} />\n                    </button>\n                    <span className=\"slideshow-footer__slide-counter\">\n                        {currentIndex + 1} / {slides.length}\n                    </span>\n                    <button\n                        className=\"SlideshowPresentation__nav-button\"\n                        onClick={goToNext}\n                        disabled={currentIndex === slides.length - 1}\n                        aria-label=\"Next slide\"\n                    >\n                        <FontAwesomeIcon icon={faChevronRight} />\n                    </button>\n                </div>\n                {canFullscreen && (\n                    <button\n                        className=\"SlideshowPresentation__fullscreen-button\"\n                        onClick={toggleFullscreen}\n                        aria-label={\n                            isFullscreen\n                                ? \"Exit fullscreen\"\n                                : \"Enter fullscreen\"\n                        }\n                    >\n                        <FontAwesomeIcon\n                            icon={isFullscreen ? faCompress : faExpand}\n                        />\n                    </button>\n                )}\n            </div>\n        </div>\n    )\n}\n\n/** Renders author names, linking to their author page when available */\nfunction AuthorByline(props: {\n    authors?: string\n    linkedAuthors?: LinkedAuthor[]\n}): React.ReactElement {\n    const { authors, linkedAuthors } = props\n\n    if (!authors) {\n        return <>Our World in Data</>\n    }\n\n    const names = authors\n        .split(\",\")\n        .map((n) => n.trim())\n        .filter(Boolean)\n\n    return (\n        <>\n            {names.map((name, i) => {\n                const linked = linkedAuthors?.find((a) => a.name === name)\n                const isLast = i === names.length - 1\n                const isSecondToLast = i === names.length - 2\n                return (\n                    <React.Fragment key={name}>\n                        {linked ? (\n                            <a\n                                className=\"SlideshowPresentation__author-link\"\n                                href={getCanonicalUrl(\"\", {\n                                    slug: linked.slug,\n                                    content: {\n                                        type: OwidGdocType.Author,\n                                    },\n                                })}\n                            >\n                                {name}\n                            </a>\n                        ) : (\n                            <span>{name}</span>\n                        )}\n                        {!isLast && names.length > 2 && \", \"}\n                        {isSecondToLast && names.length > 1 && \" and \"}\n                    </React.Fragment>\n                )\n            })}\n        </>\n    )\n}\n","import { createRoot, hydrateRoot } from \"react-dom/client\"\nimport {\n    ArchiveMetaInformation,\n    DataPageV2ContentFields,\n    deserializeOwidGdocPageData,\n    isInIFrame,\n    MultiDimDataPageConfig,\n    OwidGdocType,\n    SiteFooterContext,\n} from \"@ourworldindata/utils\"\nimport {\n    DataPageV2Content,\n    OWID_DATAPAGE_CONTENT_ROOT_ID,\n} from \"./DataPageV2Content.js\"\nimport { OwidGdoc } from \"./gdocs/OwidGdoc.js\"\nimport { MultiEmbedderSingleton } from \"./multiembedder/MultiEmbedder.js\"\nimport SiteTools, { SITE_TOOLS_ROOT_CLASS } from \"./SiteTools.js\"\nimport { runDetailsOnDemand } from \"./detailsOnDemand.js\"\nimport { hydrateCodeSnippets } from \"@ourworldindata/components\"\nimport { hydrateDynamicCollectionPage } from \"./collections/DynamicCollectionPageMain.js\"\nimport { LatestSearchWrapper } from \"./latest/LatestSearchWrapper.js\"\nimport {\n    __OWID_EXPLORER_INDEX_PAGE_PROPS,\n    ExplorerIndex,\n} from \"./ExplorerIndex.js\"\nimport { getInitialState } from \"./cookiePreferences.js\"\nimport { CookiePreferencesManager } from \"./CookiePreferencesManager.js\"\nimport { SearchWrapper } from \"./search/SearchWrapper.js\"\nimport { DebugProvider } from \"./gdocs/DebugProvider.js\"\nimport { AriaAnnouncerProvider } from \"./AriaAnnouncerContext.js\"\nimport { AriaAnnouncer } from \"./AriaAnnouncer.js\"\nimport {\n    MultiDimDataPageContent,\n    MultiDimDataPageData,\n} from \"./multiDim/MultiDimDataPageContent.js\"\nimport { BrowserRouter } from \"react-router-dom-v5-compat\"\nimport { REDUCED_TRACKING } from \"../settings/clientSettings.mjs\"\nimport { SiteHeaderNavigation } from \"./SiteHeader.js\"\nimport {\n    OLD_SUBSCRIBE_PAGE_FORM_CONTAINER_ID,\n    PREFERENCES_PAGE_ROOT_ID,\n    SUBSCRIBE_PAGE_ROOT_ID,\n} from \"@ourworldindata/types\"\nimport { SubscribeFlow } from \"./Newsletter/SubscribeFlow.js\"\nimport { EmailNotificationsPreferencesForm } from \"./Newsletter/EmailNotificationsPreferencesForm.js\"\nimport { MailchimpSubscriptionForm } from \"./NewsletterSubscription.js\"\nimport { NewsletterSubscriptionContext } from \"./newsletter.js\"\nimport UserSurvey from \"./gdocs/components/UserSurvey.js\"\nimport {\n    SlideshowPresentation,\n    _OWID_SLIDESHOW_PROPS,\n} from \"./slideshows/SlideshowPresentation.js\"\n\nfunction runSearchPage() {\n    const root = document.getElementById(\"search-page-root\")\n    const topicTagGraph = window._OWID_TOPIC_TAG_GRAPH\n    if (root) {\n        createRoot(root).render(\n            <BrowserRouter>\n                <SearchWrapper topicTagGraph={topicTagGraph} />\n            </BrowserRouter>\n        )\n    }\n}\n\nfunction hydrateSubscribePage() {\n    // The whole <main> is hydrated, not just the form: submitting it replaces\n    // the hero and aside with the confirmation screen.\n    const root = document.getElementById(SUBSCRIBE_PAGE_ROOT_ID)\n    if (root) {\n        hydrateRoot(root, <SubscribeFlow />)\n    }\n}\n\nfunction renderEmailNotificationsPreferencesPage() {\n    // The page bakes an empty <main>: every screen is client-driven (the mode\n    // depends on the token in the URL fragment), so it is rendered rather than\n    // hydrated.\n    const root = document.getElementById(PREFERENCES_PAGE_ROOT_ID)\n    if (root) {\n        createRoot(root).render(<EmailNotificationsPreferencesForm />)\n    }\n}\n\n// Baked instead of the new form when the EmailNotifications feature flag is\n// off.\nfunction hydrateOldSubscribePage() {\n    const container = document.getElementById(\n        OLD_SUBSCRIBE_PAGE_FORM_CONTAINER_ID\n    )\n    if (container) {\n        hydrateRoot(\n            container,\n            <MailchimpSubscriptionForm\n                context={NewsletterSubscriptionContext.SubscribePage}\n            />\n        )\n    }\n}\n\nfunction hydrateSlideshowPage() {\n    const props = (window as any)[_OWID_SLIDESHOW_PROPS]\n    const container = document.querySelector(\"#slideshow-page-container\")\n    if (container && props) {\n        hydrateRoot(container, <SlideshowPresentation {...props} />)\n    }\n}\n\nfunction runLatestPage() {\n    const root = document.getElementById(\"latest-page-root\")\n    const topicTagGraph = window._OWID_TOPIC_TAG_GRAPH\n    if (root) {\n        createRoot(root).render(\n            <BrowserRouter>\n                <LatestSearchWrapper topicTagGraph={topicTagGraph} />\n            </BrowserRouter>\n        )\n    }\n}\n\nfunction hydrateDataPageV2Content({\n    isPreviewing,\n}: { isPreviewing?: boolean } = {}) {\n    const wrapper = document.querySelector(`#${OWID_DATAPAGE_CONTENT_ROOT_ID}`)\n    const props: DataPageV2ContentFields = window._OWID_DATAPAGEV2_PROPS\n    const grapherConfig = window._OWID_GRAPHER_CONFIG\n\n    if (!wrapper) return\n    hydrateRoot(\n        wrapper,\n        <DebugProvider debug={isPreviewing}>\n            <DataPageV2Content\n                {...props}\n                grapherConfig={grapherConfig}\n                isPreviewing={isPreviewing}\n                archiveContext={window._OWID_ARCHIVE_CONTEXT}\n            />\n        </DebugProvider>\n    )\n}\n\nfunction hydrateExplorerIndex() {\n    const explorerIndexPageProps = (window as any)[\n        __OWID_EXPLORER_INDEX_PAGE_PROPS\n    ]\n\n    if (!explorerIndexPageProps) return\n    const container = document.querySelector(\".explorer-index-page\")\n    if (!container) return\n    hydrateRoot(container, <ExplorerIndex {...explorerIndexPageProps} />)\n}\n\nfunction runCookiePreferencesManager() {\n    if (REDUCED_TRACKING) return\n\n    const div = document.createElement(\"div\")\n    document.body.appendChild(div)\n\n    const root = createRoot(div)\n    root.render(<CookiePreferencesManager initialState={getInitialState()} />)\n}\n\nconst USER_SURVEY_ROOT_ID = \"user-survey-root\"\n\nfunction runUserSurveyWidget() {\n    if (isInIFrame()) return\n    if (window._OWID_ARCHIVE_CONTEXT?.type === \"archive-page\") return\n    if (document.getElementById(USER_SURVEY_ROOT_ID)) return\n\n    const div = document.createElement(\"div\")\n    div.id = USER_SURVEY_ROOT_ID\n    document.body.appendChild(div)\n    createRoot(div).render(<UserSurvey />)\n}\n\nfunction runSiteNavigation({\n    hideDonationFlag,\n    isPreviewing,\n}: {\n    hideDonationFlag?: boolean\n    isPreviewing?: boolean\n} = {}) {\n    const siteNavigationElem = document.querySelector(\".site-navigation-root\")\n    if (siteNavigationElem) {\n        let isOnHomepage = false\n        if (window._OWID_GDOC_PROPS) {\n            const props = deserializeOwidGdocPageData(window._OWID_GDOC_PROPS)\n            isOnHomepage = props?.content?.type === OwidGdocType.Homepage\n        }\n\n        let archiveInfo: ArchiveMetaInformation | undefined\n        if (window._OWID_ARCHIVE_CONTEXT) {\n            archiveInfo = window._OWID_ARCHIVE_CONTEXT\n        }\n\n        const root = createRoot(siteNavigationElem)\n        root.render(\n            <SiteHeaderNavigation\n                hideDonationFlag={hideDonationFlag}\n                isOnHomepage={isOnHomepage}\n                archiveInfo={\n                    archiveInfo?.type === \"archive-page\"\n                        ? archiveInfo\n                        : undefined\n                }\n                isPreviewing={isPreviewing}\n            />\n        )\n    }\n}\n\nfunction runSiteTools() {\n    if (isInIFrame()) return\n    const siteToolsElem = document.querySelector(`.${SITE_TOOLS_ROOT_CLASS}`)\n    if (siteToolsElem) {\n        const root = createRoot(siteToolsElem)\n        root.render(<SiteTools />)\n    }\n}\n\nconst hydrateOwidGdoc = (debug?: boolean, isPreviewing?: boolean) => {\n    const wrapper = document.querySelector(\"#owid-document-root\")\n    if (!wrapper) return\n    const props = deserializeOwidGdocPageData(window._OWID_GDOC_PROPS)\n    hydrateRoot(\n        wrapper,\n        <AriaAnnouncerProvider>\n            <DebugProvider debug={debug}>\n                <OwidGdoc\n                    {...props}\n                    isPreviewing={isPreviewing}\n                    archiveContext={window._OWID_ARCHIVE_CONTEXT}\n                />\n            </DebugProvider>\n            <AriaAnnouncer />\n        </AriaAnnouncerProvider>\n    )\n}\n\nconst hydrateMultiDimDataPageContent = (isPreviewing?: boolean) => {\n    const wrapper = document.querySelector(`#${OWID_DATAPAGE_CONTENT_ROOT_ID}`)\n    const { configObj, ...props }: MultiDimDataPageData =\n        window._OWID_MULTI_DIM_PROPS!\n\n    if (!wrapper) return\n    hydrateRoot(\n        wrapper,\n        <DebugProvider debug={isPreviewing}>\n            <BrowserRouter>\n                <MultiDimDataPageContent\n                    config={MultiDimDataPageConfig.fromObject(configObj)}\n                    {...props}\n                    isPreviewing={isPreviewing}\n                    archiveContext={window._OWID_ARCHIVE_CONTEXT}\n                />\n            </BrowserRouter>\n        </DebugProvider>\n    )\n}\n\ninterface SiteFooterScriptsArgs {\n    debug?: boolean\n    isPreviewing?: boolean\n    context?: SiteFooterContext\n    container?: HTMLElement\n    hideDonationFlag?: boolean\n}\n\nexport const runSiteFooterScriptsForArchive = (args: SiteFooterScriptsArgs) => {\n    const { debug, context, isPreviewing } = args || {}\n\n    switch (context) {\n        case SiteFooterContext.dataPageV2:\n            hydrateDataPageV2Content({ isPreviewing })\n            runSiteNavigation({ isPreviewing })\n            // runSiteTools()\n            // runCookiePreferencesManager()\n            void runDetailsOnDemand()\n            break\n        case SiteFooterContext.multiDimDataPage:\n            hydrateMultiDimDataPageContent(isPreviewing)\n            runSiteNavigation({ isPreviewing })\n            // runSiteTools()\n            // runCookiePreferencesManager()\n            void runDetailsOnDemand()\n            break\n        case SiteFooterContext.grapherPage:\n        case SiteFooterContext.explorerPage:\n            runSiteNavigation({ isPreviewing })\n            // runSiteTools()\n            // runCookiePreferencesManager()\n            void runDetailsOnDemand()\n            break\n        case SiteFooterContext.gdocsDocument:\n            hydrateOwidGdoc(debug, isPreviewing)\n            runSiteNavigation({ isPreviewing })\n            void runDetailsOnDemand()\n            // runSiteTools()\n            // runCookiePreferencesManager()\n            break\n        default:\n            console.error(\n                `runSiteFooterScriptsForArchive: context ${context} not supported`\n            )\n            throw new Error(`Unsupported context: ${context}`)\n    }\n}\n\nexport const runSiteFooterScripts = async (\n    args: SiteFooterScriptsArgs | undefined\n) => {\n    // We used to destructure this in the function signature, but that caused\n    // a weird issue reported by bugsnag: https://app.bugsnag.com/our-world-in-data/our-world-in-data-website/errors/63ca39b631e8660009464eb4?event_id=63d384c500acc25fc0810000&i=sk&m=ef\n    // So now we define the object as potentially undefined and then destructure it here.\n    const { debug, context, isPreviewing, hideDonationFlag } = args || {}\n\n    switch (context) {\n        case SiteFooterContext.dataPageV2:\n            hydrateDataPageV2Content({ isPreviewing })\n            runSiteNavigation({ hideDonationFlag, isPreviewing })\n            runSiteTools()\n            runCookiePreferencesManager()\n            runUserSurveyWidget()\n            void runDetailsOnDemand()\n            break\n        case SiteFooterContext.multiDimDataPage:\n            hydrateMultiDimDataPageContent(isPreviewing)\n            runSiteNavigation({ hideDonationFlag, isPreviewing })\n            runSiteTools()\n            runCookiePreferencesManager()\n            runUserSurveyWidget()\n            void runDetailsOnDemand()\n            break\n        case SiteFooterContext.grapherPage:\n        case SiteFooterContext.explorerPage:\n            runSiteNavigation({ hideDonationFlag, isPreviewing })\n            runSiteTools()\n            runCookiePreferencesManager()\n            runUserSurveyWidget()\n            void runDetailsOnDemand()\n            break\n        case SiteFooterContext.explorerIndexPage:\n            hydrateExplorerIndex()\n            runSiteNavigation({ isPreviewing })\n            runCookiePreferencesManager()\n            runSiteTools()\n            break\n        case SiteFooterContext.gdocsDocument:\n            hydrateOwidGdoc(debug, isPreviewing)\n            runSiteNavigation({ hideDonationFlag, isPreviewing })\n            void runDetailsOnDemand()\n            runSiteTools()\n            runCookiePreferencesManager()\n            runUserSurveyWidget()\n            break\n        case SiteFooterContext.latestPage:\n            runLatestPage()\n            runSiteNavigation({ hideDonationFlag, isPreviewing })\n            runSiteTools()\n            runCookiePreferencesManager()\n            void runDetailsOnDemand()\n            break\n        case SiteFooterContext.dynamicCollectionPage:\n            // Don't break, run default case too\n            hydrateDynamicCollectionPage()\n        // falls through\n        case SiteFooterContext.searchPage:\n            runSearchPage()\n        // falls through\n        case SiteFooterContext.slideshowPage:\n            hydrateSlideshowPage()\n        // falls through\n        case SiteFooterContext.subscribePage:\n            hydrateSubscribePage()\n            renderEmailNotificationsPreferencesPage()\n            hydrateOldSubscribePage()\n        // falls through\n        default:\n            // Features that were not ported over to gdocs, are only being run on WP pages:\n            // - embedding charts through MultiEmbedderSingleton.embedAll()\n            runSiteNavigation({ hideDonationFlag, isPreviewing })\n            hydrateCodeSnippets()\n            MultiEmbedderSingleton.embedAll(isPreviewing)\n            runSiteTools()\n            runCookiePreferencesManager()\n            void runDetailsOnDemand()\n            break\n    }\n}\n","// Polyfills must be loaded before all other code.\nimport \"@ourworldindata/utils/src/polyfills.js\"\n\n// This should be imported as early as possible so the global error handler is\n// set up before any errors are thrown.\nimport \"./instrument.js\"\n\nimport \"@ourworldindata/grapher/src/core/grapher.scss\"\nimport \"./owid.scss\"\n// From https://fontawesome.com/how-to-use/on-the-web/other-topics/server-side-rendering:\n// \"If the CSS is missing when this icon displays in the browser it will flash\n// from a very large icon down to a properly sized one a moment later.\"\nimport \"@fortawesome/fontawesome-svg-core/styles.css\"\n\nimport React from \"react\"\nimport { createRoot } from \"react-dom/client\"\nimport { runNotFoundPage } from \"./NotFoundPageMain.js\"\nimport { runFeedbackPage } from \"./FeedbackPageMain.js\"\nimport { runDonateForm } from \"./runDonateForm.js\"\nimport { Explorer } from \"@ourworldindata/explorer\"\nimport { ENV } from \"../settings/clientSettings.mjs\"\nimport {\n    Grapher,\n    renderSingleGrapherOnGrapherPage,\n    GrapherState,\n} from \"@ourworldindata/grapher\"\nimport { MultiEmbedderSingleton } from \"../site/multiembedder/MultiEmbedder.js\"\nimport { CoreTable, OwidTable } from \"@ourworldindata/core-table\"\nimport { SiteAnalytics } from \"./SiteAnalytics.js\"\nimport { runMonkeyPatchForGoogleTranslate } from \"./hacks.js\"\nimport { runSiteFooterScripts } from \"./runSiteFooterScripts.js\"\n\ndeclare let window: any\nwindow.Grapher = Grapher\nwindow.GrapherState = GrapherState\nwindow.Explorer = Explorer\nwindow.CoreTable = CoreTable\nwindow.OwidTable = OwidTable\nwindow.React = React\nwindow.createRoot = createRoot\nwindow.runNotFoundPage = runNotFoundPage\nwindow.runFeedbackPage = runFeedbackPage\nwindow.runDonateForm = runDonateForm\nwindow.renderSingleGrapherOnGrapherPage = renderSingleGrapherOnGrapherPage\nwindow.MultiEmbedderSingleton = MultiEmbedderSingleton\n\n// Note: do a text search of the project for \"runSiteFooterScripts\" to find the usage. todo: clean that up.\nwindow.runSiteFooterScripts = runSiteFooterScripts\n\nrunMonkeyPatchForGoogleTranslate()\n\nconst analytics = new SiteAnalytics(ENV)\n\ndocument.documentElement?.classList.add(\"js-loaded\")\n\nanalytics.startClickTracking()\nanalytics.startDetectingBrowserTranslation()\nanalytics.startPrintTracking()\nanalytics.startFindInPageTracking()\n"],"file":"owid.mjs"}